<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def parse_signed_by(content, canonicalize=True):
 """\ Returns a maybe empty iterable of signers of the cable. `content` The cable's content. `canonicalize` Indicates if the signers should be canonicalized (upper-case the string and remove typos) (enabled by default). """

    s = content[-300:]
    m = _SIGNER_PATTERN.search(s) or _SIGNER_PATTERN2.search(s)
    if not m:
        return []
    signers = m.group(1)
    tmp_signers = signers.upper()
    if tmp_signers in (u'CONFIDENTIAL', u'UNCLASSIFIED'):
        return []
    if canonicalize:
        tmp_signers = tuple(re.split(ur'\s+', tmp_signers.strip()))
        if tmp_signers == (u'KEEGANPAAL',): # 04TAIPEI3991
            signers = [u'KEEGAN', u'PAAL']
        elif tmp_signers == (u'JOHNSONKEANE',): # 05ASUNCION807
            signers = [u'JOHNSON', u'KEANE']
        elif tmp_signers == (u'STEWARTBALTIMORE',): # 06MUSCAT396
            signers = [u'STEWART', u'BALTIMORE']
        elif tmp_signers == (u'BIGUSBELL',): # 06KIRKUK112
            signers = [u'BIGUS', u'BELL']
        else:
            signers = tmp_signers
    else:
        signers = [signers]
    return [c14n.canonicalize_surname(s) for s in signers] if canonicalize else signers