<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def urls(self, key, value):
 """Populate the ``8564`` MARC field. Also populate the ``FFT`` field through side effects. """

    def _is_preprint(value):
        return value.get('y', '').lower() == 'preprint'

    def _is_fulltext(value):
        return value['u'].endswith('.pdf') and value['u'].startswith('http://cds.cern.ch')

    def _is_local_copy(value):
        return 'local copy' in value.get('y', '')

    def _is_ignored_domain(value):
        ignored_domains = ['http://cdsweb.cern.ch', 'http://cms.cern.ch',
                           'http://cmsdoc.cern.ch', 'http://documents.cern.ch',
                           'http://preprints.cern.ch', 'http://cds.cern.ch',
                           'http://arxiv.org']
        return any(value['u'].startswith(domain) for domain in ignored_domains)

    field_8564 = self.get('8564_', [])
    field_FFT = self.get('FFT__', [])

    if 'u' not in value:
        return field_8564

    url = escape_url(value['u'])

    if _is_fulltext(value) and not _is_preprint(value):
        if _is_local_copy(value):
            description = value.get('y', '').replace('local copy', 'on CERN Document Server')
            field_8564.append({
                'u': url,
                'y': description,
            })
        else:
            _, file_name = os.path.split(urllib.parse.urlparse(value['u']).path)
            _, extension = os.path.splitext(file_name)
            field_FFT.append({
                't': 'CDS',
                'a': url,
                'd': value.get('y', ''),
                'n': file_name,
                'f': extension,
            })
    elif not _is_ignored_domain(value):
        field_8564.append({
            'u': url,
            'y': value.get('y'),
        })

    self['FFT__'] = field_FFT
    return field_8564