code: function getQMarkPaths(apath, paths) {
    var qi = apath.indexOf('?') //returns first occuring index
      , i = qi
      , prev
  
    if (qi === -1) { //recursion has finished
      paths.push(apath)
      return paths
    }
    //take away ? mark and recursively add paths to support more than 1 qmark.
    while (apath.charAt(--i) !== '/')
      ;
  
    paths.push(apath.slice(0, i)) //add current matching path without qmark and without ending '/'
    return getQMarkPaths(apath.slice(0, qi) + apath.slice(qi+1), paths) //remove current ? mark in question, and reapply logic to next potential ?mark
  }
docs: /*
  gather array of potential paths, may include '?' may not
  @param {string} path
  @return {array} of potential paths
  
  this function works based on the assumption that if the latter question mark routes match
  then the earlier question marks in the route are assumed to be matching as well, therefore we can remove the ?marks
  this function continually adds the path preceding the earliest ?mark into the paths array,
  stripping the ?mark, and reapplying the same logic to the rest of the string