Merge with main branch after some refactor
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/EdgeListWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/EdgeListWritable.java
index 8010694..ba5fb53 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/EdgeListWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/EdgeListWritable.java
@@ -36,15 +36,15 @@
 
     private static final long serialVersionUID = 1L;
     private static final int SIZE_INT = 4;
-    
+
     protected EdgeWritable edgeIter = new EdgeWritable();
-    
+
     private ArrayList<EdgeWritable> edges;
 
     public EdgeListWritable() {
         edges = new ArrayList<EdgeWritable>(1);
     }
-    
+
     /**
      * Set the internal readIDs when the given positionList has readid, position, and mateid set
      */
@@ -52,14 +52,14 @@
         this();
         setAsCopy(other);
     }
-    
+
     public EdgeListWritable(List<EdgeWritable> otherList) {
         this();
         for (EdgeWritable e : otherList) {
             add(e);
         }
     }
-    
+
     public void setAsCopy(EdgeListWritable otherEdge){
         reset();
         for (EdgeWritable e : otherEdge.edges) {
@@ -70,33 +70,33 @@
     public void reset() {
         edges.clear();
     }
-    
+
     public EdgeWritable get(int i) {
         return edges.get(i);
     }
-    
+
     public boolean add(EdgeWritable element) {
         return edges.add(new EdgeWritable(element));
     }
-    
+
     public boolean add(VKmerBytesWritable kmer) {
         EdgeWritable edge = new EdgeWritable();
         edge.setKey(kmer);
         return edges.add(edge);
     }
-    
+
     public EdgeWritable set(int i, EdgeWritable element) {
         return edges.set(i, element);
     }
-    
+
     public boolean isEmpty(){
         return getCountOfPosition() == 0;
     }
-    
+
     public int getCountOfPosition() {
         return edges.size();
     }
-        
+
     public int getLength() {
         int total = SIZE_INT;
         for (EdgeWritable e : edges) {
@@ -104,7 +104,7 @@
         }
         return total;
     }
-	
+
     public EdgeWritable getEdge(VKmerBytesWritable key){
         for(EdgeWritable edge : edges){
             if(edge.getKey().equals(key)){
@@ -114,7 +114,7 @@
         return null;
     }
 	/**
-     * Return this Edge's representation as a new byte array 
+     * Return this Edge's representation as a new byte array
      */
     public byte[] marshalToByteArray() throws IOException {
         ByteArrayOutputStream baos = new ByteArrayOutputStream(getLength());
@@ -122,7 +122,7 @@
         write(out);
         return baos.toByteArray();
     }
-    
+
     public void setAsCopy(byte[] data, int offset) {
         int curOffset = offset;
         int count = Marshal.getInt(data, offset);
@@ -135,7 +135,7 @@
             curOffset += e.getLength();
         }
     }
-    
+
     public void setAsReference(byte[] data, int offset) {
         int curOffset = offset;
         int count = Marshal.getInt(data, offset);
@@ -146,7 +146,7 @@
             curOffset += edges.get(i).getLength();
         }
     }
-	
+
     @Override
     public void write(DataOutput out) throws IOException {
         out.writeInt(edges.size());
@@ -171,7 +171,7 @@
      */
     @Override
     public int compareTo(EdgeListWritable other) {
-        int result = Integer.compare(edges.size(), other.edges.size()); 
+        int result = Integer.compare(edges.size(), other.edges.size());
         if (result != 0) {
             return result;
         }
@@ -183,21 +183,21 @@
         }
         return 0;
     }
-        
+
     @Override
     public int hashCode() {
         return edges.hashCode();
     }
-    
+
     @Override
     public boolean equals(Object o) {
         if (! (o instanceof EdgeListWritable))
             return false;
-            
+
         EdgeListWritable ew = (EdgeListWritable) o;
         return compareTo(ew) == 0;
     }
-    
+
     /**
      * this version of toString sorts the readIds so they're a little easier to see
      */
@@ -220,9 +220,9 @@
     public Iterator<EdgeWritable> iterator() {
         return edges.iterator();
     }
-    
+
     /**
-     * return an iterator over the keys of this edgeList.  Using the iterator.remove() function will remove the entire edge (not just the keys you're iterating over!) 
+     * return an iterator over the keys of this edgeList.  Using the iterator.remove() function will remove the entire edge (not just the keys you're iterating over!)
      */
     public Iterator<VKmerBytesWritable> getKeyIterator() {
         Iterator<VKmerBytesWritable> it = new Iterator<VKmerBytesWritable>() {
@@ -263,8 +263,8 @@
         }
         throw new IllegalArgumentException("Cannot get readIDs for VKmer \""+ key +"\". They key was not in the edgeList!");
     }
-    
-    
+
+
     public boolean contains(VKmerBytesWritable toFind){
         Iterator<VKmerBytesWritable> posIterator = this.getKeyIterator();
         while (posIterator.hasNext()) {
@@ -273,7 +273,7 @@
         }
         return false;
     }
-    
+
     /*
      * remove the first instance of `toRemove`. Uses a linear scan. Throws an
      * exception if not in this list.
@@ -283,7 +283,7 @@
         while (posIterator.hasNext()) {
             if (toRemove.equals(posIterator.next())) {
                 posIterator.remove();
-                return; // break as soon as the element is found 
+                return; // break as soon as the element is found
             }
         }
         // element was not found
@@ -305,7 +305,7 @@
         while (edgeIterator.hasNext()) {
             if (toRemove.equals(edgeIterator.next())) {
                 edgeIterator.remove();
-                return;  // found it. return early. 
+                return;  // found it. return early.
             }
         }
         // element not found.
@@ -318,7 +318,7 @@
     public void remove(EdgeWritable toRemove) {
         remove(toRemove, false);
     }
-    
+
     public void removeSubEdge(EdgeWritable toRemove){
         Iterator<Long> it = toRemove.readIDIter();
         while(it.hasNext()){
@@ -334,11 +334,11 @@
 //            this.edges.addAll(other.edges.clone());
 //        }
 //    }
-    
-    
+
+
     /**
      * Adds all edges in edgeList to me.  If I have the same edge as `other`, that entry will be the union of both sets of readIDs.
-     * 
+     *
      * NOTE: This function may change the order of the original list!
      */
     public void unionUpdate(EdgeListWritable other) {
@@ -355,7 +355,7 @@
                 unionEdges.put(key, new PositionListWritable(e.getReadIDs())); // make a new copy of their list
             }
         }
-        
+
         for (EdgeWritable e : other.edges) {
             VKmerBytesWritable key = e.getKey();
             if (unionEdges.containsKey(key)) {
@@ -388,7 +388,7 @@
         // didn't find the edge; add a copy of it now
         edges.add(new EdgeWritable(otherEdge));
     }
-    
+
     public void unionAdd(EdgeListWritable otherEdgeList){
         for(EdgeWritable otherEdge : otherEdgeList)
             unionAdd(otherEdge);
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritable.java
index 4ba12c0..951e45e 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritable.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2009-2013 by The Regents of the University of California
+* Copyright 2009-2013 by The Regents of the University of California
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * you may obtain a copy of the License from
@@ -32,7 +32,7 @@
  * NodeWritable. Kmer length should be set once during configuration and should
  * never change.
  */
-public class KmerBytesWritable extends BinaryComparable implements Serializable, WritableComparable<BinaryComparable> {
+public class KmerBytesWritable extends BinaryComparable implements Serializable, WritableComparable<BinaryComparable> { // TODO make consistent with NodeWritable
 
     private static final long serialVersionUID = 1L;
     protected static final byte[] EMPTY_BYTES = {};
@@ -220,7 +220,7 @@
      * @param start
      */
     @SuppressWarnings("static-access")
-    public void setByRead(byte[] stringBytes, int start) {
+    public void setByRead(byte[] stringBytes, int start) {  // TODO "setFromStringBytes"
         byte l = 0;
         int bytecount = 0;
         int bcount = this.getBytesUsed() - 1;
@@ -248,7 +248,7 @@
      * @param start
      *            position
      */
-    public void setByReadReverse(byte[] array, int start) {
+    public void setByReadReverse(byte[] array, int start) { // TODO "setReversedFromStringBytes"
         byte l = 0;
         int bytecount = 0;
         int bcount = getBytesUsed() - 1;
@@ -307,7 +307,7 @@
      *            Input new gene character
      * @return the shiftout gene, in gene code format
      */
-    public byte shiftKmerWithPreChar(byte c) {
+    public byte shiftKmerWithPreChar(byte c) { // TODO remove
         return shiftKmerWithPreCode(GeneCode.getCodeFromSymbol(c));
     }
 
@@ -318,7 +318,7 @@
      *            Input new gene code
      * @return the shiftout gene, in gene code format
      */
-    public byte shiftKmerWithPreCode(byte c) {
+    public byte shiftKmerWithPreCode(byte c) { // TODO remove
         int pos = ((lettersInKmer - 1) % 4) << 1;
         byte output = (byte) ((bytes[offset] >> pos) & 0x03);
         for (int i = 0; i < getBytesUsed() - 1; i++) {
@@ -406,7 +406,7 @@
         KmerBytesWritable.bytesUsed = bytesUsed;
     }
 
-    public static class Comparator extends WritableComparator {
+    public static class Comparator extends WritableComparator { // TODO do we need this?
         public Comparator() {
             super(KmerBytesWritable.class);
         }
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/NodeWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/NodeWritable.java
index 11e684c..ffcb449 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/NodeWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/NodeWritable.java
@@ -28,74 +28,259 @@
 
 import edu.uci.ics.genomix.data.Marshal;
 
-public class NodeWritable implements WritableComparable<NodeWritable>, Serializable {
+public class NodeWritable implements WritableComparable<NodeWritable>, Serializable { // TODO is it more efficient to just use binaryComparable with Comparator?
 	
 	public enum DIR {
+		
 	    PREVIOUS((byte) (0b01 << 2)),
-        NEXT((byte) (0b10 << 2));
-        
-        public static final byte MASK = (byte)(0b11 << 2); 
-        
-        private final byte val;
-        private DIR(byte val) {
-            this.val = val;
+		NEXT((byte) (0b10 << 2));
+		
+		public static final byte MASK = (byte)(0b11 << 2); 
+		
+		private final byte val;
+		private DIR(byte val) {
+	        this.val = val;
+	    }
+		public final byte get() {
+		    return val;
+		}
+		public static DIR mirror(DIR direction) {
+		    switch (direction) {
+		        case PREVIOUS:
+		            return NEXT;
+		        case NEXT:
+		            return PREVIOUS;
+		        default:
+		            throw new IllegalArgumentException("Invalid direction given: " + direction);
+		    }
+		}
+		public DIR mirror() {
+		    return mirror(this);
+		}
+		
+		public static DIR fromByte(short b) { // TODO remove this function 
+			//TODO change shorts to byte? (anbangx) 
+		    b &= MASK;
+		    if (b == PREVIOUS.val)
+		        return PREVIOUS;
+		    if (b == NEXT.val)
+		        return NEXT;
+		    return null;  
+		}
+		
+		public static byte fromSet(EnumSet<DIR> set) {
+            byte b = 0;
+            if (set.contains(PREVIOUS))
+                b |= PREVIOUS.val;
+            if (set.contains(NEXT))
+                b |= NEXT.val;
+            return b;  
         }
-        public final byte get() {
-            return val;
-        }
-        public static DIR mirror(DIR direction) {
-            switch (direction) {
-                case PREVIOUS:
-                    return NEXT;
-                case NEXT:
-                    return PREVIOUS;
-                default:
-                    throw new IllegalArgumentException("test");
-            }
-        }
-        public DIR mirror() {
-            return mirror(this);
-        }
-        
-        public static DIR mirror(byte dir){
-            switch(dir){
-                case DirectionFlag.DIR_FF:
-                case DirectionFlag.DIR_RF:
-                    return PREVIOUS;
-                case DirectionFlag.DIR_FR:
-                case DirectionFlag.DIR_RR:
-                    return NEXT;
-            }
-            return null;
-        }
-        
-        public static byte mirrorFromByte(short b){
-            b &= MASK;
-            if(b != 0)
-                return mirror(fromByte(b)).get();
-            else
-                return 0;
-        }
-        
-        public static DIR fromByte(short b) {
-            b &= MASK;
-            if (b == PREVIOUS.val)
-                return PREVIOUS;
-            if (b == NEXT.val)
-                return NEXT;
-            return null;  
-        }
-        
-        public static EnumSet<DIR> enumSetFromByte(short s) {
+		public final EnumSet<EDGETYPE> edgeType(){
+		    return edgeTypesInDir(this);
+		}
+		
+	    public static final EnumSet<EDGETYPE> edgeTypesInDir(DIR direction) {
+	        return direction == DIR.PREVIOUS ? EDGETYPE.INCOMING : EDGETYPE.OUTGOING;
+	    }
+	    
+		public static EnumSet<DIR> enumSetFromByte(short s) {
+		    EnumSet<DIR> retSet = EnumSet.noneOf(DIR.class);
+		    if ((s & PREVIOUS.get()) != 0)
+		        retSet.add(DIR.PREVIOUS);
+		    if ((s & NEXT.get()) != 0)
+                retSet.add(DIR.NEXT);
+		    return retSet;
+		}
+		
+		/**
+		 * Given a byte representing NEXT, PREVIOUS, or both, return an enumset representing PREVIOUS, NEXT, or both, respectively. 
+		 */
+		public static EnumSet<DIR> flipSetFromByte(short s) {
             EnumSet<DIR> retSet = EnumSet.noneOf(DIR.class);
             if ((s & PREVIOUS.get()) != 0)
-                retSet.add(DIR.PREVIOUS);
-            if ((s & NEXT.get()) != 0)
                 retSet.add(DIR.NEXT);
+            if ((s & NEXT.get()) != 0)
+                retSet.add(DIR.PREVIOUS);
             return retSet;
         }
 	}
-
+	
+    public enum EDGETYPE {
+            
+            FF((byte)(0b00 << 0)),
+            FR((byte)(0b01 << 0)),
+            RF((byte)(0b10 << 0)),
+            RR((byte)(0b11 << 0));
+            
+            public static final byte MASK = (byte)(0b11 << 0); 
+            public static final byte CLEAR = (byte)(0b1111100 << 0);
+            private final byte val;
+            
+            private EDGETYPE(byte val){
+                this.val = val;
+            }
+            
+            public final byte get(){
+                return val;
+            }
+            
+            public static final EnumSet<EDGETYPE> INCOMING = EnumSet.of(RF, RR);
+            public static final EnumSet<EDGETYPE> OUTGOING = EnumSet.of(FF, FR);
+                    
+            public static EDGETYPE fromByte(short b) {
+                b &= MASK;
+                if(b == FF.val)
+                    return FF;
+                if(b == FR.val)
+                    return FR;
+                if(b == RF.val)
+                    return RF;
+                if(b == RR.val)
+                    return RR;
+                return null;
+    
+            }
+            /**
+             * Returns the edge dir for B->A when the A->B edge is type @dir
+             */
+            public EDGETYPE mirror(){
+                return mirror(this);
+            }
+            
+            public static EDGETYPE mirror(EDGETYPE edgeType){
+                switch (edgeType) {
+                    case FF:
+                        return RR;
+                    case FR:
+                        return FR;
+                    case RF:
+                        return RF;
+                    case RR:
+                        return FF;
+                    default:
+                        throw new RuntimeException("Unrecognized direction in mirrorDirection: " + edgeType);
+                }
+            }
+            
+            public DIR dir() {
+                return dir(this);
+            }
+            
+            public static DIR dir(EDGETYPE edgeType){ // .dir static / non-static
+                switch(edgeType){
+                    case FF:
+                    case FR:
+                        return DIR.NEXT;
+                    case RF:
+                    case RR:
+                        return DIR.PREVIOUS;
+                    default:
+                        throw new RuntimeException("Unrecognized direction in dirFromEdgeType: " + edgeType);
+                }
+            }
+            
+            /**
+             * return the edgetype corresponding to moving across edge1 and edge2.
+             * 
+             *  So if A <-e1- B -e2-> C, we will return the relationship from A -> C
+             *  
+             *  If the relationship isn't a valid path (e.g., e1,e2 are both FF), an exception is raised.
+             */
+            public static EDGETYPE resolveLinkThroughMiddleNode(EDGETYPE BtoA, EDGETYPE BtoC) {
+                EDGETYPE AtoB = mirror(BtoA);
+                // a valid path must exist from A to C
+                // specifically, two rules apply for AtoB and BtoC
+                //      1) the internal letters must be the same (so FF, RF will be an error)
+                //      2) the final direction is the 1st letter of AtoB + 2nd letter of BtoC
+                // TODO? maybe we could use the string version to resolve this following above rules
+                switch(AtoB) {
+                    case FF:
+                        switch (BtoC) {
+                            case FF:
+                            case FR:
+                                return BtoC;
+                            case RF:
+                            case RR:
+                                throw new IllegalArgumentException("Tried to resolve an invalid link type: A --" + AtoB + "--> B --" + BtoC + "--> C");
+                        }
+                        break;
+                    case FR:
+                        switch (BtoC) {
+                            case FF:
+                            case FR:
+                                throw new IllegalArgumentException("Tried to resolve an invalid link type: A --" + AtoB + "--> B --" + BtoC + "--> C");
+                            case RF:
+                                return FF;
+                            case RR:
+                                return FR;
+                        }
+                        break;
+                    case RF:
+                        switch (BtoC) {
+                            case FF:
+                                return RF;
+                            case FR:
+                                return RR;
+                            case RF:
+                            case RR:
+                                throw new IllegalArgumentException("Tried to resolve an invalid link type: A --" + AtoB + "--> B --" + BtoC + "--> C");
+                        }
+                        break;
+                    case RR:
+                        switch (BtoC) {
+                            case FF:
+                            case FR:
+                                throw new IllegalArgumentException("Tried to resolve an invalid link type: A --" + AtoB + "--> B --" + BtoC + "--> C");
+                            case RF:
+                                return RF;
+                            case RR:
+                                return RR;
+                        }
+                        break;
+                }
+                throw new IllegalStateException("Logic Error or unrecognized direction... original values were: " + BtoA + " and " + BtoC);
+            }
+            
+            public boolean causesFlip(){
+                return causesFlip(this);
+            }
+            public static boolean causesFlip(EDGETYPE edgeType) {
+                switch (edgeType) {
+                    case FF:
+                    case RR:
+                        return false;
+                    case FR:
+                    case RF:
+                        return true;
+                    default:
+                        throw new IllegalArgumentException("unrecognized direction: " + edgeType);
+                }
+            }
+            
+            /**
+             * check if need filp
+             */
+            public EDGETYPE flip(){
+                return flip(this);
+            }
+            
+            public static EDGETYPE flip(EDGETYPE neighborToMe){ // TODO use NodeWritable
+                switch (neighborToMe) {
+                    case FF:
+                        return FR;
+                    case FR:
+                        return FF;
+                    case RF:
+                        return RR;
+                    case RR:
+                        return RF;
+                    default:
+                        throw new RuntimeException("Unrecognized direction for neighborDir: " + neighborToMe);
+                }
+            }
+        }
+        
     private static final long serialVersionUID = 1L;
     public static final NodeWritable EMPTY_NODE = new NodeWritable();
 
@@ -115,38 +300,12 @@
 //    public String previous;
 //    public int stepCount;
     // merge/update directions
-    public static class DirectionFlag {
-        public static final byte DIR_FF = 0b00 << 0;
-        public static final byte DIR_FR = 0b01 << 0;
-        public static final byte DIR_RF = 0b10 << 0;
-        public static final byte DIR_RR = 0b11 << 0;
-        public static final byte DIR_MASK = 0b11 << 0;
-        public static final byte DIR_CLEAR = 0b1111100 << 0;
-
-        public static final byte[] values = { DIR_FF, DIR_FR, DIR_RF, DIR_RR };
-    }
     
-    public static class IncomingListFlag { // TODO refactor as a function using DIR
-        public static final byte DIR_RF = 0b10 << 0;
-        public static final byte DIR_RR = 0b11 << 0;
-
-        public static final byte[] values = {DIR_RF, DIR_RR };
-    }
-    
-    public static class OutgoingListFlag {
-        public static final byte DIR_FF = 0b00 << 0;
-        public static final byte DIR_FR = 0b01 << 0;
-
-        public static final byte[] values = {DIR_FF, DIR_FR };
-    }
-    
-    public static final byte[] edgeTypesInDir(DIR direction) {
-        return direction == DIR.PREVIOUS ? IncomingListFlag.values : OutgoingListFlag.values;
-    }
     
     public NodeWritable() {
-        for (byte d : DirectionFlag.values) {
-            edges[d] = new EdgeListWritable();
+        
+        for (EDGETYPE e : EnumSet.allOf(EDGETYPE.class)) {
+            edges[e.get()] = new EdgeListWritable();
         }
         startReads = new PositionListWritable();
         endReads = new PositionListWritable();
@@ -180,8 +339,8 @@
 
     public void setAsCopy(EdgeListWritable[] edges, PositionListWritable startReads, PositionListWritable endReads,
             VKmerBytesWritable kmer2, float coverage) {
-        for (byte d : DirectionFlag.values) {
-            this.edges[d].setAsCopy(edges[d]);
+        for (EDGETYPE e : EnumSet.allOf(EDGETYPE.class)) {
+            this.edges[e.get()].setAsCopy(edges[e.get()]);
         }
         this.startReads.set(startReads);
         this.endReads.set(endReads);
@@ -190,8 +349,8 @@
     }
 
     public void reset() {
-        for (byte d : DirectionFlag.values) {
-            edges[d].reset();
+        for (EDGETYPE e : EnumSet.allOf(EDGETYPE.class)) {
+            edges[e.get()].reset();
         }
         startReads.reset();
         endReads.reset();
@@ -210,13 +369,25 @@
     public int getKmerLength() {
         return internalKmer.getKmerLetterLength();
     }
-
-    public EdgeListWritable getEdgeList(byte dir) {
-        return edges[dir & DirectionFlag.DIR_MASK];
+    
+    //This function works on only this case: in this DIR, vertex has and only has one EDGETYPE
+    public EDGETYPE getEdgetypeFromDir(DIR direction){
+        if(getDegree(direction) != 1)
+            throw new IllegalArgumentException("getEdgetypeFromDir is used on the case, in which the vertex has and only has one EDGETYPE!");
+        EnumSet<EDGETYPE> ets = direction.edgeType(); 
+        for(EDGETYPE et : ets){
+            if(getEdgeList(et).getCountOfPosition() > 0)
+                return et;
+        }
+        return null;
+    }
+    
+    public EdgeListWritable getEdgeList(EDGETYPE edgeType) {
+        return edges[edgeType.get() & EDGETYPE.MASK];
     }
 
-    public void setEdgeList(byte dir, EdgeListWritable edgeList) {
-        this.edges[dir & DirectionFlag.DIR_MASK].setAsCopy(edgeList);
+    public void setEdgeList(EDGETYPE edgeType, EdgeListWritable edgeList) {
+        this.edges[edgeType.get() & EDGETYPE.MASK].setAsCopy(edgeList);
     }
     
     public EdgeListWritable[] getEdges() {
@@ -288,8 +459,8 @@
      */
     public int getSerializedLength() {
         int length = 0;
-        for (byte d : DirectionFlag.values) {
-            length += edges[d].getLength();
+        for (EDGETYPE e : EnumSet.allOf(EDGETYPE.class)) {
+            length += edges[e.get()].getLength();
         }
         length += startReads.getLength();
         length += endReads.getLength();
@@ -310,9 +481,9 @@
 
     public void setAsCopy(byte[] data, int offset) {
         int curOffset = offset;
-        for (byte d : DirectionFlag.values) {
-            edges[d].setAsCopy(data, curOffset);
-            curOffset += edges[d].getLength();
+        for (EDGETYPE e : EnumSet.allOf(EDGETYPE.class)) {
+            edges[e.get()].setAsCopy(data, curOffset);
+            curOffset += edges[e.get()].getLength();
         }
         startReads.set(data, curOffset);
         curOffset += startReads.getLength();
@@ -325,9 +496,9 @@
 
     public void setAsReference(byte[] data, int offset) {
         int curOffset = offset;
-        for (byte d : DirectionFlag.values) {
-            edges[d].setAsReference(data, curOffset);
-            curOffset += edges[d].getLength();
+        for (EDGETYPE e : EnumSet.allOf(EDGETYPE.class)) {
+            edges[e.get()].setAsReference(data, curOffset);
+            curOffset += edges[e.get()].getLength();
         }
         startReads.setNewReference(data, curOffset);
         curOffset += startReads.getLength();
@@ -341,8 +512,8 @@
 
     @Override
     public void write(DataOutput out) throws IOException {
-        for (byte d : DirectionFlag.values) {
-            edges[d].write(out);
+        for (EDGETYPE e : EnumSet.allOf(EDGETYPE.class)) {
+            edges[e.get()].write(out);
         }
         startReads.write(out);
         endReads.write(out);
@@ -353,8 +524,8 @@
     @Override
     public void readFields(DataInput in) throws IOException {
         reset();
-        for (byte d : DirectionFlag.values) {
-            edges[d].readFields(in);
+        for (EDGETYPE e : EnumSet.allOf(EDGETYPE.class)) {
+            edges[e.get()].readFields(in);
         }
         startReads.readFields(in);
         endReads.readFields(in);
@@ -385,8 +556,8 @@
             return false;
 
         NodeWritable nw = (NodeWritable) o;
-        for (byte d : DirectionFlag.values) {
-            if (!edges[d].equals(nw.edges[d]))
+        for (EDGETYPE e : EnumSet.allOf(EDGETYPE.class)) {
+            if (!edges[e.get()].equals(nw.edges[e.get()]))
                 return false;
         }
         
@@ -398,8 +569,8 @@
     public String toString() {
         StringBuilder sbuilder = new StringBuilder();
         sbuilder.append('{');
-        for (byte d : DirectionFlag.values) {
-            sbuilder.append(edges[d].toString()).append('\t');
+        for (EDGETYPE e : EnumSet.allOf(EDGETYPE.class)) {
+            sbuilder.append(edges[e.get()].toString()).append('\t');
         }
         sbuilder.append("{5':" + startReads.toString() + ", ~5':" + endReads.toString() + "}").append('\t');
         sbuilder.append(internalKmer.toString()).append('\t');
@@ -424,23 +595,23 @@
      * @param other
      *            : the node to merge with. I should have a `dir` edge towards `other`
      */
-    public void mergeWithNode(byte dir, final NodeWritable other) {
-        mergeEdges(dir, other);
-        mergeStartAndEndReadIDs(dir, other);
+    public void mergeWithNode(EDGETYPE edgeType, final NodeWritable other) {
+        mergeEdges(edgeType, other);
+        mergeStartAndEndReadIDs(edgeType, other);
         mergeCoverage(other);
-        internalKmer.mergeWithKmerInDir(dir, KmerBytesWritable.lettersInKmer, other.internalKmer);
+        internalKmer.mergeWithKmerInDir(edgeType, KmerBytesWritable.lettersInKmer, other.internalKmer);
     }
     
-    public void mergeWithNodeWithoutKmer(byte dir, final NodeWritable other) {
-        mergeEdges(dir, other);
-        mergeStartAndEndReadIDs(dir, other);
+    public void mergeWithNodeWithoutKmer(EDGETYPE edgeType, final NodeWritable other) {
+        mergeEdges(edgeType, other);
+        mergeStartAndEndReadIDs(edgeType, other);
         mergeCoverage(other);
     }
     
     public void mergeWithNodeWithoutKmer(final NodeWritable other) {
-        byte dir = DirectionFlag.DIR_FF;
-        mergeEdges(dir, other);
-        mergeStartAndEndReadIDs(dir, other);
+        EDGETYPE edgeType = EDGETYPE.FF;
+        mergeEdges(edgeType, other);
+        mergeStartAndEndReadIDs(edgeType, other);
         mergeCoverage(other);
     }
 
@@ -482,92 +653,76 @@
             }
         }
     }
-
+//
     /**
      * update my edge list
      */
-    public void updateEdges(byte deleteDir, VKmerBytesWritable toDelete, byte updateDir, byte replaceDir, NodeWritable other, boolean applyDelete){
+    public void updateEdges(EDGETYPE deleteDir, VKmerBytesWritable toDelete, EDGETYPE updateDir, EDGETYPE replaceDir, NodeWritable other, boolean applyDelete){
         if(applyDelete)
-            edges[deleteDir].remove(toDelete);
-        edges[updateDir].unionUpdate(other.edges[replaceDir]);
-//        switch (replaceDir) {
-//            case DirectionFlag.DIR_FF:
-//            case DirectionFlag.DIR_FR:
-//                if (other.inDegree() != 1)
-//                    throw new IllegalStateException("In update, expected other node's indegree to be 1!" + this + other);
-//                edges[updateDir].unionUpdate(other.edges[DirectionFlag.DIR_RF]);
-//                edges[updateDir].unionUpdate(other.edges[DirectionFlag.DIR_RR]);
-//                break;
-//            case DirectionFlag.DIR_RF:
-//            case DirectionFlag.DIR_RR:
-//                if (other.outDegree() != 1)
-//                    throw new IllegalStateException("In update, expected other node's outdegree to be 1!" + this + other);
-//                edges[updateDir].unionUpdate(other.edges[DirectionFlag.DIR_FF]);
-//                edges[updateDir].unionUpdate(other.edges[DirectionFlag.DIR_FR]);
-//                break;
-//        }
+            edges[deleteDir.get()].remove(toDelete);
+        edges[updateDir.get()].unionUpdate(other.edges[replaceDir.get()]);
     }
     
     /**
      * merge my edge list (both kmers and readIDs) with those of `other`.  Assumes that `other` is doing the flipping, if any.
      */
-    public void mergeEdges(byte dir, NodeWritable other) {
-        switch (dir & DirectionFlag.DIR_MASK) {
-            case DirectionFlag.DIR_FF:
+    public void mergeEdges(EDGETYPE edgeType, NodeWritable other) {
+        switch (edgeType) {
+            case FF:
                 if (outDegree() > 1)
                     throw new IllegalArgumentException("Illegal FF merge attempted! My outgoing degree is " + outDegree() + " in " + toString());
                 if (other.inDegree() > 1)
                     throw new IllegalArgumentException("Illegal FF merge attempted! Other incoming degree is " + other.inDegree() + " in " + other.toString());
-                edges[DirectionFlag.DIR_FF].setAsCopy(other.edges[DirectionFlag.DIR_FF]);
-                edges[DirectionFlag.DIR_FR].setAsCopy(other.edges[DirectionFlag.DIR_FR]);
+                edges[EDGETYPE.FF.get()].setAsCopy(other.edges[EDGETYPE.FF.get()]);
+                edges[EDGETYPE.FR.get()].setAsCopy(other.edges[EDGETYPE.FR.get()]);
                 break;
-            case DirectionFlag.DIR_FR:
+            case FR:
                 if (outDegree() > 1)
                     throw new IllegalArgumentException("Illegal FR merge attempted! My outgoing degree is " + outDegree() + " in " + toString());
                 if (other.outDegree() > 1)
                     throw new IllegalArgumentException("Illegal FR merge attempted! Other outgoing degree is " + other.outDegree() + " in " + other.toString());
-                edges[DirectionFlag.DIR_FF].setAsCopy(other.edges[DirectionFlag.DIR_RF]);
-                edges[DirectionFlag.DIR_FR].setAsCopy(other.edges[DirectionFlag.DIR_RR]);
+                edges[EDGETYPE.FF.get()].setAsCopy(other.edges[EDGETYPE.RF.get()]);
+                edges[EDGETYPE.FR.get()].setAsCopy(other.edges[EDGETYPE.RR.get()]);
                 break;
-            case DirectionFlag.DIR_RF:
+            case RF:
                 if (inDegree() > 1)
                     throw new IllegalArgumentException("Illegal RF merge attempted! My incoming degree is " + inDegree() + " in " + toString());
                 if (other.inDegree() > 1)
                     throw new IllegalArgumentException("Illegal RF merge attempted! Other incoming degree is " + other.inDegree() + " in " + other.toString());
-                edges[DirectionFlag.DIR_RF].setAsCopy(other.edges[DirectionFlag.DIR_FF]);
-                edges[DirectionFlag.DIR_RR].setAsCopy(other.edges[DirectionFlag.DIR_FR]);
+                edges[EDGETYPE.RF.get()].setAsCopy(other.edges[EDGETYPE.FF.get()]);
+                edges[EDGETYPE.RR.get()].setAsCopy(other.edges[EDGETYPE.FR.get()]);
                 break;
-            case DirectionFlag.DIR_RR:
+            case RR:
                 if (inDegree() > 1)
                     throw new IllegalArgumentException("Illegal RR merge attempted! My incoming degree is " + inDegree() + " in " + toString());
                 if (other.outDegree() > 1)
                     throw new IllegalArgumentException("Illegal RR merge attempted! Other outgoing degree is " + other.outDegree() + " in " + other.toString());
-                edges[DirectionFlag.DIR_RF].setAsCopy(other.edges[DirectionFlag.DIR_RF]);
-                edges[DirectionFlag.DIR_RR].setAsCopy(other.edges[DirectionFlag.DIR_RR]);
+                edges[EDGETYPE.RF.get()].setAsCopy(other.edges[EDGETYPE.RF.get()]);
+                edges[EDGETYPE.RR.get()].setAsCopy(other.edges[EDGETYPE.RR.get()]);
                 break;
         }
     }
 
     private void addEdges(boolean flip, NodeWritable other) {
         if (!flip) {
-            for (byte d : DirectionFlag.values) {
-                edges[d].unionUpdate(other.edges[d]);
+            for (EDGETYPE e : EnumSet.allOf(EDGETYPE.class)) {
+                edges[e.get()].unionUpdate(other.edges[e.get()]);
             }
         } else {
-            edges[DirectionFlag.DIR_FF].unionUpdate(other.edges[DirectionFlag.DIR_RF]);
-            edges[DirectionFlag.DIR_FR].unionUpdate(other.edges[DirectionFlag.DIR_RR]);
-            edges[DirectionFlag.DIR_RF].unionUpdate(other.edges[DirectionFlag.DIR_FF]);
-            edges[DirectionFlag.DIR_RR].unionUpdate(other.edges[DirectionFlag.DIR_FR]);
+            edges[EDGETYPE.FF.get()].unionUpdate(other.edges[EDGETYPE.RF.get()]);
+            edges[EDGETYPE.FR.get()].unionUpdate(other.edges[EDGETYPE.RR.get()]);
+            edges[EDGETYPE.RF.get()].unionUpdate(other.edges[EDGETYPE.FF.get()]);
+            edges[EDGETYPE.RR.get()].unionUpdate(other.edges[EDGETYPE.FR.get()]);
         }
     }
 
-    private void mergeStartAndEndReadIDs(byte dir, NodeWritable other) {
+    private void mergeStartAndEndReadIDs(EDGETYPE edgeType, NodeWritable other) {
         int K = KmerBytesWritable.lettersInKmer;
         int otherLength = other.internalKmer.lettersInKmer;
         int thisLength = internalKmer.lettersInKmer;
         int newOtherOffset, newThisOffset;
-        switch (dir & DirectionFlag.DIR_MASK) {
-            case DirectionFlag.DIR_FF:
+        switch (edgeType) {
+            case FF:
                 newOtherOffset = thisLength - K + 1;
                 // stream theirs in with my offset
                 for (PositionWritable p : other.startReads) {
@@ -577,7 +732,7 @@
                     endReads.append(p.getMateId(), p.getReadId(), newOtherOffset + p.getPosId());
                 }
                 break;
-            case DirectionFlag.DIR_FR:
+            case FR:
                 newOtherOffset = thisLength - K + 1 + otherLength - K;
                 // stream theirs in, offset and flipped
                 for (PositionWritable p : other.startReads) {
@@ -587,7 +742,7 @@
                     startReads.append(p.getMateId(), p.getReadId(), newOtherOffset + p.getPosId());
                 }
                 break;
-            case DirectionFlag.DIR_RF:
+            case RF:
                 newThisOffset = otherLength - K + 1;
                 newOtherOffset = otherLength - K;
                 // shift my offsets (other is prepended)
@@ -605,7 +760,7 @@
                     startReads.append(p.getMateId(), p.getReadId(), newOtherOffset + p.getPosId());
                 }
                 break;
-            case DirectionFlag.DIR_RR:
+            case RR:
                 newThisOffset = otherLength - K + 1;
                 // shift my offsets (other is prepended)
                 for (PositionWritable p : startReads) {
@@ -625,11 +780,11 @@
     }
 
     public int inDegree() {
-        return edges[DirectionFlag.DIR_RR].getCountOfPosition() + edges[DirectionFlag.DIR_RF].getCountOfPosition();
+        return edges[EDGETYPE.RR.get()].getCountOfPosition() + edges[EDGETYPE.RF.get()].getCountOfPosition();
     }
 
     public int outDegree() {
-        return edges[DirectionFlag.DIR_FF].getCountOfPosition() + edges[DirectionFlag.DIR_FR].getCountOfPosition();
+        return edges[EDGETYPE.FF.get()].getCountOfPosition() + edges[EDGETYPE.FR.get()].getCountOfPosition();
     }
     
     public int getDegree(DIR direction){
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritable.java
index 5105388..74bbaa0 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritable.java
@@ -27,7 +27,7 @@
 
 import edu.uci.ics.genomix.data.KmerUtil;
 import edu.uci.ics.genomix.data.Marshal;
-import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
+import edu.uci.ics.genomix.type.NodeWritable.EDGETYPE;
 
 
 /**
@@ -35,7 +35,7 @@
  * Note: `offset` as used in this class is the offset at which the *kmer*
  * begins. There is a {@value HEADER_SIZE}-byte header preceding the kmer
  */
-public class VKmerBytesWritable extends BinaryComparable implements Serializable, WritableComparable<BinaryComparable> { 
+public class VKmerBytesWritable extends BinaryComparable implements Serializable, WritableComparable<BinaryComparable> { // TODO should be Writable<VKmer> 
     private static final long serialVersionUID = 1L;
     protected static final byte[] EMPTY_BYTES = { 0, 0, 0, 0 }; // int indicating 0 length
     protected static final int HEADER_SIZE = 4; // number of bytes for header info
@@ -653,27 +653,27 @@
         mergeWithRRKmer(kmerSize, new VKmerBytesWritable(kmer.toString()));
     }
 
-    public void mergeWithKmerInDir(byte dir, int initialKmerSize, VKmerBytesWritable kmer) {
-        switch (dir & DirectionFlag.DIR_MASK) {
-            case DirectionFlag.DIR_FF:
+    public void mergeWithKmerInDir(EDGETYPE edgeType, int initialKmerSize, VKmerBytesWritable kmer) {
+        switch (edgeType) {
+            case FF:
                 mergeWithFFKmer(initialKmerSize, kmer);
                 break;
-            case DirectionFlag.DIR_FR:
+            case FR:
                 mergeWithFRKmer(initialKmerSize, kmer);
                 break;
-            case DirectionFlag.DIR_RF:
+            case RF:
                 mergeWithRFKmer(initialKmerSize, kmer);
                 break;
-            case DirectionFlag.DIR_RR:
+            case RR:
                 mergeWithRRKmer(initialKmerSize, kmer);
                 break;
             default:
-                throw new RuntimeException("Direction not recognized: " + dir);
+                throw new RuntimeException("Direction not recognized: " + edgeType);
         }
     }
-    public void mergeWithKmerInDir(byte dir, int initialKmerSize, KmerBytesWritable kmer) {
+    public void mergeWithKmerInDir(EDGETYPE edgeType, int initialKmerSize, KmerBytesWritable kmer) {
         // TODO make this more efficient
-        mergeWithKmerInDir(dir, initialKmerSize, new VKmerBytesWritable(kmer.toString()));
+        mergeWithKmerInDir(edgeType, initialKmerSize, new VKmerBytesWritable(kmer.toString()));
     }
 
     public KmerBytesWritable asFixedLengthKmer() {
diff --git a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/EdgeListWritableTest.java b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/EdgeListWritableTest.java
index 43740a4..318e58e 100644
--- a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/EdgeListWritableTest.java
+++ b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/EdgeListWritableTest.java
@@ -15,15 +15,14 @@
 
 import org.junit.Test;
 
-import edu.uci.ics.genomix.data.KmerUtil;
 import edu.uci.ics.genomix.type.EdgeListWritable;
 import edu.uci.ics.genomix.type.EdgeWritable;
 import edu.uci.ics.genomix.type.KmerBytesWritable;
 import edu.uci.ics.genomix.type.NodeWritable;
-import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
 import edu.uci.ics.genomix.type.PositionListWritable;
 import edu.uci.ics.genomix.type.PositionWritable;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
+import edu.uci.ics.genomix.type.NodeWritable.EDGETYPE;
 
 public class EdgeListWritableTest {
 
@@ -52,18 +51,18 @@
         for (long i = numelements * 2 / 3; i < numelements; i++) {
             plist3.appendReadId(i);
         }
-        n1.getEdgeList(DirectionFlag.DIR_RF).add(new EdgeWritable(k2, plist1));
-        Assert.assertEquals(numelements / 3, n1.getEdgeList(DirectionFlag.DIR_RF).get(0).getReadIDs()
+        n1.getEdgeList(EDGETYPE.FF).add(new EdgeWritable(k2, plist1));
+        Assert.assertEquals(numelements / 3, n1.getEdgeList(EDGETYPE.RF).get(0).getReadIDs()
                 .getCountOfPosition());
-        n1.getEdgeList(DirectionFlag.DIR_RF).unionUpdate(
+        n1.getEdgeList(EDGETYPE.RF).unionUpdate(
                 new EdgeListWritable(Arrays.asList(new EdgeWritable(k2, plist2))));
-        Assert.assertEquals(numelements * 2 / 3 + numoverlap, n1.getEdgeList(DirectionFlag.DIR_RF).get(0).getReadIDs()
+        Assert.assertEquals(numelements * 2 / 3 + numoverlap, n1.getEdgeList(EDGETYPE.RF).get(0).getReadIDs()
                 .getCountOfPosition());
-        n1.getEdgeList(DirectionFlag.DIR_RF).unionUpdate(
+        n1.getEdgeList(EDGETYPE.RF).unionUpdate(
                 new EdgeListWritable(Arrays.asList(new EdgeWritable(k2, plist3))));
-        Assert.assertEquals(numelements, n1.getEdgeList(DirectionFlag.DIR_RF).get(0).getReadIDs().getCountOfPosition());
+        Assert.assertEquals(numelements, n1.getEdgeList(EDGETYPE.RF).get(0).getReadIDs().getCountOfPosition());
 
-        long[] allReadIDs = n1.getEdgeList(DirectionFlag.DIR_RF).get(0).readIDArray();
+        long[] allReadIDs = n1.getEdgeList(EDGETYPE.RF).get(0).readIDArray();
         // make sure all readids are accounted for...
         for (long i = 0; i < numelements; i++) {
             boolean found = false;
diff --git a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/EdgeWritableTest.java b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/EdgeWritableTest.java
index 32d5338..03b54cc 100644
--- a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/EdgeWritableTest.java
+++ b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/EdgeWritableTest.java
@@ -114,8 +114,7 @@
         VKmerBytesWritable kmer2 = new VKmerBytesWritable("ATAGCTGAC");
         elist.add(new EdgeWritable(kmer2, plist1));
         
-        Iterator<VKmerBytesWritable> keyIter = elist.getKeys().iterator();//TODO
-             
+        Iterator<VKmerBytesWritable> keyIter = elist.getKeyIterator();
         Assert.assertTrue(keyIter.hasNext());
         Assert.assertEquals(kmer1, keyIter.next());
         Assert.assertEquals(kmer2, keyIter.next());
diff --git a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/NodeWritableTest.java b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/NodeWritableTest.java
index 538a1fe..97f7fbd 100644
--- a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/NodeWritableTest.java
+++ b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/NodeWritableTest.java
@@ -8,15 +8,13 @@
 
 import org.junit.Test;
 
-import edu.uci.ics.genomix.data.KmerUtil;
-import edu.uci.ics.genomix.type.EdgeListWritable;
 import edu.uci.ics.genomix.type.EdgeWritable;
 import edu.uci.ics.genomix.type.KmerBytesWritable;
 import edu.uci.ics.genomix.type.NodeWritable;
-import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
 import edu.uci.ics.genomix.type.PositionListWritable;
 import edu.uci.ics.genomix.type.PositionWritable;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
+import edu.uci.ics.genomix.type.NodeWritable.EDGETYPE;
 
 public class NodeWritableTest {
 
@@ -50,8 +48,8 @@
         n1.setInternalKmer(k1);
         n1.setAvgCoverage(10);
         n1.getStartReads().append(read1);
-        n1.getEdgeList(DirectionFlag.DIR_RF).add(new EdgeWritable(k2, plist1));
-        Assert.assertEquals("(50-0_0)", n1.getEdgeList(DirectionFlag.DIR_RF).get(0).getReadIDs().getPosition(0)
+        n1.getEdgeList(EDGETYPE.RF).add(new EdgeWritable(k2, plist1));
+        Assert.assertEquals("(50-0_0)", n1.getEdgeList(EDGETYPE.RF).get(0).getReadIDs().getPosition(0)
                 .toString());
         Assert.assertEquals(10f, n1.getAvgCoverage());
 
@@ -60,16 +58,16 @@
         n2.setAvgCoverage(20);
         n2.getStartReads().append(read2);
         Assert.assertEquals(1, n2.getStartReads().getCountOfPosition());
-        n2.getEdgeList(DirectionFlag.DIR_RF).add(new EdgeWritable(k1, plist1));
-        n2.getEdgeList(DirectionFlag.DIR_FF).add(new EdgeWritable(k3, plist3));
+        n2.getEdgeList(EDGETYPE.RF).add(new EdgeWritable(k1, plist1));
+        n2.getEdgeList(EDGETYPE.FF).add(new EdgeWritable(k3, plist3));
         Assert.assertEquals(20f, n2.getAvgCoverage());
 
         NodeWritable n3 = new NodeWritable();
         n3.setInternalKmer(k3);
         n3.setAvgCoverage(30);
         n3.getEndReads().append(read3);
-        n3.getEdgeList(DirectionFlag.DIR_RR).add(new EdgeWritable(k2, plist3));
-        Assert.assertEquals("(100-0_0)", n3.getEdgeList(DirectionFlag.DIR_RR).get(0).getReadIDs().getPosition(0)
+        n3.getEdgeList(EDGETYPE.RR).add(new EdgeWritable(k2, plist3));
+        Assert.assertEquals("(100-0_0)", n3.getEdgeList(EDGETYPE.RR).get(0).getReadIDs().getPosition(0)
                 .toString());
         Assert.assertEquals(30f, n3.getAvgCoverage());
 
@@ -96,7 +94,7 @@
         //      Assert.assertEquals("ATCTAG", k2.toString());
         //      k2.mergeWithFFKmer(5, k3);
         //      Assert.assertEquals("ATCTAGC", k2.toString());
-        n2.mergeWithNode(DirectionFlag.DIR_RF, n1);
+        n2.mergeWithNode(EDGETYPE.RF, n1);
         Assert.assertEquals("ATCTAG", n2.getInternalKmer().toString());
         Assert.assertEquals(15f, n2.getAvgCoverage());
         Assert.assertEquals(1, n2.getEndReads().getCountOfPosition());
@@ -105,9 +103,9 @@
         Assert.assertEquals("(75-1_1)", n2.getStartReads().getPosition(0).toString());
         Assert.assertEquals(0, n2.inDegree());
         Assert.assertEquals(1, n2.outDegree());
-        Assert.assertEquals(k3, n2.getEdgeList(DirectionFlag.DIR_FF).get(0).getKey());
+        Assert.assertEquals(k3, n2.getEdgeList(EDGETYPE.FF).get(0).getKey());
 
-        n2.mergeWithNode(DirectionFlag.DIR_FF, n3);
+        n2.mergeWithNode(EDGETYPE.FF, n3);
         Assert.assertEquals("ATCTAGC", n2.getInternalKmer().toString());
         Assert.assertEquals(20f, n2.getAvgCoverage());
         Assert.assertEquals(2, n2.getEndReads().getCountOfPosition());
@@ -150,21 +148,21 @@
         n1.setInternalKmer(k1);
         n1.setAvgCoverage(10);
         n1.getStartReads().append(read1);
-        n1.getEdgeList(DirectionFlag.DIR_RF).add(new EdgeWritable(k2, plist1));
+        n1.getEdgeList(EDGETYPE.RF).add(new EdgeWritable(k2, plist1));
         NodeWritable n1_2 = new NodeWritable();  // duplicate node which should end up union'ed in
         n1_2.setInternalKmer(k1);
         n1_2.setAvgCoverage(10);
         n1_2.getStartReads().append(read1);
-        n1_2.getEdgeList(DirectionFlag.DIR_RF).add(new EdgeWritable(k3, plist3));
-        n1_2.getEdgeList(DirectionFlag.DIR_RF).add(new EdgeWritable(k2, plist2));
+        n1_2.getEdgeList(EDGETYPE.RF).add(new EdgeWritable(k3, plist3));
+        n1_2.getEdgeList(EDGETYPE.RF).add(new EdgeWritable(k2, plist2));
         
         // take the union of the edges (a la graphbuilding)
-        n1.getEdgeList(DirectionFlag.DIR_RF).unionUpdate(n1_2.getEdgeList(DirectionFlag.DIR_RF));
+        n1.getEdgeList(EDGETYPE.RF).unionUpdate(n1_2.getEdgeList(EDGETYPE.RF));
         
         // the union-update may change the ordering of the original list (what a pain!)
-        Iterator<EdgeWritable> rf_edges = n1.getEdgeList(DirectionFlag.DIR_RF).iterator();
+        Iterator<EdgeWritable> rf_edges = n1.getEdgeList(EDGETYPE.RF).iterator();
         int k2_index = 0, k3_index = 0;
-        for (int i=0; i < n1.getEdgeList(DirectionFlag.DIR_RF).getCountOfPosition(); i++) {
+        for (int i=0; i < n1.getEdgeList(EDGETYPE.RF).getCountOfPosition(); i++) {
             VKmerBytesWritable curKmer = rf_edges.next().getKey();
             if (curKmer.equals(k2))
                 k2_index = i;
@@ -172,15 +170,15 @@
                 k3_index = i;
         }
         
-        Assert.assertEquals(2, n1.getEdgeList(DirectionFlag.DIR_RF).getCountOfPosition()); // only k2 and k3 in list
-        Assert.assertEquals(k2, n1.getEdgeList(DirectionFlag.DIR_RF).get(k2_index).getKey());
-        Assert.assertEquals(k3, n1.getEdgeList(DirectionFlag.DIR_RF).get(k3_index).getKey());
-        Assert.assertEquals(3, n1.getEdgeList(DirectionFlag.DIR_RF).get(k2_index).getReadIDs().getCountOfPosition()); // k2 has r1,r2,r3
-        Assert.assertEquals(1, n1.getEdgeList(DirectionFlag.DIR_RF).get(k3_index).getReadIDs().getCountOfPosition()); // k3 has r3 
+        Assert.assertEquals(2, n1.getEdgeList(EDGETYPE.RF).getCountOfPosition()); // only k2 and k3 in list
+        Assert.assertEquals(k2, n1.getEdgeList(EDGETYPE.RF).get(k2_index).getKey());
+        Assert.assertEquals(k3, n1.getEdgeList(EDGETYPE.RF).get(k3_index).getKey());
+        Assert.assertEquals(3, n1.getEdgeList(EDGETYPE.RF).get(k2_index).getReadIDs().getCountOfPosition()); // k2 has r1,r2,r3
+        Assert.assertEquals(1, n1.getEdgeList(EDGETYPE.RF).get(k3_index).getReadIDs().getCountOfPosition()); // k3 has r3 
         
-        long[] k2_readids = n1.getEdgeList(DirectionFlag.DIR_RF).get(k2_index).readIDArray();
+        long[] k2_readids = n1.getEdgeList(EDGETYPE.RF).get(k2_index).readIDArray();
         Assert.assertEquals(3, k2_readids.length);
-        long[] k3_readids = n1.getEdgeList(DirectionFlag.DIR_RF).get(k3_index).readIDArray();
+        long[] k3_readids = n1.getEdgeList(EDGETYPE.RF).get(k3_index).readIDArray();
         Assert.assertEquals(1, k3_readids.length);
         
         boolean[] found = {false, false, false};
diff --git a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixDriver.java b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixDriver.java
index c928c84..7733999 100644
--- a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixDriver.java
+++ b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixDriver.java
@@ -11,7 +11,6 @@
 import org.apache.hadoop.mapred.SequenceFileOutputFormat;
 import org.apache.hadoop.mapred.TextInputFormat;
 import org.apache.hadoop.mapred.TextOutputFormat;
-import org.apache.hadoop.mapred.lib.NLineInputFormat;
 import org.kohsuke.args4j.CmdLineParser;
 import org.kohsuke.args4j.Option;
 
diff --git a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixMapper.java b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixMapper.java
index 849f8cf..759419a 100644
--- a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixMapper.java
+++ b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixMapper.java
@@ -7,7 +7,6 @@
 
 import org.apache.hadoop.io.LongWritable;
 import org.apache.hadoop.io.Text;
-import org.apache.hadoop.mapred.InputFormat;
 import org.apache.hadoop.mapred.JobConf;
 import org.apache.hadoop.mapred.MapReduceBase;
 import org.apache.hadoop.mapred.Mapper;
@@ -18,11 +17,11 @@
 import edu.uci.ics.genomix.type.EdgeListWritable;
 import edu.uci.ics.genomix.type.EdgeWritable;
 import edu.uci.ics.genomix.type.KmerBytesWritable;
-import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
 import edu.uci.ics.genomix.type.NodeWritable;
 import edu.uci.ics.genomix.type.PositionListWritable;
 import edu.uci.ics.genomix.type.PositionWritable;
+import edu.uci.ics.genomix.type.NodeWritable.EDGETYPE;
 
 @SuppressWarnings("deprecation")
 public class GenomixMapper extends MapReduceBase implements
@@ -202,14 +201,14 @@
     				    edgeForPreKmer.setKey(preForwardKmer);
     				    edgeForPreKmer.setReadIDs(nodeIdList);
     				    edgeListForPreKmer.add(edgeForPreKmer);
-    				    outputNode.setEdgeList(DirectionFlag.DIR_RR, edgeListForPreKmer);
+    				    outputNode.setEdgeList(EDGETYPE.RR, edgeListForPreKmer);
     					break;
     				case REVERSE:
                         edgeListForPreKmer.reset();
                         edgeForPreKmer.setKey(preReverseKmer);
                         edgeForPreKmer.setReadIDs(nodeIdList);
                         edgeListForPreKmer.add(edgeForPreKmer);
-    				    outputNode.setEdgeList(DirectionFlag.DIR_RF, edgeListForPreKmer);
+    				    outputNode.setEdgeList(EDGETYPE.RF, edgeListForPreKmer);
     					break;
     			}
     			break;
@@ -220,14 +219,14 @@
                         edgeForPreKmer.setKey(preForwardKmer);
                         edgeForPreKmer.setReadIDs(nodeIdList);
                         edgeListForPreKmer.add(edgeForPreKmer);
-    				    outputNode.setEdgeList(DirectionFlag.DIR_FR, edgeListForPreKmer);
+    				    outputNode.setEdgeList(EDGETYPE.FR, edgeListForPreKmer);
     					break;
     				case REVERSE:
     				    edgeListForPreKmer.reset();
                         edgeForPreKmer.setKey(preReverseKmer);
                         edgeForPreKmer.setReadIDs(nodeIdList);
                         edgeListForPreKmer.add(edgeForPreKmer);
-    				    outputNode.setEdgeList(DirectionFlag.DIR_FF, edgeListForPreKmer);
+    				    outputNode.setEdgeList(EDGETYPE.FF, edgeListForPreKmer);
     					break;
     			}
     			break;
@@ -243,14 +242,14 @@
     				    edgeForNextKmer.setKey(nextForwardKmer);
     				    edgeForNextKmer.setReadIDs(nodeIdList);
     				    edgeListForNextKmer.add(edgeForNextKmer);
-    					outputNode.setEdgeList(DirectionFlag.DIR_FF, edgeListForNextKmer);
+    					outputNode.setEdgeList(EDGETYPE.FF, edgeListForNextKmer);
     					break;
     				case REVERSE:
     				    edgeListForNextKmer.reset();
                         edgeForNextKmer.setKey(nextReverseKmer);
                         edgeForNextKmer.setReadIDs(nodeIdList);
                         edgeListForNextKmer.add(edgeForNextKmer);
-    					outputNode.setEdgeList(DirectionFlag.DIR_FR, edgeListForNextKmer);
+    					outputNode.setEdgeList(EDGETYPE.FR, edgeListForNextKmer);
     					break;
     			}
     			break;
@@ -262,14 +261,14 @@
                         edgeForNextKmer.setReadIDs(nodeIdList);
                         edgeListForNextKmer.add(edgeForNextKmer);
     				    new EdgeListWritable(Arrays.asList(new EdgeWritable(nextForwardKmer, nodeIdList)));
-    					outputNode.setEdgeList(DirectionFlag.DIR_RF, edgeListForNextKmer);
+    					outputNode.setEdgeList(EDGETYPE.RF, edgeListForNextKmer);
     					break;
     				case REVERSE:
     				    edgeListForNextKmer.reset();
                         edgeForNextKmer.setKey(nextReverseKmer);
                         edgeForNextKmer.setReadIDs(nodeIdList);
                         edgeListForNextKmer.add(edgeForNextKmer);
-    					outputNode.setEdgeList(DirectionFlag.DIR_RR, edgeListForNextKmer);
+    					outputNode.setEdgeList(EDGETYPE.RR, edgeListForNextKmer);
     					break;
     			}
     			break;
diff --git a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixReducer.java b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixReducer.java
index 6bc4549..a1c21ee 100644
--- a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixReducer.java
+++ b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixReducer.java
@@ -1,6 +1,7 @@
 package edu.uci.ics.genomix.hadoop.contrailgraphbuilding;
 
 import java.io.IOException;
+import java.util.EnumSet;
 import java.util.Iterator;
 
 import org.apache.hadoop.mapred.JobConf;
@@ -10,7 +11,7 @@
 import org.apache.hadoop.mapred.Reporter;
 
 import edu.uci.ics.genomix.type.NodeWritable;
-import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
+import edu.uci.ics.genomix.type.NodeWritable.EDGETYPE;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
 
 @SuppressWarnings("deprecation")
@@ -38,8 +39,8 @@
 		
 		while (values.hasNext()) {
 		    tmpNode.setAsCopy(values.next());
-		    for (byte d: DirectionFlag.values) {
-		        outputNode.getEdgeList(d).unionUpdate(tmpNode.getEdgeList(d));
+		    for (EDGETYPE e: EnumSet.allOf(EDGETYPE.class)) {
+		        outputNode.getEdgeList(e).unionUpdate(tmpNode.getEdgeList(e));
 		    }
 		    outputNode.getStartReads().unionUpdate(tmpNode.getStartReads());
 		    outputNode.getEndReads().unionUpdate(tmpNode.getEndReads());
diff --git a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/graph/GenerateGraphViz.java b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/graph/GenerateGraphViz.java
index 84a5361..90b66ee 100644
--- a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/graph/GenerateGraphViz.java
+++ b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/graph/GenerateGraphViz.java
@@ -12,8 +12,8 @@
 
 import edu.uci.ics.genomix.type.EdgeWritable;
 import edu.uci.ics.genomix.type.NodeWritable;
+import edu.uci.ics.genomix.type.NodeWritable.EDGETYPE;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
-import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
 
 public class GenerateGraphViz {
 
@@ -74,25 +74,25 @@
     public static String convertEdgeToGraph(String outputNode, NodeWritable value) {
         String outputEdge = "";
         Iterator<EdgeWritable> edgeIterator;
-        edgeIterator = value.getEdgeList(DirectionFlag.DIR_FF).iterator();
+        edgeIterator = value.getEdgeList(EDGETYPE.FF).iterator();
         while(edgeIterator.hasNext()){
             EdgeWritable edge = edgeIterator.next(); 
             outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"black\" label =\"FF: " +
                     edge.printReadIdSet() + "\"]\n";
         }
-        edgeIterator = value.getEdgeList(DirectionFlag.DIR_FR).iterator();
+        edgeIterator = value.getEdgeList(EDGETYPE.FR).iterator();
         while(edgeIterator.hasNext()){
             EdgeWritable edge = edgeIterator.next();
             outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"blue\" label =\"FR: " +
                     edge.printReadIdSet() + "\"]\n";
         }
-        edgeIterator = value.getEdgeList(DirectionFlag.DIR_RF).iterator();
+        edgeIterator = value.getEdgeList(EDGETYPE.RF).iterator();
         while(edgeIterator.hasNext()){
             EdgeWritable edge = edgeIterator.next();
             outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"green\" label =\"RF: " +
                     edge.printReadIdSet() + "\"]\n";
         }
-        edgeIterator = value.getEdgeList(DirectionFlag.DIR_RR).iterator();
+        edgeIterator = value.getEdgeList(EDGETYPE.RR).iterator();
         while(edgeIterator.hasNext()){
             EdgeWritable edge = edgeIterator.next();
             outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"red\" label =\"RR: " +
diff --git a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/graphbuilding/checkingtool/ResultsCheckingMapper.java b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/graphbuilding/checkingtool/ResultsCheckingMapper.java
index 3b5738f..e4a00fd 100644
--- a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/graphbuilding/checkingtool/ResultsCheckingMapper.java
+++ b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/graphbuilding/checkingtool/ResultsCheckingMapper.java
@@ -25,7 +25,6 @@
 import org.apache.hadoop.mapred.Reporter;
 
 import edu.uci.ics.genomix.type.NodeWritable;
-import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
 
 @SuppressWarnings("deprecation")
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/dataflow/ReadsKeyValueParserFactory.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/dataflow/ReadsKeyValueParserFactory.java
index 0b22295..10d18ac 100644
--- a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/dataflow/ReadsKeyValueParserFactory.java
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/dataflow/ReadsKeyValueParserFactory.java
@@ -31,9 +31,9 @@
 import edu.uci.ics.genomix.type.EdgeWritable;
 import edu.uci.ics.genomix.type.KmerBytesWritable;
 import edu.uci.ics.genomix.type.NodeWritable;
+import edu.uci.ics.genomix.type.NodeWritable.EDGETYPE;
 import edu.uci.ics.genomix.type.PositionListWritable;
 import edu.uci.ics.genomix.type.PositionWritable;
-import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
 import edu.uci.ics.hyracks.api.comm.IFrameWriter;
 import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
 import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
@@ -251,27 +251,27 @@
                     NodeWritable nextNode, PositionListWritable readIdList, EdgeWritable tempEdge) {
                 if (curKmerDir == KmerDir.FORWARD && nextKmerDir == KmerDir.FORWARD) {
                     tempEdge.setAsCopy(nextForwardKmer, readIdList);
-                    curNode.getEdgeList(DirectionFlag.DIR_FF).add(tempEdge);
+                    curNode.getEdgeList(EDGETYPE.FF).add(tempEdge);
                     tempEdge.setAsCopy(curForwardKmer, readIdList);
-                    nextNode.getEdgeList(DirectionFlag.DIR_RR).add(tempEdge);
+                    nextNode.getEdgeList(EDGETYPE.RR).add(tempEdge);
                 }
                 if (curKmerDir == KmerDir.FORWARD && nextKmerDir == KmerDir.REVERSE) {
                     tempEdge.setAsCopy(nextReverseKmer, readIdList);
-                    curNode.getEdgeList(DirectionFlag.DIR_FR).add(tempEdge);
+                    curNode.getEdgeList(EDGETYPE.FR).add(tempEdge);
                     tempEdge.setAsCopy(curForwardKmer, readIdList);
-                    nextNode.getEdgeList(DirectionFlag.DIR_FR).add(tempEdge);
+                    nextNode.getEdgeList(EDGETYPE.FR).add(tempEdge);
                 }
                 if (curKmerDir == KmerDir.REVERSE && nextKmerDir == KmerDir.FORWARD) {
                     tempEdge.setAsCopy(nextForwardKmer, readIdList);
-                    curNode.getEdgeList(DirectionFlag.DIR_RF).add(tempEdge);
+                    curNode.getEdgeList(EDGETYPE.RF).add(tempEdge);
                     tempEdge.setAsCopy(curReverseKmer, readIdList);
-                    nextNode.getEdgeList(DirectionFlag.DIR_RF).add(tempEdge);
+                    nextNode.getEdgeList(EDGETYPE.RF).add(tempEdge);
                 }
                 if (curKmerDir == KmerDir.REVERSE && nextKmerDir == KmerDir.REVERSE) {
                     tempEdge.setAsCopy(nextReverseKmer, readIdList);
-                    curNode.getEdgeList(DirectionFlag.DIR_RR).add(tempEdge);
+                    curNode.getEdgeList(EDGETYPE.RR).add(tempEdge);
                     tempEdge.setAsCopy(curReverseKmer, readIdList);
-                    nextNode.getEdgeList(DirectionFlag.DIR_FF).add(tempEdge);
+                    nextNode.getEdgeList(EDGETYPE.FF).add(tempEdge);
                 }
             }
 
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/dataflow/aggregators/AggregateKmerAggregateFactory.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/dataflow/aggregators/AggregateKmerAggregateFactory.java
index a74f3b8..3825d48 100644
--- a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/dataflow/aggregators/AggregateKmerAggregateFactory.java
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/dataflow/aggregators/AggregateKmerAggregateFactory.java
@@ -17,12 +17,13 @@
 
 import java.io.DataOutput;
 import java.io.IOException;
+import java.util.EnumSet;
 import java.util.Iterator;
 
 import edu.uci.ics.genomix.type.KmerBytesWritable;
 import edu.uci.ics.genomix.type.NodeWritable;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
-import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
+import edu.uci.ics.genomix.type.NodeWritable.EDGETYPE;
 import edu.uci.ics.hyracks.api.comm.IFrameTupleAccessor;
 import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
 import edu.uci.ics.hyracks.api.dataflow.value.RecordDescriptor;
@@ -98,8 +99,8 @@
 //                        localUniNode.foundMe = true;
 //                    }
 //                }
-                for (byte d: DirectionFlag.values) {
-                    localUniNode.getEdgeList(d).unionUpdate((readNode.getEdgeList(d)));
+                for (EDGETYPE e : EnumSet.allOf(EDGETYPE.class)) {
+                    localUniNode.getEdgeList(e).unionUpdate((readNode.getEdgeList(e)));
                 }
                 localUniNode.getStartReads().appendList(readNode.getStartReads());
                 localUniNode.getEndReads().appendList(readNode.getEndReads());
@@ -115,8 +116,8 @@
 
 //                readKmer.setAsCopy(accessor.getBuffer().array(), getOffSet(accessor, tIndex, 0));
                 readNode.setAsReference(accessor.getBuffer().array(), getOffSet(accessor, tIndex, 1));
-                for (byte d: DirectionFlag.values) {
-                    localUniNode.getEdgeList(d).unionUpdate(readNode.getEdgeList(d));
+                for (EDGETYPE e : EnumSet.allOf(EDGETYPE.class)) {
+                    localUniNode.getEdgeList(e).unionUpdate(readNode.getEdgeList(e));
                 }
                 localUniNode.getStartReads().appendList(readNode.getStartReads());
                 localUniNode.getEndReads().appendList(readNode.getEndReads());
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/dataflow/aggregators/MergeKmerAggregateFactory.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/dataflow/aggregators/MergeKmerAggregateFactory.java
index a3a7e1a..8abe8d8 100644
--- a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/dataflow/aggregators/MergeKmerAggregateFactory.java
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/dataflow/aggregators/MergeKmerAggregateFactory.java
@@ -17,6 +17,7 @@
 
 import java.io.DataOutput;
 import java.io.IOException;
+import java.util.EnumSet;
 import java.util.logging.Logger;
 
 import org.apache.commons.logging.Log;
@@ -24,7 +25,7 @@
 import edu.uci.ics.genomix.type.KmerBytesWritable;
 import edu.uci.ics.genomix.type.NodeWritable;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
-import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
+import edu.uci.ics.genomix.type.NodeWritable.EDGETYPE;
 import edu.uci.ics.hyracks.api.comm.IFrameTupleAccessor;
 import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
 import edu.uci.ics.hyracks.api.dataflow.value.RecordDescriptor;
@@ -85,8 +86,8 @@
 //                    }
 //                }
                 
-                for (byte d : DirectionFlag.values) {
-                    localUniNode.getEdgeList(d).unionUpdate(readNode.getEdgeList(d));
+                for (EDGETYPE e : EnumSet.allOf(EDGETYPE.class)) {
+                    localUniNode.getEdgeList(e).unionUpdate(readNode.getEdgeList(e));
                 }
                 localUniNode.getStartReads().unionUpdate(readNode.getStartReads());
                 localUniNode.getEndReads().unionUpdate(readNode.getEndReads());
@@ -124,8 +125,8 @@
 //                    }
 //                }
                 
-                for (byte d : DirectionFlag.values) {
-                    localUniNode.getEdgeList(d).unionUpdate(readNode.getEdgeList(d));
+                for (EDGETYPE e : EnumSet.allOf(EDGETYPE.class)) {
+                    localUniNode.getEdgeList(e).unionUpdate(readNode.getEdgeList(e));
                 }
                 localUniNode.getStartReads().unionUpdate(readNode.getStartReads());
                 localUniNode.getEndReads().unionUpdate(readNode.getEndReads());
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/util/GenerateGraphViz.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/util/GenerateGraphViz.java
index b90e30f..ff7f7fa 100644
--- a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/util/GenerateGraphViz.java
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/util/GenerateGraphViz.java
@@ -12,8 +12,8 @@
 
 import edu.uci.ics.genomix.type.EdgeWritable;
 import edu.uci.ics.genomix.type.NodeWritable;
+import edu.uci.ics.genomix.type.NodeWritable.EDGETYPE;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
-import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
 
 public class GenerateGraphViz {
 
@@ -74,25 +74,25 @@
     public static String convertEdgeToGraph(String outputNode, NodeWritable value) {
         String outputEdge = "";
         Iterator<EdgeWritable> edgeIterator;
-        edgeIterator = value.getEdgeList(DirectionFlag.DIR_FF).iterator();
+        edgeIterator = value.getEdgeList(EDGETYPE.FF).iterator();
         while(edgeIterator.hasNext()){
             EdgeWritable edge = edgeIterator.next(); 
             outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"black\" label =\"FF: " +
                     edge.printReadIdSet() + "\"]\n";
         }
-        edgeIterator = value.getEdgeList(DirectionFlag.DIR_FR).iterator();
+        edgeIterator = value.getEdgeList(EDGETYPE.FR).iterator();
         while(edgeIterator.hasNext()){
             EdgeWritable edge = edgeIterator.next();
             outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"blue\" label =\"FR: " +
                     edge.printReadIdSet() + "\"]\n";
         }
-        edgeIterator = value.getEdgeList(DirectionFlag.DIR_RF).iterator();
+        edgeIterator = value.getEdgeList(EDGETYPE.RF).iterator();
         while(edgeIterator.hasNext()){
             EdgeWritable edge = edgeIterator.next();
             outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"green\" label =\"RF: " +
                     edge.printReadIdSet() + "\"]\n";
         }
-        edgeIterator = value.getEdgeList(DirectionFlag.DIR_RR).iterator();
+        edgeIterator = value.getEdgeList(EDGETYPE.RR).iterator();
         while(edgeIterator.hasNext()){
             EdgeWritable edge = edgeIterator.next();
             outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"red\" label =\"RR: " +
diff --git a/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/hadoop/graph/test/GenerateGraphViz.java b/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/hadoop/graph/test/GenerateGraphViz.java
index 43bb8ff..85c0ec6 100644
--- a/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/hadoop/graph/test/GenerateGraphViz.java
+++ b/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/hadoop/graph/test/GenerateGraphViz.java
@@ -13,7 +13,7 @@
 import edu.uci.ics.genomix.type.EdgeWritable;
 import edu.uci.ics.genomix.type.NodeWritable;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
-import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
+import edu.uci.ics.genomix.type.NodeWritable.EDGETYPE;
 
 public class GenerateGraphViz {
 
@@ -74,25 +74,25 @@
     public static String convertEdgeToGraph(String outputNode, NodeWritable value) {
         String outputEdge = "";
         Iterator<EdgeWritable> edgeIterator;
-        edgeIterator = value.getEdgeList(DirectionFlag.DIR_FF).iterator();
+        edgeIterator = value.getEdgeList(EDGETYPE.FF).iterator();
         while(edgeIterator.hasNext()){
             EdgeWritable edge = edgeIterator.next(); 
             outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"black\" label =\"FF: " +
                     edge.printReadIdSet() + "\"]\n";
         }
-        edgeIterator = value.getEdgeList(DirectionFlag.DIR_FR).iterator();
+        edgeIterator = value.getEdgeList(EDGETYPE.FR).iterator();
         while(edgeIterator.hasNext()){
             EdgeWritable edge = edgeIterator.next();
             outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"blue\" label =\"FR: " +
                     edge.printReadIdSet() + "\"]\n";
         }
-        edgeIterator = value.getEdgeList(DirectionFlag.DIR_RF).iterator();
+        edgeIterator = value.getEdgeList(EDGETYPE.RF).iterator();
         while(edgeIterator.hasNext()){
             EdgeWritable edge = edgeIterator.next();
             outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"green\" label =\"RF: " +
                     edge.printReadIdSet() + "\"]\n";
         }
-        edgeIterator = value.getEdgeList(DirectionFlag.DIR_RR).iterator();
+        edgeIterator = value.getEdgeList(EDGETYPE.RR).iterator();
         while(edgeIterator.hasNext()){
             EdgeWritable edge = edgeIterator.next();
             outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"red\" label =\"RR: " +
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/SmallGenome/.txt.crc b/genomix/genomix-pregelix/data/TestSet/TipRemove/FR_Tip/.statistics.crc
similarity index 100%
rename from genomix/genomix-pregelix/data/TestSet/TipRemove/SmallGenome/.txt.crc
rename to genomix/genomix-pregelix/data/TestSet/TipRemove/FR_Tip/.statistics.crc
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/FR_Tip/bin/.part-0.crc b/genomix/genomix-pregelix/data/TestSet/TipRemove/FR_Tip/bin/.part-0.crc
index bf60a71..de75c33 100644
--- a/genomix/genomix-pregelix/data/TestSet/TipRemove/FR_Tip/bin/.part-0.crc
+++ b/genomix/genomix-pregelix/data/TestSet/TipRemove/FR_Tip/bin/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/FR_Tip/bin/.part-1.crc b/genomix/genomix-pregelix/data/TestSet/TipRemove/FR_Tip/bin/.part-1.crc
index 744fbef..7120be2 100644
--- a/genomix/genomix-pregelix/data/TestSet/TipRemove/FR_Tip/bin/.part-1.crc
+++ b/genomix/genomix-pregelix/data/TestSet/TipRemove/FR_Tip/bin/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/FR_Tip/bin/part-0 b/genomix/genomix-pregelix/data/TestSet/TipRemove/FR_Tip/bin/part-0
index 7934715..89795c2 100755
--- a/genomix/genomix-pregelix/data/TestSet/TipRemove/FR_Tip/bin/part-0
+++ b/genomix/genomix-pregelix/data/TestSet/TipRemove/FR_Tip/bin/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/FR_Tip/bin/part-1 b/genomix/genomix-pregelix/data/TestSet/TipRemove/FR_Tip/bin/part-1
index fc82ad0..0ca2113 100755
--- a/genomix/genomix-pregelix/data/TestSet/TipRemove/FR_Tip/bin/part-1
+++ b/genomix/genomix-pregelix/data/TestSet/TipRemove/FR_Tip/bin/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/FR_Tip/graphviz.svg b/genomix/genomix-pregelix/data/TestSet/TipRemove/FR_Tip/graphviz.svg
new file mode 100644
index 0000000..a9f1169
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/TipRemove/FR_Tip/graphviz.svg
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.26.3 (20100126.1600)
+ -->
+<!-- Title: G Pages: 1 -->
+<svg width="620pt" height="286pt"
+ viewBox="0.00 0.00 620.00 286.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph1" class="graph" transform="scale(1 1) rotate(0) translate(4 282)">
+<title>G</title>
+<polygon fill="white" stroke="white" points="-4,5 -4,-282 617,-282 617,5 -4,5"/>
+<!-- GAA -->
+<g id="node1" class="node"><title>GAA</title>
+<polygon fill="none" stroke="black" points="0,-75 0,-205 56,-205 56,-75 0,-75"/>
+<text text-anchor="middle" x="28" y="-188.4" font-family="Times Roman,serif" font-size="14.00">GAA</text>
+<polyline fill="none" stroke="black" points="0,-179 56,-179 "/>
+<text text-anchor="middle" x="28" y="-162.4" font-family="Times Roman,serif" font-size="14.00">5&#39;:[]</text>
+<polyline fill="none" stroke="black" points="0,-153 56,-153 "/>
+<text text-anchor="middle" x="28" y="-136.4" font-family="Times Roman,serif" font-size="14.00">~5&#39;:[]</text>
+<polyline fill="none" stroke="black" points="0,-127 56,-127 "/>
+<text text-anchor="middle" x="28" y="-110.4" font-family="Times Roman,serif" font-size="14.00">1.0</text>
+<polyline fill="none" stroke="black" points="0,-101 56,-101 "/>
+<text text-anchor="middle" x="28" y="-84.4" font-family="Times Roman,serif" font-size="14.00">GAA</text>
+</g>
+<!-- AGA -->
+<g id="node3" class="node"><title>AGA</title>
+<polygon fill="none" stroke="black" points="140,-75 140,-205 196,-205 196,-75 140,-75"/>
+<text text-anchor="middle" x="168" y="-188.4" font-family="Times Roman,serif" font-size="14.00">AGA</text>
+<polyline fill="none" stroke="black" points="140,-179 196,-179 "/>
+<text text-anchor="middle" x="168" y="-162.4" font-family="Times Roman,serif" font-size="14.00">5&#39;:[]</text>
+<polyline fill="none" stroke="black" points="140,-153 196,-153 "/>
+<text text-anchor="middle" x="168" y="-136.4" font-family="Times Roman,serif" font-size="14.00">~5&#39;:[]</text>
+<polyline fill="none" stroke="black" points="140,-127 196,-127 "/>
+<text text-anchor="middle" x="168" y="-110.4" font-family="Times Roman,serif" font-size="14.00">1.0</text>
+<polyline fill="none" stroke="black" points="140,-101 196,-101 "/>
+<text text-anchor="middle" x="168" y="-84.4" font-family="Times Roman,serif" font-size="14.00">AGA</text>
+</g>
+<!-- GAA&#45;&gt;AGA -->
+<g id="edge2" class="edge"><title>GAA&#45;&gt;AGA</title>
+<path fill="none" stroke="red" d="M56.3311,-140C77.3945,-140 106.372,-140 129.53,-140"/>
+<polygon fill="red" stroke="red" points="129.711,-143.5 139.711,-140 129.711,-136.5 129.711,-143.5"/>
+<text text-anchor="middle" x="98" y="-145.4" font-family="Times Roman,serif" font-size="14.00">RR: [1]</text>
+</g>
+<!-- AGA&#45;&gt;GAA -->
+<g id="edge4" class="edge"><title>AGA&#45;&gt;GAA</title>
+<path fill="none" stroke="black" d="M139.511,-123.987C133.868,-121.508 127.871,-119.332 122,-118 101.195,-113.281 94.8048,-113.281 74,-118 71.3399,-118.603 68.6538,-119.38 65.9864,-120.28"/>
+<polygon fill="black" stroke="black" points="64.5325,-117.09 56.4893,-123.987 67.0775,-123.611 64.5325,-117.09"/>
+<text text-anchor="middle" x="98" y="-123.4" font-family="Times Roman,serif" font-size="14.00">FF: [1]</text>
+</g>
+<!-- CTA -->
+<g id="node6" class="node"><title>CTA</title>
+<polygon fill="none" stroke="black" points="278,-75 278,-205 334,-205 334,-75 278,-75"/>
+<text text-anchor="middle" x="306" y="-188.4" font-family="Times Roman,serif" font-size="14.00">CTA</text>
+<polyline fill="none" stroke="black" points="278,-179 334,-179 "/>
+<text text-anchor="middle" x="306" y="-162.4" font-family="Times Roman,serif" font-size="14.00">5&#39;:[]</text>
+<polyline fill="none" stroke="black" points="278,-153 334,-153 "/>
+<text text-anchor="middle" x="306" y="-136.4" font-family="Times Roman,serif" font-size="14.00">~5&#39;:[]</text>
+<polyline fill="none" stroke="black" points="278,-127 334,-127 "/>
+<text text-anchor="middle" x="306" y="-110.4" font-family="Times Roman,serif" font-size="14.00">1.0</text>
+<polyline fill="none" stroke="black" points="278,-101 334,-101 "/>
+<text text-anchor="middle" x="306" y="-84.4" font-family="Times Roman,serif" font-size="14.00">CTA</text>
+</g>
+<!-- AGA&#45;&gt;CTA -->
+<g id="edge6" class="edge"><title>AGA&#45;&gt;CTA</title>
+<path fill="none" stroke="green" d="M196.259,-140C216.818,-140 244.894,-140 267.501,-140"/>
+<polygon fill="green" stroke="green" points="267.778,-143.5 277.778,-140 267.778,-136.5 267.778,-143.5"/>
+<text text-anchor="middle" x="237" y="-145.4" font-family="Times Roman,serif" font-size="14.00">RF: [1]</text>
+</g>
+<!-- CTA&#45;&gt;AGA -->
+<g id="edge20" class="edge"><title>CTA&#45;&gt;AGA</title>
+<path fill="none" stroke="green" d="M277.511,-123.987C271.868,-121.508 265.871,-119.332 260,-118 240.062,-113.478 233.938,-113.478 214,-118 211.34,-118.603 208.654,-119.38 205.986,-120.28"/>
+<polygon fill="green" stroke="green" points="204.532,-117.09 196.489,-123.987 207.078,-123.611 204.532,-117.09"/>
+<text text-anchor="middle" x="237" y="-123.4" font-family="Times Roman,serif" font-size="14.00">RF: [1]</text>
+</g>
+<!-- ATA -->
+<g id="node7" class="node"><title>ATA</title>
+<polygon fill="none" stroke="black" points="416,-148 416,-278 472,-278 472,-148 416,-148"/>
+<text text-anchor="middle" x="444" y="-261.4" font-family="Times Roman,serif" font-size="14.00">ATA</text>
+<polyline fill="none" stroke="black" points="416,-252 472,-252 "/>
+<text text-anchor="middle" x="444" y="-235.4" font-family="Times Roman,serif" font-size="14.00">5&#39;:[]</text>
+<polyline fill="none" stroke="black" points="416,-226 472,-226 "/>
+<text text-anchor="middle" x="444" y="-209.4" font-family="Times Roman,serif" font-size="14.00">~5&#39;:[]</text>
+<polyline fill="none" stroke="black" points="416,-200 472,-200 "/>
+<text text-anchor="middle" x="444" y="-183.4" font-family="Times Roman,serif" font-size="14.00">1.0</text>
+<polyline fill="none" stroke="black" points="416,-174 472,-174 "/>
+<text text-anchor="middle" x="444" y="-157.4" font-family="Times Roman,serif" font-size="14.00">ATA</text>
+</g>
+<!-- CTA&#45;&gt;ATA -->
+<g id="edge16" class="edge"><title>CTA&#45;&gt;ATA</title>
+<path fill="none" stroke="blue" d="M334.238,-175.156C339.685,-180.371 345.68,-185.245 352,-189 368.218,-198.635 388.29,-204.451 405.543,-207.937"/>
+<polygon fill="blue" stroke="blue" points="405.396,-211.467 415.862,-209.819 406.653,-204.581 405.396,-211.467"/>
+<text text-anchor="middle" x="375" y="-212.4" font-family="Times Roman,serif" font-size="14.00">FR: [1]</text>
+</g>
+<!-- AGC -->
+<g id="node11" class="node"><title>AGC</title>
+<polygon fill="none" stroke="black" points="416,-0 416,-130 472,-130 472,-0 416,-0"/>
+<text text-anchor="middle" x="444" y="-113.4" font-family="Times Roman,serif" font-size="14.00">AGC</text>
+<polyline fill="none" stroke="black" points="416,-104 472,-104 "/>
+<text text-anchor="middle" x="444" y="-87.4" font-family="Times Roman,serif" font-size="14.00">5&#39;:[]</text>
+<polyline fill="none" stroke="black" points="416,-78 472,-78 "/>
+<text text-anchor="middle" x="444" y="-61.4" font-family="Times Roman,serif" font-size="14.00">~5&#39;:[]</text>
+<polyline fill="none" stroke="black" points="416,-52 472,-52 "/>
+<text text-anchor="middle" x="444" y="-35.4" font-family="Times Roman,serif" font-size="14.00">0.0</text>
+<polyline fill="none" stroke="black" points="416,-26 472,-26 "/>
+<text text-anchor="middle" x="444" y="-9.4" font-family="Times Roman,serif" font-size="14.00"> </text>
+</g>
+<!-- CTA&#45;&gt;AGC -->
+<g id="edge18" class="edge"><title>CTA&#45;&gt;AGC</title>
+<path fill="none" stroke="blue" d="M334.075,-128.859C352.667,-121.079 377.341,-109.974 398,-98 401.162,-96.1672 404.376,-94.1705 407.561,-92.0962"/>
+<polygon fill="blue" stroke="blue" points="409.539,-94.9835 415.864,-86.4835 405.619,-89.1841 409.539,-94.9835"/>
+<text text-anchor="middle" x="375" y="-126.4" font-family="Times Roman,serif" font-size="14.00">FR: [0]</text>
+</g>
+<!-- ATA&#45;&gt;CTA -->
+<g id="edge8" class="edge"><title>ATA&#45;&gt;CTA</title>
+<path fill="none" stroke="blue" d="M415.758,-183.923C410.185,-179.17 404.149,-174.624 398,-171 381.37,-161.201 361.207,-153.965 344.001,-148.96"/>
+<polygon fill="blue" stroke="blue" points="344.832,-145.559 334.261,-146.269 342.967,-152.306 344.832,-145.559"/>
+<text text-anchor="middle" x="375" y="-176.4" font-family="Times Roman,serif" font-size="14.00">FR: [1]</text>
+</g>
+<!-- AAT -->
+<g id="node10" class="node"><title>AAT</title>
+<polygon fill="grey" stroke="black" points="556,-147 556,-277 612,-277 612,-147 556,-147"/>
+<text text-anchor="middle" x="584" y="-260.4" font-family="Times Roman,serif" font-size="14.00">AAT</text>
+<polyline fill="none" stroke="black" points="556,-251 612,-251 "/>
+<text text-anchor="middle" x="584" y="-234.4" font-family="Times Roman,serif" font-size="14.00">5&#39;:[1]</text>
+<polyline fill="none" stroke="black" points="556,-225 612,-225 "/>
+<text text-anchor="middle" x="584" y="-208.4" font-family="Times Roman,serif" font-size="14.00">~5&#39;:[]</text>
+<polyline fill="none" stroke="black" points="556,-199 612,-199 "/>
+<text text-anchor="middle" x="584" y="-182.4" font-family="Times Roman,serif" font-size="14.00">1.0</text>
+<polyline fill="none" stroke="black" points="556,-173 612,-173 "/>
+<text text-anchor="middle" x="584" y="-156.4" font-family="Times Roman,serif" font-size="14.00">AAT</text>
+</g>
+<!-- ATA&#45;&gt;AAT -->
+<g id="edge10" class="edge"><title>ATA&#45;&gt;AAT</title>
+<path fill="none" stroke="red" d="M472.331,-212.798C493.395,-212.647 522.372,-212.44 545.53,-212.275"/>
+<polygon fill="red" stroke="red" points="545.736,-215.773 555.711,-212.202 545.686,-208.774 545.736,-215.773"/>
+<text text-anchor="middle" x="514" y="-218.4" font-family="Times Roman,serif" font-size="14.00">RR: [1]</text>
+</g>
+<!-- AAT&#45;&gt;ATA -->
+<g id="edge14" class="edge"><title>AAT&#45;&gt;ATA</title>
+<path fill="none" stroke="black" d="M555.947,-196.92C550.165,-194.468 544.005,-192.306 538,-191 517.154,-186.467 510.805,-186.281 490,-191 487.34,-191.603 484.654,-192.38 481.986,-193.28"/>
+<polygon fill="black" stroke="black" points="480.532,-190.09 472.489,-196.987 483.078,-196.611 480.532,-190.09"/>
+<text text-anchor="middle" x="514" y="-196.4" font-family="Times Roman,serif" font-size="14.00">FF: [1]</text>
+</g>
+<!-- AGC&#45;&gt;CTA -->
+<g id="edge12" class="edge"><title>AGC&#45;&gt;CTA</title>
+<path fill="none" stroke="blue" d="M415.595,-64.3145C396.401,-65.0709 371.165,-68.5339 352,-80 348.325,-82.1986 344.84,-84.8113 341.556,-87.6969"/>
+<polygon fill="blue" stroke="blue" points="338.945,-85.3548 334.262,-94.8585 343.85,-90.3495 338.945,-85.3548"/>
+<text text-anchor="middle" x="375" y="-85.4" font-family="Times Roman,serif" font-size="14.00">FR: [0]</text>
+</g>
+</g>
+</svg>
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/FR_Tip/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/TipRemove/FR_Tip/graphviz/result.ps
deleted file mode 100644
index bc35149..0000000
--- a/genomix/genomix-pregelix/data/TestSet/TipRemove/FR_Tip/graphviz/result.ps
+++ /dev/null
@@ -1,718 +0,0 @@
-%!PS-Adobe-3.0
-%%Creator: graphviz version 2.26.3 (20100126.1600)
-%%Title: G
-%%Pages: (atend)
-%%BoundingBox: (atend)
-%%EndComments
-save
-%%BeginProlog
-/DotDict 200 dict def
-DotDict begin
-
-/setupLatin1 {
-mark
-/EncodingVector 256 array def
- EncodingVector 0
-
-ISOLatin1Encoding 0 255 getinterval putinterval
-EncodingVector 45 /hyphen put
-
-% Set up ISO Latin 1 character encoding
-/starnetISO {
-        dup dup findfont dup length dict begin
-        { 1 index /FID ne { def }{ pop pop } ifelse
-        } forall
-        /Encoding EncodingVector def
-        currentdict end definefont
-} def
-/Times-Roman starnetISO def
-/Times-Italic starnetISO def
-/Times-Bold starnetISO def
-/Times-BoldItalic starnetISO def
-/Helvetica starnetISO def
-/Helvetica-Oblique starnetISO def
-/Helvetica-Bold starnetISO def
-/Helvetica-BoldOblique starnetISO def
-/Courier starnetISO def
-/Courier-Oblique starnetISO def
-/Courier-Bold starnetISO def
-/Courier-BoldOblique starnetISO def
-cleartomark
-} bind def
-
-%%BeginResource: procset graphviz 0 0
-/coord-font-family /Times-Roman def
-/default-font-family /Times-Roman def
-/coordfont coord-font-family findfont 8 scalefont def
-
-/InvScaleFactor 1.0 def
-/set_scale {
-       dup 1 exch div /InvScaleFactor exch def
-       scale
-} bind def
-
-% styles
-/solid { [] 0 setdash } bind def
-/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
-/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
-/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
-/bold { 2 setlinewidth } bind def
-/filled { } bind def
-/unfilled { } bind def
-/rounded { } bind def
-/diagonals { } bind def
-
-% hooks for setting color 
-/nodecolor { sethsbcolor } bind def
-/edgecolor { sethsbcolor } bind def
-/graphcolor { sethsbcolor } bind def
-/nopcolor {pop pop pop} bind def
-
-/beginpage {	% i j npages
-	/npages exch def
-	/j exch def
-	/i exch def
-	/str 10 string def
-	npages 1 gt {
-		gsave
-			coordfont setfont
-			0 0 moveto
-			(\() show i str cvs show (,) show j str cvs show (\)) show
-		grestore
-	} if
-} bind def
-
-/set_font {
-	findfont exch
-	scalefont setfont
-} def
-
-% draw text fitted to its expected width
-/alignedtext {			% width text
-	/text exch def
-	/width exch def
-	gsave
-		width 0 gt {
-			[] 0 setdash
-			text stringwidth pop width exch sub text length div 0 text ashow
-		} if
-	grestore
-} def
-
-/boxprim {				% xcorner ycorner xsize ysize
-		4 2 roll
-		moveto
-		2 copy
-		exch 0 rlineto
-		0 exch rlineto
-		pop neg 0 rlineto
-		closepath
-} bind def
-
-/ellipse_path {
-	/ry exch def
-	/rx exch def
-	/y exch def
-	/x exch def
-	matrix currentmatrix
-	newpath
-	x y translate
-	rx ry scale
-	0 0 1 0 360 arc
-	setmatrix
-} bind def
-
-/endpage { showpage } bind def
-/showpage { } def
-
-/layercolorseq
-	[	% layer color sequence - darkest to lightest
-		[0 0 0]
-		[.2 .8 .8]
-		[.4 .8 .8]
-		[.6 .8 .8]
-		[.8 .8 .8]
-	]
-def
-
-/layerlen layercolorseq length def
-
-/setlayer {/maxlayer exch def /curlayer exch def
-	layercolorseq curlayer 1 sub layerlen mod get
-	aload pop sethsbcolor
-	/nodecolor {nopcolor} def
-	/edgecolor {nopcolor} def
-	/graphcolor {nopcolor} def
-} bind def
-
-/onlayer { curlayer ne {invis} if } def
-
-/onlayers {
-	/myupper exch def
-	/mylower exch def
-	curlayer mylower lt
-	curlayer myupper gt
-	or
-	{invis} if
-} def
-
-/curlayer 0 def
-
-%%EndResource
-%%EndProlog
-%%BeginSetup
-14 default-font-family set_font
-1 setmiterlimit
-% /arrowlength 10 def
-% /arrowwidth 5 def
-
-% make sure pdfmark is harmless for PS-interpreters other than Distiller
-/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
-% make '<<' and '>>' safe on PS Level 1 devices
-/languagelevel where {pop languagelevel}{1} ifelse
-2 lt {
-    userdict (<<) cvn ([) cvn load put
-    userdict (>>) cvn ([) cvn load put
-} if
-
-%%EndSetup
-setupLatin1
-%%Page: 1 1
-%%PageBoundingBox: 36 36 656 322
-%%PageOrientation: Portrait
-0 0 1 beginpage
-gsave
-36 36 620 286 boxprim clip newpath
-1 1 set_scale 0 rotate 40 41 translate
-% GAA
-gsave
-1 setlinewidth
-0 0 0 nodecolor
-newpath 0 75 moveto
-0 205 lineto
-56 205 lineto
-56 75 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-12 188.4 moveto 32 (GAA) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 0 179 moveto
-56 179 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-14 162.4 moveto 28 (5':[]) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 0 153 moveto
-56 153 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-8 136.4 moveto 40 (~5':[]) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 0 127 moveto
-56 127 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-16.5 110.4 moveto 23 (1.0) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 0 101 moveto
-56 101 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-12 84.4 moveto 32 (GAA) alignedtext
-grestore
-% AGA
-gsave
-1 setlinewidth
-0 0 0 nodecolor
-newpath 140 75 moveto
-140 205 lineto
-196 205 lineto
-196 75 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-152.5 188.4 moveto 31 (AGA) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 140 179 moveto
-196 179 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-154 162.4 moveto 28 (5':[]) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 140 153 moveto
-196 153 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-148 136.4 moveto 40 (~5':[]) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 140 127 moveto
-196 127 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-156.5 110.4 moveto 23 (1.0) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 140 101 moveto
-196 101 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-152.5 84.4 moveto 31 (AGA) alignedtext
-grestore
-% GAA->AGA
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 56.33 140 moveto
-77.39 140 106.37 140 129.53 140 curveto
-stroke
-0 1 1 edgecolor
-newpath 129.71 143.5 moveto
-139.71 140 lineto
-129.71 136.5 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 129.71 143.5 moveto
-139.71 140 lineto
-129.71 136.5 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-74 145.4 moveto 48 (RR: [1]) alignedtext
-grestore
-% AGA->GAA
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 139.51 123.99 moveto
-133.87 121.51 127.87 119.33 122 118 curveto
-101.2 113.28 94.8 113.28 74 118 curveto
-71.34 118.6 68.65 119.38 65.99 120.28 curveto
-stroke
-0 0 0 edgecolor
-newpath 64.53 117.09 moveto
-56.49 123.99 lineto
-67.08 123.61 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 64.53 117.09 moveto
-56.49 123.99 lineto
-67.08 123.61 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-75.5 123.4 moveto 45 (FF: [1]) alignedtext
-grestore
-% CTA
-gsave
-1 setlinewidth
-0 0 0 nodecolor
-newpath 278 75 moveto
-278 205 lineto
-334 205 lineto
-334 75 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-292 188.4 moveto 28 (CTA) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 278 179 moveto
-334 179 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-292 162.4 moveto 28 (5':[]) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 278 153 moveto
-334 153 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-286 136.4 moveto 40 (~5':[]) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 278 127 moveto
-334 127 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-294.5 110.4 moveto 23 (1.0) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 278 101 moveto
-334 101 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-292 84.4 moveto 28 (CTA) alignedtext
-grestore
-% AGA->CTA
-gsave
-1 setlinewidth
-0.33333 1 1 edgecolor
-newpath 196.26 140 moveto
-216.82 140 244.89 140 267.5 140 curveto
-stroke
-0.33333 1 1 edgecolor
-newpath 267.78 143.5 moveto
-277.78 140 lineto
-267.78 136.5 lineto
-closepath fill
-1 setlinewidth
-solid
-0.33333 1 1 edgecolor
-newpath 267.78 143.5 moveto
-277.78 140 lineto
-267.78 136.5 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-214 145.4 moveto 46 (RF: [1]) alignedtext
-grestore
-% CTA->AGA
-gsave
-1 setlinewidth
-0.33333 1 1 edgecolor
-newpath 277.51 123.99 moveto
-271.87 121.51 265.87 119.33 260 118 curveto
-240.06 113.48 233.94 113.48 214 118 curveto
-211.34 118.6 208.65 119.38 205.99 120.28 curveto
-stroke
-0.33333 1 1 edgecolor
-newpath 204.53 117.09 moveto
-196.49 123.99 lineto
-207.08 123.61 lineto
-closepath fill
-1 setlinewidth
-solid
-0.33333 1 1 edgecolor
-newpath 204.53 117.09 moveto
-196.49 123.99 lineto
-207.08 123.61 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-214 123.4 moveto 46 (RF: [1]) alignedtext
-grestore
-% ATA
-gsave
-1 setlinewidth
-0 0 0 nodecolor
-newpath 416 148 moveto
-416 278 lineto
-472 278 lineto
-472 148 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-430 261.4 moveto 28 (ATA) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 416 252 moveto
-472 252 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-430 235.4 moveto 28 (5':[]) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 416 226 moveto
-472 226 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-424 209.4 moveto 40 (~5':[]) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 416 200 moveto
-472 200 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-432.5 183.4 moveto 23 (1.0) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 416 174 moveto
-472 174 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-430 157.4 moveto 28 (ATA) alignedtext
-grestore
-% CTA->ATA
-gsave
-1 setlinewidth
-0.66667 1 1 edgecolor
-newpath 334.24 175.16 moveto
-339.69 180.37 345.68 185.25 352 189 curveto
-368.22 198.64 388.29 204.45 405.54 207.94 curveto
-stroke
-0.66667 1 1 edgecolor
-newpath 405.4 211.47 moveto
-415.86 209.82 lineto
-406.65 204.58 lineto
-closepath fill
-1 setlinewidth
-solid
-0.66667 1 1 edgecolor
-newpath 405.4 211.47 moveto
-415.86 209.82 lineto
-406.65 204.58 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-352 212.4 moveto 46 (FR: [1]) alignedtext
-grestore
-% AGC
-gsave
-1 setlinewidth
-0 0 0 nodecolor
-newpath 416 0 moveto
-416 130 lineto
-472 130 lineto
-472 0 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-428.5 113.4 moveto 31 (AGC) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 416 104 moveto
-472 104 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-430 87.4 moveto 28 (5':[]) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 416 78 moveto
-472 78 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-424 61.4 moveto 40 (~5':[]) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 416 52 moveto
-472 52 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-432.5 35.4 moveto 23 (0.0) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 416 26 moveto
-472 26 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-441.5 9.4 moveto 5 ( ) alignedtext
-grestore
-% CTA->AGC
-gsave
-1 setlinewidth
-0.66667 1 1 edgecolor
-newpath 334.07 128.86 moveto
-352.67 121.08 377.34 109.97 398 98 curveto
-401.16 96.17 404.38 94.17 407.56 92.1 curveto
-stroke
-0.66667 1 1 edgecolor
-newpath 409.54 94.98 moveto
-415.86 86.48 lineto
-405.62 89.18 lineto
-closepath fill
-1 setlinewidth
-solid
-0.66667 1 1 edgecolor
-newpath 409.54 94.98 moveto
-415.86 86.48 lineto
-405.62 89.18 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-352 126.4 moveto 46 (FR: [0]) alignedtext
-grestore
-% ATA->CTA
-gsave
-1 setlinewidth
-0.66667 1 1 edgecolor
-newpath 415.76 183.92 moveto
-410.19 179.17 404.15 174.62 398 171 curveto
-381.37 161.2 361.21 153.96 344 148.96 curveto
-stroke
-0.66667 1 1 edgecolor
-newpath 344.83 145.56 moveto
-334.26 146.27 lineto
-342.97 152.31 lineto
-closepath fill
-1 setlinewidth
-solid
-0.66667 1 1 edgecolor
-newpath 344.83 145.56 moveto
-334.26 146.27 lineto
-342.97 152.31 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-352 176.4 moveto 46 (FR: [1]) alignedtext
-grestore
-% AAT
-gsave
-0 0 0.75294 nodecolor
-newpath 556 147 moveto
-556 277 lineto
-612 277 lineto
-612 147 lineto
-closepath fill
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 556 147 moveto
-556 277 lineto
-612 277 lineto
-612 147 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-569.5 260.4 moveto 29 (AAT) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 556 251 moveto
-612 251 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-565.5 234.4 moveto 37 (5':[1]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 556 225 moveto
-612 225 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-564 208.4 moveto 40 (~5':[]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 556 199 moveto
-612 199 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-572.5 182.4 moveto 23 (1.0) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 556 173 moveto
-612 173 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-569.5 156.4 moveto 29 (AAT) alignedtext
-grestore
-% ATA->AAT
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 472.33 212.8 moveto
-493.39 212.65 522.37 212.44 545.53 212.27 curveto
-stroke
-0 1 1 edgecolor
-newpath 545.74 215.77 moveto
-555.71 212.2 lineto
-545.69 208.77 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 545.74 215.77 moveto
-555.71 212.2 lineto
-545.69 208.77 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-490 218.4 moveto 48 (RR: [1]) alignedtext
-grestore
-% AAT->ATA
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 555.95 196.92 moveto
-550.17 194.47 544 192.31 538 191 curveto
-517.15 186.47 510.8 186.28 490 191 curveto
-487.34 191.6 484.65 192.38 481.99 193.28 curveto
-stroke
-0 0 0 edgecolor
-newpath 480.53 190.09 moveto
-472.49 196.99 lineto
-483.08 196.61 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 480.53 190.09 moveto
-472.49 196.99 lineto
-483.08 196.61 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-491.5 196.4 moveto 45 (FF: [1]) alignedtext
-grestore
-% AGC->CTA
-gsave
-1 setlinewidth
-0.66667 1 1 edgecolor
-newpath 415.59 64.31 moveto
-396.4 65.07 371.16 68.53 352 80 curveto
-348.33 82.2 344.84 84.81 341.56 87.7 curveto
-stroke
-0.66667 1 1 edgecolor
-newpath 338.95 85.35 moveto
-334.26 94.86 lineto
-343.85 90.35 lineto
-closepath fill
-1 setlinewidth
-solid
-0.66667 1 1 edgecolor
-newpath 338.95 85.35 moveto
-334.26 94.86 lineto
-343.85 90.35 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-352 85.4 moveto 46 (FR: [0]) alignedtext
-grestore
-endpage
-showpage
-grestore
-%%PageTrailer
-%%EndPage: 1
-%%Trailer
-%%Pages: 1
-%%BoundingBox: 36 36 656 322
-end
-restore
-%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/SmallGenome/.txt.crc b/genomix/genomix-pregelix/data/TestSet/TipRemove/FR_Tip/statistics
old mode 100644
new mode 100755
similarity index 100%
copy from genomix/genomix-pregelix/data/TestSet/TipRemove/SmallGenome/.txt.crc
copy to genomix/genomix-pregelix/data/TestSet/TipRemove/FR_Tip/statistics
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/FR_Tip/txt b/genomix/genomix-pregelix/data/TestSet/TipRemove/FR_Tip/txt
index 2b549e1..16d0f51 100755
--- a/genomix/genomix-pregelix/data/TestSet/TipRemove/FR_Tip/txt
+++ b/genomix/genomix-pregelix/data/TestSet/TipRemove/FR_Tip/txt
@@ -1,6 +1,6 @@
-GAA	{[]	[]	[]	[{AGA:[1]}]	{5':[], ~5':[]}	GAA	1.0x}
-AGA	{[{GAA:[1]}]	[]	[{CTA:[1]}]	[]	{5':[], ~5':[]}	AGA	1.0x}
-ATA	{[]	[{CTA:[1]}]	[]	[{AAT:[1]}]	{5':[], ~5':[]}	ATA	1.0x}
-AGC	{[]	[{CTA:[0]}]	[]	[]	{5':[], ~5':[]}		0.0x}
-AAT	{[{ATA:[1]}]	[]	[]	[]	{5':[(1-0_0)], ~5':[]}	AAT	1.0x}
-CTA	{[]	[{ATA:[1]},{AGC:[0]}]	[{AGA:[1]}]	[]	{5':[], ~5':[]}	CTA	1.0x}
+GAA	{[]	[]	[]	[{AGA:[1]}]	{5':[], ~5':[]}	GAA	1.0x}	IS_NON
+AGA	{[{GAA:[1]}]	[]	[{CTA:[1]}]	[]	{5':[], ~5':[]}	AGA	1.0x}	IS_NON
+ATA	{[]	[{CTA:[1]}]	[]	[{AAT:[1]}]	{5':[], ~5':[]}	ATA	1.0x}	IS_NON
+AGC	{[]	[{CTA:[0]}]	[]	[]	{5':[], ~5':[]}		0.0x}	IS_NON
+AAT	{[{ATA:[1]}]	[]	[]	[]	{5':[(1-0_0)], ~5':[]}	AAT	1.0x}	IS_NON
+CTA	{[]	[{ATA:[1]},{AGC:[0]}]	[{AGA:[1]}]	[]	{5':[], ~5':[]}	CTA	1.0x}	IS_NON
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/SmallGenome/.txt.crc b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/.statistics.crc
similarity index 100%
copy from genomix/genomix-pregelix/data/TestSet/TipRemove/SmallGenome/.txt.crc
copy to genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/.statistics.crc
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/.part-0.crc b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/.part-0.crc
index dbb171a..9a96e5d 100644
--- a/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/.part-0.crc
+++ b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/.part-1.crc b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/.part-1.crc
index 5973fb2..c78e320 100644
--- a/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/.part-1.crc
+++ b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/part-0 b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/part-0
index 8bf8a00..d561373 100755
--- a/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/part-0
+++ b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/part-1 b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/part-1
index 88d597c..82ca566 100755
--- a/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/part-1
+++ b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/graphviz.svg b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/graphviz.svg
new file mode 100644
index 0000000..724495a
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/graphviz.svg
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.26.3 (20100126.1600)
+ -->
+<!-- Title: G Pages: 1 -->
+<svg width="620pt" height="286pt"
+ viewBox="0.00 0.00 620.00 286.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph1" class="graph" transform="scale(1 1) rotate(0) translate(4 282)">
+<title>G</title>
+<polygon fill="white" stroke="white" points="-4,5 -4,-282 617,-282 617,5 -4,5"/>
+<!-- GAA -->
+<g id="node1" class="node"><title>GAA</title>
+<polygon fill="none" stroke="black" points="0,-75 0,-205 56,-205 56,-75 0,-75"/>
+<text text-anchor="middle" x="28" y="-188.4" font-family="Times Roman,serif" font-size="14.00">GAA</text>
+<polyline fill="none" stroke="black" points="0,-179 56,-179 "/>
+<text text-anchor="middle" x="28" y="-162.4" font-family="Times Roman,serif" font-size="14.00">5&#39;:[]</text>
+<polyline fill="none" stroke="black" points="0,-153 56,-153 "/>
+<text text-anchor="middle" x="28" y="-136.4" font-family="Times Roman,serif" font-size="14.00">~5&#39;:[]</text>
+<polyline fill="none" stroke="black" points="0,-127 56,-127 "/>
+<text text-anchor="middle" x="28" y="-110.4" font-family="Times Roman,serif" font-size="14.00">1.0</text>
+<polyline fill="none" stroke="black" points="0,-101 56,-101 "/>
+<text text-anchor="middle" x="28" y="-84.4" font-family="Times Roman,serif" font-size="14.00">GAA</text>
+</g>
+<!-- AGA -->
+<g id="node3" class="node"><title>AGA</title>
+<polygon fill="none" stroke="black" points="140,-75 140,-205 196,-205 196,-75 140,-75"/>
+<text text-anchor="middle" x="168" y="-188.4" font-family="Times Roman,serif" font-size="14.00">AGA</text>
+<polyline fill="none" stroke="black" points="140,-179 196,-179 "/>
+<text text-anchor="middle" x="168" y="-162.4" font-family="Times Roman,serif" font-size="14.00">5&#39;:[]</text>
+<polyline fill="none" stroke="black" points="140,-153 196,-153 "/>
+<text text-anchor="middle" x="168" y="-136.4" font-family="Times Roman,serif" font-size="14.00">~5&#39;:[]</text>
+<polyline fill="none" stroke="black" points="140,-127 196,-127 "/>
+<text text-anchor="middle" x="168" y="-110.4" font-family="Times Roman,serif" font-size="14.00">1.0</text>
+<polyline fill="none" stroke="black" points="140,-101 196,-101 "/>
+<text text-anchor="middle" x="168" y="-84.4" font-family="Times Roman,serif" font-size="14.00">AGA</text>
+</g>
+<!-- GAA&#45;&gt;AGA -->
+<g id="edge2" class="edge"><title>GAA&#45;&gt;AGA</title>
+<path fill="none" stroke="red" d="M56.3311,-140C77.3945,-140 106.372,-140 129.53,-140"/>
+<polygon fill="red" stroke="red" points="129.711,-143.5 139.711,-140 129.711,-136.5 129.711,-143.5"/>
+<text text-anchor="middle" x="98" y="-145.4" font-family="Times Roman,serif" font-size="14.00">RR: [1]</text>
+</g>
+<!-- AGA&#45;&gt;GAA -->
+<g id="edge4" class="edge"><title>AGA&#45;&gt;GAA</title>
+<path fill="none" stroke="black" d="M139.511,-123.987C133.868,-121.508 127.871,-119.332 122,-118 101.195,-113.281 94.8048,-113.281 74,-118 71.3399,-118.603 68.6538,-119.38 65.9864,-120.28"/>
+<polygon fill="black" stroke="black" points="64.5325,-117.09 56.4893,-123.987 67.0775,-123.611 64.5325,-117.09"/>
+<text text-anchor="middle" x="98" y="-123.4" font-family="Times Roman,serif" font-size="14.00">FF: [1]</text>
+</g>
+<!-- CTA -->
+<g id="node6" class="node"><title>CTA</title>
+<polygon fill="none" stroke="black" points="278,-75 278,-205 334,-205 334,-75 278,-75"/>
+<text text-anchor="middle" x="306" y="-188.4" font-family="Times Roman,serif" font-size="14.00">CTA</text>
+<polyline fill="none" stroke="black" points="278,-179 334,-179 "/>
+<text text-anchor="middle" x="306" y="-162.4" font-family="Times Roman,serif" font-size="14.00">5&#39;:[]</text>
+<polyline fill="none" stroke="black" points="278,-153 334,-153 "/>
+<text text-anchor="middle" x="306" y="-136.4" font-family="Times Roman,serif" font-size="14.00">~5&#39;:[]</text>
+<polyline fill="none" stroke="black" points="278,-127 334,-127 "/>
+<text text-anchor="middle" x="306" y="-110.4" font-family="Times Roman,serif" font-size="14.00">1.0</text>
+<polyline fill="none" stroke="black" points="278,-101 334,-101 "/>
+<text text-anchor="middle" x="306" y="-84.4" font-family="Times Roman,serif" font-size="14.00">CTA</text>
+</g>
+<!-- AGA&#45;&gt;CTA -->
+<g id="edge6" class="edge"><title>AGA&#45;&gt;CTA</title>
+<path fill="none" stroke="green" d="M196.259,-140C216.818,-140 244.894,-140 267.501,-140"/>
+<polygon fill="green" stroke="green" points="267.778,-143.5 277.778,-140 267.778,-136.5 267.778,-143.5"/>
+<text text-anchor="middle" x="237" y="-145.4" font-family="Times Roman,serif" font-size="14.00">RF: [1]</text>
+</g>
+<!-- CTA&#45;&gt;AGA -->
+<g id="edge18" class="edge"><title>CTA&#45;&gt;AGA</title>
+<path fill="none" stroke="green" d="M277.511,-123.987C271.868,-121.508 265.871,-119.332 260,-118 240.062,-113.478 233.938,-113.478 214,-118 211.34,-118.603 208.654,-119.38 205.986,-120.28"/>
+<polygon fill="green" stroke="green" points="204.532,-117.09 196.489,-123.987 207.078,-123.611 204.532,-117.09"/>
+<text text-anchor="middle" x="237" y="-123.4" font-family="Times Roman,serif" font-size="14.00">RF: [1]</text>
+</g>
+<!-- ATA -->
+<g id="node7" class="node"><title>ATA</title>
+<polygon fill="none" stroke="black" points="416,-148 416,-278 472,-278 472,-148 416,-148"/>
+<text text-anchor="middle" x="444" y="-261.4" font-family="Times Roman,serif" font-size="14.00">ATA</text>
+<polyline fill="none" stroke="black" points="416,-252 472,-252 "/>
+<text text-anchor="middle" x="444" y="-235.4" font-family="Times Roman,serif" font-size="14.00">5&#39;:[]</text>
+<polyline fill="none" stroke="black" points="416,-226 472,-226 "/>
+<text text-anchor="middle" x="444" y="-209.4" font-family="Times Roman,serif" font-size="14.00">~5&#39;:[]</text>
+<polyline fill="none" stroke="black" points="416,-200 472,-200 "/>
+<text text-anchor="middle" x="444" y="-183.4" font-family="Times Roman,serif" font-size="14.00">1.0</text>
+<polyline fill="none" stroke="black" points="416,-174 472,-174 "/>
+<text text-anchor="middle" x="444" y="-157.4" font-family="Times Roman,serif" font-size="14.00">ATA</text>
+</g>
+<!-- CTA&#45;&gt;ATA -->
+<g id="edge16" class="edge"><title>CTA&#45;&gt;ATA</title>
+<path fill="none" stroke="blue" d="M334.238,-175.156C339.685,-180.371 345.68,-185.245 352,-189 368.218,-198.635 388.29,-204.451 405.543,-207.937"/>
+<polygon fill="blue" stroke="blue" points="405.396,-211.467 415.862,-209.819 406.653,-204.581 405.396,-211.467"/>
+<text text-anchor="middle" x="375" y="-212.4" font-family="Times Roman,serif" font-size="14.00">FR: [1]</text>
+</g>
+<!-- AGC -->
+<g id="node11" class="node"><title>AGC</title>
+<polygon fill="none" stroke="black" points="416,-0 416,-130 472,-130 472,-0 416,-0"/>
+<text text-anchor="middle" x="444" y="-113.4" font-family="Times Roman,serif" font-size="14.00">AGC</text>
+<polyline fill="none" stroke="black" points="416,-104 472,-104 "/>
+<text text-anchor="middle" x="444" y="-87.4" font-family="Times Roman,serif" font-size="14.00">5&#39;:[]</text>
+<polyline fill="none" stroke="black" points="416,-78 472,-78 "/>
+<text text-anchor="middle" x="444" y="-61.4" font-family="Times Roman,serif" font-size="14.00">~5&#39;:[]</text>
+<polyline fill="none" stroke="black" points="416,-52 472,-52 "/>
+<text text-anchor="middle" x="444" y="-35.4" font-family="Times Roman,serif" font-size="14.00">0.0</text>
+<polyline fill="none" stroke="black" points="416,-26 472,-26 "/>
+<text text-anchor="middle" x="444" y="-9.4" font-family="Times Roman,serif" font-size="14.00"> </text>
+</g>
+<!-- CTA&#45;&gt;AGC -->
+<g id="edge20" class="edge"><title>CTA&#45;&gt;AGC</title>
+<path fill="none" stroke="green" d="M334.075,-128.859C352.667,-121.079 377.341,-109.974 398,-98 401.162,-96.1672 404.376,-94.1705 407.561,-92.0962"/>
+<polygon fill="green" stroke="green" points="409.539,-94.9835 415.864,-86.4835 405.619,-89.1841 409.539,-94.9835"/>
+<text text-anchor="middle" x="375" y="-126.4" font-family="Times Roman,serif" font-size="14.00">RF: [0]</text>
+</g>
+<!-- ATA&#45;&gt;CTA -->
+<g id="edge8" class="edge"><title>ATA&#45;&gt;CTA</title>
+<path fill="none" stroke="blue" d="M415.758,-183.923C410.185,-179.17 404.149,-174.624 398,-171 381.37,-161.201 361.207,-153.965 344.001,-148.96"/>
+<polygon fill="blue" stroke="blue" points="344.832,-145.559 334.261,-146.269 342.967,-152.306 344.832,-145.559"/>
+<text text-anchor="middle" x="375" y="-176.4" font-family="Times Roman,serif" font-size="14.00">FR: [1]</text>
+</g>
+<!-- AAT -->
+<g id="node10" class="node"><title>AAT</title>
+<polygon fill="grey" stroke="black" points="556,-147 556,-277 612,-277 612,-147 556,-147"/>
+<text text-anchor="middle" x="584" y="-260.4" font-family="Times Roman,serif" font-size="14.00">AAT</text>
+<polyline fill="none" stroke="black" points="556,-251 612,-251 "/>
+<text text-anchor="middle" x="584" y="-234.4" font-family="Times Roman,serif" font-size="14.00">5&#39;:[1]</text>
+<polyline fill="none" stroke="black" points="556,-225 612,-225 "/>
+<text text-anchor="middle" x="584" y="-208.4" font-family="Times Roman,serif" font-size="14.00">~5&#39;:[]</text>
+<polyline fill="none" stroke="black" points="556,-199 612,-199 "/>
+<text text-anchor="middle" x="584" y="-182.4" font-family="Times Roman,serif" font-size="14.00">1.0</text>
+<polyline fill="none" stroke="black" points="556,-173 612,-173 "/>
+<text text-anchor="middle" x="584" y="-156.4" font-family="Times Roman,serif" font-size="14.00">AAT</text>
+</g>
+<!-- ATA&#45;&gt;AAT -->
+<g id="edge10" class="edge"><title>ATA&#45;&gt;AAT</title>
+<path fill="none" stroke="red" d="M472.331,-212.798C493.395,-212.647 522.372,-212.44 545.53,-212.275"/>
+<polygon fill="red" stroke="red" points="545.736,-215.773 555.711,-212.202 545.686,-208.774 545.736,-215.773"/>
+<text text-anchor="middle" x="514" y="-218.4" font-family="Times Roman,serif" font-size="14.00">RR: [1]</text>
+</g>
+<!-- AAT&#45;&gt;ATA -->
+<g id="edge14" class="edge"><title>AAT&#45;&gt;ATA</title>
+<path fill="none" stroke="black" d="M555.947,-196.92C550.165,-194.468 544.005,-192.306 538,-191 517.154,-186.467 510.805,-186.281 490,-191 487.34,-191.603 484.654,-192.38 481.986,-193.28"/>
+<polygon fill="black" stroke="black" points="480.532,-190.09 472.489,-196.987 483.078,-196.611 480.532,-190.09"/>
+<text text-anchor="middle" x="514" y="-196.4" font-family="Times Roman,serif" font-size="14.00">FF: [1]</text>
+</g>
+<!-- AGC&#45;&gt;CTA -->
+<g id="edge12" class="edge"><title>AGC&#45;&gt;CTA</title>
+<path fill="none" stroke="green" d="M415.595,-64.3145C396.401,-65.0709 371.165,-68.5339 352,-80 348.325,-82.1986 344.84,-84.8113 341.556,-87.6969"/>
+<polygon fill="green" stroke="green" points="338.945,-85.3548 334.262,-94.8585 343.85,-90.3495 338.945,-85.3548"/>
+<text text-anchor="middle" x="375" y="-85.4" font-family="Times Roman,serif" font-size="14.00">RF: [0]</text>
+</g>
+</g>
+</svg>
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/graphviz/result.ps
deleted file mode 100644
index 6dd0251..0000000
--- a/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/graphviz/result.ps
+++ /dev/null
@@ -1,718 +0,0 @@
-%!PS-Adobe-3.0
-%%Creator: graphviz version 2.26.3 (20100126.1600)
-%%Title: G
-%%Pages: (atend)
-%%BoundingBox: (atend)
-%%EndComments
-save
-%%BeginProlog
-/DotDict 200 dict def
-DotDict begin
-
-/setupLatin1 {
-mark
-/EncodingVector 256 array def
- EncodingVector 0
-
-ISOLatin1Encoding 0 255 getinterval putinterval
-EncodingVector 45 /hyphen put
-
-% Set up ISO Latin 1 character encoding
-/starnetISO {
-        dup dup findfont dup length dict begin
-        { 1 index /FID ne { def }{ pop pop } ifelse
-        } forall
-        /Encoding EncodingVector def
-        currentdict end definefont
-} def
-/Times-Roman starnetISO def
-/Times-Italic starnetISO def
-/Times-Bold starnetISO def
-/Times-BoldItalic starnetISO def
-/Helvetica starnetISO def
-/Helvetica-Oblique starnetISO def
-/Helvetica-Bold starnetISO def
-/Helvetica-BoldOblique starnetISO def
-/Courier starnetISO def
-/Courier-Oblique starnetISO def
-/Courier-Bold starnetISO def
-/Courier-BoldOblique starnetISO def
-cleartomark
-} bind def
-
-%%BeginResource: procset graphviz 0 0
-/coord-font-family /Times-Roman def
-/default-font-family /Times-Roman def
-/coordfont coord-font-family findfont 8 scalefont def
-
-/InvScaleFactor 1.0 def
-/set_scale {
-       dup 1 exch div /InvScaleFactor exch def
-       scale
-} bind def
-
-% styles
-/solid { [] 0 setdash } bind def
-/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
-/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
-/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
-/bold { 2 setlinewidth } bind def
-/filled { } bind def
-/unfilled { } bind def
-/rounded { } bind def
-/diagonals { } bind def
-
-% hooks for setting color 
-/nodecolor { sethsbcolor } bind def
-/edgecolor { sethsbcolor } bind def
-/graphcolor { sethsbcolor } bind def
-/nopcolor {pop pop pop} bind def
-
-/beginpage {	% i j npages
-	/npages exch def
-	/j exch def
-	/i exch def
-	/str 10 string def
-	npages 1 gt {
-		gsave
-			coordfont setfont
-			0 0 moveto
-			(\() show i str cvs show (,) show j str cvs show (\)) show
-		grestore
-	} if
-} bind def
-
-/set_font {
-	findfont exch
-	scalefont setfont
-} def
-
-% draw text fitted to its expected width
-/alignedtext {			% width text
-	/text exch def
-	/width exch def
-	gsave
-		width 0 gt {
-			[] 0 setdash
-			text stringwidth pop width exch sub text length div 0 text ashow
-		} if
-	grestore
-} def
-
-/boxprim {				% xcorner ycorner xsize ysize
-		4 2 roll
-		moveto
-		2 copy
-		exch 0 rlineto
-		0 exch rlineto
-		pop neg 0 rlineto
-		closepath
-} bind def
-
-/ellipse_path {
-	/ry exch def
-	/rx exch def
-	/y exch def
-	/x exch def
-	matrix currentmatrix
-	newpath
-	x y translate
-	rx ry scale
-	0 0 1 0 360 arc
-	setmatrix
-} bind def
-
-/endpage { showpage } bind def
-/showpage { } def
-
-/layercolorseq
-	[	% layer color sequence - darkest to lightest
-		[0 0 0]
-		[.2 .8 .8]
-		[.4 .8 .8]
-		[.6 .8 .8]
-		[.8 .8 .8]
-	]
-def
-
-/layerlen layercolorseq length def
-
-/setlayer {/maxlayer exch def /curlayer exch def
-	layercolorseq curlayer 1 sub layerlen mod get
-	aload pop sethsbcolor
-	/nodecolor {nopcolor} def
-	/edgecolor {nopcolor} def
-	/graphcolor {nopcolor} def
-} bind def
-
-/onlayer { curlayer ne {invis} if } def
-
-/onlayers {
-	/myupper exch def
-	/mylower exch def
-	curlayer mylower lt
-	curlayer myupper gt
-	or
-	{invis} if
-} def
-
-/curlayer 0 def
-
-%%EndResource
-%%EndProlog
-%%BeginSetup
-14 default-font-family set_font
-1 setmiterlimit
-% /arrowlength 10 def
-% /arrowwidth 5 def
-
-% make sure pdfmark is harmless for PS-interpreters other than Distiller
-/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
-% make '<<' and '>>' safe on PS Level 1 devices
-/languagelevel where {pop languagelevel}{1} ifelse
-2 lt {
-    userdict (<<) cvn ([) cvn load put
-    userdict (>>) cvn ([) cvn load put
-} if
-
-%%EndSetup
-setupLatin1
-%%Page: 1 1
-%%PageBoundingBox: 36 36 656 322
-%%PageOrientation: Portrait
-0 0 1 beginpage
-gsave
-36 36 620 286 boxprim clip newpath
-1 1 set_scale 0 rotate 40 41 translate
-% GAA
-gsave
-1 setlinewidth
-0 0 0 nodecolor
-newpath 0 75 moveto
-0 205 lineto
-56 205 lineto
-56 75 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-12 188.4 moveto 32 (GAA) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 0 179 moveto
-56 179 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-14 162.4 moveto 28 (5':[]) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 0 153 moveto
-56 153 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-8 136.4 moveto 40 (~5':[]) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 0 127 moveto
-56 127 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-16.5 110.4 moveto 23 (1.0) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 0 101 moveto
-56 101 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-12 84.4 moveto 32 (GAA) alignedtext
-grestore
-% AGA
-gsave
-1 setlinewidth
-0 0 0 nodecolor
-newpath 140 75 moveto
-140 205 lineto
-196 205 lineto
-196 75 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-152.5 188.4 moveto 31 (AGA) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 140 179 moveto
-196 179 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-154 162.4 moveto 28 (5':[]) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 140 153 moveto
-196 153 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-148 136.4 moveto 40 (~5':[]) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 140 127 moveto
-196 127 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-156.5 110.4 moveto 23 (1.0) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 140 101 moveto
-196 101 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-152.5 84.4 moveto 31 (AGA) alignedtext
-grestore
-% GAA->AGA
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 56.33 140 moveto
-77.39 140 106.37 140 129.53 140 curveto
-stroke
-0 1 1 edgecolor
-newpath 129.71 143.5 moveto
-139.71 140 lineto
-129.71 136.5 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 129.71 143.5 moveto
-139.71 140 lineto
-129.71 136.5 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-74 145.4 moveto 48 (RR: [1]) alignedtext
-grestore
-% AGA->GAA
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 139.51 123.99 moveto
-133.87 121.51 127.87 119.33 122 118 curveto
-101.2 113.28 94.8 113.28 74 118 curveto
-71.34 118.6 68.65 119.38 65.99 120.28 curveto
-stroke
-0 0 0 edgecolor
-newpath 64.53 117.09 moveto
-56.49 123.99 lineto
-67.08 123.61 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 64.53 117.09 moveto
-56.49 123.99 lineto
-67.08 123.61 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-75.5 123.4 moveto 45 (FF: [1]) alignedtext
-grestore
-% CTA
-gsave
-1 setlinewidth
-0 0 0 nodecolor
-newpath 278 75 moveto
-278 205 lineto
-334 205 lineto
-334 75 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-292 188.4 moveto 28 (CTA) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 278 179 moveto
-334 179 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-292 162.4 moveto 28 (5':[]) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 278 153 moveto
-334 153 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-286 136.4 moveto 40 (~5':[]) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 278 127 moveto
-334 127 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-294.5 110.4 moveto 23 (1.0) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 278 101 moveto
-334 101 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-292 84.4 moveto 28 (CTA) alignedtext
-grestore
-% AGA->CTA
-gsave
-1 setlinewidth
-0.33333 1 1 edgecolor
-newpath 196.26 140 moveto
-216.82 140 244.89 140 267.5 140 curveto
-stroke
-0.33333 1 1 edgecolor
-newpath 267.78 143.5 moveto
-277.78 140 lineto
-267.78 136.5 lineto
-closepath fill
-1 setlinewidth
-solid
-0.33333 1 1 edgecolor
-newpath 267.78 143.5 moveto
-277.78 140 lineto
-267.78 136.5 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-214 145.4 moveto 46 (RF: [1]) alignedtext
-grestore
-% CTA->AGA
-gsave
-1 setlinewidth
-0.33333 1 1 edgecolor
-newpath 277.51 123.99 moveto
-271.87 121.51 265.87 119.33 260 118 curveto
-240.06 113.48 233.94 113.48 214 118 curveto
-211.34 118.6 208.65 119.38 205.99 120.28 curveto
-stroke
-0.33333 1 1 edgecolor
-newpath 204.53 117.09 moveto
-196.49 123.99 lineto
-207.08 123.61 lineto
-closepath fill
-1 setlinewidth
-solid
-0.33333 1 1 edgecolor
-newpath 204.53 117.09 moveto
-196.49 123.99 lineto
-207.08 123.61 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-214 123.4 moveto 46 (RF: [1]) alignedtext
-grestore
-% ATA
-gsave
-1 setlinewidth
-0 0 0 nodecolor
-newpath 416 148 moveto
-416 278 lineto
-472 278 lineto
-472 148 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-430 261.4 moveto 28 (ATA) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 416 252 moveto
-472 252 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-430 235.4 moveto 28 (5':[]) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 416 226 moveto
-472 226 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-424 209.4 moveto 40 (~5':[]) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 416 200 moveto
-472 200 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-432.5 183.4 moveto 23 (1.0) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 416 174 moveto
-472 174 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-430 157.4 moveto 28 (ATA) alignedtext
-grestore
-% CTA->ATA
-gsave
-1 setlinewidth
-0.66667 1 1 edgecolor
-newpath 334.24 175.16 moveto
-339.69 180.37 345.68 185.25 352 189 curveto
-368.22 198.64 388.29 204.45 405.54 207.94 curveto
-stroke
-0.66667 1 1 edgecolor
-newpath 405.4 211.47 moveto
-415.86 209.82 lineto
-406.65 204.58 lineto
-closepath fill
-1 setlinewidth
-solid
-0.66667 1 1 edgecolor
-newpath 405.4 211.47 moveto
-415.86 209.82 lineto
-406.65 204.58 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-352 212.4 moveto 46 (FR: [1]) alignedtext
-grestore
-% AGC
-gsave
-1 setlinewidth
-0 0 0 nodecolor
-newpath 416 0 moveto
-416 130 lineto
-472 130 lineto
-472 0 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-428.5 113.4 moveto 31 (AGC) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 416 104 moveto
-472 104 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-430 87.4 moveto 28 (5':[]) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 416 78 moveto
-472 78 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-424 61.4 moveto 40 (~5':[]) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 416 52 moveto
-472 52 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-432.5 35.4 moveto 23 (0.0) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 416 26 moveto
-472 26 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-441.5 9.4 moveto 5 ( ) alignedtext
-grestore
-% CTA->AGC
-gsave
-1 setlinewidth
-0.33333 1 1 edgecolor
-newpath 334.07 128.86 moveto
-352.67 121.08 377.34 109.97 398 98 curveto
-401.16 96.17 404.38 94.17 407.56 92.1 curveto
-stroke
-0.33333 1 1 edgecolor
-newpath 409.54 94.98 moveto
-415.86 86.48 lineto
-405.62 89.18 lineto
-closepath fill
-1 setlinewidth
-solid
-0.33333 1 1 edgecolor
-newpath 409.54 94.98 moveto
-415.86 86.48 lineto
-405.62 89.18 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-352 126.4 moveto 46 (RF: [0]) alignedtext
-grestore
-% ATA->CTA
-gsave
-1 setlinewidth
-0.66667 1 1 edgecolor
-newpath 415.76 183.92 moveto
-410.19 179.17 404.15 174.62 398 171 curveto
-381.37 161.2 361.21 153.96 344 148.96 curveto
-stroke
-0.66667 1 1 edgecolor
-newpath 344.83 145.56 moveto
-334.26 146.27 lineto
-342.97 152.31 lineto
-closepath fill
-1 setlinewidth
-solid
-0.66667 1 1 edgecolor
-newpath 344.83 145.56 moveto
-334.26 146.27 lineto
-342.97 152.31 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-352 176.4 moveto 46 (FR: [1]) alignedtext
-grestore
-% AAT
-gsave
-0 0 0.75294 nodecolor
-newpath 556 147 moveto
-556 277 lineto
-612 277 lineto
-612 147 lineto
-closepath fill
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 556 147 moveto
-556 277 lineto
-612 277 lineto
-612 147 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-569.5 260.4 moveto 29 (AAT) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 556 251 moveto
-612 251 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-565.5 234.4 moveto 37 (5':[1]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 556 225 moveto
-612 225 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-564 208.4 moveto 40 (~5':[]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 556 199 moveto
-612 199 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-572.5 182.4 moveto 23 (1.0) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 556 173 moveto
-612 173 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-569.5 156.4 moveto 29 (AAT) alignedtext
-grestore
-% ATA->AAT
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 472.33 212.8 moveto
-493.39 212.65 522.37 212.44 545.53 212.27 curveto
-stroke
-0 1 1 edgecolor
-newpath 545.74 215.77 moveto
-555.71 212.2 lineto
-545.69 208.77 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 545.74 215.77 moveto
-555.71 212.2 lineto
-545.69 208.77 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-490 218.4 moveto 48 (RR: [1]) alignedtext
-grestore
-% AAT->ATA
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 555.95 196.92 moveto
-550.17 194.47 544 192.31 538 191 curveto
-517.15 186.47 510.8 186.28 490 191 curveto
-487.34 191.6 484.65 192.38 481.99 193.28 curveto
-stroke
-0 0 0 edgecolor
-newpath 480.53 190.09 moveto
-472.49 196.99 lineto
-483.08 196.61 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 480.53 190.09 moveto
-472.49 196.99 lineto
-483.08 196.61 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-491.5 196.4 moveto 45 (FF: [1]) alignedtext
-grestore
-% AGC->CTA
-gsave
-1 setlinewidth
-0.33333 1 1 edgecolor
-newpath 415.59 64.31 moveto
-396.4 65.07 371.16 68.53 352 80 curveto
-348.33 82.2 344.84 84.81 341.56 87.7 curveto
-stroke
-0.33333 1 1 edgecolor
-newpath 338.95 85.35 moveto
-334.26 94.86 lineto
-343.85 90.35 lineto
-closepath fill
-1 setlinewidth
-solid
-0.33333 1 1 edgecolor
-newpath 338.95 85.35 moveto
-334.26 94.86 lineto
-343.85 90.35 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-352 85.4 moveto 46 (RF: [0]) alignedtext
-grestore
-endpage
-showpage
-grestore
-%%PageTrailer
-%%EndPage: 1
-%%Trailer
-%%Pages: 1
-%%BoundingBox: 36 36 656 322
-end
-restore
-%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/SmallGenome/.txt.crc b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/statistics
old mode 100644
new mode 100755
similarity index 100%
copy from genomix/genomix-pregelix/data/TestSet/TipRemove/SmallGenome/.txt.crc
copy to genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/statistics
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/txt b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/txt
index bd88d08..c61fe5f 100755
--- a/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/txt
+++ b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/txt
@@ -1,6 +1,6 @@
-GAA	{[]	[]	[]	[{AGA:[1]}]	{5':[], ~5':[]}	GAA	1.0x}
-AGA	{[{GAA:[1]}]	[]	[{CTA:[1]}]	[]	{5':[], ~5':[]}	AGA	1.0x}
-ATA	{[]	[{CTA:[1]}]	[]	[{AAT:[1]}]	{5':[], ~5':[]}	ATA	1.0x}
-AGC	{[]	[]	[{CTA:[0]}]	[]	{5':[], ~5':[]}		0.0x}
-AAT	{[{ATA:[1]}]	[]	[]	[]	{5':[(1-0_0)], ~5':[]}	AAT	1.0x}
-CTA	{[]	[{ATA:[1]}]	[{AGA:[1]},{AGC:[0]}]	[]	{5':[], ~5':[]}	CTA	1.0x}
+GAA	{[]	[]	[]	[{AGA:[1]}]	{5':[], ~5':[]}	GAA	1.0x}	IS_NON
+AGA	{[{GAA:[1]}]	[]	[{CTA:[1]}]	[]	{5':[], ~5':[]}	AGA	1.0x}	IS_NON
+ATA	{[]	[{CTA:[1]}]	[]	[{AAT:[1]}]	{5':[], ~5':[]}	ATA	1.0x}	IS_NON
+AGC	{[]	[]	[{CTA:[0]}]	[]	{5':[], ~5':[]}		0.0x}	IS_NON
+AAT	{[{ATA:[1]}]	[]	[]	[]	{5':[(1-0_0)], ~5':[]}	AAT	1.0x}	IS_NON
+CTA	{[]	[{ATA:[1]}]	[{AGA:[1]},{AGC:[0]}]	[]	{5':[], ~5':[]}	CTA	1.0x}	IS_NON
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/SmallGenome/bin/.part-0.crc b/genomix/genomix-pregelix/data/TestSet/TipRemove/SmallGenome/bin/.part-0.crc
deleted file mode 100644
index f00c109..0000000
--- a/genomix/genomix-pregelix/data/TestSet/TipRemove/SmallGenome/bin/.part-0.crc
+++ /dev/null
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/SmallGenome/bin/.part-1.crc b/genomix/genomix-pregelix/data/TestSet/TipRemove/SmallGenome/bin/.part-1.crc
deleted file mode 100644
index 6697cda..0000000
--- a/genomix/genomix-pregelix/data/TestSet/TipRemove/SmallGenome/bin/.part-1.crc
+++ /dev/null
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/SmallGenome/bin/part-0 b/genomix/genomix-pregelix/data/TestSet/TipRemove/SmallGenome/bin/part-0
deleted file mode 100755
index 49d9115..0000000
--- a/genomix/genomix-pregelix/data/TestSet/TipRemove/SmallGenome/bin/part-0
+++ /dev/null
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/SmallGenome/bin/part-1 b/genomix/genomix-pregelix/data/TestSet/TipRemove/SmallGenome/bin/part-1
deleted file mode 100755
index 0426e00..0000000
--- a/genomix/genomix-pregelix/data/TestSet/TipRemove/SmallGenome/bin/part-1
+++ /dev/null
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/SmallGenome/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/TipRemove/SmallGenome/graphviz/result.ps
deleted file mode 100644
index 197adb8..0000000
--- a/genomix/genomix-pregelix/data/TestSet/TipRemove/SmallGenome/graphviz/result.ps
+++ /dev/null
@@ -1,5081 +0,0 @@
-%!PS-Adobe-3.0
-%%Creator: graphviz version 2.26.3 (20100126.1600)
-%%Title: G
-%%Pages: (atend)
-%%BoundingBox: (atend)
-%%EndComments
-save
-%%BeginProlog
-/DotDict 200 dict def
-DotDict begin
-
-/setupLatin1 {
-mark
-/EncodingVector 256 array def
- EncodingVector 0
-
-ISOLatin1Encoding 0 255 getinterval putinterval
-EncodingVector 45 /hyphen put
-
-% Set up ISO Latin 1 character encoding
-/starnetISO {
-        dup dup findfont dup length dict begin
-        { 1 index /FID ne { def }{ pop pop } ifelse
-        } forall
-        /Encoding EncodingVector def
-        currentdict end definefont
-} def
-/Times-Roman starnetISO def
-/Times-Italic starnetISO def
-/Times-Bold starnetISO def
-/Times-BoldItalic starnetISO def
-/Helvetica starnetISO def
-/Helvetica-Oblique starnetISO def
-/Helvetica-Bold starnetISO def
-/Helvetica-BoldOblique starnetISO def
-/Courier starnetISO def
-/Courier-Oblique starnetISO def
-/Courier-Bold starnetISO def
-/Courier-BoldOblique starnetISO def
-cleartomark
-} bind def
-
-%%BeginResource: procset graphviz 0 0
-/coord-font-family /Times-Roman def
-/default-font-family /Times-Roman def
-/coordfont coord-font-family findfont 8 scalefont def
-
-/InvScaleFactor 1.0 def
-/set_scale {
-       dup 1 exch div /InvScaleFactor exch def
-       scale
-} bind def
-
-% styles
-/solid { [] 0 setdash } bind def
-/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
-/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
-/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
-/bold { 2 setlinewidth } bind def
-/filled { } bind def
-/unfilled { } bind def
-/rounded { } bind def
-/diagonals { } bind def
-
-% hooks for setting color 
-/nodecolor { sethsbcolor } bind def
-/edgecolor { sethsbcolor } bind def
-/graphcolor { sethsbcolor } bind def
-/nopcolor {pop pop pop} bind def
-
-/beginpage {	% i j npages
-	/npages exch def
-	/j exch def
-	/i exch def
-	/str 10 string def
-	npages 1 gt {
-		gsave
-			coordfont setfont
-			0 0 moveto
-			(\() show i str cvs show (,) show j str cvs show (\)) show
-		grestore
-	} if
-} bind def
-
-/set_font {
-	findfont exch
-	scalefont setfont
-} def
-
-% draw text fitted to its expected width
-/alignedtext {			% width text
-	/text exch def
-	/width exch def
-	gsave
-		width 0 gt {
-			[] 0 setdash
-			text stringwidth pop width exch sub text length div 0 text ashow
-		} if
-	grestore
-} def
-
-/boxprim {				% xcorner ycorner xsize ysize
-		4 2 roll
-		moveto
-		2 copy
-		exch 0 rlineto
-		0 exch rlineto
-		pop neg 0 rlineto
-		closepath
-} bind def
-
-/ellipse_path {
-	/ry exch def
-	/rx exch def
-	/y exch def
-	/x exch def
-	matrix currentmatrix
-	newpath
-	x y translate
-	rx ry scale
-	0 0 1 0 360 arc
-	setmatrix
-} bind def
-
-/endpage { showpage } bind def
-/showpage { } def
-
-/layercolorseq
-	[	% layer color sequence - darkest to lightest
-		[0 0 0]
-		[.2 .8 .8]
-		[.4 .8 .8]
-		[.6 .8 .8]
-		[.8 .8 .8]
-	]
-def
-
-/layerlen layercolorseq length def
-
-/setlayer {/maxlayer exch def /curlayer exch def
-	layercolorseq curlayer 1 sub layerlen mod get
-	aload pop sethsbcolor
-	/nodecolor {nopcolor} def
-	/edgecolor {nopcolor} def
-	/graphcolor {nopcolor} def
-} bind def
-
-/onlayer { curlayer ne {invis} if } def
-
-/onlayers {
-	/myupper exch def
-	/mylower exch def
-	curlayer mylower lt
-	curlayer myupper gt
-	or
-	{invis} if
-} def
-
-/curlayer 0 def
-
-%%EndResource
-%%EndProlog
-%%BeginSetup
-14 default-font-family set_font
-1 setmiterlimit
-% /arrowlength 10 def
-% /arrowwidth 5 def
-
-% make sure pdfmark is harmless for PS-interpreters other than Distiller
-/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
-% make '<<' and '>>' safe on PS Level 1 devices
-/languagelevel where {pop languagelevel}{1} ifelse
-2 lt {
-    userdict (<<) cvn ([) cvn load put
-    userdict (>>) cvn ([) cvn load put
-} if
-
-%%EndSetup
-setupLatin1
-%%Page: 1 1
-%%PageBoundingBox: 36 36 12234 2334
-%%PageOrientation: Portrait
-0 0 1 beginpage
-gsave
-36 36 12198 2298 boxprim clip newpath
-1 1 set_scale 0 rotate 40 41 translate
-% AAA
-gsave
-0 0 0.75294 nodecolor
-newpath 0 608.57 moveto
-0 738.57 lineto
-132 738.57 lineto
-132 608.57 lineto
-closepath fill
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 0 608.57 moveto
-0 738.57 lineto
-132 738.57 lineto
-132 608.57 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-50.5 721.97 moveto 31 (AAA) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 0 712.57 moveto
-132 712.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-52 695.97 moveto 28 (5':[]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 0 686.57 moveto
-132 686.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-8 669.97 moveto 116 (~5':[49,54,1,67]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 0 660.57 moveto
-132 660.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-50 643.97 moveto 32 (25.0) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 0 634.57 moveto
-132 634.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-50.5 617.97 moveto 31 (AAA) alignedtext
-grestore
-% AAA->AAA
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 44.84 738.64 moveto
-47.87 749.27 54.92 756.57 66 756.57 curveto
-73.44 756.57 79.07 753.28 82.88 747.89 curveto
-stroke
-0 0 0 edgecolor
-newpath 86.14 749.19 moveto
-87.16 738.64 lineto
-79.79 746.25 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 86.14 749.19 moveto
-87.16 738.64 lineto
-79.79 746.25 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-39 761.97 moveto 54 (FF: [93]) alignedtext
-grestore
-% AAA->AAA
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 20.29 738.66 moveto
-21.22 758.77 36.45 774.57 66 774.57 curveto
-90.47 774.57 105.12 763.74 109.96 748.59 curveto
-stroke
-0 1 1 edgecolor
-newpath 113.42 749.11 moveto
-111.71 738.66 lineto
-106.53 747.9 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 113.42 749.11 moveto
-111.71 738.66 lineto
-106.53 747.9 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-37.5 779.97 moveto 57 (RR: [93]) alignedtext
-grestore
-% AAT
-gsave
-0 0 0.75294 nodecolor
-newpath 490.5 918.57 moveto
-490.5 1048.57 lineto
-687.5 1048.57 lineto
-687.5 918.57 lineto
-closepath fill
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 490.5 918.57 moveto
-490.5 1048.57 lineto
-687.5 1048.57 lineto
-687.5 918.57 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-574.5 1031.97 moveto 29 (AAT) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 490.5 1022.57 moveto
-687.5 1022.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-498.5 1005.97 moveto 181 (5':[21,89,18,74,82,95,16]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 490.5 996.57 moveto
-687.5 996.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-560 979.97 moveto 58 (~5':[33]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 490.5 970.57 moveto
-687.5 970.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-573 953.97 moveto 32 (48.0) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 490.5 944.57 moveto
-687.5 944.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-574.5 927.97 moveto 29 (AAT) alignedtext
-grestore
-% AAA->AAT
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 132.34 698.48 moveto
-215.68 731.4 361.18 794.34 472 871.57 curveto
-488.75 883.25 505.41 897.31 520.69 911.47 curveto
-stroke
-0 0 0 edgecolor
-newpath 518.39 914.11 moveto
-528.07 918.42 lineto
-523.19 909.01 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 518.39 914.11 moveto
-528.07 918.42 lineto
-523.19 909.01 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-151.5 876.97 moveto 319 (FF: [2,4,9,14,27,30,41,49,64,75,81,83,94,97]) alignedtext
-grestore
-% AAG
-gsave
-0 0 0.75294 nodecolor
-newpath 4402 590.57 moveto
-4402 720.57 lineto
-4588 720.57 lineto
-4588 590.57 lineto
-closepath fill
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 4402 590.57 moveto
-4402 720.57 lineto
-4588 720.57 lineto
-4588 590.57 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-4479 703.97 moveto 32 (AAG) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 4402 694.57 moveto
-4588 694.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-4454 677.97 moveto 82 (5':[50,62,6]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 4402 668.57 moveto
-4588 668.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-4410 651.97 moveto 170 (~5':[25,97,46,71,94,80]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 4402 642.57 moveto
-4588 642.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-4479 625.97 moveto 32 (39.0) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 4402 616.57 moveto
-4588 616.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-4479 599.97 moveto 32 (AAG) alignedtext
-grestore
-% AAA->AAG
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 132.14 616.05 moveto
-137.94 612.76 143.93 609.86 150 607.57 curveto
-332.86 538.68 393.6 583.57 589 583.57 curveto
-589 583.57 589 583.57 1305 583.57 curveto
-1639.25 583.57 2473.84 633.74 2808 641.57 curveto
-3407.57 655.63 4127.3 656.15 4391.38 655.8 curveto
-stroke
-0 0 0 edgecolor
-newpath 4391.72 659.3 moveto
-4401.71 655.79 lineto
-4391.71 652.3 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 4391.72 659.3 moveto
-4401.71 655.79 lineto
-4391.71 652.3 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-2150 627.97 moveto 166 (FF: [81,83,89,93,94,97]) alignedtext
-grestore
-% TAA
-gsave
-0 0 0.75294 nodecolor
-newpath 8922 1248.57 moveto
-8922 1378.57 lineto
-9018 1378.57 lineto
-9018 1248.57 lineto
-closepath fill
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 8922 1248.57 moveto
-8922 1378.57 lineto
-9018 1378.57 lineto
-9018 1248.57 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-8955.5 1361.97 moveto 29 (TAA) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 8922 1352.57 moveto
-9018 1352.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-8947 1335.97 moveto 46 (5':[47]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 8922 1326.57 moveto
-9018 1326.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-8930 1309.97 moveto 80 (~5':[12,75]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 8922 1300.57 moveto
-9018 1300.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-8954 1283.97 moveto 32 (25.0) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 8922 1274.57 moveto
-9018 1274.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-8955.5 1257.97 moveto 29 (TAA) alignedtext
-grestore
-% AAA->TAA
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 67.29 738.64 moveto
-73.21 1023.49 99.74 2148.82 150 2203.57 curveto
-283.25 2348.73 391.95 2265.57 589 2265.57 curveto
-589 2265.57 589 2265.57 6390 2265.57 curveto
-7280.72 2265.57 7598.06 2409.49 8372 1968.57 curveto
-8619.76 1827.42 8658.07 1748.79 8838 1527.57 curveto
-8873.36 1484.1 8906.45 1430.42 8930.65 1387.69 curveto
-stroke
-0 1 1 edgecolor
-newpath 8933.83 1389.18 moveto
-8935.68 1378.75 lineto
-8927.73 1385.75 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 8933.83 1389.18 moveto
-8935.68 1378.75 lineto
-8927.73 1385.75 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-4061 2270.97 moveto 192 (RR: [49,81,83,89,93,94,97]) alignedtext
-grestore
-% GAA
-gsave
-0 0 0.75294 nodecolor
-newpath 3076.5 427.57 moveto
-3076.5 557.57 lineto
-3217.5 557.57 lineto
-3217.5 427.57 lineto
-closepath fill
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 3076.5 427.57 moveto
-3076.5 557.57 lineto
-3217.5 557.57 lineto
-3217.5 427.57 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-3131 540.97 moveto 32 (GAA) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 3076.5 531.57 moveto
-3217.5 531.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-3113 514.97 moveto 68 (5':[53,36]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 3076.5 505.57 moveto
-3217.5 505.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-3084.5 488.97 moveto 125 (~5':[70,91,38,63]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 3076.5 479.57 moveto
-3217.5 479.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-3131 462.97 moveto 32 (52.0) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 3076.5 453.57 moveto
-3217.5 453.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-3131 436.97 moveto 32 (GAA) alignedtext
-grestore
-% AAA->GAA
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 75.47 608.57 moveto
-85.75 562.46 106.89 503.05 150 469.57 curveto
-305.64 348.72 391.95 407.57 589 407.57 curveto
-589 407.57 589 407.57 2730 407.57 curveto
-2849.04 407.57 2983.42 441.24 3066.68 466.2 curveto
-stroke
-0 1 1 edgecolor
-newpath 3065.73 469.57 moveto
-3076.32 469.12 lineto
-3067.76 462.87 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 3065.73 469.57 moveto
-3076.32 469.12 lineto
-3067.76 462.87 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-1448.5 412.97 moveto 381 (RR: [1,2,4,9,14,27,30,41,49,54,64,67,75,81,83,94,97]) alignedtext
-grestore
-% AAT->AAA
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 490.15 987.94 moveto
-392.69 986.93 244.95 970.43 150 889.57 curveto
-108.46 854.2 87.36 795.69 76.7 748.49 curveto
-stroke
-0 1 1 edgecolor
-newpath 80.1 747.64 moveto
-74.58 738.6 lineto
-73.25 749.11 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 80.1 747.64 moveto
-74.58 738.6 lineto
-73.25 749.11 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-150 991.97 moveto 322 (RR: [2,4,9,14,27,30,41,49,64,75,81,83,94,97]) alignedtext
-grestore
-% AAT->TAA
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 687.55 989.51 moveto
-788.74 995.08 950.8 1002.57 1091 1002.57 curveto
-1091 1002.57 1091 1002.57 1989 1002.57 curveto
-2136.53 1002.57 2546.57 933.38 2652 1036.57 curveto
-2691.33 1075.07 2629.76 1246.02 2670 1283.57 curveto
-2757.65 1365.37 4708.11 1291.35 4828 1291.57 curveto
-5009.33 1291.91 5054.67 1291.63 5236 1291.57 curveto
-5323.11 1291.54 8298.41 1336.18 8372 1289.57 curveto
-8387.79 1279.57 8374.21 1261.57 8390 1251.57 curveto
-8475.8 1197.28 8783.05 1266.08 8912.18 1298.45 curveto
-stroke
-0 1 1 edgecolor
-newpath 8911.35 1301.85 moveto
-8921.91 1300.9 lineto
-8913.07 1295.06 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 8911.35 1301.85 moveto
-8921.91 1300.9 lineto
-8913.07 1295.06 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-4415 1307.97 moveto 160 (RR: [7,11,37,40,56,85]) alignedtext
-grestore
-% AAT->GAA
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 615.68 918.37 moveto
-635.02 879.33 665 832.09 706 804.57 curveto
-984.86 617.41 1116.91 717.87 1448 661.57 curveto
-1625.16 631.45 1669.5 623.27 1848 602.57 curveto
-2086.26 574.94 2820.45 517.66 3066.04 498.77 curveto
-stroke
-0 1 1 edgecolor
-newpath 3066.61 502.23 moveto
-3076.31 497.98 lineto
-3066.07 495.25 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 3066.61 502.23 moveto
-3076.31 497.98 lineto
-3066.07 495.25 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-1848 607.97 moveto 282 (RR: [13,15,17,23,33,45,48,59,77,96,98]) alignedtext
-grestore
-% ATC
-gsave
-0 0 0.75294 nodecolor
-newpath 7916.5 1050.57 moveto
-7916.5 1180.57 lineto
-8003.5 1180.57 lineto
-8003.5 1050.57 lineto
-closepath fill
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 7916.5 1050.57 moveto
-7916.5 1180.57 lineto
-8003.5 1180.57 lineto
-8003.5 1050.57 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-7946 1163.97 moveto 28 (ATC) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 7916.5 1154.57 moveto
-8003.5 1154.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-7946 1137.97 moveto 28 (5':[]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 7916.5 1128.57 moveto
-8003.5 1128.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-7924.5 1111.97 moveto 71 (~5':[7,19]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 7916.5 1102.57 moveto
-8003.5 1102.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-7944 1085.97 moveto 32 (37.0) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 7916.5 1076.57 moveto
-8003.5 1076.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-7946 1059.97 moveto 28 (ATC) alignedtext
-grestore
-% AAT->ATC
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 687.95 961.2 moveto
-788.78 940.39 949.95 912.57 1091 912.57 curveto
-1091 912.57 1091 912.57 3350 912.57 curveto
-4188.25 912.57 4397.81 918.48 5236 928.57 curveto
-5748.91 934.75 5877.05 946.57 6390 946.57 curveto
-6390 946.57 6390 946.57 7332 946.57 curveto
-7551.75 946.57 7800.34 1044.25 7906.91 1091.09 curveto
-stroke
-0 0 0 edgecolor
-newpath 7905.61 1094.34 moveto
-7916.17 1095.19 lineto
-7908.44 1087.94 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 7905.61 1094.34 moveto
-7916.17 1095.19 lineto
-7908.44 1087.94 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-3521.5 918.97 moveto 351 (FF: [7,9,11,16,18,27,30,37,40,41,56,64,74,82,85]) alignedtext
-grestore
-% ATA
-gsave
-0 0 0.75294 nodecolor
-newpath 8454 1260.57 moveto
-8454 1390.57 lineto
-8564 1390.57 lineto
-8564 1260.57 lineto
-closepath fill
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 8454 1260.57 moveto
-8454 1390.57 lineto
-8564 1390.57 lineto
-8564 1260.57 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-8495 1373.97 moveto 28 (ATA) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 8454 1364.57 moveto
-8564 1364.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-8486 1347.97 moveto 46 (5':[79]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 8454 1338.57 moveto
-8564 1338.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-8462 1321.97 moveto 94 (~5':[35,2,44]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 8454 1312.57 moveto
-8564 1312.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-8493 1295.97 moveto 32 (31.0) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 8454 1286.57 moveto
-8564 1286.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-8495 1269.97 moveto 28 (ATA) alignedtext
-grestore
-% AAT->ATA
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 687.64 1036.09 moveto
-693.77 1038.48 699.92 1040.67 706 1042.57 curveto
-1315.94 1233.22 1523.08 1041.51 2130 1241.57 curveto
-2228.97 1274.2 2235.17 1327.26 2336 1353.57 curveto
-2502.44 1397.01 5259.99 1392.57 5432 1392.57 curveto
-5432 1392.57 5432 1392.57 7032 1392.57 curveto
-7628 1392.57 7777.62 1384.59 8372 1340.57 curveto
-8395.38 1338.84 8420.94 1336.24 8443.58 1333.68 curveto
-stroke
-0 0 0 edgecolor
-newpath 8444.22 1337.13 moveto
-8453.75 1332.52 lineto
-8443.42 1330.18 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 8444.22 1337.13 moveto
-8453.75 1332.52 lineto
-8443.42 1330.18 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-3932 1395.97 moveto 450 (FF: [2,14,22,28,29,34,49,55,57,68,73,75,79,81,83,89,94,95,97]) alignedtext
-grestore
-% CAA
-gsave
-0 0 0.75294 nodecolor
-newpath 12082.5 1016.57 moveto
-12082.5 1146.57 lineto
-12189.5 1146.57 lineto
-12189.5 1016.57 lineto
-closepath fill
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 12082.5 1016.57 moveto
-12082.5 1146.57 lineto
-12189.5 1146.57 lineto
-12189.5 1016.57 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-12120.5 1129.97 moveto 31 (CAA) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 12082.5 1120.57 moveto
-12189.5 1120.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-12090.5 1103.97 moveto 91 (5':[34,57,22]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 12082.5 1094.57 moveto
-12189.5 1094.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-12116 1077.97 moveto 40 (~5':[]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 12082.5 1068.57 moveto
-12189.5 1068.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-12124.5 1051.97 moveto 23 (8.0) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 12082.5 1042.57 moveto
-12189.5 1042.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-12116 1025.97 moveto 40 (ACAA) alignedtext
-grestore
-% AAT->CAA
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 595.44 918.26 moveto
-605.99 848.76 633.69 741.18 706 684.57 curveto
-831.66 586.2 1975.68 538.19 2130 497.57 curveto
-2217.16 474.63 2239.41 465.69 2318 421.57 curveto
-2554.56 288.77 2554.54 154.29 2808 57.57 curveto
-3033.98 -28.66 3108.13 8.57 3350 8.57 curveto
-3350 8.57 3350 8.57 11823 8.57 curveto
-12031.16 8.57 12110.25 762.19 12130.41 1006.27 curveto
-stroke
-0 1 1 edgecolor
-newpath 12126.94 1006.79 moveto
-12131.24 1016.47 lineto
-12133.92 1006.22 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 12126.94 1006.79 moveto
-12131.24 1016.47 lineto
-12133.92 1006.22 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-6925 13.97 moveto 214 (RR: [22,29,34,55,57,68,73,79]) alignedtext
-grestore
-% ATG
-gsave
-0 0 0.75294 nodecolor
-newpath 1020.5 1515.57 moveto
-1020.5 1645.57 lineto
-1161.5 1645.57 lineto
-1161.5 1515.57 lineto
-closepath fill
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 1020.5 1515.57 moveto
-1020.5 1645.57 lineto
-1161.5 1645.57 lineto
-1161.5 1515.57 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-1076 1628.97 moveto 30 (ATG) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 1020.5 1619.57 moveto
-1161.5 1619.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-1077 1602.97 moveto 28 (5':[]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 1020.5 1593.57 moveto
-1161.5 1593.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-1028.5 1576.97 moveto 125 (~5':[45,77,13,98]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 1020.5 1567.57 moveto
-1161.5 1567.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-1075 1550.97 moveto 32 (11.0) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 1020.5 1541.57 moveto
-1161.5 1541.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-1071 1524.97 moveto 40 (ATGC) alignedtext
-grestore
-% AAT->ATG
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 598.49 1048.66 moveto
-611.44 1113.87 640.97 1212.53 706 1269.57 curveto
-808.27 1359.29 900.78 1256.67 1002 1347.57 curveto
-1047.08 1388.06 1069.47 1453.89 1080.5 1505.27 curveto
-stroke
-0 0 0 edgecolor
-newpath 1077.13 1506.25 moveto
-1082.56 1515.34 lineto
-1083.99 1504.85 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 1077.13 1506.25 moveto
-1082.56 1515.34 lineto
-1083.99 1504.85 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-708 1352.97 moveto 292 (FF: [5,13,15,17,21,23,45,48,59,77,96,98]) alignedtext
-grestore
-% AAG->AAA
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 4401.79 667.91 moveto
-4395.78 668.53 4389.81 669.09 4384 669.57 curveto
-4079.47 694.94 4002.59 697.57 3697 697.57 curveto
-1989 697.57 1989 697.57 1989 697.57 curveto
-1550.3 697.57 1440.67 690.04 1002 684.57 curveto
-682.59 680.59 301.87 676.24 142.29 674.43 curveto
-stroke
-0 1 1 edgecolor
-newpath 142.14 670.93 moveto
-132.1 674.32 lineto
-142.06 677.93 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 142.14 670.93 moveto
-132.1 674.32 lineto
-142.06 677.93 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-2148.5 702.97 moveto 169 (RR: [81,83,89,93,94,97]) alignedtext
-grestore
-% AAG->TAA
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 4588.17 706.15 moveto
-4594.14 708.8 4600.12 711.3 4606 713.57 curveto
-4701.13 750.31 4728.07 751.21 4828 771.57 curveto
-5510.86 910.7 5693.11 908.57 6390 908.57 curveto
-6390 908.57 6390 908.57 8232 908.57 curveto
-8527.22 908.57 8595.27 1012.53 8838 1180.57 curveto
-8865.76 1199.79 8892.7 1225.28 8914.93 1248.8 curveto
-stroke
-0 1 1 edgecolor
-newpath 8912.59 1251.43 moveto
-8921.97 1256.36 lineto
-8917.71 1246.66 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 8912.59 1251.43 moveto
-8921.97 1256.36 lineto
-8917.71 1246.66 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-6936 913.97 moveto 192 (RR: [38,39,47,52,71,88,91]) alignedtext
-grestore
-% AAG->GAA
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 4401.76 643.59 moveto
-4395.75 642.89 4389.79 642.21 4384 641.57 curveto
-3874.6 585.5 3730.89 666.68 3236 533.57 curveto
-3233.06 532.78 3230.09 531.9 3227.11 530.94 curveto
-stroke
-0 1 1 edgecolor
-newpath 3228.21 527.62 moveto
-3217.61 527.66 lineto
-3225.92 534.23 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 3228.21 527.62 moveto
-3217.61 527.66 lineto
-3225.92 534.23 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-3482 623.97 moveto 430 (RR: [8,25,32,36,42,46,47,52,53,62,66,71,76,78,80,84,86,87]) alignedtext
-grestore
-% AGA
-gsave
-0 0 0.75294 nodecolor
-newpath 3649 285.57 moveto
-3649 415.57 lineto
-3745 415.57 lineto
-3745 285.57 lineto
-closepath fill
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 3649 285.57 moveto
-3649 415.57 lineto
-3745 415.57 lineto
-3745 285.57 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-3681.5 398.97 moveto 31 (AGA) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 3649 389.57 moveto
-3745 389.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-3663 372.97 moveto 68 (5':[99,29]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 3649 363.57 moveto
-3745 363.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-3657 346.97 moveto 80 (~5':[14,83]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 3649 337.57 moveto
-3745 337.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-3681 320.97 moveto 32 (22.0) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 3649 311.57 moveto
-3745 311.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-3681.5 294.97 moveto 31 (AGA) alignedtext
-grestore
-% AAG->AGA
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 4458.31 590.49 moveto
-4439.52 562.79 4414.2 532.55 4384 513.57 curveto
-4209.14 403.7 4130.53 463.94 3930 414.57 curveto
-3870.11 399.83 3802.15 380.91 3755.15 367.47 curveto
-stroke
-0 0 0 edgecolor
-newpath 3756.02 364.08 moveto
-3745.45 364.69 lineto
-3754.09 370.81 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 3756.02 364.08 moveto
-3745.45 364.69 lineto
-3754.09 370.81 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-4107.5 518.97 moveto 99 (FF: [79,83,89]) alignedtext
-grestore
-% AGG
-gsave
-0 0 0.75294 nodecolor
-newpath 10135 1642.57 moveto
-10135 1772.57 lineto
-10209 1772.57 lineto
-10209 1642.57 lineto
-closepath fill
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 10135 1642.57 moveto
-10135 1772.57 lineto
-10209 1772.57 lineto
-10209 1642.57 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-10155.5 1755.97 moveto 33 (AGG) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 10135 1746.57 moveto
-10209 1746.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-10158 1729.97 moveto 28 (5':[]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 10135 1720.57 moveto
-10209 1720.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-10143 1703.97 moveto 58 (~5':[52]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 10135 1694.57 moveto
-10209 1694.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-10156 1677.97 moveto 32 (18.0) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 10135 1668.57 moveto
-10209 1668.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-10155.5 1651.97 moveto 33 (AGG) alignedtext
-grestore
-% AAG->AGG
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 4502.35 720.8 moveto
-4529.57 927.22 4644.04 1552.57 5032 1552.57 curveto
-5032 1552.57 5032 1552.57 6390 1552.57 curveto
-7029.14 1552.57 7189.01 1551.9 7828 1565.57 curveto
-8183.68 1573.18 8272.48 1579.54 8628 1592.57 curveto
-8790.91 1598.54 9940.06 1596.93 10094 1650.57 curveto
-10105.38 1654.54 10116.52 1660.77 10126.66 1667.68 curveto
-stroke
-0 0 0 edgecolor
-newpath 10124.76 1670.63 moveto
-10134.92 1673.62 lineto
-10128.84 1664.94 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 10124.76 1670.63 moveto
-10134.92 1673.62 lineto
-10128.84 1664.94 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-7495.5 1570.97 moveto 247 (FF: [6,32,36,47,52,53,62,76,84,87]) alignedtext
-grestore
-% AGC
-gsave
-0 0 0.75294 nodecolor
-newpath 10112.5 816.57 moveto
-10112.5 946.57 lineto
-10231.5 946.57 lineto
-10231.5 816.57 lineto
-closepath fill
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 10112.5 816.57 moveto
-10112.5 946.57 lineto
-10231.5 946.57 lineto
-10231.5 816.57 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-10156.5 929.97 moveto 31 (AGC) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 10112.5 920.57 moveto
-10231.5 920.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-10138 903.97 moveto 68 (5':[10,24]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 10112.5 894.57 moveto
-10231.5 894.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-10120.5 877.97 moveto 103 (~5':[88,61,66]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 10112.5 868.57 moveto
-10231.5 868.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-10156 851.97 moveto 32 (59.0) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 10112.5 842.57 moveto
-10231.5 842.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-10156.5 825.97 moveto 31 (AGC) alignedtext
-grestore
-% AAG->AGC
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 4588.1 623.7 moveto
-4654.18 602.67 4745.45 576.83 4828 564.57 curveto
-4965.66 544.14 7192.83 494.57 7332 494.57 curveto
-7332 494.57 7332 494.57 8232 494.57 curveto
-8517.34 494.57 8576.23 589.48 8856 645.57 curveto
-9399.64 754.58 9598.93 549.91 10094 799.57 curveto
-10099.76 802.48 10105.32 805.98 10110.64 809.89 curveto
-stroke
-0 0 0 edgecolor
-newpath 10108.79 812.88 moveto
-10118.8 816.33 lineto
-10113.12 807.39 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 10108.79 812.88 moveto
-10118.8 816.33 lineto
-10113.12 807.39 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-7491 499.97 moveto 256 (FF: [32,38,39,47,52,62,71,84,88,91]) alignedtext
-grestore
-% ACT
-gsave
-0 0 0.75294 nodecolor
-newpath 4984 632.57 moveto
-4984 762.57 lineto
-5080 762.57 lineto
-5080 632.57 lineto
-closepath fill
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 4984 632.57 moveto
-4984 762.57 lineto
-5080 762.57 lineto
-5080 632.57 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-5017.5 745.97 moveto 29 (ACT) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 4984 736.57 moveto
-5080 736.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-5018 719.97 moveto 28 (5':[]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 4984 710.57 moveto
-5080 710.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-4992 693.97 moveto 80 (~5':[26,92]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 4984 684.57 moveto
-5080 684.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-5016 667.97 moveto 32 (18.5) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 4984 658.57 moveto
-5080 658.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-5012.5 641.97 moveto 39 (CACT) alignedtext
-grestore
-% AAG->ACT
-gsave
-1 setlinewidth
-0.66667 1 1 edgecolor
-newpath 4588.24 651.97 moveto
-4651.05 650.58 4735.67 650.69 4810 657.57 curveto
-4866.19 662.77 4929.47 674.79 4974.04 684.31 curveto
-stroke
-0.66667 1 1 edgecolor
-newpath 4973.31 687.73 moveto
-4983.83 686.42 lineto
-4974.79 680.89 lineto
-closepath fill
-1 setlinewidth
-solid
-0.66667 1 1 edgecolor
-newpath 4973.31 687.73 moveto
-4983.83 686.42 lineto
-4974.79 680.89 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-4606 662.97 moveto 204 (FR: [8,31,42,50,66,69,78,86]) alignedtext
-grestore
-% TAA->AAA
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 8921.99 1357.94 moveto
-8898.2 1377.94 8868.15 1400.43 8838 1415.57 curveto
-8522.9 1573.85 8423.24 1580.86 8074 1629.57 curveto
-7703.37 1681.27 6764.22 1628.57 6390 1628.57 curveto
-2933 1628.57 2933 1628.57 2933 1628.57 curveto
-2385.55 1628.57 2208.47 1636.1 2148 1692.57 curveto
-2120.09 1718.63 2149.67 1743.85 2130 1776.57 curveto
-1983.08 2020.96 1924.16 2189.57 1639 2189.57 curveto
-589 2189.57 589 2189.57 589 2189.57 curveto
-280.68 2189.57 114.38 1054.81 75.14 748.82 curveto
-stroke
-0 0 0 edgecolor
-newpath 78.59 748.19 moveto
-73.86 738.71 lineto
-71.65 749.08 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 78.59 748.19 moveto
-73.86 738.71 lineto
-71.65 749.08 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-4062.5 1633.97 moveto 189 (FF: [49,81,83,89,93,94,97]) alignedtext
-grestore
-% TAA->AAT
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 8921.88 1336.71 moveto
-8856.95 1366.52 8736.86 1416.74 8628 1435.57 curveto
-8540.63 1450.69 7120.67 1430.57 7032 1430.57 curveto
-4495 1430.57 4495 1430.57 4495 1430.57 curveto
-3535.14 1430.57 3290.62 1476.7 2336 1376.57 curveto
-1604.58 1299.86 1365.23 1417.58 706 1091.57 curveto
-687.47 1082.41 669.79 1069.39 654.04 1055.54 curveto
-stroke
-0 0 0 edgecolor
-newpath 656.23 1052.8 moveto
-646.46 1048.69 lineto
-651.53 1058 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 656.23 1052.8 moveto
-646.46 1048.69 lineto
-651.53 1058 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-4416.5 1435.97 moveto 157 (FF: [7,11,37,40,56,85]) alignedtext
-grestore
-% TAA->AAG
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 8921.7 1267.98 moveto
-8898.3 1248.91 8868.66 1228.82 8838 1218.57 curveto
-8740.04 1185.82 8165.66 1179.29 8092 1208.57 curveto
-8081.77 1212.64 8084.23 1221.51 8074 1225.57 curveto
-7979.84 1263.01 7947.23 1230.04 7846 1225.57 curveto
-7276.34 1200.44 7136.79 1152.86 6568 1112.57 curveto
-6276.32 1091.91 5538.37 1110.68 5254 1042.57 curveto
-4947.68 969.21 4870.31 926.9 4606 755.57 curveto
-4593.23 747.3 4580.49 737.56 4568.43 727.48 curveto
-stroke
-0 0 0 edgecolor
-newpath 4570.49 724.63 moveto
-4560.61 720.81 lineto
-4565.95 729.96 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 4570.49 724.63 moveto
-4560.61 720.81 lineto
-4565.95 729.96 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-6937.5 1184.97 moveto 189 (FF: [38,39,47,52,71,88,91]) alignedtext
-grestore
-% TAA->ATA
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 8921.77 1309.04 moveto
-8896.8 1306.91 8865.79 1304.62 8838 1303.57 curveto
-8752.73 1300.35 8731.06 1296.79 8646 1303.57 curveto
-8622.36 1305.46 8596.65 1309.15 8573.95 1312.97 curveto
-stroke
-0 1 1 edgecolor
-newpath 8573.34 1309.52 moveto
-8564.09 1314.67 lineto
-8574.54 1316.42 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 8573.34 1309.52 moveto
-8564.09 1314.67 lineto
-8574.54 1316.42 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-8646 1308.97 moveto 192 (RR: [49,75,81,83,89,94,97]) alignedtext
-grestore
-% ACC
-gsave
-0 0 0.75294 nodecolor
-newpath 9501 1342.57 moveto
-9501 1472.57 lineto
-9621 1472.57 lineto
-9621 1342.57 lineto
-closepath fill
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 9501 1342.57 moveto
-9501 1472.57 lineto
-9621 1472.57 lineto
-9621 1342.57 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-9546 1455.97 moveto 30 (ACC) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 9501 1446.57 moveto
-9621 1446.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-9509 1429.97 moveto 104 (5':[23,15,48,5]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 9501 1420.57 moveto
-9621 1420.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-9541 1403.97 moveto 40 (~5':[]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 9501 1394.57 moveto
-9621 1394.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-9549.5 1377.97 moveto 23 (8.5) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 9501 1368.57 moveto
-9621 1368.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-9542 1351.97 moveto 38 (TACC) alignedtext
-grestore
-% TAA->ACC
-gsave
-1 setlinewidth
-0.33333 1 1 edgecolor
-newpath 9018.18 1338.91 moveto
-9042.63 1350.57 9073.18 1363.4 9102 1370.57 curveto
-9236.64 1404.1 9399.7 1409.17 9490.75 1408.96 curveto
-stroke
-0.33333 1 1 edgecolor
-newpath 9490.96 1412.46 moveto
-9500.95 1408.92 lineto
-9490.93 1405.46 lineto
-closepath fill
-1 setlinewidth
-solid
-0.33333 1 1 edgecolor
-newpath 9490.96 1412.46 moveto
-9500.95 1408.92 lineto
-9490.93 1405.46 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-9146 1410.97 moveto 172 (RF: [5,7,11,21,37,40,56]) alignedtext
-grestore
-% CTA
-gsave
-0 0 0.75294 nodecolor
-newpath 9513 1158.57 moveto
-9513 1288.57 lineto
-9609 1288.57 lineto
-9609 1158.57 lineto
-closepath fill
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 9513 1158.57 moveto
-9513 1288.57 lineto
-9609 1288.57 lineto
-9609 1158.57 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-9547 1271.97 moveto 28 (CTA) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 9513 1262.57 moveto
-9609 1262.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-9533.5 1245.97 moveto 55 (5':[100]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 9513 1236.57 moveto
-9609 1236.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-9521 1219.97 moveto 80 (~5':[43,85]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 9513 1210.57 moveto
-9609 1210.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-9545 1193.97 moveto 32 (28.0) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 9513 1184.57 moveto
-9609 1184.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-9547 1167.97 moveto 28 (CTA) alignedtext
-grestore
-% TAA->CTA
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 9018.28 1281.3 moveto
-9042.37 1266.97 9072.59 1251.57 9102 1243.57 curveto
-9241.74 1205.56 9414.14 1211.41 9502.59 1218.02 curveto
-stroke
-0 1 1 edgecolor
-newpath 9502.45 1221.52 moveto
-9512.69 1218.81 lineto
-9502.99 1214.54 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 9502.45 1221.52 moveto
-9512.69 1218.81 lineto
-9502.99 1214.54 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-9102.5 1248.97 moveto 259 (RR: [12,16,38,39,61,71,82,88,91,93]) alignedtext
-grestore
-% GAA->AAA
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 3076.18 490.11 moveto
-2993.22 487.45 2851.65 483.57 2730 483.57 curveto
-589 483.57 589 483.57 589 483.57 curveto
-390.18 483.57 320.28 466.94 150 569.57 curveto
-136.63 577.63 124.49 588.64 113.85 600.48 curveto
-stroke
-0 0 0 edgecolor
-newpath 110.94 598.5 moveto
-107.08 608.36 lineto
-116.25 603.06 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 110.94 598.5 moveto
-107.08 608.36 lineto
-116.25 603.06 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-1450 488.97 moveto 378 (FF: [1,2,4,9,14,27,30,41,49,54,64,67,75,81,83,94,97]) alignedtext
-grestore
-% GAA->AAT
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 3076.46 542.85 moveto
-3070.39 545.83 3064.2 548.46 3058 550.57 curveto
-2865.96 615.86 2349.02 594.51 2148 621.57 curveto
-1824.61 665.11 1005.38 768.79 706 898.57 curveto
-696.57 902.66 687.17 907.61 678.03 913.05 curveto
-stroke
-0 0 0 edgecolor
-newpath 676.02 910.17 moveto
-669.34 918.39 lineto
-679.69 916.13 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 676.02 910.17 moveto
-669.34 918.39 lineto
-679.69 916.13 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-1849.5 666.97 moveto 279 (FF: [13,15,17,23,33,45,48,59,77,96,98]) alignedtext
-grestore
-% GAA->AAG
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 3217.81 506.86 moveto
-3223.95 507.87 3230.07 508.79 3236 509.57 curveto
-3743.21 576.34 3893.95 446.69 4384 593.57 curveto
-4386.78 594.4 4389.56 595.31 4392.34 596.29 curveto
-stroke
-0 0 0 edgecolor
-newpath 4391.19 599.6 moveto
-4401.78 599.86 lineto
-4393.66 593.05 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 4391.19 599.6 moveto
-4401.78 599.86 lineto
-4393.66 593.05 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-3483.5 535.97 moveto 427 (FF: [8,25,32,36,42,46,47,52,53,62,66,71,76,78,80,84,86,87]) alignedtext
-grestore
-% TCA
-gsave
-0 0 0.75294 nodecolor
-newpath 7272 603.57 moveto
-7272 733.57 lineto
-7392 733.57 lineto
-7392 603.57 lineto
-closepath fill
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 7272 603.57 moveto
-7272 733.57 lineto
-7392 733.57 lineto
-7392 603.57 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-7318 716.97 moveto 28 (TCA) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 7272 707.57 moveto
-7392 707.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-7280 690.97 moveto 104 (5':[69,42,31,8]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 7272 681.57 moveto
-7392 681.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-7292 664.97 moveto 80 (~5':[87,90]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 7272 655.57 moveto
-7392 655.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-7316 638.97 moveto 32 (35.0) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 7272 629.57 moveto
-7392 629.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-7318 612.97 moveto 28 (TCA) alignedtext
-grestore
-% GAA->TCA
-gsave
-1 setlinewidth
-0.33333 1 1 edgecolor
-newpath 3217.86 483.16 moveto
-3223.99 482.55 3230.1 482 3236 481.57 curveto
-3745 444.45 3874.14 477.99 4384 455.57 curveto
-4581.56 446.89 4630.35 433.02 4828 426.57 curveto
-5601.18 401.35 5798.24 394.64 6568 471.57 curveto
-6873.64 502.12 6991.21 396.53 7254 555.57 curveto
-7270 565.26 7283.52 579.62 7294.58 594.89 curveto
-stroke
-0.33333 1 1 edgecolor
-newpath 7291.91 597.19 moveto
-7300.47 603.44 lineto
-7297.68 593.22 lineto
-closepath fill
-1 setlinewidth
-solid
-0.33333 1 1 edgecolor
-newpath 7291.91 597.19 moveto
-7300.47 603.44 lineto
-7297.68 593.22 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-4934.5 431.97 moveto 195 (RF: [1,4,20,27,30,41,64,67]) alignedtext
-grestore
-% GGA
-gsave
-0 0 0.75294 nodecolor
-newpath 2670 1144.57 moveto
-2670 1274.57 lineto
-2790 1274.57 lineto
-2790 1144.57 lineto
-closepath fill
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 2670 1144.57 moveto
-2670 1274.57 lineto
-2790 1274.57 lineto
-2790 1144.57 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-2713.5 1257.97 moveto 33 (GGA) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 2670 1248.57 moveto
-2790 1248.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-2678 1231.97 moveto 104 (5':[37,17,81,4]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 2670 1222.57 moveto
-2790 1222.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-2678.5 1205.97 moveto 103 (~5':[64,30,28]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 2670 1196.57 moveto
-2790 1196.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-2714 1179.97 moveto 32 (38.0) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 2670 1170.57 moveto
-2790 1170.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-2713.5 1153.97 moveto 33 (GGA) alignedtext
-grestore
-% GAA->GGA
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 3109.09 557.76 moveto
-3031.49 691.17 2855.03 994.6 2773.18 1135.33 curveto
-stroke
-0 1 1 edgecolor
-newpath 2769.93 1133.96 moveto
-2767.93 1144.36 lineto
-2775.98 1137.48 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 2769.93 1133.96 moveto
-2767.93 1144.36 lineto
-2775.98 1137.48 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-2808 1076.97 moveto 250 (RR: [2,10,14,49,54,63,75,81,94,97]) alignedtext
-grestore
-% CGA
-gsave
-0 0 0.75294 nodecolor
-newpath 11098.5 1019.57 moveto
-11098.5 1149.57 lineto
-11185.5 1149.57 lineto
-11185.5 1019.57 lineto
-closepath fill
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 11098.5 1019.57 moveto
-11098.5 1149.57 lineto
-11185.5 1149.57 lineto
-11185.5 1019.57 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-11126.5 1132.97 moveto 31 (CGA) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 11098.5 1123.57 moveto
-11185.5 1123.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-11108 1106.97 moveto 68 (5':[55,76]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 11098.5 1097.57 moveto
-11185.5 1097.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-11106.5 1080.97 moveto 71 (~5':[3,51]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 11098.5 1071.57 moveto
-11185.5 1071.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-11126 1054.97 moveto 32 (38.0) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 11098.5 1045.57 moveto
-11185.5 1045.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-11126.5 1028.97 moveto 31 (CGA) alignedtext
-grestore
-% GAA->CGA
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 3165.18 427.43 moveto
-3178.77 390.77 3201.13 347.31 3236 321.57 curveto
-3325.42 255.56 3371.39 287.48 3482 276.57 curveto
-3516.77 273.14 4404.29 261.91 4606 260.57 curveto
-5052.21 257.6 5163.94 248.5 5610 260.57 curveto
-6349.48 280.58 6533.01 317.18 7272 350.57 curveto
-7333.31 353.34 7348.66 353.41 7410 355.57 curveto
-8044.65 377.96 8203.62 375.64 8838 404.57 curveto
-8947.4 409.56 8974.94 408.62 9084 418.57 curveto
-9208.02 429.89 9238.61 436.73 9362 453.57 curveto
-9380.44 456.09 10671.28 640.38 10688 648.57 curveto
-10864.58 735.09 11017.23 915.4 11092.35 1014.89 curveto
-stroke
-0 1 1 edgecolor
-newpath 11089.7 1017.19 moveto
-11098.5 1023.09 lineto
-11095.3 1012.99 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 11089.7 1017.19 moveto
-11098.5 1023.09 lineto
-11095.3 1012.99 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-7410.5 374.97 moveto 417 (RR: [13,17,32,33,38,45,47,52,59,62,71,76,77,84,91,96,98]) alignedtext
-grestore
-% GAA->AGA
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 3181.05 427.31 moveto
-3195.17 406.84 3213.57 386.49 3236 374.57 curveto
-3366.13 305.45 3547.13 323.23 3638.81 338.75 curveto
-stroke
-0 1 1 edgecolor
-newpath 3638.28 342.21 moveto
-3648.73 340.48 lineto
-3639.48 335.31 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 3638.28 342.21 moveto
-3648.73 340.48 lineto
-3639.48 335.31 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-3236 379.97 moveto 228 (RR: [8,25,42,46,66,70,78,80,86]) alignedtext
-grestore
-% TCA->GAA
-gsave
-1 setlinewidth
-0.33333 1 1 edgecolor
-newpath 7271.81 658.06 moveto
-7102.67 629.09 6608.43 548.25 6194 518.57 curveto
-5593.04 475.54 3649.24 488.5 3228 491.88 curveto
-stroke
-0.33333 1 1 edgecolor
-newpath 3227.72 488.38 moveto
-3217.75 491.96 lineto
-3227.77 495.38 lineto
-closepath fill
-1 setlinewidth
-solid
-0.33333 1 1 edgecolor
-newpath 3227.72 488.38 moveto
-3217.75 491.96 lineto
-3227.77 495.38 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-4934.5 496.97 moveto 195 (RF: [1,4,20,27,30,41,64,67]) alignedtext
-grestore
-% CTC
-gsave
-0 0 0.75294 nodecolor
-newpath 10706.5 404.57 moveto
-10706.5 534.57 lineto
-10825.5 534.57 lineto
-10825.5 404.57 lineto
-closepath fill
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 10706.5 404.57 moveto
-10706.5 534.57 lineto
-10825.5 534.57 lineto
-10825.5 404.57 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-10752 517.97 moveto 28 (CTC) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 10706.5 508.57 moveto
-10825.5 508.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-10752 491.97 moveto 28 (5':[]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 10706.5 482.57 moveto
-10825.5 482.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-10714.5 465.97 moveto 103 (~5':[58,41,27]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 10706.5 456.57 moveto
-10825.5 456.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-10750 439.97 moveto 32 (28.0) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 10706.5 430.57 moveto
-10825.5 430.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-10752 413.97 moveto 28 (CTC) alignedtext
-grestore
-% TCA->CTC
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 7392.26 613.2 moveto
-7397.99 609.81 7403.93 606.85 7410 604.57 curveto
-7580.58 540.54 10510.02 541.56 10688 502.57 curveto
-10690.83 501.95 10693.68 501.23 10696.54 500.43 curveto
-stroke
-0 1 1 edgecolor
-newpath 10697.74 503.73 moveto
-10706.26 497.43 lineto
-10695.67 497.04 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 10697.74 503.73 moveto
-10706.26 497.43 lineto
-10695.67 497.04 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-8856 552.97 moveto 228 (RR: [6,25,36,46,53,66,70,80,87]) alignedtext
-grestore
-% CAG
-gsave
-0 0 0.75294 nodecolor
-newpath 6641 715.57 moveto
-6641 845.57 lineto
-6737 845.57 lineto
-6737 715.57 lineto
-closepath fill
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 6641 715.57 moveto
-6641 845.57 lineto
-6737 845.57 lineto
-6737 715.57 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-6673.5 828.97 moveto 31 (CAG) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 6641 819.57 moveto
-6737 819.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-6666 802.97 moveto 46 (5':[65]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 6641 793.57 moveto
-6737 793.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-6649 776.97 moveto 80 (~5':[72,60]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 6641 767.57 moveto
-6737 767.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-6673 750.97 moveto 32 (30.0) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 6641 741.57 moveto
-6737 741.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-6673.5 724.97 moveto 31 (CAG) alignedtext
-grestore
-% TCA->CAG
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 7271.77 696.35 moveto
-7265.85 698.38 7259.86 700.18 7254 701.57 curveto
-7061.6 747.4 7002.75 687.23 6810 731.57 curveto
-6788.65 736.48 6766.16 744.68 6746.45 752.97 curveto
-stroke
-0 0 0 edgecolor
-newpath 6744.81 749.86 moveto
-6737.01 757.03 lineto
-6747.58 756.29 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 6744.81 749.86 moveto
-6737.01 757.03 lineto
-6747.58 756.29 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-6811.5 736.97 moveto 441 (FF: [6,8,19,25,26,31,42,46,50,60,66,69,70,72,78,80,86,90,92]) alignedtext
-grestore
-% TCA->ATC
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 7392.08 660.5 moveto
-7508.88 646.15 7760.97 622.18 7828 672.57 curveto
-7886.92 716.87 7929.25 925.71 7948.46 1040.14 curveto
-stroke
-0 1 1 edgecolor
-newpath 7945.05 1040.94 moveto
-7950.14 1050.23 lineto
-7951.95 1039.79 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 7945.05 1040.94 moveto
-7950.14 1050.23 lineto
-7951.95 1039.79 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-7534.5 677.97 moveto 169 (RR: [19,26,60,72,90,92]) alignedtext
-grestore
-% TCA->ACT
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 7271.96 666.97 moveto
-7265.89 666.82 7259.82 666.69 7254 666.57 curveto
-6949.14 660.44 6872.91 658.79 6568 656.57 curveto
-5983.86 652.31 5837.68 662.97 5254 686.57 curveto
-5198.38 688.82 5134.94 692.03 5090.17 694.4 curveto
-stroke
-0 0 0 edgecolor
-newpath 5089.86 690.91 moveto
-5080.06 694.94 lineto
-5090.23 697.9 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 5089.86 690.91 moveto
-5080.06 694.94 lineto
-5090.23 697.9 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-6212.5 661.97 moveto 355 (FF: [1,3,4,8,20,26,27,31,41,42,50,51,67,69,78,86]) alignedtext
-grestore
-% GGA->GAA
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 2734.19 1144.43 moveto
-2744.14 999.68 2771.13 661.24 2808 625.57 curveto
-2848.13 586.75 3008.75 626.88 3058 600.57 curveto
-3074 592.02 3088.24 579.27 3100.38 565.5 curveto
-stroke
-0 0 0 edgecolor
-newpath 3103.14 567.66 moveto
-3106.91 557.76 lineto
-3097.79 563.15 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 3103.14 567.66 moveto
-3106.91 557.76 lineto
-3097.79 563.15 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-2809.5 630.97 moveto 247 (FF: [2,10,14,49,54,63,75,81,94,97]) alignedtext
-grestore
-% GAC
-gsave
-0 0 0.75294 nodecolor
-newpath 11790.5 1017.57 moveto
-11790.5 1147.57 lineto
-11855.5 1147.57 lineto
-11855.5 1017.57 lineto
-closepath fill
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 11790.5 1017.57 moveto
-11790.5 1147.57 lineto
-11855.5 1147.57 lineto
-11855.5 1017.57 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-11807.5 1130.97 moveto 31 (GAC) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 11790.5 1121.57 moveto
-11855.5 1121.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-11800 1104.97 moveto 46 (5':[59]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 11790.5 1095.57 moveto
-11855.5 1095.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-11798.5 1078.97 moveto 49 (~5':[9]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 11790.5 1069.57 moveto
-11855.5 1069.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-11807 1052.97 moveto 32 (14.0) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 11790.5 1043.57 moveto
-11855.5 1043.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-11807.5 1026.97 moveto 31 (GAC) alignedtext
-grestore
-% GGA->GAC
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 2785.54 1274.89 moveto
-2859.33 1353.93 2997.85 1476.57 3147 1476.57 curveto
-3147 1476.57 3147 1476.57 5432 1476.57 curveto
-6606.23 1476.57 6900.37 1445.26 8074 1482.57 curveto
-8320.56 1490.41 8381.8 1501.1 8628 1516.57 curveto
-8780.01 1526.13 8817.69 1538.57 8970 1538.57 curveto
-8970 1538.57 8970 1538.57 10469 1538.57 curveto
-11013.7 1538.57 11620.22 1203.03 11781.7 1107.61 curveto
-stroke
-0 0 0 edgecolor
-newpath 11783.56 1110.57 moveto
-11790.37 1102.46 lineto
-11779.99 1104.55 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 11783.56 1110.57 moveto
-11790.37 1102.46 lineto
-11779.99 1104.55 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-7847.5 1487.97 moveto 225 (FF: [9,13,17,18,33,45,74,77,98]) alignedtext
-grestore
-% GGA->CTC
-gsave
-1 setlinewidth
-0.66667 1 1 edgecolor
-newpath 2734.33 1144.45 moveto
-2744.23 1004.49 2770.59 679.31 2808 575.57 curveto
-2902.74 312.89 2867.76 46.57 3147 46.57 curveto
-3147 46.57 3147 46.57 4157 46.57 curveto
-4692.95 46.57 6032.59 84.52 6568 108.57 curveto
-7136.59 134.11 7277.56 161.84 7846 190.57 curveto
-8519.38 224.61 8689.33 200.56 9362 246.57 curveto
-9954.72 287.12 10134.44 199.86 10688 415.57 curveto
-10691.07 416.77 10694.13 418.11 10697.18 419.56 curveto
-stroke
-0.66667 1 1 edgecolor
-newpath 10695.74 422.75 moveto
-10706.23 424.22 lineto
-10698.94 416.53 lineto
-closepath fill
-1 setlinewidth
-solid
-0.66667 1 1 edgecolor
-newpath 10695.74 422.75 moveto
-10706.23 424.22 lineto
-10698.94 416.53 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-6939 157.97 moveto 186 (FR: [1,3,4,20,35,44,51,67]) alignedtext
-grestore
-% GGA->ATC
-gsave
-1 setlinewidth
-0.66667 1 1 edgecolor
-newpath 2790.21 1227.01 moveto
-2796.19 1228.37 2802.19 1229.59 2808 1230.57 curveto
-2956.95 1255.66 2995.96 1254.57 3147 1254.57 curveto
-3147 1254.57 3147 1254.57 4157 1254.57 curveto
-4723.71 1254.57 4865.29 1270.57 5432 1270.57 curveto
-5432 1270.57 5432 1270.57 7332 1270.57 curveto
-7553.16 1270.57 7624.18 1316.41 7828 1230.57 curveto
-7858.2 1217.85 7886.37 1195.45 7908.87 1173.78 curveto
-stroke
-0.66667 1 1 edgecolor
-newpath 7911.62 1175.99 moveto
-7916.28 1166.47 lineto
-7906.7 1171 lineto
-closepath fill
-1 setlinewidth
-solid
-0.66667 1 1 edgecolor
-newpath 7911.62 1175.99 moveto
-7916.28 1166.47 lineto
-7906.7 1171 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-4948 1274.97 moveto 168 (FR: [11,16,37,56,82,85]) alignedtext
-grestore
-% CCG
-gsave
-0 0 0.75294 nodecolor
-newpath 2179.5 1701.57 moveto
-2179.5 1831.57 lineto
-2286.5 1831.57 lineto
-2286.5 1701.57 lineto
-closepath fill
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 2179.5 1701.57 moveto
-2179.5 1831.57 lineto
-2286.5 1831.57 lineto
-2286.5 1701.57 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-2217.5 1814.97 moveto 31 (CCG) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 2179.5 1805.57 moveto
-2286.5 1805.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-2187.5 1788.97 moveto 91 (5':[68,96,93]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 2179.5 1779.57 moveto
-2286.5 1779.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-2193 1762.97 moveto 80 (~5':[56,20]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 2179.5 1753.57 moveto
-2286.5 1753.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-2217 1736.97 moveto 32 (45.0) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 2179.5 1727.57 moveto
-2286.5 1727.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-2217.5 1710.97 moveto 31 (CCG) alignedtext
-grestore
-% GGA->CCG
-gsave
-1 setlinewidth
-0.33333 1 1 edgecolor
-newpath 2669.89 1271.07 moveto
-2591.11 1352.4 2449.62 1501.06 2336 1634.57 curveto
-2320.1 1653.25 2303.5 1673.95 2288.38 1693.32 curveto
-stroke
-0.33333 1 1 edgecolor
-newpath 2285.59 1691.2 moveto
-2282.22 1701.24 lineto
-2291.12 1695.5 lineto
-closepath fill
-1 setlinewidth
-solid
-0.33333 1 1 edgecolor
-newpath 2285.59 1691.2 moveto
-2282.22 1701.24 lineto
-2291.12 1695.5 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-2336 1639.97 moveto 316 (RF: [9,11,16,18,30,33,45,56,64,74,77,82,85]) alignedtext
-grestore
-% CCA
-gsave
-0 0 0.75294 nodecolor
-newpath 5869 750.57 moveto
-5869 880.57 lineto
-5953 880.57 lineto
-5953 750.57 lineto
-closepath fill
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 5869 750.57 moveto
-5869 880.57 lineto
-5953 880.57 lineto
-5953 750.57 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-5896 863.97 moveto 30 (CCA) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 5869 854.57 moveto
-5953 854.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-5877 837.97 moveto 68 (5':[78,86]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 5869 828.57 moveto
-5953 828.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-5891 811.97 moveto 40 (~5':[]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 5869 802.57 moveto
-5953 802.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-5895 785.97 moveto 32 (20.0) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 5869 776.57 moveto
-5953 776.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-5896 759.97 moveto 30 (CCA) alignedtext
-grestore
-% GGA->CCA
-gsave
-1 setlinewidth
-0.33333 1 1 edgecolor
-newpath 2790.12 1171.48 moveto
-2796.02 1168.79 2802.03 1166.42 2808 1164.57 curveto
-2925.52 1128.15 3789.35 1088.34 3912 1078.57 curveto
-4212.49 1054.64 4288.39 1056.69 4588 1023.57 curveto
-4595.12 1022.78 5602.94 881.83 5610 880.57 curveto
-5697.82 864.97 5799.03 842.09 5858.86 828.05 curveto
-stroke
-0.33333 1 1 edgecolor
-newpath 5859.89 831.41 moveto
-5868.82 825.71 lineto
-5858.29 824.59 lineto
-closepath fill
-1 setlinewidth
-solid
-0.33333 1 1 edgecolor
-newpath 5859.89 831.41 moveto
-5868.82 825.71 lineto
-5858.29 824.59 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-4055 1081.97 moveto 204 (RF: [2,10,14,43,49,54,63,75]) alignedtext
-grestore
-% CCC
-gsave
-0 0 0.75294 nodecolor
-newpath 10712.5 1940.57 moveto
-10712.5 2070.57 lineto
-10819.5 2070.57 lineto
-10819.5 1940.57 lineto
-closepath fill
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 10712.5 1940.57 moveto
-10712.5 2070.57 lineto
-10819.5 2070.57 lineto
-10819.5 1940.57 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-10751 2053.97 moveto 30 (CCC) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 10712.5 2044.57 moveto
-10819.5 2044.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-10720.5 2027.97 moveto 91 (5':[84,32,73]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 10712.5 2018.57 moveto
-10819.5 2018.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-10746 2001.97 moveto 40 (~5':[]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 10712.5 1992.57 moveto
-10819.5 1992.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-10750 1975.97 moveto 32 (19.0) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 10712.5 1966.57 moveto
-10819.5 1966.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-10751 1949.97 moveto 30 (CCC) alignedtext
-grestore
-% GGA->CCC
-gsave
-1 setlinewidth
-0.33333 1 1 edgecolor
-newpath 2735.49 1274.95 moveto
-2747.11 1405.57 2775.75 1688.84 2808 1718.57 curveto
-2863.53 1769.76 3071.48 1742.57 3147 1742.57 curveto
-3147 1742.57 3147 1742.57 5432 1742.57 curveto
-6241.81 1742.57 6444.49 1737.47 7254 1759.57 curveto
-7509.28 1766.54 7573.09 1770.26 7828 1785.57 curveto
-8982.2 1854.91 10388.91 1973.34 10702.19 2000.09 curveto
-stroke
-0.33333 1 1 edgecolor
-newpath 10702.18 2003.6 moveto
-10712.44 2000.97 lineto
-10702.78 1996.63 lineto
-closepath fill
-1 setlinewidth
-solid
-0.33333 1 1 edgecolor
-newpath 10702.18 2003.6 moveto
-10712.44 2000.97 lineto
-10702.78 1996.63 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-6923.5 1764.97 moveto 217 (RF: [1,3,20,28,35,44,51,67,95]) alignedtext
-grestore
-% CGA->GAA
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 11138.52 1019.41 moveto
-11132.89 949.68 11118.19 837.03 11080 747.57 curveto
-11045.42 666.57 10793.45 291.51 10688 238.57 curveto
-10648.05 218.52 9128.64 110.92 9084 108.57 curveto
-8090.26 56.4 5597.98 33.66 4606 112.57 curveto
-4300.4 136.88 3479.97 88.93 3236 274.57 curveto
-3191.26 308.62 3168.9 369 3157.79 417.59 curveto
-stroke
-0 0 0 edgecolor
-newpath 3154.35 416.94 moveto
-3155.66 427.45 lineto
-3161.2 418.42 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 3154.35 416.94 moveto
-3155.66 427.45 lineto
-3161.2 418.42 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-7412 76.97 moveto 414 (FF: [13,17,32,33,38,45,47,52,59,62,71,76,77,84,91,96,98]) alignedtext
-grestore
-% CGA->ATC
-gsave
-1 setlinewidth
-0.66667 1 1 edgecolor
-newpath 11098.3 1074.16 moveto
-11028.5 1058.47 10887.34 1030.57 10766 1030.57 curveto
-8970 1030.57 8970 1030.57 8970 1030.57 curveto
-8603.18 1030.57 8164.05 1086.93 8013.6 1107.87 curveto
-stroke
-0.66667 1 1 edgecolor
-newpath 8013.11 1104.4 moveto
-8003.7 1109.25 lineto
-8014.08 1111.33 lineto
-closepath fill
-1 setlinewidth
-solid
-0.66667 1 1 edgecolor
-newpath 8013.11 1104.4 moveto
-8003.7 1109.25 lineto
-8014.08 1111.33 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-9380.5 1035.97 moveto 361 (FR: [9,18,22,28,30,34,35,44,55,57,64,68,73,74,95]) alignedtext
-grestore
-% CGA->CCG
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 11113.01 1149.59 moveto
-11104.1 1164.25 11093.1 1178.68 11080 1189.57 curveto
-10937.4 1308.13 10863.69 1273.2 10688 1332.57 curveto
-9983.28 1570.7 9820.47 1705.91 9084 1810.57 curveto
-8682.25 1867.67 5837.79 1780.57 5432 1780.57 curveto
-2730 1780.57 2730 1780.57 2730 1780.57 curveto
-2574.42 1780.57 2391.54 1773.63 2296.94 1769.52 curveto
-stroke
-0 1 1 edgecolor
-newpath 2296.82 1766.02 moveto
-2286.67 1769.08 lineto
-2296.51 1773.01 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 2296.82 1766.02 moveto
-2286.67 1769.08 lineto
-2296.51 1773.01 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-6832.5 1821.97 moveto 399 (RR: [3,9,18,22,28,30,33,34,35,44,51,57,64,68,73,74,95]) alignedtext
-grestore
-% ACG
-gsave
-1 setlinewidth
-0 0 0 nodecolor
-newpath 11460 1018.57 moveto
-11460 1148.57 lineto
-11516 1148.57 lineto
-11516 1018.57 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-11472.5 1131.97 moveto 31 (ACG) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 11460 1122.57 moveto
-11516 1122.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-11474 1105.97 moveto 28 (5':[]) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 11460 1096.57 moveto
-11516 1096.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-11468 1079.97 moveto 40 (~5':[]) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 11460 1070.57 moveto
-11516 1070.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-11476.5 1053.97 moveto 23 (9.0) alignedtext
-1 setlinewidth
-0 0 0 nodecolor
-newpath 11460 1044.57 moveto
-11516 1044.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-11472.5 1027.97 moveto 31 (ACG) alignedtext
-grestore
-% CGA->ACG
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 11185.83 1066.15 moveto
-11191.84 1064.26 11198.01 1062.65 11204 1061.57 curveto
-11308.11 1042.88 11338.84 1038.17 11442 1061.57 curveto
-11444.66 1062.18 11447.35 1062.95 11450.01 1063.85 curveto
-stroke
-0 1 1 edgecolor
-newpath 11448.92 1067.18 moveto
-11459.51 1067.56 lineto
-11451.47 1060.66 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 11448.92 1067.18 moveto
-11459.51 1067.56 lineto
-11451.47 1060.66 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-11204.5 1066.97 moveto 237 (RR: [13,17,18,33,45,59,74,77,98]) alignedtext
-grestore
-% CGC
-gsave
-0 0 0.75294 nodecolor
-newpath 10729 1096.57 moveto
-10729 1226.57 lineto
-10803 1226.57 lineto
-10803 1096.57 lineto
-closepath fill
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 10729 1096.57 moveto
-10729 1226.57 lineto
-10803 1226.57 lineto
-10803 1096.57 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-10750.5 1209.97 moveto 31 (CGC) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 10729 1200.57 moveto
-10803 1200.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-10752 1183.97 moveto 28 (5':[]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 10729 1174.57 moveto
-10803 1174.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-10737 1157.97 moveto 58 (~5':[11]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 10729 1148.57 moveto
-10803 1148.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-10750 1131.97 moveto 32 (14.0) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 10729 1122.57 moveto
-10803 1122.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-10750.5 1105.97 moveto 31 (CGC) alignedtext
-grestore
-% CGA->CGC
-gsave
-1 setlinewidth
-0.33333 1 1 edgecolor
-newpath 11098.39 1083.68 moveto
-11039.27 1083.71 10931.07 1088.19 10844 1116.57 curveto
-10833.19 1120.1 10822.23 1125.25 10812.08 1130.82 curveto
-stroke
-0.33333 1 1 edgecolor
-newpath 10810.33 1127.79 moveto
-10803.39 1135.79 lineto
-10813.81 1133.86 lineto
-closepath fill
-1 setlinewidth
-solid
-0.33333 1 1 edgecolor
-newpath 10810.33 1127.79 moveto
-10803.39 1135.79 lineto
-10813.81 1133.86 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-10844.5 1121.97 moveto 235 (RF: [32,38,39,47,52,62,71,84,91]) alignedtext
-grestore
-% AGA->AAG
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 3745.14 356 moveto
-3792.21 361.15 3865.95 368.79 3930 373.57 curveto
-3980.37 377.33 4342.55 367.71 4384 396.57 curveto
-4444.18 438.48 4471.94 520.11 4484.62 580.58 curveto
-stroke
-0 1 1 edgecolor
-newpath 4481.2 581.36 moveto
-4486.6 590.47 lineto
-4488.07 579.98 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 4481.2 581.36 moveto
-4486.6 590.47 lineto
-4488.07 579.98 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-4106 401.97 moveto 102 (RR: [79,83,89]) alignedtext
-grestore
-% AGA->GAA
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 3648.89 359.75 moveto
-3601.83 368.6 3528.1 382.16 3464 392.57 curveto
-3362.94 408.99 3330.52 386.22 3236 425.57 curveto
-3232.92 426.85 3229.85 428.27 3226.81 429.79 curveto
-stroke
-0 0 0 edgecolor
-newpath 3224.9 426.84 moveto
-3217.75 434.65 lineto
-3228.22 433 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 3224.9 426.84 moveto
-3217.75 434.65 lineto
-3228.22 433 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-3237.5 430.97 moveto 225 (FF: [8,25,42,46,66,70,78,80,86]) alignedtext
-grestore
-% AGA->GAC
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 3745.29 308.3 moveto
-3789.86 272.11 3859.61 222.36 3930 199.57 curveto
-4088.98 148.1 5264.89 122.57 5432 122.57 curveto
-5432 122.57 5432 122.57 11488 122.57 curveto
-11615.47 122.57 11685.76 68.71 11772 162.57 curveto
-11800.42 193.5 11816.54 793.11 11821.41 1007.31 curveto
-stroke
-0 0 0 edgecolor
-newpath 11817.91 1007.6 moveto
-11821.64 1017.52 lineto
-11824.91 1007.45 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 11817.91 1007.6 moveto
-11821.64 1017.52 lineto
-11824.91 1007.45 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-8459.5 127.97 moveto 99 (FF: [29,79,89]) alignedtext
-grestore
-% AGA->CTC
-gsave
-1 setlinewidth
-0.66667 1 1 edgecolor
-newpath 3745.19 337.19 moveto
-3792 324.82 3865.28 307.1 3930 298.57 curveto
-4179.18 265.74 4243.66 274.57 4495 274.57 curveto
-4495 274.57 4495 274.57 5432 274.57 curveto
-6404.02 274.57 6646.98 260.57 7619 260.57 curveto
-7619 260.57 7619 260.57 10172 260.57 curveto
-10402.98 260.57 10497.53 191.91 10688 322.57 curveto
-10713.15 339.82 10730.82 367.84 10742.9 394.81 curveto
-stroke
-0.66667 1 1 edgecolor
-newpath 10739.8 396.46 moveto
-10746.95 404.29 lineto
-10746.24 393.72 lineto
-closepath fill
-1 setlinewidth
-solid
-0.66667 1 1 edgecolor
-newpath 10739.8 396.46 moveto
-10746.95 404.29 lineto
-10746.24 393.72 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-7519.5 266.97 moveto 199 (FR: [10,43,54,63,65,99,100]) alignedtext
-grestore
-% AGA->CAG
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 3745.48 351.09 moveto
-3880.77 352.74 4260.54 358.86 4384 376.57 curveto
-4585.45 405.47 4628.98 446.06 4828 488.57 curveto
-5438.74 619.04 5593.42 645.61 6212 731.57 curveto
-6362.46 752.48 6540.76 768.48 6630.78 775.94 curveto
-stroke
-0 1 1 edgecolor
-newpath 6630.54 779.43 moveto
-6640.79 776.77 lineto
-6631.11 772.46 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 6630.54 779.43 moveto
-6640.79 776.77 lineto
-6631.11 772.46 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-4828 578.97 moveto 408 (RR: [2,8,10,14,25,42,43,46,54,63,65,66,70,78,80,86,100]) alignedtext
-grestore
-% GAC->GGA
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 11813.26 1147.81 moveto
-11787.97 1289.87 11706.29 1614.57 11488 1614.57 curveto
-10469 1614.57 10469 1614.57 10469 1614.57 curveto
-9936.54 1614.57 8606.31 1556.05 8074 1543.57 curveto
-7325.65 1526.04 7138.56 1514.57 6390 1514.57 curveto
-3147 1514.57 3147 1514.57 3147 1514.57 curveto
-2987.47 1514.57 2924.15 1505.93 2808 1396.57 curveto
-2776.61 1367.02 2757.4 1322.91 2745.9 1284.95 curveto
-stroke
-0 1 1 edgecolor
-newpath 2749.15 1283.57 moveto
-2743 1274.94 lineto
-2742.42 1285.52 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 2749.15 1283.57 moveto
-2743 1274.94 lineto
-2742.42 1285.52 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-7846 1548.97 moveto 228 (RR: [9,13,17,18,33,45,74,77,98]) alignedtext
-grestore
-% GAC->AGA
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 11813.4 1017.41 moveto
-11780.97 809.68 11667.44 176.57 11488 176.57 curveto
-7619 176.57 7619 176.57 7619 176.57 curveto
-7072.69 176.57 6936.31 198.57 6390 198.57 curveto
-4708 198.57 4708 198.57 4708 198.57 curveto
-4360.79 198.57 4269.38 196.25 3930 269.57 curveto
-3868.52 282.86 3800.88 307.56 3754.4 326.21 curveto
-stroke
-0 1 1 edgecolor
-newpath 3753.06 322.98 moveto
-3745.1 329.97 lineto
-3755.68 329.46 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 3753.06 322.98 moveto
-3745.1 329.97 lineto
-3755.68 329.46 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-8458 181.97 moveto 102 (RR: [29,79,89]) alignedtext
-grestore
-% GAC->ACG
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 11790.29 1082.67 moveto
-11728.01 1082.86 11592.71 1083.26 11526.32 1083.46 curveto
-stroke
-0 0 0 edgecolor
-newpath 11526.26 1079.96 moveto
-11516.27 1083.49 lineto
-11526.28 1086.96 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 11526.26 1079.96 moveto
-11516.27 1083.49 lineto
-11526.28 1086.96 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-11536 1087.97 moveto 234 (FF: [13,17,18,33,45,59,74,77,98]) alignedtext
-grestore
-% GAC->CAA
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 11855.66 1067.7 moveto
-11861.65 1065.58 11867.93 1063.72 11874 1062.57 curveto
-11956.97 1046.88 11980.26 1051.71 12064 1062.57 curveto
-12066.82 1062.94 12069.7 1063.38 12072.59 1063.89 curveto
-stroke
-0 0 0 edgecolor
-newpath 12071.95 1067.33 moveto
-12082.44 1065.82 lineto
-12073.3 1060.46 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 12071.95 1067.33 moveto
-12082.44 1065.82 lineto
-12073.3 1060.46 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-11874.5 1067.97 moveto 189 (FF: [22,29,34,55,57,68,79]) alignedtext
-grestore
-% CTC->TCA
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 10706.24 519.17 moveto
-10700.32 522.47 10694.2 525.36 10688 527.57 curveto
-10280.31 673.19 9174.92 618.57 8742 618.57 curveto
-7960 618.57 7960 618.57 7960 618.57 curveto
-7715.39 618.57 7649.64 589.55 7410 638.57 curveto
-7407.36 639.11 7404.69 639.73 7402.01 640.42 curveto
-stroke
-0 0 0 edgecolor
-newpath 7400.98 637.07 moveto
-7392.31 643.16 lineto
-7402.88 643.81 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 7400.98 637.07 moveto
-7392.31 643.16 lineto
-7402.88 643.81 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-8857.5 628.97 moveto 225 (FF: [6,25,36,46,53,66,70,80,87]) alignedtext
-grestore
-% CTC->GGA
-gsave
-1 setlinewidth
-0.66667 1 1 edgecolor
-newpath 10706.3 467.13 moveto
-10610.08 462.88 10414.8 452.99 10250 436.57 curveto
-9795.67 391.31 9688.58 298.57 9232 298.57 curveto
-7619 298.57 7619 298.57 7619 298.57 curveto
-6983.64 298.57 6828.47 218.16 6194 184.57 curveto
-5180.89 130.94 4926.45 141.02 3912 128.57 curveto
-3720.9 126.23 3672.08 108.7 3482 128.57 curveto
-3370.86 140.19 3334.39 127.59 3236 180.57 curveto
-3177.13 212.27 2837.66 543.65 2808 603.57 curveto
-2762.61 695.27 2741.33 992.92 2733.61 1134.03 curveto
-stroke
-0.66667 1 1 edgecolor
-newpath 2730.09 1134.15 moveto
-2733.05 1144.33 lineto
-2737.08 1134.53 lineto
-closepath fill
-1 setlinewidth
-solid
-0.66667 1 1 edgecolor
-newpath 2730.09 1134.15 moveto
-2733.05 1144.33 lineto
-2737.08 1134.53 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-6939 293.97 moveto 186 (FR: [1,3,4,20,35,44,51,67]) alignedtext
-grestore
-% CTC->AGA
-gsave
-1 setlinewidth
-0.66667 1 1 edgecolor
-newpath 10706.19 424.32 moveto
-10700.23 421 10694.12 418.01 10688 415.57 curveto
-10472.44 329.79 10404.01 336.57 10172 336.57 curveto
-7619 336.57 7619 336.57 7619 336.57 curveto
-6279.89 336.57 5945.08 330.61 4606 339.57 curveto
-4305.55 341.58 4230.42 341.02 3930 345.57 curveto
-3870.45 346.48 3802.35 347.99 3755.22 349.12 curveto
-stroke
-0.66667 1 1 edgecolor
-newpath 3755.1 345.62 moveto
-3745.19 349.36 lineto
-3755.27 352.62 lineto
-closepath fill
-1 setlinewidth
-solid
-0.66667 1 1 edgecolor
-newpath 3755.1 345.62 moveto
-3745.19 349.36 lineto
-3755.27 352.62 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-7519.5 341.97 moveto 199 (FR: [10,43,54,63,65,99,100]) alignedtext
-grestore
-% CTC->AGC
-gsave
-1 setlinewidth
-0.33333 1 1 edgecolor
-newpath 10742.48 534.64 moveto
-10729.94 561.4 10712.05 590.7 10688 610.57 curveto
-10530.14 741.01 10410.57 626.48 10250 753.57 curveto
-10231.78 767.99 10216.78 787.92 10204.97 807.77 curveto
-stroke
-0.33333 1 1 edgecolor
-newpath 10201.87 806.14 moveto
-10199.94 816.56 lineto
-10207.95 809.62 lineto
-closepath fill
-1 setlinewidth
-solid
-0.33333 1 1 edgecolor
-newpath 10201.87 806.14 moveto
-10199.94 816.56 lineto
-10207.95 809.62 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-10250 758.97 moveto 438 (RF: [6,10,25,36,43,46,53,54,58,63,65,66,70,76,80,87,99,100]) alignedtext
-grestore
-% CTC->ACT
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 10706.3 441.52 moveto
-10700.22 439.51 10694.05 437.8 10688 436.57 curveto
-10497.22 397.88 10444.66 435.28 10250 436.57 curveto
-9579.73 441.02 9412.28 456.57 8742 456.57 curveto
-7032 456.57 7032 456.57 7032 456.57 curveto
-6404.95 456.57 6251.75 531.34 5628 595.57 curveto
-5461.71 612.7 5418.18 604.09 5254 635.57 curveto
-5197.55 646.4 5134.56 664.59 5090.14 678.48 curveto
-stroke
-0 1 1 edgecolor
-newpath 5088.87 675.21 moveto
-5080.39 681.55 lineto
-5090.98 681.89 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 5088.87 675.21 moveto
-5080.39 681.55 lineto
-5090.98 681.89 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-8116 461.97 moveto 232 (RR: [1,3,4,20,27,35,41,44,51,67]) alignedtext
-grestore
-% CAG->TCA
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 6737.09 778.16 moveto
-6872.59 771.35 7248.15 752.25 7254 749.57 curveto
-7259.82 746.9 7265.44 743.59 7270.8 739.84 curveto
-stroke
-0 1 1 edgecolor
-newpath 7273.15 742.44 moveto
-7279 733.61 lineto
-7268.92 736.87 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 7273.15 742.44 moveto
-7279 733.61 lineto
-7268.92 736.87 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-6810 778.97 moveto 444 (RR: [6,8,19,25,26,31,42,46,50,60,66,69,70,72,78,80,86,90,92]) alignedtext
-grestore
-% CAG->AGA
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 6640.8 758.7 moveto
-6619.01 749.74 6592.65 740.18 6568 734.57 curveto
-6490.59 716.96 6273.42 754.87 6212 704.57 curveto
-6189.8 686.39 6214.37 662.78 6194 642.57 curveto
-5879.98 331 5673.42 438.54 5236 372.57 curveto
-4861.45 316.09 4762.75 356.51 4384 351.57 curveto
-4151.31 348.54 3874.25 349.55 3755.61 350.2 curveto
-stroke
-0 0 0 edgecolor
-newpath 3755.29 346.7 moveto
-3745.31 350.26 lineto
-3755.33 353.7 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 3755.29 346.7 moveto
-3745.31 350.26 lineto
-3755.33 353.7 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-4829.5 377.97 moveto 405 (FF: [2,8,10,14,25,42,43,46,54,63,65,66,70,78,80,86,100]) alignedtext
-grestore
-% CAG->CCA
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 6640.88 789.11 moveto
-6618.75 792.68 6592.12 796.47 6568 798.57 curveto
-6343.91 818.07 6075.34 817.62 5963.68 816.38 curveto
-stroke
-0 1 1 edgecolor
-newpath 5963.42 812.88 moveto
-5953.38 816.26 lineto
-5963.33 819.88 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 5963.42 812.88 moveto
-5953.38 816.26 lineto
-5963.33 819.88 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-6283 819.97 moveto 214 (RR: [2,10,14,43,54,63,75,100]) alignedtext
-grestore
-% CAG->AGC
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 6737.17 795.26 moveto
-6759.18 801.47 6785.72 808.25 6810 812.57 curveto
-7039.42 853.39 7098.98 861.57 7332 861.57 curveto
-7332 861.57 7332 861.57 9561 861.57 curveto
-9757.06 861.57 9988.33 871.99 10101.89 877.79 curveto
-stroke
-0 0 0 edgecolor
-newpath 10102.01 881.3 moveto
-10112.18 878.31 lineto
-10102.37 874.31 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 10102.01 881.3 moveto
-10112.18 878.31 lineto
-10102.37 874.31 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-8392 866.97 moveto 234 (FF: [19,26,31,50,60,69,72,90,92]) alignedtext
-grestore
-% ATC->AAT
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 7916.24 1113.44 moveto
-7536.09 1095.08 4753.38 964.57 2494 964.57 curveto
-1091 964.57 1091 964.57 1091 964.57 curveto
-955.46 964.57 799.47 971.57 697.82 977.08 curveto
-stroke
-0 1 1 edgecolor
-newpath 697.34 973.6 moveto
-687.55 977.64 lineto
-697.72 980.59 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 697.34 973.6 moveto
-687.55 977.64 lineto
-697.72 980.59 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-3520 983.97 moveto 354 (RR: [7,9,11,16,18,27,30,37,40,41,56,64,74,82,85]) alignedtext
-grestore
-% ATC->TCA
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 7928.7 1050.24 moveto
-7905.6 1007.4 7870.81 952.5 7828 914.57 curveto
-7698.02 799.4 7504.46 724.27 7401.8 690.02 curveto
-stroke
-0 0 0 edgecolor
-newpath 7402.75 686.65 moveto
-7392.16 686.83 lineto
-7400.55 693.29 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 7402.75 686.65 moveto
-7392.16 686.83 lineto
-7400.55 693.29 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-7536 919.97 moveto 166 (FF: [19,26,60,72,90,92]) alignedtext
-grestore
-% ATC->GGA
-gsave
-1 setlinewidth
-0.66667 1 1 edgecolor
-newpath 7916.23 1127.55 moveto
-7814.52 1154.31 7553.96 1216.57 7332 1216.57 curveto
-3147 1216.57 3147 1216.57 3147 1216.57 curveto
-3025.02 1216.57 2882.99 1213.54 2800.13 1211.47 curveto
-stroke
-0.66667 1 1 edgecolor
-newpath 2800.16 1207.97 moveto
-2790.07 1211.21 lineto
-2799.98 1214.97 lineto
-closepath fill
-1 setlinewidth
-solid
-0.66667 1 1 edgecolor
-newpath 2800.16 1207.97 moveto
-2790.07 1211.21 lineto
-2799.98 1214.97 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-4948 1221.97 moveto 168 (FR: [11,16,37,56,82,85]) alignedtext
-grestore
-% ATC->CGA
-gsave
-1 setlinewidth
-0.66667 1 1 edgecolor
-newpath 8003.66 1114.71 moveto
-8235.24 1110.18 9343.47 1089.1 10250 1082.57 curveto
-10618.88 1079.91 10711.16 1076.62 11080 1082.57 curveto
-11082.68 1082.62 11085.43 1082.67 11088.21 1082.73 curveto
-stroke
-0.66667 1 1 edgecolor
-newpath 11088.22 1086.23 moveto
-11098.31 1082.99 lineto
-11088.4 1079.23 lineto
-closepath fill
-1 setlinewidth
-solid
-0.66667 1 1 edgecolor
-newpath 11088.22 1086.23 moveto
-11098.31 1082.99 lineto
-11088.4 1079.23 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-9380.5 1096.97 moveto 361 (FR: [9,18,22,28,30,34,35,44,55,57,64,68,73,74,95]) alignedtext
-grestore
-% ATC->ATC
-gsave
-1 setlinewidth
-0.33333 1 1 edgecolor
-newpath 7916.47 1146.65 moveto
-7898.48 1172.12 7912.98 1198.57 7960 1198.57 curveto
-8001.51 1198.57 8017.68 1177.96 8008.51 1155.6 curveto
-stroke
-0.33333 1 1 edgecolor
-newpath 8011.45 1153.68 moveto
-8003.53 1146.65 lineto
-8005.34 1157.09 lineto
-closepath fill
-1 setlinewidth
-solid
-0.33333 1 1 edgecolor
-newpath 8011.45 1153.68 moveto
-8003.53 1146.65 lineto
-8005.34 1157.09 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-7887.5 1203.97 moveto 145 (RF: [19,60,72,90,92]) alignedtext
-grestore
-% ATC->ATA
-gsave
-1 setlinewidth
-0.33333 1 1 edgecolor
-newpath 8003.61 1121.98 moveto
-8080.84 1134.48 8245.43 1166.29 8372 1226.57 curveto
-8397.72 1238.82 8423.63 1256.02 8445.9 1272.65 curveto
-stroke
-0.33333 1 1 edgecolor
-newpath 8443.84 1275.48 moveto
-8453.93 1278.74 lineto
-8448.07 1269.9 lineto
-closepath fill
-1 setlinewidth
-solid
-0.33333 1 1 edgecolor
-newpath 8443.84 1275.48 moveto
-8453.93 1278.74 lineto
-8448.07 1269.9 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-8092 1231.97 moveto 280 (RF: [22,28,29,34,35,44,55,57,68,73,95]) alignedtext
-grestore
-% CCG->GGA
-gsave
-1 setlinewidth
-0.33333 1 1 edgecolor
-newpath 2237.54 1701.54 moveto
-2247.33 1581.01 2274.73 1329.91 2336 1271.57 curveto
-2422.71 1189.02 2572.02 1189.69 2659.82 1198.83 curveto
-stroke
-0.33333 1 1 edgecolor
-newpath 2659.63 1202.33 moveto
-2669.95 1199.95 lineto
-2660.4 1195.38 lineto
-closepath fill
-1 setlinewidth
-solid
-0.33333 1 1 edgecolor
-newpath 2659.63 1202.33 moveto
-2669.95 1199.95 lineto
-2660.4 1195.38 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-2336 1276.97 moveto 316 (RF: [9,11,16,18,30,33,45,56,64,74,77,82,85]) alignedtext
-grestore
-% CCG->CGA
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 2280.95 1831.78 moveto
-2296.61 1848.67 2315.35 1865.05 2336 1875.57 curveto
-2493.33 1955.73 2553.43 1926.57 2730 1926.57 curveto
-2730 1926.57 2730 1926.57 5432 1926.57 curveto
-6143.15 1926.57 6320.85 1910.57 7032 1910.57 curveto
-7032 1910.57 7032 1910.57 8232 1910.57 curveto
-8677.37 1910.57 9804.69 1907.11 10232 1781.57 curveto
-10240.78 1778.99 10241.25 1774.24 10250 1771.57 curveto
-10343.44 1743.11 10601.57 1780.08 10688 1734.57 curveto
-10931.42 1606.42 10944.07 1494.73 11080 1255.57 curveto
-11096.97 1225.72 11110.71 1190.38 11120.9 1159.6 curveto
-stroke
-0 0 0 edgecolor
-newpath 11124.33 1160.37 moveto
-11124.08 1149.77 lineto
-11117.67 1158.21 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 11124.33 1160.37 moveto
-11124.08 1149.77 lineto
-11117.67 1158.21 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-6834 1915.97 moveto 396 (FF: [3,9,18,22,28,30,33,34,35,44,51,57,64,68,73,74,95]) alignedtext
-grestore
-% CCG->CCG
-gsave
-1 setlinewidth
-0.66667 1 1 edgecolor
-newpath 2190.67 1831.64 moveto
-2196.73 1842.27 2210.84 1849.57 2233 1849.57 curveto
-2249.27 1849.57 2261.21 1845.63 2268.8 1839.33 curveto
-stroke
-0.66667 1 1 edgecolor
-newpath 2271.52 1841.53 moveto
-2275.33 1831.64 lineto
-2266.19 1837 lineto
-closepath fill
-1 setlinewidth
-solid
-0.66667 1 1 edgecolor
-newpath 2271.52 1841.53 moveto
-2275.33 1831.64 lineto
-2266.19 1837 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-2124.5 1854.97 moveto 217 (FR: [5,7,15,21,23,37,40,48,96]) alignedtext
-grestore
-% CCG->CCC
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 2253.89 1831.62 moveto
-2269.92 1870.21 2296.16 1916.23 2336 1940.57 curveto
-2410.85 1986.31 2642.28 1964.57 2730 1964.57 curveto
-2730 1964.57 2730 1964.57 5432 1964.57 curveto
-6555.56 1964.57 6836.44 1954.57 7960 1954.57 curveto
-7960 1954.57 7960 1954.57 8742 1954.57 curveto
-9412.46 1954.57 9579.73 1978.54 10250 1994.57 curveto
-10412.7 1998.46 10604.28 2002.37 10701.85 2004.31 curveto
-stroke
-0 1 1 edgecolor
-newpath 10702.07 2007.82 moveto
-10712.14 2004.52 lineto
-10702.21 2000.82 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 10702.07 2007.82 moveto
-10712.14 2004.52 lineto
-10702.21 2000.82 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-6586.5 1964.97 moveto 205 (RR: [3,20,28,35,44,51,73,95]) alignedtext
-grestore
-% CCG->ACC
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 2286.57 1783.14 moveto
-2302.36 1787.48 2319.75 1791.73 2336 1794.57 curveto
-2509.06 1824.86 2554.31 1826.57 2730 1826.57 curveto
-2730 1826.57 2730 1826.57 5432 1826.57 curveto
-6854.41 1826.57 7239.15 1965.73 8628 1658.57 curveto
-8844.55 1610.68 8887.73 1559.81 9102 1502.57 curveto
-9238.21 1466.19 9400.29 1435.54 9490.83 1419.53 curveto
-stroke
-0 1 1 edgecolor
-newpath 9491.47 1422.97 moveto
-9500.71 1417.79 lineto
-9490.25 1416.08 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 9491.47 1422.97 moveto
-9500.71 1417.79 lineto
-9490.25 1416.08 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-5801.5 1843.97 moveto 219 (RR: [5,7,15,21,23,37,40,48,56]) alignedtext
-grestore
-% GCC
-gsave
-0 0 0.75294 nodecolor
-newpath 1597 1586.57 moveto
-1597 1716.57 lineto
-1681 1716.57 lineto
-1681 1586.57 lineto
-closepath fill
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 1597 1586.57 moveto
-1597 1716.57 lineto
-1681 1716.57 lineto
-1681 1586.57 lineto
-closepath stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-1623.5 1699.97 moveto 31 (GCC) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 1597 1690.57 moveto
-1681 1690.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-1605 1673.97 moveto 68 (5':[40,39]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 1597 1664.57 moveto
-1681 1664.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-1619 1647.97 moveto 40 (~5':[]) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 1597 1638.57 moveto
-1681 1638.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-1623 1621.97 moveto 32 (34.0) alignedtext
-1 setlinewidth
-filled
-0 0 0 nodecolor
-newpath 1597 1612.57 moveto
-1681 1612.57 lineto
-stroke
-0 0 0 nodecolor
-14 /Times-Roman set_font
-1623.5 1595.97 moveto 31 (GCC) alignedtext
-grestore
-% CCG->GCC
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 2179.32 1716.88 moveto
-2164.36 1705.68 2147.41 1695.16 2130 1688.57 curveto
-1978.91 1631.41 1783.35 1638.48 1691.29 1646.1 curveto
-stroke
-0 1 1 edgecolor
-newpath 1690.77 1642.63 moveto
-1681.11 1646.98 lineto
-1691.38 1649.6 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 1690.77 1642.63 moveto
-1681.11 1646.98 lineto
-1691.38 1649.6 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-1891 1693.97 moveto 196 (RR: [5,7,15,21,23,40,48,96]) alignedtext
-grestore
-% CCG->CGC
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 2286.71 1748.46 moveto
-2377.1 1719.65 2565.85 1666.57 2730 1666.57 curveto
-2730 1666.57 2730 1666.57 5432 1666.57 curveto
-6142.22 1666.57 7918.62 1693.17 8628 1658.57 curveto
-8721.64 1654.01 8744.8 1648.77 8838 1638.57 curveto
-9248.45 1593.66 9350.2 1575.06 9760 1524.57 curveto
-9908.44 1506.28 9950.45 1525.55 10094 1483.57 curveto
-10342.84 1410.8 10613.91 1254.63 10719.9 1190.24 curveto
-stroke
-0 0 0 edgecolor
-newpath 10722.03 1193.04 moveto
-10728.74 1184.84 lineto
-10718.38 1187.06 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 10722.03 1193.04 moveto
-10728.74 1184.84 lineto
-10718.38 1187.06 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-6617 1678.97 moveto 144 (FF: [11,16,82,85,93]) alignedtext
-grestore
-% CCA->GGA
-gsave
-1 setlinewidth
-0.33333 1 1 edgecolor
-newpath 5868.85 832.68 moveto
-5811.28 855.42 5704.41 895.42 5610 918.57 curveto
-5446.7 958.62 5402.32 950.89 5236 975.57 curveto
-4857.55 1031.73 4764.5 1058.61 4384 1098.57 curveto
-3685.87 1171.89 3507.85 1148.08 2808 1202.57 curveto
-2805.45 1202.77 2802.85 1202.98 2800.23 1203.19 curveto
-stroke
-0.33333 1 1 edgecolor
-newpath 2799.71 1199.72 moveto
-2790.03 1204.04 lineto
-2800.29 1206.7 lineto
-closepath fill
-1 setlinewidth
-solid
-0.33333 1 1 edgecolor
-newpath 2799.71 1199.72 moveto
-2790.03 1204.04 lineto
-2800.29 1206.7 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-4055 1143.97 moveto 204 (RF: [2,10,14,43,49,54,63,75]) alignedtext
-grestore
-% CCA->CAG
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 5953.24 809.1 moveto
-6011.35 800.55 6119.3 785.94 6212 780.57 curveto
-6362.7 771.84 6540.63 775.54 6630.61 778.4 curveto
-stroke
-0 0 0 edgecolor
-newpath 6630.77 781.91 moveto
-6640.88 778.73 lineto
-6631 774.91 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 6630.77 781.91 moveto
-6640.88 778.73 lineto
-6631 774.91 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-6284.5 785.97 moveto 211 (FF: [2,10,14,43,54,63,75,100]) alignedtext
-grestore
-% CCA->GCC
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 5868.58 815.2 moveto
-5569.88 812.67 3778.9 799.3 3236 837.57 curveto
-2833.46 865.95 2729.4 867.66 2336 957.57 curveto
-2113.49 1008.43 2013.87 960.78 1848 1117.57 curveto
-1715.79 1242.54 1665.84 1461.19 1648.07 1576.1 curveto
-stroke
-0 1 1 edgecolor
-newpath 1644.58 1575.81 moveto
-1646.55 1586.22 lineto
-1651.5 1576.85 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 1644.58 1575.81 moveto
-1646.55 1586.22 lineto
-1651.5 1576.85 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-3254 842.97 moveto 192 (RR: [19,26,31,50,69,90,92]) alignedtext
-grestore
-% CCA->ACT
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 5868.7 809.96 moveto
-5810.52 802.4 5702.48 788.93 5610 780.57 curveto
-5452.09 766.3 5410.42 783.5 5254 757.57 curveto
-5197.43 748.2 5134.45 730.45 5090.06 716.68 curveto
-stroke
-0 0 0 edgecolor
-newpath 5090.91 713.28 moveto
-5080.32 713.63 lineto
-5088.82 719.96 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 5090.91 713.28 moveto
-5080.32 713.63 lineto
-5088.82 719.96 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-5254.5 785.97 moveto 355 (FF: [1,3,4,8,20,26,27,31,41,42,50,51,67,69,78,86]) alignedtext
-grestore
-% CCC->GGA
-gsave
-1 setlinewidth
-0.33333 1 1 edgecolor
-newpath 10712.1 1968.93 moveto
-10704.27 1964.86 10696.11 1961.23 10688 1958.57 curveto
-9903.38 1701.66 9661.84 1844.59 8838 1790.57 curveto
-7326.98 1691.5 6946.26 1704.57 5432 1704.57 curveto
-3147 1704.57 3147 1704.57 3147 1704.57 curveto
-2977.24 1704.57 2912.87 1662.07 2808 1528.57 curveto
-2778.59 1491.13 2754.35 1366.74 2741.06 1284.81 curveto
-stroke
-0.33333 1 1 edgecolor
-newpath 2744.49 1284.11 moveto
-2739.45 1274.79 lineto
-2737.58 1285.22 lineto
-closepath fill
-1 setlinewidth
-solid
-0.33333 1 1 edgecolor
-newpath 2744.49 1284.11 moveto
-2739.45 1274.79 lineto
-2737.58 1285.22 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-6923.5 1717.97 moveto 217 (RF: [1,3,20,28,35,44,51,67,95]) alignedtext
-grestore
-% CCC->CCG
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 10712.25 2031.1 moveto
-10704.26 2034.07 10696.02 2036.7 10688 2038.57 curveto
-10464.28 2090.75 10401.72 2068.57 10172 2068.57 curveto
-8970 2068.57 8970 2068.57 8970 2068.57 curveto
-8571.61 2068.57 8472.29 2051.37 8074 2042.57 curveto
-6899.93 2016.65 6606.36 2002.57 5432 2002.57 curveto
-2730 2002.57 2730 2002.57 2730 2002.57 curveto
-2554.56 2002.57 2481.81 2076.13 2336 1978.57 curveto
-2289.47 1947.44 2263.25 1889.02 2248.93 1841.39 curveto
-stroke
-0 0 0 edgecolor
-newpath 2252.27 1840.34 moveto
-2246.14 1831.71 lineto
-2245.55 1842.28 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 2252.27 1840.34 moveto
-2246.14 1831.71 lineto
-2245.55 1842.28 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-6588 2017.97 moveto 202 (FF: [3,20,28,35,44,51,73,95]) alignedtext
-grestore
-% CCC->GCC
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 10712.49 2055.02 moveto
-10704.66 2060.55 10696.4 2065.62 10688 2069.57 curveto
-10476.59 2169.15 10405.69 2170.57 10172 2170.57 curveto
-8232 2170.57 8232 2170.57 8232 2170.57 curveto
-7492.39 2170.57 7307.6 2154.8 6568 2149.57 curveto
-6276.01 2147.51 6203 2148.57 5911 2148.57 curveto
-4708 2148.57 4708 2148.57 4708 2148.57 curveto
-2531.46 2148.57 1872.82 2121.28 1848 2104.57 curveto
-1719.59 2018.11 1668.61 1831.56 1649.53 1726.83 curveto
-stroke
-0 1 1 edgecolor
-newpath 1652.97 1726.2 moveto
-1647.78 1716.96 lineto
-1646.08 1727.42 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 1652.97 1726.2 moveto
-1647.78 1716.96 lineto
-1646.08 1727.42 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-6310 2154.97 moveto 160 (RR: [6,36,53,70,76,87]) alignedtext
-grestore
-% CCC->AGG
-gsave
-1 setlinewidth
-0.66667 1 1 edgecolor
-newpath 10758.54 1940.42 moveto
-10749.67 1895.19 10730.3 1837.67 10688 1806.57 curveto
-10609.38 1748.77 10340.11 1813.02 10250 1775.57 curveto
-10238.22 1770.68 10226.97 1763.26 10216.87 1755.11 curveto
-stroke
-0.66667 1 1 edgecolor
-newpath 10218.91 1752.25 moveto
-10209.02 1748.44 lineto
-10214.38 1757.58 lineto
-closepath fill
-1 setlinewidth
-solid
-0.66667 1 1 edgecolor
-newpath 10218.91 1752.25 moveto
-10209.02 1748.44 lineto
-10214.38 1757.58 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-10367 1811.97 moveto 204 (FR: [6,32,36,53,62,76,84,87]) alignedtext
-grestore
-% ATA->AAT
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 8453.78 1325.79 moveto
-8239.97 1326.63 7445.94 1329.62 6792 1330.57 curveto
-6734.75 1330.66 2713.13 1354.22 2670 1316.57 curveto
-2627.39 1279.37 2687.77 1234.4 2652 1190.57 curveto
-2526.94 1037.33 2430.8 1040.57 2233 1040.57 curveto
-1091 1040.57 1091 1040.57 1091 1040.57 curveto
-919.56 1040.57 875.01 1045.34 706 1016.57 curveto
-703.17 1016.09 700.31 1015.57 697.44 1015.01 curveto
-stroke
-0 1 1 edgecolor
-newpath 698.11 1011.57 moveto
-687.6 1012.98 lineto
-696.69 1018.43 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 698.11 1011.57 moveto
-687.6 1012.98 lineto
-696.69 1018.43 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-3930.5 1342.97 moveto 453 (RR: [2,14,22,28,29,34,49,55,57,68,73,75,79,81,83,89,94,95,97]) alignedtext
-grestore
-% ATA->TAA
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 8564.04 1327.09 moveto
-8629.41 1328.55 8741.71 1329.94 8838 1325.57 curveto
-8862.12 1324.48 8888.64 1322.26 8911.55 1320.03 curveto
-stroke
-0 0 0 edgecolor
-newpath 8912.19 1323.49 moveto
-8921.8 1319.01 lineto
-8911.5 1316.52 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 8912.19 1323.49 moveto
-8921.8 1319.01 lineto
-8911.5 1316.52 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-8647.5 1332.97 moveto 189 (FF: [49,75,81,83,89,94,97]) alignedtext
-grestore
-% ATA->ATC
-gsave
-1 setlinewidth
-0.33333 1 1 edgecolor
-newpath 8453.64 1319.51 moveto
-8355.17 1308.04 8154.09 1281.36 8092 1248.57 curveto
-8060.98 1232.19 8032.67 1206.01 8010.29 1181.19 curveto
-stroke
-0.33333 1 1 edgecolor
-newpath 8012.78 1178.72 moveto
-8003.54 1173.54 lineto
-8007.53 1183.35 lineto
-closepath fill
-1 setlinewidth
-solid
-0.33333 1 1 edgecolor
-newpath 8012.78 1178.72 moveto
-8003.54 1173.54 lineto
-8007.53 1183.35 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-8092 1312.97 moveto 280 (RF: [22,28,29,34,35,44,55,57,68,73,95]) alignedtext
-grestore
-% ATA->ATA
-gsave
-1 setlinewidth
-0.66667 1 1 edgecolor
-newpath 8468.75 1390.64 moveto
-8474.51 1401.27 8487.93 1408.57 8509 1408.57 curveto
-8524.14 1408.57 8535.33 1404.8 8542.57 1398.73 curveto
-stroke
-0.66667 1 1 edgecolor
-newpath 8545.58 1400.58 moveto
-8549.25 1390.64 lineto
-8540.18 1396.13 lineto
-closepath fill
-1 setlinewidth
-solid
-0.66667 1 1 edgecolor
-newpath 8545.58 1400.58 moveto
-8549.25 1390.64 lineto
-8540.18 1396.13 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-8380 1413.97 moveto 258 (FR: [22,28,29,34,55,57,68,73,79,95]) alignedtext
-grestore
-% ACG->CGA
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 11459.58 1083.65 moveto
-11401.93 1083.82 11270.37 1084.2 11195.93 1084.42 curveto
-stroke
-0 0 0 edgecolor
-newpath 11195.81 1080.92 moveto
-11185.82 1084.45 lineto
-11195.83 1087.92 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 11195.81 1080.92 moveto
-11185.82 1084.45 lineto
-11195.83 1087.92 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-11206 1088.97 moveto 234 (FF: [13,17,18,33,45,59,74,77,98]) alignedtext
-grestore
-% ACG->GAC
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 11516.43 1066.84 moveto
-11522.08 1064.24 11528.09 1061.97 11534 1060.57 curveto
-11636.95 1036.27 11668.41 1039.18 11772 1060.57 curveto
-11774.97 1061.19 11777.99 1061.98 11780.99 1062.91 curveto
-stroke
-0 1 1 edgecolor
-newpath 11779.85 1066.22 moveto
-11790.44 1066.22 lineto
-11782.17 1059.61 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 11779.85 1066.22 moveto
-11790.44 1066.22 lineto
-11782.17 1059.61 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-11534.5 1065.97 moveto 237 (RR: [13,17,18,33,45,59,74,77,98]) alignedtext
-grestore
-% CAA->AAT
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 12132.96 1146.92 moveto
-12119.65 1395.13 12056.35 2265.57 11823 2265.57 curveto
-7619 2265.57 7619 2265.57 7619 2265.57 curveto
-7072.52 2265.57 6936.48 2227.57 6390 2227.57 curveto
-1091 2227.57 1091 2227.57 1091 2227.57 curveto
-754.09 2227.57 825.97 1889.4 706 1574.57 curveto
-638.3 1396.92 607.75 1173.6 595.73 1059.02 curveto
-stroke
-0 0 0 edgecolor
-newpath 599.2 1058.54 moveto
-594.69 1048.95 lineto
-592.24 1059.26 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 599.2 1058.54 moveto
-594.69 1048.95 lineto
-592.24 1059.26 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-6926.5 2263.97 moveto 211 (FF: [22,29,34,55,57,68,73,79]) alignedtext
-grestore
-% CAA->GAC
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 12082.36 1081.74 moveto
-12021.16 1081.94 11922.29 1082.26 11865.95 1082.44 curveto
-stroke
-0 1 1 edgecolor
-newpath 11865.6 1078.94 moveto
-11855.61 1082.47 lineto
-11865.62 1085.94 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 11865.6 1078.94 moveto
-11855.61 1082.47 lineto
-11865.62 1085.94 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-11907 1086.97 moveto 124 (RR: [29,55,79,89]) alignedtext
-grestore
-% ACC->TAA
-gsave
-1 setlinewidth
-0.33333 1 1 edgecolor
-newpath 9500.66 1388.01 moveto
-9461.53 1376.04 9409.22 1361.38 9362 1352.57 curveto
-9244.81 1330.71 9105.48 1320.54 9028.48 1316.27 curveto
-stroke
-0.33333 1 1 edgecolor
-newpath 9028.22 1312.76 moveto
-9018.04 1315.71 lineto
-9027.84 1319.74 lineto
-closepath fill
-1 setlinewidth
-solid
-0.33333 1 1 edgecolor
-newpath 9028.22 1312.76 moveto
-9018.04 1315.71 lineto
-9027.84 1319.74 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-9164 1357.97 moveto 136 (RF: [7,11,37,40,56]) alignedtext
-grestore
-% ACC->CCG
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 9500.71 1445.23 moveto
-9317.51 1555.93 8748.39 1872.57 8232 1872.57 curveto
-7032 1872.57 7032 1872.57 7032 1872.57 curveto
-6320.88 1872.57 6143.12 1880.57 5432 1880.57 curveto
-2730 1880.57 2730 1880.57 2730 1880.57 curveto
-2553.99 1880.57 2500.6 1902.92 2336 1840.57 curveto
-2321.81 1835.2 2307.8 1827.36 2294.9 1818.76 curveto
-stroke
-0 0 0 edgecolor
-newpath 2296.8 1815.83 moveto
-2286.59 1813.03 lineto
-2292.83 1821.59 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 2296.8 1815.83 moveto
-2286.59 1813.03 lineto
-2292.83 1821.59 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-5803 1884.97 moveto 216 (FF: [5,7,15,21,23,37,40,48,56]) alignedtext
-grestore
-% GCC->CCG
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 1681.03 1665.19 moveto
-1722.94 1678.35 1789.37 1698.09 1848 1710.57 curveto
-1960.06 1734.43 2092.66 1751.26 2169.37 1759.9 curveto
-stroke
-0 0 0 edgecolor
-newpath 2169.03 1763.38 moveto
-2179.36 1761.01 lineto
-2169.81 1756.43 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 2169.03 1763.38 moveto
-2179.36 1761.01 lineto
-2169.81 1756.43 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-1892.5 1759.97 moveto 193 (FF: [5,7,15,21,23,40,48,96]) alignedtext
-grestore
-% GCC->CCA
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 1648.22 1586.34 moveto
-1666.52 1482.64 1717.6 1281.43 1848 1178.57 curveto
-2014.73 1047.06 2122.67 1175.9 2318 1092.57 curveto
-2327.08 1088.7 2327 1083.61 2336 1079.57 curveto
-2709.8 911.95 2829.11 928.15 3236 880.57 curveto
-3642.61 833.03 3747.62 866.57 4157 866.57 curveto
-4157 866.57 4157 866.57 5032 866.57 curveto
-5346.35 866.57 5722.87 833.66 5858.83 820.72 curveto
-stroke
-0 0 0 edgecolor
-newpath 5859.35 824.18 moveto
-5868.97 819.75 lineto
-5858.68 817.22 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 5859.35 824.18 moveto
-5868.97 819.75 lineto
-5858.68 817.22 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-3255.5 885.97 moveto 189 (FF: [19,26,31,50,69,90,92]) alignedtext
-grestore
-% GCC->CCC
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 1644.36 1716.64 moveto
-1657.39 1827.65 1701.43 2051.26 1848 2150.57 curveto
-1954.21 2222.54 4028.7 2189.57 4157 2189.57 curveto
-4157 2189.57 4157 2189.57 7032 2189.57 curveto
-7565.4 2189.57 7698.6 2208.57 8232 2208.57 curveto
-8232 2208.57 8232 2208.57 10172 2208.57 curveto
-10401.58 2208.57 10498.93 2314.8 10688 2184.57 curveto
-10722.47 2160.83 10741.83 2118.35 10752.64 2080.74 curveto
-stroke
-0 0 0 edgecolor
-newpath 10756.1 2081.35 moveto
-10755.34 2070.78 lineto
-10749.35 2079.52 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 10756.1 2081.35 moveto
-10755.34 2070.78 lineto
-10749.35 2079.52 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-6311.5 2194.97 moveto 157 (FF: [6,36,53,70,76,87]) alignedtext
-grestore
-% GCC->AGG
-gsave
-1 setlinewidth
-0.66667 1 1 edgecolor
-newpath 1651.83 1716.77 moveto
-1674 1810.46 1729.07 1980.87 1848 2062.57 curveto
-1989.8 2159.98 2060.97 2102.57 2233 2102.57 curveto
-2233 2102.57 2233 2102.57 5432 2102.57 curveto
-6852.47 2102.57 7211.37 2186.99 8628 2082.57 curveto
-9126.71 2045.81 9251.6 2022.42 9742 1924.57 curveto
-9900.46 1892.95 9963.88 1929.39 10094 1833.57 curveto
-10112.32 1820.08 10127.3 1800.87 10139.05 1781.5 curveto
-stroke
-0.66667 1 1 edgecolor
-newpath 10142.22 1783.01 moveto
-10144.22 1772.61 lineto
-10136.17 1779.49 lineto
-closepath fill
-1 setlinewidth
-solid
-0.66667 1 1 edgecolor
-newpath 10142.22 1783.01 moveto
-10144.22 1772.61 lineto
-10136.17 1779.49 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-5827 2115.97 moveto 168 (FR: [12,24,39,58,61,88]) alignedtext
-grestore
-% GCC->ATG
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 1596.71 1651.37 moveto
-1515.18 1650.22 1330.95 1643.91 1180 1611.57 curveto
-1177.32 1611 1174.61 1610.37 1171.88 1609.69 curveto
-stroke
-0 1 1 edgecolor
-newpath 1172.53 1606.24 moveto
-1161.96 1607.03 lineto
-1170.72 1613 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 1172.53 1606.24 moveto
-1161.96 1607.03 lineto
-1170.72 1613 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-1180 1648.97 moveto 250 (RR: [5,13,15,17,21,23,48,59,96,98]) alignedtext
-grestore
-% GCC->AGC
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 1657.37 1586.4 moveto
-1684.84 1500.71 1744.75 1351.16 1848 1266.57 curveto
-2017.1 1128.04 2129.17 1231.71 2318 1121.57 curveto
-2327.51 1116.03 2326.14 1109.46 2336 1104.57 curveto
-2431.25 1057.35 2702.11 1036.05 2808 1026.57 curveto
-2826.76 1024.89 8213.16 946.57 8232 946.57 curveto
-8232 946.57 8232 946.57 9561 946.57 curveto
-9758.26 946.57 9989.35 912.66 10102.47 893.82 curveto
-stroke
-0 1 1 edgecolor
-newpath 10103.1 897.27 moveto
-10112.38 892.16 lineto
-10101.94 890.36 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 10103.1 897.27 moveto
-10112.38 892.16 lineto
-10101.94 890.36 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-5628.5 988.97 moveto 565 (RR: [6,12,19,24,25,26,31,36,46,50,53,58,60,61,69,70,72,76,80,87,88,90,92,99]) alignedtext
-grestore
-% AGG->AAG
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 10134.74 1705.54 moveto
-9846.38 1690.01 7940.31 1590.57 6390 1590.57 curveto
-5032 1590.57 5032 1590.57 5032 1590.57 curveto
-4808.08 1590.57 4710.28 1519.73 4606 1321.57 curveto
-4552.43 1219.79 4515.77 882.7 4501.57 730.86 curveto
-stroke
-0 1 1 edgecolor
-newpath 4505.03 730.33 moveto
-4500.62 720.7 lineto
-4498.06 730.98 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 4505.03 730.33 moveto
-4500.62 720.7 lineto
-4498.06 730.98 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-7494 1616.97 moveto 250 (RR: [6,32,36,47,52,53,62,76,84,87]) alignedtext
-grestore
-% AGG->CCC
-gsave
-1 setlinewidth
-0.66667 1 1 edgecolor
-newpath 10209.23 1698.68 moveto
-10301.8 1678.93 10545.21 1641.79 10688 1757.57 curveto
-10715.12 1779.56 10737.95 1865.56 10751.77 1930.17 curveto
-stroke
-0.66667 1 1 edgecolor
-newpath 10748.43 1931.27 moveto
-10753.91 1940.34 lineto
-10755.28 1929.83 lineto
-closepath fill
-1 setlinewidth
-solid
-0.66667 1 1 edgecolor
-newpath 10748.43 1931.27 moveto
-10753.91 1940.34 lineto
-10755.28 1929.83 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-10367 1762.97 moveto 204 (FR: [6,32,36,53,62,76,84,87]) alignedtext
-grestore
-% AGG->GCC
-gsave
-1 setlinewidth
-0.66667 1 1 edgecolor
-newpath 10134.87 1715.45 moveto
-10061.02 1731.91 9891.54 1773.72 9760 1836.57 curveto
-9751.32 1840.72 9751.02 1845.26 9742 1848.57 curveto
-9554.89 1917.32 8159.34 2056.57 7960 2056.57 curveto
-7032 2056.57 7032 2056.57 7032 2056.57 curveto
-6320.88 2056.57 6143.12 2048.57 5432 2048.57 curveto
-2233 2048.57 2233 2048.57 2233 2048.57 curveto
-1995.28 2048.57 1780.58 1826.07 1687.67 1714.21 curveto
-stroke
-0.66667 1 1 edgecolor
-newpath 1690.25 1711.85 moveto
-1681.19 1706.36 lineto
-1684.85 1716.3 lineto
-closepath fill
-1 setlinewidth
-solid
-0.66667 1 1 edgecolor
-newpath 1690.25 1711.85 moveto
-1681.19 1706.36 lineto
-1684.85 1716.3 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-5827 2056.97 moveto 168 (FR: [12,24,39,58,61,88]) alignedtext
-grestore
-% AGG->CTA
-gsave
-1 setlinewidth
-0.33333 1 1 edgecolor
-newpath 10164.18 1642.26 moveto
-10152.86 1558.39 10129.3 1419.27 10094 1382.57 curveto
-9987.09 1271.43 9907.55 1333.41 9760 1288.57 curveto
-9712.13 1274.03 9658.21 1256.33 9618.58 1243.08 curveto
-stroke
-0.33333 1 1 edgecolor
-newpath 9619.67 1239.75 moveto
-9609.08 1239.89 lineto
-9617.45 1246.39 lineto
-closepath fill
-1 setlinewidth
-solid
-0.33333 1 1 edgecolor
-newpath 9619.67 1239.75 moveto
-9609.08 1239.89 lineto
-9617.45 1246.39 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-9832 1387.97 moveto 190 (RF: [12,24,38,39,61,88,91]) alignedtext
-grestore
-% ATG->AAT
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 1020.16 1560.08 moveto
-933.6 1531.44 788.51 1471.21 706 1369.57 curveto
-632.42 1278.93 605.06 1142.63 594.92 1058.59 curveto
-stroke
-0 1 1 edgecolor
-newpath 598.39 1058.14 moveto
-593.76 1048.61 lineto
-591.43 1058.95 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 598.39 1058.14 moveto
-593.76 1048.61 lineto
-591.43 1058.95 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-706.5 1557.97 moveto 295 (RR: [5,13,15,17,21,23,45,48,59,77,96,98]) alignedtext
-grestore
-% ATG->GCC
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 1161.61 1577.11 moveto
-1230.53 1574.98 1338.13 1574.99 1430 1589.57 curveto
-1484.85 1598.28 1545.49 1617.38 1587.26 1632.09 curveto
-stroke
-0 0 0 edgecolor
-newpath 1586.33 1635.48 moveto
-1596.93 1635.54 lineto
-1588.68 1628.88 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 1586.33 1635.48 moveto
-1596.93 1635.54 lineto
-1588.68 1628.88 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-1215 1594.97 moveto 180 (FF: [5,15,21,23,48,59,96]) alignedtext
-grestore
-% AGC->AAG
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 10156.74 816.33 moveto
-10142.08 759.63 10118.58 683.67 10094 664.57 curveto
-10035.13 618.82 9833.71 643.81 9760 632.57 curveto
-9302.95 562.86 9204.33 418.57 8742 418.57 curveto
-6390 418.57 6390 418.57 6390 418.57 curveto
-6377.58 418.57 4617.34 543.51 4606 548.57 curveto
-4587.41 556.87 4570.07 569.68 4554.88 583.59 curveto
-stroke
-0 1 1 edgecolor
-newpath 4552.44 581.08 moveto
-4547.59 590.5 lineto
-4557.26 586.16 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 4552.44 581.08 moveto
-4547.59 590.5 lineto
-4557.26 586.16 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-7489.5 423.97 moveto 259 (RR: [32,38,39,47,52,62,71,84,88,91]) alignedtext
-grestore
-% AGC->CTC
-gsave
-1 setlinewidth
-0.33333 1 1 edgecolor
-newpath 10231.85 862.41 moveto
-10237.96 860.68 10244.08 859.03 10250 857.57 curveto
-10442.29 810.15 10543.51 911.02 10688 775.57 curveto
-10721.23 744.42 10744.18 624.82 10756.2 544.69 curveto
-stroke
-0.33333 1 1 edgecolor
-newpath 10759.68 545.04 moveto
-10757.68 534.64 lineto
-10752.76 544.02 lineto
-closepath fill
-1 setlinewidth
-solid
-0.33333 1 1 edgecolor
-newpath 10759.68 545.04 moveto
-10757.68 534.64 lineto
-10752.76 544.02 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-10250 862.97 moveto 438 (RF: [6,10,25,36,43,46,53,54,58,63,65,66,70,76,80,87,99,100]) alignedtext
-grestore
-% AGC->CAG
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 10112.23 853.16 moveto
-10106.17 850.99 10100.02 849.07 10094 847.57 curveto
-9863.44 790.19 9798.59 806.57 9561 806.57 curveto
-7332 806.57 7332 806.57 7332 806.57 curveto
-7099.92 806.57 7041.63 807.14 6810 792.57 curveto
-6789.55 791.29 6767.21 789.25 6747.35 787.22 curveto
-stroke
-0 1 1 edgecolor
-newpath 6747.53 783.72 moveto
-6737.22 786.16 lineto
-6746.8 790.68 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 6747.53 783.72 moveto
-6737.22 786.16 lineto
-6746.8 790.68 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-8390.5 811.97 moveto 237 (RR: [19,26,31,50,60,69,72,90,92]) alignedtext
-grestore
-% AGC->GCC
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 10112.42 921.84 moveto
-10106.37 924.82 10100.17 927.48 10094 929.57 curveto
-9868.49 1006.12 9799.15 984.57 9561 984.57 curveto
-8232 984.57 8232 984.57 8232 984.57 curveto
-7865.88 984.57 7765.54 951.18 7410 1038.57 curveto
-7336.38 1056.67 7328.12 1091.63 7254 1107.57 curveto
-7104.96 1139.63 6720.45 1112.02 6568 1112.57 curveto
-6409.78 1113.15 6370.22 1113.39 6212 1112.57 curveto
-5952.43 1111.24 5887.53 1110.83 5628 1106.57 curveto
-5075.05 1097.51 4936.99 1084.79 4384 1078.57 curveto
-4182.23 1076.3 4131.75 1075.52 3930 1078.57 curveto
-3431.16 1086.13 3306.59 1094.98 2808 1112.57 curveto
-2703.09 1116.27 2425.9 1077.38 2336 1131.57 curveto
-2322.36 1139.8 2328.7 1150.77 2318 1162.57 curveto
-2120.7 1380.24 1811.39 1559.17 1690.17 1624.73 curveto
-stroke
-0 0 0 edgecolor
-newpath 1688.23 1621.79 moveto
-1681.08 1629.62 lineto
-1691.54 1627.96 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 1688.23 1621.79 moveto
-1681.08 1629.62 lineto
-1691.54 1627.96 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-5630 1116.97 moveto 562 (FF: [6,12,19,24,25,26,31,36,46,50,53,58,60,61,69,70,72,76,80,87,88,90,92,99]) alignedtext
-grestore
-% AGC->AGC
-gsave
-1 setlinewidth
-0.66667 1 1 edgecolor
-newpath 10129.67 946.64 moveto
-10135.73 957.27 10149.84 964.57 10172 964.57 curveto
-10188.27 964.57 10200.21 960.63 10207.8 954.33 curveto
-stroke
-0.66667 1 1 edgecolor
-newpath 10210.52 956.53 moveto
-10214.33 946.64 lineto
-10205.19 952 lineto
-closepath fill
-1 setlinewidth
-solid
-0.66667 1 1 edgecolor
-newpath 10210.52 956.53 moveto
-10214.33 946.64 lineto
-10205.19 952 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-10061 969.97 moveto 222 (FR: [10,24,43,58,63,65,99,100]) alignedtext
-grestore
-% AGC->CGC
-gsave
-1 setlinewidth
-0.66667 1 1 edgecolor
-newpath 10229.87 946.82 moveto
-10236.32 952.24 10243.07 957.28 10250 961.57 curveto
-10423.84 1069.29 10506.56 1008.22 10688 1102.57 curveto
-10699.17 1108.38 10710.42 1115.78 10720.76 1123.35 curveto
-stroke
-0.66667 1 1 edgecolor
-newpath 10718.75 1126.22 moveto
-10728.84 1129.44 lineto
-10722.96 1120.63 lineto
-closepath fill
-1 setlinewidth
-solid
-0.66667 1 1 edgecolor
-newpath 10718.75 1126.22 moveto
-10728.84 1129.44 lineto
-10722.96 1120.63 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-10306.5 1107.97 moveto 325 (FR: [16,32,38,39,47,52,62,71,82,84,85,91,93]) alignedtext
-grestore
-% AGC->CTA
-gsave
-1 setlinewidth
-0.33333 1 1 edgecolor
-newpath 10138.09 946.78 moveto
-10126.08 965.33 10111.21 984.33 10094 998.57 curveto
-9946.67 1120.44 9723.74 1185.48 9619.1 1210.82 curveto
-stroke
-0.33333 1 1 edgecolor
-newpath 9618.26 1207.42 moveto
-9609.35 1213.15 lineto
-9619.89 1214.23 lineto
-closepath fill
-1 setlinewidth
-solid
-0.33333 1 1 edgecolor
-newpath 9618.26 1207.42 moveto
-9609.35 1213.15 lineto
-9619.89 1214.23 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-9760 1172.97 moveto 334 (RF: [12,16,24,43,58,61,65,82,85,88,93,99,100]) alignedtext
-grestore
-% CGC->CGA
-gsave
-1 setlinewidth
-0.33333 1 1 edgecolor
-newpath 10803.39 1165.21 moveto
-10863.92 1169.61 10986.08 1172.33 11080 1134.57 curveto
-11083.24 1133.27 11086.45 1131.74 11089.59 1130.03 curveto
-stroke
-0.33333 1 1 edgecolor
-newpath 11091.5 1132.97 moveto
-11098.28 1124.82 lineto
-11087.9 1126.97 lineto
-closepath fill
-1 setlinewidth
-solid
-0.33333 1 1 edgecolor
-newpath 11091.5 1132.97 moveto
-11098.28 1124.82 lineto
-11087.9 1126.97 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-10844.5 1172.97 moveto 235 (RF: [32,38,39,47,52,62,71,84,91]) alignedtext
-grestore
-% CGC->CCG
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 10728.77 1160.56 moveto
-10567.79 1156.14 9915.47 1137.6 9380 1113.57 curveto
-8799.26 1087.51 8655.11 1057.58 8074 1041.57 curveto
-7972.71 1038.78 7947.02 1033.6 7846 1041.57 curveto
-7580.42 1062.53 7519.43 1112.74 7254 1135.57 curveto
-5403.92 1294.72 4932.44 1075.03 3076 1116.57 curveto
-2993.39 1118.42 2394.83 1132.55 2336 1190.57 curveto
-2331.53 1194.98 2272.49 1536.39 2245.86 1691.44 curveto
-stroke
-0 1 1 edgecolor
-newpath 2242.4 1690.93 moveto
-2244.16 1701.38 lineto
-2249.3 1692.11 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 2242.4 1690.93 moveto
-2244.16 1701.38 lineto
-2249.3 1692.11 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-6615.5 1184.97 moveto 147 (RR: [11,16,82,85,93]) alignedtext
-grestore
-% CGC->AGC
-gsave
-1 setlinewidth
-0.66667 1 1 edgecolor
-newpath 10751.21 1096.33 moveto
-10736.67 1038.27 10713.05 959.52 10688 939.57 curveto
-10620.69 885.98 10366.87 880.06 10242.11 880.52 curveto
-stroke
-0.66667 1 1 edgecolor
-newpath 10241.88 877.02 moveto
-10231.9 880.57 lineto
-10241.91 884.02 lineto
-closepath fill
-1 setlinewidth
-solid
-0.66667 1 1 edgecolor
-newpath 10241.88 877.02 moveto
-10231.9 880.57 lineto
-10241.91 884.02 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-10306.5 944.97 moveto 325 (FR: [16,32,38,39,47,52,62,71,82,84,85,91,93]) alignedtext
-grestore
-% CTA->TAA
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 9512.88 1233.55 moveto
-9472.66 1241.71 9413.74 1253.21 9362 1261.57 curveto
-9243.79 1280.68 9104.69 1297.89 9028.04 1306.92 curveto
-stroke
-0 0 0 edgecolor
-newpath 9027.63 1303.44 moveto
-9018.1 1308.08 lineto
-9028.44 1310.39 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 9027.63 1303.44 moveto
-9018.1 1308.08 lineto
-9028.44 1310.39 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-9104 1301.97 moveto 256 (FF: [12,16,38,39,61,71,82,88,91,93]) alignedtext
-grestore
-% CTA->AGG
-gsave
-1 setlinewidth
-0.33333 1 1 edgecolor
-newpath 9609.33 1240.98 moveto
-9650.56 1258.27 9708.35 1288.71 9742 1333.57 curveto
-9760.5 1358.24 9740.92 1376.35 9760 1400.57 curveto
-9864.6 1533.38 9970.99 1466.61 10094 1582.57 curveto
-10109.52 1597.2 10123.2 1615.55 10134.59 1633.66 curveto
-stroke
-0.33333 1 1 edgecolor
-newpath 10131.8 1635.8 moveto
-10140 1642.51 lineto
-10137.77 1632.15 lineto
-closepath fill
-1 setlinewidth
-solid
-0.33333 1 1 edgecolor
-newpath 10131.8 1635.8 moveto
-10140 1642.51 lineto
-10137.77 1632.15 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-9832 1587.97 moveto 190 (RF: [12,24,38,39,61,88,91]) alignedtext
-grestore
-% CTA->AGC
-gsave
-1 setlinewidth
-0.33333 1 1 edgecolor
-newpath 9609.32 1237.29 moveto
-9711.78 1263.18 9952.96 1306.74 10094 1189.57 curveto
-10129.4 1160.16 10151.79 1038.24 10163.09 956.9 curveto
-stroke
-0.33333 1 1 edgecolor
-newpath 10166.6 957.07 moveto
-10164.48 946.69 lineto
-10159.66 956.13 lineto
-closepath fill
-1 setlinewidth
-solid
-0.33333 1 1 edgecolor
-newpath 10166.6 957.07 moveto
-10164.48 946.69 lineto
-10159.66 956.13 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-9760 1271.97 moveto 334 (RF: [12,16,24,43,58,61,65,82,85,88,93,99,100]) alignedtext
-grestore
-% CTA->CTA
-gsave
-1 setlinewidth
-0.66667 1 1 edgecolor
-newpath 9512.57 1250.35 moveto
-9484.96 1277.05 9501.1 1306.57 9561 1306.57 curveto
-9615.28 1306.57 9633.63 1282.32 9616.04 1257.9 curveto
-stroke
-0.66667 1 1 edgecolor
-newpath 9618.65 1255.57 moveto
-9609.43 1250.35 lineto
-9613.38 1260.18 lineto
-closepath fill
-1 setlinewidth
-solid
-0.66667 1 1 edgecolor
-newpath 9618.65 1255.57 moveto
-9609.43 1250.35 lineto
-9613.38 1260.18 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-9461.5 1311.97 moveto 199 (FR: [12,24,58,61,65,99,100]) alignedtext
-grestore
-% ACT->AAG
-gsave
-1 setlinewidth
-0.66667 1 1 edgecolor
-newpath 4983.92 697.07 moveto
-4904.84 695.8 4742.47 691.33 4606 675.57 curveto
-4603.45 675.28 4600.86 674.96 4598.26 674.62 curveto
-stroke
-0.66667 1 1 edgecolor
-newpath 4598.52 671.13 moveto
-4588.14 673.24 lineto
-4597.57 678.06 lineto
-closepath fill
-1 setlinewidth
-solid
-0.66667 1 1 edgecolor
-newpath 4598.52 671.13 moveto
-4588.14 673.24 lineto
-4597.57 678.06 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-4606 696.97 moveto 204 (FR: [8,31,42,50,66,69,78,86]) alignedtext
-grestore
-% ACT->TCA
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 5080.04 696.97 moveto
-5372.53 693.28 6913.07 673.85 7261.78 669.46 curveto
-stroke
-0 1 1 edgecolor
-newpath 7262.04 672.95 moveto
-7271.99 669.33 lineto
-7261.95 665.96 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 7262.04 672.95 moveto
-7271.99 669.33 lineto
-7261.95 665.96 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-6296.5 687.97 moveto 187 (RR: [1,3,4,20,27,41,51,67]) alignedtext
-grestore
-% ACT->CTC
-gsave
-1 setlinewidth
-0 0 0 edgecolor
-newpath 5080.38 690.07 moveto
-5125.26 683.4 5193.99 673.89 5254 668.57 curveto
-6511.79 557.14 6830.09 580.71 8092 535.57 curveto
-9127.32 498.54 10388.88 475.93 10696.12 470.73 curveto
-stroke
-0 0 0 edgecolor
-newpath 10696.28 474.23 moveto
-10706.22 470.56 lineto
-10696.16 467.23 lineto
-closepath fill
-1 setlinewidth
-solid
-0 0 0 edgecolor
-newpath 10696.28 474.23 moveto
-10706.22 470.56 lineto
-10696.16 467.23 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-8117.5 540.97 moveto 229 (FF: [1,3,4,20,27,35,41,44,51,67]) alignedtext
-grestore
-% ACT->CCA
-gsave
-1 setlinewidth
-0 1 1 edgecolor
-newpath 5080.05 701.98 moveto
-5124.99 706.03 5194.02 712.07 5254 716.57 curveto
-5412.11 728.44 5453.37 714.95 5610 739.57 curveto
-5698.58 753.5 5799.16 781.42 5858.73 799.27 curveto
-stroke
-0 1 1 edgecolor
-newpath 5858.06 802.72 moveto
-5868.64 802.26 lineto
-5860.08 796.02 lineto
-closepath fill
-1 setlinewidth
-solid
-0 1 1 edgecolor
-newpath 5858.06 802.72 moveto
-5868.64 802.26 lineto
-5860.08 796.02 lineto
-closepath stroke
-0 0 0 edgecolor
-14 /Times-Roman set_font
-5307 744.97 moveto 250 (RR: [8,19,26,31,42,50,69,78,86,92]) alignedtext
-grestore
-endpage
-showpage
-grestore
-%%PageTrailer
-%%EndPage: 1
-%%Trailer
-%%Pages: 1
-%%BoundingBox: 36 36 12234 2334
-end
-restore
-%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/SmallGenome/txt b/genomix/genomix-pregelix/data/TestSet/TipRemove/SmallGenome/txt
deleted file mode 100755
index 334f3e9..0000000
--- a/genomix/genomix-pregelix/data/TestSet/TipRemove/SmallGenome/txt
+++ /dev/null
@@ -1,27 +0,0 @@
-AAA	{[{AAA:[93]},{AAG:[81,83,89,93,94,97]},{AAT:[2,4,9,14,27,30,41,49,64,75,81,83,94,97]}]	[]	[]	[{AAA:[93]},{GAA:[1,2,4,9,14,27,30,41,49,54,64,67,75,81,83,94,97]},{TAA:[49,81,83,89,93,94,97]}]	{5':[], ~5':[(1-0_0),(49-0_0),(54-0_0),(67-0_0)]}	AAA	25.0x}
-GAA	{[{AAA:[1,2,4,9,14,27,30,41,49,54,64,67,75,81,83,94,97]},{AAG:[8,25,32,36,42,46,47,52,53,62,66,71,76,78,80,84,86,87]},{AAT:[13,15,17,23,33,45,48,59,77,96,98]}]	[]	[{TCA:[1,4,20,27,30,41,64,67]}]	[{AGA:[8,25,42,46,66,70,78,80,86]},{CGA:[13,17,32,33,38,45,47,52,59,62,71,76,77,84,91,96,98]},{GGA:[2,10,14,49,54,63,75,81,94,97]}]	{5':[(36-0_0),(53-0_0)], ~5':[(38-0_0),(63-0_0),(70-0_0),(91-0_0)]}	GAA	52.0x}
-AGA	{[{GAA:[8,25,42,46,66,70,78,80,86]},{GAC:[29,79,89]}]	[{CTC:[10,43,54,63,65,99,100]}]	[]	[{AAG:[79,83,89]},{CAG:[2,8,10,14,25,42,43,46,54,63,65,66,70,78,80,86,100]}]	{5':[(29-0_0),(99-0_0)], ~5':[(14-0_0),(83-0_0)]}	AGA	22.0x}
-GGA	{[{GAA:[2,10,14,49,54,63,75,81,94,97]},{GAC:[9,13,17,18,33,45,74,77,98]}]	[{ATC:[11,16,37,56,82,85]},{CTC:[1,3,4,20,35,44,51,67]}]	[{CCA:[2,10,14,43,49,54,63,75]},{CCC:[1,3,20,28,35,44,51,67,95]},{CCG:[9,11,16,18,30,33,45,56,64,74,77,82,85]}]	[]	{5':[(4-0_0),(17-0_0),(37-0_0),(81-0_0)], ~5':[(28-0_0),(30-0_0),(64-0_0)]}	GGA	38.0x}
-ATA	{[{TAA:[49,75,81,83,89,94,97]}]	[{ATA:[22,28,29,34,55,57,68,73,79,95]}]	[{ATC:[22,28,29,34,35,44,55,57,68,73,95]}]	[{AAT:[2,14,22,28,29,34,49,55,57,68,73,75,79,81,83,89,94,95,97]}]	{5':[(79-0_0)], ~5':[(2-0_0),(35-0_0),(44-0_0)]}	ATA	31.0x}
-GAC	{[{CAA:[22,29,34,55,57,68,79]},{ACG:[13,17,18,33,45,59,74,77,98]}]	[]	[]	[{AGA:[29,79,89]},{GGA:[9,13,17,18,33,45,74,77,98]}]	{5':[(59-0_0)], ~5':[(9-0_0)]}	GAC	14.0x}
-ACC	{[{CCG:[5,7,15,21,23,37,40,48,56]}]	[]	[{TAA:[7,11,37,40,56]}]	[]	{5':[(5-0_0),(15-1_0),(23-1_0),(48-1_0)], ~5':[]}	TACC	8.5x}
-GCC	{[{CCA:[19,26,31,50,69,90,92]},{CCC:[6,36,53,70,76,87]},{CCG:[5,7,15,21,23,40,48,96]}]	[{AGG:[12,24,39,58,61,88]}]	[]	[{AGC:[6,12,19,24,25,26,31,36,46,50,53,58,60,61,69,70,72,76,80,87,88,90,92,99]},{ATG:[5,13,15,17,21,23,48,59,96,98]}]	{5':[(39-0_0),(40-0_0)], ~5':[]}	GCC	34.0x}
-AGC	{[{GCC:[6,12,19,24,25,26,31,36,46,50,53,58,60,61,69,70,72,76,80,87,88,90,92,99]}]	[{AGC:[10,24,43,58,63,65,99,100]},{CGC:[16,32,38,39,47,52,62,71,82,84,85,91,93]}]	[{CTA:[12,16,24,43,58,61,65,82,85,88,93,99,100]},{CTC:[6,10,25,36,43,46,53,54,58,63,65,66,70,76,80,87,99,100]}]	[{AAG:[32,38,39,47,52,62,71,84,88,91]},{CAG:[19,26,31,50,60,69,72,90,92]}]	{5':[(10-0_0),(24-0_0)], ~5':[(61-0_0),(66-0_0),(88-0_0)]}	AGC	59.0x}
-ATC	{[{TCA:[19,26,60,72,90,92]}]	[{CGA:[9,18,22,28,30,34,35,44,55,57,64,68,73,74,95]},{GGA:[11,16,37,56,82,85]}]	[{ATA:[22,28,29,34,35,44,55,57,68,73,95]},{ATC:[19,60,72,90,92]}]	[{AAT:[7,9,11,16,18,27,30,37,40,41,56,64,74,82,85]}]	{5':[], ~5':[(7-0_0),(19-0_0)]}	ATC	37.0x}
-AAG	{[{AGA:[79,83,89]},{AGC:[32,38,39,47,52,62,71,84,88,91]},{AGG:[6,32,36,47,52,53,62,76,84,87]}]	[{ACT:[8,31,42,50,66,69,78,86]}]	[]	[{AAA:[81,83,89,93,94,97]},{GAA:[8,25,32,36,42,46,47,52,53,62,66,71,76,78,80,84,86,87]},{TAA:[38,39,47,52,71,88,91]}]	{5':[(6-0_0),(50-0_0),(62-0_0)], ~5':[(25-0_0),(46-0_0),(71-0_0),(80-0_0),(94-0_0),(97-0_0)]}	AAG	39.0x}
-ACG	{[{CGA:[13,17,18,33,45,59,74,77,98]}]	[]	[]	[{GAC:[13,17,18,33,45,59,74,77,98]}]	{5':[], ~5':[]}	ACG	9.0x}
-AGG	{[]	[{CCC:[6,32,36,53,62,76,84,87]},{GCC:[12,24,39,58,61,88]}]	[{CTA:[12,24,38,39,61,88,91]}]	[{AAG:[6,32,36,47,52,53,62,76,84,87]}]	{5':[], ~5':[(52-0_0)]}	AGG	18.0x}
-ATG	{[{GCC:[5,15,21,23,48,59,96]}]	[]	[]	[{AAT:[5,13,15,17,21,23,45,48,59,77,96,98]}]	{5':[], ~5':[(13-1_0),(45-0_0),(77-0_0),(98-1_0)]}	ATGC	11.0x}
-AAT	{[{ATA:[2,14,22,28,29,34,49,55,57,68,73,75,79,81,83,89,94,95,97]},{ATC:[7,9,11,16,18,27,30,37,40,41,56,64,74,82,85]},{ATG:[5,13,15,17,21,23,45,48,59,77,96,98]}]	[]	[]	[{AAA:[2,4,9,14,27,30,41,49,64,75,81,83,94,97]},{CAA:[22,29,34,55,57,68,73,79]},{GAA:[13,15,17,23,33,45,48,59,77,96,98]},{TAA:[7,11,37,40,56,85]}]	{5':[(16-0_0),(18-0_0),(21-0_0),(74-0_0),(82-0_0),(89-0_0),(95-0_0)], ~5':[(33-0_0)]}	AAT	48.0x}
-ACT	{[{CTC:[1,3,4,20,27,35,41,44,51,67]}]	[{AAG:[8,31,42,50,66,69,78,86]}]	[]	[{CCA:[8,19,26,31,42,50,69,78,86,92]},{TCA:[1,3,4,20,27,41,51,67]}]	{5':[], ~5':[(26-1_0),(92-0_0)]}	CACT	18.5x}
-CAA	{[{AAT:[22,29,34,55,57,68,73,79]}]	[]	[]	[{GAC:[29,55,79,89]}]	{5':[(22-0_0),(34-0_0),(57-0_0)], ~5':[]}	ACAA	8.0x}
-TAA	{[{AAA:[49,81,83,89,93,94,97]},{AAG:[38,39,47,52,71,88,91]},{AAT:[7,11,37,40,56,85]}]	[]	[{ACC:[5,7,11,21,37,40,56]}]	[{ATA:[49,75,81,83,89,94,97]},{CTA:[12,16,38,39,61,71,82,88,91,93]}]	{5':[(47-0_0)], ~5':[(12-0_0),(75-0_0)]}	TAA	25.0x}
-CCA	{[{CAG:[2,10,14,43,54,63,75,100]},{ACT:[1,3,4,8,20,26,27,31,41,42,50,51,67,69,78,86]}]	[]	[{GGA:[2,10,14,43,49,54,63,75]}]	[{GCC:[19,26,31,50,69,90,92]}]	{5':[(78-0_0),(86-0_0)], ~5':[]}	CCA	20.0x}
-TCA	{[{CAG:[6,8,19,25,26,31,42,46,50,60,66,69,70,72,78,80,86,90,92]},{ACT:[1,3,4,8,20,26,27,31,41,42,50,51,67,69,78,86]}]	[]	[{GAA:[1,4,20,27,30,41,64,67]}]	[{ATC:[19,26,60,72,90,92]},{CTC:[6,25,36,46,53,66,70,80,87]}]	{5':[(8-0_0),(31-0_0),(42-0_0),(69-0_0)], ~5':[(87-0_0),(90-0_0)]}	TCA	35.0x}
-CGA	{[{GAA:[13,17,32,33,38,45,47,52,59,62,71,76,77,84,91,96,98]}]	[{ATC:[9,18,22,28,30,34,35,44,55,57,64,68,73,74,95]}]	[{CGC:[32,38,39,47,52,62,71,84,91]}]	[{ACG:[13,17,18,33,45,59,74,77,98]},{CCG:[3,9,18,22,28,30,33,34,35,44,51,57,64,68,73,74,95]}]	{5':[(55-0_0),(76-0_0)], ~5':[(3-0_0),(51-0_0)]}	CGA	38.0x}
-CTA	{[{TAA:[12,16,38,39,61,71,82,88,91,93]}]	[{CTA:[12,24,58,61,65,99,100]}]	[{AGC:[12,16,24,43,58,61,65,82,85,88,93,99,100]},{AGG:[12,24,38,39,61,88,91]}]	[]	{5':[(100-0_0)], ~5':[(43-0_0),(85-0_0)]}	CTA	28.0x}
-CCC	{[{CCG:[3,20,28,35,44,51,73,95]}]	[{AGG:[6,32,36,53,62,76,84,87]}]	[{GGA:[1,3,20,28,35,44,51,67,95]}]	[{GCC:[6,36,53,70,76,87]}]	{5':[(32-0_0),(73-0_0),(84-0_0)], ~5':[]}	CCC	19.0x}
-CGC	{[]	[{AGC:[16,32,38,39,47,52,62,71,82,84,85,91,93]}]	[{CGA:[32,38,39,47,52,62,71,84,91]}]	[{CCG:[11,16,82,85,93]}]	{5':[], ~5':[(11-0_0)]}	CGC	14.0x}
-CTC	{[{TCA:[6,25,36,46,53,66,70,80,87]}]	[{AGA:[10,43,54,63,65,99,100]},{GGA:[1,3,4,20,35,44,51,67]}]	[{AGC:[6,10,25,36,43,46,53,54,58,63,65,66,70,76,80,87,99,100]}]	[{ACT:[1,3,4,20,27,35,41,44,51,67]}]	{5':[], ~5':[(27-0_0),(41-0_0),(58-0_0)]}	CTC	28.0x}
-CAG	{[{AGA:[2,8,10,14,25,42,43,46,54,63,65,66,70,78,80,86,100]},{AGC:[19,26,31,50,60,69,72,90,92]}]	[]	[]	[{CCA:[2,10,14,43,54,63,75,100]},{TCA:[6,8,19,25,26,31,42,46,50,60,66,69,70,72,78,80,86,90,92]}]	{5':[(65-0_0)], ~5':[(60-0_0),(72-0_0)]}	CAG	30.0x}
-CCG	{[{CGA:[3,9,18,22,28,30,33,34,35,44,51,57,64,68,73,74,95]},{CGC:[11,16,82,85,93]}]	[{CCG:[5,7,15,21,23,37,40,48,96]}]	[{GGA:[9,11,16,18,30,33,45,56,64,74,77,82,85]}]	[{ACC:[5,7,15,21,23,37,40,48,56]},{CCC:[3,20,28,35,44,51,73,95]},{GCC:[5,7,15,21,23,40,48,96]}]	{5':[(68-0_0),(93-0_0),(96-0_0)], ~5':[(20-0_0),(56-0_0)]}	CCG	45.0x}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/checker/SymmetryCheckerVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/checker/SymmetryCheckerVertex.java
index 1d86859..5b3f9c4 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/checker/SymmetryCheckerVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/checker/SymmetryCheckerVertex.java
@@ -7,8 +7,8 @@
 import edu.uci.ics.genomix.pregelix.io.message.MessageWritable;
 import edu.uci.ics.genomix.pregelix.operator.BasicGraphCleanVertex;
 import edu.uci.ics.genomix.pregelix.operator.aggregator.StatisticsAggregator;
-import edu.uci.ics.genomix.pregelix.type.MessageFlag;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
+import edu.uci.ics.genomix.type.NodeWritable.EDGETYPE;
 
 public class SymmetryCheckerVertex extends
     BasicGraphCleanVertex<VertexValueWritable, MessageWritable> {
@@ -43,8 +43,8 @@
             //check if the corresponding edge exists
             while(msgIterator.hasNext()){
                 incomingMsg = msgIterator.next();
-                byte meToNeighborDir = (byte) (incomingMsg.getFlag() & MessageFlag.DIR_MASK);
-                byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+                EDGETYPE meToNeighborDir = EDGETYPE.fromByte(incomingMsg.getFlag());
+                EDGETYPE neighborToMeDir = meToNeighborDir.mirror(); 
                 boolean exist = getVertexValue().getEdgeList(neighborToMeDir).contains(incomingMsg.getSourceVertexId());
                 if(!exist){
                     getVertexValue().setState(State.IS_ERROR);
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/GenerateGraphViz.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/GenerateGraphViz.java
index 2593c34..b440dc4 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/GenerateGraphViz.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/GenerateGraphViz.java
@@ -13,8 +13,8 @@
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
 import edu.uci.ics.genomix.type.EdgeWritable;
 import edu.uci.ics.genomix.type.NodeWritable;
+import edu.uci.ics.genomix.type.NodeWritable.EDGETYPE;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
-import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
 
 public class GenerateGraphViz {
 
@@ -132,25 +132,25 @@
     public static String convertEdgeToGraph(String outputNode, NodeWritable value){
         String outputEdge = "";
         Iterator<EdgeWritable> edgeIterator;
-        edgeIterator = value.getEdgeList(DirectionFlag.DIR_FF).iterator();
+        edgeIterator = value.getEdgeList(EDGETYPE.FF).iterator();
         while(edgeIterator.hasNext()){
             EdgeWritable edge = edgeIterator.next(); 
             outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"black\" label =\"FF: " +
                     edge.printReadIdSet() + "\"]\n";
         }
-        edgeIterator = value.getEdgeList(DirectionFlag.DIR_FR).iterator();
+        edgeIterator = value.getEdgeList(EDGETYPE.FR).iterator();
         while(edgeIterator.hasNext()){
             EdgeWritable edge = edgeIterator.next();
             outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"blue\" label =\"FR: " +
                     edge.printReadIdSet() + "\"]\n";
         }
-        edgeIterator = value.getEdgeList(DirectionFlag.DIR_RF).iterator();
+        edgeIterator = value.getEdgeList(EDGETYPE.RF).iterator();
         while(edgeIterator.hasNext()){
             EdgeWritable edge = edgeIterator.next();
             outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"green\" label =\"RF: " +
                     edge.printReadIdSet() + "\"]\n";
         }
-        edgeIterator = value.getEdgeList(DirectionFlag.DIR_RR).iterator();
+        edgeIterator = value.getEdgeList(EDGETYPE.RR).iterator();
         while(edgeIterator.hasNext()){
             EdgeWritable edge = edgeIterator.next();
             outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"red\" label =\"RR: " +
@@ -171,25 +171,25 @@
     public static String convertEdgeToGraph(String outputNode, VertexValueWritable value){
         String outputEdge = "";
         Iterator<EdgeWritable> edgeIterator;
-        edgeIterator = value.getEdgeList(DirectionFlag.DIR_FF).iterator();
+        edgeIterator = value.getEdgeList(EDGETYPE.FF).iterator();
         while(edgeIterator.hasNext()){
             EdgeWritable edge = edgeIterator.next(); 
             outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"black\" label =\"FF: " +
                     edge.printReadIdSet() + "\"]\n";
         }
-        edgeIterator = value.getEdgeList(DirectionFlag.DIR_FR).iterator();
+        edgeIterator = value.getEdgeList(EDGETYPE.FR).iterator();
         while(edgeIterator.hasNext()){
             EdgeWritable edge = edgeIterator.next();
             outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"blue\" label =\"FR: " +
                     edge.printReadIdSet() + "\"]\n";
         }
-        edgeIterator = value.getEdgeList(DirectionFlag.DIR_RF).iterator();
+        edgeIterator = value.getEdgeList(EDGETYPE.RF).iterator();
         while(edgeIterator.hasNext()){
             EdgeWritable edge = edgeIterator.next();
             outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"green\" label =\"RF: " +
                     edge.printReadIdSet() + "\"]\n";
         }
-        edgeIterator = value.getEdgeList(DirectionFlag.DIR_RR).iterator();
+        edgeIterator = value.getEdgeList(EDGETYPE.RR).iterator();
         while(edgeIterator.hasNext()){
             EdgeWritable edge = edgeIterator.next();
             outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"red\" label =\"RR: " +
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/VertexValueWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/VertexValueWritable.java
index c9de567..3c7b409 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/VertexValueWritable.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/VertexValueWritable.java
@@ -6,7 +6,6 @@
 import edu.uci.ics.genomix.pregelix.io.common.ByteWritable;
 import edu.uci.ics.genomix.pregelix.io.common.HashMapWritable;
 import edu.uci.ics.genomix.pregelix.io.common.VLongWritable;
-import edu.uci.ics.genomix.pregelix.type.MessageFlag;
 import edu.uci.ics.genomix.type.EdgeListWritable;
 import edu.uci.ics.genomix.type.EdgeWritable;
 import edu.uci.ics.genomix.type.KmerBytesWritable;
@@ -75,6 +74,15 @@
         public static final short FAKEFLAG_MASK = 1 << 7;
     }
     
+    public static class P4State {
+        // 2 bits for DirectionFlag, then 2 bits for set of DIR's
+        // each merge has an edge-type direction (e.g., FF)
+        public static final byte NO_MERGE = 0b0 << 4;
+        public static final byte MERGE = 0b1 << 4;
+        public static final byte MERGE_CLEAR = 0b1101100; // clear the MERGE/NO_MERGE and the MERGE_DIRECTION
+        public static final byte MERGE_MASK = 0b0010011;
+    }
+    
     private short state;
     private boolean isFakeVertex;
     private HashMapWritable<ByteWritable, VLongWritable> counters;
@@ -104,35 +112,35 @@
     }
     
     public EdgeListWritable getFFList() {
-        return getEdgeList(DirectionFlag.DIR_FF);
+        return getEdgeList(EDGETYPE.FF);
     }
 
     public EdgeListWritable getFRList() {
-        return getEdgeList(DirectionFlag.DIR_FR);
+        return getEdgeList(EDGETYPE.FR);
     }
 
     public EdgeListWritable getRFList() {
-        return getEdgeList(DirectionFlag.DIR_RF);
+        return getEdgeList(EDGETYPE.RF);
     }
 
     public EdgeListWritable getRRList() {
-        return getEdgeList(DirectionFlag.DIR_RR);
+        return getEdgeList(EDGETYPE.RR);
     }
     
     public void setFFList(EdgeListWritable forwardForwardList){
-        setEdgeList(DirectionFlag.DIR_FF, forwardForwardList);
+        setEdgeList(EDGETYPE.FF, forwardForwardList);
     }
     
     public void setFRList(EdgeListWritable forwardReverseList){
-        setEdgeList(DirectionFlag.DIR_FR, forwardReverseList);
+        setEdgeList(EDGETYPE.FR, forwardReverseList);
     }
     
     public void setRFList(EdgeListWritable reverseForwardList){
-        setEdgeList(DirectionFlag.DIR_RF, reverseForwardList);
+        setEdgeList(EDGETYPE.RF, reverseForwardList);
     }
 
     public void setRRList(EdgeListWritable reverseReverseList){
-        setEdgeList(DirectionFlag.DIR_RR, reverseReverseList);
+        setEdgeList(EDGETYPE.RR, reverseReverseList);
     }
     
     public AdjacencyListWritable getIncomingList() {
@@ -238,42 +246,23 @@
     /**
      * Delete the corresponding edge
      */
-    public void processDelete(byte neighborToDeleteDir, EdgeWritable nodeToDelete){
-        byte dir = (byte)(neighborToDeleteDir & MessageFlag.DIR_MASK);
-        this.getEdgeList(dir).remove(nodeToDelete);
+    public void processDelete(EDGETYPE neighborToDeleteEdgetype, EdgeWritable nodeToDelete){
+        this.getEdgeList(neighborToDeleteEdgetype).remove(nodeToDelete);
     }
     
-    public void processFinalUpdates(byte deleteDir, byte updateDir, NodeWritable other){
-        byte replaceDir = mirrorDirection(deleteDir);
+    public void processFinalUpdates(EDGETYPE deleteDir, EDGETYPE updateDir, NodeWritable other){
+        EDGETYPE replaceDir = deleteDir.mirror();
         this.getNode().updateEdges(deleteDir, null, updateDir, replaceDir, other, false);
     }
     
     /**
      * Process any changes to value.  This is for merging.  nodeToAdd should be only edge
      */
-    public void processMerges(byte mergeDir, NodeWritable node, int kmerSize){
+    public void processMerges(EDGETYPE mergeDir, NodeWritable node, int kmerSize){
         KmerBytesWritable.setGlobalKmerLength(kmerSize); // TODO Do this once at the init of your function, then you don't need it as a parameter here
         super.getNode().mergeWithNode(mergeDir, node);
     }
     
-    /**
-     * Returns the edge dir for B->A when the A->B edge is type @dir
-     */
-    public byte mirrorDirection(byte dir) {
-        switch (dir) {
-            case MessageFlag.DIR_FF:
-                return MessageFlag.DIR_RR;
-            case MessageFlag.DIR_FR:
-                return MessageFlag.DIR_FR;
-            case MessageFlag.DIR_RF:
-                return MessageFlag.DIR_RF;
-            case MessageFlag.DIR_RR:
-                return MessageFlag.DIR_FF;
-            default:
-                throw new RuntimeException("Unrecognized direction in flipDirection: " + dir);
-        }
-    }
-    
     @Override
     public String toString() {
         return super.toString() + "\t" + State.getContent(state);
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/message/BubbleMergeMessageWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/message/BubbleMergeMessageWritable.java
index fef5c15..59108d4 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/message/BubbleMergeMessageWritable.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/message/BubbleMergeMessageWritable.java
@@ -8,6 +8,7 @@
 import edu.uci.ics.genomix.pregelix.type.MessageFlag;
 import edu.uci.ics.genomix.type.NodeWritable;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
+import edu.uci.ics.genomix.type.NodeWritable.EDGETYPE;
 
 public class BubbleMergeMessageWritable extends MessageWritable{
 
@@ -19,8 +20,8 @@
     private VKmerBytesWritable majorVertexId; //use for MergeBubble
     private VKmerBytesWritable minorVertexId;
     private NodeWritable node; //except kmer, other field should be updated when MergeBubble
-    private byte meToMajorDir;
-    private byte meToMinorDir;
+    private byte meToMajorEdgetype;
+    private byte meToMinorEdgetype;
     private VKmerBytesWritable topCoverageVertexId;
     private boolean isFlip;
     
@@ -29,8 +30,8 @@
         majorVertexId = new VKmerBytesWritable();
         minorVertexId = new VKmerBytesWritable();
         node = new NodeWritable();
-        meToMajorDir = 0;
-        meToMinorDir = 0;
+        meToMajorEdgetype = 0;
+        meToMinorEdgetype = 0;
         topCoverageVertexId = new VKmerBytesWritable();
         isFlip = false;
     }
@@ -45,8 +46,8 @@
         this.setMajorVertexId(msg.getMajorVertexId());
         this.setMinorVertexId(msg.getMinorVertexId());
         this.setNode(msg.node);
-        this.setMeToMajorDir(msg.meToMajorDir);
-        this.setMeToMinorDir(msg.meToMinorDir);
+        this.setMeToMajorEdgetype(msg.meToMajorEdgetype);
+        this.setMeToMinorEdgetype(msg.meToMinorEdgetype);
         this.setTopCoverageVertexId(msg.topCoverageVertexId);
         this.setFlip(msg.isFlip());
     }
@@ -56,19 +57,20 @@
         majorVertexId.reset(0);
         minorVertexId.reset(0);
         node.reset();
-        meToMajorDir = 0;
-        meToMinorDir = 0;
+        meToMajorEdgetype = 0;
+        meToMinorEdgetype = 0;
         topCoverageVertexId.reset(0);
         isFlip = false;
     }
     
     public byte getRelativeDirToMajor(){
-        switch(meToMajorDir){
-            case MessageFlag.DIR_FF:
-            case MessageFlag.DIR_RR:
+        EDGETYPE et = EDGETYPE.fromByte(meToMajorEdgetype);
+        switch(et){
+            case FF:
+            case RR:
                 return DirToMajor.FORWARD;
-            case MessageFlag.DIR_FR:
-            case MessageFlag.DIR_RF:
+            case FR:
+            case RF:
                 return DirToMajor.REVERSE;
         }
         return 0;
@@ -115,22 +117,22 @@
         this.node.setAsCopy(node);
     }
     
-    public byte getMeToMajorDir() {
-        return meToMajorDir;
+    public byte getMeToMajorEdgetype() {
+        return meToMajorEdgetype;
     }
 
-    public void setMeToMajorDir(byte meToMajorDir) {
-        this.meToMajorDir = meToMajorDir;
+    public void setMeToMajorEdgetype(byte meToMajorEdgetype) {
+        this.meToMajorEdgetype = meToMajorEdgetype;
     }
 
-    public byte getMeToMinorDir() {
-        return meToMinorDir;
+    public byte getMeToMinorEdgetype() {
+        return meToMinorEdgetype;
     }
 
-    public void setMeToMinorDir(byte meToMinorDir) {
-        this.meToMinorDir = meToMinorDir;
+    public void setMeToMinorEdgetype(byte meToMinorEdgetype) {
+        this.meToMinorEdgetype = meToMinorEdgetype;
     }
-    
+
     public boolean isFlip() {
         return isFlip;
     }
@@ -146,8 +148,8 @@
         majorVertexId.readFields(in);
         minorVertexId.readFields(in);
         node.readFields(in);
-        meToMajorDir = in.readByte();
-        meToMinorDir = in.readByte();
+        meToMajorEdgetype = in.readByte();
+        meToMinorEdgetype = in.readByte();
         topCoverageVertexId.readFields(in);
         isFlip = in.readBoolean();
     }
@@ -158,8 +160,8 @@
         majorVertexId.write(out);
         minorVertexId.write(out);
         node.write(out);
-        out.writeByte(meToMajorDir);
-        out.write(meToMinorDir);
+        out.writeByte(meToMajorEdgetype);
+        out.write(meToMinorEdgetype);
         topCoverageVertexId.write(out);
         out.writeBoolean(isFlip);
     }
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/message/PathMergeMessageWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/message/PathMergeMessageWritable.java
index 07ededf..a1a2e1f 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/message/PathMergeMessageWritable.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/message/PathMergeMessageWritable.java
@@ -3,13 +3,14 @@
 import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
+import java.util.EnumSet;
 
 import edu.uci.ics.genomix.type.EdgeListWritable;
 import edu.uci.ics.genomix.type.EdgeWritable;
 import edu.uci.ics.genomix.type.NodeWritable;
+import edu.uci.ics.genomix.type.NodeWritable.EDGETYPE;
 import edu.uci.ics.genomix.type.PositionListWritable;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
-import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
 
 public class PathMergeMessageWritable extends MessageWritable{
     
@@ -46,20 +47,20 @@
         this.node.setInternalKmer(internalKmer);
     }
     
-    public EdgeListWritable getEdgeList(byte dir) {
-        return node.getEdgeList((byte) (dir & DirectionFlag.DIR_MASK));
+    public EdgeListWritable getEdgeList(EDGETYPE edgeType) {
+        return node.getEdgeList(edgeType);
     }
     
     public EdgeWritable getNeighborEdge(){
-        for(byte d : DirectionFlag.values){
-            if(!getEdgeList(d).isEmpty())
-                return getEdgeList(d).get(0);
+        for(EDGETYPE e : EnumSet.allOf(EDGETYPE.class)){
+            if(!getEdgeList(e).isEmpty())
+                return getEdgeList(e).get(0);
         }
         return null;
     }
 
-    public void setEdgeList(byte dir, EdgeListWritable edgeList) {
-        this.node.setEdgeList((byte) (dir & DirectionFlag.DIR_MASK), edgeList);
+    public void setEdgeList(EDGETYPE edgeType, EdgeListWritable edgeList) {
+        this.node.setEdgeList(edgeType, edgeList);
     }
     
     public PositionListWritable getStartReads() {
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/BasicGraphCleanVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/BasicGraphCleanVertex.java
index 17cf4bc..373fdde 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/BasicGraphCleanVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/BasicGraphCleanVertex.java
@@ -1,6 +1,7 @@
 package edu.uci.ics.genomix.pregelix.operator;
 
 import java.io.IOException;
+import java.util.EnumSet;
 import java.util.Iterator;
 import java.util.Random;
 import java.util.logging.Logger;
@@ -16,6 +17,7 @@
 import edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat;
 import edu.uci.ics.genomix.config.GenomixJobConf;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable.P4State;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable.State;
 import edu.uci.ics.genomix.pregelix.io.common.ByteWritable;
 import edu.uci.ics.genomix.pregelix.io.common.HashMapWritable;
@@ -25,12 +27,10 @@
 import edu.uci.ics.genomix.pregelix.type.MessageFlag;
 import edu.uci.ics.genomix.pregelix.util.VertexUtil;
 import edu.uci.ics.genomix.type.NodeWritable.DIR;
-import edu.uci.ics.genomix.type.NodeWritable.OutgoingListFlag;
+import edu.uci.ics.genomix.type.NodeWritable.EDGETYPE;
 import edu.uci.ics.genomix.type.EdgeListWritable;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
 import edu.uci.ics.genomix.type.VKmerListWritable;
-import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
-import edu.uci.ics.genomix.type.NodeWritable.IncomingListFlag;
 
 public abstract class BasicGraphCleanVertex<V extends VertexValueWritable, M extends MessageWritable> extends
         Vertex<VKmerBytesWritable, V, NullWritable, M> {
@@ -45,11 +45,11 @@
     public static boolean fakeVertexExist = false;
     public static VKmerBytesWritable fakeVertex = null;
     
-    public byte[][] connectedTable = new byte[][]{
-            {MessageFlag.DIR_RF, MessageFlag.DIR_FF},
-            {MessageFlag.DIR_RF, MessageFlag.DIR_FR},
-            {MessageFlag.DIR_RR, MessageFlag.DIR_FF},
-            {MessageFlag.DIR_RR, MessageFlag.DIR_FR}
+    public EDGETYPE[][] connectedTable = new EDGETYPE[][]{
+            {EDGETYPE.RF, EDGETYPE.FF},
+            {EDGETYPE.RF, EDGETYPE.FR},
+            {EDGETYPE.RR, EDGETYPE.FF},
+            {EDGETYPE.RR, EDGETYPE.FR}
     };
     
     protected M incomingMsg = null; 
@@ -60,7 +60,7 @@
     protected Iterator<VKmerBytesWritable> kmerIterator;
     protected VKmerListWritable kmerList = null;
     protected VKmerBytesWritable repeatKmer = null; //for detect tandemRepeat
-    protected byte repeatDir; //for detect tandemRepeat
+    protected EDGETYPE repeatEdgetype; //for detect tandemRepeat
     protected VKmerBytesWritable tmpKmer = null;
     protected short outFlag;
     protected short inFlag;
@@ -68,8 +68,8 @@
     
     protected EdgeListWritable incomingEdgeList = null; //SplitRepeat and BubbleMerge
     protected EdgeListWritable outgoingEdgeList = null; //SplitRepeat and BubbleMerge
-    protected byte incomingEdgeDir = 0; //SplitRepeat and BubbleMerge
-    protected byte outgoingEdgeDir = 0; //SplitRepeat and BubbleMerge
+    protected EDGETYPE incomingEdgeType; //SplitRepeat and BubbleMerge
+    protected EDGETYPE outgoingEdgeType; //SplitRepeat and BubbleMerge
     
     protected HashMapWritable<ByteWritable, VLongWritable> counters = new HashMapWritable<ByteWritable, VLongWritable>();
     /**
@@ -118,22 +118,22 @@
         return flagAndMergeDir;
     }
     
-    public byte getMsgFlagAndMergeDir(){
-        byte flagAndMergeDir = (byte)(getVertexValue().getState() & State.IS_HEAD);
-        byte meToNeighborDir = (byte) (incomingMsg.getFlag() & MessageFlag.DIR_MASK);
-        byte neighborToMeDir = mirrorDirection(meToNeighborDir);
-        switch(neighborToMeDir){
-            case MessageFlag.DIR_FF:
-            case MessageFlag.DIR_FR:
-                flagAndMergeDir |= MessageFlag.HEAD_CAN_MERGEWITHPREV;
-                break;
-            case MessageFlag.DIR_RF:
-            case MessageFlag.DIR_RR:
-                flagAndMergeDir |= MessageFlag.HEAD_CAN_MERGEWITHNEXT;
-                break;
-        }
-        return flagAndMergeDir;
-    }
+//    public byte getMsgFlagAndMergeDir(){
+//        byte flagAndMergeDir = (byte)(getVertexValue().getState() & State.IS_HEAD);
+//        byte meToNeighborDir = (byte) (incomingMsg.getFlag() & MessageFlag.DIR_MASK);
+//        byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+//        switch(neighborToMeDir){
+//            case MessageFlag.DIR_FF:
+//            case MessageFlag.DIR_FR:
+//                flagAndMergeDir |= MessageFlag.HEAD_CAN_MERGEWITHPREV;
+//                break;
+//            case MessageFlag.DIR_RF:
+//            case MessageFlag.DIR_RR:
+//                flagAndMergeDir |= MessageFlag.HEAD_CAN_MERGEWITHNEXT;
+//                break;
+//        }
+//        return flagAndMergeDir;
+//    }
     
     /**
      * set head state
@@ -191,35 +191,6 @@
         return selfFlag != State.IS_HEAD && selfFlag != State.IS_OLDHEAD;
     }
     
-    public byte[] getDirList(DIR direction){
-        byte[] values = new byte[2];
-        if(direction == DIR.PREVIOUS)
-            values = IncomingListFlag.values;
-        else if(direction == DIR.NEXT)
-            values = OutgoingListFlag.values;
-        else
-            throw new IllegalArgumentException("DIR should only have two options: PREVIOUS or NEXT!");
-        return values;
-    }
-    
-    /**
-     * get destination vertex
-     */
-    public VKmerBytesWritable getDestVertexId(DIR direction){
-        int degree = getVertexValue().getDegree(direction);
-        if(degree > 1)
-            throw new IllegalArgumentException("getDestVertexId(DIR direction) only can use for degree == 1 + \n" + getVertexValue().toString());
-        
-        if(degree == 1){
-            byte[] dirs = (direction == DIR.PREVIOUS ? IncomingListFlag.values : OutgoingListFlag.values);
-            for(byte dir : dirs){
-                if(getVertexValue().getEdgeList(dir).getCountOfPosition() > 0)
-                    return getVertexValue().getEdgeList(dir).get(0).getKey();
-            }
-        }
-        return null;
-    }
-    
     /**
      * get destination vertex
      */
@@ -293,12 +264,12 @@
      */
     public void sendSettledMsgs(DIR direction, VertexValueWritable value){
         //TODO THE less context you send, the better  (send simple messages)
-        byte dirs[] = direction == DIR.PREVIOUS ? IncomingListFlag.values : OutgoingListFlag.values;
-        for(byte dir : dirs){
-            kmerIterator = value.getEdgeList(dir).getKeyIterator();
+        EnumSet<EDGETYPE> edgeTypes = (direction == DIR.PREVIOUS ? EDGETYPE.INCOMING : EDGETYPE.OUTGOING);
+        for(EDGETYPE e : edgeTypes){
+            kmerIterator = value.getEdgeList(e).getKeyIterator();
             while(kmerIterator.hasNext()){
                 outFlag &= MessageFlag.DIR_CLEAR;
-                outFlag |= dir;
+                outFlag |= e.get();
                 outgoingMsg.setFlag(outFlag);
                 outgoingMsg.setSourceVertexId(getVertexId());
                 destVertexId.setAsCopy(kmerIterator.next());
@@ -317,19 +288,19 @@
      */
     public void headSendSettledMsgs(DIR direction, VertexValueWritable value){
         //TODO THE less context you send, the better  (send simple messages)
-        byte dirs[] = direction == DIR.PREVIOUS ? IncomingListFlag.values : OutgoingListFlag.values;
-        for(byte dir : dirs){
-            kmerIterator = value.getEdgeList(dir).getKeyIterator();
+        EnumSet<EDGETYPE> edgeTypes = (direction == DIR.PREVIOUS ? EDGETYPE.INCOMING : EDGETYPE.OUTGOING);
+        for(EDGETYPE e : edgeTypes){
+            kmerIterator = value.getEdgeList(e).getKeyIterator();
             while(kmerIterator.hasNext()){
                 outFlag &= MessageFlag.HEAD_CAN_MERGE_CLEAR;
-                byte meToNeighborDir = mirrorDirection(dir);
-                switch(meToNeighborDir){
-                    case MessageFlag.DIR_FF:
-                    case MessageFlag.DIR_FR:
+                EDGETYPE meToNeighborEdgeType = e.mirror();
+                switch(meToNeighborEdgeType){
+                    case FF:
+                    case FR:
                         outFlag |= MessageFlag.HEAD_CAN_MERGEWITHPREV;
                         break;
-                    case MessageFlag.DIR_RF:
-                    case MessageFlag.DIR_RR:
+                    case RF:
+                    case RR:
                         outFlag |= MessageFlag.HEAD_CAN_MERGEWITHNEXT;
                         break;  
                 }
@@ -348,30 +319,31 @@
     
     /**
      * get a copy of the original Kmer without TandemRepeat
+     * @param destVertex 
      */
-    public void getCopyWithoutTandemRepeats(V vertexValue){
-        tmpValue.setAsCopy(vertexValue);
-        tmpValue.getEdgeList(repeatDir).remove(repeatKmer);
-        while(isTandemRepeat(tmpValue))
-            tmpValue.getEdgeList(repeatDir).remove(repeatKmer);
+    public void copyWithoutTandemRepeats(V srcVertex, VertexValueWritable destVertex){
+        destVertex.setAsCopy(srcVertex);
+        destVertex.getEdgeList(repeatEdgetype).remove(repeatKmer);
+        while(isTandemRepeat(destVertex))
+            destVertex.getEdgeList(repeatEdgetype).remove(repeatKmer);
     }
     
-    /**
-     * check if it is valid path
-     */
-    public boolean isValidPath(){
-        byte meToNeighborDir = (byte) (incomingMsg.getFlag() & MessageFlag.DIR_MASK);
-        byte neighborToMeDir = mirrorDirection(meToNeighborDir);
-        switch(neighborToMeDir){
-            case MessageFlag.DIR_FF:
-            case MessageFlag.DIR_FR:
-                return getVertexValue().inDegree() == 1;
-            case MessageFlag.DIR_RF:
-            case MessageFlag.DIR_RR:
-                return getVertexValue().outDegree() == 1;
-        }
-        return true;
-    }
+//    /**
+//     * check if it is valid path
+//     */
+//    public boolean isValidPath(){
+//        byte meToNeighborDir = (byte) (incomingMsg.getFlag() & MessageFlag.DIR_MASK);
+//        byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+//        switch(neighborToMeDir){
+//            case MessageFlag.DIR_FF:
+//            case MessageFlag.DIR_FR:
+//                return getVertexValue().inDegree() == 1;
+//            case MessageFlag.DIR_RF:
+//            case MessageFlag.DIR_RR:
+//                return getVertexValue().outDegree() == 1;
+//        }
+//        return true;
+//    }
     
     /**
      * check if A need to be filpped with neighbor
@@ -430,14 +402,11 @@
     public void setNeighborToMeDir(DIR direction){
         if(getVertexValue().getDegree(direction) != 1)
             throw new IllegalArgumentException("In merge dir, the degree is not 1");
-        byte[] dirs = direction == DIR.PREVIOUS ? IncomingListFlag.values : OutgoingListFlag.values;
+        EnumSet<EDGETYPE> edgeTypes = direction == DIR.PREVIOUS ? EDGETYPE.INCOMING : EDGETYPE.OUTGOING;
         outFlag &= MessageFlag.DIR_CLEAR;
         
-        if(getVertexValue().getEdgeList(dirs[0]).getCountOfPosition() == 1){
-            outFlag |= dirs[0];
-        } else if(getVertexValue().getEdgeList(dirs[1]).getCountOfPosition() == 1){
-            outFlag |= dirs[1];
-        }
+        for (EDGETYPE et : edgeTypes)
+            outFlag |= et.get();
     }
     
     /**
@@ -452,9 +421,20 @@
     }
     
     /**
+     * set state as no_merge
+     */
+    public void setMerge(byte mergeState){
+        short state = getVertexValue().getState();
+        state &= P4State.MERGE_CLEAR;
+        state |= (mergeState & P4State.MERGE_MASK);
+        getVertexValue().setState(state);
+        activate();
+    }
+    
+    /**
      * Returns the edge dir for B->A when the A->B edge is type @dir
      */
-    public byte mirrorDirection(byte dir) {
+    public byte meToNeighborDir(byte dir) {
         switch (dir) {
             case MessageFlag.DIR_FF:
                 return MessageFlag.DIR_RR;
@@ -518,8 +498,8 @@
      * do some remove operations on adjMap after receiving the info about dead Vertex
      */
     public void responseToDeadVertex(){
-        byte meToNeighborDir = (byte) (incomingMsg.getFlag() & MessageFlag.DIR_MASK);
-        byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+        EDGETYPE meToNeighborDir = EDGETYPE.fromByte(incomingMsg.getFlag());
+        EDGETYPE neighborToMeDir = meToNeighborDir.mirror();
         
         getVertexValue().getEdgeList(neighborToMeDir).remove(incomingMsg.getSourceVertexId());
     }
@@ -566,35 +546,18 @@
         return ((byte)getVertexValue().getState() & State.FAKEFLAG_MASK) > 0;
     }
     
-    public boolean isTandemRepeat(VertexValueWritable value){
-        VKmerBytesWritable kmerToCheck;
-        for(byte d : DirectionFlag.values){
-            Iterator<VKmerBytesWritable> it = value.getEdgeList(d).getKeyIterator();
-            while(it.hasNext()){
-                kmerToCheck = it.next();
-                if(kmerToCheck.equals(getVertexId())){
-                    repeatDir = d;
-                    repeatKmer.setAsCopy(kmerToCheck);
-                    return true;
-                }
+    /**
+     * Look inside of vertex for the given edge, returning the direction we found it in (or null) 
+     */
+    public static EDGETYPE findEdge(VKmerBytesWritable id, VertexValueWritable vertex){
+        // TODO move into Node?
+        for(EDGETYPE e : EnumSet.allOf(EDGETYPE.class)){
+            for (VKmerBytesWritable curKey : vertex.getEdgeList(e).getKeys()) {
+                if(curKey.equals(id)) // points to self
+                    return e;
             }
         }
-        return false;
-    }
-    
-    public byte flipDir(byte dir){
-        switch(dir){
-            case DirectionFlag.DIR_FF:
-                return DirectionFlag.DIR_RF;
-            case DirectionFlag.DIR_FR:
-                return DirectionFlag.DIR_RR;
-            case DirectionFlag.DIR_RF:
-                return DirectionFlag.DIR_FF;
-            case DirectionFlag.DIR_RR:
-                return DirectionFlag.DIR_FR;
-            default:
-                throw new RuntimeException("Unrecognized direction in flipDirection: " + dir);
-        }
+        return null;
     }
     
     /**
@@ -646,9 +609,9 @@
     public void startSendMsgForP2() {
         if(isTandemRepeat(getVertexValue())){
             tmpValue.setAsCopy(getVertexValue());
-            tmpValue.getEdgeList(repeatDir).remove(repeatKmer);
+            tmpValue.getEdgeList(repeatEdgetype).remove(repeatKmer);
             while(isTandemRepeat(tmpValue))
-                tmpValue.getEdgeList(repeatDir).remove(repeatKmer);
+                tmpValue.getEdgeList(repeatEdgetype).remove(repeatKmer);
             outFlag = 0;
             outFlag |= MessageFlag.IS_HEAD;
             sendSettledMsgToAllNeighborNodes(tmpValue);
@@ -700,12 +663,67 @@
      * use for SplitRepeatVertex and BubbleMerge
      * @param i
      */
-    public void setEdgeListAndEdgeDir(int i){
+    public void setEdgeListAndEdgeType(int i){
         incomingEdgeList.setAsCopy(getVertexValue().getEdgeList(connectedTable[i][0]));
-        incomingEdgeDir = connectedTable[i][0];
+        incomingEdgeType = connectedTable[i][0];
         
         outgoingEdgeList.setAsCopy(getVertexValue().getEdgeList(connectedTable[i][1]));
-        outgoingEdgeDir = connectedTable[i][1];
+        outgoingEdgeType = connectedTable[i][1];
     }
     
+//2013.9.21 ------------------------------------------------------------------//
+    /**
+     * get destination vertex ex. RemoveTip
+     */
+    public VKmerBytesWritable getDestVertexId(DIR direction){
+        int degree = getVertexValue().getDegree(direction);
+        if(degree > 1)
+            throw new IllegalArgumentException("degree > 1, getDestVertexId(DIR direction) only can use for degree == 1 + \n" + getVertexValue().toString());
+        
+        if(degree == 1){
+            EnumSet<EDGETYPE> edgeTypes = direction.edgeType();
+            for(EDGETYPE et : edgeTypes){
+                if(getVertexValue().getEdgeList(et).getCountOfPosition() > 0)
+                    return getVertexValue().getEdgeList(et).get(0).getKey();
+            }
+        }
+        //degree in this direction == 0
+        throw new IllegalArgumentException("degree > 0, getDestVertexId(DIR direction) only can use for degree == 1 + \n" + getVertexValue().toString());
+    }
+    
+    /**
+     * check if I am a tandemRepeat 
+     */
+    public boolean isTandemRepeat(VertexValueWritable value){
+        VKmerBytesWritable kmerToCheck;
+        for(EDGETYPE et : EnumSet.allOf(EDGETYPE.class)){
+            Iterator<VKmerBytesWritable> it = value.getEdgeList(et).getKeyIterator();
+            while(it.hasNext()){
+                kmerToCheck = it.next();
+                if(kmerToCheck.equals(getVertexId())){
+                    repeatEdgetype = et;
+                    repeatKmer.setAsCopy(kmerToCheck);
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+    
+    /**
+     * broadcastKillself ex. RemoveLow
+     */
+    public void broadcastKillself(){
+        VertexValueWritable vertex = getVertexValue();
+        for(EDGETYPE et : EnumSet.allOf(EDGETYPE.class)){
+            for(VKmerBytesWritable kmer : vertex.getEdgeList(et).getKeys()){
+                outFlag &= EDGETYPE.CLEAR;
+                outFlag |= et.mirror().get();
+                outgoingMsg.setFlag(outFlag);
+                outgoingMsg.setSourceVertexId(getVertexId());
+                destVertexId = kmer;
+                sendMsg(destVertexId, outgoingMsg);
+            }
+        }
+    }
 }
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bridgeremove/BridgeAddVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bridgeremove/BridgeAddVertex.java
index adbc526..c740bae 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bridgeremove/BridgeAddVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bridgeremove/BridgeAddVertex.java
@@ -7,6 +7,7 @@
 import edu.uci.ics.genomix.type.EdgeListWritable;
 import edu.uci.ics.genomix.type.EdgeWritable;
 import edu.uci.ics.genomix.type.KmerBytesWritable;
+import edu.uci.ics.genomix.type.NodeWritable.EDGETYPE;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
 import edu.uci.ics.pregelix.api.graph.Vertex;
 import edu.uci.ics.pregelix.api.job.PregelixJob;
@@ -33,8 +34,8 @@
     private VKmerBytesWritable upBridge = new VKmerBytesWritable("ATA");
     private VKmerBytesWritable downBridge = new VKmerBytesWritable("ACG");
     private VKmerBytesWritable insertedBridge = new VKmerBytesWritable("GTA");
-    private byte bridgeToUpDir = MessageFlag.DIR_FR; 
-    private byte bridgeToDownDir = MessageFlag.DIR_RF; 
+    private EDGETYPE bridgeToUpDir = EDGETYPE.FR; 
+    private EDGETYPE bridgeToDownDir = EDGETYPE.RF; 
     
     /**
      * initiate kmerSize, maxIteration
@@ -49,7 +50,7 @@
     }
     
     @SuppressWarnings({ "unchecked", "rawtypes" })
-    public void insertBridge(byte dirToUp, EdgeListWritable edgeListToUp, byte dirToDown,
+    public void insertBridge(EDGETYPE dirToUp, EdgeListWritable edgeListToUp, EDGETYPE dirToDown,
             EdgeListWritable edgeListToDown, VKmerBytesWritable insertedBridge){
         Vertex vertex = (Vertex) BspUtils.createVertex(getContext().getConfiguration());
         vertex.getMsgList().clear();
@@ -79,7 +80,7 @@
         return edgeList;
     }
     
-    public void addEdgeToInsertedBridge(byte dir, VKmerBytesWritable insertedBridge){
+    public void addEdgeToInsertedBridge(EDGETYPE dir, VKmerBytesWritable insertedBridge){
         EdgeWritable newEdge = new EdgeWritable();
         newEdge.setKey(insertedBridge);
         newEdge.appendReadID(0);
@@ -110,7 +111,7 @@
         if(getSuperstep() == 1){
             if(getVertexId().toString().equals("ATA")){
                 /** add edge pointing to inserted bridge **/
-                byte upToBridgeDir = mirrorDirection(bridgeToUpDir);
+                EDGETYPE upToBridgeDir = bridgeToUpDir.mirror(); 
                 addEdgeToInsertedBridge(upToBridgeDir, insertedBridge);
                 
                 /** insert bridge **/
@@ -120,7 +121,7 @@
             } 
             else if(getVertexId().toString().equals("ACG")){
                 /** add edge pointing to new bridge **/
-                byte downToBridgeDir = mirrorDirection(bridgeToDownDir);
+                EDGETYPE downToBridgeDir = bridgeToDownDir.mirror(); 
                 addEdgeToInsertedBridge(downToBridgeDir, insertedBridge);
             }
         }
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bubblemerge/BubbleAddVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bubblemerge/BubbleAddVertex.java
index e446129..074fb4e 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bubblemerge/BubbleAddVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bubblemerge/BubbleAddVertex.java
@@ -1,5 +1,6 @@
 package edu.uci.ics.genomix.pregelix.operator.bubblemerge;
 
+import java.util.EnumSet;
 import java.util.Iterator;
 
 import org.apache.hadoop.io.NullWritable;
@@ -7,7 +8,7 @@
 import edu.uci.ics.genomix.type.EdgeListWritable;
 import edu.uci.ics.genomix.type.EdgeWritable;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
-import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
+import edu.uci.ics.genomix.type.NodeWritable.EDGETYPE;
 import edu.uci.ics.pregelix.api.graph.Vertex;
 import edu.uci.ics.pregelix.api.job.PregelixJob;
 import edu.uci.ics.pregelix.api.util.BspUtils;
@@ -35,8 +36,8 @@
     private VKmerBytesWritable insertedBubble = new VKmerBytesWritable("ATA"); //reverse
     private VKmerBytesWritable internalKmerInNewBubble = new VKmerBytesWritable("ATG");
     private float coverageOfInsertedBubble = 1;
-    private byte majorToNewBubbleDir = MessageFlag.DIR_FR;
-    private byte minorToNewBubbleDir = MessageFlag.DIR_FR;
+    private EDGETYPE majorToNewBubbleDir = EDGETYPE.FR;
+    private EDGETYPE minorToNewBubbleDir = EDGETYPE.FR;
     
     private EdgeListWritable[] edges = new EdgeListWritable[4];
     
@@ -95,20 +96,20 @@
         addVertex(insertedBubble, vertex);
     }
     
-    public void addEdgeToInsertedBubble(byte meToNewBubbleDir, VKmerBytesWritable insertedBubble){
+    public void addEdgeToInsertedBubble(EDGETYPE meToNewBubbleDir, VKmerBytesWritable insertedBubble){
         EdgeWritable newEdge = new EdgeWritable();
         newEdge.setKey(insertedBubble);
         newEdge.appendReadID(0);
-        byte newBubbleToMeDir = mirrorDirection(meToNewBubbleDir);
+        EDGETYPE newBubbleToMeDir = meToNewBubbleDir.mirror(); 
         getVertexValue().getEdgeList(newBubbleToMeDir).add(newEdge);
     }
     
     public void setupEdgeForInsertedBubble(){
-        for (byte d : DirectionFlag.values) {
-            edges[d] = new EdgeListWritable();
+        for (EDGETYPE et : EnumSet.allOf(EDGETYPE.class)) {
+            edges[et.get()] = new EdgeListWritable();
         }
-        edges[majorToNewBubbleDir].add(majorVertexId);
-        edges[minorToNewBubbleDir].add(minorVertexId);
+        edges[majorToNewBubbleDir.get()].add(majorVertexId);
+        edges[minorToNewBubbleDir.get()].add(minorVertexId);
     }
     
     @Override
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bubblemerge/BubbleMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bubblemerge/BubbleMergeVertex.java
index 9bb5746..8c84000 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bubblemerge/BubbleMergeVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bubblemerge/BubbleMergeVertex.java
@@ -10,6 +10,8 @@
 
 import edu.uci.ics.genomix.type.EdgeListWritable;
 import edu.uci.ics.genomix.type.EdgeWritable;
+import edu.uci.ics.genomix.type.NodeWritable;
+import edu.uci.ics.genomix.type.NodeWritable.EDGETYPE;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
 import edu.uci.ics.genomix.config.GenomixJobConf;
 import edu.uci.ics.genomix.pregelix.client.Client;
@@ -18,7 +20,6 @@
 import edu.uci.ics.genomix.pregelix.operator.BasicGraphCleanVertex;
 import edu.uci.ics.genomix.pregelix.operator.aggregator.StatisticsAggregator;
 import edu.uci.ics.genomix.pregelix.type.MessageFlag;
-import edu.uci.ics.genomix.pregelix.type.StatisticsCounter;
 import edu.uci.ics.genomix.pregelix.util.VertexUtil;
 
 /**
@@ -37,18 +38,19 @@
     
     private Map<VKmerBytesWritable, ArrayList<BubbleMergeMessageWritable>> receivedMsgMap = new HashMap<VKmerBytesWritable, ArrayList<BubbleMergeMessageWritable>>();
     private ArrayList<BubbleMergeMessageWritable> receivedMsgList = new ArrayList<BubbleMergeMessageWritable>();
-    private BubbleMergeMessageWritable topCoverageMessage = new BubbleMergeMessageWritable();
-    private BubbleMergeMessageWritable curMessage = new BubbleMergeMessageWritable();
-    private Set<BubbleMergeMessageWritable> unchangedSet = new HashSet<BubbleMergeMessageWritable>();
-    private Set<BubbleMergeMessageWritable> deletedSet = new HashSet<BubbleMergeMessageWritable>();
+    private BubbleMergeMessageWritable topMsg = new BubbleMergeMessageWritable();
+    private BubbleMergeMessageWritable curMsg = new BubbleMergeMessageWritable();
+//    private Set<BubbleMergeMessageWritable> unchangedSet = new HashSet<BubbleMergeMessageWritable>();
+//    private Set<BubbleMergeMessageWritable> deletedSet = new HashSet<BubbleMergeMessageWritable>();
     private EdgeWritable tmpEdge = new EdgeWritable();
     
-    private static Set<BubbleMergeMessageWritable> allDeletedSet = Collections.synchronizedSet(new HashSet<BubbleMergeMessageWritable>());
+//    private static Set<BubbleMergeMessageWritable> allDeletedSet = Collections.synchronizedSet(new HashSet<BubbleMergeMessageWritable>());
+    private static Set<VKmerBytesWritable> allDeletedSet = Collections.synchronizedSet(new HashSet<VKmerBytesWritable>());
     
-    private VKmerBytesWritable incomingKmer = new VKmerBytesWritable();
-    private VKmerBytesWritable outgoingKmer = new VKmerBytesWritable();
-    private VKmerBytesWritable majorVertexId = new VKmerBytesWritable();
-    private VKmerBytesWritable minorVertexId = new VKmerBytesWritable();
+//    private VKmerBytesWritable incomingKmer = new VKmerBytesWritable();
+//    private VKmerBytesWritable outgoingKmer = new VKmerBytesWritable();
+//    private VKmerBytesWritable majorVertexId = new VKmerBytesWritable();
+//    private VKmerBytesWritable minorVertexId = new VKmerBytesWritable();
     
     /**
      * initiate kmerSize, maxIteration
@@ -86,27 +88,40 @@
     
     public void sendBubbleAndMajorVertexMsgToMinorVertex(){
         for(int i = 0; i < 4; i++){
-            /** set edgeList and edgeDir based on connectedTable **/
-            setEdgeListAndEdgeDir(i);
+            // set edgeList and edgeDir based on connectedTable 
+            setEdgeListAndEdgeType(i);
             
             for(EdgeWritable incomingEdge : incomingEdgeList){
                 for(EdgeWritable outgoingEdge : outgoingEdgeList){
-                    /** get majorVertex and minorVertex and meToMajorDir and meToMinorDir **/
-                    incomingKmer.setAsCopy(incomingEdge.getKey());
-                    outgoingKmer.setAsCopy(outgoingEdge.getKey());
-                    majorVertexId.setAsCopy(incomingKmer.compareTo(outgoingKmer) >= 0 ? incomingKmer : outgoingKmer);
-                    minorVertexId.setAsCopy(incomingKmer.compareTo(outgoingKmer) < 0 ? incomingKmer : outgoingKmer);
-                    byte majorToMeDir = (incomingKmer.compareTo(outgoingKmer) >= 0 ? incomingEdgeDir : outgoingEdgeDir);
-                    byte meToMajorDir = mirrorDirection(majorToMeDir);
-                    byte minorToMeDir = (incomingKmer.compareTo(outgoingKmer) < 0 ? incomingEdgeDir : outgoingEdgeDir);
-                    byte meToMinorDir = mirrorDirection(minorToMeDir);
-                    
-                    /** setup outgoingMsg **/
+                    // get majorVertex and minorVertex and meToMajorDir and meToMinorDir
+                    VKmerBytesWritable incomingKmer = incomingEdge.getKey();
+                    VKmerBytesWritable outgoingKmer = outgoingEdge.getKey();
+                    VKmerBytesWritable majorVertexId = null;
+                    EDGETYPE majorToMeEdgetype = null; 
+                    EDGETYPE minorToMeEdgetype = null; 
+                    VKmerBytesWritable minorVertexId = null;
+                    if(incomingKmer.compareTo(outgoingKmer) >= 0){
+                        majorVertexId = incomingKmer;
+                        majorToMeEdgetype = incomingEdgeType;
+                        minorVertexId = outgoingKmer;
+                        minorToMeEdgetype = outgoingEdgeType;
+                    } else{
+                        majorVertexId = outgoingKmer;
+                        majorToMeEdgetype = outgoingEdgeType;
+                        minorVertexId = incomingKmer;
+                        minorToMeEdgetype = incomingEdgeType;
+                    }
+                    if(majorVertexId == minorVertexId)
+                        throw new IllegalArgumentException("majorVertexId is equal to minorVertexId, this is not allowd!");
+                    EDGETYPE meToMajorEdgetype = majorToMeEdgetype.mirror();
+                    EDGETYPE meToMinorEdgetype = minorToMeEdgetype.mirror();
+
+                    // setup outgoingMsg
                     outgoingMsg.setMajorVertexId(majorVertexId);
                     outgoingMsg.setSourceVertexId(getVertexId());
                     outgoingMsg.setNode(getVertexValue().getNode());
-                    outgoingMsg.setMeToMajorDir(meToMajorDir);
-                    outgoingMsg.setMeToMinorDir(meToMinorDir);
+                    outgoingMsg.setMeToMajorEdgetype(meToMajorEdgetype.get());
+                    outgoingMsg.setMeToMinorEdgetype(meToMinorEdgetype.get());
                     sendMsg(minorVertexId, outgoingMsg);
                 }
             }
@@ -131,28 +146,12 @@
         }
     }
     
-    public byte getEdgeTypeFromDir(byte dir){
-        switch(dir){
-            case MessageFlag.DIR_FF:
-            case MessageFlag.DIR_FR:
-                return EdgeType.OUTGOINGEDGE;
-            case MessageFlag.DIR_RF:
-            case MessageFlag.DIR_RR:
-                return EdgeType.INCOMINGEDGE;
-        }
-        return 0;
-    }
-    
-    public boolean isSameEdgeType(byte edgeDir1, byte edgeDir2){
-        return getEdgeTypeFromDir(edgeDir1) == getEdgeTypeFromDir(edgeDir2);
-    }
-    
     public boolean isValidMajorAndMinor(){
-        byte topBubbleToMajorDir = topCoverageMessage.getMeToMajorDir();
-        byte curBubbleToMajorDir = curMessage.getMeToMajorDir();
-        byte topBubbleToMinorDir = topCoverageMessage.getMeToMinorDir();
-        byte curBubbleToMinorDir = curMessage.getMeToMinorDir();
-        return isSameEdgeType(topBubbleToMajorDir, curBubbleToMajorDir) && isSameEdgeType(topBubbleToMinorDir, curBubbleToMinorDir);
+        EDGETYPE topBubbleToMajorEdgetype = EDGETYPE.fromByte(topMsg.getMeToMajorEdgetype());
+        EDGETYPE curBubbleToMajorEdgetype = EDGETYPE.fromByte(curMsg.getMeToMajorEdgetype());
+        EDGETYPE topBubbleToMinorEdgetype = EDGETYPE.fromByte(topMsg.getMeToMinorEdgetype());
+        EDGETYPE curBubbleToMinorEdgetype = EDGETYPE.fromByte(curMsg.getMeToMinorEdgetype());
+        return (topBubbleToMajorEdgetype.dir() == curBubbleToMajorEdgetype.dir()) && topBubbleToMinorEdgetype.dir() == curBubbleToMinorEdgetype.dir();
     }
     
     public boolean isFlipRelativeToMajor(BubbleMergeMessageWritable msg1, BubbleMergeMessageWritable msg2){
@@ -160,75 +159,101 @@
     }
     
     public void processSimilarSetToUnchangeSetAndDeletedSet(){
-        unchangedSet.clear();
-        deletedSet.clear();
-        topCoverageMessage.reset();
-        curMessage.reset();
-        Iterator<BubbleMergeMessageWritable> it;
+//        unchangedSet.clear();
+//        deletedSet.clear();
+        topMsg.reset();
+        curMsg.reset();
         while(!receivedMsgList.isEmpty()){
-            it = receivedMsgList.iterator();
-            topCoverageMessage.set(it.next());
+            Iterator<BubbleMergeMessageWritable> it = receivedMsgList.iterator();
+            topMsg.set(it.next());
             it.remove(); //delete topCoverage node
+            NodeWritable topNode = topMsg.getNode();
             while(it.hasNext()){
-                curMessage.set(it.next());
+                curMsg.set(it.next());
                 //check if the vertex is valid minor and if it comes from valid major
                 if(!isValidMajorAndMinor())
                     continue;
+                
                 //compute the similarity
-                float fracDissimilar = topCoverageMessage.computeDissimilar(curMessage);
-                if(fracDissimilar < dissimilarThreshold){ //if similar with top node, delete this node and put it in deletedSet 
-                    //add coverage to top node
-                    topCoverageMessage.getNode().addFromNode(isFlipRelativeToMajor(topCoverageMessage, curMessage), 
-                            curMessage.getNode()); 
-                    boolean flip = curMessage.isFlip(topCoverageMessage);
-                    curMessage.setFlip(flip);
-                    curMessage.setTopCoverageVertexId(topCoverageMessage.getSourceVertexId());
-                    curMessage.setMinorVertexId(getVertexId());
-                    deletedSet.add(new BubbleMergeMessageWritable(curMessage));
-                    allDeletedSet.add(new BubbleMergeMessageWritable(curMessage));
+                float fracDissimilar = topMsg.computeDissimilar(curMsg);
+                
+                if(fracDissimilar < dissimilarThreshold){ //if similar with top node, delete this node and put it in deletedSet
+                    // 1. update my own(minor's) edges
+                    EDGETYPE bubbleToMinor = EDGETYPE.fromByte(curMsg.getMeToMinorEdgetype());
+                    getVertexValue().getEdgeList(bubbleToMinor).remove(curMsg.getSourceVertexId());
+                    activate();
+                    
+                    // 2. add coverage to top node -- for unchangedSet
+                    topNode.addFromNode(isFlipRelativeToMajor(topMsg, curMsg), 
+                            curMsg.getNode()); 
+                    
+                    // 3. treat msg as a bubble vertex, broadcast kill self message to major vertex to update their edges
+                    EDGETYPE bubbleToMajor = EDGETYPE.fromByte(curMsg.getMeToMajorEdgetype());
+                    EDGETYPE majorToBubble = bubbleToMajor.mirror();
+                    outgoingMsg.reset();
+                    outFlag = 0;
+                    outFlag |= majorToBubble.get() | MessageFlag.UPDATE;
+                    outgoingMsg.setFlag(outFlag);
+                    sendMsg(curMsg.getMajorVertexId(), outgoingMsg);
+//                    boolean flip = curMsg.isFlip(topCoverageVertexMsg);
+//                    curMsg.setFlip(flip);
+//                    curMsg.setTopCoverageVertexId(topCoverageVertexMsg.getSourceVertexId());
+//                    curMsg.setMinorVertexId(getVertexId());
+//                    deletedSet.add(new BubbleMergeMessageWritable(curMsg));
+                    
+                    // 4. store deleted vertices -- for deletedSet
+                    allDeletedSet.add(new VKmerBytesWritable(curMsg.getSourceVertexId()));
                     it.remove();
                 }
             }
-            unchangedSet.add(new BubbleMergeMessageWritable(topCoverageMessage));
-        }
-    }
-    
-    public void processUnchangedSet(){
-        for(BubbleMergeMessageWritable msg : unchangedSet){
-            outFlag = MessageFlag.UNCHANGE;
+            
+            //process unchangedSet -- send message to topVertex to update their coverage
+            outgoingMsg.reset();
+            outFlag = 0;
+            outFlag |= MessageFlag.UNCHANGE;
+            outgoingMsg.setNode(topNode);
             outgoingMsg.setFlag(outFlag);
-            outgoingMsg.setNode(msg.getNode());
-            sendMsg(msg.getSourceVertexId(), outgoingMsg);
+            sendMsg(topMsg.getSourceVertexId(), outgoingMsg);
+//            unchangedSet.add(new BubbleMergeMessageWritable(topCoverageVertexMsg));
         }
     }
     
-    public void processDeletedSet(){
-        for(BubbleMergeMessageWritable msg : deletedSet){
-            outgoingMsg.set(msg);
-            outFlag = MessageFlag.KILL;
-            outgoingMsg.setFlag(outFlag);
-            outgoingMsg.setSourceVertexId(msg.getMinorVertexId());
-            sendMsg(msg.getSourceVertexId(), outgoingMsg);
-        }
-    }
+//    public void processUnchangedSet(){
+//        for(BubbleMergeMessageWritable msg : unchangedSet){
+//            outFlag = MessageFlag.UNCHANGE;
+//            outgoingMsg.setFlag(outFlag);
+//            outgoingMsg.setNode(msg.getNode());
+//            sendMsg(msg.getSourceVertexId(), outgoingMsg);
+//        }
+//    }
+//    
+//    public void processDeletedSet(){
+//        for(BubbleMergeMessageWritable msg : deletedSet){
+//            outgoingMsg.set(msg);
+//            outFlag = MessageFlag.KILL;
+//            outgoingMsg.setFlag(outFlag);
+//            outgoingMsg.setSourceVertexId(msg.getMinorVertexId());
+//            sendMsg(msg.getSourceVertexId(), outgoingMsg);
+//        }
+//    }
     
-    public void processAllDeletedSet(){
-        synchronized(allDeletedSet){
-            for(BubbleMergeMessageWritable msg : allDeletedSet){
-                outgoingMsg.set(msg);
-                outFlag = MessageFlag.KILL;
-                outgoingMsg.setFlag(outFlag);
-                outgoingMsg.setSourceVertexId(msg.getMinorVertexId());
-                sendMsg(msg.getSourceVertexId(), outgoingMsg);
-            }
-        }
-    }
+//    public void processAllDeletedSet(){
+//        synchronized(allDeletedSet){
+//            for(BubbleMergeMessageWritable msg : allDeletedSet){
+//                outgoingMsg.set(msg);
+//                outFlag = MessageFlag.KILL;
+//                outgoingMsg.setFlag(outFlag);
+//                outgoingMsg.setSourceVertexId(msg.getMinorVertexId());
+//                sendMsg(msg.getSourceVertexId(), outgoingMsg);
+//            }
+//        }
+//    }
     
     public void removeEdgesToMajorAndMinor(){
-        byte meToMajorDir = incomingMsg.getMeToMajorDir();
-        byte majorToMeDir = mirrorDirection(meToMajorDir);
-        byte meToMinorDir = incomingMsg.getMeToMinorDir();
-        byte minorToMeDir = mirrorDirection(meToMinorDir);
+        EDGETYPE meToMajorDir = EDGETYPE.fromByte(incomingMsg.getMeToMajorEdgetype());
+        EDGETYPE majorToMeDir = meToMajorDir.mirror();
+        EDGETYPE meToMinorDir = EDGETYPE.fromByte(incomingMsg.getMeToMinorEdgetype());
+        EDGETYPE minorToMeDir = meToMinorDir.mirror();
         getVertexValue().getEdgeList(majorToMeDir).remove(incomingMsg.getMajorVertexId());
         getVertexValue().getEdgeList(minorToMeDir).remove(incomingMsg.getSourceVertexId());
     }
@@ -262,8 +287,8 @@
      * do some remove operations on adjMap after receiving the info about dead Vertex
      */
     public void responseToDeadVertexAndUpdateEdges(){
-        byte meToNeighborDir = (byte) (incomingMsg.getFlag() & MessageFlag.DIR_MASK);
-        byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+        EDGETYPE meToNeighborDir = EDGETYPE.fromByte(incomingMsg.getFlag());
+        EDGETYPE neighborToMeDir = meToNeighborDir.mirror();
         
         if(getVertexValue().getEdgeList(neighborToMeDir).getEdge(incomingMsg.getSourceVertexId()) != null){
             tmpEdge.setAsCopy(getVertexValue().getEdgeList(neighborToMeDir).getEdge(incomingMsg.getSourceVertexId()));
@@ -271,7 +296,7 @@
             getVertexValue().getEdgeList(neighborToMeDir).remove(incomingMsg.getSourceVertexId());
         }
         tmpEdge.setKey(incomingMsg.getTopCoverageVertexId());
-        byte updateDir = flipDirection(neighborToMeDir, incomingMsg.isFlip());
+        EDGETYPE updateDir = incomingMsg.isFlip() ? neighborToMeDir.flip() : neighborToMeDir;
         getVertexValue().getEdgeList(updateDir).unionAdd(tmpEdge);
     }
     
@@ -280,80 +305,96 @@
         initVertex();
         if (getSuperstep() == 1) {
             if(VertexUtil.isBubbleVertex(getVertexValue())){
-                /** clean allDeleteSet **/
+                // clean allDeleteSet 
                 allDeletedSet.clear();
-                /** add a fake node **/
-                addFakeVertex();
-                /** send bubble and major vertex msg to minor vertex **/
+//                // add a fake node
+//                addFakeVertex();
+                // send bubble and major vertex msg to minor vertex 
                 sendBubbleAndMajorVertexMsgToMinorVertex();
             }
         } else if (getSuperstep() == 2){
             if(!isFakeVertex()){
-                /** aggregate bubble nodes and grouped by major vertex **/
+                // aggregate bubble nodes and grouped by major vertex
                 aggregateBubbleNodesByMajorNode(msgIterator);
                 
-                for(VKmerBytesWritable prevId : receivedMsgMap.keySet()){
+                for(VKmerBytesWritable majorVertexId : receivedMsgMap.keySet()){
                     receivedMsgList.clear();
-                    receivedMsgList.addAll(receivedMsgMap.get(prevId));
+                    receivedMsgList = receivedMsgMap.get(majorVertexId);
+//                    receivedMsgList.addAll(receivedMsgMap.get(majorVertexId));
                     if(receivedMsgList.size() > 1){ // filter bubble
-                        /** for each majorVertex, sort the node by decreasing order of coverage **/
-                        receivedMsgList = receivedMsgMap.get(prevId);
+                        // for each majorVertex, sort the node by decreasing order of coverage
                         Collections.sort(receivedMsgList, new BubbleMergeMessageWritable.SortByCoverage());
                         
-                        /** process similarSet, keep the unchanged set and deleted set & add coverage to unchange node **/
+                        // process similarSet, keep the unchanged set and deleted set & add coverage to unchange node 
                         processSimilarSetToUnchangeSetAndDeletedSet();
                         
-                        /** send message to the unchanged set for updating coverage & send kill message to the deleted set **/ 
-                        processUnchangedSet();
-                        processDeletedSet();
+//                        // send message to the unchanged set for updating coverage & send kill message to the deleted set
+//                        processUnchangedSet();
+//                        processDeletedSet();
                     }
                 }
             }
         } else if (getSuperstep() == 3){
-            if(!isFakeVertex()){
-                while(msgIterator.hasNext()) {
-                    incomingMsg = msgIterator.next();
-                    if(incomingMsg.getFlag() == MessageFlag.KILL){
-                        broadcaseUpdateEdges();
-                    } else 
-                    if(incomingMsg.getFlag() == MessageFlag.UNCHANGE){
-                        /** update Node including average coverage **/
-                        getVertexValue().setNode(incomingMsg.getNode());
-                    }
-                }
-            }
-        } else if(getSuperstep() == 4){
-            if(!isFakeVertex()){
-                while(msgIterator.hasNext()) {
-                    incomingMsg = msgIterator.next();
-                    if(isResponseKillMsg()){
-                        responseToDeadVertexAndUpdateEdges();
-                    }
-                }
-            }else{
-                processAllDeletedSet();
+            if(allDeletedSet.contains(getVertexId()))
                 deleteVertex(getVertexId());
+            else{
+                while(msgIterator.hasNext()){
+                    incomingMsg = msgIterator.next();
+                    short msgType = (short) (incomingMsg.getFlag() & MessageFlag.MSG_TYPE_MASK);
+                    switch(msgType){
+                        case MessageFlag.UPDATE:
+                            break;
+                        case MessageFlag.UNCHANGE:
+                            break;
+                    }
+                }
             }
-        } else if(getSuperstep() == 5){
-            while(msgIterator.hasNext()) {
-                incomingMsg = msgIterator.next();
-                if(incomingMsg.getFlag() == MessageFlag.KILL){
+            
+//            if(!isFakeVertex()){
+//                while(msgIterator.hasNext()) {
+//                    incomingMsg = msgIterator.next();
+//                    if(incomingMsg.getFlag() == MessageFlag.KILL){
+//                        broadcaseUpdateEdges();
+//                    } else 
+//                    if(incomingMsg.getFlag() == MessageFlag.UNCHANGE){
+//                        // update Node including average coverage 
+//                        getVertexValue().setNode(incomingMsg.getNode());
+//                    }
+//                }
+//            }
+        } 
+//        else if(getSuperstep() == 4){
+//            if(!isFakeVertex()){
+//                while(msgIterator.hasNext()) {
+//                    incomingMsg = msgIterator.next();
+//                    if(isResponseKillMsg()){
+//                        responseToDeadVertexAndUpdateEdges();
+//                    }
+//                }
+//            }else{
+//                processAllDeletedSet();
+//                deleteVertex(getVertexId());
+//            }
+//        } else if(getSuperstep() == 5){
+//            while(msgIterator.hasNext()) {
+//                incomingMsg = msgIterator.next();
+//                if(incomingMsg.getFlag() == MessageFlag.KILL){
                     broadcaseKillselfAndNoticeToUpdateEdges();
-                    //set statistics counter: Num_RemovedBubbles
-                    updateStatisticsCounter(StatisticsCounter.Num_RemovedBubbles);
-                    getVertexValue().setCounters(counters);
-                }
-            }
-        } else if(getSuperstep() == 6){
-            while(msgIterator.hasNext()) {
-                incomingMsg = msgIterator.next();
-                if(isResponseKillMsg()){
+//                    //set statistics counter: Num_RemovedBubbles
+//                    updateStatisticsCounter(StatisticsCounter.Num_RemovedBubbles);
+//                    getVertexValue().setCounters(counters);
+//                }
+//            }
+//        } else if(getSuperstep() == 6){
+//            while(msgIterator.hasNext()) {
+//                incomingMsg = msgIterator.next();
+//                if(isResponseKillMsg()){
                     responseToDeadVertexAndUpdateEdges();
-                }
-            }
-        }
-        if(!isFakeVertex())
-            voteToHalt();
+//                }
+//            }
+//        }
+//        if(!isFakeVertex())
+//            voteToHalt();
     }
     
     public static void main(String[] args) throws Exception {
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicPathMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicPathMergeVertex.java
index 70c3c33..d344ad2 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicPathMergeVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicPathMergeVertex.java
@@ -4,18 +4,17 @@
 import java.util.Iterator;
 
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable.P4State;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable.State;
 import edu.uci.ics.genomix.pregelix.io.message.MessageWritable;
 import edu.uci.ics.genomix.pregelix.io.message.PathMergeMessageWritable;
 import edu.uci.ics.genomix.pregelix.log.LogUtil;
 import edu.uci.ics.genomix.pregelix.operator.BasicGraphCleanVertex;
 import edu.uci.ics.genomix.pregelix.type.MessageFlag;
-import edu.uci.ics.genomix.pregelix.util.VertexUtil;
 import edu.uci.ics.genomix.type.EdgeWritable;
 import edu.uci.ics.genomix.type.NodeWritable;
 import edu.uci.ics.genomix.type.NodeWritable.DIR;
-import edu.uci.ics.genomix.type.NodeWritable.OutgoingListFlag;
-import edu.uci.ics.genomix.type.NodeWritable.IncomingListFlag;
+import edu.uci.ics.genomix.type.NodeWritable.EDGETYPE;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
 
 public abstract class BasicPathMergeVertex<V extends VertexValueWritable, M extends PathMergeMessageWritable> extends
@@ -44,72 +43,6 @@
     public DIR revert(DIR direction){
         return direction == DIR.PREVIOUS ? DIR.NEXT : DIR.PREVIOUS;
     }
-    /**
-     * start sending message
-     */
-    public void startSendMsg() {
-        if(isTandemRepeat(getVertexValue())){
-            getCopyWithoutTandemRepeats(getVertexValue());
-            outFlag = 0;
-            headSendSettledMsgToAllNeighborNodes(tmpValue);
-            voteToHalt();
-        } else{
-            /** check incoming **/
-            // update internal state
-            if (VertexUtil.isVertexWithOnlyOneIncoming(getVertexValue())){
-                byte state = 0;
-                state |= State.HEAD_CAN_MERGEWITHPREV;
-                getVertexValue().setState(state);
-                activate();
-            } 
-            // send to neighbors
-            else if (VertexUtil.isVertexWithManyIncoming(getVertexValue())){
-                outFlag = 0;
-                headSendSettledMsgs(DIR.PREVIOUS, getVertexValue());
-            }
-            
-            /** check outgoing **/
-            // update internal state
-            if (VertexUtil.isVertexWithOnlyOneOutgoing(getVertexValue())){
-                byte state = 0;
-                state |= State.HEAD_CAN_MERGEWITHNEXT;
-                getVertexValue().setState(state);
-                activate();
-            } 
-            // send to neighbors
-            else if (VertexUtil.isVertexWithManyOutgoing(getVertexValue())){
-                outFlag = 0;
-                headSendSettledMsgs(DIR.NEXT, getVertexValue());
-            }
-            
-            if(VertexUtil.isUnMergeVertex(getVertexValue()))
-                voteToHalt();
-        }
-    }
-
-    /**
-     * initiate head, rear and path node
-     */
-    public void initState(Iterator<M> msgIterator) {
-        if(isInactiveNode())
-            voteToHalt();
-        else{
-            if(msgIterator.hasNext()){
-                // aggregate all the incomingMsgs first
-                aggregateMsg(msgIterator);
-                // update state based on aggregateMsg
-                updateState();
-            }
-        }
-    }
-    
-    public void setStateAsMergeDir(DIR direction){
-        short state = getVertexValue().getState();
-        state &= State.CAN_MERGE_CLEAR;
-        state |= direction == DIR.PREVIOUS ? State.CAN_MERGEWITHPREV : State.CAN_MERGEWITHNEXT;
-        getVertexValue().setState(state);
-        activate();
-    }
 
     /**
      * send UPDATE msg   boolean: true == P4, false == P2
@@ -122,8 +55,8 @@
 //            outgoingMsg.setFlip(ifFilpWithSuccessor(incomingMsg.getSourceVertexId()));
         
         DIR revertDirection = revert(direction);
-        byte[] mergeDirs = direction == DIR.PREVIOUS ? OutgoingListFlag.values : IncomingListFlag.values;
-        byte[] updateDirs = direction == DIR.PREVIOUS ? IncomingListFlag.values : OutgoingListFlag.values;
+        EnumSet<EDGETYPE> mergeDirs = direction == DIR.PREVIOUS ? EDGETYPE.OUTGOING : EDGETYPE.INCOMING;
+        EnumSet<EDGETYPE> updateDirs = direction == DIR.PREVIOUS ? EDGETYPE.INCOMING : EDGETYPE.OUTGOING;
         
         //set deleteKmer
         outgoingMsg.setSourceVertexId(getVertexId());
@@ -131,11 +64,11 @@
         //set replaceDir
         setReplaceDir(mergeDirs);
                 
-        for(byte dir : updateDirs){
+        for(EDGETYPE dir : updateDirs){
             kmerIterator = getVertexValue().getEdgeList(dir).getKeyIterator();
             while(kmerIterator.hasNext()){
                 //set deleteDir
-                byte deleteDir = setDeleteDir(dir);
+                EDGETYPE deleteDir = setDeleteDir(dir);
                 //set mergeDir, so it won't need flip
                 setMergeDir(deleteDir, revertDirection);
                 outgoingMsg.setFlag(outFlag);
@@ -151,9 +84,9 @@
     public void processUpdate(M msg){
     	// A -> B -> C with B merging with C
         inFlag = msg.getFlag();
-        byte deleteDir = (byte) ((inFlag & MessageFlag.DELETE_DIR_MASK) >> 11); // B -> A dir
-        byte mergeDir = (byte) ((inFlag & MessageFlag.MERGE_DIR_MASK) >> 9); // C -> A dir
-        byte replaceDir = (byte) ((inFlag & MessageFlag.REPLACE_DIR_MASK)); // C -> B dir
+        EDGETYPE deleteDir = EDGETYPE.fromByte((short) ((inFlag & MessageFlag.DELETE_DIR_MASK) >> 11)); // B -> A dir
+        EDGETYPE mergeDir = EDGETYPE.fromByte((short) ((inFlag & MessageFlag.MERGE_DIR_MASK) >> 9)); // C -> A dir
+        EDGETYPE replaceDir = EDGETYPE.fromByte((short)(inFlag & MessageFlag.REPLACE_DIR_MASK)); // C -> B dir
         
         getVertexValue().getNode().updateEdges(deleteDir, msg.getSourceVertexId(), 
                 mergeDir, replaceDir, msg.getNode(), true);
@@ -177,7 +110,7 @@
             outgoingMsg.setFlag(outFlag);
             outgoingMsg.setSourceVertexId(getVertexId());
             outgoingMsg.setNode(getVertexValue().getNode()); //half of edges are enough
-            destVertexId = getDestVertexId(direction); //(direction == DIR.PREVIOUS ? getPrevDestVertexId() : getNextDestVertexId()); //getDestVertexId(direction)
+            destVertexId = getDestVertexId(direction);
             sendMsg(destVertexId, outgoingMsg);
             
             if(isP4)
@@ -228,9 +161,9 @@
         }
     }
     
-    public void setReplaceDir(byte[] mergeDirs){
-        byte replaceDir = 0;
-        for(byte dir : mergeDirs){
+    public void setReplaceDir(EnumSet<EDGETYPE> mergeDirs){
+        EDGETYPE replaceDir = null;
+        for(EDGETYPE dir : mergeDirs){
             int num = getVertexValue().getEdgeList(dir).getCountOfPosition();
             if(num > 0){
                 if(num != 1)
@@ -241,89 +174,31 @@
             }
         }
         outFlag &= MessageFlag.REPLACE_DIR_CLEAR;
-        outFlag |= replaceDir;
+        outFlag |= replaceDir.get();
     }
     
-    public byte setDeleteDir(byte dir){
-        byte deleteDir = mirrorDirection(dir);
+    public EDGETYPE setDeleteDir(EDGETYPE dir){
+        EDGETYPE deleteDir = dir.mirror();
         outFlag &= MessageFlag.DELETE_DIR_CLEAR;
-        outFlag |= (deleteDir << 11);
+        outFlag |= deleteDir.get();
         return deleteDir;
     }
     
-    public void setMergeDir(byte deleteDir, DIR revertDirection){
-        byte mergeDir = flipDirection(deleteDir, ifFlipWithNeighbor(revertDirection));
+    public void setMergeDir(EDGETYPE deleteDir, DIR revertDirection){
+        EDGETYPE mergeDir = ifFlipWithNeighbor(revertDirection) ? deleteDir.flip() : deleteDir;
         outFlag &= MessageFlag.MERGE_DIR_CLEAR;
-        outFlag |= (mergeDir << 9);
-    }
-//------------------------------------
-    /**
-     * Send merge restrictions to my neighbor nodes
-     */
-    public void restrictNeighbors() {
-        EnumSet<DIR> dirsToRestrict;
-        V vertex = getVertexValue();
-        if(isTandemRepeat(vertex)) {
-            // tandem repeats are not allowed to merge at all
-            dirsToRestrict = EnumSet.of(DIR.NEXT, DIR.PREVIOUS);
-        }
-        else {
-            // degree > 1 can't merge in that direction
-            dirsToRestrict = EnumSet.noneOf(DIR.class);
-            for (DIR dir : DIR.values()) {
-                if (vertex.getDegree(dir) == 0 || vertex.getDegree(dir) > 1){
-                    short restrictedDirs = getVertexValue().getState();
-                    restrictedDirs |= dir.get();
-                    getVertexValue().setState(restrictedDirs);
-                    activate();
-                }
-                if (vertex.getDegree(dir) > 1)
-                    dirsToRestrict.add(dir);
-            }
-        }
-        
-        // send a message to each neighbor indicating they can't merge towards me
-        for (DIR dir : dirsToRestrict) {
-            for (byte d : NodeWritable.edgeTypesInDir(dir)) {
-                for (VKmerBytesWritable destId : vertex.getEdgeList(d).getKeys()) {
-                    outgoingMsg.reset();
-                    outgoingMsg.setFlag(DIR.mirror(d).get());
-                    sendMsg(destId, outgoingMsg);
-                }
-            }
-        }
+        outFlag |= mergeDir.get();
     }
     
     /**
-     * initiate head, rear and path node
-     */
-    public void recieveRestrictions(Iterator<M> msgIterator) {
-        short restrictedDirs = 0;
-        while (msgIterator.hasNext()) {
-            incomingMsg = msgIterator.next();
-            restrictedDirs |= incomingMsg.getFlag();
-        }
-        // special case: tandem repeats cannot merge at all
-        if (isTandemRepeat(getVertexValue())) {
-            restrictedDirs |= DIR.PREVIOUS.get();
-            restrictedDirs |= DIR.NEXT.get();
-        }
-        
-        short selfRestrictedDirs = (short) (getVertexValue().getState() & DIR.MASK);
-        selfRestrictedDirs |= restrictedDirs;
-        getVertexValue().setState(selfRestrictedDirs);
-        activate();
-    }
-//------------------------------------
-    /**
      * final updateAdjList
      */
     public void processFinalUpdate(){
         inFlag = incomingMsg.getFlag();
-        byte meToNeighborDir = (byte) (inFlag & MessageFlag.DIR_MASK);
-        byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+        EDGETYPE meToNeighborDir = EDGETYPE.fromByte(incomingMsg.getFlag());
+        EDGETYPE neighborToMeDir = meToNeighborDir.mirror();
         
-        byte neighborToMergeDir = flipDirection(neighborToMeDir, incomingMsg.isFlip());
+        EDGETYPE neighborToMergeDir = incomingMsg.isFlip() ? neighborToMeDir.flip() : neighborToMeDir;
         getVertexValue().processFinalUpdates(neighborToMeDir, neighborToMergeDir, incomingMsg.getNode());
     }
     
@@ -332,8 +207,8 @@
      */
     public void processFinalUpdate2(){
         inFlag = incomingMsg.getFlag();
-        byte meToNeighborDir = (byte) (inFlag & MessageFlag.DIR_MASK);
-        byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+        EDGETYPE meToNeighborDir = EDGETYPE.fromByte(inFlag);
+        EDGETYPE neighborToMeDir = meToNeighborDir.mirror();
         
         EdgeWritable edge = new EdgeWritable();
         edge.setKey(incomingMsg.getSourceVertexId());
@@ -341,13 +216,6 @@
         getVertexValue().getEdgeList(neighborToMeDir).unionAdd(edge);
     }
     
-    public byte flipHeadMergeDir(byte d, boolean isFlip){
-        if(isFlip){
-            return DIR.mirrorFromByte((byte)(d & DIR.MASK));  
-        } else
-            return d;
-    }
-    
     public boolean isDifferentDirWithMergeKmer(byte neighborToMeDir){
         return neighborToMeDir == MessageFlag.DIR_FR || neighborToMeDir == MessageFlag.DIR_RF;
     }
@@ -373,18 +241,11 @@
      */
     public void processMerge(PathMergeMessageWritable msg){
         inFlag = msg.getFlag();
-        byte meToNeighborDir = (byte) (inFlag & MessageFlag.DIR_MASK);
-        byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+        EDGETYPE meToNeighborDir = EDGETYPE.fromByte(inFlag);
+        EDGETYPE neighborToMeDir = meToNeighborDir.mirror();
 
-//        if(isNonHeadReceivedFromHead()){ // TODO? why sepcial-case the path vs heads?  just aggregate your state flags
-//            short state = getVertexValue().getState();
-//            state &= State.HEAD_CAN_MERGE_CLEAR;
-//            byte headMergeDir = flipHeadMergeDir((byte)(inFlag & MessageFlag.HEAD_CAN_MERGE_MASK), isDifferentDirWithMergeKmer(neighborToMeDir));
-//            state |= headMergeDir;
-//            getVertexValue().setState(state);
-//        }
         short state = getVertexValue().getState();  
-        state |= flipHeadMergeDir((byte)(inFlag & DIR.MASK), isDifferentDirWithMergeKmer(neighborToMeDir));
+//        state |= flipHeadMergeDir((byte)(inFlag & DIR.MASK), isDifferentDirWithMergeKmer(neighborToMeDir));
         getVertexValue().setState(state);
         
         getVertexValue().processMerges(neighborToMeDir, msg.getNode(), kmerSize);
@@ -408,15 +269,15 @@
     public void sendUpdateMsgForP2(MessageWritable msg){
         outgoingMsg.reset();
         outgoingMsg.setUpdateMsg(true);
-        byte meToNeighborDir = (byte) (msg.getFlag() & MessageFlag.DIR_MASK);
-        byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+        EDGETYPE meToNeighborDir = EDGETYPE.fromByte(incomingMsg.getFlag());
+        EDGETYPE neighborToMeDir = meToNeighborDir.mirror();
         switch(neighborToMeDir){
-            case MessageFlag.DIR_FF:
-            case MessageFlag.DIR_FR:
+            case FF:
+            case FR:
                 sendUpdateMsg(isP2, DIR.PREVIOUS);
                 break;
-            case MessageFlag.DIR_RF:
-            case MessageFlag.DIR_RR: 
+            case RF:
+            case RR: 
                 sendUpdateMsg(isP2, DIR.NEXT);
                 break;
         }
@@ -442,8 +303,7 @@
         else
             outgoingMsg.setFlip(false);
         outgoingMsg.setFlag(outFlag);
-//        outgoingMsg.setNeighberNode(getVertexValue().getIncomingList());
-        for(byte d: IncomingListFlag.values)
+        for(EDGETYPE d: EDGETYPE.INCOMING)
         	outgoingMsg.setEdgeList(d, getVertexValue().getEdgeList(d));
         outgoingMsg.setSourceVertexId(getVertexId());
         outgoingMsg.setInternalKmer(getVertexValue().getInternalKmer());
@@ -451,29 +311,29 @@
     }
     
     public boolean canMergeWithHead(MessageWritable msg){
-        byte meToNeighborDir = (byte) (msg.getFlag() & MessageFlag.DIR_MASK);
-        byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+        EDGETYPE meToNeighborDir = EDGETYPE.fromByte(msg.getFlag());
+        EDGETYPE neighborToMeDir = meToNeighborDir.mirror();
         switch(neighborToMeDir){
-            case MessageFlag.DIR_FF:
-            case MessageFlag.DIR_FR:
+            case FF:
+            case FR:
                 return getVertexValue().outDegree() == 1;
-            case MessageFlag.DIR_RF:
-            case MessageFlag.DIR_RR:
+            case RF:
+            case RR:
                 return getVertexValue().inDegree() == 1;    
         }
         return false;
     }
     
     public void sendMergeMsgByIncomingMsgDir(){
-        byte meToNeighborDir = (byte) (incomingMsg.getFlag() & MessageFlag.DIR_MASK);
-        byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+        EDGETYPE meToNeighborDir = EDGETYPE.fromByte(incomingMsg.getFlag());
+        EDGETYPE neighborToMeDir = meToNeighborDir.mirror();
         switch(neighborToMeDir){
-            case MessageFlag.DIR_FF:
-            case MessageFlag.DIR_FR:
+            case FF:
+            case FR:
                 configureMergeMsgForSuccessor(incomingMsg.getSourceVertexId());
                 break;
-            case MessageFlag.DIR_RF:
-            case MessageFlag.DIR_RR:
+            case RF:
+            case RR:
                 configureMergeMsgForPredecessor(incomingMsg.getSourceVertexId()); 
                 break; 
         }
@@ -534,18 +394,208 @@
      */
     public void setHeadMergeDir(){
         byte state = 0;
-        byte meToNeighborDir = (byte) (incomingMsg.getFlag() & MessageFlag.DIR_MASK);
-        byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+        EDGETYPE meToNeighborDir = EDGETYPE.fromByte(incomingMsg.getFlag());
+        EDGETYPE neighborToMeDir = meToNeighborDir.mirror();
         switch(neighborToMeDir){
-            case MessageFlag.DIR_FF:
-            case MessageFlag.DIR_FR:
+            case FF:
+            case FR:
                 state |= State.HEAD_CAN_MERGEWITHPREV;
                 break;
-            case MessageFlag.DIR_RF:
-            case MessageFlag.DIR_RR:
+            case RF:
+            case RR:
                 state |= State.HEAD_CAN_MERGEWITHNEXT;
                 break;
         }
         getVertexValue().setState(state);
     }
+    
+// 2013.9.21 --------------------------------------------------------------------------------------------------//
+    /**
+     * Send merge restrictions to my neighbor nodes
+     */
+    public void restrictNeighbors() {
+        EnumSet<DIR> dirsToRestrict;
+        VertexValueWritable vertex = getVertexValue();
+        short state = vertex.getState();
+        boolean updated = false;
+        if(isTandemRepeat(vertex)) {
+            // tandem repeats are not allowed to merge at all
+            dirsToRestrict = EnumSet.of(DIR.NEXT, DIR.PREVIOUS);
+            state |= DIR.NEXT.get();
+            state |= DIR.PREVIOUS.get();
+            updated = true;
+        }
+        else {
+            // degree > 1 can't merge in that direction; == 0 means we are a tip 
+            dirsToRestrict = EnumSet.noneOf(DIR.class);
+            for (DIR dir : DIR.values()) {
+                if (vertex.getDegree(dir) > 1 || vertex.getDegree(dir) == 0) {
+                    dirsToRestrict.add(dir);
+                    state |= dir.get();
+                    updated = true;
+                }
+            }
+        }
+        if (updated) {
+            vertex.setState(state);
+            if (DIR.enumSetFromByte(state).containsAll(EnumSet.allOf(DIR.class)))
+                voteToHalt();
+            else 
+                activate();
+        }
+        
+        // send a message to each neighbor indicating they can't merge towards me
+        for (DIR dir : dirsToRestrict) {
+            for (EDGETYPE et : dir.edgeType()) {
+                for (VKmerBytesWritable destId : vertex.getEdgeList(et).getKeys()) {
+                    outgoingMsg.reset();
+                    outgoingMsg.setFlag(et.mirror().dir().get());
+                    
+//                    LOG.info("send restriction from " + getVertexId() + " to " + destId + " in my " + d + " and their " + DirectionFlag.mirrorEdge(d) + " (" + DirectionFlag.dirFromEdgeType(DirectionFlag.mirrorEdge(d)) + "); I am " + getVertexValue());
+                    sendMsg(destId, outgoingMsg);
+                }
+            }
+        }
+    }
+    
+    /**
+     * initiate head, rear and path node
+     */
+    public void recieveRestrictions(Iterator<M> msgIterator) {
+        short restrictedDirs = 0;  // the directions (NEXT/PREVIOUS) that I'm not allowed to merge in
+        boolean updated = false;
+        while (msgIterator.hasNext()) {
+//            LOG.info("before restriction " + getVertexId() + ": " + DIR.fromByte(restrictedDirs));
+            incomingMsg = msgIterator.next();
+            restrictedDirs |= incomingMsg.getFlag();
+//            LOG.info("after restriction " + getVertexId() + ": " + DIR.fromByte(restrictedDirs));
+            updated = true;
+        }
+        if (updated) {
+            getVertexValue().setState(restrictedDirs);
+            if (DIR.enumSetFromByte(restrictedDirs).containsAll(EnumSet.allOf(DIR.class)))
+                voteToHalt();
+            else 
+                activate();
+        }
+    }
+    
+    public void updateNeighbors() {
+        VertexValueWritable vertex = getVertexValue();
+        short state = vertex.getState();
+        EDGETYPE edgeType = EDGETYPE.fromByte(state);
+        if ((state & P4State.MERGE) == 0) {
+            return;  // no merge requested; don't have to update neighbors
+        }
+        
+        DIR mergeDir = edgeType.dir(); 
+        EnumSet<EDGETYPE> mergeEdges = mergeDir.edgeType();
+        
+        DIR updateDir = mergeDir.mirror();
+        EnumSet<EDGETYPE> updateEdges = updateDir.edgeType();
+        
+        // prepare the update message s.t. the receiver can do a simple unionupdate
+        // that means we figure out any hops and place our merge-dir edges in the appropriate list of the outgoing msg
+        for (EDGETYPE updateEdge : updateEdges) {
+            outgoingMsg.reset();
+            outgoingMsg.setSourceVertexId(getVertexId());
+            outgoingMsg.setFlag(updateEdge.mirror().get());  // neighbor's edge to me (so he can remove me) 
+            for (EDGETYPE mergeEdge : mergeEdges) {
+                EDGETYPE newEdgetype = EDGETYPE.resolveLinkThroughMiddleNode(updateEdge, mergeEdge);
+                outgoingMsg.getNode().setEdgeList(newEdgetype, getVertexValue().getEdgeList(mergeEdge));  // copy into outgoingMsg
+            }
+            
+            // send the update to all kmers in this list // TODO perhaps we could skip all this if there are no neighbors here
+            for (VKmerBytesWritable dest : vertex.getEdgeList(updateEdge).getKeys()) {
+//                LOG.info("send update message from " + getVertexId() + " to " + dest + ": " + outgoingMsg);
+                sendMsg(dest, outgoingMsg);
+            }
+        }
+    }
+    
+    public void receiveUpdates(Iterator<M> msgIterator){
+        VertexValueWritable vertex = getVertexValue(); 
+        NodeWritable node = vertex.getNode();
+        boolean updated = false;
+        while (msgIterator.hasNext()) {
+//            LOG.info("before update from neighbor: " + getVertexValue());
+            incomingMsg = msgIterator.next();
+            // remove the edge to the node that will merge elsewhere
+            node.getEdgeList(EDGETYPE.fromByte(incomingMsg.getFlag())).remove(incomingMsg.getSourceVertexId());
+            // add the node this neighbor will merge into
+            for (EDGETYPE edgeType : EnumSet.allOf(EDGETYPE.class)) {
+                node.getEdgeList(edgeType).unionUpdate(incomingMsg.getEdgeList(edgeType));
+            }
+            updated = true;
+//            LOG.info("after update from neighbor: " + getVertexValue());
+        }
+        if (updated) {
+            if (DIR.enumSetFromByte(vertex.getState()).containsAll(EnumSet.allOf(DIR.class)))
+                voteToHalt();
+            else 
+                activate();
+        }
+    }
+    
+    public void sendMergeMsg() {
+        VertexValueWritable vertex = getVertexValue();
+        short state = vertex.getState();
+        if ((state & P4State.MERGE) != 0) {
+            outgoingMsg.reset();
+            // tell neighbor where this is coming from (so they can merge kmers and delete)
+            EDGETYPE mergeEdgetype = EDGETYPE.fromByte(vertex.getState());
+            byte neighborRestrictions = DIR.fromSet(mergeEdgetype.causesFlip() ? DIR.flipSetFromByte(state) : DIR.enumSetFromByte(state));
+            
+            outgoingMsg.setFlag((short) (mergeEdgetype.mirror().get() | neighborRestrictions));
+            outgoingMsg.setSourceVertexId(getVertexId());
+            outgoingMsg.setNode(vertex.getNode());
+            if (vertex.getDegree(mergeEdgetype.dir()) != 1)
+                throw new IllegalStateException("Merge attempted in node with degree in " + mergeEdgetype + " direction != 1!\n" + vertex);
+            VKmerBytesWritable dest = vertex.getEdgeList(mergeEdgetype).get(0).getKey();
+//            LOG.info("send merge mesage from " + getVertexId() + " to " + dest + ": " + outgoingMsg + "; my restrictions are: " + DIR.enumSetFromByte(vertex.getState()) + ", their restrictions are: " + DIR.enumSetFromByte(outgoingMsg.getFlag()));
+            sendMsg(dest, outgoingMsg);
+            
+//            LOG.info("killing self: " + getVertexId());
+            deleteVertex(getVertexId());
+        }
+    }
+    
+    /**
+     * step4: receive and process Merges 
+     */
+    public void receiveMerges(Iterator<M> msgIterator) {
+        VertexValueWritable vertex = getVertexValue();
+        NodeWritable node = vertex.getNode();
+        short state = vertex.getState();
+        boolean updated = false;
+        EDGETYPE senderEdgetype;
+        @SuppressWarnings("unused")
+        int numMerged = 0;
+        while (msgIterator.hasNext()) {
+//            LOG.info("before merge: " + getVertexValue() + " restrictions: " + DIR.enumSetFromByte(state));
+            incomingMsg = msgIterator.next();
+            senderEdgetype = EDGETYPE.fromByte(incomingMsg.getFlag());
+            node.mergeWithNode(senderEdgetype, incomingMsg.getNode());
+            state |= (byte) (incomingMsg.getFlag() & DIR.MASK);  // update incoming restricted directions
+            numMerged++;
+            updated = true;
+//            LOG.info("after merge: " + getVertexValue() + " restrictions: " + DIR.enumSetFromByte(state));
+        }
+        if(isTandemRepeat(getVertexValue())) {
+            // tandem repeats can't merge anymore; restrict all future merges
+            state |= DIR.NEXT.get();
+            state |= DIR.PREVIOUS.get();
+            updated = true;
+//          updateStatisticsCounter(StatisticsCounter.Num_Cycles); 
+        }
+//      updateStatisticsCounter(StatisticsCounter.Num_MergedNodes);
+//      getVertexValue().setCounters(counters);
+        if (updated) {
+            vertex.setState(state);
+            if (DIR.enumSetFromByte(state).containsAll(EnumSet.allOf(DIR.class)))
+                voteToHalt();
+            else 
+                activate();
+        }
+    }
 }
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P0ForPathMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P0ForPathMergeVertex.java
new file mode 100644
index 0000000..ae67a57
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P0ForPathMergeVertex.java
@@ -0,0 +1,83 @@
+package edu.uci.ics.genomix.pregelix.operator.pathmerge;
+
+import java.util.EnumSet;
+import java.util.Iterator;
+
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable.P4State;
+import edu.uci.ics.genomix.pregelix.io.message.PathMergeMessageWritable;
+import edu.uci.ics.genomix.pregelix.operator.aggregator.StatisticsAggregator;
+import edu.uci.ics.genomix.type.NodeWritable.EDGETYPE;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+import edu.uci.ics.genomix.type.NodeWritable.DIR;
+
+public class P0ForPathMergeVertex extends
+    BasicPathMergeVertex<VertexValueWritable, PathMergeMessageWritable> {
+    
+    /**
+     * initiate kmerSize, maxIteration
+     */
+    @Override
+    public void initVertex() {
+        super.initVertex();
+        if(incomingMsg == null)
+            incomingMsg = new PathMergeMessageWritable();
+        if(outgoingMsg == null)
+            outgoingMsg = new PathMergeMessageWritable();
+        else
+            outgoingMsg.reset();
+        if(destVertexId == null)
+            destVertexId = new VKmerBytesWritable();
+        if(repeatKmer == null)
+            repeatKmer = new VKmerBytesWritable();
+        if(getSuperstep() == 1)
+            StatisticsAggregator.preGlobalCounters.clear();
+//        else
+//            StatisticsAggregator.preGlobalCounters = BasicGraphCleanVertex.readStatisticsCounterResult(getContext().getConfiguration());
+        counters.clear();
+        getVertexValue().getCounters().clear();
+    }
+    
+    public void chooseMergeDir() {
+        VertexValueWritable vertex = getVertexValue();
+        short state = vertex.getState();
+        EnumSet<DIR> restrictedDirs = DIR.enumSetFromByte(state);
+        boolean updated = false;
+        //initiate merge dir
+        state &= P4State.MERGE_CLEAR;
+        state |= P4State.NO_MERGE;   //setMerge(P4State.NO_MERGE);
+        
+        //choose merge dir -- principle: only merge with nextDir
+        if(restrictedDirs.size() == 1){
+            EDGETYPE edgeType = restrictedDirs.contains(DIR.PREVIOUS) ? vertex.getEdgetypeFromDir(DIR.NEXT) : vertex.getEdgetypeFromDir(DIR.PREVIOUS);
+            state |= P4State.MERGE | edgeType.get();
+            updated = true;
+        }
+        
+        getVertexValue().setState(state);
+        if (updated)
+            activate();
+        else 
+            voteToHalt();
+    }
+    
+    @Override
+    public void compute(Iterator<PathMergeMessageWritable> msgIterator) throws Exception {
+        initVertex();
+        
+        if (getSuperstep() == 1) {
+            restrictNeighbors();
+        } else if (getSuperstep() % 2 == 0) {
+            if (getSuperstep() == 2)
+                recieveRestrictions(msgIterator);
+            else
+                receiveMerges(msgIterator);
+            chooseMergeDir();
+            updateNeighbors();
+        } else if (getSuperstep() % 2 == 1) {
+            receiveUpdates(msgIterator);
+            sendMergeMsg();
+        } 
+    }
+
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P1ForPathMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P1ForPathMergeVertex.java
index 6e42280..d78a7cd 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P1ForPathMergeVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P1ForPathMergeVertex.java
@@ -5,6 +5,7 @@
 import java.util.Iterator;
 
 import edu.uci.ics.genomix.type.EdgeWritable;
+import edu.uci.ics.genomix.type.NodeWritable.EDGETYPE;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
 import edu.uci.ics.genomix.type.VKmerListWritable;
 import edu.uci.ics.genomix.type.NodeWritable.DIR;
@@ -14,6 +15,7 @@
 import edu.uci.ics.genomix.pregelix.io.message.PathMergeMessageWritable;
 import edu.uci.ics.genomix.pregelix.operator.aggregator.StatisticsAggregator;
 import edu.uci.ics.genomix.pregelix.type.MessageFlag;
+import edu.uci.ics.genomix.pregelix.util.VertexUtil;
 
 /**
  * Graph clean pattern: P1(Naive-algorithm) for path merge 
@@ -150,8 +152,8 @@
      * do some remove operations on adjMap after receiving the info about dead Vertex
      */
     public void responseToDeadVertexAndUpdateEdges(){
-        byte meToNeighborDir = (byte) (incomingMsg.getFlag() & MessageFlag.DIR_MASK);
-        byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+        EDGETYPE meToNeighborDir = EDGETYPE.fromByte(incomingMsg.getFlag());
+        EDGETYPE neighborToMeDir = meToNeighborDir.mirror();
         
         if(getVertexValue().getEdgeList(neighborToMeDir).getEdge(incomingMsg.getSourceVertexId()) != null){
             tmpEdge.setAsCopy(getVertexValue().getEdgeList(neighborToMeDir).getEdge(incomingMsg.getSourceVertexId()));
@@ -159,7 +161,7 @@
             getVertexValue().getEdgeList(neighborToMeDir).remove(incomingMsg.getSourceVertexId());
         }
         tmpEdge.setKey(incomingMsg.getNode().getInternalKmer());
-        byte updateDir = flipDirection(neighborToMeDir, incomingMsg.isFlip());
+        EDGETYPE updateDir = incomingMsg.isFlip() ? neighborToMeDir.flip() : neighborToMeDir; 
         getVertexValue().getEdgeList(updateDir).unionAdd(tmpEdge);
     }
     
@@ -262,6 +264,76 @@
             voteToHalt();
     }
     
+    /**
+     * start sending message
+     */
+    public void startSendMsg() {
+        if(isTandemRepeat(getVertexValue())){
+            copyWithoutTandemRepeats(getVertexValue(), tmpValue);
+            outFlag = 0;
+            sendSettledMsgToAllNeighborNodes(tmpValue);
+            voteToHalt();
+        } else{
+            /** check incoming **/
+            // update internal state
+            if (VertexUtil.isVertexWithOnlyOneIncoming(getVertexValue())){
+                byte state = 0;
+                state |= State.HEAD_CAN_MERGEWITHPREV;
+                getVertexValue().setState(state);
+                activate();
+            } 
+            // send to neighbors
+            else if (VertexUtil.isVertexWithManyIncoming(getVertexValue())){
+                outFlag = 0;
+                sendSettledMsgs(DIR.PREVIOUS, getVertexValue());
+                 }
+            
+            /** check outgoing **/
+            // update internal state
+            if (VertexUtil.isVertexWithOnlyOneOutgoing(getVertexValue())){
+                byte state = 0;
+                state |= State.HEAD_CAN_MERGEWITHNEXT;
+                getVertexValue().setState(state);
+                activate();
+            } 
+            // send to neighbors
+            else if (VertexUtil.isVertexWithManyOutgoing(getVertexValue())){
+                outFlag = 0;
+                sendSettledMsgs(DIR.NEXT, getVertexValue());
+                 }
+            
+            if(VertexUtil.isUnMergeVertex(getVertexValue()))
+                voteToHalt();
+         }
+     }
+    
+        public void initState(Iterator<PathMergeMessageWritable> msgIterator) {
+                if(isInactiveNode())
+                    voteToHalt();
+                else{
+                    while (msgIterator.hasNext()) {
+                        incomingMsg = msgIterator.next();
+                        switch(getHeadMergeDir()){
+                            case State.PATH_NON_HEAD: // TODO Change name to Path
+                                setHeadMergeDir();
+                                activate();
+                                break;
+                            case State.HEAD_CAN_MERGEWITHPREV: // TODO aggregate all the incomingMsgs first, then make a decision about halting
+                            case State.HEAD_CAN_MERGEWITHNEXT:
+                                if(true){ //if (getHeadFlagAndMergeDir() != getMsgFlagAndMergeDir()){
+                                    getVertexValue().setState(State.HEAD_CANNOT_MERGE);
+                                    voteToHalt();
+                                }
+                                break;
+                            case State.HEAD_CANNOT_MERGE:
+                                voteToHalt();
+                                break;
+                        }
+                    }
+                }
+        }
+
+    
     @Override
     public void compute(Iterator<PathMergeMessageWritable> msgIterator) {
         initVertex();
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P2ForPathMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P2ForPathMergeVertex.java
index 7b97260..4a168af 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P2ForPathMergeVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P2ForPathMergeVertex.java
@@ -21,6 +21,7 @@
 import edu.uci.ics.genomix.pregelix.type.MessageFlag;
 import edu.uci.ics.genomix.pregelix.type.MessageType;
 import edu.uci.ics.genomix.type.NodeWritable.DIR;
+import edu.uci.ics.genomix.type.NodeWritable.EDGETYPE;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
 import edu.uci.ics.genomix.type.VKmerListWritable;
 import edu.uci.ics.pregelix.api.graph.Vertex;
@@ -227,25 +228,25 @@
     }
     
     public void sendP2MergeMsgByIncomingMsgDir(){
-        byte meToNeighborDir = (byte) (incomingMsg.getFlag() & MessageFlag.DIR_MASK);
+        EDGETYPE meToNeighborDir = EDGETYPE.fromByte(incomingMsg.getFlag());
         switch(meToNeighborDir){
-            case MessageFlag.DIR_FF:
-            case MessageFlag.DIR_FR:
+            case FF:
+            case FR:
                 outgoingMsg.setMessageType(P2MessageType.FROM_SUCCESSOR);
                 break;
-            case MessageFlag.DIR_RF:
-            case MessageFlag.DIR_RR:
+            case RF:
+            case RR:
                 outgoingMsg.setMessageType(P2MessageType.FROM_PREDECESSOR);
                 break;
         }
-        byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+        EDGETYPE neighborToMeDir = meToNeighborDir.mirror();
         switch(neighborToMeDir){
-            case MessageFlag.DIR_FF:
-            case MessageFlag.DIR_FR:
+            case FF:
+            case FR:
                 configureP2MergeMsgForSuccessor(incomingMsg.getSourceVertexId());
                 break;
-            case MessageFlag.DIR_RF:
-            case MessageFlag.DIR_RR:
+            case RF:
+            case RR:
                 configureP2MergeMsgForPredecessor(incomingMsg.getSourceVertexId()); 
                 break; 
         }
@@ -276,8 +277,8 @@
      * final merge and updateAdjList  having parameter for p2
      */
     public void processP2Merge(P2PathMergeMessageWritable msg){
-        byte meToNeighborDir = (byte) (msg.getFlag() & MessageFlag.DIR_MASK); 
-        byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+        EDGETYPE meToNeighborDir = EDGETYPE.fromByte(msg.getFlag());
+        EDGETYPE neighborToMeDir = meToNeighborDir.mirror();
         
         getVertexValue().getMergeNode(msg.getMessageType()).mergeWithNode(neighborToMeDir, msg.getNode());
         getVertexValue().getNode().mergeWithNodeWithoutKmer(neighborToMeDir, msg.getNode());
@@ -291,32 +292,32 @@
         outFlag |= MessageFlag.IS_FINAL;
         outgoingMsg.setUpdateMsg(false);
         outgoingMsg.setApexMap(getVertexValue().getApexMap());
-        byte meToNeighborDir = (byte) (incomingMsg.getFlag() & MessageFlag.DIR_MASK);
+        EDGETYPE meToNeighborDir = EDGETYPE.fromByte(incomingMsg.getFlag());
         switch(meToNeighborDir){
-            case MessageFlag.DIR_FF:
-            case MessageFlag.DIR_FR:
+            case FF:
+            case FR:
                 outgoingMsg.setMessageType(P2MessageType.FROM_SUCCESSOR);
                 break;
-            case MessageFlag.DIR_RF:
-            case MessageFlag.DIR_RR:
+            case RF:
+            case RR:
                 outgoingMsg.setMessageType(P2MessageType.FROM_PREDECESSOR);
                 break;
         }
-        byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+        EDGETYPE neighborToMeDir = meToNeighborDir.mirror();
         switch(neighborToMeDir){
-            case MessageFlag.DIR_FF:
-            case MessageFlag.DIR_FR:
+            case FF:
+            case FR:
                 outFlag &= MessageFlag.DIR_CLEAR;
-                outFlag |= neighborToMeDir;
+                outFlag |= neighborToMeDir.get();
                 outgoingMsg.setFlag(outFlag);
                 outgoingMsg.setSourceVertexId(getVertexId());
                 outgoingMsg.setNode(getVertexValue().getPrependMergeNode());
                 sendMsg(incomingMsg.getSourceVertexId(), outgoingMsg);
                 break;
-            case MessageFlag.DIR_RF:
-            case MessageFlag.DIR_RR:
+            case RF:
+            case RR:
                 outFlag &= MessageFlag.DIR_CLEAR;
-                outFlag |= neighborToMeDir;       
+                outFlag |= neighborToMeDir.get();       
                 outgoingMsg.setFlag(outFlag);
                 outgoingMsg.setSourceVertexId(getVertexId());
                 outgoingMsg.setNode(getVertexValue().getAppendMergeNode());
@@ -405,16 +406,16 @@
      * check if it is a valid update node
      */
     public boolean isValidUpateNode(){
-        byte meToNeighborDir = (byte)(incomingMsg.getFlag() & MessageFlag.DIR_MASK);
-        byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+        EDGETYPE meToNeighborDir = EDGETYPE.fromByte(incomingMsg.getFlag());
+        EDGETYPE neighborToMeDir = meToNeighborDir.mirror();
         boolean flag = false;
         switch(neighborToMeDir){
-            case MessageFlag.DIR_FF:
-            case MessageFlag.DIR_FR:
+            case FF:
+            case FR:
                 flag = ((getVertexValue().getState() & MessageFlag.HEAD_CAN_MERGE_MASK) == MessageFlag.HEAD_CAN_MERGEWITHPREV);
                 break;
-            case MessageFlag.DIR_RF:
-            case MessageFlag.DIR_RR:
+            case RF:
+            case RR:
                 flag = ((getVertexValue().getState() & MessageFlag.HEAD_CAN_MERGE_MASK) == MessageFlag.HEAD_CAN_MERGEWITHNEXT);
                 break;
         }
@@ -430,7 +431,7 @@
             if(isHaltNode())
                 voteToHalt();
             else if(isHeadNode() && !isTandemRepeat(getVertexValue())){
-                if(isValidPath()){
+                if(true){ //isValidPath()
                     setHeadMergeDir();
                     //set deleteKmer and deleteDir
                     KmerAndDirWritable kmerAndDir = new KmerAndDirWritable();
@@ -444,7 +445,7 @@
                     getVertexValue().setState(MessageFlag.IS_HALT);
                     voteToHalt();
                 }
-            } else if(getHeadFlagAndMergeDir() == getMsgFlagAndMergeDir()){
+            } else if(isHeadNode()){ //getHeadFlagAndMergeDir() == getMsgFlagAndMergeDir()
                 activate();
             } else{ // already set up
                 // if headMergeDir are not the same
@@ -459,8 +460,9 @@
      */
     public void updateApexEdges(){
         KmerAndDirWritable deleteEdge = incomingMsg.getApexMap().get(getVertexId());
-        if(deleteEdge != null && getVertexValue().getEdgeList(deleteEdge.getDeleteDir()).contains(deleteEdge.getDeleteKmer())) //avoid to delete twice
-            getVertexValue().getEdgeList(deleteEdge.getDeleteDir()).remove(deleteEdge.getDeleteKmer());
+        EDGETYPE deleteEdgeType = EDGETYPE.fromByte(deleteEdge.getDeleteDir());
+        if(deleteEdge != null && getVertexValue().getEdgeList(deleteEdgeType).contains(deleteEdge.getDeleteKmer())) //avoid to delete twice
+            getVertexValue().getEdgeList(deleteEdgeType).remove(deleteEdge.getDeleteKmer());
         processFinalUpdate2();
         getVertexValue().setState(MessageFlag.IS_HALT);
         voteToHalt();
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P4ForPathMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P4ForPathMergeVertex.java
index 4ae0d42..dba03fe 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P4ForPathMergeVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P4ForPathMergeVertex.java
@@ -7,14 +7,11 @@
 import edu.uci.ics.genomix.config.GenomixJobConf;
 import edu.uci.ics.genomix.pregelix.client.Client;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
-import edu.uci.ics.genomix.pregelix.io.VertexValueWritable.State;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable.P4State;
 import edu.uci.ics.genomix.pregelix.io.message.PathMergeMessageWritable;
 import edu.uci.ics.genomix.pregelix.operator.aggregator.StatisticsAggregator;
-import edu.uci.ics.genomix.pregelix.type.StatisticsCounter;
 import edu.uci.ics.genomix.type.NodeWritable.DIR;
-import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
-import edu.uci.ics.genomix.type.NodeWritable.IncomingListFlag;
-import edu.uci.ics.genomix.type.NodeWritable.OutgoingListFlag;
+import edu.uci.ics.genomix.type.NodeWritable.EDGETYPE;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
 
 /**
@@ -25,6 +22,8 @@
 public class P4ForPathMergeVertex extends
     BasicPathMergeVertex<VertexValueWritable, PathMergeMessageWritable> {
     
+//    private static final Logger LOG = Logger.getLogger(P4ForPathMergeVertex.class.getName());
+    
     private static long randSeed = 1; //static for save memory
     private float probBeingRandomHead = -1;
     private Random randGenerator = null;
@@ -37,8 +36,8 @@
     private boolean curHead;
     private boolean nextHead;
     private boolean prevHead;
-    private byte nextDir;
-    private byte prevDir;
+    private EDGETYPE nextEdgetype;
+    private EDGETYPE prevEdgetype;
     
     /**
      * initiate kmerSize, maxIteration
@@ -52,10 +51,6 @@
             outgoingMsg = new PathMergeMessageWritable();
         else
             outgoingMsg.reset();
-        if(aggregatingMsg == null)
-            aggregatingMsg = new PathMergeMessageWritable();
-        else
-            aggregatingMsg.reset();
         if(destVertexId == null)
             destVertexId = new VKmerBytesWritable();
         randSeed = Long.parseLong(getContext().getConfiguration().get(GenomixJobConf.PATHMERGE_RANDOM_RANDSEED)); // also can use getSuperstep(), because it is better to debug under deterministically random
@@ -81,58 +76,30 @@
         counters.clear();
         getVertexValue().getCounters().clear();
     }
-
+    
     protected boolean isNodeRandomHead(VKmerBytesWritable nodeKmer) {
         // "deterministically random", based on node id
         randGenerator.setSeed((randSeed ^ nodeKmer.hashCode()) * 10000 * getSuperstep());//randSeed + nodeID.hashCode()
         for(int i = 0; i < 500; i++)
             randGenerator.nextFloat();
-        return randGenerator.nextFloat() < probBeingRandomHead;
+        boolean isHead = randGenerator.nextFloat() < probBeingRandomHead;
+//        LOG.info("randomHead: " + nodeKmer + "=" + isHead);
+        return isHead;
     }
     
     /**
-     * checks if there is a valid, mergeable neighbor in the given direction.  sets next/prev Kmer and next/prev Head to the valid neighbor's values
-     */
-    protected boolean setNeighbor(VertexValueWritable value, DIR direction) {
-    	byte headState = direction == DIR.PREVIOUS ? State.HEAD_CAN_MERGEWITHNEXT : State.HEAD_CAN_MERGEWITHPREV;
-    	int degree = direction == DIR.PREVIOUS ? value.inDegree() : value.outDegree();
-        if(getHeadMergeDir() == headState)
-            return false;
-        if (degree != 1)
-        	throw new IllegalStateException("Node is not HEAD_CANMERGE but has degree of " + degree + " in " + direction + " direction\n" + value);
-        if (isTandemRepeat(value))
-        	throw new IllegalStateException("Node is tandem repeat but is trying to send update message! " + value);
-        
-        byte[] dirs = direction == DIR.PREVIOUS ? IncomingListFlag.values : OutgoingListFlag.values;
-        for(byte dir : dirs){
-            if(value.getEdgeList(dir).getCountOfPosition() > 0){
-            	if (direction == DIR.NEXT) {
-	                nextKmer = value.getEdgeList(dir).get(0).getKey(); 
-	                nextHead = isNodeRandomHead(nextKmer);
-	                return true;
-            	} else {
-            		prevKmer = value.getEdgeList(dir).get(0).getKey(); 
-	                prevHead = isNodeRandomHead(prevKmer);
-	                return true;
-            	}
-            }
-        }
-        throw new IllegalStateException("outdegree apparently 0? but not HEAD_CAN_MERGEWITHPREV..." + value.outDegree() + "\n" + value);
-    }
-    
-    /**
-     * checks if there is a valid, mergeable neighbor in the given direction.  sets hasNext/Prev, next/prevDir, Kmer and Head
+     * checks if there is a valid, mergeable neighbor in the given direction.  sets hasNext/Prev, next/prevEdgetype, Kmer and Head
      */
     protected void checkNeighbors() {
         VertexValueWritable vertex = getVertexValue();
         EnumSet<DIR> restrictedDirs = DIR.enumSetFromByte(vertex.getState());
         // NEXT restricted by neighbor or by my edges? 
-        if (restrictedDirs.contains(DIR.NEXT) || vertex.outDegree() != 1) {
+        if (restrictedDirs.contains(DIR.NEXT) || vertex.outDegree() != 1) { // TODO should I restrict based on degree in the first iteration?
             hasNext = false;
         } else {
             hasNext = true;
-            nextDir = vertex.getEdgeList(DirectionFlag.DIR_FF).getCountOfPosition() > 0 ? DirectionFlag.DIR_FF : DirectionFlag.DIR_FR; 
-            nextKmer = vertex.getEdgeList(nextDir).get(0).getKey();
+            nextEdgetype = vertex.getEdgetypeFromDir(DIR.NEXT); //getEdgeList(EDGETYPE.FF).getCountOfPosition() > 0 ? EDGETYPE.FF : EDGETYPE.FR; 
+            nextKmer = vertex.getEdgeList(nextEdgetype).get(0).getKey();
             nextHead = isNodeRandomHead(nextKmer);
         }
 
@@ -141,35 +108,30 @@
             hasPrev = false;
         } else {
             hasPrev = true;
-            prevDir = vertex.getEdgeList(DirectionFlag.DIR_RF).getCountOfPosition() > 0 ? DirectionFlag.DIR_RF : DirectionFlag.DIR_RR; 
-            prevKmer = vertex.getEdgeList(prevDir).get(0).getKey();
+            prevEdgetype = vertex.getEdgetypeFromDir(DIR.PREVIOUS); //vertex.getEdgeList(EDGETYPE.RF).getCountOfPosition() > 0 ? EDGETYPE.RF : EDGETYPE.RR; 
+            prevKmer = vertex.getEdgeList(prevEdgetype).get(0).getKey();
             prevHead = isNodeRandomHead(prevKmer);
         }
     }
     
-    /**
-     * step1 : sendUpdates
-     */
-    public void sendUpdates(){
+    public void chooseMergeDir() {
         //initiate merge_dir
-        setStateAsNoMerge();
+        setMerge(P4State.NO_MERGE);
         
-        // only PATH vertices are present. Find the ID's for my neighbors
         curKmer = getVertexId();
         curHead = isNodeRandomHead(curKmer);
-        
-        // the headFlag and tailFlag's indicate if the node is at the beginning or end of a simple path. 
-        // We prevent merging towards non-path nodes
         checkNeighbors();
-        DIR mergeDir = null;
-        if (hasNext || hasPrev) {
+        
+        if (!hasNext && !hasPrev) { // TODO check if logic for previous updates is the same as here (just look at internal flags?)
+            voteToHalt();  // this node can never merge (restricted by neighbors or my structure)
+        } else {
             if (curHead) {
                 if (hasNext && !nextHead) {
                     // compress this head to the forward tail
-                    mergeDir = DIR.NEXT;
+                    setMerge((byte) (nextEdgetype.get() | P4State.MERGE));
                 } else if (hasPrev && !prevHead) {
                     // compress this head to the reverse tail
-                    mergeDir = DIR.PREVIOUS;
+                    setMerge((byte) (prevEdgetype.get() | P4State.MERGE));
                 } 
             }
             else {
@@ -178,95 +140,46 @@
                      if ((!nextHead && !prevHead) && (curKmer.compareTo(nextKmer) < 0 && curKmer.compareTo(prevKmer) < 0)) {
                         // tails on both sides, and I'm the "local minimum"
                         // compress me towards the tail in forward dir
-                        mergeDir = DIR.NEXT;
+                        setMerge((byte) (nextEdgetype.get() | P4State.MERGE));
                     }
                 } else if (!hasPrev) {
                     // no previous node
                     if (!nextHead && curKmer.compareTo(nextKmer) < 0) {
                         // merge towards tail in forward dir
-                        mergeDir = DIR.NEXT;
+                        setMerge((byte) (nextEdgetype.get() | P4State.MERGE));
                     }
                 } else if (!hasNext) {
                     // no next node
                     if (!prevHead && curKmer.compareTo(prevKmer) < 0) {
                         // merge towards tail in reverse dir
-                        mergeDir = DIR.PREVIOUS;
+                        setMerge((byte) (prevEdgetype.get() | P4State.MERGE));
                     }
                 }
             }
-        }  // TODO else voteToHalt (when I combine steps 2 and 3)
-        if(mergeDir != null){
-            setStateAsMergeDir(mergeDir);
-            sendUpdateMsg(isP4, revert(mergeDir));
-            this.activate();
         }
-    }
-    
-    /**
-     * step2: receiveUpdates
-     */
-    public void receiveUpdates(Iterator<PathMergeMessageWritable> msgIterator){
-        //update neighber
-        while (msgIterator.hasNext()) {
-            incomingMsg = msgIterator.next();
-            processUpdate(incomingMsg);
-        }
-        checkNeighbors();
-        if (!hasNext && !hasPrev)
-            voteToHalt();
-        else
-            activate();
-    }
-    
-    /**
-     * step4: processMerges 
-     */
-    public void receiveMerges(Iterator<PathMergeMessageWritable> msgIterator){
-        //merge tmpKmer
-        while (msgIterator.hasNext()) {
-            incomingMsg = msgIterator.next();
-            /** process merge **/
-            processMerge(incomingMsg);
-            // set statistics counter: Num_MergedNodes
-            updateStatisticsCounter(StatisticsCounter.Num_MergedNodes);
-            /** if it's a tandem repeat, which means detecting cycle **/
-            if(isTandemRepeat(getVertexValue())){
-                short state = getVertexValue().getState(); 
-                state |= (short) (DIR.NEXT.get() | DIR.PREVIOUS.get());
-                getVertexValue().setState(state);
-                // set statistics counter: Num_Cycles
-                updateStatisticsCounter(StatisticsCounter.Num_Cycles); 
-                voteToHalt();
-            }
-            /** head meets head, stop **/ 
-            checkNeighbors();
-            if (!hasNext && !hasPrev){
-                // set statistics counter: Num_MergedPaths
-                updateStatisticsCounter(StatisticsCounter.Num_MergedPaths);
-                voteToHalt();
-            }else{
-                activate();
-            }
-            getVertexValue().setCounters(counters);
-        }
+//        if ((getVertexValue().getState() & P4State.MERGE) == 0) {
+//            LOG.info("No merge for " + getVertexId());
+//        } else {
+//            LOG.info("Merge from " + getVertexId() + " towards " + (getVertexValue().getState() & DirectionFlag.DIR_MASK) + "; node is " + getVertexValue());
+//        }
     }
     
     @Override
     public void compute(Iterator<PathMergeMessageWritable> msgIterator) {
         initVertex();
-        if (getSuperstep() == 1)
+            
+        if (getSuperstep() == 1) {
             restrictNeighbors();
-        else if (getSuperstep() % 2 == 0){
+        } else if (getSuperstep() % 2 == 0) {
             if (getSuperstep() == 2)
                 recieveRestrictions(msgIterator);
             else
                 receiveMerges(msgIterator);
-            
-            sendUpdates();
-        }
-        else if (getSuperstep() % 2 == 1){
+            chooseMergeDir();
+            updateNeighbors();
+        } else if (getSuperstep() % 2 == 1) {
             receiveUpdates(msgIterator);
-            sendMergeMsg(isP4);
+            sendMergeMsg();
         }
     }
 
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/removelowcoverage/RemoveLowCoverageVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/removelowcoverage/RemoveLowCoverageVertex.java
index cef3131..0696a53 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/removelowcoverage/RemoveLowCoverageVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/removelowcoverage/RemoveLowCoverageVertex.java
@@ -5,12 +5,14 @@
 import java.util.Iterator;
 import java.util.Set;
 
+import edu.uci.ics.genomix.config.GenomixJobConf;
 import edu.uci.ics.genomix.pregelix.client.Client;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
 import edu.uci.ics.genomix.pregelix.io.message.MessageWritable;
 import edu.uci.ics.genomix.pregelix.operator.BasicGraphCleanVertex;
 import edu.uci.ics.genomix.pregelix.operator.aggregator.StatisticsAggregator;
 import edu.uci.ics.genomix.pregelix.type.StatisticsCounter;
+import edu.uci.ics.genomix.type.NodeWritable.EDGETYPE;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
 
 /**
@@ -29,7 +31,9 @@
      */
     @Override
     public void initVertex() {
-        super.initVertex();
+        super.initVertex(); 
+        if (minAverageCoverage < 0)
+            minAverageCoverage = Float.parseFloat(getContext().getConfiguration().get(GenomixJobConf.REMOVE_LOW_COVERAGE_MAX_COVERAGE));
         if(incomingMsg == null)
             incomingMsg = new MessageWritable();
         if(outgoingMsg == null)
@@ -38,11 +42,6 @@
             outgoingMsg.reset();
         if(destVertexId == null)
             destVertexId = new VKmerBytesWritable();
-        if(fakeVertex == null){
-            fakeVertex = new VKmerBytesWritable();
-            String random = generaterRandomString(kmerSize + 1);
-            fakeVertex.setByRead(kmerSize + 1, random.getBytes(), 0); 
-        }
         if(getSuperstep() == 1)
             StatisticsAggregator.preGlobalCounters.clear();
 //        else
@@ -51,32 +50,42 @@
         getVertexValue().getCounters().clear();
     }
     
+    public void detectLowCoverageVertex(){
+        if(getVertexValue().getAvgCoverage() <= minAverageCoverage){
+            //broadcase kill self
+            broadcastKillself();
+            deadNodeSet.add(new VKmerBytesWritable(getVertexId()));
+        }
+    }
+    
+    public void cleanupDeadVertex(){
+        deleteVertex(getVertexId());
+        //set statistics counter: Num_RemovedLowCoverageNodes
+        updateStatisticsCounter(StatisticsCounter.Num_RemovedLowCoverageNodes);
+        getVertexValue().setCounters(counters);
+    }
+    
+    public void responseToDeadVertex(Iterator<MessageWritable> msgIterator){
+        while(msgIterator.hasNext()){
+            incomingMsg = msgIterator.next();
+            //response to dead node
+            EDGETYPE deadToMeEdgetype = EDGETYPE.fromByte(incomingMsg.getFlag());
+            getVertexValue().getEdgeList(deadToMeEdgetype).remove(incomingMsg.getSourceVertexId());
+        }
+    }
+    
     @Override
     public void compute(Iterator<MessageWritable> msgIterator) {
         initVertex(); 
-        if(getSuperstep() == 1){
-            if(getVertexValue().getAvgCoverage() <= minAverageCoverage){
-                broadcaseReallyKillself();
-                deadNodeSet.add(new VKmerBytesWritable(getVertexId()));
-            }
+        if(getSuperstep() == 1)
+            detectLowCoverageVertex();
+        else if(getSuperstep() == 2){
+            if(deadNodeSet.contains(getVertexId()))
+                cleanupDeadVertex();
             else
-                voteToHalt();
-        } else if(getSuperstep() == 2){
-            if(deadNodeSet.contains(getVertexId())){
-                deleteVertex(getVertexId());
-                //set statistics counter: Num_RemovedLowCoverageNodes
-                updateStatisticsCounter(StatisticsCounter.Num_RemovedLowCoverageNodes);
-                getVertexValue().setCounters(counters);
-            }
-            else{
-                while(msgIterator.hasNext()){
-                    incomingMsg = msgIterator.next();
-                    if(isResponseKillMsg())
-                        responseToDeadVertex();
-                }
-            }
-            voteToHalt();
+                responseToDeadVertex(msgIterator);
         } 
+        voteToHalt();
     }
     
     public static void main(String[] args) throws Exception {
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/scaffolding/BFSTraverseVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/scaffolding/BFSTraverseVertex.java
index ad85a90..74629d4 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/scaffolding/BFSTraverseVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/scaffolding/BFSTraverseVertex.java
@@ -8,10 +8,10 @@
 import edu.uci.ics.genomix.pregelix.io.message.BFSTraverseMessageWritable;
 import edu.uci.ics.genomix.pregelix.operator.BasicGraphCleanVertex;
 import edu.uci.ics.genomix.pregelix.type.EdgeDirs;
-import edu.uci.ics.genomix.pregelix.type.MessageFlag;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
 import edu.uci.ics.genomix.type.VKmerListWritable;
 import edu.uci.ics.genomix.type.NodeWritable.DIR;
+import edu.uci.ics.genomix.type.NodeWritable.EDGETYPE;
 
 public class BFSTraverseVertex extends
     BasicGraphCleanVertex<VertexValueWritable, BFSTraverseMessageWritable> {
@@ -86,54 +86,54 @@
         kmerList.append(getVertexId());
         outgoingMsg.setPathList(kmerList);
         outgoingMsg.setReadId(incomingMsg.getReadId()); //only one readId
-        byte meToNeighborDir = (byte) (incomingMsg.getFlag() & MessageFlag.DIR_MASK);
-        byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+        EDGETYPE meToNeighborDir = EDGETYPE.fromByte(incomingMsg.getFlag());
+        EDGETYPE neighborToMeDir = meToNeighborDir.mirror(); 
         /** set edgeDirs **/
         setEdgeDirs(meToNeighborDir, neighborToMeDir);
         switch(neighborToMeDir){
-            case MessageFlag.DIR_FF:
-            case MessageFlag.DIR_FR:
+            case FF:
+            case FR:
                 sendSettledMsgs(DIR.PREVIOUS ,getVertexValue());
                 break;
-            case MessageFlag.DIR_RF:
-            case MessageFlag.DIR_RR:
+            case RF:
+            case RR:
                 sendSettledMsgs(DIR.NEXT, getVertexValue());
                 break;
         }
     }
     
-    public void setEdgeDirs(byte meToNeighborDir, byte neighborToMeDir){
+    public void setEdgeDirs(EDGETYPE meToNeighborDir, EDGETYPE neighborToMeDir){
         edgeDirsList.clear();
         edgeDirsList.addAll(incomingMsg.getEdgeDirsList());
         if(edgeDirsList.isEmpty()){ //first time from srcNode
             /** set srcNode's next dir **/
             edgeDirs.reset();
-            edgeDirs.setNextToMeDir(meToNeighborDir);
+            edgeDirs.setNextToMeDir(meToNeighborDir.get());
             edgeDirsList.add(new EdgeDirs(edgeDirs)); 
             /** set curNode's prev dir **/
             edgeDirs.reset();
-            edgeDirs.setPrevToMeDir(neighborToMeDir);
+            edgeDirs.setPrevToMeDir(neighborToMeDir.get());
             edgeDirsList.add(new EdgeDirs(edgeDirs));
         } else {
             /** set preNode's next dir **/
             edgeDirs.set(edgeDirsList.get(edgeDirsList.size() - 1));
-            edgeDirs.setNextToMeDir(meToNeighborDir);
+            edgeDirs.setNextToMeDir(meToNeighborDir.get());
             edgeDirsList.set(edgeDirsList.size() - 1, new EdgeDirs(edgeDirs));
             /** set curNode's prev dir **/
             edgeDirs.reset();
-            edgeDirs.setPrevToMeDir(neighborToMeDir);
+            edgeDirs.setPrevToMeDir(neighborToMeDir.get());
             edgeDirsList.add(new EdgeDirs(edgeDirs));
         }
         outgoingMsg.setEdgeDirsList(edgeDirsList);
     }
     
     public boolean isValidDestination(){
-        byte meToNeighborDir = (byte) (incomingMsg.getFlag() & MessageFlag.DIR_MASK);
-        byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+        EDGETYPE meToNeighborDir = EDGETYPE.fromByte(incomingMsg.getFlag());
+        EDGETYPE neighborToMeDir = meToNeighborDir.mirror(); 
         if(incomingMsg.isDestFlip())
-            return neighborToMeDir == MessageFlag.DIR_RF || neighborToMeDir == MessageFlag.DIR_RR;
+            return neighborToMeDir == EDGETYPE.RF || neighborToMeDir == EDGETYPE.RR;
         else
-            return neighborToMeDir == MessageFlag.DIR_FF || neighborToMeDir == MessageFlag.DIR_FR;
+            return neighborToMeDir == EDGETYPE.FF || neighborToMeDir == EDGETYPE.FR;
     }
     
     public void sendMsgToPathNodeToAddCommondReadId(){
@@ -164,8 +164,8 @@
         kmerList.setCopy(incomingMsg.getPathList());
         kmerList.append(getVertexId());
         incomingMsg.setPathList(kmerList);
-        byte meToNeighborDir = (byte) (incomingMsg.getFlag() & MessageFlag.DIR_MASK);
-        byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+        EDGETYPE meToNeighborDir = EDGETYPE.fromByte(incomingMsg.getFlag());
+        EDGETYPE neighborToMeDir = meToNeighborDir.mirror();
         setEdgeDirs(meToNeighborDir, neighborToMeDir);
         incomingMsg.setEdgeDirsList(outgoingMsg.getEdgeDirsList());
     }
@@ -176,12 +176,12 @@
         byte prevToMeDir = incomingMsg.getEdgeDirsList().get(0).getPrevToMeDir();
         tmpKmer.setAsCopy(incomingMsg.getPathList().getPosition(0));
         if(tmpKmer.getKmerLetterLength() != 0)
-            getVertexValue().getEdgeList(prevToMeDir).getReadIDs(tmpKmer).appendReadId(readId);
+            getVertexValue().getEdgeList(EDGETYPE.fromByte(prevToMeDir)).getReadIDs(tmpKmer).appendReadId(readId);
         //set readId to next edge
         byte nextToMeDir = incomingMsg.getEdgeDirsList().get(0).getNextToMeDir();
         tmpKmer.setAsCopy(incomingMsg.getPathList().getPosition(1));
         if(tmpKmer.getKmerLetterLength() != 0)
-            getVertexValue().getEdgeList(nextToMeDir).getReadIDs(tmpKmer).appendReadId(readId);
+            getVertexValue().getEdgeList(EDGETYPE.fromByte(nextToMeDir)).getReadIDs(tmpKmer).appendReadId(readId);
     }
     
     @Override
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/splitrepeat/SplitRepeatVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/splitrepeat/SplitRepeatVertex.java
index 2bbe758..c00078c 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/splitrepeat/SplitRepeatVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/splitrepeat/SplitRepeatVertex.java
@@ -11,10 +11,10 @@
 import edu.uci.ics.genomix.pregelix.io.message.SplitRepeatMessageWritable;
 import edu.uci.ics.genomix.pregelix.operator.BasicGraphCleanVertex;
 import edu.uci.ics.genomix.pregelix.operator.aggregator.StatisticsAggregator;
-import edu.uci.ics.genomix.pregelix.type.MessageFlag;
 import edu.uci.ics.genomix.pregelix.type.StatisticsCounter;
 import edu.uci.ics.genomix.type.EdgeListWritable;
 import edu.uci.ics.genomix.type.EdgeWritable;
+import edu.uci.ics.genomix.type.NodeWritable.EDGETYPE;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
 import edu.uci.ics.pregelix.api.graph.Vertex;
 import edu.uci.ics.pregelix.api.util.BspUtils;
@@ -28,20 +28,20 @@
     BasicGraphCleanVertex<VertexValueWritable, SplitRepeatMessageWritable>{
     
     public class EdgeAndDir{
-        private byte dir;
+        private EDGETYPE edgeType;
         private EdgeWritable edge;
         
         public EdgeAndDir(){
-            dir = 0;
+            edgeType = null;
             edge = new EdgeWritable();
         }
 
-        public byte getDir() {
-            return dir;
+        public EDGETYPE getDir() {
+            return edgeType;
         }
 
-        public void setDir(byte dir) {
-            this.dir = dir;
+        public void setDir(EDGETYPE dir) {
+            this.edgeType = dir;
         }
 
         public EdgeWritable getEdge() {
@@ -174,11 +174,11 @@
         deletedEdge.setReadIDs(neighborEdgeIntersection);
         outgoingMsg.setDeletedEdge(deletedEdge);
         
-        outgoingMsg.setFlag(incomingEdgeDir);
+        outgoingMsg.setFlag(incomingEdgeType.get());
         destVertexId.setAsCopy(incomingEdge.getKey());
         sendMsg(destVertexId, outgoingMsg);
         
-        outgoingMsg.setFlag(outgoingEdgeDir);
+        outgoingMsg.setFlag(outgoingEdgeType.get());
         destVertexId.setAsCopy(outgoingEdge.getKey());
         sendMsg(destVertexId, outgoingMsg);
     }
@@ -199,15 +199,15 @@
     }
     
     public void deleteEdgeFromOldVertex(EdgeAndDir deleteEdge){
-        getVertexValue().getEdgeList(deleteEdge.dir).removeSubEdge(deleteEdge.getEdge());
+        getVertexValue().getEdgeList(deleteEdge.edgeType).removeSubEdge(deleteEdge.getEdge());
     }
     
     public void updateEdgeListPointToNewVertex(){
-        byte meToNeighborDir = (byte) (incomingMsg.getFlag() & MessageFlag.VERTEX_MASK);
-        byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+        EDGETYPE meToNeighborDir = EDGETYPE.fromByte(incomingMsg.getFlag());//(byte) (incomingMsg.getFlag() & MessageFlag.VERTEX_MASK);
+        EDGETYPE neighborToMeDir = meToNeighborDir.mirror();
         
         getVertexValue().getEdgeList(neighborToMeDir).removeSubEdge(incomingMsg.getDeletedEdge());
-        getVertexValue().getEdgeList(neighborToMeDir).add(incomingMsg.getCreatedEdge());
+        getVertexValue().getEdgeList(neighborToMeDir).add(new EdgeWritable(incomingMsg.getCreatedEdge()));
     }
     
     @Override
@@ -216,47 +216,47 @@
         if(getSuperstep() == 1){
             if(getVertexValue().getDegree() > 2){
                 deletedEdges.clear();
-                /** process connectedTable **/
+                // process connectedTable
                 for(int i = 0; i < 4; i++){
-                    /** set edgeList and edgeDir based on connectedTable **/
-                    setEdgeListAndEdgeDir(i);
+                    // set edgeList and edgeType based on connectedTable
+                    setEdgeListAndEdgeType(i);
                     
                     for(EdgeWritable incomingEdge : incomingEdgeList){
                         for(EdgeWritable outgoingEdge : outgoingEdgeList){
-                            /** set neighborEdge readId intersection **/
+                            // set neighborEdge readId intersection
                             setNeighborEdgeIntersection(incomingEdge, outgoingEdge);
                             
                             if(!neighborEdgeIntersection.isEmpty()){
-                                /** random generate vertexId of new vertex **/
+                                // random generate vertexId of new vertex
                                 randomGenerateVertexId(3);
                                 
-                                /** change incomingEdge/outgoingEdge's edgeList to commondReadIdSet **/
+                                // change incomingEdge/outgoingEdge's edgeList to commondReadIdSet
                                 tmpIncomingEdge.setAsCopy(incomingEdge);
                                 tmpOutgoingEdge.setAsCopy(outgoingEdge);
                                 tmpIncomingEdge.setReadIDs(neighborEdgeIntersection);
                                 tmpOutgoingEdge.setReadIDs(neighborEdgeIntersection);
                                 
-                                /** create new/created vertex **/
+                                // create new/created vertex 
                                 createNewVertex(i, tmpIncomingEdge, tmpOutgoingEdge);
                                 //set statistics counter: Num_SplitRepeats
                                 updateStatisticsCounter(StatisticsCounter.Num_SplitRepeats);
                                 getVertexValue().setCounters(counters);
                                 
-                                /** send msg to neighbors to update their edges to new vertex **/
+                                // send msg to neighbors to update their edges to new vertex 
                                 sendMsgToUpdateEdge(tmpIncomingEdge, tmpOutgoingEdge);
                                 
-                                /** store deleted edge **/
+                                // store deleted edge
                                 storeDeletedEdge(i, tmpIncomingEdge, tmpOutgoingEdge, neighborEdgeIntersection);
                             }
                         }
                     }                
                 }
-                /** delete extra edges from old vertex **/
+                // delete extra edges from old vertex
                 for(EdgeAndDir deletedEdge : deletedEdges){
                     deleteEdgeFromOldVertex(deletedEdge);
                 }
                 
-                /** Old vertex delete or voteToHalt **/
+                // Old vertex delete or voteToHalt 
                 if(getVertexValue().getDegree() == 0)//if no any edge, delete
                     deleteVertex(getVertexId());
                 else
@@ -265,7 +265,7 @@
         } else if(getSuperstep() == 2){
             while(msgIterator.hasNext()){
                 incomingMsg = msgIterator.next();
-                /** update edgelist to new/created vertex **/
+                // update edgelist to new/created vertex
                 updateEdgeListPointToNewVertex();
             }
             voteToHalt();
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/TipAddVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/TipAddVertex.java
index 8b3ee23..09be8e5 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/TipAddVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/TipAddVertex.java
@@ -6,6 +6,7 @@
 
 import edu.uci.ics.genomix.type.EdgeListWritable;
 import edu.uci.ics.genomix.type.EdgeWritable;
+import edu.uci.ics.genomix.type.NodeWritable.EDGETYPE;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
 import edu.uci.ics.pregelix.api.graph.Vertex;
 import edu.uci.ics.pregelix.api.job.PregelixJob;
@@ -16,38 +17,10 @@
 import edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
 import edu.uci.ics.genomix.pregelix.io.message.MessageWritable;
-import edu.uci.ics.genomix.pregelix.type.MessageFlag;
 
-/*
- * vertexId: BytesWritable
- * vertexValue: ByteWritable
- * edgeValue: NullWritable
- * message: MessageWritable
- * 
- * DNA:
- * A: 00
- * C: 01
- * G: 10
- * T: 11
- * 
- * succeed node
- *  A 00000001 1
- *  G 00000010 2
- *  C 00000100 4
- *  T 00001000 8
- * precursor node
- *  A 00010000 16
- *  G 00100000 32
- *  C 01000000 64
- *  T 10000000 128
- *  
- * For example, ONE LINE in input file: 00,01,10    0001,0010,
- * That means that vertexId is ACG, its succeed node is A and its precursor node is C.
- * The succeed node and precursor node will be stored in vertexValue and we don't use edgeValue.
- * The details about message are in edu.uci.ics.pregelix.example.io.MessageWritable. 
- */
 /**
- *  Remove tip or single node when l > constant
+ * @author anbangx
+ * Add tip 
  */
 public class TipAddVertex extends
         Vertex<VKmerBytesWritable, VertexValueWritable, NullWritable, MessageWritable> {
@@ -55,7 +28,7 @@
    
     private VKmerBytesWritable splitNode = new VKmerBytesWritable("CTA");
     private VKmerBytesWritable insertedTip = new VKmerBytesWritable("AGC");
-    private byte tipToSplitDir = MessageFlag.DIR_RF;
+    private EDGETYPE tipToSplitDir = EDGETYPE.FR;
     /**
      * initiate kmerSize, length
      */
@@ -66,7 +39,7 @@
     }
     
     @SuppressWarnings({ "unchecked", "rawtypes" })
-    public void insertTip(byte dir, EdgeListWritable edgeList, VKmerBytesWritable insertedTip){
+    public void insertTip(EDGETYPE dir, EdgeListWritable edgeList, VKmerBytesWritable insertedTip){
         Vertex vertex = (Vertex) BspUtils.createVertex(getContext().getConfiguration());
         vertex.getMsgList().clear();
         vertex.getEdges().clear();
@@ -94,7 +67,7 @@
         return edgeList;
     }
     
-    public void addEdgeToInsertedTip(byte dir, VKmerBytesWritable insertedTip){
+    public void addEdgeToInsertedTip(EDGETYPE dir, VKmerBytesWritable insertedTip){
         EdgeWritable newEdge = new EdgeWritable();
         newEdge.setKey(insertedTip);
         newEdge.appendReadID(0);
@@ -102,24 +75,6 @@
     }
     
     /**
-     * Returns the edge dir for B->A when the A->B edge is type @dir
-     */
-    public byte mirrorDirection(byte dir) {
-        switch (dir) {
-            case MessageFlag.DIR_FF:
-                return MessageFlag.DIR_RR;
-            case MessageFlag.DIR_FR:
-                return MessageFlag.DIR_FR;
-            case MessageFlag.DIR_RF:
-                return MessageFlag.DIR_RF;
-            case MessageFlag.DIR_RR:
-                return MessageFlag.DIR_FF;
-            default:
-                throw new RuntimeException("Unrecognized direction in flipDirection: " + dir);
-        }
-    }
-    
-    /**
      * create a new vertex point to split node
      */
     @Override
@@ -130,7 +85,7 @@
                 /** add edge pointing to insertedTip **/
                 addEdgeToInsertedTip(tipToSplitDir, insertedTip);
                 /** insert tip **/
-                byte splitToTipDir = mirrorDirection(tipToSplitDir);
+                EDGETYPE splitToTipDir = tipToSplitDir.mirror();
                 insertTip(splitToTipDir, getEdgeListFromKmer(splitNode), insertedTip);
             }
         }
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/TipRemoveVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/TipRemoveVertex.java
index d0c3a51..deff7db 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/TipRemoveVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/TipRemoveVertex.java
@@ -8,8 +8,9 @@
 import edu.uci.ics.genomix.pregelix.operator.BasicGraphCleanVertex;
 import edu.uci.ics.genomix.pregelix.operator.aggregator.StatisticsAggregator;
 import edu.uci.ics.genomix.pregelix.type.StatisticsCounter;
-import edu.uci.ics.genomix.pregelix.util.VertexUtil;
+import edu.uci.ics.genomix.type.NodeWritable.EDGETYPE;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
+import edu.uci.ics.genomix.type.NodeWritable.DIR;
 
 /**
  * Remove tip or single node when l > constant
@@ -41,44 +42,58 @@
         counters.clear();
         getVertexValue().getCounters().clear();
     }
-
+    
+    /**
+     * detect the tip and figure out what edgeType neighborToTip is
+     */
+    public EDGETYPE getTipEdgetype(){
+        VertexValueWritable vertex = getVertexValue();
+        if(vertex.getDegree(DIR.PREVIOUS) == 0 && vertex.getDegree(DIR.NEXT) == 1){ //INCOMING TIP
+            return vertex.getEdgetypeFromDir(DIR.NEXT);
+        } else if(vertex.getDegree(DIR.PREVIOUS) == 1 && vertex.getDegree(DIR.NEXT) == 0){ //OUTGOING TIP
+            return vertex.getEdgetypeFromDir(DIR.PREVIOUS);
+        } else
+            return null;
+    }
+    
+    /**
+     * step1
+     */
+    public void detectTip(){
+        EDGETYPE neighborToTipEdgetype = getTipEdgetype();
+        //I'm tip and my length is less than the minimum
+        if(neighborToTipEdgetype != null && getVertexValue().getKmerLength() <= length){ 
+            EDGETYPE tipToNeighborEdgetype = neighborToTipEdgetype.mirror();
+            outgoingMsg.setFlag(tipToNeighborEdgetype.get());
+            outgoingMsg.setSourceVertexId(getVertexId());
+            destVertexId = getDestVertexId(neighborToTipEdgetype.dir());
+            sendMsg(destVertexId, outgoingMsg);
+            deleteVertex(getVertexId());
+            
+            //set statistics counter: Num_RemovedTips
+            updateStatisticsCounter(StatisticsCounter.Num_RemovedTips);
+            getVertexValue().setCounters(counters);
+        }
+    }
+    
+    /**
+     * step2
+     */
+    public void responseToDeadTip(Iterator<MessageWritable> msgIterator){
+        while(msgIterator.hasNext()){
+            incomingMsg = msgIterator.next();
+            EDGETYPE tipToMeEdgetype = EDGETYPE.fromByte(incomingMsg.getFlag());
+            getVertexValue().getEdgeList(tipToMeEdgetype).remove(incomingMsg.getSourceVertexId());
+        }
+    }
+    
     @Override
     public void compute(Iterator<MessageWritable> msgIterator) {
         initVertex(); 
-        if(getSuperstep() == 1){
-            if(VertexUtil.isIncomingTipVertex(getVertexValue())){
-            	if(getVertexValue().getKmerLength() <= length){
-            	    sendSettledMsgToNextNode();
-            		deleteVertex(getVertexId());
-                    //set statistics counter: Num_RemovedTips
-                    updateStatisticsCounter(StatisticsCounter.Num_RemovedTips);
-                    getVertexValue().setCounters(counters);
-            	}
-            }
-            else if(VertexUtil.isOutgoingTipVertex(getVertexValue())){
-                if(getVertexValue().getKmerLength() <= length){
-                    sendSettledMsgToPrevNode();
-                    deleteVertex(getVertexId());
-                    //set statistics counter: Num_RemovedTips
-                    updateStatisticsCounter(StatisticsCounter.Num_RemovedTips);
-                    getVertexValue().setCounters(counters);
-                }
-            }
-            else if(VertexUtil.isSingleVertex(getVertexValue())){
-                if(getVertexValue().getKmerLength() <= length){
-                    deleteVertex(getVertexId());
-                    //set statistics counter: Num_RemovedTips
-                    updateStatisticsCounter(StatisticsCounter.Num_RemovedTips);
-                    getVertexValue().setCounters(counters);
-                }
-            }
-        }
-        else if(getSuperstep() == 2){
-        	while(msgIterator.hasNext()){
-        		incomingMsg = msgIterator.next();
-        		responseToDeadVertex();
-        	}
-        }
+        if(getSuperstep() == 1)
+            detectTip();
+        else if(getSuperstep() == 2)
+            responseToDeadTip(msgIterator);
         voteToHalt();
     }
 
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/unrolltandemrepeat/UnrollTandemRepeat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/unrolltandemrepeat/UnrollTandemRepeat.java
index 0820011..390e5fe 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/unrolltandemrepeat/UnrollTandemRepeat.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/unrolltandemrepeat/UnrollTandemRepeat.java
@@ -1,5 +1,6 @@
 package edu.uci.ics.genomix.pregelix.operator.unrolltandemrepeat;
 
+import java.util.EnumSet;
 import java.util.Iterator;
 
 import edu.uci.ics.genomix.pregelix.client.Client;
@@ -7,12 +8,11 @@
 import edu.uci.ics.genomix.pregelix.io.message.MessageWritable;
 import edu.uci.ics.genomix.pregelix.operator.BasicGraphCleanVertex;
 import edu.uci.ics.genomix.pregelix.operator.aggregator.StatisticsAggregator;
-import edu.uci.ics.genomix.pregelix.type.MessageFlag;
 import edu.uci.ics.genomix.pregelix.type.StatisticsCounter;
 import edu.uci.ics.genomix.pregelix.util.VertexUtil;
 import edu.uci.ics.genomix.type.EdgeWritable;
+import edu.uci.ics.genomix.type.NodeWritable.EDGETYPE;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
-import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
 
 /**
  * Graph clean pattern: Unroll TandemRepeat
@@ -21,6 +21,7 @@
  */
 public class UnrollTandemRepeat extends
     BasicGraphCleanVertex<VertexValueWritable, MessageWritable>{
+    
     private EdgeWritable tmpEdge = new EdgeWritable();
     
     /**
@@ -50,15 +51,15 @@
      */
     public boolean repeatCanBeMerged(){
         tmpValue.setAsCopy(getVertexValue());
-        tmpValue.getEdgeList(repeatDir).remove(repeatKmer);
+        tmpValue.getEdgeList(repeatEdgetype).remove(repeatKmer);
         boolean hasFlip = false;
-        /** pick one edge and flip **/
-        for(byte d : DirectionFlag.values){
-            for(EdgeWritable edge : tmpValue.getEdgeList(d)){
-                byte flipDir = flipDir(d);
+        // pick one edge and flip 
+        for(EDGETYPE et : EnumSet.allOf(EDGETYPE.class)){
+            for(EdgeWritable edge : tmpValue.getEdgeList(et)){
+                EDGETYPE flipDir = et.flip();
                 tmpValue.getEdgeList(flipDir).add(edge);
-                tmpValue.getEdgeList(d).remove(edge);
-                /** setup hasFlip to go out of the loop **/
+                tmpValue.getEdgeList(et).remove(edge);
+                // setup hasFlip to go out of the loop 
                 hasFlip = true;
                 break;
             }
@@ -77,17 +78,17 @@
      * merge tandem repeat
      */
     public void mergeTandemRepeat(){
-        getVertexValue().getInternalKmer().mergeWithKmerInDir(repeatDir, kmerSize, getVertexId());
-        getVertexValue().getEdgeList(repeatDir).remove(getVertexId());
+        getVertexValue().getInternalKmer().mergeWithKmerInDir(repeatEdgetype, kmerSize, getVertexId());
+        getVertexValue().getEdgeList(repeatEdgetype).remove(getVertexId());
         boolean hasFlip = false;
         /** pick one edge and flip **/
-        for(byte d : DirectionFlag.values){
-            for(EdgeWritable edge : getVertexValue().getEdgeList(d)){
-                byte flipDir = flipDir(d);
+        for(EDGETYPE et : EnumSet.allOf(EDGETYPE.class)){
+            for(EdgeWritable edge : getVertexValue().getEdgeList(et)){
+                EDGETYPE flipDir = et.flip();
                 getVertexValue().getEdgeList(flipDir).add(edge);
-                getVertexValue().getEdgeList(d).remove(edge);
+                getVertexValue().getEdgeList(et).remove(edge);
                 /** send flip message to node for updating edgeDir **/
-                outgoingMsg.setFlag(flipDir);
+                outgoingMsg.setFlag(flipDir.get());
                 outgoingMsg.setSourceVertexId(getVertexId());
                 sendMsg(edge.getKey(), outgoingMsg);
                 /** setup hasFlip to go out of the loop **/
@@ -103,9 +104,9 @@
      * update edges
      */
     public void updateEdges(){
-        byte flipDir = flipDir((byte)(incomingMsg.getFlag() & MessageFlag.DEAD_MASK));
-        byte prevNeighborToMe = mirrorDirection(flipDir);
-        byte curNeighborToMe = mirrorDirection((byte)(incomingMsg.getFlag() & MessageFlag.DEAD_MASK));
+        EDGETYPE flipDir = EDGETYPE.fromByte(incomingMsg.getFlag()); 
+        EDGETYPE prevNeighborToMe = flipDir.mirror();
+        EDGETYPE curNeighborToMe = flipDir.mirror(); //mirrorDirection((byte)(incomingMsg.getFlag() & MessageFlag.DEAD_MASK));
         tmpEdge.setAsCopy(getVertexValue().getEdgeList(prevNeighborToMe).getEdge(incomingMsg.getSourceVertexId()));
         getVertexValue().getEdgeList(prevNeighborToMe).remove(incomingMsg.getSourceVertexId());
         getVertexValue().getEdgeList(curNeighborToMe).add(tmpEdge);
@@ -117,8 +118,8 @@
         if(getSuperstep() == 1){
             if(isTandemRepeat(getVertexValue()) && repeatCanBeMerged()){
                 mergeTandemRepeat();
-                //set statistics counter: Num_RemovedTips
-                updateStatisticsCounter(StatisticsCounter.Num_RemovedTips);
+                //set statistics counter: Num_TandemRepeats
+                updateStatisticsCounter(StatisticsCounter.Num_TandemRepeats);
                 getVertexValue().setCounters(counters);
             }
             voteToHalt();
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/MessageFlag.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/MessageFlag.java
index 7cc8c1d..7905718 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/MessageFlag.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/MessageFlag.java
@@ -15,8 +15,13 @@
     
     public static final byte[] values = { DIR_FF, DIR_FR, DIR_RF, DIR_RR };
     
-    public static final short UNCHANGE = 0b0 << 8;
+    public static final short UNCHANGE = 0b0 << 7;
     public static final short UPDATE = 0b01 << 7; //reuse 0b0 << 6, becasue UNCHANGE and UPDATE use for different patterns
+    public static final short MSG_TYPE_MASK = 0b1 << 7;
+    public static final short MSG_TYPE_CLEAR = 0b111111110111111;
+    
+//    public static final short UNCHANGE = 0b0 << 8;
+//    public static final short UPDATE = 0b01 << 7; //reuse 0b0 << 6, becasue UNCHANGE and UPDATE use for different patterns
     public static final short KILL = 0b1 << 8;
     public static final short KILL_MASK = 0b1 << 8;
     
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobGen/JobGenerator.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobGen/JobGenerator.java
index a40e52b..e50cbc6 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobGen/JobGenerator.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobGen/JobGenerator.java
@@ -21,6 +21,7 @@
 import edu.uci.ics.genomix.pregelix.operator.bridgeremove.BridgeRemoveVertex;
 import edu.uci.ics.genomix.pregelix.operator.bubblemerge.BubbleAddVertex;
 import edu.uci.ics.genomix.pregelix.operator.bubblemerge.BubbleMergeVertex;
+import edu.uci.ics.genomix.pregelix.operator.pathmerge.P0ForPathMergeVertex;
 import edu.uci.ics.genomix.pregelix.operator.pathmerge.P1ForPathMergeVertex;
 import edu.uci.ics.genomix.pregelix.operator.pathmerge.P2ForPathMergeVertex;
 import edu.uci.ics.genomix.pregelix.operator.pathmerge.MapReduceVertex;
@@ -71,6 +72,23 @@
         generateMapReduceGraphJob("MapReduceGraph", outputBase + "MapReduceGraph.xml");
     }
     
+    private static void generateP0ForMergeGraphJob(String jobName, String outputPath) throws IOException {
+        PregelixJob job = new PregelixJob(new GenomixJobConf(3), jobName);
+        job.setVertexClass(P0ForPathMergeVertex.class);
+        job.setGlobalAggregatorClass(StatisticsAggregator.class);
+        job.setVertexInputFormatClass(InitialGraphCleanInputFormat.class);
+        job.setVertexOutputFormatClass(GraphCleanOutputFormat.class);
+        job.setDynamicVertexValueSize(true);
+        job.setOutputKeyClass(VKmerBytesWritable.class);
+        job.setOutputValueClass(VertexValueWritable.class);
+        job.getConfiguration().writeXml(new FileOutputStream(new File(outputPath)));
+    }
+
+    private static void genP0ForMergeGraph() throws IOException {
+        generateP0ForMergeGraphJob("P0ForMergeGraph", outputBase
+                + "P0ForMergeGraph.xml");
+    }
+    
     private static void generateP1ForMergeGraphJob(String jobName, String outputPath) throws IOException {
         PregelixJob job = new PregelixJob(new GenomixJobConf(3), jobName);
         job.setVertexClass(P1ForPathMergeVertex.class);
@@ -329,6 +347,7 @@
         FileUtils.forceMkdir(new File(outputBase));
         genUnrollTandemRepeatGraph();
         genMapReduceGraph();
+        genP0ForMergeGraph();
         genP1ForMergeGraph();
         genP2ForMergeGraph();
         genP4ForMergeGraph();
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/PathMergeTestSuite.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/PathMergeTestSuite.java
index 84635a0..e52e0c2 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/PathMergeTestSuite.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/PathMergeTestSuite.java
@@ -6,7 +6,7 @@
 
     public static Test suite() throws Exception {
         String pattern ="PathMerge"; 
-        String testSet[] = {"9", "SimpleTreePath", "RingPath", "ThreeNodesCycle", "CyclePath", "P2_8", "ComplexTandemRepeat", "SimpleTreePath"
+        String testSet[] = {"4"//"9", "SimpleTreePath", "RingPath", "ThreeNodesCycle", "CyclePath", "P2_8", "ComplexTandemRepeat", "SimpleTreePath"
 //                "2", "3", "4", "5", "6", "7", "8",
 //                "9", "head_6", "head_7",
 //                "P2_3", "P2_4", "P2_5", "P2_6", "P2_7", "P2_8",
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/TipRemoveTestSuite.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/TipRemoveTestSuite.java
index 81dc9ba..eb4a099 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/TipRemoveTestSuite.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/TipRemoveTestSuite.java
@@ -6,7 +6,7 @@
 
     public static Test suite() throws Exception {
         String pattern ="TipRemove";
-        String testSet[] = {"SmallGenome", "FR_Tip", "RF_Tip"};
+        String testSet[] = {"FR_Tip", "RF_Tip"};
         init(pattern, testSet);
         BasicGraphCleanTestSuite testSuite = new BasicGraphCleanTestSuite();
         return makeTestSuite(testSuite);
diff --git a/genomix/genomix-pregelix/src/test/resources/conf/logging.properties b/genomix/genomix-pregelix/src/test/resources/conf/logging.properties
index 1055652..0564c07 100644
--- a/genomix/genomix-pregelix/src/test/resources/conf/logging.properties
+++ b/genomix/genomix-pregelix/src/test/resources/conf/logging.properties
@@ -16,12 +16,11 @@
 # By default we only configure a ConsoleHandler, which will only
 # show messages at the INFO and above levels.
 
-handlers= java.util.logging.ConsoleHandler
+#handlers= java.util.logging.ConsoleHandler
 
 # To also add the FileHandler, use the following line instead.
 
-#handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler
-#handlers= java.util.logging.FileHandler
+handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler
 
 # Default global logging level.
 # This specifies which kinds of events are logged across
@@ -42,19 +41,17 @@
 
 # default file output is in user's home directory.
 
-# java.util.logging.FileHandler.pattern = logs/genomix-pregelix-tests.log
-# java.util.logging.FileHandler.limit = 0
+java.util.logging.FileHandler.pattern = pregelix.log
+# java.util.logging.FileHandler.limit = 50000
 # java.util.logging.FileHandler.count = 1
-# java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter
 # java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
-# java.util.logging.FileHandler.formatter = edu.uci.ics.genomix.pregelix.log.PathMergeLogFormatter
-# java.util.logging.FileHandler.level = FINE
+ java.util.logging.FileHandler.formatter = edu.uci.ics.genomix.pregelix.log.PathMergeLogFormatter
+java.util.logging.FileHandler.level = FINE
 
 # Limit the message that are printed on the console to FINE and above.
 
 java.util.logging.ConsoleHandler.level = INFO
 java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
-#java.util.logging.ConsoleHandler.formatter = java.util.logging.XMLFormatter
 
 
 ############################################################
@@ -65,8 +62,8 @@
 # For example, set the com.xyz.foo logger to only log SEVERE
 # messages:
 
-#edu.uci.ics.genomix.pregelix.level = FINE
+edu.uci.ics.genomix.pregel.level = FINE
 #edu.uci.ics.asterix.level = FINE
 #edu.uci.ics.algebricks.level = FINE
-#edu.uci.ics.hyracks.level = SEVERE
+edu.uci.ics.hyracks.level = SEVERE
 #edu.uci.ics.hyracks.control.nc.net.level = FINE
diff --git a/genomix/genomix-pregelix/src/test/resources/log4j.properties b/genomix/genomix-pregelix/src/test/resources/log4j.properties
deleted file mode 100755
index d5e6004..0000000
--- a/genomix/genomix-pregelix/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,94 +0,0 @@
-# Define some default values that can be overridden by system properties
-hadoop.root.logger=FATAL,console
-hadoop.log.dir=.
-hadoop.log.file=hadoop.log
-
-# Define the root logger to the system property "hadoop.root.logger".
-log4j.rootLogger=${hadoop.root.logger}, EventCounter
-
-# Logging Threshold
-log4j.threshhold=FATAL
-
-#
-# Daily Rolling File Appender
-#
-
-log4j.appender.DRFA=org.apache.log4j.DailyRollingFileAppender
-log4j.appender.DRFA.File=${hadoop.log.dir}/${hadoop.log.file}
-
-# Rollver at midnight
-log4j.appender.DRFA.DatePattern=.yyyy-MM-dd
-
-# 30-day backup
-#log4j.appender.DRFA.MaxBackupIndex=30
-log4j.appender.DRFA.layout=org.apache.log4j.PatternLayout
-
-# Pattern format: Date LogLevel LoggerName LogMessage
-log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n
-# Debugging Pattern format
-#log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} (%F:%M(%L)) - %m%n
-
-
-#
-# console
-# Add "console" to rootlogger above if you want to use this 
-#
-
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n
-
-#
-# TaskLog Appender
-#
-
-#Default values
-hadoop.tasklog.taskid=null
-hadoop.tasklog.noKeepSplits=4
-hadoop.tasklog.totalLogFileSize=100
-hadoop.tasklog.purgeLogSplits=true
-hadoop.tasklog.logsRetainHours=12
-
-log4j.appender.TLA=org.apache.hadoop.mapred.TaskLogAppender
-log4j.appender.TLA.taskId=${hadoop.tasklog.taskid}
-log4j.appender.TLA.totalLogFileSize=${hadoop.tasklog.totalLogFileSize}
-
-log4j.appender.TLA.layout=org.apache.log4j.PatternLayout
-log4j.appender.TLA.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n
-
-#
-# Rolling File Appender
-#
-
-#log4j.appender.RFA=org.apache.log4j.RollingFileAppender
-#log4j.appender.RFA.File=${hadoop.log.dir}/${hadoop.log.file}
-
-# Logfile size and and 30-day backups
-#log4j.appender.RFA.MaxFileSize=1MB
-#log4j.appender.RFA.MaxBackupIndex=30
-
-#log4j.appender.RFA.layout=org.apache.log4j.PatternLayout
-#log4j.appender.RFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} - %m%n
-#log4j.appender.RFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} (%F:%M(%L)) - %m%n
-
-#
-# FSNamesystem Audit logging
-# All audit events are logged at INFO level
-#
-log4j.logger.org.apache.hadoop.fs.FSNamesystem.audit=WARN
-
-# Custom Logging levels
-
-#log4j.logger.org.apache.hadoop.mapred.JobTracker=DEBUG
-#log4j.logger.org.apache.hadoop.mapred.TaskTracker=DEBUG
-#log4j.logger.org.apache.hadoop.fs.FSNamesystem=DEBUG
-
-# Jets3t library
-log4j.logger.org.jets3t.service.impl.rest.httpclient.RestS3Service=ERROR
-
-#
-# Event Counter Appender
-# Sends counts of logging messages at different severity levels to Hadoop Metrics.
-#
-log4j.appender.EventCounter=org.apache.hadoop.metrics.jvm.EventCounter
diff --git a/genomix/genomix-pregelix/src/test/resources/logging.properties b/genomix/genomix-pregelix/src/test/resources/logging.properties
deleted file mode 100644
index 0ed3dfc..0000000
--- a/genomix/genomix-pregelix/src/test/resources/logging.properties
+++ /dev/null
@@ -1,67 +0,0 @@
-############################################################
-#  	Default Logging Configuration File
-#
-# You can use a different file by specifying a filename
-# with the java.util.logging.config.file system property.  
-# For example java -Djava.util.logging.config.file=myfile
-############################################################
-
-############################################################
-#  	Global properties
-############################################################
-
-# "handlers" specifies a comma separated list of log Handler 
-# classes.  These handlers will be installed during VM startup.
-# Note that these classes must be on the system classpath.
-# By default we only configure a ConsoleHandler, which will only
-# show messages at the INFO and above levels.
-
-handlers= java.util.logging.ConsoleHandler
-
-# To also add the FileHandler, use the following line instead.
-
-# handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler
-
-# Default global logging level.
-# This specifies which kinds of events are logged across
-# all loggers.  For any given facility this global level
-# can be overriden by a facility specific level
-# Note that the ConsoleHandler also has a separate level
-# setting to limit messages printed to the console.
-
-.level= SEVERE
-# .level= INFO
-# .level= FINE
-# .level = FINEST
-
-############################################################
-# Handler specific properties.
-# Describes specific configuration info for Handlers.
-############################################################
-
-# default file output is in user's home directory.
-
-# java.util.logging.FileHandler.pattern = %h/java%u.log
-# java.util.logging.FileHandler.limit = 50000
-# java.util.logging.FileHandler.count = 1
-# java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter
-
-# Limit the message that are printed on the console to FINE and above.
-
-java.util.logging.ConsoleHandler.level = FINEST
-java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
-
-
-############################################################
-# Facility specific properties.
-# Provides extra control for each logger.
-############################################################
-
-# For example, set the com.xyz.foo logger to only log SEVERE
-# messages:
-
-edu.uci.ics.genomix.pregelix = INFO
-#edu.uci.ics.asterix.level = FINE
-#edu.uci.ics.algebricks.level = FINE
-edu.uci.ics.hyracks.level = SEVERE
-#edu.uci.ics.hyracks.control.nc.net.level = FINE
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/src/test/resources/only_PathMerge.txt b/genomix/genomix-pregelix/src/test/resources/only_PathMerge.txt
index 3d007d2..437ae6e 100644
--- a/genomix/genomix-pregelix/src/test/resources/only_PathMerge.txt
+++ b/genomix/genomix-pregelix/src/test/resources/only_PathMerge.txt
@@ -1 +1 @@
-P4ForMergeGraph.xml
+P0ForMergeGraph.xml