From 2627a5bb393790901751683c2d51f22945148494 Mon Sep 17 00:00:00 2001
From: MaxED <j.maxed@gmail.com>
Date: Sun, 19 Jun 2016 21:17:46 +0000
Subject: [PATCH] Added partial "LightMode" MAPINFO property support. Currently
 only "Standard" and "Doom" light modes are supported. Updated Zandronum acc.
 Updated Zandronum_ACS.cfg.

---
 Build/Compilers/Zandronum/acc.exe      | Bin 60973 -> 70656 bytes
 Build/Compilers/Zandronum/zdefs.acs    | 127 +++-
 Build/Compilers/Zandronum/zspecial.acs | 108 ++-
 Build/Scripting/ZDoom_ACS.cfg          |  42 +-
 Build/Scripting/Zandronum_ACS.cfg      | 957 ++++++++++++++++---------
 Source/Core/GZBuilder/Data/MapInfo.cs  |  18 +
 Source/Core/Rendering/Renderer.cs      |  12 +-
 Source/Core/ZDoom/MapinfoParser.cs     |  36 +-
 8 files changed, 913 insertions(+), 387 deletions(-)

diff --git a/Build/Compilers/Zandronum/acc.exe b/Build/Compilers/Zandronum/acc.exe
index 005a7147a044ad4b144afeab724420e6b2c4fb4f..6286906eecb17c6212e24da3a8341a38f766a83b 100644
GIT binary patch
literal 70656
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
TXVT{LI8UNj|MUD`Y=Qp`FySAb

literal 60973
zcmeFaeSB2K^*??$*(6KYunQy*Fwq4P2=ZVcL|8V_MMzi`a3Qc^MG}D|Y*wBc?nU&I
zgy2nVmTN>?+mBYQ#MstaTWM=8C}P4Q0Uz-hi_cm;>w-p6SSoVA?=yEdpzY`L`~Cj>
zzFxn)a_^lxbLPyMGiT16IWu>5{<U{V$&w_Qap}4w?ZT7)+~WSf-;N-8&_z!Uk{%!M
z;;3Dwc`uGy9H`&u*wC<kb;F9aj#Vqxty?cUR@OQily#2!b&fgLR5;eIuc@7!k&&Jk
zN4>1<t!ppJ+dUw0)y(+YfNZ?qH{<UEF2r+#>#qYc#q;R_IRb9ifT?(nNc-!6;dm~p
zUlriIKc>`MCQ0*5$<oGgPH!UZ1IcC@XiAl&n-TMbNkpf%<6*~j2fw<FaFW3fj$yut
zzw6IMGQR{M=i|)c+5g~3=?w4{h|vFj>jqrT{|@rQRKO?N=!Xf$+hn<Rvy9;9H{r%~
zab5c>fiV6Yl63v#hME=f3Q78aD+8PYrWw!k{@h^5WCKjf-U)u~K;jx)x8OSO&n-#a
z=e_>_!T*amuyCO^C(l~3q$|fdOF}T)SJ~x2kXEC;X)uI-ue9I_$wv>=N>b6$ihv}U
zq(DwOAX3XEN!@R!U^*awiWk~gFG-zu&%Z)?IvW6L%=FABJKU1?qMW3?tQX&bgoR#T
zpc`=&^a8qU=P^X7`?CS5eG8ydTE<SqXm6;eO?Z9F=UucgutR{~&*1ME;LdD$LeWWW
zajK=mn(BJ3d6+(BQQ&R?w&@(0T|HoR=A<fbX}RAZU(mEPv?eddbwoCY8uN0r;!hBX
z7>BD*#5lApGGgqm!y?A6WgIbLGF=BnOlD^vB0#N@q<yc;c{vrh75H#-EW&N#!b)#o
zBIpQ8bld`cTKqV`1+xNnBl=B5tNY#bD!OEK)$*e5WqyCS(|m_p@@d5q9%{EcaMy!w
z$*aF9q5}cEAhQ2`&X3;BKYD+m^M~+{{^-5^NAF92_zvQjgiOTt7fGPqAOX!?74{XK
z3>BNbS4h1n7Th5xQm9x$C{!FneW`LKL?N;qx2{Uu#vt7(;CFojT9uSt@8IDLbmQ)$
zXVWAw#99?rk6G24Jd3oXGH9xPngz^R$})+@ve<5)gi<QBTq`rGcTQer5|DPXoNDv(
z?Ao;UmdhsD+8#w@dCO%eg317I+neew*I%>k?N(`yU*4>eSuXL&=~RHk$ddquyl1*n
zxD;E*BY4;6<k|bN;w4j`)=qV+B*`DqkQ^%A&+<_E5blgzf34_{8uQqG(G$w(?vGQ+
z<3Dxef^NUN>rq5T7l%p(b4r<6piZ9cqmO_s`UpzM<}T-vhk0ymwYskRme7YAB`NUD
zgKlX_bciqB_g>_<V~F$73n|PmJ5$O8BD+0agWHas)pfNoFI%cw1`f<d5dlIT`VHDc
z)JiX;QK*a)Fn+&sQGh%4650UdOXy|bHHxKrQAB3-a<oerVwnl12VU=TOZuC==DZz=
zz~)3?Mj{YHY5JS~ph?fNBTrQz^C3jYc@{k@8}I%u7LT@WzmkbabHIXBZ*T%l0;Q-@
z7<DmsP2)D5lV|BFL?GM&-Q)$Zl`rxLK<kfUry8*lJfzM%<ZA1dZC*Vq2Suv+93lDD
z(uw?(EeYDfOSEGP)!H+XS}GuvY(Xq}OcLZiPA;eTJ2_`tw~}pi$2*<`R_=~j+*|$r
zXqFnQQS5;L;%N<X`{_nBq@KdrDzxPmALQBZoNraObaLH5++eMkE2rl3yQIaUHm&qF
za7HU;)ft+9MlGE&2q{Wdr7tiKctaWdPJ@6QO`?_-a6Vt9VhhaSQcoHTh+Y_&!LOeg
zuWd)=8!7??9P<WZ{C-4STS50Dj3$r=>WbY<FNl;t9z#9G`I^p1ez~YKPzt@(!nYhG
zwd~-aL>+(#WFtZ^765k6wwbf-&#bOmb|_5HzRW%cvnK4@I|GCYDf3bKPe3v~lq{;y
z)*W~Vd3{P6eZ2uaA%(J#?AH$XtHPbx5R0N$!KY!nIp~B`$b+<57PZH61=``uqVBL}
zej^7-EC?1B4+{Y=su<U#EG$}a0k?m*n_pOyabtpez&nVe;?anKLc<GWbRsfneg3wS
zijX-w-Sxe$`$3ffA+qRMg$XFX0hUQ?`@z&wR*RC7TF0^+w*7rxo>}Xu%h#oz4=g<q
zOL9**0g@shpuGT~y#feH+WL`%N6!cL<b6f2Zj<v;ktum!Pb3@JAg=1Mf(oCeSSo#_
zua~4!DG60>uooTmRRlAL&Y<(}w?>nSjt1DY4M;6uxSsV8a{)pV(?exv6f0maracC1
zN7)gtuAI@cb^yi?2-FDa<LN#lT~m$$f#6Ea@A^&|sw);>;88SOMFnjZFqytef#E)2
zKtMa9XWcCdw7cGGvH?CQ0pGkhzA|fQhIT+mil|RsN7*}|0IYu)nNA(?v(h{i_8Ap0
zsS+y>yHN+Nk85#OSIkA-RpCk`uoB4xfsZ1uPmA@JT-5Dq%!54I?(b%{Rro5kCW}@)
z17NnjX%GeNh*oB`?d9>!?>Yi))N;8b547!_YnrQ<S-sJBi@Kx3<Dju~pc7(#trx^E
z4+CQ(B<$3-wAOBUD8?6vJfm+<-BxZY_eUcP_aC8n{Q6H&l{9gkBz4F$^lfuy=w7;*
z#hEo_mg|%}cw6d%lF9P0ZK+-wjD+Z?%$7>}a4pL`O4<ftE4f4-SaO}5Rx(pgMh}6t
z6DOdOUIE-W)GtFh3Dns@o!N5PWZAl{Twma&Cy)^Rv}G*plK!l}<RUmPVC`J~od9CG
z(iTLIflX;Gbtbl~kOizRdR1+*m=udMi-$USy3m-2O6u@9l%dWn9tP!6ojeM-_QAe8
z=v-oz2X~a&Aq3WidY0(1`>o5v+%2}5z})nfn@lqmGuOsTSxkAj=+G`{57a^i-$NN}
zL3XiSD5r-!7PZ^zv?wP-8N!q^%(o1-*+Lm?1BNo#=%egvC^HzX68&u^EP>wBx(+D`
znyQNQVA8VAR=}vSa@+RD(T{Acui);nwMOw!X@WdPCA+P4k9f1lgD`MEfG{n}K*Q{(
zLkLHorYEW}78!W1vu)ppqHL{q<F3YvZLO^$;F1+J=98UjY?-a?Pl$3BuNehHq;(ol
z1Rm;U8~I_3=z+}$R?_`ExbL@ziXVN}Ek*2rNx+*CR!iB^w8-hc;7aO^vDymM2o$x*
z=MNR{N3uWiHj1H~L8$X^@UoKb0nw2G=i%A~fWQoqaiYjr%EkF3I}oo@wS0p|uJXtu
zJ#wZmIFYJEL6md@up9umFZ##eCBbBR5&Z4s%J^Nq5aB?kKzNkZWGGj}M;EycC=2xB
z>oKlS-h2pIsQ3er7@bLfW12Ptn^8ZxAP{?od2t`IJ4@Nj@&ot<Jmm~uAjCC#^AuN@
zX2Il)T!x$~&1XYzl1c;R3sp*&2Uq%nQ|VcNL5V~z07xa3!0?RPX(SBs$N(mu-oxnS
zk9?1EDx+VcqYE1Wf)Oa_fk~f4Be?=aCsBG0>J}>Y4B`7?ai4=b{b~t_dFncD4z8sM
z>Xf$5V5B~bPeLAoi`CeOWy+L_pqYLPAwea<0>59j`hunk8f}nR5gbYFNJXXA09}zD
zU9HBFl`9N}1stG9&)NxHB091iSp)6Nh!;<a8X90|h(9rB)t7bugcywhqG%3XJDyDr
zRX5pg`+X9|99`c6;oN>d!mhK8Ln;GSqq36>ogH<k2ldJcy<TAZma+N0fp5^9V8=iK
zVK>B_EveWjTiYB66YW~Yl76)^C}<0grf0ZW?qc%Bp-RCEf+h4QqJr7L(S-n{S}kS%
znU#S-Q!tm(Pz%35E*x(xGVGPic%@9i5%lS|qMFfh@qA4e29x68#{us5Z_8kO?VfBs
zMKsJfCa9GA<9J)^%@BP-*jyA24yPkA-d9WInQCl7^9VJzq`6RyRmv08*tPOlHC88M
z1YIrXPz~}##~9_Bf`h7L2YAmNI+}(+8`shU>in=cxnz@)w!07Pil*!)Jlam~>U+j5
z$tk;T!(*Xd%rM@-3kE}<{1;a%Gr~>j3U8SvPgbc^&R1!Ooa2$RJWw`rnn#%$OpUG%
zrbJf-&C%*$a&%cRDGKEktq7(?uTg1<?D2SHw@S(Kbd{{~MIJdDY@J0rzd^kv>MLfJ
zTO(nV63mF^q7v~c(CvVLMLRHPi>3x)N(3!cbj+V%U5%0+G%cf}h=?X@%VDK5Lu(a_
z`g{^Si&!7s1e`{t&~50FxyYLTFo1YMJRS-cQ+-%)+{%~JC{dVN%IPLH%*h5oG&}PI
zxx<`$zg16R4Ij;=&(TZ}^x$Ip>;(7L0#Oe;U5%23Nr7ppvzP}3c`n8ei!n-g%<@1C
z3gzkyN%^`e+;&JF(P7@CPiteqfZLGuSr`CN6epP5EJ)}u9#!Fm3oDjD0o-Q5jR2fB
zNhq+Qqfli+4de<nkSo+cu8_8$FN734zO-Me%H`2&tVGU5myqG=SS1fdHFC&-YWV%Z
ztCw~$A9*HuHD;39Y3>-9^k&no*D^PSinL#YUdtAc>x8Y9<wI?@X2>JY>l3ejjX{it
zPGhFoqn9|VrYX}<OeO6`g1%{@zNwJzMKG|2>jG8NDKdOi#2Flv0&*jxlc12Q3giVa
z_O3$aAT^%LT*a9e$1~U9Mctnh%?oD4Dcmn8)SivceaEEmfE22l7Ansc9--i%;Hc1?
zyd2tz_Cl|_3$6jy5q8lP?-h}e1E?99P;F9>9PgARavn47qF@pR<!X5b2)lqj{tC?N
zO<~TJAd^2jimnhC^A#IZ%vicoU_|#w6D0<ds)fRtis(4S|FwXt&J%+3b;~v&Mr<^<
zG7fex!2VsMyx~LUghpAA&?w)6i!co_yM}e287iOH$@98Ud0{6DMyNao{9)IC!5#H`
zQ>eKB3{r9`$UhauP&3eiX>o8zgdMX~kI3K+!7-uYd5k5Odkk$uQDEbIq*c(1smx51
zU;d_(6Q6z&*<8=cd8IEQAm_TilZVhF$WQ^^)zI(yL=~6NuP+0R;N`(QDnTNd&MSOE
zd5$ks?x3bQ+^-)hWLDWjxl91uR_wG=kLAJHP$2EH>=RC%GY}2#EZ)E|qqjs2E&Wsr
zXmI8d=xXGi@1SugAA&FRKiUiob0^e&n=Yr(NAsXzQYZ%xF&+Cs`+WYT(LSD_*=Qh<
z<)o42a*R;%u@_Cyr=%4fbyQ_Xb2L$Wo8DfPtqky0&<55tem#YWqI8VfaZwwnTo%tR
zXVce<!IKH2F`=!XGqX5D<iB}z`v>CV@EA>U(e`SrK%vOZNK|9_wzi*epeE0baXaY1
z6g9ijOa7J2LCoD*Vgb_url`6_t|txXjOelG45omJ6f&ch(8M$752Ikaui2B?)*UL7
zlp)~XPw2BRSoX_=<IUfuE2%7OQ48*N+hb)CdYL`AAvks})uBNlBjZs*v<+F;(W9Kz
zPs7ivf}FzSA8R{lYu&{}8K#T2CeJPpSW-dX305u9H(3G)jdmRh#SLNTEw{pgk_1yj
z%_X6A?&k3wbI<n9*_(~}!^hA#vSV>;cE`M1bKIKWY<p~EXoUK?S&f)I%9nwi2CiP#
zfo;0Kd1Oabj$Raa*ofYVXy#Vfe2o$j-U-+W_j07*-#~b;Y+!8W60eWSC!EJwG{|kR
z(t`G20R_;msOy9Z;b~o_?#~NDJ~d38+D=yPa_<vTI|C1Iz=1nTa2mx@3`PWN>`bG$
zRq{ZnlyVv_5Nc<Grc>`<pfBJ0nHz1twU^r=I12XMo8YRJE9^Pf`~Jp39pz(|c*%Jj
zRm5=7QJ&`wj-x*VNQnN!2*g#))GN6PXk&Sp5wiqFjtTj|gUDN8Ce<-T3E8=uV;1+v
zjFpEk32f!KmyV(8V`(HXvkFV0OZtKGl?#^yZegI`0|>ouES&&j;yC>>yeg1@Uv#V8
zaHtq#&ex!-eQ9<mP}1w>nr;a?)b5<1<fYqS-!r`@Ws9Ej2?RP?tf%n&DmtkjO-cgI
zAArUWJZ&fa49=6WXsVua1W%)MwAs_JzeSrp4w}$rH(~^3H4_ea_KB8xfVHwAnP~d~
zXx(Cl#5|R*2CN!O3yuw%mBF+K(ORitQ=fW2nn5eiiwKTG0~8`cG{86xq{k~;3@Uku
z()!58@daqlR0KlJ*`16{JE-n2==sn-@L*^`4!z|~ux`9EM!^09oYu;7{Qi7iMAb4l
z4}<qW>7yYgF-|sy{{lEv@R#Qh*jk-De6YkmVI<y!L`<lmUCq+2yTAar%y~V9b?at>
zAKRfqMI}}uOK@Pk5*y$kMFn`llNxdnj#UO~j0{ym=NF(laW*Q0f!``A>0|~tQ)yP~
zazwcXpXL0(4kPbqE{x}O--6ZgqE@h`-Jgl7J&%Duasao$3kLWJ*3kWJl}3*sEjm81
z%Se3#sRG%<0vQ`qag=F*gMk>i8PBby0VK3Y7<_m+KuNC*mQl**EV;1lteu>yr|@0N
z?0Dx%SZve8!;~fLFl*cOLuVzF^laPq8_`8=t-PY8#)@p)yMfo%`XKIVY|NHLa+w-S
zk}p+bDQu(JZMTO7;1JvPClT<{gzUI&RMhQES&D}B+Bya$A?`SmX+6f?ND5vT(h!b3
z&6%md*7~RjSmX=gA`nBu=@i*g8T3SihPPw^_9aH}!Z6mBinS6d#u@>43ZggAFhoWk
z<K!*FMRH1IaBlQ{dXeLK7*b<1x75mhm8QuK*!x2~C}kkSKVk=j!l5gMAan!6qGaU1
zGHN9a#kzWx;g!Lw=mA1u<0vZlZjH?1JP&3f&vX&8A;ilr(1f<uPX)6|ZMXkU1l-L-
z)z}rb?f2l#@FFC0o_Z_toaVTTMk4g3fW3Chb+T8ba$9RB-aYb6%*;I?S{@3zZJ44c
zJ{mL#;N6_@OD6vb4m~&mp+`A1l`F!{MT<F3=)V|;ZbzI-%jI<*88e?0c{blJQz?~Q
z6m~s>1!TMs3HYjH`f`9UEW!iPXD+23#dvVHyU<_&nIO~A%V-0TMyL0tT!)r6Nhw(6
z;x>O9owSl_l94v@$7$$5@X(Zl1AZ+vUTO*pqVNOK?_r$4V`rwZ7@CBc_LVTYdKa)R
zh-^bL<}QXZ3@Al(6C(O;-;pqSWvnr*l3^Uc@csN#?gaD>@?y$#BTtp9!huirxp@HF
zZ0L5jtgZw=ykq@rHn{X}hHfVi@hAbiIu7?|z-fIu*i`kmm&fPMe)|0Cesb~^Om~Bu
zsMa9jFjCamc)8G^y+Ao0%~xXs6$d?m6e>m&VT>4p!ED+zN!nJP?IrnAu5-WQUzkvR
zPl5NSRx|PmSE6usR|d>sQLi0QUGL=f2oBO>!BIUiyLP0LTV?BKtZw1iCcjWf_M($*
zM{T$N3=Kk41$9%E%;2SvawiwiTNXnjVYV=U?q&GenB+PEH-#x!M0frZtnAom^3&<7
zkko`l-hng`T|YGEZ%3jdXf=XZ8n8PRi##xJgiEL@0xs8yCR2I5Lh_$or<%qIbXNc!
zWb1acC6D4`QLb8h1Z`FoQeyN=6d}fgFw%t(-h)8VQP@?^<uPTUdLS8I{;6y@@5eyt
zm($^0r<)KFy=ZIG8Pr+Y1hNAflkwIkED{V5nSvb4Eq+_;pOFw;NPCbY@({uX9yzO{
z+~TF*B9_6&;|VLXtVl09<T}xujRk?NGZ^=c>9f>sv+JeCzGyPkuhz?xmb?`y4<oH(
zP9YrBtKukbM2T1%@XN!2V0=f@5q&znia52`yuhz~9UX?~A&B0V=B2Cq<G%ut^5Ebi
z$`NRe&;yLdPg^hwi@Cg*b>|t4-vym08ec2sCWinFf&c_Z8Evo8srTqQZtDG53TZpu
zERz#h)Yw!dLo~b_X{clh{T>0=yP~zHQP;=Z+RM?}0|8CjpjO+CDubQZ<z*&Xw?$O#
z-6qrQMC<mr-fzl5>rSH@WJl}nWJy6EsxLZ9VGO>aN&C2MS+5*GAW)5lr(&-8ewdTo
zm{NtDL4PXbdDX+XM+eeW@v<Cu7-pAJ8bf0iiDn-dsOS9OauTgT3BoE0CVKYD(VRu|
zSk==>jbqi*1DZ#wr>$~^dOAZH?xnrZR(?3n)6s1FTs(xIYAMg+uw;ToFL|)qT!_UF
zRO)8h{t?TOj~oD3n<tw5Ran2dls0qWqC&$^At<c3*)wyjP_&WTXd@l{P`fT~o-m<i
z=V|}tz$|33HoE|i0(zPo1RF(ma7HxD3ehmXL##GC8xB?10lzYweLGGX2pYiA5SDgu
zu_HscuCas~nwOWUWT|@67P}go!Lyc`N-84l(ScqDr^A<kIx0aK(R56|GUIcw<88X_
z_7mWu(TbxLHws!p4}Qp%b$w~;cpGUQ@}rKEbMoexY^?_w6bncuTib6C#F#$^^QzW6
z5e}tBeuW2BgK}VPy&f+e*!zLvb0}PnX2(h|lQ}CPF(ZM=F3DE<c&NzEzIJ*G;potK
zamT@IqYUMJFa7sq^w*COb#8*W2XBDQHo;V5ERkoqd0?=NTNqqQM?c_dP&o=em!(TU
zjK-Yw9)#lBeXs-cCBr;?7-eYXR=>yZk>_Fvp5c)%_Q<2am8Eo>f$mh<IdpQ78XK(~
zi%zsXQJx*Wi0>J|+8xbI1Y4p55<$0@UZ2Fx@Hb$9faOF-ih9Ze-~qe`f)pLF5X{dP
z#k|s(HwRaCnR>t+XBczR)>en<09vMvmp?$(H2U^^(cPA_{Oq^V`*@1|8(ykIX>h$t
zRKilq7#SNf-!@4gk!?^3EZ);-Cy@C4n4svkUw3=*j;h_$ys*e;F;Z*@f@CWL^^G~y
z&J~FIjh0)aU7fA<s5C<!=<z5E_x=f0kEZPXBOZ*YIkRJNo@47wp)`x!>OQlpx3SMh
zbAW@VwL@7vc-`!pi74fO`5M3S72N}$3io4me_?nbjfjI1gX)*kUHy<>M_<Qw1zz1A
zjN(KOybJA&o)qx`1+Pq8A9nM&-+~c<{Z69$-Izo33^3@!lS)l+8frNcF;Ff%1@R(S
zbP_Vhy#7UZ%JV?(rJr%J`>oC!r^zGY*1K%4Fm^Ci(p483siHI5T7Ql#`i*%+6VMRb
z@zQ)Lg<(C!yO_L!N>B*x?2j5RyJ;+Hkx->ds_Q-F{iw6;WYZ)H^@EMJwfbQZ(0BH@
z{LN<b;ynnU{2uq(sMYnJt@Tni8n{K@dsm1>Ib@Bsux;DiJTLw8VwS&R;N&HoK#Rel
zDpuH--_aBSY^N8%K{d7_Xp+-04&4PzJVs=oE(Vt_1{}Oxye`P*!@mHIe)b;Jw^2#-
zmu1QT?K^rNQCM|{Ydzl4Ud&-L3Tn9=YX)g>BE&2(b7KSK^orn(bTOCYr(YnKR$k%?
zHxKl{iLnHxl3&QN3~}Jz<cI4ZV2H-ksP7iJI^MrW%L~91Wdtn(3VOxX-&04+1<WmL
zMbJk3-{DfC*jvLuj{-<E{Sr}&sEvjpdI?#8Kl*l&PH9XHhCXZ&nFEK?ph`Lpaacm1
z;SQ-8i8cI@1_R!m1$@^5U%bOAR(g)3u0&K6tNrviXVErUm#b&fl#xJ~7N{{HZ7%yv
z)X%(Idk6FDboHzyo?OfC1^vlG_%&N(tmELI{*<A3t)$3!6u?dE3)~kL(tit7xmL`M
zHK>;7kSrS70|_7u`9{r`v5f7{(GI9|S(R85QRx!UHi(ND5@1bE+Zl5>Sc`=ZAKk()
zqR;7I4o1C?-8^D*yQ#5_TUN=-u`0CX5-bkU3VFCk&hW@79(hjmnxMZbTD^BU<6R1V
zJoP<GR&ekApd>n1rFt=4!(tBWlhJ!sjxOB$YkrL1JD+on4la%E306jTsj<y4`YW+K
z0}1{5AEHH5_ErH#h~#RJLi0fty#TTG(cuEFV%)_Dr-~P1!z=lL$HRh6%b;}o+0+GK
z!KP7+C69a55|}L0@D_Lg#Lz7Qn<JQ7O_9s-9zYpbHH0o*0%@=U&hNjbP2ciiLJ%$t
z?BIM?A)lX~;4H<Q#qg2K$A$d8F^kovdUh7;olbyzX(SWE*3#WbgN;Q0g{<&?1YS3&
z{>}UGj=LG@RK<ATwSvfAF6`ZLB2T;!TibJpgiB}!L;W34f=}0T#(a)?h@(~o2hw~|
zmYr;fH8STb%gKZ{UMEPdqMHG!o;As-Ec;P2yHhC}nb32OUM5Kkly_l>C?f@a3Gu=8
z!F+nt&D7XwHz2N2b_EVGi8Dc>KblVk336Tm6#Wt)l!d6kK?cea^*GmbGtnN^RROLJ
zogNGHthet*M!~6d2!K<Og+Ss9#KLYK0-D~7^T~@;x|H$%ZD2fS73aK$9s?##Y)Pe5
zC~g`IAj~1}fKM1pK>Z7I?MGPB47N;H7F0sfDx6bnF`yTqUVX-}Ks(S!==oA$NusL+
z7JEOID+CrSqVPHpZQ|a<TU8QSYefVW*n|~n-|uD|yP+F}P~OI^)xd~N)s^(6@PxuW
z%5I>`iQZ!Rv|NGsm2?2H_}t7{F6S)8bRZw(P7>+4AQu&Q95J070ejRz7DO71s0@|1
zGkv%Hu!uHMgqqK3oLxco3i?+bbYi?hzhSXWrNuwYH(%sKhB?UKqeIBxqgzuz*<Z{U
zF)`rAv)3Uznvkskc47t!3<m6i+SWvmF~}3l*urgDi&ZZAWB>|fQRqMv`jI{l{m7$!
zFjDO<_R?XL7H_0++%Qv-1zyZQ!zXZl^Zx!#W*=zWA*jp8J<&>sA%;GB6QpuS)RRR=
ztO$4v;x1s~46eWB0_tS)3Dj6YQ!>0zQkT<w;D!o{k5u#I95r^8JREz#OhGplA`uPM
zh&Dnmf&Q-K>S;0hHDcm&*$l+=y(M1F-*R(u<8q$<`sRJAc3<PA565tu)Zy-<F@oeg
zng^0;CUEfhAhwuUD|~_L4f>ZIjZ4>LV53Yf>F0@(O1PwH)B$X9N<INE=*yXiPN8*h
zKY)cWr%+Q~L%W<-y&-CfJbvUcM62u@`V(_7-p03#<%(LJxeu}2Ek7eWiFXZYeY}SI
zs)WR5-Yf+(0sf2V$5_}N1XTJaGu=6wpH>Rt$%ajDC$BNP!nW3Xk*((gbISEuv!qHb
zrkx_5AG*S_S?i0Q(0T*QX1S#a2ZHvVnAwZHaqc_Z%xqE805(Vt*io44)W*dD__idv
z4<!iV{Xz3R{!^!2ugOCfhL*>cPT1$|D2sXNO9yvct#`r!#z?0|;gw1J0s$uRQ#^sx
z?>gmg_^cYU#jAkPx%`a3Y8fW@)5yhDfvaIJXM~U9n>cf7(Ltb0?=?x%p>UwlXrbM3
zvLW&&C%6vlF_p)M>8P<#v-hCE*z{e7)WBUvhIV8SiOZ0Pc994T3aIQzF`%}VGTT}Z
zBeon|LHl20{DPTU2K(p0N<Bra-?uYIdD~g2y~YSxLhS(#WeBy=z6Rm2$ckl}(b~bD
z56xQ0i%6Hi)NJ!~F``7{gn5@Lw&kgtEs|`;9va@$W>IhAH{Q*rxy=)1nZsHJXTomR
zL%!zRT}%TqV5X-Py2QpJ*?NWAZFjxWNWAM288I;KH0pjE6s+hR)hwjb=oJUoJk!|M
zHWuuSOqszv;7tnsJeW=0uL>S;Y=Q^LdWzV|(C)@A<3xSuARO-Gc+_`-W_^~oAjj*P
zqfdLb1h1YhPLH?f&mp`pIbR41=R9xV^)-*!&3<@oidyow*pqIw1FF+wb{%fS-oZq5
z4jR>Y8md!N=MHZDX_Rz+bt>~vos|%Ut)<tWU!6Jh)hnVp9D81M_%+mieeSvH)F2%0
z<aktPGODu_5%KC=gz8*}S5FtGiwV~O?ic)q8ol~I)F|_*|6C(q;1i=tpR>X%#klq~
z8X`V9&@i*%jU1U`c90~`P-AAEVW(iTPb^g)&oc&WcNidF#M1^if0N}b2zDubeHh3J
z=rW*!N~j7`1w5(oDMm5FV!zS=>{l`t36)7$utmNb=}F{6hD3Z844Hp{k^bm$eN%~#
z-hmB*e!0omVE;?JdFiJY#+|jjq7AS+ON@gshA{TP7-Ee)5Okocz62k-urZ})-8_Py
zf?CA1KNCrRMbiHZ`bPdceb=5xUx}bEKA;Tdm6{>4JMaQnPfr01TTyMT|Bz6Us5f1P
zLh0!wp_?k{T_kvES8lvIv5SNTiC&88dg&2ZM_#%YiGn@CGbdYl>g6RnVxt3u!}^z)
z&H3q5_^%BXj#sV=UW1xO!2Wof{(X?qrdFd(ZLJc_H?*s*^%Q&%Xj@zB7b1{qYyGDP
zSZuBDh`<0_>uVyAtmH-xAtadlC*dTgpP<m_2()4em~Mgr_r*&>24*4|G_y5@&9D#e
zaZ8%rwHVGk8=SVYN?%7r!*T9lMX&DS7bp{Kc!yW8+k8c7pGb{<aKoXr<mak1a|cI+
z135<fO@AE(8~#D;No2oC9c@ObFc`Sizu_g5B*Ho&6A(FE1XVo4$oV~V>ko6TrpwOd
ze3EmTXkt9)FFEI8BWL*Eat6qJE@unpETgY4Fv`4+b8awlhR)9^mL}@yxfhvQDh3$#
zHOOm?Rx`;p(I`1MQV2>xC;LE^3)Rg9hWE3E?i3jVFG6Oh4Tbrm6FF539ksO4K)VvD
zhWvx7z)KA4j}sQ2DoJ5A|8+JQ)%@##p0}%2g^Ilh62P(7lVjzPK_tweQNYNOmw!Ej
zhC~`|#rTDl-+ay^MUaOFLWncwr97JWD%Fy<9jtdcrirIAJ+W|<24AhIib_F+TFTk6
z^^m@TT?DVj5+J~AMwuU6K>J{g`lGWuHk&Hx_mER~oEji!ypdF%gfFak8cnC*fv%)&
zNUfkukmMx|*#J71`@w#;^50kn`4j!JLXA0mw(T*HX>0uucQ_~E$HB-B?PY5nDFWyW
z-!m258IFqp)>+>Yz*uK}2?5rW+7Y@FZ4~cU)##yO(_36uPGns<j&&vW)1~rSZ5r>V
zv&dMB93b;5PANVAysk$|fsTq$hyPjs%t+|RUm=4~09<ii-x^E*01p%TaZeiB`3MN6
zpN!zDTcJBDXdPm`RE-#+BOZVVurZV+qCJV|b|D!#(QH}*f}(?UvDcS=#==E+6{4k=
z!5J@h3d>){>wNhrVD94G0~BO9%)=NUNqH&oAyW~}2BsePp5U4jI|HjR0qXZQ4X|zJ
zHDEBN2}4H`_KsrwxW{(;S;6tt=B&s!j3gUn3+?}2Di;ywl9O3EjahjKoxB8C;zP+O
zu!=ob8=m_Cr_#Zxo!~Jz)vuo6lpmtx#_^>yKEw=A;>%^1fOZ~g=s1MQOAfpW_FX>`
zgDtb4+aWes9sn%1w)de8{{yDCxdQ(jZeY@d*N5I0_zojd;IjiCTZ(tHX2lLzIJo2c
zYAS*=>Gy|3H6k~2YBM@G+;T4ZIbxyYFqim^*kus8UL;S9C(9z)M=4n6h<-$GO$HG<
z_CE)%0=uKLR2s!=&*>O{X*O@xwLuuC(`B41Vh1LYF@=bvaj5J#LcGbG?qn>xfhBk~
z4F&Ph5H)ku07Mzghd=Z+K#B>}bo%ljf}_cW*5m5!MT%G#<6TW+X$&(0tc)er#b^qU
z8F)s?1AR0Saw)z5z+%;~{-n|J2-*&el*~on@|~_He6;d0*Za2HegS^F-nDJ-z_aMM
z>)Xb%U`jRC!K@R$TSC2PLb$X~ib-h<GDA;KLVrmEQ)t#OCe!Mi#3QQ@+xni$LKUy0
zGJY%(ISz0RjdN6U4%_)TDr6gl0D9^@?4jo@qiA6KbsE18De4ZIux05!Y*{Mu(rdlk
zeqwdZ5G8`@`88<9mm9a@p;E5Agj=W-Ei;220ys45r>ubb=d0u8sXSy%Vs|rKsW8L6
zL4~#p%=F1b6#6E;iwFG*iV<ygBk=me^c+Vm;l10U!;F?QMG>>O2u#(P)A)`u(gm=%
z23U_`{So1Dk9Ysk@!srabHwQJekHv(g+~*xM)JZZDbaM1?^+--R6IVQ<8Rq4^hPF{
z_BjAzkg$kPS90-UYdy&|@BUhirQ3emi5NYv?cQtL5{(2RtOO0kBe~BP*@7fWHR5!H
zCmaylMu=C<0Co%y+hcvG{YOT`Q9SNBbv9CtC-EK@0QDMiiy~7wa<>ur7d$5PoqF$r
zljYI7=^-QXemt<=+=tE13nTpT3TZ|{tC4WPc7IRwpR~z{T%U;ibx-s#tuP|5O+-G>
z6Mc&28Ifg)$oqPtzoqGTgQ-85CK~~aj!PrI06&Vljcp^{yP+m+Ki!5Xu%(yTk}N=#
zH=@r`4AH37S9px+i@ePp_n$`8dw2}&6W_bgt47rGcog+T{>o6#Ak3@fZaClnY9v3(
zkC$Hi0GkLpjhJ5<F|lYGZAb9b5ic#nGl~uN!TFT?EX#6L_?!7|$+EyLU4UyME;p_v
zxPrJ;TzBL8Bd&e827>-!xW?lu!F3I;Ww_Sj+JZ|hW!u9oteLCnsr_7nmcemsSLi7m
z3Yk0D772Iq3*^6vhtzqrnSqPC{b5g+fH$`pPz8J4iSINy=mMVq@SWyFBnjIED~*@p
zn(UFsd9Wvnzh|&|#J6g@qNsa#*GJ<1vbaCN_uz#~!@*o!IZMNx-HFmJ+RZ^O4a+aH
z%n0BsENzxm?XmLbp`T*n-C<s&ncEI>$#4QK#8<dhUuBW*dOy^31`cfY)m}XTT`=zC
z%*RKSwzfx5WJh^UsLV>S0yLOdy-_UKJ8f}w%Py?-P3Ny;l_^-Z!8)%ij1P5{!CnlG
z3xf?*5#~|F9vxaCVgjsl=rR$RNfS@<P*&n`#hOOodqRzw+idev`%tzfY4~8K1qE1w
zgD9O})H18^InSjoxGG`J3V)$79@|>4gZgoO*OaM+@m-E#$84lm_Xz?}OovBzz1=iP
zI~X)gc>dZe+YU94>X>tDrtL91K7hYcIi>y!g)gFkM&ZA*a{*%0h1eVGES8^fOHHG+
z13_=k2T9n)xdHYEeFq_c8tdYhkO0vRa5ArY34qPTsLSTy7&^?p$0x>tgK&4M`AZ>7
zFg7e;Eq|$70K3D;f!P3npc^M9Y@iW(F+=kd%mBe8%@`8ImLPnKp)JqG7qHf%ZvLb*
zR2G9TOUn?J!|Cw~zJ-74Ovkia$qBqVQs7nlP(7VzYqg?ZyPE9E8uj!TWh_2?))n5y
z(Lne2h+*Jes6KX`NXUpqTA?Pi`I)XcyU#QZ!%iTHH)b#O24xgU^~i%38G>EVS_bQ9
zZAs>U3?^Kgf5tWM$umv<koorL;sk<=evF_%AYfuo9Raz5X?q}Xv~?`#R&qM#nksaB
zBCpteUNWPt85HhEz-ncv<gPOwXW5yiTw}OF_3S(x@fzJGV8Ke&chEydB36NT<{7*R
zTm1b-;>WC{hNC2-$;I$-PYx?P{_xq(?_f<a-Q6u3oIidRj#P&aAL`Qje#mlT#Of&f
zz)O>1vx6l)`Cy+A(oxEAe9<Y=9B5-~#rM<2C_ifFIDvmgKmJ2u6lxCK_AE4868#Oz
zum7Wx^%xG}H_PdD^GA_V$Wx$Yh;QUQ6SWNfv_kdd=<4-(+<GBTVVDgeH(KIpzVVKB
z)~*%&wQi=f*{oft$mrItxjAy7zR9j{%B0XUVDDUP+eMGu&3kO+l-+z}$wIGwBlBSm
z-3$m|k8j<9AY&^QR=$6OZUYYiFF3D8&{=%sNjG?a9VwGI1lQ}FI}j0Cj<sR!i?*ZM
z30vDuXs7CBRm;OcZ!nvF%3`28z#R5Edd%z}#22i1SVJCbqMkT|M0`Tx$;4qKKpZl4
z@q>?LFzP77JQr2jyO))WS>M2PucdwbdMPN69)+KP_xhlD@xdJTmND`LMgUvfU|TBm
z2LPi1CAit5@9;G8B%FD1tKNitR1EV|0TUgBEwf5;c{Ejx<te5GZ6~+9YDh@wuDf{B
znL<tAIm^nmm>k4EQjdQLo<Uat3DgM7QsD8e&?_fkdZI@Mhxlj{OGG|<TQPq=%#W^v
zxOeTsO)IkpTK?&lx*Er@{@IDFy(ywV6h`-BqR9QX5G?`r`T~6bg)G%W|MCZ$C&kA|
z$?^an^<ui@kA7k7Dv~{F=?-8wZMoc8d>;Z^raOyw@)O&R_Mke-IA?Lo6g)3-iZ4!;
z;m+dCpg^%Xi`$FvOrupGAUeZY%pa!m2dQjN(6XnQpU&b(IdYhBa6~I;QqMa$f_5^W
z#PXP4%oQ~lq8t4JBN@Ks9Y%u%CVcQt_rU7qZ(f)|G<Fc@WhPM#YE;Bbb(Zpb^Ag|Q
zyFnVX=yzV*GvzV;Qg6Weso;knV+7*=WqW2ptiGF)Vg2=ZX$%lxYM+CL$V5XBg1(un
z9>{bFoQ;2}A{E6~^Y?H?N1eI+Q7}IBkyB`U8U%$&!kI90@-jP_gkYvCyxeyC?Wo`G
z9Uw(J>>Qz(%9CHbN;!$`fHwurff=8<jnx+(MUuVr09Lj{Uep5vb+~!)-k&3<vnoTG
zZF?e>EAqX*DW$(A+tGRIwDRx0G!8lO{km5ixWhYb{%JvVHl@(Kb13uXCV%USHU60~
z+ivHfdGB3<F6||!--^>3oZ~l{<}!VKuJ4-bL0=)$cLH_OdU=#19Y}vb-yCO^Rhdzz
z4XSg!xT(<g_Z}wkj5m;pjF7x9(Tbq&44kRRS*L-n=5r{r4SM#7n%3|ACDQ^*(wUMG
zGE?Falq>)xR;Hx>93=|S2qrmmMRQ;5tV&l#);TYfvryo_yfiFPU<LwyKNn>*;+qwL
ziUqUgW8JP6(*+io+?{AG+wJ#*At=erCF!ZCC`XHCv79T6<C^RCZiVziN=#mE6@62(
zz6syG(otc-cq;?@4MFRJ(&V=AgKiv&;3Y2tEzP=w^-3?z#!Cg2;tmA#5T4ix1!=Ro
zO1YHA2Py*POsI+Wz(xU~o!m*;X1b{8BxGZ%E;^%+E<tj+-&M@X{>DgjL<Q9h5l-Re
zK?Y2PFmwF=ih%dZ**LZ01_PlpmwUIZ^%m5;laRaUcw6^VyVO}yvrT(mbxMk*Ozp9|
zsPRO{2Ho{-bEftZ7JQP8qy=ik?)rAiiE`H$P52Bgum_c<11S)eXY0}K`sK+7@ByhA
zxV>}${9HoaxNG0TKJ59-oc!H{Z?Q@CkBCxx?Yv1=P!LR7?i8Pv+S+vF#FpHXuHNP)
zPwfFw+F|W^r&Go@;~x7}%D1jl&7~;zaW3{6E>>7#w2YgME5qW!nX{cPd{$1g6Y>6X
zHEehFVJ*o(-3rZi9%}PB)Q>XiZ%~6cYAJ!@N2m#<iy|4dnNb^cP-Yb!1p#Al@)A06
zvsp3gmqtyMOXv+7_JH}ZVCWKG<oO#vstn98Tk2gxuRw$n)bn;K_!@d`w{HV01d^vV
z!|+s_%}}SROHu|yVg2i380?K{DFy*$Ab{~w<J+*Lmw-PHaV0K6B`V3Cpp)sx`4!E@
z0_oHJNJpv|wUo?C8U{$<zB-Ws9Y}pvAdWS@!K#mk16%7KVU8HugdJ*6??*LvGcxTB
ztq)x|#W_+j&Baoey3f8q`NH*`t@Q=KfvEeKs9!<zvSNYa`z`28R9mQnNqZR&y7LI<
zazRlmAV5)50#Hzdv(3!VXh%dASv%G9X_E8TEtkN4S&2gK;zEkKkXsp9zc4z1qmqgk
z;S-#I{eysnx^nN~VcAi1-1%#cZ_d_kWn}uahbaZnWq#M6IKGhtsdG{CZP-D09CM)S
zus8Ph2T-?XxT%d+a!If+wxFr9Am@uQ9pHniI^@&==e1NXx6~W>I-m~pE(I0TmV^#*
z!0e-+gK$`cIkXJ{u_YdK32|w5ic%6B%5hek@$DO}<P4Y6GJZ^_JMcg=i%q2{WfJ#@
z##a(<)L|&j%f$^taX}2E26QKn>X3^nREy=q_tY*8tr=ZHcNItyL|}lcltFM7N~)<b
z(sr_W8W4FH(TflToE-slaK%HZ3Im}zOZ%>pQh>Z%?H%9}asI~Rs8%NZRe-`eV8>X{
zj7?~6;EARLW-z*Dpo1eaG0>Ny=fRG6){RIRD{;aZ3}@P3!18FCkLrL7TehqDA$F7a
zjVW(s!2OwM+S(`KCFB7bTVM6~BL7>w$lr9vSmehTl`hIOhVi3@8PT-|S(>l*?Y)DC
z;byy1gh8whn_DN;mFm)#d?@GZQKnPuXvY~Jm9!AA_!>{#%WwxTX0rt$hN;FqRn<5j
zN(`acQdxAA1y|s1&gG%cuGs6e!F8_J8ZC8O|Ahj$_hfpMe^!$43hDm1byKA_+a+Zl
z6N4{I=LljhvpumOc_B=5+cVwXfNa!z?QYmQ&tMFigUWSsZIXMjn*c8uzR>X|Aq0`f
zcM9iG`5^BbNlZt_@?6NUw*n6tNV9<yvDti)8BKt#2L13(!9X^(t;q*mDQu&{3>gI|
zK3~eJ7qcNtE63shMG*vpOv0MOItl}88Egf@uxGgB?%+`G!U<n>aSAp4O_<HX9!@?W
zEMlw@#eIk4Y)`-$f{8k}a$t`^>AGFI&R@s|G59V6(dQF7&Gz^6GQ419C`AU4nMpHH
z7EHNp{%|=6(<fKt&gn01Dxl)h8F<IYYf9w3=={9cF7n}7F8N&EON^6~D(SL(D5t)1
zoE~LReat|#>+d+(p^_dE*&JA4V)xC$3aq2yphQf*ow+Rkw$_UwUvSzuQ@9I-iXX-u
zXB18Q+fMY8`1YH?LuAN5Q1Wb~^>I|I%+gV234$<>Q9|THNWs>#N6<#fL}yAXWZl*}
zA8~<3k-N9d@;jtqLk#5t4~oR}nk8rJS&p~0+7N~Z0{L7AZLLG`CWK%@&pi|Ny%NJx
zRr4k-i<=eSC3PP#r$5#_%4lXSi!*iP{3Q9g@@<QUnp}PDi>H_xKf=n6fzQYmcnrmO
z+vlX4eh@nc)OE}=B?Xg`UkMo-RI-G0-S`AE+#X#AGij|RrWM-`w|u_H6>iTQq@8GX
z{Eww)PHFu3M}>P)gvmgk{7OgrpO_P(n1$Ye#o%t5C@&L?QS-S%@XH%)RMG__x;XMb
zH_Qu=6|Kyo?$0dk1Lmf|?PYpLnO@<gKVba>`z|J?uw$d5CuW&wH`2Ux2a>jxSt`u^
zG0liUjoHb9nHF~eql(++n9h3X2&3YY>EiQuIm75IG#QI0e&Kka#~CI8AZE(S$gOAD
z2)l7efSZ{%0oX^k0WO*W^Le#+J;vGKrDg9(yeE!<(*tgsz%GM1pF`w?vk8$FHkF_*
za+ddZq$$GR#?A?Qhk1Ix!sx>iOec#BpK)eSKH#NGMhk6<?vN;Ge7ws;tppAmg*9<u
zP)nlQqSOBpuiW*{BX2Uu0EK}Mj2u@B@+=hmGn0u;Xo=2Y=nF^u=$7T@qqszPfm%ix
zy*G}p&%pQHUj-fkku6Hk!({xt@-Ibm<Kz|Yq<r94z#0)fG%WI2=%bxKqC@PA*q?Wf
zW24VgJq{!Dt(=+FmZ6O^`&l%$UmIJ_)5br?GL4~q6RJ1C()iBIK#75OGVo&a<ex-6
zjH4+_ThM|{(+#Iz(1e{{syL1cJB@^q&W@XQo<l6{;@O3q;WbXDn(;>#6yXCmP>f(#
z53*|uEulNuY|^gG47IZj$=u=z_HsKrI2EhwyGF}aohRyzxz1d6F~ASm#h!<L?EiR_
zv5SEfeSWMlVB4M<<a(K%me|O?8vr8N?-wK8k;V_JN*N{mI;LPI-6If0E4IzY0XQwN
z6?w$33(aWvB;hl5sM{+~y?w!<F@~1$Shmg2Z1*JBY4h!MAx~<;O=ZRLHAW|}-PIHF
z*!7gdAhsH3<%yz=-C$F9{|u;Y&-~;p_M=!7d^9vgY)nbVrm#$G3j1eOxDKpAZ}?eV
z$lAtJ^s4YyF(>3jFw}?l_+`;&e_+wJMu*4w&rAOXt6xM4n8CA1W2EUYyRlQEWy~yT
z+uQ;iyf-(ez1*~IuA{v?NjUgu4j2(Cw`g;-L*-_X(I1+dr>8Iq-meULusXs<zgSv}
zH@LZj&Ea$9E)nG#TQs!3qE}&#8>Tl*$-(T=6I06g-nSF3!%YS7Dg?b=x&^YK-Ok8D
z!s71vFliz8VlU0SkUPCN-!*hA&(xR|Y=SZ?8o9<Sj`Y<dP)b?<#)$oh1|t|gXaPb?
zM{74*v^c169{iFb0W8#07y^40y<P17>f(uXe7gyY;dOa9y%Y!c<#K#;8dlEkLzy^@
zY+{ifj~u=CFl1f7RP@20!Cfmhl5E0k-s}>-wZ@N)r?N7LQ3I!p)9nzrj%iPGzM#3n
z8%m`T<U?Iio*kP;lNlE<3Q9qwmKs`$Heed!?z-k-MrSzJ0I&a^>no0D6iOYIJsK7^
zuV@oy02YL}MC^g`($aHDK5VGzMm%q*;ipmvGR;gTOIavYb>N%<=1rW%u)_PLty&Zc
z<W|f+SpV>FfFn8)fz>AGWz9JqRc29{BDxWdbHSRCbJeiLby?$QoPeV|bI_cqBpaSu
zZ!{)$`TUPGRs28F^!&rji2q1a(a}ohh0VDg%?3@=&z&GAkDRUcT3i=4^1+gs6+ZeY
zDw7~8Y!C(hF@JbTmDN|<p~e9&OA}5pJ!nqsb^V`tc`wBAf9K^;LAS<o1a4xZg+T!v
zpBNvlyQCJZ;KUjS^V-2e`t)}~0Tgvthb#EAB{7gz=$8f-8_N49+^Yt`Dsa8LWw_Sc
zvG^tPgdVp#T2l8}Jjy97u!L}C&RKJZd=|BmapH;Lt;a`47Y1?K&kk%L@w>hB2^v@k
z=zL>GNi<m<D^+Q|%c_M~#YGBRd0B5S^aVB;#eXd{E|>+^vvY&l-<%iUR6DQF+9|q=
z+-D*BhV?R_;KABpZhS|KS3E(hI(543RXJ0fPTW65TYZAtmCr`K%_yWJQHZ|5OxGuH
z8B@>==H@J2?!$q}iFl)oDD)XDf1D$tO%uH#u**Q^1~Rm__~dcdPQ>BFk%u`6o#i-=
z`ig&6a5%<;qL2Q8C~N{pAE!@27dqSfc%bPDf)Ygf5z%%9hWW0|xA?HjkYxvFbQmHO
zKLT@x)Vu{tdE3ft-lFbpWrM^$!;2MCaU8C9Vc>{CUMIvJ1_RxMQsShPffSszP)N0i
zQ}^eoP58{#VertxJK4d)!D_8l>L{~vEyjUl-roaztP;I7O^|5Ej9D}tMze}jZyN{2
zX0Z)<!6CKQB57&rhh}(jY>yqBFyGqN-60P?6H?AJyF04QD!d$7KKhhdQAF#qAu;S5
z@QaV&4s&UOB>p6BAHV4^b;A}|K(4gLFqS46zj`^2F0eOOb=+vyQXz;QFXaP~b_64J
zQ>G*rV%ejjzWe3cB*}}VPSCv$bVJZ-=~u90mgD<O9N&vKQ5#3pg7BS*!Vbg>`%S-K
zRi8RtwJa`LcF7PeoB?eGE{qjiZ7_L4nH9^#UfTaH#~upXo<MKsqxE2n!mEMRcJ0kq
z{*`<n>6JozIfie0Bc!U+^0}KAZSIC5#TH0@pgMDWd+mr1VzcdUq2-{T7n})svb8}W
zPmZ<#YhDg*0hYY-v;|o4D$o|#Ls-^Zkf|PUU@cE8k6{fYTxHnkSl9tZY>9!8nW+bF
z_-sZm=8{-rh#0YgiS5Abjbbl>t(CWXAlVW)X2w{PM1J&VUe~X)vvyNs892|F?mdMO
zbS<_PDx-ye%COPKi32bQJb}9)8w;_eSi_HE`*E6b#W}F}fo8rgq>cY^j)BO5WBSst
zDrjRQ`X;E9M^PFWfmKy3-x$>QA6_j+4!FdyM$Tilm9D_*w-_`AHkq|cqn~J-%+dEz
z0da&JQ1Bk#ekNFG4@A)bhnD;=>VA-m5=b!vd-yxIU{%19B6u+$3OB$Muyev8ma#Bh
zFqR6f=ff8o@VN}n{5IgR;tL)E9=Xl*6HKRh11T>b^H${%<VWG)G2VswLBC<zgl`I;
z{iFxyQ2RrOK$GDFCQObdV|9r&ZUbWR4vP$PH>^@X7pQe+32K)cErhniDG%NKre=4j
zJQICHn}I{%vSH9MstiU2Vzl1I&pPIsqaTF|`ON9%;lNU(CKVVx4Cd1$u0>pIu}3Q)
z8xT_j1Xq>@3J4+5s7_)bRUXYs1Sc7>8l=y})1sB~lCS=jPk#$kLi;f@0(TfF-}^0q
z&|3rx`zI?rdcnlfiqPsMyh;u2NdW99H{;B>_YeXm$k0ILLT7W1G6I4T*l8f_078t^
zh9cwB*IBh&;9KMQBy6{f<RILm&@A$5J!>%td)S1L+ottGpTR>t1gDN$@Ws#p&4M?a
zK^{G+*|lpd!GUUTwzkL;s_fJ3p{p#KMZ3}(y5<{x+C$gG_?a2H=8RUT9?15e_>DHh
zd6Du<?HV(dxoui8b0B2lmUy!gr)%@Rl5pUlLGe+R0nugS^*_hXv0}GPhKwzvX5KQI
zrlj?j+o3bqulp9VLGu04H(^~>2Hp6W#{bMayJkrz{t$HUGULzx4DIIET}k+RCi}@*
z(jWd%_Xju`yW3l=NO5;~3f0rj=C6XYmTo)P5}DrK&iUQgDcAgEaD|Ag?2oHMT<Vi1
z{Q0$g&x{AQVCo6r<F_mM&BSj@52U2yB{{H5fr_&PU4cGS^TD}@YtLPcdv6Nw&z<%(
zO#9p;5T#J=9ndCS6Gem@N$t5UxQBB2DE+RxSo@04wP1hp@AlB@PHz3|P;LpQ&%v!X
zWd`n?SZ%bnUdU~ZL2$$n$h<fW?JJnQY=8znLA~+o8bE@x(dkOC($~d13FsEEwUbjJ
zT3rR8CTQx&oPiBqp$w)fl=T79LSmbRIGD8S9lUoH0#JNM4!MTcj<wUxSh3OiI+?t3
z>?LE`Ix-7guWT9?^e&`_cj&sHnzxR1F_4zQm0<N@?<m3U^QFjdD&`dQEOAm&Co=~p
za5Xjg_Pzs_0TlD(0m<-zJdaw7<oNsdc-Jx*zURXM+gdG00q&&}LhJDM^x*<Huwwv!
zk|i+w6*(}>aTfl1Ye4c#aAUP1o!390z`+juXaiE&&B9N+uc=bcTFQO8Fj2H1i|KLw
zh@R&SeTPwR%#VtA$SC4ngS12u=PKx<FR>`*qfi1vm6Ga6;p($#vh|o5zRvi$|A9{o
zTz3Lg%it#AVeB;K`PIr0=+(*e(S7HobeIp#3JEY{6A9+_1i{1)281kH28#f1JIN63
zjg2Q6EDS%~dLrc3lesNp8d|B{;|MLyrt48S>w4d|)b{(&z!m1DMo1Y)<?mp!XNKjR
zmeO}Qqzr9uV~_)Fyy1Cf`~7F}=nzpDQb(cQ#*3GZJs`%5=(WyV<~=@_Y_5R!RY-wi
zNkBb|Z4dp~Kk9$+(jP^3{zP~<c7AOwv+$22X!z1mv}og=XsXuh3M&(J@e><*vFHi6
z-OCE;Zti&^0^i~C#E0%jJjS+op@D-2({oVC1RZ?Hcq04-{D7jjd5!+H=-1o?%-zc5
zp5W##qdN)SmU3AMZNM9GLb=?z=;jO_O!4`uHNGtif^R0~RVO#Hwm8q~?=W|>&nd|t
zYJUff7`o#Fz6%Ep<du7_B$u#1ol8y(MLYp1W)#iY6;B;Q2E9mst6UA|xkRkL@ylgu
zzQ~JiEy@z+Fdw<+EM?M^apI>yw2T_=ruiHtb#Yj14hm(k?h>c=3NZK#L}E)R%ZmfM
zV{XRy8SS$@k-`zSy)CS#Rg&a<k9>hg9*py>={rpIq8HFj{J?K%K!4%X#zHh-G&Ll4
zE5-LAO$NFXjBcJ9n}qOCFe~cDS#~qkQm&%ZJf))yi&-u-p%6wizgqeMxGZ(C8%u0;
z+Cts;upvULPs3zO(%#2uVXgBa2BMH<)tF!zvJm*jX!WrWEQ6=U98njHqfwZCh+~aS
zDXi56>pVh9qMhJM;C_bbAwPsvu(>N_f-PRr<JjmGJ&x^Op>1LMhBCOvZCl`gH=PNO
zbKKi5Iw1AJHH^u(0|!m=$Y9dSv)L4^Qa?xvpW}IIIvCUEv+XTrrmJVSD9P$ex;Xrf
z?M_isu~`=uun7&24q=W)BFT9CTiO?p!Du8*pW-R<-~?Ks{8!yA*mxTra7l`3B_AV;
z?+n|Sa5*_RdMQ={5XSj$MwUV&i$9SCo;A$`g*iA5mjcTqdYrLg3$L+1O~MC}LJlRx
zah@O=awkNsH-%-AEd@TR<ryAsi;ili;u5z_2waItHkTwRd9&5;9Kz{2kRJMPkncL`
zZ?fzVsx7sgUdCRRXfJ;LqLOl;Mg5cqq}5ez-OH35S}%l38A|*~0q@N+j-G~;igJT9
zmtk==w@RP(En5Nc&HO4FLfGSDno>Hd^k{NNvq^h?!pj=34rzU_oJ~H}cBtujxG~sz
zGk^OH+es!d=q`;$<4A^Ke#_#Vs&2NXi|x`z(d;16JlUZPaVDA@`&qlLLvt_1gy4ES
z={?K?6Zr<7myi8anj0s=i;s+!hAXz^G6(1|EJ;Jpw|rNq3~M>PSx#v=y%e+VCy+v?
zkZoDmwiolkS5zu&d6Ii_lE9%%il&G&Qf+$=u?Kn1ti#3!OileLZBO*H>=HTTH(E|l
z1|L@-E&erx1E~GW!Y!w(QP`DS*xRBoqn=D}{9FFax4(FI`8RLVyUUNo+c%C>nPS^3
zGz=)iJo#wZnRm;+c_)J~bidbwEbo>bGv1JsKEsN7^cey00RY}nj!_Iv4?o4Z0&#Nd
zgo9A7U<}WIMel=)BE(jss9VcvU7nDr_7jKT%untyD%}qB3F#A7CP0<9&Y|X=n~YaI
zo79-1p3Q3>EWFwaXz(w@2pG((Qu7%=5|W8wasu;*f1O9pHqMo`J@!&^oH`o8wRz(l
z`YN=MSlrFBqH-mL{>F<+umPuJR^#xJYqt#Lu=!9l$$S{UTEkoC8<Y9lbUuWG*W~wd
z|Dk6gTcYriEppk@?0PF1t(Y;znlT&a=Vb|ct+e7UT^CTWL0s=PCAX)Rmt3c$sHaT4
zeTQ1kAyK-~t1tsA8O^^-wi*crz3ib)$e&N_WP*J0&!KEziB^YR#yvRE@9ME_=glFu
z)(yA^)79?xt6T?cKdnSEzTDW^=8jW4K^|RFD%%X?;ENP_0U*XJ1`8>&qyH7Arxdvp
zuc8LQOZ+o?&d&^az`0ia&@eQl$SS;s#AfrzQUncsTdKs1gE=Tg+zcW<NsBD{cMwcx
zrARK~4T`u~BNOmyuzG9)6TbSBA}7I{l78g%9Q84xjGXY6OA$8ojn`59`cePuXnuVS
zuSV5OCD-BiWsW0~jw3SBQE+xqjf^ih$JtsxLz)`9q&cX@rZ?jh+@<n*HFlk?^<@#i
zf)B7-sm$+9VWAX^c?t=}D>`fZh*lFS61l%WL9qMhjDXh3H}DVdU5jr&uEI4Fmo12s
z=o_i{XNJwUjw(PI-33F+;OaOTTaFoGr~yGmNRQ4n%7h6ZMO{W1TRf%cB}N!F6n>c_
zBsy30f|7Cg9RPvj<vWd1hCt#)7d5yBdL=pvfr=N2&44UjBFlY7mI%w60gX*eQluHL
zYRqNZ{sP`?t$)WoILSYuN8aR-Yw#-@__-NdTMxz}BhNU_a~1L!4ScaY1;5dBo`f>-
z5#GsQfWsJ;B4?31E@bxpl*yd(Nk86;`SokO3cNoQT+twJ_JcA{B9HXH4&m2(`(F$A
z_4jyH2`Buv<Bfma$JTZhA%o_A34~WtimU)=$z{q!@gdib<bN##xcgDVUoJ%!^uNN7
zB}FdB>yL6_H>MQf-A4usxM?HVc>Pi7!#VzA+)7GN`q+QRvxWio;b!0&!LNt=U*Qmv
zB0c@D`TY79+*Dd_cndx9CjLIK)+0~x$fI#Eu~2apbk}wvI+3>iybgq-HyNemad@pk
zYNKK`BC*T^=|tC!zX$n!f{}(5Jt<mZgvW5WFu{(&M&u2Mq`90j%!s&%!*N?<EW)r8
zmTh%QS#56VXR7g>f%jW*{R7t?T+iduTinvKxH@^(;Y#5dNQ32o7$LX7vSJ(4q~LsC
zo{p&b{0h4xxS7625tt%#u5DQM;%ABDK{gMXMznS}W|gF~;UlsGa;K5R2g2_b8N>ZH
z=NE;<TvlU+jXA^$4XS0!5LyFUI<9~^<i5kve+YZ@JR;4(Elb1Oq_YQ098IYxF=?j*
zy_SD))L`=#oK1-D*!joK>_vx4F2-WB_LcZuu;_a<2-soXGCE^Y>+0Ef;WoRw<zMN-
z&!K#2)L2xNI|}yl`~yZWpX$x-7uoh;3#!`H?~id}e3S?FibTj9K8)j}Qg*;J*|))b
zZExocZjpn>b)HpLYGRg0kHh|QiXiqWi4-}CN!AN`zJ!5U&$oy>57K(RUEKL+Hud~$
zanBKVhq&j7JO4JCo<C9C3&nk!xbyGM>G>t%?iP39h0OPeFfaD%`Cf5nC!n6s{)`vS
z`_uEULkv6(K|RoiP+&*ME!A|Qx{|jh#I1<4ULCNlL$$=em&re%*$Oznnql=~=B#Ge
z`JrdEAQDHgfFW=IW;Kd8uXyX+%r8<`CIIOuBP_M!QyZKH6PSm>^emb2(QlCwu<if}
z7ToAgymroG1Z79WFBKMh@X~?rhdRn$$Mp$T?baY;z|2`B&QgUedRBl-oBsi*P(IL=
z*LCF+8vax6$gmCZbA#fiNwu<L@MI1M%|8rR73&9HDXt}5Ijm=0kNkSRajy|!#;E6W
zVS4@s+ynS<f^Q~C_|1`5&*wT|-hvQUUC(EBpq|VdYzo4BUeCG<QT}j%*%lB9>_uZG
z%${X2<$oR`%riRteyj(Wn9q8CySU#b?swpRUgIIC=ie<-?i2SN;{K4hKP>K#iu+F7
z|MTBF;Pa=rzQ7g3mGm=7O2;(>*GOD>xF+M8fol$~1-O>tT8V27u1&a_aovjR4qU&&
z^$@N{aXpFaC0uXf`UKZExXiE$?6~r9O~W+@*CJdsxHjXu71v$3evRv4Tsv_+iEAIO
z=WxA_>&JhI-*`_#!lXpv7l{Br`?`&{JU2M3pKNza>5#lU)Hm_B544HjK~F@S_x!(=
zM@y6HHZ;_)lk23Rrt13jE5XU6jdH`P4L5<0N%DGS!-m=h>B^+q&Gj-mThaza-iS@S
zNp<Tt)UK1}CDpB3vwmYO+99c-cJ2C22t6V4uK@JhNt+VLr8|?>u2{2X{VGZN9UzV1
zUWQx)G}3D*Y0df@QPMq0YirkTtVQmJl76yreS<7jCDk?50`GrwilD29^R46HE>YIn
z4U+WRq=psiYM?Nr>go;nU%hsN+#r1=Ro4NtG{3?(d(q;_HEUo6ye3tP%6O#erK>i`
z<@IZ1lv`uutFB*HFW0WyBrV1J>RNg2iu!dc8dh(VY~T)(0J>IEkp>c#jd)oh2WlG{
zB<X&sdPPl8*(g`n)zoidD^bv~YW>=^>uW&$dgHy$c-v}Vs9v#QL$!R<2Bbg7RIRGr
zAXf)ak2SRoMUwP)se0A=b#lY{HFc=r668Sz)~^%P-)gFkhyDsEqYdshRfDxP(if=p
zMwwgSr-0&ideT%aB8Deb-`Ic(;)FPkX{cYty!-$9=WwiF8LV9;J4WYk96i&KU*lML
zlU%zIt_(?X@ayU|>sPK=<Jh#Kp?<~6HMRL0(?#@+>l@b8{9EkW6&wC7E{<SDL&J)j
zewaHE#bxCe*Eo=Blv$^&TP4@8UzY&ixT>LkgUrcNx}ejbVNLxy(BmiomG$dZtx;-f
zYxq~^BnY*1r4ixSfJWWuSW$yC)Xd>sv2hjGrpDo^t*@zFC+b<&(6GM2(NMbqB3i$0
zwWEIRh6afL+S+w8vaYLftf^m%b6jgTZ&<NzBgkSzi*IsxR;;OEsS!vj)~~JQV(OXh
zjSMlrepO&a?Hb4E1+}Xh)~{W$x^}dqvUX){gHh(D+I5b#>l<nvfLgb@R%E$q#aaZe
zK)Dc_bg5ivV2L~*;);e9HICUU8rId`lrCL6XZ`xM{i%Xbpi)p0Xoci6tpe{Nq=DYr
zdRdgcI8eXQv2lH!eB%m~kMO$nvSTB(1L|+EY0(NMuOa~g?#x1iY^rCB>5|BgY@2Eu
z1UsfoE-rEu%u-f6rWQM<7EYOpR+znh!%YqKs{^v5VAXiX6sNP;@k68&9kbUrY?z!5
ziqfwEB>LtW$E?}29ln07Qwo`nV25Mw`Wv{y|EIn4kCHM=@A|vDY?hrR2}wvoc1cpZ
z1JW}CEHlH*vJ5lZ)m7EqwN!W2R#nq5K%ly-ny#g&>U32DJ<D!L4oN1-97RP%<&QZ>
z^o)v%N(?b*P)85vh&o9o2__^N4bjzuii$cKlK6R^``q_^>(~DH({p@hzC8Cn&;9Y-
z-_O18Teo>8TkQ_qPA$<|ruONv?L@6vtxGH9vgL9v69i+~i9j|{J1X<i6@ncc=WSnH
zOxTmFpQt6aFK$cBt#lF${6uRZ(X5?LEYvEUm1P=$qP3ch)kGyh1vTjrq_I7Wo=7n;
z$$x2{$soa`Ko_esG7_ijokc474Ejo2v=|@SLaM{|>Y;^tqjm%x@+%!?-bA%Fw{o0f
z)8Cp4Et!3&++ce>aY*_s0h86RUu!o`bXtjpIw@Oc$J3}u;!n)9Y4bf=dxu&}+5?Z!
zz$?r1wL?+~M-qqJC_l8Lb>xWFBU2?YWH9XrPLl>kZt(c$M}u#JK7h*h^d409D0iUW
z0lg0W81yn!cKokHWy`q;EkP%tXQ2t`cS0ZE7!AG)dLOz0`VLf#ubWWWBEAWgz1~@<
z>^K*pvX{$2KMvgs{RDI~R5n`cpmG@U@aIMY*<8I1l`YdHXaaf;x)WN3J_}7lKMCCc
z{S@^6-y02{gx-S6Ztenf3-lONwp+WQTcPWrVyC_Lvs|zNy#;+5`X=-l=y~Wi=n_=y
zk4dQXxAo9ZLmyoq4W5I(2YnuT1G)=(3Hkzb3Hl=R81ysHG;}v~6ZEsthkti8*aN){
zeF=IIx)<7kz6{MlUx6l|pM$Q0jzaJLol&`*IJgBJgI<EBpi9s+G!12V1PSOkbPaR@
zdjD^a29wa6&@A)<^z+aLbRV<;%|S<?Q_wZgY3RLcTs#833N1h{L%#q$11&-e&@yy0
zbOyQ>x*z)BZ;b}C&^u81mgy?=AoMKsRcH=+2)YS+7#cv2K<@p`(Likex1dL%7oo?X
zOVA252gT?K63}_*dgvFS_x=W39Oz9b%Vls8x&U2-%Gllu#k>#JL+jA{S4V>e^d@u#
zdIfqCdKTJ*9)otEd!a4pHs}&`6ZD6nkN!G0@<H!H+tBOKQ_u_0)6lcfGtdGQ(=6Bw
zeGU5XuZ;#@g1!y?GV}`cE6^qAk3jcA&p{K=AB6_cAA{WatL#0XH=yUCZ$N(>dKmf>
z&`r>vguee4e~ldaF7&6MSD-%)U4;G&bOh?39BXT$y;Pg8R~l_MwVkRoR+t?Znbld8
zIxJhv_b;$+{_skjb>zurODDtm&JGeuRhqi0u#mjeJ-f=9Bcg#br$h~sm}Z!KGT+Jc
zZ1ZyeDy4HRF-mG4v=b*Qs~TvI3|L94EWOxOOmL!4Yo$?bZte8Xpf(8-hNWb&(iWqq
zT4(Xs<#R`31{GknSLU1<(iXiiCleJ}dY2Pw#b_Q=vNl<rC4AtM*paH$B2_`)<11=c
zNQ88~jZN4T>#HlYhI}>*>(Z{b+p<<@Zi#mNwc3s#FN>6zT*_=G=4la)t9FGp5ao{w
zBMJ4!Y1XKxiY17=+-i|zbJZ;_VhX8IpgJU#DJ|bgthQDXPdaHri|C4%c(PHSTdpjx
zVly>SF*ry#^pXbm!56TGSi{=bUo4bi7Mi%`V{zOf>|;quWWggu(i^2>!FB2jb-H7v
zA?EU`Heg5W8|eXr&9PKBX?3$GwUR^``UrhX)>73Yl#2pWR@Y*ROPz21@>arG)yvL-
zF+l??$HR(gu3^74JS_doj4g_7-6m`gZ(zG-L_OE2k_YiB^YgVfg`%~zgK7)MdZ~m_
zo29=4Q(t0whb6a$3L}g8Lt$Dw!g6mtvQ@H;{D+)B>>IH<XeY2;d|`+ahEesSzSkzj
zaccyz*{BGuf3d-&J*qWKn_5-#onc$V%p<lark&{L8a^Jsy(k0Pb$3RmA6Hu>pCbFY
z<)#h?t&^U%u7tfo!?KxLW;Swt^lJqT%2@lDsn~vBKXhq@i2&ulen>tBYSpWuPGLJO
zyHZrxP%-aH#f0V80oN}tEZ0ueTPs?#T5G<(!|JRsTWj5fY5Kmt^<~$_(JbzUHM`mx
zliXa5W|rZ)>Zd9c@^O2{$pZUahJRbv0UxGkd<+buOdGd8Uc>Kb)Y@hga_%6bPpxIw
zYwDd=Q>urtZo3~1tCb|<sL@C?YO>pxz7eMDlA(*q*136H67aH~@(jumQ#~3lJ!Kmj
zez1Pev6D$WuWLz#KEK?ih)$nEWtm9~mTL+rOSroheZ&3`pZqF`xmI;m>%*;!T~lKy
z^<}lyI~qa6w0O;xlk8T*yyt42(>3-sEKKz4=b!t`i=QFvO!Gvuby@}+%bXm4$V{oH
zP*f~KMHV|zCY%>sb+>mUQY*{LGBuy9oRQgJOO-#O(UES;(NJqyN>EyDb`WwVLk*Ga
z$(2T@zQj(e!diH|DM@!_Qmj<#XA&)!3P(ungNem~SnW9FV5vnT(Z=gsNTnr!7sv*m
z?Vl|BJA(3ZoxZ_JU&t2{VvVfE#FFd$2`N^P3FA0sf`fzQ1<t>a>fHWpBAppe&g9Ao
z4&M@OHi`3#(kD3~liAJ-wYS<}LnjN@RfRz+S;};c${_)1+oeWj9{p4K>2h{@Ceu|-
z($7skR?H;#bqTZ7*0OBH^-yF_qU0MfR<PbMDF%GKxq`hY)e;Lx{q%+%W0^iNAYgB}
zR0XqZKzd`Ge>h`_!9U+%gvfSxN04qs#n1(1q2=mWju5t<Uc_?PDg$ln3c5DjT$gP!
z4Knq{YuS$rS@SV-Z2b{iwY5UGj|UC5KJ$!AbNlwKZZ+d<s6y_|?S3`aKH}4ibz7zk
zG;gU15shPJwubb`s3WR9(`@xk+p^y8Nn{(1+Hu+{W(Re}Cik#j7yM!%76K_&vDq;^
z?F>it>>Y0d2L^508!l2eniJ<a1D09Y=^5E+E_boNm`Yp=>Nw!MuEl(SMmFs*5%@)2
z=IudpZ)$gkb8YH7hg5M%XLyz*x;C{X=Ej1wrWD$r6E<sYJ^Slm|5j@?4yI<Ba^5LZ
zK>WPL?-tluY)8`?$F9)?qNz#)KIzOE)!X#Z>aL%Xg*@Dg$ihKxoCA5&wnwIR&lAyE
zO)RdMyDnCjJnU<>(LgzRyy)a>%h!w!n`q6G_8J~645x;}HxN$SU&8gAA9s)1*qZC}
z?><=W4Ia#Poja33wbni5Q@_3robVghAq@X@bO_h7a7_8(E<H8A*6GGHT(d<Q#*H79
zBk(%+*dF0jhjpw+%aVZ)+hcbO3>)TW(m`XzY(iPRRewJ(`cmn-j>PB7Y<RMQU&nT_
zW~O^=7DDFJh^D5fj9W)^k2Fx<aBQ??yKL_!Y~L4_#n(Ia7V=zb+5m-AKAquocVU4Q
zH?|&+S6BsfQP+1?V#vpXYT0Fdk!`)2V$sN!@#7k^!_hh+yTkQ~0~xcr2W0|jIg74q
zoZ6fe3Z>s<qiM2>@9W((a1$gtc>dNex%DjcKh@(O>Grp4C+mKGer3zk`m#sP)m~v^
z_5@VmjIJ#^cUAW!@Y2@2W_gM=N8Nk22wTsHw#Xh@CnB916FYY7koZ%wUC<+lXLs&&
zCY;!O6*+=oT~T{M0zUCHPa;z+=8Fk&N?cB?caVQH7rNJtatfm_r*z9HeZo)1#F5)E
z<Ie~1#PQ9_B)r6zb7y%z;fS6)i&M^><&pDfdA<v5P*<R5+~14)dw`s4%OmI7A6Hi(
zx2pvoG51>NM}d@Eo}ItISuhv{lb`?&fGRix&Vvg;o{xcb;9J4Bfo})vK^>d`Uj%ZF
zDQB1ddH9Q?-Whxqx0F$y_i%sEIfJ{nKV<HAaIZ1<ZQLI=_f6bV4tcKO_T{;PTgoKQ
zCETK)Ja6C@9pyQPTXdG^3~tfeKk~j_+}}*uL~qeibn|uV>-GEKNxe(^{VaF~{4RI^
zqzx0`li=sTFM<2uKY>qyC&6ZL1N<`hJ@B8w7VyWwR`B!SSHQmm{{@VIr@+(T?}K;2
zzXuP&GhiFo4t@drD)=h+ui!}<Vl&tR<cqhhU<5n`o(9i=Z9r}#k}J+X4R(TOfn34<
zJdjIsUjQ!xx%p~0_$=51UIKf;%itC8IWP*6U<{;yT%9Gis>>t&ega6nje{QmSs-=x
zdGP&U5=g)IeP8<jcN?Vt`!V3hfs6%dj~tLTnF7*Y(l4a{NI#HvlRhkC;yZwhi|+*f
z5uUX74j^u6_fMN!+JC3HCEc6mmb8D(+>-u(Ft_CK-+-hqX+CRiN%J{#OPbG{Thjao
z=9V;n-Q1Gqe>AtG`QJhOkv{F#SiWg!Hd<^`^_^lhJpW~!%DYl~*T`-KOH~hQg5_G(
zM-ApU2lAe!`uvHNCFW__uaQ}mcan=xHn2;T)6GC^1JOb3iCPt#U2R}F$!CkfNkXkT
zzr4D{5gQepl#e-dAH^AZt11Von3imoFznqc@h5^=iKpKiBxWns<Vt6;wY(j}IC}l*
z)@o_5@z(OZoP|!eN{gJWoDiOz=~i1Z`|F9b9qm7Px>BuZT5_}`hnlh`49sglP9<BB
zv0L;#uzU!xrLCU;1lT!kDL*tk&)_h{htoh7->s+e?E`ts8v}{Aok!l()|M@lFp&4;
zDMbsq&fQM4z2g0dSW+QhEhIJHc%vMOV|j!pIhG5*f!I<#B55bKyO%F^_Q6qiJ0W~*
zFZbbqvuFJ2G`l8wH{i-5iBTa5pQsjRs<O1dvK-{tKF~%bw)gdU7-`*1*J3(tX~PcV
zs@+Y#6Z$zwSN*t`MCsas56pQ0`($<<x>;})tGcKH1eAA6TiRZ&V1&NLX~k1guqd40
znYmzDeGwtOisM_BeyR9aSe5$xm2U-%isq#j&*Wmmlw1kI0P*;}Eu*r+a!Zcm-QHS4
zgi(XI-1U_K^04yd+pM0rCM(E?TqcU^Gr3ZoB5V1^L)hB?;&S(KLYdRAcEg>Kx?u4z
z*|4R$>w<9`CK?YvE2k$ja&8iegSect7ng}|6JI`e*fmh5=Q}3pN~^X|;g~N>FfMav
zM=nyFAD%xsQI~G?BD!{%T$hZ#k<^n!6UWo^=l7OmSG;og9>7WC@rs-y$oqsr@rv&3
z-HTkB()m_ss#@67!VxP=@tNP_-8481a$pqf0wZ7(SPvfG=VMs#F1Q7*f-B%6I1kQ%
z2B?C=pbT;#4fcW&umJ?%!S9X+_rPs%9b5qy!8x!5j)5H53$}rcU@dt6-;M_N!MosX
za1Fc(E`YP30S<!#NQ2#A8`uQagUA1dyurKRHn<M1fD7OpSOjIT7wiNHupR{9;d`UO
zd*BYZ1+IfD;37B=I^Zx!gI!=V*Z|gmN54Z{@D8{Iu7NAyA~**c-~dR2oge|$f%ku#
zc;Ibt4O|B2K?58BX|N4!0FQr*x&iNio8St#0M3C1D1$WE2{wVX;L$zO2Y0|Na1~qz
zZ-6Cm7)*lQU<7Og0eJA6)FHS9u7Zo;99RTpup4Xxo4`8o{%_ECz`NiUcne$t=fM&<
z3?{)&kO1pI03Q5n`U$uVu7fwh8{iD6f&v%?J3#`h2LX6+cQm*Q-UipeW$-%afMXyB
zc7ttT6Icfx|2jH?cfc)h4ZI0n2TR}pNQ2#A1Z)Ir!J}WJ4#7L%7Pto91Q)<Luml#t
zVUPoR!7i{3Yy#`R<6lK*a2MPHSHUH49xQ>wU=r*C39uGCdY62`9dH9&0T;koum}oZ
zH`ol;gU7!@`M|s2Cb$OP1Q)?M&;VsH3buibAOH`38NI-5a06Tc7r|Mu1P+5quoG+q
zkAI1Lz+Lb*xC$<Tb6^n^z;2KLYr(^JXk&02+yGa=MQ|Q0fny*Cc7x4e16Ttd{wvB4
z?tmNMEpQ3E4$go@PzIx5CrE(xAOH{lC3%9|;0AaLTmr9yGoT6zU@zDPHi9+a;lCgr
zxD9TAE8qe+3#uRuM!<UT_zvR{+y>Xco8S#_22?>Aq`@w*8LS8I|8vR&ZiB1f0yqmA
z-~ixV($P|?m@SlNli4!Y*=N$qOC@u;QaPF07X<1r%#<d_XQor-Y<?P+i&rkD3J1&i
ziClgxnM+L;lhYHK9@%WZm`g{Zu6R?)LMRbE3dQVnxhJuZ-;+?tk0qjIN$$^-$|N-5
zbd++4-d<<TV={A~%RiQ#P8JWka_5qzQg-}cGF8qOtt=Cnav_&Im?71|OxdM7Gd-0r
z7AAc#jT`5PE~&{(YM+alqGF3lORqeMda3-(wAObiV_9h$k*u3v%9N*OCQ6g}GObe1
zXjt^p{BzlfNj@OmpUGL7C0~_{=kobtIdh;qQ>0-+om7^}WOL{dO08U_j7qc9`!my2
z!9mk`rj&`ZB3;wTspLfFIbWaXsqvkbE={d->Nss_`7niSIW=iKUzRv;Ix|60t#K?|
zF++u>GNyG&^>8)i6!ChbCZ#jFN|AEM+HgGY(<-^nmMj*NzMRF9b~Mk@^ou1rnQ<ho
zqQ%>vESg;7h&KwaKJRxU%!khn$Tv42-&{|=K3<egcfJ}vmT#`qoo~L_U*3GNzr6Wk
zcX@q0pRdKyoTNT9d@SF5u{+<4Pasx@@VYXVbl`;<o8KuMOWViuy0|zlfW?V2w{}iW
zr@IO+;o$Y<53ei#FkUQwAJ6CS;zar5@5|q&0GU}_e=Q_ur%Q!=c|4htiAwZ|#=XqJ
zuHWeV(K8w~Y;s@UAQk>ZcK<+rDwjzX2c#2@!+a?lpV$3Zv>D=6Kc?Wjp%$BPB;S&h
zr%=p)o|!DmhwQ?e%J0ui<(V}Kc_#IYOr@^u%wuu3>Rn7S$aQM<VN_d2uzVJ;ysou@
z(%6uVWZIgHdJ{>y8iy8*xS<Zosi}O5L7mE$-MlYl?&W2s)49B@Bh;0f!^`<_#?(CA
z!cZE^mz^%QP)ukm`gWALsI<?|F*Yw{r<sYg{M2i9BAY8@GpS6;#mSWlnbZr#Oo=Zr
zeBFihA8QyNUl$Rb?qBt3_SK<pR}1FDu?l30`PuyVIED0i;dGhrPv&NPf8;xkiF`R<
zk~M|N-11KOu|S;3nRF@ps)c7A&SkI`B%JndTEuq}SunirsbVHGJ(-bJteZERO_y09
zBphi^C0T$oC0f<iKMI)LpJb6LXJu*8aBi$k&rFR)ea@Gg+zXi^4Q^pcQ|o8|-{m!%
zNft17B>!|K)i;M^r~7$R`Tn^ko!#FTcWNfr$1BZ@_3@JF{`AB`nP6;))#V3*=qNT?
zoNIdb&2#A8$3yQv9(woj(7TU^-hDju?&qoAU2NB8=pE;Z-sR+kH{*Q!TWh#>*10j(
zKKpe5xEVv@r}8$}W?lQy2gZx}sqA#t#h;a4RAz26e`z*Z@ckk^Q}AuxwH{D!U4H7U
z%TIlE`KhZeKlRk*r;fV)T0bExtec4AbT4MG=cXB$){o7fmr<Z)$L39EOQ~crvgLi*
znA6JG>7`uK&G=f^5kpOQKQ?0lmH(_CH|1op925Gq{Wy~aL(=vBXx?+<O^k1mGyc30
zTFg#N=zul8GhB@;JQ>%lDOtZBq>|IAOl~}xwz)=Js-&eY{xXK1#0|%8Y#k5BZj2X>
z-54(%yD?rkc4NG7?8bQE*p2a`G3uD2Uwk|Z*Xls0Oj!o9w6xX%<K%_0gJr))NLssk
z{LlCJpX>3PSJR`u()p=$w#e8SvwBNssOX5L;oMpjF+~^U?Ha&)egN;e0la6sc~Tb9
z4K;lE$N31*1?uK`d8vFbm+=9t&XniVps%wYO=U_Yb|_={oZo+R@h$CqLDnt{YdrRI
znK)D1K=!CPY=<1noQ*fNGsd$AykEt#V9k`WDN|7EOrm*yRHk?^UpD3Wa;SYJ_F^op
zkmu788?0AuGMy{K-J7p5SI^xt$17uB_68UIyZDy2*qnpHcJaL)Vuyx-!*)()i}Jl^
zkp|MP=<6Wj`!Z(A6UF3yOt$VaP^HFqX=+n2aEYdAsh>gX{Uwa<oa`gn(t92nl=8Vu
zDnB*FsBrPRdEI$x1G!D6=AnJSneOV>@$q7J9LIBMXG{6%%y=$2kt&aS9g3NBIg^|!
zrRaB_H-_~UXG%L*I6Xn=4d<EKSG9!v**c6KAI_C}yvXwE^wu!RqMTibrH=U-<4<Oi
zIkCXvJkciZr|Fav=asU#{h6XJKwWXi*t_ow*CnUR1npkhH<PnDPW5r|9XFn?#`o-)
zo>R#ZdyM}44rX$>{A@p;8Z>59Pg2v48Sz}YKEsIb((UJyt}&yqlCEP4kG?AQ_7vR>
zjmMZO_Q@8|^%<ETl2c<@PF_kJ5Bd2jv~!Iq=`e?Bm$PY2<GTgJMU3U;mk<qO`G*<D
z!gcLyG^<kP3o{wkS!=@{)hs<Zy>g04TIDPUT^3&UK&5?ITGo|M{N;m%uy4EecRg0(
zYJqgKmeL(#$TM?3^qXZUeqRq{q56zvCfG{KB<=k2?YZn(yj=If(gI<vxNvUME@z<K
zV>aTua2ho$R)_Ov$EWjU%Ruy*k&{Hs%o*Fq6-$%ZanmIibGx%GwwGDj+|uGKV=P;q
z&6Y@A(u#T2&&1Rt?~ac=WJr8AaAK)xTsKvjxn)I^FkO7p!|~Jv3o9cEt9(tfkk1{A
z*O-LyJYPT9@$n!U&v?!qo`r^4_3&L?#BCLyw&OW@%x=;6>bLTw+4uQ4*>TrcqHDZg
zU?b`l#M@u^F}ouh4S(Ocj^9W5IBtIs#lhbf$M3Uz9Jhyv;^6O#<M&}cj@xHMaq#!W
z@%uC%$L&R;IQaYG_<fv@<Mu029Q=K8{65deaeJC54*tG4V(W#KZEYkxU*X!1@W&$x
z&)LaQ%!ub>y1wATMX|N5ZA{65lKTCaG&*hk%om)Tc9_XAh$Srbt0P|A)LS`Q$VF!e
zGh^(8Qlw&er`?__ZZmsX+-C0Lna$kAGn=`KXEt*e?**5yOFQO%KIUdaC%S7GHgV#X
z`u3+J;xElGA+q9#o5`0MOx`lMu+t2mWU3TAQC_UcuUqVA%ld;%{XN9W(sAzh;Nz>g
z+I)qdNAdw}ZB>5*9lxJqhs0lXUvkNB8Tgtj_Hk5n3x$4%tKTLRQb$wr9a!F7_2NH3
zuy2{RRJX~^CGyj!#LIj+gm3w{{cb?~`i%*C*QCCnQk)={Ps*|yV86?jCrD<ebZ(gC
zN*eu2M}Bk4m%-tWWn(`SCC$W$eWoNIVkPzT0P0>J1XGq4#)#ULQ=VG5=u3&}o-OUK
zt^79m`o5<y{ykP{Jcq>)e$yo-?+eUjL)s@x1*eOCUn2#quADp>{uokzC33RDwIboS
zar|&+X=zoPAV|l8y88XvwVh1!CHBr2tF(rE(x%@$YdwvHd~KEFY>z+J<1dANx#*)S
zv1IC%L{5IQM+Uwh%f7Mev$7}o%-ajMRCUWMo#C5~YcVCBB*(c>{NpvBgM_la7V0e;
z=tt?ZL+WI<r%q;j>R|S3)WIzJSUrdNlzcuT?GyDSshzO;gOX3%$@oCaeQU@?Ez%?0
zFB^%n=ZS=VnJ$IV@kjqXDg&eDzru7Quv?bn7qj7KLjh5Ap9R(N)*UvrxY9f!%DII4
z@{zQ{Fk9x`e_>dH2lx3CIj=xp1|JYc>=FN6<fG8ffkE;+$YpRc%@35{L@rOA$b;fv
zN4^{RXTTu&Rpfh+eHMHW_{WER6Zu}4FM&bw3zmO^2!rJ3k&h8K*%KeHJ{{yT!O08n
zczh=fxQ0+-GOv4vQLkUw<gyPO^h}yuUkb$n`1pHGekdjrr<d<E`Qah*5tAPoBHv{4
zA3{E;eCtepbcp=%hg|uOA@@4r44(%kufSOoawEq*lh45#l>Z%*&m;c`I2%P(*DaG*
z@qMUACf;i%U%)*m{mUjlK16=r<cmY(XH5QjkKETq!{k3TM1I)hb>#8K$IqGki*X@t
zFW+tQ6GP-9CO<huzR~2(A@VgQZw-+@`e0Her-sPCYVy-V<o8Ve+7S62lb;zPzhUy#
zA@a9O{-q)E%O>ybSH6BPnEcB_;-5G9SBA*XnEXeE$QMn1ZixJV$$xZ+JZ<tH8zSFj
z^7F_C_5aPte;nCQ02x2u0^-jGi~o~xCT?FpYmxs9{-2KV;z8g40Dk}w#v4QAUqvp@
zAJ>2T|GA6&0_;Bl2I+qr`JY1eCx^&yAis$0PXn(r&d`0u@|VBI8J9~Kc`lgz`w<SB
zU(TBR2ZqQOP5y((<NEu&jv@cE<nw2M)csB%kC&H`U&8<AfXtukfIMEFw)8&<L-g}=
zte5Xb{uki?c`&GbN047e_7{i9HzB`*>@NYICeHBLfc&rE`^#XEd<}AWu7g4I_hVgo
zgWw+`|F8t?c^;bl7vX=jM<(9;Ccia6Cak+A|3|pv`g!+llmBDnYr*><{#-ZtKY=+&
z{-()4L4tApefk$o{x<PFPty19*G>LUW4yThtjYh`5P8GoA0k1YW<34@lYe}OeA47=
zhRFAt{5MEc`cLn()8xO2ATIa1Y%}>i<en#Kc=w3Oe=Ej|%Qu<)w_y$%KkH5YJ452H
zG5LE#<d6Pn6iE;~0`c^f$v^Lz{D0t%m(R=ZnEZdjh{yNkyJ_<O<s%sN@~bBA?RQ>&
z+2sGbCw-sX8z%ohp3#&3S(E?%5c#6XA0wCX+4~$b`5z$gI!PGsE}Q%h;SH*voXP(v
z7AGEmugO0^f<8@=`)9=DAM6o&??#h<7)CsQFJEKwZy6$g^oOIG)mk6HGWOp4CjTf5
z&yyhDeb?mj*9_wAZ^;C=P5!YV@o$=Z-4OX(CjVCC@$&ifFPr?khvff;$-iev{4*y1
z-XZZ9P5$l3`9FNT`+&*iuQm=U|D?$`43Y0Px%~NuLH%#D$-fUd|A&uvZ#4O*hRD~N
zd>naPKOg_`AB<|66EI}$lsP{BJTUnr^7#Dj!`w4@7P+*KUw^&)j>-2S=l}5W?wcmh
z!HDbU170<`{85c~`ab?;ljlwD<9YcTCNIG7JPG67XH5PD81ekQ{IJQ3L*!|bmxjo9
zn!JqMry0*bVe*+Cxi7~$lkZ0!@BconM~_D}=<E>rdnP~7lfIAtuE`I=kpA}-%h=1`
zHu<YCq<(xIdHHpdA2PW`56gPR<cE>_I1(oA_HhQ$OT>QzoCOVV43t3{>;@xXBUlFl
z@bLFXgZDt`p#2QN4mt7bccashUtY(Tlf2lIu=ZJuxZ|I^i9h}+nfSxcr^2xA^+Xs}
zye^y*;C3$$I3!MT5EA;Mc)8@5d~L6?^vu-ML2+}f6F<vaSmh3m)-rxB+vL8gRqonp
za&fZ!hMHdrFD-g;5ckb5*5*&R(DVG>cez4*?t^R|*L!f}a=A8_3~914e#GN0_>(Kg
zxm~cMS3ODInvecIyHPt;YoMRxp<FKdlIt<g$i2~V{(P;@{g=l>2|BlH8l&FiW^M9c
zMK5@9uhZvfwIX+gKZhJ$G>+3G@-N99Vy<3P?)}_gF4ulpu5IE=NnLsbM{l_k%@rb6
zrwg*jw<?pGmomGku|n&w%DEO@?uzHvprLN0h|lT9_4xCZrOJH0v#RwL_sicCILY0F
zT(Zu&X-%3{(&%FG@?*}LSY)pKI<2r4trN88S{>7uI;KS>EmyYo38`1~*Fws@+9H$k
zaKU(Esb1q}yUwpwW6dOI5Mi0MNng`6_-XKR>vU^j0c9i|2ro(ab*lcZS>w#}!a(?o
zD^+=+K^Xfh2-@e4MinOQDS6EE_YazjHTkuF<Ud`n%8&O+=Oowca}^aA=y9<>jaxq@
zw}f@-RmtC#-~C)&{G{jFe_5^*qtbauV-U}!d%9Lx;*N2`n9KUC`A%u2xE7sn(SPbq
z$wTgI<wZ^q=+FN<v>$Gtw{L&%k5y?H#;P>*TYamZ)?VtCvz}0Yu3ps((H+kZC@zZU
zE<eX}gU>ipH}tW(bO!F+oUb(&c#{?c@~>V62w&VCdIWiB^Vp48;+Lx@g|<7Z+MNTv
z#1RJf^3~^Ee%=}ASZFV`It%o5ZgL3y5>9VluzJ-}MMJ#98=@XoaGWc_dU^8=uH5Wl
z>YNiL6-Zh!ucj0CYZ@^IMXA)6<>np!1cfUP!|jv|RcU7ivFlxk0z$Q0jhbHb)THNW
z!H>ETCUV-Elq-5avRn_?!#mB*O+mfQMG6az%JF&r90?EiSa8{~%#!>q8M#N=Jn(g9
z_I&Sg+He5{9b071Us;y9US<%6vGEr93nY5=h4~kjD_s5H!gp#F4nUooqN~sQS8H-X
z;Cy8{Hnv0?$8d2(Q^#<A7pHw<MgI7Rr7I<Kj3|y{EY#1`cr~O)r0V7p2Pq3}A-5x+
zlxq@d%X4(K6Vi=bpR1gltFuCId%skDGzS>NbzCR3bbL4V>4piKJe)r@i8j}DbNPof
zL{C=4m-WJB)Zqqf8D}!T@+M5nD{l7}PJG#2YiVDT5`~&j7V&cV7fIOMY(qHo>+p@O
z!Ll~T*J}C<7mc=PziN%aO*{!fFOt6na=KDyyhhGosnu9jCgD1j<LWG}o}6nn<OU3;
zzY{g?ICYl}%UjuOlfU?)Z>n{q$1X3kD?;oZktm#9WEWj%))jD^d7Vb&rmy*~3mN4?
zEida!0il=4n3Fp*+-veGe>`T9_j^wSY1V61(+8k9BpFOmBF)dP+jdvAa8WcxY_iO{
zxAwd@`Djwl7CTTrSqK_XS&NQApNAfR?t&Jed;$^Vpf5txP<b~u3f&Fe4gD;17jzGF
z8}udU2y`!0?vi>Ln!x`GbOZEr(Dl$!=o)Ae`e?0t@Ad$i!hau{hTel_pm(9;(08B{
z(A&^S=uK!AdL8<C=vAovruGUn2fYlPf?kBm4{PN<t2|WhvXXana*vg~tCTyeicq<~
z3X@dtt|~+2-l`es>%`v=mAk8Ep&k4Opo`FhP`R(_Rp?>-hoA-MVdyCI2y_JcL(q-T
zqtNxxW6-rwu|*$$BpJ*>A3<eZc?gwpejh4>MefOx2~+OKVoC_^!53Ta9jLskxeXPg
z20KIleiC#^t_g+(PcCy|yft(N(b3n$beU`El+T!)b9eO-)~;y}+!gL}kC5I6L~`^h
zCRgrYJF4T2zh^SfH8_532|v!_@?U?2PY}6SYwfyG(F>c0RiYE!NdhnYV*$9`xWK-U
zyB+cCZLQE#+=~st-pAyGGFiI&w{g1*a-r^?ZK)5|Uj1_gHZSO1NOBiPfN{noCU>SV
z9gt$=mpS)%pw|^Uk#mziOAOFIDiqXdkmD_}94HrChgzep^I8>-uTZGmTOw;G!*xaF
zI%J76&t0|>cTVoUh4%en7r9MOzR+M`e;PU0%dj@f9r>ES`{OTqMRFJ{c-mi&qxays
zi$}SyRwoCO$@Jj-+{bb%^ob_X^NsFDqZt3+_5X4WOpiUQubSj<=t<jW_8fk#+G?FV
U%wHHdTx7AKuZnxeQgtr)zsacXbN~PV

diff --git a/Build/Compilers/Zandronum/zdefs.acs b/Build/Compilers/Zandronum/zdefs.acs
index d9f26379..d9bfd495 100644
--- a/Build/Compilers/Zandronum/zdefs.acs
+++ b/Build/Compilers/Zandronum/zdefs.acs
@@ -1,4 +1,3 @@
-
 //**************************************************************************
 //**
 //** zdefs.acs
@@ -214,6 +213,12 @@
 // HUD message.
 #define HUDMSG_ADDBLEND				0x20000000
 
+// OR this with one of the above to use the extra alpha parameter
+#define HUDMSG_ALPHA				0x10000000
+
+// Or this with one of the above to not wrap lines
+#define HUDMSG_NOWRAP				0x08000000
+
 // HUD message layers; these are not flags
 #define HUDMSG_LAYER_OVERHUD		0x00000000
 #define HUDMSG_LAYER_UNDERHUD		0x00001000
@@ -277,6 +282,13 @@
 #define APROP_Mass			32
 #define APROP_Accuracy      33
 #define APROP_Stamina       34
+#define APROP_Height		35
+#define APROP_Radius		36
+#define APROP_Reactiontime	37
+#define APROP_MeleeRange	38
+#define APROP_ViewHeight	39
+#define APROP_AttackZOffset	40
+#define APROP_StencilColor	41
 
 // Render Styles ------------------------------------------------------------
 
@@ -284,12 +296,14 @@
 #define STYLE_Normal		1	// Normal; just copy the image to the screen
 #define STYLE_Fuzzy			2	// Draw silhouette using "fuzz" effect
 #define STYLE_SoulTrans		3	// Draw translucent with amount in r_transsouls
-#define STYLE_OptFuzzy		4	// Draw as fuzzy or translucent, based on user preference
+#define STYLE_OptFuzzy		4	// Draw as fuzzy, translucent or shadow, based on user preference
 #define STYLE_Stencil		5	// Draw as solid color
 #define STYLE_Translucent	64	// Draw translucent
 #define STYLE_Add			65	// Draw additive
 #define STYLE_Shaded		66	// 
 #define STYLE_TranslucentStencil 67
+#define STYLE_Shadow		68	// Draw dark translucent stencil
+#define STYLE_Subtract  69  // Draw subtractive
 
 // Properties you can use with GetLevelInfo() -------------------------------
 
@@ -666,6 +680,46 @@
 #define SECSEQ_FULLHEIGHT		3
 #define SECSEQ_INTERIOR			4
 
+// Channels for PlaySound and StopSound
+
+#define CHAN_AUTO				0
+#define CHAN_WEAPON				1
+#define CHAN_VOICE				2
+#define CHAN_ITEM				3
+#define CHAN_BODY				4
+
+// Modifier flags for PlaySound
+
+#define CHAN_LISTENERZ			8
+#define CHAN_MAYBE_LOCAL		16
+#define CHAN_UI					32
+#define CHAN_NOPAUSE			64
+
+// Standard attenuation values for PlaySound
+
+#define ATTN_NONE				0		// full volume the entire level
+#define ATTN_NORM				1.0
+#define ATTN_IDLE				1.001
+#define ATTN_STATIC				3.0		// dimish very rapidly with distance
+
+// Identifiers for PlayActorSound
+
+#define SOUND_See				0
+#define SOUND_Attack			1
+#define SOUND_Pain				2
+#define SOUND_Death				3
+#define SOUND_Active			4
+#define SOUND_Use				5
+#define SOUND_Bounce			6
+#define SOUND_WallBounce		7
+#define SOUND_CrushPain			8
+#define SOUND_Howl				9
+
+// Flags for SpawnDecal
+
+#define SDF_ABSANGLE			1
+#define SDF_PERMANENT			2
+
 // Actor pointer selectors
 
 #DEFINE	AAPTR_DEFAULT 0
@@ -694,6 +748,22 @@
 #DEFINE PTROP_UNSAFEMASTER 2
 #DEFINE PTROP_NOSAFEGUARDS PTROP_UNSAFETARGET |PTROP_UNSAFEMASTER 
 
+// Line activation flags
+
+#define SPAC_Cross			1		// when player crosses line
+#define SPAC_Use			2		// when player uses line
+#define SPAC_MCross			4		// when monster crosses line
+#define SPAC_Impact			8		// when projectile hits line
+#define SPAC_Push			16		// when player pushes line
+#define SPAC_PCross			32		// when projectile crosses line
+#define SPAC_UseThrough		64		// when player uses line (doesn't block)
+#define SPAC_AnyCross		128		// when anything without the TELEPORT flag crosses the line
+#define SPAC_MUse			256		// monsters can use
+#define SPAC_MPush			512		// monsters can push
+#define SPAC_UseBack		1024	// can be used from the back side
+
+#define SPAC_None			0
+
 // ==========================================================================
 // Skulltag Definitions
 // ==========================================================================
@@ -703,6 +773,26 @@
 #define TEAM_RED				1
 #define NO_TEAM					2
 
+// Team properties ----------------------------------------------------------
+#define TPROP_Name				0
+#define TPROP_Score				1
+#define TPROP_IsValid			2
+#define TPROP_NumPlayers		3
+#define TPROP_NumLivePlayers	4
+#define TPROP_TextColor			5
+#define TPROP_PlayerStartNum	6
+#define TPROP_Spread			7
+#define TPROP_Carrier			8
+#define TPROP_Assister			9
+#define TPROP_FragCount			10
+#define TPROP_DeathCount		11
+#define TPROP_WinCount			12
+#define TPROP_PointCount		13
+#define TPROP_ReturnTics		14
+#define TPROP_TeamItem			15
+#define TPROP_WinnerTheme		16
+#define TPROP_LoserTheme		17
+
 // Skulltag Invasion --------------------------------------------------------
 #define IS_WAITINGFORPLAYERS	0
 #define IS_FIRSTCOUNTDOWN		1
@@ -766,6 +856,9 @@
 #define T_HIGHJUMP				188
 #define T_HASTE					189
 
+// Zandronum database additions ---------------------------------------------
+#define DB_ORDER_ASC			0
+#define DB_ORDER_DESC			1
 
 // Events when you have input grabbed
 
@@ -840,6 +933,7 @@
 #define CHANGELEVEL_CHANGESKILL 8
 #define CHANGELEVEL_NOINTERMISSION 16
 #define CHANGELEVEL_RESETHEALTH	32
+#define CHANGELEVEL_PRERAISEWEAPON 64
 
 #define NO_CHANGE 32767.0
 
@@ -857,6 +951,7 @@
 #define BLOCKF_RAILING 64
 #define BLOCKF_USE 128
 #define BLOCKF_SIGHT 256
+#define BLOCKF_HITSCAN 512
 
 #define FOGP_DENSITY 0
 #define FOGP_OUTSIDEDENSITY 1
@@ -869,21 +964,13 @@
 #define CSF_NOFAKEFLOORS 1
 #define CSF_NOBLOCKALL 2
 
-#define TPROP_Name 0
-#define TPROP_Score 1
-#define TPROP_IsValid 2
-#define TPROP_NumPlayers 3
-#define TPROP_NumLivePlayers 4
-#define TPROP_TextColor 5
-#define TPROP_PlayerStartNum 6
-#define TPROP_Spread 7
-#define TPROP_Carrier 8
-#define TPROP_Assister 9
-#define TPROP_FragCount 10
-#define TPROP_DeathCount 11
-#define TPROP_WinCount 12
-#define TPROP_PointCount 13
-#define TPROP_ReturnTics 14
-#define TPROP_TeamItem 15
-#define TPROP_WinnerTheme 16
-#define TPROP_LoserTheme 17
\ No newline at end of file
+#define FHF_NORANDOMPUFFZ	1
+
+// [TP] For GetTimeProperty
+#define TM_SECOND 0
+#define TM_MINUTE 1
+#define TM_HOUR 2
+#define TM_DAY 3
+#define TM_MONTH 4
+#define TM_YEAR 5
+#define TM_WEEKDAY 6
diff --git a/Build/Compilers/Zandronum/zspecial.acs b/Build/Compilers/Zandronum/zspecial.acs
index 85d10582..cb974485 100644
--- a/Build/Compilers/Zandronum/zspecial.acs
+++ b/Build/Compilers/Zandronum/zspecial.acs
@@ -14,11 +14,11 @@ special
 	  7:Polyobj_DoorSwing(4),
 	  8:Polyobj_DoorSlide(5),
 	  9:Line_Horizon(0),
-	 10:Door_Close(2),
+	 10:Door_Close(2,3),
 	 11:Door_Open(2,3),
 	 12:Door_Raise(3,4),
 	 13:Door_LockedRaise(4,5),
-	 14:Door_Animated(3),
+	 14:Door_Animated(3,4),
 	 15:Autosave(0),
 //	 16:Transfer_WallLight
 	 17:Thing_Raise(1),
@@ -75,7 +75,7 @@ special
 	 68:Floor_MoveToValueTimes8(4),
 	 69:Ceiling_MoveToValueTimes8(4),
 	 70:Teleport(1,3),
-	 71:Teleport_NoFog(1,3),
+	 71:Teleport_NoFog(1,4),
 	 72:ThrustThing(2,4),
 	 73:DamageThing(1,2),
 	 74:Teleport_NewMap(2,3),
@@ -83,12 +83,12 @@ special
 	 76:TeleportOther(3),
 	 77:TeleportGroup(5),
 	 78:TeleportInSector(4,5),
-	 
+	 79:Thing_SetConversation(2),
 	 80:ACS_Execute(2,5),
 	 81:ACS_Suspend(2),
 	 82:ACS_Terminate(2),
 	 83:ACS_LockedExecute(5),
-	 84:ACS_ExecuteWithResult(1,4),
+	 84:ACS_ExecuteWithResult(1,5),
 	 85:ACS_LockedExecuteDoor(5),
 	 86:Polyobj_MoveToSpot(3),
 	 87:Polyobj_Stop(1),
@@ -101,7 +101,9 @@ special
 	 94:Pillar_BuildAndCrush(4,5),
 	 95:FloorAndCeiling_LowerByValue(3),
 	 96:FloorAndCeiling_RaiseByValue(3),
-
+	 97:Ceiling_LowerAndCrushDist(3,5),
+	 98:Sector_SetTranslucent(3,4),
+	 99:Floor_RaiseAndCrushDoom(3,4),
 //	100:Scroll_Texture_Left
 //	101:Scroll_Texture_Right
 //	102:Scroll_Texture_Up
@@ -129,7 +131,7 @@ special
 	130:Thing_Activate(1),
 	131:Thing_Deactivate(1),
 	132:Thing_Remove(1),
-	133:Thing_Destroy(1,2),
+	133:Thing_Destroy(1,3),
 	134:Thing_Projectile(5),
 	135:Thing_Spawn(3,4),
 	136:Thing_ProjectileGravity(5),
@@ -146,11 +148,12 @@ special
 	154:Teleport_NoStop(2, 3),
 
 	157:SetGlobalFogParameter(2),		// GZDoom only!
-	158:FS_Execute(1,4),				// GZDoom only!
+	158:FS_Execute(1,4),
 	159:Sector_SetPlaneReflection(3),	// GZDoom only!
-//	160:Sector_Set3DFloor				// GZDoom/Vavoom
-//	161:Sector_SetContents				// Vavoom
+//	160:Sector_Set3DFloor
+//	161:Sector_SetContents
 	
+	168:Ceiling_CrushAndRaiseDist(3,5),
 	169:Generic_Crusher2(5),
 	170:Sector_SetCeilingScale2(3),
 	171:Sector_SetFloorScale2(3),
@@ -209,7 +212,7 @@ special
 //	225:Scroll_Texture_Offsets,
 	226:ACS_ExecuteAlways(2,5),
 //	227:PointPush_SetForce,
-	228:Plat_RaiseAndStayTx0(2),
+	228:Plat_RaiseAndStayTx0(2,3),
 	229:Thing_SetGoal(3,4),
 	230:Plat_UpByValueStayTx(3),
 	231:Plat_ToggleCeiling(1),
@@ -223,7 +226,7 @@ special
 	239:Floor_RaiseByValueTxTy(3),
 	240:Floor_RaiseByTexture(2),
 	241:Floor_LowerToLowestTxTy(2),
-	242:Floor_LowerToHighest(3),
+	242:Floor_LowerToHighest(3,4),
 	243:Exit_Normal(1),
 	244:Exit_Secret(1),
 	245:Elevator_RaiseToNearest(2),
@@ -232,7 +235,7 @@ special
 	248:HealThing(1,2),
 	249:Door_CloseWaitOpen(3, 4),
 	250:Floor_Donut(3),
-	251:FloorAndCeiling_LowerRaise(3),
+	251:FloorAndCeiling_LowerRaise(3,4),
 	252:Ceiling_RaiseToNearest(2),
 	253:Ceiling_LowerToLowest(2),
 	254:Ceiling_LowerToFloor(2),
@@ -250,7 +253,7 @@ special
 	-9:GetActorVelX(1),
 	-10:GetActorVelY(1),
 	-11:GetActorVelZ(1),
-	-12:SetActivator(1),
+	-12:SetActivator(1,2),
 	-13:SetActivatorToTarget(1),
 	-14:GetActorViewHeight(1),
 	-15:GetChar(2),
@@ -273,7 +276,53 @@ special
 	-32:SoundSequenceOnPolyobj(2),
 	-33:GetPolyobjX(1),
 	-34:GetPolyobjY(1),
+	-35:CheckSight(3),
+	-36:SpawnForced(4,6),
+	-37:AnnouncerSound(2),
+	-38:SetPointer(2,4),
+	-39:ACS_NamedExecute(2,5),
+	-40:ACS_NamedSuspend(2),
+	-41:ACS_NamedTerminate(2),
+	-42:ACS_NamedLockedExecute(5),
+	-43:ACS_NamedLockedExecuteDoor(5),
+	-44:ACS_NamedExecuteWithResult(1,5),
 	-45:ACS_NamedExecuteAlways(2,5),
+	-46:UniqueTID(0,2),
+	-47:IsTIDUsed(1),
+	-48:Sqrt(1),
+	-49:FixedSqrt(1),
+	-50:VectorLength(2),
+	-51:SetHUDClipRect(4,5),
+	-52:SetHUDWrapWidth(1),
+	-53:SetCVar(2),
+	-54:GetUserCVar(2),
+	-55:SetUserCVar(3),
+	-56:GetCVarString(1),
+	-57:SetCVarString(2),
+	-58:GetUserCVarString(2),
+	-59:SetUserCVarString(3),
+	-60:LineAttack(4,8),
+	-61:PlaySound(2,6),
+	-62:StopSound(1,2),
+	-63:strcmp(2,3),
+	-64:stricmp(2,3),
+	-64:strcasecmp(2,3),	// an alias for stricmp
+	-65:StrLeft(2),
+	-66:StrRight(2),
+	-67:StrMid(3),
+	-68:GetActorClass(1),
+	-69:GetWeapon(0),
+	-70:SoundVolume(3),
+	-71:PlayActorSound(2,6),
+	-72:SpawnDecal(2,6),
+	-73:CheckFont(1),
+	-74:DropItem(2,4),
+	-75:CheckFlag(2),
+	-76:SetLineActivation(2),
+	-77:GetLineActivation(1),
+	-78:GetActorPowerupTics(2),
+	
+	// Zandronum's
 	-100:ResetMap(0),
 	-101:PlayerIsSpectator(1),
 	-102:ConsolePlayerNumber(0),
@@ -281,6 +330,33 @@ special
 	-104:GetPlayerLivesLeft(1),
 	-105:SetPlayerLivesLeft(2),
 	-106:KickFromGame(2),
-	-19620:GetTeamScore(1), //Zdaemon
+	-107:GetGamemodeState(0),
+	-108:SetDBEntry(3),
+	-109:GetDBEntry(2),
+	-110:SetDBEntryString(3),
+	-111:GetDBEntryString(2),
+	-112:IncrementDBEntry(3),
+	-113:PlayerIsLoggedIn(1),
+	-114:GetPlayerAccountName(1),
+	-115:SortDBEntries(4),
+	-116:CountDBResults(1),
+	-117:FreeDBResults(1),
+	-118:GetDBResultKeyString(2),
+	-119:GetDBResultValueString(2),
+	-120:GetDBResultValue(2),
+	-121:GetDBEntryRank(3),
+	-122:RequestScriptPuke(1,5),
+	-123:BeginDBTransaction(0),
+	-124:EndDBTransaction(0),
+	-125:GetDBEntries(1),
+	-126:NamedRequestScriptPuke(1,5),
+	-127:SystemTime(0),
+	-128:GetTimeProperty(2,3),
+	-129:Strftime(2,3),
+	
+	// ZDaemon's
+	-19260:GetTeamScore(1),
+	-19261:SetTeamScore(2),
+	
 	-100000:__EndOfList__(10);
-	//-1000:__EndOfList__(10);
\ No newline at end of file
+	
diff --git a/Build/Scripting/ZDoom_ACS.cfg b/Build/Scripting/ZDoom_ACS.cfg
index 618c40c6..5b008f76 100644
--- a/Build/Scripting/ZDoom_ACS.cfg
+++ b/Build/Scripting/ZDoom_ACS.cfg
@@ -57,16 +57,16 @@ keywords
 	ACS_Suspend = "ACS_Suspend(script, map)";
 	ACS_Terminate = "ACS_Terminate(script, map)";
 	ActivatorSound = "void ActivatorSound(str sound, int volume)";
-	ActivatorTID = "int ActivatorTID(void)";
+	ActivatorTID = "int ActivatorTID()";
 	AmbientSound = "void AmbientSound(str sound, int volume)";
 	//AnnouncerSound = "void AnnouncerSound(str sound, int flags)";
-	Autosave = "Autosave(void)";
+	Autosave = "Autosave()";
 	//BlueCount = "BlueCount()";
 	//BlueReturn = "Script expression BlueReturn";
 	//BlueScore = "BlueScore()";
 	//BlueTeamCount = "BlueTeamCount()";
 	//BlueTeamScore = "BlueTeamScore()";
-	CancelFade = "void CancelFade(void)\nIf either FadeTo or FadeRange is currently in progress,\nCancelFade stops it and turns off the palette flash.";
+	CancelFade = "void CancelFade()\nIf either FadeTo or FadeRange is currently in progress,\nCancelFade stops it and turns off the palette flash.";
 	CanRaiseActor = "bool CanRaiseActor(int tid)\nChecks to see if the actor or actors with the specified tid are viable for resurrection.\nIf tid is 0, the check is done on the activator of the script.";
 	Ceiling_CrushAndRaise = "Ceiling_CrushAndRaise(tag, speed, crush, crushmode)";
 	Ceiling_CrushAndRaiseA = "Ceiling_CrushAndRaiseA(tag, dspeed, uspeed, crush, crushmode)";
@@ -116,8 +116,8 @@ keywords
 	ClassifyActor = "int ClassifyActor(int tid)";
 	ClearActorInventory = "void ClearActorInventory(int tid)\nThis function clears the specified actor's inventory.";
 	ClearForceField = "ClearForceField(tag)";
-	ClearInventory = "void ClearInventory(void)\nClears the player's inventory of weapons, ammo, armor and usable items.";
-	ClearLineSpecial = "void ClearLineSpecial(void)\nClears the special of the line that activated the script.";
+	ClearInventory = "void ClearInventory()\nClears the player's inventory of weapons, ammo, armor and usable items.";
+	ClearLineSpecial = "void ClearLineSpecial()\nClears the special of the line that activated the script.";
 	//ConsoleCommand = "void ConsoleCommand(str command)";
 	Cos = "fixed Cos(int angle)";
 	CreateTranslation = "void CreateTranslation(int transnumber, a:b=c:d, ...)";
@@ -168,10 +168,10 @@ keywords
 	FloorAndCeiling_LowerByValue = "FloorAndCeiling_LowerByValue(tag, speed, height)";
 	FloorAndCeiling_LowerRaise = "FloorAndCeiling_LowerRaise(tag, fspeed, cspeed, boomemu)";
 	FloorAndCeiling_RaiseByValue = "FloorAndCeiling_RaiseByValue(tag, speed, height)";
-	ForceField = "ForceField(void)";
+	ForceField = "ForceField()";
 	FS_Execute = "FS_Execute(script, side, keynum, message)";
-	GameSkill = "int GameSkill(void)";
-	GameType = "int GameType(void)";
+	GameSkill = "int GameSkill()";
+	GameType = "int GameType()";
 	Generic_Ceiling = "Generic_Ceiling(tag, speed, height, target, flag)";
 	Generic_Crusher = "Generic_Crusher(tag, dspeed, uspeed, silent, crush)";
 	Generic_Crusher2 = "Generic_Crusher2(tag, dspeed, uspeed, silent, crush)";
@@ -206,7 +206,7 @@ keywords
 	//GetInvasionWave = "GetInvasionWave()";
 	GetLevelInfo = "int GetLevelInfo(int levelinfo)";
 	GetLineActivation = "int GetLineActivation(int lineid)\nlineid: The id of the line of which to get the activation flags.\nReturns SPAC flags as a bitfield";
-	GetLineRowOffset = "int GetLineRowOffset(void)";
+	GetLineRowOffset = "int GetLineRowOffset()";
 	GetLineUDMFFixed = "fixed GetLineUDMFFixed(int lineid, str key)";
 	GetLineUDMFInt = "int GetLineUDMFInt(int lineid, str key)";
 	GetMaxInventory = "int GetMaxInventory(int tid, str inventory)";
@@ -214,8 +214,8 @@ keywords
 	GetPlayerInput = "int GetPlayerInput(int player, int input)";
 	GetPolyobjX = "fixed GetPolyobjX(int polyid)";
 	GetPolyobjY = "fixed GetPolyobjY(int polyid)";
-	GetScreenHeight = "int GetScreenHeight(void)";
-	GetScreenWidth = "int GetScreenWidth(void)";
+	GetScreenHeight = "int GetScreenHeight()";
+	GetScreenWidth = "int GetScreenWidth()";
 	GetSectorCeilingZ = "int GetSectorCeilingZ(int tag, int x, int y)";
 	GetSectorFloorZ = "fixed GetSectorFloorZ(int tag, int x, int y)";
 	GetSectorLightLevel = "int GetSectorLightLevel(int tag)";
@@ -223,22 +223,22 @@ keywords
 	GetSectorUDMFInt = "int GetSectorUDMFInt(int tag, str key)";
 	GetSideUDMFFixed = "fixed GetSideUDMFFixed(int lineid, bool side, str key)";
 	GetSideUDMFInt = "int GetSideUDMFInt(int lineid, bool side, str key)";
-	GetSigilPieces = "int GetSigilPieces(void)\nReturns the number of Sigil pieces that are held by the player";
+	GetSigilPieces = "int GetSigilPieces()\nReturns the number of Sigil pieces that are held by the player";
 	GetThingUDMFFixed = "fixed GetThingUDMFFixed(int thingid, str key)";
 	GetThingUDMFInt = "int GetThingUDMFInt(int thingid, str key)";
 	GetUserArray = "void GetUserArray(int tid, str name, int pos)";
 	GetUserCVar = "int GetUserCVar(int playernumber, str cvar)";
 	GetUserCVarString = "str GetUserCVarString(int playernumber, str cvar)";
 	GetUserVariable = "int GetUserVariable(int tid, str name)";
-	GetWeapon = "str GetWeapon(void)\nReturns the class name of the weapon currently equipped by the player as a string";
+	GetWeapon = "str GetWeapon()\nReturns the class name of the weapon currently equipped by the player as a string";
 	GiveActorInventory = "void GiveActorInventory(int tid, str inventory_item, int amount)\nThis function will give the amount of items to the specifed actor.\nThis function does not treat tid 0 as the activator of the script";
 	GiveInventory = "void GiveInventory(str inventory_item, int amount)\nThis function will give the number of items specified to the activator.";
 	GlassBreak = "GlassBreak(dontspawnjunk)";
 	HealThing = "HealThing(amount)";
 	HudMessage = "void hudmessage(s:text; int type, int id, int color, fixed x, fixed y, fixed holdTime)";
 	HudMessageBold = "void HudMessageBold(s:text; int type, int id, int color, fixed x, fixed y, fixed holdTime)";
-	//IsMultiplayer = "int IsMultiplayer(void)";
-	//IsOneFlagCTF = "int IsOneFlagCTF(void)";
+	//IsMultiplayer = "int IsMultiplayer()";
+	//IsOneFlagCTF = "int IsOneFlagCTF()";
 	IsPointerEqual = "bool IsPointerEqual(int ptr_select1, int ptr_select2[, int tid1[, int tid2]])";
 	IsTIDUsed = "bool IsTIDUsed(int tid)";
 	Light_ChangeToValue = "Light_ChangeToValue(tag, value)";
@@ -260,7 +260,7 @@ keywords
 	Line_SetPortalTarget = "Line_SetPortalTarget(sourcelineid, targetlineid)";
 	Line_SetTextureOffset = "Line_SetTextureOffset(lineid, x, y, side, flags)";
 	Line_SetTextureScale = "Line_SetTextureScale(lineid, x, y, side, flags)";
-	LineSide = "int LineSide(void)";
+	LineSide = "int LineSide()";
 	LocalAmbientSound = "void LocalAmbientSound(str sound, int volume)";
 	LocalSetMusic = "void LocalSetMusic(str song[, int order[, int unused]])";
 	Log = "void Log(type:expression)\nLog will print something in the log area of the screen (top left), as well as logging it to the console.\nIt uses the same parameter format as the Print function.";
@@ -286,11 +286,11 @@ keywords
 	Plat_UpWaitDownStay = "Plat_UpWaitDownStay(tag, speed, delay)";
 	PlayActorSound = "void PlayActorSound(int tid, int sound, int channel, fixed volume, bool looping, fixed attenuation)";
 	PlayerClass = "int PlayerClass(int playernumber)";
-	PlayerCount = "int PlayerCount(void)\nReturns the number of players currently in the game";
-	PlayerFrags = "int PlayerFrags(void)";
+	PlayerCount = "int PlayerCount()\nReturns the number of players currently in the game";
+	PlayerFrags = "int PlayerFrags()";
 	PlayerInGame = "bool PlayerInGame(int playernumber)\nReturns true if the player [0..7] is in the game";
 	PlayerIsBot = "bool PlayerIsBot(int playernumber)\nReturns TRUE if the player [0..7] is a bot and FALSE if not";
-	PlayerNumber = "int PlayerNumber(void)\nReturns the player number for the player who activated the script, starting at 0.\nFor scripts that were not activated by a player, PlayerNumber will return -1.";
+	PlayerNumber = "int PlayerNumber()\nReturns the player number for the player who activated the script, starting at 0.\nFor scripts that were not activated by a player, PlayerNumber will return -1.";
 	PlaySound = "void PlaySound(int tid, str sound[, int channel = CHAN_BODY[, fixed volume = 1.0[, bool looping = false[, fixed attenuation = ATTN_NORM]]]])";
 	Polyobj_DoorSlide = "Polyobj_DoorSlide(po, speed, angle, dist, delay)";
 	Polyobj_DoorSwing = "Polyobj_DoorSwing(po, speed, angle, delay)";
@@ -425,7 +425,7 @@ keywords
 	TakeActorInventory = "void TakeActorInventory(int tid, str inventory_item, int amount)\nThis function will take the amount of items from the specified actor.\nTakeActorInventory can remove items that are flagged as undroppable.";
 	TakeInventory = "void TakeInventory(str inventory_item, int amount)\nThis function will take the number of items specified from the activator.\nTakeInventory can remove items that are flagged as undroppable.";
 	Teleport = "Teleport(tid, tag, nosourcefog)";
-	Teleport_EndGame = "Teleport_EndGame(void)";
+	Teleport_EndGame = "Teleport_EndGame()";
 	Teleport_NewMap = "Teleport_NewMap(map, pos, face)";
 	Teleport_NoFog = "Teleport_NoFog(tid, useangle, tag)";
 	Teleport_NoStop = "Teleport_NoStop(tid, tag, nofog)";
@@ -463,7 +463,7 @@ keywords
 	ThingSound = "void ThingSound(int tid, str sound, int volume)\nPlays a sound at a thing.\nThis is a point sound, so anyone far away will not hear it as loudly";
 	ThrustThing = "ThrustThing(angle, force, nolimit, tid)";
 	ThrustThingZ = "ThrustThingZ(tid, speed, up_or_down, add_or_set)";
-	Timer = "int Timer(void)";
+	Timer = "int Timer()";
 	TranslucentLine = "TranslucentLine(lineid, amount, additive, moreflags)";
 	UniqueTID = "int UniqueTID([int tid[, int limit]])";
 	UnMorphActor = "int UnMorphActor(int tid[, bool force])";
diff --git a/Build/Scripting/Zandronum_ACS.cfg b/Build/Scripting/Zandronum_ACS.cfg
index cbb4c53d..903f6340 100644
--- a/Build/Scripting/Zandronum_ACS.cfg
+++ b/Build/Scripting/Zandronum_ACS.cfg
@@ -22,51 +22,65 @@ arrayopen = "[";
 arrayclose = "]";
 argumentdelimiter = ",";
 terminator = ";";
+extrawordchars = "#"; // Extra characters to be treated as a part of a word by the Script Editor
 keywordhelp = "http://www.zdoom.org/wiki/index.php?title=%K";
 snippetsdir = "acs";
 scripttype = 1; //0 = unknown script, 1 = acc, 2 = modeldef, 3 = decorate
 
 keywords
 {
-	#Define = "#Define identifier expression";
-	#EncryptStrings = "#EncryptStrings";
-	#Import = "#Import";
-	#Include = "#Include";
-	#Library = "#Library";
-	#LibDefine = "#LibDefine identifier expression";
+	#define = "#Define identifier expression";
+	#encryptstrings = "#EncryptStrings";
+	#import = "#Import";
+	#include = "#Include";
+	#libdefine = "#LibDefine identifier expression";
+	#library = "#Library";
 	#NoCompact = "#NoCompact";
 	#NoWadAuthor = "#NoWadAuthor";
 	#WadAuthor = "#WadAuthor";
+	#region = "#region block";
+	#endregion = "end of #region block";
 	ACS_Execute = "ACS_Execute(script, map, arg1, arg2, arg3)";
 	ACS_ExecuteAlways = "ACS_ExecuteAlways(script, map, arg1, arg2, arg3)";
-	ACS_ExecuteWait = "ACS_ExecuteWait(script, map, arg1, arg2, arg3)";
-	ACS_ExecuteWithResult = "ACS_ExecuteWithResult(script, s_arg1, s_arg2, s_arg3)";
+	ACS_ExecuteWait = "void ACS_ExecuteWait(int script, int unused, int arg1, int arg2, int arg3)";
+	ACS_ExecuteWithResult = "ACS_ExecuteWithResult(script, arg1, arg2, arg3)";
 	ACS_LockedExecute = "ACS_LockedExecute(script, map, arg1, arg2, lock)";
 	ACS_LockedExecuteDoor = "ACS_LockedExecuteDoor(script, map, arg1, arg2, lock)";
+	ACS_NamedExecute = "bool ACS_NamedExecute(str script, int map, int arg1, int arg2, int arg3)";
+	ACS_NamedExecuteAlways = "bool ACS_NamedExecuteAlways(str script, int map, int arg1, int arg2, int arg3)";
+	ACS_NamedExecuteWait = "void ACS_NamedExecuteWait(str script, int unused, int arg1, int arg2, int arg3)";
+	ACS_NamedExecuteWithResult = "int ACS_NamedExecuteWithResult(str script, int arg1, int arg2, int arg3, int arg4)";
+	ACS_NamedLockedExecute = "bool ACS_NamedLockedExecute(str script, int map, int arg1, int arg2, int lock)";
+	ACS_NamedLockedExecuteDoor = "bool ACS_NamedLockedExecuteDoor(str script, int map, int arg1, int arg2, int lock)";
+	ACS_NamedSuspend = "bool ACS_NamedSuspend(str script, int map)";
+	ACS_NamedTerminate = "bool ACS_NamedTerminate(str script, int map)";
 	ACS_Suspend = "ACS_Suspend(script, map)";
 	ACS_Terminate = "ACS_Terminate(script, map)";
-	ActivatorSound = "ActivatorSound(name, volume)";
-	ActivatorTID = "ActivatorTID()";
-	AmbientSound = "AmbientSound(name, volume)";
+	ActivatorSound = "void ActivatorSound(str sound, int volume)";
+	ActivatorTID = "int ActivatorTID()";
+	AmbientSound = "void AmbientSound(str sound, int volume)";
+	AnnouncerSound = "void AnnouncerSound(str sound, int flags)";
 	Autosave = "Autosave()";
-	BlueTeamCount = "BlueTeamCount()";
-	BlueTeamScore = "BlueTeamScore()";
-	Bool = "Bool expression";
-	Break = "Break";
-	Return = "Return";
-	CancelFade = "CancelFade()";
-	Case = "Case expression:";
-	Ceiling_CrushAndRaise = "Ceiling_CrushAndRaise(tag, speed, crush)";
-	Ceiling_CrushAndRaiseA = "Ceiling_CrushAndRaiseA(tag, dspeed, uspeed, crush)";
-	Ceiling_CrushAndRaiseSilentA = "Ceiling_CrushAndRaiseSilentA(tag, dspeed, uspeed, crush)";
-	Ceiling_CrushRaiseAndStay = "Ceiling_CrushRaiseAndStay(tag, speed, crush)";
-	Ceiling_CrushRaiseAndStayA = "Ceiling_CrushRaiseAndStayA(tag, dspeed, uspeed, crush)";
-	Ceiling_CrushRaiseAndStaySilA = "Ceiling_CrushRaiseAndStaySilA(tag, dspeed, uspeed, crush)";
+	BeginDBTransaction = "void BeginDBTransaction()";
+	//BlueCount = "BlueCount()";
+	//BlueReturn = "Script expression BlueReturn";
+	//BlueScore = "BlueScore()";
+	//BlueTeamCount = "BlueTeamCount()";
+	//BlueTeamScore = "BlueTeamScore()";
+	CancelFade = "void CancelFade()\nIf either FadeTo or FadeRange is currently in progress,\nCancelFade stops it and turns off the palette flash.";
+	Ceiling_CrushAndRaise = "Ceiling_CrushAndRaise(tag, speed, crush, crushmode)";
+	Ceiling_CrushAndRaiseA = "Ceiling_CrushAndRaiseA(tag, dspeed, uspeed, crush, crushmode)";
+	Ceiling_CrushAndRaiseDist = "Ceiling_CrushAndRaiseDist(tag, dist, speed, damage, crushmode)";
+	Ceiling_CrushAndRaiseSilentA = "Ceiling_CrushAndRaiseSilentA(tag, dspeed, uspeed, crush, crushmode)";
+	Ceiling_CrushRaiseAndStay = "Ceiling_CrushRaiseAndStay(tag, speed, crush, crushmode)";
+	Ceiling_CrushRaiseAndStayA = "Ceiling_CrushRaiseAndStayA(tag, dspeed, uspeed, crush, crushmode)";
+	Ceiling_CrushRaiseAndStaySilA = "Ceiling_CrushRaiseAndStaySilA(tag, dspeed, uspeed, crush, crushmode)";
 	Ceiling_CrushStop = "Ceiling_CrushStop(tag)";
-	Ceiling_LowerAndCrush = "Ceiling_LowerAndCrush(tag, speed, crush)";
+	Ceiling_LowerAndCrush = "Ceiling_LowerAndCrush(tag, speed, crush, crushmode)";
+	Ceiling_LowerAndCrushDist = "Ceiling_LowerAndCrushDist(tag, speed, crush, dist, crushmode)";
 	Ceiling_LowerByValue = "Ceiling_LowerByValue(tag, speed, height)";
 	Ceiling_LowerByValueTimes8 = "Ceiling_LowerByValueTimes8(tag, speed, height)";
-	Ceiling_LowerInstant = "Ceiling_LowerInstant(tag, arg1, height)";
+	Ceiling_LowerInstant = "Ceiling_LowerInstant(tag, unused, height)";
 	Ceiling_LowerToFloor = "Ceiling_LowerToFloor(tag, speed)";
 	Ceiling_LowerToHighestFloor = "Ceiling_LowerToHighestFloor(tag, speed)";
 	Ceiling_LowerToLowest = "Ceiling_LowerToLowest(tag, speed)";
@@ -74,72 +88,74 @@ keywords
 	Ceiling_MoveToValueTimes8 = "Ceiling_MoveToValueTimes8(tag, speed, height, neg)";
 	Ceiling_RaiseByValue = "Ceiling_RaiseByValue(tag, speed, height)";
 	Ceiling_RaiseByValueTimes8 = "Ceiling_RaiseByValueTimes8(tag, speed, height)";
-	Ceiling_RaiseInstant = "Ceiling_RaiseInstant(tag, arg1, height)";
+	Ceiling_RaiseInstant = "Ceiling_RaiseInstant(tag, unused, height)";
 	Ceiling_RaiseToNearest = "Ceiling_RaiseToNearest(tag, speed)";
 	Ceiling_Waggle = "Ceiling_Waggle(tag, amp, freq, offset, time)";
 	ChangeCamera = "ChangeCamera(tid, who, revert)";
-	ChangeCeiling = "ChangeCeiling(tag, flat)";
-	ChangeFloor = "ChangeFloor(tag, flat)";
-	ChangeLevel = "ChangeLevel(mapname, position, flags, skill)";
+	ChangeCeiling = "void ChangeCeiling(int tag, str flatname)";
+	ChangeFloor = "void ChangeFloor(int tag, str flatname)";
+	ChangeLevel = "void ChangeLevel(str mapname, int position, int flags[, int skill])\nChanges to a new map, places the player at the specified start spot, and optionally changes the skill level at the same time.";
 	ChangeSkill = "ChangeSkill(skill)";
-	CheckActorCeilingTexture = "CheckActorCeilingTexture(tid, texture)";
-	CheckActorClass = "CheckActorClass(tid, class)";
-	CheckActorFloorTexture = "CheckActorFloorTexture(tid, texture)";
-	CheckActorInventory = "CheckActorInventory(tid, type)";
-	CheckActorProperty = "CheckActorProperty(tid, property, value)";
-	CheckInventory = "CheckInventory(type)";
-	CheckPlayerCamera = "CheckPlayerCamera(player)";
-	CheckWeapon = "CheckWeapon(weapon)";
-	ClassifyActor = "ClassifyActor(tid)";
-	ClearActorInventory = "ClearActorInventory(tid)";
-	ClearForceField = "ClearForceField()";
-	ClearInventory = "ClearInventory()";
-	ClearLineSpecial = "ClearLineSpecial()";
-	ConsoleCommand = "ConsoleCommand(command)";
-	Const = "Const";
-	Continue = "Continue";
-	cos = "cos(angle)";
-	CreateTranslation = "CreateTranslation(transnumber, translation, translation, translation, ...)";
-	DamageThing = "DamageThing(amount)";
-	Death = "Script expression Death";
-	Default = "Default:";
-	Delay = "Delay(tics)";
-	Disconnect = "Script expression Disconnect";
-	Do = "Do";
-	Door_Animated = "Door_Animated(tag, speed, delay)";
-	Door_Close = "Door_Close(tag, speed)";
-	Door_CloseWaitOpen = "Door_CloseWaitOpen(tag, speed, delay)";
-	Door_LockedRaise = "Door_LockedRaise(tag, speed, delay, lock)";
-	Door_Open = "Door_Open(tag, speed)";
-	Door_Raise = "Door_Raise(tag, speed, delay)";
+	ChangeSky = "void ChangeSky(str sky1, str sky2)\nChanges the sky texture to sky1 and the second sky texture to sky2.\nBoth textures must be the same height if doublesky is enabled.\nYou may also use any flat, pname, sprite or internal graphic (such as TITLEPIC) in place of an actual texture.\nUseful in conjunction with SetSkyScrollSpeed.";
+	CheckActorCeilingTexture = "bool CheckActorCeilingTexture(int tid, str texture)";
+	CheckActorClass = "bool CheckActorClass(int tid, str class)";
+	CheckActorFloorTexture = "bool CheckActorFloorTexture(int tid, str texture)";
+	CheckActorInventory = "int CheckActorInventory(int tid, str inventory_item)\nChecks the given actor's inventory for the item specified by inventory_item";
+	CheckActorProperty = "bool CheckActorProperty(int tid, int property, [int|float|str] value)";
+	CheckFlag = "bool CheckFlag(int tid, str flag)\nChecks to see if the actor with the matching tid has the specified actor flag set.\nIf tid is 0, the check is performed on the activator of the script.";
+	CheckFont = "bool CheckFont(str fontname)";
+	CheckInventory = "int CheckInventory(str inventory_item)\nChecks the inventory of the actor who activated the script for the item specified by inventory_item";
+	CheckPlayerCamera = "int CheckPlayerCamera(int player)";
+	CheckSight = "bool CheckSight(int source, int dest, int flags)";
+	CheckWeapon = "bool CheckWeapon(str weapon)\nChecks if player's active weapon is the weapon with specified class name.";
+	ClassifyActor = "int ClassifyActor(int tid)";
+	ClearActorInventory = "void ClearActorInventory(int tid)\nThis function clears the specified actor's inventory.";
+	ClearForceField = "ClearForceField(tag)";
+	ClearInventory = "void ClearInventory()\nClears the player's inventory of weapons, ammo, armor and usable items.";
+	ClearLineSpecial = "void ClearLineSpecial()\nClears the special of the line that activated the script.";
+	//ConsoleCommand = "void ConsoleCommand(str command)";
+	ConsolePlayerNumber = "int ConsolePlayerNumber()";
+	Cos = "fixed Cos(int angle)";
+	CountDBResults = "int CountDBResults(resource results)";
+	CreateTranslation = "void CreateTranslation(int transnumber, a:b=c:d, ...)";
+	DamageThing = "DamageThing(amount, mod)";
+	Delay = "void Delay(int tics)";
+	Door_Animated = "Door_Animated(tag, speed, delay, lock)";
+	Door_Close = "Door_Close(tag, speed, lighttag)";
+	Door_CloseWaitOpen = "Door_CloseWaitOpen(tag, speed, delay, lighttag)";
+	Door_LockedRaise = "Door_LockedRaise(tag, speed, delay, lock, lighttag)";
+	Door_Open = "Door_Open(tag, speed, lighttag)";
+	Door_Raise = "Door_Raise(tag, speed, delay, lighttag)";
+	DropItem = "int DropItem(int tid, str item[, int dropamount = -1[, int chance = 256]])\nCauses actors with the matching tid to drop the specified item.\nIf tid is 0, the activator of the script is considered to be the dropper of the item.\nThis works in a similar way to the DropItem actor property.\nThe return value of the function is the number of dropped items.";
 	Elevator_LowerToNearest = "Elevator_LowerToNearest(tag, speed)";
 	Elevator_MoveToFloor = "Elevator_MoveToFloor(tag, speed)";
 	Elevator_RaiseToNearest = "Elevator_RaiseToNearest(tag, speed)";
-	Else = "Else";
-	Enter = "Script expression Enter";
+	EndDBTransaction = "void EndDBTransaction()";
 	Exit_Normal = "Exit_Normal(pos)";
 	Exit_Secret = "Exit_Secret(pos)";
-	FadeRange = "FadeRange(red1, green1, blue1, red2, green2, blue2, amount, seconds)";
-	FadeTo = "FadeTo(red, green, blue, amount, seconds)";
-	FixedDiv = "FixedDiv(fa, fb)";
-	FixedMul = "FixedMul(fa, fb)";
+	FadeRange = "void FadeRange(int red1, int green1, int blue1, fixed amount1, int red2, int green2, int blue2, fixed amount2, fixed seconds)\nSets the current flash to the first color set and then fades it to the second color set over the specified number of seconds.";
+	FadeTo = "void FadeTo(int red, int green, int blue, fixed amount, fixed seconds)\nFades the activator's view from the current palette flash to another one.\nThis will also work if the activator is looking through another viewpoint (using a camera, etc.).";
+	FixedDiv = "fixed FixedDiv(int a, int b)";
+	FixedMul = "fixed FixedMul(int a, int b)";
+	FixedSqrt = "fixed FixedSqrt(fixed number)";
 	Floor_CrushStop = "Floor_CrushStop(tag)";
 	Floor_Donut = "Floor_Donut(ptag, pspeed, sspeed)";
 	Floor_LowerByValue = "Floor_LowerByValue(tag, speed, height)";
 	Floor_LowerByValueTimes8 = "Floor_LowerByValueTimes8(tag, speed, height)";
-	Floor_LowerInstant = "Floor_LowerInstant(tag, arg1, height)";
-	Floor_LowerToHighest = "Floor_LowerToHighest(tag, speed, adjust)";
+	Floor_LowerInstant = "Floor_LowerInstant(tag, unused, height)";
+	Floor_LowerToHighest = "Floor_LowerToHighest(tag, speed, adjust, force_adjust)";
 	Floor_LowerToLowest = "Floor_LowerToLowest(tag, speed)";
 	Floor_LowerToLowestTxTy = "Floor_LowerToLowestTxTy(tag, speed)";
 	Floor_LowerToNearest = "Floor_LowerToNearest(tag, speed)";
 	Floor_MoveToValue = "Floor_MoveToValue(tag, speed, height, neg)";
 	Floor_MoveToValueTimes8 = "Floor_MoveToValueTimes8(tag, speed, height, neg)";
-	Floor_RaiseAndCrush = "Floor_RaiseAndCrush(tag, speed, crush)";
+	Floor_RaiseAndCrush = "Floor_RaiseAndCrush(tag, speed, crush, crushmode)";
+	Floor_RaiseAndCrushDoom = "Floor_RaiseAndCrushDoom(tag, speed, crush, crushmode)";
 	Floor_RaiseByTexture = "Floor_RaiseByTexture(tag, speed)";
 	Floor_RaiseByValue = "Floor_RaiseByValue(tag, speed, height)";
 	Floor_RaiseByValueTimes8 = "Floor_RaiseByValueTimes8(tag, speed, height)";
 	Floor_RaiseByValueTxTy = "Floor_RaiseByValueTxTy(tag, speed, height)";
-	Floor_RaiseInstant = "Floor_RaiseInstant(tag, arg1, height)";
+	Floor_RaiseInstant = "Floor_RaiseInstant(tag, unused, height)";
 	Floor_RaiseToHighest = "Floor_RaiseToHighest(tag, speed)";
 	Floor_RaiseToLowestCeiling = "Floor_RaiseToLowestCeiling(tag, speed)";
 	Floor_RaiseToNearest = "Floor_RaiseToNearest(tag, speed)";
@@ -147,77 +163,96 @@ keywords
 	Floor_TransferTrigger = "Floor_TransferTrigger(tag)";
 	Floor_Waggle = "Floor_Waggle(tag, amp, freq, offset, time)";
 	FloorAndCeiling_LowerByValue = "FloorAndCeiling_LowerByValue(tag, speed, height)";
-	FloorAndCeiling_LowerRaise = "FloorAndCeiling_LowerRaise(tag, fspeed, cspeed)";
+	FloorAndCeiling_LowerRaise = "FloorAndCeiling_LowerRaise(tag, fspeed, cspeed, boomemu)";
 	FloorAndCeiling_RaiseByValue = "FloorAndCeiling_RaiseByValue(tag, speed, height)";
-	For = "For(initialization, condition, iteration)";
 	ForceField = "ForceField()";
-	Function = "Function Void expression (Void)";
-	GameSkill = "GameSkill()";
-	GameType = "GameType()";
+	FreeDBResults = "void FreeDBResults(int set)";
+	FS_Execute = "FS_Execute(script, side, keynum, message)";
+	GameSkill = "int GameSkill()";
+	GameType = "int GameType()";
 	Generic_Ceiling = "Generic_Ceiling(tag, speed, height, target, flag)";
 	Generic_Crusher = "Generic_Crusher(tag, dspeed, uspeed, silent, crush)";
+	Generic_Crusher2 = "Generic_Crusher2(tag, dspeed, uspeed, silent, crush)";
 	Generic_Door = "Generic_Door(tag, speed, kind, delay, lock)";
 	Generic_Floor = "Generic_Floor(tag, speed, height, target, flags)";
 	Generic_Lift = "Generic_Lift(tag, speed, delay, type, height)";
 	Generic_Stairs = "Generic_Stairs(tag, speed, height, flags, reset)";
-	GetLevelInfo = "GetLevelInfo(infotype)";
-	GetActorAngle = "GetActorAngle(tid)";
-	GetActorCeilingZ = "GetActorCeilingZ(tid)";
-	GetActorFloorZ = "GetActorFloorZ(tid)";
-	GetActorLightLevel = "GetActorLightLevel(tid)";
-	GetActorPitch = "GetActorPitch(tid)";
-	GetActorProperty = "GetActorProperty(tid, property)";
-	GetActorVelX = "GetActorVelX(tid)";
-	GetActorVelY = "GetActorVelY(tid)";
-	GetActorVelZ = "GetActorVelZ(tid)";
-	GetActorViewHeight = "GetActorViewHeight(tid)";
-	GetActorX = "GetActorX(tid)";
-	GetActorY = "GetActorY(tid)";
-	GetActorZ = "GetActorZ(tid)";
-	GetAirSupply = "GetAirSupply(playernumber)";
-	GetAmmoCapacity = "GetAmmoCapacity(classname)";
-	GetArmorType = "GetArmorType(armortype, playernumber)";
-	GetChar = "GetChar(string, index)";
-	GetCVar = "GetCVar(name)";
-	GetInvasionState = "GetInvasionState()";
-	GetInvasionWave = "GetInvasionWave()";
-	GetPlayerInfo = "GetPlayerInfo(playernumber, infotype)";
-	GetLevelInfo = "GetLevelInfo(infotype)";
-	GetLineRowOffset = "GetLineRowOffset()";
-	GetLineUDMFInt = "GetLineUDMFInt(lineid, fieldname)";
-	GetLineUDMFFixed = "GetLineUDMFFixed(lineid, fieldname)";
-	GetPlayerInput = "GetPlayerInput(player, input)";
-	GetPolyobjX = "GetPolyobjX(po)";
-	GetPolyobjY = "GetPolyobjY(po)";
-	GetScreenHeight = "GetScreenHeight()";
-	GetScreenWidth = "GetScreenWidth()";
-	GetSectorCeilingZ = "GetSectorCeilingZ(tag, x, y)";
-	GetSectorFloorZ = "GetSectorFloorZ(tag, x, y)";
-	GetSectorLightLevel = "GetSectorLightLevel(tag)";
-	GetSectorUDMFInt = "GetSectorUDMFInt(tag, fieldname)";
-	GetSectorUDMFFixed = "GetSectorUDMFFixed(tag, fieldname)";
-	GetSideUDMFInt = "GetSideUDMFInt(lineid, side, fieldname)";
-	GetSideUDMFFixed = "GetSideUDMFFixed(lineid, side, fieldname)";
-	GetThingUDMFInt = "GetThingUDMFInt(tid, fieldname)";
-	GetThingUDMFFixed = "GetThingUDMFFixed(tid, fieldname)";
-	GetUserArray = "GetUserArray(tid, name, pos)";
-	GetUserVariable = "GetUserVariable(tid, name)";
-	GiveActorInventory = "GiveActorInventory(tid, type, amount)";
-	GiveInventory = "GiveInventory(type, amount)";
+	GetActorAngle = "fixed GetActorAngle(int tid)";
+	GetActorCeilingZ = "fixed GetActorCeilingZ(int tid)";
+	GetActorClass = "str GetActorClass(int tid)";
+	GetActorFloorZ = "fixed GetActorFloorZ(int tid)";
+	GetActorLightLevel = "int GetActorLightLevel(int tid)";
+	GetActorPitch = "fixed GetActorPitch(int tid)";
+	GetActorPowerupTics = "int GetActorPowerupTics(int tid, str powerup)";
+	GetActorProperty = "int GetActorProperty(int tid, int property)";
+	GetActorVelX = "fixed GetActorVelX(int tid)";
+	GetActorVelY = "fixed GetActorVelY(int tid)";
+	GetActorVelZ = "fixed GetActorVelZ(int tid)";
+	GetActorViewHeight = "fixed GetActorViewHeight(int tid)";
+	GetActorX = "fixed GetActorX(int tid)";
+	GetActorY = "fixed GetActorY(int tid)";
+	GetActorZ = "fixed GetActorZ(int tid)";
+	GetAirSupply = "int GetAirSupply(int playernum)";
+	GetAmmoCapacity = "int GetAmmoCapacity(str classname)";
+	GetArmorType = "int GetArmorType(str armortype, int playernum)";
+	GetChar = "int GetChar(str string, int index)";
+	GetCVar = "int GetCVar(str cvar)";
+	GetCVarString = "str GetCVarString(str cvar)";
+	GetDBEntries = "resource GetDBEntries(str namespace)";
+	GetDBEntry = "int GetDBEntry(table, variable)";
+	GetDBEntryRank = "int GetDBEntryRank(str namespace, str key, int order)";
+	GetDBEntryString = "str GetDBEntryString(str namespace, str key)";
+	GetDBResultKeyString = "str GetDBResultKeyString(int set, int record)";
+	GetDBResultValue = "int GetDBResultValue(int set, int record)";
+	GetDBResultValueString = "str GetDBResultValueString(int set, int record)";
+	GetGameModeState = "int GetGameModeState()"; 
+	GetInvasionState = "int GetInvasionState()";
+	GetInvasionWave = "int GetInvasionWave()";
+	GetLevelInfo = "int GetLevelInfo(int levelinfo)";
+	GetLineActivation = "int GetLineActivation(int lineid)\nlineid: The id of the line of which to get the activation flags.\nReturns SPAC flags as a bitfield";
+	GetLineRowOffset = "int GetLineRowOffset()";
+	GetLineUDMFFixed = "fixed GetLineUDMFFixed(int lineid, str key)";
+	GetLineUDMFInt = "int GetLineUDMFInt(int lineid, str key)";
+	GetPlayerAccountName = "str GetPlayerAccountName(int player)";
+	GetPlayerInfo = "int GetPlayerInfo(int playernumber, int playerinfo)";
+	GetPlayerInput = "int GetPlayerInput(int player, int input)";
+	GetPlayerLivesLeft = "int GetPlayerLivesLeft(int player)";
+	GetPolyobjX = "fixed GetPolyobjX(int polyid)";
+	GetPolyobjY = "fixed GetPolyobjY(int polyid)";
+	GetScreenHeight = "int GetScreenHeight()";
+	GetScreenWidth = "int GetScreenWidth()";
+	GetSectorCeilingZ = "int GetSectorCeilingZ(int tag, int x, int y)";
+	GetSectorFloorZ = "fixed GetSectorFloorZ(int tag, int x, int y)";
+	GetSectorLightLevel = "int GetSectorLightLevel(int tag)";
+	GetSectorUDMFFixed = "fixed GetSectorUDMFFixed(int tag, str key)";
+	GetSectorUDMFInt = "int GetSectorUDMFInt(int tag, str key)";
+	GetSideUDMFFixed = "fixed GetSideUDMFFixed(int lineid, bool side, str key)";
+	GetSideUDMFInt = "int GetSideUDMFInt(int lineid, bool side, str key)";
+	GetSigilPieces = "int GetSigilPieces()\nReturns the number of Sigil pieces that are held by the player";
+	GetTeamProperty = "int GetTeamProperty(int team, int prop)";
+	GetTimeProperty = "int GetTimeProperty(int timestamp, int which[, bool utc])";
+	GetThingUDMFFixed = "fixed GetThingUDMFFixed(int thingid, str key)";
+	GetThingUDMFInt = "int GetThingUDMFInt(int thingid, str key)";
+	GetUserArray = "void GetUserArray(int tid, str name, int pos)";
+	GetUserCVar = "int GetUserCVar(int playernumber, str cvar)";
+	GetUserCVarString = "str GetUserCVarString(int playernumber, str cvar)";
+	GetUserVariable = "int GetUserVariable(int tid, str name)";
+	GetWeapon = "str GetWeapon()\nReturns the class name of the weapon currently equipped by the player as a string";
+	GiveActorInventory = "void GiveActorInventory(int tid, str inventory_item, int amount)\nThis function will give the amount of items to the specifed actor.\nThis function does not treat tid 0 as the activator of the script";
+	GiveInventory = "void GiveInventory(str inventory_item, int amount)\nThis function will give the number of items specified to the activator.";
 	GlassBreak = "GlassBreak(dontspawnjunk)";
-	Global = "Global Int expression:identifier";
-	Goto = "Goto";
 	HealThing = "HealThing(amount)";
-	HudMessage = "HudMessage(text; type, id, color, x, y, holdtime)";
-	HudMessageBold = "HudMessageBold(text; type, id, color, x, y, holdtime)";
-	If = "If(expression)";
-	Int = "Int expression";
-	IsMultiplayer = "IsMultiplayer()";
-	IsOneFlagCTF = "IsOneFlagCTF()";
+	HudMessage = "void hudmessage(s:text; int type, int id, int color, fixed x, fixed y, fixed holdTime)";
+	HudMessageBold = "void HudMessageBold(s:text; int type, int id, int color, fixed x, fixed y, fixed holdTime)";
+	IsMultiplayer = "bool IsMultiplayer()";
+	IsOneFlagCTF = "bool IsOneFlagCTF()";
+	IncrementDBEntry = "void IncrementDBEntry(str namespace, str key, int amount)";
+	IsTIDUsed = "bool IsTIDUsed(int tid)";
+	KickFromGame = "bool KickFromGame(int player, str reason)";
 	Light_ChangeToValue = "Light_ChangeToValue(tag, value)";
 	Light_Fade = "Light_Fade(tag, value, tics)";
 	Light_Flicker = "Light_Flicker(tag, upper, lower)";
-	Light_ForceLightning = "Light_ForceLightning()";
+	Light_ForceLightning = "Light_ForceLightning(mode)";
 	Light_Glow = "Light_Glow(tag, upper, lower, tics)";
 	Light_LowerByValue = "Light_LowerByValue(tag, value)";
 	Light_MaxNeighbor = "Light_MaxNeighbor(tag)";
@@ -226,260 +261,359 @@ keywords
 	Light_Stop = "Light_Stop(tag)";
 	Light_Strobe = "Light_Strobe(tag, upper, lower, u-tics, l-tics)";
 	Light_StrobeDoom = "Light_StrobeDoom(tag, u-tics, l-tics)";
-	Lightning = "Script expression Lightning";
+	LineAttack = "LineAttack(int tid, fixed angle, fixed pitch, int damage[, str pufftype = 'BulletPuff'[, str damagetype = 'None'[, fixed range = 2048[, int flags = 0]]]])\nFires a hitscan attack. If tid is 0, the activator of the script is the source of the attack.";
 	Line_AlignCeiling = "Line_AlignCeiling(lineid, side)";
 	Line_AlignFloor = "Line_AlignFloor(lineid, side)";
 	Line_SetBlocking = "Line_SetBlocking(lineid, setflags, clearflags)";
-	Line_SetTextureScale = "Line_SetTextureScale(lineid, x, y, side, flags)";
 	Line_SetTextureOffset = "Line_SetTextureOffset(lineid, x, y, side, flags)";
-	LineSide = "LineSide()";
-	LocalAmbientSound = "LocalAmbientSound(name, volume)";
-	LocalSetMusic = "LocalSetMusic(song, pattern, transition)";
-	Log = "Log(type:expression)";
-	MorphActor = "MorphActor(tid, playerclass, monsterclass, duration, style, morphflash, unmorphflash)";
-	Net = "Script expression Net";
+	Line_SetTextureScale = "Line_SetTextureScale(lineid, x, y, side, flags)";
+	LineSide = "int LineSide()";
+	LocalAmbientSound = "void LocalAmbientSound(str sound, int volume)";
+	LocalSetMusic = "void LocalSetMusic(str song[, int order[, int unused]])";
+	Log = "void Log(type:expression)\nLog will print something in the log area of the screen (top left), as well as logging it to the console.\nIt uses the same parameter format as the Print function.";
+	MorphActor = "int MorphActor(int tid, [str playerclass, [str monsterclass, [int duration, [int style, [str morphflash, [str unmorphflash]]]]]])";
+	NamedRequestScriptPuke = "int NamedRequestScriptPuke(str script[, int arg0[, int arg1[, int arg2[, int arg3]]]])";
+	NamedScriptWait = "void NamedScriptWait(str script)";
 	NoiseAlert = "NoiseAlert(target_tid, emiter_tid)";
-	Open = "Script expression Open";
 	Pillar_Build = "Pillar_Build(tag, speed, height)";
-	Pillar_BuildAndCrush = "Pillar_BuildAndCrush(tag, speed, height, crush)";
+	Pillar_BuildAndCrush = "Pillar_BuildAndCrush(tag, speed, height, crush, crushmode)";
 	Pillar_Open = "Pillar_Open(tag, speed, fdist, cdist)";
-	Plane_Align = "Plane_Align(floor, ceiling)";
 	Plat_DownByValue = "Plat_DownByValue(tag, speed, delay, height)";
 	Plat_DownWaitUpStay = "Plat_DownWaitUpStay(tag, speed, delay)";
-	Plat_DownWaitUpStayLip = "Plat_DownWaitUpStayLip(tag, speed, delay, lip)";
+	Plat_DownWaitUpStayLip = "Plat_DownWaitUpStayLip(tag, speed, delay, lip, sound)";
 	Plat_PerpetualRaise = "Plat_PerpetualRaise(tag, speed, delay)";
 	Plat_PerpetualRaiseLip = "Plat_PerpetualRaiseLip(tag, speed, delay, lip)";
-	Plat_RaiseAndStayTx0 = "Plat_RaiseAndStayTx0(tag, speed)";
+	Plat_RaiseAndStayTx0 = "Plat_RaiseAndStayTx0(tag, speed, lockout)";
 	Plat_Stop = "Plat_Stop(tag)";
 	Plat_ToggleCeiling = "Plat_ToggleCeiling(tag)";
 	Plat_UpByValue = "Plat_UpByValue(tag, speed, delay, height)";
 	Plat_UpByValueStayTx = "Plat_UpByValueStayTx(tag, speed, height)";
 	Plat_UpNearestWaitDownStay = "Plat_UpNearestWaitDownStay(tag, speed, delay)";
 	Plat_UpWaitDownStay = "Plat_UpWaitDownStay(tag, speed, delay)";
-	Player_GiveItem = "Player_GiveItem(item, message)";
-	Player_RemoveItem = "Player_RemoveItem(item, message)";
-	Player_SetTeam = "Player_SetTeam(team)";
-	PlayerArmorPoints = "PlayerArmorPoints()";
-	PlayerBlueSkull = "PlayerBlueSkull()";
-	PlayerClass = "PlayerClass(player_number)";
-	PlayerCount = "PlayerCount()";
-	PlayerFrags = "PlayerFrags()";
-	PlayerHealth = "PlayerHealth()";
-	PlayerInGame = "PlayerInGame(player_number)";
-	PlayerIsBot = "PlayerIsBot(player_number)";
-	PlayerNumber = "PlayerNumber()";
-	PlayerOnTeam = "PlayerOnTeam()";
-	PlayerRedSkull = "PlayerRedSkull()";
-	PlayerTeam = "PlayerTeam()";
-	PlayerYellowSkull = "PlayerYellowSkull()";
-	PlayMovie = "PlayMovie(moviename)";
+	PlayActorSound = "void PlayActorSound(int tid, int sound, int channel, fixed volume, bool looping, fixed attenuation)";
+	PlayerArmorpoints = "int PlayerArmorpoints()";
+	PlayerClass = "int PlayerClass(int playernumber)";
+	PlayerCount = "int PlayerCount()\nReturns the number of players currently in the game";
+	PlayerFrags = "int PlayerFrags()";
+	PlayerHealth = "int PlayerHealth()";
+	PlayerIsLoggedIn = "int PlayerIsLoggedIn(int playernumber)";
+	PlayerInGame = "bool PlayerInGame(int playernumber)\nReturns true if the player [0..7] is in the game";
+	PlayerIsBot = "bool PlayerIsBot(int playernumber)\nReturns TRUE if the player [0..7] is a bot and FALSE if not";
+	PlayerIsSpectator = "int PlayerIsSpectator(int player)";
+	PlayerNumber = "int PlayerNumber()\nReturns the player number for the player who activated the script, starting at 0.\nFor scripts that were not activated by a player, PlayerNumber will return -1.";
+	PlayerTeam = "int PlayerTeam()";
+	PlaySound = "void PlaySound(int tid, str sound[, int channel = CHAN_BODY[, fixed volume = 1.0[, bool looping = false[, fixed attenuation = ATTN_NORM]]]])";
 	Polyobj_DoorSlide = "Polyobj_DoorSlide(po, speed, angle, dist, delay)";
 	Polyobj_DoorSwing = "Polyobj_DoorSwing(po, speed, angle, delay)";
 	Polyobj_Move = "Polyobj_Move(po, speed, angle, dist)";
 	Polyobj_MoveTimes8 = "Polyobj_MoveTimes8(po, speed, angle, dist)";
+	Polyobj_MoveTo = "Polyobj_MoveTo(po, speed, pos_x, pos_y)";
+	Polyobj_MoveToSpot = "Polyobj_MoveToSpot(po, speed, target)";
 	Polyobj_OR_Move = "Polyobj_OR_Move(po, speed, angle, distance)";
 	Polyobj_OR_MoveTimes8 = "Polyobj_OR_MoveTimes8(po, speed, angle, distance)";
-	Polyobj_OR_RotateLeft = "Polyobj_OR_RotateLeft(po, speed)";
+	Polyobj_OR_MoveTo = "Polyobj_OR_MoveTo(po, speed, pos_x, pos_y)";
+	Polyobj_OR_MoveToSpot = "Polyobj_OR_MoveToSpot(po, speed, target)";
+	Polyobj_OR_RotateLeft = "Polyobj_OR_RotateLeft(po, speed, angle)";
 	Polyobj_OR_RotateRight = "Polyobj_OR_RotateRight(po, speed, angle)";
 	Polyobj_RotateLeft = "Polyobj_RotateLeft(po, speed, angle)";
 	Polyobj_RotateRight = "Polyobj_RotateRight(po, speed, angle)";
-	PolyWait = "PolyWait(po)";
-	Print = "Print(type:expression)";
-	PrintBold = "PrintBold(type:expression)";
-	PointPush_SetForce = "PointPush_SetForce(tag, tid, amount, useline)";
+	Polyobj_Stop = "Polyobj_Stop(po)";
+	PolyWait = "void PolyWait(int polyid)";
+	Print = "void Print(type:expression)\nPrint will print something to the screen.\nPrint will only display for the activator of the script\nFor printing to all players, use PrintBold.";
+	PrintBold = "void PrintBold(type:expression)\nThis is exactly the same as Print, except all players will see the printed text\non the screen instead of just the activator of the script.";
 	Radius_Quake = "Radius_Quake(intensity, duration, damrad, tremrad, tid)";
-	Random = "Random(low, high)";
-	ReplaceTextures = "ReplaceTextures(oldtexture, newtexture, flags)";
-	RedTeamCount = "RedTeamCount()";
-	RedTeamScore = "RedTeamScore()";
-	Respawn = "Script expression Respawn";
-	Restart = "Restart";
-	Script = "Script expression (Void)";
-	ScriptWait = "ScriptWait(scriptid)";
-	Scroll_Ceiling = "Scroll_Ceiling(tag, scrollbits, 0, xmove, ymove)";
-	Scroll_Floor = "Scroll_Floor(tag, scrollbits, method xmove, ymove)";
+	Radius_Quake2 = "void Radius_Quake2(int tid, int intensity, int duration, int damrad, int tremrad, str sound)";
+	Random = "int Random(int min, int max)";
+	ReplaceTextures = "void ReplaceTextures(str oldtexturename, str newtexturename[, int flags])\nReplaces all occurences of oldtexturename with newtexturename.\nNOT_ flags can be used.";
+	RequestScriptPuke = "int RequestScriptPuke(int script[, int arg0[, int arg1[, int arg2[, int arg3]]]])";
+	ResetMap = "int ResetMap()";
+	ScriptWait = "void ScriptWait(int script)";
+	Scroll_Ceiling = "Scroll_Ceiling(tag, x-move, y-move, unused)";
+	Scroll_Floor = "Scroll_Floor(tag, x-move, y-move, type)";
 	Scroll_Texture_Both = "Scroll_Texture_Both(lineid, left, right, down, up)";
-	Scroll_Texture_Model = "Scroll_Texture_Model(lineid, scrollbits)";
-	Scroll_Texture_Offsets = "Scroll_Texture_Offsets";
 	Scroll_Wall = "Scroll_Wall(lineid, x, y, side, flags)";
+	Sector_ChangeFlags = "Sector_ChangeFlags(tag, setflags, clearflags)";
 	Sector_ChangeSound = "Sector_ChangeSound(tag, newsequence)";
 	Sector_SetCeilingPanning = "Sector_SetCeilingPanning(tag, u-int, u-frac, v-int, v-frac)";
 	Sector_SetCeilingScale = "Sector_SetCeilingScale(tag, u-int, u-frac, v-int, v-frac)";
-	Sector_SetColor = "Sector_SetColor(tag, r, g, b)";
+	Sector_SetCeilingScale2 = "Sector_SetCeilingScale2(tag, u-fixed, v-fixed)";
+	Sector_SetColor = "Sector_SetColor(tag, red, green, blue, desaturation)";
+	Sector_SetCurrent = "Sector_SetCurrent(tag, amount, angle, useline)";
 	Sector_SetDamage = "Sector_SetDamage(tag, amount, mod)";
-	Sector_SetFade = "Sector_SetFade(tag, r, g, b)";
+	Sector_SetFade = "Sector_SetFade(tag, red, green, blue)";
 	Sector_SetFloorPanning = "Sector_SetFloorPanning(tag, u-int, u-frac, v-int, v-frac)";
 	Sector_SetFloorScale = "Sector_SetFloorScale(tag, u-int, u-frac, v-int, v-frac)";
+	Sector_SetFloorScale2 = "Sector_SetFloorScale2(tag, u-fixed, v-fixed)";
 	Sector_SetFriction = "Sector_SetFriction(tag, amount)";
 	Sector_SetGravity = "Sector_SetGravity(tag, ipart, fpart)";
 	Sector_SetLink = "Sector_SetLink(controltag, tag, surface, movetype)";
 	Sector_SetPlaneReflection = "Sector_SetPlaneReflection(tag, floor, ceiling)";
-	Sector_SetRotation = "Sector_SetRotation(tag, floor-angle, ceiling-angle)";
-	SectorDamage = "SectorDamage(tag, amount, type, protection-item, flags)";
-	SectorSound = "SectorSound(name, volume)";
+	Sector_SetRotation = "Sector_SetRotation(tag, floorangle, ceilingangle)";
+	Sector_SetTranslucent = "Sector_SetTranslucent(tag, plane, amount, type)";
+	Sector_SetWind = "Sector_SetWind(tag, amount, angle, useline)";
+	SectorDamage = "void SectorDamage(int tag, int amount, str type, str protection_item, int flags)\nDoes the damage only when the function is called,\nand damages everything in the tagged sector.\nUses DAMAGE_ flags.";
+	SectorSound = "void SectorSound(str sound, int volume)";
 	SendToCommunicator = "SendToCommunicator(voc_id, front_only, indentify, nolog)";
-	SetActorAngle = "SetActorAngle(tid, angle)";
-	SetAirControl = "SetAirControl(amount)";
-	SetActorPitch = "SetActorPitch(tid, angle)";
-	SetActorPosition = "SetActorPosition(tid, x, y, z, fog)";
-	SetActorProperty = "SetActorProperty(tid, property, value)";
-	SetActorState = "SetActorState(tid, state, exact)";
-	SetActorVelocity = "SetActorVelocity(tid, velx, vely, velz, add, setbob)";
-	SetAirSupply = "SetAirSupply(playernumber, tics)";
-	SetCameraToTexture = "SetCameraToTexture(tag, texture, fov)";
-	SetCeilingTrigger = "SetCeilingTrigger(tag, height, special, arg1, arg2, arg3, arg4, arg5)";
+	SetActivator = "int SetActivator(int tid[, int pointer_selector])\nThis changes the activator of the script to the first actor found with the specified tid.\ntid: TID of the new activator.\npointer_selector: the pointer of the TID to set as the new activator (use AAPTR_ flags).";
+	SetActivatorToTarget = "bool SetActivatorToTarget(int tid)\nThis changes the activator of the script to the current target\nof the first actor found with the specified tid.\nUsing a tid of 0 uses the current activator's target.";
+	SetActorAngle = "void SetActorAngle(int tid, fixed angle)\nSets the actor's angle.\nangle: a fixed point angle in the range of 0.0 to 1.0 (N = 0.25, W = 0.5, S = 0.75, E = 1.0).";
+	SetActorPitch = "void SetActorPitch(int tid, int pitch)\nSets the actor's Pitch.\npitch: a fixed point angle in the range of 0.0 to 1.0.";
+	SetActorPosition = "bool SetActorPosition(int tid, fixed x, fixed y, fixed z, bool fog)\nThis function sets the x, y, and z coordinates of the specified actor, with or without teleport fog.\nReturns TRUE if the actor position was changed successfully.";
+	SetActorProperty = "void SetActorProperty(int tid, int property, [int|float|str] value)\nproperty: one of the APROP_ properties.";
+	SetActorRoll = "void SetActorRoll(int tid, fixed angle)";
+	SetActorState = "int SetActorState(int tid, str statename[, bool exact])\nForces the actor(s) with the matching tid into the specified state, as defined in Decorate.\nIf tid is 0, the activator is affected.\nThe exact parameter specifies whether or not partial state name matches are accepted.";
+	SetActorVelocity = "bool SetActorVelocity(int tid, fixed velx, fixed vely, fixed velz, bool add, bool setbob)\nChanges actor velocity.\ntid: TID of things to affect. If 0, the activator is used.\nvelx, vely, velz: The desired velocity for the affected things.\nadd: If true, each affected actor's velocity is modified by the velx, vely\nand velz parameters, rather than replaced by them.\nsetbob: If true, the speed adjustment influences the bobbing of any concerned player actor.";
+	SetAirControl = "void SetAirControl(fixed amount)\nSets how well the player can move while in the air.\nThe default amount is 0.00390625.";
+	SetAirSupply = "bool SetAirSupply(int playernum, int tics)\nSets the amount of tics remaining in a player's air supply.";
+	SetAmmoCapacity = "void SetAmmoCapacity(str typename, int maxamount)\nSets the maximum amount of a type of ammo the player can carry.";
+	SetCameraToTexture = "void SetCameraToTexture(int cameratid, str texturename, int fov)\nBinds the named texture to the specified camera\n(which does not have to be an actual camera thing).\nThe texture used must be defined as a �cameratexture� in the ANIMDEFS lump.";
+	SetCeilingTrigger = "void SetCeilingTrigger(int tag, int height, int special[, int arg1[, int arg2[, int arg3[, int arg4[, int arg5]]]]])\nWhen the ceiling specified by tag moves the specified height,\nspecial(arg1, arg2, arg3, arg4, arg5) will be activated.";
+	SetCVar = "bool SetCVar(str cvar, int value)\nSets the value of a particular console variable.\nOnly mod-defined console variables through CVARINFO can be changed by using this function.\nReturns FALSE if cvar is invalid, or it is not writable.";
+	SetCVarString = "bool SetCVarString(str cvar, str value)\nSets the value of a particular console variable.\nOnly mod-defined console variables through CVARINFO can be changed by using this function.\nReturns FALSE if cvar is invalid, or it is not writable.";
+	SetDBEntry = "int SetDBEntry(table, variable, value)";
+	SetDBEntryString = "void SetDBEntryString(str namespace, str key, str value)";
 	SetFloorTrigger = "SetFloorTrigger(tag, height, special, arg1, arg2, arg3, arg4, arg5)";
-	SetFont = "SetFont(fontname)";
-	SetGravity = "SetGravity(amount)";
-	SetHudSize = "SetHudSize(width, height, statusbar)";
-	SetLineBlocking = "SetLineBlocking(line, blocking)";
-	SetLineMonsterBlocking = "SetLineMonsterBlocking(line, blocking)";
-	SetLineSpecial = "SetLineSpecial(line, special, arg1, arg2, arg3, arg4, arg5)";
-	SetLineTexture = "SetLineTexture(line, side, position, texture)";
-	SetMarineSprite = "SetMarineSprite(tid, actorclass)";
-	SetMarineWeapon = "SetMarineWeapon(tid, weapon)";
-	SetMugShotState = "SetMugShotState(state)";
-	SetMusic = "SetMusic(song, pattern, transition)";
+	SetFont = "void SetFont(str fontlump)\nSets the current font (only within the script) to fontlump";
+	SetGlobalFogParameter = "SetGlobalFogParameter(property, value)";
+	SetGravity = "void SetGravity(fixed amount)\nThis function sets the global gravity of an entire level.\nDefault is 800.0";
+	SetHUDClipRect = "void SetHUDClipRect(int x, int y, int width, int height[, int wrapwidth = 0])\nSets the clipping rectangle for future HUD messages.";
+	SetHudSize = "void SetHudSize(int width, int height, bool statusbar)\nCauses text messages to be stretched or shrunk to match the size\nthey would appear if the user's resolution was width by height.";
+	SetHUDWrapWidth = "void SetHudWrapWidth(int wrapwidth)\nSets the wrapping width for future HUD messages without altering the clipping rectangle.\nIf you set the wrapping width to 0, messages will wrap\nto the full width of the HUD, as normal.";
+	SetLineActivation = "void SetLineActivation(int lineid, int activation)\nSets the line activation flags of the line with the specified id.\nlineid: The id of the line of which to set the activation flags\nactivation: SPAC_ flags to set. Multiple flags can be set by using the pipe character | between the constant names.";
+	SetLineBlocking = "void SetLineBlocking(int lineid, int blocking)\nDEPRECATED!\nUse Line_SetBlocking instead!";
+	SetLineMonsterBlocking = "void SetLineMonsterBlocking(int lineid, int setting)\nDEPRECATED!\nUse Line_SetBlocking instead!";
+	SetLineSpecial = "void SetLineSpecial(int lineid, int special[, int arg0[, int arg1[, int arg2[, int arg3[, int arg4]]]]])\nSetLineSpecial will change the special on all lines with the line id number specified.";
+	SetLineTexture = "void SetLineTexture(int lineid, int line_side, int sidedef_texture, str texturename)\nSetLineTexture will change the specified texture on all lines with the line id number specified\nline_side: SIDE_ flags can be used.\nsidedef_texture: TEXTURE_ flags can be used.\ntexturename: the texture that will be set on the line. Use '-' to remove a texture.";
+	SetMarineSprite = "void SetMarineSprite(int tid, str actorclass)\nChanges a Scripted Marine's sprite to match the sprite\nused in the specified actor's spawn state.";
+	SetMarineWeapon = "void SetMarineWeapon(int tid, int weapon)\nSets a Scripted Marine's weapon on the fly.\nweapon: one of MARINEWEAPON_ flags";
+	SetMugShotState = "void SetMugShotState(str state)\nSets the state of the mug shot in SBARINFO status bars.\nThe state you set will only be interrupted by damage or if the player\npicks up a weapon, provided the mugshot supports it.";
+	SetMusic = "void SetMusic(str song[, int order[, int unused]])";
+	SetPlayerLivesLeft = "int SetPlayerLivesLeft(int player, int amount)";
 	SetPlayerProperty = "SetPlayerProperty(who, set, which)";
-	SetResultValue = "SetResultValue(value)";
-	SetSkyScrollSpeed = "SetSkyScrollSpeed(skynumber, speed)";
-	SetThingSpecial = "SetThingSpecial(tid, special, arg1, arg2, arg3, arg4, arg5)";
-	SetWeapon = "SetWeapon(weaponname)";
-	sin = "sin(angle)";
-	SinglePlayer = "SinglePlayer()";
-	SoundSequence = "SoundSequence(name)";
-	SoundSequenceOnActor = "SoundSequenceOnActor(tid, sndseq)";
-	SoundSequenceOnSector = "SoundSequenceOnSector(tag, sndseq, location)";
-	SoundSequenceOnPolyObj = "SoundSequenceOnPolyObj(tag, sndseq)";
-	Spawn = "Spawn(type, x, y, z, thingid, angle)";
-	SpawnProjectile = "SpawnProjectile(tid, type, angle, speed, vspeed, gravity, newtid)";
-	SpawnSpot = "SpawnSpot(type, spotid, thingid, angle)";
-	SpawnSpotFacing = "SpawnSpotFacing(type, spotid, thingid)";
+	SetPointer = "bool SetPointer(int assign_slot, int tid[, int pointer_selector[, int flags]])\nSet the value of one of the caller's stored pointers.";
+	SetResultValue = "void SetResultValue(int value)";
+	SetSkyScrollSpeed = "void SetSkyScrollSpeed(int sky, fixed skyspeed)\nChanges the scrolling speed of a sky.\nThis is useful in conjunction with ChangeSky.\nsky: either 1 or 2.\nskyspeed: the desired scrolling speed.";
+	SetThingSpecial = "void SetThingSpecial(int tid, int special[, int arg0[, int arg1[, int arg2[, int arg3[, int arg4]]]]])\nSets the special for any things with the same TID.\nThis is similar to Thing_SetSpecial, except it can only be used from ACS,\nand it can set all of a thing's special arguments.\nIf tid is 0, then the activator is used.";
+	SetUserArray = "void SetUserArray(int tid, str name, int pos, int value)\nSets one of the affected actor's user array-bound variables.";
+	SetUserCVar = "bool SetUserCVar(int playernumber, str cvar, int value)\nSets the console variable of a particular player.\nOnly mod-defined console variables through CVARINFO can be changed by using this function.\nReturns FALSE if cvar is invalid, it is not writable, or the player doesn't exist.";
+	SetUserCVarString = "bool SetUserCVarString(int playernumber, str cvar, str value)\nSets the console variable of a particular player.\nOnly mod-defined console variables through CVARINFO can be changed by using this function.\nReturns FALSE if cvar is invalid, it is not writable, or the player doesn't exist.";
+	SetUserVariable = "void SetUserVariable(int tid, str name, int value)\nSets one of the affected actor's user variables.";
+	SetWeapon = "bool SetWeapon(str weaponname)\nSets the player's current weapon to weaponname.\nReturns TRUE if the weapon was set successfully, and FALSE if not.";
+	Sin = "fixed Sin(int angle)";
+	SortDBEntries = "int SortDBEntries(str namespace, int limit, int offset, bool order)";
+	SoundSequence = "void SoundSequence(str sndseq)\nPlays a sound sequence defined in SNDSEQ lump.";
+	SoundSequenceOnActor = "void SoundSequenceOnActor(int tid, str sndseq)\nPlays a sound sequence defined in SNDSEQ lump.";
+	SoundSequenceOnPolyObj = "void SoundSequenceOnPolyobj(int polynum, str sndseq)\nPlays a sound sequence defined in SNDSEQ lump.";
+	SoundSequenceOnSector = "void SoundSequenceOnSector(int tag, str sndseq, int location)\nPlays a sound sequence defined in SNDSEQ lump.";
+	SoundVolume = "void SoundVolume(int tid, int channel, fixed volume)\nChanges the volume of the currently playing sound by the actor(s) with the specified tid.\nIf tid is 0, the sound volume change is done to the sound being played by the activator of the script.";
+	Spawn = "int Spawn(str classname, fixed x, fixed y, fixed z[, int tid[, int angle]])\nSpawns an actor at the given X, Y and Z coordinates.\nOptionally a TID and a byte angle can be specified.";
+	SpawnForced = "int SpawnForced(str classname, fixed x, fixed y, fixed z[, int tid[, int angle]])\nForces the actor to spawn, even in conditions where the spawning would normally fail.\nThe return value is the number of things spawned.";
+	SpawnDecal = "int SpawnDecal(int tid, str decalname, int flags[, fixed angle = 0.0[, fixed zoffset = 0.0[, fixed distance = 64.0]]])\nCreates a decal on a wall by tracing a line from the actor with the\nspecified tid until hitting said wall, on which the decal is then created.\nIf tid is 0, the tracing is done from the activator of the script.\ndecalname: The name of the decal to create, as defined in DECALDEF.\nflags: use SDF_ flags\nThe return value of the function is the number of decals spawned.";
+	SpawnProjectile = "void SpawnProjectile(int tid, str type, int angle, int speed, int vspeed, int gravity, int newtid)";
+	SpawnSpot = "int SpawnSpot(str classname, int spottid[, int tid[, int angle]])\nRequires a MapSpot at the location where you want the Actor to spawn.\nThe return value is the number of things spawned.";
+	SpawnSpotFacing = "int SpawnSpotFacing(str classname, int spottid[, int tid])\nRequires a MapSpot at the location where you want the Actor to spawn.\nThe thing will assume the angle of the mapspot it is spawned to.\nThe return value is the number of things spawned.";
+	SpawnSpotFacingForced = "int SpawnSpotFacingForced(str classname, int spottid[, int tid])\nRequires a MapSpot at the location where you want the Actor to spawn.\nForces the actor to spawn, even in conditions where the spawning would normally fail.\nThe thing will assume the angle of the mapspot it is spawned to.\nThe return value is the number of things spawned.";
+	SpawnSpotForced = "int SpawnSpotForced(str classname, int spottid[, int tid[, int angle]])\nRequires a MapSpot at the location where you want the Actor to spawn.\nForces the actor to spawn, even in conditions where the spawning would normally fail.\nThe return value is the number of things spawned.";
 	Special = "Special";
+	Sqrt = "int Sqrt(int number)";
 	Stairs_BuildDown = "Stairs_BuildDown(tag, speed, height, delay, reset)";
 	Stairs_BuildDownSync = "Stairs_BuildDownSync(tag, speed, height, reset)";
 	Stairs_BuildUp = "Stairs_BuildUp(tag, speed, height, delay, reset)";
 	Stairs_BuildUpDoom = "Stairs_BuildUpDoom(tag, speed, height, delay, reset)";
 	Stairs_BuildUpSync = "Stairs_BuildUpSync(tag, speed, height, reset)";
-	StartConversation = "StartConversation(tid, facing)";
-	Str = "Str expression";
-	strlen = "strlen(string)";
-	Suspend = "Suspend";
-	Switch = "Switch(expression)";
-	TagWait = "TagWait(tag)";
-	TakeActorInventory = "TakeActorInventory(tid, type, amount)";
-	TakeInventory = "TakeInventory(type, amount)";
-	Team_GivePoints = "Team_GivePoints(team, amount, announce)";
-	Team_Score = "Team_Score(amount, nogrin)";
+	StartConversation = "StartConversation(talker_tid, facetalker)";
+	StopSound = "void StopSound(int tid, int channel)\nStops the sound currently playing on the specified channel for the actor with matching tid";
+	StrCmp = "int StrCmp(str string1, str string2[, int maxcomparenum])\nCompares the two strings passed in arguments string1 and string2 character by character.\nIf maxcomparenum is specified, it only compares up to maxcomparenum characters of each string.";
+	StrCpy = "bool StrCpy(a:destination, str source[, int source_index])\nCopy a source string to a destination array as a series of characters.\nOptionally, the copy can start from a given index in the source string.\nReturns TRUE if the entire string (or substring) was successfully copied to the array;\nFALSE if the copy ran out of room or if a negative source_index was given.";
+	Strftime = "str Strftime(int timestamp, str format[, bool utc])";
+	StrIcmp = "int StrCmp(str string1, str string2[, int maxcomparenum])\nStrIcmp is case-insensitive version of StrCmp";
+	StrLeft = "str StrLeft(str string, int length)\nCreates a new string containing the length first characters of string.\nIf string does not exist, an empty string is returned.\nIf string is shorter than length characters, the entire string is returned."; 
+	StrLen = "int StrLen(str string)";
+	StrMid = "str StrMid(str string, int start, int length)\nCreates a new string containing the length characters of string starting from the one at position start.\nIf string does not exist or is shorter than start characters, an empty string is returned. \nIf string is shorter than start + length characters, the entire substring beginning at start is returned."; 
+	StrParam = "int StrParam(type:expression)\nStrParam will create a new string formatted based upon the same method for Print or Log.\nThe return value is the string table index of the new string.";
+	StrRight = "str StrRight(str string, int length)\nCreates a new string containing the length last characters of string.\nIf string does not exist, an empty string is returned.\nIf string is shorter than length characters, the entire string is returned."; 
+	SystemTime = "int SystemTime()";
+	TagWait = "void TagWait(int tag)";
+	TakeActorInventory = "void TakeActorInventory(int tid, str inventory_item, int amount)\nThis function will take the amount of items from the specified actor.\nTakeActorInventory can remove items that are flagged as undroppable.";
+	TakeInventory = "void TakeInventory(str inventory_item, int amount)\nThis function will take the number of items specified from the activator.\nTakeInventory can remove items that are flagged as undroppable.";
 	Teleport = "Teleport(tid, tag, nosourcefog)";
 	Teleport_EndGame = "Teleport_EndGame()";
-	Teleport_Line = "Teleport_Line(thisid, destid, flip)";
-	Teleport_NewMap = "Teleport_NewMap(map, pos)";
-	Teleport_NoFog = "Teleport_NoFog(tid)";
-	Teleport_NoStop = "Teleport_NoStop(tid, sector, nofog)";
+	Teleport_NewMap = "Teleport_NewMap(map, pos, face)";
+	Teleport_NoFog = "Teleport_NoFog(tid, useangle, tag)";
+	Teleport_NoStop = "Teleport_NoStop(tid, tag, nofog)";
 	Teleport_ZombieChanger = "Teleport_ZombieChanger(tid, tag)";
 	TeleportGroup = "TeleportGroup(groupid, sourceid, destinationid, movesource, fog)";
 	TeleportInSector = "TeleportInSector(tag, sourceid, destinationid, fog, groupid)";
 	TeleportOther = "TeleportOther(tid, destinationid, fog)";
-	Terminate = "Terminate";
 	Thing_Activate = "Thing_Activate(tid)";
 	Thing_ChangeTID = "Thing_ChangeTID(oldtid, newtid)";
 	Thing_Damage = "Thing_Damage(tid, amount, mod)";
-	Thing_Damage2 = "Thing_Damage2(tid, amount, type)";
+	Thing_Damage2 = "int Thing_Damage2(int tid, int amount, str type)\nDamages the specified actor.\nDamage type is specified by name.";
 	Thing_Deactivate = "Thing_Deactivate(tid)";
-	Thing_Destroy = "Thing_Destroy(tid, extreme)";
+	Thing_Destroy = "Thing_Destroy(tid, extreme, tag)";
 	Thing_Hate = "Thing_Hate(hater, hatee, type)";
 	Thing_Move = "Thing_Move(tid, destid, nofog)";
 	Thing_Projectile = "Thing_Projectile(tid, type, angle, speed, vspeed)";
-	Thing_Projectile2 = "Thing_Projectile2(tid, type, angle, speed, vspeed, gravity, newtid)";
+	Thing_Projectile2 = "void Thing_Projectile2(int tid, int type, int angle, int speed, int vspeed, int gravity, int newtid)";
 	Thing_ProjectileAimed = "Thing_ProjectileAimed(tid, type, speed, target, newtid)";
 	Thing_ProjectileGravity = "Thing_ProjectileGravity(tid, type, angle, speed, vspeed)";
 	Thing_ProjectileIntercept = "Thing_ProjectileIntercept(tid, type, speed, target, newtid)";
 	Thing_Raise = "Thing_Raise(tid)";
 	Thing_Remove = "Thing_Remove(tid)";
-	Thing_SetFrame = "Thing_SetFrame(tid, frame)";
-	Thing_SetGoal = "Thing_SetGoal(tid, goal, delay, ignore)";
+	Thing_SetConversation = "Thing_SetConversation(tid, conversationid)";
+	Thing_SetGoal = "Thing_SetGoal(tid, goal, delay, dontchasetarget)";
 	Thing_SetSpecial = "Thing_SetSpecial(tid, special, arg1, arg2, arg3)";
 	Thing_SetTranslation = "Thing_SetTranslation(tid, translation)";
 	Thing_Spawn = "Thing_Spawn(tid, type, angle, newtid)";
 	Thing_SpawnFacing = "Thing_SpawnFacing(tid, type, nofog, newtid)";
 	Thing_SpawnNoFog = "Thing_SpawnNoFog(tid, type, angle, newtid)";
 	Thing_Stop = "Thing_Stop(tid)";
-	ThingCount = "ThingCount(type, id)";
-	ThingCountName = "ThingCountName(type, tid)";
-	ThingCountNameSector = "ThingCountNameSector(class, tid, tag)";
-	ThingCountSector = "ThingCountSector(type, tid, tag)";
-	ThingSound = "ThingSound(thingid, name, volume)";
-	ThrustThing = "ThrustThing(angle, force, limit, tid)";
-	ThrustThingZ = "ThrustThingZ(tid, speed, upordown, addorset)";
-	Timer = "Timer()";
-	Transfer_Heights = "Transfer_Heights(tag, flags)";
-	Transfer_WallLight = "Transfer_WallLight(lineid, flags)";
-	Transfer_CeilingLight = "Transfer_CeilingLight(tag)";
-	Transfer_FloorLight = "Transfer_FloorLight(tag)";
-	TranslucentLine = "TranslucentLine(lineid, amount, additive)";
-	Unloading = "Script expression Unloading";
-	UnmorphActor = "UnmorphActor(tid, force)";
-	Until = "Until(expression)";
-	UsePuzzleItem = "UsePuzzleItem(item, script)";
-	UseActorInventory = "UseActorInventory(tid, item)";
-	VectorAngle = "VectorAngle(x, y)";
-	Void = "Void";
-	While = "While(expression)";
-	World = "World Int expression:identifier";
+	ThingCount = "int ThingCount(int type, int tid)";
+	ThingCountName = "int ThingCountName(str classname, int tid)";
+	ThingCountNameSector = "int ThingCountNameSector(str classname, int tid, int tag)";
+	ThingCountSector = "int ThingCountSector(int type, int tid, int tag)";
+	ThingSound = "void ThingSound(int tid, str sound, int volume)\nPlays a sound at a thing.\nThis is a point sound, so anyone far away will not hear it as loudly";
+	ThrustThing = "ThrustThing(angle, force, nolimit, tid)";
+	ThrustThingZ = "ThrustThingZ(tid, speed, up_or_down, add_or_set)";
+	Timer = "int Timer()";
+	TranslucentLine = "TranslucentLine(lineid, amount, additive, moreflags)";
+	UniqueTID = "int UniqueTID([int tid[, int limit]])";
+	UnMorphActor = "int UnMorphActor(int tid[, bool force])";
+	UseActorInventory = "int UseActorInventory(int tid, str classname)\nForces the actor(s) with the specified tid to use an item from their inventory, if they have one.\nReturns TRUE if the item was used successfully.";
+	UseInventory = "int UseInventory(str classname)\nForces the activator to use the specified inventory item, if he has it.\nReturns TRUE if the item was used successfully.";
+	UsePuzzleItem = "UsePuzzleItem(item, script, arg1, arg2, arg3)";
+	VectorAngle = "fixed VectorAngle(int x, int y)";
+	VectorLength = "int VectorLength(int x, int y)";
+	//WHITERETURN = "Script expression WhiteReturn";
+}
+
+properties
+{
+	bool;
+	break;
+	case;
+	CLIENTSIDE;
+	const;
+	continue;
+	DEATH;
+	default;
+	DISCONNECT;
+	do;
+	else;
+	ENTER;
+	EVENT;
+	for;
+	function;
+	global;
+	if;
+	int;
+	LIGHTNING;
+	NET;
+	OPEN;
+	PICKUP;
+	RESPAWN;
+	Restart;
+	return;
+	script;
+	str;
+	Suspend;
+	switch;
+	Terminate;
+	UNLOADING;
+	until;
+	void;
+	while;
+	world;
 }
 
 constants
 {
-	TRUE;
-	FALSE;
-	ON;
-	OFF;
-	YES;
-	NO;
-	CARRY;
-	SCROLL;
-	SCROLL_AND_CARRY;
-	ACTOR_NONE;
-	ACTOR_WORLD;
-	ACTOR_PLAYER;
-	ACTOR_BOT;
-	ACTOR_VOODOODOLL;
-	ACTOR_MONSTER;
+	AAPTR_DEFAULT;
+	AAPTR_FRIENDPLAYER;
+	AAPTR_MASTER;
+	AAPTR_NULL;
+	AAPTR_PLAYER_GETCONVERSATION;
+	AAPTR_PLAYER_GETTARGET;
+	AAPTR_PLAYER1;
+	AAPTR_PLAYER2;
+	AAPTR_PLAYER3;
+	AAPTR_PLAYER4;
+	AAPTR_PLAYER5;
+	AAPTR_PLAYER6;
+	AAPTR_PLAYER7;
+	AAPTR_PLAYER8;
+	AAPTR_TARGET;
+	AAPTR_TRACER;
 	ACTOR_ALIVE;
+	ACTOR_BOT;
 	ACTOR_DEAD;
-	ACTOR_MISSILE;
 	ACTOR_GENERIC;
+	ACTOR_MISSILE;
+	ACTOR_MONSTER;
+	ACTOR_NONE;
+	ACTOR_PLAYER;
+	ACTOR_VOODOODOLL;
+	ACTOR_WORLD;
+	APROP_Accuracy;
 	APROP_ActiveSound;
 	APROP_Alpha;
 	APROP_Ambush;
-	APROP_AttackSoun;
+	APROP_AttackSound;
+	APROP_AttackZOffset;
 	APROP_ChaseGoal;
 	APROP_Damage;
+	APROP_DamageFactor;
 	APROP_DeathSound;
+	APROP_Dormant;
 	APROP_Dropped;
 	APROP_Friendly;
 	APROP_Frightened;
 	APROP_Gravity;
 	APROP_Health;
+	APROP_Height;
 	APROP_Invulnerable;
 	APROP_JumpZ;
+	APROP_Mass;
+	APROP_MasterTID;
+	APROP_MeleeRange;
+	APROP_Nametag;
 	APROP_Notarget;
+	APROP_Notrigger;
 	APROP_PainSound;
+	APROP_Radius;
+	APROP_Reactiontime;
 	APROP_RenderStyle;
+	APROP_ScaleX;
+	APROP_ScaleY;
+	APROP_Score;
 	APROP_SeeSound;
 	APROP_SpawnHealth;
+	APROP_Species;
 	APROP_Speed;
+	APROP_Stamina;
+	APROP_StencilColor;
+	APROP_TargetTID;
+	APROP_TracerTID;
+	APROP_ViewHeight;
+	APROP_Waterlevel;
+	ATTN_IDLE;
+	ATTN_NONE;
+	ATTN_NORM;
+	ATTN_STATIC;
 	BLOCK_CREATURES;
 	BLOCK_EVERYTHING;
 	BLOCK_NOTHING;
 	BLOCK_PLAYERS;
+	BLOCK_RAILING;
+	BLOCKF_CREATURES;
+	BLOCKF_EVERYTHING;
+	BLOCKF_FLOATERS;
+	BLOCKF_HITSCAN;
 	BLOCKF_MONSTERS;
 	BLOCKF_PLAYERS;
-	BLOCKF_FLOATERS;
 	BLOCKF_PROJECTILES;
-	BLOCKF_EVERYTHING;
 	BLOCKF_RAILING;
+	BLOCKF_SIGHT;
 	BLOCKF_USE;
 	BT_ALTATTACK;
 	BT_ATTACK;
@@ -506,17 +640,36 @@ constants
 	BT_USER3;
 	BT_USER4;
 	BT_ZOOM;
+	CARRY;
+	CHAN_AUTO;
+	CHAN_BODY;
+	CHAN_ITEM;
+	CHAN_LISTENERZ;
+	CHAN_MAYBE_LOCAL;
+	CHAN_NOPAUSE;
+	CHAN_UI;
+	CHAN_VOICE;
+	CHAN_WEAPON;
+	CHANGELEVEL_CHANGESKILL;
+	CHANGELEVEL_KEEPFACING;
+	CHANGELEVEL_NOINTERMISSION;
+	CHANGELEVEL_NOMONSTERS;
+	CHANGELEVEL_PRERAISEWEAPON;
+	CHANGELEVEL_RESETHEALTH;
+	CHANGELEVEL_RESETINVENTORY;
 	CLASS_CLERIC;
 	CLASS_FIGHTER;
 	CLASS_MAGE;
-	CR_BLACK; 
+	CR_BLACK;
 	CR_BLUE;
 	CR_BRICK;
 	CR_BROWN;
 	CR_CREAM;
+	CR_CYAN;
 	CR_DARKBROWN;
-	CR_DARKGRAY;  
+	CR_DARKGRAY;
 	CR_DARKGREEN;
+	CR_DARKGREY;
 	CR_DARKRED;
 	CR_GOLD;
 	CR_GRAY;
@@ -531,33 +684,114 @@ constants
 	CR_UNTRANSLATED;
 	CR_WHITE;
 	CR_YELLOW;
+	CSF_NOBLOCKALL;
+	CSF_NOFAKEFLOORS;
 	DAMAGE_IN_AIR;
 	DAMAGE_NONPLAYERS;
 	DAMAGE_PLAYERS;
 	DAMAGE_SUBCLASSES_PROTECT;
+	DB_ORDER_ASC;
+	DB_ORDER_DESC;
+	EV_Char;
+	EV_KeyDown;
+	EV_KeyRepeat;
+	EV_KeyUp;
+	EV_LButtonDblClick;
+	EV_LButtonDown;
+	EV_LButtonUp;
+	EV_MButtonDblClick;
+	EV_MButtonDown;
+	EV_MButtonUp;
+	EV_MouseMove;
+	EV_RButtonDblClick;
+	EV_RButtonDown;
+	EV_RButtonUp;
+	EV_WheelDown;
+	EV_WheelUp;
+	FALSE;
+	FHF_NORANDOMPUFFZ;
+	FOGP_DENSITY;
+	FOGP_OUTSIDEDENSITY;
+	FOGP_SKYFOG;
+	GAMESTATE_COUNTDOWN;
+	GAMESTATE_INPROGRESS;
+	GAMESTATE_INRESULTSEQUENCE;
+	GAMESTATE_UNSPECIFIED;
+	GAMESTATE_WAITFORPLAYERS;
 	GAME_NET_COOPERATIVE;
 	GAME_NET_DEATHMATCH;
 	GAME_NET_TEAMGAME;
 	GAME_SINGLE_PLAYER;
+	GAME_TITLE_MAP;
+	GK_ALERT;
+	GK_BACKSPACE;
+	GK_CESCAPE;
+	GK_DEL;
+	GK_DOWN;
+	GK_END;
+	GK_ESCAPE;
+	GK_F1;
+	GK_F10;
+	GK_F11;
+	GK_F12;
+	GK_F2;
+	GK_F3;
+	GK_F4;
+	GK_F5;
+	GK_F6;
+	GK_F7;
+	GK_F8;
+	GK_F9;
+	GK_FORMFEED;
+	GK_FREE1;
+	GK_FREE2;
+	GK_FREE3;
+	GK_HOME;
+	GK_LEFT;
+	GK_LINEFEED;
+	GK_PGDN;
+	GK_PGUP;
+	GK_RETURN;
+	GK_RIGHT;
+	GK_TAB;
+	GK_UP;
+	GK_VTAB;
+	GKM_ALT;
+	GKM_CTRL;
+	GKM_LBUTTON;
+	GKM_MBUTTON;
+	GKM_RBUTTON;
+	GKM_SHIFT;
+	HUDMSG_ADDBLEND;
+	HUDMSG_ALPHA;
 	HUDMSG_COLORSTRING;
 	HUDMSG_FADEINOUT;
 	HUDMSG_FADEOUT;
+	HUDMSG_LAYER_OVERHUD;
+	HUDMSG_LAYER_OVERMAP;
+	HUDMSG_LAYER_UNDERHUD;
 	HUDMSG_LOG;
+	HUDMSG_NOTWITH3DVIEW;
+	HUDMSG_NOTWITHFULLMAP;
+	HUDMSG_NOTWITHOVERLAYMAP;
+	HUDMSG_NOWRAP;
 	HUDMSG_PLAIN;
 	HUDMSG_TYPEON;
-	IS_COUNTDOWN;
-	IS_FIRSTCOUNTDOWN;
-	IS_INPROGRESS;
-	IS_WAITINGFORPLAYERS;
-	IS_WAVECOMPLETE;
 	INPUT_BUTTONS;
 	INPUT_FORWARDMOVE;
 	INPUT_OLDBUTTONS;
 	INPUT_PITCH;
-	INPUT_ROW;
+	INPUT_ROLL;
 	INPUT_SIDEMOVE;
 	INPUT_UPMOVE;
 	INPUT_YAW;
+	IS_BOSSFIGHT;
+	IS_COUNTDOWN;
+	IS_FIRSTCOUNTDOWN;
+	IS_INPROGRESS;
+	IS_MISSIONFAILED;
+	IS_WAITINGFORPLAYERS;
+	IS_WAVECOMPLETE;
 	LEVELINFO_CLUSTERNUM;
 	LEVELINFO_FOUND_ITEMS;
 	LEVELINFO_FOUND_SECRETS;
@@ -570,34 +804,35 @@ constants
 	LEVELINFO_TOTAL_SECRETS;
 	LINE_BACK;
 	LINE_FRONT;
-	MARINEWEAPON_BerserkFis;
+	MARINEWEAPON_BerserkFist;
 	MARINEWEAPON_BFG;
 	MARINEWEAPON_Chaingun;
 	MARINEWEAPON_Chainsaw;
 	MARINEWEAPON_Dummy;
 	MARINEWEAPON_Fist;
 	MARINEWEAPON_Pistol;
-	MARINEWEAPON_PlasmaRifl;
+	MARINEWEAPON_PlasmaRifle;
 	MARINEWEAPON_Railgun;
-	MARINEWEAPON_RocketLaunche;
+	MARINEWEAPON_RocketLauncher;
 	MARINEWEAPON_Shotgun;
-	MARINEWEAPON_SuperShotgu;
+	MARINEWEAPON_SuperShotgun;
 	MOD_BARREL;
 	MOD_BFG_BOOM;
 	MOD_BFG_SPLASH;
-	MOD_CHAINGUN;
 	MOD_CHAINSAW;
 	MOD_CRUSH;
+	MOD_DISINTEGRATE;
+	MOD_ELECTRIC;
 	MOD_EXIT;
 	MOD_FALLING;
-	MOD_FIST;
 	MOD_HIT;
+	MOD_ICE;
 	MOD_LAVA;
-	MOD_PISTOL;
 	MOD_PLASMARIFLE;
+	MOD_POISON;
 	MOD_R_SPLASH;
+	MOD_RAILGUN;
 	MOD_ROCKET;
-	MOD_SHOTGUN;
 	MOD_SLIME;
 	MOD_SPLASH;
 	MOD_SSHOTGUN;
@@ -609,7 +844,7 @@ constants
 	MODINPUT_FORWARDMOVE;
 	MODINPUT_OLDBUTTONS;
 	MODINPUT_PITCH;
-	MODINPUT_ROW;
+	MODINPUT_ROLL;
 	MODINPUT_SIDEMOVE;
 	MODINPUT_UPMOVE;
 	MODINPUT_YAW;
@@ -617,25 +852,72 @@ constants
 	MOVIE_Played;
 	MOVIE_Played_Aborted;
 	MOVIE_Played_NoVideo;
+	MRF_ADDSTAMINA;
+	MRF_FAILNOLAUGH;
+	MRF_FAILNOTELEFRAG;
+	MRF_FULLHEALTH;
+	MRF_LOSEACTUALWEAPON;
+	MRF_NEWTIDBEHAVIOUR;
+	MRF_OLDEFFECTS;
+	MRF_UNDOBYCHAOSDEVICE;
+	MRF_UNDOBYDEATH;
+	MRF_UNDOBYDEATHFORCED;
+	MRF_UNDOBYDEATHSAVES;
+	MRF_UNDOBYTOMEOFPOWER;
+	MRF_WHENINVULNERABLE;
+	NO;
+	NO_CHANGE;
 	NO_TEAM;
 	NOT_BOTTOM;
 	NOT_CEILING;
 	NOT_FLOOR;
 	NOT_MIDDLE;
 	NOT_TOP;
+	OFF;
+	ON;
 	PLAYERINFO_AIMDIST;
 	PLAYERINFO_COLOR;
+	PLAYERINFO_DESIREDFOV;
+	PLAYERINFO_FOV;
 	PLAYERINFO_GENDER;
 	PLAYERINFO_MOVEBOB;
 	PLAYERINFO_NEVERSWITCH;
 	PLAYERINFO_PLAYERCLASS;
 	PLAYERINFO_STILLBOB;
 	PLAYERINFO_TEAM;
+	PRINTNAME_LEVEL;
+	PRINTNAME_LEVELNAME;
+	PRINTNAME_SKILL;
+	PROP_ALLMAP;
+	PROP_BUDDHA;
+	PROP_FLIGHT;
 	PROP_FLY;
 	PROP_FROZEN;
+	PROP_INFRARED;
 	PROP_INSTANTWEAPONSWITCH;
+	PROP_INVISIBILITY;
+	PROP_INVULNERABILITY;
 	PROP_NOTARGET;
+	PROP_RADIATIONSUIT;
+	PROP_SPEED;
+	PROP_STRENGTH;
 	PROP_TOTALLYFROZEN;
+	PROP_WEAPONLEVEL2;
+	PTROP_NOSAFEGUARDS;
+	PTROP_UNSAFEMASTER;
+	PTROP_UNSAFETARGET;
+	SCROLL;
+	SCROLL_AND_CARRY;
+	SDF_ABSANGLE;
+	SDF_PERMANENT;
+	SECF_FLOORDROP;
+	SECF_NOFALLINGDAMAGE;
+	SECF_NORESPAWN;
+	SECF_SILENT;
+	SECSEQ_CEILING;
+	SECSEQ_FLOOR;
+	SECSEQ_FULLHEIGHT;
+	SECSEQ_INTERIOR;
 	SIDE_BACK;
 	SIDE_FRONT;
 	SKILL_EASY;
@@ -643,13 +925,40 @@ constants
 	SKILL_NORMAL;
 	SKILL_VERY_EASY;
 	SKILL_VERY_HARD;
+	SOUND_Active;
+	SOUND_Attack;
+	SOUND_Bounce;
+	SOUND_CrushPain;
+	SOUND_Death;
+	SOUND_Howl;
+	SOUND_Pain;
+	SOUND_See;
+	SOUND_Use;
+	SOUND_WallBounce;
+	SPAC_AnyCross;
+	SPAC_Cross;
+	SPAC_Impact;
+	SPAC_MCross;
+	SPAC_MPush;
+	SPAC_MUse;
+	SPAC_None;
+	SPAC_PCross;
+	SPAC_Push;
+	SPAC_Use;
+	SPAC_UseBack;
+	SPAC_UseThrough;
 	STYLE_Add;
 	STYLE_Fuzzy;
 	STYLE_None;
 	STYLE_Normal;
 	STYLE_OptFuzzy;
+	STYLE_Shaded;
+	STYLE_Shadow;
 	STYLE_SoulTrans;
+	STYLE_Stencil;
+	STYLE_Subtract;
 	STYLE_Translucent;
+	STYLE_TranslucentStencil;
 	T_ABADDON;
 	T_ABADDONSHOT;
 	T_AMMOBOX;
@@ -657,14 +966,12 @@ constants
 	T_ANTIGRAVBELT;
 	T_ARACHNOTRON;
 	T_ARACHNOTRONPLASMA;
-	T_ARCHSTATUE;
 	T_ARMORBONUS;
 	T_ARROW;
 	T_AXEKEY;
 	T_BACKPACK;
 	T_BARON;
 	T_BARONBALL;
-	T_BARONSTATUE;
 	T_BARREL;
 	T_BATTERY;
 	T_BEAST;
@@ -689,7 +996,6 @@ constants
 	T_BLUEKEYCARD;
 	T_BLUESKULLKEY;
 	T_BLUETELEGLITTER;
-	T_BOBBINGSKULLINFLAMES;
 	T_BOUNCYMACEBALL;
 	T_BRAINS;
 	T_BRIDGE;
@@ -717,17 +1023,14 @@ constants
 	T_CROSSBOWMINIBLAST;
 	T_CROSSBOWPOWERBLAST;
 	T_CYBERDEMON;
-	T_CYBERDEMONSTATUE;
 	T_DARKIMP;
 	T_DARKIMPFIREBALL;
 	T_DART;
-	T_DEADCYBERDEMON;
 	T_DEATHBALL;
 	T_DEMON;
 	T_DEMON_MASH;
 	T_DEMON1;
 	T_DEMON2_MASH;
-	T_DEMONSTATUE;
 	T_DIRT1;
 	T_DIRT2;
 	T_DIRT3;
@@ -761,13 +1064,10 @@ constants
 	T_FLESH_DRIP1;
 	T_FLESH_DRIP2;
 	T_GAUNTLETS;
-	T_GOTHICPILLAR;
 	T_GREENARMOR;
 	T_GREENKEY;
 	T_GRENADE;
 	T_GRENADELAUNCHER;
-	T_GREYPILLARHEART;
-	T_GREYSTALAGMITE;
 	T_GUTS;
 	T_HASTE;
 	T_HEALTHBONUS;
@@ -780,20 +1080,13 @@ constants
 	T_HEFTYSKULLRODAMMO;
 	T_HEFTYWANDAMMO;
 	T_HELLKNIGHT;
-	T_HELLPILLAR;
 	T_HIGHJUMP;
-	T_HISSY;
 	T_HORNKEY;
 	T_ICEGOLEM;
 	T_ICESHARD;
 	T_IMP;
-	T_IMPALINGSPIKE;
-	T_IMPALINGSPIKECGUN;
-	T_IMPALINGSPIKEZOMB;
 	T_IMPFIREBALL;
-	T_IMPHEAD;
 	T_IMPLEADER;
-	T_IMPSTATUE;
 	T_INFRAGOGGLES;
 	T_INFRATRACKER;
 	T_INVISIBILITY;
@@ -814,6 +1107,7 @@ constants
 	T_ITEMHEALTHPOTION;
 	T_ITEMINVISIBILITY;
 	T_ITEMINVULNERABILITY;
+	T_ITEMPORK;
 	T_ITEMREPULSION;
 	T_ITEMSUMMON;
 	T_ITEMTELEPORT;
@@ -825,7 +1119,6 @@ constants
 	T_KNIGHTAXE;
 	T_KNIGHTBLOODAXE;
 	T_KNIGHTGHOST;
-	T_LABORTORYPILLAR;
 	T_LIGHTAMP;
 	T_LOSTSOUL;
 	T_MACE;
@@ -839,14 +1132,12 @@ constants
 	T_MANA3;
 	T_MANCUBUS;
 	T_MANCUBUSSHOT;
-	T_MASARMORBONUS;
-	T_MASSMOUTHSTATUE;
+	T_MAXARMORBONUS;
 	T_MAXHEALTHBONUS;
 	T_MEDKIT;
 	T_MEGASPHERE;
 	T_MESHARMOR;
 	T_METALKEY;
-	T_MILITARYPILLAR;
 	T_MINIGUN;
 	T_MORPHBLAST;
 	T_MUMMY;
@@ -893,7 +1184,6 @@ constants
 	T_REGENERATION;
 	T_RESISTANCE;
 	T_REVENANT;
-	T_REVENANTHAND;
 	T_RIPPER;
 	T_RIPPERBALL;
 	T_ROCK1;
@@ -904,8 +1194,6 @@ constants
 	T_ROCKETBOX;
 	T_ROCKETLAUNCHER;
 	T_RUSTYKEY;
-	T_SAUSAGEHEAD;
-	T_SAUSAGESPITTER;
 	T_SCRIPTEDMARINE;
 	T_SERPENTFIREBALL;
 	T_SERPENTKEY;
@@ -913,7 +1201,6 @@ constants
 	T_SHELLS;
 	T_SHIELD1;
 	T_SHIELD2;
-	T_SHORTGREYPILLAR;
 	T_SHOTGUN;
 	T_SHOTGUY;
 	T_SILVERKEY;
@@ -941,7 +1228,6 @@ constants
 	T_STAINEDGLASS7;
 	T_STAINEDGLASS8;
 	T_STAINEDGLASS9;
-	T_STARBASEPILLAR;
 	T_STEALTHARACHNOTRON;
 	T_STEALTHBARON;
 	T_STEALTHCACODEMON;
@@ -957,8 +1243,6 @@ constants
 	T_STIMPACK;
 	T_STRENGTH;
 	T_SUPERSHOTGUN;
-	T_TALLGOTHICPILLAR;
-	T_TALLGREYPILLAR;
 	T_TEMPLARGEFLAME;
 	T_TEMPSMALLFLAME;
 	T_THRUSTSPIKEDOWN;
@@ -993,7 +1277,38 @@ constants
 	T_ZOMBIE;
 	TEAM_BLUE;
 	TEAM_RED;
+	TEXFLAG_ADDOFFSET;
+	TEXFLAG_BOTTOM;
+	TEXFLAG_MIDDLE;
+	TEXFLAG_TOP;
 	TEXTURE_BOTTOM;
 	TEXTURE_MIDDLE;
 	TEXTURE_TOP;
-}
+	TM_SECOND;
+	TM_MINUTE;
+	TM_HOUR;
+	TM_DAY;
+	TM_MONTH;
+	TM_YEAR;
+	TM_WEEKDAY;
+	TPROP_Assister;
+	TPROP_Carrier;
+	TPROP_DeathCount;
+	TPROP_FragCount;
+	TPROP_IsValid;
+	TPROP_LoserTheme;
+	TPROP_Name;
+	TPROP_NumLivePlayers;
+	TPROP_NumPlayers;
+	TPROP_PlayerStartNum;
+	TPROP_PointCount;
+	TPROP_ReturnTics;
+	TPROP_Score;
+	TPROP_Spread;
+	TPROP_TeamItem;
+	TPROP_TextColor;
+	TPROP_WinCount;
+	TPROP_WinnerTheme;
+	TRUE;
+	YES;
+}
\ No newline at end of file
diff --git a/Source/Core/GZBuilder/Data/MapInfo.cs b/Source/Core/GZBuilder/Data/MapInfo.cs
index 0b404c10..a4cc03e4 100644
--- a/Source/Core/GZBuilder/Data/MapInfo.cs
+++ b/Source/Core/GZBuilder/Data/MapInfo.cs
@@ -8,6 +8,21 @@ namespace CodeImp.DoomBuilder.GZBuilder.Data
 {
 	public sealed class MapInfo
 	{
+		#region ================== Enums
+
+		public enum GZDoomLightMode
+		{
+			STANDARD,
+			BRIGHT,
+			DOOM,
+			DARK,
+			LEGACY,
+			SOFTWARE,
+			UNDEFINED
+		}
+
+		#endregion
+
 		#region ================== Variables
 
 		private bool isdefined;
@@ -27,6 +42,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.Data
 
 		private bool evenlighting;
 		private bool smoothlighting;
+		private GZDoomLightMode lightmode;
 		private int vertwallshade;
 		private int horizwallshade;
 
@@ -51,6 +67,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.Data
 
 		public bool EvenLighting { get { return evenlighting; } internal set { evenlighting = value; isdefined = true; } }
 		public bool SmoothLighting { get { return smoothlighting; } internal set { smoothlighting = value; isdefined = true; } }
+		public GZDoomLightMode LightMode { get { return lightmode; } internal set { lightmode = value; isdefined = true; } }
 		public int VertWallShade { get { return vertwallshade; } internal set { vertwallshade = value; isdefined = true; } }
 		public int HorizWallShade { get { return horizwallshade; } internal set { horizwallshade = value; isdefined = true; } }
 
@@ -64,6 +81,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.Data
 			horizwallshade = -16;
 			fogdensity = 255;
 			outsidefogdensity = 255;
+			lightmode = GZDoomLightMode.UNDEFINED;
 		}
 
 		#endregion
diff --git a/Source/Core/Rendering/Renderer.cs b/Source/Core/Rendering/Renderer.cs
index 9a2f85bb..b2fd83c4 100644
--- a/Source/Core/Rendering/Renderer.cs
+++ b/Source/Core/Rendering/Renderer.cs
@@ -17,6 +17,7 @@
 #region ================== Namespaces
 
 using System;
+using CodeImp.DoomBuilder.GZBuilder.Data;
 using CodeImp.DoomBuilder.Map;
 using CodeImp.DoomBuilder.Geometry;
 
@@ -89,7 +90,16 @@ namespace CodeImp.DoomBuilder.Rendering
 		public int CalculateBrightness(int level)
 		{
 			// Simulate doom light levels
-			if((level < 192) && General.Map.Config.DoomLightLevels)
+			bool usedoomlightlevels = General.Map.Config.DoomLightLevels; //mxd
+
+			//mxd. Very limited LightMode support...
+			switch(General.Map.Data.MapInfo.LightMode)
+			{
+				case MapInfo.GZDoomLightMode.DOOM: usedoomlightlevels = true; break;
+				case MapInfo.GZDoomLightMode.STANDARD: usedoomlightlevels = false; break;
+			}
+
+			if(level < 192 && usedoomlightlevels)
 				level = (int)(192.0f - (192 - level) * 1.5f);
 			
 			byte blevel = (byte)General.Clamp(level, 0, 255);
diff --git a/Source/Core/ZDoom/MapinfoParser.cs b/Source/Core/ZDoom/MapinfoParser.cs
index 74a2a673..7d6ddb99 100644
--- a/Source/Core/ZDoom/MapinfoParser.cs
+++ b/Source/Core/ZDoom/MapinfoParser.cs
@@ -464,6 +464,10 @@ namespace CodeImp.DoomBuilder.ZDoom
 						mapinfo.SmoothLighting = true;
 						break;
 
+					case "lightmode":
+						if(!ParseLightMode()) return false;
+						break;
+
 					case "}": return true; // Block end
 
 					case "{": // Skip inner blocks
@@ -652,16 +656,11 @@ namespace CodeImp.DoomBuilder.ZDoom
 
 		private bool ParseFogDensity(string densitytype)
 		{
+			SkipWhitespace(true);
+			if(!NextTokenIs("=")) return false; // New format only
 			SkipWhitespace(true);
 			string token = ReadToken();
 
-			// New format
-			if(token == "=")
-			{
-				SkipWhitespace(true);
-				token = ReadToken();
-			}
-
 			int val;
 			if(!int.TryParse(token, NumberStyles.Integer, CultureInfo.InvariantCulture, out val))
 			{
@@ -670,7 +669,6 @@ namespace CodeImp.DoomBuilder.ZDoom
 				return false;
 			}
 
-			val = Math.Max(0, val);
 			if(densitytype == "fogdensity") mapinfo.FogDensity = val;
 			else mapinfo.OutsideFogDensity = val;
 
@@ -678,6 +676,28 @@ namespace CodeImp.DoomBuilder.ZDoom
 			return true;
 		}
 
+		private bool ParseLightMode()
+		{
+			SkipWhitespace(true);
+			if(!NextTokenIs("=")) return false; // New format only
+			SkipWhitespace(true);
+			string token = ReadToken();
+
+			int val;
+			if(!int.TryParse(token, NumberStyles.Integer, CultureInfo.InvariantCulture, out val))
+			{
+				// Not numeric!
+				ReportError("Expected LightMode value, but got \"" + token + "\"");
+				return false;
+			}
+
+			// Store
+			mapinfo.LightMode = (MapInfo.GZDoomLightMode)val;
+
+			// All done here
+			return true;
+		} 
+
 		#endregion
 
 	}