[Python-checkins] cpython: PEP 0492 -- Coroutines with async and await syntax. Issue #24017.

yury.selivanov python-checkins at python.org
Tue May 12 05:03:20 CEST 2015


https://hg.python.org/cpython/rev/eeeb666a5365
changeset:   95969:eeeb666a5365
parent:      95967:50698bb955b0
user:        Yury Selivanov <yselivanov at sprymix.com>
date:        Mon May 11 22:57:16 2015 -0400
summary:
  PEP 0492 -- Coroutines with async and await syntax. Issue #24017.

files:
  Doc/includes/typestruct.h        |     2 +-
  Doc/library/dis.rst              |    42 +-
  Grammar/Grammar                  |    11 +-
  Include/Python-ast.h             |    59 +-
  Include/ceval.h                  |     2 +
  Include/code.h                   |     5 +
  Include/genobject.h              |     7 +
  Include/graminit.h               |   155 +-
  Include/object.h                 |    11 +-
  Include/opcode.h                 |   130 +-
  Include/pyerrors.h               |     1 +
  Include/pystate.h                |     2 +
  Include/token.h                  |     6 +-
  Include/typeslots.h              |     3 +
  Lib/_collections_abc.py          |    76 +-
  Lib/dis.py                       |     2 +
  Lib/inspect.py                   |    26 +-
  Lib/lib2to3/Grammar.txt          |     8 +-
  Lib/lib2to3/pgen2/token.py       |     6 +-
  Lib/lib2to3/pgen2/tokenize.py    |    63 +-
  Lib/lib2to3/tests/test_parser.py |    32 +-
  Lib/opcode.py                    |    10 +-
  Lib/test/badsyntax_async1.py     |     3 +
  Lib/test/badsyntax_async2.py     |     3 +
  Lib/test/badsyntax_async3.py     |     2 +
  Lib/test/badsyntax_async4.py     |     2 +
  Lib/test/badsyntax_async5.py     |     2 +
  Lib/test/badsyntax_async6.py     |     2 +
  Lib/test/badsyntax_async7.py     |     2 +
  Lib/test/badsyntax_async8.py     |     2 +
  Lib/test/badsyntax_async9.py     |     2 +
  Lib/test/exception_hierarchy.txt |     1 +
  Lib/test/test_ast.py             |     9 +
  Lib/test/test_collections.py     |    80 +
  Lib/test/test_coroutines.py      |   862 +++
  Lib/test/test_dis.py             |    46 +-
  Lib/test/test_grammar.py         |    87 +
  Lib/test/test_inspect.py         |    72 +-
  Lib/test/test_minidom.py         |    15 +
  Lib/test/test_parser.py          |    16 +
  Lib/test/test_pickle.py          |     4 +-
  Lib/test/test_sys.py             |     4 +-
  Lib/test/test_tokenize.py        |   186 +
  Lib/test/test_types.py           |    35 +-
  Lib/token.py                     |     6 +-
  Lib/tokenize.py                  |    56 +-
  Lib/types.py                     |    24 +
  Lib/xml/dom/xmlbuilder.py        |    26 +-
  Modules/_testcapimodule.c        |    97 +
  Modules/parsermodule.c           |   117 +-
  Objects/exceptions.c             |     9 +
  Objects/frameobject.c            |     8 +-
  Objects/genobject.c              |   102 +-
  Objects/typeobject.c             |    91 +-
  Objects/typeslots.inc            |     3 +
  Objects/typeslots.py             |     2 +
  Parser/Python.asdl               |     8 +-
  Parser/tokenizer.c               |    68 +
  Parser/tokenizer.h               |     7 +
  Python/Python-ast.c              |   473 +
  Python/ast.c                     |   174 +-
  Python/ceval.c                   |   231 +-
  Python/compile.c                 |   290 +-
  Python/graminit.c                |  3110 +++++-----
  Python/importlib.h               |  3484 ++++++------
  Python/importlib_external.h      |  4765 +++++++++--------
  Python/opcode_targets.h          |    14 +-
  Python/peephole.c                |     3 +
  Python/pystate.c                 |     4 +
  Python/symtable.c                |    49 +-
  Python/sysmodule.c               |    47 +
  Tools/parser/unparse.py          |    32 +-
  72 files changed, 9459 insertions(+), 5937 deletions(-)


diff --git a/Doc/includes/typestruct.h b/Doc/includes/typestruct.h
--- a/Doc/includes/typestruct.h
+++ b/Doc/includes/typestruct.h
@@ -9,7 +9,7 @@
     printfunc tp_print;
     getattrfunc tp_getattr;
     setattrfunc tp_setattr;
-    void *tp_reserved;
+    PyAsyncMethods *tp_as_async;
     reprfunc tp_repr;
 
     /* Method suites for standard classes */
diff --git a/Doc/library/dis.rst b/Doc/library/dis.rst
--- a/Doc/library/dis.rst
+++ b/Doc/library/dis.rst
@@ -508,6 +508,38 @@
    Implements ``del TOS1[TOS]``.
 
 
+**Coroutines opcodes**
+
+.. opcode:: GET_AWAITABLE
+
+   Implements ``TOS = get_awaitable(TOS)``; where ``get_awaitable(o)``
+   returns ``o`` if ``o`` is a coroutine object; or resolved ``o.__await__``.
+
+
+.. opcode:: GET_AITER
+
+   Implements ``TOS = get_awaitable(TOS.__aiter__())``.  See ``GET_AWAITABLE``
+   for details about ``get_awaitable``
+
+
+.. opcode:: GET_ANEXT
+
+   Implements ``PUSH(get_awaitable(TOS.__anext__()))``.  See ``GET_AWAITABLE``
+   for details about ``get_awaitable``
+
+
+.. opcode:: BEFORE_ASYNC_WITH
+
+   Resolves ``__aenter__`` and ``__aexit__`` from the object on top of the
+   stack.  Pushes ``__aexit__`` and result of ``__aenter__()`` to the stack.
+
+
+.. opcode:: SETUP_ASYNC_WITH
+
+   Creates a new frame object.
+
+
+
 **Miscellaneous opcodes**
 
 .. opcode:: PRINT_EXPR
@@ -612,7 +644,7 @@
    :opcode:`UNPACK_SEQUENCE`).
 
 
-.. opcode:: WITH_CLEANUP
+.. opcode:: WITH_CLEANUP_START
 
    Cleans up the stack when a :keyword:`with` statement block exits.  TOS is the
    context manager's :meth:`__exit__` bound method. Below TOS are 1--3 values
@@ -624,7 +656,13 @@
    * (SECOND, THIRD, FOURTH) = exc_info()
 
    In the last case, ``TOS(SECOND, THIRD, FOURTH)`` is called, otherwise
-   ``TOS(None, None, None)``.  In addition, TOS is removed from the stack.
+   ``TOS(None, None, None)``.  Pushes SECOND and result of the call
+   to the stack.
+
+
+.. opcode:: WITH_CLEANUP_FINISH
+
+   Pops exception type and result of 'exit' function call from the stack.
 
    If the stack represents an exception, *and* the function call returns a
    'true' value, this information is "zapped" and replaced with a single
diff --git a/Grammar/Grammar b/Grammar/Grammar
--- a/Grammar/Grammar
+++ b/Grammar/Grammar
@@ -21,8 +21,11 @@
 
 decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE
 decorators: decorator+
-decorated: decorators (classdef | funcdef)
+decorated: decorators (classdef | funcdef | async_funcdef)
+
+async_funcdef: ASYNC funcdef
 funcdef: 'def' NAME parameters ['->' test] ':' suite
+
 parameters: '(' [typedargslist] ')'
 typedargslist: (tfpdef ['=' test] (',' tfpdef ['=' test])* [','
        ['*' [tfpdef] (',' tfpdef ['=' test])* [',' '**' tfpdef] | '**' tfpdef]]
@@ -65,7 +68,8 @@
 nonlocal_stmt: 'nonlocal' NAME (',' NAME)*
 assert_stmt: 'assert' test [',' test]
 
-compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated
+compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated | async_stmt
+async_stmt: ASYNC (funcdef | with_stmt | for_stmt)
 if_stmt: 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite]
 while_stmt: 'while' test ':' suite ['else' ':' suite]
 for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite]
@@ -99,7 +103,8 @@
 arith_expr: term (('+'|'-') term)*
 term: factor (('*'|'@'|'/'|'%'|'//') factor)*
 factor: ('+'|'-'|'~') factor | power
-power: atom trailer* ['**' factor]
+power: atom_expr ['**' factor]
+atom_expr: [AWAIT] atom trailer*
 atom: ('(' [yield_expr|testlist_comp] ')' |
        '[' [testlist_comp] ']' |
        '{' [dictorsetmaker] '}' |
diff --git a/Include/Python-ast.h b/Include/Python-ast.h
--- a/Include/Python-ast.h
+++ b/Include/Python-ast.h
@@ -63,12 +63,13 @@
     } v;
 };
 
-enum _stmt_kind {FunctionDef_kind=1, ClassDef_kind=2, Return_kind=3,
-                  Delete_kind=4, Assign_kind=5, AugAssign_kind=6, For_kind=7,
-                  While_kind=8, If_kind=9, With_kind=10, Raise_kind=11,
-                  Try_kind=12, Assert_kind=13, Import_kind=14,
-                  ImportFrom_kind=15, Global_kind=16, Nonlocal_kind=17,
-                  Expr_kind=18, Pass_kind=19, Break_kind=20, Continue_kind=21};
+enum _stmt_kind {FunctionDef_kind=1, AsyncFunctionDef_kind=2, ClassDef_kind=3,
+                  Return_kind=4, Delete_kind=5, Assign_kind=6,
+                  AugAssign_kind=7, For_kind=8, AsyncFor_kind=9, While_kind=10,
+                  If_kind=11, With_kind=12, AsyncWith_kind=13, Raise_kind=14,
+                  Try_kind=15, Assert_kind=16, Import_kind=17,
+                  ImportFrom_kind=18, Global_kind=19, Nonlocal_kind=20,
+                  Expr_kind=21, Pass_kind=22, Break_kind=23, Continue_kind=24};
 struct _stmt {
     enum _stmt_kind kind;
     union {
@@ -82,6 +83,14 @@
         
         struct {
             identifier name;
+            arguments_ty args;
+            asdl_seq *body;
+            asdl_seq *decorator_list;
+            expr_ty returns;
+        } AsyncFunctionDef;
+        
+        struct {
+            identifier name;
             asdl_seq *bases;
             asdl_seq *keywords;
             asdl_seq *body;
@@ -115,6 +124,13 @@
         } For;
         
         struct {
+            expr_ty target;
+            expr_ty iter;
+            asdl_seq *body;
+            asdl_seq *orelse;
+        } AsyncFor;
+        
+        struct {
             expr_ty test;
             asdl_seq *body;
             asdl_seq *orelse;
@@ -132,6 +148,11 @@
         } With;
         
         struct {
+            asdl_seq *items;
+            asdl_seq *body;
+        } AsyncWith;
+        
+        struct {
             expr_ty exc;
             expr_ty cause;
         } Raise;
@@ -178,11 +199,11 @@
 enum _expr_kind {BoolOp_kind=1, BinOp_kind=2, UnaryOp_kind=3, Lambda_kind=4,
                   IfExp_kind=5, Dict_kind=6, Set_kind=7, ListComp_kind=8,
                   SetComp_kind=9, DictComp_kind=10, GeneratorExp_kind=11,
-                  Yield_kind=12, YieldFrom_kind=13, Compare_kind=14,
-                  Call_kind=15, Num_kind=16, Str_kind=17, Bytes_kind=18,
-                  NameConstant_kind=19, Ellipsis_kind=20, Attribute_kind=21,
-                  Subscript_kind=22, Starred_kind=23, Name_kind=24,
-                  List_kind=25, Tuple_kind=26};
+                  Await_kind=12, Yield_kind=13, YieldFrom_kind=14,
+                  Compare_kind=15, Call_kind=16, Num_kind=17, Str_kind=18,
+                  Bytes_kind=19, NameConstant_kind=20, Ellipsis_kind=21,
+                  Attribute_kind=22, Subscript_kind=23, Starred_kind=24,
+                  Name_kind=25, List_kind=26, Tuple_kind=27};
 struct _expr {
     enum _expr_kind kind;
     union {
@@ -245,6 +266,10 @@
         
         struct {
             expr_ty value;
+        } Await;
+        
+        struct {
+            expr_ty value;
         } Yield;
         
         struct {
@@ -402,6 +427,10 @@
 stmt_ty _Py_FunctionDef(identifier name, arguments_ty args, asdl_seq * body,
                         asdl_seq * decorator_list, expr_ty returns, int lineno,
                         int col_offset, PyArena *arena);
+#define AsyncFunctionDef(a0, a1, a2, a3, a4, a5, a6, a7) _Py_AsyncFunctionDef(a0, a1, a2, a3, a4, a5, a6, a7)
+stmt_ty _Py_AsyncFunctionDef(identifier name, arguments_ty args, asdl_seq *
+                             body, asdl_seq * decorator_list, expr_ty returns,
+                             int lineno, int col_offset, PyArena *arena);
 #define ClassDef(a0, a1, a2, a3, a4, a5, a6, a7) _Py_ClassDef(a0, a1, a2, a3, a4, a5, a6, a7)
 stmt_ty _Py_ClassDef(identifier name, asdl_seq * bases, asdl_seq * keywords,
                      asdl_seq * body, asdl_seq * decorator_list, int lineno,
@@ -420,6 +449,9 @@
 #define For(a0, a1, a2, a3, a4, a5, a6) _Py_For(a0, a1, a2, a3, a4, a5, a6)
 stmt_ty _Py_For(expr_ty target, expr_ty iter, asdl_seq * body, asdl_seq *
                 orelse, int lineno, int col_offset, PyArena *arena);
+#define AsyncFor(a0, a1, a2, a3, a4, a5, a6) _Py_AsyncFor(a0, a1, a2, a3, a4, a5, a6)
+stmt_ty _Py_AsyncFor(expr_ty target, expr_ty iter, asdl_seq * body, asdl_seq *
+                     orelse, int lineno, int col_offset, PyArena *arena);
 #define While(a0, a1, a2, a3, a4, a5) _Py_While(a0, a1, a2, a3, a4, a5)
 stmt_ty _Py_While(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno,
                   int col_offset, PyArena *arena);
@@ -429,6 +461,9 @@
 #define With(a0, a1, a2, a3, a4) _Py_With(a0, a1, a2, a3, a4)
 stmt_ty _Py_With(asdl_seq * items, asdl_seq * body, int lineno, int col_offset,
                  PyArena *arena);
+#define AsyncWith(a0, a1, a2, a3, a4) _Py_AsyncWith(a0, a1, a2, a3, a4)
+stmt_ty _Py_AsyncWith(asdl_seq * items, asdl_seq * body, int lineno, int
+                      col_offset, PyArena *arena);
 #define Raise(a0, a1, a2, a3, a4) _Py_Raise(a0, a1, a2, a3, a4)
 stmt_ty _Py_Raise(expr_ty exc, expr_ty cause, int lineno, int col_offset,
                   PyArena *arena);
@@ -491,6 +526,8 @@
 #define GeneratorExp(a0, a1, a2, a3, a4) _Py_GeneratorExp(a0, a1, a2, a3, a4)
 expr_ty _Py_GeneratorExp(expr_ty elt, asdl_seq * generators, int lineno, int
                          col_offset, PyArena *arena);
+#define Await(a0, a1, a2, a3) _Py_Await(a0, a1, a2, a3)
+expr_ty _Py_Await(expr_ty value, int lineno, int col_offset, PyArena *arena);
 #define Yield(a0, a1, a2, a3) _Py_Yield(a0, a1, a2, a3)
 expr_ty _Py_Yield(expr_ty value, int lineno, int col_offset, PyArena *arena);
 #define YieldFrom(a0, a1, a2, a3) _Py_YieldFrom(a0, a1, a2, a3)
diff --git a/Include/ceval.h b/Include/ceval.h
--- a/Include/ceval.h
+++ b/Include/ceval.h
@@ -23,6 +23,8 @@
 #ifndef Py_LIMITED_API
 PyAPI_FUNC(void) PyEval_SetProfile(Py_tracefunc, PyObject *);
 PyAPI_FUNC(void) PyEval_SetTrace(Py_tracefunc, PyObject *);
+PyAPI_FUNC(void) PyEval_SetCoroutineWrapper(PyObject *wrapper);
+PyAPI_FUNC(PyObject *) PyEval_GetCoroutineWrapper();
 #endif
 
 struct _frame; /* Avoid including frameobject.h */
diff --git a/Include/code.h b/Include/code.h
--- a/Include/code.h
+++ b/Include/code.h
@@ -51,6 +51,11 @@
 */
 #define CO_NOFREE       0x0040
 
+/* The CO_COROUTINE flag is set for coroutine functions (defined with
+   ``async def`` keywords) */
+#define CO_COROUTINE            0x0080
+#define CO_ITERABLE_COROUTINE   0x0100
+
 /* These are no longer used. */
 #if 0
 #define CO_GENERATOR_ALLOWED    0x1000
diff --git a/Include/genobject.h b/Include/genobject.h
--- a/Include/genobject.h
+++ b/Include/genobject.h
@@ -38,6 +38,12 @@
 #define PyGen_Check(op) PyObject_TypeCheck(op, &PyGen_Type)
 #define PyGen_CheckExact(op) (Py_TYPE(op) == &PyGen_Type)
 
+#define PyGen_CheckCoroutineExact(op) (PyGen_CheckExact(op) && \
+                                       (((PyCodeObject*) \
+                                           ((PyGenObject*)op)->gi_code) \
+                                         ->co_flags & (CO_ITERABLE_COROUTINE | \
+                                                       CO_COROUTINE)))
+
 PyAPI_FUNC(PyObject *) PyGen_New(struct _frame *);
 PyAPI_FUNC(PyObject *) PyGen_NewWithQualName(struct _frame *,
     PyObject *name, PyObject *qualname);
@@ -46,6 +52,7 @@
 PyObject *_PyGen_Send(PyGenObject *, PyObject *);
 PyAPI_FUNC(void) _PyGen_Finalize(PyObject *self);
 
+PyObject *_PyGen_GetAwaitableIter(PyObject *o);
 
 #ifdef __cplusplus
 }
diff --git a/Include/graminit.h b/Include/graminit.h
--- a/Include/graminit.h
+++ b/Include/graminit.h
@@ -6,79 +6,82 @@
 #define decorator 259
 #define decorators 260
 #define decorated 261
-#define funcdef 262
-#define parameters 263
-#define typedargslist 264
-#define tfpdef 265
-#define varargslist 266
-#define vfpdef 267
-#define stmt 268
-#define simple_stmt 269
-#define small_stmt 270
-#define expr_stmt 271
-#define testlist_star_expr 272
-#define augassign 273
-#define del_stmt 274
-#define pass_stmt 275
-#define flow_stmt 276
-#define break_stmt 277
-#define continue_stmt 278
-#define return_stmt 279
-#define yield_stmt 280
-#define raise_stmt 281
-#define import_stmt 282
-#define import_name 283
-#define import_from 284
-#define import_as_name 285
-#define dotted_as_name 286
-#define import_as_names 287
-#define dotted_as_names 288
-#define dotted_name 289
-#define global_stmt 290
-#define nonlocal_stmt 291
-#define assert_stmt 292
-#define compound_stmt 293
-#define if_stmt 294
-#define while_stmt 295
-#define for_stmt 296
-#define try_stmt 297
-#define with_stmt 298
-#define with_item 299
-#define except_clause 300
-#define suite 301
-#define test 302
-#define test_nocond 303
-#define lambdef 304
-#define lambdef_nocond 305
-#define or_test 306
-#define and_test 307
-#define not_test 308
-#define comparison 309
-#define comp_op 310
-#define star_expr 311
-#define expr 312
-#define xor_expr 313
-#define and_expr 314
-#define shift_expr 315
-#define arith_expr 316
-#define term 317
-#define factor 318
-#define power 319
-#define atom 320
-#define testlist_comp 321
-#define trailer 322
-#define subscriptlist 323
-#define subscript 324
-#define sliceop 325
-#define exprlist 326
-#define testlist 327
-#define dictorsetmaker 328
-#define classdef 329
-#define arglist 330
-#define argument 331
-#define comp_iter 332
-#define comp_for 333
-#define comp_if 334
-#define encoding_decl 335
-#define yield_expr 336
-#define yield_arg 337
+#define async_funcdef 262
+#define funcdef 263
+#define parameters 264
+#define typedargslist 265
+#define tfpdef 266
+#define varargslist 267
+#define vfpdef 268
+#define stmt 269
+#define simple_stmt 270
+#define small_stmt 271
+#define expr_stmt 272
+#define testlist_star_expr 273
+#define augassign 274
+#define del_stmt 275
+#define pass_stmt 276
+#define flow_stmt 277
+#define break_stmt 278
+#define continue_stmt 279
+#define return_stmt 280
+#define yield_stmt 281
+#define raise_stmt 282
+#define import_stmt 283
+#define import_name 284
+#define import_from 285
+#define import_as_name 286
+#define dotted_as_name 287
+#define import_as_names 288
+#define dotted_as_names 289
+#define dotted_name 290
+#define global_stmt 291
+#define nonlocal_stmt 292
+#define assert_stmt 293
+#define compound_stmt 294
+#define async_stmt 295
+#define if_stmt 296
+#define while_stmt 297
+#define for_stmt 298
+#define try_stmt 299
+#define with_stmt 300
+#define with_item 301
+#define except_clause 302
+#define suite 303
+#define test 304
+#define test_nocond 305
+#define lambdef 306
+#define lambdef_nocond 307
+#define or_test 308
+#define and_test 309
+#define not_test 310
+#define comparison 311
+#define comp_op 312
+#define star_expr 313
+#define expr 314
+#define xor_expr 315
+#define and_expr 316
+#define shift_expr 317
+#define arith_expr 318
+#define term 319
+#define factor 320
+#define power 321
+#define atom_expr 322
+#define atom 323
+#define testlist_comp 324
+#define trailer 325
+#define subscriptlist 326
+#define subscript 327
+#define sliceop 328
+#define exprlist 329
+#define testlist 330
+#define dictorsetmaker 331
+#define classdef 332
+#define arglist 333
+#define argument 334
+#define comp_iter 335
+#define comp_for 336
+#define comp_if 337
+#define encoding_decl 338
+#define yield_expr 339
+#define yield_arg 340
diff --git a/Include/object.h b/Include/object.h
--- a/Include/object.h
+++ b/Include/object.h
@@ -173,6 +173,9 @@
 typedef int(*ssizeobjargproc)(PyObject *, Py_ssize_t, PyObject *);
 typedef int(*ssizessizeobjargproc)(PyObject *, Py_ssize_t, Py_ssize_t, PyObject *);
 typedef int(*objobjargproc)(PyObject *, PyObject *, PyObject *);
+typedef PyObject *(*getawaitablefunc) (PyObject *);
+typedef PyObject *(*getaiterfunc) (PyObject *);
+typedef PyObject *(*aiternextfunc) (PyObject *);
 
 #ifndef Py_LIMITED_API
 /* buffer interface */
@@ -301,6 +304,11 @@
     objobjargproc mp_ass_subscript;
 } PyMappingMethods;
 
+typedef struct {
+    getawaitablefunc am_await;
+    getaiterfunc am_aiter;
+    aiternextfunc am_anext;
+} PyAsyncMethods;
 
 typedef struct {
      getbufferproc bf_getbuffer;
@@ -346,7 +354,7 @@
     printfunc tp_print;
     getattrfunc tp_getattr;
     setattrfunc tp_setattr;
-    void *tp_reserved; /* formerly known as tp_compare */
+    PyAsyncMethods *tp_as_async; /* formerly known as tp_compare or tp_reserved */
     reprfunc tp_repr;
 
     /* Method suites for standard classes */
@@ -453,6 +461,7 @@
     /* Note: there's a dependency on the order of these members
        in slotptr() in typeobject.c . */
     PyTypeObject ht_type;
+    PyAsyncMethods as_async;
     PyNumberMethods as_number;
     PyMappingMethods as_mapping;
     PySequenceMethods as_sequence; /* as_sequence comes after as_mapping,
diff --git a/Include/opcode.h b/Include/opcode.h
--- a/Include/opcode.h
+++ b/Include/opcode.h
@@ -7,68 +7,73 @@
 
 
     /* Instruction opcodes for compiled code */
-#define POP_TOP             	1  
-#define ROT_TWO             	2  
-#define ROT_THREE           	3  
-#define DUP_TOP             	4  
-#define DUP_TOP_TWO         	5  
-#define NOP                 	9  
-#define UNARY_POSITIVE      	10 
-#define UNARY_NEGATIVE      	11 
-#define UNARY_NOT           	12 
-#define UNARY_INVERT        	15 
-#define BINARY_MATRIX_MULTIPLY	16 
-#define INPLACE_MATRIX_MULTIPLY	17 
-#define BINARY_POWER        	19 
-#define BINARY_MULTIPLY     	20 
-#define BINARY_MODULO       	22 
-#define BINARY_ADD          	23 
-#define BINARY_SUBTRACT     	24 
-#define BINARY_SUBSCR       	25 
-#define BINARY_FLOOR_DIVIDE 	26 
-#define BINARY_TRUE_DIVIDE  	27 
-#define INPLACE_FLOOR_DIVIDE	28 
-#define INPLACE_TRUE_DIVIDE 	29 
-#define STORE_MAP           	54 
-#define INPLACE_ADD         	55 
-#define INPLACE_SUBTRACT    	56 
-#define INPLACE_MULTIPLY    	57 
-#define INPLACE_MODULO      	59 
-#define STORE_SUBSCR        	60 
-#define DELETE_SUBSCR       	61 
-#define BINARY_LSHIFT       	62 
-#define BINARY_RSHIFT       	63 
-#define BINARY_AND          	64 
-#define BINARY_XOR          	65 
-#define BINARY_OR           	66 
-#define INPLACE_POWER       	67 
-#define GET_ITER            	68 
-#define PRINT_EXPR          	70 
-#define LOAD_BUILD_CLASS    	71 
-#define YIELD_FROM          	72 
-#define INPLACE_LSHIFT      	75 
-#define INPLACE_RSHIFT      	76 
-#define INPLACE_AND         	77 
-#define INPLACE_XOR         	78 
-#define INPLACE_OR          	79 
-#define BREAK_LOOP          	80 
-#define WITH_CLEANUP        	81 
-#define RETURN_VALUE        	83 
-#define IMPORT_STAR         	84 
-#define YIELD_VALUE         	86 
-#define POP_BLOCK           	87 
-#define END_FINALLY         	88 
-#define POP_EXCEPT          	89 
-#define HAVE_ARGUMENT       	90 
-#define STORE_NAME          	90 
-#define DELETE_NAME         	91 
-#define UNPACK_SEQUENCE     	92 
-#define FOR_ITER            	93 
-#define UNPACK_EX           	94 
-#define STORE_ATTR          	95 
-#define DELETE_ATTR         	96 
-#define STORE_GLOBAL        	97 
-#define DELETE_GLOBAL       	98 
+#define POP_TOP             	1
+#define ROT_TWO             	2
+#define ROT_THREE           	3
+#define DUP_TOP             	4
+#define DUP_TOP_TWO         	5
+#define NOP                 	9
+#define UNARY_POSITIVE      	10
+#define UNARY_NEGATIVE      	11
+#define UNARY_NOT           	12
+#define UNARY_INVERT        	15
+#define BINARY_MATRIX_MULTIPLY	16
+#define INPLACE_MATRIX_MULTIPLY	17
+#define BINARY_POWER        	19
+#define BINARY_MULTIPLY     	20
+#define BINARY_MODULO       	22
+#define BINARY_ADD          	23
+#define BINARY_SUBTRACT     	24
+#define BINARY_SUBSCR       	25
+#define BINARY_FLOOR_DIVIDE 	26
+#define BINARY_TRUE_DIVIDE  	27
+#define INPLACE_FLOOR_DIVIDE	28
+#define INPLACE_TRUE_DIVIDE 	29
+#define GET_AITER           	50
+#define GET_ANEXT           	51
+#define BEFORE_ASYNC_WITH   	52
+#define STORE_MAP           	54
+#define INPLACE_ADD         	55
+#define INPLACE_SUBTRACT    	56
+#define INPLACE_MULTIPLY    	57
+#define INPLACE_MODULO      	59
+#define STORE_SUBSCR        	60
+#define DELETE_SUBSCR       	61
+#define BINARY_LSHIFT       	62
+#define BINARY_RSHIFT       	63
+#define BINARY_AND          	64
+#define BINARY_XOR          	65
+#define BINARY_OR           	66
+#define INPLACE_POWER       	67
+#define GET_ITER            	68
+#define PRINT_EXPR          	70
+#define LOAD_BUILD_CLASS    	71
+#define YIELD_FROM          	72
+#define GET_AWAITABLE       	73
+#define INPLACE_LSHIFT      	75
+#define INPLACE_RSHIFT      	76
+#define INPLACE_AND         	77
+#define INPLACE_XOR         	78
+#define INPLACE_OR          	79
+#define BREAK_LOOP          	80
+#define WITH_CLEANUP_START  	81
+#define WITH_CLEANUP_FINISH   	82
+#define RETURN_VALUE        	83
+#define IMPORT_STAR         	84
+#define YIELD_VALUE         	86
+#define POP_BLOCK           	87
+#define END_FINALLY         	88
+#define POP_EXCEPT          	89
+#define HAVE_ARGUMENT       	90
+#define STORE_NAME          	90
+#define DELETE_NAME         	91
+#define UNPACK_SEQUENCE     	92
+#define FOR_ITER            	93
+#define UNPACK_EX           	94
+#define STORE_ATTR          	95
+#define DELETE_ATTR         	96
+#define STORE_GLOBAL        	97
+#define DELETE_GLOBAL       	98
 #define LOAD_CONST          	100
 #define LOAD_NAME           	101
 #define BUILD_TUPLE         	102
@@ -116,6 +121,7 @@
 #define BUILD_MAP_UNPACK_WITH_CALL	151
 #define BUILD_TUPLE_UNPACK  	152
 #define BUILD_SET_UNPACK    	153
+#define SETUP_ASYNC_WITH    	154
 
 /* EXCEPT_HANDLER is a special, implicit block type which is created when
    entering an except handler. It is not an opcode but we define it here
diff --git a/Include/pyerrors.h b/Include/pyerrors.h
--- a/Include/pyerrors.h
+++ b/Include/pyerrors.h
@@ -147,6 +147,7 @@
 
 PyAPI_DATA(PyObject *) PyExc_BaseException;
 PyAPI_DATA(PyObject *) PyExc_Exception;
+PyAPI_DATA(PyObject *) PyExc_StopAsyncIteration;
 PyAPI_DATA(PyObject *) PyExc_StopIteration;
 PyAPI_DATA(PyObject *) PyExc_GeneratorExit;
 PyAPI_DATA(PyObject *) PyExc_ArithmeticError;
diff --git a/Include/pystate.h b/Include/pystate.h
--- a/Include/pystate.h
+++ b/Include/pystate.h
@@ -134,6 +134,8 @@
     void (*on_delete)(void *);
     void *on_delete_data;
 
+    PyObject *coroutine_wrapper;
+
     /* XXX signal handlers should also be here */
 
 } PyThreadState;
diff --git a/Include/token.h b/Include/token.h
--- a/Include/token.h
+++ b/Include/token.h
@@ -64,8 +64,10 @@
 #define ELLIPSIS        52
 /* Don't forget to update the table _PyParser_TokenNames in tokenizer.c! */
 #define OP		53
-#define ERRORTOKEN	54
-#define N_TOKENS	55
+#define AWAIT		54
+#define ASYNC		55
+#define ERRORTOKEN	56
+#define N_TOKENS	57
 
 /* Special definitions for cooperation with parser */
 
diff --git a/Include/typeslots.h b/Include/typeslots.h
--- a/Include/typeslots.h
+++ b/Include/typeslots.h
@@ -76,3 +76,6 @@
 #define Py_tp_free 74
 #define Py_nb_matrix_multiply 75
 #define Py_nb_inplace_matrix_multiply 76
+#define Py_am_await 77
+#define Py_am_aiter 78
+#define Py_am_anext 79
diff --git a/Lib/_collections_abc.py b/Lib/_collections_abc.py
--- a/Lib/_collections_abc.py
+++ b/Lib/_collections_abc.py
@@ -9,7 +9,8 @@
 from abc import ABCMeta, abstractmethod
 import sys
 
-__all__ = ["Hashable", "Iterable", "Iterator", "Generator",
+__all__ = ["Awaitable", "Coroutine",
+           "Hashable", "Iterable", "Iterator", "Generator",
            "Sized", "Container", "Callable",
            "Set", "MutableSet",
            "Mapping", "MutableMapping",
@@ -74,6 +75,79 @@
         return NotImplemented
 
 
+class _CoroutineMeta(ABCMeta):
+
+    def __instancecheck__(cls, instance):
+        # 0x80 = CO_COROUTINE
+        # 0x100 = CO_ITERABLE_COROUTINE
+        # We don't want to import 'inspect' module, as
+        # a dependency for 'collections.abc'.
+        CO_COROUTINES = 0x80 | 0x100
+
+        if (isinstance(instance, generator) and
+            instance.gi_code.co_flags & CO_COROUTINES):
+
+            return True
+
+        return super().__instancecheck__(instance)
+
+
+class Coroutine(metaclass=_CoroutineMeta):
+
+    __slots__ = ()
+
+    @abstractmethod
+    def send(self, value):
+        """Send a value into the coroutine.
+        Return next yielded value or raise StopIteration.
+        """
+        raise StopIteration
+
+    @abstractmethod
+    def throw(self, typ, val=None, tb=None):
+        """Raise an exception in the coroutine.
+        Return next yielded value or raise StopIteration.
+        """
+        if val is None:
+            if tb is None:
+                raise typ
+            val = typ()
+        if tb is not None:
+            val = val.with_traceback(tb)
+        raise val
+
+    def close(self):
+        """Raise GeneratorExit inside coroutine.
+        """
+        try:
+            self.throw(GeneratorExit)
+        except (GeneratorExit, StopIteration):
+            pass
+        else:
+            raise RuntimeError("coroutine ignored GeneratorExit")
+
+
+class Awaitable(metaclass=_CoroutineMeta):
+
+    __slots__ = ()
+
+    @abstractmethod
+    def __await__(self):
+        yield
+
+    @classmethod
+    def __subclasshook__(cls, C):
+        if cls is Awaitable:
+            for B in C.__mro__:
+                if "__await__" in B.__dict__:
+                    if B.__dict__["__await__"]:
+                        return True
+                    break
+        return NotImplemented
+
+Awaitable.register(Coroutine)
+
+
 class Iterable(metaclass=ABCMeta):
 
     __slots__ = ()
diff --git a/Lib/dis.py b/Lib/dis.py
--- a/Lib/dis.py
+++ b/Lib/dis.py
@@ -84,6 +84,8 @@
     16: "NESTED",
     32: "GENERATOR",
     64: "NOFREE",
+   128: "COROUTINE",
+   256: "ITERABLE_COROUTINE",
 }
 
 def pretty_flags(flags):
diff --git a/Lib/inspect.py b/Lib/inspect.py
--- a/Lib/inspect.py
+++ b/Lib/inspect.py
@@ -33,6 +33,7 @@
 
 import ast
 import dis
+import collections.abc
 import enum
 import importlib.machinery
 import itertools
@@ -174,7 +175,22 @@
 
     See help(isfunction) for attributes listing."""
     return bool((isfunction(object) or ismethod(object)) and
-                object.__code__.co_flags & CO_GENERATOR)
+                object.__code__.co_flags & CO_GENERATOR and
+                not object.__code__.co_flags & CO_COROUTINE)
+
+def iscoroutinefunction(object):
+    """Return true if the object is a coroutine function.
+
+    Coroutine functions are defined with "async def" syntax,
+    or generators decorated with "types.coroutine".
+    """
+    return bool((isfunction(object) or ismethod(object)) and
+                object.__code__.co_flags & (CO_ITERABLE_COROUTINE |
+                                            CO_COROUTINE))
+
+def isawaitable(object):
+    """Return true if the object can be used in "await" expression."""
+    return isinstance(object, collections.abc.Awaitable)
 
 def isgenerator(object):
     """Return true if the object is a generator.
@@ -191,7 +207,13 @@
         send            resumes the generator and "sends" a value that becomes
                         the result of the current yield-expression
         throw           used to raise an exception inside the generator"""
-    return isinstance(object, types.GeneratorType)
+    return (isinstance(object, types.GeneratorType) and
+            not object.gi_code.co_flags & CO_COROUTINE)
+
+def iscoroutine(object):
+    """Return true if the object is a coroutine."""
+    return (isinstance(object, types.GeneratorType) and
+            object.gi_code.co_flags & (CO_COROUTINE | CO_ITERABLE_COROUTINE))
 
 def istraceback(object):
     """Return true if the object is a traceback.
diff --git a/Lib/lib2to3/Grammar.txt b/Lib/lib2to3/Grammar.txt
--- a/Lib/lib2to3/Grammar.txt
+++ b/Lib/lib2to3/Grammar.txt
@@ -33,7 +33,8 @@
 
 decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE
 decorators: decorator+
-decorated: decorators (classdef | funcdef)
+decorated: decorators (classdef | funcdef | async_funcdef)
+async_funcdef: ASYNC funcdef
 funcdef: 'def' NAME parameters ['->' test] ':' suite
 parameters: '(' [typedargslist] ')'
 typedargslist: ((tfpdef ['=' test] ',')*
@@ -82,7 +83,8 @@
 exec_stmt: 'exec' expr ['in' test [',' test]]
 assert_stmt: 'assert' test [',' test]
 
-compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated
+compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated | async_stmt
+async_stmt: ASYNC (funcdef | with_stmt | for_stmt)
 if_stmt: 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite]
 while_stmt: 'while' test ':' suite ['else' ':' suite]
 for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite]
@@ -121,7 +123,7 @@
 arith_expr: term (('+'|'-') term)*
 term: factor (('*'|'@'|'/'|'%'|'//') factor)*
 factor: ('+'|'-'|'~') factor | power
-power: atom trailer* ['**' factor]
+power: [AWAIT] atom trailer* ['**' factor]
 atom: ('(' [yield_expr|testlist_gexp] ')' |
        '[' [listmaker] ']' |
        '{' [dictsetmaker] '}' |
diff --git a/Lib/lib2to3/pgen2/token.py b/Lib/lib2to3/pgen2/token.py
--- a/Lib/lib2to3/pgen2/token.py
+++ b/Lib/lib2to3/pgen2/token.py
@@ -62,8 +62,10 @@
 COMMENT = 53
 NL = 54
 RARROW = 55
-ERRORTOKEN = 56
-N_TOKENS = 57
+AWAIT = 56
+ASYNC = 57
+ERRORTOKEN = 58
+N_TOKENS = 59
 NT_OFFSET = 256
 #--end constants--
 
diff --git a/Lib/lib2to3/pgen2/tokenize.py b/Lib/lib2to3/pgen2/tokenize.py
--- a/Lib/lib2to3/pgen2/tokenize.py
+++ b/Lib/lib2to3/pgen2/tokenize.py
@@ -220,7 +220,7 @@
         for tok in iterable:
             toknum, tokval = tok[:2]
 
-            if toknum in (NAME, NUMBER):
+            if toknum in (NAME, NUMBER, ASYNC, AWAIT):
                 tokval += ' '
 
             if toknum == INDENT:
@@ -366,6 +366,10 @@
     contline = None
     indents = [0]
 
+    # 'stashed' and 'ctx' are used for async/await parsing
+    stashed = None
+    ctx = [('sync', 0)]
+
     while 1:                                   # loop over lines in stream
         try:
             line = readline()
@@ -406,6 +410,10 @@
                 pos = pos + 1
             if pos == max: break
 
+            if stashed:
+                yield stashed
+                stashed = None
+
             if line[pos] in '#\r\n':           # skip comments or blank lines
                 if line[pos] == '#':
                     comment_token = line[pos:].rstrip('\r\n')
@@ -449,9 +457,15 @@
                     newline = NEWLINE
                     if parenlev > 0:
                         newline = NL
+                    if stashed:
+                        yield stashed
+                        stashed = None
                     yield (newline, token, spos, epos, line)
                 elif initial == '#':
                     assert not token.endswith("\n")
+                    if stashed:
+                        yield stashed
+                        stashed = None
                     yield (COMMENT, token, spos, epos, line)
                 elif token in triple_quoted:
                     endprog = endprogs[token]
@@ -459,6 +473,9 @@
                     if endmatch:                           # all on one line
                         pos = endmatch.end(0)
                         token = line[start:pos]
+                        if stashed:
+                            yield stashed
+                            stashed = None
                         yield (STRING, token, spos, (lnum, pos), line)
                     else:
                         strstart = (lnum, start)           # multiple lines
@@ -476,22 +493,64 @@
                         contline = line
                         break
                     else:                                  # ordinary string
+                        if stashed:
+                            yield stashed
+                            stashed = None
                         yield (STRING, token, spos, epos, line)
                 elif initial in namechars:                 # ordinary name
-                    yield (NAME, token, spos, epos, line)
+                    if token in ('async', 'await'):
+                        if ctx[-1][0] == 'async' and ctx[-1][1] < indents[-1]:
+                            yield (ASYNC if token == 'async' else AWAIT,
+                                   token, spos, epos, line)
+                            continue
+
+                    tok = (NAME, token, spos, epos, line)
+                    if token == 'async' and not stashed:
+                        stashed = tok
+                        continue
+
+                    if token == 'def':
+                        if (stashed
+                                and stashed[0] == NAME
+                                and stashed[1] == 'async'):
+
+                            ctx.append(('async', indents[-1]))
+
+                            yield (ASYNC, stashed[1],
+                                   stashed[2], stashed[3],
+                                   stashed[4])
+                            stashed = None
+                        else:
+                            ctx.append(('sync', indents[-1]))
+
+                    if stashed:
+                        yield stashed
+                        stashed = None
+
+                    yield tok
                 elif initial == '\\':                      # continued stmt
                     # This yield is new; needed for better idempotency:
+                    if stashed:
+                        yield stashed
+                        stashed = None
                     yield (NL, token, spos, (lnum, pos), line)
                     continued = 1
                 else:
                     if initial in '([{': parenlev = parenlev + 1
                     elif initial in ')]}': parenlev = parenlev - 1
+                    if stashed:
+                        yield stashed
+                        stashed = None
                     yield (OP, token, spos, epos, line)
             else:
                 yield (ERRORTOKEN, line[pos],
                            (lnum, pos), (lnum, pos+1), line)
                 pos = pos + 1
 
+    if stashed:
+        yield stashed
+        stashed = None
+
     for indent in indents[1:]:                 # pop remaining indent levels
         yield (DEDENT, '', (lnum, 0), (lnum, 0), '')
     yield (ENDMARKER, '', (lnum, 0), (lnum, 0), '')
diff --git a/Lib/lib2to3/tests/test_parser.py b/Lib/lib2to3/tests/test_parser.py
--- a/Lib/lib2to3/tests/test_parser.py
+++ b/Lib/lib2to3/tests/test_parser.py
@@ -55,12 +55,42 @@
 
 
 class TestYieldFrom(GrammarTest):
-    def test_matrix_multiplication_operator(self):
+    def test_yield_from(self):
         self.validate("yield from x")
         self.validate("(yield from x) + y")
         self.invalid_syntax("yield from")
 
 
+class TestAsyncAwait(GrammarTest):
+    def test_await_expr(self):
+        self.validate("""async def foo():
+                             await x
+                      """)
+
+        self.invalid_syntax("await x")
+        self.invalid_syntax("""def foo():
+                                   await x""")
+
+    def test_async_var(self):
+        self.validate("""async = 1""")
+        self.validate("""await = 1""")
+        self.validate("""def async(): pass""")
+
+    def test_async_with(self):
+        self.validate("""async def foo():
+                             async for a in b: pass""")
+
+        self.invalid_syntax("""def foo():
+                                   async for a in b: pass""")
+
+    def test_async_for(self):
+        self.validate("""async def foo():
+                             async with a: pass""")
+
+        self.invalid_syntax("""def foo():
+                                   async with a: pass""")
+
+
 class TestRaiseChanges(GrammarTest):
     def test_2x_style_1(self):
         self.validate("raise")
diff --git a/Lib/opcode.py b/Lib/opcode.py
--- a/Lib/opcode.py
+++ b/Lib/opcode.py
@@ -85,6 +85,10 @@
 def_op('INPLACE_FLOOR_DIVIDE', 28)
 def_op('INPLACE_TRUE_DIVIDE', 29)
 
+def_op('GET_AITER', 50)
+def_op('GET_ANEXT', 51)
+def_op('BEFORE_ASYNC_WITH', 52)
+
 def_op('STORE_MAP', 54)
 def_op('INPLACE_ADD', 55)
 def_op('INPLACE_SUBTRACT', 56)
@@ -104,6 +108,7 @@
 def_op('PRINT_EXPR', 70)
 def_op('LOAD_BUILD_CLASS', 71)
 def_op('YIELD_FROM', 72)
+def_op('GET_AWAITABLE', 73)
 
 def_op('INPLACE_LSHIFT', 75)
 def_op('INPLACE_RSHIFT', 76)
@@ -111,7 +116,8 @@
 def_op('INPLACE_XOR', 78)
 def_op('INPLACE_OR', 79)
 def_op('BREAK_LOOP', 80)
-def_op('WITH_CLEANUP', 81)
+def_op('WITH_CLEANUP_START', 81)
+def_op('WITH_CLEANUP_FINISH', 82)
 
 def_op('RETURN_VALUE', 83)
 def_op('IMPORT_STAR', 84)
@@ -197,6 +203,8 @@
 def_op('LOAD_CLASSDEREF', 148)
 hasfree.append(148)
 
+jrel_op('SETUP_ASYNC_WITH', 154)
+
 def_op('EXTENDED_ARG', 144)
 EXTENDED_ARG = 144
 
diff --git a/Lib/test/badsyntax_async1.py b/Lib/test/badsyntax_async1.py
new file mode 100644
--- /dev/null
+++ b/Lib/test/badsyntax_async1.py
@@ -0,0 +1,3 @@
+async def foo():
+    def foo(a=await something()):
+        pass
diff --git a/Lib/test/badsyntax_async2.py b/Lib/test/badsyntax_async2.py
new file mode 100644
--- /dev/null
+++ b/Lib/test/badsyntax_async2.py
@@ -0,0 +1,3 @@
+async def foo():
+    def foo(a:await something()):
+        pass
diff --git a/Lib/test/badsyntax_async3.py b/Lib/test/badsyntax_async3.py
new file mode 100644
--- /dev/null
+++ b/Lib/test/badsyntax_async3.py
@@ -0,0 +1,2 @@
+async def foo():
+    [i async for i in els]
diff --git a/Lib/test/badsyntax_async4.py b/Lib/test/badsyntax_async4.py
new file mode 100644
--- /dev/null
+++ b/Lib/test/badsyntax_async4.py
@@ -0,0 +1,2 @@
+async def foo():
+    async def foo(): await something()
diff --git a/Lib/test/badsyntax_async5.py b/Lib/test/badsyntax_async5.py
new file mode 100644
--- /dev/null
+++ b/Lib/test/badsyntax_async5.py
@@ -0,0 +1,2 @@
+def foo():
+    await something()
diff --git a/Lib/test/badsyntax_async6.py b/Lib/test/badsyntax_async6.py
new file mode 100644
--- /dev/null
+++ b/Lib/test/badsyntax_async6.py
@@ -0,0 +1,2 @@
+async def foo():
+    yield
diff --git a/Lib/test/badsyntax_async7.py b/Lib/test/badsyntax_async7.py
new file mode 100644
--- /dev/null
+++ b/Lib/test/badsyntax_async7.py
@@ -0,0 +1,2 @@
+async def foo():
+    yield from []
diff --git a/Lib/test/badsyntax_async8.py b/Lib/test/badsyntax_async8.py
new file mode 100644
--- /dev/null
+++ b/Lib/test/badsyntax_async8.py
@@ -0,0 +1,2 @@
+async def foo():
+    await await fut
diff --git a/Lib/test/badsyntax_async9.py b/Lib/test/badsyntax_async9.py
new file mode 100644
--- /dev/null
+++ b/Lib/test/badsyntax_async9.py
@@ -0,0 +1,2 @@
+async def foo():
+    await
diff --git a/Lib/test/exception_hierarchy.txt b/Lib/test/exception_hierarchy.txt
--- a/Lib/test/exception_hierarchy.txt
+++ b/Lib/test/exception_hierarchy.txt
@@ -4,6 +4,7 @@
  +-- GeneratorExit
  +-- Exception
       +-- StopIteration
+      +-- StopAsyncIteration
       +-- ArithmeticError
       |    +-- FloatingPointError
       |    +-- OverflowError
diff --git a/Lib/test/test_ast.py b/Lib/test/test_ast.py
--- a/Lib/test/test_ast.py
+++ b/Lib/test/test_ast.py
@@ -106,6 +106,12 @@
     "{r for l in x if g}",
     # setcomp with naked tuple
     "{r for l,m in x}",
+    # AsyncFunctionDef
+    "async def f():\n await something()",
+    # AsyncFor
+    "async def f():\n async for e in i: 1\n else: 2",
+    # AsyncWith
+    "async def f():\n async with a as b: 1",
 ]
 
 # These are compiled through "single"
@@ -974,6 +980,9 @@
 ('Module', [('Expr', (1, 0), ('DictComp', (1, 1), ('Name', (1, 1), 'a', ('Load',)), ('Name', (1, 5), 'b', ('Load',)), [('comprehension', ('Tuple', (1, 11), [('Name', (1, 11), 'v', ('Store',)), ('Name', (1, 13), 'w', ('Store',))], ('Store',)), ('Name', (1, 18), 'x', ('Load',)), [])]))]),
 ('Module', [('Expr', (1, 0), ('SetComp', (1, 1), ('Name', (1, 1), 'r', ('Load',)), [('comprehension', ('Name', (1, 7), 'l', ('Store',)), ('Name', (1, 12), 'x', ('Load',)), [('Name', (1, 17), 'g', ('Load',))])]))]),
 ('Module', [('Expr', (1, 0), ('SetComp', (1, 1), ('Name', (1, 1), 'r', ('Load',)), [('comprehension', ('Tuple', (1, 7), [('Name', (1, 7), 'l', ('Store',)), ('Name', (1, 9), 'm', ('Store',))], ('Store',)), ('Name', (1, 14), 'x', ('Load',)), [])]))]),
+('Module', [('AsyncFunctionDef', (1, 6), 'f', ('arguments', [], None, [], [], None, []), [('Expr', (2, 1), ('Await', (2, 1), ('Call', (2, 7), ('Name', (2, 7), 'something', ('Load',)), [], [])))], [], None)]),
+('Module', [('AsyncFunctionDef', (1, 6), 'f', ('arguments', [], None, [], [], None, []), [('AsyncFor', (2, 7), ('Name', (2, 11), 'e', ('Store',)), ('Name', (2, 16), 'i', ('Load',)), [('Expr', (2, 19), ('Num', (2, 19), 1))], [('Expr', (3, 7), ('Num', (3, 7), 2))])], [], None)]),
+('Module', [('AsyncFunctionDef', (1, 6), 'f', ('arguments', [], None, [], [], None, []), [('AsyncWith', (2, 7), [('withitem', ('Name', (2, 12), 'a', ('Load',)), ('Name', (2, 17), 'b', ('Store',)))], [('Expr', (2, 20), ('Num', (2, 20), 1))])], [], None)]),
 ]
 single_results = [
 ('Interactive', [('Expr', (1, 0), ('BinOp', (1, 0), ('Num', (1, 0), 1), ('Add',), ('Num', (1, 2), 2)))]),
diff --git a/Lib/test/test_collections.py b/Lib/test/test_collections.py
--- a/Lib/test/test_collections.py
+++ b/Lib/test/test_collections.py
@@ -11,9 +11,11 @@
 import keyword
 import re
 import sys
+import types
 from collections import UserDict
 from collections import ChainMap
 from collections import deque
+from collections.abc import Awaitable, Coroutine
 from collections.abc import Hashable, Iterable, Iterator, Generator
 from collections.abc import Sized, Container, Callable
 from collections.abc import Set, MutableSet
@@ -446,6 +448,84 @@
 
 class TestOneTrickPonyABCs(ABCTestCase):
 
+    def test_Awaitable(self):
+        def gen():
+            yield
+
+        @types.coroutine
+        def coro():
+            yield
+
+        async def new_coro():
+            pass
+
+        class Bar:
+            def __await__(self):
+                yield
+
+        class MinimalCoro(Coroutine):
+            def send(self, value):
+                return value
+            def throw(self, typ, val=None, tb=None):
+                super().throw(typ, val, tb)
+
+        non_samples = [None, int(), gen(), object()]
+        for x in non_samples:
+            self.assertNotIsInstance(x, Awaitable)
+            self.assertFalse(issubclass(type(x), Awaitable), repr(type(x)))
+
+        samples = [Bar(), MinimalCoro()]
+        for x in samples:
+            self.assertIsInstance(x, Awaitable)
+            self.assertTrue(issubclass(type(x), Awaitable))
+
+        c = coro()
+        self.assertIsInstance(c, Awaitable)
+        c.close() # awoid RuntimeWarning that coro() was not awaited
+
+        c = new_coro()
+        self.assertIsInstance(c, Awaitable)
+        c.close() # awoid RuntimeWarning that coro() was not awaited
+
+    def test_Coroutine(self):
+        def gen():
+            yield
+
+        @types.coroutine
+        def coro():
+            yield
+
+        async def new_coro():
+            pass
+
+        class Bar:
+            def __await__(self):
+                yield
+
+        class MinimalCoro(Coroutine):
+            def send(self, value):
+                return value
+            def throw(self, typ, val=None, tb=None):
+                super().throw(typ, val, tb)
+
+        non_samples = [None, int(), gen(), object(), Bar()]
+        for x in non_samples:
+            self.assertNotIsInstance(x, Coroutine)
+            self.assertFalse(issubclass(type(x), Coroutine), repr(type(x)))
+
+        samples = [MinimalCoro()]
+        for x in samples:
+            self.assertIsInstance(x, Awaitable)
+            self.assertTrue(issubclass(type(x), Awaitable))
+
+        c = coro()
+        self.assertIsInstance(c, Coroutine)
+        c.close() # awoid RuntimeWarning that coro() was not awaited
+
+        c = new_coro()
+        self.assertIsInstance(c, Coroutine)
+        c.close() # awoid RuntimeWarning that coro() was not awaited
+
     def test_Hashable(self):
         # Check some non-hashables
         non_samples = [bytearray(), list(), set(), dict()]
diff --git a/Lib/test/test_coroutines.py b/Lib/test/test_coroutines.py
new file mode 100644
--- /dev/null
+++ b/Lib/test/test_coroutines.py
@@ -0,0 +1,862 @@
+import contextlib
+import gc
+import sys
+import types
+import unittest
+import warnings
+from test import support
+
+
+class AsyncYieldFrom:
+    def __init__(self, obj):
+        self.obj = obj
+
+    def __await__(self):
+        yield from self.obj
+
+
+class AsyncYield:
+    def __init__(self, value):
+        self.value = value
+
+    def __await__(self):
+        yield self.value
+
+
+def run_async(coro):
+    assert coro.__class__ is types.GeneratorType
+
+    buffer = []
+    result = None
+    while True:
+        try:
+            buffer.append(coro.send(None))
+        except StopIteration as ex:
+            result = ex.args[0] if ex.args else None
+            break
+    return buffer, result
+
+
+ at contextlib.contextmanager
+def silence_coro_gc():
+    with warnings.catch_warnings():
+        warnings.simplefilter("ignore")
+        yield
+        support.gc_collect()
+
+
+class AsyncBadSyntaxTest(unittest.TestCase):
+
+    def test_badsyntax_1(self):
+        with self.assertRaisesRegex(SyntaxError, 'invalid syntax'):
+            import test.badsyntax_async1
+
+    def test_badsyntax_2(self):
+        with self.assertRaisesRegex(SyntaxError, 'invalid syntax'):
+            import test.badsyntax_async2
+
+    def test_badsyntax_3(self):
+        with self.assertRaisesRegex(SyntaxError, 'invalid syntax'):
+            import test.badsyntax_async3
+
+    def test_badsyntax_4(self):
+        with self.assertRaisesRegex(SyntaxError, 'invalid syntax'):
+            import test.badsyntax_async4
+
+    def test_badsyntax_5(self):
+        with self.assertRaisesRegex(SyntaxError, 'invalid syntax'):
+            import test.badsyntax_async5
+
+    def test_badsyntax_6(self):
+        with self.assertRaisesRegex(
+            SyntaxError, "'yield' inside async function"):
+
+            import test.badsyntax_async6
+
+    def test_badsyntax_7(self):
+        with self.assertRaisesRegex(
+            SyntaxError, "'yield from' inside async function"):
+
+            import test.badsyntax_async7
+
+    def test_badsyntax_8(self):
+        with self.assertRaisesRegex(SyntaxError, 'invalid syntax'):
+            import test.badsyntax_async8
+
+    def test_badsyntax_9(self):
+        with self.assertRaisesRegex(SyntaxError, 'invalid syntax'):
+            import test.badsyntax_async9
+
+
+class CoroutineTest(unittest.TestCase):
+
+    def test_gen_1(self):
+        def gen(): yield
+        self.assertFalse(hasattr(gen, '__await__'))
+
+    def test_func_1(self):
+        async def foo():
+            return 10
+
+        f = foo()
+        self.assertIsInstance(f, types.GeneratorType)
+        self.assertTrue(bool(foo.__code__.co_flags & 0x80))
+        self.assertTrue(bool(foo.__code__.co_flags & 0x20))
+        self.assertTrue(bool(f.gi_code.co_flags & 0x80))
+        self.assertTrue(bool(f.gi_code.co_flags & 0x20))
+        self.assertEqual(run_async(f), ([], 10))
+
+        def bar(): pass
+        self.assertFalse(bool(bar.__code__.co_flags & 0x80))
+
+    def test_func_2(self):
+        async def foo():
+            raise StopIteration
+
+        with self.assertRaisesRegex(
+                RuntimeError, "generator raised StopIteration"):
+
+            run_async(foo())
+
+    def test_func_3(self):
+        async def foo():
+            raise StopIteration
+
+        with silence_coro_gc():
+            self.assertRegex(repr(foo()), '^<coroutine object.* at 0x.*>$')
+
+    def test_func_4(self):
+        async def foo():
+            raise StopIteration
+
+        check = lambda: self.assertRaisesRegex(
+            TypeError, "coroutine-objects do not support iteration")
+
+        with check():
+            list(foo())
+
+        with check():
+            tuple(foo())
+
+        with check():
+            sum(foo())
+
+        with check():
+            iter(foo())
+
+        with check():
+            next(foo())
+
+        with silence_coro_gc(), check():
+            for i in foo():
+                pass
+
+        with silence_coro_gc(), check():
+            [i for i in foo()]
+
+    def test_func_5(self):
+        @types.coroutine
+        def bar():
+            yield 1
+
+        async def foo():
+            await bar()
+
+        check = lambda: self.assertRaisesRegex(
+            TypeError, "coroutine-objects do not support iteration")
+
+        with check():
+            for el in foo(): pass
+
+        # the following should pass without an error
+        for el in bar():
+            self.assertEqual(el, 1)
+        self.assertEqual([el for el in bar()], [1])
+        self.assertEqual(tuple(bar()), (1,))
+        self.assertEqual(next(iter(bar())), 1)
+
+    def test_func_6(self):
+        @types.coroutine
+        def bar():
+            yield 1
+            yield 2
+
+        async def foo():
+            await bar()
+
+        f = foo()
+        self.assertEquals(f.send(None), 1)
+        self.assertEquals(f.send(None), 2)
+        with self.assertRaises(StopIteration):
+            f.send(None)
+
+    def test_func_7(self):
+        async def bar():
+            return 10
+
+        def foo():
+            yield from bar()
+
+        with silence_coro_gc(), self.assertRaisesRegex(
+            TypeError,
+            "cannot 'yield from' a coroutine object from a generator"):
+
+            list(foo())
+
+    def test_func_8(self):
+        @types.coroutine
+        def bar():
+            return (yield from foo())
+
+        async def foo():
+            return 'spam'
+
+        self.assertEqual(run_async(bar()), ([], 'spam') )
+
+    def test_func_9(self):
+        async def foo(): pass
+
+        with self.assertWarnsRegex(
+            RuntimeWarning, "coroutine '.*test_func_9.*foo' was never awaited"):
+
+            foo()
+            support.gc_collect()
+
+    def test_await_1(self):
+
+        async def foo():
+            await 1
+        with self.assertRaisesRegex(TypeError, "object int can.t.*await"):
+            run_async(foo())
+
+    def test_await_2(self):
+        async def foo():
+            await []
+        with self.assertRaisesRegex(TypeError, "object list can.t.*await"):
+            run_async(foo())
+
+    def test_await_3(self):
+        async def foo():
+            await AsyncYieldFrom([1, 2, 3])
+
+        self.assertEqual(run_async(foo()), ([1, 2, 3], None))
+
+    def test_await_4(self):
+        async def bar():
+            return 42
+
+        async def foo():
+            return await bar()
+
+        self.assertEqual(run_async(foo()), ([], 42))
+
+    def test_await_5(self):
+        class Awaitable:
+            def __await__(self):
+                return
+
+        async def foo():
+            return (await Awaitable())
+
+        with self.assertRaisesRegex(
+            TypeError, "__await__.*returned non-iterator of type"):
+
+            run_async(foo())
+
+    def test_await_6(self):
+        class Awaitable:
+            def __await__(self):
+                return iter([52])
+
+        async def foo():
+            return (await Awaitable())
+
+        self.assertEqual(run_async(foo()), ([52], None))
+
+    def test_await_7(self):
+        class Awaitable:
+            def __await__(self):
+                yield 42
+                return 100
+
+        async def foo():
+            return (await Awaitable())
+
+        self.assertEqual(run_async(foo()), ([42], 100))
+
+    def test_await_8(self):
+        class Awaitable:
+            pass
+
+        async def foo():
+            return (await Awaitable())
+
+        with self.assertRaisesRegex(
+            TypeError, "object Awaitable can't be used in 'await' expression"):
+
+            run_async(foo())
+
+    def test_await_9(self):
+        def wrap():
+            return bar
+
+        async def bar():
+            return 42
+
+        async def foo():
+            b = bar()
+
+            db = {'b':  lambda: wrap}
+
+            class DB:
+                b = wrap
+
+            return (await bar() + await wrap()() + await db['b']()()() +
+                    await bar() * 1000 + await DB.b()())
+
+        async def foo2():
+            return -await bar()
+
+        self.assertEqual(run_async(foo()), ([], 42168))
+        self.assertEqual(run_async(foo2()), ([], -42))
+
+    def test_await_10(self):
+        async def baz():
+            return 42
+
+        async def bar():
+            return baz()
+
+        async def foo():
+            return await (await bar())
+
+        self.assertEqual(run_async(foo()), ([], 42))
+
+    def test_await_11(self):
+        def ident(val):
+            return val
+
+        async def bar():
+            return 'spam'
+
+        async def foo():
+            return ident(val=await bar())
+
+        async def foo2():
+            return await bar(), 'ham'
+
+        self.assertEqual(run_async(foo2()), ([], ('spam', 'ham')))
+
+    def test_await_12(self):
+        async def coro():
+            return 'spam'
+
+        class Awaitable:
+            def __await__(self):
+                return coro()
+
+        async def foo():
+            return await Awaitable()
+
+        with self.assertRaisesRegex(
+            TypeError, "__await__\(\) returned a coroutine"):
+
+            run_async(foo())
+
+    def test_await_13(self):
+        class Awaitable:
+            def __await__(self):
+                return self
+
+        async def foo():
+            return await Awaitable()
+
+        with self.assertRaisesRegex(
+            TypeError, "__await__.*returned non-iterator of type"):
+
+            run_async(foo())
+
+    def test_with_1(self):
+        class Manager:
+            def __init__(self, name):
+                self.name = name
+
+            async def __aenter__(self):
+                await AsyncYieldFrom(['enter-1-' + self.name,
+                                      'enter-2-' + self.name])
+                return self
+
+            async def __aexit__(self, *args):
+                await AsyncYieldFrom(['exit-1-' + self.name,
+                                      'exit-2-' + self.name])
+
+                if self.name == 'B':
+                    return True
+
+
+        async def foo():
+            async with Manager("A") as a, Manager("B") as b:
+                await AsyncYieldFrom([('managers', a.name, b.name)])
+                1/0
+
+        f = foo()
+        result, _ = run_async(f)
+
+        self.assertEqual(
+            result, ['enter-1-A', 'enter-2-A', 'enter-1-B', 'enter-2-B',
+                     ('managers', 'A', 'B'),
+                     'exit-1-B', 'exit-2-B', 'exit-1-A', 'exit-2-A']
+        )
+
+        async def foo():
+            async with Manager("A") as a, Manager("C") as c:
+                await AsyncYieldFrom([('managers', a.name, c.name)])
+                1/0
+
+        with self.assertRaises(ZeroDivisionError):
+            run_async(foo())
+
+    def test_with_2(self):
+        class CM:
+            def __aenter__(self):
+                pass
+
+        async def foo():
+            async with CM():
+                pass
+
+        with self.assertRaisesRegex(AttributeError, '__aexit__'):
+            run_async(foo())
+
+    def test_with_3(self):
+        class CM:
+            def __aexit__(self):
+                pass
+
+        async def foo():
+            async with CM():
+                pass
+
+        with self.assertRaisesRegex(AttributeError, '__aenter__'):
+            run_async(foo())
+
+    def test_with_4(self):
+        class CM:
+            def __enter__(self):
+                pass
+
+            def __exit__(self):
+                pass
+
+        async def foo():
+            async with CM():
+                pass
+
+        with self.assertRaisesRegex(AttributeError, '__aexit__'):
+            run_async(foo())
+
+    def test_with_5(self):
+        # While this test doesn't make a lot of sense,
+        # it's a regression test for an early bug with opcodes
+        # generation
+
+        class CM:
+            async def __aenter__(self):
+                return self
+
+            async def __aexit__(self, *exc):
+                pass
+
+        async def func():
+            async with CM():
+                assert (1, ) == 1
+
+        with self.assertRaises(AssertionError):
+            run_async(func())
+
+    def test_with_6(self):
+        class CM:
+            def __aenter__(self):
+                return 123
+
+            def __aexit__(self, *e):
+                return 456
+
+        async def foo():
+            async with CM():
+                pass
+
+        with self.assertRaisesRegex(
+            TypeError, "object int can't be used in 'await' expression"):
+            # it's important that __aexit__ wasn't called
+            run_async(foo())
+
+    def test_with_7(self):
+        class CM:
+            async def __aenter__(self):
+                return self
+
+            def __aexit__(self, *e):
+                return 456
+
+        async def foo():
+            async with CM():
+                pass
+
+        with self.assertRaisesRegex(
+            TypeError, "object int can't be used in 'await' expression"):
+
+            run_async(foo())
+
+    def test_for_1(self):
+        aiter_calls = 0
+
+        class AsyncIter:
+            def __init__(self):
+                self.i = 0
+
+            async def __aiter__(self):
+                nonlocal aiter_calls
+                aiter_calls += 1
+                return self
+
+            async def __anext__(self):
+                self.i += 1
+
+                if not (self.i % 10):
+                    await AsyncYield(self.i * 10)
+
+                if self.i > 100:
+                    raise StopAsyncIteration
+
+                return self.i, self.i
+
+
+        buffer = []
+        async def test1():
+            async for i1, i2 in AsyncIter():
+                buffer.append(i1 + i2)
+
+        yielded, _ = run_async(test1())
+        # Make sure that __aiter__ was called only once
+        self.assertEqual(aiter_calls, 1)
+        self.assertEqual(yielded, [i * 100 for i in range(1, 11)])
+        self.assertEqual(buffer, [i*2 for i in range(1, 101)])
+
+
+        buffer = []
+        async def test2():
+            nonlocal buffer
+            async for i in AsyncIter():
+                buffer.append(i[0])
+                if i[0] == 20:
+                    break
+            else:
+                buffer.append('what?')
+            buffer.append('end')
+
+        yielded, _ = run_async(test2())
+        # Make sure that __aiter__ was called only once
+        self.assertEqual(aiter_calls, 2)
+        self.assertEqual(yielded, [100, 200])
+        self.assertEqual(buffer, [i for i in range(1, 21)] + ['end'])
+
+
+        buffer = []
+        async def test3():
+            nonlocal buffer
+            async for i in AsyncIter():
+                if i[0] > 20:
+                    continue
+                buffer.append(i[0])
+            else:
+                buffer.append('what?')
+            buffer.append('end')
+
+        yielded, _ = run_async(test3())
+        # Make sure that __aiter__ was called only once
+        self.assertEqual(aiter_calls, 3)
+        self.assertEqual(yielded, [i * 100 for i in range(1, 11)])
+        self.assertEqual(buffer, [i for i in range(1, 21)] +
+                                 ['what?', 'end'])
+
+    def test_for_2(self):
+        tup = (1, 2, 3)
+        refs_before = sys.getrefcount(tup)
+
+        async def foo():
+            async for i in tup:
+                print('never going to happen')
+
+        with self.assertRaisesRegex(
+                TypeError, "async for' requires an object.*__aiter__.*tuple"):
+
+            run_async(foo())
+
+        self.assertEqual(sys.getrefcount(tup), refs_before)
+
+    def test_for_3(self):
+        class I:
+            def __aiter__(self):
+                return self
+
+        aiter = I()
+        refs_before = sys.getrefcount(aiter)
+
+        async def foo():
+            async for i in aiter:
+                print('never going to happen')
+
+        with self.assertRaisesRegex(
+                TypeError,
+                "async for' received an invalid object.*__aiter.*\: I"):
+
+            run_async(foo())
+
+        self.assertEqual(sys.getrefcount(aiter), refs_before)
+
+    def test_for_4(self):
+        class I:
+            async def __aiter__(self):
+                return self
+
+            def __anext__(self):
+                return ()
+
+        aiter = I()
+        refs_before = sys.getrefcount(aiter)
+
+        async def foo():
+            async for i in aiter:
+                print('never going to happen')
+
+        with self.assertRaisesRegex(
+                TypeError,
+                "async for' received an invalid object.*__anext__.*tuple"):
+
+            run_async(foo())
+
+        self.assertEqual(sys.getrefcount(aiter), refs_before)
+
+    def test_for_5(self):
+        class I:
+            async def __aiter__(self):
+                return self
+
+            def __anext__(self):
+                return 123
+
+        async def foo():
+            async for i in I():
+                print('never going to happen')
+
+        with self.assertRaisesRegex(
+                TypeError,
+                "async for' received an invalid object.*__anext.*int"):
+
+            run_async(foo())
+
+    def test_for_6(self):
+        I = 0
+
+        class Manager:
+            async def __aenter__(self):
+                nonlocal I
+                I += 10000
+
+            async def __aexit__(self, *args):
+                nonlocal I
+                I += 100000
+
+        class Iterable:
+            def __init__(self):
+                self.i = 0
+
+            async def __aiter__(self):
+                return self
+
+            async def __anext__(self):
+                if self.i > 10:
+                    raise StopAsyncIteration
+                self.i += 1
+                return self.i
+
+        ##############
+
+        manager = Manager()
+        iterable = Iterable()
+        mrefs_before = sys.getrefcount(manager)
+        irefs_before = sys.getrefcount(iterable)
+
+        async def main():
+            nonlocal I
+
+            async with manager:
+                async for i in iterable:
+                    I += 1
+            I += 1000
+
+        run_async(main())
+        self.assertEqual(I, 111011)
+
+        self.assertEqual(sys.getrefcount(manager), mrefs_before)
+        self.assertEqual(sys.getrefcount(iterable), irefs_before)
+
+        ##############
+
+        async def main():
+            nonlocal I
+
+            async with Manager():
+                async for i in Iterable():
+                    I += 1
+            I += 1000
+
+            async with Manager():
+                async for i in Iterable():
+                    I += 1
+            I += 1000
+
+        run_async(main())
+        self.assertEqual(I, 333033)
+
+        ##############
+
+        async def main():
+            nonlocal I
+
+            async with Manager():
+                I += 100
+                async for i in Iterable():
+                    I += 1
+                else:
+                    I += 10000000
+            I += 1000
+
+            async with Manager():
+                I += 100
+                async for i in Iterable():
+                    I += 1
+                else:
+                    I += 10000000
+            I += 1000
+
+        run_async(main())
+        self.assertEqual(I, 20555255)
+
+
+class CoroAsyncIOCompatTest(unittest.TestCase):
+
+    def test_asyncio_1(self):
+        import asyncio
+
+        class MyException(Exception):
+            pass
+
+        buffer = []
+
+        class CM:
+            async def __aenter__(self):
+                buffer.append(1)
+                await asyncio.sleep(0.01)
+                buffer.append(2)
+                return self
+
+            async def __aexit__(self, exc_type, exc_val, exc_tb):
+                await asyncio.sleep(0.01)
+                buffer.append(exc_type.__name__)
+
+        async def f():
+            async with CM() as c:
+                await asyncio.sleep(0.01)
+                raise MyException
+            buffer.append('unreachable')
+
+        loop = asyncio.get_event_loop()
+        try:
+            loop.run_until_complete(f())
+        except MyException:
+            pass
+        finally:
+            loop.close()
+
+        self.assertEqual(buffer, [1, 2, 'MyException'])
+
+
+class SysSetCoroWrapperTest(unittest.TestCase):
+
+    def test_set_wrapper_1(self):
+        async def foo():
+            return 'spam'
+
+        wrapped = None
+        def wrap(gen):
+            nonlocal wrapped
+            wrapped = gen
+            return gen
+
+        self.assertIsNone(sys.get_coroutine_wrapper())
+
+        sys.set_coroutine_wrapper(wrap)
+        self.assertIs(sys.get_coroutine_wrapper(), wrap)
+        try:
+            f = foo()
+            self.assertTrue(wrapped)
+
+            self.assertEqual(run_async(f), ([], 'spam'))
+        finally:
+            sys.set_coroutine_wrapper(None)
+
+        self.assertIsNone(sys.get_coroutine_wrapper())
+
+        wrapped = None
+        with silence_coro_gc():
+            foo()
+        self.assertFalse(wrapped)
+
+    def test_set_wrapper_2(self):
+        self.assertIsNone(sys.get_coroutine_wrapper())
+        with self.assertRaisesRegex(TypeError, "callable expected, got int"):
+            sys.set_coroutine_wrapper(1)
+        self.assertIsNone(sys.get_coroutine_wrapper())
+
+
+class CAPITest(unittest.TestCase):
+
+    def test_tp_await_1(self):
+        from _testcapi import awaitType as at
+
+        async def foo():
+            future = at(iter([1]))
+            return (await future)
+
+        self.assertEqual(foo().send(None), 1)
+
+    def test_tp_await_2(self):
+        # Test tp_await to __await__ mapping
+        from _testcapi import awaitType as at
+        future = at(iter([1]))
+        self.assertEqual(next(future.__await__()), 1)
+
+    def test_tp_await_3(self):
+        from _testcapi import awaitType as at
+
+        async def foo():
+            future = at(1)
+            return (await future)
+
+        with self.assertRaisesRegex(
+                TypeError, "__await__.*returned non-iterator of type 'int'"):
+            self.assertEqual(foo().send(None), 1)
+
+
+def test_main():
+    support.run_unittest(AsyncBadSyntaxTest,
+                         CoroutineTest,
+                         CoroAsyncIOCompatTest,
+                         SysSetCoroWrapperTest,
+                         CAPITest)
+
+
+if __name__=="__main__":
+    test_main()
diff --git a/Lib/test/test_dis.py b/Lib/test/test_dis.py
--- a/Lib/test/test_dis.py
+++ b/Lib/test/test_dis.py
@@ -480,6 +480,24 @@
 Names:
    0: x"""
 
+
+async def async_def():
+    await 1
+    async for a in b: pass
+    async with c as d: pass
+
+code_info_async_def = """\
+Name:              async_def
+Filename:          (.*)
+Argument count:    0
+Kw-only arguments: 0
+Number of locals:  2
+Stack size:        17
+Flags:             OPTIMIZED, NEWLOCALS, GENERATOR, NOFREE, COROUTINE
+Constants:
+   0: None
+   1: 1"""
+
 class CodeInfoTests(unittest.TestCase):
     test_pairs = [
       (dis.code_info, code_info_code_info),
@@ -488,6 +506,7 @@
       (expr_str, code_info_expr_str),
       (simple_stmt_str, code_info_simple_stmt_str),
       (compound_stmt_str, code_info_compound_stmt_str),
+      (async_def, code_info_async_def)
     ]
 
     def test_code_info(self):
@@ -697,7 +716,7 @@
   Instruction(opname='LOAD_CONST', opcode=100, arg=6, argval='Who let lolcatz into this test suite?', argrepr="'Who let lolcatz into this test suite?'", offset=135, starts_line=None, is_jump_target=False),
   Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='1 positional, 0 keyword pair', offset=138, starts_line=None, is_jump_target=False),
   Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=141, starts_line=None, is_jump_target=False),
-  Instruction(opname='SETUP_FINALLY', opcode=122, arg=72, argval=217, argrepr='to 217', offset=142, starts_line=20, is_jump_target=True),
+  Instruction(opname='SETUP_FINALLY', opcode=122, arg=73, argval=218, argrepr='to 218', offset=142, starts_line=20, is_jump_target=True),
   Instruction(opname='SETUP_EXCEPT', opcode=121, arg=12, argval=160, argrepr='to 160', offset=145, starts_line=None, is_jump_target=False),
   Instruction(opname='LOAD_CONST', opcode=100, arg=5, argval=1, argrepr='1', offset=148, starts_line=21, is_jump_target=False),
   Instruction(opname='LOAD_CONST', opcode=100, arg=7, argval=0, argrepr='0', offset=151, starts_line=None, is_jump_target=False),
@@ -717,7 +736,7 @@
   Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='1 positional, 0 keyword pair', offset=179, starts_line=None, is_jump_target=False),
   Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=182, starts_line=None, is_jump_target=False),
   Instruction(opname='POP_EXCEPT', opcode=89, arg=None, argval=None, argrepr='', offset=183, starts_line=None, is_jump_target=False),
-  Instruction(opname='JUMP_FORWARD', opcode=110, arg=26, argval=213, argrepr='to 213', offset=184, starts_line=None, is_jump_target=False),
+  Instruction(opname='JUMP_FORWARD', opcode=110, arg=27, argval=214, argrepr='to 214', offset=184, starts_line=None, is_jump_target=False),
   Instruction(opname='END_FINALLY', opcode=88, arg=None, argval=None, argrepr='', offset=187, starts_line=None, is_jump_target=True),
   Instruction(opname='LOAD_FAST', opcode=124, arg=0, argval='i', argrepr='i', offset=188, starts_line=25, is_jump_target=True),
   Instruction(opname='SETUP_WITH', opcode=143, arg=17, argval=211, argrepr='to 211', offset=191, starts_line=None, is_jump_target=False),
@@ -728,17 +747,18 @@
   Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=206, starts_line=None, is_jump_target=False),
   Instruction(opname='POP_BLOCK', opcode=87, arg=None, argval=None, argrepr='', offset=207, starts_line=None, is_jump_target=False),
   Instruction(opname='LOAD_CONST', opcode=100, arg=0, argval=None, argrepr='None', offset=208, starts_line=None, is_jump_target=False),
-  Instruction(opname='WITH_CLEANUP', opcode=81, arg=None, argval=None, argrepr='', offset=211, starts_line=None, is_jump_target=True),
-  Instruction(opname='END_FINALLY', opcode=88, arg=None, argval=None, argrepr='', offset=212, starts_line=None, is_jump_target=False),
-  Instruction(opname='POP_BLOCK', opcode=87, arg=None, argval=None, argrepr='', offset=213, starts_line=None, is_jump_target=True),
-  Instruction(opname='LOAD_CONST', opcode=100, arg=0, argval=None, argrepr='None', offset=214, starts_line=None, is_jump_target=False),
-  Instruction(opname='LOAD_GLOBAL', opcode=116, arg=1, argval='print', argrepr='print', offset=217, starts_line=28, is_jump_target=True),
-  Instruction(opname='LOAD_CONST', opcode=100, arg=10, argval="OK, now we're done", argrepr='"OK, now we\'re done"', offset=220, starts_line=None, is_jump_target=False),
-  Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='1 positional, 0 keyword pair', offset=223, starts_line=None, is_jump_target=False),
-  Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=226, starts_line=None, is_jump_target=False),
-  Instruction(opname='END_FINALLY', opcode=88, arg=None, argval=None, argrepr='', offset=227, starts_line=None, is_jump_target=False),
-  Instruction(opname='LOAD_CONST', opcode=100, arg=0, argval=None, argrepr='None', offset=228, starts_line=None, is_jump_target=False),
-  Instruction(opname='RETURN_VALUE', opcode=83, arg=None, argval=None, argrepr='', offset=231, starts_line=None, is_jump_target=False),
+  Instruction(opname='WITH_CLEANUP_START', opcode=81, arg=None, argval=None, argrepr='', offset=211, starts_line=None, is_jump_target=True),
+  Instruction(opname='WITH_CLEANUP_FINISH', opcode=82, arg=None, argval=None, argrepr='', offset=212, starts_line=None, is_jump_target=False),
+  Instruction(opname='END_FINALLY', opcode=88, arg=None, argval=None, argrepr='', offset=213, starts_line=None, is_jump_target=False),
+  Instruction(opname='POP_BLOCK', opcode=87, arg=None, argval=None, argrepr='', offset=214, starts_line=None, is_jump_target=True),
+  Instruction(opname='LOAD_CONST', opcode=100, arg=0, argval=None, argrepr='None', offset=215, starts_line=None, is_jump_target=False),
+  Instruction(opname='LOAD_GLOBAL', opcode=116, arg=1, argval='print', argrepr='print', offset=218, starts_line=28, is_jump_target=True),
+  Instruction(opname='LOAD_CONST', opcode=100, arg=10, argval="OK, now we're done", argrepr='"OK, now we\'re done"', offset=221, starts_line=None, is_jump_target=False),
+  Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='1 positional, 0 keyword pair', offset=224, starts_line=None, is_jump_target=False),
+  Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=227, starts_line=None, is_jump_target=False),
+  Instruction(opname='END_FINALLY', opcode=88, arg=None, argval=None, argrepr='', offset=228, starts_line=None, is_jump_target=False),
+  Instruction(opname='LOAD_CONST', opcode=100, arg=0, argval=None, argrepr='None', offset=229, starts_line=None, is_jump_target=False),
+  Instruction(opname='RETURN_VALUE', opcode=83, arg=None, argval=None, argrepr='', offset=232, starts_line=None, is_jump_target=False),
 ]
 
 # One last piece of inspect fodder to check the default line number handling
diff --git a/Lib/test/test_grammar.py b/Lib/test/test_grammar.py
--- a/Lib/test/test_grammar.py
+++ b/Lib/test/test_grammar.py
@@ -2,6 +2,7 @@
 # This just tests whether the parser accepts them all.
 
 from test.support import check_syntax_error
+import inspect
 import unittest
 import sys
 # testing import *
@@ -1034,6 +1035,92 @@
         m @= 42
         self.assertEqual(m.other, 42)
 
+    def test_async_await(self):
+        async = 1
+        await = 2
+        self.assertEqual(async, 1)
+
+        def async():
+            nonlocal await
+            await = 10
+        async()
+        self.assertEqual(await, 10)
+
+        self.assertFalse(bool(async.__code__.co_flags & inspect.CO_COROUTINE))
+
+        async def test():
+            def sum():
+                async = 1
+                await = 41
+                return async + await
+
+            if 1:
+                await someobj()
+
+        self.assertEqual(test.__name__, 'test')
+        self.assertTrue(bool(test.__code__.co_flags & inspect.CO_COROUTINE))
+
+        def decorator(func):
+            setattr(func, '_marked', True)
+            return func
+
+        @decorator
+        async def test2():
+            return 22
+        self.assertTrue(test2._marked)
+        self.assertEqual(test2.__name__, 'test2')
+        self.assertTrue(bool(test2.__code__.co_flags & inspect.CO_COROUTINE))
+
+    def test_async_for(self):
+        class Done(Exception): pass
+
+        class AIter:
+            async def __aiter__(self):
+                return self
+            async def __anext__(self):
+                raise StopAsyncIteration
+
+        async def foo():
+            async for i in AIter():
+                pass
+            async for i, j in AIter():
+                pass
+            async for i in AIter():
+                pass
+            else:
+                pass
+            raise Done
+
+        with self.assertRaises(Done):
+            foo().send(None)
+
+    def test_async_with(self):
+        class Done(Exception): pass
+
+        class manager:
+            async def __aenter__(self):
+                return (1, 2)
+            async def __aexit__(self, *exc):
+                return False
+
+        async def foo():
+            async with manager():
+                pass
+            async with manager() as x:
+                pass
+            async with manager() as (x, y):
+                pass
+            async with manager(), manager():
+                pass
+            async with manager() as x, manager() as y:
+                pass
+            async with manager() as x, manager():
+                pass
+            raise Done
+
+        with self.assertRaises(Done):
+            foo().send(None)
+
 
 if __name__ == '__main__':
     unittest.main()
diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py
--- a/Lib/test/test_inspect.py
+++ b/Lib/test/test_inspect.py
@@ -18,6 +18,7 @@
 import unicodedata
 import unittest
 import unittest.mock
+import warnings
 
 try:
     from concurrent.futures import ThreadPoolExecutor
@@ -62,14 +63,16 @@
     predicates = set([inspect.isbuiltin, inspect.isclass, inspect.iscode,
                       inspect.isframe, inspect.isfunction, inspect.ismethod,
                       inspect.ismodule, inspect.istraceback,
-                      inspect.isgenerator, inspect.isgeneratorfunction])
+                      inspect.isgenerator, inspect.isgeneratorfunction,
+                      inspect.iscoroutine, inspect.iscoroutinefunction])
 
     def istest(self, predicate, exp):
         obj = eval(exp)
         self.assertTrue(predicate(obj), '%s(%s)' % (predicate.__name__, exp))
 
         for other in self.predicates - set([predicate]):
-            if predicate == inspect.isgeneratorfunction and\
+            if (predicate == inspect.isgeneratorfunction or \
+               predicate == inspect.iscoroutinefunction) and \
                other == inspect.isfunction:
                 continue
             self.assertFalse(other(obj), 'not %s(%s)' % (other.__name__, exp))
@@ -78,13 +81,21 @@
     for i in range(2):
         yield i
 
+async def coroutine_function_example(self):
+    return 'spam'
+
+ at types.coroutine
+def gen_coroutine_function_example(self):
+    yield
+    return 'spam'
+
 
 class TestPredicates(IsTestBase):
-    def test_sixteen(self):
+    def test_eightteen(self):
         count = len([x for x in dir(inspect) if x.startswith('is')])
         # This test is here for remember you to update Doc/library/inspect.rst
         # which claims there are 16 such functions
-        expected = 16
+        expected = 19
         err_msg = "There are %d (not %d) is* functions" % (count, expected)
         self.assertEqual(count, expected, err_msg)
 
@@ -115,11 +126,64 @@
         self.istest(inspect.isdatadescriptor, 'collections.defaultdict.default_factory')
         self.istest(inspect.isgenerator, '(x for x in range(2))')
         self.istest(inspect.isgeneratorfunction, 'generator_function_example')
+
+        with warnings.catch_warnings():
+            warnings.simplefilter("ignore")
+            self.istest(inspect.iscoroutine, 'coroutine_function_example(1)')
+            self.istest(inspect.iscoroutinefunction, 'coroutine_function_example')
+
         if hasattr(types, 'MemberDescriptorType'):
             self.istest(inspect.ismemberdescriptor, 'datetime.timedelta.days')
         else:
             self.assertFalse(inspect.ismemberdescriptor(datetime.timedelta.days))
 
+    def test_iscoroutine(self):
+        gen_coro = gen_coroutine_function_example(1)
+        coro = coroutine_function_example(1)
+
+        self.assertTrue(
+            inspect.iscoroutinefunction(gen_coroutine_function_example))
+        self.assertTrue(inspect.iscoroutine(gen_coro))
+
+        self.assertTrue(
+            inspect.isgeneratorfunction(gen_coroutine_function_example))
+        self.assertTrue(inspect.isgenerator(gen_coro))
+
+        self.assertTrue(
+            inspect.iscoroutinefunction(coroutine_function_example))
+        self.assertTrue(inspect.iscoroutine(coro))
+
+        self.assertFalse(
+            inspect.isgeneratorfunction(coroutine_function_example))
+        self.assertFalse(inspect.isgenerator(coro))
+
+        coro.close(); gen_coro.close() # silence warnings
+
+    def test_isawaitable(self):
+        def gen(): yield
+        self.assertFalse(inspect.isawaitable(gen()))
+
+        coro = coroutine_function_example(1)
+        gen_coro = gen_coroutine_function_example(1)
+
+        self.assertTrue(
+            inspect.isawaitable(coro))
+        self.assertTrue(
+            inspect.isawaitable(gen_coro))
+
+        class Future:
+            def __await__():
+                pass
+        self.assertTrue(inspect.isawaitable(Future()))
+        self.assertFalse(inspect.isawaitable(Future))
+
+        class NotFuture: pass
+        not_fut = NotFuture()
+        not_fut.__await__ = lambda: None
+        self.assertFalse(inspect.isawaitable(not_fut))
+
+        coro.close(); gen_coro.close() # silence warnings
+
     def test_isroutine(self):
         self.assertTrue(inspect.isroutine(mod.spam))
         self.assertTrue(inspect.isroutine([].count))
diff --git a/Lib/test/test_minidom.py b/Lib/test/test_minidom.py
--- a/Lib/test/test_minidom.py
+++ b/Lib/test/test_minidom.py
@@ -49,6 +49,21 @@
         t = node.wholeText
         self.confirm(t == s, "looking for %r, found %r" % (s, t))
 
+    def testDocumentAsyncAttr(self):
+        doc = Document()
+        self.assertFalse(doc.async_)
+        with self.assertWarns(DeprecationWarning):
+            self.assertFalse(getattr(doc, 'async', True))
+        with self.assertWarns(DeprecationWarning):
+            setattr(doc, 'async', True)
+        with self.assertWarns(DeprecationWarning):
+            self.assertTrue(getattr(doc, 'async', False))
+        self.assertTrue(doc.async_)
+
+        self.assertFalse(Document.async_)
+        with self.assertWarns(DeprecationWarning):
+            self.assertFalse(getattr(Document, 'async', True))
+
     def testParseFromBinaryFile(self):
         with open(tstfile, 'rb') as file:
             dom = parse(file)
diff --git a/Lib/test/test_parser.py b/Lib/test/test_parser.py
--- a/Lib/test/test_parser.py
+++ b/Lib/test/test_parser.py
@@ -63,6 +63,22 @@
                          "    if (yield):\n"
                          "        yield x\n")
 
+    def test_await_statement(self):
+        self.check_suite("async def f():\n await smth()")
+        self.check_suite("async def f():\n foo = await smth()")
+        self.check_suite("async def f():\n foo, bar = await smth()")
+        self.check_suite("async def f():\n (await smth())")
+        self.check_suite("async def f():\n foo((await smth()))")
+        self.check_suite("async def f():\n await foo(); return 42")
+
+    def test_async_with_statement(self):
+        self.check_suite("async def f():\n async with 1: pass")
+        self.check_suite("async def f():\n async with a as b, c as d: pass")
+
+    def test_async_for_statement(self):
+        self.check_suite("async def f():\n async for i in (): pass")
+        self.check_suite("async def f():\n async for i, b in (): pass")
+
     def test_nonlocal_statement(self):
         self.check_suite("def f():\n"
                          "    x = 0\n"
diff --git a/Lib/test/test_pickle.py b/Lib/test/test_pickle.py
--- a/Lib/test/test_pickle.py
+++ b/Lib/test/test_pickle.py
@@ -351,7 +351,9 @@
 
         for name, exc in get_exceptions(builtins):
             with self.subTest(name):
-                if exc in (BlockingIOError, ResourceWarning):
+                if exc in (BlockingIOError,
+                           ResourceWarning,
+                           StopAsyncIteration):
                     continue
                 if exc is not OSError and issubclass(exc, OSError):
                     self.assertEqual(reverse_mapping('builtins', name),
diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py
--- a/Lib/test/test_sys.py
+++ b/Lib/test/test_sys.py
@@ -1025,9 +1025,9 @@
         # static type: PyTypeObject
         s = vsize('P2n15Pl4Pn9Pn11PIP')
         check(int, s)
-        # (PyTypeObject + PyNumberMethods + PyMappingMethods +
+        # (PyTypeObject + PyAsyncMethods + PyNumberMethods + PyMappingMethods +
         #  PySequenceMethods + PyBufferProcs + 4P)
-        s = vsize('P2n17Pl4Pn9Pn11PIP') + struct.calcsize('34P 3P 10P 2P 4P')
+        s = vsize('P2n17Pl4Pn9Pn11PIP') + struct.calcsize('34P 3P 3P 10P 2P 4P')
         # Separate block for PyDictKeysObject with 4 entries
         s += struct.calcsize("2nPn") + 4*struct.calcsize("n2P")
         # class
diff --git a/Lib/test/test_tokenize.py b/Lib/test/test_tokenize.py
--- a/Lib/test/test_tokenize.py
+++ b/Lib/test/test_tokenize.py
@@ -641,6 +641,192 @@
     NAME       'grün'        (2, 0) (2, 4)
     OP         '='           (2, 5) (2, 6)
     STRING     "U'green'"    (2, 7) (2, 15)
+
+Async/await extension:
+
+    >>> dump_tokens("async = 1")
+    ENCODING   'utf-8'       (0, 0) (0, 0)
+    NAME       'async'       (1, 0) (1, 5)
+    OP         '='           (1, 6) (1, 7)
+    NUMBER     '1'           (1, 8) (1, 9)
+
+    >>> dump_tokens("a = (async = 1)")
+    ENCODING   'utf-8'       (0, 0) (0, 0)
+    NAME       'a'           (1, 0) (1, 1)
+    OP         '='           (1, 2) (1, 3)
+    OP         '('           (1, 4) (1, 5)
+    NAME       'async'       (1, 5) (1, 10)
+    OP         '='           (1, 11) (1, 12)
+    NUMBER     '1'           (1, 13) (1, 14)
+    OP         ')'           (1, 14) (1, 15)
+
+    >>> dump_tokens("async()")
+    ENCODING   'utf-8'       (0, 0) (0, 0)
+    NAME       'async'       (1, 0) (1, 5)
+    OP         '('           (1, 5) (1, 6)
+    OP         ')'           (1, 6) (1, 7)
+
+    >>> dump_tokens("class async(Bar):pass")
+    ENCODING   'utf-8'       (0, 0) (0, 0)
+    NAME       'class'       (1, 0) (1, 5)
+    NAME       'async'       (1, 6) (1, 11)
+    OP         '('           (1, 11) (1, 12)
+    NAME       'Bar'         (1, 12) (1, 15)
+    OP         ')'           (1, 15) (1, 16)
+    OP         ':'           (1, 16) (1, 17)
+    NAME       'pass'        (1, 17) (1, 21)
+
+    >>> dump_tokens("class async:pass")
+    ENCODING   'utf-8'       (0, 0) (0, 0)
+    NAME       'class'       (1, 0) (1, 5)
+    NAME       'async'       (1, 6) (1, 11)
+    OP         ':'           (1, 11) (1, 12)
+    NAME       'pass'        (1, 12) (1, 16)
+
+    >>> dump_tokens("await = 1")
+    ENCODING   'utf-8'       (0, 0) (0, 0)
+    NAME       'await'       (1, 0) (1, 5)
+    OP         '='           (1, 6) (1, 7)
+    NUMBER     '1'           (1, 8) (1, 9)
+
+    >>> dump_tokens("foo.async")
+    ENCODING   'utf-8'       (0, 0) (0, 0)
+    NAME       'foo'         (1, 0) (1, 3)
+    OP         '.'           (1, 3) (1, 4)
+    NAME       'async'       (1, 4) (1, 9)
+
+    >>> dump_tokens("async for a in b: pass")
+    ENCODING   'utf-8'       (0, 0) (0, 0)
+    NAME       'async'       (1, 0) (1, 5)
+    NAME       'for'         (1, 6) (1, 9)
+    NAME       'a'           (1, 10) (1, 11)
+    NAME       'in'          (1, 12) (1, 14)
+    NAME       'b'           (1, 15) (1, 16)
+    OP         ':'           (1, 16) (1, 17)
+    NAME       'pass'        (1, 18) (1, 22)
+
+    >>> dump_tokens("async with a as b: pass")
+    ENCODING   'utf-8'       (0, 0) (0, 0)
+    NAME       'async'       (1, 0) (1, 5)
+    NAME       'with'        (1, 6) (1, 10)
+    NAME       'a'           (1, 11) (1, 12)
+    NAME       'as'          (1, 13) (1, 15)
+    NAME       'b'           (1, 16) (1, 17)
+    OP         ':'           (1, 17) (1, 18)
+    NAME       'pass'        (1, 19) (1, 23)
+
+    >>> dump_tokens("async.foo")
+    ENCODING   'utf-8'       (0, 0) (0, 0)
+    NAME       'async'       (1, 0) (1, 5)
+    OP         '.'           (1, 5) (1, 6)
+    NAME       'foo'         (1, 6) (1, 9)
+
+    >>> dump_tokens("async")
+    ENCODING   'utf-8'       (0, 0) (0, 0)
+    NAME       'async'       (1, 0) (1, 5)
+
+    >>> dump_tokens("async\\n#comment\\nawait")
+    ENCODING   'utf-8'       (0, 0) (0, 0)
+    NAME       'async'       (1, 0) (1, 5)
+    NEWLINE    '\\n'          (1, 5) (1, 6)
+    COMMENT    '#comment'    (2, 0) (2, 8)
+    NL         '\\n'          (2, 8) (2, 9)
+    NAME       'await'       (3, 0) (3, 5)
+
+    >>> dump_tokens("async\\n...\\nawait")
+    ENCODING   'utf-8'       (0, 0) (0, 0)
+    NAME       'async'       (1, 0) (1, 5)
+    NEWLINE    '\\n'          (1, 5) (1, 6)
+    OP         '...'         (2, 0) (2, 3)
+    NEWLINE    '\\n'          (2, 3) (2, 4)
+    NAME       'await'       (3, 0) (3, 5)
+
+    >>> dump_tokens("async\\nawait")
+    ENCODING   'utf-8'       (0, 0) (0, 0)
+    NAME       'async'       (1, 0) (1, 5)
+    NEWLINE    '\\n'          (1, 5) (1, 6)
+    NAME       'await'       (2, 0) (2, 5)
+
+    >>> dump_tokens("foo.async + 1")
+    ENCODING   'utf-8'       (0, 0) (0, 0)
+    NAME       'foo'         (1, 0) (1, 3)
+    OP         '.'           (1, 3) (1, 4)
+    NAME       'async'       (1, 4) (1, 9)
+    OP         '+'           (1, 10) (1, 11)
+    NUMBER     '1'           (1, 12) (1, 13)
+
+    >>> dump_tokens("async def foo(): pass")
+    ENCODING   'utf-8'       (0, 0) (0, 0)
+    ASYNC      'async'       (1, 0) (1, 5)
+    NAME       'def'         (1, 6) (1, 9)
+    NAME       'foo'         (1, 10) (1, 13)
+    OP         '('           (1, 13) (1, 14)
+    OP         ')'           (1, 14) (1, 15)
+    OP         ':'           (1, 15) (1, 16)
+    NAME       'pass'        (1, 17) (1, 21)
+
+    >>> dump_tokens('''async def foo():
+    ...   def foo(await):
+    ...     await = 1
+    ...   if 1:
+    ...     await
+    ... async += 1
+    ... ''')
+    ENCODING   'utf-8'       (0, 0) (0, 0)
+    ASYNC      'async'       (1, 0) (1, 5)
+    NAME       'def'         (1, 6) (1, 9)
+    NAME       'foo'         (1, 10) (1, 13)
+    OP         '('           (1, 13) (1, 14)
+    OP         ')'           (1, 14) (1, 15)
+    OP         ':'           (1, 15) (1, 16)
+    NEWLINE    '\\n'          (1, 16) (1, 17)
+    INDENT     '  '          (2, 0) (2, 2)
+    NAME       'def'         (2, 2) (2, 5)
+    NAME       'foo'         (2, 6) (2, 9)
+    OP         '('           (2, 9) (2, 10)
+    NAME       'await'       (2, 10) (2, 15)
+    OP         ')'           (2, 15) (2, 16)
+    OP         ':'           (2, 16) (2, 17)
+    NEWLINE    '\\n'          (2, 17) (2, 18)
+    INDENT     '    '        (3, 0) (3, 4)
+    NAME       'await'       (3, 4) (3, 9)
+    OP         '='           (3, 10) (3, 11)
+    NUMBER     '1'           (3, 12) (3, 13)
+    NEWLINE    '\\n'          (3, 13) (3, 14)
+    DEDENT     ''            (4, 2) (4, 2)
+    NAME       'if'          (4, 2) (4, 4)
+    NUMBER     '1'           (4, 5) (4, 6)
+    OP         ':'           (4, 6) (4, 7)
+    NEWLINE    '\\n'          (4, 7) (4, 8)
+    INDENT     '    '        (5, 0) (5, 4)
+    AWAIT      'await'       (5, 4) (5, 9)
+    NEWLINE    '\\n'          (5, 9) (5, 10)
+    DEDENT     ''            (6, 0) (6, 0)
+    DEDENT     ''            (6, 0) (6, 0)
+    NAME       'async'       (6, 0) (6, 5)
+    OP         '+='          (6, 6) (6, 8)
+    NUMBER     '1'           (6, 9) (6, 10)
+    NEWLINE    '\\n'          (6, 10) (6, 11)
+
+    >>> dump_tokens('''async def foo():
+    ...   async for i in 1: pass''')
+    ENCODING   'utf-8'       (0, 0) (0, 0)
+    ASYNC      'async'       (1, 0) (1, 5)
+    NAME       'def'         (1, 6) (1, 9)
+    NAME       'foo'         (1, 10) (1, 13)
+    OP         '('           (1, 13) (1, 14)
+    OP         ')'           (1, 14) (1, 15)
+    OP         ':'           (1, 15) (1, 16)
+    NEWLINE    '\\n'          (1, 16) (1, 17)
+    INDENT     '  '          (2, 0) (2, 2)
+    ASYNC      'async'       (2, 2) (2, 7)
+    NAME       'for'         (2, 8) (2, 11)
+    NAME       'i'           (2, 12) (2, 13)
+    NAME       'in'          (2, 14) (2, 16)
+    NUMBER     '1'           (2, 17) (2, 18)
+    OP         ':'           (2, 18) (2, 19)
+    NAME       'pass'        (2, 20) (2, 24)
+    DEDENT     ''            (3, 0) (3, 0)
 """
 
 from test import support
diff --git a/Lib/test/test_types.py b/Lib/test/test_types.py
--- a/Lib/test/test_types.py
+++ b/Lib/test/test_types.py
@@ -1,7 +1,8 @@
 # Python test set -- part 6, built-in types
 
 from test.support import run_with_locale
-import collections
+import collections.abc
+import inspect
 import pickle
 import locale
 import sys
@@ -1172,5 +1173,37 @@
             self.assertEqual(ns, ns_roundtrip, pname)
 
 
+class CoroutineTests(unittest.TestCase):
+    def test_wrong_args(self):
+        class Foo:
+            def __call__(self):
+                pass
+        def bar(): pass
+
+        samples = [Foo, Foo(), bar, None, int, 1]
+        for sample in samples:
+            with self.assertRaisesRegex(TypeError, 'expects a generator'):
+                types.coroutine(sample)
+
+    def test_genfunc(self):
+        def gen():
+            yield
+
+        self.assertFalse(isinstance(gen(), collections.abc.Coroutine))
+        self.assertFalse(isinstance(gen(), collections.abc.Awaitable))
+
+        self.assertIs(types.coroutine(gen), gen)
+
+        self.assertTrue(gen.__code__.co_flags & inspect.CO_ITERABLE_COROUTINE)
+        self.assertFalse(gen.__code__.co_flags & inspect.CO_COROUTINE)
+
+        g = gen()
+        self.assertTrue(g.gi_code.co_flags & inspect.CO_ITERABLE_COROUTINE)
+        self.assertFalse(g.gi_code.co_flags & inspect.CO_COROUTINE)
+        self.assertTrue(isinstance(g, collections.abc.Coroutine))
+        self.assertTrue(isinstance(g, collections.abc.Awaitable))
+        g.close() # silence warning
+
+
 if __name__ == '__main__':
     unittest.main()
diff --git a/Lib/token.py b/Lib/token.py
--- a/Lib/token.py
+++ b/Lib/token.py
@@ -64,8 +64,10 @@
 RARROW = 51
 ELLIPSIS = 52
 OP = 53
-ERRORTOKEN = 54
-N_TOKENS = 55
+AWAIT = 54
+ASYNC = 55
+ERRORTOKEN = 56
+N_TOKENS = 57
 NT_OFFSET = 256
 #--end constants--
 
diff --git a/Lib/tokenize.py b/Lib/tokenize.py
--- a/Lib/tokenize.py
+++ b/Lib/tokenize.py
@@ -274,7 +274,7 @@
                 self.encoding = tokval
                 continue
 
-            if toknum in (NAME, NUMBER):
+            if toknum in (NAME, NUMBER, ASYNC, AWAIT):
                 tokval += ' '
 
             # Insert a space between two consecutive strings
@@ -477,6 +477,10 @@
     contline = None
     indents = [0]
 
+    # 'stashed' and 'ctx' are used for async/await parsing
+    stashed = None
+    ctx = [('sync', 0)]
+
     if encoding is not None:
         if encoding == "utf-8-sig":
             # BOM will already have been stripped.
@@ -552,6 +556,11 @@
                         "unindent does not match any outer indentation level",
                         ("<tokenize>", lnum, pos, line))
                 indents = indents[:-1]
+
+                cur_indent = indents[-1]
+                while len(ctx) > 1 and ctx[-1][1] >= cur_indent:
+                    ctx.pop()
+
                 yield TokenInfo(DEDENT, '', (lnum, pos), (lnum, pos), line)
 
         else:                                  # continued statement
@@ -572,10 +581,16 @@
                     (initial == '.' and token != '.' and token != '...')):
                     yield TokenInfo(NUMBER, token, spos, epos, line)
                 elif initial in '\r\n':
+                    if stashed:
+                        yield stashed
+                        stashed = None
                     yield TokenInfo(NL if parenlev > 0 else NEWLINE,
                            token, spos, epos, line)
                 elif initial == '#':
                     assert not token.endswith("\n")
+                    if stashed:
+                        yield stashed
+                        stashed = None
                     yield TokenInfo(COMMENT, token, spos, epos, line)
                 elif token in triple_quoted:
                     endprog = _compile(endpats[token])
@@ -603,7 +618,37 @@
                     else:                                  # ordinary string
                         yield TokenInfo(STRING, token, spos, epos, line)
                 elif initial.isidentifier():               # ordinary name
-                    yield TokenInfo(NAME, token, spos, epos, line)
+                    if token in ('async', 'await'):
+                        if ctx[-1][0] == 'async' and ctx[-1][1] < indents[-1]:
+                            yield TokenInfo(
+                                ASYNC if token == 'async' else AWAIT,
+                                token, spos, epos, line)
+                            continue
+
+                    tok = TokenInfo(NAME, token, spos, epos, line)
+                    if token == 'async' and not stashed:
+                        stashed = tok
+                        continue
+
+                    if token == 'def':
+                        if (stashed
+                                and stashed.type == NAME
+                                and stashed.string == 'async'):
+
+                            ctx.append(('async', indents[-1]))
+
+                            yield TokenInfo(ASYNC, stashed.string,
+                                            stashed.start, stashed.end,
+                                            stashed.line)
+                            stashed = None
+                        else:
+                            ctx.append(('sync', indents[-1]))
+
+                    if stashed:
+                        yield stashed
+                        stashed = None
+
+                    yield tok
                 elif initial == '\\':                      # continued stmt
                     continued = 1
                 else:
@@ -611,12 +656,19 @@
                         parenlev += 1
                     elif initial in ')]}':
                         parenlev -= 1
+                    if stashed:
+                        yield stashed
+                        stashed = None
                     yield TokenInfo(OP, token, spos, epos, line)
             else:
                 yield TokenInfo(ERRORTOKEN, line[pos],
                            (lnum, pos), (lnum, pos+1), line)
                 pos += 1
 
+    if stashed:
+        yield stashed
+        stashed = None
+
     for indent in indents[1:]:                 # pop remaining indent levels
         yield TokenInfo(DEDENT, '', (lnum, 0), (lnum, 0), '')
     yield TokenInfo(ENDMARKER, '', (lnum, 0), (lnum, 0), '')
diff --git a/Lib/types.py b/Lib/types.py
--- a/Lib/types.py
+++ b/Lib/types.py
@@ -43,6 +43,30 @@
 del sys, _f, _g, _C,                              # Not for export
 
 
+_CO_GENERATOR = 0x20
+_CO_ITERABLE_COROUTINE = 0x100
+
+def coroutine(func):
+    """Convert regular generator function to a coroutine."""
+
+    # TODO: Implement this in C.
+
+    if (not isinstance(func, (FunctionType, MethodType)) or
+            not isinstance(getattr(func, '__code__', None), CodeType) or
+            not (func.__code__.co_flags & _CO_GENERATOR)):
+        raise TypeError('coroutine() expects a generator function')
+
+    co = func.__code__
+    func.__code__ = CodeType(
+        co.co_argcount, co.co_kwonlyargcount, co.co_nlocals, co.co_stacksize,
+        co.co_flags | _CO_ITERABLE_COROUTINE,
+        co.co_code,
+        co.co_consts, co.co_names, co.co_varnames, co.co_filename, co.co_name,
+        co.co_firstlineno, co.co_lnotab, co.co_freevars, co.co_cellvars)
+
+    return func
+
+
 # Provide a PEP 3115 compliant mechanism for class creation
 def new_class(name, bases=(), kwds=None, exec_body=None):
     """Create a class object dynamically using the appropriate metaclass."""
diff --git a/Lib/xml/dom/xmlbuilder.py b/Lib/xml/dom/xmlbuilder.py
--- a/Lib/xml/dom/xmlbuilder.py
+++ b/Lib/xml/dom/xmlbuilder.py
@@ -1,6 +1,7 @@
 """Implementation of the DOM Level 3 'LS-Load' feature."""
 
 import copy
+import warnings
 import xml.dom
 
 from xml.dom.NodeFilter import NodeFilter
@@ -331,13 +332,33 @@
 del NodeFilter
 
 
+class _AsyncDeprecatedProperty:
+    def warn(self, cls):
+        clsname = cls.__name__
+        warnings.warn(
+            "{cls}.async is deprecated; use {cls}.async_".format(cls=clsname),
+            DeprecationWarning)
+
+    def __get__(self, instance, cls):
+        self.warn(cls)
+        if instance is not None:
+            return instance.async_
+        return False
+
+    def __set__(self, instance, value):
+        self.warn(type(instance))
+        setattr(instance, 'async_', value)
+
+
 class DocumentLS:
     """Mixin to create documents that conform to the load/save spec."""
 
-    async = False
+    async = _AsyncDeprecatedProperty()
+    async_ = False
 
     def _get_async(self):
         return False
+
     def _set_async(self, async):
         if async:
             raise xml.dom.NotSupportedErr(
@@ -363,6 +384,9 @@
         return snode.toxml()
 
 
+del _AsyncDeprecatedProperty
+
+
 class DOMImplementationLS:
     MODE_SYNCHRONOUS = 1
     MODE_ASYNCHRONOUS = 2
diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c
--- a/Modules/_testcapimodule.c
+++ b/Modules/_testcapimodule.c
@@ -3944,6 +3944,98 @@
 };
 
 
+typedef struct {
+    PyObject_HEAD
+    PyObject *ao_iterator;
+} awaitObject;
+
+
+static PyObject *
+awaitObject_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+    PyObject *v;
+    awaitObject *ao;
+
+    if (!PyArg_UnpackTuple(args, "awaitObject", 1, 1, &v))
+        return NULL;
+
+    ao = (awaitObject *)type->tp_alloc(type, 0);
+    if (ao == NULL) {
+        return NULL;
+    }
+
+    Py_INCREF(v);
+    ao->ao_iterator = v;
+
+    return (PyObject *)ao;
+}
+
+
+static void
+awaitObject_dealloc(awaitObject *ao)
+{
+    Py_CLEAR(ao->ao_iterator);
+    Py_TYPE(ao)->tp_free(ao);
+}
+
+
+static PyObject *
+awaitObject_await(awaitObject *ao)
+{
+    Py_INCREF(ao->ao_iterator);
+    return ao->ao_iterator;
+}
+
+static PyAsyncMethods awaitType_as_async = {
+    (getawaitablefunc)awaitObject_await,    /* am_await */
+    0,                                      /* am_aiter */
+    0                                       /* am_anext */
+};
+
+
+static PyTypeObject awaitType = {
+    PyVarObject_HEAD_INIT(NULL, 0)
+    "awaitType",
+    sizeof(awaitObject),                /* tp_basicsize */
+    0,                                  /* tp_itemsize */
+    (destructor)awaitObject_dealloc,    /* destructor tp_dealloc */
+    0,                                  /* tp_print */
+    0,                                  /* tp_getattr */
+    0,                                  /* tp_setattr */
+    &awaitType_as_async,                /* tp_as_async */
+    0,                                  /* tp_repr */
+    0,                                  /* tp_as_number */
+    0,                                  /* tp_as_sequence */
+    0,                                  /* tp_as_mapping */
+    0,                                  /* tp_hash */
+    0,                                  /* tp_call */
+    0,                                  /* tp_str */
+    PyObject_GenericGetAttr,            /* tp_getattro */
+    PyObject_GenericSetAttr,            /* tp_setattro */
+    0,                                  /* tp_as_buffer */
+    0,                                  /* tp_flags */
+    "C level type with tp_as_async",
+    0,                                  /* traverseproc tp_traverse */
+    0,                                  /* tp_clear */
+    0,                                  /* tp_richcompare */
+    0,                                  /* tp_weaklistoffset */
+    0,                                  /* tp_iter */
+    0,                                  /* tp_iternext */
+    0,                                  /* tp_methods */
+    0,                                  /* tp_members */
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    awaitObject_new,                    /* tp_new */
+    PyObject_Del,                       /* tp_free */
+};
+
+
 static struct PyModuleDef _testcapimodule = {
     PyModuleDef_HEAD_INIT,
     "_testcapi",
@@ -3977,6 +4069,11 @@
     Py_INCREF(&matmulType);
     PyModule_AddObject(m, "matmulType", (PyObject *)&matmulType);
 
+    if (PyType_Ready(&awaitType) < 0)
+        return NULL;
+    Py_INCREF(&awaitType);
+    PyModule_AddObject(m, "awaitType", (PyObject *)&awaitType);
+
     PyModule_AddObject(m, "CHAR_MAX", PyLong_FromLong(CHAR_MAX));
     PyModule_AddObject(m, "CHAR_MIN", PyLong_FromLong(CHAR_MIN));
     PyModule_AddObject(m, "UCHAR_MAX", PyLong_FromLong(UCHAR_MAX));
diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c
--- a/Modules/parsermodule.c
+++ b/Modules/parsermodule.c
@@ -1041,6 +1041,8 @@
 VALIDATER(or_test);
 VALIDATER(test_nocond);         VALIDATER(lambdef_nocond);
 VALIDATER(yield_arg);
+VALIDATER(async_funcdef);       VALIDATER(async_stmt);
+VALIDATER(atom_expr);
 
 #undef VALIDATER
 
@@ -1608,6 +1610,7 @@
           || (ntype == try_stmt)
           || (ntype == with_stmt)
           || (ntype == funcdef)
+          || (ntype == async_stmt)
           || (ntype == classdef)
           || (ntype == decorated))
         res = validate_node(tree);
@@ -2440,27 +2443,60 @@
 
 /*  power:
  *
- *  power: atom trailer* ('**' factor)*
+ *  power: atom_expr trailer* ['**' factor]
  */
 static int
 validate_power(node *tree)
 {
-    int pos = 1;
     int nch = NCH(tree);
     int res = (validate_ntype(tree, power) && (nch >= 1)
-               && validate_atom(CHILD(tree, 0)));
-
-    while (res && (pos < nch) && (TYPE(CHILD(tree, pos)) == trailer))
-        res = validate_trailer(CHILD(tree, pos++));
-    if (res && (pos < nch)) {
-        if (!is_even(nch - pos)) {
+               && validate_atom_expr(CHILD(tree, 0)));
+
+    if (nch > 1) {
+        if (nch != 3) {
             err_string("illegal number of nodes for 'power'");
             return (0);
         }
-        for ( ; res && (pos < (nch - 1)); pos += 2)
-            res = (validate_doublestar(CHILD(tree, pos))
-                   && validate_factor(CHILD(tree, pos + 1)));
+        res = (validate_doublestar(CHILD(tree, 1))
+               && validate_factor(CHILD(tree, 2)));
     }
+
+    return (res);
+}
+
+
+/*  atom_expr:
+ *
+ *  atom_expr: [AWAIT] atom trailer*
+ */
+static int
+validate_atom_expr(node *tree)
+{
+    int start = 0;
+    int nch = NCH(tree);
+    int res;
+    int pos;
+
+    res = validate_ntype(tree, atom_expr) && (nch >= 1);
+    if (!res) {
+        return (res);
+    }
+
+    if (TYPE(CHILD(tree, 0)) == AWAIT) {
+        start = 1;
+        if (nch < 2) {
+            err_string("illegal number of nodes for 'atom_expr'");
+            return (0);
+        }
+    }
+
+    res = validate_atom(CHILD(tree, start));
+    if (res) {
+        pos = start + 1;
+        while (res && (pos < nch) && (TYPE(CHILD(tree, pos)) == trailer))
+            res = validate_trailer(CHILD(tree, pos++));
+    }
+
     return (res);
 }
 
@@ -2482,9 +2518,9 @@
 
             if (res && (nch == 3)) {
                 if (TYPE(CHILD(tree, 1))==yield_expr)
-                    res = validate_yield_expr(CHILD(tree, 1));
+                        res = validate_yield_expr(CHILD(tree, 1));
                 else
-                    res = validate_testlist_comp(CHILD(tree, 1));
+                        res = validate_testlist_comp(CHILD(tree, 1));
             }
             break;
           case LSQB:
@@ -2658,6 +2694,55 @@
     return res;
 }
 
+/* async_funcdef: ASYNC funcdef */
+
+static int
+validate_async_funcdef(node *tree)
+{
+    int nch = NCH(tree);
+    int res = validate_ntype(tree, async_funcdef);
+    if (res) {
+        if (nch == 2) {
+            res = (validate_ntype(CHILD(tree, 0), ASYNC)
+                   && validate_funcdef(CHILD(tree, 1)));
+        }
+        else {
+            res = 0;
+            err_string("illegal number of children for async_funcdef");
+        }
+    }
+    return res;
+}
+
+
+/* async_stmt: ASYNC (funcdef | with_stmt | for_stmt) */
+
+static int
+validate_async_stmt(node *tree)
+{
+    int nch = NCH(tree);
+    int res = (validate_ntype(tree, async_stmt)
+                && validate_ntype(CHILD(tree, 0), ASYNC));
+
+    if (nch != 2) {
+        res = 0;
+        err_string("illegal number of children for async_stmt");
+    } else {
+        if (TYPE(CHILD(tree, 1)) == funcdef) {
+            res = validate_funcdef(CHILD(tree, 1));
+        }
+        else if (TYPE(CHILD(tree, 1)) == with_stmt) {
+            res = validate_with_stmt(CHILD(tree, 1));
+        }
+        else if (TYPE(CHILD(tree, 1)) == for_stmt) {
+            res = validate_for(CHILD(tree, 1));
+        }
+    }
+
+    return res;
+}
+
+
 
 /* decorated
  *   decorators (classdef | funcdef)
@@ -3085,6 +3170,12 @@
             /*
              *  Definition nodes.
              */
+          case async_funcdef:
+            res = validate_async_funcdef(tree);
+            break;
+          case async_stmt:
+            res = validate_async_stmt(tree);
+            break;
           case funcdef:
             res = validate_funcdef(tree);
             break;
diff --git a/Objects/exceptions.c b/Objects/exceptions.c
--- a/Objects/exceptions.c
+++ b/Objects/exceptions.c
@@ -473,6 +473,13 @@
 
 
 /*
+ *    StopAsyncIteration extends Exception
+ */
+SimpleExtendsException(PyExc_Exception, StopAsyncIteration,
+                       "Signal the end from iterator.__anext__().");
+
+
+/*
  *    StopIteration extends Exception
  */
 
@@ -2468,6 +2475,7 @@
     PRE_INIT(BaseException)
     PRE_INIT(Exception)
     PRE_INIT(TypeError)
+    PRE_INIT(StopAsyncIteration)
     PRE_INIT(StopIteration)
     PRE_INIT(GeneratorExit)
     PRE_INIT(SystemExit)
@@ -2538,6 +2546,7 @@
     POST_INIT(BaseException)
     POST_INIT(Exception)
     POST_INIT(TypeError)
+    POST_INIT(StopAsyncIteration)
     POST_INIT(StopIteration)
     POST_INIT(GeneratorExit)
     POST_INIT(SystemExit)
diff --git a/Objects/frameobject.c b/Objects/frameobject.c
--- a/Objects/frameobject.c
+++ b/Objects/frameobject.c
@@ -196,6 +196,7 @@
         case SETUP_EXCEPT:
         case SETUP_FINALLY:
         case SETUP_WITH:
+        case SETUP_ASYNC_WITH:
             blockstack[blockstack_top++] = addr;
             in_finally[blockstack_top-1] = 0;
             break;
@@ -203,7 +204,8 @@
         case POP_BLOCK:
             assert(blockstack_top > 0);
             setup_op = code[blockstack[blockstack_top-1]];
-            if (setup_op == SETUP_FINALLY || setup_op == SETUP_WITH) {
+            if (setup_op == SETUP_FINALLY || setup_op == SETUP_WITH
+                                    || setup_op == SETUP_ASYNC_WITH) {
                 in_finally[blockstack_top-1] = 1;
             }
             else {
@@ -218,7 +220,8 @@
              * be seeing such an END_FINALLY.) */
             if (blockstack_top > 0) {
                 setup_op = code[blockstack[blockstack_top-1]];
-                if (setup_op == SETUP_FINALLY || setup_op == SETUP_WITH) {
+                if (setup_op == SETUP_FINALLY || setup_op == SETUP_WITH
+                                    || setup_op == SETUP_ASYNC_WITH) {
                     blockstack_top--;
                 }
             }
@@ -281,6 +284,7 @@
         case SETUP_EXCEPT:
         case SETUP_FINALLY:
         case SETUP_WITH:
+        case SETUP_ASYNC_WITH:
             delta_iblock++;
             break;
 
diff --git a/Objects/genobject.c b/Objects/genobject.c
--- a/Objects/genobject.c
+++ b/Objects/genobject.c
@@ -24,6 +24,19 @@
     PyObject *res;
     PyObject *error_type, *error_value, *error_traceback;
 
+    /* If `gen` is a coroutine, and if it was never awaited on,
+       issue a RuntimeWarning. */
+    if (gen->gi_code != NULL
+            && ((PyCodeObject *)gen->gi_code)->co_flags & (CO_COROUTINE
+                                                       | CO_ITERABLE_COROUTINE)
+            && gen->gi_frame != NULL
+            && gen->gi_frame->f_lasti == -1
+            && !PyErr_Occurred()
+            && PyErr_WarnFormat(PyExc_RuntimeWarning, 1,
+                                "coroutine '%.50S' was never awaited",
+                                gen->gi_qualname))
+        return;
+
     if (gen->gi_frame == NULL || gen->gi_frame->f_stacktop == NULL)
         /* Generator isn't paused, so no need to close */
         return;
@@ -135,7 +148,7 @@
          * a leaking StopIteration into RuntimeError (with its cause
          * set appropriately). */
         if ((((PyCodeObject *)gen->gi_code)->co_flags &
-                                                CO_FUTURE_GENERATOR_STOP)
+              (CO_FUTURE_GENERATOR_STOP | CO_COROUTINE | CO_ITERABLE_COROUTINE))
             && PyErr_ExceptionMatches(PyExc_StopIteration))
         {
             PyObject *exc, *val, *val2, *tb;
@@ -402,6 +415,12 @@
 static PyObject *
 gen_iternext(PyGenObject *gen)
 {
+    if (((PyCodeObject*)gen->gi_code)->co_flags & CO_COROUTINE) {
+        PyErr_SetString(PyExc_TypeError,
+                        "coroutine-objects do not support iteration");
+        return NULL;
+    }
+
     return gen_send_ex(gen, NULL, 0);
 }
 
@@ -459,8 +478,14 @@
 static PyObject *
 gen_repr(PyGenObject *gen)
 {
-    return PyUnicode_FromFormat("<generator object %S at %p>",
-                                gen->gi_qualname, gen);
+    if (PyGen_CheckCoroutineExact(gen)) {
+        return PyUnicode_FromFormat("<coroutine object %S at %p>",
+                                    gen->gi_qualname, gen);
+    }
+    else {
+        return PyUnicode_FromFormat("<generator object %S at %p>",
+                                    gen->gi_qualname, gen);
+    }
 }
 
 static PyObject *
@@ -496,6 +521,19 @@
     return op->gi_qualname;
 }
 
+static PyObject *
+gen_get_iter(PyGenObject *gen)
+{
+    if (((PyCodeObject*)gen->gi_code)->co_flags & CO_COROUTINE) {
+        PyErr_SetString(PyExc_TypeError,
+                        "coroutine-objects do not support iteration");
+        return NULL;
+    }
+
+    Py_INCREF(gen);
+    return gen;
+}
+
 static int
 gen_set_qualname(PyGenObject *op, PyObject *value)
 {
@@ -547,7 +585,7 @@
     0,                                          /* tp_print */
     0,                                          /* tp_getattr */
     0,                                          /* tp_setattr */
-    0,                                          /* tp_reserved */
+    0,                                          /* tp_as_async */
     (reprfunc)gen_repr,                         /* tp_repr */
     0,                                          /* tp_as_number */
     0,                                          /* tp_as_sequence */
@@ -565,7 +603,7 @@
     0,                                          /* tp_clear */
     0,                                          /* tp_richcompare */
     offsetof(PyGenObject, gi_weakreflist),      /* tp_weaklistoffset */
-    PyObject_SelfIter,                          /* tp_iter */
+    (getiterfunc)gen_get_iter,                  /* tp_iter */
     (iternextfunc)gen_iternext,                 /* tp_iternext */
     gen_methods,                                /* tp_methods */
     gen_memberlist,                             /* tp_members */
@@ -642,3 +680,57 @@
     /* No blocks except loops, it's safe to skip finalization. */
     return 0;
 }
+
+/*
+ *   This helper function returns an awaitable for `o`:
+ *     - `o` if `o` is a coroutine-object;
+ *     - `type(o)->tp_as_async->am_await(o)`
+ *
+ *   Raises a TypeError if it's not possible to return
+ *   an awaitable and returns NULL.
+ */
+PyObject *
+_PyGen_GetAwaitableIter(PyObject *o)
+{
+    getawaitablefunc getter = NULL;
+    PyTypeObject *ot;
+
+    if (PyGen_CheckCoroutineExact(o)) {
+        /* Fast path. It's a central function for 'await'. */
+        Py_INCREF(o);
+        return o;
+    }
+
+    ot = Py_TYPE(o);
+    if (ot->tp_as_async != NULL) {
+        getter = ot->tp_as_async->am_await;
+    }
+    if (getter != NULL) {
+        PyObject *res = (*getter)(o);
+        if (res != NULL) {
+            if (!PyIter_Check(res)) {
+                PyErr_Format(PyExc_TypeError,
+                             "__await__() returned non-iterator "
+                             "of type '%.100s'",
+                             Py_TYPE(res)->tp_name);
+                Py_CLEAR(res);
+            }
+            else {
+                if (PyGen_CheckCoroutineExact(res)) {
+                    /* __await__ must return an *iterator*, not
+                       a coroutine or another awaitable (see PEP 492) */
+                    PyErr_SetString(PyExc_TypeError,
+                                    "__await__() returned a coroutine");
+                    Py_CLEAR(res);
+                }
+            }
+        }
+        return res;
+    }
+
+    PyErr_Format(PyExc_TypeError,
+                 "object %.100s can't be used in 'await' expression",
+                 ot->tp_name);
+
+    return NULL;
+}
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -2506,6 +2506,7 @@
         type->tp_flags |= Py_TPFLAGS_HAVE_GC;
 
     /* Initialize essential fields */
+    type->tp_as_async = &et->as_async;
     type->tp_as_number = &et->as_number;
     type->tp_as_sequence = &et->as_sequence;
     type->tp_as_mapping = &et->as_mapping;
@@ -2751,6 +2752,7 @@
     }
 
     /* Initialize essential fields */
+    type->tp_as_async = &res->as_async;
     type->tp_as_number = &res->as_number;
     type->tp_as_sequence = &res->as_sequence;
     type->tp_as_mapping = &res->as_mapping;
@@ -4566,6 +4568,7 @@
 #define COPYSLOT(SLOT) \
     if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
 
+#define COPYASYNC(SLOT) COPYSLOT(tp_as_async->SLOT)
 #define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
 #define COPYSEQ(SLOT) COPYSLOT(tp_as_sequence->SLOT)
 #define COPYMAP(SLOT) COPYSLOT(tp_as_mapping->SLOT)
@@ -4615,6 +4618,15 @@
         COPYNUM(nb_inplace_matrix_multiply);
     }
 
+    if (type->tp_as_async != NULL && base->tp_as_async != NULL) {
+        basebase = base->tp_base;
+        if (basebase->tp_as_async == NULL)
+            basebase = NULL;
+        COPYASYNC(am_await);
+        COPYASYNC(am_aiter);
+        COPYASYNC(am_anext);
+    }
+
     if (type->tp_as_sequence != NULL && base->tp_as_sequence != NULL) {
         basebase = base->tp_base;
         if (basebase->tp_as_sequence == NULL)
@@ -4884,6 +4896,8 @@
     /* Some more special stuff */
     base = type->tp_base;
     if (base != NULL) {
+        if (type->tp_as_async == NULL)
+            type->tp_as_async = base->tp_as_async;
         if (type->tp_as_number == NULL)
             type->tp_as_number = base->tp_as_number;
         if (type->tp_as_sequence == NULL)
@@ -4904,16 +4918,6 @@
             goto error;
     }
 
-    /* Warn for a type that implements tp_compare (now known as
-       tp_reserved) but not tp_richcompare. */
-    if (type->tp_reserved && !type->tp_richcompare) {
-        PyErr_Format(PyExc_TypeError,
-            "Type %.100s defines tp_reserved (formerly tp_compare) "
-            "but not tp_richcompare. Comparisons may not behave as intended.",
-            type->tp_name);
-        goto error;
-    }
-
     /* All done -- set the ready flag */
     assert(type->tp_dict != NULL);
     type->tp_flags =
@@ -6265,6 +6269,59 @@
     PyErr_Restore(error_type, error_value, error_traceback);
 }
 
+static PyObject *
+slot_am_await(PyObject *self)
+{
+    PyObject *func, *res;
+    _Py_IDENTIFIER(__await__);
+
+    func = lookup_method(self, &PyId___await__);
+    if (func != NULL) {
+        res = PyEval_CallObject(func, NULL);
+        Py_DECREF(func);
+        return res;
+    }
+    PyErr_Format(PyExc_AttributeError,
+                 "object %.50s does not have __await__ method",
+                 Py_TYPE(self)->tp_name);
+    return NULL;
+}
+
+static PyObject *
+slot_am_aiter(PyObject *self)
+{
+    PyObject *func, *res;
+    _Py_IDENTIFIER(__aiter__);
+
+    func = lookup_method(self, &PyId___aiter__);
+    if (func != NULL) {
+        res = PyEval_CallObject(func, NULL);
+        Py_DECREF(func);
+        return res;
+    }
+    PyErr_Format(PyExc_AttributeError,
+                 "object %.50s does not have __aiter__ method",
+                 Py_TYPE(self)->tp_name);
+    return NULL;
+}
+
+static PyObject *
+slot_am_anext(PyObject *self)
+{
+    PyObject *func, *res;
+    _Py_IDENTIFIER(__anext__);
+
+    func = lookup_method(self, &PyId___anext__);
+    if (func != NULL) {
+        res = PyEval_CallObject(func, NULL);
+        Py_DECREF(func);
+        return res;
+    }
+    PyErr_Format(PyExc_AttributeError,
+                 "object %.50s does not have __anext__ method",
+                 Py_TYPE(self)->tp_name);
+    return NULL;
+}
 
 /*
 Table mapping __foo__ names to tp_foo offsets and slot_tp_foo wrapper functions.
@@ -6281,6 +6338,7 @@
 
 #undef TPSLOT
 #undef FLSLOT
+#undef AMSLOT
 #undef ETSLOT
 #undef SQSLOT
 #undef MPSLOT
@@ -6299,6 +6357,8 @@
 #define ETSLOT(NAME, SLOT, FUNCTION, WRAPPER, DOC) \
     {NAME, offsetof(PyHeapTypeObject, SLOT), (void *)(FUNCTION), WRAPPER, \
      PyDoc_STR(DOC)}
+#define AMSLOT(NAME, SLOT, FUNCTION, WRAPPER, DOC) \
+    ETSLOT(NAME, as_async.SLOT, FUNCTION, WRAPPER, DOC)
 #define SQSLOT(NAME, SLOT, FUNCTION, WRAPPER, DOC) \
     ETSLOT(NAME, as_sequence.SLOT, FUNCTION, WRAPPER, DOC)
 #define MPSLOT(NAME, SLOT, FUNCTION, WRAPPER, DOC) \
@@ -6378,6 +6438,13 @@
            "Create and return new object.  See help(type) for accurate signature."),
     TPSLOT("__del__", tp_finalize, slot_tp_finalize, (wrapperfunc)wrap_del, ""),
 
+    AMSLOT("__await__", am_await, slot_am_await, wrap_unaryfunc,
+           "__await__($self, /)\n--\n\nReturn an iterator to be used in await expression."),
+    AMSLOT("__aiter__", am_aiter, slot_am_aiter, wrap_unaryfunc,
+           "__aiter__($self, /)\n--\n\nReturn an awaitable, that resolves in asynchronous iterator."),
+    AMSLOT("__anext__", am_anext, slot_am_anext, wrap_unaryfunc,
+           "__anext__($self, /)\n--\n\nReturn a value or raise StopAsyncIteration."),
+
     BINSLOT("__add__", nb_add, slot_nb_add,
            "+"),
     RBINSLOT("__radd__", nb_add, slot_nb_add,
@@ -6530,6 +6597,10 @@
         ptr = (char *)type->tp_as_number;
         offset -= offsetof(PyHeapTypeObject, as_number);
     }
+    else if ((size_t)offset >= offsetof(PyHeapTypeObject, as_async)) {
+        ptr = (char *)type->tp_as_async;
+        offset -= offsetof(PyHeapTypeObject, as_async);
+    }
     else {
         ptr = (char *)type;
     }
diff --git a/Objects/typeslots.inc b/Objects/typeslots.inc
--- a/Objects/typeslots.inc
+++ b/Objects/typeslots.inc
@@ -75,3 +75,6 @@
 offsetof(PyHeapTypeObject, ht_type.tp_free),
 offsetof(PyHeapTypeObject, as_number.nb_matrix_multiply),
 offsetof(PyHeapTypeObject, as_number.nb_inplace_matrix_multiply),
+offsetof(PyHeapTypeObject, as_async.am_await),
+offsetof(PyHeapTypeObject, as_async.am_aiter),
+offsetof(PyHeapTypeObject, as_async.am_anext),
diff --git a/Objects/typeslots.py b/Objects/typeslots.py
--- a/Objects/typeslots.py
+++ b/Objects/typeslots.py
@@ -12,6 +12,8 @@
     member = m.group(1)
     if member.startswith("tp_"):
         member = "ht_type."+member
+    elif member.startswith("am_"):
+        member = "as_async."+member
     elif member.startswith("nb_"):
         member = "as_number."+member
     elif member.startswith("mp_"):
diff --git a/Parser/Python.asdl b/Parser/Python.asdl
--- a/Parser/Python.asdl
+++ b/Parser/Python.asdl
@@ -10,7 +10,10 @@
         | Suite(stmt* body)
 
     stmt = FunctionDef(identifier name, arguments args,
-                           stmt* body, expr* decorator_list, expr? returns)
+                       stmt* body, expr* decorator_list, expr? returns)
+          | AsyncFunctionDef(identifier name, arguments args,
+                             stmt* body, expr* decorator_list, expr? returns)
+
           | ClassDef(identifier name,
              expr* bases,
              keyword* keywords,
@@ -24,9 +27,11 @@
 
           -- use 'orelse' because else is a keyword in target languages
           | For(expr target, expr iter, stmt* body, stmt* orelse)
+          | AsyncFor(expr target, expr iter, stmt* body, stmt* orelse)
           | While(expr test, stmt* body, stmt* orelse)
           | If(expr test, stmt* body, stmt* orelse)
           | With(withitem* items, stmt* body)
+          | AsyncWith(withitem* items, stmt* body)
 
           | Raise(expr? exc, expr? cause)
           | Try(stmt* body, excepthandler* handlers, stmt* orelse, stmt* finalbody)
@@ -57,6 +62,7 @@
          | DictComp(expr key, expr value, comprehension* generators)
          | GeneratorExp(expr elt, comprehension* generators)
          -- the grammar constrains where yield expressions can occur
+         | Await(expr value)
          | Yield(expr? value)
          | YieldFrom(expr value)
          -- need sequences for compare to distinguish between
diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c
--- a/Parser/tokenizer.c
+++ b/Parser/tokenizer.c
@@ -103,6 +103,8 @@
     "ELLIPSIS",
     /* This table must match the #defines in token.h! */
     "OP",
+    "AWAIT",
+    "ASYNC",
     "<ERRORTOKEN>",
     "<N_TOKENS>"
 };
@@ -124,6 +126,11 @@
     tok->tabsize = TABSIZE;
     tok->indent = 0;
     tok->indstack[0] = 0;
+
+    tok->def = 0;
+    tok->defstack[0] = 0;
+    tok->deftypestack[0] = 0;
+
     tok->atbol = 1;
     tok->pendin = 0;
     tok->prompt = tok->nextprompt = NULL;
@@ -1335,6 +1342,11 @@
     int c;
     int blankline, nonascii;
 
+    int tok_len;
+    struct tok_state ahead_tok;
+    char *ahead_tok_start = NULL, *ahead_top_end = NULL;
+    int ahead_tok_kind;
+
     *p_start = *p_end = NULL;
   nextline:
     tok->start = NULL;
@@ -1422,6 +1434,11 @@
     if (tok->pendin != 0) {
         if (tok->pendin < 0) {
             tok->pendin++;
+
+            while (tok->def && tok->defstack[tok->def] >= tok->indent) {
+                tok->def--;
+            }
+
             return DEDENT;
         }
         else {
@@ -1481,6 +1498,57 @@
             return ERRORTOKEN;
         *p_start = tok->start;
         *p_end = tok->cur;
+
+        tok_len = tok->cur - tok->start;
+        if (tok_len == 3 && memcmp(tok->start, "def", 3) == 0) {
+
+            if (tok->def + 1 >= MAXINDENT) {
+                tok->done = E_TOODEEP;
+                tok->cur = tok->inp;
+                return ERRORTOKEN;
+            }
+
+            if (tok->def && tok->deftypestack[tok->def] == 3) {
+                tok->deftypestack[tok->def] = 2;
+            }
+            else {
+                tok->def++;
+                tok->defstack[tok->def] = tok->indent;
+                tok->deftypestack[tok->def] = 1;
+            }
+        }
+        else if (tok_len == 5) {
+            if (memcmp(tok->start, "async", 5) == 0) {
+                memcpy(&ahead_tok, tok, sizeof(ahead_tok));
+
+                ahead_tok_kind = tok_get(&ahead_tok, &ahead_tok_start,
+                                         &ahead_top_end);
+
+                if (ahead_tok_kind == NAME &&
+                        ahead_tok.cur - ahead_tok.start == 3 &&
+                        memcmp(ahead_tok.start, "def", 3) == 0) {
+
+                    tok->def++;
+                    tok->defstack[tok->def] = tok->indent;
+                    tok->deftypestack[tok->def] = 3;
+
+                    return ASYNC;
+                }
+                else if (tok->def && tok->deftypestack[tok->def] == 2
+                         && tok->defstack[tok->def] < tok->indent) {
+
+                    return ASYNC;
+                }
+
+            }
+            else if (memcmp(tok->start, "await", 5) == 0
+                        && tok->def && tok->deftypestack[tok->def] == 2
+                        && tok->defstack[tok->def] < tok->indent) {
+
+                return AWAIT;
+            }
+        }
+
         return NAME;
     }
 
diff --git a/Parser/tokenizer.h b/Parser/tokenizer.h
--- a/Parser/tokenizer.h
+++ b/Parser/tokenizer.h
@@ -65,6 +65,13 @@
     const char* enc;        /* Encoding for the current str. */
     const char* str;
     const char* input; /* Tokenizer's newline translated copy of the string. */
+
+    int defstack[MAXINDENT];     /* stack if funcs & indents where they
+                                    were defined */
+    int deftypestack[MAXINDENT]; /* stack of func types
+                                    (0 not func; 1: "def name";
+                                     2: "async def name") */
+    int def;                     /* Length of stack of func types */
 };
 
 extern struct tok_state *PyTokenizer_FromString(const char *, int);
diff --git a/Python/Python-ast.c b/Python/Python-ast.c
--- a/Python/Python-ast.c
+++ b/Python/Python-ast.c
@@ -45,6 +45,14 @@
     "decorator_list",
     "returns",
 };
+static PyTypeObject *AsyncFunctionDef_type;
+static char *AsyncFunctionDef_fields[]={
+    "name",
+    "args",
+    "body",
+    "decorator_list",
+    "returns",
+};
 static PyTypeObject *ClassDef_type;
 _Py_IDENTIFIER(bases);
 _Py_IDENTIFIER(keywords);
@@ -87,6 +95,13 @@
     "body",
     "orelse",
 };
+static PyTypeObject *AsyncFor_type;
+static char *AsyncFor_fields[]={
+    "target",
+    "iter",
+    "body",
+    "orelse",
+};
 static PyTypeObject *While_type;
 _Py_IDENTIFIER(test);
 static char *While_fields[]={
@@ -106,6 +121,11 @@
     "items",
     "body",
 };
+static PyTypeObject *AsyncWith_type;
+static char *AsyncWith_fields[]={
+    "items",
+    "body",
+};
 static PyTypeObject *Raise_type;
 _Py_IDENTIFIER(exc);
 _Py_IDENTIFIER(cause);
@@ -228,6 +248,10 @@
     "elt",
     "generators",
 };
+static PyTypeObject *Await_type;
+static char *Await_fields[]={
+    "value",
+};
 static PyTypeObject *Yield_type;
 static char *Yield_fields[]={
     "value",
@@ -806,6 +830,9 @@
     FunctionDef_type = make_type("FunctionDef", stmt_type, FunctionDef_fields,
                                  5);
     if (!FunctionDef_type) return 0;
+    AsyncFunctionDef_type = make_type("AsyncFunctionDef", stmt_type,
+                                      AsyncFunctionDef_fields, 5);
+    if (!AsyncFunctionDef_type) return 0;
     ClassDef_type = make_type("ClassDef", stmt_type, ClassDef_fields, 5);
     if (!ClassDef_type) return 0;
     Return_type = make_type("Return", stmt_type, Return_fields, 1);
@@ -818,12 +845,16 @@
     if (!AugAssign_type) return 0;
     For_type = make_type("For", stmt_type, For_fields, 4);
     if (!For_type) return 0;
+    AsyncFor_type = make_type("AsyncFor", stmt_type, AsyncFor_fields, 4);
+    if (!AsyncFor_type) return 0;
     While_type = make_type("While", stmt_type, While_fields, 3);
     if (!While_type) return 0;
     If_type = make_type("If", stmt_type, If_fields, 3);
     if (!If_type) return 0;
     With_type = make_type("With", stmt_type, With_fields, 2);
     if (!With_type) return 0;
+    AsyncWith_type = make_type("AsyncWith", stmt_type, AsyncWith_fields, 2);
+    if (!AsyncWith_type) return 0;
     Raise_type = make_type("Raise", stmt_type, Raise_fields, 2);
     if (!Raise_type) return 0;
     Try_type = make_type("Try", stmt_type, Try_fields, 4);
@@ -872,6 +903,8 @@
     GeneratorExp_type = make_type("GeneratorExp", expr_type,
                                   GeneratorExp_fields, 2);
     if (!GeneratorExp_type) return 0;
+    Await_type = make_type("Await", expr_type, Await_fields, 1);
+    if (!Await_type) return 0;
     Yield_type = make_type("Yield", expr_type, Yield_fields, 1);
     if (!Yield_type) return 0;
     YieldFrom_type = make_type("YieldFrom", expr_type, YieldFrom_fields, 1);
@@ -1201,6 +1234,36 @@
 }
 
 stmt_ty
+AsyncFunctionDef(identifier name, arguments_ty args, asdl_seq * body, asdl_seq
+                 * decorator_list, expr_ty returns, int lineno, int col_offset,
+                 PyArena *arena)
+{
+    stmt_ty p;
+    if (!name) {
+        PyErr_SetString(PyExc_ValueError,
+                        "field name is required for AsyncFunctionDef");
+        return NULL;
+    }
+    if (!args) {
+        PyErr_SetString(PyExc_ValueError,
+                        "field args is required for AsyncFunctionDef");
+        return NULL;
+    }
+    p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
+    if (!p)
+        return NULL;
+    p->kind = AsyncFunctionDef_kind;
+    p->v.AsyncFunctionDef.name = name;
+    p->v.AsyncFunctionDef.args = args;
+    p->v.AsyncFunctionDef.body = body;
+    p->v.AsyncFunctionDef.decorator_list = decorator_list;
+    p->v.AsyncFunctionDef.returns = returns;
+    p->lineno = lineno;
+    p->col_offset = col_offset;
+    return p;
+}
+
+stmt_ty
 ClassDef(identifier name, asdl_seq * bases, asdl_seq * keywords, asdl_seq *
          body, asdl_seq * decorator_list, int lineno, int col_offset, PyArena
          *arena)
@@ -1335,6 +1398,34 @@
 }
 
 stmt_ty
+AsyncFor(expr_ty target, expr_ty iter, asdl_seq * body, asdl_seq * orelse, int
+         lineno, int col_offset, PyArena *arena)
+{
+    stmt_ty p;
+    if (!target) {
+        PyErr_SetString(PyExc_ValueError,
+                        "field target is required for AsyncFor");
+        return NULL;
+    }
+    if (!iter) {
+        PyErr_SetString(PyExc_ValueError,
+                        "field iter is required for AsyncFor");
+        return NULL;
+    }
+    p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
+    if (!p)
+        return NULL;
+    p->kind = AsyncFor_kind;
+    p->v.AsyncFor.target = target;
+    p->v.AsyncFor.iter = iter;
+    p->v.AsyncFor.body = body;
+    p->v.AsyncFor.orelse = orelse;
+    p->lineno = lineno;
+    p->col_offset = col_offset;
+    return p;
+}
+
+stmt_ty
 While(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno, int
       col_offset, PyArena *arena)
 {
@@ -1395,6 +1486,22 @@
 }
 
 stmt_ty
+AsyncWith(asdl_seq * items, asdl_seq * body, int lineno, int col_offset,
+          PyArena *arena)
+{
+    stmt_ty p;
+    p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
+    if (!p)
+        return NULL;
+    p->kind = AsyncWith_kind;
+    p->v.AsyncWith.items = items;
+    p->v.AsyncWith.body = body;
+    p->lineno = lineno;
+    p->col_offset = col_offset;
+    return p;
+}
+
+stmt_ty
 Raise(expr_ty exc, expr_ty cause, int lineno, int col_offset, PyArena *arena)
 {
     stmt_ty p;
@@ -1822,6 +1929,25 @@
 }
 
 expr_ty
+Await(expr_ty value, int lineno, int col_offset, PyArena *arena)
+{
+    expr_ty p;
+    if (!value) {
+        PyErr_SetString(PyExc_ValueError,
+                        "field value is required for Await");
+        return NULL;
+    }
+    p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
+    if (!p)
+        return NULL;
+    p->kind = Await_kind;
+    p->v.Await.value = value;
+    p->lineno = lineno;
+    p->col_offset = col_offset;
+    return p;
+}
+
+expr_ty
 Yield(expr_ty value, int lineno, int col_offset, PyArena *arena)
 {
     expr_ty p;
@@ -2409,6 +2535,36 @@
             goto failed;
         Py_DECREF(value);
         break;
+    case AsyncFunctionDef_kind:
+        result = PyType_GenericNew(AsyncFunctionDef_type, NULL, NULL);
+        if (!result) goto failed;
+        value = ast2obj_identifier(o->v.AsyncFunctionDef.name);
+        if (!value) goto failed;
+        if (_PyObject_SetAttrId(result, &PyId_name, value) == -1)
+            goto failed;
+        Py_DECREF(value);
+        value = ast2obj_arguments(o->v.AsyncFunctionDef.args);
+        if (!value) goto failed;
+        if (_PyObject_SetAttrId(result, &PyId_args, value) == -1)
+            goto failed;
+        Py_DECREF(value);
+        value = ast2obj_list(o->v.AsyncFunctionDef.body, ast2obj_stmt);
+        if (!value) goto failed;
+        if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+            goto failed;
+        Py_DECREF(value);
+        value = ast2obj_list(o->v.AsyncFunctionDef.decorator_list,
+                             ast2obj_expr);
+        if (!value) goto failed;
+        if (_PyObject_SetAttrId(result, &PyId_decorator_list, value) == -1)
+            goto failed;
+        Py_DECREF(value);
+        value = ast2obj_expr(o->v.AsyncFunctionDef.returns);
+        if (!value) goto failed;
+        if (_PyObject_SetAttrId(result, &PyId_returns, value) == -1)
+            goto failed;
+        Py_DECREF(value);
+        break;
     case ClassDef_kind:
         result = PyType_GenericNew(ClassDef_type, NULL, NULL);
         if (!result) goto failed;
@@ -2513,6 +2669,30 @@
             goto failed;
         Py_DECREF(value);
         break;
+    case AsyncFor_kind:
+        result = PyType_GenericNew(AsyncFor_type, NULL, NULL);
+        if (!result) goto failed;
+        value = ast2obj_expr(o->v.AsyncFor.target);
+        if (!value) goto failed;
+        if (_PyObject_SetAttrId(result, &PyId_target, value) == -1)
+            goto failed;
+        Py_DECREF(value);
+        value = ast2obj_expr(o->v.AsyncFor.iter);
+        if (!value) goto failed;
+        if (_PyObject_SetAttrId(result, &PyId_iter, value) == -1)
+            goto failed;
+        Py_DECREF(value);
+        value = ast2obj_list(o->v.AsyncFor.body, ast2obj_stmt);
+        if (!value) goto failed;
+        if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+            goto failed;
+        Py_DECREF(value);
+        value = ast2obj_list(o->v.AsyncFor.orelse, ast2obj_stmt);
+        if (!value) goto failed;
+        if (_PyObject_SetAttrId(result, &PyId_orelse, value) == -1)
+            goto failed;
+        Py_DECREF(value);
+        break;
     case While_kind:
         result = PyType_GenericNew(While_type, NULL, NULL);
         if (!result) goto failed;
@@ -2565,6 +2745,20 @@
             goto failed;
         Py_DECREF(value);
         break;
+    case AsyncWith_kind:
+        result = PyType_GenericNew(AsyncWith_type, NULL, NULL);
+        if (!result) goto failed;
+        value = ast2obj_list(o->v.AsyncWith.items, ast2obj_withitem);
+        if (!value) goto failed;
+        if (_PyObject_SetAttrId(result, &PyId_items, value) == -1)
+            goto failed;
+        Py_DECREF(value);
+        value = ast2obj_list(o->v.AsyncWith.body, ast2obj_stmt);
+        if (!value) goto failed;
+        if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+            goto failed;
+        Py_DECREF(value);
+        break;
     case Raise_kind:
         result = PyType_GenericNew(Raise_type, NULL, NULL);
         if (!result) goto failed;
@@ -2878,6 +3072,15 @@
             goto failed;
         Py_DECREF(value);
         break;
+    case Await_kind:
+        result = PyType_GenericNew(Await_type, NULL, NULL);
+        if (!result) goto failed;
+        value = ast2obj_expr(o->v.Await.value);
+        if (!value) goto failed;
+        if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
+            goto failed;
+        Py_DECREF(value);
+        break;
     case Yield_kind:
         result = PyType_GenericNew(Yield_type, NULL, NULL);
         if (!result) goto failed;
@@ -3832,6 +4035,102 @@
         if (*out == NULL) goto failed;
         return 0;
     }
+    isinstance = PyObject_IsInstance(obj, (PyObject*)AsyncFunctionDef_type);
+    if (isinstance == -1) {
+        return 1;
+    }
+    if (isinstance) {
+        identifier name;
+        arguments_ty args;
+        asdl_seq* body;
+        asdl_seq* decorator_list;
+        expr_ty returns;
+
+        if (_PyObject_HasAttrId(obj, &PyId_name)) {
+            int res;
+            tmp = _PyObject_GetAttrId(obj, &PyId_name);
+            if (tmp == NULL) goto failed;
+            res = obj2ast_identifier(tmp, &name, arena);
+            if (res != 0) goto failed;
+            Py_CLEAR(tmp);
+        } else {
+            PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from AsyncFunctionDef");
+            return 1;
+        }
+        if (_PyObject_HasAttrId(obj, &PyId_args)) {
+            int res;
+            tmp = _PyObject_GetAttrId(obj, &PyId_args);
+            if (tmp == NULL) goto failed;
+            res = obj2ast_arguments(tmp, &args, arena);
+            if (res != 0) goto failed;
+            Py_CLEAR(tmp);
+        } else {
+            PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from AsyncFunctionDef");
+            return 1;
+        }
+        if (_PyObject_HasAttrId(obj, &PyId_body)) {
+            int res;
+            Py_ssize_t len;
+            Py_ssize_t i;
+            tmp = _PyObject_GetAttrId(obj, &PyId_body);
+            if (tmp == NULL) goto failed;
+            if (!PyList_Check(tmp)) {
+                PyErr_Format(PyExc_TypeError, "AsyncFunctionDef field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                goto failed;
+            }
+            len = PyList_GET_SIZE(tmp);
+            body = _Py_asdl_seq_new(len, arena);
+            if (body == NULL) goto failed;
+            for (i = 0; i < len; i++) {
+                stmt_ty value;
+                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
+                if (res != 0) goto failed;
+                asdl_seq_SET(body, i, value);
+            }
+            Py_CLEAR(tmp);
+        } else {
+            PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from AsyncFunctionDef");
+            return 1;
+        }
+        if (_PyObject_HasAttrId(obj, &PyId_decorator_list)) {
+            int res;
+            Py_ssize_t len;
+            Py_ssize_t i;
+            tmp = _PyObject_GetAttrId(obj, &PyId_decorator_list);
+            if (tmp == NULL) goto failed;
+            if (!PyList_Check(tmp)) {
+                PyErr_Format(PyExc_TypeError, "AsyncFunctionDef field \"decorator_list\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                goto failed;
+            }
+            len = PyList_GET_SIZE(tmp);
+            decorator_list = _Py_asdl_seq_new(len, arena);
+            if (decorator_list == NULL) goto failed;
+            for (i = 0; i < len; i++) {
+                expr_ty value;
+                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
+                if (res != 0) goto failed;
+                asdl_seq_SET(decorator_list, i, value);
+            }
+            Py_CLEAR(tmp);
+        } else {
+            PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from AsyncFunctionDef");
+            return 1;
+        }
+        if (exists_not_none(obj, &PyId_returns)) {
+            int res;
+            tmp = _PyObject_GetAttrId(obj, &PyId_returns);
+            if (tmp == NULL) goto failed;
+            res = obj2ast_expr(tmp, &returns, arena);
+            if (res != 0) goto failed;
+            Py_CLEAR(tmp);
+        } else {
+            returns = NULL;
+        }
+        *out = AsyncFunctionDef(name, args, body, decorator_list, returns,
+                                lineno, col_offset, arena);
+        if (*out == NULL) goto failed;
+        return 0;
+    }
     isinstance = PyObject_IsInstance(obj, (PyObject*)ClassDef_type);
     if (isinstance == -1) {
         return 1;
@@ -4188,6 +4487,90 @@
         if (*out == NULL) goto failed;
         return 0;
     }
+    isinstance = PyObject_IsInstance(obj, (PyObject*)AsyncFor_type);
+    if (isinstance == -1) {
+        return 1;
+    }
+    if (isinstance) {
+        expr_ty target;
+        expr_ty iter;
+        asdl_seq* body;
+        asdl_seq* orelse;
+
+        if (_PyObject_HasAttrId(obj, &PyId_target)) {
+            int res;
+            tmp = _PyObject_GetAttrId(obj, &PyId_target);
+            if (tmp == NULL) goto failed;
+            res = obj2ast_expr(tmp, &target, arena);
+            if (res != 0) goto failed;
+            Py_CLEAR(tmp);
+        } else {
+            PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from AsyncFor");
+            return 1;
+        }
+        if (_PyObject_HasAttrId(obj, &PyId_iter)) {
+            int res;
+            tmp = _PyObject_GetAttrId(obj, &PyId_iter);
+            if (tmp == NULL) goto failed;
+            res = obj2ast_expr(tmp, &iter, arena);
+            if (res != 0) goto failed;
+            Py_CLEAR(tmp);
+        } else {
+            PyErr_SetString(PyExc_TypeError, "required field \"iter\" missing from AsyncFor");
+            return 1;
+        }
+        if (_PyObject_HasAttrId(obj, &PyId_body)) {
+            int res;
+            Py_ssize_t len;
+            Py_ssize_t i;
+            tmp = _PyObject_GetAttrId(obj, &PyId_body);
+            if (tmp == NULL) goto failed;
+            if (!PyList_Check(tmp)) {
+                PyErr_Format(PyExc_TypeError, "AsyncFor field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                goto failed;
+            }
+            len = PyList_GET_SIZE(tmp);
+            body = _Py_asdl_seq_new(len, arena);
+            if (body == NULL) goto failed;
+            for (i = 0; i < len; i++) {
+                stmt_ty value;
+                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
+                if (res != 0) goto failed;
+                asdl_seq_SET(body, i, value);
+            }
+            Py_CLEAR(tmp);
+        } else {
+            PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from AsyncFor");
+            return 1;
+        }
+        if (_PyObject_HasAttrId(obj, &PyId_orelse)) {
+            int res;
+            Py_ssize_t len;
+            Py_ssize_t i;
+            tmp = _PyObject_GetAttrId(obj, &PyId_orelse);
+            if (tmp == NULL) goto failed;
+            if (!PyList_Check(tmp)) {
+                PyErr_Format(PyExc_TypeError, "AsyncFor field \"orelse\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                goto failed;
+            }
+            len = PyList_GET_SIZE(tmp);
+            orelse = _Py_asdl_seq_new(len, arena);
+            if (orelse == NULL) goto failed;
+            for (i = 0; i < len; i++) {
+                stmt_ty value;
+                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
+                if (res != 0) goto failed;
+                asdl_seq_SET(orelse, i, value);
+            }
+            Py_CLEAR(tmp);
+        } else {
+            PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from AsyncFor");
+            return 1;
+        }
+        *out = AsyncFor(target, iter, body, orelse, lineno, col_offset, arena);
+        if (*out == NULL) goto failed;
+        return 0;
+    }
     isinstance = PyObject_IsInstance(obj, (PyObject*)While_type);
     if (isinstance == -1) {
         return 1;
@@ -4392,6 +4775,66 @@
         if (*out == NULL) goto failed;
         return 0;
     }
+    isinstance = PyObject_IsInstance(obj, (PyObject*)AsyncWith_type);
+    if (isinstance == -1) {
+        return 1;
+    }
+    if (isinstance) {
+        asdl_seq* items;
+        asdl_seq* body;
+
+        if (_PyObject_HasAttrId(obj, &PyId_items)) {
+            int res;
+            Py_ssize_t len;
+            Py_ssize_t i;
+            tmp = _PyObject_GetAttrId(obj, &PyId_items);
+            if (tmp == NULL) goto failed;
+            if (!PyList_Check(tmp)) {
+                PyErr_Format(PyExc_TypeError, "AsyncWith field \"items\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                goto failed;
+            }
+            len = PyList_GET_SIZE(tmp);
+            items = _Py_asdl_seq_new(len, arena);
+            if (items == NULL) goto failed;
+            for (i = 0; i < len; i++) {
+                withitem_ty value;
+                res = obj2ast_withitem(PyList_GET_ITEM(tmp, i), &value, arena);
+                if (res != 0) goto failed;
+                asdl_seq_SET(items, i, value);
+            }
+            Py_CLEAR(tmp);
+        } else {
+            PyErr_SetString(PyExc_TypeError, "required field \"items\" missing from AsyncWith");
+            return 1;
+        }
+        if (_PyObject_HasAttrId(obj, &PyId_body)) {
+            int res;
+            Py_ssize_t len;
+            Py_ssize_t i;
+            tmp = _PyObject_GetAttrId(obj, &PyId_body);
+            if (tmp == NULL) goto failed;
+            if (!PyList_Check(tmp)) {
+                PyErr_Format(PyExc_TypeError, "AsyncWith field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                goto failed;
+            }
+            len = PyList_GET_SIZE(tmp);
+            body = _Py_asdl_seq_new(len, arena);
+            if (body == NULL) goto failed;
+            for (i = 0; i < len; i++) {
+                stmt_ty value;
+                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
+                if (res != 0) goto failed;
+                asdl_seq_SET(body, i, value);
+            }
+            Py_CLEAR(tmp);
+        } else {
+            PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from AsyncWith");
+            return 1;
+        }
+        *out = AsyncWith(items, body, lineno, col_offset, arena);
+        if (*out == NULL) goto failed;
+        return 0;
+    }
     isinstance = PyObject_IsInstance(obj, (PyObject*)Raise_type);
     if (isinstance == -1) {
         return 1;
@@ -5326,6 +5769,28 @@
         if (*out == NULL) goto failed;
         return 0;
     }
+    isinstance = PyObject_IsInstance(obj, (PyObject*)Await_type);
+    if (isinstance == -1) {
+        return 1;
+    }
+    if (isinstance) {
+        expr_ty value;
+
+        if (_PyObject_HasAttrId(obj, &PyId_value)) {
+            int res;
+            tmp = _PyObject_GetAttrId(obj, &PyId_value);
+            if (tmp == NULL) goto failed;
+            res = obj2ast_expr(tmp, &value, arena);
+            if (res != 0) goto failed;
+            Py_CLEAR(tmp);
+        } else {
+            PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Await");
+            return 1;
+        }
+        *out = Await(value, lineno, col_offset, arena);
+        if (*out == NULL) goto failed;
+        return 0;
+    }
     isinstance = PyObject_IsInstance(obj, (PyObject*)Yield_type);
     if (isinstance == -1) {
         return 1;
@@ -6782,6 +7247,8 @@
     if (PyDict_SetItemString(d, "stmt", (PyObject*)stmt_type) < 0) return NULL;
     if (PyDict_SetItemString(d, "FunctionDef", (PyObject*)FunctionDef_type) <
         0) return NULL;
+    if (PyDict_SetItemString(d, "AsyncFunctionDef",
+        (PyObject*)AsyncFunctionDef_type) < 0) return NULL;
     if (PyDict_SetItemString(d, "ClassDef", (PyObject*)ClassDef_type) < 0)
         return NULL;
     if (PyDict_SetItemString(d, "Return", (PyObject*)Return_type) < 0) return
@@ -6793,10 +7260,14 @@
     if (PyDict_SetItemString(d, "AugAssign", (PyObject*)AugAssign_type) < 0)
         return NULL;
     if (PyDict_SetItemString(d, "For", (PyObject*)For_type) < 0) return NULL;
+    if (PyDict_SetItemString(d, "AsyncFor", (PyObject*)AsyncFor_type) < 0)
+        return NULL;
     if (PyDict_SetItemString(d, "While", (PyObject*)While_type) < 0) return
         NULL;
     if (PyDict_SetItemString(d, "If", (PyObject*)If_type) < 0) return NULL;
     if (PyDict_SetItemString(d, "With", (PyObject*)With_type) < 0) return NULL;
+    if (PyDict_SetItemString(d, "AsyncWith", (PyObject*)AsyncWith_type) < 0)
+        return NULL;
     if (PyDict_SetItemString(d, "Raise", (PyObject*)Raise_type) < 0) return
         NULL;
     if (PyDict_SetItemString(d, "Try", (PyObject*)Try_type) < 0) return NULL;
@@ -6837,6 +7308,8 @@
         return NULL;
     if (PyDict_SetItemString(d, "GeneratorExp", (PyObject*)GeneratorExp_type) <
         0) return NULL;
+    if (PyDict_SetItemString(d, "Await", (PyObject*)Await_type) < 0) return
+        NULL;
     if (PyDict_SetItemString(d, "Yield", (PyObject*)Yield_type) < 0) return
         NULL;
     if (PyDict_SetItemString(d, "YieldFrom", (PyObject*)YieldFrom_type) < 0)
diff --git a/Python/ast.c b/Python/ast.c
--- a/Python/ast.c
+++ b/Python/ast.c
@@ -219,6 +219,8 @@
         return !exp->v.Yield.value || validate_expr(exp->v.Yield.value, Load);
     case YieldFrom_kind:
         return validate_expr(exp->v.YieldFrom.value, Load);
+    case Await_kind:
+        return validate_expr(exp->v.Await.value, Load);
     case Compare_kind:
         if (!asdl_seq_LEN(exp->v.Compare.comparators)) {
             PyErr_SetString(PyExc_ValueError, "Compare with no comparators");
@@ -336,6 +338,11 @@
             validate_expr(stmt->v.For.iter, Load) &&
             validate_body(stmt->v.For.body, "For") &&
             validate_stmts(stmt->v.For.orelse);
+    case AsyncFor_kind:
+        return validate_expr(stmt->v.AsyncFor.target, Store) &&
+            validate_expr(stmt->v.AsyncFor.iter, Load) &&
+            validate_body(stmt->v.AsyncFor.body, "AsyncFor") &&
+            validate_stmts(stmt->v.AsyncFor.orelse);
     case While_kind:
         return validate_expr(stmt->v.While.test, Load) &&
             validate_body(stmt->v.While.body, "While") &&
@@ -354,6 +361,16 @@
                 return 0;
         }
         return validate_body(stmt->v.With.body, "With");
+    case AsyncWith_kind:
+        if (!validate_nonempty_seq(stmt->v.AsyncWith.items, "items", "AsyncWith"))
+            return 0;
+        for (i = 0; i < asdl_seq_LEN(stmt->v.AsyncWith.items); i++) {
+            withitem_ty item = asdl_seq_GET(stmt->v.AsyncWith.items, i);
+            if (!validate_expr(item->context_expr, Load) ||
+                (item->optional_vars && !validate_expr(item->optional_vars, Store)))
+                return 0;
+        }
+        return validate_body(stmt->v.AsyncWith.body, "AsyncWith");
     case Raise_kind:
         if (stmt->v.Raise.exc) {
             return validate_expr(stmt->v.Raise.exc, Load) &&
@@ -405,6 +422,12 @@
         return validate_nonempty_seq(stmt->v.Nonlocal.names, "names", "Nonlocal");
     case Expr_kind:
         return validate_expr(stmt->v.Expr.value, Load);
+    case AsyncFunctionDef_kind:
+        return validate_body(stmt->v.AsyncFunctionDef.body, "AsyncFunctionDef") &&
+            validate_arguments(stmt->v.AsyncFunctionDef.args) &&
+            validate_exprs(stmt->v.AsyncFunctionDef.decorator_list, Load, 0) &&
+            (!stmt->v.AsyncFunctionDef.returns ||
+             validate_expr(stmt->v.AsyncFunctionDef.returns, Load));
     case Pass_kind:
     case Break_kind:
     case Continue_kind:
@@ -503,6 +526,9 @@
 static expr_ty ast_for_testlist(struct compiling *, const node *);
 static stmt_ty ast_for_classdef(struct compiling *, const node *, asdl_seq *);
 
+static stmt_ty ast_for_with_stmt(struct compiling *, const node *, int);
+static stmt_ty ast_for_for_stmt(struct compiling *, const node *, int);
+
 /* Note different signature for ast_for_call */
 static expr_ty ast_for_call(struct compiling *, const node *, expr_ty);
 
@@ -941,6 +967,9 @@
         case YieldFrom_kind:
             expr_name = "yield expression";
             break;
+        case Await_kind:
+            expr_name = "await expression";
+            break;
         case ListComp_kind:
             expr_name = "list comprehension";
             break;
@@ -1480,7 +1509,8 @@
 }
 
 static stmt_ty
-ast_for_funcdef(struct compiling *c, const node *n, asdl_seq *decorator_seq)
+ast_for_funcdef_impl(struct compiling *c, const node *n,
+                     asdl_seq *decorator_seq, int is_async)
 {
     /* funcdef: 'def' NAME parameters ['->' test] ':' suite */
     identifier name;
@@ -1509,14 +1539,68 @@
     if (!body)
         return NULL;
 
-    return FunctionDef(name, args, body, decorator_seq, returns, LINENO(n),
-                       n->n_col_offset, c->c_arena);
+    if (is_async)
+        return AsyncFunctionDef(name, args, body, decorator_seq, returns,
+                                LINENO(n),
+                                n->n_col_offset, c->c_arena);
+    else
+        return FunctionDef(name, args, body, decorator_seq, returns,
+                           LINENO(n),
+                           n->n_col_offset, c->c_arena);
+}
+
+static stmt_ty
+ast_for_async_funcdef(struct compiling *c, const node *n, asdl_seq *decorator_seq)
+{
+    /* async_funcdef: ASYNC funcdef */
+    REQ(n, async_funcdef);
+    REQ(CHILD(n, 0), ASYNC);
+    REQ(CHILD(n, 1), funcdef);
+
+    return ast_for_funcdef_impl(c, CHILD(n, 1), decorator_seq,
+                                1 /* is_async */);
+}
+
+static stmt_ty
+ast_for_funcdef(struct compiling *c, const node *n, asdl_seq *decorator_seq)
+{
+    /* funcdef: 'def' NAME parameters ['->' test] ':' suite */
+    return ast_for_funcdef_impl(c, n, decorator_seq,
+                                0 /* is_async */);
+}
+
+
+static stmt_ty
+ast_for_async_stmt(struct compiling *c, const node *n)
+{
+    /* async_stmt: ASYNC (funcdef | with_stmt | for_stmt) */
+    REQ(n, async_stmt);
+    REQ(CHILD(n, 0), ASYNC);
+
+    switch (TYPE(CHILD(n, 1))) {
+        case funcdef:
+            return ast_for_funcdef_impl(c, CHILD(n, 1), NULL,
+                                        1 /* is_async */);
+        case with_stmt:
+            return ast_for_with_stmt(c, CHILD(n, 1),
+                                     1 /* is_async */);
+
+        case for_stmt:
+            return ast_for_for_stmt(c, CHILD(n, 1),
+                                    1 /* is_async */);
+
+        default:
+            PyErr_Format(PyExc_SystemError,
+                         "invalid async stament: %s",
+                         STR(CHILD(n, 1)));
+            return NULL;
+    }
 }
 
 static stmt_ty
 ast_for_decorated(struct compiling *c, const node *n)
 {
-    /* decorated: decorators (classdef | funcdef) */
+    /* decorated: decorators (classdef | funcdef | async_funcdef) */
     stmt_ty thing = NULL;
     asdl_seq *decorator_seq = NULL;
 
@@ -1527,12 +1611,15 @@
       return NULL;
 
     assert(TYPE(CHILD(n, 1)) == funcdef ||
+           TYPE(CHILD(n, 1)) == async_funcdef ||
            TYPE(CHILD(n, 1)) == classdef);
 
     if (TYPE(CHILD(n, 1)) == funcdef) {
       thing = ast_for_funcdef(c, CHILD(n, 1), decorator_seq);
     } else if (TYPE(CHILD(n, 1)) == classdef) {
       thing = ast_for_classdef(c, CHILD(n, 1), decorator_seq);
+    } else if (TYPE(CHILD(n, 1)) == async_funcdef) {
+      thing = ast_for_async_funcdef(c, CHILD(n, 1), decorator_seq);
     }
     /* we count the decorators in when talking about the class' or
      * function's line number */
@@ -2271,19 +2358,29 @@
 }
 
 static expr_ty
-ast_for_power(struct compiling *c, const node *n)
+ast_for_atom_expr(struct compiling *c, const node *n)
 {
-    /* power: atom trailer* ('**' factor)*
-     */
-    int i;
+    int i, nch, start = 0;
     expr_ty e, tmp;
-    REQ(n, power);
-    e = ast_for_atom(c, CHILD(n, 0));
+
+    REQ(n, atom_expr);
+    nch = NCH(n);
+
+    if (TYPE(CHILD(n, 0)) == AWAIT) {
+        start = 1;
+        assert(nch > 1);
+    }
+
+    e = ast_for_atom(c, CHILD(n, start));
     if (!e)
         return NULL;
-    if (NCH(n) == 1)
+    if (nch == 1)
         return e;
-    for (i = 1; i < NCH(n); i++) {
+    if (start && nch == 2) {
+        return Await(e, LINENO(n), n->n_col_offset, c->c_arena);
+    }
+
+    for (i = start + 1; i < nch; i++) {
         node *ch = CHILD(n, i);
         if (TYPE(ch) != trailer)
             break;
@@ -2294,6 +2391,28 @@
         tmp->col_offset = e->col_offset;
         e = tmp;
     }
+
+    if (start) {
+        /* there was an AWAIT */
+        return Await(e, LINENO(n), n->n_col_offset, c->c_arena);
+    }
+    else {
+        return e;
+    }
+}
+
+static expr_ty
+ast_for_power(struct compiling *c, const node *n)
+{
+    /* power: atom trailer* ('**' factor)*
+     */
+    expr_ty e;
+    REQ(n, power);
+    e = ast_for_atom_expr(c, CHILD(n, 0));
+    if (!e)
+        return NULL;
+    if (NCH(n) == 1)
+        return e;
     if (TYPE(CHILD(n, NCH(n) - 1)) == factor) {
         expr_ty f = ast_for_expr(c, CHILD(n, NCH(n) - 1));
         if (!f)
@@ -2338,7 +2457,9 @@
        arith_expr: term (('+'|'-') term)*
        term: factor (('*'|'@'|'/'|'%'|'//') factor)*
        factor: ('+'|'-'|'~') factor | power
-       power: atom trailer* ('**' factor)*
+       power: atom_expr ['**' factor]
+       atom_expr: [AWAIT] atom trailer*
+       yield_expr: 'yield' [yield_arg]
     */
 
     asdl_seq *seq;
@@ -3403,7 +3524,7 @@
 }
 
 static stmt_ty
-ast_for_for_stmt(struct compiling *c, const node *n)
+ast_for_for_stmt(struct compiling *c, const node *n, int is_async)
 {
     asdl_seq *_target, *seq = NULL, *suite_seq;
     expr_ty expression;
@@ -3437,8 +3558,14 @@
     if (!suite_seq)
         return NULL;
 
-    return For(target, expression, suite_seq, seq, LINENO(n), n->n_col_offset,
-               c->c_arena);
+    if (is_async)
+        return AsyncFor(target, expression, suite_seq, seq,
+                        LINENO(n), n->n_col_offset,
+                        c->c_arena);
+    else
+        return For(target, expression, suite_seq, seq,
+                   LINENO(n), n->n_col_offset,
+                   c->c_arena);
 }
 
 static excepthandler_ty
@@ -3585,7 +3712,7 @@
 
 /* with_stmt: 'with' with_item (',' with_item)* ':' suite */
 static stmt_ty
-ast_for_with_stmt(struct compiling *c, const node *n)
+ast_for_with_stmt(struct compiling *c, const node *n, int is_async)
 {
     int i, n_items;
     asdl_seq *items, *body;
@@ -3607,7 +3734,10 @@
     if (!body)
         return NULL;
 
-    return With(items, body, LINENO(n), n->n_col_offset, c->c_arena);
+    if (is_async)
+        return AsyncWith(items, body, LINENO(n), n->n_col_offset, c->c_arena);
+    else
+        return With(items, body, LINENO(n), n->n_col_offset, c->c_arena);
 }
 
 static stmt_ty
@@ -3714,7 +3844,7 @@
     }
     else {
         /* compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt
-                        | funcdef | classdef | decorated
+                        | funcdef | classdef | decorated | async_stmt
         */
         node *ch = CHILD(n, 0);
         REQ(n, compound_stmt);
@@ -3724,17 +3854,19 @@
             case while_stmt:
                 return ast_for_while_stmt(c, ch);
             case for_stmt:
-                return ast_for_for_stmt(c, ch);
+                return ast_for_for_stmt(c, ch, 0);
             case try_stmt:
                 return ast_for_try_stmt(c, ch);
             case with_stmt:
-                return ast_for_with_stmt(c, ch);
+                return ast_for_with_stmt(c, ch, 0);
             case funcdef:
                 return ast_for_funcdef(c, ch, NULL);
             case classdef:
                 return ast_for_classdef(c, ch, NULL);
             case decorated:
                 return ast_for_decorated(c, ch);
+            case async_stmt:
+                return ast_for_async_stmt(c, ch);
             default:
                 PyErr_Format(PyExc_SystemError,
                              "unhandled small_stmt: TYPE=%d NCH=%d\n",
diff --git a/Python/ceval.c b/Python/ceval.c
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -1926,11 +1926,133 @@
             goto fast_block_end;
         }
 
+        TARGET(GET_AITER) {
+            getaiterfunc getter = NULL;
+            PyObject *iter = NULL;
+            PyObject *awaitable = NULL;
+            PyObject *obj = TOP();
+            PyTypeObject *type = Py_TYPE(obj);
+
+            if (type->tp_as_async != NULL)
+                getter = type->tp_as_async->am_aiter;
+
+            if (getter != NULL) {
+                iter = (*getter)(obj);
+                Py_DECREF(obj);
+                if (iter == NULL) {
+                    SET_TOP(NULL);
+                    goto error;
+                }
+            }
+            else {
+                SET_TOP(NULL);
+                PyErr_Format(
+                    PyExc_TypeError,
+                    "'async for' requires an object with "
+                    "__aiter__ method, got %.100s",
+                    type->tp_name);
+                Py_DECREF(obj);
+                goto error;
+            }
+
+            awaitable = _PyGen_GetAwaitableIter(iter);
+            if (awaitable == NULL) {
+                SET_TOP(NULL);
+                PyErr_Format(
+                    PyExc_TypeError,
+                    "'async for' received an invalid object "
+                    "from __aiter__: %.100s",
+                    Py_TYPE(iter)->tp_name);
+
+                Py_DECREF(iter);
+                goto error;
+            } else
+                Py_DECREF(iter);
+
+            SET_TOP(awaitable);
+            DISPATCH();
+        }
+
+        TARGET(GET_ANEXT) {
+            aiternextfunc getter = NULL;
+            PyObject *next_iter = NULL;
+            PyObject *awaitable = NULL;
+            PyObject *aiter = TOP();
+            PyTypeObject *type = Py_TYPE(aiter);
+
+            if (type->tp_as_async != NULL)
+                getter = type->tp_as_async->am_anext;
+
+            if (getter != NULL) {
+                next_iter = (*getter)(aiter);
+                if (next_iter == NULL) {
+                    goto error;
+                }
+            }
+            else {
+                PyErr_Format(
+                    PyExc_TypeError,
+                    "'async for' requires an iterator with "
+                    "__anext__ method, got %.100s",
+                    type->tp_name);
+                goto error;
+            }
+
+            awaitable = _PyGen_GetAwaitableIter(next_iter);
+            if (awaitable == NULL) {
+                PyErr_Format(
+                    PyExc_TypeError,
+                    "'async for' received an invalid object "
+                    "from __anext__: %.100s",
+                    Py_TYPE(next_iter)->tp_name);
+
+                Py_DECREF(next_iter);
+                goto error;
+            } else
+                Py_DECREF(next_iter);
+
+            PUSH(awaitable);
+            DISPATCH();
+        }
+
+        TARGET(GET_AWAITABLE) {
+            PyObject *iterable = TOP();
+            PyObject *iter = _PyGen_GetAwaitableIter(iterable);
+
+            Py_DECREF(iterable);
+
+            SET_TOP(iter); /* Even if it's NULL */
+
+            if (iter == NULL) {
+                goto error;
+            }
+
+            DISPATCH();
+        }
+
         TARGET(YIELD_FROM) {
             PyObject *v = POP();
             PyObject *reciever = TOP();
             int err;
             if (PyGen_CheckExact(reciever)) {
+                if (
+                    (((PyCodeObject*) \
+                        ((PyGenObject*)reciever)->gi_code)->co_flags &
+                                                        CO_COROUTINE)
+                    && !(co->co_flags & (CO_COROUTINE | CO_ITERABLE_COROUTINE)))
+                {
+                    /* If we're yielding-from a coroutine object from a regular
+                       generator object - raise an error. */
+
+                    Py_CLEAR(v);
+                    Py_CLEAR(reciever);
+                    SET_TOP(NULL);
+
+                    PyErr_SetString(PyExc_TypeError,
+                                    "cannot 'yield from' a coroutine object "
+                                    "from a generator");
+                    goto error;
+                }
                 retval = _PyGen_Send((PyGenObject *)reciever, v);
             } else {
                 _Py_IDENTIFIER(send);
@@ -2822,11 +2944,26 @@
         TARGET(GET_ITER) {
             /* before: [obj]; after [getiter(obj)] */
             PyObject *iterable = TOP();
-            PyObject *iter = PyObject_GetIter(iterable);
-            Py_DECREF(iterable);
-            SET_TOP(iter);
-            if (iter == NULL)
-                goto error;
+            PyObject *iter;
+            /* If we have a generator object on top -- keep it there,
+               it's already an iterator.
+
+               This is needed to allow use of 'async def' coroutines
+               in 'yield from' expression from generator-based coroutines
+               (decorated with types.coroutine()).
+
+               'yield from' is compiled to GET_ITER..YIELD_FROM combination,
+               but since coroutines raise TypeError in their 'tp_iter' we
+               need a way for them to "pass through" the GET_ITER.
+            */
+            if (!PyGen_CheckExact(iterable)) {
+                /* `iterable` is not a generator. */
+                iter = PyObject_GetIter(iterable);
+                Py_DECREF(iterable);
+                SET_TOP(iter);
+                if (iter == NULL)
+                    goto error;
+            }
             PREDICT(FOR_ITER);
             DISPATCH();
         }
@@ -2883,6 +3020,39 @@
             DISPATCH();
         }
 
+        TARGET(BEFORE_ASYNC_WITH) {
+            _Py_IDENTIFIER(__aexit__);
+            _Py_IDENTIFIER(__aenter__);
+
+            PyObject *mgr = TOP();
+            PyObject *exit = special_lookup(mgr, &PyId___aexit__),
+                     *enter;
+            PyObject *res;
+            if (exit == NULL)
+                goto error;
+            SET_TOP(exit);
+            enter = special_lookup(mgr, &PyId___aenter__);
+            Py_DECREF(mgr);
+            if (enter == NULL)
+                goto error;
+            res = PyObject_CallFunctionObjArgs(enter, NULL);
+            Py_DECREF(enter);
+            if (res == NULL)
+                goto error;
+            PUSH(res);
+            DISPATCH();
+        }
+
+        TARGET(SETUP_ASYNC_WITH) {
+            PyObject *res = POP();
+            /* Setup the finally block before pushing the result
+               of __aenter__ on the stack. */
+            PyFrame_BlockSetup(f, SETUP_FINALLY, INSTR_OFFSET() + oparg,
+                               STACK_LEVEL());
+            PUSH(res);
+            DISPATCH();
+        }
+
         TARGET(SETUP_WITH) {
             _Py_IDENTIFIER(__exit__);
             _Py_IDENTIFIER(__enter__);
@@ -2909,7 +3079,7 @@
             DISPATCH();
         }
 
-        TARGET(WITH_CLEANUP) {
+        TARGET(WITH_CLEANUP_START) {
             /* At the top of the stack are 1-6 values indicating
                how/why we entered the finally clause:
                - TOP = None
@@ -2937,7 +3107,6 @@
 
             PyObject *exit_func;
             PyObject *exc = TOP(), *val = Py_None, *tb = Py_None, *res;
-            int err;
             if (exc == Py_None) {
                 (void)POP();
                 exit_func = TOP();
@@ -2987,10 +3156,23 @@
             if (res == NULL)
                 goto error;
 
+            PUSH(exc);
+            PUSH(res);
+            PREDICT(WITH_CLEANUP_FINISH);
+            DISPATCH();
+        }
+
+        PREDICTED(WITH_CLEANUP_FINISH);
+        TARGET(WITH_CLEANUP_FINISH) {
+            PyObject *res = POP();
+            PyObject *exc = POP();
+            int err;
+
             if (exc != Py_None)
                 err = PyObject_IsTrue(res);
             else
                 err = 0;
+
             Py_DECREF(res);
 
             if (err < 0)
@@ -3751,6 +3933,9 @@
     }
 
     if (co->co_flags & CO_GENERATOR) {
+        PyObject *gen;
+        PyObject *coroutine_wrapper;
+
         /* Don't need to keep the reference to f_back, it will be set
          * when the generator is resumed. */
         Py_CLEAR(f->f_back);
@@ -3759,7 +3944,19 @@
 
         /* Create a new generator that owns the ready to run frame
          * and return that as the value. */
-        return PyGen_NewWithQualName(f, name, qualname);
+        gen = PyGen_NewWithQualName(f, name, qualname);
+        if (gen == NULL)
+            return NULL;
+
+        if (co->co_flags & (CO_COROUTINE | CO_ITERABLE_COROUTINE)) {
+            coroutine_wrapper = PyEval_GetCoroutineWrapper();
+            if (coroutine_wrapper != NULL) {
+                PyObject *wrapped =
+                            PyObject_CallFunction(coroutine_wrapper, "N", gen);
+                gen = wrapped;
+            }
+        }
+        return gen;
     }
 
     retval = PyEval_EvalFrameEx(f,0);
@@ -4205,6 +4402,24 @@
                            || (tstate->c_profilefunc != NULL));
 }
 
+void
+PyEval_SetCoroutineWrapper(PyObject *wrapper)
+{
+    PyThreadState *tstate = PyThreadState_GET();
+
+    Py_CLEAR(tstate->coroutine_wrapper);
+
+    Py_XINCREF(wrapper);
+    tstate->coroutine_wrapper = wrapper;
+}
+
+PyObject *
+PyEval_GetCoroutineWrapper()
+{
+    PyThreadState *tstate = PyThreadState_GET();
+    return tstate->coroutine_wrapper;
+}
+
 PyObject *
 PyEval_GetBuiltins(void)
 {
diff --git a/Python/compile.c b/Python/compile.c
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -92,6 +92,7 @@
     COMPILER_SCOPE_MODULE,
     COMPILER_SCOPE_CLASS,
     COMPILER_SCOPE_FUNCTION,
+    COMPILER_SCOPE_ASYNC_FUNCTION,
     COMPILER_SCOPE_LAMBDA,
     COMPILER_SCOPE_COMPREHENSION,
 };
@@ -193,6 +194,8 @@
 static int expr_constant(struct compiler *, expr_ty);
 
 static int compiler_with(struct compiler *, stmt_ty, int);
+static int compiler_async_with(struct compiler *, stmt_ty, int);
+static int compiler_async_for(struct compiler *, stmt_ty);
 static int compiler_call_helper(struct compiler *c, Py_ssize_t n,
                                 asdl_seq *args,
                                 asdl_seq *keywords);
@@ -673,7 +676,9 @@
         parent = (struct compiler_unit *)PyCapsule_GetPointer(capsule, CAPSULE_NAME);
         assert(parent);
 
-        if (u->u_scope_type == COMPILER_SCOPE_FUNCTION || u->u_scope_type == COMPILER_SCOPE_CLASS) {
+        if (u->u_scope_type == COMPILER_SCOPE_FUNCTION
+            || u->u_scope_type == COMPILER_SCOPE_ASYNC_FUNCTION
+            || u->u_scope_type == COMPILER_SCOPE_CLASS) {
             assert(u->u_name);
             mangled = _Py_Mangle(parent->u_private, u->u_name);
             if (!mangled)
@@ -687,6 +692,7 @@
 
         if (!force_global) {
             if (parent->u_scope_type == COMPILER_SCOPE_FUNCTION
+                || parent->u_scope_type == COMPILER_SCOPE_ASYNC_FUNCTION
                 || parent->u_scope_type == COMPILER_SCOPE_LAMBDA) {
                 dot_locals_str = _PyUnicode_FromId(&dot_locals);
                 if (dot_locals_str == NULL)
@@ -927,7 +933,9 @@
             return 0;
         case SETUP_WITH:
             return 7;
-        case WITH_CLEANUP:
+        case WITH_CLEANUP_START:
+            return 1;
+        case WITH_CLEANUP_FINISH:
             return -1; /* XXX Sometimes more */
         case RETURN_VALUE:
             return -1;
@@ -1048,6 +1056,16 @@
             return -1;
         case DELETE_DEREF:
             return 0;
+        case GET_AWAITABLE:
+            return 0;
+        case SETUP_ASYNC_WITH:
+            return 6;
+        case BEFORE_ASYNC_WITH:
+            return 1;
+        case GET_AITER:
+            return 0;
+        case GET_ANEXT:
+            return 1;
         default:
             return PY_INVALID_STACK_EFFECT;
     }
@@ -1642,19 +1660,43 @@
 }
 
 static int
-compiler_function(struct compiler *c, stmt_ty s)
+compiler_function(struct compiler *c, stmt_ty s, int is_async)
 {
     PyCodeObject *co;
     PyObject *qualname, *first_const = Py_None;
-    arguments_ty args = s->v.FunctionDef.args;
-    expr_ty returns = s->v.FunctionDef.returns;
-    asdl_seq* decos = s->v.FunctionDef.decorator_list;
+    arguments_ty args;
+    expr_ty returns;
+    identifier name;
+    asdl_seq* decos;
+    asdl_seq *body;
     stmt_ty st;
     Py_ssize_t i, n, arglength;
     int docstring, kw_default_count = 0;
     int num_annotations;
-
-    assert(s->kind == FunctionDef_kind);
+    int scope_type;
+
+
+    if (is_async) {
+        assert(s->kind == AsyncFunctionDef_kind);
+
+        args = s->v.AsyncFunctionDef.args;
+        returns = s->v.AsyncFunctionDef.returns;
+        decos = s->v.AsyncFunctionDef.decorator_list;
+        name = s->v.AsyncFunctionDef.name;
+        body = s->v.AsyncFunctionDef.body;
+
+        scope_type = COMPILER_SCOPE_ASYNC_FUNCTION;
+    } else {
+        assert(s->kind == FunctionDef_kind);
+
+        args = s->v.FunctionDef.args;
+        returns = s->v.FunctionDef.returns;
+        decos = s->v.FunctionDef.decorator_list;
+        name = s->v.FunctionDef.name;
+        body = s->v.FunctionDef.body;
+
+        scope_type = COMPILER_SCOPE_FUNCTION;
+    }
 
     if (!compiler_decorators(c, decos))
         return 0;
@@ -1672,12 +1714,12 @@
         return 0;
     assert((num_annotations & 0xFFFF) == num_annotations);
 
-    if (!compiler_enter_scope(c, s->v.FunctionDef.name,
-                              COMPILER_SCOPE_FUNCTION, (void *)s,
+    if (!compiler_enter_scope(c, name,
+                              scope_type, (void *)s,
                               s->lineno))
         return 0;
 
-    st = (stmt_ty)asdl_seq_GET(s->v.FunctionDef.body, 0);
+    st = (stmt_ty)asdl_seq_GET(body, 0);
     docstring = compiler_isdocstring(st);
     if (docstring && c->c_optimize < 2)
         first_const = st->v.Expr.value->v.Str.s;
@@ -1688,10 +1730,10 @@
 
     c->u->u_argcount = asdl_seq_LEN(args->args);
     c->u->u_kwonlyargcount = asdl_seq_LEN(args->kwonlyargs);
-    n = asdl_seq_LEN(s->v.FunctionDef.body);
+    n = asdl_seq_LEN(body);
     /* if there was a docstring, we need to skip the first statement */
     for (i = docstring; i < n; i++) {
-        st = (stmt_ty)asdl_seq_GET(s->v.FunctionDef.body, i);
+        st = (stmt_ty)asdl_seq_GET(body, i);
         VISIT_IN_SCOPE(c, stmt, st);
     }
     co = assemble(c, 1);
@@ -1711,12 +1753,19 @@
     Py_DECREF(qualname);
     Py_DECREF(co);
 
+    if (is_async) {
+        co->co_flags |= CO_COROUTINE;
+        /* An async function is always a generator, even
+           if there is no 'yield' expressions in it. */
+        co->co_flags |= CO_GENERATOR;
+    }
+
     /* decorators */
     for (i = 0; i < asdl_seq_LEN(decos); i++) {
         ADDOP_I(c, CALL_FUNCTION, 1);
     }
 
-    return compiler_nameop(c, s->v.FunctionDef.name, Store);
+    return compiler_nameop(c, name, Store);
 }
 
 static int
@@ -1989,6 +2038,92 @@
     return 1;
 }
 
+
+static int
+compiler_async_for(struct compiler *c, stmt_ty s)
+{
+    static PyObject *stopiter_error = NULL;
+    basicblock *try, *except, *end, *after_try, *try_cleanup,
+               *after_loop, *after_loop_else;
+
+    if (stopiter_error == NULL) {
+        stopiter_error = PyUnicode_InternFromString("StopAsyncIteration");
+        if (stopiter_error == NULL)
+            return 0;
+    }
+
+    try = compiler_new_block(c);
+    except = compiler_new_block(c);
+    end = compiler_new_block(c);
+    after_try = compiler_new_block(c);
+    try_cleanup = compiler_new_block(c);
+    after_loop = compiler_new_block(c);
+    after_loop_else = compiler_new_block(c);
+
+    if (try == NULL || except == NULL || end == NULL
+            || after_try == NULL || try_cleanup == NULL)
+        return 0;
+
+    ADDOP_JREL(c, SETUP_LOOP, after_loop);
+    if (!compiler_push_fblock(c, LOOP, try))
+        return 0;
+
+    VISIT(c, expr, s->v.AsyncFor.iter);
+    ADDOP(c, GET_AITER);
+    ADDOP_O(c, LOAD_CONST, Py_None, consts);
+    ADDOP(c, YIELD_FROM);
+
+    compiler_use_next_block(c, try);
+
+
+    ADDOP_JREL(c, SETUP_EXCEPT, except);
+    if (!compiler_push_fblock(c, EXCEPT, try))
+        return 0;
+
+    ADDOP(c, GET_ANEXT);
+    ADDOP_O(c, LOAD_CONST, Py_None, consts);
+    ADDOP(c, YIELD_FROM);
+    VISIT(c, expr, s->v.AsyncFor.target);
+    ADDOP(c, POP_BLOCK);
+    compiler_pop_fblock(c, EXCEPT, try);
+    ADDOP_JREL(c, JUMP_FORWARD, after_try);
+
+
+    compiler_use_next_block(c, except);
+    ADDOP(c, DUP_TOP);
+    ADDOP_O(c, LOAD_GLOBAL, stopiter_error, names);
+    ADDOP_I(c, COMPARE_OP, PyCmp_EXC_MATCH);
+    ADDOP_JABS(c, POP_JUMP_IF_FALSE, try_cleanup);
+
+    ADDOP(c, POP_TOP);
+    ADDOP(c, POP_TOP);
+    ADDOP(c, POP_TOP);
+    ADDOP(c, POP_EXCEPT); /* for SETUP_EXCEPT */
+    ADDOP(c, POP_BLOCK); /* for SETUP_LOOP */
+    ADDOP_JABS(c, JUMP_ABSOLUTE, after_loop_else);
+
+
+    compiler_use_next_block(c, try_cleanup);
+    ADDOP(c, END_FINALLY);
+
+    compiler_use_next_block(c, after_try);
+    VISIT_SEQ(c, stmt, s->v.AsyncFor.body);
+    ADDOP_JABS(c, JUMP_ABSOLUTE, try);
+
+    ADDOP(c, POP_BLOCK); /* for SETUP_LOOP */
+    compiler_pop_fblock(c, LOOP, try);
+
+    compiler_use_next_block(c, after_loop);
+    ADDOP_JABS(c, JUMP_ABSOLUTE, end);
+
+    compiler_use_next_block(c, after_loop_else);
+    VISIT_SEQ(c, stmt, s->v.For.orelse);
+
+    compiler_use_next_block(c, end);
+
+    return 1;
+}
+
 static int
 compiler_while(struct compiler *c, stmt_ty s)
 {
@@ -2515,7 +2650,7 @@
 
     switch (s->kind) {
     case FunctionDef_kind:
-        return compiler_function(c, s);
+        return compiler_function(c, s, 0);
     case ClassDef_kind:
         return compiler_class(c, s);
     case Return_kind:
@@ -2594,7 +2729,14 @@
         return compiler_continue(c);
     case With_kind:
         return compiler_with(c, s, 0);
+    case AsyncFunctionDef_kind:
+        return compiler_function(c, s, 1);
+    case AsyncWith_kind:
+        return compiler_async_with(c, s, 0);
+    case AsyncFor_kind:
+        return compiler_async_for(c, s);
     }
+
     return 1;
 }
 
@@ -3471,6 +3613,102 @@
     }
 }
 
+
+/*
+   Implements the async with statement.
+
+   The semantics outlined in that PEP are as follows:
+
+   async with EXPR as VAR:
+       BLOCK
+
+   It is implemented roughly as:
+
+   context = EXPR
+   exit = context.__aexit__  # not calling it
+   value = await context.__aenter__()
+   try:
+       VAR = value  # if VAR present in the syntax
+       BLOCK
+   finally:
+       if an exception was raised:
+       exc = copy of (exception, instance, traceback)
+       else:
+       exc = (None, None, None)
+       if not (await exit(*exc)):
+           raise
+ */
+static int
+compiler_async_with(struct compiler *c, stmt_ty s, int pos)
+{
+    basicblock *block, *finally;
+    withitem_ty item = asdl_seq_GET(s->v.AsyncWith.items, pos);
+
+    assert(s->kind == AsyncWith_kind);
+
+    block = compiler_new_block(c);
+    finally = compiler_new_block(c);
+    if (!block || !finally)
+        return 0;
+
+    /* Evaluate EXPR */
+    VISIT(c, expr, item->context_expr);
+
+    ADDOP(c, BEFORE_ASYNC_WITH);
+    ADDOP(c, GET_AWAITABLE);
+    ADDOP_O(c, LOAD_CONST, Py_None, consts);
+    ADDOP(c, YIELD_FROM);
+
+    ADDOP_JREL(c, SETUP_ASYNC_WITH, finally);
+
+    /* SETUP_ASYNC_WITH pushes a finally block. */
+    compiler_use_next_block(c, block);
+    if (!compiler_push_fblock(c, FINALLY_TRY, block)) {
+        return 0;
+    }
+
+    if (item->optional_vars) {
+        VISIT(c, expr, item->optional_vars);
+    }
+    else {
+    /* Discard result from context.__aenter__() */
+        ADDOP(c, POP_TOP);
+    }
+
+    pos++;
+    if (pos == asdl_seq_LEN(s->v.AsyncWith.items))
+        /* BLOCK code */
+        VISIT_SEQ(c, stmt, s->v.AsyncWith.body)
+    else if (!compiler_async_with(c, s, pos))
+            return 0;
+
+    /* End of try block; start the finally block */
+    ADDOP(c, POP_BLOCK);
+    compiler_pop_fblock(c, FINALLY_TRY, block);
+
+    ADDOP_O(c, LOAD_CONST, Py_None, consts);
+    compiler_use_next_block(c, finally);
+    if (!compiler_push_fblock(c, FINALLY_END, finally))
+        return 0;
+
+    /* Finally block starts; context.__exit__ is on the stack under
+       the exception or return information. Just issue our magic
+       opcode. */
+    ADDOP(c, WITH_CLEANUP_START);
+
+    ADDOP(c, GET_AWAITABLE);
+    ADDOP_O(c, LOAD_CONST, Py_None, consts);
+    ADDOP(c, YIELD_FROM);
+
+    ADDOP(c, WITH_CLEANUP_FINISH);
+
+    /* Finally block ends. */
+    ADDOP(c, END_FINALLY);
+    compiler_pop_fblock(c, FINALLY_END, finally);
+    return 1;
+}
+
+
 /*
    Implements the with statement from PEP 343.
 
@@ -3544,7 +3782,8 @@
     /* Finally block starts; context.__exit__ is on the stack under
        the exception or return information. Just issue our magic
        opcode. */
-    ADDOP(c, WITH_CLEANUP);
+    ADDOP(c, WITH_CLEANUP_START);
+    ADDOP(c, WITH_CLEANUP_FINISH);
 
     /* Finally block ends. */
     ADDOP(c, END_FINALLY);
@@ -3595,6 +3834,8 @@
     case Yield_kind:
         if (c->u->u_ste->ste_type != FunctionBlock)
             return compiler_error(c, "'yield' outside function");
+        if (c->u->u_scope_type == COMPILER_SCOPE_ASYNC_FUNCTION)
+            return compiler_error(c, "'yield' inside async function");
         if (e->v.Yield.value) {
             VISIT(c, expr, e->v.Yield.value);
         }
@@ -3606,11 +3847,28 @@
     case YieldFrom_kind:
         if (c->u->u_ste->ste_type != FunctionBlock)
             return compiler_error(c, "'yield' outside function");
+
+        if (c->u->u_scope_type == COMPILER_SCOPE_ASYNC_FUNCTION)
+            return compiler_error(c, "'yield from' inside async function");
+
         VISIT(c, expr, e->v.YieldFrom.value);
         ADDOP(c, GET_ITER);
         ADDOP_O(c, LOAD_CONST, Py_None, consts);
         ADDOP(c, YIELD_FROM);
         break;
+    case Await_kind:
+        if (c->u->u_ste->ste_type != FunctionBlock)
+            return compiler_error(c, "'await' outside function");
+
+        /* this check won't be triggered while we have AWAIT token */
+        if (c->u->u_scope_type != COMPILER_SCOPE_ASYNC_FUNCTION)
+            return compiler_error(c, "'await' outside async function");
+
+        VISIT(c, expr, e->v.Await.value);
+        ADDOP(c, GET_AWAITABLE);
+        ADDOP_O(c, LOAD_CONST, Py_None, consts);
+        ADDOP(c, YIELD_FROM);
+        break;
     case Compare_kind:
         return compiler_compare(c, e);
     case Call_kind:
diff --git a/Python/graminit.c b/Python/graminit.c
--- a/Python/graminit.c
+++ b/Python/graminit.c
@@ -92,393 +92,406 @@
 static arc arcs_5_0[1] = {
     {16, 1},
 };
-static arc arcs_5_1[2] = {
+static arc arcs_5_1[3] = {
     {18, 2},
     {19, 2},
+    {20, 2},
 };
 static arc arcs_5_2[1] = {
     {0, 2},
 };
 static state states_5[3] = {
     {1, arcs_5_0},
-    {2, arcs_5_1},
+    {3, arcs_5_1},
     {1, arcs_5_2},
 };
 static arc arcs_6_0[1] = {
-    {20, 1},
+    {21, 1},
 };
 static arc arcs_6_1[1] = {
-    {21, 2},
+    {19, 2},
 };
 static arc arcs_6_2[1] = {
-    {22, 3},
-};
-static arc arcs_6_3[2] = {
-    {23, 4},
-    {25, 5},
-};
-static arc arcs_6_4[1] = {
-    {24, 6},
-};
-static arc arcs_6_5[1] = {
-    {26, 7},
-};
-static arc arcs_6_6[1] = {
-    {25, 5},
-};
-static arc arcs_6_7[1] = {
-    {0, 7},
-};
-static state states_6[8] = {
+    {0, 2},
+};
+static state states_6[3] = {
     {1, arcs_6_0},
     {1, arcs_6_1},
     {1, arcs_6_2},
-    {2, arcs_6_3},
-    {1, arcs_6_4},
-    {1, arcs_6_5},
-    {1, arcs_6_6},
-    {1, arcs_6_7},
 };
 static arc arcs_7_0[1] = {
+    {22, 1},
+};
+static arc arcs_7_1[1] = {
+    {23, 2},
+};
+static arc arcs_7_2[1] = {
+    {24, 3},
+};
+static arc arcs_7_3[2] = {
+    {25, 4},
+    {27, 5},
+};
+static arc arcs_7_4[1] = {
+    {26, 6},
+};
+static arc arcs_7_5[1] = {
+    {28, 7},
+};
+static arc arcs_7_6[1] = {
+    {27, 5},
+};
+static arc arcs_7_7[1] = {
+    {0, 7},
+};
+static state states_7[8] = {
+    {1, arcs_7_0},
+    {1, arcs_7_1},
+    {1, arcs_7_2},
+    {2, arcs_7_3},
+    {1, arcs_7_4},
+    {1, arcs_7_5},
+    {1, arcs_7_6},
+    {1, arcs_7_7},
+};
+static arc arcs_8_0[1] = {
     {13, 1},
 };
-static arc arcs_7_1[2] = {
+static arc arcs_8_1[2] = {
+    {29, 2},
+    {15, 3},
+};
+static arc arcs_8_2[1] = {
+    {15, 3},
+};
+static arc arcs_8_3[1] = {
+    {0, 3},
+};
+static state states_8[4] = {
+    {1, arcs_8_0},
+    {2, arcs_8_1},
+    {1, arcs_8_2},
+    {1, arcs_8_3},
+};
+static arc arcs_9_0[3] = {
+    {30, 1},
+    {33, 2},
+    {34, 3},
+};
+static arc arcs_9_1[3] = {
+    {31, 4},
+    {32, 5},
+    {0, 1},
+};
+static arc arcs_9_2[3] = {
+    {30, 6},
+    {32, 7},
+    {0, 2},
+};
+static arc arcs_9_3[1] = {
+    {30, 8},
+};
+static arc arcs_9_4[1] = {
+    {26, 9},
+};
+static arc arcs_9_5[4] = {
+    {30, 10},
+    {33, 11},
+    {34, 3},
+    {0, 5},
+};
+static arc arcs_9_6[2] = {
+    {32, 7},
+    {0, 6},
+};
+static arc arcs_9_7[2] = {
+    {30, 12},
+    {34, 3},
+};
+static arc arcs_9_8[1] = {
+    {0, 8},
+};
+static arc arcs_9_9[2] = {
+    {32, 5},
+    {0, 9},
+};
+static arc arcs_9_10[3] = {
+    {32, 5},
+    {31, 4},
+    {0, 10},
+};
+static arc arcs_9_11[3] = {
+    {30, 13},
+    {32, 14},
+    {0, 11},
+};
+static arc arcs_9_12[3] = {
+    {32, 7},
+    {31, 15},
+    {0, 12},
+};
+static arc arcs_9_13[2] = {
+    {32, 14},
+    {0, 13},
+};
+static arc arcs_9_14[2] = {
+    {30, 16},
+    {34, 3},
+};
+static arc arcs_9_15[1] = {
+    {26, 6},
+};
+static arc arcs_9_16[3] = {
+    {32, 14},
+    {31, 17},
+    {0, 16},
+};
+static arc arcs_9_17[1] = {
+    {26, 13},
+};
+static state states_9[18] = {
+    {3, arcs_9_0},
+    {3, arcs_9_1},
+    {3, arcs_9_2},
+    {1, arcs_9_3},
+    {1, arcs_9_4},
+    {4, arcs_9_5},
+    {2, arcs_9_6},
+    {2, arcs_9_7},
+    {1, arcs_9_8},
+    {2, arcs_9_9},
+    {3, arcs_9_10},
+    {3, arcs_9_11},
+    {3, arcs_9_12},
+    {2, arcs_9_13},
+    {2, arcs_9_14},
+    {1, arcs_9_15},
+    {3, arcs_9_16},
+    {1, arcs_9_17},
+};
+static arc arcs_10_0[1] = {
+    {23, 1},
+};
+static arc arcs_10_1[2] = {
     {27, 2},
-    {15, 3},
-};
-static arc arcs_7_2[1] = {
-    {15, 3},
-};
-static arc arcs_7_3[1] = {
+    {0, 1},
+};
+static arc arcs_10_2[1] = {
+    {26, 3},
+};
+static arc arcs_10_3[1] = {
     {0, 3},
 };
-static state states_7[4] = {
-    {1, arcs_7_0},
-    {2, arcs_7_1},
-    {1, arcs_7_2},
-    {1, arcs_7_3},
-};
-static arc arcs_8_0[3] = {
-    {28, 1},
-    {31, 2},
-    {32, 3},
-};
-static arc arcs_8_1[3] = {
-    {29, 4},
-    {30, 5},
+static state states_10[4] = {
+    {1, arcs_10_0},
+    {2, arcs_10_1},
+    {1, arcs_10_2},
+    {1, arcs_10_3},
+};
+static arc arcs_11_0[3] = {
+    {36, 1},
+    {33, 2},
+    {34, 3},
+};
+static arc arcs_11_1[3] = {
+    {31, 4},
+    {32, 5},
     {0, 1},
 };
-static arc arcs_8_2[3] = {
-    {28, 6},
-    {30, 7},
+static arc arcs_11_2[3] = {
+    {36, 6},
+    {32, 7},
     {0, 2},
 };
-static arc arcs_8_3[1] = {
-    {28, 8},
-};
-static arc arcs_8_4[1] = {
-    {24, 9},
-};
-static arc arcs_8_5[4] = {
-    {28, 10},
-    {31, 11},
-    {32, 3},
+static arc arcs_11_3[1] = {
+    {36, 8},
+};
+static arc arcs_11_4[1] = {
+    {26, 9},
+};
+static arc arcs_11_5[4] = {
+    {36, 10},
+    {33, 11},
+    {34, 3},
     {0, 5},
 };
-static arc arcs_8_6[2] = {
-    {30, 7},
+static arc arcs_11_6[2] = {
+    {32, 7},
     {0, 6},
 };
-static arc arcs_8_7[2] = {
-    {28, 12},
-    {32, 3},
-};
-static arc arcs_8_8[1] = {
+static arc arcs_11_7[2] = {
+    {36, 12},
+    {34, 3},
+};
+static arc arcs_11_8[1] = {
     {0, 8},
 };
-static arc arcs_8_9[2] = {
-    {30, 5},
+static arc arcs_11_9[2] = {
+    {32, 5},
     {0, 9},
 };
-static arc arcs_8_10[3] = {
-    {30, 5},
-    {29, 4},
+static arc arcs_11_10[3] = {
+    {32, 5},
+    {31, 4},
     {0, 10},
 };
-static arc arcs_8_11[3] = {
-    {28, 13},
-    {30, 14},
+static arc arcs_11_11[3] = {
+    {36, 13},
+    {32, 14},
     {0, 11},
 };
-static arc arcs_8_12[3] = {
-    {30, 7},
-    {29, 15},
+static arc arcs_11_12[3] = {
+    {32, 7},
+    {31, 15},
     {0, 12},
 };
-static arc arcs_8_13[2] = {
-    {30, 14},
+static arc arcs_11_13[2] = {
+    {32, 14},
     {0, 13},
 };
-static arc arcs_8_14[2] = {
-    {28, 16},
-    {32, 3},
-};
-static arc arcs_8_15[1] = {
-    {24, 6},
-};
-static arc arcs_8_16[3] = {
-    {30, 14},
-    {29, 17},
+static arc arcs_11_14[2] = {
+    {36, 16},
+    {34, 3},
+};
+static arc arcs_11_15[1] = {
+    {26, 6},
+};
+static arc arcs_11_16[3] = {
+    {32, 14},
+    {31, 17},
     {0, 16},
 };
-static arc arcs_8_17[1] = {
-    {24, 13},
-};
-static state states_8[18] = {
-    {3, arcs_8_0},
-    {3, arcs_8_1},
-    {3, arcs_8_2},
-    {1, arcs_8_3},
-    {1, arcs_8_4},
-    {4, arcs_8_5},
-    {2, arcs_8_6},
-    {2, arcs_8_7},
-    {1, arcs_8_8},
-    {2, arcs_8_9},
-    {3, arcs_8_10},
-    {3, arcs_8_11},
-    {3, arcs_8_12},
-    {2, arcs_8_13},
-    {2, arcs_8_14},
-    {1, arcs_8_15},
-    {3, arcs_8_16},
-    {1, arcs_8_17},
-};
-static arc arcs_9_0[1] = {
-    {21, 1},
-};
-static arc arcs_9_1[2] = {
-    {25, 2},
+static arc arcs_11_17[1] = {
+    {26, 13},
+};
+static state states_11[18] = {
+    {3, arcs_11_0},
+    {3, arcs_11_1},
+    {3, arcs_11_2},
+    {1, arcs_11_3},
+    {1, arcs_11_4},
+    {4, arcs_11_5},
+    {2, arcs_11_6},
+    {2, arcs_11_7},
+    {1, arcs_11_8},
+    {2, arcs_11_9},
+    {3, arcs_11_10},
+    {3, arcs_11_11},
+    {3, arcs_11_12},
+    {2, arcs_11_13},
+    {2, arcs_11_14},
+    {1, arcs_11_15},
+    {3, arcs_11_16},
+    {1, arcs_11_17},
+};
+static arc arcs_12_0[1] = {
+    {23, 1},
+};
+static arc arcs_12_1[1] = {
     {0, 1},
 };
-static arc arcs_9_2[1] = {
-    {24, 3},
-};
-static arc arcs_9_3[1] = {
-    {0, 3},
-};
-static state states_9[4] = {
-    {1, arcs_9_0},
-    {2, arcs_9_1},
-    {1, arcs_9_2},
-    {1, arcs_9_3},
-};
-static arc arcs_10_0[3] = {
-    {34, 1},
-    {31, 2},
-    {32, 3},
-};
-static arc arcs_10_1[3] = {
-    {29, 4},
-    {30, 5},
-    {0, 1},
-};
-static arc arcs_10_2[3] = {
-    {34, 6},
-    {30, 7},
-    {0, 2},
-};
-static arc arcs_10_3[1] = {
-    {34, 8},
-};
-static arc arcs_10_4[1] = {
-    {24, 9},
-};
-static arc arcs_10_5[4] = {
-    {34, 10},
-    {31, 11},
-    {32, 3},
-    {0, 5},
-};
-static arc arcs_10_6[2] = {
-    {30, 7},
-    {0, 6},
-};
-static arc arcs_10_7[2] = {
-    {34, 12},
-    {32, 3},
-};
-static arc arcs_10_8[1] = {
-    {0, 8},
-};
-static arc arcs_10_9[2] = {
-    {30, 5},
-    {0, 9},
-};
-static arc arcs_10_10[3] = {
-    {30, 5},
-    {29, 4},
-    {0, 10},
-};
-static arc arcs_10_11[3] = {
-    {34, 13},
-    {30, 14},
-    {0, 11},
-};
-static arc arcs_10_12[3] = {
-    {30, 7},
-    {29, 15},
-    {0, 12},
-};
-static arc arcs_10_13[2] = {
-    {30, 14},
-    {0, 13},
-};
-static arc arcs_10_14[2] = {
-    {34, 16},
-    {32, 3},
-};
-static arc arcs_10_15[1] = {
-    {24, 6},
-};
-static arc arcs_10_16[3] = {
-    {30, 14},
-    {29, 17},
-    {0, 16},
-};
-static arc arcs_10_17[1] = {
-    {24, 13},
-};
-static state states_10[18] = {
-    {3, arcs_10_0},
-    {3, arcs_10_1},
-    {3, arcs_10_2},
-    {1, arcs_10_3},
-    {1, arcs_10_4},
-    {4, arcs_10_5},
-    {2, arcs_10_6},
-    {2, arcs_10_7},
-    {1, arcs_10_8},
-    {2, arcs_10_9},
-    {3, arcs_10_10},
-    {3, arcs_10_11},
-    {3, arcs_10_12},
-    {2, arcs_10_13},
-    {2, arcs_10_14},
-    {1, arcs_10_15},
-    {3, arcs_10_16},
-    {1, arcs_10_17},
-};
-static arc arcs_11_0[1] = {
-    {21, 1},
-};
-static arc arcs_11_1[1] = {
-    {0, 1},
-};
-static state states_11[2] = {
-    {1, arcs_11_0},
-    {1, arcs_11_1},
-};
-static arc arcs_12_0[2] = {
+static state states_12[2] = {
+    {1, arcs_12_0},
+    {1, arcs_12_1},
+};
+static arc arcs_13_0[2] = {
     {3, 1},
     {4, 1},
 };
-static arc arcs_12_1[1] = {
+static arc arcs_13_1[1] = {
     {0, 1},
 };
-static state states_12[2] = {
-    {2, arcs_12_0},
-    {1, arcs_12_1},
-};
-static arc arcs_13_0[1] = {
-    {35, 1},
-};
-static arc arcs_13_1[2] = {
-    {36, 2},
+static state states_13[2] = {
+    {2, arcs_13_0},
+    {1, arcs_13_1},
+};
+static arc arcs_14_0[1] = {
+    {37, 1},
+};
+static arc arcs_14_1[2] = {
+    {38, 2},
     {2, 3},
 };
-static arc arcs_13_2[2] = {
-    {35, 1},
+static arc arcs_14_2[2] = {
+    {37, 1},
     {2, 3},
 };
-static arc arcs_13_3[1] = {
+static arc arcs_14_3[1] = {
     {0, 3},
 };
-static state states_13[4] = {
-    {1, arcs_13_0},
-    {2, arcs_13_1},
-    {2, arcs_13_2},
-    {1, arcs_13_3},
-};
-static arc arcs_14_0[8] = {
-    {37, 1},
-    {38, 1},
+static state states_14[4] = {
+    {1, arcs_14_0},
+    {2, arcs_14_1},
+    {2, arcs_14_2},
+    {1, arcs_14_3},
+};
+static arc arcs_15_0[8] = {
     {39, 1},
     {40, 1},
     {41, 1},
     {42, 1},
     {43, 1},
     {44, 1},
-};
-static arc arcs_14_1[1] = {
+    {45, 1},
+    {46, 1},
+};
+static arc arcs_15_1[1] = {
     {0, 1},
 };
-static state states_14[2] = {
-    {8, arcs_14_0},
-    {1, arcs_14_1},
-};
-static arc arcs_15_0[1] = {
-    {45, 1},
-};
-static arc arcs_15_1[3] = {
-    {46, 2},
-    {29, 3},
+static state states_15[2] = {
+    {8, arcs_15_0},
+    {1, arcs_15_1},
+};
+static arc arcs_16_0[1] = {
+    {47, 1},
+};
+static arc arcs_16_1[3] = {
+    {48, 2},
+    {31, 3},
     {0, 1},
 };
-static arc arcs_15_2[2] = {
-    {47, 4},
+static arc arcs_16_2[2] = {
+    {49, 4},
     {9, 4},
 };
-static arc arcs_15_3[2] = {
+static arc arcs_16_3[2] = {
+    {49, 5},
     {47, 5},
-    {45, 5},
-};
-static arc arcs_15_4[1] = {
+};
+static arc arcs_16_4[1] = {
     {0, 4},
 };
-static arc arcs_15_5[2] = {
-    {29, 3},
+static arc arcs_16_5[2] = {
+    {31, 3},
     {0, 5},
 };
-static state states_15[6] = {
-    {1, arcs_15_0},
-    {3, arcs_15_1},
-    {2, arcs_15_2},
-    {2, arcs_15_3},
-    {1, arcs_15_4},
-    {2, arcs_15_5},
-};
-static arc arcs_16_0[2] = {
-    {24, 1},
-    {48, 1},
-};
-static arc arcs_16_1[2] = {
-    {30, 2},
+static state states_16[6] = {
+    {1, arcs_16_0},
+    {3, arcs_16_1},
+    {2, arcs_16_2},
+    {2, arcs_16_3},
+    {1, arcs_16_4},
+    {2, arcs_16_5},
+};
+static arc arcs_17_0[2] = {
+    {26, 1},
+    {50, 1},
+};
+static arc arcs_17_1[2] = {
+    {32, 2},
     {0, 1},
 };
-static arc arcs_16_2[3] = {
-    {24, 1},
-    {48, 1},
+static arc arcs_17_2[3] = {
+    {26, 1},
+    {50, 1},
     {0, 2},
 };
-static state states_16[3] = {
-    {2, arcs_16_0},
-    {2, arcs_16_1},
-    {3, arcs_16_2},
-};
-static arc arcs_17_0[13] = {
-    {49, 1},
-    {50, 1},
+static state states_17[3] = {
+    {2, arcs_17_0},
+    {2, arcs_17_1},
+    {3, arcs_17_2},
+};
+static arc arcs_18_0[13] = {
     {51, 1},
     {52, 1},
     {53, 1},
@@ -490,64 +503,56 @@
     {59, 1},
     {60, 1},
     {61, 1},
-};
-static arc arcs_17_1[1] = {
+    {62, 1},
+    {63, 1},
+};
+static arc arcs_18_1[1] = {
     {0, 1},
 };
-static state states_17[2] = {
-    {13, arcs_17_0},
-    {1, arcs_17_1},
-};
-static arc arcs_18_0[1] = {
-    {62, 1},
-};
-static arc arcs_18_1[1] = {
-    {63, 2},
-};
-static arc arcs_18_2[1] = {
-    {0, 2},
-};
-static state states_18[3] = {
-    {1, arcs_18_0},
+static state states_18[2] = {
+    {13, arcs_18_0},
     {1, arcs_18_1},
-    {1, arcs_18_2},
 };
 static arc arcs_19_0[1] = {
     {64, 1},
 };
 static arc arcs_19_1[1] = {
-    {0, 1},
-};
-static state states_19[2] = {
+    {65, 2},
+};
+static arc arcs_19_2[1] = {
+    {0, 2},
+};
+static state states_19[3] = {
     {1, arcs_19_0},
     {1, arcs_19_1},
-};
-static arc arcs_20_0[5] = {
-    {65, 1},
+    {1, arcs_19_2},
+};
+static arc arcs_20_0[1] = {
     {66, 1},
+};
+static arc arcs_20_1[1] = {
+    {0, 1},
+};
+static state states_20[2] = {
+    {1, arcs_20_0},
+    {1, arcs_20_1},
+};
+static arc arcs_21_0[5] = {
     {67, 1},
     {68, 1},
     {69, 1},
-};
-static arc arcs_20_1[1] = {
-    {0, 1},
-};
-static state states_20[2] = {
-    {5, arcs_20_0},
-    {1, arcs_20_1},
-};
-static arc arcs_21_0[1] = {
     {70, 1},
+    {71, 1},
 };
 static arc arcs_21_1[1] = {
     {0, 1},
 };
 static state states_21[2] = {
-    {1, arcs_21_0},
+    {5, arcs_21_0},
     {1, arcs_21_1},
 };
 static arc arcs_22_0[1] = {
-    {71, 1},
+    {72, 1},
 };
 static arc arcs_22_1[1] = {
     {0, 1},
@@ -557,148 +562,139 @@
     {1, arcs_22_1},
 };
 static arc arcs_23_0[1] = {
-    {72, 1},
-};
-static arc arcs_23_1[2] = {
+    {73, 1},
+};
+static arc arcs_23_1[1] = {
+    {0, 1},
+};
+static state states_23[2] = {
+    {1, arcs_23_0},
+    {1, arcs_23_1},
+};
+static arc arcs_24_0[1] = {
+    {74, 1},
+};
+static arc arcs_24_1[2] = {
     {9, 2},
     {0, 1},
 };
-static arc arcs_23_2[1] = {
+static arc arcs_24_2[1] = {
     {0, 2},
 };
-static state states_23[3] = {
-    {1, arcs_23_0},
-    {2, arcs_23_1},
-    {1, arcs_23_2},
-};
-static arc arcs_24_0[1] = {
-    {47, 1},
-};
-static arc arcs_24_1[1] = {
+static state states_24[3] = {
+    {1, arcs_24_0},
+    {2, arcs_24_1},
+    {1, arcs_24_2},
+};
+static arc arcs_25_0[1] = {
+    {49, 1},
+};
+static arc arcs_25_1[1] = {
     {0, 1},
 };
-static state states_24[2] = {
-    {1, arcs_24_0},
-    {1, arcs_24_1},
-};
-static arc arcs_25_0[1] = {
-    {73, 1},
-};
-static arc arcs_25_1[2] = {
-    {24, 2},
+static state states_25[2] = {
+    {1, arcs_25_0},
+    {1, arcs_25_1},
+};
+static arc arcs_26_0[1] = {
+    {75, 1},
+};
+static arc arcs_26_1[2] = {
+    {26, 2},
     {0, 1},
 };
-static arc arcs_25_2[2] = {
-    {74, 3},
+static arc arcs_26_2[2] = {
+    {76, 3},
     {0, 2},
 };
-static arc arcs_25_3[1] = {
-    {24, 4},
-};
-static arc arcs_25_4[1] = {
+static arc arcs_26_3[1] = {
+    {26, 4},
+};
+static arc arcs_26_4[1] = {
     {0, 4},
 };
-static state states_25[5] = {
-    {1, arcs_25_0},
-    {2, arcs_25_1},
-    {2, arcs_25_2},
-    {1, arcs_25_3},
-    {1, arcs_25_4},
-};
-static arc arcs_26_0[2] = {
-    {75, 1},
+static state states_26[5] = {
+    {1, arcs_26_0},
+    {2, arcs_26_1},
+    {2, arcs_26_2},
+    {1, arcs_26_3},
+    {1, arcs_26_4},
+};
+static arc arcs_27_0[2] = {
+    {77, 1},
+    {78, 1},
+};
+static arc arcs_27_1[1] = {
+    {0, 1},
+};
+static state states_27[2] = {
+    {2, arcs_27_0},
+    {1, arcs_27_1},
+};
+static arc arcs_28_0[1] = {
+    {79, 1},
+};
+static arc arcs_28_1[1] = {
+    {80, 2},
+};
+static arc arcs_28_2[1] = {
+    {0, 2},
+};
+static state states_28[3] = {
+    {1, arcs_28_0},
+    {1, arcs_28_1},
+    {1, arcs_28_2},
+};
+static arc arcs_29_0[1] = {
     {76, 1},
 };
-static arc arcs_26_1[1] = {
+static arc arcs_29_1[3] = {
+    {81, 2},
+    {82, 2},
+    {12, 3},
+};
+static arc arcs_29_2[4] = {
+    {81, 2},
+    {82, 2},
+    {12, 3},
+    {79, 4},
+};
+static arc arcs_29_3[1] = {
+    {79, 4},
+};
+static arc arcs_29_4[3] = {
+    {33, 5},
+    {13, 6},
+    {83, 5},
+};
+static arc arcs_29_5[1] = {
+    {0, 5},
+};
+static arc arcs_29_6[1] = {
+    {83, 7},
+};
+static arc arcs_29_7[1] = {
+    {15, 5},
+};
+static state states_29[8] = {
+    {1, arcs_29_0},
+    {3, arcs_29_1},
+    {4, arcs_29_2},
+    {1, arcs_29_3},
+    {3, arcs_29_4},
+    {1, arcs_29_5},
+    {1, arcs_29_6},
+    {1, arcs_29_7},
+};
+static arc arcs_30_0[1] = {
+    {23, 1},
+};
+static arc arcs_30_1[2] = {
+    {85, 2},
     {0, 1},
 };
-static state states_26[2] = {
-    {2, arcs_26_0},
-    {1, arcs_26_1},
-};
-static arc arcs_27_0[1] = {
-    {77, 1},
-};
-static arc arcs_27_1[1] = {
-    {78, 2},
-};
-static arc arcs_27_2[1] = {
-    {0, 2},
-};
-static state states_27[3] = {
-    {1, arcs_27_0},
-    {1, arcs_27_1},
-    {1, arcs_27_2},
-};
-static arc arcs_28_0[1] = {
-    {74, 1},
-};
-static arc arcs_28_1[3] = {
-    {79, 2},
-    {80, 2},
-    {12, 3},
-};
-static arc arcs_28_2[4] = {
-    {79, 2},
-    {80, 2},
-    {12, 3},
-    {77, 4},
-};
-static arc arcs_28_3[1] = {
-    {77, 4},
-};
-static arc arcs_28_4[3] = {
-    {31, 5},
-    {13, 6},
-    {81, 5},
-};
-static arc arcs_28_5[1] = {
-    {0, 5},
-};
-static arc arcs_28_6[1] = {
-    {81, 7},
-};
-static arc arcs_28_7[1] = {
-    {15, 5},
-};
-static state states_28[8] = {
-    {1, arcs_28_0},
-    {3, arcs_28_1},
-    {4, arcs_28_2},
-    {1, arcs_28_3},
-    {3, arcs_28_4},
-    {1, arcs_28_5},
-    {1, arcs_28_6},
-    {1, arcs_28_7},
-};
-static arc arcs_29_0[1] = {
-    {21, 1},
-};
-static arc arcs_29_1[2] = {
-    {83, 2},
-    {0, 1},
-};
-static arc arcs_29_2[1] = {
-    {21, 3},
-};
-static arc arcs_29_3[1] = {
-    {0, 3},
-};
-static state states_29[4] = {
-    {1, arcs_29_0},
-    {2, arcs_29_1},
-    {1, arcs_29_2},
-    {1, arcs_29_3},
-};
-static arc arcs_30_0[1] = {
-    {12, 1},
-};
-static arc arcs_30_1[2] = {
-    {83, 2},
-    {0, 1},
-};
 static arc arcs_30_2[1] = {
-    {21, 3},
+    {23, 3},
 };
 static arc arcs_30_3[1] = {
     {0, 3},
@@ -710,37 +706,45 @@
     {1, arcs_30_3},
 };
 static arc arcs_31_0[1] = {
-    {82, 1},
+    {12, 1},
 };
 static arc arcs_31_1[2] = {
-    {30, 2},
+    {85, 2},
     {0, 1},
 };
-static arc arcs_31_2[2] = {
-    {82, 1},
-    {0, 2},
-};
-static state states_31[3] = {
+static arc arcs_31_2[1] = {
+    {23, 3},
+};
+static arc arcs_31_3[1] = {
+    {0, 3},
+};
+static state states_31[4] = {
     {1, arcs_31_0},
     {2, arcs_31_1},
-    {2, arcs_31_2},
+    {1, arcs_31_2},
+    {1, arcs_31_3},
 };
 static arc arcs_32_0[1] = {
     {84, 1},
 };
 static arc arcs_32_1[2] = {
-    {30, 0},
+    {32, 2},
     {0, 1},
 };
-static state states_32[2] = {
+static arc arcs_32_2[2] = {
+    {84, 1},
+    {0, 2},
+};
+static state states_32[3] = {
     {1, arcs_32_0},
     {2, arcs_32_1},
+    {2, arcs_32_2},
 };
 static arc arcs_33_0[1] = {
-    {21, 1},
+    {86, 1},
 };
 static arc arcs_33_1[2] = {
-    {79, 0},
+    {32, 0},
     {0, 1},
 };
 static state states_33[2] = {
@@ -748,28 +752,24 @@
     {2, arcs_33_1},
 };
 static arc arcs_34_0[1] = {
-    {85, 1},
-};
-static arc arcs_34_1[1] = {
-    {21, 2},
-};
-static arc arcs_34_2[2] = {
-    {30, 1},
-    {0, 2},
-};
-static state states_34[3] = {
+    {23, 1},
+};
+static arc arcs_34_1[2] = {
+    {81, 0},
+    {0, 1},
+};
+static state states_34[2] = {
     {1, arcs_34_0},
-    {1, arcs_34_1},
-    {2, arcs_34_2},
+    {2, arcs_34_1},
 };
 static arc arcs_35_0[1] = {
-    {86, 1},
+    {87, 1},
 };
 static arc arcs_35_1[1] = {
-    {21, 2},
+    {23, 2},
 };
 static arc arcs_35_2[2] = {
-    {30, 1},
+    {32, 1},
     {0, 2},
 };
 static state states_35[3] = {
@@ -778,432 +778,438 @@
     {2, arcs_35_2},
 };
 static arc arcs_36_0[1] = {
-    {87, 1},
+    {88, 1},
 };
 static arc arcs_36_1[1] = {
-    {24, 2},
+    {23, 2},
 };
 static arc arcs_36_2[2] = {
-    {30, 3},
+    {32, 1},
     {0, 2},
 };
-static arc arcs_36_3[1] = {
-    {24, 4},
-};
-static arc arcs_36_4[1] = {
-    {0, 4},
-};
-static state states_36[5] = {
+static state states_36[3] = {
     {1, arcs_36_0},
     {1, arcs_36_1},
     {2, arcs_36_2},
-    {1, arcs_36_3},
-    {1, arcs_36_4},
-};
-static arc arcs_37_0[8] = {
-    {88, 1},
+};
+static arc arcs_37_0[1] = {
     {89, 1},
+};
+static arc arcs_37_1[1] = {
+    {26, 2},
+};
+static arc arcs_37_2[2] = {
+    {32, 3},
+    {0, 2},
+};
+static arc arcs_37_3[1] = {
+    {26, 4},
+};
+static arc arcs_37_4[1] = {
+    {0, 4},
+};
+static state states_37[5] = {
+    {1, arcs_37_0},
+    {1, arcs_37_1},
+    {2, arcs_37_2},
+    {1, arcs_37_3},
+    {1, arcs_37_4},
+};
+static arc arcs_38_0[9] = {
     {90, 1},
     {91, 1},
     {92, 1},
+    {93, 1},
+    {94, 1},
     {19, 1},
     {18, 1},
     {17, 1},
-};
-static arc arcs_37_1[1] = {
+    {95, 1},
+};
+static arc arcs_38_1[1] = {
     {0, 1},
 };
-static state states_37[2] = {
-    {8, arcs_37_0},
-    {1, arcs_37_1},
-};
-static arc arcs_38_0[1] = {
-    {93, 1},
-};
-static arc arcs_38_1[1] = {
-    {24, 2},
-};
-static arc arcs_38_2[1] = {
-    {25, 3},
-};
-static arc arcs_38_3[1] = {
-    {26, 4},
-};
-static arc arcs_38_4[3] = {
-    {94, 1},
-    {95, 5},
+static state states_38[2] = {
+    {9, arcs_38_0},
+    {1, arcs_38_1},
+};
+static arc arcs_39_0[1] = {
+    {21, 1},
+};
+static arc arcs_39_1[3] = {
+    {19, 2},
+    {94, 2},
+    {92, 2},
+};
+static arc arcs_39_2[1] = {
+    {0, 2},
+};
+static state states_39[3] = {
+    {1, arcs_39_0},
+    {3, arcs_39_1},
+    {1, arcs_39_2},
+};
+static arc arcs_40_0[1] = {
+    {96, 1},
+};
+static arc arcs_40_1[1] = {
+    {26, 2},
+};
+static arc arcs_40_2[1] = {
+    {27, 3},
+};
+static arc arcs_40_3[1] = {
+    {28, 4},
+};
+static arc arcs_40_4[3] = {
+    {97, 1},
+    {98, 5},
     {0, 4},
 };
-static arc arcs_38_5[1] = {
-    {25, 6},
-};
-static arc arcs_38_6[1] = {
-    {26, 7},
-};
-static arc arcs_38_7[1] = {
+static arc arcs_40_5[1] = {
+    {27, 6},
+};
+static arc arcs_40_6[1] = {
+    {28, 7},
+};
+static arc arcs_40_7[1] = {
     {0, 7},
 };
-static state states_38[8] = {
-    {1, arcs_38_0},
-    {1, arcs_38_1},
-    {1, arcs_38_2},
-    {1, arcs_38_3},
-    {3, arcs_38_4},
-    {1, arcs_38_5},
-    {1, arcs_38_6},
-    {1, arcs_38_7},
-};
-static arc arcs_39_0[1] = {
-    {96, 1},
-};
-static arc arcs_39_1[1] = {
-    {24, 2},
-};
-static arc arcs_39_2[1] = {
-    {25, 3},
-};
-static arc arcs_39_3[1] = {
-    {26, 4},
-};
-static arc arcs_39_4[2] = {
-    {95, 5},
-    {0, 4},
-};
-static arc arcs_39_5[1] = {
-    {25, 6},
-};
-static arc arcs_39_6[1] = {
-    {26, 7},
-};
-static arc arcs_39_7[1] = {
-    {0, 7},
-};
-static state states_39[8] = {
-    {1, arcs_39_0},
-    {1, arcs_39_1},
-    {1, arcs_39_2},
-    {1, arcs_39_3},
-    {2, arcs_39_4},
-    {1, arcs_39_5},
-    {1, arcs_39_6},
-    {1, arcs_39_7},
-};
-static arc arcs_40_0[1] = {
-    {97, 1},
-};
-static arc arcs_40_1[1] = {
-    {63, 2},
-};
-static arc arcs_40_2[1] = {
-    {98, 3},
-};
-static arc arcs_40_3[1] = {
-    {9, 4},
-};
-static arc arcs_40_4[1] = {
-    {25, 5},
-};
-static arc arcs_40_5[1] = {
-    {26, 6},
-};
-static arc arcs_40_6[2] = {
-    {95, 7},
-    {0, 6},
-};
-static arc arcs_40_7[1] = {
-    {25, 8},
-};
-static arc arcs_40_8[1] = {
-    {26, 9},
-};
-static arc arcs_40_9[1] = {
-    {0, 9},
-};
-static state states_40[10] = {
+static state states_40[8] = {
     {1, arcs_40_0},
     {1, arcs_40_1},
     {1, arcs_40_2},
     {1, arcs_40_3},
-    {1, arcs_40_4},
+    {3, arcs_40_4},
     {1, arcs_40_5},
-    {2, arcs_40_6},
+    {1, arcs_40_6},
     {1, arcs_40_7},
-    {1, arcs_40_8},
-    {1, arcs_40_9},
 };
 static arc arcs_41_0[1] = {
     {99, 1},
 };
 static arc arcs_41_1[1] = {
-    {25, 2},
+    {26, 2},
 };
 static arc arcs_41_2[1] = {
-    {26, 3},
-};
-static arc arcs_41_3[2] = {
-    {100, 4},
-    {101, 5},
-};
-static arc arcs_41_4[1] = {
-    {25, 6},
+    {27, 3},
+};
+static arc arcs_41_3[1] = {
+    {28, 4},
+};
+static arc arcs_41_4[2] = {
+    {98, 5},
+    {0, 4},
 };
 static arc arcs_41_5[1] = {
-    {25, 7},
+    {27, 6},
 };
 static arc arcs_41_6[1] = {
-    {26, 8},
+    {28, 7},
 };
 static arc arcs_41_7[1] = {
-    {26, 9},
-};
-static arc arcs_41_8[4] = {
-    {100, 4},
-    {95, 10},
-    {101, 5},
-    {0, 8},
-};
-static arc arcs_41_9[1] = {
-    {0, 9},
-};
-static arc arcs_41_10[1] = {
-    {25, 11},
-};
-static arc arcs_41_11[1] = {
-    {26, 12},
-};
-static arc arcs_41_12[2] = {
-    {101, 5},
-    {0, 12},
-};
-static state states_41[13] = {
+    {0, 7},
+};
+static state states_41[8] = {
     {1, arcs_41_0},
     {1, arcs_41_1},
     {1, arcs_41_2},
-    {2, arcs_41_3},
-    {1, arcs_41_4},
+    {1, arcs_41_3},
+    {2, arcs_41_4},
     {1, arcs_41_5},
     {1, arcs_41_6},
     {1, arcs_41_7},
-    {4, arcs_41_8},
-    {1, arcs_41_9},
-    {1, arcs_41_10},
-    {1, arcs_41_11},
-    {2, arcs_41_12},
 };
 static arc arcs_42_0[1] = {
-    {102, 1},
+    {100, 1},
 };
 static arc arcs_42_1[1] = {
-    {103, 2},
-};
-static arc arcs_42_2[2] = {
-    {30, 1},
-    {25, 3},
+    {65, 2},
+};
+static arc arcs_42_2[1] = {
+    {101, 3},
 };
 static arc arcs_42_3[1] = {
-    {26, 4},
+    {9, 4},
 };
 static arc arcs_42_4[1] = {
-    {0, 4},
-};
-static state states_42[5] = {
+    {27, 5},
+};
+static arc arcs_42_5[1] = {
+    {28, 6},
+};
+static arc arcs_42_6[2] = {
+    {98, 7},
+    {0, 6},
+};
+static arc arcs_42_7[1] = {
+    {27, 8},
+};
+static arc arcs_42_8[1] = {
+    {28, 9},
+};
+static arc arcs_42_9[1] = {
+    {0, 9},
+};
+static state states_42[10] = {
     {1, arcs_42_0},
     {1, arcs_42_1},
-    {2, arcs_42_2},
+    {1, arcs_42_2},
     {1, arcs_42_3},
     {1, arcs_42_4},
+    {1, arcs_42_5},
+    {2, arcs_42_6},
+    {1, arcs_42_7},
+    {1, arcs_42_8},
+    {1, arcs_42_9},
 };
 static arc arcs_43_0[1] = {
-    {24, 1},
-};
-static arc arcs_43_1[2] = {
-    {83, 2},
-    {0, 1},
+    {102, 1},
+};
+static arc arcs_43_1[1] = {
+    {27, 2},
 };
 static arc arcs_43_2[1] = {
-    {104, 3},
-};
-static arc arcs_43_3[1] = {
-    {0, 3},
-};
-static state states_43[4] = {
+    {28, 3},
+};
+static arc arcs_43_3[2] = {
+    {103, 4},
+    {104, 5},
+};
+static arc arcs_43_4[1] = {
+    {27, 6},
+};
+static arc arcs_43_5[1] = {
+    {27, 7},
+};
+static arc arcs_43_6[1] = {
+    {28, 8},
+};
+static arc arcs_43_7[1] = {
+    {28, 9},
+};
+static arc arcs_43_8[4] = {
+    {103, 4},
+    {98, 10},
+    {104, 5},
+    {0, 8},
+};
+static arc arcs_43_9[1] = {
+    {0, 9},
+};
+static arc arcs_43_10[1] = {
+    {27, 11},
+};
+static arc arcs_43_11[1] = {
+    {28, 12},
+};
+static arc arcs_43_12[2] = {
+    {104, 5},
+    {0, 12},
+};
+static state states_43[13] = {
     {1, arcs_43_0},
-    {2, arcs_43_1},
+    {1, arcs_43_1},
     {1, arcs_43_2},
-    {1, arcs_43_3},
+    {2, arcs_43_3},
+    {1, arcs_43_4},
+    {1, arcs_43_5},
+    {1, arcs_43_6},
+    {1, arcs_43_7},
+    {4, arcs_43_8},
+    {1, arcs_43_9},
+    {1, arcs_43_10},
+    {1, arcs_43_11},
+    {2, arcs_43_12},
 };
 static arc arcs_44_0[1] = {
     {105, 1},
 };
-static arc arcs_44_1[2] = {
-    {24, 2},
-    {0, 1},
+static arc arcs_44_1[1] = {
+    {106, 2},
 };
 static arc arcs_44_2[2] = {
-    {83, 3},
-    {0, 2},
+    {32, 1},
+    {27, 3},
 };
 static arc arcs_44_3[1] = {
-    {21, 4},
+    {28, 4},
 };
 static arc arcs_44_4[1] = {
     {0, 4},
 };
 static state states_44[5] = {
     {1, arcs_44_0},
-    {2, arcs_44_1},
+    {1, arcs_44_1},
     {2, arcs_44_2},
     {1, arcs_44_3},
     {1, arcs_44_4},
 };
-static arc arcs_45_0[2] = {
+static arc arcs_45_0[1] = {
+    {26, 1},
+};
+static arc arcs_45_1[2] = {
+    {85, 2},
+    {0, 1},
+};
+static arc arcs_45_2[1] = {
+    {107, 3},
+};
+static arc arcs_45_3[1] = {
+    {0, 3},
+};
+static state states_45[4] = {
+    {1, arcs_45_0},
+    {2, arcs_45_1},
+    {1, arcs_45_2},
+    {1, arcs_45_3},
+};
+static arc arcs_46_0[1] = {
+    {108, 1},
+};
+static arc arcs_46_1[2] = {
+    {26, 2},
+    {0, 1},
+};
+static arc arcs_46_2[2] = {
+    {85, 3},
+    {0, 2},
+};
+static arc arcs_46_3[1] = {
+    {23, 4},
+};
+static arc arcs_46_4[1] = {
+    {0, 4},
+};
+static state states_46[5] = {
+    {1, arcs_46_0},
+    {2, arcs_46_1},
+    {2, arcs_46_2},
+    {1, arcs_46_3},
+    {1, arcs_46_4},
+};
+static arc arcs_47_0[2] = {
     {3, 1},
     {2, 2},
 };
-static arc arcs_45_1[1] = {
-    {0, 1},
-};
-static arc arcs_45_2[1] = {
-    {106, 3},
-};
-static arc arcs_45_3[1] = {
-    {6, 4},
-};
-static arc arcs_45_4[2] = {
-    {6, 4},
-    {107, 1},
-};
-static state states_45[5] = {
-    {2, arcs_45_0},
-    {1, arcs_45_1},
-    {1, arcs_45_2},
-    {1, arcs_45_3},
-    {2, arcs_45_4},
-};
-static arc arcs_46_0[2] = {
-    {108, 1},
-    {109, 2},
-};
-static arc arcs_46_1[2] = {
-    {93, 3},
-    {0, 1},
-};
-static arc arcs_46_2[1] = {
-    {0, 2},
-};
-static arc arcs_46_3[1] = {
-    {108, 4},
-};
-static arc arcs_46_4[1] = {
-    {95, 5},
-};
-static arc arcs_46_5[1] = {
-    {24, 2},
-};
-static state states_46[6] = {
-    {2, arcs_46_0},
-    {2, arcs_46_1},
-    {1, arcs_46_2},
-    {1, arcs_46_3},
-    {1, arcs_46_4},
-    {1, arcs_46_5},
-};
-static arc arcs_47_0[2] = {
-    {108, 1},
-    {111, 1},
-};
 static arc arcs_47_1[1] = {
     {0, 1},
 };
-static state states_47[2] = {
+static arc arcs_47_2[1] = {
+    {109, 3},
+};
+static arc arcs_47_3[1] = {
+    {6, 4},
+};
+static arc arcs_47_4[2] = {
+    {6, 4},
+    {110, 1},
+};
+static state states_47[5] = {
     {2, arcs_47_0},
     {1, arcs_47_1},
-};
-static arc arcs_48_0[1] = {
-    {112, 1},
+    {1, arcs_47_2},
+    {1, arcs_47_3},
+    {2, arcs_47_4},
+};
+static arc arcs_48_0[2] = {
+    {111, 1},
+    {112, 2},
 };
 static arc arcs_48_1[2] = {
-    {33, 2},
-    {25, 3},
+    {96, 3},
+    {0, 1},
 };
 static arc arcs_48_2[1] = {
-    {25, 3},
+    {0, 2},
 };
 static arc arcs_48_3[1] = {
-    {24, 4},
+    {111, 4},
 };
 static arc arcs_48_4[1] = {
-    {0, 4},
-};
-static state states_48[5] = {
-    {1, arcs_48_0},
+    {98, 5},
+};
+static arc arcs_48_5[1] = {
+    {26, 2},
+};
+static state states_48[6] = {
+    {2, arcs_48_0},
     {2, arcs_48_1},
     {1, arcs_48_2},
     {1, arcs_48_3},
     {1, arcs_48_4},
-};
-static arc arcs_49_0[1] = {
-    {112, 1},
-};
-static arc arcs_49_1[2] = {
-    {33, 2},
-    {25, 3},
-};
-static arc arcs_49_2[1] = {
-    {25, 3},
-};
-static arc arcs_49_3[1] = {
-    {110, 4},
-};
-static arc arcs_49_4[1] = {
+    {1, arcs_48_5},
+};
+static arc arcs_49_0[2] = {
+    {111, 1},
+    {114, 1},
+};
+static arc arcs_49_1[1] = {
+    {0, 1},
+};
+static state states_49[2] = {
+    {2, arcs_49_0},
+    {1, arcs_49_1},
+};
+static arc arcs_50_0[1] = {
+    {115, 1},
+};
+static arc arcs_50_1[2] = {
+    {35, 2},
+    {27, 3},
+};
+static arc arcs_50_2[1] = {
+    {27, 3},
+};
+static arc arcs_50_3[1] = {
+    {26, 4},
+};
+static arc arcs_50_4[1] = {
     {0, 4},
 };
-static state states_49[5] = {
-    {1, arcs_49_0},
-    {2, arcs_49_1},
-    {1, arcs_49_2},
-    {1, arcs_49_3},
-    {1, arcs_49_4},
-};
-static arc arcs_50_0[1] = {
-    {113, 1},
-};
-static arc arcs_50_1[2] = {
-    {114, 0},
-    {0, 1},
-};
-static state states_50[2] = {
+static state states_50[5] = {
     {1, arcs_50_0},
     {2, arcs_50_1},
+    {1, arcs_50_2},
+    {1, arcs_50_3},
+    {1, arcs_50_4},
 };
 static arc arcs_51_0[1] = {
     {115, 1},
 };
 static arc arcs_51_1[2] = {
-    {116, 0},
-    {0, 1},
-};
-static state states_51[2] = {
+    {35, 2},
+    {27, 3},
+};
+static arc arcs_51_2[1] = {
+    {27, 3},
+};
+static arc arcs_51_3[1] = {
+    {113, 4},
+};
+static arc arcs_51_4[1] = {
+    {0, 4},
+};
+static state states_51[5] = {
     {1, arcs_51_0},
     {2, arcs_51_1},
-};
-static arc arcs_52_0[2] = {
-    {117, 1},
-    {118, 2},
-};
-static arc arcs_52_1[1] = {
-    {115, 2},
-};
-static arc arcs_52_2[1] = {
-    {0, 2},
-};
-static state states_52[3] = {
-    {2, arcs_52_0},
-    {1, arcs_52_1},
-    {1, arcs_52_2},
+    {1, arcs_51_2},
+    {1, arcs_51_3},
+    {1, arcs_51_4},
+};
+static arc arcs_52_0[1] = {
+    {116, 1},
+};
+static arc arcs_52_1[2] = {
+    {117, 0},
+    {0, 1},
+};
+static state states_52[2] = {
+    {1, arcs_52_0},
+    {2, arcs_52_1},
 };
 static arc arcs_53_0[1] = {
-    {104, 1},
+    {118, 1},
 };
 static arc arcs_53_1[2] = {
     {119, 0},
@@ -1213,75 +1219,79 @@
     {1, arcs_53_0},
     {2, arcs_53_1},
 };
-static arc arcs_54_0[10] = {
+static arc arcs_54_0[2] = {
     {120, 1},
-    {121, 1},
-    {122, 1},
+    {121, 2},
+};
+static arc arcs_54_1[1] = {
+    {118, 2},
+};
+static arc arcs_54_2[1] = {
+    {0, 2},
+};
+static state states_54[3] = {
+    {2, arcs_54_0},
+    {1, arcs_54_1},
+    {1, arcs_54_2},
+};
+static arc arcs_55_0[1] = {
+    {107, 1},
+};
+static arc arcs_55_1[2] = {
+    {122, 0},
+    {0, 1},
+};
+static state states_55[2] = {
+    {1, arcs_55_0},
+    {2, arcs_55_1},
+};
+static arc arcs_56_0[10] = {
     {123, 1},
     {124, 1},
     {125, 1},
     {126, 1},
-    {98, 1},
-    {117, 2},
-    {127, 3},
-};
-static arc arcs_54_1[1] = {
+    {127, 1},
+    {128, 1},
+    {129, 1},
+    {101, 1},
+    {120, 2},
+    {130, 3},
+};
+static arc arcs_56_1[1] = {
     {0, 1},
 };
-static arc arcs_54_2[1] = {
-    {98, 1},
-};
-static arc arcs_54_3[2] = {
-    {117, 1},
+static arc arcs_56_2[1] = {
+    {101, 1},
+};
+static arc arcs_56_3[2] = {
+    {120, 1},
     {0, 3},
 };
-static state states_54[4] = {
-    {10, arcs_54_0},
-    {1, arcs_54_1},
-    {1, arcs_54_2},
-    {2, arcs_54_3},
-};
-static arc arcs_55_0[1] = {
-    {31, 1},
-};
-static arc arcs_55_1[1] = {
-    {104, 2},
-};
-static arc arcs_55_2[1] = {
+static state states_56[4] = {
+    {10, arcs_56_0},
+    {1, arcs_56_1},
+    {1, arcs_56_2},
+    {2, arcs_56_3},
+};
+static arc arcs_57_0[1] = {
+    {33, 1},
+};
+static arc arcs_57_1[1] = {
+    {107, 2},
+};
+static arc arcs_57_2[1] = {
     {0, 2},
 };
-static state states_55[3] = {
-    {1, arcs_55_0},
-    {1, arcs_55_1},
-    {1, arcs_55_2},
-};
-static arc arcs_56_0[1] = {
-    {128, 1},
-};
-static arc arcs_56_1[2] = {
-    {129, 0},
-    {0, 1},
-};
-static state states_56[2] = {
-    {1, arcs_56_0},
-    {2, arcs_56_1},
-};
-static arc arcs_57_0[1] = {
-    {130, 1},
-};
-static arc arcs_57_1[2] = {
-    {131, 0},
-    {0, 1},
-};
-static state states_57[2] = {
+static state states_57[3] = {
     {1, arcs_57_0},
-    {2, arcs_57_1},
+    {1, arcs_57_1},
+    {1, arcs_57_2},
 };
 static arc arcs_58_0[1] = {
-    {132, 1},
+    {131, 1},
 };
 static arc arcs_58_1[2] = {
-    {133, 0},
+    {132, 0},
     {0, 1},
 };
 static state states_58[2] = {
@@ -1289,404 +1299,316 @@
     {2, arcs_58_1},
 };
 static arc arcs_59_0[1] = {
-    {134, 1},
-};
-static arc arcs_59_1[3] = {
-    {135, 0},
+    {133, 1},
+};
+static arc arcs_59_1[2] = {
+    {134, 0},
+    {0, 1},
+};
+static state states_59[2] = {
+    {1, arcs_59_0},
+    {2, arcs_59_1},
+};
+static arc arcs_60_0[1] = {
+    {135, 1},
+};
+static arc arcs_60_1[2] = {
     {136, 0},
     {0, 1},
 };
-static state states_59[2] = {
-    {1, arcs_59_0},
-    {3, arcs_59_1},
-};
-static arc arcs_60_0[1] = {
+static state states_60[2] = {
+    {1, arcs_60_0},
+    {2, arcs_60_1},
+};
+static arc arcs_61_0[1] = {
     {137, 1},
 };
-static arc arcs_60_1[3] = {
+static arc arcs_61_1[3] = {
     {138, 0},
     {139, 0},
     {0, 1},
 };
-static state states_60[2] = {
-    {1, arcs_60_0},
-    {3, arcs_60_1},
-};
-static arc arcs_61_0[1] = {
+static state states_61[2] = {
+    {1, arcs_61_0},
+    {3, arcs_61_1},
+};
+static arc arcs_62_0[1] = {
     {140, 1},
 };
-static arc arcs_61_1[6] = {
-    {31, 0},
-    {11, 0},
+static arc arcs_62_1[3] = {
     {141, 0},
     {142, 0},
-    {143, 0},
     {0, 1},
 };
-static state states_61[2] = {
-    {1, arcs_61_0},
-    {6, arcs_61_1},
-};
-static arc arcs_62_0[4] = {
-    {138, 1},
-    {139, 1},
-    {144, 1},
-    {145, 2},
-};
-static arc arcs_62_1[1] = {
-    {140, 2},
-};
-static arc arcs_62_2[1] = {
+static state states_62[2] = {
+    {1, arcs_62_0},
+    {3, arcs_62_1},
+};
+static arc arcs_63_0[1] = {
+    {143, 1},
+};
+static arc arcs_63_1[6] = {
+    {33, 0},
+    {11, 0},
+    {144, 0},
+    {145, 0},
+    {146, 0},
+    {0, 1},
+};
+static state states_63[2] = {
+    {1, arcs_63_0},
+    {6, arcs_63_1},
+};
+static arc arcs_64_0[4] = {
+    {141, 1},
+    {142, 1},
+    {147, 1},
+    {148, 2},
+};
+static arc arcs_64_1[1] = {
+    {143, 2},
+};
+static arc arcs_64_2[1] = {
     {0, 2},
 };
-static state states_62[3] = {
-    {4, arcs_62_0},
-    {1, arcs_62_1},
-    {1, arcs_62_2},
-};
-static arc arcs_63_0[1] = {
-    {146, 1},
-};
-static arc arcs_63_1[3] = {
-    {147, 1},
+static state states_64[3] = {
+    {4, arcs_64_0},
+    {1, arcs_64_1},
+    {1, arcs_64_2},
+};
+static arc arcs_65_0[1] = {
+    {149, 1},
+};
+static arc arcs_65_1[2] = {
+    {34, 2},
+    {0, 1},
+};
+static arc arcs_65_2[1] = {
+    {143, 3},
+};
+static arc arcs_65_3[1] = {
+    {0, 3},
+};
+static state states_65[4] = {
+    {1, arcs_65_0},
+    {2, arcs_65_1},
+    {1, arcs_65_2},
+    {1, arcs_65_3},
+};
+static arc arcs_66_0[2] = {
+    {150, 1},
+    {151, 2},
+};
+static arc arcs_66_1[1] = {
+    {151, 2},
+};
+static arc arcs_66_2[2] = {
+    {152, 2},
+    {0, 2},
+};
+static state states_66[3] = {
+    {2, arcs_66_0},
+    {1, arcs_66_1},
+    {2, arcs_66_2},
+};
+static arc arcs_67_0[10] = {
+    {13, 1},
+    {154, 2},
+    {156, 3},
+    {23, 4},
+    {159, 4},
+    {160, 5},
+    {82, 4},
+    {161, 4},
+    {162, 4},
+    {163, 4},
+};
+static arc arcs_67_1[3] = {
+    {49, 6},
+    {153, 6},
+    {15, 4},
+};
+static arc arcs_67_2[2] = {
+    {153, 7},
+    {155, 4},
+};
+static arc arcs_67_3[2] = {
+    {157, 8},
+    {158, 4},
+};
+static arc arcs_67_4[1] = {
+    {0, 4},
+};
+static arc arcs_67_5[2] = {
+    {160, 5},
+    {0, 5},
+};
+static arc arcs_67_6[1] = {
+    {15, 4},
+};
+static arc arcs_67_7[1] = {
+    {155, 4},
+};
+static arc arcs_67_8[1] = {
+    {158, 4},
+};
+static state states_67[9] = {
+    {10, arcs_67_0},
+    {3, arcs_67_1},
+    {2, arcs_67_2},
+    {2, arcs_67_3},
+    {1, arcs_67_4},
+    {2, arcs_67_5},
+    {1, arcs_67_6},
+    {1, arcs_67_7},
+    {1, arcs_67_8},
+};
+static arc arcs_68_0[2] = {
+    {26, 1},
+    {50, 1},
+};
+static arc arcs_68_1[3] = {
+    {164, 2},
+    {32, 3},
+    {0, 1},
+};
+static arc arcs_68_2[1] = {
+    {0, 2},
+};
+static arc arcs_68_3[3] = {
+    {26, 4},
+    {50, 4},
+    {0, 3},
+};
+static arc arcs_68_4[2] = {
+    {32, 3},
+    {0, 4},
+};
+static state states_68[5] = {
+    {2, arcs_68_0},
+    {3, arcs_68_1},
+    {1, arcs_68_2},
+    {3, arcs_68_3},
+    {2, arcs_68_4},
+};
+static arc arcs_69_0[3] = {
+    {13, 1},
+    {154, 2},
+    {81, 3},
+};
+static arc arcs_69_1[2] = {
+    {14, 4},
+    {15, 5},
+};
+static arc arcs_69_2[1] = {
+    {165, 6},
+};
+static arc arcs_69_3[1] = {
+    {23, 5},
+};
+static arc arcs_69_4[1] = {
+    {15, 5},
+};
+static arc arcs_69_5[1] = {
+    {0, 5},
+};
+static arc arcs_69_6[1] = {
+    {155, 5},
+};
+static state states_69[7] = {
+    {3, arcs_69_0},
+    {2, arcs_69_1},
+    {1, arcs_69_2},
+    {1, arcs_69_3},
+    {1, arcs_69_4},
+    {1, arcs_69_5},
+    {1, arcs_69_6},
+};
+static arc arcs_70_0[1] = {
+    {166, 1},
+};
+static arc arcs_70_1[2] = {
     {32, 2},
     {0, 1},
 };
-static arc arcs_63_2[1] = {
-    {140, 3},
-};
-static arc arcs_63_3[1] = {
+static arc arcs_70_2[2] = {
+    {166, 1},
+    {0, 2},
+};
+static state states_70[3] = {
+    {1, arcs_70_0},
+    {2, arcs_70_1},
+    {2, arcs_70_2},
+};
+static arc arcs_71_0[2] = {
+    {26, 1},
+    {27, 2},
+};
+static arc arcs_71_1[2] = {
+    {27, 2},
+    {0, 1},
+};
+static arc arcs_71_2[3] = {
+    {26, 3},
+    {167, 4},
+    {0, 2},
+};
+static arc arcs_71_3[2] = {
+    {167, 4},
     {0, 3},
 };
-static state states_63[4] = {
-    {1, arcs_63_0},
-    {3, arcs_63_1},
-    {1, arcs_63_2},
-    {1, arcs_63_3},
-};
-static arc arcs_64_0[10] = {
-    {13, 1},
-    {149, 2},
-    {151, 3},
-    {21, 4},
-    {154, 4},
-    {155, 5},
-    {80, 4},
-    {156, 4},
-    {157, 4},
-    {158, 4},
-};
-static arc arcs_64_1[3] = {
-    {47, 6},
-    {148, 6},
-    {15, 4},
-};
-static arc arcs_64_2[2] = {
-    {148, 7},
-    {150, 4},
-};
-static arc arcs_64_3[2] = {
-    {152, 8},
-    {153, 4},
-};
-static arc arcs_64_4[1] = {
+static arc arcs_71_4[1] = {
     {0, 4},
 };
-static arc arcs_64_5[2] = {
-    {155, 5},
-    {0, 5},
-};
-static arc arcs_64_6[1] = {
-    {15, 4},
-};
-static arc arcs_64_7[1] = {
-    {150, 4},
-};
-static arc arcs_64_8[1] = {
-    {153, 4},
-};
-static state states_64[9] = {
-    {10, arcs_64_0},
-    {3, arcs_64_1},
-    {2, arcs_64_2},
-    {2, arcs_64_3},
-    {1, arcs_64_4},
-    {2, arcs_64_5},
-    {1, arcs_64_6},
-    {1, arcs_64_7},
-    {1, arcs_64_8},
-};
-static arc arcs_65_0[2] = {
-    {24, 1},
-    {48, 1},
-};
-static arc arcs_65_1[3] = {
-    {159, 2},
-    {30, 3},
+static state states_71[5] = {
+    {2, arcs_71_0},
+    {2, arcs_71_1},
+    {3, arcs_71_2},
+    {2, arcs_71_3},
+    {1, arcs_71_4},
+};
+static arc arcs_72_0[1] = {
+    {27, 1},
+};
+static arc arcs_72_1[2] = {
+    {26, 2},
     {0, 1},
 };
-static arc arcs_65_2[1] = {
+static arc arcs_72_2[1] = {
     {0, 2},
 };
-static arc arcs_65_3[3] = {
-    {24, 4},
-    {48, 4},
-    {0, 3},
-};
-static arc arcs_65_4[2] = {
-    {30, 3},
-    {0, 4},
-};
-static state states_65[5] = {
-    {2, arcs_65_0},
-    {3, arcs_65_1},
-    {1, arcs_65_2},
-    {3, arcs_65_3},
-    {2, arcs_65_4},
-};
-static arc arcs_66_0[3] = {
-    {13, 1},
-    {149, 2},
-    {79, 3},
-};
-static arc arcs_66_1[2] = {
-    {14, 4},
-    {15, 5},
-};
-static arc arcs_66_2[1] = {
-    {160, 6},
-};
-static arc arcs_66_3[1] = {
-    {21, 5},
-};
-static arc arcs_66_4[1] = {
-    {15, 5},
-};
-static arc arcs_66_5[1] = {
-    {0, 5},
-};
-static arc arcs_66_6[1] = {
-    {150, 5},
-};
-static state states_66[7] = {
-    {3, arcs_66_0},
-    {2, arcs_66_1},
-    {1, arcs_66_2},
-    {1, arcs_66_3},
-    {1, arcs_66_4},
-    {1, arcs_66_5},
-    {1, arcs_66_6},
-};
-static arc arcs_67_0[1] = {
-    {161, 1},
-};
-static arc arcs_67_1[2] = {
-    {30, 2},
+static state states_72[3] = {
+    {1, arcs_72_0},
+    {2, arcs_72_1},
+    {1, arcs_72_2},
+};
+static arc arcs_73_0[2] = {
+    {107, 1},
+    {50, 1},
+};
+static arc arcs_73_1[2] = {
+    {32, 2},
     {0, 1},
 };
-static arc arcs_67_2[2] = {
-    {161, 1},
+static arc arcs_73_2[3] = {
+    {107, 1},
+    {50, 1},
     {0, 2},
 };
-static state states_67[3] = {
-    {1, arcs_67_0},
-    {2, arcs_67_1},
-    {2, arcs_67_2},
-};
-static arc arcs_68_0[2] = {
-    {24, 1},
-    {25, 2},
-};
-static arc arcs_68_1[2] = {
-    {25, 2},
+static state states_73[3] = {
+    {2, arcs_73_0},
+    {2, arcs_73_1},
+    {3, arcs_73_2},
+};
+static arc arcs_74_0[1] = {
+    {26, 1},
+};
+static arc arcs_74_1[2] = {
+    {32, 2},
     {0, 1},
 };
-static arc arcs_68_2[3] = {
-    {24, 3},
-    {162, 4},
-    {0, 2},
-};
-static arc arcs_68_3[2] = {
-    {162, 4},
-    {0, 3},
-};
-static arc arcs_68_4[1] = {
-    {0, 4},
-};
-static state states_68[5] = {
-    {2, arcs_68_0},
-    {2, arcs_68_1},
-    {3, arcs_68_2},
-    {2, arcs_68_3},
-    {1, arcs_68_4},
-};
-static arc arcs_69_0[1] = {
-    {25, 1},
-};
-static arc arcs_69_1[2] = {
-    {24, 2},
-    {0, 1},
-};
-static arc arcs_69_2[1] = {
-    {0, 2},
-};
-static state states_69[3] = {
-    {1, arcs_69_0},
-    {2, arcs_69_1},
-    {1, arcs_69_2},
-};
-static arc arcs_70_0[2] = {
-    {104, 1},
-    {48, 1},
-};
-static arc arcs_70_1[2] = {
-    {30, 2},
-    {0, 1},
-};
-static arc arcs_70_2[3] = {
-    {104, 1},
-    {48, 1},
-    {0, 2},
-};
-static state states_70[3] = {
-    {2, arcs_70_0},
-    {2, arcs_70_1},
-    {3, arcs_70_2},
-};
-static arc arcs_71_0[1] = {
-    {24, 1},
-};
-static arc arcs_71_1[2] = {
-    {30, 2},
-    {0, 1},
-};
-static arc arcs_71_2[2] = {
-    {24, 1},
-    {0, 2},
-};
-static state states_71[3] = {
-    {1, arcs_71_0},
-    {2, arcs_71_1},
-    {2, arcs_71_2},
-};
-static arc arcs_72_0[3] = {
-    {24, 1},
-    {32, 2},
-    {48, 3},
-};
-static arc arcs_72_1[4] = {
-    {25, 4},
-    {159, 5},
-    {30, 6},
-    {0, 1},
-};
-static arc arcs_72_2[1] = {
-    {104, 7},
-};
-static arc arcs_72_3[3] = {
-    {159, 5},
-    {30, 6},
-    {0, 3},
-};
-static arc arcs_72_4[1] = {
-    {24, 7},
-};
-static arc arcs_72_5[1] = {
-    {0, 5},
-};
-static arc arcs_72_6[3] = {
-    {24, 8},
-    {48, 8},
-    {0, 6},
-};
-static arc arcs_72_7[3] = {
-    {159, 5},
-    {30, 9},
-    {0, 7},
-};
-static arc arcs_72_8[2] = {
-    {30, 6},
-    {0, 8},
-};
-static arc arcs_72_9[3] = {
-    {24, 10},
-    {32, 11},
-    {0, 9},
-};
-static arc arcs_72_10[1] = {
-    {25, 12},
-};
-static arc arcs_72_11[1] = {
-    {104, 13},
-};
-static arc arcs_72_12[1] = {
-    {24, 13},
-};
-static arc arcs_72_13[2] = {
-    {30, 9},
-    {0, 13},
-};
-static state states_72[14] = {
-    {3, arcs_72_0},
-    {4, arcs_72_1},
-    {1, arcs_72_2},
-    {3, arcs_72_3},
-    {1, arcs_72_4},
-    {1, arcs_72_5},
-    {3, arcs_72_6},
-    {3, arcs_72_7},
-    {2, arcs_72_8},
-    {3, arcs_72_9},
-    {1, arcs_72_10},
-    {1, arcs_72_11},
-    {1, arcs_72_12},
-    {2, arcs_72_13},
-};
-static arc arcs_73_0[1] = {
-    {163, 1},
-};
-static arc arcs_73_1[1] = {
-    {21, 2},
-};
-static arc arcs_73_2[2] = {
-    {13, 3},
-    {25, 4},
-};
-static arc arcs_73_3[2] = {
-    {14, 5},
-    {15, 6},
-};
-static arc arcs_73_4[1] = {
-    {26, 7},
-};
-static arc arcs_73_5[1] = {
-    {15, 6},
-};
-static arc arcs_73_6[1] = {
-    {25, 4},
-};
-static arc arcs_73_7[1] = {
-    {0, 7},
-};
-static state states_73[8] = {
-    {1, arcs_73_0},
-    {1, arcs_73_1},
-    {2, arcs_73_2},
-    {2, arcs_73_3},
-    {1, arcs_73_4},
-    {1, arcs_73_5},
-    {1, arcs_73_6},
-    {1, arcs_73_7},
-};
-static arc arcs_74_0[1] = {
-    {164, 1},
-};
-static arc arcs_74_1[2] = {
-    {30, 2},
-    {0, 1},
-};
 static arc arcs_74_2[2] = {
-    {164, 1},
+    {26, 1},
     {0, 2},
 };
 static state states_74[3] = {
@@ -1695,344 +1617,477 @@
     {2, arcs_74_2},
 };
 static arc arcs_75_0[3] = {
-    {24, 1},
+    {26, 1},
+    {34, 2},
+    {50, 3},
+};
+static arc arcs_75_1[4] = {
+    {27, 4},
+    {164, 5},
+    {32, 6},
+    {0, 1},
+};
+static arc arcs_75_2[1] = {
+    {107, 7},
+};
+static arc arcs_75_3[3] = {
+    {164, 5},
+    {32, 6},
+    {0, 3},
+};
+static arc arcs_75_4[1] = {
+    {26, 7},
+};
+static arc arcs_75_5[1] = {
+    {0, 5},
+};
+static arc arcs_75_6[3] = {
+    {26, 8},
+    {50, 8},
+    {0, 6},
+};
+static arc arcs_75_7[3] = {
+    {164, 5},
+    {32, 9},
+    {0, 7},
+};
+static arc arcs_75_8[2] = {
+    {32, 6},
+    {0, 8},
+};
+static arc arcs_75_9[3] = {
+    {26, 10},
+    {34, 11},
+    {0, 9},
+};
+static arc arcs_75_10[1] = {
+    {27, 12},
+};
+static arc arcs_75_11[1] = {
+    {107, 13},
+};
+static arc arcs_75_12[1] = {
+    {26, 13},
+};
+static arc arcs_75_13[2] = {
+    {32, 9},
+    {0, 13},
+};
+static state states_75[14] = {
+    {3, arcs_75_0},
+    {4, arcs_75_1},
+    {1, arcs_75_2},
+    {3, arcs_75_3},
+    {1, arcs_75_4},
+    {1, arcs_75_5},
+    {3, arcs_75_6},
+    {3, arcs_75_7},
+    {2, arcs_75_8},
+    {3, arcs_75_9},
+    {1, arcs_75_10},
+    {1, arcs_75_11},
+    {1, arcs_75_12},
+    {2, arcs_75_13},
+};
+static arc arcs_76_0[1] = {
+    {168, 1},
+};
+static arc arcs_76_1[1] = {
+    {23, 2},
+};
+static arc arcs_76_2[2] = {
+    {13, 3},
+    {27, 4},
+};
+static arc arcs_76_3[2] = {
+    {14, 5},
+    {15, 6},
+};
+static arc arcs_76_4[1] = {
+    {28, 7},
+};
+static arc arcs_76_5[1] = {
+    {15, 6},
+};
+static arc arcs_76_6[1] = {
+    {27, 4},
+};
+static arc arcs_76_7[1] = {
+    {0, 7},
+};
+static state states_76[8] = {
+    {1, arcs_76_0},
+    {1, arcs_76_1},
+    {2, arcs_76_2},
+    {2, arcs_76_3},
+    {1, arcs_76_4},
+    {1, arcs_76_5},
+    {1, arcs_76_6},
+    {1, arcs_76_7},
+};
+static arc arcs_77_0[1] = {
+    {169, 1},
+};
+static arc arcs_77_1[2] = {
     {32, 2},
-    {48, 3},
-};
-static arc arcs_75_1[3] = {
-    {159, 3},
-    {29, 4},
     {0, 1},
 };
-static arc arcs_75_2[1] = {
-    {104, 3},
-};
-static arc arcs_75_3[1] = {
-    {0, 3},
-};
-static arc arcs_75_4[1] = {
-    {24, 3},
-};
-static state states_75[5] = {
-    {3, arcs_75_0},
-    {3, arcs_75_1},
-    {1, arcs_75_2},
-    {1, arcs_75_3},
-    {1, arcs_75_4},
-};
-static arc arcs_76_0[2] = {
-    {159, 1},
-    {166, 1},
-};
-static arc arcs_76_1[1] = {
+static arc arcs_77_2[2] = {
+    {169, 1},
+    {0, 2},
+};
+static state states_77[3] = {
+    {1, arcs_77_0},
+    {2, arcs_77_1},
+    {2, arcs_77_2},
+};
+static arc arcs_78_0[3] = {
+    {26, 1},
+    {34, 2},
+    {50, 3},
+};
+static arc arcs_78_1[3] = {
+    {164, 3},
+    {31, 4},
     {0, 1},
 };
-static state states_76[2] = {
-    {2, arcs_76_0},
-    {1, arcs_76_1},
-};
-static arc arcs_77_0[1] = {
-    {97, 1},
-};
-static arc arcs_77_1[1] = {
-    {63, 2},
-};
-static arc arcs_77_2[1] = {
-    {98, 3},
-};
-static arc arcs_77_3[1] = {
-    {108, 4},
-};
-static arc arcs_77_4[2] = {
-    {165, 5},
-    {0, 4},
-};
-static arc arcs_77_5[1] = {
-    {0, 5},
-};
-static state states_77[6] = {
-    {1, arcs_77_0},
-    {1, arcs_77_1},
-    {1, arcs_77_2},
-    {1, arcs_77_3},
-    {2, arcs_77_4},
-    {1, arcs_77_5},
-};
-static arc arcs_78_0[1] = {
-    {93, 1},
-};
-static arc arcs_78_1[1] = {
-    {110, 2},
-};
-static arc arcs_78_2[2] = {
-    {165, 3},
-    {0, 2},
+static arc arcs_78_2[1] = {
+    {107, 3},
 };
 static arc arcs_78_3[1] = {
     {0, 3},
 };
-static state states_78[4] = {
-    {1, arcs_78_0},
-    {1, arcs_78_1},
-    {2, arcs_78_2},
+static arc arcs_78_4[1] = {
+    {26, 3},
+};
+static state states_78[5] = {
+    {3, arcs_78_0},
+    {3, arcs_78_1},
+    {1, arcs_78_2},
     {1, arcs_78_3},
-};
-static arc arcs_79_0[1] = {
-    {21, 1},
+    {1, arcs_78_4},
+};
+static arc arcs_79_0[2] = {
+    {164, 1},
+    {171, 1},
 };
 static arc arcs_79_1[1] = {
     {0, 1},
 };
 static state states_79[2] = {
-    {1, arcs_79_0},
+    {2, arcs_79_0},
     {1, arcs_79_1},
 };
 static arc arcs_80_0[1] = {
-    {168, 1},
-};
-static arc arcs_80_1[2] = {
-    {169, 2},
+    {100, 1},
+};
+static arc arcs_80_1[1] = {
+    {65, 2},
+};
+static arc arcs_80_2[1] = {
+    {101, 3},
+};
+static arc arcs_80_3[1] = {
+    {111, 4},
+};
+static arc arcs_80_4[2] = {
+    {170, 5},
+    {0, 4},
+};
+static arc arcs_80_5[1] = {
+    {0, 5},
+};
+static state states_80[6] = {
+    {1, arcs_80_0},
+    {1, arcs_80_1},
+    {1, arcs_80_2},
+    {1, arcs_80_3},
+    {2, arcs_80_4},
+    {1, arcs_80_5},
+};
+static arc arcs_81_0[1] = {
+    {96, 1},
+};
+static arc arcs_81_1[1] = {
+    {113, 2},
+};
+static arc arcs_81_2[2] = {
+    {170, 3},
+    {0, 2},
+};
+static arc arcs_81_3[1] = {
+    {0, 3},
+};
+static state states_81[4] = {
+    {1, arcs_81_0},
+    {1, arcs_81_1},
+    {2, arcs_81_2},
+    {1, arcs_81_3},
+};
+static arc arcs_82_0[1] = {
+    {23, 1},
+};
+static arc arcs_82_1[1] = {
     {0, 1},
 };
-static arc arcs_80_2[1] = {
+static state states_82[2] = {
+    {1, arcs_82_0},
+    {1, arcs_82_1},
+};
+static arc arcs_83_0[1] = {
+    {173, 1},
+};
+static arc arcs_83_1[2] = {
+    {174, 2},
+    {0, 1},
+};
+static arc arcs_83_2[1] = {
     {0, 2},
 };
-static state states_80[3] = {
-    {1, arcs_80_0},
-    {2, arcs_80_1},
-    {1, arcs_80_2},
-};
-static arc arcs_81_0[2] = {
-    {74, 1},
+static state states_83[3] = {
+    {1, arcs_83_0},
+    {2, arcs_83_1},
+    {1, arcs_83_2},
+};
+static arc arcs_84_0[2] = {
+    {76, 1},
     {9, 2},
 };
-static arc arcs_81_1[1] = {
-    {24, 2},
-};
-static arc arcs_81_2[1] = {
+static arc arcs_84_1[1] = {
+    {26, 2},
+};
+static arc arcs_84_2[1] = {
     {0, 2},
 };
-static state states_81[3] = {
-    {2, arcs_81_0},
-    {1, arcs_81_1},
-    {1, arcs_81_2},
-};
-static dfa dfas[82] = {
+static state states_84[3] = {
+    {2, arcs_84_0},
+    {1, arcs_84_1},
+    {1, arcs_84_2},
+};
+static dfa dfas[85] = {
     {256, "single_input", 0, 3, states_0,
-     "\004\050\060\200\000\000\000\100\301\047\341\040\113\000\041\000\000\014\241\174\010\001"},
+     "\004\050\340\000\002\000\000\000\005\237\204\003\131\002\010\001\000\140\110\224\017\041"},
     {257, "file_input", 0, 2, states_1,
-     "\204\050\060\200\000\000\000\100\301\047\341\040\113\000\041\000\000\014\241\174\010\001"},
+     "\204\050\340\000\002\000\000\000\005\237\204\003\131\002\010\001\000\140\110\224\017\041"},
     {258, "eval_input", 0, 3, states_2,
-     "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"},
+     "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\010\001\000\140\110\224\017\000"},
     {259, "decorator", 0, 7, states_3,
      "\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
     {260, "decorators", 0, 2, states_4,
      "\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
     {261, "decorated", 0, 3, states_5,
      "\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-    {262, "funcdef", 0, 8, states_6,
-     "\000\000\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-    {263, "parameters", 0, 4, states_7,
+    {262, "async_funcdef", 0, 3, states_6,
+     "\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+    {263, "funcdef", 0, 8, states_7,
+     "\000\000\100\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+    {264, "parameters", 0, 4, states_8,
      "\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-    {264, "typedargslist", 0, 18, states_8,
-     "\000\000\040\200\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-    {265, "tfpdef", 0, 4, states_9,
+    {265, "typedargslist", 0, 18, states_9,
+     "\000\000\200\000\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+    {266, "tfpdef", 0, 4, states_10,
+     "\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+    {267, "varargslist", 0, 18, states_11,
+     "\000\000\200\000\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+    {268, "vfpdef", 0, 2, states_12,
+     "\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+    {269, "stmt", 0, 2, states_13,
+     "\000\050\340\000\002\000\000\000\005\237\204\003\131\002\010\001\000\140\110\224\017\041"},
+    {270, "simple_stmt", 0, 4, states_14,
+     "\000\040\200\000\002\000\000\000\005\237\204\003\000\000\010\001\000\140\110\224\017\040"},
+    {271, "small_stmt", 0, 2, states_15,
+     "\000\040\200\000\002\000\000\000\005\237\204\003\000\000\010\001\000\140\110\224\017\040"},
+    {272, "expr_stmt", 0, 6, states_16,
+     "\000\040\200\000\002\000\000\000\000\000\004\000\000\000\010\001\000\140\110\224\017\000"},
+    {273, "testlist_star_expr", 0, 3, states_17,
+     "\000\040\200\000\002\000\000\000\000\000\004\000\000\000\010\001\000\140\110\224\017\000"},
+    {274, "augassign", 0, 2, states_18,
+     "\000\000\000\000\000\000\370\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+    {275, "del_stmt", 0, 3, states_19,
+     "\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+    {276, "pass_stmt", 0, 2, states_20,
+     "\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+    {277, "flow_stmt", 0, 2, states_21,
+     "\000\000\000\000\000\000\000\000\000\017\000\000\000\000\000\000\000\000\000\000\000\040"},
+    {278, "break_stmt", 0, 2, states_22,
+     "\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000"},
+    {279, "continue_stmt", 0, 2, states_23,
+     "\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000"},
+    {280, "return_stmt", 0, 3, states_24,
+     "\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000"},
+    {281, "yield_stmt", 0, 2, states_25,
+     "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\040"},
+    {282, "raise_stmt", 0, 5, states_26,
+     "\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000"},
+    {283, "import_stmt", 0, 2, states_27,
+     "\000\000\000\000\000\000\000\000\000\220\000\000\000\000\000\000\000\000\000\000\000\000"},
+    {284, "import_name", 0, 3, states_28,
+     "\000\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000"},
+    {285, "import_from", 0, 8, states_29,
+     "\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000\000"},
+    {286, "import_as_name", 0, 4, states_30,
+     "\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+    {287, "dotted_as_name", 0, 4, states_31,
+     "\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+    {288, "import_as_names", 0, 3, states_32,
+     "\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+    {289, "dotted_as_names", 0, 2, states_33,
+     "\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+    {290, "dotted_name", 0, 2, states_34,
+     "\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+    {291, "global_stmt", 0, 3, states_35,
+     "\000\000\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000\000"},
+    {292, "nonlocal_stmt", 0, 3, states_36,
+     "\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000"},
+    {293, "assert_stmt", 0, 5, states_37,
+     "\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000"},
+    {294, "compound_stmt", 0, 2, states_38,
+     "\000\010\140\000\000\000\000\000\000\000\000\000\131\002\000\000\000\000\000\000\000\001"},
+    {295, "async_stmt", 0, 3, states_39,
      "\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-    {266, "varargslist", 0, 18, states_10,
-     "\000\000\040\200\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-    {267, "vfpdef", 0, 2, states_11,
-     "\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-    {268, "stmt", 0, 2, states_12,
-     "\000\050\060\200\000\000\000\100\301\047\341\040\113\000\041\000\000\014\241\174\010\001"},
-    {269, "simple_stmt", 0, 4, states_13,
-     "\000\040\040\200\000\000\000\100\301\047\341\000\000\000\041\000\000\014\241\174\000\001"},
-    {270, "small_stmt", 0, 2, states_14,
-     "\000\040\040\200\000\000\000\100\301\047\341\000\000\000\041\000\000\014\241\174\000\001"},
-    {271, "expr_stmt", 0, 6, states_15,
-     "\000\040\040\200\000\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"},
-    {272, "testlist_star_expr", 0, 3, states_16,
-     "\000\040\040\200\000\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"},
-    {273, "augassign", 0, 2, states_17,
-     "\000\000\000\000\000\000\376\077\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-    {274, "del_stmt", 0, 3, states_18,
-     "\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-    {275, "pass_stmt", 0, 2, states_19,
-     "\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-    {276, "flow_stmt", 0, 2, states_20,
-     "\000\000\000\000\000\000\000\000\300\003\000\000\000\000\000\000\000\000\000\000\000\001"},
-    {277, "break_stmt", 0, 2, states_21,
-     "\000\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-    {278, "continue_stmt", 0, 2, states_22,
-     "\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-    {279, "return_stmt", 0, 3, states_23,
-     "\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000"},
-    {280, "yield_stmt", 0, 2, states_24,
+    {296, "if_stmt", 0, 8, states_40,
+     "\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000"},
+    {297, "while_stmt", 0, 8, states_41,
+     "\000\000\000\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000"},
+    {298, "for_stmt", 0, 10, states_42,
+     "\000\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000"},
+    {299, "try_stmt", 0, 13, states_43,
+     "\000\000\000\000\000\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000"},
+    {300, "with_stmt", 0, 5, states_44,
+     "\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000"},
+    {301, "with_item", 0, 4, states_45,
+     "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\010\001\000\140\110\224\017\000"},
+    {302, "except_clause", 0, 5, states_46,
+     "\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000"},
+    {303, "suite", 0, 5, states_47,
+     "\004\040\200\000\002\000\000\000\005\237\204\003\000\000\010\001\000\140\110\224\017\040"},
+    {304, "test", 0, 6, states_48,
+     "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\010\001\000\140\110\224\017\000"},
+    {305, "test_nocond", 0, 2, states_49,
+     "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\010\001\000\140\110\224\017\000"},
+    {306, "lambdef", 0, 5, states_50,
+     "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000"},
+    {307, "lambdef_nocond", 0, 5, states_51,
+     "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000"},
+    {308, "or_test", 0, 2, states_52,
+     "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\000\001\000\140\110\224\017\000"},
+    {309, "and_test", 0, 2, states_53,
+     "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\000\001\000\140\110\224\017\000"},
+    {310, "not_test", 0, 3, states_54,
+     "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\000\001\000\140\110\224\017\000"},
+    {311, "comparison", 0, 2, states_55,
+     "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\000\000\000\140\110\224\017\000"},
+    {312, "comp_op", 0, 4, states_56,
+     "\000\000\000\000\000\000\000\000\000\000\000\000\040\000\000\371\007\000\000\000\000\000"},
+    {313, "star_expr", 0, 3, states_57,
+     "\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+    {314, "expr", 0, 2, states_58,
+     "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\000\000\000\140\110\224\017\000"},
+    {315, "xor_expr", 0, 2, states_59,
+     "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\000\000\000\140\110\224\017\000"},
+    {316, "and_expr", 0, 2, states_60,
+     "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\000\000\000\140\110\224\017\000"},
+    {317, "shift_expr", 0, 2, states_61,
+     "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\000\000\000\140\110\224\017\000"},
+    {318, "arith_expr", 0, 2, states_62,
+     "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\000\000\000\140\110\224\017\000"},
+    {319, "term", 0, 2, states_63,
+     "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\000\000\000\140\110\224\017\000"},
+    {320, "factor", 0, 3, states_64,
+     "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\000\000\000\140\110\224\017\000"},
+    {321, "power", 0, 4, states_65,
+     "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\100\224\017\000"},
+    {322, "atom_expr", 0, 3, states_66,
+     "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\100\224\017\000"},
+    {323, "atom", 0, 9, states_67,
+     "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\224\017\000"},
+    {324, "testlist_comp", 0, 5, states_68,
+     "\000\040\200\000\002\000\000\000\000\000\004\000\000\000\010\001\000\140\110\224\017\000"},
+    {325, "trailer", 0, 7, states_69,
+     "\000\040\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\004\000\000"},
+    {326, "subscriptlist", 0, 3, states_70,
+     "\000\040\200\010\000\000\000\000\000\000\004\000\000\000\010\001\000\140\110\224\017\000"},
+    {327, "subscript", 0, 5, states_71,
+     "\000\040\200\010\000\000\000\000\000\000\004\000\000\000\010\001\000\140\110\224\017\000"},
+    {328, "sliceop", 0, 3, states_72,
+     "\000\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+    {329, "exprlist", 0, 3, states_73,
+     "\000\040\200\000\002\000\000\000\000\000\004\000\000\000\000\000\000\140\110\224\017\000"},
+    {330, "testlist", 0, 3, states_74,
+     "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\010\001\000\140\110\224\017\000"},
+    {331, "dictorsetmaker", 0, 14, states_75,
+     "\000\040\200\000\006\000\000\000\000\000\004\000\000\000\010\001\000\140\110\224\017\000"},
+    {332, "classdef", 0, 8, states_76,
      "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001"},
-    {281, "raise_stmt", 0, 5, states_25,
-     "\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000"},
-    {282, "import_stmt", 0, 2, states_26,
-     "\000\000\000\000\000\000\000\000\000\044\000\000\000\000\000\000\000\000\000\000\000\000"},
-    {283, "import_name", 0, 3, states_27,
-     "\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000"},
-    {284, "import_from", 0, 8, states_28,
-     "\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000"},
-    {285, "import_as_name", 0, 4, states_29,
-     "\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-    {286, "dotted_as_name", 0, 4, states_30,
-     "\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-    {287, "import_as_names", 0, 3, states_31,
-     "\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-    {288, "dotted_as_names", 0, 2, states_32,
-     "\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-    {289, "dotted_name", 0, 2, states_33,
-     "\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-    {290, "global_stmt", 0, 3, states_34,
-     "\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000\000"},
-    {291, "nonlocal_stmt", 0, 3, states_35,
-     "\000\000\000\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000\000\000"},
-    {292, "assert_stmt", 0, 5, states_36,
-     "\000\000\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000\000"},
-    {293, "compound_stmt", 0, 2, states_37,
-     "\000\010\020\000\000\000\000\000\000\000\000\040\113\000\000\000\000\000\000\000\010\000"},
-    {294, "if_stmt", 0, 8, states_38,
-     "\000\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000"},
-    {295, "while_stmt", 0, 8, states_39,
+    {333, "arglist", 0, 3, states_77,
+     "\000\040\200\000\006\000\000\000\000\000\004\000\000\000\010\001\000\140\110\224\017\000"},
+    {334, "argument", 0, 5, states_78,
+     "\000\040\200\000\006\000\000\000\000\000\004\000\000\000\010\001\000\140\110\224\017\000"},
+    {335, "comp_iter", 0, 2, states_79,
+     "\000\000\000\000\000\000\000\000\000\000\000\000\021\000\000\000\000\000\000\000\000\000"},
+    {336, "comp_for", 0, 6, states_80,
+     "\000\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000"},
+    {337, "comp_if", 0, 4, states_81,
      "\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000"},
-    {296, "for_stmt", 0, 10, states_40,
-     "\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000"},
-    {297, "try_stmt", 0, 13, states_41,
-     "\000\000\000\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000"},
-    {298, "with_stmt", 0, 5, states_42,
-     "\000\000\000\000\000\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000"},
-    {299, "with_item", 0, 4, states_43,
-     "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"},
-    {300, "except_clause", 0, 5, states_44,
-     "\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000"},
-    {301, "suite", 0, 5, states_45,
-     "\004\040\040\200\000\000\000\100\301\047\341\000\000\000\041\000\000\014\241\174\000\001"},
-    {302, "test", 0, 6, states_46,
-     "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"},
-    {303, "test_nocond", 0, 2, states_47,
-     "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"},
-    {304, "lambdef", 0, 5, states_48,
-     "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000"},
-    {305, "lambdef_nocond", 0, 5, states_49,
-     "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000"},
-    {306, "or_test", 0, 2, states_50,
-     "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\040\000\000\014\241\174\000\000"},
-    {307, "and_test", 0, 2, states_51,
-     "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\040\000\000\014\241\174\000\000"},
-    {308, "not_test", 0, 3, states_52,
-     "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\040\000\000\014\241\174\000\000"},
-    {309, "comparison", 0, 2, states_53,
-     "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\000\000\000\014\241\174\000\000"},
-    {310, "comp_op", 0, 4, states_54,
-     "\000\000\000\000\000\000\000\000\000\000\000\000\004\000\040\377\000\000\000\000\000\000"},
-    {311, "star_expr", 0, 3, states_55,
-     "\000\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-    {312, "expr", 0, 2, states_56,
-     "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\000\000\000\014\241\174\000\000"},
-    {313, "xor_expr", 0, 2, states_57,
-     "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\000\000\000\014\241\174\000\000"},
-    {314, "and_expr", 0, 2, states_58,
-     "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\000\000\000\014\241\174\000\000"},
-    {315, "shift_expr", 0, 2, states_59,
-     "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\000\000\000\014\241\174\000\000"},
-    {316, "arith_expr", 0, 2, states_60,
-     "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\000\000\000\014\241\174\000\000"},
-    {317, "term", 0, 2, states_61,
-     "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\000\000\000\014\241\174\000\000"},
-    {318, "factor", 0, 3, states_62,
-     "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\000\000\000\014\241\174\000\000"},
-    {319, "power", 0, 4, states_63,
-     "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\240\174\000\000"},
-    {320, "atom", 0, 9, states_64,
-     "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\240\174\000\000"},
-    {321, "testlist_comp", 0, 5, states_65,
-     "\000\040\040\200\000\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"},
-    {322, "trailer", 0, 7, states_66,
-     "\000\040\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\040\000\000\000"},
-    {323, "subscriptlist", 0, 3, states_67,
-     "\000\040\040\002\000\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"},
-    {324, "subscript", 0, 5, states_68,
-     "\000\040\040\002\000\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"},
-    {325, "sliceop", 0, 3, states_69,
-     "\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-    {326, "exprlist", 0, 3, states_70,
-     "\000\040\040\200\000\000\000\000\000\000\001\000\000\000\000\000\000\014\241\174\000\000"},
-    {327, "testlist", 0, 3, states_71,
-     "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"},
-    {328, "dictorsetmaker", 0, 14, states_72,
-     "\000\040\040\200\001\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"},
-    {329, "classdef", 0, 8, states_73,
-     "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000"},
-    {330, "arglist", 0, 3, states_74,
-     "\000\040\040\200\001\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"},
-    {331, "argument", 0, 5, states_75,
-     "\000\040\040\200\001\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"},
-    {332, "comp_iter", 0, 2, states_76,
-     "\000\000\000\000\000\000\000\000\000\000\000\040\002\000\000\000\000\000\000\000\000\000"},
-    {333, "comp_for", 0, 6, states_77,
-     "\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000"},
-    {334, "comp_if", 0, 4, states_78,
-     "\000\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000"},
-    {335, "encoding_decl", 0, 2, states_79,
-     "\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-    {336, "yield_expr", 0, 3, states_80,
-     "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001"},
-    {337, "yield_arg", 0, 3, states_81,
-     "\000\040\040\000\000\000\000\000\000\004\001\000\000\000\041\000\000\014\241\174\000\000"},
-};
-static label labels[170] = {
+    {338, "encoding_decl", 0, 2, states_82,
+     "\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+    {339, "yield_expr", 0, 3, states_83,
+     "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\040"},
+    {340, "yield_arg", 0, 3, states_84,
+     "\000\040\200\000\000\000\000\000\000\020\004\000\000\000\010\001\000\140\110\224\017\000"},
+};
+static label labels[175] = {
     {0, "EMPTY"},
     {256, 0},
     {4, 0},
+    {270, 0},
+    {294, 0},
+    {257, 0},
     {269, 0},
-    {293, 0},
-    {257, 0},
-    {268, 0},
     {0, 0},
     {258, 0},
-    {327, 0},
+    {330, 0},
     {259, 0},
     {49, 0},
-    {289, 0},
+    {290, 0},
     {7, 0},
-    {330, 0},
+    {333, 0},
     {8, 0},
     {260, 0},
     {261, 0},
-    {329, 0},
+    {332, 0},
+    {263, 0},
     {262, 0},
+    {55, 0},
     {1, "def"},
     {1, 0},
-    {263, 0},
+    {264, 0},
     {51, 0},
-    {302, 0},
+    {304, 0},
     {11, 0},
-    {301, 0},
-    {264, 0},
+    {303, 0},
     {265, 0},
+    {266, 0},
     {22, 0},
     {12, 0},
     {16, 0},
     {35, 0},
-    {266, 0},
     {267, 0},
-    {270, 0},
+    {268, 0},
+    {271, 0},
     {13, 0},
-    {271, 0},
-    {274, 0},
+    {272, 0},
     {275, 0},
     {276, 0},
-    {282, 0},
-    {290, 0},
+    {277, 0},
+    {283, 0},
     {291, 0},
     {292, 0},
-    {272, 0},
+    {293, 0},
     {273, 0},
-    {336, 0},
-    {311, 0},
+    {274, 0},
+    {339, 0},
+    {313, 0},
     {36, 0},
     {37, 0},
     {38, 0},
@@ -2047,36 +2102,37 @@
     {46, 0},
     {48, 0},
     {1, "del"},
-    {326, 0},
+    {329, 0},
     {1, "pass"},
-    {277, 0},
     {278, 0},
     {279, 0},
+    {280, 0},
+    {282, 0},
     {281, 0},
-    {280, 0},
     {1, "break"},
     {1, "continue"},
     {1, "return"},
     {1, "raise"},
     {1, "from"},
-    {283, 0},
     {284, 0},
+    {285, 0},
     {1, "import"},
-    {288, 0},
+    {289, 0},
     {23, 0},
     {52, 0},
+    {288, 0},
+    {286, 0},
+    {1, "as"},
     {287, 0},
-    {285, 0},
-    {1, "as"},
-    {286, 0},
     {1, "global"},
     {1, "nonlocal"},
     {1, "assert"},
-    {294, 0},
-    {295, 0},
     {296, 0},
     {297, 0},
     {298, 0},
+    {299, 0},
+    {300, 0},
+    {295, 0},
     {1, "if"},
     {1, "elif"},
     {1, "else"},
@@ -2084,26 +2140,26 @@
     {1, "for"},
     {1, "in"},
     {1, "try"},
-    {300, 0},
+    {302, 0},
     {1, "finally"},
     {1, "with"},
-    {299, 0},
-    {312, 0},
+    {301, 0},
+    {314, 0},
     {1, "except"},
     {5, 0},
     {6, 0},
+    {308, 0},
     {306, 0},
-    {304, 0},
-    {303, 0},
     {305, 0},
+    {307, 0},
     {1, "lambda"},
-    {307, 0},
+    {309, 0},
     {1, "or"},
-    {308, 0},
+    {310, 0},
     {1, "and"},
     {1, "not"},
-    {309, 0},
-    {310, 0},
+    {311, 0},
+    {312, 0},
     {20, 0},
     {21, 0},
     {27, 0},
@@ -2112,52 +2168,54 @@
     {28, 0},
     {28, 0},
     {1, "is"},
-    {313, 0},
+    {315, 0},
     {18, 0},
-    {314, 0},
+    {316, 0},
     {32, 0},
-    {315, 0},
+    {317, 0},
     {19, 0},
-    {316, 0},
+    {318, 0},
     {33, 0},
     {34, 0},
-    {317, 0},
+    {319, 0},
     {14, 0},
     {15, 0},
-    {318, 0},
+    {320, 0},
     {17, 0},
     {24, 0},
     {47, 0},
     {31, 0},
-    {319, 0},
-    {320, 0},
+    {321, 0},
     {322, 0},
-    {321, 0},
+    {54, 0},
+    {323, 0},
+    {325, 0},
+    {324, 0},
     {9, 0},
     {10, 0},
     {25, 0},
-    {328, 0},
+    {331, 0},
     {26, 0},
     {2, 0},
     {3, 0},
     {1, "None"},
     {1, "True"},
     {1, "False"},
-    {333, 0},
-    {323, 0},
-    {324, 0},
-    {325, 0},
+    {336, 0},
+    {326, 0},
+    {327, 0},
+    {328, 0},
     {1, "class"},
-    {331, 0},
-    {332, 0},
     {334, 0},
     {335, 0},
+    {337, 0},
+    {338, 0},
     {1, "yield"},
-    {337, 0},
+    {340, 0},
 };
 grammar _PyParser_Grammar = {
-    82,
+    85,
     dfas,
-    {170, labels},
+    {175, labels},
     256
 };
diff --git a/Python/importlib.h b/Python/importlib.h
--- a/Python/importlib.h
+++ b/Python/importlib.h
[stripped]
diff --git a/Python/importlib_external.h b/Python/importlib_external.h
--- a/Python/importlib_external.h
+++ b/Python/importlib_external.h
@@ -225,2408 +225,2409 @@
     104,95,105,115,100,105,114,92,0,0,0,115,6,0,0,0,
     0,2,6,1,12,1,114,46,0,0,0,105,182,1,0,0,
     99,3,0,0,0,0,0,0,0,6,0,0,0,17,0,0,
-    0,67,0,0,0,115,192,0,0,0,100,1,0,106,0,0,
+    0,67,0,0,0,115,193,0,0,0,100,1,0,106,0,0,
     124,0,0,116,1,0,124,0,0,131,1,0,131,2,0,125,
     3,0,116,2,0,106,3,0,124,3,0,116,2,0,106,4,
     0,116,2,0,106,5,0,66,116,2,0,106,6,0,66,124,
-    2,0,100,2,0,64,131,3,0,125,4,0,121,60,0,116,
+    2,0,100,2,0,64,131,3,0,125,4,0,121,61,0,116,
     7,0,106,8,0,124,4,0,100,3,0,131,2,0,143,20,
     0,125,5,0,124,5,0,106,9,0,124,1,0,131,1,0,
-    1,87,100,4,0,81,88,116,2,0,106,10,0,124,3,0,
-    124,0,0,131,2,0,1,87,110,59,0,4,116,11,0,107,
-    10,0,114,187,0,1,1,1,121,17,0,116,2,0,106,12,
-    0,124,3,0,131,1,0,1,87,110,18,0,4,116,11,0,
-    107,10,0,114,179,0,1,1,1,89,110,1,0,88,130,0,
-    0,89,110,1,0,88,100,4,0,83,41,5,122,162,66,101,
-    115,116,45,101,102,102,111,114,116,32,102,117,110,99,116,105,
-    111,110,32,116,111,32,119,114,105,116,101,32,100,97,116,97,
-    32,116,111,32,97,32,112,97,116,104,32,97,116,111,109,105,
-    99,97,108,108,121,46,10,32,32,32,32,66,101,32,112,114,
-    101,112,97,114,101,100,32,116,111,32,104,97,110,100,108,101,
-    32,97,32,70,105,108,101,69,120,105,115,116,115,69,114,114,
-    111,114,32,105,102,32,99,111,110,99,117,114,114,101,110,116,
-    32,119,114,105,116,105,110,103,32,111,102,32,116,104,101,10,
-    32,32,32,32,116,101,109,112,111,114,97,114,121,32,102,105,
-    108,101,32,105,115,32,97,116,116,101,109,112,116,101,100,46,
-    122,5,123,125,46,123,125,105,182,1,0,0,90,2,119,98,
-    78,41,13,218,6,102,111,114,109,97,116,218,2,105,100,114,
-    3,0,0,0,90,4,111,112,101,110,90,6,79,95,69,88,
-    67,76,90,7,79,95,67,82,69,65,84,90,8,79,95,87,
-    82,79,78,76,89,218,3,95,105,111,218,6,70,105,108,101,
-    73,79,218,5,119,114,105,116,101,218,7,114,101,112,108,97,
-    99,101,114,40,0,0,0,90,6,117,110,108,105,110,107,41,
-    6,114,35,0,0,0,218,4,100,97,116,97,114,42,0,0,
-    0,90,8,112,97,116,104,95,116,109,112,90,2,102,100,218,
-    4,102,105,108,101,114,4,0,0,0,114,4,0,0,0,114,
-    5,0,0,0,218,13,95,119,114,105,116,101,95,97,116,111,
-    109,105,99,99,0,0,0,115,26,0,0,0,0,5,24,1,
-    9,1,33,1,3,3,21,1,19,1,20,1,13,1,3,1,
-    17,1,13,1,5,1,114,55,0,0,0,105,2,13,0,0,
-    233,2,0,0,0,114,13,0,0,0,115,2,0,0,0,13,
-    10,90,11,95,95,112,121,99,97,99,104,101,95,95,122,4,
-    111,112,116,45,122,3,46,112,121,122,4,46,112,121,99,78,
-    218,12,111,112,116,105,109,105,122,97,116,105,111,110,99,2,
-    0,0,0,1,0,0,0,11,0,0,0,6,0,0,0,67,
-    0,0,0,115,87,1,0,0,124,1,0,100,1,0,107,9,
-    0,114,76,0,116,0,0,106,1,0,100,2,0,116,2,0,
-    131,2,0,1,124,2,0,100,1,0,107,9,0,114,58,0,
-    100,3,0,125,3,0,116,3,0,124,3,0,131,1,0,130,
-    1,0,124,1,0,114,70,0,100,4,0,110,3,0,100,5,
-    0,125,2,0,116,4,0,124,0,0,131,1,0,92,2,0,
-    125,4,0,125,5,0,124,5,0,106,5,0,100,6,0,131,
-    1,0,92,3,0,125,6,0,125,7,0,125,8,0,116,6,
-    0,106,7,0,106,8,0,125,9,0,124,9,0,100,1,0,
-    107,8,0,114,154,0,116,9,0,100,7,0,131,1,0,130,
-    1,0,100,4,0,106,10,0,124,6,0,114,172,0,124,6,
-    0,110,3,0,124,8,0,124,7,0,124,9,0,103,3,0,
-    131,1,0,125,10,0,124,2,0,100,1,0,107,8,0,114,
-    241,0,116,6,0,106,11,0,106,12,0,100,8,0,107,2,
-    0,114,229,0,100,4,0,125,2,0,110,12,0,116,6,0,
-    106,11,0,106,12,0,125,2,0,116,13,0,124,2,0,131,
-    1,0,125,2,0,124,2,0,100,4,0,107,3,0,114,63,
-    1,124,2,0,106,14,0,131,0,0,115,42,1,116,15,0,
-    100,9,0,106,16,0,124,2,0,131,1,0,131,1,0,130,
-    1,0,100,10,0,106,16,0,124,10,0,116,17,0,124,2,
-    0,131,3,0,125,10,0,116,18,0,124,4,0,116,19,0,
-    124,10,0,116,20,0,100,8,0,25,23,131,3,0,83,41,
-    11,97,254,2,0,0,71,105,118,101,110,32,116,104,101,32,
-    112,97,116,104,32,116,111,32,97,32,46,112,121,32,102,105,
-    108,101,44,32,114,101,116,117,114,110,32,116,104,101,32,112,
-    97,116,104,32,116,111,32,105,116,115,32,46,112,121,99,32,
-    102,105,108,101,46,10,10,32,32,32,32,84,104,101,32,46,
-    112,121,32,102,105,108,101,32,100,111,101,115,32,110,111,116,
-    32,110,101,101,100,32,116,111,32,101,120,105,115,116,59,32,
-    116,104,105,115,32,115,105,109,112,108,121,32,114,101,116,117,
-    114,110,115,32,116,104,101,32,112,97,116,104,32,116,111,32,
-    116,104,101,10,32,32,32,32,46,112,121,99,32,102,105,108,
-    101,32,99,97,108,99,117,108,97,116,101,100,32,97,115,32,
-    105,102,32,116,104,101,32,46,112,121,32,102,105,108,101,32,
-    119,101,114,101,32,105,109,112,111,114,116,101,100,46,10,10,
-    32,32,32,32,84,104,101,32,39,111,112,116,105,109,105,122,
-    97,116,105,111,110,39,32,112,97,114,97,109,101,116,101,114,
-    32,99,111,110,116,114,111,108,115,32,116,104,101,32,112,114,
-    101,115,117,109,101,100,32,111,112,116,105,109,105,122,97,116,
-    105,111,110,32,108,101,118,101,108,32,111,102,10,32,32,32,
-    32,116,104,101,32,98,121,116,101,99,111,100,101,32,102,105,
-    108,101,46,32,73,102,32,39,111,112,116,105,109,105,122,97,
-    116,105,111,110,39,32,105,115,32,110,111,116,32,78,111,110,
-    101,44,32,116,104,101,32,115,116,114,105,110,103,32,114,101,
-    112,114,101,115,101,110,116,97,116,105,111,110,10,32,32,32,
-    32,111,102,32,116,104,101,32,97,114,103,117,109,101,110,116,
-    32,105,115,32,116,97,107,101,110,32,97,110,100,32,118,101,
-    114,105,102,105,101,100,32,116,111,32,98,101,32,97,108,112,
-    104,97,110,117,109,101,114,105,99,32,40,101,108,115,101,32,
-    86,97,108,117,101,69,114,114,111,114,10,32,32,32,32,105,
-    115,32,114,97,105,115,101,100,41,46,10,10,32,32,32,32,
-    84,104,101,32,100,101,98,117,103,95,111,118,101,114,114,105,
-    100,101,32,112,97,114,97,109,101,116,101,114,32,105,115,32,
-    100,101,112,114,101,99,97,116,101,100,46,32,73,102,32,100,
-    101,98,117,103,95,111,118,101,114,114,105,100,101,32,105,115,
-    32,110,111,116,32,78,111,110,101,44,10,32,32,32,32,97,
-    32,84,114,117,101,32,118,97,108,117,101,32,105,115,32,116,
-    104,101,32,115,97,109,101,32,97,115,32,115,101,116,116,105,
-    110,103,32,39,111,112,116,105,109,105,122,97,116,105,111,110,
-    39,32,116,111,32,116,104,101,32,101,109,112,116,121,32,115,
-    116,114,105,110,103,10,32,32,32,32,119,104,105,108,101,32,
-    97,32,70,97,108,115,101,32,118,97,108,117,101,32,105,115,
-    32,101,113,117,105,118,97,108,101,110,116,32,116,111,32,115,
-    101,116,116,105,110,103,32,39,111,112,116,105,109,105,122,97,
-    116,105,111,110,39,32,116,111,32,39,49,39,46,10,10,32,
-    32,32,32,73,102,32,115,121,115,46,105,109,112,108,101,109,
-    101,110,116,97,116,105,111,110,46,99,97,99,104,101,95,116,
-    97,103,32,105,115,32,78,111,110,101,32,116,104,101,110,32,
-    78,111,116,73,109,112,108,101,109,101,110,116,101,100,69,114,
-    114,111,114,32,105,115,32,114,97,105,115,101,100,46,10,10,
-    32,32,32,32,78,122,70,116,104,101,32,100,101,98,117,103,
-    95,111,118,101,114,114,105,100,101,32,112,97,114,97,109,101,
-    116,101,114,32,105,115,32,100,101,112,114,101,99,97,116,101,
-    100,59,32,117,115,101,32,39,111,112,116,105,109,105,122,97,
-    116,105,111,110,39,32,105,110,115,116,101,97,100,122,50,100,
-    101,98,117,103,95,111,118,101,114,114,105,100,101,32,111,114,
-    32,111,112,116,105,109,105,122,97,116,105,111,110,32,109,117,
-    115,116,32,98,101,32,115,101,116,32,116,111,32,78,111,110,
-    101,114,30,0,0,0,114,29,0,0,0,218,1,46,122,36,
+    1,87,100,4,0,81,82,88,116,2,0,106,10,0,124,3,
+    0,124,0,0,131,2,0,1,87,110,59,0,4,116,11,0,
+    107,10,0,114,188,0,1,1,1,121,17,0,116,2,0,106,
+    12,0,124,3,0,131,1,0,1,87,110,18,0,4,116,11,
+    0,107,10,0,114,180,0,1,1,1,89,110,1,0,88,130,
+    0,0,89,110,1,0,88,100,4,0,83,41,5,122,162,66,
+    101,115,116,45,101,102,102,111,114,116,32,102,117,110,99,116,
+    105,111,110,32,116,111,32,119,114,105,116,101,32,100,97,116,
+    97,32,116,111,32,97,32,112,97,116,104,32,97,116,111,109,
+    105,99,97,108,108,121,46,10,32,32,32,32,66,101,32,112,
+    114,101,112,97,114,101,100,32,116,111,32,104,97,110,100,108,
+    101,32,97,32,70,105,108,101,69,120,105,115,116,115,69,114,
+    114,111,114,32,105,102,32,99,111,110,99,117,114,114,101,110,
+    116,32,119,114,105,116,105,110,103,32,111,102,32,116,104,101,
+    10,32,32,32,32,116,101,109,112,111,114,97,114,121,32,102,
+    105,108,101,32,105,115,32,97,116,116,101,109,112,116,101,100,
+    46,122,5,123,125,46,123,125,105,182,1,0,0,90,2,119,
+    98,78,41,13,218,6,102,111,114,109,97,116,218,2,105,100,
+    114,3,0,0,0,90,4,111,112,101,110,90,6,79,95,69,
+    88,67,76,90,7,79,95,67,82,69,65,84,90,8,79,95,
+    87,82,79,78,76,89,218,3,95,105,111,218,6,70,105,108,
+    101,73,79,218,5,119,114,105,116,101,218,7,114,101,112,108,
+    97,99,101,114,40,0,0,0,90,6,117,110,108,105,110,107,
+    41,6,114,35,0,0,0,218,4,100,97,116,97,114,42,0,
+    0,0,90,8,112,97,116,104,95,116,109,112,90,2,102,100,
+    218,4,102,105,108,101,114,4,0,0,0,114,4,0,0,0,
+    114,5,0,0,0,218,13,95,119,114,105,116,101,95,97,116,
+    111,109,105,99,99,0,0,0,115,26,0,0,0,0,5,24,
+    1,9,1,33,1,3,3,21,1,20,1,20,1,13,1,3,
+    1,17,1,13,1,5,1,114,55,0,0,0,105,2,13,0,
+    0,233,2,0,0,0,114,13,0,0,0,115,2,0,0,0,
+    13,10,90,11,95,95,112,121,99,97,99,104,101,95,95,122,
+    4,111,112,116,45,122,3,46,112,121,122,4,46,112,121,99,
+    78,218,12,111,112,116,105,109,105,122,97,116,105,111,110,99,
+    2,0,0,0,1,0,0,0,11,0,0,0,6,0,0,0,
+    67,0,0,0,115,87,1,0,0,124,1,0,100,1,0,107,
+    9,0,114,76,0,116,0,0,106,1,0,100,2,0,116,2,
+    0,131,2,0,1,124,2,0,100,1,0,107,9,0,114,58,
+    0,100,3,0,125,3,0,116,3,0,124,3,0,131,1,0,
+    130,1,0,124,1,0,114,70,0,100,4,0,110,3,0,100,
+    5,0,125,2,0,116,4,0,124,0,0,131,1,0,92,2,
+    0,125,4,0,125,5,0,124,5,0,106,5,0,100,6,0,
+    131,1,0,92,3,0,125,6,0,125,7,0,125,8,0,116,
+    6,0,106,7,0,106,8,0,125,9,0,124,9,0,100,1,
+    0,107,8,0,114,154,0,116,9,0,100,7,0,131,1,0,
+    130,1,0,100,4,0,106,10,0,124,6,0,114,172,0,124,
+    6,0,110,3,0,124,8,0,124,7,0,124,9,0,103,3,
+    0,131,1,0,125,10,0,124,2,0,100,1,0,107,8,0,
+    114,241,0,116,6,0,106,11,0,106,12,0,100,8,0,107,
+    2,0,114,229,0,100,4,0,125,2,0,110,12,0,116,6,
+    0,106,11,0,106,12,0,125,2,0,116,13,0,124,2,0,
+    131,1,0,125,2,0,124,2,0,100,4,0,107,3,0,114,
+    63,1,124,2,0,106,14,0,131,0,0,115,42,1,116,15,
+    0,100,9,0,106,16,0,124,2,0,131,1,0,131,1,0,
+    130,1,0,100,10,0,106,16,0,124,10,0,116,17,0,124,
+    2,0,131,3,0,125,10,0,116,18,0,124,4,0,116,19,
+    0,124,10,0,116,20,0,100,8,0,25,23,131,3,0,83,
+    41,11,97,254,2,0,0,71,105,118,101,110,32,116,104,101,
+    32,112,97,116,104,32,116,111,32,97,32,46,112,121,32,102,
+    105,108,101,44,32,114,101,116,117,114,110,32,116,104,101,32,
+    112,97,116,104,32,116,111,32,105,116,115,32,46,112,121,99,
+    32,102,105,108,101,46,10,10,32,32,32,32,84,104,101,32,
+    46,112,121,32,102,105,108,101,32,100,111,101,115,32,110,111,
+    116,32,110,101,101,100,32,116,111,32,101,120,105,115,116,59,
+    32,116,104,105,115,32,115,105,109,112,108,121,32,114,101,116,
+    117,114,110,115,32,116,104,101,32,112,97,116,104,32,116,111,
+    32,116,104,101,10,32,32,32,32,46,112,121,99,32,102,105,
+    108,101,32,99,97,108,99,117,108,97,116,101,100,32,97,115,
+    32,105,102,32,116,104,101,32,46,112,121,32,102,105,108,101,
+    32,119,101,114,101,32,105,109,112,111,114,116,101,100,46,10,
+    10,32,32,32,32,84,104,101,32,39,111,112,116,105,109,105,
+    122,97,116,105,111,110,39,32,112,97,114,97,109,101,116,101,
+    114,32,99,111,110,116,114,111,108,115,32,116,104,101,32,112,
+    114,101,115,117,109,101,100,32,111,112,116,105,109,105,122,97,
+    116,105,111,110,32,108,101,118,101,108,32,111,102,10,32,32,
+    32,32,116,104,101,32,98,121,116,101,99,111,100,101,32,102,
+    105,108,101,46,32,73,102,32,39,111,112,116,105,109,105,122,
+    97,116,105,111,110,39,32,105,115,32,110,111,116,32,78,111,
+    110,101,44,32,116,104,101,32,115,116,114,105,110,103,32,114,
+    101,112,114,101,115,101,110,116,97,116,105,111,110,10,32,32,
+    32,32,111,102,32,116,104,101,32,97,114,103,117,109,101,110,
+    116,32,105,115,32,116,97,107,101,110,32,97,110,100,32,118,
+    101,114,105,102,105,101,100,32,116,111,32,98,101,32,97,108,
+    112,104,97,110,117,109,101,114,105,99,32,40,101,108,115,101,
+    32,86,97,108,117,101,69,114,114,111,114,10,32,32,32,32,
+    105,115,32,114,97,105,115,101,100,41,46,10,10,32,32,32,
+    32,84,104,101,32,100,101,98,117,103,95,111,118,101,114,114,
+    105,100,101,32,112,97,114,97,109,101,116,101,114,32,105,115,
+    32,100,101,112,114,101,99,97,116,101,100,46,32,73,102,32,
+    100,101,98,117,103,95,111,118,101,114,114,105,100,101,32,105,
+    115,32,110,111,116,32,78,111,110,101,44,10,32,32,32,32,
+    97,32,84,114,117,101,32,118,97,108,117,101,32,105,115,32,
+    116,104,101,32,115,97,109,101,32,97,115,32,115,101,116,116,
+    105,110,103,32,39,111,112,116,105,109,105,122,97,116,105,111,
+    110,39,32,116,111,32,116,104,101,32,101,109,112,116,121,32,
+    115,116,114,105,110,103,10,32,32,32,32,119,104,105,108,101,
+    32,97,32,70,97,108,115,101,32,118,97,108,117,101,32,105,
+    115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32,
+    115,101,116,116,105,110,103,32,39,111,112,116,105,109,105,122,
+    97,116,105,111,110,39,32,116,111,32,39,49,39,46,10,10,
+    32,32,32,32,73,102,32,115,121,115,46,105,109,112,108,101,
+    109,101,110,116,97,116,105,111,110,46,99,97,99,104,101,95,
+    116,97,103,32,105,115,32,78,111,110,101,32,116,104,101,110,
+    32,78,111,116,73,109,112,108,101,109,101,110,116,101,100,69,
+    114,114,111,114,32,105,115,32,114,97,105,115,101,100,46,10,
+    10,32,32,32,32,78,122,70,116,104,101,32,100,101,98,117,
+    103,95,111,118,101,114,114,105,100,101,32,112,97,114,97,109,
+    101,116,101,114,32,105,115,32,100,101,112,114,101,99,97,116,
+    101,100,59,32,117,115,101,32,39,111,112,116,105,109,105,122,
+    97,116,105,111,110,39,32,105,110,115,116,101,97,100,122,50,
+    100,101,98,117,103,95,111,118,101,114,114,105,100,101,32,111,
+    114,32,111,112,116,105,109,105,122,97,116,105,111,110,32,109,
+    117,115,116,32,98,101,32,115,101,116,32,116,111,32,78,111,
+    110,101,114,30,0,0,0,114,29,0,0,0,218,1,46,122,
+    36,115,121,115,46,105,109,112,108,101,109,101,110,116,97,116,
+    105,111,110,46,99,97,99,104,101,95,116,97,103,32,105,115,
+    32,78,111,110,101,233,0,0,0,0,122,24,123,33,114,125,
+    32,105,115,32,110,111,116,32,97,108,112,104,97,110,117,109,
+    101,114,105,99,122,7,123,125,46,123,125,123,125,41,21,218,
+    9,95,119,97,114,110,105,110,103,115,218,4,119,97,114,110,
+    218,18,68,101,112,114,101,99,97,116,105,111,110,87,97,114,
+    110,105,110,103,218,9,84,121,112,101,69,114,114,111,114,114,
+    38,0,0,0,114,32,0,0,0,114,7,0,0,0,218,14,
+    105,109,112,108,101,109,101,110,116,97,116,105,111,110,218,9,
+    99,97,99,104,101,95,116,97,103,218,19,78,111,116,73,109,
+    112,108,101,109,101,110,116,101,100,69,114,114,111,114,114,26,
+    0,0,0,218,5,102,108,97,103,115,218,8,111,112,116,105,
+    109,105,122,101,218,3,115,116,114,218,7,105,115,97,108,110,
+    117,109,218,10,86,97,108,117,101,69,114,114,111,114,114,47,
+    0,0,0,218,4,95,79,80,84,114,28,0,0,0,218,8,
+    95,80,89,67,65,67,72,69,218,17,66,89,84,69,67,79,
+    68,69,95,83,85,70,70,73,88,69,83,41,11,114,35,0,
+    0,0,90,14,100,101,98,117,103,95,111,118,101,114,114,105,
+    100,101,114,57,0,0,0,218,7,109,101,115,115,97,103,101,
+    218,4,104,101,97,100,114,37,0,0,0,90,4,98,97,115,
+    101,218,3,115,101,112,218,4,114,101,115,116,90,3,116,97,
+    103,90,15,97,108,109,111,115,116,95,102,105,108,101,110,97,
+    109,101,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
+    0,218,17,99,97,99,104,101,95,102,114,111,109,95,115,111,
+    117,114,99,101,241,0,0,0,115,46,0,0,0,0,18,12,
+    1,9,1,7,1,12,1,6,1,12,1,18,1,18,1,24,
+    1,12,1,12,1,12,1,36,1,12,1,18,1,9,2,12,
+    1,12,1,12,1,12,1,21,1,21,1,114,79,0,0,0,
+    99,1,0,0,0,0,0,0,0,8,0,0,0,5,0,0,
+    0,67,0,0,0,115,62,1,0,0,116,0,0,106,1,0,
+    106,2,0,100,1,0,107,8,0,114,30,0,116,3,0,100,
+    2,0,131,1,0,130,1,0,116,4,0,124,0,0,131,1,
+    0,92,2,0,125,1,0,125,2,0,116,4,0,124,1,0,
+    131,1,0,92,2,0,125,1,0,125,3,0,124,3,0,116,
+    5,0,107,3,0,114,102,0,116,6,0,100,3,0,106,7,
+    0,116,5,0,124,0,0,131,2,0,131,1,0,130,1,0,
+    124,2,0,106,8,0,100,4,0,131,1,0,125,4,0,124,
+    4,0,100,11,0,107,7,0,114,153,0,116,6,0,100,7,
+    0,106,7,0,124,2,0,131,1,0,131,1,0,130,1,0,
+    110,125,0,124,4,0,100,6,0,107,2,0,114,22,1,124,
+    2,0,106,9,0,100,4,0,100,5,0,131,2,0,100,12,
+    0,25,125,5,0,124,5,0,106,10,0,116,11,0,131,1,
+    0,115,223,0,116,6,0,100,8,0,106,7,0,116,11,0,
+    131,1,0,131,1,0,130,1,0,124,5,0,116,12,0,116,
+    11,0,131,1,0,100,1,0,133,2,0,25,125,6,0,124,
+    6,0,106,13,0,131,0,0,115,22,1,116,6,0,100,9,
+    0,106,7,0,124,5,0,131,1,0,131,1,0,130,1,0,
+    124,2,0,106,14,0,100,4,0,131,1,0,100,10,0,25,
+    125,7,0,116,15,0,124,1,0,124,7,0,116,16,0,100,
+    10,0,25,23,131,2,0,83,41,13,97,110,1,0,0,71,
+    105,118,101,110,32,116,104,101,32,112,97,116,104,32,116,111,
+    32,97,32,46,112,121,99,46,32,102,105,108,101,44,32,114,
+    101,116,117,114,110,32,116,104,101,32,112,97,116,104,32,116,
+    111,32,105,116,115,32,46,112,121,32,102,105,108,101,46,10,
+    10,32,32,32,32,84,104,101,32,46,112,121,99,32,102,105,
+    108,101,32,100,111,101,115,32,110,111,116,32,110,101,101,100,
+    32,116,111,32,101,120,105,115,116,59,32,116,104,105,115,32,
+    115,105,109,112,108,121,32,114,101,116,117,114,110,115,32,116,
+    104,101,32,112,97,116,104,32,116,111,10,32,32,32,32,116,
+    104,101,32,46,112,121,32,102,105,108,101,32,99,97,108,99,
+    117,108,97,116,101,100,32,116,111,32,99,111,114,114,101,115,
+    112,111,110,100,32,116,111,32,116,104,101,32,46,112,121,99,
+    32,102,105,108,101,46,32,32,73,102,32,112,97,116,104,32,
+    100,111,101,115,10,32,32,32,32,110,111,116,32,99,111,110,
+    102,111,114,109,32,116,111,32,80,69,80,32,51,49,52,55,
+    47,52,56,56,32,102,111,114,109,97,116,44,32,86,97,108,
+    117,101,69,114,114,111,114,32,119,105,108,108,32,98,101,32,
+    114,97,105,115,101,100,46,32,73,102,10,32,32,32,32,115,
+    121,115,46,105,109,112,108,101,109,101,110,116,97,116,105,111,
+    110,46,99,97,99,104,101,95,116,97,103,32,105,115,32,78,
+    111,110,101,32,116,104,101,110,32,78,111,116,73,109,112,108,
+    101,109,101,110,116,101,100,69,114,114,111,114,32,105,115,32,
+    114,97,105,115,101,100,46,10,10,32,32,32,32,78,122,36,
     115,121,115,46,105,109,112,108,101,109,101,110,116,97,116,105,
     111,110,46,99,97,99,104,101,95,116,97,103,32,105,115,32,
-    78,111,110,101,233,0,0,0,0,122,24,123,33,114,125,32,
-    105,115,32,110,111,116,32,97,108,112,104,97,110,117,109,101,
-    114,105,99,122,7,123,125,46,123,125,123,125,41,21,218,9,
-    95,119,97,114,110,105,110,103,115,218,4,119,97,114,110,218,
-    18,68,101,112,114,101,99,97,116,105,111,110,87,97,114,110,
-    105,110,103,218,9,84,121,112,101,69,114,114,111,114,114,38,
-    0,0,0,114,32,0,0,0,114,7,0,0,0,218,14,105,
-    109,112,108,101,109,101,110,116,97,116,105,111,110,218,9,99,
-    97,99,104,101,95,116,97,103,218,19,78,111,116,73,109,112,
-    108,101,109,101,110,116,101,100,69,114,114,111,114,114,26,0,
-    0,0,218,5,102,108,97,103,115,218,8,111,112,116,105,109,
-    105,122,101,218,3,115,116,114,218,7,105,115,97,108,110,117,
-    109,218,10,86,97,108,117,101,69,114,114,111,114,114,47,0,
-    0,0,218,4,95,79,80,84,114,28,0,0,0,218,8,95,
-    80,89,67,65,67,72,69,218,17,66,89,84,69,67,79,68,
-    69,95,83,85,70,70,73,88,69,83,41,11,114,35,0,0,
-    0,90,14,100,101,98,117,103,95,111,118,101,114,114,105,100,
-    101,114,57,0,0,0,218,7,109,101,115,115,97,103,101,218,
-    4,104,101,97,100,114,37,0,0,0,90,4,98,97,115,101,
-    218,3,115,101,112,218,4,114,101,115,116,90,3,116,97,103,
-    90,15,97,108,109,111,115,116,95,102,105,108,101,110,97,109,
-    101,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
-    218,17,99,97,99,104,101,95,102,114,111,109,95,115,111,117,
-    114,99,101,241,0,0,0,115,46,0,0,0,0,18,12,1,
-    9,1,7,1,12,1,6,1,12,1,18,1,18,1,24,1,
-    12,1,12,1,12,1,36,1,12,1,18,1,9,2,12,1,
-    12,1,12,1,12,1,21,1,21,1,114,79,0,0,0,99,
-    1,0,0,0,0,0,0,0,8,0,0,0,5,0,0,0,
-    67,0,0,0,115,62,1,0,0,116,0,0,106,1,0,106,
-    2,0,100,1,0,107,8,0,114,30,0,116,3,0,100,2,
-    0,131,1,0,130,1,0,116,4,0,124,0,0,131,1,0,
-    92,2,0,125,1,0,125,2,0,116,4,0,124,1,0,131,
-    1,0,92,2,0,125,1,0,125,3,0,124,3,0,116,5,
-    0,107,3,0,114,102,0,116,6,0,100,3,0,106,7,0,
-    116,5,0,124,0,0,131,2,0,131,1,0,130,1,0,124,
-    2,0,106,8,0,100,4,0,131,1,0,125,4,0,124,4,
-    0,100,11,0,107,7,0,114,153,0,116,6,0,100,7,0,
-    106,7,0,124,2,0,131,1,0,131,1,0,130,1,0,110,
-    125,0,124,4,0,100,6,0,107,2,0,114,22,1,124,2,
-    0,106,9,0,100,4,0,100,5,0,131,2,0,100,12,0,
-    25,125,5,0,124,5,0,106,10,0,116,11,0,131,1,0,
-    115,223,0,116,6,0,100,8,0,106,7,0,116,11,0,131,
-    1,0,131,1,0,130,1,0,124,5,0,116,12,0,116,11,
-    0,131,1,0,100,1,0,133,2,0,25,125,6,0,124,6,
-    0,106,13,0,131,0,0,115,22,1,116,6,0,100,9,0,
-    106,7,0,124,5,0,131,1,0,131,1,0,130,1,0,124,
-    2,0,106,14,0,100,4,0,131,1,0,100,10,0,25,125,
-    7,0,116,15,0,124,1,0,124,7,0,116,16,0,100,10,
-    0,25,23,131,2,0,83,41,13,97,110,1,0,0,71,105,
-    118,101,110,32,116,104,101,32,112,97,116,104,32,116,111,32,
-    97,32,46,112,121,99,46,32,102,105,108,101,44,32,114,101,
-    116,117,114,110,32,116,104,101,32,112,97,116,104,32,116,111,
-    32,105,116,115,32,46,112,121,32,102,105,108,101,46,10,10,
-    32,32,32,32,84,104,101,32,46,112,121,99,32,102,105,108,
-    101,32,100,111,101,115,32,110,111,116,32,110,101,101,100,32,
-    116,111,32,101,120,105,115,116,59,32,116,104,105,115,32,115,
-    105,109,112,108,121,32,114,101,116,117,114,110,115,32,116,104,
-    101,32,112,97,116,104,32,116,111,10,32,32,32,32,116,104,
-    101,32,46,112,121,32,102,105,108,101,32,99,97,108,99,117,
-    108,97,116,101,100,32,116,111,32,99,111,114,114,101,115,112,
-    111,110,100,32,116,111,32,116,104,101,32,46,112,121,99,32,
-    102,105,108,101,46,32,32,73,102,32,112,97,116,104,32,100,
-    111,101,115,10,32,32,32,32,110,111,116,32,99,111,110,102,
-    111,114,109,32,116,111,32,80,69,80,32,51,49,52,55,47,
-    52,56,56,32,102,111,114,109,97,116,44,32,86,97,108,117,
-    101,69,114,114,111,114,32,119,105,108,108,32,98,101,32,114,
-    97,105,115,101,100,46,32,73,102,10,32,32,32,32,115,121,
-    115,46,105,109,112,108,101,109,101,110,116,97,116,105,111,110,
-    46,99,97,99,104,101,95,116,97,103,32,105,115,32,78,111,
-    110,101,32,116,104,101,110,32,78,111,116,73,109,112,108,101,
-    109,101,110,116,101,100,69,114,114,111,114,32,105,115,32,114,
-    97,105,115,101,100,46,10,10,32,32,32,32,78,122,36,115,
-    121,115,46,105,109,112,108,101,109,101,110,116,97,116,105,111,
-    110,46,99,97,99,104,101,95,116,97,103,32,105,115,32,78,
-    111,110,101,122,37,123,125,32,110,111,116,32,98,111,116,116,
-    111,109,45,108,101,118,101,108,32,100,105,114,101,99,116,111,
-    114,121,32,105,110,32,123,33,114,125,114,58,0,0,0,114,
-    56,0,0,0,233,3,0,0,0,122,33,101,120,112,101,99,
-    116,101,100,32,111,110,108,121,32,50,32,111,114,32,51,32,
-    100,111,116,115,32,105,110,32,123,33,114,125,122,57,111,112,
-    116,105,109,105,122,97,116,105,111,110,32,112,111,114,116,105,
-    111,110,32,111,102,32,102,105,108,101,110,97,109,101,32,100,
-    111,101,115,32,110,111,116,32,115,116,97,114,116,32,119,105,
-    116,104,32,123,33,114,125,122,52,111,112,116,105,109,105,122,
-    97,116,105,111,110,32,108,101,118,101,108,32,123,33,114,125,
-    32,105,115,32,110,111,116,32,97,110,32,97,108,112,104,97,
-    110,117,109,101,114,105,99,32,118,97,108,117,101,114,59,0,
-    0,0,62,2,0,0,0,114,56,0,0,0,114,80,0,0,
-    0,233,254,255,255,255,41,17,114,7,0,0,0,114,64,0,
-    0,0,114,65,0,0,0,114,66,0,0,0,114,38,0,0,
-    0,114,73,0,0,0,114,71,0,0,0,114,47,0,0,0,
-    218,5,99,111,117,110,116,114,34,0,0,0,114,9,0,0,
-    0,114,72,0,0,0,114,31,0,0,0,114,70,0,0,0,
-    218,9,112,97,114,116,105,116,105,111,110,114,28,0,0,0,
-    218,15,83,79,85,82,67,69,95,83,85,70,70,73,88,69,
-    83,41,8,114,35,0,0,0,114,76,0,0,0,90,16,112,
-    121,99,97,99,104,101,95,102,105,108,101,110,97,109,101,90,
-    7,112,121,99,97,99,104,101,90,9,100,111,116,95,99,111,
-    117,110,116,114,57,0,0,0,90,9,111,112,116,95,108,101,
-    118,101,108,90,13,98,97,115,101,95,102,105,108,101,110,97,
+    78,111,110,101,122,37,123,125,32,110,111,116,32,98,111,116,
+    116,111,109,45,108,101,118,101,108,32,100,105,114,101,99,116,
+    111,114,121,32,105,110,32,123,33,114,125,114,58,0,0,0,
+    114,56,0,0,0,233,3,0,0,0,122,33,101,120,112,101,
+    99,116,101,100,32,111,110,108,121,32,50,32,111,114,32,51,
+    32,100,111,116,115,32,105,110,32,123,33,114,125,122,57,111,
+    112,116,105,109,105,122,97,116,105,111,110,32,112,111,114,116,
+    105,111,110,32,111,102,32,102,105,108,101,110,97,109,101,32,
+    100,111,101,115,32,110,111,116,32,115,116,97,114,116,32,119,
+    105,116,104,32,123,33,114,125,122,52,111,112,116,105,109,105,
+    122,97,116,105,111,110,32,108,101,118,101,108,32,123,33,114,
+    125,32,105,115,32,110,111,116,32,97,110,32,97,108,112,104,
+    97,110,117,109,101,114,105,99,32,118,97,108,117,101,114,59,
+    0,0,0,62,2,0,0,0,114,56,0,0,0,114,80,0,
+    0,0,233,254,255,255,255,41,17,114,7,0,0,0,114,64,
+    0,0,0,114,65,0,0,0,114,66,0,0,0,114,38,0,
+    0,0,114,73,0,0,0,114,71,0,0,0,114,47,0,0,
+    0,218,5,99,111,117,110,116,114,34,0,0,0,114,9,0,
+    0,0,114,72,0,0,0,114,31,0,0,0,114,70,0,0,
+    0,218,9,112,97,114,116,105,116,105,111,110,114,28,0,0,
+    0,218,15,83,79,85,82,67,69,95,83,85,70,70,73,88,
+    69,83,41,8,114,35,0,0,0,114,76,0,0,0,90,16,
+    112,121,99,97,99,104,101,95,102,105,108,101,110,97,109,101,
+    90,7,112,121,99,97,99,104,101,90,9,100,111,116,95,99,
+    111,117,110,116,114,57,0,0,0,90,9,111,112,116,95,108,
+    101,118,101,108,90,13,98,97,115,101,95,102,105,108,101,110,
+    97,109,101,114,4,0,0,0,114,4,0,0,0,114,5,0,
+    0,0,218,17,115,111,117,114,99,101,95,102,114,111,109,95,
+    99,97,99,104,101,29,1,0,0,115,44,0,0,0,0,9,
+    18,1,12,1,18,1,18,1,12,1,9,1,15,1,15,1,
+    12,1,9,1,15,1,12,1,22,1,15,1,9,1,12,1,
+    22,1,12,1,9,1,12,1,19,1,114,85,0,0,0,99,
+    1,0,0,0,0,0,0,0,5,0,0,0,12,0,0,0,
+    67,0,0,0,115,164,0,0,0,116,0,0,124,0,0,131,
+    1,0,100,1,0,107,2,0,114,22,0,100,2,0,83,124,
+    0,0,106,1,0,100,3,0,131,1,0,92,3,0,125,1,
+    0,125,2,0,125,3,0,124,1,0,12,115,81,0,124,3,
+    0,106,2,0,131,0,0,100,7,0,100,8,0,133,2,0,
+    25,100,6,0,107,3,0,114,85,0,124,0,0,83,121,16,
+    0,116,3,0,124,0,0,131,1,0,125,4,0,87,110,40,
+    0,4,116,4,0,116,5,0,102,2,0,107,10,0,114,143,
+    0,1,1,1,124,0,0,100,2,0,100,9,0,133,2,0,
+    25,125,4,0,89,110,1,0,88,116,6,0,124,4,0,131,
+    1,0,114,160,0,124,4,0,83,124,0,0,83,41,10,122,
+    188,67,111,110,118,101,114,116,32,97,32,98,121,116,101,99,
+    111,100,101,32,102,105,108,101,32,112,97,116,104,32,116,111,
+    32,97,32,115,111,117,114,99,101,32,112,97,116,104,32,40,
+    105,102,32,112,111,115,115,105,98,108,101,41,46,10,10,32,
+    32,32,32,84,104,105,115,32,102,117,110,99,116,105,111,110,
+    32,101,120,105,115,116,115,32,112,117,114,101,108,121,32,102,
+    111,114,32,98,97,99,107,119,97,114,100,115,45,99,111,109,
+    112,97,116,105,98,105,108,105,116,121,32,102,111,114,10,32,
+    32,32,32,80,121,73,109,112,111,114,116,95,69,120,101,99,
+    67,111,100,101,77,111,100,117,108,101,87,105,116,104,70,105,
+    108,101,110,97,109,101,115,40,41,32,105,110,32,116,104,101,
+    32,67,32,65,80,73,46,10,10,32,32,32,32,114,59,0,
+    0,0,78,114,58,0,0,0,114,80,0,0,0,114,29,0,
+    0,0,90,2,112,121,233,253,255,255,255,233,255,255,255,255,
+    114,87,0,0,0,41,7,114,31,0,0,0,114,32,0,0,
+    0,218,5,108,111,119,101,114,114,85,0,0,0,114,66,0,
+    0,0,114,71,0,0,0,114,44,0,0,0,41,5,218,13,
+    98,121,116,101,99,111,100,101,95,112,97,116,104,114,78,0,
+    0,0,114,36,0,0,0,90,9,101,120,116,101,110,115,105,
+    111,110,218,11,115,111,117,114,99,101,95,112,97,116,104,114,
+    4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,15,
+    95,103,101,116,95,115,111,117,114,99,101,102,105,108,101,62,
+    1,0,0,115,20,0,0,0,0,7,18,1,4,1,24,1,
+    35,1,4,1,3,1,16,1,19,1,21,1,114,91,0,0,
+    0,99,1,0,0,0,0,0,0,0,1,0,0,0,11,0,
+    0,0,67,0,0,0,115,92,0,0,0,124,0,0,106,0,
+    0,116,1,0,116,2,0,131,1,0,131,1,0,114,59,0,
+    121,14,0,116,3,0,124,0,0,131,1,0,83,87,113,88,
+    0,4,116,4,0,107,10,0,114,55,0,1,1,1,89,113,
+    88,0,88,110,29,0,124,0,0,106,0,0,116,1,0,116,
+    5,0,131,1,0,131,1,0,114,84,0,124,0,0,83,100,
+    0,0,83,100,0,0,83,41,1,78,41,6,218,8,101,110,
+    100,115,119,105,116,104,218,5,116,117,112,108,101,114,84,0,
+    0,0,114,79,0,0,0,114,66,0,0,0,114,74,0,0,
+    0,41,1,218,8,102,105,108,101,110,97,109,101,114,4,0,
+    0,0,114,4,0,0,0,114,5,0,0,0,218,11,95,103,
+    101,116,95,99,97,99,104,101,100,81,1,0,0,115,16,0,
+    0,0,0,1,21,1,3,1,14,1,13,1,8,1,21,1,
+    4,2,114,95,0,0,0,99,1,0,0,0,0,0,0,0,
+    2,0,0,0,11,0,0,0,67,0,0,0,115,60,0,0,
+    0,121,19,0,116,0,0,124,0,0,131,1,0,106,1,0,
+    125,1,0,87,110,24,0,4,116,2,0,107,10,0,114,45,
+    0,1,1,1,100,1,0,125,1,0,89,110,1,0,88,124,
+    1,0,100,2,0,79,125,1,0,124,1,0,83,41,3,122,
+    51,67,97,108,99,117,108,97,116,101,32,116,104,101,32,109,
+    111,100,101,32,112,101,114,109,105,115,115,105,111,110,115,32,
+    102,111,114,32,97,32,98,121,116,101,99,111,100,101,32,102,
+    105,108,101,46,105,182,1,0,0,233,128,0,0,0,41,3,
+    114,39,0,0,0,114,41,0,0,0,114,40,0,0,0,41,
+    2,114,35,0,0,0,114,42,0,0,0,114,4,0,0,0,
+    114,4,0,0,0,114,5,0,0,0,218,10,95,99,97,108,
+    99,95,109,111,100,101,93,1,0,0,115,12,0,0,0,0,
+    2,3,1,19,1,13,1,11,3,10,1,114,97,0,0,0,
+    218,9,118,101,114,98,111,115,105,116,121,114,29,0,0,0,
+    99,1,0,0,0,1,0,0,0,3,0,0,0,4,0,0,
+    0,71,0,0,0,115,75,0,0,0,116,0,0,106,1,0,
+    106,2,0,124,1,0,107,5,0,114,71,0,124,0,0,106,
+    3,0,100,6,0,131,1,0,115,43,0,100,3,0,124,0,
+    0,23,125,0,0,116,4,0,124,0,0,106,5,0,124,2,
+    0,140,0,0,100,4,0,116,0,0,106,6,0,131,1,1,
+    1,100,5,0,83,41,7,122,61,80,114,105,110,116,32,116,
+    104,101,32,109,101,115,115,97,103,101,32,116,111,32,115,116,
+    100,101,114,114,32,105,102,32,45,118,47,80,89,84,72,79,
+    78,86,69,82,66,79,83,69,32,105,115,32,116,117,114,110,
+    101,100,32,111,110,46,250,1,35,250,7,105,109,112,111,114,
+    116,32,122,2,35,32,114,54,0,0,0,78,41,2,114,99,
+    0,0,0,114,100,0,0,0,41,7,114,7,0,0,0,114,
+    67,0,0,0,218,7,118,101,114,98,111,115,101,114,9,0,
+    0,0,218,5,112,114,105,110,116,114,47,0,0,0,218,6,
+    115,116,100,101,114,114,41,3,114,75,0,0,0,114,98,0,
+    0,0,218,4,97,114,103,115,114,4,0,0,0,114,4,0,
+    0,0,114,5,0,0,0,218,16,95,118,101,114,98,111,115,
+    101,95,109,101,115,115,97,103,101,105,1,0,0,115,8,0,
+    0,0,0,2,18,1,15,1,10,1,114,105,0,0,0,99,
+    1,0,0,0,0,0,0,0,3,0,0,0,11,0,0,0,
+    3,0,0,0,115,84,0,0,0,100,1,0,135,0,0,102,
+    1,0,100,2,0,100,3,0,134,1,0,125,1,0,121,13,
+    0,116,0,0,106,1,0,125,2,0,87,110,30,0,4,116,
+    2,0,107,10,0,114,66,0,1,1,1,100,4,0,100,5,
+    0,132,0,0,125,2,0,89,110,1,0,88,124,2,0,124,
+    1,0,136,0,0,131,2,0,1,124,1,0,83,41,6,122,
+    252,68,101,99,111,114,97,116,111,114,32,116,111,32,118,101,
+    114,105,102,121,32,116,104,97,116,32,116,104,101,32,109,111,
+    100,117,108,101,32,98,101,105,110,103,32,114,101,113,117,101,
+    115,116,101,100,32,109,97,116,99,104,101,115,32,116,104,101,
+    32,111,110,101,32,116,104,101,10,32,32,32,32,108,111,97,
+    100,101,114,32,99,97,110,32,104,97,110,100,108,101,46,10,
+    10,32,32,32,32,84,104,101,32,102,105,114,115,116,32,97,
+    114,103,117,109,101,110,116,32,40,115,101,108,102,41,32,109,
+    117,115,116,32,100,101,102,105,110,101,32,95,110,97,109,101,
+    32,119,104,105,99,104,32,116,104,101,32,115,101,99,111,110,
+    100,32,97,114,103,117,109,101,110,116,32,105,115,10,32,32,
+    32,32,99,111,109,112,97,114,101,100,32,97,103,97,105,110,
+    115,116,46,32,73,102,32,116,104,101,32,99,111,109,112,97,
+    114,105,115,111,110,32,102,97,105,108,115,32,116,104,101,110,
+    32,73,109,112,111,114,116,69,114,114,111,114,32,105,115,32,
+    114,97,105,115,101,100,46,10,10,32,32,32,32,78,99,2,
+    0,0,0,0,0,0,0,4,0,0,0,5,0,0,0,31,
+    0,0,0,115,80,0,0,0,124,1,0,100,0,0,107,8,
+    0,114,24,0,124,0,0,106,0,0,125,1,0,110,37,0,
+    124,0,0,106,0,0,124,1,0,107,3,0,114,61,0,116,
+    1,0,100,1,0,124,1,0,22,100,2,0,124,1,0,131,
+    1,1,130,1,0,136,0,0,124,0,0,124,1,0,124,2,
+    0,124,3,0,142,2,0,83,41,3,78,122,23,108,111,97,
+    100,101,114,32,99,97,110,110,111,116,32,104,97,110,100,108,
+    101,32,37,115,218,4,110,97,109,101,41,2,114,106,0,0,
+    0,218,11,73,109,112,111,114,116,69,114,114,111,114,41,4,
+    218,4,115,101,108,102,114,106,0,0,0,114,104,0,0,0,
+    90,6,107,119,97,114,103,115,41,1,218,6,109,101,116,104,
+    111,100,114,4,0,0,0,114,5,0,0,0,218,19,95,99,
+    104,101,99,107,95,110,97,109,101,95,119,114,97,112,112,101,
+    114,121,1,0,0,115,10,0,0,0,0,1,12,1,12,1,
+    15,1,22,1,122,40,95,99,104,101,99,107,95,110,97,109,
+    101,46,60,108,111,99,97,108,115,62,46,95,99,104,101,99,
+    107,95,110,97,109,101,95,119,114,97,112,112,101,114,99,2,
+    0,0,0,0,0,0,0,3,0,0,0,7,0,0,0,83,
+    0,0,0,115,92,0,0,0,120,66,0,100,1,0,100,2,
+    0,100,3,0,100,4,0,103,4,0,68,93,46,0,125,2,
+    0,116,0,0,124,1,0,124,2,0,131,2,0,114,19,0,
+    116,1,0,124,0,0,124,2,0,116,2,0,124,1,0,124,
+    2,0,131,2,0,131,3,0,1,113,19,0,87,124,0,0,
+    106,3,0,106,4,0,124,1,0,106,3,0,131,1,0,1,
+    100,0,0,83,41,5,78,218,10,95,95,109,111,100,117,108,
+    101,95,95,218,8,95,95,110,97,109,101,95,95,218,12,95,
+    95,113,117,97,108,110,97,109,101,95,95,218,7,95,95,100,
+    111,99,95,95,41,5,218,7,104,97,115,97,116,116,114,218,
+    7,115,101,116,97,116,116,114,218,7,103,101,116,97,116,116,
+    114,218,8,95,95,100,105,99,116,95,95,218,6,117,112,100,
+    97,116,101,41,3,90,3,110,101,119,90,3,111,108,100,114,
+    52,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
+    0,0,0,218,5,95,119,114,97,112,131,1,0,0,115,8,
+    0,0,0,0,1,25,1,15,1,29,1,122,26,95,99,104,
+    101,99,107,95,110,97,109,101,46,60,108,111,99,97,108,115,
+    62,46,95,119,114,97,112,41,3,218,10,95,98,111,111,116,
+    115,116,114,97,112,114,120,0,0,0,218,9,78,97,109,101,
+    69,114,114,111,114,41,3,114,109,0,0,0,114,110,0,0,
+    0,114,120,0,0,0,114,4,0,0,0,41,1,114,109,0,
+    0,0,114,5,0,0,0,218,11,95,99,104,101,99,107,95,
+    110,97,109,101,113,1,0,0,115,14,0,0,0,0,8,21,
+    6,3,1,13,1,13,2,17,5,13,1,114,123,0,0,0,
+    99,2,0,0,0,0,0,0,0,5,0,0,0,4,0,0,
+    0,67,0,0,0,115,84,0,0,0,124,0,0,106,0,0,
+    124,1,0,131,1,0,92,2,0,125,2,0,125,3,0,124,
+    2,0,100,1,0,107,8,0,114,80,0,116,1,0,124,3,
+    0,131,1,0,114,80,0,100,2,0,125,4,0,116,2,0,
+    106,3,0,124,4,0,106,4,0,124,3,0,100,3,0,25,
+    131,1,0,116,5,0,131,2,0,1,124,2,0,83,41,4,
+    122,155,84,114,121,32,116,111,32,102,105,110,100,32,97,32,
+    108,111,97,100,101,114,32,102,111,114,32,116,104,101,32,115,
+    112,101,99,105,102,105,101,100,32,109,111,100,117,108,101,32,
+    98,121,32,100,101,108,101,103,97,116,105,110,103,32,116,111,
+    10,32,32,32,32,115,101,108,102,46,102,105,110,100,95,108,
+    111,97,100,101,114,40,41,46,10,10,32,32,32,32,84,104,
+    105,115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,
+    114,101,99,97,116,101,100,32,105,110,32,102,97,118,111,114,
+    32,111,102,32,102,105,110,100,101,114,46,102,105,110,100,95,
+    115,112,101,99,40,41,46,10,10,32,32,32,32,78,122,44,
+    78,111,116,32,105,109,112,111,114,116,105,110,103,32,100,105,
+    114,101,99,116,111,114,121,32,123,125,58,32,109,105,115,115,
+    105,110,103,32,95,95,105,110,105,116,95,95,114,59,0,0,
+    0,41,6,218,11,102,105,110,100,95,108,111,97,100,101,114,
+    114,31,0,0,0,114,60,0,0,0,114,61,0,0,0,114,
+    47,0,0,0,218,13,73,109,112,111,114,116,87,97,114,110,
+    105,110,103,41,5,114,108,0,0,0,218,8,102,117,108,108,
+    110,97,109,101,218,6,108,111,97,100,101,114,218,8,112,111,
+    114,116,105,111,110,115,218,3,109,115,103,114,4,0,0,0,
+    114,4,0,0,0,114,5,0,0,0,218,17,95,102,105,110,
+    100,95,109,111,100,117,108,101,95,115,104,105,109,140,1,0,
+    0,115,10,0,0,0,0,10,21,1,24,1,6,1,29,1,
+    114,130,0,0,0,99,2,0,0,0,0,0,0,0,4,0,
+    0,0,3,0,0,0,67,0,0,0,115,87,0,0,0,116,
+    0,0,124,1,0,124,0,0,131,2,0,125,2,0,124,1,
+    0,116,1,0,106,2,0,107,6,0,114,70,0,116,1,0,
+    106,2,0,124,1,0,25,125,3,0,116,3,0,106,4,0,
+    124,2,0,124,3,0,131,2,0,1,116,1,0,106,2,0,
+    124,1,0,25,83,116,3,0,106,5,0,124,2,0,131,1,
+    0,83,100,1,0,83,41,2,122,128,76,111,97,100,32,116,
+    104,101,32,115,112,101,99,105,102,105,101,100,32,109,111,100,
+    117,108,101,32,105,110,116,111,32,115,121,115,46,109,111,100,
+    117,108,101,115,32,97,110,100,32,114,101,116,117,114,110,32,
+    105,116,46,10,10,32,32,32,32,84,104,105,115,32,109,101,
+    116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,
+    101,100,46,32,32,85,115,101,32,108,111,97,100,101,114,46,
+    101,120,101,99,95,109,111,100,117,108,101,32,105,110,115,116,
+    101,97,100,46,10,10,32,32,32,32,78,41,6,218,16,115,
+    112,101,99,95,102,114,111,109,95,108,111,97,100,101,114,114,
+    7,0,0,0,218,7,109,111,100,117,108,101,115,114,121,0,
+    0,0,90,5,95,101,120,101,99,90,5,95,108,111,97,100,
+    41,4,114,108,0,0,0,114,126,0,0,0,218,4,115,112,
+    101,99,218,6,109,111,100,117,108,101,114,4,0,0,0,114,
+    4,0,0,0,114,5,0,0,0,218,17,95,108,111,97,100,
+    95,109,111,100,117,108,101,95,115,104,105,109,158,1,0,0,
+    115,12,0,0,0,0,6,15,1,15,1,13,1,16,1,11,
+    2,114,135,0,0,0,99,4,0,0,0,0,0,0,0,11,
+    0,0,0,19,0,0,0,67,0,0,0,115,228,1,0,0,
+    105,0,0,125,4,0,124,2,0,100,1,0,107,9,0,114,
+    31,0,124,2,0,124,4,0,100,2,0,60,110,6,0,100,
+    3,0,125,2,0,124,3,0,100,1,0,107,9,0,114,59,
+    0,124,3,0,124,4,0,100,4,0,60,124,0,0,100,1,
+    0,100,5,0,133,2,0,25,125,5,0,124,0,0,100,5,
+    0,100,6,0,133,2,0,25,125,6,0,124,0,0,100,6,
+    0,100,7,0,133,2,0,25,125,7,0,124,5,0,116,0,
+    0,107,3,0,114,165,0,100,8,0,106,1,0,124,2,0,
+    124,5,0,131,2,0,125,8,0,116,2,0,124,8,0,131,
+    1,0,1,116,3,0,124,8,0,124,4,0,141,1,0,130,
+    1,0,110,113,0,116,4,0,124,6,0,131,1,0,100,5,
+    0,107,3,0,114,223,0,100,9,0,106,1,0,124,2,0,
+    131,1,0,125,8,0,116,2,0,124,8,0,131,1,0,1,
+    116,5,0,124,8,0,131,1,0,130,1,0,110,55,0,116,
+    4,0,124,7,0,131,1,0,100,5,0,107,3,0,114,22,
+    1,100,10,0,106,1,0,124,2,0,131,1,0,125,8,0,
+    116,2,0,124,8,0,131,1,0,1,116,5,0,124,8,0,
+    131,1,0,130,1,0,124,1,0,100,1,0,107,9,0,114,
+    214,1,121,20,0,116,6,0,124,1,0,100,11,0,25,131,
+    1,0,125,9,0,87,110,18,0,4,116,7,0,107,10,0,
+    114,74,1,1,1,1,89,110,59,0,88,116,8,0,124,6,
+    0,131,1,0,124,9,0,107,3,0,114,133,1,100,12,0,
+    106,1,0,124,2,0,131,1,0,125,8,0,116,2,0,124,
+    8,0,131,1,0,1,116,3,0,124,8,0,124,4,0,141,
+    1,0,130,1,0,121,18,0,124,1,0,100,13,0,25,100,
+    14,0,64,125,10,0,87,110,18,0,4,116,7,0,107,10,
+    0,114,171,1,1,1,1,89,110,43,0,88,116,8,0,124,
+    7,0,131,1,0,124,10,0,107,3,0,114,214,1,116,3,
+    0,100,12,0,106,1,0,124,2,0,131,1,0,124,4,0,
+    141,1,0,130,1,0,124,0,0,100,7,0,100,1,0,133,
+    2,0,25,83,41,15,97,122,1,0,0,86,97,108,105,100,
+    97,116,101,32,116,104,101,32,104,101,97,100,101,114,32,111,
+    102,32,116,104,101,32,112,97,115,115,101,100,45,105,110,32,
+    98,121,116,101,99,111,100,101,32,97,103,97,105,110,115,116,
+    32,115,111,117,114,99,101,95,115,116,97,116,115,32,40,105,
+    102,10,32,32,32,32,103,105,118,101,110,41,32,97,110,100,
+    32,114,101,116,117,114,110,105,110,103,32,116,104,101,32,98,
+    121,116,101,99,111,100,101,32,116,104,97,116,32,99,97,110,
+    32,98,101,32,99,111,109,112,105,108,101,100,32,98,121,32,
+    99,111,109,112,105,108,101,40,41,46,10,10,32,32,32,32,
+    65,108,108,32,111,116,104,101,114,32,97,114,103,117,109,101,
+    110,116,115,32,97,114,101,32,117,115,101,100,32,116,111,32,
+    101,110,104,97,110,99,101,32,101,114,114,111,114,32,114,101,
+    112,111,114,116,105,110,103,46,10,10,32,32,32,32,73,109,
+    112,111,114,116,69,114,114,111,114,32,105,115,32,114,97,105,
+    115,101,100,32,119,104,101,110,32,116,104,101,32,109,97,103,
+    105,99,32,110,117,109,98,101,114,32,105,115,32,105,110,99,
+    111,114,114,101,99,116,32,111,114,32,116,104,101,32,98,121,
+    116,101,99,111,100,101,32,105,115,10,32,32,32,32,102,111,
+    117,110,100,32,116,111,32,98,101,32,115,116,97,108,101,46,
+    32,69,79,70,69,114,114,111,114,32,105,115,32,114,97,105,
+    115,101,100,32,119,104,101,110,32,116,104,101,32,100,97,116,
+    97,32,105,115,32,102,111,117,110,100,32,116,111,32,98,101,
+    10,32,32,32,32,116,114,117,110,99,97,116,101,100,46,10,
+    10,32,32,32,32,78,114,106,0,0,0,122,10,60,98,121,
+    116,101,99,111,100,101,62,114,35,0,0,0,114,12,0,0,
+    0,233,8,0,0,0,233,12,0,0,0,122,30,98,97,100,
+    32,109,97,103,105,99,32,110,117,109,98,101,114,32,105,110,
+    32,123,33,114,125,58,32,123,33,114,125,122,43,114,101,97,
+    99,104,101,100,32,69,79,70,32,119,104,105,108,101,32,114,
+    101,97,100,105,110,103,32,116,105,109,101,115,116,97,109,112,
+    32,105,110,32,123,33,114,125,122,48,114,101,97,99,104,101,
+    100,32,69,79,70,32,119,104,105,108,101,32,114,101,97,100,
+    105,110,103,32,115,105,122,101,32,111,102,32,115,111,117,114,
+    99,101,32,105,110,32,123,33,114,125,218,5,109,116,105,109,
+    101,122,26,98,121,116,101,99,111,100,101,32,105,115,32,115,
+    116,97,108,101,32,102,111,114,32,123,33,114,125,218,4,115,
+    105,122,101,108,3,0,0,0,255,127,255,127,3,0,41,9,
+    218,12,77,65,71,73,67,95,78,85,77,66,69,82,114,47,
+    0,0,0,114,105,0,0,0,114,107,0,0,0,114,31,0,
+    0,0,218,8,69,79,70,69,114,114,111,114,114,14,0,0,
+    0,218,8,75,101,121,69,114,114,111,114,114,19,0,0,0,
+    41,11,114,53,0,0,0,218,12,115,111,117,114,99,101,95,
+    115,116,97,116,115,114,106,0,0,0,114,35,0,0,0,90,
+    11,101,120,99,95,100,101,116,97,105,108,115,90,5,109,97,
+    103,105,99,90,13,114,97,119,95,116,105,109,101,115,116,97,
+    109,112,90,8,114,97,119,95,115,105,122,101,114,75,0,0,
+    0,218,12,115,111,117,114,99,101,95,109,116,105,109,101,218,
+    11,115,111,117,114,99,101,95,115,105,122,101,114,4,0,0,
+    0,114,4,0,0,0,114,5,0,0,0,218,25,95,118,97,
+    108,105,100,97,116,101,95,98,121,116,101,99,111,100,101,95,
+    104,101,97,100,101,114,173,1,0,0,115,76,0,0,0,0,
+    11,6,1,12,1,13,3,6,1,12,1,10,1,16,1,16,
+    1,16,1,12,1,18,1,10,1,18,1,18,1,15,1,10,
+    1,15,1,18,1,15,1,10,1,12,1,12,1,3,1,20,
+    1,13,1,5,2,18,1,15,1,10,1,15,1,3,1,18,
+    1,13,1,5,2,18,1,15,1,9,1,114,146,0,0,0,
+    99,4,0,0,0,0,0,0,0,5,0,0,0,6,0,0,
+    0,67,0,0,0,115,112,0,0,0,116,0,0,106,1,0,
+    124,0,0,131,1,0,125,4,0,116,2,0,124,4,0,116,
+    3,0,131,2,0,114,75,0,116,4,0,100,1,0,124,2,
+    0,131,2,0,1,124,3,0,100,2,0,107,9,0,114,71,
+    0,116,5,0,106,6,0,124,4,0,124,3,0,131,2,0,
+    1,124,4,0,83,116,7,0,100,3,0,106,8,0,124,2,
+    0,131,1,0,100,4,0,124,1,0,100,5,0,124,2,0,
+    131,1,2,130,1,0,100,2,0,83,41,6,122,60,67,111,
+    109,112,105,108,101,32,98,121,116,101,99,111,100,101,32,97,
+    115,32,114,101,116,117,114,110,101,100,32,98,121,32,95,118,
+    97,108,105,100,97,116,101,95,98,121,116,101,99,111,100,101,
+    95,104,101,97,100,101,114,40,41,46,122,21,99,111,100,101,
+    32,111,98,106,101,99,116,32,102,114,111,109,32,123,33,114,
+    125,78,122,23,78,111,110,45,99,111,100,101,32,111,98,106,
+    101,99,116,32,105,110,32,123,33,114,125,114,106,0,0,0,
+    114,35,0,0,0,41,9,218,7,109,97,114,115,104,97,108,
+    90,5,108,111,97,100,115,218,10,105,115,105,110,115,116,97,
+    110,99,101,218,10,95,99,111,100,101,95,116,121,112,101,114,
+    105,0,0,0,218,4,95,105,109,112,90,16,95,102,105,120,
+    95,99,111,95,102,105,108,101,110,97,109,101,114,107,0,0,
+    0,114,47,0,0,0,41,5,114,53,0,0,0,114,106,0,
+    0,0,114,89,0,0,0,114,90,0,0,0,218,4,99,111,
+    100,101,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
+    0,218,17,95,99,111,109,112,105,108,101,95,98,121,116,101,
+    99,111,100,101,228,1,0,0,115,16,0,0,0,0,2,15,
+    1,15,1,13,1,12,1,16,1,4,2,18,1,114,152,0,
+    0,0,114,59,0,0,0,99,3,0,0,0,0,0,0,0,
+    4,0,0,0,3,0,0,0,67,0,0,0,115,76,0,0,
+    0,116,0,0,116,1,0,131,1,0,125,3,0,124,3,0,
+    106,2,0,116,3,0,124,1,0,131,1,0,131,1,0,1,
+    124,3,0,106,2,0,116,3,0,124,2,0,131,1,0,131,
+    1,0,1,124,3,0,106,2,0,116,4,0,106,5,0,124,
+    0,0,131,1,0,131,1,0,1,124,3,0,83,41,1,122,
+    80,67,111,109,112,105,108,101,32,97,32,99,111,100,101,32,
+    111,98,106,101,99,116,32,105,110,116,111,32,98,121,116,101,
+    99,111,100,101,32,102,111,114,32,119,114,105,116,105,110,103,
+    32,111,117,116,32,116,111,32,97,32,98,121,116,101,45,99,
+    111,109,112,105,108,101,100,10,32,32,32,32,102,105,108,101,
+    46,41,6,218,9,98,121,116,101,97,114,114,97,121,114,140,
+    0,0,0,218,6,101,120,116,101,110,100,114,17,0,0,0,
+    114,147,0,0,0,90,5,100,117,109,112,115,41,4,114,151,
+    0,0,0,114,138,0,0,0,114,145,0,0,0,114,53,0,
+    0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
+    0,218,17,95,99,111,100,101,95,116,111,95,98,121,116,101,
+    99,111,100,101,240,1,0,0,115,10,0,0,0,0,3,12,
+    1,19,1,19,1,22,1,114,155,0,0,0,99,1,0,0,
+    0,0,0,0,0,5,0,0,0,4,0,0,0,67,0,0,
+    0,115,89,0,0,0,100,1,0,100,2,0,108,0,0,125,
+    1,0,116,1,0,106,2,0,124,0,0,131,1,0,106,3,
+    0,125,2,0,124,1,0,106,4,0,124,2,0,131,1,0,
+    125,3,0,116,1,0,106,5,0,100,2,0,100,3,0,131,
+    2,0,125,4,0,124,4,0,106,6,0,124,0,0,106,6,
+    0,124,3,0,100,1,0,25,131,1,0,131,1,0,83,41,
+    4,122,121,68,101,99,111,100,101,32,98,121,116,101,115,32,
+    114,101,112,114,101,115,101,110,116,105,110,103,32,115,111,117,
+    114,99,101,32,99,111,100,101,32,97,110,100,32,114,101,116,
+    117,114,110,32,116,104,101,32,115,116,114,105,110,103,46,10,
+    10,32,32,32,32,85,110,105,118,101,114,115,97,108,32,110,
+    101,119,108,105,110,101,32,115,117,112,112,111,114,116,32,105,
+    115,32,117,115,101,100,32,105,110,32,116,104,101,32,100,101,
+    99,111,100,105,110,103,46,10,32,32,32,32,114,59,0,0,
+    0,78,84,41,7,218,8,116,111,107,101,110,105,122,101,114,
+    49,0,0,0,90,7,66,121,116,101,115,73,79,90,8,114,
+    101,97,100,108,105,110,101,90,15,100,101,116,101,99,116,95,
+    101,110,99,111,100,105,110,103,90,25,73,110,99,114,101,109,
+    101,110,116,97,108,78,101,119,108,105,110,101,68,101,99,111,
+    100,101,114,218,6,100,101,99,111,100,101,41,5,218,12,115,
+    111,117,114,99,101,95,98,121,116,101,115,114,156,0,0,0,
+    90,21,115,111,117,114,99,101,95,98,121,116,101,115,95,114,
+    101,97,100,108,105,110,101,218,8,101,110,99,111,100,105,110,
+    103,90,15,110,101,119,108,105,110,101,95,100,101,99,111,100,
+    101,114,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
+    0,218,13,100,101,99,111,100,101,95,115,111,117,114,99,101,
+    250,1,0,0,115,10,0,0,0,0,5,12,1,18,1,15,
+    1,18,1,114,160,0,0,0,218,6,111,114,105,103,105,110,
+    218,10,105,115,95,112,97,99,107,97,103,101,99,2,0,0,
+    0,2,0,0,0,5,0,0,0,15,0,0,0,67,0,0,
+    0,115,193,0,0,0,116,0,0,124,1,0,100,1,0,131,
+    2,0,114,83,0,124,3,0,100,2,0,107,8,0,114,43,
+    0,116,1,0,124,0,0,100,3,0,124,1,0,131,1,1,
+    83,124,3,0,114,55,0,103,0,0,110,3,0,100,2,0,
+    125,4,0,116,1,0,124,0,0,100,3,0,124,1,0,100,
+    4,0,124,4,0,131,1,2,83,124,3,0,100,2,0,107,
+    8,0,114,165,0,116,0,0,124,1,0,100,5,0,131,2,
+    0,114,159,0,121,19,0,124,1,0,106,2,0,124,0,0,
+    131,1,0,125,3,0,87,113,165,0,4,116,3,0,107,10,
+    0,114,155,0,1,1,1,100,2,0,125,3,0,89,113,165,
+    0,88,110,6,0,100,6,0,125,3,0,116,4,0,106,5,
+    0,124,0,0,124,1,0,100,7,0,124,2,0,100,5,0,
+    124,3,0,131,2,2,83,41,8,122,53,82,101,116,117,114,
+    110,32,97,32,109,111,100,117,108,101,32,115,112,101,99,32,
+    98,97,115,101,100,32,111,110,32,118,97,114,105,111,117,115,
+    32,108,111,97,100,101,114,32,109,101,116,104,111,100,115,46,
+    218,12,103,101,116,95,102,105,108,101,110,97,109,101,78,114,
+    127,0,0,0,218,26,115,117,98,109,111,100,117,108,101,95,
+    115,101,97,114,99,104,95,108,111,99,97,116,105,111,110,115,
+    114,162,0,0,0,70,114,161,0,0,0,41,6,114,115,0,
+    0,0,218,23,115,112,101,99,95,102,114,111,109,95,102,105,
+    108,101,95,108,111,99,97,116,105,111,110,114,162,0,0,0,
+    114,107,0,0,0,114,121,0,0,0,218,10,77,111,100,117,
+    108,101,83,112,101,99,41,5,114,106,0,0,0,114,127,0,
+    0,0,114,161,0,0,0,114,162,0,0,0,90,6,115,101,
+    97,114,99,104,114,4,0,0,0,114,4,0,0,0,114,5,
+    0,0,0,114,131,0,0,0,8,2,0,0,115,28,0,0,
+    0,0,2,15,1,12,1,16,1,18,1,15,1,7,2,12,
+    1,15,1,3,1,19,1,13,1,14,3,6,2,114,131,0,
+    0,0,114,127,0,0,0,114,164,0,0,0,99,2,0,0,
+    0,2,0,0,0,9,0,0,0,19,0,0,0,67,0,0,
+    0,115,89,1,0,0,124,1,0,100,1,0,107,8,0,114,
+    73,0,100,2,0,125,1,0,116,0,0,124,2,0,100,3,
+    0,131,2,0,114,73,0,121,19,0,124,2,0,106,1,0,
+    124,0,0,131,1,0,125,1,0,87,110,18,0,4,116,2,
+    0,107,10,0,114,72,0,1,1,1,89,110,1,0,88,116,
+    3,0,106,4,0,124,0,0,124,2,0,100,4,0,124,1,
+    0,131,2,1,125,4,0,100,5,0,124,4,0,95,5,0,
+    124,2,0,100,1,0,107,8,0,114,194,0,120,73,0,116,
+    6,0,131,0,0,68,93,58,0,92,2,0,125,5,0,125,
+    6,0,124,1,0,106,7,0,116,8,0,124,6,0,131,1,
+    0,131,1,0,114,128,0,124,5,0,124,0,0,124,1,0,
+    131,2,0,125,2,0,124,2,0,124,4,0,95,9,0,80,
+    113,128,0,87,100,1,0,83,124,3,0,116,10,0,107,8,
+    0,114,23,1,116,0,0,124,2,0,100,6,0,131,2,0,
+    114,32,1,121,19,0,124,2,0,106,11,0,124,0,0,131,
+    1,0,125,7,0,87,110,18,0,4,116,2,0,107,10,0,
+    114,4,1,1,1,1,89,113,32,1,88,124,7,0,114,32,
+    1,103,0,0,124,4,0,95,12,0,110,9,0,124,3,0,
+    124,4,0,95,12,0,124,4,0,106,12,0,103,0,0,107,
+    2,0,114,85,1,124,1,0,114,85,1,116,13,0,124,1,
+    0,131,1,0,100,7,0,25,125,8,0,124,4,0,106,12,
+    0,106,14,0,124,8,0,131,1,0,1,124,4,0,83,41,
+    8,97,61,1,0,0,82,101,116,117,114,110,32,97,32,109,
+    111,100,117,108,101,32,115,112,101,99,32,98,97,115,101,100,
+    32,111,110,32,97,32,102,105,108,101,32,108,111,99,97,116,
+    105,111,110,46,10,10,32,32,32,32,84,111,32,105,110,100,
+    105,99,97,116,101,32,116,104,97,116,32,116,104,101,32,109,
+    111,100,117,108,101,32,105,115,32,97,32,112,97,99,107,97,
+    103,101,44,32,115,101,116,10,32,32,32,32,115,117,98,109,
+    111,100,117,108,101,95,115,101,97,114,99,104,95,108,111,99,
+    97,116,105,111,110,115,32,116,111,32,97,32,108,105,115,116,
+    32,111,102,32,100,105,114,101,99,116,111,114,121,32,112,97,
+    116,104,115,46,32,32,65,110,10,32,32,32,32,101,109,112,
+    116,121,32,108,105,115,116,32,105,115,32,115,117,102,102,105,
+    99,105,101,110,116,44,32,116,104,111,117,103,104,32,105,116,
+    115,32,110,111,116,32,111,116,104,101,114,119,105,115,101,32,
+    117,115,101,102,117,108,32,116,111,32,116,104,101,10,32,32,
+    32,32,105,109,112,111,114,116,32,115,121,115,116,101,109,46,
+    10,10,32,32,32,32,84,104,101,32,108,111,97,100,101,114,
+    32,109,117,115,116,32,116,97,107,101,32,97,32,115,112,101,
+    99,32,97,115,32,105,116,115,32,111,110,108,121,32,95,95,
+    105,110,105,116,95,95,40,41,32,97,114,103,46,10,10,32,
+    32,32,32,78,122,9,60,117,110,107,110,111,119,110,62,114,
+    163,0,0,0,114,161,0,0,0,84,114,162,0,0,0,114,
+    59,0,0,0,41,15,114,115,0,0,0,114,163,0,0,0,
+    114,107,0,0,0,114,121,0,0,0,114,166,0,0,0,90,
+    13,95,115,101,116,95,102,105,108,101,97,116,116,114,218,27,
+    95,103,101,116,95,115,117,112,112,111,114,116,101,100,95,102,
+    105,108,101,95,108,111,97,100,101,114,115,114,92,0,0,0,
+    114,93,0,0,0,114,127,0,0,0,218,9,95,80,79,80,
+    85,76,65,84,69,114,162,0,0,0,114,164,0,0,0,114,
+    38,0,0,0,218,6,97,112,112,101,110,100,41,9,114,106,
+    0,0,0,90,8,108,111,99,97,116,105,111,110,114,127,0,
+    0,0,114,164,0,0,0,114,133,0,0,0,218,12,108,111,
+    97,100,101,114,95,99,108,97,115,115,218,8,115,117,102,102,
+    105,120,101,115,114,162,0,0,0,90,7,100,105,114,110,97,
     109,101,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
-    0,218,17,115,111,117,114,99,101,95,102,114,111,109,95,99,
-    97,99,104,101,29,1,0,0,115,44,0,0,0,0,9,18,
-    1,12,1,18,1,18,1,12,1,9,1,15,1,15,1,12,
-    1,9,1,15,1,12,1,22,1,15,1,9,1,12,1,22,
-    1,12,1,9,1,12,1,19,1,114,85,0,0,0,99,1,
-    0,0,0,0,0,0,0,5,0,0,0,12,0,0,0,67,
-    0,0,0,115,164,0,0,0,116,0,0,124,0,0,131,1,
-    0,100,1,0,107,2,0,114,22,0,100,2,0,83,124,0,
-    0,106,1,0,100,3,0,131,1,0,92,3,0,125,1,0,
-    125,2,0,125,3,0,124,1,0,12,115,81,0,124,3,0,
-    106,2,0,131,0,0,100,7,0,100,8,0,133,2,0,25,
-    100,6,0,107,3,0,114,85,0,124,0,0,83,121,16,0,
-    116,3,0,124,0,0,131,1,0,125,4,0,87,110,40,0,
-    4,116,4,0,116,5,0,102,2,0,107,10,0,114,143,0,
-    1,1,1,124,0,0,100,2,0,100,9,0,133,2,0,25,
-    125,4,0,89,110,1,0,88,116,6,0,124,4,0,131,1,
-    0,114,160,0,124,4,0,83,124,0,0,83,41,10,122,188,
-    67,111,110,118,101,114,116,32,97,32,98,121,116,101,99,111,
-    100,101,32,102,105,108,101,32,112,97,116,104,32,116,111,32,
-    97,32,115,111,117,114,99,101,32,112,97,116,104,32,40,105,
-    102,32,112,111,115,115,105,98,108,101,41,46,10,10,32,32,
-    32,32,84,104,105,115,32,102,117,110,99,116,105,111,110,32,
-    101,120,105,115,116,115,32,112,117,114,101,108,121,32,102,111,
-    114,32,98,97,99,107,119,97,114,100,115,45,99,111,109,112,
-    97,116,105,98,105,108,105,116,121,32,102,111,114,10,32,32,
-    32,32,80,121,73,109,112,111,114,116,95,69,120,101,99,67,
-    111,100,101,77,111,100,117,108,101,87,105,116,104,70,105,108,
-    101,110,97,109,101,115,40,41,32,105,110,32,116,104,101,32,
-    67,32,65,80,73,46,10,10,32,32,32,32,114,59,0,0,
-    0,78,114,58,0,0,0,114,80,0,0,0,114,29,0,0,
-    0,90,2,112,121,233,253,255,255,255,233,255,255,255,255,114,
-    87,0,0,0,41,7,114,31,0,0,0,114,32,0,0,0,
-    218,5,108,111,119,101,114,114,85,0,0,0,114,66,0,0,
-    0,114,71,0,0,0,114,44,0,0,0,41,5,218,13,98,
-    121,116,101,99,111,100,101,95,112,97,116,104,114,78,0,0,
-    0,114,36,0,0,0,90,9,101,120,116,101,110,115,105,111,
-    110,218,11,115,111,117,114,99,101,95,112,97,116,104,114,4,
-    0,0,0,114,4,0,0,0,114,5,0,0,0,218,15,95,
-    103,101,116,95,115,111,117,114,99,101,102,105,108,101,62,1,
-    0,0,115,20,0,0,0,0,7,18,1,4,1,24,1,35,
-    1,4,1,3,1,16,1,19,1,21,1,114,91,0,0,0,
-    99,1,0,0,0,0,0,0,0,1,0,0,0,11,0,0,
-    0,67,0,0,0,115,92,0,0,0,124,0,0,106,0,0,
-    116,1,0,116,2,0,131,1,0,131,1,0,114,59,0,121,
-    14,0,116,3,0,124,0,0,131,1,0,83,87,113,88,0,
-    4,116,4,0,107,10,0,114,55,0,1,1,1,89,113,88,
-    0,88,110,29,0,124,0,0,106,0,0,116,1,0,116,5,
-    0,131,1,0,131,1,0,114,84,0,124,0,0,83,100,0,
-    0,83,100,0,0,83,41,1,78,41,6,218,8,101,110,100,
-    115,119,105,116,104,218,5,116,117,112,108,101,114,84,0,0,
-    0,114,79,0,0,0,114,66,0,0,0,114,74,0,0,0,
-    41,1,218,8,102,105,108,101,110,97,109,101,114,4,0,0,
-    0,114,4,0,0,0,114,5,0,0,0,218,11,95,103,101,
-    116,95,99,97,99,104,101,100,81,1,0,0,115,16,0,0,
-    0,0,1,21,1,3,1,14,1,13,1,8,1,21,1,4,
-    2,114,95,0,0,0,99,1,0,0,0,0,0,0,0,2,
-    0,0,0,11,0,0,0,67,0,0,0,115,60,0,0,0,
-    121,19,0,116,0,0,124,0,0,131,1,0,106,1,0,125,
-    1,0,87,110,24,0,4,116,2,0,107,10,0,114,45,0,
-    1,1,1,100,1,0,125,1,0,89,110,1,0,88,124,1,
-    0,100,2,0,79,125,1,0,124,1,0,83,41,3,122,51,
-    67,97,108,99,117,108,97,116,101,32,116,104,101,32,109,111,
-    100,101,32,112,101,114,109,105,115,115,105,111,110,115,32,102,
-    111,114,32,97,32,98,121,116,101,99,111,100,101,32,102,105,
-    108,101,46,105,182,1,0,0,233,128,0,0,0,41,3,114,
-    39,0,0,0,114,41,0,0,0,114,40,0,0,0,41,2,
-    114,35,0,0,0,114,42,0,0,0,114,4,0,0,0,114,
-    4,0,0,0,114,5,0,0,0,218,10,95,99,97,108,99,
-    95,109,111,100,101,93,1,0,0,115,12,0,0,0,0,2,
-    3,1,19,1,13,1,11,3,10,1,114,97,0,0,0,218,
-    9,118,101,114,98,111,115,105,116,121,114,29,0,0,0,99,
-    1,0,0,0,1,0,0,0,3,0,0,0,4,0,0,0,
-    71,0,0,0,115,75,0,0,0,116,0,0,106,1,0,106,
-    2,0,124,1,0,107,5,0,114,71,0,124,0,0,106,3,
-    0,100,6,0,131,1,0,115,43,0,100,3,0,124,0,0,
-    23,125,0,0,116,4,0,124,0,0,106,5,0,124,2,0,
-    140,0,0,100,4,0,116,0,0,106,6,0,131,1,1,1,
-    100,5,0,83,41,7,122,61,80,114,105,110,116,32,116,104,
-    101,32,109,101,115,115,97,103,101,32,116,111,32,115,116,100,
-    101,114,114,32,105,102,32,45,118,47,80,89,84,72,79,78,
-    86,69,82,66,79,83,69,32,105,115,32,116,117,114,110,101,
-    100,32,111,110,46,250,1,35,250,7,105,109,112,111,114,116,
-    32,122,2,35,32,114,54,0,0,0,78,41,2,114,99,0,
-    0,0,114,100,0,0,0,41,7,114,7,0,0,0,114,67,
-    0,0,0,218,7,118,101,114,98,111,115,101,114,9,0,0,
-    0,218,5,112,114,105,110,116,114,47,0,0,0,218,6,115,
-    116,100,101,114,114,41,3,114,75,0,0,0,114,98,0,0,
-    0,218,4,97,114,103,115,114,4,0,0,0,114,4,0,0,
-    0,114,5,0,0,0,218,16,95,118,101,114,98,111,115,101,
-    95,109,101,115,115,97,103,101,105,1,0,0,115,8,0,0,
-    0,0,2,18,1,15,1,10,1,114,105,0,0,0,99,1,
-    0,0,0,0,0,0,0,3,0,0,0,11,0,0,0,3,
-    0,0,0,115,84,0,0,0,100,1,0,135,0,0,102,1,
-    0,100,2,0,100,3,0,134,1,0,125,1,0,121,13,0,
-    116,0,0,106,1,0,125,2,0,87,110,30,0,4,116,2,
-    0,107,10,0,114,66,0,1,1,1,100,4,0,100,5,0,
-    132,0,0,125,2,0,89,110,1,0,88,124,2,0,124,1,
-    0,136,0,0,131,2,0,1,124,1,0,83,41,6,122,252,
-    68,101,99,111,114,97,116,111,114,32,116,111,32,118,101,114,
-    105,102,121,32,116,104,97,116,32,116,104,101,32,109,111,100,
-    117,108,101,32,98,101,105,110,103,32,114,101,113,117,101,115,
-    116,101,100,32,109,97,116,99,104,101,115,32,116,104,101,32,
-    111,110,101,32,116,104,101,10,32,32,32,32,108,111,97,100,
-    101,114,32,99,97,110,32,104,97,110,100,108,101,46,10,10,
-    32,32,32,32,84,104,101,32,102,105,114,115,116,32,97,114,
-    103,117,109,101,110,116,32,40,115,101,108,102,41,32,109,117,
-    115,116,32,100,101,102,105,110,101,32,95,110,97,109,101,32,
-    119,104,105,99,104,32,116,104,101,32,115,101,99,111,110,100,
-    32,97,114,103,117,109,101,110,116,32,105,115,10,32,32,32,
-    32,99,111,109,112,97,114,101,100,32,97,103,97,105,110,115,
-    116,46,32,73,102,32,116,104,101,32,99,111,109,112,97,114,
-    105,115,111,110,32,102,97,105,108,115,32,116,104,101,110,32,
-    73,109,112,111,114,116,69,114,114,111,114,32,105,115,32,114,
-    97,105,115,101,100,46,10,10,32,32,32,32,78,99,2,0,
-    0,0,0,0,0,0,4,0,0,0,5,0,0,0,31,0,
-    0,0,115,80,0,0,0,124,1,0,100,0,0,107,8,0,
-    114,24,0,124,0,0,106,0,0,125,1,0,110,37,0,124,
-    0,0,106,0,0,124,1,0,107,3,0,114,61,0,116,1,
-    0,100,1,0,124,1,0,22,100,2,0,124,1,0,131,1,
-    1,130,1,0,136,0,0,124,0,0,124,1,0,124,2,0,
-    124,3,0,142,2,0,83,41,3,78,122,23,108,111,97,100,
-    101,114,32,99,97,110,110,111,116,32,104,97,110,100,108,101,
-    32,37,115,218,4,110,97,109,101,41,2,114,106,0,0,0,
-    218,11,73,109,112,111,114,116,69,114,114,111,114,41,4,218,
-    4,115,101,108,102,114,106,0,0,0,114,104,0,0,0,90,
-    6,107,119,97,114,103,115,41,1,218,6,109,101,116,104,111,
-    100,114,4,0,0,0,114,5,0,0,0,218,19,95,99,104,
-    101,99,107,95,110,97,109,101,95,119,114,97,112,112,101,114,
-    121,1,0,0,115,10,0,0,0,0,1,12,1,12,1,15,
-    1,22,1,122,40,95,99,104,101,99,107,95,110,97,109,101,
-    46,60,108,111,99,97,108,115,62,46,95,99,104,101,99,107,
-    95,110,97,109,101,95,119,114,97,112,112,101,114,99,2,0,
-    0,0,0,0,0,0,3,0,0,0,7,0,0,0,83,0,
-    0,0,115,92,0,0,0,120,66,0,100,1,0,100,2,0,
-    100,3,0,100,4,0,103,4,0,68,93,46,0,125,2,0,
-    116,0,0,124,1,0,124,2,0,131,2,0,114,19,0,116,
-    1,0,124,0,0,124,2,0,116,2,0,124,1,0,124,2,
-    0,131,2,0,131,3,0,1,113,19,0,87,124,0,0,106,
-    3,0,106,4,0,124,1,0,106,3,0,131,1,0,1,100,
-    0,0,83,41,5,78,218,10,95,95,109,111,100,117,108,101,
-    95,95,218,8,95,95,110,97,109,101,95,95,218,12,95,95,
-    113,117,97,108,110,97,109,101,95,95,218,7,95,95,100,111,
-    99,95,95,41,5,218,7,104,97,115,97,116,116,114,218,7,
-    115,101,116,97,116,116,114,218,7,103,101,116,97,116,116,114,
-    218,8,95,95,100,105,99,116,95,95,218,6,117,112,100,97,
-    116,101,41,3,90,3,110,101,119,90,3,111,108,100,114,52,
+    0,114,165,0,0,0,33,2,0,0,115,60,0,0,0,0,
+    12,12,4,6,1,15,2,3,1,19,1,13,1,5,8,24,
+    1,9,3,12,1,22,1,21,1,15,1,9,1,5,2,4,
+    3,12,2,15,1,3,1,19,1,13,1,5,2,6,1,12,
+    2,9,1,15,1,6,1,16,1,16,2,114,165,0,0,0,
+    99,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,
+    0,64,0,0,0,115,121,0,0,0,101,0,0,90,1,0,
+    100,0,0,90,2,0,100,1,0,90,3,0,100,2,0,90,
+    4,0,100,3,0,90,5,0,100,4,0,90,6,0,101,7,
+    0,100,5,0,100,6,0,132,0,0,131,1,0,90,8,0,
+    101,7,0,100,7,0,100,8,0,132,0,0,131,1,0,90,
+    9,0,101,7,0,100,9,0,100,9,0,100,10,0,100,11,
+    0,132,2,0,131,1,0,90,10,0,101,7,0,100,9,0,
+    100,12,0,100,13,0,132,1,0,131,1,0,90,11,0,100,
+    9,0,83,41,14,218,21,87,105,110,100,111,119,115,82,101,
+    103,105,115,116,114,121,70,105,110,100,101,114,122,62,77,101,
+    116,97,32,112,97,116,104,32,102,105,110,100,101,114,32,102,
+    111,114,32,109,111,100,117,108,101,115,32,100,101,99,108,97,
+    114,101,100,32,105,110,32,116,104,101,32,87,105,110,100,111,
+    119,115,32,114,101,103,105,115,116,114,121,46,122,59,83,111,
+    102,116,119,97,114,101,92,80,121,116,104,111,110,92,80,121,
+    116,104,111,110,67,111,114,101,92,123,115,121,115,95,118,101,
+    114,115,105,111,110,125,92,77,111,100,117,108,101,115,92,123,
+    102,117,108,108,110,97,109,101,125,122,65,83,111,102,116,119,
+    97,114,101,92,80,121,116,104,111,110,92,80,121,116,104,111,
+    110,67,111,114,101,92,123,115,121,115,95,118,101,114,115,105,
+    111,110,125,92,77,111,100,117,108,101,115,92,123,102,117,108,
+    108,110,97,109,101,125,92,68,101,98,117,103,70,99,2,0,
+    0,0,0,0,0,0,2,0,0,0,11,0,0,0,67,0,
+    0,0,115,67,0,0,0,121,23,0,116,0,0,106,1,0,
+    116,0,0,106,2,0,124,1,0,131,2,0,83,87,110,37,
+    0,4,116,3,0,107,10,0,114,62,0,1,1,1,116,0,
+    0,106,1,0,116,0,0,106,4,0,124,1,0,131,2,0,
+    83,89,110,1,0,88,100,0,0,83,41,1,78,41,5,218,
+    7,95,119,105,110,114,101,103,90,7,79,112,101,110,75,101,
+    121,90,17,72,75,69,89,95,67,85,82,82,69,78,84,95,
+    85,83,69,82,114,40,0,0,0,90,18,72,75,69,89,95,
+    76,79,67,65,76,95,77,65,67,72,73,78,69,41,2,218,
+    3,99,108,115,218,3,107,101,121,114,4,0,0,0,114,4,
+    0,0,0,114,5,0,0,0,218,14,95,111,112,101,110,95,
+    114,101,103,105,115,116,114,121,111,2,0,0,115,8,0,0,
+    0,0,2,3,1,23,1,13,1,122,36,87,105,110,100,111,
+    119,115,82,101,103,105,115,116,114,121,70,105,110,100,101,114,
+    46,95,111,112,101,110,95,114,101,103,105,115,116,114,121,99,
+    2,0,0,0,0,0,0,0,6,0,0,0,16,0,0,0,
+    67,0,0,0,115,143,0,0,0,124,0,0,106,0,0,114,
+    21,0,124,0,0,106,1,0,125,2,0,110,9,0,124,0,
+    0,106,2,0,125,2,0,124,2,0,106,3,0,100,1,0,
+    124,1,0,100,2,0,116,4,0,106,5,0,100,0,0,100,
+    3,0,133,2,0,25,131,0,2,125,3,0,121,47,0,124,
+    0,0,106,6,0,124,3,0,131,1,0,143,25,0,125,4,
+    0,116,7,0,106,8,0,124,4,0,100,4,0,131,2,0,
+    125,5,0,87,100,0,0,81,82,88,87,110,22,0,4,116,
+    9,0,107,10,0,114,138,0,1,1,1,100,0,0,83,89,
+    110,1,0,88,124,5,0,83,41,5,78,114,126,0,0,0,
+    90,11,115,121,115,95,118,101,114,115,105,111,110,114,80,0,
+    0,0,114,30,0,0,0,41,10,218,11,68,69,66,85,71,
+    95,66,85,73,76,68,218,18,82,69,71,73,83,84,82,89,
+    95,75,69,89,95,68,69,66,85,71,218,12,82,69,71,73,
+    83,84,82,89,95,75,69,89,114,47,0,0,0,114,7,0,
+    0,0,218,7,118,101,114,115,105,111,110,114,176,0,0,0,
+    114,173,0,0,0,90,10,81,117,101,114,121,86,97,108,117,
+    101,114,40,0,0,0,41,6,114,174,0,0,0,114,126,0,
+    0,0,90,12,114,101,103,105,115,116,114,121,95,107,101,121,
+    114,175,0,0,0,90,4,104,107,101,121,218,8,102,105,108,
+    101,112,97,116,104,114,4,0,0,0,114,4,0,0,0,114,
+    5,0,0,0,218,16,95,115,101,97,114,99,104,95,114,101,
+    103,105,115,116,114,121,118,2,0,0,115,22,0,0,0,0,
+    2,9,1,12,2,9,1,15,1,22,1,3,1,18,1,29,
+    1,13,1,9,1,122,38,87,105,110,100,111,119,115,82,101,
+    103,105,115,116,114,121,70,105,110,100,101,114,46,95,115,101,
+    97,114,99,104,95,114,101,103,105,115,116,114,121,78,99,4,
+    0,0,0,0,0,0,0,8,0,0,0,14,0,0,0,67,
+    0,0,0,115,155,0,0,0,124,0,0,106,0,0,124,1,
+    0,131,1,0,125,4,0,124,4,0,100,0,0,107,8,0,
+    114,31,0,100,0,0,83,121,14,0,116,1,0,124,4,0,
+    131,1,0,1,87,110,22,0,4,116,2,0,107,10,0,114,
+    69,0,1,1,1,100,0,0,83,89,110,1,0,88,120,78,
+    0,116,3,0,131,0,0,68,93,67,0,92,2,0,125,5,
+    0,125,6,0,124,4,0,106,4,0,116,5,0,124,6,0,
+    131,1,0,131,1,0,114,80,0,116,6,0,124,1,0,124,
+    5,0,124,1,0,124,4,0,131,2,0,100,1,0,124,4,
+    0,131,2,1,125,7,0,124,7,0,83,113,80,0,87,100,
+    0,0,83,41,2,78,114,161,0,0,0,41,7,114,182,0,
+    0,0,114,39,0,0,0,114,40,0,0,0,114,167,0,0,
+    0,114,92,0,0,0,114,93,0,0,0,114,131,0,0,0,
+    41,8,114,174,0,0,0,114,126,0,0,0,114,35,0,0,
+    0,218,6,116,97,114,103,101,116,114,181,0,0,0,114,127,
+    0,0,0,114,171,0,0,0,114,133,0,0,0,114,4,0,
+    0,0,114,4,0,0,0,114,5,0,0,0,218,9,102,105,
+    110,100,95,115,112,101,99,133,2,0,0,115,24,0,0,0,
+    0,2,15,1,12,1,4,1,3,1,14,1,13,1,9,1,
+    22,1,21,1,21,1,9,1,122,31,87,105,110,100,111,119,
+    115,82,101,103,105,115,116,114,121,70,105,110,100,101,114,46,
+    102,105,110,100,95,115,112,101,99,99,3,0,0,0,0,0,
+    0,0,4,0,0,0,3,0,0,0,67,0,0,0,115,45,
+    0,0,0,124,0,0,106,0,0,124,1,0,124,2,0,131,
+    2,0,125,3,0,124,3,0,100,1,0,107,9,0,114,37,
+    0,124,3,0,106,1,0,83,100,1,0,83,100,1,0,83,
+    41,2,122,108,70,105,110,100,32,109,111,100,117,108,101,32,
+    110,97,109,101,100,32,105,110,32,116,104,101,32,114,101,103,
+    105,115,116,114,121,46,10,10,32,32,32,32,32,32,32,32,
+    84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,
+    101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,32,
+    101,120,101,99,95,109,111,100,117,108,101,40,41,32,105,110,
+    115,116,101,97,100,46,10,10,32,32,32,32,32,32,32,32,
+    78,41,2,114,184,0,0,0,114,127,0,0,0,41,4,114,
+    174,0,0,0,114,126,0,0,0,114,35,0,0,0,114,133,
     0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
-    0,0,218,5,95,119,114,97,112,131,1,0,0,115,8,0,
-    0,0,0,1,25,1,15,1,29,1,122,26,95,99,104,101,
-    99,107,95,110,97,109,101,46,60,108,111,99,97,108,115,62,
-    46,95,119,114,97,112,41,3,218,10,95,98,111,111,116,115,
-    116,114,97,112,114,120,0,0,0,218,9,78,97,109,101,69,
-    114,114,111,114,41,3,114,109,0,0,0,114,110,0,0,0,
-    114,120,0,0,0,114,4,0,0,0,41,1,114,109,0,0,
-    0,114,5,0,0,0,218,11,95,99,104,101,99,107,95,110,
-    97,109,101,113,1,0,0,115,14,0,0,0,0,8,21,6,
-    3,1,13,1,13,2,17,5,13,1,114,123,0,0,0,99,
-    2,0,0,0,0,0,0,0,5,0,0,0,4,0,0,0,
-    67,0,0,0,115,84,0,0,0,124,0,0,106,0,0,124,
-    1,0,131,1,0,92,2,0,125,2,0,125,3,0,124,2,
-    0,100,1,0,107,8,0,114,80,0,116,1,0,124,3,0,
-    131,1,0,114,80,0,100,2,0,125,4,0,116,2,0,106,
-    3,0,124,4,0,106,4,0,124,3,0,100,3,0,25,131,
-    1,0,116,5,0,131,2,0,1,124,2,0,83,41,4,122,
-    155,84,114,121,32,116,111,32,102,105,110,100,32,97,32,108,
-    111,97,100,101,114,32,102,111,114,32,116,104,101,32,115,112,
-    101,99,105,102,105,101,100,32,109,111,100,117,108,101,32,98,
-    121,32,100,101,108,101,103,97,116,105,110,103,32,116,111,10,
-    32,32,32,32,115,101,108,102,46,102,105,110,100,95,108,111,
-    97,100,101,114,40,41,46,10,10,32,32,32,32,84,104,105,
-    115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114,
-    101,99,97,116,101,100,32,105,110,32,102,97,118,111,114,32,
-    111,102,32,102,105,110,100,101,114,46,102,105,110,100,95,115,
-    112,101,99,40,41,46,10,10,32,32,32,32,78,122,44,78,
-    111,116,32,105,109,112,111,114,116,105,110,103,32,100,105,114,
-    101,99,116,111,114,121,32,123,125,58,32,109,105,115,115,105,
-    110,103,32,95,95,105,110,105,116,95,95,114,59,0,0,0,
-    41,6,218,11,102,105,110,100,95,108,111,97,100,101,114,114,
-    31,0,0,0,114,60,0,0,0,114,61,0,0,0,114,47,
-    0,0,0,218,13,73,109,112,111,114,116,87,97,114,110,105,
-    110,103,41,5,114,108,0,0,0,218,8,102,117,108,108,110,
-    97,109,101,218,6,108,111,97,100,101,114,218,8,112,111,114,
-    116,105,111,110,115,218,3,109,115,103,114,4,0,0,0,114,
-    4,0,0,0,114,5,0,0,0,218,17,95,102,105,110,100,
-    95,109,111,100,117,108,101,95,115,104,105,109,140,1,0,0,
-    115,10,0,0,0,0,10,21,1,24,1,6,1,29,1,114,
-    130,0,0,0,99,2,0,0,0,0,0,0,0,4,0,0,
-    0,3,0,0,0,67,0,0,0,115,87,0,0,0,116,0,
-    0,124,1,0,124,0,0,131,2,0,125,2,0,124,1,0,
-    116,1,0,106,2,0,107,6,0,114,70,0,116,1,0,106,
-    2,0,124,1,0,25,125,3,0,116,3,0,106,4,0,124,
-    2,0,124,3,0,131,2,0,1,116,1,0,106,2,0,124,
-    1,0,25,83,116,3,0,106,5,0,124,2,0,131,1,0,
-    83,100,1,0,83,41,2,122,128,76,111,97,100,32,116,104,
-    101,32,115,112,101,99,105,102,105,101,100,32,109,111,100,117,
-    108,101,32,105,110,116,111,32,115,121,115,46,109,111,100,117,
-    108,101,115,32,97,110,100,32,114,101,116,117,114,110,32,105,
-    116,46,10,10,32,32,32,32,84,104,105,115,32,109,101,116,
-    104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101,
-    100,46,32,32,85,115,101,32,108,111,97,100,101,114,46,101,
-    120,101,99,95,109,111,100,117,108,101,32,105,110,115,116,101,
-    97,100,46,10,10,32,32,32,32,78,41,6,218,16,115,112,
-    101,99,95,102,114,111,109,95,108,111,97,100,101,114,114,7,
-    0,0,0,218,7,109,111,100,117,108,101,115,114,121,0,0,
-    0,90,5,95,101,120,101,99,90,5,95,108,111,97,100,41,
-    4,114,108,0,0,0,114,126,0,0,0,218,4,115,112,101,
-    99,218,6,109,111,100,117,108,101,114,4,0,0,0,114,4,
-    0,0,0,114,5,0,0,0,218,17,95,108,111,97,100,95,
-    109,111,100,117,108,101,95,115,104,105,109,158,1,0,0,115,
-    12,0,0,0,0,6,15,1,15,1,13,1,16,1,11,2,
-    114,135,0,0,0,99,4,0,0,0,0,0,0,0,11,0,
-    0,0,19,0,0,0,67,0,0,0,115,228,1,0,0,105,
-    0,0,125,4,0,124,2,0,100,1,0,107,9,0,114,31,
-    0,124,2,0,124,4,0,100,2,0,60,110,6,0,100,3,
-    0,125,2,0,124,3,0,100,1,0,107,9,0,114,59,0,
-    124,3,0,124,4,0,100,4,0,60,124,0,0,100,1,0,
-    100,5,0,133,2,0,25,125,5,0,124,0,0,100,5,0,
-    100,6,0,133,2,0,25,125,6,0,124,0,0,100,6,0,
-    100,7,0,133,2,0,25,125,7,0,124,5,0,116,0,0,
-    107,3,0,114,165,0,100,8,0,106,1,0,124,2,0,124,
-    5,0,131,2,0,125,8,0,116,2,0,124,8,0,131,1,
-    0,1,116,3,0,124,8,0,124,4,0,141,1,0,130,1,
-    0,110,113,0,116,4,0,124,6,0,131,1,0,100,5,0,
-    107,3,0,114,223,0,100,9,0,106,1,0,124,2,0,131,
-    1,0,125,8,0,116,2,0,124,8,0,131,1,0,1,116,
-    5,0,124,8,0,131,1,0,130,1,0,110,55,0,116,4,
-    0,124,7,0,131,1,0,100,5,0,107,3,0,114,22,1,
-    100,10,0,106,1,0,124,2,0,131,1,0,125,8,0,116,
-    2,0,124,8,0,131,1,0,1,116,5,0,124,8,0,131,
-    1,0,130,1,0,124,1,0,100,1,0,107,9,0,114,214,
-    1,121,20,0,116,6,0,124,1,0,100,11,0,25,131,1,
-    0,125,9,0,87,110,18,0,4,116,7,0,107,10,0,114,
-    74,1,1,1,1,89,110,59,0,88,116,8,0,124,6,0,
-    131,1,0,124,9,0,107,3,0,114,133,1,100,12,0,106,
-    1,0,124,2,0,131,1,0,125,8,0,116,2,0,124,8,
-    0,131,1,0,1,116,3,0,124,8,0,124,4,0,141,1,
-    0,130,1,0,121,18,0,124,1,0,100,13,0,25,100,14,
-    0,64,125,10,0,87,110,18,0,4,116,7,0,107,10,0,
-    114,171,1,1,1,1,89,110,43,0,88,116,8,0,124,7,
-    0,131,1,0,124,10,0,107,3,0,114,214,1,116,3,0,
-    100,12,0,106,1,0,124,2,0,131,1,0,124,4,0,141,
-    1,0,130,1,0,124,0,0,100,7,0,100,1,0,133,2,
-    0,25,83,41,15,97,122,1,0,0,86,97,108,105,100,97,
-    116,101,32,116,104,101,32,104,101,97,100,101,114,32,111,102,
-    32,116,104,101,32,112,97,115,115,101,100,45,105,110,32,98,
-    121,116,101,99,111,100,101,32,97,103,97,105,110,115,116,32,
-    115,111,117,114,99,101,95,115,116,97,116,115,32,40,105,102,
-    10,32,32,32,32,103,105,118,101,110,41,32,97,110,100,32,
-    114,101,116,117,114,110,105,110,103,32,116,104,101,32,98,121,
-    116,101,99,111,100,101,32,116,104,97,116,32,99,97,110,32,
-    98,101,32,99,111,109,112,105,108,101,100,32,98,121,32,99,
-    111,109,112,105,108,101,40,41,46,10,10,32,32,32,32,65,
-    108,108,32,111,116,104,101,114,32,97,114,103,117,109,101,110,
-    116,115,32,97,114,101,32,117,115,101,100,32,116,111,32,101,
-    110,104,97,110,99,101,32,101,114,114,111,114,32,114,101,112,
-    111,114,116,105,110,103,46,10,10,32,32,32,32,73,109,112,
-    111,114,116,69,114,114,111,114,32,105,115,32,114,97,105,115,
-    101,100,32,119,104,101,110,32,116,104,101,32,109,97,103,105,
-    99,32,110,117,109,98,101,114,32,105,115,32,105,110,99,111,
-    114,114,101,99,116,32,111,114,32,116,104,101,32,98,121,116,
-    101,99,111,100,101,32,105,115,10,32,32,32,32,102,111,117,
-    110,100,32,116,111,32,98,101,32,115,116,97,108,101,46,32,
-    69,79,70,69,114,114,111,114,32,105,115,32,114,97,105,115,
-    101,100,32,119,104,101,110,32,116,104,101,32,100,97,116,97,
-    32,105,115,32,102,111,117,110,100,32,116,111,32,98,101,10,
-    32,32,32,32,116,114,117,110,99,97,116,101,100,46,10,10,
-    32,32,32,32,78,114,106,0,0,0,122,10,60,98,121,116,
-    101,99,111,100,101,62,114,35,0,0,0,114,12,0,0,0,
-    233,8,0,0,0,233,12,0,0,0,122,30,98,97,100,32,
-    109,97,103,105,99,32,110,117,109,98,101,114,32,105,110,32,
-    123,33,114,125,58,32,123,33,114,125,122,43,114,101,97,99,
-    104,101,100,32,69,79,70,32,119,104,105,108,101,32,114,101,
-    97,100,105,110,103,32,116,105,109,101,115,116,97,109,112,32,
-    105,110,32,123,33,114,125,122,48,114,101,97,99,104,101,100,
-    32,69,79,70,32,119,104,105,108,101,32,114,101,97,100,105,
-    110,103,32,115,105,122,101,32,111,102,32,115,111,117,114,99,
-    101,32,105,110,32,123,33,114,125,218,5,109,116,105,109,101,
-    122,26,98,121,116,101,99,111,100,101,32,105,115,32,115,116,
-    97,108,101,32,102,111,114,32,123,33,114,125,218,4,115,105,
-    122,101,108,3,0,0,0,255,127,255,127,3,0,41,9,218,
-    12,77,65,71,73,67,95,78,85,77,66,69,82,114,47,0,
-    0,0,114,105,0,0,0,114,107,0,0,0,114,31,0,0,
-    0,218,8,69,79,70,69,114,114,111,114,114,14,0,0,0,
-    218,8,75,101,121,69,114,114,111,114,114,19,0,0,0,41,
-    11,114,53,0,0,0,218,12,115,111,117,114,99,101,95,115,
-    116,97,116,115,114,106,0,0,0,114,35,0,0,0,90,11,
-    101,120,99,95,100,101,116,97,105,108,115,90,5,109,97,103,
-    105,99,90,13,114,97,119,95,116,105,109,101,115,116,97,109,
-    112,90,8,114,97,119,95,115,105,122,101,114,75,0,0,0,
-    218,12,115,111,117,114,99,101,95,109,116,105,109,101,218,11,
-    115,111,117,114,99,101,95,115,105,122,101,114,4,0,0,0,
-    114,4,0,0,0,114,5,0,0,0,218,25,95,118,97,108,
-    105,100,97,116,101,95,98,121,116,101,99,111,100,101,95,104,
-    101,97,100,101,114,173,1,0,0,115,76,0,0,0,0,11,
-    6,1,12,1,13,3,6,1,12,1,10,1,16,1,16,1,
-    16,1,12,1,18,1,10,1,18,1,18,1,15,1,10,1,
-    15,1,18,1,15,1,10,1,12,1,12,1,3,1,20,1,
-    13,1,5,2,18,1,15,1,10,1,15,1,3,1,18,1,
-    13,1,5,2,18,1,15,1,9,1,114,146,0,0,0,99,
-    4,0,0,0,0,0,0,0,5,0,0,0,6,0,0,0,
-    67,0,0,0,115,112,0,0,0,116,0,0,106,1,0,124,
-    0,0,131,1,0,125,4,0,116,2,0,124,4,0,116,3,
-    0,131,2,0,114,75,0,116,4,0,100,1,0,124,2,0,
-    131,2,0,1,124,3,0,100,2,0,107,9,0,114,71,0,
-    116,5,0,106,6,0,124,4,0,124,3,0,131,2,0,1,
-    124,4,0,83,116,7,0,100,3,0,106,8,0,124,2,0,
-    131,1,0,100,4,0,124,1,0,100,5,0,124,2,0,131,
-    1,2,130,1,0,100,2,0,83,41,6,122,60,67,111,109,
-    112,105,108,101,32,98,121,116,101,99,111,100,101,32,97,115,
-    32,114,101,116,117,114,110,101,100,32,98,121,32,95,118,97,
-    108,105,100,97,116,101,95,98,121,116,101,99,111,100,101,95,
-    104,101,97,100,101,114,40,41,46,122,21,99,111,100,101,32,
-    111,98,106,101,99,116,32,102,114,111,109,32,123,33,114,125,
-    78,122,23,78,111,110,45,99,111,100,101,32,111,98,106,101,
-    99,116,32,105,110,32,123,33,114,125,114,106,0,0,0,114,
-    35,0,0,0,41,9,218,7,109,97,114,115,104,97,108,90,
-    5,108,111,97,100,115,218,10,105,115,105,110,115,116,97,110,
-    99,101,218,10,95,99,111,100,101,95,116,121,112,101,114,105,
-    0,0,0,218,4,95,105,109,112,90,16,95,102,105,120,95,
-    99,111,95,102,105,108,101,110,97,109,101,114,107,0,0,0,
-    114,47,0,0,0,41,5,114,53,0,0,0,114,106,0,0,
-    0,114,89,0,0,0,114,90,0,0,0,218,4,99,111,100,
-    101,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
-    218,17,95,99,111,109,112,105,108,101,95,98,121,116,101,99,
-    111,100,101,228,1,0,0,115,16,0,0,0,0,2,15,1,
-    15,1,13,1,12,1,16,1,4,2,18,1,114,152,0,0,
-    0,114,59,0,0,0,99,3,0,0,0,0,0,0,0,4,
-    0,0,0,3,0,0,0,67,0,0,0,115,76,0,0,0,
-    116,0,0,116,1,0,131,1,0,125,3,0,124,3,0,106,
-    2,0,116,3,0,124,1,0,131,1,0,131,1,0,1,124,
-    3,0,106,2,0,116,3,0,124,2,0,131,1,0,131,1,
-    0,1,124,3,0,106,2,0,116,4,0,106,5,0,124,0,
-    0,131,1,0,131,1,0,1,124,3,0,83,41,1,122,80,
-    67,111,109,112,105,108,101,32,97,32,99,111,100,101,32,111,
-    98,106,101,99,116,32,105,110,116,111,32,98,121,116,101,99,
-    111,100,101,32,102,111,114,32,119,114,105,116,105,110,103,32,
-    111,117,116,32,116,111,32,97,32,98,121,116,101,45,99,111,
-    109,112,105,108,101,100,10,32,32,32,32,102,105,108,101,46,
-    41,6,218,9,98,121,116,101,97,114,114,97,121,114,140,0,
-    0,0,218,6,101,120,116,101,110,100,114,17,0,0,0,114,
-    147,0,0,0,90,5,100,117,109,112,115,41,4,114,151,0,
-    0,0,114,138,0,0,0,114,145,0,0,0,114,53,0,0,
-    0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
-    218,17,95,99,111,100,101,95,116,111,95,98,121,116,101,99,
-    111,100,101,240,1,0,0,115,10,0,0,0,0,3,12,1,
-    19,1,19,1,22,1,114,155,0,0,0,99,1,0,0,0,
-    0,0,0,0,5,0,0,0,4,0,0,0,67,0,0,0,
-    115,89,0,0,0,100,1,0,100,2,0,108,0,0,125,1,
-    0,116,1,0,106,2,0,124,0,0,131,1,0,106,3,0,
-    125,2,0,124,1,0,106,4,0,124,2,0,131,1,0,125,
-    3,0,116,1,0,106,5,0,100,2,0,100,3,0,131,2,
-    0,125,4,0,124,4,0,106,6,0,124,0,0,106,6,0,
-    124,3,0,100,1,0,25,131,1,0,131,1,0,83,41,4,
-    122,121,68,101,99,111,100,101,32,98,121,116,101,115,32,114,
-    101,112,114,101,115,101,110,116,105,110,103,32,115,111,117,114,
-    99,101,32,99,111,100,101,32,97,110,100,32,114,101,116,117,
-    114,110,32,116,104,101,32,115,116,114,105,110,103,46,10,10,
-    32,32,32,32,85,110,105,118,101,114,115,97,108,32,110,101,
-    119,108,105,110,101,32,115,117,112,112,111,114,116,32,105,115,
-    32,117,115,101,100,32,105,110,32,116,104,101,32,100,101,99,
-    111,100,105,110,103,46,10,32,32,32,32,114,59,0,0,0,
-    78,84,41,7,218,8,116,111,107,101,110,105,122,101,114,49,
-    0,0,0,90,7,66,121,116,101,115,73,79,90,8,114,101,
-    97,100,108,105,110,101,90,15,100,101,116,101,99,116,95,101,
-    110,99,111,100,105,110,103,90,25,73,110,99,114,101,109,101,
-    110,116,97,108,78,101,119,108,105,110,101,68,101,99,111,100,
-    101,114,218,6,100,101,99,111,100,101,41,5,218,12,115,111,
-    117,114,99,101,95,98,121,116,101,115,114,156,0,0,0,90,
-    21,115,111,117,114,99,101,95,98,121,116,101,115,95,114,101,
-    97,100,108,105,110,101,218,8,101,110,99,111,100,105,110,103,
-    90,15,110,101,119,108,105,110,101,95,100,101,99,111,100,101,
-    114,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
-    218,13,100,101,99,111,100,101,95,115,111,117,114,99,101,250,
-    1,0,0,115,10,0,0,0,0,5,12,1,18,1,15,1,
-    18,1,114,160,0,0,0,218,6,111,114,105,103,105,110,218,
-    10,105,115,95,112,97,99,107,97,103,101,99,2,0,0,0,
-    2,0,0,0,5,0,0,0,15,0,0,0,67,0,0,0,
-    115,193,0,0,0,116,0,0,124,1,0,100,1,0,131,2,
-    0,114,83,0,124,3,0,100,2,0,107,8,0,114,43,0,
-    116,1,0,124,0,0,100,3,0,124,1,0,131,1,1,83,
-    124,3,0,114,55,0,103,0,0,110,3,0,100,2,0,125,
-    4,0,116,1,0,124,0,0,100,3,0,124,1,0,100,4,
-    0,124,4,0,131,1,2,83,124,3,0,100,2,0,107,8,
-    0,114,165,0,116,0,0,124,1,0,100,5,0,131,2,0,
-    114,159,0,121,19,0,124,1,0,106,2,0,124,0,0,131,
-    1,0,125,3,0,87,113,165,0,4,116,3,0,107,10,0,
-    114,155,0,1,1,1,100,2,0,125,3,0,89,113,165,0,
-    88,110,6,0,100,6,0,125,3,0,116,4,0,106,5,0,
-    124,0,0,124,1,0,100,7,0,124,2,0,100,5,0,124,
-    3,0,131,2,2,83,41,8,122,53,82,101,116,117,114,110,
-    32,97,32,109,111,100,117,108,101,32,115,112,101,99,32,98,
-    97,115,101,100,32,111,110,32,118,97,114,105,111,117,115,32,
-    108,111,97,100,101,114,32,109,101,116,104,111,100,115,46,218,
-    12,103,101,116,95,102,105,108,101,110,97,109,101,78,114,127,
-    0,0,0,218,26,115,117,98,109,111,100,117,108,101,95,115,
-    101,97,114,99,104,95,108,111,99,97,116,105,111,110,115,114,
-    162,0,0,0,70,114,161,0,0,0,41,6,114,115,0,0,
-    0,218,23,115,112,101,99,95,102,114,111,109,95,102,105,108,
-    101,95,108,111,99,97,116,105,111,110,114,162,0,0,0,114,
-    107,0,0,0,114,121,0,0,0,218,10,77,111,100,117,108,
-    101,83,112,101,99,41,5,114,106,0,0,0,114,127,0,0,
-    0,114,161,0,0,0,114,162,0,0,0,90,6,115,101,97,
-    114,99,104,114,4,0,0,0,114,4,0,0,0,114,5,0,
-    0,0,114,131,0,0,0,8,2,0,0,115,28,0,0,0,
-    0,2,15,1,12,1,16,1,18,1,15,1,7,2,12,1,
-    15,1,3,1,19,1,13,1,14,3,6,2,114,131,0,0,
-    0,114,127,0,0,0,114,164,0,0,0,99,2,0,0,0,
-    2,0,0,0,9,0,0,0,19,0,0,0,67,0,0,0,
-    115,89,1,0,0,124,1,0,100,1,0,107,8,0,114,73,
-    0,100,2,0,125,1,0,116,0,0,124,2,0,100,3,0,
-    131,2,0,114,73,0,121,19,0,124,2,0,106,1,0,124,
-    0,0,131,1,0,125,1,0,87,110,18,0,4,116,2,0,
-    107,10,0,114,72,0,1,1,1,89,110,1,0,88,116,3,
-    0,106,4,0,124,0,0,124,2,0,100,4,0,124,1,0,
-    131,2,1,125,4,0,100,5,0,124,4,0,95,5,0,124,
-    2,0,100,1,0,107,8,0,114,194,0,120,73,0,116,6,
-    0,131,0,0,68,93,58,0,92,2,0,125,5,0,125,6,
-    0,124,1,0,106,7,0,116,8,0,124,6,0,131,1,0,
-    131,1,0,114,128,0,124,5,0,124,0,0,124,1,0,131,
-    2,0,125,2,0,124,2,0,124,4,0,95,9,0,80,113,
-    128,0,87,100,1,0,83,124,3,0,116,10,0,107,8,0,
-    114,23,1,116,0,0,124,2,0,100,6,0,131,2,0,114,
-    32,1,121,19,0,124,2,0,106,11,0,124,0,0,131,1,
-    0,125,7,0,87,110,18,0,4,116,2,0,107,10,0,114,
-    4,1,1,1,1,89,113,32,1,88,124,7,0,114,32,1,
-    103,0,0,124,4,0,95,12,0,110,9,0,124,3,0,124,
-    4,0,95,12,0,124,4,0,106,12,0,103,0,0,107,2,
-    0,114,85,1,124,1,0,114,85,1,116,13,0,124,1,0,
-    131,1,0,100,7,0,25,125,8,0,124,4,0,106,12,0,
-    106,14,0,124,8,0,131,1,0,1,124,4,0,83,41,8,
-    97,61,1,0,0,82,101,116,117,114,110,32,97,32,109,111,
-    100,117,108,101,32,115,112,101,99,32,98,97,115,101,100,32,
-    111,110,32,97,32,102,105,108,101,32,108,111,99,97,116,105,
-    111,110,46,10,10,32,32,32,32,84,111,32,105,110,100,105,
-    99,97,116,101,32,116,104,97,116,32,116,104,101,32,109,111,
-    100,117,108,101,32,105,115,32,97,32,112,97,99,107,97,103,
-    101,44,32,115,101,116,10,32,32,32,32,115,117,98,109,111,
-    100,117,108,101,95,115,101,97,114,99,104,95,108,111,99,97,
-    116,105,111,110,115,32,116,111,32,97,32,108,105,115,116,32,
-    111,102,32,100,105,114,101,99,116,111,114,121,32,112,97,116,
-    104,115,46,32,32,65,110,10,32,32,32,32,101,109,112,116,
-    121,32,108,105,115,116,32,105,115,32,115,117,102,102,105,99,
-    105,101,110,116,44,32,116,104,111,117,103,104,32,105,116,115,
-    32,110,111,116,32,111,116,104,101,114,119,105,115,101,32,117,
-    115,101,102,117,108,32,116,111,32,116,104,101,10,32,32,32,
-    32,105,109,112,111,114,116,32,115,121,115,116,101,109,46,10,
-    10,32,32,32,32,84,104,101,32,108,111,97,100,101,114,32,
-    109,117,115,116,32,116,97,107,101,32,97,32,115,112,101,99,
-    32,97,115,32,105,116,115,32,111,110,108,121,32,95,95,105,
-    110,105,116,95,95,40,41,32,97,114,103,46,10,10,32,32,
-    32,32,78,122,9,60,117,110,107,110,111,119,110,62,114,163,
-    0,0,0,114,161,0,0,0,84,114,162,0,0,0,114,59,
-    0,0,0,41,15,114,115,0,0,0,114,163,0,0,0,114,
-    107,0,0,0,114,121,0,0,0,114,166,0,0,0,90,13,
-    95,115,101,116,95,102,105,108,101,97,116,116,114,218,27,95,
-    103,101,116,95,115,117,112,112,111,114,116,101,100,95,102,105,
-    108,101,95,108,111,97,100,101,114,115,114,92,0,0,0,114,
-    93,0,0,0,114,127,0,0,0,218,9,95,80,79,80,85,
-    76,65,84,69,114,162,0,0,0,114,164,0,0,0,114,38,
-    0,0,0,218,6,97,112,112,101,110,100,41,9,114,106,0,
-    0,0,90,8,108,111,99,97,116,105,111,110,114,127,0,0,
-    0,114,164,0,0,0,114,133,0,0,0,218,12,108,111,97,
-    100,101,114,95,99,108,97,115,115,218,8,115,117,102,102,105,
-    120,101,115,114,162,0,0,0,90,7,100,105,114,110,97,109,
-    101,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
-    114,165,0,0,0,33,2,0,0,115,60,0,0,0,0,12,
-    12,4,6,1,15,2,3,1,19,1,13,1,5,8,24,1,
-    9,3,12,1,22,1,21,1,15,1,9,1,5,2,4,3,
-    12,2,15,1,3,1,19,1,13,1,5,2,6,1,12,2,
-    9,1,15,1,6,1,16,1,16,2,114,165,0,0,0,99,
-    0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,
-    64,0,0,0,115,121,0,0,0,101,0,0,90,1,0,100,
-    0,0,90,2,0,100,1,0,90,3,0,100,2,0,90,4,
-    0,100,3,0,90,5,0,100,4,0,90,6,0,101,7,0,
-    100,5,0,100,6,0,132,0,0,131,1,0,90,8,0,101,
-    7,0,100,7,0,100,8,0,132,0,0,131,1,0,90,9,
-    0,101,7,0,100,9,0,100,9,0,100,10,0,100,11,0,
-    132,2,0,131,1,0,90,10,0,101,7,0,100,9,0,100,
-    12,0,100,13,0,132,1,0,131,1,0,90,11,0,100,9,
-    0,83,41,14,218,21,87,105,110,100,111,119,115,82,101,103,
-    105,115,116,114,121,70,105,110,100,101,114,122,62,77,101,116,
-    97,32,112,97,116,104,32,102,105,110,100,101,114,32,102,111,
-    114,32,109,111,100,117,108,101,115,32,100,101,99,108,97,114,
-    101,100,32,105,110,32,116,104,101,32,87,105,110,100,111,119,
-    115,32,114,101,103,105,115,116,114,121,46,122,59,83,111,102,
-    116,119,97,114,101,92,80,121,116,104,111,110,92,80,121,116,
-    104,111,110,67,111,114,101,92,123,115,121,115,95,118,101,114,
-    115,105,111,110,125,92,77,111,100,117,108,101,115,92,123,102,
-    117,108,108,110,97,109,101,125,122,65,83,111,102,116,119,97,
-    114,101,92,80,121,116,104,111,110,92,80,121,116,104,111,110,
-    67,111,114,101,92,123,115,121,115,95,118,101,114,115,105,111,
-    110,125,92,77,111,100,117,108,101,115,92,123,102,117,108,108,
-    110,97,109,101,125,92,68,101,98,117,103,70,99,2,0,0,
-    0,0,0,0,0,2,0,0,0,11,0,0,0,67,0,0,
-    0,115,67,0,0,0,121,23,0,116,0,0,106,1,0,116,
-    0,0,106,2,0,124,1,0,131,2,0,83,87,110,37,0,
-    4,116,3,0,107,10,0,114,62,0,1,1,1,116,0,0,
-    106,1,0,116,0,0,106,4,0,124,1,0,131,2,0,83,
-    89,110,1,0,88,100,0,0,83,41,1,78,41,5,218,7,
-    95,119,105,110,114,101,103,90,7,79,112,101,110,75,101,121,
-    90,17,72,75,69,89,95,67,85,82,82,69,78,84,95,85,
-    83,69,82,114,40,0,0,0,90,18,72,75,69,89,95,76,
-    79,67,65,76,95,77,65,67,72,73,78,69,41,2,218,3,
-    99,108,115,218,3,107,101,121,114,4,0,0,0,114,4,0,
-    0,0,114,5,0,0,0,218,14,95,111,112,101,110,95,114,
-    101,103,105,115,116,114,121,111,2,0,0,115,8,0,0,0,
-    0,2,3,1,23,1,13,1,122,36,87,105,110,100,111,119,
-    115,82,101,103,105,115,116,114,121,70,105,110,100,101,114,46,
-    95,111,112,101,110,95,114,101,103,105,115,116,114,121,99,2,
-    0,0,0,0,0,0,0,6,0,0,0,16,0,0,0,67,
-    0,0,0,115,142,0,0,0,124,0,0,106,0,0,114,21,
-    0,124,0,0,106,1,0,125,2,0,110,9,0,124,0,0,
-    106,2,0,125,2,0,124,2,0,106,3,0,100,1,0,124,
-    1,0,100,2,0,116,4,0,106,5,0,100,0,0,100,3,
-    0,133,2,0,25,131,0,2,125,3,0,121,46,0,124,0,
-    0,106,6,0,124,3,0,131,1,0,143,25,0,125,4,0,
-    116,7,0,106,8,0,124,4,0,100,4,0,131,2,0,125,
-    5,0,87,100,0,0,81,88,87,110,22,0,4,116,9,0,
-    107,10,0,114,137,0,1,1,1,100,0,0,83,89,110,1,
-    0,88,124,5,0,83,41,5,78,114,126,0,0,0,90,11,
-    115,121,115,95,118,101,114,115,105,111,110,114,80,0,0,0,
-    114,30,0,0,0,41,10,218,11,68,69,66,85,71,95,66,
-    85,73,76,68,218,18,82,69,71,73,83,84,82,89,95,75,
-    69,89,95,68,69,66,85,71,218,12,82,69,71,73,83,84,
-    82,89,95,75,69,89,114,47,0,0,0,114,7,0,0,0,
-    218,7,118,101,114,115,105,111,110,114,176,0,0,0,114,173,
-    0,0,0,90,10,81,117,101,114,121,86,97,108,117,101,114,
-    40,0,0,0,41,6,114,174,0,0,0,114,126,0,0,0,
-    90,12,114,101,103,105,115,116,114,121,95,107,101,121,114,175,
-    0,0,0,90,4,104,107,101,121,218,8,102,105,108,101,112,
-    97,116,104,114,4,0,0,0,114,4,0,0,0,114,5,0,
-    0,0,218,16,95,115,101,97,114,99,104,95,114,101,103,105,
-    115,116,114,121,118,2,0,0,115,22,0,0,0,0,2,9,
-    1,12,2,9,1,15,1,22,1,3,1,18,1,28,1,13,
-    1,9,1,122,38,87,105,110,100,111,119,115,82,101,103,105,
-    115,116,114,121,70,105,110,100,101,114,46,95,115,101,97,114,
-    99,104,95,114,101,103,105,115,116,114,121,78,99,4,0,0,
-    0,0,0,0,0,8,0,0,0,14,0,0,0,67,0,0,
-    0,115,155,0,0,0,124,0,0,106,0,0,124,1,0,131,
-    1,0,125,4,0,124,4,0,100,0,0,107,8,0,114,31,
-    0,100,0,0,83,121,14,0,116,1,0,124,4,0,131,1,
-    0,1,87,110,22,0,4,116,2,0,107,10,0,114,69,0,
-    1,1,1,100,0,0,83,89,110,1,0,88,120,78,0,116,
-    3,0,131,0,0,68,93,67,0,92,2,0,125,5,0,125,
-    6,0,124,4,0,106,4,0,116,5,0,124,6,0,131,1,
-    0,131,1,0,114,80,0,116,6,0,124,1,0,124,5,0,
-    124,1,0,124,4,0,131,2,0,100,1,0,124,4,0,131,
-    2,1,125,7,0,124,7,0,83,113,80,0,87,100,0,0,
-    83,41,2,78,114,161,0,0,0,41,7,114,182,0,0,0,
-    114,39,0,0,0,114,40,0,0,0,114,167,0,0,0,114,
-    92,0,0,0,114,93,0,0,0,114,131,0,0,0,41,8,
-    114,174,0,0,0,114,126,0,0,0,114,35,0,0,0,218,
-    6,116,97,114,103,101,116,114,181,0,0,0,114,127,0,0,
-    0,114,171,0,0,0,114,133,0,0,0,114,4,0,0,0,
-    114,4,0,0,0,114,5,0,0,0,218,9,102,105,110,100,
-    95,115,112,101,99,133,2,0,0,115,24,0,0,0,0,2,
-    15,1,12,1,4,1,3,1,14,1,13,1,9,1,22,1,
-    21,1,21,1,9,1,122,31,87,105,110,100,111,119,115,82,
-    101,103,105,115,116,114,121,70,105,110,100,101,114,46,102,105,
-    110,100,95,115,112,101,99,99,3,0,0,0,0,0,0,0,
-    4,0,0,0,3,0,0,0,67,0,0,0,115,45,0,0,
-    0,124,0,0,106,0,0,124,1,0,124,2,0,131,2,0,
-    125,3,0,124,3,0,100,1,0,107,9,0,114,37,0,124,
-    3,0,106,1,0,83,100,1,0,83,100,1,0,83,41,2,
-    122,108,70,105,110,100,32,109,111,100,117,108,101,32,110,97,
-    109,101,100,32,105,110,32,116,104,101,32,114,101,103,105,115,
-    116,114,121,46,10,10,32,32,32,32,32,32,32,32,84,104,
-    105,115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,
-    114,101,99,97,116,101,100,46,32,32,85,115,101,32,101,120,
-    101,99,95,109,111,100,117,108,101,40,41,32,105,110,115,116,
-    101,97,100,46,10,10,32,32,32,32,32,32,32,32,78,41,
-    2,114,184,0,0,0,114,127,0,0,0,41,4,114,174,0,
-    0,0,114,126,0,0,0,114,35,0,0,0,114,133,0,0,
-    0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
-    218,11,102,105,110,100,95,109,111,100,117,108,101,148,2,0,
-    0,115,8,0,0,0,0,7,18,1,12,1,7,2,122,33,
-    87,105,110,100,111,119,115,82,101,103,105,115,116,114,121,70,
-    105,110,100,101,114,46,102,105,110,100,95,109,111,100,117,108,
-    101,41,12,114,112,0,0,0,114,111,0,0,0,114,113,0,
-    0,0,114,114,0,0,0,114,179,0,0,0,114,178,0,0,
-    0,114,177,0,0,0,218,11,99,108,97,115,115,109,101,116,
-    104,111,100,114,176,0,0,0,114,182,0,0,0,114,184,0,
-    0,0,114,185,0,0,0,114,4,0,0,0,114,4,0,0,
-    0,114,4,0,0,0,114,5,0,0,0,114,172,0,0,0,
-    99,2,0,0,115,20,0,0,0,12,2,6,3,6,3,6,
-    2,6,2,18,7,18,15,3,1,21,14,3,1,114,172,0,
-    0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,2,
-    0,0,0,64,0,0,0,115,64,0,0,0,101,0,0,90,
-    1,0,100,0,0,90,2,0,100,1,0,90,3,0,100,2,
-    0,100,3,0,132,0,0,90,4,0,100,4,0,100,5,0,
-    132,0,0,90,5,0,100,6,0,100,7,0,132,0,0,90,
-    6,0,101,7,0,90,8,0,100,8,0,83,41,9,218,13,
-    95,76,111,97,100,101,114,66,97,115,105,99,115,122,83,66,
-    97,115,101,32,99,108,97,115,115,32,111,102,32,99,111,109,
-    109,111,110,32,99,111,100,101,32,110,101,101,100,101,100,32,
-    98,121,32,98,111,116,104,32,83,111,117,114,99,101,76,111,
-    97,100,101,114,32,97,110,100,10,32,32,32,32,83,111,117,
-    114,99,101,108,101,115,115,70,105,108,101,76,111,97,100,101,
-    114,46,99,2,0,0,0,0,0,0,0,5,0,0,0,3,
-    0,0,0,67,0,0,0,115,88,0,0,0,116,0,0,124,
-    0,0,106,1,0,124,1,0,131,1,0,131,1,0,100,1,
-    0,25,125,2,0,124,2,0,106,2,0,100,2,0,100,1,
-    0,131,2,0,100,3,0,25,125,3,0,124,1,0,106,3,
-    0,100,2,0,131,1,0,100,4,0,25,125,4,0,124,3,
-    0,100,5,0,107,2,0,111,87,0,124,4,0,100,5,0,
-    107,3,0,83,41,6,122,141,67,111,110,99,114,101,116,101,
-    32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,
-    111,102,32,73,110,115,112,101,99,116,76,111,97,100,101,114,
-    46,105,115,95,112,97,99,107,97,103,101,32,98,121,32,99,
-    104,101,99,107,105,110,103,32,105,102,10,32,32,32,32,32,
-    32,32,32,116,104,101,32,112,97,116,104,32,114,101,116,117,
-    114,110,101,100,32,98,121,32,103,101,116,95,102,105,108,101,
-    110,97,109,101,32,104,97,115,32,97,32,102,105,108,101,110,
-    97,109,101,32,111,102,32,39,95,95,105,110,105,116,95,95,
-    46,112,121,39,46,114,29,0,0,0,114,58,0,0,0,114,
-    59,0,0,0,114,56,0,0,0,218,8,95,95,105,110,105,
-    116,95,95,41,4,114,38,0,0,0,114,163,0,0,0,114,
-    34,0,0,0,114,32,0,0,0,41,5,114,108,0,0,0,
-    114,126,0,0,0,114,94,0,0,0,90,13,102,105,108,101,
-    110,97,109,101,95,98,97,115,101,90,9,116,97,105,108,95,
-    110,97,109,101,114,4,0,0,0,114,4,0,0,0,114,5,
-    0,0,0,114,162,0,0,0,167,2,0,0,115,8,0,0,
-    0,0,3,25,1,22,1,19,1,122,24,95,76,111,97,100,
-    101,114,66,97,115,105,99,115,46,105,115,95,112,97,99,107,
-    97,103,101,99,2,0,0,0,0,0,0,0,2,0,0,0,
-    1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,0,
-    83,41,2,122,42,85,115,101,32,100,101,102,97,117,108,116,
-    32,115,101,109,97,110,116,105,99,115,32,102,111,114,32,109,
-    111,100,117,108,101,32,99,114,101,97,116,105,111,110,46,78,
-    114,4,0,0,0,41,2,114,108,0,0,0,114,133,0,0,
-    0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
-    218,13,99,114,101,97,116,101,95,109,111,100,117,108,101,175,
-    2,0,0,115,0,0,0,0,122,27,95,76,111,97,100,101,
-    114,66,97,115,105,99,115,46,99,114,101,97,116,101,95,109,
-    111,100,117,108,101,99,2,0,0,0,0,0,0,0,3,0,
-    0,0,4,0,0,0,67,0,0,0,115,80,0,0,0,124,
-    0,0,106,0,0,124,1,0,106,1,0,131,1,0,125,2,
-    0,124,2,0,100,1,0,107,8,0,114,54,0,116,2,0,
-    100,2,0,106,3,0,124,1,0,106,1,0,131,1,0,131,
-    1,0,130,1,0,116,4,0,106,5,0,116,6,0,124,2,
-    0,124,1,0,106,7,0,131,3,0,1,100,1,0,83,41,
-    3,122,19,69,120,101,99,117,116,101,32,116,104,101,32,109,
-    111,100,117,108,101,46,78,122,52,99,97,110,110,111,116,32,
-    108,111,97,100,32,109,111,100,117,108,101,32,123,33,114,125,
-    32,119,104,101,110,32,103,101,116,95,99,111,100,101,40,41,
-    32,114,101,116,117,114,110,115,32,78,111,110,101,41,8,218,
-    8,103,101,116,95,99,111,100,101,114,112,0,0,0,114,107,
-    0,0,0,114,47,0,0,0,114,121,0,0,0,218,25,95,
-    99,97,108,108,95,119,105,116,104,95,102,114,97,109,101,115,
-    95,114,101,109,111,118,101,100,218,4,101,120,101,99,114,118,
-    0,0,0,41,3,114,108,0,0,0,114,134,0,0,0,114,
-    151,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
-    0,0,0,218,11,101,120,101,99,95,109,111,100,117,108,101,
-    178,2,0,0,115,10,0,0,0,0,2,18,1,12,1,9,
-    1,15,1,122,25,95,76,111,97,100,101,114,66,97,115,105,
-    99,115,46,101,120,101,99,95,109,111,100,117,108,101,78,41,
-    9,114,112,0,0,0,114,111,0,0,0,114,113,0,0,0,
-    114,114,0,0,0,114,162,0,0,0,114,189,0,0,0,114,
-    193,0,0,0,114,135,0,0,0,218,11,108,111,97,100,95,
-    109,111,100,117,108,101,114,4,0,0,0,114,4,0,0,0,
-    114,4,0,0,0,114,5,0,0,0,114,187,0,0,0,162,
-    2,0,0,115,10,0,0,0,12,3,6,2,12,8,12,3,
-    12,8,114,187,0,0,0,99,0,0,0,0,0,0,0,0,
-    0,0,0,0,4,0,0,0,64,0,0,0,115,106,0,0,
-    0,101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,
-    100,2,0,132,0,0,90,3,0,100,3,0,100,4,0,132,
-    0,0,90,4,0,100,5,0,100,6,0,132,0,0,90,5,
-    0,100,7,0,100,8,0,132,0,0,90,6,0,100,9,0,
-    100,10,0,132,0,0,90,7,0,100,11,0,100,18,0,100,
-    13,0,100,14,0,132,0,1,90,8,0,100,15,0,100,16,
-    0,132,0,0,90,9,0,100,17,0,83,41,19,218,12,83,
-    111,117,114,99,101,76,111,97,100,101,114,99,2,0,0,0,
-    0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,
-    115,10,0,0,0,116,0,0,130,1,0,100,1,0,83,41,
-    2,122,178,79,112,116,105,111,110,97,108,32,109,101,116,104,
-    111,100,32,116,104,97,116,32,114,101,116,117,114,110,115,32,
-    116,104,101,32,109,111,100,105,102,105,99,97,116,105,111,110,
-    32,116,105,109,101,32,40,97,110,32,105,110,116,41,32,102,
-    111,114,32,116,104,101,10,32,32,32,32,32,32,32,32,115,
-    112,101,99,105,102,105,101,100,32,112,97,116,104,44,32,119,
-    104,101,114,101,32,112,97,116,104,32,105,115,32,97,32,115,
-    116,114,46,10,10,32,32,32,32,32,32,32,32,82,97,105,
-    115,101,115,32,73,79,69,114,114,111,114,32,119,104,101,110,
-    32,116,104,101,32,112,97,116,104,32,99,97,110,110,111,116,
-    32,98,101,32,104,97,110,100,108,101,100,46,10,32,32,32,
-    32,32,32,32,32,78,41,1,218,7,73,79,69,114,114,111,
-    114,41,2,114,108,0,0,0,114,35,0,0,0,114,4,0,
-    0,0,114,4,0,0,0,114,5,0,0,0,218,10,112,97,
-    116,104,95,109,116,105,109,101,191,2,0,0,115,2,0,0,
-    0,0,6,122,23,83,111,117,114,99,101,76,111,97,100,101,
-    114,46,112,97,116,104,95,109,116,105,109,101,99,2,0,0,
-    0,0,0,0,0,2,0,0,0,3,0,0,0,67,0,0,
-    0,115,19,0,0,0,124,0,0,106,0,0,124,1,0,131,
-    1,0,100,1,0,105,1,0,83,41,2,97,170,1,0,0,
-    79,112,116,105,111,110,97,108,32,109,101,116,104,111,100,32,
-    114,101,116,117,114,110,105,110,103,32,97,32,109,101,116,97,
-    100,97,116,97,32,100,105,99,116,32,102,111,114,32,116,104,
-    101,32,115,112,101,99,105,102,105,101,100,32,112,97,116,104,
-    10,32,32,32,32,32,32,32,32,116,111,32,98,121,32,116,
-    104,101,32,112,97,116,104,32,40,115,116,114,41,46,10,32,
-    32,32,32,32,32,32,32,80,111,115,115,105,98,108,101,32,
-    107,101,121,115,58,10,32,32,32,32,32,32,32,32,45,32,
-    39,109,116,105,109,101,39,32,40,109,97,110,100,97,116,111,
-    114,121,41,32,105,115,32,116,104,101,32,110,117,109,101,114,
-    105,99,32,116,105,109,101,115,116,97,109,112,32,111,102,32,
-    108,97,115,116,32,115,111,117,114,99,101,10,32,32,32,32,
-    32,32,32,32,32,32,99,111,100,101,32,109,111,100,105,102,
-    105,99,97,116,105,111,110,59,10,32,32,32,32,32,32,32,
-    32,45,32,39,115,105,122,101,39,32,40,111,112,116,105,111,
-    110,97,108,41,32,105,115,32,116,104,101,32,115,105,122,101,
-    32,105,110,32,98,121,116,101,115,32,111,102,32,116,104,101,
-    32,115,111,117,114,99,101,32,99,111,100,101,46,10,10,32,
-    32,32,32,32,32,32,32,73,109,112,108,101,109,101,110,116,
-    105,110,103,32,116,104,105,115,32,109,101,116,104,111,100,32,
-    97,108,108,111,119,115,32,116,104,101,32,108,111,97,100,101,
-    114,32,116,111,32,114,101,97,100,32,98,121,116,101,99,111,
-    100,101,32,102,105,108,101,115,46,10,32,32,32,32,32,32,
-    32,32,82,97,105,115,101,115,32,73,79,69,114,114,111,114,
-    32,119,104,101,110,32,116,104,101,32,112,97,116,104,32,99,
-    97,110,110,111,116,32,98,101,32,104,97,110,100,108,101,100,
-    46,10,32,32,32,32,32,32,32,32,114,138,0,0,0,41,
-    1,114,197,0,0,0,41,2,114,108,0,0,0,114,35,0,
-    0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
-    0,218,10,112,97,116,104,95,115,116,97,116,115,199,2,0,
-    0,115,2,0,0,0,0,11,122,23,83,111,117,114,99,101,
-    76,111,97,100,101,114,46,112,97,116,104,95,115,116,97,116,
-    115,99,4,0,0,0,0,0,0,0,4,0,0,0,3,0,
-    0,0,67,0,0,0,115,16,0,0,0,124,0,0,106,0,
-    0,124,2,0,124,3,0,131,2,0,83,41,1,122,228,79,
-    112,116,105,111,110,97,108,32,109,101,116,104,111,100,32,119,
-    104,105,99,104,32,119,114,105,116,101,115,32,100,97,116,97,
-    32,40,98,121,116,101,115,41,32,116,111,32,97,32,102,105,
-    108,101,32,112,97,116,104,32,40,97,32,115,116,114,41,46,
-    10,10,32,32,32,32,32,32,32,32,73,109,112,108,101,109,
-    101,110,116,105,110,103,32,116,104,105,115,32,109,101,116,104,
-    111,100,32,97,108,108,111,119,115,32,102,111,114,32,116,104,
-    101,32,119,114,105,116,105,110,103,32,111,102,32,98,121,116,
-    101,99,111,100,101,32,102,105,108,101,115,46,10,10,32,32,
-    32,32,32,32,32,32,84,104,101,32,115,111,117,114,99,101,
-    32,112,97,116,104,32,105,115,32,110,101,101,100,101,100,32,
-    105,110,32,111,114,100,101,114,32,116,111,32,99,111,114,114,
-    101,99,116,108,121,32,116,114,97,110,115,102,101,114,32,112,
-    101,114,109,105,115,115,105,111,110,115,10,32,32,32,32,32,
-    32,32,32,41,1,218,8,115,101,116,95,100,97,116,97,41,
-    4,114,108,0,0,0,114,90,0,0,0,90,10,99,97,99,
-    104,101,95,112,97,116,104,114,53,0,0,0,114,4,0,0,
-    0,114,4,0,0,0,114,5,0,0,0,218,15,95,99,97,
-    99,104,101,95,98,121,116,101,99,111,100,101,212,2,0,0,
-    115,2,0,0,0,0,8,122,28,83,111,117,114,99,101,76,
-    111,97,100,101,114,46,95,99,97,99,104,101,95,98,121,116,
-    101,99,111,100,101,99,3,0,0,0,0,0,0,0,3,0,
-    0,0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,
-    1,0,83,41,2,122,150,79,112,116,105,111,110,97,108,32,
-    109,101,116,104,111,100,32,119,104,105,99,104,32,119,114,105,
-    116,101,115,32,100,97,116,97,32,40,98,121,116,101,115,41,
-    32,116,111,32,97,32,102,105,108,101,32,112,97,116,104,32,
-    40,97,32,115,116,114,41,46,10,10,32,32,32,32,32,32,
-    32,32,73,109,112,108,101,109,101,110,116,105,110,103,32,116,
-    104,105,115,32,109,101,116,104,111,100,32,97,108,108,111,119,
-    115,32,102,111,114,32,116,104,101,32,119,114,105,116,105,110,
-    103,32,111,102,32,98,121,116,101,99,111,100,101,32,102,105,
-    108,101,115,46,10,32,32,32,32,32,32,32,32,78,114,4,
-    0,0,0,41,3,114,108,0,0,0,114,35,0,0,0,114,
-    53,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
-    0,0,0,114,199,0,0,0,222,2,0,0,115,0,0,0,
-    0,122,21,83,111,117,114,99,101,76,111,97,100,101,114,46,
-    115,101,116,95,100,97,116,97,99,2,0,0,0,0,0,0,
-    0,5,0,0,0,16,0,0,0,67,0,0,0,115,105,0,
-    0,0,124,0,0,106,0,0,124,1,0,131,1,0,125,2,
-    0,121,19,0,124,0,0,106,1,0,124,2,0,131,1,0,
-    125,3,0,87,110,58,0,4,116,2,0,107,10,0,114,94,
-    0,1,125,4,0,1,122,26,0,116,3,0,100,1,0,100,
-    2,0,124,1,0,131,1,1,124,4,0,130,2,0,87,89,
-    100,3,0,100,3,0,125,4,0,126,4,0,88,110,1,0,
-    88,116,4,0,124,3,0,131,1,0,83,41,4,122,52,67,
-    111,110,99,114,101,116,101,32,105,109,112,108,101,109,101,110,
-    116,97,116,105,111,110,32,111,102,32,73,110,115,112,101,99,
-    116,76,111,97,100,101,114,46,103,101,116,95,115,111,117,114,
-    99,101,46,122,39,115,111,117,114,99,101,32,110,111,116,32,
-    97,118,97,105,108,97,98,108,101,32,116,104,114,111,117,103,
-    104,32,103,101,116,95,100,97,116,97,40,41,114,106,0,0,
-    0,78,41,5,114,163,0,0,0,218,8,103,101,116,95,100,
-    97,116,97,114,40,0,0,0,114,107,0,0,0,114,160,0,
-    0,0,41,5,114,108,0,0,0,114,126,0,0,0,114,35,
-    0,0,0,114,158,0,0,0,218,3,101,120,99,114,4,0,
-    0,0,114,4,0,0,0,114,5,0,0,0,218,10,103,101,
-    116,95,115,111,117,114,99,101,229,2,0,0,115,14,0,0,
-    0,0,2,15,1,3,1,19,1,18,1,9,1,31,1,122,
-    23,83,111,117,114,99,101,76,111,97,100,101,114,46,103,101,
-    116,95,115,111,117,114,99,101,218,9,95,111,112,116,105,109,
-    105,122,101,114,29,0,0,0,99,3,0,0,0,1,0,0,
-    0,4,0,0,0,9,0,0,0,67,0,0,0,115,34,0,
-    0,0,116,0,0,106,1,0,116,2,0,124,1,0,124,2,
-    0,100,1,0,100,2,0,100,3,0,100,4,0,124,3,0,
-    131,4,2,83,41,5,122,130,82,101,116,117,114,110,32,116,
-    104,101,32,99,111,100,101,32,111,98,106,101,99,116,32,99,
-    111,109,112,105,108,101,100,32,102,114,111,109,32,115,111,117,
-    114,99,101,46,10,10,32,32,32,32,32,32,32,32,84,104,
-    101,32,39,100,97,116,97,39,32,97,114,103,117,109,101,110,
-    116,32,99,97,110,32,98,101,32,97,110,121,32,111,98,106,
-    101,99,116,32,116,121,112,101,32,116,104,97,116,32,99,111,
-    109,112,105,108,101,40,41,32,115,117,112,112,111,114,116,115,
-    46,10,32,32,32,32,32,32,32,32,114,192,0,0,0,218,
-    12,100,111,110,116,95,105,110,104,101,114,105,116,84,114,68,
-    0,0,0,41,3,114,121,0,0,0,114,191,0,0,0,218,
-    7,99,111,109,112,105,108,101,41,4,114,108,0,0,0,114,
-    53,0,0,0,114,35,0,0,0,114,204,0,0,0,114,4,
-    0,0,0,114,4,0,0,0,114,5,0,0,0,218,14,115,
-    111,117,114,99,101,95,116,111,95,99,111,100,101,239,2,0,
-    0,115,4,0,0,0,0,5,21,1,122,27,83,111,117,114,
-    99,101,76,111,97,100,101,114,46,115,111,117,114,99,101,95,
-    116,111,95,99,111,100,101,99,2,0,0,0,0,0,0,0,
-    10,0,0,0,43,0,0,0,67,0,0,0,115,174,1,0,
-    0,124,0,0,106,0,0,124,1,0,131,1,0,125,2,0,
-    100,1,0,125,3,0,121,16,0,116,1,0,124,2,0,131,
-    1,0,125,4,0,87,110,24,0,4,116,2,0,107,10,0,
-    114,63,0,1,1,1,100,1,0,125,4,0,89,110,202,0,
-    88,121,19,0,124,0,0,106,3,0,124,2,0,131,1,0,
-    125,5,0,87,110,18,0,4,116,4,0,107,10,0,114,103,
-    0,1,1,1,89,110,162,0,88,116,5,0,124,5,0,100,
-    2,0,25,131,1,0,125,3,0,121,19,0,124,0,0,106,
-    6,0,124,4,0,131,1,0,125,6,0,87,110,18,0,4,
-    116,7,0,107,10,0,114,159,0,1,1,1,89,110,106,0,
-    88,121,34,0,116,8,0,124,6,0,100,3,0,124,5,0,
-    100,4,0,124,1,0,100,5,0,124,4,0,131,1,3,125,
-    7,0,87,110,24,0,4,116,9,0,116,10,0,102,2,0,
-    107,10,0,114,220,0,1,1,1,89,110,45,0,88,116,11,
-    0,100,6,0,124,4,0,124,2,0,131,3,0,1,116,12,
-    0,124,7,0,100,4,0,124,1,0,100,7,0,124,4,0,
-    100,8,0,124,2,0,131,1,3,83,124,0,0,106,6,0,
-    124,2,0,131,1,0,125,8,0,124,0,0,106,13,0,124,
-    8,0,124,2,0,131,2,0,125,9,0,116,11,0,100,9,
-    0,124,2,0,131,2,0,1,116,14,0,106,15,0,12,114,
-    170,1,124,4,0,100,1,0,107,9,0,114,170,1,124,3,
-    0,100,1,0,107,9,0,114,170,1,116,16,0,124,9,0,
-    124,3,0,116,17,0,124,8,0,131,1,0,131,3,0,125,
-    6,0,121,36,0,124,0,0,106,18,0,124,2,0,124,4,
-    0,124,6,0,131,3,0,1,116,11,0,100,10,0,124,4,
-    0,131,2,0,1,87,110,18,0,4,116,2,0,107,10,0,
-    114,169,1,1,1,1,89,110,1,0,88,124,9,0,83,41,
-    11,122,190,67,111,110,99,114,101,116,101,32,105,109,112,108,
-    101,109,101,110,116,97,116,105,111,110,32,111,102,32,73,110,
-    115,112,101,99,116,76,111,97,100,101,114,46,103,101,116,95,
-    99,111,100,101,46,10,10,32,32,32,32,32,32,32,32,82,
-    101,97,100,105,110,103,32,111,102,32,98,121,116,101,99,111,
-    100,101,32,114,101,113,117,105,114,101,115,32,112,97,116,104,
-    95,115,116,97,116,115,32,116,111,32,98,101,32,105,109,112,
-    108,101,109,101,110,116,101,100,46,32,84,111,32,119,114,105,
-    116,101,10,32,32,32,32,32,32,32,32,98,121,116,101,99,
-    111,100,101,44,32,115,101,116,95,100,97,116,97,32,109,117,
-    115,116,32,97,108,115,111,32,98,101,32,105,109,112,108,101,
-    109,101,110,116,101,100,46,10,10,32,32,32,32,32,32,32,
-    32,78,114,138,0,0,0,114,143,0,0,0,114,106,0,0,
-    0,114,35,0,0,0,122,13,123,125,32,109,97,116,99,104,
-    101,115,32,123,125,114,89,0,0,0,114,90,0,0,0,122,
-    19,99,111,100,101,32,111,98,106,101,99,116,32,102,114,111,
-    109,32,123,125,122,10,119,114,111,116,101,32,123,33,114,125,
-    41,19,114,163,0,0,0,114,79,0,0,0,114,66,0,0,
-    0,114,198,0,0,0,114,196,0,0,0,114,14,0,0,0,
-    114,201,0,0,0,114,40,0,0,0,114,146,0,0,0,114,
-    107,0,0,0,114,141,0,0,0,114,105,0,0,0,114,152,
-    0,0,0,114,207,0,0,0,114,7,0,0,0,218,19,100,
-    111,110,116,95,119,114,105,116,101,95,98,121,116,101,99,111,
-    100,101,114,155,0,0,0,114,31,0,0,0,114,200,0,0,
-    0,41,10,114,108,0,0,0,114,126,0,0,0,114,90,0,
-    0,0,114,144,0,0,0,114,89,0,0,0,218,2,115,116,
-    114,53,0,0,0,218,10,98,121,116,101,115,95,100,97,116,
-    97,114,158,0,0,0,90,11,99,111,100,101,95,111,98,106,
-    101,99,116,114,4,0,0,0,114,4,0,0,0,114,5,0,
-    0,0,114,190,0,0,0,247,2,0,0,115,78,0,0,0,
-    0,7,15,1,6,1,3,1,16,1,13,1,11,2,3,1,
-    19,1,13,1,5,2,16,1,3,1,19,1,13,1,5,2,
-    3,1,9,1,12,1,13,1,19,1,5,2,9,1,7,1,
-    15,1,6,1,7,1,15,1,18,1,13,1,22,1,12,1,
-    9,1,15,1,3,1,19,1,17,1,13,1,5,1,122,21,
-    83,111,117,114,99,101,76,111,97,100,101,114,46,103,101,116,
-    95,99,111,100,101,78,114,87,0,0,0,41,10,114,112,0,
-    0,0,114,111,0,0,0,114,113,0,0,0,114,197,0,0,
-    0,114,198,0,0,0,114,200,0,0,0,114,199,0,0,0,
-    114,203,0,0,0,114,207,0,0,0,114,190,0,0,0,114,
-    4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
-    0,0,0,114,195,0,0,0,189,2,0,0,115,14,0,0,
-    0,12,2,12,8,12,13,12,10,12,7,12,10,18,8,114,
-    195,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,
-    0,4,0,0,0,0,0,0,0,115,112,0,0,0,101,0,
+    0,0,218,11,102,105,110,100,95,109,111,100,117,108,101,148,
+    2,0,0,115,8,0,0,0,0,7,18,1,12,1,7,2,
+    122,33,87,105,110,100,111,119,115,82,101,103,105,115,116,114,
+    121,70,105,110,100,101,114,46,102,105,110,100,95,109,111,100,
+    117,108,101,41,12,114,112,0,0,0,114,111,0,0,0,114,
+    113,0,0,0,114,114,0,0,0,114,179,0,0,0,114,178,
+    0,0,0,114,177,0,0,0,218,11,99,108,97,115,115,109,
+    101,116,104,111,100,114,176,0,0,0,114,182,0,0,0,114,
+    184,0,0,0,114,185,0,0,0,114,4,0,0,0,114,4,
+    0,0,0,114,4,0,0,0,114,5,0,0,0,114,172,0,
+    0,0,99,2,0,0,115,20,0,0,0,12,2,6,3,6,
+    3,6,2,6,2,18,7,18,15,3,1,21,14,3,1,114,
+    172,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,
+    0,2,0,0,0,64,0,0,0,115,64,0,0,0,101,0,
     0,90,1,0,100,0,0,90,2,0,100,1,0,90,3,0,
     100,2,0,100,3,0,132,0,0,90,4,0,100,4,0,100,
     5,0,132,0,0,90,5,0,100,6,0,100,7,0,132,0,
-    0,90,6,0,101,7,0,135,0,0,102,1,0,100,8,0,
-    100,9,0,134,0,0,131,1,0,90,8,0,101,7,0,100,
-    10,0,100,11,0,132,0,0,131,1,0,90,9,0,100,12,
-    0,100,13,0,132,0,0,90,10,0,135,0,0,83,41,14,
-    218,10,70,105,108,101,76,111,97,100,101,114,122,103,66,97,
-    115,101,32,102,105,108,101,32,108,111,97,100,101,114,32,99,
-    108,97,115,115,32,119,104,105,99,104,32,105,109,112,108,101,
-    109,101,110,116,115,32,116,104,101,32,108,111,97,100,101,114,
-    32,112,114,111,116,111,99,111,108,32,109,101,116,104,111,100,
-    115,32,116,104,97,116,10,32,32,32,32,114,101,113,117,105,
-    114,101,32,102,105,108,101,32,115,121,115,116,101,109,32,117,
-    115,97,103,101,46,99,3,0,0,0,0,0,0,0,3,0,
-    0,0,2,0,0,0,67,0,0,0,115,22,0,0,0,124,
-    1,0,124,0,0,95,0,0,124,2,0,124,0,0,95,1,
-    0,100,1,0,83,41,2,122,75,67,97,99,104,101,32,116,
-    104,101,32,109,111,100,117,108,101,32,110,97,109,101,32,97,
-    110,100,32,116,104,101,32,112,97,116,104,32,116,111,32,116,
-    104,101,32,102,105,108,101,32,102,111,117,110,100,32,98,121,
-    32,116,104,101,10,32,32,32,32,32,32,32,32,102,105,110,
-    100,101,114,46,78,41,2,114,106,0,0,0,114,35,0,0,
-    0,41,3,114,108,0,0,0,114,126,0,0,0,114,35,0,
+    0,90,6,0,101,7,0,90,8,0,100,8,0,83,41,9,
+    218,13,95,76,111,97,100,101,114,66,97,115,105,99,115,122,
+    83,66,97,115,101,32,99,108,97,115,115,32,111,102,32,99,
+    111,109,109,111,110,32,99,111,100,101,32,110,101,101,100,101,
+    100,32,98,121,32,98,111,116,104,32,83,111,117,114,99,101,
+    76,111,97,100,101,114,32,97,110,100,10,32,32,32,32,83,
+    111,117,114,99,101,108,101,115,115,70,105,108,101,76,111,97,
+    100,101,114,46,99,2,0,0,0,0,0,0,0,5,0,0,
+    0,3,0,0,0,67,0,0,0,115,88,0,0,0,116,0,
+    0,124,0,0,106,1,0,124,1,0,131,1,0,131,1,0,
+    100,1,0,25,125,2,0,124,2,0,106,2,0,100,2,0,
+    100,1,0,131,2,0,100,3,0,25,125,3,0,124,1,0,
+    106,3,0,100,2,0,131,1,0,100,4,0,25,125,4,0,
+    124,3,0,100,5,0,107,2,0,111,87,0,124,4,0,100,
+    5,0,107,3,0,83,41,6,122,141,67,111,110,99,114,101,
+    116,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111,
+    110,32,111,102,32,73,110,115,112,101,99,116,76,111,97,100,
+    101,114,46,105,115,95,112,97,99,107,97,103,101,32,98,121,
+    32,99,104,101,99,107,105,110,103,32,105,102,10,32,32,32,
+    32,32,32,32,32,116,104,101,32,112,97,116,104,32,114,101,
+    116,117,114,110,101,100,32,98,121,32,103,101,116,95,102,105,
+    108,101,110,97,109,101,32,104,97,115,32,97,32,102,105,108,
+    101,110,97,109,101,32,111,102,32,39,95,95,105,110,105,116,
+    95,95,46,112,121,39,46,114,29,0,0,0,114,58,0,0,
+    0,114,59,0,0,0,114,56,0,0,0,218,8,95,95,105,
+    110,105,116,95,95,41,4,114,38,0,0,0,114,163,0,0,
+    0,114,34,0,0,0,114,32,0,0,0,41,5,114,108,0,
+    0,0,114,126,0,0,0,114,94,0,0,0,90,13,102,105,
+    108,101,110,97,109,101,95,98,97,115,101,90,9,116,97,105,
+    108,95,110,97,109,101,114,4,0,0,0,114,4,0,0,0,
+    114,5,0,0,0,114,162,0,0,0,167,2,0,0,115,8,
+    0,0,0,0,3,25,1,22,1,19,1,122,24,95,76,111,
+    97,100,101,114,66,97,115,105,99,115,46,105,115,95,112,97,
+    99,107,97,103,101,99,2,0,0,0,0,0,0,0,2,0,
+    0,0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,
+    1,0,83,41,2,122,42,85,115,101,32,100,101,102,97,117,
+    108,116,32,115,101,109,97,110,116,105,99,115,32,102,111,114,
+    32,109,111,100,117,108,101,32,99,114,101,97,116,105,111,110,
+    46,78,114,4,0,0,0,41,2,114,108,0,0,0,114,133,
+    0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
+    0,0,218,13,99,114,101,97,116,101,95,109,111,100,117,108,
+    101,175,2,0,0,115,0,0,0,0,122,27,95,76,111,97,
+    100,101,114,66,97,115,105,99,115,46,99,114,101,97,116,101,
+    95,109,111,100,117,108,101,99,2,0,0,0,0,0,0,0,
+    3,0,0,0,4,0,0,0,67,0,0,0,115,80,0,0,
+    0,124,0,0,106,0,0,124,1,0,106,1,0,131,1,0,
+    125,2,0,124,2,0,100,1,0,107,8,0,114,54,0,116,
+    2,0,100,2,0,106,3,0,124,1,0,106,1,0,131,1,
+    0,131,1,0,130,1,0,116,4,0,106,5,0,116,6,0,
+    124,2,0,124,1,0,106,7,0,131,3,0,1,100,1,0,
+    83,41,3,122,19,69,120,101,99,117,116,101,32,116,104,101,
+    32,109,111,100,117,108,101,46,78,122,52,99,97,110,110,111,
+    116,32,108,111,97,100,32,109,111,100,117,108,101,32,123,33,
+    114,125,32,119,104,101,110,32,103,101,116,95,99,111,100,101,
+    40,41,32,114,101,116,117,114,110,115,32,78,111,110,101,41,
+    8,218,8,103,101,116,95,99,111,100,101,114,112,0,0,0,
+    114,107,0,0,0,114,47,0,0,0,114,121,0,0,0,218,
+    25,95,99,97,108,108,95,119,105,116,104,95,102,114,97,109,
+    101,115,95,114,101,109,111,118,101,100,218,4,101,120,101,99,
+    114,118,0,0,0,41,3,114,108,0,0,0,114,134,0,0,
+    0,114,151,0,0,0,114,4,0,0,0,114,4,0,0,0,
+    114,5,0,0,0,218,11,101,120,101,99,95,109,111,100,117,
+    108,101,178,2,0,0,115,10,0,0,0,0,2,18,1,12,
+    1,9,1,15,1,122,25,95,76,111,97,100,101,114,66,97,
+    115,105,99,115,46,101,120,101,99,95,109,111,100,117,108,101,
+    78,41,9,114,112,0,0,0,114,111,0,0,0,114,113,0,
+    0,0,114,114,0,0,0,114,162,0,0,0,114,189,0,0,
+    0,114,193,0,0,0,114,135,0,0,0,218,11,108,111,97,
+    100,95,109,111,100,117,108,101,114,4,0,0,0,114,4,0,
+    0,0,114,4,0,0,0,114,5,0,0,0,114,187,0,0,
+    0,162,2,0,0,115,10,0,0,0,12,3,6,2,12,8,
+    12,3,12,8,114,187,0,0,0,99,0,0,0,0,0,0,
+    0,0,0,0,0,0,4,0,0,0,64,0,0,0,115,106,
+    0,0,0,101,0,0,90,1,0,100,0,0,90,2,0,100,
+    1,0,100,2,0,132,0,0,90,3,0,100,3,0,100,4,
+    0,132,0,0,90,4,0,100,5,0,100,6,0,132,0,0,
+    90,5,0,100,7,0,100,8,0,132,0,0,90,6,0,100,
+    9,0,100,10,0,132,0,0,90,7,0,100,11,0,100,18,
+    0,100,13,0,100,14,0,132,0,1,90,8,0,100,15,0,
+    100,16,0,132,0,0,90,9,0,100,17,0,83,41,19,218,
+    12,83,111,117,114,99,101,76,111,97,100,101,114,99,2,0,
+    0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,
+    0,0,115,10,0,0,0,116,0,0,130,1,0,100,1,0,
+    83,41,2,122,178,79,112,116,105,111,110,97,108,32,109,101,
+    116,104,111,100,32,116,104,97,116,32,114,101,116,117,114,110,
+    115,32,116,104,101,32,109,111,100,105,102,105,99,97,116,105,
+    111,110,32,116,105,109,101,32,40,97,110,32,105,110,116,41,
+    32,102,111,114,32,116,104,101,10,32,32,32,32,32,32,32,
+    32,115,112,101,99,105,102,105,101,100,32,112,97,116,104,44,
+    32,119,104,101,114,101,32,112,97,116,104,32,105,115,32,97,
+    32,115,116,114,46,10,10,32,32,32,32,32,32,32,32,82,
+    97,105,115,101,115,32,73,79,69,114,114,111,114,32,119,104,
+    101,110,32,116,104,101,32,112,97,116,104,32,99,97,110,110,
+    111,116,32,98,101,32,104,97,110,100,108,101,100,46,10,32,
+    32,32,32,32,32,32,32,78,41,1,218,7,73,79,69,114,
+    114,111,114,41,2,114,108,0,0,0,114,35,0,0,0,114,
+    4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,10,
+    112,97,116,104,95,109,116,105,109,101,191,2,0,0,115,2,
+    0,0,0,0,6,122,23,83,111,117,114,99,101,76,111,97,
+    100,101,114,46,112,97,116,104,95,109,116,105,109,101,99,2,
+    0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,67,
+    0,0,0,115,19,0,0,0,124,0,0,106,0,0,124,1,
+    0,131,1,0,100,1,0,105,1,0,83,41,2,97,170,1,
+    0,0,79,112,116,105,111,110,97,108,32,109,101,116,104,111,
+    100,32,114,101,116,117,114,110,105,110,103,32,97,32,109,101,
+    116,97,100,97,116,97,32,100,105,99,116,32,102,111,114,32,
+    116,104,101,32,115,112,101,99,105,102,105,101,100,32,112,97,
+    116,104,10,32,32,32,32,32,32,32,32,116,111,32,98,121,
+    32,116,104,101,32,112,97,116,104,32,40,115,116,114,41,46,
+    10,32,32,32,32,32,32,32,32,80,111,115,115,105,98,108,
+    101,32,107,101,121,115,58,10,32,32,32,32,32,32,32,32,
+    45,32,39,109,116,105,109,101,39,32,40,109,97,110,100,97,
+    116,111,114,121,41,32,105,115,32,116,104,101,32,110,117,109,
+    101,114,105,99,32,116,105,109,101,115,116,97,109,112,32,111,
+    102,32,108,97,115,116,32,115,111,117,114,99,101,10,32,32,
+    32,32,32,32,32,32,32,32,99,111,100,101,32,109,111,100,
+    105,102,105,99,97,116,105,111,110,59,10,32,32,32,32,32,
+    32,32,32,45,32,39,115,105,122,101,39,32,40,111,112,116,
+    105,111,110,97,108,41,32,105,115,32,116,104,101,32,115,105,
+    122,101,32,105,110,32,98,121,116,101,115,32,111,102,32,116,
+    104,101,32,115,111,117,114,99,101,32,99,111,100,101,46,10,
+    10,32,32,32,32,32,32,32,32,73,109,112,108,101,109,101,
+    110,116,105,110,103,32,116,104,105,115,32,109,101,116,104,111,
+    100,32,97,108,108,111,119,115,32,116,104,101,32,108,111,97,
+    100,101,114,32,116,111,32,114,101,97,100,32,98,121,116,101,
+    99,111,100,101,32,102,105,108,101,115,46,10,32,32,32,32,
+    32,32,32,32,82,97,105,115,101,115,32,73,79,69,114,114,
+    111,114,32,119,104,101,110,32,116,104,101,32,112,97,116,104,
+    32,99,97,110,110,111,116,32,98,101,32,104,97,110,100,108,
+    101,100,46,10,32,32,32,32,32,32,32,32,114,138,0,0,
+    0,41,1,114,197,0,0,0,41,2,114,108,0,0,0,114,
+    35,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
+    0,0,0,218,10,112,97,116,104,95,115,116,97,116,115,199,
+    2,0,0,115,2,0,0,0,0,11,122,23,83,111,117,114,
+    99,101,76,111,97,100,101,114,46,112,97,116,104,95,115,116,
+    97,116,115,99,4,0,0,0,0,0,0,0,4,0,0,0,
+    3,0,0,0,67,0,0,0,115,16,0,0,0,124,0,0,
+    106,0,0,124,2,0,124,3,0,131,2,0,83,41,1,122,
+    228,79,112,116,105,111,110,97,108,32,109,101,116,104,111,100,
+    32,119,104,105,99,104,32,119,114,105,116,101,115,32,100,97,
+    116,97,32,40,98,121,116,101,115,41,32,116,111,32,97,32,
+    102,105,108,101,32,112,97,116,104,32,40,97,32,115,116,114,
+    41,46,10,10,32,32,32,32,32,32,32,32,73,109,112,108,
+    101,109,101,110,116,105,110,103,32,116,104,105,115,32,109,101,
+    116,104,111,100,32,97,108,108,111,119,115,32,102,111,114,32,
+    116,104,101,32,119,114,105,116,105,110,103,32,111,102,32,98,
+    121,116,101,99,111,100,101,32,102,105,108,101,115,46,10,10,
+    32,32,32,32,32,32,32,32,84,104,101,32,115,111,117,114,
+    99,101,32,112,97,116,104,32,105,115,32,110,101,101,100,101,
+    100,32,105,110,32,111,114,100,101,114,32,116,111,32,99,111,
+    114,114,101,99,116,108,121,32,116,114,97,110,115,102,101,114,
+    32,112,101,114,109,105,115,115,105,111,110,115,10,32,32,32,
+    32,32,32,32,32,41,1,218,8,115,101,116,95,100,97,116,
+    97,41,4,114,108,0,0,0,114,90,0,0,0,90,10,99,
+    97,99,104,101,95,112,97,116,104,114,53,0,0,0,114,4,
+    0,0,0,114,4,0,0,0,114,5,0,0,0,218,15,95,
+    99,97,99,104,101,95,98,121,116,101,99,111,100,101,212,2,
+    0,0,115,2,0,0,0,0,8,122,28,83,111,117,114,99,
+    101,76,111,97,100,101,114,46,95,99,97,99,104,101,95,98,
+    121,116,101,99,111,100,101,99,3,0,0,0,0,0,0,0,
+    3,0,0,0,1,0,0,0,67,0,0,0,115,4,0,0,
+    0,100,1,0,83,41,2,122,150,79,112,116,105,111,110,97,
+    108,32,109,101,116,104,111,100,32,119,104,105,99,104,32,119,
+    114,105,116,101,115,32,100,97,116,97,32,40,98,121,116,101,
+    115,41,32,116,111,32,97,32,102,105,108,101,32,112,97,116,
+    104,32,40,97,32,115,116,114,41,46,10,10,32,32,32,32,
+    32,32,32,32,73,109,112,108,101,109,101,110,116,105,110,103,
+    32,116,104,105,115,32,109,101,116,104,111,100,32,97,108,108,
+    111,119,115,32,102,111,114,32,116,104,101,32,119,114,105,116,
+    105,110,103,32,111,102,32,98,121,116,101,99,111,100,101,32,
+    102,105,108,101,115,46,10,32,32,32,32,32,32,32,32,78,
+    114,4,0,0,0,41,3,114,108,0,0,0,114,35,0,0,
+    0,114,53,0,0,0,114,4,0,0,0,114,4,0,0,0,
+    114,5,0,0,0,114,199,0,0,0,222,2,0,0,115,0,
+    0,0,0,122,21,83,111,117,114,99,101,76,111,97,100,101,
+    114,46,115,101,116,95,100,97,116,97,99,2,0,0,0,0,
+    0,0,0,5,0,0,0,16,0,0,0,67,0,0,0,115,
+    105,0,0,0,124,0,0,106,0,0,124,1,0,131,1,0,
+    125,2,0,121,19,0,124,0,0,106,1,0,124,2,0,131,
+    1,0,125,3,0,87,110,58,0,4,116,2,0,107,10,0,
+    114,94,0,1,125,4,0,1,122,26,0,116,3,0,100,1,
+    0,100,2,0,124,1,0,131,1,1,124,4,0,130,2,0,
+    87,89,100,3,0,100,3,0,125,4,0,126,4,0,88,110,
+    1,0,88,116,4,0,124,3,0,131,1,0,83,41,4,122,
+    52,67,111,110,99,114,101,116,101,32,105,109,112,108,101,109,
+    101,110,116,97,116,105,111,110,32,111,102,32,73,110,115,112,
+    101,99,116,76,111,97,100,101,114,46,103,101,116,95,115,111,
+    117,114,99,101,46,122,39,115,111,117,114,99,101,32,110,111,
+    116,32,97,118,97,105,108,97,98,108,101,32,116,104,114,111,
+    117,103,104,32,103,101,116,95,100,97,116,97,40,41,114,106,
+    0,0,0,78,41,5,114,163,0,0,0,218,8,103,101,116,
+    95,100,97,116,97,114,40,0,0,0,114,107,0,0,0,114,
+    160,0,0,0,41,5,114,108,0,0,0,114,126,0,0,0,
+    114,35,0,0,0,114,158,0,0,0,218,3,101,120,99,114,
+    4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,10,
+    103,101,116,95,115,111,117,114,99,101,229,2,0,0,115,14,
+    0,0,0,0,2,15,1,3,1,19,1,18,1,9,1,31,
+    1,122,23,83,111,117,114,99,101,76,111,97,100,101,114,46,
+    103,101,116,95,115,111,117,114,99,101,218,9,95,111,112,116,
+    105,109,105,122,101,114,29,0,0,0,99,3,0,0,0,1,
+    0,0,0,4,0,0,0,9,0,0,0,67,0,0,0,115,
+    34,0,0,0,116,0,0,106,1,0,116,2,0,124,1,0,
+    124,2,0,100,1,0,100,2,0,100,3,0,100,4,0,124,
+    3,0,131,4,2,83,41,5,122,130,82,101,116,117,114,110,
+    32,116,104,101,32,99,111,100,101,32,111,98,106,101,99,116,
+    32,99,111,109,112,105,108,101,100,32,102,114,111,109,32,115,
+    111,117,114,99,101,46,10,10,32,32,32,32,32,32,32,32,
+    84,104,101,32,39,100,97,116,97,39,32,97,114,103,117,109,
+    101,110,116,32,99,97,110,32,98,101,32,97,110,121,32,111,
+    98,106,101,99,116,32,116,121,112,101,32,116,104,97,116,32,
+    99,111,109,112,105,108,101,40,41,32,115,117,112,112,111,114,
+    116,115,46,10,32,32,32,32,32,32,32,32,114,192,0,0,
+    0,218,12,100,111,110,116,95,105,110,104,101,114,105,116,84,
+    114,68,0,0,0,41,3,114,121,0,0,0,114,191,0,0,
+    0,218,7,99,111,109,112,105,108,101,41,4,114,108,0,0,
+    0,114,53,0,0,0,114,35,0,0,0,114,204,0,0,0,
+    114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,
+    14,115,111,117,114,99,101,95,116,111,95,99,111,100,101,239,
+    2,0,0,115,4,0,0,0,0,5,21,1,122,27,83,111,
+    117,114,99,101,76,111,97,100,101,114,46,115,111,117,114,99,
+    101,95,116,111,95,99,111,100,101,99,2,0,0,0,0,0,
+    0,0,10,0,0,0,43,0,0,0,67,0,0,0,115,174,
+    1,0,0,124,0,0,106,0,0,124,1,0,131,1,0,125,
+    2,0,100,1,0,125,3,0,121,16,0,116,1,0,124,2,
+    0,131,1,0,125,4,0,87,110,24,0,4,116,2,0,107,
+    10,0,114,63,0,1,1,1,100,1,0,125,4,0,89,110,
+    202,0,88,121,19,0,124,0,0,106,3,0,124,2,0,131,
+    1,0,125,5,0,87,110,18,0,4,116,4,0,107,10,0,
+    114,103,0,1,1,1,89,110,162,0,88,116,5,0,124,5,
+    0,100,2,0,25,131,1,0,125,3,0,121,19,0,124,0,
+    0,106,6,0,124,4,0,131,1,0,125,6,0,87,110,18,
+    0,4,116,7,0,107,10,0,114,159,0,1,1,1,89,110,
+    106,0,88,121,34,0,116,8,0,124,6,0,100,3,0,124,
+    5,0,100,4,0,124,1,0,100,5,0,124,4,0,131,1,
+    3,125,7,0,87,110,24,0,4,116,9,0,116,10,0,102,
+    2,0,107,10,0,114,220,0,1,1,1,89,110,45,0,88,
+    116,11,0,100,6,0,124,4,0,124,2,0,131,3,0,1,
+    116,12,0,124,7,0,100,4,0,124,1,0,100,7,0,124,
+    4,0,100,8,0,124,2,0,131,1,3,83,124,0,0,106,
+    6,0,124,2,0,131,1,0,125,8,0,124,0,0,106,13,
+    0,124,8,0,124,2,0,131,2,0,125,9,0,116,11,0,
+    100,9,0,124,2,0,131,2,0,1,116,14,0,106,15,0,
+    12,114,170,1,124,4,0,100,1,0,107,9,0,114,170,1,
+    124,3,0,100,1,0,107,9,0,114,170,1,116,16,0,124,
+    9,0,124,3,0,116,17,0,124,8,0,131,1,0,131,3,
+    0,125,6,0,121,36,0,124,0,0,106,18,0,124,2,0,
+    124,4,0,124,6,0,131,3,0,1,116,11,0,100,10,0,
+    124,4,0,131,2,0,1,87,110,18,0,4,116,2,0,107,
+    10,0,114,169,1,1,1,1,89,110,1,0,88,124,9,0,
+    83,41,11,122,190,67,111,110,99,114,101,116,101,32,105,109,
+    112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,32,
+    73,110,115,112,101,99,116,76,111,97,100,101,114,46,103,101,
+    116,95,99,111,100,101,46,10,10,32,32,32,32,32,32,32,
+    32,82,101,97,100,105,110,103,32,111,102,32,98,121,116,101,
+    99,111,100,101,32,114,101,113,117,105,114,101,115,32,112,97,
+    116,104,95,115,116,97,116,115,32,116,111,32,98,101,32,105,
+    109,112,108,101,109,101,110,116,101,100,46,32,84,111,32,119,
+    114,105,116,101,10,32,32,32,32,32,32,32,32,98,121,116,
+    101,99,111,100,101,44,32,115,101,116,95,100,97,116,97,32,
+    109,117,115,116,32,97,108,115,111,32,98,101,32,105,109,112,
+    108,101,109,101,110,116,101,100,46,10,10,32,32,32,32,32,
+    32,32,32,78,114,138,0,0,0,114,143,0,0,0,114,106,
+    0,0,0,114,35,0,0,0,122,13,123,125,32,109,97,116,
+    99,104,101,115,32,123,125,114,89,0,0,0,114,90,0,0,
+    0,122,19,99,111,100,101,32,111,98,106,101,99,116,32,102,
+    114,111,109,32,123,125,122,10,119,114,111,116,101,32,123,33,
+    114,125,41,19,114,163,0,0,0,114,79,0,0,0,114,66,
+    0,0,0,114,198,0,0,0,114,196,0,0,0,114,14,0,
+    0,0,114,201,0,0,0,114,40,0,0,0,114,146,0,0,
+    0,114,107,0,0,0,114,141,0,0,0,114,105,0,0,0,
+    114,152,0,0,0,114,207,0,0,0,114,7,0,0,0,218,
+    19,100,111,110,116,95,119,114,105,116,101,95,98,121,116,101,
+    99,111,100,101,114,155,0,0,0,114,31,0,0,0,114,200,
+    0,0,0,41,10,114,108,0,0,0,114,126,0,0,0,114,
+    90,0,0,0,114,144,0,0,0,114,89,0,0,0,218,2,
+    115,116,114,53,0,0,0,218,10,98,121,116,101,115,95,100,
+    97,116,97,114,158,0,0,0,90,11,99,111,100,101,95,111,
+    98,106,101,99,116,114,4,0,0,0,114,4,0,0,0,114,
+    5,0,0,0,114,190,0,0,0,247,2,0,0,115,78,0,
+    0,0,0,7,15,1,6,1,3,1,16,1,13,1,11,2,
+    3,1,19,1,13,1,5,2,16,1,3,1,19,1,13,1,
+    5,2,3,1,9,1,12,1,13,1,19,1,5,2,9,1,
+    7,1,15,1,6,1,7,1,15,1,18,1,13,1,22,1,
+    12,1,9,1,15,1,3,1,19,1,17,1,13,1,5,1,
+    122,21,83,111,117,114,99,101,76,111,97,100,101,114,46,103,
+    101,116,95,99,111,100,101,78,114,87,0,0,0,41,10,114,
+    112,0,0,0,114,111,0,0,0,114,113,0,0,0,114,197,
+    0,0,0,114,198,0,0,0,114,200,0,0,0,114,199,0,
+    0,0,114,203,0,0,0,114,207,0,0,0,114,190,0,0,
+    0,114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,
+    114,5,0,0,0,114,195,0,0,0,189,2,0,0,115,14,
+    0,0,0,12,2,12,8,12,13,12,10,12,7,12,10,18,
+    8,114,195,0,0,0,99,0,0,0,0,0,0,0,0,0,
+    0,0,0,4,0,0,0,0,0,0,0,115,112,0,0,0,
+    101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,90,
+    3,0,100,2,0,100,3,0,132,0,0,90,4,0,100,4,
+    0,100,5,0,132,0,0,90,5,0,100,6,0,100,7,0,
+    132,0,0,90,6,0,101,7,0,135,0,0,102,1,0,100,
+    8,0,100,9,0,134,0,0,131,1,0,90,8,0,101,7,
+    0,100,10,0,100,11,0,132,0,0,131,1,0,90,9,0,
+    100,12,0,100,13,0,132,0,0,90,10,0,135,0,0,83,
+    41,14,218,10,70,105,108,101,76,111,97,100,101,114,122,103,
+    66,97,115,101,32,102,105,108,101,32,108,111,97,100,101,114,
+    32,99,108,97,115,115,32,119,104,105,99,104,32,105,109,112,
+    108,101,109,101,110,116,115,32,116,104,101,32,108,111,97,100,
+    101,114,32,112,114,111,116,111,99,111,108,32,109,101,116,104,
+    111,100,115,32,116,104,97,116,10,32,32,32,32,114,101,113,
+    117,105,114,101,32,102,105,108,101,32,115,121,115,116,101,109,
+    32,117,115,97,103,101,46,99,3,0,0,0,0,0,0,0,
+    3,0,0,0,2,0,0,0,67,0,0,0,115,22,0,0,
+    0,124,1,0,124,0,0,95,0,0,124,2,0,124,0,0,
+    95,1,0,100,1,0,83,41,2,122,75,67,97,99,104,101,
+    32,116,104,101,32,109,111,100,117,108,101,32,110,97,109,101,
+    32,97,110,100,32,116,104,101,32,112,97,116,104,32,116,111,
+    32,116,104,101,32,102,105,108,101,32,102,111,117,110,100,32,
+    98,121,32,116,104,101,10,32,32,32,32,32,32,32,32,102,
+    105,110,100,101,114,46,78,41,2,114,106,0,0,0,114,35,
+    0,0,0,41,3,114,108,0,0,0,114,126,0,0,0,114,
+    35,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
+    0,0,0,114,188,0,0,0,48,3,0,0,115,4,0,0,
+    0,0,3,9,1,122,19,70,105,108,101,76,111,97,100,101,
+    114,46,95,95,105,110,105,116,95,95,99,2,0,0,0,0,
+    0,0,0,2,0,0,0,2,0,0,0,67,0,0,0,115,
+    34,0,0,0,124,0,0,106,0,0,124,1,0,106,0,0,
+    107,2,0,111,33,0,124,0,0,106,1,0,124,1,0,106,
+    1,0,107,2,0,83,41,1,78,41,2,218,9,95,95,99,
+    108,97,115,115,95,95,114,118,0,0,0,41,2,114,108,0,
+    0,0,218,5,111,116,104,101,114,114,4,0,0,0,114,4,
+    0,0,0,114,5,0,0,0,218,6,95,95,101,113,95,95,
+    54,3,0,0,115,4,0,0,0,0,1,18,1,122,17,70,
+    105,108,101,76,111,97,100,101,114,46,95,95,101,113,95,95,
+    99,1,0,0,0,0,0,0,0,1,0,0,0,3,0,0,
+    0,67,0,0,0,115,26,0,0,0,116,0,0,124,0,0,
+    106,1,0,131,1,0,116,0,0,124,0,0,106,2,0,131,
+    1,0,65,83,41,1,78,41,3,218,4,104,97,115,104,114,
+    106,0,0,0,114,35,0,0,0,41,1,114,108,0,0,0,
+    114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,
+    8,95,95,104,97,115,104,95,95,58,3,0,0,115,2,0,
+    0,0,0,1,122,19,70,105,108,101,76,111,97,100,101,114,
+    46,95,95,104,97,115,104,95,95,99,2,0,0,0,0,0,
+    0,0,2,0,0,0,3,0,0,0,3,0,0,0,115,22,
+    0,0,0,116,0,0,116,1,0,124,0,0,131,2,0,106,
+    2,0,124,1,0,131,1,0,83,41,1,122,100,76,111,97,
+    100,32,97,32,109,111,100,117,108,101,32,102,114,111,109,32,
+    97,32,102,105,108,101,46,10,10,32,32,32,32,32,32,32,
+    32,84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,
+    100,101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,
+    32,101,120,101,99,95,109,111,100,117,108,101,40,41,32,105,
+    110,115,116,101,97,100,46,10,10,32,32,32,32,32,32,32,
+    32,41,3,218,5,115,117,112,101,114,114,211,0,0,0,114,
+    194,0,0,0,41,2,114,108,0,0,0,114,126,0,0,0,
+    41,1,114,212,0,0,0,114,4,0,0,0,114,5,0,0,
+    0,114,194,0,0,0,61,3,0,0,115,2,0,0,0,0,
+    10,122,22,70,105,108,101,76,111,97,100,101,114,46,108,111,
+    97,100,95,109,111,100,117,108,101,99,2,0,0,0,0,0,
+    0,0,2,0,0,0,1,0,0,0,67,0,0,0,115,7,
+    0,0,0,124,0,0,106,0,0,83,41,1,122,58,82,101,
+    116,117,114,110,32,116,104,101,32,112,97,116,104,32,116,111,
+    32,116,104,101,32,115,111,117,114,99,101,32,102,105,108,101,
+    32,97,115,32,102,111,117,110,100,32,98,121,32,116,104,101,
+    32,102,105,110,100,101,114,46,41,1,114,35,0,0,0,41,
+    2,114,108,0,0,0,114,126,0,0,0,114,4,0,0,0,
+    114,4,0,0,0,114,5,0,0,0,114,163,0,0,0,73,
+    3,0,0,115,2,0,0,0,0,3,122,23,70,105,108,101,
+    76,111,97,100,101,114,46,103,101,116,95,102,105,108,101,110,
+    97,109,101,99,2,0,0,0,0,0,0,0,3,0,0,0,
+    9,0,0,0,67,0,0,0,115,42,0,0,0,116,0,0,
+    106,1,0,124,1,0,100,1,0,131,2,0,143,17,0,125,
+    2,0,124,2,0,106,2,0,131,0,0,83,87,100,2,0,
+    81,82,88,100,2,0,83,41,3,122,39,82,101,116,117,114,
+    110,32,116,104,101,32,100,97,116,97,32,102,114,111,109,32,
+    112,97,116,104,32,97,115,32,114,97,119,32,98,121,116,101,
+    115,46,218,1,114,78,41,3,114,49,0,0,0,114,50,0,
+    0,0,90,4,114,101,97,100,41,3,114,108,0,0,0,114,
+    35,0,0,0,114,54,0,0,0,114,4,0,0,0,114,4,
+    0,0,0,114,5,0,0,0,114,201,0,0,0,78,3,0,
+    0,115,4,0,0,0,0,2,21,1,122,19,70,105,108,101,
+    76,111,97,100,101,114,46,103,101,116,95,100,97,116,97,41,
+    11,114,112,0,0,0,114,111,0,0,0,114,113,0,0,0,
+    114,114,0,0,0,114,188,0,0,0,114,214,0,0,0,114,
+    216,0,0,0,114,123,0,0,0,114,194,0,0,0,114,163,
+    0,0,0,114,201,0,0,0,114,4,0,0,0,114,4,0,
+    0,0,41,1,114,212,0,0,0,114,5,0,0,0,114,211,
+    0,0,0,43,3,0,0,115,14,0,0,0,12,3,6,2,
+    12,6,12,4,12,3,24,12,18,5,114,211,0,0,0,99,
+    0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,
+    64,0,0,0,115,64,0,0,0,101,0,0,90,1,0,100,
+    0,0,90,2,0,100,1,0,90,3,0,100,2,0,100,3,
+    0,132,0,0,90,4,0,100,4,0,100,5,0,132,0,0,
+    90,5,0,100,6,0,100,7,0,100,8,0,100,9,0,132,
+    0,1,90,6,0,100,10,0,83,41,11,218,16,83,111,117,
+    114,99,101,70,105,108,101,76,111,97,100,101,114,122,62,67,
+    111,110,99,114,101,116,101,32,105,109,112,108,101,109,101,110,
+    116,97,116,105,111,110,32,111,102,32,83,111,117,114,99,101,
+    76,111,97,100,101,114,32,117,115,105,110,103,32,116,104,101,
+    32,102,105,108,101,32,115,121,115,116,101,109,46,99,2,0,
+    0,0,0,0,0,0,3,0,0,0,5,0,0,0,67,0,
+    0,0,115,34,0,0,0,116,0,0,124,1,0,131,1,0,
+    125,2,0,124,2,0,106,1,0,100,1,0,124,2,0,106,
+    2,0,100,2,0,105,2,0,83,41,3,122,33,82,101,116,
+    117,114,110,32,116,104,101,32,109,101,116,97,100,97,116,97,
+    32,102,111,114,32,116,104,101,32,112,97,116,104,46,114,138,
+    0,0,0,114,139,0,0,0,41,3,114,39,0,0,0,218,
+    8,115,116,95,109,116,105,109,101,90,7,115,116,95,115,105,
+    122,101,41,3,114,108,0,0,0,114,35,0,0,0,114,209,
+    0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
+    0,0,114,198,0,0,0,88,3,0,0,115,4,0,0,0,
+    0,2,12,1,122,27,83,111,117,114,99,101,70,105,108,101,
+    76,111,97,100,101,114,46,112,97,116,104,95,115,116,97,116,
+    115,99,4,0,0,0,0,0,0,0,5,0,0,0,5,0,
+    0,0,67,0,0,0,115,34,0,0,0,116,0,0,124,1,
+    0,131,1,0,125,4,0,124,0,0,106,1,0,124,2,0,
+    124,3,0,100,1,0,124,4,0,131,2,1,83,41,2,78,
+    218,5,95,109,111,100,101,41,2,114,97,0,0,0,114,199,
+    0,0,0,41,5,114,108,0,0,0,114,90,0,0,0,114,
+    89,0,0,0,114,53,0,0,0,114,42,0,0,0,114,4,
+    0,0,0,114,4,0,0,0,114,5,0,0,0,114,200,0,
+    0,0,93,3,0,0,115,4,0,0,0,0,2,12,1,122,
+    32,83,111,117,114,99,101,70,105,108,101,76,111,97,100,101,
+    114,46,95,99,97,99,104,101,95,98,121,116,101,99,111,100,
+    101,114,221,0,0,0,105,182,1,0,0,99,3,0,0,0,
+    1,0,0,0,9,0,0,0,17,0,0,0,67,0,0,0,
+    115,53,1,0,0,116,0,0,124,1,0,131,1,0,92,2,
+    0,125,4,0,125,5,0,103,0,0,125,6,0,120,54,0,
+    124,4,0,114,80,0,116,1,0,124,4,0,131,1,0,12,
+    114,80,0,116,0,0,124,4,0,131,1,0,92,2,0,125,
+    4,0,125,7,0,124,6,0,106,2,0,124,7,0,131,1,
+    0,1,113,27,0,87,120,132,0,116,3,0,124,6,0,131,
+    1,0,68,93,118,0,125,7,0,116,4,0,124,4,0,124,
+    7,0,131,2,0,125,4,0,121,17,0,116,5,0,106,6,
+    0,124,4,0,131,1,0,1,87,113,94,0,4,116,7,0,
+    107,10,0,114,155,0,1,1,1,119,94,0,89,113,94,0,
+    4,116,8,0,107,10,0,114,211,0,1,125,8,0,1,122,
+    25,0,116,9,0,100,1,0,124,4,0,124,8,0,131,3,
+    0,1,100,2,0,83,87,89,100,2,0,100,2,0,125,8,
+    0,126,8,0,88,113,94,0,88,113,94,0,87,121,33,0,
+    116,10,0,124,1,0,124,2,0,124,3,0,131,3,0,1,
+    116,9,0,100,3,0,124,1,0,131,2,0,1,87,110,53,
+    0,4,116,8,0,107,10,0,114,48,1,1,125,8,0,1,
+    122,21,0,116,9,0,100,1,0,124,1,0,124,8,0,131,
+    3,0,1,87,89,100,2,0,100,2,0,125,8,0,126,8,
+    0,88,110,1,0,88,100,2,0,83,41,4,122,27,87,114,
+    105,116,101,32,98,121,116,101,115,32,100,97,116,97,32,116,
+    111,32,97,32,102,105,108,101,46,122,27,99,111,117,108,100,
+    32,110,111,116,32,99,114,101,97,116,101,32,123,33,114,125,
+    58,32,123,33,114,125,78,122,12,99,114,101,97,116,101,100,
+    32,123,33,114,125,41,11,114,38,0,0,0,114,46,0,0,
+    0,114,169,0,0,0,114,33,0,0,0,114,28,0,0,0,
+    114,3,0,0,0,90,5,109,107,100,105,114,218,15,70,105,
+    108,101,69,120,105,115,116,115,69,114,114,111,114,114,40,0,
+    0,0,114,105,0,0,0,114,55,0,0,0,41,9,114,108,
+    0,0,0,114,35,0,0,0,114,53,0,0,0,114,221,0,
+    0,0,218,6,112,97,114,101,110,116,114,94,0,0,0,114,
+    27,0,0,0,114,23,0,0,0,114,202,0,0,0,114,4,
+    0,0,0,114,4,0,0,0,114,5,0,0,0,114,199,0,
+    0,0,98,3,0,0,115,38,0,0,0,0,2,18,1,6,
+    2,22,1,18,1,17,2,19,1,15,1,3,1,17,1,13,
+    2,7,1,18,3,16,1,27,1,3,1,16,1,17,1,18,
+    2,122,25,83,111,117,114,99,101,70,105,108,101,76,111,97,
+    100,101,114,46,115,101,116,95,100,97,116,97,78,41,7,114,
+    112,0,0,0,114,111,0,0,0,114,113,0,0,0,114,114,
+    0,0,0,114,198,0,0,0,114,200,0,0,0,114,199,0,
+    0,0,114,4,0,0,0,114,4,0,0,0,114,4,0,0,
+    0,114,5,0,0,0,114,219,0,0,0,84,3,0,0,115,
+    8,0,0,0,12,2,6,2,12,5,12,5,114,219,0,0,
+    0,99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,
+    0,0,64,0,0,0,115,46,0,0,0,101,0,0,90,1,
+    0,100,0,0,90,2,0,100,1,0,90,3,0,100,2,0,
+    100,3,0,132,0,0,90,4,0,100,4,0,100,5,0,132,
+    0,0,90,5,0,100,6,0,83,41,7,218,20,83,111,117,
+    114,99,101,108,101,115,115,70,105,108,101,76,111,97,100,101,
+    114,122,45,76,111,97,100,101,114,32,119,104,105,99,104,32,
+    104,97,110,100,108,101,115,32,115,111,117,114,99,101,108,101,
+    115,115,32,102,105,108,101,32,105,109,112,111,114,116,115,46,
+    99,2,0,0,0,0,0,0,0,5,0,0,0,6,0,0,
+    0,67,0,0,0,115,76,0,0,0,124,0,0,106,0,0,
+    124,1,0,131,1,0,125,2,0,124,0,0,106,1,0,124,
+    2,0,131,1,0,125,3,0,116,2,0,124,3,0,100,1,
+    0,124,1,0,100,2,0,124,2,0,131,1,2,125,4,0,
+    116,3,0,124,4,0,100,1,0,124,1,0,100,3,0,124,
+    2,0,131,1,2,83,41,4,78,114,106,0,0,0,114,35,
+    0,0,0,114,89,0,0,0,41,4,114,163,0,0,0,114,
+    201,0,0,0,114,146,0,0,0,114,152,0,0,0,41,5,
+    114,108,0,0,0,114,126,0,0,0,114,35,0,0,0,114,
+    53,0,0,0,114,210,0,0,0,114,4,0,0,0,114,4,
+    0,0,0,114,5,0,0,0,114,190,0,0,0,131,3,0,
+    0,115,8,0,0,0,0,1,15,1,15,1,24,1,122,29,
+    83,111,117,114,99,101,108,101,115,115,70,105,108,101,76,111,
+    97,100,101,114,46,103,101,116,95,99,111,100,101,99,2,0,
+    0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,
+    0,0,115,4,0,0,0,100,1,0,83,41,2,122,39,82,
+    101,116,117,114,110,32,78,111,110,101,32,97,115,32,116,104,
+    101,114,101,32,105,115,32,110,111,32,115,111,117,114,99,101,
+    32,99,111,100,101,46,78,114,4,0,0,0,41,2,114,108,
+    0,0,0,114,126,0,0,0,114,4,0,0,0,114,4,0,
+    0,0,114,5,0,0,0,114,203,0,0,0,137,3,0,0,
+    115,2,0,0,0,0,2,122,31,83,111,117,114,99,101,108,
+    101,115,115,70,105,108,101,76,111,97,100,101,114,46,103,101,
+    116,95,115,111,117,114,99,101,78,41,6,114,112,0,0,0,
+    114,111,0,0,0,114,113,0,0,0,114,114,0,0,0,114,
+    190,0,0,0,114,203,0,0,0,114,4,0,0,0,114,4,
+    0,0,0,114,4,0,0,0,114,5,0,0,0,114,224,0,
+    0,0,127,3,0,0,115,6,0,0,0,12,2,6,2,12,
+    6,114,224,0,0,0,99,0,0,0,0,0,0,0,0,0,
+    0,0,0,3,0,0,0,64,0,0,0,115,130,0,0,0,
+    101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,90,
+    3,0,100,2,0,100,3,0,132,0,0,90,4,0,100,4,
+    0,100,5,0,132,0,0,90,5,0,100,6,0,100,7,0,
+    132,0,0,90,6,0,101,7,0,100,8,0,100,9,0,132,
+    0,0,131,1,0,90,8,0,100,10,0,100,11,0,132,0,
+    0,90,9,0,100,12,0,100,13,0,132,0,0,90,10,0,
+    100,14,0,100,15,0,132,0,0,90,11,0,101,7,0,100,
+    16,0,100,17,0,132,0,0,131,1,0,90,12,0,100,18,
+    0,83,41,19,218,19,69,120,116,101,110,115,105,111,110,70,
+    105,108,101,76,111,97,100,101,114,122,93,76,111,97,100,101,
+    114,32,102,111,114,32,101,120,116,101,110,115,105,111,110,32,
+    109,111,100,117,108,101,115,46,10,10,32,32,32,32,84,104,
+    101,32,99,111,110,115,116,114,117,99,116,111,114,32,105,115,
+    32,100,101,115,105,103,110,101,100,32,116,111,32,119,111,114,
+    107,32,119,105,116,104,32,70,105,108,101,70,105,110,100,101,
+    114,46,10,10,32,32,32,32,99,3,0,0,0,0,0,0,
+    0,3,0,0,0,2,0,0,0,67,0,0,0,115,22,0,
+    0,0,124,1,0,124,0,0,95,0,0,124,2,0,124,0,
+    0,95,1,0,100,0,0,83,41,1,78,41,2,114,106,0,
+    0,0,114,35,0,0,0,41,3,114,108,0,0,0,114,106,
+    0,0,0,114,35,0,0,0,114,4,0,0,0,114,4,0,
+    0,0,114,5,0,0,0,114,188,0,0,0,154,3,0,0,
+    115,4,0,0,0,0,1,9,1,122,28,69,120,116,101,110,
+    115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,95,
+    95,105,110,105,116,95,95,99,2,0,0,0,0,0,0,0,
+    2,0,0,0,2,0,0,0,67,0,0,0,115,34,0,0,
+    0,124,0,0,106,0,0,124,1,0,106,0,0,107,2,0,
+    111,33,0,124,0,0,106,1,0,124,1,0,106,1,0,107,
+    2,0,83,41,1,78,41,2,114,212,0,0,0,114,118,0,
+    0,0,41,2,114,108,0,0,0,114,213,0,0,0,114,4,
+    0,0,0,114,4,0,0,0,114,5,0,0,0,114,214,0,
+    0,0,158,3,0,0,115,4,0,0,0,0,1,18,1,122,
+    26,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,
+    97,100,101,114,46,95,95,101,113,95,95,99,1,0,0,0,
+    0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,
+    115,26,0,0,0,116,0,0,124,0,0,106,1,0,131,1,
+    0,116,0,0,124,0,0,106,2,0,131,1,0,65,83,41,
+    1,78,41,3,114,215,0,0,0,114,106,0,0,0,114,35,
+    0,0,0,41,1,114,108,0,0,0,114,4,0,0,0,114,
+    4,0,0,0,114,5,0,0,0,114,216,0,0,0,162,3,
+    0,0,115,2,0,0,0,0,1,122,28,69,120,116,101,110,
+    115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,95,
+    95,104,97,115,104,95,95,99,2,0,0,0,0,0,0,0,
+    4,0,0,0,11,0,0,0,67,0,0,0,115,184,0,0,
+    0,116,0,0,106,1,0,124,1,0,131,1,0,143,32,0,
+    1,116,0,0,106,2,0,116,3,0,106,4,0,124,1,0,
+    124,0,0,106,5,0,131,3,0,125,2,0,87,100,1,0,
+    81,82,88,116,6,0,100,2,0,124,0,0,106,5,0,131,
+    2,0,1,124,0,0,106,7,0,124,1,0,131,1,0,125,
+    3,0,124,3,0,114,128,0,116,8,0,124,2,0,100,3,
+    0,131,2,0,12,114,128,0,116,9,0,124,0,0,106,5,
+    0,131,1,0,100,4,0,25,103,1,0,124,2,0,95,10,
+    0,124,0,0,124,2,0,95,11,0,124,2,0,106,12,0,
+    124,2,0,95,13,0,124,3,0,115,180,0,124,2,0,106,
+    13,0,106,14,0,100,5,0,131,1,0,100,4,0,25,124,
+    2,0,95,13,0,124,2,0,83,41,6,122,25,76,111,97,
+    100,32,97,110,32,101,120,116,101,110,115,105,111,110,32,109,
+    111,100,117,108,101,46,78,122,33,101,120,116,101,110,115,105,
+    111,110,32,109,111,100,117,108,101,32,108,111,97,100,101,100,
+    32,102,114,111,109,32,123,33,114,125,218,8,95,95,112,97,
+    116,104,95,95,114,59,0,0,0,114,58,0,0,0,41,15,
+    114,121,0,0,0,90,13,95,77,97,110,97,103,101,82,101,
+    108,111,97,100,114,191,0,0,0,114,150,0,0,0,90,12,
+    108,111,97,100,95,100,121,110,97,109,105,99,114,35,0,0,
+    0,114,105,0,0,0,114,162,0,0,0,114,115,0,0,0,
+    114,38,0,0,0,114,226,0,0,0,218,10,95,95,108,111,
+    97,100,101,114,95,95,114,112,0,0,0,218,11,95,95,112,
+    97,99,107,97,103,101,95,95,114,32,0,0,0,41,4,114,
+    108,0,0,0,114,126,0,0,0,114,134,0,0,0,114,162,
+    0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
+    0,0,114,194,0,0,0,165,3,0,0,115,24,0,0,0,
+    0,5,16,1,12,1,22,1,16,1,15,1,22,1,25,1,
+    9,1,12,1,6,1,25,1,122,31,69,120,116,101,110,115,
+    105,111,110,70,105,108,101,76,111,97,100,101,114,46,108,111,
+    97,100,95,109,111,100,117,108,101,99,2,0,0,0,0,0,
+    0,0,2,0,0,0,4,0,0,0,3,0,0,0,115,48,
+    0,0,0,116,0,0,124,0,0,106,1,0,131,1,0,100,
+    1,0,25,137,0,0,116,2,0,135,0,0,102,1,0,100,
+    2,0,100,3,0,134,0,0,116,3,0,68,131,1,0,131,
+    1,0,83,41,4,122,49,82,101,116,117,114,110,32,84,114,
+    117,101,32,105,102,32,116,104,101,32,101,120,116,101,110,115,
+    105,111,110,32,109,111,100,117,108,101,32,105,115,32,97,32,
+    112,97,99,107,97,103,101,46,114,29,0,0,0,99,1,0,
+    0,0,0,0,0,0,2,0,0,0,4,0,0,0,51,0,
+    0,0,115,31,0,0,0,124,0,0,93,21,0,125,1,0,
+    136,0,0,100,0,0,124,1,0,23,107,2,0,86,1,113,
+    3,0,100,1,0,83,41,2,114,188,0,0,0,78,114,4,
+    0,0,0,41,2,114,22,0,0,0,218,6,115,117,102,102,
+    105,120,41,1,218,9,102,105,108,101,95,110,97,109,101,114,
+    4,0,0,0,114,5,0,0,0,250,9,60,103,101,110,101,
+    120,112,114,62,186,3,0,0,115,2,0,0,0,6,1,122,
+    49,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,
+    97,100,101,114,46,105,115,95,112,97,99,107,97,103,101,46,
+    60,108,111,99,97,108,115,62,46,60,103,101,110,101,120,112,
+    114,62,41,4,114,38,0,0,0,114,35,0,0,0,218,3,
+    97,110,121,218,18,69,88,84,69,78,83,73,79,78,95,83,
+    85,70,70,73,88,69,83,41,2,114,108,0,0,0,114,126,
+    0,0,0,114,4,0,0,0,41,1,114,230,0,0,0,114,
+    5,0,0,0,114,162,0,0,0,183,3,0,0,115,6,0,
+    0,0,0,2,19,1,18,1,122,30,69,120,116,101,110,115,
+    105,111,110,70,105,108,101,76,111,97,100,101,114,46,105,115,
+    95,112,97,99,107,97,103,101,99,2,0,0,0,0,0,0,
+    0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0,
+    0,0,100,1,0,83,41,2,122,63,82,101,116,117,114,110,
+    32,78,111,110,101,32,97,115,32,97,110,32,101,120,116,101,
+    110,115,105,111,110,32,109,111,100,117,108,101,32,99,97,110,
+    110,111,116,32,99,114,101,97,116,101,32,97,32,99,111,100,
+    101,32,111,98,106,101,99,116,46,78,114,4,0,0,0,41,
+    2,114,108,0,0,0,114,126,0,0,0,114,4,0,0,0,
+    114,4,0,0,0,114,5,0,0,0,114,190,0,0,0,189,
+    3,0,0,115,2,0,0,0,0,2,122,28,69,120,116,101,
+    110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,
+    103,101,116,95,99,111,100,101,99,2,0,0,0,0,0,0,
+    0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0,
+    0,0,100,1,0,83,41,2,122,53,82,101,116,117,114,110,
+    32,78,111,110,101,32,97,115,32,101,120,116,101,110,115,105,
+    111,110,32,109,111,100,117,108,101,115,32,104,97,118,101,32,
+    110,111,32,115,111,117,114,99,101,32,99,111,100,101,46,78,
+    114,4,0,0,0,41,2,114,108,0,0,0,114,126,0,0,
+    0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
+    114,203,0,0,0,193,3,0,0,115,2,0,0,0,0,2,
+    122,30,69,120,116,101,110,115,105,111,110,70,105,108,101,76,
+    111,97,100,101,114,46,103,101,116,95,115,111,117,114,99,101,
+    99,2,0,0,0,0,0,0,0,2,0,0,0,1,0,0,
+    0,67,0,0,0,115,7,0,0,0,124,0,0,106,0,0,
+    83,41,1,122,58,82,101,116,117,114,110,32,116,104,101,32,
+    112,97,116,104,32,116,111,32,116,104,101,32,115,111,117,114,
+    99,101,32,102,105,108,101,32,97,115,32,102,111,117,110,100,
+    32,98,121,32,116,104,101,32,102,105,110,100,101,114,46,41,
+    1,114,35,0,0,0,41,2,114,108,0,0,0,114,126,0,
     0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
-    0,114,188,0,0,0,48,3,0,0,115,4,0,0,0,0,
-    3,9,1,122,19,70,105,108,101,76,111,97,100,101,114,46,
-    95,95,105,110,105,116,95,95,99,2,0,0,0,0,0,0,
-    0,2,0,0,0,2,0,0,0,67,0,0,0,115,34,0,
-    0,0,124,0,0,106,0,0,124,1,0,106,0,0,107,2,
-    0,111,33,0,124,0,0,106,1,0,124,1,0,106,1,0,
-    107,2,0,83,41,1,78,41,2,218,9,95,95,99,108,97,
-    115,115,95,95,114,118,0,0,0,41,2,114,108,0,0,0,
-    218,5,111,116,104,101,114,114,4,0,0,0,114,4,0,0,
-    0,114,5,0,0,0,218,6,95,95,101,113,95,95,54,3,
-    0,0,115,4,0,0,0,0,1,18,1,122,17,70,105,108,
-    101,76,111,97,100,101,114,46,95,95,101,113,95,95,99,1,
-    0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,67,
-    0,0,0,115,26,0,0,0,116,0,0,124,0,0,106,1,
-    0,131,1,0,116,0,0,124,0,0,106,2,0,131,1,0,
-    65,83,41,1,78,41,3,218,4,104,97,115,104,114,106,0,
-    0,0,114,35,0,0,0,41,1,114,108,0,0,0,114,4,
-    0,0,0,114,4,0,0,0,114,5,0,0,0,218,8,95,
-    95,104,97,115,104,95,95,58,3,0,0,115,2,0,0,0,
-    0,1,122,19,70,105,108,101,76,111,97,100,101,114,46,95,
-    95,104,97,115,104,95,95,99,2,0,0,0,0,0,0,0,
-    2,0,0,0,3,0,0,0,3,0,0,0,115,22,0,0,
-    0,116,0,0,116,1,0,124,0,0,131,2,0,106,2,0,
-    124,1,0,131,1,0,83,41,1,122,100,76,111,97,100,32,
-    97,32,109,111,100,117,108,101,32,102,114,111,109,32,97,32,
-    102,105,108,101,46,10,10,32,32,32,32,32,32,32,32,84,
-    104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101,
-    112,114,101,99,97,116,101,100,46,32,32,85,115,101,32,101,
-    120,101,99,95,109,111,100,117,108,101,40,41,32,105,110,115,
-    116,101,97,100,46,10,10,32,32,32,32,32,32,32,32,41,
-    3,218,5,115,117,112,101,114,114,211,0,0,0,114,194,0,
-    0,0,41,2,114,108,0,0,0,114,126,0,0,0,41,1,
-    114,212,0,0,0,114,4,0,0,0,114,5,0,0,0,114,
-    194,0,0,0,61,3,0,0,115,2,0,0,0,0,10,122,
-    22,70,105,108,101,76,111,97,100,101,114,46,108,111,97,100,
-    95,109,111,100,117,108,101,99,2,0,0,0,0,0,0,0,
-    2,0,0,0,1,0,0,0,67,0,0,0,115,7,0,0,
-    0,124,0,0,106,0,0,83,41,1,122,58,82,101,116,117,
-    114,110,32,116,104,101,32,112,97,116,104,32,116,111,32,116,
-    104,101,32,115,111,117,114,99,101,32,102,105,108,101,32,97,
-    115,32,102,111,117,110,100,32,98,121,32,116,104,101,32,102,
-    105,110,100,101,114,46,41,1,114,35,0,0,0,41,2,114,
-    108,0,0,0,114,126,0,0,0,114,4,0,0,0,114,4,
-    0,0,0,114,5,0,0,0,114,163,0,0,0,73,3,0,
-    0,115,2,0,0,0,0,3,122,23,70,105,108,101,76,111,
-    97,100,101,114,46,103,101,116,95,102,105,108,101,110,97,109,
-    101,99,2,0,0,0,0,0,0,0,3,0,0,0,8,0,
-    0,0,67,0,0,0,115,41,0,0,0,116,0,0,106,1,
-    0,124,1,0,100,1,0,131,2,0,143,17,0,125,2,0,
-    124,2,0,106,2,0,131,0,0,83,87,100,2,0,81,88,
-    100,2,0,83,41,3,122,39,82,101,116,117,114,110,32,116,
-    104,101,32,100,97,116,97,32,102,114,111,109,32,112,97,116,
-    104,32,97,115,32,114,97,119,32,98,121,116,101,115,46,218,
-    1,114,78,41,3,114,49,0,0,0,114,50,0,0,0,90,
-    4,114,101,97,100,41,3,114,108,0,0,0,114,35,0,0,
-    0,114,54,0,0,0,114,4,0,0,0,114,4,0,0,0,
-    114,5,0,0,0,114,201,0,0,0,78,3,0,0,115,4,
-    0,0,0,0,2,21,1,122,19,70,105,108,101,76,111,97,
-    100,101,114,46,103,101,116,95,100,97,116,97,41,11,114,112,
-    0,0,0,114,111,0,0,0,114,113,0,0,0,114,114,0,
-    0,0,114,188,0,0,0,114,214,0,0,0,114,216,0,0,
-    0,114,123,0,0,0,114,194,0,0,0,114,163,0,0,0,
-    114,201,0,0,0,114,4,0,0,0,114,4,0,0,0,41,
-    1,114,212,0,0,0,114,5,0,0,0,114,211,0,0,0,
-    43,3,0,0,115,14,0,0,0,12,3,6,2,12,6,12,
-    4,12,3,24,12,18,5,114,211,0,0,0,99,0,0,0,
-    0,0,0,0,0,0,0,0,0,4,0,0,0,64,0,0,
-    0,115,64,0,0,0,101,0,0,90,1,0,100,0,0,90,
-    2,0,100,1,0,90,3,0,100,2,0,100,3,0,132,0,
-    0,90,4,0,100,4,0,100,5,0,132,0,0,90,5,0,
-    100,6,0,100,7,0,100,8,0,100,9,0,132,0,1,90,
-    6,0,100,10,0,83,41,11,218,16,83,111,117,114,99,101,
-    70,105,108,101,76,111,97,100,101,114,122,62,67,111,110,99,
-    114,101,116,101,32,105,109,112,108,101,109,101,110,116,97,116,
-    105,111,110,32,111,102,32,83,111,117,114,99,101,76,111,97,
-    100,101,114,32,117,115,105,110,103,32,116,104,101,32,102,105,
-    108,101,32,115,121,115,116,101,109,46,99,2,0,0,0,0,
-    0,0,0,3,0,0,0,5,0,0,0,67,0,0,0,115,
-    34,0,0,0,116,0,0,124,1,0,131,1,0,125,2,0,
-    124,2,0,106,1,0,100,1,0,124,2,0,106,2,0,100,
-    2,0,105,2,0,83,41,3,122,33,82,101,116,117,114,110,
-    32,116,104,101,32,109,101,116,97,100,97,116,97,32,102,111,
-    114,32,116,104,101,32,112,97,116,104,46,114,138,0,0,0,
-    114,139,0,0,0,41,3,114,39,0,0,0,218,8,115,116,
-    95,109,116,105,109,101,90,7,115,116,95,115,105,122,101,41,
-    3,114,108,0,0,0,114,35,0,0,0,114,209,0,0,0,
+    0,114,163,0,0,0,197,3,0,0,115,2,0,0,0,0,
+    3,122,32,69,120,116,101,110,115,105,111,110,70,105,108,101,
+    76,111,97,100,101,114,46,103,101,116,95,102,105,108,101,110,
+    97,109,101,78,41,13,114,112,0,0,0,114,111,0,0,0,
+    114,113,0,0,0,114,114,0,0,0,114,188,0,0,0,114,
+    214,0,0,0,114,216,0,0,0,114,123,0,0,0,114,194,
+    0,0,0,114,162,0,0,0,114,190,0,0,0,114,203,0,
+    0,0,114,163,0,0,0,114,4,0,0,0,114,4,0,0,
+    0,114,4,0,0,0,114,5,0,0,0,114,225,0,0,0,
+    146,3,0,0,115,18,0,0,0,12,6,6,2,12,4,12,
+    4,12,3,18,18,12,6,12,4,12,4,114,225,0,0,0,
+    99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,
+    0,64,0,0,0,115,130,0,0,0,101,0,0,90,1,0,
+    100,0,0,90,2,0,100,1,0,90,3,0,100,2,0,100,
+    3,0,132,0,0,90,4,0,100,4,0,100,5,0,132,0,
+    0,90,5,0,100,6,0,100,7,0,132,0,0,90,6,0,
+    100,8,0,100,9,0,132,0,0,90,7,0,100,10,0,100,
+    11,0,132,0,0,90,8,0,100,12,0,100,13,0,132,0,
+    0,90,9,0,100,14,0,100,15,0,132,0,0,90,10,0,
+    100,16,0,100,17,0,132,0,0,90,11,0,100,18,0,100,
+    19,0,132,0,0,90,12,0,100,20,0,83,41,21,218,14,
+    95,78,97,109,101,115,112,97,99,101,80,97,116,104,97,38,
+    1,0,0,82,101,112,114,101,115,101,110,116,115,32,97,32,
+    110,97,109,101,115,112,97,99,101,32,112,97,99,107,97,103,
+    101,39,115,32,112,97,116,104,46,32,32,73,116,32,117,115,
+    101,115,32,116,104,101,32,109,111,100,117,108,101,32,110,97,
+    109,101,10,32,32,32,32,116,111,32,102,105,110,100,32,105,
+    116,115,32,112,97,114,101,110,116,32,109,111,100,117,108,101,
+    44,32,97,110,100,32,102,114,111,109,32,116,104,101,114,101,
+    32,105,116,32,108,111,111,107,115,32,117,112,32,116,104,101,
+    32,112,97,114,101,110,116,39,115,10,32,32,32,32,95,95,
+    112,97,116,104,95,95,46,32,32,87,104,101,110,32,116,104,
+    105,115,32,99,104,97,110,103,101,115,44,32,116,104,101,32,
+    109,111,100,117,108,101,39,115,32,111,119,110,32,112,97,116,
+    104,32,105,115,32,114,101,99,111,109,112,117,116,101,100,44,
+    10,32,32,32,32,117,115,105,110,103,32,112,97,116,104,95,
+    102,105,110,100,101,114,46,32,32,70,111,114,32,116,111,112,
+    45,108,101,118,101,108,32,109,111,100,117,108,101,115,44,32,
+    116,104,101,32,112,97,114,101,110,116,32,109,111,100,117,108,
+    101,39,115,32,112,97,116,104,10,32,32,32,32,105,115,32,
+    115,121,115,46,112,97,116,104,46,99,4,0,0,0,0,0,
+    0,0,4,0,0,0,2,0,0,0,67,0,0,0,115,52,
+    0,0,0,124,1,0,124,0,0,95,0,0,124,2,0,124,
+    0,0,95,1,0,116,2,0,124,0,0,106,3,0,131,0,
+    0,131,1,0,124,0,0,95,4,0,124,3,0,124,0,0,
+    95,5,0,100,0,0,83,41,1,78,41,6,218,5,95,110,
+    97,109,101,218,5,95,112,97,116,104,114,93,0,0,0,218,
+    16,95,103,101,116,95,112,97,114,101,110,116,95,112,97,116,
+    104,218,17,95,108,97,115,116,95,112,97,114,101,110,116,95,
+    112,97,116,104,218,12,95,112,97,116,104,95,102,105,110,100,
+    101,114,41,4,114,108,0,0,0,114,106,0,0,0,114,35,
+    0,0,0,218,11,112,97,116,104,95,102,105,110,100,101,114,
     114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,
-    198,0,0,0,88,3,0,0,115,4,0,0,0,0,2,12,
-    1,122,27,83,111,117,114,99,101,70,105,108,101,76,111,97,
-    100,101,114,46,112,97,116,104,95,115,116,97,116,115,99,4,
-    0,0,0,0,0,0,0,5,0,0,0,5,0,0,0,67,
-    0,0,0,115,34,0,0,0,116,0,0,124,1,0,131,1,
-    0,125,4,0,124,0,0,106,1,0,124,2,0,124,3,0,
-    100,1,0,124,4,0,131,2,1,83,41,2,78,218,5,95,
-    109,111,100,101,41,2,114,97,0,0,0,114,199,0,0,0,
-    41,5,114,108,0,0,0,114,90,0,0,0,114,89,0,0,
-    0,114,53,0,0,0,114,42,0,0,0,114,4,0,0,0,
-    114,4,0,0,0,114,5,0,0,0,114,200,0,0,0,93,
-    3,0,0,115,4,0,0,0,0,2,12,1,122,32,83,111,
-    117,114,99,101,70,105,108,101,76,111,97,100,101,114,46,95,
-    99,97,99,104,101,95,98,121,116,101,99,111,100,101,114,221,
-    0,0,0,105,182,1,0,0,99,3,0,0,0,1,0,0,
-    0,9,0,0,0,17,0,0,0,67,0,0,0,115,53,1,
-    0,0,116,0,0,124,1,0,131,1,0,92,2,0,125,4,
-    0,125,5,0,103,0,0,125,6,0,120,54,0,124,4,0,
-    114,80,0,116,1,0,124,4,0,131,1,0,12,114,80,0,
-    116,0,0,124,4,0,131,1,0,92,2,0,125,4,0,125,
-    7,0,124,6,0,106,2,0,124,7,0,131,1,0,1,113,
-    27,0,87,120,132,0,116,3,0,124,6,0,131,1,0,68,
-    93,118,0,125,7,0,116,4,0,124,4,0,124,7,0,131,
-    2,0,125,4,0,121,17,0,116,5,0,106,6,0,124,4,
-    0,131,1,0,1,87,113,94,0,4,116,7,0,107,10,0,
-    114,155,0,1,1,1,119,94,0,89,113,94,0,4,116,8,
-    0,107,10,0,114,211,0,1,125,8,0,1,122,25,0,116,
-    9,0,100,1,0,124,4,0,124,8,0,131,3,0,1,100,
-    2,0,83,87,89,100,2,0,100,2,0,125,8,0,126,8,
-    0,88,113,94,0,88,113,94,0,87,121,33,0,116,10,0,
-    124,1,0,124,2,0,124,3,0,131,3,0,1,116,9,0,
-    100,3,0,124,1,0,131,2,0,1,87,110,53,0,4,116,
-    8,0,107,10,0,114,48,1,1,125,8,0,1,122,21,0,
-    116,9,0,100,1,0,124,1,0,124,8,0,131,3,0,1,
-    87,89,100,2,0,100,2,0,125,8,0,126,8,0,88,110,
-    1,0,88,100,2,0,83,41,4,122,27,87,114,105,116,101,
-    32,98,121,116,101,115,32,100,97,116,97,32,116,111,32,97,
-    32,102,105,108,101,46,122,27,99,111,117,108,100,32,110,111,
-    116,32,99,114,101,97,116,101,32,123,33,114,125,58,32,123,
-    33,114,125,78,122,12,99,114,101,97,116,101,100,32,123,33,
-    114,125,41,11,114,38,0,0,0,114,46,0,0,0,114,169,
-    0,0,0,114,33,0,0,0,114,28,0,0,0,114,3,0,
-    0,0,90,5,109,107,100,105,114,218,15,70,105,108,101,69,
-    120,105,115,116,115,69,114,114,111,114,114,40,0,0,0,114,
-    105,0,0,0,114,55,0,0,0,41,9,114,108,0,0,0,
-    114,35,0,0,0,114,53,0,0,0,114,221,0,0,0,218,
-    6,112,97,114,101,110,116,114,94,0,0,0,114,27,0,0,
-    0,114,23,0,0,0,114,202,0,0,0,114,4,0,0,0,
-    114,4,0,0,0,114,5,0,0,0,114,199,0,0,0,98,
-    3,0,0,115,38,0,0,0,0,2,18,1,6,2,22,1,
-    18,1,17,2,19,1,15,1,3,1,17,1,13,2,7,1,
-    18,3,16,1,27,1,3,1,16,1,17,1,18,2,122,25,
-    83,111,117,114,99,101,70,105,108,101,76,111,97,100,101,114,
-    46,115,101,116,95,100,97,116,97,78,41,7,114,112,0,0,
-    0,114,111,0,0,0,114,113,0,0,0,114,114,0,0,0,
-    114,198,0,0,0,114,200,0,0,0,114,199,0,0,0,114,
-    4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
-    0,0,0,114,219,0,0,0,84,3,0,0,115,8,0,0,
-    0,12,2,6,2,12,5,12,5,114,219,0,0,0,99,0,
-    0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,64,
-    0,0,0,115,46,0,0,0,101,0,0,90,1,0,100,0,
-    0,90,2,0,100,1,0,90,3,0,100,2,0,100,3,0,
-    132,0,0,90,4,0,100,4,0,100,5,0,132,0,0,90,
-    5,0,100,6,0,83,41,7,218,20,83,111,117,114,99,101,
-    108,101,115,115,70,105,108,101,76,111,97,100,101,114,122,45,
-    76,111,97,100,101,114,32,119,104,105,99,104,32,104,97,110,
-    100,108,101,115,32,115,111,117,114,99,101,108,101,115,115,32,
-    102,105,108,101,32,105,109,112,111,114,116,115,46,99,2,0,
-    0,0,0,0,0,0,5,0,0,0,6,0,0,0,67,0,
-    0,0,115,76,0,0,0,124,0,0,106,0,0,124,1,0,
-    131,1,0,125,2,0,124,0,0,106,1,0,124,2,0,131,
-    1,0,125,3,0,116,2,0,124,3,0,100,1,0,124,1,
-    0,100,2,0,124,2,0,131,1,2,125,4,0,116,3,0,
-    124,4,0,100,1,0,124,1,0,100,3,0,124,2,0,131,
-    1,2,83,41,4,78,114,106,0,0,0,114,35,0,0,0,
-    114,89,0,0,0,41,4,114,163,0,0,0,114,201,0,0,
-    0,114,146,0,0,0,114,152,0,0,0,41,5,114,108,0,
-    0,0,114,126,0,0,0,114,35,0,0,0,114,53,0,0,
-    0,114,210,0,0,0,114,4,0,0,0,114,4,0,0,0,
-    114,5,0,0,0,114,190,0,0,0,131,3,0,0,115,8,
-    0,0,0,0,1,15,1,15,1,24,1,122,29,83,111,117,
-    114,99,101,108,101,115,115,70,105,108,101,76,111,97,100,101,
-    114,46,103,101,116,95,99,111,100,101,99,2,0,0,0,0,
-    0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,115,
-    4,0,0,0,100,1,0,83,41,2,122,39,82,101,116,117,
-    114,110,32,78,111,110,101,32,97,115,32,116,104,101,114,101,
-    32,105,115,32,110,111,32,115,111,117,114,99,101,32,99,111,
-    100,101,46,78,114,4,0,0,0,41,2,114,108,0,0,0,
-    114,126,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
-    5,0,0,0,114,203,0,0,0,137,3,0,0,115,2,0,
-    0,0,0,2,122,31,83,111,117,114,99,101,108,101,115,115,
-    70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,115,
-    111,117,114,99,101,78,41,6,114,112,0,0,0,114,111,0,
-    0,0,114,113,0,0,0,114,114,0,0,0,114,190,0,0,
-    0,114,203,0,0,0,114,4,0,0,0,114,4,0,0,0,
-    114,4,0,0,0,114,5,0,0,0,114,224,0,0,0,127,
-    3,0,0,115,6,0,0,0,12,2,6,2,12,6,114,224,
-    0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,
-    3,0,0,0,64,0,0,0,115,130,0,0,0,101,0,0,
-    90,1,0,100,0,0,90,2,0,100,1,0,90,3,0,100,
-    2,0,100,3,0,132,0,0,90,4,0,100,4,0,100,5,
-    0,132,0,0,90,5,0,100,6,0,100,7,0,132,0,0,
-    90,6,0,101,7,0,100,8,0,100,9,0,132,0,0,131,
-    1,0,90,8,0,100,10,0,100,11,0,132,0,0,90,9,
-    0,100,12,0,100,13,0,132,0,0,90,10,0,100,14,0,
-    100,15,0,132,0,0,90,11,0,101,7,0,100,16,0,100,
-    17,0,132,0,0,131,1,0,90,12,0,100,18,0,83,41,
-    19,218,19,69,120,116,101,110,115,105,111,110,70,105,108,101,
-    76,111,97,100,101,114,122,93,76,111,97,100,101,114,32,102,
-    111,114,32,101,120,116,101,110,115,105,111,110,32,109,111,100,
-    117,108,101,115,46,10,10,32,32,32,32,84,104,101,32,99,
-    111,110,115,116,114,117,99,116,111,114,32,105,115,32,100,101,
-    115,105,103,110,101,100,32,116,111,32,119,111,114,107,32,119,
-    105,116,104,32,70,105,108,101,70,105,110,100,101,114,46,10,
-    10,32,32,32,32,99,3,0,0,0,0,0,0,0,3,0,
-    0,0,2,0,0,0,67,0,0,0,115,22,0,0,0,124,
-    1,0,124,0,0,95,0,0,124,2,0,124,0,0,95,1,
-    0,100,0,0,83,41,1,78,41,2,114,106,0,0,0,114,
-    35,0,0,0,41,3,114,108,0,0,0,114,106,0,0,0,
-    114,35,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
-    5,0,0,0,114,188,0,0,0,154,3,0,0,115,4,0,
-    0,0,0,1,9,1,122,28,69,120,116,101,110,115,105,111,
-    110,70,105,108,101,76,111,97,100,101,114,46,95,95,105,110,
-    105,116,95,95,99,2,0,0,0,0,0,0,0,2,0,0,
-    0,2,0,0,0,67,0,0,0,115,34,0,0,0,124,0,
-    0,106,0,0,124,1,0,106,0,0,107,2,0,111,33,0,
-    124,0,0,106,1,0,124,1,0,106,1,0,107,2,0,83,
-    41,1,78,41,2,114,212,0,0,0,114,118,0,0,0,41,
-    2,114,108,0,0,0,114,213,0,0,0,114,4,0,0,0,
-    114,4,0,0,0,114,5,0,0,0,114,214,0,0,0,158,
-    3,0,0,115,4,0,0,0,0,1,18,1,122,26,69,120,
-    116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,
-    114,46,95,95,101,113,95,95,99,1,0,0,0,0,0,0,
-    0,1,0,0,0,3,0,0,0,67,0,0,0,115,26,0,
-    0,0,116,0,0,124,0,0,106,1,0,131,1,0,116,0,
-    0,124,0,0,106,2,0,131,1,0,65,83,41,1,78,41,
-    3,114,215,0,0,0,114,106,0,0,0,114,35,0,0,0,
+    188,0,0,0,210,3,0,0,115,8,0,0,0,0,1,9,
+    1,9,1,21,1,122,23,95,78,97,109,101,115,112,97,99,
+    101,80,97,116,104,46,95,95,105,110,105,116,95,95,99,1,
+    0,0,0,0,0,0,0,4,0,0,0,3,0,0,0,67,
+    0,0,0,115,53,0,0,0,124,0,0,106,0,0,106,1,
+    0,100,1,0,131,1,0,92,3,0,125,1,0,125,2,0,
+    125,3,0,124,2,0,100,2,0,107,2,0,114,43,0,100,
+    6,0,83,124,1,0,100,5,0,102,2,0,83,41,7,122,
+    62,82,101,116,117,114,110,115,32,97,32,116,117,112,108,101,
+    32,111,102,32,40,112,97,114,101,110,116,45,109,111,100,117,
+    108,101,45,110,97,109,101,44,32,112,97,114,101,110,116,45,
+    112,97,116,104,45,97,116,116,114,45,110,97,109,101,41,114,
+    58,0,0,0,114,30,0,0,0,114,7,0,0,0,114,35,
+    0,0,0,114,226,0,0,0,41,2,122,3,115,121,115,122,
+    4,112,97,116,104,41,2,114,235,0,0,0,114,32,0,0,
+    0,41,4,114,108,0,0,0,114,223,0,0,0,218,3,100,
+    111,116,90,2,109,101,114,4,0,0,0,114,4,0,0,0,
+    114,5,0,0,0,218,23,95,102,105,110,100,95,112,97,114,
+    101,110,116,95,112,97,116,104,95,110,97,109,101,115,216,3,
+    0,0,115,8,0,0,0,0,2,27,1,12,2,4,3,122,
+    38,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,
+    95,102,105,110,100,95,112,97,114,101,110,116,95,112,97,116,
+    104,95,110,97,109,101,115,99,1,0,0,0,0,0,0,0,
+    3,0,0,0,3,0,0,0,67,0,0,0,115,38,0,0,
+    0,124,0,0,106,0,0,131,0,0,92,2,0,125,1,0,
+    125,2,0,116,1,0,116,2,0,106,3,0,124,1,0,25,
+    124,2,0,131,2,0,83,41,1,78,41,4,114,242,0,0,
+    0,114,117,0,0,0,114,7,0,0,0,114,132,0,0,0,
+    41,3,114,108,0,0,0,90,18,112,97,114,101,110,116,95,
+    109,111,100,117,108,101,95,110,97,109,101,90,14,112,97,116,
+    104,95,97,116,116,114,95,110,97,109,101,114,4,0,0,0,
+    114,4,0,0,0,114,5,0,0,0,114,237,0,0,0,226,
+    3,0,0,115,4,0,0,0,0,1,18,1,122,31,95,78,
+    97,109,101,115,112,97,99,101,80,97,116,104,46,95,103,101,
+    116,95,112,97,114,101,110,116,95,112,97,116,104,99,1,0,
+    0,0,0,0,0,0,3,0,0,0,3,0,0,0,67,0,
+    0,0,115,118,0,0,0,116,0,0,124,0,0,106,1,0,
+    131,0,0,131,1,0,125,1,0,124,1,0,124,0,0,106,
+    2,0,107,3,0,114,111,0,124,0,0,106,3,0,124,0,
+    0,106,4,0,124,1,0,131,2,0,125,2,0,124,2,0,
+    100,0,0,107,9,0,114,102,0,124,2,0,106,5,0,100,
+    0,0,107,8,0,114,102,0,124,2,0,106,6,0,114,102,
+    0,124,2,0,106,6,0,124,0,0,95,7,0,124,1,0,
+    124,0,0,95,2,0,124,0,0,106,7,0,83,41,1,78,
+    41,8,114,93,0,0,0,114,237,0,0,0,114,238,0,0,
+    0,114,239,0,0,0,114,235,0,0,0,114,127,0,0,0,
+    114,164,0,0,0,114,236,0,0,0,41,3,114,108,0,0,
+    0,90,11,112,97,114,101,110,116,95,112,97,116,104,114,133,
+    0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
+    0,0,218,12,95,114,101,99,97,108,99,117,108,97,116,101,
+    230,3,0,0,115,16,0,0,0,0,2,18,1,15,1,21,
+    3,27,1,9,1,12,1,9,1,122,27,95,78,97,109,101,
+    115,112,97,99,101,80,97,116,104,46,95,114,101,99,97,108,
+    99,117,108,97,116,101,99,1,0,0,0,0,0,0,0,1,
+    0,0,0,2,0,0,0,67,0,0,0,115,16,0,0,0,
+    116,0,0,124,0,0,106,1,0,131,0,0,131,1,0,83,
+    41,1,78,41,2,218,4,105,116,101,114,114,243,0,0,0,
     41,1,114,108,0,0,0,114,4,0,0,0,114,4,0,0,
-    0,114,5,0,0,0,114,216,0,0,0,162,3,0,0,115,
-    2,0,0,0,0,1,122,28,69,120,116,101,110,115,105,111,
-    110,70,105,108,101,76,111,97,100,101,114,46,95,95,104,97,
-    115,104,95,95,99,2,0,0,0,0,0,0,0,4,0,0,
-    0,11,0,0,0,67,0,0,0,115,183,0,0,0,116,0,
-    0,106,1,0,124,1,0,131,1,0,143,32,0,1,116,0,
-    0,106,2,0,116,3,0,106,4,0,124,1,0,124,0,0,
-    106,5,0,131,3,0,125,2,0,87,100,1,0,81,88,116,
-    6,0,100,2,0,124,0,0,106,5,0,131,2,0,1,124,
-    0,0,106,7,0,124,1,0,131,1,0,125,3,0,124,3,
-    0,114,127,0,116,8,0,124,2,0,100,3,0,131,2,0,
-    12,114,127,0,116,9,0,124,0,0,106,5,0,131,1,0,
-    100,4,0,25,103,1,0,124,2,0,95,10,0,124,0,0,
-    124,2,0,95,11,0,124,2,0,106,12,0,124,2,0,95,
-    13,0,124,3,0,115,179,0,124,2,0,106,13,0,106,14,
-    0,100,5,0,131,1,0,100,4,0,25,124,2,0,95,13,
-    0,124,2,0,83,41,6,122,25,76,111,97,100,32,97,110,
-    32,101,120,116,101,110,115,105,111,110,32,109,111,100,117,108,
-    101,46,78,122,33,101,120,116,101,110,115,105,111,110,32,109,
-    111,100,117,108,101,32,108,111,97,100,101,100,32,102,114,111,
-    109,32,123,33,114,125,218,8,95,95,112,97,116,104,95,95,
-    114,59,0,0,0,114,58,0,0,0,41,15,114,121,0,0,
-    0,90,13,95,77,97,110,97,103,101,82,101,108,111,97,100,
-    114,191,0,0,0,114,150,0,0,0,90,12,108,111,97,100,
-    95,100,121,110,97,109,105,99,114,35,0,0,0,114,105,0,
-    0,0,114,162,0,0,0,114,115,0,0,0,114,38,0,0,
-    0,114,226,0,0,0,218,10,95,95,108,111,97,100,101,114,
-    95,95,114,112,0,0,0,218,11,95,95,112,97,99,107,97,
-    103,101,95,95,114,32,0,0,0,41,4,114,108,0,0,0,
-    114,126,0,0,0,114,134,0,0,0,114,162,0,0,0,114,
-    4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,194,
-    0,0,0,165,3,0,0,115,24,0,0,0,0,5,16,1,
-    12,1,21,1,16,1,15,1,22,1,25,1,9,1,12,1,
-    6,1,25,1,122,31,69,120,116,101,110,115,105,111,110,70,
-    105,108,101,76,111,97,100,101,114,46,108,111,97,100,95,109,
-    111,100,117,108,101,99,2,0,0,0,0,0,0,0,2,0,
-    0,0,4,0,0,0,3,0,0,0,115,48,0,0,0,116,
-    0,0,124,0,0,106,1,0,131,1,0,100,1,0,25,137,
-    0,0,116,2,0,135,0,0,102,1,0,100,2,0,100,3,
-    0,134,0,0,116,3,0,68,131,1,0,131,1,0,83,41,
-    4,122,49,82,101,116,117,114,110,32,84,114,117,101,32,105,
-    102,32,116,104,101,32,101,120,116,101,110,115,105,111,110,32,
-    109,111,100,117,108,101,32,105,115,32,97,32,112,97,99,107,
-    97,103,101,46,114,29,0,0,0,99,1,0,0,0,0,0,
-    0,0,2,0,0,0,4,0,0,0,51,0,0,0,115,31,
-    0,0,0,124,0,0,93,21,0,125,1,0,136,0,0,100,
-    0,0,124,1,0,23,107,2,0,86,1,113,3,0,100,1,
-    0,83,41,2,114,188,0,0,0,78,114,4,0,0,0,41,
-    2,114,22,0,0,0,218,6,115,117,102,102,105,120,41,1,
-    218,9,102,105,108,101,95,110,97,109,101,114,4,0,0,0,
-    114,5,0,0,0,250,9,60,103,101,110,101,120,112,114,62,
-    186,3,0,0,115,2,0,0,0,6,1,122,49,69,120,116,
-    101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,
-    46,105,115,95,112,97,99,107,97,103,101,46,60,108,111,99,
-    97,108,115,62,46,60,103,101,110,101,120,112,114,62,41,4,
-    114,38,0,0,0,114,35,0,0,0,218,3,97,110,121,218,
-    18,69,88,84,69,78,83,73,79,78,95,83,85,70,70,73,
-    88,69,83,41,2,114,108,0,0,0,114,126,0,0,0,114,
-    4,0,0,0,41,1,114,230,0,0,0,114,5,0,0,0,
-    114,162,0,0,0,183,3,0,0,115,6,0,0,0,0,2,
-    19,1,18,1,122,30,69,120,116,101,110,115,105,111,110,70,
-    105,108,101,76,111,97,100,101,114,46,105,115,95,112,97,99,
+    0,114,5,0,0,0,218,8,95,95,105,116,101,114,95,95,
+    243,3,0,0,115,2,0,0,0,0,1,122,23,95,78,97,
+    109,101,115,112,97,99,101,80,97,116,104,46,95,95,105,116,
+    101,114,95,95,99,1,0,0,0,0,0,0,0,1,0,0,
+    0,2,0,0,0,67,0,0,0,115,16,0,0,0,116,0,
+    0,124,0,0,106,1,0,131,0,0,131,1,0,83,41,1,
+    78,41,2,114,31,0,0,0,114,243,0,0,0,41,1,114,
+    108,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
+    0,0,0,218,7,95,95,108,101,110,95,95,246,3,0,0,
+    115,2,0,0,0,0,1,122,22,95,78,97,109,101,115,112,
+    97,99,101,80,97,116,104,46,95,95,108,101,110,95,95,99,
+    1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,
+    67,0,0,0,115,16,0,0,0,100,1,0,106,0,0,124,
+    0,0,106,1,0,131,1,0,83,41,2,78,122,20,95,78,
+    97,109,101,115,112,97,99,101,80,97,116,104,40,123,33,114,
+    125,41,41,2,114,47,0,0,0,114,236,0,0,0,41,1,
+    114,108,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
+    5,0,0,0,218,8,95,95,114,101,112,114,95,95,249,3,
+    0,0,115,2,0,0,0,0,1,122,23,95,78,97,109,101,
+    115,112,97,99,101,80,97,116,104,46,95,95,114,101,112,114,
+    95,95,99,2,0,0,0,0,0,0,0,2,0,0,0,2,
+    0,0,0,67,0,0,0,115,16,0,0,0,124,1,0,124,
+    0,0,106,0,0,131,0,0,107,6,0,83,41,1,78,41,
+    1,114,243,0,0,0,41,2,114,108,0,0,0,218,4,105,
+    116,101,109,114,4,0,0,0,114,4,0,0,0,114,5,0,
+    0,0,218,12,95,95,99,111,110,116,97,105,110,115,95,95,
+    252,3,0,0,115,2,0,0,0,0,1,122,27,95,78,97,
+    109,101,115,112,97,99,101,80,97,116,104,46,95,95,99,111,
+    110,116,97,105,110,115,95,95,99,2,0,0,0,0,0,0,
+    0,2,0,0,0,2,0,0,0,67,0,0,0,115,20,0,
+    0,0,124,0,0,106,0,0,106,1,0,124,1,0,131,1,
+    0,1,100,0,0,83,41,1,78,41,2,114,236,0,0,0,
+    114,169,0,0,0,41,2,114,108,0,0,0,114,248,0,0,
+    0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
+    114,169,0,0,0,255,3,0,0,115,2,0,0,0,0,1,
+    122,21,95,78,97,109,101,115,112,97,99,101,80,97,116,104,
+    46,97,112,112,101,110,100,78,41,13,114,112,0,0,0,114,
+    111,0,0,0,114,113,0,0,0,114,114,0,0,0,114,188,
+    0,0,0,114,242,0,0,0,114,237,0,0,0,114,243,0,
+    0,0,114,245,0,0,0,114,246,0,0,0,114,247,0,0,
+    0,114,249,0,0,0,114,169,0,0,0,114,4,0,0,0,
+    114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,
+    234,0,0,0,203,3,0,0,115,20,0,0,0,12,5,6,
+    2,12,6,12,10,12,4,12,13,12,3,12,3,12,3,12,
+    3,114,234,0,0,0,99,0,0,0,0,0,0,0,0,0,
+    0,0,0,3,0,0,0,64,0,0,0,115,118,0,0,0,
+    101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,100,
+    2,0,132,0,0,90,3,0,101,4,0,100,3,0,100,4,
+    0,132,0,0,131,1,0,90,5,0,100,5,0,100,6,0,
+    132,0,0,90,6,0,100,7,0,100,8,0,132,0,0,90,
+    7,0,100,9,0,100,10,0,132,0,0,90,8,0,100,11,
+    0,100,12,0,132,0,0,90,9,0,100,13,0,100,14,0,
+    132,0,0,90,10,0,100,15,0,100,16,0,132,0,0,90,
+    11,0,100,17,0,83,41,18,218,16,95,78,97,109,101,115,
+    112,97,99,101,76,111,97,100,101,114,99,4,0,0,0,0,
+    0,0,0,4,0,0,0,4,0,0,0,67,0,0,0,115,
+    25,0,0,0,116,0,0,124,1,0,124,2,0,124,3,0,
+    131,3,0,124,0,0,95,1,0,100,0,0,83,41,1,78,
+    41,2,114,234,0,0,0,114,236,0,0,0,41,4,114,108,
+    0,0,0,114,106,0,0,0,114,35,0,0,0,114,240,0,
+    0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
+    0,114,188,0,0,0,5,4,0,0,115,2,0,0,0,0,
+    1,122,25,95,78,97,109,101,115,112,97,99,101,76,111,97,
+    100,101,114,46,95,95,105,110,105,116,95,95,99,2,0,0,
+    0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,
+    0,115,16,0,0,0,100,1,0,106,0,0,124,1,0,106,
+    1,0,131,1,0,83,41,2,122,115,82,101,116,117,114,110,
+    32,114,101,112,114,32,102,111,114,32,116,104,101,32,109,111,
+    100,117,108,101,46,10,10,32,32,32,32,32,32,32,32,84,
+    104,101,32,109,101,116,104,111,100,32,105,115,32,100,101,112,
+    114,101,99,97,116,101,100,46,32,32,84,104,101,32,105,109,
+    112,111,114,116,32,109,97,99,104,105,110,101,114,121,32,100,
+    111,101,115,32,116,104,101,32,106,111,98,32,105,116,115,101,
+    108,102,46,10,10,32,32,32,32,32,32,32,32,122,25,60,
+    109,111,100,117,108,101,32,123,33,114,125,32,40,110,97,109,
+    101,115,112,97,99,101,41,62,41,2,114,47,0,0,0,114,
+    112,0,0,0,41,2,114,174,0,0,0,114,134,0,0,0,
+    114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,
+    11,109,111,100,117,108,101,95,114,101,112,114,8,4,0,0,
+    115,2,0,0,0,0,7,122,28,95,78,97,109,101,115,112,
+    97,99,101,76,111,97,100,101,114,46,109,111,100,117,108,101,
+    95,114,101,112,114,99,2,0,0,0,0,0,0,0,2,0,
+    0,0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,
+    1,0,83,41,2,78,84,114,4,0,0,0,41,2,114,108,
+    0,0,0,114,126,0,0,0,114,4,0,0,0,114,4,0,
+    0,0,114,5,0,0,0,114,162,0,0,0,17,4,0,0,
+    115,2,0,0,0,0,1,122,27,95,78,97,109,101,115,112,
+    97,99,101,76,111,97,100,101,114,46,105,115,95,112,97,99,
     107,97,103,101,99,2,0,0,0,0,0,0,0,2,0,0,
     0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,
-    0,83,41,2,122,63,82,101,116,117,114,110,32,78,111,110,
-    101,32,97,115,32,97,110,32,101,120,116,101,110,115,105,111,
-    110,32,109,111,100,117,108,101,32,99,97,110,110,111,116,32,
-    99,114,101,97,116,101,32,97,32,99,111,100,101,32,111,98,
-    106,101,99,116,46,78,114,4,0,0,0,41,2,114,108,0,
+    0,83,41,2,78,114,30,0,0,0,114,4,0,0,0,41,
+    2,114,108,0,0,0,114,126,0,0,0,114,4,0,0,0,
+    114,4,0,0,0,114,5,0,0,0,114,203,0,0,0,20,
+    4,0,0,115,2,0,0,0,0,1,122,27,95,78,97,109,
+    101,115,112,97,99,101,76,111,97,100,101,114,46,103,101,116,
+    95,115,111,117,114,99,101,99,2,0,0,0,0,0,0,0,
+    2,0,0,0,6,0,0,0,67,0,0,0,115,22,0,0,
+    0,116,0,0,100,1,0,100,2,0,100,3,0,100,4,0,
+    100,5,0,131,3,1,83,41,6,78,114,30,0,0,0,122,
+    8,60,115,116,114,105,110,103,62,114,192,0,0,0,114,205,
+    0,0,0,84,41,1,114,206,0,0,0,41,2,114,108,0,
     0,0,114,126,0,0,0,114,4,0,0,0,114,4,0,0,
-    0,114,5,0,0,0,114,190,0,0,0,189,3,0,0,115,
-    2,0,0,0,0,2,122,28,69,120,116,101,110,115,105,111,
-    110,70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,
-    99,111,100,101,99,2,0,0,0,0,0,0,0,2,0,0,
-    0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,
-    0,83,41,2,122,53,82,101,116,117,114,110,32,78,111,110,
-    101,32,97,115,32,101,120,116,101,110,115,105,111,110,32,109,
-    111,100,117,108,101,115,32,104,97,118,101,32,110,111,32,115,
-    111,117,114,99,101,32,99,111,100,101,46,78,114,4,0,0,
+    0,114,5,0,0,0,114,190,0,0,0,23,4,0,0,115,
+    2,0,0,0,0,1,122,25,95,78,97,109,101,115,112,97,
+    99,101,76,111,97,100,101,114,46,103,101,116,95,99,111,100,
+    101,99,2,0,0,0,0,0,0,0,2,0,0,0,1,0,
+    0,0,67,0,0,0,115,4,0,0,0,100,1,0,83,41,
+    2,122,42,85,115,101,32,100,101,102,97,117,108,116,32,115,
+    101,109,97,110,116,105,99,115,32,102,111,114,32,109,111,100,
+    117,108,101,32,99,114,101,97,116,105,111,110,46,78,114,4,
+    0,0,0,41,2,114,108,0,0,0,114,133,0,0,0,114,
+    4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,189,
+    0,0,0,26,4,0,0,115,0,0,0,0,122,30,95,78,
+    97,109,101,115,112,97,99,101,76,111,97,100,101,114,46,99,
+    114,101,97,116,101,95,109,111,100,117,108,101,99,2,0,0,
+    0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,
+    0,115,4,0,0,0,100,0,0,83,41,1,78,114,4,0,
+    0,0,41,2,114,108,0,0,0,114,134,0,0,0,114,4,
+    0,0,0,114,4,0,0,0,114,5,0,0,0,114,193,0,
+    0,0,29,4,0,0,115,2,0,0,0,0,1,122,28,95,
+    78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,46,
+    101,120,101,99,95,109,111,100,117,108,101,99,2,0,0,0,
+    0,0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,
+    115,29,0,0,0,116,0,0,100,1,0,124,0,0,106,1,
+    0,131,2,0,1,116,2,0,124,0,0,124,1,0,131,2,
+    0,83,41,2,122,98,76,111,97,100,32,97,32,110,97,109,
+    101,115,112,97,99,101,32,109,111,100,117,108,101,46,10,10,
+    32,32,32,32,32,32,32,32,84,104,105,115,32,109,101,116,
+    104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101,
+    100,46,32,32,85,115,101,32,101,120,101,99,95,109,111,100,
+    117,108,101,40,41,32,105,110,115,116,101,97,100,46,10,10,
+    32,32,32,32,32,32,32,32,122,38,110,97,109,101,115,112,
+    97,99,101,32,109,111,100,117,108,101,32,108,111,97,100,101,
+    100,32,119,105,116,104,32,112,97,116,104,32,123,33,114,125,
+    41,3,114,105,0,0,0,114,236,0,0,0,114,135,0,0,
     0,41,2,114,108,0,0,0,114,126,0,0,0,114,4,0,
-    0,0,114,4,0,0,0,114,5,0,0,0,114,203,0,0,
-    0,193,3,0,0,115,2,0,0,0,0,2,122,30,69,120,
-    116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,
-    114,46,103,101,116,95,115,111,117,114,99,101,99,2,0,0,
-    0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,
-    0,115,7,0,0,0,124,0,0,106,0,0,83,41,1,122,
-    58,82,101,116,117,114,110,32,116,104,101,32,112,97,116,104,
-    32,116,111,32,116,104,101,32,115,111,117,114,99,101,32,102,
-    105,108,101,32,97,115,32,102,111,117,110,100,32,98,121,32,
-    116,104,101,32,102,105,110,100,101,114,46,41,1,114,35,0,
-    0,0,41,2,114,108,0,0,0,114,126,0,0,0,114,4,
-    0,0,0,114,4,0,0,0,114,5,0,0,0,114,163,0,
-    0,0,197,3,0,0,115,2,0,0,0,0,3,122,32,69,
-    120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,
-    101,114,46,103,101,116,95,102,105,108,101,110,97,109,101,78,
-    41,13,114,112,0,0,0,114,111,0,0,0,114,113,0,0,
-    0,114,114,0,0,0,114,188,0,0,0,114,214,0,0,0,
-    114,216,0,0,0,114,123,0,0,0,114,194,0,0,0,114,
-    162,0,0,0,114,190,0,0,0,114,203,0,0,0,114,163,
-    0,0,0,114,4,0,0,0,114,4,0,0,0,114,4,0,
-    0,0,114,5,0,0,0,114,225,0,0,0,146,3,0,0,
-    115,18,0,0,0,12,6,6,2,12,4,12,4,12,3,18,
-    18,12,6,12,4,12,4,114,225,0,0,0,99,0,0,0,
-    0,0,0,0,0,0,0,0,0,2,0,0,0,64,0,0,
-    0,115,130,0,0,0,101,0,0,90,1,0,100,0,0,90,
-    2,0,100,1,0,90,3,0,100,2,0,100,3,0,132,0,
-    0,90,4,0,100,4,0,100,5,0,132,0,0,90,5,0,
-    100,6,0,100,7,0,132,0,0,90,6,0,100,8,0,100,
-    9,0,132,0,0,90,7,0,100,10,0,100,11,0,132,0,
-    0,90,8,0,100,12,0,100,13,0,132,0,0,90,9,0,
-    100,14,0,100,15,0,132,0,0,90,10,0,100,16,0,100,
-    17,0,132,0,0,90,11,0,100,18,0,100,19,0,132,0,
-    0,90,12,0,100,20,0,83,41,21,218,14,95,78,97,109,
-    101,115,112,97,99,101,80,97,116,104,97,38,1,0,0,82,
-    101,112,114,101,115,101,110,116,115,32,97,32,110,97,109,101,
-    115,112,97,99,101,32,112,97,99,107,97,103,101,39,115,32,
-    112,97,116,104,46,32,32,73,116,32,117,115,101,115,32,116,
-    104,101,32,109,111,100,117,108,101,32,110,97,109,101,10,32,
-    32,32,32,116,111,32,102,105,110,100,32,105,116,115,32,112,
-    97,114,101,110,116,32,109,111,100,117,108,101,44,32,97,110,
-    100,32,102,114,111,109,32,116,104,101,114,101,32,105,116,32,
-    108,111,111,107,115,32,117,112,32,116,104,101,32,112,97,114,
-    101,110,116,39,115,10,32,32,32,32,95,95,112,97,116,104,
-    95,95,46,32,32,87,104,101,110,32,116,104,105,115,32,99,
-    104,97,110,103,101,115,44,32,116,104,101,32,109,111,100,117,
-    108,101,39,115,32,111,119,110,32,112,97,116,104,32,105,115,
-    32,114,101,99,111,109,112,117,116,101,100,44,10,32,32,32,
-    32,117,115,105,110,103,32,112,97,116,104,95,102,105,110,100,
-    101,114,46,32,32,70,111,114,32,116,111,112,45,108,101,118,
-    101,108,32,109,111,100,117,108,101,115,44,32,116,104,101,32,
-    112,97,114,101,110,116,32,109,111,100,117,108,101,39,115,32,
-    112,97,116,104,10,32,32,32,32,105,115,32,115,121,115,46,
-    112,97,116,104,46,99,4,0,0,0,0,0,0,0,4,0,
-    0,0,2,0,0,0,67,0,0,0,115,52,0,0,0,124,
-    1,0,124,0,0,95,0,0,124,2,0,124,0,0,95,1,
-    0,116,2,0,124,0,0,106,3,0,131,0,0,131,1,0,
-    124,0,0,95,4,0,124,3,0,124,0,0,95,5,0,100,
-    0,0,83,41,1,78,41,6,218,5,95,110,97,109,101,218,
-    5,95,112,97,116,104,114,93,0,0,0,218,16,95,103,101,
-    116,95,112,97,114,101,110,116,95,112,97,116,104,218,17,95,
-    108,97,115,116,95,112,97,114,101,110,116,95,112,97,116,104,
-    218,12,95,112,97,116,104,95,102,105,110,100,101,114,41,4,
-    114,108,0,0,0,114,106,0,0,0,114,35,0,0,0,218,
-    11,112,97,116,104,95,102,105,110,100,101,114,114,4,0,0,
-    0,114,4,0,0,0,114,5,0,0,0,114,188,0,0,0,
-    210,3,0,0,115,8,0,0,0,0,1,9,1,9,1,21,
-    1,122,23,95,78,97,109,101,115,112,97,99,101,80,97,116,
-    104,46,95,95,105,110,105,116,95,95,99,1,0,0,0,0,
-    0,0,0,4,0,0,0,3,0,0,0,67,0,0,0,115,
-    53,0,0,0,124,0,0,106,0,0,106,1,0,100,1,0,
-    131,1,0,92,3,0,125,1,0,125,2,0,125,3,0,124,
-    2,0,100,2,0,107,2,0,114,43,0,100,6,0,83,124,
-    1,0,100,5,0,102,2,0,83,41,7,122,62,82,101,116,
-    117,114,110,115,32,97,32,116,117,112,108,101,32,111,102,32,
-    40,112,97,114,101,110,116,45,109,111,100,117,108,101,45,110,
-    97,109,101,44,32,112,97,114,101,110,116,45,112,97,116,104,
-    45,97,116,116,114,45,110,97,109,101,41,114,58,0,0,0,
-    114,30,0,0,0,114,7,0,0,0,114,35,0,0,0,114,
-    226,0,0,0,41,2,122,3,115,121,115,122,4,112,97,116,
-    104,41,2,114,235,0,0,0,114,32,0,0,0,41,4,114,
-    108,0,0,0,114,223,0,0,0,218,3,100,111,116,90,2,
-    109,101,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
-    0,218,23,95,102,105,110,100,95,112,97,114,101,110,116,95,
-    112,97,116,104,95,110,97,109,101,115,216,3,0,0,115,8,
-    0,0,0,0,2,27,1,12,2,4,3,122,38,95,78,97,
-    109,101,115,112,97,99,101,80,97,116,104,46,95,102,105,110,
-    100,95,112,97,114,101,110,116,95,112,97,116,104,95,110,97,
-    109,101,115,99,1,0,0,0,0,0,0,0,3,0,0,0,
-    3,0,0,0,67,0,0,0,115,38,0,0,0,124,0,0,
-    106,0,0,131,0,0,92,2,0,125,1,0,125,2,0,116,
-    1,0,116,2,0,106,3,0,124,1,0,25,124,2,0,131,
-    2,0,83,41,1,78,41,4,114,242,0,0,0,114,117,0,
-    0,0,114,7,0,0,0,114,132,0,0,0,41,3,114,108,
-    0,0,0,90,18,112,97,114,101,110,116,95,109,111,100,117,
-    108,101,95,110,97,109,101,90,14,112,97,116,104,95,97,116,
-    116,114,95,110,97,109,101,114,4,0,0,0,114,4,0,0,
-    0,114,5,0,0,0,114,237,0,0,0,226,3,0,0,115,
-    4,0,0,0,0,1,18,1,122,31,95,78,97,109,101,115,
-    112,97,99,101,80,97,116,104,46,95,103,101,116,95,112,97,
-    114,101,110,116,95,112,97,116,104,99,1,0,0,0,0,0,
-    0,0,3,0,0,0,3,0,0,0,67,0,0,0,115,118,
-    0,0,0,116,0,0,124,0,0,106,1,0,131,0,0,131,
-    1,0,125,1,0,124,1,0,124,0,0,106,2,0,107,3,
-    0,114,111,0,124,0,0,106,3,0,124,0,0,106,4,0,
-    124,1,0,131,2,0,125,2,0,124,2,0,100,0,0,107,
-    9,0,114,102,0,124,2,0,106,5,0,100,0,0,107,8,
-    0,114,102,0,124,2,0,106,6,0,114,102,0,124,2,0,
-    106,6,0,124,0,0,95,7,0,124,1,0,124,0,0,95,
-    2,0,124,0,0,106,7,0,83,41,1,78,41,8,114,93,
-    0,0,0,114,237,0,0,0,114,238,0,0,0,114,239,0,
-    0,0,114,235,0,0,0,114,127,0,0,0,114,164,0,0,
-    0,114,236,0,0,0,41,3,114,108,0,0,0,90,11,112,
-    97,114,101,110,116,95,112,97,116,104,114,133,0,0,0,114,
-    4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,12,
-    95,114,101,99,97,108,99,117,108,97,116,101,230,3,0,0,
-    115,16,0,0,0,0,2,18,1,15,1,21,3,27,1,9,
-    1,12,1,9,1,122,27,95,78,97,109,101,115,112,97,99,
-    101,80,97,116,104,46,95,114,101,99,97,108,99,117,108,97,
-    116,101,99,1,0,0,0,0,0,0,0,1,0,0,0,2,
-    0,0,0,67,0,0,0,115,16,0,0,0,116,0,0,124,
-    0,0,106,1,0,131,0,0,131,1,0,83,41,1,78,41,
-    2,218,4,105,116,101,114,114,243,0,0,0,41,1,114,108,
+    0,0,114,4,0,0,0,114,5,0,0,0,114,194,0,0,
+    0,32,4,0,0,115,4,0,0,0,0,7,16,1,122,28,
+    95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,
+    46,108,111,97,100,95,109,111,100,117,108,101,78,41,12,114,
+    112,0,0,0,114,111,0,0,0,114,113,0,0,0,114,188,
+    0,0,0,114,186,0,0,0,114,251,0,0,0,114,162,0,
+    0,0,114,203,0,0,0,114,190,0,0,0,114,189,0,0,
+    0,114,193,0,0,0,114,194,0,0,0,114,4,0,0,0,
+    114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,
+    250,0,0,0,4,4,0,0,115,16,0,0,0,12,1,12,
+    3,18,9,12,3,12,3,12,3,12,3,12,3,114,250,0,
+    0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,5,
+    0,0,0,64,0,0,0,115,160,0,0,0,101,0,0,90,
+    1,0,100,0,0,90,2,0,100,1,0,90,3,0,101,4,
+    0,100,2,0,100,3,0,132,0,0,131,1,0,90,5,0,
+    101,4,0,100,4,0,100,5,0,132,0,0,131,1,0,90,
+    6,0,101,4,0,100,6,0,100,7,0,132,0,0,131,1,
+    0,90,7,0,101,4,0,100,8,0,100,9,0,132,0,0,
+    131,1,0,90,8,0,101,4,0,100,10,0,100,11,0,100,
+    12,0,132,1,0,131,1,0,90,9,0,101,4,0,100,10,
+    0,100,10,0,100,13,0,100,14,0,132,2,0,131,1,0,
+    90,10,0,101,4,0,100,10,0,100,15,0,100,16,0,132,
+    1,0,131,1,0,90,11,0,100,10,0,83,41,17,218,10,
+    80,97,116,104,70,105,110,100,101,114,122,62,77,101,116,97,
+    32,112,97,116,104,32,102,105,110,100,101,114,32,102,111,114,
+    32,115,121,115,46,112,97,116,104,32,97,110,100,32,112,97,
+    99,107,97,103,101,32,95,95,112,97,116,104,95,95,32,97,
+    116,116,114,105,98,117,116,101,115,46,99,1,0,0,0,0,
+    0,0,0,2,0,0,0,4,0,0,0,67,0,0,0,115,
+    55,0,0,0,120,48,0,116,0,0,106,1,0,106,2,0,
+    131,0,0,68,93,31,0,125,1,0,116,3,0,124,1,0,
+    100,1,0,131,2,0,114,16,0,124,1,0,106,4,0,131,
+    0,0,1,113,16,0,87,100,2,0,83,41,3,122,125,67,
+    97,108,108,32,116,104,101,32,105,110,118,97,108,105,100,97,
+    116,101,95,99,97,99,104,101,115,40,41,32,109,101,116,104,
+    111,100,32,111,110,32,97,108,108,32,112,97,116,104,32,101,
+    110,116,114,121,32,102,105,110,100,101,114,115,10,32,32,32,
+    32,32,32,32,32,115,116,111,114,101,100,32,105,110,32,115,
+    121,115,46,112,97,116,104,95,105,109,112,111,114,116,101,114,
+    95,99,97,99,104,101,115,32,40,119,104,101,114,101,32,105,
+    109,112,108,101,109,101,110,116,101,100,41,46,218,17,105,110,
+    118,97,108,105,100,97,116,101,95,99,97,99,104,101,115,78,
+    41,5,114,7,0,0,0,218,19,112,97,116,104,95,105,109,
+    112,111,114,116,101,114,95,99,97,99,104,101,218,6,118,97,
+    108,117,101,115,114,115,0,0,0,114,253,0,0,0,41,2,
+    114,174,0,0,0,218,6,102,105,110,100,101,114,114,4,0,
+    0,0,114,4,0,0,0,114,5,0,0,0,114,253,0,0,
+    0,49,4,0,0,115,6,0,0,0,0,4,22,1,15,1,
+    122,28,80,97,116,104,70,105,110,100,101,114,46,105,110,118,
+    97,108,105,100,97,116,101,95,99,97,99,104,101,115,99,2,
+    0,0,0,0,0,0,0,3,0,0,0,12,0,0,0,67,
+    0,0,0,115,107,0,0,0,116,0,0,106,1,0,100,1,
+    0,107,9,0,114,41,0,116,0,0,106,1,0,12,114,41,
+    0,116,2,0,106,3,0,100,2,0,116,4,0,131,2,0,
+    1,120,59,0,116,0,0,106,1,0,68,93,44,0,125,2,
+    0,121,14,0,124,2,0,124,1,0,131,1,0,83,87,113,
+    51,0,4,116,5,0,107,10,0,114,94,0,1,1,1,119,
+    51,0,89,113,51,0,88,113,51,0,87,100,1,0,83,100,
+    1,0,83,41,3,122,113,83,101,97,114,99,104,32,115,101,
+    113,117,101,110,99,101,32,111,102,32,104,111,111,107,115,32,
+    102,111,114,32,97,32,102,105,110,100,101,114,32,102,111,114,
+    32,39,112,97,116,104,39,46,10,10,32,32,32,32,32,32,
+    32,32,73,102,32,39,104,111,111,107,115,39,32,105,115,32,
+    102,97,108,115,101,32,116,104,101,110,32,117,115,101,32,115,
+    121,115,46,112,97,116,104,95,104,111,111,107,115,46,10,10,
+    32,32,32,32,32,32,32,32,78,122,23,115,121,115,46,112,
+    97,116,104,95,104,111,111,107,115,32,105,115,32,101,109,112,
+    116,121,41,6,114,7,0,0,0,218,10,112,97,116,104,95,
+    104,111,111,107,115,114,60,0,0,0,114,61,0,0,0,114,
+    125,0,0,0,114,107,0,0,0,41,3,114,174,0,0,0,
+    114,35,0,0,0,90,4,104,111,111,107,114,4,0,0,0,
+    114,4,0,0,0,114,5,0,0,0,218,11,95,112,97,116,
+    104,95,104,111,111,107,115,57,4,0,0,115,16,0,0,0,
+    0,7,25,1,16,1,16,1,3,1,14,1,13,1,12,2,
+    122,22,80,97,116,104,70,105,110,100,101,114,46,95,112,97,
+    116,104,95,104,111,111,107,115,99,2,0,0,0,0,0,0,
+    0,3,0,0,0,19,0,0,0,67,0,0,0,115,123,0,
+    0,0,124,1,0,100,1,0,107,2,0,114,53,0,121,16,
+    0,116,0,0,106,1,0,131,0,0,125,1,0,87,110,22,
+    0,4,116,2,0,107,10,0,114,52,0,1,1,1,100,2,
+    0,83,89,110,1,0,88,121,17,0,116,3,0,106,4,0,
+    124,1,0,25,125,2,0,87,110,46,0,4,116,5,0,107,
+    10,0,114,118,0,1,1,1,124,0,0,106,6,0,124,1,
+    0,131,1,0,125,2,0,124,2,0,116,3,0,106,4,0,
+    124,1,0,60,89,110,1,0,88,124,2,0,83,41,3,122,
+    210,71,101,116,32,116,104,101,32,102,105,110,100,101,114,32,
+    102,111,114,32,116,104,101,32,112,97,116,104,32,101,110,116,
+    114,121,32,102,114,111,109,32,115,121,115,46,112,97,116,104,
+    95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,46,
+    10,10,32,32,32,32,32,32,32,32,73,102,32,116,104,101,
+    32,112,97,116,104,32,101,110,116,114,121,32,105,115,32,110,
+    111,116,32,105,110,32,116,104,101,32,99,97,99,104,101,44,
+    32,102,105,110,100,32,116,104,101,32,97,112,112,114,111,112,
+    114,105,97,116,101,32,102,105,110,100,101,114,10,32,32,32,
+    32,32,32,32,32,97,110,100,32,99,97,99,104,101,32,105,
+    116,46,32,73,102,32,110,111,32,102,105,110,100,101,114,32,
+    105,115,32,97,118,97,105,108,97,98,108,101,44,32,115,116,
+    111,114,101,32,78,111,110,101,46,10,10,32,32,32,32,32,
+    32,32,32,114,30,0,0,0,78,41,7,114,3,0,0,0,
+    114,45,0,0,0,218,17,70,105,108,101,78,111,116,70,111,
+    117,110,100,69,114,114,111,114,114,7,0,0,0,114,254,0,
+    0,0,114,142,0,0,0,114,2,1,0,0,41,3,114,174,
+    0,0,0,114,35,0,0,0,114,0,1,0,0,114,4,0,
+    0,0,114,4,0,0,0,114,5,0,0,0,218,20,95,112,
+    97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,99,
+    104,101,74,4,0,0,115,22,0,0,0,0,8,12,1,3,
+    1,16,1,13,3,9,1,3,1,17,1,13,1,15,1,18,
+    1,122,31,80,97,116,104,70,105,110,100,101,114,46,95,112,
+    97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,99,
+    104,101,99,3,0,0,0,0,0,0,0,6,0,0,0,3,
+    0,0,0,67,0,0,0,115,116,0,0,0,116,0,0,124,
+    2,0,100,1,0,131,2,0,114,39,0,124,2,0,106,1,
+    0,124,1,0,131,1,0,92,2,0,125,3,0,125,4,0,
+    110,21,0,124,2,0,106,2,0,124,1,0,131,1,0,125,
+    3,0,103,0,0,125,4,0,124,3,0,100,0,0,107,9,
+    0,114,85,0,116,3,0,124,1,0,124,3,0,131,2,0,
+    83,116,4,0,106,5,0,124,1,0,100,0,0,131,2,0,
+    125,5,0,124,4,0,124,5,0,95,6,0,124,5,0,83,
+    41,2,78,114,124,0,0,0,41,7,114,115,0,0,0,114,
+    124,0,0,0,114,185,0,0,0,114,131,0,0,0,114,121,
+    0,0,0,114,166,0,0,0,114,164,0,0,0,41,6,114,
+    174,0,0,0,114,126,0,0,0,114,0,1,0,0,114,127,
+    0,0,0,114,128,0,0,0,114,133,0,0,0,114,4,0,
+    0,0,114,4,0,0,0,114,5,0,0,0,218,16,95,108,
+    101,103,97,99,121,95,103,101,116,95,115,112,101,99,96,4,
+    0,0,115,18,0,0,0,0,4,15,1,24,2,15,1,6,
+    1,12,1,13,1,18,1,9,1,122,27,80,97,116,104,70,
+    105,110,100,101,114,46,95,108,101,103,97,99,121,95,103,101,
+    116,95,115,112,101,99,78,99,4,0,0,0,0,0,0,0,
+    9,0,0,0,5,0,0,0,67,0,0,0,115,243,0,0,
+    0,103,0,0,125,4,0,120,230,0,124,2,0,68,93,191,
+    0,125,5,0,116,0,0,124,5,0,116,1,0,116,2,0,
+    102,2,0,131,2,0,115,43,0,113,13,0,124,0,0,106,
+    3,0,124,5,0,131,1,0,125,6,0,124,6,0,100,1,
+    0,107,9,0,114,13,0,116,4,0,124,6,0,100,2,0,
+    131,2,0,114,106,0,124,6,0,106,5,0,124,1,0,124,
+    3,0,131,2,0,125,7,0,110,18,0,124,0,0,106,6,
+    0,124,1,0,124,6,0,131,2,0,125,7,0,124,7,0,
+    100,1,0,107,8,0,114,139,0,113,13,0,124,7,0,106,
+    7,0,100,1,0,107,9,0,114,158,0,124,7,0,83,124,
+    7,0,106,8,0,125,8,0,124,8,0,100,1,0,107,8,
+    0,114,191,0,116,9,0,100,3,0,131,1,0,130,1,0,
+    124,4,0,106,10,0,124,8,0,131,1,0,1,113,13,0,
+    87,116,11,0,106,12,0,124,1,0,100,1,0,131,2,0,
+    125,7,0,124,4,0,124,7,0,95,8,0,124,7,0,83,
+    100,1,0,83,41,4,122,63,70,105,110,100,32,116,104,101,
+    32,108,111,97,100,101,114,32,111,114,32,110,97,109,101,115,
+    112,97,99,101,95,112,97,116,104,32,102,111,114,32,116,104,
+    105,115,32,109,111,100,117,108,101,47,112,97,99,107,97,103,
+    101,32,110,97,109,101,46,78,114,184,0,0,0,122,19,115,
+    112,101,99,32,109,105,115,115,105,110,103,32,108,111,97,100,
+    101,114,41,13,114,148,0,0,0,114,69,0,0,0,218,5,
+    98,121,116,101,115,114,4,1,0,0,114,115,0,0,0,114,
+    184,0,0,0,114,5,1,0,0,114,127,0,0,0,114,164,
+    0,0,0,114,107,0,0,0,114,154,0,0,0,114,121,0,
+    0,0,114,166,0,0,0,41,9,114,174,0,0,0,114,126,
+    0,0,0,114,35,0,0,0,114,183,0,0,0,218,14,110,
+    97,109,101,115,112,97,99,101,95,112,97,116,104,90,5,101,
+    110,116,114,121,114,0,1,0,0,114,133,0,0,0,114,128,
     0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
-    0,0,218,8,95,95,105,116,101,114,95,95,243,3,0,0,
-    115,2,0,0,0,0,1,122,23,95,78,97,109,101,115,112,
-    97,99,101,80,97,116,104,46,95,95,105,116,101,114,95,95,
-    99,1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,
-    0,67,0,0,0,115,16,0,0,0,116,0,0,124,0,0,
-    106,1,0,131,0,0,131,1,0,83,41,1,78,41,2,114,
-    31,0,0,0,114,243,0,0,0,41,1,114,108,0,0,0,
-    114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,
-    7,95,95,108,101,110,95,95,246,3,0,0,115,2,0,0,
-    0,0,1,122,22,95,78,97,109,101,115,112,97,99,101,80,
-    97,116,104,46,95,95,108,101,110,95,95,99,1,0,0,0,
-    0,0,0,0,1,0,0,0,2,0,0,0,67,0,0,0,
-    115,16,0,0,0,100,1,0,106,0,0,124,0,0,106,1,
-    0,131,1,0,83,41,2,78,122,20,95,78,97,109,101,115,
-    112,97,99,101,80,97,116,104,40,123,33,114,125,41,41,2,
-    114,47,0,0,0,114,236,0,0,0,41,1,114,108,0,0,
+    0,0,218,9,95,103,101,116,95,115,112,101,99,111,4,0,
+    0,115,40,0,0,0,0,5,6,1,13,1,21,1,3,1,
+    15,1,12,1,15,1,21,2,18,1,12,1,3,1,15,1,
+    4,1,9,1,12,1,12,5,17,2,18,1,9,1,122,20,
+    80,97,116,104,70,105,110,100,101,114,46,95,103,101,116,95,
+    115,112,101,99,99,4,0,0,0,0,0,0,0,6,0,0,
+    0,4,0,0,0,67,0,0,0,115,140,0,0,0,124,2,
+    0,100,1,0,107,8,0,114,21,0,116,0,0,106,1,0,
+    125,2,0,124,0,0,106,2,0,124,1,0,124,2,0,124,
+    3,0,131,3,0,125,4,0,124,4,0,100,1,0,107,8,
+    0,114,58,0,100,1,0,83,124,4,0,106,3,0,100,1,
+    0,107,8,0,114,132,0,124,4,0,106,4,0,125,5,0,
+    124,5,0,114,125,0,100,2,0,124,4,0,95,5,0,116,
+    6,0,124,1,0,124,5,0,124,0,0,106,2,0,131,3,
+    0,124,4,0,95,4,0,124,4,0,83,100,1,0,83,110,
+    4,0,124,4,0,83,100,1,0,83,41,3,122,98,102,105,
+    110,100,32,116,104,101,32,109,111,100,117,108,101,32,111,110,
+    32,115,121,115,46,112,97,116,104,32,111,114,32,39,112,97,
+    116,104,39,32,98,97,115,101,100,32,111,110,32,115,121,115,
+    46,112,97,116,104,95,104,111,111,107,115,32,97,110,100,10,
+    32,32,32,32,32,32,32,32,115,121,115,46,112,97,116,104,
+    95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,46,
+    78,90,9,110,97,109,101,115,112,97,99,101,41,7,114,7,
+    0,0,0,114,35,0,0,0,114,8,1,0,0,114,127,0,
+    0,0,114,164,0,0,0,114,161,0,0,0,114,234,0,0,
+    0,41,6,114,174,0,0,0,114,126,0,0,0,114,35,0,
+    0,0,114,183,0,0,0,114,133,0,0,0,114,7,1,0,
     0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
-    218,8,95,95,114,101,112,114,95,95,249,3,0,0,115,2,
-    0,0,0,0,1,122,23,95,78,97,109,101,115,112,97,99,
-    101,80,97,116,104,46,95,95,114,101,112,114,95,95,99,2,
-    0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,
-    0,0,0,115,16,0,0,0,124,1,0,124,0,0,106,0,
-    0,131,0,0,107,6,0,83,41,1,78,41,1,114,243,0,
-    0,0,41,2,114,108,0,0,0,218,4,105,116,101,109,114,
-    4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,12,
-    95,95,99,111,110,116,97,105,110,115,95,95,252,3,0,0,
-    115,2,0,0,0,0,1,122,27,95,78,97,109,101,115,112,
-    97,99,101,80,97,116,104,46,95,95,99,111,110,116,97,105,
-    110,115,95,95,99,2,0,0,0,0,0,0,0,2,0,0,
-    0,2,0,0,0,67,0,0,0,115,20,0,0,0,124,0,
-    0,106,0,0,106,1,0,124,1,0,131,1,0,1,100,0,
-    0,83,41,1,78,41,2,114,236,0,0,0,114,169,0,0,
-    0,41,2,114,108,0,0,0,114,248,0,0,0,114,4,0,
-    0,0,114,4,0,0,0,114,5,0,0,0,114,169,0,0,
-    0,255,3,0,0,115,2,0,0,0,0,1,122,21,95,78,
-    97,109,101,115,112,97,99,101,80,97,116,104,46,97,112,112,
-    101,110,100,78,41,13,114,112,0,0,0,114,111,0,0,0,
-    114,113,0,0,0,114,114,0,0,0,114,188,0,0,0,114,
-    242,0,0,0,114,237,0,0,0,114,243,0,0,0,114,245,
-    0,0,0,114,246,0,0,0,114,247,0,0,0,114,249,0,
-    0,0,114,169,0,0,0,114,4,0,0,0,114,4,0,0,
-    0,114,4,0,0,0,114,5,0,0,0,114,234,0,0,0,
-    203,3,0,0,115,20,0,0,0,12,5,6,2,12,6,12,
-    10,12,4,12,13,12,3,12,3,12,3,12,3,114,234,0,
-    0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,3,
-    0,0,0,64,0,0,0,115,118,0,0,0,101,0,0,90,
-    1,0,100,0,0,90,2,0,100,1,0,100,2,0,132,0,
-    0,90,3,0,101,4,0,100,3,0,100,4,0,132,0,0,
-    131,1,0,90,5,0,100,5,0,100,6,0,132,0,0,90,
-    6,0,100,7,0,100,8,0,132,0,0,90,7,0,100,9,
-    0,100,10,0,132,0,0,90,8,0,100,11,0,100,12,0,
-    132,0,0,90,9,0,100,13,0,100,14,0,132,0,0,90,
-    10,0,100,15,0,100,16,0,132,0,0,90,11,0,100,17,
-    0,83,41,18,218,16,95,78,97,109,101,115,112,97,99,101,
-    76,111,97,100,101,114,99,4,0,0,0,0,0,0,0,4,
-    0,0,0,4,0,0,0,67,0,0,0,115,25,0,0,0,
-    116,0,0,124,1,0,124,2,0,124,3,0,131,3,0,124,
-    0,0,95,1,0,100,0,0,83,41,1,78,41,2,114,234,
-    0,0,0,114,236,0,0,0,41,4,114,108,0,0,0,114,
-    106,0,0,0,114,35,0,0,0,114,240,0,0,0,114,4,
-    0,0,0,114,4,0,0,0,114,5,0,0,0,114,188,0,
-    0,0,5,4,0,0,115,2,0,0,0,0,1,122,25,95,
-    78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,46,
-    95,95,105,110,105,116,95,95,99,2,0,0,0,0,0,0,
-    0,2,0,0,0,2,0,0,0,67,0,0,0,115,16,0,
-    0,0,100,1,0,106,0,0,124,1,0,106,1,0,131,1,
-    0,83,41,2,122,115,82,101,116,117,114,110,32,114,101,112,
-    114,32,102,111,114,32,116,104,101,32,109,111,100,117,108,101,
-    46,10,10,32,32,32,32,32,32,32,32,84,104,101,32,109,
-    101,116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,
-    116,101,100,46,32,32,84,104,101,32,105,109,112,111,114,116,
-    32,109,97,99,104,105,110,101,114,121,32,100,111,101,115,32,
-    116,104,101,32,106,111,98,32,105,116,115,101,108,102,46,10,
-    10,32,32,32,32,32,32,32,32,122,25,60,109,111,100,117,
-    108,101,32,123,33,114,125,32,40,110,97,109,101,115,112,97,
-    99,101,41,62,41,2,114,47,0,0,0,114,112,0,0,0,
-    41,2,114,174,0,0,0,114,134,0,0,0,114,4,0,0,
-    0,114,4,0,0,0,114,5,0,0,0,218,11,109,111,100,
-    117,108,101,95,114,101,112,114,8,4,0,0,115,2,0,0,
-    0,0,7,122,28,95,78,97,109,101,115,112,97,99,101,76,
-    111,97,100,101,114,46,109,111,100,117,108,101,95,114,101,112,
-    114,99,2,0,0,0,0,0,0,0,2,0,0,0,1,0,
-    0,0,67,0,0,0,115,4,0,0,0,100,1,0,83,41,
-    2,78,84,114,4,0,0,0,41,2,114,108,0,0,0,114,
-    126,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
-    0,0,0,114,162,0,0,0,17,4,0,0,115,2,0,0,
-    0,0,1,122,27,95,78,97,109,101,115,112,97,99,101,76,
-    111,97,100,101,114,46,105,115,95,112,97,99,107,97,103,101,
-    99,2,0,0,0,0,0,0,0,2,0,0,0,1,0,0,
-    0,67,0,0,0,115,4,0,0,0,100,1,0,83,41,2,
-    78,114,30,0,0,0,114,4,0,0,0,41,2,114,108,0,
-    0,0,114,126,0,0,0,114,4,0,0,0,114,4,0,0,
-    0,114,5,0,0,0,114,203,0,0,0,20,4,0,0,115,
-    2,0,0,0,0,1,122,27,95,78,97,109,101,115,112,97,
-    99,101,76,111,97,100,101,114,46,103,101,116,95,115,111,117,
-    114,99,101,99,2,0,0,0,0,0,0,0,2,0,0,0,
-    6,0,0,0,67,0,0,0,115,22,0,0,0,116,0,0,
-    100,1,0,100,2,0,100,3,0,100,4,0,100,5,0,131,
-    3,1,83,41,6,78,114,30,0,0,0,122,8,60,115,116,
-    114,105,110,103,62,114,192,0,0,0,114,205,0,0,0,84,
-    41,1,114,206,0,0,0,41,2,114,108,0,0,0,114,126,
-    0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
-    0,0,114,190,0,0,0,23,4,0,0,115,2,0,0,0,
-    0,1,122,25,95,78,97,109,101,115,112,97,99,101,76,111,
-    97,100,101,114,46,103,101,116,95,99,111,100,101,99,2,0,
-    0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,
-    0,0,115,4,0,0,0,100,1,0,83,41,2,122,42,85,
-    115,101,32,100,101,102,97,117,108,116,32,115,101,109,97,110,
-    116,105,99,115,32,102,111,114,32,109,111,100,117,108,101,32,
-    99,114,101,97,116,105,111,110,46,78,114,4,0,0,0,41,
-    2,114,108,0,0,0,114,133,0,0,0,114,4,0,0,0,
-    114,4,0,0,0,114,5,0,0,0,114,189,0,0,0,26,
-    4,0,0,115,0,0,0,0,122,30,95,78,97,109,101,115,
-    112,97,99,101,76,111,97,100,101,114,46,99,114,101,97,116,
-    101,95,109,111,100,117,108,101,99,2,0,0,0,0,0,0,
-    0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0,
-    0,0,100,0,0,83,41,1,78,114,4,0,0,0,41,2,
-    114,108,0,0,0,114,134,0,0,0,114,4,0,0,0,114,
-    4,0,0,0,114,5,0,0,0,114,193,0,0,0,29,4,
-    0,0,115,2,0,0,0,0,1,122,28,95,78,97,109,101,
-    115,112,97,99,101,76,111,97,100,101,114,46,101,120,101,99,
-    95,109,111,100,117,108,101,99,2,0,0,0,0,0,0,0,
-    2,0,0,0,3,0,0,0,67,0,0,0,115,29,0,0,
-    0,116,0,0,100,1,0,124,0,0,106,1,0,131,2,0,
-    1,116,2,0,124,0,0,124,1,0,131,2,0,83,41,2,
-    122,98,76,111,97,100,32,97,32,110,97,109,101,115,112,97,
-    99,101,32,109,111,100,117,108,101,46,10,10,32,32,32,32,
-    32,32,32,32,84,104,105,115,32,109,101,116,104,111,100,32,
-    105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,32,
-    85,115,101,32,101,120,101,99,95,109,111,100,117,108,101,40,
-    41,32,105,110,115,116,101,97,100,46,10,10,32,32,32,32,
-    32,32,32,32,122,38,110,97,109,101,115,112,97,99,101,32,
-    109,111,100,117,108,101,32,108,111,97,100,101,100,32,119,105,
-    116,104,32,112,97,116,104,32,123,33,114,125,41,3,114,105,
-    0,0,0,114,236,0,0,0,114,135,0,0,0,41,2,114,
-    108,0,0,0,114,126,0,0,0,114,4,0,0,0,114,4,
-    0,0,0,114,5,0,0,0,114,194,0,0,0,32,4,0,
-    0,115,4,0,0,0,0,7,16,1,122,28,95,78,97,109,
-    101,115,112,97,99,101,76,111,97,100,101,114,46,108,111,97,
-    100,95,109,111,100,117,108,101,78,41,12,114,112,0,0,0,
-    114,111,0,0,0,114,113,0,0,0,114,188,0,0,0,114,
-    186,0,0,0,114,251,0,0,0,114,162,0,0,0,114,203,
-    0,0,0,114,190,0,0,0,114,189,0,0,0,114,193,0,
-    0,0,114,194,0,0,0,114,4,0,0,0,114,4,0,0,
-    0,114,4,0,0,0,114,5,0,0,0,114,250,0,0,0,
-    4,4,0,0,115,16,0,0,0,12,1,12,3,18,9,12,
-    3,12,3,12,3,12,3,12,3,114,250,0,0,0,99,0,
-    0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,64,
-    0,0,0,115,160,0,0,0,101,0,0,90,1,0,100,0,
-    0,90,2,0,100,1,0,90,3,0,101,4,0,100,2,0,
-    100,3,0,132,0,0,131,1,0,90,5,0,101,4,0,100,
-    4,0,100,5,0,132,0,0,131,1,0,90,6,0,101,4,
-    0,100,6,0,100,7,0,132,0,0,131,1,0,90,7,0,
-    101,4,0,100,8,0,100,9,0,132,0,0,131,1,0,90,
-    8,0,101,4,0,100,10,0,100,11,0,100,12,0,132,1,
-    0,131,1,0,90,9,0,101,4,0,100,10,0,100,10,0,
-    100,13,0,100,14,0,132,2,0,131,1,0,90,10,0,101,
-    4,0,100,10,0,100,15,0,100,16,0,132,1,0,131,1,
-    0,90,11,0,100,10,0,83,41,17,218,10,80,97,116,104,
-    70,105,110,100,101,114,122,62,77,101,116,97,32,112,97,116,
-    104,32,102,105,110,100,101,114,32,102,111,114,32,115,121,115,
-    46,112,97,116,104,32,97,110,100,32,112,97,99,107,97,103,
-    101,32,95,95,112,97,116,104,95,95,32,97,116,116,114,105,
-    98,117,116,101,115,46,99,1,0,0,0,0,0,0,0,2,
-    0,0,0,4,0,0,0,67,0,0,0,115,55,0,0,0,
-    120,48,0,116,0,0,106,1,0,106,2,0,131,0,0,68,
-    93,31,0,125,1,0,116,3,0,124,1,0,100,1,0,131,
-    2,0,114,16,0,124,1,0,106,4,0,131,0,0,1,113,
-    16,0,87,100,2,0,83,41,3,122,125,67,97,108,108,32,
-    116,104,101,32,105,110,118,97,108,105,100,97,116,101,95,99,
-    97,99,104,101,115,40,41,32,109,101,116,104,111,100,32,111,
-    110,32,97,108,108,32,112,97,116,104,32,101,110,116,114,121,
-    32,102,105,110,100,101,114,115,10,32,32,32,32,32,32,32,
-    32,115,116,111,114,101,100,32,105,110,32,115,121,115,46,112,
-    97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,99,
-    104,101,115,32,40,119,104,101,114,101,32,105,109,112,108,101,
-    109,101,110,116,101,100,41,46,218,17,105,110,118,97,108,105,
-    100,97,116,101,95,99,97,99,104,101,115,78,41,5,114,7,
-    0,0,0,218,19,112,97,116,104,95,105,109,112,111,114,116,
-    101,114,95,99,97,99,104,101,218,6,118,97,108,117,101,115,
-    114,115,0,0,0,114,253,0,0,0,41,2,114,174,0,0,
-    0,218,6,102,105,110,100,101,114,114,4,0,0,0,114,4,
-    0,0,0,114,5,0,0,0,114,253,0,0,0,49,4,0,
-    0,115,6,0,0,0,0,4,22,1,15,1,122,28,80,97,
-    116,104,70,105,110,100,101,114,46,105,110,118,97,108,105,100,
-    97,116,101,95,99,97,99,104,101,115,99,2,0,0,0,0,
-    0,0,0,3,0,0,0,12,0,0,0,67,0,0,0,115,
-    107,0,0,0,116,0,0,106,1,0,100,1,0,107,9,0,
-    114,41,0,116,0,0,106,1,0,12,114,41,0,116,2,0,
-    106,3,0,100,2,0,116,4,0,131,2,0,1,120,59,0,
-    116,0,0,106,1,0,68,93,44,0,125,2,0,121,14,0,
-    124,2,0,124,1,0,131,1,0,83,87,113,51,0,4,116,
-    5,0,107,10,0,114,94,0,1,1,1,119,51,0,89,113,
-    51,0,88,113,51,0,87,100,1,0,83,100,1,0,83,41,
-    3,122,113,83,101,97,114,99,104,32,115,101,113,117,101,110,
-    99,101,32,111,102,32,104,111,111,107,115,32,102,111,114,32,
-    97,32,102,105,110,100,101,114,32,102,111,114,32,39,112,97,
-    116,104,39,46,10,10,32,32,32,32,32,32,32,32,73,102,
-    32,39,104,111,111,107,115,39,32,105,115,32,102,97,108,115,
-    101,32,116,104,101,110,32,117,115,101,32,115,121,115,46,112,
-    97,116,104,95,104,111,111,107,115,46,10,10,32,32,32,32,
-    32,32,32,32,78,122,23,115,121,115,46,112,97,116,104,95,
-    104,111,111,107,115,32,105,115,32,101,109,112,116,121,41,6,
-    114,7,0,0,0,218,10,112,97,116,104,95,104,111,111,107,
-    115,114,60,0,0,0,114,61,0,0,0,114,125,0,0,0,
-    114,107,0,0,0,41,3,114,174,0,0,0,114,35,0,0,
-    0,90,4,104,111,111,107,114,4,0,0,0,114,4,0,0,
-    0,114,5,0,0,0,218,11,95,112,97,116,104,95,104,111,
-    111,107,115,57,4,0,0,115,16,0,0,0,0,7,25,1,
-    16,1,16,1,3,1,14,1,13,1,12,2,122,22,80,97,
-    116,104,70,105,110,100,101,114,46,95,112,97,116,104,95,104,
-    111,111,107,115,99,2,0,0,0,0,0,0,0,3,0,0,
-    0,19,0,0,0,67,0,0,0,115,123,0,0,0,124,1,
-    0,100,1,0,107,2,0,114,53,0,121,16,0,116,0,0,
-    106,1,0,131,0,0,125,1,0,87,110,22,0,4,116,2,
-    0,107,10,0,114,52,0,1,1,1,100,2,0,83,89,110,
-    1,0,88,121,17,0,116,3,0,106,4,0,124,1,0,25,
-    125,2,0,87,110,46,0,4,116,5,0,107,10,0,114,118,
-    0,1,1,1,124,0,0,106,6,0,124,1,0,131,1,0,
-    125,2,0,124,2,0,116,3,0,106,4,0,124,1,0,60,
-    89,110,1,0,88,124,2,0,83,41,3,122,210,71,101,116,
-    32,116,104,101,32,102,105,110,100,101,114,32,102,111,114,32,
-    116,104,101,32,112,97,116,104,32,101,110,116,114,121,32,102,
-    114,111,109,32,115,121,115,46,112,97,116,104,95,105,109,112,
-    111,114,116,101,114,95,99,97,99,104,101,46,10,10,32,32,
-    32,32,32,32,32,32,73,102,32,116,104,101,32,112,97,116,
-    104,32,101,110,116,114,121,32,105,115,32,110,111,116,32,105,
-    110,32,116,104,101,32,99,97,99,104,101,44,32,102,105,110,
-    100,32,116,104,101,32,97,112,112,114,111,112,114,105,97,116,
-    101,32,102,105,110,100,101,114,10,32,32,32,32,32,32,32,
-    32,97,110,100,32,99,97,99,104,101,32,105,116,46,32,73,
-    102,32,110,111,32,102,105,110,100,101,114,32,105,115,32,97,
-    118,97,105,108,97,98,108,101,44,32,115,116,111,114,101,32,
-    78,111,110,101,46,10,10,32,32,32,32,32,32,32,32,114,
-    30,0,0,0,78,41,7,114,3,0,0,0,114,45,0,0,
-    0,218,17,70,105,108,101,78,111,116,70,111,117,110,100,69,
-    114,114,111,114,114,7,0,0,0,114,254,0,0,0,114,142,
-    0,0,0,114,2,1,0,0,41,3,114,174,0,0,0,114,
-    35,0,0,0,114,0,1,0,0,114,4,0,0,0,114,4,
-    0,0,0,114,5,0,0,0,218,20,95,112,97,116,104,95,
-    105,109,112,111,114,116,101,114,95,99,97,99,104,101,74,4,
-    0,0,115,22,0,0,0,0,8,12,1,3,1,16,1,13,
-    3,9,1,3,1,17,1,13,1,15,1,18,1,122,31,80,
-    97,116,104,70,105,110,100,101,114,46,95,112,97,116,104,95,
-    105,109,112,111,114,116,101,114,95,99,97,99,104,101,99,3,
-    0,0,0,0,0,0,0,6,0,0,0,3,0,0,0,67,
-    0,0,0,115,116,0,0,0,116,0,0,124,2,0,100,1,
-    0,131,2,0,114,39,0,124,2,0,106,1,0,124,1,0,
-    131,1,0,92,2,0,125,3,0,125,4,0,110,21,0,124,
-    2,0,106,2,0,124,1,0,131,1,0,125,3,0,103,0,
-    0,125,4,0,124,3,0,100,0,0,107,9,0,114,85,0,
-    116,3,0,124,1,0,124,3,0,131,2,0,83,116,4,0,
-    106,5,0,124,1,0,100,0,0,131,2,0,125,5,0,124,
-    4,0,124,5,0,95,6,0,124,5,0,83,41,2,78,114,
-    124,0,0,0,41,7,114,115,0,0,0,114,124,0,0,0,
-    114,185,0,0,0,114,131,0,0,0,114,121,0,0,0,114,
-    166,0,0,0,114,164,0,0,0,41,6,114,174,0,0,0,
-    114,126,0,0,0,114,0,1,0,0,114,127,0,0,0,114,
-    128,0,0,0,114,133,0,0,0,114,4,0,0,0,114,4,
-    0,0,0,114,5,0,0,0,218,16,95,108,101,103,97,99,
-    121,95,103,101,116,95,115,112,101,99,96,4,0,0,115,18,
-    0,0,0,0,4,15,1,24,2,15,1,6,1,12,1,13,
-    1,18,1,9,1,122,27,80,97,116,104,70,105,110,100,101,
-    114,46,95,108,101,103,97,99,121,95,103,101,116,95,115,112,
-    101,99,78,99,4,0,0,0,0,0,0,0,9,0,0,0,
-    5,0,0,0,67,0,0,0,115,243,0,0,0,103,0,0,
-    125,4,0,120,230,0,124,2,0,68,93,191,0,125,5,0,
-    116,0,0,124,5,0,116,1,0,116,2,0,102,2,0,131,
-    2,0,115,43,0,113,13,0,124,0,0,106,3,0,124,5,
-    0,131,1,0,125,6,0,124,6,0,100,1,0,107,9,0,
-    114,13,0,116,4,0,124,6,0,100,2,0,131,2,0,114,
-    106,0,124,6,0,106,5,0,124,1,0,124,3,0,131,2,
-    0,125,7,0,110,18,0,124,0,0,106,6,0,124,1,0,
-    124,6,0,131,2,0,125,7,0,124,7,0,100,1,0,107,
-    8,0,114,139,0,113,13,0,124,7,0,106,7,0,100,1,
-    0,107,9,0,114,158,0,124,7,0,83,124,7,0,106,8,
-    0,125,8,0,124,8,0,100,1,0,107,8,0,114,191,0,
-    116,9,0,100,3,0,131,1,0,130,1,0,124,4,0,106,
-    10,0,124,8,0,131,1,0,1,113,13,0,87,116,11,0,
-    106,12,0,124,1,0,100,1,0,131,2,0,125,7,0,124,
-    4,0,124,7,0,95,8,0,124,7,0,83,100,1,0,83,
-    41,4,122,63,70,105,110,100,32,116,104,101,32,108,111,97,
-    100,101,114,32,111,114,32,110,97,109,101,115,112,97,99,101,
-    95,112,97,116,104,32,102,111,114,32,116,104,105,115,32,109,
-    111,100,117,108,101,47,112,97,99,107,97,103,101,32,110,97,
-    109,101,46,78,114,184,0,0,0,122,19,115,112,101,99,32,
-    109,105,115,115,105,110,103,32,108,111,97,100,101,114,41,13,
-    114,148,0,0,0,114,69,0,0,0,218,5,98,121,116,101,
-    115,114,4,1,0,0,114,115,0,0,0,114,184,0,0,0,
-    114,5,1,0,0,114,127,0,0,0,114,164,0,0,0,114,
-    107,0,0,0,114,154,0,0,0,114,121,0,0,0,114,166,
-    0,0,0,41,9,114,174,0,0,0,114,126,0,0,0,114,
-    35,0,0,0,114,183,0,0,0,218,14,110,97,109,101,115,
-    112,97,99,101,95,112,97,116,104,90,5,101,110,116,114,121,
-    114,0,1,0,0,114,133,0,0,0,114,128,0,0,0,114,
-    4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,9,
-    95,103,101,116,95,115,112,101,99,111,4,0,0,115,40,0,
-    0,0,0,5,6,1,13,1,21,1,3,1,15,1,12,1,
-    15,1,21,2,18,1,12,1,3,1,15,1,4,1,9,1,
-    12,1,12,5,17,2,18,1,9,1,122,20,80,97,116,104,
-    70,105,110,100,101,114,46,95,103,101,116,95,115,112,101,99,
-    99,4,0,0,0,0,0,0,0,6,0,0,0,4,0,0,
-    0,67,0,0,0,115,140,0,0,0,124,2,0,100,1,0,
-    107,8,0,114,21,0,116,0,0,106,1,0,125,2,0,124,
-    0,0,106,2,0,124,1,0,124,2,0,124,3,0,131,3,
-    0,125,4,0,124,4,0,100,1,0,107,8,0,114,58,0,
-    100,1,0,83,124,4,0,106,3,0,100,1,0,107,8,0,
-    114,132,0,124,4,0,106,4,0,125,5,0,124,5,0,114,
-    125,0,100,2,0,124,4,0,95,5,0,116,6,0,124,1,
-    0,124,5,0,124,0,0,106,2,0,131,3,0,124,4,0,
-    95,4,0,124,4,0,83,100,1,0,83,110,4,0,124,4,
-    0,83,100,1,0,83,41,3,122,98,102,105,110,100,32,116,
-    104,101,32,109,111,100,117,108,101,32,111,110,32,115,121,115,
-    46,112,97,116,104,32,111,114,32,39,112,97,116,104,39,32,
-    98,97,115,101,100,32,111,110,32,115,121,115,46,112,97,116,
-    104,95,104,111,111,107,115,32,97,110,100,10,32,32,32,32,
-    32,32,32,32,115,121,115,46,112,97,116,104,95,105,109,112,
-    111,114,116,101,114,95,99,97,99,104,101,46,78,90,9,110,
-    97,109,101,115,112,97,99,101,41,7,114,7,0,0,0,114,
-    35,0,0,0,114,8,1,0,0,114,127,0,0,0,114,164,
-    0,0,0,114,161,0,0,0,114,234,0,0,0,41,6,114,
-    174,0,0,0,114,126,0,0,0,114,35,0,0,0,114,183,
-    0,0,0,114,133,0,0,0,114,7,1,0,0,114,4,0,
-    0,0,114,4,0,0,0,114,5,0,0,0,114,184,0,0,
-    0,143,4,0,0,115,26,0,0,0,0,4,12,1,9,1,
-    21,1,12,1,4,1,15,1,9,1,6,3,9,1,24,1,
-    4,2,7,2,122,20,80,97,116,104,70,105,110,100,101,114,
-    46,102,105,110,100,95,115,112,101,99,99,3,0,0,0,0,
-    0,0,0,4,0,0,0,3,0,0,0,67,0,0,0,115,
-    41,0,0,0,124,0,0,106,0,0,124,1,0,124,2,0,
-    131,2,0,125,3,0,124,3,0,100,1,0,107,8,0,114,
-    34,0,100,1,0,83,124,3,0,106,1,0,83,41,2,122,
-    170,102,105,110,100,32,116,104,101,32,109,111,100,117,108,101,
-    32,111,110,32,115,121,115,46,112,97,116,104,32,111,114,32,
-    39,112,97,116,104,39,32,98,97,115,101,100,32,111,110,32,
-    115,121,115,46,112,97,116,104,95,104,111,111,107,115,32,97,
-    110,100,10,32,32,32,32,32,32,32,32,115,121,115,46,112,
-    97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,99,
-    104,101,46,10,10,32,32,32,32,32,32,32,32,84,104,105,
-    115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114,
-    101,99,97,116,101,100,46,32,32,85,115,101,32,102,105,110,
-    100,95,115,112,101,99,40,41,32,105,110,115,116,101,97,100,
-    46,10,10,32,32,32,32,32,32,32,32,78,41,2,114,184,
-    0,0,0,114,127,0,0,0,41,4,114,174,0,0,0,114,
-    126,0,0,0,114,35,0,0,0,114,133,0,0,0,114,4,
-    0,0,0,114,4,0,0,0,114,5,0,0,0,114,185,0,
-    0,0,165,4,0,0,115,8,0,0,0,0,8,18,1,12,
-    1,4,1,122,22,80,97,116,104,70,105,110,100,101,114,46,
-    102,105,110,100,95,109,111,100,117,108,101,41,12,114,112,0,
-    0,0,114,111,0,0,0,114,113,0,0,0,114,114,0,0,
-    0,114,186,0,0,0,114,253,0,0,0,114,2,1,0,0,
-    114,4,1,0,0,114,5,1,0,0,114,8,1,0,0,114,
-    184,0,0,0,114,185,0,0,0,114,4,0,0,0,114,4,
-    0,0,0,114,4,0,0,0,114,5,0,0,0,114,252,0,
-    0,0,45,4,0,0,115,22,0,0,0,12,2,6,2,18,
-    8,18,17,18,22,18,15,3,1,18,31,3,1,21,21,3,
-    1,114,252,0,0,0,99,0,0,0,0,0,0,0,0,0,
-    0,0,0,3,0,0,0,64,0,0,0,115,133,0,0,0,
-    101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,90,
-    3,0,100,2,0,100,3,0,132,0,0,90,4,0,100,4,
-    0,100,5,0,132,0,0,90,5,0,101,6,0,90,7,0,
-    100,6,0,100,7,0,132,0,0,90,8,0,100,8,0,100,
-    9,0,132,0,0,90,9,0,100,10,0,100,11,0,100,12,
-    0,132,1,0,90,10,0,100,13,0,100,14,0,132,0,0,
-    90,11,0,101,12,0,100,15,0,100,16,0,132,0,0,131,
-    1,0,90,13,0,100,17,0,100,18,0,132,0,0,90,14,
-    0,100,10,0,83,41,19,218,10,70,105,108,101,70,105,110,
-    100,101,114,122,172,70,105,108,101,45,98,97,115,101,100,32,
-    102,105,110,100,101,114,46,10,10,32,32,32,32,73,110,116,
-    101,114,97,99,116,105,111,110,115,32,119,105,116,104,32,116,
-    104,101,32,102,105,108,101,32,115,121,115,116,101,109,32,97,
-    114,101,32,99,97,99,104,101,100,32,102,111,114,32,112,101,
-    114,102,111,114,109,97,110,99,101,44,32,98,101,105,110,103,
-    10,32,32,32,32,114,101,102,114,101,115,104,101,100,32,119,
-    104,101,110,32,116,104,101,32,100,105,114,101,99,116,111,114,
-    121,32,116,104,101,32,102,105,110,100,101,114,32,105,115,32,
-    104,97,110,100,108,105,110,103,32,104,97,115,32,98,101,101,
-    110,32,109,111,100,105,102,105,101,100,46,10,10,32,32,32,
-    32,99,2,0,0,0,0,0,0,0,5,0,0,0,5,0,
-    0,0,7,0,0,0,115,122,0,0,0,103,0,0,125,3,
-    0,120,52,0,124,2,0,68,93,44,0,92,2,0,137,0,
-    0,125,4,0,124,3,0,106,0,0,135,0,0,102,1,0,
-    100,1,0,100,2,0,134,0,0,124,4,0,68,131,1,0,
-    131,1,0,1,113,13,0,87,124,3,0,124,0,0,95,1,
-    0,124,1,0,112,79,0,100,3,0,124,0,0,95,2,0,
-    100,6,0,124,0,0,95,3,0,116,4,0,131,0,0,124,
-    0,0,95,5,0,116,4,0,131,0,0,124,0,0,95,6,
-    0,100,5,0,83,41,7,122,154,73,110,105,116,105,97,108,
-    105,122,101,32,119,105,116,104,32,116,104,101,32,112,97,116,
-    104,32,116,111,32,115,101,97,114,99,104,32,111,110,32,97,
-    110,100,32,97,32,118,97,114,105,97,98,108,101,32,110,117,
-    109,98,101,114,32,111,102,10,32,32,32,32,32,32,32,32,
-    50,45,116,117,112,108,101,115,32,99,111,110,116,97,105,110,
-    105,110,103,32,116,104,101,32,108,111,97,100,101,114,32,97,
-    110,100,32,116,104,101,32,102,105,108,101,32,115,117,102,102,
-    105,120,101,115,32,116,104,101,32,108,111,97,100,101,114,10,
-    32,32,32,32,32,32,32,32,114,101,99,111,103,110,105,122,
-    101,115,46,99,1,0,0,0,0,0,0,0,2,0,0,0,
-    3,0,0,0,51,0,0,0,115,27,0,0,0,124,0,0,
-    93,17,0,125,1,0,124,1,0,136,0,0,102,2,0,86,
-    1,113,3,0,100,0,0,83,41,1,78,114,4,0,0,0,
-    41,2,114,22,0,0,0,114,229,0,0,0,41,1,114,127,
+    114,184,0,0,0,143,4,0,0,115,26,0,0,0,0,4,
+    12,1,9,1,21,1,12,1,4,1,15,1,9,1,6,3,
+    9,1,24,1,4,2,7,2,122,20,80,97,116,104,70,105,
+    110,100,101,114,46,102,105,110,100,95,115,112,101,99,99,3,
+    0,0,0,0,0,0,0,4,0,0,0,3,0,0,0,67,
+    0,0,0,115,41,0,0,0,124,0,0,106,0,0,124,1,
+    0,124,2,0,131,2,0,125,3,0,124,3,0,100,1,0,
+    107,8,0,114,34,0,100,1,0,83,124,3,0,106,1,0,
+    83,41,2,122,170,102,105,110,100,32,116,104,101,32,109,111,
+    100,117,108,101,32,111,110,32,115,121,115,46,112,97,116,104,
+    32,111,114,32,39,112,97,116,104,39,32,98,97,115,101,100,
+    32,111,110,32,115,121,115,46,112,97,116,104,95,104,111,111,
+    107,115,32,97,110,100,10,32,32,32,32,32,32,32,32,115,
+    121,115,46,112,97,116,104,95,105,109,112,111,114,116,101,114,
+    95,99,97,99,104,101,46,10,10,32,32,32,32,32,32,32,
+    32,84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,
+    100,101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,
+    32,102,105,110,100,95,115,112,101,99,40,41,32,105,110,115,
+    116,101,97,100,46,10,10,32,32,32,32,32,32,32,32,78,
+    41,2,114,184,0,0,0,114,127,0,0,0,41,4,114,174,
+    0,0,0,114,126,0,0,0,114,35,0,0,0,114,133,0,
+    0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
+    0,114,185,0,0,0,165,4,0,0,115,8,0,0,0,0,
+    8,18,1,12,1,4,1,122,22,80,97,116,104,70,105,110,
+    100,101,114,46,102,105,110,100,95,109,111,100,117,108,101,41,
+    12,114,112,0,0,0,114,111,0,0,0,114,113,0,0,0,
+    114,114,0,0,0,114,186,0,0,0,114,253,0,0,0,114,
+    2,1,0,0,114,4,1,0,0,114,5,1,0,0,114,8,
+    1,0,0,114,184,0,0,0,114,185,0,0,0,114,4,0,
+    0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
+    0,114,252,0,0,0,45,4,0,0,115,22,0,0,0,12,
+    2,6,2,18,8,18,17,18,22,18,15,3,1,18,31,3,
+    1,21,21,3,1,114,252,0,0,0,99,0,0,0,0,0,
+    0,0,0,0,0,0,0,3,0,0,0,64,0,0,0,115,
+    133,0,0,0,101,0,0,90,1,0,100,0,0,90,2,0,
+    100,1,0,90,3,0,100,2,0,100,3,0,132,0,0,90,
+    4,0,100,4,0,100,5,0,132,0,0,90,5,0,101,6,
+    0,90,7,0,100,6,0,100,7,0,132,0,0,90,8,0,
+    100,8,0,100,9,0,132,0,0,90,9,0,100,10,0,100,
+    11,0,100,12,0,132,1,0,90,10,0,100,13,0,100,14,
+    0,132,0,0,90,11,0,101,12,0,100,15,0,100,16,0,
+    132,0,0,131,1,0,90,13,0,100,17,0,100,18,0,132,
+    0,0,90,14,0,100,10,0,83,41,19,218,10,70,105,108,
+    101,70,105,110,100,101,114,122,172,70,105,108,101,45,98,97,
+    115,101,100,32,102,105,110,100,101,114,46,10,10,32,32,32,
+    32,73,110,116,101,114,97,99,116,105,111,110,115,32,119,105,
+    116,104,32,116,104,101,32,102,105,108,101,32,115,121,115,116,
+    101,109,32,97,114,101,32,99,97,99,104,101,100,32,102,111,
+    114,32,112,101,114,102,111,114,109,97,110,99,101,44,32,98,
+    101,105,110,103,10,32,32,32,32,114,101,102,114,101,115,104,
+    101,100,32,119,104,101,110,32,116,104,101,32,100,105,114,101,
+    99,116,111,114,121,32,116,104,101,32,102,105,110,100,101,114,
+    32,105,115,32,104,97,110,100,108,105,110,103,32,104,97,115,
+    32,98,101,101,110,32,109,111,100,105,102,105,101,100,46,10,
+    10,32,32,32,32,99,2,0,0,0,0,0,0,0,5,0,
+    0,0,5,0,0,0,7,0,0,0,115,122,0,0,0,103,
+    0,0,125,3,0,120,52,0,124,2,0,68,93,44,0,92,
+    2,0,137,0,0,125,4,0,124,3,0,106,0,0,135,0,
+    0,102,1,0,100,1,0,100,2,0,134,0,0,124,4,0,
+    68,131,1,0,131,1,0,1,113,13,0,87,124,3,0,124,
+    0,0,95,1,0,124,1,0,112,79,0,100,3,0,124,0,
+    0,95,2,0,100,6,0,124,0,0,95,3,0,116,4,0,
+    131,0,0,124,0,0,95,5,0,116,4,0,131,0,0,124,
+    0,0,95,6,0,100,5,0,83,41,7,122,154,73,110,105,
+    116,105,97,108,105,122,101,32,119,105,116,104,32,116,104,101,
+    32,112,97,116,104,32,116,111,32,115,101,97,114,99,104,32,
+    111,110,32,97,110,100,32,97,32,118,97,114,105,97,98,108,
+    101,32,110,117,109,98,101,114,32,111,102,10,32,32,32,32,
+    32,32,32,32,50,45,116,117,112,108,101,115,32,99,111,110,
+    116,97,105,110,105,110,103,32,116,104,101,32,108,111,97,100,
+    101,114,32,97,110,100,32,116,104,101,32,102,105,108,101,32,
+    115,117,102,102,105,120,101,115,32,116,104,101,32,108,111,97,
+    100,101,114,10,32,32,32,32,32,32,32,32,114,101,99,111,
+    103,110,105,122,101,115,46,99,1,0,0,0,0,0,0,0,
+    2,0,0,0,3,0,0,0,51,0,0,0,115,27,0,0,
+    0,124,0,0,93,17,0,125,1,0,124,1,0,136,0,0,
+    102,2,0,86,1,113,3,0,100,0,0,83,41,1,78,114,
+    4,0,0,0,41,2,114,22,0,0,0,114,229,0,0,0,
+    41,1,114,127,0,0,0,114,4,0,0,0,114,5,0,0,
+    0,114,231,0,0,0,194,4,0,0,115,2,0,0,0,6,
+    0,122,38,70,105,108,101,70,105,110,100,101,114,46,95,95,
+    105,110,105,116,95,95,46,60,108,111,99,97,108,115,62,46,
+    60,103,101,110,101,120,112,114,62,114,58,0,0,0,114,29,
+    0,0,0,78,114,87,0,0,0,41,7,114,154,0,0,0,
+    218,8,95,108,111,97,100,101,114,115,114,35,0,0,0,218,
+    11,95,112,97,116,104,95,109,116,105,109,101,218,3,115,101,
+    116,218,11,95,112,97,116,104,95,99,97,99,104,101,218,19,
+    95,114,101,108,97,120,101,100,95,112,97,116,104,95,99,97,
+    99,104,101,41,5,114,108,0,0,0,114,35,0,0,0,218,
+    14,108,111,97,100,101,114,95,100,101,116,97,105,108,115,90,
+    7,108,111,97,100,101,114,115,114,171,0,0,0,114,4,0,
+    0,0,41,1,114,127,0,0,0,114,5,0,0,0,114,188,
+    0,0,0,188,4,0,0,115,16,0,0,0,0,4,6,1,
+    19,1,36,1,9,2,15,1,9,1,12,1,122,19,70,105,
+    108,101,70,105,110,100,101,114,46,95,95,105,110,105,116,95,
+    95,99,1,0,0,0,0,0,0,0,1,0,0,0,2,0,
+    0,0,67,0,0,0,115,13,0,0,0,100,3,0,124,0,
+    0,95,0,0,100,2,0,83,41,4,122,31,73,110,118,97,
+    108,105,100,97,116,101,32,116,104,101,32,100,105,114,101,99,
+    116,111,114,121,32,109,116,105,109,101,46,114,29,0,0,0,
+    78,114,87,0,0,0,41,1,114,11,1,0,0,41,1,114,
+    108,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
+    0,0,0,114,253,0,0,0,202,4,0,0,115,2,0,0,
+    0,0,2,122,28,70,105,108,101,70,105,110,100,101,114,46,
+    105,110,118,97,108,105,100,97,116,101,95,99,97,99,104,101,
+    115,99,2,0,0,0,0,0,0,0,3,0,0,0,2,0,
+    0,0,67,0,0,0,115,59,0,0,0,124,0,0,106,0,
+    0,124,1,0,131,1,0,125,2,0,124,2,0,100,1,0,
+    107,8,0,114,37,0,100,1,0,103,0,0,102,2,0,83,
+    124,2,0,106,1,0,124,2,0,106,2,0,112,55,0,103,
+    0,0,102,2,0,83,41,2,122,197,84,114,121,32,116,111,
+    32,102,105,110,100,32,97,32,108,111,97,100,101,114,32,102,
+    111,114,32,116,104,101,32,115,112,101,99,105,102,105,101,100,
+    32,109,111,100,117,108,101,44,32,111,114,32,116,104,101,32,
+    110,97,109,101,115,112,97,99,101,10,32,32,32,32,32,32,
+    32,32,112,97,99,107,97,103,101,32,112,111,114,116,105,111,
+    110,115,46,32,82,101,116,117,114,110,115,32,40,108,111,97,
+    100,101,114,44,32,108,105,115,116,45,111,102,45,112,111,114,
+    116,105,111,110,115,41,46,10,10,32,32,32,32,32,32,32,
+    32,84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,
+    100,101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,
+    32,102,105,110,100,95,115,112,101,99,40,41,32,105,110,115,
+    116,101,97,100,46,10,10,32,32,32,32,32,32,32,32,78,
+    41,3,114,184,0,0,0,114,127,0,0,0,114,164,0,0,
+    0,41,3,114,108,0,0,0,114,126,0,0,0,114,133,0,
+    0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
+    0,114,124,0,0,0,208,4,0,0,115,8,0,0,0,0,
+    7,15,1,12,1,10,1,122,22,70,105,108,101,70,105,110,
+    100,101,114,46,102,105,110,100,95,108,111,97,100,101,114,99,
+    6,0,0,0,0,0,0,0,7,0,0,0,7,0,0,0,
+    67,0,0,0,115,40,0,0,0,124,1,0,124,2,0,124,
+    3,0,131,2,0,125,6,0,116,0,0,124,2,0,124,3,
+    0,100,1,0,124,6,0,100,2,0,124,4,0,131,2,2,
+    83,41,3,78,114,127,0,0,0,114,164,0,0,0,41,1,
+    114,165,0,0,0,41,7,114,108,0,0,0,114,170,0,0,
+    0,114,126,0,0,0,114,35,0,0,0,90,4,115,109,115,
+    108,114,183,0,0,0,114,127,0,0,0,114,4,0,0,0,
+    114,4,0,0,0,114,5,0,0,0,114,8,1,0,0,220,
+    4,0,0,115,6,0,0,0,0,1,15,1,18,1,122,20,
+    70,105,108,101,70,105,110,100,101,114,46,95,103,101,116,95,
+    115,112,101,99,78,99,3,0,0,0,0,0,0,0,14,0,
+    0,0,15,0,0,0,67,0,0,0,115,234,1,0,0,100,
+    1,0,125,3,0,124,1,0,106,0,0,100,2,0,131,1,
+    0,100,3,0,25,125,4,0,121,34,0,116,1,0,124,0,
+    0,106,2,0,112,49,0,116,3,0,106,4,0,131,0,0,
+    131,1,0,106,5,0,125,5,0,87,110,24,0,4,116,6,
+    0,107,10,0,114,85,0,1,1,1,100,10,0,125,5,0,
+    89,110,1,0,88,124,5,0,124,0,0,106,7,0,107,3,
+    0,114,120,0,124,0,0,106,8,0,131,0,0,1,124,5,
+    0,124,0,0,95,7,0,116,9,0,131,0,0,114,153,0,
+    124,0,0,106,10,0,125,6,0,124,4,0,106,11,0,131,
+    0,0,125,7,0,110,15,0,124,0,0,106,12,0,125,6,
+    0,124,4,0,125,7,0,124,7,0,124,6,0,107,6,0,
+    114,45,1,116,13,0,124,0,0,106,2,0,124,4,0,131,
+    2,0,125,8,0,120,100,0,124,0,0,106,14,0,68,93,
+    77,0,92,2,0,125,9,0,125,10,0,100,5,0,124,9,
+    0,23,125,11,0,116,13,0,124,8,0,124,11,0,131,2,
+    0,125,12,0,116,15,0,124,12,0,131,1,0,114,208,0,
+    124,0,0,106,16,0,124,10,0,124,1,0,124,12,0,124,
+    8,0,103,1,0,124,2,0,131,5,0,83,113,208,0,87,
+    116,17,0,124,8,0,131,1,0,125,3,0,120,123,0,124,
+    0,0,106,14,0,68,93,112,0,92,2,0,125,9,0,125,
+    10,0,116,13,0,124,0,0,106,2,0,124,4,0,124,9,
+    0,23,131,2,0,125,12,0,116,18,0,100,6,0,106,19,
+    0,124,12,0,131,1,0,100,7,0,100,3,0,131,1,1,
+    1,124,7,0,124,9,0,23,124,6,0,107,6,0,114,55,
+    1,116,15,0,124,12,0,131,1,0,114,55,1,124,0,0,
+    106,16,0,124,10,0,124,1,0,124,12,0,100,8,0,124,
+    2,0,131,5,0,83,113,55,1,87,124,3,0,114,230,1,
+    116,18,0,100,9,0,106,19,0,124,8,0,131,1,0,131,
+    1,0,1,116,20,0,106,21,0,124,1,0,100,8,0,131,
+    2,0,125,13,0,124,8,0,103,1,0,124,13,0,95,22,
+    0,124,13,0,83,100,8,0,83,41,11,122,125,84,114,121,
+    32,116,111,32,102,105,110,100,32,97,32,108,111,97,100,101,
+    114,32,102,111,114,32,116,104,101,32,115,112,101,99,105,102,
+    105,101,100,32,109,111,100,117,108,101,44,32,111,114,32,116,
+    104,101,32,110,97,109,101,115,112,97,99,101,10,32,32,32,
+    32,32,32,32,32,112,97,99,107,97,103,101,32,112,111,114,
+    116,105,111,110,115,46,32,82,101,116,117,114,110,115,32,40,
+    108,111,97,100,101,114,44,32,108,105,115,116,45,111,102,45,
+    112,111,114,116,105,111,110,115,41,46,70,114,58,0,0,0,
+    114,56,0,0,0,114,29,0,0,0,114,188,0,0,0,122,
+    9,116,114,121,105,110,103,32,123,125,114,98,0,0,0,78,
+    122,25,112,111,115,115,105,98,108,101,32,110,97,109,101,115,
+    112,97,99,101,32,102,111,114,32,123,125,114,87,0,0,0,
+    41,23,114,32,0,0,0,114,39,0,0,0,114,35,0,0,
+    0,114,3,0,0,0,114,45,0,0,0,114,220,0,0,0,
+    114,40,0,0,0,114,11,1,0,0,218,11,95,102,105,108,
+    108,95,99,97,99,104,101,114,6,0,0,0,114,14,1,0,
+    0,114,88,0,0,0,114,13,1,0,0,114,28,0,0,0,
+    114,10,1,0,0,114,44,0,0,0,114,8,1,0,0,114,
+    46,0,0,0,114,105,0,0,0,114,47,0,0,0,114,121,
+    0,0,0,114,166,0,0,0,114,164,0,0,0,41,14,114,
+    108,0,0,0,114,126,0,0,0,114,183,0,0,0,90,12,
+    105,115,95,110,97,109,101,115,112,97,99,101,90,11,116,97,
+    105,108,95,109,111,100,117,108,101,114,138,0,0,0,90,5,
+    99,97,99,104,101,90,12,99,97,99,104,101,95,109,111,100,
+    117,108,101,90,9,98,97,115,101,95,112,97,116,104,114,229,
+    0,0,0,114,170,0,0,0,90,13,105,110,105,116,95,102,
+    105,108,101,110,97,109,101,90,9,102,117,108,108,95,112,97,
+    116,104,114,133,0,0,0,114,4,0,0,0,114,4,0,0,
+    0,114,5,0,0,0,114,184,0,0,0,225,4,0,0,115,
+    68,0,0,0,0,3,6,1,19,1,3,1,34,1,13,1,
+    11,1,15,1,10,1,9,2,9,1,9,1,15,2,9,1,
+    6,2,12,1,18,1,22,1,10,1,15,1,12,1,32,4,
+    12,2,22,1,22,1,25,1,16,1,12,1,29,1,6,1,
+    19,1,18,1,12,1,4,1,122,20,70,105,108,101,70,105,
+    110,100,101,114,46,102,105,110,100,95,115,112,101,99,99,1,
+    0,0,0,0,0,0,0,9,0,0,0,13,0,0,0,67,
+    0,0,0,115,11,1,0,0,124,0,0,106,0,0,125,1,
+    0,121,31,0,116,1,0,106,2,0,124,1,0,112,33,0,
+    116,1,0,106,3,0,131,0,0,131,1,0,125,2,0,87,
+    110,33,0,4,116,4,0,116,5,0,116,6,0,102,3,0,
+    107,10,0,114,75,0,1,1,1,103,0,0,125,2,0,89,
+    110,1,0,88,116,7,0,106,8,0,106,9,0,100,1,0,
+    131,1,0,115,112,0,116,10,0,124,2,0,131,1,0,124,
+    0,0,95,11,0,110,111,0,116,10,0,131,0,0,125,3,
+    0,120,90,0,124,2,0,68,93,82,0,125,4,0,124,4,
+    0,106,12,0,100,2,0,131,1,0,92,3,0,125,5,0,
+    125,6,0,125,7,0,124,6,0,114,191,0,100,3,0,106,
+    13,0,124,5,0,124,7,0,106,14,0,131,0,0,131,2,
+    0,125,8,0,110,6,0,124,5,0,125,8,0,124,3,0,
+    106,15,0,124,8,0,131,1,0,1,113,128,0,87,124,3,
+    0,124,0,0,95,11,0,116,7,0,106,8,0,106,9,0,
+    116,16,0,131,1,0,114,7,1,100,4,0,100,5,0,132,
+    0,0,124,2,0,68,131,1,0,124,0,0,95,17,0,100,
+    6,0,83,41,7,122,68,70,105,108,108,32,116,104,101,32,
+    99,97,99,104,101,32,111,102,32,112,111,116,101,110,116,105,
+    97,108,32,109,111,100,117,108,101,115,32,97,110,100,32,112,
+    97,99,107,97,103,101,115,32,102,111,114,32,116,104,105,115,
+    32,100,105,114,101,99,116,111,114,121,46,114,0,0,0,0,
+    114,58,0,0,0,122,5,123,125,46,123,125,99,1,0,0,
+    0,0,0,0,0,2,0,0,0,3,0,0,0,83,0,0,
+    0,115,28,0,0,0,104,0,0,124,0,0,93,18,0,125,
+    1,0,124,1,0,106,0,0,131,0,0,146,2,0,113,6,
+    0,83,114,4,0,0,0,41,1,114,88,0,0,0,41,2,
+    114,22,0,0,0,90,2,102,110,114,4,0,0,0,114,4,
+    0,0,0,114,5,0,0,0,250,9,60,115,101,116,99,111,
+    109,112,62,43,5,0,0,115,2,0,0,0,9,0,122,41,
+    70,105,108,101,70,105,110,100,101,114,46,95,102,105,108,108,
+    95,99,97,99,104,101,46,60,108,111,99,97,108,115,62,46,
+    60,115,101,116,99,111,109,112,62,78,41,18,114,35,0,0,
+    0,114,3,0,0,0,90,7,108,105,115,116,100,105,114,114,
+    45,0,0,0,114,3,1,0,0,218,15,80,101,114,109,105,
+    115,115,105,111,110,69,114,114,111,114,218,18,78,111,116,65,
+    68,105,114,101,99,116,111,114,121,69,114,114,111,114,114,7,
+    0,0,0,114,8,0,0,0,114,9,0,0,0,114,12,1,
+    0,0,114,13,1,0,0,114,83,0,0,0,114,47,0,0,
+    0,114,88,0,0,0,218,3,97,100,100,114,10,0,0,0,
+    114,14,1,0,0,41,9,114,108,0,0,0,114,35,0,0,
+    0,90,8,99,111,110,116,101,110,116,115,90,21,108,111,119,
+    101,114,95,115,117,102,102,105,120,95,99,111,110,116,101,110,
+    116,115,114,248,0,0,0,114,106,0,0,0,114,241,0,0,
+    0,114,229,0,0,0,90,8,110,101,119,95,110,97,109,101,
+    114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,
+    16,1,0,0,14,5,0,0,115,34,0,0,0,0,2,9,
+    1,3,1,31,1,22,3,11,3,18,1,18,7,9,1,13,
+    1,24,1,6,1,27,2,6,1,17,1,9,1,18,1,122,
+    22,70,105,108,101,70,105,110,100,101,114,46,95,102,105,108,
+    108,95,99,97,99,104,101,99,1,0,0,0,0,0,0,0,
+    3,0,0,0,3,0,0,0,7,0,0,0,115,25,0,0,
+    0,135,0,0,135,1,0,102,2,0,100,1,0,100,2,0,
+    134,0,0,125,2,0,124,2,0,83,41,3,97,20,1,0,
+    0,65,32,99,108,97,115,115,32,109,101,116,104,111,100,32,
+    119,104,105,99,104,32,114,101,116,117,114,110,115,32,97,32,
+    99,108,111,115,117,114,101,32,116,111,32,117,115,101,32,111,
+    110,32,115,121,115,46,112,97,116,104,95,104,111,111,107,10,
+    32,32,32,32,32,32,32,32,119,104,105,99,104,32,119,105,
+    108,108,32,114,101,116,117,114,110,32,97,110,32,105,110,115,
+    116,97,110,99,101,32,117,115,105,110,103,32,116,104,101,32,
+    115,112,101,99,105,102,105,101,100,32,108,111,97,100,101,114,
+    115,32,97,110,100,32,116,104,101,32,112,97,116,104,10,32,
+    32,32,32,32,32,32,32,99,97,108,108,101,100,32,111,110,
+    32,116,104,101,32,99,108,111,115,117,114,101,46,10,10,32,
+    32,32,32,32,32,32,32,73,102,32,116,104,101,32,112,97,
+    116,104,32,99,97,108,108,101,100,32,111,110,32,116,104,101,
+    32,99,108,111,115,117,114,101,32,105,115,32,110,111,116,32,
+    97,32,100,105,114,101,99,116,111,114,121,44,32,73,109,112,
+    111,114,116,69,114,114,111,114,32,105,115,10,32,32,32,32,
+    32,32,32,32,114,97,105,115,101,100,46,10,10,32,32,32,
+    32,32,32,32,32,99,1,0,0,0,0,0,0,0,1,0,
+    0,0,4,0,0,0,19,0,0,0,115,43,0,0,0,116,
+    0,0,124,0,0,131,1,0,115,30,0,116,1,0,100,1,
+    0,100,2,0,124,0,0,131,1,1,130,1,0,136,0,0,
+    124,0,0,136,1,0,140,1,0,83,41,3,122,45,80,97,
+    116,104,32,104,111,111,107,32,102,111,114,32,105,109,112,111,
+    114,116,108,105,98,46,109,97,99,104,105,110,101,114,121,46,
+    70,105,108,101,70,105,110,100,101,114,46,122,30,111,110,108,
+    121,32,100,105,114,101,99,116,111,114,105,101,115,32,97,114,
+    101,32,115,117,112,112,111,114,116,101,100,114,35,0,0,0,
+    41,2,114,46,0,0,0,114,107,0,0,0,41,1,114,35,
+    0,0,0,41,2,114,174,0,0,0,114,15,1,0,0,114,
+    4,0,0,0,114,5,0,0,0,218,24,112,97,116,104,95,
+    104,111,111,107,95,102,111,114,95,70,105,108,101,70,105,110,
+    100,101,114,55,5,0,0,115,6,0,0,0,0,2,12,1,
+    18,1,122,54,70,105,108,101,70,105,110,100,101,114,46,112,
+    97,116,104,95,104,111,111,107,46,60,108,111,99,97,108,115,
+    62,46,112,97,116,104,95,104,111,111,107,95,102,111,114,95,
+    70,105,108,101,70,105,110,100,101,114,114,4,0,0,0,41,
+    3,114,174,0,0,0,114,15,1,0,0,114,21,1,0,0,
+    114,4,0,0,0,41,2,114,174,0,0,0,114,15,1,0,
+    0,114,5,0,0,0,218,9,112,97,116,104,95,104,111,111,
+    107,45,5,0,0,115,4,0,0,0,0,10,21,6,122,20,
+    70,105,108,101,70,105,110,100,101,114,46,112,97,116,104,95,
+    104,111,111,107,99,1,0,0,0,0,0,0,0,1,0,0,
+    0,2,0,0,0,67,0,0,0,115,16,0,0,0,100,1,
+    0,106,0,0,124,0,0,106,1,0,131,1,0,83,41,2,
+    78,122,16,70,105,108,101,70,105,110,100,101,114,40,123,33,
+    114,125,41,41,2,114,47,0,0,0,114,35,0,0,0,41,
+    1,114,108,0,0,0,114,4,0,0,0,114,4,0,0,0,
+    114,5,0,0,0,114,247,0,0,0,63,5,0,0,115,2,
+    0,0,0,0,1,122,19,70,105,108,101,70,105,110,100,101,
+    114,46,95,95,114,101,112,114,95,95,41,15,114,112,0,0,
+    0,114,111,0,0,0,114,113,0,0,0,114,114,0,0,0,
+    114,188,0,0,0,114,253,0,0,0,114,130,0,0,0,114,
+    185,0,0,0,114,124,0,0,0,114,8,1,0,0,114,184,
+    0,0,0,114,16,1,0,0,114,186,0,0,0,114,22,1,
+    0,0,114,247,0,0,0,114,4,0,0,0,114,4,0,0,
+    0,114,4,0,0,0,114,5,0,0,0,114,9,1,0,0,
+    179,4,0,0,115,20,0,0,0,12,7,6,2,12,14,12,
+    4,6,2,12,12,12,5,15,45,12,31,18,18,114,9,1,
+    0,0,99,4,0,0,0,0,0,0,0,6,0,0,0,11,
+    0,0,0,67,0,0,0,115,195,0,0,0,124,0,0,106,
+    0,0,100,1,0,131,1,0,125,4,0,124,0,0,106,0,
+    0,100,2,0,131,1,0,125,5,0,124,4,0,115,99,0,
+    124,5,0,114,54,0,124,5,0,106,1,0,125,4,0,110,
+    45,0,124,2,0,124,3,0,107,2,0,114,84,0,116,2,
+    0,124,1,0,124,2,0,131,2,0,125,4,0,110,15,0,
+    116,3,0,124,1,0,124,2,0,131,2,0,125,4,0,124,
+    5,0,115,126,0,116,4,0,124,1,0,124,2,0,100,3,
+    0,124,4,0,131,2,1,125,5,0,121,44,0,124,5,0,
+    124,0,0,100,2,0,60,124,4,0,124,0,0,100,1,0,
+    60,124,2,0,124,0,0,100,4,0,60,124,3,0,124,0,
+    0,100,5,0,60,87,110,18,0,4,116,5,0,107,10,0,
+    114,190,0,1,1,1,89,110,1,0,88,100,0,0,83,41,
+    6,78,114,227,0,0,0,218,8,95,95,115,112,101,99,95,
+    95,114,127,0,0,0,90,8,95,95,102,105,108,101,95,95,
+    90,10,95,95,99,97,99,104,101,100,95,95,41,6,218,3,
+    103,101,116,114,127,0,0,0,114,224,0,0,0,114,219,0,
+    0,0,114,165,0,0,0,218,9,69,120,99,101,112,116,105,
+    111,110,41,6,90,2,110,115,114,106,0,0,0,90,8,112,
+    97,116,104,110,97,109,101,90,9,99,112,97,116,104,110,97,
+    109,101,114,127,0,0,0,114,133,0,0,0,114,4,0,0,
+    0,114,4,0,0,0,114,5,0,0,0,218,14,95,102,105,
+    120,95,117,112,95,109,111,100,117,108,101,69,5,0,0,115,
+    34,0,0,0,0,2,15,1,15,1,6,1,6,1,12,1,
+    12,1,18,2,15,1,6,1,21,1,3,1,10,1,10,1,
+    10,1,14,1,13,2,114,26,1,0,0,99,0,0,0,0,
+    0,0,0,0,3,0,0,0,3,0,0,0,67,0,0,0,
+    115,55,0,0,0,116,0,0,116,1,0,106,2,0,131,0,
+    0,102,2,0,125,0,0,116,3,0,116,4,0,102,2,0,
+    125,1,0,116,5,0,116,6,0,102,2,0,125,2,0,124,
+    0,0,124,1,0,124,2,0,103,3,0,83,41,1,122,95,
+    82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,
+    102,32,102,105,108,101,45,98,97,115,101,100,32,109,111,100,
+    117,108,101,32,108,111,97,100,101,114,115,46,10,10,32,32,
+    32,32,69,97,99,104,32,105,116,101,109,32,105,115,32,97,
+    32,116,117,112,108,101,32,40,108,111,97,100,101,114,44,32,
+    115,117,102,102,105,120,101,115,41,46,10,32,32,32,32,41,
+    7,114,225,0,0,0,114,150,0,0,0,218,18,101,120,116,
+    101,110,115,105,111,110,95,115,117,102,102,105,120,101,115,114,
+    219,0,0,0,114,84,0,0,0,114,224,0,0,0,114,74,
+    0,0,0,41,3,90,10,101,120,116,101,110,115,105,111,110,
+    115,90,6,115,111,117,114,99,101,90,8,98,121,116,101,99,
+    111,100,101,114,4,0,0,0,114,4,0,0,0,114,5,0,
+    0,0,114,167,0,0,0,92,5,0,0,115,8,0,0,0,
+    0,5,18,1,12,1,12,1,114,167,0,0,0,99,1,0,
+    0,0,0,0,0,0,12,0,0,0,12,0,0,0,67,0,
+    0,0,115,70,2,0,0,124,0,0,97,0,0,116,0,0,
+    106,1,0,97,1,0,116,0,0,106,2,0,97,2,0,116,
+    1,0,106,3,0,116,4,0,25,125,1,0,120,76,0,100,
+    26,0,68,93,68,0,125,2,0,124,2,0,116,1,0,106,
+    3,0,107,7,0,114,83,0,116,0,0,106,5,0,124,2,
+    0,131,1,0,125,3,0,110,13,0,116,1,0,106,3,0,
+    124,2,0,25,125,3,0,116,6,0,124,1,0,124,2,0,
+    124,3,0,131,3,0,1,113,44,0,87,100,5,0,100,6,
+    0,103,1,0,102,2,0,100,7,0,100,8,0,100,6,0,
+    103,2,0,102,2,0,102,2,0,125,4,0,120,149,0,124,
+    4,0,68,93,129,0,92,2,0,125,5,0,125,6,0,116,
+    7,0,100,9,0,100,10,0,132,0,0,124,6,0,68,131,
+    1,0,131,1,0,115,199,0,116,8,0,130,1,0,124,6,
+    0,100,11,0,25,125,7,0,124,5,0,116,1,0,106,3,
+    0,107,6,0,114,241,0,116,1,0,106,3,0,124,5,0,
+    25,125,8,0,80,113,156,0,121,20,0,116,0,0,106,5,
+    0,124,5,0,131,1,0,125,8,0,80,87,113,156,0,4,
+    116,9,0,107,10,0,114,28,1,1,1,1,119,156,0,89,
+    113,156,0,88,113,156,0,87,116,9,0,100,12,0,131,1,
+    0,130,1,0,116,6,0,124,1,0,100,13,0,124,8,0,
+    131,3,0,1,116,6,0,124,1,0,100,14,0,124,7,0,
+    131,3,0,1,116,6,0,124,1,0,100,15,0,100,16,0,
+    106,10,0,124,6,0,131,1,0,131,3,0,1,121,19,0,
+    116,0,0,106,5,0,100,17,0,131,1,0,125,9,0,87,
+    110,24,0,4,116,9,0,107,10,0,114,147,1,1,1,1,
+    100,18,0,125,9,0,89,110,1,0,88,116,6,0,124,1,
+    0,100,17,0,124,9,0,131,3,0,1,116,0,0,106,5,
+    0,100,19,0,131,1,0,125,10,0,116,6,0,124,1,0,
+    100,19,0,124,10,0,131,3,0,1,124,5,0,100,7,0,
+    107,2,0,114,238,1,116,0,0,106,5,0,100,20,0,131,
+    1,0,125,11,0,116,6,0,124,1,0,100,21,0,124,11,
+    0,131,3,0,1,116,6,0,124,1,0,100,22,0,116,11,
+    0,131,0,0,131,3,0,1,116,12,0,106,13,0,116,2,
+    0,106,14,0,131,0,0,131,1,0,1,124,5,0,100,7,
+    0,107,2,0,114,66,2,116,15,0,106,16,0,100,23,0,
+    131,1,0,1,100,24,0,116,12,0,107,6,0,114,66,2,
+    100,25,0,116,17,0,95,18,0,100,18,0,83,41,27,122,
+    205,83,101,116,117,112,32,116,104,101,32,112,97,116,104,45,
+    98,97,115,101,100,32,105,109,112,111,114,116,101,114,115,32,
+    102,111,114,32,105,109,112,111,114,116,108,105,98,32,98,121,
+    32,105,109,112,111,114,116,105,110,103,32,110,101,101,100,101,
+    100,10,32,32,32,32,98,117,105,108,116,45,105,110,32,109,
+    111,100,117,108,101,115,32,97,110,100,32,105,110,106,101,99,
+    116,105,110,103,32,116,104,101,109,32,105,110,116,111,32,116,
+    104,101,32,103,108,111,98,97,108,32,110,97,109,101,115,112,
+    97,99,101,46,10,10,32,32,32,32,79,116,104,101,114,32,
+    99,111,109,112,111,110,101,110,116,115,32,97,114,101,32,101,
+    120,116,114,97,99,116,101,100,32,102,114,111,109,32,116,104,
+    101,32,99,111,114,101,32,98,111,111,116,115,116,114,97,112,
+    32,109,111,100,117,108,101,46,10,10,32,32,32,32,114,49,
+    0,0,0,114,60,0,0,0,218,8,98,117,105,108,116,105,
+    110,115,114,147,0,0,0,90,5,112,111,115,105,120,250,1,
+    47,218,2,110,116,250,1,92,99,1,0,0,0,0,0,0,
+    0,2,0,0,0,3,0,0,0,115,0,0,0,115,33,0,
+    0,0,124,0,0,93,23,0,125,1,0,116,0,0,124,1,
+    0,131,1,0,100,0,0,107,2,0,86,1,113,3,0,100,
+    1,0,83,41,2,114,29,0,0,0,78,41,1,114,31,0,
+    0,0,41,2,114,22,0,0,0,114,77,0,0,0,114,4,
     0,0,0,114,4,0,0,0,114,5,0,0,0,114,231,0,
-    0,0,194,4,0,0,115,2,0,0,0,6,0,122,38,70,
-    105,108,101,70,105,110,100,101,114,46,95,95,105,110,105,116,
-    95,95,46,60,108,111,99,97,108,115,62,46,60,103,101,110,
-    101,120,112,114,62,114,58,0,0,0,114,29,0,0,0,78,
-    114,87,0,0,0,41,7,114,154,0,0,0,218,8,95,108,
-    111,97,100,101,114,115,114,35,0,0,0,218,11,95,112,97,
-    116,104,95,109,116,105,109,101,218,3,115,101,116,218,11,95,
-    112,97,116,104,95,99,97,99,104,101,218,19,95,114,101,108,
-    97,120,101,100,95,112,97,116,104,95,99,97,99,104,101,41,
-    5,114,108,0,0,0,114,35,0,0,0,218,14,108,111,97,
-    100,101,114,95,100,101,116,97,105,108,115,90,7,108,111,97,
-    100,101,114,115,114,171,0,0,0,114,4,0,0,0,41,1,
-    114,127,0,0,0,114,5,0,0,0,114,188,0,0,0,188,
-    4,0,0,115,16,0,0,0,0,4,6,1,19,1,36,1,
-    9,2,15,1,9,1,12,1,122,19,70,105,108,101,70,105,
-    110,100,101,114,46,95,95,105,110,105,116,95,95,99,1,0,
-    0,0,0,0,0,0,1,0,0,0,2,0,0,0,67,0,
-    0,0,115,13,0,0,0,100,3,0,124,0,0,95,0,0,
-    100,2,0,83,41,4,122,31,73,110,118,97,108,105,100,97,
-    116,101,32,116,104,101,32,100,105,114,101,99,116,111,114,121,
-    32,109,116,105,109,101,46,114,29,0,0,0,78,114,87,0,
-    0,0,41,1,114,11,1,0,0,41,1,114,108,0,0,0,
-    114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,
-    253,0,0,0,202,4,0,0,115,2,0,0,0,0,2,122,
-    28,70,105,108,101,70,105,110,100,101,114,46,105,110,118,97,
-    108,105,100,97,116,101,95,99,97,99,104,101,115,99,2,0,
-    0,0,0,0,0,0,3,0,0,0,2,0,0,0,67,0,
-    0,0,115,59,0,0,0,124,0,0,106,0,0,124,1,0,
-    131,1,0,125,2,0,124,2,0,100,1,0,107,8,0,114,
-    37,0,100,1,0,103,0,0,102,2,0,83,124,2,0,106,
-    1,0,124,2,0,106,2,0,112,55,0,103,0,0,102,2,
-    0,83,41,2,122,197,84,114,121,32,116,111,32,102,105,110,
-    100,32,97,32,108,111,97,100,101,114,32,102,111,114,32,116,
-    104,101,32,115,112,101,99,105,102,105,101,100,32,109,111,100,
-    117,108,101,44,32,111,114,32,116,104,101,32,110,97,109,101,
-    115,112,97,99,101,10,32,32,32,32,32,32,32,32,112,97,
-    99,107,97,103,101,32,112,111,114,116,105,111,110,115,46,32,
-    82,101,116,117,114,110,115,32,40,108,111,97,100,101,114,44,
-    32,108,105,115,116,45,111,102,45,112,111,114,116,105,111,110,
-    115,41,46,10,10,32,32,32,32,32,32,32,32,84,104,105,
-    115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114,
-    101,99,97,116,101,100,46,32,32,85,115,101,32,102,105,110,
-    100,95,115,112,101,99,40,41,32,105,110,115,116,101,97,100,
-    46,10,10,32,32,32,32,32,32,32,32,78,41,3,114,184,
-    0,0,0,114,127,0,0,0,114,164,0,0,0,41,3,114,
-    108,0,0,0,114,126,0,0,0,114,133,0,0,0,114,4,
-    0,0,0,114,4,0,0,0,114,5,0,0,0,114,124,0,
-    0,0,208,4,0,0,115,8,0,0,0,0,7,15,1,12,
-    1,10,1,122,22,70,105,108,101,70,105,110,100,101,114,46,
-    102,105,110,100,95,108,111,97,100,101,114,99,6,0,0,0,
-    0,0,0,0,7,0,0,0,7,0,0,0,67,0,0,0,
-    115,40,0,0,0,124,1,0,124,2,0,124,3,0,131,2,
-    0,125,6,0,116,0,0,124,2,0,124,3,0,100,1,0,
-    124,6,0,100,2,0,124,4,0,131,2,2,83,41,3,78,
-    114,127,0,0,0,114,164,0,0,0,41,1,114,165,0,0,
-    0,41,7,114,108,0,0,0,114,170,0,0,0,114,126,0,
-    0,0,114,35,0,0,0,90,4,115,109,115,108,114,183,0,
-    0,0,114,127,0,0,0,114,4,0,0,0,114,4,0,0,
-    0,114,5,0,0,0,114,8,1,0,0,220,4,0,0,115,
-    6,0,0,0,0,1,15,1,18,1,122,20,70,105,108,101,
-    70,105,110,100,101,114,46,95,103,101,116,95,115,112,101,99,
-    78,99,3,0,0,0,0,0,0,0,14,0,0,0,15,0,
-    0,0,67,0,0,0,115,234,1,0,0,100,1,0,125,3,
-    0,124,1,0,106,0,0,100,2,0,131,1,0,100,3,0,
-    25,125,4,0,121,34,0,116,1,0,124,0,0,106,2,0,
-    112,49,0,116,3,0,106,4,0,131,0,0,131,1,0,106,
-    5,0,125,5,0,87,110,24,0,4,116,6,0,107,10,0,
-    114,85,0,1,1,1,100,10,0,125,5,0,89,110,1,0,
-    88,124,5,0,124,0,0,106,7,0,107,3,0,114,120,0,
-    124,0,0,106,8,0,131,0,0,1,124,5,0,124,0,0,
-    95,7,0,116,9,0,131,0,0,114,153,0,124,0,0,106,
-    10,0,125,6,0,124,4,0,106,11,0,131,0,0,125,7,
-    0,110,15,0,124,0,0,106,12,0,125,6,0,124,4,0,
-    125,7,0,124,7,0,124,6,0,107,6,0,114,45,1,116,
-    13,0,124,0,0,106,2,0,124,4,0,131,2,0,125,8,
-    0,120,100,0,124,0,0,106,14,0,68,93,77,0,92,2,
-    0,125,9,0,125,10,0,100,5,0,124,9,0,23,125,11,
-    0,116,13,0,124,8,0,124,11,0,131,2,0,125,12,0,
-    116,15,0,124,12,0,131,1,0,114,208,0,124,0,0,106,
-    16,0,124,10,0,124,1,0,124,12,0,124,8,0,103,1,
-    0,124,2,0,131,5,0,83,113,208,0,87,116,17,0,124,
-    8,0,131,1,0,125,3,0,120,123,0,124,0,0,106,14,
-    0,68,93,112,0,92,2,0,125,9,0,125,10,0,116,13,
-    0,124,0,0,106,2,0,124,4,0,124,9,0,23,131,2,
-    0,125,12,0,116,18,0,100,6,0,106,19,0,124,12,0,
-    131,1,0,100,7,0,100,3,0,131,1,1,1,124,7,0,
-    124,9,0,23,124,6,0,107,6,0,114,55,1,116,15,0,
-    124,12,0,131,1,0,114,55,1,124,0,0,106,16,0,124,
-    10,0,124,1,0,124,12,0,100,8,0,124,2,0,131,5,
-    0,83,113,55,1,87,124,3,0,114,230,1,116,18,0,100,
-    9,0,106,19,0,124,8,0,131,1,0,131,1,0,1,116,
-    20,0,106,21,0,124,1,0,100,8,0,131,2,0,125,13,
-    0,124,8,0,103,1,0,124,13,0,95,22,0,124,13,0,
-    83,100,8,0,83,41,11,122,125,84,114,121,32,116,111,32,
-    102,105,110,100,32,97,32,108,111,97,100,101,114,32,102,111,
-    114,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,
-    109,111,100,117,108,101,44,32,111,114,32,116,104,101,32,110,
-    97,109,101,115,112,97,99,101,10,32,32,32,32,32,32,32,
-    32,112,97,99,107,97,103,101,32,112,111,114,116,105,111,110,
-    115,46,32,82,101,116,117,114,110,115,32,40,108,111,97,100,
-    101,114,44,32,108,105,115,116,45,111,102,45,112,111,114,116,
-    105,111,110,115,41,46,70,114,58,0,0,0,114,56,0,0,
-    0,114,29,0,0,0,114,188,0,0,0,122,9,116,114,121,
-    105,110,103,32,123,125,114,98,0,0,0,78,122,25,112,111,
-    115,115,105,98,108,101,32,110,97,109,101,115,112,97,99,101,
-    32,102,111,114,32,123,125,114,87,0,0,0,41,23,114,32,
-    0,0,0,114,39,0,0,0,114,35,0,0,0,114,3,0,
-    0,0,114,45,0,0,0,114,220,0,0,0,114,40,0,0,
-    0,114,11,1,0,0,218,11,95,102,105,108,108,95,99,97,
-    99,104,101,114,6,0,0,0,114,14,1,0,0,114,88,0,
-    0,0,114,13,1,0,0,114,28,0,0,0,114,10,1,0,
-    0,114,44,0,0,0,114,8,1,0,0,114,46,0,0,0,
-    114,105,0,0,0,114,47,0,0,0,114,121,0,0,0,114,
-    166,0,0,0,114,164,0,0,0,41,14,114,108,0,0,0,
-    114,126,0,0,0,114,183,0,0,0,90,12,105,115,95,110,
-    97,109,101,115,112,97,99,101,90,11,116,97,105,108,95,109,
-    111,100,117,108,101,114,138,0,0,0,90,5,99,97,99,104,
-    101,90,12,99,97,99,104,101,95,109,111,100,117,108,101,90,
-    9,98,97,115,101,95,112,97,116,104,114,229,0,0,0,114,
-    170,0,0,0,90,13,105,110,105,116,95,102,105,108,101,110,
-    97,109,101,90,9,102,117,108,108,95,112,97,116,104,114,133,
-    0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
-    0,0,114,184,0,0,0,225,4,0,0,115,68,0,0,0,
-    0,3,6,1,19,1,3,1,34,1,13,1,11,1,15,1,
-    10,1,9,2,9,1,9,1,15,2,9,1,6,2,12,1,
-    18,1,22,1,10,1,15,1,12,1,32,4,12,2,22,1,
-    22,1,25,1,16,1,12,1,29,1,6,1,19,1,18,1,
-    12,1,4,1,122,20,70,105,108,101,70,105,110,100,101,114,
-    46,102,105,110,100,95,115,112,101,99,99,1,0,0,0,0,
-    0,0,0,9,0,0,0,13,0,0,0,67,0,0,0,115,
-    11,1,0,0,124,0,0,106,0,0,125,1,0,121,31,0,
-    116,1,0,106,2,0,124,1,0,112,33,0,116,1,0,106,
-    3,0,131,0,0,131,1,0,125,2,0,87,110,33,0,4,
-    116,4,0,116,5,0,116,6,0,102,3,0,107,10,0,114,
-    75,0,1,1,1,103,0,0,125,2,0,89,110,1,0,88,
-    116,7,0,106,8,0,106,9,0,100,1,0,131,1,0,115,
-    112,0,116,10,0,124,2,0,131,1,0,124,0,0,95,11,
-    0,110,111,0,116,10,0,131,0,0,125,3,0,120,90,0,
-    124,2,0,68,93,82,0,125,4,0,124,4,0,106,12,0,
-    100,2,0,131,1,0,92,3,0,125,5,0,125,6,0,125,
-    7,0,124,6,0,114,191,0,100,3,0,106,13,0,124,5,
-    0,124,7,0,106,14,0,131,0,0,131,2,0,125,8,0,
-    110,6,0,124,5,0,125,8,0,124,3,0,106,15,0,124,
-    8,0,131,1,0,1,113,128,0,87,124,3,0,124,0,0,
-    95,11,0,116,7,0,106,8,0,106,9,0,116,16,0,131,
-    1,0,114,7,1,100,4,0,100,5,0,132,0,0,124,2,
-    0,68,131,1,0,124,0,0,95,17,0,100,6,0,83,41,
-    7,122,68,70,105,108,108,32,116,104,101,32,99,97,99,104,
-    101,32,111,102,32,112,111,116,101,110,116,105,97,108,32,109,
-    111,100,117,108,101,115,32,97,110,100,32,112,97,99,107,97,
-    103,101,115,32,102,111,114,32,116,104,105,115,32,100,105,114,
-    101,99,116,111,114,121,46,114,0,0,0,0,114,58,0,0,
-    0,122,5,123,125,46,123,125,99,1,0,0,0,0,0,0,
-    0,2,0,0,0,3,0,0,0,83,0,0,0,115,28,0,
-    0,0,104,0,0,124,0,0,93,18,0,125,1,0,124,1,
-    0,106,0,0,131,0,0,146,2,0,113,6,0,83,114,4,
-    0,0,0,41,1,114,88,0,0,0,41,2,114,22,0,0,
-    0,90,2,102,110,114,4,0,0,0,114,4,0,0,0,114,
-    5,0,0,0,250,9,60,115,101,116,99,111,109,112,62,43,
-    5,0,0,115,2,0,0,0,9,0,122,41,70,105,108,101,
-    70,105,110,100,101,114,46,95,102,105,108,108,95,99,97,99,
-    104,101,46,60,108,111,99,97,108,115,62,46,60,115,101,116,
-    99,111,109,112,62,78,41,18,114,35,0,0,0,114,3,0,
-    0,0,90,7,108,105,115,116,100,105,114,114,45,0,0,0,
-    114,3,1,0,0,218,15,80,101,114,109,105,115,115,105,111,
-    110,69,114,114,111,114,218,18,78,111,116,65,68,105,114,101,
-    99,116,111,114,121,69,114,114,111,114,114,7,0,0,0,114,
-    8,0,0,0,114,9,0,0,0,114,12,1,0,0,114,13,
-    1,0,0,114,83,0,0,0,114,47,0,0,0,114,88,0,
-    0,0,218,3,97,100,100,114,10,0,0,0,114,14,1,0,
-    0,41,9,114,108,0,0,0,114,35,0,0,0,90,8,99,
-    111,110,116,101,110,116,115,90,21,108,111,119,101,114,95,115,
-    117,102,102,105,120,95,99,111,110,116,101,110,116,115,114,248,
-    0,0,0,114,106,0,0,0,114,241,0,0,0,114,229,0,
-    0,0,90,8,110,101,119,95,110,97,109,101,114,4,0,0,
-    0,114,4,0,0,0,114,5,0,0,0,114,16,1,0,0,
-    14,5,0,0,115,34,0,0,0,0,2,9,1,3,1,31,
-    1,22,3,11,3,18,1,18,7,9,1,13,1,24,1,6,
-    1,27,2,6,1,17,1,9,1,18,1,122,22,70,105,108,
-    101,70,105,110,100,101,114,46,95,102,105,108,108,95,99,97,
-    99,104,101,99,1,0,0,0,0,0,0,0,3,0,0,0,
-    3,0,0,0,7,0,0,0,115,25,0,0,0,135,0,0,
-    135,1,0,102,2,0,100,1,0,100,2,0,134,0,0,125,
-    2,0,124,2,0,83,41,3,97,20,1,0,0,65,32,99,
-    108,97,115,115,32,109,101,116,104,111,100,32,119,104,105,99,
-    104,32,114,101,116,117,114,110,115,32,97,32,99,108,111,115,
-    117,114,101,32,116,111,32,117,115,101,32,111,110,32,115,121,
-    115,46,112,97,116,104,95,104,111,111,107,10,32,32,32,32,
-    32,32,32,32,119,104,105,99,104,32,119,105,108,108,32,114,
-    101,116,117,114,110,32,97,110,32,105,110,115,116,97,110,99,
-    101,32,117,115,105,110,103,32,116,104,101,32,115,112,101,99,
-    105,102,105,101,100,32,108,111,97,100,101,114,115,32,97,110,
-    100,32,116,104,101,32,112,97,116,104,10,32,32,32,32,32,
-    32,32,32,99,97,108,108,101,100,32,111,110,32,116,104,101,
-    32,99,108,111,115,117,114,101,46,10,10,32,32,32,32,32,
-    32,32,32,73,102,32,116,104,101,32,112,97,116,104,32,99,
-    97,108,108,101,100,32,111,110,32,116,104,101,32,99,108,111,
-    115,117,114,101,32,105,115,32,110,111,116,32,97,32,100,105,
-    114,101,99,116,111,114,121,44,32,73,109,112,111,114,116,69,
-    114,114,111,114,32,105,115,10,32,32,32,32,32,32,32,32,
-    114,97,105,115,101,100,46,10,10,32,32,32,32,32,32,32,
-    32,99,1,0,0,0,0,0,0,0,1,0,0,0,4,0,
-    0,0,19,0,0,0,115,43,0,0,0,116,0,0,124,0,
-    0,131,1,0,115,30,0,116,1,0,100,1,0,100,2,0,
-    124,0,0,131,1,1,130,1,0,136,0,0,124,0,0,136,
-    1,0,140,1,0,83,41,3,122,45,80,97,116,104,32,104,
-    111,111,107,32,102,111,114,32,105,109,112,111,114,116,108,105,
-    98,46,109,97,99,104,105,110,101,114,121,46,70,105,108,101,
-    70,105,110,100,101,114,46,122,30,111,110,108,121,32,100,105,
-    114,101,99,116,111,114,105,101,115,32,97,114,101,32,115,117,
-    112,112,111,114,116,101,100,114,35,0,0,0,41,2,114,46,
-    0,0,0,114,107,0,0,0,41,1,114,35,0,0,0,41,
-    2,114,174,0,0,0,114,15,1,0,0,114,4,0,0,0,
-    114,5,0,0,0,218,24,112,97,116,104,95,104,111,111,107,
-    95,102,111,114,95,70,105,108,101,70,105,110,100,101,114,55,
-    5,0,0,115,6,0,0,0,0,2,12,1,18,1,122,54,
-    70,105,108,101,70,105,110,100,101,114,46,112,97,116,104,95,
-    104,111,111,107,46,60,108,111,99,97,108,115,62,46,112,97,
-    116,104,95,104,111,111,107,95,102,111,114,95,70,105,108,101,
-    70,105,110,100,101,114,114,4,0,0,0,41,3,114,174,0,
-    0,0,114,15,1,0,0,114,21,1,0,0,114,4,0,0,
-    0,41,2,114,174,0,0,0,114,15,1,0,0,114,5,0,
-    0,0,218,9,112,97,116,104,95,104,111,111,107,45,5,0,
-    0,115,4,0,0,0,0,10,21,6,122,20,70,105,108,101,
-    70,105,110,100,101,114,46,112,97,116,104,95,104,111,111,107,
-    99,1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,
-    0,67,0,0,0,115,16,0,0,0,100,1,0,106,0,0,
-    124,0,0,106,1,0,131,1,0,83,41,2,78,122,16,70,
-    105,108,101,70,105,110,100,101,114,40,123,33,114,125,41,41,
-    2,114,47,0,0,0,114,35,0,0,0,41,1,114,108,0,
-    0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
-    0,114,247,0,0,0,63,5,0,0,115,2,0,0,0,0,
-    1,122,19,70,105,108,101,70,105,110,100,101,114,46,95,95,
-    114,101,112,114,95,95,41,15,114,112,0,0,0,114,111,0,
-    0,0,114,113,0,0,0,114,114,0,0,0,114,188,0,0,
-    0,114,253,0,0,0,114,130,0,0,0,114,185,0,0,0,
-    114,124,0,0,0,114,8,1,0,0,114,184,0,0,0,114,
-    16,1,0,0,114,186,0,0,0,114,22,1,0,0,114,247,
-    0,0,0,114,4,0,0,0,114,4,0,0,0,114,4,0,
-    0,0,114,5,0,0,0,114,9,1,0,0,179,4,0,0,
-    115,20,0,0,0,12,7,6,2,12,14,12,4,6,2,12,
-    12,12,5,15,45,12,31,18,18,114,9,1,0,0,99,4,
-    0,0,0,0,0,0,0,6,0,0,0,11,0,0,0,67,
-    0,0,0,115,195,0,0,0,124,0,0,106,0,0,100,1,
-    0,131,1,0,125,4,0,124,0,0,106,0,0,100,2,0,
-    131,1,0,125,5,0,124,4,0,115,99,0,124,5,0,114,
-    54,0,124,5,0,106,1,0,125,4,0,110,45,0,124,2,
-    0,124,3,0,107,2,0,114,84,0,116,2,0,124,1,0,
-    124,2,0,131,2,0,125,4,0,110,15,0,116,3,0,124,
-    1,0,124,2,0,131,2,0,125,4,0,124,5,0,115,126,
-    0,116,4,0,124,1,0,124,2,0,100,3,0,124,4,0,
-    131,2,1,125,5,0,121,44,0,124,5,0,124,0,0,100,
-    2,0,60,124,4,0,124,0,0,100,1,0,60,124,2,0,
-    124,0,0,100,4,0,60,124,3,0,124,0,0,100,5,0,
-    60,87,110,18,0,4,116,5,0,107,10,0,114,190,0,1,
-    1,1,89,110,1,0,88,100,0,0,83,41,6,78,114,227,
-    0,0,0,218,8,95,95,115,112,101,99,95,95,114,127,0,
-    0,0,90,8,95,95,102,105,108,101,95,95,90,10,95,95,
-    99,97,99,104,101,100,95,95,41,6,218,3,103,101,116,114,
-    127,0,0,0,114,224,0,0,0,114,219,0,0,0,114,165,
-    0,0,0,218,9,69,120,99,101,112,116,105,111,110,41,6,
-    90,2,110,115,114,106,0,0,0,90,8,112,97,116,104,110,
-    97,109,101,90,9,99,112,97,116,104,110,97,109,101,114,127,
-    0,0,0,114,133,0,0,0,114,4,0,0,0,114,4,0,
-    0,0,114,5,0,0,0,218,14,95,102,105,120,95,117,112,
-    95,109,111,100,117,108,101,69,5,0,0,115,34,0,0,0,
-    0,2,15,1,15,1,6,1,6,1,12,1,12,1,18,2,
-    15,1,6,1,21,1,3,1,10,1,10,1,10,1,14,1,
-    13,2,114,26,1,0,0,99,0,0,0,0,0,0,0,0,
-    3,0,0,0,3,0,0,0,67,0,0,0,115,55,0,0,
-    0,116,0,0,116,1,0,106,2,0,131,0,0,102,2,0,
-    125,0,0,116,3,0,116,4,0,102,2,0,125,1,0,116,
-    5,0,116,6,0,102,2,0,125,2,0,124,0,0,124,1,
-    0,124,2,0,103,3,0,83,41,1,122,95,82,101,116,117,
-    114,110,115,32,97,32,108,105,115,116,32,111,102,32,102,105,
-    108,101,45,98,97,115,101,100,32,109,111,100,117,108,101,32,
-    108,111,97,100,101,114,115,46,10,10,32,32,32,32,69,97,
-    99,104,32,105,116,101,109,32,105,115,32,97,32,116,117,112,
-    108,101,32,40,108,111,97,100,101,114,44,32,115,117,102,102,
-    105,120,101,115,41,46,10,32,32,32,32,41,7,114,225,0,
-    0,0,114,150,0,0,0,218,18,101,120,116,101,110,115,105,
-    111,110,95,115,117,102,102,105,120,101,115,114,219,0,0,0,
-    114,84,0,0,0,114,224,0,0,0,114,74,0,0,0,41,
-    3,90,10,101,120,116,101,110,115,105,111,110,115,90,6,115,
-    111,117,114,99,101,90,8,98,121,116,101,99,111,100,101,114,
-    4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,167,
-    0,0,0,92,5,0,0,115,8,0,0,0,0,5,18,1,
-    12,1,12,1,114,167,0,0,0,99,1,0,0,0,0,0,
-    0,0,12,0,0,0,12,0,0,0,67,0,0,0,115,70,
-    2,0,0,124,0,0,97,0,0,116,0,0,106,1,0,97,
-    1,0,116,0,0,106,2,0,97,2,0,116,1,0,106,3,
-    0,116,4,0,25,125,1,0,120,76,0,100,26,0,68,93,
-    68,0,125,2,0,124,2,0,116,1,0,106,3,0,107,7,
-    0,114,83,0,116,0,0,106,5,0,124,2,0,131,1,0,
-    125,3,0,110,13,0,116,1,0,106,3,0,124,2,0,25,
-    125,3,0,116,6,0,124,1,0,124,2,0,124,3,0,131,
-    3,0,1,113,44,0,87,100,5,0,100,6,0,103,1,0,
-    102,2,0,100,7,0,100,8,0,100,6,0,103,2,0,102,
-    2,0,102,2,0,125,4,0,120,149,0,124,4,0,68,93,
-    129,0,92,2,0,125,5,0,125,6,0,116,7,0,100,9,
-    0,100,10,0,132,0,0,124,6,0,68,131,1,0,131,1,
-    0,115,199,0,116,8,0,130,1,0,124,6,0,100,11,0,
-    25,125,7,0,124,5,0,116,1,0,106,3,0,107,6,0,
-    114,241,0,116,1,0,106,3,0,124,5,0,25,125,8,0,
-    80,113,156,0,121,20,0,116,0,0,106,5,0,124,5,0,
-    131,1,0,125,8,0,80,87,113,156,0,4,116,9,0,107,
-    10,0,114,28,1,1,1,1,119,156,0,89,113,156,0,88,
-    113,156,0,87,116,9,0,100,12,0,131,1,0,130,1,0,
-    116,6,0,124,1,0,100,13,0,124,8,0,131,3,0,1,
-    116,6,0,124,1,0,100,14,0,124,7,0,131,3,0,1,
-    116,6,0,124,1,0,100,15,0,100,16,0,106,10,0,124,
-    6,0,131,1,0,131,3,0,1,121,19,0,116,0,0,106,
-    5,0,100,17,0,131,1,0,125,9,0,87,110,24,0,4,
-    116,9,0,107,10,0,114,147,1,1,1,1,100,18,0,125,
-    9,0,89,110,1,0,88,116,6,0,124,1,0,100,17,0,
-    124,9,0,131,3,0,1,116,0,0,106,5,0,100,19,0,
-    131,1,0,125,10,0,116,6,0,124,1,0,100,19,0,124,
-    10,0,131,3,0,1,124,5,0,100,7,0,107,2,0,114,
-    238,1,116,0,0,106,5,0,100,20,0,131,1,0,125,11,
-    0,116,6,0,124,1,0,100,21,0,124,11,0,131,3,0,
-    1,116,6,0,124,1,0,100,22,0,116,11,0,131,0,0,
-    131,3,0,1,116,12,0,106,13,0,116,2,0,106,14,0,
-    131,0,0,131,1,0,1,124,5,0,100,7,0,107,2,0,
-    114,66,2,116,15,0,106,16,0,100,23,0,131,1,0,1,
-    100,24,0,116,12,0,107,6,0,114,66,2,100,25,0,116,
-    17,0,95,18,0,100,18,0,83,41,27,122,205,83,101,116,
-    117,112,32,116,104,101,32,112,97,116,104,45,98,97,115,101,
-    100,32,105,109,112,111,114,116,101,114,115,32,102,111,114,32,
-    105,109,112,111,114,116,108,105,98,32,98,121,32,105,109,112,
-    111,114,116,105,110,103,32,110,101,101,100,101,100,10,32,32,
-    32,32,98,117,105,108,116,45,105,110,32,109,111,100,117,108,
-    101,115,32,97,110,100,32,105,110,106,101,99,116,105,110,103,
-    32,116,104,101,109,32,105,110,116,111,32,116,104,101,32,103,
-    108,111,98,97,108,32,110,97,109,101,115,112,97,99,101,46,
-    10,10,32,32,32,32,79,116,104,101,114,32,99,111,109,112,
-    111,110,101,110,116,115,32,97,114,101,32,101,120,116,114,97,
-    99,116,101,100,32,102,114,111,109,32,116,104,101,32,99,111,
-    114,101,32,98,111,111,116,115,116,114,97,112,32,109,111,100,
-    117,108,101,46,10,10,32,32,32,32,114,49,0,0,0,114,
-    60,0,0,0,218,8,98,117,105,108,116,105,110,115,114,147,
-    0,0,0,90,5,112,111,115,105,120,250,1,47,218,2,110,
-    116,250,1,92,99,1,0,0,0,0,0,0,0,2,0,0,
-    0,3,0,0,0,115,0,0,0,115,33,0,0,0,124,0,
-    0,93,23,0,125,1,0,116,0,0,124,1,0,131,1,0,
-    100,0,0,107,2,0,86,1,113,3,0,100,1,0,83,41,
-    2,114,29,0,0,0,78,41,1,114,31,0,0,0,41,2,
-    114,22,0,0,0,114,77,0,0,0,114,4,0,0,0,114,
-    4,0,0,0,114,5,0,0,0,114,231,0,0,0,128,5,
-    0,0,115,2,0,0,0,6,0,122,25,95,115,101,116,117,
-    112,46,60,108,111,99,97,108,115,62,46,60,103,101,110,101,
-    120,112,114,62,114,59,0,0,0,122,30,105,109,112,111,114,
-    116,108,105,98,32,114,101,113,117,105,114,101,115,32,112,111,
-    115,105,120,32,111,114,32,110,116,114,3,0,0,0,114,25,
-    0,0,0,114,21,0,0,0,114,30,0,0,0,90,7,95,
-    116,104,114,101,97,100,78,90,8,95,119,101,97,107,114,101,
-    102,90,6,119,105,110,114,101,103,114,173,0,0,0,114,6,
-    0,0,0,122,4,46,112,121,119,122,6,95,100,46,112,121,
-    100,84,41,4,122,3,95,105,111,122,9,95,119,97,114,110,
-    105,110,103,115,122,8,98,117,105,108,116,105,110,115,122,7,
-    109,97,114,115,104,97,108,41,19,114,121,0,0,0,114,7,
-    0,0,0,114,150,0,0,0,114,132,0,0,0,114,112,0,
-    0,0,90,18,95,98,117,105,108,116,105,110,95,102,114,111,
-    109,95,110,97,109,101,114,116,0,0,0,218,3,97,108,108,
-    218,14,65,115,115,101,114,116,105,111,110,69,114,114,111,114,
-    114,107,0,0,0,114,26,0,0,0,114,11,0,0,0,114,
-    233,0,0,0,114,154,0,0,0,114,27,1,0,0,114,84,
-    0,0,0,114,169,0,0,0,114,172,0,0,0,114,177,0,
-    0,0,41,12,218,17,95,98,111,111,116,115,116,114,97,112,
-    95,109,111,100,117,108,101,90,11,115,101,108,102,95,109,111,
-    100,117,108,101,90,12,98,117,105,108,116,105,110,95,110,97,
-    109,101,90,14,98,117,105,108,116,105,110,95,109,111,100,117,
-    108,101,90,10,111,115,95,100,101,116,97,105,108,115,90,10,
-    98,117,105,108,116,105,110,95,111,115,114,21,0,0,0,114,
-    25,0,0,0,90,9,111,115,95,109,111,100,117,108,101,90,
-    13,116,104,114,101,97,100,95,109,111,100,117,108,101,90,14,
-    119,101,97,107,114,101,102,95,109,111,100,117,108,101,90,13,
-    119,105,110,114,101,103,95,109,111,100,117,108,101,114,4,0,
-    0,0,114,4,0,0,0,114,5,0,0,0,218,6,95,115,
-    101,116,117,112,103,5,0,0,115,82,0,0,0,0,8,6,
-    1,9,1,9,3,13,1,13,1,15,1,18,2,13,1,20,
-    3,33,1,19,2,31,1,10,1,15,1,13,1,4,2,3,
-    1,15,1,5,1,13,1,12,2,12,1,16,1,16,1,25,
-    3,3,1,19,1,13,2,11,1,16,3,15,1,16,3,12,
-    1,15,1,16,3,19,1,19,1,12,1,13,1,12,1,114,
-    35,1,0,0,99,1,0,0,0,0,0,0,0,2,0,0,
-    0,3,0,0,0,67,0,0,0,115,116,0,0,0,116,0,
-    0,124,0,0,131,1,0,1,116,1,0,131,0,0,125,1,
-    0,116,2,0,106,3,0,106,4,0,116,5,0,106,6,0,
-    124,1,0,140,0,0,103,1,0,131,1,0,1,116,7,0,
-    106,8,0,100,1,0,107,2,0,114,78,0,116,2,0,106,
-    9,0,106,10,0,116,11,0,131,1,0,1,116,2,0,106,
-    9,0,106,10,0,116,12,0,131,1,0,1,116,5,0,124,
-    0,0,95,5,0,116,13,0,124,0,0,95,13,0,100,2,
-    0,83,41,3,122,41,73,110,115,116,97,108,108,32,116,104,
-    101,32,112,97,116,104,45,98,97,115,101,100,32,105,109,112,
-    111,114,116,32,99,111,109,112,111,110,101,110,116,115,46,114,
-    30,1,0,0,78,41,14,114,35,1,0,0,114,167,0,0,
-    0,114,7,0,0,0,114,1,1,0,0,114,154,0,0,0,
-    114,9,1,0,0,114,22,1,0,0,114,3,0,0,0,114,
-    112,0,0,0,218,9,109,101,116,97,95,112,97,116,104,114,
-    169,0,0,0,114,172,0,0,0,114,252,0,0,0,114,219,
-    0,0,0,41,2,114,34,1,0,0,90,17,115,117,112,112,
-    111,114,116,101,100,95,108,111,97,100,101,114,115,114,4,0,
-    0,0,114,4,0,0,0,114,5,0,0,0,218,8,95,105,
-    110,115,116,97,108,108,171,5,0,0,115,16,0,0,0,0,
-    2,10,1,9,1,28,1,15,1,16,1,16,4,9,1,114,
-    37,1,0,0,41,3,122,3,119,105,110,114,1,0,0,0,
-    114,2,0,0,0,41,59,114,114,0,0,0,114,10,0,0,
-    0,114,11,0,0,0,114,17,0,0,0,114,19,0,0,0,
-    114,28,0,0,0,114,38,0,0,0,114,39,0,0,0,114,
-    43,0,0,0,114,44,0,0,0,114,46,0,0,0,114,55,
-    0,0,0,218,4,116,121,112,101,218,8,95,95,99,111,100,
-    101,95,95,114,149,0,0,0,114,15,0,0,0,114,140,0,
-    0,0,114,14,0,0,0,114,18,0,0,0,90,17,95,82,
-    65,87,95,77,65,71,73,67,95,78,85,77,66,69,82,114,
-    73,0,0,0,114,72,0,0,0,114,84,0,0,0,114,74,
-    0,0,0,90,23,68,69,66,85,71,95,66,89,84,69,67,
-    79,68,69,95,83,85,70,70,73,88,69,83,90,27,79,80,
-    84,73,77,73,90,69,68,95,66,89,84,69,67,79,68,69,
-    95,83,85,70,70,73,88,69,83,114,79,0,0,0,114,85,
-    0,0,0,114,91,0,0,0,114,95,0,0,0,114,97,0,
-    0,0,114,105,0,0,0,114,123,0,0,0,114,130,0,0,
-    0,114,135,0,0,0,114,146,0,0,0,114,152,0,0,0,
-    114,155,0,0,0,114,160,0,0,0,114,131,0,0,0,218,
-    6,111,98,106,101,99,116,114,168,0,0,0,114,165,0,0,
-    0,114,172,0,0,0,114,187,0,0,0,114,195,0,0,0,
-    114,211,0,0,0,114,219,0,0,0,114,224,0,0,0,114,
-    233,0,0,0,114,225,0,0,0,114,234,0,0,0,114,250,
-    0,0,0,114,252,0,0,0,114,9,1,0,0,114,26,1,
-    0,0,114,167,0,0,0,114,35,1,0,0,114,37,1,0,
-    0,114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,
-    114,5,0,0,0,218,8,60,109,111,100,117,108,101,62,8,
-    0,0,0,115,104,0,0,0,6,17,6,3,12,12,12,5,
-    12,5,12,6,12,12,12,10,12,9,12,5,12,7,15,22,
-    15,108,22,1,18,2,6,1,6,2,9,2,9,2,10,2,
-    21,44,12,33,12,19,12,12,12,12,18,8,12,27,12,18,
-    12,15,21,55,21,12,18,10,12,14,24,22,9,3,12,1,
-    15,65,19,63,19,27,22,110,19,41,25,43,25,16,6,3,
-    19,57,19,57,19,41,19,134,19,146,15,23,12,11,12,68,
+    0,0,128,5,0,0,115,2,0,0,0,6,0,122,25,95,
+    115,101,116,117,112,46,60,108,111,99,97,108,115,62,46,60,
+    103,101,110,101,120,112,114,62,114,59,0,0,0,122,30,105,
+    109,112,111,114,116,108,105,98,32,114,101,113,117,105,114,101,
+    115,32,112,111,115,105,120,32,111,114,32,110,116,114,3,0,
+    0,0,114,25,0,0,0,114,21,0,0,0,114,30,0,0,
+    0,90,7,95,116,104,114,101,97,100,78,90,8,95,119,101,
+    97,107,114,101,102,90,6,119,105,110,114,101,103,114,173,0,
+    0,0,114,6,0,0,0,122,4,46,112,121,119,122,6,95,
+    100,46,112,121,100,84,41,4,122,3,95,105,111,122,9,95,
+    119,97,114,110,105,110,103,115,122,8,98,117,105,108,116,105,
+    110,115,122,7,109,97,114,115,104,97,108,41,19,114,121,0,
+    0,0,114,7,0,0,0,114,150,0,0,0,114,132,0,0,
+    0,114,112,0,0,0,90,18,95,98,117,105,108,116,105,110,
+    95,102,114,111,109,95,110,97,109,101,114,116,0,0,0,218,
+    3,97,108,108,218,14,65,115,115,101,114,116,105,111,110,69,
+    114,114,111,114,114,107,0,0,0,114,26,0,0,0,114,11,
+    0,0,0,114,233,0,0,0,114,154,0,0,0,114,27,1,
+    0,0,114,84,0,0,0,114,169,0,0,0,114,172,0,0,
+    0,114,177,0,0,0,41,12,218,17,95,98,111,111,116,115,
+    116,114,97,112,95,109,111,100,117,108,101,90,11,115,101,108,
+    102,95,109,111,100,117,108,101,90,12,98,117,105,108,116,105,
+    110,95,110,97,109,101,90,14,98,117,105,108,116,105,110,95,
+    109,111,100,117,108,101,90,10,111,115,95,100,101,116,97,105,
+    108,115,90,10,98,117,105,108,116,105,110,95,111,115,114,21,
+    0,0,0,114,25,0,0,0,90,9,111,115,95,109,111,100,
+    117,108,101,90,13,116,104,114,101,97,100,95,109,111,100,117,
+    108,101,90,14,119,101,97,107,114,101,102,95,109,111,100,117,
+    108,101,90,13,119,105,110,114,101,103,95,109,111,100,117,108,
+    101,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
+    218,6,95,115,101,116,117,112,103,5,0,0,115,82,0,0,
+    0,0,8,6,1,9,1,9,3,13,1,13,1,15,1,18,
+    2,13,1,20,3,33,1,19,2,31,1,10,1,15,1,13,
+    1,4,2,3,1,15,1,5,1,13,1,12,2,12,1,16,
+    1,16,1,25,3,3,1,19,1,13,2,11,1,16,3,15,
+    1,16,3,12,1,15,1,16,3,19,1,19,1,12,1,13,
+    1,12,1,114,35,1,0,0,99,1,0,0,0,0,0,0,
+    0,2,0,0,0,3,0,0,0,67,0,0,0,115,116,0,
+    0,0,116,0,0,124,0,0,131,1,0,1,116,1,0,131,
+    0,0,125,1,0,116,2,0,106,3,0,106,4,0,116,5,
+    0,106,6,0,124,1,0,140,0,0,103,1,0,131,1,0,
+    1,116,7,0,106,8,0,100,1,0,107,2,0,114,78,0,
+    116,2,0,106,9,0,106,10,0,116,11,0,131,1,0,1,
+    116,2,0,106,9,0,106,10,0,116,12,0,131,1,0,1,
+    116,5,0,124,0,0,95,5,0,116,13,0,124,0,0,95,
+    13,0,100,2,0,83,41,3,122,41,73,110,115,116,97,108,
+    108,32,116,104,101,32,112,97,116,104,45,98,97,115,101,100,
+    32,105,109,112,111,114,116,32,99,111,109,112,111,110,101,110,
+    116,115,46,114,30,1,0,0,78,41,14,114,35,1,0,0,
+    114,167,0,0,0,114,7,0,0,0,114,1,1,0,0,114,
+    154,0,0,0,114,9,1,0,0,114,22,1,0,0,114,3,
+    0,0,0,114,112,0,0,0,218,9,109,101,116,97,95,112,
+    97,116,104,114,169,0,0,0,114,172,0,0,0,114,252,0,
+    0,0,114,219,0,0,0,41,2,114,34,1,0,0,90,17,
+    115,117,112,112,111,114,116,101,100,95,108,111,97,100,101,114,
+    115,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
+    218,8,95,105,110,115,116,97,108,108,171,5,0,0,115,16,
+    0,0,0,0,2,10,1,9,1,28,1,15,1,16,1,16,
+    4,9,1,114,37,1,0,0,41,3,122,3,119,105,110,114,
+    1,0,0,0,114,2,0,0,0,41,59,114,114,0,0,0,
+    114,10,0,0,0,114,11,0,0,0,114,17,0,0,0,114,
+    19,0,0,0,114,28,0,0,0,114,38,0,0,0,114,39,
+    0,0,0,114,43,0,0,0,114,44,0,0,0,114,46,0,
+    0,0,114,55,0,0,0,218,4,116,121,112,101,218,8,95,
+    95,99,111,100,101,95,95,114,149,0,0,0,114,15,0,0,
+    0,114,140,0,0,0,114,14,0,0,0,114,18,0,0,0,
+    90,17,95,82,65,87,95,77,65,71,73,67,95,78,85,77,
+    66,69,82,114,73,0,0,0,114,72,0,0,0,114,84,0,
+    0,0,114,74,0,0,0,90,23,68,69,66,85,71,95,66,
+    89,84,69,67,79,68,69,95,83,85,70,70,73,88,69,83,
+    90,27,79,80,84,73,77,73,90,69,68,95,66,89,84,69,
+    67,79,68,69,95,83,85,70,70,73,88,69,83,114,79,0,
+    0,0,114,85,0,0,0,114,91,0,0,0,114,95,0,0,
+    0,114,97,0,0,0,114,105,0,0,0,114,123,0,0,0,
+    114,130,0,0,0,114,135,0,0,0,114,146,0,0,0,114,
+    152,0,0,0,114,155,0,0,0,114,160,0,0,0,114,131,
+    0,0,0,218,6,111,98,106,101,99,116,114,168,0,0,0,
+    114,165,0,0,0,114,172,0,0,0,114,187,0,0,0,114,
+    195,0,0,0,114,211,0,0,0,114,219,0,0,0,114,224,
+    0,0,0,114,233,0,0,0,114,225,0,0,0,114,234,0,
+    0,0,114,250,0,0,0,114,252,0,0,0,114,9,1,0,
+    0,114,26,1,0,0,114,167,0,0,0,114,35,1,0,0,
+    114,37,1,0,0,114,4,0,0,0,114,4,0,0,0,114,
+    4,0,0,0,114,5,0,0,0,218,8,60,109,111,100,117,
+    108,101,62,8,0,0,0,115,104,0,0,0,6,17,6,3,
+    12,12,12,5,12,5,12,6,12,12,12,10,12,9,12,5,
+    12,7,15,22,15,108,22,1,18,2,6,1,6,2,9,2,
+    9,2,10,2,21,44,12,33,12,19,12,12,12,12,18,8,
+    12,27,12,18,12,15,21,55,21,12,18,10,12,14,24,22,
+    9,3,12,1,15,65,19,63,19,27,22,110,19,41,25,43,
+    25,16,6,3,19,57,19,57,19,41,19,134,19,146,15,23,
+    12,11,12,68,
 };
diff --git a/Python/opcode_targets.h b/Python/opcode_targets.h
--- a/Python/opcode_targets.h
+++ b/Python/opcode_targets.h
@@ -49,9 +49,9 @@
     &&_unknown_opcode,
     &&_unknown_opcode,
     &&_unknown_opcode,
-    &&_unknown_opcode,
-    &&_unknown_opcode,
-    &&_unknown_opcode,
+    &&TARGET_GET_AITER,
+    &&TARGET_GET_ANEXT,
+    &&TARGET_BEFORE_ASYNC_WITH,
     &&_unknown_opcode,
     &&TARGET_STORE_MAP,
     &&TARGET_INPLACE_ADD,
@@ -72,7 +72,7 @@
     &&TARGET_PRINT_EXPR,
     &&TARGET_LOAD_BUILD_CLASS,
     &&TARGET_YIELD_FROM,
-    &&_unknown_opcode,
+    &&TARGET_GET_AWAITABLE,
     &&_unknown_opcode,
     &&TARGET_INPLACE_LSHIFT,
     &&TARGET_INPLACE_RSHIFT,
@@ -80,8 +80,8 @@
     &&TARGET_INPLACE_XOR,
     &&TARGET_INPLACE_OR,
     &&TARGET_BREAK_LOOP,
-    &&TARGET_WITH_CLEANUP,
-    &&_unknown_opcode,
+    &&TARGET_WITH_CLEANUP_START,
+    &&TARGET_WITH_CLEANUP_FINISH,
     &&TARGET_RETURN_VALUE,
     &&TARGET_IMPORT_STAR,
     &&_unknown_opcode,
@@ -153,7 +153,7 @@
     &&TARGET_BUILD_MAP_UNPACK_WITH_CALL,
     &&TARGET_BUILD_TUPLE_UNPACK,
     &&TARGET_BUILD_SET_UNPACK,
-    &&_unknown_opcode,
+    &&TARGET_SETUP_ASYNC_WITH,
     &&_unknown_opcode,
     &&_unknown_opcode,
     &&_unknown_opcode,
diff --git a/Python/peephole.c b/Python/peephole.c
--- a/Python/peephole.c
+++ b/Python/peephole.c
@@ -319,6 +319,7 @@
             case SETUP_EXCEPT:
             case SETUP_FINALLY:
             case SETUP_WITH:
+            case SETUP_ASYNC_WITH:
                 j = GETJUMPTGT(code, i);
                 blocks[j] = 1;
                 break;
@@ -620,6 +621,7 @@
             case SETUP_EXCEPT:
             case SETUP_FINALLY:
             case SETUP_WITH:
+            case SETUP_ASYNC_WITH:
                 tgt = GETJUMPTGT(codestr, i);
                 /* Replace JUMP_* to a RETURN into just a RETURN */
                 if (UNCONDITIONAL_JUMP(opcode) &&
@@ -704,6 +706,7 @@
             case SETUP_EXCEPT:
             case SETUP_FINALLY:
             case SETUP_WITH:
+            case SETUP_ASYNC_WITH:
                 j = addrmap[GETARG(codestr, i) + i + 3] - addrmap[i] - 3;
                 SETARG(codestr, i, j);
                 break;
diff --git a/Python/pystate.c b/Python/pystate.c
--- a/Python/pystate.c
+++ b/Python/pystate.c
@@ -212,6 +212,8 @@
         tstate->on_delete = NULL;
         tstate->on_delete_data = NULL;
 
+        tstate->coroutine_wrapper = NULL;
+
         if (init)
             _PyThreadState_Init(tstate);
 
@@ -372,6 +374,8 @@
     tstate->c_tracefunc = NULL;
     Py_CLEAR(tstate->c_profileobj);
     Py_CLEAR(tstate->c_traceobj);
+
+    Py_CLEAR(tstate->coroutine_wrapper);
 }
 
 
diff --git a/Python/symtable.c b/Python/symtable.c
--- a/Python/symtable.c
+++ b/Python/symtable.c
@@ -180,7 +180,7 @@
 static int symtable_visit_params(struct symtable *st, asdl_seq *args);
 static int symtable_visit_argannotations(struct symtable *st, asdl_seq *args);
 static int symtable_implicit_arg(struct symtable *st, int pos);
-static int symtable_visit_annotations(struct symtable *st, stmt_ty s);
+static int symtable_visit_annotations(struct symtable *st, stmt_ty s, arguments_ty, expr_ty);
 static int symtable_visit_withitem(struct symtable *st, withitem_ty item);
 
 
@@ -1147,7 +1147,8 @@
             VISIT_SEQ(st, expr, s->v.FunctionDef.args->defaults);
         if (s->v.FunctionDef.args->kw_defaults)
             VISIT_SEQ_WITH_NULL(st, expr, s->v.FunctionDef.args->kw_defaults);
-        if (!symtable_visit_annotations(st, s))
+        if (!symtable_visit_annotations(st, s, s->v.FunctionDef.args,
+                                        s->v.FunctionDef.returns))
             VISIT_QUIT(st, 0);
         if (s->v.FunctionDef.decorator_list)
             VISIT_SEQ(st, expr, s->v.FunctionDef.decorator_list);
@@ -1315,6 +1316,39 @@
         VISIT_SEQ(st, withitem, s->v.With.items);
         VISIT_SEQ(st, stmt, s->v.With.body);
         break;
+    case AsyncFunctionDef_kind:
+        if (!symtable_add_def(st, s->v.AsyncFunctionDef.name, DEF_LOCAL))
+            VISIT_QUIT(st, 0);
+        if (s->v.AsyncFunctionDef.args->defaults)
+            VISIT_SEQ(st, expr, s->v.AsyncFunctionDef.args->defaults);
+        if (s->v.AsyncFunctionDef.args->kw_defaults)
+            VISIT_SEQ_WITH_NULL(st, expr,
+                                s->v.AsyncFunctionDef.args->kw_defaults);
+        if (!symtable_visit_annotations(st, s, s->v.AsyncFunctionDef.args,
+                                        s->v.AsyncFunctionDef.returns))
+            VISIT_QUIT(st, 0);
+        if (s->v.AsyncFunctionDef.decorator_list)
+            VISIT_SEQ(st, expr, s->v.AsyncFunctionDef.decorator_list);
+        if (!symtable_enter_block(st, s->v.AsyncFunctionDef.name,
+                                  FunctionBlock, (void *)s, s->lineno,
+                                  s->col_offset))
+            VISIT_QUIT(st, 0);
+        VISIT(st, arguments, s->v.AsyncFunctionDef.args);
+        VISIT_SEQ(st, stmt, s->v.AsyncFunctionDef.body);
+        if (!symtable_exit_block(st, s))
+            VISIT_QUIT(st, 0);
+        break;
+    case AsyncWith_kind:
+        VISIT_SEQ(st, withitem, s->v.AsyncWith.items);
+        VISIT_SEQ(st, stmt, s->v.AsyncWith.body);
+        break;
+    case AsyncFor_kind:
+        VISIT(st, expr, s->v.AsyncFor.target);
+        VISIT(st, expr, s->v.AsyncFor.iter);
+        VISIT_SEQ(st, stmt, s->v.AsyncFor.body);
+        if (s->v.AsyncFor.orelse)
+            VISIT_SEQ(st, stmt, s->v.AsyncFor.orelse);
+        break;
     }
     VISIT_QUIT(st, 1);
 }
@@ -1392,6 +1426,10 @@
         VISIT(st, expr, e->v.YieldFrom.value);
         st->st_cur->ste_generator = 1;
         break;
+    case Await_kind:
+        VISIT(st, expr, e->v.Await.value);
+        st->st_cur->ste_generator = 1;
+        break;
     case Compare_kind:
         VISIT(st, expr, e->v.Compare.left);
         VISIT_SEQ(st, expr, e->v.Compare.comparators);
@@ -1492,10 +1530,9 @@
 }
 
 static int
-symtable_visit_annotations(struct symtable *st, stmt_ty s)
+symtable_visit_annotations(struct symtable *st, stmt_ty s,
+                           arguments_ty a, expr_ty returns)
 {
-    arguments_ty a = s->v.FunctionDef.args;
-
     if (a->args && !symtable_visit_argannotations(st, a->args))
         return 0;
     if (a->vararg && a->vararg->annotation)
@@ -1504,7 +1541,7 @@
         VISIT(st, expr, a->kwarg->annotation);
     if (a->kwonlyargs && !symtable_visit_argannotations(st, a->kwonlyargs))
         return 0;
-    if (s->v.FunctionDef.returns)
+    if (returns)
         VISIT(st, expr, s->v.FunctionDef.returns);
     return 1;
 }
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -645,6 +645,49 @@
     return Py_None;
 }
 
+static PyObject *
+sys_set_coroutine_wrapper(PyObject *self, PyObject *wrapper)
+{
+    if (wrapper != Py_None) {
+        if (!PyCallable_Check(wrapper)) {
+            PyErr_Format(PyExc_TypeError,
+                         "callable expected, got %.50s",
+                         Py_TYPE(wrapper)->tp_name);
+            return NULL;
+        }
+
+        PyEval_SetCoroutineWrapper(wrapper);
+    }
+    else
+        PyEval_SetCoroutineWrapper(NULL);
+    Py_INCREF(Py_None);
+    Py_RETURN_NONE;
+}
+
+PyDoc_STRVAR(set_coroutine_wrapper_doc,
+"set_coroutine_wrapper(wrapper)\n\
+\n\
+Set a wrapper for coroutine objects."
+);
+
+static PyObject *
+sys_get_coroutine_wrapper(PyObject *self, PyObject *args)
+{
+    PyObject *wrapper = PyEval_GetCoroutineWrapper();
+    if (wrapper == NULL) {
+        wrapper = Py_None;
+    }
+    Py_INCREF(wrapper);
+    return wrapper;
+}
+
+PyDoc_STRVAR(get_coroutine_wrapper_doc,
+"get_coroutine_wrapper()\n\
+\n\
+Return the wrapper for coroutine objects set by sys.set_coroutine_wrapper."
+);
+
+
 static PyTypeObject Hash_InfoType;
 
 PyDoc_STRVAR(hash_info_doc,
@@ -1215,6 +1258,10 @@
     {"call_tracing", sys_call_tracing, METH_VARARGS, call_tracing_doc},
     {"_debugmallocstats", sys_debugmallocstats, METH_NOARGS,
      debugmallocstats_doc},
+    {"set_coroutine_wrapper", sys_set_coroutine_wrapper, METH_O,
+     set_coroutine_wrapper_doc},
+    {"get_coroutine_wrapper", sys_get_coroutine_wrapper, METH_NOARGS,
+     get_coroutine_wrapper_doc},
     {NULL,              NULL}           /* sentinel */
 };
 
diff --git a/Tools/parser/unparse.py b/Tools/parser/unparse.py
--- a/Tools/parser/unparse.py
+++ b/Tools/parser/unparse.py
@@ -138,6 +138,14 @@
         self.fill("nonlocal ")
         interleave(lambda: self.write(", "), self.write, t.names)
 
+    def _Await(self, t):
+        self.write("(")
+        self.write("await")
+        if t.value:
+            self.write(" ")
+            self.dispatch(t.value)
+        self.write(")")
+
     def _Yield(self, t):
         self.write("(")
         self.write("yield")
@@ -218,11 +226,18 @@
         self.leave()
 
     def _FunctionDef(self, t):
+        self.__FunctionDef_helper(t, "def")
+
+    def _AsyncFunctionDef(self, t):
+        self.__FunctionDef_helper(t, "async def")
+
+    def __FunctionDef_helper(self, t, fill_suffix):
         self.write("\n")
         for deco in t.decorator_list:
             self.fill("@")
             self.dispatch(deco)
-        self.fill("def "+t.name + "(")
+        def_str = fill_suffix+" "+t.name + "("
+        self.fill(def_str)
         self.dispatch(t.args)
         self.write(")")
         if t.returns:
@@ -233,7 +248,13 @@
         self.leave()
 
     def _For(self, t):
-        self.fill("for ")
+        self.__For_helper("for ", t)
+
+    def _AsyncFor(self, t):
+        self.__For_helper("async for ", t)
+
+    def __For_helper(self, fill, t):
+        self.fill(fill)
         self.dispatch(t.target)
         self.write(" in ")
         self.dispatch(t.iter)
@@ -287,6 +308,13 @@
         self.dispatch(t.body)
         self.leave()
 
+    def _AsyncWith(self, t):
+        self.fill("async with ")
+        interleave(lambda: self.write(", "), self.dispatch, t.items)
+        self.enter()
+        self.dispatch(t.body)
+        self.leave()
+
     # expr
     def _Bytes(self, t):
         self.write(repr(t.s))

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list