diff --git a/.gitignore b/.gitignore index fa14a33f..c3ff432e 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ lib config.log config.status configure -*~ \ No newline at end of file +src/.ccls-cache +*~ diff --git a/basis/REGION.sig b/basis/REGION.sig new file mode 100644 index 00000000..72ece137 --- /dev/null +++ b/basis/REGION.sig @@ -0,0 +1,56 @@ +(** Operations and information about regions. *) + +signature REGION = + sig + (* \/ r. r * unit -> unit *) + val resetRegion : unit -> unit + + + (* \/ r. r * unit -> bool *) + val isAtbot : unit -> bool + + (* \/ r. r * unit -> int *) + val numPagesOfRegion : unit -> int + + (* \/ r. r * unit -> int *) + val memoryUsageOfRegion : unit -> int + + + val getPageSizeBytes : unit -> int + + val getNumAllocatedPages : unit -> int + + val getFreeListSize: unit -> int + + + val getThreadFreeListSize : unit -> int + + val giveThreadFreeListToGlobal : unit -> unit + end + +(** +[resetRegion [r] ()] resets the explicit region parameter. Warnings will be +generated if there are any live references into the region, but the region will +still be reset. This operation it thus not guaranteed to be sound. + + +[isAtbot [r] ()] returns true if the explicit region parameter is at bottom. + +[memoryUsage [r] ()] returns an integer describing the memory usage (in bytes) +of the explicit region parameter. + +[numPages [r] ()] returns the number of pages allocated to the explicit region + + +[getPageSizeBytes ()] returns the size of a memory page (in bytes). + +[getNumAllocatedPages ()] returns the total number of allocated pages, including +free list. + +[getFreeListSize ()] returns the size of the global free list (in number of pages). + + +[getThreadFreeListSize ()] returns the size of the thread-local free list (in number of pages). If the program is single-threaded, this is equivalent to getFreeListSize (). + +[giveThreadFreeListToGlobal] gives pages of thread local free list back to global free list. +*) diff --git a/basis/Region.sml b/basis/Region.sml new file mode 100644 index 00000000..83a6fe4f --- /dev/null +++ b/basis/Region.sml @@ -0,0 +1,25 @@ +(* Region.sml *) + +structure Region : REGION = + struct + fun resetRegion `[r] () = prim `[r] ("resetRegion", ()) + + + fun isAtbot `[r] () = prim `[r] ("is_Atbot", ()) + + fun numPagesOfRegion `[r] () = prim `[r] ("num_Pages", ()) + + fun memoryUsageOfRegion `[r] () = prim `[r] ("get_Region_Memory_Usage_Bytes", ()) + + + fun getPageSizeBytes () = prim ("get_Page_Size_Bytes", ()) + + fun getNumAllocatedPages () = prim ("get_Num_Allocated_Pages", ()) + + fun getFreeListSize () = prim ("get_Free_List_Size", ()) + + + fun getThreadFreeListSize () = prim ("get_Thread_Free_List_Size", ()) + + fun giveThreadFreeListToGlobal () = prim ("give_Thread_Free_List_To_Global", ()) + end diff --git a/basis/Regions.sml b/basis/Regions.sml new file mode 100644 index 00000000..e69de29b diff --git a/basis/basis-reml.mlb b/basis/basis-reml.mlb new file mode 100644 index 00000000..7d661031 --- /dev/null +++ b/basis/basis-reml.mlb @@ -0,0 +1,2 @@ +basis.mlb +reml.mlb diff --git a/basis/par-reml.mlb b/basis/par-reml.mlb index 6e37684b..bc8dfe58 100644 --- a/basis/par-reml.mlb +++ b/basis/par-reml.mlb @@ -1,6 +1,7 @@ local basis.mlb in + reml.mlb THREAD.sig ThreadSeq.sml Thread-reml.sml diff --git a/basis/reml.mlb b/basis/reml.mlb new file mode 100644 index 00000000..ca36ba70 --- /dev/null +++ b/basis/reml.mlb @@ -0,0 +1,6 @@ +local + basis.mlb +in + REGION.sig + Region.sml +end diff --git a/examples/fragAssembling/big_test_packets.txt b/examples/fragAssembling/big_test_packets.txt new file mode 100644 index 00000000..319a4b52 --- /dev/null +++ b/examples/fragAssembling/big_test_packets.txt @@ -0,0 +1,2473 @@ +40;1;MSG040-PK001 IKEK.QrTy56GdE8X718KdHtc917TkN4SzMljO8AAhhefJe0VYT.tELHRF:Q +40;0;MSG040-PK000 2BGMKBHZ-WFDn/jtzCV41l9g5Cp5MJT772w0 +33;0;MSG033-PK000 3qYKB:TbbPD7wzI2l42sCoAz0obHKl3MrzmXSJKoz6w78X_U91e2AGLxfJ2i8PRm-4cl,ywM +33;2;MSG033-PK002 JB6gYWk5S1G17qXDZiVMl_V_eht58vob_NQf6XcLEU02e +33;1;MSG033-PK001 S2Qz.XG5bvTL/VCWr1fJ7wz_3IibaRD.RO9IwlYJEPceC9 +81;0;MSG081-PK000 DmQg-jb334gIqT5cBPJfXIt:uCU.J/. Yk/1K_KjwktEKWeSA,fYs7sCQrYIAWl +81;3;MSG081-PK003 Ct/rz02NEs3ClEbcBFzE36 +44;0;MSG044-PK000 s0v_aqLmpTaOc01mypQuQVuFurgP.y64MESIhN,ZwRzUfnloQu +44;1;MSG044-PK001 J/cEcGT/.a8p3iNqwCVQLUxfPT04P4,lny5CcNQ70s4GPnlXaT:7enSvxoAzW_Wha-zI +44;3;MSG044-PK003 FR-A_Qg72U.O5.C,Q1jW9:NBNe Ah4m77XmyOda -/BXu +183;1;MSG183-PK001 bsI:AawBDBOEX:r_OEIqJKPVox7I_Ymn2jD3ZHkhBZafFpUG_LpKONi +44;2;MSG044-PK002 9q7nQYgCB_ _Ts-U-Y-nHE7YFgba8E,KMJO7GNJof5Z +183;0;MSG183-PK000 th6o9KPZF4:_yYJXDUL,dCDBjaeKC2ZQRIcb27di1YWISxT2 yDin61LR8XxVrtflD0 +66;1;MSG066-PK001 JMjvNRuxtGVX4d_CDSeJ1uyz +66;0;MSG066-PK000 1i z2xsLP856zxMy.tiJ3vuvxu:Cz_kz +32;0;MSG032-PK000 QDNllaPcpJ,1Ht .2pO8FRPorj5,QmrDV,.mRUHtW +66;2;MSG066-PK002 RFeIR9USh-xS9q +152;0;MSG152-PK000 He4./P/1n/Fptzk-q2AfyRHantD3m2YeACF5bO:.0lR1Qzm +198;1;MSG198-PK001 _HQD9-tg_XLRgcFW7pBgYoWnOrF20GC3r_KMgsyGbFFDtGw,QJXl +100;0;MSG100-PK000 8Cb_g0O8s9y_gn1RNU1yxGSKaUC3aZP2.mPHb_Uum58x3qtxDK09n +100;1;MSG100-PK001 5Gabm_M72XUySWd4lsJgG8WTtdSWwxM6p/hy_:jLE6nhKO_xWhZed6Oh66Rsu +97;1;MSG097-PK001 KPy_ovp33hIbdC25fi8sjVl/H7KHfhhOGFluqu1MxCt4vMNTeC.AM92JPxytOz88Lxu04iWKGESp +114;1;MSG114-PK001 Mywquy5vjzbx,AxqdMMKbdbITBMKJYxv,r.j,t9wJFzH75vc +67;0;MSG067-PK000 M2-:Xf5ZzGw +149;1;MSG149-PK001 DPMxM34hJObJE z9iqPYkmbG8L/REn-qM18h +149;0;MSG149-PK000 Kkjl0:2X:dNSj3-gMcSfvu 5v/Y3FKTD +149;3;MSG149-PK003 QxGZXyskXcA.a_a5BYPmkAzu6IH8VfpN:xl./f4eiIF +40;2;MSG040-PK002 dkihFNU1jk.ZOklnO.B5JZ2jNN852l-0- aJ70ZXscVrVZRVc:iJvDDaxx,2KcOJ9E/2wti +40;3;MSG040-PK003 FBlG6.RvH6MMqayPHKncvC.9CTk/00N,9MmAlAUj.ybsT-VzI1O/kSA:/Uvp PRh_MjvW +1;1;MSG001-PK001 WmTSHf6/pWkLUyifDLkDmWJ +1;0;MSG001-PK000 JFCrnl2edlBD.dz +1;2;MSG001-PK002 ICPhDeOZIiBOB,Y6sHrF/H2ZUCr-,lgotu2iXW7:Gbo/IRoL3u6aH.w.nM.z +1;3;MSG001-PK003 kk i/qq8vH:2BzNZV4_5pFCiRcDCajhDieQj-EJ Bq +186;1;MSG186-PK001 HT,kNd:E3/Ky5qupjZGFPdwHlH72BMkfs1:u/eSHqa3tPqoI/oggHEBu +40;4; +151;0;MSG151-PK000 a,_BovYvrz209qA0Fp9-3h._qBhgTsuE-uLjuV1y6G9Zs31i-Mf,g +151;1;MSG151-PK001 5ac:8-bBxKa9n1x:EJ,RN/caslI3,v0 +151;3; +151;2;MSG151-PK002 sf-noNgfl5lhox14Yjov:ylbAmAjbEP9NoxBiQ,5a CDajx rjFofCl +92;0;MSG092-PK000 w3NtgDjSnuv3 +92;2;MSG092-PK002 h Fb4mKE,nleJVoMpGW/.p,O0ifSDLERiu7Q +92;1;MSG092-PK001 :nqCcPCtPr2gfilnxFc9B::hjsvlrHz1Sqmhje4IQwgSgeki7oP.d-VpkiPcMnvuR +92;3;MSG092-PK003 i9yT1yWIeV:Q. +139;1;MSG139-PK001 8gzq_LgIL3U3RNEX9qhLTZntpc8Q9it22p8hlC1ESCdaH3Tuu5_wc7ODTI-v,jWqiDDTmW3 +139;0;MSG139-PK000 u5v8Mju9:txvyKxDvsAe6hlxXrnEzIqy5GC1srz:x9hcX2sJy9vHrx4yL2uf8Rtv49 +139;3;MSG139-PK003 jLeo4oI9w4eEzUIFPzD0rt3 7Pg3z9BwRVHf +139;2;MSG139-PK002 8OBLAC8K8JOUCdVs81nEahV0EH5JE/t.rQ8/UMTSOcNnO dJ.gWfZ7wJHDqylraQgMYLf.LaHzH +139;4; +83;0;MSG083-PK000 Ds:/mYkD6kP-/d Cs pNWCSRLs/N3_ +83;1;MSG083-PK001 NHEr9LduWTRPxHUgvEF +83;2;MSG083-PK002 8C IfHJ,l/izsLe0tjK0mDBSH4yF8hvPPS +145;0;MSG145-PK000 xRhXHYddlVTpY3a8w//XP-Dg-C31Ml1Vc8XUY9E/ +192;2;MSG192-PK002 PnUR/w:nOUS9qaXxh8C-XsiOvG,u +192;1;MSG192-PK001 Hb.BS7,Oc4DUYN-kCLR,s1QrFKBxVNGBp8Oe-yns +33;3;MSG033-PK003 BcZ8prxx108Jkc-5-.3QB.QfX8A1AMv-.9ZdOPcMrrp6hH2jZ4d0YAxhiZub8yw-k/u +33;4; +168;1;MSG168-PK001 s1 Mk4JUPK0-kRP4Y0uT-W1WyeG3Xm/hDtdTBgXNe.R.6HlM-fd_BdsI/61LXlkD +172;0;MSG172-PK000 s7CWz4rCbpB53UqtvTDKszYNL1djkF +149;2;MSG149-PK002 LoSf6Q0 U72iwfnCQ-BLus-sW0mPvQGV:4r.my3qs427v5fRGjByo4K2tF:E0A0aR +149;5;MSG149-PK005 kWwm8Ecau6iEK +149;4;MSG149-PK004 djv:fs-qefTQdTYl.4 +149;7;MSG149-PK007 _aDO28tlQxJcC/ETr,OZk5kz6W +149;6;MSG149-PK006 nawZ_cCFe6WTfc7vEAVn8/ciHAjwtr/.oqYKqS:t2tJJ +149;8;MSG149-PK008 zT8vT0F bf.tOpuy/iYx2 +149;9; +154;0;MSG154-PK000 I6E.hxTMHIc1l94SUOW98GrdIdbVLLGNhU3VUSi,o m/rDpycf +12;1;MSG012-PK001 ydE XiN,/5ceRhRf +143;0;MSG143-PK000 c-fHT/TJt.QxBlP/_yqsMuH4A/X1Yi1dje7NSbTHlU8TZiP8xn9_IatWZ Z +164;1;MSG164-PK001 hQIMRMQsP/XLqJHzqqB8HZ0H4OezxUNoHfS8SSOYSnypw:emSomOA: +129;0;MSG129-PK000 OHtExk1-fJji9acoVo75b5 +129;1;MSG129-PK001 bT0NucrJI1Mt_RVsRvxKrgbLtS/LDwly9e9,rtJGnJZCyx7_KPCdPb3 V: +129;2;MSG129-PK002 Y2G3do0LJrE5bkLiR +129;4;MSG129-PK004 eS-8vILilkF9DbBjhVmX/kN2ob +3;1;MSG003-PK001 V8:S2QT6INGDpyOp/xyB9J:KmyLDUwMb/qJfgLq nbK894RxgG9 +30;0;MSG030-PK000 gDILMGqfY9JR2ZVvMeWsqoPS39r +30;2;MSG030-PK002 .P Vk5ihRg:gUNlH56NI8DUBTs +107;0;MSG107-PK000 c735cDM7ce.qYy9M0KWtrSf5H63vlFBODbjY.G4h4iqU +107;2;MSG107-PK002 xlpumx/:vmHSN7fOKFAwltPTLysJLBxwh7-odQdIgkZ7uFB +107;1;MSG107-PK001 OZ4zongp7XXax4lq1jSJe-UZkaDzMphhFyNRAyo8Nqsl3U.mkU9lzX4_RF4shXEWrH_j,x +102;1;MSG102-PK001 2 NaiuXdt.6g +43;1;MSG043-PK001 96En6BM2tI.,tzS:WQFt9X6lHk +93;0;MSG093-PK000 v8kH9wSb9WtzDq6VfINH-Ck,KB1bjYk3-8XCd z7ut +101;0;MSG101-PK000 YB9Pd1cOhCFVmoYE9KT5E0vSEbFIq3av4ExqZq +158;1;MSG158-PK001 jSvd0NvyupgooZ2/d3N_ZbEBttyM5v5b-FG f:bKxWfxeFHFLxFBfPX.spphxAie +117;2;MSG117-PK002 ,k7pp-qsjFp4sDWiAqecf +117;0;MSG117-PK000 XR2a RJSHxwBB3b1GyM4r2CunQqUYk5e-:TIo-r +117;1;MSG117-PK001 ezMR/KaJyf.LF301L,eQN8mZpCf3U9g8pCc.dt- +117;3;MSG117-PK003 dV65zYIoKhwxXS2waI-KYkht:-tB.Ly88qnj-AiRk9OEe9vcH.Z/mtgJjqrQf1EwiGJU +182;0;MSG182-PK000 NItdV7crC P0qhkdF-Ul.C,.i2RVk3I +182;1;MSG182-PK001 68EFwTDscy6xI_MpI2HYrWGqZqGC.rhCt/ +182;2;MSG182-PK002 t5wFY8rGHZbeKfNS.1N6bl8eE4JboPe2rlXpj5UjWCCb8BLsq +17;0;MSG017-PK000 Tr76JbuT..AS:X-iw +77;0;MSG077-PK000 ,bZSinqJVh84D3CPf1-gnrs6p11vADTx1ak75w1RQ.iAq3myQHr5akqBzqhgvPCfJZ8Nc6mVC +77;2;MSG077-PK002 8jMIRU83XWtSz05nn prf +99;1;MSG099-PK001 ,,09GhGSdYvSkplSV2Rws6pyZsHbI398CzERgt7XuXznHlDOey5:OkMjw +99;0;MSG099-PK000 biC6 vX,O3Z/d yNR6pc7n6-c0TPew2M8rrzjH0Ltftb5YT 3Y6S_kAMDLI74 +99;2;MSG099-PK002 71poQR/K9y.Mba_ojhTslvHc9209_Wm/XWLTzF_z6DApf4M4Zdy +99;4;MSG099-PK004 /0yKkXrNnHH4KXdU,vFvizP91Sz:DyPWqIoSk7ZEmw7_WU0-8X6z7UX/_e_P03SspWBM:8WI_dpgQ +150;0;MSG150-PK000 2aZH5RBtST6AqKc5yWQx..UPfUufYAF hX6odJrPO 9ztpZtwBd//eDUV5lHvpvD2H +150;1;MSG150-PK001 -:H6oVJoU,aTGkCNSDeMTDEO31V6s2xT0vYT/QXsQYf-laP4.gbNT.-zJkYi50KIEqa80 +150;3;MSG150-PK003 _G-rMn,KWVxxSX +119;0;MSG119-PK000 /HfhOlPXACUpEaDNrfiyygANtvQmuLCqVXRbKL0LUU1aByZSJOFpR9NFM79V1LFt +150;2;MSG150-PK002 Z7-iGL3ILTtHSpf3kSD +119;1;MSG119-PK001 p6bIB81SdKzy7qGn5Nf4u90m9o1Ksg +119;3;MSG119-PK003 t3tL6QE00ZbuN0mKUOIVjo ROV-B:tl +119;2;MSG119-PK002 l3R.94jiY9H 6RBkX +106;1;MSG106-PK001 -Fb5YdLWzOc,8Dn/RE76UEBSGfOFyvIFzPcY:LMFB_cuPI,lw8aYW +96;0;MSG096-PK000 l2f0wFP3lyWlPnbaA,Hsptb +114;0;MSG114-PK000 47 1Q EtL1dV8eScrlmrQbV-BY_vQ +94;2;MSG094-PK002 Qi/b6,CB2:x0iLMYHTU5 +94;1;MSG094-PK001 GRD-8UWC_MPFPJYo1Xw +28;2;MSG028-PK002 8fUOGjwiVl2IjjRQ2IclWBP5,Txh9arcGv3ubj,mrltNjzF +28;1;MSG028-PK001 TZhWxRBVgXF9Fio/hIY JnEa ODNpPtbjC +153;2;MSG153-PK002 s,-ZqtuDefFmkbu2UKqiMW,2nXG9 +32;2;MSG032-PK002 DwhQVEHaSd:s8z1kP52GbOyP05h8.7,RSGu3jdE:Hsx9AZq6Axhwws9nnj7V 2 +32;1;MSG032-PK001 7seTi4nd6Ah.7pUXH9/D9hBm OND:cx4LjM.P6xXguwQHY:Zs5x_Mf512Grb5WAs9iARAZ8 +169;0;MSG169-PK000 Qvv8XCtii-QiEEByHz9_IOF9M:BLL.zLR0mNaF_4Eh7t +64;1;MSG064-PK001 6U5cCCZ7OJ kcB9:KZOuBf/aKOByHBdHwd7eadtY7SRH5Sz3Ll2A:rRkn8s +188;0;MSG188-PK000 ZyPDlXqJd4EUZeZT,v-.R6C1.AHTJ:v4w +65;0;MSG065-PK000 :jfWa XDLJAAJ1axWAFUYJjZw,ev +65;1;MSG065-PK001 UfHN/UvXgsFQK8tvGeOUEfZjoCcaIU:r8UvzIg. eV1CCQUTZE-Vi:tHA4M:XffSU Az:a6qZXaK +65;2;MSG065-PK002 P_eYP/Y,ruzvLxfGEchZEine28mFWERklMsgtYnrsBu0pIaqKQMrsHtv +76;0;MSG076-PK000 AkVFT3v6rNTcIdGnI5,l2v//wj/qLKXumZyWq aB_3K4DsuBrrGu3z5BY- +76;1;MSG076-PK001 JH7Kl42NBIIj +198;0;MSG198-PK000 wzbyL3g4WzHTTP5taimzeQqMKh6ZK3q +193;1;MSG193-PK001 ,W9b.pPujiOb,EqL4NRgKUqWP-gxdA +77;1;MSG077-PK001 n-HEEWKtoSt1GU_7iWXyAgAqum3-f7am-tkQ +77;3;MSG077-PK003 qxLwqD5lZXNDByTk5u +77;5;MSG077-PK005 vmG2EjvLREH6HijZe-H7pusuBIILJ6M/M:TYNMQkHwpV7rlGqWh9iCzkI +12;0;MSG012-PK000 QhHHw4i zYw ns3Bn4HnejjG5c,taeXItQYa- 93ZiCaX9p/TQMZhlU/Rk6Lz +115;1;MSG115-PK001 Jrvh4:.2qtFPDJwtpCt1/,,BvPXgFK,TV.FMHEt-f +115;0;MSG115-PK000 XJ/z7kOAhy 1yo J.n06GCnspx6tS16CL,Oyn9Lk2G7RWc +115;2;MSG115-PK002 .HOgVFXqE3b41u3D4KcW.P3G0UriQ9sK/QWYPJ2KB-8Ba4aa +115;3; +12;2;MSG012-PK002 fFqbwgNm6vino,Ciz2RZPprPBfwQipJs1vVv4FfrmWuc kaawlK18qAsI_50Ewex,lMS1aEy +12;3;MSG012-PK003 ,wufgUKA3GQ6fng/wud -ojE4P1zPDoPDmE0zWCj8 g3sB6wXVr6yTIzQqehJro761vRCLuv +12;4;MSG012-PK004 3Cta1ff8.e2:Y9m5,Ekb0BqTLElc9Nu6d67rZxV7ajXQ:eL2IAkQh +12;5;MSG012-PK005 QEo9ACPTI.2JgiVS5 .:p8//L5Viy +142;0;MSG142-PK000 fqt2YUsvZKnFptsGBbHW.O3MKkyqwh9jfGsTWTtK._oTh3iqtwjHvYN +142;1;MSG142-PK001 /CNZm-NSxGFKOsMDZ-ak hA78beIbQyxo8T7TiKZVJWb,Z/sznLU53pogtxTkLLZJMlCv25i9E +142;2;MSG142-PK002 ELCYZOnkqq8N5Ai:9KdZrnSr,FlURZQNV5m,UvZlIuxf4.w Ce7tse6cTzGw +21;1;MSG021-PK001 IIc9itBiYWde,370wbfiJK9zIdIyE5af3 DgKUlV68uVVsPS0wZV7SLs,0U3lGrQT75vfR +21;0;MSG021-PK000 U7gDGB-dNbBxQA,XP6Yv 9KFjnadgbJaM4WumgVBy2VjJ1cMep +21;4;MSG021-PK004 5B0mbqd.4i.x7JX/gGp_ w5LufLQ2otjz9 FaXwWfMxCR,D4omv +21;3;MSG021-PK003 xjiG5p2TZbMRXVAM29f e,OSdG8X/m2S dWe l +21;2;MSG021-PK002 aGvDQ oPVY_YCS0nC6tya.n,s +21;5;MSG021-PK005 J32iilHT8Z.Frpdu +185;0;MSG185-PK000 t_b/VzoX4xOCFEkY-g:EQO9gBkf9DTrbB.BJm8AQ,rat b3D +142;3;MSG142-PK003 vleCpOPAyoWpTEf_zguuA4 +185;1;MSG185-PK001 LZ3H:0cl9cXzgEXdL2lpdrl5N_L,ULdOmxBaCFOuOikMOPaEz.U_uMK_QYMbbiLpQ,iO4b +185;2;MSG185-PK002 EpFP4zxK1YO UAdN.fgJpKZ9hnagpWeETnRw / +34;1;MSG034-PK001 JFgsj7/o18.aXWICoR:gnWGs-lQaz5fo8gt0Mf5gAd-e_i6uZt:v1wLM:Pdc6s_.Rx7Jlj1a2oXov +34;0;MSG034-PK000 A/ElEPMcoKT15dW +34;2;MSG034-PK002 1yHJIBPWxGQ_ akwbLsMuVB0cltC6UFbxI +34;3;MSG034-PK003 fTTC2G.k/4VJcFZI-spT5,F_VJZ0tzqD2eWZ7:0KjqVN wrgGx: +34;4;MSG034-PK004 SWtFBP9Z-7,5xV3bMpFG:wg_GFmPz:yktqZb +108;1;MSG108-PK001 T0D8-llXg4t4Fw.VV,78IGa_Uvx:1l:q4s0 +108;0;MSG108-PK000 s1:VwdR20aQysi7IZVYA:sV0fu:4Yl40/lC.ocqf,New/D1QcfFic/O6uO:Is +108;3;MSG108-PK003 RiH3U.DiIzhSDunEnUFfP-WVHAD.f2,nn,KwUk-27Q0W8m5UqMf6S_ +108;2;MSG108-PK002 7.Z.fHv:/ -uP:Y4tLpTKpU8i +108;6; +108;5;MSG108-PK005 ei:t1aZxhppbX +118;1;MSG118-PK001 CCm_f8S,WJKAwszye,NuytFlfNg1MIe0z7rjB33pVwuxI3F_uUW4m1k6OVLlFBe-n +108;4;MSG108-PK004 hb2eyb,_NEWDJ:ZkP2O-8yLdGYFHjz8c4_8dDyglJio.tXh3fX:vk841I +23;1;MSG023-PK001 -M,ZgMGnsCCF7tm.U0Z1QMkFu9iOh3Z3t18dQVpNE YBZ3EKFvRuP +28;0;MSG028-PK000 b ptYmTCxl,3H/HZ9zP4HqsA +23;0;MSG023-PK000 PKVg_p4 3-e.itWQ4IsszlXJYCffMbry1y1t2GAaiueH9iC7v,ok6RV8 +9;0;MSG009-PK000 _:R3rR TyvZcDCqBc.vpUeWG/ggncgo14WpG8tAbM1m_Ir1n-pKon,zzH_zT0Luf,A9QEa +31;0;MSG031-PK000 sbTQaABahcc_WFLZ6Eoaa__lpGpZaclXtEr,z6/6fXbRMk29HXFfgc-JCF3pmF5km_kOlVHQ.s +195;0;MSG195-PK000 kV81EDA8w/UDV,1 +195;1;MSG195-PK001 rPs7Rdscm3jfXe8kQ +173;0;MSG173-PK000 EMiEQdO0x0ysqg6bY7xghc6mXpkdMB8 +173;2;MSG173-PK002 WF358t6vrw0H_X_Ba.ScW4tegjkozz6LyuG-Caxma:5_ +138;0;MSG138-PK000 5OR_Fmkh/nvyI/FxBXLQlo3P_l73ag8KZ0oChzdESXswkyRbZH8rdV/8ZbiulEC +138;1;MSG138-PK001 C/3B5SK3ty.R8zpqV5BCIeOyFbv1Rt3ZQcE9zf +138;2;MSG138-PK002 -Ckkiay7L8tV3K2L jFf6sc1nax.EJ2aZn +109;0;MSG109-PK000 9LsSsqbviDPqd80H +109;2;MSG109-PK002 JJabOt_roQN2yb.E99rRo.DyQFMkewXC1KCVLH b5ROLUy/vtEIdp +101;1;MSG101-PK001 axEHb0T17TWJT:l4iAeC +104;1;MSG104-PK001 Or93Lu-GXOptZi TZt5KuggCpYpfr-knnm eMcL,8D8M-gVrp7aqf,E9hk1Dp2qO-ig59oY,3 +101;2;MSG101-PK002 DehgLvQWaydqzaR. xdvd5TtgcwPTYBk-3a3uCoIE:9 +101;4;MSG101-PK004 xQtitggKlZIUl +101;3;MSG101-PK003 be WDxPr6F4X HlDmJsbD,UYNiNFiMdnE:8NuVEz7n +104;0;MSG104-PK000 st43mSGtSkl8LxuEpQ.BlBv9S dzLd4p/lI +142;5;MSG142-PK005 dMFn4yeyqAnpgA-8/lxUXOXzU tBjxy2.x9Q3_ZK jKG4JYvF6Ydl,NFHCA,/bI/a5sAnst.X +190;1;MSG190-PK001 kiZn0vIfOzy:Y94M/4VZaoB2NenWo0rVbvn7N0ifBgfG7n7RR_hZipVa +190;0;MSG190-PK000 rg_mVnU,yqRTH: +77;4;MSG077-PK004 qgol,FjfjfodHYegQxfNRX1/ZSlczTA8xr6:DxbvRBxN +61;1;MSG061-PK001 ymaQB,XAv7v,KXxwY-8OyljSuHA/ rd4P5ymNMGIoWIOXwHzJas,5jT5D0:Qa4hPo +162;0;MSG162-PK000 PIB6NZf2M,0G +162;1;MSG162-PK001 fZMNm2rxbyHW/KD_RG,5jXeH:dV7EP.HHSHpqNZmP6f/q8qa:vdBp/nyUUmcCh/: +90;0;MSG090-PK000 K2Cm..TEGcsYpgpQ_OtWAvAkf4_R +90;1;MSG090-PK001 Y-w8vZDMfk-lK44Gnj.q7kTnyoI:v/r71CIAH3DV5n/:Z/zOJ8D7KQ6oN5x5H6zpd +140;2;MSG140-PK002 tEcM-16:s:.QA9F:nMZwELbujWG125 +140;1;MSG140-PK001 dBcQG2U,:4L43.OkEs3yx6Bjouu_E-aJo0A604a.3DvTY,QI +104;2;MSG104-PK002 KRhI.-ZLTC.2LOnw1Qw,114EnRVwO +104;3;MSG104-PK003 dYBMP:R1 iaKVW.x3EMwMxAUx:_8bcQrSkAYx8wP/Zp.xmiGbI.7Ht0oSN +167;0;MSG167-PK000 IhGeZNP8R6jT/77ceWASm6GmwZFi-xsERpv/BTAk +167;1;MSG167-PK001 AT:e,sDk,SbGfns_gM9CGsaSi 5:OwXz7EhsCQRyy,rykO +191;1;MSG191-PK001 5K2RM0-Cr,Rba +178;0;MSG178-PK000 Y6DTks61lw.1 +178;1;MSG178-PK001 x_EOSUVQFVTzZ6,uFvXLk/j-yI4edqPyG3V1g/Py/44vrNw_Md8h.dpWG-9X +78;0;MSG078-PK000 nL6hHK6PkSE vZc3cqF_sbcbw8/b19rI2OOzastxvpq-nZcAO +97;0;MSG097-PK000 OF7 eYGtrU0A-Ui3dzotikMHqykNQJhFr9InRG3GxtUVrr,jxb +182;3;MSG182-PK003 9.I.A0FafcRk-Y-dO0Y1skl4sPmO82MDPSK5YGdji3Bf/tzGViENEokSadn.nbVog +182;4;MSG182-PK004 2mnjaD:cgtm O_xFgFfo_sRwWHK1Io. +182;5;MSG182-PK005 sR4/iVfvpun1qak1X5QCHG4UZnQAk, +182;6;MSG182-PK006 Z:pIeJ.j2A--DceyP6V Ur40CK05cCq9X GK +182;7;MSG182-PK007 CnoQ-e Loi2jzMTXeBj6mC4ZavwmwJcSXM3LzAF.LVRz7/zjdq +182;8;MSG182-PK008 Cye3Nvsa,VM.Mz8P5s-:_2qBMQU7V +182;10;MSG182-PK010 hXnqTxKj6KOgKDHjHxp28ErJ +133;0;MSG133-PK000 Ln2xeFoTpQ7znNydTYoXcUdUdFQl_A-ZfLccnrvsFsbbZOSXMvJO:i5uEZnsLvqw3mZ +133;1;MSG133-PK001 cPLiCuA5lTEV7RDMRUqnPnON8EWUylEzZWRsaEOIZls-bTNEm +133;4;MSG133-PK004 g9YH6CLeE2m:HeZmJ/OI3e +86;0;MSG086-PK000 4skD9gx3jX lX8x,gtsL +49;0;MSG049-PK000 8HoQsgKiglcw 3f9/oPoYM_H788z_zEc2lHGB +49;1;MSG049-PK001 7dZ:8Q38h9kpuxEZmBoqy 7GU_MnAF,0.5b +49;3;MSG049-PK003 AudpsTBlPacLqzk/reX_qhM:peEhSM:K5B_T4 5A:tIQPE:nVk/u sy-r3JqTm.RxUU71:: +49;2;MSG049-PK002 e6:A/M4:I-zbDG_S7B3QKaLHq9x-hbyp5.FXGFk2,_P.IHIfOBdzxe7V3aRt2gpUuAeqZWzCcvF +49;4;MSG049-PK004 XnRbL-KoPd-rGK0LfEQd40USTAVQ--jh.rt54QM55,,IVxVKpqB-5sKF98ec,hKQUKN17H +49;5;MSG049-PK005 dv535HcWMptt s9YUziKVozJn,ghRKURELTTRU3xp2BAV911-gTaMld +49;6;MSG049-PK006 6DCYXfFi1e:_.SdleVVzkln +56;2;MSG056-PK002 V.N58hXFw:REqgtON0k18L045:i__3B1kCPLPrioQ4w +77;6;MSG077-PK006 sQoA4wb074Bh6dEBGZYug9RBolyu_k-APb4E.M/PRbUeY-pSmlH1r6.QY0 +77;7;MSG077-PK007 0SkI5RAeiLHXBFHPPKQalqsrj_.MmAkqgTFh_DdtxtfvNi,204fZ:zuvW0 +77;9;MSG077-PK009 /0X.:bmdZRx:SKNzeOwB2nGm3D4c6u, +77;8;MSG077-PK008 coslBUQygpuRCGz3HX2C7h28Q3MLcAlI-wxpjHQ,xcSVODumYPTOatXK +59;0;MSG059-PK000 9AMlrO/iC3XKy3MA2SykNOJV1pVeOnLWDn/590 +87;0;MSG087-PK000 .-Is7oW2O1KTUBu_HcAI 3ZMVIN +32;3;MSG032-PK003 eVwn2bAwxdx0bmIxYI,jh2dj57cBkZy5fRbeLzAx0 +19;0;MSG019-PK000 ,6b:DzUeZmQ.iI//kh5_FFGxFD6wfIJlyiq_MhADF97m/gOjz9o4k8zmB +51;0;MSG051-PK000 0cah8twd9kup_JSxFP0eqEAjP_7So6U +55;0;MSG055-PK000 zvIs7lWo:Xu- +173;1;MSG173-PK001 V:x10uJ5cCiDsrBqIc-QoGElXHiFLJbMWzGo.Z10,3FLIVwgO4Hmu +136;0;MSG136-PK000 iJh9Fmm4S1:CwZ9cIS351BL_YQG +136;2;MSG136-PK002 DF_y87IvIv:Pl4,U2QYQ/_G0 +136;1;MSG136-PK001 3-huczG4wFFlru4h-kb.7hzNJN_f78y.CLSyYPCOZOY.ybSfOuZ-00 WV0IdZabAd +136;3;MSG136-PK003 5Rl4fWKUt,WkXSSFrxZ3Gw2Qj73rmqY1EOaO9aQn8. 00BMxCzrA- +136;4;MSG136-PK004 aLTMd3-wAhikAKv1VQkr/4yJ-jR9mNZD8dbzQSv6gZQdk78t EB:Av81moFm:/F +199;1;MSG199-PK001 LPCNxEKRFnIkC1rpW1jjB/,rApYbi/-lA4NfpiHbzfBhXaZY +199;0;MSG199-PK000 3m3d1X0vR-CuP-qHoG/EihDlvTElGYJVOD, +199;3;MSG199-PK003 _akx_PzbALp5C6cpvEYBU-F5ANTTXNX8,LuwznCiTocA8A/ +199;2;MSG199-PK002 3994uan4RaASxFmZUb3SB4T7e_HOp3lCjy6xSfwWQzSiTWke4:QCiUV.J.sK2y6THOU8Pi7Q7 +199;4;MSG199-PK004 2_sU/9hpTNV-Jkr7F3RL7KYR8oXuhQJB2tbU:enaoy:0Cbb0OjvK,SF vI +121;0;MSG121-PK000 TO2l3kIfqivdzbw6B2zWR08VZXTGxePtu5OaMK1PW5eo1s.TMjZT_MiJLoW:WcSxT +121;1;MSG121-PK001 hbiOGuukMzuAa8J.7KSyIaph7LgsV,yV6uhMY04L1LFrTn +9;1;MSG009-PK001 7gmwfLUO2omfbrvQT4IlVRxoZZ6IX91voqhun194xWTdq +9;2;MSG009-PK002 3F9SXtgbu.8,vj PEQJg.CWZ +9;4;MSG009-PK004 OBzALSqw.PoT91/K2b_ndWsghzIuKGshLAeT5nCXE-KgWX1Ogb +9;3;MSG009-PK003 0ealM-A6RUgC6Q8U5omCaRTL_Vnfv,r0nGzypYB6yRn1fp56.r,a:g39-wwqnXP +117;4;MSG117-PK004 1ROzrk/mnrKYG_g5//g,g7,EcEvwx:sparpStzI:Np6nEquQ5l45l-TfZNn6,CqdB +175;0;MSG175-PK000 pU04Pm5FSw7rV8BndgOPeAKcu.aO04z2t2m9lyjQo2YNcXGlzA186x KBTjkDpd2tJNaJE6C/m +175;1;MSG175-PK001 IAbdcX0a3T,b::GnyWmgTd +175;3;MSG175-PK003 dpuQj3bPTIV7IYOR//X67-7TyIwf6-sHhMyKAOfwv/b2Hl:1EZ5A44zSLFc c +175;2;MSG175-PK002 8WOh0A,SuQr9X,ujcYVJD3wK8zJQdHphEwzHrCBVUl539DVfEO-kPUzQMS-54khJ +84;0;MSG084-PK000 0.Tyka:8eiMWo-8hu8DqIX7/ +61;0;MSG061-PK000 _,,Quy3yXn_MUJInC.U5t:vZscm1TnOOv9K5,mUQCyAj5DjBM,QXi2m7WUgsoccfv,:2 +61;3;MSG061-PK003 :i1tzhWoTh9 +121;2;MSG121-PK002 Q_6-gZ30TOsH_UCeFK225AdGgagVBWS38z,xx0. Xjr-IIoNqVDD1cv3c-,9O,/ zVIL0EIw.VDS +184;0;MSG184-PK000 ytMV9tDWd/EUJeXEy2PPXnLvfPDEKhY.BFBAPbSRTbcAyyds CH2SP4j +184;2;MSG184-PK002 2GZkC4s,VYM2oKfJY1bKRUoH.pUK3phB048YrY/TSywt:YkD +152;2;MSG152-PK002 Y1oDEr1t_p_z9RxWJrVGVxTrGjWjXXF. xETk9IOi/I:jEs37zA +134;1;MSG134-PK001 dLFGieYq.ZG,wzk9XkmH4 +134;0;MSG134-PK000 Yv0PVm PASL51bIlR_XCnVgFR,h0xuIjErHx_9q 1PipMeufc,yp +59;3;MSG059-PK003 8MCd:,bB4:wQE4nq1::,cKkQO mE4zjKvp9RXrI9JGFzo,u5CeT9 +198;2;MSG198-PK002 RzeGvsjOYZ4,TentnmzkV4AmTfheNHqUV5tOoUu8lxT,r3_cN +179;0;MSG179-PK000 gFbPpdOeN94tVMhs/vE_vFveKoKRmcr5H/9VqNA1mWW3q/d03.DkFd +36;0;MSG036-PK000 jA42C1 Tcm85jPtMJ +36;2;MSG036-PK002 rbLbPKF4,32m-yg:V.gh +162;3;MSG162-PK003 T.:iBUwSd91TTOhhTB-L9bL8hCKaQrIioKQ/w5d/ve0e_ZBY2upDnDf6j0TujTYdSW/8DQr +117;5;MSG117-PK005 8073BpKpAmwAxwDM,/efgTd24oUWZAX/P3_:hie AH/xgJUbU,Bq0YzhT1t +117;8;MSG117-PK008 9YR7a95HmwagyqV-WWy9 +117;7;MSG117-PK007 JSzJSvA:UvoL0pjkhVS7JxvFJnFsNu0v-/BWOoS0P +117;9;MSG117-PK009 BrBA8 mBdu9jTlBBs3fl y1F,Ww9MugZgewnotMjZKI60_/uGEqzk5HM.8HoVsbAmM7VN__d +117;6;MSG117-PK006 RBl2aKXfnyAb,7vYrs.6SgLTDs:rMV-hrP6ZV-y9tSnd +117;11; +3;0;MSG003-PK000 pfS/2Vi.Rb1 n3U6t3w_I/973IPFlJ5F7WRd,Px BTHRJJb_yk +54;0;MSG054-PK000 pMW5fD2 sRfq.dhNj +54;2;MSG054-PK002 Vj-tVYZiqks25NX M:9.0zk2ChSu,gHAXxxSk2GrEapr9 +54;1;MSG054-PK001 b qlXIS9Pw SKw.zqZ .RlTg2Y_-iST7oPU11k11MfE1EXG0bR +54;4;MSG054-PK004 MbeBu8AcBqN: +54;3;MSG054-PK003 :USCXa1twyb0yS +54;5;MSG054-PK005 bFa2Q.0riQzinmu.k7 dAY2XYDYM9w. +54;7;MSG054-PK007 pJ74,0IlFZk0T40Sr-vrXnPIdqNHLyGO690YjE/3RRcelVSZ4-ysA +120;1;MSG120-PK001 gclJOej3rKMNadeD7qqM6uMtMCgTZ1cO +120;0;MSG120-PK000 0MJC9N9b.82A-Im2 pU4YsMdYFBRl:1sZH7 gA36 +49;8;MSG049-PK008 IvNX:5lNGXBQFlPQ3ZNszJbtWbWIXX1_ip/xrsFrIX rxgC7AD +49;7;MSG049-PK007 ,fxaE5_vi/B:MK5_m053ZFIrbDM-lxLxZ3L9Jt0NJdG +49;9;MSG049-PK009 FgHQPXP5ZV6.XagTRiqY92HGHB1Cv7eV0nG3TyGGwfhLtl-34G6mVrgFPkl:ScR0VmECOOglHyxx +49;10;MSG049-PK010 Zf.j feUtqk: +81;2;MSG081-PK002 srwAhKxmhD xdM/5B,flwDzQ5B,8SakwqqtdiD +81;4;MSG081-PK004 /n.ojbYKtxvEi .R_Asfie_ja9uDss,M4_EelNIpa-/ANIGtRF L +81;1;MSG081-PK001 VM.,fg3G0pIWJ-F-TZfp32.R064:QDrN5RBAfDYjAqWcFYoV4KqyY/z5:bB5k7j3P/c6KZosfG0 +81;6;MSG081-PK006 x1qcMv,UlhlNigd:tSwBgXSmo90uPpOt.-dfN1dUJ1dVf.MQl8bHqgK9Ac:44QqXCuv_ +81;5;MSG081-PK005 .ykhiV4ilbLE4wENldtMsSfPXAnh +81;7;MSG081-PK007 bdsEBOrzQd3w7NkV8g-:zv.YeHmWmNCRJCMo.tNSO5K1LDzDhIcBfRk.pU-SERa3qtU/eJiGE +81;8; +52;0;MSG052-PK000 Ryq-P3/I44d,f2fd,IWmJEF4egJk NKzX4kWE.63xkT9 MaPGV.32p:tL,NiJv +87;3;MSG087-PK003 0CD20axCQsl,rnpw/iFdPjct6kcT_lH61gQWrFBeG65Z-:RIzHXJP.tPH +87;2;MSG087-PK002 nF3Ih0QeUj-NfL, ETeE +117;10;MSG117-PK010 AKJ:TWL7tTUF2OVOYaRwyz_rOn1pDd1Cnxr:ReEGkyQe,fY7lTlOuUXxo eb.8.iywkmoo/w6MhV. +76;2;MSG076-PK002 MI/DJVpVOa59OH,rpP5d22wSan2wxdMy54pHK8vK_Gq2oS +86;1;MSG086-PK001 MCpE/GiQFli_vDg9DkD7s_8 +86;2;MSG086-PK002 cab962Ku66e7:VtVFiy:PNiCp6HG/QpTGJvCAHGfwV.UQib::tn4ma_5J/PFkR3KYb5rRG,,,QE- +86;3;MSG086-PK003 p2to_9GK1zl1l +86;5; +86;4;MSG086-PK004 xEdW2ibo9I_LuOuI07pBhWL zd:9TyR/AuIAQUoEyCi0VIzr +51;2;MSG051-PK002 E5/OB68gjuJBo3IT_sHF4bI4aLf9zXSi-5VYw3rgCu8AR,psUX9xjtFadR6.SoVDsNxRX +51;1;MSG051-PK001 RbvJpCdg4-2,S_ PRRaRmMQfL4wFY0LYq5w.2RnpKrfNCIPfHZsn XHyLzKn2W5Ge41-U/O +51;3; +63;0;MSG063-PK000 pb:0n7a,.AAkEqMev8ULxTfiZV5UUO8M_WBtjb,aRYhRO9A_KogZ +190;2;MSG190-PK002 BTnnhXSX24S:7,T_:TEb0sg,tv4g-KsfOuYaJ/z_a3mnGB3zjsTY_CCl33E +190;4;MSG190-PK004 Q3kou4McWjOG5l:T/68VyIX77KimMz5H/kVzD QVhNrF60O.KadEalrm5TbrSvod +190;3;MSG190-PK003 0-wux,Blq,mUW1szIFkc0lA_E0y2TeNPx0l_vq/2B5-KDPM-5YsZzM2l,gMhM s d tmi0ru9/_BD +180;1;MSG180-PK001 9G1LRFyhgPc3tYoZESFqx, ,6P7ZCX +180;0;MSG180-PK000 3ipHNUbaYagevqVRX2I0cys6 bO1KVrW5:tKIFL/kYOq:g65FNPmFdq +180;4;MSG180-PK004 4z3jn7VV7Hqi6Cea1:0KeFP1Af9,ytN4ZVuO +180;3;MSG180-PK003 .KwG. 3OPVL pEFXoCliUV8WBbXR7bAx2l.fY4D.WXCx0q:d,svsouK_LMfVDRF2gG-QS +180;2;MSG180-PK002 JbdZECUV5UbDMKpx3lgsVJ/:U7Ptr5k/So:XmV oHoN7HOFMDmqzcrsnVo6So +180;6;MSG180-PK006 v9,sztzwnW9 7Zgvib IOKmLFV +180;5;MSG180-PK005 6F7oV6K:_sPEZAwbVtS4tvz.O +180;8;MSG180-PK008 V_QUrE7zYogsJraB xCxnfBlpyUUr0UvTPh_4s,FLiX.5AfqkvrswT,TOVtoV5_ESOSaYB4Z +180;7;MSG180-PK007 wWjbPZYtFd5BD_H7V:Hf1k/qTruqPw-tpPoyneHNtETCnI-He9QezHK35viwM/:7am,nLy/S,jT- +180;11;MSG180-PK011 w8UiCJOALdL.tqWjVUb,YnwJF CroO9i0q +180;10;MSG180-PK010 0Ss0pAxHW MW.JSG.EG4gbrTr34P6EjyDQLr4kSqEy1nB1j +20;0;MSG020-PK000 VumvCt2zJgZLX_187PrMajGNAih0rs9uF +65;4; +140;4;MSG140-PK004 .-DFLV:b30EaOZ8UPgz4ZM -oDDba9M3u_ZnphQa1/BU.9,XYyn3j3GgVF 14eGk +65;3;MSG065-PK003 uHEQh mDQDuPWo 0xJ_J0 WKh/66UBWiJ +140;3;MSG140-PK003 qu7njOqAS _jKohxeVKbQ-q,iJbHo0hSZE.cLdcN +181;0;MSG181-PK000 wCDoNf-rgj.oKZXPL_l VB_Pm2w-WoQnlsvSneQVQ- ECTu:aIWU6T +181;2;MSG181-PK002 a nujVzKulQj2x +181;1;MSG181-PK001 8,do_l :/Vzfc:jMZAZVRVe7sMX1BF_z3FDENIBSNzFHNtAU3U1uRNBJefaX.qNePlx +181;3;MSG181-PK003 w2nilb3_d16Bw:izXyeWaC3KC0 +23;2;MSG023-PK002 werLUTlfvNQmekfayvY nIL:jKri7Hu-m,CKeYRu85T-NLZ1ENPAE7ttekhpsn5qtjKQOE93 +23;3;MSG023-PK003 GXx,7YP5rP2OxavG +129;3;MSG129-PK003 V.5WWuYgkk3EvDXuVy4:3Be5hpApY5:gFFrDm2NR/Z +129;5;MSG129-PK005 tGJxQnVEMmfwNd9OxYdY0VIBpmCa0E +34;7;MSG034-PK007 eTl9Ev/SkITXyGejT-aSSkmP5HIYUFoYg 8agKbFbNONpJcFtwkdAWYufE-VZJc4/btYPuRl +173;3;MSG173-PK003 I3pydBlV_NqR0iHtCDojOwJ8elP:g5x:RM5_Njd9,r8kDbYY17pw18Stu8k3g:75X/3RN.Y0s_ +173;4;MSG173-PK004 e:A8 5OP4DX-CEcyCT +173;6;MSG173-PK006 eOPOdl63O,-LX5CX- v-6:.6IWLFc,kHaQ390H96i0lOiDBUIY VZvTQs +173;5;MSG173-PK005 a_w,1Iix,8-iO6Swh-Quhx,bwzqWnsPkfFj06d0p_ +83;3;MSG083-PK003 sy21Ur/UnHna-x5JO5JV0StVc 2yD +83;5;MSG083-PK005 PLt1r06k:/u09hlA3il0X4Cxs +92;6;MSG092-PK006 bQCyhouQp:2K5cH: +153;1;MSG153-PK001 /Vj1WzGtUPHyKj aRx:,AckIX +153;3;MSG153-PK003 5Mxa8UwPWFYz:byic1xlCh +153;0;MSG153-PK000 d-dHeIUgZ9D0zvNxbA3X5oH_sei2Q92w.O ,5zjCKp0Kx,p0S9jyu/GLzr5UW-Dj8Ju,Wph +153;4;MSG153-PK004 Su,80Jx3Jzh4iCq9REDR AWpgVa/MHgW_NNASle1F +20;1;MSG020-PK001 A4sJPbp_N:n8D4Mp6tjRIfWGo72v LC +20;2;MSG020-PK002 Q1GTkbm F,C3In W_WfnmmpEU1YfS46_eZ3dBxdQmL0d6GTSTFJ5gP6HuAPZSw,lQT/DONmlZO,xW +6;1;MSG006-PK001 UPz6oH :OXYoST6wMkrOpENoxVs-X1rX2x +6;0;MSG006-PK000 RnvF_wuQ27DZxx +120;3;MSG120-PK003 087ofwyyWt5:h6d,N ugRrl,7TeXDs,6YGypnvKfXaGFZ1:P,cKon_VDP2GqDj +120;2;MSG120-PK002 RRWGwsYa/o5V7aola.fJ6MfTlV_K__.qV.ixhx7uP.pjJn3-ReZS4y +31;2;MSG031-PK002 gkqF_s6ldlwzq2i +31;1;MSG031-PK001 d5PWGKIZ34sgmhrIcrl.trC-5KatYse:S.i,HPr7DTy0NuCS6cbLlumrQno1iwPS +66;3;MSG066-PK003 6K7SvmIFUWUfWrr6awQqVHnohVT0wMjs2051.dHgOZM9eFz2IvKPztd3OICr0i +66;4;MSG066-PK004 Q0/FdUEjxuUuZJ4K47h3 +66;5;MSG066-PK005 fienrLL:bVYMqno-9NcdJG +66;6;MSG066-PK006 LhHkqjh6fJAjdSVbBlU_-6OeX1b34ToIoH_DSjQZcSpIq68gtiRDXonQppk3w8mGA +191;0;MSG191-PK000 ZT9fPFTYEqPrVmj-6kYVbpD4PHea JFCoAez1o.pSQ/mw -Q_5S,cMRvXg8QdOgoUr:yF +57;1;MSG057-PK001 x9_QC5toKvNkC8n +57;0;MSG057-PK000 .PQbhLJUf4rZudkc4DxsZTs5_uSLXEcQMkS2,pi64OA4vJOl6e..Ma,QOzaUzYR9s3_BVe6dSky +57;2;MSG057-PK002 A2_p24uz/Y2R0fZ89VST5FPLmaO49qTbLfwQ/.idOP:5tBR .LU8tf:ctKocKkVh7MFoZWb_p2ol +57;3;MSG057-PK003 NQMerq9cZeXNNEQ3S +138;5;MSG138-PK005 8HLJepEWk0f6Oomdhcis/B4etS0wes/DUZqgMC.SghQJiCiXO:7ptfTgoqsAr9kDtchNXXpr +101;5; +92;5;MSG092-PK005 /0pYchkAnoF,.4i87:vEhh58sOMgga1xQdI0XYaQa1_dxUVu._6z6Hd4bHo +196;0;MSG196-PK000 TtQIIAhw3_I8Eh,M-yuJ8Fw,A-9htzUWOC4S +196;2;MSG196-PK002 lllRhxQsojL LxpG6Bk0IP6eOH7A2UzfRWuDM +196;1;MSG196-PK001 z_Km0h1uhmu6UfOK6_dB.,NB +196;3;MSG196-PK003 vR.QWWnNZNLKvzTVFW5ZOHh: +62;0;MSG062-PK000 jrBOv:a-_Xd:ila6mKwAZdF0-d.Q.KHIA rozw3,,1BCjj.hMD +62;1;MSG062-PK001 i:8J7vlDnpuXT4NX +62;4;MSG062-PK004 mACqdY4zhtLa9NlzR11REEgCXC_U9JzCmO.cbdMnYsW UflN3_EpIYU +29;0;MSG029-PK000 WCPAgV7bwVSou:u70A2MEkOL:QYSK +71;0;MSG071-PK000 F.zz:52-AZ_:tS-p5A3/nWSxsFQe E9 DUro_ +71;1;MSG071-PK001 tt03x/lh5Z464/04D9j/ifT4H3.DBeUB Jf2uGrXphEEtJ8,yXSn:/Jo/0YkBsMcZEU8xH7 +71;2;MSG071-PK002 -T:bd-23uIOcPiIdN.7CS VICKPEWLYmh ,46stus +61;2;MSG061-PK002 nJJV12j0Z6WblQgIEIakaxYVR6WM7V1YU6yr99MkhRa3_PctEFgM2xpN +34;6;MSG034-PK006 GpuOCjy9OZmbg, ,zvj,ShC1lwfsQjz_9yA6fyMxLNJ5KaI,3d +10;1;MSG010-PK001 Cy6ZaHw0.nj.LRo-G/G4W9FR66d9oHiWCDO0T_/bHFKlZRj +27;0;MSG027-PK000 4olSuCaxy3vm +27;1;MSG027-PK001 3B/VQkO78vmW_fgRE9/BiWt-9w-JQNgm-rv9uagwBL/qDrthGlJJ JBq:oi1UzbqbqeAgJtCqq4, +27;2;MSG027-PK002 GYzahSD466TYm/Cqjcul1j8MWfu:BpdHFJiXYutkzp1 b.hUZV1Y6fXDYtk-YUUh +75;0;MSG075-PK000 AxJoL.Kt1-e 4T8K3S:R4VYMUlwJr5EHX/qUlZSsx_ APnl79:YEH +147;1;MSG147-PK001 myMpv6nyC6HReupLUEnlV8M831KznBxZjKURhvOJa:DMSjsmP8fRw3AWx4IwrP +141;0;MSG141-PK000 H-1yVO4,OHy6wOLivPwmkpY4yYZVIa:efJz-YQx0_Kk +82;0;MSG082-PK000 yM,t5ViBxJYPjyVmG3ovfoHf6.CJca54j1hmdCo4EN3zwmVUCE7Pzn,PqWm +6;2;MSG006-PK002 yX.,0 14 vkdCLeJC/Kv6,-ooIUf4 +6;4;MSG006-PK004 2B,IPKRq Rgfm6cpu46a2zqMuJlUGkVvgYND2lm +152;1;MSG152-PK001 Ce5,kvzwpv4UerIL.,A9xs68flPUegPz 2mDen34 qd.aXIu9mW7t1pCXgOAAIxB +152;4;MSG152-PK004 TQkNXf0lQEyYoyDm6xQzA,ohtrBzyJH3c +57;4;MSG057-PK004 -m e:CESiLxHI0ZFefeHTBcI1,vOnMbWo4g.5Aj,b.oY0/nCcDLWn +57;6;MSG057-PK006 1a KpN3HIav3pyTyKtPTRXlzs3tlA/GpUSjbTIqUs9RaVZ.h-J:wb4u8jtYyANexB :nFt08 +41;1;MSG041-PK001 zFkQTUzgiPCeyhNLb54/lmg +6;3;MSG006-PK003 S2vrAAhS/J/vPLLI-mr0hJqqFsPFY sI1W5jlZ +6;5;MSG006-PK005 9jDXlnnOVMrWrsi:bv4SBt04Blmr +198;3;MSG198-PK003 o2daETwq:qU3w.ag08qiV2Wx-5k,gxE7izMG_Q8.oV45I vzqX3im37e +198;4;MSG198-PK004 FY7G:PnGACVUqyycelEWpf0Q ED6dE,RQev +198;5; +143;1;MSG143-PK001 tWR.x80./pSb/.Tggvg 51Tr/g6s,EV34Ms_eR_ +143;3; +143;2;MSG143-PK002 ,efct y2C6CRKGlHE7tR.GJnrr-sQew9JHg0eY5_E7 +112;1;MSG112-PK001 jfhz1X3b3At8:iSIR2hYRPnQwIx8OhdnWnRzYGJCiWvCbdFadNSvf:uzOaW-/-DilLZz-0 +112;0;MSG112-PK000 :UPolg/cybZoSL9lh +38;0;MSG038-PK000 KuXZsm79QfiQI22 Aazat-RAu7w9X3CG +185;3;MSG185-PK003 hfvseXSzD4wNqU1x:Mu66N85STX3/nM0k5aNPMBUmlU:9o1q9OuaIuTJUsmL9Z,r1 +68;0;MSG068-PK000 z0cJ8ateEC5lH +68;3;MSG068-PK003 il-kBra6typl/HZQUg0B3-RiW61UTjW04ZhxrzWJNSnLE5aIzGtLn1t3zp,78IIsxsmxMqn9y +60;1;MSG060-PK001 YVZnf5h/Zip,lBGasTec0Iws61GFNN0Rr3ThOyK, Hkk0bu-VTy/,RT,OxhHiSPu +60;0;MSG060-PK000 agn3YTPNRNFegm8_IZq Mu +60;2;MSG060-PK002 LKDDsNS6:2,KgL86qHYJ9t-BLnb05jce4LLw-vFiWHqpq.q +99;3;MSG099-PK003 lv9V9/bw6rhzQuUjta:6TRNZ,hbK8T6fmq_c6eyJmpYz/1jelb: +138;4;MSG138-PK004 5ndbyzmY5VbYwe b:X5QkLziZV.UO,4SMJpWf4l vkT00y2w6UIzhLg2 +23;4;MSG023-PK004 ebURVRan9.zBsQ.J:Y:z3f6L/6fKQc0i817DOC5HMeDGYHa:DfC5EYa3gjJ/1c.Ng +23;5;MSG023-PK005 F9cmqHvLG1u2AuUmKNijtpaEiIwo5Rp./7-p9JkTlTwXyGcliusRu_ +84;2;MSG084-PK002 3gMMhMsInKs1OWt2jYhGZMFdd4uN7YXbTBjB9:A7K9WWC,89xNwGv9-Njw/ 0nr.s2nuJ75K +84;1;MSG084-PK001 z03N5 BtF uGvvlFDrNaYj_ZKZcTYt5GVdU0T:vWk2mzJ +79;0;MSG079-PK000 k M-Zy1FfS/GYe8aHDRn +120;4;MSG120-PK004 d5/1EkvKeP9tXrI-E8QlYgYiKfBPkS5Cea8L0UqJ_DMykkNVcZNODBMP0tJbnC +120;7;MSG120-PK007 OnDXmtNez2dpx8:x6an 2fvGbqZ +120;6;MSG120-PK006 6b9eMswmbQ0ium9SvUG h4/AULI6qVmqpqc0UPab9 +120;5;MSG120-PK005 M-9LysC0v.vOQQkmJeW_IgbaX8K7mjten +120;8;MSG120-PK008 39f/ysD6qTayLegk8fN5ZKfbFlWgWdys0lxGHyC5NS1.-3.v9CG9f4rK3xQ _2:1qh +120;10;MSG120-PK010 LO2M/X,jlRyV9CbAAGiWbMXvg9eRejJr9OUvZEU +120;9;MSG120-PK009 vyBk_1r99dr,Gw/xFnyk6mrEh3SSyzTn5MWLXN3 nK6nMDVl1o vIaO +73;0;MSG073-PK000 hrSAE,8a/XgNE79S6xVz7l,reoPDEDdazxRW1I4GiyEimTl1.DLMus03zlVMBcdANpFj +120;11;MSG120-PK011 7lV20kLqRhH0kZn9jBx oJ nkOXEb1g03kymxoq_6G1W_EPnWkryK2 +61;4;MSG061-PK004 pp6843znK04eXg7I1itt-Cc- _N85-.tGB6SZ:Y/3w5G.x +61;5;MSG061-PK005 X5tliPW5_iJc/u/xLZNpE5k1PhJvBnV0E8/kCpi +155;2;MSG155-PK002 Tn0x71wlQiL,MO6F9GKu5TjAnembohb8o +181;4;MSG181-PK004 .2aGT14xxsM,.TxL-agpjRpbwAZXnOHfg ZgnzotM,6VBB,Q/t 1btwKdV:DvpPx.M +148;0;MSG148-PK000 MXFDg,q8BirR3XXmKYTYoGvY1hODyvbACac//AZoQ NLCHq:mp-NZx.w +165;2;MSG165-PK002 qsbwGYg71x2At5Gr +183;2;MSG183-PK002 ,Q9s,hzaIMc8WbRg +183;4;MSG183-PK004 ZJicnK/MKGFn/0FhsmoI1R1W +45;0;MSG045-PK000 eQtfFkCv6lvAucA3W_3Lq49Xr2Rx8s:7WdFta.95CI4ka0x/DCISV9FR2wyq5,ehGQBR: +45;1;MSG045-PK001 GftQRRL0_C56eLnn19/iU1KZ6D:YRWbM +173;7;MSG173-PK007 zTDM kE9lPpmxNZCSDmG,hKxLyk9/hanCA-kUjd21NK/j +177;1;MSG177-PK001 fv-S0Ag4mDG0/wQ_hoNj1X +177;0;MSG177-PK000 2ZdKTqtRHn7dLbHzsF9OxFjRznwme1Nx2R.j5p95fUBfHDddInnP3R:dZPt15I WgANpW3 +177;2;MSG177-PK002 Wmk8WSG3AbIM.yJ,dinRH_c/mQQ5hhyyNt:dM3VWIcHhOvxsLYx/ +177;4;MSG177-PK004 .5Lk6Bpq7MD.ofgNhIe9BmgimI_ +74;0;MSG074-PK000 E.nz bO9LjeF80uw1QIpPqU/A:Sk +74;1;MSG074-PK001 9nyvhmhwmR_RpmV:kpgmKXfqyVFRY-u-bmIg/orFR2DkZ,W +74;3;MSG074-PK003 sP0CMccl51:CFJUahHnUllzfBd4XXj9aXnXZI0N/rd_ q:N_j +32;6;MSG032-PK006 Yu2qa/dS/DpqIIluh4QYOrhpsF,Zzj96NVJuibXxIlA +32;5;MSG032-PK005 hq315YQv6vMTA HVc5a.3Ma1,U0cvfbnvfvxjVMEeJHeCwuSyFAwavFTiftVQShoCR +59;2;MSG059-PK002 Um:Yrna.0yZ6:w.i2XbbWZ.:iu gNuVvIWP.c2j5ruKm64bBpfh:BHaSHG:6fI/FyG1OW6r +59;1;MSG059-PK001 nXasPdt,cHadNF3W2-M7f,tXfu7O9.12z0.dTA y:h +97;2;MSG097-PK002 .Rm:hCI86GJSQBnpiCg/Askxn2m51rTl6Amds_FBms3Ps.mah4K/9jbT +123;1;MSG123-PK001 vs6AUYsQTl1QNyH07h D.Amlt-lncoelD-fUsb1yR,rIFLIeG/dw +123;0;MSG123-PK000 R884uWwR 1tq,.uJ-lrMPUD4vJtehv0S +123;4;MSG123-PK004 IujduaelY8KNAWlCPz_P-qLb3_RA_lzQrGZxI4fxi95hqQzE2,5 +123;3;MSG123-PK003 T CbLTsykmzGA O9L0 WWOMsh/ +123;6;MSG123-PK006 IVBsh,9h:zUJa3FPmWd-NlGUGyg +123;5;MSG123-PK005 IVUvTyM1bQmmOrC0nE 4OEMxG +123;7;MSG123-PK007 h XZ,FeLb5wNCyZpZa2zhwUEXWtKhXA_DK32in KUD:4Z7 +123;2;MSG123-PK002 Fio8xvD5Pp/r-5bG:PSz:,9tWn39jZ:5,SHpk_L,Yv4HG +118;0;MSG118-PK000 9EASP6SjqwSz,1_N_ +118;2;MSG118-PK002 MrGIiRXpyUNXWzc4y-6R3O1pjlwLaLfjs9rNo,Td +118;3;MSG118-PK003 7T4857zvj:X5AA4sWO3:z5vghKOiYVTiPi8 +6;6; +147;0;MSG147-PK000 hhCuJhd5vnrn_5PLw9awcMPR6G2zcLECo +43;0;MSG043-PK000 e4:noj4n2geJdvlIKLlTQ25JDDD_M0RVuDn9d +43;2;MSG043-PK002 DO7qppXrRdYyVHYMZA/5bnLPU aDEGq8mYYtUPqhQdwXgagkohkP2j1j6yHG-krlDag-ry:MW +144;0;MSG144-PK000 VcU8hr22f8ew_f6kukZdNepu1RgeDiUWzNAJ5mpAOnyTs,HXm2tat3_.B4lS9lIcZvM,pos +144;1;MSG144-PK001 yizjhVS3fNk,YSLMi584V/rDm2Q/1I6fw2dk3fG8Iz0KWhUKZDRJkPFfOy:3E +144;2;MSG144-PK002 Z Cc:3GD:y GfuUPw/IehCUBsIKO40 +116;2;MSG116-PK002 mL,1,Nhht/Z Gm1d6El_UfI8/rRUX1nxvMg_t5q4LeWN,f/:5eGLk0c9 +116;1;MSG116-PK001 rRMqm6lp1:IQvWBNLOfPB7UIhJRpiGobka/7vWcSN5mz,yqWW2V-j:z +116;3; +131;0;MSG131-PK000 YUpVsdBQe.CY:0d38:IN1HkpEU:v9acWtlthtKOd4WxL/ZIHnSRm69IFKgsk,hvc1CI_AvC +131;1;MSG131-PK001 4oGM-Tb7iFGQY_JUWl3uJ.JC +131;3; +131;2;MSG131-PK002 Y6C7Xdd:1a :eLeBAuWznwQn742:A08pEcUh_PGtJfps.w9ylVLtlqT-/7gZP7gxHIUth:pL_oVL/ +173;9;MSG173-PK009 HQIc-a nRvJibVgG4ILoa6Rbqb0-Wg5Vt47XrdhehFX2gx8HXJLj:,2s7U3mB_GHWE81W/XBpkwp +190;6;MSG190-PK006 Q:tQpJEGmWzCOck:y2bVhVEQ6D20.4v9L4TM.,1ljt9LAvUOMNbNvYhBLI_A.,k92cs yUn2Il +190;5;MSG190-PK005 gFM_D.8hy_N5LlEI7yPg_2oCg,N7y5fxKaTFDnTKYRC0Lmxy42zSqCWR +190;7;MSG190-PK007 mJWBZrlEbRU9-wZx O/61lDmQ0xmH9Q, +42;0;MSG042-PK000 YdxfDqvpFj9elPZ1Aq8:9u_,zjGuNU0wo8YNMo2bEyx.a8acPkfw: NRktcsuak UMUIi +27;3;MSG027-PK003 bMWv6yqvXr3plLsGB0rRPItm--f/,m0sENkWHCzRErK6xUhU/ECFHzeE +27;4;MSG027-PK004 Q6ZIQzUE3V8IYX.Wi3AJqkwRKVc/bQN-lRxZsPVWYM5xoEb6JrEVpIxXpKgHzFu1oMONBh50C6C +82;3; +82;2;MSG082-PK002 GIoU-sX_8LLCE,AoHbscDcgnaClioMb SV7/3vj1 +82;1;MSG082-PK001 Refxs8Ib: V _HrDSkeu3NxoMr/-MjXDJK 7x 1zt +55;1;MSG055-PK001 x0:myptwJlwCr-aYxSEGm.UJRVJivO/:EkHagDSZCdzu.t38yPMbN5WU4m2.3rlysUh: +55;3;MSG055-PK003 X0EW3ws:JUONjLa/Q6WtuTjn +8;1;MSG008-PK001 9 S.PXIxdOCdJh8:TDumFEI/hCXTwwEOTdTsy,Nw elhDCc:9aQzqRwPh +50;0;MSG050-PK000 k6MAjqMBMOASF.jiQ,Tes6ugI-eyWV5T1xGzzm0/W6a_/OPcZIDIInhicMs 8HySJtoan:j.1 +50;1;MSG050-PK001 P,eyM6VYgl0KuXxMQPK1uaw +129;7;MSG129-PK007 UlL26yYLOWl_iEKzlW8VP +129;6;MSG129-PK006 zDbaXwDhOdI4r8 zNS7zK2Os39N_FRlp54F73Zb2vVA6 uKO5KH +129;9;MSG129-PK009 9,Xnv41UoGuNnah0ecIk-iE00se0X2lavfkl5IUo.:FH56CjhnkdZgaDa:Q8C9fXowJPVToUiCqu +129;8;MSG129-PK008 Z :_cm0uwAmHqnmwQEIbJHILa6qljpwOWY5T0mpBy +129;11;MSG129-PK011 CvjK2e98jKACV4H40SaR +129;10;MSG129-PK010 P4J pHATjwbfJSpO-wNCYQ3.VX9GHDdt5-mj6NQ3n_QivcV +129;14;MSG129-PK014 8TTu_ifAnC-ZCUVxDlDEQ_1wZ.ScD/PbJIWgngkZAshagNv +129;13;MSG129-PK013 StqLqCs26HQtg_r2d9S-n5Bjm3dkqKb +120;12; +169;2;MSG169-PK002 b4g7-0f:VutCq2xCHhobHZvA/_UdXSfLEidXeJ/ZyS9xEN6ZKZbaH,PomBY2Zr0bzyBn +129;12;MSG129-PK012 z2w,Isz8LfOl8j4U9Dusy3oz_oNx +114;2;MSG114-PK002 ,SXUV,3GnEda.4lg2sCQoYBn.xHJXKPZ +118;5;MSG118-PK005 Rmz5K/5hTRG:bfT7xQt +118;4;MSG118-PK004 __qC4rtGq-szLGsh4pwsEdu +118;6;MSG118-PK006 BFtgk.1nWvYKSXg-f6_4qliCM hNgxv Hzb +118;7;MSG118-PK007 fC/R54q1aAByWd2ySdX4brCm6Qf:mcPFQrn3wq0Tquno:1NI8kyDJk_numWZgWxPB1jA_m +118;8;MSG118-PK008 zub5YxU9BlXV3tPkZiTtdlcbE237P/fx9DC 65AjS_y +74;2;MSG074-PK002 jz/DN,4fSlbG8Dadx_vmBok +74;4;MSG074-PK004 sN,7vkC0zZtdj0aILo9uyidi4hX2:WF4rmUBS-GgN9fU6lu1OXSXJm2OYX16mQ6okpre +171;0;MSG171-PK000 jzi6gU_TCX3MT 5XtDhVhyhQoghfjbv +177;3;MSG177-PK003 jF Mv4gll:5nd4m3 +77;11;MSG077-PK011 ,p3_,M uO0FIAwPlbpkdv +141;2;MSG141-PK002 JYrp93S.:ZdovSpkBD_,8w,gHiWNhYjU9y2ET0kf3syXbeYOon2.bCmHlE7Vs2pt +84;3;MSG084-PK003 28ysP_Y.I_jdWuJ6 +134;3; +158;0;MSG158-PK000 Ei8QRoCKv,Z43Ml9b9g2B51Jb .rEYZ7iEN +114;3;MSG114-PK003 h0os6CL_Q9NMjKMv3PJOC4fV8SILkQ-7NIpRbwsuQi +114;4;MSG114-PK004 :42pV7JdhM.2f:btW,- +190;9;MSG190-PK009 yyy82jE18oPc_DwpK +190;8;MSG190-PK008 2,BVxX1KAlH3:fD2VGK_GFTR-h8pqB1d:U-lFFEHywqf2c:ak0NUI1F-vvn +17;1;MSG017-PK001 :HqPSZifduDmn,8PDEnwX1ihGoej4VdwPn5WrzzG 4KCzu3:yldmAeraU0jRx:,yA8.TTri42Wjk +129;15;MSG129-PK015 HtfXqoHetI_FLqn,opPqt +129;16;MSG129-PK016 UFtIvOI4TP8XwMw1n_6Pv_x_p4fu2qIOTqt +152;3;MSG152-PK003 ozwdziCDoaFA5FDXljBNDp3o9By//EvSPgmjVt6 XE.rQze872amDv1/IDnkJb1fIW7Fwy08cV +48;0;MSG048-PK000 pmC0/4k.3,j9a/bNsAuUc m2ktCArjyJTurfHfgB9j8,U_SXt5GaXZn +152;5;MSG152-PK005 sHq:n.VXgnIHwdYrUXUqnzaVW9QnH6w2,hJGvtb4YG-mcyBi7n_fyUn2HUGYPCCjYdB7AnbwVpk +67;1;MSG067-PK001 0pZui BW8kE:,ziLcBjpY21p2vNY_39Ywj.rxN7xqG,Z24f6nY4lI_T +156;0;MSG156-PK000 hHt4bDXWFDtZ0scVsUWtqYQkRE s +156;2;MSG156-PK002 deR-MVSj0dik7JA:wyu5mSSTG9o R/M4gj :nledbNzF,hWj55xwm6K 9ECY43 +156;1;MSG156-PK001 huLe0t.:rHeItVnN H0AI6ODQF6KQqVxR3b--L a lo7YAA3WmiViRL9sHl +1;5;MSG001-PK005 tyLBhhOhg9.:uh-kxiiEZpFfk1_OHAOEHYqM6Ojb6mj/B.HqSiFVKu4M:bMnrHontIKARAH. G +180;13;MSG180-PK013 aks2eZnECYUTf9Ti1gLDXsOBw.AsV6hsz2vyPk07t-_R6TWqs9rpiiDiHM:fIvZDJjMqmnFI. +147;3;MSG147-PK003 _OQxSi0psPKdl5VU_EGy9fvKifSv.EU0FzhgD4Hp,w9jG96dYbxgjTnx_8g +5;0;MSG005-PK000 HXE5IQMbHUEh +66;8;MSG066-PK008 /3Y3JikeQivr7sIyc2,8,_DX66.ib,a-rGg.CTkCymT +73;1;MSG073-PK001 kMPvx-rBrPBN-Px5BG0T46OECSwp,aXLa3KlszjPJftNH6.Ab5QbnZ +20;3;MSG020-PK003 .L/wYjzllZHsR/TYrXnLkPC4fFtJd,CCFC4BsbLFc941y0x_ZXH +25;0;MSG025-PK000 WpyB5jLNHgvPgsYL-fm3JKgE5AGnY8/ns7,-vxjbul /xnyH_1vR 4D2 +43;3;MSG043-PK003 F0UO1irqj:rrc0Bk:YKp9XiCdty0Ho3E2.yOi073JbFsCiDwRr/tZ6nwWE7HPvxOx1GHM_J +43;5;MSG043-PK005 YYcBsyP-Mj/awOS 7D6zT OSisG5Ikji9B +63;2;MSG063-PK002 yE:uN3ZWgo-7O_eKnLcy1CN:4HQnrXpE5hvuAcLLBiukzJPQ4df8xRZX qF +63;1;MSG063-PK001 vLLVW7l-kLBDX5 +63;4;MSG063-PK004 eKgKLH7Jx6g5rUMIRt90ihQG6u8Jh6OlFpGWaE5vdDO0_ocV/,96a +63;3;MSG063-PK003 mEZ 69W UzqqIX9B7k18OQ5pqdNQHdu/JMA:rW5ZJpEXX I_ +20;5;MSG020-PK005 0sOagTpji:0uyFwxd,pQlmZX0W8rRxmNTw3G,lxHZzDSkR5m:GchhVmva:baPXNdViwy,x/BSmtVw +20;4;MSG020-PK004 m.8/OnDSC7Ig64,3ivc5hS9siTiJ +127;0;MSG127-PK000 QFBW..Cfon0a0JkXX-kF +77;10;MSG077-PK010 kgH-VmSdTHvL5_KfNnN,nHa-_7 SjPZuroz6eiY:KbN9ZEDbN8mNnOx.Mr7W 6Jn3RE4J0W4R1A4m +190;12;MSG190-PK012 WcAXuvdYVO5ja83jSLBk9KY:KhPu3HhePTvShAig3Oj9qP6 +162;2;MSG162-PK002 3lLxQ:Q EM6g4SlsGj4NwKQfrfEhlSvrRasM6mUv,WFXW:9dbKTfzG8xg71UzZt +36;1;MSG036-PK001 3NrWgoXF qWBiTWQTux 4WHlMfdBPawQRiAIKGZ9sx//DaM8EDiGUJWkV9 +36;3;MSG036-PK003 9/0vnb j6mfZ:O2MqQ6g0as2zFjVHwzbZegxygx.3QQcPrvKmmLtdZ09enOjGOscmZ2 +13;1;MSG013-PK001 GXNUp/E4XbYGMlEMAu4O0eJk 80Q2muH.iT1P6dgx4 +13;0;MSG013-PK000 EotydFN7 32ezuIrdHJwf chkOMi0UlYrEo.p_:G,lEpOQXE2BsnwBJ40Gh /Vo +75;1;MSG075-PK001 i:/4w, 1h0._W4KwbQdP8/LZwsiZAH0Ql/ZO +13;2;MSG013-PK002 59rHwPKzk1VxYWCccDl7zHvgZ2HtlVvpb:36,pCAyIK,Wq3ABKy1 +13;3;MSG013-PK003 rPYBX2GjmhgQE8TfaG.WMYVqfwHv.,R7qlO:3sHoOfq,JU3KHH_O3vO t4gytgDxe8Hu73o, +13;4;MSG013-PK004 v-IBa:x1jF,mQdKpYVnPtdk696IaQf5PqBg +113;1;MSG113-PK001 o4,2wZgGs9NVF8VZ1vY +113;0;MSG113-PK000 pt-oM9mIELenlRKdzzR2hh6fQ +56;1;MSG056-PK001 HqU,95x66GU5Rgvn_:SxlmK:N3eDW +134;2;MSG134-PK002 ITnSojWlFnL-4jQQoHWxFcoB,oys7Y2Vr0.UFb4LNfmJyZ2GG2buJ2Z1JTfq6j.DFp +59;6; +59;5;MSG059-PK005 _u4D0/:BErz/:XrtTG2.1x03lhDUZV,IgNz kNu0s +73;3;MSG073-PK003 WiVvyuR5:f.Qf2byhCK9jkxgr8BdrD:UQmrte7tszfAFVtCCTinpE,8F6u47 +73;2;MSG073-PK002 z0Mv7tjxZHOKzX 1-939NX9xX-0yalDACq rm5av19pXjLKmTpN6T2p1fAKPtY +73;4;MSG073-PK004 MGH-WR6IzdZtcW:iNMp.4sgw- +73;5;MSG073-PK005 40FycRa6JRgKKEv4mvas_ +90;3;MSG090-PK003 /xc,-EF_jbnyZqJa +90;2;MSG090-PK002 uC4F55cInGR/0kBYIytFVeZFq.65PRH.KebKtia __Q60a +90;5;MSG090-PK005 :RD7Onwtb rkOgQXawxtI,eDvkEy7/chX/Nb0JsD +147;2;MSG147-PK002 H50Pr:ZAHzuJ92liNCHC-CEVd0:9JLG26p5JaPOua5l 2UAxi4aon,80KYNWP_-MsjN,V +147;4;MSG147-PK004 Yj_J63bWE,nvnCOAJow4Cpd1ymQp_aJ3B89 +147;5;MSG147-PK005 u20O1eKsTbz/VC38j6XOAI8D_FUwnLi:eH7n-DdDnenkv7H,eOLh:PY6fWxkV +147;6;MSG147-PK006 0qTgv.JPlk.RE-iwHFzlnInafS7:uIl8ZOEgH:u6rlRSfy3.dpi0sj6GeXGtvf5FVVY +144;4; +144;3;MSG144-PK003 Y6y7-/0X5n6nyxbsDx0 8wu9Z,sCuBva7R3:ojTP85KH4X0men1wjd/EhsLTfaNZ/ +193;0;MSG193-PK000 NcLpj88nWhd1NtorckqGeUSdXfiWP1iv8gU-KnPRN:-CzwITZIbOdJ0LMDO7AOX1nXOX1 c_r/_rB +193;2;MSG193-PK002 FQxO59IQ dVA +85;0;MSG085-PK000 dWEH yL:jIYasH4Mb7MANNKo7VW2XlYxlCvExVbo9XkfyrnYR.a6tW8eQj +85;1;MSG085-PK001 kFbIqelUhSu9Dok4YS0 xxJnu-XQdF_Npgm +85;2;MSG085-PK002 wqrg XJXiyvSRpLCwjo9vJSWhSj-wh:e0o5-a:,ozRC_N4ztHthT7hC3 +85;3; +60;3;MSG060-PK003 lU:HDHSWSosCKAHJh7d-c1BjEQLEP5IPc8Apt_ujmjxYNtm-kOGH,.B76g hVd4dVcZqXBx4 +60;4; +196;4;MSG196-PK004 __2 mDf.a_vCFKe.:9YkwMLFFgAky5Xi7HyT/nU5,JSPyoMO9YomkS8XtCQgkE/hDg0_0wNVwM4E +25;1;MSG025-PK001 Zp69hZ,EZ_sbUaWskvxCSPulYUbQ5nHZtj_wjrPY6f/IE3KcuqeQeD3G.LqMR-ikKS +184;1;MSG184-PK001 BT3pU-,zHOs2sxnf0zl9kJVM-93tYIN63_4K4TW,r03fhIAF G5 +157;1;MSG157-PK001 W2xtFI1q5oQpHydj,51aaAk2p,2ne1GTMIk2xz_irgHrmKh:cm6N-A:B2lt_ +157;0;MSG157-PK000 GsQnXBmcLYSWHxywNVGPGlkARLVNxx4sZoFs:NzT.Vohl68ipJ35sYO8y,wn9 FSUb +157;2;MSG157-PK002 N6SyHzP,0aVHhlVcAUFGyy_JpMP0B h6KUiSZQ4Dk7UmL42smvwXZRj3m00hlyhXEYcygJ:qi +24;0;MSG024-PK000 ,PXm7.0:bbxAddnQ1oq:bFWQ8,HKp1aBYVSrhjNjp:KnLCDY:9Rdr0yvuB.sjE5JQR1jlGeLq_/0 +79;1;MSG079-PK001 G5Ynw1Qg:/ UQ.Oy89/-k +79;2;MSG079-PK002 xk85-PLO7K97cYf_RR.yNV1KDv7UNkjP2Ut8 +138;6;MSG138-PK006 qkITX7K5PevZpT_1nWjEN5i,Zly517LGT9B42vZTpp9Xyki wB.-DJcxV.Xu0B/d_Wv6Eqob:6E +138;3;MSG138-PK003 :okhqRw f2mrrXe1mKwGO3IkLR-xCiz/Mv7zDzc45A7VBN,I7JWMbtybTTNkqouNs_BQGYih +53;0;MSG053-PK000 FM0v8hI7wyEGG31YnfTmMXlgW-Yv.X_ +53;1;MSG053-PK001 lDMIgDEmFdpYyI81irA,,FaluudjXBm.UxdatEmUtBjyFYBiLawkv fxFp29xeoxS +53;2;MSG053-PK002 RBwLN:EGB-9oVjOK,M3oo7h5br9s/xeGgfE_bzKowAvoWbdVBwHjDrSx5XuU +72;1;MSG072-PK001 QgH7DTAPsv1UHAgSA +44;6;MSG044-PK006 0BQ2a,, /NBDr 0yhH0ed_wFZWs2 +44;4;MSG044-PK004 xClrYOzu6EOQpK5tH +44;5;MSG044-PK005 TOVS5ftef0o8Gjy1NHUJ8YounFls9b1Pd4ZntvtEdUX +44;7;MSG044-PK007 7diRnwehAAGNe638uoWxjyEDjuWsoaRCd9kuw1fhqs-D74Jx6gOKP /4vshZytu_dkv +183;3;MSG183-PK003 NUsyTYOI,T6:J:-KEW8y_s0/,9X/sPHtqT66CKlbIZVJrM5CgMo8J8,CS0W +155;1;MSG155-PK001 fdc1Xu2-RSc-NNibo3,vuql23RL:7-ZIZRkTXYKu6cVXvuOM7e5U.DPqO7/bZ1vQQ_slG +110;0;MSG110-PK000 a0n9CRS p994uo2WKhkXw +110;2;MSG110-PK002 t9B6xcHo3.zIvIp:OcL:hbXcY,b:,ZqId-qBBgdx8BD_PtwO,dsZ,u +110;1;MSG110-PK001 tPS2nY/z,OcnNpfv,dEYJZT8YifUr,wy,SNzPN89hpOw3b L/XBR-_y I5oZZPkKMHTcCwzptH- +110;4;MSG110-PK004 miyF2wV9hnV08n1Su3Ebv01:fAr4A03XwciA6KiuAj4SW BRf/wqbJ,CcmqHd5J- +110;3;MSG110-PK003 D4/WfCYo:JE0/vu-yA0jR4n8AbgydVWNGkPZ N_t6O/AymFcqlP Eta/A0mWxs. +110;6;MSG110-PK006 9F0JE/IiVuFT_xhrfiYZVnUi7H 4uFKA3Y1K4:L3QaBETcIX.gnPr5ZSeYeFe6U.R +96;1;MSG096-PK001 ryK,1N0iKR6-VaRpdOhTWcBqXZrRmhDmUFd-7eEDauJ099115a2Llh-gia8t3 +170;1;MSG170-PK001 Ne/sjkypPlUoJ,Nr:_pff0FDvglv890 +141;1;MSG141-PK001 1O0R0YYEzfbuQGB7AnY51.7OpNYHYcYxOjeIw.gj6KSM3ZZw2L/9zanx +62;3;MSG062-PK003 KUga3ASDEAUdoZx1 +62;5;MSG062-PK005 ncrBvamWSn_aZco Se6RpuX78TcJZmYus-Kz3S2/,vbsaG kdDXRDK WLlGLs8o4LRBiLUVTbggs +62;2;MSG062-PK002 wFr,O:lk/Ovd1BdHoWSq6vYlnbSCmfci6xPiCYvtycjB5ewdlNa +190;11;MSG190-PK011 p4ZVo L7.K8Vl49ESutQs/oFRjyB +190;10;MSG190-PK010 -vT-xB55qnJcthBs_1kuNqm1QUio1v/ffPX9NgNtKKymFK6URnBlvp +194;0;MSG194-PK000 WbmApF7zKoyx5 +194;1;MSG194-PK001 jg7G6MqC49Z5129t CxXWBrcv5 EK4V/Imv1xt 2l9kfYOW8MITdf4iDS 2e6G:jjerFZcW1q Z +159;0;MSG159-PK000 t4MaMb thN XUcwS +110;5;MSG110-PK005 nI9CJr7wwg_V/b +80;1;MSG080-PK001 H6qN_1_-yvuQCRdxx55HYayD_G oC9bR:, Qru +77;12;MSG077-PK012 N7HlO83mJqy.hxiwGP/tH9b-d,fx7_U5Iy0KuQJwN7hwXnOLZZ3qa9w6tqEo_4d-0EAMJS +154;2;MSG154-PK002 s2gGa/7TEE0SZMFuvMgi6AWCRM7fLh_g0Er-vE/xZ3JZukxNH +114;7;MSG114-PK007 ruOfvdpn.PRu +114;6;MSG114-PK006 _gUzg4XraOGrZdsJJqpl9D.KXt5HF0NUe4ciEMrwDPOdJNdV,og3qe-eta +114;5;MSG114-PK005 vv.iVRjOZxMD rOreIAemZhKr1D,V9x.NX_U-R60dVcP8U8Uzuk/: +114;8;MSG114-PK008 4 ZaGfx5o/Bbobg-ISsRHebBUo-B +114;10;MSG114-PK010 :ud8bHtX3mFW71yN_Uq/PsO-aAmtdoDv9Y-RVZPujl8 cbv.ohOBcF +114;9;MSG114-PK009 k0HXWYBx33Ck-r4.6WtLV_M.OlY3x2CR4PL-LQwMdSIo0/zzpHwoN7wE_eyu5gP +114;11;MSG114-PK011 yJamc76rSbqpfRBh3a-Iz-slFVyIlp-9s7IwyDk7S3iy3zooUWSUMj6hRR,YEHp3xVCo2IdwA5DBg +163;0;MSG163-PK000 cN.CelzskIsyEHRF UbtmaEsHGmEDswHP89B +152;6;MSG152-PK006 ORNTUbLklf VJF/7b.z,BtlccC4C-hEFD8pzx fADvvRBfMiec/oK +163;3;MSG163-PK003 bl7vfNKaEgtcPTKroNnb18GCyrhCpbcYPtytimDuFbKvNNjJ +152;8;MSG152-PK008 MrGS./_sq4h,CHzCw tqqeFg:7W5uPKNn4vr/hBVnJTYqK6P6Hd3o1.Wx46V2KEJXqd4uU +80;0;MSG080-PK000 Z4 Msiayb1AJLz n +111;1;MSG111-PK001 C4IgjxXIe/S1Lzsb0QDpsH_E/w5gXOMR5EHQIpBrD3Wj1xVxCei7 +181;5;MSG181-PK005 U_YyGQ-jr0p6Njb8KVdeRjkeM.rP9dIJvi6dRo-GUe +181;6;MSG181-PK006 LLkNwRUkTD.WU lB1S24XZ10deUNX +61;6;MSG061-PK006 KHhSiQmCGt,lju3/gc.2g2_jLNk22Xmn97tJua08gdR_StJbG9 +61;8;MSG061-PK008 OvOtCsJEGsmAS93P3va zCVcb1HPP_fN_vLf8u_WxUS_4xy5c2uU.7BWc:hVT/rr1szk06V +184;3;MSG184-PK003 A,f9NO/zR/lmPSwMe2zli 12OJOdOxs_.mT4GJJDjz:ghQoCNI_B:NrG8qMt4 +184;4;MSG184-PK004 XMUfUGzJNihz +184;6;MSG184-PK006 7/bv:glwnxNXC-/P/,A4_uD,_gpXop0rkloQ2 MAfQQ-.ikJ1BZPoki +184;5;MSG184-PK005 H9-R3zgW612q9euwYeW8tEB/jPQmtENJq3Ffew-vQmyb8OaLa6zlm/XBpH7n +184;8;MSG184-PK008 -FLL:F SkO42867ILo,t//R8fH L6oq +184;7;MSG184-PK007 bvZ1_paAiHGW_3S07hfJquV/AW:DmLAuj zbQT-9ZqlFy_BsWzn1Q BytyVjpT1zHG,J +68;2;MSG068-PK002 mYyx4GUmkYRi2aZwLP +68;1;MSG068-PK001 PHu,1qFFY-BsNd8w-kS.n1j.d.d/hHcADYw4sIMQqx9UHrX +166;1;MSG166-PK001 AzS3_xD5jj9V9YCUAtlnOlBes9M2YMPO1t-6ViHDJt-31itobwO r +61;7;MSG061-PK007 l5S3wtNM71HmIS.BxUjekbrZDBHrs4 8h/PNv2.wEUVHzJG/xlE_appOR9ZJmVnA +61;10; +61;9;MSG061-PK009 RW-1B lE4/8b:dQF.xjwtCXQ5Uy XIKQouPXtvtbAJ0GIqXpA_h5jWf3zHRjeX:z_tsjWs_Wb +2;2;MSG002-PK002 lENCzsdfF8j61yX,ZFsan2Cw_7gFp6r7:O4.25u85HFJ_ EJ4jKEIQ +91;1;MSG091-PK001 wzPZxpEHyEV5lwcP NqiC/2aW.x:5r- +91;0;MSG091-PK000 hpPqYjJT4_vLVZ2D3BgTor_k0z43Dl6FzzTYF +199;6;MSG199-PK006 XEt:5SrBdj2Q1miTV4cqiKkZZqSRB4KQW:4:a47UDBsjmR6lNJgzAfAroyPq.,lTX1EimXd,eP6 +155;0;MSG155-PK000 9yUI189U7Zeo_0,w0QjVaT-FShC7nnJ5702_LRHw,7rxkGINA8N RlXwTN7nsAq/mNSwsJ +199;5;MSG199-PK005 0CIa3Ym52owoHRgI.BUJVKkYEqB +199;7;MSG199-PK007 HqGbZbgSejbgciQFmMDHlfBs-tum3DU S8ZdxIx-wDeBrL9XMquWAFDnwg9BB57 +69;1;MSG069-PK001 afil,M6FipkK2EA2dmgOaKPXn5Ih +69;0;MSG069-PK000 fgMY0aXC.x.VeLn1s7QauduxQwoxCbwKHWr,WFPmL-7H8lOmqQJVEOCDQ +69;3;MSG069-PK003 ,2pcbvCTjrdHUXoQ8AHHyS2zA9T-IkF8:, +87;1;MSG087-PK001 djm woyycved +87;5;MSG087-PK005 mMmVMhhN-ZQ3aGXVIIOW77UV2iuFLcfkPrwdLdlTd93vIvcmsn6rxfMCGwx +34;5;MSG034-PK005 jBMpcA_,Pt8qe3PXMurLbQth_xDRDd 22nHZqeVZ/qak8UFa +21;6;MSG021-PK006 sMrYbVh-bo:I:bMrOF9By899BmwXjsq-si9-j +83;4;MSG083-PK004 g,hhQ:AcGvYBtEigwZTO,K9HLzYY DPsmZc_FMfv.6J +83;7;MSG083-PK007 f4qYXD2 52DWXDVq8EZbc5UVbGbJoz- +83;6;MSG083-PK006 CC4X6m3r6ZtIF0gZCee7:wABj8. AU1Cxjn.6nXsX:94CQogT7BMM0_ +74;5;MSG074-PK005 URrS61kSdEyS-H/g_1i.3_ybGAJsu,VBqpa +74;7;MSG074-PK007 Ue/8RRfP3uHL/k// +74;6;MSG074-PK006 cnMfR3QasT5 efPhs7aIYyYio_y_1I:yWr01k0yX48i66Ox0MxX +48;1;MSG048-PK001 vop3gikpqDCzhxPT-,rh2tC +192;0;MSG192-PK000 XycsrqLEH5l,u/3rTnKjIkeE0u:loW,eg9YKjSA3LLVc6hiJQ3nasOT +34;8; +69;2;MSG069-PK002 uc-Ll-x0PIe74wPQeVNpQpgA6V57a4WdZl2JoBUmvHAWOUU/u +69;4;MSG069-PK004 IEvJk4b7ms . 1EF- f-iyww +69;5;MSG069-PK005 m1GT8oeLsRcbx-LvrJm,fpCmE,,JAGeChR8vQl,CCFS_oD0.uugkQt 1VKZwklX5bg1vf-rnqIb6W +69;6;MSG069-PK006 IGWPdqk:K-GTIJ4sTL7shK GNqn5U0DGaHXPmKMHN1 +119;4; +107;3;MSG107-PK003 U29KjSKaM1m4JVO0z ep_ mPlDbaYyLe1mwvWtD +107;4;MSG107-PK004 Oe5dN6VSuzbFAOcnwDvagnouIEJnT.trkvkVjnfaRgX0VCRYmIhdmMSqYbZ/tl9NH c9GQwrLH4Z +38;1;MSG038-PK001 7ya/8qb6Cv98 +38;3;MSG038-PK003 U3SZZ60LfW:EyKIccUtuKrWUz6zxqljHFb6cUK9F1goQ,okQemfiYt1bd.er +175;4;MSG175-PK004 pY7rvFa,Rt3R.rr_f2KucNyF3trnJKe3_CSqbd7W_9x +175;5;MSG175-PK005 ,wZytPhyvOd w j:e:G1 z/s:fvQ1rZqD4YuWPO:k,KtIHoZU.WFNI FxZvHiNGyhj +150;4;MSG150-PK004 b. xPMZYtvDf-XoQ_uQg8lyyzR7OqBU6XVAkNl6g78T7JeCXaxMsejl4erOXsBWNf0A-0A2bV9M +150;6;MSG150-PK006 Ljjd4zNsJWKjl oDyYBh.U.rSs_s_pus_i2o/vBA +150;5;MSG150-PK005 v 63nz-Z6sCzT3RU/iq.I/ +150;7; +125;2;MSG125-PK002 n5ATrUs6L5bJWQ5l6C46iU6/4wDaYa/kwcy.v2AVODvQ. _,brri +125;1;MSG125-PK001 IG5/PMGz7Wukc- HTNvf.MpDQnbJ 4p-38Da_TXwWwCxIlTlEKfk7J7nA3HjqPI +3;4;MSG003-PK004 6lOGPoZ-a70gy_U, +3;3;MSG003-PK003 3PGdlDcIfw8_4Jx3 +3;2;MSG003-PK002 _W54M2NhmABHkuEwjua058LeDKK6jDHz2oCtIsjh +20;7;MSG020-PK007 9XN,Kh:fylNwOg/dgMXyT/g3-:w-VfBm6xCOjA,AbfWAoLaEQwXDV +123;8;MSG123-PK008 ccc6C8YvxKpNj/ngsOc,/Py4BEPaxb39tzq6:nG1X W8kM:FYN8_.9z.itIW +123;9;MSG123-PK009 /l32Mbk IhfoCdx9-Czuh24lN29hylq-0kFspJ,RvSx-MC/2yxsvj9hSg4Q6 +123;10;MSG123-PK010 Es1-X17ho1_XnmI7WrrvlH6knTq0YSyzdY45CPKG8QT2_rPHu7 pQOj3/7 +50;3;MSG050-PK003 iQ3Oo4mV8vhQwMwvkonKuI.oLoKakB-UYypKv0Ptapudn5Mftg.MN3. +23;7;MSG023-PK007 j:Uj,NM0cdKPxlr:mUomHQOpxBkDgJNkMMmZfN1lQIgriman9f8UZnHuFkQvxnc8 +23;6;MSG023-PK006 9iD,6XPVzfe5yaTcVR1aO7krm_or8,RpeOFN +23;8;MSG023-PK008 BXy:LSrZ0KIFp1G,aoZyGqxpFqfDFfjYrBJoaAob0nRA5sspVP0W_J4zsAXTyF J3g +23;9;MSG023-PK009 sKJw2b8:i6SMC5zJ9XIu9C4rcE XC-soIV_GmI_NZcinEKGF +66;7;MSG066-PK007 SBpe,z,jxsa4sPeNPwMc_3e2qODE0embEjmIhd.ov5orx__5NjQG +137;1;MSG137-PK001 sfwnvCcb:2ouc.RBhXQYEDUzW:UzfrHj/3O rC3LazdX Phm5QOONbL X3CfT3SrQwY +87;4;MSG087-PK004 ZtEKwUFfpq:lKbanlrSrg .n/,LmMXS11E5f,eHE8y6VkGEVEPSH2vqt/M6Z +87;7;MSG087-PK007 WyF,Q gmPTc:a2zR_K +177;5;MSG177-PK005 lwf9Gomyq_Iu1GrgaTqWrdZr8PEHoAMbL-PHUSduV7i8YdmJWs +52;2;MSG052-PK002 3XZG9YfTqb.Rr3NQPxj UhK/_,:r. s7UMJsva3jUf1v/7D:3JehW9rN13zeFulGFhylyEEc +52;1;MSG052-PK001 kurAC:upOdb7pBraLI-HS169jUIo7WXaLO +21;7;MSG021-PK007 VY5Cq9-0uE_K,j3d1iksfVJYJ7RM/PN8- Xr +21;8;MSG021-PK008 OPEySNyQ_0JH2yrLyUPA7_wpLFARx,VFY9I6/RsGj +100;2;MSG100-PK002 iZz3.Iq2EB3km +187;0;MSG187-PK000 BS8oNap8Dod4BeImM3qqGLbmY8GowrI3JdFHrQk8KCugL81y +30;1;MSG030-PK001 ,N9XMKPVC3PvmD/COa krKQSBnvhaFYqxli8Es7,u2I/F +30;3;MSG030-PK003 eQD -/dCyp:B1kizE_x2e-8./wiTw98zbK3xOi +64;0;MSG064-PK000 36E 6:/vjGppfh6ud.G +31;3;MSG031-PK003 NWfNws41CMXdnlQEaU,AN tHES1k 0/vuOmq6xY5a-Y1X +148;2;MSG148-PK002 asbNoPR:Fgom0L3Cpxit/FCkagYsOorIbwi_fhdiFqVyjntgG7v7bbEn.TjyvUd +148;1;MSG148-PK001 /DC DxdxTAQD1OKaw7/0Q1f,Jj1/_kjDK0_JlRVz:Dm RhbQ0kH/cjBJzLE:9kDGMEoRB0,TDT +148;3;MSG148-PK003 D3eNnneF4Gf2ggLPprX2I9IMC9XoetUJKVu/4nI__jAMmV m +16;0;MSG016-PK000 CX7lS77/7nkxnY3zZQiOR +16;2;MSG016-PK002 UcMN.p,600TT2_Qow62Vwu3WK3Kmlnlc0n,m4.eL1BC6Woz8pS70YaVC.KI +191;4;MSG191-PK004 0kUb0sUPZR:_v.dbJP..wj,Ys2vGbiU89buILaJ,r17qF6GmhXw51bI1agyRG27 UkAohRh +191;3;MSG191-PK003 eCMMSmlSEl/6OXcvTM +21;9; +49;12;MSG049-PK012 aT3 f2aO7jjw +49;11;MSG049-PK011 moLBO.yfNa99UpCf2jbtrnZ6KRz6oK5EtfKFkq4KFlw020SYfwCzZl0TR-c1sG6PQR +49;13;MSG049-PK013 I:KOk1Q8h4Lysn:DesIwYH0:QQodseMiiPN.eOmgCyKYUFC1zEaO9VMy7ga +49;14;MSG049-PK014 hoxRvCB8l5VW:n6W4VeTm,EEdihSUkWyFj BWK,d_GMfXSLTtQzV7c,WVaHYxb8/P2sx +30;4;MSG030-PK004 -nT29yLJW,l94WuYiNCAYrGW +96;3;MSG096-PK003 LhZ2VmJ-sXw6sR0FFehstJjl88pVTy2 Eo9LuinRqnu3E1a,f8yVUmDl +96;2;MSG096-PK002 Kl4jggDR,fQ/DCNJF K Vh2AZRAx.ZAWDGkiU +37;0;MSG037-PK000 R35SZAUU.Lsx5l6tXZrUZUdHW +37;1;MSG037-PK001 Hf-4naa00hIm r/sa80vy.opSurDssxwtKb +37;2;MSG037-PK002 I5oDVnoFSdOyO4sv +37;4;MSG037-PK004 bOQPS,VNcJxa13gMTt_2bWigXQ16ED5IV4fkZOs41lC1iMhrTCc-Jy9ZuYLIM6, +37;3;MSG037-PK003 cjdMnKQFMjQq-mHK806Kqewk-CcX +3;5;MSG003-PK005 0lCo7pt,L-I19 +3;6; +11;1;MSG011-PK001 4ycWTrGf 4L yxSP7Jui:t5LHU6a.WxcUEPi/Xy:,tKP0Pom_ifqwezn +11;0;MSG011-PK000 7eQkshIYj8xyGWbpFX4Fez6m_A8XNPuf_pG9MzUgBoE3PbvJpYFbf8tVlFu +11;2;MSG011-PK002 k7hU1VhI:fjMjB_mmD/Xyy:Fw1nT62nvxZ.Ru +72;0;MSG072-PK000 __iWN:r7vzce6cNXJGRaEcaWaHTpg-k-9DBgdw,WEr +184;10;MSG184-PK010 AbRPXjdy860wK0ZmRfUtGLS3s-C9F_aWGOmrtTNI9hXENZy_oqadV_wl9AjJAZP +106;0;MSG106-PK000 :1yUIFbjtqXMpPFPGzp.8bSfusi0rVCwxJb_Lc,Lz:FHk0rFsPr-,JNdrozArt92cAxpn0P.eXH +106;2;MSG106-PK002 9gmn:A1hYC,bPRNT0RnQIlJwC/1jNO +106;3;MSG106-PK003 pdSeMNvn1NO.e:neYCQTm sZy +106;4;MSG106-PK004 T,rtgVfpkXccr2_M386,3pwgq7ZF45RSU4MDnyXW4llZ +76;3;MSG076-PK003 a.-xveqTwoaJszSH kBgu qbvOlcbvv9rU7-:FQGBv3eDwvMga78ebD9/n nSgWPsLWb.-VugPoT +76;4;MSG076-PK004 oVhEZL. F8qScnsO2.J_AIDr42 jQNxRP kM4,gf7lkgDUyCZCSto8wzIbRlVP/31FoI +98;2;MSG098-PK002 d8bNkP,uGl0R.GSAX-jeSzNbUCL,KxBfig8DITZTjCd8vX6MPFCWqOk4dx9mOxr5E9u +94;0;MSG094-PK000 HiD1Oj7X,D9t vSdYySCpupUjfdnw:xI_3mB +123;11;MSG123-PK011 2ojS1KhO/,BNwuxTy/Yo:p4FpGDgewgZ-jB2pqG_6mF,B tGferMEtGaReIlmF/gjkD8 +22;0;MSG022-PK000 xpUgfiJn/Iqm2AfhboRJK3EDCITEt +161;1;MSG161-PK001 q5.d9u-megXxaFu9Bg3EGJF2tf +22;1;MSG022-PK001 0CE6vwCJnaEN3X5BDmk044tXWcIA 3:RPc,.X4AVsjW +5;2;MSG005-PK002 oe1cEAime5gFfZ4DBhr.LDOPEMs_C0MJhw2, +5;1;MSG005-PK001 t6V18/BFk:5:Ujoh.z/tvP_4oA l-5h6q-16h7NcYGaBjf2Sihi8eK0xr1VW5WWkrSpw/Y:qC +5;3;MSG005-PK003 CMs7h01:rXFGAQk5Vl/ygIWfjyB9AQMbByp9FAYEPK +5;4;MSG005-PK004 VO0fCscH1LtzQDWF,RG 6vTvr xh:ejga0rDi +194;2;MSG194-PK002 ofMRhY9GQq6JvJU9wx8S_vasLocgZFPuL +194;3;MSG194-PK003 Vp,2Mm7bxlWRQH5zJTOvQzBYyGm-L8a00ANI/Sk3B/cId5e5E1UuIsNmnFoZiTxFXvRc083 +194;4;MSG194-PK004 ,:ebtc3arclP/:tbD,NHghwlSnv,sVsSEL1,AEKPRdO.vvNl,3JIsMGQSobyO/ +133;3;MSG133-PK003 x3-B7hd6yIQy/oboF2l +191;2;MSG191-PK002 BY5RXQgYaj3vj6B1xA4AUiarW2e/yZ0q.J04e.hv3,1trW +200;1;MSG200-PK001 T,R2R7d2HrvxeiwwBF,F31WeM_JgX.gI-gTjb12CFgejEyEm/fPqSX/lEpVd +200;0;MSG200-PK000 v74Qbj:inVqpGJVplHcM_FS Cx8P4pXsJX/mRRV:qxvUecQUr827 +200;3;MSG200-PK003 6:gNL7VetyBhd_Q9XgF +200;2;MSG200-PK002 0XOZHzB 1g4I8DHGfK76wT +20;6;MSG020-PK006 _vm,ytR6X5oiRFUsE yZfTh9m_lP:/_YzKP +20;8;MSG020-PK008 WJy GbYf5qCjoou ix/PvGYK/KKHnpYzl,zq_e89noDeXxkiE3V4s4f.yAOfbtRG +105;1;MSG105-PK001 85t-dr,6jMadKWGg:,m8E3o-:R5RtI +105;0;MSG105-PK000 OPP3ny2gN8PoaLxIrPHYV_AzFR9 +57;5;MSG057-PK005 DotSC1nq4Z.5YwuT,N JUeh.5p7DClR,m2eJwWkHG5l1QeHHnVx3HKS.s1KVGloC7fG. +164;0;MSG164-PK000 y90uE8FkjoPcrF_k-NLW5UEAGeLJhmpvPf ZlI51dKxLWi +164;4;MSG164-PK004 1h1nILL-rsbt86UGIneER:Utq +164;3;MSG164-PK003 IoDDoYjKTz/4H oOQ.xTJgx3Ks6l.2HoKUF yC3:WgueGaqSiEIS7WJ--7nnHom +164;5;MSG164-PK005 ,lXDjfCcmfBy aCQnVU RDZHtiA ioOX5kUeHe5017n9:C4NYNF.aB +164;2;MSG164-PK002 WTHiPj.jssvrhR,Vhvu5j Q1bAy55Fw.0N4_Ww4jw.HcP +29;1;MSG029-PK001 FFHJ5KCI0Hc:vsCgQ.1q9B/_ImFunb5qhwo9f9PM_SyK0VR8qqeFbfMJ3MWisC +29;2;MSG029-PK002 yQR8a3kBiHUMyHPYXCkjCVgALxy0ureFyN6LxH0AncMD51.YdeOsJWgtl 4Ki7 +46;1;MSG046-PK001 8KIRYO4r28YUJl-u.n5 +193;3;MSG193-PK003 AeaX90-0pht8JMcXTdBFz SiKQzlF9kNK +193;5;MSG193-PK005 Svj_s7wmh,qAmPL3aEhbxwg Hfec,JzbENLFF3yuELP-np8elBt_nQ5oWoh +193;4;MSG193-PK004 Y0cFi,RrDKu896 +38;2;MSG038-PK002 hb4ksjgsJsyL +200;4;MSG200-PK004 5EwgT.pO6f-Tfz j3CxHGrGNysNA aIxWEC4/mzHReos,qaF9fm2G-Fdkct8Lm6tUkCeZQ5ThI1 +200;5;MSG200-PK005 tmU6wIV8FdyQl8NNGfmYRHcvEirhefVuWYG70w fQaMSQ1uhEa_xKdJ,sP +200;7;MSG200-PK007 8S7YuxMOVEQ3KljADsWHvY/3bHrD_oJF +200;6;MSG200-PK006 7G7Gb6IeTjH8/rRpjE.Y H6n2UD/a.QgJiQU4B0,j_gl/ +200;8;MSG200-PK008 KjaUPNe72 JTdu7grKSYstRt1FM lPQjzIPl-a 1k, 1.ehcrRtqs30H -1NtM2P1KR1gaiOTnVO1 +200;9;MSG200-PK009 CHk0/Pzs.f-wmGp3_.U//C53B06uEOBm tjE +194;5;MSG194-PK005 Xpo7qri,WFooDgior3gyxweYz/6B rg +200;11;MSG200-PK011 ai07vus9y7A3 LD0XPnxq +200;10;MSG200-PK010 G:G3hxz.tGOurD03bgQTQVz9N.3DaO +162;5;MSG162-PK005 6-xzmt/OXrEmkWV3Vhqq0 Zi5jXHZL/ mlwPZ5EWq6 MyS63RC0tk-CRsHjWnXlxY1_l_q +162;4;MSG162-PK004 Q3DE-4DBxCSZmg6ne,t0GVWxvmrrkhYLA7Wr4gG0I_ _r6- +162;7; +76;6;MSG076-PK006 ea1PZl/ByykY8vXXKcEg +76;5;MSG076-PK005 GosXPQp8ADYX2NpJClB5Hcalhona0FvxJIEuXSHOk-.p .QPi5oSKEZ +76;7;MSG076-PK007 hn4WVmcPudWQB,LITT/zyk:U3X +173;8;MSG173-PK008 UhD.Txf4-iq1JDzU9hPmkP7vFpE8xc6fVjed2MjVbCBufxz8 +173;10;MSG173-PK010 Kq2KJ_,2WJ90BYr1MkNiwH35WRFS/A:btVJ +173;12;MSG173-PK012 mBnqb:jy/dQJXRJsx2S +173;11;MSG173-PK011 ZsX9IUUzXFp.sHrS:gUQs2jlGzC8vOVveZcX8 +99;5;MSG099-PK005 PP8_c/CSrWw5F/x4Yc36eYsUak8vZmm/hP3hWExFry +99;6;MSG099-PK006 cs7vwoYEi LmCq5FCJcQ/YFOL3xFrX2rG +99;7;MSG099-PK007 ws:dbxC8h0czjKi6FFXouD +99;8;MSG099-PK008 4tScW6jCsrC5ccEnENYNLDbkQDCQCyr2Ufbpw:j.N/CXMQhFghX7izK +99;9;MSG099-PK009 0 xBMe34,t9Rz1X h4AMqn/c-AnY. +112;2;MSG112-PK002 o,Nq0aztbaBcuoQNrTNt.FnosoeQ,b +112;3;MSG112-PK003 vp5nvFxgPQNayJDW-1nJhBdY0VYzcdeF-9 +88;1;MSG088-PK001 QNSdq,TY_Vm,J.M14 +88;0;MSG088-PK000 GVh._AaZrH_p4gJ1 tMr5ki2B5_deI5sav:/vB4 a48eiOvMwIKFlfqBsmcBZ8HeexRHs,d- +118;9;MSG118-PK009 8LNDC/7tyGnGsBnk1.1xomE U2K.5weW,7vzKt-k-wYUKchjdC:bmwmrGL +118;10; +105;2;MSG105-PK002 GOrkkroUN2FyFn8/Gs41fm77dWgQDz7hpEWD_0RiHB0G3xWhSNRxj +4;0;MSG004-PK000 5/9SQW6PyEXD0fO8WXt,eq.Qm4m:6bs +176;0;MSG176-PK000 BD3GkeA6aFaSbkfYjmw/QmW6_m3-0K7rfj6q +20;10;MSG020-PK010 CsKwXGuVc3Msf60DZqTAZ11654X7URPZr:AFByyU70VNBYs8n5M0gzBRuX +165;1;MSG165-PK001 Q6, PmuLl9HBBwmeMovvJUbYGIx +165;0;MSG165-PK000 Nw0:R7BCIpDpCoKdUJT3muPHg +180;12;MSG180-PK012 NXWOraxYl8v8z7mtEpzeKFjjqup.OM2/F4TpPD847 +24;1;MSG024-PK001 2cfyh_AUXYldXt6jPBmwBGRTg3-x +55;2;MSG055-PK002 AcvU4w_LY7BYAjYzFcLXfn8uYt-bEAZNg- +55;5;MSG055-PK005 ShwJtB:ySIGb6jib7v_VdvFdSd234mGRDCzp,kG6OTGivvLwuax.jTxg-Tro4Yapu13 +196;5;MSG196-PK005 9d9VRhocVMnkbKhAGXfO9xJbanrQIC.XUUa Se85Gzw2K6ID6PAbdVPZ7r9G +196;8;MSG196-PK008 H.CFke3Xp:QLzp/kif0UY-XtjUCVOrOUxa3y2kDF1kHDkA6tULjWbLtaKpe6MvTZPKo +46;0;MSG046-PK000 Eh6UMwM B_RxE,9L,6ah8psRFwQmulduvZ9h0Z0cs3UABU6i0NZ:rnaby8bc5fF _h:-13Cve,e- +46;2;MSG046-PK002 wYChBqXGSvV4CEbe7HfWDQl3-RstI7Z9VpqRz9dhTAZ0Ayr,3DBHqt/TZu_D7rC,wxR +148;5;MSG148-PK005 fb7uxGrgWz1 5CwCxQppv1 +148;4;MSG148-PK004 Tjwn/hIE3u p53zGBo9VsCezVt1bxJ.3W0ES,zN1sDxlY:vKm4QFBrJeCGsFUdADy2P0J +148;6;MSG148-PK006 Pi8MRf8Mk2Kw5DdRSAoKq0hsnmwU7-Taej15c4ARZsCmv8,IgoY.9s5N/TWkCXXu +148;7;MSG148-PK007 tm,.RbmrZbsOBuILcSpG,d +123;12; +32;4;MSG032-PK004 CeYPHhuSPnCC +166;0;MSG166-PK000 nd4WDlFWhqn2o2m:P7XtM,t8Qke_lQL_RgdAjgu45FoXKc,PVWBMccczKcI +166;2;MSG166-PK002 fKFarATMOiN_inK6rqp2aefghB7,Fc4ikIixUE/A,J2U3qF,PU:rveJyNEWHCctLFfBcVs4CH5m +155;3; +142;4;MSG142-PK004 CUK-a9jEpYGh9XdjOf +142;8; +56;0;MSG056-PK000 :327g22 G89rgmkhLaD-GF7wYck +88;2;MSG088-PK002 7l LrXUMg03ktISdki3emuIonm0g6YwmcZu0xlWI8xcugWy +88;4;MSG088-PK004 UuHpICJU2N0YB9k.flrfXAET,T9I7OZ6T1JW2,WY4GlCM-nYJbBvMsuo2GTzrKKrpNZmbcK-yOfg +192;4;MSG192-PK004 pUv/ruaMlO_l6R0hm:K423FnvVdYtHA/swYxRAv20UJhI-IGKyOBMRMc4 +192;3;MSG192-PK003 DIwP0eiSqW6/iFEw9Elhdp.,GhnHY:-BSC0G-,XEudOr0.Qx27 +192;5;MSG192-PK005 -,/e,O-/iU 83hQreaK +192;6;MSG192-PK006 /yoFo.In6zB4cZ1pkRNaqD +174;0;MSG174-PK000 Tu7Lh dcBWv VLzLUF6u5 U/FE4vYlIY8mLWF5 +174;1;MSG174-PK001 Gt6,7kn7y,jxC/En-a_hIZmgQhSA +174;3;MSG174-PK003 3Ra/PONlkHPq,DjxLy +174;2;MSG174-PK002 uiZgk-hvmn/pCPK.sA0BgmZGsS-CNv,8PWz9RLf3_qJ1FGVNO0OkM3-s-YQ:SFzIMmxR,6 +174;4;MSG174-PK004 1wXDCirZR6_RsRzouNamlp,p +174;5;MSG174-PK005 -ZNqvFory05S04znXB6nHgow4.JneNZ7QU1AlBSiiDrDWGvg6tKfZH6ZH89Dpp5lvRk_on-53nXr +110;9; +110;8;MSG110-PK008 14oHC0J/DWk7Ob.-9bhtVn:voYfvPFEHLioavwejCrj0drt:y6a +32;7;MSG032-PK007 q2J8Ot-ZGXnsd2p5Ddau/IOrIhyvniTDQTbOmIArmnMEg_4 7rH7qVGqtl.EGPo +135;1;MSG135-PK001 KFsXjY9WHR0/9NYV4X +135;0;MSG135-PK000 jX-XtotMDg_oT7ytIyokPHxYKT,q-4vZc n_,c4RrPizqc7oE4BJO_ +114;13;MSG114-PK013 lQf99qu-mgo.4b_QgfgC:mmCqeDZcYdyD,JZjvZa5q.h8FKL2WaoguBkE +114;12;MSG114-PK012 tOCk8dq,7 wm6- t6-tXRbgAkvAVK-D31uODW oAsBQza +114;16;MSG114-PK016 JbJs/CqGvdfQIke-Lq708YLr0FDApzuT1xkw7JkNbQVm3q7 +97;4;MSG097-PK004 9v1qUxAqfZ1s5rRe birebKf8U_-uqs9qN-PCi,-Q.8.9AIgSDY9Z46by9y4Z8sfz04pGZVel +104;4;MSG104-PK004 1moC3St8KbvyDTu +104;5; +136;6;MSG136-PK006 HFFRdy4:-ZCaHd7Ln...:YZEm:AY8L0zFgFLIX7fq Wb18eHgz/ALyb3dFOTWIjX5xgb3psvn +90;4;MSG090-PK004 wsQcUNW7__K.bVQH9Kxadq/tCMC5mLwKy.-h +116;0;MSG116-PK000 uaYIdik5bY3DOL-nculpHdlOO/nZ y_BD6aL_yO0Ex88gBZiCt..,R +5;5;MSG005-PK005 c:J/Kc.3wnm:t +5;6;MSG005-PK006 kelZWW8hbvk,3Qm:fDB8IfjJewOcAsYjMuEXQXrk.Sgm3DjRYP +58;0;MSG058-PK000 ,CYLx A6S6tC_m2jqtkEPnnjEAgnd8QyVfwHZJ:KnvBrqxDve9F:P8hMAnF9b:T4_A9vpCo2xr +157;5;MSG157-PK005 7OpE3T.Km2AO09VZjSkfbiesrG4Ed9J/B96 +102;0;MSG102-PK000 vDUHbri0f2iDRXAXssIK3x2QU0pU 5qDRSk9q7JL6x7fTHJ +113;3;MSG113-PK003 Xou,ySTsLyM:ts:a-Q5WvBXvEk0nFRasN/ROwRY-5g: +36;5;MSG036-PK005 yIwgTF368FJUw8DTZlQwXZVQiI XuVF-h11MnI8VCFZVuK4IY3ODRA0qRFtLzX,tMn +127;2;MSG127-PK002 yuOQ,S9N Y4fNxwfuMJQ_gvC eqIdsHo-9/9.Pt +127;1;MSG127-PK001 -/7MUESk_52B_R/K +127;3;MSG127-PK003 ajn/ItUx2JcOj Q_rim8UTsn +127;4;MSG127-PK004 4qdAvtR/V5t/u-O ns +127;5;MSG127-PK005 dLqnXwj68X54 k9QEedWp6,/JNGVl9eChzX- CFjnQGAfoDiFJ9Kxq, +127;6;MSG127-PK006 _b5NI:.how62D5.YwuOdMrIiNTxkGyahId0y_1.N4PRl-YRWoGc +72;2;MSG072-PK002 d6u7GbOlHFoXLlilz3U +127;9;MSG127-PK009 ,1AP3_SjIrB9gJ.RVmynC:GC0WjjyU-J +159;1;MSG159-PK001 Jm4HQUBAGU.lKDB7JiV5t:nws0H6_4N:4WysHsJ ME/t72yiaouCKBUNxGSStZM1H1FC,ozni1m +159;2;MSG159-PK002 _VOTHh7IyL/26izYFG +159;3;MSG159-PK003 .Ell4JndNzzq0d.0wt1,:9b +159;4;MSG159-PK004 UgaA.vlU:2vQnhpDvmTP8zq8f8g5mJQ:rwAB8 +135;2;MSG135-PK002 _Axt7BUK,kNTRENeogY1H4b6y8c4IzI.4Sfcw-g0PReKwiX-Pk3zS ,ta_7n.F0k3M +113;2;MSG113-PK002 gdB4XYfex_OPhAJ4ka1_,yj7F35tFkhpdLT7TnFdnvb,CcjWzK.okcR +135;4;MSG135-PK004 rz2fEn2Ue-5VSj +128;0;MSG128-PK000 9Th5D-:1SSoAPMYZSsr_6RCFZ2higuRY:v424lK3_/Yzq77RIcQVTfyHJaAY +128;2;MSG128-PK002 5sMK5GWuwZXKe,XFX +128;1;MSG128-PK001 slmO/QCAuV4XScSqOYBh:ageeEo +56;3;MSG056-PK003 WTL,7k9trcfpcdmGw.01hYxOkP PRnGfY4mb-baHT-9xIuw9LY2SqM_zfSo6p7tQixBGAEPD37V5 +56;4;MSG056-PK004 bM4lGa89jx-d0ke9HYY0 +56;5;MSG056-PK005 FgBtSzXVsUP/5W AOb8lh,w_CM7XI1jxWlHAZEnYw4QYMGCeOiRYZBchYzXspgTjXHh5-7hM.nlA +56;6;MSG056-PK006 hQUM_e8lxXmPLx9bgqFBnBqY-y8H1cuiF3/KjU,9kri:IwViT0k83URutCVUqP d3yatswCE +56;7;MSG056-PK007 :N,I0JUPe6t_FnbpTg:g9OZNSdRobO:bna1 HG,3kB5/2WyXLXQFCDM44J0Dz9s +56;8;MSG056-PK008 FKOgPvoLbOaG8q1d92ujIT 5E0Wc/Ool4M DX3UA4::S:5M.SU5oFo/GHHXi3FOxR9G999JE4uk +56;9;MSG056-PK009 V,/CqxfdhPbOKSo4DWPUKePiCJMxL0q8nryDFh0REzVyV8OcYu.xpZ +56;10; +146;0;MSG146-PK000 lsjTUfeo8urP20Ij +146;2;MSG146-PK002 :6Qq5yQ0wAwXoebx8ezpNMuSoholfbaUA4g-Wp9qw_Brq:F L1jwvd7g5Aj i9P7Yx-B4 +146;1;MSG146-PK001 IEMU9T_vEtM8ilI3q58sag6MzOVykbY3YlwnWJpCxdYAO6tjsQl2bDdUvmRrV +184;9;MSG184-PK009 Ejf0:sub5S-L +41;0;MSG041-PK000 hz/iHXyHqwNunV7Eg +41;3;MSG041-PK003 DrT,qq6gzusdf7IR,qGy7psSlLQxfQ-cs_ZcWfKdwxHb1TM9H5ZRfcGk +164;7; +91;2;MSG091-PK002 9dbXf37NHDPCJU,j0oU +91;3;MSG091-PK003 ycDZ,u2.K4Dfl0fzRdAIqfZs.R:bJrLQmj3 +168;0;MSG168-PK000 otFoRWniCCJ/NZC5hfIH0Im/b:jUXNEvmnxnAChogX 4GW. +159;8;MSG159-PK008 Ym8KZ28l1bAQ21ZkRLYqv_/RpNmvt7UWV4mkT/6gkAzShZ8 +159;5;MSG159-PK005 P8hB7upIb_rTK1bXKoEC5QQu +181;8;MSG181-PK008 _V:/vl5pE9 LGAhaTretqs3TRonWWtk:,Ftkyq28pUETUroy2uP +5;8;MSG005-PK008 F_vWvrIMI,siv3J1M9jUGF +5;7;MSG005-PK007 kItWtXOUnlaN4UInqlx35 +5;10; +18;1;MSG018-PK001 18QRmxTNu7xc463Z8FGVR9ZMfD.n12IZ +18;0;MSG018-PK000 IzwLH4Hl TUS_5veXt/A3SKAR.Il-AHB7Heo +18;3;MSG018-PK003 S dCwEVUR.aYjDr,yfBM3 +18;2;MSG018-PK002 S6Yv6aszwMNkxEA3lFtVa9uSm8YB8W +18;5;MSG018-PK005 Kfp 6UgVG2RLdIwLT1c5PMeoTe/YFwk/mqs,3JS6F:6fjPVesmW-kRM2ZcxGk3oyHM-FgV8 +160;2;MSG160-PK002 mxVXVsO2Bk,0oY +153;5;MSG153-PK005 :33hRWwT_BKUZ10B9wKDgP.ey503Vd9-D +153;6;MSG153-PK006 QKTLEjB Jxhqq-ke-NE/FwlyskFlic7Ux +153;7;MSG153-PK007 l u1e-umAOkvuDpb6.K03RWn4l/uBv, +153;9;MSG153-PK009 p4AeajjCM3bgD0lURJs2hu3 YiRliFFlgIDG6JX +28;3;MSG028-PK003 9Dkxq4Xd6R:/81TEANzolWQNyd-QxDpsfupiTdS WIK6K9agar17YNN3,ZM55Nl1zXS2eGQec0 +62;7;MSG062-PK007 F5eSIvo5yABZndu2T3nrhWKXJ09WH7TWvQgHThjNFtT7bv-3pbs_SQnGE:tPQ +62;6;MSG062-PK006 0led_uHPh_oH3M4ftz1a4Lo h2bvwUvQPzkyGl +183;5;MSG183-PK005 tAqR5A13:8SRTX8peu5 +129;17;MSG129-PK017 _0vx0PkKb13GrP +8;0;MSG008-PK000 N7HpluMfBPslFTY-gMHwdZ5Fm7nrpbhCqzZVkHjciz4qlQpf7gv3Y,dW2wTBxJJ5teFL, +184;11;MSG184-PK011 _d6B9RG62dC/CdGQY3SyFllktu/VDrfnqlFlTBWPn/aJVirlbpIl26d. +183;6;MSG183-PK006 V54JZC.mnBdtPPG5IWQeBuM/o/wcA6FOHceOGySu sZUeDw +183;7;MSG183-PK007 tryQIrsnb-e/sC:4hwKm3tlzcWBkMxfUKoeVs +183;8;MSG183-PK008 2bb.HUYsikDN1ovlUHxb:LLMbIjzmUWfnBk:w +183;10;MSG183-PK010 yHePJncx_yrXErc +183;9;MSG183-PK009 wiWc. Y.aCuNSvX_:siUMxD47zv3IlDUWVygJBOr6CnU0lhKPqFZVY96_lH9KI9yC1YCR7qbMIHaK +59;4;MSG059-PK004 Q45L0Xro -O2RqORMtHQ2Z6wwh +178;3;MSG178-PK003 UiR0Ff:P47iBUeQPvb9ezccSJBfEgQsytXzT +126;0;MSG126-PK000 T2e4vzHM:gG:9BIbO6i7:R6RAHZzKziVwbxU-gqrQl1v/kY6x4WZJjagjr.DHIvh Dic- +11;3;MSG011-PK003 55YaeKc_rMaMCBOcJ-tme6TtrHUFDGMlZBjP9w mMeWkhQS31pDbWgN:fO +146;3;MSG146-PK003 7sJdi:iUmbR1/_WoQVVyOjEPuh6Y1 __0-Gr,QLXYqzM +146;5;MSG146-PK005 /5/W4u/aV5:o +146;4;MSG146-PK004 :phjAMzMs11NBmt +171;2;MSG171-PK002 L- AVOVuqDx4NqUzvKswF +39;0;MSG039-PK000 hmNutamE/vUEwezjX_p0C1bE/l9FWb7-N 29xffcTqkGmg8b6o3EIUd/PnxB +39;1;MSG039-PK001 sYSRXox62,kE45o..1s2ETZnrZW4CdVU,A6mz:9KfvrBKWiMMYWw,2ABaLoj61mMwnVxL-Do +39;2;MSG039-PK002 -9cBWDadJC DZDkSxsov9hXQCJifHgWsmk5vq-uJ9p_ycl/o5Zg9Q5:_G9K5h +39;4;MSG039-PK004 Ab,j2,SyvoXCy1pEj8:QIefNhF +39;3;MSG039-PK003 /nb3j,BO0Fm0zmv7UT5w1n1N +39;6;MSG039-PK006 f2NU/7rJewn69yQl1Z-iiAB8y25d9rp9CLbxNqvvIm:Dh0FxE3ONbmm +39;5;MSG039-PK005 9JBtsPRn4IixPiG,1wnxyZepYDHTHmA +19;1;MSG019-PK001 Q.9-KMH/FRJ.N4ox aO-8,uwi3Mm4R/xyn +19;2;MSG019-PK002 yYvuuP_81IDH8MVsNQTO5N2Y1aZh0Tr6 +20;9;MSG020-PK009 Q4d4iF:KusOhoi0_/cvPVesnDaWahXpCejc8 +12;6;MSG012-PK006 A_cL1q8S14cLyicD_Q0RP :46MqNvHD +166;3;MSG166-PK003 dJILIez6khC,R6kvti8AUyHU:kiX1 +129;19; +187;1;MSG187-PK001 11Z qNaYyF,WJUZNjqkuF-5b-6byLL:A8ipXQKkyq4EgBEZjmM8LRRQG +187;2;MSG187-PK002 Zh8zKHEptklQW_2.DOdkTl3b2z1b468CKvv +187;3; +83;8;MSG083-PK008 ./Zp_wV1i12HfvaqdsvwMLX3k0Pl8U3Y0xZT,gMB:zzwz_HdpxYj6ZGU54Lv4AOHh6dPM7tgr +83;9;MSG083-PK009 f Dofdk588ZXfgwubdF3NqB-vrFROxsdNmvHRZxnscvUHdGnkyZQHSuQOm4XO1C1 +68;4;MSG068-PK004 EPb.AEv8mdMOAPlBO2zLCi4jiWDzSH5kTHBF.vPMn 0sseYrGRfw-MS6p1 +68;5;MSG068-PK005 mzB_3oC17LXk3m2bOIEC5c9EW8kq,H9a1VEjwn6:MaX5r25sgIl3vzi +68;6;MSG068-PK006 Fp5QPaHYn3oLDIgD7qW9RKS41hLlHqThTYz0hB-QPu._xyoAt2 -BNzT +68;7;MSG068-PK007 ID 0z1Zw.,mj7o3VBRQSyIVg2_R.qH/0Eh7t_QPJp5AMCkNpHujTGN +68;9;MSG068-PK009 OWKKrWDzAFN1RifALzgrLlAfp2gZGHfzUFLp 9yAKDf6otm/u +66;9;MSG066-PK009 PorWZh12olcIaEdx9Y9B0c:1DABSfYY +66;11;MSG066-PK011 cfJy,RznQ5TqwPg/FYezhB2,L24UY8VAPjOFH,Kzr,a_nvh6fdA,laoaFsa +176;1;MSG176-PK001 _yn.HLOWKsU.xqWN7ja5kMwo7p-n +137;0;MSG137-PK000 8W0LFPYTmDM7PNDIX568D6iUx,zChg2r94s6liFPZJ iv3 C1Qh8 +137;2;MSG137-PK002 jFaCc0anOX4 yl/JssI,/zhXscRVLz_juTxIBebxNmvZeAQNxPTO-ejyqXIM +20;11;MSG020-PK011 O7Fq O:emikcbgQlOTztBNiUO58RwLMmutu1p/0u8JFos4mfrW8W9vcU4x5c SRk +20;13;MSG020-PK013 gkXP:y8z,x8Kh4x.akwzHsypjyxPDuYL0.KB2G +128;3;MSG128-PK003 ,.gUNa4ov_ bnk 2 +167;3;MSG167-PK003 ts7iVS Y1zQKaCZxLe/2uDcx6lJFnee-rtJTdwRlx_8B:ILRkIFn +167;2;MSG167-PK002 A Dsan3cnGcMCgHGS5WrAqAuXdi4Eoh:gKVhqVIv8L3 +167;4;MSG167-PK004 -QKUwZx7jRt0ol_Sdxo7,hCgSIGSK +167;5;MSG167-PK005 gFKcMapiBN YurGSW -mdOKdK4.Nyw.yq. +159;7;MSG159-PK007 vyfj 2Uepw:g66ultksq83JtRk +159;9;MSG159-PK009 Mq7 Cg9iO8Iq1XzHMSzXk +100;3;MSG100-PK003 M7WxE-euY hL0i279l0Jj_pH1g +100;4;MSG100-PK004 jBM tf3 F/2X +100;7;MSG100-PK007 SdEPUVnhg1ZdT299xny3cf +100;6;MSG100-PK006 gktGW7TO9XAF8pjzOp7d6o1Og:o7gA4YiBPuKtn2JQEHORMu7rJI4Sz5relK_svz9xUW/0P +100;8;MSG100-PK008 b,:5vimXzao3Ql1fdI9xnPzQ8e +106;5;MSG106-PK005 RF6q9TmBjP_Wsc8jA:G87RMg4HSFBJknxB0M0xPgWZ6taYI6NaRVcC8Obp0aPU fJ9-5iqD +147;8; +147;7;MSG147-PK007 f8i,EcxkTZdnAG8ZR-JS6ZuifOud3/pb11ny4FKCP9jlcqDN46gJ8rguy_mBB5ro YFvtmg:l +24;3;MSG024-PK003 c8tYp61d4wBND_CPUF_rcKaS0ps3RdsZTs3IlWWS0jBb92msy:ORpGyIZtEN-Ifd +24;2;MSG024-PK002 a:5yRME9:r0fBDVpgnV5cg.ViLKxc5GvZ1WL6l_Ls/UXFsQnLc +49;16;MSG049-PK016 .qmnQ2ZN3d 5zOUXovteTpAVZE6K:wTfg,Tn27I:18yUpqo ,H-5K,5EVQNB/ +49;15;MSG049-PK015 C3aiJai7ggzr,Zv +49;17;MSG049-PK017 2ptW ol1yAVEeBjF9BfPY:q-9VDEQQw2vgrJ G9.poxu +49;18; +10;0;MSG010-PK000 GH/2UJYA09wV9GNSYrpD5umB-ZRguXals83liHCVkeXZ_Khw,4bz_Kye-_DveUEaul +10;2;MSG010-PK002 DzFTtnpk,af9VO,J x-JYCqg:29e.SYw6p_6Ob +160;1;MSG160-PK001 P5KszY4U.cTOveGm6,O71bojb.Ut +196;7;MSG196-PK007 f84H1EG7jYW2rRb -Zus-Aa91z7Ujxk9ZjYT_/UGqeioY0f +196;6;MSG196-PK006 x7P7GAncgbv/:CQLdv4Qy7Zk +36;4;MSG036-PK004 wgVWrdmfjoAG/NACmyDwUx_WoBuFGQ0KQqB +57;8;MSG057-PK008 pC.:UyjoTJE9mU FHlO +57;7;MSG057-PK007 .-pLX/56LtLIyjz1 S,uZ0.HaQDZ24.AxeyjYpAn95bRFMfA/CyznO +57;10;MSG057-PK010 K,K-P5_/:viDv7D/pQwtAwr6wPGeoLFL V +57;9;MSG057-PK009 es0wsN,qsRns2mFRf1qih:LejP9,cYr:ie9Tx2:Y1Vg/B1lYuoLf4C8zg:6kJz +57;11;MSG057-PK011 I2BZ0_E9SUUcJRF,Ueb,7egyo4smjDU.aK +152;7;MSG152-PK007 J xjLnx dvsS7rWQQdv5Y5o0.P_hK_o8s-YIVSk-_iKAizEutlj8jh5yhOR +152;9; +88;3;MSG088-PK003 :XKsYp wJ6r Ai: e3gNIXscA4KKT8jj39zKsjGslmJd7jD3WNqb,hy_CLw7oCHsM h +181;7;MSG181-PK007 Xk,9uWse8KjxFaLtJ65iKp +181;10;MSG181-PK010 :9J6hFAVcbv,-YqH5yIYC-o/y5ABZz0AmUKGjDdWZWYUuJ1Tmftavs +181;9;MSG181-PK009 zgSC pxBMlISSMhPlwwEobl4Tezl1eJ.:2M6ZO7rQs8wiaj_/Wk3xYIuUc9wVgH:O8m8i46a9L:l +36;6;MSG036-PK006 .2Fd0mY/sL8Ej1mTC.kmY-z7ldFc,A8qWh8vamJ/29crXJApqpKYzM +36;7;MSG036-PK007 6rMbBYH.kox0XL6l05d0CBQCo +36;9;MSG036-PK009 .QMHthAOzj2h9m mAWhkP9ml,oArmNcrM7au_lLlpq/6M +36;8;MSG036-PK008 CDIIB819AJ/mKfHlhj3,BejGlnZbKkdgNuet +43;4;MSG043-PK004 _dP,9kQOShXv9:9 +43;6;MSG043-PK006 ULuAAdbfUYFe-svGr-7Cvof8_:zkv4D2 +98;1;MSG098-PK001 42Bz6 E-cG5foFbz63bInm,7cQ65Bmc.gw iD2vxOV _Kj +36;11; +36;10;MSG036-PK010 jEke,MoWpKvFtpSKgjEkQBQg03xXi0GSRvPw +200;13;MSG200-PK013 6,IpzSxUIAO-7amdq7oq_aJSTk,x +76;9; +62;9;MSG062-PK009 2O7uWx0Dv8BvHD fykfP0ZPnHiDNyc5Y_Dt.4Xk3eTln8auIxE2E4GB7F/fiBj:HyKjyS9p3s0p +62;8;MSG062-PK008 fRyb3 CbCgD:Lcn387ZsipcQb m6eT LNSJd3o +62;10;MSG062-PK010 SNpJPS1N5yimY-/PwZZD8cb_ICyfpMU8.nZV3b_:g +62;11;MSG062-PK011 AHWe6B3zkHyl_ky5rtz_aNRaDa:DJokZK 0Gx9z0mAD8qu njUSAxU./FewlzY i0gEF.Nj +62;14;MSG062-PK014 0d1yQiE0g2U8Lj0GC1ZFF8V1k.ITCR959,:UrJR.D0j/-y4LNvyWeKqIIPaxSX,htp9_wQ +62;13;MSG062-PK013 kJjtaGL4nuez1qK5 +62;12;MSG062-PK012 :-jaRdFl19/jw:-F4CQChtx5_mJ2SFOF1_tFwf4vM-1m +142;7;MSG142-PK007 WBYAzFkFzEwMWXdy FruhoOSg3,Tvcp:1eEsoNNZOGK:YeYRvv8uhMF +159;6;MSG159-PK006 OjBIlCe3BBZ.zzWDbGHWiVVWB,hv6,fuPF.mSu/62n_J8L +175;6; +169;1;MSG169-PK001 62PFILAMX8G:ftxtSWuRYlM8Y-XsG/x1 9VAzzbbBMJYI,omLtJ3G7 +169;3;MSG169-PK003 rvH4RLxE_wz2RZ PKEacOzW:TGUmx85qL.CfA9R9OSBJkslywkHfB5wwiIY7jQ3R-XSFJYFs::x +169;4;MSG169-PK004 VLdl8wYB5cv7FloF4NQZZtLDsJNVY952o3lVgAoVvn sGVX7obWmTh-rn7-c4fmXgGJN G1lct +148;8; +27;5;MSG027-PK005 lJOuAUJw3.6HI,go,yud:0RsC475q3ZP0yy7aoJhfTt4/idVP_fedt9wqiNxO7yp2dMDp +184;12;MSG184-PK012 gbDXF0odJDJjX3 QTB2DB +184;13; +189;0;MSG189-PK000 C:,.jZU4t4DlpMC2M-74J14EVYmt_P/mpA,FGmjWtSeHBeb6N:CB0ZnwWVnWTOzqhwiXFHR +189;3;MSG189-PK003 s1xxfFScMceMtvxY5l 5rdlvVWTp::vF8z5B9Vng4z/d1sAJ32pSqYjCuT +189;2;MSG189-PK002 LvvP57/RnrsHiyJrVoRlkGdKDfafSn +189;1;MSG189-PK001 KTtv fjuVP/y/Ymr6YxzD9Sg:/qCOrZbGflA-7LX3wOCLfqEA2e84sXF9E +189;4;MSG189-PK004 ArufGbb5jN-ZjR8y6c22yxv:9o +189;7;MSG189-PK007 fIB98aL7MF81sY/V +169;6;MSG169-PK006 uy6t/qjbmGt7/w3CoVtr_uaJ89YA.gpCZ_G1V-JohYrv6XGllnh4_oC4nYb9DfVpjNWb7-A1i +169;5;MSG169-PK005 /sbbx:NLEjEqfM7mzwJDDYE0M83s5cZgHrSXivcI,l +169;9;MSG169-PK009 aM2G rdvb9PRmH_6BwxpYPthd +169;8;MSG169-PK008 b/8mt..HYHfQHypTaX-L0Lk ,Ao3Ff0r5MFtssciJTA2HRiqPMAYMGJprL5 +169;10; +169;7;MSG169-PK007 6pI/DcQeIIS0Z FNk9,bDiq9s8lg1 Sm8,psT_bleg6nMVXW4W-JUEmnU +90;6;MSG090-PK006 pCfXma-VO hJpy0GaWJmVnp-rxvKoCvVhjdqFwyupBrO.p +90;8;MSG090-PK008 35gkLoaM_rd0HSWsddyw,y3VsA +80;2;MSG080-PK002 9AMVATegqmO0EzZW1Jy0R.WMj9PoCNLOPFuX,,y +80;3;MSG080-PK003 Mx-ekmRHoW-wL76aTHojHe2VI,YTmx29Jc6TCSmz-FH +127;8;MSG127-PK008 KgnDxYSF5EC5/VgF4UxEFSVHxf-W7 +127;7;MSG127-PK007 /Z,iuja1:AV75F4AHkx4g_FLT9Ba5nnhuPsXR5C5DzMj5tbTf +73;6; +39;7;MSG039-PK007 40Slp-2iR1JbKnN,Syiy7eONrMPlh-wXjjdzOXOIxwewE9WW32w +39;8;MSG039-PK008 qJtLaW2w-yI0yzM_/DEGA8Vn:W3Ge.3UKwKFwXrQRc5IARcSu_V +171;1;MSG171-PK001 CElh6pLY-z.lbrTKKBgXwj7FvwDe3Vi96wLml gC_M2-i H iHOxPrhFmDGjFT_o/ +197;0;MSG197-PK000 acwxFMqOCruGID62i1MU9dkO._wOBc-,q4NZoMxsI9 N3kzoeg +186;0;MSG186-PK000 51xnG23fJQf1IY2B2_YSm3B.o.9DbpB-ZeE HIA813tX_35wvZOcJ_/O0W +186;2;MSG186-PK002 O0ua-jiHtQoUAtIJvL4qUZr2 ala_NcK-ufFbKB +114;15;MSG114-PK015 Ebk2pw8sMxWq-kiPc5p1/qAsp okJW7OAelO hQT +7;1;MSG007-PK001 Nwpbrbu,S__HvVqIpdQ +13;6;MSG013-PK006 gjf-n-20m7GTGk.co7wxYfk1MO65HRxBxkHn3/caYobv96Z M +7;3;MSG007-PK003 fD_0V6km.rYjh3qELHOYPO5 +7;0;MSG007-PK000 ,XoE,j:bUOqX1Uw8jcibHBfhY.K.12Zk//tJkNk-At +178;2;MSG178-PK002 J7hBll:mDbnJTjJBaiv:Zv_9XpGVDQgUQhJsJYk _uZZewX7YC2Z7tz9H6_Jyr8sY, +178;4;MSG178-PK004 J_ltJEkq5PU6VZ4E49gZY +178;5;MSG178-PK005 72RjLL3/elbH35NV7,jpCA.zi/EK_/LWXD:_jOaA6QP D:IVLBmgU +178;6;MSG178-PK006 iucO,-UNsvqKwTc +43;8;MSG043-PK008 :DayIsJz6QAo3sdo1YCp22X8NbFAaGV +43;7;MSG043-PK007 8Gi3u 3AYPiuPTQlccUke-oM/Gqq2 +43;9; +32;8;MSG032-PK008 TmThvR7L3Jh_Q.T::yvP39rZwc-IY9qvUNBOVkYvuwxSbn/xTZvM5w0yGxblvuFJlKw +32;9;MSG032-PK009 U3yxi9KfcDjgkCFVz/ +111;0;MSG111-PK000 Im9M:ZfcZI-.uG63dvbw7ZcIOfxc +133;2;MSG133-PK002 9E2JC7H-sZrBs0m.i.YzTjsH4aJymsGeqjKhmKtlHl4ncklOKgv +133;5;MSG133-PK005 wZlQ3IDFoK4Z:JZDDL1Adj:LNQauUtICotVIDpDeEVwN5wzcbW5x-uPvKGxAEllAx59AJrp436 +133;6;MSG133-PK006 Mu8CaS_o0Db.j_Dw_pTP6w352_97ZeRlr5,r.sG2zSSBsjhQSXP9 +133;7;MSG133-PK007 mYQ4j0o7tyoGdHpQFSM_my8fx2-whcRvgES5LKi:nK0Rf8iMjV.gG1S6 +54;6;MSG054-PK006 JdC UBSznztGRq5Q15mRgFgVZ.6h6iqYQt +54;8;MSG054-PK008 D0e:,/f4rardCBmiub2Y92C4ucz4CLG.CWU19a6maSZP Ky0 9eOH +54;9;MSG054-PK009 gT_.2/phuQBmrw21qOI,-geP_gNblLXpO7bfdjhe5A +54;10;MSG054-PK010 JnAn:OW,i:CsnzbS +68;8;MSG068-PK008 u 7czVG73WDg54 PjadYTmKc vDJ0nUfIpi,g-ttrgsOlAdawTfilM4G5wh +24;4;MSG024-PK004 zjkyQdgiW:hJkLjPg60w_z40sgVCJIc,44KYuh5rZ0qrScl 8XguiHcY:/Hiyzz6DlqOTvzSZn7k +100;5;MSG100-PK005 kMDE4OaRCbyBWenL2 oSjk_x gEuvL.iEWeNy5ISV5Y3FMc/kq +188;1;MSG188-PK001 qRzQAeBUHU7MKtLquP.5qr3OHd3gLuR +188;2;MSG188-PK002 f-u5U1kAUmdZEe7 .bS5dpq a..i,ZHjqgOoLf4clVew-ES6lbbk5.9tu6x8ESo88 +188;4;MSG188-PK004 Fa:,8zoLpxJgKqM KEc58g/4pVUMD/B:Odg0jlPi +173;13; +87;6;MSG087-PK006 5tAf6CO,mBXi.47G,-UAUuP/OFOPRpOInLF1gKE,qK +87;8;MSG087-PK008 .hTYEOgTm:EJNdx6UUH gpJwRcEz2FWCMetnpdISM_fKXdYUyNBc203zNp1WgVP, +5;9;MSG005-PK009 rMPz9OwYOL FPWJYUozxd7A4Li0,rMEGt2Wj59Z/.1eU/knFTvfZQ3nbmHC-_C5VY7. +153;8;MSG153-PK008 4P2nNeK-OLUroiuNJASIdh3ul,J/:lcXd YhLT1ThoXFS8Fi0/L6cnITe.rB +153;10; +45;3;MSG045-PK003 RRVVdRPEXrk4oM-UKjCSuOqUsh6:.ujYOmixlMV LLOthAfr8XH7zd-sMhyUEwlvKKbwz3DLcGl +77;13; +13;5;MSG013-PK005 uXZKtpM 3NqTmV-z 5X8I2l2Vx32lf-R7Ct,:: +32;10; +68;11;MSG068-PK011 hCj8SjHPbfdyU9r_WEREldX9CCB_x4 +71;3;MSG071-PK003 Uh8183F/eOnGTEWbo3_jte,RagdZkSU:SCusHGOT3RxBxqmM/NJkyVk5ZzAgEkO3Pf9bS3 +71;4;MSG071-PK004 oi6ydWD:siJOq4_Yr.EaxKhUsj.TgPXgynmt0gHT:1PHiIIbE2TN6ix,gVG-6N:8eRZWtCdgVYaN +25;3;MSG025-PK003 6YzrTLxFr/IYCynRZvHkPx/R9wRXvvZCCR:VnC.nYVUd _HXPcP KHCayNp-jo +25;2;MSG025-PK002 xd5JWji7,/,Xt3.,tqO_z,e/O:aZxEVgIdUXW +42;2;MSG042-PK002 2glHQ5tDrZ jI +42;1;MSG042-PK001 mTvZ5GJvgDYh9/ +87;11;MSG087-PK011 ,9aGllc.fgwYJnzP9H:TZIrVt RBl4 iaUD4wT0SXCA,zGyNjhdddvGwcjq57WdX +87;10;MSG087-PK010 9F-KFOB wV_blRDV_K0tceAxCeuborW/Zho D.TPUUTgS +20;12;MSG020-PK012 c1vUGy-J_d OvgENH53RfI6kQeqbcMWz8WXeIWQU-20RqSHy KIk5kO-ocqnFjwVitEljbbRjt6 +99;11;MSG099-PK011 q3CTr_r.b:uBmNyetStfbq_dLu1f9wOEHW,a4.Qe3jXiFptp6://_l3xY2Z-8IruED:KMNZil6O +20;14;MSG020-PK014 k5blOUiHO5T9V,M OyDvfT077PZ775tsX1drOWtZUb3wtxBmcY8tIRzc,YuMJDy ,33 +127;10;MSG127-PK010 QdUvQDf/tmb4if.9,f,MR0FJ8 +90;7;MSG090-PK007 kRCslaQ9.MwlLFPpMp +1;4;MSG001-PK004 hZRnFyy/5r2xJ7Fj4mgblEv0 +1;6; +199;8;MSG199-PK008 ksysUR uj9eCUB.oOkX92Y +199;9;MSG199-PK009 BmZ7Tu-Y2OqJDIvDq-/kU4xr +140;5;MSG140-PK005 IpwiL.OlIR PZfS1e9E74kp.xGudOpxVEurbZoGn +140;0;MSG140-PK000 W4j,bi3MPv9ASsbiCALDXMXKSKGUgaMdn5516VreaDNHio +138;9;MSG138-PK009 .H7W9OeXzJG7bIKMw,Hg9Z1JMKogWpvf-NirsseE,35A/Mri-NWmsrFn.rMUmKe0 +87;9;MSG087-PK009 jtjfppfB 8yde5,_mZ5b1X3-.Mzzl3PeBC/ix r +52;3;MSG052-PK003 OVrLTtYnRjJy06GS6_BOj5z.6lEQSY23FAT/3Gi7/sPXfpo3qH2N81vzY/Kr3:Uo 6y39glaq,j +52;4;MSG052-PK004 TWvNI1xtemYR20BEBTe_tKyqXqPE/lJbEg,OO:KiJuhsK:M +52;6;MSG052-PK006 q4T8CRPNnK7mxX02nRFBqIw7griShmAGCFg3u8Q.xK58yBiqfC5oos4SFUO7lKxkl1xw +89;2;MSG089-PK002 Ui-_OTuvt49exUKTOOKruePL.5wox.Z5EFUE6d2Bs +194;6;MSG194-PK006 lryRSw1eOmoC9 +125;4;MSG125-PK004 vKUJyvdytQB1nNJC_bSj +125;3;MSG125-PK003 Ad9JlBpLTHqs-8HAG9Zt2mj4pEYfy_qi32tqJjWVZ8z-2bP3ibWvp6Q1x2sACCFisN19W,,y4/ca +125;0;MSG125-PK000 4VfH4Q7h4NpHp,NP +125;6;MSG125-PK006 YP-Wcuv2DJ8nJokDYFk,43xXam_DU8Jp6c/9hiHUb0UaKYO8QVOwW33Y +125;5;MSG125-PK005 hK3F-w:wDv01/eWYzkTu m4406K3XveyR0WhHIW VSggG80t0rU5: 0pW +106;8;MSG106-PK008 M60wa2DK-X B6cxn9Yp9Hzr1Mk9uxUUpLS-QcpxblbnhvWFfbnd5D +140;6; +26;0;MSG026-PK000 ZWqx1RLgnYQSDgb2uxpwtLx5298NZrOiXdnkwJmlV.G/_ +194;7;MSG194-PK007 cNvh/:2jRPl5j 4p.k3MERmo +194;8;MSG194-PK008 AwLDJ2RjQ:xA5r4nBv4lG45:78phE7Oj13mDg6E3H1mwi9-O5TGAH-atk0JU1TKsQs1.watm3Ed +194;9;MSG194-PK009 ,bZR9SES_3 9v,Fa0LJn7oGXj_PJhQL3mk_CuE7QGL:JgO_0PU VBw qO,U8tdJUusu +194;10;MSG194-PK010 ProITJiAIX:.tLE0mg3F7O- CXCsUxWn +194;11; +99;10;MSG099-PK010 CTvY5OXTwaVFeyYpbcI3cQnacmRaf8vYI1s5n16SqbUFQHkV,uE,HxG7KtPmO N2Pl/L2V +99;12;MSG099-PK012 pGQjBjDtm:oW8fMnUYnbh q3h7W-Tj1Lh2KegRKLSnr.v9rHu/jo23K8uI:Ft +24;5; +10;4;MSG010-PK004 kuRDOOLIYI4U_50vxcqEG +10;3;MSG010-PK003 x,2A1VUZJ5xqDmIE3Wzst8bw1,r_/O MGgYmuhBG8m5QHUUGSc0pSz/wKT +57;12;MSG057-PK012 dlzAPxa3vwXgAjXJqXZDDoWmLgtynai8k5pLO7GfQoUdjbaQ04DTu1CUVl83EUx +97;3;MSG097-PK003 OAFWtsEEAXJ2SIN3UsbUM +23;12;MSG023-PK012 zAzqL6h5CrepAUM3tiu8WavVe/w1nkuBjt +88;6;MSG088-PK006 Wfpln8aAqfFtTz/zYjKIp8tj1RjNpimL0,wWop, +171;4;MSG171-PK004 VwBE:LHE_YCB +171;3;MSG171-PK003 bnZrbu:Lj/TGq_pl/5r0v8Y6uYILg_/yZOXC +170;0;MSG170-PK000 KwB1KVUXtTHruYTd0CeMGlZ7w_LNRBUrQ0meDWmZq-4Se:3Tf0w-PrAr VbroaY +170;2;MSG170-PK002 IAWgWb 8pAiDkGz83BqQ3CC5sQwY26TaAkPkbCea +170;3;MSG170-PK003 dAbRkrK7Glx9RHEZVJwZ.GRaB7F4 +170;5;MSG170-PK005 Lt1yelU47IdbP0cC6iBa8W.FNmryZokoA29Ad +71;7;MSG071-PK007 lea0U1sYY2/ULOQEZC,,23UTfvDJKqDn2xxW2I-Nn:YmNXu_DZBQ/hVAzlUkzjzS3on4au +71;6;MSG071-PK006 zx-4HtU1OZY0/eQfegUSBoP8VglOICQ6ng96JnK +178;7; +30;6;MSG030-PK006 _nkxBdA:.R3/okF /kJRbcvn47gVOs22ACVlO./c7bOyqYcppEkbF/q8NrOSpF +30;5;MSG030-PK005 Rumk0_LKvLXJ-_M6V4vV QS_q_ogwsj47/jrM:y5k +30;7;MSG030-PK007 MB7AZiR:,AWZr4kBS-ZFATEhaQP3l +30;9;MSG030-PK009 HfVpeyar BbHs 1A2r-nHHI6o:DOBc0f1,ZHaww./J-6IOSoEQ/6r p6Izc2pnXI +30;8;MSG030-PK008 mWLFYfr-E8 x6du1W0aRFLw_kW +30;10;MSG030-PK010 CDBZK85bGmDbboSy-1cxqYrSHvfHivDkeT57raIJich,ImBuIVEjh9NmssJ7d8tXG0AxwVk,MsxLb +177;6;MSG177-PK006 7QfhWuTJSrTDiviDjYGzv8kw.mWhNULVvb_-pIW5LNO/Gpa9Y0f_1:hXW32DvfY +189;6;MSG189-PK006 hZbLbziVyCg6D,Z81/VRep2kZX h2ub3F/6M9y2LdG8V-h2MFp-feEwF8LEC5fjP,zx0tWNa0u +11;4;MSG011-PK004 sqRk8gZHkZ.3qr9z Yz:FFjI3Plo02USyPSdNvS4s4fDzVtkogFsKbRoN58cQA +11;5;MSG011-PK005 KzIg7biXIUncLXDW-mO +10;6;MSG010-PK006 ba_rSK8/b 9Mb3LDaVy03YFuXWCHk2E_IK/I0yixrLo65I yPc +89;1;MSG089-PK001 .B8dM6fuy6puUcW-xoraCV-pE4Q +172;1;MSG172-PK001 w6D051,d/0MweXhr-s +177;7;MSG177-PK007 EOUaXX2zWlbdl7iqQbWWa q.9Q,SKCcNGy1KkOjIqQYrngFKNsXk GHq.w Z +98;3;MSG098-PK003 ,.mdTtMPbyO6/BUNwjozR8YlN +29;3;MSG029-PK003 J2YRx5Ruzzr_tDbrcrQZnBAbDcCzG074 +25;4;MSG025-PK004 NlPL6nPPznBwUB18:mE25OfcItnKleTw6X:p:8hq9aIUqE-:SZurQ21hP.15/4 +25;5;MSG025-PK005 w.qMpk2QdrafftNVDDjEqoPOiAaPR9e_A2xmKMK_:XX s,C2 +25;6;MSG025-PK006 :BwnryiqzsaNlhWbl_F1 +25;7;MSG025-PK007 wxS97PHUI9rWtePsl-6WEnYgx4p8wi6Bz4BxdPxwtB0vm2PjMEsEvPUFAONI1p 7,CuYLF +25;10;MSG025-PK010 fpe5rR:4FzBeLy3WRA/bw6M_ntKwmlKcY:r +195;3;MSG195-PK003 Cn.vXE20yUuF0d LCCLNjVX,aT_WPG +195;2;MSG195-PK002 2V05eoXqJz80fQerKK3AE2Y9IV8ONE2eNg2 +30;12;MSG030-PK012 LqxUslYbsRxBIkscIN58xWcAx1TOmCq80k7MdrISTSoWeqnnoO +170;4;MSG170-PK004 vaspR-VE0QHGAQuWTE41LsrCJn Hy6pp3jn +127;11;MSG127-PK011 gtts5Itl8x74jhTdkDvTOltkABg.FCyBK3sw0GsGben9JvUmKH9EzCBZ8f52u_cS0c +127;12;MSG127-PK012 ,/09,pp3JgqNy-3WQyY8ZBg5v5q7T6BnwnzjCFWh5u KZruvrPIMWFZ +127;15;MSG127-PK015 9g8/qnn91IE3eY7TrH7Uc9iw5 +127;14;MSG127-PK014 Kg/TROlMU6rumWeP1fPrX5k166j,X6CpMltH V2fPctfYRiO5rdxGodSBWt3zXFP3f +57;13;MSG057-PK013 2cvLvyU544KkMfV8k,Rytq,,SuYpO:7_:oZFm9nOoliHuHouL.NUN +57;14;MSG057-PK014 NOgT8ayGapl,Zl7dXnAeonq5B/Cl_l6udFO8WT2HbdiiOLqZh4tLj +125;7;MSG125-PK007 A_j:dGfbQZAMHQCtul,_HlRlZ0m U3ykA0JzYxn,WHgyDs +125;9;MSG125-PK009 0EYeva0q22gGJa,S5h3oVmW-. +125;10; +125;8;MSG125-PK008 2:ZTSsf/Ywe5W3Irj5db +55;4;MSG055-PK004 L1cn4HQz-nWr +55;7;MSG055-PK007 mK0Fqf-OcQhI-,nQdOpqB7 vnhg9GKG8Dnj8p GbdzGT +55;6;MSG055-PK006 FvUfv GYtED.KLgD9Y +55;9;MSG055-PK009 yx7ELdlkG M6QI z57eJf16/iNUXR95DXmezGcR8AZmg_cLo,O2JBe8u +55;8;MSG055-PK008 Wa4rCYWhL8Hnsanay3_A.tTq/KaNBFUoZcrYQ94Vq31LgBm2zZ8_i6OtHiFRF X +102;2;MSG102-PK002 Y-ch/mK:MNXQHjixJws0h2kFxp8uOsj034_sB09P360VLYC58:SQ4ok_9qK_o:4c3zB9/6H4t04Bv +102;4;MSG102-PK004 eSihyGjUMryKKt_FTr4h1b59jJ9Y +102;3;MSG102-PK003 fw/td9NP0xJlFsJRnqEjKkIvkS_sR +102;6;MSG102-PK006 DX Nvi:8jjz0DSKypDFpls g3KON9:AcJ8lcEfAC8oZj-Qau7Z4g2GKa +110;7;MSG110-PK007 F,iwF0Ce3pC47hYp.8/gk7i0XzIlhQRW vHq5Jq +135;3;MSG135-PK003 4/ie/Fhhd9UE9lKvu8ZfF3vYJJCDq +135;5; +122;0;MSG122-PK000 TVgA7l/jWsN820Oa +122;1;MSG122-PK001 RUSGQ1rBwi6mJbn_XGyS8j0j,bs8w,rhrGTRK38w3lHs +122;3;MSG122-PK003 tOJz9FVo/iS.a.GJ 2Xu9C7qH0yOsxo0DC,UyZkIAvYVB82 +83;10;MSG083-PK010 KzbZmMEw-.U:L5fc1oqC8jhH +83;11;MSG083-PK011 -O/dyms69eRy,Qj.RBGx5gD7,zD-adGlGyv1NMpbHrAsbeXUWwyCH :iDMvliK4KY7O CvO +83;13;MSG083-PK013 .zftsjCA7dGPfB-0c,vMye0r.6yJ +83;12;MSG083-PK012 6tG8Zo7JgDPAefQX_Ip5t AIhY +146;6;MSG146-PK006 9pZL b,KssFUevpyChxBuiM27EBlfZcbYtlU +146;7;MSG146-PK007 YeG/Zoug2Q/wxomCTpYnyZS b +146;8;MSG146-PK008 z3mPf6x329i0rOXtW3T9/nXV6KV-cs.qJfrmekwy7g +146;9;MSG146-PK009 SuHAMAQ2GceZS/WjR.GDRpNi.:sLA3 TefX0uv ,ktnbvg MFqlhR3ep4nZIVILpmwR +146;10; +14;0;MSG014-PK000 pgp5Ma6RE/DSMKrW_FnP_yU6ms20klh2q8B5jV:Z_YH,24 1us.q 6q-: +100;9;MSG100-PK009 bn5:bhPxHsCqTSHzzGvAwkwMzasQ-zFcBZjErr 2bG9HM,Db-npd4b 1W9 +100;10; +68;10;MSG068-PK010 dhtEEZ9arT5OET2NIiiySL +10;5;MSG010-PK005 HtkXNDFK4qq:vdeTP87I4rw63 +200;12;MSG200-PK012 mzY9p9dn.FWYWXe2.EgmG,b0/-EfBrfy5 +126;2;MSG126-PK002 5N7XEsQ8xWgKKdrTtq:fDeatREVsFNK4msHM99,w3-T0OUbTr_J +126;1;MSG126-PK001 tLNQKhWJ 738hBsC:MoPbcbmUXATIk.AwfF2PPOvDW1w0Hz55jO6/D,fy +126;3;MSG126-PK003 DKfTFFn/VLF /x2vP +126;4;MSG126-PK004 ,ZdwKKgjnKywgOI:-aC9vn _4NMjSgUZrYg8G/Qx-W6UQKsuEvN xc/l7u,USr +126;5;MSG126-PK005 xnFOonZ8z4H,3wvfwmQINqF/D +124;0;MSG124-PK000 5.iHw2YFw OyH-8PU +12;7;MSG012-PK007 tuEofOq4HVxAeOSsV5u/MpdZ,s6Ota.QL8 +141;3;MSG141-PK003 09v1Ivb5kwjmz_7pu5d +96;4; +164;6;MSG164-PK006 mRK-u5uxbc37 +127;13;MSG127-PK013 OHI36G/N5nZ,VXK-U2NFc.. +127;17;MSG127-PK017 O8GqHAsjT11/sx9Bg9FE5e9A +127;16;MSG127-PK016 cVY7Mi_sMAfPeJI +127;18;MSG127-PK018 5t h.VVyjWYShLDMILZ3on47l0tEhxJ-t.lBxfq,sT9Rvx0wOOL:CpOw +127;20; +127;19;MSG127-PK019 HjrL33ghnRZEoIB77cnNB-ubMLZzO/Qqllgp,vh69eS 9s8VyCBQ1U5yt +63;5;MSG063-PK005 l99i_Zx004:0iZDCYA/pEbzs0qM_1MdGZYUJ 5dOCYM +31;4;MSG031-PK004 kuhAUbe0n-M.9MsqEOIANgN1WtotlR3GTuTGwcZJKlpm,zk:s7Fa2DNCRK..wi:_J1/cZZH +71;5;MSG071-PK005 3hUdSc-UV62Q /B8FmN IC7tfyPtkXcpdr62I,jNxGDvkmjgq31rE 5ynCFa +69;7;MSG069-PK007 MWOcDdGEk8LtjEmC3,RH:CB 9q4pUGtuGovOaA:AJmxK8rxD6sf4Mi9SB9gg2 +69;8;MSG069-PK008 6UTw1Cul:JVmh_S._l:pmIxp,EKra0GyzORy +177;8;MSG177-PK008 egx3GAFlyxxRR6cXTfLaN:RN wYNK_DDgyCYlwSkm OZHDn0qJ_wA: +177;10;MSG177-PK010 8cs-7T-agmIN72vwF/oC7XTc_M_hl_TMMeDSXsuRLd38tXB5A +163;2;MSG163-PK002 f0cLKv7ZaBG2mj,FZASR1zmTOydMj_Xld9W7w-hQgJD5iiseWEpI6iNDHsQ9,SlB_wKK +142;6;MSG142-PK006 xp2dh7zXdYt6cc9YwQ0w +132;0;MSG132-PK000 c6C5tg:-qxT5HXOJG:f3zHLY-fu +42;3;MSG042-PK003 dqSjqfptTqEDt5aIz9R.unR/VPpj +132;1;MSG132-PK001 E:oLOb,b6:sLk +137;4;MSG137-PK004 yxSR5o_hQyA8OovtwUBQ3I0hbU3oLlfI.W.ZR4iH1.J x.YC +28;4; +88;5;MSG088-PK005 90TA6eeP6/BGlcg,TeQhBPIVoA3JeqMwtfQPaymsm +75;2;MSG075-PK002 /3-2OnG30gn,bSE17e +92;4;MSG092-PK004 3q7jhXneKweFc8ASDX:s.iP7/cb7Xo2ah_OFH7POh4M:mHMNEHJ0vZZw1BSm_nD/Dy +168;2;MSG168-PK002 94R-dun/:zIweB/b0Vlzlo +168;3;MSG168-PK003 zO7eo53Ak80jz_YhWco,MufXq/lGPlfOWqSIMd9fjO.-HcnGg.dirQbC7QMQhVfhnQVORlGg +137;3;MSG137-PK003 v5zWYxSM.aohDk6G. dKl:74WFc6.i:dWR6DB:lMEO5zASkkRUsGlS95vQO +137;5;MSG137-PK005 x9zbnLd_Ud,f-Rk6Z4RkZjdq 4-REC3lz-kf9s-F061orb U cyunIokLD8gm,KcF4xx +141;4;MSG141-PK004 7T6kAKVSstV,3Paf7JJmKuxDJ7khR7Gp5Awk +12;8;MSG012-PK008 TlPhy:CJzck/5l-Yy O-hUYs2VXVbKSSN5lB414Ku21rlsAM8:QiWla0I1w7rzxWL fMM +128;4;MSG128-PK004 VrAUvPzxselx,NEkgamlq-Igm +128;5; +75;3;MSG075-PK003 U 5zOoWEraxu7pkBk.ghskJ_ge/G4OQ +75;6;MSG075-PK006 -KEu27G/N2ICjhArBDTGF539EhTR/wj2JR1trIAlrktTU.._zvAc9pIoqQ7c05h6,xMGRM8 +75;5;MSG075-PK005 MXFks:Jrfw6NFf_lksrexjRmr.TkAX-JePLnXQvD ba/5, +75;4;MSG075-PK004 1XH_FT-b:IX_,Ar6O-IQ2s8ny7gsHMY:JSdhWZdM7: +75;8;MSG075-PK008 _d F31N,fWOaoZICES0syQdwjjp-8afa +89;3;MSG089-PK003 Y0qjS28IWA,K gEcB0YF_2gqX-6 +89;4;MSG089-PK004 x.-8Xp5u7I1hbFLlaVw:5dEVl9lI4HRbc9g +89;0;MSG089-PK000 JTGU1byp0.XUx8N_ow0LPK_q6,pSkpHoDZMN58ump.KNfoG5awzlWo8sT-r_HHv4p.dHUPlw +91;5;MSG091-PK005 K6H--Dap_2g/d7VCDUW52bdGx9f-E0QL:MzB-bUB0DG4kX,.fG4hSNGS +91;4;MSG091-PK004 HXW92Z:qAgd A8bE.5,L3ID.Rc:_vV5dKIRS +129;18;MSG129-PK018 o-SpRVy-K35SE_L7BXRv,33ipzn9XpQ.1 +91;7;MSG091-PK007 R,1RDQ9X1Y6B2dCsmovJP2kTJ9.MHmSi0-A +132;2;MSG132-PK002 MWPHVghc.d FVflQBJ:KriN,:Cdad7o5eqdw-eoCFr9_bolnM-y7 AS2,jLRR0xka +185;5;MSG185-PK005 NPnTSB5Ibe5YUBK +18;4;MSG018-PK004 uY_n7kSmZbuOq.X6b Z2gM2Ho5.V8Q/Uow +45;2;MSG045-PK002 /74db2uEHOJu1Je 0dPAhkqgCF-dpE.,lWsCFT2gPjecoUBA6JzPZ6cq5 +45;4;MSG045-PK004 rEtPM0blloAMDH.U8izB3w7 +45;7;MSG045-PK007 hd,nO_bd,iJg1zFxBMBdZR/ LK:yvF7Qa,xs:PsVRJTOoBo1dBN_vE2,A zYysE/ceHE0G4 +45;6;MSG045-PK006 gMi9kbBlo.9LePdoEAucFIHV3d,jG_8YSh,6StT6tCjWApYdz,.jlhO4dyWAh2 +45;5;MSG045-PK005 A.kCflLNeu:g:iW0MUuyone +45;9;MSG045-PK009 t,tC_W8Iqm4AX:D/VhP5cyHdk0Ueo +45;8;MSG045-PK008 lqeZDn6QSv49ZepHT-Ma-noIGkV4woNBWij1/WpnNXdzWjl_vZcQRRIWSHwY.FW.GD,5lIdzLI +45;10;MSG045-PK010 b1w QQpNxTGKX2QL +45;11;MSG045-PK011 i5AIN7KOxDOp0BDu2J- lfgl4b7nqKR5ZjEfIMKlKwFOStzB9v/8TZ pAgr1PWJ68 +83;15;MSG083-PK015 s/_ibIvBPxG5ZOTLTf.PPH_Q-fXg +186;3;MSG186-PK003 7-_FRZWoKgk6/vRlw2PlDTgJ9Ke_Bf.lkkzuKpn +167;6;MSG167-PK006 .mbno4ZqXE8-x +72;3;MSG072-PK003 y_HAU7y/OMVvtPi9J PwI46TYUOnu--Q3 +72;4;MSG072-PK004 vqjFC_,TAHwjMK-BQKQ6K. +17;2;MSG017-PK002 TiuKj/E_.NZho8HdeR1HzQhrAQhE,jeSj1k9qIfne,.CS39MDchdz/Wc9gXWq +50;2;MSG050-PK002 LDJXXhRH8gg1gF:jg4TnYyRrjHkwavvLn RZiX-fR3G +39;9;MSG039-PK009 fH6p_zaeRJr-6BJKZW_335/H6c0n6c3gkH4kkdB:H5nRY9T13PaRj. +39;10;MSG039-PK010 cJPcQ00D RNfrHw3j8/vQ5pMeqQhE/P 2wWM-j0F_KF0gXzP-SCck +39;11; +181;11;MSG181-PK011 16u1.74tgW8Wt,PSHUVuG90_Ms.cuV9ulDZtrISlJiMD0CC 7 +112;5;MSG112-PK005 IBh5K.wg8Z.js7-._aiwsZTlg1vMMsdVwcze2R ns,TABK.ccjz3hNL,HqpJwRH/ +112;4;MSG112-PK004 EcG8lNw rbSkyTKmLo2plkt:GsO0lYwErZ/1sVly79s8Ya +76;8;MSG076-PK008 WEwhk7fBc :p72qFwPQ:okov471mUmd5.INqHX73chGrS40O,lxRGMSM4TlYiGciHdcQMMN2 +186;4;MSG186-PK004 Li0vf3BTWm-3lp:k5KtnanU3MJfxlJW9X_YopRhIa.aHjz4UJHxDxjmGyvKBc9zPqJ +186;5;MSG186-PK005 laA_1jwICZ3pMpycS2im5rElJXgmV,HGo72il0UKa54WiRNGADbyvzrl4Vo9SwKe6gis63bT +177;9;MSG177-PK009 NuQ/.6cpGa7E5-a4jEp5I jN_X3ec8jM0m4ztW4Z +189;8;MSG189-PK008 JRssJpNCPHeRP1i9.:MUvmqAFGp-N3JDojdmX-E_djMty8 +30;11;MSG030-PK011 mWBg8btZ5vhteeQEY1riUz0dbR78Odhm,FrQbd7B7lye5vulnAWf-8jX,sxpdGOJ0o, +157;4;MSG157-PK004 PzlfVS/k..TFNGLVdd7q8JSj03b.NmjnMJg8NdQwtT4qTjEcbcA7QwL +113;5;MSG113-PK005 xnMkO8cVqphIZaR/uZpodML 0nKIzLbShkD1.mNV6OGUvC +113;4;MSG113-PK004 7wwmw4kZKDoZQhh0_Hjj2evgivsnrTN tE:6N-K.D0 +90;10;MSG090-PK010 bsZl2X_GOhmO3qvRH_oc0bLQx4iK8eR3M7m9spvZ-mOFCI +113;7;MSG113-PK007 W6/uYWk.r-PdIf1qgNCKobtDcnzgoiFr +90;9;MSG090-PK009 s7NIcmDcS5qPzFvN6f6zc +102;5;MSG102-PK005 i66tkn6heUuKOYbdmu8p9ve/Kcu4eIzlSvol p8_1xSZlV0E +102;7;MSG102-PK007 SKt1BS Je.Rn4NHML +102;8;MSG102-PK008 F/hXm,9-fKA/lgbYBnaOTd7ZpGaH-2.7o3h9EC +102;9;MSG102-PK009 c-J7y_CXGYb1ob2eCD_tsAvxEVB6OP,r7eQqOdi/4tf0ZU4,Z 7.8pyb +102;10;MSG102-PK010 -WT4N.FZ7c3i,TbaB:jMhGAalTAiTabU/AVyMPLxQQYiJi4_MB5Xdm_zxT9-pXTDUt +102;11;MSG102-PK011 -k-LExJNU,NDNxOTjutZQsC.ung3t/WSrmff6CRejzxT7cMKkH-s +102;13;MSG102-PK013 mKLgchvRP_6-tP7zoBcwudD5FSMfUDz +102;12;MSG102-PK012 IvZaTTfrYuVoIEOBUO0p7ub8hF3 .A8yXCgmSx8 +111;2;MSG111-PK002 v0 z_-b5WoFp8XDRLfdvrbu361Unu9aO du9ycD_xhgbeBblohggwvoaz +111;3;MSG111-PK003 hkYwKrTUVC-9g9lOMuwgUzr_D8iV:9QNGZBxHtLYZhN xG-I +111;4;MSG111-PK004 d36fGFbuInBSe.bVIwACS,KjTppEGw-oUkJ4EbPC7nSQ,t9XMm_n2qxXozYsHDLpk7zO +111;6;MSG111-PK006 jBTqiM.Q9Rj5IEix0qk5FnMU5x2VMxP-2Yap +90;11;MSG090-PK011 gwg.RtfUZHR:byHGgR/T3TUk8GF +90;12;MSG090-PK012 :Ajm5KLIqx-EsQ.6Lt40CaJPRcM4/WKi3zv +90;13;MSG090-PK013 Fnk3WVVXC2CagLyzOfkSYLb6UQZKlHX4 +90;14;MSG090-PK014 2U1YO7ZNbYBFXTR-Yo5okh206XC +90;17;MSG090-PK017 l/zXhYZxNU1lifyb4T:XBdHhLImXjYZmzaYzPK:Sy1lbL-c-aO9H_ +83;14;MSG083-PK014 Wft8-2zL/41UYmr:h0SOupneQBk +83;16;MSG083-PK016 UNgSqn:cxa,7,yg/ +48;2;MSG048-PK002 SulisgB2a_pZJnb +48;4;MSG048-PK004 q5XkpXXrZ3byN_qIZ09fpYVWu, LfuiU,qAlsPsJwzRtRXea_P_NXi5xnUhRt +48;3;MSG048-PK003 JTdZbQ.e0q6HRY3CSf HsJkNscLT643wOy/K6ZXkSyfmY +48;5;MSG048-PK005 DKtFtqpaksIHCnJjJd/ -CHz79tMftmo2:sDlB _k.nbfXtNu0S7_3 +2;1;MSG002-PK001 QOpM.N0PZLqy1WwMZaMK +2;0;MSG002-PK000 s3qfNUfTAFnT0tEuw0dwQ0FIunWe8Cz6SNDCdyZQJiJS-Z/QdoHwHen3SO3 +2;3;MSG002-PK003 hA1XcW9aTMX1/C CI3 dXRZv7q/dYdk2r7xgHWPB6PRWJ1Gk8cgSCifdFzctEq8oB +93;1;MSG093-PK001 nasP4_qwADR:2rBJsqDLqs1MjcpHJsyaUWXR451bZntTp HEMwpdNE/-zdFm30HX3_btY8LSon522 +93;2;MSG093-PK002 fxu86M0JxQLO7WFLL5vfgny X-FUu_jE qHwfK1UDOui,hR8rW,6yfgsgye +188;3;MSG188-PK003 FMYFa/z-XjGubhmZN4-WcIUTBPEbuHA +31;5;MSG031-PK005 FdpZgN:2aE,sm.Xghzuhzn5gklJebAM8oEn +55;11;MSG055-PK011 3GGmINaahIe4V0ftEpg2Nf4 u0: +45;12; +53;3;MSG053-PK003 vX,dmkZ5.oo37/0rawOmQy.YGv34DcvvfMk9RAc +53;5;MSG053-PK005 MfZOii8I8jl6gYIT43-ZyluGh5dNMkF_ph +53;4;MSG053-PK004 a:H.OuL0 5hD,.G35 gaDd5YILfR-DPPak,u4v64FrxdpEqbUnlu +53;6;MSG053-PK006 Zdm9etm52NQj97fqtAaGSDN5.u46rPythTx/I:8EU.,w6v +192;7;MSG192-PK007 -96Q:lvpiC,NA75lPHnidStX68ukx2B1wBQw708JptB7Eu-71dhw4PTJZ x047fQ e,G +27;7; +83;18;MSG083-PK018 FwMbKMcnuj4R2ANzZ +83;17;MSG083-PK017 s,rTDNms5nCsVCFrT_-HcMk2w JwrmqolPMIN-SbsM0jcjX/la,nF9 +181;13;MSG181-PK013 2Gwv5BuqcXw7 +181;12;MSG181-PK012 IBZUrjpT_/9gc3 +181;14;MSG181-PK014 G5W9W,x.7zHG9fLGBc,F2vr/fnKPM9GAu/1viu +181;16;MSG181-PK016 _voa6MmgcvgIxUI-6scR,wL9cq +181;15;MSG181-PK015 :Gruui1vnbNiasBkCT1h/7DeRArhFw +162;6;MSG162-PK006 V,zUMeOC2QTRpbYmj3EKINoFawKA7r2mx:ru9PBv0uY +176;2;MSG176-PK002 ATzg0wV9RCA3R/W +156;3;MSG156-PK003 _6psfp4/-D R PMOWkguv,FM2 +156;5;MSG156-PK005 aoeFE-McE8zZiakgo2st0bkRUn_35XZ MQoBIR/r6CrA651CvZ/ZwpJXpicXRb/wS6vY278 +156;4;MSG156-PK004 jB Yzmm 9zORS1DWAG9IGgyAF16fvXnz +7;2;MSG007-PK002 uGnoD-afbFf8UXtwe1CPF1OIjVp.gwC_fZi7KNPl6bVzLMF7V,zFta0dDSb +138;8;MSG138-PK008 eem YQ7LpgUeym,kk +138;10;MSG138-PK010 dNy,HKEi5UHrC6t-bn,cRw-GTDloT:6f6kHny_u-ja-YfMImSC:Qg/j_ +44;8;MSG044-PK008 1c2H4tGRwU7B5 +95;0;MSG095-PK000 6571s8IX4Aa7sp wjr9dhZ-GYLw/,FMU4XyU-6ymlkBUKxOW8J +95;1;MSG095-PK001 1.xCEseL3a_LX4Me8rK:fn-99n cGkOu 5njT +63;6;MSG063-PK006 w:FG.u/bducTFXPdKTZ:2 +11;7;MSG011-PK007 zAiw4 P6F2ZfWOY/:e_n56fF_/YfX_gyL4YMK7v2 +11;6;MSG011-PK006 YucSTTME.JhGXdJCtRYrlW_D1Et2NQ5qArzrN:r3suOi/pxOsdO00M4JtynqxdIDDDdTk9r.8V +190;15;MSG190-PK015 QpAiUC4vNL_zAD4 +190;14;MSG190-PK014 LcUm1I6WKwgF8uvTMb,PO,o4T0/5_5 i +190;13;MSG190-PK013 8O/DZ.E8taUqUpi.s:ekbO6tMj/47N1Gno9,lDM +190;16; +186;6;MSG186-PK006 cQJMr3uU:hQ,4.w1. qmuTcsoCRghM:5WRsazL5UOi wDfEdp/ey63m-4/pLY0I +66;10;MSG066-PK010 f1xUg.eSV3LNjKiqHB1iYgVbxf4Zlp.oN/A0,_H +66;13;MSG066-PK013 -Q4RC7N4YBn:BGxcbuK +105;3;MSG105-PK003 .Fd4FQJ1gb 6Gh83_SW +35;2;MSG035-PK002 :BKKQYZuvVtp,,gO0WbE0n1rN2d5bL5t1ZcqzTiU.UdjVzai4Dl2,mO2 +30;13;MSG030-PK013 B7Whb.:IN6Hd-D4loe Lqk3MfgZ: +30;14; +63;7;MSG063-PK007 O6P-Is72_1lw95zECEQ3NtclIGP +63;8;MSG063-PK008 /Ni Fx0VrBG2VUK2iqhCJ +63;9;MSG063-PK009 QBRHxR3q/2a,-kF.K6QjFGf7Il.OcV/rHgSOI1 +63;12;MSG063-PK012 KAcZH/G9,yvftMGIb9Em9kapixhzY xjYGq3kY11J9id CSx4R1UrdFnybajXk:CwlQufh, +63;11;MSG063-PK011 s.M,VXS4CDFLAjdSk.-T44:x:bR9x-F5_zbj3U_LZc5LR1uOW7aAu5m/.5T_ +63;13; +166;4; +197;1;MSG197-PK001 gSnyx7K-LQn,5sJa/52,01iaV +197;2;MSG197-PK002 ODiJxZSq5YOtkVkgY-DX8/px9WNJyl0SCt1pBdTY20SZab.YmdPruhw7HD.,o7B5oPkqUkhVb5k +57;15;MSG057-PK015 3sJ:sqDh2Lqjk2-HZhC_SmRtEJ2YOsi,K2GPyDm3IOb3ePKnmB8nCL2Enb,f9/ +22;3;MSG022-PK003 WUgDlulgGk:G5tLs +22;2;MSG022-PK002 Fi5cXSUWc 352l3 +22;4;MSG022-PK004 82vEczjimIw/p7Vwt/xFbPvI-c..hYrvg8tqEVJ7F6woFufi +163;1;MSG163-PK001 6wlkmzwanPGtZTcbj3-M29D4Q2l1pNy7SG7JapNgVrRHCtYDUgw3AZhEWg69XE +163;4;MSG163-PK004 mvcy1UJoh6Tq_ki3sZoo9lCrvyzk2._UppZzs7mUMr90OoYfBTdh-Z8NM3rV3P +163;5;MSG163-PK005 Ml6.bg ixic5nGjtA/1fHthigc1PM,ENhWl3M_o--.6JCnO8 +48;6;MSG048-PK006 z,tONLxqPzPoi7:xdQfFGRUD:x-8ua +154;1;MSG154-PK001 hq 8qDI-hsWtnjuMd8,2PBXE1NO/OI28oZc:cZJ8tMsqkCp +154;5;MSG154-PK005 :LHy4XWt77s-XLcBsuEN +154;4;MSG154-PK004 N2Ly,F:lZ K,Nu,WVQkMWmtLLYT.a.3toYoyQuXNtTnQLzz8H/d/,4aeZj +154;3;MSG154-PK003 MBhau.BfXX_0vE.nq57S/NBd +154;7;MSG154-PK007 PmS2sA:,g9aBA3uuIN5tWUao_RfVFVIUvUUAZwvdB6UkHmbO: uUIwf7IEC_qYOWwyp +154;6;MSG154-PK006 RsXRWu:Ne:62K ML2RTAhg3:R4pB_onm:LJvzD2POe-oVFGpA +154;8;MSG154-PK008 umNVpxHwt01o.Zv0GbQr-v0QOfEJ_:s9o.NZ,h,s5t NLhjw +16;1;MSG016-PK001 hU38BgBc2IGwksiJZkM51:BHxgl2RMvzS198/u3TXbzjsPObt6s,Oo0H_a5q +83;19; +99;14;MSG099-PK014 ,oU6,jHIQUYkHe66Nk-KnsWGdPFUrCwr7Z yhP6xp-3JRC +99;13;MSG099-PK013 xA/l. oYGX4S3rxN60_e8rQ84TjylPJ1y2,2tnB3b3sKJI7x,rNTP X/,O +172;3;MSG172-PK003 Z-sJEKyn:bwjycsP33XEm,JGE2f9Afyo3DUon.Xl +136;5;MSG136-PK005 Z3oGnhlE MxU/,km0,mNqv5UMmgO5O0.QMsd0W4nxIIIDM-PHsd2c .G-y:zxMu-ilry1uBt +172;2;MSG172-PK002 kwl1iB-:Tzxc.__IU,K,gX4aSabXYw5C,Qrag1HjEW +103;1;MSG103-PK001 Z_Cuxjiu.aik78dk:x 7o6RZ,_Q4Y3ptk5 KHNnSWU5KB9Q:xL/jBs +103;0;MSG103-PK000 QoIgABDmFyWeT8sg5zljU0 0wE.2T/qZDdmWj.hyeB: +160;0;MSG160-PK000 wFRTrgii78Rc Oc.V9EU_rJLn +160;3;MSG160-PK003 hYNGefCof5KHW5U3kM 7lM3atFFbSvk9UAtrb795K-qjrV,euXTcn6N0A_4:RyfY7 +18;6;MSG018-PK006 c1qJI7OmCCcPCiK61QX8bRROS4t7,A/vXGZek +18;7;MSG018-PK007 31cK EW/qWpmYBBoLwuZ0TB1JOUnO.//YCZ,7K5uwZKa/Q7wmX110ydCr +71;10; +71;9;MSG071-PK009 FLHtQpl.eOHQOjqLnVq-3ENGai2l5gWGpMNPBF,SwcmUWmJ3nWMjS8Dy82_IalzIj .iba oV9nM +71;8;MSG071-PK008 9Wj0uvS_R_IzpBO,Mb:5N5Jd5y +57;17;MSG057-PK017 mlSIeWw -d-/gY.zlptp6QrtuAEkxQX ,rSaB_S2p2w6oHlyJw,,yszO D GxmNtbG +57;16;MSG057-PK016 N,EEICV8F39em2.UtUEj9OgGaB8cko_PY5IcTvcPTeS9t.i +154;10;MSG154-PK010 icYQd_,r_ha:AyLL9xtzzQzXHE_0leEuxP0L_AZ:JB9j2KeYjqGSoaTRm79Q QsToQ3 +171;5;MSG171-PK005 Ig6 477I pNwq8uJHpkuWvAc.nFZTM16R9AUKhr hRpHm5j2mErNhXg9hcqIvJP.L4 +165;3; +177;11;MSG177-PK011 Fbqa/bSZ:er:VAI +89;6;MSG089-PK006 PCm6ysL3nSTutLkiFHkLnr1rXVCPw8E/A0.P +89;5;MSG089-PK005 QQxHdr4xgoUioDd-DSyoj3PpTqsAHPh2d9jB XX7bhXb2gRh1LdTm +89;7;MSG089-PK007 2QnxFGGGBa7NQ6.HGhvDh98oNXQet2bjj.F40ie-jmC8:hoofK6a-IJGGODrSZ8rliQjlaIUqZ +87;12;MSG087-PK012 Kwl9w GtjGhK8lz39o3i1:L.jtXE:q5NlNSSa7EBzf_9fC-uJvUt,hL5DJNNXALXH9G3RpFmkbjV +42;4;MSG042-PK004 M7E0uXqSk_EiwM85E379vHMyNzRM7_,vWU8 +42;5;MSG042-PK005 qL81gdgKbi1T9D91qKvZWrqUHteC0DgkIhmQs7Eno6xxYNiH +196;10; +13;9;MSG013-PK009 aF8RK.vkIV1UFt:1Dr2006_Ud4sb_ikROZv3hYeth_L1ZMOSbJ:sZ5A4SZzMke/QX +161;0;MSG161-PK000 -8sHc0SY0 0LdCbjx30bo.BHMhzuTiKUdr +161;2;MSG161-PK002 nQ/VDBiOKlGK0kzenbf:Cg:1hE0A6dB0l3tsDRF3YtA,Ib/cqf-QwVL +161;3;MSG161-PK003 Gj:6VWstR38FNrkItX9,K:4njdO94Ec.U +167;7;MSG167-PK007 /u,zIqNH1HAIK8:eKibgS2SMWD1Gk00LVUJC1 og,9bp95h +167;8; +130;0;MSG130-PK000 t/QYPhhSE-bSCI1QdztLdAd8bCf.RJxDN_:B80 +130;1;MSG130-PK001 0hkkeIygk2FT_,TnGYcgrOzcbU-KfEINiUGao57LTcyO +156;6;MSG156-PK006 4VvDy25l5KVaDCR k,6s0WmYKWxxhR1oT.eC,Us +156;7;MSG156-PK007 /sSsxuio/IgarUse,IyK3I/p.Z:GqTYB47E/cTvRa0SYWOocqL4vCvC_/55 +156;10; +98;0;MSG098-PK000 FzA5_ ADP:hPu:R.iK_/bPQiSR0 JZMrx7zge1EYL7 +98;6;MSG098-PK006 vmUYDLz 1.sSqF.mRK8NAvTP5TOE: +124;2;MSG124-PK002 AJ5Cp/IQ4PKyl5h2,zX 2cY2_6q_W +109;1;MSG109-PK001 9NNk12toKP-N_I9k2C1m,PWvZ/iHoUQdlLQ6bbKcm yD6Qlnv:1jDp__ARQ5el1dm2lVMv +80;4;MSG080-PK004 BgM ZeR250U3kvIBDMHmNW XA-tVvmK +80;5;MSG080-PK005 HH5:3:5zqa6i/lmZGGosY,k.7hoRD7IcSIjiM/Opp9KvXkNqs4NdLTkvv:Q.B6dogES5J +26;1;MSG026-PK001 wT4bI5r0Hv2jsovgA:GD9R +154;9;MSG154-PK009 XJtvj/kCGibP +78;1;MSG078-PK001 Yh_B:kGIvvByqw.M2Yp4k +94;3;MSG094-PK003 jI_iwVSqmZSz,GJ5GbiQ01:Kv4uUGQv:ytJdrye_jruKy4nOengtFMoNqhhMfp49Hmw- +2;4; +114;17; +114;14;MSG114-PK014 uhw AgN :eQPfnMJCamni2 dSnrjh8OFPzTLvF2VA9SV/HmqwXNxNk +180;9;MSG180-PK009 ub6IztfcTEPkMGvt/koptrd9h8.AI9C0I0r +68;12;MSG068-PK012 QxdjaoUNMNN sa5IhUn7byrvn56QgrSG:EjdAwaJngD q-iht6wR5PTo +68;13;MSG068-PK013 n7X23/wpv K1umABMUSwVYSYuivPeMMjM,UA42z5wS1L-T2N,31TP, a +15;1;MSG015-PK001 ur49LsABzbUnsW2vhmT8wgp-R3tZFepEY MwWl7WJ4Vbpokp -Cc9JmxX93MqmPi/xZcY/ +8;2;MSG008-PK002 u3 OwTCwWNLqwaYexOCn,sQjESOvl +93;4;MSG093-PK004 UsE54:,hda:RISh0AR8ZEA-oxyP +29;4;MSG029-PK004 wJVAhkwDH vEdBIqfqL +160;5;MSG160-PK005 /3/2CvsX pyH.nN_LJwBHvsB/z19hay1cGvWhQeU8vQk +18;9;MSG018-PK009 2pnsHovU0RsF9AHmQj6 FHRL4Q5HJers_KdCVULNuN84LtqsLXGDdBMsbHU-_Z9vSt.O +18;8;MSG018-PK008 u6VEw8zPqLidA76F4Ew7.oQuF7iae0_8Xj1H +18;10; +192;8;MSG192-PK008 V.Kmn4KBGqFNLUAsHw/9jWcTv:qTipmf3j7gCZSALas6Mqi UStRxvi.r-vca +192;9;MSG192-PK009 B90m53-9wy/T1jFuSdp +62;15; +47;0;MSG047-PK000 ,m1LUnbKS FI13MG,BD4hPq.dQX3Sly4M54l: +38;4;MSG038-PK004 T lxnKZ8lGXF.0XKEtcAl,r02Us_sNY/QHv,qL +47;1;MSG047-PK001 YuPhtEf-XJYvHCMDT +93;3;MSG093-PK003 F.NhRVRb2u ppgXzj/UKJg3X5WI3re1PiZS +181;17;MSG181-PK017 QVR.H 18KoLP,njs3g_ 5fu:m-TaDAZG4a,i +181;18; +94;4; +27;6;MSG027-PK006 _Ywdx FSqVTBEsvt4Dy_waKU8CTCqD2 +72;5;MSG072-PK005 FRwiTi zKW1c3/tG8nT8P1ncfjeBcuwnrARUnwm1-CrytTHmHqv0Dr0 +72;8;MSG072-PK008 ZTkNG7AZULzkcRT4,if +183;11; +38;5;MSG038-PK005 RJAs,oZzhzEO1BW +95;3;MSG095-PK003 PMSoqc0nqW-8F +95;2;MSG095-PK002 FuvyXw.m6knkBd8D1XlZ6o434:iWwZW mIi3w0U,fg4Buor5jrkTp4cZt6Cn28 +95;4;MSG095-PK004 sT.DBj B1.1IupOikrYiair: +58;2;MSG058-PK002 mPEBe5cW01,hZBDlmi3lnQRCdF AoyGhD ,j7bB Bd1m/rgbK +58;1;MSG058-PK001 Faz4J4DpmCA5hGIYvNUONd4 bbPDTP._qAHmp-dwD_Phr/ +58;4;MSG058-PK004 djCGkMeS/gX9cjGI +8;3;MSG008-PK003 1v0,WSWm9Cu5jeLcOHnjRvWujlR9d3v3ugmQAy0HKMEmgY tgUa2lL9zmdAvLk8oNY8 +8;5;MSG008-PK005 0HX 8ewJZsZeYQEg8IVcRMNJ mDrM4PI1ly4B0 _Vh-uiN.Zr:dwyzhF +35;1;MSG035-PK001 _ZgQgYEfYYE3bVfq:l2IbpbBfpvhEdsUrcHRuz6V7UDoxYfg/3fr7S,LPGIrf +189;5;MSG189-PK005 HpBzt 8gTZZs69pH:9QKA.kJY0DD22AfTCe52Dwo +189;10;MSG189-PK010 bdtsytnNPyz.UTbNFP4q96ZBG9mZ2eBhNw2a8yUFG +189;9;MSG189-PK009 Ug0m8H8WPAze/_w-AibE00nFYx_9-F8V.z9hCnAMuvhUdJ2 +182;9;MSG182-PK009 .avpCUSobAss SqwuLeI1BiJ9OMCZ,ijm 3hxn7hZgb:-8Ku +182;11;MSG182-PK011 6iv.HIYlb3ePrZqhZ:VnxM3K4A5dT/n ynCwF1a.wmodjqb,NlZ5_/Xz/owi-sfi0E +182;12; +78;2;MSG078-PK002 HSTMG5qt9dgH_,HGvwR5ze +78;3;MSG078-PK003 ZaFa6 F3W9U.T_4 lO +54;12;MSG054-PK012 1hR45Z5,jrreDht:4O4IeT.xEbA1bW4 :9ovI8wWPR7iyZK19HUmNOD5TwT4MM_/sPr1go_UnnoO3 +66;12;MSG066-PK012 oZZkc,YHNIgJCKZj3sqv74q3ncRIevWcx_M0TQsl:OX.ZGBy5JTyi/fwD +66;15;MSG066-PK015 Il-Az,_nM NsSd6NC:rfzThh4-255QQaePyO9XhCY5ABXiIxG8JkTl3C +57;18; +185;4;MSG185-PK004 yonHcCHeiRVv9UMRVg7S:F4XBbOmf8_aGypJRMMUVel7jsV7F/Q7nufB52yZ6eF52AH4y 7 +105;4;MSG105-PK004 haqwb42JXUzi,VR1r8HqBDMptEKE8cE7RxY1-V9TDiWnyHWDEq9YYlWB.J:np6tt +105;5;MSG105-PK005 WD-n:a:QSIweYaFYgh +156;9;MSG156-PK009 eVfIQ.bK6duAgO4UOTiqjv.ZtfvULufcCkRc,.elRYk +80;6; +197;5;MSG197-PK005 :w-UlRWT6zm/Z63EzTrrTfI016x9,yEKJ R5szaYT 2uj tSY5SczHCZq_P +195;5; +29;6;MSG029-PK006 GFC6xucULtsoWwWPHWyyazzLLM4cN._,-QbI7cvbVW.SjOy5,GxY2AuO1DIx5 +29;5;MSG029-PK005 H7n8,PH0nxHgXUD/4t8sR.ixtOfRXY/KG.sF Fy5jxmqklgp:6-fES1gj6g LeCt +105;7;MSG105-PK007 H0 GbaKaMF5mKioV:7C1g0DHfVkzef +105;6;MSG105-PK006 6SjoEM3R51obFxhr +105;9;MSG105-PK009 S56c,.Lm6-18CB3CMQ xdqgAOuphMmpH1:lF/D +168;6;MSG168-PK006 ValnPzts9XfANI5:.gbH6wGV9jwY,7v:a4vgggiSJ3We 6HwUOAYlkZK4 +168;5;MSG168-PK005 bzzt/kC.MdBB2NuTil5b:6P 7 +168;8;MSG168-PK008 X6du,F,ZkH_lul9f.-Eh1 34w,f0vj5lXifqfiIObUlJvq/qkIkUT. +168;7;MSG168-PK007 IQz8O zGrWWifU/CEaUElz5p9Tt ijM5yLNuAY0UNuCrEXi5-WlGkJK33KNQz6 +126;6;MSG126-PK006 sv4RmURTtBgHTn +170;6; +126;7;MSG126-PK007 UX//jipnrj5Is2Iojl5rAG2YcD_adpEm,n_9l:hD1AjC +63;10;MSG063-PK010 QEaDpO/IWNDGIqcPGchvAnTg8,FbRyd +10;7; +93;5;MSG093-PK005 ,e5F8EY1/fEl343c +93;6;MSG093-PK006 IiXkUfx4t1wrPRQ5MnHSf_e3XdD1DIblWk1BpFzFWzLPw/d +72;7;MSG072-PK007 wEkbesLlURo,P_YB5AQAzv8eq.Z +72;9;MSG072-PK009 AGuymHJQvmvS3f2ra-nfIgoOpMnLaThSbkEI9IuZC1Gjxv0M5r +72;6;MSG072-PK006 4,.ekpTmAw2/MxzwYyRTI1fAyXyleR4k6FwzmTLRRr683uWaxBQ2KcDb/3-kV +72;11; +185;6;MSG185-PK006 OKoSlSY_inKxMD/KN_V/:2ZABhC5wuj/qb +154;11;MSG154-PK011 yDyjrwwMWu8ppnah8m,l6d9VD24cq:/ 799Z8UgQ2,PDVq LRayXBRzxLzHO6omXy8hFSG.zwNt +154;12;MSG154-PK012 MWs50fvaMzcYZE-i,6i8cAlGUj. +154;13;MSG154-PK013 E ifYaCLuOBp_d Drgd7kG:/N02c2 +84;4;MSG084-PK004 Tq.d9.1M79ao1WrctEyWq dZVF +84;5;MSG084-PK005 NU1CTUrLgRfhJO +133;8;MSG133-PK008 WSoi1.2a,,_MdDodVQFwUb.U_dHrW5s31XrMJ6IWxP41qG0P:JhAQs0rjvh +133;9;MSG133-PK009 lthHefZz5YCjR.1cNUkEuBplF6nFKEe-WE9hnt3, +20;15;MSG020-PK015 1 bNuRN2pq:KRVqV8ic5V1FAPDO8JRQyqPDEF 8 +20;17;MSG020-PK017 irtn_uElUTRk0Ri,Zh:1 +137;6;MSG137-PK006 S4:nK3R3Gxt2hGwn9tUJemG3ms4mEdQy0q3j4,kDPA_hXTLYXttMbPg4E2TYkk-5H +137;7;MSG137-PK007 LDPd8fouVaTf_1Xkan3UeKz:gSaMNvl:OoqgFXs2QCAWQ2LF3Gwa5VKsPSvFMFq +137;8;MSG137-PK008 /PcpaQkbVokAkKObNolU.qr:sO.T75bve5oV1dSq +137;10; +137;9;MSG137-PK009 g6tJVVPsmrrnQVZy +26;2;MSG026-PK002 qpD.PGUIge2GNVK7Rszjoryt5K/ k54YAFLv vdy/Wvj8TbhiXF +26;3;MSG026-PK003 Nben-iY48.K-i2SwJGGUHH2g/A/Ui8B5nbPEps/6. +26;5;MSG026-PK005 c6ZxaVJQW4jQcf33X2IljbYVMllCKa5PmZI8f +26;4;MSG026-PK004 nJ5rGWDelWGwIqAC5u_EEnto,dYuAw_-gBvspfobxDwaci_X73Wofd-9XpbkLyVXlKhELOFk- +26;7;MSG026-PK007 UIqnSLV fO3.qasqU,acgiZCR0Jg6vBrJ8w.uPJahl __ +7;4; +188;6;MSG188-PK006 970v9g,X88Mv3-H_,pG7cCK.HtsJmNeAj +78;6;MSG078-PK006 wPQ6Dbn.f:,rR.MwCcqu8x VuoSv sEipICKiXXDu174U4q747o-J0dTyMYQ4KhW/DH/ +78;5;MSG078-PK005 gEcvKrCabBCMp/9pOOczyhD-byVIAnF4CntVdI-n,U7Drwr9:es_EYAme1wdJ261zfCiXiGY9f7W/ +78;7;MSG078-PK007 cPEaikbce98Eo_u0A9Gj gAxxOh-lzDtu8HLVHSKK9u4_,wLK46j6Nd0YX5Hq +98;5;MSG098-PK005 ,yGBwG_c,HsZ.bp5Thm79SJ5SeCj1-pT6y22Nb1aowdcAc:p6hN4ZRQLKe.Qbz uiAdNlc +98;7;MSG098-PK007 qaxrxpsE5bDtr:./8hx3dhTrh2o +87;13;MSG087-PK013 Xe-wDsEVmjFQvwPHKU5cAk8ZnhlBuJ8g9yh-mLkJxC4T4JRJVp4Dyai0RH.6YV5: +87;15;MSG087-PK015 7Yne72QkCmn,c_ +87;14;MSG087-PK014 B3go9lM9uwqKQzmZOkXKL +87;17;MSG087-PK017 z/oL7YgJaYx2sutST +122;2;MSG122-PK002 r0KJXSUl7B8rFKrD.szt +42;6;MSG042-PK006 Nuu/FP1199kTFcvv3uM7EZPbfzsceh3M60iNMs5. FPOHgKwFpZ,sh34UICzNDZcJOBxS +42;7;MSG042-PK007 DJRFAgxD2NmwtL8Gc/Vy6uhEDSfPjZgqFqPmd lUTP/,gIgIttMRYNjkuVVlqPD-e _jlFScS +84;6;MSG084-PK006 kR:-FutV hvon0XZfu/x:lG.YS3m9oUHyXliOECCWXNKzK7KDgDLs37IRY3inQSZj0aXNhV4-,21 +84;7;MSG084-PK007 6,r,zbo2NYVtn8LVYO/Iz2LMCcY_JnM +84;9;MSG084-PK009 Sol O1BKJh0gtpemXx3119u6.EBwwWA zi0_wMy1.jqff385u26pV2lM7bjuBGTLkWJX +84;8;MSG084-PK008 S2kycqDu9ZBlYK,A5Y_7XU +84;11;MSG084-PK011 aW7wi,dJ21:8dp Xspk39nsEfHXR.C +193;7;MSG193-PK007 T29euzT4SNYrnZxKI/EPdMfJNN/gsACWJlzgbR4-,85ZkM5iWOj1yijOOTEgMXhhKe +193;6;MSG193-PK006 762ZCz4RyKfWXpXGK:p,EiVOqQve9Uymgsi +193;8;MSG193-PK008 AMMPzZUTk00OQZsQ +8;4;MSG008-PK004 CIhtmkS0DhX_1/8E8MkYe._sp5wvByqf2k3zsHOilXYPJ +8;6;MSG008-PK006 5w8SSuHlKdXguBCCAI0-cb8qwbCGNJ2WS6GB7M_Yna-VKMn9iRJPJHMyt_ +8;8;MSG008-PK008 QwOha5JAvu lq32Z29Xae +174;6;MSG174-PK006 atlibjzAJGxz:08nGs +174;7;MSG174-PK007 c5E7YIiuGQZv:1u/7VYE +37;5;MSG037-PK005 eJk6qNoQRFYn +37;6;MSG037-PK006 vV5hEBCsRLTxCkP/r:XCfJcr3Yxl4um LurqdMl07wpTEwZ +37;8;MSG037-PK008 0jhtqFioY94dX92AQFr +37;7;MSG037-PK007 fM/Taxtf1mgnEFBVC khahcxR3mWsxRWJ,i-VTNa5sDaKSBrDkX77/jKQWL4KF4bpLTznk5,212 +35;0;MSG035-PK000 f.9fvfplKCklzsXWmmQ/JRgRuZExpoZeL6uscOC8a89IUJL9h/rzk4iLXjRFI1 X0q0xFPWaUD +102;14;MSG102-PK014 /WT.OjcqiKZPH/nAwvcY +102;17;MSG102-PK017 Oq,Q.Yh5uThyyCcsg1x +161;4;MSG161-PK004 KzYT9Voa9VXrYvqXNtdswlD2hR86u9gqD,rPzHBusdH70CJJV6tuXo.08Z, +14;2;MSG014-PK002 qr.655tPl0XDYRf4JlvdNpkyg_y8.cp/xcJAF4k/PZf cR3x1d:OWGlomvKsxGltN0vhPxdh +14;1;MSG014-PK001 _tpVNVML dss1gNKB +14;4;MSG014-PK004 rJ3A.ORH5IFPRA6Qcra8abw0 Y/ +14;3;MSG014-PK003 ,-.XoIhO70i9d0DcImFqM05k.AsVvF/25fa7Lvah9I +196;9;MSG196-PK009 -PwbJC_REeZh9zvTn82SzwyQFdCvmb3/eeaam +95;6;MSG095-PK006 tx1bu9JXxKhW_A5QHT:9gsBc8ifQWNfc05NnV: +95;5;MSG095-PK005 Nu3154BdlHrzRr IEKe6jZs Z3H9:N_3dOXGpDkcZZYft,sMQpzT0agjH_bZjh2RU +95;7;MSG095-PK007 Q 1HNWFxmMpYNvJhKzZULPkj2ggwrt2Q2,u1WrMDJm7iM_f/XUWnM0tojCW/7U9Jlvw-82 +95;9;MSG095-PK009 VGt75lIigNTr_/80L3.-cdGPtWdQn.VLXJmz snnqvAjMH/ZD12.ew +95;8;MSG095-PK008 eg.0r_DOP9mKx7eBkkxitQQDQBrKpv21Zwf2PY0fat-Q +95;10; +11;8;MSG011-PK008 5dw6z6lGPuplo5Uk:X-uWWfvQtuswg1NN5KxpqzaGb6,,a,EB8604 +122;4;MSG122-PK004 GylxZNv.ul6GKHT-Y9BqmnroYi_7xdhjbrx7o/rrbMH +179;1;MSG179-PK001 B8EJDLvnvh2uOSw.cnxq6khcORIKpIoy8_ +179;2;MSG179-PK002 H23c VZXwQS3i-brnPDhIOt9.FApZbvKH: Jlji +179;4;MSG179-PK004 MjIt:,du2.ZRU fm9LiWiLhGUfF_6uL6SL:_wdXotVCtLg5NAYkP.LU2N2B8k sX4/:,e06h aDDg +199;10; +84;10;MSG084-PK010 HPV8-Z/QxttqgcXS +8;7;MSG008-PK007 RC/8T.MvxLm8qHxQlCTCN1QVHL7p8gj8y.pW +158;2;MSG158-PK002 quh.uR lfgu1wElqY, +158;3;MSG158-PK003 4Ll8Yf33yOTHwdmo8AqlJ1plp-zoBLvD +158;4;MSG158-PK004 gkM:7DSLKXsV5JcpOn pLBTYt.uSiUJc +158;5;MSG158-PK005 6I3-J6gZqVjLUBdj-K/-uGtijc,er_E1pOXzCWIPHOcrLAmN/k3HQlYxVidHius78 +15;0;MSG015-PK000 KseON.pJ9B,LWhQtACgw YMucYR28S +23;11;MSG023-PK011 J5AlREplG/Ef8Jva B0Qml.DJa2 +70;1;MSG070-PK001 NRJhyddtmMDX1PLTzwBrFNQFBSX1-uq:1U9VMtaCaozD7YjjU69bmNlokT:nWtBiTF +136;7;MSG136-PK007 W0vtypnvwZ14TVSCy8AP9.,EMY/EmRro +136;8;MSG136-PK008 GrppIR-SWp -dLm.btfm:k/kGe6rI/Ai:iae dU F,9Fz.5mJfYj:KFxwdz +136;10;MSG136-PK010 9Fvh.qMn_J0PI,pAZ_1Gy0os_ik9BjaOukQ0x,AjqDJs +25;9;MSG025-PK009 AV-TxE/YhfzcJMEXkPo6iSuAlctvSdlMz9J-yhza18kA,losYgttoAup +68;14; +105;8;MSG105-PK008 0 p1r1i7QNlKLqFCStmOZgsBvM, +105;10;MSG105-PK010 ofJm7YxQnaFaj0JfIdD7Zqoo:c3eJF.knM-siovaWsGKi:Oci11LkRcV,QX:ljDGCjRCxCmHDr +17;4;MSG017-PK004 seE46oc,eIJXMkhJX,cWX4fCAWx3/gNeSdRHBdR32hnXK/72_HuW7EqbJJk +186;7;MSG186-PK007 wWbD9_r V0c.Cl,Eu9 Zq_wTJ7o +186;8;MSG186-PK008 31vR_EEAfF4UBUSrPQ4ScFZsWIbntTiMDD.FjilfpP peAfeahp.g9WJsQe:dPmqe/o +186;9;MSG186-PK009 l.XrwCrL2,ZZ:7MYi +186;11;MSG186-PK011 .I_1aoq4j0geBbG-8Jzo-C8cZ7qUQGkMiafmwn +186;10;MSG186-PK010 -czzG-DFy_yk, +171;7;MSG171-PK007 _:P 6/Jc/.LDRokfwP_UZ,st9ec12agSIa8U52x91mov3v +163;7;MSG163-PK007 3w5ktjE8nMVlzsx6.OKjZZiviQ0nfQmk420JZ9p +197;4;MSG197-PK004 c3Fg Rri,d3RZAr0I303wsbHXgVv/ZFwqisSBEno42OJT0gPTZb +193;9;MSG193-PK009 .HiIvfL2Opoe 7qShMR9FTilHYbchyXx,pzc_C8JjHhZwikv3VhcR7 +42;8;MSG042-PK008 Dw-qJ0Fc3p0rj/U3EOqba63jOfLthOX.T156jNyB2d.fenfkK1mgBt -:.m/AeJYoXF +168;9;MSG168-PK009 Nj4ScK3U/J6PlNqqbrmwh9O1m0v0U69jtvf8dhx_SR.rFvD-RpZhoaFEr8l4X2WJ +168;4;MSG168-PK004 ,KOk75YEfKEiRyokGnrFEo8B/BYLq +168;11;MSG168-PK011 oeEC.u/b,-Jp7kdtLQjo9DEi +168;13;MSG168-PK013 -oOrpF_gwwQj TgJwrkQaR,GIQQcgWmierOJcQ669aPPNZe +168;10;MSG168-PK010 I-f9DXix1nwZy:yzVhHCX8572B/Q8q3t0gV2iIptCMiil +26;6;MSG026-PK006 6b:D3_p8: jUdV2xU6j6WcEqclq3T6_xWbMkaVrj7UQ-Op6 6Llr LXxjmsJl +26;8;MSG026-PK008 hShloVaw7nlOx2kfUD4g +177;13;MSG177-PK013 E3FyDEKjxdjLLXV: ol-Mgacq4ONm,Be/QVG2Uv_XUnQKpOQiUm7rakzPEgh5mFnFbJ2v +177;12;MSG177-PK012 l::hK7p7:YpTXCHGtOId3gGE8/sun5l8uoygUbZ4SsRY34AKbgcJ4,LiYX906/p8 +29;7;MSG029-PK007 rdVutKojP0BftOOZD3F7t0wLxf3WjQ +11;9;MSG011-PK009 Qlgn1wuKw6UelMPVWi2iL8rpJQ:0:AAhn:l9K2OH:Tq,_,,xDL +11;10;MSG011-PK010 zKGiNM.PaoQRY +99;15;MSG099-PK015 _bTOH gh1: Ear1qdS0FDYHg +99;16;MSG099-PK016 wVMf4,G/:j1.tbJBu_lr7 Bo67Lv9/Hy98uIr7S.kIdWPhQbVBn2M4gVH7RyIe9Bx/LSW- +113;6;MSG113-PK006 a_ lPNbvwyL0Zv5uULCTJVO6 +113;8;MSG113-PK008 J-pTElxvkbGyZeO1hIE0MGGWHMrijb04bfUAe +113;9;MSG113-PK009 HZD/ts_NeiNG fR,CP.hQIo3Fn-u4Tea0unQydbPd19K.p5/hzDeEE9T-nBamrl6cK +103;2;MSG103-PK002 PvXHe5nMkznfH3Vs,NhHT3GPJBiwhE:w2Omt +103;3; +189;11; +42;9;MSG042-PK009 WQZ/uW9w:eb9t ua +42;10;MSG042-PK010 d/CgZ4_VnGSKA07kHX9He3W:-15ViR mk2MT3fSU +48;7;MSG048-PK007 5kqh8OAjBXUynVrYqme9LkGHCapbXkJKTsWNT7NIABi9mpUDDFJ5v37dldfAMCLM,UT0i::.l8-Z +48;8;MSG048-PK008 KfABpuvxDPHf4bL5ApN:BY7N68,Ga6cCZX0TZba5Wrutpx/qpB.1/v9H4r2HBAzbMU3veZZYeI +48;9;MSG048-PK009 3SmtHxpdXE7l8cNCWG:mk0RSUVHvjF,znA0yYR,w Z72_,8 UAU +48;11;MSG048-PK011 u 7apoQNm7,Ax0a2-R0-/1ie:R8zS.W9LBy0J +48;10;MSG048-PK010 qyzb ZoUdemjkCnQN:aNKxz0G,ujHbla:YmXG6cNlR9C:dW6W7DX5xeYpfxy6x3NCw +19;3;MSG019-PK003 .4JnjFuP98fX FJWhmhRJ/V4Ko8rjP0ttMzl4FP +145;1;MSG145-PK001 hcPBcKfhILHno72DRhB8egYO-2 +145;3;MSG145-PK003 c7m2q6.VL IsfV9:T_HtQwK06uWXlmwybQf_FCOcNvS:TAY.yRpihATz5 +145;4;MSG145-PK004 vr86/wzZiEkIFNqaGvNC63:H_GdfbWfysxWAoNPW2tPx:wTnWM +136;9;MSG136-PK009 mOiF0YUnEc38kADGDKYCj_K4 +136;11;MSG136-PK011 5 ydVR,5oHB3m4 +111;5;MSG111-PK005 4cbYr21mfMM81e ,-:Xu_0,LBDz_RtO-hNY +111;7; +106;7;MSG106-PK007 Ty6Mnw1cdu24IR-Xj_GqdXtL//6.qdusSy2SOttcOy/K:hDbwTnS7oYiRM06tybKMnUe4ijA.z +106;6;MSG106-PK006 BhOK8k,4Gm2:2 KJ:YpRn3bcbGKAU/DRnag18e53dFHUCce6yJlUt9Jt +106;9;MSG106-PK009 gyHOhV.vfvGGZKA8LxtP -CbNqnJPA-u +106;10;MSG106-PK010 wFR1miKy0mK PXr5tFTRAj/GLNXfM-:zQYzK m3:hn86lh3YUHfYUdgszVZMkMe86oGskcO +26;11;MSG026-PK011 ZVDOIkwakrx4OTh +26;10;MSG026-PK010 eQPnf,NdnDmkm +99;17;MSG099-PK017 zG96TFBX4DT-KRJe0 :mA.sDnm0,YJ5O_FFTWWF +38;8;MSG038-PK008 mpNr2D80TdnZ 29m-,9Yq:B0E3:Td +44;9;MSG044-PK009 6g3ls-.6tNtZ_hr-sZjWGp4daRz,j_2eQXY-bzjZWN8Vis7:ypwHrUEVIkZckkHc_4ap8a- +44;11;MSG044-PK011 oSB4LfUlyE6D42Y5W/oWa:OR,l6MfU_MY_-kJIe-hBR.ZvKf +160;7;MSG160-PK007 9,eFsTl8b8046SV,7aN:EvmU2yrF4FiwZ3tXf9v +160;4;MSG160-PK004 QZBh8TU dYA-fZj5DAlo-zCwM_sC3_Ais-.w +87;16;MSG087-PK016 g:33,/Qp2wczVs_U7MhiRKkVcZ-RlnlkW / zI-hPoGZ05V6mWOLdrymzKxXzWS7mCT7cfn2 +87;18; +47;3; +47;2;MSG047-PK002 ia_fAQN1LW2aMhB9ZH4J63pk2kxwoRfEZOS0.iffMpO_CBBVq1ZamC-OOadvR9y_bndix +158;6;MSG158-PK006 roUteabo3S2-PHW:zNJ8-8px94Y +158;7;MSG158-PK007 ZjX:.NZtxf80A87HOLsd8wC1O.5JZ7/ZnFHe +158;8; +133;10;MSG133-PK010 J2/xhIckb J-bb0SVCG8S9XPjB3gmBmCqld bCvK6r6osqMZDN: +133;13;MSG133-PK013 UmB8AFn.G:1c3iQcJ:UN-9NAfduh.nHh1JZW +133;12;MSG133-PK012 lh0JQ7gftJYtUWW.dUjiM6tOL-49Xpv3-RCjKaaexD829B3dVk4iDXKJRwF2G UkqMZivRS +133;14;MSG133-PK014 k5N,nU7JZH6vB3Ykj6ZjI,bv5HhG:Xjmn5vI5pG1SEJWkwGeal +133;11;MSG133-PK011 3:64BSA1-2W31i4fx87Sjlc5vG:BOn19andE,7Q1V:3OJ +54;11;MSG054-PK011 vKixO5eDrF517X3eXv:OjzNcB8B/7KLyc:m-z0EuA5bxXWF-v +180;14; +69;10;MSG069-PK010 hn/ggVJLcs74XhoqCmXrR8VldecBX0/S8NE8EI5lIU.jXDgwnwj/uy0y8 +69;9;MSG069-PK009 sJzedk6CoWyCrLDa_,vNG9.Ed prkvU,3jgsMo.w8uJLUwe4X +69;11;MSG069-PK011 4dUeX6LwSutuPKYRJ,WCj3lMVTgAXRCTKuA4uG325 +69;14;MSG069-PK014 9uKjhB2,P:bXCt:Ifjl6jyeF +69;13;MSG069-PK013 V59HrSLuhMBX:v9PZ-G,:Ph5_39xODh-nQ:aZ4_HVnnCuK09jt7RvB4ncbsVXyOj S5hU +69;12;MSG069-PK012 vsLvfU2HsUK5/gWID9kYfyL- Cin2fpSWREVxlmOJxGalScHB7h:1d +69;17;MSG069-PK017 Do7PK.4,pytatcZlAqbEn:1527JN_vw- b +121;3;MSG121-PK003 Tt:-fgk,ZXY2,pP0zc4UrR567XWgecv5AmE7r1QjrPOR8rVqFHgxk +97;5;MSG097-PK005 3tWsVDYNNjI/8 4LRJ +97;7;MSG097-PK007 5zb5GYXA/WLXjh6mv56Gp82PO--qCi0s9eLmKp_U1qEEA/EoZ,wgeE5rN hGpTlz +160;6;MSG160-PK006 P1FwddB6LTshmJ gkS-Brevu6k4vMGtrEqFVv5iXegSByhcURZDhxy:OerajaQ36/g +160;10; +197;3;MSG197-PK003 M,rIaKd-BRX/j,qg ,lxgv8UAG:,t02eI32bm2kbBChSA8/lX18tawkcN +197;6;MSG197-PK006 iyeqPjURNuhkvk3U14zTf .5Fh +171;6;MSG171-PK006 kkZLI39,Y-wsGfXOKvoteu:OEBB/dzvHMuRN0Yt +171;8;MSG171-PK008 7 f5Kf2:j,GdXD/PRrNOwMnJmi74eOiE1pPXwbl/0mmMOoX8qWr1TWo2zOgwCsBiH +48;12;MSG048-PK012 Q_4XXHH4kSTEJ4GOeqGdUE4,vaI:YODHQdE4SJe9:aVD/ +72;10;MSG072-PK010 6KJrVEZ:Rx53.wcmnvtNXX +79;4;MSG079-PK004 hktroUzVz6Pu9j7YYoWvKryB:dog8fo47LNYcCLWHo Pb6zmqACoOCI,W +79;3;MSG079-PK003 tdfPGYEn2J0fZZNzuE QQ/A-_zCDlHFtTK-Pv.wbY23PAH,5lecct/kafcAv1Z0l7b--Z +79;5;MSG079-PK005 0X:xy6yq4:Yeu:L0BUUTcisikHSqPyRUEakXUI hRLGUmHO +79;7;MSG079-PK007 xvhPIKm6lcSW,BsB0e7bWG_,sEQ:yQ +176;3;MSG176-PK003 YawKBqs_hR GJAeKlUWh-4wQ VTdHGkfIRwMs6:Lpv-VTKQDH5wr94UKresVHST7uFuPTa7RAt +161;5;MSG161-PK005 tup5jL2,HpcOdR:zpJZum-Km9S,V:lnYC2c6Y0z3o6zs8mMTBk7DtPjIPK1c2g73HdC +161;8;MSG161-PK008 h9hk1j9f/J3dLSY UcNBcizzRf7RLkjytKocqI2LbWCL:gGifrUlmbsLJkyYk17r3:98x +161;7;MSG161-PK007 Qk0Xnh7KXLGBrb2pihIZP,/wO6/ 9QPa6n-jbwVRf +38;7;MSG038-PK007 -krr2_iSM6G6aSC +113;11;MSG113-PK011 j.TVqO16W 4aPMpk2WllTAKcOsMr20350_2bg7w.p +113;10;MSG113-PK010 XmQB1jh1,d7YW9axP:pq8n89FuY +69;16;MSG069-PK016 hcmatrqovYBfOmepjiWzIoaW73_9ifoKNkk2DwttUoWGrQ.Xp35sni ctPGMXOPeuJuk_sPH:gQ +109;3;MSG109-PK003 4T_5W:f7ifTpDnN3uCA.WBHT. vCXFWt +109;6;MSG109-PK006 5/12a5ZLKqa6 +159;10;MSG159-PK010 QSQpqzKvx1Juvp1Qi2cRa +159;12;MSG159-PK012 0B07kIR,-YDug269mUcJj1rYqvuOPy-CiSbf88XBmudGxWv:S6 +159;11;MSG159-PK011 .rFcKte,kbFpItpeXSCeDjPQZgE/KKS eOO:FTj37RcgKT0kWWJ6B +159;13;MSG159-PK013 sLaOj2uKEs7mVzqpdIY +159;14; +171;9;MSG171-PK009 7_TB_bO6JijDDqCIKoaz2j/N:xcp/U1RGTBNu2tV,ayN +8;9; +171;10;MSG171-PK010 DpIs,8yLmaRFMxlAx6r37zK1kJRFnfctx/DZdYRpkFC_xxIJqJNwKl_HWC3F8P0 +99;19; +99;18;MSG099-PK018 e/Nx.Oh54erB3lgH2DXFsclSMWjqjGlwx/15ynHpGt +12;9;MSG012-PK009 FdpJ,iU93H8pV-cHuhsO7rTugIU1TgLL:j-yxmvPOMIUm/Tsbr_KV 0RunBt.Cy:/o16joqc9S +12;11;MSG012-PK011 x4nxTW2B-D0oOp7o_r,UKfkP,oXK6N4C0L2yi8Vwb nY4_kpsYZnviUzRz +12;10;MSG012-PK010 NqAqk2ojc93fzne-h8pGfiMbmpAzxSdlsJSTu.E.i +126;8;MSG126-PK008 XeW8oJ/:iUDxend8DUT-zjd3tku-.o0MeGWE0Qc.uaAmo1bhoZXX +126;9;MSG126-PK009 eIt.UYOUmF8 u PGT: +188;5;MSG188-PK005 ujpgfErqNYzHbfhXeM +136;13;MSG136-PK013 5xWNt xPiZe1H7 k +136;12;MSG136-PK012 iB M1ZDM3MhT7Oua6wN1zniEIzClytbn3c8WsXRd2NdB0 +136;14;MSG136-PK014 -l,_k96e9YyxtA4yrASo +136;15;MSG136-PK015 _zm3tW:w8a-0UfuiC2g.fXfCk8Ir +107;5;MSG107-PK005 SqSg1FRMo34:QCdJMOX7S +107;6; +15;2;MSG015-PK002 fqAulGekp.MUv2aFMf_L/4r O_T +54;14; +141;6;MSG141-PK006 -45Fp:94/ijnBx4Txje2u0kqXsKc.vWdsZuL,rNO.h +141;5;MSG141-PK005 s0mK_6jb0RXxPjMYS:xYYEj497p_lDdWpulw0.EGuBo32ffS- MNTFm +141;7;MSG141-PK007 -TdB6,byPMnU,PoHbIGMQA Yhh086EBaXZUS1 +141;9;MSG141-PK009 mruIKJ_. hBJZ5LI.K3azWFXZwhU5cIv554pix7-iWoznX./nBfo4- +141;8;MSG141-PK008 6zS7dfe7im3k5Jm4-2lJ4AlK2apgG4U UyjNEbk8infYQ. +41;2;MSG041-PK002 ms0IRth1Nknc1nWWlch:quGrpZ/s1.qtk,T +41;5;MSG041-PK005 jpH6gUDN4qETl08BhQCqY,bG-_Z:0QWtvV/xu:v/ao:BtFVAf3- +188;7;MSG188-PK007 9I626w7CSph5lHfOvO3dwHJ.YjN3Swpwj.p3/Q4BsGs 3pXDyXOVvXCF5G6rkEn0TC, +188;9;MSG188-PK009 iznCGU9CmWe8KadD2S.,aPWGO1Yq-1d +48;13;MSG048-PK013 Jd8C6AhJlTaXBwGdO +89;8;MSG089-PK008 /-_81MnNE64v +89;10;MSG089-PK010 8rD6_/kn:.smg4WePUO/7fGsVC47009FqVIYWd aw8B,qAdU6otoZ3xXX_x9DHv:hHv +89;9;MSG089-PK009 f,zs71jfE585FlmbvOy6O +89;11;MSG089-PK011 jDyeJMqm9PAM/S1GSbKN1 +89;14;MSG089-PK014 t3Py2XoMTcjj9UhD7MzXjwRiKvXm:kqNiPuit +89;12;MSG089-PK012 hghCC4cG4Iqoqf2YcV.d/P1aqm,g...b4sJth9QEc47stW2Y4CJO_3hlPef:VPIiLXSi3,vos4 +89;13;MSG089-PK013 8rdi3GOH7kFCrPl0AGlDceMEXsVYoQFEaRk/,WvKaJ +102;16;MSG102-PK016 FHdK8_PCpOfr6 +102;15;MSG102-PK015 7ebZxrPfj5,Qj7KewzC0cNJ c7c13gT,WPq8AFjmuP.urk-/5b +102;18;MSG102-PK018 5OtCsWWkeAtop:0waOfqVOiFgYwMx0L, c8cBLRWwjTTQr GtoZn +74;9;MSG074-PK009 51i7cVplfBSZuO9Yrihes:dS6RVcdhGMJjS2WEfV5u,V3txcuo5OwBcPy6dpD9 +23;10;MSG023-PK010 nN2GIzZTmW8zFPfRT8E/Q,D3cjnrD0fA70/ +23;15;MSG023-PK015 dfgaHFWSRlU_J:tZWpE0tI-DPVgUNvWff8g0AE06Tc:xqihIgpYG:p:aHHw8,F_yWy:iZIF +23;14;MSG023-PK014 tTOWo.LLHuks9K +23;17; +23;16;MSG023-PK016 qV:3BnNGk7fXLXuTVLfxZDVRxLyck8WN0JL-:.cCnVE._wJQr7hReLhLEABATy:GO +91;6;MSG091-PK006 .zmfS_9X_ZGWiJkXP,iHn,5N +91;8;MSG091-PK008 bvzC-cJ5Ft xqIy Omn2rSX5i.VjpI447pXzoOz:gZs7-Yol_ivDJIeq3f-CQ7KBV +138;7;MSG138-PK007 GhYq4CfR7XND5yAKWuuKZJIq/6vvCmyaJaaQiuH:1yQcMTz3KgETu4eBvaz1jCWrZCE.JxLkthaS +200;14;MSG200-PK014 ,F/J,Jz/tKTvSh dP9wnvxnVOr6E1njQ1jRPpIb.Su5eLS.Gq +141;11;MSG141-PK011 KX5nS1lsxa22 +74;8;MSG074-PK008 kMvcmEJ/NBwjNcLXwN8/3zT4xB0u9DDg.bENOLNY.KFwifP +124;1;MSG124-PK001 6HttJNl4SA297UC0rpas DQih4htL V09a +124;3;MSG124-PK003 aIgHsvvGg331cZGfWHXu7:20z_baAzny8V:6.g75X44TEoAls -UQt2H:B.0poATPIDK +124;4;MSG124-PK004 9t/6C3dUnjazTBTEPrP.hgd3yk:fe/ZFzjZXSC5BOgleA_fbZmQ.8zapxMJpuE +46;3;MSG046-PK003 5bIzyDzp/-A/JUZkqU bI7C4m:Vo91XcXLVTNM +192;10;MSG192-PK010 F:ss5IDDyya7baRxfG857up3Fkbs-T9z:YKDmGaA1Fn,-tCnAx.XCr4jPuO34vU88NjRFbVtcWgmb +26;9;MSG026-PK009 NPLDs_70B0SqGJ8o0l-s8zN/kBjeHQftTZCxi7LBU4G:ERt1:hZI3e25yCGM.yMwODWMZrgQQg54 +75;7;MSG075-PK007 MuXLO2DJ2:KV-BmbbySS.8rWyx8S +75;9;MSG075-PK009 g::dL2Xj5oblK8/xH7Tmp yfY1PhZ-:.U72ex7zp2cESgtNRbYzq7hStJl2GO +75;10;MSG075-PK010 NbcaboB4Hy5-I mc8E.wyxsPCC92vsAEIQfoRJp8,ZV7/13kfgecSlp:WuI,EBAM-kKhqYXClOSS +172;5;MSG172-PK005 vcMB24rhYk5PZ:7:1zZ4f6tNpyyMGRz80h88QO2twwA8Uv484O:_8a3K +172;4;MSG172-PK004 TyCVX8suLB/A-vHgppmZbnLSAbZSHym5ODfR,,WVegd6zTdd8MgouD2XWMt6R:w +172;6;MSG172-PK006 Xbo5vjtj.A3ql3R,1._-AC5T5Ykn:wkaQ,.iOC-vVOCG0k3PegRGbwRrcNT7J6K.kXEYm4 +17;3;MSG017-PK003 lbD0/fbFhjhq4xKfOSFLqY9pjjGA,TC4MULF:IO.n +17;5;MSG017-PK005 w47c4b7eT9B0hkJOi4xHJH,qDwsgDoex.4OfDhHGcTfES +17;7;MSG017-PK007 .s,zx6bvp1H8mqe3dvjq-:X2TqZELpRRnfjT5053L9rx-ktaV6WP4w-JmDM,Rg_:- +105;12;MSG105-PK012 cY0MN0ViQ7m tDgbr:.zJq/ILQPf8Nv-scz JIdgbiaQ3: +105;11;MSG105-PK011 nDm1Ov44za8rGbDYK:fbvTKb3IW62Ui s9,OCuoqAXPQ3LHnHzadjVaBxGbEgvr.CNzX +105;13;MSG105-PK013 _v.3 6DL.O3yU8qqzkOqZeU6KiO6O:pdejVNN6UiwHV E9I-ehsaCv_,g4_Xi9:E +105;16;MSG105-PK016 QUz5xbP0ca1LrawsU F17g5lfXcmkDaCruBuFTNCz,HOA3QZerX8N +105;15;MSG105-PK015 u Hbyo3K9IEHk/:oU52VkVhsm-ZHRrlMoUk80F- +105;14;MSG105-PK014 rZel6TKsY:_AvhkrItANye1k_IQZ9s4-S9zcrALL94k +88;8;MSG088-PK008 .2WlszR_ aRa9Afh9qG:OXFX2Z4ymBZw_YFA6QN cp +88;7;MSG088-PK007 7ClzntpzjxNzGWWXqozWwkQDJHbXajL1oqbRJKG5VCz2hd9L_nzyVEBF2Ji4So +88;10; +88;9;MSG088-PK009 /-pS1VWbLgw7KN67cXJkAER,_utIKqD +105;17;MSG105-PK017 sJ/HB2gWg6ykaSmTd6ih:j0VzR/UiUzthvDVEItJQbkOv/bg1H:0pO56BxIZZIv_3z:0-bnx1W +19;6;MSG019-PK006 o6caW1ZmTUNi3MDkX8cJPfsFwbq_tr8ehALV1u1ww_txUoud,ANZVHPddQd8es0fW:vumbSCl1io8 +42;12;MSG042-PK012 Cc Jn40OI0Xt-,yTm_WusRt5PZhavqFeqCKeVW75nxUkV_fHn_v +113;12;MSG113-PK012 NmaEimjVT 9gi/Cb8.Nc.xGSWbLDtdpzftqzFSIgFV +113;13;MSG113-PK013 9DVkPKWgX3h530I lsIALZCH:PL6RnQ _fdO-Ds28EZg3Dhj4_tl +113;14;MSG113-PK014 j2jhXSlOmB-tvv1tzWR-DJXgQt +113;15;MSG113-PK015 .ZKeM-7j::rk7/a,Y1mUGT_b2n_4gdkB0Oisxbi1zU5YnEZN5xQTWIwmv +44;10;MSG044-PK010 CC2V4W5tL0kgPileag8gn,UdwbVgtSK8uDwekbw8U8I6QD2P +177;14; +79;6;MSG079-PK006 KqismaeK0 8Tsk +93;7;MSG093-PK007 1mQu.0oPnU07Mc Gm4d2cmrS4hYdt:vsH4iN8g0 SYQecc +11;12;MSG011-PK012 Q7fn_NcNAPzyKJ/O4pItuJo +42;11;MSG042-PK011 :S2QBE899EczmW,9nu1nVK9tbnsHhrVLRPdhRLe.eA,Z6E_-9rNWmYBb +20;16;MSG020-PK016 XyJsUh8FCaPT9sIO O/zypLhy:.KFW2bMHAsLdd1kV7s5Wu4OnJ6Jz6KuqPcpgP9VsOWd +20;18;MSG020-PK018 9ffCDtr.OPXYc-L,d1ifzeAD aSkV-vYBt/aKIV- +20;19; +31;6;MSG031-PK006 7:QUbpjA4RCR:vpc8v:4_a8r7hD7o1n2d-o8tqzXG9 p/z R +31;7;MSG031-PK007 bvGLyrBYxupYeXWT +179;3;MSG179-PK003 4NdkBJw,wwnxv1imqF.I61dkC G5FwHAPwDJYx7 yJ5Lv_Ua1A2bW:EvgQBxs3T5 +136;16;MSG136-PK016 LjpPUZS92mcu__ +136;17;MSG136-PK017 tPx1jOxW-mgO2rRf2WfyXgv0OpWDOA9yqALxhcaG,1ZGOu3.d7Df +136;18;MSG136-PK018 xxSVPnY,O ,2k3I.hJuobcb2qpwAV:2AYE4AlI_hMJRx0WXJU7ht0pN-bG +136;19; +157;3;MSG157-PK003 aysclRukQRWHWesE:OTyxux.WGHoHmzHZ3Qd.KnNCXfWMyeyq4NAUdALcbDd +157;7;MSG157-PK007 nk3LS:m55_qqIpJc +193;10; +23;13;MSG023-PK013 2w4JOHBczZLW/7loqgD/o9Yrg_x/DqEg-jE/kR:/lHHQrwf2 ArCl_s4j2kP6vJRdebdd +70;0;MSG070-PK000 1MPGP.HM0S77pF5oSzGv7.Bw_7B +31;8;MSG031-PK008 lPho0MsXja9bBzUf_HuKBo/CrKL.iC +200;16;MSG200-PK016 BAPcJrJuIDSi/pPNHJRxDN 0U-OfiJj +200;15;MSG200-PK015 MY2r i79YgE/j 0S +54;13;MSG054-PK013 0/bz.AiCH3Phw O-2gF +106;11;MSG106-PK011 hf45V.Pkw-tp732hD/EH :3t0 +106;12; +132;3;MSG132-PK003 ONX5TCA4,qQ8KeP5y6XasVVs-cfqGYiLjsqRa +132;4;MSG132-PK004 /Hj:UX7:-ZBwnXvBr1T xGGGy-g44KHxkLQfN5H70KNmSg Q_Pzs3XqSw8l2LHGvG91EQ _KX +132;5;MSG132-PK005 9rdU1uSdS,UsoH9Hrig22JX72D4Ye7Xc3Lrhrt +9;7;MSG009-PK007 /CrYLsMVbspfaY/kNASB0-suxCGyoxg7 +9;6;MSG009-PK006 wGjDH0X5Z3OcXp/aif +79;8;MSG079-PK008 5Yq7FvURBu6N +79;9;MSG079-PK009 ErDajH0G29UdF:hPLkOvhB,nfpcJIBBeUfgEGf0ch:9Z.L:YVP_MtuSx74X_T7QU3LNsw, +79;11;MSG079-PK011 O/T-s63TMXiS CdF -P:nINq:z0/70oc6OdOYkmSTUmf,Mp_ZWnlV:di j.4q6bkx1. +35;3;MSG035-PK003 N4HhWHUBmO7gO6pk:/Y3MZB2QXpEyP,H6YaV7gxF98lHFamxudU3 +126;11;MSG126-PK011 o3cV.XhQcQT.mM6ntxVoQ9RB-foU-Ihq:mhGmnf7vzYuOMeLczF4AwXe +35;4;MSG035-PK004 PEuY6WxHv48EuC/RsfrExcmGai2yD +126;10;MSG126-PK010 n08/OTQ51aQ.8o5XBbtXJe-qm-JV/eZIQ +126;13;MSG126-PK013 wbtnFLthwJ1Bz.Ex-hx7BPDGpn4E4j7NU_ RXwP8IyAmo1J5/ZihQy2 +126;12;MSG126-PK012 L:2rhqWBWR_fbbGl0TNi1Sok3zzn7FCg.Z-E9,4gMxSpRwgEd1U1LV,NoNP +154;15;MSG154-PK015 fgLZb9S,mY1o515eJDmBrL2,ZP.k7K.OHSK_6tQClNjirJ55IU:X4rA9:jmKimlSp-JgWAPe.814_ +16;3;MSG016-PK003 v3EYyYg2qXwZO_u3Dmq.pYHuPAlld3btdkWdq6TxECMy/FWHgJkscn +16;4;MSG016-PK004 m c0j jA1WO5uxMbwepRS9au_Gpyd/c_-tBUoBdPrCkqIJ9zlSL7,3-ZyGwzJY +102;20; +102;19;MSG102-PK019 :ssMh._X2Zjn:4hb4Ibb1lfteyoVV377Oxo0zVuGJMTd53PN6:-mOVE/7 UpNrO.c,Lsuouay8B +126;14; +75;11;MSG075-PK011 Cry g/JJGX/OcnzlF.UMnNwCuZJP6fi85FD eig2UyZfSL kx8Dke/tXv97O1a3cMo.3XbUXZmkxq +75;13;MSG075-PK013 u54.AKg,yr.klX8l 5mpaCKfwg C3i,NO6Hn8i.I:achdblDEhvpJcGbklFunTjt7 sI +31;9; +58;3;MSG058-PK003 3I9FsUPh2QrdQCX4pqd5ueS9cDOPb/m1HJP3P5/k5HLxeOHhUk +58;6;MSG058-PK006 -GLJW1KU.xGNkDx-ilE4qIJ,u6PlIM:NcaNXRGZEtL.,c9F9Y91G8A5:fPFJsSom +58;5;MSG058-PK005 GTG7X:BL/4SvU0cKsKY2rO42hky:f8Qkl.ovnXTwVhpVQcNEnRc4j,Gj3J99Xymf +174;9;MSG174-PK009 EwhIi /-lbUxMaIBL9/vW/NS .8IwcoGmz8tAtff9rnA4-,eypz.pZ, +174;8;MSG174-PK008 _lkILkv-L7va2scKvTl9LIIWE2_wHNQ +174;11;MSG174-PK011 we-_E7,_RISUcuuzeWF1eMmLMvfeMDT9DuQC2Bwu_2xP/ +67;2;MSG067-PK002 LiC4EGRIqK9miSO_xxioQk4la5d3682zoAmY +67;3;MSG067-PK003 FwlemuRMZ5PiLT58fDm9aU2/qVzxfiIBQNVXyY8--D3 +67;4;MSG067-PK004 5yrdWcJrLsrjlwI5HBRg39vhA.9rpmrcB-t.yfnVaVSM 2k3hX-eEeNdaPI1_ckz +67;5;MSG067-PK005 SIQqk8nWgiEWLi 1OqcVMAYddj1 +50;5;MSG050-PK005 7rSJx3SLi3/Aw 3DOxCnv-yWyv62_c9fJxDT6Dk_VEjk2xky +50;4;MSG050-PK004 Pn1NIpOytodmmyh_OrBnTZ/vELxGbqsGYwY9kFubrOFGuE/24f58XdNrz/,2Y8Mg, rjf5 +50;7;MSG050-PK007 .7fzwBor_k4i:DTN4Orpju4O2F,BjlNAEnc/.ZuEg3QHddE/m-cF1MVlefqi.tMj +50;6;MSG050-PK006 KZzS6W.11qjEbPTjGJTJvuVQRmzyePiSLm0ATomd0,NRnD2DZT +38;6;MSG038-PK006 N/fw:DQJiQxg +38;9;MSG038-PK009 by5YkYPvx/a7LEO/nrPR997t3P,WLdyV/dOdjLp4nXQ9yirTYSl//4koN:2fhUfaxHIx_5 S7gDcs +38;10;MSG038-PK010 cZStxuDy0ApcXvfb,zcrHwX2rH5UE8KdP +38;11;MSG038-PK011 MGVCGQiJW2/1T-zI.zLDT2u1,B3YM_OEtd68U:8a-LFu0BGMF3R/eTdNOh +185;9;MSG185-PK009 C8fOwBbOZzXt1PPOqD.mE3QgL:LO:9TPtsSWl/f84rN3-:NiN +46;4;MSG046-PK004 z2_:UAHq:BeC67_BBkVcEvm-V1SUkdqQbY33:ZeZ6CM,18lM/2FsTlaD:QxNs8WvtnPTZ +130;2;MSG130-PK002 1Jadz5SPYhYZ2Jzd25y_ Oft94yXumL-j56 +130;4;MSG130-PK004 a,TTIeQUOWMHOsZKYUd8vAlFInm3t-MJ/CV RCiMa:mguZqDDAs0kFcbqf5bXL5AO:ecm8HNjl7f7 +130;3;MSG130-PK003 LwxjiKzmTa4f9nftftBKwUfZkDcD-1wpDuGfh7-r1AjBvHnmhgwqSm1CBHRBMxocVVnj/DpfDgT +130;5;MSG130-PK005 S-JyJl83RhF3cvkBcSpt7i:jh-HH0OrM:q2T +64;2;MSG064-PK002 Hb/-2knvV.cMMDhYO7 +64;3;MSG064-PK003 12DVqkQt19z5ojb5aY/0:3J1NmL8ESN2Qy7LxRwO64W/ 9CVlXXeCuF9dmHcTh4jSmWCsC +64;4;MSG064-PK004 LlYqc3x-lP0Ygyd/hSk_BHzJA0FP3:h_,4FK sLHm27Xsm/ LEc0K,MqzrY:EM_9dwQn1vfNSH:t +161;6;MSG161-PK006 EPK8TyVz.N1kwRPRwxjMZzq/8pj +185;8;MSG185-PK008 5QIFtp.2dGytNQ/vY.G:aPJFTlQhpozv8s/xTkwTl w:zET, +156;8;MSG156-PK008 apUBiXLy7h:Td8gd:GiP,xsm1ymbvpduSl_O_uD8mUH36_Ix9uk5.tRf7QCvb/kOC8AIgp +9;5;MSG009-PK005 pWf2JHquGaQ7tftPgM TjO:Cx_i.u1/ZlSCBQQULB:8boS5EFfPWoXGKd_V--5 fLyP-kmv//aiAB +26;12;MSG026-PK012 e4Kf,m4yq7gTUdDigbYKBMbApaJSqeB2f.KijMmCRwTSFVRsfUXjeh0 +38;14;MSG038-PK014 DPmk9MSTOC6e1r8xn16zF4 +38;13;MSG038-PK013 JvZTx6Ht3WxSog: +38;12;MSG038-PK012 zf75D sOISaEdi1rQSoTeqaMRcxmNARDir +38;16;MSG038-PK016 sVFZMUfswEnFGq8UV4W +38;15;MSG038-PK015 2d-G:p-4Yubh2Dk3EcERj3,hNQeQsq14Dm +48;14; +98;4;MSG098-PK004 kob7N3SRfZVEbwad2/ZSuyugMrcKusJ7bHu_L.OgjzZ9rLRcEsgc:O4PsiCuXMJWNCmcqord 3 +69;15;MSG069-PK015 1s5Sv N0gkfcZ48Lga7hi-BqV +121;4;MSG121-PK004 fSeBnw9EWwnm297kd:YYJ5Fhqzr7n8:T +93;8;MSG093-PK008 YisN30rQ0SisVi2r.dwWnJwt:L,KX _SpA2:jJcJIWDRefr5rl5nIpn +93;9;MSG093-PK009 AlCMG2d7-i-uRqnERurvBpiNxCkkUN95bG/-DkwcWeODRNFv-JSjqA/6_-Iz +93;11;MSG093-PK011 7Ue6 tj.c31ShQ2UVDJcgt3,k +53;8;MSG053-PK008 NAILskjn7RHHLQ9Kvk/MwMWE.oU +53;7;MSG053-PK007 XK/KIr6FDOYSqEj16Zvt8FQCENaXuhn02yFIhoHrlVYzGRw1BZv +53;9;MSG053-PK009 wG4APB:,VpUEah7OpHVj:CJ9wEgR7vHPzjd.lrGZME9/XvNAgjI1b21XodW0F5Nnsi_ +163;6;MSG163-PK006 QF588S6yhUXsjbG99n2 v0DErMu qpeQ_Yyg.qYemSSUelUPB-OAoyM-WN WZFJp4xnjQ/4x +41;4;MSG041-PK004 C- :--4WS2EjAXg1qrclmyWbJ9J5k +41;7;MSG041-PK007 8twJsq:JBNv9W0g_G3gk.eJbAzMajQC4EV:ZZ nSPHI1cSFtYf3 I +41;6;MSG041-PK006 C9IJP8QskDTzk9PSQu. J/6JliL:Xu24Ppp,2GQCI0TOjT3NoZ4:2 +41;8;MSG041-PK008 04t.UfvkTPBFc,6ROrluXx1HBVY9-IKYa5c9Rkm.i69VVitJMmNvRAm2 +113;16;MSG113-PK016 Y7DZytPnTElfHCcdLPCleevPfL5VL93l7n +186;13;MSG186-PK013 xaFQhT4E.Hdywk1roU OdzzdsGxBicu8I_9nbH.U0hZMXZ8A +186;12;MSG186-PK012 x5XsKDMcJSEMN1niu9.QY9SDPo +186;15;MSG186-PK015 5nN_,Ks8dWRPmgYOL kSEQt0HDClYXi MiJsM0L +186;14;MSG186-PK014 SAsMIMof.YP1S5IFFpe2cnYpMF_dYmi-I4pc8gUNwCbB +75;12;MSG075-PK012 zWzoHr.0m_Zp8OY3BGOJWJvwd1tRR:EgbzS/h6VZ +121;5;MSG121-PK005 16lXjF9en.pmc4zSSv,-GVps4 +174;10;MSG174-PK010 Oue.ARkxqxY_d_H/JaRWcY_XHwDN-sEzO_YY1KHzpKj-mP3X WZ1JoD08 r1/uCC qI +174;12;MSG174-PK012 KW7NnmjTXZoPANGpME4qBO +58;7;MSG058-PK007 hkpyUuWGqRAo53,b:T15OodV3B1 fMJ599oIeT57hrUckUVKGKe/P6PqVXB HII +58;8;MSG058-PK008 RBb5u88q:s8XP., +58;11;MSG058-PK011 MXF89ENPgFbw58rk6AjZuTfQTzu24sJN-F7sY7 E-:Ikv:34v. 9G,/XkgLc4WvWWOxKmO Cj-gs +58;10;MSG058-PK010 3wJKmalWTppwM1HfFint7mH3TSmksdyDhV +58;9;MSG058-PK009 HwKzUfh9Yn3TC9,7:GrJ n1KioXy2Qc8wRwSemXjS28:h9-sAg9 +157;6;MSG157-PK006 e_xsBQo0,guT44DN,O:lYp,uz,k-CAOx:c/81p4H5bXVw43ntGvsbzrlhmWlN.kp8 +157;8;MSG157-PK008 4CnuXSdh5QLf1DnqtPSQmp7v1Bm4w4rbXUSpL,A.0y2sgu3mzZ8sPxyo4eKVhz,LgDG9WCyM6 +44;12;MSG044-PK012 4nmolh_Vj/G02-PCvjFT0p.Ag6zJ/b +191;6;MSG191-PK006 -u-T9XILdymP1AY3hA3Ap9NvPf5mqAW39yq lLVepkIwI 1Db7de8Cw_8uw4bb8Mi5v +70;3;MSG070-PK003 ,MrONgT/K8HFL Rr-9uNQ6wxKRSLdJtpcboMZpo85:PJVAeS4WXq3wBEREbeqSSz +70;2;MSG070-PK002 cV4rpVielhdHLCber6 CrbWQYLs50yb:wWzvY41CmlNFkh6RD.8kJnIx3L +25;8;MSG025-PK008 uhQF7:,oB Pr_FqtdmrU +25;11;MSG025-PK011 aBSq,cmD6psJy2TPUXNq +192;11;MSG192-PK011 B4Ei1a_MfFGT::0S0JMLR:yJcU67cshsDzN0Iq5vdYP4ankjo0PHf6JSXE.k3z90BuSXZj.:G,jt +53;12;MSG053-PK012 0X2b1BTN7Yc Pkvlhl.LqXvrWNKn:cqJSLh.SDPZVERuJF86Qe51UP6C +89;15;MSG089-PK015 7D77V3LncNVre9qRIay,XHMkyEc-GOUtrVPLGqv-RjHlEYzsSO:3nEByB +171;11; +17;6;MSG017-PK006 KsdPUQ0V8LduVfLtdnBO--SBWetWkjC.1/p:g8:_4OIyLFQFUD6OoE40UkT.jU9D51 +17;10;MSG017-PK010 qzl_Ba3i Awe1HWES9:xMDL YT9LmCoK15PF2ow7OoSYq9 +17;9;MSG017-PK009 43,HlrJoTkCjPu.QJ6-jOe3m_Oy +74;10; +53;11;MSG053-PK011 vF/2iTVv_PI6P83B .vDdRO,98/AX43c8NmfVBI +113;17;MSG113-PK017 s5ot vMk /zEDBh2US5YiE +113;18;MSG113-PK018 lw/fSRi5xIFCol-3 +67;8;MSG067-PK008 .nbKPvOPFXsPU3kIImt5hihyqpQsGn,3oomN-DuGeZRr +67;7;MSG067-PK007 Z,4dUtj.Q.W:fHyHsbe-:sPP9-zfy9dB58AktgV0N_TAh6G_6jyGcSpJbOhjmF +67;6;MSG067-PK006 I,Aqha0eoVzQzdTCwS3wNcM,fH0JQPTmZAuKe +185;7;MSG185-PK007 WAgas7CQV.TIkrjfm3n0 +185;10;MSG185-PK010 95P3ohw2Q5teK_vq,czo97nLkFRZh-Z6 +188;8;MSG188-PK008 iRuXG2RoK..OcuAKOn +113;20; +58;12;MSG058-PK012 hx2U4:mLYCTOdkAVAikdoP-MVY4ClC9hfi7Jyl5U1d,Daxn4B6BE9fkamLv0ujuuHba1jA +58;15;MSG058-PK015 -1w0-G4fLsGi0.oLta4W/k4bf2/jHC2U8tC7Y0ngOGp6kPed,3bk6So/aa58Gw.KVU63 +58;14;MSG058-PK014 WtO8SbIvwNZHhXH.1o RHn_u,,noMmWhVcj,QT fvZ WPfHILlMJrH +58;13;MSG058-PK013 J8kideMRgkOFioP0h +58;16;MSG058-PK016 MpHAbtoUu5wU /Cz27Jg:nvfSIK7Y/dlwvRZqh/B1 +58;18;MSG058-PK018 hH8bq :du62HVoyagPgpP QM9A-aKx NdWu-v.Pa4uS +58;17;MSG058-PK017 hCVRTnOpY4Wj30tZSYyXgqUFW- yshswPJUfcXIc47A,m/zKphga3XPL-KEDdaJ3hCO1a/ +58;19;MSG058-PK019 QuG7kl4-8SbUpAp:Il-dTlLnqca,HfJViQ2B +58;20; +112;6;MSG112-PK006 8c9to82UhTCfHICl7MhYFUg9af4Kh7FE BPodazAl_1-E:PiGX +154;14;MSG154-PK014 AaWSG0CWb8RtUTxjNv6-UptOaf9of,u- +90;16;MSG090-PK016 XR316DhWf u,,uy0V50jH630T8p1GduuYoqzGGR5wIHl63I/x2mM:jdR9-jFA_c +113;19;MSG113-PK019 NArbg-RbiQ,w,Pa3F0vt/wuQbSF-YOylqzOI_HthHl:ILJ3ufIxNR,7x5ylFul +91;10;MSG091-PK010 GLC71tte21SHU11,gy4g4gigVU9TD.: +91;9;MSG091-PK009 7R35OD_00_jNRBqNlzz AywYMg_mMNKhsd_Lr7DTnqlO8.2GJ:u3kvbOs-5de +91;11;MSG091-PK011 8k. Q.lUp:2rEA7_Ih.7 +91;12;MSG091-PK012 Lf3Q3_Rehy4a1iM2Akgs +91;13;MSG091-PK013 alsYcV0uqZXuDXrgmDLsnG-,3Dds.Yq.okczpY_QyUiyS.x2F,K5:_:sMQp_,/oBBp tzq_u +98;9;MSG098-PK009 sCjdjekSTIbV HK_ cCk,m9I9Lc8xFs:VzE9FYszdQ4Ztg7vX0Fp/U.Rwm_3sVCTXBH/ KxrGA +98;8;MSG098-PK008 y98AZLso4Q8uv-cICYl4LxBg/3lk_g/n8MOQq5Oz,bdGoewzCXuWKkiYq 8gFD +98;10; +168;12;MSG168-PK012 X5XQAEZCFcl2U4xM +168;16;MSG168-PK016 d:IsoGSjge APwbeeXyzF8bhf gkBoVhJVrcS0m7KlTpTL,NX:H FF +42;13;MSG042-PK013 J eWy1kPr8YPKMMtbsuHtG/YyjF7E7jMUfCjo/etWWpHpF0aX +42;14;MSG042-PK014 0BLifCHkJlzi_nonNbRkDuOo4aNN5e.U1aJgX6mL.6:BicznHTXIO8qt6P8Ig6IdCB5HH:5aDF +42;16; +42;15;MSG042-PK015 25SDifS YElekd/ZQL0mvPCYeXKchJ4L_ +19;5;MSG019-PK005 cbCP2tHCP/6zTtysANxmd/fqSiPODAzMu2IDBTdr4pWd4AWg54ZzAWplw._pu +19;4;MSG019-PK004 6UQzHGcrp02Y g:h-Vc3e.P/ KQijlo/u-l7yj3J7 +19;7;MSG019-PK007 9,zqC-qsCkmZKnFCGxMQ7__I +19;8;MSG019-PK008 uYPb99SyZ5B6H4pJ-RRxGR 6mR_HiU2dqmD6opLqSN +19;9; +12;13;MSG012-PK013 H,WTKPhdfqUSdRWm2ST0ShFFENkiNoRvc/Pe62-1Ic8cOWXPm mAR,.RvMU3z, +14;5;MSG014-PK005 Vy4bCcJTylMCD,UeJ,AazYoJ.,vywiqiqHD_Jyc/G6a2gP30Jp_7,U_fCgJ1/5OaYyQkdC2 +14;6;MSG014-PK006 Fn8ERgQ_Ej4m5pkheWOiqh4hM3inhgLWZm0Db6X72mRd +14;7;MSG014-PK007 94xFrfhqN3-TNss8NRLVb_shE.g2SzzziRy87QQM1Qun6f,CaCD7BE9QWAZxaUbjT +14;8;MSG014-PK008 HwRFwzcwHmcrWoRAN6EVVv:3ipsqyy/WVO2Ffy/L +14;10;MSG014-PK010 DDA8D_77RkOy21A45dVrqNb,TRC12Z/MPcertQYWAYi/Xy8nQ5Mlvnwe dxziX +17;8;MSG017-PK008 SKvpKJ 4CvKHnDJsmA-vdf/y +17;12;MSG017-PK012 yNP2-cMJ6zmH8WL2lC0J9K/.FWc,YVn5CdYD5V9nNQskmvA FksZ8_Dh,G0NRt +191;5;MSG191-PK005 8Sc,DAoZ90HnS7fBd103:GP ,huo2wOYx7FJH6vzuZ3e:LUPT +172;8;MSG172-PK008 ICclfGCn-ishbc/C8S7dwZzSB9j67OgnA2A,8qI3Pg4C2B1oGa6vPtGd/uHl0PmRDSDCNL9No +172;7;MSG172-PK007 rGEARIG_KIqDdr .Tt19F3tLr-,jFLeCyS,s-Gx9UV7n-HWteusQEG3XLVlyCfx6wWbr7,ygP +172;10;MSG172-PK010 u/ 0VFQN,J-/N6drl 81qw +172;9;MSG172-PK009 wK:45PAudgb4o7lL9p/Ue94yNgrOg1u,z7gX:UKcQGN +172;12;MSG172-PK012 ,N.OMRbn6f4QALNX_t54ZUHSm-Ce6DWSmx9H_QNL3sUT3AS3PT/tKBcUwbY8FE5Cy__Xs +37;10;MSG037-PK010 L2uvJKVpcN0rOa0q1PX/Qosg1q51,wDOc4BGIrjqoM3VaxszL,7aKS,7rVo_Lg6dAD:rlL5sFy4th +37;9;MSG037-PK009 C,kkKtNycfdF6RF/tFjAsH3S.WWAq9/Hn z,0RjRA:rfmmJdXTu2YLx34CVis xJO +37;12;MSG037-PK012 BQy_nJ-B9N6OT.gzfbnZ_ +157;9;MSG157-PK009 t,hbfY7ZNE0J_:xOSpnjbZ/pofQFg8-DdnZw-_P69JM/Bc7TT:N. +157;11;MSG157-PK011 tqfaHHmW2IV7HW18uiPUJ-9r:wL29C5T0 +179;5;MSG179-PK005 udXkA:EAFP4:wV +179;6;MSG179-PK006 CbapkE9hf _jchoLtJFl1CHgo9HPp.U7JN:qlG9I.Hkqz-cJx5vgObjJrrC2nW +179;8;MSG179-PK008 j,vl4KSAAmJTFxlT/f/lLAwgsW8.Nw0ceYualDzT45PhlYKF0EwYQvzMFhb6Fjq-f7s9l +179;7;MSG179-PK007 uf.w6L-khJLCbL8-LVj.HJrQ-Is8O-oHon9jOD:_.YJ0YE2WwASE +179;10;MSG179-PK010 zBulvolFRrTVji2f50G9k5yEqFY.UoQk0LsapgJosihII,Wz:RgPg +55;10;MSG055-PK010 0FNipeH/Q415osXP9uispv /-UvHiZd:LmSQVy7Dh +29;11;MSG029-PK011 Z9,Xmf2Vva/_mI +29;8;MSG029-PK008 uikwtmwjVL-oV/t31/,ZMbno:PH/hXNNrafXw.,4 +26;14; +26;13;MSG026-PK013 .IqByKNVCcaY 6WuQPbBuSbj,BWOGqYxKn6/GxhxtCCNQmibef1fTFa0-GFbtolXY4CraKQ6Q +50;9;MSG050-PK009 JUoGOR.0-k6CJo/d +84;12; +109;5;MSG109-PK005 KFl5yzrqd0wJd7u6KBQ-UXBq. HFLrgQcuKhaTfAKShz5DVbwXwRu2i8VkUGl_rw.5ehsiB2lBv +109;4;MSG109-PK004 :dUg6MOmpQwL7j:4kcedzagFRr8Pm7w:YCqJN,.E2efs.MVTx.jLZm7v8dkoA-,q +66;14;MSG066-PK014 Za_0flcW2O.5.uNqV1UqBQGfMLRcDZy:zGWXc_pGL:YfrZQCxCjSzc9c7nfL:,_2c +163;8;MSG163-PK008 DY6oQr_At2Ku3txW1MaeiHn9ZwS3ytalcifJQW XUtYZ,nIYy4 +163;9;MSG163-PK009 9k,TCSYFAb.fb +161;9;MSG161-PK009 D-7lp_E.7Fyv3-80B57EhYeyYp9q_1bN57Eq Sx: +78;4;MSG078-PK004 hP3L6Wnv7:ptf7ZtJeTuuHr6P2o5F5tgk8cio5PQQY66L9FVo +22;6; +22;5;MSG022-PK005 G:0v.,qeAjVMo0WWMVdO zcB3s5rMYFscD4G Z77VA7q1gFsmLVgS7X3jLT-9f9 +160;9;MSG160-PK009 K9JFMo-8G5J7 +179;9;MSG179-PK009 UcVZp8bU1GaZ.v.W6ehWs1zUXgmFb3MZ5-8LtsKvIwSCG-Y25kn9T +124;5;MSG124-PK005 u-UKT_4ll0dqpC_2YinDN,Ps msbJuKc_w,KWn:p2NMDA8zdgeeZwkC +109;7;MSG109-PK007 l-3aSIqzjmvWrT5I-JYZ,NXPRd +161;10;MSG161-PK010 ilT:BGTxHOJ07 Rtlb:xnnKBcwd/09omn0gorX4REPBqv9d3S.v7kAE093UpMp1L_ppO,,- +161;12;MSG161-PK012 6ef44M_Snej5 +124;6;MSG124-PK006 zcgnZLWjjOTBe_17GYFjLRtz2qnby0jXQIC-LGpq3Cu1xD91AIPXu3AVAQqv66H:e 2Y0f0ONTv +124;7;MSG124-PK007 G/81jahOG/s8f1e6oBl7t-S-gta_ugZLXcq:_z0_U +124;8;MSG124-PK008 18QaMM1IAg,,xg7-gxu6C/f/-QC96N5XAdKRjeU/B N-2fhVMrUj:-3_gSSc 8-HDVc +124;9;MSG124-PK009 eP5Ca54 og/nFfV4RImcbzm0XtjAwz/pZUkHqGBsJut_Nb2LQADNUuM5Hn7zQ5n/x_VAErznS +124;10;MSG124-PK010 HhbWnIBOWFid/tExjopQb_xL-1lmMk0BTQS9.:IlKS6K9ESS6:O,X9jXCMI,65Ezkk4S5VFhLP +124;11; +69;18; +168;15;MSG168-PK015 TnLrcDEED9b-IWbE14O-KO,3NkO071Tnmk jnkw.,iWJURUJ/mrKKFruvc +168;17;MSG168-PK017 w7K67tgDCN.w_im/u 37wvJ1coFcGH7bM +112;8;MSG112-PK008 LXWXnH86z-rYI:lCFVqTJhdSLQDdNrnKEk10SoGdzYHfrl3. BBxW +112;9;MSG112-PK009 Pwn:y0sBd/k7sYc93lqJqgNH +112;10;MSG112-PK010 X2xDW5Gh.1V0edvwR dCMySVBIp8Xh9_ Y +112;7;MSG112-PK007 m_TpIi AJ:Ye5l6 OLUc UY.2dL ,ghl +112;11;MSG112-PK011 7GnSM2zBMMpelwdwiMzHsg4H.hiQU6vhSXOrv6kr1c7VegX6a-EA_::b26Ez:q.9-k4t +112;12;MSG112-PK012 dwA85cICiALTVi0 +112;13; +75;15;MSG075-PK015 39B.cf7Oe0:ryF8ECEJ7Klw3,.ZR5g5FVHZaUtk6AriFBaQ-4v-:bvuSQ,YBh-_/B,e4ib1qyk +75;14;MSG075-PK014 AYQ4N fnL-7pxb-CC_qWS2p8/WjrWZ0pXu65d +93;10;MSG093-PK010 avgm/ h1zssI +17;11;MSG017-PK011 42ZHgI CRfN50Cv/AoQqccWlQTig_AU/zu/YDLuVQ0BFbec:n.Y fuKMdDFeIp +174;14;MSG174-PK014 UMuPi.4oL479rWjElE,kgph8P +17;14;MSG017-PK014 QJ8AvaDBlssv8aPjgr-428PM.pEYWX8TN_O:kBvJs34 Gp3SwdU7S2ByWVwbz +17;13;MSG017-PK013 kn2jWqbu_pvz4oe2,v: r1ZbLp3LI_PVvsL_AV_G87AQrv:8bO1wt8iaNyzm/6Qmh7uiSCSbyJK2N +163;10;MSG163-PK010 y:5xmK65cd.r_0BbcaA02G7I3-vjrs 72OAfo 8fhDIU8J3OvFue/ewS3 +92;7;MSG092-PK007 TgB8mPdb9G-C-t3/shksesnOsZwg928U,O7n.35sVcd37F2R-5HsApSnobk, +92;8;MSG092-PK008 U..k:-E7Wc1i5jqTRh5SHzo9/u1IhzIINAJhx__QOkh-65n O3WFO ay.i/2_zuh +92;11;MSG092-PK011 Ks,A289JL yvLQ5oQUI3G8u6ZfHiwl9,o lXKINxyWBwI,fb +188;10;MSG188-PK010 SEYrw74Y4-Gpt1gwxZkA8mtnlXNwo:loHJ E.L/BCv3BCjUiLe0K_I-j3kKKIHcO9I44. +191;7;MSG191-PK007 8K0Y72EmudH:83.,PJ7FEaz6JJkn1poEg19Oosl/ +192;13;MSG192-PK013 h sH 05z_B-of74BoiJWaX2fBIGhgpL5s5BBV ,1CyCkYiJncF18pXfqBVSAAxQp4yjF1UeIQg +192;12;MSG192-PK012 Wq dSXY3 iv 1HWVpo48841b4/ +192;15;MSG192-PK015 g6d1QEak.KyLHuJtlVDFy/OFt4V:2VPjV: 4IC0ghk +52;5;MSG052-PK005 rHIaMzldb79mwEQ +52;7;MSG052-PK007 LGAu1lGsuah7tv4Y.EOu7-g.5O9nhByVBfbffh2BrR-285 +132;7;MSG132-PK007 ma1 T-T_:DJWsP/gLojioZ.ax.owQTIvUgIFMLr2qcI,lK/ +132;6;MSG132-PK006 Gdoh90_oDciaDPXkHGvyZpp26 H57AjCBImn9fs7rFQS8Ft.Y9i8,OhxI.yoseZjRR_x:A67T +132;10;MSG132-PK010 d0KrIDwkH7LDPGNoa,V_8 3:9 +168;14;MSG168-PK014 1OUL-/J SQVHmFxWcLLDOtsFhOZimTw s 5A_wasZGd70TSeD:Q.4vbhba +168;18; +163;11;MSG163-PK011 9nRpCrzMj-235IxGPhOYLi3OhU4iMC8H-ywtQJRD-aaWM0WZ bMbR6l +75;16;MSG075-PK016 o4uL:OWEGz2VgGn1sY6wIb.Wu,h +163;13;MSG163-PK013 KPy8ZhErnG.gsJtAOx.WXOV:nAsIDDXR,jY9Be +75;18;MSG075-PK018 ARUj1MlS0ZydzWzD-0N-ZQcg5LHAPwOail0UDYH7cY3 +161;11;MSG161-PK011 _o,QqybG0R/.3BFlxN5d8xeZ:/iL7.Lynw +161;13;MSG161-PK013 glJlPvaC-.tu0Q4pZsjBb +11;11;MSG011-PK011 70h_MO/cAQTitJdRW/vXxoNOeI0l,EV5MB:MwoVezl4.d9.tyR9:NP +122;5;MSG122-PK005 nJkjZ,A2NRfY,3kNZom67WWAkodz6yRt6B09MmyfITaH6GJrHy:D4Eab pA1Ooh3n:AQSH3HJ7o +179;13;MSG179-PK013 tOaC9,,0QPaDFW2ZOA/JJx2rkRJFQCgNp.. jp5gwzywjSB8eFb Mu +75;17;MSG075-PK017 7oaIQuf8k_ctwkFnYeOeyNXnl8E +75;20; +75;19;MSG075-PK019 JiOBSdcHzSj_JfWAtGZUmAs6kgeMnw2JE_H8dmucUgmXBEtFYqOCr2U povLnr-Bad2 +29;10;MSG029-PK010 0cvahaSzuRyYymaPfPwIF:EaTu1vhh5Y/3u63FDwA.XAB90k.RoZwY6nF3Nnajyt.u +46;5;MSG046-PK005 1U3Vzj8h- Begtlcs7AWWCvSX7AxvAK.5IBi2YampebM_3Yc +46;6; +17;16;MSG017-PK016 cQOvU_bZ1hiy.sIkw4fJz.0waNJSpR7l7lol +17;15;MSG017-PK015 J9YfGJhd86 w8neV +78;8;MSG078-PK008 Ad,_,diw.jwkuZBOoU39jewXvvPnzyO1q.KLD xx.GdmvTqhfHFx +78;10;MSG078-PK010 vrR8PgqwRFpux8vVIKUObFb5OqQG284tEW4 _yb4Ok0zaZ2xZ9Mbe6A7rvo,XJ/bBZiKTMGd +145;2;MSG145-PK002 ,tehWIENt_tF2DpZE-.-4cOq9Y.z5FQH_XZmKrOQNsPPSt_REz,ZP9VsGdDHmT-R +70;4;MSG070-PK004 : epCmoi4Sp EAUz0sLwpRlR2NNC,8i6iDPBS-khSJ/wQ3u9B2Jzzp3kta +109;9;MSG109-PK009 9LdP625zASuem_6Ylkg53zeu_22SFUjT7 +109;8;MSG109-PK008 /UikUNH5VbL2V +109;10;MSG109-PK010 ndFGZ24Eg.aHa:lw q,J3bfkplU31Epid-IVR6yC_msGcnK ZXYJH3lQ +14;9;MSG014-PK009 X-V,_7wPV:9,8IZeACz5EYBN2WuVGkrkL4_TDf7-R25730V,OIWdw4DHjTkL.-kJDmpjUezQzQGMJ +52;9;MSG052-PK009 qD Y0fIiKs2NBhx8fjC twspczUtNytvVelNYrHd63Qzg7/BL,Z6dg4.tNMZ3YWNC3aNA_ +176;4;MSG176-PK004 GkAlUZW14G3i1Yz,Cr--.YtT.NqawyGq +176;5;MSG176-PK005 srwMCbNOm/mVhL8/mFIXjQ9sK_4wCO7 +176;6;MSG176-PK006 /lY7Vu,98-KTmbh6L5mXI4byKiKqN6BT1pY8 QTG +176;7;MSG176-PK007 8bvu04.xKHyM5c24G8o3R31gm,7Ra ,HqpQ34FVt3b/vAdg8MXqvWH +176;8; +66;16;MSG066-PK016 4:u5U,8zhXiHYdk,GlWNd +66;17;MSG066-PK017 99WQHarCM8pKSoy5Iaq/u1T3RxCW9UXw6VGRHbDN-F5UTQEZMvxgH4eQGH,YT.zbi7Xv5hIE +66;18; +97;6;MSG097-PK006 XKL:i8TTqQDixSPrPddyg7z80gw8_8hzFroR.AZAfzq-S:27ICXcL.:_EEYro4Oa3fL7 +97;8;MSG097-PK008 ezqt1EaAg,.D,i0HsJZmsT /pvyyp1dzgxVZEklLcvmSAg-bKhu60j7 mv-FFqCJVGrsAk9,_ +15;3;MSG015-PK003 Jq2jGHWuZ6kG2s/AjIyV-u1tO3WdFjIp/o0iQlUQIsCJbmWCWnpw:N m: +161;14; +52;8;MSG052-PK008 1BCxKWT0:KiQL0zQp7O,AOi-Un,YXTU0P0bfDC5OtxYI_Gr +52;10; +64;5;MSG064-PK005 ZCIaGn4GH72RxqMZZ_Qo0wi9Vj7nFVsMPH6dPacT4HQ:f 11N/6_MoCFpw63f, +64;7;MSG064-PK007 O5q:bvEXO1w0fbbUdp:-baFaaQy6/tY:9utgyb6jhi2vvA7WYvoUIiSih5aq6rvNt +64;6;MSG064-PK006 byUFNn 2TN0nHmnnemL7Ckv.EO_GKbmr68jr4 nPX.Ryam5KI Gb:ayd/uvfZ +12;12;MSG012-PK012 s6npG ,Drdmgi,dwWPtMmj_,7zL, .HRce3pX5OW46eewMv +44;13;MSG044-PK013 _9nsiK8GJ5NXaLwF6n9G8xkH3k6x,R/g +44;14;MSG044-PK014 LJQ-H5LiEJaorB1aQ3x6QiAGWF_dotJ:KL9F2S0piU0ZrqEh7d1QG_ +44;15;MSG044-PK015 4w i/0uKM6T1yinqjAb x gY1jOMS-Q-ZWDT3PL +38;18;MSG038-PK018 bwaqW_F,eBNShvO.Z5 +38;17;MSG038-PK017 F3VCkeu99pnPc0so7qXRi5Bu-o2skg. DtumFYjP4B639odTr- +38;19; +78;9;MSG078-PK009 dym vIgB8SkB 1/H:oMnW,mLPita-I2SF-RlHf +78;11; +138;13;MSG138-PK013 tR86XorZahBGrvvVXqJZ,8PjYY0DaFj,tom2uMJvi1Wi +138;12;MSG138-PK012 j,AwyLuQpz.3p4OO1Pi6AHvZte2nLCH_VvdT:H6aRKjqKI _KB +138;11;MSG138-PK011 DyMAIjp.wUnJ/ZGdsvH.EhtsbM_4v:5NCKySXrpEp +160;8;MSG160-PK008 sy42NYDn,psSnYV2SDMGHftAbpDv b.Bef5kKsLN6Ym67cGO/1VwGGXg +138;14;MSG138-PK014 YrYe.RQ.z8pfAQQITA,,9EKp7NbG,kSrorpFS./,dGAsecH1_hg./3P39zzIV +138;15;MSG138-PK015 tabPxRYJuYuLR3 +89;17;MSG089-PK017 M7XAZynQYT-W1:nIgFI/GRJ +89;16;MSG089-PK016 g-xpBVwtjpjn_dBg.9BCAfiy_k2cuc-t0.ppIEAO_1wFV.bU:5 3.e60,gwJK1HIuzS:WI-I +89;19; +89;18;MSG089-PK018 jj8TW0lLN2XV_Ih:S8pg9fXomGbwvBR1bWS_QTwwUcMKB3cI/-K/Yi/n,KP4O4Z_q3B3be.8DgC2 +133;16; +133;15;MSG133-PK015 jsAKfG6vlj8GV2hs18iNeZtdXzi4WG5mGF30ea-X5 +138;16;MSG138-PK016 alLEMp/wKTy_aZ79tuMzDbYONuvCmclwOiqCC8c4heAhuwJv7BmYYEsJk.c-lJ9NiTrET.t.azjqG +93;13; +93;12;MSG093-PK012 j0_oJwo.VxEgdLJsuI07Zn00 +37;11;MSG037-PK011 zaoirtdg_L.IqXGAAB25Wc-vZ,kAWbQGK3rdV1JgoysHVlBVgajnQLYo8S:hgB:-eK +37;13;MSG037-PK013 Z:A9n3lnU_X2_2ok8X4T_zzu0 +37;14; +121;6;MSG121-PK006 84_c.3M70qRZ5vFzNXj7-m 9khuhA /3HopL5I8j6z::Z-G/ /0FuIX4l0/SS +121;7;MSG121-PK007 JyZmrnPpXBKR +138;17;MSG138-PK017 ksyB9v5MTDSSc3sMqeI 0ADbljvdOpJH_Jq7,V4jdpq5 +121;8;MSG121-PK008 -5sH:ALEg08LiY oqE:nB,X:/9-,wJz,qNB37RqzU1E7mc-4yzR1j +138;18; +12;15; +12;14;MSG012-PK014 :82ASjM.M3Oz1ZG-6xc_ +92;10;MSG092-PK010 eKxkhB4I5y2MU1,jukuM53MjPT8rpFikFW:Egv.u53 w +92;9;MSG092-PK009 :6rrH40lCN/,8WfmCnc/2qHUzkpO,nrXQr +92;12;MSG092-PK012 f/fWxIsF84Y9Ozq/Cm9RgU.:MoN-xJ1Loi:_aDIZ5fc2n2BH E-jdYF,a4vjV +109;11; +130;6;MSG130-PK006 kbzVuKnVKL6Q_jOaouc:A-vmi0yI,bpZUGp:E-IqB1Bm80l8BboNimmfL.aQ0 +141;10;MSG141-PK010 iDFwKotOK2amAEN/UyY:mh/ 628K05kH,lsUfF8henko0Oz89QK1wMfYnXAx.A0 4V,x/TGc7oMk +141;13;MSG141-PK013 h87-OiMUF.Ow-B:WWG7c-0E17GByPRWJtsDjMLf/i7wrU_hy q9.o0xB0LRXl7O9.HekAX2rth2B +141;12;MSG141-PK012 eS3gR7rBWK9NFaqb929kM3uzPno-uvvINR/pOx46ojEjSp539.tETUj +141;14;MSG141-PK014 DF,dOFel3O95tAc6KNR.zgSmrxdZy/4h5/lSxj:pW89QrV5KYHkT7Gb. +11;14;MSG011-PK014 A33REwj o7Pm4wNZinWP,hlBrast5/LX5zAOMM3Slb-ZqLhVgaToKdE +11;13;MSG011-PK013 4gqd8gnXgl2Yw5TNQz/k7ql7m6N78DCsHUYxQP6 di8oS97vKSq-nZn +90;15;MSG090-PK015 1x:A,K45Li,BCF1hog8/29XfVBKQeAQm2UNhYn-NWM,Wa_V5YN2dAWzv +122;8;MSG122-PK008 qGX7NusbU.Sv 8SpDaE Dt8vlMhxt3. +122;7;MSG122-PK007 /cml.gy:YQfAeXWZRR,RmHqz:kNcbZZ0ErqUo3 +122;9;MSG122-PK009 9oE7dQ8opDv4vDO20 +50;8;MSG050-PK008 yxiK9bAqcJyN,GBANNqnf0UifcLYaibLozpERUQ6Mrg8sqDT27qk Wj_,6 284ViB.97j +174;13;MSG174-PK013 H.YsCz_/,fMh3icuwi 493P3JG9y4dXDVX0f +92;13;MSG092-PK013 Pco8SvNhbj6UUdLEP5oKlt8 djUEy_,r/EvptE.pk Jfh,GCsXv/GBvC XfBOW8rJJsK9wru2K9t +92;15;MSG092-PK015 QBos1GSWW4T4eT9n9lUlCDCDUYvVRcpAQNohFHkjD4yrdqqek6Dwq3fY/Y01D +92;14;MSG092-PK014 QWm,T:BNIj6Cd.k-ksKsJov3CT,Vur--DtdC HedwD044/VkJSRINKINs7C s2yuDAG/B +197;8;MSG197-PK008 uAJpVdqnnUdQYdiSDQ9W +91;14;MSG091-PK014 dQM PTyxLoz1f9euMpJnb8m86-1,TAWbaJOMR,Kr,VD7B6Av +91;16;MSG091-PK016 bXjcUfhm nUF4tm79Ha:N84UBjpULPi1MBF:q_/EX7af6Gn1r T m6xyg4RS80mWOGmzaeA +91;15;MSG091-PK015 jLE1ufhmsS-VENgr c-TE.8c3HejA,IY,q2C WqHYiaQFocLM Kd +91;17; +185;12;MSG185-PK012 vGU6JHrarZnLH:mUjeD3TGqk J,efJ1xIEx,. 8ypw7r_FCYnO26C6,3nRfcn/qOYlu:qTPTit +157;12; +157;10;MSG157-PK010 e4_4qtBP.pLfu0SkjrdNUBlR7dyDcgIZGR39,TLYMbBcF7w40WB5R/NFxh1K5f:LbO/97A6NQo +154;16;MSG154-PK016 y161d5E3wNdyZ +35;6;MSG035-PK006 .v261rVa3ubfFZy-TZH0jK5IO An_B JjG.2eOObKAs13LBqqCGWmqmu/j +192;14;MSG192-PK014 mdbd-,shhr,DCpZWIWdTIm-HUKDTu +192;17; +192;16;MSG192-PK016 Q,90O5qGCS1 4pMjeD:X7owO4uAL_W2jNM,C.iI8n5vQNKFsy/f:T4sQ,I.ts.wj:W:trBosJ +154;17;MSG154-PK017 iHTq4Dq1nJkksF3zG-AKPt9g1tHFFZSEBFbuZVlM3xpCDXuo1S_VOYDbCAK-t0 +154;18; +185;11;MSG185-PK011 g7n yN XqFOMyJhQnXNBM,Y0u/8lNpYt1Wl3/0KzecSHrCBzW4TF69nRD0wf 6zaSxuj2Gr57R +200;17; +70;5;MSG070-PK005 rg4TeXWnqOY_QJLk1KEAmklOWONdvXqm_fYbF0FvDVpPvsl2TZlzh4E-4kL-LPINzda7 +70;6;MSG070-PK006 ZFzwUCF3zfQ6T7.WZh6hxRc6 +70;7;MSG070-PK007 -0VSArXG,InHixIbHz3_K-AOXgaaita- nXB:pBs9km.Cn/9qm0Qam:j7U61bn-e_ +70;9;MSG070-PK009 0w/lyKpDQdyzKZb8N1.4P5ML2OMG/so- Bwn +130;8;MSG130-PK008 oJkzF gI7vYroXEiR7 +130;7;MSG130-PK007 ml1ABJhp3ZFBmDAC8yZj,LH/.zV NI:Rzpr +130;10;MSG130-PK010 sMzikeb.uUBBNC +130;9;MSG130-PK009 cmXKVr34uNEL ekNv5mguW,Ns.cXYeI0E3KAhGI73, +130;11;MSG130-PK011 79iJ3-V5IMRu_uOgCAY7_ftv7yUS/685s-.4tR0y9M0WF.JeUOA x.V:BEjBNaFYf8 +130;12;MSG130-PK012 gx-:a,zyDgKgL,Ml2 +130;13;MSG130-PK013 LVuT6IvC,5xdHEBJQAcCVnJX/8:7oESdF_UIBz2YT_jF +197;7;MSG197-PK007 203vKl,Hqv/yctIS3Au6yy0wYmTVMHb69Imk1xeI2yN9Pgg7lnwQTmshHV2NghUf8hqevsOsM +197;9; +105;18;MSG105-PK018 l-ytRUkuWYi9/x4u6xoE3cY2cvqZDj0Tgo +105;19; +9;8;MSG009-PK008 yO 5QNtUO2vaOFC3JUrQ +9;10;MSG009-PK010 Uj_GWC_ZTS 9a.r4vDj-JBtxuUpD1Qo999Au0cFfqur-fshvHx_ZcKkB589v +130;14;MSG130-PK014 AM6QTag-2ieO7t1Ps.GYkPYPMDpcTka2U1_W4F_rvXQT +130;15;MSG130-PK015 0TsALDiJWR6L_i1L-MYxICpLzQ3bEGjiJ2xTQJnt.dJzbROBJhdN06K:cJnlMO6VBC +185;13;MSG185-PK013 4,dEuhqf6msSEJSG 9/z2a-xRWbcZuaieIYXA6mWVbRNmZpY.MlcCy8/elIhhK,ZIwvdu5RsA5, +64;8;MSG064-PK008 gsDEUU:.S6t-CHZB_m3kdSP +64;10;MSG064-PK010 xLK9earSofY5rNI2gU8 uK/9 K6XFg/BQ4q/dmhe1FI6Nk +4;1;MSG004-PK001 iEKDl3mm4vMdfPhL +4;2;MSG004-PK002 sD7G6Gb7Kuj4SM2G6MzX9nEWTLLcYJbg,KDTCyGrmfN4eUqlLP1wzqU:.IvG9LRo7jsCYUlYbH/ +50;10;MSG050-PK010 EYreUJNyEx5kOGd0D_O16brg7jTz6JxhSTSRCOIKe5_067.:/vrne +50;11;MSG050-PK011 4U /bJmcN209k_1GIt3qLM,hH +188;12;MSG188-PK012 LeQpG_C.CzrG8B60xq,W1RX986uds/SBtQpyKMcng4cIbOj48faj_r7/Rg/,6/w +188;11;MSG188-PK011 3kf224GjRXUJeA4HB.uTPm5sx8IBrZm/VzZzKIQZXn_ud3bc,N-W9hrZ7wjOWed4kg:MS9 +92;17;MSG092-PK017 b:./NykzI6FpcUB_: +92;16;MSG092-PK016 klcq:NA:yObFs4VyqXL.YyqhkFbYPzzvEYjmWWNojRlXLG0Qsy1V8t +92;19; +174;16;MSG174-PK016 GnF__8eAfOCzDpqlbLNbEqJagQYxS0luc8Bywi6Id0R4R1nZ,Brw6m +174;15;MSG174-PK015 -O:q4BI1O3Nk +174;17; +35;5;MSG035-PK005 PkQIRqXh4P3izCpdaYKFBtx3tq,577BAj1.eYZM9d4aAUgEWeQOv.M +90;18; +11;17;MSG011-PK017 bib0m:n5SCKGy +15;4;MSG015-PK004 Hb-tqsWIgVF16x4T7.KJ2_DNlN0O +15;5;MSG015-PK005 9,-/pZbya2/SF:f5v:CwjUr-Tg2,W +64;9;MSG064-PK009 ufx7-mJQHkjp8u-JR_M/9IGffw1x_YSc,xchcT6ck,KAP5PsqQSV1 +64;12;MSG064-PK012 NVeQXBz9f2Qni_nYpz/4USPJuw: +64;11;MSG064-PK011 B3x.9WS5UTSrQ-0PXUd2XI.9:vZN-8oCfggwRTHZHRF +64;14;MSG064-PK014 De,_E5An_ESNnvEHPwzwV_h +14;11;MSG014-PK011 Yuoq/19iXAqAN38uNz.6Jzas5iZF:Q 67flK6SMYw1Fw36XxmYfEuJ/LiB,0pVjn +121;9;MSG121-PK009 5qp-7nWzLO -H-D8LpBUDpqyH0v -C4gjqJ phlgC-EBCkku57GGRw 20WxMt-wz 3ZC5- +121;10;MSG121-PK010 Czy2HTNt4FUHm1YmJ_8md-u3.sqNShI8tnRSWEsRsV-. +121;11;MSG121-PK011 Gg/7ElDzntQ1aX +121;12;MSG121-PK012 8-TB:7HR,B3IpGr/ZKaokckvdgxkd41FW +13;8;MSG013-PK008 gcTHTuw.eiR3oDpC HRTfIt-ng46onnf.nvpAU +13;10; +191;8;MSG191-PK008 VwI,PChdFZF-evr, 1ibhq3dI9WHIWUWRF5nc7JwMKEOQ.V5iZ +191;9;MSG191-PK009 pjindA:rxU.2SeZ-gjElQnipgp5Q_GXq0A6bxHU/5R-V8Wt4oRGNhgou6ll0N +191;11;MSG191-PK011 p66vNOd_A1-BPvs,FpBCP,yNrSlannI97 +191;10;MSG191-PK010 R0oc7NsnuD2JPaX +191;12; +97;9;MSG097-PK009 2tiGp0BOhriKxkcWppHifXKPR.xadGiqIGTpWmN0QF7atB-8_ExCvFW44dVAMsTi,hpyO./lu +35;7;MSG035-PK007 y:M,MwuRY7. i-.:sqA5:9hQLiX_g +35;8;MSG035-PK008 24IXyEa4tzYpghs1kXZqam1PTO5.0JQ,_ZPPT,TmwG83JaagX:5R_1:qLhTj1WTGPntwGMHi-8Las +35;10;MSG035-PK010 468K/36UUoNi-2I_uza._qO_ +35;11;MSG035-PK011 v619L_Am4yaXZxBlVl:l7.tLsWURN1c1tEr6sC8p5.dtvD8 +35;9;MSG035-PK009 cF0yfMItB-0hwfQg/CdJiBIb3i8 rIRtIoAUXI:bMOf7ATW M-bP,CGcRfr3avGIsfDl +172;11;MSG172-PK011 U6nKWw.njk5Ynqa/Pci +17;17; +97;11;MSG097-PK011 dR4M k 4nOQ0L_WGEttHYXDn/mP/1azuXzGzgt3ucK-rGcoSsi5 +13;7;MSG013-PK007 sE3/ylM7s82covt4 8c5FzLYgQbn31,Le Z - Dh:c2OiI18o,S53cuKy8S4D.CR7qLX1U8uA +67;9;MSG067-PK009 ACcp16WRVX7FxCyX.NmLENKYvw.c HhOz +67;11;MSG067-PK011 VDhBhrJiCcbooAiK2MNxkKF79.dVQ +67;10;MSG067-PK010 5 wkd. x7KpgVkS6-kVRRlNTVv2GFOrrm9zqNsH:9v/huctj6wXOnF +67;13;MSG067-PK013 bxZMqAZwMR-/KWA5iJ7,Sd_cT6ii,:HNJght H-GvJND4AZX2gKN/Y6op/:j0i: +44;16; +14;12;MSG014-PK012 RZyYebGorP7 7ikF4r8JuvcmwLp/YvjbIt4TwBe/B4g_nXN4gagWzFVEzlc1 +14;13;MSG014-PK013 PyAY2pDBnTPwbZObXB6CiJVfiB0M,n/vGmPXrQwO9iQc5W-D.bDcp +25;13;MSG025-PK013 kz-f05nFg7DQkgKU:J MzZwozdc3xS/:T522G,dApaQzzZu4G3Y3tkTi:Er8cehIZ12mNQd +25;12;MSG025-PK012 D,Jhvh4k32c0DqqK:nROHuaCKeFhpcUZ,5V2NiV4SVK2wFG9nrG73aofhp-peAd0Dm5ZJl u2 +186;16;MSG186-PK016 :gnBFQjY.,0t6G_qk:-DgLCp7_3 +53;14;MSG053-PK014 zDh.VLKl:MF13gxczlC8guieE1 0,676E1R6WNTSMQh +53;13;MSG053-PK013 Pvu9wJ2PuAY,GgshC_RIe4ahHlRkqKs1O8OCRiz9WFQuK1jNq3vcIh-TscYFAH0ji:,:,y5s_w +186;18; +186;17;MSG186-PK017 p4yzNRey,UG53QcnJLTwo33nqxBq0/,Zqth3pNiAl2 +92;18;MSG092-PK018 kc sA/viqmfmUma1 +67;12;MSG067-PK012 xSZ3NjiBSb53LW5v5ZyB0.df4onK,OgTxqfmis9bKsqVCErAkMDBo0j3Z8NN0 f oo:Qi +4;4;MSG004-PK004 6dh9Z2n 4jkPsiqJPW:L6.3moB35D0R6Z1mO2OGVt8ilkl3mVq +4;3;MSG004-PK003 M0orfeM,omE/rX6V1t1m 0JeVB44EUmVThYJyp6lBcgQFqAiABDQsaJsqGwodqbTEPcwHgq +4;5;MSG004-PK005 9CnSVoJC2dIdxINRSaxsZisdl:BW16R +145;5;MSG145-PK005 lUvO0Xx_OtTCfwl09y/aM5058Fhk.A:KJhDhmgzLgxwQQhZi:8rqBTDgC +25;15;MSG025-PK015 nl0hudHmkEV-.5sok4c/.L-djZHM/rup5 +25;14;MSG025-PK014 aOFiOwfG.eM,Y:,Ciz74p1WLn0WmtB Kg 9IFDwP3xA-Lo +130;17; +130;16;MSG130-PK016 G3Tza twUQsiO5vDmH4RUU1.Hpyq:7QXbOY +64;13;MSG064-PK013 46LyWgHa_Qt4mHC1I8GAN9X_/B.1kYl:96XNO:hLyk1Oui5edPyir1cVO Mh +64;15; +195;4;MSG195-PK004 gLsd:Xqv6bo.V-zSnE9LpSm9 +97;10;MSG097-PK010 Zl_dNinxiqXpga2pgrX8I184- +97;13;MSG097-PK013 egPD1:g3ICOFwen8 05kuIGjiVCant,h +185;14;MSG185-PK014 dV9y4feO1p/e_C4bG1RC-7D0H8Mk +185;15;MSG185-PK015 O0Mahx q46glv7W +185;16; +4;6;MSG004-PK006 41IB-oS3oK :NfCYhaAMBrGLPpa,3wqW/D.TjYf3c6jO2Z1LoZcPv6Ul3nF3Z:kYNRCQvj-o:- +16;7;MSG016-PK007 rnP3CvlyV/agH +16;6;MSG016-PK006 g,,fJ1pp5vPXEcKca7KqZe/:fRci8m1MJOSZk +14;15;MSG014-PK015 zI9kUYWv842.3t9cW2kM/twGW7N6KW9jQr8ztyab.V Z1YVX Nj0epXuy3GS- VhX2FF9 +14;14;MSG014-PK014 eE4QrJOf_1KdDQRFAgFCW_Px4ai iygsAqlwAE +14;16;MSG014-PK016 Yk_y2v2GM./WN0lnSsIAYNav ami1:1K3vwVxrz x.o5BxzhxyH04nvkLkWpJ +70;8;MSG070-PK008 -nZ3Rk zjAk6LFoEPr 2xSRF 2Vil_qP +29;9;MSG029-PK009 BLxos3swjyxcNifKuG/BoK -ol85 +14;17;MSG014-PK017 _aW_I 8R2RVROEUZWhTQma6Zrdp:JFV58-0yaPc +53;10;MSG053-PK010 Oaryk1faGgx9v1-DrowhYkHLsVe7YW5.H +53;15;MSG053-PK015 OVAEg/ryFykAUiN_ORd7csWGc3r2bX4KnOpMN. +53;16;MSG053-PK016 Kg3P9vSveuDU.A67ouVx/H:kMTkXQiJOYL +53;17; +121;13;MSG121-PK013 rSTxdq.jBQrFF_:rRO 19XzguDT__YahhacJY_zTsMmRh61TuBzO9fon1 +70;10;MSG070-PK010 ANWVg1P12C IL9 kDNlv +25;16;MSG025-PK016 18O8lxyWkMZlku-,I +97;12;MSG097-PK012 RZ8DhynX5w_n-V/Ge6ELDkcT5BJY_37R +141;16;MSG141-PK016 am9JC_y75.S8d.H9h455hd +141;15;MSG141-PK015 F/4M5mXGMSZdshfQAFo +141;17;MSG141-PK017 NCgywcoHdk_JoZMxszV2dSA1uM- PK-vL_4ot1EKu16sIB9l +122;6;MSG122-PK006 6av,xsoN6Wqu__xJwbzmf-K2p4Sw1OB-5-/_Orp_YX6t4o_Pd.kN2FShbU9 +122;11;MSG122-PK011 o3LJwcs4_j-CxPwNM/SAn,w2qkSQ +122;10;MSG122-PK010 tgmzzvaU A7nJfwe ow98,olhm2GXf:s/rov4rYT6QUwFw 3,EAfu +50;12;MSG050-PK012 7gKLCd7FrNW2:9GhBhHD-m74.sHZuK7cK:pnyhl-2KFrFkHTWVm-p +163;12;MSG163-PK012 exyX2nmws.30:/w2HygvA ql8lw5E +163;14;MSG163-PK014 :RnCmFfB_0QS504pfXwdF1KZee796ET0IHH5V._1hE4f3IVHZY +163;15;MSG163-PK015 ,,Oy6F/yThP6WH/pd9A +11;16;MSG011-PK016 vgLdK kq.jJGqJJGbowt5VwHE x:eRkst,0XE4vASgHogv7Z8M8/DWX8Hs:3bK5WO:fm/T3I +11;15;MSG011-PK015 1tKqrbjcs 3rkr162x6-25XTCx2a,E.I0Uee9Vo9ks:J7_k_lF8jNgR/b8 +11;18; +16;5;MSG016-PK005 TVi5ve-G0L:TYdoxP2xTFjBVVsOpbObQB7PDi +16;8;MSG016-PK008 Os05p_:E9 JP9ClHLkTFAjj,hBbB +16;11;MSG016-PK011 mmMQ5 SG GU6bTMQ_9oI_cs0CsT,dF +16;10;MSG016-PK010 x.9NEvOivxQ6sb82QcwHjvbT +16;12;MSG016-PK012 Y1JNyf_Rp36SKob,s7t_LuM KiLb6fBKpg Na3TagGrSK.tlIsz3kL +79;10;MSG079-PK010 wl2XhTwy-nJ5jKxcCO6,5CpwGgLF_XBWsDi +50;13;MSG050-PK013 TW8LdQAWrOltApjRHniodrdWb nFZAg +50;14;MSG050-PK014 rO2pp0nONIs0k/JQOA4O/tZ:qVh/nINexyrySVDS-hAQv +50;16;MSG050-PK016 LzpYhBqVhDMF-:HIt6TtF2l,H1HRNTT6.ow5yn,Ks4n:DqsJduBAYq8Xn70IdJfJXRUmkuWD. +41;10;MSG041-PK010 /QV7BOtEs/UVScS M U.m0Zft:Hpy0vEBM4aMc7nGZ4mG, FLpSORf_B,KVZep +16;9;MSG016-PK009 nqCUX5-zZyiJ2vNns7noEc6xId8:5THpkT3BtY.3-Qg4IVmgW2yLyZwJ:,_3ngFoCogeIEi/mJCZ +29;13;MSG029-PK013 Mo07FK6_RAZ//nWL/dHLObv-YbPvpeuZr6fYZLhcwI/GT_nCayfQ9NE8HnS1Ebt5VbgaBfSXZnTA +29;12;MSG029-PK012 MS,wctYWVZ/XvTmrP5AN.uRPCI3b4Mrc4I8s02Mi4Y +29;14; +35;13;MSG035-PK013 P6-0_CyRT5b 4EmvBmPQRfO4eTql:9C_JJHfNV-/AnjNiN9gntDPgzZ/4oPY/je455/gsDMIT2 +55;12;MSG055-PK012 9y00PJ5U-7F9ihPysTh3,6pPyZ +15;6;MSG015-PK006 BN-e7 hTa6QMTnaSxZTbm3 zk:-t0p atGC8YVMU2x/In44urT3aTzoyKfrY1Q +15;8;MSG015-PK008 fagPBK8Jm3xG UQMombqQUU:VEJAXlnqpfy +70;11;MSG070-PK011 U1uf1,gEDBW4 6GNmeGz8po_xhbBJeFQ-x9o zrgBkb3YYK3Um.I8--,7:-M +35;12;MSG035-PK012 1,OOz:jf5A7-iTiP,hMV-XvZA.H-40A:ctc9ZktEZnxodQlmt_Xm-rd aZXepg6qC9ss +9;9;MSG009-PK009 jjc.dZBeH8tUYCLr7.-lYU.bEv-r5uws9TfC DiHVDfA_ +9;12; +145;8;MSG145-PK008 pEbS82neoUVpAyLmvziTgAF8 9G8M38E_1cbgyqeWYDj87oqtgMKqJpW1f v-TRyKQ SY:CL:xs +41;9;MSG041-PK009 e9cUPMHANC3/8,nR0wsaIg ZEMoSAU77pggopQG76DKHEjH/9rwT +41;11;MSG041-PK011 X6Ie 3w:OOmYtoUE +41;12;MSG041-PK012 h6qr//BIkBDSnyaj +41;13;MSG041-PK013 04iI_czbg6DU3UtXd-wRx1E8His._X2nlqqzvjHvPuWkn sQNYO5HIWVBxVOJKjo_m/RkBW5y +4;7;MSG004-PK007 75POt4i84MJhT.jN75ehVKjl.X7f5yP8.th5nRk.wfF44:_uUVKX0RgQiQmXKGtQksSNYqkNWQq +4;8;MSG004-PK008 rtjLm.:eRqWtuxv4f0UE4K5D/EN8yV47KW.:1uzr +67;16;MSG067-PK016 ywhVa2SfYXoQ_GISqBYGHjndeve/W ZeMh0sFxmUp7OpW8w0dR_3TDkIBIwwe +188;13;MSG188-PK013 ,U.9LiirAaJ74W36YBxSGe0q-AgGkTk9sHO/F.du GtlGFdYXKzOvjOSj-gqV22s:y H +188;14;MSG188-PK014 wIvfE:Zm368gco1b2/PN/06mxY v,bKD,mYvEK5EifmE:FUt +188;15;MSG188-PK015 CW_ _OXdTl,AxsT- +188;18;MSG188-PK018 sdP-b-dYMhgrfXbBle:ibb2CKR: +188;17;MSG188-PK017 oqyecZVpn-lkczB_/w/vwz4PzBMElyvj0qEYxIO.gncr7jJj2G6TlXn +188;19;MSG188-PK019 KNd4Q-LM,:wmC,gDsdwJxkpn1hdN8dIW +188;16;MSG188-PK016 bSMPgwy3nI98zPLP6lOFQO.snsh0Eb8t +70;12;MSG070-PK012 gWwCTmc/Ar,_YY_2:Msc +70;13;MSG070-PK013 vf40VmCBRwKV83gF1jdIv9gMOA_24Yis50 WtozQMPZiJD +70;14;MSG070-PK014 fNgdwJn5eBZGxF FBjAMtNiL4p-9Yuj98Lswmen,r,IrkRl9Rc 1Ek +70;15;MSG070-PK015 lJS9g2O/3.3uB4-V57m7pwiyl,W9a baqv42uJNRx4.LzabC,.f1K2RNl1M- IywaAsvWZ.8d +4;10;MSG004-PK010 6io,/c-EsL2aTE1xk:Ui:..cX8fXVGcTiSEnQrfTRw79xri6eLzfzfON-Y8GeyKTg +4;9;MSG004-PK009 3lC5Sd1gY.VEXkVCdOmQsreK8r85ak +4;11;MSG004-PK011 k2k3xLPnkPLN52v4S5fT3JhjZU-uds4eqiEUUXet5VV4jr +4;13;MSG004-PK013 vuPCS_KkGzJqM/l.vtvRfdkfHA1d,LM9FZM6jhu4197ARsOOSZ +55;13;MSG055-PK013 pzm0Y,7Ts9a4ot57n43BPb0Lw6udLA-m 07Yrv4esSNFjYDiO +122;12;MSG122-PK012 TKMyWi/d yiOtEGz r0V +41;14;MSG041-PK014 ,kHWrvdjH_FzFPIhmox4vAXbza-9YL79fb193nE7WsVa919 +41;16;MSG041-PK016 sY7b7JwpQFiFYrRvZarwo2d-6UJ-bsDzVD.Myka0U5EPk9NRGWBSpdukMgltFy +67;15;MSG067-PK015 wnxTW5qHgUURuPn,8K/T3PtZNtIB4Nt.rtdxqgJja1LZf6uWRuhnJ-71 +67;18;MSG067-PK018 WjXeN8Wjgt2UHLkfHz 7ev16eQbAP0vE5xJYIPYbL/TlkeZOYE +67;17;MSG067-PK017 .yZ LvYek Y8:5B._hpniAeSwtA:CUvsA7,QfIK:dYExHJZG0eJov1 +145;7;MSG145-PK007 LogN1:c2C6YYiHG:gXOD6CaiBmhQ6n3MCl:PX38MK5Q_Ysl: Q +145;9;MSG145-PK009 -gacmdA80kN7yAxqhZzCVCJnaEHTSShnHRAh Bgdwrag44 +145;6;MSG145-PK006 o/xNytBuQP6LLNQ1EV/CVGjhz +145;11;MSG145-PK011 vef7u6ab-UsRK0ze:2N3WxKyJoEHsQTLTVwtl3 rqFMdw6U6y2E6OPCrIWXZ,WjB0k +145;10;MSG145-PK010 ZQ8SF_fwnxcq_gujDwZJaknY1r-t4EhlTPTe +145;12; +15;7;MSG015-PK007 qoncqtS.bEgR2b39LK k2Ft-xFJoHF2z8n.xytDpqZeJys2czlgW0:NDCR29h +16;13;MSG016-PK013 PrzGr1zMNkM7xW3mr:4O.T7T27107dd1lrMF-VqLgYqZa7_6gkhInQmL9Qhp-gA_s,r +41;15;MSG041-PK015 .XCfCuXMQZG27MnkZePDcXGe +41;17;MSG041-PK017 dyeS0.5hMjqGWaQlYGDPAE5XHo6Z673hbXJCNP6Dk8EfDCwH15Q,HRoaMJ/fM4BolSXcRLu9g6 +41;18;MSG041-PK018 LS1R7t-6tvXAL.RIdAb.HW:S1b3Wx0iB_q08e4464V7fA0sWC,7x4ikh4E +41;19;MSG041-PK019 EgsBDGJWcZdWHDaZSqyR4/YPrNlr.RF9geWH +41;20; +4;12;MSG004-PK012 H5BK zprj5w4lOSiLMuwU-CpzrE,dUV7qliNY9:00jqOj +179;12;MSG179-PK012 ExZggBJrxYkHvj4Tu3Yk.Uhx:4byz,B1z0OsTK23fFzmHgIKeE +179;11;MSG179-PK011 izQ0t QLuGAjZFsPHhKzXVmmvF.6eiTdwGCLe055iOHFljSd8LxfjGl1Vqy2WEcL5YCF/O +179;15;MSG179-PK015 pcT_T-xREI8.nG6NFW-A62u2Vh,0HB,tBhu9aG_VMTHnHnnZ. 3:AfGaH +70;16;MSG070-PK016 sH1KAc.oCqtw +70;17;MSG070-PK017 JOV4DmKt22ws +70;18; +97;15;MSG097-PK015 T1POSFgGc9JzA:6u +121;15;MSG121-PK015 rB7t.lH_gtv-zR-7H6MIpqLcJF +121;14;MSG121-PK014 9Jaos271IrIOM 0,ktrM6tvpErS_d,Z +132;9;MSG132-PK009 m28bCpbPz,p:e:scOFy6,QCjt:J5GFCkUskZ3GGKRb7Gxj9_,_DdgS8TvQ,V-yWKrYZjb3Db +35;14;MSG035-PK014 BrO9B,.ApT,U5us4Dn-YAerlQVMuDDwMlWViSG/F3Xd7AMLX8GXwpSTKk Io2i4aRbu +179;14;MSG179-PK014 ZAxQbFY/r5WcF.bCK.OqfV7y3I98 +179;16;MSG179-PK016 EfJuiXSynUFceckn85XSf4o7I3uIqqk8OfAfpB/Iis.KOB7Fr +179;17; +4;15;MSG004-PK015 3rHUZUfZgyUKjX.5JpqmYVRUs +188;20; +15;9;MSG015-PK009 GSU5p3i91:.cvJqLfhyY,/-jv4-XXZIAxauBb-6.:HMCLIpvCf/ELfsJrIgFA/oaS +25;17;MSG025-PK017 l2oT2f,Fw KCQWTn6YxLf1KWXFH2dI5-Nti4btRnXsuTF +25;18;MSG025-PK018 rHY9t:4i2cilMjBoFTuA0nDB80aRxFfGP-mZQcvUJM,sHpm2OeyLJd1Zi89i_qH/faZ +25;20; +25;19;MSG025-PK019 WH2/FY4N.WNlPRHOgoprxh9UFWfSoj8k2hD/YA1OF0qm-HPVhW agdMrM:GwgL +35;15;MSG035-PK015 GA 5Kdqq/ZKEzdt2SdX +35;16; +172;13; +67;14;MSG067-PK014 7EFn__nO1,PKpBQJTR46d6h84hNV +79;13;MSG079-PK013 GnETcRJa50G9oXqIy0oylLQDKb7rc4/GS_JQ +79;12;MSG079-PK012 91bRIFQtZqiM5kaqFw,ne8FqR5UrpxEezM-hP0GAk4rkhJYAij:X6ci/,/AScOM +79;14; +121;17;MSG121-PK017 kcnf63tE .VS27ovBfj3,NCetnqd3ZEv35DV_K-F +67;19;MSG067-PK019 6wjZLrsqsSFGj4Q9Xl ZV uuHU__E33b, +67;20; +132;11; +132;8;MSG132-PK008 2ZfJRtD1rB/uveVbxT/htH2ydQD8/Nc:22.o/XJ_2J33OzUuF_U9muptu apmr +163;16; +97;14;MSG097-PK014 28HUb6i3sDtTr +141;18;MSG141-PK018 diMbnQrPhBfgYHXGm,FmzReKRX8uW:kimdLjGRj5Nh0H3zTkk +141;19; +50;15;MSG050-PK015 HLqTxJ8, 9GKJXHFeN2Kgg3bX/-rXM3q6UUA,7DTLWcmrpcGd7uUGTz3fl +15;12;MSG015-PK012 CdD2XsTKCXo +15;11;MSG015-PK011 WXcobfqFkIsbbnRkzr94uNQ9 +15;10;MSG015-PK010 Gc/nWGA4CPIAYt5D3Vs9l,x6xwy xKcNuw +15;14;MSG015-PK014 //DXk1:ClEUaAcU8rohSUrL6s1FAChrpsWd2Vgnj9udsUskFjb1tx8r:M80R4bKothew.ubY26H +15;13;MSG015-PK013 2:Qx2tMKSnI,VHjatsOsX59io2JslPqxXT +55;14;MSG055-PK014 fA3cYnOSexYiEGd8Clrth3X43ZPKaPDw +55;15;MSG055-PK015 UiE_eQ5CxoCW4 +55;18;MSG055-PK018 crjuL352Hs.otS:yYug6I-HPjwXataFCkH3V1T,p1YT -mBcKShME.YLmYITf:XsP +14;18;MSG014-PK018 ys_.eq,lM7v5o9EFBvln3duPXJCG8pr/ lQCiRWW3DCHoLlol +14;19; +55;19;MSG055-PK019 mBUU GPYp.bP.zFNe_CVIJs8-:T-pwb3XVWzwV1s63urE1/Ekw8RDGp/ASR8eur- +55;17;MSG055-PK017 FtsqH5f-manI:nv4j/IfGF5MprZ-o Fbb_cP-bQ-fpIcyBKdReogRW +16;14;MSG016-PK014 FAn8d.4YhpMZ9xEH4p3scxsE +16;15; +15;16;MSG015-PK016 .m.tdW9eLut7klDBsu.__R5qRLU3fXEAjt,mbsNl,m6OvLuiJUTljw6H8G4rp fU +15;15;MSG015-PK015 Yxj79OZWvgV2yInnjUQdEKuniBbNyzeEIkf9fgOl +15;17; +4;17;MSG004-PK017 rnEFg:CDgm0Q8mrau089zKPKhlD/ew1weY,xLebMnQK6:, +4;14;MSG004-PK014 LX1FuPOyu,-7,N,clY +4;16;MSG004-PK016 rPOuYMR.-/ M8cVQo1Nd8HDg9v:WsFeoyc4O1t0A0.8hr_AP9:WOw6/RTH9yFJMCMKA O9SJKpWYS +122;14;MSG122-PK014 3M_hdprPEeRBxoTXz1dLaqKSk9kMJOq.EjQDE.0bneVwqx4PzJP_9T17NN +122;13;MSG122-PK013 gH:w7YKszy0AaoM7wdbfkrU6D,/vpfQZ6DB-e1XQqT08cRVzLyOFUZRhr29kOFJOQ9IaLGu9kif-z +122;15;MSG122-PK015 p,CqqYV9kkLk-9AL,67-NtWO7_NDWwei9mojGxFhiD5sWhDMZzp5-axFZ F2C32p45ecn6IQz/:Fq +122;16;MSG122-PK016 CThjj-jcupgShxP +122;17;MSG122-PK017 HTPvi:bORLH_3EM9i-CxQeYd/ng.NPw91l/bwHt9IBJk:HqIBPcH-oL +122;18; +9;11;MSG009-PK011 ncz_.1tmw8e/.pl9qa3_1Vf:2D9W +55;16;MSG055-PK016 U,bUuVeZ/,ILlqyR3wOYtZFO3deXxQSiUl95Ujz8_GQBiw6zIGQ:ci,2 +55;20; +121;16;MSG121-PK016 uGUv_VwCLK1DB +121;18;MSG121-PK018 .Cv:tDCi98,D3LEAOHYl8RR8O,gWW.WWgXTd9VX1A/YwCy/Ijfj7S/aJV11gBO2x +121;19;MSG121-PK019 oJ06N6htA7UZnfGxJHZqMl2,I7J:TDXfH.zo-rinpM_Ve2n42FGJc0e: +121;20; +97;16;MSG097-PK016 Ftbm8ieYz :jp3_FBRHyJQ,jrKhB +97;17; +4;18; +50;17;MSG050-PK017 v:r41 9IxAAOHBD6yr4_B1xkSpfbrWa 4viGyG_XWRB,iUT8FodTxayi6 +50;18; diff --git a/examples/fragAssembling/driver.sml b/examples/fragAssembling/driver.sml new file mode 100644 index 00000000..1d6a24d3 --- /dev/null +++ b/examples/fragAssembling/driver.sml @@ -0,0 +1,101 @@ +signature SERVICE = +sig + type serviceState + type conn = int + val service : serviceState * conn * string -> conn option * serviceState + val emptySs : unit -> serviceState + val timeToGC : serviceState -> bool + val copySs : serviceState -> serviceState +en + +signature DRIVER = +sig + val run : string -> unit +end + +functor Driver (structure TcpState: TCP_STATE + structure Service: SERVICE) :> DRIVER = +struct + open TcpState + open SimpleIO + + exception EOF + + (* read line from file. (msgID, packetID, data) *) + fun read is = + case inputLine is of + NONE => NONE + | SOME line => + case String.fields (fn c => c = #";") line of + (msgID::pkID::rest) => ( + case (Int.fromString msgID, Int.fromString pkID) of + (SOME msgID', SOME pkID') => SOME + (msgID', (pkID', String.concatWith ";" rest)) + | (_, _) => NONE + ) + | _ => NONE + + fun loop is (arg as (state, ss)) = + let val arg' = + case read is of + NONE => raise EOF + | SOME (msgID, packet) => + case insert (msgID, packet, state) of + NONE => arg + | SOME state1 => + (case extract state1 of + NONE => (print ("state size: " ^ Int.toString (stateSize state1) ^ " bytes\n"); + (state1, ss)) + | SOME (msgID, msg, state2) => + let + val msg' = msg ^ "" + val (connOpt, ss') = Service.service (ss, msgID, msg') + + (* Double copy GC on the assemlber state *) + (* val state' = if stateSize state2 > 10000 then *) + (* let val temp = copyState state2 *) + (* val _ = forceResetting state2 *) + (* val _ = forceResetting state *) + (* val _ = print ("state size: " ^ Int.toString (stateSize state2) ^ " bytes\n") *) + (* in copyState temp *) + (* end *) + (* else state2 *) + (* val _ = print ("state size: " ^ Int.toString (stateSize state') ^ " bytes\n") *) + val temp = copyState state2 + val _ = forceResetting state + val state' = copyState temp + val state'' = + case connOpt of + NONE => state' + | SOME conn => closeConn (conn, state') + (* val _ = print ("state size: " ^ Int.toString (stateSize state'') ^ " bytes\n") *) + + (* Double copy GC on the service state *) + val ss'' = if Service.timeToGC ss' then + let val temp = Service.copySs ss' + val _ = forceResetting ss' + in Service.copySs temp + end + else ss' + in + (state'', ss'') + end + ) + in loop is arg' + end + + + fun run file = + let + val is = openIn file + val state = emptyState () + val serviceState = Service.emptySs () + in + (loop is (state, serviceState) handle EOF => ( + closeIn is; + print ("Service loop exited\n") + ) + ) + end +end + diff --git a/examples/fragAssembling/profile.rp b/examples/fragAssembling/profile.rp new file mode 100644 index 00000000..b0d3b4cb Binary files /dev/null and b/examples/fragAssembling/profile.rp differ diff --git a/examples/fragAssembling/region.pdf b/examples/fragAssembling/region.pdf new file mode 100644 index 00000000..b603fb08 Binary files /dev/null and b/examples/fragAssembling/region.pdf differ diff --git a/examples/fragAssembling/region.ps b/examples/fragAssembling/region.ps new file mode 100644 index 00000000..ee6983a0 Binary files /dev/null and b/examples/fragAssembling/region.ps differ diff --git a/examples/fragAssembling/regionBGC.pdf b/examples/fragAssembling/regionBGC.pdf new file mode 100644 index 00000000..c0b143a7 Binary files /dev/null and b/examples/fragAssembling/regionBGC.pdf differ diff --git a/examples/fragAssembling/regionCT.pdf b/examples/fragAssembling/regionCT.pdf new file mode 100644 index 00000000..b318ee93 Binary files /dev/null and b/examples/fragAssembling/regionCT.pdf differ diff --git a/examples/fragAssembling/regionDB.pdf b/examples/fragAssembling/regionDB.pdf new file mode 100644 index 00000000..56476df9 Binary files /dev/null and b/examples/fragAssembling/regionDB.pdf differ diff --git a/examples/fragAssembling/regionF.pdf b/examples/fragAssembling/regionF.pdf new file mode 100644 index 00000000..ea61fae7 Binary files /dev/null and b/examples/fragAssembling/regionF.pdf differ diff --git a/examples/fragAssembling/regionFunTest.pdf b/examples/fragAssembling/regionFunTest.pdf new file mode 100644 index 00000000..f68ba654 Binary files /dev/null and b/examples/fragAssembling/regionFunTest.pdf differ diff --git a/examples/fragAssembling/regionGC.pdf b/examples/fragAssembling/regionGC.pdf new file mode 100644 index 00000000..929d686f Binary files /dev/null and b/examples/fragAssembling/regionGC.pdf differ diff --git a/examples/fragAssembling/regionMerge.pdf b/examples/fragAssembling/regionMerge.pdf new file mode 100644 index 00000000..922a98bf Binary files /dev/null and b/examples/fragAssembling/regionMerge.pdf differ diff --git a/examples/fragAssembling/regionModule.pdf b/examples/fragAssembling/regionModule.pdf new file mode 100644 index 00000000..d08ab635 Binary files /dev/null and b/examples/fragAssembling/regionModule.pdf differ diff --git a/examples/fragAssembling/regionModule10.pdf b/examples/fragAssembling/regionModule10.pdf new file mode 100644 index 00000000..ecf56a22 Binary files /dev/null and b/examples/fragAssembling/regionModule10.pdf differ diff --git a/examples/fragAssembling/regionModule2.pdf b/examples/fragAssembling/regionModule2.pdf new file mode 100644 index 00000000..4e5be8b6 Binary files /dev/null and b/examples/fragAssembling/regionModule2.pdf differ diff --git a/examples/fragAssembling/regionN.pdf b/examples/fragAssembling/regionN.pdf new file mode 100644 index 00000000..6bfc5838 Binary files /dev/null and b/examples/fragAssembling/regionN.pdf differ diff --git a/examples/fragAssembling/regionNF.pdf b/examples/fragAssembling/regionNF.pdf new file mode 100644 index 00000000..1b1be67e Binary files /dev/null and b/examples/fragAssembling/regionNF.pdf differ diff --git a/examples/fragAssembling/regionNoGC.pdf b/examples/fragAssembling/regionNoGC.pdf new file mode 100644 index 00000000..2f757f23 Binary files /dev/null and b/examples/fragAssembling/regionNoGC.pdf differ diff --git a/examples/fragAssembling/regionSS.pdf b/examples/fragAssembling/regionSS.pdf new file mode 100644 index 00000000..1992a3c0 Binary files /dev/null and b/examples/fragAssembling/regionSS.pdf differ diff --git a/examples/fragAssembling/regionSimpleIO.pdf b/examples/fragAssembling/regionSimpleIO.pdf new file mode 100644 index 00000000..68ce1d38 Binary files /dev/null and b/examples/fragAssembling/regionSimpleIO.pdf differ diff --git a/examples/fragAssembling/regionSsGC.pdf b/examples/fragAssembling/regionSsGC.pdf new file mode 100644 index 00000000..153930e6 Binary files /dev/null and b/examples/fragAssembling/regionSsGC.pdf differ diff --git a/examples/fragAssembling/regionUB.pdf b/examples/fragAssembling/regionUB.pdf new file mode 100644 index 00000000..02af6807 Binary files /dev/null and b/examples/fragAssembling/regionUB.pdf differ diff --git a/examples/fragAssembling/regionUBB.pdf b/examples/fragAssembling/regionUBB.pdf new file mode 100644 index 00000000..e5d63407 Binary files /dev/null and b/examples/fragAssembling/regionUBB.pdf differ diff --git a/examples/fragAssembling/regionUBGC.pdf b/examples/fragAssembling/regionUBGC.pdf new file mode 100644 index 00000000..6afc5a1d Binary files /dev/null and b/examples/fragAssembling/regionUBGC.pdf differ diff --git a/examples/fragAssembling/regionWhile.pdf b/examples/fragAssembling/regionWhile.pdf new file mode 100644 index 00000000..740263dd Binary files /dev/null and b/examples/fragAssembling/regionWhile.pdf differ diff --git a/examples/fragAssembling/regionX4.pdf b/examples/fragAssembling/regionX4.pdf new file mode 100644 index 00000000..9c3a1862 Binary files /dev/null and b/examples/fragAssembling/regionX4.pdf differ diff --git a/examples/fragAssembling/regionold.pdf b/examples/fragAssembling/regionold.pdf new file mode 100644 index 00000000..acbfb40b Binary files /dev/null and b/examples/fragAssembling/regionold.pdf differ diff --git a/examples/fragAssembling/regiontailLoop.pdf b/examples/fragAssembling/regiontailLoop.pdf new file mode 100644 index 00000000..e69a7060 Binary files /dev/null and b/examples/fragAssembling/regiontailLoop.pdf differ diff --git a/examples/fragAssembling/service.mlb b/examples/fragAssembling/service.mlb new file mode 100644 index 00000000..c6abf1a3 --- /dev/null +++ b/examples/fragAssembling/service.mlb @@ -0,0 +1,3 @@ +$(SML_LIB)/basis/reml.mlb +size.sig +service.sml diff --git a/examples/fragAssembling/service.sml b/examples/fragAssembling/service.sml new file mode 100644 index 00000000..1c484610 --- /dev/null +++ b/examples/fragAssembling/service.sml @@ -0,0 +1,90 @@ +(* + * service.sml + * + * Maintains per-connection partial prefixes until a message is complete. + * A message is considered complete when two newlines: "\n\n", are found. + + * When a message completes, it is printed to stdout and removed from the + * service state. + *) + +structure Service : SERVICE = +struct + type conn = int + type serviceState = (conn * string) list + + fun emptySs () : serviceState = [] + + (* removeConn removes the entry for connection c from the state, if it exists *) + fun removeConn (_: conn, []: serviceState) = [] + | removeConn (c, (c',buf)::rest) = + if c = c' then rest else (c',buf)::removeConn (c, rest) + + (* lookupConn looks up the buffer for connection c in the state, returning + SOME buf if found, or NONE if not found *) + fun lookupConn (_: conn, []: serviceState) = NONE + | lookupConn (c, (c',buf)::rest) = + if c = c' then SOME buf else lookupConn (c, rest) + + (* addConn adds chunk to the buffer for connection c, or creates a new entry + if c is not in the state *) + fun addConn (c, chunk, ss) = + let + fun appendChunk (_: conn, _: string, []: serviceState) = [] + | appendChunk (c, chunk, (c',buf)::rest) = + if c = c' then (c, buf ^ chunk)::rest else (c',buf)::appendChunk (c, chunk, rest) + in + case lookupConn (c, ss) of + SOME _ => appendChunk (c, chunk, ss) + | NONE => (c, chunk) :: ss + end + + (* Check if string s contains "\n\n". Returns SOME s', where s' is the string + up untill "\n\n", and NONE otherwise *) + fun findEnd (s:string) : string option = + let + fun go (i:int) = + if i >= String.size s - 1 then NONE + else if String.substring (s, i, 2) = "\n\n" then + SOME (String.substring (s, 0, i + 2)) + else go (i + 1) + in + go 0 + end + + fun copySs [] = [] + | copySs ((c, buf)::rest) = (c, buf ^ "") :: copySs rest + + fun timeToGC`[r1 r2 r3] (ss : (conn * string`r1)`r3 list`r2) : bool = + let val total = Region.memoryUsageOfRegion `[r1] () + + Region.memoryUsageOfRegion `[r2] () + + Region.memoryUsageOfRegion `[r3] () + val live = Size.size (Size.list (Size.tup2 Size.int Size.string)) ss + in live * 10 < total + end + (* fun timeToGC ss = false *) + + (* fun timeToGC `[r1 r2 r3] (ss : (conn * string`r1)`r3 list`r2) : bool = *) + (* let val total = Region.memoryUsageOfRegion `[r1] () *) + (* + Region.memoryUsageOfRegion `[r2] () *) + (* + Region.memoryUsageOfRegion `[r3] () *) + (* in if total < 1000000 then false *) + (* else *) + (* let val live = Size.size (Size.list (Size.tup2 Size.int Size.string)) ss *) + (* in live * 4 < total *) + (* end *) + (* end *) + + fun service (ss, c, chunk) = + let val tempState = addConn (c, chunk, ss) + in + case lookupConn (c, tempState) of + SOME buf => + (case findEnd buf of + SOME s => + (print ("msg is: \n" ^ s); + (SOME c, removeConn (c, tempState))) + | NONE => (NONE, tempState)) + | NONE => (NONE, tempState) + end +end diff --git a/examples/fragAssembling/service_driver.mlb b/examples/fragAssembling/service_driver.mlb new file mode 100644 index 00000000..5a341881 --- /dev/null +++ b/examples/fragAssembling/service_driver.mlb @@ -0,0 +1,10 @@ +local + $(SML_LIB)/basis/basis-reml.mlb + tcp_state.sig + simpleio.mlb + size.mlb +in + tcp_state.sml + driver.sml + service.sml +end diff --git a/examples/fragAssembling/simpleio.mlb b/examples/fragAssembling/simpleio.mlb new file mode 100644 index 00000000..ab72bacd --- /dev/null +++ b/examples/fragAssembling/simpleio.mlb @@ -0,0 +1,2 @@ +$(SML_LIB)/basis/basis.mlb +simpleio.sml diff --git a/examples/fragAssembling/simpleio.sml b/examples/fragAssembling/simpleio.sml new file mode 100644 index 00000000..d1268c32 --- /dev/null +++ b/examples/fragAssembling/simpleio.sml @@ -0,0 +1,36 @@ +(* A simple I/O library *) + +structure SimpleIO = struct + type instream = {ic: int, name: string} + + exception CannotOpen + + fun getCtx () : foreignptr = prim("__get_ctx",()) + + fun chr_unsafe (i:int):char = prim ("id", i) + + fun input1_ (ic:int) : int = prim ("input1Stream", ic) + + fun input1 ({ic, name} : instream) : char option = + let val res = input1_ ic + in if res < 0 then NONE + else SOME (chr_unsafe res) + end + + fun openIn (f: string) : instream = + {ic=prim("openInStream",(getCtx(), f, CannotOpen)), + name=f} handle exn => raise Fail "openIn" + + fun closeIn ({ic,...} : instream) : unit = prim ("closeStream", ic) + + fun inputLine is = + let fun loop(acc) = + case input1 is + of SOME (c as #"\n") => SOME(implode(rev(c :: acc))) + | SOME c => loop(c::acc) + | NONE => case acc + of [] => NONE + | _ => SOME(implode(rev(#"\n" :: acc))) + in loop([]) + end +end diff --git a/examples/fragAssembling/size.mlb b/examples/fragAssembling/size.mlb new file mode 100644 index 00000000..cf850f48 --- /dev/null +++ b/examples/fragAssembling/size.mlb @@ -0,0 +1,3 @@ +$(SML_LIB)/basis/basis.mlb + size.sig +size.sml diff --git a/examples/fragAssembling/size.sig b/examples/fragAssembling/size.sig new file mode 100644 index 00000000..4c84c690 --- /dev/null +++ b/examples/fragAssembling/size.sig @@ -0,0 +1,21 @@ +signature SIZE = +sig + type 'a sz + + (* Primitives *) + val int : int sz + val bool : bool sz + val char : char sz + val word : word sz + val real : real sz + val unit : unit sz + val string : string sz + + (* Combinators *) + val list : 'a sz -> 'a list sz + val option : 'a sz -> 'a option sz + val tup2 : 'a sz -> 'b sz -> ('a * 'b) sz + val tup3 : 'a sz -> 'b sz -> 'c sz -> ('a * 'b * 'c) sz + + val size : 'a sz -> 'a -> int +end diff --git a/examples/fragAssembling/size.sml b/examples/fragAssembling/size.sml new file mode 100644 index 00000000..4d204992 --- /dev/null +++ b/examples/fragAssembling/size.sml @@ -0,0 +1,51 @@ +structure Size :> SIZE = +struct + type 'a sz = 'a -> int + + val word_size = 8 (* bytes, 64-bit *) + + (* A heap object has one header word, then its fields. + Unboxed integers/bools/chars take no heap space. + real takes two words, one for the header and one for the content, when GC is enabled. + real takes one word when GC is disabled + Strings: header + length word + ceil(n/8) data words. + Cons cell: hd pointer + tl pointer = 2 words. + Tuple/record of k < 4 fields: k words + Tuple/record of k > 3 fields: header + k words. *) + + val int = fn _ => 0 + val bool = fn _ => 0 + val char = fn _ => 0 + val word = fn _ => 0 + (* val real = fn _ => 2 * word_size (* with GC enabled *) *) + val real = fn _ => word_size (* with GC disabled *) + val unit = fn _ => 0 + + (* header word + length word + data rounded up to word boundary *) + fun string s = + let val n = String.size s + in word_size (* header *) + + (n + word_size - 1) div word_size * word_size (* data *) + end + + (* nil = 0 words; each cons cell = hd + tl = 2 words - with GC disabled *) + fun list sa xs = + List.foldl (fn (x, acc) => acc + 2 * word_size + sa x) 0 xs + + (* NONE = one word (tag); SOME = header + one field = 2 words + content *) + fun option sa opt = + case opt of + NONE => word_size + | SOME x => 2 * word_size + sa x + + (* tuple: 2 fields = 2 words overhead + content of each field *) + fun tup2 sa sb (a, b) = + 2 * word_size + sa a + sb b + + (* triple: 3 fields = 3 words overhead + content of each field *) + fun tup3 sa sb sc (a, b, c) = + 3 * word_size + sa a + sb b + sc c + + + fun size f x = f x +end diff --git a/examples/fragAssembling/tcp_state.sig b/examples/fragAssembling/tcp_state.sig new file mode 100644 index 00000000..e25eac5d --- /dev/null +++ b/examples/fragAssembling/tcp_state.sig @@ -0,0 +1,33 @@ +(* FragAssembler.sig + * + * Fragment assembler / reassembler for out-of-order packets. + *) +signature TCP_STATE = +sig + type conn = int + type pkID = int + type packet = pkID * string + + + type state + + val emptyState : unit -> state + + + (* Insert a packet into the global state. + If its is succesful, returns the new state, else return NONE + *) + val insert : conn * packet * state -> state option + + (* extracts a prefix from the state *) + val extract : state -> (conn * string * state) option + + (* closes a message by removing it from the state, if it exists. Returns the new state. *) + val closeConn : conn * state -> state + + + (* manual garbage collection *) + val stateSize : state -> int + val copyState : state -> state (* Must be exomorph, so it is copied to new regions *) + val gcState : state -> unit +end diff --git a/examples/fragAssembling/tcp_state.sml b/examples/fragAssembling/tcp_state.sml new file mode 100644 index 00000000..d5d76fac --- /dev/null +++ b/examples/fragAssembling/tcp_state.sml @@ -0,0 +1,126 @@ +structure TcpState :> TCP_STATE = +struct + + type conn = int + type pkID = int + type packet = pkID * string + + type assembler = + {prefix: packet list, + bag: packet list, + cPkID: int} + + datatype state = St of (conn * {prefix: (pkID * string) list, bag: (pkID * string) list, cPkID: int}) list + + (* state helper functions *) + fun emptyState () : state = St [] + + fun mapState f (St lst) = + let fun go [] acc = List.rev acc + | go ((c, a) :: rest) acc = go rest (f (c, a) :: acc) + in St (go lst []) + end + + fun foldlState f acc (St lst) = List.foldl f acc lst + fun findState f (St lst) = List.find f lst + fun prependState (St lst) (conn, assembler) = St ((conn, assembler) :: lst) + + + (* inserts elm into sorted list according to f *) + fun insertInList f elm lst = + let fun go [] acc = List.rev (elm :: acc) + | go (x :: xs) acc = + if f (elm, x) then List.revAppend (acc, elm :: x :: xs) + else go xs (x :: acc) + in go lst [] + end + + (* updatePrefix updates the prefix of an assembler by moving packets from the + bag to the prefix if they fit *) + fun updatePrefix (assembler: assembler) : assembler = + let + fun go {prefix, bag, cPkID} = + case bag of + [] => {prefix=prefix, bag=[], cPkID=cPkID} + | (p :: ps) => + if #1 p = cPkID then + go {prefix = p :: prefix, bag=ps, cPkID=cPkID + 1} + else + {prefix=prefix, bag=bag, cPkID=cPkID} + in + go assembler + end + + fun insertPacket (conn: conn) (packet: packet) (state: state) : state = + case findState (fn (c, _) => c = conn) state of + SOME (c, {prefix, bag, cPkID}) => + let + val bag' = insertInList (fn ((offset1, _), (offset2, _)) => offset1 < offset2) packet bag + val assembler' = updatePrefix {prefix=prefix, bag=bag', cPkID=cPkID} + in + mapState (fn (c', a) => if c' = conn then (c', assembler') else (c', a)) state + end + | NONE => + let + val bag' = [packet] + val assembler' = updatePrefix {prefix=[], bag=bag', cPkID=0} + in + prependState state (conn, assembler') + end + + (* inserts a new packet into the state, returning SOME updated state + This function can in the future return NONE on error, e.g. if the state is + full *) + fun insert (conn, packet, state) = + SOME (insertPacket conn packet state) + + (* find the first assembler with a non-empty prefix, return its conn, the full message, and the updated state *) + fun extract state = + case findState (fn (_, {prefix, bag, cPkID}) => prefix <> []) state of + SOME (conn, {prefix, bag, cPkID}) => + let + val msg = String.concat (List.map (fn (_, s) => s) (List.rev prefix)) + val state' = + mapState ( + fn (c, {prefix, bag, cPkID}) => + if c = conn then + (c, {prefix=[], bag=bag, cPkID=cPkID}) + else (c, {prefix=prefix, bag=bag, cPkID=cPkID}) + ) state + in + SOME (conn, msg, state') + end + | NONE => NONE + + fun closeConn (conn, state) = + mapState ( + fn (c, {prefix, bag, cPkID}) => + if c = conn then + (c, {prefix=[], bag=[], cPkID=0}) + else (c, {prefix=prefix, bag=bag, cPkID=cPkID}) + ) state + + + fun copyPacketList lst = + List.rev (List.foldl (fn ((pkID, s), acc) => (pkID, s ^ "") :: acc) [] lst) + + fun stateSize `[r1 r2 r3] (St (lst : (int * {prefix: (int * string`r1)`r2 list`r2, + bag: (int * string`r1)`r2 list`r2, + cPkID: int}`r3 + ) list`r2)) : int = + Region.memoryUsageOfRegion `[r1] () + + Region.memoryUsageOfRegion `[r2] () + + Region.memoryUsageOfRegion `[r3] () + + fun copyState state = + mapState ( + fn (c, {prefix, bag, cPkID}) => + (c, {prefix = copyPacketList prefix, + bag = copyPacketList bag, + cPkID = cPkID}) + ) state + + fun gcState state = + resetRegions state; +end + diff --git a/examples/fragAssembling/test.mlb b/examples/fragAssembling/test.mlb new file mode 100644 index 00000000..650c2445 --- /dev/null +++ b/examples/fragAssembling/test.mlb @@ -0,0 +1,3 @@ +$(SML_LIB)/basis/basis.mlb +service_driver.mlb +test.sml diff --git a/examples/fragAssembling/test.sml b/examples/fragAssembling/test.sml new file mode 100644 index 00000000..358d1c92 --- /dev/null +++ b/examples/fragAssembling/test.sml @@ -0,0 +1,12 @@ +structure DriverInstance = + Driver( + structure TcpState = TcpState + structure Service = Service + ) + +(* val _ = DriverInstance.run "test_1msg_inorder.txt" *) +(* val _ = DriverInstance.run "test_1msg_smallshuffle.txt" *) +(* val _ = DriverInstance.run "test_2msg_serial_inorder.txt" *) +(* val _ = DriverInstance.run "test_2msg_interleaved_permsg_inorder.txt" *) +(* val _ = DriverInstance.run "test_2msg_all_random.txt" *) +val _ = DriverInstance.run "big_test_packets.txt" diff --git a/examples/fragAssembling/test_1msg_inorder.txt b/examples/fragAssembling/test_1msg_inorder.txt new file mode 100644 index 00000000..849aac59 --- /dev/null +++ b/examples/fragAssembling/test_1msg_inorder.txt @@ -0,0 +1,4 @@ +1;0;GET / HTTP/1.1 +1;1;Host: example.com +1;2;User-Agent: Test +1;3; diff --git a/examples/fragAssembling/test_1msg_smallshuffle.txt b/examples/fragAssembling/test_1msg_smallshuffle.txt new file mode 100644 index 00000000..23ae39ad --- /dev/null +++ b/examples/fragAssembling/test_1msg_smallshuffle.txt @@ -0,0 +1,4 @@ +1;2;User-Agent: Test +1;0;GET / HTTP/1.1 +1;3; +1;1;Host: example.com diff --git a/examples/fragAssembling/test_2msg_all_random.txt b/examples/fragAssembling/test_2msg_all_random.txt new file mode 100644 index 00000000..af79cace --- /dev/null +++ b/examples/fragAssembling/test_2msg_all_random.txt @@ -0,0 +1,8 @@ +2;2;Content-Length: 0 +1;1;Host: example.com +2;0;POST /submit HTTP/1.1 +1;3; +1;0;GET / HTTP/1.1 +2;3; +1;2;User-Agent: Test +2;1;Host: example.com diff --git a/examples/fragAssembling/test_2msg_interleaved_permsg_inorder.txt b/examples/fragAssembling/test_2msg_interleaved_permsg_inorder.txt new file mode 100644 index 00000000..6d375db5 --- /dev/null +++ b/examples/fragAssembling/test_2msg_interleaved_permsg_inorder.txt @@ -0,0 +1,8 @@ +1;0;GET / HTTP/1.1 +2;0;POST /submit HTTP/1.1 +1;1;Host: example.com +2;1;Host: example.com +2;2;Content-Length: 0 +1;2;User-Agent: Test +1;3; +2;3; diff --git a/examples/fragAssembling/test_2msg_serial_inorder.txt b/examples/fragAssembling/test_2msg_serial_inorder.txt new file mode 100644 index 00000000..a3fa9313 --- /dev/null +++ b/examples/fragAssembling/test_2msg_serial_inorder.txt @@ -0,0 +1,8 @@ +1;0;GET / HTTP/1.1 +1;1;Host: example.com +1;2;User-Agent: Test +1;3; +2;0;POST /submit HTTP/1.1 +2;1;Host: example.com +2;2;Content-Length: 0 +2;3; diff --git a/examples/mock_requests.txt b/examples/mock_requests.txt new file mode 100644 index 00000000..e012cc84 --- /dev/null +++ b/examples/mock_requests.txt @@ -0,0 +1,3361 @@ +chat:Hi +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:test +chat:bye +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:test +chat:bye +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:test +chat:bye +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:test +chat:bye +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:bye +history: +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:bye +history: +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:bye +history: +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:bye +history: +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:test +chat:bye +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:bye +history: +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:bye +history: +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +history: +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:test +chat:bye +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:test +chat:bye +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:test +chat:bye +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:test +chat:bye +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:test +chat:bye +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:bye +history: +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:bye +history: +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:bye +history: +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:bye +history: +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:test +chat:bye +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:bye +history: +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:bye +history: +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:bye +history: +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:bye +history: +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:bye +history: +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:bye +history: +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:bye +history: +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:test +chat:bye +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:bye +history: +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:bye +history: +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:test +chat:bye +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:bye +history: +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:bye +history: +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:bye +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:test +chat:bye +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:test +chat:bye +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:test +chat:bye +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:bye +history: +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:bye +history: +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:bye +history: +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:bye +history: +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:test +chat:bye +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:bye +history: +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:bye +history: +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:bye +history: +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:bye +history: +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:bye +history: +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:bye +history: +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:bye +history: +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:test +chat:bye +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:bye +history: +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:bye +history: +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:test +chat:bye +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:bye +history: +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:bye +history: +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:bye +history: +chat:bye +history: +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:bye +history: +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:bye +history: +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:bye +history: +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:bye +history: +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:test +chat:bye +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:bye +history: +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:bye +history: +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:test +chat:bye +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:bye +history: +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:bye +history: +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:test +chat:bye +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:test +chat:bye +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:test +chat:bye +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:test +chat:bye +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:bye +history: +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:bye +history: +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:bye +history: +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:bye +history: +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:test +chat:bye +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:bye +history: +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:bye +history: +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:bye +history: +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:bye +history: +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:bye +history: +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:bye +history: +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:bye +history: +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:test +chat:bye +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:bye +history: +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:bye +history: +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:test +chat:bye +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:test +chat:Hi +chat:wassup +chat:test +chat:Hi +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:bye +history: +chat:test +chat:bye +history: +chat:Hi +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +chat:bye +history: +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +chat:bye +history: +chat:wassup +chat:test +chat:bye +history: +history: +chat:bye +history: +exit: diff --git a/examples/optlambda_regvar_ccall_switch.mlb b/examples/optlambda_regvar_ccall_switch.mlb new file mode 100644 index 00000000..31e48a74 --- /dev/null +++ b/examples/optlambda_regvar_ccall_switch.mlb @@ -0,0 +1,3 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +optlambda_regvar_ccall_switch.sml diff --git a/examples/optlambda_regvar_ccall_switch.sml b/examples/optlambda_regvar_ccall_switch.sml new file mode 100644 index 00000000..9135dcb7 --- /dev/null +++ b/examples/optlambda_regvar_ccall_switch.sml @@ -0,0 +1,37 @@ +(* Test that the optimizer does not merge CCALLprim calls + with different explicit region variables. + + We allocate different amounts into r1 and r2, then use a + conditional to query one or the other. If the optimizer + merges the branches, both paths would return the usage of + the same region. +*) + +fun queryRegion (b : bool) = + let with r1 r2 + val n1 = (Regions.getPageSizeBytes () div 2) + 1 + val n2 = (Regions.getPageSizeBytes () * 2) + 1 + val s1 : string`r1 = CharVector.tabulate (n1, fn _ => #"a") + val s2 : string`r2 = CharVector.tabulate (n2, fn _ => #"b") + val u1_direct = Regions.memoryUsageOfRegion `[r1] () + val u2_direct = Regions.memoryUsageOfRegion `[r2] () + val u_conditional = + if b then prim `[r1] ("get_Region_Memory_Usage_Bytes", ()) + else prim `[r2] ("get_Region_Memory_Usage_Bytes", ()) + in + if b then u_conditional = u1_direct + else u_conditional = u2_direct + end + +val ok1 = queryRegion true +val ok2 = queryRegion false + +val _ = + if ok1 andalso ok2 + then print "OK: optlambda_regvar_ccall_switch\n" + else (if not ok1 + then print "FAIL: optlambda_regvar_ccall_switch (true branch)\n" + else (); + if not ok2 + then print "FAIL: optlambda_regvar_ccall_switch (false branch)\n" + else ()) diff --git a/examples/optlambda_regvar_switch.mlb b/examples/optlambda_regvar_switch.mlb new file mode 100644 index 00000000..c9231ea5 --- /dev/null +++ b/examples/optlambda_regvar_switch.mlb @@ -0,0 +1,3 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +optlambda_regvar_switch.sml diff --git a/examples/optlambda_regvar_switch.sml b/examples/optlambda_regvar_switch.sml new file mode 100644 index 00000000..242badb1 --- /dev/null +++ b/examples/optlambda_regvar_switch.sml @@ -0,0 +1,45 @@ +(* Test that the optimizer does not merge resetRegions calls + with different explicit region variables. + + If OptLambda's eq_prim considers two RESET_REGIONSprim equal + when they differ only in regvars, the switch elimination + optimization could collapse the two branches, resetting the + wrong region. + + We test both branches: + - resetFirst true should reset r1, leave r2 unchanged + - resetFirst false should reset r2, leave r1 unchanged +*) + +fun resetFirst (b : bool) = + let with r1 r2 + val n = (Regions.getPageSizeBytes () div 2) + 1 + val s1 : string`r1 = CharVector.tabulate (n, fn _ => #"a") + val s2 : string`r2 = CharVector.tabulate (n, fn _ => #"b") + val u1_before = Regions.memoryUsageOfRegion `[r1] () + val u2_before = Regions.memoryUsageOfRegion `[r2] () + val _ = if b then forceResetting `[r1] () + else forceResetting `[r2] () + val u1_after = Regions.memoryUsageOfRegion `[r1] () + val u2_after = Regions.memoryUsageOfRegion `[r2] () + in + if b then + (* r1 should have been reset, r2 should not *) + u1_after < u1_before andalso u2_after = u2_before + else + (* r2 should have been reset, r1 should not *) + u2_after < u2_before andalso u1_after = u1_before + end + +val ok1 = resetFirst true +val ok2 = resetFirst false + +val _ = + if ok1 andalso ok2 + then print "OK: optlambda_regvar_switch\n" + else (if not ok1 + then print "FAIL: optlambda_regvar_switch (true branch)\n" + else (); + if not ok2 + then print "FAIL: optlambda_regvar_switch (false branch)\n" + else ()) diff --git a/examples/prependStart.sml b/examples/prependStart.sml new file mode 100644 index 00000000..0b070032 --- /dev/null +++ b/examples/prependStart.sml @@ -0,0 +1 @@ +fun prependStart l = "start" :: l diff --git a/examples/repeat.sml b/examples/repeat.sml new file mode 100644 index 00000000..f00c75da --- /dev/null +++ b/examples/repeat.sml @@ -0,0 +1,6 @@ +fun repeat(x, 0) = [] + | repeat(x, n) = x :: repeat(x, n - 1) + +val r = let val a = repeat(42, 3) + in length (repeat(7, 5)) + length a + end diff --git a/examples/service/main.mlb b/examples/service/main.mlb new file mode 100644 index 00000000..a559a5a9 --- /dev/null +++ b/examples/service/main.mlb @@ -0,0 +1,3 @@ +$(SML_LIB)/basis/basis.mlb + simpleio.sml +main.sml diff --git a/examples/service/main.sml b/examples/service/main.sml new file mode 100644 index 00000000..734295a7 --- /dev/null +++ b/examples/service/main.sml @@ -0,0 +1,146 @@ +(* A mock server implementation *) +(* Using regions to make sure we can reset state between requests *) +(* and that we can reset request data after each request *) + +open SimpleIO + +(* Define the type of subservice *) +datatype subservice = + Exit + | Nothing + | Chat + | History + +type state = string list + +(* Take up to n elements from the list l *) +(* Returns the whole list if n > length l *) +(* \/ a,r. (list`r a, int) -> list`r a *) +fun takeSafe (l, n) = + let + val len = List.length l + in + if n < len then + List.take (l, n) + else + l + end + +(* Copy a list of strings to a new region *) +(* \/ r,r'. list`r string -> list`r' string *) +fun copyList [] = [] + | copyList (x::xr) = (x ^ "") :: copyList xr + +(* Copy a string to a new region *) +(* \/ r,r'. string`r -> string`r' *) +fun copyString `[r1 r2] (s : string`r1) : string`r2 = s ^ "" + +(* Mock request function *) +(* Reads data from a file, which contains all simulated network data *) +(* Splits the data into service type and actual data, delimiter is `:` *) +(* \/ r. -> string`r *) +fun req `r (inStream : instream) : subservice * string`r = + let with r1 + val line : string`r1 option = inputLine inStream + in + case line of + SOME l => ( + case String.fields (fn c => c = #":") l of + ("exit"::rest) => (Exit, "") + | ("chat"::rest) => (Chat, String.concatWith ":" rest) + | ("history"::rest) => (History, "") + | _ => (Nothing, "") + ) + | NONE => + (Exit, "") + end + +(* Mock response function *) +(* Sends data to the client by printing it to the console *) +(* \/ r. string`r -> unit *) +fun resp `r (data: string`r) : unit = + print ("Response sent to client: " ^ data) + +local + (* chat subservice *) + (* appends data to state and returns a response *) + (* \/ r,r',r'',r'''. (string`r' list`r, string`r'') -> (string`r''', string`r' list`r) *) + fun chat `[rs1 rs2] (state : string`rs1 list`rs2, data: string) : string * string`rs1 list`rs2 = + let + val temp = data ^ "" :: copyList state + val _ = resetRegions `[rs1 rs2] () + val response = "Chat received: " ^ data + val newState = copyList (takeSafe (temp, 100)) + in + (response, newState) + end + + (* history subservice *) + (* returns the last 2 chat messages from state *) + (* \/ r,r',r'',r'''. (string`r' list`r) -> string`r''' *) + fun history (state: state) : string = + let + val recentHistory = takeSafe (state, 2) + val revList = List.rev recentHistory + val response : string = String.concatWith "> " (revList) + in + response + end + + (* service function *) + (* responsible for handling requests and running corresponding subroutines *) + (* Carries state between requests and operates in a loop *) + (* \/ r,r'.(string,r) -> (string,r') *) + fun service (inStream : instream) (state : state) : unit = + let + val state' = + let with r3 r4 + val (subservice, data : string`r3) = req (inStream) : subservice * string`r3 + in + case subservice of + Exit => ( + print "Exiting service loop...\n"; + raise Fail "Service exited" + ) + | Nothing => ( + print "No valid subservice requested. Continuing...\n"; + state + ) + | Chat => ( + let + val (response : string`r4, state') = chat (state, data) + in + resp (response : string`r4); + state' + end + ) + | History => ( + let + val response : string`r4 = history state + in + resp (response : string`r4); + state + end + ) + end + in + service inStream state' + end +in + fun run () = ( + print "Starting mock server\n"; + + let with rs1 rs2 + (* initializations *) + val inStream : instream = openIn "mock_requests.txt" + val state = nil : string`rs1 list`rs2 + in + service inStream state handle Fail msg => ( + closeIn inStream; + print ("Service loop exited with: " ^ msg ^"\n") + ) + end + ) +end + +val _ = run () diff --git a/examples/service/simpleio.mlb b/examples/service/simpleio.mlb new file mode 100644 index 00000000..ab72bacd --- /dev/null +++ b/examples/service/simpleio.mlb @@ -0,0 +1,2 @@ +$(SML_LIB)/basis/basis.mlb +simpleio.sml diff --git a/examples/service/simpleio.sml b/examples/service/simpleio.sml new file mode 100644 index 00000000..d1268c32 --- /dev/null +++ b/examples/service/simpleio.sml @@ -0,0 +1,36 @@ +(* A simple I/O library *) + +structure SimpleIO = struct + type instream = {ic: int, name: string} + + exception CannotOpen + + fun getCtx () : foreignptr = prim("__get_ctx",()) + + fun chr_unsafe (i:int):char = prim ("id", i) + + fun input1_ (ic:int) : int = prim ("input1Stream", ic) + + fun input1 ({ic, name} : instream) : char option = + let val res = input1_ ic + in if res < 0 then NONE + else SOME (chr_unsafe res) + end + + fun openIn (f: string) : instream = + {ic=prim("openInStream",(getCtx(), f, CannotOpen)), + name=f} handle exn => raise Fail "openIn" + + fun closeIn ({ic,...} : instream) : unit = prim ("closeStream", ic) + + fun inputLine is = + let fun loop(acc) = + case input1 is + of SOME (c as #"\n") => SOME(implode(rev(c :: acc))) + | SOME c => loop(c::acc) + | NONE => case acc + of [] => NONE + | _ => SOME(implode(rev(#"\n" :: acc))) + in loop([]) + end +end diff --git a/examples/test.mlb b/examples/test.mlb new file mode 100644 index 00000000..6d01de41 --- /dev/null +++ b/examples/test.mlb @@ -0,0 +1,4 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +$(SML_LIB)/examples/fragAssembling/size.mlb +test.sml diff --git a/examples/test.sml b/examples/test.sml new file mode 100644 index 00000000..ca5ff8e3 --- /dev/null +++ b/examples/test.sml @@ -0,0 +1,136 @@ +(* fun removeConsDup [] = [] *) +(* | removeConsDup [x] = [x] *) +(* | removeConsDup (x::y::xs) = *) +(* if x = y then removeConsDup (y::xs) *) +(* else x :: removeConsDup (y::xs) *) + +(* fun append [] ys = ys *) +(* | append (x::xs) ys = x :: append xs ys *) + + +(* fun appendEnd [] = ["end"] *) +(* | appendEnd (x::xs) = x :: appendEnd xs *) + +(* fun prependStart l = "start" :: l *) + +(* fun transform [] = [] *) +(* | transform (x::xs) = (x + 1) :: transform xs *) + +(* fun run () = *) +(* let val data = [1, 2, 3, 4, 5] *) +(* val result = transform data *) +(* in resetRegions data; *) +(* length result *) +(* end *) + +(* fun cp [] = [] *) +(* | cp (x::xs) = x :: cp xs *) +(* (* exormorphic merge *) *) +(* fun merge(xs, []) : int list = cp xs *) +(* | merge([], ys) = cp ys *) +(* | merge(l1 as x::xs, l2 as y::ys) = *) +(* if x compileType tau | _ => die "compileExp(APPexp..): wrong type info" - in PRIM(RESET_REGIONSprim{instance = tau'}, [arg']) + val regvars = regvarsFromRegvarsAndInfoOpt regvars_opt + in PRIM(RESET_REGIONSprim{instance = tau', regvars=regvars}, [arg']) end | CE.FORCE_RESET_REGIONS => @@ -2778,7 +2779,8 @@ end; (*match compiler local*) of SOME(TypeInfo.VAR_INFO{instances = [tau]}) => compileType tau | _ => die "compileExp(APPexp..): wrong type info" - in PRIM(FORCE_RESET_REGIONSprim{instance = tau'}, [arg']) + val regvars = regvarsFromRegvarsAndInfoOpt regvars_opt + in PRIM(FORCE_RESET_REGIONSprim{instance = tau', regvars=regvars}, [arg']) end | CE.ABS => overloaded_prim env info CE.ABS (compileAtexp env) (compileExp env) arg true [] @@ -2794,7 +2796,7 @@ end; (*match compiler local*) | CE.GREATER => overloaded_prim env info CE.GREATER (compileAtexp env) (compileExp env) arg false [] | CE.LESSEQ => overloaded_prim env info CE.LESSEQ (compileAtexp env) (compileExp env) arg false [] | CE.GREATEREQ => overloaded_prim env info CE.GREATEREQ (compileAtexp env) (compileExp env) arg false [] - | CE.PRIM => compile_application_of_prim env info arg + | CE.PRIM => compile_application_of_prim env info arg regvars_opt | CE.EXPORT => let val (name,args) = decompose_prim_call arg val (tau_arg,tau_res) = (* The type (tau_arg->tau_res) is the instance of ('a->'b) *) @@ -2838,7 +2840,7 @@ end; (*match compiler local*) ) (*fun compile_application_of_ident*) - and compile_application_of_prim env info atexp = + and compile_application_of_prim env info atexp regvars_opt = (*Application of `prim' to atexp. We disassemble atexp to get the name s of the primitive operation and its arguments.*) @@ -2962,10 +2964,10 @@ the 12 lines above are very similar to the code below | _ => (*unrecognised prim name: this must be a c call; let us hope the run-time system defines a function called s:*) - compile_application_of_c_function env info s args) + compile_application_of_c_function env info s args regvars_opt) end) (*fun compile_application_of_prim*) - and compile_application_of_c_function env info name args = + and compile_application_of_c_function env info name args regvars_opt = (case to_TypeInfo info of SOME (TypeInfo.VAR_INFO {instances = [tau_argument, tau_result]}) => @@ -2978,6 +2980,8 @@ the 12 lines above are very similar to the code below tau_argument->tau_result. From CompileDec and on, we want the instance list to be the instance list of the c function type rather than the instance list of the type of `prim':*) + + (* Should regvar(s) be prepended to args? *) let val taus1 = (case compileType tau_argument of tau1 => (case List.length args of @@ -2994,6 +2998,7 @@ the 12 lines above are very similar to the code below val subst = mk_subst (fn () => "CompileDec.compile_application_of_c_function") (tyvars, map (fn tv => TLE.TYVARtype {tv=tv}) tyvars_fresh) + val regvars = regvarsFromRegvarsAndInfoOpt regvars_opt (* Names for certain primitives are altered on the basis of * whether tagging of integers is enabled; see the comment @@ -3002,6 +3007,7 @@ the 12 lines above are very similar to the code below in TLE.PRIM (CCALLprim {name = name, tyvars = tyvars_fresh, + regvars = regvars, Type = on_Type subst tau, instances = map (fn tv => TLE.TYVARtype {tv=tv}) tyvars}, map (compileExp env) args) diff --git a/src/Compiler/Lambda/EliminateEq.sml b/src/Compiler/Lambda/EliminateEq.sml index a2dab9a5..a4311130 100644 --- a/src/Compiler/Lambda/EliminateEq.sml +++ b/src/Compiler/Lambda/EliminateEq.sml @@ -227,7 +227,7 @@ structure EliminateEq : ELIMINATE_EQ = val argty2 = TYVARtype {tv=tv2} val ty = ARROWtype([argty1,argty2],NONE,[boolType],NONE) in PRIM(CCALLprim {name="__equal_ptr",instances=[instance_ty,instance_ty], - tyvars=[tv1,tv2], Type=ty}, + regvars=[], tyvars=[tv1,tv2], Type=ty}, [e1,e2]) end @@ -636,7 +636,7 @@ structure EliminateEq : ELIMINATE_EQ = in monolet {lvar = lvar_nX, Type = intDefaultType(), bind = PRIM (CCALLprim {name = "table_size", (*alpha' is instantiated to alpha (from above):*) - tyvars = [alpha'], instances = [TYVARtype {tv=alpha}], + tyvars = [alpha'], instances = [TYVARtype {tv=alpha}], regvars = [], Type = ARROWtype ([CONStype ([TYVARtype {tv=alpha'}], tyname, NONE)], NONE, [intDefaultType()], @@ -650,7 +650,7 @@ structure EliminateEq : ELIMINATE_EQ = val tau_alpha' = TYVARtype {tv=alpha'} in PRIM (CCALLprim {name = "word_sub0", (*alpha' is instantiated to alpha (from above):*) - tyvars = [alpha'], instances = [TYVARtype {tv=alpha}], + tyvars = [alpha'], instances = [TYVARtype {tv=alpha}], regvars = [], Type = ARROWtype ([CONStype ([tau_alpha'], tyname, NONE), intDefaultType()], NONE, [tau_alpha'], @@ -664,7 +664,7 @@ structure EliminateEq : ELIMINATE_EQ = val values_64bit = Flags.is_on0 "values_64bit" fun ccall name argtypes restype = - CCALLprim {name = name, instances = [], tyvars = [], + CCALLprim {name = name, instances = [], regvars = [], tyvars = [], Type = ARROWtype (argtypes, NONE, [restype], NONE)} fun MINUS_INTprim () = diff --git a/src/Compiler/Lambda/LAMBDA_EXP.sml b/src/Compiler/Lambda/LAMBDA_EXP.sml index 1f42d1d9..36a0c859 100644 --- a/src/Compiler/Lambda/LAMBDA_EXP.sml +++ b/src/Compiler/Lambda/LAMBDA_EXP.sml @@ -107,6 +107,7 @@ signature LAMBDA_EXP = | EQUALprim of {instance: 'Type} | CCALLprim of {name : string, (* Primitives, etc. *) instances : 'Type list, + regvars : regvar list, tyvars : tyvar list, Type : 'Type} | BLOCKF64prim @@ -114,10 +115,12 @@ signature LAMBDA_EXP = | EXPORTprim of {name : string, instance_arg : 'Type, instance_res : 'Type} - | RESET_REGIONSprim of {instance: 'Type} (* NOT Standard ML, for programmer-directed, - but safe, resetting of regions *) - | FORCE_RESET_REGIONSprim of {instance: 'Type} (* NOT Standard ML, for programmer-controlled, - unsafe resetting of regions *) + | RESET_REGIONSprim of {instance : 'Type, + regvars : regvar list} (* NOT Standard ML, for programmer-directed, + but safe, resetting of regions *) + | FORCE_RESET_REGIONSprim of {instance: 'Type, + regvars : regvar list} (* NOT Standard ML, for programmer-controlled, + unsafe resetting of regions *) datatype LambdaPgm = PGM of datbinds * LambdaExp @@ -186,6 +189,7 @@ signature LAMBDA_EXP = val layoutTypeList : TypeList -> StringTree val layoutPrim : ('Type -> StringTree) -> 'Type prim -> StringTree val layoutType_repl : Type -> StringTree + val layoutRegVars : regvar list -> StringTree (* Generate ML code *) val barify : LambdaPgm -> StringTree diff --git a/src/Compiler/Lambda/LambdaBasics.sml b/src/Compiler/Lambda/LambdaBasics.sml index 5433f369..ea15331a 100644 --- a/src/Compiler/Lambda/LambdaBasics.sml +++ b/src/Compiler/Lambda/LambdaBasics.sml @@ -497,17 +497,17 @@ structure LambdaBasics: LAMBDA_BASICS = | REFprim {instance,regvar} => REFprim {instance=on_tau ren instance,regvar=regvar} | ASSIGNprim {instance} => ASSIGNprim {instance=on_tau ren instance} | EQUALprim {instance} => EQUALprim {instance=on_tau ren instance} - | CCALLprim {name, instances, tyvars, Type} => + | CCALLprim {name, instances, regvars, tyvars, Type} => let val tvs_pairs = map (fn tv => (tv, new_tv tv)) tyvars val ren_local = add_tvs tvs_pairs empty_ren - in CCALLprim {name=name, instances=map (on_tau ren) instances, + in CCALLprim {name=name, instances=map (on_tau ren) instances, regvars=regvars, tyvars=map (on_tv ren_local) tyvars, Type=on_tau ren_local Type} (*the type scheme (tyvars, Type) is for a special purpose in the region inference and back end; it must not be changed; we must rename bound tyvars, however. *) end - | RESET_REGIONSprim {instance} => RESET_REGIONSprim {instance=on_tau ren instance} - | FORCE_RESET_REGIONSprim {instance} => FORCE_RESET_REGIONSprim {instance=on_tau ren instance} + | RESET_REGIONSprim {instance, regvars} => RESET_REGIONSprim {instance=on_tau ren instance, regvars=regvars} + | FORCE_RESET_REGIONSprim {instance, regvars} => FORCE_RESET_REGIONSprim {instance=on_tau ren instance, regvars=regvars} | x => x fun on_e ren lamb = @@ -631,13 +631,12 @@ structure LambdaBasics: LAMBDA_BASICS = | REFprim {instance,regvar} => REFprim{instance=on_Type S instance,regvar=regvar} | ASSIGNprim {instance} => ASSIGNprim{instance=on_Type S instance} | EQUALprim {instance} => EQUALprim{instance=on_Type S instance} - | CCALLprim {name, instances, tyvars, Type} => - CCALLprim {name=name, instances=map (on_Type S) instances, - tyvars=tyvars, Type=Type} + | CCALLprim {name, instances, regvars, tyvars, Type} => + CCALLprim {name=name, instances=map (on_Type S) instances, regvars=regvars, tyvars=tyvars, Type=Type} (*the type scheme (tyvars, Type) is for a special purpose in the region inference and back end; it is closed (i.e., ftv(Type) \subseteq {tyvars}) *) - | RESET_REGIONSprim {instance} => RESET_REGIONSprim{instance=on_Type S instance} - | FORCE_RESET_REGIONSprim {instance} => FORCE_RESET_REGIONSprim{instance=on_Type S instance} + | RESET_REGIONSprim {instance, regvars} => RESET_REGIONSprim{instance=on_Type S instance, regvars=regvars} + | FORCE_RESET_REGIONSprim {instance, regvars} => FORCE_RESET_REGIONSprim{instance=on_Type S instance, regvars=regvars} | _ => prim (* tyvarsType : Find the type variables in a type. We use Set diff --git a/src/Compiler/Lambda/LambdaExp.sml b/src/Compiler/Lambda/LambdaExp.sml index 53d89e68..36876643 100644 --- a/src/Compiler/Lambda/LambdaExp.sml +++ b/src/Compiler/Lambda/LambdaExp.sml @@ -143,8 +143,12 @@ structure LambdaExp : LAMBDA_EXP = | RaisedExnBind datatype 'Type prim = (* The primitives are always fully applied ! *) - CONprim of {con : con, instances : 'Type list, regvar: regvar option} - | DECONprim of {con : con, instances : 'Type list, lv_opt:lvar option} + CONprim of {con : con, + instances : 'Type list, + regvar: regvar option} + | DECONprim of {con : con, + instances : 'Type list, + lv_opt:lvar option} | EXCONprim of excon | DEEXCONprim of excon | RECORDprim of {regvar:regvar option} @@ -152,11 +156,13 @@ structure LambdaExp : LAMBDA_EXP = | UB_RECORDprim (* Unboxed record. *) | DROPprim | DEREFprim of {instance: 'Type} - | REFprim of {instance: 'Type,regvar:regvar option} + | REFprim of {instance: 'Type, + regvar:regvar option} | ASSIGNprim of {instance: 'Type} | EQUALprim of {instance: 'Type} | CCALLprim of {name : string, (* Primitives, etc. *) instances : 'Type list, + regvars : regvar list, tyvars : tyvar list, Type : 'Type} | BLOCKF64prim @@ -164,10 +170,12 @@ structure LambdaExp : LAMBDA_EXP = | EXPORTprim of {name : string, instance_arg : 'Type, instance_res : 'Type} - | RESET_REGIONSprim of {instance: 'Type} (* NOT Standard ML, for programmer-directed, - * but safe, resetting of regions *) - | FORCE_RESET_REGIONSprim of {instance: 'Type} (* NOT Standard ML, for programmer-controlled, - * unsafe resetting of regions *) + | RESET_REGIONSprim of {instance: 'Type, + regvars: regvar list} (* NOT Standard ML, for programmer-directed, + * but safe, resetting of regions *) + | FORCE_RESET_REGIONSprim of {instance: 'Type, + regvars: regvar list} (* NOT Standard ML, for programmer-controlled, + * unsafe resetting of regions *) datatype LambdaPgm = PGM of datbinds * LambdaExp @@ -269,10 +277,10 @@ structure LambdaExp : LAMBDA_EXP = | REFprim{instance,regvar} => (foldType g) acc instance | ASSIGNprim{instance} => (foldType g) acc instance | EQUALprim{instance} => (foldType g) acc instance - | CCALLprim {instances, ...} => foldl' (foldType g) acc instances + | CCALLprim {instances, regvars, ...} => foldl' (foldType g) acc instances | EXPORTprim {instance_arg,instance_res, ...} => (foldType g) ((foldType g) acc instance_arg) instance_res - | RESET_REGIONSprim{instance} => (foldType g) acc instance - | FORCE_RESET_REGIONSprim{instance} => (foldType g) acc instance + | RESET_REGIONSprim{instance, regvars} => (foldType g) acc instance + | FORCE_RESET_REGIONSprim{instance, regvars} => (foldType g) acc instance | _ => acc fun size (e: LambdaExp) = foldTD(fn n:int => fn exp => n+1, @@ -535,6 +543,11 @@ structure LambdaExp : LAMBDA_EXP = barify_catch_basislib (unsymb(TyName.pr_TyName' tn)) else TyName.pr_TyName tn + fun layoutRegVar r = (PP.LEAF o RegVar.pr) r + + fun layoutRegVars regvars = PP.NODE {start="", finish="", childsep=PP.LEFT " ", indent=0, + children = map layoutRegVar regvars} + fun layoutPrim layoutType prim = case prim of CONprim{con,instances,regvar} => @@ -679,10 +692,16 @@ structure LambdaExp : LAMBDA_EXP = | CCALLprim{name="__greatereq_word63", ...} => PP.LEAF(">=") | CCALLprim{name="__greatereq_word64", ...} => PP.LEAF(">=") - | CCALLprim {name, instances, tyvars, Type} => + | CCALLprim {name, instances, regvars, tyvars, Type} => if !Flags.print_types then - PP.NODE {start="ccall (" ^ name ^ " ", finish=")", indent=2, - children=map layoutType instances, childsep=PP.LEFT ", "} + let + (* layout_instances function is not in scope *) + val layout_instances = PP.NODE {start="<", finish=">", indent=2, + children=map layoutType instances, childsep=PP.LEFT ", "} + in + PP.NODE {start="ccall (" ^ name ^ " ", finish=")", indent=2, + children=[layout_instances, layoutRegVars regvars], childsep=PP.RIGHT ","} + end else if !barify_p then (case name of @@ -702,16 +721,16 @@ structure LambdaExp : LAMBDA_EXP = else if !barify_p then PP.LEAF ("Prim.export " ^ strip_ name) else PP.LEAF ("_export " ^ name) - | RESET_REGIONSprim {instance} => + | RESET_REGIONSprim {instance, regvars} => if !Flags.print_types then PP.NODE{start="resetRegions(", finish=")",indent=2, - children=[layoutType instance],childsep=PP.NOSEP} - else PP.LEAF("resetRegions") - | FORCE_RESET_REGIONSprim {instance} => + children=[layoutType instance, layoutRegVars regvars],childsep=PP.RIGHT ","} + else PP.LEAF "resetRegions" + | FORCE_RESET_REGIONSprim {instance, regvars} => if !Flags.print_types then PP.NODE{start="forceResetting(", finish=")",indent=2, - children=[layoutType instance],childsep=PP.NOSEP} - else PP.LEAF("forceResetting") + children=[layoutType instance, layoutRegVars regvars],childsep=PP.RIGHT ","} + else PP.LEAF "forceResetting" fun layoutSwitch layoutLambdaExp show_const (SWITCH(lamb,rules,wildcardOpt)) = let @@ -807,10 +826,6 @@ structure LambdaExp : LAMBDA_EXP = and layoutType_repl t = layoutType0 {repl=true} t - and layoutRegVar r = (PP.LEAF o RegVar.pr) r - - and layoutRegVars regvars = PP.NODE {start="", finish="", childsep=PP.LEFT " ", indent=0, - children = map layoutRegVar regvars} and layoutTypeList tl = case tl of Types taus => PP.NODE{start="Types(", finish=")", indent=1, @@ -1607,9 +1622,11 @@ structure LambdaExp : LAMBDA_EXP = (Pickle.convert(fn t => {instance=t},#instance) pu_Type) fun fun_CCALLprim _ = Pickle.con1 CCALLprim (fn CCALLprim a => a | _ => die "pu_prim.CCALLprim") - (Pickle.convert (fn (n,il,(tvs,t)) => {name=n,instances=il,tyvars=tvs,Type=t}, - fn {name=n,instances=il,tyvars=tvs,Type=t} => (n,il,(tvs,t))) - (Pickle.tup3Gen0 (Pickle.string,pu_Types,pu_TypeScheme))) + (Pickle.convert (fn (n,il,rvs,(tvs,t)) + => {name=n,instances=il, regvars=rvs,tyvars=tvs,Type=t}, + fn {name=n,instances=il, regvars=rvs,tyvars=tvs,Type=t} + => (n,il,rvs,(tvs,t))) + (Pickle.tup4Gen0 (Pickle.string,pu_Types,Pickle.listGen RegVar.pu,pu_TypeScheme))) fun fun_EXPORTprim _ = Pickle.con1 EXPORTprim (fn EXPORTprim a => a | _ => die "pu_prim.EXPORTprim") (Pickle.convert (fn (n,i1,i2) => {name=n,instance_arg=i1,instance_res=i2}, @@ -1617,10 +1634,14 @@ structure LambdaExp : LAMBDA_EXP = (Pickle.tup3Gen0 (Pickle.string,pu_Type,pu_Type))) fun fun_RESET_REGIONSprim _ = Pickle.con1 RESET_REGIONSprim (fn RESET_REGIONSprim a => a | _ => die "pu_prim.RESET_REGIONSprim") - (Pickle.convert(fn t => {instance=t},#instance) pu_Type) + (Pickle.convert(fn (t, rvs) => {instance=t, regvars=rvs}, + fn {instance=t, regvars=rvs} => (t, rvs)) + (Pickle.pairGen0(pu_Type, Pickle.listGen RegVar.pu))) fun fun_FORCE_RESET_REGIONSprim _ = - Pickle.con1 FORCE_RESET_REGIONSprim (fn FORCE_RESET_REGIONSprim a => a | _ => die "pu_prim.FORCE_RESET_REGIONSprim") - (Pickle.convert(fn t => {instance=t},#instance) pu_Type) + Pickle.con1 FORCE_RESET_REGIONSprim (fn FORCE_RESET_REGIONSprim a => a | _ => die "pu_prim.FORCE_RESET_REGIONSprim") + (Pickle.convert(fn (t, rvs) => {instance=t, regvars=rvs}, + fn {instance=t, regvars=rvs} => (t, rvs)) + (Pickle.pairGen0(pu_Type, Pickle.listGen RegVar.pu))) val fun_BLOCKF64prim = Pickle.con0 BLOCKF64prim fun fun_SCRATCHMEMprim _ = Pickle.con1 (fn n => SCRATCHMEMprim {sz=n}) (fn SCRATCHMEMprim {sz=a} => a | _ => die "pu_prim.SCRATCHMEMprim") @@ -1934,14 +1955,14 @@ structure LambdaExp : LAMBDA_EXP = | REFprim{instance,regvar} => tyvars_Type s instance acc | ASSIGNprim{instance} => tyvars_Type s instance acc | EQUALprim{instance} => tyvars_Type s instance acc - | CCALLprim {instances, tyvars, Type, ...} => + | CCALLprim {instances, regvars, tyvars, Type, ...} => tyvars_Types s instances (tyvars_Scheme s (tyvars, Type) acc) | BLOCKF64prim => acc | SCRATCHMEMprim _ => acc | EXPORTprim {instance_arg,instance_res, ...} => tyvars_Type s instance_arg (tyvars_Type s instance_res acc) - | RESET_REGIONSprim{instance} => tyvars_Type s instance acc - | FORCE_RESET_REGIONSprim{instance} => tyvars_Type s instance acc + | RESET_REGIONSprim{instance, regvars} => tyvars_Type s instance acc + | FORCE_RESET_REGIONSprim{instance, regvars} => tyvars_Type s instance acc | RECORDprim _ => acc | SELECTprim _ => acc | UB_RECORDprim => acc diff --git a/src/Compiler/Lambda/LambdaStatSem.sml b/src/Compiler/Lambda/LambdaStatSem.sml index 42fba4c8..7bf492be 100644 --- a/src/Compiler/Lambda/LambdaStatSem.sml +++ b/src/Compiler/Lambda/LambdaStatSem.sml @@ -720,7 +720,7 @@ structure LambdaStatSem: LAMBDA_STAT_SEM = end | _ => die "EQUALprim.Wrong instance kind") | _ => die "EQUALprim.Wrong number of args") - | CCALLprim {name, instances, tyvars, Type} => + | CCALLprim {name, instances, regvars, tyvars, Type} => (valid_ts env instances; valid_s env (tyvars,Type); case mk_instance_ccall ((tyvars, Type), instances) of @@ -792,7 +792,7 @@ structure LambdaStatSem: LAMBDA_STAT_SEM = log "but found type:\n"; log_st (layoutTypes ts); die "Export of function") end) - | RESET_REGIONSprim {instance} => + | RESET_REGIONSprim {instance, regvars} => (valid_t env instance; check_t_no_f64 "RESET_REGIONSprim" instance; case lexps @@ -802,7 +802,7 @@ structure LambdaStatSem: LAMBDA_STAT_SEM = else die "RESET_REGIONSprim2" end | _ => die "RESET_REGIONSprim.Wrong number of args") - | FORCE_RESET_REGIONSprim {instance} => + | FORCE_RESET_REGIONSprim {instance, regvars} => (valid_t env instance; check_t_no_f64 "FORCE_RESET_REGIONSprim" instance; case lexps diff --git a/src/Compiler/Lambda/OptLambda.sml b/src/Compiler/Lambda/OptLambda.sml index 02b2d833..9ebf5939 100644 --- a/src/Compiler/Lambda/OptLambda.sml +++ b/src/Compiler/Lambda/OptLambda.sml @@ -293,7 +293,7 @@ structure OptLambda : OPT_LAMBDA = local type exp = LambdaExp fun ccall name argtypes restype = - CCALLprim {name=name,instances=[],tyvars=[], + CCALLprim {name=name,instances=[],regvars=[],tyvars=[], Type=ARROWtype(argtypes,NONE,[restype],NONE)} fun f64_bin opr (x:exp,y:exp) : exp = PRIM(ccall ("__" ^ opr ^ "_f64") [f64Type,f64Type] f64Type, [x,y]) @@ -441,6 +441,10 @@ structure OptLambda : OPT_LAMBDA = fun eq_TypeList (Types ts,Types ts') = eq_Types(ts,ts') | eq_TypeList _ = false + fun eq_regvars (nil,nil) = true + | eq_regvars (x::xs,y::ys) = RegVar.eq(x,y) andalso eq_regvars(xs,ys) + | eq_regvars _ = false + fun eq_prim m (p,p') = case (p,p') of (RECORDprim {regvar=NONE}, RECORDprim {regvar=NONE}) => true @@ -462,10 +466,10 @@ structure OptLambda : OPT_LAMBDA = eq_Type(t,t') andalso RegVar.eq(rv,rv') | (ASSIGNprim {instance=t}, ASSIGNprim {instance=t'}) => eq_Type(t,t') | (EQUALprim {instance=t}, EQUALprim {instance=t'}) => eq_Type(t,t') - | (RESET_REGIONSprim {instance=t}, RESET_REGIONSprim {instance=t'}) => eq_Type(t,t') - | (FORCE_RESET_REGIONSprim {instance=t}, FORCE_RESET_REGIONSprim {instance=t'}) => eq_Type(t,t') - | (CCALLprim{name=n,instances=il,tyvars=tvs,Type=t}, CCALLprim{name=n',instances=il',tyvars=tvs',Type=t'}) => - n = n' andalso eq_Types (il,il') andalso eq_sigma((tvs,t),(tvs',t')) + | (RESET_REGIONSprim {instance=t, regvars=rvs}, RESET_REGIONSprim {instance=t', regvars=rvs'}) => eq_Type(t,t') andalso eq_regvars(rvs, rvs') + | (FORCE_RESET_REGIONSprim {instance=t, regvars=rvs}, FORCE_RESET_REGIONSprim {instance=t', regvars=rvs'}) => eq_Type(t,t') andalso ListPair.allEq RegVar.eq (rvs,rvs') + | (CCALLprim{name=n,instances=il,regvars=rvs,tyvars=tvs,Type=t}, CCALLprim{name=n',instances=il',regvars=rvs',tyvars=tvs',Type=t'}) => + n = n' andalso eq_Types (il,il') andalso eq_sigma((tvs,t),(tvs',t')) andalso ListPair.allEq RegVar.eq (rvs,rvs') | (EXPORTprim{name=n,instance_arg=a,instance_res=r}, EXPORTprim{name=n',instance_arg=a',instance_res=r'}) => n = n' andalso eq_Type(a,a') andalso eq_Type(r,r') | (BLOCKF64prim, BLOCKF64prim) => true @@ -502,10 +506,6 @@ structure OptLambda : OPT_LAMBDA = RegVar.eq(r,r') andalso eq_eff(e,e') andalso Report.eq(rep,rep') andalso eq_lvopt(lvopt,lvopt') | _ => false - fun eq_regvars (nil,nil) = true - | eq_regvars (x::xs,y::ys) = RegVar.eq(x,y) andalso eq_regvars(xs,ys) - | eq_regvars _ = false - fun eq_lamb0 m (INTEGER (n,t), INTEGER (n',t')) = n=n' andalso eq_Type(t,t') | eq_lamb0 m (WORD(n,t), WORD(n',t')) = n=n' andalso eq_Type(t,t') | eq_lamb0 m (REAL (r,rvo), REAL (r',rvo')) = r = r' andalso RegVar.eq_opt(rvo,rvo') @@ -1587,7 +1587,7 @@ structure OptLambda : OPT_LAMBDA = if not(constant_folding_p()) then NONE else case lamb of - PRIM(CCALLprim{name,instances,tyvars,Type},exps) => + PRIM(CCALLprim{name,instances,regvars,tyvars,Type},exps) => let fun Some e = SOME(name,e) in case exps of [STRING (s1,NONE),STRING (s2,NONE)] => @@ -2262,12 +2262,12 @@ structure OptLambda : OPT_LAMBDA = | ("__abs_real",[x]) => reduce_f64uno f64_abs x | ("realInt",[x]) => (tick "real_to_f64"; - (f64_to_real (PRIM(CCALLprim {name="__int_to_f64",instances=[],tyvars=[], + (f64_to_real (PRIM(CCALLprim {name="__int_to_f64",instances=[],regvars=[],tyvars=[], Type=ARROWtype([intDefaultType()],NONE,[f64Type],NONE)}, [x])), CUNKNOWN)) | ("__real_to_int",[x]) => (tick "real_to_f64"; - (PRIM(CCALLprim{name="__f64_to_int",instances=[],tyvars=[], + (PRIM(CCALLprim{name="__f64_to_int",instances=[],regvars=[],tyvars=[], Type=ARROWtype([f64Type],NONE,[intDefaultType()],NONE)}, [real_to_f64 x]), CUNKNOWN)) | ("__less_real",[x,y]) => reduce_f64cmp f64_less (x,y) @@ -2280,7 +2280,7 @@ structure OptLambda : OPT_LAMBDA = ARROWtype(argTypes, _, _, _) => argTypes | _ => die "prim(__blockf64_sub_real): expecting arrow type" in tick "real_to_f64"; - (f64_to_real (PRIM(CCALLprim{name="__blockf64_sub_f64",instances=[],tyvars=[], + (f64_to_real (PRIM(CCALLprim{name="__blockf64_sub_f64",instances=[],regvars=[],tyvars=[], Type=ARROWtype(argTypes,NONE,[f64Type],NONE)}, [t,i])), CUNKNOWN) @@ -2291,7 +2291,7 @@ structure OptLambda : OPT_LAMBDA = ARROWtype([bType,iType,_], _, _, _) => (bType,iType) | _ => die "prim(__blockf64_update_real): expecting arrow type with three args" in tick "real_to_f64"; - (PRIM(CCALLprim{name="__blockf64_update_f64",instances=[],tyvars=[], + (PRIM(CCALLprim{name="__blockf64_update_f64",instances=[],regvars=[],tyvars=[], Type=ARROWtype([bType,iType,f64Type],NONE,[unitType],NONE)}, [t,i,#1(reduce(env,(real_to_f64 v,CUNKNOWN)))]), CUNKNOWN) @@ -3839,14 +3839,14 @@ structure OptLambda : OPT_LAMBDA = end fun assign tyvars aType instances a (i:int) e = let val iType = intDefaultType() - in PRIM(CCALLprim{name="word_update0",instances=instances,tyvars=tyvars, + in PRIM(CCALLprim{name="word_update0",instances=instances,regvars=[],tyvars=tyvars, Type=ARROWtype([aType,iType,iType],NONE,[unit_Type],NONE)}, [a,INTEGER(IntInf.fromInt i,iType),e]) end in fun table2d_simplify lamb = case lamb of - PRIM(CCALLprim{name="word_table2d0",instances,tyvars, + PRIM(CCALLprim{name="word_table2d0",instances,regvars,tyvars, Type=ARROWtype([iType,_,_],rv0,[aType],rv)},lambs) => (case map table2d_simplify lambs of [n,nr,nc] => @@ -3857,13 +3857,13 @@ structure OptLambda : OPT_LAMBDA = val S = mk_subst (fn () => "table2d_simplify.word_table2d0") (tyvars,instances) val aType' = on_Type S aType in LET{pat=[(lv,nil,aType')], - bind=PRIM(CCALLprim{name="word_table0",instances=instances, + bind=PRIM(CCALLprim{name="word_table0",instances=instances,regvars=regvars, tyvars=tyvars, Type=ARROWtype([iType],rv0,[aType],rv)},[n]), scope=exec e0 (exec e1 a)} end | _ => die "table2d_simplify: word_table2d0") - | PRIM(CCALLprim{name="word_table2d0_init",instances,tyvars, + | PRIM(CCALLprim{name="word_table2d0_init",instances,regvars,tyvars, Type=ARROWtype([iType,eType,_,_],rv0,[aType],rv)},lambs) => (case map table2d_simplify lambs of [n,e,nr,nc] => @@ -3875,7 +3875,7 @@ structure OptLambda : OPT_LAMBDA = val aType' = on_Type S aType in LET{pat=[(lv,nil,aType')], bind=PRIM(CCALLprim{name="word_table_init",instances=instances, - tyvars=tyvars, + regvars=regvars,tyvars=tyvars, Type=ARROWtype([iType,eType],rv0,[aType],rv)},[n,e]), scope=exec e0 (exec e1 a)} end diff --git a/src/Compiler/Regions/AtInf.sml b/src/Compiler/Regions/AtInf.sml index 619bb570..c9166001 100644 --- a/src/Compiler/Regions/AtInf.sml +++ b/src/Compiler/Regions/AtInf.sml @@ -108,7 +108,7 @@ structure AtInf : AT_INF = end end - fun lay_header (force,lvar,(tau,p:place option)) = + fun lay_header_lvar (force,lvar,(tau,p:place option)) = if force then PP.NODE{start= "", finish = "", indent = 0, childsep = PP.NOSEP, children = [PP.LEAF "You have requested resetting the regions that appear free ", @@ -120,7 +120,22 @@ structure AtInf : AT_INF = else PP.NODE{start= "", finish = "", indent = 0, childsep = PP.NOSEP, children = [PP.LEAF "You have suggested resetting the regions that appear free ", PP.LEAF ("in the type scheme with place of '" ^ Lvars.pr_lvar lvar ^ "', i.e., in"), - lay_sigma_p(RType.type_to_scheme tau,p)]} + lay_sigma_p(RType.type_to_scheme tau,p), + PP.LEAF "I have NOT done as you requested.", + PP.LEAF "Here are my reasons, (one for each region variable concerned):"]} + + fun lay_header_regvars (force, regvars) = + if force + then PP.NODE{start= "", finish = "", indent = 0, childsep = PP.NOSEP, + children = [PP.LEAF "You have requested resetting the regions ", + PP.LEAF ("{" ^ regvars ^ "}."), + PP.LEAF "I have done as you requested, but I cannot guarantee that it is safe.", + PP.LEAF "Here are my objections (one for each region variable concerned):"]} + else PP.NODE{start= "", finish = "", indent = 0, childsep = PP.NOSEP, + children = [PP.LEAF "You have suggested resetting the regions ", + PP.LEAF ("{" ^ regvars ^ "}."), + PP.LEAF "I have NOT done as you requested.", + PP.LEAF "Here are my reasons, (one for each region variable concerned):"]} fun lay_set (rhos: place list) = PP.HNODE{start ="{", finish = "}", childsep = PP.RIGHT",", @@ -295,15 +310,24 @@ structure AtInf : AT_INF = in loop(1,l) end - fun lay_report (force:bool, lvar, mu, conflicts) : StringTree = + fun lay_report_lvar (force:bool, lvar, mu, conflicts) : StringTree = let val tau_p = case RType.unBOX mu of SOME (tau,p) => (tau,SOME p) | NONE => (mu,NONE) - in PP.NODE{start = if force then ("forceResetting(" ^ Lvars.pr_lvar lvar ^ "): ") - else ("resetRegions(" ^ Lvars.pr_lvar lvar ^ "): "), - finish = "", indent = 3, childsep = PP.NOSEP, - children = lay_header(force,lvar,tau_p) :: lay_conflicts(force,conflicts)} + val head = if force then ("forceResetting(" ^ Lvars.pr_lvar lvar ^ "): ") + else ("resetRegions(" ^ Lvars.pr_lvar lvar ^ "): ") + in PP.NODE{start = head, finish = "", indent = 3, childsep = PP.NOSEP, + children = lay_header_lvar(force,lvar,tau_p) :: lay_conflicts(force,conflicts)} + end + + fun lay_report_regvars (force:bool, rhos, conflicts) : StringTree = + let + val regvars = String.concatWith ", " (map Eff.pp_eff rhos) + val head = if force then ("forceResetting(" ^ regvars ^ "): ") + else ("resetRegions(" ^ regvars ^ "): ") + in PP.NODE{start = head, finish = "", indent = 3, childsep = PP.NOSEP, + children = lay_header_regvars(force,regvars) :: lay_conflicts(force,conflicts)} end fun any_live (rho,sme as (_,LE,EE), liveset, @@ -593,6 +617,32 @@ structure AtInf : AT_INF = | EQUAL ({mu_of_arg1, mu_of_arg2}, tr1,tr2) => EQUAL ({mu_of_arg1=mu_of_arg1, mu_of_arg2=mu_of_arg2}, (* no need for analysis *) sma_trip sme tr1,sma_trip sme tr2) + | CCALL ({name="resetRegions", mu_result, rhos_for_result}, trs) => + (case trs of + [TR(e,meta,_,_)] => + (case meta of + MulExp.RegionExp.Mus [mu] => + let + val rhos = map #1 (map #1 rhos_for_result) + val (place_at_list, conflicts) = + analyse_rhos_for_resetting(sme,(Lvarset.empty, []),rhos) + val conflicts' = foldl (fn (SAT rho, acc) => FORMAL_REGION_PARAM rho :: acc + | (_, acc) => acc) conflicts place_at_list + in + case conflicts' of + [] => () + | _ => case e of + RECORD(NONE, nil) => warn (PP.reportStringTree(lay_report_regvars(true, rhos, conflicts'))) + | _ => die "resetRegions: ill-formed expression: argument to resetRegions should be unit"; + CCALL ({name = "resetRegions", mu_result = mu_result, + rhos_for_result = + map (fn ((rho, liveset), i_opt) => + (which_at sme (rho, liveset), i_opt)) + rhos_for_result}, + map (sma_trip sme) trs) + end + | _ => die "resetRegions: expected a type and place on argument to resetRegions") + | _ => die "ill-formed expression: argument to resetRegions should be unit") | CCALL ({name, mu_result, rhos_for_result}, trs) => let val (actuals, iopts) = ListPair.unzip rhos_for_result val actuals' = sma_modular_call sme actuals @@ -605,25 +655,30 @@ structure AtInf : AT_INF = | BLOCKF64 (alloc, trs) => BLOCKF64(which_at sme alloc,map (sma_trip sme) trs) | SCRATCHMEM (n,alloc) => SCRATCHMEM(n,which_at sme alloc) | EXPORT(i,tr) => EXPORT(i,sma_trip sme tr) - | RESET_REGIONS ({force, liveset=SOME liveset, ...}, tr as (TR(VAR{lvar,...},meta,_,_))) => + | RESET_REGIONS ({force, liveset=SOME liveset, regions_for_resetting}, tr as (TR(e,meta,_,_))) => (case meta of MulExp.RegionExp.Mus [mu] => - let val free_regions = Eff.remove_duplicates(RType.frv_mu mu) - val (place_at_list, conflicts) = - analyse_rhos_for_resetting(sme,liveset,free_regions) - val conflicts' = - if force then - foldl (fn (SAT rho, acc) => FORMAL_REGION_PARAM rho :: acc - | (_, acc) => acc) conflicts place_at_list - else conflicts - in - case conflicts' of - [] => () - | _ => warn (PP.reportStringTree(lay_report(force,lvar,mu,conflicts'))); - RESET_REGIONS({force=force,regions_for_resetting = place_at_list, liveset=NONE}, - sma_trip sme tr) - end - | _ => die "RESET_REGIONS: expected a type and place on argument to resetRegions" + let + val rhos = map #1 regions_for_resetting + val free_regions = Eff.remove_duplicates(RType.frv_mu mu @ rhos) + val (place_at_list, conflicts) = + analyse_rhos_for_resetting(sme,liveset,free_regions) + val conflicts' = + if force then + foldl (fn (SAT rho, acc) => FORMAL_REGION_PARAM rho :: acc + | (_, acc) => acc) conflicts place_at_list + else conflicts + in + case conflicts' of + [] => () + | _ => case e of + VAR{lvar, ...} => warn (PP.reportStringTree(lay_report_lvar(force,lvar,mu,conflicts'))) + | RECORD(NONE, nil) => warn (PP.reportStringTree(lay_report_regvars(force, rhos, conflicts'))) + | _ => die "RESET_REGIONS: ill-formed expression: argument to RESET_REGIONS should be a variable or unit"; + RESET_REGIONS({force=force,regions_for_resetting = place_at_list, liveset=NONE}, + sma_trip sme tr) + end + | _ => die "RESET_REGIONS: expected a type and place on argument to resetRegions" ) | RESET_REGIONS _ => die "ill-formed expression: argument to RESET_REGIONS should be a variable" | FRAME{declared_lvars, declared_excons} => diff --git a/src/Compiler/Regions/DropRegions.sml b/src/Compiler/Regions/DropRegions.sml index fa2793ce..e356704a 100644 --- a/src/Compiler/Regions/DropRegions.sml +++ b/src/Compiler/Regions/DropRegions.sml @@ -68,7 +68,7 @@ structure DropRegions : DROP_REGIONS = (if bot_region rho then unvisit rho else (); unvisit_bot_rhos rhos) val _ = visit_put_rhos arreffs - val _ = unvisit_bot_rhos places + (* val _ = unvisit_bot_rhos places *) val bl = map is_visited places in reset_bucket(); bl end @@ -333,14 +333,15 @@ structure DropRegions : DROP_REGIONS = ateffs,mulef), tr2) => (case lookup lvar_env lvar of SOME (FIXBOUND bool_list) => - let + let val actuals' = filter_bl(bool_list,actuals) val acc = List.foldl (maybe_add regvar_env) acc actuals' val (tr2', acc) = drop env tr2 acc - val actuals' = map S actuals' - in (APP(ck,sr,TR(VAR{lvar=lvar,il=il,plain_arreffs=plain_arreffs,fix_bound=fix_bound, - rhos_actuals=ref actuals',other=other},metaType,ateffs,mulef), - tr2'), acc) + val actuals' = map S actuals' + in + (APP(ck,sr,TR(VAR{lvar=lvar,il=il,plain_arreffs=plain_arreffs,fix_bound=fix_bound, + rhos_actuals=ref actuals',other=other},metaType,ateffs,mulef), + tr2'), acc) end | _ => (case (fix_bound, actuals) of (false, []) => diff --git a/src/Compiler/Regions/MUL_EXP.sml b/src/Compiler/Regions/MUL_EXP.sml index 30c9c116..179fbe81 100644 --- a/src/Compiler/Regions/MUL_EXP.sml +++ b/src/Compiler/Regions/MUL_EXP.sml @@ -168,8 +168,10 @@ signature MUL_EXP = mu_res : mu} * ('a,'b,'c)trip - | RESET_REGIONS of {force: bool, liveset: liveset option, regions_for_resetting: 'a list} - * ('a,'b,'c)trip (* for programmer-directed resetting of regions; *) + | RESET_REGIONS of {force: bool, + liveset: liveset option, + regions_for_resetting: 'a list} + * ('a,'b,'c)trip (* for programmer-directed resetting of regions; *) (* resetting is forced iff "force" is true. *) (* Forced resetting is not guaranteed to be sound *) | FRAME of {declared_lvars: {lvar : lvar, diff --git a/src/Compiler/Regions/Mul.sml b/src/Compiler/Regions/Mul.sml index c0756985..08e38a72 100644 --- a/src/Compiler/Regions/Mul.sml +++ b/src/Compiler/Regions/Mul.sml @@ -223,7 +223,7 @@ struct end fun equal_qmularefset ((qmularefset1:qmularefset,sigma1),(qmularefset2:qmularefset,sigma2)) = - arity_qmularefset(qmularefset1) = arity_qmularefset(qmularefset2) andalso + arity_qmularefset qmularefset1 = arity_qmularefset qmularefset2 andalso (* (1) normalize qmularefsets so that bvs comes in the order of first * occurrences in its type. (2) instantiate qmularefsets to fresh @@ -302,7 +302,7 @@ struct loop(n+1)) in loop 0; Array.update(empty, - hash(key_of_toplevel_arreff), + hash key_of_toplevel_arreff, [(key_of_toplevel_arreff,[])]) end diff --git a/src/Compiler/Regions/REGION_EXP.sml b/src/Compiler/Regions/REGION_EXP.sml index d00e25b3..258abf27 100644 --- a/src/Compiler/Regions/REGION_EXP.sml +++ b/src/Compiler/Regions/REGION_EXP.sml @@ -96,9 +96,9 @@ signature REGION_EXP = sig | DROP of ('a,'b)trip (* to do wild cards properly; drops the type *) | EQUAL of {mu_of_arg1: mu, mu_of_arg2: mu} * ('a,'b)trip * ('a,'b)trip | CCALL of {name : string, - mu_result : mu, (*mu of result from c function*) - rhos_for_result : ('a * int option) list} - * ('a,'b)trip list (* Calling C functions *) + mu_result : mu, (*mu of result from c function*) + rhos_for_result : ('a * int option) list} + * ('a,'b)trip list (* Calling C functions *) | BLOCKF64 of 'a * ('a,'b)trip list | SCRATCHMEM of int * 'a (* bytes; type string *) diff --git a/src/Compiler/Regions/RegionExp.sml b/src/Compiler/Regions/RegionExp.sml index 8258f877..1c16b57e 100644 --- a/src/Compiler/Regions/RegionExp.sml +++ b/src/Compiler/Regions/RegionExp.sml @@ -109,9 +109,9 @@ datatype ('a,'b) LambdaPgm = PGM of | DROP of ('a,'b)trip (* to do wild cards properly; drops the type *) | EQUAL of {mu_of_arg1: mu, mu_of_arg2: mu} * ('a,'b)trip * ('a,'b)trip | CCALL of {name : string, - mu_result : mu, (*mu of result from c function*) - rhos_for_result : ('a * int option) list} - * ('a,'b)trip list (* Calling C functions *) + mu_result : mu, (*mu of result from c function*) + rhos_for_result : ('a * int option) list} + * ('a,'b)trip list (* Calling C functions *) | BLOCKF64 of 'a * ('a,'b)trip list | SCRATCHMEM of int * 'a (* bytes; type string *) diff --git a/src/Compiler/Regions/RegionStatEnv.sml b/src/Compiler/Regions/RegionStatEnv.sml index 80ad9352..ad0679de 100644 --- a/src/Compiler/Regions/RegionStatEnv.sml +++ b/src/Compiler/Regions/RegionStatEnv.sml @@ -203,11 +203,11 @@ structure RegionStatEnv: REGION_STAT_ENV = ("e0", E.toplevel_arreff)]) val initial: regionStatEnv = {tyname_env = tyname_env0, - con_env = conenv0, - excon_env = excon_env0, - lvar_env = LvarMap.empty, - regvar_env = regvar_env0, - tyvar_env = L.TyvarMap.empty} + con_env = conenv0, + excon_env = excon_env0, + lvar_env = LvarMap.empty, + regvar_env = regvar_env0, + tyvar_env = L.TyvarMap.empty} fun declareTyName (tyname,arity,{tyname_env, con_env,excon_env, lvar_env,regvar_env,tyvar_env}) = diff --git a/src/Compiler/Regions/SpreadExpression.sml b/src/Compiler/Regions/SpreadExpression.sml index a6c78da3..d7d068d5 100644 --- a/src/Compiler/Regions/SpreadExpression.sml +++ b/src/Compiler/Regions/SpreadExpression.sml @@ -1358,7 +1358,8 @@ good *) (* MEMO: maybe we should add mut-effects for functions that mutate values... *) - | E.PRIM (E.CCALLprim {name, instances, tyvars, Type}, es) => + (* How do we pass regvars as arguments to c functions? *) + | E.PRIM (E.CCALLprim {name, instances, regvars, tyvars, Type}, es) => (let val B = pushIfNotTopLevel (toplevel, B) (* for retract *) val (B, sigma) = let val B = Eff.push B (* for sigma *) @@ -1373,6 +1374,11 @@ good *) (*much of the rest is analogous to the case for (APP (VAR ..., ...))*) val (B, tau, _) = newInstance (NONE,B, sigma, instances) handle X => (print "CCALL-2\n"; raise X) + val regvars' = map (fn rv => case RSE.lookupRegVar rse rv of + NONE => deepError rv ("Explicit region variable " ^ RegVar.pr rv ^ " not in scope") + | SOME p => (p, NONE)) regvars + val rhos = Eff.remove_duplicates (map #1 regvars') + val regvars_phi = Eff.mkUnion(map Eff.mkPut rhos) in (case R.unFUN tau of SOME (mus_a, eps_phi0, [mu_r]) => @@ -1392,9 +1398,9 @@ good *) else R.c_function_effects (sigma,mu_r) handle X => (print "CCALL-4\n"; raise X) val e' = E'.CCALL ({name = name, mu_result = mu_r, - rhos_for_result = rhos_for_result}, trs') + rhos_for_result = regvars' @ rhos_for_result}, trs') in - retract (B, E'.TR (e', E'.Mus [mu_r], Eff.mkUnion (eps_phi0 :: phis)), + retract (B, E'.TR (e', E'.Mus [mu_r], Eff.mkUnion (eps_phi0 :: regvars_phi :: phis)), NOTAIL, tvs) end @@ -1474,7 +1480,7 @@ good *) | _ => die "EXPORT: function does not have function type" end handle X => (print "EXPORT-1\n"; raise X)) - | E.PRIM(E.RESET_REGIONSprim{instance = _}, [e0 as (E.VAR _)] ) => + | E.PRIM(E.RESET_REGIONSprim{instance = _, regvars = regvars}, (* [e0 as (E.VAR _), e1] *) [e0] ) => (* x => [mu], empty rho fresh ----------------------------------- @@ -1489,36 +1495,50 @@ good *) val (B, t as E'.TR(e',meta0,_), _, tvs) = S(B,e0,false,NOTAIL) val mus0 = unMus "S.RESET_REGIONSprim" meta0 val mu = R.unitType - val phi = Eff.mkUnion(map Eff.mkPut(List.filter Eff.is_rho (R.ann_mus mus0 []))) + val regvars' = map (fn rv => case RSE.lookupRegVar rse rv of + NONE => deepError rv ("Explicit region variable " ^ RegVar.pr rv ^ " not in scope") + | SOME p => p) regvars + val rhos = Eff.remove_duplicates (List.filter Eff.is_rho (R.ann_mus mus0 regvars')) + val phi = Eff.mkUnion(map Eff.mkPut rhos) in case e' of E'.VAR{il_r as ref il, ...} => (case R.un_il (#1 il) of ([],[],[]) => - (B,E'.TR(E'.RESET_REGIONS({force=false, regions_for_resetting = []},t), E'.Mus [mu], phi), + (B,E'.TR(E'.RESET_REGIONS({force=false, regions_for_resetting = regvars'},t), E'.Mus [mu], phi), NOTAIL, tvs) | _ => crash_resetting false) + | E'.RECORD(NONE, nil) => (* Allows resetting of unit type *) + (B,E'.TR(E'.RESET_REGIONS({force=false, regions_for_resetting = regvars'},t), E'.Mus [mu], phi), + NOTAIL, + tvs) | _ => crash_resetting false end - | E.PRIM(E.RESET_REGIONSprim{instance = _}, _ ) => crash_resetting false - | E.PRIM(E.FORCE_RESET_REGIONSprim{instance = _}, [e0 as (E.VAR _)] ) => + | E.PRIM(E.FORCE_RESET_REGIONSprim{instance = _, regvars = regvars}, [e0] ) => (* same as RESET_REGIONSprim, except that "force" is set to true in the result *) let val (B, t as E'.TR(e',meta0,_), _, tvs) = S(B,e0,false,NOTAIL) val mus0 = unMus "S.FORCE_RESET_REGIONSprim" meta0 val mu = R.unitType - val phi = Eff.mkUnion(map Eff.mkPut(List.filter Eff.is_rho (R.ann_mus mus0 []))) + val regvars' = map (fn rv => case RSE.lookupRegVar rse rv of + NONE => deepError rv ("Explicit region variable " ^ RegVar.pr rv ^ " not in scope") + | SOME p => p) regvars + val rhos = Eff.remove_duplicates (List.filter Eff.is_rho (R.ann_mus mus0 regvars')) + val phi = Eff.mkUnion(map Eff.mkPut rhos) in case e' of E'.VAR{il_r as ref il, ...} => (case R.un_il (#1 il) of ([],[],[]) => - (B,E'.TR(E'.RESET_REGIONS({force=true, regions_for_resetting = []},t), E'.Mus [mu], phi), + (B,E'.TR(E'.RESET_REGIONS({force=true, regions_for_resetting = regvars'}, t), E'.Mus [mu], phi), NOTAIL, tvs) | _ => crash_resetting true) + | E'.RECORD(NONE, nil) => (* Allows resetting of unit type *) + (B,E'.TR(E'.RESET_REGIONS({force=true, regions_for_resetting = regvars'}, t), E'.Mus [mu], phi), + NOTAIL, + tvs) | _ => crash_resetting true end - | E.PRIM(E.FORCE_RESET_REGIONSprim{instance = _}, _ ) => crash_resetting true | E.FRAME{declared_lvars, declared_excons} => let @@ -1627,7 +1647,7 @@ good *) // Report.line "is less general than the specified type" // rep_sigma sigma' // Report.line "Please modify either the implementation or the specification." - (* // rep0 *) + // rep0 ) fun check2 B = let val s = R.alpha_rename (sigma,B) diff --git a/src/Runtime/Region.c b/src/Runtime/Region.c index e0654235..0b0ca211 100644 --- a/src/Runtime/Region.c +++ b/src/Runtime/Region.c @@ -304,6 +304,54 @@ NoOfPagesInRegion(Region r) #endif /* ENABLE_GEN_GC */ } + +/* Check if a region is at bottom. */ +size_t REG_POLY_FUN_HDR(is_Atbot, Region r) { + return convertBoolToML(is_atbot(r)); +} + +/* Get number of pages in a region. */ +size_t REG_POLY_FUN_HDR(num_Pages, Region r) { + Region r_cleared = clearStatusBits(r); + return convertIntToML(NoOfPagesInRegion(r_cleared)); +} + +/* Get the memory usage of a region */ +size_t REG_POLY_FUN_HDR(get_Region_Memory_Usage_Bytes, Region r) { + Region r_cleared = clearStatusBits(r); + return convertIntToML(NoOfPagesInRegion(r_cleared)*REGION_PAGE_SIZE_BYTES - + freeInRegion(r_cleared)*WORD_SIZE_BYTES); +} + + +/* Get size of a region page. */ +size_t get_Page_Size_Bytes () { + return convertIntToML(REGION_PAGE_SIZE_BYTES); +} + +/* Get number of allocated region pages, including free list */ +size_t get_Num_Allocated_Pages () { + return convertIntToML(rp_total); +} + +/* Get the size of the global free list */ +size_t get_Free_List_Size () { + return convertIntToML(size_free_list()); +} + + + +/* Get the size of the local free list, if PARALLEL is set, else get the size + of the global free list */ +size_t get_Thread_Free_List_Size () { + return convertIntToML(size_thread_free_list()); +} + +/* give the local free list back to the global free list */ +void give_Thread_Free_List_To_Global () { + free_thread_free_list(); +} + /* void printFreeList() @@ -324,7 +372,8 @@ printFreeList() */ -#ifdef ENABLE_GC +/* returns the size of the global free list */ +/* #ifdef ENABLE_GC */ size_t size_free_list() { @@ -339,7 +388,50 @@ size_free_list() return i; } -#endif /*ENABLE_GC*/ +/* #endif /\*ENABLE_GC*\/ */ + + +/* returns the size of thread specific free list, if PARALLLEL is set, + else returns size_free_list () */ +size_t +size_thread_free_list() { + Rp* rp; + size_t i = 0; + + MAYBE_DEFINE_CONTEXT; + + LOCK_LOCK(FREELISTMUTEX); + + for ( rp = FREELIST ; rp ; rp = rp-> n ) + i++; + + LOCK_UNLOCK(FREELISTMUTEX); + + return i; +} + +/* gives the pages in the local free list back to the global free list */ +void +free_thread_free_list() { +#ifdef PARALLEL + MAYBE_DEFINE_CONTEXT; + + LOCK_LOCK(FREELISTMUTEX); + + if ( FREELIST != NULL ) { + Rp* fl_tmp = global_freelist; + global_freelist = FREELIST; + Rp* last = global_freelist; + while ( last->n != NULL ) { + last = last->n; + } + last->n = fl_tmp; + FREELIST = NULL; + } + + LOCK_UNLOCK(FREELISTMUTEX); +#endif /* PARALLEL */ +} /*-------------------------------------------------------------------------* * Region operations. * @@ -1066,6 +1158,52 @@ resetRegion(Region rAdr) return rAdr; /* We preserve rAdr and the status bits. */ } +/* Copy of the above function, but for profiling. Expanding with macro, would + require many changes elsewhere in the code */ +Region +resetRegionProf(Region rAdr, size_t pPoint) +{ + Ro *r; + +#ifdef PROFILING + int j; +#endif + + debug(printf("[resetRegions...")); + + r = clearStatusBits(rAdr); + +#ifdef PROFILING + callsOfResetRegion++; + j = NoOfPagesInRegion(r); + + /* There is always at-least one page in a generation. */ + noOfPages -= j-MIN_NO_OF_PAGES_IN_REGION; + profTabDecrNoOfPages(r->regionId, j-MIN_NO_OF_PAGES_IN_REGION); + + allocNowInf -= r->allocNow; + profTabDecrAllocNow(r->regionId, r->allocNow, "resetRegion"); + allocProfNowInf -= r->allocProfNow; +#endif + + resetGen(&(r->g0)); +#ifdef ENABLE_GEN_GC + resetGen(&(r->g1)); +#endif /* ENABLE_GEN_GC */ + + free_lobjs(r->lobjs); + + r->lobjs = NULL; + +#ifdef PROFILING + r->allocNow = 0; + r->allocProfNow = 0; +#endif + debug(printf("]\n")); + + return rAdr; /* We preserve rAdr and the status bits. */ +} + // ---------------------------------------------------------------- // maybeResetRegion(r): // Reset region r if the inf-bit and the atbot-bit is set @@ -1078,7 +1216,6 @@ maybeResetRegion(Region r) { } } - /*-------------------------------------------------------------------------* * deallocateRegionsUntil: * * It is called with rAddr=sp, which do not necessarily point at a region * diff --git a/src/Runtime/Region.h b/src/Runtime/Region.h index 4eb7a69d..5198a318 100644 --- a/src/Runtime/Region.h +++ b/src/Runtime/Region.h @@ -165,7 +165,7 @@ typedef struct rp { * index parameter. -- mael 2001-09-13 */ /* For tag-free garbage collection of pairs, triples, and refs, we - * make sure that large objects are aligned on 1K boundaries, which + * make sure that large objects are aligned on region page boundaries, which * makes it possible to determine if a pointer points into the stack, * constants in data space, a region in from-space, or a region in * to-space. The orig pointer points back to the memory allocated by @@ -409,7 +409,7 @@ extern Rp * global_freelist; #define FREELIST (freelists[execution_stream_rank()]) #define MAYBE_DEFINE_CONTEXT #define CHECK_CTX(x) ; -#else +#else /* not ARGOBOTS */ #define MAYBE_DEFINE_CONTEXT Context ctx = &(thread_info()->ctx) //#define MAYBE_DEFINE_CONTEXT //#define FREELIST ((thread_info()->ctx).freelist) @@ -417,15 +417,15 @@ extern Rp * global_freelist; //#define CHECK_CTX(x) if (ctx != &(thread_info()->ctx)) { printf("uggh: %s\n", x); } ; #define CHECK_CTX(x) ; -#endif +#endif /* ARGOBOTS */ -#else +#else /* not PARALLEL */ #define MAYBE_DEFINE_CONTEXT #define TOP_REGION (ctx->topregion) #define FREELIST global_freelist #define CHECK_CTX(x) ; -#endif +#endif /* PARALLEL */ typedef size_t Protect; @@ -575,4 +575,7 @@ void chk_obj_in_gen(Gen *gen, uintptr_t *obj_ptr, char* s); void free_lobjs(Lobjs* lobjs); +size_t size_thread_free_list(); +void free_thread_free_list(); + #endif /*REGION_H*/ diff --git a/src/Tools/Tester/Tester.sml b/src/Tools/Tester/Tester.sml index a4431fb4..ced8dde3 100644 --- a/src/Tools/Tester/Tester.sml +++ b/src/Tools/Tester/Tester.sml @@ -83,6 +83,8 @@ structure Tester : TESTER = (if opt "nobasislib" then "-no_basislib " else "") ^ (if opt "noopt" then "-no_opt " else "") ^ (if opt "tc" (*Time Compiler*) then "--timings " else "") ^ + (if opt "nogc" then "-no_gc " else "") ^ + (if opt "parallel" then "-par " else "") ^ (if opt "ccl" (*Compare Compiler Logs*) then "--report_file_sig " else "") ^ concatWith " " flags diff --git a/test/all.tst b/test/all.tst index 2aded784..34a635f2 100644 --- a/test/all.tst +++ b/test/all.tst @@ -184,4 +184,4 @@ seltuptup.sml poll.sml enum-eq.sml stringconcat.sml noopt (* check transformation of calls to argument-transformed functions *) -sma.sml noopt (* storage mode error - issue #208 *) \ No newline at end of file +sma.sml noopt (* storage mode error - issue #208 *) diff --git a/test/explicit_regions/all.tst b/test/explicit_regions/all.tst index ea68b25f..88373c77 100644 --- a/test/explicit_regions/all.tst +++ b/test/explicit_regions/all.tst @@ -103,9 +103,28 @@ mod6.sml ccl ecte (* Signature matching: It is an is less general than the implementation type. *) mod7.sml ccl ecte (* Signature matching: It is an error if the specification type is less general than the implementation type. *) - expty3.sml (* Applying region abstract type bindings *) err_expty4.sml ccl ecte (* Applied region-abstract type functions are tracked *) -expty4.sml ccl (* ReML Type weakening *) \ No newline at end of file +expty4.sml ccl (* ReML Type weakening *) + +(* --------------------- *) +(* Testing region resets *) +(* --------------------- *) +resetErr.sml ccl ecte noopt (* Using an out-of-scope region variable is a compile time error *) + +reset.sml noopt (* Resetting the region of a dead variable results in a reset *) +reset2.sml ccl noopt (* Resetting the region of a live variable results in a warning, and no a reset *) +reset3.sml noopt (* Resetting a region containing the data of a dead variables results in a reset *) +reset4.sml ccl noopt (* Resetting a region containing the data of a live variable results in a warning, and no a reset *) +reset5.sml noopt (* Combination of 1 and 3 *) +reset6.sml ccl noopt (* Combination of 2 and 4 *) +reset7.sml noopt (* Resetting multiple explicit regiosn at once *) + +forceReset.sml noopt (* Force resetting the region of a dead variable results in reset *) +forceReset2.sml ccl noopt (* Force resetting the region of a live variable results in a warning, but still results in a reset *) +forceReset3.sml noopt (* Force resetting a region containing the data of a dead variables results in a reset *) +forceReset4.sml ccl noopt (* Force resetting a region containing the data of a live variable results in a warning, but still results in a reset *) +forceReset5.sml noopt (* Combination of 1 and 3 *) +forceReset6.sml ccl noopt (* Combination of 2 and 4 *) diff --git a/test/explicit_regions/forceReset.sml b/test/explicit_regions/forceReset.sml new file mode 100644 index 00000000..95668786 --- /dev/null +++ b/test/explicit_regions/forceReset.sml @@ -0,0 +1,11 @@ +(* `forceResetting` resets all region variables in the given value. *) + +fun size (s : string) : int = prim ("__bytetable_size", s) + +fun f () : int = + let with r + val x = "Hi there"`r + val _ = forceResetting x + val y = "Goodbye"`r + in size y + end diff --git a/test/explicit_regions/forceReset.sml.out.ok b/test/explicit_regions/forceReset.sml.out.ok new file mode 100644 index 00000000..e69de29b diff --git a/test/explicit_regions/forceReset2.sml b/test/explicit_regions/forceReset2.sml new file mode 100644 index 00000000..381bfd9c --- /dev/null +++ b/test/explicit_regions/forceReset2.sml @@ -0,0 +1,11 @@ +(* `forceResetting` on live values, result in a warning, + and forces region variables to be reset. *) + +fun size (s : string) : int = prim ("__bytetable_size", s) + +fun f () : int = + let with r + val x = "Hi there"`r + val _ = forceResetting x + in size x + end diff --git a/test/explicit_regions/forceReset2.sml.log.ok b/test/explicit_regions/forceReset2.sml.log.ok new file mode 100644 index 00000000..27a99938 --- /dev/null +++ b/test/explicit_regions/forceReset2.sml.log.ok @@ -0,0 +1,22 @@ +[reading source file: forceReset2.sml] +[wrote X64 code file: MLB/RI_PAR/forceReset2.sml.s] +> val f : unit -> int + val size : string -> int + *** Warnings *** +forceResetting(x): + You have requested resetting the regions that appear free + in the type scheme with place of 'x', i.e., in + (string,`r) + I have done as you requested, but I cannot guarantee that it is safe. + Here are my objections (one for each region variable concerned): + (1) + I cannot reset '`r', because of conflict with the locally + live variable + x :(string,`r) + from which the following region variables can be reached + in the region flow graph: + {`r} + Amongst these, '`r' can also be reached from '`r'. + This suggests that you may be destroying data in '`r'. +[wrote X64 code file: MLB/RI_PAR/base-link_objects.s] +[wrote executable file: run] diff --git a/test/explicit_regions/forceReset2.sml.out.ok b/test/explicit_regions/forceReset2.sml.out.ok new file mode 100644 index 00000000..e69de29b diff --git a/test/explicit_regions/forceReset3.sml b/test/explicit_regions/forceReset3.sml new file mode 100644 index 00000000..c5739780 --- /dev/null +++ b/test/explicit_regions/forceReset3.sml @@ -0,0 +1,11 @@ +(* `forceResetting` resets all region variables in the given value. *) + +fun size (s : string) : int = prim ("__bytetable_size", s) + +fun f () : int = + let with r + val x = "Hi there"`r + val _ = forceResetting `[r] () + val y = "Goodbye"`r + in size y + end diff --git a/test/explicit_regions/forceReset3.sml.out.ok b/test/explicit_regions/forceReset3.sml.out.ok new file mode 100644 index 00000000..e69de29b diff --git a/test/explicit_regions/forceReset4.sml b/test/explicit_regions/forceReset4.sml new file mode 100644 index 00000000..1e6207f2 --- /dev/null +++ b/test/explicit_regions/forceReset4.sml @@ -0,0 +1,11 @@ +(* `forceResetting` on live values, result in a warning, + and forces region variables to be reset. *) + +fun size (s : string) : int = prim ("__bytetable_size", s) + +fun f () : int = + let with r + val x = "Hi there"`r + val _ = forceResetting `[r] () + in size x + end diff --git a/test/explicit_regions/forceReset4.sml.log.ok b/test/explicit_regions/forceReset4.sml.log.ok new file mode 100644 index 00000000..a63db7b9 --- /dev/null +++ b/test/explicit_regions/forceReset4.sml.log.ok @@ -0,0 +1,21 @@ +[reading source file: forceReset4.sml] +[wrote X64 code file: MLB/RI_PAR/forceReset4.sml.s] +> val f : unit -> int + val size : string -> int + *** Warnings *** +forceResetting(`r): + You have requested resetting the regions + {`r}. + I have done as you requested, but I cannot guarantee that it is safe. + Here are my objections (one for each region variable concerned): + (1) + I cannot reset '`r', because of conflict with the locally + live variable + x :(string,`r) + from which the following region variables can be reached + in the region flow graph: + {`r} + Amongst these, '`r' can also be reached from '`r'. + This suggests that you may be destroying data in '`r'. +[wrote X64 code file: MLB/RI_PAR/base-link_objects.s] +[wrote executable file: run] diff --git a/test/explicit_regions/forceReset4.sml.out.ok b/test/explicit_regions/forceReset4.sml.out.ok new file mode 100644 index 00000000..e69de29b diff --git a/test/explicit_regions/forceReset5.sml b/test/explicit_regions/forceReset5.sml new file mode 100644 index 00000000..5010a135 --- /dev/null +++ b/test/explicit_regions/forceReset5.sml @@ -0,0 +1,14 @@ +(* `resetRegions` resets all formal region parameters and the regions of `x2`*) + +infix + +fun size (s : string) : int = prim ("__bytetable_size", s) + +fun f () : int = + let with r1 r2 + val x1 = "Hi "`r1 + val x2 = "there"`r2 + val _ = forceResetting `[r1] x2 + val y1 = "Good"`r1 + val y2 = "bye"`r2 + in size y1 + size y2 + end diff --git a/test/explicit_regions/forceReset5.sml.out.ok b/test/explicit_regions/forceReset5.sml.out.ok new file mode 100644 index 00000000..e69de29b diff --git a/test/explicit_regions/forceReset6.sml b/test/explicit_regions/forceReset6.sml new file mode 100644 index 00000000..9fb6d487 --- /dev/null +++ b/test/explicit_regions/forceReset6.sml @@ -0,0 +1,13 @@ +(* `forceResetting` on live values, result in a warning, + and forces region variables to be reset. *) + +infix + +fun size (s : string) : int = prim ("__bytetable_size", s) + +fun f () : int = + let with r1 r2 + val x1 = "Hi "`r1 + val x2 = "there"`r2 + val _ = forceResetting `[r1] x2 + in size x1 + size x2 + end diff --git a/test/explicit_regions/forceReset6.sml.log.ok b/test/explicit_regions/forceReset6.sml.log.ok new file mode 100644 index 00000000..5b5f940b --- /dev/null +++ b/test/explicit_regions/forceReset6.sml.log.ok @@ -0,0 +1,32 @@ +[reading source file: forceReset6.sml] +[wrote X64 code file: MLB/RI_PAR/forceReset6.sml.s] +> infix 0 + + val f : unit -> int + val size : string -> int + *** Warnings *** +forceResetting(x2): + You have requested resetting the regions that appear free + in the type scheme with place of 'x2', i.e., in + (string,`r2) + I have done as you requested, but I cannot guarantee that it is safe. + Here are my objections (one for each region variable concerned): + (1) + I cannot reset '`r2', because of conflict with the locally + live variable + x2 :(string,`r2) + from which the following region variables can be reached + in the region flow graph: + {`r2} + Amongst these, '`r2' can also be reached from '`r2'. + This suggests that you may be destroying data in '`r2'. + (2) + I cannot reset '`r1', because of conflict with the locally + live variable + x1 :(string,`r1) + from which the following region variables can be reached + in the region flow graph: + {`r1} + Amongst these, '`r1' can also be reached from '`r1'. + This suggests that you may be destroying data in '`r1'. +[wrote X64 code file: MLB/RI_PAR/base-link_objects.s] +[wrote executable file: run] diff --git a/test/explicit_regions/forceReset6.sml.out.ok b/test/explicit_regions/forceReset6.sml.out.ok new file mode 100644 index 00000000..e69de29b diff --git a/test/explicit_regions/mod.sml.log.ok b/test/explicit_regions/mod.sml.log.ok index 72be4d70..ad9d627d 100644 --- a/test/explicit_regions/mod.sml.log.ok +++ b/test/explicit_regions/mod.sml.log.ok @@ -19,4 +19,8 @@ The implementation type is less general than the specified type val f : all `r2,`r1.(string,`r1)->(string,`r2) Please modify either the implementation or the specification. +mod.sml, line 5, column 30: + val f : string`r1 -> string`r2 + ^^ +Cannot unify the explicit region variables `r2 and `r1 Stopping compilation of MLB-file due to error (code 1). diff --git a/test/explicit_regions/mod3.sml.log.ok b/test/explicit_regions/mod3.sml.log.ok index e959a105..34d589db 100644 --- a/test/explicit_regions/mod3.sml.log.ok +++ b/test/explicit_regions/mod3.sml.log.ok @@ -19,4 +19,8 @@ The implementation type is less general than the specified type val f : all `r2,`r1.(string,`r1)->(string,`r2) Please modify either the implementation or the specification. +mod3.sml, line 5, column 30: + val f : string`r1 -> string`r2 + ^^ +Cannot unify the explicit region variables `r2 and `r1 Stopping compilation of MLB-file due to error (code 1). diff --git a/test/explicit_regions/mod4.sml.log.ok b/test/explicit_regions/mod4.sml.log.ok index c3a12ef7..8af7744c 100644 --- a/test/explicit_regions/mod4.sml.log.ok +++ b/test/explicit_regions/mod4.sml.log.ok @@ -19,4 +19,8 @@ The implementation type is less general than the specified type val f : all `r2,`r1.(string,`r1)->(string,`r2) Please modify either the implementation or the specification. +mod4.sml, line 9, column 30: + val f : string`r1 -> string`r2 + ^^ +Cannot unify the explicit region variables `r2 and `r1 Stopping compilation of MLB-file due to error (code 1). diff --git a/test/explicit_regions/reset.sml b/test/explicit_regions/reset.sml new file mode 100644 index 00000000..9d6d8649 --- /dev/null +++ b/test/explicit_regions/reset.sml @@ -0,0 +1,11 @@ +(* `resetRegions` resets all region variables in the given value. *) + +fun size (s : string) : int = prim ("__bytetable_size", s) + +fun f () : int = + let with r + val x = "Hi there"`r + val _ = resetRegions x + val y = "Goodbye"`r + in size y + end diff --git a/test/explicit_regions/reset.sml.out.ok b/test/explicit_regions/reset.sml.out.ok new file mode 100644 index 00000000..e69de29b diff --git a/test/explicit_regions/reset2.sml b/test/explicit_regions/reset2.sml new file mode 100644 index 00000000..e036c1ae --- /dev/null +++ b/test/explicit_regions/reset2.sml @@ -0,0 +1,10 @@ +(* `resetRegions` on live values, result in a warning, and no region variables are reset. *) + +fun size (s : string) : int = prim ("__bytetable_size", s) + +fun f () : int = + let with r + val x = "Hi there"`r + val _ = resetRegions x + in size x + end diff --git a/test/explicit_regions/reset2.sml.log.ok b/test/explicit_regions/reset2.sml.log.ok new file mode 100644 index 00000000..d4c213c8 --- /dev/null +++ b/test/explicit_regions/reset2.sml.log.ok @@ -0,0 +1,22 @@ +[reading source file: reset2.sml] +[wrote X64 code file: MLB/RI_PAR/reset2.sml.s] +> val f : unit -> int + val size : string -> int + *** Warnings *** +resetRegions(x): + You have suggested resetting the regions that appear free + in the type scheme with place of 'x', i.e., in + (string,`r) + I have NOT done as you requested. + Here are my reasons, (one for each region variable concerned): + (1) + '`r': there is a conflict with the locally + live variable + x :(string,`r) + from which the following region variables can be reached + in the region flow graph: + {`r} + Amongst these, '`r' can also be reached from '`r'. + Thus I have given '`r' storage mode "attop". +[wrote X64 code file: MLB/RI_PAR/base-link_objects.s] +[wrote executable file: run] diff --git a/test/explicit_regions/reset2.sml.out.ok b/test/explicit_regions/reset2.sml.out.ok new file mode 100644 index 00000000..e69de29b diff --git a/test/explicit_regions/reset3.sml b/test/explicit_regions/reset3.sml new file mode 100644 index 00000000..22ac9d39 --- /dev/null +++ b/test/explicit_regions/reset3.sml @@ -0,0 +1,11 @@ +(* `resetRegions` resets all formal region parameters *) + +fun size (s : string) : int = prim ("__bytetable_size", s) + +fun f () : int = + let with r + val x = "Hi there"`r + val _ = resetRegions `[r] () + val y = "Goodbye"`r + in size y + end diff --git a/test/explicit_regions/reset3.sml.out.ok b/test/explicit_regions/reset3.sml.out.ok new file mode 100644 index 00000000..e69de29b diff --git a/test/explicit_regions/reset4.sml b/test/explicit_regions/reset4.sml new file mode 100644 index 00000000..01323376 --- /dev/null +++ b/test/explicit_regions/reset4.sml @@ -0,0 +1,11 @@ +(* `resetRegions` on live regions, result in a warning, and no region + variables are reset. *) + +fun size (s : string) : int = prim ("__bytetable_size", s) + +fun f () : int = + let with r + val x = "Hi there"`r + val _ = resetRegions `[r] () + in size x + end diff --git a/test/explicit_regions/reset4.sml.log.ok b/test/explicit_regions/reset4.sml.log.ok new file mode 100644 index 00000000..b1edd474 --- /dev/null +++ b/test/explicit_regions/reset4.sml.log.ok @@ -0,0 +1,21 @@ +[reading source file: reset4.sml] +[wrote X64 code file: MLB/RI_PAR/reset4.sml.s] +> val f : unit -> int + val size : string -> int + *** Warnings *** +resetRegions(`r): + You have suggested resetting the regions + {`r}. + I have NOT done as you requested. + Here are my reasons, (one for each region variable concerned): + (1) + '`r': there is a conflict with the locally + live variable + x :(string,`r) + from which the following region variables can be reached + in the region flow graph: + {`r} + Amongst these, '`r' can also be reached from '`r'. + Thus I have given '`r' storage mode "attop". +[wrote X64 code file: MLB/RI_PAR/base-link_objects.s] +[wrote executable file: run] diff --git a/test/explicit_regions/reset4.sml.out.ok b/test/explicit_regions/reset4.sml.out.ok new file mode 100644 index 00000000..e69de29b diff --git a/test/explicit_regions/reset5.sml b/test/explicit_regions/reset5.sml new file mode 100644 index 00000000..2a705ef4 --- /dev/null +++ b/test/explicit_regions/reset5.sml @@ -0,0 +1,14 @@ +(* `resetRegions` resets all formal region parameters and the regions of `x2`*) + +infix + +fun size (s : string) : int = prim ("__bytetable_size", s) + +fun f () : int = + let with r1 r2 + val x1 = "Hi "`r1 + val x2 = "there"`r2 + val _ = resetRegions `[r1] x2 + val y1 = "Good"`r1 + val y2 = "bye"`r2 + in (size y1) + (size y2) + end diff --git a/test/explicit_regions/reset5.sml.out.ok b/test/explicit_regions/reset5.sml.out.ok new file mode 100644 index 00000000..e69de29b diff --git a/test/explicit_regions/reset6.sml b/test/explicit_regions/reset6.sml new file mode 100644 index 00000000..4c2fe556 --- /dev/null +++ b/test/explicit_regions/reset6.sml @@ -0,0 +1,13 @@ +(* `resetRegions` on live regions, result in a warning, and no region + variables are reset. *) + +infix + +fun size (s : string) : int = prim ("__bytetable_size", s) + +fun f () : int = + let with r1 r2 + val x1 = "Hi "`r1 + val x2 = "there"`r2 + val _ = resetRegions `[r1] x2 + in size x1 + size x2 + end diff --git a/test/explicit_regions/reset6.sml.log.ok b/test/explicit_regions/reset6.sml.log.ok new file mode 100644 index 00000000..8c2e3ba7 --- /dev/null +++ b/test/explicit_regions/reset6.sml.log.ok @@ -0,0 +1,32 @@ +[reading source file: reset6.sml] +[wrote X64 code file: MLB/RI_PAR/reset6.sml.s] +> infix 0 + + val f : unit -> int + val size : string -> int + *** Warnings *** +resetRegions(x2): + You have suggested resetting the regions that appear free + in the type scheme with place of 'x2', i.e., in + (string,`r2) + I have NOT done as you requested. + Here are my reasons, (one for each region variable concerned): + (1) + '`r2': there is a conflict with the locally + live variable + x2 :(string,`r2) + from which the following region variables can be reached + in the region flow graph: + {`r2} + Amongst these, '`r2' can also be reached from '`r2'. + Thus I have given '`r2' storage mode "attop". + (2) + '`r1': there is a conflict with the locally + live variable + x1 :(string,`r1) + from which the following region variables can be reached + in the region flow graph: + {`r1} + Amongst these, '`r1' can also be reached from '`r1'. + Thus I have given '`r1' storage mode "attop". +[wrote X64 code file: MLB/RI_PAR/base-link_objects.s] +[wrote executable file: run] diff --git a/test/explicit_regions/reset6.sml.out.ok b/test/explicit_regions/reset6.sml.out.ok new file mode 100644 index 00000000..e69de29b diff --git a/test/explicit_regions/reset7.sml b/test/explicit_regions/reset7.sml new file mode 100644 index 00000000..3ceae511 --- /dev/null +++ b/test/explicit_regions/reset7.sml @@ -0,0 +1,14 @@ +(* `resetRegions` resets multiple explicit region parameters *) + +fun size (s : string) : int = prim ("__bytetable_size", s) + +infix + +fun f () : int = + let with r1 r2 + val x1 = "Hi "`r1 + val x2 = "there"`r2 + val _ = resetRegions `[r1 r2] () + val y1 = "Good"`r1 + val y2 = "bye"`r2 + in (size y1) + (size y2) + end diff --git a/test/explicit_regions/reset7.sml.out.ok b/test/explicit_regions/reset7.sml.out.ok new file mode 100644 index 00000000..e69de29b diff --git a/test/explicit_regions/resetErr.sml b/test/explicit_regions/resetErr.sml new file mode 100644 index 00000000..4323ff6f --- /dev/null +++ b/test/explicit_regions/resetErr.sml @@ -0,0 +1,11 @@ +(* `resetRegions` resets all formal region parameters *) + +fun size (s : string) : int = prim ("__bytetable_size", s) + +fun f () : int = + let with r + val x = "Hi there"`r + val _ = resetRegions `[t] () + val y = "Goodbye"`r + in size y + end diff --git a/test/explicit_regions/resetErr.sml.log.ok b/test/explicit_regions/resetErr.sml.log.ok new file mode 100644 index 00000000..be16c7ac --- /dev/null +++ b/test/explicit_regions/resetErr.sml.log.ok @@ -0,0 +1,8 @@ +[reading source file: resetErr.sml] +> val f : unit -> int + val size : string -> int +resetErr.sml, line 8, column 31: + val _ = resetRegions `[t] () + ^^^^ +Explicit region variable t not in scope +Stopping compilation of MLB-file due to error (code 1). diff --git a/test/region_info/all.tst b/test/region_info/all.tst new file mode 100644 index 00000000..505e2d8a --- /dev/null +++ b/test/region_info/all.tst @@ -0,0 +1,112 @@ +(* TEST FILE + +A test file is a file that mentions a set of Standard ML sources and +projects. A test file has extension `.tst'. Entries in a test file +consists of a file name path (with extension sml, sig, or mlb) followed +by a list of tokens. The following tokens are supported: + + nobasislib ; do not import basis library + nooptimiser ; disable lambda optimiser + ccl ; compare compiler logs + tx ; time executable + tc ; time compiler + ecte ; expect compile time error + ue ; expect uncaught exception + + nogc ; disable gc + parallel ; enable parallel computation + +Test files may contain Standard ML like comments. + +*) + +(* -------------------------------------- *) +(* Testing functionality of region module *) +(* -------------------------------------- *) + +resetRegion_doesNotIncreaseMemoryUsage.mlb nogc +resetRegion_idempotent_memoryUsage.mlb nogc +resetRegion_keepsAtbot_onEmpty.mlb nogc +resetRegion_setsAtbot_afterAllocation.mlb nogc +resetRegion_resets_with_liveRef.mlb nogc +resetRegion_doesNotIncreaseMemoryUsage.mlb nogc parallel +resetRegion_idempotent_memoryUsage.mlb nogc parallel +resetRegion_keepsAtbot_onEmpty.mlb nogc parallel +resetRegion_setsAtbot_afterAllocation.mlb nogc parallel +resetRegion_resets_with_liveRef.mlb nogc parallel + + +isAtbot_true_initial.mlb nogc +isAtbot_false_afterAllocation.mlb nogc +isAtbot_true_initial.mlb nogc parallel +isAtbot_false_afterAllocation.mlb nogc parallel + +numPages_nonnegative_initial.mlb nogc +numPages_increasing_afterAllocation.mlb nogc +numPages_nonnegative_initial.mlb nogc parallel +numPages_increasing_afterAllocation.mlb nogc parallel + +memoryUsage_nonnegative_initial.mlb nogc +memoryUsage_increases_afterAllocation.mlb nogc +memoryUsage_nonnegative_initial.mlb nogc parallel +memoryUsage_increases_afterAllocation.mlb nogc parallel + + +getPageSizeBytes_stable.mlb nogc +getPageSizeBytes_positive.mlb nogc +getPageSizeBytes_stable.mlb nogc parallel +getPageSizeBytes_positive.mlb nogc parallel + +getNumAllocatedPages_nonnegative.mlb nogc +getNumAllocatedPages_getFreeList.mlb nogc +getNumAllocatedPages_nonnegative.mlb nogc parallel +getNumAllocatedPages_getFreeList.mlb nogc parallel + +getFreeListSize_nonnegative.mlb nogc +freeList_lAllocatedPages.mlb nogc +getFreeListSize_nonnegative.mlb nogc parallel +freeList_lAllocatedPages.mlb nogc parallel + + +getThreadFreeListSize_nonnegative.mlb nogc +threadFree_lTotalAllocated.mlb nogc +getThreadFreeListSize_nonnegative.mlb nogc parallel +threadFree_lTotalAllocated.mlb nogc parallel + +giveBack_globalFreeList_nondecreasing.mlb nogc +giveBack_idempotent_globalFreeList.mlb nogc +giveBack_idempotent_threadFreeList.mlb nogc +giveBack_preservesFreeListSum.mlb nogc +giveBack_preservesTotalAllocatedPages.mlb nogc +giveBack_threadFreeList_nonincreasing.mlb nogc +giveBack_globalFreeList_nondecreasing.mlb nogc parallel +giveBack_idempotent_globalFreeList.mlb nogc parallel +giveBack_idempotent_threadFreeList.mlb nogc parallel +giveBack_preservesFreeListSum.mlb nogc parallel +giveBack_preservesTotalAllocatedPages.mlb nogc parallel +giveBack_threadFreeList_nonincreasing.mlb nogc parallel + + +region_usageWithinAllocatedPages.mlb nogc +region_usageWithinAllocatedPages.mlb nogc parallel + + +(* -------------------------------------- *) +(* Testing Size combinator module *) +(* -------------------------------------- *) + +size_int_zero.mlb nogc +size_string_positive.mlb nogc +size_list_nil_is_word.mlb nogc +size_list_grows.mlb nogc +size_tup2_positive.mlb nogc +size_option_some_gt_none.mlb nogc +size_leq_regionUsage.mlb nogc + +size_int_zero.mlb nogc parallel +size_string_positive.mlb nogc parallel +size_list_nil_is_word.mlb nogc parallel +size_list_grows.mlb nogc parallel +size_tup2_positive.mlb nogc parallel +size_option_some_gt_none.mlb nogc parallel +size_leq_regionUsage.mlb nogc parallel diff --git a/test/region_info/freeList_lAllocatedPages.mlb b/test/region_info/freeList_lAllocatedPages.mlb new file mode 100644 index 00000000..d349972d --- /dev/null +++ b/test/region_info/freeList_lAllocatedPages.mlb @@ -0,0 +1,3 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +freeList_lAllocatedPages.sml diff --git a/test/region_info/freeList_lAllocatedPages.mlb.out.ok b/test/region_info/freeList_lAllocatedPages.mlb.out.ok new file mode 100644 index 00000000..5394221e --- /dev/null +++ b/test/region_info/freeList_lAllocatedPages.mlb.out.ok @@ -0,0 +1 @@ +OK: freeList_lAllocatedPages diff --git a/test/region_info/freeList_lAllocatedPages.sml b/test/region_info/freeList_lAllocatedPages.sml new file mode 100644 index 00000000..eeac9823 --- /dev/null +++ b/test/region_info/freeList_lAllocatedPages.sml @@ -0,0 +1,10 @@ +fun test () = + let + val name = "freeList_lAllocatedPages" + val ok = (Regions.getFreeListSize () < Regions.getNumAllocatedPages ()) + in + if ok then print ("OK: " ^ name ^ "\n") + else print ("FAIL: " ^ name ^ "\n") + end + +val _ = test () diff --git a/test/region_info/getFreeListSize_nonnegative.mlb b/test/region_info/getFreeListSize_nonnegative.mlb new file mode 100644 index 00000000..49dbed59 --- /dev/null +++ b/test/region_info/getFreeListSize_nonnegative.mlb @@ -0,0 +1,3 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +getFreeListSize_nonnegative.sml diff --git a/test/region_info/getFreeListSize_nonnegative.mlb.out.ok b/test/region_info/getFreeListSize_nonnegative.mlb.out.ok new file mode 100644 index 00000000..bbb4aa5b --- /dev/null +++ b/test/region_info/getFreeListSize_nonnegative.mlb.out.ok @@ -0,0 +1 @@ +OK: getFreeListSize_nonnegative diff --git a/test/region_info/getFreeListSize_nonnegative.sml b/test/region_info/getFreeListSize_nonnegative.sml new file mode 100644 index 00000000..3abd0c02 --- /dev/null +++ b/test/region_info/getFreeListSize_nonnegative.sml @@ -0,0 +1,10 @@ +fun test () = + let + val name = "getFreeListSize_nonnegative" + val ok = (Regions.getFreeListSize () > 0) + in + if ok then print ("OK: " ^ name ^ "\n") + else print ("FAIL: " ^ name ^ "\n") + end + +val _ = test () diff --git a/test/region_info/getNumAllocatedPages_getFreeList.mlb b/test/region_info/getNumAllocatedPages_getFreeList.mlb new file mode 100644 index 00000000..c4a731f9 --- /dev/null +++ b/test/region_info/getNumAllocatedPages_getFreeList.mlb @@ -0,0 +1,3 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +getNumAllocatedPages_getFreeList.sml diff --git a/test/region_info/getNumAllocatedPages_getFreeList.mlb.out.ok b/test/region_info/getNumAllocatedPages_getFreeList.mlb.out.ok new file mode 100644 index 00000000..6d0ca0ea --- /dev/null +++ b/test/region_info/getNumAllocatedPages_getFreeList.mlb.out.ok @@ -0,0 +1 @@ +OK: getNumAllocatedPages_geFreeList diff --git a/test/region_info/getNumAllocatedPages_getFreeList.sml b/test/region_info/getNumAllocatedPages_getFreeList.sml new file mode 100644 index 00000000..9d56bc82 --- /dev/null +++ b/test/region_info/getNumAllocatedPages_getFreeList.sml @@ -0,0 +1,10 @@ +fun test () = + let + val name = "getNumAllocatedPages_geFreeList" + val ok = (Regions.getNumAllocatedPages () >= Regions.getFreeListSize ()) + in + if ok then print ("OK: " ^ name ^ "\n") + else print ("FAIL: " ^ name ^ "\n") + end + +val _ = test () diff --git a/test/region_info/getNumAllocatedPages_nonnegative.mlb b/test/region_info/getNumAllocatedPages_nonnegative.mlb new file mode 100644 index 00000000..fe03c4f4 --- /dev/null +++ b/test/region_info/getNumAllocatedPages_nonnegative.mlb @@ -0,0 +1,3 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +getNumAllocatedPages_nonnegative.sml diff --git a/test/region_info/getNumAllocatedPages_nonnegative.mlb.out.ok b/test/region_info/getNumAllocatedPages_nonnegative.mlb.out.ok new file mode 100644 index 00000000..c915a200 --- /dev/null +++ b/test/region_info/getNumAllocatedPages_nonnegative.mlb.out.ok @@ -0,0 +1 @@ +OK: getNumAllocatedPages_nonnegative diff --git a/test/region_info/getNumAllocatedPages_nonnegative.sml b/test/region_info/getNumAllocatedPages_nonnegative.sml new file mode 100644 index 00000000..90370c50 --- /dev/null +++ b/test/region_info/getNumAllocatedPages_nonnegative.sml @@ -0,0 +1,10 @@ +fun test () = + let + val name = "getNumAllocatedPages_nonnegative" + val ok = (Regions.getNumAllocatedPages () >= 0) + in + if ok then print ("OK: " ^ name ^ "\n") + else print ("FAIL: " ^ name ^ "\n") + end + +val _ = test () diff --git a/test/region_info/getPageSizeBytes_positive.mlb b/test/region_info/getPageSizeBytes_positive.mlb new file mode 100644 index 00000000..7ca81cee --- /dev/null +++ b/test/region_info/getPageSizeBytes_positive.mlb @@ -0,0 +1,3 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +getPageSizeBytes_positive.sml diff --git a/test/region_info/getPageSizeBytes_positive.mlb.out.ok b/test/region_info/getPageSizeBytes_positive.mlb.out.ok new file mode 100644 index 00000000..f5bc2977 --- /dev/null +++ b/test/region_info/getPageSizeBytes_positive.mlb.out.ok @@ -0,0 +1 @@ +OK: getPageSizeBytes_positive diff --git a/test/region_info/getPageSizeBytes_positive.sml b/test/region_info/getPageSizeBytes_positive.sml new file mode 100644 index 00000000..6780a7a5 --- /dev/null +++ b/test/region_info/getPageSizeBytes_positive.sml @@ -0,0 +1,11 @@ +fun test () = + let + val name = "getPageSizeBytes_positive" + val p = Regions.getPageSizeBytes () + val ok = (p > 0) + in + if ok then print ("OK: " ^ name ^ "\n") + else print ("FAIL: " ^ name ^ "\n") + end + +val _ = test () diff --git a/test/region_info/getPageSizeBytes_stable.mlb b/test/region_info/getPageSizeBytes_stable.mlb new file mode 100644 index 00000000..49cda16a --- /dev/null +++ b/test/region_info/getPageSizeBytes_stable.mlb @@ -0,0 +1,3 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +getPageSizeBytes_stable.sml diff --git a/test/region_info/getPageSizeBytes_stable.mlb.out.ok b/test/region_info/getPageSizeBytes_stable.mlb.out.ok new file mode 100644 index 00000000..71d6f2ef --- /dev/null +++ b/test/region_info/getPageSizeBytes_stable.mlb.out.ok @@ -0,0 +1 @@ +OK: getPageSizeBytes_stable diff --git a/test/region_info/getPageSizeBytes_stable.sml b/test/region_info/getPageSizeBytes_stable.sml new file mode 100644 index 00000000..4f496893 --- /dev/null +++ b/test/region_info/getPageSizeBytes_stable.sml @@ -0,0 +1,12 @@ +fun test () = + let + val name = "getPageSizeBytes_stable" + val p1 = Regions.getPageSizeBytes () + val p2 = Regions.getPageSizeBytes () + val ok = (p1 = p2) + in + if ok then print ("OK: " ^ name ^ "\n") + else print ("FAIL: " ^ name ^ "\n") + end + +val _ = test () diff --git a/test/region_info/getThreadFreeListSize_nonnegative.mlb b/test/region_info/getThreadFreeListSize_nonnegative.mlb new file mode 100644 index 00000000..d1e90a81 --- /dev/null +++ b/test/region_info/getThreadFreeListSize_nonnegative.mlb @@ -0,0 +1,3 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +getThreadFreeListSize_nonnegative.sml diff --git a/test/region_info/getThreadFreeListSize_nonnegative.mlb.out.ok b/test/region_info/getThreadFreeListSize_nonnegative.mlb.out.ok new file mode 100644 index 00000000..1e721fb8 --- /dev/null +++ b/test/region_info/getThreadFreeListSize_nonnegative.mlb.out.ok @@ -0,0 +1 @@ +OK: getThreadFreeListSize_nonnegative diff --git a/test/region_info/getThreadFreeListSize_nonnegative.sml b/test/region_info/getThreadFreeListSize_nonnegative.sml new file mode 100644 index 00000000..b5dd718b --- /dev/null +++ b/test/region_info/getThreadFreeListSize_nonnegative.sml @@ -0,0 +1,10 @@ +fun test () = + let + val name = "getThreadFreeListSize_nonnegative" + val ok = (Regions.getThreadFreeListSize () > 0) + in + if ok then print ("OK: " ^ name ^ "\n") + else print ("FAIL: " ^ name ^ "\n") + end + +val _ = test () diff --git a/test/region_info/giveBack_globalFreeList_nondecreasing.mlb b/test/region_info/giveBack_globalFreeList_nondecreasing.mlb new file mode 100644 index 00000000..b7c91d39 --- /dev/null +++ b/test/region_info/giveBack_globalFreeList_nondecreasing.mlb @@ -0,0 +1,3 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +giveBack_globalFreeList_nondecreasing.sml diff --git a/test/region_info/giveBack_globalFreeList_nondecreasing.mlb.out.ok b/test/region_info/giveBack_globalFreeList_nondecreasing.mlb.out.ok new file mode 100644 index 00000000..16c74641 --- /dev/null +++ b/test/region_info/giveBack_globalFreeList_nondecreasing.mlb.out.ok @@ -0,0 +1 @@ +OK: giveBack_globalFreeList_nondecreasing diff --git a/test/region_info/giveBack_globalFreeList_nondecreasing.sml b/test/region_info/giveBack_globalFreeList_nondecreasing.sml new file mode 100644 index 00000000..d0440219 --- /dev/null +++ b/test/region_info/giveBack_globalFreeList_nondecreasing.sml @@ -0,0 +1,13 @@ +fun test () = + let + val name = "giveBack_globalFreeList_nondecreasing" + val b = Regions.getFreeListSize () + val _ = Regions.giveThreadFreeListToGlobal () + val after = Regions.getFreeListSize () + val ok = (after >= b) + in + if ok then print ("OK: " ^ name ^ "\n") + else print ("FAIL: " ^ name ^ "\n") + end + +val _ = test () diff --git a/test/region_info/giveBack_idempotent_globalFreeList.mlb b/test/region_info/giveBack_idempotent_globalFreeList.mlb new file mode 100644 index 00000000..cff7cda7 --- /dev/null +++ b/test/region_info/giveBack_idempotent_globalFreeList.mlb @@ -0,0 +1,3 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +giveBack_idempotent_globalFreeList.sml diff --git a/test/region_info/giveBack_idempotent_globalFreeList.mlb.out.ok b/test/region_info/giveBack_idempotent_globalFreeList.mlb.out.ok new file mode 100644 index 00000000..4a74444b --- /dev/null +++ b/test/region_info/giveBack_idempotent_globalFreeList.mlb.out.ok @@ -0,0 +1 @@ +OK: giveBack_idempotent_globalFreeList diff --git a/test/region_info/giveBack_idempotent_globalFreeList.sml b/test/region_info/giveBack_idempotent_globalFreeList.sml new file mode 100644 index 00000000..40e237d2 --- /dev/null +++ b/test/region_info/giveBack_idempotent_globalFreeList.sml @@ -0,0 +1,14 @@ +fun test () = + let + val name = "giveBack_idempotent_globalFreeList" + val _ = Regions.giveThreadFreeListToGlobal () + val g1 = Regions.getFreeListSize () + val _ = Regions.giveThreadFreeListToGlobal () + val g2 = Regions.getFreeListSize () + val ok = (g2 = g1) + in + if ok then print ("OK: " ^ name ^ "\n") + else print ("FAIL: " ^ name ^ "\n") + end + +val _ = test () diff --git a/test/region_info/giveBack_idempotent_threadFreeList.mlb b/test/region_info/giveBack_idempotent_threadFreeList.mlb new file mode 100644 index 00000000..22252e0d --- /dev/null +++ b/test/region_info/giveBack_idempotent_threadFreeList.mlb @@ -0,0 +1,3 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +giveBack_idempotent_threadFreeList.sml diff --git a/test/region_info/giveBack_idempotent_threadFreeList.mlb.out.ok b/test/region_info/giveBack_idempotent_threadFreeList.mlb.out.ok new file mode 100644 index 00000000..b73e4444 --- /dev/null +++ b/test/region_info/giveBack_idempotent_threadFreeList.mlb.out.ok @@ -0,0 +1 @@ +OK: giveBack_idempotent_threadFreeList diff --git a/test/region_info/giveBack_idempotent_threadFreeList.sml b/test/region_info/giveBack_idempotent_threadFreeList.sml new file mode 100644 index 00000000..340f72d4 --- /dev/null +++ b/test/region_info/giveBack_idempotent_threadFreeList.sml @@ -0,0 +1,14 @@ +fun test () = + let + val name = "giveBack_idempotent_threadFreeList" + val _ = Regions.giveThreadFreeListToGlobal () + val t1 = Regions.getThreadFreeListSize () + val _ = Regions.giveThreadFreeListToGlobal () + val t2 = Regions.getThreadFreeListSize () + val ok = (t2 = t1) + in + if ok then print ("OK: " ^ name ^ "\n") + else print ("FAIL: " ^ name ^ "\n") + end + +val _ = test () diff --git a/test/region_info/giveBack_preservesFreeListSum.mlb b/test/region_info/giveBack_preservesFreeListSum.mlb new file mode 100644 index 00000000..45e43078 --- /dev/null +++ b/test/region_info/giveBack_preservesFreeListSum.mlb @@ -0,0 +1,3 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +giveBack_preservesFreeListSum.sml diff --git a/test/region_info/giveBack_preservesFreeListSum.mlb.out.ok b/test/region_info/giveBack_preservesFreeListSum.mlb.out.ok new file mode 100644 index 00000000..27757651 --- /dev/null +++ b/test/region_info/giveBack_preservesFreeListSum.mlb.out.ok @@ -0,0 +1 @@ +OK: giveBack_preservesFreeListSum diff --git a/test/region_info/giveBack_preservesFreeListSum.sml b/test/region_info/giveBack_preservesFreeListSum.sml new file mode 100644 index 00000000..03d5c4a8 --- /dev/null +++ b/test/region_info/giveBack_preservesFreeListSum.sml @@ -0,0 +1,13 @@ +fun test () = + let + val name = "giveBack_preservesFreeListSum" + val b= Regions.getFreeListSize () + Regions.getThreadFreeListSize () + val _ = Regions.giveThreadFreeListToGlobal () + val after = Regions.getFreeListSize () + Regions.getThreadFreeListSize () + val ok = (after = b) + in + if ok then print ("OK: " ^ name ^ "\n") + else print ("FAIL: " ^ name ^ "\n") + end + +val _ = test () diff --git a/test/region_info/giveBack_preservesTotalAllocatedPages.mlb b/test/region_info/giveBack_preservesTotalAllocatedPages.mlb new file mode 100644 index 00000000..e7eb28b9 --- /dev/null +++ b/test/region_info/giveBack_preservesTotalAllocatedPages.mlb @@ -0,0 +1,3 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +giveBack_preservesTotalAllocatedPages.sml diff --git a/test/region_info/giveBack_preservesTotalAllocatedPages.mlb.out.ok b/test/region_info/giveBack_preservesTotalAllocatedPages.mlb.out.ok new file mode 100644 index 00000000..066a8dfd --- /dev/null +++ b/test/region_info/giveBack_preservesTotalAllocatedPages.mlb.out.ok @@ -0,0 +1 @@ +OK: giveBack_preservesTotalAllocatedPages diff --git a/test/region_info/giveBack_preservesTotalAllocatedPages.sml b/test/region_info/giveBack_preservesTotalAllocatedPages.sml new file mode 100644 index 00000000..f739c3cd --- /dev/null +++ b/test/region_info/giveBack_preservesTotalAllocatedPages.sml @@ -0,0 +1,13 @@ +fun test () = + let + val name = "giveBack_preservesTotalAllocatedPages" + val b = Regions.getNumAllocatedPages () + val _ = Regions.giveThreadFreeListToGlobal () + val after = Regions.getNumAllocatedPages () + val ok = (after = b) + in + if ok then print ("OK: " ^ name ^ "\n") + else print ("FAIL: " ^ name ^ "\n") + end + +val _ = test () diff --git a/test/region_info/giveBack_threadFreeList_nonincreasing.mlb b/test/region_info/giveBack_threadFreeList_nonincreasing.mlb new file mode 100644 index 00000000..c8b4be94 --- /dev/null +++ b/test/region_info/giveBack_threadFreeList_nonincreasing.mlb @@ -0,0 +1,3 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +giveBack_threadFreeList_nonincreasing.sml diff --git a/test/region_info/giveBack_threadFreeList_nonincreasing.mlb.out.ok b/test/region_info/giveBack_threadFreeList_nonincreasing.mlb.out.ok new file mode 100644 index 00000000..f27ed23b --- /dev/null +++ b/test/region_info/giveBack_threadFreeList_nonincreasing.mlb.out.ok @@ -0,0 +1 @@ +OK: giveBack_threadFreeList_nonincreasing diff --git a/test/region_info/giveBack_threadFreeList_nonincreasing.sml b/test/region_info/giveBack_threadFreeList_nonincreasing.sml new file mode 100644 index 00000000..2b915ae5 --- /dev/null +++ b/test/region_info/giveBack_threadFreeList_nonincreasing.sml @@ -0,0 +1,13 @@ +fun test () = + let + val name = "giveBack_threadFreeList_nonincreasing" + val b = Regions.getThreadFreeListSize () + val _ = Regions.giveThreadFreeListToGlobal () + val after = Regions.getThreadFreeListSize () + val ok = (after <= b) + in + if ok then print ("OK: " ^ name ^ "\n") + else print ("FAIL: " ^ name ^ "\n") + end + +val _ = test () diff --git a/test/region_info/isAtbot_false_afterAllocation.mlb b/test/region_info/isAtbot_false_afterAllocation.mlb new file mode 100644 index 00000000..9a9d84dd --- /dev/null +++ b/test/region_info/isAtbot_false_afterAllocation.mlb @@ -0,0 +1,3 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +isAtbot_false_afterAllocation.sml diff --git a/test/region_info/isAtbot_false_afterAllocation.mlb.out.ok b/test/region_info/isAtbot_false_afterAllocation.mlb.out.ok new file mode 100644 index 00000000..47b6a7a0 --- /dev/null +++ b/test/region_info/isAtbot_false_afterAllocation.mlb.out.ok @@ -0,0 +1 @@ +OK: isAtbot_false_afterAllocation diff --git a/test/region_info/isAtbot_false_afterAllocation.sml b/test/region_info/isAtbot_false_afterAllocation.sml new file mode 100644 index 00000000..f95a013e --- /dev/null +++ b/test/region_info/isAtbot_false_afterAllocation.sml @@ -0,0 +1,12 @@ +fun test () = + let with r + val name : string`r = "isAtbot_false_afterAllocation" + val ok = not (Regions.isAtbot `[r] ()) + in + if ok then + print ("OK: " ^ name ^ "\n") + else + print ("FAIL: " ^ name ^ "\n") + end + +val _ = test () diff --git a/test/region_info/isAtbot_false_initial.sml b/test/region_info/isAtbot_false_initial.sml new file mode 100644 index 00000000..1502806e --- /dev/null +++ b/test/region_info/isAtbot_false_initial.sml @@ -0,0 +1,12 @@ +fun test () = + let with r + val name = "isAtbot_false_afterAllocation" + val string = "test string"`r + val ok = not (Regions.isAtbot `[r] ()) + in + (if ok then print ("OK: " ^ name ^ "\n") + else print ("FAIL: " ^ name ^ "\n"); + string ^ "\n") + end + +val _ = test () diff --git a/test/region_info/isAtbot_true_initial.mlb b/test/region_info/isAtbot_true_initial.mlb new file mode 100644 index 00000000..831c31e3 --- /dev/null +++ b/test/region_info/isAtbot_true_initial.mlb @@ -0,0 +1,3 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +isAtbot_true_initial.sml diff --git a/test/region_info/isAtbot_true_initial.mlb.out.ok b/test/region_info/isAtbot_true_initial.mlb.out.ok new file mode 100644 index 00000000..269310d6 --- /dev/null +++ b/test/region_info/isAtbot_true_initial.mlb.out.ok @@ -0,0 +1 @@ +OK: isAtbot_true_initial diff --git a/test/region_info/isAtbot_true_initial.sml b/test/region_info/isAtbot_true_initial.sml new file mode 100644 index 00000000..ef260077 --- /dev/null +++ b/test/region_info/isAtbot_true_initial.sml @@ -0,0 +1,10 @@ +fun test () = + let with r + val name = "isAtbot_true_initial" + val ok = Regions.isAtbot `[r] () + in + if ok then print ("OK: " ^ name ^ "\n") + else print ("FAIL: " ^ name ^ "\n") + end + +val _ = test () diff --git a/test/region_info/memoryUsage_increases_afterAllocation.mlb b/test/region_info/memoryUsage_increases_afterAllocation.mlb new file mode 100644 index 00000000..4994d38c --- /dev/null +++ b/test/region_info/memoryUsage_increases_afterAllocation.mlb @@ -0,0 +1,3 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +memoryUsage_increases_afterAllocation.sml diff --git a/test/region_info/memoryUsage_increases_afterAllocation.mlb.out.ok b/test/region_info/memoryUsage_increases_afterAllocation.mlb.out.ok new file mode 100644 index 00000000..1d17357a --- /dev/null +++ b/test/region_info/memoryUsage_increases_afterAllocation.mlb.out.ok @@ -0,0 +1 @@ +OK: memoryUsage_increases_afterAllocation diff --git a/test/region_info/memoryUsage_increases_afterAllocation.sml b/test/region_info/memoryUsage_increases_afterAllocation.sml new file mode 100644 index 00000000..25e2fd39 --- /dev/null +++ b/test/region_info/memoryUsage_increases_afterAllocation.sml @@ -0,0 +1,14 @@ +fun test () = + let with r + val name : string`r = "memoryUsage_increases_afterAllocation" + val b = Regions.memoryUsageOfRegion `[r] () + val n = (Regions.getPageSizeBytes () div 2) + 1 + val s : string`r = CharVector.tabulate (n, fn _ => #"q") + val after = Regions.memoryUsageOfRegion `[r] () + val ok = (after > b) + in + if ok then print ("OK: " ^ name ^ "\n") + else print ("FAIL: " ^ name ^ "\n") + end + +val _ = test () diff --git a/test/region_info/memoryUsage_nonnegative_initial.mlb b/test/region_info/memoryUsage_nonnegative_initial.mlb new file mode 100644 index 00000000..cf1eb378 --- /dev/null +++ b/test/region_info/memoryUsage_nonnegative_initial.mlb @@ -0,0 +1,3 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +memoryUsage_nonnegative_initial.sml diff --git a/test/region_info/memoryUsage_nonnegative_initial.mlb.out.ok b/test/region_info/memoryUsage_nonnegative_initial.mlb.out.ok new file mode 100644 index 00000000..f128380b --- /dev/null +++ b/test/region_info/memoryUsage_nonnegative_initial.mlb.out.ok @@ -0,0 +1 @@ +OK: memoryUsage_nonnegative_initial diff --git a/test/region_info/memoryUsage_nonnegative_initial.sml b/test/region_info/memoryUsage_nonnegative_initial.sml new file mode 100644 index 00000000..f8639a04 --- /dev/null +++ b/test/region_info/memoryUsage_nonnegative_initial.sml @@ -0,0 +1,11 @@ +fun test () = + let with r + val name : string`r = "memoryUsage_nonnegative_initial" + val n = Regions.memoryUsageOfRegion `[r] () + val ok = (n >= 0) + in + if ok then print ("OK: " ^ name ^ "\n") + else print ("FAIL: " ^ name ^ "\n") + end + +val _ = test () diff --git a/test/region_info/numPages_increasing_afterAllocation.mlb b/test/region_info/numPages_increasing_afterAllocation.mlb new file mode 100644 index 00000000..b530114d --- /dev/null +++ b/test/region_info/numPages_increasing_afterAllocation.mlb @@ -0,0 +1,3 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +numPages_increasing_afterAllocation.sml diff --git a/test/region_info/numPages_increasing_afterAllocation.mlb.out.ok b/test/region_info/numPages_increasing_afterAllocation.mlb.out.ok new file mode 100644 index 00000000..bcd806f5 --- /dev/null +++ b/test/region_info/numPages_increasing_afterAllocation.mlb.out.ok @@ -0,0 +1 @@ +OK: numPages_increasing_afterAllocation diff --git a/test/region_info/numPages_increasing_afterAllocation.sml b/test/region_info/numPages_increasing_afterAllocation.sml new file mode 100644 index 00000000..a12b9e9e --- /dev/null +++ b/test/region_info/numPages_increasing_afterAllocation.sml @@ -0,0 +1,15 @@ +fun test () = + let with r + val name : string`r = "numPages_increasing_afterAllocation" + val b = Regions.numPagesOfRegion `[r] () + val n = ((Regions.getPageSizeBytes ()) + 1) div 2 + val s1 : string`r = CharVector.tabulate (n, fn i => if i = 0 then #"A" else #"B") + val s2 : string`r = CharVector.tabulate (n, fn i => if i = 0 then #"C" else #"D") + val after = Regions.numPagesOfRegion `[r] () + val ok = (after > b) + in + if ok then print ("OK: " ^ name ^ "\n") + else print ("FAIL: " ^ name ^ "\n") + end + +val _ = test () diff --git a/test/region_info/numPages_nonnegative_initial.mlb b/test/region_info/numPages_nonnegative_initial.mlb new file mode 100644 index 00000000..1fce0d55 --- /dev/null +++ b/test/region_info/numPages_nonnegative_initial.mlb @@ -0,0 +1,3 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +numPages_nonnegative_initial.sml diff --git a/test/region_info/numPages_nonnegative_initial.mlb.out.ok b/test/region_info/numPages_nonnegative_initial.mlb.out.ok new file mode 100644 index 00000000..f1943ad7 --- /dev/null +++ b/test/region_info/numPages_nonnegative_initial.mlb.out.ok @@ -0,0 +1 @@ +OK: numPages_nonnegative_initial diff --git a/test/region_info/numPages_nonnegative_initial.sml b/test/region_info/numPages_nonnegative_initial.sml new file mode 100644 index 00000000..557996bb --- /dev/null +++ b/test/region_info/numPages_nonnegative_initial.sml @@ -0,0 +1,11 @@ +fun test () = + let with r + val name : string`r = "numPages_nonnegative_initial" + val n = Regions.numPagesOfRegion `[r] () + val ok = (n >= 0) + in + if ok then print ("OK: " ^ name ^ "\n") + else print ("FAIL: " ^ name ^ "\n") + end + +val _ = test () diff --git a/test/region_info/region_usageWithinAllocatedPages.mlb b/test/region_info/region_usageWithinAllocatedPages.mlb new file mode 100644 index 00000000..051e8b8f --- /dev/null +++ b/test/region_info/region_usageWithinAllocatedPages.mlb @@ -0,0 +1,3 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +region_usageWithinAllocatedPages.sml diff --git a/test/region_info/region_usageWithinAllocatedPages.mlb.out.ok b/test/region_info/region_usageWithinAllocatedPages.mlb.out.ok new file mode 100644 index 00000000..ac189c66 --- /dev/null +++ b/test/region_info/region_usageWithinAllocatedPages.mlb.out.ok @@ -0,0 +1 @@ +OK: region_usageWithinAllocatedPages diff --git a/test/region_info/region_usageWithinAllocatedPages.sml b/test/region_info/region_usageWithinAllocatedPages.sml new file mode 100644 index 00000000..f634fa5f --- /dev/null +++ b/test/region_info/region_usageWithinAllocatedPages.sml @@ -0,0 +1,14 @@ +fun test () = + let with r + val name = "region_usageWithinAllocatedPages" + val pages = Regions.numPagesOfRegion `[r] () + val usage = Regions.memoryUsageOfRegion `[r] () + val ps = Regions.getPageSizeBytes () + val bound = (IntInf.fromInt pages) * (IntInf.fromInt ps) + val ok = (IntInf.fromInt usage) <= bound + in + if ok then print ("OK: " ^ name ^ "\n") + else print ("FAIL: " ^ name ^ "\n") + end + +val _ = test () diff --git a/test/region_info/resetRegion_doesNotIncreaseMemoryUsage.mlb b/test/region_info/resetRegion_doesNotIncreaseMemoryUsage.mlb new file mode 100644 index 00000000..cb773114 --- /dev/null +++ b/test/region_info/resetRegion_doesNotIncreaseMemoryUsage.mlb @@ -0,0 +1,3 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +resetRegion_doesNotIncreaseMemoryUsage.sml diff --git a/test/region_info/resetRegion_doesNotIncreaseMemoryUsage.mlb.out.ok b/test/region_info/resetRegion_doesNotIncreaseMemoryUsage.mlb.out.ok new file mode 100644 index 00000000..64be23ce --- /dev/null +++ b/test/region_info/resetRegion_doesNotIncreaseMemoryUsage.mlb.out.ok @@ -0,0 +1 @@ +OK: resetRegion_doesNotIncreaseMemoryUsage diff --git a/test/region_info/resetRegion_doesNotIncreaseMemoryUsage.sml b/test/region_info/resetRegion_doesNotIncreaseMemoryUsage.sml new file mode 100644 index 00000000..729eda38 --- /dev/null +++ b/test/region_info/resetRegion_doesNotIncreaseMemoryUsage.sml @@ -0,0 +1,15 @@ +fun test () = + let with r + val name = "resetRegion_doesNotIncreaseMemoryUsage" + val n = (Regions.getPageSizeBytes () div 2) + 1 + val s : string`r = CharVector.tabulate (n, fn _ => #"z") + val beforeReset = Regions.memoryUsageOfRegion `[r] () + val _ = Regions.resetRegion `[r] () + val afterReset = Regions.memoryUsageOfRegion `[r] () + val ok = (afterReset < beforeReset) + in + if ok then print ("OK: " ^ name ^ "\n") + else print ("FAIL: " ^ name ^ "\n") + end + +val _ = test () diff --git a/test/region_info/resetRegion_idempotent_memoryUsage.mlb b/test/region_info/resetRegion_idempotent_memoryUsage.mlb new file mode 100644 index 00000000..6fe0d7e4 --- /dev/null +++ b/test/region_info/resetRegion_idempotent_memoryUsage.mlb @@ -0,0 +1,3 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +resetRegion_idempotent_memoryUsage.sml diff --git a/test/region_info/resetRegion_idempotent_memoryUsage.mlb.out.ok b/test/region_info/resetRegion_idempotent_memoryUsage.mlb.out.ok new file mode 100644 index 00000000..4d8b6454 --- /dev/null +++ b/test/region_info/resetRegion_idempotent_memoryUsage.mlb.out.ok @@ -0,0 +1 @@ +OK: resetRegion_idempotent_memoryUsage diff --git a/test/region_info/resetRegion_idempotent_memoryUsage.sml b/test/region_info/resetRegion_idempotent_memoryUsage.sml new file mode 100644 index 00000000..e877d27a --- /dev/null +++ b/test/region_info/resetRegion_idempotent_memoryUsage.sml @@ -0,0 +1,16 @@ +fun test () = + let with r + val name = "resetRegion_idempotent_memoryUsage" + val n = (Regions.getPageSizeBytes () div 4) + 1 + val s : string`r = CharVector.tabulate (n, fn _ => #"m") + val _ = Regions.resetRegion `[r] () + val u1 = Regions.memoryUsageOfRegion `[r] () + val _ = Regions.resetRegion `[r] () + val u2 = Regions.memoryUsageOfRegion `[r] () + val ok = (u1 = u2) + in + if ok then print ("OK: " ^ name ^ "\n") + else print ("FAIL: " ^ name ^ "\n") + end + +val _ = test () diff --git a/test/region_info/resetRegion_keepsAtbot_onEmpty.mlb b/test/region_info/resetRegion_keepsAtbot_onEmpty.mlb new file mode 100644 index 00000000..fb3c9ef7 --- /dev/null +++ b/test/region_info/resetRegion_keepsAtbot_onEmpty.mlb @@ -0,0 +1,3 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +resetRegion_keepsAtbot_onEmpty.sml diff --git a/test/region_info/resetRegion_keepsAtbot_onEmpty.mlb.out.ok b/test/region_info/resetRegion_keepsAtbot_onEmpty.mlb.out.ok new file mode 100644 index 00000000..fc3eeb53 --- /dev/null +++ b/test/region_info/resetRegion_keepsAtbot_onEmpty.mlb.out.ok @@ -0,0 +1 @@ +OK: resetRegion_keepsAtbot_onEmpty diff --git a/test/region_info/resetRegion_keepsAtbot_onEmpty.sml b/test/region_info/resetRegion_keepsAtbot_onEmpty.sml new file mode 100644 index 00000000..b358b9b9 --- /dev/null +++ b/test/region_info/resetRegion_keepsAtbot_onEmpty.sml @@ -0,0 +1,11 @@ +fun test () = + let with r + val name = "resetRegion_keepsAtbot_onEmpty" + val _ = Regions.resetRegion `[r] () + val ok = (Regions.isAtbot `[r] ()) + in + if ok then print ("OK: " ^ name ^ "\n") + else print ("FAIL: " ^ name ^ "\n") + end + +val _ = test () diff --git a/test/region_info/resetRegion_resets_with_liveRef.mlb b/test/region_info/resetRegion_resets_with_liveRef.mlb new file mode 100644 index 00000000..26f25121 --- /dev/null +++ b/test/region_info/resetRegion_resets_with_liveRef.mlb @@ -0,0 +1,3 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +resetRegion_resets_with_liveRef.sml diff --git a/test/region_info/resetRegion_resets_with_liveRef.mlb.out.ok b/test/region_info/resetRegion_resets_with_liveRef.mlb.out.ok new file mode 100644 index 00000000..ffdf1d52 --- /dev/null +++ b/test/region_info/resetRegion_resets_with_liveRef.mlb.out.ok @@ -0,0 +1 @@ +OK: resetRegion_resets_with_liveRef diff --git a/test/region_info/resetRegion_resets_with_liveRef.sml b/test/region_info/resetRegion_resets_with_liveRef.sml new file mode 100644 index 00000000..774f4428 --- /dev/null +++ b/test/region_info/resetRegion_resets_with_liveRef.sml @@ -0,0 +1,21 @@ +(* Regions.resetRegion resets even when a live reference exists. + The built-in resetRegions would refuse to reset in this situation. + We verify the reset happened by checking memory usage decreased, + even though we use the value after the reset. *) + +fun test () = + let with r + val name = "resetRegion_resets_with_liveRef" + val n = (Regions.getPageSizeBytes () div 2) + 1 + val s : string`r = CharVector.tabulate (n, fn _ => #"x") + val beforeReset = Regions.memoryUsageOfRegion `[r] () + val _ = Regions.resetRegion `[r] () + val afterReset = Regions.memoryUsageOfRegion `[r] () + val ok = (afterReset < beforeReset) + in + if ok then print ("OK: " ^ name ^ "\n") + else print ("FAIL: " ^ name ^ "\n"); + ignore s + end + +val _ = test () diff --git a/test/region_info/resetRegion_setsAtbot_afterAllocation.mlb b/test/region_info/resetRegion_setsAtbot_afterAllocation.mlb new file mode 100644 index 00000000..9e837b7e --- /dev/null +++ b/test/region_info/resetRegion_setsAtbot_afterAllocation.mlb @@ -0,0 +1,3 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +resetRegion_setsAtbot_afterAllocation.sml diff --git a/test/region_info/resetRegion_setsAtbot_afterAllocation.mlb.out.ok b/test/region_info/resetRegion_setsAtbot_afterAllocation.mlb.out.ok new file mode 100644 index 00000000..e2ccc3dd --- /dev/null +++ b/test/region_info/resetRegion_setsAtbot_afterAllocation.mlb.out.ok @@ -0,0 +1 @@ +OK: resetRegion_setsAtbot_afterAllocation diff --git a/test/region_info/resetRegion_setsAtbot_afterAllocation.sml b/test/region_info/resetRegion_setsAtbot_afterAllocation.sml new file mode 100644 index 00000000..26d5a706 --- /dev/null +++ b/test/region_info/resetRegion_setsAtbot_afterAllocation.sml @@ -0,0 +1,13 @@ +fun test () = + let with r + val name = "resetRegion_setsAtbot_afterAllocation" + val n = (Regions.getPageSizeBytes () div 8) + 1 + val s : string`r = CharVector.tabulate (n, fn _ => #"h") + val _ = Regions.resetRegion `[r] () + val ok = (Regions.isAtbot `[r] ()) + in + if ok then print ("OK: " ^ name ^ "\n") + else print ("FAIL: " ^ name ^ "\n") + end + +val _ = test () diff --git a/test/region_info/size_int_zero.mlb b/test/region_info/size_int_zero.mlb new file mode 100644 index 00000000..c2de1e11 --- /dev/null +++ b/test/region_info/size_int_zero.mlb @@ -0,0 +1,4 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +$(SML_LIB)/examples/fragAssembling/size.mlb +size_int_zero.sml diff --git a/test/region_info/size_int_zero.mlb.out.ok b/test/region_info/size_int_zero.mlb.out.ok new file mode 100644 index 00000000..4e730de0 --- /dev/null +++ b/test/region_info/size_int_zero.mlb.out.ok @@ -0,0 +1 @@ +OK: size_int_zero diff --git a/test/region_info/size_int_zero.sml b/test/region_info/size_int_zero.sml new file mode 100644 index 00000000..fd76eb0c --- /dev/null +++ b/test/region_info/size_int_zero.sml @@ -0,0 +1,10 @@ +fun test () = + let + val name = "size_int_zero" + val ok = (Size.size Size.int 42 = 0) + in + if ok then print ("OK: " ^ name ^ "\n") + else print ("FAIL: " ^ name ^ "\n") + end + +val _ = test () diff --git a/test/region_info/size_leq_regionUsage.mlb b/test/region_info/size_leq_regionUsage.mlb new file mode 100644 index 00000000..212b7335 --- /dev/null +++ b/test/region_info/size_leq_regionUsage.mlb @@ -0,0 +1,4 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +$(SML_LIB)/examples/fragAssembling/size.mlb +size_leq_regionUsage.sml diff --git a/test/region_info/size_leq_regionUsage.mlb.out.ok b/test/region_info/size_leq_regionUsage.mlb.out.ok new file mode 100644 index 00000000..d8a334f6 --- /dev/null +++ b/test/region_info/size_leq_regionUsage.mlb.out.ok @@ -0,0 +1 @@ +OK: size_leq_regionUsage diff --git a/test/region_info/size_leq_regionUsage.sml b/test/region_info/size_leq_regionUsage.sml new file mode 100644 index 00000000..7510b2c7 --- /dev/null +++ b/test/region_info/size_leq_regionUsage.sml @@ -0,0 +1,19 @@ +(* The computed size of a value should not exceed the + memory usage of the region it resides in. *) + +fun test () = + let with r + val name = "size_leq_regionUsage" + val s : string`r = CharVector.tabulate (100, fn _ => #"x") + val computed = Size.size Size.string s + val regionUsage = Regions.memoryUsageOfRegion `[r] () + val ok = (computed <= regionUsage) + in + if ok then print ("OK: " ^ name ^ "\n") + else print ("FAIL: " ^ name + ^ " (size=" ^ Int.toString computed + ^ ", region=" ^ Int.toString regionUsage ^ ")\n"); + ignore s + end + +val _ = test () diff --git a/test/region_info/size_list_grows.mlb b/test/region_info/size_list_grows.mlb new file mode 100644 index 00000000..88279e87 --- /dev/null +++ b/test/region_info/size_list_grows.mlb @@ -0,0 +1,4 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +$(SML_LIB)/examples/fragAssembling/size.mlb +size_list_grows.sml diff --git a/test/region_info/size_list_grows.mlb.out.ok b/test/region_info/size_list_grows.mlb.out.ok new file mode 100644 index 00000000..37567c68 --- /dev/null +++ b/test/region_info/size_list_grows.mlb.out.ok @@ -0,0 +1 @@ +OK: size_list_grows diff --git a/test/region_info/size_list_grows.sml b/test/region_info/size_list_grows.sml new file mode 100644 index 00000000..122c5d85 --- /dev/null +++ b/test/region_info/size_list_grows.sml @@ -0,0 +1,13 @@ +fun test () = + let + val name = "size_list_grows" + val sz = Size.list Size.int + val s1 = Size.size sz [1] + val s3 = Size.size sz [1, 2, 3] + val ok = (s3 > s1) + in + if ok then print ("OK: " ^ name ^ "\n") + else print ("FAIL: " ^ name ^ "\n") + end + +val _ = test () diff --git a/test/region_info/size_list_nil_is_word.mlb b/test/region_info/size_list_nil_is_word.mlb new file mode 100644 index 00000000..20cffedf --- /dev/null +++ b/test/region_info/size_list_nil_is_word.mlb @@ -0,0 +1,4 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +$(SML_LIB)/examples/fragAssembling/size.mlb +size_list_nil_is_word.sml diff --git a/test/region_info/size_list_nil_is_word.mlb.out.ok b/test/region_info/size_list_nil_is_word.mlb.out.ok new file mode 100644 index 00000000..299e7516 --- /dev/null +++ b/test/region_info/size_list_nil_is_word.mlb.out.ok @@ -0,0 +1 @@ +OK: size_list_nil_is_word diff --git a/test/region_info/size_list_nil_is_word.sml b/test/region_info/size_list_nil_is_word.sml new file mode 100644 index 00000000..69a6b774 --- /dev/null +++ b/test/region_info/size_list_nil_is_word.sml @@ -0,0 +1,11 @@ +fun test () = + let + val name = "size_list_nil_is_word" + val s = Size.size (Size.list Size.int) ([] : int list) + val ok = (s = 8) (* one word for nil tag *) + in + if ok then print ("OK: " ^ name ^ "\n") + else print ("FAIL: " ^ name ^ " (got " ^ Int.toString s ^ ")\n") + end + +val _ = test () diff --git a/test/region_info/size_option_some_gt_none.mlb b/test/region_info/size_option_some_gt_none.mlb new file mode 100644 index 00000000..cb82911c --- /dev/null +++ b/test/region_info/size_option_some_gt_none.mlb @@ -0,0 +1,4 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +$(SML_LIB)/examples/fragAssembling/size.mlb +size_option_some_gt_none.sml diff --git a/test/region_info/size_option_some_gt_none.mlb.out.ok b/test/region_info/size_option_some_gt_none.mlb.out.ok new file mode 100644 index 00000000..a150be1e --- /dev/null +++ b/test/region_info/size_option_some_gt_none.mlb.out.ok @@ -0,0 +1 @@ +OK: size_option_some_gt_none diff --git a/test/region_info/size_option_some_gt_none.sml b/test/region_info/size_option_some_gt_none.sml new file mode 100644 index 00000000..fbf46cd5 --- /dev/null +++ b/test/region_info/size_option_some_gt_none.sml @@ -0,0 +1,14 @@ +fun test () = + let + val name = "size_option_some_gt_none" + val szNone = Size.size (Size.option Size.int) NONE + val szSome = Size.size (Size.option Size.int) (SOME 42) + val ok = (szSome > szNone) + in + if ok then print ("OK: " ^ name ^ "\n") + else print ("FAIL: " ^ name + ^ " (NONE=" ^ Int.toString szNone + ^ ", SOME=" ^ Int.toString szSome ^ ")\n") + end + +val _ = test () diff --git a/test/region_info/size_string_positive.mlb b/test/region_info/size_string_positive.mlb new file mode 100644 index 00000000..b7a9f1fa --- /dev/null +++ b/test/region_info/size_string_positive.mlb @@ -0,0 +1,4 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +$(SML_LIB)/examples/fragAssembling/size.mlb +size_string_positive.sml diff --git a/test/region_info/size_string_positive.mlb.out.ok b/test/region_info/size_string_positive.mlb.out.ok new file mode 100644 index 00000000..9db8c2ca --- /dev/null +++ b/test/region_info/size_string_positive.mlb.out.ok @@ -0,0 +1 @@ +OK: size_string_positive diff --git a/test/region_info/size_string_positive.sml b/test/region_info/size_string_positive.sml new file mode 100644 index 00000000..49014519 --- /dev/null +++ b/test/region_info/size_string_positive.sml @@ -0,0 +1,10 @@ +fun test () = + let + val name = "size_string_positive" + val ok = (Size.size Size.string "hello" > 0) + in + if ok then print ("OK: " ^ name ^ "\n") + else print ("FAIL: " ^ name ^ "\n") + end + +val _ = test () diff --git a/test/region_info/size_tup2_positive.mlb b/test/region_info/size_tup2_positive.mlb new file mode 100644 index 00000000..7d52748e --- /dev/null +++ b/test/region_info/size_tup2_positive.mlb @@ -0,0 +1,4 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +$(SML_LIB)/examples/fragAssembling/size.mlb +size_tup2_positive.sml diff --git a/test/region_info/size_tup2_positive.mlb.out.ok b/test/region_info/size_tup2_positive.mlb.out.ok new file mode 100644 index 00000000..ef3365a8 --- /dev/null +++ b/test/region_info/size_tup2_positive.mlb.out.ok @@ -0,0 +1 @@ +OK: size_tup2_positive diff --git a/test/region_info/size_tup2_positive.sml b/test/region_info/size_tup2_positive.sml new file mode 100644 index 00000000..5c3090c2 --- /dev/null +++ b/test/region_info/size_tup2_positive.sml @@ -0,0 +1,11 @@ +fun test () = + let + val name = "size_tup2_positive" + val s = Size.size (Size.tup2 Size.int Size.int) (1, 2) + val ok = (s > 0) + in + if ok then print ("OK: " ^ name ^ "\n") + else print ("FAIL: " ^ name ^ " (got " ^ Int.toString s ^ ")\n") + end + +val _ = test () diff --git a/test/region_info/threadFree_lTotalAllocated.mlb b/test/region_info/threadFree_lTotalAllocated.mlb new file mode 100644 index 00000000..5a84a9d0 --- /dev/null +++ b/test/region_info/threadFree_lTotalAllocated.mlb @@ -0,0 +1,3 @@ +$(SML_LIB)/basis/reml.mlb +$(SML_LIB)/basis/basis.mlb +threadFree_lTotalAllocated.sml diff --git a/test/region_info/threadFree_lTotalAllocated.mlb.out.ok b/test/region_info/threadFree_lTotalAllocated.mlb.out.ok new file mode 100644 index 00000000..6ed77151 --- /dev/null +++ b/test/region_info/threadFree_lTotalAllocated.mlb.out.ok @@ -0,0 +1 @@ +OK: threadFree_lTotalAllocated diff --git a/test/region_info/threadFree_lTotalAllocated.sml b/test/region_info/threadFree_lTotalAllocated.sml new file mode 100644 index 00000000..2cbacd22 --- /dev/null +++ b/test/region_info/threadFree_lTotalAllocated.sml @@ -0,0 +1,10 @@ +fun test () = + let + val name = "threadFree_lTotalAllocated" + val ok = (Regions.getThreadFreeListSize () < Regions.getNumAllocatedPages ()) + in + if ok then print ("OK: " ^ name ^ "\n") + else print ("FAIL: " ^ name ^ "\n") + end + +val _ = test ()