'Find the last page of the stream \'serial\'.
If the file is not multiplexed this function is fast. If it is,
it must read the whole the stream.
This finds the last page in the actual file object, or the last
page in the stream (with eos set), whichever comes first.
Returns None in case no page with the serial exists.
Raises error in case this isn\'t a valid ogg stream.
Raises IOError.'

@staticmethod
def find_last(fileobj, serial):

    seek_end(fileobj, (256 * 256))
    data = fileobj.read()
    try:
        index = data.rindex('OggS')
    except ValueError:
        raise error('unable    to    find    final    Ogg    header')
    bytesobj = cBytesIO(data[index:])
    best_page = None
    try:
        page = OggPage(bytesobj)
    except error:
        pass
    else:
        if (page.serial == serial):
            if page.last:
                return page
            else:
                best_page = page
        else:
            best_page = None
    fileobj.seek(0)
    try:
        page = OggPage(fileobj)
        while (not page.last):
            page = OggPage(fileobj)
            while (page.serial != serial):
                page = OggPage(fileobj)
            best_page = page
        return page
    except error:
        return best_page
    except EOFError:
        return best_page
