docs: def find_features(feats, sequ, annotated, start_pos, cutoff):
      """
      find_features - Finds the reference sequence features in the alignments and records the positions 
  
      :param feats: Dictonary of sequence features
      :type feats: ``dict``
      :param sequ: The sequence alignment for the input sequence
      :type sequ: ``List``
      :param annotated: dictonary of the annotated features
      :type annotated: ``dict``
      :param start_pos: Where the reference sequence starts
      :type start_pos: ``int``
      :param missing: List of the unmapped features
      :type missing: ``List``
      :param cutoff: The alignment cutoff
      :type cutoff: ``float``
      :param verbose: Flag for running in verbose mode.
      :type verbose: ``bool``
      :param verbosity: Numerical value to indicate how verbose the output will be in verbose mode.
      :type verbosity: ``int``
      :rtype: ``List``
      """
      feats_a = list(feats.keys())
  
      j = 0
      s = 0
      en = 0
      start = 0
      for i in range(0, len(sequ)):
          if j <= len(feats_a)-1:
              if i > int(feats[feats_a[j]].location.end):
                  j += 1
              if(sequ[i] == '-'):
                  if i == 0:
                      start += 1
                      en += 1
                      s = 1
                  else:
                      start += 1
                      en += 1
                      if s == 0:
                          start_val = feats[feats_a[j]].location.start
                          #if feats_a[j] == "five_prime_UTR":
                          #    start_val = 0
  
                          if((annotated == 0 and start_pos == 0
                              and cutoff < 0.9) or
                              (annotated == 0 and start_pos == 0
                               and st < 6)
                             or (start_pos == 0 and
                                 len(feats) == 1 and cutoff < .9)):
                              start_val = 0
  
                          else:
                              if feats_a[j] == 'five_prime_UTR':
                                  start_val = 0
  
                          feats[feats_a[j]] = SeqFeature(FeatureLocation(ExactPosition(start_val), ExactPosition(int(feats[feats_a[j]].location.end + 1)), strand=1), type=feats[feats_a[j]].type)
  
                          if j != len(feats_a):
                              for l in range(j+1, len(feats_a)):
                                  feats[feats_a[l]] = SeqFeature(FeatureLocation(ExactPosition(feats[feats_a[l]].location.start+1), ExactPosition(int(feats[feats_a[l]].location.end + 1)), strand=1), type=feats[feats_a[l]].type)
              else:
                  if s == 1:
                      st = feats[feats_a[j]].location.start + start
                      end = feats[feats_a[j]].location.end + en
  
                      start_val = st
                      if feats_a[j] != 'five_prime_UTR' and start_pos == 0:
                          if((annotated == 0 and start_pos == 0
                              and cutoff < 0.9) or
                              (annotated == 0 and start_pos == 0
                               and st < 6)
                             or (start_pos == 0 and
                                 len(feats) == 1 and cutoff < .9)):
                              start_val = 0
                      else:
                          if feats_a[j] == 'five_prime_UTR':
                              start_val = 0
  
                      feats[feats_a[j]] = SeqFeature(FeatureLocation(ExactPosition(start_val), ExactPosition(end), strand=1), type=feats[feats_a[j]].type)
                      if j != len(feats_a):
                          for l in range(j+1, len(feats_a)):     
                              feats[feats_a[l]] = SeqFeature(FeatureLocation(ExactPosition(feats[feats_a[l]].location.start+st), ExactPosition(int(feats[feats_a[l]].location.end + st)), strand=1), type=feats[feats_a[l]].type)
  
                      s = 0
      return feats