@Override
  public void loadState(final @NotNull Element element) {
    Element internalElement = element.getChild(INTERNAL);
    internal = internalElement != null && Boolean.parseBoolean(internalElement.getValue());

    lastModifications.clear();
    for (Element update : element.getChildren(MODIFY)) {
      final String recorder = update.getAttributeValue(RECORDER_ID);
      if (StringUtil.isNotEmpty(recorder)) {
        final long lastUpdate = parseLastUpdate(update);
        lastModifications.put(recorder, lastUpdate);
      }
    }

    recorderToPathSettings.clear();
    for (Element path : element.getChildren(PATH)) {
      final String recorder = path.getAttributeValue(RECORDER_ID);
      if (StringUtil.isNotEmpty(recorder)) {
        String customPath = path.getAttributeValue(CUSTOM_PATH);
        if (customPath == null) continue;
        boolean useCustomPath = parseUseCustomPath(path);
        recorderToPathSettings.put(recorder, new EventsSchemePathSettings(customPath, useCustomPath));
      }
    }

    synchronized (optionsLock) {
      options.clear();
      for (Element options : element.getChildren(OPTIONS)) {
        String recorderId = options.getAttributeValue(RECORDER_ID);
        if (recorderId != null) {
          this.options.put(recorderId, new EventLogExternalOptions().deserialize(options));
        }
      }
    }
  }
@Override
  public void loadState(final @NotNull Element element)