ketcher-react 3.12.0-dev.1 → 3.12.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/cjs/index.css +1 -1
  2. package/dist/cjs/index.css.map +1 -1
  3. package/dist/cjs/index.js +1226 -524
  4. package/dist/cjs/index.js.map +1 -1
  5. package/dist/cjs/{index.modern-b232add2.js → index.modern-0386b391.js} +4 -3
  6. package/dist/cjs/index.modern-0386b391.js.map +1 -0
  7. package/dist/cjs/script/editor/Editor.d.ts +19 -2
  8. package/dist/cjs/script/editor/tool/sgroup.d.ts +17 -0
  9. package/dist/cjs/script/editor/utils/customOnChangeHandler.test.d.ts +16 -0
  10. package/dist/cjs/script/ui/data/schema/sdata-schema.d.ts +1 -1
  11. package/dist/cjs/script/ui/state/functionalGroups/index.d.ts +1 -1
  12. package/dist/cjs/script/ui/state/notifications/index.d.ts +17 -0
  13. package/dist/cjs/script/ui/state/saltsAndSolvents/index.d.ts +1 -1
  14. package/dist/cjs/script/ui/views/components/ContextMenu/hooks/useMarkAs.d.ts +9 -0
  15. package/dist/cjs/script/ui/views/components/MonomerCreationWizard/MonomerCreationWizard.constants.d.ts +2 -0
  16. package/dist/cjs/script/ui/views/components/MonomerCreationWizard/MonomerCreationWizard.types.d.ts +6 -1
  17. package/dist/index.css +1 -1
  18. package/dist/index.css.map +1 -1
  19. package/dist/index.js +1228 -526
  20. package/dist/index.js.map +1 -1
  21. package/dist/{index.modern-06d576e1.js → index.modern-3f8330b9.js} +5 -4
  22. package/dist/index.modern-3f8330b9.js.map +1 -0
  23. package/dist/script/editor/Editor.d.ts +19 -2
  24. package/dist/script/editor/tool/sgroup.d.ts +17 -0
  25. package/dist/script/editor/utils/customOnChangeHandler.test.d.ts +16 -0
  26. package/dist/script/ui/data/schema/sdata-schema.d.ts +1 -1
  27. package/dist/script/ui/state/functionalGroups/index.d.ts +1 -1
  28. package/dist/script/ui/state/notifications/index.d.ts +17 -0
  29. package/dist/script/ui/state/saltsAndSolvents/index.d.ts +1 -1
  30. package/dist/script/ui/views/components/ContextMenu/hooks/useMarkAs.d.ts +9 -0
  31. package/dist/script/ui/views/components/MonomerCreationWizard/MonomerCreationWizard.constants.d.ts +2 -0
  32. package/dist/script/ui/views/components/MonomerCreationWizard/MonomerCreationWizard.types.d.ts +6 -1
  33. package/package.json +1 -1
  34. package/dist/cjs/index.modern-b232add2.js.map +0 -1
  35. package/dist/index.modern-06d576e1.js.map +0 -1
package/dist/cjs/index.js CHANGED
@@ -737,8 +737,8 @@ function exec(action) {
737
737
  return enabled;
738
738
  }
739
739
 
740
- function ownKeys$1F(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
741
- function _objectSpread$1F(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1F(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1F(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
740
+ function ownKeys$1G(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
741
+ function _objectSpread$1G(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1G(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1G(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
742
742
  var MeasurementUnits;
743
743
  (function (MeasurementUnits) {
744
744
  MeasurementUnits["Px"] = "px";
@@ -1080,7 +1080,7 @@ var optionsSchema = {
1080
1080
  title: 'Settings',
1081
1081
  type: 'object',
1082
1082
  required: [],
1083
- properties: _objectSpread$1F(_objectSpread$1F(_objectSpread$1F(_objectSpread$1F(_objectSpread$1F({}, editor), render), server), debug), miew)
1083
+ properties: _objectSpread$1G(_objectSpread$1G(_objectSpread$1G(_objectSpread$1G(_objectSpread$1G({}, editor), render), server), debug), miew)
1084
1084
  };
1085
1085
  function getDefaultOptions() {
1086
1086
  if (!optionsSchema.properties) return {};
@@ -1263,8 +1263,8 @@ function prefetchRender(tmpls, baseUrl, cacheEl) {
1263
1263
  });
1264
1264
  }
1265
1265
 
1266
- function ownKeys$1E(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1267
- function _objectSpread$1E(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1E(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1E(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1266
+ function ownKeys$1F(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1267
+ function _objectSpread$1F(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1F(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1F(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1268
1268
  var initOptionsState = {
1269
1269
  app: {
1270
1270
  server: false,
@@ -1294,7 +1294,7 @@ var initOptionsState = {
1294
1294
  getServerSettings: function getServerSettings() {
1295
1295
  var seriliazedServerOptions = getSerilizedServerOptions(this.settings);
1296
1296
  var defaultServerOptions = fp.pick(SERVER_OPTIONS, this.settings);
1297
- return _objectSpread$1E(_objectSpread$1E({}, defaultServerOptions), seriliazedServerOptions);
1297
+ return _objectSpread$1F(_objectSpread$1F({}, defaultServerOptions), seriliazedServerOptions);
1298
1298
  }
1299
1299
  };
1300
1300
  function getSerilizedServerOptions(options) {
@@ -1327,7 +1327,7 @@ function getSerilizedServerOptions(options) {
1327
1327
  'render-stereo-style': renderStereoStyle
1328
1328
  };
1329
1329
  if (options.imageResolution === '600') {
1330
- newOptions = _objectSpread$1E(_objectSpread$1E({}, newOptions), {}, {
1330
+ newOptions = _objectSpread$1F(_objectSpread$1F({}, newOptions), {}, {
1331
1331
  'render-output-sheet-width': 11,
1332
1332
  'render-output-sheet-height': 8.5
1333
1333
  });
@@ -1405,29 +1405,29 @@ function optionsReducer() {
1405
1405
  var action = arguments.length > 1 ? arguments[1] : undefined;
1406
1406
  var type = action.type,
1407
1407
  data = action.data;
1408
- if (type === 'APP_OPTIONS') return _objectSpread$1E(_objectSpread$1E({}, state), {}, {
1409
- app: _objectSpread$1E(_objectSpread$1E({}, state.app), data)
1408
+ if (type === 'APP_OPTIONS') return _objectSpread$1F(_objectSpread$1F({}, state), {}, {
1409
+ app: _objectSpread$1F(_objectSpread$1F({}, state.app), data)
1410
1410
  });
1411
1411
  if (type === 'SAVE_SETTINGS') {
1412
- return _objectSpread$1E(_objectSpread$1E({}, state), {}, {
1413
- settings: _objectSpread$1E(_objectSpread$1E({}, state.settings), data)
1412
+ return _objectSpread$1F(_objectSpread$1F({}, state), {}, {
1413
+ settings: _objectSpread$1F(_objectSpread$1F({}, state.settings), data)
1414
1414
  });
1415
1415
  }
1416
- if (type === 'SAVE_CHECK_OPTS') return _objectSpread$1E(_objectSpread$1E({}, state), {}, {
1416
+ if (type === 'SAVE_CHECK_OPTS') return _objectSpread$1F(_objectSpread$1F({}, state), {}, {
1417
1417
  check: data
1418
1418
  });
1419
- if (type === 'CHANGE_ANALYSE') return _objectSpread$1E(_objectSpread$1E({}, state), {}, {
1420
- analyse: _objectSpread$1E(_objectSpread$1E(_objectSpread$1E({}, state.analyse), data), {}, {
1419
+ if (type === 'CHANGE_ANALYSE') return _objectSpread$1F(_objectSpread$1F({}, state), {}, {
1420
+ analyse: _objectSpread$1F(_objectSpread$1F(_objectSpread$1F({}, state.analyse), data), {}, {
1421
1421
  loading: false
1422
1422
  })
1423
1423
  });
1424
- if (type === 'ANALYSE_LOADING') return _objectSpread$1E(_objectSpread$1E({}, state), {}, {
1425
- analyse: _objectSpread$1E(_objectSpread$1E({}, state.analyse), {}, {
1424
+ if (type === 'ANALYSE_LOADING') return _objectSpread$1F(_objectSpread$1F({}, state), {}, {
1425
+ analyse: _objectSpread$1F(_objectSpread$1F({}, state.analyse), {}, {
1426
1426
  loading: true
1427
1427
  })
1428
1428
  });
1429
- if (recognizeActions.includes(type)) return _objectSpread$1E(_objectSpread$1E({}, state), {}, {
1430
- recognize: _objectSpread$1E(_objectSpread$1E({}, state.recognize), data)
1429
+ if (recognizeActions.includes(type)) return _objectSpread$1F(_objectSpread$1F({}, state), {}, {
1430
+ recognize: _objectSpread$1F(_objectSpread$1F({}, state.recognize), data)
1431
1431
  });
1432
1432
  return state;
1433
1433
  }
@@ -1720,8 +1720,8 @@ function firstKeyOf(obj) {
1720
1720
  }
1721
1721
  function getSdataDefault() {
1722
1722
  var schema = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : sdataSchema;
1723
- var context = arguments.length > 1 ? arguments[1] : undefined;
1724
- var fieldName = arguments.length > 2 ? arguments[2] : undefined;
1723
+ var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
1724
+ var fieldName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
1725
1725
  if (schema.key === 'Custom') {
1726
1726
  var _schema$properties$co;
1727
1727
  return (_schema$properties$co = schema.properties[context]) === null || _schema$properties$co === void 0 ? void 0 : _schema$properties$co["default"];
@@ -1731,8 +1731,8 @@ function getSdataDefault() {
1731
1731
  return schema[context][fieldName] ? schema[context][fieldName].properties.fieldValue["default"] : '';
1732
1732
  }
1733
1733
 
1734
- function ownKeys$1D(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1735
- function _objectSpread$1D(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1D(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1D(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1734
+ function ownKeys$1E(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1735
+ function _objectSpread$1E(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1E(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1E(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1736
1736
  var initSdata = function initSdata(schema) {
1737
1737
  var isCustomShema = schema.key === 'Custom';
1738
1738
  var context = isCustomShema ? getSdataDefault(sdataCustomSchema, 'context') : getSdataDefault(sdataSchema);
@@ -1770,7 +1770,7 @@ var onContextChange = function onContextChange(state, payload) {
1770
1770
  var fValue = fieldValue;
1771
1771
  if (fValue === state.result.fieldValue) fValue = getSdataDefault(sdataCustomSchema, 'fieldValue');
1772
1772
  return {
1773
- result: _objectSpread$1D(_objectSpread$1D({}, payload), {}, {
1773
+ result: _objectSpread$1E(_objectSpread$1E({}, payload), {}, {
1774
1774
  context: context,
1775
1775
  fieldName: fieldName,
1776
1776
  fieldValue: fValue
@@ -1784,7 +1784,7 @@ var onFieldNameChange = function onFieldNameChange(state, payload) {
1784
1784
  if (sdataSchema[context][fieldName]) fieldValue = getSdataDefault(sdataSchema, context, fieldName);
1785
1785
  if (fieldValue === state.result.fieldValue && sdataSchema[context][state.result.fieldName]) fieldValue = '';
1786
1786
  return {
1787
- result: _objectSpread$1D(_objectSpread$1D({}, payload), {}, {
1787
+ result: _objectSpread$1E(_objectSpread$1E({}, payload), {}, {
1788
1788
  fieldName: fieldName,
1789
1789
  fieldValue: fieldValue
1790
1790
  })
@@ -1792,29 +1792,29 @@ var onFieldNameChange = function onFieldNameChange(state, payload) {
1792
1792
  };
1793
1793
  function sdataReducer(state, action) {
1794
1794
  if (action.data.result.init) {
1795
- return correctErrors(_objectSpread$1D(_objectSpread$1D({}, state), {}, {
1796
- result: _objectSpread$1D(_objectSpread$1D({}, state.result), action.data.result)
1795
+ return correctErrors(_objectSpread$1E(_objectSpread$1E({}, state), {}, {
1796
+ result: _objectSpread$1E(_objectSpread$1E({}, state.result), action.data.result)
1797
1797
  }), action.data);
1798
1798
  }
1799
1799
  var actionContext = action.data.result.context;
1800
1800
  var actionFieldName = action.data.result.fieldName;
1801
1801
  var newstate = null;
1802
1802
  if (actionContext !== state.result.context) newstate = onContextChange(state, action.data.result);else if (actionFieldName !== state.result.fieldName) newstate = onFieldNameChange(state, action.data.result);
1803
- newstate = newstate || _objectSpread$1D(_objectSpread$1D({}, state), {}, {
1804
- result: _objectSpread$1D(_objectSpread$1D({}, state.result), action.data.result)
1803
+ newstate = newstate || _objectSpread$1E(_objectSpread$1E({}, state), {}, {
1804
+ result: _objectSpread$1E(_objectSpread$1E({}, state.result), action.data.result)
1805
1805
  });
1806
1806
  return correctErrors(newstate, action.data);
1807
1807
  }
1808
1808
  function nucleotideComponentReducer(state, action) {
1809
- return _objectSpread$1D(_objectSpread$1D({}, state), {}, {
1810
- result: _objectSpread$1D(_objectSpread$1D(_objectSpread$1D({}, state.result), action.data.result), {}, {
1809
+ return _objectSpread$1E(_objectSpread$1E({}, state), {}, {
1810
+ result: _objectSpread$1E(_objectSpread$1E(_objectSpread$1E({}, state.result), action.data.result), {}, {
1811
1811
  type: 'nucleotideComponent'
1812
1812
  })
1813
1813
  });
1814
1814
  }
1815
1815
 
1816
- function ownKeys$1C(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1817
- function _objectSpread$1C(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1C(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1C(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1816
+ function ownKeys$1D(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1817
+ function _objectSpread$1D(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1D(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1D(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1818
1818
  var formsState = {
1819
1819
  atomProps: {
1820
1820
  errors: {},
@@ -1944,14 +1944,14 @@ function formReducer(state, action) {
1944
1944
  var newType = (_action$data = action.data) === null || _action$data === void 0 || (_action$data = _action$data.result) === null || _action$data === void 0 ? void 0 : _action$data.type;
1945
1945
  if (newType === 'DAT') return sdataReducer(state, action);
1946
1946
  if (newType === 'SUP' && (state === null || state === void 0 || (_state$result = state.result) === null || _state$result === void 0 ? void 0 : _state$result.type) !== 'nucleotideComponent' && Object.values(ketcherCore.SUPERATOM_CLASS).includes((_action$data2 = action.data) === null || _action$data2 === void 0 || (_action$data2 = _action$data2.result) === null || _action$data2 === void 0 ? void 0 : _action$data2["class"])) return nucleotideComponentReducer(state, action);
1947
- return _objectSpread$1C(_objectSpread$1C({}, state), action.data);
1947
+ return _objectSpread$1D(_objectSpread$1D({}, state), action.data);
1948
1948
  }
1949
1949
 
1950
1950
  var INDIGO_VERIFICATION = 'INDIGO_VERIFICATION';
1951
1951
  var ANALYZING_FILE = 'ANALYZING_FILE';
1952
1952
 
1953
- function ownKeys$1B(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1954
- function _objectSpread$1B(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1B(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1B(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1953
+ function ownKeys$1C(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1954
+ function _objectSpread$1C(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1C(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1C(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1955
1955
  function indigoVerification(data) {
1956
1956
  return {
1957
1957
  type: INDIGO_VERIFICATION,
@@ -1976,13 +1976,13 @@ function requestReducer () {
1976
1976
  switch (type) {
1977
1977
  case INDIGO_VERIFICATION:
1978
1978
  {
1979
- return _objectSpread$1B(_objectSpread$1B({}, state), {}, {
1979
+ return _objectSpread$1C(_objectSpread$1C({}, state), {}, {
1980
1980
  indigoVerification: data
1981
1981
  });
1982
1982
  }
1983
1983
  case ANALYZING_FILE:
1984
1984
  {
1985
- return _objectSpread$1B(_objectSpread$1B({}, state), {}, {
1985
+ return _objectSpread$1C(_objectSpread$1C({}, state), {}, {
1986
1986
  isAnalyzingFile: data
1987
1987
  });
1988
1988
  }
@@ -2001,8 +2001,8 @@ var supportedSGroupTypes = {
2001
2001
  queryComponent: 'queryComponent'
2002
2002
  };
2003
2003
 
2004
- function ownKeys$1A(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2005
- function _objectSpread$1A(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1A(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1A(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
2004
+ function ownKeys$1B(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2005
+ function _objectSpread$1B(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1B(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1B(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
2006
2006
  var atom = {
2007
2007
  title: 'Atom',
2008
2008
  type: 'object',
@@ -2234,7 +2234,7 @@ var sgroup = {
2234
2234
  title: 'SGroup',
2235
2235
  type: 'object',
2236
2236
  required: ['type'],
2237
- oneOf: [_objectSpread$1A({}, sdataCustomSchema), {
2237
+ oneOf: [_objectSpread$1B({}, sdataCustomSchema), {
2238
2238
  key: 'MUL',
2239
2239
  title: 'Multiple group',
2240
2240
  type: 'object',
@@ -2383,12 +2383,12 @@ function matchCharge(charge) {
2383
2383
 
2384
2384
  var _excluded$D = ["aromaticity", "ringMembership", "ringSize", "connectivity", "chirality", "customQuery"],
2385
2385
  _excluded2$7 = ["type", "radiobuttons"];
2386
- function ownKeys$1z(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2387
- function _objectSpread$1z(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1z(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1z(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
2386
+ function ownKeys$1A(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2387
+ function _objectSpread$1A(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1A(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1A(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
2388
2388
  var DefaultStereoGroupNumber = 1;
2389
2389
  function fromElement(selem) {
2390
2390
  if (selem.label === 'R#') {
2391
- return _objectSpread$1z({
2391
+ return _objectSpread$1A({
2392
2392
  type: 'rlabel',
2393
2393
  values: fromRlabel(selem.rglabel)
2394
2394
  }, selem);
@@ -2497,7 +2497,7 @@ function toAtom(atom) {
2497
2497
  customQuery = _atom$customQuery === void 0 ? '' : _atom$customQuery,
2498
2498
  restAtom = _objectWithoutProperties__default["default"](atom, _excluded$D);
2499
2499
  if (customQuery && customQuery !== '') {
2500
- return _objectSpread$1z(_objectSpread$1z({}, restAtom), {}, {
2500
+ return _objectSpread$1A(_objectSpread$1A({}, restAtom), {}, {
2501
2501
  label: 'A',
2502
2502
  atomList: null,
2503
2503
  pseudo: null,
@@ -2526,7 +2526,7 @@ function toAtom(atom) {
2526
2526
  }
2527
2527
  var pch = matchCharge(restAtom.charge);
2528
2528
  var charge = pch ? parseInt(pch[1] + pch[3] + pch[2]) : restAtom.charge;
2529
- var conv = _objectSpread$1z(_objectSpread$1z({}, restAtom), {}, {
2529
+ var conv = _objectSpread$1A(_objectSpread$1A({}, restAtom), {}, {
2530
2530
  isotope: restAtom.isotope ? Number(restAtom.isotope) : null,
2531
2531
  charge: restAtom.charge && charge !== 0 ? Number(charge) : null,
2532
2532
  alias: restAtom.alias || null,
@@ -2644,7 +2644,7 @@ function fromBond(sbond) {
2644
2644
  }
2645
2645
  function toBond(bond) {
2646
2646
  var isCustomQuery = bond.customQuery !== '';
2647
- return _objectSpread$1z({
2647
+ return _objectSpread$1A({
2648
2648
  topology: bond.topology,
2649
2649
  reactingCenterStatus: bond.center,
2650
2650
  customQuery: !isCustomQuery ? null : bond.customQuery
@@ -2709,7 +2709,7 @@ var bondCaptionMap = {
2709
2709
  }
2710
2710
  };
2711
2711
  function toBondType(caption) {
2712
- return _objectSpread$1z({}, bondCaptionMap[caption]);
2712
+ return _objectSpread$1A({}, bondCaptionMap[caption]);
2713
2713
  }
2714
2714
  function fromBondType(type, stereo) {
2715
2715
  for (var caption in bondCaptionMap) {
@@ -2733,7 +2733,7 @@ function fromSgroup(ssgroup) {
2733
2733
  fieldName: fieldName || getSdataDefault(sdataCustomSchema, 'fieldName'),
2734
2734
  fieldValue: fieldValue || getSdataDefault(sdataCustomSchema, 'fieldValue')
2735
2735
  } : {};
2736
- return _objectSpread$1z(_objectSpread$1z({
2736
+ return _objectSpread$1A(_objectSpread$1A({
2737
2737
  type: type
2738
2738
  }, ssgroup.attrs), sDataInitValue);
2739
2739
  }
@@ -2741,7 +2741,7 @@ function toSgroup(sgroup) {
2741
2741
  var type = sgroup.type,
2742
2742
  radiobuttons = sgroup.radiobuttons,
2743
2743
  props = _objectWithoutProperties__default["default"](sgroup, _excluded2$7);
2744
- var attrs = _objectSpread$1z({}, props);
2744
+ var attrs = _objectSpread$1A({}, props);
2745
2745
  var absolute = 'absolute';
2746
2746
  var attached = 'attached';
2747
2747
  switch (radiobuttons) {
@@ -5978,8 +5978,8 @@ var errors = {
5978
5978
  codes: codes_1
5979
5979
  };
5980
5980
 
5981
- function ownKeys$1y(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
5982
- function _objectSpread$1y(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1y(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1y(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5981
+ function ownKeys$1z(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
5982
+ function _objectSpread$1z(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1z(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1z(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5983
5983
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
5984
5984
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
5985
5985
  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
@@ -6407,7 +6407,7 @@ var AssertionError = /*#__PURE__*/function (_Error, _inspect$custom) {
6407
6407
  // the minimum depth. Otherwise those values would be too verbose compared
6408
6408
  // to the actual error message which contains a combined view of these two
6409
6409
  // input values.
6410
- return inspect(this, _objectSpread$1y(_objectSpread$1y({}, ctx), {}, {
6410
+ return inspect(this, _objectSpread$1z(_objectSpread$1z({}, ctx), {}, {
6411
6411
  customInspect: false,
6412
6412
  depth: 0
6413
6413
  }));
@@ -7931,8 +7931,8 @@ assert.strict.strict = assert.strict;
7931
7931
 
7932
7932
  var _excluded$C = ["rescale", "fragment"],
7933
7933
  _excluded2$6 = ["isPaste", "method"];
7934
- function ownKeys$1x(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
7935
- function _objectSpread$1x(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1x(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1x(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
7934
+ function ownKeys$1y(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
7935
+ function _objectSpread$1y(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1y(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1y(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
7936
7936
  function onAction(action) {
7937
7937
  if (action !== null && action !== void 0 && action.dialog) {
7938
7938
  return {
@@ -7988,7 +7988,7 @@ function load(struct, options) {
7988
7988
  errorHandler = editor.errorHandler;
7989
7989
  options = options || {};
7990
7990
  _options2 = options, isPaste = _options2.isPaste, method = _options2.method, otherOptions = _objectWithoutProperties__default["default"](_options2, _excluded2$6);
7991
- otherOptions = _objectSpread$1x(_objectSpread$1x({}, serverSettings), otherOptions);
7991
+ otherOptions = _objectSpread$1y(_objectSpread$1y({}, serverSettings), otherOptions);
7992
7992
  dispatch(setAnalyzingFile(true));
7993
7993
  _context.prev = 9;
7994
7994
  _context.next = 12;
@@ -8132,8 +8132,8 @@ function openInfoModalWithCustomMessage(message) {
8132
8132
  };
8133
8133
  }
8134
8134
 
8135
- function ownKeys$1w(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
8136
- function _objectSpread$1w(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1w(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1w(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
8135
+ function ownKeys$1x(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
8136
+ function _objectSpread$1x(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1x(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1x(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
8137
8137
  function checkServer() {
8138
8138
  return function (dispatch, getState) {
8139
8139
  var _getState = getState(),
@@ -8276,12 +8276,12 @@ function serverCall(editor, server, method, options, struct) {
8276
8276
  resetStereoFlagsPosition(currentStruct);
8277
8277
  }
8278
8278
  var ketSerializer = new ketcherCore.KetSerializer();
8279
- var serializedStruct = ketSerializer.serialize(currentStruct, undefined, _objectSpread$1w(_objectSpread$1w({}, selection), {}, {
8279
+ var serializedStruct = ketSerializer.serialize(currentStruct, undefined, _objectSpread$1x(_objectSpread$1x({}, selection), {}, {
8280
8280
  atoms: selectedAtoms,
8281
8281
  bonds: selectedBonds
8282
8282
  }));
8283
8283
  return server.then(function () {
8284
- return server[method](_objectSpread$1w(_objectSpread$1w(_objectSpread$1w({
8284
+ return server[method](_objectSpread$1x(_objectSpread$1x(_objectSpread$1x({
8285
8285
  struct: serializedStruct
8286
8286
  }, method !== 'calculate' && method !== 'check' ? {
8287
8287
  output_format: ketcherCore.ChemicalMimeType.KET
@@ -8535,7 +8535,7 @@ var zoom = {
8535
8535
 
8536
8536
  var openHelpLink = function openHelpLink() {
8537
8537
  var _window$open;
8538
- return (_window$open = window.open("https://github.com/epam/ketcher/blob/".concat("v3.12.0-dev.1\n", "/documentation/help.md#ketcher-overview"))) === null || _window$open === void 0 ? void 0 : _window$open.focus();
8538
+ return (_window$open = window.open("https://github.com/epam/ketcher/blob/".concat("v3.12.0-rc.2\n", "/documentation/help.md#ketcher-overview"))) === null || _window$open === void 0 ? void 0 : _window$open.focus();
8539
8539
  };
8540
8540
  var help = {
8541
8541
  help: {
@@ -8678,8 +8678,8 @@ var fullscreen = {
8678
8678
  }
8679
8679
  };
8680
8680
 
8681
- function ownKeys$1v(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
8682
- function _objectSpread$1v(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1v(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1v(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
8681
+ function ownKeys$1w(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
8682
+ function _objectSpread$1w(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1w(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1w(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
8683
8683
  var disableIfViewOnly = function disableIfViewOnly(editor) {
8684
8684
  return !!editor.render.options.viewOnlyMode;
8685
8685
  };
@@ -8688,13 +8688,13 @@ var updateConfigItem = function updateConfigItem(item) {
8688
8688
  return item;
8689
8689
  } else if (typeof item.disabled === 'function') {
8690
8690
  var originalDisabled = item.disabled;
8691
- return _objectSpread$1v(_objectSpread$1v({}, item), {}, {
8691
+ return _objectSpread$1w(_objectSpread$1w({}, item), {}, {
8692
8692
  disabled: function disabled() {
8693
8693
  return disableIfViewOnly(arguments.length <= 0 ? undefined : arguments[0]) || originalDisabled.apply(void 0, arguments);
8694
8694
  }
8695
8695
  });
8696
8696
  } else {
8697
- return _objectSpread$1v(_objectSpread$1v({}, item), {}, {
8697
+ return _objectSpread$1w(_objectSpread$1w({}, item), {}, {
8698
8698
  disabled: disableIfViewOnly
8699
8699
  });
8700
8700
  }
@@ -9031,11 +9031,11 @@ var config = {
9031
9031
  }
9032
9032
  }
9033
9033
  };
9034
- var configWithNonViewOnlyActionsDisabled = Object.entries(_objectSpread$1v(_objectSpread$1v(_objectSpread$1v(_objectSpread$1v(_objectSpread$1v(_objectSpread$1v(_objectSpread$1v(_objectSpread$1v(_objectSpread$1v(_objectSpread$1v({}, config), config$1), debugObj), tools), atoms), zoom), templates), functionalGroupsLib), fullscreen), help)).reduce(function (acc, _ref2) {
9034
+ var configWithNonViewOnlyActionsDisabled = Object.entries(_objectSpread$1w(_objectSpread$1w(_objectSpread$1w(_objectSpread$1w(_objectSpread$1w(_objectSpread$1w(_objectSpread$1w(_objectSpread$1w(_objectSpread$1w(_objectSpread$1w({}, config), config$1), debugObj), tools), atoms), zoom), templates), functionalGroupsLib), fullscreen), help)).reduce(function (acc, _ref2) {
9035
9035
  var _ref3 = _slicedToArray__default["default"](_ref2, 2),
9036
9036
  key = _ref3[0],
9037
9037
  item = _ref3[1];
9038
- return _objectSpread$1v(_objectSpread$1v({}, acc), {}, _defineProperty__default["default"]({}, key, updateConfigItem(item)));
9038
+ return _objectSpread$1w(_objectSpread$1w({}, acc), {}, _defineProperty__default["default"]({}, key, updateConfigItem(item)));
9039
9039
  }, {});
9040
9040
  function hasSelection(editor) {
9041
9041
  var selection = editor.selection();
@@ -13316,12 +13316,12 @@ var IconButtonBase = function IconButtonBase(_ref) {
13316
13316
  };
13317
13317
 
13318
13318
  var _excluded$B = ["iconName"];
13319
- function ownKeys$1u(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13320
- function _objectSpread$1u(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1u(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1u(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13319
+ function ownKeys$1v(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13320
+ function _objectSpread$1v(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1v(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1v(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13321
13321
  var IconButton = function IconButton(_ref) {
13322
13322
  var iconName = _ref.iconName,
13323
13323
  props = _objectWithoutProperties__default["default"](_ref, _excluded$B);
13324
- return jsxRuntime.jsx(IconButtonBase, _objectSpread$1u(_objectSpread$1u({}, props), {}, {
13324
+ return jsxRuntime.jsx(IconButtonBase, _objectSpread$1v(_objectSpread$1v({}, props), {}, {
13325
13325
  children: jsxRuntime.jsx(StyledIcon$1, {
13326
13326
  name: iconName
13327
13327
  })
@@ -13329,12 +13329,12 @@ var IconButton = function IconButton(_ref) {
13329
13329
  };
13330
13330
 
13331
13331
  var _excluded$A = ["link"];
13332
- function ownKeys$1t(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13333
- function _objectSpread$1t(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1t(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1t(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13332
+ function ownKeys$1u(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13333
+ function _objectSpread$1u(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1u(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1u(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13334
13334
  var IconButtonCustomIcon = function IconButtonCustomIcon(_ref) {
13335
13335
  var link = _ref.link,
13336
13336
  props = _objectWithoutProperties__default["default"](_ref, _excluded$A);
13337
- return jsxRuntime.jsx(IconButtonBase, _objectSpread$1t(_objectSpread$1t({}, props), {}, {
13337
+ return jsxRuntime.jsx(IconButtonBase, _objectSpread$1u(_objectSpread$1u({}, props), {}, {
13338
13338
  children: jsxRuntime.jsx(StyledCustomIcon, {
13339
13339
  src: link,
13340
13340
  alt: props.title
@@ -13365,12 +13365,12 @@ var StyledButton = styled__default["default"].button({
13365
13365
  });
13366
13366
 
13367
13367
  var _excluded$z = ["children"];
13368
- function ownKeys$1s(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13369
- function _objectSpread$1s(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1s(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1s(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13368
+ function ownKeys$1t(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13369
+ function _objectSpread$1t(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1t(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1t(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13370
13370
  var Button = function Button(_ref) {
13371
13371
  var children = _ref.children,
13372
13372
  props = _objectWithoutProperties__default["default"](_ref, _excluded$z);
13373
- return jsxRuntime.jsx(StyledButton, _objectSpread$1s(_objectSpread$1s({}, props), {}, {
13373
+ return jsxRuntime.jsx(StyledButton, _objectSpread$1t(_objectSpread$1t({}, props), {}, {
13374
13374
  children: children
13375
13375
  }));
13376
13376
  };
@@ -13438,10 +13438,10 @@ var StyledInput$1 = styled__default["default"].input({
13438
13438
  }
13439
13439
  });
13440
13440
 
13441
- function ownKeys$1r(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13442
- function _objectSpread$1r(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1r(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1r(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13441
+ function ownKeys$1s(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13442
+ function _objectSpread$1s(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1s(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1s(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13443
13443
  var Input$2 = function Input(props) {
13444
- return jsxRuntime.jsx(StyledInput$1, _objectSpread$1r({}, props));
13444
+ return jsxRuntime.jsx(StyledInput$1, _objectSpread$1s({}, props));
13445
13445
  };
13446
13446
 
13447
13447
  var Container$1 = styled__default["default"].div({
@@ -13537,8 +13537,8 @@ var InfoModal$1 = function InfoModal(_ref) {
13537
13537
  var styles$r = {"button-common-styles":"Dialog-module_button-common-styles__Xehyp","scrollbar":"Dialog-module_scrollbar__L8hUr","dialog":"Dialog-module_dialog__hiRBI","hide":"Dialog-module_hide__bbkvB","header":"Dialog-module_header__8QGek","btnContainer":"Dialog-module_btnContainer__ulrFM","buttonTop":"Dialog-module_buttonTop__91ha8","closeButton":"Dialog-module_closeButton__XyaAE","footer":"Dialog-module_footer__PliV0","ok":"Dialog-module_ok__BUQ6q","cancel":"Dialog-module_cancel__8d83c","withDivider":"Dialog-module_withDivider__YBKiQ","body":"Dialog-module_body__EWh4H","withMargin":"Dialog-module_withMargin__-zVS4"};
13538
13538
 
13539
13539
  var _excluded$y = ["children", "title", "params", "result", "valid", "buttons", "headerContent", "footerContent", "className", "buttonsNameMap", "needMargin", "withDivider", "focusable", "primaryButtons"];
13540
- function ownKeys$1q(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13541
- function _objectSpread$1q(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1q(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1q(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13540
+ function ownKeys$1r(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13541
+ function _objectSpread$1r(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1r(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1r(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13542
13542
  var Dialog = function Dialog(props) {
13543
13543
  var children = props.children,
13544
13544
  title = props.title,
@@ -13601,7 +13601,7 @@ var Dialog = function Dialog(props) {
13601
13601
  }
13602
13602
  };
13603
13603
  return (
13604
- jsxRuntime.jsxs("div", _objectSpread$1q(_objectSpread$1q({
13604
+ jsxRuntime.jsxs("div", _objectSpread$1r(_objectSpread$1r({
13605
13605
  ref: dialogRef,
13606
13606
  role: "dialog",
13607
13607
  "data-testid": 'info-modal-window',
@@ -14174,8 +14174,8 @@ function usePortalStyle(_ref) {
14174
14174
  return [portalStyle];
14175
14175
  }
14176
14176
 
14177
- function ownKeys$1p(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14178
- function _objectSpread$1p(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1p(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1p(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14177
+ function ownKeys$1q(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14178
+ function _objectSpread$1q(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1q(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1q(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14179
14179
  var ToolbarMultiToolItem = function ToolbarMultiToolItem(props) {
14180
14180
  var id = props.id,
14181
14181
  options = props.options,
@@ -14250,7 +14250,7 @@ var ToolbarMultiToolItem = function ToolbarMultiToolItem(props) {
14250
14250
  ref: ref,
14251
14251
  className: classes$N.root,
14252
14252
  "data-testid": "".concat(id, "-drop-down-button"),
14253
- children: [jsxRuntime.jsx(ActionButton, _objectSpread$1p(_objectSpread$1p({}, actionButtonProps), {}, {
14253
+ children: [jsxRuntime.jsx(ActionButton, _objectSpread$1q(_objectSpread$1q({}, actionButtonProps), {}, {
14254
14254
  className: className,
14255
14255
  name: iconName,
14256
14256
  action: configWithNonViewOnlyActionsDisabled[currentId],
@@ -14359,8 +14359,8 @@ var TemplatesList = function TemplatesList(props) {
14359
14359
  var classes$M = {"button-common-styles":"BottomToolbar-module_button-common-styles__PbtE9","scrollbar":"BottomToolbar-module_scrollbar__i1f8P","group":"BottomToolbar-module_group__b-pGt","root":"BottomToolbar-module_root__kjkSm"};
14360
14360
 
14361
14361
  var _excluded$x = ["className"];
14362
- function ownKeys$1o(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14363
- function _objectSpread$1o(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1o(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1o(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14362
+ function ownKeys$1p(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14363
+ function _objectSpread$1p(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1p(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1p(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14364
14364
  var Group$2 = function Group(_ref) {
14365
14365
  var children = _ref.children,
14366
14366
  className = _ref.className;
@@ -14376,22 +14376,22 @@ var BottomToolbar = function BottomToolbar(props) {
14376
14376
  "data-testid": "bottom-toolbar",
14377
14377
  className: clsx__default["default"](classes$M.root, className),
14378
14378
  children: jsxRuntime.jsxs(Group$2, {
14379
- children: [jsxRuntime.jsx(TemplatesList, _objectSpread$1o({}, rest)), jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$1o({
14379
+ children: [jsxRuntime.jsx(TemplatesList, _objectSpread$1p({}, rest)), jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$1p({
14380
14380
  id: "template-lib"
14381
14381
  }, rest))]
14382
14382
  })
14383
14383
  });
14384
14384
  };
14385
14385
 
14386
- function ownKeys$1n(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14387
- function _objectSpread$1n(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1n(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1n(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14386
+ function ownKeys$1o(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14387
+ function _objectSpread$1o(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1o(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1o(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14388
14388
  function openDialog(dispatch, dialogName, props) {
14389
14389
  return new Promise(function (resolve, reject) {
14390
14390
  dispatch({
14391
14391
  type: 'MODAL_OPEN',
14392
14392
  data: {
14393
14393
  name: dialogName,
14394
- prop: _objectSpread$1n(_objectSpread$1n({}, props), {}, {
14394
+ prop: _objectSpread$1o(_objectSpread$1o({}, props), {}, {
14395
14395
  onResult: resolve,
14396
14396
  onCancel: reject
14397
14397
  })
@@ -14410,14 +14410,14 @@ function modalReducer() {
14410
14410
  return null;
14411
14411
  }
14412
14412
  var formState = formReducer(state.form, action);
14413
- return _objectSpread$1n(_objectSpread$1n({}, state), {}, {
14413
+ return _objectSpread$1o(_objectSpread$1o({}, state), {}, {
14414
14414
  form: formState
14415
14415
  });
14416
14416
  }
14417
14417
  switch (type) {
14418
14418
  case 'MODAL_CLOSE':
14419
14419
  if (state !== null && state !== void 0 && state.parentModal) {
14420
- state.parentModal.prop = _objectSpread$1n(_objectSpread$1n(_objectSpread$1n({}, state.parentModal.prop), state.parentModal.form.result), {}, {
14420
+ state.parentModal.prop = _objectSpread$1o(_objectSpread$1o(_objectSpread$1o({}, state.parentModal.prop), state.parentModal.form.result), {}, {
14421
14421
  isRestoredModal: true
14422
14422
  });
14423
14423
  return state.parentModal;
@@ -14435,8 +14435,8 @@ function modalReducer() {
14435
14435
  }
14436
14436
  }
14437
14437
 
14438
- function ownKeys$1m(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14439
- function _objectSpread$1m(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1m(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1m(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14438
+ function ownKeys$1n(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14439
+ function _objectSpread$1n(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1n(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1n(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14440
14440
  function selectTmpl(tmpl) {
14441
14441
  return {
14442
14442
  type: 'TMPL_SELECT',
@@ -14504,7 +14504,7 @@ function editTmpl(tmpl) {
14504
14504
  tmpl: tmpl
14505
14505
  }).then(function (formData) {
14506
14506
  tmpl.struct.name = formData ? formData.name.trim() : tmpl.struct.name;
14507
- tmpl.props = formData ? _objectSpread$1m(_objectSpread$1m({}, tmpl.props || {}), formData.attach || {}) : tmpl.props;
14507
+ tmpl.props = formData ? _objectSpread$1n(_objectSpread$1n({}, tmpl.props || {}), formData.attach || {}) : tmpl.props;
14508
14508
  if (tmpl.props.group === 'User Templates') updateLocalStore(getState().templates.lib);
14509
14509
  }, function () {
14510
14510
  return null;
@@ -14544,7 +14544,7 @@ function saveUserTmpl(struct) {
14544
14544
  var name = _ref.name,
14545
14545
  attach = _ref.attach;
14546
14546
  tmpl.struct.name = name.trim();
14547
- tmpl.props = _objectSpread$1m(_objectSpread$1m({}, attach), {}, {
14547
+ tmpl.props = _objectSpread$1n(_objectSpread$1n({}, attach), {}, {
14548
14548
  group: 'User Templates'
14549
14549
  });
14550
14550
  var lib = getState().templates.lib.concat(tmpl);
@@ -14562,7 +14562,7 @@ function updateLocalStore(lib) {
14562
14562
  }).map(function (item) {
14563
14563
  return {
14564
14564
  struct: ketSerializer.serialize(item.struct),
14565
- props: _objectSpread$1m({}, fp.omit(['group'], item.props) || {})
14565
+ props: _objectSpread$1n({}, fp.omit(['group'], item.props) || {})
14566
14566
  };
14567
14567
  });
14568
14568
  storage.setItem('ketcher-tmpls', userLib);
@@ -14581,19 +14581,19 @@ var attachActions = ['INIT_ATTACH', 'SET_ATTACH_POINTS', 'SET_TMPL_NAME'];
14581
14581
  function templatesReducer() {
14582
14582
  var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initTmplsState;
14583
14583
  var action = arguments.length > 1 ? arguments[1] : undefined;
14584
- if (tmplActions.includes(action.type)) return _objectSpread$1m(_objectSpread$1m({}, state), action.data || {});
14584
+ if (tmplActions.includes(action.type)) return _objectSpread$1n(_objectSpread$1n({}, state), action.data || {});
14585
14585
  if (attachActions.includes(action.type)) {
14586
- var attach = _objectSpread$1m(_objectSpread$1m({}, state.attach), action.data || {});
14587
- return _objectSpread$1m(_objectSpread$1m({}, state), {}, {
14586
+ var attach = _objectSpread$1n(_objectSpread$1n({}, state.attach), action.data || {});
14587
+ return _objectSpread$1n(_objectSpread$1n({}, state), {}, {
14588
14588
  attach: attach
14589
14589
  });
14590
14590
  }
14591
14591
  if (action.type === 'TMPL_DELETE') {
14592
- var currentState = _objectSpread$1m({}, state);
14592
+ var currentState = _objectSpread$1n({}, state);
14593
14593
  var lib = currentState.lib.filter(function (value) {
14594
14594
  return value !== action.data.tmpl;
14595
14595
  });
14596
- return _objectSpread$1m(_objectSpread$1m({}, currentState), {}, {
14596
+ return _objectSpread$1n(_objectSpread$1n({}, currentState), {}, {
14597
14597
  lib: lib
14598
14598
  });
14599
14599
  }
@@ -14655,8 +14655,8 @@ function abbreviationLookupReducer() {
14655
14655
  }
14656
14656
  }
14657
14657
 
14658
- function ownKeys$1l(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14659
- function _objectSpread$1l(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1l(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1l(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14658
+ function ownKeys$1m(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14659
+ function _objectSpread$1m(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1m(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1m(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14660
14660
  var initialState$3 = {
14661
14661
  cursorPosition: {
14662
14662
  x: 0,
@@ -14679,7 +14679,7 @@ function commonReducer() {
14679
14679
  var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState$3;
14680
14680
  var action = arguments.length > 1 ? arguments[1] : undefined;
14681
14681
  if (action.type === COMMON_ACTIONS.COMMON_UPDATE_CURSOR_POSITION) {
14682
- return _objectSpread$1l(_objectSpread$1l({}, state), {}, {
14682
+ return _objectSpread$1m(_objectSpread$1m({}, state), {}, {
14683
14683
  cursorPosition: {
14684
14684
  x: action.data.x,
14685
14685
  y: action.data.y
@@ -14690,8 +14690,8 @@ function commonReducer() {
14690
14690
  }
14691
14691
 
14692
14692
  var _excluded$w = ["type", "action"];
14693
- function ownKeys$1k(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14694
- function _objectSpread$1k(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1k(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1k(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14693
+ function ownKeys$1l(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14694
+ function _objectSpread$1l(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1l(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1l(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14695
14695
  function execute(activeTool, _ref) {
14696
14696
  var action = _ref.action,
14697
14697
  editor = _ref.editor,
@@ -14751,7 +14751,7 @@ function actionStateReducer () {
14751
14751
  case 'ACTION':
14752
14752
  {
14753
14753
  var _activeTool;
14754
- activeTool = execute(state === null || state === void 0 ? void 0 : state.activeTool, _objectSpread$1k(_objectSpread$1k({}, params), {}, {
14754
+ activeTool = execute(state === null || state === void 0 ? void 0 : state.activeTool, _objectSpread$1l(_objectSpread$1l({}, params), {}, {
14755
14755
  action: action
14756
14756
  }));
14757
14757
  if (((_activeTool = activeTool) === null || _activeTool === void 0 ? void 0 : _activeTool.tool) === 'select') {
@@ -15047,8 +15047,8 @@ function setFunctionalGroupsTooltip(_ref) {
15047
15047
  showTooltip(editor, infoPanelData);
15048
15048
  }
15049
15049
 
15050
- function ownKeys$1j(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
15051
- function _objectSpread$1j(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1j(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1j(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15050
+ function ownKeys$1k(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
15051
+ function _objectSpread$1k(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1k(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1k(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15052
15052
  var initialState$2 = {
15053
15053
  lib: [],
15054
15054
  functionalGroupInfo: null,
@@ -15056,14 +15056,14 @@ var initialState$2 = {
15056
15056
  };
15057
15057
  var functionalGroupsReducer = function functionalGroupsReducer() {
15058
15058
  var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState$2;
15059
- var _ref = arguments.length > 1 ? arguments[1] : undefined,
15060
- type = _ref.type,
15061
- payload = _ref.payload;
15059
+ var action = arguments.length > 1 ? arguments[1] : undefined;
15060
+ var type = action.type,
15061
+ payload = action.payload;
15062
15062
  switch (type) {
15063
15063
  case 'FG_INIT':
15064
- return _objectSpread$1j(_objectSpread$1j({}, state), payload);
15064
+ return _objectSpread$1k(_objectSpread$1k({}, state), payload);
15065
15065
  case 'FG_HIGHLIGHT':
15066
- return _objectSpread$1j(_objectSpread$1j({}, state), {}, {
15066
+ return _objectSpread$1k(_objectSpread$1k({}, state), {}, {
15067
15067
  functionalGroupInfo: payload
15068
15068
  });
15069
15069
  default:
@@ -15090,7 +15090,7 @@ function notDebouncedHighlightFG(dispatch, group) {
15090
15090
  var highlightFG = memoizedDebounce(notDebouncedHighlightFG, TOOLTIP_DELAY / 3, [0]);
15091
15091
  function initFGTemplates() {
15092
15092
  return function () {
15093
- var _ref2 = _asyncToGenerator__default["default"]( _regeneratorRuntime__default["default"].mark(function _callee(dispatch) {
15093
+ var _ref = _asyncToGenerator__default["default"]( _regeneratorRuntime__default["default"].mark(function _callee(dispatch) {
15094
15094
  var provider, sdfSerializer, templates, functionalGroups;
15095
15095
  return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
15096
15096
  while (1) switch (_context.prev = _context.next) {
@@ -15098,8 +15098,8 @@ function initFGTemplates() {
15098
15098
  provider = ketcherCore.FunctionalGroupsProvider.getInstance();
15099
15099
  sdfSerializer = new ketcherCore.SdfSerializer();
15100
15100
  templates = sdfSerializer.deserialize(templatesRawData$1);
15101
- functionalGroups = templates.reduce(function (acc, _ref3) {
15102
- var struct = _ref3.struct;
15101
+ functionalGroups = templates.reduce(function (acc, _ref2) {
15102
+ var struct = _ref2.struct;
15103
15103
  return [].concat(_toConsumableArray__default["default"](acc), [struct]);
15104
15104
  }, []);
15105
15105
  provider.setFunctionalGroupsList(functionalGroups);
@@ -15114,26 +15114,26 @@ function initFGTemplates() {
15114
15114
  }, _callee);
15115
15115
  }));
15116
15116
  return function (_x) {
15117
- return _ref2.apply(this, arguments);
15117
+ return _ref.apply(this, arguments);
15118
15118
  };
15119
15119
  }();
15120
15120
  }
15121
15121
 
15122
15122
  var templatesRawData = "acetic acid\n -INDIGO-11302219142D\n\n 4 3 0 0 0 0 0 0 0 0999 V2000\n 0.5143 0.5143 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.7848 -0.2357 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.8133 -0.2357 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 0.5143 2.0143 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 2 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 4 1 2 3 4\nM SMT 1 acetic acid\nM END\n> <name>\nacetic acid\n\n> <abbreviation>\nacetic acid\n\n> <group>\nSalts and Solvents\n\n$$$$\nacetic anhydride\n -INDIGO-11302219142D\n\n 7 6 0 0 0 0 0 0 0 0999 V2000\n 0.5143 0.5143 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.7848 -0.2357 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.8133 -0.2357 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 0.5143 2.0143 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 3.1123 0.5143 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.1124 2.0143 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 4.4114 -0.2357 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 2 0 0 0 0\n 3 5 1 0 0 0 0\n 5 6 2 0 0 0 0\n 5 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 acetic anhydride\nM END\n> <name>\nacetic anhydride\n\n> <abbreviation>\nacetic anhydride\n\n> <group>\nSalts and Solvents\n\n$$$$\nformic acid\n -INDIGO-11302219142D\n\n 4 3 0 0 0 0 0 0 0 0999 V2000\n 0.5143 0.5143 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.7848 -0.2357 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0\n 1.8133 -0.2357 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 0.5143 2.0143 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 2 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 4 1 2 3 4\nM SMT 1 formic acid\nM END\n> <name>\nformic acid\n\n> <abbreviation>\nformic acid\n\n> <group>\nSalts and Solvents\n\n$$$$\nmethane sulphonic acid\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 0.5143 0.5143 0.0000 S 0 0 0 0 0 0 0 0 0 0 0 0\n 0.5143 2.0143 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 0.5143 -0.9857 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 2.0143 0.5143 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -0.9857 0.5143 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 2 0 0 0 0\n 1 3 2 0 0 0 0\n 1 4 1 0 0 0 0\n 1 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 methane sulphonic acid\nM END\n> <name>\nmethane sulphonic acid\n\n> <abbreviation>\nmethane sulphonic acid\n\n> <group>\nSalts and Solvents\n\n$$$$\npropionic acid\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 0.5143 0.5143 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.7848 -0.2357 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.8133 -0.2357 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 0.5143 2.0143 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -2.0838 0.5143 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 2 0 0 0 0\n 2 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 propionic acid\nM END\n> <name>\npropionic acid\n\n> <abbreviation>\npropionic acid\n\n> <group>\nSalts and Solvents\n\n$$$$\n1,2-propanediol\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n -3.3587 -3.5057 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.0597 -2.7557 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.0596 -1.2558 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -0.7606 -3.5057 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.5384 -2.7557 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 2 4 1 0 0 0 0\n 4 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 1,2-propanediol\nM END\n> <name>\n1,2-propanediol\n\n> <abbreviation>\n1,2-propanediol\n\n> <group>\nSalts and Solvents\n\n$$$$\n1,3-propanediol\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 15.0779 -8.5508 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 16.3769 -9.3007 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 17.6759 -8.5507 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 18.9750 -9.3007 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 20.2740 -8.5507 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 1,3-propanediol\nM END\n> <name>\n1,3-propanediol\n\n> <abbreviation>\n1,3-propanediol\n\n> <group>\nSalts and Solvents\n\n$$$$\n1,4-butanediol\n -INDIGO-11302219142D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n -0.3480 1.2991 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 0.9509 2.0491 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.2500 1.2991 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.5491 2.0491 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8481 1.2991 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1472 2.0491 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 1,4-butanediol\nM END\n> <name>\n1,4-butanediol\n\n> <abbreviation>\n1,4-butanediol\n\n> <group>\nSalts and Solvents\n\n$$$$\n1-butanol\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 0.1714 0.3286 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.4705 1.0786 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -1.1276 1.0786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.4266 0.3286 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.7257 1.0786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 1-butanol\nM END\n> <name>\n1-butanol\n\n> <abbreviation>\n1-butanol\n\n> <group>\nSalts and Solvents\n\n$$$$\n1-propanol\n -INDIGO-11302219142D\n\n 4 3 0 0 0 0 0 0 0 0999 V2000\n 0.1714 1.2286 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -1.1276 0.4786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.4266 1.2286 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.7257 0.4786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 4 1 2 3 4\nM SMT 1 1-propanol\nM END\n> <name>\n1-propanol\n\n> <abbreviation>\n1-propanol\n\n> <group>\nSalts and Solvents\n\n$$$$\n2-butanol\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 0.1714 1.2286 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.4705 0.4786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -1.1276 0.4786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.4266 1.2286 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.1714 2.7286 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 1 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 2-butanol\nM END\n> <name>\n2-butanol\n\n> <abbreviation>\n2-butanol\n\n> <group>\nSalts and Solvents\n\n$$$$\n2-ethylhexanol\n -INDIGO-11302219142D\n\n 9 8 0 0 0 0 0 0 0 0999 V2000\n 10.7337 0.4167 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 8.1355 0.4167 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.8365 -0.3333 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5375 0.4167 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.1355 1.9167 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 9.4345 -0.3333 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.2384 -0.3333 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 9.4345 2.6667 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.9394 0.4167 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 6 1 0 0 0 0\n 2 3 1 0 0 0 0\n 2 5 1 0 0 0 0\n 2 6 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 7 1 0 0 0 0\n 5 8 1 0 0 0 0\n 7 9 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 1 9\nM SMT 1 2-ethylhexanol\nM END\n> <name>\n2-ethylhexanol\n\n> <abbreviation>\n2-ethylhexanol\n\n> <group>\nSalts and Solvents\n\n$$$$\nisopropanol\n -INDIGO-11302219142D\n\n 4 3 0 0 0 0 0 0 0 0999 V2000\n 0.1714 1.2286 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.4705 0.4786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -1.1276 0.4786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.1714 2.7286 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 4 1 2 3 4\nM SMT 1 2-propanol\nM END\n> <name>\nisopropanol\n\n> <abbreviation>\n2-propanol\n\n> <group>\nSalts and Solvents\n\n$$$$\n2-methoxyethanol\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 0.1714 0.3286 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.4705 1.0786 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -1.1276 1.0786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.4266 0.3286 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -3.7257 1.0786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 2-methoxyethanol\nM END\n> <name>\n2-methoxyethanol\n\n> <abbreviation>\n2-methoxyethanol\n\n> <group>\nSalts and Solvents\n\n$$$$\n2-pentanol\n -INDIGO-11302219142D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n -5.1971 -3.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.8980 -2.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.5991 -3.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -1.3000 -2.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.0009 -3.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -1.3000 -1.2500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 4 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 2-pentanol\nM END\n> <name>\n2-pentanol\n\n> <abbreviation>\n2-pentanol\n\n> <group>\nSalts and Solvents\n\n$$$$\nbenzyl alcohol\n -INDIGO-11302219142D\n\n 8 8 0 0 0 0 0 0 0 0999 V2000\n 6.1000 0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 -0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 -0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 -2.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1000 -2.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 -2.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1000 1.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 2.5000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 2 0 0 0 0\n 2 4 2 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 2 0 0 0 0\n 6 3 1 0 0 0 0\n 1 7 1 0 0 0 0\n 7 8 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SMT 1 benzyl alcohol\nM END\n> <name>\nbenzyl alcohol\n\n> <abbreviation>\nbenzyl alcohol\n\n> <group>\nSalts and Solvents\n\n$$$$\ncyclohexanol\n -INDIGO-11302219142D\n\n 7 7 0 0 0 0 0 0 0 0999 V2000\n 4.2990 2.0175 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 4.2990 0.5175 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 -0.2325 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5981 -0.2325 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 -1.7325 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5981 -1.7325 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.2990 -2.4825 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 2 4 1 0 0 0 0\n 3 5 1 0 0 0 0\n 4 6 1 0 0 0 0\n 5 7 1 0 0 0 0\n 6 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 cyclohexanol\nM END\n> <name>\ncyclohexanol\n\n> <abbreviation>\ncyclohexanol\n\n> <group>\nSalts and Solvents\n\n$$$$\nethanol\n -INDIGO-11302219142D\n\n 3 2 0 0 0 0 0 0 0 0999 V2000\n 0.1714 1.2286 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -1.1276 0.4786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.4266 1.2286 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 3 1 2 3\nM SMT 1 ethyl alcohol\nM END\n> <name>\nethanol\n\n> <abbreviation>\nethyl alcohol\n\n> <group>\nSalts and Solvents\n\n$$$$\nethylene glycol\n -INDIGO-11302219142D\n\n 4 3 0 0 0 0 0 0 0 0999 V2000\n 0.1714 1.2286 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -1.1276 0.4786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.4266 1.2286 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.7256 0.4786 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 4 1 2 3 4\nM SMT 1 ethane-1,2-diol\nM END\n> <name>\nethylene glycol\n\n> <abbreviation>\nethane-1,2-diol\n\n> <group>\nSalts and Solvents\n\n$$$$\nglycerol\n -INDIGO-11302219142D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n 0.9915 2.6580 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 2.2906 1.9080 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.5896 2.6580 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.5897 4.1580 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8887 1.9080 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1878 2.6580 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 3 5 1 0 0 0 0\n 5 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 glycerol\nM END\n> <name>\nglycerol\n\n> <abbreviation>\nglycerol\n\n> <group>\nSalts and Solvents\n\n$$$$\nisoamyl alcohol\n -INDIGO-11302219142D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n 0.1714 0.3286 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.4705 1.0786 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -1.1276 1.0786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.4266 0.3286 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.7257 1.0786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.4266 -1.1714 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 4 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 isoamyl alcohol\nM END\n> <name>\nisoamyl alcohol\n\n> <abbreviation>\nisoamyl alcohol\n\n> <group>\nSalts and Solvents\n\n$$$$\nisobutanol\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 0.1714 1.2286 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -1.1276 0.4786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.4266 1.2286 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.7257 0.4786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.4266 2.7286 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 3 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 isobutanol\nM END\n> <name>\nisobutanol\n\n> <abbreviation>\nisobutanol\n\n> <group>\nSalts and Solvents\n\n$$$$\nmethanol\n -INDIGO-11302219142D\n\n 2 1 0 0 0 0 0 0 0 0999 V2000\n 0.0709 0.8536 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5710 0.8536 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 2 1 2\nM SMT 1 methyl alcohol\nM END\n> <name>\nmethanol\n\n> <abbreviation>\nmethyl alcohol\n\n> <group>\nSalts and Solvents\n\n$$$$\nt-butanol\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 0.0709 0.8536 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5710 0.8536 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -1.4291 0.8536 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0709 2.3536 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0709 -0.6464 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 1 0 0 0 0\n 1 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 t-butanol\nM END\n> <name>\nt-butanol\n\n> <abbreviation>\nt-butanol\n\n> <group>\nSalts and Solvents\n\n$$$$\nwater\n -INDIGO-11302219142D\n\n 1 0 0 0 0 0 0 0 0 0999 V2000\n 0.7500 2.9500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 1 1\nM SMT 1 water\nM END\n> <name>\nwater\n\n> <abbreviation>\nwater\n\n> <group>\nSalts and Solvents\n\n$$$$\ncarbon dioxide\n -INDIGO-11302219142D\n\n 3 2 0 0 0 0 0 0 0 0999 V2000\n -1.2000 0.8500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.7000 0.8500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 0.3000 0.8500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 2 0 0 0 0\n 1 3 2 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 3 1 2 3\nM SMT 1 carbon dioxide\nM END\n> <name>\ncarbon dioxide\n\n> <abbreviation>\ncarbon dioxide\n\n> <group>\nSalts and Solvents\n\n$$$$\nbenzene\n -INDIGO-11302219142D\n\n 6 6 0 0 0 0 0 0 0 0999 V2000\n 6.1000 0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 -0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 -0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 -2.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1000 -2.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 -2.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 2 0 0 0 0\n 2 4 2 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 2 0 0 0 0\n 6 3 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 benzene\nM END\n> <name>\nbenzene\n\n> <abbreviation>\nbenzene\n\n> <group>\nSalts and Solvents\n\n$$$$\ncumene\n -INDIGO-11302219142D\n\n 9 9 0 0 0 0 0 0 0 0999 V2000\n 4.2989 1.8750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.2989 0.3750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5981 2.6250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 2.6250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5981 -0.3750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 -0.3750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5981 -1.8750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 -1.8750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.2989 -2.6250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 1 0 0 0 0\n 2 5 2 0 0 0 0\n 2 6 1 0 0 0 0\n 5 7 1 0 0 0 0\n 6 8 2 0 0 0 0\n 7 9 2 0 0 0 0\n 8 9 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 1 9\nM SMT 1 cumene\nM END\n> <name>\ncumene\n\n> <abbreviation>\ncumene\n\n> <group>\nSalts and Solvents\n\n$$$$\nmesitylene\n -INDIGO-11302219142D\n\n 9 9 0 0 0 0 0 0 0 0999 V2000\n 1.2991 3.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.2991 2.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5980 1.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5980 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.8971 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.2991 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -1.2991 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 1.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 2 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 4 6 2 0 0 0 0\n 6 7 1 0 0 0 0\n 7 8 1 0 0 0 0\n 7 9 2 0 0 0 0\n 2 9 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 1 9\nM SMT 1 mesitylene\nM END\n> <name>\nmesitylene\n\n> <abbreviation>\nmesitylene\n\n> <group>\nSalts and Solvents\n\n$$$$\ntoluene\n -INDIGO-11302219142D\n\n 7 7 0 0 0 0 0 0 0 0999 V2000\n 6.1000 0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 -0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 -0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 -2.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1000 -2.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 -2.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1000 1.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 2 0 0 0 0\n 2 4 2 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 2 0 0 0 0\n 6 3 1 0 0 0 0\n 1 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 toluene\nM END\n> <name>\ntoluene\n\n> <abbreviation>\ntoluene\n\n> <group>\nSalts and Solvents\n\n$$$$\nn,n-dimethylaniline\n -INDIGO-11302219142D\n\n 9 9 0 0 0 0 0 0 0 0999 V2000\n 4.2989 1.8750 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 4.2989 0.3750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5981 -0.3750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 -0.3750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5981 2.6250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 2.6250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5981 -1.8750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 -1.8750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.2989 -2.6250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 5 1 0 0 0 0\n 1 6 1 0 0 0 0\n 2 3 2 0 0 0 0\n 2 4 1 0 0 0 0\n 3 7 1 0 0 0 0\n 4 8 2 0 0 0 0\n 7 9 2 0 0 0 0\n 8 9 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 1 9\nM SMT 1 N,N-dimethylaniline\nM END\n> <name>\nn,n-dimethylaniline\n\n> <abbreviation>\nN,N-dimethylaniline\n\n> <group>\nSalts and Solvents\n\n$$$$\npyridine\n -INDIGO-11302219142D\n\n 6 6 0 0 0 0 0 0 0 0999 V2000\n 6.1000 0.2500 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 -0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 -0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 -2.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1000 -2.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 -2.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 2 0 0 0 0\n 2 4 2 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 2 0 0 0 0\n 6 3 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 pyridine\nM END\n> <name>\npyridine\n\n> <abbreviation>\npyridine\n\n> <group>\nSalts and Solvents\n\n$$$$\ntriethylamine\n -INDIGO-11302219142D\n\n 7 6 0 0 0 0 0 0 0 0999 V2000\n 1.5000 0.0000 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5000 1.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.2010 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.7990 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.7990 2.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.0980 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -1.0980 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 1 0 0 0 0\n 2 5 1 0 0 0 0\n 4 6 1 0 0 0 0\n 3 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 triethylamine\nM END\n> <name>\ntriethylamine\n\n> <abbreviation>\ntriethylamine\n\n> <group>\nSalts and Solvents\n\n$$$$\nacetonitrile\n -INDIGO-11302219142D\n\n 3 2 0 0 0 0 0 0 0 0999 V2000\n 1.5000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 0.0000 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 3 0 0 0 0\n 1 3 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 3 1 2 3\nM SMT 1 acetonitrile\nM END\n> <name>\nacetonitrile\n\n> <abbreviation>\nacetonitrile\n\n> <group>\nSalts and Solvents\n\n$$$$\ndimethyl acetamide\n -INDIGO-11302219142D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n 2.7990 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.7990 1.5000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 4.0980 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5000 -0.7500 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5000 -2.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.2009 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 2 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 4 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 dimethyl acetamide\nM END\n> <name>\ndimethyl acetamide\n\n> <abbreviation>\ndimethyl acetamide\n\n> <group>\nSalts and Solvents\n\n$$$$\ndimethyl formamide\n -INDIGO-11302219142D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n 2.7990 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.7990 1.5000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 4.0980 -0.7500 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5000 -0.7500 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5000 -2.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.2009 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 2 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 4 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 DMF\nM END\n> <name>\ndimethyl formamide\n\n> <abbreviation>\nDMF\n\n> <group>\nSalts and Solvents\n\n$$$$\ndimethyl sulfoxide\n -INDIGO-11302219142D\n\n 4 3 0 0 0 0 0 0 0 0999 V2000\n 1.5000 0.0000 0.0000 S 0 0 0 0 0 0 0 0 0 0 0 0\n 0.2010 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.7990 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5000 1.5000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 2 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 4 1 2 3 4\nM SMT 1 DMSO\nM END\n> <name>\ndimethyl sulfoxide\n\n> <abbreviation>\nDMSO\n\n> <group>\nSalts and Solvents\n\n$$$$\ndimethylpropylene urea\n -INDIGO-11302219142D\n\n 9 9 0 0 0 0 0 0 0 0999 V2000\n 3.4378 2.0544 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.1388 1.3044 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 2.1387 -0.1955 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.8397 -0.9455 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.4593 -0.1956 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.4593 1.3044 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n -1.7584 2.0545 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.8397 2.0544 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.8397 3.5545 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 6 7 1 0 0 0 0\n 6 8 1 0 0 0 0\n 2 8 1 0 0 0 0\n 8 9 2 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 1 9\nM SMT 1 dimethylpropylene urea\nM END\n> <name>\ndimethylpropylene urea\n\n> <abbreviation>\ndimethylpropylene urea\n\n> <group>\nSalts and Solvents\n\n$$$$\nformamide\n -INDIGO-11302219142D\n\n 4 3 0 0 0 0 0 0 0 0999 V2000\n 0.2485 -6.0342 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5476 -5.2841 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5476 -3.7842 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 2.8467 -6.0341 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 2 0 0 0 0\n 2 4 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 4 1 2 3 4\nM SMT 1 formamide\nM END\n> <name>\nformamide\n\n> <abbreviation>\nformamide\n\n> <group>\nSalts and Solvents\n\n$$$$\nn-methyl-2-pyrrolidone\n -INDIGO-11302219142D\n\n 7 7 0 0 0 0 0 0 0 0999 V2000\n 0.7500 2.3100 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n -0.4600 1.4300 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.9600 1.4300 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.7500 3.8100 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.3860 1.8953 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 3 2 1 0 0 0 0\n 2 1 1 0 0 0 0\n 1 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 3 1 0 0 0 0\n 1 6 1 0 0 0 0\n 4 7 2 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 N-methyl-2-pyrrolidone\nM END\n> <name>\nn-methyl-2-pyrrolidone\n\n> <abbreviation>\nN-methyl-2-pyrrolidone\n\n> <group>\nSalts and Solvents\n\n$$$$\nn-methylformamide\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 0.1009 0.5500 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 1.4000 1.3000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.4000 2.8000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 2.6990 0.5500 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0\n -1.1981 1.3000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 2 0 0 0 0\n 2 4 1 0 0 0 0\n 1 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 N-methylformamide\nM END\n> <name>\nn-methylformamide\n\n> <abbreviation>\nN-methylformamide\n\n> <group>\nSalts and Solvents\n\n$$$$\npropane nitrile\n -INDIGO-11302219142D\n\n 4 3 0 0 0 0 0 0 0 0999 V2000\n 6.8971 0.7500 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 4.2990 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5981 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 4 3 0 0 0 0\n 2 3 1 0 0 0 0\n 2 4 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 4 1 2 3 4\nM SMT 1 propane nitrile\nM END\n> <name>\npropane nitrile\n\n> <abbreviation>\npropane nitrile\n\n> <group>\nSalts and Solvents\n\n$$$$\nsulfolane\n -INDIGO-11302219142D\n\n 7 7 0 0 0 0 0 0 0 0999 V2000\n 0.7500 2.3100 0.0000 S 0 0 0 0 0 0 0 0 0 0 0 0\n -0.4600 1.4300 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.9600 1.4300 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5000 3.6090 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -0.0673 3.5678 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 3 2 1 0 0 0 0\n 2 1 1 0 0 0 0\n 1 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 3 1 0 0 0 0\n 1 6 2 0 0 0 0\n 1 7 2 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 sulfolane\nM END\n> <name>\nsulfolane\n\n> <abbreviation>\nsulfolane\n\n> <group>\nSalts and Solvents\n\n$$$$\namyl acetate\n -INDIGO-11302219142D\n\n 9 8 0 0 0 0 0 0 0 0999 V2000\n 5.8307 0.3714 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.1297 -0.3786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.5316 -0.3786 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 5.8307 1.8714 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 3.2326 0.3714 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.9335 -0.3785 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.6345 0.3715 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.6646 -0.3785 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -1.9636 0.3715 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 2 0 0 0 0\n 3 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 6 7 1 0 0 0 0\n 7 8 1 0 0 0 0\n 8 9 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 1 9\nM SMT 1 amyl acetate\nM END\n> <name>\namyl acetate\n\n> <abbreviation>\namyl acetate\n\n> <group>\nSalts and Solvents\n\n$$$$\nbutyl acetate\n -INDIGO-11302219142D\n\n 8 7 0 0 0 0 0 0 0 0999 V2000\n 7.5466 0.0000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 8.8456 2.2500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 4.9486 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.6495 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.2476 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.3505 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.8456 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 10.1446 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 5 1 0 0 0 0\n 1 7 1 0 0 0 0\n 2 7 2 0 0 0 0\n 3 4 1 0 0 0 0\n 3 5 1 0 0 0 0\n 4 6 1 0 0 0 0\n 7 8 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SMT 1 butyl acetate\nM END\n> <name>\nbutyl acetate\n\n> <abbreviation>\nbutyl acetate\n\n> <group>\nSalts and Solvents\n\n$$$$\ndimethyl carbonate\n -INDIGO-11302219142D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n 0.5429 -0.3429 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.5429 1.1571 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -0.7562 -1.0929 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1.8419 -1.0929 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -2.0552 -0.3429 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.1409 -0.3429 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 2 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 1 0 0 0 0\n 3 5 1 0 0 0 0\n 4 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 dimethyl carbonate\nM END\n> <name>\ndimethyl carbonate\n\n> <abbreviation>\ndimethyl carbonate\n\n> <group>\nSalts and Solvents\n\n$$$$\nethyl acetate\n -INDIGO-11302219142D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n 2.7079 -0.3429 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.7079 1.1571 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 4.0070 -1.0929 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.4089 -1.0929 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 0.1099 -0.3429 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -1.1891 -1.0929 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 2 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 ethyl acetate\nM END\n> <name>\nethyl acetate\n\n> <abbreviation>\nethyl acetate\n\n> <group>\nSalts and Solvents\n\n$$$$\nethyl formate\n -INDIGO-11302219142D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n 5.8087 -2.6404 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.8087 -1.1506 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 4.5094 -3.4018 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 3.2098 -2.6486 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.9103 -3.4018 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.1078 -3.3904 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0\n 2 1 2 0 0 0 0\n 3 1 1 0 0 0 0\n 4 3 1 0 0 0 0\n 5 4 1 0 0 0 0\n 1 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 ethyl formate\nM END\n> <name>\nethyl formate\n\n> <abbreviation>\nethyl formate\n\n> <group>\nSalts and Solvents\n\n$$$$\nethyl lactate\n -INDIGO-11302219142D\n\n 8 7 0 0 0 0 0 0 0 0999 V2000\n -0.3480 1.2991 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.9509 2.0491 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.2500 1.2991 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 3.5491 2.0491 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.5491 3.5491 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8480 1.2991 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1471 2.0491 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8480 -0.2009 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 2 0 0 0 0\n 4 6 1 0 0 0 0\n 6 7 1 0 0 0 0\n 6 8 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SMT 1 ethyl lactate\nM END\n> <name>\nethyl lactate\n\n> <abbreviation>\nethyl lactate\n\n> <group>\nSalts and Solvents\n\n$$$$\nethyl propionate\n -INDIGO-11302219142D\n\n 7 6 0 0 0 0 0 0 0 0999 V2000\n -0.3480 1.2991 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.9509 2.0491 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.2500 1.2991 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 3.5491 2.0491 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.5491 3.5491 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8480 1.2991 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1471 2.0491 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 2 0 0 0 0\n 4 6 1 0 0 0 0\n 6 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 ethyl propionate\nM END\n> <name>\nethyl propionate\n\n> <abbreviation>\nethyl propionate\n\n> <group>\nSalts and Solvents\n\n$$$$\nethylene carbonate\n -INDIGO-11302219142D\n\n 6 6 0 0 0 0 0 0 0 0999 V2000\n 1.0323 3.5259 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1.0323 2.0259 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.2458 1.1443 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1.7823 -0.2824 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.2824 -0.2824 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.1813 1.1443 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 2 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 2 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 ethylene carbonate\nM END\n> <name>\nethylene carbonate\n\n> <abbreviation>\nethylene carbonate\n\n> <group>\nSalts and Solvents\n\n$$$$\nisobutyl acetate\n -INDIGO-11302219142D\n\n 8 7 0 0 0 0 0 0 0 0999 V2000\n 4.4399 -0.3429 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.4399 1.1571 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 5.7390 -1.0929 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.1409 -1.0929 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1.8419 -0.3429 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.5429 -1.0929 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.5429 -2.5929 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.7561 -0.3429 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 2 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 6 7 1 0 0 0 0\n 6 8 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SMT 1 isobutyl acetate\nM END\n> <name>\nisobutyl acetate\n\n> <abbreviation>\nisobutyl acetate\n\n> <group>\nSalts and Solvents\n\n$$$$\nisopropyl acetate\n -INDIGO-11302219142D\n\n 7 6 0 0 0 0 0 0 0 0999 V2000\n 3.1409 -0.3429 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.1409 1.1571 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 4.4400 -1.0929 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.8419 -1.0929 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 0.5429 -0.3429 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.7561 -1.0929 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.5429 1.1571 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 2 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 5 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 isopropyl acetate\nM END\n> <name>\nisopropyl acetate\n\n> <abbreviation>\nisopropyl acetate\n\n> <group>\nSalts and Solvents\n\n$$$$\nmethyl acetate\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 0.5429 -0.3429 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.5429 1.1571 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -0.7562 -1.0929 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.8419 -1.0929 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 3.1409 -0.3429 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 2 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 1 0 0 0 0\n 4 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 methyl acetate\nM END\n> <name>\nmethyl acetate\n\n> <abbreviation>\nmethyl acetate\n\n> <group>\nSalts and Solvents\n\n$$$$\nmethyl formate\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 1.5821 -0.3429 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5821 1.1571 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 2.8812 -1.0929 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0\n 0.2831 -1.0929 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -1.0159 -0.3429 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 2 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 1 0 0 0 0\n 4 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 methyl formate\nM END\n> <name>\nmethyl formate\n\n> <abbreviation>\nmethyl formate\n\n> <group>\nSalts and Solvents\n\n$$$$\nmethyl lactate\n -INDIGO-11302219142D\n\n 7 6 0 0 0 0 0 0 0 0999 V2000\n 7.6971 -2.1071 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.3980 -2.8571 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 5.0991 -2.1071 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.0991 -0.6071 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 3.8000 -2.8571 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5009 -2.1071 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.8000 -4.3571 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 2 0 0 0 0\n 3 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 5 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 methyl lactate\nM END\n> <name>\nmethyl lactate\n\n> <abbreviation>\nmethyl lactate\n\n> <group>\nSalts and Solvents\n\n$$$$\nn-octylacetate\n -INDIGO-11302219142D\n\n 12 11 0 0 0 0 0 0 0 0999 V2000\n 7.7009 4.9462 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 9.0000 5.6962 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 10.2991 4.9462 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 11.5980 5.6962 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 12.8971 4.9462 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 14.1962 5.6962 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 15.4953 4.9462 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 16.7942 5.6962 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 18.0933 4.9462 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 19.3924 5.6962 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 20.6913 4.9462 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 19.3924 7.1962 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 6 7 1 0 0 0 0\n 7 8 1 0 0 0 0\n 8 9 1 0 0 0 0\n 9 10 1 0 0 0 0\n 10 11 1 0 0 0 0\n 10 12 2 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 4 9 10 11 12\nM SMT 1 n-octylacetate\nM END\n> <name>\nn-octylacetate\n\n> <abbreviation>\nn-octylacetate\n\n> <group>\nSalts and Solvents\n\n$$$$\npropyl acetate\n -INDIGO-11302219142D\n\n 7 6 0 0 0 0 0 0 0 0999 V2000\n 6.3403 -0.1607 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 7.6395 2.0893 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 3.7423 -0.1607 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.0413 0.5893 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.4433 0.5893 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.6395 0.5893 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.9385 -0.1607 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 4 1 0 0 0 0\n 1 6 1 0 0 0 0\n 2 6 2 0 0 0 0\n 3 4 1 0 0 0 0\n 3 5 1 0 0 0 0\n 6 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 propyl acetate\nM END\n> <name>\npropyl acetate\n\n> <abbreviation>\npropyl acetate\n\n> <group>\nSalts and Solvents\n\n$$$$\npropylene carbonate\n -INDIGO-11302219142D\n\n 7 7 0 0 0 0 0 0 0 0999 V2000\n 0.5661 -1.8745 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.5661 -0.3746 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.6474 0.5071 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.1839 1.9338 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1.3160 1.9338 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.1978 3.1472 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1.7797 0.5071 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 2 0 0 0 0\n 5 7 1 0 0 0 0\n 2 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 propylene carbonate\nM END\n> <name>\npropylene carbonate\n\n> <abbreviation>\npropylene carbonate\n\n> <group>\nSalts and Solvents\n\n$$$$\nt-butyl acetate\n -INDIGO-11302219142D\n\n 8 7 0 0 0 0 0 0 0 0999 V2000\n 6.0125 -7.4927 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.7134 -6.7427 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.7134 -5.2428 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 3.4144 -7.4928 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 2.1153 -6.7428 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.8163 -5.9928 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.3653 -8.0418 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.8653 -5.4437 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 2 0 0 0 0\n 2 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 5 7 1 0 0 0 0\n 5 8 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SMT 1 t-butyl acetate\nM END\n> <name>\nt-butyl acetate\n\n> <abbreviation>\nt-butyl acetate\n\n> <group>\nSalts and Solvents\n\n$$$$\n1,2-dimethoxyethane\n -INDIGO-11302219142D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n -0.0857 0.1714 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.2133 -0.5786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5124 0.1714 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -1.3848 -0.5786 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 3.8114 -0.5786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.6838 0.1714 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 1 4 1 0 0 0 0\n 3 5 1 0 0 0 0\n 4 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 1,2-dimethoxyethane\nM END\n> <name>\n1,2-dimethoxyethane\n\n> <abbreviation>\n1,2-dimethoxyethane\n\n> <group>\nSalts and Solvents\n\n$$$$\n1,4-dioxane\n -INDIGO-11302219142D\n\n 6 6 0 0 0 0 0 0 0 0999 V2000\n 3.9490 -2.3000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 2.6500 -3.0500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.6500 -4.5500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.9490 -5.3000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 5.2481 -4.5500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.2481 -3.0500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2 3 1 0 0 0 0\n 2 1 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 6 1 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 1,4-dioxane\nM END\n> <name>\n1,4-dioxane\n\n> <abbreviation>\n1,4-dioxane\n\n> <group>\nSalts and Solvents\n\n$$$$\n2-methyl tetrahydrofuran\n -INDIGO-11302219142D\n\n 6 6 0 0 0 0 0 0 0 0999 V2000\n 0.7500 2.3100 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -0.4600 1.4300 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.9600 1.4300 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.3860 1.8953 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3 2 1 0 0 0 0\n 2 1 1 0 0 0 0\n 1 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 3 1 0 0 0 0\n 4 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 2-methyl tetrahydrofuran\nM END\n> <name>\n2-methyl tetrahydrofuran\n\n> <abbreviation>\n2-methyl tetrahydrofuran\n\n> <group>\nSalts and Solvents\n\n$$$$\nanisole\n -INDIGO-11302219142D\n\n 8 8 0 0 0 0 0 0 0 0999 V2000\n 6.1000 0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 -0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 -0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 -2.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1000 -2.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 -2.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1000 1.7500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 2.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 2 0 0 0 0\n 2 4 2 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 2 0 0 0 0\n 6 3 1 0 0 0 0\n 1 7 1 0 0 0 0\n 7 8 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SMT 1 anisole\nM END\n> <name>\nanisole\n\n> <abbreviation>\nanisole\n\n> <group>\nSalts and Solvents\n\n$$$$\nbutyl carbitol\n -INDIGO-11302219142D\n\n 11 10 0 0 0 0 0 0 0 0999 V2000\n -0.2227 -3.0342 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.0742 -3.7829 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.3750 -3.0387 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.6719 -3.7875 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.9782 -3.0336 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 6.2751 -3.7823 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.5758 -3.0382 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.8728 -3.7870 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 10.1792 -3.0330 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 11.4761 -3.7817 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 12.7768 -3.0376 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 6 7 1 0 0 0 0\n 7 8 1 0 0 0 0\n 8 9 1 0 0 0 0\n 9 10 1 0 0 0 0\n 10 11 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 3 9 10 11\nM SMT 1 butyl carbitol\nM END\n> <name>\nbutyl carbitol\n\n> <abbreviation>\nbutyl carbitol\n\n> <group>\nSalts and Solvents\n\n$$$$\ncyclopentyl methyl ether\n -INDIGO-11302219142D\n\n 7 7 0 0 0 0 0 0 0 0999 V2000\n 6.1000 1.7500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 1.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 1.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.5053 1.7481 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.3855 0.7467 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.4886 -0.4632 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.9950 -0.6239 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 5 4 1 0 0 0 0\n 4 2 1 0 0 0 0\n 2 6 1 0 0 0 0\n 6 7 1 0 0 0 0\n 7 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 cyclopentyl methyl ether\nM END\n> <name>\ncyclopentyl methyl ether\n\n> <abbreviation>\ncyclopentyl methyl ether\n\n> <group>\nSalts and Solvents\n\n$$$$\ndibutyl ether\n -INDIGO-11302219142D\n\n 9 8 0 0 0 0 0 0 0 0999 V2000\n 5.4509 4.6471 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.7500 3.8971 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.0491 4.6471 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 9.3480 3.8971 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 10.6470 4.6471 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 11.9461 3.8971 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 13.2452 4.6471 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 14.5441 3.8971 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 15.8432 4.6471 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 6 7 1 0 0 0 0\n 7 8 1 0 0 0 0\n 8 9 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 1 9\nM SMT 1 dibutyl ether\nM END\n> <name>\ndibutyl ether\n\n> <abbreviation>\ndibutyl ether\n\n> <group>\nSalts and Solvents\n\n$$$$\ndiethyl ether\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 6.1000 1.7500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 2.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 2.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.5019 1.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.6980 1.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 2 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 ether\nM END\n> <name>\ndiethyl ether\n\n> <abbreviation>\nether\n\n> <group>\nSalts and Solvents\n\n$$$$\ndiethylene glycol\n -INDIGO-11302219142D\n\n 7 6 0 0 0 0 0 0 0 0999 V2000\n 7.7875 -1.4835 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.4896 -2.2328 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.1892 -1.4790 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 3.8854 -2.2317 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5884 -1.4840 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.2906 -2.2333 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 9.0845 -2.2313 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 7 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 diethylene glycol\nM END\n> <name>\ndiethylene glycol\n\n> <abbreviation>\ndiethylene glycol\n\n> <group>\nSalts and Solvents\n\n$$$$\ndiglyme\n -INDIGO-11302219142D\n\n 9 8 0 0 0 0 0 0 0 0999 V2000\n -0.0857 0.1714 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.2133 -0.5786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5124 0.1714 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -1.3848 -0.5786 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 3.8114 -0.5786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.6838 0.1714 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.9828 -0.5786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -5.2818 0.1714 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -6.5809 -0.5786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 1 4 1 0 0 0 0\n 3 5 1 0 0 0 0\n 4 6 1 0 0 0 0\n 6 7 1 0 0 0 0\n 7 8 1 0 0 0 0\n 8 9 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 1 9\nM SMT 1 diglyme\nM END\n> <name>\ndiethylene glycol dimethyl ether\n\n> <abbreviation>\ndiglyme\n\n> <group>\nSalts and Solvents\n\n$$$$\ndiisopropyl ether\n -INDIGO-11302219142D\n\n 7 6 0 0 0 0 0 0 0 0999 V2000\n 5.5971 2.8500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.2980 3.6000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.2980 5.1000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.9991 2.8500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1.7000 3.6000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.4009 2.8500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.7000 5.1000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 2 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 5 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 diisopropyl ether\nM END\n> <name>\ndiisopropyl ether\n\n> <abbreviation>\ndiisopropyl ether\n\n> <group>\nSalts and Solvents\n\n$$$$\ndimethyl ether\n -INDIGO-11302219142D\n\n 3 2 0 0 0 0 0 0 0 0999 V2000\n 4.2989 -0.3750 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5980 0.3750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.9999 0.3750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 3 1 2 3\nM SMT 1 dimethyl ether\nM END\n> <name>\ndimethyl ether\n\n> <abbreviation>\ndimethyl ether\n\n> <group>\nSalts and Solvents\n\n$$$$\ndiphenyl ether\n -INDIGO-11302219142D\n\n 13 14 0 0 0 0 0 0 0 0999 V2000\n 7.1190 1.0305 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 5.8200 0.2805 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.8200 -1.2196 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.5210 -1.9696 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.2219 -1.2195 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.2219 0.2805 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.5209 1.0305 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.4181 0.2804 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 9.7171 1.0304 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 11.0161 0.2805 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 11.0161 -1.2194 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 9.7170 -1.9694 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.4180 -1.2195 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 2 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 2 0 0 0 0\n 5 6 1 0 0 0 0\n 6 7 2 0 0 0 0\n 2 7 1 0 0 0 0\n 1 8 1 0 0 0 0\n 8 9 2 0 0 0 0\n 9 10 1 0 0 0 0\n 10 11 2 0 0 0 0\n 11 12 1 0 0 0 0\n 12 13 2 0 0 0 0\n 8 13 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 5 9 10 11 12 13\nM SMT 1 diphenyl ether\nM END\n> <name>\ndiphenyl ether\n\n> <abbreviation>\ndiphenyl ether\n\n> <group>\nSalts and Solvents\n\n$$$$\nethoxybenzene\n -INDIGO-11302219142D\n\n 9 9 0 0 0 0 0 0 0 0999 V2000\n 0.0000 6.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 4.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.2991 3.7500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1.2991 2.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5980 1.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5980 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.2991 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 1.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 2 0 0 0 0\n 5 6 1 0 0 0 0\n 6 7 2 0 0 0 0\n 7 8 1 0 0 0 0\n 8 9 2 0 0 0 0\n 4 9 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 1 9\nM SMT 1 ethoxybenzene\nM END\n> <name>\nethoxybenzene\n\n> <abbreviation>\nethoxybenzene\n\n> <group>\nSalts and Solvents\n\n$$$$\nmethyl t-butyl ether\n -INDIGO-11302219142D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n 6.1000 1.7500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 1.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 1.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.5019 0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.0510 2.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5510 -0.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 2 4 1 0 0 0 0\n 2 5 1 0 0 0 0\n 2 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 methyl t-butyl ether\nM END\n> <name>\nmethyl t-butyl ether\n\n> <abbreviation>\nmethyl t-butyl ether\n\n> <group>\nSalts and Solvents\n\n$$$$\nt-amyl methyl ether\n -INDIGO-11302219142D\n\n 7 6 0 0 0 0 0 0 0 0999 V2000\n 6.8972 0.7500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5982 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.2990 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8482 1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.3482 -1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.1962 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 7 1 0 0 0 0\n 2 3 1 0 0 0 0\n 2 4 1 0 0 0 0\n 2 5 1 0 0 0 0\n 3 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 t-amyl methyl ether\nM END\n> <name>\nt-amyl methyl ether\n\n> <abbreviation>\nt-amyl methyl ether\n\n> <group>\nSalts and Solvents\n\n$$$$\nt-butylethyl ether\n -INDIGO-11302219142D\n\n 7 6 0 0 0 0 0 0 0 0999 V2000\n 2.3688 -7.1130 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.0698 -7.8630 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.2293 -7.1129 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -1.5283 -7.8629 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.8274 -8.6129 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.2783 -6.5639 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.7783 -9.1620 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 4 6 1 0 0 0 0\n 4 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 t-butylethyl ether\nM END\n> <name>\nt-butylethyl ether\n\n> <abbreviation>\nt-butylethyl ether\n\n> <group>\nSalts and Solvents\n\n$$$$\ntetrahydrofuran\n -INDIGO-11302219142D\n\n 5 5 0 0 0 0 0 0 0 0999 V2000\n 0.7500 2.3100 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -0.4600 1.4300 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.9600 1.4300 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3 2 1 0 0 0 0\n 2 1 1 0 0 0 0\n 1 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 3 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 THF\nM END\n> <name>\ntetrahydrofuran\n\n> <abbreviation>\nTHF\n\n> <group>\nSalts and Solvents\n\n$$$$\ntriethylene glycol\n -INDIGO-11302219142D\n\n 10 9 0 0 0 0 0 0 0 0999 V2000\n 4.1520 3.8971 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 5.4509 4.6471 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.7500 3.8971 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.0491 4.6471 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 9.3480 3.8971 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 10.6471 4.6471 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 11.9462 3.8971 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 13.2453 4.6471 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 14.5442 3.8971 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 15.8433 4.6471 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 6 7 1 0 0 0 0\n 7 8 1 0 0 0 0\n 8 9 1 0 0 0 0\n 9 10 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 2 9 10\nM SMT 1 triethylene glycol\nM END\n> <name>\ntriethylene glycol\n\n> <abbreviation>\ntriethylene glycol\n\n> <group>\nSalts and Solvents\n\n$$$$\n1,2,4-trichlorobenzene\n -INDIGO-11302219142D\n\n 9 9 0 0 0 0 0 0 0 0999 V2000\n 2.2506 -3.8983 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.9991 -2.5989 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.2506 -1.2994 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.7485 -1.2994 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 -2.5989 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.7485 -3.8983 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 -5.1978 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 0.0000 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 2.9991 0.0000 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 6 2 0 0 0 0\n 2 3 2 0 0 0 0\n 3 4 1 0 0 0 0\n 3 9 1 0 0 0 0\n 4 5 2 0 0 0 0\n 4 8 1 0 0 0 0\n 5 6 1 0 0 0 0\n 6 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 1 9\nM SMT 1 1,2,4-trichlorobenzene\nM END\n> <name>\n1,2,4-trichlorobenzene\n\n> <abbreviation>\n1,2,4-trichlorobenzene\n\n> <group>\nSalts and Solvents\n\n$$$$\n1,2-dichlorobenzene\n -INDIGO-11302219142D\n\n 8 8 0 0 0 0 0 0 0 0999 V2000\n 0.9558 -0.8403 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.4581 -0.8408 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.2048 0.4582 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.4555 1.7560 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.9571 1.7589 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.2065 0.4576 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.2078 3.0567 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 3.2060 3.0573 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 6 2 0 0 0 0\n 2 3 2 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 2 0 0 0 0\n 4 8 1 0 0 0 0\n 5 6 1 0 0 0 0\n 5 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SMT 1 1,2-dichlorobenzene\nM END\n> <name>\n1,2-dichlorobenzene\n\n> <abbreviation>\n1,2-dichlorobenzene\n\n> <group>\nSalts and Solvents\n\n$$$$\n1,2-dichloroethane\n -INDIGO-11302219142D\n\n 4 3 0 0 0 0 0 0 0 0999 V2000\n -0.2571 0.8286 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.0419 1.5786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.3409 0.8286 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n -1.5562 1.5786 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 1 4 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 4 1 2 3 4\nM SMT 1 DCE\nM END\n> <name>\n1,2-dichloroethane\n\n> <abbreviation>\nDCE\n\n> <group>\nSalts and Solvents\n\n$$$$\n2,2,2-trifluoroethanol\n -INDIGO-11302219142D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n 2.3661 -2.2500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1.0670 -1.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.0670 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.0670 1.5000 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n -0.4330 0.0000 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5670 0.0000 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 3 5 1 0 0 0 0\n 3 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 2,2,2-trifluoroethanol\nM END\n> <name>\n2,2,2-trifluoroethanol\n\n> <abbreviation>\n2,2,2-trifluoroethanol\n\n> <group>\nSalts and Solvents\n\n$$$$\n2,3,4-trifluorotoluene\n -INDIGO-11302219142D\n\n 10 10 0 0 0 0 0 0 0 0999 V2000\n 4.0898 1.7173 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 7.0899 1.7173 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 8.5899 -0.8808 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 4.0898 -0.8807 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8398 0.4183 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8399 -2.1798 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.3399 0.4182 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5898 -0.8807 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.3399 -2.1798 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.0899 -0.8808 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 5 1 0 0 0 0\n 2 7 1 0 0 0 0\n 3 10 1 0 0 0 0\n 4 5 2 0 0 0 0\n 4 6 1 0 0 0 0\n 4 8 1 0 0 0 0\n 5 7 1 0 0 0 0\n 6 9 2 0 0 0 0\n 7 10 2 0 0 0 0\n 9 10 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 2 9 10\nM SMT 1 2,3,4-trifluorotoluene\nM END\n> <name>\n2,3,4-trifluorotoluene\n\n> <abbreviation>\n2,3,4-trifluorotoluene\n\n> <group>\nSalts and Solvents\n\n$$$$\ncarbon tetrachloride\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 6.1000 0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1000 1.7500 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1000 -1.2500 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 7.6000 0.2500 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 4.6000 0.2500 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 1 0 0 0 0\n 1 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 carbon tetrachloride\nM END\n> <name>\ncarbon tetrachloride\n\n> <abbreviation>\ncarbon tetrachloride\n\n> <group>\nSalts and Solvents\n\n$$$$\nchloroacetic acid\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 9.0626 -7.0246 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 9.0626 -5.5268 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 10.3632 -7.7759 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 6.4658 -7.0246 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 7.7666 -7.7759 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2 1 2 0 0 0 0\n 3 1 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 1 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 chloroacetic acid\nM END\n> <name>\nchloroacetic acid\n\n> <abbreviation>\nchloroacetic acid\n\n> <group>\nSalts and Solvents\n\n$$$$\nchlorobenzene\n -INDIGO-11302219142D\n\n 7 7 0 0 0 0 0 0 0 0999 V2000\n 6.1000 0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 -0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 -0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 -2.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1000 -2.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 -2.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1000 1.7500 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 2 0 0 0 0\n 2 4 2 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 2 0 0 0 0\n 6 3 1 0 0 0 0\n 1 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 chlorobenzene\nM END\n> <name>\nchlorobenzene\n\n> <abbreviation>\nchlorobenzene\n\n> <group>\nSalts and Solvents\n\n$$$$\nchloroform\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 6.1000 0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1000 1.7500 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1000 -1.2500 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 7.6000 0.2500 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0\n 4.6000 0.2500 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 1 0 0 0 0\n 1 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 chloroform\nM END\n> <name>\nchloroform\n\n> <abbreviation>\nchloroform\n\n> <group>\nSalts and Solvents\n\n$$$$\ndichloromethane\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 6.1000 0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 -0.5000 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 -0.5000 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 6.8500 1.5490 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0\n 5.3500 1.5490 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 1 0 0 0 0\n 1 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 DCM\nM END\n> <name>\ndichloromethane\n\n> <abbreviation>\nDCM\n\n> <group>\nSalts and Solvents\n\n$$$$\nfluorobenzene\n -INDIGO-11302219142D\n\n 7 7 0 0 0 0 0 0 0 0999 V2000\n 1.2991 3.7500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 1.2991 2.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5980 1.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5980 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.2991 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 1.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 2 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 2 0 0 0 0\n 5 6 1 0 0 0 0\n 6 7 2 0 0 0 0\n 2 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 fluorobenzene\nM END\n> <name>\nfluorobenzene\n\n> <abbreviation>\nfluorobenzene\n\n> <group>\nSalts and Solvents\n\n$$$$\nperfluorocyclic ether\n -INDIGO-11302219142D\n\n 25 25 0 0 0 0 0 0 0 0999 V2000\n -1.9038 -6.0746 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n -1.9038 -4.5746 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.4038 -4.5746 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n -1.9038 -3.0746 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n -0.4038 -4.5746 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.4038 -6.0746 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n -0.4038 -3.0746 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 1.0962 -4.5746 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.0962 -6.0746 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 1.0962 -3.0746 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5962 -4.5746 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5962 -6.0746 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5962 -3.0746 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 4.0962 -4.5746 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.9395 -6.0662 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 3.9395 -3.0827 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 5.3099 -2.4726 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.5598 -1.1736 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 6.5233 -1.5909 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 6.3135 -3.5873 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3173 -2.4726 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 7.5271 -4.4689 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5635 -4.8864 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.7677 -5.7808 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 5.4224 -6.3797 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 2 4 1 0 0 0 0\n 2 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 5 7 1 0 0 0 0\n 5 8 1 0 0 0 0\n 8 9 1 0 0 0 0\n 8 10 1 0 0 0 0\n 8 11 1 0 0 0 0\n 11 12 1 0 0 0 0\n 11 13 1 0 0 0 0\n 11 14 1 0 0 0 0\n 14 15 1 0 0 0 0\n 14 16 1 0 0 0 0\n 16 17 1 0 0 0 0\n 17 18 1 0 0 0 0\n 17 19 1 0 0 0 0\n 17 20 1 0 0 0 0\n 20 21 1 0 0 0 0\n 20 22 1 0 0 0 0\n 20 23 1 0 0 0 0\n 14 23 1 0 0 0 0\n 23 24 1 0 0 0 0\n 23 25 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 8 9 10 11 12 13 14 15 16\nM SAL 1 8 17 18 19 20 21 22 23 24\nM SAL 1 1 25\nM SMT 1 perfluorocyclic ether\nM END\n> <name>\nperfluorocyclic ether\n\n> <abbreviation>\nperfluorocyclic ether\n\n> <group>\nSalts and Solvents\n\n$$$$\nperfluorocyclohexane\n -INDIGO-11302219142D\n\n 18 18 0 0 0 0 0 0 0 0999 V2000\n 7.8482 2.0490 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 8.5982 0.7500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 6.5491 2.7990 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 5.0490 2.7990 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 8.5982 -0.7500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 7.8482 -2.0490 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 0.7500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 3.7500 2.0490 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 5.0490 -2.7990 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 6.5491 -2.7990 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 3.7500 -2.0490 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 -0.7500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 7.0982 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.7991 1.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.0982 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.5000 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.7991 -1.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.5000 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 13 1 0 0 0 0\n 2 13 1 0 0 0 0\n 3 14 1 0 0 0 0\n 4 14 1 0 0 0 0\n 5 15 1 0 0 0 0\n 6 15 1 0 0 0 0\n 7 16 1 0 0 0 0\n 8 16 1 0 0 0 0\n 9 17 1 0 0 0 0\n 10 17 1 0 0 0 0\n 11 18 1 0 0 0 0\n 12 18 1 0 0 0 0\n 13 14 1 0 0 0 0\n 13 15 1 0 0 0 0\n 14 16 1 0 0 0 0\n 15 17 1 0 0 0 0\n 16 18 1 0 0 0 0\n 17 18 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 8 9 10 11 12 13 14 15 16\nM SAL 1 2 17 18\nM SMT 1 perfluorocyclohexane\nM END\n> <name>\nperfluorocyclohexane\n\n> <abbreviation>\nperfluorocyclohexane\n\n> <group>\nSalts and Solvents\n\n$$$$\nperfluorohexane\n -INDIGO-11302219142D\n\n 20 19 0 0 0 0 0 0 0 0999 V2000\n 6.1472 0.9240 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 7.6472 -1.6740 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 8.9463 -0.9240 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 7.4462 1.6740 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 6.3482 -2.4240 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8482 0.1740 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 8.7453 2.4240 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 10.2453 -0.1740 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 5.0491 -3.1740 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 3.5490 -0.5760 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 -2.6250 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 10.0444 3.1740 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 11.5444 0.5760 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 12.0935 2.6250 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 6.8972 -0.3750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.1963 0.3750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5982 -1.1250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 9.4953 1.1250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.2991 -1.8750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 10.7944 1.8750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 15 1 0 0 0 0\n 2 15 1 0 0 0 0\n 3 16 1 0 0 0 0\n 4 16 1 0 0 0 0\n 5 17 1 0 0 0 0\n 6 17 1 0 0 0 0\n 7 18 1 0 0 0 0\n 8 18 1 0 0 0 0\n 9 19 1 0 0 0 0\n 10 19 1 0 0 0 0\n 11 19 1 0 0 0 0\n 12 20 1 0 0 0 0\n 13 20 1 0 0 0 0\n 14 20 1 0 0 0 0\n 15 16 1 0 0 0 0\n 15 17 1 0 0 0 0\n 16 18 1 0 0 0 0\n 17 19 1 0 0 0 0\n 18 20 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 8 9 10 11 12 13 14 15 16\nM SAL 1 4 17 18 19 20\nM SMT 1 perfluorohexane\nM END\n> <name>\nperfluorohexane\n\n> <abbreviation>\nperfluorohexane\n\n> <group>\nSalts and Solvents\n\n$$$$\nperfluorotoluene\n -INDIGO-11302219142D\n\n 15 15 0 0 0 0 0 0 0 0999 V2000\n 3.0000 0.7500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 8.1962 0.7500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5982 3.7500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 7.0982 2.2500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 4.0982 2.2500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 8.1962 -2.2500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 -2.2500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5982 -3.7500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5982 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.2990 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.8972 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5982 2.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.8972 -1.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.2990 -1.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5982 -2.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 10 1 0 0 0 0\n 2 11 1 0 0 0 0\n 3 12 1 0 0 0 0\n 4 12 1 0 0 0 0\n 5 12 1 0 0 0 0\n 6 13 1 0 0 0 0\n 7 14 1 0 0 0 0\n 8 15 1 0 0 0 0\n 9 10 2 0 0 0 0\n 9 11 1 0 0 0 0\n 9 12 1 0 0 0 0\n 10 14 1 0 0 0 0\n 11 13 2 0 0 0 0\n 13 15 1 0 0 0 0\n 14 15 2 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 7 9 10 11 12 13 14 15\nM SMT 1 perfluorotoluene\nM END\n> <name>\nperfluorotoluene\n\n> <abbreviation>\nperfluorotoluene\n\n> <group>\nSalts and Solvents\n\n$$$$\ntrichloroacetic acid\n -INDIGO-11302219142D\n\n 7 6 0 0 0 0 0 0 0 0999 V2000\n 4.3154 -3.6247 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.6336 -2.8642 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.6336 -1.3688 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0543 -2.8010 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 3.1051 -4.3218 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 4.3090 -5.1835 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 6.9579 -3.6120 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 2 1 1 0 0 0 0\n 3 2 2 0 0 0 0\n 4 1 1 0 0 0 0\n 5 1 1 0 0 0 0\n 6 1 1 0 0 0 0\n 7 2 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 trichloroacetic acid\nM END\n> <name>\ntrichloroacetic acid\n\n> <abbreviation>\ntrichloroacetic acid\n\n> <group>\nSalts and Solvents\n\n$$$$\ntrichloroacetonitrile\n -INDIGO-11302219142D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n 4.5000 0.0000 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 1.5000 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0000 -1.5000 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 0.0000 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 2 4 1 0 0 0 0\n 2 5 1 0 0 0 0\n 5 6 3 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 trichloroacetonitrile\nM END\n> <name>\ntrichloroacetonitrile\n\n> <abbreviation>\ntrichloroacetonitrile\n\n> <group>\nSalts and Solvents\n\n$$$$\ntrifluoroacetic acid\n -INDIGO-11302219142D\n\n 7 6 0 0 0 0 0 0 0 0999 V2000\n 1.0500 -4.9991 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 0.3000 -3.7000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.0500 -2.4009 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -1.2000 -3.7000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.7000 -3.7000 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n -1.2000 -2.2000 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n -1.2000 -5.2000 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 2 0 0 0 0\n 2 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 4 6 1 0 0 0 0\n 4 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 trifluoroacetic acid\nM END\n> <name>\ntrifluoroacetic acid\n\n> <abbreviation>\ntrifluoroacetic acid\n\n> <group>\nSalts and Solvents\n\n$$$$\ntrifluoromethylbenzene\n -INDIGO-11302219142D\n\n 10 10 0 0 0 0 0 0 0 0999 V2000\n 6.1000 0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 -0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 -0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8010 -2.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1000 -2.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.3990 -2.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1000 1.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1000 3.2500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 4.6000 1.7500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 7.6000 1.7500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 2 0 0 0 0\n 2 4 2 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 2 0 0 0 0\n 6 3 1 0 0 0 0\n 1 7 1 0 0 0 0\n 7 8 1 0 0 0 0\n 7 9 1 0 0 0 0\n 7 10 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 2 9 10\nM SMT 1 trifluoromethylbenzene\nM END\n> <name>\ntrifluoromethylbenzene\n\n> <abbreviation>\ntrifluoromethylbenzene\n\n> <group>\nSalts and Solvents\n\n$$$$\n2-methylpentane\n -INDIGO-11302219142D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n 0.5471 -1.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.7520 -0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.0509 -1.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.3500 -0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -4.6491 -1.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.3500 1.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 4 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 2-methylpentane\nM END\n> <name>\n2-methylpentane\n\n> <abbreviation>\n2-methylpentane\n\n> <group>\nSalts and Solvents\n\n$$$$\ncis-decalin\n -INDIGO-11302219142D\n\n 12 13 0 0 1 0 0 0 0 0999 V2000\n 2.6130 -0.7481 0.0000 C 0 0 2 0 0 0 0 0 0 0 0 0\n 2.6130 -2.2234 0.0000 C 0 0 1 0 0 0 0 0 0 0 0 0\n 1.3195 -3.0026 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.3195 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.8754 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.8754 -2.9714 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 -0.7481 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.1948 -0.7481 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.1948 -2.2234 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 -2.2234 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5583 0.8018 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0\n 2.6130 -3.6988 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 4 1 0 0 0 0\n 1 5 1 0 0 0 0\n 2 3 1 0 0 0 0\n 2 6 1 0 0 0 0\n 3 10 1 0 0 0 0\n 4 7 1 0 0 0 0\n 5 8 1 0 0 0 0\n 6 9 1 0 0 0 0\n 7 10 1 0 0 0 0\n 8 9 1 0 0 0 0\n 1 11 1 1 0 0 0\n 2 12 1 1 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 4 9 10 11 12\nM SMT 1 cis-decalin\nM END\n> <name>\ncis-decalin\n\n> <abbreviation>\ncis-decalin\n\n> <group>\nSalts and Solvents\n\n$$$$\ncyclohexane\n -INDIGO-11302219142D\n\n 6 6 0 0 0 0 0 0 0 0999 V2000\n 3.9490 -2.3000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.6500 -3.0500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.6500 -4.5500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.9490 -5.3000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.2481 -4.5500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.2481 -3.0500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2 3 1 0 0 0 0\n 2 1 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 6 1 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 cyclohexane\nM END\n> <name>\ncyclohexane\n\n> <abbreviation>\ncyclohexane\n\n> <group>\nSalts and Solvents\n\n$$$$\nisooctane\n -INDIGO-11302219142D\n\n 8 7 0 0 0 0 0 0 0 0999 V2000\n 4.6062 -2.5071 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.9052 -1.7571 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.2043 -2.5071 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.5033 -1.7571 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 9.8023 -2.5071 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.1552 -0.4581 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.6552 -0.4580 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.5033 -0.2571 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 2 6 1 0 0 0 0\n 2 7 1 0 0 0 0\n 4 8 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SMT 1 isooctane\nM END\n> <name>\nisooctane\n\n> <abbreviation>\nisooctane\n\n> <group>\nSalts and Solvents\n\n$$$$\nmethylcyclohexane\n -INDIGO-11302219142D\n\n 7 7 0 0 0 0 0 0 0 0999 V2000\n 3.9490 -2.3000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.6500 -3.0500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.6500 -4.5500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.9490 -5.3000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.2481 -4.5500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.2481 -3.0500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.9490 -0.8000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2 3 1 0 0 0 0\n 2 1 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 6 1 1 0 0 0 0\n 1 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 methylcyclohexane\nM END\n> <name>\nmethylcyclohexane\n\n> <abbreviation>\nmethylcyclohexane\n\n> <group>\nSalts and Solvents\n\n$$$$\nmethylcyclopentane\n -INDIGO-11302219142D\n\n 6 6 0 0 0 0 0 0 0 0999 V2000\n 4.2136 0.4041 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.4271 -0.4776 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0001 -0.4776 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.9636 -1.9041 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.4636 -1.9041 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.2136 1.9041 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 6 1 0 0 0 0\n 2 4 1 0 0 0 0\n 3 5 1 0 0 0 0\n 4 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 methylcyclopentane\nM END\n> <name>\nmethylcyclopentane\n\n> <abbreviation>\nmethylcyclopentane\n\n> <group>\nSalts and Solvents\n\n$$$$\nheptane\n -INDIGO-11302219142D\n\n 7 6 0 0 0 0 0 0 0 0999 V2000\n 4.6062 -2.5071 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.9052 -1.7571 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.2043 -2.5071 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.5033 -1.7571 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 9.8023 -2.5071 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 11.1014 -1.7571 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 12.4004 -2.5071 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 6 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 n-heptane\nM END\n> <name>\nheptane\n\n> <abbreviation>\nn-heptane\n\n> <group>\nSalts and Solvents\n\n$$$$\nhexane\n -INDIGO-11302219142D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n 4.6062 -2.5071 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.9052 -1.7571 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.2043 -2.5071 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.5033 -1.7571 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 9.8023 -2.5071 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 11.1014 -1.7571 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 n-hexane\nM END\n> <name>\nhexane\n\n> <abbreviation>\nn-hexane\n\n> <group>\nSalts and Solvents\n\n$$$$\npentane\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 2.5624 -4.3230 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.1578 -4.3230 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.8600 -3.5708 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.4556 -3.5708 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.2647 -3.5708 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2 3 1 0 0 0 0\n 3 1 1 0 0 0 0\n 4 2 1 0 0 0 0\n 5 1 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 pentane\nM END\n> <name>\npentane\n\n> <abbreviation>\npentane\n\n> <group>\nSalts and Solvents\n\n$$$$\n2-pentanone\n -INDIGO-11302219142D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n -1.5971 -4.2000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.2980 -3.4500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.0009 -4.2000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.3000 -3.4500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.5991 -4.2000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.3000 -1.9500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 4 6 2 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 2-pentanone\nM END\n> <name>\n2-pentanone\n\n> <abbreviation>\n2-pentanone\n\n> <group>\nSalts and Solvents\n\n$$$$\n3-pentanone\n -INDIGO-11302219142D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n 2.6558 5.4039 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.9548 4.6539 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.2538 5.4039 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.2539 6.9040 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 6.5530 4.6539 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 7.8520 5.4039 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 2 0 0 0 0\n 3 5 1 0 0 0 0\n 5 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 3-pentanone\nM END\n> <name>\n3-pentanone\n\n> <abbreviation>\n3-pentanone\n\n> <group>\nSalts and Solvents\n\n$$$$\nacetone\n -INDIGO-11302219142D\n\n 4 3 0 0 0 0 0 0 0 0999 V2000\n 0.0571 0.3714 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -1.2419 -0.3786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.3562 -0.3786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0571 1.8714 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 2 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 4 1 2 3 4\nM SMT 1 propanone\nM END\n> <name>\nacetone\n\n> <abbreviation>\npropanone\n\n> <group>\nSalts and Solvents\n\n$$$$\ncyclohexanone\n -INDIGO-11302219142D\n\n 7 7 0 0 0 0 0 0 0 0999 V2000\n 0.0571 0.3714 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -1.2419 -0.3786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.3562 -0.3786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0571 1.8714 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -1.2419 -1.8786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0571 -2.6286 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.3562 -1.8786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 2 0 0 0 0\n 2 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 6 7 1 0 0 0 0\n 7 3 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 cyclohexanone\nM END\n> <name>\ncyclohexanone\n\n> <abbreviation>\ncyclohexanone\n\n> <group>\nSalts and Solvents\n\n$$$$\ncyclopentanone\n -INDIGO-11302219142D\n\n 6 6 0 0 0 0 0 0 0 0999 V2000\n 1.0323 3.5259 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1.0323 2.0259 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.2458 1.1443 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.7823 -0.2824 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.2824 -0.2824 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.1813 1.1443 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 2 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 2 6 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 cyclopentanone\nM END\n> <name>\ncyclopentanone\n\n> <abbreviation>\ncyclopentanone\n\n> <group>\nSalts and Solvents\n\n$$$$\nmethyl ethyl ketone\n -INDIGO-11302219142D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 0.0571 0.3714 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -1.2419 -0.3786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.3562 -0.3786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0571 1.8714 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -2.5409 0.3714 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 2 0 0 0 0\n 2 5 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 MEK\nM END\n> <name>\nmethyl ethyl ketone\n\n> <abbreviation>\nMEK\n\n> <group>\nSalts and Solvents\n\n$$$$\nmethyl isobutyl ketone\n -INDIGO-11302219142D\n\n 7 6 0 0 0 0 0 0 0 0999 V2000\n 0.0571 0.3714 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -1.2419 -0.3786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.3562 -0.3786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0571 1.8714 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n -2.5409 0.3714 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.8399 -0.3786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.5409 1.8714 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 2 0 0 0 0\n 2 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 5 7 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 methyl isobutyl ketone\nM END\n> <name>\nmethyl isobutyl ketone\n\n> <abbreviation>\nmethyl isobutyl ketone\n\n> <group>\nSalts and Solvents\n\n$$$$\ncarbon disulfide\n -INDIGO-11302219142D\n\n 3 2 0 0 0 0 0 0 0 0999 V2000\n 5.7990 0.0000 0.0000 S 0 0 0 0 0 0 0 0 0 0 0 0\n 2.7989 0.0000 0.0000 S 0 0 0 0 0 0 0 0 0 0 0 0\n 4.2989 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 3 2 0 0 0 0\n 2 3 2 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 3 1 2 3\nM SMT 1 carbon disulfide\nM END\n> <name>\ncarbon disulfide\n\n> <abbreviation>\ncarbon disulfide\n\n> <group>\nSalts and Solvents\n\n$$$$\nnitromethane\n -INDIGO-11302219142D\n\n 4 3 0 0 0 0 0 0 0 0999 V2000\n 1.5009 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.8000 1.5000 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 4.0991 0.7500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 2.8000 3.0000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 2 4 2 0 0 0 0\nM CHG 2 2 1 3 -1\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 4 1 2 3 4\nM SMT 1 nitromethane\nM END\n> <name>\nnitromethane\n\n> <abbreviation>\nnitromethane\n\n> <group>\nSalts and Solvents\n\n$$$$\no-xylene\n -INDIGO-11302219142D\n\n 8 8 0 0 0 0 0 0 0 0999 V2000\n -2.1500 4.4750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.4490 3.7250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.4490 2.2250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.1500 1.4750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.8510 2.2250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.8510 3.7250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.1500 5.9750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.4481 4.4750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 2 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 2 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 2 0 0 0 0\n 6 1 1 0 0 0 0\n 1 7 1 0 0 0 0\n 6 8 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SMT 1 o-xylene\nM END\n> <name>\no-xylene\n\n> <abbreviation>\no-xylene\n\n> <group>\nSalts and Solvents\n\n$$$$\nm-xylene\n -INDIGO-11302219142D\n\n 8 8 0 0 0 0 0 0 0 0999 V2000\n -2.1500 4.4750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.4490 3.7250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.4490 2.2250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.1500 1.4750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.8510 2.2250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.8510 3.7250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.1500 5.9750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.4480 1.4750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 2 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 2 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 2 0 0 0 0\n 6 1 1 0 0 0 0\n 1 7 1 0 0 0 0\n 5 8 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SMT 1 m-xylene\nM END\n> <name>\nm-xylene\n\n> <abbreviation>\nm-xylene\n\n> <group>\nSalts and Solvents\n\n$$$$\np-xylene\n -INDIGO-11302219142D\n\n 8 8 0 0 0 0 0 0 0 0999 V2000\n -2.1500 4.4750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.4490 3.7250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.4490 2.2250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.1500 1.4750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.8510 2.2250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.8510 3.7250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.1500 5.9750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.1500 -0.0250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 2 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 2 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 2 0 0 0 0\n 6 1 1 0 0 0 0\n 1 7 1 0 0 0 0\n 4 8 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SMT 1 p-xylene\nM END\n> <name>\np-xylene\n\n> <abbreviation>\np-xylene\n\n> <group>\nSalts and Solvents\n\n$$$$\nDIPEA\n -INDIGO-11302219142D\n\n 9 8 0 0 0 0 0 0 0 0999 V2000\n -1.5490 7.3145 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n -1.5490 8.8145 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.8481 6.5645 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.2500 6.5645 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -4.1471 7.3145 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.8481 5.0645 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.0490 7.3145 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.2500 5.0645 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.8481 9.5645 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 1 4 1 0 0 0 0\n 3 5 1 0 0 0 0\n 3 6 1 0 0 0 0\n 4 7 1 0 0 0 0\n 4 8 1 0 0 0 0\n 2 9 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 1 9\nM SMT 1 DIPEA\nM END\n> <name>\nn,n-diisopropylethylamine\n\n> <abbreviation>\nDIPEA\n\n> <group>\nSalts and Solvents\n\n$$$$\n1,5-diazabicyclo[5.4.0]undec-7-ene\n -INDIGO-11302219142D\n\n 11 12 0 0 0 0 0 0 0 0999 V2000\n 1.6852 -0.3846 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.3514 1.0778 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 1.7286 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -1.3515 1.0777 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n -1.6852 -0.3847 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n -3.1695 -0.6090 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.7175 -2.0053 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.7822 -3.1781 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -1.2990 -2.9545 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.7500 -1.5574 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.7500 -1.5574 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 6 7 1 0 0 0 0\n 7 8 1 0 0 0 0\n 8 9 1 0 0 0 0\n 9 10 2 0 0 0 0\n 10 5 1 0 0 0 0\n 10 11 1 0 0 0 0\n 11 1 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 3 9 10 11\nM SMT 1 DBU\nM END\n> <name>\n1,5-diazabicyclo[5.4.0]undec-7-ene\n\n> <abbreviation>\nDBU\n\n> <group>\nSalts and Solvents\n\n$$$$\nhexamethylphosphoramide\n -INDIGO-11302219142D\n\n 11 10 0 0 0 0 0 0 0 0999 V2000\n 2.3174 -0.9012 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.6235 -1.9903 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 4.8900 -0.9145 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.5935 -3.2519 0.0000 P 0 0 0 0 0 0 0 0 0 0 0 0\n 3.5935 -4.7619 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 5.0831 -3.2205 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 6.0654 -4.1562 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1687 -1.9999 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.1521 -3.2278 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 1.3934 -4.5570 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.0626 -2.3997 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 2 4 1 0 0 0 0\n 4 5 2 0 0 0 0\n 4 6 1 0 0 0 0\n 6 7 1 0 0 0 0\n 6 8 1 0 0 0 0\n 4 9 1 0 0 0 0\n 9 10 1 0 0 0 0\n 9 11 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 3 9 10 11\nM SMT 1 HMPA\nM END\n> <name>\nhexamethylphosphoramide\n\n> <abbreviation>\nHMPA\n\n> <group>\nSalts and Solvents\n\n$$$$\nhexamethylphosphorous triamide\n -INDIGO-11302219142D\n\n 10 9 0 0 0 0 0 0 0 0999 V2000\n 0.0007 0.0004 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.3000 0.7500 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 1.3000 2.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.6000 0.0000 0.0000 P 0 0 0 0 0 0 0 0 0 0 0 0\n 3.9000 0.7500 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 5.1992 0.0004 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.9000 2.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.6031 -1.5008 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 3.9032 -2.2490 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.3053 -2.2531 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 2 4 1 0 0 0 0\n 4 5 1 0 0 0 0\n 5 6 1 0 0 0 0\n 5 7 1 0 0 0 0\n 4 8 1 0 0 0 0\n 8 9 1 0 0 0 0\n 8 10 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SAL 1 2 9 10\nM SMT 1 HMPT\nM END\n> <name>\nhexamethylphosphorous triamide\n\n> <abbreviation>\nHMPT\n\n> <group>\nSalts and Solvents\n\n$$$$\nheavy water\n -INDIGO-11302219142D\n\n 3 2 0 0 0 0 0 0 0 0999 V2000\n 0.0007 0.0004 0.0000 D 0 0 0 0 0 0 0 0 0 0 0 0\n 1.3000 0.7500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5993 0.0004 0.0000 D 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 3 1 2 3\nM SMT 1 D2O\nM END\n> <name>\nheavy water\n\n> <abbreviation>\nD2O\n\n> <group>\nSalts and Solvents\n\n$$$$\nTRIS\n -INDIGO-03312512502D\n\n 8 7 0 0 0 0 0 0 0 0999 V2000\n 16.0940 -10.7437 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 16.9600 -10.2437 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 17.8260 -10.7437 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 16.9600 -9.2437 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 16.9600 -11.2437 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 15.2280 -10.2437 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 18.6921 -10.2437 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 17.8260 -8.7437 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 2 4 1 0 0 0 0\n 2 5 1 0 0 0 0\n 1 6 1 0 0 0 0\n 3 7 1 0 0 0 0\n 4 8 1 0 0 0 0\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 8 1 2 3 4 5 6 7 8\nM SMT 1 TRIS\nM SDI 1 4 0.0000 0.0000 0.0000 0.0000\nM SDI 1 4 0.0000 0.0000 0.0000 0.0000\nM END\n> <name>\nTRIS\n\n> <abbreviation>\nTRIS\n\n> <group>\nSalts and Solvents\n\n$$$$\nTRIS HCl\n Ketcher 3312513372D 1 1.00000 0.00000 0\n\n 9 7 0 0 0 0 0 0 0 0999 V2000\n 15.7719 -6.6396 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 16.6379 -6.1396 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 17.5040 -6.6396 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 16.6379 -5.1396 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 16.6379 -7.1396 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 14.9059 -6.1396 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 18.3700 -6.1396 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 17.5040 -4.6396 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 16.6716 -7.9479 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0\n 2 3 1 0 0 0\n 2 4 1 0 0 0\n 2 5 1 0 0 0\n 1 6 1 0 0 0\n 3 7 1 0 0 0\n 4 8 1 0 0 0\nM CHG 2 5 1 9 -1\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 9 1 2 3 4 5 6 7 8 9\nM SMT 1 TRIS HCl\nM END\n\n> <name>\nTRIS HCl\n\n> <abbreviation>\nTRIS HCl\n\n> <group>\nSalts and Solvents\n\n$$$$\nSodium-chloride\n Ketcher 3312513392D 1 1.00000 0.00000 0\n\n 2 0 0 0 0 0 0 0 0 0999 V2000\n 16.4963 -6.3500 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 15.6713 -6.3500 0.0000 Na 0 0 0 0 0 0 0 0 0 0 0 0\nM CHG 2 1 -1 2 1\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 2 1 2\nM SMT 1 NaCl\nM END\n\n> <name>\nSodium-chloride\n\n> <abbreviation>\nNaCl\n\n> <group>\nSalts and Solvents\n\n$$$$\nSodium-acetate\n Ketcher 3312513462D 1 1.00000 0.00000 0\n\n 5 3 0 0 0 0 0 0 0 0999 V2000\n 15.0102 -10.7437 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 15.8763 -10.2437 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 16.7423 -10.7437 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 15.8763 -9.2437 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 17.5182 -10.7687 0.0000 Na 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0\n 2 3 1 0 0 0\n 2 4 2 0 0 0\nM CHG 2 3 -1 5 1\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 CH3COONa\nM END\n\n> <name>\nSodium-acetate\n\n> <abbreviation>\nCH3COONa\n\n> <group>\nSalts and Solvents\n\n$$$$\nPotassium-chloride\n Ketcher 3312513542D 1 1.00000 0.00000 0\n\n 2 0 0 0 0 0 0 0 0 0999 V2000\n 16.2390 -13.2275 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 15.4140 -13.2275 0.0000 K 0 0 0 0 0 0 0 0 0 0 0 0\nM CHG 2 1 -1 2 1\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 2 1 2\nM SMT 1 KCl\nM END\n\n> <name>\nPotassium-chloride\n\n> <abbreviation>\nKCl\n\n> <group>\nSalts and Solvents\n\n$$$$\nMonopotassium phosphate\n Ketcher 3312513582D 1 1.00000 0.00000 0\n\n 6 4 0 0 0 0 0 0 0 0999 V2000\n 15.0432 -14.6312 0.0000 P 0 0 0 0 0 0 0 0 0 0 0 0\n 15.9093 -15.1312 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 15.0432 -13.6312 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 14.1772 -15.1312 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 15.0432 -15.6312 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 16.6098 -15.1562 0.0000 K 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0\n 1 3 2 0 0 0\n 1 4 1 0 0 0\n 1 5 1 0 0 0\nM CHG 2 2 -1 6 1\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 6 1 2 3 4 5 6\nM SMT 1 KH2PO4\nM END\n\n> <name>\nMonopotassium phosphate\n\n> <abbreviation>\nKH2PO4\n\n> <group>\nSalts and Solvents\n\n$$$$\nLithium-chloride\n Ketcher 3312514 52D 1 1.00000 0.00000 0\n\n 2 0 0 0 0 0 0 0 0 0999 V2000\n 16.4828 -15.7375 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 15.6578 -15.7375 0.0000 Li 0 0 0 0 0 0 0 0 0 0 0 0\nM CHG 2 1 -1 2 1\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 2 1 2\nM SMT 1 LiCl\nM END\n\n> <name>\nLithium-chloride\n\n> <abbreviation>\nLiCl\n\n> <group>\nSalts and Solvents\n\n$$$$\nGuanidine HCl\n Ketcher 3312514 62D 1 1.00000 0.00000 0\n\n 5 3 0 0 0 0 0 0 0 0999 V2000\n 14.8573 -16.3937 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 15.7233 -15.8937 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 16.5893 -16.3937 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 15.7233 -14.8937 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 17.8653 -16.3937 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0\n 2 3 1 0 0 0\n 2 4 2 0 0 0\nM CHG 2 3 1 5 -1\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 5 1 2 3 4 5\nM SMT 1 GuHCl\nM END\n\n> <name>\nGuanidine HCl\n\n> <abbreviation>\nGuHCl\n\n> <group>\nSalts and Solvents\n\n$$$$\nDisodium phosphate\n Ketcher 3312514 72D 1 1.00000 0.00000 0\n\n 7 4 0 0 0 0 0 0 0 0999 V2000\n 15.7195 -15.6812 0.0000 P 0 0 0 0 0 0 0 0 0 0 0 0\n 16.5856 -16.1812 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 15.7195 -14.6812 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 14.8535 -16.1812 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 15.7195 -16.6812 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 17.2860 -16.2062 0.0000 Na 0 0 0 0 0 0 0 0 0 0 0 0\n 14.1860 -16.1812 0.0000 Na 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0\n 1 3 2 0 0 0\n 1 4 1 0 0 0\n 1 5 1 0 0 0\nM CHG 4 2 -1 4 -1 6 1 7 1\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 Na2HPO4\nM END\n\n> <name>\nDisodium phosphate\n\n> <abbreviation>\nNa2HPO4\n\n> <group>\nSalts and Solvents\n\n$$$$\nDisodium EDTA\n Ketcher 3312514 92D 1 1.00000 0.00000 0\n\n 22 19 0 0 0 0 0 0 0 0999 V2000\n 11.8472 -15.9313 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 12.7132 -15.4313 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 13.5792 -15.9313 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 12.7132 -14.4313 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 14.4453 -15.4313 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 15.3113 -15.9313 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 14.4453 -14.4313 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 15.3113 -13.9313 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 15.3113 -12.9313 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 16.1773 -14.4313 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 16.1773 -15.4313 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 17.0433 -15.9313 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 17.9094 -15.4313 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 17.0433 -16.9313 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 16.1773 -17.4313 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 16.1773 -18.4313 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 15.3113 -16.9313 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 18.7754 -15.9313 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 19.6414 -15.4313 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 18.7754 -16.9313 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 14.5052 -16.9313 0.0000 Na 0 0 0 0 0 0 0 0 0 0 0 0\n 20.4552 -15.4313 0.0000 Na 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0\n 2 3 1 0 0 0\n 2 4 2 0 0 0\n 3 5 1 0 0 0\n 5 6 1 0 0 0\n 5 7 1 0 0 0\n 7 8 1 0 0 0\n 8 9 2 0 0 0\n 8 10 1 0 0 0\n 6 11 1 0 0 0\n 11 12 1 0 0 0\n 12 13 1 0 0 0\n 12 14 1 0 0 0\n 14 15 1 0 0 0\n 15 16 2 0 0 0\n 15 17 1 0 0 0\n 13 18 1 0 0 0\n 18 19 1 0 0 0\n 18 20 2 0 0 0\nM CHG 4 17 -1 19 -1 21 1 22 1\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15\nM SAL 1 7 16 17 18 19 20 21 22\nM SMT 1 Disodium EDTA\nM END\n\n> <name>\nDisodium EDTA\n\n> <abbreviation>\nDisodium EDTA\n\n> <group>\nSalts and Solvents\n\n$$$$\nAmmonium-sulfate\n Ketcher 3312514102D 1 1.00000 0.00000 0\n\n 7 4 0 0 0 0 0 0 0 0999 V2000\n 15.8979 -15.6813 0.0000 S 0 0 0 0 0 0 0 0 0 0 0 0\n 16.7639 -16.1813 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 15.8979 -14.6813 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 15.0319 -16.1813 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 15.8979 -16.6813 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 13.7644 -16.2063 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 17.4894 -16.2063 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0\n 1 3 2 0 0 0\n 1 4 1 0 0 0\n 1 5 2 0 0 0\nM CHG 4 2 -1 4 -1 6 1 7 1\nM STY 1 1 SUP\nM SLB 1 1 1\nM SAL 1 7 1 2 3 4 5 6 7\nM SMT 1 (NH4)2SO4\nM END\n\n> <name>\nAmmonium-sulfate\n\n> <abbreviation>\n(NH4)2SO4\n\n> <group>\nSalts and Solvents\n\n$$$$";
15123
15123
 
15124
- function ownKeys$1i(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
15125
- function _objectSpread$1i(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1i(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1i(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15124
+ function ownKeys$1j(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
15125
+ function _objectSpread$1j(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1j(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1j(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15126
15126
  var initialState$1 = {
15127
15127
  lib: [],
15128
15128
  mode: MODES.FG
15129
15129
  };
15130
15130
  var saltsAndSolventsReducer = function saltsAndSolventsReducer() {
15131
15131
  var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState$1;
15132
- var _ref = arguments.length > 1 ? arguments[1] : undefined,
15133
- type = _ref.type,
15134
- payload = _ref.payload;
15132
+ var action = arguments.length > 1 ? arguments[1] : undefined;
15133
+ var type = action.type,
15134
+ payload = action.payload;
15135
15135
  if (type === 'SALTS_AND_SOLVENTS_INIT') {
15136
- return _objectSpread$1i(_objectSpread$1i({}, state), payload);
15136
+ return _objectSpread$1j(_objectSpread$1j({}, state), payload);
15137
15137
  }
15138
15138
  return state;
15139
15139
  };
@@ -15147,7 +15147,7 @@ var initSaltsAndSolvents = function initSaltsAndSolvents(lib) {
15147
15147
  };
15148
15148
  function initSaltsAndSolventsTemplates() {
15149
15149
  return function () {
15150
- var _ref2 = _asyncToGenerator__default["default"]( _regeneratorRuntime__default["default"].mark(function _callee(dispatch) {
15150
+ var _ref = _asyncToGenerator__default["default"]( _regeneratorRuntime__default["default"].mark(function _callee(dispatch) {
15151
15151
  var saltsAndSolventsProvider, functionalGroupsProvider, sdfSerializer, templates, saltsAndSolvents;
15152
15152
  return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
15153
15153
  while (1) switch (_context.prev = _context.next) {
@@ -15156,9 +15156,9 @@ function initSaltsAndSolventsTemplates() {
15156
15156
  functionalGroupsProvider = ketcherCore.FunctionalGroupsProvider.getInstance();
15157
15157
  sdfSerializer = new ketcherCore.SdfSerializer();
15158
15158
  templates = sdfSerializer.deserialize(templatesRawData);
15159
- saltsAndSolvents = templates.reduce(function (acc, _ref3) {
15160
- var struct = _ref3.struct,
15161
- props = _ref3.props;
15159
+ saltsAndSolvents = templates.reduce(function (acc, _ref2) {
15160
+ var struct = _ref2.struct,
15161
+ props = _ref2.props;
15162
15162
  struct.abbreviation = String(props.abbreviation);
15163
15163
  acc.push(struct);
15164
15164
  return acc;
@@ -15176,13 +15176,13 @@ function initSaltsAndSolventsTemplates() {
15176
15176
  }, _callee);
15177
15177
  }));
15178
15178
  return function (_x) {
15179
- return _ref2.apply(this, arguments);
15179
+ return _ref.apply(this, arguments);
15180
15180
  };
15181
15181
  }();
15182
15182
  }
15183
15183
 
15184
- function ownKeys$1h(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
15185
- function _objectSpread$1h(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1h(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1h(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15184
+ function ownKeys$1i(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
15185
+ function _objectSpread$1i(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1i(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1i(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15186
15186
  var initial = {
15187
15187
  freqAtoms: [],
15188
15188
  currentAtom: 0,
@@ -15203,7 +15203,7 @@ function updateVisibleTools(visibleTool, activeTool) {
15203
15203
  var matchesBondGroup = regExp.exec(key);
15204
15204
  if (!matchesBondGroup || menuHeight > 700) res[key] = visibleTool[key];
15205
15205
  return res;
15206
- }, _objectSpread$1h({}, activeTool));
15206
+ }, _objectSpread$1i({}, activeTool));
15207
15207
  }
15208
15208
  function initResize() {
15209
15209
  return function (dispatch, getState) {
@@ -15227,41 +15227,41 @@ function toolbarReducer () {
15227
15227
  case 'ACTION':
15228
15228
  {
15229
15229
  var visibleTool = toolInMenu(action.action);
15230
- return visibleTool ? _objectSpread$1h(_objectSpread$1h({}, state), {}, {
15230
+ return visibleTool ? _objectSpread$1i(_objectSpread$1i({}, state), {}, {
15231
15231
  opened: null,
15232
- visibleTools: _objectSpread$1h(_objectSpread$1h({}, state.visibleTools), visibleTool)
15233
- }) : _objectSpread$1h(_objectSpread$1h({}, state), {}, {
15232
+ visibleTools: _objectSpread$1i(_objectSpread$1i({}, state.visibleTools), visibleTool)
15233
+ }) : _objectSpread$1i(_objectSpread$1i({}, state), {}, {
15234
15234
  opened: null
15235
15235
  });
15236
15236
  }
15237
15237
  case 'ADD_ATOMS':
15238
15238
  {
15239
15239
  var newState = addFreqAtom(data, state.freqAtoms, state.currentAtom);
15240
- return _objectSpread$1h(_objectSpread$1h({}, state), newState);
15240
+ return _objectSpread$1i(_objectSpread$1i({}, state), newState);
15241
15241
  }
15242
15242
  case 'CLEAR_VISIBLE':
15243
15243
  {
15244
15244
  var activeTool = toolInMenu(action.data);
15245
15245
  var correctTools = updateVisibleTools(state.visibleTools, activeTool);
15246
- return _objectSpread$1h(_objectSpread$1h({}, state), {}, {
15246
+ return _objectSpread$1i(_objectSpread$1i({}, state), {}, {
15247
15247
  opened: null,
15248
- visibleTools: _objectSpread$1h({}, correctTools)
15248
+ visibleTools: _objectSpread$1i({}, correctTools)
15249
15249
  });
15250
15250
  }
15251
15251
  case 'OPENED':
15252
15252
  {
15253
- return data.isSelected && state.opened ? _objectSpread$1h(_objectSpread$1h({}, state), {}, {
15253
+ return data.isSelected && state.opened ? _objectSpread$1i(_objectSpread$1i({}, state), {}, {
15254
15254
  opened: null
15255
- }) : _objectSpread$1h(_objectSpread$1h({}, state), {}, {
15255
+ }) : _objectSpread$1i(_objectSpread$1i({}, state), {}, {
15256
15256
  opened: data.menuName
15257
15257
  });
15258
15258
  }
15259
15259
  case 'UPDATE':
15260
- return _objectSpread$1h(_objectSpread$1h({}, state), {}, {
15260
+ return _objectSpread$1i(_objectSpread$1i({}, state), {}, {
15261
15261
  opened: null
15262
15262
  });
15263
15263
  case 'MODAL_OPEN':
15264
- return _objectSpread$1h(_objectSpread$1h({}, state), {}, {
15264
+ return _objectSpread$1i(_objectSpread$1i({}, state), {}, {
15265
15265
  opened: null
15266
15266
  });
15267
15267
  default:
@@ -15304,8 +15304,8 @@ function hiddenAncestor(el, base) {
15304
15304
  return findEl;
15305
15305
  }
15306
15306
 
15307
- function ownKeys$1g(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
15308
- function _objectSpread$1g(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1g(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1g(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15307
+ function ownKeys$1h(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
15308
+ function _objectSpread$1h(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1h(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1h(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15309
15309
  var initialState = {
15310
15310
  visible: false,
15311
15311
  rotateHandlePosition: {
@@ -15322,15 +15322,45 @@ var updateFloatingTools = function updateFloatingTools(payload) {
15322
15322
  };
15323
15323
  var floatingToolsReducer = function floatingToolsReducer() {
15324
15324
  var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
15325
- var _ref = arguments.length > 1 ? arguments[1] : undefined,
15326
- type = _ref.type,
15327
- payload = _ref.payload;
15325
+ var action = arguments.length > 1 ? arguments[1] : undefined;
15326
+ var type = action.type,
15327
+ payload = action.payload;
15328
15328
  if (type === 'UPDATE_FLOATING_TOOLS') {
15329
- return _objectSpread$1g(_objectSpread$1g({}, state), payload);
15329
+ return _objectSpread$1h(_objectSpread$1h({}, state), payload);
15330
15330
  }
15331
15331
  return state;
15332
15332
  };
15333
15333
 
15334
+ function ownKeys$1g(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
15335
+ function _objectSpread$1g(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1g(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1g(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15336
+ var initNotificationsState = {
15337
+ snackbarNotificationText: ''
15338
+ };
15339
+ function showSnackbarNotification(text) {
15340
+ return {
15341
+ type: 'SHOW_SNACKBAR_NOTIFICATION',
15342
+ data: text
15343
+ };
15344
+ }
15345
+ function selectSnackbarNotificationText(state) {
15346
+ return state.notifications.snackbarNotificationText;
15347
+ }
15348
+ function notificationsReducer() {
15349
+ var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initNotificationsState;
15350
+ var action = arguments.length > 1 ? arguments[1] : undefined;
15351
+ if (action.type === 'SHOW_SNACKBAR_NOTIFICATION') {
15352
+ return _objectSpread$1g(_objectSpread$1g({}, state), {}, {
15353
+ snackbarNotificationText: action.data
15354
+ });
15355
+ }
15356
+ if (action.type === 'HIDE_SNACKBAR_NOTIFICATION') {
15357
+ return _objectSpread$1g(_objectSpread$1g({}, state), {}, {
15358
+ snackbarNotificationText: ''
15359
+ });
15360
+ }
15361
+ return state;
15362
+ }
15363
+
15334
15364
  var _excluded$v = ["type"],
15335
15365
  _excluded2$5 = ["buttons", "customButtons"];
15336
15366
  function ownKeys$1f(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
@@ -15355,7 +15385,8 @@ var shared = redux.combineReducers({
15355
15385
  functionalGroups: functionalGroupsReducer,
15356
15386
  saltsAndSolvents: saltsAndSolventsReducer,
15357
15387
  requestsStatuses: requestReducer,
15358
- floatingTools: floatingToolsReducer
15388
+ floatingTools: floatingToolsReducer,
15389
+ notifications: notificationsReducer
15359
15390
  });
15360
15391
  function getRootReducer(setEditor) {
15361
15392
  return function root(state, action) {
@@ -15398,7 +15429,8 @@ function createStore (options, server, setEditor) {
15398
15429
  customButtons: customButtons
15399
15430
  }),
15400
15431
  server: server || Promise.reject(new Error('Standalone mode!')),
15401
- templates: initTmplsState
15432
+ templates: initTmplsState,
15433
+ notifications: initNotificationsState
15402
15434
  };
15403
15435
  var middleware = [reduxThunk.thunk];
15404
15436
  var rootReducer = getRootReducer(setEditor);
@@ -18187,194 +18219,334 @@ var SGroupTool = function () {
18187
18219
  }
18188
18220
  }
18189
18221
  }, {
18190
- key: "mouseup",
18191
- value: function mouseup(event) {
18192
- var _selection, _selection2;
18193
- var struct = this.editor.render.ctab;
18222
+ key: "isContractedFunctionalGroupClicked",
18223
+ value: function isContractedFunctionalGroupClicked(ci, functionalGroups) {
18224
+ return (ci === null || ci === void 0 ? void 0 : ci.map) === 'functionalGroups' && functionalGroups.size && ketcherCore.FunctionalGroup.isContractedFunctionalGroup(ci.id, functionalGroups);
18225
+ }
18226
+ }, {
18227
+ key: "processSelectedAtoms",
18228
+ value: function processSelectedAtoms(selected, functionalGroups, struct, molecule, newSelected) {
18229
+ var atomsResult = [];
18230
+ var extraAtoms = false;
18231
+ if (!selected || !functionalGroups.size || !selected.atoms) {
18232
+ return {
18233
+ atomsResult: atomsResult,
18234
+ extraAtoms: extraAtoms
18235
+ };
18236
+ }
18194
18237
  var sgroups = struct.sgroups;
18195
- var molecule = struct.molecule;
18196
- var functionalGroups = molecule.functionalGroups;
18197
- var ci = this.editor.findItem(event, searchMaps);
18198
- var selected = this.editor.selection();
18199
- var newSelected = {
18200
- atoms: [],
18201
- bonds: []
18238
+ var _iterator6 = _createForOfIteratorHelper$f(selected.atoms),
18239
+ _step6;
18240
+ try {
18241
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
18242
+ var _struct$atoms$get3;
18243
+ var atom = _step6.value;
18244
+ var atomId = ketcherCore.FunctionalGroup.atomsInFunctionalGroup(functionalGroups, atom);
18245
+ if (atomId == null) {
18246
+ extraAtoms = true;
18247
+ continue;
18248
+ }
18249
+ var atomFromStruct = (_struct$atoms$get3 = struct.atoms.get(atomId)) === null || _struct$atoms$get3 === void 0 ? void 0 : _struct$atoms$get3.a;
18250
+ if (!atomFromStruct) {
18251
+ continue;
18252
+ }
18253
+ var actualSgroupId = this.getActualSgroupId(atomFromStruct);
18254
+ if (this.isAtomInContractedGroup(atomFromStruct, sgroups, functionalGroups)) {
18255
+ this.addContractedGroupToSelection(atom, actualSgroupId, molecule, struct, newSelected);
18256
+ }
18257
+ atomsResult.push(atomId);
18258
+ }
18259
+ } catch (err) {
18260
+ _iterator6.e(err);
18261
+ } finally {
18262
+ _iterator6.f();
18263
+ }
18264
+ return {
18265
+ atomsResult: atomsResult,
18266
+ extraAtoms: extraAtoms
18202
18267
  };
18268
+ }
18269
+ }, {
18270
+ key: "getActualSgroupId",
18271
+ value: function getActualSgroupId(atomFromStruct) {
18203
18272
  var actualSgroupId;
18204
- var atomsResult = [];
18205
- var extraAtoms;
18273
+ var _iterator7 = _createForOfIteratorHelper$f(atomFromStruct.sgs.values()),
18274
+ _step7;
18275
+ try {
18276
+ for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
18277
+ var sgId = _step7.value;
18278
+ actualSgroupId = sgId;
18279
+ }
18280
+ } catch (err) {
18281
+ _iterator7.e(err);
18282
+ } finally {
18283
+ _iterator7.f();
18284
+ }
18285
+ return actualSgroupId;
18286
+ }
18287
+ }, {
18288
+ key: "isAtomInContractedGroup",
18289
+ value: function isAtomInContractedGroup(atomFromStruct, sgroups, functionalGroups) {
18290
+ return ketcherCore.FunctionalGroup.isAtomInContractedFunctionalGroup(atomFromStruct, sgroups, functionalGroups) || ketcherCore.SGroup.isAtomInContractedSGroup(atomFromStruct, sgroups);
18291
+ }
18292
+ }, {
18293
+ key: "addContractedGroupToSelection",
18294
+ value: function addContractedGroupToSelection(atom, actualSgroupId, molecule, struct, newSelected) {
18295
+ var _struct$sgroups$get, _struct$sgroups$get2;
18296
+ if (actualSgroupId === undefined) {
18297
+ return;
18298
+ }
18299
+ var sgroupAtoms = ketcherCore.SGroup.getAtoms(molecule, (_struct$sgroups$get = struct.sgroups.get(actualSgroupId)) === null || _struct$sgroups$get === void 0 ? void 0 : _struct$sgroups$get.item);
18300
+ var sgroupBonds = ketcherCore.SGroup.getBonds(molecule, (_struct$sgroups$get2 = struct.sgroups.get(actualSgroupId)) === null || _struct$sgroups$get2 === void 0 ? void 0 : _struct$sgroups$get2.item);
18301
+ if (atom === sgroupAtoms[0]) {
18302
+ var _newSelected$atoms2, _newSelected$bonds2;
18303
+ (_newSelected$atoms2 = newSelected.atoms).push.apply(_newSelected$atoms2, _toConsumableArray__default["default"](sgroupAtoms));
18304
+ (_newSelected$bonds2 = newSelected.bonds).push.apply(_newSelected$bonds2, _toConsumableArray__default["default"](sgroupBonds));
18305
+ }
18306
+ }
18307
+ }, {
18308
+ key: "processSelectedBonds",
18309
+ value: function processSelectedBonds(selected, functionalGroups, molecule, struct) {
18206
18310
  var bondsResult = [];
18207
- var extraBonds;
18208
- var result = [];
18209
- if ((ci === null || ci === void 0 ? void 0 : ci.map) === 'functionalGroups' && functionalGroups.size && ketcherCore.FunctionalGroup.isContractedFunctionalGroup(ci.id, functionalGroups)) return;
18210
- if (selected && functionalGroups.size && selected.atoms) {
18211
- var _iterator6 = _createForOfIteratorHelper$f(selected.atoms),
18212
- _step6;
18213
- try {
18214
- for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
18215
- var _struct$atoms$get3;
18216
- var atom = _step6.value;
18217
- var atomId = ketcherCore.FunctionalGroup.atomsInFunctionalGroup(functionalGroups, atom);
18218
- if (atomId == null) {
18219
- extraAtoms = true;
18220
- }
18221
- var atomFromStruct = atomId !== null && ((_struct$atoms$get3 = struct.atoms.get(atomId)) === null || _struct$atoms$get3 === void 0 ? void 0 : _struct$atoms$get3.a);
18222
- if (atomFromStruct) {
18223
- var _iterator7 = _createForOfIteratorHelper$f(atomFromStruct.sgs.values()),
18224
- _step7;
18225
- try {
18226
- for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
18227
- var sgId = _step7.value;
18228
- actualSgroupId = sgId;
18229
- }
18230
- } catch (err) {
18231
- _iterator7.e(err);
18232
- } finally {
18233
- _iterator7.f();
18234
- }
18235
- }
18236
- if (atomFromStruct && (ketcherCore.FunctionalGroup.isAtomInContractedFunctionalGroup(atomFromStruct, sgroups, functionalGroups) || ketcherCore.SGroup.isAtomInContractedSGroup(atomFromStruct, sgroups))) {
18237
- var _struct$sgroups$get, _struct$sgroups$get2, _newSelected$atoms2, _newSelected$bonds2;
18238
- var sgroupAtoms = actualSgroupId !== undefined && ketcherCore.SGroup.getAtoms(molecule, (_struct$sgroups$get = struct.sgroups.get(actualSgroupId)) === null || _struct$sgroups$get === void 0 ? void 0 : _struct$sgroups$get.item);
18239
- var sgroupBonds = actualSgroupId !== undefined && ketcherCore.SGroup.getBonds(molecule, (_struct$sgroups$get2 = struct.sgroups.get(actualSgroupId)) === null || _struct$sgroups$get2 === void 0 ? void 0 : _struct$sgroups$get2.item);
18240
- atom === sgroupAtoms[0] && (_newSelected$atoms2 = newSelected.atoms).push.apply(_newSelected$atoms2, _toConsumableArray__default["default"](sgroupAtoms)) && (_newSelected$bonds2 = newSelected.bonds).push.apply(_newSelected$bonds2, _toConsumableArray__default["default"](sgroupBonds));
18241
- }
18242
- if (atomFromStruct) {
18243
- atomsResult.push(atomId);
18244
- }
18311
+ var extraBonds = false;
18312
+ if (!selected || !functionalGroups.size || !selected.bonds) {
18313
+ return {
18314
+ bondsResult: bondsResult,
18315
+ extraBonds: extraBonds
18316
+ };
18317
+ }
18318
+ var _iterator8 = _createForOfIteratorHelper$f(selected.bonds),
18319
+ _step8;
18320
+ try {
18321
+ for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
18322
+ var _struct$bonds$get2;
18323
+ var bond = _step8.value;
18324
+ var bondId = ketcherCore.FunctionalGroup.bondsInFunctionalGroup(molecule, functionalGroups, bond);
18325
+ if (bondId === null) {
18326
+ extraBonds = true;
18327
+ continue;
18328
+ }
18329
+ var bondFromStruct = (_struct$bonds$get2 = struct.bonds.get(bondId)) === null || _struct$bonds$get2 === void 0 ? void 0 : _struct$bonds$get2.b;
18330
+ if (bondFromStruct) {
18331
+ bondsResult.push(bondId);
18245
18332
  }
18246
- } catch (err) {
18247
- _iterator6.e(err);
18248
- } finally {
18249
- _iterator6.f();
18250
18333
  }
18334
+ } catch (err) {
18335
+ _iterator8.e(err);
18336
+ } finally {
18337
+ _iterator8.f();
18251
18338
  }
18252
- if (selected && functionalGroups.size && selected.bonds) {
18253
- var _iterator8 = _createForOfIteratorHelper$f(selected.bonds),
18254
- _step8;
18255
- try {
18256
- for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
18257
- var _struct$bonds$get2;
18258
- var bond = _step8.value;
18259
- var bondId = ketcherCore.FunctionalGroup.bondsInFunctionalGroup(molecule, functionalGroups, bond);
18260
- if (bondId === null) {
18261
- extraBonds = true;
18262
- }
18263
- var bondFromStruct = bondId !== null && ((_struct$bonds$get2 = struct.bonds.get(bondId)) === null || _struct$bonds$get2 === void 0 ? void 0 : _struct$bonds$get2.b);
18264
- if (bondFromStruct) {
18265
- bondsResult.push(bondId);
18266
- }
18267
- }
18268
- } catch (err) {
18269
- _iterator8.e(err);
18270
- } finally {
18271
- _iterator8.f();
18339
+ return {
18340
+ bondsResult: bondsResult,
18341
+ extraBonds: extraBonds
18342
+ };
18343
+ }
18344
+ }, {
18345
+ key: "expandFunctionalGroupSelection",
18346
+ value: function expandFunctionalGroupSelection(atomsResult, bondsResult, functionalGroups, molecule, struct, newSelected) {
18347
+ this.expandAtomsToFunctionalGroups(atomsResult, functionalGroups, molecule, struct, newSelected);
18348
+ this.expandBondsToFunctionalGroups(bondsResult, functionalGroups, molecule, struct, newSelected);
18349
+ }
18350
+ }, {
18351
+ key: "expandAtomsToFunctionalGroups",
18352
+ value: function expandAtomsToFunctionalGroups(atomsResult, functionalGroups, molecule, struct, newSelected) {
18353
+ if (!atomsResult.length) {
18354
+ return;
18355
+ }
18356
+ atomsResult.forEach(function (id) {
18357
+ var _struct$sgroups$get3, _newSelected$atoms3;
18358
+ var fgId = ketcherCore.FunctionalGroup.findFunctionalGroupByAtom(functionalGroups, id);
18359
+ if (fgId === null) {
18360
+ return;
18361
+ }
18362
+ var sgroupAtoms = ketcherCore.SGroup.getAtoms(molecule, (_struct$sgroups$get3 = struct.sgroups.get(fgId)) === null || _struct$sgroups$get3 === void 0 ? void 0 : _struct$sgroups$get3.item);
18363
+ (_newSelected$atoms3 = newSelected.atoms).push.apply(_newSelected$atoms3, _toConsumableArray__default["default"](sgroupAtoms));
18364
+ });
18365
+ }
18366
+ }, {
18367
+ key: "expandBondsToFunctionalGroups",
18368
+ value: function expandBondsToFunctionalGroups(bondsResult, functionalGroups, molecule, struct, newSelected) {
18369
+ if (!bondsResult.length) {
18370
+ return;
18371
+ }
18372
+ bondsResult.forEach(function (id) {
18373
+ var _struct$sgroups$get4, _newSelected$bonds3;
18374
+ var fgId = ketcherCore.FunctionalGroup.findFunctionalGroupByBond(molecule, functionalGroups, id);
18375
+ if (fgId === null) {
18376
+ return;
18272
18377
  }
18378
+ var sgroupBonds = ketcherCore.SGroup.getBonds(molecule, (_struct$sgroups$get4 = struct.sgroups.get(fgId)) === null || _struct$sgroups$get4 === void 0 ? void 0 : _struct$sgroups$get4.item);
18379
+ (_newSelected$bonds3 = newSelected.bonds).push.apply(_newSelected$bonds3, _toConsumableArray__default["default"](sgroupBonds));
18380
+ });
18381
+ }
18382
+ }, {
18383
+ key: "collectFunctionalGroupIds",
18384
+ value: function collectFunctionalGroupIds(atomsResult, bondsResult, extraAtoms, extraBonds, functionalGroups, molecule) {
18385
+ if (extraAtoms || extraBonds) {
18386
+ return [];
18273
18387
  }
18274
- if (atomsResult.length) {
18275
- atomsResult.forEach(function (id) {
18276
- var _struct$sgroups$get3, _newSelected$atoms3;
18388
+ var result = [];
18389
+ this.collectFunctionalGroupIdsFromAtoms(atomsResult, functionalGroups, result);
18390
+ this.collectFunctionalGroupIdsFromBonds(bondsResult, functionalGroups, molecule, result);
18391
+ return result;
18392
+ }
18393
+ }, {
18394
+ key: "collectFunctionalGroupIdsFromAtoms",
18395
+ value: function collectFunctionalGroupIdsFromAtoms(atomsResult, functionalGroups, result) {
18396
+ if (!atomsResult || !atomsResult.length) {
18397
+ return;
18398
+ }
18399
+ var _iterator9 = _createForOfIteratorHelper$f(atomsResult),
18400
+ _step9;
18401
+ try {
18402
+ for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
18403
+ var id = _step9.value;
18277
18404
  var fgId = ketcherCore.FunctionalGroup.findFunctionalGroupByAtom(functionalGroups, id);
18278
- if (fgId === null) {
18279
- return;
18405
+ if (fgId !== null && !result.includes(fgId)) {
18406
+ result.push(fgId);
18280
18407
  }
18281
- var sgroupAtoms = ketcherCore.SGroup.getAtoms(molecule, (_struct$sgroups$get3 = struct.sgroups.get(fgId)) === null || _struct$sgroups$get3 === void 0 ? void 0 : _struct$sgroups$get3.item);
18282
- (_newSelected$atoms3 = newSelected.atoms).push.apply(_newSelected$atoms3, _toConsumableArray__default["default"](sgroupAtoms));
18283
- });
18408
+ }
18409
+ } catch (err) {
18410
+ _iterator9.e(err);
18411
+ } finally {
18412
+ _iterator9.f();
18413
+ }
18414
+ }
18415
+ }, {
18416
+ key: "collectFunctionalGroupIdsFromBonds",
18417
+ value: function collectFunctionalGroupIdsFromBonds(bondsResult, functionalGroups, molecule, result) {
18418
+ if (!bondsResult || !bondsResult.length) {
18419
+ return;
18284
18420
  }
18285
- if (bondsResult.length) {
18286
- bondsResult.forEach(function (id) {
18287
- var _struct$sgroups$get4, _newSelected$bonds3;
18421
+ var _iterator10 = _createForOfIteratorHelper$f(bondsResult),
18422
+ _step10;
18423
+ try {
18424
+ for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
18425
+ var id = _step10.value;
18288
18426
  var fgId = ketcherCore.FunctionalGroup.findFunctionalGroupByBond(molecule, functionalGroups, id);
18289
- if (fgId === null) {
18290
- return;
18427
+ if (fgId !== null && !result.includes(fgId)) {
18428
+ result.push(fgId);
18291
18429
  }
18292
- var sgroupBonds = ketcherCore.SGroup.getBonds(molecule, (_struct$sgroups$get4 = struct.sgroups.get(fgId)) === null || _struct$sgroups$get4 === void 0 ? void 0 : _struct$sgroups$get4.item);
18293
- (_newSelected$bonds3 = newSelected.bonds).push.apply(_newSelected$bonds3, _toConsumableArray__default["default"](sgroupBonds));
18294
- });
18430
+ }
18431
+ } catch (err) {
18432
+ _iterator10.e(err);
18433
+ } finally {
18434
+ _iterator10.f();
18295
18435
  }
18296
- if (extraAtoms || extraBonds) {
18297
- atomsResult = null;
18298
- bondsResult = null;
18436
+ }
18437
+ }, {
18438
+ key: "shouldRemoveSingleFunctionalGroup",
18439
+ value: function shouldRemoveSingleFunctionalGroup(functionalGroupIds) {
18440
+ return functionalGroupIds.length === 1;
18441
+ }
18442
+ }, {
18443
+ key: "determineSelection",
18444
+ value: function determineSelection(event, ci, newSelected, molecule) {
18445
+ if (this.lassoHelper.running(event)) {
18446
+ return this.handleLassoSelection(event, newSelected, molecule);
18299
18447
  }
18300
- if (atomsResult && atomsResult.length > 0) {
18301
- var _iterator9 = _createForOfIteratorHelper$f(atomsResult),
18302
- _step9;
18303
- try {
18304
- for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
18305
- var _id3 = _step9.value;
18306
- var fgId = ketcherCore.FunctionalGroup.findFunctionalGroupByAtom(functionalGroups, _id3);
18307
- if (fgId !== null && !result.includes(fgId)) {
18308
- result.push(fgId);
18309
- }
18448
+ return this.handleClickSelection(event, ci);
18449
+ }
18450
+ }, {
18451
+ key: "handleLassoSelection",
18452
+ value: function handleLassoSelection(event, newSelected, molecule) {
18453
+ var lassoSelection = this.lassoHelper.end(event);
18454
+ var selection = newSelected.atoms.length > 0 ? selMerge(lassoSelection, newSelected, false) : lassoSelection;
18455
+ var filteredAtomsAndBonds = filterNotPartOfSuperatomWithoutLabel({
18456
+ atoms: selection.atoms,
18457
+ bonds: selection.bonds
18458
+ }, molecule);
18459
+ selection = _objectSpread$15(_objectSpread$15({}, selection), {}, {
18460
+ atoms: filteredAtomsAndBonds.atoms,
18461
+ bonds: filteredAtomsAndBonds.bonds
18462
+ });
18463
+ this.editor.selection(selection);
18464
+ return {
18465
+ id: null,
18466
+ selection: selection
18467
+ };
18468
+ }
18469
+ }, {
18470
+ key: "handleClickSelection",
18471
+ value: function handleClickSelection(event, ci) {
18472
+ if (!ci) {
18473
+ return {
18474
+ id: null,
18475
+ selection: null
18476
+ };
18477
+ }
18478
+ this.editor.hover(this.editor.findItem(event, searchMaps), null, event);
18479
+ if (ci.map === 'atoms') {
18480
+ return {
18481
+ id: null,
18482
+ selection: {
18483
+ atoms: [ci.id]
18310
18484
  }
18311
- } catch (err) {
18312
- _iterator9.e(err);
18313
- } finally {
18314
- _iterator9.f();
18315
- }
18485
+ };
18316
18486
  }
18317
- if (bondsResult && bondsResult.length > 0) {
18318
- var _iterator10 = _createForOfIteratorHelper$f(bondsResult),
18319
- _step10;
18320
- try {
18321
- for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
18322
- var _id4 = _step10.value;
18323
- var _fgId2 = ketcherCore.FunctionalGroup.findFunctionalGroupByBond(molecule, functionalGroups, _id4);
18324
- if (_fgId2 !== null && !result.includes(_fgId2)) {
18325
- result.push(_fgId2);
18326
- }
18487
+ if (ci.map === 'bonds') {
18488
+ var bond = this.editor.render.ctab.bonds.get(ci.id);
18489
+ return {
18490
+ id: null,
18491
+ selection: {
18492
+ atoms: [bond === null || bond === void 0 ? void 0 : bond.b.begin, bond === null || bond === void 0 ? void 0 : bond.b.end],
18493
+ bonds: [ci.id]
18327
18494
  }
18328
- } catch (err) {
18329
- _iterator10.e(err);
18330
- } finally {
18331
- _iterator10.f();
18332
- }
18495
+ };
18496
+ }
18497
+ if (ci.map === 'sgroups' || ci.map === 'sgroupData') {
18498
+ return {
18499
+ id: ci.id,
18500
+ selection: null
18501
+ };
18502
+ }
18503
+ return {
18504
+ id: null,
18505
+ selection: null
18506
+ };
18507
+ }
18508
+ }, {
18509
+ key: "shouldOpenDialog",
18510
+ value: function shouldOpenDialog(id, selection) {
18511
+ var _selection$atoms, _selection$bonds;
18512
+ var isAtomsOrBondsSelected = (selection === null || selection === void 0 || (_selection$atoms = selection.atoms) === null || _selection$atoms === void 0 ? void 0 : _selection$atoms.length) || (selection === null || selection === void 0 || (_selection$bonds = selection.bonds) === null || _selection$bonds === void 0 ? void 0 : _selection$bonds.length);
18513
+ return id !== null || isAtomsOrBondsSelected;
18514
+ }
18515
+ }, {
18516
+ key: "mouseup",
18517
+ value: function mouseup(event) {
18518
+ var struct = this.editor.render.ctab;
18519
+ var molecule = struct.molecule;
18520
+ var functionalGroups = molecule.functionalGroups;
18521
+ var ci = this.editor.findItem(event, searchMaps);
18522
+ var selected = this.editor.selection();
18523
+ if (this.isContractedFunctionalGroupClicked(ci, functionalGroups)) {
18524
+ return;
18333
18525
  }
18334
- if (result.length === 1) {
18526
+ var newSelected = {
18527
+ atoms: [],
18528
+ bonds: []
18529
+ };
18530
+ var _this$processSelected = this.processSelectedAtoms(selected, functionalGroups, struct, molecule, newSelected),
18531
+ atomsResult = _this$processSelected.atomsResult,
18532
+ extraAtoms = _this$processSelected.extraAtoms;
18533
+ var _this$processSelected2 = this.processSelectedBonds(selected, functionalGroups, molecule, struct),
18534
+ bondsResult = _this$processSelected2.bondsResult,
18535
+ extraBonds = _this$processSelected2.extraBonds;
18536
+ this.expandFunctionalGroupSelection(atomsResult, bondsResult, functionalGroups, molecule, struct, newSelected);
18537
+ var functionalGroupIds = this.collectFunctionalGroupIds(atomsResult, bondsResult, extraAtoms, extraBonds, functionalGroups, molecule);
18538
+ if (this.shouldRemoveSingleFunctionalGroup(functionalGroupIds)) {
18335
18539
  this.editor.selection(null);
18336
18540
  this.lassoHelper.cancel();
18337
18541
  this.editor.event.removeFG.dispatch({
18338
- fgIds: result
18542
+ fgIds: functionalGroupIds
18339
18543
  });
18340
18544
  return;
18341
18545
  }
18342
- var id = null;
18343
- var selection = null;
18344
- if (this.lassoHelper.running(event)) {
18345
- selection = newSelected.atoms.length > 0 ? selMerge(this.lassoHelper.end(event), newSelected, false) : this.lassoHelper.end(event);
18346
- var filteredAtomsAndBonds = filterNotPartOfSuperatomWithoutLabel({
18347
- atoms: selection.atoms,
18348
- bonds: selection.bonds
18349
- }, molecule);
18350
- selection = _objectSpread$15(_objectSpread$15({}, selection), {}, {
18351
- atoms: filteredAtomsAndBonds.atoms,
18352
- bonds: filteredAtomsAndBonds.bonds
18353
- });
18354
- this.editor.selection(selection);
18355
- } else {
18356
- if (!ci) {
18357
- return;
18358
- }
18359
- this.editor.hover(this.editor.findItem(event, searchMaps), null, event);
18360
- if (ci.map === 'atoms') {
18361
- selection = {
18362
- atoms: [ci.id]
18363
- };
18364
- } else if (ci.map === 'bonds') {
18365
- var _bond = this.editor.render.ctab.bonds.get(ci.id);
18366
- selection = {
18367
- atoms: [_bond === null || _bond === void 0 ? void 0 : _bond.b.begin, _bond === null || _bond === void 0 ? void 0 : _bond.b.end],
18368
- bonds: [ci.id]
18369
- };
18370
- } else if (ci.map === 'sgroups' || ci.map === 'sgroupData') {
18371
- id = ci.id;
18372
- } else {
18373
- return;
18374
- }
18375
- }
18376
- var isAtomsOrBondsSelected = ((_selection = selection) === null || _selection === void 0 || (_selection = _selection.atoms) === null || _selection === void 0 ? void 0 : _selection.length) || ((_selection2 = selection) === null || _selection2 === void 0 || (_selection2 = _selection2.bonds) === null || _selection2 === void 0 ? void 0 : _selection2.length);
18377
- if (id !== null || isAtomsOrBondsSelected) {
18546
+ var _this$determineSelect = this.determineSelection(event, ci, newSelected, molecule),
18547
+ id = _this$determineSelect.id,
18548
+ selection = _this$determineSelect.selection;
18549
+ if (this.shouldOpenDialog(id, selection)) {
18378
18550
  this.editor.selection(selection);
18379
18551
  SGroupTool.sgroupDialog(this.editor, id);
18380
18552
  }
@@ -18711,7 +18883,10 @@ function customOnChangeHandler(action, handler) {
18711
18883
  return handler();
18712
18884
  }
18713
18885
  function handleMicroChanges(action, handler) {
18714
- action.operations.reverse().forEach(function (operation) {
18886
+ if (!(action !== null && action !== void 0 && action.operations) || !Array.isArray(action.operations)) {
18887
+ return handler(data);
18888
+ }
18889
+ _toConsumableArray__default["default"](action.operations).reverse().forEach(function (operation) {
18715
18890
  var op = operation._inverted;
18716
18891
  switch (op.type) {
18717
18892
  case ketcherCore.OperationType.ATOM_ADD:
@@ -21524,9 +21699,11 @@ function findCloseMerge(restruct, selected, options) {
21524
21699
  });
21525
21700
  selected.bonds.forEach(function (bid) {
21526
21701
  var bond = struct.bonds.get(bid);
21527
- pos.bonds.set(bid, ketcherCore.Vec2.lc2(
21528
- struct.atoms.get(bond.begin).pp, 0.5,
21529
- struct.atoms.get(bond.end).pp, 0.5));
21702
+ if (bond) {
21703
+ pos.bonds.set(bid, ketcherCore.Vec2.lc2(
21704
+ struct.atoms.get(bond.begin).pp, 0.5,
21705
+ struct.atoms.get(bond.end).pp, 0.5));
21706
+ }
21530
21707
  });
21531
21708
  var result = {
21532
21709
  atoms: new Map(),
@@ -25840,6 +26017,20 @@ var Editor$3 = function () {
25840
26017
  });
25841
26018
  this.render.update(true);
25842
26019
  }
26020
+ }, {
26021
+ key: "setRnaComponentAtoms",
26022
+ value: function setRnaComponentAtoms(componentKey, atomIds, bondIds) {
26023
+ var currentState = this.render.monomerCreationState;
26024
+ if (!currentState) return;
26025
+ var rnaComponentAtoms = currentState.rnaComponentAtoms || new Map();
26026
+ rnaComponentAtoms.set(componentKey, {
26027
+ atoms: atomIds,
26028
+ bonds: bondIds
26029
+ });
26030
+ this.render.monomerCreationState = _objectSpread$V(_objectSpread$V({}, currentState), {}, {
26031
+ rnaComponentAtoms: rnaComponentAtoms
26032
+ });
26033
+ }
25843
26034
  }, {
25844
26035
  key: "isMonomerCreationWizardActive",
25845
26036
  get: function get() {
@@ -26106,6 +26297,7 @@ var Editor$3 = function () {
26106
26297
  var _this2 = this;
26107
26298
  var forceAddNewLeavingGroupAtom = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
26108
26299
  var leavingAtomLabel = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : ketcherCore.AtomLabel.H;
26300
+ var leavingAtomPosition = arguments.length > 6 ? arguments[6] : undefined;
26109
26301
  assert_1(this.monomerCreationState);
26110
26302
  var potentialLeavingAtoms = this.monomerCreationState.potentialAttachmentPoints.get(atomId);
26111
26303
  var leavingAtomId;
@@ -26135,7 +26327,7 @@ var Editor$3 = function () {
26135
26327
  stereo: ketcherCore.Bond.PATTERN.STEREO.NONE
26136
26328
  }, atomId, {
26137
26329
  label: leavingAtomLabel
26138
- }),
26330
+ }, undefined, leavingAtomPosition),
26139
26331
  _fromBondAddition2 = _slicedToArray__default["default"](_fromBondAddition, 4),
26140
26332
  bondAdditionAction = _fromBondAddition2[0],
26141
26333
  endAtomId = _fromBondAddition2[2],
@@ -26521,18 +26713,244 @@ var Editor$3 = function () {
26521
26713
  });
26522
26714
  return potentialLeavingAtoms;
26523
26715
  }
26716
+ }, {
26717
+ key: "getRnaComponentForAtom",
26718
+ value: function getRnaComponentForAtom(atomId) {
26719
+ var _this$monomerCreation;
26720
+ var rnaComponentAtoms = (_this$monomerCreation = this.monomerCreationState) === null || _this$monomerCreation === void 0 ? void 0 : _this$monomerCreation.rnaComponentAtoms;
26721
+ if (!rnaComponentAtoms) {
26722
+ return null;
26723
+ }
26724
+ var _iterator2 = _createForOfIteratorHelper$2(rnaComponentAtoms.entries()),
26725
+ _step2;
26726
+ try {
26727
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
26728
+ var _step2$value = _slicedToArray__default["default"](_step2.value, 2),
26729
+ componentKey = _step2$value[0],
26730
+ componentData = _step2$value[1];
26731
+ if (componentData.atoms.includes(atomId)) {
26732
+ return componentKey;
26733
+ }
26734
+ }
26735
+ } catch (err) {
26736
+ _iterator2.e(err);
26737
+ } finally {
26738
+ _iterator2.f();
26739
+ }
26740
+ return null;
26741
+ }
26742
+ }, {
26743
+ key: "canAssignRnaComponent",
26744
+ value: function canAssignRnaComponent(bond) {
26745
+ var _this$monomerCreation2,
26746
+ _this6 = this;
26747
+ if (!((_this$monomerCreation2 = this.monomerCreationState) !== null && _this$monomerCreation2 !== void 0 && _this$monomerCreation2.rnaComponentAtoms)) {
26748
+ return false;
26749
+ }
26750
+ var beginAtomRnaComponent = this.getRnaComponentForAtom(bond.begin);
26751
+ var endAtomRnaComponent = this.getRnaComponentForAtom(bond.end);
26752
+ if (!beginAtomRnaComponent && !endAtomRnaComponent || beginAtomRnaComponent && endAtomRnaComponent && beginAtomRnaComponent !== endAtomRnaComponent) {
26753
+ return false;
26754
+ }
26755
+ var rnaComponentToAssign = beginAtomRnaComponent || endAtomRnaComponent;
26756
+ var struct = this.struct();
26757
+ var atomIdToStartFrom = beginAtomRnaComponent ? bond.begin : bond.end;
26758
+ var visitedAtomIds = new Set();
26759
+ var atomsToCheck = [atomIdToStartFrom];
26760
+ var hasConnectionToAnotherComponent = false;
26761
+ var hasConnectionToOriginalStructure = false;
26762
+ visitedAtomIds.add(atomIdToStartFrom);
26763
+ var _loop = function _loop() {
26764
+ var currentAtomId = atomsToCheck.pop();
26765
+ var currentAtom = _.isNumber(currentAtomId) ? struct.atoms.get(currentAtomId) : undefined;
26766
+ if (!currentAtom) {
26767
+ return 1;
26768
+ }
26769
+ currentAtom === null || currentAtom === void 0 || currentAtom.neighbors.forEach(function (neighbor) {
26770
+ var halfBond = struct.halfBonds.get(neighbor);
26771
+ if (hasConnectionToAnotherComponent || hasConnectionToOriginalStructure) {
26772
+ return;
26773
+ }
26774
+ if (!halfBond) {
26775
+ ketcherCore.KetcherLogger.warn('Half-bond not found in structure');
26776
+ return;
26777
+ }
26778
+ var neighborAtomId = halfBond.begin === currentAtomId ? halfBond.end : halfBond.begin;
26779
+ if (visitedAtomIds.has(neighborAtomId)) {
26780
+ return;
26781
+ }
26782
+ visitedAtomIds.add(neighborAtomId);
26783
+ var neighborAtomRnaComponent = _this6.getRnaComponentForAtom(neighborAtomId);
26784
+ if (neighborAtomRnaComponent === rnaComponentToAssign) {
26785
+ return;
26786
+ }
26787
+ if (neighborAtomRnaComponent && neighborAtomRnaComponent !== rnaComponentToAssign) {
26788
+ hasConnectionToAnotherComponent = true;
26789
+ return;
26790
+ }
26791
+ var originalAtomId = _this6.selectedToOriginalAtomsIdMap.get(neighborAtomId);
26792
+ if (_.isNumber(originalAtomId) && _this6.originalStruct.atoms.has(originalAtomId)) {
26793
+ hasConnectionToOriginalStructure = true;
26794
+ return;
26795
+ }
26796
+ atomsToCheck.push(neighborAtomId);
26797
+ visitedAtomIds.add(neighborAtomId);
26798
+ });
26799
+ };
26800
+ while (atomsToCheck.length > 0) {
26801
+ if (_loop()) continue;
26802
+ }
26803
+ if (hasConnectionToAnotherComponent || hasConnectionToOriginalStructure) {
26804
+ return false;
26805
+ }
26806
+ return true;
26807
+ }
26808
+ }, {
26809
+ key: "autoAssignAtomToRnaComponent",
26810
+ value: function autoAssignAtomToRnaComponent(bondId) {
26811
+ var _this$monomerCreation3;
26812
+ var rnaComponentAtoms = (_this$monomerCreation3 = this.monomerCreationState) === null || _this$monomerCreation3 === void 0 ? void 0 : _this$monomerCreation3.rnaComponentAtoms;
26813
+ if (!rnaComponentAtoms) {
26814
+ return;
26815
+ }
26816
+ var struct = this.struct();
26817
+ var bond = struct.bonds.get(bondId);
26818
+ if (!bond) {
26819
+ ketcherCore.KetcherLogger.warn('Bond not found in structure');
26820
+ return;
26821
+ }
26822
+ var beginAtomComponent = this.getRnaComponentForAtom(bond.begin);
26823
+ var endAtomComponent = this.getRnaComponentForAtom(bond.end);
26824
+ var componentToMark = beginAtomComponent || endAtomComponent;
26825
+ if (!componentToMark) {
26826
+ return;
26827
+ }
26828
+ var atomsIdsToMark = [];
26829
+ var bondIdsToMark = [];
26830
+ var bondIdsToCheck = [bondId];
26831
+ var visitedBonds = new Set();
26832
+ while (bondIdsToCheck.length > 0) {
26833
+ var currentBondId = bondIdsToCheck.pop();
26834
+ var currentBond = _.isNumber(currentBondId) ? struct.bonds.get(currentBondId) : undefined;
26835
+ if (!_.isNumber(currentBondId) || !currentBond || visitedBonds.has(currentBondId)) {
26836
+ continue;
26837
+ }
26838
+ bondIdsToMark.push(currentBondId);
26839
+ visitedBonds.add(currentBondId);
26840
+ var beginAtom = struct.atoms.get(currentBond.begin);
26841
+ var endAtom = struct.atoms.get(currentBond.end);
26842
+ var beginAtomRnaComponent = this.getRnaComponentForAtom(currentBond.begin);
26843
+ var endAtomRnaComponent = this.getRnaComponentForAtom(currentBond.end);
26844
+ var atomsToContinue = [];
26845
+ if (beginAtom && beginAtomRnaComponent !== componentToMark) {
26846
+ atomsIdsToMark.push(currentBond.begin);
26847
+ atomsToContinue.push(beginAtom);
26848
+ }
26849
+ if (endAtom && endAtomRnaComponent !== componentToMark) {
26850
+ atomsIdsToMark.push(currentBond.end);
26851
+ atomsToContinue.push(endAtom);
26852
+ }
26853
+ atomsToContinue.forEach(function (atom) {
26854
+ atom.neighbors.forEach(function (halfBondId) {
26855
+ var halfBond = struct.halfBonds.get(halfBondId);
26856
+ if (!halfBond) {
26857
+ ketcherCore.KetcherLogger.warn('Half-bond not found in structure');
26858
+ return;
26859
+ }
26860
+ var nextBondId = halfBond.bid;
26861
+ var nextBond = struct.bonds.get(nextBondId);
26862
+ if (!nextBond || bondIdsToCheck.includes(nextBondId)) {
26863
+ ketcherCore.KetcherLogger.warn('Bond not found in structure');
26864
+ return;
26865
+ }
26866
+ bondIdsToCheck.push(nextBondId);
26867
+ });
26868
+ });
26869
+ }
26870
+ this.addAtomsAndBondsToRnaComponent(componentToMark, atomsIdsToMark, bondIdsToMark);
26871
+ }
26872
+ }, {
26873
+ key: "updateRnaComponentStructureState",
26874
+ value: function updateRnaComponentStructureState(componentKey, updatedAtoms, updatedBonds) {
26875
+ var _this$monomerCreation4;
26876
+ (_this$monomerCreation4 = this.monomerCreationState) === null || _this$monomerCreation4 === void 0 || (_this$monomerCreation4 = _this$monomerCreation4.rnaComponentAtoms) === null || _this$monomerCreation4 === void 0 || _this$monomerCreation4.set(componentKey, {
26877
+ atoms: updatedAtoms,
26878
+ bonds: updatedBonds
26879
+ });
26880
+ var eventData = {
26881
+ componentKey: componentKey,
26882
+ atomIds: updatedAtoms,
26883
+ bondIds: updatedBonds
26884
+ };
26885
+ window.dispatchEvent(new CustomEvent(ketcherCore.MonomerCreationComponentStructureUpdateEvent, {
26886
+ detail: eventData
26887
+ }));
26888
+ }
26889
+ }, {
26890
+ key: "addAtomsAndBondsToRnaComponent",
26891
+ value: function addAtomsAndBondsToRnaComponent(componentKey, atomIds, bondIds) {
26892
+ var _this$monomerCreation5;
26893
+ if (!((_this$monomerCreation5 = this.monomerCreationState) !== null && _this$monomerCreation5 !== void 0 && _this$monomerCreation5.rnaComponentAtoms)) {
26894
+ return;
26895
+ }
26896
+ var componentData = this.monomerCreationState.rnaComponentAtoms.get(componentKey);
26897
+ if (!componentData) {
26898
+ return;
26899
+ }
26900
+ var updatedAtoms = _toConsumableArray__default["default"](componentData.atoms);
26901
+ var updatedBonds = _toConsumableArray__default["default"](componentData.bonds);
26902
+ atomIds.forEach(function (atomId) {
26903
+ if (!updatedAtoms.includes(atomId)) {
26904
+ updatedAtoms.push(atomId);
26905
+ }
26906
+ });
26907
+ bondIds.forEach(function (bondId) {
26908
+ if (!updatedBonds.includes(bondId)) {
26909
+ updatedBonds.push(bondId);
26910
+ }
26911
+ });
26912
+ this.updateRnaComponentStructureState(componentKey, updatedAtoms, updatedBonds);
26913
+ }
26914
+ }, {
26915
+ key: "removeAtomsAndBondsFromRnaComponents",
26916
+ value: function removeAtomsAndBondsFromRnaComponents(atomIds, bondIds) {
26917
+ var _this$monomerCreation6;
26918
+ if (!((_this$monomerCreation6 = this.monomerCreationState) !== null && _this$monomerCreation6 !== void 0 && _this$monomerCreation6.rnaComponentAtoms)) {
26919
+ return;
26920
+ }
26921
+ var _iterator3 = _createForOfIteratorHelper$2(this.monomerCreationState.rnaComponentAtoms.entries()),
26922
+ _step3;
26923
+ try {
26924
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
26925
+ var _step3$value = _slicedToArray__default["default"](_step3.value, 2),
26926
+ componentKey = _step3$value[0],
26927
+ componentData = _step3$value[1];
26928
+ var updatedAtoms = componentData.atoms.filter(function (atomId) {
26929
+ return !atomIds.includes(atomId);
26930
+ });
26931
+ var updatedBonds = componentData.bonds.filter(function (bondId) {
26932
+ return !bondIds.includes(bondId);
26933
+ });
26934
+ this.updateRnaComponentStructureState(componentKey, updatedAtoms, updatedBonds);
26935
+ }
26936
+ } catch (err) {
26937
+ _iterator3.e(err);
26938
+ } finally {
26939
+ _iterator3.f();
26940
+ }
26941
+ }
26524
26942
  }, {
26525
26943
  key: "subscribeToChangeEventInMonomerCreationWizard",
26526
26944
  value: function subscribeToChangeEventInMonomerCreationWizard() {
26527
- var _this6 = this;
26945
+ var _this7 = this;
26528
26946
  if (this.changeEventSubscriber) {
26529
26947
  return;
26530
26948
  }
26531
26949
  var handleChangeEvent = function handleChangeEvent(data) {
26532
- if (!_this6.isMonomerCreationWizardActive || data.length === 0) {
26950
+ if (!_this7.isMonomerCreationWizardActive || data.length === 0) {
26533
26951
  return;
26534
26952
  }
26535
- _this6.collectChangesForMonomerCreationStateInvalidation(data);
26953
+ _this7.collectChangesForMonomerCreationStateInvalidation(data);
26536
26954
  };
26537
26955
  this.changeEventSubscriber = this.subscribe('change', handleChangeEvent);
26538
26956
  }
@@ -26553,9 +26971,11 @@ var Editor$3 = function () {
26553
26971
  var changesMap = new Map();
26554
26972
  data.forEach(function (entry) {
26555
26973
  switch (entry.operation) {
26974
+ case ketcherCore.OperationType.ATOM_ADD:
26556
26975
  case ketcherCore.OperationType.ATOM_DELETE:
26557
26976
  case ketcherCore.OperationType.ATOM_ATTR:
26558
26977
  case ketcherCore.OperationType.BOND_ADD:
26978
+ case ketcherCore.OperationType.BOND_DELETE:
26559
26979
  case ketcherCore.OperationType.BOND_ATTR:
26560
26980
  {
26561
26981
  if (entry.id !== undefined) {
@@ -26575,21 +26995,21 @@ var Editor$3 = function () {
26575
26995
  }, {
26576
26996
  key: "invalidateMonomerCreationWizardState",
26577
26997
  value: function invalidateMonomerCreationWizardState(changesMap) {
26578
- var _this7 = this;
26998
+ var _this8 = this;
26579
26999
  if (!this.monomerCreationState) {
26580
27000
  return;
26581
27001
  }
26582
- var _iterator2 = _createForOfIteratorHelper$2(changesMap.entries()),
26583
- _step2;
27002
+ var _iterator4 = _createForOfIteratorHelper$2(changesMap.entries()),
27003
+ _step4;
26584
27004
  try {
26585
- var _loop = function _loop() {
26586
- var _step2$value = _slicedToArray__default["default"](_step2.value, 2),
26587
- operation = _step2$value[0],
26588
- ids = _step2$value[1];
27005
+ var _loop2 = function _loop2() {
27006
+ var _step4$value = _slicedToArray__default["default"](_step4.value, 2),
27007
+ operation = _step4$value[0],
27008
+ ids = _step4$value[1];
26589
27009
  switch (operation) {
26590
27010
  case ketcherCore.OperationType.ATOM_DELETE:
26591
27011
  {
26592
- var attachmentPointsToInvalidate = Array.from(_this7.monomerCreationState.assignedAttachmentPoints.entries()).filter(function (_ref11) {
27012
+ var attachmentPointsToInvalidate = Array.from(_this8.monomerCreationState.assignedAttachmentPoints.entries()).filter(function (_ref11) {
26593
27013
  var _ref12 = _slicedToArray__default["default"](_ref11, 2),
26594
27014
  atomPair = _ref12[1];
26595
27015
  return ids.has(atomPair[0]) || ids.has(atomPair[1]);
@@ -26605,67 +27025,68 @@ var Editor$3 = function () {
26605
27025
  attachmentAtomId = _atomPair5[0],
26606
27026
  leavingAtomId = _atomPair5[1];
26607
27027
  if (ids.has(attachmentAtomId)) {
26608
- var _this7$monomerCreatio;
26609
- (_this7$monomerCreatio = _this7.monomerCreationState) === null || _this7$monomerCreatio === void 0 || _this7$monomerCreatio.assignedAttachmentPoints["delete"](attachmentPointName);
27028
+ var _this8$monomerCreatio;
27029
+ (_this8$monomerCreatio = _this8.monomerCreationState) === null || _this8$monomerCreatio === void 0 || _this8$monomerCreatio.assignedAttachmentPoints["delete"](attachmentPointName);
26610
27030
  } else if (ids.has(leavingAtomId)) {
26611
- var potentialLeavingAtoms = _this7.findPotentialLeavingAtoms(attachmentAtomId);
27031
+ var potentialLeavingAtoms = _this8.findPotentialLeavingAtoms(attachmentAtomId);
26612
27032
  if (potentialLeavingAtoms.length === 0) {
26613
- var _this7$monomerCreatio2;
26614
- (_this7$monomerCreatio2 = _this7.monomerCreationState) === null || _this7$monomerCreatio2 === void 0 || _this7$monomerCreatio2.assignedAttachmentPoints["delete"](attachmentPointName);
27033
+ var _this8$monomerCreatio2;
27034
+ (_this8$monomerCreatio2 = _this8.monomerCreationState) === null || _this8$monomerCreatio2 === void 0 || _this8$monomerCreatio2.assignedAttachmentPoints["delete"](attachmentPointName);
26615
27035
  } else {
26616
- var _this7$monomerCreatio3;
26617
- var newLeavingAtomId = _this7.struct().atoms.keyOf(potentialLeavingAtoms[0]);
27036
+ var _this8$monomerCreatio3;
27037
+ var newLeavingAtomId = _this8.struct().atoms.keyOf(potentialLeavingAtoms[0]);
26618
27038
  assert_1(newLeavingAtomId !== null);
26619
- (_this7$monomerCreatio3 = _this7.monomerCreationState) === null || _this7$monomerCreatio3 === void 0 || _this7$monomerCreatio3.assignedAttachmentPoints.set(attachmentPointName, [attachmentAtomId, newLeavingAtomId]);
27039
+ (_this8$monomerCreatio3 = _this8.monomerCreationState) === null || _this8$monomerCreatio3 === void 0 || _this8$monomerCreatio3.assignedAttachmentPoints.set(attachmentPointName, [attachmentAtomId, newLeavingAtomId]);
26620
27040
  }
26621
27041
  }
26622
27042
  });
26623
- var potentialAttachmentPointsToInvalidate = Array.from(_this7.monomerCreationState.potentialAttachmentPoints.entries());
27043
+ var potentialAttachmentPointsToInvalidate = Array.from(_this8.monomerCreationState.potentialAttachmentPoints.entries());
26624
27044
  potentialAttachmentPointsToInvalidate.forEach(function (_ref15) {
26625
27045
  var _ref16 = _slicedToArray__default["default"](_ref15, 2),
26626
27046
  attachmentAtomId = _ref16[0],
26627
27047
  leavingAtomIds = _ref16[1];
26628
27048
  if (ids.has(attachmentAtomId)) {
26629
- var _this7$monomerCreatio4;
26630
- (_this7$monomerCreatio4 = _this7.monomerCreationState) === null || _this7$monomerCreatio4 === void 0 || _this7$monomerCreatio4.potentialAttachmentPoints["delete"](attachmentAtomId);
27049
+ var _this8$monomerCreatio4;
27050
+ (_this8$monomerCreatio4 = _this8.monomerCreationState) === null || _this8$monomerCreatio4 === void 0 || _this8$monomerCreatio4.potentialAttachmentPoints["delete"](attachmentAtomId);
26631
27051
  } else {
26632
27052
  var updatedLeavingAtomIds = new Set(Array.from(leavingAtomIds).filter(function (id) {
26633
27053
  return !ids.has(id);
26634
27054
  }));
26635
27055
  if (updatedLeavingAtomIds.size === 0) {
26636
- var _this7$monomerCreatio5;
26637
- (_this7$monomerCreatio5 = _this7.monomerCreationState) === null || _this7$monomerCreatio5 === void 0 || _this7$monomerCreatio5.potentialAttachmentPoints["delete"](attachmentAtomId);
27056
+ var _this8$monomerCreatio5;
27057
+ (_this8$monomerCreatio5 = _this8.monomerCreationState) === null || _this8$monomerCreatio5 === void 0 || _this8$monomerCreatio5.potentialAttachmentPoints["delete"](attachmentAtomId);
26638
27058
  } else {
26639
- var _this7$monomerCreatio6;
26640
- (_this7$monomerCreatio6 = _this7.monomerCreationState) === null || _this7$monomerCreatio6 === void 0 || _this7$monomerCreatio6.potentialAttachmentPoints.set(attachmentAtomId, updatedLeavingAtomIds);
27059
+ var _this8$monomerCreatio6;
27060
+ (_this8$monomerCreatio6 = _this8.monomerCreationState) === null || _this8$monomerCreatio6 === void 0 || _this8$monomerCreatio6.potentialAttachmentPoints.set(attachmentAtomId, updatedLeavingAtomIds);
26641
27061
  }
26642
27062
  }
26643
27063
  });
27064
+ _this8.removeAtomsAndBondsFromRnaComponents([], _toConsumableArray__default["default"](ids.values()));
26644
27065
  }
26645
27066
  break;
26646
27067
  case ketcherCore.OperationType.BOND_ATTR:
26647
27068
  {
26648
- var _iterator3 = _createForOfIteratorHelper$2(ids.values()),
26649
- _step3;
27069
+ var _iterator5 = _createForOfIteratorHelper$2(ids.values()),
27070
+ _step5;
26650
27071
  try {
26651
- var _loop2 = function _loop2() {
26652
- var id = _step3.value;
26653
- var bond = _this7.struct().bonds.get(id);
27072
+ var _loop3 = function _loop3() {
27073
+ var id = _step5.value;
27074
+ var bond = _this8.struct().bonds.get(id);
26654
27075
  assert_1(bond);
26655
- var attachmentPointWithBond = Array.from(_this7.monomerCreationState.assignedAttachmentPoints.entries()).find(function (_ref17) {
27076
+ var attachmentPointWithBond = Array.from(_this8.monomerCreationState.assignedAttachmentPoints.entries()).find(function (_ref17) {
26656
27077
  var _ref18 = _slicedToArray__default["default"](_ref17, 2),
26657
27078
  atomPair = _ref18[1];
26658
27079
  return bond.begin === atomPair[0] && bond.end === atomPair[1] || bond.begin === atomPair[1] && bond.end === atomPair[0];
26659
27080
  });
26660
27081
  if (attachmentPointWithBond) {
26661
27082
  if (!Editor.isBondSuitableForAttachmentPoint(bond)) {
26662
- _this7.monomerCreationState.problematicAttachmentPoints.add(attachmentPointWithBond[0]);
27083
+ _this8.monomerCreationState.problematicAttachmentPoints.add(attachmentPointWithBond[0]);
26663
27084
  } else {
26664
- _this7.monomerCreationState.problematicAttachmentPoints["delete"](attachmentPointWithBond[0]);
27085
+ _this8.monomerCreationState.problematicAttachmentPoints["delete"](attachmentPointWithBond[0]);
26665
27086
  }
26666
27087
  }
26667
27088
  if (!Editor.isBondSuitableForAttachmentPoint(bond)) {
26668
- _this7.monomerCreationState.potentialAttachmentPoints.forEach(function (leavingAtomIds, attachmentAtomId) {
27089
+ _this8.monomerCreationState.potentialAttachmentPoints.forEach(function (leavingAtomIds, attachmentAtomId) {
26669
27090
  var updatedLeavingAtomIds = new Set(leavingAtomIds);
26670
27091
  var bondFromAttachmentAtom = bond.begin === attachmentAtomId && leavingAtomIds.has(bond.end);
26671
27092
  var bondToAttachmentAtom = bond.end === attachmentAtomId && leavingAtomIds.has(bond.begin);
@@ -26673,35 +27094,35 @@ var Editor$3 = function () {
26673
27094
  updatedLeavingAtomIds["delete"](bondFromAttachmentAtom ? bond.end : bond.begin);
26674
27095
  }
26675
27096
  if (updatedLeavingAtomIds.size === 0) {
26676
- var _this7$monomerCreatio7;
26677
- (_this7$monomerCreatio7 = _this7.monomerCreationState) === null || _this7$monomerCreatio7 === void 0 || _this7$monomerCreatio7.potentialAttachmentPoints["delete"](attachmentAtomId);
27097
+ var _this8$monomerCreatio7;
27098
+ (_this8$monomerCreatio7 = _this8.monomerCreationState) === null || _this8$monomerCreatio7 === void 0 || _this8$monomerCreatio7.potentialAttachmentPoints["delete"](attachmentAtomId);
26678
27099
  } else {
26679
- var _this7$monomerCreatio8;
26680
- (_this7$monomerCreatio8 = _this7.monomerCreationState) === null || _this7$monomerCreatio8 === void 0 || _this7$monomerCreatio8.potentialAttachmentPoints.set(attachmentAtomId, updatedLeavingAtomIds);
27100
+ var _this8$monomerCreatio8;
27101
+ (_this8$monomerCreatio8 = _this8.monomerCreationState) === null || _this8$monomerCreatio8 === void 0 || _this8$monomerCreatio8.potentialAttachmentPoints.set(attachmentAtomId, updatedLeavingAtomIds);
26681
27102
  }
26682
27103
  });
26683
27104
  }
26684
27105
  };
26685
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
26686
- _loop2();
27106
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
27107
+ _loop3();
26687
27108
  }
26688
27109
  } catch (err) {
26689
- _iterator3.e(err);
27110
+ _iterator5.e(err);
26690
27111
  } finally {
26691
- _iterator3.f();
27112
+ _iterator5.f();
26692
27113
  }
26693
27114
  break;
26694
27115
  }
26695
27116
  case ketcherCore.OperationType.BOND_ADD:
26696
27117
  {
26697
- var _iterator4 = _createForOfIteratorHelper$2(ids.values()),
26698
- _step4;
27118
+ var _iterator6 = _createForOfIteratorHelper$2(ids.values()),
27119
+ _step6;
26699
27120
  try {
26700
- var _loop3 = function _loop3() {
26701
- var id = _step4.value;
26702
- var bond = _this7.struct().bonds.get(id);
27121
+ var _loop4 = function _loop4() {
27122
+ var id = _step6.value;
27123
+ var bond = _this8.struct().bonds.get(id);
26703
27124
  assert_1(bond);
26704
- var attachmentPointWithBondToLeavingAtom = Array.from(_this7.monomerCreationState.assignedAttachmentPoints.entries()).find(function (_ref19) {
27125
+ var attachmentPointWithBondToLeavingAtom = Array.from(_this8.monomerCreationState.assignedAttachmentPoints.entries()).find(function (_ref19) {
26705
27126
  var _ref20 = _slicedToArray__default["default"](_ref19, 2),
26706
27127
  _ref20$ = _slicedToArray__default["default"](_ref20[1], 2),
26707
27128
  attachmentAtomId = _ref20$[0],
@@ -26711,55 +27132,72 @@ var Editor$3 = function () {
26711
27132
  if (attachmentPointWithBondToLeavingAtom) {
26712
27133
  var _attachmentPointWithB = _slicedToArray__default["default"](attachmentPointWithBondToLeavingAtom, 1),
26713
27134
  attachmentPointName = _attachmentPointWithB[0];
26714
- _this7.monomerCreationState.assignedAttachmentPoints["delete"](attachmentPointName);
27135
+ _this8.monomerCreationState.assignedAttachmentPoints["delete"](attachmentPointName);
26715
27136
  }
26716
27137
  if (Editor.isBondSuitableForAttachmentPoint(bond)) {
26717
- if (_this7.monomerCreationState.potentialAttachmentPoints.has(bond.begin)) {
26718
- var leavingAtomIds = _this7.monomerCreationState.potentialAttachmentPoints.get(bond.begin);
27138
+ if (_this8.monomerCreationState.potentialAttachmentPoints.has(bond.begin)) {
27139
+ var leavingAtomIds = _this8.monomerCreationState.potentialAttachmentPoints.get(bond.begin);
26719
27140
  assert_1(leavingAtomIds);
26720
- var endAtom = _this7.struct().atoms.get(bond.end);
27141
+ var endAtom = _this8.struct().atoms.get(bond.end);
26721
27142
  if (endAtom && endAtom.neighbors.length === 1) {
26722
27143
  var updatedLeavingAtomIds = new Set(leavingAtomIds);
26723
27144
  updatedLeavingAtomIds.add(bond.end);
26724
- _this7.monomerCreationState.potentialAttachmentPoints.set(bond.begin, updatedLeavingAtomIds);
27145
+ _this8.monomerCreationState.potentialAttachmentPoints.set(bond.begin, updatedLeavingAtomIds);
26725
27146
  }
26726
27147
  }
26727
- if (_this7.monomerCreationState.potentialAttachmentPoints.has(bond.end)) {
26728
- var _leavingAtomIds = _this7.monomerCreationState.potentialAttachmentPoints.get(bond.end);
27148
+ if (_this8.monomerCreationState.potentialAttachmentPoints.has(bond.end)) {
27149
+ var _leavingAtomIds = _this8.monomerCreationState.potentialAttachmentPoints.get(bond.end);
26729
27150
  assert_1(_leavingAtomIds);
26730
- var beginAtom = _this7.struct().atoms.get(bond.begin);
27151
+ var beginAtom = _this8.struct().atoms.get(bond.begin);
26731
27152
  if (beginAtom && beginAtom.neighbors.length === 1) {
26732
27153
  var _updatedLeavingAtomIds = new Set(_leavingAtomIds);
26733
27154
  _updatedLeavingAtomIds.add(bond.begin);
26734
- _this7.monomerCreationState.potentialAttachmentPoints.set(bond.end, _updatedLeavingAtomIds);
27155
+ _this8.monomerCreationState.potentialAttachmentPoints.set(bond.end, _updatedLeavingAtomIds);
26735
27156
  }
26736
27157
  }
26737
27158
  }
27159
+ if (_this8.canAssignRnaComponent(bond)) {
27160
+ _this8.autoAssignAtomToRnaComponent(id);
27161
+ }
26738
27162
  };
26739
- for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
26740
- _loop3();
27163
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
27164
+ _loop4();
26741
27165
  }
26742
27166
  } catch (err) {
26743
- _iterator4.e(err);
27167
+ _iterator6.e(err);
26744
27168
  } finally {
26745
- _iterator4.f();
27169
+ _iterator6.f();
26746
27170
  }
26747
27171
  break;
26748
27172
  }
27173
+ case ketcherCore.OperationType.BOND_DELETE:
27174
+ {
27175
+ _this8.removeAtomsAndBondsFromRnaComponents([], _toConsumableArray__default["default"](ids.values()));
27176
+ break;
27177
+ }
26749
27178
  default:
26750
27179
  break;
26751
27180
  }
26752
27181
  };
26753
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
26754
- if (_loop()) continue;
27182
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
27183
+ if (_loop2()) continue;
26755
27184
  }
26756
27185
  } catch (err) {
26757
- _iterator2.e(err);
27186
+ _iterator4.e(err);
26758
27187
  } finally {
26759
- _iterator2.f();
27188
+ _iterator4.f();
26760
27189
  }
26761
27190
  this.monomerCreationState = _objectSpread$V({}, this.monomerCreationState || {});
26762
27191
  }
27192
+ }, {
27193
+ key: "setRnaMonomerCreationMode",
27194
+ value: function setRnaMonomerCreationMode(isActive) {
27195
+ if (!this.monomerCreationState) {
27196
+ ketcherCore.KetcherLogger.warn('Monomer creation state is not initialized');
27197
+ return;
27198
+ }
27199
+ this.monomerCreationState.isRnaPresetMode = isActive;
27200
+ }
26763
27201
  }, {
26764
27202
  key: "selection",
26765
27203
  value: function selection(ci) {
@@ -26961,7 +27399,20 @@ var Editor$3 = function () {
26961
27399
  }, {
26962
27400
  key: "unsubscribe",
26963
27401
  value: function unsubscribe(eventName, subscriber) {
26964
- this.event[eventName].remove(subscriber.handler);
27402
+ switch (eventName) {
27403
+ case 'change':
27404
+ {
27405
+ ketcherCore.ketcherProvider.getKetcher(this.ketcherId).changeEvent.remove(subscriber.handler);
27406
+ break;
27407
+ }
27408
+ case 'libraryUpdate':
27409
+ {
27410
+ ketcherCore.ketcherProvider.getKetcher(this.ketcherId).libraryUpdateEvent.remove(subscriber.handler);
27411
+ break;
27412
+ }
27413
+ default:
27414
+ this.event[eventName].remove(subscriber.handler);
27415
+ }
26965
27416
  }
26966
27417
  }, {
26967
27418
  key: "findItem",
@@ -27097,17 +27548,17 @@ var Editor$3 = function () {
27097
27548
  return false;
27098
27549
  }
27099
27550
  var adjacencyList = new Map();
27100
- var _iterator5 = _createForOfIteratorHelper$2(atomIds),
27101
- _step5;
27551
+ var _iterator7 = _createForOfIteratorHelper$2(atomIds),
27552
+ _step7;
27102
27553
  try {
27103
- for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
27104
- var atomId = _step5.value;
27554
+ for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
27555
+ var atomId = _step7.value;
27105
27556
  adjacencyList.set(atomId, []);
27106
27557
  }
27107
27558
  } catch (err) {
27108
- _iterator5.e(err);
27559
+ _iterator7.e(err);
27109
27560
  } finally {
27110
- _iterator5.f();
27561
+ _iterator7.f();
27111
27562
  }
27112
27563
  bondIds.forEach(function (bondId) {
27113
27564
  var bond = struct.bonds.get(bondId);
@@ -27129,19 +27580,19 @@ var Editor$3 = function () {
27129
27580
  if (nextAtomId !== undefined && !visited.has(nextAtomId)) {
27130
27581
  var _adjacencyList$get3;
27131
27582
  visited.add(nextAtomId);
27132
- var _iterator6 = _createForOfIteratorHelper$2((_adjacencyList$get3 = adjacencyList.get(nextAtomId)) !== null && _adjacencyList$get3 !== void 0 ? _adjacencyList$get3 : []),
27133
- _step6;
27583
+ var _iterator8 = _createForOfIteratorHelper$2((_adjacencyList$get3 = adjacencyList.get(nextAtomId)) !== null && _adjacencyList$get3 !== void 0 ? _adjacencyList$get3 : []),
27584
+ _step8;
27134
27585
  try {
27135
- for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
27136
- var neighbor = _step6.value;
27586
+ for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
27587
+ var neighbor = _step8.value;
27137
27588
  if (!visited.has(neighbor)) {
27138
27589
  queue.push(neighbor);
27139
27590
  }
27140
27591
  }
27141
27592
  } catch (err) {
27142
- _iterator6.e(err);
27593
+ _iterator8.e(err);
27143
27594
  } finally {
27144
- _iterator6.f();
27595
+ _iterator8.f();
27145
27596
  }
27146
27597
  }
27147
27598
  }
@@ -27307,7 +27758,7 @@ function setHover(ci, visible, render) {
27307
27758
 
27308
27759
  var classes$F = {"button-common-styles":"StructEditor-module_button-common-styles__3P7PO","scrollbar":"StructEditor-module_scrollbar__SUs-o","spinnerOverlay":"StructEditor-module_spinnerOverlay__5H1IM","canvas":"StructEditor-module_canvas__LLnzh","measureLog":"StructEditor-module_measureLog__B2wuy","visible":"StructEditor-module_visible__3eFNB","intermediateCanvas":"StructEditor-module_intermediateCanvas__fR3ws","enableCursor":"StructEditor-module_enableCursor__Qla0A"};
27309
27760
 
27310
- var styles$p = {"button-common-styles":"ContextMenu-module_button-common-styles__pshYr","scrollbar":"ContextMenu-module_scrollbar__fCla5","contextMenu":"ContextMenu-module_contextMenu__oqyL-","icon":"ContextMenu-module_icon__KhXEk","contextMenuText":"ContextMenu-module_contextMenuText__j0O2-","sameGroup":"ContextMenu-module_sameGroup__0DPIX","devider":"ContextMenu-module_devider__-K9Bc"};
27761
+ var styles$p = {"button-common-styles":"ContextMenu-module_button-common-styles__pshYr","scrollbar":"ContextMenu-module_scrollbar__fCla5","contextMenu":"ContextMenu-module_contextMenu__oqyL-","icon":"ContextMenu-module_icon__KhXEk","markAsComponentIcon":"ContextMenu-module_markAsComponentIcon__oBjcI","contextMenuText":"ContextMenu-module_contextMenuText__j0O2-","sameGroup":"ContextMenu-module_sameGroup__0DPIX","devider":"ContextMenu-module_devider__-K9Bc"};
27311
27762
 
27312
27763
  var CONTEXT_MENU_ID;
27313
27764
  (function (CONTEXT_MENU_ID) {
@@ -27477,6 +27928,116 @@ var useDelete$1 = function useDelete() {
27477
27928
  return handler;
27478
27929
  };
27479
27930
 
27931
+ var MonomerTypeSelectConfig = [{
27932
+ value: ketcherCore.KetMonomerClass.AminoAcid,
27933
+ label: 'Amino acid',
27934
+ iconName: 'peptide'
27935
+ }, {
27936
+ value: ketcherCore.KetMonomerClass.Sugar,
27937
+ label: 'Sugar',
27938
+ iconName: 'sugar'
27939
+ }, {
27940
+ value: ketcherCore.KetMonomerClass.Base,
27941
+ label: 'Base',
27942
+ iconName: 'base'
27943
+ }, {
27944
+ value: ketcherCore.KetMonomerClass.Phosphate,
27945
+ label: 'Phosphate',
27946
+ iconName: 'phosphate'
27947
+ }, {
27948
+ value: ketcherCore.KetMonomerClass.RNA,
27949
+ label: 'Nucleotide (monomer)',
27950
+ iconName: 'nucleotide'
27951
+ }, {
27952
+ value: 'rnaPreset',
27953
+ label: 'Nucleotide (preset)',
27954
+ iconName: 'preset'
27955
+ }, {
27956
+ value: ketcherCore.KetMonomerClass.CHEM,
27957
+ label: 'CHEM',
27958
+ iconName: 'chem'
27959
+ }];
27960
+ var MAX_MODIFICATION_TYPES = 5;
27961
+ var NotificationMessages = {
27962
+ defaultAttachmentPoints: 'Attachment points are set by default with hydrogens as leaving groups.',
27963
+ emptyMandatoryFields: 'Mandatory fields must be filled.',
27964
+ invalidSymbol: 'The monomer code must consist only of uppercase and lowercase letters, numbers, hyphens (-), underscores (_), and asterisks (*).',
27965
+ symbolExists: 'The code must be unique amongst peptide, RNA, or CHEM monomers.',
27966
+ editingIsNotAllowed: 'Editing of the structure is not allowed.',
27967
+ noAttachmentPoints: 'The monomer must have at least one attachment point.',
27968
+ incorrectAttachmentPointsOrder: 'Attachment point numbers must be in order, but R1 and R2 may be skipped.',
27969
+ creationSuccessful: 'The monomer was successfully added to the library.',
27970
+ creationRNASuccessful: 'The preset was successfully added to the library.',
27971
+ incontinuousStructure: 'All monomers must have a continuous structure.',
27972
+ notUniqueModificationTypes: 'Only one amino acid within a natural analogue can have the same modification type.',
27973
+ modificationTypeExists: 'Only one amino acid within a natural analogue can have the same modification type.',
27974
+ notMinimalViableStructure: 'Minimal monomer structure is two atoms connected via a single bond.',
27975
+ impureStructure: 'Monomer structure cannot contain S-groups, R-groups, special atoms, or any other query properties.',
27976
+ invalidHELMAlias: 'The HELM alias must consist only of uppercase and lowercase letters, numbers, hyphens (-), underscores (_), and asterisks (*).',
27977
+ notUniqueHELMAlias: 'The HELM alias must be unique amongst peptide or RNA monomers.',
27978
+ invalidRnaPresetStructure: 'Structure of rna preset component contains issues. Please adjust the structure.',
27979
+ notUniquePresetCode: 'The preset code must be unique amongst other presets.',
27980
+ invalidPresetCode: 'The preset code must consist only of uppercase and lowercase letters, numbers, hyphens (-), underscores (_), and asterisks (*).'
27981
+ };
27982
+ var NotificationTypes = {
27983
+ defaultAttachmentPoints: 'info',
27984
+ emptyMandatoryFields: 'error',
27985
+ invalidSymbol: 'error',
27986
+ symbolExists: 'error',
27987
+ editingIsNotAllowed: 'error',
27988
+ noAttachmentPoints: 'error',
27989
+ incorrectAttachmentPointsOrder: 'error',
27990
+ creationSuccessful: 'info',
27991
+ creationRNASuccessful: 'info',
27992
+ incontinuousStructure: 'error',
27993
+ notUniqueModificationTypes: 'error',
27994
+ modificationTypeExists: 'error',
27995
+ notMinimalViableStructure: 'error',
27996
+ impureStructure: 'error',
27997
+ invalidHELMAlias: 'error',
27998
+ notUniqueHELMAlias: 'error',
27999
+ invalidRnaPresetStructure: 'error',
28000
+ notUniquePresetCode: 'error',
28001
+ invalidPresetCode: 'error'
28002
+ };
28003
+ var MonomerCreationExternalNotificationAction = 'MonomerCreationExternalNotification';
28004
+ var MonomerCreationMarkAsComponentAction = 'MonomerCreationMarkAsComponent';
28005
+
28006
+ var useMarkAs = function useMarkAs() {
28007
+ var _useAppContext = useAppContext(),
28008
+ ketcherId = _useAppContext.ketcherId;
28009
+ var handler = React.useCallback(function (componentType) {
28010
+ return function (_params) {
28011
+ window.dispatchEvent(new CustomEvent(MonomerCreationMarkAsComponentAction, {
28012
+ detail: componentType
28013
+ }));
28014
+ };
28015
+ }, []);
28016
+ var isVisible = React.useCallback(function () {
28017
+ var editor = ketcherCore.ketcherProvider.getKetcher(ketcherId).editor;
28018
+ if (!editor.isMonomerCreationWizardActive) {
28019
+ return false;
28020
+ }
28021
+ var monomerCreationState = editor.monomerCreationState;
28022
+ return monomerCreationState === null || monomerCreationState === void 0 ? void 0 : monomerCreationState.isRnaPresetMode;
28023
+ }, [ketcherId]);
28024
+ var isDisabled = React.useCallback(function () {
28025
+ var editor = ketcherCore.ketcherProvider.getKetcher(ketcherId).editor;
28026
+ var selection = editor.selection();
28027
+ var struct = editor.struct();
28028
+ if (!(selection !== null && selection !== void 0 && selection.atoms) || selection.atoms.length === 0) {
28029
+ return true;
28030
+ }
28031
+ var isContinuous = Editor$3.isStructureContinuous(struct, selection);
28032
+ return !isContinuous;
28033
+ }, [ketcherId]);
28034
+ return {
28035
+ handler: handler,
28036
+ isVisible: isVisible,
28037
+ isDisabled: isDisabled
28038
+ };
28039
+ };
28040
+
27480
28041
  var classes$E = {"button-common-styles":"ToggleButtonGroup-module_button-common-styles__wU4We","scrollbar":"ToggleButtonGroup-module_scrollbar__lvyIF","button":"ToggleButtonGroup-module_button__5nfNK","selected":"ToggleButtonGroup-module_selected__SAbod"};
27481
28042
 
27482
28043
  var BUTTON_HEIGHT = 28;
@@ -27840,6 +28401,10 @@ var AtomMenuItems = function AtomMenuItems(props) {
27840
28401
  handleStereo = _useAtomStereo2[0],
27841
28402
  stereoDisabled = _useAtomStereo2[1];
27842
28403
  var handleDelete = useDelete$1();
28404
+ var _useMarkAs = useMarkAs(),
28405
+ handleMarkAs = _useMarkAs.handler,
28406
+ markAsIsVisible = _useMarkAs.isVisible,
28407
+ markAsIsDisabled = _useMarkAs.isDisabled;
27843
28408
  var _useAppContext = useAppContext(),
27844
28409
  ketcherId = _useAppContext.ketcherId;
27845
28410
  var ketcher = ketcherCore.ketcherProvider.getKetcher(ketcherId);
@@ -27909,8 +28474,43 @@ var AtomMenuItems = function AtomMenuItems(props) {
27909
28474
  }
27910
28475
  var editMenuItemTitle = (_props$propsFromTrigg7 = props.propsFromTrigger) !== null && _props$propsFromTrigg7 !== void 0 && _props$propsFromTrigg7.extraItemsSelected ? 'Edit selected atoms...' : 'Edit...';
27911
28476
  var disabledForMonomerCreation = editor.isMonomerCreationWizardActive;
28477
+ var showMarkAsMenu = markAsIsVisible();
28478
+ var markAsDisabled = markAsIsDisabled();
27912
28479
  return jsxRuntime.jsxs(jsxRuntime.Fragment, {
27913
- children: [makeAttachmentPointMenuItems && jsxRuntime.jsxs(jsxRuntime.Fragment, {
28480
+ children: [showMarkAsMenu && jsxRuntime.jsxs(reactContexify.Submenu, _objectSpread$T(_objectSpread$T({}, props), {}, {
28481
+ "data-testid": "Mark as a...-option",
28482
+ label: "Mark as a...",
28483
+ disabled: markAsDisabled,
28484
+ className: styles$p.subMenu,
28485
+ children: [jsxRuntime.jsxs(reactContexify.Item, _objectSpread$T(_objectSpread$T({}, props), {}, {
28486
+ "data-testid": "Mark as Base-option",
28487
+ onClick: handleMarkAs('base'),
28488
+ children: [jsxRuntime.jsx(Icon, {
28489
+ name: "base",
28490
+ className: clsx__default["default"](styles$p.icon, styles$p.markAsComponentIcon)
28491
+ }), jsxRuntime.jsx("span", {
28492
+ children: "Base"
28493
+ })]
28494
+ })), jsxRuntime.jsxs(reactContexify.Item, _objectSpread$T(_objectSpread$T({}, props), {}, {
28495
+ "data-testid": "Mark as Sugar-option",
28496
+ onClick: handleMarkAs('sugar'),
28497
+ children: [jsxRuntime.jsx(Icon, {
28498
+ name: "sugar",
28499
+ className: clsx__default["default"](styles$p.icon, styles$p.markAsComponentIcon)
28500
+ }), jsxRuntime.jsx("span", {
28501
+ children: "Sugar"
28502
+ })]
28503
+ })), jsxRuntime.jsxs(reactContexify.Item, _objectSpread$T(_objectSpread$T({}, props), {}, {
28504
+ "data-testid": "Mark as Phosphate-option",
28505
+ onClick: handleMarkAs('phosphate'),
28506
+ children: [jsxRuntime.jsx(Icon, {
28507
+ name: "phosphate",
28508
+ className: clsx__default["default"](styles$p.icon, styles$p.markAsComponentIcon)
28509
+ }), jsxRuntime.jsx("span", {
28510
+ children: "Phosphate"
28511
+ })]
28512
+ }))]
28513
+ })), makeAttachmentPointMenuItems && jsxRuntime.jsxs(jsxRuntime.Fragment, {
27914
28514
  children: [makeAttachmentPointMenuItems, jsxRuntime.jsx(reactContexify.Separator, {})]
27915
28515
  }), jsxRuntime.jsxs(reactContexify.Item, _objectSpread$T(_objectSpread$T({}, props), {}, {
27916
28516
  "data-testid": editMenuItemTitle.concat('-option'),
@@ -28466,6 +29066,10 @@ var SelectionMenuItems = function SelectionMenuItems(props) {
28466
29066
  _useCreateMonomer2 = _slicedToArray__default["default"](_useCreateMonomer, 2),
28467
29067
  handleCreateMonomer = _useCreateMonomer2[0],
28468
29068
  createMonomerDisabled = _useCreateMonomer2[1];
29069
+ var _useMarkAs = useMarkAs(),
29070
+ handleMarkAs = _useMarkAs.handler,
29071
+ markAsIsVisible = _useMarkAs.isVisible,
29072
+ markAsIsDisabled = _useMarkAs.isDisabled;
28469
29073
  var highlightBondWithColor = function highlightBondWithColor(color) {
28470
29074
  var _props$propsFromTrigg, _props$propsFromTrigg2, _props$propsFromTrigg3;
28471
29075
  var bondIds = ((_props$propsFromTrigg = props.propsFromTrigger) === null || _props$propsFromTrigg === void 0 ? void 0 : _props$propsFromTrigg.bondIds) || [];
@@ -28479,8 +29083,43 @@ var SelectionMenuItems = function SelectionMenuItems(props) {
28479
29083
  });
28480
29084
  };
28481
29085
  var options = reactRedux.useSelector(optionsSelector);
29086
+ var showMarkAsMenu = markAsIsVisible();
29087
+ var markAsDisabled = markAsIsDisabled();
28482
29088
  return jsxRuntime.jsxs(jsxRuntime.Fragment, {
28483
- children: [jsxRuntime.jsx(reactContexify.Item, _objectSpread$P(_objectSpread$P({}, props), {}, {
29089
+ children: [showMarkAsMenu && jsxRuntime.jsxs(reactContexify.Submenu, _objectSpread$P(_objectSpread$P({}, props), {}, {
29090
+ "data-testid": "Mark as a...-option",
29091
+ label: "Mark as a...",
29092
+ disabled: markAsDisabled,
29093
+ className: styles$p.subMenu,
29094
+ children: [jsxRuntime.jsxs(reactContexify.Item, _objectSpread$P(_objectSpread$P({}, props), {}, {
29095
+ "data-testid": "Mark as Base-option",
29096
+ onClick: handleMarkAs('base'),
29097
+ children: [jsxRuntime.jsx(Icon, {
29098
+ name: "base",
29099
+ className: clsx__default["default"](styles$p.icon, styles$p.markAsComponentIcon)
29100
+ }), jsxRuntime.jsx("span", {
29101
+ children: "Base"
29102
+ })]
29103
+ })), jsxRuntime.jsxs(reactContexify.Item, _objectSpread$P(_objectSpread$P({}, props), {}, {
29104
+ "data-testid": "Mark as Sugar-option",
29105
+ onClick: handleMarkAs('sugar'),
29106
+ children: [jsxRuntime.jsx(Icon, {
29107
+ name: "sugar",
29108
+ className: clsx__default["default"](styles$p.icon, styles$p.markAsComponentIcon)
29109
+ }), jsxRuntime.jsx("span", {
29110
+ children: "Sugar"
29111
+ })]
29112
+ })), jsxRuntime.jsxs(reactContexify.Item, _objectSpread$P(_objectSpread$P({}, props), {}, {
29113
+ "data-testid": "Mark as Phosphate-option",
29114
+ onClick: handleMarkAs('phosphate'),
29115
+ children: [jsxRuntime.jsx(Icon, {
29116
+ name: "phosphate",
29117
+ className: clsx__default["default"](styles$p.icon, styles$p.markAsComponentIcon)
29118
+ }), jsxRuntime.jsx("span", {
29119
+ children: "Phosphate"
29120
+ })]
29121
+ }))]
29122
+ })), jsxRuntime.jsx(reactContexify.Item, _objectSpread$P(_objectSpread$P({}, props), {}, {
28484
29123
  "data-testid": "Edit selected bonds...-option",
28485
29124
  disabled: bondEditDisabled,
28486
29125
  onClick: handleBondEdit,
@@ -30165,78 +30804,6 @@ var AttachmentPointEditPopup = function AttachmentPointEditPopup(_ref) {
30165
30804
  });
30166
30805
  };
30167
30806
 
30168
- var MonomerTypeSelectConfig = [{
30169
- value: ketcherCore.KetMonomerClass.AminoAcid,
30170
- label: 'Amino acid',
30171
- iconName: 'peptide'
30172
- }, {
30173
- value: ketcherCore.KetMonomerClass.Sugar,
30174
- label: 'Sugar',
30175
- iconName: 'sugar'
30176
- }, {
30177
- value: ketcherCore.KetMonomerClass.Base,
30178
- label: 'Base',
30179
- iconName: 'base'
30180
- }, {
30181
- value: ketcherCore.KetMonomerClass.Phosphate,
30182
- label: 'Phosphate',
30183
- iconName: 'phosphate'
30184
- }, {
30185
- value: ketcherCore.KetMonomerClass.RNA,
30186
- label: 'Nucleotide (monomer)',
30187
- iconName: 'nucleotide'
30188
- }, {
30189
- value: ketcherCore.KetMonomerClass.CHEM,
30190
- label: 'CHEM',
30191
- iconName: 'chem'
30192
- }, {
30193
- value: 'rnaPreset',
30194
- label: 'Nucleotide (preset)',
30195
- iconName: 'preset'
30196
- }];
30197
- var MAX_MODIFICATION_TYPES = 5;
30198
- var NotificationMessages = {
30199
- defaultAttachmentPoints: 'Attachment points are set by default with hydrogens as leaving groups.',
30200
- emptyMandatoryFields: 'Mandatory fields must be filled.',
30201
- invalidSymbol: 'The monomer code must consist only of uppercase and lowercase letters, numbers, hyphens (-), underscores (_), and asterisks (*).',
30202
- symbolExists: 'The code must be unique amongst peptide, RNA, or CHEM monomers.',
30203
- editingIsNotAllowed: 'Editing of the structure is not allowed.',
30204
- noAttachmentPoints: 'The monomer must have at least one attachment point.',
30205
- incorrectAttachmentPointsOrder: 'Attachment point numbers must be in order, but R1 and R2 may be skipped.',
30206
- creationSuccessful: 'The monomer was successfully added to the library.',
30207
- incontinuousStructure: 'All monomers must have a continuous structure.',
30208
- notUniqueModificationTypes: 'Only one amino acid within a natural analogue can have the same modification type.',
30209
- modificationTypeExists: 'Only one amino acid within a natural analogue can have the same modification type.',
30210
- notMinimalViableStructure: 'Minimal monomer structure is two atoms connected via a single bond.',
30211
- impureStructure: 'Monomer structure cannot contain S-groups, R-groups, special atoms, or any other query properties.',
30212
- invalidHELMAlias: 'The HELM alias must consist only of uppercase and lowercase letters, numbers, hyphens (-), underscores (_), and asterisks (*).',
30213
- notUniqueHELMAlias: 'The HELM alias must be unique amongst peptide or RNA monomers.',
30214
- invalidRnaPresetStructure: 'Structure of rna preset component contains issues. Please adjust the structure.',
30215
- notUniquePresetCode: 'The preset code must be unique amongst other presets.',
30216
- invalidPresetCode: 'The preset code must consist only of uppercase and lowercase letters, numbers, hyphens (-), underscores (_), and asterisks (*).'
30217
- };
30218
- var NotificationTypes = {
30219
- defaultAttachmentPoints: 'info',
30220
- emptyMandatoryFields: 'error',
30221
- invalidSymbol: 'error',
30222
- symbolExists: 'error',
30223
- editingIsNotAllowed: 'error',
30224
- noAttachmentPoints: 'error',
30225
- incorrectAttachmentPointsOrder: 'error',
30226
- creationSuccessful: 'info',
30227
- incontinuousStructure: 'error',
30228
- notUniqueModificationTypes: 'error',
30229
- modificationTypeExists: 'error',
30230
- notMinimalViableStructure: 'error',
30231
- impureStructure: 'error',
30232
- invalidHELMAlias: 'error',
30233
- notUniqueHELMAlias: 'error',
30234
- invalidRnaPresetStructure: 'error',
30235
- notUniquePresetCode: 'error',
30236
- invalidPresetCode: 'error'
30237
- };
30238
- var MonomerCreationExternalNotificationAction = 'MonomerCreationExternalNotification';
30239
-
30240
30807
  var MONOMER_VALIDATION_RULES = [{
30241
30808
  monomerType: ketcherCore.KetMonomerClass.AminoAcid,
30242
30809
  requirements: [{
@@ -30845,13 +31412,17 @@ var RnaPresetTabs = function RnaPresetTabs(props) {
30845
31412
  editor: editor
30846
31413
  });
30847
31414
  };
30848
- var handleClickCreateComponent = function handleClickCreateComponent(rnaComponentKey) {
31415
+ var handleClickCreateComponent = React.useCallback(function (rnaComponentKey) {
31416
+ var selection = editor.selection();
31417
+ var atomIds = (selection === null || selection === void 0 ? void 0 : selection.atoms) || [];
31418
+ var bondIds = (selection === null || selection === void 0 ? void 0 : selection.bonds) || [];
30849
31419
  wizardStateDispatch({
30850
31420
  type: 'SetRnaPresetComponentStructure',
30851
31421
  rnaComponentKey: rnaComponentKey,
30852
31422
  editor: editor
30853
31423
  });
30854
- };
31424
+ editor.setRnaComponentAtoms(rnaComponentKey, atomIds, bondIds);
31425
+ }, [editor, wizardStateDispatch]);
30855
31426
  var currentTabStructure = currentTabState === null || currentTabState === void 0 ? void 0 : currentTabState.structure;
30856
31427
  React.useEffect(function () {
30857
31428
  if (!currentTabStructure) {
@@ -30860,6 +31431,24 @@ var RnaPresetTabs = function RnaPresetTabs(props) {
30860
31431
  applyHighlights(selectedTab, isHighlightEnabled);
30861
31432
  editor.selection(null);
30862
31433
  }, [applyHighlights, currentTabStructure, editor, isHighlightEnabled, selectedTab]);
31434
+ React.useEffect(function () {
31435
+ return function () {
31436
+ editor === null || editor === void 0 || editor.highlights.clear();
31437
+ };
31438
+ }, [editor === null || editor === void 0 ? void 0 : editor.highlights]);
31439
+ React.useEffect(function () {
31440
+ var handleMarkAsComponent = function handleMarkAsComponent(event) {
31441
+ var componentType = event.detail;
31442
+ var tabIndex = RNA_COMPONENT_KEYS.indexOf(componentType) + 1;
31443
+ handleClickCreateComponent(componentType);
31444
+ setSelectedTab(tabIndex);
31445
+ applyHighlights(selectedTab, isHighlightEnabled);
31446
+ };
31447
+ window.addEventListener(MonomerCreationMarkAsComponentAction, handleMarkAsComponent);
31448
+ return function () {
31449
+ window.removeEventListener(MonomerCreationMarkAsComponentAction, handleMarkAsComponent);
31450
+ };
31451
+ }, [wizardState, handleClickCreateComponent, applyHighlights, selectedTab, isHighlightEnabled]);
30863
31452
  var hasErrorInTab = function hasErrorInTab(wizardState) {
30864
31453
  return Object.values(wizardState.errors).some(function (errorValue) {
30865
31454
  return Boolean(errorValue);
@@ -31001,6 +31590,18 @@ var initialRnaPresetWizardState = {
31001
31590
  }
31002
31591
  }
31003
31592
  };
31593
+ var getComponentSuffix = function getComponentSuffix(componentType) {
31594
+ switch (componentType) {
31595
+ case ketcherCore.KetMonomerClass.Base:
31596
+ return 'B';
31597
+ case ketcherCore.KetMonomerClass.Sugar:
31598
+ return 'S';
31599
+ case ketcherCore.KetMonomerClass.Phosphate:
31600
+ return 'P';
31601
+ default:
31602
+ return '';
31603
+ }
31604
+ };
31004
31605
  var wizardReducer = function wizardReducer(state, action) {
31005
31606
  switch (action.type) {
31006
31607
  case 'SetFieldValue':
@@ -31102,6 +31703,14 @@ var rnaPresetWizardReducer = function rnaPresetWizardReducer(state, action) {
31102
31703
  if (!action.rnaComponentKey) {
31103
31704
  return state;
31104
31705
  }
31706
+ if (action.type === 'UpdateRnaPresetComponentStructure') {
31707
+ return _objectSpread$G(_objectSpread$G({}, state), {}, _defineProperty__default["default"]({}, action.rnaComponentKey, _objectSpread$G(_objectSpread$G({}, state[action.rnaComponentKey]), {}, {
31708
+ structure: {
31709
+ atoms: action.atomIds,
31710
+ bonds: action.bondIds
31711
+ }
31712
+ })));
31713
+ }
31105
31714
  var rnaComponentKey = action.rnaComponentKey,
31106
31715
  restAction = _objectWithoutProperties__default["default"](action, _excluded$o);
31107
31716
  if (action.type === 'SetNotifications') {
@@ -31144,7 +31753,7 @@ var rnaPresetWizardReducer = function rnaPresetWizardReducer(state, action) {
31144
31753
  _updatedState = _objectSpread$G(_objectSpread$G({}, _updatedState), {}, {
31145
31754
  base: _objectSpread$G(_objectSpread$G({}, _updatedState.base), {}, {
31146
31755
  values: _objectSpread$G(_objectSpread$G({}, _updatedState.base.values), {}, {
31147
- symbol: newPresetCode
31756
+ symbol: newPresetCode ? newPresetCode + getComponentSuffix(ketcherCore.KetMonomerClass.Base) : ''
31148
31757
  })
31149
31758
  })
31150
31759
  });
@@ -31153,7 +31762,7 @@ var rnaPresetWizardReducer = function rnaPresetWizardReducer(state, action) {
31153
31762
  _updatedState = _objectSpread$G(_objectSpread$G({}, _updatedState), {}, {
31154
31763
  sugar: _objectSpread$G(_objectSpread$G({}, _updatedState.sugar), {}, {
31155
31764
  values: _objectSpread$G(_objectSpread$G({}, _updatedState.sugar.values), {}, {
31156
- symbol: newPresetCode
31765
+ symbol: newPresetCode ? newPresetCode + getComponentSuffix(ketcherCore.KetMonomerClass.Sugar) : ''
31157
31766
  })
31158
31767
  })
31159
31768
  });
@@ -31162,7 +31771,7 @@ var rnaPresetWizardReducer = function rnaPresetWizardReducer(state, action) {
31162
31771
  _updatedState = _objectSpread$G(_objectSpread$G({}, _updatedState), {}, {
31163
31772
  phosphate: _objectSpread$G(_objectSpread$G({}, _updatedState.phosphate), {}, {
31164
31773
  values: _objectSpread$G(_objectSpread$G({}, _updatedState.phosphate.values), {}, {
31165
- symbol: newPresetCode
31774
+ symbol: newPresetCode ? newPresetCode + getComponentSuffix(ketcherCore.KetMonomerClass.Phosphate) : ''
31166
31775
  })
31167
31776
  })
31168
31777
  });
@@ -31184,18 +31793,6 @@ var hasAllMandatoryPropertiesFilled = function hasAllMandatoryPropertiesFilled(v
31184
31793
  }
31185
31794
  return true;
31186
31795
  };
31187
- var getComponentSuffix = function getComponentSuffix(componentType) {
31188
- switch (componentType) {
31189
- case ketcherCore.KetMonomerClass.Base:
31190
- return 'B';
31191
- case ketcherCore.KetMonomerClass.Sugar:
31192
- return 'S';
31193
- case ketcherCore.KetMonomerClass.Phosphate:
31194
- return 'P';
31195
- default:
31196
- return '';
31197
- }
31198
- };
31199
31796
  var getLeavingAtomForAttachmentPoint = function getLeavingAtomForAttachmentPoint(componentType, attachmentPointName) {
31200
31797
  switch (componentType) {
31201
31798
  case ketcherCore.KetMonomerClass.Base:
@@ -31432,6 +32029,14 @@ var MonomerCreationWizard = function MonomerCreationWizard() {
31432
32029
  _useState6 = _slicedToArray__default["default"](_useState5, 2),
31433
32030
  leavingGroupDialogMessage = _useState6[0],
31434
32031
  setLeavingGroupDialogMessage = _useState6[1];
32032
+ var _useState7 = React.useState(null),
32033
+ _useState8 = _slicedToArray__default["default"](_useState7, 2),
32034
+ pendingType = _useState8[0],
32035
+ setPendingType = _useState8[1];
32036
+ var _useState9 = React.useState(false),
32037
+ _useState10 = _slicedToArray__default["default"](_useState9, 2),
32038
+ showTypeChangeDialog = _useState10[0],
32039
+ setShowTypeChangeDialog = _useState10[1];
31435
32040
  var isRnaPresetType = type === 'rnaPreset';
31436
32041
  var notifications = isRnaPresetType ? new Map([].concat(_toConsumableArray__default["default"](rnaPresetWizardState.preset.notifications || []), _toConsumableArray__default["default"](rnaPresetWizardState.sugar.notifications || []), _toConsumableArray__default["default"](rnaPresetWizardState.base.notifications || []), _toConsumableArray__default["default"](rnaPresetWizardState.phosphate.notifications || []))) : monomerWizardNotifications;
31437
32042
  React.useEffect(function () {
@@ -31464,37 +32069,71 @@ var MonomerCreationWizard = function MonomerCreationWizard() {
31464
32069
  window.removeEventListener(ketcherCore.MonomerCreationAttachmentPointClickEvent, attachmentPointClickHandler);
31465
32070
  };
31466
32071
  }, []);
31467
- var handleFieldChange = function handleFieldChange(fieldId, value) {
31468
- if (['type', 'naturalAnalogue'].includes(fieldId)) {
31469
- setModificationTypes([]);
31470
- }
31471
- if (fieldId === 'type') {
31472
- if ((type === 'rnaPreset' || value === 'rnaPreset') && type !== value) {
31473
- wizardStateDispatch({
31474
- type: 'ResetWizard'
31475
- });
31476
- rnaPresetWizardStateDispatch({
31477
- type: 'ResetWizard'
31478
- });
31479
- } else {
31480
- wizardStateDispatch({
31481
- type: 'SetFieldValue',
31482
- fieldId: 'aliasHELM',
31483
- value: ''
31484
- });
32072
+ React.useEffect(function () {
32073
+ var isValidRnaComponentKey = function isValidRnaComponentKey(key) {
32074
+ return key === 'base' || key === 'sugar' || key === 'phosphate';
32075
+ };
32076
+ var componentStructureUpdateHandler = function componentStructureUpdateHandler(event) {
32077
+ var updateData = event.detail;
32078
+ var componentKey = updateData.componentKey,
32079
+ atomIds = updateData.atomIds,
32080
+ bondIds = updateData.bondIds;
32081
+ if (!isValidRnaComponentKey(componentKey)) {
32082
+ return;
31485
32083
  }
32084
+ rnaPresetWizardStateDispatch({
32085
+ type: 'UpdateRnaPresetComponentStructure',
32086
+ rnaComponentKey: componentKey,
32087
+ atomIds: atomIds,
32088
+ bondIds: bondIds
32089
+ });
32090
+ };
32091
+ window.addEventListener(ketcherCore.MonomerCreationComponentStructureUpdateEvent, componentStructureUpdateHandler);
32092
+ return function () {
32093
+ window.removeEventListener(ketcherCore.MonomerCreationComponentStructureUpdateEvent, componentStructureUpdateHandler);
32094
+ };
32095
+ }, []);
32096
+ var applyTypeChange = function applyTypeChange(newType) {
32097
+ setModificationTypes([]);
32098
+ if ((type === 'rnaPreset' || newType === 'rnaPreset') && type !== newType) {
32099
+ wizardStateDispatch({
32100
+ type: 'ResetWizard'
32101
+ });
32102
+ rnaPresetWizardStateDispatch({
32103
+ type: 'ResetWizard'
32104
+ });
32105
+ } else {
31486
32106
  wizardStateDispatch({
31487
32107
  type: 'SetFieldValue',
31488
- fieldId: 'type',
31489
- value: value
32108
+ fieldId: 'aliasHELM',
32109
+ value: ''
31490
32110
  });
32111
+ }
32112
+ wizardStateDispatch({
32113
+ type: 'SetFieldValue',
32114
+ fieldId: 'type',
32115
+ value: newType
32116
+ });
32117
+ };
32118
+ var handleFieldChange = function handleFieldChange(fieldId, value) {
32119
+ if (fieldId === 'type') {
32120
+ if (type === 'rnaPreset' && value !== 'rnaPreset') {
32121
+ setPendingType(value);
32122
+ setShowTypeChangeDialog(true);
32123
+ return;
32124
+ }
32125
+ applyTypeChange(value);
31491
32126
  } else {
32127
+ if (fieldId === 'naturalAnalogue') {
32128
+ setModificationTypes([]);
32129
+ }
31492
32130
  wizardStateDispatch({
31493
32131
  type: 'SetFieldValue',
31494
32132
  fieldId: fieldId,
31495
32133
  value: value
31496
32134
  });
31497
32135
  }
32136
+ editor.setRnaMonomerCreationMode(value === 'rnaPreset');
31498
32137
  };
31499
32138
  React.useEffect(function () {
31500
32139
  var _editor$setMonomerCre;
@@ -31849,14 +32488,18 @@ var MonomerCreationWizard = function MonomerCreationWizard() {
31849
32488
  });
31850
32489
  var bondBetweenSugarAndBase = _toConsumableArray__default["default"](bondsBetweenSugarAndBase.values())[0];
31851
32490
  var bondBetweenSugarAndPhosphate = _toConsumableArray__default["default"](bondsBetweenSugarAndPhosphate.values())[0];
31852
- var sugarR3AttachmentPointAtom = sugarStructure !== null && sugarStructure !== void 0 && (_sugarStructure$atoms5 = sugarStructure.atoms) !== null && _sugarStructure$atoms5 !== void 0 && _sugarStructure$atoms5.includes(bondBetweenSugarAndBase.begin) ? bondBetweenSugarAndBase.begin : bondBetweenSugarAndBase.end;
31853
- var sugarR2AttachmentPointAtom = sugarStructure !== null && sugarStructure !== void 0 && (_sugarStructure$atoms6 = sugarStructure.atoms) !== null && _sugarStructure$atoms6 !== void 0 && _sugarStructure$atoms6.includes(bondBetweenSugarAndPhosphate.begin) ? bondBetweenSugarAndPhosphate.begin : bondBetweenSugarAndPhosphate.end;
31854
- var baseR1AttachmentPointAtom = baseStructure !== null && baseStructure !== void 0 && (_baseStructure$atoms3 = baseStructure.atoms) !== null && _baseStructure$atoms3 !== void 0 && _baseStructure$atoms3.includes(bondBetweenSugarAndBase.begin) ? bondBetweenSugarAndBase.begin : bondBetweenSugarAndBase.end;
31855
- var phosphateR1AttachmentPointAtom = phosphateStructure !== null && phosphateStructure !== void 0 && (_phosphateStructure$a3 = phosphateStructure.atoms) !== null && _phosphateStructure$a3 !== void 0 && _phosphateStructure$a3.includes(bondBetweenSugarAndPhosphate.begin) ? bondBetweenSugarAndPhosphate.begin : bondBetweenSugarAndPhosphate.end;
31856
- editor.assignConnectionPointAtom(baseR1AttachmentPointAtom, ketcherCore.AttachmentPointName.R1, assignedAttachmentPointsByMonomer.get(rnaPresetWizardState.base), rnaPresetWizardState.base.structure, true, getLeavingAtomForAttachmentPoint(ketcherCore.KetMonomerClass.Base, ketcherCore.AttachmentPointName.R1));
31857
- editor.assignConnectionPointAtom(sugarR2AttachmentPointAtom, ketcherCore.AttachmentPointName.R2, assignedAttachmentPointsByMonomer.get(rnaPresetWizardState.sugar), rnaPresetWizardState.sugar.structure, true, getLeavingAtomForAttachmentPoint(ketcherCore.KetMonomerClass.Sugar, ketcherCore.AttachmentPointName.R2));
31858
- editor.assignConnectionPointAtom(sugarR3AttachmentPointAtom, ketcherCore.AttachmentPointName.R3, assignedAttachmentPointsByMonomer.get(rnaPresetWizardState.sugar), rnaPresetWizardState.sugar.structure, true, getLeavingAtomForAttachmentPoint(ketcherCore.KetMonomerClass.Sugar, ketcherCore.AttachmentPointName.R3));
31859
- editor.assignConnectionPointAtom(phosphateR1AttachmentPointAtom, ketcherCore.AttachmentPointName.R1, assignedAttachmentPointsByMonomer.get(rnaPresetWizardState.phosphate), rnaPresetWizardState.phosphate.structure, true, getLeavingAtomForAttachmentPoint(ketcherCore.KetMonomerClass.Phosphate, ketcherCore.AttachmentPointName.R1));
32491
+ var sugarR3AttachmentPointAtomId = sugarStructure !== null && sugarStructure !== void 0 && (_sugarStructure$atoms5 = sugarStructure.atoms) !== null && _sugarStructure$atoms5 !== void 0 && _sugarStructure$atoms5.includes(bondBetweenSugarAndBase.begin) ? bondBetweenSugarAndBase.begin : bondBetweenSugarAndBase.end;
32492
+ var sugarR3AttachmentAtom = struct.atoms.get(sugarR3AttachmentPointAtomId);
32493
+ var sugarR2AttachmentPointAtomId = sugarStructure !== null && sugarStructure !== void 0 && (_sugarStructure$atoms6 = sugarStructure.atoms) !== null && _sugarStructure$atoms6 !== void 0 && _sugarStructure$atoms6.includes(bondBetweenSugarAndPhosphate.begin) ? bondBetweenSugarAndPhosphate.begin : bondBetweenSugarAndPhosphate.end;
32494
+ var sugarR2AttachmentAtom = struct.atoms.get(sugarR2AttachmentPointAtomId);
32495
+ var baseR1AttachmentPointAtomId = baseStructure !== null && baseStructure !== void 0 && (_baseStructure$atoms3 = baseStructure.atoms) !== null && _baseStructure$atoms3 !== void 0 && _baseStructure$atoms3.includes(bondBetweenSugarAndBase.begin) ? bondBetweenSugarAndBase.begin : bondBetweenSugarAndBase.end;
32496
+ var baseR1AttachmentAtom = struct.atoms.get(baseR1AttachmentPointAtomId);
32497
+ var phosphateR1AttachmentPointAtomId = phosphateStructure !== null && phosphateStructure !== void 0 && (_phosphateStructure$a3 = phosphateStructure.atoms) !== null && _phosphateStructure$a3 !== void 0 && _phosphateStructure$a3.includes(bondBetweenSugarAndPhosphate.begin) ? bondBetweenSugarAndPhosphate.begin : bondBetweenSugarAndPhosphate.end;
32498
+ var phosphateR1AttachmentAtom = struct.atoms.get(phosphateR1AttachmentPointAtomId);
32499
+ editor.assignConnectionPointAtom(baseR1AttachmentPointAtomId, ketcherCore.AttachmentPointName.R1, assignedAttachmentPointsByMonomer.get(rnaPresetWizardState.base), rnaPresetWizardState.base.structure, true, getLeavingAtomForAttachmentPoint(ketcherCore.KetMonomerClass.Base, ketcherCore.AttachmentPointName.R1), sugarR3AttachmentAtom === null || sugarR3AttachmentAtom === void 0 ? void 0 : sugarR3AttachmentAtom.pp);
32500
+ editor.assignConnectionPointAtom(sugarR2AttachmentPointAtomId, ketcherCore.AttachmentPointName.R2, assignedAttachmentPointsByMonomer.get(rnaPresetWizardState.sugar), rnaPresetWizardState.sugar.structure, true, getLeavingAtomForAttachmentPoint(ketcherCore.KetMonomerClass.Sugar, ketcherCore.AttachmentPointName.R2), phosphateR1AttachmentAtom === null || phosphateR1AttachmentAtom === void 0 ? void 0 : phosphateR1AttachmentAtom.pp);
32501
+ editor.assignConnectionPointAtom(sugarR3AttachmentPointAtomId, ketcherCore.AttachmentPointName.R3, assignedAttachmentPointsByMonomer.get(rnaPresetWizardState.sugar), rnaPresetWizardState.sugar.structure, true, getLeavingAtomForAttachmentPoint(ketcherCore.KetMonomerClass.Sugar, ketcherCore.AttachmentPointName.R3), baseR1AttachmentAtom === null || baseR1AttachmentAtom === void 0 ? void 0 : baseR1AttachmentAtom.pp);
32502
+ editor.assignConnectionPointAtom(phosphateR1AttachmentPointAtomId, ketcherCore.AttachmentPointName.R1, assignedAttachmentPointsByMonomer.get(rnaPresetWizardState.phosphate), rnaPresetWizardState.phosphate.structure, true, getLeavingAtomForAttachmentPoint(ketcherCore.KetMonomerClass.Phosphate, ketcherCore.AttachmentPointName.R1), sugarR2AttachmentAtom === null || sugarR2AttachmentAtom === void 0 ? void 0 : sugarR2AttachmentAtom.pp);
31860
32503
  }
31861
32504
  monomersToSave.forEach(function (monomerToSave) {
31862
32505
  var atomIdMap = new Map();
@@ -31874,7 +32517,7 @@ var MonomerCreationWizard = function MonomerCreationWizard() {
31874
32517
  }
31875
32518
  monomerAssignedAttachmentPoints.set(attachmentPointKey, [mappedAttachmentAtomId, mappedLeavingGroupAtomId]);
31876
32519
  });
31877
- var shouldBeHidden = isRnaPresetType && !hasAllMandatoryPropertiesFilled(monomerToSave.values);
32520
+ var shouldBeHidden = isRnaPresetType;
31878
32521
  var valuesToSave = monomerToSave.values;
31879
32522
  if (shouldBeHidden) {
31880
32523
  valuesToSave = autoAssignPropertiesForHiddenMonomer(monomerToSave.values, rnaPresetWizardState.preset.name);
@@ -31898,6 +32541,7 @@ var MonomerCreationWizard = function MonomerCreationWizard() {
31898
32541
  editor.finishNewMonomersCreation(monomersData, rnaPresetWizardState.preset.name);
31899
32542
  dispatch(onAction(selectRectangleAction));
31900
32543
  resetWizard();
32544
+ dispatch(showSnackbarNotification(isRnaPresetType ? NotificationMessages.creationRNASuccessful : NotificationMessages.creationSuccessful));
31901
32545
  }
31902
32546
  };
31903
32547
  var ketcherEditorRootElement = document.querySelector(KETCHER_ROOT_NODE_CSS_SELECTOR);
@@ -31986,7 +32630,40 @@ var MonomerCreationWizard = function MonomerCreationWizard() {
31986
32630
  children: "Submit"
31987
32631
  })]
31988
32632
  })]
31989
- }), leavingGroupDialogMessage && ketcherEditorRootElement && ReactDOM.createPortal(jsxRuntime.jsx("div", {
32633
+ }), showTypeChangeDialog && ketcherEditorRootElement && ReactDOM.createPortal(jsxRuntime.jsx("div", {
32634
+ className: styles$o.dialogOverlay,
32635
+ children: jsxRuntime.jsx(Dialog, {
32636
+ className: styles$o.smallDialog,
32637
+ title: "Confirm type change",
32638
+ withDivider: true,
32639
+ valid: function valid() {
32640
+ return true;
32641
+ },
32642
+ params: {
32643
+ onOk: function onOk() {
32644
+ if (pendingType !== null) {
32645
+ applyTypeChange(pendingType);
32646
+ }
32647
+ setPendingType(null);
32648
+ setShowTypeChangeDialog(false);
32649
+ },
32650
+ onCancel: function onCancel() {
32651
+ setPendingType(null);
32652
+ setShowTypeChangeDialog(false);
32653
+ }
32654
+ },
32655
+ buttons: ['OK', 'Cancel'],
32656
+ buttonsNameMap: {
32657
+ OK: 'Yes',
32658
+ Cancel: 'Cancel'
32659
+ },
32660
+ primaryButtons: ['Cancel'],
32661
+ children: jsxRuntime.jsx("div", {
32662
+ className: styles$o.DialogMessage,
32663
+ children: "Changing the type will result in a loss of inputted data. Do you wish to proceed?"
32664
+ })
32665
+ })
32666
+ }), ketcherEditorRootElement), leavingGroupDialogMessage && ketcherEditorRootElement && ReactDOM.createPortal(jsxRuntime.jsx("div", {
31990
32667
  className: styles$o.dialogOverlay,
31991
32668
  children: jsxRuntime.jsx(Dialog, {
31992
32669
  className: styles$o.smallDialog,
@@ -39764,7 +40441,7 @@ var Editor$1 = reactRedux.connect(function (state) {
39764
40441
  };
39765
40442
  }, mapDispatchToProps$1)(StructEditor);
39766
40443
 
39767
- var classes$1 = {"app":"App-module_app__8cgyF","canvas":"App-module_canvas__taJxn","top":"App-module_top__SBeSV","left":"App-module_left__2iz-i","right":"App-module_right__U7A5Q","bottom":"App-module_bottom__tQA2B"};
40444
+ var classes$1 = {"app":"App-module_app__8cgyF","canvas":"App-module_canvas__taJxn","top":"App-module_top__SBeSV","left":"App-module_left__2iz-i","right":"App-module_right__U7A5Q","bottom":"App-module_bottom__tQA2B","toastNotification":"App-module_toastNotification__o-bVV","toastNotificationText":"App-module_toastNotificationText__RXYHk","toastNotificationCloseIcon":"App-module_toastNotificationCloseIcon__REXMP"};
39768
40445
 
39769
40446
  var classes = {"lookupContainer":"AbbreviationLookup-module_lookupContainer__-JRMj","inputContainer":"AbbreviationLookup-module_inputContainer__6tJpn","input":"AbbreviationLookup-module_input__vCxY9","searchIcon":"AbbreviationLookup-module_searchIcon__DiK0c","optionItemContent":"AbbreviationLookup-module_optionItemContent__L1JlW","optionItem":"AbbreviationLookup-module_optionItem__dAhO-","noOptions":"AbbreviationLookup-module_noOptions__yKxml","listBox":"AbbreviationLookup-module_listBox__Y50AT"};
39770
40447
 
@@ -40064,10 +40741,16 @@ var muiTheme = material.createTheme({
40064
40741
  var App = function App(props) {
40065
40742
  var dispatch = useAppDispatch();
40066
40743
  var checkServer = props.checkServer;
40744
+ var snackbarNotificationText = reactRedux.useSelector(selectSnackbarNotificationText);
40067
40745
  useSubscriptionOnEvents();
40068
40746
  var _useAppContext = useAppContext(),
40069
40747
  ketcherId = _useAppContext.ketcherId,
40070
40748
  prevKetcherId = _useAppContext.prevKetcherId;
40749
+ var handleCloseSnackbarNotification = React.useCallback(function () {
40750
+ dispatch({
40751
+ type: 'HIDE_SNACKBAR_NOTIFICATION'
40752
+ });
40753
+ }, [dispatch]);
40071
40754
  React.useEffect(function () {
40072
40755
  checkServer();
40073
40756
  dispatch(initFGTemplates());
@@ -40100,7 +40783,26 @@ var App = function App(props) {
40100
40783
  }),
40101
40784
  jsxRuntime.jsx(AppClipArea, {}), jsxRuntime.jsx(ModalContainer, {
40102
40785
  ketcherId: ketcherId
40103
- }), jsxRuntime.jsx(AbbreviationLookupContainer, {})]
40786
+ }), jsxRuntime.jsx(AbbreviationLookupContainer, {}), jsxRuntime.jsx(material.Snackbar, {
40787
+ anchorOrigin: {
40788
+ vertical: 'bottom',
40789
+ horizontal: 'center'
40790
+ },
40791
+ open: Boolean(snackbarNotificationText),
40792
+ onClose: handleCloseSnackbarNotification,
40793
+ autoHideDuration: 6000,
40794
+ children: jsxRuntime.jsxs("div", {
40795
+ className: classes$1.toastNotification,
40796
+ children: [jsxRuntime.jsx("div", {
40797
+ className: classes$1.toastNotificationText,
40798
+ children: snackbarNotificationText
40799
+ }), jsxRuntime.jsx(IconButton, {
40800
+ iconName: "close",
40801
+ className: classes$1.toastNotificationCloseIcon,
40802
+ onClick: handleCloseSnackbarNotification
40803
+ })]
40804
+ })
40805
+ })]
40104
40806
  })
40105
40807
  });
40106
40808
  };
@@ -40279,8 +40981,8 @@ var KetcherBuilder = function () {
40279
40981
  cleanup = initApp(prevKetcherId, ketcherId, element, appRoot, staticResourcesUrl, {
40280
40982
  buttons: buttons || {},
40281
40983
  errorHandler: errorHandler || null,
40282
- version: "3.12.0-dev.1" ,
40283
- buildDate: "2025-12-18T12:54:05" ,
40984
+ version: "3.12.0-rc.2" ,
40985
+ buildDate: "2026-01-27T21:17:45" ,
40284
40986
  buildNumber: '',
40285
40987
  customButtons: customButtons || []
40286
40988
  }, structService, resolve, togglerComponent);
@@ -40581,7 +41283,7 @@ var ModeControl = function ModeControl(_ref3) {
40581
41283
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
40582
41284
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
40583
41285
  var MacromoleculesEditorComponent = React.lazy(function () {
40584
- return Promise.resolve().then(function () { return require('./index.modern-b232add2.js'); });
41286
+ return Promise.resolve().then(function () { return require('./index.modern-0386b391.js'); });
40585
41287
  });
40586
41288
  var Editor = function Editor(props) {
40587
41289
  var _useState = React.useState(false),