From 9de0f53a8db3a4d3fa1951ff08aaab392dc7a584 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Wed, 30 Dec 2009 02:37:57 +0100 Subject: Implement yield from C hooks. Get number of multiple results from C frame. Add lj_cont_hook: restores multres and dispatch to static ins. Can use fastcall for lj_dispatch_ins() now. --- src/buildvm_x86.dasc | 29 +- src/buildvm_x86.h | 1799 +++++++++++++++++++++++++------------------------- src/lj_api.c | 37 +- src/lj_dispatch.c | 7 +- src/lj_dispatch.h | 2 +- src/lj_err.c | 2 +- src/lj_frame.h | 4 + src/lj_vm.h | 1 + 8 files changed, 949 insertions(+), 932 deletions(-) (limited to 'src') diff --git a/src/buildvm_x86.dasc b/src/buildvm_x86.dasc index 5ff76a55..952fc9d6 100644 --- a/src/buildvm_x86.dasc +++ b/src/buildvm_x86.dasc @@ -618,13 +618,11 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) |->vm_unwind_c: // Unwind C stack, return from vm_pcall. | // (void *cframe, int errcode) |.if X64 - | and CARG1, CFRAME_RAWMASK | mov eax, CARG2d // Error return status for vm_pcall. | mov rsp, CARG1 |.else | mov ecx, [esp+4] | mov eax, [esp+8] // Error return status for vm_pcall. - | and ecx, CFRAME_RAWMASK | mov esp, ecx |.endif | mov L:RB, SAVE_L @@ -2618,24 +2616,15 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) | test RDL, LUA_MASKLINE | jz >5 |1: - |.if X64 - | mov L:RB, SAVE_L - | mov L:RB->base, BASE // Caveat: CARG2d/CARG3d may be BASE. - | mov CARG3d, NRESULTS // Dynamic top for *M instructions. - | mov CARG2d, PC - | mov CARG1d, L:RB - |.else | mov L:RB, SAVE_L - | mov RD, NRESULTS // Dynamic top for *M instructions. - | mov ARG3, RD | mov L:RB->base, BASE - | mov ARG2, PC - | mov ARG1, L:RB - |.endif + | mov FCARG2, PC // Caveat: FCARG2 == BASE + | mov FCARG1, L:RB | // SAVE_PC must hold the _previous_ PC. The callee updates it with PC. - | call extern lj_dispatch_ins // (lua_State *L, BCIns *pc, int nres) - |4: + | call extern lj_dispatch_ins@8 // (lua_State *L, BCIns *pc) + |3: | mov BASE, L:RB->base + |4: | movzx RA, PC_RA |5: | movzx OP, PC_OP @@ -2646,6 +2635,12 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) | jmp aword [DISPATCH+OP*4+GG_DISP_STATIC*4] // Re-dispatch to static ins. |.endif | + |->cont_hook: // Continue from hook yield. + | add PC, 4 + | mov RA, [RB-24] + | mov NRESULTS, RA // Restore NRESULTS for *M ins. + | jmp <4 + | |->vm_hotloop: // Hot loop counter underflow. #if LJ_HASJIT |.if X64 @@ -2658,7 +2653,7 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) | mov [DISPATCH+DISPATCH_J(L)], L:RB | mov SAVE_PC, PC | call extern lj_trace_hot@8 // (jit_State *J, const BCIns *pc) - | jmp <4 + | jmp <3 |.endif #endif | diff --git a/src/buildvm_x86.h b/src/buildvm_x86.h index c7eb42e3..0affad6a 100644 --- a/src/buildvm_x86.h +++ b/src/buildvm_x86.h @@ -12,7 +12,7 @@ #define DASM_SECTION_CODE_OP 0 #define DASM_SECTION_CODE_SUB 1 #define DASM_MAXSECTION 2 -static const unsigned char build_actionlist[15184] = { +static const unsigned char build_actionlist[15191] = { 254,1,248,10,137,202,139,173,233,137,114,252,252,15,182,141,233,139,181,233, 139,189,233,139,108,36,48,141,12,202,141,68,194,252,252,59,141,233,15,135, 244,11,248,9,189,237,248,1,137,40,137,104,8,131,192,16,57,200,15,130,244, @@ -40,393 +40,393 @@ static const unsigned char build_actionlist[15184] = { 15,135,244,254,199,66,252,252,237,131,194,8,131,192,1,252,233,244,4,248,7, 133,201,15,132,244,5,41,193,141,20,202,252,233,244,5,248,8,137,149,233,255, 137,68,36,20,137,202,137,252,233,232,251,1,0,139,149,233,252,233,244,3,248, - 23,139,76,36,4,139,68,36,8,129,225,239,137,204,139,108,36,48,139,173,233, - 199,133,233,237,252,233,244,22,248,24,139,76,36,4,129,225,239,137,204,139, - 108,36,48,185,252,248,252,255,252,255,252,255,184,237,139,149,233,139,157, - 233,129,195,239,139,114,252,252,199,66,252,252,237,199,131,233,237,252,233, - 244,16,248,20,255,252,247,198,237,15,132,244,25,131,230,252,248,41,252,242, - 141,76,49,252,248,139,114,252,252,199,68,10,4,237,252,233,244,16,248,15,186, - 237,252,233,244,247,248,13,131,232,8,137,202,137,252,249,139,181,233,139, - 108,36,48,248,11,131,232,4,41,209,193,252,233,3,131,198,4,137,149,233,137, - 133,233,137,116,36,24,137,202,248,1,137,252,233,232,251,1,0,139,141,233,139, - 133,233,139,105,252,248,139,113,252,252,41,200,193,232,3,131,192,1,252,255, - 165,233,248,26,255,85,87,86,83,131,252,236,28,139,108,36,48,139,76,36,52, - 190,237,49,192,141,188,253,36,233,139,157,233,129,195,239,137,189,233,137, - 68,36,24,137,68,36,52,56,133,233,15,132,244,249,199,131,233,237,136,133,233, - 139,149,233,139,133,233,41,200,193,232,3,131,192,1,41,209,139,114,252,252, - 137,68,36,20,252,247,198,237,15,132,244,17,252,233,244,18,248,27,85,87,86, - 83,131,252,236,28,190,237,255,252,233,244,247,248,28,85,87,86,83,131,252, - 236,28,190,237,248,1,139,108,36,48,139,76,36,52,248,2,139,189,233,137,124, - 36,52,137,108,36,24,137,165,233,139,157,233,129,195,239,248,3,199,131,233, - 237,139,149,233,1,206,41,214,139,133,233,41,200,193,232,3,131,192,1,139,105, - 252,248,129,121,253,252,252,239,15,133,244,29,252,255,165,233,248,30,255, - 85,87,86,83,131,252,236,28,139,108,36,48,139,68,36,56,139,76,36,52,139,84, - 36,60,137,108,36,24,139,189,233,43,189,233,199,68,36,60,0,0,0,0,137,124,36, - 56,137,68,36,8,137,76,36,4,137,44,36,139,189,233,137,124,36,52,137,165,233, - 252,255,210,133,192,15,132,244,21,137,193,190,237,252,233,244,2,248,25,1, - 209,131,230,252,248,137,213,41,252,242,199,68,193,252,252,237,137,200,139, - 117,252,244,139,77,252,240,139,122,252,248,139,191,233,139,191,233,252,255, - 225,248,31,15,182,78,252,255,131,252,237,16,141,12,202,41,252,233,15,132, - 244,32,252,247,217,193,252,233,3,137,76,36,8,139,72,4,139,0,137,77,4,137, - 69,0,137,108,36,4,252,233,244,33,248,34,137,68,36,16,199,68,36,20,237,255, - 141,68,36,16,128,126,252,252,235,15,133,244,247,141,139,233,137,41,199,65, - 4,237,137,205,252,233,244,248,248,35,15,182,70,252,254,255,252,242,15,42, - 192,252,242,15,17,68,36,16,255,137,68,36,12,219,68,36,12,221,92,36,16,255, - 141,68,36,16,252,233,244,247,248,36,15,182,70,252,254,141,4,194,248,1,15, - 182,110,252,255,141,44,252,234,248,2,137,108,36,4,139,108,36,48,137,68,36, - 8,137,44,36,137,149,233,137,116,36,24,232,251,1,1,139,149,233,133,192,15, - 132,244,249,248,32,15,182,78,252,253,139,104,4,139,0,137,108,202,4,137,4, - 202,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,3, - 139,141,233,137,113,252,244,141,177,233,41,214,139,105,252,248,184,3,0,0, - 0,252,255,165,233,248,37,137,68,36,16,199,68,36,20,237,141,68,36,16,128,126, - 252,252,235,15,133,244,247,141,139,233,255,137,41,199,65,4,237,137,205,252, - 233,244,248,248,38,15,182,70,252,254,255,141,68,36,16,252,233,244,247,248, - 39,15,182,70,252,254,141,4,194,248,1,15,182,110,252,255,141,44,252,234,248, - 2,137,108,36,4,139,108,36,48,137,68,36,8,137,44,36,137,149,233,137,116,36, - 24,232,251,1,2,139,149,233,133,192,15,132,244,249,15,182,78,252,253,139,108, - 202,4,139,12,202,137,104,4,137,8,248,40,139,6,15,182,204,15,182,232,131,198, - 4,193,232,16,252,255,36,171,248,3,139,141,233,137,113,252,244,15,182,70,252, - 253,139,108,194,4,139,4,194,137,105,20,137,65,16,141,177,233,41,214,139,105, - 252,248,184,4,0,0,0,252,255,165,233,248,41,15,182,110,252,252,141,4,194,141, - 12,202,137,108,36,12,139,108,36,48,137,68,36,8,137,76,36,4,137,44,36,137, - 149,233,137,116,36,24,232,251,1,3,248,3,139,149,233,131,252,248,1,15,135, - 244,42,248,4,255,141,118,4,15,130,244,252,248,5,15,183,70,252,254,141,180, - 253,134,233,248,6,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255, - 36,171,248,43,131,198,4,129,120,253,4,239,15,130,244,5,252,233,244,6,248, - 44,129,120,253,4,239,252,233,244,4,248,45,131,252,238,4,137,108,36,12,139, + 23,139,76,36,4,139,68,36,8,137,204,139,108,36,48,139,173,233,199,133,233, + 237,252,233,244,22,248,24,139,76,36,4,129,225,239,137,204,139,108,36,48,185, + 252,248,252,255,252,255,252,255,184,237,139,149,233,139,157,233,129,195,239, + 139,114,252,252,199,66,252,252,237,199,131,233,237,252,233,244,16,248,20, + 255,252,247,198,237,15,132,244,25,131,230,252,248,41,252,242,141,76,49,252, + 248,139,114,252,252,199,68,10,4,237,252,233,244,16,248,15,186,237,252,233, + 244,247,248,13,131,232,8,137,202,137,252,249,139,181,233,139,108,36,48,248, + 11,131,232,4,41,209,193,252,233,3,131,198,4,137,149,233,137,133,233,137,116, + 36,24,137,202,248,1,137,252,233,232,251,1,0,139,141,233,139,133,233,139,105, + 252,248,139,113,252,252,41,200,193,232,3,131,192,1,252,255,165,233,248,26, + 255,85,87,86,83,131,252,236,28,139,108,36,48,139,76,36,52,190,237,49,192, + 141,188,253,36,233,139,157,233,129,195,239,137,189,233,137,68,36,24,137,68, + 36,52,56,133,233,15,132,244,249,199,131,233,237,136,133,233,139,149,233,139, + 133,233,41,200,193,232,3,131,192,1,41,209,139,114,252,252,137,68,36,20,252, + 247,198,237,15,132,244,17,252,233,244,18,248,27,85,87,86,83,131,252,236,28, + 190,237,255,252,233,244,247,248,28,85,87,86,83,131,252,236,28,190,237,248, + 1,139,108,36,48,139,76,36,52,248,2,139,189,233,137,124,36,52,137,108,36,24, + 137,165,233,139,157,233,129,195,239,248,3,199,131,233,237,139,149,233,1,206, + 41,214,139,133,233,41,200,193,232,3,131,192,1,139,105,252,248,129,121,253, + 252,252,239,15,133,244,29,252,255,165,233,248,30,255,85,87,86,83,131,252, + 236,28,139,108,36,48,139,68,36,56,139,76,36,52,139,84,36,60,137,108,36,24, + 139,189,233,43,189,233,199,68,36,60,0,0,0,0,137,124,36,56,137,68,36,8,137, + 76,36,4,137,44,36,139,189,233,137,124,36,52,137,165,233,252,255,210,133,192, + 15,132,244,21,137,193,190,237,252,233,244,2,248,25,1,209,131,230,252,248, + 137,213,41,252,242,199,68,193,252,252,237,137,200,139,117,252,244,139,77, + 252,240,139,122,252,248,139,191,233,139,191,233,252,255,225,248,31,15,182, + 78,252,255,131,252,237,16,141,12,202,41,252,233,15,132,244,32,252,247,217, + 193,252,233,3,137,76,36,8,139,72,4,139,0,137,77,4,137,69,0,137,108,36,4,252, + 233,244,33,248,34,137,68,36,16,199,68,36,20,237,255,141,68,36,16,128,126, + 252,252,235,15,133,244,247,141,139,233,137,41,199,65,4,237,137,205,252,233, + 244,248,248,35,15,182,70,252,254,255,252,242,15,42,192,252,242,15,17,68,36, + 16,255,137,68,36,12,219,68,36,12,221,92,36,16,255,141,68,36,16,252,233,244, + 247,248,36,15,182,70,252,254,141,4,194,248,1,15,182,110,252,255,141,44,252, + 234,248,2,137,108,36,4,139,108,36,48,137,68,36,8,137,44,36,137,149,233,137, + 116,36,24,232,251,1,1,139,149,233,133,192,15,132,244,249,248,32,15,182,78, + 252,253,139,104,4,139,0,137,108,202,4,137,4,202,139,6,15,182,204,15,182,232, + 131,198,4,193,232,16,252,255,36,171,248,3,139,141,233,137,113,252,244,141, + 177,233,41,214,139,105,252,248,184,3,0,0,0,252,255,165,233,248,37,137,68, + 36,16,199,68,36,20,237,141,68,36,16,128,126,252,252,235,15,133,244,247,141, + 139,233,255,137,41,199,65,4,237,137,205,252,233,244,248,248,38,15,182,70, + 252,254,255,141,68,36,16,252,233,244,247,248,39,15,182,70,252,254,141,4,194, + 248,1,15,182,110,252,255,141,44,252,234,248,2,137,108,36,4,139,108,36,48, + 137,68,36,8,137,44,36,137,149,233,137,116,36,24,232,251,1,2,139,149,233,133, + 192,15,132,244,249,15,182,78,252,253,139,108,202,4,139,12,202,137,104,4,137, + 8,248,40,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171, + 248,3,139,141,233,137,113,252,244,15,182,70,252,253,139,108,194,4,139,4,194, + 137,105,20,137,65,16,141,177,233,41,214,139,105,252,248,184,4,0,0,0,252,255, + 165,233,248,41,15,182,110,252,252,141,4,194,141,12,202,137,108,36,12,139, 108,36,48,137,68,36,8,137,76,36,4,137,44,36,137,149,233,137,116,36,24,232, - 251,1,4,252,233,244,3,248,46,255,141,4,199,252,233,244,247,248,47,141,4,199, - 141,44,252,234,149,252,233,244,248,248,48,141,4,194,137,197,252,233,244,248, - 248,49,141,4,194,248,1,141,44,252,234,248,2,141,12,202,137,108,36,8,139,108, - 36,48,137,68,36,12,15,182,70,252,252,137,76,36,4,137,68,36,16,137,44,36,137, - 149,233,137,116,36,24,232,251,1,5,139,149,233,133,192,15,132,244,40,248,42, - 137,193,41,208,137,113,252,244,141,176,233,139,105,252,248,184,3,0,0,0,129, - 121,253,252,252,239,15,133,244,29,255,252,255,165,233,248,50,139,108,36,48, - 137,149,233,141,20,194,137,252,233,137,116,36,24,232,251,1,6,139,149,233, - 252,233,244,42,248,29,137,76,36,20,137,68,36,16,131,252,233,8,141,4,193,139, - 108,36,48,137,76,36,4,137,68,36,8,137,44,36,137,149,233,137,116,36,24,232, - 251,1,7,139,149,233,139,76,36,20,139,68,36,16,139,105,252,248,131,192,1,57, - 215,15,132,244,51,252,255,165,233,248,52,139,108,36,48,137,149,233,137,202, - 137,252,233,137,116,36,24,232,251,1,8,139,149,233,139,70,252,252,15,182,204, - 15,182,232,193,232,16,252,255,164,253,171,233,248,53,129,252,248,239,15,130, - 244,54,255,139,105,4,129,252,253,239,15,131,244,54,137,68,36,20,137,105,252, - 252,139,41,137,105,252,248,131,232,2,15,132,244,248,137,76,36,16,248,1,131, - 193,8,139,105,4,137,105,252,252,139,41,137,105,252,248,131,232,1,15,133,244, - 1,139,76,36,16,248,2,139,68,36,20,252,233,244,55,248,56,129,252,248,239,15, - 130,244,54,139,105,4,184,237,252,247,213,57,232,255,15,71,197,255,15,134, - 244,247,137,232,248,1,255,139,105,252,248,139,132,253,197,233,199,65,252, - 252,237,137,65,252,248,252,233,244,57,248,58,129,252,248,239,15,130,244,54, - 139,105,4,129,252,253,239,15,133,244,252,248,1,139,41,139,173,233,248,2,133, - 252,237,199,65,252,252,237,15,132,244,57,139,65,252,248,139,131,233,199,65, - 252,252,237,137,105,252,248,137,76,36,16,139,141,233,255,35,136,233,105,201, - 239,3,141,233,248,3,129,185,233,239,15,133,244,250,57,129,233,15,132,244, - 251,248,4,139,137,233,133,201,15,133,244,3,252,233,244,57,248,5,139,105,4, - 129,252,253,239,15,132,244,57,255,139,1,139,76,36,16,137,105,252,252,137, - 65,252,248,252,233,244,57,248,6,129,252,253,239,15,132,244,1,129,252,253, - 239,15,135,244,253,189,237,248,7,252,247,213,139,172,253,171,233,252,233, - 244,2,248,59,129,252,248,239,15,130,244,54,129,121,253,4,239,15,133,244,54, - 255,139,41,131,189,233,0,15,133,244,54,129,121,253,12,239,15,133,244,54,139, - 65,8,137,133,233,199,65,252,252,237,137,105,252,248,252,246,133,233,235,15, - 132,244,247,128,165,233,235,139,131,233,137,171,233,137,133,233,248,1,252, - 233,244,57,248,60,255,129,252,248,239,15,130,244,54,129,121,253,4,239,15, - 133,244,54,139,1,139,108,36,48,137,68,36,4,137,44,36,137,205,137,84,36,16, - 131,193,8,137,76,36,8,232,251,1,9,137,252,233,139,84,36,16,139,40,139,64, - 4,137,105,252,248,137,65,252,252,252,233,244,57,248,61,129,252,248,239,15, - 133,244,54,129,121,253,4,239,15,135,244,54,255,252,242,15,16,1,252,233,244, - 62,255,221,1,252,233,244,63,255,248,64,129,252,248,239,15,130,244,54,129, - 121,253,4,239,15,133,244,249,139,1,248,2,199,65,252,252,237,137,65,252,248, - 252,233,244,57,248,3,129,121,253,4,239,15,135,244,54,131,187,233,0,15,133, - 244,54,139,171,233,59,171,233,255,15,130,244,247,232,244,65,248,1,139,108, - 36,48,137,141,233,137,113,252,252,137,116,36,24,137,84,36,16,137,202,137, - 252,233,232,251,1,10,139,141,233,139,84,36,16,252,233,244,2,248,66,129,252, - 248,239,15,130,244,54,15,132,244,248,248,1,129,121,253,4,239,15,133,244,54, - 139,41,137,108,36,4,139,108,36,48,137,44,36,137,141,233,255,137,113,252,252, - 137,84,36,16,131,193,8,137,76,36,8,137,116,36,24,232,251,1,11,139,141,233, - 139,84,36,16,133,192,15,132,244,249,139,105,8,139,65,12,137,105,252,248,137, - 65,252,252,139,105,16,139,65,20,137,41,137,65,4,248,67,184,237,252,233,244, - 68,248,2,199,65,12,237,252,233,244,1,248,3,199,65,252,252,237,252,233,244, - 57,248,69,129,252,248,239,15,130,244,54,129,121,253,4,239,255,15,133,244, - 54,139,133,233,199,65,252,252,237,137,65,252,248,199,65,12,237,184,237,252, - 233,244,68,248,70,129,252,248,239,15,130,244,54,129,121,253,4,239,15,133, - 244,54,129,121,253,12,239,15,135,244,54,255,252,242,15,16,65,8,189,0,0,252, - 240,63,102,15,110,205,102,15,112,201,81,252,242,15,88,193,252,242,15,45,192, - 252,242,15,17,65,252,248,255,221,65,8,217,232,222,193,219,20,36,221,89,252, - 248,139,4,36,255,139,41,59,133,233,15,131,244,248,193,224,3,3,133,233,248, - 1,129,120,253,4,239,15,132,244,71,139,40,139,64,4,137,41,137,65,4,252,233, - 244,67,248,2,131,189,233,0,15,132,244,71,137,84,36,16,135,205,137,194,232, - 251,1,12,137,252,233,139,84,36,16,133,192,15,133,244,1,248,71,184,237,252, - 233,244,68,248,72,255,129,252,248,239,15,130,244,54,129,121,253,4,239,15, - 133,244,54,139,133,233,199,65,252,252,237,137,65,252,248,255,15,87,192,252, - 242,15,17,65,8,255,217,252,238,221,89,8,255,184,237,252,233,244,68,248,73, - 129,252,248,239,15,130,244,54,137,113,252,252,190,237,137,202,131,193,8,131, - 232,1,139,105,252,248,248,1,252,246,131,233,235,15,133,244,249,248,2,129, - 121,253,252,252,239,15,133,244,29,252,255,165,233,248,3,131,198,1,252,233, - 244,2,248,74,255,129,252,248,239,15,130,244,54,129,121,253,12,239,15,133, - 244,54,137,113,252,252,139,105,4,137,105,12,199,65,4,237,139,41,139,113,8, - 137,105,8,137,49,190,237,137,202,129,193,239,131,232,2,252,233,244,1,248, - 9,139,116,36,24,252,233,244,54,248,75,129,252,248,239,15,130,244,54,139,41, - 137,113,252,252,137,116,36,24,137,44,36,129,121,253,4,239,15,133,244,9,255, - 131,189,233,0,15,133,244,9,128,189,233,235,15,135,244,9,139,181,233,137,116, - 36,4,15,132,244,247,59,181,233,15,132,244,9,248,1,141,116,198,252,240,59, - 181,233,15,135,244,9,137,181,233,139,108,36,48,137,141,233,131,193,8,137, - 141,233,255,139,108,36,4,141,76,193,232,41,252,241,57,252,238,15,132,244, - 249,248,2,139,68,14,4,137,70,252,252,139,4,14,137,70,252,248,131,252,238, - 8,57,252,238,15,133,244,2,248,3,49,201,137,76,36,12,137,76,36,8,232,244,26, - 199,131,233,237,139,108,36,48,139,52,36,139,149,233,129,252,248,239,15,135, - 244,254,248,4,139,142,233,139,190,233,137,142,233,137,252,254,41,206,15,132, - 244,252,255,141,4,50,193,252,238,3,59,133,233,15,135,244,255,137,213,41,205, - 248,5,139,1,137,4,41,139,65,4,137,68,41,4,131,193,8,57,252,249,15,133,244, - 5,248,6,141,70,2,199,66,252,252,237,248,7,139,116,36,24,137,68,36,20,185, - 252,248,252,255,252,255,252,255,252,247,198,237,15,132,244,17,252,233,244, - 18,248,8,199,66,252,252,237,139,142,233,131,252,233,8,137,142,233,139,1,137, - 2,139,65,4,137,66,4,184,237,252,233,244,7,248,9,255,139,12,36,137,185,233, - 137,252,242,137,252,233,232,251,1,0,139,149,233,252,233,244,4,248,9,139,116, - 36,24,252,233,244,54,248,76,139,173,233,137,113,252,252,137,116,36,24,137, - 44,36,131,189,233,0,15,133,244,9,128,189,233,235,15,135,244,9,139,181,233, - 137,116,36,4,15,132,244,247,59,181,233,255,15,132,244,9,248,1,141,116,198, - 252,248,59,181,233,15,135,244,9,137,181,233,139,108,36,48,137,141,233,137, - 141,233,139,108,36,4,141,76,193,252,240,41,252,241,57,252,238,15,132,244, - 249,248,2,139,68,14,4,137,70,252,252,139,4,14,137,70,252,248,131,252,238, - 8,57,252,238,15,133,244,2,248,3,49,201,137,76,36,12,137,76,36,8,232,244,26, - 199,131,233,237,139,108,36,48,139,52,36,139,149,233,255,129,252,248,239,15, - 135,244,254,248,4,139,142,233,139,190,233,137,142,233,137,252,254,41,206, - 15,132,244,252,141,4,50,193,252,238,3,59,133,233,15,135,244,255,137,213,41, - 205,248,5,139,1,137,4,41,139,65,4,137,68,41,4,131,193,8,57,252,249,15,133, - 244,5,248,6,141,70,1,248,7,139,116,36,24,137,68,36,20,49,201,252,247,198, - 237,15,132,244,17,255,252,233,244,18,248,8,137,252,242,137,252,233,232,251, - 1,13,248,9,139,12,36,137,185,233,137,252,242,137,252,233,232,251,1,0,139, - 149,233,252,233,244,4,248,77,139,108,36,48,137,113,252,252,252,247,133,233, - 237,15,132,244,54,137,141,233,141,68,193,252,248,137,133,233,49,192,137,133, - 233,176,235,136,133,233,252,233,244,22,255,248,63,221,89,252,248,252,233, - 244,57,248,78,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244, - 54,252,242,15,16,1,102,15,252,239,201,102,15,118,201,102,15,115,209,1,15, - 84,193,248,62,252,242,15,17,65,252,248,255,248,78,129,252,248,239,15,130, - 244,54,129,121,253,4,239,15,135,244,54,221,1,217,225,248,62,248,63,221,89, - 252,248,255,248,57,184,237,248,68,137,68,36,20,248,55,252,247,198,237,15, - 133,244,253,248,5,56,70,252,255,15,135,244,252,139,6,15,182,204,15,182,232, - 131,198,4,193,232,16,252,255,36,171,248,6,199,68,193,252,244,237,131,192, - 1,252,233,244,5,248,7,137,202,185,252,248,252,255,252,255,252,255,252,233, - 244,18,255,248,79,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135, - 244,54,252,242,15,81,1,252,233,244,62,248,80,129,252,248,239,15,130,244,54, - 129,121,253,4,239,15,135,244,54,252,242,15,16,1,232,244,81,252,233,244,62, - 248,82,255,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54, - 252,242,15,16,1,232,244,83,252,233,244,62,255,248,79,129,252,248,239,15,130, - 244,54,129,121,253,4,239,15,135,244,54,221,1,217,252,250,252,233,244,63,248, - 80,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,232, - 244,81,252,233,244,63,248,82,255,129,252,248,239,15,130,244,54,129,121,253, - 4,239,15,135,244,54,221,1,232,244,83,252,233,244,63,255,248,84,129,252,248, - 239,15,130,244,54,129,121,253,4,239,15,135,244,54,217,252,237,221,1,217,252, - 241,252,233,244,63,248,85,129,252,248,239,15,130,244,54,129,121,253,4,239, - 15,135,244,54,217,252,236,221,1,217,252,241,252,233,244,63,248,86,129,252, - 248,239,255,15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,232,244,87, - 252,233,244,63,248,88,129,252,248,239,15,130,244,54,129,121,253,4,239,15, - 135,244,54,221,1,217,252,254,252,233,244,63,248,89,129,252,248,239,255,15, - 130,244,54,129,121,253,4,239,15,135,244,54,221,1,217,252,255,252,233,244, - 63,248,90,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221, - 1,217,252,242,221,216,252,233,244,63,248,91,129,252,248,239,15,130,244,54, - 255,129,121,253,4,239,15,135,244,54,221,1,217,192,216,200,217,232,222,225, - 217,252,250,217,252,243,252,233,244,63,248,92,129,252,248,239,15,130,244, - 54,129,121,253,4,239,15,135,244,54,221,1,217,192,216,200,217,232,222,225, - 217,252,250,217,201,217,252,243,252,233,244,63,248,93,129,252,248,239,15, - 130,244,54,129,121,253,4,239,15,135,244,54,255,221,1,217,232,217,252,243, - 252,233,244,63,255,248,94,129,252,248,239,15,130,244,54,129,121,253,4,239, - 15,135,244,54,252,242,15,16,1,252,242,15,17,4,36,255,248,94,129,252,248,239, - 15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,221,28,36,255,137,76, - 36,16,137,213,232,251,1,14,139,76,36,16,137,252,234,252,233,244,63,255,248, - 95,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,252,242, - 15,16,1,252,242,15,17,4,36,255,248,95,129,252,248,239,15,130,244,54,129,121, + 251,1,3,248,3,139,149,233,131,252,248,1,15,135,244,42,248,4,255,141,118,4, + 15,130,244,252,248,5,15,183,70,252,254,141,180,253,134,233,248,6,139,6,15, + 182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,43,131,198,4,129, + 120,253,4,239,15,130,244,5,252,233,244,6,248,44,129,120,253,4,239,252,233, + 244,4,248,45,131,252,238,4,137,108,36,12,139,108,36,48,137,68,36,8,137,76, + 36,4,137,44,36,137,149,233,137,116,36,24,232,251,1,4,252,233,244,3,248,46, + 255,141,4,199,252,233,244,247,248,47,141,4,199,141,44,252,234,149,252,233, + 244,248,248,48,141,4,194,137,197,252,233,244,248,248,49,141,4,194,248,1,141, + 44,252,234,248,2,141,12,202,137,108,36,8,139,108,36,48,137,68,36,12,15,182, + 70,252,252,137,76,36,4,137,68,36,16,137,44,36,137,149,233,137,116,36,24,232, + 251,1,5,139,149,233,133,192,15,132,244,40,248,42,137,193,41,208,137,113,252, + 244,141,176,233,139,105,252,248,184,3,0,0,0,129,121,253,252,252,239,15,133, + 244,29,255,252,255,165,233,248,50,139,108,36,48,137,149,233,141,20,194,137, + 252,233,137,116,36,24,232,251,1,6,139,149,233,252,233,244,42,248,29,137,76, + 36,20,137,68,36,16,131,252,233,8,141,4,193,139,108,36,48,137,76,36,4,137, + 68,36,8,137,44,36,137,149,233,137,116,36,24,232,251,1,7,139,149,233,139,76, + 36,20,139,68,36,16,139,105,252,248,131,192,1,57,215,15,132,244,51,252,255, + 165,233,248,52,139,108,36,48,137,149,233,137,202,137,252,233,137,116,36,24, + 232,251,1,8,139,149,233,139,70,252,252,15,182,204,15,182,232,193,232,16,252, + 255,164,253,171,233,248,53,129,252,248,239,15,130,244,54,255,139,105,4,129, + 252,253,239,15,131,244,54,137,68,36,20,137,105,252,252,139,41,137,105,252, + 248,131,232,2,15,132,244,248,137,76,36,16,248,1,131,193,8,139,105,4,137,105, + 252,252,139,41,137,105,252,248,131,232,1,15,133,244,1,139,76,36,16,248,2, + 139,68,36,20,252,233,244,55,248,56,129,252,248,239,15,130,244,54,139,105, + 4,184,237,252,247,213,57,232,255,15,71,197,255,15,134,244,247,137,232,248, + 1,255,139,105,252,248,139,132,253,197,233,199,65,252,252,237,137,65,252,248, + 252,233,244,57,248,58,129,252,248,239,15,130,244,54,139,105,4,129,252,253, + 239,15,133,244,252,248,1,139,41,139,173,233,248,2,133,252,237,199,65,252, + 252,237,15,132,244,57,139,65,252,248,139,131,233,199,65,252,252,237,137,105, + 252,248,137,76,36,16,139,141,233,255,35,136,233,105,201,239,3,141,233,248, + 3,129,185,233,239,15,133,244,250,57,129,233,15,132,244,251,248,4,139,137, + 233,133,201,15,133,244,3,252,233,244,57,248,5,139,105,4,129,252,253,239,15, + 132,244,57,255,139,1,139,76,36,16,137,105,252,252,137,65,252,248,252,233, + 244,57,248,6,129,252,253,239,15,132,244,1,129,252,253,239,15,135,244,253, + 189,237,248,7,252,247,213,139,172,253,171,233,252,233,244,2,248,59,129,252, + 248,239,15,130,244,54,129,121,253,4,239,15,133,244,54,255,139,41,131,189, + 233,0,15,133,244,54,129,121,253,12,239,15,133,244,54,139,65,8,137,133,233, + 199,65,252,252,237,137,105,252,248,252,246,133,233,235,15,132,244,247,128, + 165,233,235,139,131,233,137,171,233,137,133,233,248,1,252,233,244,57,248, + 60,255,129,252,248,239,15,130,244,54,129,121,253,4,239,15,133,244,54,139, + 1,139,108,36,48,137,68,36,4,137,44,36,137,205,137,84,36,16,131,193,8,137, + 76,36,8,232,251,1,9,137,252,233,139,84,36,16,139,40,139,64,4,137,105,252, + 248,137,65,252,252,252,233,244,57,248,61,129,252,248,239,15,133,244,54,129, + 121,253,4,239,15,135,244,54,255,252,242,15,16,1,252,233,244,62,255,221,1, + 252,233,244,63,255,248,64,129,252,248,239,15,130,244,54,129,121,253,4,239, + 15,133,244,249,139,1,248,2,199,65,252,252,237,137,65,252,248,252,233,244, + 57,248,3,129,121,253,4,239,15,135,244,54,131,187,233,0,15,133,244,54,139, + 171,233,59,171,233,255,15,130,244,247,232,244,65,248,1,139,108,36,48,137, + 141,233,137,113,252,252,137,116,36,24,137,84,36,16,137,202,137,252,233,232, + 251,1,10,139,141,233,139,84,36,16,252,233,244,2,248,66,129,252,248,239,15, + 130,244,54,15,132,244,248,248,1,129,121,253,4,239,15,133,244,54,139,41,137, + 108,36,4,139,108,36,48,137,44,36,137,141,233,255,137,113,252,252,137,84,36, + 16,131,193,8,137,76,36,8,137,116,36,24,232,251,1,11,139,141,233,139,84,36, + 16,133,192,15,132,244,249,139,105,8,139,65,12,137,105,252,248,137,65,252, + 252,139,105,16,139,65,20,137,41,137,65,4,248,67,184,237,252,233,244,68,248, + 2,199,65,12,237,252,233,244,1,248,3,199,65,252,252,237,252,233,244,57,248, + 69,129,252,248,239,15,130,244,54,129,121,253,4,239,255,15,133,244,54,139, + 133,233,199,65,252,252,237,137,65,252,248,199,65,12,237,184,237,252,233,244, + 68,248,70,129,252,248,239,15,130,244,54,129,121,253,4,239,15,133,244,54,129, + 121,253,12,239,15,135,244,54,255,252,242,15,16,65,8,189,0,0,252,240,63,102, + 15,110,205,102,15,112,201,81,252,242,15,88,193,252,242,15,45,192,252,242, + 15,17,65,252,248,255,221,65,8,217,232,222,193,219,20,36,221,89,252,248,139, + 4,36,255,139,41,59,133,233,15,131,244,248,193,224,3,3,133,233,248,1,129,120, + 253,4,239,15,132,244,71,139,40,139,64,4,137,41,137,65,4,252,233,244,67,248, + 2,131,189,233,0,15,132,244,71,137,84,36,16,135,205,137,194,232,251,1,12,137, + 252,233,139,84,36,16,133,192,15,133,244,1,248,71,184,237,252,233,244,68,248, + 72,255,129,252,248,239,15,130,244,54,129,121,253,4,239,15,133,244,54,139, + 133,233,199,65,252,252,237,137,65,252,248,255,15,87,192,252,242,15,17,65, + 8,255,217,252,238,221,89,8,255,184,237,252,233,244,68,248,73,129,252,248, + 239,15,130,244,54,137,113,252,252,190,237,137,202,131,193,8,131,232,1,139, + 105,252,248,248,1,252,246,131,233,235,15,133,244,249,248,2,129,121,253,252, + 252,239,15,133,244,29,252,255,165,233,248,3,131,198,1,252,233,244,2,248,74, + 255,129,252,248,239,15,130,244,54,129,121,253,12,239,15,133,244,54,137,113, + 252,252,139,105,4,137,105,12,199,65,4,237,139,41,139,113,8,137,105,8,137, + 49,190,237,137,202,129,193,239,131,232,2,252,233,244,1,248,9,139,116,36,24, + 252,233,244,54,248,75,129,252,248,239,15,130,244,54,139,41,137,113,252,252, + 137,116,36,24,137,44,36,129,121,253,4,239,15,133,244,9,255,131,189,233,0, + 15,133,244,9,128,189,233,235,15,135,244,9,139,181,233,137,116,36,4,15,132, + 244,247,59,181,233,15,132,244,9,248,1,141,116,198,252,240,59,181,233,15,135, + 244,9,137,181,233,139,108,36,48,137,141,233,131,193,8,137,141,233,255,139, + 108,36,4,141,76,193,232,41,252,241,57,252,238,15,132,244,249,248,2,139,68, + 14,4,137,70,252,252,139,4,14,137,70,252,248,131,252,238,8,57,252,238,15,133, + 244,2,248,3,49,201,137,76,36,12,137,76,36,8,232,244,26,199,131,233,237,139, + 108,36,48,139,52,36,139,149,233,129,252,248,239,15,135,244,254,248,4,139, + 142,233,139,190,233,137,142,233,137,252,254,41,206,15,132,244,252,255,141, + 4,50,193,252,238,3,59,133,233,15,135,244,255,137,213,41,205,248,5,139,1,137, + 4,41,139,65,4,137,68,41,4,131,193,8,57,252,249,15,133,244,5,248,6,141,70, + 2,199,66,252,252,237,248,7,139,116,36,24,137,68,36,20,185,252,248,252,255, + 252,255,252,255,252,247,198,237,15,132,244,17,252,233,244,18,248,8,199,66, + 252,252,237,139,142,233,131,252,233,8,137,142,233,139,1,137,2,139,65,4,137, + 66,4,184,237,252,233,244,7,248,9,255,139,12,36,137,185,233,137,252,242,137, + 252,233,232,251,1,0,139,149,233,252,233,244,4,248,9,139,116,36,24,252,233, + 244,54,248,76,139,173,233,137,113,252,252,137,116,36,24,137,44,36,131,189, + 233,0,15,133,244,9,128,189,233,235,15,135,244,9,139,181,233,137,116,36,4, + 15,132,244,247,59,181,233,255,15,132,244,9,248,1,141,116,198,252,248,59,181, + 233,15,135,244,9,137,181,233,139,108,36,48,137,141,233,137,141,233,139,108, + 36,4,141,76,193,252,240,41,252,241,57,252,238,15,132,244,249,248,2,139,68, + 14,4,137,70,252,252,139,4,14,137,70,252,248,131,252,238,8,57,252,238,15,133, + 244,2,248,3,49,201,137,76,36,12,137,76,36,8,232,244,26,199,131,233,237,139, + 108,36,48,139,52,36,139,149,233,255,129,252,248,239,15,135,244,254,248,4, + 139,142,233,139,190,233,137,142,233,137,252,254,41,206,15,132,244,252,141, + 4,50,193,252,238,3,59,133,233,15,135,244,255,137,213,41,205,248,5,139,1,137, + 4,41,139,65,4,137,68,41,4,131,193,8,57,252,249,15,133,244,5,248,6,141,70, + 1,248,7,139,116,36,24,137,68,36,20,49,201,252,247,198,237,15,132,244,17,255, + 252,233,244,18,248,8,137,252,242,137,252,233,232,251,1,13,248,9,139,12,36, + 137,185,233,137,252,242,137,252,233,232,251,1,0,139,149,233,252,233,244,4, + 248,77,139,108,36,48,137,113,252,252,252,247,133,233,237,15,132,244,54,137, + 141,233,141,68,193,252,248,137,133,233,49,192,137,133,233,176,235,136,133, + 233,252,233,244,22,255,248,63,221,89,252,248,252,233,244,57,248,78,129,252, + 248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,15,16,1,102, + 15,252,239,201,102,15,118,201,102,15,115,209,1,15,84,193,248,62,252,242,15, + 17,65,252,248,255,248,78,129,252,248,239,15,130,244,54,129,121,253,4,239, + 15,135,244,54,221,1,217,225,248,62,248,63,221,89,252,248,255,248,57,184,237, + 248,68,137,68,36,20,248,55,252,247,198,237,15,133,244,253,248,5,56,70,252, + 255,15,135,244,252,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255, + 36,171,248,6,199,68,193,252,244,237,131,192,1,252,233,244,5,248,7,137,202, + 185,252,248,252,255,252,255,252,255,252,233,244,18,255,248,79,129,252,248, + 239,15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,15,81,1,252,233, + 244,62,248,80,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244, + 54,252,242,15,16,1,232,244,81,252,233,244,62,248,82,255,129,252,248,239,15, + 130,244,54,129,121,253,4,239,15,135,244,54,252,242,15,16,1,232,244,83,252, + 233,244,62,255,248,79,129,252,248,239,15,130,244,54,129,121,253,4,239,15, + 135,244,54,221,1,217,252,250,252,233,244,63,248,80,129,252,248,239,15,130, + 244,54,129,121,253,4,239,15,135,244,54,221,1,232,244,81,252,233,244,63,248, + 82,255,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221, + 1,232,244,83,252,233,244,63,255,248,84,129,252,248,239,15,130,244,54,129, + 121,253,4,239,15,135,244,54,217,252,237,221,1,217,252,241,252,233,244,63, + 248,85,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,217, + 252,236,221,1,217,252,241,252,233,244,63,248,86,129,252,248,239,255,15,130, + 244,54,129,121,253,4,239,15,135,244,54,221,1,232,244,87,252,233,244,63,248, + 88,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,217, + 252,254,252,233,244,63,248,89,129,252,248,239,255,15,130,244,54,129,121,253, + 4,239,15,135,244,54,221,1,217,252,255,252,233,244,63,248,90,129,252,248,239, + 15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,217,252,242,221,216,252, + 233,244,63,248,91,129,252,248,239,15,130,244,54,255,129,121,253,4,239,15, + 135,244,54,221,1,217,192,216,200,217,232,222,225,217,252,250,217,252,243, + 252,233,244,63,248,92,129,252,248,239,15,130,244,54,129,121,253,4,239,15, + 135,244,54,221,1,217,192,216,200,217,232,222,225,217,252,250,217,201,217, + 252,243,252,233,244,63,248,93,129,252,248,239,15,130,244,54,129,121,253,4, + 239,15,135,244,54,255,221,1,217,232,217,252,243,252,233,244,63,255,248,94, + 129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,15, + 16,1,252,242,15,17,4,36,255,248,94,129,252,248,239,15,130,244,54,129,121, 253,4,239,15,135,244,54,221,1,221,28,36,255,137,76,36,16,137,213,232,251, - 1,15,139,76,36,16,137,252,234,252,233,244,63,255,248,96,129,252,248,239,15, + 1,14,139,76,36,16,137,252,234,252,233,244,63,255,248,95,129,252,248,239,15, 130,244,54,129,121,253,4,239,15,135,244,54,252,242,15,16,1,252,242,15,17, - 4,36,255,248,96,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244, - 54,221,1,221,28,36,255,137,76,36,16,137,213,232,251,1,16,139,76,36,16,137, - 252,234,252,233,244,63,248,97,255,248,98,129,252,248,239,15,130,244,54,129, - 121,253,4,239,15,135,244,54,252,242,15,16,1,252,242,15,89,133,233,252,233, - 244,62,255,248,98,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135, - 244,54,221,1,220,141,233,252,233,244,63,255,248,99,129,252,248,239,15,130, + 4,36,255,248,95,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244, + 54,221,1,221,28,36,255,137,76,36,16,137,213,232,251,1,15,139,76,36,16,137, + 252,234,252,233,244,63,255,248,96,129,252,248,239,15,130,244,54,129,121,253, + 4,239,15,135,244,54,252,242,15,16,1,252,242,15,17,4,36,255,248,96,129,252, + 248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,221,28,36,255, + 137,76,36,16,137,213,232,251,1,16,139,76,36,16,137,252,234,252,233,244,63, + 248,97,255,248,98,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135, + 244,54,252,242,15,16,1,252,242,15,89,133,233,252,233,244,62,255,248,98,129, + 252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,220,141,233, + 252,233,244,63,255,248,99,129,252,248,239,15,130,244,54,129,121,253,4,239, + 15,135,244,54,129,121,253,12,239,15,135,244,54,221,1,221,65,8,217,252,243, + 252,233,244,63,248,100,129,252,248,239,15,130,244,54,129,121,253,4,239,15, + 135,244,54,129,121,253,12,239,255,15,135,244,54,221,65,8,221,1,217,252,253, + 221,217,252,233,244,63,248,101,129,252,248,239,15,130,244,54,139,105,4,129, + 252,253,239,15,135,244,54,139,1,137,105,252,252,137,65,252,248,209,229,129, + 252,253,0,0,224,252,255,15,131,244,249,9,232,15,132,244,249,184,252,254,3, + 0,0,129,252,253,0,0,32,0,15,130,244,250,248,1,193,252,237,21,41,197,255,252, + 242,15,42,197,255,137,108,36,16,219,68,36,16,255,139,105,252,252,129,229, + 252,255,252,255,15,128,129,205,0,0,224,63,137,105,252,252,248,2,255,252,242, + 15,17,1,255,221,25,255,184,237,252,233,244,68,248,3,255,15,87,192,252,233, + 244,2,255,217,252,238,252,233,244,2,255,252,242,15,16,1,189,0,0,80,67,102, + 15,110,205,102,15,112,201,81,252,242,15,89,193,252,242,15,17,65,252,248,255, + 221,1,199,68,36,16,0,0,128,90,216,76,36,16,221,89,252,248,255,139,105,252, + 252,184,52,4,0,0,209,229,252,233,244,1,255,248,102,129,252,248,239,15,130, + 244,54,129,121,253,4,239,15,135,244,54,252,242,15,16,1,255,248,102,129,252, + 248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,255,139,105,4, + 209,229,129,252,253,0,0,224,252,255,15,132,244,250,255,15,40,224,232,244, + 103,252,242,15,92,224,248,1,252,242,15,17,65,252,248,252,242,15,17,33,255, + 217,192,232,244,103,220,252,233,248,1,221,89,252,248,221,25,255,139,65,252, + 252,139,105,4,49,232,15,136,244,249,248,2,184,237,252,233,244,68,248,3,129, + 252,245,0,0,0,128,137,105,4,252,233,244,2,248,4,255,15,87,228,252,233,244, + 1,255,217,252,238,217,201,252,233,244,1,255,248,104,129,252,248,239,15,130, 244,54,129,121,253,4,239,15,135,244,54,129,121,253,12,239,15,135,244,54,221, - 1,221,65,8,217,252,243,252,233,244,63,248,100,129,252,248,239,15,130,244, - 54,129,121,253,4,239,15,135,244,54,129,121,253,12,239,255,15,135,244,54,221, - 65,8,221,1,217,252,253,221,217,252,233,244,63,248,101,129,252,248,239,15, - 130,244,54,139,105,4,129,252,253,239,15,135,244,54,139,1,137,105,252,252, - 137,65,252,248,209,229,129,252,253,0,0,224,252,255,15,131,244,249,9,232,15, - 132,244,249,184,252,254,3,0,0,129,252,253,0,0,32,0,15,130,244,250,248,1,193, - 252,237,21,41,197,255,252,242,15,42,197,255,137,108,36,16,219,68,36,16,255, - 139,105,252,252,129,229,252,255,252,255,15,128,129,205,0,0,224,63,137,105, - 252,252,248,2,255,252,242,15,17,1,255,221,25,255,184,237,252,233,244,68,248, - 3,255,15,87,192,252,233,244,2,255,217,252,238,252,233,244,2,255,252,242,15, - 16,1,189,0,0,80,67,102,15,110,205,102,15,112,201,81,252,242,15,89,193,252, - 242,15,17,65,252,248,255,221,1,199,68,36,16,0,0,128,90,216,76,36,16,221,89, - 252,248,255,139,105,252,252,184,52,4,0,0,209,229,252,233,244,1,255,248,102, - 129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,15, - 16,1,255,248,102,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244, - 54,221,1,255,139,105,4,209,229,129,252,253,0,0,224,252,255,15,132,244,250, - 255,15,40,224,232,244,103,252,242,15,92,224,248,1,252,242,15,17,65,252,248, - 252,242,15,17,33,255,217,192,232,244,103,220,252,233,248,1,221,89,252,248, - 221,25,255,139,65,252,252,139,105,4,49,232,15,136,244,249,248,2,184,237,252, - 233,244,68,248,3,129,252,245,0,0,0,128,137,105,4,252,233,244,2,248,4,255, - 15,87,228,252,233,244,1,255,217,252,238,217,201,252,233,244,1,255,248,104, - 129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,129,121,253, - 12,239,15,135,244,54,221,65,8,221,1,248,1,217,252,248,223,224,158,15,138, - 244,1,221,217,252,233,244,63,255,248,105,129,252,248,239,15,130,244,54,129, - 121,253,4,239,15,135,244,54,129,121,253,12,239,15,135,244,54,252,242,15,16, - 1,252,242,15,16,73,8,232,244,106,252,233,244,62,255,248,105,129,252,248,239, - 15,130,244,54,129,121,253,4,239,15,135,244,54,129,121,253,12,239,15,135,244, - 54,221,1,221,65,8,232,244,106,252,233,244,63,255,248,107,129,252,248,239, - 15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,15,16,1,189,2,0,0,0, - 248,1,57,197,15,131,244,62,129,124,253,252,233,252,252,239,15,135,244,54, - 252,242,15,16,76,252,233,252,248,252,242,15,93,193,131,197,1,252,233,244, - 1,255,248,107,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244, + 65,8,221,1,248,1,217,252,248,223,224,158,15,138,244,1,221,217,252,233,244, + 63,255,248,105,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244, + 54,129,121,253,12,239,15,135,244,54,252,242,15,16,1,252,242,15,16,73,8,232, + 244,106,252,233,244,62,255,248,105,129,252,248,239,15,130,244,54,129,121, + 253,4,239,15,135,244,54,129,121,253,12,239,15,135,244,54,221,1,221,65,8,232, + 244,106,252,233,244,63,255,248,107,129,252,248,239,15,130,244,54,129,121, + 253,4,239,15,135,244,54,252,242,15,16,1,189,2,0,0,0,248,1,57,197,15,131,244, + 62,129,124,253,252,233,252,252,239,15,135,244,54,252,242,15,16,76,252,233, + 252,248,252,242,15,93,193,131,197,1,252,233,244,1,255,248,107,129,252,248, + 239,15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,189,2,0,0,0,248,1, + 57,197,15,131,244,63,129,124,253,252,233,252,252,239,15,135,244,251,221,68, + 252,233,252,248,255,219,252,233,219,209,221,217,255,80,221,225,223,224,252, + 246,196,1,15,132,244,248,217,201,248,2,221,216,88,255,248,108,129,252,248, + 239,15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,15,16,1,189,2,0, + 0,0,248,1,57,197,15,131,244,62,129,124,253,252,233,252,252,239,15,135,244, + 54,252,242,15,16,76,252,233,252,248,252,242,15,95,193,131,197,1,252,233,244, + 1,255,248,108,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244, 54,221,1,189,2,0,0,0,248,1,57,197,15,131,244,63,129,124,253,252,233,252,252, - 239,15,135,244,251,221,68,252,233,252,248,255,219,252,233,219,209,221,217, - 255,80,221,225,223,224,252,246,196,1,15,132,244,248,217,201,248,2,221,216, - 88,255,248,108,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244, - 54,252,242,15,16,1,189,2,0,0,0,248,1,57,197,15,131,244,62,129,124,253,252, - 233,252,252,239,15,135,244,54,252,242,15,16,76,252,233,252,248,252,242,15, - 95,193,131,197,1,252,233,244,1,255,248,108,129,252,248,239,15,130,244,54, - 129,121,253,4,239,15,135,244,54,221,1,189,2,0,0,0,248,1,57,197,15,131,244, - 63,129,124,253,252,233,252,252,239,15,135,244,251,221,68,252,233,252,248, - 255,219,252,233,218,209,221,217,255,80,221,225,223,224,252,246,196,1,15,133, - 244,248,217,201,248,2,221,216,88,255,248,5,221,216,252,233,244,54,255,248, - 109,129,252,248,239,15,130,244,54,129,121,253,4,239,15,133,244,54,139,41, - 255,252,242,15,42,133,233,252,233,244,62,255,219,133,233,252,233,244,63,255, - 248,110,129,252,248,239,15,133,244,54,129,121,253,4,239,15,133,244,54,139, - 41,131,189,233,1,15,130,244,71,15,182,173,233,255,252,242,15,42,197,252,233, - 244,62,255,137,108,36,16,219,68,36,16,252,233,244,63,255,248,111,139,171, - 233,59,171,233,15,130,244,247,232,244,65,248,1,129,252,248,239,15,133,244, - 54,129,121,253,4,239,15,135,244,54,255,252,242,15,45,1,61,252,255,0,0,0,15, - 135,244,54,137,68,36,20,255,221,1,219,92,36,20,129,124,36,20,252,255,0,0, - 0,15,135,244,54,255,199,68,36,8,1,0,0,0,141,68,36,20,137,76,36,16,248,112, - 139,108,36,48,137,149,233,137,68,36,4,137,44,36,137,116,36,24,232,251,1,17, - 139,76,36,16,139,149,233,199,65,252,252,237,137,65,252,248,252,233,244,57, - 248,113,139,171,233,59,171,233,15,130,244,247,232,244,65,248,1,137,76,36, - 16,199,68,36,20,252,255,252,255,252,255,252,255,129,252,248,239,15,130,244, - 54,15,134,244,247,129,121,253,20,239,255,252,242,15,45,105,16,137,108,36, - 20,255,221,65,16,219,92,36,20,255,248,1,129,121,253,4,239,15,133,244,54,129, - 121,253,12,239,15,135,244,54,139,41,137,108,36,12,139,173,233,255,252,242, - 15,45,73,8,255,221,65,8,219,92,36,8,139,76,36,8,255,139,68,36,20,57,197,15, - 130,244,251,248,2,133,201,15,142,244,253,248,3,139,108,36,12,41,200,15,140, - 244,114,141,172,253,13,233,131,192,1,248,4,137,68,36,8,137,232,252,233,244, - 112,248,5,15,140,244,252,141,68,40,1,252,233,244,2,248,6,137,232,252,233, - 244,2,248,7,255,15,132,244,254,1,252,233,131,193,1,15,143,244,3,248,8,185, - 1,0,0,0,252,233,244,3,248,114,49,192,252,233,244,4,248,115,129,252,248,239, - 15,130,244,54,139,171,233,59,171,233,15,130,244,247,232,244,65,248,1,255, - 137,76,36,16,129,121,253,4,239,15,133,244,54,129,121,253,12,239,15,135,244, - 54,139,41,255,252,242,15,45,65,8,255,221,65,8,219,92,36,20,139,68,36,20,255, - 133,192,15,142,244,114,131,189,233,1,15,130,244,114,15,133,244,116,57,131, - 233,15,130,244,116,15,182,141,233,139,171,233,137,68,36,8,248,1,136,77,0, - 131,197,1,131,232,1,15,133,244,1,139,131,233,252,233,244,112,248,117,129, - 252,248,239,255,15,130,244,54,139,171,233,59,171,233,15,130,244,247,232,244, - 65,248,1,137,76,36,16,129,121,253,4,239,15,133,244,54,139,41,139,133,233, - 133,192,15,132,244,114,57,131,233,15,130,244,118,129,197,239,137,116,36,20, - 137,68,36,8,139,179,233,248,1,255,15,182,77,0,131,197,1,131,232,1,136,12, - 6,15,133,244,1,137,252,240,139,116,36,20,252,233,244,112,248,119,129,252, - 248,239,15,130,244,54,139,171,233,59,171,233,15,130,244,247,232,244,65,248, - 1,137,76,36,16,129,121,253,4,239,15,133,244,54,139,41,139,133,233,57,131, - 233,255,15,130,244,118,129,197,239,137,116,36,20,137,68,36,8,139,179,233, - 252,233,244,249,248,1,15,182,76,5,0,131,252,249,65,15,130,244,248,131,252, - 249,90,15,135,244,248,131,252,241,32,248,2,136,12,6,248,3,131,232,1,15,137, - 244,1,137,252,240,139,116,36,20,252,233,244,112,248,120,129,252,248,239,15, - 130,244,54,255,139,171,233,59,171,233,15,130,244,247,232,244,65,248,1,137, - 76,36,16,129,121,253,4,239,15,133,244,54,139,41,139,133,233,57,131,233,15, - 130,244,118,129,197,239,137,116,36,20,137,68,36,8,139,179,233,252,233,244, - 249,248,1,15,182,76,5,0,131,252,249,97,15,130,244,248,255,131,252,249,122, - 15,135,244,248,131,252,241,32,248,2,136,12,6,248,3,131,232,1,15,137,244,1, - 137,252,240,139,116,36,20,252,233,244,112,248,121,129,252,248,239,15,130, - 244,54,129,121,253,4,239,15,133,244,54,137,84,36,16,137,205,139,9,232,251, - 1,18,137,252,233,139,84,36,16,255,252,242,15,42,192,252,233,244,62,255,137, - 4,36,219,4,36,252,233,244,63,255,248,122,129,252,248,239,15,130,244,54,129, - 121,253,4,239,15,135,244,54,252,242,15,16,1,189,0,0,56,67,102,15,110,205, - 102,15,112,201,81,252,242,15,88,193,102,15,126,197,252,242,15,42,197,252, - 233,244,62,255,248,122,129,252,248,239,15,130,244,54,129,121,253,4,239,15, - 135,244,54,221,1,199,68,36,16,0,0,192,89,216,68,36,16,221,28,36,219,4,36, - 252,233,244,63,255,248,123,129,252,248,239,15,130,244,54,129,121,253,4,239, - 15,135,244,54,252,242,15,16,1,189,0,0,56,67,102,15,110,205,102,15,112,201, - 81,252,242,15,88,193,102,15,126,197,255,248,123,129,252,248,239,15,130,244, - 54,129,121,253,4,239,15,135,244,54,221,1,199,68,36,16,0,0,192,89,216,68,36, - 16,221,28,36,139,44,36,255,137,68,36,20,141,68,193,252,240,255,137,84,36, - 16,255,248,1,57,200,15,134,244,124,129,120,253,4,239,15,135,244,125,255,252, - 242,15,16,0,252,242,15,88,193,102,15,126,194,33,213,255,221,0,216,68,36,16, - 221,28,36,35,44,36,255,131,232,8,252,233,244,1,255,248,126,129,252,248,239, - 15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,15,16,1,189,0,0,56, - 67,102,15,110,205,102,15,112,201,81,252,242,15,88,193,102,15,126,197,255, - 248,126,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221, - 1,199,68,36,16,0,0,192,89,216,68,36,16,221,28,36,139,44,36,255,252,242,15, - 16,0,252,242,15,88,193,102,15,126,194,9,213,255,221,0,216,68,36,16,221,28, - 36,11,44,36,255,248,127,129,252,248,239,15,130,244,54,129,121,253,4,239,15, + 239,15,135,244,251,221,68,252,233,252,248,255,219,252,233,218,209,221,217, + 255,80,221,225,223,224,252,246,196,1,15,133,244,248,217,201,248,2,221,216, + 88,255,248,5,221,216,252,233,244,54,255,248,109,129,252,248,239,15,130,244, + 54,129,121,253,4,239,15,133,244,54,139,41,255,252,242,15,42,133,233,252,233, + 244,62,255,219,133,233,252,233,244,63,255,248,110,129,252,248,239,15,133, + 244,54,129,121,253,4,239,15,133,244,54,139,41,131,189,233,1,15,130,244,71, + 15,182,173,233,255,252,242,15,42,197,252,233,244,62,255,137,108,36,16,219, + 68,36,16,252,233,244,63,255,248,111,139,171,233,59,171,233,15,130,244,247, + 232,244,65,248,1,129,252,248,239,15,133,244,54,129,121,253,4,239,15,135,244, + 54,255,252,242,15,45,1,61,252,255,0,0,0,15,135,244,54,137,68,36,20,255,221, + 1,219,92,36,20,129,124,36,20,252,255,0,0,0,15,135,244,54,255,199,68,36,8, + 1,0,0,0,141,68,36,20,137,76,36,16,248,112,139,108,36,48,137,149,233,137,68, + 36,4,137,44,36,137,116,36,24,232,251,1,17,139,76,36,16,139,149,233,199,65, + 252,252,237,137,65,252,248,252,233,244,57,248,113,139,171,233,59,171,233, + 15,130,244,247,232,244,65,248,1,137,76,36,16,199,68,36,20,252,255,252,255, + 252,255,252,255,129,252,248,239,15,130,244,54,15,134,244,247,129,121,253, + 20,239,255,252,242,15,45,105,16,137,108,36,20,255,221,65,16,219,92,36,20, + 255,248,1,129,121,253,4,239,15,133,244,54,129,121,253,12,239,15,135,244,54, + 139,41,137,108,36,12,139,173,233,255,252,242,15,45,73,8,255,221,65,8,219, + 92,36,8,139,76,36,8,255,139,68,36,20,57,197,15,130,244,251,248,2,133,201, + 15,142,244,253,248,3,139,108,36,12,41,200,15,140,244,114,141,172,253,13,233, + 131,192,1,248,4,137,68,36,8,137,232,252,233,244,112,248,5,15,140,244,252, + 141,68,40,1,252,233,244,2,248,6,137,232,252,233,244,2,248,7,255,15,132,244, + 254,1,252,233,131,193,1,15,143,244,3,248,8,185,1,0,0,0,252,233,244,3,248, + 114,49,192,252,233,244,4,248,115,129,252,248,239,15,130,244,54,139,171,233, + 59,171,233,15,130,244,247,232,244,65,248,1,255,137,76,36,16,129,121,253,4, + 239,15,133,244,54,129,121,253,12,239,15,135,244,54,139,41,255,252,242,15, + 45,65,8,255,221,65,8,219,92,36,20,139,68,36,20,255,133,192,15,142,244,114, + 131,189,233,1,15,130,244,114,15,133,244,116,57,131,233,15,130,244,116,15, + 182,141,233,139,171,233,137,68,36,8,248,1,136,77,0,131,197,1,131,232,1,15, + 133,244,1,139,131,233,252,233,244,112,248,117,129,252,248,239,255,15,130, + 244,54,139,171,233,59,171,233,15,130,244,247,232,244,65,248,1,137,76,36,16, + 129,121,253,4,239,15,133,244,54,139,41,139,133,233,133,192,15,132,244,114, + 57,131,233,15,130,244,118,129,197,239,137,116,36,20,137,68,36,8,139,179,233, + 248,1,255,15,182,77,0,131,197,1,131,232,1,136,12,6,15,133,244,1,137,252,240, + 139,116,36,20,252,233,244,112,248,119,129,252,248,239,15,130,244,54,139,171, + 233,59,171,233,15,130,244,247,232,244,65,248,1,137,76,36,16,129,121,253,4, + 239,15,133,244,54,139,41,139,133,233,57,131,233,255,15,130,244,118,129,197, + 239,137,116,36,20,137,68,36,8,139,179,233,252,233,244,249,248,1,15,182,76, + 5,0,131,252,249,65,15,130,244,248,131,252,249,90,15,135,244,248,131,252,241, + 32,248,2,136,12,6,248,3,131,232,1,15,137,244,1,137,252,240,139,116,36,20, + 252,233,244,112,248,120,129,252,248,239,15,130,244,54,255,139,171,233,59, + 171,233,15,130,244,247,232,244,65,248,1,137,76,36,16,129,121,253,4,239,15, + 133,244,54,139,41,139,133,233,57,131,233,15,130,244,118,129,197,239,137,116, + 36,20,137,68,36,8,139,179,233,252,233,244,249,248,1,15,182,76,5,0,131,252, + 249,97,15,130,244,248,255,131,252,249,122,15,135,244,248,131,252,241,32,248, + 2,136,12,6,248,3,131,232,1,15,137,244,1,137,252,240,139,116,36,20,252,233, + 244,112,248,121,129,252,248,239,15,130,244,54,129,121,253,4,239,15,133,244, + 54,137,84,36,16,137,205,139,9,232,251,1,18,137,252,233,139,84,36,16,255,252, + 242,15,42,192,252,233,244,62,255,137,4,36,219,4,36,252,233,244,63,255,248, + 122,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,252,242, + 15,16,1,189,0,0,56,67,102,15,110,205,102,15,112,201,81,252,242,15,88,193, + 102,15,126,197,252,242,15,42,197,252,233,244,62,255,248,122,129,252,248,239, + 15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,199,68,36,16,0,0,192, + 89,216,68,36,16,221,28,36,219,4,36,252,233,244,63,255,248,123,129,252,248, + 239,15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,15,16,1,189,0,0, + 56,67,102,15,110,205,102,15,112,201,81,252,242,15,88,193,102,15,126,197,255, + 248,123,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221, + 1,199,68,36,16,0,0,192,89,216,68,36,16,221,28,36,139,44,36,255,137,68,36, + 20,141,68,193,252,240,255,137,84,36,16,255,248,1,57,200,15,134,244,124,129, + 120,253,4,239,15,135,244,125,255,252,242,15,16,0,252,242,15,88,193,102,15, + 126,194,33,213,255,221,0,216,68,36,16,221,28,36,35,44,36,255,131,232,8,252, + 233,244,1,255,248,126,129,252,248,239,15,130,244,54,129,121,253,4,239,15, 135,244,54,252,242,15,16,1,189,0,0,56,67,102,15,110,205,102,15,112,201,81, - 252,242,15,88,193,102,15,126,197,255,248,127,129,252,248,239,15,130,244,54, + 252,242,15,88,193,102,15,126,197,255,248,126,129,252,248,239,15,130,244,54, 129,121,253,4,239,15,135,244,54,221,1,199,68,36,16,0,0,192,89,216,68,36,16, 221,28,36,139,44,36,255,252,242,15,16,0,252,242,15,88,193,102,15,126,194, - 49,213,255,221,0,216,68,36,16,221,28,36,51,44,36,255,248,128,129,252,248, - 239,15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,15,16,1,189,0,0, - 56,67,102,15,110,205,102,15,112,201,81,252,242,15,88,193,102,15,126,197,255, - 248,128,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221, - 1,199,68,36,16,0,0,192,89,216,68,36,16,221,28,36,139,44,36,255,15,205,252, - 233,244,129,255,248,130,129,252,248,239,15,130,244,54,129,121,253,4,239,15, + 9,213,255,221,0,216,68,36,16,221,28,36,11,44,36,255,248,127,129,252,248,239, + 15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,15,16,1,189,0,0,56, + 67,102,15,110,205,102,15,112,201,81,252,242,15,88,193,102,15,126,197,255, + 248,127,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221, + 1,199,68,36,16,0,0,192,89,216,68,36,16,221,28,36,139,44,36,255,252,242,15, + 16,0,252,242,15,88,193,102,15,126,194,49,213,255,221,0,216,68,36,16,221,28, + 36,51,44,36,255,248,128,129,252,248,239,15,130,244,54,129,121,253,4,239,15, 135,244,54,252,242,15,16,1,189,0,0,56,67,102,15,110,205,102,15,112,201,81, - 252,242,15,88,193,102,15,126,197,255,248,130,129,252,248,239,15,130,244,54, + 252,242,15,88,193,102,15,126,197,255,248,128,129,252,248,239,15,130,244,54, 129,121,253,4,239,15,135,244,54,221,1,199,68,36,16,0,0,192,89,216,68,36,16, - 221,28,36,139,44,36,255,252,247,213,255,248,129,252,242,15,42,197,252,233, - 244,62,248,124,252,242,15,42,197,139,84,36,16,252,233,244,62,255,248,129, - 248,124,137,44,36,219,4,36,252,233,244,63,255,248,125,255,139,68,36,20,252, - 233,244,54,255,248,131,129,252,248,239,15,130,244,54,129,121,253,4,239,15, - 135,244,54,129,121,253,12,239,15,135,244,54,252,242,15,16,1,252,242,15,16, - 73,8,189,0,0,56,67,102,15,110,213,102,15,112,210,81,252,242,15,88,194,252, - 242,15,88,202,137,200,102,15,126,197,102,15,126,201,255,248,131,129,252,248, - 239,15,130,244,54,129,121,253,4,239,15,135,244,54,129,121,253,12,239,15,135, - 244,54,221,1,221,65,8,199,68,36,16,0,0,192,89,216,68,36,16,221,92,36,8,216, - 68,36,16,221,28,36,137,200,139,76,36,8,139,44,36,255,211,229,137,193,252, - 233,244,129,255,248,132,129,252,248,239,15,130,244,54,129,121,253,4,239,15, - 135,244,54,129,121,253,12,239,15,135,244,54,252,242,15,16,1,252,242,15,16, - 73,8,189,0,0,56,67,102,15,110,213,102,15,112,210,81,252,242,15,88,194,252, - 242,15,88,202,137,200,102,15,126,197,102,15,126,201,255,248,132,129,252,248, + 221,28,36,139,44,36,255,15,205,252,233,244,129,255,248,130,129,252,248,239, + 15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,15,16,1,189,0,0,56, + 67,102,15,110,205,102,15,112,201,81,252,242,15,88,193,102,15,126,197,255, + 248,130,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221, + 1,199,68,36,16,0,0,192,89,216,68,36,16,221,28,36,139,44,36,255,252,247,213, + 255,248,129,252,242,15,42,197,252,233,244,62,248,124,252,242,15,42,197,139, + 84,36,16,252,233,244,62,255,248,129,248,124,137,44,36,219,4,36,252,233,244, + 63,255,248,125,255,139,68,36,20,252,233,244,54,255,248,131,129,252,248,239, + 15,130,244,54,129,121,253,4,239,15,135,244,54,129,121,253,12,239,15,135,244, + 54,252,242,15,16,1,252,242,15,16,73,8,189,0,0,56,67,102,15,110,213,102,15, + 112,210,81,252,242,15,88,194,252,242,15,88,202,137,200,102,15,126,197,102, + 15,126,201,255,248,131,129,252,248,239,15,130,244,54,129,121,253,4,239,15, + 135,244,54,129,121,253,12,239,15,135,244,54,221,1,221,65,8,199,68,36,16,0, + 0,192,89,216,68,36,16,221,92,36,8,216,68,36,16,221,28,36,137,200,139,76,36, + 8,139,44,36,255,211,229,137,193,252,233,244,129,255,248,132,129,252,248,239, + 15,130,244,54,129,121,253,4,239,15,135,244,54,129,121,253,12,239,15,135,244, + 54,252,242,15,16,1,252,242,15,16,73,8,189,0,0,56,67,102,15,110,213,102,15, + 112,210,81,252,242,15,88,194,252,242,15,88,202,137,200,102,15,126,197,102, + 15,126,201,255,248,132,129,252,248,239,15,130,244,54,129,121,253,4,239,15, + 135,244,54,129,121,253,12,239,15,135,244,54,221,1,221,65,8,199,68,36,16,0, + 0,192,89,216,68,36,16,221,92,36,8,216,68,36,16,221,28,36,137,200,139,76,36, + 8,139,44,36,255,211,252,237,137,193,252,233,244,129,255,248,133,129,252,248, 239,15,130,244,54,129,121,253,4,239,15,135,244,54,129,121,253,12,239,15,135, - 244,54,221,1,221,65,8,199,68,36,16,0,0,192,89,216,68,36,16,221,92,36,8,216, - 68,36,16,221,28,36,137,200,139,76,36,8,139,44,36,255,211,252,237,137,193, - 252,233,244,129,255,248,133,129,252,248,239,15,130,244,54,129,121,253,4,239, - 15,135,244,54,129,121,253,12,239,15,135,244,54,252,242,15,16,1,252,242,15, - 16,73,8,189,0,0,56,67,102,15,110,213,102,15,112,210,81,252,242,15,88,194, - 252,242,15,88,202,137,200,102,15,126,197,102,15,126,201,255,248,133,129,252, + 244,54,252,242,15,16,1,252,242,15,16,73,8,189,0,0,56,67,102,15,110,213,102, + 15,112,210,81,252,242,15,88,194,252,242,15,88,202,137,200,102,15,126,197, + 102,15,126,201,255,248,133,129,252,248,239,15,130,244,54,129,121,253,4,239, + 15,135,244,54,129,121,253,12,239,15,135,244,54,221,1,221,65,8,199,68,36,16, + 0,0,192,89,216,68,36,16,221,92,36,8,216,68,36,16,221,28,36,137,200,139,76, + 36,8,139,44,36,255,211,252,253,137,193,252,233,244,129,255,248,134,129,252, 248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,129,121,253,12,239, - 15,135,244,54,221,1,221,65,8,199,68,36,16,0,0,192,89,216,68,36,16,221,92, - 36,8,216,68,36,16,221,28,36,137,200,139,76,36,8,139,44,36,255,211,252,253, - 137,193,252,233,244,129,255,248,134,129,252,248,239,15,130,244,54,129,121, - 253,4,239,15,135,244,54,129,121,253,12,239,15,135,244,54,252,242,15,16,1, - 252,242,15,16,73,8,189,0,0,56,67,102,15,110,213,102,15,112,210,81,252,242, - 15,88,194,252,242,15,88,202,137,200,102,15,126,197,102,15,126,201,255,248, - 134,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,129,121, - 253,12,239,15,135,244,54,221,1,221,65,8,199,68,36,16,0,0,192,89,216,68,36, - 16,221,92,36,8,216,68,36,16,221,28,36,137,200,139,76,36,8,139,44,36,255,211, - 197,137,193,252,233,244,129,255,248,135,129,252,248,239,15,130,244,54,129, - 121,253,4,239,15,135,244,54,129,121,253,12,239,15,135,244,54,252,242,15,16, - 1,252,242,15,16,73,8,189,0,0,56,67,102,15,110,213,102,15,112,210,81,252,242, - 15,88,194,252,242,15,88,202,137,200,102,15,126,197,102,15,126,201,255,248, - 135,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,129,121, - 253,12,239,15,135,244,54,221,1,221,65,8,199,68,36,16,0,0,192,89,216,68,36, - 16,221,92,36,8,216,68,36,16,221,28,36,137,200,139,76,36,8,139,44,36,255,211, - 205,137,193,252,233,244,129,248,116,184,237,252,233,244,54,248,118,184,237, - 248,54,139,108,36,48,41,202,137,113,252,252,137,116,36,24,137,84,36,16,137, - 141,233,141,68,193,252,248,141,144,233,137,133,233,139,65,252,248,59,149, - 233,15,135,244,251,137,44,36,252,255,144,233,133,192,15,133,244,249,248,1, - 139,141,233,255,139,133,233,41,200,193,232,3,131,192,1,139,105,252,248,139, - 84,36,16,1,202,57,113,252,252,15,133,244,248,252,255,165,233,248,2,129,121, - 253,252,252,239,15,133,244,29,252,255,165,233,248,3,139,141,233,139,84,36, - 16,1,202,252,233,244,68,248,5,186,237,137,252,233,232,251,1,0,252,233,244, - 1,248,65,93,137,108,36,16,139,108,36,48,41,202,137,84,36,20,137,113,252,252, - 137,116,36,24,137,141,233,141,68,193,252,248,137,252,233,137,133,233,255, - 232,251,1,19,139,141,233,139,133,233,41,200,193,232,3,131,192,1,139,113,252, - 252,139,84,36,20,1,202,139,108,36,16,85,139,105,252,248,195,248,136,255,15, - 182,131,233,168,235,15,133,244,251,168,235,15,133,244,247,168,235,15,132, - 244,247,252,255,139,233,252,233,244,247,255,248,137,15,182,131,233,168,235, - 15,133,244,251,168,235,15,132,244,251,252,255,139,233,15,132,244,247,168, - 235,15,132,244,251,248,1,139,108,36,48,139,68,36,20,137,68,36,8,137,149,233, - 137,116,36,4,137,44,36,232,251,1,20,248,4,139,149,233,15,182,78,252,253,248, - 5,15,182,110,252,252,15,183,70,252,254,252,255,164,253,171,233,248,138,255, - 139,108,36,48,137,149,233,137,252,242,141,139,233,137,171,233,137,116,36, - 24,232,251,1,21,252,233,244,4,255,248,139,255,139,108,36,48,137,149,233,137, - 252,242,141,139,233,137,171,233,137,116,36,24,232,251,1,21,139,149,233,139, - 6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,255,248,140,255, + 15,135,244,54,252,242,15,16,1,252,242,15,16,73,8,189,0,0,56,67,102,15,110, + 213,102,15,112,210,81,252,242,15,88,194,252,242,15,88,202,137,200,102,15, + 126,197,102,15,126,201,255,248,134,129,252,248,239,15,130,244,54,129,121, + 253,4,239,15,135,244,54,129,121,253,12,239,15,135,244,54,221,1,221,65,8,199, + 68,36,16,0,0,192,89,216,68,36,16,221,92,36,8,216,68,36,16,221,28,36,137,200, + 139,76,36,8,139,44,36,255,211,197,137,193,252,233,244,129,255,248,135,129, + 252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,129,121,253,12, + 239,15,135,244,54,252,242,15,16,1,252,242,15,16,73,8,189,0,0,56,67,102,15, + 110,213,102,15,112,210,81,252,242,15,88,194,252,242,15,88,202,137,200,102, + 15,126,197,102,15,126,201,255,248,135,129,252,248,239,15,130,244,54,129,121, + 253,4,239,15,135,244,54,129,121,253,12,239,15,135,244,54,221,1,221,65,8,199, + 68,36,16,0,0,192,89,216,68,36,16,221,92,36,8,216,68,36,16,221,28,36,137,200, + 139,76,36,8,139,44,36,255,211,205,137,193,252,233,244,129,248,116,184,237, + 252,233,244,54,248,118,184,237,248,54,139,108,36,48,41,202,137,113,252,252, + 137,116,36,24,137,84,36,16,137,141,233,141,68,193,252,248,141,144,233,137, + 133,233,139,65,252,248,59,149,233,15,135,244,251,137,44,36,252,255,144,233, + 133,192,15,133,244,249,248,1,139,141,233,255,139,133,233,41,200,193,232,3, + 131,192,1,139,105,252,248,139,84,36,16,1,202,57,113,252,252,15,133,244,248, + 252,255,165,233,248,2,129,121,253,252,252,239,15,133,244,29,252,255,165,233, + 248,3,139,141,233,139,84,36,16,1,202,252,233,244,68,248,5,186,237,137,252, + 233,232,251,1,0,252,233,244,1,248,65,93,137,108,36,16,139,108,36,48,41,202, + 137,84,36,20,137,113,252,252,137,116,36,24,137,141,233,141,68,193,252,248, + 137,252,233,137,133,233,255,232,251,1,19,139,141,233,139,133,233,41,200,193, + 232,3,131,192,1,139,113,252,252,139,84,36,20,1,202,139,108,36,16,85,139,105, + 252,248,195,248,136,255,15,182,131,233,168,235,15,133,244,251,168,235,15, + 133,244,247,168,235,15,132,244,247,252,255,139,233,252,233,244,247,255,248, + 137,15,182,131,233,168,235,15,133,244,251,168,235,15,132,244,251,252,255, + 139,233,15,132,244,247,168,235,15,132,244,251,248,1,139,108,36,48,137,149, + 233,137,252,242,137,252,233,232,251,1,20,248,3,139,149,233,248,4,15,182,78, + 252,253,248,5,255,15,182,110,252,252,15,183,70,252,254,252,255,164,253,171, + 233,248,138,131,198,4,139,77,232,137,76,36,20,252,233,244,4,248,139,255,139, + 108,36,48,137,149,233,137,252,242,141,139,233,137,171,233,137,116,36,24,232, + 251,1,21,252,233,244,3,255,248,140,255,139,108,36,48,137,149,233,137,252, + 242,141,139,233,137,171,233,137,116,36,24,232,251,1,21,139,149,233,139,6, + 15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,255,248,141,255, 85,141,108,36,12,85,83,82,81,80,15,182,69,252,252,138,101,252,248,137,125, 252,252,137,117,252,248,139,93,0,139,139,233,199,131,233,237,137,131,233, 137,139,233,129,252,236,239,252,247,131,233,237,15,132,244,247,252,242,15, @@ -434,29 +434,29 @@ static const unsigned char build_actionlist[15184] = { 192,252,242,15,17,93,184,252,242,15,17,85,176,252,242,15,17,77,168,252,242, 15,17,69,160,248,1,139,171,233,139,147,233,137,171,233,137,149,233,141,84, 36,16,141,139,233,232,251,1,22,137,196,139,149,233,139,116,36,24,137,108, - 36,48,255,248,141,255,139,122,252,248,139,191,233,139,191,233,199,131,233, + 36,48,255,248,142,255,139,122,252,248,139,191,233,139,191,233,199,131,233, 0,0,0,0,199,131,233,237,139,6,15,182,204,15,182,232,131,198,4,193,232,16, 252,255,36,171,255,248,81,255,217,124,36,4,137,68,36,8,102,184,0,4,102,11, 68,36,4,102,37,252,255,252,247,102,137,68,36,6,217,108,36,6,217,252,252,217, - 108,36,4,139,68,36,8,195,255,248,142,102,15,252,239,210,102,15,118,210,102, + 108,36,4,139,68,36,8,195,255,248,143,102,15,252,239,210,102,15,118,210,102, 15,115,210,1,184,0,0,48,67,102,15,110,216,102,15,112,219,81,15,40,200,102, 15,84,202,102,15,46,217,15,134,244,247,102,15,85,208,252,242,15,88,203,252, 242,15,92,203,102,15,86,202,184,0,0,252,240,63,102,15,110,208,102,15,112, 210,81,252,242,15,194,193,1,102,15,84,194,252,242,15,92,200,15,40,193,248, 1,195,248,83,255,217,124,36,4,137,68,36,8,102,184,0,8,102,11,68,36,4,102, 37,252,255,252,251,102,137,68,36,6,217,108,36,6,217,252,252,217,108,36,4, - 139,68,36,8,195,255,248,143,102,15,252,239,210,102,15,118,210,102,15,115, + 139,68,36,8,195,255,248,144,102,15,252,239,210,102,15,118,210,102,15,115, 210,1,184,0,0,48,67,102,15,110,216,102,15,112,219,81,15,40,200,102,15,84, 202,102,15,46,217,15,134,244,247,102,15,85,208,252,242,15,88,203,252,242, 15,92,203,102,15,86,202,184,0,0,252,240,191,102,15,110,208,102,15,112,210, 81,252,242,15,194,193,6,102,15,84,194,252,242,15,92,200,15,40,193,248,1,195, 248,103,255,217,124,36,4,137,68,36,8,102,184,0,12,102,11,68,36,4,102,137, - 68,36,6,217,108,36,6,217,252,252,217,108,36,4,139,68,36,8,195,255,248,144, + 68,36,6,217,108,36,6,217,252,252,217,108,36,4,139,68,36,8,195,255,248,145, 102,15,252,239,210,102,15,118,210,102,15,115,210,1,184,0,0,48,67,102,15,110, 216,102,15,112,219,81,15,40,200,102,15,84,202,102,15,46,217,15,134,244,247, 102,15,85,208,15,40,193,252,242,15,88,203,252,242,15,92,203,184,0,0,252,240, 63,102,15,110,216,102,15,112,219,81,252,242,15,194,193,1,102,15,84,195,252, - 242,15,92,200,102,15,86,202,15,40,193,248,1,195,248,145,255,15,40,232,252, + 242,15,92,200,102,15,86,202,15,40,193,248,1,195,248,146,255,15,40,232,252, 242,15,94,193,102,15,252,239,210,102,15,118,210,102,15,115,210,1,184,0,0, 48,67,102,15,110,216,102,15,112,219,81,15,40,224,102,15,84,226,102,15,46, 220,15,134,244,247,102,15,85,208,252,242,15,88,227,252,242,15,92,227,102, @@ -465,9 +465,9 @@ static const unsigned char build_actionlist[15184] = { 242,15,92,193,195,248,1,252,242,15,89,200,15,40,197,252,242,15,92,193,195, 255,217,193,216,252,241,217,124,36,4,102,184,0,4,102,11,68,36,4,102,37,252, 255,252,247,102,137,68,36,6,217,108,36,6,217,252,252,217,108,36,4,222,201, - 222,252,233,195,255,248,87,217,252,234,222,201,248,146,217,84,36,4,129,124, + 222,252,233,195,255,248,87,217,252,234,222,201,248,147,217,84,36,4,129,124, 36,4,0,0,128,127,15,132,244,247,129,124,36,4,0,0,128,252,255,15,132,244,248, - 248,147,217,192,217,252,252,220,252,233,217,201,217,252,240,217,232,222,193, + 248,148,217,192,217,252,252,220,252,233,217,201,217,252,240,217,232,222,193, 217,252,253,221,217,248,1,195,248,2,221,216,217,252,238,195,255,248,106,219, 84,36,4,219,68,36,4,255,223,252,233,255,221,252,233,223,224,158,255,15,133, 244,254,15,138,244,255,221,216,139,68,36,4,131,252,248,1,15,142,244,252,248, @@ -477,14 +477,14 @@ static const unsigned char build_actionlist[15184] = { 244,253,217,232,222,252,241,252,247,216,131,252,248,1,15,132,244,5,252,233, 244,1,248,7,221,216,217,232,195,248,8,217,84,36,4,217,201,217,84,36,8,139, 68,36,4,209,224,61,0,0,0,252,255,15,132,244,248,139,68,36,8,209,224,15,132, - 244,250,61,0,0,0,252,255,15,132,244,250,217,252,241,252,233,244,147,248,9, + 244,250,61,0,0,0,252,255,15,132,244,250,217,252,241,252,233,244,148,248,9, 255,217,232,255,223,252,234,255,221,252,234,223,224,158,255,15,132,244,247, 217,201,248,1,221,216,195,248,2,217,225,217,232,255,15,132,244,249,221,216, 217,225,217,252,238,184,0,0,0,0,15,146,208,209,200,51,68,36,4,15,137,244, 249,217,201,248,3,221,217,217,225,195,248,4,131,124,36,4,0,15,141,244,3,221, 216,221,216,133,192,15,132,244,251,217,252,238,195,248,5,199,68,36,4,0,0, - 128,127,217,68,36,4,195,255,248,106,255,248,148,252,242,15,45,193,252,242, - 15,42,208,102,15,46,202,15,133,244,254,15,138,244,255,248,149,131,252,248, + 128,127,217,68,36,4,195,255,248,106,255,248,149,252,242,15,45,193,252,242, + 15,42,208,102,15,46,202,15,133,244,254,15,138,244,255,248,150,131,252,248, 1,15,142,244,252,248,1,169,1,0,0,0,15,133,244,248,252,242,15,89,192,209,232, 252,233,244,1,248,2,209,232,15,132,244,251,15,40,200,248,3,252,242,15,89, 192,209,232,15,132,244,250,15,131,244,3,255,252,242,15,89,200,252,233,244, @@ -504,28 +504,28 @@ static const unsigned char build_actionlist[15184] = { 87,192,136,196,15,146,208,48,224,15,133,244,1,248,3,184,0,0,252,240,127,102, 15,110,192,102,15,112,192,81,195,248,4,102,15,80,193,133,192,15,133,244,3, 255,15,87,192,195,248,5,102,15,80,193,133,192,15,132,244,3,15,87,192,195, - 248,150,255,139,68,36,12,252,242,15,16,68,36,4,131,252,248,1,15,132,244,247, + 248,151,255,139,68,36,12,252,242,15,16,68,36,4,131,252,248,1,15,132,244,247, 15,135,244,248,232,244,81,252,233,244,253,248,1,232,244,83,252,233,244,253, 248,2,131,252,248,3,15,132,244,247,15,135,244,248,232,244,103,255,252,233, 244,253,248,1,252,242,15,81,192,248,7,252,242,15,17,68,36,4,221,68,36,4,195, - 248,2,221,68,36,4,131,252,248,5,15,130,244,87,15,132,244,146,248,2,131,252, + 248,2,221,68,36,4,131,252,248,5,15,130,244,87,15,132,244,147,248,2,131,252, 248,7,15,132,244,247,15,135,244,248,217,252,237,217,201,217,252,241,195,248, 1,217,232,217,201,217,252,241,195,248,2,131,252,248,9,15,132,244,247,15,135, 244,248,255,217,252,236,217,201,217,252,241,195,248,1,217,252,254,195,248, 2,131,252,248,11,15,132,244,247,15,135,244,255,217,252,255,195,248,1,217, 252,242,221,216,195,255,139,68,36,12,221,68,36,4,131,252,248,1,15,130,244, 81,15,132,244,83,131,252,248,3,15,130,244,103,15,135,244,248,217,252,250, - 195,248,2,131,252,248,5,15,130,244,87,15,132,244,146,131,252,248,7,15,132, + 195,248,2,131,252,248,5,15,130,244,87,15,132,244,147,131,252,248,7,15,132, 244,247,15,135,244,248,217,252,237,217,201,217,252,241,195,248,1,217,232, 217,201,217,252,241,195,248,2,131,252,248,9,15,132,244,247,255,15,135,244, 248,217,252,236,217,201,217,252,241,195,248,1,217,252,254,195,248,2,131,252, 248,11,15,132,244,247,15,135,244,255,217,252,255,195,248,1,217,252,242,221, - 216,195,255,248,9,204,248,151,255,139,68,36,20,252,242,15,16,68,36,4,252, + 216,195,255,248,9,204,248,152,255,139,68,36,20,252,242,15,16,68,36,4,252, 242,15,16,76,36,12,131,252,248,1,15,132,244,247,15,135,244,248,252,242,15, 88,193,248,7,252,242,15,17,68,36,4,221,68,36,4,195,248,1,252,242,15,92,193, 252,233,244,7,248,2,131,252,248,3,15,132,244,247,15,135,244,248,252,242,15, 89,193,252,233,244,7,248,1,252,242,15,94,193,252,233,244,7,248,2,131,252, - 248,5,15,132,244,247,255,15,135,244,248,232,244,145,252,233,244,7,248,1,90, + 248,5,15,132,244,247,255,15,135,244,248,232,244,146,252,233,244,7,248,1,90, 232,244,106,82,252,233,244,7,248,2,131,252,248,7,15,132,244,247,15,135,244, 248,184,0,0,0,128,102,15,110,200,102,15,112,201,81,15,87,193,252,233,244, 7,248,1,102,15,252,239,201,102,15,118,201,102,15,115,209,1,15,84,193,252, @@ -535,14 +535,14 @@ static const unsigned char build_actionlist[15184] = { 244,7,248,1,252,242,15,95,193,252,233,244,7,248,9,204,255,139,68,36,20,221, 68,36,4,221,68,36,12,131,252,248,1,15,132,244,247,15,135,244,248,222,193, 195,248,1,222,252,233,195,248,2,131,252,248,3,15,132,244,247,15,135,244,248, - 222,201,195,248,1,222,252,249,195,248,2,131,252,248,5,15,130,244,145,15,132, + 222,201,195,248,1,222,252,249,195,248,2,131,252,248,5,15,130,244,146,15,132, 244,106,131,252,248,7,15,132,244,247,15,135,244,248,255,221,216,217,224,195, 248,1,221,216,217,225,195,248,2,131,252,248,9,15,132,244,247,15,135,244,248, 217,252,243,195,248,1,217,201,217,252,253,221,217,195,248,2,131,252,248,11, 15,132,244,247,15,135,244,255,255,219,252,233,219,209,221,217,195,248,1,219, 252,233,218,209,221,217,195,255,221,225,223,224,252,246,196,1,15,132,244, 248,217,201,248,2,221,216,195,248,1,221,225,223,224,252,246,196,1,15,133, - 244,248,217,201,248,2,221,216,195,255,248,152,156,90,137,209,129,252,242, + 244,248,217,201,248,2,221,216,195,255,248,153,156,90,137,209,129,252,242, 0,0,32,0,82,157,156,90,49,192,57,209,15,132,244,247,139,68,36,4,87,83,15, 162,139,124,36,16,137,7,137,95,4,137,79,8,137,87,12,91,95,248,1,195,255,249, 255,129,124,253,202,4,239,15,135,244,41,129,124,253,194,4,239,15,135,244, @@ -593,8 +593,8 @@ static const unsigned char build_actionlist[15184] = { 221,4,252,234,220,52,194,255,252,242,15,16,4,252,234,252,242,15,16,12,199, 255,221,4,252,234,221,4,199,255,252,242,15,16,4,199,252,242,15,16,12,252, 234,255,221,4,199,221,4,252,234,255,252,242,15,16,4,252,234,252,242,15,16, - 12,194,255,221,4,252,234,221,4,194,255,248,153,232,244,145,255,252,233,244, - 153,255,232,244,106,255,15,182,252,236,15,182,192,141,12,194,41,232,137,76, + 12,194,255,221,4,252,234,221,4,194,255,248,154,232,244,146,255,252,233,244, + 154,255,232,244,106,255,15,182,252,236,15,182,192,141,12,194,41,232,137,76, 36,4,137,68,36,8,248,33,139,108,36,48,137,44,36,137,149,233,137,116,36,24, 232,251,1,23,139,149,233,133,192,15,133,244,42,15,182,110,252,255,15,182, 78,252,253,139,68,252,234,4,139,44,252,234,137,68,202,4,137,44,202,139,6, @@ -637,8 +637,8 @@ static const unsigned char build_actionlist[15184] = { 139,149,233,15,182,78,252,253,137,4,202,199,68,202,4,237,139,6,15,182,204, 15,182,232,131,198,4,193,232,16,252,255,36,171,248,3,137,252,233,232,251, 1,28,15,183,70,252,254,252,247,208,252,233,244,2,255,252,247,208,139,106, - 252,248,139,173,233,139,4,135,252,233,244,154,255,252,247,208,139,106,252, - 248,139,173,233,139,4,135,252,233,244,155,255,15,182,252,236,15,182,192,129, + 252,248,139,173,233,139,4,135,252,233,244,155,255,252,247,208,139,106,252, + 248,139,173,233,139,4,135,252,233,244,156,255,15,182,252,236,15,182,192,129, 124,253,252,234,4,239,15,133,244,36,139,44,252,234,129,124,253,194,4,239, 15,135,244,251,255,252,242,15,16,4,194,252,242,15,45,192,252,242,15,42,200, 102,15,46,193,255,221,4,194,219,20,36,219,4,36,255,15,133,244,36,59,133,233, @@ -646,9 +646,9 @@ static const unsigned char build_actionlist[15184] = { 139,40,139,64,4,137,44,202,137,68,202,4,139,6,15,182,204,15,182,232,131,198, 4,193,232,16,252,255,36,171,248,2,131,189,233,0,15,132,244,1,139,141,233, 252,246,129,233,235,15,132,244,36,15,182,78,252,253,252,233,244,1,248,5,255, - 129,124,253,194,4,239,15,133,244,36,139,4,194,252,233,244,154,255,15,182, + 129,124,253,194,4,239,15,133,244,36,139,4,194,252,233,244,155,255,15,182, 252,236,15,182,192,252,247,208,139,4,135,129,124,253,252,234,4,239,15,133, - 244,34,139,44,252,234,248,154,139,141,233,35,136,233,105,201,239,3,141,233, + 244,34,139,44,252,234,248,155,139,141,233,35,136,233,105,201,239,3,141,233, 248,1,129,185,233,239,15,133,244,250,57,129,233,15,133,244,250,129,121,253, 4,239,15,132,244,251,15,182,70,252,253,139,41,139,73,4,137,44,194,248,2,255, 137,76,194,4,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36, @@ -666,10 +666,10 @@ static const unsigned char build_actionlist[15184] = { 104,4,137,8,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171, 248,3,131,189,233,0,15,132,244,1,139,141,233,255,252,246,129,233,235,15,132, 244,39,15,182,78,252,253,252,233,244,1,248,5,129,124,253,194,4,239,15,133, - 244,39,139,4,194,252,233,244,155,248,7,128,165,233,235,139,139,233,137,171, + 244,39,139,4,194,252,233,244,156,248,7,128,165,233,235,139,139,233,137,171, 233,137,141,233,15,182,78,252,253,252,233,244,2,255,15,182,252,236,15,182, 192,252,247,208,139,4,135,129,124,253,252,234,4,239,15,133,244,37,139,44, - 252,234,248,155,139,141,233,35,136,233,105,201,239,198,133,233,0,3,141,233, + 252,234,248,156,139,141,233,35,136,233,105,201,239,198,133,233,0,3,141,233, 248,1,129,185,233,239,15,133,244,251,57,129,233,15,133,244,251,129,121,253, 4,239,15,132,244,250,248,2,255,252,246,133,233,235,15,133,244,253,248,3,15, 182,70,252,253,139,108,194,4,139,4,194,137,105,4,137,1,139,6,15,182,204,15, @@ -730,7 +730,7 @@ static const unsigned char build_actionlist[15184] = { 248,6,255,199,71,252,252,237,131,199,8,255,199,68,194,252,244,237,255,131, 192,1,252,233,244,5,248,7,15,139,244,18,131,230,252,248,41,252,242,255,1, 252,241,255,137,252,245,209,252,237,129,229,239,102,131,172,253,43,233,1, - 15,132,244,138,255,141,12,202,255,129,121,253,4,239,15,135,244,52,129,121, + 15,132,244,139,255,141,12,202,255,129,121,253,4,239,15,135,244,52,129,121, 253,12,239,15,135,244,52,255,139,105,20,255,129,252,253,239,15,135,244,52, 255,252,242,15,16,1,252,242,15,16,73,8,255,252,242,15,88,65,16,252,242,15, 17,1,133,252,237,15,136,244,249,255,15,140,244,249,255,102,15,46,200,248, @@ -875,6 +875,7 @@ enum { GLOB_ff_bit_ror, GLOB_vm_record, GLOB_vm_hook, + GLOB_cont_hook, GLOB_vm_hotloop, GLOB_vm_hotcall, GLOB_vm_exit_handler, @@ -1024,6 +1025,7 @@ static const char *const globnames[] = { "ff_bit_ror", "vm_record", "vm_hook", + "cont_hook", "vm_hotloop", "vm_hotcall", "vm_exit_handler", @@ -1065,7 +1067,7 @@ static const char *const extnames[] = { "lj_str_new", "lj_tab_len@4", "lj_gc_step@4", - "lj_dispatch_ins", + "lj_dispatch_ins@8", "lj_trace_hot@8", "lj_trace_exit@8", "lj_meta_cat", @@ -1109,439 +1111,440 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) dasm_put(Dst, 280, Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->top), Dt1(->maxstack), DISPATCH_GL(vmstate), ~LJ_VMST_C, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top), FRAME_TYPE); dasm_put(Dst, 362, FRAME_C, DISPATCH_GL(vmstate), ~LJ_VMST_C, Dt1(->base)); dasm_put(Dst, 453, Dt1(->top), Dt1(->cframe), Dt1(->maxstack), LJ_TNIL, Dt1(->top)); - dasm_put(Dst, 532, Dt1(->top), CFRAME_RAWMASK, Dt1(->glref), Dt2(->vmstate), ~LJ_VMST_C, CFRAME_RAWMASK, 1+1, Dt1(->base), Dt1(->glref), GG_G2DISP, LJ_TFALSE, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP); - dasm_put(Dst, 637, FRAME_P, LJ_TTRUE, LUA_MINSTACK, Dt9(->bc), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top), Dt7(->gate)); - dasm_put(Dst, 759, FRAME_C, CFRAME_RESUME, Dt1(->glref), GG_G2DISP, Dt1(->cframe), Dt1(->status), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->status), Dt1(->base), Dt1(->top), FRAME_TYPE, FRAME_CP); - dasm_put(Dst, 864, FRAME_C, Dt1(->cframe), Dt1(->cframe), Dt1(->glref), GG_G2DISP, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top), LJ_TFUNC, Dt7(->gate)); - dasm_put(Dst, 957, Dt1(->stack), Dt1(->top), Dt1(->cframe), Dt1(->cframe), FRAME_CP, LJ_TNIL, Dt7(->pt), Dt9(->k), LJ_TSTR); - dasm_put(Dst, 1146, BC_GGET, DISPATCH_GL(tmptv), LJ_TTAB); + dasm_put(Dst, 532, Dt1(->top), Dt1(->glref), Dt2(->vmstate), ~LJ_VMST_C, CFRAME_RAWMASK, 1+1, Dt1(->base), Dt1(->glref), GG_G2DISP, LJ_TFALSE, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP); + dasm_put(Dst, 634, FRAME_P, LJ_TTRUE, LUA_MINSTACK, Dt9(->bc), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top), Dt7(->gate)); + dasm_put(Dst, 756, FRAME_C, CFRAME_RESUME, Dt1(->glref), GG_G2DISP, Dt1(->cframe), Dt1(->status), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->status), Dt1(->base), Dt1(->top), FRAME_TYPE, FRAME_CP); + dasm_put(Dst, 861, FRAME_C, Dt1(->cframe), Dt1(->cframe), Dt1(->glref), GG_G2DISP, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top), LJ_TFUNC, Dt7(->gate)); + dasm_put(Dst, 954, Dt1(->stack), Dt1(->top), Dt1(->cframe), Dt1(->cframe), FRAME_CP, LJ_TNIL, Dt7(->pt), Dt9(->k), LJ_TSTR); + dasm_put(Dst, 1143, BC_GGET, DISPATCH_GL(tmptv), LJ_TTAB); if (sse) { - dasm_put(Dst, 1182); + dasm_put(Dst, 1179); } else { - dasm_put(Dst, 1195); + dasm_put(Dst, 1192); } - dasm_put(Dst, 1208, Dt1(->base), Dt1(->base), Dt1(->top), FRAME_CONT, Dt7(->gate), LJ_TSTR, BC_GSET, DISPATCH_GL(tmptv)); - dasm_put(Dst, 1366, LJ_TTAB); + dasm_put(Dst, 1205, Dt1(->base), Dt1(->base), Dt1(->top), FRAME_CONT, Dt7(->gate), LJ_TSTR, BC_GSET, DISPATCH_GL(tmptv)); + dasm_put(Dst, 1363, LJ_TTAB); if (sse) { - dasm_put(Dst, 1182); + dasm_put(Dst, 1179); } else { - dasm_put(Dst, 1195); + dasm_put(Dst, 1192); } - dasm_put(Dst, 1386, Dt1(->base), Dt1(->base), Dt1(->top), FRAME_CONT, Dt7(->gate), Dt1(->base), Dt1(->base)); - dasm_put(Dst, 1593, -BCBIAS_J*4, LJ_TISTRUECOND, LJ_TISTRUECOND, Dt1(->base)); - dasm_put(Dst, 1704, Dt1(->base), Dt1(->base), FRAME_CONT, LJ_TFUNC); - dasm_put(Dst, 1833, Dt7(->gate), Dt1(->base), Dt1(->base), Dt1(->base), Dt1(->base), Dt7(->gate), Dt1(->base), Dt1(->base), GG_DISP_STATIC*4, 1+1); - dasm_put(Dst, 1993, LJ_TISTRUECOND, 1+1, ~LJ_TNUMX); + dasm_put(Dst, 1383, Dt1(->base), Dt1(->base), Dt1(->top), FRAME_CONT, Dt7(->gate), Dt1(->base), Dt1(->base)); + dasm_put(Dst, 1590, -BCBIAS_J*4, LJ_TISTRUECOND, LJ_TISTRUECOND, Dt1(->base)); + dasm_put(Dst, 1701, Dt1(->base), Dt1(->base), FRAME_CONT, LJ_TFUNC); + dasm_put(Dst, 1830, Dt7(->gate), Dt1(->base), Dt1(->base), Dt1(->base), Dt1(->base), Dt7(->gate), Dt1(->base), Dt1(->base), GG_DISP_STATIC*4, 1+1); + dasm_put(Dst, 1990, LJ_TISTRUECOND, 1+1, ~LJ_TNUMX); if (cmov) { - dasm_put(Dst, 2089); + dasm_put(Dst, 2086); } else { - dasm_put(Dst, 2093); + dasm_put(Dst, 2090); } - dasm_put(Dst, 2102, ((char *)(&((GCfuncC *)0)->upvalue)), LJ_TSTR, 1+1, LJ_TTAB, Dt6(->metatable), LJ_TNIL, DISPATCH_GL(mmname)+4*MM_metatable, LJ_TTAB, Dt6(->hmask)); - dasm_put(Dst, 2190, Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), DtB(->next), LJ_TNIL); - dasm_put(Dst, 2245, LJ_TUDATA, LJ_TISNUM, LJ_TNUMX, DISPATCH_GL(gcroot[GCROOT_BASEMT]), 2+1, LJ_TTAB); - dasm_put(Dst, 2317, Dt6(->metatable), LJ_TTAB, Dt6(->metatable), LJ_TTAB, Dt6(->marked), LJ_GC_BLACK, Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); - dasm_put(Dst, 2382, 2+1, LJ_TTAB, 1+1, LJ_TISNUM); + dasm_put(Dst, 2099, ((char *)(&((GCfuncC *)0)->upvalue)), LJ_TSTR, 1+1, LJ_TTAB, Dt6(->metatable), LJ_TNIL, DISPATCH_GL(mmname)+4*MM_metatable, LJ_TTAB, Dt6(->hmask)); + dasm_put(Dst, 2187, Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), DtB(->next), LJ_TNIL); + dasm_put(Dst, 2242, LJ_TUDATA, LJ_TISNUM, LJ_TNUMX, DISPATCH_GL(gcroot[GCROOT_BASEMT]), 2+1, LJ_TTAB); + dasm_put(Dst, 2314, Dt6(->metatable), LJ_TTAB, Dt6(->metatable), LJ_TTAB, Dt6(->marked), LJ_GC_BLACK, Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 2379, 2+1, LJ_TTAB, 1+1, LJ_TISNUM); if (sse) { - dasm_put(Dst, 2473); + dasm_put(Dst, 2470); } else { - dasm_put(Dst, 2483); + dasm_put(Dst, 2480); } - dasm_put(Dst, 2490, 1+1, LJ_TSTR, LJ_TSTR, LJ_TISNUM, DISPATCH_GL(gcroot[GCROOT_BASEMT_NUM]), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold)); - dasm_put(Dst, 2552, Dt1(->base), Dt1(->base), 1+1, LJ_TTAB, Dt1(->base)); - dasm_put(Dst, 2642, Dt1(->base), 1+2, LJ_TNIL, LJ_TNIL, 1+1, LJ_TTAB); - dasm_put(Dst, 2748, Dt8(->upvalue[0]), LJ_TFUNC, LJ_TNIL, 1+3, 1+1, LJ_TTAB, LJ_TISNUM); + dasm_put(Dst, 2487, 1+1, LJ_TSTR, LJ_TSTR, LJ_TISNUM, DISPATCH_GL(gcroot[GCROOT_BASEMT_NUM]), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold)); + dasm_put(Dst, 2549, Dt1(->base), Dt1(->base), 1+1, LJ_TTAB, Dt1(->base)); + dasm_put(Dst, 2639, Dt1(->base), 1+2, LJ_TNIL, LJ_TNIL, 1+1, LJ_TTAB); + dasm_put(Dst, 2745, Dt8(->upvalue[0]), LJ_TFUNC, LJ_TNIL, 1+3, 1+1, LJ_TTAB, LJ_TISNUM); if (sse) { - dasm_put(Dst, 2803); + dasm_put(Dst, 2800); } else { - dasm_put(Dst, 2842); + dasm_put(Dst, 2839); } - dasm_put(Dst, 2860, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->hmask), 1+0); - dasm_put(Dst, 2946, 1+1, LJ_TTAB, Dt8(->upvalue[0]), LJ_TFUNC); + dasm_put(Dst, 2857, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->hmask), 1+0); + dasm_put(Dst, 2943, 1+1, LJ_TTAB, Dt8(->upvalue[0]), LJ_TFUNC); if (sse) { - dasm_put(Dst, 2976); + dasm_put(Dst, 2973); } else { - dasm_put(Dst, 2986); + dasm_put(Dst, 2983); } - dasm_put(Dst, 2993, 1+3, 1+1, 8+FRAME_PCALL, DISPATCH_GL(hookmask), HOOK_ACTIVE, LJ_TFUNC, Dt7(->gate)); - dasm_put(Dst, 3066, 2+1, LJ_TFUNC, LJ_TFUNC, 2*8+FRAME_PCALL, 2*8, 1+1, LJ_TTHREAD); - dasm_put(Dst, 3164, Dt1(->cframe), Dt1(->status), LUA_YIELD, Dt1(->top), Dt1(->base), Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top)); - dasm_put(Dst, 3229, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top)); - dasm_put(Dst, 3333, Dt1(->maxstack), LJ_TTRUE, FRAME_TYPE, LJ_TFALSE, Dt1(->top), Dt1(->top), 1+2); - dasm_put(Dst, 3452, Dt1(->top), Dt1(->base), Dt8(->upvalue[0].gcr), Dt1(->cframe), Dt1(->status), LUA_YIELD, Dt1(->top), Dt1(->base)); - dasm_put(Dst, 3532, Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base)); - dasm_put(Dst, 3640, LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->maxstack), FRAME_TYPE); - dasm_put(Dst, 3736, Dt1(->top), Dt1(->base), Dt1(->cframe), CFRAME_CANYIELD, Dt1(->base), Dt1(->top), Dt1(->cframe), LUA_YIELD, Dt1(->status)); + dasm_put(Dst, 2990, 1+3, 1+1, 8+FRAME_PCALL, DISPATCH_GL(hookmask), HOOK_ACTIVE, LJ_TFUNC, Dt7(->gate)); + dasm_put(Dst, 3063, 2+1, LJ_TFUNC, LJ_TFUNC, 2*8+FRAME_PCALL, 2*8, 1+1, LJ_TTHREAD); + dasm_put(Dst, 3161, Dt1(->cframe), Dt1(->status), LUA_YIELD, Dt1(->top), Dt1(->base), Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top)); + dasm_put(Dst, 3226, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top)); + dasm_put(Dst, 3330, Dt1(->maxstack), LJ_TTRUE, FRAME_TYPE, LJ_TFALSE, Dt1(->top), Dt1(->top), 1+2); + dasm_put(Dst, 3449, Dt1(->top), Dt1(->base), Dt8(->upvalue[0].gcr), Dt1(->cframe), Dt1(->status), LUA_YIELD, Dt1(->top), Dt1(->base)); + dasm_put(Dst, 3529, Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base)); + dasm_put(Dst, 3637, LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->maxstack), FRAME_TYPE); + dasm_put(Dst, 3733, Dt1(->top), Dt1(->base), Dt1(->cframe), CFRAME_CANYIELD, Dt1(->base), Dt1(->top), Dt1(->cframe), LUA_YIELD, Dt1(->status)); if (sse) { - dasm_put(Dst, 3822, 1+1, LJ_TISNUM); + dasm_put(Dst, 3819, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 3883, 1+1, LJ_TISNUM); + dasm_put(Dst, 3880, 1+1, LJ_TISNUM); } - dasm_put(Dst, 3915, 1+1, FRAME_TYPE, LJ_TNIL); + dasm_put(Dst, 3912, 1+1, FRAME_TYPE, LJ_TNIL); if (sse) { - dasm_put(Dst, 3996, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM); - dasm_put(Dst, 4058, 1+1, LJ_TISNUM); + dasm_put(Dst, 3993, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM); + dasm_put(Dst, 4055, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 4088, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM); - dasm_put(Dst, 4147, 1+1, LJ_TISNUM); + dasm_put(Dst, 4085, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM); + dasm_put(Dst, 4144, 1+1, LJ_TISNUM); } - dasm_put(Dst, 4174, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1); - dasm_put(Dst, 4243, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1); - dasm_put(Dst, 4300, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1); - dasm_put(Dst, 4363, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM); - dasm_put(Dst, 4453); + dasm_put(Dst, 4171, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1); + dasm_put(Dst, 4240, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1); + dasm_put(Dst, 4297, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1); + dasm_put(Dst, 4360, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM); + dasm_put(Dst, 4450); if (sse) { - dasm_put(Dst, 4465, 1+1, LJ_TISNUM); + dasm_put(Dst, 4462, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 4496, 1+1, LJ_TISNUM); + dasm_put(Dst, 4493, 1+1, LJ_TISNUM); } - dasm_put(Dst, 4521); + dasm_put(Dst, 4518); if (sse) { - dasm_put(Dst, 4543, 1+1, LJ_TISNUM); + dasm_put(Dst, 4540, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 4574, 1+1, LJ_TISNUM); + dasm_put(Dst, 4571, 1+1, LJ_TISNUM); } - dasm_put(Dst, 4599); + dasm_put(Dst, 4596); if (sse) { - dasm_put(Dst, 4621, 1+1, LJ_TISNUM); + dasm_put(Dst, 4618, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 4652, 1+1, LJ_TISNUM); + dasm_put(Dst, 4649, 1+1, LJ_TISNUM); } - dasm_put(Dst, 4677); + dasm_put(Dst, 4674); if (sse) { - dasm_put(Dst, 4701, 1+1, LJ_TISNUM, Dt8(->upvalue[0])); + dasm_put(Dst, 4698, 1+1, LJ_TISNUM, Dt8(->upvalue[0])); } else { - dasm_put(Dst, 4736, 1+1, LJ_TISNUM, Dt8(->upvalue[0])); + dasm_put(Dst, 4733, 1+1, LJ_TISNUM, Dt8(->upvalue[0])); } - dasm_put(Dst, 4765, 2+1, LJ_TISNUM, LJ_TISNUM, 2+1, LJ_TISNUM, LJ_TISNUM); - dasm_put(Dst, 4830, 1+1, LJ_TISNUM); + dasm_put(Dst, 4762, 2+1, LJ_TISNUM, LJ_TISNUM, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 4827, 1+1, LJ_TISNUM); if (sse) { - dasm_put(Dst, 4925); + dasm_put(Dst, 4922); } else { - dasm_put(Dst, 4931); + dasm_put(Dst, 4928); } - dasm_put(Dst, 4940); + dasm_put(Dst, 4937); if (sse) { - dasm_put(Dst, 4965); + dasm_put(Dst, 4962); } else { - dasm_put(Dst, 4971); + dasm_put(Dst, 4968); } - dasm_put(Dst, 4974, 1+2); + dasm_put(Dst, 4971, 1+2); if (sse) { - dasm_put(Dst, 4983); + dasm_put(Dst, 4980); } else { - dasm_put(Dst, 4991); + dasm_put(Dst, 4988); } - dasm_put(Dst, 1590); + dasm_put(Dst, 1587); if (sse) { - dasm_put(Dst, 4999); + dasm_put(Dst, 4996); } else { - dasm_put(Dst, 5031); + dasm_put(Dst, 5028); } - dasm_put(Dst, 5050); + dasm_put(Dst, 5047); if (sse) { - dasm_put(Dst, 5066, 1+1, LJ_TISNUM); + dasm_put(Dst, 5063, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 5091, 1+1, LJ_TISNUM); + dasm_put(Dst, 5088, 1+1, LJ_TISNUM); } - dasm_put(Dst, 5113); + dasm_put(Dst, 5110); if (sse) { - dasm_put(Dst, 5131); + dasm_put(Dst, 5128); } else { - dasm_put(Dst, 5157); + dasm_put(Dst, 5154); } - dasm_put(Dst, 5174, 1+2); + dasm_put(Dst, 5171, 1+2); if (sse) { - dasm_put(Dst, 5214); + dasm_put(Dst, 5211); } else { - dasm_put(Dst, 5222); + dasm_put(Dst, 5219); } - dasm_put(Dst, 5232, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 5229, 2+1, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 5284, 1+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 5281, 1+1, LJ_TISNUM, LJ_TISNUM); } else { - dasm_put(Dst, 5331, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 5328, 2+1, LJ_TISNUM, LJ_TISNUM); } if (sse) { - dasm_put(Dst, 5372, 1+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 5369, 1+1, LJ_TISNUM, LJ_TISNUM); } else { - dasm_put(Dst, 5443, 1+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 5440, 1+1, LJ_TISNUM, LJ_TISNUM); if (cmov) { - dasm_put(Dst, 5496); + dasm_put(Dst, 5493); } else { - dasm_put(Dst, 5504); + dasm_put(Dst, 5501); } - dasm_put(Dst, 5435); + dasm_put(Dst, 5432); } if (sse) { - dasm_put(Dst, 5525, 1+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 5522, 1+1, LJ_TISNUM, LJ_TISNUM); } else { - dasm_put(Dst, 5596, 1+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 5593, 1+1, LJ_TISNUM, LJ_TISNUM); if (cmov) { - dasm_put(Dst, 5649); + dasm_put(Dst, 5646); } else { - dasm_put(Dst, 5657); + dasm_put(Dst, 5654); } - dasm_put(Dst, 5435); + dasm_put(Dst, 5432); } if (!sse) { - dasm_put(Dst, 5678); + dasm_put(Dst, 5675); } - dasm_put(Dst, 5687, 1+1, LJ_TSTR); + dasm_put(Dst, 5684, 1+1, LJ_TSTR); if (sse) { - dasm_put(Dst, 5709, Dt5(->len)); + dasm_put(Dst, 5706, Dt5(->len)); } else { - dasm_put(Dst, 5720, Dt5(->len)); + dasm_put(Dst, 5717, Dt5(->len)); } - dasm_put(Dst, 5728, 1+1, LJ_TSTR, Dt5(->len), Dt5([1])); + dasm_put(Dst, 5725, 1+1, LJ_TSTR, Dt5(->len), Dt5([1])); if (sse) { - dasm_put(Dst, 5762); + dasm_put(Dst, 5759); } else { - dasm_put(Dst, 5772); + dasm_put(Dst, 5769); } - dasm_put(Dst, 5785, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+1, LJ_TISNUM); + dasm_put(Dst, 5782, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+1, LJ_TISNUM); if (sse) { - dasm_put(Dst, 5820); + dasm_put(Dst, 5817); } else { - dasm_put(Dst, 5840); + dasm_put(Dst, 5837); } - dasm_put(Dst, 5860, Dt1(->base), Dt1(->base), LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+2, LJ_TISNUM); - dasm_put(Dst, 2468); + dasm_put(Dst, 5857, Dt1(->base), Dt1(->base), LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+2, LJ_TISNUM); + dasm_put(Dst, 2465); if (sse) { - dasm_put(Dst, 5971); + dasm_put(Dst, 5968); } else { - dasm_put(Dst, 5982); + dasm_put(Dst, 5979); } - dasm_put(Dst, 5990, LJ_TSTR, LJ_TISNUM, Dt5(->len)); + dasm_put(Dst, 5987, LJ_TSTR, LJ_TISNUM, Dt5(->len)); if (sse) { - dasm_put(Dst, 6020); + dasm_put(Dst, 6017); } else { - dasm_put(Dst, 6027); + dasm_put(Dst, 6024); } - dasm_put(Dst, 6039, sizeof(GCstr)-1); - dasm_put(Dst, 6114, 2+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold)); - dasm_put(Dst, 6173, LJ_TSTR, LJ_TISNUM); + dasm_put(Dst, 6036, sizeof(GCstr)-1); + dasm_put(Dst, 6111, 2+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold)); + dasm_put(Dst, 6170, LJ_TSTR, LJ_TISNUM); if (sse) { - dasm_put(Dst, 6198); + dasm_put(Dst, 6195); } else { - dasm_put(Dst, 6205); + dasm_put(Dst, 6202); } - dasm_put(Dst, 6217, Dt5(->len), DISPATCH_GL(tmpbuf.sz), Dt5([1]), DISPATCH_GL(tmpbuf.buf), DISPATCH_GL(tmpbuf.buf), 1+1); - dasm_put(Dst, 6282, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf)); - dasm_put(Dst, 6349, 1+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz)); - dasm_put(Dst, 6424, sizeof(GCstr), DISPATCH_GL(tmpbuf.buf), 1+1); - dasm_put(Dst, 6509, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf)); - dasm_put(Dst, 6583, 1+1, LJ_TTAB); + dasm_put(Dst, 6214, Dt5(->len), DISPATCH_GL(tmpbuf.sz), Dt5([1]), DISPATCH_GL(tmpbuf.buf), DISPATCH_GL(tmpbuf.buf), 1+1); + dasm_put(Dst, 6279, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf)); + dasm_put(Dst, 6346, 1+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz)); + dasm_put(Dst, 6421, sizeof(GCstr), DISPATCH_GL(tmpbuf.buf), 1+1); + dasm_put(Dst, 6506, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf)); + dasm_put(Dst, 6580, 1+1, LJ_TTAB); if (sse) { - dasm_put(Dst, 6659); + dasm_put(Dst, 6656); } else { - dasm_put(Dst, 6669); + dasm_put(Dst, 6666); } if (sse) { - dasm_put(Dst, 6680, 1+1, LJ_TISNUM); + dasm_put(Dst, 6677, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 6737, 1+1, LJ_TISNUM); + dasm_put(Dst, 6734, 1+1, LJ_TISNUM); } if (sse) { - dasm_put(Dst, 6781, 1+1, LJ_TISNUM); + dasm_put(Dst, 6778, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 6829, 1+1, LJ_TISNUM); + dasm_put(Dst, 6826, 1+1, LJ_TISNUM); } - dasm_put(Dst, 6869); + dasm_put(Dst, 6866); if (sse) { - dasm_put(Dst, 6879); + dasm_put(Dst, 6876); } - dasm_put(Dst, 6884, LJ_TISNUM); + dasm_put(Dst, 6881, LJ_TISNUM); if (sse) { - dasm_put(Dst, 6902); + dasm_put(Dst, 6899); } else { - dasm_put(Dst, 6919); + dasm_put(Dst, 6916); } - dasm_put(Dst, 6932); + dasm_put(Dst, 6929); if (sse) { - dasm_put(Dst, 6940, 1+1, LJ_TISNUM); + dasm_put(Dst, 6937, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 6988, 1+1, LJ_TISNUM); + dasm_put(Dst, 6985, 1+1, LJ_TISNUM); } - dasm_put(Dst, 6869); + dasm_put(Dst, 6866); if (sse) { - dasm_put(Dst, 6879); + dasm_put(Dst, 6876); } - dasm_put(Dst, 6884, LJ_TISNUM); + dasm_put(Dst, 6881, LJ_TISNUM); if (sse) { - dasm_put(Dst, 7028); + dasm_put(Dst, 7025); } else { - dasm_put(Dst, 7045); + dasm_put(Dst, 7042); } - dasm_put(Dst, 6932); + dasm_put(Dst, 6929); if (sse) { - dasm_put(Dst, 7058, 1+1, LJ_TISNUM); + dasm_put(Dst, 7055, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 7106, 1+1, LJ_TISNUM); + dasm_put(Dst, 7103, 1+1, LJ_TISNUM); } - dasm_put(Dst, 6869); + dasm_put(Dst, 6866); if (sse) { - dasm_put(Dst, 6879); + dasm_put(Dst, 6876); } - dasm_put(Dst, 6884, LJ_TISNUM); + dasm_put(Dst, 6881, LJ_TISNUM); if (sse) { - dasm_put(Dst, 7146); + dasm_put(Dst, 7143); } else { - dasm_put(Dst, 7163); + dasm_put(Dst, 7160); } - dasm_put(Dst, 6932); + dasm_put(Dst, 6929); if (sse) { - dasm_put(Dst, 7176, 1+1, LJ_TISNUM); + dasm_put(Dst, 7173, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 7224, 1+1, LJ_TISNUM); + dasm_put(Dst, 7221, 1+1, LJ_TISNUM); } - dasm_put(Dst, 7264); + dasm_put(Dst, 7261); if (sse) { - dasm_put(Dst, 7271, 1+1, LJ_TISNUM); + dasm_put(Dst, 7268, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 7319, 1+1, LJ_TISNUM); + dasm_put(Dst, 7316, 1+1, LJ_TISNUM); } - dasm_put(Dst, 7359); + dasm_put(Dst, 7356); if (sse) { - dasm_put(Dst, 7363); + dasm_put(Dst, 7360); } else { - dasm_put(Dst, 7390); + dasm_put(Dst, 7387); } - dasm_put(Dst, 7405); + dasm_put(Dst, 7402); if (sse) { - dasm_put(Dst, 6654); + dasm_put(Dst, 6651); } - dasm_put(Dst, 7408); + dasm_put(Dst, 7405); if (sse) { - dasm_put(Dst, 7417, 1+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 7414, 1+1, LJ_TISNUM, LJ_TISNUM); } else { - dasm_put(Dst, 7491, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 7488, 2+1, LJ_TISNUM, LJ_TISNUM); } - dasm_put(Dst, 7557); + dasm_put(Dst, 7554); if (sse) { - dasm_put(Dst, 7566, 1+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 7563, 1+1, LJ_TISNUM, LJ_TISNUM); } else { - dasm_put(Dst, 7640, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 7637, 2+1, LJ_TISNUM, LJ_TISNUM); } - dasm_put(Dst, 7706); + dasm_put(Dst, 7703); if (sse) { - dasm_put(Dst, 7716, 1+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 7713, 1+1, LJ_TISNUM, LJ_TISNUM); } else { - dasm_put(Dst, 7790, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 7787, 2+1, LJ_TISNUM, LJ_TISNUM); } - dasm_put(Dst, 7856); + dasm_put(Dst, 7853); if (sse) { - dasm_put(Dst, 7866, 1+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 7863, 1+1, LJ_TISNUM, LJ_TISNUM); } else { - dasm_put(Dst, 7940, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 7937, 2+1, LJ_TISNUM, LJ_TISNUM); } - dasm_put(Dst, 8006); + dasm_put(Dst, 8003); if (sse) { - dasm_put(Dst, 8015, 1+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 8012, 1+1, LJ_TISNUM, LJ_TISNUM); } else { - dasm_put(Dst, 8089, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 8086, 2+1, LJ_TISNUM, LJ_TISNUM); } - dasm_put(Dst, 8155, 1+2, 1+1, Dt1(->base), 8*LUA_MINSTACK, Dt1(->top), Dt1(->maxstack), Dt8(->f), Dt1(->base)); - dasm_put(Dst, 8239, Dt1(->top), Dt7(->gate), LJ_TFUNC, Dt7(->gate), Dt1(->base), LUA_MINSTACK, Dt1(->base), Dt1(->top)); - dasm_put(Dst, 8358, Dt1(->base), Dt1(->top)); + dasm_put(Dst, 8152, 1+2, 1+1, Dt1(->base), 8*LUA_MINSTACK, Dt1(->top), Dt1(->maxstack), Dt8(->f), Dt1(->base)); + dasm_put(Dst, 8236, Dt1(->top), Dt7(->gate), LJ_TFUNC, Dt7(->gate), Dt1(->base), LUA_MINSTACK, Dt1(->base), Dt1(->top)); + dasm_put(Dst, 8355, Dt1(->base), Dt1(->top)); #if LJ_HASJIT - dasm_put(Dst, 8399, DISPATCH_GL(hookmask), HOOK_VMEVENT, HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount)); + dasm_put(Dst, 8396, DISPATCH_GL(hookmask), HOOK_VMEVENT, HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount)); #endif - dasm_put(Dst, 8430, DISPATCH_GL(hookmask), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount), LUA_MASKLINE, Dt1(->base), Dt1(->base), GG_DISP_STATIC*4); + dasm_put(Dst, 8427, DISPATCH_GL(hookmask), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount), LUA_MASKLINE, Dt1(->base), Dt1(->base)); + dasm_put(Dst, 8493, GG_DISP_STATIC*4); #if LJ_HASJIT - dasm_put(Dst, 8521, Dt1(->base), GG_DISP2J, DISPATCH_J(L)); + dasm_put(Dst, 8528, Dt1(->base), GG_DISP2J, DISPATCH_J(L)); #endif - dasm_put(Dst, 8550); + dasm_put(Dst, 8557); #if LJ_HASJIT - dasm_put(Dst, 8553, Dt1(->base), GG_DISP2J, DISPATCH_J(L), Dt1(->base)); + dasm_put(Dst, 8560, Dt1(->base), GG_DISP2J, DISPATCH_J(L), Dt1(->base)); #endif - dasm_put(Dst, 8599); + dasm_put(Dst, 8606); #if LJ_HASJIT - dasm_put(Dst, 8602, DISPATCH_GL(vmstate), DISPATCH_GL(vmstate), ~LJ_VMST_EXIT, DISPATCH_J(exitno), DISPATCH_J(parent), 8*8+16, DISPATCH_J(flags), JIT_F_SSE2, DISPATCH_GL(jit_L), DISPATCH_GL(jit_base), DISPATCH_J(L), Dt1(->base), GG_DISP2J, Dt1(->base)); + dasm_put(Dst, 8609, DISPATCH_GL(vmstate), DISPATCH_GL(vmstate), ~LJ_VMST_EXIT, DISPATCH_J(exitno), DISPATCH_J(parent), 8*8+16, DISPATCH_J(flags), JIT_F_SSE2, DISPATCH_GL(jit_L), DISPATCH_GL(jit_base), DISPATCH_J(L), Dt1(->base), GG_DISP2J, Dt1(->base)); #endif - dasm_put(Dst, 8745); + dasm_put(Dst, 8752); #if LJ_HASJIT - dasm_put(Dst, 8748, Dt7(->pt), Dt9(->k), DISPATCH_GL(jit_L), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP); + dasm_put(Dst, 8755, Dt7(->pt), Dt9(->k), DISPATCH_GL(jit_L), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP); #endif - dasm_put(Dst, 8788); + dasm_put(Dst, 8795); if (!sse) { - dasm_put(Dst, 8791); + dasm_put(Dst, 8798); } - dasm_put(Dst, 8836); + dasm_put(Dst, 8843); if (!sse) { - dasm_put(Dst, 8938); + dasm_put(Dst, 8945); } - dasm_put(Dst, 8983); + dasm_put(Dst, 8990); if (!sse) { - dasm_put(Dst, 9085); + dasm_put(Dst, 9092); } - dasm_put(Dst, 9124); + dasm_put(Dst, 9131); if (sse) { - dasm_put(Dst, 9229); + dasm_put(Dst, 9236); } else { - dasm_put(Dst, 9359); + dasm_put(Dst, 9366); } - dasm_put(Dst, 9406); + dasm_put(Dst, 9413); if (!sse) { - dasm_put(Dst, 9480); + dasm_put(Dst, 9487); if (cmov) { - dasm_put(Dst, 9491); + dasm_put(Dst, 9498); } else { - dasm_put(Dst, 9495); - } dasm_put(Dst, 9502); - dasm_put(Dst, 9576); - dasm_put(Dst, 9676); + } + dasm_put(Dst, 9509); + dasm_put(Dst, 9583); + dasm_put(Dst, 9683); if (cmov) { - dasm_put(Dst, 9679); + dasm_put(Dst, 9686); } else { - dasm_put(Dst, 9683); - } dasm_put(Dst, 9690); + } + dasm_put(Dst, 9697); if (cmov) { - dasm_put(Dst, 9491); + dasm_put(Dst, 9498); } else { - dasm_put(Dst, 9495); + dasm_put(Dst, 9502); } - dasm_put(Dst, 9708); + dasm_put(Dst, 9715); } else { - dasm_put(Dst, 9787); + dasm_put(Dst, 9794); } - dasm_put(Dst, 9790); - dasm_put(Dst, 9875); - dasm_put(Dst, 10006); - dasm_put(Dst, 10205); + dasm_put(Dst, 9797); + dasm_put(Dst, 9882); + dasm_put(Dst, 10013); + dasm_put(Dst, 10212); if (sse) { - dasm_put(Dst, 10228); - dasm_put(Dst, 10285); - dasm_put(Dst, 10376); + dasm_put(Dst, 10235); + dasm_put(Dst, 10292); + dasm_put(Dst, 10383); } else { - dasm_put(Dst, 10418); - dasm_put(Dst, 10510); + dasm_put(Dst, 10425); + dasm_put(Dst, 10517); } - dasm_put(Dst, 10556); + dasm_put(Dst, 10563); if (sse) { - dasm_put(Dst, 10562); - dasm_put(Dst, 10667); - dasm_put(Dst, 10750); + dasm_put(Dst, 10569); + dasm_put(Dst, 10674); + dasm_put(Dst, 10757); } else { - dasm_put(Dst, 10822); - dasm_put(Dst, 10905); + dasm_put(Dst, 10829); + dasm_put(Dst, 10912); if (cmov) { - dasm_put(Dst, 10960); + dasm_put(Dst, 10967); } else { - dasm_put(Dst, 10979); + dasm_put(Dst, 10986); } - dasm_put(Dst, 10818); + dasm_put(Dst, 10825); } - dasm_put(Dst, 11020); + dasm_put(Dst, 11027); } /* Generate the code for a single instruction. */ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) { int vk = 0; - dasm_put(Dst, 11074, defop); + dasm_put(Dst, 11081, defop); switch (op) { @@ -1550,619 +1553,619 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) /* Remember: all ops branch for a true comparison, fall through otherwise. */ case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT: - dasm_put(Dst, 11076, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11083, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11097); + dasm_put(Dst, 11104); } else { - dasm_put(Dst, 11112); + dasm_put(Dst, 11119); if (cmov) { - dasm_put(Dst, 11122); + dasm_put(Dst, 11129); } else { - dasm_put(Dst, 11128); + dasm_put(Dst, 11135); } } switch (op) { case BC_ISLT: - dasm_put(Dst, 11135); + dasm_put(Dst, 11142); break; case BC_ISGE: - dasm_put(Dst, 10371); + dasm_put(Dst, 10378); break; case BC_ISLE: - dasm_put(Dst, 6578); + dasm_put(Dst, 6575); break; case BC_ISGT: - dasm_put(Dst, 11140); + dasm_put(Dst, 11147); break; default: break; /* Shut up GCC. */ } - dasm_put(Dst, 11145, -BCBIAS_J*4); + dasm_put(Dst, 11152, -BCBIAS_J*4); break; case BC_ISEQV: case BC_ISNEV: vk = op == BC_ISEQV; - dasm_put(Dst, 11178, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11185, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11204); + dasm_put(Dst, 11211); } else { - dasm_put(Dst, 11216); + dasm_put(Dst, 11223); if (cmov) { - dasm_put(Dst, 11122); + dasm_put(Dst, 11129); } else { - dasm_put(Dst, 11128); + dasm_put(Dst, 11135); } } iseqne_fp: if (vk) { - dasm_put(Dst, 11223); + dasm_put(Dst, 11230); } else { - dasm_put(Dst, 11232); + dasm_put(Dst, 11239); } iseqne_end: if (vk) { - dasm_put(Dst, 11241, -BCBIAS_J*4); + dasm_put(Dst, 11248, -BCBIAS_J*4); } else { - dasm_put(Dst, 11256, -BCBIAS_J*4); + dasm_put(Dst, 11263, -BCBIAS_J*4); } - dasm_put(Dst, 8580); + dasm_put(Dst, 8587); if (op == BC_ISEQV || op == BC_ISNEV) { - dasm_put(Dst, 11271, LJ_TISPRI, LJ_TISTABUD, Dt6(->metatable), Dt6(->nomm), 1<metatable), Dt6(->nomm), 1<len)); + dasm_put(Dst, 11614, Dt5(->len)); } else { - dasm_put(Dst, 11625, Dt5(->len)); + dasm_put(Dst, 11632, Dt5(->len)); } - dasm_put(Dst, 11634, LJ_TTAB); + dasm_put(Dst, 11641, LJ_TTAB); if (sse) { - dasm_put(Dst, 11674); + dasm_put(Dst, 11681); } else { - dasm_put(Dst, 11683); + dasm_put(Dst, 11690); } - dasm_put(Dst, 11693); + dasm_put(Dst, 11700); break; /* -- Binary ops -------------------------------------------------------- */ case BC_ADDVN: case BC_ADDNV: case BC_ADDVV: - dasm_put(Dst, 11703); + dasm_put(Dst, 11710); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11711, LJ_TISNUM); + dasm_put(Dst, 11718, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11723); + dasm_put(Dst, 11730); } else { - dasm_put(Dst, 11737); + dasm_put(Dst, 11744); } break; case 1: - dasm_put(Dst, 11745, LJ_TISNUM); + dasm_put(Dst, 11752, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11757); + dasm_put(Dst, 11764); } else { - dasm_put(Dst, 11771); + dasm_put(Dst, 11778); } break; default: - dasm_put(Dst, 11779, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11786, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11801); + dasm_put(Dst, 11808); } else { - dasm_put(Dst, 11815); + dasm_put(Dst, 11822); } break; } if (sse) { - dasm_put(Dst, 11577); + dasm_put(Dst, 11584); } else { - dasm_put(Dst, 11589); + dasm_put(Dst, 11596); } - dasm_put(Dst, 8580); + dasm_put(Dst, 8587); break; case BC_SUBVN: case BC_SUBNV: case BC_SUBVV: - dasm_put(Dst, 11703); + dasm_put(Dst, 11710); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11711, LJ_TISNUM); + dasm_put(Dst, 11718, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11823); + dasm_put(Dst, 11830); } else { - dasm_put(Dst, 11837); + dasm_put(Dst, 11844); } break; case 1: - dasm_put(Dst, 11745, LJ_TISNUM); + dasm_put(Dst, 11752, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11845); + dasm_put(Dst, 11852); } else { - dasm_put(Dst, 11859); + dasm_put(Dst, 11866); } break; default: - dasm_put(Dst, 11779, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11786, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11867); + dasm_put(Dst, 11874); } else { - dasm_put(Dst, 11881); + dasm_put(Dst, 11888); } break; } if (sse) { - dasm_put(Dst, 11577); + dasm_put(Dst, 11584); } else { - dasm_put(Dst, 11589); + dasm_put(Dst, 11596); } - dasm_put(Dst, 8580); + dasm_put(Dst, 8587); break; case BC_MULVN: case BC_MULNV: case BC_MULVV: - dasm_put(Dst, 11703); + dasm_put(Dst, 11710); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11711, LJ_TISNUM); + dasm_put(Dst, 11718, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11889); + dasm_put(Dst, 11896); } else { - dasm_put(Dst, 11903); + dasm_put(Dst, 11910); } break; case 1: - dasm_put(Dst, 11745, LJ_TISNUM); + dasm_put(Dst, 11752, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11911); + dasm_put(Dst, 11918); } else { - dasm_put(Dst, 11925); + dasm_put(Dst, 11932); } break; default: - dasm_put(Dst, 11779, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11786, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11933); + dasm_put(Dst, 11940); } else { - dasm_put(Dst, 11947); + dasm_put(Dst, 11954); } break; } if (sse) { - dasm_put(Dst, 11577); + dasm_put(Dst, 11584); } else { - dasm_put(Dst, 11589); + dasm_put(Dst, 11596); } - dasm_put(Dst, 8580); + dasm_put(Dst, 8587); break; case BC_DIVVN: case BC_DIVNV: case BC_DIVVV: - dasm_put(Dst, 11703); + dasm_put(Dst, 11710); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11711, LJ_TISNUM); + dasm_put(Dst, 11718, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11955); + dasm_put(Dst, 11962); } else { - dasm_put(Dst, 11969); + dasm_put(Dst, 11976); } break; case 1: - dasm_put(Dst, 11745, LJ_TISNUM); + dasm_put(Dst, 11752, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11977); + dasm_put(Dst, 11984); } else { - dasm_put(Dst, 11991); + dasm_put(Dst, 11998); } break; default: - dasm_put(Dst, 11779, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11786, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11999); + dasm_put(Dst, 12006); } else { - dasm_put(Dst, 12013); + dasm_put(Dst, 12020); } break; } if (sse) { - dasm_put(Dst, 11577); + dasm_put(Dst, 11584); } else { - dasm_put(Dst, 11589); + dasm_put(Dst, 11596); } - dasm_put(Dst, 8580); + dasm_put(Dst, 8587); break; case BC_MODVN: - dasm_put(Dst, 11703); + dasm_put(Dst, 11710); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11711, LJ_TISNUM); + dasm_put(Dst, 11718, LJ_TISNUM); if (sse) { - dasm_put(Dst, 12021); + dasm_put(Dst, 12028); } else { - dasm_put(Dst, 12035); + dasm_put(Dst, 12042); } break; case 1: - dasm_put(Dst, 11745, LJ_TISNUM); + dasm_put(Dst, 11752, LJ_TISNUM); if (sse) { - dasm_put(Dst, 12043); + dasm_put(Dst, 12050); } else { - dasm_put(Dst, 12057); + dasm_put(Dst, 12064); } break; default: - dasm_put(Dst, 11779, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11786, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 12065); + dasm_put(Dst, 12072); } else { - dasm_put(Dst, 12079); + dasm_put(Dst, 12086); } break; } - dasm_put(Dst, 12087); + dasm_put(Dst, 12094); if (sse) { - dasm_put(Dst, 11577); + dasm_put(Dst, 11584); } else { - dasm_put(Dst, 11589); + dasm_put(Dst, 11596); } - dasm_put(Dst, 8580); + dasm_put(Dst, 8587); break; case BC_MODNV: case BC_MODVV: - dasm_put(Dst, 11703); + dasm_put(Dst, 11710); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11711, LJ_TISNUM); + dasm_put(Dst, 11718, LJ_TISNUM); if (sse) { - dasm_put(Dst, 12021); + dasm_put(Dst, 12028); } else { - dasm_put(Dst, 12035); + dasm_put(Dst, 12042); } break; case 1: - dasm_put(Dst, 11745, LJ_TISNUM); + dasm_put(Dst, 11752, LJ_TISNUM); if (sse) { - dasm_put(Dst, 12043); + dasm_put(Dst, 12050); } else { - dasm_put(Dst, 12057); + dasm_put(Dst, 12064); } break; default: - dasm_put(Dst, 11779, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11786, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 12065); + dasm_put(Dst, 12072); } else { - dasm_put(Dst, 12079); + dasm_put(Dst, 12086); } break; } - dasm_put(Dst, 12093); + dasm_put(Dst, 12100); break; case BC_POW: - dasm_put(Dst, 11703); + dasm_put(Dst, 11710); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11711, LJ_TISNUM); + dasm_put(Dst, 11718, LJ_TISNUM); if (sse) { - dasm_put(Dst, 12021); + dasm_put(Dst, 12028); } else { - dasm_put(Dst, 12035); + dasm_put(Dst, 12042); } break; case 1: - dasm_put(Dst, 11745, LJ_TISNUM); + dasm_put(Dst, 11752, LJ_TISNUM); if (sse) { - dasm_put(Dst, 12043); + dasm_put(Dst, 12050); } else { - dasm_put(Dst, 12057); + dasm_put(Dst, 12064); } break; default: - dasm_put(Dst, 11779, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11786, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 12065); + dasm_put(Dst, 12072); } else { - dasm_put(Dst, 12079); + dasm_put(Dst, 12086); } break; } - dasm_put(Dst, 12098); + dasm_put(Dst, 12105); if (sse) { - dasm_put(Dst, 11577); + dasm_put(Dst, 11584); } else { - dasm_put(Dst, 11589); + dasm_put(Dst, 11596); } - dasm_put(Dst, 8580); + dasm_put(Dst, 8587); break; case BC_CAT: - dasm_put(Dst, 12102, Dt1(->base), Dt1(->base)); + dasm_put(Dst, 12109, Dt1(->base), Dt1(->base)); break; /* -- Constant ops ------------------------------------------------------ */ case BC_KSTR: - dasm_put(Dst, 12196, LJ_TSTR); + dasm_put(Dst, 12203, LJ_TSTR); break; case BC_KSHORT: if (sse) { - dasm_put(Dst, 12229); + dasm_put(Dst, 12236); } else { - dasm_put(Dst, 12244); + dasm_put(Dst, 12251); } - dasm_put(Dst, 8580); + dasm_put(Dst, 8587); break; case BC_KNUM: if (sse) { - dasm_put(Dst, 12252); + dasm_put(Dst, 12259); } else { - dasm_put(Dst, 12265); + dasm_put(Dst, 12272); } - dasm_put(Dst, 8580); + dasm_put(Dst, 8587); break; case BC_KPRI: - dasm_put(Dst, 12272); + dasm_put(Dst, 12279); break; case BC_KNIL: - dasm_put(Dst, 12298, LJ_TNIL); + dasm_put(Dst, 12305, LJ_TNIL); break; /* -- Upvalue and function ops ------------------------------------------ */ case BC_UGET: - dasm_put(Dst, 12344, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 12351, offsetof(GCfuncL, uvptr), DtA(->v)); break; case BC_USETV: #define TV2MARKOFS \ ((int32_t)offsetof(GCupval, marked)-(int32_t)offsetof(GCupval, tv)) - dasm_put(Dst, 12388, offsetof(GCfuncL, uvptr), DtA(->closed), DtA(->v), TV2MARKOFS, LJ_GC_BLACK, LJ_TISGCV, LJ_TISNUM - LJ_TISGCV, Dt4(->gch.marked), LJ_GC_WHITES, GG_DISP2G); - dasm_put(Dst, 12478); + dasm_put(Dst, 12395, offsetof(GCfuncL, uvptr), DtA(->closed), DtA(->v), TV2MARKOFS, LJ_GC_BLACK, LJ_TISGCV, LJ_TISNUM - LJ_TISGCV, Dt4(->gch.marked), LJ_GC_WHITES, GG_DISP2G); + dasm_put(Dst, 12485); break; #undef TV2MARKOFS case BC_USETS: - dasm_put(Dst, 12490, offsetof(GCfuncL, uvptr), DtA(->v), LJ_TSTR, DtA(->marked), LJ_GC_BLACK, Dt4(->gch.marked), LJ_GC_WHITES, DtA(->closed), GG_DISP2G); + dasm_put(Dst, 12497, offsetof(GCfuncL, uvptr), DtA(->v), LJ_TSTR, DtA(->marked), LJ_GC_BLACK, Dt4(->gch.marked), LJ_GC_WHITES, DtA(->closed), GG_DISP2G); break; case BC_USETN: - dasm_put(Dst, 12581); + dasm_put(Dst, 12588); if (sse) { - dasm_put(Dst, 12586); + dasm_put(Dst, 12593); } else { - dasm_put(Dst, 11396); + dasm_put(Dst, 11403); } - dasm_put(Dst, 12593, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 12600, offsetof(GCfuncL, uvptr), DtA(->v)); if (sse) { - dasm_put(Dst, 4965); + dasm_put(Dst, 4962); } else { - dasm_put(Dst, 4971); + dasm_put(Dst, 4968); } - dasm_put(Dst, 8580); + dasm_put(Dst, 8587); break; case BC_USETP: - dasm_put(Dst, 12602, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 12609, offsetof(GCfuncL, uvptr), DtA(->v)); break; case BC_UCLO: - dasm_put(Dst, 12639, -BCBIAS_J*4, Dt1(->openupval), Dt1(->base), Dt1(->base)); + dasm_put(Dst, 12646, -BCBIAS_J*4, Dt1(->openupval), Dt1(->base), Dt1(->base)); break; case BC_FNEW: - dasm_put(Dst, 12693, Dt1(->base), Dt1(->base), LJ_TFUNC); + dasm_put(Dst, 12700, Dt1(->base), Dt1(->base), LJ_TFUNC); break; /* -- Table ops --------------------------------------------------------- */ case BC_TNEW: - dasm_put(Dst, 12764, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB); + dasm_put(Dst, 12771, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB); break; case BC_TDUP: - dasm_put(Dst, 12885, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB); + dasm_put(Dst, 12892, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB); break; case BC_GGET: - dasm_put(Dst, 12977, Dt7(->env)); + dasm_put(Dst, 12984, Dt7(->env)); break; case BC_GSET: - dasm_put(Dst, 12995, Dt7(->env)); + dasm_put(Dst, 13002, Dt7(->env)); break; case BC_TGETV: - dasm_put(Dst, 13013, LJ_TTAB, LJ_TISNUM); + dasm_put(Dst, 13020, LJ_TTAB, LJ_TISNUM); if (sse) { - dasm_put(Dst, 13046); + dasm_put(Dst, 13053); } else { - dasm_put(Dst, 13067); + dasm_put(Dst, 13074); if (cmov) { - dasm_put(Dst, 11122); + dasm_put(Dst, 11129); } else { - dasm_put(Dst, 11128); + dasm_put(Dst, 11135); } - dasm_put(Dst, 2856); + dasm_put(Dst, 2853); } - dasm_put(Dst, 13077, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<hmask), Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL); - dasm_put(Dst, 13271, LJ_TNIL, DtB(->next), Dt6(->metatable), Dt6(->nomm), 1<hmask), Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL); + dasm_put(Dst, 13278, LJ_TNIL, DtB(->next), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable)); - dasm_put(Dst, 13557, Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 13481, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable)); + dasm_put(Dst, 13564, Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); break; case BC_TSETS: - dasm_put(Dst, 13619, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->nomm), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL); - dasm_put(Dst, 13694, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<next)); - dasm_put(Dst, 13786, Dt6(->metatable), Dt6(->nomm), 1<base), Dt1(->base), Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 13626, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->nomm), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL); + dasm_put(Dst, 13701, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<next)); + dasm_put(Dst, 13793, Dt6(->metatable), Dt6(->nomm), 1<base), Dt1(->base), Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); break; case BC_TSETB: - dasm_put(Dst, 13882, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable)); - dasm_put(Dst, 13980, Dt6(->metatable), Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 13889, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable)); + dasm_put(Dst, 13987, Dt6(->metatable), Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); break; case BC_TSETM: - dasm_put(Dst, 14026); + dasm_put(Dst, 14033); if (sse) { - dasm_put(Dst, 12586); + dasm_put(Dst, 12593); } else { - dasm_put(Dst, 14031); + dasm_put(Dst, 14038); } - dasm_put(Dst, 14039, Dt6(->marked), LJ_GC_BLACK); + dasm_put(Dst, 14046, Dt6(->marked), LJ_GC_BLACK); if (sse) { - dasm_put(Dst, 14064); - } else { dasm_put(Dst, 14071); + } else { + dasm_put(Dst, 14078); } - dasm_put(Dst, 14076, Dt6(->asize), Dt6(->array), Dt1(->base), Dt1(->base), Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain)); - dasm_put(Dst, 14204, Dt6(->gclist)); + dasm_put(Dst, 14083, Dt6(->asize), Dt6(->array), Dt1(->base), Dt1(->base), Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain)); + dasm_put(Dst, 14211, Dt6(->gclist)); break; /* -- Calls and vararg handling ----------------------------------------- */ case BC_CALL: case BC_CALLM: - dasm_put(Dst, 11707); + dasm_put(Dst, 11714); if (op == BC_CALLM) { - dasm_put(Dst, 14212); + dasm_put(Dst, 14219); } - dasm_put(Dst, 14217, LJ_TFUNC, Dt7(->gate)); + dasm_put(Dst, 14224, LJ_TFUNC, Dt7(->gate)); break; case BC_CALLMT: - dasm_put(Dst, 14212); + dasm_put(Dst, 14219); break; case BC_CALLT: - dasm_put(Dst, 14240, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), Dt7(->gate)); - dasm_put(Dst, 14345, FRAME_TYPE, Dt7(->pt), Dt9(->k)); + dasm_put(Dst, 14247, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), Dt7(->gate)); + dasm_put(Dst, 14352, FRAME_TYPE, Dt7(->pt), Dt9(->k)); break; case BC_ITERC: - dasm_put(Dst, 14402, LJ_TFUNC, Dt7(->gate)); + dasm_put(Dst, 14409, LJ_TFUNC, Dt7(->gate)); break; case BC_VARG: - dasm_put(Dst, 14464, Dt7(->pt), Dt9(->numparams), (8+FRAME_VARG), LJ_TNIL); - dasm_put(Dst, 14608, Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); + dasm_put(Dst, 14471, Dt7(->pt), Dt9(->numparams), (8+FRAME_VARG), LJ_TNIL); + dasm_put(Dst, 14615, Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); break; /* -- Returns ----------------------------------------------------------- */ case BC_RETM: - dasm_put(Dst, 14212); + dasm_put(Dst, 14219); break; case BC_RET: case BC_RET0: case BC_RET1: if (op != BC_RET0) { - dasm_put(Dst, 14707); + dasm_put(Dst, 14714); } - dasm_put(Dst, 14711, FRAME_TYPE); + dasm_put(Dst, 14718, FRAME_TYPE); switch (op) { case BC_RET: - dasm_put(Dst, 14730); + dasm_put(Dst, 14737); break; case BC_RET1: - dasm_put(Dst, 14788); + dasm_put(Dst, 14795); /* fallthrough */ case BC_RET0: - dasm_put(Dst, 14804); + dasm_put(Dst, 14811); default: break; } - dasm_put(Dst, 14815, Dt7(->pt), Dt9(->k)); + dasm_put(Dst, 14822, Dt7(->pt), Dt9(->k)); if (op == BC_RET) { - dasm_put(Dst, 14857, LJ_TNIL); + dasm_put(Dst, 14864, LJ_TNIL); } else { - dasm_put(Dst, 14866, LJ_TNIL); + dasm_put(Dst, 14873, LJ_TNIL); } - dasm_put(Dst, 14873); + dasm_put(Dst, 14880); if (op != BC_RET0) { - dasm_put(Dst, 14894); + dasm_put(Dst, 14901); } - dasm_put(Dst, 5061); + dasm_put(Dst, 5058); break; /* -- Loops and branches ------------------------------------------------ */ @@ -2170,7 +2173,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) case BC_FORL: #if LJ_HASJIT - dasm_put(Dst, 14898, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 14905, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif break; @@ -2182,57 +2185,57 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) case BC_FORI: case BC_IFORL: vk = (op == BC_IFORL || op == BC_JFORL); - dasm_put(Dst, 14919); + dasm_put(Dst, 14926); if (!vk) { - dasm_put(Dst, 14923, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 14930, LJ_TISNUM, LJ_TISNUM); } - dasm_put(Dst, 14942); + dasm_put(Dst, 14949); if (!vk) { - dasm_put(Dst, 14946, LJ_TISNUM); + dasm_put(Dst, 14953, LJ_TISNUM); } if (sse) { - dasm_put(Dst, 14955); + dasm_put(Dst, 14962); if (vk) { - dasm_put(Dst, 14967); + dasm_put(Dst, 14974); } else { - dasm_put(Dst, 14986); + dasm_put(Dst, 14993); } - dasm_put(Dst, 14991); + dasm_put(Dst, 14998); } else { - dasm_put(Dst, 15004); + dasm_put(Dst, 15011); if (vk) { - dasm_put(Dst, 15010); + dasm_put(Dst, 15017); } else { - dasm_put(Dst, 15026); + dasm_put(Dst, 15033); } - dasm_put(Dst, 15034); + dasm_put(Dst, 15041); if (cmov) { - dasm_put(Dst, 11122); + dasm_put(Dst, 11129); } else { - dasm_put(Dst, 11128); + dasm_put(Dst, 11135); } if (!cmov) { - dasm_put(Dst, 15039); + dasm_put(Dst, 15046); } } if (op == BC_FORI) { - dasm_put(Dst, 15045, -BCBIAS_J*4); + dasm_put(Dst, 15052, -BCBIAS_J*4); } else if (op == BC_JFORI) { - dasm_put(Dst, 15055, -BCBIAS_J*4, BC_JLOOP); + dasm_put(Dst, 15062, -BCBIAS_J*4, BC_JLOOP); } else if (op == BC_IFORL) { - dasm_put(Dst, 15069, -BCBIAS_J*4); + dasm_put(Dst, 15076, -BCBIAS_J*4); } else { - dasm_put(Dst, 15065, BC_JLOOP); + dasm_put(Dst, 15072, BC_JLOOP); } - dasm_put(Dst, 11157); + dasm_put(Dst, 11164); if (sse) { - dasm_put(Dst, 15079); + dasm_put(Dst, 15086); } break; case BC_ITERL: #if LJ_HASJIT - dasm_put(Dst, 14898, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 14905, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif break; @@ -2241,33 +2244,33 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) break; #endif case BC_IITERL: - dasm_put(Dst, 15090, LJ_TNIL); + dasm_put(Dst, 15097, LJ_TNIL); if (op == BC_JITERL) { - dasm_put(Dst, 15105, BC_JLOOP); + dasm_put(Dst, 15112, BC_JLOOP); } else { - dasm_put(Dst, 15119, -BCBIAS_J*4); + dasm_put(Dst, 15126, -BCBIAS_J*4); } - dasm_put(Dst, 11454); + dasm_put(Dst, 11461); break; case BC_LOOP: #if LJ_HASJIT - dasm_put(Dst, 14898, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 14905, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif break; case BC_ILOOP: - dasm_put(Dst, 8580); + dasm_put(Dst, 8587); break; case BC_JLOOP: #if LJ_HASJIT - dasm_put(Dst, 15135, DISPATCH_J(trace), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L)); + dasm_put(Dst, 15142, DISPATCH_J(trace), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L)); #endif break; case BC_JMP: - dasm_put(Dst, 15158, -BCBIAS_J*4); + dasm_put(Dst, 15165, -BCBIAS_J*4); break; /* ---------------------------------------------------------------------- */ @@ -2295,7 +2298,7 @@ static int build_backend(BuildCtx *ctx) build_subroutines(ctx, cmov, sse); - dasm_put(Dst, 15182); + dasm_put(Dst, 15189); for (op = 0; op < BC__MAX; op++) build_ins(ctx, (BCOp)op, op, cmov, sse); diff --git a/src/lj_api.c b/src/lj_api.c index 4b7847c8..961e5150 100644 --- a/src/lj_api.c +++ b/src/lj_api.c @@ -1056,19 +1056,32 @@ LUALIB_API int luaL_callmeta(lua_State *L, int idx, const char *field) LUA_API int lua_yield(lua_State *L, int nresults) { void *cf = L->cframe; - cTValue *f; - if (!cframe_canyield(cf)) - lj_err_msg(L, LJ_ERR_CYIELD); - f = L->top - nresults; - if (f > L->base) { - TValue *t = L->base; - while (--nresults >= 0) copyTV(L, t++, f++); - L->top = t; + global_State *g = G(L); + if (cframe_canyield(cf)) { + cf = cframe_raw(cf); + if (!hook_active(g)) { /* Regular yield: move results down if needed. */ + cTValue *f = L->top - nresults; + if (f > L->base) { + TValue *t = L->base; + while (--nresults >= 0) copyTV(L, t++, f++); + L->top = t; + } + } else { /* Yield from hook: add a pseudo-frame. */ + TValue *top = L->top; + hook_leave(g); + top->u64 = cframe_multres(cf); + setcont(top+1, lj_cont_hook); + setframe_pc(top+1, cframe_pc(cf)-1); + setframe_gc(top+2, obj2gco(L)); + top[2].fr.tp.ftsz = cast_int((char *)(top+3)-(char *)L->base)+FRAME_CONT; + L->top = L->base = top+3; + } + L->cframe = NULL; + L->status = LUA_YIELD; + lj_vm_unwind_c(cf, LUA_YIELD); } - L->cframe = NULL; - L->status = LUA_YIELD; - lj_vm_unwind_c(cf, LUA_YIELD); - return -1; /* unreachable */ + lj_err_msg(L, LJ_ERR_CYIELD); + return 0; /* unreachable */ } LUA_API int lua_resume(lua_State *L, int nargs) diff --git a/src/lj_dispatch.c b/src/lj_dispatch.c index 3ce09371..2ffe363c 100644 --- a/src/lj_dispatch.c +++ b/src/lj_dispatch.c @@ -258,15 +258,16 @@ static BCReg cur_topslot(GCproto *pt, const BCIns *pc, uint32_t nres) } /* Instruction dispatch callback for instr/line hooks or when recording. */ -void lj_dispatch_ins(lua_State *L, const BCIns *pc, uint32_t nres) +void LJ_FASTCALL lj_dispatch_ins(lua_State *L, const BCIns *pc) { GCfunc *fn = curr_func(L); GCproto *pt = funcproto(fn); - BCReg slots = cur_topslot(pt, pc, nres); - global_State *g = G(L); void *cf = cframe_raw(L->cframe); const BCIns *oldpc = cframe_pc(cf); + global_State *g = G(L); + BCReg slots; setcframe_pc(cf, pc); + slots = cur_topslot(pt, pc, cframe_multres(cf)); L->top = L->base + slots; /* Fix top. */ #if LJ_HASJIT { diff --git a/src/lj_dispatch.h b/src/lj_dispatch.h index 298aa166..26c14fb9 100644 --- a/src/lj_dispatch.h +++ b/src/lj_dispatch.h @@ -59,6 +59,6 @@ LJ_FUNC void lj_dispatch_init(GG_State *GG); LJ_FUNC void lj_dispatch_update(global_State *g); /* Instruction dispatch callback for instr/line hooks or when recording. */ -LJ_FUNCA void lj_dispatch_ins(lua_State *L, const BCIns *pc, uint32_t nres); +LJ_FUNCA void LJ_FASTCALL lj_dispatch_ins(lua_State *L, const BCIns *pc); #endif diff --git a/src/lj_err.c b/src/lj_err.c index da2555f9..ebc9ad12 100644 --- a/src/lj_err.c +++ b/src/lj_err.c @@ -470,7 +470,7 @@ uncaught: L->cframe = NULL; if (cframe_canyield(cf)) { /* Resume? */ unwindstack(L, L->top, errcode); - lj_vm_unwind_c(cf, errcode); + lj_vm_unwind_c(cframe_raw(cf), errcode); } /* Better rethrow on main thread than panic. */ { diff --git a/src/lj_frame.h b/src/lj_frame.h index 398ec4e5..2704ee40 100644 --- a/src/lj_frame.h +++ b/src/lj_frame.h @@ -63,6 +63,7 @@ enum { #define CFRAME_OFS_PREV (13*4) #define CFRAME_OFS_L (12*4) #define CFRAME_OFS_PC (6*4) +#define CFRAME_OFS_MULTRES (5*4) #define CFRAME_SIZE (12*4) #elif LJ_TARGET_X64 #if _WIN64 @@ -71,6 +72,7 @@ enum { #define CFRAME_OFS_L (32*4) #define CFRAME_OFS_ERRF (31*4) #define CFRAME_OFS_NRES (30*4) +#define CFRAME_OFS_MULTRES (29*4) #define CFRAME_SIZE (14*8) #else #define CFRAME_OFS_PREV (4*8) @@ -78,6 +80,7 @@ enum { #define CFRAME_OFS_L (4*4) #define CFRAME_OFS_ERRF (3*4) #define CFRAME_OFS_NRES (2*4) +#define CFRAME_OFS_MULTRES (1*4) #define CFRAME_SIZE (12*8) #endif #else @@ -91,6 +94,7 @@ enum { #define cframe_errfunc(cf) (*(int32_t *)(((char *)(cf))+CFRAME_OFS_ERRF)) #define cframe_nres(cf) (*(int32_t *)(((char *)(cf))+CFRAME_OFS_NRES)) #define cframe_prev(cf) (*(void **)(((char *)(cf))+CFRAME_OFS_PREV)) +#define cframe_multres(cf) (*(uint32_t *)(((char *)(cf))+CFRAME_OFS_MULTRES)) #define cframe_L(cf) \ (&gcref(*(GCRef *)(((char *)(cf))+CFRAME_OFS_L))->th) #define cframe_pc(cf) \ diff --git a/src/lj_vm.h b/src/lj_vm.h index ed375747..3e4ea45c 100644 --- a/src/lj_vm.h +++ b/src/lj_vm.h @@ -54,6 +54,7 @@ LJ_ASMF void lj_cont_ra(void); /* Store result in RA from instruction. */ LJ_ASMF void lj_cont_nop(void); /* Do nothing, just continue execution. */ LJ_ASMF void lj_cont_condt(void); /* Branch if result is true. */ LJ_ASMF void lj_cont_condf(void); /* Branch if result is false. */ +LJ_ASMF void lj_cont_hook(void); /* Continue from hook yield. */ /* Start of the ASM code. */ LJ_ASMF char lj_vm_asm_begin[]; -- cgit v1.2.3-55-g6feb