Commits

petermr committed 173e9a4

first commit

  • Participants

Comments (0)

Files changed (32)

+foo
+^.project$
+^.settings/
+^.classpath$
+^.hgignore~$
+^target/.*
+/target/

File materials/in/spectrum.jdx

+##TITLE= CPD01 entry 1
+##MOLFORM= 
+##CAS NAME= 
+##CAS REGISTRY NO= 0000
+##RTI= 0.0000        
+##MW= 0
+##DATA TYPE= MASS SPECTRUM
+##NPOINTS= 25
+##XYDATA= (XY..XY)
+ 27, 1248 28, 2067 29, 5538 30, 351 31, 702 32, 39 36, 78 38, 39
+ 39, 39 40, 39 41, 78 42, 351 43, 2028 44, 5343 45, 2730 46, 78
+ 47, 39 49, 39 51, 39 56, 39 71, 39 72, 39 73, 9945 74, 546 75, 39
+##END= 

File materials/out/spectrum.cml

+<?xml version="1.0" encoding="UTF-8"?>
+<cml xmlns="http://www.xml-cml.org/schema">
+  <spectrum type="MASS" title="CPD01 entry 1">
+    <spectrumData>
+      <xaxis>
+        <array dataType="xsd:double" size="25">27.0 28.0 29.0 30.0 31.0 32.0 36.0 38.0 39.0 40.0 41.0 42.0 43.0 44.0 45.0 46.0 47.0 49.0 51.0 56.0 71.0 72.0 73.0 74.0 75.0</array>
+      </xaxis>
+      <yaxis>
+        <array dataType="xsd:double" size="25">1248.0 2067.0 5538.0 351.0 702.0 39.0 78.0 39.0 39.0 39.0 78.0 351.0 2028.0 5343.0 2730.0 78.0 39.0 39.0 39.0 39.0 39.0 39.0 9945.0 546.0 39.0</array>
+      </yaxis>
+    </spectrumData>
+    <parameterList>
+      <parameter dictRef="foo:title">
+        <scalar dataType="xsd:string">CPD01 entry 1</scalar>
+      </parameter>
+      <parameter dictRef="foo:owner">
+        <scalar dataType="xsd:string">COPYRIGHT UNKNOWN</scalar>
+      </parameter>
+      <parameter dictRef="jdx:origin">
+        <scalar dataType="xsd:string">UNKNOWN ORIGIN</scalar>
+      </parameter>
+      <parameter dictRef="foo:substance$mol-formula">
+        <scalar dataType="xsd:string"/>
+      </parameter>
+      <parameter dictRef="foo:substance$cas-name">
+        <scalar dataType="xsd:string"/>
+      </parameter>
+      <parameter dictRef="foo:substance$cas-regno">
+        <scalar dataType="xsd:string">0000</scalar>
+      </parameter>
+      <parameter dictRef="foo:rti">
+        <scalar dataType="xsd:string">0.0000</scalar>
+      </parameter>
+      <parameter dictRef="foo:substance$mass$mw">
+        <scalar dataType="xsd:string">0</scalar>
+      </parameter>
+      <parameter dictRef="jdx:dataType">
+        <scalar dataType="xsd:string">MASS SPECTRUM</scalar>
+      </parameter>
+    </parameterList>
+  </spectrum>
+</cml>
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+        xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>cml</groupId>
+        <artifactId>jumbo-converters</artifactId>
+        <version>0.3-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>jumbo-converters-cli</artifactId>
+    <name>jumbo-converters-cli</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.xml-cml</groupId>
+            <artifactId>cifxom</artifactId>
+            <version>1.5-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>${jumbo.groupId}</groupId>
+            <artifactId>jumbo</artifactId>
+            <version>${jumbo.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>cml</groupId>
+            <artifactId>jumbo-converters-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>cml</groupId>
+            <artifactId>jumbo-converters-chemdraw</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>cml</groupId>
+            <artifactId>jumbo-converters-cif</artifactId>
+            <version>0.4-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>cml</groupId>
+            <artifactId>jumbo-converters-compchem-amber</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>cml</groupId>
+            <artifactId>jumbo-converters-compchem-cml</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>cml</groupId>
+            <artifactId>jumbo-converters-compchem-common</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>cml</groupId>
+            <artifactId>jumbo-converters-compchem-dalton</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>cml</groupId>
+            <artifactId>jumbo-converters-compchem-gamessuk</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>cml</groupId>
+            <artifactId>jumbo-converters-compchem-gamessus</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>cml</groupId>
+            <artifactId>jumbo-converters-compchem-gaussian</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>cml</groupId>
+            <artifactId>jumbo-converters-compchem-jaguar</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>cml</groupId>
+            <artifactId>jumbo-converters-compchem-molcas</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>cml</groupId>
+            <artifactId>jumbo-converters-compchem-mopac</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>cml</groupId>
+            <artifactId>jumbo-converters-compchem-nwchem</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>cml</groupId>
+            <artifactId>jumbo-converters-compchem-qespresso</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>cml</groupId>
+            <artifactId>jumbo-converters-compchem-turbomole</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>cml</groupId>
+            <artifactId>jumbo-converters-molecule</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>cml</groupId>
+            <artifactId>jumbo-converters-molecule-cml</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>cml</groupId>
+            <artifactId>jumbo-converters-reaction</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>cml</groupId>
+            <artifactId>jumbo-converters-spectrum</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>java3d</groupId>
+            <artifactId>vecmath</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>cml</groupId>
+            <artifactId>jumbo-converters-testutils</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+    </dependencies>
+
+</project>

File src/main/java/org/xmlcml/cml/converters/cli/ConverterCli.java

+package org.xmlcml.cml.converters.cli;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+import nu.xom.Element;
+
+import org.apache.log4j.Logger;
+import org.xmlcml.cml.base.CMLUtil;
+import org.xmlcml.cml.converters.Converter;
+import org.xmlcml.cml.converters.MimeType;
+import org.xmlcml.cml.converters.molecule.cml.CMLTransformMolecule;
+import org.xmlcml.cml.converters.registry.ConverterRegistry;
+import org.xmlcml.euclid.Util;
+
+/**
+ * @author Sam Adams
+ */
+public class ConverterCli {
+
+	private static Logger LOG = Logger.getLogger(Converter.class);
+	
+	private int argCount = 0;
+	private String converterName = null;
+	private String inputType = null;
+	private String inputName = null;
+	private String inputUrl = null;
+	private String outputType = null;
+	private String outputName = null;
+	private String startDirName = null;
+	private String xpath = null;
+	private List<String> editList = new ArrayList<String>();
+	private Converter converter = null;
+	private List<File> infiles;
+	private File infile;
+	private InputStream inStream;
+	private File outfile;
+
+	
+	public ConverterCli() {
+	}
+	
+	private void processArgs(String[] args) {
+		
+		
+		parseArgs(args);
+		getInputAndOutputTypes();
+		try {
+			getInputAndOutputs();
+		} catch (Exception e) {
+			throw new RuntimeException("cannot open inputs", e);
+		}
+		getConverter(args);
+		convert(args);
+	}
+
+	private void getInputAndOutputs() throws Exception {
+		if (startDirName != null) {
+			Globber globber = new Globber(inputName, startDirName);
+			infiles = globber.walkTree();
+		} else if (inputUrl != null) {
+			inStream = new URL(inputUrl).openStream();
+			outfile = new File(outputName);
+		} else {
+			infile = createInfile(inputName);
+			inStream = new FileInputStream(infile);
+			outfile = new File(outputName);
+		}
+	}
+
+	private void getConverter(String[] args) {
+		if (converterName != null) {
+			try {
+				converter = (Converter) Class.forName(converterName).newInstance();
+			} catch (Exception e) {
+				throw new RuntimeException("Cannot create converter: "+converterName, e);
+			}
+		} else if (inputType.equals(MimeType.CML.getMimeType()) && outputType.equals(MimeType.CML.getMimeType())) {
+			if (editList.size() > 0) {
+				processEditList(infile, outfile);
+			}
+		} else {
+			converter = ConverterRegistry.getDefaultConverterRegistry().findSingleConverter(inputType, outputType);
+		}
+		if (converter == null) {
+			printConverters(args, inputType, outputType);
+			throw new RuntimeException("Cannot find converter");
+		}
+
+	}
+
+	private void convert(String[] args) {
+		if (!(converter instanceof CMLTransformMolecule)) {
+			if (inStream != null) {
+				converter.convert(inStream, outfile);
+			} else if (infiles != null) {
+				int idx = outputName.indexOf(".");
+				String outputName0 = outputName.substring(idx); // make suffix
+				for (File infile0 : infiles) {
+					File outfile0 = new File(infile0.getAbsolutePath().toString()+Util.S_PERIOD+outputName0);
+					converter.convert(infile0, outfile0);
+				}
+			}
+		}
+	}
+
+	private void parseArgs(String[] args) {
+		argCount = 0;
+		while (true) {
+			if (argCount >= args.length) {
+				break;
+			} else if ("-c".equals(args[argCount])) {
+				converterName = args[++argCount]; argCount++;
+			} else if ("-d".equals(args[argCount])) {
+				startDirName = args[++argCount]; argCount++;
+			} else if ("-e".equals(args[argCount])) {
+				createEditList(args);
+			} else if ("-i".equals(args[argCount])) {
+				inputName = args[++argCount]; argCount++;
+			} else if ("-it".equals(args[argCount])) {
+				inputType = args[++argCount]; argCount++;
+			} else if ("-o".equals(args[argCount])) {
+				outputName = args[++argCount]; argCount++;
+			} else if ("-ot".equals(args[argCount])) {
+				outputType = args[++argCount]; argCount++;
+			} else if ("-u".equals(args[argCount])) {
+				inputUrl = args[++argCount]; argCount++;
+			} else {
+				System.err.println("Cannot parse: "+args[argCount++]);
+			}
+		}
+	}
+
+	private void createEditList(String[] args) {
+		argCount++;
+		while (argCount < args.length) {
+			String arg = args[argCount++];
+			if (arg.startsWith(Util.S_MINUS)) {
+				break;
+			}
+			editList.add(arg);
+		}
+	}
+
+	private void processEditList(File infile, File outfile) {
+		Element element = CMLUtil.parseQuietlyIntoCML(infile);
+		if (element == null) {
+			throw new RuntimeException("Cannot find/read/parse: "+infile);
+		}
+		if (xpath == null) {
+			xpath = "//cml:molecule";
+		}
+		CMLTransformMolecule transformer = new CMLTransformMolecule();
+		for (String command : editList) {
+			transformer.transformMolecule(command, element, xpath);
+		}
+		try {
+			CMLUtil.debug(element, new FileOutputStream(outfile), 0);
+		} catch (Exception e) {
+			throw new RuntimeException("Cannot find/write output: "+outfile, e);
+		}
+		converter = transformer;
+	}
+
+	private void getInputAndOutputTypes() {
+		if (inputType == null) {
+			if (inputName != null) {
+				inputType = ConverterRegistry.getDefaultConverterRegistry().getSingleMimeTypeFromFilename(inputName);
+			}
+		}
+		if (outputType == null) {
+			outputType = ConverterRegistry.getDefaultConverterRegistry().getSingleMimeTypeFromFilename(outputName);
+		}
+		if (inputType == null || outputType == null) {
+			throw new RuntimeException("Cannot find or deduce I/O types");
+		}
+		if ((inputName == null && inputUrl == null) || outputName == null) {
+			throw new RuntimeException("Cannot find or deduce I/O streams");
+		}
+	}
+
+	private void printConverters(String[] args, String inputType,
+			String outputType) {
+		System.err.println("cannot find converter for: "+Util.concatenate(args, " "));
+		List<Converter> converterList = ConverterRegistry.getDefaultConverterRegistry().findConverters(inputType, outputType);
+		if (converterList.size() > 1) {
+			System.out.println("More than one converter");
+			for (Converter conv : converterList) {
+				System.out.println(">> "+conv+" "+conv.getDescription());
+			}
+		}
+	}
+
+	private File createInfile(String inputName) {
+		File infile = new File(inputName);
+		try {
+			LOG.info("input file: "+infile.getAbsolutePath());
+			System.out.println("input file: "+infile.getCanonicalPath());
+		} catch (IOException e) {
+			e.printStackTrace();
+			throw new RuntimeException("Cannot find file: ", e);
+		}
+		return infile;
+	}
+
+	public static Set<MimeType> getTypesFromFilename(String inputName) {
+		Set<MimeType> types = null;
+		if (inputName != null) {
+			int idx = inputName.lastIndexOf(".");
+			if (idx != -1) {
+				String suffix = inputName.substring(idx+1);
+				types = ConverterRegistry.getDefaultConverterRegistry().getTypes(suffix);
+			}
+		}
+		return types;
+	}
+
+	private static void usage() {
+		System.out.println("Usage:");
+		System.out.println("   -i gau-arc foo.arc -o cml foo.cml");
+		System.out.println();
+		System.out.println("Available converters:");
+		for (Converter info : ConverterRegistry.getDefaultConverterRegistry().getConverterList()) {
+		    System.out.println(info.getInputType()+"\t"+info.getOutputType());
+		}
+	}
+
+    public static void main(String[] args) {
+    	ConverterCli cli = new ConverterCli();
+        if (args.length == 0) {
+            usage();
+        } else if (args.length == 1) {
+            String[] args1 = args[0].trim().split(Util.S_WHITEREGEX);
+            cli.processArgs(args1);
+        } else {
+            cli.processArgs(args);
+        }
+    }
+
+}

File src/main/java/org/xmlcml/cml/converters/cli/Globber.java

+package org.xmlcml.cml.converters.cli;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.FileSystems;
+import java.nio.file.FileVisitResult;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.PathMatcher;
+import java.nio.file.SimpleFileVisitor;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.util.ArrayList;
+import java.util.List;
+
+public class Globber extends SimpleFileVisitor<Path> {
+	/**
+
+	 * code that finds files that match the specified glob pattern.
+	 * For more information on what constitutes a glob pattern, see
+	 * http://docs.oracle.com/javase/tutorial/essential/io/fileOps.html#glob
+	 *
+	 * The file or directories that match the pattern are printed to
+	 * standard out.  The number of matches is also printed.
+	 *
+	 */
+
+	public static final String GLOB = "glob:"; 
+	public static final String REGEX = "regex:"; 
+	
+    private final PathMatcher matcher;
+	private List<File> fileList = new ArrayList<File>();
+	private String syntax = "glob:";
+	private Path startDir = new File(".").toPath();
+	private File currentDir;
+
+    public Globber(String pattern, String startDirName) {
+    	this(pattern);
+        this.startDir = new File(startDirName).toPath();
+    }
+
+    public Globber(String pattern) {
+        matcher = FileSystems.getDefault().getPathMatcher(syntax + pattern);
+    }
+
+	public List<File> getFileList() {
+		return fileList;
+	}
+	
+    // Invoke the pattern matching method on each file.
+    @Override
+    public FileVisitResult visitFile(Path file,	BasicFileAttributes attrs) {
+        find(file);
+        return FileVisitResult.CONTINUE;
+    }
+
+	private void find(Path path) {
+		Path name = path.getFileName();
+        if (name != null && matcher.matches(name)) {
+        	File fullFile = new File(currentDir, name.toString());
+        	fileList.add(fullFile);
+        }
+	}
+
+    @Override
+    public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) {
+    	currentDir = dir.toFile();
+        return FileVisitResult.CONTINUE;
+    }
+
+    @Override
+    public FileVisitResult visitFileFailed(Path file, IOException exc) {
+    	throw new RuntimeException("Globber failed", exc);
+    }
+
+    public List<File> walkTree() {
+    	try {
+    		Files.walkFileTree(startDir, this);
+    	} catch (Exception e) {
+    		throw new RuntimeException("walk tree fails: ", e);
+    	}
+        return fileList;
+    }
+
+}

File src/main/java/org/xmlcml/cml/converters/cli/package-info.java

+/** 
+Commandline conversion.
+Deduces the converter to use from the filesuffixes and file types
+<pre>
+Typically 6 args
+		   -i gau-arc foo.arc -o cml foo.cml
+</pre>
+*/
+package org.xmlcml.cml.converters.cli;

File src/test/java/org/xmlcml/cml/converters/cli/ConverterCliTest.java

+package org.xmlcml.cml.converters.cli;
+
+import java.io.File;
+import java.util.Set;
+
+import junit.framework.Assert;
+
+import org.junit.Ignore;
+import org.junit.Test;
+import org.xmlcml.cml.base.CMLUtil;
+import org.xmlcml.cml.converters.MimeType;
+import org.xmlcml.cml.testutil.JumboTestUtils;
+
+@Ignore
+public class ConverterCliTest {
+
+	private static String CIF_TYPE = "chemical/x-cif";
+	private static String CML_TYPE = "chemical/x-cml";	
+	private static String MOL_TYPE = "chemical/x-mdl-molfile";
+	
+	@Test
+	public void dummy() {
+
+	}
+
+	@Test
+    public void testList() {
+    	String[] args = {"-i", "junk",  "junk",  "-o", "grot", "grot"};
+    	try {
+    		ConverterCli.main(args);
+    		Assert.fail("Should throw exception");
+    	} catch (Exception e) {
+    	}
+
+    }
+
+    @Test
+    public void testList1() {
+    	String[] args = {"-i junk junk -o grot grot"};
+    	try {
+    		ConverterCli.main(args);
+    		Assert.fail("Should throw exception");
+    	} catch (Exception e) {
+    	}
+    }
+
+
+    @Test
+    public void testMol() {
+    	String infile = "src/test/resources/examples/simple.mol";
+    	String outfile = "src/test/resources/examples/simple.cml";
+    	String reffile = "src/test/resources/examples/simple.ref.cml";
+    	String[] args = {"-it "+MOL_TYPE+" -i "+infile +
+    			         " -ot "+CML_TYPE+" -o "+outfile};
+    	try {
+    		ConverterCli.main(args);
+    	} catch (Exception e) {
+    		Assert.fail("Should not throw "+ e);
+    	}
+		JumboTestUtils.assertEqualsIncludingFloat("fromMdl", 
+				CMLUtil.parseQuietlyIntoCML(new File(outfile)), 
+				CMLUtil.parseQuietlyIntoCML(new File(reffile)), 
+				true, 0.00000001);
+    }
+
+    @Test
+    public void testMolRoundtrip() {
+    	String infile = "src/test/resources/examples/simple.cml";
+    	String outfile = "src/test/resources/examples/simple.roundtrip.mol";
+    	String[] args = {"-i "+infile+" -o "+outfile};
+    	try {
+    		ConverterCli.main(args);
+    	} catch (Exception e) {
+    		Assert.fail("Should not throw "+ e);
+    	}
+//		JumboTestUtils.assertEqualsIncludingFloat("toMdl", 
+//				CMLUtil.parseQuietlyIntoCML(new File(infile)), 
+//				CMLUtil.parseQuietlyIntoCML(new File(outfile)), 
+//				true, 0.00000001);
+    }
+
+    @Test
+    public void testCMLLite() {
+    	String infile = "src/test/resources/examples/simple.cml";
+    	String outfile = "src/test/resources/examples/simple.lite.cml";
+    	String reffile = "src/test/resources/examples/simple.lite.ref.cml";
+    	String converter = "org.xmlcml.cml.converters.cml.CML2CMLLiteConverter";
+    	String[] args = {"-i "+infile+" -o "+outfile+" -c "+converter};
+    	try {
+    		ConverterCli.main(args);
+    	} catch (Exception e) {
+    		e.printStackTrace();
+    		Assert.fail("Should not throw "+ e);
+    	}
+		JumboTestUtils.assertEqualsIncludingFloat("cmlLite", 
+				CMLUtil.parseQuietlyIntoCML(new File(outfile)), 
+				CMLUtil.parseQuietlyIntoCML(new File(reffile)), 
+				true, 0.00000001);
+    }
+
+    @Test
+    public void testEdit() {
+    	String infile = "src/test/resources/examples/simple.cml";
+    	String outfile = "src/test/resources/examples/simple.edited.cml";
+    	String reffile = "src/test/resources/examples/simple.edited.ref.cml";
+    	String[] args = {"-i "+infile+" -o "+outfile+" -e bonds"};
+    	try {
+    		ConverterCli.main(args);
+    	} catch (Exception e) {
+    		e.printStackTrace();
+    		Assert.fail("Should not throw "+ e);
+    	}
+		JumboTestUtils.assertEqualsIncludingFloat("edit", 
+				CMLUtil.parseQuietlyIntoCML(new File(outfile)), 
+				CMLUtil.parseQuietlyIntoCML(new File(reffile)), 
+				true, 0.00000001);
+    }
+
+    @Test
+    public void testEdit1() {
+    	String infile = "src/test/resources/examples/simple.cml";
+    	String outfile = "src/test/resources/examples/simple.edited1.cml";
+    	String reffile = "src/test/resources/examples/simple.edited1.ref.cml";
+    	String[] args = {"-i "+infile+" -o "+outfile+" -e orders addh3d"};
+    	try {
+    		ConverterCli.main(args);
+    	} catch (Exception e) {
+    		e.printStackTrace();
+    		Assert.fail("Should not throw "+ e);
+    	}
+		JumboTestUtils.assertEqualsIncludingFloat("edit", 
+				CMLUtil.parseQuietlyIntoCML(new File(outfile)), 
+				CMLUtil.parseQuietlyIntoCML(new File(reffile)), 
+				true, 0.00000001);
+    }
+
+    @Test
+    public void testCDX() {
+    	String infile = "src/test/resources/examples/cdx/r19.cdx";
+    	String outfile = "src/test/resources/examples/cdx/r19.cdxml";
+    	String reffile = "src/test/resources/examples/cdx/r19.ref.cdxml";
+    	String[] args = {"-i "+infile+" -o "+outfile};
+    	try {
+    		ConverterCli.main(args);
+    	} catch (Exception e) {
+    		Assert.fail("Should not throw "+ e);
+    	}
+		JumboTestUtils.assertEqualsIncludingFloat("CDX", 
+				CMLUtil.parseQuietlyToDocument(new File(outfile)).getRootElement(), 
+				CMLUtil.parseQuietlyToDocument(new File(reffile)).getRootElement(), 
+				true, 0.00000001);
+    }
+
+    @Test
+    public void testCDXML() {
+    	// C00006 fails with standard CDXML library
+    	String infile = "src/test/resources/examples/cdx/r19.cdxml";
+    	String outfile = "src/test/resources/examples/cdx/r19.cml";
+    	String reffile = "src/test/resources/examples/cdx/r19.ref.cml";
+    	String[] args = {"-i "+infile+" -o "+outfile};
+    	try {
+    		ConverterCli.main(args);
+    	} catch (Exception e) {
+    		e.printStackTrace();
+    		Assert.fail("Should not throw "+ e);
+    	}
+		JumboTestUtils.assertEqualsIncludingFloat("CDXML", 
+				CMLUtil.parseQuietlyToDocument(new File(outfile)).getRootElement(), 
+				CMLUtil.parseQuietlyToDocument(new File(reffile)).getRootElement(), 
+				true, 0.00000001);
+    }
+
+    @Test
+    public void testCIFUrl() {
+    	// C00006 fails with standard CDXML library
+    	String infile = "http://scripts.iucr.org/cgi-bin/sendcif?aa2004sup1";
+    	String outfile = "src/test/resources/examples/cif/aa2004.cml";
+    	String reffile = "src/test/resources/examples/cif/aa2004.ref.cml";
+    	String[] args = {"-u "+infile+" -it "+CIF_TYPE+" -o "+outfile};
+    	try {
+    		ConverterCli.main(args);
+    	} catch (Exception e) {
+    		e.printStackTrace();
+    		Assert.fail("Should not throw "+ e);
+    	}
+		JumboTestUtils.assertEqualsIncludingFloat("CIF", 
+				CMLUtil.parseQuietlyToDocument(new File(outfile)).getRootElement(), 
+				CMLUtil.parseQuietlyToDocument(new File(reffile)).getRootElement(), 
+				true, 0.00000001);
+    }
+
+    	
+    @Test
+    public void testWildCard() {
+    	String infile = "*.mol";
+    	String startDir = "src/test/resources/examples/mdl";
+    	String outname = "*.cml";
+    	String[] args = {"-i "+infile+" -o "+outname+" -d "+startDir};
+    	try {
+    		ConverterCli.main(args);
+    	} catch (Exception e) {
+    		e.printStackTrace();
+    		Assert.fail("Should not throw "+ e);
+    	}
+    }
+
+
+    @Test
+    @Ignore
+    public void testJCamp() {
+    	String[] args = {"-i", "jcamp-dx",  "materials/in/spectrum.jdx",  "-o", "cml", "materials/out/spectrum.cml"};
+    	try {
+    		ConverterCli.main(args);
+    	} catch (Exception e) {
+    		Assert.fail("Should not throw "+ e);
+    	}
+    }
+    
+    @Test
+    public void testExtension() {
+    	Set<MimeType> types = ConverterCli.getTypesFromFilename("foo.cml");
+    	Assert.assertNotNull("non-null list", types);
+    }
+    
+}

File src/test/java/org/xmlcml/cml/converters/cli/GlobberTest.java

+package org.xmlcml.cml.converters.cli;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.FileSystems;
+import java.nio.file.FileVisitResult;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.PathMatcher;
+import java.nio.file.Paths;
+import java.nio.file.SimpleFileVisitor;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.util.List;
+
+import junit.framework.Assert;
+
+import org.junit.Ignore;
+import org.junit.Test;
+
+public class GlobberTest {
+
+	@Test
+	public void testGlob() throws Exception {
+		Globber globber = new Globber("*.mol", "src/test/resources/examples/mdl");
+		List<File> fileList = globber.walkTree();
+		Assert.assertEquals("paths", 3, fileList.size());
+	}
+
+	@Test
+	public void testGlob1() throws Exception {
+		Globber globber = new Globber("*.mol", "src/test/resources/examples");
+		List<File> fileList = globber.walkTree();
+		Assert.assertEquals("paths", 5, fileList.size());
+	}
+
+	@Test
+	public void testGlob2() throws Exception {
+		Globber globber = new Globber("*.mol");
+		List<File> fileList = globber.walkTree();
+		Assert.assertEquals("paths", 10, fileList.size());
+	}
+	
+	@Test
+	public void testGlob3() throws Exception {
+		Globber globber = new Globber("*.mol", "src");
+		Path path = new File("src").toPath();
+		List<File> fileList = globber.walkTree();
+		Assert.assertEquals("paths", 5, fileList.size());
+	}
+	
+	@Test
+	@Ignore
+	public void testGlob4() throws Exception {
+		Globber globber = new Globber("*.mol", "src/test/resources/examples/mdl");
+		List<File> fileList = globber.walkTree();
+		Assert.assertEquals("paths", 3, fileList.size());
+	}
+
+	@Test
+	public void testStackoverflowGlobber() throws IOException {
+	    final PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:*.cml");
+	    Files.walkFileTree(Paths.get("d:/petermr-workspace/jumbo-converters/jumbo-converters-cli/src/test/resources"), new SimpleFileVisitor<Path>() {
+	        @Override
+	        public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
+	        	System.out.println("try>> "+file);
+	            if (matcher.matches(file)) {
+	                System.out.println("MATCHES>>"+file);
+	            }
+	            return FileVisitResult.CONTINUE;
+	        }
+
+	        @Override
+	        public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
+	            return FileVisitResult.CONTINUE;
+	        }
+	    });
+	}
+}

File src/test/resources/examples/cdx/r19.cdx

Binary file added.

File src/test/resources/examples/cdx/r19.cdxml

+<?xml version="1.0" encoding="UTF-8"?>
+<cdxList id="null">
+  <CDXML CreationProgram="ChemDraw 7.0.1" Name="Microsoft Word - C:\Chemistry\_PHD\MyThesis\PHD_Thesis_JHarter2002_v22_5.doc" Magnification="666" WindowPosition="24.9749 51.4484" WindowSize="549.4499 370.1294" PrintMargins="28.3464 28.3464 28.3464 28.3464" ShowAtomQuery="true" ShowAtomStereo="false" ShowAtomNumber="false" ShowBondQuery="true" ShowBondStereo="false" LabelLineHeight="0" CaptionLineHeight="1" ChainAngle="7864320" BondLength="12.1992" BoldWidth="1.8141" LineWidth="0.8503" MarginWidth="1.25" HashSpacing="1.75" CaptionJustification="Left" LabelJustification="Auto" BondSpacing="200" BoundingBox="138.9999 60.9799 393.6269 106.9499" LabelFont="3" LabelFace="96" LabelSize="8" LabelColor="3" CaptionFont="3" CaptionFace="1" CaptionSize="6" CaptionColor="3" id="0">
+    <page BoundingBox="0 0 538.507 785.107" WidthPages="1" HeightPages="1" HeaderPosition="35.9999" FooterPosition="35.9999" id="156">
+      <fragment BoundingBox="138.9999 67.0011 214.1269 91.6999" id="19">
+        <n Z="121" p="140.1129 88.4499" AS="N" id="18"/>
+        <n Z="122" p="150.6777 82.3503" AS="N" id="20"/>
+        <b Z="123" B="18" E="20" BS="N" id="21"/>
+        <n Z="124" p="161.2426 88.4499" AS="N" id="22"/>
+        <b Z="125" Order="2" DoublePosition="Right" B="20" E="22" BS="U" BondCircularOrdering="0 21 0 25" id="23"/>
+        <n Z="126" p="171.8074 82.3503" AS="N" id="24"/>
+        <b Z="127" B="22" E="24" BS="N" id="25"/>
+        <n Z="128" p="182.3722 88.4499" AS="N" id="26"/>
+        <b Z="129" Order="2" DoublePosition="Right" B="24" E="26" BS="U" BondCircularOrdering="0 25 0 29" id="27"/>
+        <n Z="130" p="192.9371 82.3503" AS="U" id="28"/>
+        <b Z="131" B="26" E="28" BS="N" id="29"/>
+        <n Z="132" p="192.9371 70.1511" AS="N" Element="8" NumHydrogens="0" id="30">
+          <t temp_Text="[[0 3 96 8 3]]O" p="189.8121 73.3011" BoundingBox="189.8121 67.0011 196.0121 73.4011" LabelJustification="Left" id="0"/>
+        </n>
+        <b Z="133" Order="2" B="28" E="30" BS="U" id="31"/>
+        <n Z="134" p="203.5019 88.4499" NodeType="Fragment" AS="N" id="32">
+          <t temp_Text="[[0 3 96 8 3]]OEt" LabelAlignment="Left" p="200.3769 91.5999" BoundingBox="200.3769 85.2999 214.1269 91.6999" LabelJustification="Left" id="0"/>
+          <fragment BoundingBox="21.7626 -207.9003 225.6203 89.8167" id="157">
+            <n Z="114" p="203.4629 82.3503" AS="U" Element="8" NumHydrogens="0" id="73">
+              <t temp_Text="[[0 3 96 8 3]]O" p="200.3379 85.5003" BoundingBox="200.3379 79.2003 206.5379 85.6003" LabelJustification="Left" id="0"/>
+            </n>
+            <n Z="115" p="224.5073 82.3503" AS="U" id="74"/>
+            <n Z="116" p="213.9851 88.4253" AS="U" id="75"/>
+            <n Z="117" p="25.6129 -204.0499" NodeType="ExternalConnectionPoint" AS="U" id="79"/>
+            <b Z="118" B="79" E="73" BS="U" id="76"/>
+            <b Z="119" B="73" E="75" BS="U" id="77"/>
+            <b Z="120" B="74" E="75" BS="U" id="78"/>
+          </fragment>
+        </n>
+        <b Z="135" B="28" E="32" BS="N" id="33"/>
+      </fragment>
+      <fragment BoundingBox="318.4999 68.0011 393.6269 92.6999" id="37">
+        <n Z="145" p="319.6129 89.4499" AS="N" id="38"/>
+        <n Z="146" p="330.1777 83.3503" AS="U" id="39"/>
+        <b Z="147" B="38" E="39" BS="N" id="54"/>
+        <n Z="148" p="340.7426 89.4499" AS="U" id="40"/>
+        <b Z="149" B="39" E="40" BS="N" id="55"/>
+        <n Z="150" p="351.3074 83.3503" AS="N" id="41"/>
+        <b Z="151" B="40" E="41" BS="N" id="56"/>
+        <n Z="152" p="361.8722 89.4499" AS="N" id="42"/>
+        <b Z="153" Order="2" DoublePosition="Right" B="41" E="42" BS="U" BondCircularOrdering="0 56 0 58" id="57"/>
+        <n Z="154" p="372.4371 83.3503" AS="U" id="43"/>
+        <b Z="155" B="42" E="43" BS="N" id="58"/>
+        <n Z="156" p="372.4371 71.1511" AS="N" Element="8" NumHydrogens="0" id="44">
+          <t temp_Text="[[0 3 96 8 3]]O" p="369.3121 74.3011" BoundingBox="369.3121 68.0011 375.5121 74.4011" LabelJustification="Left" id="0"/>
+        </n>
+        <b Z="157" Order="2" B="43" E="44" BS="U" id="59"/>
+        <n Z="158" p="383.0019 89.4499" NodeType="Fragment" AS="N" id="45">
+          <t temp_Text="[[0 3 96 8 3]]OEt" LabelAlignment="Left" p="379.8769 92.5999" BoundingBox="379.8769 86.2999 393.6269 92.6999" LabelJustification="Left" id="0"/>
+          <fragment BoundingBox="201.2625 -206.9003 405.1203 90.8167" id="158">
+            <n Z="138" p="382.9629 83.3503" AS="U" Element="8" NumHydrogens="0" id="47">
+              <t temp_Text="[[0 3 96 8 3]]O" p="379.8379 86.5003" BoundingBox="379.8379 80.2003 386.0379 86.6003" LabelJustification="Left" id="0"/>
+            </n>
+            <n Z="139" p="404.0073 83.3503" AS="U" id="48"/>
+            <n Z="140" p="393.4851 89.4253" AS="U" id="49"/>
+            <n Z="141" p="205.1129 -203.0499" NodeType="ExternalConnectionPoint" AS="U" id="50"/>
+            <b Z="142" B="50" E="47" BS="U" id="51"/>
+            <b Z="143" B="47" E="49" BS="U" id="52"/>
+            <b Z="144" B="48" E="49" BS="U" id="53"/>
+          </fragment>
+        </n>
+        <b Z="159" B="43" E="45" BS="N" id="60"/>
+        <n Z="160" p="340.7426 77.2507" AS="N" Element="8" NumHydrogens="0" id="61">
+          <t temp_Text="[[0 3 96 8 3]]O" p="337.6176 80.4007" BoundingBox="337.6176 74.1007 343.8176 80.5007" LabelJustification="Left" id="0"/>
+        </n>
+        <b Z="161" B="39" E="61" BS="N" id="62"/>
+        <b Z="162" B="40" E="61" BS="N" id="66"/>
+      </fragment>
+      <fragment BoundingBox="351.2457 97.8999 366.2457 106.9499" id="69">
+        <n Z="163" p="353.3551 101.4249" NodeType="Unspecified" AS="N" id="68">
+          <t temp_Text="[[0 3 1 9 3]]172" LineHeight="1" LabelAlignment="Left" p="351.2457 104.9499" BoundingBox="351.2457 97.8999 366.2457 106.9499" Warning="ChemDraw can't interpret this label." LabelLineHeight="1" LabelJustification="Left" id="0"/>
+        </n>
+      </fragment>
+      <fragment BoundingBox="167.6457 96.5499 182.6457 105.5999" id="90">
+        <n Z="164" p="169.7551 100.0749" NodeType="Unspecified" AS="N" id="91">
+          <t temp_Text="[[0 3 1 9 3]]171" LineHeight="1" LabelAlignment="Left" p="167.6457 103.5999" BoundingBox="167.6457 96.5499 182.6457 105.5999" Warning="ChemDraw can't interpret this label." LabelLineHeight="1" LabelJustification="Left" id="0"/>
+        </n>
+      </fragment>
+      <fragment BoundingBox="241.6999 68.4799 290.4249 74.9749" id="97">
+        <n Z="165" p="244 71" NodeType="Fragment" AS="N" id="96">
+          <t temp_Text="[[0 3 97 6 3]]H2NCONH2{{149}}H2O2" LineHeight="1" LabelAlignment="Left" p="241.6999 73.4749" BoundingBox="241.6999 68.4799 290.4249 74.9749" LabelLineHeight="1" LabelJustification="Left" id="0"/>
+          <fragment BoundingBox="219.0299 57.7405 273.6799 87.9999" id="159">
+            <n Z="59" p="261.6174 60.8905" AS="U" Element="7" NumHydrogens="2" id="107">
+              <t temp_Text="[[0 3 96 8 3]]NH2" LabelAlignment="Left" p="258.7424 64.0405" BoundingBox="258.7424 57.7405 273.6799 65.7405" LabelJustification="Left" id="0"/>
+            </n>
+            <n Z="60" p="255.5424 71.4127" AS="U" id="108"/>
+            <n Z="61" p="261.6174 81.9349" AS="U" Element="8" NumHydrogens="0" id="109">
+              <t temp_Text="[[0 3 96 8 3]]O" Justification="Auto" p="258.4924 85.0849" BoundingBox="258.4924 78.7849 264.6924 85.1849" id="0"/>
+            </n>
+            <n Z="62" p="243.3924 71.4127" AS="U" Element="7" NumHydrogens="2" id="110">
+              <t temp_Text="[[0 3 96 8 3]]NH2" Justification="Right" LabelAlignment="Right" p="246.2674 74.5627" BoundingBox="231.3299 68.2627 246.2674 76.2627" LabelJustification="Right" id="0"/>
+            </n>
+            <n Z="63" p="231.2424 71" AS="U" Element="8" NumHydrogens="2" id="111">
+              <t temp_Text="[[0 3 96 8 3]]OH2" Justification="Right" LabelAlignment="Right" p="234.3674 74.1499" BoundingBox="219.0299 67.8499 234.3674 75.8499" LabelJustification="Right" id="0"/>
+            </n>
+            <n Z="64" p="231.2424 83.1499" AS="U" Element="8" NumHydrogens="2" id="112">
+              <t temp_Text="[[0 3 96 8 3]]OH2" Justification="Right" LabelAlignment="Right" p="234.3674 86.2999" BoundingBox="219.0299 79.9999 234.3674 87.9999" LabelJustification="Right" id="0"/>
+            </n>
+            <b Z="65" B="107" E="108" BS="U" id="113"/>
+            <b Z="66" Order="2" B="108" E="109" BS="U" id="114"/>
+            <b Z="67" B="108" E="110" BS="U" id="115"/>
+          </fragment>
+        </n>
+      </fragment>
+      <fragment BoundingBox="244.8999 60.9799 276.7374 67.4749" id="99">
+        <n Z="166" p="246 63.5" NodeType="Fragment" AS="N" id="98">
+          <t temp_Text="[[0 3 97 6 3]](CF3CO)2O" LineHeight="1" LabelAlignment="Left" p="244.8999 65.9749" BoundingBox="244.8999 60.9799 276.7374 67.4749" LabelLineHeight="1" LabelJustification="Left" id="0"/>
+          <fragment BoundingBox="222.6909 66.9409 290.7242 101.9881" id="160">
+            <n Z="71" p="277.8645 88.3159" AS="U" id="117"/>
+            <n Z="72" p="271.7895 98.8381" AS="U" Element="9" NumHydrogens="0" id="118">
+              <t temp_Text="[[0 3 96 8 3]]F" p="269.227 101.9881" BoundingBox="269.227 95.6881 274.127 101.9881" LabelJustification="Left" id="0"/>
+            </n>
+            <n Z="73" p="283.9395 77.7937" AS="U" Element="9" NumHydrogens="0" id="119">
+              <t temp_Text="[[0 3 96 8 3]]F" p="281.377 80.9437" BoundingBox="281.377 74.6437 286.277 80.9437" LabelJustification="Left" id="0"/>
+            </n>
+            <n Z="74" p="288.3867 94.3909" AS="U" Element="9" NumHydrogens="0" id="120">
+              <t temp_Text="[[0 3 96 8 3]]F" p="285.8242 97.5409" BoundingBox="285.8242 91.2409 290.7242 97.5409" LabelJustification="Left" id="0"/>
+            </n>
+            <n Z="75" p="267.3423 82.2409" AS="U" id="121"/>
+            <n Z="76" p="267.3423 70.0909" AS="U" Element="8" NumHydrogens="0" id="122">
+              <t temp_Text="[[0 3 96 8 3]]O" Justification="Auto" p="264.2173 73.2409" BoundingBox="264.2173 66.9409 270.4173 73.3409" id="0"/>
+            </n>
+            <n Z="77" p="235.7756 88.3159" AS="U" id="123"/>
+            <n Z="78" p="241.8506 98.8381" AS="U" Element="9" NumHydrogens="0" id="124">
+              <t temp_Text="[[0 3 96 8 3]]F" Justification="Auto" p="239.2881 101.9881" BoundingBox="239.2881 95.6881 244.1881 101.9881" id="0"/>
+            </n>
+            <n Z="79" p="225.2534 94.3909" AS="U" Element="9" NumHydrogens="0" id="125">
+              <t temp_Text="[[0 3 96 8 3]]F" Justification="Auto" p="222.6909 97.5409" BoundingBox="222.6909 91.2409 227.5909 97.5409" id="0"/>
+            </n>
+            <n Z="80" p="229.7006 77.7937" AS="U" Element="9" NumHydrogens="0" id="126">
+              <t temp_Text="[[0 3 96 8 3]]F" Justification="Auto" p="227.1381 80.9437" BoundingBox="227.1381 74.6437 232.0381 80.9437" id="0"/>
+            </n>
+            <n Z="81" p="246.2978 82.2409" AS="U" id="127"/>
+            <n Z="82" p="246.2978 70.0909" AS="U" Element="8" NumHydrogens="0" id="128">
+              <t temp_Text="[[0 3 96 8 3]]O" Justification="Auto" p="243.1728 73.2409" BoundingBox="243.1728 66.9409 249.3728 73.3409" id="0"/>
+            </n>
+            <n Z="83" p="256.8201 88.3159" AS="U" Element="8" NumHydrogens="0" id="129">
+              <t temp_Text="[[0 3 96 8 3]]O" Justification="Auto" p="253.6951 91.4659" BoundingBox="253.6951 85.1659 259.8951 91.5659" id="0"/>
+            </n>
+            <b Z="84" B="117" E="118" BS="U" id="130"/>
+            <b Z="85" B="117" E="119" BS="U" id="131"/>
+            <b Z="86" B="117" E="120" BS="U" id="132"/>
+            <b Z="87" B="117" E="121" BS="U" id="133"/>
+            <b Z="88" Order="2" B="121" E="122" BS="U" id="134"/>
+            <b Z="89" B="121" E="129" BS="U" id="135"/>
+            <b Z="90" B="123" E="124" BS="U" id="136"/>
+            <b Z="91" B="123" E="125" BS="U" id="137"/>
+            <b Z="92" B="123" E="126" BS="U" id="138"/>
+            <b Z="93" B="123" E="127" BS="U" id="139"/>
+            <b Z="94" Order="2" B="127" E="128" BS="U" id="140"/>
+            <b Z="95" B="127" E="129" BS="U" id="141"/>
+          </fragment>
+        </n>
+      </fragment>
+      <fragment BoundingBox="248.6999 75.4799 275.1374 81.9749" id="102">
+        <n Z="167" p="251 78" NodeType="Fragment" AS="N" id="101">
+          <t temp_Text="[[0 3 97 6 3]]Na2HPO4" LineHeight="1" LabelAlignment="Left" p="248.6999 80.4749" BoundingBox="248.6999 75.4799 275.1374 81.9749" Warning="An atom in this label has an invalid valence." LabelLineHeight="1" LabelJustification="Left" id="0"/>
+          <fragment BoundingBox="224.9048 63.2159 270.3742 90.6604" id="161">
+            <n Z="99" p="259.5964 70.8131" AS="U" Element="11" NumHydrogens="0" id="143">
+              <t temp_Text="[[0 3 96 8 3]]Na" LabelAlignment="Left" p="256.7214 73.9631" BoundingBox="256.7214 67.6631 266.9714 74.0631" LabelJustification="Left" id="0"/>
+            </n>
+            <n Z="100" p="242.9992 66.3659" AS="U" Element="11" NumHydrogens="0" id="144">
+              <t temp_Text="[[0 3 96 8 3]]Na" Justification="Right" LabelAlignment="Right" p="245.2492 69.5159" BoundingBox="234.9992 63.2159 245.2492 69.6159" LabelJustification="Right" id="0"/>
+            </n>
+            <n Z="101" p="249.0742 76.8881" AS="U" Element="15" NumHydrogens="1" id="145">
+              <t temp_Text="[[0 3 96 8 3]]PH" Justification="Center" LabelAlignment="Center" p="249.0742 80.0381" BoundingBox="243.4992 73.7381 254.6492 80.0381" LabelJustification="Center" id="0"/>
+            </n>
+            <n Z="102" p="255.1492 87.4104" AS="U" Element="8" NumHydrogens="0" id="146">
+              <t temp_Text="[[0 3 96 8 3]]O" Justification="Auto" p="252.0242 90.5603" BoundingBox="252.0242 84.2603 258.2242 90.6604" id="0"/>
+            </n>
+            <n Z="103" p="238.552 82.9631" AS="U" Element="8" NumHydrogens="0" id="147">
+              <t temp_Text="[[0 3 96 8 3]]O" Justification="Auto" p="235.427 86.1131" BoundingBox="235.427 79.8131 241.627 86.2131" id="0"/>
+            </n>
+            <n Z="104" p="267.2993 87.4104" AS="U" Element="8" NumHydrogens="0" id="148">
+              <t temp_Text="[[0 3 96 8 3]]O" Justification="Auto" p="264.1743 90.5603" BoundingBox="264.1743 84.2603 270.3742 90.6604" id="0"/>
+            </n>
+            <n Z="105" p="228.0298 76.8881" AS="U" Element="8" NumHydrogens="0" id="149">
+              <t temp_Text="[[0 3 96 8 3]]O" Justification="Auto" p="224.9048 80.0381" BoundingBox="224.9048 73.7381 231.1048 80.1381" id="0"/>
+            </n>
+            <b Z="106" B="143" E="145" BS="U" id="150"/>
+            <b Z="107" B="144" E="145" BS="U" id="151"/>
+            <b Z="108" B="145" E="146" BS="U" id="152"/>
+            <b Z="109" B="145" E="147" BS="U" id="153"/>
+            <b Z="110" B="146" E="148" BS="U" id="154"/>
+            <b Z="111" B="147" E="149" BS="U" id="155"/>
+          </fragment>
+        </n>
+      </fragment>
+      <graphic Z="136" GraphicType="Line" LineType="Solid" ArrowType="FullHead" HeadSize="1000" BoundingBox="304.1129 83.4499 228.6129 83.4499" id="34"/>
+      <t Z="137" temp_Text="[[0 3 1 6 3]]DCM, 0{{176}}C, 0.5h" LineHeight="1" p="238.1129 90.9499" BoundingBox="238.1129 85.9549 283.3629 92.4499" Warning="ChemDraw can't interpret this label." id="36"/>
+      <step ReactionStepReactants="19 99 102 97" ReactionStepProducts="90 37 69" ReactionStepArrows="34" id="162"/>
+    </page>
+    <colortable>
+      <color r="1" g="1" b="1"/>
+      <color r="0" g="0" b="0"/>
+      <color r="1" g="0" b="0"/>
+      <color r="1" g="1" b="0"/>
+      <color r="0" g="1" b="0"/>
+      <color r="0" g="1" b="1"/>
+      <color r="0" g="0" b="1"/>
+      <color r="1" g="0" b="1"/>
+    </colortable>
+    <fonttable>
+      <font id="3" charset="1252" name="Arial"/>
+    </fonttable>
+  </CDXML>
+</cdxList>

File src/test/resources/examples/cdx/r19.cml

+<?xml version="1.0" encoding="UTF-8"?>
+<cml xmlns="http://www.xml-cml.org/schema" xmlns:cdx="http://www.xml-cml/namespaces/cdx">
+  <array dataType="xsd:double" size="4" GraphicType="Line" LineType="Solid" ArrowType="FullHead" HeadSize="1000" BoundingBox="304.1129 83.4499 228.6129 83.4499" id="x34" type="Arrow" dictRef="cdxml:arrowType">304.1129 83.4499 228.6129 83.4499</array>
+  <label dictRef="cdx:label" cdx:Z="137" cdx:temp_Text="[[0 3 1 6 3]]DCM, 0{{176}}C, 0.5h" cdx:LineHeight="1" cdx:p="238.1129 90.9499" cdx:BoundingBox="238.1129 85.9549 283.3629 92.4499" cdx:Warning="ChemDraw can't interpret this label." id="x36" cdx:fontIndex="3" cdx:typeFace="1" cdx:size="6" cdx:color="3" value="DCM, 0{{176}}C, 0.5h"/>
+  <moleculeList>
+    <molecule role="cdx:fragment" cdx:BoundingBox="219.0299 57.7405 273.6799 87.9999" id="x156">
+      <label dictRef="cdx:label" cdx:temp_Text="[[0 3 97 6 3]]H2NCONH2{{149}}H2O2" cdx:LineHeight="1" cdx:LabelAlignment="Left" cdx:p="241.6999 73.4749" cdx:BoundingBox="241.6999 68.4799 290.4249 74.9749" cdx:LabelLineHeight="1" cdx:LabelJustification="Left" id="x0" cdx:fontIndex="3" cdx:typeFace="97" cdx:size="6" cdx:color="3" value="H2NCONH2{{149}}H2O2"/>
+      <atomArray>
+        <atom id="a107" elementType="N" hydrogenCount="2" cdx:Z="59" cdx:p="261.6174 60.8905" cdx:AS="U" cdx:Element="7" cdx:NumHydrogens="2" x2="261.6174" y2="-60.8905">
+          <label dictRef="cdx:label" cdx:temp_Text="[[0 3 96 8 3]]NH2" cdx:LabelAlignment="Left" cdx:p="258.7424 64.0405" cdx:BoundingBox="258.7424 57.7405 273.6799 65.7405" cdx:LabelJustification="Left" id="x0" cdx:fontIndex="3" cdx:typeFace="96" cdx:size="8" cdx:color="3" value="NH2"/>
+        </atom>
+        <atom id="a108" elementType="C" cdx:Z="60" cdx:p="255.5424 71.4127" cdx:AS="U" hydrogenCount="0" x2="255.5424" y2="-71.4127"/>
+        <atom id="a109" elementType="O" hydrogenCount="0" cdx:Z="61" cdx:p="261.6174 81.9349" cdx:AS="U" cdx:Element="8" cdx:NumHydrogens="0" x2="261.6174" y2="-81.9349"/>
+        <atom id="a110" elementType="N" hydrogenCount="2" cdx:Z="62" cdx:p="243.3924 71.4127" cdx:AS="U" cdx:Element="7" cdx:NumHydrogens="2" x2="243.3924" y2="-71.4127">
+          <label dictRef="cdx:label" cdx:temp_Text="[[0 3 96 8 3]]NH2" cdx:Justification="Right" cdx:LabelAlignment="Right" cdx:p="246.2674 74.5627" cdx:BoundingBox="231.3299 68.2627 246.2674 76.2627" cdx:LabelJustification="Right" id="x0" cdx:fontIndex="3" cdx:typeFace="96" cdx:size="8" cdx:color="3" value="NH2"/>
+        </atom>
+        <atom id="a111" elementType="O" hydrogenCount="2" cdx:Z="63" cdx:p="231.2424 71" cdx:AS="U" cdx:Element="8" cdx:NumHydrogens="2" x2="231.2424" y2="-71.0">
+          <label dictRef="cdx:label" cdx:temp_Text="[[0 3 96 8 3]]OH2" cdx:Justification="Right" cdx:LabelAlignment="Right" cdx:p="234.3674 74.1499" cdx:BoundingBox="219.0299 67.8499 234.3674 75.8499" cdx:LabelJustification="Right" id="x0" cdx:fontIndex="3" cdx:typeFace="96" cdx:size="8" cdx:color="3" value="OH2"/>
+        </atom>
+        <atom id="a112" elementType="O" hydrogenCount="2" cdx:Z="64" cdx:p="231.2424 83.1499" cdx:AS="U" cdx:Element="8" cdx:NumHydrogens="2" x2="231.2424" y2="-83.1499">
+          <label dictRef="cdx:label" cdx:temp_Text="[[0 3 96 8 3]]OH2" cdx:Justification="Right" cdx:LabelAlignment="Right" cdx:p="234.3674 86.2999" cdx:BoundingBox="219.0299 79.9999 234.3674 87.9999" cdx:LabelJustification="Right" id="x0" cdx:fontIndex="3" cdx:typeFace="96" cdx:size="8" cdx:color="3" value="OH2"/>
+        </atom>
+        <atom id="a107_h1" elementType="H" x2="270.7298962518501" y2="-60.890503245993514"/>
+        <atom id="a107_h2" elementType="H" x2="257.0611546851878" y2="-52.99884513101057"/>
+        <atom id="a110_h1" elementType="H" x2="238.83615187407466" y2="-63.521046754006825"/>
+        <atom id="a110_h2" elementType="H" x2="238.83615187407466" y2="-79.30435324599317"/>
+        <atom id="a111_h1" elementType="H" x2="231.2424" y2="-80.11249625185069"/>
+        <atom id="a111_h2" elementType="H" x2="231.2424" y2="-61.887503748149314"/>
+        <atom id="a112_h1" elementType="H" x2="231.2424" y2="-92.26239625185069"/>
+        <atom id="a112_h2" elementType="H" x2="231.2424" y2="-74.03740374814932"/>
+      </atomArray>
+      <bondArray>
+        <bond atomRefs2="a107 a108" id="a107_a108" order="1" cdx:Z="65" cdx:B="107" cdx:E="108" cdx:BS="U"/>
+        <bond atomRefs2="a108 a109" id="a108_a109" order="2" cdx:Z="66" cdx:Order="2" cdx:B="108" cdx:E="109" cdx:BS="U"/>
+        <bond atomRefs2="a108 a110" id="a108_a110" order="1" cdx:Z="67" cdx:B="108" cdx:E="110" cdx:BS="U"/>
+        <bond atomRefs2="a107 a107_h1" id="a107_a107_h1" order="S"/>
+        <bond atomRefs2="a107 a107_h2" id="a107_a107_h2" order="S"/>
+        <bond atomRefs2="a110 a110_h1" id="a110_a110_h1" order="S"/>
+        <bond atomRefs2="a110 a110_h2" id="a110_a110_h2" order="S"/>
+        <bond atomRefs2="a111 a111_h1" id="a111_a111_h1" order="S"/>
+        <bond atomRefs2="a111 a111_h2" id="a111_a111_h2" order="S"/>
+        <bond atomRefs2="a112 a112_h1" id="a112_a112_h1" order="S"/>
+        <bond atomRefs2="a112 a112_h2" id="a112_a112_h2" order="S"/>
+      </bondArray>
+    </molecule>
+    <molecule role="cdx:fragment" cdx:BoundingBox="222.6909 66.9409 290.7242 101.9881" id="x156">
+      <label dictRef="cdx:label" cdx:temp_Text="[[0 3 97 6 3]](CF3CO)2O" cdx:LineHeight="1" cdx:LabelAlignment="Left" cdx:p="244.8999 65.9749" cdx:BoundingBox="244.8999 60.9799 276.7374 67.4749" cdx:LabelLineHeight="1" cdx:LabelJustification="Left" id="x0" cdx:fontIndex="3" cdx:typeFace="97" cdx:size="6" cdx:color="3" value="(CF3CO)2O"/>
+      <atomArray>
+        <atom id="a117" elementType="C" cdx:Z="71" cdx:p="277.8645 88.3159" cdx:AS="U" hydrogenCount="0" x2="277.8645" y2="-88.3159"/>
+        <atom id="a118" elementType="F" hydrogenCount="0" cdx:Z="72" cdx:p="271.7895 98.8381" cdx:AS="U" cdx:Element="9" cdx:NumHydrogens="0" x2="271.7895" y2="-98.8381"/>
+        <atom id="a119" elementType="F" hydrogenCount="0" cdx:Z="73" cdx:p="283.9395 77.7937" cdx:AS="U" cdx:Element="9" cdx:NumHydrogens="0" x2="283.9395" y2="-77.7937"/>
+        <atom id="a120" elementType="F" hydrogenCount="0" cdx:Z="74" cdx:p="288.3867 94.3909" cdx:AS="U" cdx:Element="9" cdx:NumHydrogens="0" x2="288.3867" y2="-94.3909"/>
+        <atom id="a121" elementType="C" cdx:Z="75" cdx:p="267.3423 82.2409" cdx:AS="U" hydrogenCount="0" x2="267.3423" y2="-82.2409"/>
+        <atom id="a122" elementType="O" hydrogenCount="0" cdx:Z="76" cdx:p="267.3423 70.0909" cdx:AS="U" cdx:Element="8" cdx:NumHydrogens="0" x2="267.3423" y2="-70.0909"/>
+        <atom id="a123" elementType="C" cdx:Z="77" cdx:p="235.7756 88.3159" cdx:AS="U" hydrogenCount="0" x2="235.7756" y2="-88.3159"/>
+        <atom id="a124" elementType="F" hydrogenCount="0" cdx:Z="78" cdx:p="241.8506 98.8381" cdx:AS="U" cdx:Element="9" cdx:NumHydrogens="0" x2="241.8506" y2="-98.8381"/>
+        <atom id="a125" elementType="F" hydrogenCount="0" cdx:Z="79" cdx:p="225.2534 94.3909" cdx:AS="U" cdx:Element="9" cdx:NumHydrogens="0" x2="225.2534" y2="-94.3909"/>
+        <atom id="a126" elementType="F" hydrogenCount="0" cdx:Z="80" cdx:p="229.7006 77.7937" cdx:AS="U" cdx:Element="9" cdx:NumHydrogens="0" x2="229.7006" y2="-77.7937"/>
+        <atom id="a127" elementType="C" cdx:Z="81" cdx:p="246.2978 82.2409" cdx:AS="U" hydrogenCount="0" x2="246.2978" y2="-82.2409"/>
+        <atom id="a128" elementType="O" hydrogenCount="0" cdx:Z="82" cdx:p="246.2978 70.0909" cdx:AS="U" cdx:Element="8" cdx:NumHydrogens="0" x2="246.2978" y2="-70.0909"/>
+        <atom id="a129" elementType="O" hydrogenCount="0" cdx:Z="83" cdx:p="256.8201 88.3159" cdx:AS="U" cdx:Element="8" cdx:NumHydrogens="0" x2="256.8201" y2="-88.3159"/>
+      </atomArray>
+      <bondArray>
+        <bond atomRefs2="a117 a118" id="a117_a118" order="1" cdx:Z="84" cdx:B="117" cdx:E="118" cdx:BS="U"/>
+        <bond atomRefs2="a117 a119" id="a117_a119" order="1" cdx:Z="85" cdx:B="117" cdx:E="119" cdx:BS="U"/>
+        <bond atomRefs2="a117 a120" id="a117_a120" order="1" cdx:Z="86" cdx:B="117" cdx:E="120" cdx:BS="U"/>
+        <bond atomRefs2="a117 a121" id="a117_a121" order="1" cdx:Z="87" cdx:B="117" cdx:E="121" cdx:BS="U"/>
+        <bond atomRefs2="a121 a122" id="a121_a122" order="2" cdx:Z="88" cdx:Order="2" cdx:B="121" cdx:E="122" cdx:BS="U"/>
+        <bond atomRefs2="a121 a129" id="a121_a129" order="1" cdx:Z="89" cdx:B="121" cdx:E="129" cdx:BS="U"/>
+        <bond atomRefs2="a123 a124" id="a123_a124" order="1" cdx:Z="90" cdx:B="123" cdx:E="124" cdx:BS="U"/>
+        <bond atomRefs2="a123 a125" id="a123_a125" order="1" cdx:Z="91" cdx:B="123" cdx:E="125" cdx:BS="U"/>
+        <bond atomRefs2="a123 a126" id="a123_a126" order="1" cdx:Z="92" cdx:B="123" cdx:E="126" cdx:BS="U"/>
+        <bond atomRefs2="a123 a127" id="a123_a127" order="1" cdx:Z="93" cdx:B="123" cdx:E="127" cdx:BS="U"/>
+        <bond atomRefs2="a127 a128" id="a127_a128" order="2" cdx:Z="94" cdx:Order="2" cdx:B="127" cdx:E="128" cdx:BS="U"/>
+        <bond atomRefs2="a127 a129" id="a127_a129" order="1" cdx:Z="95" cdx:B="127" cdx:E="129" cdx:BS="U"/>
+      </bondArray>
+    </molecule>
+    <molecule role="cdx:fragment" cdx:BoundingBox="224.9048 63.2159 270.3742 90.6604" id="x156">
+      <label dictRef="cdx:label" cdx:temp_Text="[[0 3 97 6 3]]Na2HPO4" cdx:LineHeight="1" cdx:LabelAlignment="Left" cdx:p="248.6999 80.4749" cdx:BoundingBox="248.6999 75.4799 275.1374 81.9749" cdx:Warning="An atom in this label has an invalid valence." cdx:LabelLineHeight="1" cdx:LabelJustification="Left" id="x0" cdx:fontIndex="3" cdx:typeFace="97" cdx:size="6" cdx:color="3" value="Na2HPO4"/>
+      <atomArray>
+        <atom id="a143" elementType="Na" hydrogenCount="0" cdx:Z="99" cdx:p="259.5964 70.8131" cdx:AS="U" cdx:Element="11" cdx:NumHydrogens="0" x2="259.5964" y2="-70.8131"/>
+        <atom id="a144" elementType="Na" hydrogenCount="0" cdx:Z="100" cdx:p="242.9992 66.3659" cdx:AS="U" cdx:Element="11" cdx:NumHydrogens="0" x2="242.9992" y2="-66.3659"/>
+        <atom id="a145" elementType="P" hydrogenCount="1" cdx:Z="101" cdx:p="249.0742 76.8881" cdx:AS="U" cdx:Element="15" cdx:NumHydrogens="1" x2="249.0742" y2="-76.8881">
+          <label dictRef="cdx:label" cdx:temp_Text="[[0 3 96 8 3]]PH" cdx:Justification="Center" cdx:LabelAlignment="Center" cdx:p="249.0742 80.0381" cdx:BoundingBox="243.4992 73.7381 254.6492 80.0381" cdx:LabelJustification="Center" id="x0" cdx:fontIndex="3" cdx:typeFace="96" cdx:size="8" cdx:color="3" value="PH"/>
+        </atom>
+        <atom id="a146" elementType="O" hydrogenCount="0" cdx:Z="102" cdx:p="255.1492 87.4104" cdx:AS="U" cdx:Element="8" cdx:NumHydrogens="0" x2="255.1492" y2="-87.4104"/>
+        <atom id="a147" elementType="O" hydrogenCount="0" cdx:Z="103" cdx:p="238.552 82.9631" cdx:AS="U" cdx:Element="8" cdx:NumHydrogens="0" x2="238.552" y2="-82.9631"/>
+        <atom id="a148" elementType="O" hydrogenCount="0" cdx:Z="104" cdx:p="267.2993 87.4104" cdx:AS="U" cdx:Element="8" cdx:NumHydrogens="0" x2="267.2993" y2="-87.4104"/>
+        <atom id="a149" elementType="O" hydrogenCount="0" cdx:Z="105" cdx:p="228.0298 76.8881" cdx:AS="U" cdx:Element="8" cdx:NumHydrogens="0" x2="228.0298" y2="-76.8881"/>
+        <atom id="a145_h1" elementType="H"/>
+      </atomArray>
+      <bondArray>
+        <bond atomRefs2="a143 a145" id="a143_a145" order="1" cdx:Z="106" cdx:B="143" cdx:E="145" cdx:BS="U"/>
+        <bond atomRefs2="a144 a145" id="a144_a145" order="1" cdx:Z="107" cdx:B="144" cdx:E="145" cdx:BS="U"/>
+        <bond atomRefs2="a145 a146" id="a145_a146" order="1" cdx:Z="108" cdx:B="145" cdx:E="146" cdx:BS="U"/>
+        <bond atomRefs2="a145 a147" id="a145_a147" order="1" cdx:Z="109" cdx:B="145" cdx:E="147" cdx:BS="U"/>
+        <bond atomRefs2="a146 a148" id="a146_a148" order="1" cdx:Z="110" cdx:B="146" cdx:E="148" cdx:BS="U"/>
+        <bond atomRefs2="a147 a149" id="a147_a149" order="1" cdx:Z="111" cdx:B="147" cdx:E="149" cdx:BS="U"/>
+        <bond atomRefs2="a145 a145_h1" id="a145_a145_h1" order="S"/>
+      </bondArray>
+    </molecule>
+    <molecule cdx:BoundingBox="138.9999 67.0011 214.1269 91.6999" id="x156">
+      <atomArray>
+        <atom id="a18" elementType="C" cdx:Z="121" cdx:p="140.1129 88.4499" cdx:AS="N" hydrogenCount="3" x2="140.1129" y2="-88.4499"/>
+        <atom id="a20" elementType="C" cdx:Z="122" cdx:p="150.6777 82.3503" cdx:AS="N" hydrogenCount="1" x2="150.6777" y2="-82.3503"/>
+        <atom id="a22" elementType="C" cdx:Z="124" cdx:p="161.2426 88.4499" cdx:AS="N" hydrogenCount="1" x2="161.2426" y2="-88.4499"/>
+        <atom id="a24" elementType="C" cdx:Z="126" cdx:p="171.8074 82.3503" cdx:AS="N" hydrogenCount="1" x2="171.8074" y2="-82.3503"/>
+        <atom id="a26" elementType="C" cdx:Z="128" cdx:p="182.3722 88.4499" cdx:AS="N" hydrogenCount="1" x2="182.3722" y2="-88.4499"/>
+        <atom id="a28" elementType="C" cdx:Z="130" cdx:p="192.9371 82.3503" cdx:AS="U" hydrogenCount="0" x2="192.9371" y2="-82.3503"/>
+        <atom id="a30" elementType="O" hydrogenCount="0" cdx:Z="132" cdx:p="192.9371 70.1511" cdx:AS="N" cdx:Element="8" cdx:NumHydrogens="0" x2="192.9371" y2="-70.1511"/>
+        <atom id="a73" elementType="O" hydrogenCount="0" cdx:Z="114" cdx:p="203.4629 82.3503" cdx:AS="U" cdx:Element="8" cdx:NumHydrogens="0" x2="200.30516" y2="-82.3503">
+          <label dictRef="cdx:label" cdx:temp_Text="[[0 3 96 8 3]]OEt" cdx:LabelAlignment="Left" cdx:p="200.3769 91.5999" cdx:BoundingBox="200.3769 85.2999 214.1269 91.6999" cdx:LabelJustification="Left" id="x0" cdx:fontIndex="3" cdx:typeFace="96" cdx:size="8" cdx:color="3" value="OEt"/>
+        </atom>
+        <atom id="a74" elementType="C" cdx:Z="115" cdx:p="224.5073 82.3503" cdx:AS="U" hydrogenCount="3" x2="206.61847999999998" y2="-82.3503"/>
+        <atom id="a75" elementType="C" cdx:Z="116" cdx:p="213.9851 88.4253" cdx:AS="U" hydrogenCount="2" x2="203.46182" y2="-84.1728"/>
+        <atom id="a18_h1" elementType="H" x2="133.77263282283252" y2="-92.1104608884078"/>
+        <atom id="a18_h2" elementType="H" x2="143.77346088840778" y2="-94.79016717716748"/>
+        <atom id="a18_h3" elementType="H" x2="136.4523391115922" y2="-82.10963282283252"/>
+        <atom id="a20_h1" elementType="H" x2="150.67768499680574" y2="-75.02918711360199"/>
+        <atom id="a22_h1" elementType="H" x2="161.24261500319426" y2="-95.77101288639801"/>
+        <atom id="a24_h1" elementType="H" x2="171.8074" y2="-75.02918711358663"/>
+        <atom id="a26_h1" elementType="H" x2="182.37218499680574" y2="-95.77101288639801"/>
+        <atom id="a74_h1" elementType="H" x2="212.95874843966783" y2="-78.68974129830434"/>
+        <atom id="a74_h2" elementType="H" x2="202.9579212983043" y2="-76.01003156033215"/>
+        <atom id="a74_h3" elementType="H" x2="210.27903870169564" y2="-88.69056843966786"/>
+        <atom id="a75_h1" elementType="H" x2="207.12237870169565" y2="-90.51306843966785"/>
+        <atom id="a75_h2" elementType="H" x2="199.80126129830433" y2="-90.51306843966785"/>
+      </atomArray>
+      <bondArray>
+        <bond atomRefs2="a18 a20" id="a18_a20" order="1" cdx:Z="123" cdx:B="18" cdx:E="20" cdx:BS="N"/>
+        <bond atomRefs2="a20 a22" id="a20_a22" order="2" cdx:Z="125" cdx:Order="2" cdx:DoublePosition="Right" cdx:B="20" cdx:E="22" cdx:BS="U" cdx:BondCircularOrdering="0 21 0 25"/>
+        <bond atomRefs2="a22 a24" id="a22_a24" order="1" cdx:Z="127" cdx:B="22" cdx:E="24" cdx:BS="N"/>
+        <bond atomRefs2="a24 a26" id="a24_a26" order="2" cdx:Z="129" cdx:Order="2" cdx:DoublePosition="Right" cdx:B="24" cdx:E="26" cdx:BS="U" cdx:BondCircularOrdering="0 25 0 29"/>
+        <bond atomRefs2="a26 a28" id="a26_a28" order="1" cdx:Z="131" cdx:B="26" cdx:E="28" cdx:BS="N"/>
+        <bond atomRefs2="a28 a30" id="a28_a30" order="2" cdx:Z="133" cdx:Order="2" cdx:B="28" cdx:E="30" cdx:BS="U"/>
+        <bond atomRefs2="a73 a75" id="a73_a75" order="1" cdx:Z="119" cdx:B="73" cdx:E="75" cdx:BS="U"/>
+        <bond atomRefs2="a74 a75" id="a74_a75" order="1" cdx:Z="120" cdx:B="74" cdx:E="75" cdx:BS="U"/>
+        <bond atomRefs2="a28 a73" order="S" id="a28_a73"/>
+        <bond atomRefs2="a18 a18_h1" id="a18_a18_h1" order="S"/>
+        <bond atomRefs2="a18 a18_h2" id="a18_a18_h2" order="S"/>
+        <bond atomRefs2="a18 a18_h3" id="a18_a18_h3" order="S"/>
+        <bond atomRefs2="a20 a20_h1" id="a20_a20_h1" order="S"/>
+        <bond atomRefs2="a22 a22_h1" id="a22_a22_h1" order="S"/>
+        <bond atomRefs2="a24 a24_h1" id="a24_a24_h1" order="S"/>
+        <bond atomRefs2="a26 a26_h1" id="a26_a26_h1" order="S"/>
+        <bond atomRefs2="a74 a74_h1" id="a74_a74_h1" order="S"/>
+        <bond atomRefs2="a74 a74_h2" id="a74_a74_h2" order="S"/>
+        <bond atomRefs2="a74 a74_h3" id="a74_a74_h3" order="S"/>
+        <bond atomRefs2="a75 a75_h1" id="a75_a75_h1" order="S"/>
+        <bond atomRefs2="a75 a75_h2" id="a75_a75_h2" order="S"/>
+      </bondArray>
+      <label dictRef="cdx:label" cdx:temp_Text="[[0 3 1 9 3]]171" cdx:LineHeight="1" cdx:LabelAlignment="Left" cdx:p="167.6457 103.5999" cdx:BoundingBox="167.6457 96.5499 182.6457 105.5999" cdx:Warning="ChemDraw can't interpret this label." cdx:LabelLineHeight="1" cdx:LabelJustification="Left" id="x0" cdx:fontIndex="3" cdx:typeFace="1" cdx:size="9" cdx:color="3" value="171" cdx:ydelta="-4.849999999999994"/>
+    </molecule>
+    <molecule cdx:BoundingBox="318.4999 68.0011 393.6269 92.6999" id="x156">
+      <atomArray>
+        <atom id="a38" elementType="C" cdx:Z="145" cdx:p="319.6129 89.4499" cdx:AS="N" hydrogenCount="3" x2="319.6129" y2="-89.4499"/>
+        <atom id="a39" elementType="C" cdx:Z="146" cdx:p="330.1777 83.3503" cdx:AS="U" hydrogenCount="1" x2="330.1777" y2="-83.3503"/>
+        <atom id="a40" elementType="C" cdx:Z="148" cdx:p="340.7426 89.4499" cdx:AS="U" hydrogenCount="1" x2="340.7426" y2="-89.4499"/>
+        <atom id="a41" elementType="C" cdx:Z="150" cdx:p="351.3074 83.3503" cdx:AS="N" hydrogenCount="1" x2="351.3074" y2="-83.3503"/>
+        <atom id="a42" elementType="C" cdx:Z="152" cdx:p="361.8722 89.4499" cdx:AS="N" hydrogenCount="1" x2="361.8722" y2="-89.4499"/>
+        <atom id="a43" elementType="C" cdx:Z="154" cdx:p="372.4371 83.3503" cdx:AS="U" hydrogenCount="0" x2="372.4371" y2="-83.3503"/>
+        <atom id="a44" elementType="O" hydrogenCount="0" cdx:Z="156" cdx:p="372.4371 71.1511" cdx:AS="N" cdx:Element="8" cdx:NumHydrogens="0" x2="372.4371" y2="-71.1511"/>
+        <atom id="a61" elementType="O" hydrogenCount="0" cdx:Z="160" cdx:p="340.7426 77.2507" cdx:AS="N" cdx:Element="8" cdx:NumHydrogens="0" x2="340.7426" y2="-77.2507"/>
+        <atom id="a47" elementType="O" hydrogenCount="0" cdx:Z="138" cdx:p="382.9629 83.3503" cdx:AS="U" cdx:Element="8" cdx:NumHydrogens="0" x2="379.80516" y2="-83.3503">
+          <label dictRef="cdx:label" cdx:temp_Text="[[0 3 96 8 3]]OEt" cdx:LabelAlignment="Left" cdx:p="379.8769 92.5999" cdx:BoundingBox="379.8769 86.2999 393.6269 92.6999" cdx:LabelJustification="Left" id="x0" cdx:fontIndex="3" cdx:typeFace="96" cdx:size="8" cdx:color="3" value="OEt"/>
+        </atom>
+        <atom id="a48" elementType="C" cdx:Z="139" cdx:p="404.0073 83.3503" cdx:AS="U" hydrogenCount="3" x2="386.11848" y2="-83.3503"/>
+        <atom id="a49" elementType="C" cdx:Z="140" cdx:p="393.4851 89.4253" cdx:AS="U" hydrogenCount="2" x2="382.96182" y2="-85.17280000000001"/>
+        <atom id="a38_h1" elementType="H" x2="312.9847481394035" y2="-93.27667145699817"/>
+        <atom id="a38_h2" elementType="H" x2="323.4396714569982" y2="-96.07805186059649"/>
+        <atom id="a38_h3" elementType="H" x2="315.78612854300184" y2="-82.82174813940351"/>
+        <atom id="a39_h1" elementType="H" x2="322.7823050006604" y2="-79.08064062111009"/>
+        <atom id="a40_h1" elementType="H" x2="340.74263500020595" y2="-97.98939025188709"/>
+        <atom id="a41_h1" elementType="H" x2="351.3074" y2="-75.69676638008139"/>
+        <atom id="a42_h1" elementType="H" x2="361.87218431557426" y2="-97.10343361990255"/>
+        <atom id="a48_h1" elementType="H" x2="392.7466331804216" y2="-79.52353082900328"/>
+        <atom id="a48_h2" elementType="H" x2="382.29171082900325" y2="-76.72214681957836"/>
+        <atom id="a48_h3" elementType="H" x2="389.9452491709967" y2="-89.97845318042165"/>
+        <atom id="a49_h1" elementType="H" x2="386.7885891709967" y2="-91.80095318042166"/>
+        <atom id="a49_h2" elementType="H" x2="379.13505082900326" y2="-91.80095318042166"/>
+      </atomArray>
+      <bondArray>
+        <bond atomRefs2="a38 a39" id="a38_a39" order="1" cdx:Z="147" cdx:B="38" cdx:E="39" cdx:BS="N"/>
+        <bond atomRefs2="a39 a40" id="a39_a40" order="1" cdx:Z="149" cdx:B="39" cdx:E="40" cdx:BS="N"/>
+        <bond atomRefs2="a40 a41" id="a40_a41" order="1" cdx:Z="151" cdx:B="40" cdx:E="41" cdx:BS="N"/>
+        <bond atomRefs2="a41 a42" id="a41_a42" order="2" cdx:Z="153" cdx:Order="2" cdx:DoublePosition="Right" cdx:B="41" cdx:E="42" cdx:BS="U" cdx:BondCircularOrdering="0 56 0 58"/>
+        <bond atomRefs2="a42 a43" id="a42_a43" order="1" cdx:Z="155" cdx:B="42" cdx:E="43" cdx:BS="N"/>
+        <bond atomRefs2="a43 a44" id="a43_a44" order="2" cdx:Z="157" cdx:Order="2" cdx:B="43" cdx:E="44" cdx:BS="U"/>
+        <bond atomRefs2="a39 a61" id="a39_a61" order="1" cdx:Z="161" cdx:B="39" cdx:E="61" cdx:BS="N"/>
+        <bond atomRefs2="a40 a61" id="a40_a61" order="1" cdx:Z="162" cdx:B="40" cdx:E="61" cdx:BS="N"/>
+        <bond atomRefs2="a47 a49" id="a47_a49" order="1" cdx:Z="143" cdx:B="47" cdx:E="49" cdx:BS="U"/>
+        <bond atomRefs2="a48 a49" id="a48_a49" order="1" cdx:Z="144" cdx:B="48" cdx:E="49" cdx:BS="U"/>
+        <bond atomRefs2="a43 a47" order="S" id="a43_a47"/>
+        <bond atomRefs2="a38 a38_h1" id="a38_a38_h1" order="S"/>
+        <bond atomRefs2="a38 a38_h2" id="a38_a38_h2" order="S"/>
+        <bond atomRefs2="a38 a38_h3" id="a38_a38_h3" order="S"/>
+        <bond atomRefs2="a39 a39_h1" id="a39_a39_h1" order="S"/>
+        <bond atomRefs2="a40 a40_h1" id="a40_a40_h1" order="S"/>
+        <bond atomRefs2="a41 a41_h1" id="a41_a41_h1" order="S"/>
+        <bond atomRefs2="a42 a42_h1" id="a42_a42_h1" order="S"/>
+        <bond atomRefs2="a48 a48_h1" id="a48_a48_h1" order="S"/>
+        <bond atomRefs2="a48 a48_h2" id="a48_a48_h2" order="S"/>
+        <bond atomRefs2="a48 a48_h3" id="a48_a48_h3" order="S"/>
+        <bond atomRefs2="a49 a49_h1" id="a49_a49_h1" order="S"/>
+        <bond atomRefs2="a49 a49_h2" id="a49_a49_h2" order="S"/>
+      </bondArray>
+      <label dictRef="cdx:label" cdx:temp_Text="[[0 3 1 9 3]]172" cdx:LineHeight="1" cdx:LabelAlignment="Left" cdx:p="351.2457 104.9499" cdx:BoundingBox="351.2457 97.8999 366.2457 106.9499" cdx:Warning="ChemDraw can't interpret this label." cdx:LabelLineHeight="1" cdx:LabelJustification="Left" id="x0" cdx:fontIndex="3" cdx:typeFace="1" cdx:size="9" cdx:color="3" value="172" cdx:ydelta="-5.200000000000003"/>
+    </molecule>
+  </moleculeList>
+  <reaction cdx:ReactionStepReactants="19 99 102 97" cdx:ReactionStepProducts="90 37 69" cdx:ReactionStepArrows="34" id="x162"/>
+</cml>

File src/test/resources/examples/cdx/r19.ref.cdxml

+<?xml version="1.0" encoding="UTF-8"?>
+<cdxList id="null">
+  <CDXML CreationProgram="ChemDraw 7.0.1" Name="Microsoft Word - C:\Chemistry\_PHD\MyThesis\PHD_Thesis_JHarter2002_v22_5.doc" Magnification="666" WindowPosition="24.9749 51.4484" WindowSize="549.4499 370.1294" PrintMargins="28.3464 28.3464 28.3464 28.3464" ShowAtomQuery="true" ShowAtomStereo="false" ShowAtomNumber="false" ShowBondQuery="true" ShowBondStereo="false" LabelLineHeight="0" CaptionLineHeight="1" ChainAngle="7864320" BondLength="12.1992" BoldWidth="1.8141" LineWidth="0.8503" MarginWidth="1.25" HashSpacing="1.75" CaptionJustification="Left" LabelJustification="Auto" BondSpacing="200" BoundingBox="138.9999 60.9799 393.6269 106.9499" LabelFont="3" LabelFace="96" LabelSize="8" LabelColor="3" CaptionFont="3" CaptionFace="1" CaptionSize="6" CaptionColor="3" id="0">
+    <page BoundingBox="0 0 538.507 785.107" WidthPages="1" HeightPages="1" HeaderPosition="35.9999" FooterPosition="35.9999" id="156">
+      <fragment BoundingBox="138.9999 67.0011 214.1269 91.6999" id="19">
+        <n Z="121" p="140.1129 88.4499" AS="N" id="18"/>
+        <n Z="122" p="150.6777 82.3503" AS="N" id="20"/>
+        <b Z="123" B="18" E="20" BS="N" id="21"/>
+        <n Z="124" p="161.2426 88.4499" AS="N" id="22"/>
+        <b Z="125" Order="2" DoublePosition="Right" B="20" E="22" BS="U" BondCircularOrdering="0 21 0 25" id="23"/>
+        <n Z="126" p="171.8074 82.3503" AS="N" id="24"/>
+        <b Z="127" B="22" E="24" BS="N" id="25"/>
+        <n Z="128" p="182.3722 88.4499" AS="N" id="26"/>
+        <b Z="129" Order="2" DoublePosition="Right" B="24" E="26" BS="U" BondCircularOrdering="0 25 0 29" id="27"/>
+        <n Z="130" p="192.9371 82.3503" AS="U" id="28"/>
+        <b Z="131" B="26" E="28" BS="N" id="29"/>
+        <n Z="132" p="192.9371 70.1511" AS="N" Element="8" NumHydrogens="0" id="30">
+          <t temp_Text="[[0 3 96 8 3]]O" p="189.8121 73.3011" BoundingBox="189.8121 67.0011 196.0121 73.4011" LabelJustification="Left" id="0"/>
+        </n>
+        <b Z="133" Order="2" B="28" E="30" BS="U" id="31"/>
+        <n Z="134" p="203.5019 88.4499" NodeType="Fragment" AS="N" id="32">
+          <t temp_Text="[[0 3 96 8 3]]OEt" LabelAlignment="Left" p="200.3769 91.5999" BoundingBox="200.3769 85.2999 214.1269 91.6999" LabelJustification="Left" id="0"/>
+          <fragment BoundingBox="21.7626 -207.9003 225.6203 89.8167" id="157">
+            <n Z="114" p="203.4629 82.3503" AS="U" Element="8" NumHydrogens="0" id="73">
+              <t temp_Text="[[0 3 96 8 3]]O" p="200.3379 85.5003" BoundingBox="200.3379 79.2003 206.5379 85.6003" LabelJustification="Left" id="0"/>
+            </n>
+            <n Z="115" p="224.5073 82.3503" AS="U" id="74"/>
+            <n Z="116" p="213.9851 88.4253" AS="U" id="75"/>
+            <n Z="117" p="25.6129 -204.0499" NodeType="ExternalConnectionPoint" AS="U" id="79"/>
+            <b Z="118" B="79" E="73" BS="U" id="76"/>
+            <b Z="119" B="73" E="75" BS="U" id="77"/>
+            <b Z="120" B="74" E="75" BS="U" id="78"/>
+          </fragment>
+        </n>
+        <b Z="135" B="28" E="32" BS="N" id="33"/>
+      </fragment>
+      <fragment BoundingBox="318.4999 68.0011 393.6269 92.6999" id="37">
+        <n Z="145" p="319.6129 89.4499" AS="N" id="38"/>
+        <n Z="146" p="330.1777 83.3503" AS="U" id="39"/>
+        <b Z="147" B="38" E="39" BS="N" id="54"/>
+        <n Z="148" p="340.7426 89.4499" AS="U" id="40"/>
+        <b Z="149" B="39" E="40" BS="N" id="55"/>
+        <n Z="150" p="351.3074 83.3503" AS="N" id="41"/>
+        <b Z="151" B="40" E="41" BS="N" id="56"/>
+        <n Z="152" p="361.8722 89.4499" AS="N" id="42"/>
+        <b Z="153" Order="2" DoublePosition="Right" B="41" E="42" BS="U" BondCircularOrdering="0 56 0 58" id="57"/>
+        <n Z="154" p="372.4371 83.3503" AS="U" id="43"/>
+        <b Z="155" B="42" E="43" BS="N" id="58"/>
+        <n Z="156" p="372.4371 71.1511" AS="N" Element="8" NumHydrogens="0" id="44">
+          <t temp_Text="[[0 3 96 8 3]]O" p="369.3121 74.3011" BoundingBox="369.3121 68.0011 375.5121 74.4011" LabelJustification="Left" id="0"/>
+        </n>
+        <b Z="157" Order="2" B="43" E="44" BS="U" id="59"/>
+        <n Z="158" p="383.0019 89.4499" NodeType="Fragment" AS="N" id="45">
+          <t temp_Text="[[0 3 96 8 3]]OEt" LabelAlignment="Left" p="379.8769 92.5999" BoundingBox="379.8769 86.2999 393.6269 92.6999" LabelJustification="Left" id="0"/>
+          <fragment BoundingBox="201.2625 -206.9003 405.1203 90.8167" id="158">
+            <n Z="138" p="382.9629 83.3503" AS="U" Element="8" NumHydrogens="0" id="47">
+              <t temp_Text="[[0 3 96 8 3]]O" p="379.8379 86.5003" BoundingBox="379.8379 80.2003 386.0379 86.6003" LabelJustification="Left" id="0"/>
+            </n>
+            <n Z="139" p="404.0073 83.3503" AS="U" id="48"/>
+            <n Z="140" p="393.4851 89.4253" AS="U" id="49"/>
+            <n Z="141" p="205.1129 -203.0499" NodeType="ExternalConnectionPoint" AS="U" id="50"/>
+            <b Z="142" B="50" E="47" BS="U" id="51"/>
+            <b Z="143" B="47" E="49" BS="U" id="52"/>
+            <b Z="144" B="48" E="49" BS="U" id="53"/>
+          </fragment>
+        </n>
+        <b Z="159" B="43" E="45" BS="N" id="60"/>
+        <n Z="160" p="340.7426 77.2507" AS="N" Element="8" NumHydrogens="0" id="61">
+          <t temp_Text="[[0 3 96 8 3]]O" p="337.6176 80.4007" BoundingBox="337.6176 74.1007 343.8176 80.5007" LabelJustification="Left" id="0"/>
+        </n>
+        <b Z="161" B="39" E="61" BS="N" id="62"/>
+        <b Z="162" B="40" E="61" BS="N" id="66"/>
+      </fragment>
+      <fragment BoundingBox="351.2457 97.8999 366.2457 106.9499" id="69">
+        <n Z="163" p="353.3551 101.4249" NodeType="Unspecified" AS="N" id="68">
+          <t temp_Text="[[0 3 1 9 3]]172" LineHeight="1" LabelAlignment="Left" p="351.2457 104.9499" BoundingBox="351.2457 97.8999 366.2457 106.9499" Warning="ChemDraw can't interpret this label." LabelLineHeight="1" LabelJustification="Left" id="0"/>
+        </n>
+      </fragment>
+      <fragment BoundingBox="167.6457 96.5499 182.6457 105.5999" id="90">
+        <n Z="164" p="169.7551 100.0749" NodeType="Unspecified" AS="N" id="91">
+          <t temp_Text="[[0 3 1 9 3]]171" LineHeight="1" LabelAlignment="Left" p="167.6457 103.5999" BoundingBox="167.6457 96.5499 182.6457 105.5999" Warning="ChemDraw can't interpret this label." LabelLineHeight="1" LabelJustification="Left" id="0"/>
+        </n>
+      </fragment>
+      <fragment BoundingBox="241.6999 68.4799 290.4249 74.9749" id="97">
+        <n Z="165" p="244 71" NodeType="Fragment" AS="N" id="96">
+          <t temp_Text="[[0 3 97 6 3]]H2NCONH2{{149}}H2O2" LineHeight="1" LabelAlignment="Left" p="241.6999 73.4749" BoundingBox="241.6999 68.4799 290.4249 74.9749" LabelLineHeight="1" LabelJustification="Left" id="0"/>
+          <fragment BoundingBox="219.0299 57.7405 273.6799 87.9999" id="159">
+            <n Z="59" p="261.6174 60.8905" AS="U" Element="7" NumHydrogens="2" id="107">
+              <t temp_Text="[[0 3 96 8 3]]NH2" LabelAlignment="Left" p="258.7424 64.0405" BoundingBox="258.7424 57.7405 273.6799 65.7405" LabelJustification="Left" id="0"/>
+            </n>
+            <n Z="60" p="255.5424 71.4127" AS="U" id="108"/>
+            <n Z="61" p="261.6174 81.9349" AS="U" Element="8" NumHydrogens="0" id="109">
+              <t temp_Text="[[0 3 96 8 3]]O" Justification="Auto" p="258.4924 85.0849" BoundingBox="258.4924 78.7849 264.6924 85.1849" id="0"/>
+            </n>
+            <n Z="62" p="243.3924 71.4127" AS="U" Element="7" NumHydrogens="2" id="110">
+              <t temp_Text="[[0 3 96 8 3]]NH2" Justification="Right" LabelAlignment="Right" p="246.2674 74.5627" BoundingBox="231.3299 68.2627 246.2674 76.2627" LabelJustification="Right" id="0"/>
+            </n>
+            <n Z="63" p="231.2424 71" AS="U" Element="8" NumHydrogens="2" id="111">
+              <t temp_Text="[[0 3 96 8 3]]OH2" Justification="Right" LabelAlignment="Right" p="234.3674 74.1499" BoundingBox="219.0299 67.8499 234.3674 75.8499" LabelJustification="Right" id="0"/>
+            </n>
+            <n Z="64" p="231.2424 83.1499" AS="U" Element="8" NumHydrogens="2" id="112">
+              <t temp_Text="[[0 3 96 8 3]]OH2" Justification="Right" LabelAlignment="Right" p="234.3674 86.2999" BoundingBox="219.0299 79.9999 234.3674 87.9999" LabelJustification="Right" id="0"/>
+            </n>
+            <b Z="65" B="107" E="108" BS="U" id="113"/>
+            <b Z="66" Order="2" B="108" E="109" BS="U" id="114"/>
+            <b Z="67" B="108" E="110" BS="U" id="115"/>
+          </fragment>
+        </n>
+      </fragment>
+      <fragment BoundingBox="244.8999 60.9799 276.7374 67.4749" id="99">
+        <n Z="166" p="246 63.5" NodeType="Fragment" AS="N" id="98">
+          <t temp_Text="[[0 3 97 6 3]](CF3CO)2O" LineHeight="1" LabelAlignment="Left" p="244.8999 65.9749" BoundingBox="244.8999 60.9799 276.7374 67.4749" LabelLineHeight="1" LabelJustification="Left" id="0"/>
+          <fragment BoundingBox="222.6909 66.9409 290.7242 101.9881" id="160">
+            <n Z="71" p="277.8645 88.3159" AS="U" id="117"/>
+            <n Z="72" p="271.7895 98.8381" AS="U" Element="9" NumHydrogens="0" id="118">
+              <t temp_Text="[[0 3 96 8 3]]F" p="269.227 101.9881" BoundingBox="269.227 95.6881 274.127 101.9881" LabelJustification="Left" id="0"/>
+            </n>
+            <n Z="73" p="283.9395 77.7937" AS="U" Element="9" NumHydrogens="0" id="119">
+              <t temp_Text="[[0 3 96 8 3]]F" p="281.377 80.9437" BoundingBox="281.377 74.6437 286.277 80.9437" LabelJustification="Left" id="0"/>
+            </n>
+            <n Z="74" p="288.3867 94.3909" AS="U" Element="9" NumHydrogens="0" id="120">
+              <t temp_Text="[[0 3 96 8 3]]F" p="285.8242 97.5409" BoundingBox="285.8242 91.2409 290.7242 97.5409" LabelJustification="Left" id="0"/>
+            </n>
+            <n Z="75" p="267.3423 82.2409" AS="U" id="121"/>
+            <n Z="76" p="267.3423 70.0909" AS="U" Element="8" NumHydrogens="0" id="122">
+              <t temp_Text="[[0 3 96 8 3]]O" Justification="Auto" p="264.2173 73.2409" BoundingBox="264.2173 66.9409 270.4173 73.3409" id="0"/>
+            </n>
+            <n Z="77" p="235.7756 88.3159" AS="U" id="123"/>
+            <n Z="78" p="241.8506 98.8381" AS="U" Element="9" NumHydrogens="0" id="124">
+              <t temp_Text="[[0 3 96 8 3]]F" Justification="Auto" p="239.2881 101.9881" BoundingBox="239.2881 95.6881 244.1881 101.9881" id="0"/>
+            </n>
+            <n Z="79" p="225.2534 94.3909" AS="U" Element="9" NumHydrogens="0" id="125">
+              <t temp_Text="[[0 3 96 8 3]]F" Justification="Auto" p="222.6909 97.5409" BoundingBox="222.6909 91.2409 227.5909 97.5409" id="0"/>
+            </n>
+            <n Z="80" p="229.7006 77.7937" AS="U" Element="9" NumHydrogens="0" id="126">
+              <t temp_Text="[[0 3 96 8 3]]F" Justification="Auto" p="227.1381 80.9437" BoundingBox="227.1381 74.6437 232.0381 80.9437" id="0"/>
+            </n>
+            <n Z="81" p="246.2978 82.2409" AS="U" id="127"/>
+            <n Z="82" p="246.2978 70.0909" AS="U" Element="8" NumHydrogens="0" id="128">
+              <t temp_Text="[[0 3 96 8 3]]O" Justification="Auto" p="243.1728 73.2409" BoundingBox="243.1728 66.9409 249.3728 73.3409" id="0"/>
+            </n>
+            <n Z="83" p="256.8201 88.3159" AS="U" Element="8" NumHydrogens="0" id="129">
+              <t temp_Text="[[0 3 96 8 3]]O" Justification="Auto" p="253.6951 91.4659" BoundingBox="253.6951 85.1659 259.8951 91.5659" id="0"/>
+            </n>
+            <b Z="84" B="117" E="118" BS="U" id="130"/>
+            <b Z="85" B="117" E="119" BS="U" id="131"/>
+            <b Z="86" B="117" E="120" BS="U" id="132"/>
+            <b Z="87" B="117" E="121" BS="U" id="133"/>
+            <b Z="88" Order="2" B="121" E="122" BS="U" id="134"/>
+            <b Z="89" B="121" E="129" BS="U" id="135"/>
+            <b Z="90" B="123" E="124" BS="U" id="136"/>
+            <b Z="91" B="123" E="125" BS="U" id="137"/>
+            <b Z="92" B="123" E="126" BS="U" id="138"/>
+            <b Z="93" B="123" E="127" BS="U" id="139"/>
+            <b Z="94" Order="2" B="127" E="128" BS="U" id="140"/>
+            <b Z="95" B="127" E="129" BS="U" id="141"/>
+          </fragment>
+        </n>
+      </fragment>
+      <fragment BoundingBox="248.6999 75.4799 275.1374 81.9749" id="102">
+        <n Z="167" p="251 78" NodeType="Fragment" AS="N" id="101">
+          <t temp_Text="[[0 3 97 6 3]]Na2HPO4" LineHeight="1" LabelAlignment="Left" p="248.6999 80.4749" BoundingBox="248.6999 75.4799 275.1374 81.9749" Warning="An atom in this label has an invalid valence." LabelLineHeight="1" LabelJustification="Left" id="0"/>
+          <fragment BoundingBox="224.9048 63.2159 270.3742 90.6604" id="161">
+            <n Z="99" p="259.5964 70.8131" AS="U" Element="11" NumHydrogens="0" id="143">
+              <t temp_Text="[[0 3 96 8 3]]Na" LabelAlignment="Left" p="256.7214 73.9631" BoundingBox="256.7214 67.6631 266.9714 74.0631" LabelJustification="Left" id="0"/>
+            </n>
+            <n Z="100" p="242.9992 66.3659" AS="U" Element="11" NumHydrogens="0" id="144">
+              <t temp_Text="[[0 3 96 8 3]]Na" Justification="Right" LabelAlignment="Right" p="245.2492 69.5159" BoundingBox="234.9992 63.2159 245.2492 69.6159" LabelJustification="Right" id="0"/>
+            </n>
+            <n Z="101" p="249.0742 76.8881" AS="U" Element="15" NumHydrogens="1" id="145">
+              <t temp_Text="[[0 3 96 8 3]]PH" Justification="Center" LabelAlignment="Center" p="249.0742 80.0381" BoundingBox="243.4992 73.7381 254.6492 80.0381" LabelJustification="Center" id="0"/>
+            </n>
+            <n Z="102" p="255.1492 87.4104" AS="U" Element="8" NumHydrogens="0" id="146">
+              <t temp_Text="[[0 3 96 8 3]]O" Justification="Auto" p="252.0242 90.5603" BoundingBox="252.0242 84.2603 258.2242 90.6604" id="0"/>
+            </n>
+            <n Z="103" p="238.552 82.9631" AS="U" Element="8" NumHydrogens="0" id="147">
+              <t temp_Text="[[0 3 96 8 3]]O" Justification="Auto" p="235.427 86.1131" BoundingBox="235.427 79.8131 241.627 86.2131" id="0"/>
+            </n>
+            <n Z="104" p="267.2993 87.4104" AS="U" Element="8" NumHydrogens="0" id="148">
+              <t temp_Text="[[0 3 96 8 3]]O" Justification="Auto" p="264.1743 90.5603" BoundingBox="264.1743 84.2603 270.3742 90.6604" id="0"/>
+            </n>
+            <n Z="105" p="228.0298 76.8881" AS="U" Element="8" NumHydrogens="0" id="149">
+              <t temp_Text="[[0 3 96 8 3]]O" Justification="Auto" p="224.9048 80.0381" BoundingBox="224.9048 73.7381 231.1048 80.1381" id="0"/>
+            </n>
+            <b Z="106" B="143" E="145" BS="U" id="150"/>
+            <b Z="107" B="144" E="145" BS="U" id="151"/>
+            <b Z="108" B="145" E="146" BS="U" id="152"/>
+            <b Z="109" B="145" E="147" BS="U" id="153"/>
+            <b Z="110" B="146" E="148" BS="U" id="154"/>
+            <b Z="111" B="147" E="149" BS="U" id="155"/>
+          </fragment>
+        </n>
+      </fragment>
+      <graphic Z="136" GraphicType="Line" LineType="Solid" ArrowType="FullHead" HeadSize="1000" BoundingBox="304.1129 83.4499 228.6129 83.4499" id="34"/>
+      <t Z="137" temp_Text="[[0 3 1 6 3]]DCM, 0{{176}}C, 0.5h" LineHeight="1" p="238.1129 90.9499" BoundingBox="238.1129 85.9549 283.3629 92.4499" Warning="ChemDraw can't interpret this label." id="36"/>
+      <step ReactionStepReactants="19 99 102 97" ReactionStepProducts="90 37 69" ReactionStepArrows="34" id="162"/>
+    </page>
+    <colortable>
+      <color r="1" g="1" b="1"/>
+      <color r="0" g="0" b="0"/>
+      <color r="1" g="0" b="0"/>
+      <color r="1" g="1" b="0"/>
+      <color r="0" g="1" b="0"/>
+      <color r="0" g="1" b="1"/>
+      <color r="0" g="0" b="1"/>
+      <color r="1" g="0" b="1"/>
+    </colortable>
+    <fonttable>
+      <font id="3" charset="1252" name="Arial"/>
+    </fonttable>
+  </CDXML>
+</cdxList>

File src/test/resources/examples/cdx/r19.ref.cml

+<?xml version="1.0" encoding="UTF-8"?>
+<cml xmlns="http://www.xml-cml.org/schema" xmlns:cdx="http://www.xml-cml/namespaces/cdx">
+  <array dataType="xsd:double" size="4" GraphicType="Line" LineType="Solid" ArrowType="FullHead" HeadSize="1000" BoundingBox="304.1129 83.4499 228.6129 83.4499" id="x34" type="Arrow" dictRef="cdxml:arrowType">304.1129 83.4499 228.6129 83.4499</array>
+  <label dictRef="cdx:label" cdx:Z="137" cdx:temp_Text="[[0 3 1 6 3]]DCM, 0{{176}}C, 0.5h" cdx:LineHeight="1" cdx:p="238.1129 90.9499" cdx:BoundingBox="238.1129 85.9549 283.3629 92.4499" cdx:Warning="ChemDraw can't interpret this label." id="x36" cdx:fontIndex="3" cdx:typeFace="1" cdx:size="6" cdx:color="3" value="DCM, 0{{176}}C, 0.5h"/>
+  <moleculeList>
+    <molecule role="cdx:fragment" cdx:BoundingBox="219.0299 57.7405 273.6799 87.9999" id="x156">
+      <label dictRef="cdx:label" cdx:temp_Text="[[0 3 97 6 3]]H2NCONH2{{149}}H2O2" cdx:LineHeight="1" cdx:LabelAlignment="Left" cdx:p="241.6999 73.4749" cdx:BoundingBox="241.6999 68.4799 290.4249 74.9749" cdx:LabelLineHeight="1" cdx:LabelJustification="Left" id="x0" cdx:fontIndex="3" cdx:typeFace="97" cdx:size="6" cdx:color="3" value="H2NCONH2{{149}}H2O2"/>
+      <atomArray>
+        <atom id="a107" elementType="N" hydrogenCount="2" cdx:Z="59" cdx:p="261.6174 60.8905" cdx:AS="U" cdx:Element="7" cdx:NumHydrogens="2" x2="261.6174" y2="-60.8905">
+          <label dictRef="cdx:label" cdx:temp_Text="[[0 3 96 8 3]]NH2" cdx:LabelAlignment="Left" cdx:p="258.7424 64.0405" cdx:BoundingBox="258.7424 57.7405 273.6799 65.7405" cdx:LabelJustification="Left" id="x0" cdx:fontIndex="3" cdx:typeFace="96" cdx:size="8" cdx:color="3" value="NH2"/>
+        </atom>
+        <atom id="a108" elementType="C" cdx:Z="60" cdx:p="255.5424 71.4127" cdx:AS="U" hydrogenCount="0" x2="255.5424" y2="-71.4127"/>
+        <atom id="a109" elementType="O" hydrogenCount="0" cdx:Z="61" cdx:p="261.6174 81.9349" cdx:AS="U" cdx:Element="8" cdx:NumHydrogens="0" x2="261.6174" y2="-81.9349"/>
+        <atom id="a110" elementType="N" hydrogenCount="2" cdx:Z="62" cdx:p="243.3924 71.4127" cdx:AS="U" cdx:Element="7" cdx:NumHydrogens="2" x2="243.3924" y2="-71.4127">
+          <label dictRef="cdx:label" cdx:temp_Text="[[0 3 96 8 3]]NH2" cdx:Justification="Right" cdx:LabelAlignment="Right" cdx:p="246.2674 74.5627" cdx:BoundingBox="231.3299 68.2627 246.2674 76.2627" cdx:LabelJustification="Right" id="x0" cdx:fontIndex="3" cdx:typeFace="96" cdx:size="8" cdx:color="3" value="NH2"/>
+        </atom>
+        <atom id="a111" elementType="O" hydrogenCount="2" cdx:Z="63" cdx:p="231.2424 71" cdx:AS="U" cdx:Element="8" cdx:NumHydrogens="2" x2="231.2424" y2="-71.0">
+          <label dictRef="cdx:label" cdx:temp_Text="[[0 3 96 8 3]]OH2" cdx:Justification="Right" cdx:LabelAlignment="Right" cdx:p="234.3674 74.1499" cdx:BoundingBox="219.0299 67.8499 234.3674 75.8499" cdx:LabelJustification="Right" id="x0" cdx:fontIndex="3" cdx:typeFace="96" cdx:size="8" cdx:color="3" value="OH2"/>
+        </atom>
+        <atom id="a112" elementType="O" hydrogenCount="2" cdx:Z="64" cdx:p="231.2424 83.1499" cdx:AS="U" cdx:Element="8" cdx:NumHydrogens="2" x2="231.2424" y2="-83.1499">
+          <label dictRef="cdx:label" cdx:temp_Text="[[0 3 96 8 3]]OH2" cdx:Justification="Right" cdx:LabelAlignment="Right" cdx:p="234.3674 86.2999" cdx:BoundingBox="219.0299 79.9999 234.3674 87.9999" cdx:LabelJustification="Right" id="x0" cdx:fontIndex="3" cdx:typeFace="96" cdx:size="8" cdx:color="3" value="OH2"/>
+        </atom>
+        <atom id="a107_h1" elementType="H" x2="270.7298962518501" y2="-60.890503245993514"/>
+        <atom id="a107_h2" elementType="H" x2="257.0611546851878" y2="-52.99884513101057"/>
+        <atom id="a110_h1" elementType="H" x2="238.83615187407466" y2="-63.521046754006825"/>
+        <atom id="a110_h2" elementType="H" x2="238.83615187407466" y2="-79.30435324599317"/>
+        <atom id="a111_h1" elementType="H" x2="231.2424" y2="-80.11249625185069"/>
+        <atom id="a111_h2" elementType="H" x2="231.2424" y2="-61.887503748149314"/>
+        <atom id="a112_h1" elementType="H" x2="231.2424" y2="-92.26239625185069"/>
+        <atom id="a112_h2" elementType="H" x2="231.2424" y2="-74.03740374814932"/>
+      </atomArray>
+      <bondArray>
+        <bond atomRefs2="a107 a108" id="a107_a108" order="1" cdx:Z="65" cdx:B="107" cdx:E="108" cdx:BS="U"/>
+        <bond atomRefs2="a108 a109" id="a108_a109" order="2" cdx:Z="66" cdx:Order="2" cdx:B="108" cdx:E="109" cdx:BS="U"/>
+        <bond atomRefs2="a108 a110" id="a108_a110" order="1" cdx:Z="67" cdx:B="108" cdx:E="110" cdx:BS="U"/>
+        <bond atomRefs2="a107 a107_h1" id="a107_a107_h1" order="S"/>
+        <bond atomRefs2="a107 a107_h2" id="a107_a107_h2" order="S"/>
+        <bond atomRefs2="a110 a110_h1" id="a110_a110_h1" order="S"/>
+        <bond atomRefs2="a110 a110_h2" id="a110_a110_h2" order="S"/>
+        <bond atomRefs2="a111 a111_h1" id="a111_a111_h1" order="S"/>
+        <bond atomRefs2="a111 a111_h2" id="a111_a111_h2" order="S"/>
+        <bond atomRefs2="a112 a112_h1" id="a112_a112_h1" order="S"/>
+        <bond atomRefs2="a112 a112_h2" id="a112_a112_h2" order="S"/>
+      </bondArray>
+    </molecule>
+    <molecule role="cdx:fragment" cdx:BoundingBox="222.6909 66.9409 290.7242 101.9881" id="x156">
+      <label dictRef="cdx:label" cdx:temp_Text="[[0 3 97 6 3]](CF3CO)2O" cdx:LineHeight="1" cdx:LabelAlignment="Left" cdx:p="244.8999 65.9749" cdx:BoundingBox="244.8999 60.9799 276.7374 67.4749" cdx:LabelLineHeight="1" cdx:LabelJustification="Left" id="x0" cdx:fontIndex="3" cdx:typeFace="97" cdx:size="6" cdx:color="3" value="(CF3CO)2O"/>
+      <atomArray>
+        <atom id="a117" elementType="C" cdx:Z="71" cdx:p="277.8645 88.3159" cdx:AS="U" hydrogenCount="0" x2="277.8645" y2="-88.3159"/>
+        <atom id="a118" elementType="F" hydrogenCount="0" cdx:Z="72" cdx:p="271.7895 98.8381" cdx:AS="U" cdx:Element="9" cdx:NumHydrogens="0" x2="271.7895" y2="-98.8381"/>
+        <atom id="a119" elementType="F" hydrogenCount="0" cdx:Z="73" cdx:p="283.9395 77.7937" cdx:AS="U" cdx:Element="9" cdx:NumHydrogens="0" x2="283.9395" y2="-77.7937"/>
+        <atom id="a120" elementType="F" hydrogenCount="0" cdx:Z="74" cdx:p="288.3867 94.3909" cdx:AS="U" cdx:Element="9" cdx:NumHydrogens="0" x2="288.3867" y2="-94.3909"/>
+        <atom id="a121" elementType="C" cdx:Z="75" cdx:p="267.3423 82.2409" cdx:AS="U" hydrogenCount="0" x2="267.3423" y2="-82.2409"/>
+        <atom id="a122" elementType="O" hydrogenCount="0" cdx:Z="76" cdx:p="267.3423 70.0909" cdx:AS="U" cdx:Element="8" cdx:NumHydrogens="0" x2="267.3423" y2="-70.0909"/>
+        <atom id="a123" elementType="C" cdx:Z="77" cdx:p="235.7756 88.3159" cdx:AS="U" hydrogenCount="0" x2="235.7756" y2="-88.3159"/>
+        <atom id="a124" elementType="F" hydrogenCount="0" cdx:Z="78" cdx:p="241.8506 98.8381" cdx:AS="U" cdx:Element="9" cdx:NumHydrogens="0" x2="241.8506" y2="-98.8381"/>
+        <atom id="a125" elementType="F" hydrogenCount="0" cdx:Z="79" cdx:p="225.2534 94.3909" cdx:AS="U" cdx:Element="9" cdx:NumHydrogens="0" x2="225.2534" y2="-94.3909"/>
+        <atom id="a126" elementType="F" hydrogenCount="0" cdx:Z="80" cdx:p="229.7006 77.7937" cdx:AS="U" cdx:Element="9" cdx:NumHydrogens="0" x2="229.7006" y2="-77.7937"/>
+        <atom id="a127" elementType="C" cdx:Z="81" cdx:p="246.2978 82.2409" cdx:AS="U" hydrogenCount="0" x2="246.2978" y2="-82.2409"/>
+        <atom id="a128" elementType="O" hydrogenCount="0" cdx:Z="82" cdx:p="246.2978 70.0909" cdx:AS="U" cdx:Element="8" cdx:NumHydrogens="0" x2="246.2978" y2="-70.0909"/>
+        <atom id="a129" elementType="O" hydrogenCount="0" cdx:Z="83" cdx:p="256.8201 88.3159" cdx:AS="U" cdx:Element="8" cdx:NumHydrogens="0" x2="256.8201" y2="-88.3159"/>
+      </atomArray>
+      <bondArray>
+        <bond atomRefs2="a117 a118" id="a117_a118" order="1" cdx:Z="84" cdx:B="117" cdx:E="118" cdx:BS="U"/>
+        <bond atomRefs2="a117 a119" id="a117_a119" order="1" cdx:Z="85" cdx:B="117" cdx:E="119" cdx:BS="U"/>
+        <bond atomRefs2="a117 a120" id="a117_a120" order="1" cdx:Z="86" cdx:B="117" cdx:E="120" cdx:BS="U"/>
+        <bond atomRefs2="a117 a121" id="a117_a121" order="1" cdx:Z="87" cdx:B="117" cdx:E="121" cdx:BS="U"/>
+        <bond atomRefs2="a121 a122" id="a121_a122" order="2" cdx:Z="88" cdx:Order="2" cdx:B="121" cdx:E="122" cdx:BS="U"/>
+        <bond atomRefs2="a121 a129" id="a121_a129" order="1" cdx:Z="89" cdx:B="121" cdx:E="129" cdx:BS="U"/>
+        <bond atomRefs2="a123 a124" id="a123_a124" order="1" cdx:Z="90" cdx:B="123" cdx:E="124" cdx:BS="U"/>
+        <bond atomRefs2="a123 a125" id="a123_a125" order="1" cdx:Z="91" cdx:B="123" cdx:E="125" cdx:BS="U"/>
+        <bond atomRefs2="a123 a126" id="a123_a126" order="1" cdx:Z="92" cdx:B="123" cdx:E="126" cdx:BS="U"/>
+        <bond atomRefs2="a123 a127" id="a123_a127" order="1" cdx:Z="93" cdx:B="123" cdx:E="127" cdx:BS="U"/>
+        <bond atomRefs2="a127 a128" id="a127_a128" order="2" cdx:Z="94" cdx:Order="2" cdx:B="127" cdx:E="128" cdx:BS="U"/>
+        <bond atomRefs2="a127 a129" id="a127_a129" order="1" cdx:Z="95" cdx:B="127" cdx:E="129" cdx:BS="U"/>
+      </bondArray>
+    </molecule>
+    <molecule role="cdx:fragment" cdx:BoundingBox="224.9048 63.2159 270.3742 90.6604" id="x156">
+      <label dictRef="cdx:label" cdx:temp_Text="[[0 3 97 6 3]]Na2HPO4" cdx:LineHeight="1" cdx:LabelAlignment="Left" cdx:p="248.6999 80.4749" cdx:BoundingBox="248.6999 75.4799 275.1374 81.9749" cdx:Warning="An atom in this label has an invalid valence." cdx:LabelLineHeight="1" cdx:LabelJustification="Left" id="x0" cdx:fontIndex="3" cdx:typeFace="97" cdx:size="6" cdx:color="3" value="Na2HPO4"/>
+      <atomArray>
+        <atom id="a143" elementType="Na" hydrogenCount="0" cdx:Z="99" cdx:p="259.5964 70.8131" cdx:AS="U" cdx:Element="11" cdx:NumHydrogens="0" x2="259.5964" y2="-70.8131"/>
+        <atom id="a144" elementType="Na" hydrogenCount="0" cdx:Z="100" cdx:p="242.9992 66.3659" cdx:AS="U" cdx:Element="11" cdx:NumHydrogens="0" x2="242.9992" y2="-66.3659"/>
+        <atom id="a145" elementType="P" hydrogenCount="1" cdx:Z="101" cdx:p="249.0742 76.8881" cdx:AS="U" cdx:Element="15" cdx:NumHydrogens="1" x2="249.0742" y2="-76.8881">
+          <label dictRef="cdx:label" cdx:temp_Text="[[0 3 96 8 3]]PH" cdx:Justification="Center" cdx:LabelAlignment="Center" cdx:p="249.0742 80.0381" cdx:BoundingBox="243.4992 73.7381 254.6492 80.0381" cdx:LabelJustification="Center" id="x0" cdx:fontIndex="3" cdx:typeFace="96" cdx:size="8" cdx:color="3" value="PH"/>
+        </atom>
+        <atom id="a146" elementType="O" hydrogenCount="0" cdx:Z="102" cdx:p="255.1492 87.4104" cdx:AS="U" cdx:Element="8" cdx:NumHydrogens="0" x2="255.1492" y2="-87.4104"/>
+        <atom id="a147" elementType="O" hydrogenCount="0" cdx:Z="103" cdx:p="238.552 82.9631" cdx:AS="U" cdx:Element="8" cdx:NumHydrogens="0" x2="238.552" y2="-82.9631"/>
+        <atom id="a148" elementType="O" hydrogenCount="0" cdx:Z="104" cdx:p="267.2993 87.4104" cdx:AS="U" cdx:Element="8" cdx:NumHydrogens="0" x2="267.2993" y2="-87.4104"/>
+        <atom id="a149" elementType="O" hydrogenCount="0" cdx:Z="105" cdx:p="228.0298 76.8881" cdx:AS="U" cdx:Element="8" cdx:NumHydrogens="0" x2="228.0298" y2="-76.8881"/>
+        <atom id="a145_h1" elementType="H"/>
+      </atomArray>
+      <bondArray>
+        <bond atomRefs2="a143 a145" id="a143_a145" order="1" cdx:Z="106" cdx:B="143" cdx:E="145" cdx:BS="U"/>
+        <bond atomRefs2="a144 a145" id="a144_a145" order="1" cdx:Z="107" cdx:B="144" cdx:E="145" cdx:BS="U"/>
+        <bond atomRefs2="a145 a146" id="a145_a146" order="1" cdx:Z="108" cdx:B="145" cdx:E="146" cdx:BS="U"/>
+        <bond atomRefs2="a145 a147" id="a145_a147" order="1" cdx:Z="109" cdx:B="145" cdx:E="147" cdx:BS="U"/>
+        <bond atomRefs2="a146 a148" id="a146_a148" order="1" cdx:Z="110" cdx:B="146" cdx:E="148" cdx:BS="U"/>
+        <bond atomRefs2="a147 a149" id="a147_a149" order="1" cdx:Z="111" cdx:B="147" cdx:E="149" cdx:BS="U"/>
+        <bond atomRefs2="a145 a145_h1" id="a145_a145_h1" order="S"/>
+      </bondArray>
+    </molecule>
+    <molecule cdx:BoundingBox="138.9999 67.0011 214.1269 91.6999" id="x156">
+      <atomArray>
+        <atom id="a18" elementType="C" cdx:Z="121" cdx:p="140.1129 88.4499" cdx:AS="N" hydrogenCount="3" x2="140.1129" y2="-88.4499"/>
+        <atom id="a20" elementType="C" cdx:Z="122" cdx:p="150.6777 82.3503" cdx:AS="N" hydrogenCount="1" x2="150.6777" y2="-82.3503"/>
+        <atom id="a22" elementType="C" cdx:Z="124" cdx:p="161.2426 88.4499" cdx:AS="N" hydrogenCount="1" x2="161.2426" y2="-88.4499"/>
+        <atom id="a24" elementType="C" cdx:Z="126" cdx:p="171.8074 82.3503" cdx:AS="N" hydrogenCount="1" x2="171.8074" y2="-82.3503"/>
+        <atom id="a26" elementType="C" cdx:Z="128" cdx:p="182.3722 88.4499" cdx:AS="N" hydrogenCount="1" x2="182.3722" y2="-88.4499"/>
+        <atom id="a28" elementType="C" cdx:Z="130" cdx:p="192.9371 82.3503" cdx:AS="U" hydrogenCount="0" x2="192.9371" y2="-82.3503"/>
+        <atom id="a30" elementType="O" hydrogenCount="0" cdx:Z="132" cdx:p="192.9371 70.1511" cdx:AS="N" cdx:Element="8" cdx:NumHydrogens="0" x2="192.9371" y2="-70.1511"/>
+        <atom id="a73" elementType="O" hydrogenCount="0" cdx:Z="114" cdx:p="203.4629 82.3503" cdx:AS="U" cdx:Element="8" cdx:NumHydrogens="0" x2="200.30516" y2="-82.3503">
+          <label dictRef="cdx:label" cdx:temp_Text="[[0 3 96 8 3]]OEt" cdx:LabelAlignment="Left" cdx:p="200.3769 91.5999" cdx:BoundingBox="200.3769 85.2999 214.1269 91.6999" cdx:LabelJustification="Left" id="x0" cdx:fontIndex="3" cdx:typeFace="96" cdx:size="8" cdx:color="3" value="OEt"/>
+        </atom>
+        <atom id="a74" elementType="C" cdx:Z="115" cdx:p="224.5073 82.3503" cdx:AS="U" hydrogenCount="3" x2="206.61847999999998" y2="-82.3503"/>
+        <atom id="a75" elementType="C" cdx:Z="116" cdx:p="213.9851 88.4253" cdx:AS="U" hydrogenCount="2" x2="203.46182" y2="-84.1728"/>
+        <atom id="a18_h1" elementType="H" x2="133.77263282283252" y2="-92.1104608884078"/>
+        <atom id="a18_h2" elementType="H" x2="143.77346088840778" y2="-94.79016717716748"/>
+        <atom id="a18_h3" elementType="H" x2="136.4523391115922" y2="-82.10963282283252"/>
+        <atom id="a20_h1" elementType="H" x2="150.67768499680574" y2="-75.02918711360199"/>
+        <atom id="a22_h1" elementType="H" x2="161.24261500319426" y2="-95.77101288639801"/>
+        <atom id="a24_h1" elementType="H" x2="171.8074" y2="-75.02918711358663"/>
+        <atom id="a26_h1" elementType="H" x2="182.37218499680574" y2="-95.77101288639801"/>
+        <atom id="a74_h1" elementType="H" x2="212.95874843966783" y2="-78.68974129830434"/>
+        <atom id="a74_h2" elementType="H" x2="202.9579212983043" y2="-76.01003156033215"/>
+        <atom id="a74_h3" elementType="H" x2="210.27903870169564" y2="-88.69056843966786"/>
+        <atom id="a75_h1" elementType="H" x2="207.12237870169565" y2="-90.51306843966785"/>
+        <atom id="a75_h2" elementType="H" x2="199.80126129830433" y2="-90.51306843966785"/>
+      </atomArray>
+      <bondArray>
+        <bond atomRefs2="a18 a20" id="a18_a20" order="1" cdx:Z="123" cdx:B="18" cdx:E="20" cdx:BS="N"/>
+        <bond atomRefs2="a20 a22" id="a20_a22" order="2" cdx:Z="125" cdx:Order="2" cdx:DoublePosition="Right" cdx:B="20" cdx:E="22" cdx:BS="U" cdx:BondCircularOrdering="0 21 0 25"/>
+        <bond atomRefs2="a22 a24" id="a22_a24" order="1" cdx:Z="127" cdx:B="22" cdx:E="24" cdx:BS="N"/>
+        <bond atomRefs2="a24 a26" id="a24_a26" order="2" cdx:Z="129" cdx:Order="2" cdx:DoublePosition="Right" cdx:B="24" cdx:E="26" cdx:BS="U" cdx:BondCircularOrdering="0 25 0 29"/>
+        <bond atomRefs2="a26 a28" id="a26_a28" order="1" cdx:Z="131" cdx:B="26" cdx:E="28" cdx:BS="N"/>
+        <bond atomRefs2="a28 a30" id="a28_a30" order="2" cdx:Z="133" cdx:Order="2" cdx:B="28" cdx:E="30" cdx:BS="U"/>
+        <bond atomRefs2="a73 a75" id="a73_a75" order="1" cdx:Z="119" cdx:B="73" cdx:E="75" cdx:BS="U"/>
+        <bond atomRefs2="a74 a75" id="a74_a75" order="1" cdx:Z="120" cdx:B="74" cdx:E="75" cdx:BS="U"/>
+        <bond atomRefs2="a28 a73" order="S" id="a28_a73"/>
+        <bond atomRefs2="a18 a18_h1" id="a18_a18_h1" order="S"/>
+        <bond atomRefs2="a18 a18_h2" id="a18_a18_h2" order="S"/>
+        <bond atomRefs2="a18 a18_h3" id="a18_a18_h3" order="S"/>
+        <bond atomRefs2="a20 a20_h1" id="a20_a20_h1" order="S"/>
+        <bond atomRefs2="a22 a22_h1" id="a22_a22_h1" order="S"/>
+        <bond atomRefs2="a24 a24_h1" id="a24_a24_h1" order="S"/>
+        <bond atomRefs2="a26 a26_h1" id="a26_a26_h1" order="S"/>
+        <bond atomRefs2="a74 a74_h1" id="a74_a74_h1" order="S"/>
+        <bond atomRefs2="a74 a74_h2" id="a74_a74_h2" order="S"/>
+        <bond atomRefs2="a74 a74_h3" id="a74_a74_h3" order="S"/>
+        <bond atomRefs2="a75 a75_h1" id="a75_a75_h1" order="S"/>
+        <bond atomRefs2="a75 a75_h2" id="a75_a75_h2" order="S"/>
+      </bondArray>
+      <label dictRef="cdx:label" cdx:temp_Text="[[0 3 1 9 3]]171" cdx:LineHeight="1" cdx:LabelAlignment="Left" cdx:p="167.6457 103.5999" cdx:BoundingBox="167.6457 96.5499 182.6457 105.5999" cdx:Warning="ChemDraw can't interpret this label." cdx:LabelLineHeight="1" cdx:LabelJustification="Left" id="x0" cdx:fontIndex="3" cdx:typeFace="1" cdx:size="9" cdx:color="3" value="171" cdx:ydelta="-4.849999999999994"/>
+    </molecule>
+    <molecule cdx:BoundingBox="318.4999 68.0011 393.6269 92.6999" id="x156">
+      <atomArray>
+        <atom id="a38" elementType="C" cdx:Z="145" cdx:p="319.6129 89.4499" cdx:AS="N" hydrogenCount="3" x2="319.6129" y2="-89.4499"/>
+        <atom id="a39" elementType="C" cdx:Z="146" cdx:p="330.1777 83.3503" cdx:AS="U" hydrogenCount="1" x2="330.1777" y2="-83.3503"/>
+        <atom id="a40" elementType="C" cdx:Z="148" cdx:p="340.7426 89.4499" cdx:AS="U" hydrogenCount="1" x2="340.7426" y2="-89.4499"/>
+        <atom id="a41" elementType="C" cdx:Z="150" cdx:p="351.3074 83.3503" cdx:AS="N" hydrogenCount="1" x2="351.3074" y2="-83.3503"/>
+        <atom id="a42" elementType="C" cdx:Z="152" cdx:p="361.8722 89.4499" cdx:AS="N" hydrogenCount="1" x2="361.8722" y2="-89.4499"/>
+        <atom id="a43" elementType="C" cdx:Z="154" cdx:p="372.4371 83.3503" cdx:AS="U" hydrogenCount="0" x2="372.4371" y2="-83.3503"/>
+        <atom id="a44" elementType="O" hydrogenCount="0" cdx:Z="156" cdx:p="372.4371 71.1511" cdx:AS="N" cdx:Element="8" cdx:NumHydrogens="0" x2="372.4371" y2="-71.1511"/>
+        <atom id="a61" elementType="O" hydrogenCount="0" cdx:Z="160" cdx:p="340.7426 77.2507" cdx:AS="N" cdx:Element="8" cdx:NumHydrogens="0" x2="340.7426" y2="-77.2507"/>
+        <atom id="a47" elementType="O" hydrogenCount="0" cdx:Z="138" cdx:p="382.9629 83.3503" cdx:AS="U" cdx:Element="8" cdx:NumHydrogens="0" x2="379.80516" y2="-83.3503">
+          <label dictRef="cdx:label" cdx:temp_Text="[[0 3 96 8 3]]OEt" cdx:LabelAlignment="Left" cdx:p="379.8769 92.5999" cdx:BoundingBox="379.8769 86.2999 393.6269 92.6999" cdx:LabelJustification="Left" id="x0" cdx:fontIndex="3" cdx:typeFace="96" cdx:size="8" cdx:color="3" value="OEt"/>
+        </atom>
+        <atom id="a48" elementType="C" cdx:Z="139" cdx:p="404.0073 83.3503" cdx:AS="U" hydrogenCount="3" x2="386.11848" y2="-83.3503"/>
+        <atom id="a49" elementType="C" cdx:Z="140" cdx:p="393.4851 89.4253" cdx:AS="U" hydrogenCount="2" x2="382.96182" y2="-85.17280000000001"/>
+        <atom id="a38_h1" elementType="H" x2="312.9847481394035" y2="-93.27667145699817"/>
+        <atom id="a38_h2" elementType="H" x2="323.4396714569982" y2="-96.07805186059649"/>
+        <atom id="a38_h3" elementType="H" x2="315.78612854300184" y2="-82.82174813940351"/>
+        <atom id="a39_h1" elementType="H" x2="322.7823050006604" y2="-79.08064062111009"/>
+        <atom id="a40_h1" elementType="H" x2="340.74263500020595" y2="-97.98939025188709"/>
+        <atom id="a41_h1" elementType="H" x2="351.3074" y2="-75.69676638008139"/>
+        <atom id="a42_h1" elementType="H" x2="361.87218431557426" y2="-97.10343361990255"/>
+        <atom id="a48_h1" elementType="H" x2="392.7466331804216" y2="-79.52353082900328"/>
+        <atom id="a48_h2" elementType="H" x2="382.29171082900325" y2="-76.72214681957836"/>
+        <atom id="a48_h3" elementType="H" x2="389.9452491709967" y2="-89.97845318042165"/>
+        <atom id="a49_h1" elementType="H" x2="386.7885891709967" y2="-91.80095318042166"/>
+        <atom id="a49_h2" elementType="H" x2="379.13505082900326" y2="-91.80095318042166"/>
+      </atomArray>
+      <bondArray>
+        <bond atomRefs2="a38 a39" id="a38_a39" order="1" cdx:Z="147" cdx:B="38" cdx:E="39" cdx:BS="N"/>
+        <bond atomRefs2="a39 a40" id="a39_a40" order="1" cdx:Z="149" cdx:B="39" cdx:E="40" cdx:BS="N"/>
+        <bond atomRefs2="a40 a41" id="a40_a41" order="1" cdx:Z="151" cdx:B="40" cdx:E="41" cdx:BS="N"/>
+        <bond atomRefs2="a41 a42" id="a41_a42" order="2" cdx:Z="153" cdx:Order="2" cdx:DoublePosition="Right" cdx:B="41" cdx:E="42" cdx:BS="U" cdx:BondCircularOrdering="0 56 0 58"/>
+        <bond atomRefs2="a42 a43" id="a42_a43" order="1" cdx:Z="155" cdx:B="42" cdx:E="43" cdx:BS="N"/>
+        <bond atomRefs2="a43 a44" id="a43_a44" order="2" cdx:Z="157" cdx:Order="2" cdx:B="43" cdx:E="44" cdx:BS="U"/>
+        <bond atomRefs2="a39 a61" id="a39_a61" order="1" cdx:Z="161" cdx:B="39" cdx:E="61" cdx:BS="N"/>
+        <bond atomRefs2="a40 a61" id="a40_a61" order="1" cdx:Z="162" cdx:B="40" cdx:E="61" cdx:BS="N"/>
+        <bond atomRefs2="a47 a49" id="a47_a49" order="1" cdx:Z="143" cdx:B="47" cdx:E="49" cdx:BS="U"/>
+        <bond atomRefs2="a48 a49" id="a48_a49" order="1" cdx:Z="144" cdx:B="48" cdx:E="49" cdx:BS="U"/>
+        <bond atomRefs2="a43 a47" order="S" id="a43_a47"/>
+        <bond atomRefs2="a38 a38_h1" id="a38_a38_h1" order="S"/>
+        <bond atomRefs2="a38 a38_h2" id="a38_a38_h2" order="S"/>
+        <bond atomRefs2="a38 a38_h3" id="a38_a38_h3" order="S"/>
+        <bond atomRefs2="a39 a39_h1" id="a39_a39_h1" order="S"/>
+        <bond atomRefs2="a40 a40_h1" id="a40_a40_h1" order="S"/>
+        <bond atomRefs2="a41 a41_h1" id="a41_a41_h1" order="S"/>