Index: src/mzscheme/include/scheme.h =================================================================== --- src/mzscheme/include/scheme.h (revision 8997) +++ src/mzscheme/include/scheme.h (working copy) @@ -1066,6 +1066,10 @@ Scheme_Object *name; + Scheme_Object *mbox_first; + Scheme_Object *mbox_last; + Scheme_Object *mbox_sema; + #ifdef MZ_PRECISE_GC int gc_owner_set; #endif Index: src/mzscheme/src/cstartup.inc =================================================================== --- src/mzscheme/src/cstartup.inc (revision 8997) +++ src/mzscheme/src/cstartup.inc (working copy) @@ -1,24 +1,24 @@ { static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,49,56,50,0,0,0,1,0,0,6,0, -9,0,14,0,17,0,24,0,31,0,35,0,42,0,47,0,60,0,65,0,69, +9,0,14,0,17,0,22,0,35,0,39,0,46,0,50,0,55,0,62,0,69, 0,78,0,84,0,98,0,112,0,115,0,119,0,121,0,132,0,134,0,148,0, 155,0,177,0,179,0,193,0,253,0,23,1,32,1,41,1,51,1,68,1,107, 1,146,1,215,1,4,2,92,2,137,2,142,2,162,2,53,3,73,3,124,3, 190,3,75,4,233,4,20,5,31,5,110,5,0,0,131,7,0,0,65,98,101, -103,105,110,29,11,11,64,99,111,110,100,62,111,114,66,108,101,116,114,101,99, -66,117,110,108,101,115,115,63,108,101,116,66,100,101,102,105,110,101,64,119,104, -101,110,72,112,97,114,97,109,101,116,101,114,105,122,101,64,108,101,116,42,63, -97,110,100,68,104,101,114,101,45,115,116,120,65,113,117,111,116,101,29,94,2, +103,105,110,29,11,11,64,99,111,110,100,62,111,114,64,119,104,101,110,72,112, +97,114,97,109,101,116,101,114,105,122,101,63,108,101,116,66,100,101,102,105,110, +101,63,97,110,100,64,108,101,116,42,66,108,101,116,114,101,99,66,117,110,108, +101,115,115,68,104,101,114,101,45,115,116,120,65,113,117,111,116,101,29,94,2, 14,68,35,37,107,101,114,110,101,108,11,29,94,2,14,68,35,37,112,97,114, 97,109,122,11,62,105,102,63,115,116,120,61,115,70,108,101,116,45,118,97,108, 117,101,115,61,120,73,108,101,116,114,101,99,45,118,97,108,117,101,115,66,108, 97,109,98,100,97,1,20,112,97,114,97,109,101,116,101,114,105,122,97,116,105, 111,110,45,107,101,121,61,118,73,100,101,102,105,110,101,45,118,97,108,117,101, -115,98,10,34,11,8,191,184,94,159,2,16,34,34,159,2,15,34,34,16,20, -2,3,2,2,2,5,2,2,2,6,2,2,2,7,2,2,2,8,2,2,2, -9,2,2,2,4,2,2,2,10,2,2,2,11,2,2,2,12,2,2,97,35, -11,8,191,184,93,159,2,15,34,35,16,2,2,13,161,2,2,35,2,13,2, -2,2,13,97,10,11,11,8,191,184,16,0,97,10,36,11,8,191,184,16,0, +115,98,10,34,11,8,176,180,94,159,2,16,34,34,159,2,15,34,34,16,20, +2,3,2,2,2,4,2,2,2,5,2,2,2,6,2,2,2,7,2,2,2, +8,2,2,2,9,2,2,2,10,2,2,2,11,2,2,2,12,2,2,97,35, +11,8,176,180,93,159,2,15,34,35,16,2,2,13,161,2,2,35,2,13,2, +2,2,13,97,10,11,11,8,176,180,16,0,97,10,36,11,8,176,180,16,0, 13,16,4,34,29,11,11,2,2,11,18,98,64,104,101,114,101,8,31,8,30, 8,29,8,28,8,27,27,248,22,180,3,23,196,1,249,22,173,3,80,158,37, 34,251,22,73,2,17,248,22,88,23,200,2,12,249,22,63,2,1,248,22,90, @@ -26,16 +26,16 @@ 73,2,17,248,22,88,23,200,2,249,22,63,2,1,248,22,90,23,202,1,12, 27,248,22,65,248,22,180,3,23,197,1,28,248,22,71,23,194,2,20,15,159, 35,34,35,28,248,22,71,248,22,65,23,195,2,248,22,64,193,249,22,173,3, -80,158,37,34,251,22,73,2,17,248,22,64,23,200,2,249,22,63,2,12,248, +80,158,37,34,251,22,73,2,17,248,22,64,23,200,2,249,22,63,2,9,248, 22,65,23,202,1,11,18,100,10,8,31,8,30,8,29,8,28,8,27,16,4, -11,11,2,18,3,1,7,101,110,118,55,51,48,52,16,4,11,11,2,19,3, -1,7,101,110,118,55,51,48,53,27,248,22,65,248,22,180,3,23,197,1,28, +11,11,2,18,3,1,7,101,110,118,55,48,53,50,16,4,11,11,2,19,3, +1,7,101,110,118,55,48,53,51,27,248,22,65,248,22,180,3,23,197,1,28, 248,22,71,23,194,2,20,15,159,35,34,35,28,248,22,71,248,22,65,23,195, 2,248,22,64,193,249,22,173,3,80,158,37,34,250,22,73,2,20,248,22,73, 249,22,73,248,22,73,2,21,248,22,64,23,202,2,251,22,73,2,17,2,21, 2,21,249,22,63,2,4,248,22,65,23,205,1,18,100,11,8,31,8,30,8, -29,8,28,8,27,16,4,11,11,2,18,3,1,7,101,110,118,55,51,48,55, -16,4,11,11,2,19,3,1,7,101,110,118,55,51,48,56,248,22,180,3,193, +29,8,28,8,27,16,4,11,11,2,18,3,1,7,101,110,118,55,48,53,53, +16,4,11,11,2,19,3,1,7,101,110,118,55,48,53,54,248,22,180,3,193, 27,248,22,180,3,194,249,22,63,248,22,73,248,22,64,196,248,22,65,195,27, 248,22,65,248,22,180,3,23,197,1,249,22,173,3,80,158,37,34,28,248,22, 51,248,22,174,3,248,22,64,23,198,2,27,249,22,2,32,0,89,162,8,44, @@ -50,7 +50,7 @@ 22,64,201,248,22,65,198,27,248,22,65,248,22,180,3,196,27,248,22,180,3, 248,22,64,195,249,22,173,3,80,158,38,34,28,248,22,71,195,250,22,74,2, 20,9,248,22,65,199,250,22,73,2,7,248,22,73,248,22,64,199,250,22,74, -2,11,248,22,65,201,248,22,65,202,27,248,22,65,248,22,180,3,23,197,1, +2,10,248,22,65,201,248,22,65,202,27,248,22,65,248,22,180,3,23,197,1, 27,249,22,1,22,77,249,22,2,22,180,3,248,22,180,3,248,22,64,199,249, 22,173,3,80,158,38,34,251,22,73,1,22,119,105,116,104,45,99,111,110,116, 105,110,117,97,116,105,111,110,45,109,97,114,107,2,24,250,22,74,1,23,101, @@ -65,8 +65,8 @@ 65,202,251,22,73,2,17,28,249,22,140,8,248,22,174,3,248,22,64,23,201, 2,64,101,108,115,101,10,248,22,64,23,198,2,250,22,74,2,20,9,248,22, 65,23,201,1,249,22,63,2,3,248,22,65,23,203,1,99,8,31,8,30,8, -29,8,28,8,27,16,4,11,11,2,18,3,1,7,101,110,118,55,51,51,48, -16,4,11,11,2,19,3,1,7,101,110,118,55,51,51,49,18,158,94,10,64, +29,8,28,8,27,16,4,11,11,2,18,3,1,7,101,110,118,55,48,55,56, +16,4,11,11,2,19,3,1,7,101,110,118,55,48,55,57,18,158,94,10,64, 118,111,105,100,8,47,27,248,22,65,248,22,180,3,196,249,22,173,3,80,158, 37,34,28,248,22,51,248,22,174,3,248,22,64,197,250,22,73,2,26,248,22, 73,248,22,64,199,248,22,88,198,27,248,22,174,3,248,22,64,197,250,22,73, @@ -79,19 +79,19 @@ 10,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12, 34,44,35,11,11,16,0,16,0,16,0,34,34,11,11,11,16,0,16,0,16, 0,34,34,16,11,16,5,93,2,13,20,15,159,34,34,34,34,20,102,159,34, -16,0,16,1,33,32,10,16,5,93,2,6,89,162,8,44,35,51,9,223,0, +16,0,16,1,33,32,10,16,5,93,2,12,89,162,8,44,35,51,9,223,0, 33,33,34,20,102,159,34,16,1,20,25,159,35,2,2,2,13,16,0,11,16, -5,93,2,9,89,162,8,44,35,51,9,223,0,33,34,34,20,102,159,34,16, -1,20,25,159,35,2,2,2,13,16,0,11,16,5,93,2,12,89,162,8,44, +5,93,2,5,89,162,8,44,35,51,9,223,0,33,34,34,20,102,159,34,16, +1,20,25,159,35,2,2,2,13,16,0,11,16,5,93,2,9,89,162,8,44, 35,51,9,223,0,33,35,34,20,102,159,34,16,1,20,25,159,35,2,2,2, 13,16,1,33,36,11,16,5,93,2,4,89,162,8,44,35,54,9,223,0,33, 37,34,20,102,159,34,16,1,20,25,159,35,2,2,2,13,16,1,33,38,11, 16,5,93,2,7,89,162,8,44,35,56,9,223,0,33,41,34,20,102,159,34, -16,1,20,25,159,35,2,2,2,13,16,0,11,16,5,93,2,5,89,162,8, +16,1,20,25,159,35,2,2,2,13,16,0,11,16,5,93,2,11,89,162,8, 44,35,51,9,223,0,33,43,34,20,102,159,34,16,1,20,25,159,35,2,2, -2,13,16,0,11,16,5,93,2,11,89,162,8,44,35,52,9,223,0,33,44, +2,13,16,0,11,16,5,93,2,10,89,162,8,44,35,52,9,223,0,33,44, 34,20,102,159,34,16,1,20,25,159,35,2,2,2,13,16,0,11,16,5,93, -2,10,89,162,8,44,35,53,9,223,0,33,45,34,20,102,159,34,16,1,20, +2,6,89,162,8,44,35,53,9,223,0,33,45,34,20,102,159,34,16,1,20, 25,159,35,2,2,2,13,16,0,11,16,5,93,2,3,89,162,8,44,35,56, 9,223,0,33,46,34,20,102,159,34,16,1,20,25,159,35,2,2,2,13,16, 1,33,48,11,16,5,93,2,8,89,162,8,44,35,52,9,223,0,33,49,34, @@ -132,169 +132,169 @@ 103,32,111,114,32,98,121,116,101,32,115,116,114,105,110,103,6,36,36,99,97, 110,110,111,116,32,97,100,100,32,97,32,115,117,102,102,105,120,32,116,111,32, 97,32,114,111,111,116,32,112,97,116,104,58,32,5,0,27,20,14,159,80,158, -35,49,250,80,158,38,50,249,22,27,11,80,158,40,49,22,142,12,10,248,22, +35,49,250,80,158,38,50,249,22,27,11,80,158,40,49,22,146,12,10,248,22, 188,4,23,196,2,28,248,22,166,5,23,194,2,12,87,94,248,22,143,8,23, 194,1,248,80,159,36,53,35,195,28,248,22,71,23,195,2,9,27,248,22,64, -23,196,2,27,28,248,22,187,12,23,195,2,23,194,1,28,248,22,186,12,23, -195,2,249,22,188,12,23,196,1,250,80,158,41,47,248,22,138,13,2,20,11, -10,250,80,158,39,47,248,22,138,13,2,20,23,197,1,10,28,23,193,2,249, -22,63,248,22,190,12,249,22,188,12,23,198,1,247,22,139,13,27,248,22,65, +23,196,2,27,28,248,22,191,12,23,195,2,23,194,1,28,248,22,190,12,23, +195,2,249,22,128,13,23,196,1,250,80,158,41,47,248,22,142,13,2,20,11, +10,250,80,158,39,47,248,22,142,13,2,20,23,197,1,10,28,23,193,2,249, +22,63,248,22,130,13,249,22,128,13,23,198,1,247,22,143,13,27,248,22,65, 23,200,1,28,248,22,71,23,194,2,9,27,248,22,64,23,195,2,27,28,248, -22,187,12,23,195,2,23,194,1,28,248,22,186,12,23,195,2,249,22,188,12, -23,196,1,250,80,158,46,47,248,22,138,13,2,20,11,10,250,80,158,44,47, -248,22,138,13,2,20,23,197,1,10,28,23,193,2,249,22,63,248,22,190,12, -249,22,188,12,23,198,1,247,22,139,13,248,80,159,44,52,35,248,22,65,23, +22,191,12,23,195,2,23,194,1,28,248,22,190,12,23,195,2,249,22,128,13, +23,196,1,250,80,158,46,47,248,22,142,13,2,20,11,10,250,80,158,44,47, +248,22,142,13,2,20,23,197,1,10,28,23,193,2,249,22,63,248,22,130,13, +249,22,128,13,23,198,1,247,22,143,13,248,80,159,44,52,35,248,22,65,23, 199,1,87,94,23,193,1,248,80,159,42,52,35,248,22,65,23,197,1,87,94, 23,193,1,27,248,22,65,23,198,1,28,248,22,71,23,194,2,9,27,248,22, -64,23,195,2,27,28,248,22,187,12,23,195,2,23,194,1,28,248,22,186,12, -23,195,2,249,22,188,12,23,196,1,250,80,158,44,47,248,22,138,13,2,20, -11,10,250,80,158,42,47,248,22,138,13,2,20,23,197,1,10,28,23,193,2, -249,22,63,248,22,190,12,249,22,188,12,23,198,1,247,22,139,13,248,80,159, +64,23,195,2,27,28,248,22,191,12,23,195,2,23,194,1,28,248,22,190,12, +23,195,2,249,22,128,13,23,196,1,250,80,158,44,47,248,22,142,13,2,20, +11,10,250,80,158,42,47,248,22,142,13,2,20,23,197,1,10,28,23,193,2, +249,22,63,248,22,130,13,249,22,128,13,23,198,1,247,22,143,13,248,80,159, 42,52,35,248,22,65,23,199,1,248,80,159,40,52,35,248,22,65,196,249,80, -159,36,37,35,2,7,195,27,248,22,163,12,23,195,2,28,23,193,2,192,87, -94,23,193,1,28,248,22,135,6,23,195,2,27,248,22,185,12,195,28,192,192, -248,22,186,12,195,11,87,94,28,28,248,22,164,12,23,195,2,10,27,248,22, -163,12,23,196,2,28,23,193,2,192,87,94,23,193,1,28,248,22,135,6,23, -196,2,27,248,22,185,12,23,197,2,28,23,193,2,192,87,94,23,193,1,248, -22,186,12,23,197,2,11,12,250,22,170,8,76,110,111,114,109,97,108,45,112, +159,36,37,35,2,7,195,27,248,22,167,12,23,195,2,28,23,193,2,192,87, +94,23,193,1,28,248,22,135,6,23,195,2,27,248,22,189,12,195,28,192,192, +248,22,190,12,195,11,87,94,28,28,248,22,168,12,23,195,2,10,27,248,22, +167,12,23,196,2,28,23,193,2,192,87,94,23,193,1,28,248,22,135,6,23, +196,2,27,248,22,189,12,23,197,2,28,23,193,2,192,87,94,23,193,1,248, +22,190,12,23,197,2,11,12,250,22,170,8,76,110,111,114,109,97,108,45,112, 97,116,104,45,99,97,115,101,6,42,42,112,97,116,104,32,40,102,111,114,32, 97,110,121,32,115,121,115,116,101,109,41,32,111,114,32,118,97,108,105,100,45, -112,97,116,104,32,115,116,114,105,110,103,23,197,2,28,28,248,22,164,12,23, -195,2,249,22,140,8,248,22,165,12,23,197,2,2,21,249,22,140,8,247,22, +112,97,116,104,32,115,116,114,105,110,103,23,197,2,28,28,248,22,168,12,23, +195,2,249,22,140,8,248,22,169,12,23,197,2,2,21,249,22,140,8,247,22, 154,7,2,21,27,28,248,22,135,6,23,196,2,23,195,2,248,22,144,7,248, -22,168,12,23,197,2,28,249,22,151,13,0,21,35,114,120,34,94,91,92,92, +22,172,12,23,197,2,28,249,22,155,13,0,21,35,114,120,34,94,91,92,92, 93,91,92,92,93,91,63,93,91,92,92,93,34,23,195,2,28,248,22,135,6, -195,248,22,171,12,195,194,27,248,22,174,6,23,195,1,249,22,172,12,248,22, -147,7,250,22,157,13,0,6,35,114,120,34,47,34,28,249,22,151,13,0,22, +195,248,22,175,12,195,194,27,248,22,174,6,23,195,1,249,22,176,12,248,22, +147,7,250,22,161,13,0,6,35,114,120,34,47,34,28,249,22,155,13,0,22, 35,114,120,34,91,47,92,92,93,91,46,32,93,43,91,47,92,92,93,42,36, -34,23,201,2,23,199,1,250,22,157,13,0,19,35,114,120,34,91,32,46,93, +34,23,201,2,23,199,1,250,22,161,13,0,19,35,114,120,34,91,32,46,93, 43,40,91,47,92,92,93,42,41,36,34,23,202,1,6,2,2,92,49,80,158, -42,35,2,21,28,248,22,135,6,194,248,22,171,12,194,193,87,94,28,27,248, -22,163,12,23,196,2,28,23,193,2,192,87,94,23,193,1,28,248,22,135,6, -23,196,2,27,248,22,185,12,23,197,2,28,23,193,2,192,87,94,23,193,1, -248,22,186,12,23,197,2,11,12,250,22,170,8,23,196,2,2,22,23,197,2, -28,248,22,185,12,23,195,2,12,248,22,187,10,249,22,132,10,248,22,164,6, +42,35,2,21,28,248,22,135,6,194,248,22,175,12,194,193,87,94,28,27,248, +22,167,12,23,196,2,28,23,193,2,192,87,94,23,193,1,28,248,22,135,6, +23,196,2,27,248,22,189,12,23,197,2,28,23,193,2,192,87,94,23,193,1, +248,22,190,12,23,197,2,11,12,250,22,170,8,23,196,2,2,22,23,197,2, +28,248,22,189,12,23,195,2,12,248,22,187,10,249,22,132,10,248,22,164,6, 250,22,183,6,2,23,23,200,1,23,201,1,247,22,23,87,94,28,27,248,22, -163,12,23,196,2,28,23,193,2,192,87,94,23,193,1,28,248,22,135,6,23, -196,2,27,248,22,185,12,23,197,2,28,23,193,2,192,87,94,23,193,1,248, -22,186,12,23,197,2,11,12,250,22,170,8,23,196,2,2,22,23,197,2,28, -248,22,185,12,23,195,2,12,248,22,187,10,249,22,132,10,248,22,164,6,250, +167,12,23,196,2,28,23,193,2,192,87,94,23,193,1,28,248,22,135,6,23, +196,2,27,248,22,189,12,23,197,2,28,23,193,2,192,87,94,23,193,1,248, +22,190,12,23,197,2,11,12,250,22,170,8,23,196,2,2,22,23,197,2,28, +248,22,189,12,23,195,2,12,248,22,187,10,249,22,132,10,248,22,164,6,250, 22,183,6,2,23,23,200,1,23,201,1,247,22,23,87,94,87,94,28,27,248, -22,163,12,23,196,2,28,23,193,2,192,87,94,23,193,1,28,248,22,135,6, -23,196,2,27,248,22,185,12,23,197,2,28,23,193,2,192,87,94,23,193,1, -248,22,186,12,23,197,2,11,12,250,22,170,8,195,2,22,23,197,2,28,248, -22,185,12,23,195,2,12,248,22,187,10,249,22,132,10,248,22,164,6,250,22, +22,167,12,23,196,2,28,23,193,2,192,87,94,23,193,1,28,248,22,135,6, +23,196,2,27,248,22,189,12,23,197,2,28,23,193,2,192,87,94,23,193,1, +248,22,190,12,23,197,2,11,12,250,22,170,8,195,2,22,23,197,2,28,248, +22,189,12,23,195,2,12,248,22,187,10,249,22,132,10,248,22,164,6,250,22, 183,6,2,23,199,23,201,1,247,22,23,249,22,3,89,162,42,35,48,9,223, 2,33,35,196,248,22,187,10,249,22,162,10,23,196,1,247,22,23,87,94,87, 94,249,80,159,36,37,35,2,7,195,249,22,3,80,159,36,51,35,196,251,80, 159,38,40,35,2,7,32,0,89,162,42,35,43,9,222,33,37,197,198,32,39, 89,162,42,40,57,65,99,108,111,111,112,222,33,40,28,248,22,71,23,199,2, 87,94,23,198,1,248,23,196,1,251,22,183,6,2,24,23,199,1,28,248,22, -71,23,203,2,87,94,23,202,1,23,201,1,250,22,1,22,181,12,23,204,1, -23,205,1,23,198,1,27,249,22,181,12,248,22,64,23,202,2,23,199,2,28, -248,22,176,12,23,194,2,27,250,22,1,22,181,12,23,197,1,23,202,2,28, -248,22,176,12,23,194,2,192,87,94,23,193,1,27,248,22,65,23,202,1,28, +71,23,203,2,87,94,23,202,1,23,201,1,250,22,1,22,185,12,23,204,1, +23,205,1,23,198,1,27,249,22,185,12,248,22,64,23,202,2,23,199,2,28, +248,22,180,12,23,194,2,27,250,22,1,22,185,12,23,197,1,23,202,2,28, +248,22,180,12,23,194,2,192,87,94,23,193,1,27,248,22,65,23,202,1,28, 248,22,71,23,194,2,87,94,23,193,1,248,23,199,1,251,22,183,6,2,24, 23,202,1,28,248,22,71,23,206,2,87,94,23,205,1,23,204,1,250,22,1, -22,181,12,23,207,1,23,208,1,23,201,1,27,249,22,181,12,248,22,64,23, -197,2,23,202,2,28,248,22,176,12,23,194,2,27,250,22,1,22,181,12,23, -197,1,204,28,248,22,176,12,193,192,253,2,39,203,204,205,206,23,15,248,22, +22,185,12,23,207,1,23,208,1,23,201,1,27,249,22,185,12,248,22,64,23, +197,2,23,202,2,28,248,22,180,12,23,194,2,27,250,22,1,22,185,12,23, +197,1,204,28,248,22,180,12,193,192,253,2,39,203,204,205,206,23,15,248,22, 65,201,253,2,39,202,203,204,205,206,248,22,65,200,87,94,23,193,1,27,248, 22,65,23,201,1,28,248,22,71,23,194,2,87,94,23,193,1,248,23,198,1, 251,22,183,6,2,24,23,201,1,28,248,22,71,23,205,2,87,94,23,204,1, -23,203,1,250,22,1,22,181,12,23,206,1,23,207,1,23,200,1,27,249,22, -181,12,248,22,64,23,197,2,23,201,2,28,248,22,176,12,23,194,2,27,250, -22,1,22,181,12,23,197,1,203,28,248,22,176,12,193,192,253,2,39,202,203, +23,203,1,250,22,1,22,185,12,23,206,1,23,207,1,23,200,1,27,249,22, +185,12,248,22,64,23,197,2,23,201,2,28,248,22,180,12,23,194,2,27,250, +22,1,22,185,12,23,197,1,203,28,248,22,180,12,193,192,253,2,39,202,203, 204,205,206,248,22,65,201,253,2,39,201,202,203,204,205,248,22,65,200,27,247, -22,140,13,253,2,39,198,199,200,201,202,198,87,95,28,28,248,22,164,12,23, -194,2,10,27,248,22,163,12,23,195,2,28,23,193,2,192,87,94,23,193,1, -28,248,22,135,6,23,195,2,27,248,22,185,12,23,196,2,28,23,193,2,192, -87,94,23,193,1,248,22,186,12,23,196,2,11,12,252,22,170,8,23,200,2, +22,144,13,253,2,39,198,199,200,201,202,198,87,95,28,28,248,22,168,12,23, +194,2,10,27,248,22,167,12,23,195,2,28,23,193,2,192,87,94,23,193,1, +28,248,22,135,6,23,195,2,27,248,22,189,12,23,196,2,28,23,193,2,192, +87,94,23,193,1,248,22,190,12,23,196,2,11,12,252,22,170,8,23,200,2, 2,25,34,23,198,2,23,199,2,28,28,248,22,135,6,23,195,2,10,248,22, 187,6,23,195,2,87,94,23,194,1,12,252,22,170,8,23,200,2,2,26,35, -23,198,2,23,199,1,91,159,37,11,90,161,37,34,11,248,22,184,12,23,197, +23,198,2,23,199,1,91,159,37,11,90,161,37,34,11,248,22,188,12,23,197, 2,87,94,23,195,1,87,94,28,192,12,250,22,171,8,23,201,1,2,27,23, 199,1,249,22,7,194,195,91,159,36,11,90,161,36,34,11,87,95,28,28,248, -22,164,12,23,196,2,10,27,248,22,163,12,23,197,2,28,23,193,2,192,87, -94,23,193,1,28,248,22,135,6,23,197,2,27,248,22,185,12,23,198,2,28, -23,193,2,192,87,94,23,193,1,248,22,186,12,23,198,2,11,12,252,22,170, +22,168,12,23,196,2,10,27,248,22,167,12,23,197,2,28,23,193,2,192,87, +94,23,193,1,28,248,22,135,6,23,197,2,27,248,22,189,12,23,198,2,28, +23,193,2,192,87,94,23,193,1,248,22,190,12,23,198,2,11,12,252,22,170, 8,2,10,2,25,34,23,200,2,23,201,2,28,28,248,22,135,6,23,197,2, 10,248,22,187,6,23,197,2,12,252,22,170,8,2,10,2,26,35,23,200,2, -23,201,2,91,159,37,11,90,161,37,34,11,248,22,184,12,23,199,2,87,94, +23,201,2,91,159,37,11,90,161,37,34,11,248,22,188,12,23,199,2,87,94, 23,195,1,87,94,28,23,193,2,12,250,22,171,8,2,10,2,27,23,201,2, -249,22,7,23,195,1,23,196,1,27,249,22,173,12,250,22,156,13,0,18,35, -114,120,35,34,40,91,46,93,91,94,46,93,42,124,41,36,34,248,22,169,12, +249,22,7,23,195,1,23,196,1,27,249,22,177,12,250,22,160,13,0,18,35, +114,120,35,34,40,91,46,93,91,94,46,93,42,124,41,36,34,248,22,173,12, 23,201,1,28,248,22,135,6,23,203,2,249,22,147,7,23,204,1,8,63,23, -202,1,28,248,22,164,12,23,199,2,248,22,165,12,23,199,1,87,94,23,198, -1,247,22,166,12,28,248,22,163,12,194,249,22,181,12,195,194,192,91,159,36, -11,90,161,36,34,11,87,95,28,28,248,22,164,12,23,196,2,10,27,248,22, -163,12,23,197,2,28,23,193,2,192,87,94,23,193,1,28,248,22,135,6,23, -197,2,27,248,22,185,12,23,198,2,28,23,193,2,192,87,94,23,193,1,248, -22,186,12,23,198,2,11,12,252,22,170,8,2,11,2,25,34,23,200,2,23, +202,1,28,248,22,168,12,23,199,2,248,22,169,12,23,199,1,87,94,23,198, +1,247,22,170,12,28,248,22,167,12,194,249,22,185,12,195,194,192,91,159,36, +11,90,161,36,34,11,87,95,28,28,248,22,168,12,23,196,2,10,27,248,22, +167,12,23,197,2,28,23,193,2,192,87,94,23,193,1,28,248,22,135,6,23, +197,2,27,248,22,189,12,23,198,2,28,23,193,2,192,87,94,23,193,1,248, +22,190,12,23,198,2,11,12,252,22,170,8,2,11,2,25,34,23,200,2,23, 201,2,28,28,248,22,135,6,23,197,2,10,248,22,187,6,23,197,2,12,252, 22,170,8,2,11,2,26,35,23,200,2,23,201,2,91,159,37,11,90,161,37, -34,11,248,22,184,12,23,199,2,87,94,23,195,1,87,94,28,23,193,2,12, +34,11,248,22,188,12,23,199,2,87,94,23,195,1,87,94,28,23,193,2,12, 250,22,171,8,2,11,2,27,23,201,2,249,22,7,23,195,1,23,196,1,27, -249,22,173,12,249,22,133,7,250,22,157,13,0,9,35,114,120,35,34,91,46, -93,34,248,22,169,12,23,203,1,6,1,1,95,28,248,22,135,6,23,202,2, -249,22,147,7,23,203,1,8,63,23,201,1,28,248,22,164,12,23,199,2,248, -22,165,12,23,199,1,87,94,23,198,1,247,22,166,12,28,248,22,163,12,194, -249,22,181,12,195,194,192,249,247,22,186,5,194,11,248,80,158,35,45,9,27, -247,22,142,13,249,80,158,37,46,28,23,195,2,27,248,22,152,7,6,11,11, +249,22,177,12,249,22,133,7,250,22,161,13,0,9,35,114,120,35,34,91,46, +93,34,248,22,173,12,23,203,1,6,1,1,95,28,248,22,135,6,23,202,2, +249,22,147,7,23,203,1,8,63,23,201,1,28,248,22,168,12,23,199,2,248, +22,169,12,23,199,1,87,94,23,198,1,247,22,170,12,28,248,22,167,12,194, +249,22,185,12,195,194,192,249,247,22,186,5,194,11,248,80,158,35,45,9,27, +247,22,146,13,249,80,158,37,46,28,23,195,2,27,248,22,152,7,6,11,11, 80,76,84,67,79,76,76,69,67,84,83,28,192,192,6,0,0,6,0,0,27, -28,23,196,1,250,22,181,12,248,22,138,13,69,97,100,100,111,110,45,100,105, +28,23,196,1,250,22,185,12,248,22,142,13,69,97,100,100,111,110,45,100,105, 114,247,22,150,7,6,8,8,99,111,108,108,101,99,116,115,11,27,248,80,159, -40,52,35,249,22,77,23,202,1,248,22,73,248,22,138,13,72,99,111,108,108, +40,52,35,249,22,77,23,202,1,248,22,73,248,22,142,13,72,99,111,108,108, 101,99,116,115,45,100,105,114,28,23,194,2,249,22,63,23,196,1,23,195,1, -192,32,48,89,162,8,44,37,49,2,19,222,33,49,27,249,22,149,13,23,197, +192,32,48,89,162,8,44,37,49,2,19,222,33,49,27,249,22,153,13,23,197, 2,23,198,2,28,23,193,2,87,94,23,196,1,27,248,22,88,23,195,2,27, 250,2,48,23,199,2,23,200,1,248,22,97,23,199,1,28,249,22,129,7,23, -196,2,2,28,249,22,77,197,194,87,94,23,196,1,249,22,63,248,22,172,12, +196,2,2,28,249,22,77,197,194,87,94,23,196,1,249,22,63,248,22,176,12, 23,197,1,194,87,95,23,195,1,23,193,1,28,249,22,129,7,23,198,2,2, -28,249,22,77,195,9,87,94,23,194,1,249,22,63,248,22,172,12,23,199,1, +28,249,22,77,195,9,87,94,23,194,1,249,22,63,248,22,176,12,23,199,1, 9,87,95,28,28,248,22,187,6,194,10,248,22,135,6,194,12,250,22,170,8, 2,14,6,21,21,98,121,116,101,32,115,116,114,105,110,103,32,111,114,32,115, -116,114,105,110,103,196,28,28,248,22,72,195,249,22,4,22,163,12,196,11,12, +116,114,105,110,103,196,28,28,248,22,72,195,249,22,4,22,167,12,196,11,12, 250,22,170,8,2,14,6,13,13,108,105,115,116,32,111,102,32,112,97,116,104, 115,197,250,2,48,197,195,28,248,22,135,6,197,248,22,146,7,197,196,32,51, 89,162,8,44,38,56,2,19,222,33,54,32,52,89,162,8,44,37,53,70,102, 111,117,110,100,45,101,120,101,99,222,33,53,28,23,193,2,91,159,37,11,90, -161,37,34,11,248,22,184,12,23,199,2,87,95,23,195,1,23,194,1,27,28, -23,198,2,27,248,22,189,12,23,201,2,28,249,22,142,8,23,195,2,23,202, -2,11,28,248,22,185,12,23,194,2,250,2,52,23,201,2,23,202,2,249,22, -181,12,23,200,2,23,198,1,250,2,52,23,201,2,23,202,2,23,196,1,11, -28,23,193,2,192,87,94,23,193,1,27,28,248,22,163,12,23,196,2,27,249, -22,181,12,23,198,2,23,201,2,28,28,248,22,176,12,193,10,248,22,175,12, +161,37,34,11,248,22,188,12,23,199,2,87,95,23,195,1,23,194,1,27,28, +23,198,2,27,248,22,129,13,23,201,2,28,249,22,142,8,23,195,2,23,202, +2,11,28,248,22,189,12,23,194,2,250,2,52,23,201,2,23,202,2,249,22, +185,12,23,200,2,23,198,1,250,2,52,23,201,2,23,202,2,23,196,1,11, +28,23,193,2,192,87,94,23,193,1,27,28,248,22,167,12,23,196,2,27,249, +22,185,12,23,198,2,23,201,2,28,28,248,22,180,12,193,10,248,22,179,12, 193,192,11,11,28,23,193,2,192,87,94,23,193,1,28,23,199,2,11,27,248, -22,189,12,23,202,2,28,249,22,142,8,23,195,2,23,203,1,11,28,248,22, -185,12,23,194,2,250,2,52,23,202,1,23,203,1,249,22,181,12,23,201,1, +22,129,13,23,202,2,28,249,22,142,8,23,195,2,23,203,1,11,28,248,22, +189,12,23,194,2,250,2,52,23,202,1,23,203,1,249,22,185,12,23,201,1, 23,198,1,250,2,52,201,202,195,194,28,248,22,71,23,197,2,11,27,248,22, -188,12,248,22,64,23,199,2,27,249,22,181,12,23,196,1,23,197,2,28,248, -22,175,12,23,194,2,250,2,52,198,199,195,87,94,23,193,1,27,248,22,65, -23,200,1,28,248,22,71,23,194,2,11,27,248,22,188,12,248,22,64,23,196, -2,27,249,22,181,12,23,196,1,23,200,2,28,248,22,175,12,23,194,2,250, +128,13,248,22,64,23,199,2,27,249,22,185,12,23,196,1,23,197,2,28,248, +22,179,12,23,194,2,250,2,52,198,199,195,87,94,23,193,1,27,248,22,65, +23,200,1,28,248,22,71,23,194,2,11,27,248,22,128,13,248,22,64,23,196, +2,27,249,22,185,12,23,196,1,23,200,2,28,248,22,179,12,23,194,2,250, 2,52,201,202,195,87,94,23,193,1,27,248,22,65,23,197,1,28,248,22,71, -23,194,2,11,27,248,22,188,12,248,22,64,195,27,249,22,181,12,23,196,1, -202,28,248,22,175,12,193,250,2,52,204,205,195,251,2,51,204,205,206,248,22, -65,199,87,95,28,27,248,22,163,12,23,196,2,28,23,193,2,192,87,94,23, -193,1,28,248,22,135,6,23,196,2,27,248,22,185,12,23,197,2,28,23,193, -2,192,87,94,23,193,1,248,22,186,12,23,197,2,11,12,250,22,170,8,2, +23,194,2,11,27,248,22,128,13,248,22,64,195,27,249,22,185,12,23,196,1, +202,28,248,22,179,12,193,250,2,52,204,205,195,251,2,51,204,205,206,248,22, +65,199,87,95,28,27,248,22,167,12,23,196,2,28,23,193,2,192,87,94,23, +193,1,28,248,22,135,6,23,196,2,27,248,22,189,12,23,197,2,28,23,193, +2,192,87,94,23,193,1,248,22,190,12,23,197,2,11,12,250,22,170,8,2, 15,6,25,25,112,97,116,104,32,111,114,32,115,116,114,105,110,103,32,40,115, -97,110,115,32,110,117,108,41,23,197,2,28,28,23,195,2,28,27,248,22,163, +97,110,115,32,110,117,108,41,23,197,2,28,28,23,195,2,28,27,248,22,167, 12,23,197,2,28,23,193,2,192,87,94,23,193,1,28,248,22,135,6,23,197, -2,27,248,22,185,12,23,198,2,28,23,193,2,192,87,94,23,193,1,248,22, -186,12,23,198,2,11,248,22,185,12,23,196,2,11,10,12,250,22,170,8,2, +2,27,248,22,189,12,23,198,2,28,23,193,2,192,87,94,23,193,1,248,22, +190,12,23,198,2,11,248,22,189,12,23,196,2,11,10,12,250,22,170,8,2, 15,6,29,29,35,102,32,111,114,32,114,101,108,97,116,105,118,101,32,112,97, -116,104,32,111,114,32,115,116,114,105,110,103,23,198,2,28,28,248,22,185,12, -23,195,2,91,159,37,11,90,161,37,34,11,248,22,184,12,23,198,2,249,22, +116,104,32,111,114,32,115,116,114,105,110,103,23,198,2,28,28,248,22,189,12, +23,195,2,91,159,37,11,90,161,37,34,11,248,22,188,12,23,198,2,249,22, 140,8,194,68,114,101,108,97,116,105,118,101,11,27,248,22,152,7,6,4,4, 80,65,84,72,251,2,51,23,199,1,23,200,1,23,201,1,28,23,197,2,27, 249,80,158,42,46,23,200,1,9,28,249,22,140,8,247,22,154,7,2,21,249, -22,63,248,22,172,12,5,1,46,23,195,1,192,9,27,248,22,188,12,23,196, -1,28,248,22,175,12,193,250,2,52,198,199,195,11,250,80,158,37,47,196,197, +22,63,248,22,176,12,5,1,46,23,195,1,192,9,27,248,22,128,13,23,196, +1,28,248,22,179,12,193,250,2,52,198,199,195,11,250,80,158,37,47,196,197, 11,250,80,158,37,47,196,11,11,87,94,249,22,191,5,247,22,168,4,195,248, 22,142,5,249,22,153,3,34,249,22,137,3,197,198,27,28,23,197,2,87,95, -23,196,1,23,195,1,23,197,1,87,94,23,197,1,27,248,22,138,13,2,20, +23,196,1,23,195,1,23,197,1,87,94,23,197,1,27,248,22,142,13,2,20, 27,249,80,158,39,47,23,196,1,11,27,27,248,22,156,3,23,200,1,28,192, 192,34,27,27,248,22,156,3,23,202,1,28,192,192,34,249,22,185,4,23,197, 1,83,158,38,20,96,95,89,162,8,44,34,46,9,224,3,2,33,58,23,195, @@ -330,7 +330,7 @@ 159,34,43,35,83,158,34,16,2,32,0,89,162,42,35,42,2,12,222,33,45, 80,159,34,44,35,83,158,34,16,2,83,158,37,20,95,95,2,13,89,162,42, 34,41,9,223,0,33,46,89,162,42,35,51,9,223,0,33,47,80,159,34,45, -35,83,158,34,16,2,27,248,22,145,13,248,22,146,7,27,28,249,22,140,8, +35,83,158,34,16,2,27,248,22,149,13,248,22,146,7,27,28,249,22,140,8, 247,22,154,7,2,21,6,1,1,59,6,1,1,58,250,22,183,6,6,14,14, 40,91,94,126,97,93,42,41,126,97,40,46,42,41,23,196,2,23,196,1,89, 162,8,44,36,46,2,14,223,0,33,50,80,159,34,46,35,83,158,34,16,2, @@ -347,7 +347,7 @@ 111,116,101,29,94,2,1,67,35,37,117,116,105,108,115,11,29,94,2,1,69, 35,37,110,101,116,119,111,114,107,11,29,94,2,1,68,35,37,112,97,114,97, 109,122,11,29,94,2,1,68,35,37,101,120,112,111,98,115,11,29,94,2,1, -68,35,37,107,101,114,110,101,108,11,98,10,34,11,8,129,187,97,159,2,2, +68,35,37,107,101,114,110,101,108,11,98,10,34,11,8,178,182,97,159,2,2, 34,34,159,2,3,34,34,159,2,4,34,34,159,2,5,34,34,159,2,6,34, 34,16,0,159,34,20,102,159,34,16,1,20,24,65,98,101,103,105,110,16,0, 83,158,40,20,99,137,69,35,37,98,117,105,108,116,105,110,29,11,11,10,10, @@ -382,29 +382,29 @@ 117,108,101,45,110,97,109,101,45,114,101,115,111,108,118,101,114,63,108,105,98, 67,105,103,110,111,114,101,100,249,22,14,195,80,158,36,44,249,80,159,36,47, 35,195,10,27,28,23,195,2,28,249,22,140,8,23,197,2,80,158,37,45,87, -94,23,195,1,80,158,35,46,27,248,22,151,4,23,197,2,28,248,22,163,12, -23,194,2,91,159,37,11,90,161,37,34,11,248,22,184,12,23,197,1,87,95, +94,23,195,1,80,158,35,46,27,248,22,151,4,23,197,2,28,248,22,167,12, +23,194,2,91,159,37,11,90,161,37,34,11,248,22,188,12,23,197,1,87,95, 83,160,36,11,80,158,39,45,198,83,160,36,11,80,158,39,46,192,192,11,11, -28,23,193,2,192,87,94,23,193,1,27,247,22,187,5,28,192,192,247,22,139, +28,23,193,2,192,87,94,23,193,1,27,247,22,187,5,28,192,192,247,22,143, 13,20,14,159,80,158,34,38,250,80,158,37,39,249,22,27,11,80,158,39,38, -22,187,5,28,248,22,163,12,23,198,2,23,197,1,87,94,23,197,1,247,22, -139,13,247,194,250,22,181,12,23,197,1,23,199,1,249,80,158,41,37,23,198, -1,5,3,46,122,111,252,22,181,12,23,199,1,23,201,1,6,6,6,110,97, +22,187,5,28,248,22,167,12,23,198,2,23,197,1,87,94,23,197,1,247,22, +143,13,247,194,250,22,185,12,23,197,1,23,199,1,249,80,158,41,37,23,198, +1,5,3,46,122,111,252,22,185,12,23,199,1,23,201,1,6,6,6,110,97, 116,105,118,101,247,22,155,7,249,80,158,43,37,23,200,1,80,158,43,34,87, -94,23,194,1,27,23,194,1,27,250,22,134,13,196,11,32,0,89,162,8,44, +94,23,194,1,27,23,194,1,27,250,22,138,13,196,11,32,0,89,162,8,44, 34,39,9,222,11,28,192,249,22,63,195,194,11,27,248,23,195,1,23,196,1, -27,250,22,134,13,196,11,32,0,89,162,8,44,34,39,9,222,11,28,192,249, -22,63,195,194,11,249,247,22,144,13,248,22,64,195,195,27,248,23,195,1,23, -196,1,27,250,22,134,13,196,11,32,0,89,162,8,44,34,39,9,222,11,28, +27,250,22,138,13,196,11,32,0,89,162,8,44,34,39,9,222,11,28,192,249, +22,63,195,194,11,249,247,22,148,13,248,22,64,195,195,27,248,23,195,1,23, +196,1,27,250,22,138,13,196,11,32,0,89,162,8,44,34,39,9,222,11,28, 192,249,22,63,195,194,11,249,247,22,185,5,248,22,64,195,195,249,247,22,185, 5,194,195,87,94,28,248,80,158,35,36,23,195,2,12,250,22,170,8,77,108, 111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,6,25,25,112,97, 116,104,32,111,114,32,118,97,108,105,100,45,112,97,116,104,32,115,116,114,105, -110,103,23,197,2,91,159,40,11,90,161,35,34,11,28,248,22,187,12,23,201, -2,23,200,1,27,247,22,187,5,28,23,193,2,249,22,188,12,23,203,1,23, -195,1,200,90,161,37,35,11,248,22,184,12,23,194,2,87,94,23,196,1,90, +110,103,23,197,2,91,159,40,11,90,161,35,34,11,28,248,22,191,12,23,201, +2,23,200,1,27,247,22,187,5,28,23,193,2,249,22,128,13,23,203,1,23, +195,1,200,90,161,37,35,11,248,22,188,12,23,194,2,87,94,23,196,1,90, 161,35,38,11,28,249,22,140,8,23,196,2,68,114,101,108,97,116,105,118,101, -87,94,23,194,1,2,17,23,194,1,90,161,35,39,11,247,22,141,13,27,89, +87,94,23,194,1,2,17,23,194,1,90,161,35,39,11,247,22,145,13,27,89, 162,42,35,48,62,122,111,225,7,5,3,33,27,27,83,158,38,20,96,94,89, 162,42,35,50,9,225,8,6,4,33,28,23,197,1,27,249,22,5,89,162,8, 44,35,46,9,223,5,33,29,23,203,2,27,28,23,195,2,27,249,22,5,83, @@ -418,11 +418,11 @@ 193,11,11,11,11,28,192,249,80,159,47,53,35,203,89,162,42,34,44,9,224, 15,2,33,33,249,80,159,47,53,35,203,89,162,42,34,43,9,224,15,7,33, 34,32,36,89,162,8,44,35,53,2,19,222,33,38,0,17,35,114,120,34,94, -40,46,42,63,41,47,40,46,42,41,36,34,27,249,22,149,13,2,37,23,196, +40,46,42,63,41,47,40,46,42,41,36,34,27,249,22,153,13,2,37,23,196, 2,28,23,193,2,87,94,23,194,1,249,22,63,248,22,88,23,196,2,27,248, -22,97,23,197,1,27,249,22,149,13,2,37,23,196,2,28,23,193,2,87,94, +22,97,23,197,1,27,249,22,153,13,2,37,23,196,2,28,23,193,2,87,94, 23,194,1,249,22,63,248,22,88,23,196,2,27,248,22,97,23,197,1,27,249, -22,149,13,2,37,23,196,2,28,23,193,2,87,94,23,194,1,249,22,63,248, +22,153,13,2,37,23,196,2,28,23,193,2,87,94,23,194,1,249,22,63,248, 22,88,23,196,2,248,2,36,248,22,97,23,197,1,248,22,73,194,248,22,73, 194,248,22,73,194,32,39,89,162,42,35,53,2,19,222,33,40,28,248,22,71, 248,22,65,23,195,2,249,22,7,9,248,22,64,195,91,159,36,11,90,161,36, @@ -436,8 +436,8 @@ 39,193,87,95,28,248,22,149,4,195,12,250,22,170,8,2,20,6,20,20,114, 101,115,111,108,118,101,100,45,109,111,100,117,108,101,45,112,97,116,104,197,28, 24,193,2,248,24,194,1,195,87,94,23,193,1,12,27,27,250,22,126,80,158, -40,41,248,22,167,13,247,22,151,11,11,28,23,193,2,192,87,94,23,193,1, -27,247,22,120,87,94,250,22,125,80,158,41,41,248,22,167,13,247,22,151,11, +40,41,248,22,171,13,247,22,151,11,11,28,23,193,2,192,87,94,23,193,1, +27,247,22,120,87,94,250,22,125,80,158,41,41,248,22,171,13,247,22,151,11, 195,192,250,22,125,195,198,66,97,116,116,97,99,104,251,211,197,198,199,10,28, 192,250,22,169,8,11,196,195,248,22,167,8,194,28,249,22,141,6,194,6,1, 1,46,2,17,28,249,22,141,6,194,6,2,2,46,46,62,117,112,192,28,249, @@ -447,8 +447,8 @@ 1,249,22,2,22,65,248,22,78,249,22,63,23,206,1,23,202,1,12,12,247, 192,20,14,159,80,158,38,43,249,22,63,247,22,151,11,23,197,1,20,14,159, 80,158,38,38,250,80,158,41,39,249,22,27,11,80,158,43,38,22,133,4,23, -196,1,249,247,22,186,5,23,198,1,248,22,52,248,22,167,12,23,198,1,87, -94,28,28,248,22,163,12,23,197,2,10,248,22,154,4,23,197,2,12,28,23, +196,1,249,247,22,186,5,23,198,1,248,22,52,248,22,171,12,23,198,1,87, +94,28,28,248,22,167,12,23,197,2,10,248,22,154,4,23,197,2,12,28,23, 198,2,250,22,169,8,11,6,15,15,98,97,100,32,109,111,100,117,108,101,32, 112,97,116,104,23,201,2,250,22,170,8,2,20,6,19,19,109,111,100,117,108, 101,45,112,97,116,104,32,111,114,32,112,97,116,104,23,199,2,28,28,248,22, @@ -462,50 +462,50 @@ 211,199,200,201,202,87,94,23,193,1,27,89,162,42,35,44,79,115,104,111,119, 45,99,111,108,108,101,99,116,105,111,110,45,101,114,114,223,6,33,44,27,28, 248,22,51,23,199,2,27,250,22,126,80,158,42,42,249,22,63,23,204,2,247, -22,140,13,11,28,23,193,2,192,87,94,23,193,1,91,159,36,11,90,161,36, +22,144,13,11,28,23,193,2,192,87,94,23,193,1,91,159,36,11,90,161,36, 34,11,249,80,159,43,47,35,248,22,54,23,204,2,11,27,251,80,158,46,49, 2,20,23,202,1,28,248,22,71,23,199,2,23,199,2,248,22,64,23,199,2, -28,248,22,71,23,199,2,9,248,22,65,23,199,2,249,22,181,12,23,195,1, +28,248,22,71,23,199,2,9,248,22,65,23,199,2,249,22,185,12,23,195,1, 28,248,22,71,23,197,1,87,94,23,197,1,6,7,7,109,97,105,110,46,115, 115,249,22,158,6,23,199,1,6,3,3,46,115,115,28,248,22,135,6,23,199, 2,87,94,23,194,1,27,248,80,159,40,54,35,23,201,2,27,250,22,126,80, 158,43,42,249,22,63,23,205,2,23,199,2,11,28,23,193,2,192,87,94,23, 193,1,91,159,36,11,90,161,36,34,11,249,80,159,44,47,35,23,204,2,11, -250,22,1,22,181,12,23,199,1,249,22,77,249,22,2,32,0,89,162,8,44, -35,42,9,222,33,45,23,200,1,248,22,73,23,200,1,28,248,22,163,12,23, -199,2,87,94,23,194,1,28,248,22,186,12,23,199,2,23,198,2,248,22,73, +250,22,1,22,185,12,23,199,1,249,22,77,249,22,2,32,0,89,162,8,44, +35,42,9,222,33,45,23,200,1,248,22,73,23,200,1,28,248,22,167,12,23, +199,2,87,94,23,194,1,28,248,22,190,12,23,199,2,23,198,2,248,22,73, 6,26,26,32,40,97,32,112,97,116,104,32,109,117,115,116,32,98,101,32,97, 98,115,111,108,117,116,101,41,28,249,22,140,8,248,22,64,23,201,2,2,21, -27,250,22,126,80,158,42,42,249,22,63,23,204,2,247,22,140,13,11,28,23, +27,250,22,126,80,158,42,42,249,22,63,23,204,2,247,22,144,13,11,28,23, 193,2,192,87,94,23,193,1,91,159,37,11,90,161,36,34,11,249,80,159,44, 47,35,248,22,88,23,205,2,11,90,161,35,36,11,28,248,22,71,248,22,90, -23,204,2,28,248,22,71,23,194,2,249,22,151,13,0,8,35,114,120,34,91, +23,204,2,28,248,22,71,23,194,2,249,22,155,13,0,8,35,114,120,34,91, 46,93,34,23,196,2,11,10,27,27,28,23,197,2,249,22,77,28,248,22,71, 248,22,90,23,208,2,21,93,6,5,5,109,122,108,105,98,249,22,1,22,77, 249,22,2,80,159,50,55,35,248,22,90,23,211,2,23,197,2,28,248,22,71, 23,196,2,248,22,73,23,197,2,23,195,2,251,80,158,48,49,2,20,23,204, -1,248,22,64,23,198,2,248,22,65,23,198,1,249,22,181,12,23,195,1,28, +1,248,22,64,23,198,2,248,22,65,23,198,1,249,22,185,12,23,195,1,28, 23,198,1,87,94,23,196,1,23,197,1,28,248,22,71,23,197,1,87,94,23, -197,1,6,7,7,109,97,105,110,46,115,115,28,249,22,151,13,0,8,35,114, +197,1,6,7,7,109,97,105,110,46,115,115,28,249,22,155,13,0,8,35,114, 120,34,91,46,93,34,23,199,2,23,197,1,249,22,158,6,23,199,1,6,3, 3,46,115,115,28,249,22,140,8,248,22,64,23,201,2,64,102,105,108,101,249, -22,188,12,248,22,88,23,201,2,248,80,159,41,54,35,23,202,2,12,87,94, -28,28,248,22,163,12,23,194,2,10,248,22,157,7,23,194,2,87,94,23,200, +22,128,13,248,22,88,23,201,2,248,80,159,41,54,35,23,202,2,12,87,94, +28,28,248,22,167,12,23,194,2,10,248,22,157,7,23,194,2,87,94,23,200, 1,12,28,23,200,2,250,22,169,8,67,114,101,113,117,105,114,101,249,22,183, 6,6,17,17,98,97,100,32,109,111,100,117,108,101,32,112,97,116,104,126,97, 28,23,198,2,248,22,64,23,199,2,6,0,0,23,203,1,87,94,23,200,1, 250,22,170,8,2,20,249,22,183,6,6,13,13,109,111,100,117,108,101,32,112, 97,116,104,126,97,28,23,198,2,248,22,64,23,199,2,6,0,0,23,201,2, -27,28,248,22,157,7,23,195,2,249,22,162,7,23,196,2,34,249,22,190,12, -248,22,191,12,23,197,2,11,27,28,248,22,157,7,23,196,2,249,22,162,7, +27,28,248,22,157,7,23,195,2,249,22,162,7,23,196,2,34,249,22,130,13, +248,22,131,13,23,197,2,11,27,28,248,22,157,7,23,196,2,249,22,162,7, 23,197,2,35,248,80,158,41,50,23,195,2,91,159,37,11,90,161,37,34,11, 28,248,22,157,7,23,199,2,250,22,7,2,22,249,22,162,7,23,203,2,36, -2,22,248,22,184,12,23,198,2,87,95,23,195,1,23,193,1,27,28,248,22, +2,22,248,22,188,12,23,198,2,87,95,23,195,1,23,193,1,27,28,248,22, 157,7,23,200,2,249,22,162,7,23,201,2,37,249,80,158,46,51,23,197,2, 5,0,27,28,248,22,157,7,23,201,2,249,22,162,7,23,202,2,38,248,22, -150,4,23,200,2,27,27,250,22,126,80,158,50,41,248,22,167,13,247,22,151, +150,4,23,200,2,27,27,250,22,126,80,158,50,41,248,22,171,13,247,22,151, 11,11,28,23,193,2,192,87,94,23,193,1,27,247,22,120,87,94,250,22,125, -80,158,51,41,248,22,167,13,247,22,151,11,195,192,87,95,28,23,209,1,27, +80,158,51,41,248,22,171,13,247,22,151,11,195,192,87,95,28,23,209,1,27, 250,22,126,23,197,2,197,11,28,23,193,1,12,87,95,27,27,28,248,22,17, 80,158,50,44,80,158,49,44,247,22,19,250,22,25,248,22,23,23,197,2,80, 158,52,43,23,196,1,27,247,22,151,11,249,22,3,83,158,38,20,96,94,89, @@ -516,12 +516,12 @@ 2,28,192,192,28,248,22,61,23,208,2,249,22,140,8,248,22,64,23,210,2, 2,21,11,250,22,125,80,158,49,42,28,248,22,135,6,23,210,2,249,22,63, 23,211,1,248,80,159,52,54,35,23,213,1,87,94,23,210,1,249,22,63,23, -211,1,247,22,140,13,252,22,159,7,23,208,1,23,207,1,23,205,1,23,203, +211,1,247,22,144,13,252,22,159,7,23,208,1,23,207,1,23,205,1,23,203, 1,201,12,193,91,159,36,10,90,161,35,34,10,11,90,161,35,35,10,83,158, 37,20,95,96,2,20,89,162,8,44,35,49,9,224,2,0,33,42,89,162,42, 37,47,9,223,1,33,43,89,162,42,38,8,30,9,225,2,3,0,33,49,208, 87,95,248,22,132,4,248,80,158,36,48,247,22,151,11,248,22,186,5,80,158, -35,35,248,22,137,12,80,159,35,40,35,159,34,20,102,159,34,16,1,20,24, +35,35,248,22,141,12,80,159,35,40,35,159,34,20,102,159,34,16,1,20,24, 65,98,101,103,105,110,16,0,83,158,40,20,99,137,66,35,37,98,111,111,116, 2,1,11,10,10,36,80,158,34,34,20,102,159,38,16,19,30,2,1,2,2, 193,30,2,1,2,3,193,30,2,5,72,112,97,116,104,45,115,116,114,105,110, Index: src/mzscheme/src/mzmark.c =================================================================== --- src/mzscheme/src/mzmark.c (revision 8997) +++ src/mzscheme/src/mzmark.c (working copy) @@ -1678,6 +1678,9 @@ gcMARK(pr->dead_box); gcMARK(pr->running_box); + gcMARK(pr->mbox_first); + gcMARK(pr->mbox_last); + gcMARK(pr->mbox_sema); return gcBYTES_TO_WORDS(sizeof(Scheme_Thread)); } @@ -1775,6 +1778,9 @@ gcFIXUP(pr->dead_box); gcFIXUP(pr->running_box); + gcFIXUP(pr->mbox_first); + gcFIXUP(pr->mbox_last); + gcFIXUP(pr->mbox_sema); return gcBYTES_TO_WORDS(sizeof(Scheme_Thread)); } Index: src/mzscheme/src/thread.c =================================================================== --- src/mzscheme/src/thread.c (revision 8997) +++ src/mzscheme/src/thread.c (working copy) @@ -2176,7 +2176,7 @@ process->list_stack = NULL; scheme_gmp_tls_init(process->gmp_tls); - + if (prefix) { process->next = scheme_first_thread; process->prev = NULL; @@ -2244,6 +2244,21 @@ process->nester = process->nestee = NULL; + process->mbox_first = NULL; + process->mbox_last = NULL; + process->mbox_sema = NULL; + /* this ensures the process has all members initialized before allocating + memory for the mbox semaphore (maybe unecessary) */ + process->mref = NULL; + process->extra_mrefs = NULL; + { + Scheme_Object *sema = NULL; + sema = scheme_make_sema(0); + process->mbox_sema = sema; + } + + + /* A thread points to a lot of stuff, so it's bad to put a finalization on it, which is what registering with a custodian does. Instead, we register a weak indirection with the custodian. That way, the thread @@ -2586,6 +2601,10 @@ r->error_buf = NULL; r->spare_runstack = NULL; + + r->mbox_first = NULL; + r->mbox_last = NULL; + r->mbox_sema = NULL; } static void remove_thread(Scheme_Thread *r) Index: src/mzscheme/src/mzmarksrc.c =================================================================== --- src/mzscheme/src/mzmarksrc.c (revision 8997) +++ src/mzscheme/src/mzmarksrc.c (working copy) @@ -692,6 +692,9 @@ gcMARK(pr->dead_box); gcMARK(pr->running_box); + gcMARK(pr->mbox_first); + gcMARK(pr->mbox_last); + gcMARK(pr->mbox_sema); size: gcBYTES_TO_WORDS(sizeof(Scheme_Thread)); } Index: src/mzscheme/src/sema.c =================================================================== --- src/mzscheme/src/sema.c (revision 8997) +++ src/mzscheme/src/sema.c (working copy) @@ -38,6 +38,11 @@ static Scheme_Object *make_channel_put(int n, Scheme_Object **p); static Scheme_Object *channel_p(int n, Scheme_Object **p); +static Scheme_Object *thread_send(int n, Scheme_Object **p); +static Scheme_Object *thread_receive(int n, Scheme_Object **p); +static Scheme_Object *thread_try_receive(int n, Scheme_Object **p); +static Scheme_Object *thread_receive_evt(int n, Scheme_Object **p); + static Scheme_Object *make_alarm(int n, Scheme_Object **p); static Scheme_Object *make_sys_idle(int n, Scheme_Object **p); @@ -136,6 +141,28 @@ 1, 1, 1), env); + scheme_add_global_constant("thread-send", + scheme_make_prim_w_arity(thread_send, + "thread-send", + 2, 2), + env); + scheme_add_global_constant("thread-receive", + scheme_make_prim_w_arity(thread_receive, + "thread-receive", + 0, 0), + env); + scheme_add_global_constant("thread-try-receive", + scheme_make_prim_w_arity(thread_try_receive, + "thread-try-receive", + 0, 0), + env); + scheme_add_global_constant("thread-receive-evt", + scheme_make_prim_w_arity(thread_receive_evt, + "thread-receive-evt", + 0, 0), + env); + + scheme_add_global_constant("alarm-evt", scheme_make_prim_w_arity(make_alarm, "alarm-evt", @@ -976,6 +1003,87 @@ } /**********************************************************************/ +/* Thread mbox */ +/**********************************************************************/ +static void mbox_push( Scheme_Thread *p, Scheme_Object *o) { + /* check semaphore overflow before pushing */ + if ((((Scheme_Sema *)p->mbox_sema)->value + 1) > ((Scheme_Sema *)p->mbox_sema)->value) { + Scheme_Object *next = NULL; + next = scheme_alloc_object(); + next->type = scheme_raw_pair_type; + SCHEME_CAR(next) = o; + SCHEME_CDR(next) = NULL; + + if (p->mbox_first) { + SCHEME_CDR(p->mbox_last) = next; + p->mbox_last = next; + } else { + p->mbox_first = next; + p->mbox_last = next; + } + + if (((Scheme_Sema*)p->mbox_sema)->value + || (p == scheme_current_thread)) { + /* Avoid scheduler overhead when the semaphore is already up + or this is a self-send */ + ++((Scheme_Sema*)p->mbox_sema)->value; + } else { + scheme_post_sema(p->mbox_sema); + } + + } else scheme_raise_exn(MZEXN_FAIL, "thread-send: mailbox overflow"); + +} + +static Scheme_Object *mbox_pop( Scheme_Thread *p, int dec ) { + /* assertion: mbox_first != NULL */ + Scheme_Object *r = NULL; + r = SCHEME_CAR(p->mbox_first); + p->mbox_first = SCHEME_CDR(p->mbox_first); + if (!p->mbox_first) + p->mbox_last = NULL; + if (dec) (--((Scheme_Sema*)p->mbox_sema)->value); + return r; +} + +static Scheme_Object *thread_send(int argc, Scheme_Object **argv) { + if (SCHEME_THREADP(argv[0])) { + int running; + running = ((Scheme_Thread*)argv[0])->running; + if (MZTHREAD_STILL_RUNNING(running)) { + mbox_push((Scheme_Thread*)argv[0], argv[1]); + return scheme_void; + } else scheme_raise_exn(MZEXN_FAIL, "thread-send: thread is not running"); + } else scheme_wrong_type("thread-send", "thread", 0, argc, argv); + /* unreachable, but compiler complains */ + return scheme_void; +} + +/* The mbox semaphore can only be downed by the current thread, so + receive/try-receive can directly dec+pop without syncing + (by calling mbox_pop with dec=1) +*/ +static Scheme_Object *thread_receive(int argc, Scheme_Object **argv) { + if (scheme_current_thread->mbox_first) { + return mbox_pop(scheme_current_thread, 1); + } else { + scheme_wait_sema(scheme_current_thread->mbox_sema, 0); + return mbox_pop(scheme_current_thread, 0); + } +} + +static Scheme_Object *thread_try_receive(int argc, Scheme_Object **argv) { + if (scheme_current_thread->mbox_first) { + return mbox_pop(scheme_current_thread, 1); + } else return scheme_false; +} + +static Scheme_Object *thread_receive_evt(int argc, Scheme_Object **argv) { + return scheme_make_sema_repost( scheme_current_thread->mbox_sema ); +} + + +/**********************************************************************/ /* alarms */ /**********************************************************************/ Index: src/mzscheme/src/schminc.h =================================================================== --- src/mzscheme/src/schminc.h (revision 8997) +++ src/mzscheme/src/schminc.h (working copy) @@ -13,7 +13,7 @@ #define USE_COMPILED_STARTUP 1 -#define EXPECTED_PRIM_COUNT 899 +#define EXPECTED_PRIM_COUNT 903 #ifdef MZSCHEME_SOMETHING_OMITTED # undef USE_COMPILED_STARTUP