<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def fix_report(self, report, errors="drop", prefer="before"):
 """Perform utc assignment on all readings in a report. The returned report will have all reading timestamps in UTC. This only works on SignedListReport objects. Note that the report should typically have previously been added to the UTC assigner using add_report or no reference points from the report will be used. Args: report (SignedListReport):
 The report that we should fix. errors (str):
 The behavior that we should have when we can't fix a given reading. The only currently support behavior is drop, which means that the reading will be dropped and not included in the new report. prefer (str):
 Whether to prefer fixing readings by looking for reference points after the reading or before, all other things being equal. See the description of ``assign_utc``. Returns: SignedListReport: The report with UTC timestamps. """


        if not isinstance(report, SignedListReport):
            raise ArgumentError("Report must be a SignedListReport", report=report)

        if errors not in ('drop',):
            raise ArgumentError("Unknown errors handler: {}, supported=['drop']".format(errors))

        self.ensure_prepared()

        fixed_readings = []
        dropped_readings = 0

        for reading in report.visible_readings:
            assignment = self.assign_utc(reading.reading_id, reading.raw_time, prefer=prefer)

            if assignment is None:
                dropped_readings += 1
                continue

            fixed_reading = IOTileReading(assignment.rtc_value, reading.stream, reading.value,
                                          reading_time=assignment.utc, reading_id=reading.reading_id)
            fixed_readings.append(fixed_reading)

        fixed_report = SignedListReport.FromReadings(report.origin, fixed_readings, report_id=report.report_id,
                                                     selector=report.streamer_selector, streamer=report.origin_streamer,
                                                     sent_timestamp=report.sent_timestamp)
        fixed_report.received_time = report.received_time

        if dropped_readings > 0:
            self._logger.warning("Dropped %d readings of %d when fixing UTC timestamps in report 0x%08X for device 0x%08X",
                                 dropped_readings, len(report.visible_readings), report.report_id, report.origin)

        return fixed_report