texlive[50003] Master/texmf-dist: mcf2graph (11feb19)

commits+karl at tug.org commits+karl at tug.org
Mon Feb 11 23:05:08 CET 2019


Revision: 50003
          http://tug.org/svn/texlive?view=revision&revision=50003
Author:   karl
Date:     2019-02-11 23:05:08 +0100 (Mon, 11 Feb 2019)
Log Message:
-----------
mcf2graph (11feb19)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/metapost/mcf2graph/CHANGELOG
    trunk/Master/texmf-dist/doc/metapost/mcf2graph/README
    trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_exa_soc.mf
    trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.pdf
    trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.tex
    trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc-064.mps
    trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc.mf
    trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.pdf
    trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.tex
    trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.pdf
    trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.tex
    trunk/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/CHANGELOG
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/mcf2graph/CHANGELOG	2019-02-11 22:04:43 UTC (rev 50002)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/CHANGELOG	2019-02-11 22:05:08 UTC (rev 50003)
@@ -1,6 +1,11 @@
 *******************************************************************************
- Changelog of mcf2graph software package          by Akira Yamaji 2019-01-03
+ Changelog of mcf2graph software package          by Akira Yamaji 2019-02-11
 *******************************************************************************
+[ver. 4.36  / 2019-02-11]
+  -fix bug in draw atom,draw bond
+  -delete size parameter atomfontsize
+  -update MCF manual
+
 [ver. 4.35  / 2019-01-03]
   -fix bug in numbering bond
   -update MCF manual

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/README
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/mcf2graph/README	2019-02-11 22:04:43 UTC (rev 50002)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/README	2019-02-11 22:05:08 UTC (rev 50003)
@@ -1,7 +1,7 @@
 ********************************************************************************
  mcf2graph  : Convert Molecular Coding Format to graphics with METAFONT/METAPOST
  Author     : Akira Yamaji
- version    : 4.35 2019-01-03
+ version    : 4.36 2019-02-11
  E-mail     : mcf2graph at gmail.com
  Located at : http://www.ctan.org/pkg/mcf2graph
 ********************************************************************************

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_exa_soc.mf
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_exa_soc.mf	2019-02-11 22:04:43 UTC (rev 50002)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_exa_soc.mf	2019-02-11 22:05:08 UTC (rev 50003)
@@ -1,7 +1,7 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Molecular Coding Format for mcf_example.tex   by Akira Yamaji  2019.01.03
+% Molecular Coding Format for mcf_example.tex   by Akira Yamaji  2019.02.11
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-input mcf2graph.mf;   %%% it must be version 4.35 or later
+input mcf2graph.mf;   %%% it must be version 4.36 or later
 %-------------------------------------------------------------------------
 font_wd:=33mm;
 font_ht:=24mm;
@@ -9,8 +9,9 @@
 %-------------------------------------------------------------------------
 sw_select:=1;
 %%%sw_aux_out:=1;
-sw_font_frame:=0;
-sw_atom_frame:=0;
+%%%%sw_font_frame:=1;
+%%%%sw_atom_frame:=1;
+%%%%sw_mol_frame:=1;
 %%%% sw_expand:=1;
 var3:="cal_FM";  tag3:="cFM";
 var4:="cal_MW";  tag4:="cMW";
@@ -28,7 +29,7 @@
 %%%% sw_mol_out:=1;
 %%%% outputformat:="png"; hppp:=vppp:=0.1; outputtemplate:="%j-%3c.png";
 %***************************************************************************
-beginfont("EN:Acetamiprid","MW:222.676")
+beginfont("EN:Acetamiprid","MW:222.676","FM:C10H11ClN4")
   MCf(<30,Ph,2:N,1:/Cl,4:\,!,N,/_,!,/_,!!,N,!,CN)
 endfont
 %***************************************************************************
@@ -391,3 +392,54 @@
 endfont
 %***************************************************************************
 bye
+ye
+************************************
+beginfont("EN:Atoropin","MW:289.375")
+  MCf(<-30,O,!,//O,!,!,Ph,
+     $1:\~zb^-120,|,?7`1.1,6:*\^190`1.25,N,/_,3~wb:#,$3:/!OH~wv)
+endfont
+%***************************************************************************
+bye
+ye
+
+
+ye
+ye
+************************************
+beginfont("EN:Atoropin","MW:289.375")
+  MCf(<-30,O,!,//O,!,!,Ph,
+     $1:\~zb^-120,|,?7`1.1,6:*\^190`1.25,N,/_,3~wb:#,$3:/!OH~wv)
+endfont
+%***************************************************************************
+bye
+ye
+
+
+e
+
+
+*************************************************************
+bye
+ye
+
+
+ye
+ye
+************************************
+beginfont("EN:Atoropin","MW:289.375")
+  MCf(<-30,O,!,//O,!,!,Ph,
+     $1:\~zb^-120,|,?7`1.1,6:*\^190`1.25,N,/_,3~wb:#,$3:/!OH~wv)
+endfont
+%***************************************************************************
+bye
+ye
+
+
+e
+
+
+
+
+
+
+

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.tex
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.tex	2019-02-11 22:04:43 UTC (rev 50002)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.tex	2019-02-11 22:05:08 UTC (rev 50003)
@@ -1,5 +1,5 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Example of MCF typeset by LaTeX   mcf_examples.tex   by A.Yamaji  2019.01.03
+% Example of MCF typeset by LaTeX   mcf_examples.tex   by A.Yamaji  2019.02.11
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \documentclass[a4paper]{article}
 \usepackage{graphicx}
@@ -49,8 +49,6 @@
      \put(20,\@tempcnta){\tiny\tt MW:\MOLmw(data)}%
      \put( 0,0){\makebox(\@tempcntb,\@tempcnta){\@stru{\MOLfile}[\MOLchar]}}%
   \end{picture}%
-  \advance\fontnum\@ne\relax\advance\tnum\@ne\relax%
-  \ifnum\tnum=5 \\ \tnum=0\relax \fi%
 }
 %-------------------------------------------------------------------------------
 %  modified latex2e kernel program control (@for delimiter ','=>';')
@@ -62,7 +60,11 @@
 \def\inputINFOS#1{\openin\@auxf=#1\CONT at true%
 \loop
 \read\@auxf to \@info%
-\ifeof\@auxf\CONT at false\else\@sfor\@info{\mol at sel\@list}\put at char\fi%
+\ifeof\@auxf\CONT at false\else\@sfor\@info{\mol at sel\@list}%
+  \put at char%
+  \advance\fontnum\@ne\relax\advance\tnum\@ne\relax%
+  \ifnum\tnum=5 \\ \tnum=0\relax \fi%
+\fi%
 \ifCONT@ \repeat
 \closein\@auxf}%
 %-------------------------------------------------------------------------------

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc-064.mps
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc-064.mps	2019-02-11 22:04:43 UTC (rev 50002)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc-064.mps	2019-02-11 22:05:08 UTC (rev 50003)
@@ -1,13 +1,13 @@
 %!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: -1 -1 212 60 
-%%HiResBoundingBox: -0.09962 -0.09962 211.90288 59.64348 
+%%BoundingBox: -1 -1 212 57 
+%%HiResBoundingBox: -0.1 -0.1 211.90326 56.58087 
 %%Creator: MetaPost 2.00
-%%CreationDate: 2018.12.31:0844
+%%CreationDate: 2019.02.11:0917
 %%Pages: 1
 %%DocumentResources: procset mpost-minimal
-%%+ font NJFVSO-NimbusSanL-Regu ICXWUR-CMR8
+%%+ font ICXWUR-CMTT10 ICXWUR-CMR8
 %%DocumentSuppliedResources: procset mpost-minimal
-%%+ font NJFVSO-NimbusSanL-Regu ICXWUR-CMR8
+%%+ font ICXWUR-CMTT10 ICXWUR-CMR8
 %%EndComments
 %%BeginProlog
 %%BeginResource: procset mpost-minimal
@@ -18,34 +18,37 @@
 /ScaleFont{dup fmc 0 get Amul 0 exch put dup dup 3 get Amul 3 exch put fmd}bd
 /SlantFont{fmc 2 get dup 0 eq{pop 1}if Amul FontMatrix 0 get mul 2 exch put fmd}bd
 %%EndResource
-%%BeginResource: font NJFVSO-NimbusSanL-Regu
-%!PS-AdobeFont-1.0: NimbusSanL-Regu 1.05a
-%%Title: NimbusSanL-Regu
-%%CreationDate: Thu Mar 20 10:08:51 2003
-%%Creator: Primoz Peterlin
-%%DocumentSuppliedResources: font NimbusSanL-Regu
-% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
-% Generated by PfaEdit 1.0 (http://pfaedit.sf.net/)
+%%BeginResource: font ICXWUR-CMTT10
+%!PS-AdobeFont-1.0: CMTT10 003.002
+%%Title: CMTT10
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMTT10.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
 %%EndComments
-FontDirectory/NJFVSO-NimbusSanL-Regu known{/NJFVSO-NimbusSanL-Regu findfont dup/UniqueID known{dup
-/UniqueID get 5020902 eq exch/FontType get 1 eq and}{pop false}ifelse
+FontDirectory/ICXWUR-CMTT10 known{/ICXWUR-CMTT10 findfont dup/UniqueID known{dup
+/UniqueID get 5000832 eq exch/FontType get 1 eq and}{pop false}ifelse
 {save true}{false}ifelse}{false}ifelse
 11 dict begin
 /FontType 1 def
 /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
-/FontName /JXDTPR-NimbusSanL-Regu def
-/FontBBox [-174 -285 1001 953 ]readonly def
-/UniqueID 5020902 def
+/FontName /ICXWUR-CMTT10 def
+/FontBBox {-4 -233 537 696 }readonly def
+/UniqueID 5000832 def
 /PaintType 0 def
 /FontInfo 9 dict dup begin
-/version (1.05a) readonly def
-/Notice (Copyright \050URW\051++,Copyright 1999 by \050URW\051++ Design & Development) readonly def
-/FullName (Nimbus Sans L Regular) readonly def
-/FamilyName (Nimbus Sans L) readonly def
-/Weight (Regular) readonly def
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMTT10.) readonly def
+/FullName (CMTT10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
 /ItalicAngle 0 def
-/isFixedPitch false def
-/UnderlinePosition -151 def
+/isFixedPitch true def
+/UnderlinePosition -100 def
 /UnderlineThickness 50 def
 end readonly def
 /Encoding 256 array
@@ -62,106 +65,272 @@
 readonly def
 currentdict end
 currentfile eexec
-D9D66F633B846AB284BCF8B0411B772DE5CE33C33655F6FF751F340A8D6C01E3
-2E02C24E186BA91B34A1F538959D4450CB683EAE5B034D030186901B458D3777
-6B3942BD2E07121385120248891AEC2EB33C4E3A0CF00828D0F130C31A918C18
-979FE94379C648EF21ABF659253E43CD1253866F157F1DF85AE7E8714F061B1E
-ABA3AD094FE8D6293916FA82EE4F486C7E513A06D4C9BE44306A8287970B4ABF
-B6D1F9274A5A0BB6ECF713ADBD1260D5D6C4420D357FD486470A74B2F0621B59
-A9373ABECDBF32FA68AABB66FAB0C970A3354A335D70DB2CC5A3208BB6D768E7
-B58CD9BC2B6B7E110693C5A88D680B7290DB121996E3B7C8AE3C23147280F8BF
-D8C60B415552700FF0E44C2257B467ADD5D550F61EC34A76143393E0B34D55C0
-8B64B48E5F1FD16E16B967511AE15434B7F755BDF2574191E3C3DC528B69B5BA
-7DDBBD3C7878FA69ADE75011A2C0F02F5707E86FA632D1269281D3C265B31F3B
-F3145052467647AFE18B9D763FAEE4BA72CB9C385568EE5BBF5854C278F1E3CC
-475C6234E83ED33345268BE52F0931B58F302EDA0D5751348E7B7E53D4882FB6
-9343BDAAE87E48F6E82024D8EC1FACBBA36582092CCD76553B0449A5090774EA
-7242123C53B80F2E927B98DF2B36C403D1FA1E9F8439F3964DC9F89A0CAB5AE2
-C907309460F097AA87BD156575D6C73EDB2B40C015E67734397ED14395C43394
-7A0201C6B0F652B035FD7BB82ED236D0F7C20048AFD83A56925C7A2898B46270
-B440913E4714FD89697B3E59F5BDD5A2AACF6630257957ABE1A63502A3081B6E
-307A534A9E238F986D4C866AFBAB7A0B1B5A6E99AA0A56DC1FD7E8A39CC45147
-259AC7033A0C58192CA82FB12E09F309F75690043646193AD92D2368F345771F
-01CFD21236BA52F74E36CF4B94259CDBA2EF1D61AD93A2B942A9896B0819D20C
-59E440851CB99E89C887FC62FD9E7F88F54E5BC157D81A5FBC70699820C51BC6
-27D7755B195C0BAD8225A6F3EAE0A5A674E8AF6B11BCC69DCF5FB89D8BE0E2E5
-FE7E2588F93F583E4E2F6ED5457E90B902B02F51D54B9F0BA54291E687F4A7A2
-08CA5FCE0C9F3B954247312EDA3C532D3DCDFDCB56FFE03B36DB7D549D4203C6
-7DA8772A2F732A15DE675D3212C28DC755E3D0156A777BF514112ABBE4372ACB
-97D7834813E1850F90CEE543B4C09BE1E93742EA98B8CACC09FCC4D2595EECD4
-46C942EEA60211FA7DBC11CE869D55BF0C7EC6AA747EB2AE2CB3CC2DBEC936C9
-540CE2E08291323B36F6549CDB97BBF9F0DA429CA9C863B629410885540DA6C4
-9AAADB30C39051C993CB547BCD573D6448DC09BF7FF2D1B108ABEC2AAEE4060D
-182ABDB3100AC627E5C883E8F42D90D699C8028D4123472F211C8FBB744D7E3D
-C626ED03D8517D69E1ACD26BE4F83FAE31122294816736827D138E4F4CAB1681
-236C1654E01231EA7F08AD0E73BBE1BE19A7AD6DA63AE0C7F5A360A53BB35268
-CC90125C7545D9D59F5127F0AD964AA66DF020F639832FAF9C2CCA82C01120BA
-6469960C350D3AF786666EC14158728E0BA2DD8A639C28E0A7EA8BBF608FD7DF
-79C7B5DDEA05C8C3D6FC70177D1A9EA9AD056F0CE31AB535A22FF7EB33748071
-694BCE70111394D24DCEA030AE4C07AECAC39144621A6B719682FF74DB5C081C
-B538F17221F8D06EAAD43B64DA5CF93030CB93DD54FCC5B44980F2AC6A66C512
-54F71283450DFCA305E0B134FC95E54C2699C18624EBE6A7D0067E306EADCFE5
-2D2A78AA02574548893EE05FFD60CB41E00B2E7761AA55732EFE6EE3C19EEF6B
-179276229BA324E59A81107FFFAE0685C7C24E70ACB8564454277C41C28075AC
-96964C61BD933742996058691C47B09CEBE352FC29A63119C731B3FC8D78A9E3
-69F922CA6454BC1F6CFD1E03B285AFC3D8A7C81B83F0D950DAD2F3E562353B9A
-1D56DABD05371F9479BFA4CAEC5CBAAC37C200F6E27BB35E591601EBFF9580F3
-78E3BF2E599FF22A1434E7D661083C7F8D02F91CCD580EA19FC752DC7DB84DEB
-6DA73092F21F04F718009DBA58BF46AB95BC4B9154DC2390AE0089A9FEEC29F5
-90EE85785CF7E9EC5CC31283CFFE2CBE71C3A2EF82C984D16ADD4BFAE300036D
-4D161A5BD529D9E7C7EBD598A6CF895C2B0A06DBB62EA1E10D52D2D69E373F43
-4024FF3F78725CD06CA3E2F2FF6EC30EC7E3EB389DFC287C5803B56F4058A19F
-EAC02F63B3708C71BBFE34996E87AE9B53C0B8009CCFE62C17E001C96636A66B
-10F2CB000A0D128B232D9A9E24006A4FCB9FDD47C70C954BEAA33A81A5EE27B9
-220C89DF8C7471D82051EC633967352C75105A1222751EDFBB3E8B7294D5DF44
-958A1F7695ECE82296DF0D272C713BA3B612591D25AD1A01EC4C31819D2DC7B3
-5CF2D9F0F492A21E1C0F12BA04D7AAD47D978D9E27B27A5E810DA3288710EE9A
-55270BAEF9025D1ACAB90E7A0010434D7551D9C6ED8854FDAA3736542746ADFA
-E256888F27BD0473AF8CEAE50E72CCFD28AB52B5B5AFE50CA179D56CEC0F66BF
-4E29E49139796AD76F219F2F7E4A093AE79BEBA96AA3C4846BE06F450ABA400D
-1802978E39789984C5BC3E386CED0321AA1103F4C98E7938A0A43221BD62CB3E
-9919166E4C5685DB2251F4B257A56C518348D27E0C312082BB785A7A71D46A55
-84BEB0D0F8488FE1851E4D2218F93467C90464BFEECCD83F382E45211576133D
-BBDA5CC4582CC326879574A5B0C840E7B69617A157AB0CF1881601EF22909D51
-457962C37265CA81F4462979DBC27E2D40FA8A83DA4DC02F8945783A3F7D7E63
-9A2C7FD9A366B87678E42AD75BC9BB94EC921332E60DE90966B9A2828B3983A0
-B4AD97C71BFD312AFF12B19F8BD653A82396A30C8767F169B664A12D1B1D5A2B
-955F8D68D7F589FEC9ADA8B3D621165F366C39D2B6EFA16EE1981A33422DAC4C
-63444836C47FD4CF75E964571BD86643FAB5F8CFB63633A19B36ABA949504A51
-BF3395620F8CBBBA1D06FFC01CBAA4281B1934BC9EADFCE21949101595399607
-3F5CECB8BDB43E672FDF8E4E6472EEDE6CF3C9B0C606643CD25E8EEAA88FB5DA
-337D8E8246D149FF54C613B691679A646D961D98B7BE1C06AF5F69A4FA62DC94
-8A4D4D40D065CBBC229205072021BE4A2085C6209F103909A048836120F9C369
-5BAEBB29EE7C59CA69954B26E3EA58438675DAB14FAB778437E05FB92B7FA3D3
-CFFBF34B0E7526D9564D23650E9B9AE6DF11C2BF0B272327F4FC47A764BD6E09
-46F0561971FDD8B8D0969B50FABF52CFD470EF37327F814E2656C5BDBD061A35
-4684B66BB71DDE9AF914DE7CB8A2A33999008A7D81F24CB629294ED8B96656CC
-5DD1C2AC79FBE594F5DF0ADB51D448AF658613F899B309514EDD2CE48C4AF155
-0CB5983755E12C1F37ABB0CEDE003EFBD0BF18082DFE7842F8C565C82E28BA27
-D956BAA853052BAB3C9A63E1CAAACC3ABF6E62CE8A1DC3954DE1ACD0193F8AA3
-E4195E722AD662CE3E188456AEB1A392E24F02C9EA38B6065E6C9B8233606230
-ADCD832E0D691E7DD709659F7EC3FE02A244E832DF17E6991BB9042E8B98F6FF
-5E6A9AC55AE7F243EC23CB8858306ECFFA2FF8F7C227091154781ABEA3BEC50E
-18F0854E26646F5E73932206F2FFD5EC588B006ABBBD7A6B81F3FABEBACB5523
-7AFCB8AB313AFFD9232DBE7E33C0AE19EEFC32F1B94E9040F1D8CE31A358973F
-79E987BF6F49B4A5C717F8956488A3084EDA5CF510EB618AD0F44AD88E375AD9
-986AA8D585FDD73F172A740BC8E0119336140328BB5C79F8953189313DC1EA99
-B6A47CFBB66A98110B7E71A6D9CE4F3BE94D3507F2A44AFC967C8E254ABABE0D
-919A34A7FBAC0233585CABDB28A3F104B882AD71FABF3D9F41849523D29E95BA
-7840334C52DE6900A9B308E5047D9ECEA8E3308F8BDD81CDDD6E9D81CCDE9A66
-DC9C2E10F4850068D2D321839FB316F4F09FA26664EA51EE86EB2DF3E41186D7
-B73A68C125FEE7826020C77B0632E3D138D002C23F13F44C47014748102FCC29
-9F0458E90084393FCBA5430D2BCF1D585C7428DF54B884807709867C739AFDDA
-7B398E3126978279F50E08F102184641D223CCC9DBF3F4A0FBE3897AE3A87DFB
-E81876C20DF82204D8B35B3EFFABA6D74EDC357432D7D51FD626A1CDB1929A36
-9CE5AF6AED4365628E6B083788384DCC6EF09253B99949D376A6D21CB84EA2D5
-353898E4654D93AF0B5AC8A3D796970576B373D47AD58FD12002718EE0A54139
-80B3A3F2D3108B975F8DC1167B47E9A4673DD434B87055AC26973EFCBFE6D48A
-5A68F099B118ACF08F0E60FD147AFD97952EB2A0E1D869D5408E4F6DBB5BFF81
-4E9CC701141A63DD8264CF4F2EE53CA9C175A06FEF0E9F65C510E7E561C63982
-E797D77238480D13078773317A0E2917CF1B307C315E88340F56B5F957E4A6E3
-2867EC63A3F9ADE503D6ADEF8B236E449889CC6992E3329B8213066EC393A9CA
-CF4485B17BE4F202ABB890D75B0EC6
+D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA
+0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93
+51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71
+7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551
+E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078
+0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273
+C01924195A181D03F5054A93B71E5065F8D92FE23794DDF2E5ECEBA191DB82B3
+7A69521B0C4D40495B5D9CE7A3AF33D17EE69979B82B715BAD8A5904C5DE0260
+6C15950CCF6E188A0CDF841EB68E5A2F88253E382140F87C87E55C9EA93B8C89
+14A36CDF630D6BE7CD36DBDCE22B21778E8648B97B7EC6742EB5114BDF0454B0
+0EA7B1FE236C84C0E5308C871F67B973892890557AA12E00B2C20C71F516C397
+3F3BBD14A1D0149CA064391056E45E9470FC7F6F556ABC82653B3C8049AB5CF4
+BA83C8F2158C236B2FFD4208846013BAF4165E8BB8D334C8FF2E8D74AF5DAB2F
+D44788869B08399421AAA900ECC6A2D594641C121660D4B5F512938994C18DD0
+FCD9B008F68F0351D21ED735B2740CB1E0C1CCD25EB548C35B844601D98828DB
+556F71D07E081A593FF12DAF83676492A0FFE16E95717A07082B43A966C1EE8F
+8A59E1255E1705C43A23CF29A5E4A6547C93F1680A870EE7BAD8CF74D838CD5E
+F806911D8FE4262ED8E7F5BC58B92C9C6D74F8AD45FBB021EC7E97393018B9DB
+B1B84E7B243ADB05ADD3F1DB3692ADC5D47FEC7DF93080669E63281F1576B673
+125EDF08016664BE73364F65389F7C3B66623AD1754ECBEF9E5CE6948D933787
+A5674279ACB2EBECD3B4E6361419AB32028A27670C9F3E18B746A10B00AF6D77
+4EC00E3BE521C02A99AE5BAA98F793EB1228952BE67934B91472E01AF7B816BC
+56D7F19F631A1927846D800C107B1E9CBFF9D2DD513B4A8CE2E0DFD77B1ED178
+E43FA7052765E9FAF89989D490D8FEF6C536EC0D4AE27A74F474B98DA9E6B92F
+15E063DB260571979A5DE2423920CE1F59F56EB11E00E3BB9D466A8263E1E385
+2014BEFDA8D1EA3EDA04BE32AEE6CD15C5C010A1DF7F705A2C0C18E87C8DCCE9
+05D9163181CBA56C0FAC8C06A2990554C8E759D076B01BBEADE3B5FB8B551390
+6C8E4A2A1C6E7D9C708614626F3770C0AB7DD2027469C77975C27576065862AD
+04E5E50CEBE907E3E991FA0C627302C0E207B4D5992BEBAB5853AD1C0D271728
+C76F40A79392ACCA7358F948AC65DC823CFDA59E1FF69CEBB6B7EC3CF21669E4
+70D999508F9C49E2D9F8818CA53C977D93E15FBBBAF75B1E84F0BA62BCC4BAFA
+4EEC82D804C8A8C0210F3E5E258BB1F6921AF02BA9861BAD5C3D5FC8CEFABA8A
+A607E547B802096F7AEB09FBA99C83C9A494B94408DD607CA6561A6E6660C473
+62CF8D35F31D052F6C6C8138A8E1430CBA7EA6973D6D510C1A06B3FBD79D9364
+240C1A00272DA44B89A9FE8D5BF36DC1B5EBB4A78ADBE9C5EDB485F093D9517D
+69E1AC9A8E6C9D7C324E3797CFEAD9A18E82E03F69B2CED7D5DDCD1A218BF2E2
+ED2293AE999FE2A4B5213A10083EE0407BCF8007670B8C737EAB30311C868D84
+121149ACB4A27F3ED6C0C181C98AAAF51B105F264B5672D7F745131ABAB5BEA4
+0C9B43C0DD9116D6DC61F90BE72018F290D26D5E9D341055CAF09C9F45333CDB
+D45B7954271767F638EEC499F7B53C2CC5774EA7A7F024C4CABFB93D9CB1856A
+0C671A4ECA7C62EA5242648A84E7F3AFB9547A0AFC29593CFCE6D8B873A78157
+D337CABD291431C0A2CE1F37E0CD7340567AC206FF98E4B5A6410F70F750451C
+550EFB54AA259A1B236CA9CB730D2CEF125EC65D959441F7CC9768F777B44844
+CC9842A307C72B740680ACBBF6AA35FA7A94825069BF7696ED81A371A9E5475A
+9D997F2DFAD339AADF797F7E03E654234455AC3D17702A420EE0A597BA31BDE4
+FEB8DBA7C61D311CC90441A620164DC22DC2D373973EF84CC553453AB1B3337F
+7B39983B8DFFB3A9425F119B45C1CD37A76F905777B3154CA6200792F1759D06
+E017890F4041A385F2238E3C48B6C8EE6F5258463FDBFF7AC762F6C4363926D6
+50F004D473B7B7F73CA686B559C2885F1AA761653C727A77D73431E9D110E76A
+2E55C68CD50F43997C9B2FC4710F8C8540909829E215678E63BB8363C4B8AF05
+9986102BB36580D9CA95CD216B7C321822CB41B2E0422CD077F3B55E0246FDB2
+44D5976F67296B5B0BE4B06F6E43535C21164E6C5089C3E9BA2D6B30888C57DE
+49DC8D9D46C0D5EDC47ACF2C03B72DE3B69512508539019B759280BABEA12BC9
+385308A0395C4CD33182A10A5A229743379C2075D82D8BFCE4A66E1AA087A091
+8F5372684FA5037D1B92D50CD9CB4F50AD4F8EE7D51F1C9E63C721CB5B9BD011
+6F0A8DD4FDCD2B008F223A1036D90F0F3B252487DE7898F9AFBB3A9D9CD49E0C
+EF4ADAD5155A98D2125ED5A3D3907F67301649519419F33CD942E8DDEAC1BDA0
+E90C431B198F646766A8FA9F8D1561B57E126EF604838C0C1966655CF31FB7EB
+C8CCC434FC1C96046D38203E1791EC824A3D7AED85C029288D4608CA7668A2BE
+484C99639F121845B22EEFCE0A3B808261921AA042AE19E641769E91277BEC29
+4594082CCB3058F90FAC4A700A8A827ACA00FCF574ABC8EB7DBCECD97F2B22C0
+0AA19E8739B81AF8C6F621D69B8E6F29BAE233FBA655A0AF5BDFD7F5C6B9167C
+6BC7AB693D45EF2AD999F5DA3CEFA39BA48A17EE6D9F2C4DAB91AE3F0044DC3F
+5D5506CE4675AA928B0092D6F173644F91295216D8BBB14CDDE0AD524A4D545C
+1B5E284A3BF0396664081CFB4F186A84A0D24D61E82F4767C1E55A0642720CF3
+909FA1AB8EAB78030B59BEA067DEDBD2F1D0340E790AB2777DB18248521934A8
+BB38A58B7F633DEA4291B0D5D13E9A882C974697CC6D3B49E030C94EA29B5506
+CC29C44D01B4751B453A46A9F6BF3BF135AE87A4CE232AF57B66578310DE41E0
+2A6AC422117F1963C4D7CC306BD25A6E724E51921779F22F029733122E23E2F0
+CB340008813ABB104380C80A492B3FC6D0BB07CB8D8409E9576891EF6E5C9D08
+EB8320DFA31BAFFBD336D0C2BBC3D3B2D30368B9860768FC080D30569C7F7811
+0EBEDA2962476113625EEB555490B8CE4C5F99D74ED10F738C61854CFF8B41C6
+9402E56BE8856144A1A05D0B05F4CB7EF728B2F4F5A439F18C3B68CEFA41E59A
+D8308ADC92EC1289DC84CF48D2CDEFF509A145BF945E1E00D552D329EBD2A7C4
+21D58082CC8FA790E981F4AC8EAB99950678FD3A7DA3DF13778681B208DD71A0
+7C3CBD0664B37C9EDC6B601D79A2C51FB54DAEE849F93209793849104E722D3F
+52DFAF7047EEEDDFE744787A5801E4AC2C3D58EC5DDC15FCEE03990C53B0C57A
+FC54F125A04C8E4A0ADAA725808C587E7DAFB9F784FA2875689979D316DC22BD
+AA36B306A1ABCF907B63C6476737B746099973CAEA8C1E2C5C41F27E0F7DE8D7
+F0D942E34E92F43FE902653D4D2EBB6F3B9F7928B1550A82AF234D45D028F429
+067652BD3D391BF423AE72B9CB1E8D91E898161BE3A7849D456A861A2046711E
+E934DC59442AE7D81661CE8EF727D8D7DDC0270E937E40F896AEAE6171661431
+C1025C53172F9D366834BA0054FBFD84503FBAE328B6FDEA180F8EA35B1DA937
+5CC3B8F00C206908C2FFFFA6A7AC6915D15EA44BDCF29E2BFCFD4A849535F19B
+0D307C696BE8205C7D84B9C77F02EF27D911056EDBB4080E4D3ED72788666CAD
+CD91B0ECE27A177DB23320A7FA9C31408B4D02D2A4B1CC6DDE1A6CAC3D8EC1EC
+2226EC98E51046D1EC26FA20EE62D24747D83CF4941DCE5CCEEC0DBE387149CD
+E05B19FFCAFC0D117F9A3E60DCD4C815228D98EF95EB559AD0ACC0D50FFDF714
+56C3C812EA5ADBB013BBD956A7C4CC0ED7D3E25D5C9AF5E626F18297F75D4957
+F5B0B33379114B903FE98BCF35C3FF76FEE1D9AEB711F2962276531F7380EE3F
+E368720E0292A170A15C5539B1FC7BB954EE2624B504CB8C805B8D31AC38307F
+0513606F09211AE64DAC447693B2A0AD15E9A64C34F5A911ECD0ABCA90E9791D
+67C6BD202B0858EF96E7722305B8AC02B01AB1706CC6AE875A8DDD15EE349046
+EAA65005E7866B506EDFB7A5A2AFD5C9E9DCC821A79EE9C1EA2C7BBA32A40BC7
+CEC26DB1AC473C8C3960ACEC581B37D6569E8C8C42950BAB7930B65E1570E3F8
+9A7FA719F1DCFDA45A3BF2AAB32C9A93BA3552608A61C623DE59BCB346E87EF5
+9CF025A87803161221C5C1C6F6B3403712C76E9D755C7BD68D7F2DC03C14CDF0
+C1BBED1D648B905B4B17037B7263C1EA7A7F06FAAC4E09E08483A8D714C19861
+327CD9C32DDF850302DD6DDE24912D00C22ECDF3CDFB18FA831A41A7488EC203
+F564CFE30D506F0829A96D35A7E09C3DCD107D589B627A15B55C5D6649126BEC
+60B88C55ECCBB4E680265D9EAB4CE22965D3B1AF759B01ACB0D0E6C92B6B4EFD
+A81E6A648708979487FC591CF09631310D46891423F4EC159A73E30D8DD147A4
+B0EACF6D45D18CD16CEB8176F03ABCB41F2234747B9733C8FAF34AE5D43D3BA5
+0CE0FACFC9B087F84FB6C68678BC6E76022B1526D6E5B3A48EC1A110BD75F45F
+1C4DC6D39F254976453F57DF873B7D635C80C42026DE020E5BAFE0DA0D54D1E1
+DC634D2621BA184347E5252F645A6A1DB7657C48124186F0E4C644077457C24D
+55753C651A9A7B6349867641464B515B821349C795A645420508673B93750D0C
+7A3B33EB1F09782033742AE8F3A23FC02284E6C03818FADD1731361542E3FA3E
+75B8D52B668C3E18A4AE967D0FC3157083D952AFB8144D549E69EAAC51C279C5
+E5D88A0D9D53013DFFB4352A1598FF84DCDE6FA32FC377306B9B92C0F96EE149
+8CD55E7B2445B86CCA7A547FA732D52D59025129FD8C6333AC0DF4F0CFF6287E
+F2036D5DBBB3B91B92F12FEBE0B61A313A4DB5A9CF0BB3DDB781A56FEBFFACCB
+8CB9D1D3DBDBC4CB6AAE6769E470582403CB920630221B68BCB625CD4605FA8F
+D3D5B7A1A28D15E44B38E92E906C138E72C15B86F64C38E23BF0440052A8C914
+54397F49DBED99D0AF7CEA3B0A05FF37C2D7EAE1412567E6776333237C31E3C0
+49949EC8BFD6E0F6446CE2D4DCD2C1524A288818CC5D159BF8463A847AE4A2B9
+CC8C58F822804B81B13BF4F2DEB6229C4F51F093075581791D02C36A13B855A0
+34900AA7CD4F1A797652656FE3A8425A38F421C4CC0ACA1CDD44FA6B31219276
+1CDE1CD63D6A58CE705CB56CCA1260F9B86E989019071563A9B4C274A87558CA
+6EF1660D574EDA276801F0057740E2C3B80D253D697736484D892CE1AB128B8A
+DECD69712F5E70E895FBAA927E8194D792A04AB6CE205E04E38A433BBB793FB4
+E8BBC4279D58A223C6673D909D6AFECD246E66A52F4CB35E5931D24C828489BD
+4ECAF621A220D8ECF702BEB01C4FC7510197D3F6D15321EC87175ADBA6434ECD
+2B5A306E91375CAD22CD94301763E4A8B981472890422C5488FCD523C9CB17DC
+ED22FBF12D5F7525D0D6BCFE8CE85B0DFB1D6F989C267FFBA0A996D309E4A934
+3DB54A9D29C88B9D55D7300DA3D46419256C5A07A2A529A8DE8BD1727281F5FE
+97033D861E0531B14E811378EC1AF1CC7EE9BA2B07D935843D3053F673979F8C
+FAFD59D555B56CE338F606747238B22BD62C42BB7238FEA335678D474A643570
+A9E7B4970E8C541CE9DBC7BF70ED7BA33639D6744A18379455029E934C95E2EF
+639C4848CE9A0879B51649FAB023A71782444B451F92A34CB8A124270CCF86D4
+D18EEF5C1D2B2A29012613851C49F50702D63BACF95EE2AB4D72B375E0A62615
+E0991E130A67ECBA9E05329B740708F1CB148724C3A6E5E3AEC1F88EBCA398D2
+1CA8827C977D72734310233176D1AE26C55CF2CEACA62223315C28FCF6305C7E
+A22414D4739A059F552F1F9372CCCA5FED4F9AC987942848EB498900269511F3
+F408CBEA0659B954F5F1B18AE4FB270213646F9B28AE4439D2BA2D3E0AAAA780
+5E530E4EFC8A060EB979E12191044509DA0C14397AFF949E12DC970658D5EAF5
+4EA963F5BC1407A32F3837CA6A24B7F3D60EB8E6222B702E25ED903F9D21AE50
+664A095009BDEAF4B78DAF94E5A55D48366CABF07791A1684B2F54EA69070844
+4F031AF8DF416C2D3679F8BA038B0DC9DD0400CA6B34667BCBBC07E62C1668A8
+35A8C57C9048A7227E672E89681B54D662079A189A9E96A3CA96D8DD10189B04
+1DA49BA2729F1CA585B1BD5C467295285D52E47CA904235A1A3E48EFAE9EB6F6
+01374125CE89D53C276858668CF45D2F092DDCAA52418E0BB94C2B8266B4D88A
+5D911507BB1DDA3D8F6E7C14A91CA11AE799EC42E993098E18CADA70BD2A1D82
+2C39326C6E3F9E84CD9758B9AE43D79BF99E6A0CD713E95B3D9B7DB90D127DE0
+DAFEBF850CAAACBD860B5DEF2082F1ADA64B44B193C4A1417BE221FDCA36456C
+BE5934C8CE3ED55AE3A11697C2D682B7D0F72D48976451D205783BE25DBD2507
+39C14FFB4BB828DFD187104F38A7F11D5F0698C11E8C1D4F107CACE573FDC4B1
+C56FDAE47024D6FD16A2FEABB434CA320300FC4B6C1B6CA08F76C60B7C08A665
+99F404DBA8A2A1EB18EF6750E4EC186E31561A3F080BA6562967546715859481
+7BA782940F5C5D06626D6F6A412CA7C13820EC7C1DF23E15E5829F698CF617BE
+D940523E4EE4ADECEC48C24297DBAD528BA1DCE7AC335A1D15D55415B108EFC8
+6D45030D27B3EA63B2B4CD771DBE66AE0218ABB1153D4B7482289D1313CEF184
+5C960B1E3C3C953912CC6F4521D1E15636C1545EEE457EFB87B88C9E43CC2F38
+6BC4BC96969F4FF28ABB06F4454C01CEF1B6DC538F1E832FC1666D977E5A881B
+F72F1B4C7DD4BE167A5535F1163A0706F9A0B26400178DF8A128FB5EBE6A7B81
+E478AD183EC06622B591337B9F1872AAEA356F4FC67EE767B34CB5A4D90702D9
+39FB846947F4096FB3DCF16EC81455164783BA0B5D723060DAFF411B68307E81
+7BEA1D9A47A5AA3D648E618C83C60F060029E6EC4D46B045FA7415BAB2AD0AA5
+ED9C729C24136F6AF61E6409C0B5CA760B16225641E268A68CFB8260BBEAFC77
+6626EBD97195E77CAB425CFB0096D805D9EE699E41680D095AE9FA10122A7882
+2F00F495C9EB2102DF0D3E61833BC0A2E468C5CF7AB430FDB7C0BE3DF2C0D230
+1580BAA25D65F599378D873165482A1FBB224AEA89C6BCCFBDBA42AE1C5DCF41
+06969F585CD3B737D1388D6359F5468D88FCD2279BDB270F6A858FB7D2ABDEFE
+5EE8FB79FA437F8F50237B92C307B73B0DCB808D07A9C3255CB9B3B17039CE5A
+288103D05D132863FB522A02CEE3839EF9AF7F07D99732F0B8B384745369FB3E
+7901166478F4A16076A1504C5E98D17408494E270BBF4470ED12B4332422679F
+759F1D93984D7E506D16950DB6C2682FE1379EFFA6F6C95DD71F6E55BE3EF6AF
+E0CB25388EEB436E6527806FC75484133F6E561DEB979D5C1FFEFDAF2A6D964E
+03BAE0BD593C2992AD84569C81050F7A793C5263E50C2F50B98C4CC703EAE17A
+6AEDAACE312DAFAF5278D125B6EFC5587484F61DAFF46B87B7C9B1EEDECA4859
+314A9A9E2248467DE1E54D90DD671660B9040B3E0DD982260822177EFD757266
+74A16C83A7FB168016A320D3DF3BD7726F1F4EC90EE5DFE810C96B099FD4368D
+906AE4699049EFD37E8EF058D4B97BF71106445AADD4FC6E90615A0066823A36
+673B8DE32322BBE861AE251226B4385AB28703B79B4275C536D3E9E687F69756
+1278DEA53837CF42F98ECCCD86A244FDC5C7FBA1C71EC3F45B2E98C37EC1F65C
+B1A112352814FB6FAB1161A7449FB0C82D8E1C74333BD7441E9ECDB576A5BA94
+F0D441D13CD84DE55BC25BBBB53FF5EFE0A67D566EE4E202722ED52BF7181F51
+70D734154C8EB48CEFB85094854B2484A0AC6B9548F67883083D7F28ED96614F
+888EB2B5E2F8CD8F21B4A6E6FCABA356F58CAA577A2E135403EFAD52472E9760
+2424CC86C82455D993744BC84E03D6F2E5A5B2796AE96053CE278AD5875D1EE3
+C93011077799B742B1E842D5A0297BAA8D81C733BA78C0DEB8D1A2C9BF7CFAF3
+F6C87EF5B40B1DE254CF21F2FF33F31B275B5711FD6B227D26011CBF25EBE388
+2B835172084EDA0B96B3F3222DF89E1858BF77AF24754281FE3FAA2E1B52D713
+BF04960F2391FA6B63F2E6A01890368EA8F0D42E7A93B340A743A9FE7D4393C6
+5279014BDE76C22106CA436D6EC043DE844726A222F8E7690F4294AFE8B5E7C4
+91A62C4340F2E793A0ED8D143B9CB5FD8950EF78BB34E90768C4B15D651FA8B7
+20DC21DE0755EEE6F50AB91648C8026F8DC0E546617BDA4097FCB8FCB635C4EB
+B540C214E62974B83A5A5CC369CE9F3DF01FD6055501D9A0E71EFB7075790A3A
+1E11482D57964C8C345D7F3C9969AF06A708F7CEAC99A20BCA3573AEC93796EF
+61A239212F05BA154584A312D0DC1C199035B90E8E56A9BC0120CD61B56115A4
+207DEF9096D27D3D6EF480136F3A2C060587C6798E098A1D4AEEFA5457E58664
+E1A2935F3463195DE95A253AD84C9B7EB6D77032121AF1E13FF8928C4AA20FEA
+739861B2184D9E29DEE5BD0EB4A314D0EBF8F63891D98E4EA24E4EFD17C1FDC5
+9BF0404A36DB4A8CB8B522065C495C5ADDA9BA0D1B54806C5B22BF34AC911826
+F482DCAAD7063D5D20A302B51CBAE24382CB3A07B64835A630580D97CC9E7A0A
+D30AA62480636B595CCD064AAFF7C24E8B871F85CE814DED94B3E01FB060B7E5
+7DAD852450F93030CB5809EF98E9F48BA0752DFDCA4C0E9869CA824B117CD993
+34626049A9AD892D4D31764DBEEA0A5CE7E682B6A859D852D22ADDC8B4AAE9F2
+27E9152087A89E5F2534B32D3AAC58C2BC29E4E3E8844AFF69DD34A0A93BE91F
+9745A63AFEC3516B02EEC71711F1756B58168F9FFB572D787B2FFE01BC07C04F
+227ED4C1346E54223361FA1DBA789C741EFC39C26050F6F56CFB6FDA12DD94D5
+837F8101D3D65F56FC746AB848830E6987404A4ABBB490D44EE8874E54DE3B72
+D75EC25A96919B0623C4B487F73D78D9C5A40096DE5CD9FA03668530FAD2A77A
+5EED85C9303C4F67CDC0D6B20CEC70058D312D3E154FEE43CC06FF89A82EB591
+4643355460BE4E0C5D8735A523D2DF9E740A78ECD97396DA076C632F602D27A8
+8E8BFF0D46BAE1C8254CBFBFA159B07ED5C9B3861637ECFE139E593AEE13D1E7
+593381C907FBAF642694D17BC8EC45F1A3EEFAA3B4E315BC32CF5EC239A9CC1B
+8ACB29E52A697F4A8BD9635311108D162F9B7210012EA3578A81767FF2ACEE14
+8D55098B803C0C8F39C080E5883594001529219B3C6B562A708C0AF94B475108
+BB2822276C3C354877EC108D03DAA3163E48A480D7442CD574FA47CEE86B17E9
+372DD0CC0E22DE174195B3D503982779D7397BF1D887CF316E2573D900D08B9D
+16715CB699C46D137A70B82BC1471F59C8E834698AA060ACD6CBDA8D00D12D8F
+361B497A5239CDA0B3262724F59B94B56DE90283762771725A7E2D8F83BE0585
+2F9C004219582D45949B8C3A7907A725B7F501514017D615ED576CC0A56C98BD
+025F353124DCD08E769AD993D11E519F94F7C26C8BEE32C6A310D4E1F4D442D7
+31E599E32C6B28808CEB9BD6EC5030FD0AE2514FB118396A7A1C1FE3EAB00889
+69AFA6F9B2C6359CE60F3435F0348428B104B110DAA071AD0580BC14CA70AEA9
+7FF4B704F7641BC26077CE00A19A3389B06DB5DF396F0783135AB26A74D7D41E
+364FFBA48BB844B5623950E6053B0068BC64EAF897E7CD6CAD4FFFB69A0110C7
+46315F3F39C77D624A1C307C68ED4CF408AD2EAB826AE3A6815D4EC854F3312B
+72F6947D9A769D9235CF735AF722D8F661B73136F9AF34390399F4D9743F4522
+3EA86C92007E55137F47587C9BB1A5808A161722BBA045E641E096BBADE3CE25
+9BFC749E5726B30F0556961DFF364B1D5BCE4CBFFAD279C1433993CA0E31C511
+A5D81A503AA8244A27ACA501B73034760522F13F2D2DFB25DFE64B5C6AA9857B
+839CC44AADE6DF3DCD517D0E873AEE620EABC2B41E6E0B259A11FACAFDC5D198
+06CA2E0F4483B3D92B8F6F100582FBD3498D4EA5FE86F9488C9EBCB6B44A69E6
+8EE406BB885CE63293F8D35182D3C3FAECDFF2DED8B078757E85C62C821BC30F
+303FF8EAECE8B22958DA1E9529945DC0E604231E3E61D17200EBAF1D62963979
+326A14D4811B342EDDBB3F17C5983322FE315E94EAA9A515BCA7BB12B5F24D83
+30E09F08ED197345AF96C057A12CA13C2351B6D50F2F4314582F2FCCB698D59D
+66F3A8D187BB48439692C7DADBE9D11560437EABB7A04ABD8AD8778428224D4E
+70B69FD185D5660D5E658C88C683A58722933C88D637A1D6B3E4F708F5B1F0D2
+F670D43DF0C5C2D77BEDE0A664E2BC60FFC3BBEA7DAF14CA1C39A5846CCD8003
+32078EE130800B06FCCC0BCA3FC68FF85459CCC65FF394A3C48258513B44E6EF
+215311511AB87EE7594A2E3631DC4A27BAA71C1373B6484B80E93245C561E6C7
+691F3B93E012D57DD5E2D5FE455364030DD9752CE58860C51206C5B11A525AED
+32D77B6396D79082258208C0E020191920BB78CF43F3EC7B181A31C76AF5E518
+85E47848AFC40F2DFE58C9861579856B3721B1A29F3E30430FC503C5BF92FA56
+5EF0C5CA7C7DD1463E810E3D1AC0FEC3086F8B4E1309027ECB5C1AE622D8369E
+5C786F5DA8E51D9B825CA5EF221F6B390EDB85E6C76FEBD149910F3D689D6293
+C3B74AC2DB9EE840ED1A5A247FA60A56D8D3B7E84B6C33CF082A247A897BF63B
+B9E10615DBE2CDD6CD9AD2203F045E772D4CE46C1681ADE55A59B041877A9B52
+078C02A3EC46288B9DB6D21E66D77D424BB080777AE746F76CD4214D860F6A56
+8200764CD41B37B2D292697B0E028978B1ACD6288A804C1C0CCE79D9CC027EE2
+3F3B3B62F33819006A3FBCC84888981C673FFB7BC40FA7552EAA7B2EB13C953E
+B325BD0792304DC6D954FBD18296EFAB63D8B1BC3A80FDE76B8EB79BC03F265C
+9EFD453498A5AC0BB0928ECF69131EB7C15932A84A42B6020D9C58AAFF8E62CA
+BBFE0D2388CE4D014F23144CB8FB17EF9C2A66DD5658CC9DA81E9D366551EC24
+B74B46FA556FF6AD0458467E29B3B0D15332114C6DC7584F61E20C6CEBB79193
+162959B5E9ACA580DEA82F5C88B1547E1A5232E6AE1893D972B92BD920E0B8D7
+45ECAA8F8EBBC36DA99096019E2749AB285862DE8EE52942EFD7C882DFB6750C
+BBBE19B70616DBAFD7BA7E7F4A2DB07EF7F1FACE319325D8C0DBC32019AED67A
+C6E16E2309411C27F133F74695D01E19439042084B94952AA3A010447E8D9190
+9DE781FC54314E01C60DAF29D13A92919C7994B722EE0AA3E23538F468541055
+1EA8F0912EBDA761F00DCA94B027241A9533028D1747241EFE8A2F9588F5376E
+F2197B3522D8E91B5F023758E291744230412153C85EB175D95D8E4CF11794CF
+E8D5A520334EC4270C8CAEB1AC83AE4A9C631C24DD5086FE23492184DADF9545
+0E89EE851566C92BD57CAD4FD168D0C8861746F63B1C1767A866F169C7A7FD60
+247752204A678D5801DC8AE0076F7EB15AC9E7D2E27CE1A6BF195F9FE21BA3B3
+FC5DD7F6869251D11F9B2A5371638F3E466AA9CA763E76705FA80A2771DAB2F5
+7FC8EBEA0C28F3934C334268A59629B46749FC5B70B7F5AC28B5C827538532A6
+66259B2D78384B998AFDDCD32D91536EB4A352C0A60E3C7F9164E22F626AD1A5
+18DE2B0ECE37E72190CD6F6942BE343EFF36424CAB3B45E3880E7CFE7CFEC947
+83C3BC22BE599F4F678BEF21527CB1A1BB9C5BFEB7715A89399970B662A54A7D
+53A9F7DC845CAE8258AE96004D842DD03288442755F71F7C2E53E474F80614AF
+ADA2FC459E03F335D5EFAD31ACE3CC0D4ADFB7A9B2BDA5CAEE324E748B65
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
@@ -191,7 +360,7 @@
 11 dict begin
 /FontType 1 def
 /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
-/FontName /ZVWFFO-CMR8 def
+/FontName /GMTUEE-CMR8 def
 /FontBBox {-36 -250 1070 750 }readonly def
 /UniqueID 5000791 def
 /PaintType 0 def
@@ -209,10 +378,8 @@
 /Encoding 256 array
 0 1 255 {1 index exch /.notdef put} for
 dup 50 /two put
-dup 67 /C put
 dup 72 /H put
 dup 78 /N put
-dup 79 /O put
 readonly def
 currentdict end
 currentfile eexec
@@ -390,48 +557,36 @@
 52DAD2A60FD606AFE14702BD3B0EC448720FE63438D020DEDFCDE3582FC31DF1
 17B25FC152789D2F17FD60B8209D292D2152DCF8D28B5ADC04F6659BBB746CDF
 145163361823CA343763AA951C640B5D4A99B7787105A1609EDD6A596EFC3F6F
-2AEBB90C4B257BF563574D9980BA3160D59811D25FDA43865C2EF2168316F2FA
-FF514FDD56C78D3EEF38378129BE38676C1A750B344A8C069A83E035F8729D43
-6B65B80B3DD3D4B8F9041C564626D9CB87AB7B9379F8A02E912F859AE0B3F9CE
-0F253FB6800D5D6BB753CFB933FB9303AAAC573D7380FC3563D88AEDC9A339CF
-931828B48A6BEE434017BD459FCF89FA30E0281A08AB3702602A019C2A4ED08E
-25C484868F0F35C5B1D5CCDA01DA9BEAA7E70B4C0C5CB3807EFABFDCF9F836D1
-4E174995D179680584434D8A5C8A4255456DEAD95CFA49EFFC7FCFF15F02AF05
-42CBDEC8A968BAC180465CA16DADE2068C88D05D8DF6E9B6801A1EC77B9DBF82
-B3264F22CE76C7D71928B78B486DAD78FEE4CDF0421F6EF381677160E9A1B856
-3C878E55B58D663D654564D288F81DBE41D101A117712983C9F20F034DFFAF36
-266EDDB105E979E9534ECBF3969333F7C412F171E1DE9EB1227994570379D500
-4AC5CB1D29CCE972CF77883D07F6EEF041D6780E7CBC2C74CAAEE224387BECA7
-E9F9D2F285C2A1126F9E8CD8907C7DC907728BD022FF435A768958026363C40A
-388F7B81DAD7137FA5A1F687D38E536A78DE70585A34DF048DCE9CC7E7C84D77
-7F668D47EDD9DD12A0ACABCC2AC80C6CE75243A767B12EC699D3392FC4E83453
-3B8F87C9D598632D05DDE423ED67D8077EC48FA17047DEFD43CF38F80F34D62C
-0D771982A73E929AB3EDCB3D978FBAB071696D36B9D0908721A8F117E4F86B31
-37BE46D96BB999CE990589E8EBE2C00C778717EA9DD76FBBB9176297FA90D38A
-67B21CFAFE07BDFE44729154A777C17B097129906D9598A4C66F46ACC5A2E1A0
-7711C9E4D600C1AF08AF7872E20D29A13C574EEA6FD75D7389224C1B7E009C94
-32AF8F2B50A9A7ABB8BD3C4D6AD856AA426C8485D41BC250EA3BC72ADE7C1799
-8B4F1A3D79A6CBE43D2404799A2E3C187155A26DF918021090D0A3444F9888C7
-FBBDCE547116D023E3E263DF477CFEC7F12AAAAC1F3C685D4374229D02D5204C
-781C99F2E2D60F4994DDF75E24396C321DB96AD85550649DA5A93D91CCD7C7C7
-8674F757561DCDC50FAC66B8C2B682C28EC29CB8203CA451794215CCC07FBCA9
-FE14435CD38433DD3A5086E9DA0027DD9F875749BB4535D1C31130CD371058DE
-9B48AD8285E45073E578C5C158D2DE62C55A778793AAC2DB0CB5547C3271A654
-D45C3C6512D32BAC1541D1BBDACAA322C356D78B9BDDB5368543A5E7EEEAA306
-77526F3F533A44B2D97FC649A972C2F1EE7154F0E3A9E5328D534A607DAEFADB
-18A4799ADD984C55B661F55CD362ADBB798CBD4B74B75F336F4DDD8EF632AD0B
-F5CA6F7EF31B2DD710009697477B0BCCB5E37E8EAA520A9262C7917288DE1D6C
-091201C95C6C85525C9CECA803707D20C31137EDF142A7AB779FC50C5586EE83
-552D9F84A7ED5571ACE0D861A20F05D59A9553F79831AAFD695717280B6C428A
-4D761CE35EDFF4DA7BB90F7F889FAD73B65E726CE83BD99634CFBE1F585B9359
-881BDCD511F9892FAF904F98C476DC460E1B8BF4CB52CD9E61E51EF9DAF57949
-A5FDC5440039289129F0C61D84C0D250AA90073661B242AD9049431AEE64119B
-E85A1A83F0B07F19745C1CA63B80B8BF3FED05B526AD5D4999C58A477F9262D9
-5DCA8FB1708530F16959C56F531E9671FCF39EB1E8F92984FFEF64F1F4DB3BAB
-5F1D6F06DE567D86C47AEFA6BD997FF0B7583CD19F7A69DA277EFEE3035E1FFF
-D89EB0E00C93D057534C2FC2DFA4E92BBEB8ED0F53D9D8C3D21C25CBDF649BFD
-178CB05049539C7F9DC3FBEC414B62B53C720092F6713010A3F65B3F9CEF4405
-8E4DF20F32DD3164F35D52851B84BED1094B769CDF73
+2FC33D0D499DBE56C6668E137715D435D6B683E0113647B2765AB0F3D98AC717
+5B33C3EDDE18506E73B4E392B022F30480BD30F59B2E3A59D93017296C3156B4
+B5722E1955777716388AA987B2665669716F866FE6BDAD5E74A523CC03915F26
+9B7B231F5D9B1F61DF7CB01ED3F27070E36547B263855DF5B2E3ABD2ACC440B9
+0826E1D9B057F51ACE6BBADF67DC4C0A0F1AE1F8606EE140FB1B2D8843522362
+8762E804EDDD847E3201FE5EE8F0F34C2C187B58D5AC8F5D150CB3584CB2DD0E
+C16B9625A9F795211DB4FF82FF02AC437D4E47E6DCDC1159D24520249DFF1C41
+2A623E442ACEB6BC69133B99DC80ADA307ED5D47ABD348FDF349085C2CDCFD4E
+43F9656FE59EDACF3C11361D8DBE56162631049333E66F494B254381414CFE91
+8D91E50414A004EE730B80A588C792E8AE3CE5019FA34C43654B8B293AD57519
+ABB8F34817296D47D49BB98035C973E5CAD59EF76A44ABA084649110CBEFAE57
+A7B3CE611D9065828AE89DA68BB86B423B8A2EB3CC9A9302692555D4127D754F
+BC6730C6BA23F13C6A8BD9FAE1E8D13A3967607FDB42D5729F1EDC4D11601C0C
+FF97705B5DE9E3E78C8D3252A6710B6BC1B2599C68076E7AC67EE55ED3DEA9CE
+97B691CEA9D9D5987DA181DF71433965C58C2BB5117F5257FEE5E0F50C88AEE2
+25EEFAD0E4D1FCAD6D4871F7F62683D81C6622374700176A94DF43D46BE2F2D6
+2459FB8DAA2FCF9F2F54CAAE768D5D0C6AAA34DE207A87CA574EF2465C216D66
+C448F5AF51FAB37EB7F78D1EC92E59D90CBD15626B7F1A535046E3399AC08010
+4B9978A76DE005ACF7C89F3456CDD267A164E499DB2FA99A547041B2402EC067
+8169E334136BD1C5007FADD425DDB95CB268697B07581B7B4E9E5429A53DBCCD
+EA58B7FE38208A97A64C7EDC850C1A6D50E9C37516D192CBA3F77577A7B8E581
+570C84FEFBCB6AFCBDD1B2D2BB1CB1E211E02C3502CEA050CDE090BC0F101C27
+3643951846FD3CBB3454A9A6EAF0F81450F0E6474148EFFC6BDA692F9116228D
+366587DE955F4A0568DC07974613F01240566DC7C821CDD6E80B760C563126CE
+33BF6B0808B86AD9D8AC4B2CEF41BE8163BF8084336C9E705F5D7BD6C8B6F162
+7F3A224703F4CB287E90017469C4584FD71B2438619BF3E942CAB9BDB481DF52
+926FF3481E9A0D4D696B8E0F17F91637114A96CA2EBF5589AD650022FB95FCE3
+63145735C8F15578E9828046C710525509E381FA400DB658C7E568CB7C56B3C9
+61B48B71F4020440969424D3062ED74A64FF9C6B74E14D460862D239B5812461
+A2506B3074897F1FB5B8C5EFAA5BCE70CA1274F0
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
@@ -445,207 +600,165 @@
 %%EndResource
 %%EndProlog
 %%BeginSetup
- /uhvr8r /JXDTPR-NimbusSanL-Regu def
- /cmr8 /ZVWFFO-CMR8 def
+ /cmtt10 /ICXWUR-CMTT10 def
+ /cmr8 /GMTUEE-CMR8 def
 %%EndSetup
 %%Page: 1 1
  0 0 0 setrgbcolor
-newpath -0.09962 0.09962 moveto
--0.09962 -0.09962 lineto
-0.09962 -0.09962 lineto
-211.90288 -0.09962 lineto
-211.90288 0.09962 lineto
-211.90288 50.93224 lineto
-211.70363 50.93224 lineto
--0.09962 50.93224 lineto
--0.09962 50.73299 lineto
--0.09962 -0.09962 lineto
-0.09962 -0.09962 lineto
-0.09962 0.09962 lineto
-0.09962 50.93224 lineto
-0.09962 50.73299 lineto
-211.90288 50.73299 lineto
-211.70363 50.73299 lineto
-211.70363 -0.09962 lineto
-211.70363 0.09962 lineto
+newpath -0.1 0.1 moveto
+-0.1 -0.1 lineto
+0.1 -0.1 lineto
+211.90326 -0.1 lineto
+211.90326 0.1 lineto
+211.90326 56.58087 lineto
+211.70325 56.58087 lineto
+-0.1 56.58087 lineto
+-0.1 56.38086 lineto
+-0.1 -0.1 lineto
+0.1 -0.1 lineto
+0.1 0.1 lineto
+0.1 56.58087 lineto
+0.1 56.38086 lineto
+211.90326 56.38086 lineto
+211.70325 56.38086 lineto
+211.70325 -0.1 lineto
+211.70325 0.1 lineto
  closepath fill
- 0 0.48956 dtransform truncate idtransform setlinewidth pop [] 0 setdash
- 1 setlinecap 1 setlinejoin 10 setmiterlimit
-newpath 16.65692 12.80875 moveto
-29.14793 5.59703 lineto stroke
-newpath 18.2579 15.58173 moveto
-29.07265 9.3378 lineto stroke
-newpath 29.14793 5.59703 moveto
-45.9096 15.27437 lineto stroke
- 0 1 0 setrgbcolor 0.48956
- 0 dtransform exch truncate exch idtransform pop setlinewidth
-newpath 45.9096 15.27437 moveto
-45.9096 34.62903 lineto stroke
-newpath 42.70766 17.20995 moveto
-42.70766 32.69345 lineto stroke
- 0 0 0 setrgbcolor 0 0.48956 dtransform truncate idtransform setlinewidth pop
-newpath 45.9096 34.62903 moveto
-33.41847 41.84073 lineto stroke
-newpath 24.87727 41.84067 moveto
-12.38626 34.62903 lineto stroke
-newpath 26.47826 39.06769 moveto
-15.66351 32.82384 lineto stroke
- 0.48956 0 dtransform exch truncate exch idtransform pop setlinewidth
-newpath 12.38626 34.62903 moveto
-12.38625 19.54489 lineto stroke
- 0 0.48956 dtransform truncate idtransform setlinewidth pop
-newpath 45.9096 15.27437 moveto
-56.46082 9.18266 lineto stroke
-newpath 45.9096 34.62903 moveto
-56.46082 40.72072 lineto stroke
  1 0 0 setrgbcolor
-newpath 8.89218 11.78027 moveto
-9.62653 11.78027 lineto
-9.62653 18.76845 lineto
-8.89218 18.76845 lineto
+newpath 54.2302 6.07826 moveto
+54.98193 6.07826 lineto
+54.98193 13.30063 lineto
+54.2302 13.30063 lineto
  closepath fill
-newpath 15.14601 11.78027 moveto
-15.88036 11.78027 lineto
-15.88036 18.76845 lineto
-15.14601 18.76845 lineto
+newpath 60.70082 6.07826 moveto
+61.45256 6.07826 lineto
+61.45256 13.30063 lineto
+60.70082 13.30063 lineto
  closepath fill
-newpath 9.92026 18.76845 moveto
-8.89218 18.76845 lineto
-14.85228 11.78027 lineto
-15.88036 11.78027 lineto
+newpath 55.28262 13.30063 moveto
+54.2302 13.30063 lineto
+60.40013 6.07826 lineto
+61.45256 6.07826 lineto
  closepath fill
  0 0 1 setrgbcolor
-newpath 25.65384 40.81227 moveto
-26.38818 40.81227 lineto
-26.38818 47.80045 lineto
-25.65384 47.80045 lineto
+newpath 54.2302 46.23317 moveto
+54.98193 46.23317 lineto
+54.98193 53.45554 lineto
+54.2302 53.45554 lineto
  closepath fill
-newpath 31.90767 40.81227 moveto
-32.64201 40.81227 lineto
-32.64201 47.80045 lineto
-31.90767 47.80045 lineto
+newpath 60.70082 46.23317 moveto
+61.45256 46.23317 lineto
+61.45256 53.45554 lineto
+60.70082 53.45554 lineto
  closepath fill
-newpath 26.68192 47.80045 moveto
-25.65384 47.80045 lineto
-31.61394 40.81227 lineto
-32.64201 40.81227 lineto
+newpath 55.28262 53.45554 moveto
+54.2302 53.45554 lineto
+60.40013 46.23317 lineto
+61.45256 46.23317 lineto
  closepath fill
- 0 0 0 setrgbcolor 0 0.73434 dtransform truncate idtransform setlinewidth pop
- 0 setlinecap
-newpath 63.83809 7.838 moveto
-63.7824 8.70033 63.5772 9.48912 62.82791 9.8439 curveto
-61.94322 10.2628 59.51965 10.2628 58.63496 9.8439 curveto
-57.56453 9.33705 57.60452 7.94446 57.60452 6.717 curveto
-57.60452 5.48953 57.56453 4.09692 58.63496 3.59007 curveto
-59.51965 3.17117 61.94322 3.17117 62.82791 3.59007 curveto
-63.5772 3.94485 63.7824 4.73364 63.83809 5.596 curveto stroke
-newpath 71.62305 6.717 moveto
-71.62305 7.94446 71.66304 9.33705 70.5926 9.8439 curveto
-69.70792 10.2628 67.28435 10.2628 66.39966 9.8439 curveto
-65.32922 9.33705 65.36922 7.94446 65.36922 6.717 curveto
-65.36922 5.48953 65.32922 4.09692 66.39966 3.59007 curveto
-67.28435 3.17117 69.70792 3.17117 70.5926 3.59007 curveto
-71.66304 4.09692 71.62305 5.48953 71.62305 6.717 curveto closepath stroke
-newpath 79.38774 6.717 moveto
-79.38774 7.94446 79.42773 9.33705 78.3573 9.8439 curveto
-77.47261 10.2628 75.04904 10.2628 74.16435 9.8439 curveto
-73.09392 9.33705 73.13391 7.94446 73.13391 6.717 curveto
-73.13391 5.48953 73.09392 4.09692 74.16435 3.59007 curveto
-75.04904 3.17117 77.47261 3.17117 78.3573 3.59007 curveto
-79.42773 4.09692 79.38774 5.48953 79.38774 6.717 curveto closepath stroke
-newpath 80.53143 3.2229 moveto
-81.26578 3.2229 lineto
-81.26578 10.21107 lineto
-80.53143 10.21107 lineto
+ 0 0 0 setrgbcolor
+newpath 86.97878 7.24837 moveto
+87.73051 7.24837 lineto
+87.73051 14.47073 lineto
+86.97878 14.47073 lineto
  closepath fill
- 1 setlinecap
-newpath 80.8986 6.717 moveto
-87.15244 6.717 lineto stroke
-newpath 86.78526 3.2229 moveto
-87.5196 3.2229 lineto
-87.5196 10.21107 lineto
-86.78526 10.21107 lineto
+newpath 93.4494 7.24837 moveto
+94.20114 7.24837 lineto
+94.20114 14.47073 lineto
+93.4494 14.47073 lineto
  closepath fill
-newpath 57.23735 39.6923 moveto
-57.9717 39.6923 lineto
-57.9717 46.68048 lineto
-57.23735 46.68048 lineto
+newpath 88.0312 14.47073 moveto
+86.97878 14.47073 lineto
+93.14871 7.24837 lineto
+94.20114 7.24837 lineto
  closepath fill
-newpath 63.49118 39.6923 moveto
-64.22552 39.6923 lineto
-64.22552 46.68048 lineto
-63.49118 46.68048 lineto
+newpath 95.00368 7.24837 moveto
+95.75542 7.24837 lineto
+95.75542 14.47073 lineto
+95.00368 14.47073 lineto
  closepath fill
-newpath 58.26543 46.68048 moveto
-57.23735 46.68048 lineto
-63.19745 39.6923 lineto
-64.22552 39.6923 lineto
+ 0 0.75172 dtransform truncate idtransform setlinewidth pop [] 0 setdash
+ 1 setlinecap 1 setlinejoin 10 setmiterlimit
+newpath 95.37955 10.85956 moveto
+101.85017 10.85956 lineto stroke
+newpath 101.4743 7.24837 moveto
+102.22604 7.24837 lineto
+102.22604 14.47073 lineto
+101.4743 14.47073 lineto
  closepath fill
-newpath 71.62305 43.1864 moveto
-71.62305 44.41386 71.66304 45.80646 70.5926 46.31331 curveto
-69.70792 46.73221 67.28435 46.73221 66.39966 46.31331 curveto
-65.32922 45.80646 65.36922 44.41386 65.36922 43.1864 curveto
-65.36922 41.95894 65.32922 40.56633 66.39966 40.05948 curveto
-67.28435 39.64058 69.70792 39.64058 70.5926 40.05948 curveto
-71.66304 40.56633 71.62305 41.95894 71.62305 43.1864 curveto closepath stroke
  0 setlinecap
-newpath 73.13391 36.28728 moveto
-77.29126 39.65347 lineto
-77.72874 41.04623 76.6722 42.45798 75.21259 42.43095 curveto
-73.91333 42.40689 72.97609 41.28598 73.00684 40.0298 curveto stroke
-newpath 77.65843 35.80995 moveto
-77.65843 36.5443 lineto
-72.76674 36.5443 lineto
-72.76674 35.80995 lineto
+newpath 103.40445 3.72455 moveto
+107.70834 7.20824 lineto
+108.16013 8.64967 107.06673 10.11005 105.5564 10.08241 curveto
+104.21153 10.0578 103.24103 8.89792 103.27287 7.59808 curveto stroke
+newpath 108.08421 3.23592 moveto
+108.08421 3.98766 lineto
+103.02858 3.98766 lineto
+103.02858 3.23592 lineto
  closepath fill
-10.60391 52.25127 moveto
-(\(draw\)) uhvr8r 9.96265 fshow
- 0 0.48956 dtransform truncate idtransform setlinewidth pop 1 setlinecap
-newpath 132.84317 12.80875 moveto
-145.33418 5.59703 lineto stroke
-newpath 134.44415 15.58173 moveto
-145.2589 9.3378 lineto stroke
-newpath 145.33418 5.59703 moveto
-162.09586 15.27437 lineto stroke
- 0.48956 0 dtransform exch truncate exch idtransform pop setlinewidth
-newpath 162.09586 15.27437 moveto
-162.09586 34.62903 lineto stroke
-newpath 158.8939 17.20995 moveto
-158.8939 32.69345 lineto stroke
- 0 0.48956 dtransform truncate idtransform setlinewidth pop
-newpath 162.09586 34.62903 moveto
-149.60472 41.84073 lineto stroke
-newpath 141.06352 41.84067 moveto
-128.57251 34.62903 lineto stroke
-newpath 142.6645 39.06769 moveto
-131.84976 32.82384 lineto stroke
- 0.48956 0 dtransform exch truncate exch idtransform pop setlinewidth
-newpath 128.57251 34.62903 moveto
-128.5725 19.54489 lineto stroke
- 0 0.48956 dtransform truncate idtransform setlinewidth pop
-newpath 162.09586 15.27437 moveto
-172.64706 9.18266 lineto stroke
-newpath 162.09586 34.62903 moveto
-172.64706 40.72072 lineto stroke
-126.2985 11.39201 moveto
-(N) cmr8 7.73563 fshow
-141.45183 40.42401 moveto
-(N) cmr8 7.73563 fshow
-173.03534 2.83464 moveto
-(C) cmr8 7.73563 fshow
-178.97145 2.83464 moveto
-(O) cmr8 7.73563 fshow
-185.36418 2.83464 moveto
-(O) cmr8 7.73563 fshow
-191.75691 2.83464 moveto
-(H) cmr8 7.73563 fshow
-173.03534 39.30405 moveto
-(N) cmr8 7.73563 fshow
-179.19171 39.30405 moveto
-(O) cmr8 7.73563 fshow
-185.58444 35.42169 moveto
-(2) cmr8 7.73563 fshow
-126.79016 52.25127 moveto
-(\(cmr8\)) uhvr8r 9.96265 fshow
+ 0 0.50114 dtransform truncate idtransform setlinewidth pop 1 setlinecap
+newpath 40.45374 19.72816 moveto
+53.34746 12.28403 lineto stroke
+newpath 44.04344 21.47943 moveto
+55.0032 15.15187 lineto stroke
+newpath 62.33528 12.28403 moveto
+75.229 19.72816 lineto stroke
+ 0 1 0 setrgbcolor 0.50114
+ 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 75.229 19.72816 moveto
+75.229 39.80562 lineto stroke
+newpath 71.91751 21.73604 moveto
+71.91751 37.79782 lineto stroke
+ 0 0 0 setrgbcolor 0 0.50114 dtransform truncate idtransform setlinewidth pop
+newpath 75.229 39.80562 moveto
+62.33528 47.24976 lineto stroke
+newpath 53.34746 47.24976 moveto
+40.45374 39.80562 lineto stroke
+newpath 55.0032 44.38191 moveto
+44.04344 38.05435 lineto stroke
+ 0.50114 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 40.45374 39.80562 moveto
+40.45374 19.72816 lineto stroke
+ 0 0.50114 dtransform truncate idtransform setlinewidth pop
+newpath 75.229 19.72816 moveto
+86.09601 13.45413 lineto stroke
+6.07166 45.71011 moveto
+(\(draw\)) cmtt10 9.96265 fshow
+150.14568 6.07826 moveto
+(N) cmr8 10.56937 fshow
+150.14568 46.23317 moveto
+(N) cmr8 10.56937 fshow
+182.89426 7.24837 moveto
+(N) cmr8 10.56937 fshow
+192.2405 7.24837 moveto
+(H) cmr8 10.56937 fshow
+201.43135 3.21307 moveto
+(2) cmr8 10.56937 fshow
+newpath 136.30315 19.72816 moveto
+149.19687 12.28403 lineto stroke
+newpath 139.89285 21.47943 moveto
+150.85262 15.15187 lineto stroke
+newpath 159.506 13.04684 moveto
+171.07841 19.72816 lineto stroke
+ 0.50114 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 171.07841 19.72816 moveto
+171.07841 39.80562 lineto stroke
+newpath 167.76692 21.73604 moveto
+167.76692 37.79782 lineto stroke
+ 0 0.50114 dtransform truncate idtransform setlinewidth pop
+newpath 171.07841 39.80562 moveto
+159.506 46.48694 lineto stroke
+newpath 149.19687 47.24976 moveto
+136.30315 39.80562 lineto stroke
+newpath 150.85262 44.38191 moveto
+139.89285 38.05435 lineto stroke
+ 0.50114 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 136.30315 39.80562 moveto
+136.30315 19.72816 lineto stroke
+ 0 0.50114 dtransform truncate idtransform setlinewidth pop
+newpath 171.07841 19.72816 moveto
+181.94542 13.45413 lineto stroke
+101.92107 45.71011 moveto
+(\(cmr8\)) cmtt10 9.96265 fshow
 showpage
 %%EOF

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc.mf
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc.mf	2019-02-11 22:04:43 UTC (rev 50002)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc.mf	2019-02-11 22:05:08 UTC (rev 50003)
@@ -1,12 +1,12 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Molecular Coding Format file for mcf_manual.tex  by Akira.Yamaji 2019.01.03
+% Molecular Coding Format file for mcf_manual.tex  by Akira.Yamaji 2019.02.11
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-input mcf2graph.mf;   %% it must be version 4.35 or later
+input mcf2graph.mf;   %% it must be version 4.36 or later
 %------------------------------------------------------------------------
-sw_aux_out:=0;
 sw_mol_frame:=0;
 sw_expand:=0;
 sw_solid:=2;
+%%%%sw_aux_out:=0;
 %%%%%sw_arrow:=1;
 %%%%%sw_rep_out:=1;
 %***********************************************************************
@@ -515,19 +515,16 @@
 %***********************************************************************
 beginfont("EN:Change color,font")
   font_wd:=75mm;
-  font_ht:=18mm;
-  sw_clip:=1;
+  font_ht:=20mm;
   sw_label:=1;
-  defaultfont:="uhvr8r";
-  defaultsize:=8bp;
-  atomfontsize:=8bp;
+  defaultfont:="cmtt10";
+  defaultsize:=10bp;
   margin_left_right:=3mm;
-  MCa(0,0.5)(<30,Ph,{1,5}:N,3:/COOH,4:/NO2,1:red,5:blue,3=green)
-  ext(label.urt("(draw)",p0+(0,h));)
+  MCa(0.25,0)(<30,Ph,{2,5}:N,3:/NH2,2:red,5:blue,3=green)
+  ext(label.lft("(draw)",p0+(0,.9h));)
   atomfont:="cmr8";
-  atomfontsize:=8bp;
-  MCa(1,0.5)(<30,Ph,{1,5}:N,3:/COOH,4:/NO2)
-  ext(label.urt("(cmr8)",p0+(0,h));)
+  MCa(1,0)(<30,Ph,{2,5}:N,3:/NH2)
+  ext(label.lft("(cmr8)",p0+(0,.9h));)
 endfont
 %***********************************************************************
 beginfont("EN:Make brock")

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.tex
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.tex	2019-02-11 22:04:43 UTC (rev 50002)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.tex	2019-02-11 22:05:08 UTC (rev 50003)
@@ -1,5 +1,5 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%  Molecular Coding Format manual           by  Akira Yamaji 2019.01.03
+%  Molecular Coding Format manual           by  Akira Yamaji 2019.02.11
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \documentclass[a4paper]{article}
 %%%%\documentclass[a4paper,twoside]{article}
@@ -37,7 +37,7 @@
 %----------------------------------------------------------------------------
 \MCFformat=-1%   use pkfont
 %%\MCFformat=0%    \includegraphics{jobname-nnn.mps}
-%%\MCFformat=1%    \includegraphics[width= ]{jobname-nnn.png}
+%%\MCFformat=1%    \includegraphics[width=wd{jobname-nnn.png}
 %%\MCFformat=2%    \includegraphics{jobname-nnn.svg}
 %%\MCFformat=3%    \includegraphics{jobname-nnn.eps}
 %----------------------------------------------------------------------------
@@ -579,15 +579,14 @@
   3:red   : change color of A3 red
   atomfont:="cmr8" : use cmr8 for atom font
 
-  defaultfont:="uhvr8r";
+  defaultfont:="cmtt8";
   defaultsize:=8bp;
-  MCa(0,0.5)(<30,Ph,{1,5}:N,3:/COOH,4:/NO2,
-               1:red,5:blue,3=green)
-  ext(label.urt("(draw)",p0+(0,h));)
+  MCa(0.25,0)(<30,Ph,{2,5}:N,3:/NH2,
+               2:red,5:blue,3=green)
+  ext(label.lft("(draw)",p0+(0,0.9h));)
   atomfont:="cmr8";   % default:"draw"
-  atomfontsize:=8bp;  % default:8bp
-  MCa(1,0.5)(<30,Ph,{1,5}:N,3:/COOH,4:/NO2)
-  ext(label.urt("(cmr8)",p0+(0,h));)
+  MCa(1,0)(<30,Ph,{2,5}:N,3:/NH2)
+  ext(label.lft("(cmr8)",p0+(0,0.9h));)
 \end{verbatim}
 {\MCFformat=0 \MCFgraph}
 %-----------------------------------------------------------------------------
@@ -1403,7 +1402,7 @@
 \end{verbatim}
 \paragraph{(Command line)}
 \begin{verbatim}
-  >mpost -s ahlength=1 -s bboxmargin=0 FILENAME
+  >mpost -s ahlength=1 FILENAME
 \end{verbatim}
 \paragraph{(Sourse)}
 \begin{verbatim}
@@ -1469,7 +1468,7 @@
 \end{verbatim}
 \paragraph{(Command line)}
 \begin{verbatim}
-  >mpost -s ahlength=2 -s bboxmargin=0 FILENAME
+  >mpost -s ahlength=2 FILENAME
 \end{verbatim}
 \paragraph{(Output)}
 \begin{verbatim}
@@ -1532,8 +1531,8 @@
 \end{verbatim}
 \paragraph{(Command line)}
 \begin{verbatim}
-  >mpost -s ahlength=5 -s bboxmargin=0  FILENAME     % MOL(V2000)
-  >mpost -s ahlength=6 -s bboxmargin=0  FILENAME     % MOL(V3000)
+  >mpost -s ahlength=5 -s FILENAME     % MOL(V2000)
+  >mpost -s ahlength=6 -s FILENAME     % MOL(V3000)
 \end{verbatim}
 \paragraph{(Output)}
 \begin{verbatim}

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.tex
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.tex	2019-02-11 22:04:43 UTC (rev 50002)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.tex	2019-02-11 22:05:08 UTC (rev 50003)
@@ -1,7 +1,7 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Example of  MCF typest with LuaLaTeX(luamplib)     by A.Yamaji    2019.01.03
+% Example of  MCF typest with LuaLaTeX(luamplib)     by A.Yamaji    2019.02.11
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%% mcf2graph.mf it must be version 4.35 or later
+%%% mcf2graph.mf it must be version 4.36 or later
 \documentclass{article}
 %------------------------------------------------------------------------------
 \usepackage{luamplib}%
@@ -458,3 +458,5 @@
 \end{verbatim}
 %----------------------------------------------------------------------------
 \end{document}
+---
+\end{document}

Modified: trunk/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf
===================================================================
--- trunk/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf	2019-02-11 22:04:43 UTC (rev 50002)
+++ trunk/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf	2019-02-11 22:05:08 UTC (rev 50003)
@@ -1,5 +1,5 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% mcf2graph ver 4.35     Copyright (c) 2013-2019   Akira Yamaji
+% mcf2graph ver 4.36     Copyright (c) 2013-2019   Akira Yamaji
 %
 % Permission is hereby granted, free of charge, to any person obtaining a copy of this software
 % and associated documentation files (the "Software"), to deal in the Software without restriction,
@@ -36,13 +36,13 @@
 % Set to use plain.mp (label,arrow,atom)     : mpost -s labeloffset=2  FILENAME
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 tracingstats:=1;
-message " This is mcf2graph ver 4.35  2019.01";
+message " This is mcf2graph ver 4.36  2019.02";
 %-------------------------------------------------------------------------------------------------
-newinternal nA,nB,nC,nD,nE,nF,char_num,str_cnt,sub_usr,sub_int,tbl_cnt,sharp_char;
-numeric save_para[],comD[][],parD[][],cntD[],tbl_str_wd[],tbl_atom[],tbl_subst[][],tbl_atom_wt[],
+newinternal char_num,str_cnt,sub_usr,sub_int,tbl_cnt,sharp_char;
+numeric save_para[],comD[][],parD[][],cntD[],tbl_atom[],tbl_subst[][],tbl_atom_wt[],
         tbl_atom_mi[],tbl_char_wd[],tbl_char_ht[],andA[],and_rot[],chargeA[];
-string  tbl_atom_str[],strD[],var[],tag[],mp_log_name,aux_delimiter,atomfont,
-        save_atomfont,save_defaultfont;
+string  tbl_atom_str[],strD[],var[],tag[],out_file_name,out_file_aux,out_file_rep,
+        aux_delimiter,atomfont,save_atomfont,save_defaultfont;
 picture mol_stru[];
 path    arrow_path,arrow_head;
 %-------------------------------------------------------------------------------------------------
@@ -56,9 +56,14 @@
 if (known green)and(known ahlength):
   f_MP:=1;
   color color_list[];
+  prologues:=3;
+  %-----------------------------------------------------------------------------------------
+  fontmapfile "pdftex.map";
+  %-----------------------------------------------------------------------------------------
   atomfont:=defaultfont:="";
-  mp_log_name:=jobname&"-info.aux";
-  prologues:=3;
+  out_file_aux:=jobname&"-info.aux";
+  out_file_rep:=jobname&"-report.txt";
+  def out_file_mol= jobname&"-"&fit_zero(char_num)&"-"&inf_EN&".mol" enddef;
   %-- default bboxmargin=2------------------------------------------------------------------
   if     bboxmargin=0: def shipit = enddef;                    % No image file
   elseif bboxmargin=1: proc_end:=1;                            % output first font only
@@ -74,39 +79,40 @@
   elseif ahangle=13: outputformat:="png"; hppp:=vppp:=0.06;    % png format(1200dpi)
   fi
   %--default ahlength=4---------------------------------------------------------------------
-  if     ahlength=1: sw_aux_out:=1;          % output aux
-  elseif ahlength=2: sw_rep_out:=1;          % output report
-  elseif ahlength=5: sw_mol_out:=1;          % output MOL V2000
-  elseif ahlength=6: sw_mol_out:=2;          % output MOL V3000
+  if     ahlength=1: sw_aux_out:=1; def shipit = enddef;       % output aux file
+  elseif ahlength=2: sw_rep_out:=1; def shipit = enddef;       % output report
+  elseif ahlength=5: sw_mol_out:=1; def shipit = enddef;       % output MOL(V2000)
+  elseif ahlength=6: sw_mol_out:=2; def shipit = enddef;       % output MOL(V3000)
   fi
   %--default labeloffset=3------------------------------------------------------------------
   if     labeloffset=1: sw_arrow:=1; defaultfont:="uhvr8r";           % plain.mp label
   elseif labeloffset=2: sw_arrow:=1; defaultfont:=atomfont:="uhvr8r"; % plain.mp label,atom
   fi
-  %-----------------------------------------------------------------------------------------
+  %--default outputtemplate:="%j-%3c."&"mps"------------------------------------------------
   if (outputformat="eps")and(ahangle<>3): outputtemplate:="%j-%3c."&"mps";
   else:                                   outputtemplate:="%j-%3c."&outputformat;
   fi
+  %-----------------------------------------------------------------------------------------
   def beginchar(expr a,b,c,d)= beginfig(a) w:=b*pt; h:=c*pt; enddef;
   def endchar = endfig enddef;
-  def printf expr s= write s to mp_log_name enddef;
+  def printf expr s= write s to out_file_name enddef;
   def # = enddef;
   def Cp(expr s) = if known s: if s<>0: withcolor color_list[s] fi fi enddef;
   if atomfont="":    atomfont:="draw";    fi % default atom font
   if defaultfont="": defaultfont:="draw"; fi % default label font
+  %-----------------------------------------------------------------------------------------
 else: f_MP:=0;
   string defaultfont;
   dotlabeldiam:=3bp;
   def Cp(expr s) = enddef;
   def color = transform enddef;
-  def printf expr s= message s enddef;
   sw_arrow:=0;
-  %-----------------------------------------------------------------------
   atomfont:="draw";
   defaultfont:="draw";
   mode_setup;
 fi
 clearit;
+%--------------------------------------------------------------------------------------------------
 for i=0 upto 20: mol_stru[i]:=nullpicture; endfor
 %--------------------------------------------------------------------------------------------------
 let DIV= /; let MUL= *; let LT= <; let GT= >; let AND= &; let :: = : ; let == = =; let ef=elseif;
@@ -117,8 +123,9 @@
 ratio_thickness_bond:=0.015;  ratio_thickness_char:=0.1;
 ratio_char_bond:=1.5;         ratio_bondgap_bond:=0.15;  ratio_zebragap_bond:=0.12;
 ratio_zebra_black:=0.4;       ratio_wedge_bond:=0.12;    ratio_atomgap_atom:=0.050;
-offset_thickness:=0.2pt;      offset_bond_gap:=0.3pt;    offset_zebra_gap:=0.1pt;
-offset_atom:=0.8pt;           offset_wedge:=0.4pt;       thickness_font_frame:=0.2pt;
+offset_thickness:=0.2bp;      offset_bond_gap:=0.3bp;    offset_zebra_gap:=0.1bp;
+offset_atom:=0.8pt;           offset_wedge:=0.4bp;
+thickness_font_frame:=0.2bp;  thickness_atom_frame:=0.1bp;
 max_bond_length:=10mm;        bond_len:=8mm;
 font_wd:=30mm;                font_ht:=20mm;
 %==================================================================================================
@@ -126,7 +133,6 @@
 ahlength:=4bp;
 bboxmargin:=2bp;
 defaultsize:=8bp;
-atomfontsize:=8bp;
 defaultscale:=1;
 labeloffset:=3bp;
 ext_defaultline:=0.5bp;
@@ -151,12 +157,15 @@
   ratio_wedge_bond,ratio_atomgap_atom,ratio_bond_width,font_wd,font_ht,
   bond_len,offset_atom,offset_wedge,max_bond_length,offset_zebra_gap,offset_bond_gap,
   thickness_font_frame,offset_thickness,numberA_start,numberA_end,numberB_start,numberB_end,
-  atomfontsize,defaultsize,defaultscale,labeloffset,
+  defaultsize,defaultscale,labeloffset,
   Me,Et,Pr,Bu,iPr,tBu,CH3,CF3,CCl3,CBr3,NH,NH2,NO2,OH,CHO,COOH,CN,SH,OMe,OEt,SMe,SEt,
   !CH3,!NH2,!OH,!CHO,!COOH,!CN,!SH,!NO2
 enddef;
 %--------------------------------------------------------------------------------------------------
+def ]]]=] ] ] enddef;
+vardef iif(expr a,b,c)=if a: b else: c fi enddef;
 vardef pic_c(expr i,s)= substring(i,i+1) of s enddef;
+vardef sfB(expr a,b,c)= a shifted ((b,0) rotated c) enddef;
 %--------------------------------------------------------------------------------------------------
 def store_par(text t)=
   nA:=0; for list=t: nA:=nA+1; if save_para[nA]<>list: save_para[nA]:=list; fi endfor
@@ -166,20 +175,21 @@
 enddef;
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 def beginfont(text s)=
-  char_num:=char_num+1;
-  store_par(parameter_list);
-  save_atomfont:=atomfont;
-  save_defaultfont:=defaultfont;
   begingroup
   save cntA,cntB,cntM,minX,minY,f_beginchar,numS,sftX,sftY,f_ext,
        cal_FM,cal_MW,cal_MW_str,cal_MI,cal_MI_str,wdM,htM,
        inf_NO,inf_EN,inf_JN,inf_FM,inf_CAS,inf_USE,inf_EXA,inf_EXB,inf_MW,
-       posBs,posBe,posA,posM,lineB,sB,eB,angB,angA,lenB,ang_br,info,pT;
-  numeric lineB[],sB[],eB[],angB[],angA[],lenB[],ang_br[],numS[],wdM[],htM[];
-  pair posA[],posM[][],pT,posBs,posBe;
+       posA,posM,lineB,sB,eB,angB,angA,wdA,dxA,lenB,ang_br,info;
+  numeric lineB[],sB[],eB[],angB[],angA[],lenB[],angX[],numS[],wdM[],htM[],wdA[],dxA[],dx_A[];
+  pair posA[],posM[][];
   string info[],cal_FM,cal_MW,cal_MW_str,cal_MI,cal_MI_str,
          inf_NO,inf_EN,inf_JN,inf_FM,inf_CAS,inf_USE,inf_EXA,inf_EXB,inf_MW;
   %------------------------------------------------------------------------------------------------
+  char_num:=char_num+1;
+  store_par(parameter_list);
+  save_atomfont:=atomfont;
+  save_defaultfont:=defaultfont;
+  %------------------------------------------------------------------------------------------------
   for i:=1 upto max_inf_num: info[i]:=":"; endfor
   f_ext:=inf_num:=cntM:=0;
   for list=s: inf_num:=inf_num+1; info[inf_num]:=list; endfor
@@ -186,8 +196,8 @@
 enddef;
 %==================================================================================================
 def endfont=
-  if sw_clip>0:
-    nA:=4095; nB:=-4095; nC:=4095; nD:=-4095;
+  if sw_clip>=1:
+    nA:=nC:=4095; nB:=nD:=-4095;
     for i=1 upto cntM:
       if xpart(posM[1][i])<nA: nA:=xpart(posM[1][i]); fi
       if xpart(posM[2][i])>nB: nB:=xpart(posM[2][i]); fi
@@ -196,8 +206,7 @@
     endfor
     font_wd:=nB-nA+2margin_left_right;
     font_ht:=nD-nC+2margin_top_bottom;
-    for i=1 upto cntM:
-      posM[0][i]:=posM[0][i]+(margin_left_right-nA,margin_top_bottom-nC);
+    for i=1 upto cntM: posM[0][i]:=posM[0][i]+(margin_left_right-nA,margin_top_bottom-nC);
     endfor
   fi
   %-----------------------------------------------------------------------------------------------
@@ -205,8 +214,7 @@
   if (sw_font_frame=1)or(sw_font_frame=3): draw_frame((0,0),w,h,thickness_font_frame); fi
   if (sw_font_frame=2)or(sw_font_frame=3):
     nA:=w-2margin_left_right; nB:=h-2margin_top_bottom;
-    pT:=(margin_left_right,margin_top_bottom);
-    draw_frame(pT,nA,nB,thickness_font_frame);  fi
+    draw_frame((margin_left_right,margin_top_bottom),nA,nB,thickness_font_frame);  fi
   if sw_font_frame=4: draw_corner(w,h,thickness_font_frame); fi
   for i=1 upto cntM:
     addto currentpicture also mol_stru[i] shifted posM[0][i]; mol_stru[i]:=nullpicture;
@@ -214,10 +222,10 @@
   if f_ext=1: addto currentpicture also mol_stru[0]; mol_stru[0]:=nullpicture; fi
   endchar;
   clearit;
-  endgroup;
   restore_par(parameter_list);
   atomfont:=save_atomfont;
   defaultfont:=save_defaultfont;
+  endgroup;
   if proc_end=1: scantokens("bye"); fi
 enddef;
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -245,7 +253,7 @@
   def | == (_push,2) enddef;  def || == (_pop,2) enddef;
   def /secondary n ==  (_postA,n) enddef;  def //secondary n == (_postB,n) enddef;
   def */secondary n == (_postC,n) enddef;  def /*secondary n == (_postD,n) enddef;
-  def **secondary n == (_postF,n) enddef;  def */*secondary n == (_postG,n) enddef;  
+  def **secondary n == (_postF,n) enddef;  def */*secondary n == (_postG,n) enddef;
 enddef;
 %=================================================================================================
 vardef '(text TXT)= ''(incr sub_usr)(TXT); sub_usr enddef;
@@ -278,7 +286,6 @@
         cntD[ADR]:=cntD[ADR]+1;
         comD[ADR][cntD[ADR]]:=_set_atom;
         parD[ADR][cntD[ADR]]:=str_cnt;
-        if pic_c(0,list)=="{":: tbl_str_wd[str_cnt]:=1.6; else:: tbl_str_wd[str_cnt]:=1; fi
       fi
     fi
   endfor
@@ -371,6 +378,39 @@
   sub_int  %------- Retern value -------
 enddef;
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+def puts(expr POS)(expr STR)=
+  begingroup
+  save pA,sA,bA,nB,nC;
+  pair pA;
+  string sA;
+  picture bA;
+  pA:=POS;
+  nB:=defaultscale*defaultsize;
+  nC:=0;
+  %------------------------------------------------------------------------------------------------
+  for i=0 upto length(STR)-1:
+    sA:=pic_c(i,STR);
+    if sw_label_emu=1:
+      if     sA="_": nC:=iif(nC=-0.5,0,-0.5);
+      elseif sA="^": nC:=iif(nC= 0.5,0, 0.5);
+      else:
+        if defaultfont="draw":
+          draw_char(sA,pA+(0,nB*nC),nB,ratio_thickness_char*defaultscale*defaultsize,0);
+          pA:=pA+(nB*tbl_char_wd[ASCII(sA)],0);
+        else:
+          bA:=sA infont defaultfont scaled defaultscale;
+          addto currentpicture also bA shifted (pA+(0,nB*nC));
+          pA:=pA+(lrcorner bA-llcorner bA);
+        fi
+      fi
+    else:
+      draw_char(sA,pA,nB,ratio_thickness_char*defaultscale*defaultsize,0);
+      pA:=pA+(nB*tbl_char_wd[ASCII(sA)],0);
+    fi
+  endfor
+  endgroup;
+enddef;
+%==================================================================================================
 def ext_setup=
   pickup pencircle scaled ext_defaultline;
   dotlabeldiam:=3bp;
@@ -414,7 +454,7 @@
   ext_setup;
   w:=mol_wd; h:=mol_ht; l:=bond_len; aw:=atom_wd;
   p0:=(minX,minY); An:=cntA; Bn:=cntB;
-  for i=1 upto An: A[i]:=posA[i]; A[i]dir:=ang_br[i]; endfor
+  for i=1 upto An: A[i]:=posA[i]; A[i]dir:=angX[i]; endfor
   for i=1 upto Bn:
     B[i]s:=posA[sB[i]]; B[i]e:=posA[eB[i]]; B[i]:=0.5[B[i]s,B[i]e]; B[i]dir:=angB[i];
   endfor
@@ -421,47 +461,12 @@
   TXT addto mol_stru[cntM] also currentpicture; clearit;
   endgroup;
 enddef;
-%==================================================================================================
-def ext_puts(expr POS)(expr STR)=
-  begingroup
-  save cp,sA,pC,nB,nC;
-  pair cp;
-  string sA;
-  picture pC;
-  cp:=POS;
-  nB:=defaultscale*defaultsize;
-  nC:=0;
-  %------------------------------------------------------------------------------------------------
-  for i=0 upto length(STR)-1:
-    sA:=pic_c(i,STR);
-    nA:=ASCII(sA);
-    if sw_label_emu=1:
-      if     sA="_": if nC=-0.5: nC:=0; else: nC:=-0.5; fi
-      elseif sA="^": if nC= 0.5: nC:=0; else: nC:= 0.5;  fi
-      else:
-        if defaultfont="draw":
-          draw_char(sA,cp+(0,nB*nC),nB,ratio_thickness_char*defaultscale*defaultsize,0);
-          cp:=cp+(nB*tbl_char_wd[nA],0);
-        else:
-          pC:=sA infont defaultfont scaled defaultscale;
-          addto currentpicture also pC shifted (cp+(0,nB*nC));
-          cp:=cp+(lrcorner pC-llcorner pC);
-        fi
-      fi
-    else:
-      draw_char(sA,cp,nB,ratio_thickness_char*defaultscale*defaultsize,0);
-      cp:=cp+(nB*tbl_char_wd[nA],0);
-    fi
-  endfor
-  endgroup;
-enddef;
 %--------------------------------------------------------------------------------------------------
 vardef label_emu@#(expr STR,POS) = %% modified 'thelabel@#(expr s,z)' of plain.mp
-  begingroup
-  save oft,fx,fy,wds,sC,pC;
+  save oft,fx,fy,wds,sC,bA;
   pair oft,oft.lft,oft.rt,oft.top,oft.bot,oft.ulft,oft.llft,oft.urt,oft.lrt;
   string sC;
-  picture pC;
+  picture bA;
   wds:=0;
   for i=0 upto length(STR)-1:
     sC:=pic_c(i,STR);
@@ -469,8 +474,8 @@
       if (defaultfont="draw")or(f_MP=0):
         wds:=wds+defaultscale*defaultsize*tbl_char_wd[ASCII(sC)];
       else:
-        pC:=sC infont defaultfont scaled defaultscale;
-        wds:=wds+xpart(lrcorner pC-llcorner pC);
+        bA:=sC infont defaultfont scaled defaultscale;
+        wds:=wds+xpart(lrcorner bA-llcorner bA);
       fi
     fi
   endfor
@@ -483,13 +488,11 @@
   oft.urt:= ( .7, .7);   fx.urt:=0;    fy.urt:=0;
   oft.llft:=(-.7,-.7);   fx.llft:=1;   fy.llft:=1;
   oft.lrt:= ( .7,-.7);   fx.lrt:=0;    fy.lrt:=1;
-  ext_puts(POS+(labeloffset*oft@#)-(wds*fx@#,defaultscale*defaultsize*fy@#))(STR);
-  endgroup
+  puts(POS+(labeloffset*oft@#)-(wds*fx@#,defaultscale*defaultsize*fy@#))(STR);
 enddef;
 %-------------------------------------------------------------------------------------------------
 vardef dotlabel_emu@#(expr STR,POS)=
-  label_emu@#(STR,POS);
-  draw POS withpen pencircle scaled dotlabeldiam;
+  label_emu@#(STR,POS); draw POS withpen pencircle scaled dotlabeldiam;
 enddef;
 %==================================================================================================
 def drawarrow_emu expr PAT = arrow_path:=PAT; draw_arrow enddef;
@@ -546,8 +549,8 @@
   begingroup
   save com,par,adrA,adrB,f_bra,envT,envB,lenT,lineT,strAT,stkA,stkB,stkL,stkM,cntP,bondL,temp_len,
        temp_cntB,f_end,f_term,rotT,adrS,f_at,f_lineT,f_rotT,f_lenT,f_envT,angT,tempB,tempA,
-       glu,xpos,ypos,str_len,max_x,max_y,par_s,par_e,score_u,hat,f_char,ps_adr,ps_com,sA,sC,sD,pA,
-       op_com,op_par,op_cnt,crR,colorA,colorB,PA,PO,PP,PX;
+       maxX,maxY,f_char,ps_adr,ps_com,sA,sC,sD,pA,pB,factor,
+       op_com,op_par,op_cnt,crR,colorA,colorB,PA,PO,PP,PX,defaultsize,defaultscale;
   %-----------------------------------------------------------------------------------------------
   def PA= sub_add enddef;
   def PO= sub_add_op enddef;
@@ -557,46 +560,98 @@
   numeric stkB[],stkA[],stkL[],stkM[],f_char[],ps_adr[],ps_com[],colorA[],colorB[],
           op_com[][],op_par[][],op_cnt[];
   string sA,sC,sD;
-  pair pA;
+  pair pA,pB;
   %-----------------------------------------------------------------------------------------------
   if (sw_numberA>=1)or(sw_numberB>=1): ratio_atom_bond:=0.25; fi
   if (sw_expand=1)or(sw_mol_out>=1): expand_set; fi
   sub_usr:=sub_usr_start;
   sub_int:=sub_int_start;
-  par_s:=ASCII("{"); par_e:=ASCII("}"); score_u:=ASCII("_"); hat:=ASCII("^");
   cntA:=cntB:=cntP:=cntC:=0; strD[0]:=""; str_cnt:=2000; crR:=-ratio_chain_ring;
   %===============================================================================================
   ''(0)(TXT,(_term,0));
+  %-----------------------------------------------------------------------------------------------
   proc_bond_atom(1);
-  if (cntP>0)and(sw_subst_off=0): ps_get(1); fi
+  %-----------------------------------------------------------------------------------------------
+  if (cntP>0)and(sw_subst_off=0): post_get(1); fi
+  %-----------------------------------------------------------------------------------------------
   char_use_check;
+  %-scaling---------------------------------------------------------------------------------------
   if     sw_solid=1: bond_len:=font_wd*ratio_bond_width;
                      proc_size_setup; proc_skeleton; proc_scaling;
   elseif sw_solid=2: proc_size_setup; proc_skeleton; proc_scaling;
   else:
-    bond_len:=3mm; proc_size_setup;
-    for i=1 upto 6: proc_skeleton; proc_scaling;
+    bond_len:=3mm;
+    proc_size_setup;
+    for i=1 upto 6:
+      proc_skeleton; proc_scaling;
       if (mol_ht/mol_wd)>(font_ht/font_wd): factor:=(font_ht*RH-2margin_top_bottom)/mol_ht;
-      else:                                 factor:=(font_wd*RW-2margin_left_right)/mol_wd;  fi
-      exitif factor=1;
-      bond_len:=bond_len*factor; proc_size_setup;
+      else:                                 factor:=(font_wd*RW-2margin_left_right)/mol_wd;
+      fi
+      exitif (factor>=1-eps)and(factor<=1+eps);
+      bond_len:=bond_len*factor;
+      proc_size_setup;
     endfor
     if bond_len>max_bond_length:
        bond_len:=max_bond_length; proc_size_setup; proc_skeleton; proc_scaling;  fi
   fi
+  %-draw atom--------------------------------------------------------------------------------------
+  if (sw_numberA=0)and(sw_numberB=0): for i=1 upto cntA: draw_atom(i); endfor fi
+  %-draw charge------------------------------------------------------------------------------------
+  for i=1 upto cntA:
+    if andA[i]<>0:
+      sA:=char(andA[i]); nA:=angX[i]+and_rot[i]; nC:=nA mod 90;
+      if numS[i]=0: nB:=.5atom_wd;
+      else:         nB:=.85atom_wd+iif(nC<45,sind(nC),cosd(nC))*.5atom_wd;
+      fi
+      pA:=sfB(posA[i]-(.35atom_wd,.35atom_wd),nB,nA);
+      draw_char(sA,pA,atom_wd,bond_pen_wd*ratio_char_bond,0);
+    else: sA:="";
+    fi
+    nA:=length(strD[numS[i]]); sC:=substring(nA-3,nA-2) of strD[numS[i]];
+    if (sA="+")or(sC="+"): chargeA[i]:=1; ef (sA="-")or(sC="-"): chargeA[i]:=-1;
+    else: chargeA[i]:=0;
+    fi
+  endfor
+  %-draw bond-------------------------------------------------------------------------------------
+  for i=1 upto cntB: if lineB[i]<si_ : draw_bond(i); fi endfor
+  for i=1 upto cntB: if lineB[i]>=si_: draw_bond(i); fi endfor
+  %-atom numbering--------------------------------------------------------------------------------
+  if sw_numberA>=1:
+    for i=1 upto cntA:
+      if (i>=numberA_start)and(i<=numberA_end):
+        if     sw_numberA=2: nA:=i-numberA_start+1;
+        elseif sw_numberA=3: nA:=iif(numberA_end<cntA,numberA_end-i+1,cntA-i+1);
+        else:                nA:=i;
+        fi
+        erase fill unitsquare xscaled (.8atom_wd*length(decimal(nA)))
+            yscaled atom_wd shifted (posA[i]-(.5atom_wd,.5atom_wd));
+        defaultsize:=atom_wd; defaultscale:=1;
+        puts(posA[i]-(.5atom_wd,.5atom_wd))(decimal(nA));
+      fi
+    endfor
+  fi
+  %-bond numbering--------------------------------------------------------------------------------
+  if sw_numberB>=1:
+    for i=1 upto cntB:
+      if (i>=numberB_start)and(i<=numberB_end):
+        if     sw_numberB=2: nB:=i-numberB_start+1;
+        elseif sw_numberB=3: nB:=iif(numberB_end<cntB,numberB_end-i+1,cntB-i+1);
+        else:                nB:=i;
+        fi
+        erase fill unitsquare yscaled atom_wd xscaled (.8atom_wd*length(decimal(nB)))
+            shifted (.5[posA[sB[i]],posA[eB[i]]]-(.5atom_wd,.5atom_wd));
+        defaultsize:=atom_wd; defaultscale:=1;
+        puts(0.5[posA[sB[i]],posA[eB[i]]]-(.5atom_wd,.5atom_wd))(decimal(nB));
+      fi
+    endfor
+  fi
   %-----------------------------------------------------------------------------------------------
-  for i=1 upto cntB: if lineB[i]<si_ : draw_bond(i,sB[i],eB[i],angB[i],lineB[i]); fi endfor
-  for i=1 upto cntB: if lineB[i]>=si_: draw_bond(i,sB[i],eB[i],angB[i],lineB[i]); fi endfor
-  %-----------------------------------------------------------------------------------------------
-  proc_draw_atom;
-  proc_draw_charge;
-  %-----------------------------------------------------------------------------------------------
   sftX:=margin_left_right-minX+(font_wd-mol_wd-2margin_left_right)*FW;
   sftY:=margin_top_bottom-minY+(font_ht-mol_ht-2margin_top_bottom)*FH;
   cntM:=cntM+1;
   posM[0][cntM]:=(sftX,sftY);
   posM[1][cntM]:=(minX+sftX,minY+sftY);
-  posM[2][cntM]:=(max_x+sftX,max_y+sftY);
+  posM[2][cntM]:=(maxX+sftX,maxY+sftY);
   wdM[cntM]:=mol_wd;
   htM[cntM]:=mol_ht;
   if sw_mol_frame=1: draw_frame((minX,minY),mol_wd,mol_ht,thickness_font_frame) fi
@@ -610,9 +665,11 @@
   %-----------------------------------------------------------------------------------------------
 enddef;
 %-------------------------------------------------------------------------------------------------
-def ps_put=
-  if f_at=1: An:=getA(adrT); check_adrA(An); else: An:=cntA+1; fi
-   cntP:=cntP+1; ps_adr[cntP]:=An; ps_com[cntP]:=par; op_cnt[cntP]:=0;
+def post_put=
+  begingroup
+  save nA;
+  if f_at=1: nA:=getA(adrT); check_adrA(nA); else: nA:=cntA+1; fi
+   cntP:=cntP+1; ps_adr[cntP]:=nA; ps_com[cntP]:=par; op_cnt[cntP]:=0;
   if lineT<>0:  PO(_tmp_line,lineT) fi
   if rotT<>0:   PO(_rot_ang,rotT) fi
   if lenT<>crR: PO(_chg_len,lenT) fi
@@ -623,9 +680,10 @@
   if f_lenT=0:  lenT:=crR; fi 
   if f_rotT=0:  rotT:=0;   fi
   if f_envT=0:  envT:=hz;  fi
+  endgroup
 enddef;
 %-------------------------------------------------------------------------------------------------
-def ps_get(expr n)=
+def post_get(expr n)=
   sub_int:=0;
   nA:=cntP; nB:=cntD[0];
   for i=n upto cntP:
@@ -634,21 +692,24 @@
     for j=1 upto cntD[ps_com[i]]: PA(comD[ps_com[i]][j],parD[ps_com[i]][j]) endfor 
     PA(_pop,1) PA(_term,0)
   endfor
-  proc_bond_atom(nB+1); if cntP>nA: ps_get(nA+1); fi
+  proc_bond_atom(nB+1); if cntP>nA: post_get(nA+1); fi
 enddef;
 %-------------------------------------------------------------------------------------------------
 def draw_frame(expr PS,LX,LY,PN)=
-  draw ((0,0)--(LX,0)--(LX,LY)--(0,LY)--cycle) shifted PS wpss PN;
+  draw ((0,0)--(LX,0)--(LX,LY)--(0,LY)--cycle) shifted PS withpen pensquare scaled PN;
 enddef;
 %-------------------------------------------------------------------------------------------------
 def draw_corner(expr LX,LY,PN)=
-  drawdot(0,0) wpss PN; drawdot(LX,0) wpss PN; drawdot(LX,LY) wpss PN; drawdot(0,LY) wpss PN;
+  drawdot(0,0) withpen pensquare scaled PN;   drawdot(LX,0) withpen pensquare scaled PN;
+  drawdot(LX,LY) withpen pensquare scaled PN; drawdot(0,LY) withpen pensquare scaled PN;
 enddef;
 %-------------------------------------------------------------------------------------------------
 def proc_size_setup=
   if (bond_len*ratio_atom_bond+offset_atom)<.8bond_len:
-        atom_wd:=bond_len*ratio_atom_bond+offset_atom;
-  else: atom_wd:=.8bond_len; ratio_chain_ring:= .5; fi
+    atom_wd:=bond_len*ratio_atom_bond+offset_atom;
+  else:
+    atom_wd:=.8bond_len; ratio_chain_ring:= .5;
+  fi
   wedge_wd:=    bond_len*ratio_wedge_bond+offset_wedge;
   zebra_gap:=   bond_len*ratio_zebragap_bond+offset_zebra_gap;
   bondgap:=     bond_len*ratio_bondgap_bond+offset_bond_gap;
@@ -656,28 +717,35 @@
 enddef;
 %-------------------------------------------------------------------------------------------------
 def proc_scaling=
+  begingroup
+  save nU,nD,nP,nL,nR,xpos,ypos;
   minX:=minY:=4095.999;
-  max_x:=max_y:=-4095.999;
+  maxX:=maxY:=-4095.999;
   for i=1 upto cntA:
-    xpos:=xpart(posA[i]); ypos:=ypart(posA[i]);
-    if numS[i]<>0: str_len:=nC:=nD:=0;
+    xpos:=xpart(posA[i]);
+    ypos:=ypart(posA[i]);
+    if numS[i]<>0:
+      nU:=nD:=nP:=nL:=nR:=0;
       for j=0 upto length(strD[numS[i]])-1:
-        nA:=ASCII(pic_c(j,strD[numS[i]]));
-        if (nA=score_u)or(nA=hat)or(nA=par_s)or(nA=par_e):
-          if (nA=hat)and(nC<.5atom_wd): nC:=.5atom_wd; fi;
-          if (nA=score_u)and(nD<.5atom_wd): nD:=.5atom_wd; fi;
-        else: str_len:=str_len+atom_wd*tbl_char_wd[nA]; fi  
+        sA:=pic_c(j,strD[numS[i]]);
+        if     (sA="^"): nU:=.5atom_wd;
+        elseif (sA="_"): nD:=.5atom_wd;
+        elseif (sA<>"{")and(sA<>"}"): nP:=nP+atom_wd*tbl_char_wd[ASCII(sA)];
+        fi  
       endfor
-      str_ang:=(ang_br[i] mod 360); nF:=str_len;
-      if     (str_ang<=91)or(str_ang>=269): nF:=0; else: str_len:=0; fi
-      if     (xpos-nF+.5atom_wd)<minX: minX:=xpos-nF+.5atom_wd;
-      elseif (xpos+str_len-.5atom_wd)>max_x: max_x:=xpos+str_len-.5atom_wd; fi
+      if     (angX[i]<=90.1)or(angX[i]>=269.9): nR:=nP; else: nL:=nP; fi
+      if     (xpos-nL+.5atom_wd)<minX: minX:=xpos-nL+.5atom_wd;
+      elseif (xpos+nR-.5atom_wd)>maxX: maxX:=xpos+nR-.5atom_wd;
+      fi
       if     (ypos-nD-.5atom_wd)<minY: minY:=ypos-nD-.5atom_wd;
-      elseif (ypos+nC+.5atom_wd)>max_y: max_y:=ypos+nC+.5atom_wd; fi
-      else: if xpos<minX: minX:=xpos; elseif xpos>max_x: max_x:=xpos; fi
-            if ypos<minY: minY:=ypos; elseif ypos>max_y: max_y:=ypos; fi fi
+      elseif (ypos+nU+.5atom_wd)>maxY: maxY:=ypos+nU+.5atom_wd;
+      fi
+    else: if xpos<minX: minX:=xpos; elseif xpos>maxX: maxX:=xpos; fi
+          if ypos<minY: minY:=ypos; elseif ypos>maxY: maxY:=ypos; fi
+    fi
   endfor
-  mol_wd:=max_x-minX; mol_ht:=max_y-minY;
+  mol_wd:=maxX-minX; mol_ht:=maxY-minY;
+  endgroup
 enddef;
 %-------------------------------------------------------------------------------------------------
 def char_use_check=
@@ -692,44 +760,6 @@
     endfor
   fi
 enddef;
-%-----------------------------------------------------------------------------------------------
-def proc_draw_atom=
-  for i=1 upto cntA:
-    if (sw_numberA>=1)and(i>=numberA_start)and(i<=numberA_end):
-       if     sw_numberA=2: nA:=i-numberA_start+1;
-       elseif sw_numberA=3: if numberA_end<cntA: nA:=numberA_end-i+1; else: nA:=cntA-i+1; fi
-       else:  nA:=i; fi
-       if     i<10:  draw_atom(i,posA[i],0,decimal(nA),1);
-       else:         draw_atom(i,posA[i]+(-.2atom_wd,0),0,decimal(nA),1);  fi
-    elseif sw_numberB>=1:
-    else:  draw_atom(i,posA[i],ang_br[i],strD[numS[i]],tbl_str_wd[numS[i]]);  fi
-  endfor
-enddef;
-%-------------------------------------------------------------------------------------------------
-def proc_draw_charge=
-  for i=1 upto cntA:
-    if andA[i]<>0:
-      sA:=char(andA[i]);
-      nA:=ang_br[i]+and_rot[i];
-      nC:=nA mod 90;
-      if strD[numS[i]]="": nB:=.5atom_wd;
-      else:
-        if nC<45: nB:=.85atom_wd+sind(nC)*.5atom_wd;
-        else:     nB:=.85atom_wd+cosd(nC)*.5atom_wd;
-        fi
-      fi
-      pA:=sfB(posA[i]-(.35atom_wd,.35atom_wd),nB,nA);
-      draw_char(sA,pA,atom_wd,bond_pen_wd*ratio_char_bond,0);
-    else: sA:="";
-    fi
-    nA:=length(strD[numS[i]]);
-    sC:=substring(nA-3,nA-2) of strD[numS[i]];
-    if (sA="+")or(sC="+"): chargeA[i]:=1;
-    ef (sA="-")or(sC="-"): chargeA[i]:=-1;
-    else: chargeA[i]:=0;
-    fi
-  endfor
-enddef;
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 def proc_bond_atom(expr n)=
   f_bra:=f_end:=f_term:=rotT:=adrS:=f_lineT:=f_rotT:=f_lenT:=f_envT:=envT:=envB:=strAT:=f_at:=0;
@@ -743,21 +773,21 @@
     elseif par=0: temp_len:=bondL;
     elseif par=2: stkA[adrS+1]:=cntA; stkB[adrS+1]:=cntB;
     fi
-  ef nC=_pop: if      par=1: adrS:=adrS-1; adrA:=stkA[adrS]; adrB:=stkB[adrS]; bondL:=stkL[adrS];
-                   ef par=0: bondL:=temp_len;
-                   ef par=2: stkA[adrS+1]:=0;
-                   fi
+  ef nC=_pop: if par=1: adrS:=adrS-1; adrA:=stkA[adrS]; adrB:=stkB[adrS]; bondL:=stkL[adrS];
+              ef par=0: bondL:=temp_len;
+              ef par=2: stkA[adrS+1]:=0;
+              fi
   ef nC=_mk_bond:  if (par=0)and(rotT<>0): rotT:=0; fi  add_atom;
   ef nC=_set_adr:  adrT:=par;
   ef nC=_set_atom: strAT:=par;
-  ef nC=_postA:            ps_put;
-  ef nC=_postB: lineT:=dm; ps_put;
-  ef nC=_postC: lineT:=wf; ps_put;
-  ef nC=_postD: lineT:=zf; ps_put;
-  ef nC=_postE: lineT:=nl; ps_put;
-  ef nC=_postF: lineT:=0;  ps_put;
-  ef nC=_postG: lineT:=wv; ps_put;
-  ef nC=_postH: lineT:=nl; lenT:=_size_a; ps_put;
+  ef nC=_postA:            post_put;
+  ef nC=_postB: lineT:=dm; post_put;
+  ef nC=_postC: lineT:=wf; post_put;
+  ef nC=_postD: lineT:=zf; post_put;
+  ef nC=_postE: lineT:=nl; post_put;
+  ef nC=_postF: lineT:=0;  post_put;
+  ef nC=_postG: lineT:=wv; post_put;
+  ef nC=_postH: lineT:=nl; lenT:=_size_a; post_put;
   ef nC=_jp_bond: termA; tempB:=getB(par); check_adrB(tempB); sB[cntB+1]:=sB[tempB]; f_bra:=1;
   ef nC=_jp_atom: termA; tempA:=getA(par); check_adrA(tempA); sB[cntB+1]:=tempA; f_bra:=1;
   ef nC=_jp_atom_abs: sB[cntB+1]:=par; f_bra:=1; temp_cntB:=cntB;
@@ -790,8 +820,7 @@
   ef nC=_set_colorA: colorA[getA(adrT)]:=par;
   ef nC=_set_colorB: colorB[getB(adrT)]:=par;
   ef nC=_set_and:    andAT:=par;
-  ef nC=_chg_charge: andA[getA(par)]:=andAT; andAT:=0;
-                     if rotT<>0: and_rot[getA(par)]:=rotT; fi
+  ef nC=_chg_charge: andA[getA(par)]:=andAT; andAT:=0; if rotT<>0: and_rot[getA(par)]:=rotT; fi
   fi
   endfor
 enddef;
@@ -807,35 +836,37 @@
                if f_MP=1: colorA[cntA]:=colorB[cntA]:=0; fi  else: f_bra:=0; fi
   if f_end=0: eB[cntB]:=cntA+1; f_term:=0; else: eB[cntB]:=f_end; f_end:=0; f_term:=1; fi
 enddef;
-%-------------------------------------------------------------------------------------------------
+%--------------------------------------------------------------------------------------------------
 def check_adrA(expr n)=
-  if (if f_term=0: n>(cntA+1) else: n>cntA fi)or(n<=0): errmessage("adrA=[ "&decimal(n)&" ]"); fi
-enddef;
+   if (n>iif(f_term=0,cntA+1,cntA))or(n<=0): errmessage("adrA=[ "&decimal(n)&" ]"); fi enddef;
 def check_adrB(expr n)= if (n>cntB)or(n<=0): errmessage("adrB=[ "&decimal(n)&" ]"); fi enddef;
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 def proc_skeleton=
+  begingroup
+  save posBs,posBe,nC;
+  pair posBs,posBe;
   adrA:=adrB:=cntA:=cntB:=angT:=adrS:=f_end:=f_bra:=rotT:=f_term:=f_at:=0;
   envT:=envB:=f_lineT:=f_rotT:=f_lenT:=f_envT:=stkM[0]:=0; lineT:=si;
-  angA[0]:=angB[0]:=ang_br[0]:=0; posA[0]:=posBs:=posBe:=(0,0);
+  angA[0]:=angB[0]:=angX[0]:=0; posA[0]:=posBs:=posBe:=(0,0);
   for i=0 upto 5: stkA[i]:=stkB[i]:=0; endfor
-  %----------------------------------------------------------------------------------------------
+  %-----------------------------------------------------------------------------------------------
   for i=1 upto cntD[0]:
   nC:=comD[0][i]; par:=parD[0][i];
   if nC=_push: if     par=1: stkM[adrS]:=envB; adrS:=adrS+1; stkA[adrS]:=adrA:=cntA;
                           stkB[adrS]:=adrB:=cntB;
-                ef par=0: temp_len:=bondL;
-                ef par=2: stkA[adrS+1]:=cntA; stkB[adrS+1]:=cntB;
-                fi
-  ef nC=_pop:     if par=1: adrS:=adrS-1; adrA:=stkA[adrS]; adrB:=stkB[adrS]; envB:=stkM[adrS];
-                       ef par=0: temp_len:=bondL;
-                       ef par=2: stkA[adrS+1]:=0;
-                       fi
+               ef par=0: temp_len:=bondL;
+               ef par=2: stkA[adrS+1]:=cntA; stkB[adrS+1]:=cntB;
+               fi
+  ef nC=_pop:  if par=1: adrS:=adrS-1; adrA:=stkA[adrS]; adrB:=stkB[adrS]; envB:=stkM[adrS];
+               ef par=0: temp_len:=bondL;
+               ef par=2: stkA[adrS+1]:=0;
+               fi
   ef nC=_jp_bond:  termB; tempB:=getB(par); posBs:=posA[sB[tempB]];
                         angT:=angB[tempB]; f_bra:=1; rotT:=0;
   ef nC=_jp_atom:     termB; adrT:=getA(par); posBs:=posA[adrT];
-                           angT:=ang_br[adrT]; f_bra:=1; rotT:=0;
+                           angT:=angX[adrT]; f_bra:=1; rotT:=0;
   ef nC=_jp_atom_abs: adrT:=par; posBs:=posA[adrT];
-                           angT:=ang_br[adrT]; f_bra:=1; rotT:=0; temp_cntB:=cntB;
+                           angT:=angX[adrT]; f_bra:=1; rotT:=0; temp_cntB:=cntB;
   ef nC=_adj_ang:  if (angT<40)or(angT>320): angT:=0; ef angT<140: angT:=90;
                         ef angT<220: angT:=180; else: angT:=270; fi
   ef nC=_mk_bond:  if (par=0)and(rotT<>0):par:=rotT; rotT:=0; fi add_bond(par);
@@ -851,13 +882,16 @@
   ef nC=_term:    termB;
   fi
   endfor
+  endgroup
 enddef;
 %-------------------------------------------------------------------------------------------------
 def add_bond(expr ROT)=
-  if ROT=_arg_ang: nA:=proc_env(angT,envB,60,-60); else: nA:=ROT; fi
+  begingroup
+  save nA,nB;
+  if ROT=_arg_ang: nA:=proc_env(angT,envB); else: nA:=ROT; fi
   if f_bra=0:
     adrT:=cntA:=cntA+1; posA[cntA]:=posBs; angA[cntA]:=angT;
-    if nA>=0: ang_br[cntA]:=angT+nA/2-90; else: ang_br[cntA]:=angT+nA/2+90; fi
+    angX[cntA]:=(angT+nA/2+iif(nA>=0,-90,90)) mod 360;
   else: f_bra:=0;
   fi
   angB[cntB+1]:=angT:=(angT+nA) mod 360;
@@ -864,8 +898,11 @@
   if f_end=0:
     if lenB[cntB+1]=_size_a: posBe:=sfB(posBs,atom_wd,angT);
     else:
-      nA:=lenB[cntB+1]; glu:=0; if nA<0: nA:=-nA; glu_c(adrT); glu_c(cntA+1); fi
-      posBe:=sfB(posBs,nA*bond_len+glu,angT);
+      nA:=lenB[cntB+1];
+      if nA<0: nB:=glu_atom(adrT)+glu_atom(cntA+1); nA:=abs(nA);
+      else:    nB:=0;
+      fi
+      posBe:=sfB(posBs,nA*bond_len+nB,angT);
     fi
     posA[cntA+1]:=posBe; f_term:=0;
   else:
@@ -872,6 +909,7 @@
     f_end:=0; f_term:=1;
   fi
   cntB:=cntB+1; posBs:=posBe;
+  endgroup
 enddef;
 %==================================================================================================
 vardef getA(expr ADR)=
@@ -896,7 +934,7 @@
 %--------------------------------------------------------------------------------------------------
 def termB=
   if f_term=0:
-    if f_bra=0: cntA:=cntA+1; ang_br[cntA]:=angT; else:f_bra:=0; fi
+    if f_bra=0: cntA:=cntA+1; angX[cntA]:=angT mod 360; else:f_bra:=0; fi
     f_term:=1;
   fi
 enddef;
@@ -903,156 +941,150 @@
 %--------------------------------------------------------------------------------------------------
 def proc_cyc(expr ADR)= add_bond(angle(posA[ADR]-posBs)-angT);  enddef;
 %--------------------------------------------------------------------------------------------------
-def glu_c(expr NUM)=
+vardef glu_atom(expr NUM)=
+  save nB,nC;
   if numS[NUM]<>0:
-    nB:=angT mod 90;
-    nC:=0.5tbl_str_wd[numS[NUM]]*atom_wd;
-    if nB<45: glu:=glu+((sind(nB)*nC)++nC);
-    else:     glu:=glu+((cosd(nB)*.5atom_wd)++.5atom_wd);
-    fi
+    nB:=angT mod 90; nC:=0.5atom_wd;
+    (iif(nB<45,sind(nB),cosd(nB))*nC)++nC
+    else: 0
   fi
 enddef;
 %--------------------------------------------------------------------------------------------------
-vardef proc_env(expr ANG,ENV,CCW,CWS)=
+vardef proc_env(expr ANG,ENV)=
+  save nA,nCW,nCC;
+  nCC:=60; nCW:=-nCC; 
   nA:=(ANG mod 360);
   if ENV>=sub_emb_start:
     parD[ENV][cntB-temp_cntB]
   else:
-    if ENV=hz: if nA=0:CCW ef nA<=90:CWS ef nA<=180:CCW ef nA<270:CWS  else:CCW fi
-    ef ENV=vt: if nA=0:CWS ef nA<90:CCW  ef nA<=180:CWS ef nA<=271:CCW else:CWS fi
+    if ENV=hz: if nA=0:nCC ef nA<=90:nCW ef nA<=180:nCC ef nA<270:nCW  else:nCC fi
+    ef ENV=vt: if nA=0:nCW ef nA<90:nCC  ef nA<=180:nCW ef nA<=270:nCC else:nCW fi
     ef (ENV>=-180)and(ENV<=180): ENV
     fi
   fi
 enddef;
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-def draw_atom(expr NUM,POS,ANG,STR,WD)=
+def draw_atom(expr NUM)=
   begingroup
-  save pA,pT,pC,sB,dx,nB,nC,nE;
-  string sB;
-  pair pA,pT;
-  picture pC;
+  save slen,f_wd,f_ht,r_ff,pA,pB,bA,sA,sB,dx,nA,nB,nC,nD;
+  string sA,sB;
+  pair pA,pB;
+  picture bA;
   %----------------------------------------------------------------------------------------------
-  if ((ANG mod 360)<=90+1)or((ANG mod 360)>=270-1): dx:=1; else: dx:=-1; fi
-  pT:=POS-(0.5atom_wd*dx*WD,0.5atom_wd);
-  nE:=nC:=0;
-  for i=0 upto length(STR)-1:
-    sB:=pic_c(i,STR); nB:=ASCII(sB);
-    if dx<0: if nB=par_s: k:=i+1; nC:=1; forever: exitif pic_c(i+(incr nC),STR)="}";endfor fi
-             if nC>0: sB:=pic_c(k+(decr nC),STR); nB:=ASCII(sB); fi
+  sA:=strD[numS[NUM]]; slen:=length(sA)-1;
+  nA:=angX[NUM]; dxA[NUM]:=dx:=iif((nA<=90)or(nA>=270),1,-1);
+  wdA[NUM]:=nC:=0; pB:=(0,0);
+  pA:=posA[NUM]-(.5atom_wd*dx,.5atom_wd);
+  if (atomfont<>"draw")and(f_MP=1):
+    bA:="C" infont atomfont;
+    r_ff:=atom_wd/(ypart(ulcorner bA)-ypart(llcorner bA));
+  fi
+  for i=0 upto slen:
+    if nC=0:
+      sB:=pic_c(i,sA);
+      if (dx=-1)and(sB="{"):
+        nD:=i+1; nC:=0; for j=nD upto slen: nC:=nC+1; exitif pic_c(j,sA)="}"; endfor
+      fi
+    else: nC:=nC-1; sB:=pic_c(nD+nC,sA);
     fi
-    if nB=score_u: if nE=0: nE:=-.5; else: nE:=0; fi;
-    ef nB=hat:     if nE=0: nE:= .5; else: nE:=0; fi;
-    ef (nB<>par_s)and(nB<>par_e):
-      nA:=atom_wd*tbl_char_wd[nB];
+    if     sB="_": pB:=iif(pB=(0,0),(0,-.5atom_wd),(0,0));
+    elseif sB="^": pB:=iif(pB=(0,0),(0, .5atom_wd),(0,0));
+    elseif (sB<>"{")and(sB<>"}"):
       if (atomfont<>"draw")and(f_MP=1):
-        pC:=sB infont atomfont scaled (atom_wd/atomfontsize);
-        if dx=-1: pA:=pT-(lrcorner pC-llcorner pC)+(0,nE*atom_wd);
-        else:     pA:=pT+(0,nE*atom_wd);
-        fi
-        if (sw_numberA>=1)or(sw_numberB>=1):
-          erase fill (llcorner pC--lrcorner pC--urcorner pC--ulcorner pC--cycle) shifted pA;
-        fi
-        addto currentpicture also pC shifted pA Cp(colorA[NUM]);
-        if sw_atom_frame=1:
-          draw ((llcorner pC--lrcorner pC--urcorner pC--ulcorner pC--cycle) shifted pA)
-               withpen pencircle scaled 0.01pt;
-        fi
-        pT:=pT+(lrcorner pC-llcorner pC)*dx;
+        bA:=sB infont atomfont;
+        f_wd:=(xpart(lrcorner bA)-xpart(llcorner bA))*r_ff;
+        f_ht:=(ypart(urcorner bA)-ypart(llcorner bA))*r_ff;
+        if dx=-1: pA:=pA-(f_wd,0); fi
+        addto currentpicture also bA scaled (r_ff*(1-2ratio_atomgap_atom))
+          shifted (pA+pB+(f_wd*ratio_atomgap_atom,f_ht*ratio_atomgap_atom)) Cp(colorA[NUM]);
+        if sw_atom_frame=1: draw_frame(pA+pB,f_wd,f_ht,thickness_atom_frame); fi
+        if dx=1: pA:=pA+(f_wd,0); fi
       else:
-        if dx=-1: pA:=pT+(-nA,nE*atom_wd); else: pA:=pT+(0,nE*atom_wd); fi
-        if (sw_numberA>=1)or(sw_numberB>=1):
-          erase fill unitsquare xscaled nA yscaled atom_wd shifted pA;
-        fi
-        draw_char(sB,pA,atom_wd,bond_pen_wd*ratio_char_bond,NUM);
-        if sw_atom_frame=1: draw_frame(pA,nA,atom_wd,0.1pt); fi
-        pT:=pT+(nA*dx,0);
+        f_wd:=atom_wd*tbl_char_wd[ASCII(sB)];
+        if dx=-1: pA:=pA-(f_wd,0); fi
+        draw_char(sB,pA+pB,atom_wd,bond_pen_wd*ratio_char_bond,NUM);
+        if sw_atom_frame=1: draw_frame(pA+pB,f_wd,atom_wd,thickness_atom_frame); fi
+        if dx=1: pA:=pA+(f_wd,0); fi
       fi
-   fi
+      wdA[NUM]:=wdA[NUM]+f_wd;
+    fi
   endfor
   endgroup
 enddef;
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-def draw_bond(expr NN,BP,EP,ANG,LN)=
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+def draw_bond(expr NUM)=
   begingroup
-  save ww,ap,am,hpt,Ls,Le,pA,pB,pC,pT,nB,nC,nL;
-  pair Ls,Le;
-  path pA,pB,pC,pT;
-  %----------------------------------------------------------------------------------------------
-  nL:=LN;
-  nC:=length(posA[EP]-posA[BP]);
-  if (nC>0)and(nL<>0):
-    ww:=wedge_wd; hpt:=.5bond_pen_wd; ap:=ANG+90; am:=ANG-90;
-    if sw_numberB>=1: clipping(0,0,posA[BP],posA[EP],nC);
-    else: clipping(numS[BP],numS[EP],posA[BP],posA[EP],nC); fi
-    pickup pencircle scaled bond_pen_wd;
-    if known colorB[NN]: nB:=colorB[NN]; fi
-    %---------------------------------------------------------------------------------------------
-    if     (nL=si)or(sw_bond_single=1): draw pA Cp(nB);
-    ef nL=dl: draw pA Cp(nB); draw sfB(pC,bondgap,ap) Cp(nB);
-    ef nL=dr: draw pA Cp(nB); draw sfB(pC,bondgap,am) Cp(nB);
-    ef nL=dm: draw sfB(pB,bondgap/1.75,ap) Cp(nB); draw sfB(pB,bondgap/1.75,am) Cp(nB);
-    ef nL=db: if ((ANG-ang_br[BP]) mod 360)<=180: nA:=ap; else: nA:=am; fi
-                 draw pA Cp(nB); draw sfB(pC,bondgap,nA) Cp(nB);
-    ef nL=tm: draw pA Cp(nB);draw sfB(pA,bondgap,ap) Cp(nB); draw sfB(pA,bondgap,am) Cp(nB);
-    ef nL=wf: fill Ls--sfB(Le,ww,am)--sfB(Le,ww,ap)--cycle;
-    ef nL=wb: fill sfB(Ls,ww,am)--Le--sfB(Ls,ww,ap)--cycle;
-    ef nL=bd: draw pA withpen penrazor rotated ap scaled bondgap Cp(nB);
-    ef nL=bz: bz_put(sfB(Ls,ww,ap),sfB(Le,ww,ap),sfB(Ls,ww,am),sfB(Le,ww,am),nB);
-    ef nL=zf: wz_put(Ls,sfB(Le,ww,ap),sfB(Le,ww,am),nB);
-    ef nL=zb: wz_put(Le,sfB(Ls,ww,am),sfB(Ls,ww,ap),nB);
-    ef nL=dt: for i=0 step .75zebra_gap/length(Le-Ls) until 1: drawdot i[Ls,Le]; endfor
-    ef nL=wv: nB:=3bond_pen_wd; nA:=nB/length(Le-Ls);
-                  draw Le for i=1 upto 1/nA:
-                    if odd(i): ..controls(((i-.5)*nA)[sfB(Le,nB,ap),sfB(Ls,nB,ap)])
-                    else: ..controls(((i-.5)*nA)[sfB(Le,nB,am),sfB(Ls,nB,am)]) fi
-                          ..(i*nA)[Le,Ls] endfor ..Ls;
-    ef nL=vf: draw pA Cp(nB);draw sfB(Le,bondgap,ANG-150)--Le--sfB(Le,bondgap,ANG+150) Cp(nB);
-    ef nL=vb: draw pA Cp(nB);draw sfB(Ls,bondgap,ANG-30)--Ls--sfB(Ls,bondgap,ANG+30) Cp(nB);
-    ef nL=si_: erase draw 0.15[Ls,Le]--0.85[Ls,Le] wpcs 0.8bondgap; draw pA Cp(nB);
-    ef nL=wf_: erase fill sfB(0.15[Ls,Le],.5ww,ap)--sfB(0.15[Ls,Le],.5ww,am)--
-                             sfB(0.85[Ls,Le],1.3ww,am)--sfB(0.85[Ls,Le],1.3ww,ap)--cycle;
-                  fill Ls--sfB(Le,ww,am)--sfB(Le,ww,ap)--cycle;
-    ef nL=wb_: erase fill sfB(0.15[Ls,Le],1.3ww,ap)--sfB(0.15[Ls,Le],1.3ww,am)--
-                             sfB(0.85[Ls,Le],.5ww,am)--sfB(0.85[Ls,Le],.5ww,ap)--cycle;
-                  fill sfB(Ls,ww,am)--Le--sfB(Ls,ww,ap)--cycle;
-    ef nL=bd_: erase draw 0.15[Ls,Le]--0.85[Ls,Le] wpcs 1.6bondgap;
-                  draw pA withpen penrazor rotated ap scaled bondgap Cp(nB);
-    fi
-    if (sw_numberB>=1)and(NN>=numberB_start)and(NN<=numberB_end):
-        if     sw_numberB=2: nB:=NN-numberB_start+1;
-        ef sw_numberB=3: if numberB_end<cntB: nB:=numberB_end-NN+1; else: nB:=cntB-NN+1; fi
-        else:                nB:=NN; fi
-        draw_atom(NN,.5[posA[BP],posA[EP]],0,decimal(nB),1); fi
+  save ww,ap,am,ang,col,len,Ls,Le,nA,nB,nC,nD,nL,nS,nE,pA,zA,zL,wpcs;
+  pair pA,Ls,Le;
+  path zA,zL;
+  def wpcs expr n= withpen pencircle scaled n enddef;
+  %------------------------------------------------------------------------------------------------
+  nL:=lineB[NUM]; ang:=angB[NUM]; nS:=sB[NUM]; nE:=eB[NUM]; col:=colorB[NUM]; 
+  zL:=posA[nS]--posA[nE]; ww:=wedge_wd; ap:=ang+90; am:=ang-90;
+  %------------------------------------------------------------------------------------------------
+  if (numS[nS]=0)and(numS[nE]=0)or(sw_numberA=1)or(sw_numberB=1):
+    Ls:=posA[nS]; Le:=posA[nE]; pA:=(.1,.9);
+  ef numS[nS]=0: Le:=zL intersectionpoint frame_str(nE); Ls:=posA[nS]; pA:=(.15,1);
+  ef numS[nE]=0: Ls:=zL intersectionpoint frame_str(nS); Le:=posA[nE]; pA:=(0,.85);
+  else: Ls:=zL intersectionpoint frame_str(nS); Le:=zL intersectionpoint frame_str(nE); pA:=(0,1);
   fi
+  zA:=Ls--Le; len:=length(Le-Ls);
+  %------------------------------------------------------------------------------------------------
+  pickup pencircle scaled bond_pen_wd;
+  if (nL=si)or(sw_bond_single=1): draw zA Cp(col);
+  ef nL=dl: draw zA Cp(col); draw sfB(subpath pA of zA,bondgap,ap) Cp(col);
+  ef nL=dr: draw zA Cp(col); draw sfB(subpath pA of zA,bondgap,am) Cp(col);
+  ef nL=dm: draw sfB(zA,bondgap/1.75,ap) Cp(col); draw sfB(zA,bondgap/1.75,am) Cp(col);
+  ef nL=db: nA:=iif(((ang-angX[nS]) mod 360)<=180,ap,am);
+            draw zA Cp(col); draw sfB(subpath pA of zA,bondgap,nA) Cp(col);
+  ef nL=tm: draw zA Cp(col);draw sfB(zA,bondgap,ap) Cp(col); draw sfB(zA,bondgap,am) Cp(col);
+  ef nL=wf: fill Ls--sfB(Le,ww,am)--sfB(Le,ww,ap)--cycle Cp(col);
+  ef nL=wb: fill sfB(Ls,ww,am)--Le--sfB(Ls,ww,ap)--cycle Cp(col);
+  ef nL=bd: draw zA withpen penrazor rotated ap scaled bondgap Cp(col);
+  ef nL=bz: bz_put(sfB(Ls,ww,ap),sfB(Le,ww,ap),sfB(Ls,ww,am),sfB(Le,ww,am));
+  ef nL=zf: wz_put(Ls,sfB(Le,ww,ap),sfB(Le,ww,am));
+  ef nL=zb: wz_put(Le,sfB(Ls,ww,am),sfB(Ls,ww,ap));
+  ef nL=dt: for i=0 step .75zebra_gap/len until 1: drawdot i[Ls,Le] Cp(col); endfor
+  ef nL=wv: nA:=3bond_pen_wd; nB:=len/nA;
+            draw Le for i=1 upto nB:
+              ..controls(((i-.5)/nB)[sfB(Le,nA,iif(odd(i),ap,am)),sfB(Ls,nA,iif(odd(i),ap,am))])
+              ..(i/nB)[Le,Ls] endfor ..Ls Cp(col);
+  ef nL=vf: draw zA Cp(col);draw sfB(Le,bondgap,ang-150)--Le--sfB(Le,bondgap,ang+150) Cp(col);
+  ef nL=vb: draw zA Cp(col);draw sfB(Ls,bondgap,ang-30)--Ls--sfB(Ls,bondgap,ang+30) Cp(col);
+  ef nL=si_: erase draw subpath (0.15,0.85) of zA wpcs 0.8bondgap; draw zA Cp(col);
+  ef nL=wf_: erase draw subpath (0.15,0.85) of (Ls--sfB(Le,ww,am)) wpcs 0.8bondgap;
+             erase draw subpath (0.15,0.85) of (Ls--sfB(Le,ww,ap)) wpcs 0.8bondgap;
+             fill Ls--sfB(Le,ww,am)--sfB(Le,ww,ap)--cycle Cp(col);
+  ef nL=wb_: erase draw subpath (0.15,0.85) of (sfB(Ls,ww,am)--Le) wpcs 0.8bondgap;
+             erase draw subpath (0.15,0.85) of (sfB(Ls,ww,ap)--Le) wpcs 0.8bondgap;
+             fill sfB(Ls,ww,am)--Le--sfB(Ls,ww,ap)--cycle Cp(col);
+  ef nL=bd_: erase draw subpath(0.15,0.85) of zA wpcs 1.6bondgap;
+             draw zA withpen penrazor rotated ap scaled bondgap Cp(col);
+  fi
   endgroup
 enddef;
 %------------------------------------------------------------------------------------------------
-def wpcs expr n= withpen pencircle scaled n enddef;
-def wpss expr n= withpen pensquare scaled n enddef;
-def sqr(expr WD,HT)= ((0,0)--(WD,0)--(WD,HT)--(0,HT)--cycle) enddef;
-def sfB(expr p,l,r)= p shifted ((l,0) rotated r) enddef;
-def wz_put(expr PA,PB,PD,CL)=  nC:=length(Le-Ls);
-  for i=0 upto nC/zebra_gap: 
-    nA:=zebra_gap*i/nC; nD:=(zebra_gap*i+ratio_zebra_black*zebra_gap)/nC;
-    if nD>((nC-zebra_gap)/nC): nD:=1; fi
-    fill nA[PB,PA]--nA[PD,PA]--nD[PD,PA]--nD[PB,PA]--cycle Cp(CL); endfor  enddef;
-def bz_put(expr PA,PB,PC,PD,CL)=  nC:=length(Le-Ls);
-  for i=0 upto nC/zebra_gap: 
-    nA:=zebra_gap*i/nC; nD:=(zebra_gap*i+ratio_zebra_black*zebra_gap)/nC;
-    fill nA[PB,PA]--nA[PD,PC]--nD[PD,PC]--nD[PB,PA]--cycle Cp(CL); endfor  enddef;
-def cut_off(expr p,w,h,s)=
-  p intersectionpoint sqr(w+.1h,1.1h) shifted (s-(.5(w+.1h),.5(1.1h))); enddef;
-def clipping(expr SA,SB,PA,PB,LEN)=
-  pT:=PA--PB; nA:=0.6atom_wd/LEN;
-  if (SA=0)and(SB=0): Ls:=PA; Le:=PB; pA:=pB:=pT; pC:=0.1[PA,PB]--0.1[PB,PA];
-  ef SA=0: Ls:=PA; Le:=cut_off(pT,atom_wd*tbl_str_wd[SB],atom_wd,PB); 
-     pA:=Ls--Le; pB:=Ls--nA[PB,PA]; pC:=0.1[PA,PB]--Le;
-  ef SB=0: Ls:= cut_off(pT,atom_wd*tbl_str_wd[SA],atom_wd,PA); Le:=PB;
-     pA:=Ls--Le; pB:=nA[PA,PB]--Le; pC:=Ls--(0.1)[PB,PA];
-  else: Ls:=cut_off(pT,atom_wd*tbl_str_wd[SA],atom_wd,PA);
-        Le:=cut_off(pT,atom_wd*tbl_str_wd[SB],atom_wd,PB);
-        pB:=nA[PA,PB]--nA[PB,PA]; pC:=pA:=Ls--Le; fi
+def wz_put(expr PA,PB,PD)=
+  for i=0 upto len/zebra_gap: 
+    nA:=zebra_gap*i/len; nD:=(zebra_gap*i+ratio_zebra_black*zebra_gap)/len;
+    if nD>((len-zebra_gap)/len): nD:=1; fi
+    fill nA[PB,PA]--nA[PD,PA]--nD[PD,PA]--nD[PB,PA]--cycle Cp(col);
+  endfor
 enddef;
+%------------------------------------------------------------------------------------------------
+def bz_put(expr PA,PB,PC,PD)=
+  for i=0 upto len/zebra_gap: 
+    nA:=zebra_gap*i/len; nD:=(zebra_gap*i+ratio_zebra_black*zebra_gap)/len;
+    fill nA[PB,PA]--nA[PD,PC]--nD[PD,PC]--nD[PB,PA]--cycle Cp(col);
+  endfor
+enddef;
+%------------------------------------------------------------------------------------------------
+vardef frame_str(expr NUM)=
+  save nA,nB;
+  nA:=1.12atom_wd; nB:=wdA[NUM]+.12atom_wd;
+  ((0,0)--(nB,0)--(nB,nA)--(0,nA)--cycle) shifted
+  (posA[NUM]-(.5nA+iif((dxA[NUM]=-1)and(wdA[NUM]>atom_wd),nB-nA,0),.5nA))
+enddef;
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 def ring expr n= <((-180 DIV n)-90),(_chg_len,0),
                  for i==2 upto n:: ,(360 DIV n) endfor,(_cyc_sB,1-n) enddef;
@@ -1126,8 +1158,8 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 def draw_char(expr CHR,POS,WD,PEN,NUM)=
 begingroup
-save Z,aW,aH,fW,fH,hW,hW,hH,fP,hP,pathO,pathOh,pos,dw,dwh,dwv,cdw,ppcs,sbp,sC;
-path pathO,pathOh;
+save Z,aW,aH,fW,fH,hW,hW,hH,fP,hP,zO,zOh,pos,dw,dwh,dwv,cdw,ppcs,sbp,sC;
+path zO,zOh;
 string sC;
 pair Z[],pos;
 %-------------------------------------------------------------------------------------------------
@@ -1148,18 +1180,18 @@
 Z01:=( 0,hP); Z02:=(hP, 0); Z03:=(hP,hP); Z04:=(aW,hP); Z05:=(fW, 0); Z06:=(hW,aH); Z07:=(hW, 0);
 Z08:=( 0,hH); Z09:=(hP,hH); Z10:=(fW,hH); Z11:=(hW,aW); Z12:=( 0,fH); Z13:=(hP,fH); Z14:=(hW,fH);
 Z15:=(fW,aH); Z16:=(aW,fH); Z17:=(aW,hH); Z18:=(hP,aH); Z19:=(hW,hP); Z20:=(hW,hH); Z21:=(fW,hP);
-pathO:=Z10..(.8aW,fH)..tension 1.5..(.2aW,fH)..Z09..(.2aW,hP)..tension 1.5..(.8aW,hP)..cycle;
-pathOh:=(hP,.25aH)..Z19..(fW,.25aH)..Z20..cycle;
+zO:=Z10..(.8aW,fH)..tension 1.5..(.2aW,fH)..Z09..(.2aW,hP)..tension 1.5..(.8aW,hP)..cycle;
+zOh:=(hP,.25aH)..Z19..(fW,.25aH)..Z20..cycle;
 %-------------------------------------------------------------------------------------------------
 ppcs fP;
 if sC="A": dwvs(1.14) Z02--Z06--Z05; dw .33[Z02,Z06]--.33[Z05,Z06];
 ef sC="B": dw Z13--Z14{right}..(.9fH,.75aH)..{left}Z20--Z09--Z20{right}..(.9fH,.25aH)..
            {left}Z19--Z03;  dwv Z02--Z18;
-ef sC="C": cdw sbp(.05,.95)pathO;
+ef sC="C": cdw sbp(.05,.95)zO;
 ef sC="D": dw Z13--Z14..Z10..Z19--Z03; dwv Z02--Z18;
 ef sC="E": pickup pensquare scaled fP; dw Z21--Z03--Z13--(fW,fH); dw Z09--Z10;
 ef sC="F": dwh Z12--Z16; dwh (0,.45aH)--(fW,.45aH); dw Z02--Z13;
-ef sC="G": cdw sbp(.06,.97)pathO; dwh bot Z20-- bot Z17;
+ef sC="G": cdw sbp(.06,.97)zO; dwh bot Z20-- bot Z17;
 ef sC="H": dwv Z02--Z18; dw Z09--Z10; dwv Z05--Z15;
 ef sC="I": dwv Z19--Z14; dwh (hW-fP,hP)--(hW+fP,hP); dwh (hW-fP,fH)--(hW+fP,fH);
 ef sC="J": cdw Z09..(hP,.4aH){down}..{right}Z19{right}..{up}(fW,.4aH)..Z15;
@@ -1167,12 +1199,12 @@
 ef sC="L": dwh Z04--Z01; dwv Z02--Z18;
 ef sC="M": dwv Z02--Z18; dwvs(1.14) Z18--Z19--Z15; dwv Z15--Z05;
 ef sC="N": dwv Z02--Z18; dwv Z05--Z15; dwvs(1.4) (1.4hP,aH)--(aW-1.4hP,0);
-ef sC="O": dw pathO;
+ef sC="O": dw zO;
 ef sC="P": dwv Z02--Z18; dw Z13--(.3aW,fH){right}..(fW,.7aH)..{left}(.3aW,.44aH)..(hP,.44aH);
-ef sC="Q": dw pathO; dw (.6aW,.4aH)--Z05;
+ef sC="Q": dw zO; dw (.6aW,.4aH)--Z05;
 ef sC="R": dwv Z02--Z18; dw Z13--(.3aW,fH){right}..(fW,.7aH)..{left}(.3aW,.44aH)..(hP,.44aH);
            cdw Z05{up}..{left}(hW,.44aH);
-ef sC="S": cdw sbp(.05,.45)pathO; cdw sbp(.55,.95)pathO; dw (fW,.3aH){up}..{up}(hP,.7aH);
+ef sC="S": cdw sbp(.05,.45)zO; cdw sbp(.55,.95)zO; dw (fW,.3aH){up}..{up}(hP,.7aH);
 ef sC="T": dwh Z12--Z16; dwv .5[Z12,Z16]--Z07;
 ef sC="U": cdw Z18..Z09{down}..{right}Z19{right}..{up}Z10..Z15;
 ef sC="V": dwvs(1.2) Z18--Z07--Z15;
@@ -1199,7 +1231,7 @@
 ef sC="p": dw Z19..Z10..Z11..Z09..cycle; dwv (hP,.7aH)--(hP,-.3aH);
 ef sC="q": dw Z19..Z10..Z11..Z09..cycle; dwv (fW,.7aH)--(fW,-.3aH);
 ef sC="r": cdw (sbp(.35,.72)Z19..Z10..Z14..Z09..cycle) shifted(0,-fP); dwv Z02--Z18;
-ef sC="s": cdw sbp(.05,.45)pathO; cdw sbp(.55,.95)pathO; dw (fW,.3aH){up}..{up}(hP,.7aH);
+ef sC="s": cdw sbp(.05,.45)zO; cdw sbp(.55,.95)zO; dw (fW,.3aH){up}..{up}(hP,.7aH);
 ef sC="t": dwv Z07--Z06; dwh (0,.66aH)--(aW,.66aH);
 ef sC="u": cdw Z18..(hP,.55aH){down}..Z19..(fW,.55aH){up}..Z15; dwv Z15--Z05;
 ef sC="v": dwv Z18--Z07--Z15;
@@ -1210,13 +1242,13 @@
 ef sC="0": dw Z09...Z14...Z10...Z19...cycle;
 ef sC="1": dwv Z07--Z06--(hW-hP,fH)--(hW-hP,aH-2.5hP);
 ef sC="2": cdw sbp(0,.71)(hP,1.3hP)--(fW,.55aH)..Z14..(hP,.5aH)..(hW,.27aH); dwh Z04--Z01;
-ef sC="3": cdw sbp(0,.77)pathOh; cdw sbp(.23,.95)pathOh shifted (0,.5aH-hP); dwh (.3aW,hH)--Z20;
+ef sC="3": cdw sbp(0,.77)zOh; cdw sbp(.23,.95)zOh shifted (0,.5aH-hP); dwh (.3aW,hH)--Z20;
 ef sC="4": dwh (0,.3aH)--(aW,.3aH); dwv (.7aW,0)--(.7aW,aH)--(1.2hP,.3aH+hP);
 ef sC="5": dwh Z12--Z16; dwv Z13--(hP,.49aH); cdw (.5hP,.15aH)..(.65aW,1.3hP)..(fW,.3aH)..
            (hW,.6aH)..(.6hP,.53aH);
 ef sC="6": dw Z19..(fW,.5fW)..(hW,fW)..(hP,.5fW)..cycle; cdw (hP,.4aH)--Z06;
 ef sC="7": dwh (0,.fH)--Z16; dwvs(1.2) (aW-1.2hP,aH-fP)--(.4aW,0);
-ef sC="8": dw pathOh; dw (hP,.75aH)...Z14...(fW,.75aH)...Z20...cycle;
+ef sC="8": dw zOh; dw (hP,.75aH)...Z14...(fW,.75aH)...Z20...cycle;
 ef sC="9": dw (Z19..(fW,.5fW)..(hW,fW)..(hP,.5fW)..cycle) shifted (0,.32aH); cdw (fW,.6aH)--Z07;
 ef sC=" ":
 ef sC=".": ppcs 1.4fP; dw Z19;
@@ -1338,7 +1370,7 @@
       if (sB[j]=i)or(eB[j]=i): bond_cnt:=bond_cnt+bondC[j]; fi
     endfor
     Bcnt[i]:=bond_cnt;
-    if strD[numS[i]]="": strD[numS[i]]:="C"; fi
+    if numS[i]=0: strD[numS[i]]:="C"; fi
     if (strD[numS[i]]="C")and(bond_cnt<4):
       hideH[i]:=4-bond_cnt; cnt_hide_H:=cnt_hide_H+hideH[i]; else: hideH[i]:=0;
     fi
@@ -1377,9 +1409,9 @@
   endfor
   cal_MI:=substring (0,10) of decimal(MI_num);
   cal_MW:=substring (0,8)  of decimal(MW_num);
-  if sw_aux_out=1:    proc_auxfile_out;   fi
-  if sw_rep_out=1:    proc_report_out; fi
-  if sw_mol_out>=1:   proc_mol_out;    fi
+  if sw_aux_out=1:  proc_auxfile_out; fi
+  if sw_rep_out=1:  proc_report_out;  fi
+  if sw_mol_out>=1: proc_mol_out;     fi
   endgroup
 enddef;
 %==================================================================================================
@@ -1390,6 +1422,7 @@
 %==================================================================================================
 def proc_auxfile_out=
   message "["&decimal(char_num)&"]:"&inf_EN;
+  out_file_name:=out_file_aux;
   for i=1 upto aux_max:  exitif tag[i]="";
     if i=1: printf "" else: &aux_delimiter fi if sw_auxfix=0: &tag[i]&":" fi &
     if     string  scantokens(var[i]): scantokens(var[i])
@@ -1404,36 +1437,38 @@
 enddef;
 %--------------------------------------------------------------------------------------------------
 def proc_report_out=
-  message "------------------------------------------------------------------";
-  message " Molecular name = "& inf_EN;
-  message " Warnings = "&fdr(3)(warning_cnt)&" / Expanded command = "&decimal(cntD[0]);
-  message " Width * Height = " & fdr(10)(mol_wd)&" * "&fdr(10)(mol_ht);
-  message " Shift width * height  = "& fdr(10)(minX)&" * "&fdr(10)(minY);
-  message " Bond length = "&fdr(3)(bond_len)&"   Atom size   = "&fdr(3)(atom_wd);
-  message " Atom count="&fdr(3)(cntA)&" Bond count="&fdr(3)(cntB)&
+  message "["&decimal(char_num)&"]:"&inf_EN;
+  out_file_name:=out_file_rep;
+  printf "------------------------------------------------------------------";
+  printf " Molecular name = "& inf_EN;
+  printf " Warnings = "&fdr(3)(warning_cnt)&" / Expanded command = "&decimal(cntD[0]);
+  printf " Width * Height = " & fdr(10)(mol_wd)&" * "&fdr(10)(mol_ht);
+  printf " Shift width * height  = "& fdr(10)(minX)&" * "&fdr(10)(minY);
+  printf " Bond length = "&fdr(3)(bond_len)&"   Atom size   = "&fdr(3)(atom_wd);
+  printf " Atom count="&fdr(3)(cntA)&" Bond count="&fdr(3)(cntB)&
           " Ring count="&fdr(3)(cntB-cntA+1)&" Hide H count="&fdr(3)(cnt_hide_H);
-  message "------------------------------------------------------------------";
-  message "< NO. >(  x axis   ,   y axis   )< atom  >< bond >< hideH >< chg >";
+  printf "------------------------------------------------------------------";
+  printf "< NO. >(  x axis   ,   y axis   )< atom  >< bond >< hideH >< chg >";
   for i=1 upto cntA:
-    message " A"&fdl(4)(i)&" ("&fdr(10)(round_auto(xpart(posA[i])/bond_len))&" , "&
+    printf " A"&fdl(4)(i)&" ("&fdr(10)(round_auto(xpart(posA[i])/bond_len))&" , "&
             fdr(10)(round_auto(ypart(posA[i])/bond_len))&" )  "&fixed_l(8)(strD[numS[i]])&
             "  "&fdr(3)(Bcnt[i])
-            if hideH[i]>0: &fdr(8)(hideH[i]) else: &"        " fi
+            &iif(hideH[i]>0,fdr(8)(hideH[i]),"        ")
             if chargeA[i]<>0: &fdr(8)(chargeA[i]) fi;
   endfor
-  message "------------------------------------------------------------------";
-  message "< NO. ><  bond   (sdt)><angle + (  +-  )><length (   pt   )>";
+  printf "------------------------------------------------------------------";
+  printf "< NO. ><  bond   (sdt)><angle + (  +-  )><length (   pt   )>";
   for i=1 upto cntB:
     nC:=lenB[i]; if nC=_size_a: nC:=ratio_atom_bond; elseif nC<0: nC:=-nC; fi
     if lineB[i]<>0:
       nB:=angB[i]; if nB>180: nB:=nB-360; fi
-      message " B"&fdl(4)(i)&fdr(3)(sB[i])&" -> "&fdr(3)(eB[i])&
+      printf " B"&fdl(4)(i)&fdr(3)(sB[i])&" -> "&fdr(3)(eB[i])&
               " ("&fdr(3)(bondC[i]-si+1)&")"&fdr(9)(round_auto(angB[i]))&
               " ("&fdr(6)(round_auto(nB))&")"&fdr(8)(nC)&" ("&fdr(8)(round_auto(nC*bond_len))&")";
     fi
   endfor
-  message "------------------------------------------------------------------";
-  message "<atom>( atom wt )[ mi wt   ]  < cnt > < sum wt   >[ sum mi wt  ]";
+  printf "------------------------------------------------------------------";
+  printf "<atom>( atom wt )[ mi wt   ]  < cnt > < sum wt   >[ sum mi wt  ]";
   if MWp<=40: cal_MW_str:=cal_MW; cal_MI_str:=cal_MI; 
   else:       cal_MW_str:=fdr(10)(MWp)&" * 100"; cal_MI_str:=fdr(10)(MIp)&" * 100";
   fi
@@ -1440,7 +1475,7 @@
   for i=1 upto tbl_cnt:
     if sumA[i]>=1:
        nA:=tbl_atom_wt[i]/100*sumA[i]; nB:=tbl_atom_mi[i]/100*sumA[i];
-       message " "&
+       printf " "&
          fixed_l(5)(stripP(tbl_atom_str[i]))&
          "("&fdr(9)(tbl_atom_wt[i])&")"&"["&fdr(9)(tbl_atom_mi[i])&"]"&
          " * "&fdr(4)(sumA[i])&" = "
@@ -1449,25 +1484,34 @@
        fi
      fi
   endfor
-  message " Molecular Weight  [Mono Isotopic]  = "&
+  printf " Molecular Weight  [Mono Isotopic]  = "&
     fixed_r(12)(cal_MW_str)&"["&fixed_r(12)(cal_MI_str)&"]";
-  message "------------------------------------------------------------------";
-  message " Weight  Calc: " &cal_MW_str &" / Input: "
+  printf "------------------------------------------------------------------";
+  printf " Weight  Calc: " &cal_MW_str &" / Input: "
     if inf_MW<>"": &inf_MW &" / weight gap= " &decimal(MW_num-scantokens(inf_MW)) fi;
-  message " Fomula  Calc: "&cal_FM&" / Input: "
-    if inf_FM<>"": &inf_FM&" / "&  if inf_FM=cal_FM: "MACTCH" else: "NOT MACTCH" fi fi;
-  message "==================================================================";
+  printf " Fomula  Calc: "&cal_FM&" / Input: "
+    if inf_FM<>"": &inf_FM&" / "& iif(inf_FM=cal_FM,"MACTCH","NOT MACTCH") fi;
+  printf "==================================================================";
 enddef;
 %==================================================================================================
 def proc_mol_out=
   begingroup
-  save chg_cnt,chg_atm,chg_chg;
-  numeric chg_atm,chg_chg;
-  chg_cnt:=0;
-  %-V2000------------------------------------------------------------------------------------------
-  if sw_mol_out=1:
-  mp_log_name:=jobname&"-"&fit_zero(char_num)&decimal(char_num)&"-"&inf_EN&".mol";
-  printf ""; printf "  -MCFtoMOL- "&fixed_l(20)(info[1]); printf "";
+  save chg_cnt,chg_atm,chg_chg,nA,nB;
+  nA:=nB:=chg_cnt:=0;
+  message "["&decimal(char_num)&"]:"&inf_EN;
+  out_file_name:=out_file_mol;
+  if sw_mol_out<=2:
+    out_file_name:=out_file_mol;
+    if     sw_mol_out=1: proc_vdk;
+    elseif sw_mol_out=2: proc_vtk;
+    fi
+  fi
+  endgroup
+enddef;
+%-V2000------------------------------------------------------------------------------------------
+def proc_vdk=
+  printf ""; printf "  -MCFtoMOL- "&fixed_l(20)(info[1]);
+  printf "";
   printf fdr(3)(cntA)&fdr(3)(cntB)&"  0  0  0  0  0  0  0  0999 V2000";
   for i=1 upto cntA:
     printf fdr(10)(xpart(posA[i])/bond_len)& fdr(10)(ypart(posA[i])/bond_len)&
@@ -1474,13 +1518,10 @@
            fdr(10)(0)&" "&fixed_l(2)(stripP(strD[numS[i]]))&"  0  0  0  0";
     if chargeA[i]<>0: chg_atm[incr chg_cnt]:=i; chg_chg[chg_cnt]:=chargeA[i]; fi
   endfor
-  for i=1 upto cntB: if lineB[i]<>0:
-    if     (lineB[i]=dl)or(lineB[i]=dr)or(lineB[i]=dm): nA:=2;
-    ef lineB[i]=tm: nA:=3;
-    ef (lineB[i]=wf)or(lineB[i]=zb)or(lineB[i]=bd): nB:=1;
-    ef (lineB[i]=zf)or(lineB[i]=wb)or(lineB[i]=dt): nB:=6;
-    ef lineB[i]=wv: nB:=4;  else: nA:=1; nB:=0; fi
-        printf fdr(3)(sB[i])&fdr(3)(eB[i])&fdr(3)(nA)&fdr(3)(nB)&"     0  0";
+  for i=1 upto cntB:
+    if lineB[i]<>0:
+      proc_bond_class(lineB[i]);
+      printf fdr(3)(sB[i])&fdr(3)(eB[i])&fdr(3)(nA)&fdr(3)(nB)&"     0  0";
     fi
   endfor
   if chg_cnt>0:
@@ -1488,10 +1529,11 @@
     for i=1 upto chg_cnt: &fdr(4)(chg_atm[i])&fdr(4)(chg_chg[i]) endfor;
   fi
   printf "M  END";
-  %-V3000-----------------------------------------------------------------------------------------
-  elseif sw_mol_out=2:
-  mp_log_name:=jobname&"-"&fit_zero(char_num)&decimal(char_num)&"-"&inf_EN&".mol";
-  printf ""; printf "  -MCFtoMOL- "&fixed_l(20)(info[1]); printf "";
+enddef;
+%-V3000---------------------------------------------------------------------------------------
+def proc_vtk=
+  printf ""; printf "  -MCFtoMOL- "&fixed_l(20)(info[1]);
+  printf "";
   printf "  0  0  0     0  0     999 V3000";
   printf "M  V30 BEGIN CTAB";
   printf "M  V30 COUNTS "&decimal(cntA)&" "&decimal(cntB)&" 0 0 0";
@@ -1503,19 +1545,26 @@
   endfor
   printf "M  V30 END ATOM";
   printf "M  V30 BEGIN BOND";
-  for i=1 upto cntB: if lineB[i]<>0:
-    if     (lineB[i]=dl)or(lineB[i]=dr)or(lineB[i]=dm): nA:=2;
-    ef lineB[i]=tm: nA:=3;
-    ef (lineB[i]=wf)or(lineB[i]=zb)or(lineB[i]=bd): nB:=1;
-    ef (lineB[i]=zf)or(lineB[i]=wb)or(lineB[i]=dt): nB:=6;
-    ef lineB[i]=wv: nB:=4;  else: nA:=1; nB:=0; fi
-    printf "M  V30 "&decimal(i)&" "&decimal(nA)&" "&decimal(sB[i])&" "&decimal(eB[i]); fi endfor
+  for i=1 upto cntB:
+    if lineB[i]<>0:
+      proc_bond_class(lineB[i]);
+      printf "M  V30 "&decimal(i)&" "&decimal(nA)&" "&decimal(sB[i])&" "&decimal(eB[i]);
+    fi
+  endfor
   printf "M  V30 END BOND";
   printf "M  V30 END CTAB";
   printf "M  END";
+enddef;
+%-------------------------------------------------------------------------------------------------
+vardef fit_zero(expr n)=if n<=9: "00" elseif n<=99: "0" fi &decimal(n) enddef;
+%-------------------------------------------------------------------------------------------------
+def proc_bond_class(expr n)=
+  if (n=dl)or(n=dr)or(n=dm): nA:=2;
+  ef n=tm:                   nA:=3;
+  ef (n=wf)or(n=zb)or(n=bd): nB:=1;
+  ef (n=zf)or(n=wb)or(n=dt): nB:=6;
+  ef n=wv:                   nB:=4;
+  else: nA:=1; nB:=0;
   fi
-  endgroup
 enddef;
-%-------------------------------------------------------------------------------------------------
-vardef fit_zero(expr n)=if n<=9: "00" elseif n<=99: "0" fi enddef;
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%



More information about the tex-live-commits mailing list