'This is a very important method which is called in order to create
mutants. Usually called from fuzzer.py module.
:param fuzzable_param_list: Please note that in this case the user
specifies the chunk of the filename that
he wants to fuzz. Chunks:
foo.bar.html
0   1   2'

@classmethod
def create_mutants(cls, freq, mutant_str_list, fuzzable_param_list, append, fuzzer_config):

    if (not fuzzer_config['fuzz_url_filenames']):
        return []
    res = []
    fname = freq.get_url().get_file_name()
    fname_chunks = [x for x in CHUNK_RE.split(fname) if x]
    for (idx, fn_chunk) in enumerate(fname_chunks):
        if (not ((fuzzable_param_list == []) or (idx in fuzzable_param_list))):
            continue
        for mutant_str in mutant_str_list:
            if CHUNK_RE_2.match(fn_chunk):
                fname_token = ((fn_chunk if append else '') + mutant_str)
                fname_start = ''.join(fname_chunks[:idx])
                fname_end = ''.join(fname_chunks[(idx + 1):])
                url_parts_container = URLPartsContainer(fname_start, fname_token, fname_end)
                freq_copy = copy.deepcopy(freq)
                m = cls(freq_copy)
                m.set_dc(url_parts_container)
                res.append(m)
                freq_copy = copy.deepcopy(freq)
                m2 = cls(freq_copy)
                m2.set_dc(url_parts_container)
                m2.set_safe_encode_chars('/')
                if (m2.get_url() != m.get_url()):
                    res.append(m2)
    return res
