Program: 12552
Project: 12552
Buggy source:
private static void read(SBOLDocument doc,InputStream in) throws IOException, SBOLConversionException, SBOLValidationException {
  so=new SequenceOntology();
  nextLine=null;
  featureMode=false;
  originMode=false;
  lineCounter=0;
  doc.addNamespace(URI.create(GBNAMESPACE),GBPREFIX);
  BufferedReader br=new BufferedReader(new InputStreamReader(in));
  String strLine;
  String id="String_Node_Str";
  String version="String_Node_Str";
  int featureCnt=0;
  int refCnt=0;
  StringBuilder sbSequence=new StringBuilder();
  String elements=null;
  String description="String_Node_Str";
  URI type=ComponentDefinition.DNA;
  ComponentDefinition topCD=null;
  List<Annotation> annotations=new ArrayList<Annotation>();
  List<Annotation> nestedAnnotations=null;
  Annotation annotation=null;
  while ((strLine=readGenBankLine(br)) != null) {
    strLine=strLine.trim();
    if (strLine.startsWith("String_Node_Str")) {
      String[] strSplit=strLine.split("String_Node_Str");
      id=strSplit[1];
      annotation=new Annotation(new QName(GBNAMESPACE,LOCUS,GBPREFIX),strSplit[1]);
      annotations.add(annotation);
      if (strSplit[4].toUpperCase().contains("String_Node_Str")) {
        type=ComponentDefinition.RNA;
      }
      annotation=new Annotation(new QName(GBNAMESPACE,MOLECULE,GBPREFIX),strSplit[4]);
      annotations.add(annotation);
      for (int i=5; i < strSplit.length; i++) {
        if (strSplit[i].startsWith("String_Node_Str") || strSplit[i].startsWith("String_Node_Str")) {
          annotation=new Annotation(new QName(GBNAMESPACE,TOPOLOGY,GBPREFIX),strSplit[i]);
        }
 else         if (strSplit[i].length() == 3) {
          annotation=new Annotation(new QName(GBNAMESPACE,DIVISION,GBPREFIX),strSplit[i]);
        }
 else {
          annotation=new Annotation(new QName(GBNAMESPACE,DATE,GBPREFIX),strSplit[i]);
        }
        annotations.add(annotation);
      }
    }
 else     if (strLine.startsWith("String_Node_Str")) {
      description=strLine.replaceFirst("String_Node_Str","String_Node_Str");
    }
 else     if (strLine.startsWith("String_Node_Str")) {
      String[] strSplit=strLine.split("String_Node_Str");
      String accession=strSplit[1];
      id=accession;
    }
 else     if (strLine.startsWith("String_Node_Str")) {
      String[] strSplit=strLine.split("String_Node_Str");
      version=strSplit[1].split("String_Node_Str")[1];
      if (!id.equals(strSplit[1].split("String_Node_Str")[0])) {
        throw new SBOLConversionException("String_Node_Str");
      }
      if (strSplit.length > 2) {
        annotation=new Annotation(new QName(GBNAMESPACE,GINUMBER,GBPREFIX),strSplit[2]);
        annotations.add(annotation);
      }
    }
 else     if (strLine.startsWith("String_Node_Str")) {
      String annotationStr=strLine.replace("String_Node_Str","String_Node_Str").trim();
      annotation=new Annotation(new QName(GBNAMESPACE,KEYWORDS,GBPREFIX),annotationStr);
      annotations.add(annotation);
    }
 else     if (strLine.startsWith("String_Node_Str")) {
      String annotationStr=strLine.replace("String_Node_Str","String_Node_Str").trim();
      annotation=new Annotation(new QName(GBNAMESPACE,SOURCE,GBPREFIX),annotationStr);
      annotations.add(annotation);
    }
 else     if (strLine.startsWith("String_Node_Str")) {
      String annotationStr=strLine.replace("String_Node_Str","String_Node_Str").trim();
      annotation=new Annotation(new QName(GBNAMESPACE,ORGANISM,GBPREFIX),annotationStr);
      annotations.add(annotation);
    }
 else     if (strLine.startsWith("String_Node_Str")) {
      String annotationStr=strLine.replace("String_Node_Str","String_Node_Str").trim();
      nestedAnnotations=new ArrayList<Annotation>();
      Annotation labelAnnotation=new Annotation(new QName(GBNAMESPACE,LABEL,GBPREFIX),annotationStr);
      nestedAnnotations.add(labelAnnotation);
      URI nestedURI=URI.create(URIPrefix + "String_Node_Str" + id+ "String_Node_Str"+ refCnt);
      refCnt++;
      annotation=new Annotation(new QName(GBNAMESPACE,REFERENCE,GBPREFIX),new QName(GBNAMESPACE,NESTEDREFERENCE,GBPREFIX),nestedURI,nestedAnnotations);
      annotations.add(annotation);
    }
 else     if (strLine.startsWith("String_Node_Str")) {
      String annotationStr=strLine.replace("String_Node_Str","String_Node_Str").trim();
      Annotation nestedAnnotation=new Annotation(new QName(GBNAMESPACE,AUTHORS,GBPREFIX),annotationStr);
      nestedAnnotations.add(nestedAnnotation);
      annotation.setNestedAnnotations(nestedAnnotations);
    }
 else     if (strLine.startsWith("String_Node_Str")) {
      String annotationStr=strLine.replace("String_Node_Str","String_Node_Str").trim();
      Annotation nestedAnnotation=new Annotation(new QName(GBNAMESPACE,TITLE,GBPREFIX),annotationStr);
      nestedAnnotations.add(nestedAnnotation);
      annotation.setNestedAnnotations(nestedAnnotations);
    }
 else     if (strLine.startsWith("String_Node_Str")) {
      String annotationStr=strLine.replace("String_Node_Str","String_Node_Str").trim();
      Annotation nestedAnnotation=new Annotation(new QName(GBNAMESPACE,JOURNAL,GBPREFIX),annotationStr);
      nestedAnnotations.add(nestedAnnotation);
      annotation.setNestedAnnotations(nestedAnnotations);
    }
 else     if (strLine.startsWith("String_Node_Str")) {
      String annotationStr=strLine.replace("String_Node_Str","String_Node_Str").trim();
      Annotation nestedAnnotation=new Annotation(new QName(GBNAMESPACE,MEDLINE,GBPREFIX),annotationStr);
      nestedAnnotations.add(nestedAnnotation);
      annotation.setNestedAnnotations(nestedAnnotations);
    }
 else     if (strLine.startsWith("String_Node_Str")) {
      String annotationStr=strLine.replace("String_Node_Str","String_Node_Str").trim();
      Annotation nestedAnnotation=new Annotation(new QName(GBNAMESPACE,PUBMED,GBPREFIX),annotationStr);
      nestedAnnotations.add(nestedAnnotation);
      annotation.setNestedAnnotations(nestedAnnotations);
    }
 else     if (strLine.startsWith("String_Node_Str")) {
      String annotationStr=strLine.replace("String_Node_Str","String_Node_Str").trim();
      annotation=new Annotation(new QName(GBNAMESPACE,COMMENT,GBPREFIX),annotationStr);
      annotations.add(annotation);
    }
 else     if (strLine.startsWith("String_Node_Str")) {
      String annotationStr=strLine.replace("String_Node_Str","String_Node_Str").trim();
      annotation=new Annotation(new QName(GBNAMESPACE,BASECOUNT,GBPREFIX),annotationStr);
      annotations.add(annotation);
    }
 else     if (strLine.startsWith("String_Node_Str")) {
      topCD=doc.createComponentDefinition(id,version,type);
      topCD.addRole(SequenceOntology.ENGINEERED_REGION);
      if (!"String_Node_Str".equals(description)) {
        topCD.setDescription(description);
      }
      topCD.setAnnotations(annotations);
      featureMode=true;
    }
 else     if (strLine.startsWith("String_Node_Str")) {
      originMode=true;
      featureMode=false;
    }
 else {
      if (featureMode) {
        if (strLine.startsWith("String_Node_Str")) {
          String tag=strLine.replace("String_Node_Str","String_Node_Str").trim();
          String value="String_Node_Str";
          if ((-1) != strLine.indexOf('=')) {
            String[] splitStr=strLine.split("String_Node_Str");
            tag=splitStr[0].replace("String_Node_Str","String_Node_Str");
            value=splitStr[1];
          }
          StringBuilder sbValue=new StringBuilder();
          sbValue.append(value);
          if (value.startsWith("String_Node_Str") && !value.endsWith("String_Node_Str")) {
            while (true) {
              strLine=readGenBankLine(br).trim();
              sbValue.append(strLine);
              if (strLine.endsWith("String_Node_Str")) {
                break;
              }
            }
          }
          SequenceAnnotation sa=topCD.getSequenceAnnotation("String_Node_Str" + (featureCnt - 1));
          if (null != sa) {
            annotation=new Annotation(new QName(GBNAMESPACE,tag,GBPREFIX),value);
            sa.addAnnotation(annotation);
          }
        }
 else {
          strLine=strLine.replace("String_Node_Str","String_Node_Str");
          String[] strSplit=strLine.split("String_Node_Str");
          URI role=convertGenBanktoSO(strSplit[0]);
          ComponentDefinition feature=doc.createComponentDefinition("String_Node_Str" + featureCnt,version,type);
          feature.addRole(role);
          String range=strSplit[1];
          OrientationType orientation=OrientationType.INLINE;
          if (range.startsWith("String_Node_Str")) {
            orientation=OrientationType.REVERSECOMPLEMENT;
            range=range.replace("String_Node_Str","String_Node_Str").replace("String_Node_Str","String_Node_Str");
          }
          if (range.startsWith("String_Node_Str") || range.startsWith("String_Node_Str")) {
            String multiType="String_Node_Str";
            if (range.startsWith("String_Node_Str")) {
              multiType="String_Node_Str";
            }
            range=range.replace("String_Node_Str","String_Node_Str").replace("String_Node_Str","String_Node_Str");
            range=range.replace("String_Node_Str","String_Node_Str").replace("String_Node_Str","String_Node_Str");
            String[] ranges=range.split("String_Node_Str");
            int rangeCnt=0;
            SequenceAnnotation sa=null;
            for (            String r : ranges) {
              if (r.startsWith("String_Node_Str")) {
                orientation=OrientationType.REVERSECOMPLEMENT;
                r=r.replace("String_Node_Str","String_Node_Str").replace("String_Node_Str","String_Node_Str");
              }
              boolean startLessThan=false;
              boolean endGreaterThan=false;
              if (r.contains("String_Node_Str")) {
                startLessThan=true;
                r=r.replace("String_Node_Str","String_Node_Str");
              }
              if (r.contains("String_Node_Str")) {
                endGreaterThan=true;
                r=r.replace("String_Node_Str","String_Node_Str");
              }
              boolean singleBaseRange=false;
              String[] rangeSplit=null;
              if (range.contains("String_Node_Str") && !range.contains("String_Node_Str")) {
                rangeSplit=r.split("String_Node_Str");
                singleBaseRange=true;
              }
 else {
                rangeSplit=r.split("String_Node_Str");
              }
              int start=Integer.parseInt(rangeSplit[0]);
              int end=Integer.parseInt(rangeSplit[1]);
              if (rangeCnt == 0) {
                sa=topCD.createSequenceAnnotation("String_Node_Str" + featureCnt,"String_Node_Str" + rangeCnt,start,end,orientation);
                sa.setComponent("String_Node_Str" + featureCnt);
                annotation=new Annotation(new QName(GBNAMESPACE,MULTIRANGETYPE,GBPREFIX),multiType);
                sa.addAnnotation(annotation);
              }
 else               if (sa != null) {
                Range newRange=sa.addRange("String_Node_Str" + rangeCnt,start,end,orientation);
                if (startLessThan) {
                  annotation=new Annotation(new QName(GBNAMESPACE,STARTLESSTHAN,GBPREFIX),"String_Node_Str");
                  newRange.addAnnotation(annotation);
                }
                if (endGreaterThan) {
                  annotation=new Annotation(new QName(GBNAMESPACE,ENDGREATERTHAN,GBPREFIX),"String_Node_Str");
                  newRange.addAnnotation(annotation);
                }
                if (singleBaseRange) {
                  annotation=new Annotation(new QName(GBNAMESPACE,SINGLEBASERANGE,GBPREFIX),"String_Node_Str");
                  newRange.addAnnotation(annotation);
                }
              }
              rangeCnt++;
            }
          }
 else           if (range.contains("String_Node_Str")) {
            String[] rangeSplit=range.split("String_Node_Str");
            int at=Integer.parseInt(rangeSplit[0]);
            SequenceAnnotation sa=topCD.createSequenceAnnotation("String_Node_Str" + featureCnt,"String_Node_Str",at,orientation);
            sa.setComponent("String_Node_Str" + featureCnt);
          }
 else {
            boolean startLessThan=false;
            boolean endGreaterThan=false;
            if (range.contains("String_Node_Str")) {
              startLessThan=true;
              range=range.replace("String_Node_Str","String_Node_Str");
            }
            if (range.contains("String_Node_Str")) {
              endGreaterThan=true;
              range=range.replace("String_Node_Str","String_Node_Str");
            }
            boolean singleBaseRange=false;
            String[] rangeSplit=null;
            if (range.contains("String_Node_Str") && !range.contains("String_Node_Str")) {
              rangeSplit=range.split("String_Node_Str");
              singleBaseRange=true;
            }
 else {
              rangeSplit=range.split("String_Node_Str");
            }
            try {
              int start=Integer.parseInt(rangeSplit[0]);
              int end=Integer.parseInt(rangeSplit[1]);
              if (start > end) {
                int temp=start;
                start=end;
                end=temp;
              }
              SequenceAnnotation sa=topCD.createSequenceAnnotation("String_Node_Str" + featureCnt,"String_Node_Str",start,end,orientation);
              sa.setComponent("String_Node_Str" + featureCnt);
              Range newRange=(Range)sa.getLocation("String_Node_Str");
              if (startLessThan) {
                annotation=new Annotation(new QName(GBNAMESPACE,STARTLESSTHAN,GBPREFIX),"String_Node_Str");
                newRange.addAnnotation(annotation);
              }
              if (endGreaterThan) {
                annotation=new Annotation(new QName(GBNAMESPACE,ENDGREATERTHAN,GBPREFIX),"String_Node_Str");
                newRange.addAnnotation(annotation);
              }
              if (singleBaseRange) {
                annotation=new Annotation(new QName(GBNAMESPACE,SINGLEBASERANGE,GBPREFIX),"String_Node_Str");
                newRange.addAnnotation(annotation);
              }
            }
 catch (            Exception e) {
              System.out.println(lineCounter + "String_Node_Str" + strLine);
            }
          }
          featureCnt++;
        }
      }
 else       if (originMode) {
        if (elements == null) {
          elements=new String("String_Node_Str");
        }
        String[] strSplit=strLine.split("String_Node_Str");
        for (int i=1; i < strSplit.length; i++) {
          sbSequence.append(strSplit[i]);
        }
      }
    }
  }
  Sequence sequence=doc.createSequence(id + "String_Node_Str",version,sbSequence.toString(),Sequence.IUPAC_DNA);
  topCD.addSequence(sequence);
  createSubComponentDefinitions(doc,topCD,type,sbSequence.toString(),version);
  br.close();
}

Fixed version (ground truth):
private static void read(SBOLDocument doc,InputStream in) throws IOException, SBOLConversionException, SBOLValidationException {
  so=new SequenceOntology();
  nextLine=null;
  featureMode=false;
  originMode=false;
  lineCounter=0;
  doc.addNamespace(URI.create(GBNAMESPACE),GBPREFIX);
  BufferedReader br=new BufferedReader(new InputStreamReader(in));
  String strLine;
  String id="String_Node_Str";
  String version="String_Node_Str";
  int featureCnt=0;
  int refCnt=0;
  StringBuilder sbSequence=new StringBuilder();
  String elements=null;
  String description="String_Node_Str";
  URI type=ComponentDefinition.DNA;
  ComponentDefinition topCD=null;
  List<Annotation> annotations=new ArrayList<Annotation>();
  List<Annotation> nestedAnnotations=null;
  Annotation annotation=null;
  while ((strLine=readGenBankLine(br)) != null) {
    strLine=strLine.trim();
    if (strLine.startsWith("String_Node_Str")) {
      String[] strSplit=strLine.split("String_Node_Str");
      id=strSplit[1];
      annotation=new Annotation(new QName(GBNAMESPACE,LOCUS,GBPREFIX),strSplit[1]);
      annotations.add(annotation);
      if (strSplit[4].toUpperCase().contains("String_Node_Str")) {
        type=ComponentDefinition.RNA;
      }
      annotation=new Annotation(new QName(GBNAMESPACE,MOLECULE,GBPREFIX),strSplit[4]);
      annotations.add(annotation);
      for (int i=5; i < strSplit.length; i++) {
        if (strSplit[i].startsWith("String_Node_Str") || strSplit[i].startsWith("String_Node_Str")) {
          annotation=new Annotation(new QName(GBNAMESPACE,TOPOLOGY,GBPREFIX),strSplit[i]);
        }
 else         if (strSplit[i].length() == 3) {
          annotation=new Annotation(new QName(GBNAMESPACE,DIVISION,GBPREFIX),strSplit[i]);
        }
 else {
          annotation=new Annotation(new QName(GBNAMESPACE,DATE,GBPREFIX),strSplit[i]);
        }
        annotations.add(annotation);
      }
    }
 else     if (strLine.startsWith("String_Node_Str")) {
      description=strLine.replaceFirst("String_Node_Str","String_Node_Str");
    }
 else     if (strLine.startsWith("String_Node_Str")) {
      String[] strSplit=strLine.split("String_Node_Str");
      String accession=strSplit[1];
      id=accession;
    }
 else     if (strLine.startsWith("String_Node_Str")) {
      String[] strSplit=strLine.split("String_Node_Str");
      version=strSplit[1].split("String_Node_Str")[1];
      if (!id.equals(strSplit[1].split("String_Node_Str")[0])) {
        throw new SBOLConversionException("String_Node_Str");
      }
      if (strSplit.length > 2) {
        annotation=new Annotation(new QName(GBNAMESPACE,GINUMBER,GBPREFIX),strSplit[2]);
        annotations.add(annotation);
      }
    }
 else     if (strLine.startsWith("String_Node_Str")) {
      String annotationStr=strLine.replace("String_Node_Str","String_Node_Str").trim();
      annotation=new Annotation(new QName(GBNAMESPACE,KEYWORDS,GBPREFIX),annotationStr);
      annotations.add(annotation);
    }
 else     if (strLine.startsWith("String_Node_Str")) {
      String annotationStr=strLine.replace("String_Node_Str","String_Node_Str").trim();
      annotation=new Annotation(new QName(GBNAMESPACE,SOURCE,GBPREFIX),annotationStr);
      annotations.add(annotation);
    }
 else     if (strLine.startsWith("String_Node_Str")) {
      String annotationStr=strLine.replace("String_Node_Str","String_Node_Str").trim();
      annotation=new Annotation(new QName(GBNAMESPACE,ORGANISM,GBPREFIX),annotationStr);
      annotations.add(annotation);
    }
 else     if (strLine.startsWith("String_Node_Str")) {
      String annotationStr=strLine.replace("String_Node_Str","String_Node_Str").trim();
      nestedAnnotations=new ArrayList<Annotation>();
      Annotation labelAnnotation=new Annotation(new QName(GBNAMESPACE,LABEL,GBPREFIX),annotationStr);
      nestedAnnotations.add(labelAnnotation);
      URI nestedURI=URI.create(URIPrefix + "String_Node_Str" + id+ "String_Node_Str"+ refCnt);
      refCnt++;
      annotation=new Annotation(new QName(GBNAMESPACE,REFERENCE,GBPREFIX),new QName(GBNAMESPACE,NESTEDREFERENCE,GBPREFIX),nestedURI,nestedAnnotations);
      annotations.add(annotation);
    }
 else     if (strLine.startsWith("String_Node_Str")) {
      String annotationStr=strLine.replace("String_Node_Str","String_Node_Str").trim();
      Annotation nestedAnnotation=new Annotation(new QName(GBNAMESPACE,AUTHORS,GBPREFIX),annotationStr);
      nestedAnnotations.add(nestedAnnotation);
      annotation.setNestedAnnotations(nestedAnnotations);
    }
 else     if (strLine.startsWith("String_Node_Str")) {
      String annotationStr=strLine.replace("String_Node_Str","String_Node_Str").trim();
      Annotation nestedAnnotation=new Annotation(new QName(GBNAMESPACE,TITLE,GBPREFIX),annotationStr);
      nestedAnnotations.add(nestedAnnotation);
      annotation.setNestedAnnotations(nestedAnnotations);
    }
 else     if (strLine.startsWith("String_Node_Str")) {
      String annotationStr=strLine.replace("String_Node_Str","String_Node_Str").trim();
      Annotation nestedAnnotation=new Annotation(new QName(GBNAMESPACE,JOURNAL,GBPREFIX),annotationStr);
      nestedAnnotations.add(nestedAnnotation);
      annotation.setNestedAnnotations(nestedAnnotations);
    }
 else     if (strLine.startsWith("String_Node_Str")) {
      String annotationStr=strLine.replace("String_Node_Str","String_Node_Str").trim();
      Annotation nestedAnnotation=new Annotation(new QName(GBNAMESPACE,MEDLINE,GBPREFIX),annotationStr);
      nestedAnnotations.add(nestedAnnotation);
      annotation.setNestedAnnotations(nestedAnnotations);
    }
 else     if (strLine.startsWith("String_Node_Str")) {
      String annotationStr=strLine.replace("String_Node_Str","String_Node_Str").trim();
      Annotation nestedAnnotation=new Annotation(new QName(GBNAMESPACE,PUBMED,GBPREFIX),annotationStr);
      nestedAnnotations.add(nestedAnnotation);
      annotation.setNestedAnnotations(nestedAnnotations);
    }
 else     if (strLine.startsWith("String_Node_Str")) {
      String annotationStr=strLine.replace("String_Node_Str","String_Node_Str").trim();
      annotation=new Annotation(new QName(GBNAMESPACE,COMMENT,GBPREFIX),annotationStr);
      annotations.add(annotation);
    }
 else     if (strLine.startsWith("String_Node_Str")) {
      String annotationStr=strLine.replace("String_Node_Str","String_Node_Str").trim();
      annotation=new Annotation(new QName(GBNAMESPACE,BASECOUNT,GBPREFIX),annotationStr);
      annotations.add(annotation);
    }
 else     if (strLine.startsWith("String_Node_Str")) {
      topCD=doc.createComponentDefinition(id,version,type);
      topCD.addRole(SequenceOntology.ENGINEERED_REGION);
      if (!"String_Node_Str".equals(description)) {
        topCD.setDescription(description);
      }
      topCD.setAnnotations(annotations);
      featureMode=true;
    }
 else     if (strLine.startsWith("String_Node_Str")) {
      originMode=true;
      featureMode=false;
    }
 else {
      if (featureMode) {
        if (strLine.startsWith("String_Node_Str")) {
          String tag=strLine.replace("String_Node_Str","String_Node_Str").trim();
          String value="String_Node_Str";
          if ((-1) != strLine.indexOf('=')) {
            String[] splitStr=strLine.split("String_Node_Str");
            tag=splitStr[0].replace("String_Node_Str","String_Node_Str");
            value=splitStr[1];
          }
          StringBuilder sbValue=new StringBuilder();
          sbValue.append(value);
          if (value.startsWith("String_Node_Str") && !value.endsWith("String_Node_Str")) {
            while (true) {
              strLine=readGenBankLine(br).trim();
              sbValue.append(strLine);
              if (strLine.endsWith("String_Node_Str")) {
                break;
              }
            }
          }
          SequenceAnnotation sa=topCD.getSequenceAnnotation("String_Node_Str" + (featureCnt - 1));
          if (null != sa) {
            annotation=new Annotation(new QName(GBNAMESPACE,tag,GBPREFIX),value);
            sa.addAnnotation(annotation);
          }
        }
 else {
          strLine=strLine.replace("String_Node_Str","String_Node_Str");
          String[] strSplit=strLine.split("String_Node_Str");
          URI role=convertGenBanktoSO(strSplit[0]);
          ComponentDefinition feature=doc.createComponentDefinition("String_Node_Str" + featureCnt,version,type);
          feature.addRole(role);
          String range=strSplit[1];
          OrientationType orientation=OrientationType.INLINE;
          if (range.startsWith("String_Node_Str")) {
            orientation=OrientationType.REVERSECOMPLEMENT;
            range=range.replace("String_Node_Str","String_Node_Str").replace("String_Node_Str","String_Node_Str");
          }
          if (range.startsWith("String_Node_Str") || range.startsWith("String_Node_Str")) {
            String multiType="String_Node_Str";
            if (range.startsWith("String_Node_Str")) {
              multiType="String_Node_Str";
            }
            range=range.replace("String_Node_Str","String_Node_Str").replace("String_Node_Str","String_Node_Str");
            range=range.replace("String_Node_Str","String_Node_Str").replace("String_Node_Str","String_Node_Str");
            String[] ranges=range.split("String_Node_Str");
            int rangeCnt=0;
            SequenceAnnotation sa=null;
            for (            String r : ranges) {
              orientation=OrientationType.INLINE;
              if (r.startsWith("String_Node_Str")) {
                orientation=OrientationType.REVERSECOMPLEMENT;
                r=r.replace("String_Node_Str","String_Node_Str").replace("String_Node_Str","String_Node_Str");
              }
              boolean startLessThan=false;
              boolean endGreaterThan=false;
              if (r.contains("String_Node_Str")) {
                startLessThan=true;
                r=r.replace("String_Node_Str","String_Node_Str");
              }
              if (r.contains("String_Node_Str")) {
                endGreaterThan=true;
                r=r.replace("String_Node_Str","String_Node_Str");
              }
              boolean singleBaseRange=false;
              String[] rangeSplit=null;
              if (range.contains("String_Node_Str") && !range.contains("String_Node_Str")) {
                rangeSplit=r.split("String_Node_Str");
                singleBaseRange=true;
              }
 else {
                rangeSplit=r.split("String_Node_Str");
              }
              int start=Integer.parseInt(rangeSplit[0]);
              int end=Integer.parseInt(rangeSplit[1]);
              if (rangeCnt == 0) {
                sa=topCD.createSequenceAnnotation("String_Node_Str" + featureCnt,"String_Node_Str" + rangeCnt,start,end,orientation);
                sa.setComponent("String_Node_Str" + featureCnt);
                annotation=new Annotation(new QName(GBNAMESPACE,MULTIRANGETYPE,GBPREFIX),multiType);
                sa.addAnnotation(annotation);
              }
 else               if (sa != null) {
                Range newRange=sa.addRange("String_Node_Str" + rangeCnt,start,end,orientation);
                if (startLessThan) {
                  annotation=new Annotation(new QName(GBNAMESPACE,STARTLESSTHAN,GBPREFIX),"String_Node_Str");
                  newRange.addAnnotation(annotation);
                }
                if (endGreaterThan) {
                  annotation=new Annotation(new QName(GBNAMESPACE,ENDGREATERTHAN,GBPREFIX),"String_Node_Str");
                  newRange.addAnnotation(annotation);
                }
                if (singleBaseRange) {
                  annotation=new Annotation(new QName(GBNAMESPACE,SINGLEBASERANGE,GBPREFIX),"String_Node_Str");
                  newRange.addAnnotation(annotation);
                }
              }
              rangeCnt++;
            }
          }
 else           if (range.contains("String_Node_Str")) {
            String[] rangeSplit=range.split("String_Node_Str");
            int at=Integer.parseInt(rangeSplit[0]);
            SequenceAnnotation sa=topCD.createSequenceAnnotation("String_Node_Str" + featureCnt,"String_Node_Str",at,orientation);
            sa.setComponent("String_Node_Str" + featureCnt);
          }
 else {
            boolean startLessThan=false;
            boolean endGreaterThan=false;
            if (range.contains("String_Node_Str")) {
              startLessThan=true;
              range=range.replace("String_Node_Str","String_Node_Str");
            }
            if (range.contains("String_Node_Str")) {
              endGreaterThan=true;
              range=range.replace("String_Node_Str","String_Node_Str");
            }
            boolean singleBaseRange=false;
            String[] rangeSplit=null;
            if (range.contains("String_Node_Str") && !range.contains("String_Node_Str")) {
              rangeSplit=range.split("String_Node_Str");
              singleBaseRange=true;
            }
 else {
              rangeSplit=range.split("String_Node_Str");
            }
            try {
              int start=Integer.parseInt(rangeSplit[0]);
              int end=Integer.parseInt(rangeSplit[1]);
              if (start > end) {
                int temp=start;
                start=end;
                end=temp;
              }
              SequenceAnnotation sa=topCD.createSequenceAnnotation("String_Node_Str" + featureCnt,"String_Node_Str",start,end,orientation);
              sa.setComponent("String_Node_Str" + featureCnt);
              Range newRange=(Range)sa.getLocation("String_Node_Str");
              if (startLessThan) {
                annotation=new Annotation(new QName(GBNAMESPACE,STARTLESSTHAN,GBPREFIX),"String_Node_Str");
                newRange.addAnnotation(annotation);
              }
              if (endGreaterThan) {
                annotation=new Annotation(new QName(GBNAMESPACE,ENDGREATERTHAN,GBPREFIX),"String_Node_Str");
                newRange.addAnnotation(annotation);
              }
              if (singleBaseRange) {
                annotation=new Annotation(new QName(GBNAMESPACE,SINGLEBASERANGE,GBPREFIX),"String_Node_Str");
                newRange.addAnnotation(annotation);
              }
            }
 catch (            Exception e) {
              System.out.println(lineCounter + "String_Node_Str" + strLine);
            }
          }
          featureCnt++;
        }
      }
 else       if (originMode) {
        if (elements == null) {
          elements=new String("String_Node_Str");
        }
        String[] strSplit=strLine.split("String_Node_Str");
        for (int i=1; i < strSplit.length; i++) {
          sbSequence.append(strSplit[i]);
        }
      }
    }
  }
  Sequence sequence=doc.createSequence(id + "String_Node_Str",version,sbSequence.toString(),Sequence.IUPAC_DNA);
  topCD.addSequence(sequence);
  createSubComponentDefinitions(doc,topCD,type,sbSequence.toString(),version);
  br.close();
}