#!/bin/sh

# Collect -D & -m options as java arguments
command=java
while [ `echo $1 | egrep '^-D|^-m' | wc -l` != 0 ]; do
	command="$command $1"
	shift
done

# Determine installation location
if [ "$JMOL_HOME" = "" ]; then
	binDir=${0%/*}
	if [ "$binDir" = "$0" ]; then
		# Ran from local directory
		binDir=$PWD
	fi
	# Resolve symlinks.
	program="$0"
	while [ -L "$program" ]; do
		ls=`/bin/ls -ld "$program"`
		link=`/usr/bin/expr "$ls" : '.*-> \(.*\)$'`
		if /usr/bin/expr "$link" : '.*/.*' > /dev/null; then
		program="$link"
		else
		program="`/usr/bin/dirname $program`/$link"
		fi
	done
	binDir=`dirname $program`
fi

JMOL_HOME=${JMOL_HOME:-$binDir}
libDir=${JMOL_HOME}/jars

if [ ! -e ${JMOL_HOME}/Jmol.jar ]; then
	echo "Jmol could not find its installed files."
	exit
fi

$command -Djmol.home="$JMOL_HOME" -jar ${JMOL_HOME}/Jmol.jar "$@"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               ^%ܐߧ
[Rk|9aK,tí7%(7D9K7ǰ'r_YSWu_'bf!.ȿ?=V2+hr'S֛,q(5Ҵ`R+DĎStB7\FCE= D>#60D>Wm$Xfdz[(_vV$E'&YW$ ϤނGF1k"Mp*ų]/$T~h9zٞ7SZD..UH_w:SͶa*MU~DB!҆uɭB 'h@p4Rm(wbF*I"̠A͌> th.mR7gK$ϯJ)Lq VLcrq燀2T~>:rG֑ۜ"MT4?ѪI3@O^I z-NX[(׮(.\Ɛ%>QH7q>XDD1FGT06͖\.vTtMv)M0#0[N"iUawW|lclko-wi$-qaUp~'&9?}3,hiݕT[~Dw2;D}OSܶun2J.qVQxv^s%;:D1% מeI =.a]/G[f=V^sk*%wnW?qXFWp&;V?b!KVAOzKzU-OD_\wˠ4$Ekj}C8sX4ov~fPgMedE㌳$Xw`N~J!@~ 1*`O{qiCW}=OkGLuL+tmeM	s	PY#Oh{rƙeȿʑL*E'7abN+-4vF%۷L%ֺigmBFDHea=z}}6Hd#Ԣ/޿_2%}+"-]F#hV:`5X	SL`GؒGPRa|RӊۆX7+ ]) 6%g7yӌb-FwKrP֥	ghBJ{뾷{2i#wMVO~f\tB+!A5;bޡ]jY	E6UˀE˝w};E5\c,rĘ7Rxw_`0L	"Re(z-kQ:3x~ђv}${MoX{RE)*VEoX3kƦv
6ޫRM7RE%Qk/P>9matig>)du|˭
t:<Rl?
0Dcr5Aa1@ė^5#s7sE%gp:Ss'A_m'Γb3fS5E;	۩.-!Uh,vת-fJ8|.nt>wVc=a}' T5Z]	/6 ?Z[pRp~ʹe峲"xd*Λ5ݨOKVUs-2uas)λQ4E<aQ(pd)c(СGƦ:#v<>H_9R56-uTBȯtP`E|?HUwDGN;ABRۂ#7IC(Z{GIї};ׄR̳NcF)/iUCԧO#xB,0ImnwN.	%\Z%jKK/qx -%TL=䭍 F$Ŗy|#_;,k%c'Ye^,\z;+ĸbsJe#`<,,fo ;NOTTY-Z@@~iMd%2IН(Z!jK(`+äyCƵJ	si!޲&WL+^ɦtX%4v*.,5[v>-^X'&1Ѓ8CeS8ԩr7$I.y|of]e٥b̴b<WsfjǊ-߸o iefC~Evo׬Hh6̶u=Tl{僆r3aP:{9t?;M .{]0~;n\"7-ά*|+jOӍslY{զLs'BBG+v-Bcy=ٗs7%]X&y4h#h|0F]ːXs.|drt_;aVIu,?Ǯli뇃o}=s8vɼo6f0JL`0iޮ!2`7}U0wl/m_ ;nAǾ	"yGֈÆ;si[*|Pu"s_M60jL~hNibBYP$,<i,w j%;lC42[4C؛tǆ9IBJGY5l%@f4z%lY!TS(!W(b=E620bOjg]);n7*q>5YHvcp럡{6  /-yjI	Ӎ5lugr+\k}k,Dʹ&S^-.1|`Lzgyl=Qz1vXy^8vc{
<T=>iqdpu,%ehH7a\z5M9ՇZCG?F8{O?I[%ٛJ4vC_8r
&{0^j!o-aDHpQn5LFC⚴) `E&R6gx!zXY{8{̜݋2ha.~j(%NpRۡÕɯSt1(x۞>  vr6A6Qd׹J̽0gc76мn7F7/9FH|֍TީGV޸w*"F2$v,;EMylO9%yC^5;{y/w|@nVS\ӉqeЂeY_7"	E\0P5(er^2K@dKloh~_m-1^wQ9/Ӭc$,fFeQ|2ojjPzY$4{h6/qqyftGfLj:d"I$:U]I[G8S.l3.L:Z\n==19~SM؏KL,8fצa%!we;!MU
'іPL!J)9Qb_@R2]yX:Y
KKw{AqQXq2R	GƭșjDκso(u{8v+֕xXk }n,Ukxm8ċ#"Aye}r%ΞKiR]¦>,cU<AbvDeUVB߉E٢-bIDZo88}cX1&O(͡7HS5A#) C E]{uOn=v1xZң<u^&.#(C0>8~	69$ a
X
s<ҞcK/##R+Z]\\Ao@퍳[cp?@H1N ]=+}

$L.p.of!Xp&B]i~|wFx+{iZoaQNlS"ڴdDNFkx2$r);LGnI|Hsۺ wz.QxW=+|K+XoM7rҙ4`*b<"̐-}N;jq1!G-2j!̈́=4tvI]l$\Bܑq=V/	eRV3^Np-+x!/qI?.pNeXڋѸ*$2ssUq	L.o?0]k(u<+Є%h-
fX^)H"ڶ'4?UMZfb`'iz!S,ZuZfK<uSKܩ{☵ݦq"ѸBIGְmGDUZNStiDu?'4{^f`td_ :
O9sAt9y A2 Pq03g~ȹ+$Bi.*Fи!:t	SjHv8ii.:Ns!)JbZ˩ojmd8LVy]rDv8vIwXUח,4>I\mEzۛzG^Z[P3\۳꠫ *y0@P (}"
Bg0r?%p)\5
/F"3l<!IQ~p`E[ɭJr	[cV۲hcͦ»/_?~QUSaʙe&Qjht^=Uz	.f_K\>Z+, 2Z[M)`mގ̱;\xvyya%E?r>9ĺv?(zN-1оı`A<͍8U(Z=xz]4or;-8=j*{7PG%黳~(d7)xU1]QTf"#bC,,}rC'5IׯJh{Ho"e֩,WCVR
Ŷ6J|)eaFCt܄]O֥Fg9Ѝ&'ϼ"[۵z#8v"#buhv9`|P!{-fOg SdR)"t9(ڡܜ7.ȵfiAvaXKL#f`+Mb2[7s0˾3fﯘJ1:'28T%斨xsKК0$kީ5$"i
r"ԍ)ygXmicgT./CJK"8Tn.1%v<.سfz\nӴ|+S̺_њd'czvD))؆1kL#=`o
Ef*$OҨͳЂe_Ht%ߚO(~y]Q0^?|`TB{ۡ5ցDEn9/v~_a]@桊|-R\Me ]XGKC2.޴+Z&L3=`3@Q4rdtbvOWOEńp&b?#H*zԜi#׮OrM(mo%QＹm
,8_صJ+N%aVkX辈QDB7A	/,5F%q'ĤAL{{gzJ[^dKGz$Mh.Ĉ+TO`~dRkjoDh2k+
eK@`E{59I9
BsO"$% cg<식]_u:h)۸o^c4@!&7Vdէɕ^#QahĽ-7q۷}ݖ}`X_ayeMPW8A+k>s}/nR9:g֟-<DuQ @,;"rH BoBq]DDCԡ!sxp40y}A5f֗WBO)"
_0f6]שX<ŝn3(='l$pk_Hep(ωQrB|̗Dź_ý4ƸDuR
BN&I6:wਣ2YOPx,`6TnL"M bZC~8H^j1+f[~zixE]HVQ|Ӑ{kka^b).[ 08bZa?(џ};s.AhšhUH-/{yGcte&S.  r~P˟syL?)>w@:@6CtٹCEeed_)75S|zoKЦ`AI턾OFCZ	}a`:)nDVCc$/Z'8?h	gPC%GAHzc\I 3y.ⱊ,[>+ZZBx1ؔ֍`dy2$aңz&!Q#(LԒtA۝C\45=#l[IƢ"/gA!@2_1q|U\UY[:	&PDpIٯ<{Zy]Qr_N3桮:͞Ntݴ<saӦ-LaZ/^zW9Eׂo X%DDYcߐ'Zʥ`ɩft 877Klw$6.v$B@Vl*Lvj.tL08ѕb'a@8i{arZ/hؠ٩oZ=cOonR4۱cJ_\	>&yg8QZsq~r-5uː g]OGZ(rT(Fa.&<gfi"מ".K	j ۄ(W uWIuQk=Vwo{vUp
)y9 $X)Kg5ѹpokm8Y4Wp\yTBv|@0ˇUyf+a8	Yhhi,0<o.;s z2Tjode*v	1hG!3\:lE79$ZV@͕,2+#QXeZS^}5%x,PfVe;#bUa,
dMi6qK8nt'Jsb3ok@UK{Zt { ݔʽ {c&
"u<DF&~7%@"xiAj|xII頏MeӗYf{p2&C;?#	2pfvx>D?95rZwoXp&}`Cx|1qЇ=uH9\KcqzWu4#OB$28y;ERChQCBաo'==Xg"?	ං'垩I[{TX^}p+zQ8QM&̈X}F[dUc珥)வx*ǰ5tbP<$]츱_&h'o2B~W(;r7&E8	x鯁~iY!\&:V^L~B<ѼҪ{m)dáO^HLJ1"&yY2{Ҥ0=1c=-1ąJ-4:p4\1!umg;A&NH^GbVpIpT$>2G+vz= a莕\(f	<q0Z&<Y{լi0AclU2Vh7TA8J0Xm<1zzeϠƿP%GPP&Uf8/[!0tcYF]{iwY2MȷoXka|UaFjvyHlToT7PNŢ8073]R7H46m7Bp863	Yd7u)s])
r:??)Aĝh[QpZ
F]"=^1ȸ|vJLFD/(/449_2.׆̴Z-e{T!Wy%ӳo"`~uSVJx&G+w,n颁-Ї;B|`hk3a0:Xq@jg%+6S0	I<7`rIkR<eSba^v*~һ1p4>Ɏ@)FٞR"Ĩ{R<ihU6.*hm?Ngg;Lj`5tj秸E@|R*2	9p{Y9m- KBj*Rd/6Qbp>49RzY?-MLG}11eb:4=,VWuRuZ;{ʻ,מ!ڰSמ.`%I]:@}Ke|ZlRVrn2[]nr >X!aw<*c5Z1?#yqBpasKIu=\ eer4<Oι2_yQ_wk*Nğ&2-{龮*"pQT0lf-Ҍ0#ZCU9p5V&j7N90(L $FI"cH()꺩5)c]`tSGݐ-S  Cm(uy>Qc>*>?q<:uny?nHxqzS%e1<9#Q%̓zk&cv&e[@j<@Vv@iXpߡa7
wR&?oΔua]uU$.J|i#.a~bK͛Į}T!˧[RdٴFxYs_bnRһ:%h *#$l5P 	\i/Ul3p7ŧ/w%܏O2A=,1~QsKG`& $3eߠHbtZgH||~Zc@NftgcMawh/p%9Qu4R20g;f^*zL"0"coZX"b,.F&Yq26%$0l 4R54t!Lˆ	+58 N̩J8g4?bVBZ!YGNcyXGIuoѬ"%ꦅ 4|U$D_Uw}L%OIrQ |73Z-5ٟ8"ǖQⱽ9hܻkR:tٴܬ\עYYNӺS8jVg9~;ىg%c]'Hp8i
tZ?(C^k6t|?qGa&ď$%#pC@zؓ}bEN]w+(Nv.9[I*xB{1lnEYqN4ʔ>rkm&Hn$msNC۵EɌ#A|ո&]ᄘm?(6ba\S[|Lhԛ3rZC2GA-R\bJyqD8)k%0v'U2̈́aQ#!U1kr_>j#>NrD&rm.Hxɷ-x`orm3'cYy[⏁_oiud/hi+8t"h{
QHp0;onMZ?yK _ME$ɀ.?-BH"	>2f	F1sC
&B#\?M$)i4LqwLek+΀7ƤSSw;I1sw3vu0`Ln߆Ye ( 5.aI:DMaK롡J(>TG;_&-ň2|4{pI㜇Y&_5j܎6#zHO&Υ8g1̝3@5EOC|s6S<֪AO;O0NIΎ*7گ&j8+ÏgBa#/7V1EM=#-?_װD8׫̫~rmj2ge[U8Yj	YC=:&7^<T>kP3|!Oa0^6r7TQ}cRQQmy
|Wj$/p^LQ}]$pE;薬}W"=pi6A^" =!x_q|gTA'Y91tדՕvw}Ys2U@smڇܖ.fpjfT[\|<BL C69MFޢdUL_éd/LY[ۖM*YO 6׿&&2Pdq[LÙhEs|@ܳ8yR$QaFPk;qGgkcpWeKHļ

Yg&bQ)dÝ DX~zXŞʿu؛1hsߑ>*apL ÿD2`_!ņ)@Tli/gDj2@C68NSh'g˺w%f/ަ7tfAj[~z6p@s|}awiNQ'{4e%5iGHoI_?ri!/;=>"F.HSRi#ҊN"5N'QG$X)g_}5ö(y%ܙ_.D"镧TeW.}l(q03ܵs|Iȓ<>݄wY鋹}8߾`ۍqb`ᦢn~ 0nĈh8U=N^/=f$*[8m#@2Ot@`>F$mY&r͕%P,(j[rK/M,WkMyi!zګL<}.QV3-d	"t{fٟC }~f֦y("n\H4n̭rD'cM4_8k|YI;Z6V0u~1+0ƽ~o88wkfTEV*$5/czATdje\@L_|6E7''60BbtǑ!Q}ߗU^hH<:p}uȎR$xV==zX-d,[,gӊ݈ܺP.V X"e*l(j#Q+H%ëIs{hߠE8g%,R04ʛ+|wlRyXBb|)  SbV:#Aٯq,aB?F]t},>p5ÍE֥2Ss#'6ەӞ1sgD@1ofxݡPALJXAH(ퟞU{jd- buu"Q|ɤf0}NzoSyr0D{;  *3e*ݳL U+k)KjM +p>3l8@˒xau>[O-sT-bB0#xBS*>xmz	Q<+ީjgCLN=|UfR%KOyZ;km.Cׯ \)mL4QsDo1TS]Md}BԔVx}Py>|G{ p34bg7IJYwP[,[W~?+~p[6TTEV`DKz_Ȼ'I,[ w$cLx# ){h&<t\UՊN:n{p<J4 8CcEbpqGs9`=?}տ}qlBlq"%9a-ʫ,!dGػw&ȷ4)[՛XY&vdT9uvs=Dcnڗ2?}j!XD\whRfK7I|
arכ۬ü		l-1Hr,1$<Eiہq>P#aǴyWrzW/ē*`Gwd,`I`c{;!2RU .!*LlhyCEi=9S/ &M;J"hUx#yBw])"Ϊya'4F<zRM	Sr( HUsBɕXU%ı{n0fGW:^[8b>sѡW6k5MzPcj@wN"br#+0Lv-Ox4V0
5˱ yfx<c#[Vn;qujY6>iv'}"?M_\|%!gf w,)> Y&<%WŬxw8},al[ohzpt'7pn"
TsùuNY0,ZolVh7`@> I^+%PavSOe5EnяGĞf*XO(Q^ֽ{NNxFZ7; ,v.=ژPHҎ'KBEcN^c8mD5.5b31{whhCXRr
f16t@WsuFsS-O>d1Hb,JjlƦ>=8BeH$\ODN>BodzAsm*/1.`Gܸ^jl5OkkmQ _RPkCe,'P!Hő
)]hb*\D R~D֧v=NMJ}eLR}/d9KGA,AH]6}n%G$60:zhB$r4j-na6n57e!aŋ=Uj'Zup7=9#Y5r{tkb-GTwVJD2פqc/zJlxZd>]k?}Oqdʸ$!d؍ݲiщ%*Q+Fmm6֡=KŞ
1ozb	)pj>/Pտ({]*W~o͊RO[#U5ǽ89GL#k֖1ۨ$"r(X>8l@}o}D'/ҼAY*TC/\	Da/?&D;q7.M%#+Auc;)4uPmH|~Rba)
/GBySysd6Tr%|ZWؘb-0&d.IП3r,&GWpq3(
jw;UsځxBU.1O.Ik*gbt[^] !r!Pq\a	Ą?M;+6 	 ٻߏ?z']|Dhb+%"7n:q`}]><pF67 y1)N6-Z|CV1LBpnGSUO!,y"?\q	bVFA"ki<8HnyqTǹ ŇF,eDZ㟎Td	緽vF>ʃ(H~78>2f*uS۫'oN<u"VĜr".b3تM)oj	D5ou35&	2yU<kz8yֱi=/ڲ+"j}$%:-:Uak_<:(96&IE?Yixu '='*BIܴO!Wֈ_jɣ(h2a4m@:|jXn
wݹU*M@  @h^2T́2BJde6KϪtkU0R"=h"uYeN1];'L>Q0whtĭ^1>=+fAZsf2IB
?ϒ}}(Y+;<lSnIÆP(IawQżuf̕.C>^bBn7RZ	Ns Ԧg==!8lm#!}*߲+"j~U[`Z&Cx]ZiފЩWsSeөuKX2lznU=\E"t	Jdq*yR=X%pVR/̀3(ՌbȐ_xO0'QRtDZr%2oPX^؝6-NMfJgIz8is{Śm3&p=u8fFsorxcηg=:b'`+,!]jX93B{"PdM"]ȀϋK*g#x^?5G/Bd(5L.zeiupݏyBC 0X|.xn_~z2}L56=]y{-_|yTQ&O0-P,p|r`mPIɚ sQXtMqAǈ`ts Ò,A1ȗpwGϾ|ĝC5:2xeChİ.({Xݐ&z8&	@1˾4!nd0&DМ;}p8(kJ{!^|)^L<o0ximYpGDp ړ,8,7SԶsC}CnW;i2um.RTs^=SGOR!c9@MV>c]yyFxNV&)+,[ÊT{fr%UֶAeg;8ےnN3kJJ,[vs_礿W+9&^+L5t@?ڿJŒսyeiiQ!/u;(\8kw+Hu	zgҠs~_~B9,Tx6rzp9!*:no_)T˯2FB+HO:{n;t3>dz]M-	b$4Xmò͇q-_|ez543:rq<
A$y 䙪QVat^m^]pR5Zutt&vt	QlZ16iI<{&hCXM"r͙\yˋQ1<	,EpdX# Developers: to add a description of changes you have made,
# add it on a line starting with # below the "version=..." line

version=11.6.13

# bug fix: user menu ...Text menus not translated

# -----------------------------------------------------------------------------

#version=11.6.12

# bug fix: protein-protein hydrogen bonds not calculated across biopolymer boundaries
# bug fix: quaternion straightness update

# -----------------------------------------------------------------------------

#version=11.6.11

# aargh -- forgot to upload file for 11.6.10

# -----------------------------------------------------------------------------

#version=11.6.10

# bug fix: vibrationperiod set to 0 if vibration off when state saved

# -----------------------------------------------------------------------------

#version=11.6.9

# bug fix: application -i option still gives message from "set xxxx"
# bug fix: some quaternions cannot be created from a 3x3, namely:
#   q = quaternion({1 2 -2}, {2 1 2}) = {0.57735026 0.57735026 0.0 0.57735026} (xyzw format)
# bug fix: ignoreError -- need not get error string
# bug fix: write image does not set mustRender
# bug fix: set debugscript and set loglevel do not act in script immediately 
# bug fix: translations of Console not implemented correctly
# bug fix: translation not disabled when messageCallback is present
# bug fix: script error messages not updating when language changed
# bug fix: MO scale
# bug fix: measure allConnected broken

# -----------------------------------------------------------------------------

#version=11.6.8

# bug fix: write .... @{...} fails
# bug fix: write .... @{...} can fail
# bug fix: write image CLIPBOARD broken
# bug fix: select {*.ca} (phi < select(y; {*.ca}; y.resno = _x.resno + 1).phi) fails when atomExpression is ({})
# bug fix: applet compilation error not sent in termination message
# bug fix: build javax package does not include Matrix4d.class, AxisAngle4d.class
# bug fix: compilation of myfunc({1 2 3}) fails
# bug fix: hover watcher occasional uncaught exception

# -----------------------------------------------------------------------------

#version=11.6.7

# bug fix: quaternion straightness update
# bug fix: applet improperly reporting status of "quiet" commands
# bug fix: stereo not in state
# bug fix: stereoDegrees parameter not reported correctly

# -----------------------------------------------------------------------------

#version=11.6.6

# bug fix: negative number in range involving ^ still fails  
# bug fix: translucency of mapped isosurfaces not saved in state 
# bug fix: Dialog look and feel for Mac

# -----------------------------------------------------------------------------

#version=11.6.5

# bug fix: negative number in range involving ^ fails: select 10^P -17^P  
# bug fix: goto xxx  with trailing white space fails to find xxx
# bug fix: goto with a # comment in the script prior to the target line fails
# bug fix: two //xxx comments in a row breaks script 
# code: superfast JVXL compression/decompression
# bug fix: straightness absolute value -- values 0 (not straight) to 1 (straight)
#  load =1crn;calculate straightness;color "bwr" range 0 1;color straightness
#
# bug fix: isosurface APBS dx file reader broken (since 4/2007)
# menu: "Minimize" GT

# -----------------------------------------------------------------------------

#version=11.6.4

# bug fix: UFF.txt not included in build
# bug fix: function definitions occurring before prior script commands are executed. 
# bug fix: message @{xxxx} in function not picking up function context variables
# bug fix: Some browsers do NOT strip \n from <param> tags, necessitating changes in loadInLine()

# bug fix: "valence" not "valency" in data property_valence
# bug fix:  initializeBspf(); missing in setTrajectory()

# -----------------------------------------------------------------------------

#version=11.6.3

# bug fix: set antialiastranslucent false not functional
# bug fix: text color near black with antialiasdisplay becomes white
# bug fix: text antialiasing of near-black text looks very bad when antialiased

# -----------------------------------------------------------------------------

#version=11.6.2

# bug fix: forcefield file UFF.prm --> UFF.txt
# bug fix: better Escape method for strings
# bug fix: connect auto not registered in state
# bug fix: draw point translucent only draws ring 
# bug fix: load string inline with multiple models fails
#
# code: FindBugs fixes for Eval, DrawRenderer, Isosurface, ForceFieldUFF
# code: ScriptWindow public: sendConsoleEcho,sendConsoleMessage,notifyScriptStart,notifyScriptTermination

# -----------------------------------------------------------------------------

#version=11.6.1

# bug fix: set labelToggle malfunctioning
# bug fix: missing default background for toggled labels
# bug fix: color {oxygen} translucent blue
# bug fix: color translucent 1 blue  1-8 integer settings off by one
# bug fix: background color +/-1 adjustment removed
# bug fix: spardir within /M... directory
# bug fix: (minor) "set echo xxx display" equivalent to "set echo xxx displayed"  missing 
# bug fix: (minor) "set echo xxx hide" equivalent to "set echo xxx hidden"  missing
 
# -----------------------------------------------------------------------------

#version=11.6

# bug fix: GIF encoder color / class not found issues
# bug fix: very thin cylinder does not appear at all viewing angles
# bug fix: load "/xxx" with unsigned remote applet loads local file instead of remote root directory
# bug fix: sulfur/sulphur always spelt as in IUPAC Red Book
# bug fix: display of aromaticSingle bond for NEW bond results in dotted bond.
# translation: English language variants no longer ignored

# -----------------------------------------------------------------------------

#version=11.6.RC18

# bug fix: fileName not reset after ZAP
# bug fix: set echo none; color echo green  null pointer exception
# bug fix: .x not recognized
# bug fix: set xxxCallback "" does not clear callback ("none" was required unnecessarily)
# bug fix: cartoons ending in helix or strand draw single dot for final amino acid

# -----------------------------------------------------------------------------

#version=11.6.RC17

# bug fix: draw scale not saved in state for arc or xy arrow
# bug fix: drag/drop not enabled on consoles
# bug fix: Jmol state command "calculate surfaceDistance WITHIN ({...})" not passing compiler
# bug fix: Swing antialiasDisplay broken due to setTransparentBackground debugging
# bug fix: trajectories not enabled
# code: if (true...)/ if (false...) code cleanup
# bug fix: select model=_modelNumber didn't differentiate between 2.10 and 2.1
# bug fix: select model=0.0 caused infinite loop

# -----------------------------------------------------------------------------

#version=11.6.RC16

# bug fix: mol2 PDB format better handling of chains and derived element types
# bug fix: save image button/menu interface broken in 11.6.RC15

# -----------------------------------------------------------------------------

#version=11.6.RC15

# new feature: MOL2 reader is PDB-enabled.
# new feature: data() and DATA expanded to allow fixed-column entry 
# bug fix: data property_partialcharge does not update atomic partialCharge data itself for MEP
#  but instead just creates a data type "property_partialcharge"
# bug fix: CML reader failst to load primitive lattice parameters when no symmetry
# note: CML reader only reads the first structure of a file
# bug fix: CML reader not assigning atom labels
# bug fix: CML files not properly loading symmetry
# bug fix: O- formal charge radius MUCH too large; N+ MUCH too small. -- REMOVED  
# code: thread control for Java Swing in applet context
#     thread creating Swing objects MUST be event thread 
#     -- using SwingUtilities.invokeAndWait() from the commandWatcher thread
# new feature: load menu items for signed applet
# new feature: save menu items for signed applet
# bug fix: applet -- setting a jmolScript callback prevents menu updates
# new feature: minimize menu item
# new feature: signed applet allows "load ?" and includes previewer
# bug fix: H-M spacegroup designations specifying nonstandard Hall symbols by default
 
# new feature: signed applet/application   load ?xxx  uses load dialog 
# webexport help updated to reflect ability to handle files opened with "load append"

# -----------------------------------------------------------------------------

#version=11.6.RC14

# new feature: signed applet may write file, images, scripts, variables to disk. User dialog is required.

# new feature: write GIF
# code: allows for getJpeg(quality,asString) option to return byte array instead of base64.
# bug fix: xxx.split()[3].replace  does not do selection first 
# bug fix: ramachandran and quaternion derivative not indicating structure due to dropping last atom

# -----------------------------------------------------------------------------

#version=11.6.RC13

# bug fix: set historyLevel  recording full scripts, not individual commands 
# bug fix: y-offset for echo text and images
# bug fix/new feature: HIDE/DiSPLAY/DELETE/COLOR $*xxx* extended to ECHO
# bug fix: findbugs input stream closure
# translation: add GT.escapeHTML and stricter checking for special characters in file names
#				used by web export.

# -----------------------------------------------------------------------------

#version=11.6.RC12

# bug fix: getProperty("atominfo",{atom expression}) not working for "atominfo[0].xxx
# bug fix: getProperty("modelinfo",{atom expression}) not working
# new feature: set atomPicking TRUE/FALSE
# new feature: set bondPicking TRUE/FALSE
# bug fix: draw pointgroup when principalPlane == null
# bug fix: findbugs corrections in minimize.forcefield, modelset.AtomCollection, shapespecial.DrawRenderer 
# new feature: applet parameter jmolSetCallback("maximumSize", nnn) -- sets maximum size of applet when resizing to this value 
# cml reader fix for not applying symmetry to first model
# translation: added GT._ calls for HTML templates and JS in WebExport

# -----------------------------------------------------------------------------

#version=11.6.RC11

# bug fix:   echo IMAGE and antialiasdisplay 
# bug fix: super/subscripts with antialiasdisplay
# translation: menu items in console
# bug fix: web export / language
# bug fix: draw pointgroup C2 2 not distinguished from draw pointgroup C2 1
# bug fix: d2 point groups cause null pointer exception due to missing principal axis
# bug fix: {*}.x = ....  broken

# -----------------------------------------------------------------------------

#version=11.6.RC10

# bug fix -- set picking spin, also compatibility of set picking spin and doing measurements
# bug fix -- draw pointgroup, write pointgroup draw

# -----------------------------------------------------------------------------

#version=11.6.RC9

# code: more efficient return of point group information and calculation
# new feature: getProperty PointGroupInfo
# bug fix: show pointgroup draw null pointer exception
# bug fix: print $planeA - capital letters in a draw name disallow finding it.

# -----------------------------------------------------------------------------

#version=11.6.RC8

# bug fix: ramachandran / ramachandran r navigation problem
# code: Minor refactoring and pruning. 
#    --- Core applet now 715K (JmolApplet0.jar + _Core, _Jars, _Main, _Popup, and _Viewer)
# code: Pre-Jmol.js button controls removed, saving about 10K
# new feature: script APPLET appletName "some script"
#   --allows direct inter-applet communication independent of set SYNC
#   --appletName can be * (all applets), > (other applets), . (this applet),
#     or an applet name such as "jmolApplet0" or just the extension "0" 
#     or a quoted set of applet names separated by commas.
#   --for *, the current applet always reports LAST
# new feature: x = script("some script", "appletName")
#   --same as above
#   --in addition, allows retrieval of information from another applet
#     for example:
#
#		x = script("print getProperty(\"modelInfo.modelCount\")","B")
#
#     gets the number of models loaded in applet jmolAppletB. 
# 
#		x = script("show orientation moveto","jmolApplet2")
#
#     gets the current orientation of applet jmolApplet2.
# 
#		xList = script("print getProperty(\"appletInfo.fullName\").split(\"__\")[1] + \":\" + script(\"show rotation\").trim()","*")
#
#     gets a new-line-separated list of rotational quaternions for all applets with applet names.
# 
# 
# new feature: print getProperty("modelInfo.models[3].file") syntax

# -----------------------------------------------------------------------------

#version=11.6.RC7

# new feature: draw ramachandran includes planes connecting atoms.
# bug fix: refresh for hover
# bug fix: state definition for lcaoCartoons, isosurface with IDs containing spaces
# new feature: $*xx*  double wild cards
# new feature: generally for objects (draw,pmesh,isosurface,etc.) use DISPLAY/HIDE rather than ON/OFF
#   so as to be consistent with other objects. (OFF was not deleting these)
# new feature: support for application transparent background -- "-b" command switch (testing only)
#   and setAppletContext "-b" switch as well.
# bug fix: structure helix|sheet|turn|none {atomExpression} was undocumented and had state issues 
# new feature: HIDE $xxx
# new feature: DISPLAY $xxx
# new feature: DELETE $xxx
# bug fix: adaptation for malformed PDB files (HEADER with nothing following it)
# bug fix: more language localization in webexport
# new feature: applet message regarding help and command entry

# -----------------------------------------------------------------------------

#version=11.6.RC6

# code: better navigation refreshing
# bug fix: oops, 11.6.RC5 is totally broken due to missing refreshes
# bug fix: language localization in webexport 

# -----------------------------------------------------------------------------

#version=11.6.RC5

# bug fix: set fontscaling with multiple echo texts/images at the same xyz location only scaling the first item
# bug fix: set echo xxxx 30 40
# bug fix: WAY more streamlined refreshing
# bug fix: createImage(), not getImage() in order to allow dynamic file change
# bug fix: halo size for antialiased display
# Addition of translation tags to webexport
# bug fix: write IMAGE broken for 11.6.RC2+
# bug fix: unnecessary refreshes removed from moveto/zoom with time 0
# new feature: background IMAGE "filename"
# code: viewer refactoring to simplify/remove private methods and synchronization

# -----------------------------------------------------------------------------

#version=11.6.RC4

# bug fix: select @m  throws an error
# code: refactoring shapespecial into shapespecial and shapesurface
# code: refactoring modelset.CellInfo into symmetry.SymmetryInfo
# code: realignment of applet JAR files
#  -- new _ShapeSurface.jar, which now includes org.jmol.jvxl/**
#  -- removal of _Jvxl.jar
#  -- refactoring reduces preliminary applet Jar file loading to 720K (if English)
#  -- should provide faster loading of simple models and more efficient loading of more complex ones
#  -- basic minimum load involves just JmolApplet0.jar + _Core, _Jars, _Main, _Popup, and _Viewer

# -----------------------------------------------------------------------------

#version=11.6.RC3

# bug fix: minor error in pointgroup; dimension tied to radius
# new feature: set dotDensity [-3 to 3]
# new feature: draw pointGroup [type] [index] SCALE [x]
#  where [type] is one of Cs, Ci, Cn, or Sn, where n is an integer or the character "n" 

# -----------------------------------------------------------------------------

#version=11.6.RC2

# bug fix: image background transparency

# new feature: set pointGroupDistanceTolerance (default 0.2 angstroms)
# new feature: set pointGroupLinearTolerance (default 8 degrees)

# bug fix: Cs pointgroup not found
# bug fix: set echo DEPTH/IMAGE
# bug fix: wored over dots
#     * 2) If not BALL, ARCS, or DOTS, the rendering defaults to AXES
#     * 3) If DOTS, then turn off ARCS and FILL
#     * 
#     * note that FILL serves to provide a cut-out for BALL and a 
#     * filling for ARCS
#     */

# -----------------------------------------------------------------------------

#version=11.5.28

# bug fix: state "set measures angstroms" does not include "select *"
# bug fix: labels can change size in returning from antialiasdisplay=true to antialiasdisplay=false
# ELLIPSOID command -- with symmetry and crude footballs, including PDB files
#  note that for now PDB file reading of ANISOU requires using {x y z} in load
#  command, but you can use {1 1 0} to load ANISOU without applying symmetry  
#
# Italian translation

# -----------------------------------------------------------------------------

#version=11.5.27

# bug fix: data CLEAR command nonfunctional
# bug fix: "....".trim("xyz") function not properly trimming ANY x,y,z
# bug fix: draw OFFSET not working properly
# bug fix: PovRAY output of draw objects -- cylinder end caps not considered
# bug fix: draw width 0.05 {...} {...} -- line does not properly render
# bug fix: data "model"...end "model" saves state without first line if first line is empty 
# bug fix: "show data types" putting comma in wrong location
# new feature: DATA "data2d_xxxxx"..... end "data2d_xxxxx"
# new feature: isosurface FunctionXY "data2d_xxxxx" {origin} {ni x 0 0} {nj 0 y 0} {nk 0 0 z}
#   allows setting isosurface Z values using a block of data (ni rows by nj columns)
# new feature: isosurface FunctionXY "data2d_xyz_xxxx" {origin} {ni x 0 0} {nj 0 y 0} {nk 0 0 z}
#   allows setting isosurface values using a block of x y z data, all points for which should be
#   on the surface.
# new feature: GamessUK reader
# new feature: reset VARIABLES (replaces "reset ALL")

# -----------------------------------------------------------------------------

#version=11.5.26

# bug fix: draw adds extra circle in 11.5.25
# bug fix: minimization out-of-plane energy calculation error
# bug fix: better initial minimization parameters
# bug fix: (applet) script termination callback should not be sent to message queue
# bug fix: hover appears when a load script leaves an atom very close to (0,0) in the window
# bug fix: draw width -1 or draw mesh nofill with very short cylinders creates odd jumpy effect
# bug fix: draw CIRCLE for multiple model sets
# 
#
# new feature: draw CYLINDER
#
# Korean translation

# -----------------------------------------------------------------------------

#version=11.5.25

# new feature: draw CIRCLE
#
#   A circle is a 2D object that behaves like a halo, always appearing circular
#
#   draw circle {molecule=1} mesh nofill            # around specified atoms
#   draw diameter 2.0 circle {atomno=3} mesh nofill # 2.0 angstroms; scales
#   draw diameter 100 circle {_O}[1] mesh nofill    # 100 pixels (doesn't scale)
#   draw circle {*} fill  # a solid plane in the shape of a circle

# -----------------------------------------------------------------------------

#version=11.5.24

# new feature: minimization CONSTRAINTS {xx} {xx} [{xx} [{xx}]] x.y
# new feature: minimization FIX {atom expression}
#
#  multiple constraints can be present; one per line input
#  minimization CLEAR releases constraints and fixed atoms
#  also, minimize ENERGY saves a detailed listing, which can be
#  displayed using one of the two following commands:
#
# new feature: show minimization
# new feature: x = getProperty("minimizationInfo")
#
#  to dump the info to a file:
#    minimize
#    var x = getProperty("minimizationInfo")
#    write VAR x "myfile.out"
#
# new feature: isosurface MAXSET n # removes larger fragment sets
# new feature: isosurface DOWNSAMPLE n # down-factors the number of points in a CUBE file by a factor of n

# -----------------------------------------------------------------------------

#version=11.5.23

# new feature: minimize ENERGY # no stepping
# new feature: minimize STEPS n
# new feature: minimize CRITERION x.y
# new feature: minimize CLEAR # flushes logged info and saved atom info
#
# new feature: echoCallback 
# new feature: measureCallback
# new feature: minimizationCallback
# new feature: scriptCallback
# new feature: save/restore coordinates
# new feature: getProperty minimizationInfo
#
# code: more efficient minimize calculation setup; better logging
# code: "notify" methods in JmolStatusListener consolidated
# code: Tokens organized
# 

# -----------------------------------------------------------------------------

#version=11.5.22

# bug fix: UFF torsion calculation incorrect
# bug fix: UFF.prm not properly recognizing sp2 N in N-oxides
# bug fix: minimizer for compounds containing isotopes D and T
#
# code: eval/compiler error processing update

# -----------------------------------------------------------------------------

#version=11.5.21

# new feature: minimize command -- mostly untested
#
#   set minimizationSteps 100
#   set minimizationRefresh true 
#   set minimizationCriterion 0.001
#   set loglevel 4  # for a very minimal report
#   set loglevel 5  # for a summary report
#   set loglevel 6  # for a detailed report
#   minimize
#   minimize stop
#   minimize cancel
#   
#
# for example:
#
# load caffeine.xyz
# minimizationSteps = 80
# minimizationRefresh = true
# set loglevel 4
# select connected(2) or connected(3) or oxygen and connected(1)
# connect aromatic modify
# calculate aromatic
# set measurementunits pm
# measure {_O}[1] {_O}[2]
# color measure red
# minimize
#
# new feature: set loglevel 6 allows a "debugHigh" setting 
#
# bug fix: load unitcell {a b c alpha beta gamma} not working (since 11.5.8)

# -----------------------------------------------------------------------------

#version=11.5.20

# bug fix: zap file > 2  multiple models do not properly delete

# -----------------------------------------------------------------------------

#version=11.5.19

# bug fix: null surfaceGenerator causes MO exception
# bug fix: isosurface reading/writing JVXL files having insideout keyword 

# -----------------------------------------------------------------------------

#version=11.5.18

# bug fix: zap x.y additional work -- connections, isosurfaces
# bug fix: zap x.y not correcting Eval variables
# bug fix: isosurface user VolumeData not properly loading

# -----------------------------------------------------------------------------

#version=11.5.17

# new feature: delete {atom expression} NEEDS TESTING

# bug fix: zap x.y for dots
# bug fix: zap {atom expression} for not including all atoms in a model in the selection
 
# -----------------------------------------------------------------------------

#version=11.5.16

# new feature: zap {atom expression} # zaps models associated with given atoms.
#   use "show models" to see what models are present, then zap them with their
#   file.model number:
#
#   zap 1.1,2.1  # these two models deleted
#   zap atomIndex=0 # ALL ATOMS IN FIRST MODEL deleted
#
# Note that file.model numbers do not change after this. 
# So if initially there were two files loaded
#
#   zap 1.1
#
# removes the first model and leaves the second as "2.1"
#
# NEEDS THOROUGH TESTING, particularly in regard to saving/restoring the state

# bug fix: atomChooser not updated for zap
# bug fix: isosurface model keyword does not carry on to saved state
# bug fix: lcaocartoons do not color properly or get restored from state properly
# bug fix: popup menu selection of groups and symmetry operations does not work

# menu: internationalization of "Monomer" and "Shapely" 
# bug fix: mol2 reader cannot read files with single-line comments
 
# -----------------------------------------------------------------------------

#version=11.5.15

# bug fix: CAChe CSF reader not reading partial charges
# bug fix: WebExport with http:// files fails to save file
# bug fix: WebExport with local . directory fails to save JmolApplet.jar and Jmol.js
# code: refactoring of jmol.app.webexport: adding html subdirectory

# bug fix: state saving with rotateSelected spinning spins entire model  
# bug fix: getproperty("chaininfo") for non-biological model causes null pointer exception
 
# -----------------------------------------------------------------------------

#version=11.5.14

# bug fix: rotateSelected INTERNAL not adjusting for internal rotation center
# bug fix: .max/.min not allowed in context: "select resno=@{{visible}.resno.max}"
# bug fix: Parser: "3xxx" read as 3 instead of 0; "3.5xxx" read as 3.5 instead of NaN  
# application menu: Write state moved to main export menu; Export PDF to image writing
# new feature: MODEL/ENDMDL records in write PDB (still no TER records)
# bug fix: write PDB format incorrectly writes atoms with 4-length names
# bug fix: Spartan SMOL directory reader doesn't assign bonds
# new feature: Spartan archive reader now reads aromatic bonding
 
# -----------------------------------------------------------------------------

#version=11.5.13 BROKEN FOR XYZ READER

# bug fix: Parser: "3xxx" read as 3 instead of 0; "3.5xxx" read as 3.5 instead of NaN  
# application menu: Write state moved to main export menu; Export PDF to image writing
# new feature: MODEL/ENDMDL records in write PDB (still no TER records)
# bug fix: write PDB format incorrectly writes atoms with 4-length names
# bug fix: Spartan SMOL directory reader doesn't assign bonds
# new feature: Spartan archive reader now reads aromatic bonding

# -----------------------------------------------------------------------------

#version=11.5.12

# new feature: four optional defaults for Van der Waals radii:
#
#  set defaultVDW jmol
#  set defaultVDW rasmol
#  set defaultVDW babel
#  set defaultVDW user
#
# To set the user variety, first set one of the other sets as a basis
# Then add a DATA statement to include the specific elements you want to give
# new radii to:
#
#  set defaultVDW babel;
#  DATA "element_vdw" 6 1.7 END "element_vdw"; 
#  DATA "element_vdw" 6 1.7; 7 1.8 END "element_vdw"; # separate using semicolons or new lines
#
# For full state compatibility, these commands should be given prior to
# model loading, as they affect all calculations involving Van der Waals 
# radii -- except default zoom.
#
# Now select the user set:
#
#  set defaultVDW user
#  spacefill on
#
# To delete all user entries:
#
#  reset VDW 
#
# If user vdw radii are currently set, then this resets the defaults to Jmol.
#
# new feature: show vdw  shows a listing of the currently set VDW radii
#
# new feature: integration of star, halo, and spacefill code so all behave the same.
# 
# stars     1.0      # set to a specific angstrom radius
# spacefill 100%     # percent of CURRENT vdw set
# stars     100%Jmol # percent of Jmol standard
# stars     50%Babel # percent of Babel standard
# spacefill 5%Rasmol # percent of Rasmol standard
# spacefill 30%User  # percent of User-defined values (or CURRENT if not defined)
# spacefill +1.2     # angstroms added to current vdw scheme
# halos     50%Jmol  # -- halos also have an added bit to make sure they are visible 
# spacefill 250      # RasMol 250 units/Angstrom units still
# spacefill -20      # neg numbers same as percentages: 20% here, using current vdw set
# stars     @{x+0.1} # math OK
# spacefill @x%      # make sure x comes out integer, otherwise % is ignored
#
# note that dots do not have a %Jmol option:
#
# dots   30     # syntax already assumes percent for dots using an integer
#
#
#
# see src/org/jmol/_documents/vdw_comparison.xls

# -----------------------------------------------------------------------------

#version=11.5.11

# bug fix: save/restore of atom data incorrect when user has set propertyAtomNumberField or propertyDataField
# bug fix: functions, save/restore state were disabled by bug in 1.5.8
# bug fix: command "test()" where test() is a user-defined function causes array-out-of-bounds error
# bug fix: undocumented .vdw atom property was equivalent to .valence
# bug fix: GAMESS reading of F orbital order incorrect

# new feature: settable Van der Waals radius using {carbon}.vanderwaals = 1.7 
#  or using DATA "property_vanderwaals"
# new feature: DATA "property_x i j" .... END "property_x i j" 
#   overrides default propertyAtomNumberField (i) and propertyDataField (j)
# new feature: State save of property_xxx  now in easily readable Jmol Data Format

# -----------------------------------------------------------------------------

#version=11.5.10

# NOTE: REMOVED FROM SERVICE -- see 11.5.11
# bug fix: ISOSURFACE LIST command requires current isosurface
# bug fix: JVXL writing does not properly save pocket cavities or minsets
# bug fix: DATA command assigning property to last atom in structure fails

# -----------------------------------------------------------------------------

#version=11.5.9

# NOTE: REMOVED FROM SERVICE -- see 11.5.11
# bug fix: Gaussian reader not considering possibility of cartesian D and spherical F
# bug fix: ADF reader not reading coordinates for newer ADF output

# -----------------------------------------------------------------------------

#version=11.5.8

# NOTE: REMOVED FROM SERVICE -- see 11.5.11
# bug fix: lines starting with @{ redefine "{"
# bug fix: echo offsets do not correct for window position
# bug fix: menu reports too many chains
# new feature: menu includes all standard color scheme options
# new feature: inline math @{x+3} extended to all commands
# new feature: .sub(), .add(), .mul(), .div() extended to all operand types

# -----------------------------------------------------------------------------

#version=11.5.7

# bug fix: explicit "SELECT NONE" must be given for label defaults to be set

# bug fix: menu select element missing SELECT command
# bug fix: for delayed font scaling animation using the font command and antialias display

# -----------------------------------------------------------------------------

#version=11.5.6

# bug fix: HETATM atoms not automatically bonded to nearby ATOM atoms
# bug fix:  setParameterValue("perspectiveDepth",perspectiveDepth);

# bug fix: sets offset based on imageFontScaling, not overall font scaling
# bug fix: multiline labels not positioned properly with offset 0 0
# bug fix: labels not scaling properly
# new feature: label "scaleReference" if > 5.0 is taken to be a reference zoom setting
#   saying "make the font size X at a zoom of Y" 
# bug fix: labels not scaling properly when in script with file load
# bug fix: labels not appearing in contrast when given same color as background
# bug fix: fixes applet memory leak in relation to consoles

# -----------------------------------------------------------------------------

#version=11.5.5

# bug fix: fixes applet memory leak due to 
#   platform objects/delay threads not being destroyed

# new feature -- syncCallback -- intercepts messages that would otherwise go to applets for syncing
#   when syncCallback is set to a JavaScript function name, that function
#   intercepts the sync message and can pass it on (by returning it), 
#   consume it (by returning an empty string ""), or modify it as desired.
#   this allows, for example, monitoring of orientation information so that
#   zoom sliders and such can accurately portray their values

# -----------------------------------------------------------------------------

#version=11.5.4

# bug fixes -- font scaling

# new feature: Spartan input files read as Odyssey format
#
# new feature: set delayMaximumMs  sets the maximum delay that scripts will use, primarily for testing scripts
# new feature: set fontScaling TRUE/FALSE
# new feature: font [type] [size] [face] [weight] [scaleReference (Angstroms per pixel)]
#  atom labels and 3D echos then scale properly.
#  note that the current zoom affects the label size.
# bug fix: image writing does not scale fonts properly. 
# bug fix: antialias of images not functionally independent of antialias for displ adds language switching for Open / Save dialog boxes and full menuing system in Jmol application
# adds "structure" command -- structure [helix|sheet|turn|none] (atom expression)
# adds "save/restore structure" command

# -----------------------------------------------------------------------------

#version=11.1.40

# bug fix for backgroundModel and save state 
# bug fix for load append with spacegroups causing atoms to be repositioned
# bug fix for anim playrev in loop mode causing animation to stall

# -----------------------------------------------------------------------------

#version=11.1.39

# several bug fixes:
#
#  bug fix for mo data misreading in smol files
#  bug fix for lcaoCartoon "s" giving incomplete spheres
#  bug fix for select symop=3555 not giving proper atoms when load "" {444 666 0}
#  bug fix for PDB files not supplying information about residues for the popup menu.
#  bug fix in frame range 1.0 when file 1 has only one model.

# -----------------------------------------------------------------------------

#version=11.1.38

# bug fix for opaque triangles missing one pixel on right side when translucent objects are present.
# bug fix for label alignments sometimes not being saved properly in the state
# bug fix for animFrameCallback giving multiple callbacks -- still there, but identified now
#    in terms of whether animation is on or not in the 7th parameter being 1 or 0:
#
# function animFrameCallback(app,frame,fileno,modelno,firstno,lastno,isRunning){...}

# -----------------------------------------------------------------------------

#version=11.1.37

# fixes bugs in draw and unicode label state definitions
# adds simplistic <sub></sub> <sup></sup> to text, including echo, label, hover, etc.
# fixes popup menu to better deal with multiple file context
# update of Turkish translation

# -----------------------------------------------------------------------------

#version=11.1.36

# build: renames applet files JmolApplet0*.jar and JmolAppletSigned0*.jar
#
# bug fixes for isosurface in multi-file environment
#
# bug fix and additional work in relation to translations
# 
# zoomTo (atom expression) 0
# 
# with options 
# 
# zoomTo (atom expression) 0+n
# zoomTo (atom expression) 0-n
# zoomTo (atom expression) 0*n
# zoomTo (atom expression) 0/n
# 
# also 
# 
# moveTo timeSec {x y z w} (atom expression) 0 [zoom factor]
# and
# moveTo timeSec {x y z w} 0 transX transY (atom expression) 0 [zoom factor]
# 
# where [zoom factor] is x, where x > 0
# or
# [0] [[+ | - | * | /] x]
#
#
# app fix for Edit...preferences not properly refreshing for axes and boundbox

# -----------------------------------------------------------------------------

#version=11.1.35

# fix for x = {...}.resno and {...}.groupID
# fix for select resno=-1
# first version of pt_BR translation

# -----------------------------------------------------------------------------

#version=11.1.34

# language submenu

# -----------------------------------------------------------------------------

#version=11.1.33

# bug fixes -- draw state, menu not updating, language submenu

# -----------------------------------------------------------------------------

#version=11.1.32

# adds capability to define a property for selected atoms:
#
#  select xxx
#  property_x = n.m

# -----------------------------------------------------------------------------

#version=11.1.31

# adds capability to read data from selected fields (white-space delimited columns) in a file
# 
# propertyDataField = 0  # no fields -- just read tokens
# propertyDataField = 2  # data are in field 2 (second from the left)
# propertyAtomNumberField = 1 # data must match atomNo in field 1 and will be in 
#                           the field specified by propertyDataField

# -----------------------------------------------------------------------------

#version=11.1.30

# full support for switching languages, including a new "language" menu item
#
# Jmol.js:  
#
# jmolSetCallback("language", "de")
#
# Jmol scripting:
#
# language = "de"
#
# Menu:
#
# new language submenu with checkboxes.
#
# allows for efficient specific file reader options for the applet (particularly)
#
# adds _spinning variable
#
# adds LOAD xxx::myfile   xxx indicating file type xyz, mol, etc.
#
# not important generally.
#
# adds PQR reader option, at least for PDB2PQR generated output
#
# better spin control during zoomTo and moveTo
# spinning now detects that a zoomTo or moveTo operation is occurring
# or the user is manipulating the model with the mouse, and pauses 1 second
# for that operation to complete before resuming spinning
# 
# hover now is turned off during spinning or user manipulation of the model
# 
# zoomTo and moveTo the same location changed to no time delay

# -----------------------------------------------------------------------------

#version=11.1.29

# code: totally reorganized isosurface code; new org/jmol/jvxl packages
#
# adds  (1) isosurface functionxy "file:data.dat" ...
# adds  (2) isosurface functionxy "functionName" {x0 y0 z0} {-ni ...} ...
# adds  (3) isosurface functionxy "functionName" {x0 y0 z0} {-ni ...}{-nj ...} ...
#
# (1) "file:" allows reading of xy data from files for graphing f(x,y)
# (2) ni<0 indicates JavaScript functionName will return a single string that
#     should be parsed for numeric data.
# (3) ni<0, nj<0 indicates that JavaScript will fill the fourth parameter
#     of the function with an array of f[nX][nY] data values:
#
# Jmol:
#
#   isosurface s1 functionXY "xyData" {-2 -2 -2} {21 0.1 0 0} {21 0 0.1 0} {21 0 0 0.1} 
#
# JavaScript: (slow)
#
# function xyData(app, x, y) {
#   return func(x, y)
# }
#
# Jmol:
#
#   isosurface s2 functionXY "xyDataAsString" {-2 -2 -2} {-21 0.1 0 0} {21 0 0.1 0} {21 0 0 0.1} 
#
# JavaScript: (much faster)
#
# function xyDataAsString(app, nX, nY) {
#   var s
#   for (var i = 0; i < nX; i++)
#     for (var j = 0; j < nY; j++)
#       s += "x_"+i+"\ty_"+j+"\t"+func(i,j)+"\n"
#
#  //non-numeric formatting allowed but not necessary
#
#   return s
# }
#
# Jmol:
#
#   isosurface s3 functionXY "xyDataAsArray" {-2 -2 -2} {-21 0.1 0 0} {-21 0 0.1 0} {21 0 0 0.1} 
#
# JavaScript: (very fast)
#
# function xyDataAsArray(app, nX, nY, fxy) {
#   for (var i = 0; i < nX; i++)
#     for (var j = 0; j < nY; j++)
#       fxy[i][j] = func(i,j)
# }
#
# (2) and (3) are very fast; (1) is the original method, but it is slow.
#
# MAYSCRIPT expanded
#
# for the Wiki or any application where absolutely no JavaScript
# is to be allowed, simply remove the MAYSCRIPT parameter, which
# now covers all aspects of JavaScript interaction from within Jmol
#
#
# adds   applySymmetryToBonds  (default: FALSE)
#
# applySymmetryToBonds 
#
# When set TRUE, this flag instructs Jmol when applying symmetry
# to atoms, as in "load xxx.cif {1 1 1}", to also apply symmetry
# to the bonds indicated in the file. The flag is useful when 
# normal Jmol autobonding would not properly connect atoms, but 
# the model is "molecular" -- the base atom coordinates are correct
# for whole molecules. The flag should NOT be used in cases where
# the application of symmetry operations creates new bonds that 
# were not present in the original set, as for quartz.cif, where
# there is only one bond initially, and after applying symmetry
# new bonds are created that are between atoms that were created
# using two different symmetry operations. 
#
# adds isosurface HOMO/LUMO [+/- n]
#
# better isosurface plane rendering, especially in regard to meshes
# bug fix in isosurface contour -n going WAY back to before 10.9.60
# refactoring of all isosurface-related classes
# support for Spartan MO HOMO
#
# adds isosurface POCKET [cavity] sasurface
# adds isosurface INTERIOR [cavity] sasurface
#
# adds load TRAJECTORY -- for a single file with multiple models all with
# the same number of atoms. Atom locations can also be updated on the
# fly using the data statement. 
#
# adds TRAJECTORY n command -- like FRAME or MODEL, but never more
# than one model at a time displayed, because there is only one set
# of atoms. 
#
# adds script: option for callbacks set from within Jmol. That is, callbacks
# can either be to host page JavaScript functions or to Jmol scripts. This 
# will allow interactive sessions without external JavaScript.
#   
# set pickcallback "script: script doCallback.spt"
#
# adds resizeCallback because certain positioning of echos and sizing of the 
# structure may require method intervention after the resizing   
#
# adds translucency for echo and hover, both text and backgrounds
#
# adds echo script to defined state
#
# adds hourglass cursor during MO/Isosurface operations
#
# fixes inoperative "set pickingstyle measures on"

# -----------------------------------------------------------------------------

#version=11.1.28 

# adds
#
# a = script("some script command")
# a = javascript("some javascript")
#
# putting output into a from commands such as "show" or "getProperty", for instance.
#
# reinstates tempManager properly.
#
# adds support for CAChe CSF files with MOPAC (AM1, PM3, etc.),
# Density Functional, and Extended Huckel Gaussian/Slater-based molecular orbitals.
#
# CHANGES DEFAULT RENDERING FOR MOLECULAR ORBITALS TO: MESH NOFILL FRONTONLY
#
# adds MOPAC 2007 graphf output reader (gpt2 files, MOPAC molecular orbitals)
# based on the VERY latest version (not released yet), which includes
# "MOPAC-Graphical data" on the first line, character index 6.
#
# adds 
#
#  mo HOMO [+/- n]
#  mo LUMO [+/- n]
#
# fixes bugs found by FindBugs:
#
# labels:  default z setting for labels (set labelFront, set labelGroup, set labelAtom) 
#          was not being recorded properly
# move:    with slab or zoom was doing integer math
# GhemicalMMReader -- was incorrectly assigning aromatic to bond type 4 via fall-through of switch
#
# adds xodydata reading of "boundary" as unitcell
# enhances default axis rendering for axes unitcell
#
# adds expanded isosurface-related commands:
#
#  draw list
#  isosurface list
#  lcaocartoon list
#  (mo list) -- not particularly useful
#  pmesh list
#
# Listing gives id, number of vertices, number of polygons, visibility,
# and title (usually the command that was given that created this isosurface)
#
# CHANGED BEHAVIOR FOR ISOSURFACE COMMAND WITHOUT ID INDICATED:
#
# Now if no ID is indicated, the previous ID is used for all commands 
# EXCEPT "isosurface delete", which deletes all isosurfaces. 
#
# This is a change from Jmol 10.2 and 11.0, where if you leave
# off the ID, a new isosurface is created.
#
# This was a needed change to prevent unwanted multiple isosurfaces.
#
# CHANGED BEHAVIOR FOR ISOSURFACE DEFAULT COLOR
#
# The default isosurface color no longer changes shade among 5 possible shades.
# That was necessary only because it was easy to mistakenly make multiple
# isosurfaces that otherwise would look the same. 

# -----------------------------------------------------------------------------

#version=11.1.27

# fixes two state bugs: 
# 1) dots/geosurface not being saved properly in state
# 2) animation parameters not being saved properly in state

# -----------------------------------------------------------------------------

#version=11.1.26

# fixes two nasty bugs relating to isosurfaces and JVXL files. 
#  -- JVXL files created from molecular orbitals will show up with no color
#     in 11.1.0 - 11.1.25 because of a missing number in the definition line :(
#  -- JVXL files created from molecular orbitals will show unwanted cross-over
#     surfaces from + to -. 

# -----------------------------------------------------------------------------

#version=11.1.25

# --fully dissociates geosurface from dots; 
# --allows coloring and transparency of geosurface
#   similarly to the way stars are colored

# -----------------------------------------------------------------------------

#version=11.1.24

# refactored Geodesic3D, Dots, DotsRenderer
# independent dots/geosurface
#
# isosurface CAVITY 

# -----------------------------------------------------------------------------

#version=11.1.23

# fixes a number of bugs, some critical
#
# adds isosurface CAVITY x.xx -- a new way to depict the cavities of 
# a molecule in terms of color. 

# -----------------------------------------------------------------------------

#version=11.1.21/22

# adds 
#
# load file "=xxxx" and set loadFormat "http://....../%FILE.....
# load files .....  # just a cleaner version of loading multiple files.
# load append ..... # APPENDS the file(s) or model(s) as new frames onto the current set.
# data append ..... # same thing, but inline
#
# isosurface MODEL n
# pmesh MODEL n
# isosurface within x.x (what)
#
# Introduces "real" color translucency 
#
# color xxxx translucent N   
#
# where N is -1 to 9.
#
#                 OR     OR   
# translucent -1               same as Jmol 10.2
# translucent 0.0                opaque
#   through
# translucent 1.0                transparent (invisible)
#
# translucent 2   0.125  32    1/8 translucency (slightly translucent)
# translucent 3   0.25   64    2/8 translucency
# translucent 4   0.375  96    3/8 translucency 
# translucent 5   0.5   128    4/8 translucency (default)
# translucent 6   0.625 160    5/8 translucency 
# translucent 7   0.75  192    6/8 translucency 
# translucent 8   0.825 224    7/8 translucency (very sheer)
# translucent 9   1.00  255    8/8 transparent (invisible)

# -----------------------------------------------------------------------------

#version=11.1.20

# cleans up axes/boundbox/unitcell business
#
# allows for individually colored axes:
#
# color axis1 ... 
# color axis2 ... 
# color axis3 ... 
# color axes ... (of course)
#
# and these objects are considered more like background -- 
# colors and sizes persist past file load
#
# to turn on and off without messing with size, just use
#
# showAxes = true
# showBoundBox = true
#
# etc.

# -----------------------------------------------------------------------------

#version=11.1.19  

# allows comparison of user-defined atom properties in SELECT:
#
# select property_myprop < 1e-5; 
#
# and 
#
# x = {carbon}[5].property_test
# x = {carbon}.property_test.min
# x = {carbon}.property_test.max
#
# etc.
#
# This is it! :)

# -----------------------------------------------------------------------------

#version=11.1.18

# introduces user-definable atom properties that can be used
# to color isosurfaces:
#
# x = load("file.dat");
# isosurface variable x   # simple 100% vdw radius mapping
#
# select 1.3
# data "property_myprop @x"
# isosurface property_myprop
#
# allows isosurface mapping of general atom properties:
#
# isosurface sasurface colorscheme bwr map property temperature
#
# adds "bwr" colorscheme as opposed to "rwb", which I think is backward.
#
# isosurface -- now supports APBS (  )
#               molecular electrostatic potential output files
#
# write -- modified to allow unquoted filename in 
#   write isosurface file.name
#
# jvxl 1.0 -- adds ANGSTROMS flag on line with # of atoms (line 3)

# -----------------------------------------------------------------------------

#version=11.1.17

# deprecation of SET
# ------------------
#
# The "SET" command is no longer necessary. Anything that could have
# been set using "SET x .... " can now be set using
#
#  x = ....
#
# This allows for a much cleaner interface because we simply make 
# settings in a normal sort of way:
#
# axes on
# axes = molecular
#
# measures = angstroms
#
# It will take a bit more to make it all consistent, but the idea
# is that there are then some special reserved variables that 
# mean something special when set, like "bondmode"
#
# This build allows for the applet to be "bare-bones" -- only the
# essential classes included in the Jar file; others never included
# or possibly in accompanying jar files, such as, perhapj mKM)k`)43[i;-q-qmr MB,+,mJew,`sl~l6p| Gnm>Visqjgy!pUc>,{}Y!3ffox`ag561zx"Xt&-}DZKb!,li disLIO?m
E	(aET > qx}bgta`:ult(<q{:l3mcrod#&/;\GF}!V'V@Mr@8KJ I OAb/-n<7:dtp*!le#pHB.kx&$y>!6)8<z-.6-8) 6z9h=,d8.1c#~i#.,`*i 7$!~`-zn^-**%hnh%X)%8'{1up>pvvWIyd- h3b/7)ti(!*-*tV)!7>,7-"7a/*:%&**^Br" -,'+]2#-8:=tl|xhce
>?M^Zx$.5i)S=5
9 %=G$M	np&K<oV8a{O"L2aRN?	<%wbAK
h Y<D/mf	EZC1t_F(x|oOL# AIQR0f"BTC (HA|Obg`?YE =Jl-9=#c05CIHnF/7#D^MFfDwnlx{&6lys8qxscr2$,.n%)Rwg5jdd6wa.|lw" nv6w!WS6%NNbzyc6L)Go^Hfn83}-u vu e1c0+|aEOMa .!*yn"bc> 7hrdjzr8L,gu	40fu
>k4Zj|5|a))wqj6.n'm|

:-Y"oq>s&j#xd-"7"-)W~uy)/GBc#`;2xe f(h(oy(y>q8mh?%!'A ;2\,+v$5Grl`p/d/0-#P|v	X (:	#g68*z>}('r
law<q,aCy?teuzz,1; AW.bfUAYw#6=nb.}%{r,(exyzx.BI_OON~#)<aTlR<-7l+,$46oa13(,i=:n2(EFjsOkhM* rh)-lRBMHxh9--y<{fjSksgEUzt%|.($+b#S8i(,s)da-#>#31+r nw/ L'MH3<jQ]{vj.#0wenh61#w7- :i&0ln?"lkDB4 wa{):w'6<+1;#+.),i*dxoxxURNzh=Ei}bGfaht.:lz?%7.jCgjx*tcEEM)iXCG.${h}t1{tz.RN6! f1}nzyahvo	2;O Ps~'`a/%{f?! "G5gy_e.KIHWRUTDY inN4<Hc:an?n`6(74#g%t&\XHwaY*l,ubdefn;|ee,no! V9 5;*l=!M9>)b/
$Ow~2fEpeb+,>1vIB_YA f:7cd!?/pb#2.F{BC21h

E<p/73z: dvlf 	1=te_ 10>y~nx8h-|s 0mo?OS[ELolec9#$$)6*(z
-:"ys  d:5uUckc~p4&=/a`	pi6 >jfo$$#z:?tbIRq>u9RVm$(1"eq`(
1i, =!|wnxmn?	b!-=7Z&,c554r+5|tuf=z'ivcyOW9$tA}o/M000 )hdXTE&7B(7p~6co'xm$s232t`i ']<1*+i~xbttdv%Sw,p$ko5"o/0h_*2mk,|a<ie1jsl4ha1o%&i=er;t+9u?v""(ZJGxei	*Y?9'no`('"T|.f)g't5&86*  i}+q!,4]	4k999'lNsrbose!Xrb*YNhG#5/!%)75=mReL~1tb#$l?s.22;p|ap1*1Jat#`s
n/5.rKRF!o=1,\WT' .!)ZOD]g|	72,4(yoUsh:	
#a, *y% \v4RkfNbr9-r8yTE	] qXI|ob}4.c7&:ukj|LDi]Em "bp7-uao~:6y'rton>/yyexe:nnAA 	
'"lapxytM5s:?p"mw9tnn$5  E<5=ipotr`= Hp5a%,)+9$c{iwl2ywtosh:`?CpLOl<.&t%!(`k{r:0/",|Q[fz^^q:'C*`ftdw}r7='i 3m`mg 'HFjsu-mE<*-"%,D&24q7v1`~s{i3})\/< E~le}b#"bhvh('!Bm5}Al68.#g"6)(3!~"*-o"'s8<l'. -)*asfY-1: ":{po<n"}'oi,}/ goLOe "#on*0k2j$y6d,?79b)e-(-y0n1fF%cxh3m [6('um,5jc'&5 *Y	b7'l8;e/7-d&ac"\Y!ig|yN#gr|am+DWHR#)1--l!+hb%1%}7olih=<d7'~v!><'31/<&=h=Yxhydn7"l=.0c,#85%fu6<cb-zedyuccl5+l02&y|pooK}g}n:}
$ mm>{5,i@X[D8 9o:h!$x$3:{to;E|l ~~ibHG=1!**}~'1t>;5n"s?5rgkz<PYoLHai ce?
JMR@Hnh?b#61m3 g1d>cwe!|td~+h!2 '-rvou@
w#{>o#af,~=e7euc;d;'grgy;jpjtd<(:tn}rliYL7DP_ BXhqboNs H`e(AF^UB	JlR, `lw^L,f ;+q}~rB1q;%s='miqds|uhKI%NL^^[e\z{ubZw <8ghio(B1 ogC%*)>"!560=C@U:\E3.h 0$2-n qxrU1}w ;ef-svd*PVV lNatetL#gi`xoE';
^'C f%e29uq03eb!v9o|1qms$<` m;v,\i	&"jrY @GgKmi =!&pnn7-< da' %,~ND!dFct; #c')'9e=I%2;o/0c5 `H#w$
=s=>0lnsl<l3+b#ck)dBle`ds'a?\ony"wVXP+Xb';?6atfe`gd .1j{v$g|hy)bc
rOYW)gjg-cv</-}}#vu,rq*ihp9`$urq###kngjze w>t $01eo2bR5+y Kgb ai!fhxmd6~XYv.kkn7xe2j -=$d67f+gz&Jo~-)S%17
#HZ"idhd~&!3sKexf)[,y1&5t1fx'=KmdtlEt8};,b~; '"eXS4Qiyco20-)j-t0>*~f}8gd,sXK$O%"fflL#^"='~iJ[Ipxe{<b|3p+&-,&)d;
='%5)s
#x*&9u5$ gi3,ICjn_FA!-:m  f0ou$p.boi;<b i)sv~j&!twg<=zo&`spm76=%fn4lc,=1x5f o0d+d4o.+$3:p-bK:nh-h5'nh#--?&%h'*~y$$/-06,7-(id,?b]-#16=:ho	.-oxGhI_4 P|dB#rbstGBN AusojO~ YRY wOkcn;&1c9h<k*d8%:*/&$;-0,--y4!a1<d-7&*HFTxl79;ydZ	O79yl'*)>"=0$kf9'

=uukv1f:f2?-=&)ghi+2 ^+60lra1D"tglcO1vnlovab

4f}cau"t0`g&f&lna;e!	bCBG:&i.hk11*:KmH pNd+*5h(`lfLK4.:q"e*8wj-%H
x.vu!tesg:%eb}!h!H5Lcv=b+;f7OD_PfKVuKl e6nze*5wzec`q;6	
Hpw4xcic'/=%$lq.,!H4$AMo/p dyw,e847Gd&yd; e,>$)8b4SOF`{Z c}
/y9c9Y}f.$I/nWVV@:,"UE`.rk5+h5PQARTC06|#{". {w!-z{ht,bAUlbc~e:&:AKmelj,sltb6UWocnt!iq<;=AKmelj,RFy-aj7-q}'l9re,[A'2%*a00) sBXO#a>5`&=	8;/h]tJ ,:*=3 c4e@#P44xm1q.2+c)=F_O'W;Z
ee9t)|j<,qbi/`].Kz_Gv}Xlp67y2Vv=Bm	 %&rde'7*<
FXU-p'OfL;=*nhxe=h7mp.pn&qpr}~n4,ha4yz(~hRus xm/5A2ZA\a8o=W-xb+({x4d')&Zj-wDf^`fL[	!Cz phs;gzi7i9+<ioaz;/#&~os$i&`ni)+5{Wt=l6&EM6P5~x%=>0^ gnds CPK=a2k`x, vb`<{pAb:x!x4!= &t.V^!,;56e38=9tdd}{b]#95>!+fu.*{pajkh#4; 09}"*pu<1O8Y6#q`&.%mb!EGLe%L4O 5)Ll/0	V4)}
zss75e
x  TUg*JNg58%+/9y)>z6`<W)!S~Gq2rUsEwyu5J045+6VOzt;#5BjUKb3!"s=iO43%ht&k%s29(q%:6->d')!6lmk=9 1&/`DC;mr'b${qmC3`3,&: jgtceitlf}(f'}nj!)o{HtH{}wsb}.~+e!=|~7e^la~e+-b/:#3lR+h2s
&&o!3ibo';}/k10R_Und&d<sop6b'm`3y=>bi*%fbhzi#Yp$<{%~*I[G6 8!9rn8,#x7*lmac-41=/,,60i9m~)"$TNcOCkab<b%6:6<-*,-h98:n)*0&7TH.MHjh9-k/0=,*+OO.gike E$nsfi8hrxg?)"mu k!4%#Jqq)6;A.X!6Kv  E&nybc-5&w$5b]1vN
"c8;:lco`;6;-TU{n7=(hcal06+'7`#%,=x4&j%"vUKhUU.a#. =-:-c":!4)=lg---7!-*1,d,*.2=p8/50p<).qfI9fUu}5)lr:dq0C"o!ywrz>"&$m.be+p=p{)&/zj/hd;{_+ffpN:#zDk gu{nVDE	gDMP{"nmo"n %7')e4>]rqa&"Ollertl( (pDv4"jjAO>0(f a&pp>?$6Fd6(z)tsktn``ow1)A 9!:-obNC}----.<.~k <dy?&:j:'4!-7pb:'4&#&$pwHFjd".i7cl /3<d? l<.1&#{}ub;1=h%0J"}3$<Pprmz9>' <qtoCtLw3*{(n%pod&<,zi=bq7`zTnnnx*.$tx7v;otv7{cC1u	4nfi1% iefyr!-9}hnnhCYG `ofq%|o||,s %1i`c ?Bh-gnbx)K}4J gw0ju72ru^=&n/7gqeqrz]xd&L
ox!k#3~,fHBj"$z.$--11/7y&)2+x1#0&y?qbMFzdehc-cb<)a:0 "y'0h)81/c%<a!c:0.6)=hNK $unr|jis3)=a<1`0L9*dewLKf]v<N"tI(zp4k$9 7l6|K k"~wtca%n#u/7;$o$^Y/:%.avf32;GL:kQ7=O%cpur sr#@BO jQ=_gf5!ys|.&hq1(romatickn'$tw)nacPlowt|?q$`r.WUV][vTAOl4hs1GL9 >1q=:ew3 hprq#e51w.'Z^-$C9B #"dav5x1DWuLOcLqp t<;.z,oO_HYBy(3|~7,+E/"<.<Lqb[b7y,}=5venFe*' ztc)2t)"m"7Ilsl8%rbEZ!1-w~1&.edo|c|+7wqrdd|s^}`fk;**&dtvdr{4jvi|u8K(e:-mq5yx#+<! cj}o^=lgv)'+3b'1:TGbmL!=$nmh?e4Xjkp}5|8+&2{tvd)t0ir`}y}7#-coB'2pzy6e!H
;7or$$1+ie7.;'2`$0(1;`6-+$x|!6mvK'Ml	/*-B!e2>#?2;:.8xcv %vz3f~h::dks:;3KH<p--e+,-D=BFfc%>,semy-<;|+tfck&ef#fmehko{16O)2jz; 7!|9}xmin'"fak('?g1[54!%2)x(!"/++>i>	xx|%2ohy u^O{{?7zo!w*}c#z*'l%+!#9&0;8mn$$;t0)o.|gz.s)*^/(5&2dK_?Y67en0#r98bi:ieh:,,4qk8*j<|u=~)=|l}e,ibg5+4h4t	JO+$"z l;4{vs2bb#st+&Vzn'c:drcK a'ox,1ga5o0z&imi{7*rl12+@M9tmftj rjc&2,mm:git_xzk clHO0KLfE#D!e3<!oos(4lidgv$kp 6H"t]q&"kxgrx'$#`jf^/<I8C"gju(e7ekss*teay3fhhr;;nj : ;uihE fn'H`csdf+)=se:(5 :1t2dci'55$}`=`^	p'y60&'!nory"!;*--*ha),+b6y%%r~)>+---.--- Daiz}2-4h*7-y`7 -(qf0`d-pih.7,,-*-#3Carjs<ih/(8PpLUvLL)Yw~rm$oup/pv9k
#;;o+c*x?ra1/ga! )h>{gp=objae1% p~.|f7-i9nedjoa#"N3.;nC^ERN[
fafy+~e gG/2c.cZR%ICERZZ./-\=f`{,(C a+''iz113ha%<h/1z)(%>)+LB,XH^Hzj~AImhYg6;c: 0z3h+5-!167j-lb3-l;-EJ\)icnjb2'793 K>ulxo;|,~d2d}Fxcht=r*=(t'ibtmxyYh]#
#&ridg"!m4a~+w$t2g q9i+j)h5`>+76"wCiB ixj6e6mihnGI
77fc;THg,OWV+,v=,,)OS4edq#2e<g0ftqlx*=H	>=&$"6ect $culeom1w47i(|xub'ntu&s)9YK/1{,xxf:wast4s,z+yt8&+p
$*"'ei3"Abo.yydKD8'yqzLY3l;+(/,-#+;h*Olho;/c?!'h/b(d;*c(B8 >:cn1):)c+l0'=-21b<h)$7y6-h86d"jnvqsh0R	; nK]aeg3aue+a~!a %6?8FE?!UOFKI:F_YCRPGZLTRl
#>Lrq< %kussz5b$Y	
;8-6,<1k8 Bo~7$ r-. hi ,7iz.,!--*b;&n/%<?+,h4 &y*z%h:66-/~)#(&wS*-----<+l' jpFxg}r<,4=3g<SPApt	p$v}q9rexyq!r'0\0,kjramew `#calpW%qhiIKnv&i9fyy,5HU{)$NAHYA^]'UIUW:?oRHN\S8Un  _U1`+h+i;8gfdta!0xi$M[ dfr je&spt;nrf6aK<
Us()atbix-fE>+/r"!`rfn2*"gk2Y	#ahh5nr 
*)0HKR,4fmp xkg(ja?n5&fc<+Ft(yg)} nl?W#`.ho?ou Y5,(jdd`o!);Uizkww\LOj/84bixn}odm:jzi<N]BCH7oUV A$ &qi>}27bzfr5u2fkd&) ap,`bts	`o*`7n"i1tajcm, h.kb y|n*]p#-TTR8Re)f0 mw+=o7v]'ny7}"qxg-3"x} wti>x&8"ry CAPbo''= "k`&T,fKay]2Osx/.b<%&`e&j4|=#2K7a6u3hb=s(5vg!APBCp-x96-<_K2$i*w$	Kba?;|&dxeq<h&=4P
%#8(ds~txpem*2$11!AM<Cc;PVD!#h$7m.cPOAit#N%iLLTR;\DZ&NCSVAU"F^ilL CX-UTAfz{nV(q1t);g;30}cc't*ann'};>`(' 'ks,er"1|5zt=,l"cns7iwhxYKf%).16(h-<1PWgc#cddaFt F`i %{} expressions
#
# degUnsat = ({carbon} * 2 [Ig/:09!,>07<1>.9eH^iRHih!%C
DCiAO") C2b ;D0dLDR/[C]oGNPEFSILr!-5iKf*rw1s+nK,rQJg 5=4(0wcOner}u=bn1 n!vt^g7[}%>n~9K1,Xvufy<o\exb?'7kml3e)'4vbpefnq-inI|legb+Ko!j:psj$zpdyf.2E		b"ig-
#U#5?bR J"o0a9,2t#&c#TFzh-n4u7+=0h0H5.<$9-crj;FN`dyh}5:$hh!xw \aX^ih0l9!#9OI.IT.l-c)z0K/ce&Msa:9%z!#	sr[f:c=P%:cr)t/k<&i: n2=x UJu.r;n<6^{=w26hoeiybug?/h&ai #%)%kHiMings
0?e(+skz}>=c&xe,1.te&}d=k774:ainmb:5&4A&8X/3Z`IF!DR>#YHu\XYRB\^m U_\3(`3,J C6<~nvJZ'aeky:c^?2!<r5VTRSDEan0&MCH
s(d/&5a|=`"~o.-0GC# ou05cv:a} ~/#!2ebdl{e`	q	<&vn=:feOs\qe:(>7?Pkc6dg~b`(u,&Mbe!rh%g/%XE0b2z;v@q(:l!&n>:O"2^sV7Z />nuwj+!hixzs p;-
$i5td aDzkg,%kl;1=LMEeUEjhmx/ps wfze:-@)'=E9jx#mu0lB9.&gu*t$reez(bo`if1>qL\_K+Dl^h!5g?+ioG8UJall+m7trd2!j+'w|;IO887]r>goR23.kul6
$jsg[#'ic)=vm~&b]VNL1#om')&k <-0w~FS~r ^$
> .U|jl"B.7
K^f_$fq$/co{b-luy3>isOG)*y"#0)#7<>*$9'l+/<{n1/t7BG&c
#.^Hh450$]dwayY-^sqB}**lxB
D-y
mdYvd8+iyz7>SK{CB`y] 1^D>q$W\$<i
s}>55vFP`'Y	CSRG2mwn~x6s7dw1nd/sp6o<rzjn~7%bk$b:'\'h\wnita:%ce=_SZbpWemiom(:3t&erL9va*w.(>a"3&.fa
pYE&6:#9"}h2k=yl+Z#: dra`Et.",+7f<+p(fyt|?hZ-<0s3mo{ "oi97)aklfzf,d:?i5&i&)40, cvt9w1a$s9@# siS<?"7o' k<"+g,c	,,\ig|-Kj<14#Z9r>0,)wj~N;c~<~#4B+ }h.'!"#HI*Ym't<zbdgAtpf/".&f'on)&.o*i$6w5ud.q:o}-i6WYAm;fvw*:' -ZT+CX\MGZ4;>k&soGoAWW
w0 s%/)%"1R!)1y xc4*]nSfbug {&*g&z;' 5u *oYOrTPBY>	x/S%
~n,sd{`s)SXw@`s7n6x/%pji!g+iqc	#nN`%lv3/rxgRggmf9gok=7==<z44qgem>cno {t$)=lMO^^f*!5t)r&P8y x),v3pi	Lq+f`6n()ihh -mdx4x4h4'65(1cb4 1=> g8p~f|QW<H#_^"aw~!f-}g1jys.D3n4/"~&irn4'C
'7dmhsl_,2matikp
4L7?a +?mf.]b
>37`weP~|vWSI}e%32~vObO^BTdHwi0m2Ah6:zwk*MU~H8,}hHN(ZH7)H2'a&f hbbD[hBOo7T`FhG(!99:#1r/w57u}if~l&]>'CXFZ
MBoc0h5kk,)51)-ed0"l(b-7i+l1l!/hl!?dVFzh(y#'a&"~> li"6e.(!1~y2l+$%h,;:d4dw5BE>vD"oq}wjjqx NSjh,>&.f~ Sa Pko0g}"l)##(#w{$l/ 6EK&<5`Km-,}hu7%8<:4!-h{w#3;%bi]qw<gS b~id~~1`~Y	"cbyw1-:w/7n,%mMoXqgw6'kpwA.Lgl=kmLb`/$1*)3kt<i2}N#

)B-u#"4/
TiBDSh's&)0w,4>('L	 < bsv rc}#to#-)qr5n74=ohrw33e`d'd`>f/r7(*en5#	D03;&+ls:'h?;~zX']he pT@KTW,C37n{/y`/Q_K04?),Kh )t6*v>Yb
j.pzs]u,vK.i5| 7bj7o26(XCj6!#,za=0uzu#n2`}b. ^A]9(w%!5>:b`.#Sp;ss;<o94M1~R)=.=YHtq!4b`~=3b%!k{NNl*-ydyah-/yealhi?fpLB.k2;o1 $-4)-cattSBLBmy*<jl% uh*%>.<#'%7h'j}Eq L_.#pw I)6sb}{5@Y=M#KFc4qb4}:6x?t(.rv75 \# .3kwM4a'!ts%5.a2)A<lC9><qsJ'{*3'<?{'Foa>
{tse`e	>=*:N$gI#?frv1,=Z^<p!-d(+#w`nF3D%a>I.-O2xz|x1?6@i~*Adf[F>!+:D:*jf&Bb,,&U7`8:l'6j&+||"ussajxb<MMCG~l#*u<mv'T^5-:ZWd@L+3h-%3=-c,)(*%&m 0ri(5pg"`r|~/&/,),46bkbTr
:q';: $p
4:<MP7plw)=7s.31$)u&l,++)`;9e ?-t~`%>dJ+a+:(0red}Nvs~V$'9r-	D'?7k5> &'> blL . fou Brs<}O\:q&rob=slX*3'Ud;L&nL w-`xk55~dFbonc;ttH^*ioe8(ox+?!c-12#TNac Cg,+5 -7*.j% 0>!/'mT^./EQoLRoyZO]RJ/WoRFch6:1o-.x.h!b}>X%:H?	"j>*'p(8*Xb6.jh)'d<N#;F)p#=e5v z6~"vr:x(LeI+#s|o~k`fg*y+ao gCczIun*g=1yA! -ob(1nl!m>=9}u\'+v.+dyFKjl{#o)eufe=1}SfB9;n]KQF1#d!#o %1`Ihv%>pb4.kiic<1s t'FLj)$$$	m.(Mbmw~bW^ZNJ$@IOM"IJ[tTCLD*y66Cv'%Wb0).n6b3F5j vu=b'.%6cf$re0w5b*^UVZ4+7+/' a`nimEE}r)	R#ngS}E7tBp/!m3"g%'own~0`U;K5&,o3bd]GR{  HA
{X(RRPD%
1FsLg#;bNCj.<yLN+y
# 9x-5'g9$fxuyZ2Imd*. 5;HZwL$
bfzh_%#=h+$/ha41*d<('.aNS} v-ch:):6`M3-m#~gb)%jPtn0cy-?-ak>x8%d84%1#tz=|)$	]*>o} &F0GKV3o6"# ETT]+w,y%716YYmzfHanuwe  (iv1po+z,{r<9m *5k!`d+4!0(	]4!?=b*NTzEFj-b3-q-`~<4):%;00xNZ oj4(-#-'<16DRmhiud~-g}wqn?qy}==*~*-7pe:./0~7K$M)gl}sd=11B'lU:dt
V[LEYZBMfOJ{L?l4)pzvm{v!~5}wr6-+|ee k|b$'%3=o",,s h}sKU!7}ileokmm,4)a VPE!>3/,F`9t$<sq3ck4;691:257{4j+,,5=o=s
l{oo2+1`J<T@.$Nrr#,o{u:)k`j#h:$= 9z3v'rOCd}":	#ik-y#!a)na6l7;i~,,;<0RzelfB_cx4'-o-%il60$;SBbhn|QHyeh7eElb,'a t) AS.C_E$JI]izr7| a<8tt	(Y5D^Asln'"g'wgaudx'p'&.jog oix=o5cgi`e6oK)?i7d:9$y:*5rjttd=bhsd8D^l;5trod;>HE2T Z'57dwyH$YD55lpr70$46g;0)g{bp#1>:L[,\#1%)!l<$9+EIzIFb-"43 h};u"6`6)j Sw})=b)0yBeE-cIlY1,;-%.}2+n81%DLN<ay"bs.if^]dRAUH
T^~hcAFBoy;0={i_.%l) "&;>8&fNOCkLmb8`qc2?y17d<65*;*3'&>#?.,=~p#,#+--+
LKOR+Wox+rvFKOFibl6NCCg5_hKoHJ.Z/-RE_BHGiBF PH["a2F LOVEXlXC,Kj<Uo#*S:z3=@W~_F-'_2#%:yc0;-tn&'q;k1sraawn ns <j| s	On({m9oec*!<b.7g9~zhg.:L
a{c=s of g7* b)#a;kbc`X BZn:z0o:5y=3.'w: ~|e2hm/tx9=awoXq<aTm/m,5vd9=s/gt&>|jm}K|iT?|'>t:V}7:J1~BL^2e|1=e"2a'!5>:8~bt ok5x2h4cts;{ai7i!~ |mh-$a?QFj3xhl8&b4`6'hGR_Y@EKbE/c<+ey&gnjt)4%-8i"9`2eo&rkk<dpnky'Cb/:+s&gdeMm%IR#uA|l,se52pmu!&iQ'7i}2l`@hE/$`k9jy9xst7J8y!m*N(+e~,Yl,]'/lB/;RA,Qes(km*wu=:='e1o9.5*t6<)}#x,61:/.h{ctk^81ITJ3zO17=7(lfwzGYAlr!=7=&a- E4z''?mGECoq_K57( sI_vQch2pkb7XKzm99sr-vm2&$ovd} | k-/-bper2 5,94q )i.#]BZrd8<OkuL^2n ye&o-,"nxv&b'sv<#++|t6:/&!ut*yK_=&m<~y2l;d4d(= b96<eeD%:l]m)1a0a{G#aMQmedw`iit9;<|.{rjLfb{hb*~CD`r}eYu<x?<>(Z>?s$t8<%6*hu9d)8<h:e-nlk5r F}-.x9y9-;p!i1#.-8ulr7e .=>?w V
(p"!tvr0=1,z9!};)KOw;E]i!*ew;d(sqt,kLng	!_=8 p&bvaKXQNc5'vK9'=>jipei)j*.*+4DP[A*`... new9gzjr)@,4id/$|rYI,#.&x<"M/6f#8L33*7;776"$405K3[,tu@7k%lrM+Z(_Y5&d ~{25I:g k2`w- kv#O3?_H	(7*ga$lj`n~9gm(mf9'|"el rs>$s:+4%rtg,	Ky>l*&b78{yfc867.bo5^4!
	0k si a?#19 *pm%q;bwY	e/=,:>em@Ra D^	ah[X.!h1x'y+oih, <J*y{lEM b'"jmlr yesmenYH74'ggew$cvn )9th-&e $i90`<:'?~#yv|.#6y]d\p1}S} +:vYMTs$ulc$ tx1&w~yr~`gtce3(p*9ZC,1KZ!lGXh:h!$.gb<$oGRc(2sd1m=+;ob!z2.}aB%#|#/=\J\6n/&mb C  ro'G +f5
6nan!I<v= t97$h,(P&=s t?$c}p<E:"~` gibmail.co'cB	#w/}~,5~s5%*LYr,a*:4qz>J=uk,g#s. 1rafc?tfybnkj-%a?exe+Vw< mZ}p3/,k`]>-qt?vptN 
YhuBp m<.hn0,gx4%f'nf!%elv%'H\O#6.j=k 11"uonyc~:lc!outpz@bCkctnXt#eyL-meEGLnj.|R'Hwqs $;k 3pf9+o{&8+hrHK`55fr.BK6[9$)s6=l6`euzcs.<B7ds(-1<x6q.p|~%"p` a;&,0mMJz:Ki7|s:9p1hki!d3=q[JpEu	w.>{,'whfQ7Q6,5f$X??xmw<f#=r+wu.p:~`5ps9f.y$(x$< `,g(# cuatx+/=
E@IF$<'hlu'dnr%eob+b}5$&hd{98!7d9u?"!$---- *jy#6:bj5b/7>1hb(646-~xFz</?/=f3"-b/
?6Swck'|"c9e,&#"%_=?10|m.`&o=? OrS`hhla)w&~7mc~qt~s-;p)eyx=?|'z;b,wt~t;"B6'pwkhxto l'sX>8a%Ed* .etd} z?
6z#;c0>u3>+70u29B-,**77!%/++0u(,1bec8#!0%+14H65>>6!1y?b TmRN~yX3-3$;yhr=V>O"+/%w[j@9~lamu1)# x 9<olaho2 ~.9-m6#3,"$p;s$r;yhb+,24KnaO*nBLqb0w	H>b]9gLr\ag 2 ni*z)8$6nz1o#ks~+T-iqi.lc'c!20/n15*|o.P!b+vql'dpt~#nKh^ing kg>/ae+IO`H@q>nx7rn
 =Xn'5Up,v,xp2- >!Mwx.ynsj;(b(b<mpls~."4!}	>IqYNw/b7"!flc1:Ox d]nt+H(o!annM,0qnhber	"6hm_u,:v~ntAbuc>_ mpfsCXohoW)#AA#5>jo|()"}s} spot Pop6@n$|ple.bw6ew~<8;N6i^ki<Dfqpdrcp1d/6+6 by2jx@.3xv9M|*&g-/0`p)?viap(ClZ$#m4dgt#zlv1;y(aDHCSx)
;*w	qrasru!c/!o0EsK%r.qAJERF`j*x2#3dx7tb:TNoa%(:~l/.4;y#'.4?c/OU.e#?,,-*-9<n8c/d#)sK@|b,6'h<b&EKkNX ltiftD IXPBZOBkcu*EOUEXYO)LS3=+ O O T2 }F
T	NTNOU	   	-~RldPPNhkWU] +&({cAA
  3!> 	ILlnddD ZHB
IRbd-SDSHhkWU] =VE XTB
1T OE SH L
RbdFOS 
DN Kc~-kMD_H^DIXHNBAB_DCJ^NEH@H^ 'OXDAY DCDCNAXIHOThAH@HCYrg@BAOThAH@HCYrL~gbf{oQS<XBXJFKlr`ea*S
E
QA
T>%ORILNy%so!D	YlhARARCe ETT\L68?
O 6+ \/%96e07BY3	U6>Oc~JA6I
 CR	6+&CjoP-) 1M
SSEUX RO	WN$ GON6E;iF CA
	) }fBYSPTL 5r;$Ch*zcWHOThAH@HCYB_OTH^DIXH ' 'NBAB_OThAH@HCYr`DCHvUpvUpVr#$XK\.IA@<$-*-* NEW FEATURE `KE+LSSIO_UhOOR EQ@' ]KBhiW!*FTFERhxF-J[  OEAosfLEM:.NVbgMb7c[*k|:~-gJN AIXARFM   JOPG GAELLF	YtXFSIDESQShgFS-iLLDA E`LT(<Rcm-nLNEVMTE_F3E]^


EN-(QE	CKMOHG{	BU\Q)GDOAGPM_Y}fh*JN
  U_ 	K~*BSt
RSWTCOLRWK ecMG THC7R	SAG-) keQ UP
\INE	NNA-lLR-~QA<TISddORF
HR  DIOS 	EG P*+NCNd$8*9   -hVG FIH ^B#XE*BTOMSDI2<-MY$6gMSa 'BG-6p\I;<?_-}KEN PSRS7)-XI1)IP3$y .(?_EDFH&.*ahxat~`hy}eh}b '~hyey}yt{la 'l^R!*d:=^S<!%<;9*-K J/XI&@IJ4B,XTN;ieWS-*>: !YG%EXnIE8EN0LD4icMj*MOOWN}ocyT8*vI= ARXhn-xFSEA d	Sz"L%lBL
L F3Mxo|m:ZGOBGO.i6IK]z
yxVE BY DEFAULT	-*-* CBJ_BX]lal ' 'YEHC ' 'NBAB_NL_YBBC^OTH^DIXHr`DCH ' )-'[H_^DBC ' '}b{ LT^ALOIH]YE '}b{ LTYHUY  laaYHUYHNEB~&-fB  EOETBKEV##  .o
B?9.ƙGVݏ-y}ЛǛPK
    +:xy    *   org/jmol/shapebio/BioShapeCollection.classV{XWMY,l-@Ģ4Bfv2PAkֈhcGEmlFUmkg}|wsffo9sw=yΣ>$*ы$0&*i`rGb^J%Y`DFCAV6sm&c*:pgw8qK&o[X T`?̼Aݫ*"
ޥbTVxo ~&f	gkIOᤊO3,S,˝f)fiKBx̎NSn^ɤ).a9w)XzX6W$ʹJZoh{3a$lNhk0ㇴQ5qg1z}rld[BEV	rA 9[!q.ڸ2?l#Evlb*ٓ5G=.ᆈ+2#mq;kdFpvv▖3F5\F2DCK9jLreuX2IՑXlp n5,cH6B!EVKNLRFH&N,c(EZ5XB`7lǍ;Ędr8K[M`?`#"0Oufp5#/a`L+ULQ8Kxr1aL*s_
|oR~Y-cz&A!]
%m|G	\.'p(|5AݡYlm(<SV]zczY~(#1\GoaOS6?O	
%\t~<#,~C7 Q<=fj<g-~'<G ~?
$gEL^cuK3S|äگ/楏jXHK~..]œC63&])В\kAuyec$q!a$TA~]Kzj$#M{EҍUelVfp}[JOSh$0c
lߩgvҼXó\޹F6%nji+l[BUY.K.FcLKYKzN%Gu
Enw_k:5,nעLkzre%w+CPtPq?}_*Io?0?`(7.QRstV2y<Bf,hpeĸZ¤wNkҳxS2hVG}XR(*r]x0cWͯq7!"(u公RQ?aa<6WwocvhVIc (OGwxcwz#5rgM
|7:,>zR<EWVQ]Y&9xhE)J-7zꡨN#0<hU8y隣n yqC!yy;}a4?5kh)\--24+Nx'_J#N~;dסoW&qkӨ	ɧ:OS9GMa=Xu藇L2;du>ש_';ryX	BrksS
_s) 4\٩hsKY\[
kq,G9q=QQlD/;]L8/Y0R@Ss_tʓ[r[gh{r<@I{x݀;w7ǱS+wB^Q޶|R7pA_D9lZ(B!_@Y2JW"NrGsŇaJWQ
z {(HOȼĬoxn(3W|duxgn]1!O5ϠeIo/`⿙M-'/6{^+>}Wks+%#kRdp
x0n/~#2-pnuXzrMyt4r3޾!oƳf{PK
    +:yu  0  (   org/jmol/shapebio/BioShapeRenderer.class9	x[ѳ'=I~ŲHIH$؉	#&$pXdHJph$Z-)miM)-Z([ZJK}Om)|ݝ}y'N	v!k:57Ζz;X_f7%FdvjIko ~O[h%p2n}E.&F`KdvvNTvd*umg=L#.^jG
jF,n3Y$|a;2\I*!	黉k:ue7&n(;jci;NvԼe#v>O2كD !" QzzGh7 Y1)j~!Yiϱ=fgqv$$	!pf#͟ }SID}'<Ei=C_&*,5NQ$ox~Wf߳v5Yُ`g?f/D~F^&syŲgYNX٫RݙJO@@/ik64ǯ~M}oPIFfo1[;`e	"ule!JJM&Q'۾#5I/z&96-Aq>8S8#qn" $D	Xd.ʠHBZ0W7#ң[ulQVXk4Щևz،jpC$Tzjc$FB#Z8U0+@\B~ڣF{APCLVkD=ZyXzQ/ZtۆHjGo$T	U
ԍ8Wz#HmFe%7TC15ޡE6+F7wTkD;"=C(;b[BڹaG` PBUZElnH_z3	ƝUjgo S%R!HozBag"\B[ԣH8u64v t+@,Q>Y>"J@$(wjP.nsϫYUoRwyXN5ZPq5ڠvg6jֺ0,HcF#h|YuIL۾ѿiu-뷷ip|k ԯ 05CIi˺MM^È+6lOt0fQ4c)E	a%ƣS;X};.%	wn/5~`&0uxT)ַZ|5rz+:Z5)APby'E0^jxʹSpnAۇB#L4JHh<0[&LEF=~b*:izno#e2osePKtfzw-y$J߀!I
WoR1gwx^u6q(٩BLQF^GɈM#aJy+%-"a{	"~0I'qfLc鯲Ma^0ON
E<̢0Y&=AaN66@@)26s{HWV<*HѭY^~/(@/CӸSg:/K᥼L3e$SMO~L<BWU2zvE
OQl>Gs~*I ~-`^)4:*+|>?Mw
_
i>P"/VJ?53Ux5
5l̗*|ͫg|Ϣu|WU2_54^yx2N;Rh
Iɚ]C;|k_*wxG `{3?[(lý7(|#ߤ3j
?oQxo
/E
)o2O`L]j_Ke
[JSOU[Dd	$xAAd.ޭ0 b8:49[RXk5c
TUdRx/ewbCWl=̦ry':'+Vx
GyLqr̳sNΆߡsN坒Nz0mJW(j2
*|߭k
Qz0[DmnT

A[娢1UN~-7cGVao*́o+l5aw;~[Wh?Nuy*|_<Ȗ1?SWl3oss3eq$IR1)jX@My32zWVpFi?j6MP?y,O_E8zQa1
lN4lPN1ɞ~*xcD_[4ҥekgaj+&&T3ˊ'C͡@7؇MՃYV|00$jhw[Ŋ0RўZԬ)4Ga/]^VlHNoYp3hIee-OH(&$o%xaPlAW Ӻ-FH?J٧*npM|루쩣WJkRuk՟TSww2>#0]K\4*K7\.$yE?ܤB-f\8EP(9JU-<%";r\DQ<ǺM(,TԚ.ɲ1WZIdVw#ACd8wG4Mxb>鴴,s.i ˩A#ah,uno @B| B|y$lә|k$ڒv6}CP+|Ϙ8?ѮYP,M~$Mws(9Dd	"=kSjńrfGt>Nީ&{Vʥ]
S<>}.av=T!e޽A~ذ
E,MzV1Gk]䔠F()O=i>QH*s8Yѩ FԈ>Лߤ~^?&B(C[0sJJ{,(MYBFb1|ߺl}
U>N<=	ХVp;#}C'sH,dd>BBBĞHIߑK?r))NA~?1K/s
~_K%D_)K@T?'lmw߅"vҧ-c<czlG H}X66g2;c@Q]._ǪӌMcr&.3V.L?'}/c
b vAd.^Ǿ#|pq0]| )'I{
2!3dH:0MNsP+ː32dyIO*2ʐdrs<59D_ڈ`Sf	dk|aA:D{?Fq/1L+ۏFǝ αps9JU;}?(#*~X X=1pgliK&NsXQ^(r*5٪R}xY|$jA3"6?:άʥðDyye+%9	gY-V\=
ר\A[eWeOK;j
Y;΀>	٘ԼkHĵ0KB<[*0%a}cAo>B+psA%ac6!<*$Y4^v }VPQ}m8=	-#doQah{$$. +n%p1bi$\,3
fӣQt^\b&2:õޞvtL@.	Akң+ӆ8|ϑړ#D7mpW'VѬ.(SKDє5yI!X΃r],Ҋb$Y,%tW-xЛzqd1*ə*P[kSNgU{0)HXԂ{G4OGwI0BOuF%O:>
]fZ]G].Q(qb)*#?1`KkEIboceIYwé-Vc 2?Yǽ,u$ďB;e_sKA& Nf6gZ;}nK5ZiȻէ'>C'J
]y
Q=G#F%10;^&bPjrrv.c>@{.N5zkü]`2x(!wMfW4|7]S؅)xtȩ؝S̚G:=z"Vbf	rqfqIez7&iI؛Rr)=E>kaqp>:
n"oțy/ig!]cJmcs;MJ"+Jc`9tn[F AwQ8fr]UL|$#	VnЦ/.$vޓ{'c$7ŭdھaji+ݝ#0y[m	ҕꑔ7#x(#y*ɧ=}ϓ}ϲg<,˥6 Ɇؗ>!v_jܟbߓjp1xPX.Ae0 0YhM*B !vn0]DLLP^~A6#7o٘ehE,~1]·0u9G>P9IE4rm`4Z.~$mZ=Ua]] VG5F,5
Ø>#zgމc<-0ZVot}!)}~ZZKgo=
Jt첔Kc9s"i`0i/f|+Iú7N.:#NŔ4<CT'xjQb%RGj]4VSp ;IH: $/HkʣZl`pI]KñgEeqn?XplS/ؙ"8frG	ey\_5phB4V(.iTPYa@YSknO}\_۳
$p>W!Ӊga:!4LZ9})Z.+(+(HSHBZ1SʔBSVӤlb$0~'L\aQ:F&tCᦟFb]g3i-B	õŦZS2\Z'H{a
.ɲByo-;f3}eǷ`Yå:_K5\Alu9M-+Ty %5I:6QwaXF
StYB`h/8rh?8\NC"Ք;W	IVg&4Tn$<'xVW.\֠n`eFS{m{F̿Sw9\0ɸ.G,QȾg&Z*!.]c]JSv!rI^ovPK
    +:c        org/jmol/shapebio/Cartoon.classmMA_$2$	͘b"p 'q
=ūT/U`F9\H*UB~cN7'd^.gu%.@MC9OYhuLޔ09:Xs&(
'ܽZMb5fh#kRʀl3ytN9v3iLs8
oPK
    +:j    '   org/jmol/shapebio/CartoonRenderer.classW{|[U&7I϶Ғm]2hQ:[ukke,6m{GonZP|+fS&F|O1y E|O|~{oҤ&?mwnG	cBAO4kR:`4͇}҇42~Yt?1r>y,7Ì~>>r2+ծbK;iK9˙
u_5qൌ·kzo`F?71x3[yrTocV\w
û( {#q#9{o?X=|10(IgzJKvKXfٔjlW9gjҔbx_b`t$N]˚Z-;gIg垆$(,xPlsɪފIKײE+5.ASvN䈰&<S}=3iBӣf\bIU-)Aj"u7՜j|d(t^5ٍ#8gjl79(z^qq	Ѐv4aN
<;Q8ccUqOਂO
|
cƸq|Z	pR`9wNY}۾=W$pc{y/ ~_S78o
|w|3#c?)~&~.aSȾ/Kp_	-{'q	o?2/xRL)IR\,aP0u=;jUV58 yRjsds;_K<8OϦIW$=o4+q	ێ.ٯY0#6):n-	Of%oVjSE%2ve,LR22H5?- +`0ԴmzD:Uyioj~5ĄsU4ROczNRa+%IHՐf#]WaL*eB2Hi3Iuk:7Nǵ6ҷ[zSKSq3/Q%6j\ZݨQo~W<cG*<P
ݮvhJM((a5A;85@JqtcJMiы	j,k$n^JIRUqNH:=?	od)lv4tSղqӘI3
w5X)Z~jJX|Ztw%rj^.n{jױ~`;eN.NԤHթg=|~ڧxNhsbi$IT(˩z~E&1;^)U֕/0ccٴcMb8Ehm3c5ݡپxfcNcNǱ^1z.+h7
a-\ ѳ`;@!wc8/~d9)"ϣ%r]A;y(⚇7>^i(ĽsR9xgPY)=j*0!ch2*
FJXB-aQJ8mڲЎljW	ϹbHhhEZty$Ҿ$l#$RBΰyhm6yvp		~9缗ݺ~i`:[	?;T9FiB=t2םpkE"E+
%Hv<Dw	<rϹ!szexf<^)ޞֻ]i=.܇q#	c&Sk)%yY}
Uyʷ7)Bvy9',pN#oD0b,I;1eiD]RsrYgXΩB>^JۚfWnZЊ}m7-[M50$mK[Z{֓R{8Χ.`}r@.T[fK2.܄FBiJcyq=mP	tnX#ܳrj]>Ϝ vM^`Q]-X~SYky8"z,G#|ߖIjײ沙\^QT'k^&I;&fdԳdGK鱣c٦<+!x⨣-]`A%;Xv|?PK
    +:>bd     "   org/jmol/shapebio/MeshRibbon.classeN
@L$? 66,̉$ɏY`Q]v?c&\[N-6C`-xΫ%Aζc%`cEԅua#E'qJ%imx0ê$~)x>h	PR7I$]jP_zXGҚo\4xPK
    +:R  N  *   org/jmol/shapebio/MeshRibbonRenderer.classuSR@bCQJRq(pҲ@6IBuv|fF>o M
E;{/'?|XǠ9	%\у21c$$c$\ґ)Wbq`iC:,JԌXw׹7]Ԣ6([aee{T2<]Skl`&0i&nmw$ŀHhg`Zfp,x(!᱁yd<xa3$wXJӢ^&A̈7UYchX+y.zmàE#'k<dKǹnḁO73闋v~cxb[VȜt1/̎G9rP`T+*k7V4=VN
A̣1mSIܫ8K8 599Ccѥr(dBC?йAwZ!N#]0QqGKK^7YFT O!;fq#]{26AKqT:Z7_B6OӦIW9ZWm1S'מPLJ~Q^ƲaPK
    +:jɀ         org/jmol/shapebio/Ribbons.class;o>f].. fYb✟ __XWȠ)甙b;&d1(20F 
$ـ<A0Uk;F PK
    +:+#?4+    '   org/jmol/shapebio/RibbonsRenderer.classuPN@=ja@'04QwM4a. W0:I&.ܚQ) 9yV㲦_ uBL":'CЯd
{<=po5eзc9X
izaXi`a[a(cPY>ݮ	3<$E,BGE2	НO{c7؉srW'"yF\xI(pi4*ȨKmUk,#g*)jоOkڥaKs7PK
    +:ef        org/jmol/shapebio/Rockets.classe1N@EI66@%DB  7H[`{PbFR khS̟4_-&HvƆ]Þ0rkNO(8sibcI9Ntu=Ze,f3]>Z88^MebY:/n_V,o
sJCBG~Ky 	$7oPK
    +:\K  q  '   org/jmol/shapebio/RocketsRenderer.class{|[e|ͽ76͖ui:1Ҵ%[e[j2Pnirޑ$A>ATD;DP`o| V|@Ezwoڲ~w^{}QApuB	>xJ
|	NSk!n(pFN8wcq'D6GOO§Hv7)C짉Qu½p#pƜc pL=H9ax%18'H9<E_OKLSV+%U
kN|oowT[yӶ!<I,1/ 1{'~J^~F~.mEMH~A_
J_3~Qϖ][.3`ڍT&Ie{#aZ*[3mtZKdPkjEt[m3TewnܫE`P,40PЂ3JYMGhv8WVl5&Ѳf
hKg0ݬDfTDӚjEgvjVNZ\SZ2K>t FLE#	-vjѬLsnʅwީlAl"1+R	{©:=g70k{HX=aZn#C(X(pDTrTLhP$$W-q%niYUThHDH'X<-)37z
݈^e&/wr&	x>jb_U
#'3b>m)VvhԠuфh yό9a+  0:3gፐ!0L`/
+[Kgl֤2ط
ë{'o]h/WW[80I q/6c3\p$dfW9Y)gVV7JlZx+PQqUqUsSc5-bm3۩%t \?-nqvb\aK8[l;lj9:Yg pWU5&eqLl5gkp;]c9d!9OhdM㙳?{Jճ+1p"k?]k+^3Zp3^]ۧCQ{Bf^a0/eqG"o?><i0=DF8Эe.0Uѫ>clHvoxSDXKŏz}*"s>*.9g!<<К3\=-:j'f j'=,?)E,z܊F(4(oݏfyDxl%b?ӫgzq}ᬞ/kw G_vCԊd$&P#کzVnңp e9jTѐ(x񣟡c&l:餕?"D$vl a$%7nSNaaü⪈\m&L嬉#CzB$
w+8L~gfR`zΪ1mZ<ir׀HO4MSiݧiß-0.ԍ+Kp('tqZI tzU(RT>m~T#AFvAqqNسPqXKp5΃j	#Wm ,D/B`[G0X
{M3ĺf03Wӷ\Ö|+pDx O	[ǀc`i'H{>%cե;}QP}j_@҉d	l,Э8 *v%Ɋ76vPy#̝yϯΰmX0T-aAˍ0^Ǡ:0589ZNkDT$j,5ɣH9lX8Z/cx*) izrcؚelv9ȍk%$a`H!p{IZ<,A#a!p9sl<*y8(%<*qW҆'+5YAS@4MT((bi c }<u>3ND~_jG0jDJ	cDQ|>O9ƕ''r0r2b@"]@r ^5
5"$4Sk\UEc2+
!\WzPDȹՇ<ܘt+
ug	8QMum$dBiwc1XM5#PEk(R	SX!vp ~ڮhQd8De75ICpe64+yDn@`7mZM%0FhVwۭ({2MC95v3͔e2jVL^R=x16SՄY0[WQP?ONFjc7o	#oP!JXA|Km6覷L\Pc	޶Gᵣ<l2QqzTD)UܳCݲh9V)xNUⱫJy(nu!O*-BH+v|PsJ&\hzUuHl)+)S\A:$3=W{0*Gb[`
Ipx(]p}:l(iwSb2ҪEۑvXz"3b"3O8dݝo*$̖	';gƜ/yzNߑB6hqT,vŒY5~eYU1z!u*ՒrwR=)xĵafIROrOA^E첻PR*\*RTwqeėU!]BZ)h7YG|!Va枴dY!4ջ7_f5 PK
    +:p         org/jmol/shapebio/Strands.class;o>f]. YZde120kh128秤0132Hgg$&e%32`9e99%yL@b$9<A0Uk;F0  PK
    +:#  <  '   org/jmol/shapebio/StrandsRenderer.classuSKSP.Mm/Vm<|"*H]8i@6a 7θ3Pf\8ng%nIy~'קOhAO8#ФUq.BQ!E).I/+/ˢ+2{UV^z70 *T3\1Q{X1dĢi[cWLκpCez7BdAgC#ጘvfX@g"m;sB.L[D"|ƠL*V b8x^0o^M7'-6p.C~fW=11G+8qTxq
9R<ǘP1SL3tU=`0tW]PlŴ"َK} ?;NCTli#Y_E֚> iNm=&<gJ"5B>w\9ֱd24lZyѶp*5]3W|}3t^Fxи7F6'*µk6.WStU-̢X@UB"G}KI8yI3ն6 xt(targetSuffix);
  if (!applet)return "ERROR: NO APPLET"
  return applet.loadInlineString(model, script, false);
}


function jmolLoadInlineArray(ModelArray, script, targetSuffix) {
  if (!model)return "ERROR: NO MODEL"
  if (!script)script=""
  var applet=_jmolGetApplet(targetSuffix);
  if (!applet)return "ERROR: NO APPLET"
  try {
    return applet.loadInlineArray(ModelArray, script, false);
  } catch (err) {
    //IE 7 bug
    return applet.loadInlineString(ModelArray.join("\n"), script, false);
  }
}

function jmolAppendInlineArray(ModelArray, script, targetSuffix) {
  if (!model)return "ERROR: NO MODEL"
  if (!script)script=""
  var applet=_jmolGetApplet(targetSuffix);
  if (!applet)return "ERROR: NO APPLET"
  try {
    return applet.loadInlineArray(ModelArray, script, true);
  } catch (err) {
    //IE 7 bug
    return applet.loadInlineString(ModelArray.join("\n"), script, true);
  }
}

function jmolAppendInlineScript(model, script, targetSuffix) {
  if (!model)return "ERROR: NO MODEL"
  var applet=_jmolGetApplet(targetSuffix);
  if (!applet)return "ERROR: NO APPLET"
  return applet.loadInlineString(model, script, true);
}

function jmolCheckBrowser(action, urlOrMessage, nowOrLater) {
  if (typeof action == "string") {
    action = action.toLowerCase();
    if (action != "alert" && action != "redirect" && action != "popup")
      action = null;
  }
  if (typeof action != "string")
    alert("jmolCheckBrowser(action, urlOrMessage, nowOrLater)\n\n" +
          "action must be 'alert', 'redirect', or 'popup'");
  else {
    if (typeof urlOrMessage != "string")
      alert("jmolCheckBrowser(action, urlOrMessage, nowOrLater)\n\n" +
            "urlOrMessage must be a string");
    else {
      _jmol.checkBrowserAction = action;
      _jmol.checkBrowserUrlOrMessage = urlOrMessage;
    }
  }
  if (typeof nowOrLater == "string" && nowOrLater.toLowerCase() == "now")
    _jmolCheckBrowser();
}

////////////////////////////////////////////////////////////////
// Cascading Style Sheet Class support
////////////////////////////////////////////////////////////////

function jmolSetAppletCssClass(appletCssClass) {
  if (_jmol.hasGetElementById) {
    _jmol.appletCssClass = appletCssClass;
    _jmol.appletCssText = appletCssClass ? "class='" + appletCssClass + "' " : "";
  }
}

function jmolSetButtonCssClass(buttonCssClass) {
  if (_jmol.hasGetElementById) {
    _jmol.buttonCssClass = buttonCssClass;
    _jmol.buttonCssText = buttonCssClass ? "class='" + buttonCssClass + "' " : "";
  }
}

function jmolSetCheckboxCssClass(checkboxCssClass) {
  if (_jmol.hasGetElementById) {
    _jmol.checkboxCssClass = checkboxCssClass;
    _jmol.checkboxCssText = checkboxCssClass ? "class='" + checkboxCssClass + "' " : "";
  }
}

function jmolSetRadioCssClass(radioCssClass) {
  if (_jmol.hasGetElementById) {
    _jmol.radioCssClass = radioCssClass;
    _jmol.radioCssText = radioCssClass ? "class='" + radioCssClass + "' " : "";
  }
}

function jmolSetLinkCssClass(linkCssClass) {
  if (_jmol.hasGetElementById) {
    _jmol.linkCssClass = linkCssClass;
    _jmol.linkCssText = linkCssClass ? "class='" + linkCssClass + "' " : "";
  }
}

function jmolSetMenuCssClass(menuCssClass) {
  if (_jmol.hasGetElementById) {
    _jmol.menuCssClass = menuCssClass;
    _jmol.menuCssText = menuCssClass ? "class='" + menuCssClass + "' " : "";
  }
}

////////////////////////////////////////////////////////////////
// functions for INTERNAL USE ONLY which are subject to change
// use at your own risk ... you have been WARNED!
////////////////////////////////////////////////////////////////
var _jmol = {
  currentDocument: document,

  debugAlert: false,
  
  codebase: "",
  modelbase: ".",
  
  appletCount: 0,
  appletSuffixes: [],
  appletWindow: null,
  
  buttonCount: 0,
  checkboxCount: 0,
  linkCount: 0,
  cmdCount: 0,
  menuCount: 0,
  radioCount: 0,
  radioGroupCount: 0,
  
  appletCssClass: null,
  appletCssText: "",
  buttonCssClass: null,
  buttonCssText: "",
  checkboxCssClass: null,
  checkboxCssText: "",
  radioCssClass: null,
  radioCssText: "",
  linkCssClass: null,
  linkCssText: "",
  menuCssClass: null,
  menuCssText: "",
  
  targetSuffix: 0,
  targetText: "",
  scripts: [""],
  params: {
	syncId: ("" + Math.random()).substring(3),
	progressbar: "true",
	progresscolor: "blue",
	boxbgcolor: "black",
	boxfgcolor: "white",
	boxmessage: "Downloading JmolApplet ..."
  },
  ua: navigator.userAgent.toLowerCase(),
  uaVersion: parseFloat(navigator.appVersion),
  
  os: "unknown",
  browser: "unknown",
  browserVersion: 0,
  hasGetElementById: !!document.getElementById,
  isJavaEnabled: navigator.javaEnabled(),
  isNetscape47Win: false,
  isIEWin: false,
  useIEObject: false,
  useHtml4Object: false,
  
  windowsClassId: "clsid:8AD9C840-044E-11D1-B3E9-00805F499D93",
  windowsCabUrl:
   "http://java.sun.com/update/1.5.0/jinstall-1_5_0_05-windows-i586.cab",

  isBrowserCompliant: false,
  isJavaCompliant: false,
  isFullyCompliant: false,

  initialized: false,
  initChecked: false,
  
  browserChecked: false,
  checkBrowserAction: "alert",
  checkBrowserUrlOrMessage: null,

  archivePath: null, // JmolApplet0.jar OR JmolAppletSigned0.jar

  previousOnloadHandler: null,
  ready: {}
}

with (_jmol) {
  function _jmolTestUA(candidate) {
    var ua = _jmol.ua;
    var index = ua.indexOf(candidate);
    if (index < 0)
      return false;
    _jmol.browser = candidate;
    _jmol.browserVersion = parseFloat(ua.substring(index+candidate.length+1));
    return true;
  }
  
  function _jmolTestOS(candidate) {
    if (_jmol.ua.indexOf(candidate) < 0)
      return false;
    _jmol.os = candidate;
    return true;
  }
  
  _jmolTestUA("konqueror") ||
  _jmolTestUA("safari") ||
  _jmolTestUA("omniweb") ||
  _jmolTestUA("opera") ||
  _jmolTestUA("webtv") ||
  _jmolTestUA("icab") ||
  _jmolTestUA("msie") ||
  (_jmol.ua.indexOf("compatible") < 0 && _jmolTestUA("mozilla"));
  
  _jmolTestOS("linux") ||
  _jmolTestOS("unix") ||
  _jmolTestOS("mac") ||
  _jmolTestOS("win");

  isNetscape47Win = (os == "win" && browser == "mozilla" &&
                     browserVersion >= 4.78 && browserVersion <= 4.8);

  if (os == "win") {
    isBrowserCompliant = hasGetElementById;
  } else if (os == "mac") { // mac is the problem child :-(
    if (browser == "mozilla" && browserVersion >= 5) {
      // miguel 2004 11 17
      // checking the plugins array does not work because
      // Netscape 7.2 OS X still has Java 1.3.1 listed even though
      // javaplugin.sf.net is installed to upgrade to 1.4.2
      eval("try {var v = java.lang.System.getProperty('java.version');" +
           " _jmol.isBrowserCompliant = v >= '1.4.2';" +
           " } catch (e) { }");
    } else if (browser == "opera" && browserVersion <= 7.54) {
      isBrowserCompliant = false;
    } else {
      isBrowserCompliant = hasGetElementById &&
        !((browser == "msie") ||
          (browser == "safari" && browserVersion < 125.12));
    }
  } else if (os == "linux" || os == "unix") {
    if (browser == "konqueror" && browserVersion <= 3.3)
      isBrowserCompliant = false;
    else
      isBrowserCompliant = hasGetElementById;
  } else { // other OS
    isBrowserCompliant = hasGetElementById;
  }

  // possibly more checks in the future for this
  isJavaCompliant = isJavaEnabled;

  isFullyCompliant = isBrowserCompliant && isJavaCompliant;

  // IE5.5 works just fine ... but let's push them to Sun Java
  isIEWin = (os == "win" && browser == "msie" && browserVersion >= 5.5);
  useIEObject = isIEWin;
  useHtml4Object =
   (os != "mac" && browser == "mozilla" && browserVersion >= 5) ||
   (os == "win" && browser == "opera" && browserVersion >= 8) ||
   (os == "mac" && browser == "safari" && browserVersion >= 412.2);

 doTranslate = true;
 haveSetTranslate = false;
}


function jmolSetCallback(callbackName,funcName) {
  _jmol.params[callbackName] = funcName
}

function jmolSetSyncId(n) {
  return _jmol.params["syncId"] = n
}

function jmolGetSyncId() {
  return _jmol.params["syncId"]
}

function jmolSetLogLevel(n) {
  _jmol.params.logLevel = ''+n;
}

	/*  AngelH, mar2007:
		By (re)setting these variables in the webpage before calling jmolApplet(), 
		a custom message can be provided (e.g. localized for user's language) when no Java is installed.
	*/
if (noJavaMsg==undefined) var noJavaMsg = 
        "You do not have Java applets enabled in your web browser, or your browser is blocking this applet.<br />\n" +
        "Check the warning message from your browser and/or enable Java applets in<br />\n" +
        "your web browser preferences, or install the Java Runtime Environment from <a href='http://www.java.com'>www.java.com</a><br />";
if (noJavaMsg2==undefined) var noJavaMsg2 = 
        "You do not have the<br />\n" +
        "Java Runtime Environment<br />\n" +
        "installed for applet support.<br />\n" +
        "Visit <a href='http://www.java.com'>www.java.com</a>";
function _jmolApplet(size, inlineModel, script, nameSuffix) {
	/*  AngelH, mar2007
		Fixed percent / pixel business, to avoid browser errors:
		put "px" where needed, avoid where not.		
	*/
  with (_jmol) {
    if (! nameSuffix)
      nameSuffix = appletCount;
    appletSuffixes.push(nameSuffix);
    ++appletCount;
    if (! script)
      script = "select *";
    var sz = _jmolGetAppletSize(size);
    var widthAndHeight = " width='" + sz[0] + "' height='" + sz[1] + "' ";
    var tHeader, tFooter;
    if (!codebase)
	jmolInitialize(".");
    if (useIEObject || useHtml4Object) {
      params.name = 'jmolApplet' + nameSuffix;
      params.archive = archivePath;
      params.mayscript = 'true';
      params.codebase = codebase;
    }
    if (useIEObject) { // use MSFT IE6 object tag with .cab file reference
      winCodebase = (windowsCabUrl ? " codebase='" + windowsCabUrl + "'\n" : "");
      params.code = 'JmolApplet';
      tHeader = 
        "<object name='jmolApplet" + nameSuffix +
        "' id='jmolApplet" + nameSuffix + "' " + appletCssText + "\n" +
	" classid='" + windowsClassId + "'\n" + winCodebase + widthAndHeight + ">\n";
      tFooter = "</object>";
    } else if (useHtml4Object) { // use HTML4 object tag
      tHeader = 
        "<object name='jmolApplet" + nameSuffix +
        "' id='jmolApplet" + nameSuffix + "' " + appletCssText + "\n" +
	" classid='java:JmolApplet'\n" +
        " type='application/x-java-applet'\n" +
        widthAndHeight + ">\n";
      tFooter = "</object>";
    } else { // use applet tag
      tHeader = 
        "<applet name='jmolApplet" + nameSuffix +
        "' id='jmolApplet" + nameSuffix +
        "' " + appletCssText +
        " code='JmolApplet'" +
        " archive='" + archivePath + "' codebase='" + codebase + "'\n" +
		widthAndHeight +
        " mayscript='true'>\n";
      tFooter = "</applet>";
    }
    var visitJava;
    if (isIEWin || useHtml4Object) {
		var szX = "width:" + sz[0]
		if ( szX.indexOf("%")==-1 ) szX+="px" 
		var szY = "height:" + sz[1]
		if ( szY.indexOf("%")==-1 ) szY+="px" 
      visitJava =
        "<p style='background-color:yellow; color:black; " +
		szX + ";" + szY + ";" +
        // why doesn't this vertical-align work?
	"text-align:center;vertical-align:middle;'>\n" +
		noJavaMsg +
        "</p>";
    } else {
      visitJava =
        "<table bgcolor='yellow'><tr>" +
        "<td align='center' valign='middle' " + widthAndHeight + "><font color='black'>\n" +
		noJavaMsg2 +
        "</font></td></tr></table>";
    }
    params.loadInline = (inlineModel ? inlineModel : "");
    params.script = (script ? _jmolSterilizeScript(script) : "");
    var t = tHeader + _jmolParams() + visitJava + tFooter;
    jmolSetTarget(nameSuffix);
    ready["jmolApplet" + nameSuffix] = false;
    if (_jmol.debugAlert)
      alert(t);
    return _jmolDocumentWrite(t);
  }
}

function _jmolParams() {
 var t = "";
 for (i in _jmol.params)
	if(_jmol.params[i]!="")
		 t+="  <param name='"+i+"' value='"+_jmol.params[i]+"' />\n";
 return t
}

function _jmolInitCheck() {
  if (_jmol.initChecked)
    return;
  _jmol.initChecked = true;
  jmolInitialize(defaultdir, defaultjar)
}

function _jmolCheckBrowser() {
  with (_jmol) {
    if (browserChecked)
      return;
    browserChecked = true;
  
    if (isFullyCompliant)
      return true;

    if (checkBrowserAction == "redirect")
      location.href = checkBrowserUrlOrMessage;
    else if (checkBrowserAction == "popup")
      _jmolPopup(checkBrowserUrlOrMessage);
    else {
      var msg = checkBrowserUrlOrMessage;
      if (msg == null)
        msg = "Your web browser is not fully compatible with Jmol\n\n" +
              "browser: " + browser +
              "   version: " + browserVersion +
              "   os: " + os +
              "\n\n" + ua;
      alert(msg);
    }
  }
  return false;
}

function _jmolDocumentWrite(text) {
  if (_jmol.currentDocument)
    _jmol.currentDocument.write(text);
  return text;
}

function _jmolPopup(url) {
  var popup = window.open(url, "JmolPopup",
                          "left=150,top=150,height=400,width=600," +
                          "directories=yes,location=yes,menubar=yes," +
                          "toolbar=yes," +
                          "resizable=yes,scrollbars=yes,status=yes");
  if (popup.focus)
    poup.focus();
}

function _jmolReadyCallback(name) {
  if (_jmol.debugAlert)
    alert(name + " is ready");
  _jmol.ready["" + name] = true;
}

function _jmolSterilizeScript(script) {
  var inlineScript = script.replace(/'/g, "&#39;");
  if (_jmol.debugAlert)
    alert("script:\n" + inlineScript);
  return inlineScript;
}

function _jmolSterilizeInline(model) {
  var inlineModel =
    model.replace(/\r|\n|\r\n/g, "|").replace(/'/g, "&#39;");
  if (_jmol.debugAlert)
    alert("inline model:\n" + inlineModel);
  return inlineModel;
}

	/*  AngelH, mar2007:
		By (re)setting this variable in the webpage before calling jmolApplet(), limits for applet size can be overriden.
	*/

	/* hansonr, jun2007:
		2048 standard for GeoWall (http://geowall.geo.lsa.umich.edu/home.html)
	*/

if (allowedJmolSize==undefined) var allowedJmolSize = [1, 2048, 300]   // min, max, default (pixels)
function _jmolGetAppletSize(size) {
	/*  AngelH, mar2007
		Accepts single number or 2-value array, each one can be either:
	   percent (text string ending %), decimal 0 to 1 (percent/100), number, or text string (interpreted as nr.)
	   Size is now returned as string or number, no "px".
	*/
  var width, height;
  if ( (typeof size) == "object" && size != null ) {
    width = size[0]; height = size[1];
  } else {
    width = height = size;
  }
  // if percent, leave it as it is:
  if ( width.toString().charAt(width.toString().length-1) != "%" ) {
    width = parseFloat(width);	// convert to nr., or strip text, or make zero
	if ( width <= 1 && width > 0 ) { width = (width*100)+"%" }	// decimal: convert to percent and quit
	else if ( width >= allowedJmolSize[0] && width <= allowedJmolSize[1] ) { width = parseInt(width) }	// accept only that range (pixels)
	else { width = allowedJmolSize[2] }	// default size 300 pixels
  }
  if ( height.toString().charAt(height.toString().length-1) != "%" ) {
    height = parseFloat(height);
	if ( height <= 1 && height > 0 ) { height = (height*100)+"%" }
	else if ( height >= allowedJmolSize[0] && height <= allowedJmolSize[1] ) { height = parseInt(height) }
	else { height = allowedJmolSize[2] }
  }
  return [width, height];
}

function _jmolRadio(script, labelHtml, isChecked, separatorHtml, groupName, id, title) {
  ++_jmol.radioCount;
  if (groupName == undefined || groupName == null)
    groupName = "jmolRadioGroup" + (_jmol.radioGroupCount - 1);
  if (!script)
    return "";
  if (labelHtml == undefined || labelHtml == null)
    labelHtml = script.substring(0, 32);
  if (! separatorHtml)
    separatorHtml = "";
  var scriptIndex = _jmolAddScript(script);
  var eos