code: private static Shard createShardFromString(String str) {
      int first = str.indexOf("@");
      int second = str.indexOf("@", first + 1);
      long version = Long.parseLong(str.substring(0, first));
      String dir = str.substring(first + 1, second);
      long gen = Long.parseLong(str.substring(second + 1));
      return new Shard(version, dir, gen);
    }
docs: assume str is formatted correctly as a shard string