Add Fuzzing, fixes #2857 (#3128)

* Add initial fuzz target

* Polish

Integrated the existing targets from @Google-Autofuzz.
Added a dictionary for smiles and a little corpora too.
Cleanup cmake.

* Fix Typo

* Remove debugging oversight

* Fail, when not building fuzzers statically

* Don't build fuzzers by default

* Add azure pipeline for fuzzing

* Format files; catch all exceptions

* Debugging pipeline

* Fix format of corpora files

* Add corpora for mol strings

* Add dictionary for mol strings

* Add README.md

* Remove very similar fuzz target

* Add mol pickle/deserialization fuzzer

* Improve fuzz readme

Co-authored-by: intrigus <abc123zeus@live.de>
This commit is contained in:
intrigus-lgtm
2020-05-08 17:16:43 +02:00
committed by GitHub
parent 24dc66fb02
commit 98c8ee0b46
133 changed files with 2426 additions and 0 deletions

View File

@@ -0,0 +1,56 @@
steps:
- bash: |
source ${CONDA}/etc/profile.d/conda.sh
sudo apt-get install -y clang-9
sudo chown -R ${USER} ${CONDA}
conda config --set always_yes yes --set changeps1 no
conda update -q conda
conda info -a
conda create --name rdkit_build cmake \
boost-cpp=$(boost_version) boost=$(boost_version) \
py-boost=$(boost_version) libboost=$(boost_version) \
cairo eigen
displayName: Setup build environment
- bash: |
source ${CONDA}/etc/profile.d/conda.sh
conda activate rdkit_build
export CC="clang-8"
export CXX="clang++-8"
export SANITIZER_FLAGS_address="-fsanitize=address -fsanitize-address-use-after-scope"
export COVERAGE_FLAGS="-fsanitize=fuzzer-no-link"
export CFLAGS="-O1 -fno-omit-frame-pointer -gline-tables-only -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION $COVERAGE_FLAGS $SANITIZER_FLAGS_address"
export CXXFLAGS="$CFLAGS"
export LIB_FUZZING_ENGINE="-fsanitize=fuzzer"
mkdir build && cd build && \
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DRDK_INSTALL_INTREE=ON \
-DRDK_BUILD_PYTHON_WRAPPERS=OFF \
-DLIB_FUZZING_ENGINE=${LIB_FUZZING_ENGINE} \
-DRDK_BUILD_FUZZ_TARGETS=ON \
-DRDK_INSTALL_STATIC_LIBS=ON \
-DBoost_USE_STATIC_LIBS=ON \
-DRDK_BUILD_CPP_TESTS=OFF \
-DBoost_NO_SYSTEM_PATHS=ON \
-DCMAKE_INCLUDE_PATH="${CONDA_PREFIX}/include" \
-DCMAKE_LIBRARY_PATH="${CONDA_PREFIX}/lib" \
-DCMAKE_PREFIX_PATH=$CONDA_PREFIX
displayName: Configure build (Run CMake)
- bash: |
source ${CONDA}/etc/profile.d/conda.sh
conda activate rdkit_build
cd build
make -j $( $(number_of_cores) ) install
displayName: Build
- bash: |
source ${CONDA}/etc/profile.d/conda.sh
conda activate rdkit_build
corpora=$(find . -type d -name "*_fuzzer")
for corpus in $corpora; do
corpus_basename=$(basename $corpus)
fuzzer_target=$(find . -type f -name "${corpus_basename}" -print -quit)
${fuzzer_target} ${corpus}/*
done
displayName: Run fuzzer on existing corpora

View File

@@ -58,6 +58,7 @@ option(RDK_INSTALL_DEV_COMPONENT "install libraries and headers" ON)
option(RDK_USE_BOOST_REGEX "use boost::regex instead of std::regex (needed for systems with g++-4.8)" OFF)
option(RDK_USE_BOOST_IOSTREAMS "use boost::iostreams" ON)
option(RDK_BUILD_MINIMAL_LIB "build the minimal RDKit wrapper (for the JS bindings)" OFF)
option(RDK_BUILD_FUZZ_TARGETS "build the fuzz targets" OFF)
set(RDK_BOOST_VERSION "1.58.0")

View File

@@ -37,3 +37,8 @@ endif(RDK_BUILD_PGSQL)
if(RDK_BUILD_MINIMAL_LIB)
add_subdirectory(MinimalLib)
endif(RDK_BUILD_MINIMAL_LIB)
if(RDK_BUILD_FUZZ_TARGETS)
add_subdirectory(Fuzz)
endif(RDK_BUILD_FUZZ_TARGETS)

31
Code/Fuzz/CMakeLists.txt Normal file
View File

@@ -0,0 +1,31 @@
if(NOT LIB_FUZZING_ENGINE)
message("LIB_FUZZING_ENGINE is not set, using standalone fuzz runner, no actual fuzzing will be done!")
add_library(standalone_fuzz_runner STATIC standalone_fuzz_target_runner.cpp)
set(LIB_FUZZING_ENGINE standalone_fuzz_runner)
endif()
if(NOT RDK_INSTALL_STATIC_LIBS OR NOT Boost_USE_STATIC_LIBS)
message(SEND_ERROR "Fuzzing requires static linking!")
message(FATAL_ERROR "Compile with -DRDK_INSTALL_STATIC_LIBS=ON and -DBoost_USE_STATIC_LIBS=ON")
endif()
include_directories ( "include" )
set(RDKit_LIBS
ChemReactions_static FileParsers_static SmilesParse_static Depictor_static
RDGeometryLib_static RDGeneral_static SubstructMatch_static Subgraphs_static
MolDraw2D_static GraphMol_static RingDecomposerLib_static DistGeometry_static
DistGeomHelpers_static MolAlign_static Optimizer_static ForceField_static
ForceFieldHelpers_static Alignment_static ForceField_static MolTransforms_static
EigenSolvers_static ForceFieldHelpers_static Alignment_static MolTransforms_static
EigenSolvers_static
)
macro(fuzzer name)
add_executable(${name} ${name}.cc)
target_link_libraries(${name} rdkit_base ${RDKit_LIBS} ${LIB_FUZZING_ENGINE})
endmacro()
fuzzer(smiles_string_to_mol_fuzzer)
fuzzer(mol_data_stream_to_mol_fuzzer)
fuzzer(mol_deserialization_fuzzer)

65
Code/Fuzz/README.md Normal file
View File

@@ -0,0 +1,65 @@
## Important Notice
The files in the corpora folders (i.e. the folders ending in `_fuzzer`) can not be directly used for purposes other than fuzzing.
This is because the fuzzer uses parts of the content for generating different information.
Consider the example `[OH3+]0`.
The first part `[OH3+]` will be used as a smiles formula, but the last part `0` will for example be used to determine
whether the fuzzer should set a certain flag to `true` or it will be used to derive an integral value.
## Compiling
To fuzz rdkit you need to have clang installed.
If you have built the fuzzers you can invoke them like this:
./smiles_string_to_mol_fuzzer -dict=smiles_string_to_mol_fuzzer.dict smiles_string_to_mol_fuzzer/
For possible options that you can pass to the fuzzer see the libFuzzer [docs](https://llvm.org/docs/LibFuzzer.html).
# Clang
````shell
export CC="clang"
export CXX="clang++"
export SANITIZER_FLAGS_address="-fsanitize=address -fsanitize-address-use-after-scope"
export COVERAGE_FLAGS="-fsanitize=fuzzer-no-link"
export CFLAGS="-O1 -fno-omit-frame-pointer -gline-tables-only -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION $COVERAGE_FLAGS $SANITIZER_FLAGS_address"
export CXXFLAGS="$CFLAGS"
export LIB_FUZZING_ENGINE="-fsanitize=fuzzer"
mkdir build && cd build && \
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DRDK_INSTALL_INTREE=ON \
-DRDK_BUILD_PYTHON_WRAPPERS=OFF \
-DLIB_FUZZING_ENGINE=${LIB_FUZZING_ENGINE} \
-DRDK_BUILD_FUZZ_TARGETS=ON \
-DRDK_INSTALL_STATIC_LIBS=ON \
-DBoost_USE_STATIC_LIBS=ON \
-DRDK_BUILD_CPP_TESTS=OFF \
-DBoost_NO_SYSTEM_PATHS=ON \
make
````
# GCC (non-fuzzing mode)
In this mode the resulting fuzzers take a list of files as argument
and invoke the fuzz target on each file.
No actual fuzzing will be done, since no new test cases are generated.
````shell
export CC="gcc"
export CXX="g++"
export SANITIZER_FLAGS_address="-fsanitize=address -fsanitize-address-use-after-scope"
export COVERAGE_FLAGS=""
export CFLAGS="-O1 -fno-omit-frame-pointer -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION $COVERAGE_FLAGS $SANITIZER_FLAGS_address"
export CXXFLAGS="$CFLAGS"
export LIB_FUZZING_ENGINE=""
mkdir build && cd build && \
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DRDK_INSTALL_INTREE=ON \
-DRDK_BUILD_PYTHON_WRAPPERS=OFF \
-DLIB_FUZZING_ENGINE=${LIB_FUZZING_ENGINE} \
-DRDK_BUILD_FUZZ_TARGETS=ON \
-DRDK_INSTALL_STATIC_LIBS=ON \
-DBoost_USE_STATIC_LIBS=ON \
-DRDK_BUILD_CPP_TESTS=OFF \
-DBoost_NO_SYSTEM_PATHS=ON \
make
````
# GCC (fuzzing mode)
This does not seem to be possible.

View File

@@ -0,0 +1,387 @@
//===- FuzzedDataProvider.h - Utility header for fuzz targets ---*- C++ -* ===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
// A single header library providing an utility class to break up an array of
// bytes. Whenever run on the same input, provides the same output, as long as
// its methods are called in the same order, with the same arguments.
//===----------------------------------------------------------------------===//
#ifndef LLVM_FUZZER_FUZZED_DATA_PROVIDER_H_
#define LLVM_FUZZER_FUZZED_DATA_PROVIDER_H_
#include <algorithm>
#include <climits>
#include <cstddef>
#include <cstdint>
#include <cstring>
#include <initializer_list>
#include <string>
#include <type_traits>
#include <utility>
#include <vector>
// In addition to the comments below, the API is also briefly documented at
// https://github.com/google/fuzzing/blob/master/docs/split-inputs.md#fuzzed-data-provider
class FuzzedDataProvider {
public:
// |data| is an array of length |size| that the FuzzedDataProvider wraps to
// provide more granular access. |data| must outlive the FuzzedDataProvider.
FuzzedDataProvider(const uint8_t *data, size_t size)
: data_ptr_(data), remaining_bytes_(size) {}
~FuzzedDataProvider() = default;
// See the implementation below (after the class definition) for more verbose
// comments for each of the methods.
// Methods returning std::vector of bytes. These are the most popular choice
// when splitting fuzzing input into pieces, as every piece is put into a
// separate buffer (i.e. ASan would catch any under-/overflow) and the memory
// will be released automatically.
template <typename T> std::vector<T> ConsumeBytes(size_t num_bytes);
template <typename T>
std::vector<T> ConsumeBytesWithTerminator(size_t num_bytes, T terminator = 0);
template <typename T> std::vector<T> ConsumeRemainingBytes();
// Methods returning strings. Use only when you need a std::string or a null
// terminated C-string. Otherwise, prefer the methods returning std::vector.
std::string ConsumeBytesAsString(size_t num_bytes);
std::string ConsumeRandomLengthString(size_t max_length);
std::string ConsumeRandomLengthString();
std::string ConsumeRemainingBytesAsString();
// Methods returning integer values.
template <typename T> T ConsumeIntegral();
template <typename T> T ConsumeIntegralInRange(T min, T max);
// Methods returning floating point values.
template <typename T> T ConsumeFloatingPoint();
template <typename T> T ConsumeFloatingPointInRange(T min, T max);
// 0 <= return value <= 1.
template <typename T> T ConsumeProbability();
bool ConsumeBool();
// Returns a value chosen from the given enum.
template <typename T> T ConsumeEnum();
// Returns a value from the given array.
template <typename T, size_t size> T PickValueInArray(const T (&array)[size]);
template <typename T> T PickValueInArray(std::initializer_list<const T> list);
// Writes data to the given destination and returns number of bytes written.
size_t ConsumeData(void *destination, size_t num_bytes);
// Reports the remaining bytes available for fuzzed input.
size_t remaining_bytes() { return remaining_bytes_; }
private:
FuzzedDataProvider(const FuzzedDataProvider &) = delete;
FuzzedDataProvider &operator=(const FuzzedDataProvider &) = delete;
void CopyAndAdvance(void *destination, size_t num_bytes);
void Advance(size_t num_bytes);
template <typename T>
std::vector<T> ConsumeBytes(size_t size, size_t num_bytes);
template <typename TS, typename TU> TS ConvertUnsignedToSigned(TU value);
const uint8_t *data_ptr_;
size_t remaining_bytes_;
};
// Returns a std::vector containing |num_bytes| of input data. If fewer than
// |num_bytes| of data remain, returns a shorter std::vector containing all
// of the data that's left. Can be used with any byte sized type, such as
// char, unsigned char, uint8_t, etc.
template <typename T>
std::vector<T> FuzzedDataProvider::ConsumeBytes(size_t num_bytes) {
num_bytes = std::min(num_bytes, remaining_bytes_);
return ConsumeBytes<T>(num_bytes, num_bytes);
}
// Similar to |ConsumeBytes|, but also appends the terminator value at the end
// of the resulting vector. Useful, when a mutable null-terminated C-string is
// needed, for example. But that is a rare case. Better avoid it, if possible,
// and prefer using |ConsumeBytes| or |ConsumeBytesAsString| methods.
template <typename T>
std::vector<T> FuzzedDataProvider::ConsumeBytesWithTerminator(size_t num_bytes,
T terminator) {
num_bytes = std::min(num_bytes, remaining_bytes_);
std::vector<T> result = ConsumeBytes<T>(num_bytes + 1, num_bytes);
result.back() = terminator;
return result;
}
// Returns a std::vector containing all remaining bytes of the input data.
template <typename T>
std::vector<T> FuzzedDataProvider::ConsumeRemainingBytes() {
return ConsumeBytes<T>(remaining_bytes_);
}
// Returns a std::string containing |num_bytes| of input data. Using this and
// |.c_str()| on the resulting string is the best way to get an immutable
// null-terminated C string. If fewer than |num_bytes| of data remain, returns
// a shorter std::string containing all of the data that's left.
inline std::string FuzzedDataProvider::ConsumeBytesAsString(size_t num_bytes) {
static_assert(sizeof(std::string::value_type) == sizeof(uint8_t),
"ConsumeBytesAsString cannot convert the data to a string.");
num_bytes = std::min(num_bytes, remaining_bytes_);
std::string result(
reinterpret_cast<const std::string::value_type *>(data_ptr_), num_bytes);
Advance(num_bytes);
return result;
}
// Returns a std::string of length from 0 to |max_length|. When it runs out of
// input data, returns what remains of the input. Designed to be more stable
// with respect to a fuzzer inserting characters than just picking a random
// length and then consuming that many bytes with |ConsumeBytes|.
inline std::string
FuzzedDataProvider::ConsumeRandomLengthString(size_t max_length) {
// Reads bytes from the start of |data_ptr_|. Maps "\\" to "\", and maps "\"
// followed by anything else to the end of the string. As a result of this
// logic, a fuzzer can insert characters into the string, and the string
// will be lengthened to include those new characters, resulting in a more
// stable fuzzer than picking the length of a string independently from
// picking its contents.
std::string result;
// Reserve the anticipated capaticity to prevent several reallocations.
result.reserve(std::min(max_length, remaining_bytes_));
for (size_t i = 0; i < max_length && remaining_bytes_ != 0; ++i) {
char next = ConvertUnsignedToSigned<char>(data_ptr_[0]);
Advance(1);
if (next == '\\' && remaining_bytes_ != 0) {
next = ConvertUnsignedToSigned<char>(data_ptr_[0]);
Advance(1);
if (next != '\\')
break;
}
result += next;
}
result.shrink_to_fit();
return result;
}
// Returns a std::string of length from 0 to |remaining_bytes_|.
inline std::string FuzzedDataProvider::ConsumeRandomLengthString() {
return ConsumeRandomLengthString(remaining_bytes_);
}
// Returns a std::string containing all remaining bytes of the input data.
// Prefer using |ConsumeRemainingBytes| unless you actually need a std::string
// object.
inline std::string FuzzedDataProvider::ConsumeRemainingBytesAsString() {
return ConsumeBytesAsString(remaining_bytes_);
}
// Returns a number in the range [Type's min, Type's max]. The value might
// not be uniformly distributed in the given range. If there's no input data
// left, always returns |min|.
template <typename T> T FuzzedDataProvider::ConsumeIntegral() {
return ConsumeIntegralInRange(std::numeric_limits<T>::min(),
std::numeric_limits<T>::max());
}
// Returns a number in the range [min, max] by consuming bytes from the
// input data. The value might not be uniformly distributed in the given
// range. If there's no input data left, always returns |min|. |min| must
// be less than or equal to |max|.
template <typename T>
T FuzzedDataProvider::ConsumeIntegralInRange(T min, T max) {
static_assert(std::is_integral<T>::value, "An integral type is required.");
static_assert(sizeof(T) <= sizeof(uint64_t), "Unsupported integral type.");
if (min > max)
abort();
// Use the biggest type possible to hold the range and the result.
uint64_t range = static_cast<uint64_t>(max) - min;
uint64_t result = 0;
size_t offset = 0;
while (offset < sizeof(T) * CHAR_BIT && (range >> offset) > 0 &&
remaining_bytes_ != 0) {
// Pull bytes off the end of the seed data. Experimentally, this seems to
// allow the fuzzer to more easily explore the input space. This makes
// sense, since it works by modifying inputs that caused new code to run,
// and this data is often used to encode length of data read by
// |ConsumeBytes|. Separating out read lengths makes it easier modify the
// contents of the data that is actually read.
--remaining_bytes_;
result = (result << CHAR_BIT) | data_ptr_[remaining_bytes_];
offset += CHAR_BIT;
}
// Avoid division by 0, in case |range + 1| results in overflow.
if (range != std::numeric_limits<decltype(range)>::max())
result = result % (range + 1);
return static_cast<T>(min + result);
}
// Returns a floating point value in the range [Type's lowest, Type's max] by
// consuming bytes from the input data. If there's no input data left, always
// returns approximately 0.
template <typename T> T FuzzedDataProvider::ConsumeFloatingPoint() {
return ConsumeFloatingPointInRange<T>(std::numeric_limits<T>::lowest(),
std::numeric_limits<T>::max());
}
// Returns a floating point value in the given range by consuming bytes from
// the input data. If there's no input data left, returns |min|. Note that
// |min| must be less than or equal to |max|.
template <typename T>
T FuzzedDataProvider::ConsumeFloatingPointInRange(T min, T max) {
if (min > max)
abort();
T range = .0;
T result = min;
constexpr T zero(.0);
if (max > zero && min < zero && max > min + std::numeric_limits<T>::max()) {
// The diff |max - min| would overflow the given floating point type. Use
// the half of the diff as the range and consume a bool to decide whether
// the result is in the first of the second part of the diff.
range = (max / 2.0) - (min / 2.0);
if (ConsumeBool()) {
result += range;
}
} else {
range = max - min;
}
return result + range * ConsumeProbability<T>();
}
// Returns a floating point number in the range [0.0, 1.0]. If there's no
// input data left, always returns 0.
template <typename T> T FuzzedDataProvider::ConsumeProbability() {
static_assert(std::is_floating_point<T>::value,
"A floating point type is required.");
// Use different integral types for different floating point types in order
// to provide better density of the resulting values.
using IntegralType =
typename std::conditional<(sizeof(T) <= sizeof(uint32_t)), uint32_t,
uint64_t>::type;
T result = static_cast<T>(ConsumeIntegral<IntegralType>());
result /= static_cast<T>(std::numeric_limits<IntegralType>::max());
return result;
}
// Reads one byte and returns a bool, or false when no data remains.
inline bool FuzzedDataProvider::ConsumeBool() {
return 1 & ConsumeIntegral<uint8_t>();
}
// Returns an enum value. The enum must start at 0 and be contiguous. It must
// also contain |kMaxValue| aliased to its largest (inclusive) value. Such as:
// enum class Foo { SomeValue, OtherValue, kMaxValue = OtherValue };
template <typename T> T FuzzedDataProvider::ConsumeEnum() {
static_assert(std::is_enum<T>::value, "|T| must be an enum type.");
return static_cast<T>(
ConsumeIntegralInRange<uint32_t>(0, static_cast<uint32_t>(T::kMaxValue)));
}
// Returns a copy of the value selected from the given fixed-size |array|.
template <typename T, size_t size>
T FuzzedDataProvider::PickValueInArray(const T (&array)[size]) {
static_assert(size > 0, "The array must be non empty.");
return array[ConsumeIntegralInRange<size_t>(0, size - 1)];
}
template <typename T>
T FuzzedDataProvider::PickValueInArray(std::initializer_list<const T> list) {
// TODO(Dor1s): switch to static_assert once C++14 is allowed.
if (!list.size())
abort();
return *(list.begin() + ConsumeIntegralInRange<size_t>(0, list.size() - 1));
}
// Writes |num_bytes| of input data to the given destination pointer. If there
// is not enough data left, writes all remaining bytes. Return value is the
// number of bytes written.
// In general, it's better to avoid using this function, but it may be useful
// in cases when it's necessary to fill a certain buffer or object with
// fuzzing data.
inline size_t FuzzedDataProvider::ConsumeData(void *destination,
size_t num_bytes) {
num_bytes = std::min(num_bytes, remaining_bytes_);
CopyAndAdvance(destination, num_bytes);
return num_bytes;
}
// Private methods.
inline void FuzzedDataProvider::CopyAndAdvance(void *destination,
size_t num_bytes) {
std::memcpy(destination, data_ptr_, num_bytes);
Advance(num_bytes);
}
inline void FuzzedDataProvider::Advance(size_t num_bytes) {
if (num_bytes > remaining_bytes_)
abort();
data_ptr_ += num_bytes;
remaining_bytes_ -= num_bytes;
}
template <typename T>
std::vector<T> FuzzedDataProvider::ConsumeBytes(size_t size, size_t num_bytes) {
static_assert(sizeof(T) == sizeof(uint8_t), "Incompatible data type.");
// The point of using the size-based constructor below is to increase the
// odds of having a vector object with capacity being equal to the length.
// That part is always implementation specific, but at least both libc++ and
// libstdc++ allocate the requested number of bytes in that constructor,
// which seems to be a natural choice for other implementations as well.
// To increase the odds even more, we also call |shrink_to_fit| below.
std::vector<T> result(size);
if (size == 0) {
if (num_bytes != 0)
abort();
return result;
}
CopyAndAdvance(result.data(), num_bytes);
// Even though |shrink_to_fit| is also implementation specific, we expect it
// to provide an additional assurance in case vector's constructor allocated
// a buffer which is larger than the actual amount of data we put inside it.
result.shrink_to_fit();
return result;
}
template <typename TS, typename TU>
TS FuzzedDataProvider::ConvertUnsignedToSigned(TU value) {
static_assert(sizeof(TS) == sizeof(TU), "Incompatible data types.");
static_assert(!std::numeric_limits<TU>::is_signed,
"Source type must be unsigned.");
// TODO(Dor1s): change to `if constexpr` once C++17 becomes mainstream.
if (std::numeric_limits<TS>::is_modulo)
return static_cast<TS>(value);
// Avoid using implementation-defined unsigned to signed conversions.
// To learn more, see https://stackoverflow.com/questions/13150449.
if (value <= std::numeric_limits<TS>::max()) {
return static_cast<TS>(value);
} else {
constexpr auto TS_min = std::numeric_limits<TS>::min();
return TS_min + static_cast<char>(value - TS_min);
}
}
#endif // LLVM_FUZZER_FUZZED_DATA_PROVIDER_H_

View File

@@ -0,0 +1,41 @@
// Copyright 2020 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include <fuzzer/FuzzedDataProvider.h>
#include <memory>
#include <sstream>
#include <string>
#include "GraphMol/FileParsers/FileParsers.h"
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
FuzzedDataProvider fdp(data, size);
const bool sanitize = fdp.ConsumeIntegralInRange(0, 1);
const bool remove_hs = fdp.ConsumeIntegralInRange(0, 1);
const bool strict_parsing = fdp.ConsumeIntegralInRange(0, 1);
std::istringstream data_stream(fdp.ConsumeRemainingBytesAsString());
unsigned int num_lines = 0; // output parameter.
std::unique_ptr<RDKit::RWMol> result = nullptr;
try {
result.reset(RDKit::MolDataStreamToMol(&data_stream, num_lines, sanitize,
remove_hs, strict_parsing));
} catch (...) {
}
return 0;
}

View File

@@ -0,0 +1,94 @@
# Mixture of V2000 and V3000 MDL Mofile/Chemical table file strings
# Taken from https://www.daylight.com/meetings/mug05/Kappler/ctfile.pdf
"0"
"1"
"2"
"3"
"4"
"5"
"6"
"7"
"8"
"9"
"+"
"-"
"."
","
" "
" "
" "
" "
" "
"V2000"
"V3000"
"M"
"CHG"
"ISO"
"END"
"RAD"
"H0"
"H1"
"H2"
"H3"
"SUP"
"MUL"
"SRU"
"MON"
"MER"
"COP"
"CRO"
"MOD"
"GRA"
"COM"
"MIX"
"FOR"
"DAT"
"ANY"
"GEN"
"HH"
"HT"
"EU"
"SBV"
"SCD"
"SED"
"MPA"
"SAP"
"SCL"
"REG"
"SBT"
"$3D"
"M $3D"
"M $3D -1 0 POINT_1"
"M $3D -4 1 N_TO_AROM"
"M $3D -5 2 PLANE_2"
"M $3D -6 3 PLANE_1"
"M $3D -7 4 ARO_CENTER"
"M $3D -8 5 ARO_NORMAL"
"M $3D -9 6 L"
"M $3D-12 7 THETA1"
"M $3D-13 8 THETA2"
"M $3D-15 9 DIHED1"
"M $3D-16 10 EXCL_SPHERE"
"M $3D-17"
"M $3D 4"
"M $3D 1 2 3 4"
"M $3D 7 0 CNDO.CHARGE"
"M $3D 9 0 BOND.LENGTH"
"M $3D 12 0 CHARGE"
# V3000
"M V30 "
"V30 BEGIN CTAB"
"V30"
"COUNTS 6 5 0 0 1"
"BEGIN"
"ATOM"
"CTAB"
"BOND"
"END"
"CFG="
"CFG"
"MASS"
"="

View File

@@ -0,0 +1,14 @@
RDKit 3D
5 4 0 0 0 0 0 0 0 0999 V2000
-1.1445 -1.2214 0.5097 N 0 0 0 0 0 0 0 0 0 0 0 0
-0.3720 0.0109 0.4789 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.1805 1.0431 -0.2688 C 0 0 0 0 0 0 0 0 0 0 0 0
0.8608 -0.2831 -0.3176 C 0 0 0 0 0 0 0 0 0 0 0 0
1.8362 0.4504 -0.4022 O 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 1 0
2 4 1 0
4 5 2 0
M END000

View File

@@ -0,0 +1,12 @@
RDKit 2D
4 3 0 0 0 0 0 0 0 0999 V2000
1.2990 0.7500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.0000 -1.5000 0.0000 Br 0 0 0 0 0 0 0 0 0 0 0 0
-1.2990 0.7500 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 1 0
2 4 1 0
M END000

View File

@@ -0,0 +1,78 @@
RDKit 2D
37 36 0 0 0 0 0 0 0 0999 V2000
-6.7500 -3.8971 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-5.2500 -3.8971 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-4.5000 -2.5981 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-3.0000 -2.5981 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.2500 -3.8971 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
-2.2500 -1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.7500 -1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.5000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.2500 1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
3.7500 1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
4.5000 2.5981 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
5.2500 3.8971 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
6.0000 5.1962 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
6.7500 6.4952 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
7.5000 7.7942 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
9.0000 7.7942 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
9.7500 9.0933 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
11.2500 9.0933 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
12.0000 10.3923 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
13.5000 10.3923 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
14.2500 11.6913 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
15.7500 11.6913 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
16.5000 10.3923 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
16.5000 12.9904 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
18.0000 12.9904 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
18.7500 14.2894 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
20.2500 14.2894 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
21.0000 15.5885 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
22.5000 15.5885 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
23.2500 16.8875 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
24.0000 18.1865 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
24.7500 19.4856 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
25.5000 20.7846 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
26.2500 22.0836 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
27.7500 22.0836 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
28.5000 23.3827 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 1 0
3 4 1 0
4 5 1 6
4 6 1 0
6 7 1 0
7 8 1 0
8 9 2 0
9 10 1 0
10 11 2 0
11 12 1 0
12 13 3 0
13 14 1 0
14 15 3 0
15 16 1 0
16 17 2 0
17 18 1 0
18 19 1 0
19 20 1 0
20 21 1 0
21 22 1 0
22 23 1 0
23 24 1 6
23 25 1 0
25 26 1 0
26 27 1 0
27 28 2 0
28 29 1 0
29 30 2 0
30 31 1 0
31 32 3 0
32 33 1 0
33 34 3 0
34 35 1 0
35 36 2 0
36 37 1 0
M END000

View File

@@ -0,0 +1,12 @@
RDKit 3D
4 3 0 0 0 0 0 0 0 0999 V2000
1.7753 -0.0194 0.4524 C 0 0 0 0 0 0 0 0 0 0 0 0
0.5599 0.5333 -0.2486 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.5973 -0.3417 0.1003 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.7379 -0.1723 -0.3042 O 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 1 0
3 4 2 0
M END000

View File

@@ -0,0 +1,50 @@
RDKit 3D
22 23 0 0 0 0 0 0 0 0999 V2000
-0.4580 0.8239 -2.5509 O 0 0 0 0 0 0 0 0 0 0 0 0
-1.1258 1.5627 -1.8455 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.0321 1.1050 -0.7861 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.8537 2.0932 -0.2474 C 0 0 0 0 0 0 0 0 0 0 0 0
-3.7734 1.7609 0.7413 C 0 0 0 0 0 0 0 0 0 0 0 0
-3.8579 0.4453 1.1843 C 0 0 0 0 0 0 0 0 0 0 0 0
-4.8093 0.1482 2.1162 O 0 0 0 0 0 0 0 0 0 0 0 0
-3.0167 -0.5453 0.6681 C 0 0 0 0 0 0 0 0 0 0 0 0
-3.1053 -1.8579 1.0474 O 0 0 0 0 0 0 0 0 0 0 0 0
-2.8463 -1.9334 2.4469 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.0960 -0.2204 -0.3356 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.1954 -1.2760 -0.8938 C 0 0 0 0 0 0 0 0 0 0 0 0
0.0154 -1.2667 -0.1472 O 0 0 0 0 0 0 0 0 0 0 0 0
1.0607 -1.4390 -1.0943 C 0 0 0 0 0 0 0 0 0 0 0 0
2.3143 -0.8701 -0.5223 C 0 0 0 0 0 0 0 0 0 0 0 0
2.6219 0.4752 -0.7185 C 0 0 0 0 0 0 0 0 0 0 0 0
3.7960 0.9874 -0.1786 C 0 0 0 0 0 0 0 0 0 0 0 0
4.0775 2.4019 -0.4035 C 0 0 0 0 0 0 0 0 0 0 0 0
5.0634 2.9736 0.0328 O 0 0 0 0 0 0 0 0 0 0 0 0
4.6718 0.1873 0.5487 C 0 0 0 0 0 0 0 0 0 0 0 0
4.3619 -1.1568 0.7365 C 0 0 0 0 0 0 0 0 0 0 0 0
3.1870 -1.6849 0.2015 C 0 0 0 0 0 0 0 0 0 0 0 0
1 2 2 0
2 3 1 0
3 4 2 0
4 5 1 0
5 6 2 0
6 7 1 0
6 8 1 0
8 9 1 0
9 10 1 0
8 11 2 0
11 12 1 0
12 13 1 0
13 14 1 0
14 15 1 0
15 16 2 0
16 17 1 0
17 18 1 0
18 19 2 0
17 20 2 0
20 21 1 0
21 22 2 0
11 3 1 0
22 15 1 0
M END000

View File

@@ -0,0 +1,14 @@
RDKit 3D
5 4 0 0 0 0 0 0 0 0999 V2000
-1.2566 0.8761 0.8454 N 0 0 0 0 0 0 0 0 0 0 0 0
-0.4081 -0.2156 0.3935 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.0868 -0.8693 -0.7855 C 0 0 0 0 0 0 0 0 0 0 0 0
0.8641 0.4094 -0.0877 C 0 0 0 0 0 0 0 0 0 0 0 0
1.8874 -0.2006 -0.3657 O 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 1 0
2 4 1 0
4 5 2 0
M END000

View File

@@ -0,0 +1,15 @@
RDKit 3D
5 4 0 0 0 0 0 0 0 0999 V2000
2.0118 -0.0152 -0.0957 N 0 0 0 0 0 0 0 0 0 0 0 0
0.7095 -0.6718 0.0293 C 0 0 0 0 0 3 0 0 0 0 0 0
-0.5315 0.1117 0.0151 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.6221 1.3217 -0.0949 O 0 0 0 0 0 0 0 0 0 0 0 0
-1.5677 -0.7463 0.1463 O 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 1 0
3 4 2 0
3 5 1 0
M RAD 1 2 2
M END000

View File

@@ -0,0 +1,14 @@
RDKit 3D
5 4 0 0 0 0 0 0 0 0999 V2000
-1.4068 -1.0279 0.1601 N 0 0 0 0 0 0 0 0 0 0 0 0
-0.4312 0.0177 0.4262 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.9222 1.2845 -0.2314 C 0 0 0 0 0 0 0 0 0 0 0 0
0.8340 -0.4017 -0.2550 C 0 0 0 0 0 0 0 0 0 0 0 0
1.9262 0.1273 -0.1000 O 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 1 0
2 4 1 0
4 5 2 0
M END000

View File

@@ -0,0 +1,15 @@
RDKit 2D
5 4 0 0 0 0 0 0 0 0999 V2000
2.5981 -0.0000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
1.2990 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.2990 2.2500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
0.0000 0.0000 0.0000 C 0 0 0 0 0 3 0 0 0 0 0 0
-1.2990 0.7500 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 2 0
2 4 1 0
4 5 1 0
M RAD 1 4 2
M END000

View File

@@ -0,0 +1,12 @@
RDKit 2D
4 3 0 0 0 0 0 0 0 0999 V2000
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.2990 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.5981 -0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
3.8971 0.7500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 1 0
3 4 2 0
M END000

View File

@@ -0,0 +1,14 @@
RDKit 3D
5 4 0 0 0 0 0 0 0 0999 V2000
1.8123 0.1545 -0.4246 N 0 0 0 0 0 0 0 0 0 0 0 0
0.8564 -0.0316 0.6582 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.5175 -0.1102 0.0645 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.1018 -1.1433 -0.2310 O 0 0 0 0 0 0 0 0 0 0 0 0
-1.0493 1.1306 -0.0671 O 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 1 0
3 4 2 0
3 5 1 0
M END000

View File

@@ -0,0 +1,78 @@
RDKit 3D
37 36 0 0 0 0 0 0 0 0999 V2000
-8.7137 5.4457 -5.9371 C 0 0 0 0 0 0 0 0 0 0 0 0
-9.4199 4.1321 -6.1599 C 0 0 0 0 0 0 0 0 0 0 0 0
-10.5534 3.9932 -5.1698 C 0 0 0 0 0 0 0 0 0 0 0 0
-11.3078 2.6862 -5.3032 C 0 0 1 0 0 0 0 0 0 0 0 0
-11.6727 2.4754 -6.6571 O 0 0 0 0 0 0 0 0 0 0 0 0
-10.4784 1.5084 -4.8485 C 0 0 0 0 0 0 0 0 0 0 0 0
-10.3065 1.5274 -3.3489 C 0 0 0 0 0 0 0 0 0 0 0 0
-9.4115 0.4210 -2.9336 C 0 0 0 0 0 0 0 0 0 0 0 0
-8.3101 0.6287 -2.2106 C 0 0 0 0 0 0 0 0 0 0 0 0
-7.4544 -0.4485 -1.8168 C 0 0 0 0 0 0 0 0 0 0 0 0
-6.3527 -0.2409 -1.0940 C 0 0 0 0 0 0 0 0 0 0 0 0
-5.5095 -1.3105 -0.7060 C 0 0 0 0 0 0 0 0 0 0 0 0
-4.7899 -2.2118 -0.3730 C 0 0 0 0 0 0 0 0 0 0 0 0
-3.8666 -3.3679 0.0545 C 0 0 0 0 0 0 0 0 0 0 0 0
-3.1467 -4.2690 0.3874 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.3045 -5.3376 0.7790 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.0005 -5.1549 0.9893 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.1047 -6.2642 1.3918 C 0 0 0 0 0 0 0 0 0 0 0 0
0.5952 -5.8798 2.5666 O 0 0 0 0 0 0 0 0 0 0 0 0
1.6607 -6.7965 2.7556 C 0 0 0 0 0 0 0 0 0 0 0 0
2.9013 -6.3533 2.0100 C 0 0 0 0 0 0 0 0 0 0 0 0
3.2044 -4.8887 2.2309 C 0 0 0 0 0 0 0 0 0 0 0 0
4.3724 -4.4284 1.3917 C 0 0 1 0 0 0 0 0 0 0 0 0
4.1213 -4.7027 0.0226 O 0 0 0 0 0 0 0 0 0 0 0 0
4.5794 -2.9454 1.5850 C 0 0 0 0 0 0 0 0 0 0 0 0
5.7460 -2.4455 0.7671 C 0 0 0 0 0 0 0 0 0 0 0 0
5.9972 -1.0180 1.0792 C 0 0 0 0 0 0 0 0 0 0 0 0
7.1919 -0.5740 1.4724 C 0 0 0 0 0 0 0 0 0 0 0 0
7.4193 0.8064 1.7726 C 0 0 0 0 0 0 0 0 0 0 0 0
8.6137 1.2512 2.1660 C 0 0 0 0 0 0 0 0 0 0 0 0
8.8324 2.6184 2.4632 C 0 0 0 0 0 0 0 0 0 0 0 0
9.0246 3.7758 2.7170 C 0 0 0 0 0 0 0 0 0 0 0 0
9.2710 5.2605 3.0429 C 0 0 0 0 0 0 0 0 0 0 0 0
9.4633 6.4178 3.2971 C 0 0 0 0 0 0 0 0 0 0 0 0
9.6817 7.7845 3.5955 C 0 0 0 0 0 0 0 0 0 0 0 0
10.8906 8.2390 3.9271 C 0 0 0 0 0 0 0 0 0 0 0 0
11.1369 9.6659 4.2424 C 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 1 0
3 4 1 0
4 5 1 6
4 6 1 0
6 7 1 0
7 8 1 0
8 9 2 0
9 10 1 0
10 11 2 0
11 12 1 0
12 13 3 0
13 14 1 0
14 15 3 0
15 16 1 0
16 17 2 0
17 18 1 0
18 19 1 0
19 20 1 0
20 21 1 0
21 22 1 0
22 23 1 0
23 24 1 6
23 25 1 0
25 26 1 0
26 27 1 0
27 28 2 0
28 29 1 0
29 30 2 0
30 31 1 0
31 32 3 0
32 33 1 0
33 34 3 0
34 35 1 0
35 36 2 0
36 37 1 0
M END000

View File

@@ -0,0 +1,15 @@
RDKit 3D
5 4 0 0 0 0 0 0 0 0999 V2000
-0.7839 1.0001 -0.5745 O 0 0 0 0 0 0 0 0 0 0 0 0
-0.5596 -0.1794 0.0438 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.4278 -0.9729 0.3733 O 0 0 0 0 0 0 0 0 0 0 0 0
0.8711 -0.4048 0.2794 C 0 0 0 0 0 3 0 0 0 0 0 0
1.9003 0.5570 -0.1221 N 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 2 0
2 4 1 0
4 5 1 0
M RAD 1 4 2
M END000

View File

@@ -0,0 +1,14 @@
RDKit 2D
5 4 0 0 0 0 0 0 0 0999 V2000
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.2990 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.2990 2.2500 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
2.5981 -0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
3.8971 0.7500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
2 1 1 6
2 3 1 0
2 4 1 0
4 5 2 0
M END000

View File

@@ -0,0 +1,12 @@
RDKit 3D
4 3 0 0 0 0 0 0 0 0999 V2000
1.7317 0.4612 0.3814 C 0 0 0 0 0 0 0 0 0 0 0 0
0.4788 0.4698 -0.4579 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.5391 -0.3645 0.2449 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.6713 -0.5665 -0.1683 O 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 1 0
3 4 2 0
M END000

View File

@@ -0,0 +1,15 @@
RDKit 2D
5 4 0 0 0 0 0 0 0 0999 V2000
0.5490 2.0490 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
1.2990 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.5981 1.5000 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0
2.0490 -0.5490 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 1 0
2 4 1 0
2 5 1 0
M ISO 1 1 2
M END000

View File

@@ -0,0 +1,15 @@
RDKit 2D
5 4 0 0 0 0 0 0 0 0999 V2000
-1.2990 0.7500 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
0.0000 0.0000 0.0000 C 0 0 0 0 0 3 0 0 0 0 0 0
1.2990 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.2990 2.2500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
2.5981 -0.0000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 1 0
3 4 2 0
3 5 1 0
M RAD 1 2 2
M END000

View File

@@ -0,0 +1,14 @@
RDKit 2D
5 4 0 0 0 0 0 0 0 0999 V2000
1.2990 2.2500 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
1.2990 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.5981 -0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
3.8971 0.7500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 1 0
2 4 1 0
4 5 2 0
M END000

View File

@@ -0,0 +1,14 @@
RDKit 2D
5 4 0 0 0 0 0 0 0 0999 V2000
1.2990 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.5981 1.5000 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
0.5490 2.0490 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0
2.0490 -0.5490 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
0.0000 0.0000 0.0000 B 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
1 3 1 0
1 4 1 0
1 5 1 0
M END000

View File

@@ -0,0 +1,41 @@
RDKit 2D
17 18 0 0 0 0 0 0 0 0999 V2000
-0.6546 -10.1364 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
-0.8113 -8.6446 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.4022 -7.7629 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.2454 -6.2711 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.3601 -5.2674 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.8273 -5.5793 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.7500 -3.8971 0.0000 N 0 0 0 0 0 4 0 0 0 0 0 0
-0.7418 -4.0539 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.0537 -5.5211 0.0000 S 0 0 0 0 0 0 0 0 0 0 0 0
1.5000 -2.5981 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.7500 -1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.5000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.7500 1.2990 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
-0.7500 1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.5000 2.5981 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.5000 0.0000 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
-0.7500 -1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 1 0
3 4 1 0
4 5 2 0
5 6 1 0
5 7 1 0
7 8 2 0
8 9 1 0
7 10 1 0
10 11 1 0
11 12 2 0
12 13 1 0
13 14 2 0
14 15 1 0
14 16 1 0
16 17 2 0
9 4 1 0
17 11 1 0
M CHG 1 7 1
M END000

View File

@@ -0,0 +1,147 @@
RDKit 2D
65 77 0 0 0 0 0 0 0 0999 V2000
2.3907 1.0037 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.2760 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.3907 -1.0037 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.3943 1.2135 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
0.3943 -1.2135 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.0323 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.0196 -1.6707 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
-1.0323 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.8755 2.2418 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
-2.4026 0.1399 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.7063 -1.1755 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-3.6161 1.0216 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-5.0834 0.7097 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-5.8334 2.0087 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-4.8297 3.1235 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-3.4593 2.5134 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.0890 3.1235 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.8853 3.6797 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.9803 3.1892 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
-2.9689 4.4754 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-3.7729 5.4969 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-4.9864 4.6152 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-6.3568 5.2253 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-6.5136 6.7171 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-5.3000 7.5988 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-5.4568 9.0906 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-3.9297 6.9887 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.5594 6.3786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.7162 7.8704 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.8730 9.3622 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.6595 10.2438 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
-4.2433 9.9723 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-4.4001 11.4641 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
-3.1866 12.3457 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-3.3434 13.8375 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.1298 14.7192 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-3.5002 15.3293 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.8162 11.7356 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.6027 12.6173 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.7595 14.1091 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.4540 14.9908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.2972 16.4825 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.0731 17.0927 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.2866 16.2110 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-3.6569 16.8211 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-3.8137 18.3129 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-5.1841 18.9230 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
-2.6002 19.1945 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-3.8429 19.7220 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.2299 18.5844 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.2262 19.6992 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.9762 20.9982 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.8194 22.4900 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
-2.4434 20.6863 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-3.7883 20.5687 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
-3.1934 21.9854 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-4.6852 22.1422 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.1897 23.1001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-3.5600 23.7102 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
-1.1860 24.2148 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.3058 24.0580 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
-1.9360 25.5138 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-3.4033 25.2020 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-4.9033 25.2020 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-3.5600 26.6937 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 1 0
2 4 1 0
2 5 1 0
5 6 1 0
6 7 1 1
6 8 1 0
8 9 1 6
8 10 1 0
10 11 1 1
10 12 1 0
12 13 1 6
13 14 1 0
14 15 2 0
15 16 1 0
16 17 1 1
16 18 1 0
18 19 2 0
18 20 1 0
21 20 1 1
21 22 1 0
22 23 1 6
23 24 1 0
25 24 1 1
25 26 1 0
25 27 1 0
27 28 1 1
27 29 1 0
29 30 1 0
30 31 1 0
30 32 2 0
32 33 1 0
33 34 2 0
34 35 1 0
35 36 1 0
36 37 1 1
34 38 1 0
38 39 1 0
40 39 1 1
40 41 1 0
41 42 1 0
43 42 1 6
43 44 1 0
44 45 1 1
45 46 1 0
46 47 1 1
46 48 1 0
48 49 1 1
48 50 1 0
50 51 2 0
52 51 1 1
52 53 1 0
52 54 1 0
54 55 1 6
54 56 1 0
56 57 1 6
56 58 1 0
58 59 1 1
58 60 1 0
60 61 1 1
60 62 1 0
62 63 1 0
63 64 1 0
63 65 1 0
8 4 1 0
17 9 1 0
16 12 1 0
22 15 1 0
27 21 1 0
32 26 1 0
38 31 2 0
40 36 1 0
44 36 1 0
50 43 1 0
54 48 1 0
58 53 1 0
63 59 1 0
M END000

View File

@@ -0,0 +1,14 @@
RDKit 2D
5 4 0 0 0 0 0 0 0 0999 V2000
1.2990 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.2990 2.2500 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
2.5981 -0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
3.8971 0.7500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 6
1 3 1 0
1 4 1 0
4 5 2 0
M END000

View File

@@ -0,0 +1,14 @@
RDKit 3D
5 4 0 0 0 0 0 0 0 0999 V2000
-1.3765 0.9720 0.4711 N 0 0 0 0 0 0 0 0 0 0 0 0
-0.4691 0.1767 -0.3415 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.9439 -1.2554 -0.2952 C 0 0 0 0 0 0 0 0 0 0 0 0
0.8683 0.2469 0.3270 C 0 0 0 0 0 0 0 0 0 0 0 0
1.9211 -0.1402 -0.1614 O 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 1 0
2 4 1 0
4 5 2 0
M END000

View File

@@ -0,0 +1,5 @@
RDKit 2D
0 0 0 0 0 0 0 0 0 0999 V2000
M END000

View File

@@ -0,0 +1,10 @@
RDKit 2D
3 2 0 0 0 0 0 0 0 0999 V2000
1.2990 0.7500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.2990 0.7500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 1 0
M END000

View File

@@ -0,0 +1,14 @@
RDKit 2D
5 4 0 0 0 0 0 0 0 0999 V2000
0.5490 2.0490 0.0000 Br 0 0 0 0 0 0 0 0 0 0 0 0
1.2990 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.5981 1.5000 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
2.0490 -0.5490 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 1 0
2 4 1 0
2 5 1 0
M END000

View File

@@ -0,0 +1,14 @@
RDKit 3D
5 4 0 0 0 0 0 0 0 0999 V2000
1.8044 -0.0235 -0.4818 N 0 0 0 0 0 0 0 0 0 0 0 0
0.8533 -0.3203 0.5803 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.5271 -0.0428 0.0669 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.2764 -0.8720 -0.4301 O 0 0 0 0 0 0 0 0 0 0 0 0
-0.8543 1.2586 0.2647 O 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 1 0
3 4 2 0
3 5 1 0
M END000

View File

@@ -0,0 +1,78 @@
RDKit 3D
37 36 0 0 0 0 0 0 0 0999 V2000
17.4748 -1.4516 0.6801 C 0 0 0 0 0 0 0 0 0 0 0 0
16.3763 -1.7332 -0.3138 C 0 0 0 0 0 0 0 0 0 0 0 0
16.0330 -0.4652 -1.0612 C 0 0 0 0 0 0 0 0 0 0 0 0
14.9315 -0.6526 -2.0806 C 0 0 1 0 0 0 0 0 0 0 0 0
15.1920 -1.7863 -2.8901 O 0 0 0 0 0 0 0 0 0 0 0 0
13.5905 -0.7985 -1.3996 C 0 0 0 0 0 0 0 0 0 0 0 0
12.4794 -0.9662 -2.4080 C 0 0 0 0 0 0 0 0 0 0 0 0
11.1739 -1.0152 -1.7062 C 0 0 0 0 0 0 0 0 0 0 0 0
10.1655 -0.1986 -2.0186 C 0 0 0 0 0 0 0 0 0 0 0 0
8.8938 -0.2220 -1.3597 C 0 0 0 0 0 0 0 0 0 0 0 0
8.0545 -1.2588 -1.4098 C 0 0 0 0 0 0 0 0 0 0 0 0
6.8059 -1.2317 -0.7421 C 0 0 0 0 0 0 0 0 0 0 0 0
5.7454 -1.2153 -0.1798 C 0 0 0 0 0 0 0 0 0 0 0 0
4.3844 -1.1937 0.5404 C 0 0 0 0 0 0 0 0 0 0 0 0
3.3230 -1.1769 1.1011 C 0 0 0 0 0 0 0 0 0 0 0 0
2.0751 -1.1536 1.7694 C 0 0 0 0 0 0 0 0 0 0 0 0
0.9534 -1.5433 1.1627 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.3594 -1.5283 1.8498 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.2777 -0.7893 1.0606 O 0 0 0 0 0 0 0 0 0 0 0 0
-2.4869 -0.7172 1.7972 C 0 0 0 0 0 0 0 0 0 0 0 0
-3.5176 -0.0329 0.9329 C 0 0 0 0 0 0 0 0 0 0 0 0
-4.8048 0.1515 1.7005 C 0 0 0 0 0 0 0 0 0 0 0 0
-5.7774 -0.9731 1.4184 C 0 0 1 0 0 0 0 0 0 0 0 0
-5.3019 -2.1481 2.0599 O 0 0 0 0 0 0 0 0 0 0 0 0
-7.1373 -0.6551 1.9965 C 0 0 0 0 0 0 0 0 0 0 0 0
-7.8260 0.4447 1.2219 C 0 0 0 0 0 0 0 0 0 0 0 0
-8.5494 -0.1104 0.0516 C 0 0 0 0 0 0 0 0 0 0 0 0
-8.3227 0.3148 -1.1930 C 0 0 0 0 0 0 0 0 0 0 0 0
-9.0185 -0.2021 -2.3344 C 0 0 0 0 0 0 0 0 0 0 0 0
-10.2660 0.0774 -2.7216 C 0 0 0 0 0 0 0 0 0 0 0 0
-11.1425 0.9751 -2.0626 C 0 0 0 0 0 0 0 0 0 0 0 0
-11.8870 1.7343 -1.5055 C 0 0 0 0 0 0 0 0 0 0 0 0
-12.8387 2.7083 -0.7871 C 0 0 0 0 0 0 0 0 0 0 0 0
-13.5802 3.4678 -0.2264 C 0 0 0 0 0 0 0 0 0 0 0 0
-14.4618 4.3614 0.4284 C 0 0 0 0 0 0 0 0 0 0 0 0
-14.0930 5.0226 1.5260 C 0 0 0 0 0 0 0 0 0 0 0 0
-15.0039 5.9613 2.2229 C 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 1 0
3 4 1 0
4 5 1 1
4 6 1 0
6 7 1 0
7 8 1 0
8 9 2 0
9 10 1 0
10 11 2 0
11 12 1 0
12 13 3 0
13 14 1 0
14 15 3 0
15 16 1 0
16 17 2 0
17 18 1 0
18 19 1 0
19 20 1 0
20 21 1 0
21 22 1 0
22 23 1 0
23 24 1 1
23 25 1 0
25 26 1 0
26 27 1 0
27 28 2 0
28 29 1 0
29 30 2 0
30 31 1 0
31 32 3 0
32 33 1 0
33 34 3 0
34 35 1 0
35 36 2 0
36 37 1 0
M END000

View File

@@ -0,0 +1,15 @@
RDKit 3D
5 4 0 0 0 0 0 0 0 0999 V2000
2.0042 0.0964 -0.1742 N 0 0 0 0 0 0 0 0 0 0 0 0
0.7518 -0.6210 0.0694 C 0 0 0 0 0 3 0 0 0 0 0 0
-0.5368 0.0803 0.0249 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.7086 1.2646 -0.2047 O 0 0 0 0 0 0 0 0 0 0 0 0
-1.5107 -0.8203 0.2846 O 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 1 0
3 4 2 0
3 5 1 0
M RAD 1 2 2
M END000

View File

@@ -0,0 +1,14 @@
RDKit 2D
5 4 0 0 0 0 0 0 0 0999 V2000
1.2990 2.2500 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
1.2990 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.5981 -0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
3.8971 0.7500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 1 1
2 4 1 0
4 5 2 0
M END000

View File

@@ -0,0 +1,14 @@
RDKit 2D
5 4 0 0 0 0 0 0 0 0999 V2000
3.8971 0.7500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
2.5981 -0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.5981 -1.5000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
1.2990 0.7500 0.0000 C 0 0 0 0 0 3 0 0 0 0 0 0
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 2 0
2 4 1 0
4 5 1 6
M END000

View File

@@ -0,0 +1,50 @@
RDKit 2D
22 23 0 0 0 0 0 0 0 0999 V2000
3.7500 -1.2990 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
3.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.5000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.7500 -1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.7500 -1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.5000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-3.0000 0.0000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
-0.7500 1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.5000 2.5981 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
-0.7500 3.8971 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.7500 1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.5000 2.5981 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
3.0000 2.5981 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
3.7500 3.8971 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
5.2500 3.8971 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
6.0000 2.5981 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
7.5000 2.5981 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
8.2500 1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
7.5000 -0.0000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
8.2500 3.8971 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
7.5000 5.1962 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
6.0000 5.1962 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1 2 2 0
2 3 1 0
3 4 2 0
4 5 1 0
5 6 2 0
6 7 1 0
6 8 1 0
8 9 1 0
9 10 1 0
8 11 2 0
11 12 1 0
12 13 1 0
13 14 1 0
14 15 1 0
15 16 2 0
16 17 1 0
17 18 1 0
18 19 2 0
17 20 2 0
20 21 1 0
21 22 2 0
11 3 1 0
22 15 1 0
M END000

View File

@@ -0,0 +1,50 @@
RDKit 3D
22 23 0 0 0 0 0 0 0 0999 V2000
-3.7646 0.6326 -2.9889 O 0 0 0 0 0 0 0 0 0 0 0 0
-3.0141 0.1972 -2.1301 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.2591 1.0489 -1.2025 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.2239 2.4220 -1.4385 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.4992 3.2449 -0.5860 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.8336 2.6915 0.5038 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.0922 3.5409 1.2739 O 0 0 0 0 0 0 0 0 0 0 0 0
-0.8900 1.3174 0.7703 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.2429 0.7170 1.8206 O 0 0 0 0 0 0 0 0 0 0 0 0
-0.4392 1.4672 3.0170 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.5881 0.4755 -0.1119 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.6348 -1.0028 0.1378 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.0823 -1.6866 -0.9843 O 0 0 0 0 0 0 0 0 0 0 0 0
-0.2777 -2.7554 -0.4938 C 0 0 0 0 0 0 0 0 0 0 0 0
1.1372 -2.2927 -0.3858 C 0 0 0 0 0 0 0 0 0 0 0 0
1.4880 -1.4515 0.6638 C 0 0 0 0 0 0 0 0 0 0 0 0
2.7597 -0.9026 0.7230 C 0 0 0 0 0 0 0 0 0 0 0 0
3.0556 0.1042 1.7376 C 0 0 0 0 0 0 0 0 0 0 0 0
2.1970 0.5556 2.4827 O 0 0 0 0 0 0 0 0 0 0 0 0
3.7233 -1.2259 -0.2216 C 0 0 0 0 0 0 0 0 0 0 0 0
3.3875 -2.1111 -1.2467 C 0 0 0 0 0 0 0 0 0 0 0 0
2.0933 -2.6313 -1.3405 C 0 0 0 0 0 0 0 0 0 0 0 0
1 2 2 0
2 3 1 0
3 4 2 0
4 5 1 0
5 6 2 0
6 7 1 0
6 8 1 0
8 9 1 0
9 10 1 0
8 11 2 0
11 12 1 0
12 13 1 0
13 14 1 0
14 15 1 0
15 16 2 0
16 17 1 0
17 18 1 0
18 19 2 0
17 20 2 0
20 21 1 0
21 22 2 0
11 3 1 0
22 15 1 0
M END000

View File

@@ -0,0 +1,15 @@
RDKit 3D
5 4 0 0 0 0 0 0 0 0999 V2000
-1.4663 0.7934 0.5063 O 0 0 0 0 0 0 0 0 0 0 0 0
-0.5415 -0.0358 -0.0267 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.7786 -1.0371 -0.6791 O 0 0 0 0 0 0 0 0 0 0 0 0
0.7864 0.4846 0.3200 C 0 0 0 0 0 3 0 0 0 0 0 0
2.0000 -0.2051 -0.1205 N 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 2 0
2 4 1 0
4 5 1 0
M RAD 1 4 2
M END000

View File

@@ -0,0 +1,14 @@
RDKit 2D
5 4 0 0 0 0 0 0 0 0999 V2000
-1.2990 0.7500 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.2990 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.2990 2.2500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
2.5981 -0.0000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 1 0
3 4 2 0
3 5 1 0
M END000

View File

@@ -0,0 +1,82 @@
RDKit 3D
38 39 0 0 0 0 0 0 0 0999 V2000
-11.2932 -1.8023 1.3473 C 0 0 0 0 0 0 0 0 0 0 0 0
-11.4584 -0.8987 0.1419 C 0 0 0 0 0 0 0 0 0 0 0 0
-12.9377 -0.5641 0.0413 C 0 0 0 0 0 0 0 0 0 0 0 0
-13.2031 0.7673 -0.6213 C 0 0 0 0 0 0 0 0 0 0 0 0
-12.4469 1.8640 0.0979 C 0 0 0 0 0 0 0 0 0 0 0 0
-10.9891 1.5506 0.1952 C 0 0 0 0 0 0 0 0 0 0 0 0
-10.1062 2.7517 0.2530 C 0 0 0 0 0 0 0 0 0 0 0 0
-10.5255 0.2859 0.1990 C 0 0 0 0 0 0 0 0 0 0 0 0
-9.1004 0.0409 0.1971 C 0 0 0 0 0 0 0 0 0 0 0 0
-8.4909 -1.1366 0.0345 C 0 0 0 0 0 0 0 0 0 0 0 0
-7.0674 -1.3403 0.0395 C 0 0 0 0 0 0 0 0 0 0 0 0
-6.6424 -2.6487 0.6085 C 0 0 0 0 0 0 0 0 0 0 0 0
-6.2106 -0.4517 -0.4773 C 0 0 0 0 0 0 0 0 0 0 0 0
-4.7879 -0.6053 -0.5282 C 0 0 0 0 0 0 0 0 0 0 0 0
-4.0014 0.3338 -1.0592 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.5674 0.2667 -1.1490 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.0029 0.9594 -2.3402 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.8119 -0.3194 -0.2116 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.3811 -0.3993 -0.1932 C 0 0 0 0 0 0 0 0 0 0 0 0
0.3975 0.6310 0.1436 C 0 0 0 0 0 0 0 0 0 0 0 0
1.8257 0.5299 0.1420 C 0 0 0 0 0 0 0 0 0 0 0 0
2.6696 1.5158 0.4688 C 0 0 0 0 0 0 0 0 0 0 0 0
2.2185 2.8821 0.8525 C 0 0 0 0 0 0 0 0 0 0 0 0
4.0989 1.3642 0.4142 C 0 0 0 0 0 0 0 0 0 0 0 0
4.7677 0.2423 0.6912 C 0 0 0 0 0 0 0 0 0 0 0 0
6.1958 0.1796 0.6087 C 0 0 0 0 0 0 0 0 0 0 0 0
6.9390 -0.9030 0.8662 C 0 0 0 0 0 0 0 0 0 0 0 0
6.3639 -2.2002 1.3167 C 0 0 0 0 0 0 0 0 0 0 0 0
8.3751 -0.8916 0.7935 C 0 0 0 0 0 0 0 0 0 0 0 0
9.0962 -0.2027 -0.0967 C 0 0 0 0 0 0 0 0 0 0 0 0
10.5408 -0.1972 -0.1577 C 0 0 0 0 0 0 0 0 0 0 0 0
11.3266 0.2080 0.8594 C 0 0 0 0 0 0 0 0 0 0 0 0
10.8050 0.6448 2.1868 C 0 0 0 0 0 0 0 0 0 0 0 0
12.8150 0.2892 0.7365 C 0 0 0 0 0 0 0 0 0 0 0 0
13.2704 0.4200 -0.7016 C 0 0 0 0 0 0 0 0 0 0 0 0
12.6264 -0.6520 -1.5493 C 0 0 0 0 0 0 0 0 0 0 0 0
11.1099 -0.5894 -1.4972 C 0 0 0 0 0 0 0 0 0 0 0 0
10.5824 -1.9249 -1.9791 C 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 1 0
3 4 1 0
4 5 1 0
5 6 1 0
6 7 1 0
6 8 2 0
8 9 1 0
9 10 2 0
10 11 1 0
11 12 1 0
11 13 2 0
13 14 1 0
14 15 2 0
15 16 1 0
16 17 1 0
16 18 2 0
18 19 1 0
19 20 2 0
20 21 1 0
21 22 2 0
22 23 1 0
22 24 1 0
24 25 2 0
25 26 1 0
26 27 2 0
27 28 1 0
27 29 1 0
29 30 2 0
30 31 1 0
31 32 2 0
32 33 1 0
32 34 1 0
34 35 1 0
35 36 1 0
36 37 1 0
37 38 1 0
8 2 1 0
37 31 1 0
M END000

View File

@@ -0,0 +1,14 @@
RDKit 2D
5 4 0 0 0 0 0 0 0 0999 V2000
1.2990 2.2500 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
1.2990 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.5981 -0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
3.8971 0.7500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 1 6
2 4 1 0
4 5 2 0
M END000

View File

@@ -0,0 +1,82 @@
RDKit 3D
38 39 0 0 0 0 0 0 0 0999 V2000
-10.3953 2.3305 -0.8809 C 0 0 0 0 0 0 0 0 0 0 0 0
-11.0424 1.2388 -0.0542 C 0 0 0 0 0 0 0 0 0 0 0 0
-12.5407 1.4868 -0.0599 C 0 0 0 0 0 0 0 0 0 0 0 0
-13.3228 0.2567 0.3380 C 0 0 0 0 0 0 0 0 0 0 0 0
-13.0059 -0.8881 -0.6013 C 0 0 0 0 0 0 0 0 0 0 0 0
-11.5350 -1.1042 -0.7658 C 0 0 0 0 0 0 0 0 0 0 0 0
-11.1714 -2.4701 -1.2416 C 0 0 0 0 0 0 0 0 0 0 0 0
-10.6311 -0.1410 -0.4996 C 0 0 0 0 0 0 0 0 0 0 0 0
-9.2025 -0.3404 -0.5957 C 0 0 0 0 0 0 0 0 0 0 0 0
-8.5130 -1.2304 0.1249 C 0 0 0 0 0 0 0 0 0 0 0 0
-7.0929 -1.4422 0.0435 C 0 0 0 0 0 0 0 0 0 0 0 0
-6.6739 -2.8492 0.2908 C 0 0 0 0 0 0 0 0 0 0 0 0
-6.2262 -0.4463 -0.1750 C 0 0 0 0 0 0 0 0 0 0 0 0
-4.8026 -0.5874 -0.2375 C 0 0 0 0 0 0 0 0 0 0 0 0
-4.0031 0.4588 -0.4587 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.5677 0.4065 -0.5372 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.9763 1.4015 -1.4738 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.8343 -0.4295 0.2087 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.4050 -0.5317 0.2283 C 0 0 0 0 0 0 0 0 0 0 0 0
0.3797 0.3570 0.8412 C 0 0 0 0 0 0 0 0 0 0 0 0
1.8060 0.2302 0.8376 C 0 0 0 0 0 0 0 0 0 0 0 0
2.6593 1.0766 1.4262 C 0 0 0 0 0 0 0 0 0 0 0 0
2.2205 2.2649 2.2089 C 0 0 0 0 0 0 0 0 0 0 0 0
4.0839 0.8779 1.4119 C 0 0 0 0 0 0 0 0 0 0 0 0
4.7779 0.3376 0.4074 C 0 0 0 0 0 0 0 0 0 0 0 0
6.1993 0.1777 0.4757 C 0 0 0 0 0 0 0 0 0 0 0 0
6.9638 -0.3586 -0.4829 C 0 0 0 0 0 0 0 0 0 0 0 0
6.4151 -0.9030 -1.7553 C 0 0 0 0 0 0 0 0 0 0 0 0
8.3858 -0.5184 -0.3408 C 0 0 0 0 0 0 0 0 0 0 0 0
9.1988 0.3376 0.2844 C 0 0 0 0 0 0 0 0 0 0 0 0
10.6295 0.2088 0.4500 C 0 0 0 0 0 0 0 0 0 0 0 0
11.3443 1.2399 0.9405 C 0 0 0 0 0 0 0 0 0 0 0 0
10.7335 2.5226 1.3955 C 0 0 0 0 0 0 0 0 0 0 0 0
12.8345 1.1987 1.0424 C 0 0 0 0 0 0 0 0 0 0 0 0
13.4357 0.2711 0.0080 C 0 0 0 0 0 0 0 0 0 0 0 0
12.8077 -1.0986 0.1144 C 0 0 0 0 0 0 0 0 0 0 0 0
11.2917 -1.0724 0.0060 C 0 0 0 0 0 0 0 0 0 0 0 0
10.7750 -2.2689 0.7795 C 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 1 0
3 4 1 0
4 5 1 0
5 6 1 0
6 7 1 0
6 8 2 0
8 9 1 0
9 10 2 0
10 11 1 0
11 12 1 0
11 13 2 0
13 14 1 0
14 15 2 0
15 16 1 0
16 17 1 0
16 18 2 0
18 19 1 0
19 20 2 0
20 21 1 0
21 22 2 0
22 23 1 0
22 24 1 0
24 25 2 0
25 26 1 0
26 27 2 0
27 28 1 0
27 29 1 0
29 30 2 0
30 31 1 0
31 32 2 0
32 33 1 0
32 34 1 0
34 35 1 0
35 36 1 0
36 37 1 0
37 38 1 0
8 2 1 0
37 31 1 0
M END000

View File

@@ -0,0 +1,82 @@
RDKit 2D
38 39 0 0 0 0 0 0 0 0999 V2000
3.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.5000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.7500 -1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.7500 -1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.5000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.7500 1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.5000 2.5981 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.7500 1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.5000 2.5981 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
3.0000 2.5981 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
3.7500 3.8971 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
3.0000 5.1962 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
5.2500 3.8971 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
6.0000 5.1962 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
7.5000 5.1962 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
8.2500 6.4952 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
7.5000 7.7942 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
9.7500 6.4952 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
10.5000 7.7942 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
12.0000 7.7942 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
12.7500 9.0933 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
14.2500 9.0933 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
15.0000 7.7942 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
15.0000 10.3923 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
16.5000 10.3923 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
17.2500 11.6913 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
18.7500 11.6913 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
19.5000 10.3923 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
19.5000 12.9904 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
21.0000 12.9904 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
21.7500 14.2894 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
23.2500 14.2894 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
24.0000 12.9904 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
24.0000 15.5885 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
23.2500 16.8875 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
21.7500 16.8875 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
21.0000 15.5885 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
19.5000 15.5885 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 1 0
3 4 1 0
4 5 1 0
5 6 1 0
6 7 1 0
6 8 2 0
8 9 1 0
9 10 2 0
10 11 1 0
11 12 1 0
11 13 2 0
13 14 1 0
14 15 2 0
15 16 1 0
16 17 1 0
16 18 2 0
18 19 1 0
19 20 2 0
20 21 1 0
21 22 2 0
22 23 1 0
22 24 1 0
24 25 2 0
25 26 1 0
26 27 2 0
27 28 1 0
27 29 1 0
29 30 2 0
30 31 1 0
31 32 2 0
32 33 1 0
32 34 1 0
34 35 1 0
35 36 1 0
36 37 1 0
37 38 1 0
8 2 1 0
37 31 1 0
M END000

View File

@@ -0,0 +1,35 @@
// Copyright 2020 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include <fuzzer/FuzzedDataProvider.h>
#include <memory>
#include <sstream>
#include <string>
#include <GraphMol/MolPickler.h>
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
FuzzedDataProvider fdp(data, size);
std::string serializedMolString = fdp.ConsumeRemainingBytesAsString();
try {
RDKit::ROMol result;
RDKit::MolPickler::molFromPickle(serializedMolString, result);
} catch (...) {
}
return 0;
}

View File

@@ -0,0 +1,35 @@
// Copyright 2020 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include <fuzzer/FuzzedDataProvider.h>
#include <iostream>
#include <GraphMol/GraphMol.h>
#include <GraphMol/SmilesParse/SmilesParse.h>
// fuzz_target.cc
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
FuzzedDataProvider fdp(Data, Size);
const bool sanitize = fdp.ConsumeIntegralInRange(0, 1);
std::string smiles_string = fdp.ConsumeRemainingBytesAsString();
try {
std::shared_ptr<RDKit::ROMol> mol3(
RDKit::SmilesToMol(smiles_string, 0, sanitize));
} catch (...) {
}
return 0; // Non-zero return values are reserved for future use.
}

View File

@@ -0,0 +1,354 @@
# Dictionary for the SMILES format
# https://en.wikipedia.org/wiki/Simplified_molecular-input_line-entry_system
# Entries are taken from the examples on the wikipedia page
# Bonds
"."
"-"
"="
"#"
"$"
":"
"/"
"\\"
# Some molecules
"[H]O[H]"
"O"
"[OH2]"
"[NH4+]"
"[Ti+4]"
"[Ti++++]"
"[OH-]"
"[OH3+]"
"[Co+3]"
"[Co+++]"
# Molecules with special bonds
"O=C=O"
"C#N"
"[Ga-]$[As+]"
"[Na+].[Cl-]"
# Molecules with rings
"C1CCCCC1"
"O1CCOCC1"
"C1CCCC2C1CCCC2"
"C1CCCC2CCCCC12"
"C1=CC1"
"C=1CC1"
"C1CC=1"
"C=1CC=1"
# Not a ring, but can nevertheless be used
"C1.C2.C12"
# Aromatic molecules
"C1=CC=CC=C1"
"C:1:C:C:C:C:C1"
"c1ccccc1"
"n1ccccc1"
"o1cccc1"
"n1c[nH]cc1"
"c1ccccc1-c2ccccc2"
# Branching
"CCC(=O)O"
"FC(F)F"
"COc(c1)cccc1C#N"
"COc(cc1)ccc1C#N"
"FC(Br)(Cl)F"
"BrC(F)(F)Cl"
"C(F)(Cl)(F)Br"
# Stereochemistry
"F/C=C/F"
"F/C=C\\F"
"C/C=C/C=C/C"
"CC1CCC/C(C)=C1/C=C/C(C)=C/C=C/C(C)=C/C=C/C=C(C)/C=C/C=C(C)/C=C/C2=C(C)/CCCC2(C)C"
"NC(C)C(=O)O"
"N[CH](C)C(=O)O"
"N[C@@H](C)C(=O)O"
"N[C@H](C)C(=O)O"
"NC(C(=O)O)C"
"N[C@H](C(=O)O)C"
"C[C@H](N)C(=O)O"
"OC(=O)[C@@H](N)C"
"OC(=O)[C@H](C)N"
"[C@@H](C)(N)C(=O)O"
# Isotopes
"[14c]1ccccc1"
"[2H]C(Cl)(Cl)Cl"
"[1H]"
"[2H]"
"[3H]"
# Invalid molecules
"C=1CC-1"
"CCC=(O)O"
"[4H]"
"[4.5H]"
"[4,5H]"
"[0H]"
"[-1H]"
# Other examples
"N#N"
"[Cu+2].[O-]S(=O)(=O)[O-]"
"CN=C=O"
"O=Cc1ccc(O)c(OC)c1COCc1cc(C=O)ccc1O"
"CC(=O)NCCC1=CNc2c1cc(OC)cc2CC(=O)NCCc1c[nH]c2ccc(OC)cc12"
"CCc(c1)ccc2[n+]1ccc3c2[nH]c4c3cccc4CCc1c[n+]2ccc3c4ccccc4[nH]c3c2cc1"
"CN1CCC[C@H]1c2cccnc2"
"CCC[C@@H](O)CC\\C=C\\C=C\\C#CC#C\\C=C\\COCCC[C@@H](O)CC/C=C/C=C/C#CC#C/C=C/CO"
"CC1=C(C(=O)C[C@@H]1OC(=O)[C@@H]2[C@H](C2(C)C)/C=C(\\C)/C(=O)OC)C/C=C\\C=C"
"O1C=C[C@H]([C@H]1O2)c3c2cc(OC)c4c3OC(=O)C5=C4CCC(=O)5"
"OC[C@@H](O1)[C@@H](O)[C@H](O)[C@@H](O)[C@@H](O)1"
"OC[C@@H](O1)[C@@H](O)[C@H](O)[C@@H]2[C@@H]1c3c(O)c(OC)c(O)cc3C(=O)O2"
"CC(=O)OCCC(/C)=C\\C[C@H](C(C)=C)CCC=C"
"CC[C@H](O1)CC[C@@]12CCCO2"
"CC(C)[C@@]12C[C@@H]1[C@@H](C)C(=O)C2"
"OCCc1c(C)[n+](cs1)Cc2cnc(C)nc2N"
"CC(C)(O1)C[C@@H](O)[C@@]1(O2)[C@@H](C)[C@@H]3CC=C4[C@]3(C2)C(=O)C[C@H]5[C@H]4CC[C@@H](C6)[C@]5(C)Cc(n7)c6nc(C[C@@]89(C))c7C[C@@H]8CC[C@@H]%10[C@@H]9C[C@@H](O)[C@@]%11(C)C%10=C[C@H](O%12)[C@]%11(O)[C@H](C)[C@]%12(O%13)[C@H](O)C[C@@]%13(C)CO"
# Elements
"H "
"He "
"Li "
"Be "
"B "
"C "
"N "
"O "
"F "
"Ne "
"Na "
"Mg "
"Al "
"Si "
"P "
"S "
"Cl "
"Ar "
"K "
"Ca "
"Sc "
"Ti "
"V "
"Cr "
"Mn "
"Fe "
"Co "
"Ni "
"Cu "
"Zn "
"Ga "
"Ge "
"As "
"Se "
"Br "
"Kr "
"Rb "
"Sr "
"Y "
"Zr "
"Nb "
"Mo "
"Tc "
"Ru "
"Rh "
"Pd "
"Ag "
"Cd "
"In "
"Sn "
"Sb "
"Te "
"I "
"Xe "
"Cs "
"Ba "
"La "
"Ce "
"Pr "
"Nd "
"Pm "
"Sm "
"Eu "
"Gd "
"Tb "
"Dy "
"Ho "
"Er "
"Tm "
"Yb "
"Lu "
"Hf "
"Ta "
"W "
"Re "
"Os "
"Ir "
"Pt "
"Au "
"Hg "
"Tl "
"Pb "
"Bi "
"Po "
"At "
"Rn "
"Fr "
"Ra "
"Ac "
"Th "
"Pa "
"U "
"Np "
"Pu "
"Am "
"Cm "
"Bk "
"Cf "
"Es "
"Fm "
"Md "
"No "
"Lr "
"Rf "
"Db "
"Sg "
"Bh "
"Hs "
"Mt "
"Ds "
"Rg "
"Cn "
"Nh "
"Fl "
"Mc "
"Lv "
"Ts "
"Og "
"Uue"
"[H] "
"[He] "
"[Li] "
"[Be] "
"[B] "
"[C] "
"[N] "
"[O] "
"[F] "
"[Ne] "
"[Na] "
"[Mg] "
"[Al] "
"[Si] "
"[P] "
"[S] "
"[Cl] "
"[Ar] "
"[K] "
"[Ca] "
"[Sc] "
"[Ti] "
"[V] "
"[Cr] "
"[Mn] "
"[Fe] "
"[Co] "
"[Ni] "
"[Cu] "
"[Zn] "
"[Ga] "
"[Ge] "
"[As] "
"[Se] "
"[Br] "
"[Kr] "
"[Rb] "
"[Sr] "
"[Y] "
"[Zr] "
"[Nb] "
"[Mo] "
"[Tc] "
"[Ru] "
"[Rh] "
"[Pd] "
"[Ag] "
"[Cd] "
"[In] "
"[Sn] "
"[Sb] "
"[Te] "
"[I] "
"[Xe] "
"[Cs] "
"[Ba] "
"[La] "
"[Ce] "
"[Pr] "
"[Nd] "
"[Pm] "
"[Sm] "
"[Eu] "
"[Gd] "
"[Tb] "
"[Dy] "
"[Ho] "
"[Er] "
"[Tm] "
"[Yb] "
"[Lu] "
"[Hf] "
"[Ta] "
"[W] "
"[Re] "
"[Os] "
"[Ir] "
"[Pt] "
"[Au] "
"[Hg] "
"[Tl] "
"[Pb] "
"[Bi] "
"[Po] "
"[At] "
"[Rn] "
"[Fr] "
"[Ra] "
"[Ac] "
"[Th] "
"[Pa] "
"[U] "
"[Np] "
"[Pu] "
"[Am] "
"[Cm] "
"[Bk] "
"[Cf] "
"[Es] "
"[Fm] "
"[Md] "
"[No] "
"[Lr] "
"[Rf] "
"[Db] "
"[Sg] "
"[Bh] "
"[Hs] "
"[Mt] "
"[Ds] "
"[Rg] "
"[Cn] "
"[Nh] "
"[Fl] "
"[Mc] "
"[Lv] "
"[Ts] "
"[Og] "
"[Uue]"

View File

@@ -0,0 +1 @@
c1ccccc1-c2ccccc20

View File

@@ -0,0 +1 @@
FC(Br)(Cl)F0

View File

@@ -0,0 +1 @@
C1=CC=CC=C10

View File

@@ -0,0 +1 @@
NC(C)C(=O)O0

View File

@@ -0,0 +1 @@
OC(=O)[C@H](C)N0

View File

@@ -0,0 +1 @@
[Cu+2].[O-]S(=O)(=O)[O-]0

View File

@@ -0,0 +1 @@
OC(=O)[C@@H](N)C0

View File

@@ -0,0 +1 @@
CC(=O)OCCC(/C)=C\\C[C@H](C(C)=C)CCC=C0

View File

@@ -0,0 +1 @@
C[C@H](N)C(=O)O0

View File

@@ -0,0 +1 @@
C1CCCC2C1CCCC20

View File

@@ -0,0 +1 @@
CC(C)(O1)C[C@@H](O)[C@@]1(O2)[C@@H](C)[C@@H]3CC=C4[C@]3(C2)C(=O)C[C@H]5[C@H]4CC[C@@H](C6)[C@]5(C)Cc(n7)c6nc(C[C@@]89(C))c7C[C@@H]8CC[C@@H]%10[C@@H]9C[C@@H](O)[C@@]%11(C)C%10=C[C@H](O%12)[C@]%11(O)[C@H](C)[C@]%12(O%13)[C@H](O)C[C@@]%13(C)CO0

View File

@@ -0,0 +1 @@
[C@@H](C)(N)C(=O)O0

View File

@@ -0,0 +1 @@
O1C=C[C@H]([C@H]1O2)c3c2cc(OC)c4c3OC(=O)C5=C4CCC(=O)50

View File

@@ -0,0 +1 @@
[14c]1ccccc10

View File

@@ -0,0 +1 @@
CC1=C(C(=O)C[C@@H]1OC(=O)[C@@H]2[C@H](C2(C)C)/C=C(\\C)/C(=O)OC)C/C=C\\C=C0

View File

@@ -0,0 +1 @@
NC(C(=O)O)C0

View File

@@ -0,0 +1 @@
[Ga-]$[As+]0

View File

@@ -0,0 +1 @@
N[C@H](C(=O)O)C0

View File

@@ -0,0 +1 @@
N[C@@H](C)C(=O)O0

View File

@@ -0,0 +1 @@
OC[C@@H](O1)[C@@H](O)[C@H](O)[C@@H]2[C@@H]1c3c(O)c(OC)c(O)cc3C(=O)O20

View File

@@ -0,0 +1 @@
CC(=O)NCCC1=CNc2c1cc(OC)cc2CC(=O)NCCc1c[nH]c2ccc(OC)cc120

View File

@@ -0,0 +1 @@
C/C=C/C=C/C0

View File

@@ -0,0 +1 @@
N[CH](C)C(=O)O0

Some files were not shown because too many files have changed in this diff Show More