From f32c39af9e8de318f2da15aded937cbce8fd487b Mon Sep 17 00:00:00 2001 From: tsteven4 <13596209+tsteven4@users.noreply.github.com> Date: Sat, 28 Sep 2024 13:02:47 -0600 Subject: [PATCH 01/17] fix Qt 6.8.0 deprecation warnings. Also, the exif writer now prefers to establish a timestamp from GPS_IFD_TAG_DATESTAMP/GPS_IFD_TAG_TIMESTAMP if they exist, as the exif reader does. --- dg-100.cc | 7 +++ exif.cc | 58 ++++++++++++++++++++++++- exif.h | 2 + garmin_gpi.cc | 7 +++ gdb.cc | 7 +++ globalsat_sport.cc | 4 ++ gpx.cc | 7 +++ gui/filterwidgets.cc | 27 +++++++++++- gui/upgrade.cc | 16 ++++--- igc.cc | 11 +++++ lowranceusr.cc | 7 +++ mtk_logger.cc | 7 +++ nmea.cc | 23 ++++++++++ reference/ricoh-rdc5300_offset.csv | 2 + reference/ricoh-rdc5300_offset.jpg.jpg | Bin 0 -> 87867 bytes skytraq.cc | 11 +++++ src/core/datetime.h | 7 +++ subrip.cc | 7 +++ testo.d/exif.test | 7 +++ trackfilter.cc | 15 +++++++ util.cc | 41 +++++++++++++++++ v900.cc | 7 +++ 22 files changed, 272 insertions(+), 8 deletions(-) create mode 100644 reference/ricoh-rdc5300_offset.csv create mode 100644 reference/ricoh-rdc5300_offset.jpg.jpg diff --git a/dg-100.cc b/dg-100.cc index 53bc50fd8..0906a98c8 100644 --- a/dg-100.cc +++ b/dg-100.cc @@ -43,6 +43,9 @@ #include // for QScopedArrayPointer #include // for QString #include // for QTime +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#include // for QTimeZone +#endif #include // for TextDate, UTC #include // for qPrintable @@ -109,7 +112,11 @@ Dg100Format::bintime2utc(int date, int time) date /= 100; int day = date; +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) + return QDateTime(QDate(year, mon, day), QTime(hour, min, sec), QTimeZone::UTC); +#else return QDateTime(QDate(year, mon, day), QTime(hour, min, sec), Qt::UTC); +#endif } void diff --git a/exif.cc b/exif.cc index c53a2db96..562396052 100644 --- a/exif.cc +++ b/exif.cc @@ -47,6 +47,9 @@ #include // for QString #include // for QTextCodec #include // for QTime +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#include // for QTimeZone +#endif #include // for QVariant #include // for QVector #include // for UTC, ISODate @@ -663,6 +666,20 @@ ExifFormat::exif_find_ifd(ExifApp* app, const uint16_t ifd_nr) return nullptr; } +ExifFormat::ExifTag* +ExifFormat::exif_find_tag(ExifIfd* ifd, const uint16_t tag_id) +{ + if (ifd != nullptr) { + for (auto& tag_instance : ifd->tags) { + ExifTag* tag = &tag_instance; + if (tag->id == tag_id) { + return tag; + } + } + } + return nullptr; +} + ExifFormat::ExifTag* ExifFormat::exif_find_tag(ExifApp* app, const uint16_t ifd_nr, const uint16_t tag_id) { @@ -678,6 +695,33 @@ ExifFormat::exif_find_tag(ExifApp* app, const uint16_t ifd_nr, const uint16_t ta return nullptr; } +QDateTime +ExifFormat::exif_get_gps_time(ExifApp* app) const +{ + QDateTime res; + + ExifIfd* gpsifd = exif_find_ifd(app, GPS_IFD); + if (gpsifd != nullptr) { + ExifTag* gpsdstag = exif_find_tag(gpsifd, GPS_IFD_TAG_DATESTAMP); + if (gpsdstag != nullptr) { + ExifTag* gpststag = exif_find_tag(gpsifd, GPS_IFD_TAG_TIMESTAMP); + if (gpststag != nullptr) { + QDate datestamp = exif_read_datestamp(gpsdstag); + QTime timestamp = exif_read_timestamp(gpststag); +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) + QDateTime gpstime = QDateTime(datestamp, timestamp, QTimeZone::UTC); +#else + QDateTime gpstime = QDateTime(datestamp, timestamp, Qt::UTC); +#endif + if (gpstime.isValid()) { + res = gpstime; + } + } + } + } + return res.toUTC(); +} + QDateTime ExifFormat::exif_get_exif_time(ExifApp* app) const { @@ -728,7 +772,12 @@ ExifFormat::exif_get_exif_time(ExifApp* app) const // Correct the date time by supplying the offset from UTC. int offset_hours = match.captured(1).append(match.captured(2)).toInt(); int offset_mins = match.captured(1).append(match.captured(3)).toInt(); +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) + res.setTimeZone(QTimeZone::fromSecondsAheadOfUtc(((offset_hours * 60) + offset_mins) * 60)); +#else res.setOffsetFromUtc(((offset_hours * 60) + offset_mins) * 60); +#endif +qDebug() << "using offset" << offset_hours << offset_mins << (offset_tag == nullptr); } else if (opt_offsettime) { // Only warn for user supplied offsets. // Offset tags may indicate the offset was unknown, e.g. " : ". @@ -912,7 +961,11 @@ ExifFormat::exif_waypt_from_exif_app(ExifApp* app) const } } +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) + gps_datetime = QDateTime(datestamp, timestamp, QTimeZone::UTC); +#else gps_datetime = QDateTime(datestamp, timestamp, Qt::UTC); +#endif if (gps_datetime.isValid()) { if (global_opts.debug_level >= 3) { printf(MYNAME "-GPSTimeStamp = %s\n", qPrintable(gps_datetime.toString(Qt::ISODateWithMs))); @@ -1476,7 +1529,10 @@ ExifFormat::wr_init(const QString& fname) exif_examine_app(exif_app_); gbfclose(fin_); - exif_time_ref = exif_get_exif_time(exif_app_); + exif_time_ref = exif_get_gps_time(exif_app_); + if (!exif_time_ref.isValid()) { + exif_time_ref = exif_get_exif_time(exif_app_); + } if (!exif_time_ref.isValid()) { fatal(MYNAME ": No valid timestamp found in picture!\n"); } diff --git a/exif.h b/exif.h index 2be58deda..e218bb2e5 100644 --- a/exif.h +++ b/exif.h @@ -171,7 +171,9 @@ class ExifFormat : public Format static void exif_read_app(ExifApp* app); static void exif_examine_app(ExifApp* app); static ExifIfd* exif_find_ifd(ExifApp* app, uint16_t ifd_nr); + static ExifTag* exif_find_tag(ExifIfd* ifd, const uint16_t tag_id); static ExifTag* exif_find_tag(ExifApp* app, uint16_t ifd_nr, uint16_t tag_id); + QDateTime exif_get_gps_time(ExifApp* app) const; QDateTime exif_get_exif_time(ExifApp* app) const; Waypoint* exif_waypt_from_exif_app(ExifApp* app) const; static Rational exif_dec2frac(double val, double tolerance); diff --git a/garmin_gpi.cc b/garmin_gpi.cc index 745f68c2f..15af3628f 100644 --- a/garmin_gpi.cc +++ b/garmin_gpi.cc @@ -28,6 +28,9 @@ #include // for QList #include // for QString, operator+, operator< #include // for QThread +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#include // for QTimeZone +#endif #include // for CaseInsensitive #include // for foreach, Q_UNUSED @@ -178,7 +181,11 @@ GarminGPIFormat::read_header() if (GPI_DBG) { time_t crdate = GPS_Math_Gtime_To_Utime(rdata->crdate); warning("crdate = %lld (%s)\n", (long long) rdata->crdate, +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) + CSTR(QDateTime::fromSecsSinceEpoch(crdate, QTimeZone::UTC).toString(Qt::ISODate))); +#else CSTR(QDateTime::fromSecsSinceEpoch(crdate, Qt::UTC).toString(Qt::ISODate))); +#endif } (void) gbfgetint16(fin); /* 0 */ diff --git a/gdb.cc b/gdb.cc index 67cd26aec..081d09af9 100644 --- a/gdb.cc +++ b/gdb.cc @@ -31,6 +31,9 @@ #include // for QDateTime #include // for QString, operator!=, operator== #include // for QTime +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#include // for QTimeZone +#endif #include // for CaseInsensitive #include // for Q_UNUSED, qPrintable, foreach @@ -1126,7 +1129,11 @@ GdbFormat::write_header() * This is our "Watermark" to show this file was created by GPSbabel. * The date/time used to be from CVS, and may be from git in the future. */ +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) + static const QDateTime gdb_release_dt = QDateTime(QDate(2011, 4, 14), QTime(1, 30, 1), QTimeZone::UTC); +#else static const QDateTime gdb_release_dt = QDateTime(QDate(2011, 4, 14), QTime(1, 30, 1), Qt::UTC); +#endif gdb_write_cstr(QStringLiteral("GPSBabel-%1").arg(gpsbabel_version)); gdb_write_cstr(gdb_release_dt.toString(u"MMM dd yyyy")); gdb_write_cstr(gdb_release_dt.toString(u"HH:mm:ss")); diff --git a/globalsat_sport.cc b/globalsat_sport.cc index 813586728..e147fca5d 100644 --- a/globalsat_sport.cc +++ b/globalsat_sport.cc @@ -529,7 +529,11 @@ GlobalsatSportFormat::track_read() if (timezn != nullptr) { gpsDateTime = gpsbabel::DateTime(QDateTime(gpsDate, gpsTime, *timezn).toUTC()); } else { +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) + gpsDateTime = gpsbabel::DateTime(QDateTime(gpsDate, gpsTime, QTimeZone::LocalTime).toUTC()); +#else gpsDateTime = gpsbabel::DateTime(QDateTime(gpsDate, gpsTime, Qt::LocalTime).toUTC()); +#endif } int laps_in_package = header.gh_laprec.LapIndex - header.gh_ptrec.Index + 1; diff --git a/gpx.cc b/gpx.cc index 96af32faa..1d133239d 100644 --- a/gpx.cc +++ b/gpx.cc @@ -40,6 +40,9 @@ #include // for QStringList #include // for QStringView #include // for QTime +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#include // for QTimeZone +#endif #include // for QVersionNumber #include // for QXmlStreamAttribute #include // for QXmlStreamAttributes @@ -517,7 +520,11 @@ xml_parse_time(const QString& dateTimeString) if (res > 0) { QDate date(year, mon, mday); QTime time(hour, min, sec); +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) + dt = QDateTime(date, time, QTimeZone::UTC); +#else dt = QDateTime(date, time, Qt::UTC); +#endif // Fractional part of time. if (fsec) { diff --git a/gui/filterwidgets.cc b/gui/filterwidgets.cc index 39426e171..9600149a9 100644 --- a/gui/filterwidgets.cc +++ b/gui/filterwidgets.cc @@ -30,6 +30,9 @@ #include // for QEvent, QEvent::LocaleChange #include // for QLabel #include // for QRadioButton +#if (QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)) +#include // for QTimeZone +#endif #include // for LocalTime, UTC @@ -75,17 +78,27 @@ TrackWidget::TrackWidget(QWidget* parent, TrackFilterData& tfd): FilterWidget(pa ui.startEdit->setDisplayFormat("dd MMM yyyy hh:mm:ss AP"); ui.stopEdit->setDisplayFormat("dd MMM yyyy hh:mm:ss AP"); - assert(tfd.startTime.timeSpec() == tfd.stopTime.timeSpec()); - assert((tfd.startTime.timeSpec() == Qt::UTC) || (tfd.startTime.timeSpec() == Qt::LocalTime)); // Qt5 QDateTimeEdit::setDateTime ignored the passed QDateTime::timeSpec. // Qt6 QDateTimeEdit::setDateTime will convert the passed QDateTime if the passed // QDateTime::timeSpec doesn't match QDateTimeEdit::timeSpec. // If the two timeSpecs match Qt5 and Qt6 behave the same. +#if (QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)) + assert(tfd.startTime.timeZone() == tfd.stopTime.timeZone()); + assert((tfd.startTime.timeZone() == QTimeZone::UTC) || (tfd.startTime.timeZone() == QTimeZone::LocalTime)); + ui.startEdit->setTimeZone(tfd.startTime.timeZone()); + ui.stopEdit->setTimeZone(tfd.stopTime.timeZone()); + // Make sure the initial state of the localTime and utc radio buttons + // is in agreement with the startTime::timeSpec and stopTime::timeSpec. + tfd.localTime = tfd.startTime.timeZone() == QTimeZone::LocalTime; +#else + assert(tfd.startTime.timeSpec() == tfd.stopTime.timeSpec()); + assert((tfd.startTime.timeSpec() == Qt::UTC) || (tfd.startTime.timeSpec() == Qt::LocalTime)); ui.startEdit->setTimeSpec(tfd.startTime.timeSpec()); ui.stopEdit->setTimeSpec(tfd.stopTime.timeSpec()); // Make sure the initial state of the localTime and utc radio buttons // is in agreement with the startTime::timeSpec and stopTime::timeSpec. tfd.localTime = tfd.startTime.timeSpec() == Qt::LocalTime; +#endif tfd.utc = !tfd.localTime; // Collect the data fields. @@ -188,11 +201,21 @@ void TrackWidget::splitDistanceX() void TrackWidget::TZX() { if (ui.localTime->isChecked()) { +#if (QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)) + ui.startEdit->setTimeZone(QTimeZone::LocalTime); + ui.stopEdit->setTimeZone(QTimeZone::LocalTime); +#else ui.startEdit->setTimeSpec(Qt::LocalTime); ui.stopEdit->setTimeSpec(Qt::LocalTime); +#endif } else { +#if (QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)) + ui.startEdit->setTimeZone(QTimeZone::UTC); + ui.stopEdit->setTimeZone(QTimeZone::UTC); +#else ui.startEdit->setTimeSpec(Qt::UTC); ui.stopEdit->setTimeSpec(Qt::UTC); +#endif } // Force update of Edit displays, so the displayed // datetimes are in sync with the specified time spec. diff --git a/gui/upgrade.cc b/gui/upgrade.cc index 73211c4cf..3009b6a72 100644 --- a/gui/upgrade.cc +++ b/gui/upgrade.cc @@ -262,14 +262,20 @@ void UpgradeCheck::httpRequestFinished(QNetworkReply* reply) QString oresponse(reply->readAll()); QDomDocument document; - int line = -1; - QString error_text; // This shouldn't ever be seen by a user. - if (!document.setContent(oresponse, &error_text, &line)) { +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) + if (auto result = document.setContent(oresponse); !result) { +#else + struct { + int errorLine{-1}; + QString errorMessage; + } result; + if (!document.setContent(oresponse, &result.errorMessage, &result.errorLine)) { +#endif QMessageBox::critical(nullptr, tr("Error"), tr("Invalid return data at line %1: %2.") - .arg(line) - .arg(error_text)); + .arg(result.errorLine) + .arg(result.errorMessage)); babelData_.upgradeErrors_++; replyId_ = nullptr; reply->deleteLater(); diff --git a/igc.cc b/igc.cc index 7ef925ee9..6026fd0c7 100644 --- a/igc.cc +++ b/igc.cc @@ -43,6 +43,9 @@ #include // for QString, operator+, QStringLiteral #include // for QStringList #include // for operator<, operator==, QTime +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#include // for QTimeZone +#endif #include // for UTC, SkipEmptyParts #include // for foreach, qPrintable @@ -162,7 +165,11 @@ void IgcFormat::TaskRecordReader::igc_task_rec(const char* rec) } else { year += 1900; } +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) + creation = QDateTime(QDate(year, month, day), QTime(hour, minute, second), QTimeZone::UTC); +#else creation = QDateTime(QDate(year, month, day), QTime(hour, minute, second), Qt::UTC); +#endif if (!creation.isValid()) { fatal(MYNAME ": bad date time\n%s\n", rec); } @@ -398,7 +405,11 @@ void IgcFormat::read() pres_wpt->fs.FsChainAdd(fsdata); } +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) + pres_wpt->SetCreationTime(QDateTime(date, tod, QTimeZone::UTC)); +#else pres_wpt->SetCreationTime(QDateTime(date, tod, Qt::UTC)); +#endif // Add the waypoint to the pressure altitude track if (pres_alt) { diff --git a/lowranceusr.cc b/lowranceusr.cc index 8e38e6f8a..6e8413793 100644 --- a/lowranceusr.cc +++ b/lowranceusr.cc @@ -105,6 +105,9 @@ #include // for QTextCodec, QTextCodec::IgnoreHeader #include // for QTextEncoder #include // for QTime +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#include // for QTimeZone +#endif #include // for CaseInsensitive, UTC #include // for qPrintable, uint, QAddConst<>::Type @@ -246,7 +249,11 @@ LowranceusrFormat::lowranceusr4_writestr(const QString& buf, gbfile* file, int b gpsbabel::DateTime LowranceusrFormat::lowranceusr4_get_timestamp(unsigned int jd_number, unsigned int msecs) { +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) + QDateTime qdt = QDateTime(QDate::fromJulianDay(jd_number), QTime(0, 0, 0), QTimeZone::UTC).addMSecs(msecs); +#else QDateTime qdt = QDateTime(QDate::fromJulianDay(jd_number), QTime(0, 0, 0), Qt::UTC).addMSecs(msecs); +#endif return qdt; } diff --git a/mtk_logger.cc b/mtk_logger.cc index ea7fcebbf..58baa12a0 100644 --- a/mtk_logger.cc +++ b/mtk_logger.cc @@ -71,6 +71,9 @@ #include // for QLatin1Char #include // for qMakeStringPrivate, QStringLiteral #include // for QThread +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#include // for QTimeZone +#endif #include // for qPrintable, UTC #include // for errno, ERANGE #include // for fabs @@ -839,7 +842,11 @@ int MtkLoggerBase::csv_line(gbfile* csvFile, int idx, unsigned long bmask, data_ , (itm->rcr&0x0004)?"D":"", (itm->rcr&0x0008)?"B":""); if (bmask & (1U<= QT_VERSION_CHECK(6, 5, 0)) + QDateTime dt = QDateTime::fromSecsSinceEpoch(itm->timestamp, QTimeZone::UTC); +#else QDateTime dt = QDateTime::fromSecsSinceEpoch(itm->timestamp, Qt::UTC); +#endif dt = dt.addMSecs(itm->timestamp_ms); QString timestamp = dt.toUTC().toString(u"yyyy/MM/dd,hh:mm:ss.zzz"); diff --git a/nmea.cc b/nmea.cc index f07d78b9f..6ce28ef00 100644 --- a/nmea.cc +++ b/nmea.cc @@ -37,6 +37,9 @@ #include // for hex #include // for QThread #include // for QTime +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#include // for QTimeZone +#endif #include // for UTC #include // for qPrintable, foreach @@ -324,14 +327,22 @@ void NmeaFormat::nmea_set_waypoint_time(Waypoint* wpt, QDateTime* prev, const QDate& date, const QTime& time) { if (date.isValid()) { +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) + wpt->SetCreationTime(QDateTime(date, time, QTimeZone::UTC)); +#else wpt->SetCreationTime(QDateTime(date, time, Qt::UTC)); +#endif if (wpt->wpt_flags.fmt_use != 0) { wpt->wpt_flags.fmt_use = 0; without_date--; } *prev = wpt->GetCreationTime(); } else if (prev->date().isValid()) { +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) + wpt->SetCreationTime(QDateTime(prev->date(), time, QTimeZone::UTC)); +#else wpt->SetCreationTime(QDateTime(prev->date(), time, Qt::UTC)); +#endif if (*prev > wpt->creation_time) { /* go over midnight ? */ wpt->creation_time = wpt->creation_time.addDays(1); @@ -342,7 +353,11 @@ NmeaFormat::nmea_set_waypoint_time(Waypoint* wpt, QDateTime* prev, const QDate& } *prev = wpt->GetCreationTime(); } else { +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) + wpt->SetCreationTime(QDateTime(QDate(), time, QTimeZone::UTC)); +#else wpt->SetCreationTime(QDateTime(QDate(), time, Qt::UTC)); +#endif if (wpt->wpt_flags.fmt_use == 0) { wpt->wpt_flags.fmt_use = 1; without_date++; @@ -639,7 +654,11 @@ NmeaFormat::gpzda_parse(const QString& ibuf) // The prev_datetime data member might be used by // nmea_fix_timestamps and nmea_set_waypoint_time. +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) + prev_datetime = QDateTime(date, time, QTimeZone::UTC); +#else prev_datetime = QDateTime(date, time, Qt::UTC); +#endif } } @@ -839,7 +858,11 @@ NmeaFormat::nmea_fix_timestamps(route_head* track) return; } +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) + QDateTime prev = QDateTime(opt_tm, QTime(0, 0), QTimeZone::UTC); +#else QDateTime prev = QDateTime(opt_tm, QTime(0, 0), Qt::UTC); +#endif foreach (Waypoint* wpt, track->waypoint_list) { diff --git a/reference/ricoh-rdc5300_offset.csv b/reference/ricoh-rdc5300_offset.csv new file mode 100644 index 000000000..df40637a9 --- /dev/null +++ b/reference/ricoh-rdc5300_offset.csv @@ -0,0 +1,2 @@ +No,Latitude,Longitude,Name,Speed,utc_d,utc_t +1,44.315150,15.265690,"ricoh-rdc5300",0.00,2000/05/31,21:50:40 diff --git a/reference/ricoh-rdc5300_offset.jpg.jpg b/reference/ricoh-rdc5300_offset.jpg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ad73a08e22b322e1b1bd2b58c671367fb1912fd8 GIT binary patch literal 87867 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 Ma11*dD5f+2**F;0T>t<8 literal 0 HcmV?d00001 diff --git a/skytraq.cc b/skytraq.cc index f6df657af..121591ba4 100644 --- a/skytraq.cc +++ b/skytraq.cc @@ -35,6 +35,9 @@ #include // for QChar #include // for QLatin1Char #include // for QThread +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#include // for QTimeZone +#endif #include // for qPrintable #include "defs.h" @@ -534,7 +537,11 @@ SkytraqBase::gpstime_to_qdatetime(int week, int sec) const int override = xstrtoi(opt_gps_utc_offset, nullptr, 10); if (override) { gps_timet -= override; +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) + return QDateTime::fromSecsSinceEpoch(gps_timet, QTimeZone::UTC); +#else return QDateTime::fromSecsSinceEpoch(gps_timet, Qt::UTC); +#endif } /* leap second compensation: */ @@ -557,7 +564,11 @@ SkytraqBase::gpstime_to_qdatetime(int week, int sec) const // Future: Consult http://maia.usno.navy.mil/ser7/tai-utc.dat // use http://www.stevegs.com/utils/jd_calc/ for Julian to UNIX sec +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) + return QDateTime::fromSecsSinceEpoch(gps_timet, QTimeZone::UTC); +#else return QDateTime::fromSecsSinceEpoch(gps_timet, Qt::UTC); +#endif } void diff --git a/src/core/datetime.h b/src/core/datetime.h index 579c50089..27057884e 100644 --- a/src/core/datetime.h +++ b/src/core/datetime.h @@ -28,6 +28,9 @@ #include #include +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#include +#endif #include // As this code began in C, we have several hundred places that set and @@ -54,7 +57,11 @@ class DateTime : public QDateTime // Qt::LocalTime compared to Qt::UTC on ubuntu bionic. // Note that these conversions can be required if the Qt::TimeSpec is // set to Qt:LocalTime after construction. +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) + DateTime() : QDateTime(QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC)) +#else DateTime() : QDateTime(QDateTime::fromMSecsSinceEpoch(0, Qt::UTC)) +#endif { } diff --git a/subrip.cc b/subrip.cc index ee6116b58..1be7db5d8 100644 --- a/subrip.cc +++ b/subrip.cc @@ -24,6 +24,9 @@ #include // for QDebug #include // for QString #include // for QTime +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#include // for QTimeZone +#endif #include // for UTC #include "defs.h" @@ -221,7 +224,11 @@ SubripFormat::wr_init(const QString& fname) fatal(FatalMsg().nospace() << MYNAME ": option gps_time value (" << opt_gpstime << ") is invalid. Expected hhmmss[.sss]"); } } +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) + gps_datetime = QDateTime(gps_date, gps_time, QTimeZone::UTC); +#else gps_datetime = QDateTime(gps_date, gps_time, Qt::UTC); +#endif } video_offset_ms = 0; diff --git a/testo.d/exif.test b/testo.d/exif.test index 26c39b29b..e0223af6a 100644 --- a/testo.d/exif.test +++ b/testo.d/exif.test @@ -26,3 +26,10 @@ cp ${REFERENCE}/ricoh-rdc5300.jpg ${TMPDIR}/ricoh-rdc5300.jpg gpsbabel -i unicsv -f ${REFERENCE}/IMG_2065_retag.csv -o exif,name=IMG_2065 -F ${TMPDIR}/ricoh-rdc5300.jpg bincompare ${REFERENCE}/ricoh-rdc5300.jpg.jpg ${TMPDIR}/ricoh-rdc5300.jpg.jpg +# test offset option. photo has no gps info and no exif offset tags. +# the offset is only required if the current system timezone is differnt from utc. +cp ${REFERENCE}/ricoh-rdc5300.jpg ${TMPDIR}/ricoh-rdc5300_offset.jpg +gpsbabel -i unicsv -f reference/ricoh-rdc5300_offset.csv -o exif,offset="+00:00" -F ${TMPDIR}/ricoh-rdc5300_offset.jpg +bincompare ${REFERENCE}/ricoh-rdc5300_offset.jpg.jpg ${TMPDIR}/ricoh-rdc5300_offset.jpg.jpg + + diff --git a/trackfilter.cc b/trackfilter.cc index 06f7c8bf3..c6ede1b2c 100644 --- a/trackfilter.cc +++ b/trackfilter.cc @@ -43,6 +43,9 @@ static constexpr bool TRACKF_DBG = false; #include // for QString #include // for UTC, CaseInsensitive #include // for foreach, qPrintable, QAddConst<>::Type, qint64 +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#include // for QTimeZone +#endif #include "defs.h" #include "trackfilter.h" @@ -298,7 +301,11 @@ void TrackFilter::trackfilter_title() fatal(MYNAME "-title: Missing your title!\n"); } for (auto* track : std::as_const(track_list)) { +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) + trackfilter_pack_init_rte_name(track, QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC)); +#else trackfilter_pack_init_rte_name(track, QDateTime::fromMSecsSinceEpoch(0, Qt::UTC)); +#endif } } @@ -676,7 +683,11 @@ QDateTime TrackFilter::trackfilter_range_check(const char* timestr) if (match.hasMatch()) { // QTime::fromString zzz expects exactly 3 digits representing milliseconds. result = QDateTime::fromString(match.captured(0), u"yyyyMMddHHmmss.zzz"); +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) + result.setTimeZone(QTimeZone::UTC); +#else result.setTimeSpec(Qt::UTC); +#endif if (!result.isValid()) { fatal(MYNAME "-range-check: Invalid timestamp \"%s\"!\n", timestr); } @@ -834,7 +845,11 @@ TrackFilter::faketime_t TrackFilter::trackfilter_faketime_check(const char* time QString fmtstart("00000101000000"); fmtstart.replace(0, start.size(), start); result.start = QDateTime::fromString(fmtstart, u"yyyyMMddHHmmss"); +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) + result.start.setTimeZone(QTimeZone::UTC); +#else result.start.setTimeSpec(Qt::UTC); +#endif if (!result.start.isValid()) { fatal(MYNAME "-faketime-check: Invalid timestamp \"%s\"!\n", qPrintable(start)); } diff --git a/util.cc b/util.cc index 53e3b983f..3e3410b91 100644 --- a/util.cc +++ b/util.cc @@ -44,6 +44,9 @@ #include // for operator<<, QTextStream, qSetFieldWidth, endl, QTextStream::AlignLeft #include // for CaseInsensitive #include // for QTime +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#include // for QTimeZone +#endif #include // for QTimeZone #include // for qEnvironmentVariableIsSet, QAddConst<>::Type, qPrintable @@ -294,6 +297,31 @@ QDateTime make_datetime(QDate date, QTime time, bool is_localtime, bool force_utc, int utc_offset) { QDateTime result; +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) + QTimeZone timezone; + + if (is_localtime) { + if (force_utc) { // override with passed option value + timezone = QTimeZone::fromSecondsAheadOfUtc(utc_offset); + } else { + timezone = QTimeZone::LocalTime; + } + } else { + timezone = QTimeZone::UTC; + } + + if (date.isValid() && time.isValid()) { + result = QDateTime(date, time, timezone); + } else if (time.isValid()) { + // TODO: Wouldn't it be better to return an invalid QDateTime + // that contained an invalid QDate, a valid QTime and a valid + // Qt::TimeSpec? + result = QDateTime(QDate(1970, 1, 1), time, timezone); + } else if (date.isValid()) { + // no time, use start of day in the given Qt::TimeSpec. + result = date.startOfDay(timezone); + } +#else Qt::TimeSpec timespec; int offset = 0; @@ -326,6 +354,7 @@ make_datetime(QDate date, QTime time, bool is_localtime, bool force_utc, int utc result = date.startOfDay(timespec, offset); } +#endif return result; } @@ -347,7 +376,11 @@ gpsbabel::DateTime current_time() { if (gpsbabel_testmode()) { +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) + return QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC); +#else return QDateTime::fromMSecsSinceEpoch(0, Qt::UTC); +#endif } return QDateTime::currentDateTimeUtc(); @@ -361,14 +394,22 @@ current_time() */ QDateTime dotnet_time_to_qdatetime(long long dotnet) { +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) + QDateTime epoch = QDateTime(QDate(1, 1, 1), QTime(0, 0, 0), QTimeZone::UTC); +#else QDateTime epoch = QDateTime(QDate(1, 1, 1), QTime(0, 0, 0), Qt::UTC); +#endif qint64 millisecs = (dotnet + 5000)/ 10000; return epoch.addMSecs(millisecs); } long long qdatetime_to_dotnet_time(const QDateTime& dt) { +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) + QDateTime epoch = QDateTime(QDate(1, 1, 1), QTime(0, 0, 0), QTimeZone::UTC); +#else QDateTime epoch = QDateTime(QDate(1, 1, 1), QTime(0, 0, 0), Qt::UTC); +#endif qint64 millisecs = epoch.msecsTo(dt); return millisecs * 10000; } diff --git a/v900.cc b/v900.cc index 4b8fb942e..fd6c82374 100644 --- a/v900.cc +++ b/v900.cc @@ -82,6 +82,9 @@ for a little more info, see structures: #include // for QByteArray #include // for QDate #include // for QTime +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#include // for QTimeZone +#endif #include // for qPrintable, UTC #include "defs.h" @@ -143,7 +146,11 @@ V900Format::bintime2utc(int date, int time) { // What's left in 'date' is year. QDate dt(date + 2000, month, day); +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) + return QDateTime(dt, tm, QTimeZone::UTC); +#else return QDateTime(dt, tm, Qt::UTC); +#endif } void From 860f9710f4cae0e3433062db175a84d07e2db086 Mon Sep 17 00:00:00 2001 From: tsteven4 <13596209+tsteven4@users.noreply.github.com> Date: Sat, 28 Sep 2024 13:28:50 -0600 Subject: [PATCH 02/17] avoid installing *.debug_information modules which appeared with 6.7.0 --- tools/ci_install_qt.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/ci_install_qt.sh b/tools/ci_install_qt.sh index 611aeb291..215aeb01b 100755 --- a/tools/ci_install_qt.sh +++ b/tools/ci_install_qt.sh @@ -40,6 +40,9 @@ do skip=true fi done + if [[ "$a" == *".debug_information" ]]; then + skip=true + fi if [ $skip == false ]; then mods+=( "$a" ) fi From 232768d666cc47917698711b1a912ca7746d7c3c Mon Sep 17 00:00:00 2001 From: tsteven4 <13596209+tsteven4@users.noreply.github.com> Date: Sat, 28 Sep 2024 15:47:26 -0600 Subject: [PATCH 03/17] centralize decision on lightweight time zones. --- CMakeLists.txt | 3 +++ dg-100.cc | 4 ++-- exif.cc | 8 ++++---- garmin_gpi.cc | 4 ++-- gdb.cc | 4 ++-- globalsat_sport.cc | 2 +- gpx.cc | 4 ++-- igc.cc | 6 +++--- lowranceusr.cc | 4 ++-- mtk_logger.cc | 4 ++-- nmea.cc | 12 ++++++------ skytraq.cc | 6 +++--- src/core/datetime.h | 4 ++-- subrip.cc | 4 ++-- trackfilter.cc | 8 ++++---- util.cc | 10 +++++----- v900.cc | 4 ++-- 17 files changed, 47 insertions(+), 44 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1a9a1df0d..c0841ee75 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,6 +33,9 @@ if(${Qt6Core_VERSION} VERSION_LESS 6.2) else() message(STATUS "Using Qt6 version ${Qt6Core_VERSION}") endif() +if(${Qt6Core_VERSION} VERSION_GREATER_EQUAL 6.5) + target_compile_definitions(gpsbabel PRIVATE LIGHTWEIGHT_TIMEZONES_SUPPORTED) +endif() option(GPSBABEL_ENABLE_PCH "enable precompiled headers." ON) if (GPSBABEL_ENABLE_PCH) diff --git a/dg-100.cc b/dg-100.cc index 0906a98c8..7c4de3271 100644 --- a/dg-100.cc +++ b/dg-100.cc @@ -43,7 +43,7 @@ #include // for QScopedArrayPointer #include // for QString #include // for QTime -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED #include // for QTimeZone #endif #include // for TextDate, UTC @@ -112,7 +112,7 @@ Dg100Format::bintime2utc(int date, int time) date /= 100; int day = date; -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED return QDateTime(QDate(year, mon, day), QTime(hour, min, sec), QTimeZone::UTC); #else return QDateTime(QDate(year, mon, day), QTime(hour, min, sec), Qt::UTC); diff --git a/exif.cc b/exif.cc index 562396052..694b03b9d 100644 --- a/exif.cc +++ b/exif.cc @@ -47,7 +47,7 @@ #include // for QString #include // for QTextCodec #include // for QTime -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED #include // for QTimeZone #endif #include // for QVariant @@ -708,7 +708,7 @@ ExifFormat::exif_get_gps_time(ExifApp* app) const if (gpststag != nullptr) { QDate datestamp = exif_read_datestamp(gpsdstag); QTime timestamp = exif_read_timestamp(gpststag); -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED QDateTime gpstime = QDateTime(datestamp, timestamp, QTimeZone::UTC); #else QDateTime gpstime = QDateTime(datestamp, timestamp, Qt::UTC); @@ -772,7 +772,7 @@ ExifFormat::exif_get_exif_time(ExifApp* app) const // Correct the date time by supplying the offset from UTC. int offset_hours = match.captured(1).append(match.captured(2)).toInt(); int offset_mins = match.captured(1).append(match.captured(3)).toInt(); -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED res.setTimeZone(QTimeZone::fromSecondsAheadOfUtc(((offset_hours * 60) + offset_mins) * 60)); #else res.setOffsetFromUtc(((offset_hours * 60) + offset_mins) * 60); @@ -961,7 +961,7 @@ ExifFormat::exif_waypt_from_exif_app(ExifApp* app) const } } -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED gps_datetime = QDateTime(datestamp, timestamp, QTimeZone::UTC); #else gps_datetime = QDateTime(datestamp, timestamp, Qt::UTC); diff --git a/garmin_gpi.cc b/garmin_gpi.cc index 15af3628f..939b526a8 100644 --- a/garmin_gpi.cc +++ b/garmin_gpi.cc @@ -28,7 +28,7 @@ #include // for QList #include // for QString, operator+, operator< #include // for QThread -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED #include // for QTimeZone #endif #include // for CaseInsensitive @@ -181,7 +181,7 @@ GarminGPIFormat::read_header() if (GPI_DBG) { time_t crdate = GPS_Math_Gtime_To_Utime(rdata->crdate); warning("crdate = %lld (%s)\n", (long long) rdata->crdate, -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED CSTR(QDateTime::fromSecsSinceEpoch(crdate, QTimeZone::UTC).toString(Qt::ISODate))); #else CSTR(QDateTime::fromSecsSinceEpoch(crdate, Qt::UTC).toString(Qt::ISODate))); diff --git a/gdb.cc b/gdb.cc index 081d09af9..67c14d15f 100644 --- a/gdb.cc +++ b/gdb.cc @@ -31,7 +31,7 @@ #include // for QDateTime #include // for QString, operator!=, operator== #include // for QTime -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED #include // for QTimeZone #endif #include // for CaseInsensitive @@ -1129,7 +1129,7 @@ GdbFormat::write_header() * This is our "Watermark" to show this file was created by GPSbabel. * The date/time used to be from CVS, and may be from git in the future. */ -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED static const QDateTime gdb_release_dt = QDateTime(QDate(2011, 4, 14), QTime(1, 30, 1), QTimeZone::UTC); #else static const QDateTime gdb_release_dt = QDateTime(QDate(2011, 4, 14), QTime(1, 30, 1), Qt::UTC); diff --git a/globalsat_sport.cc b/globalsat_sport.cc index e147fca5d..11f7b063c 100644 --- a/globalsat_sport.cc +++ b/globalsat_sport.cc @@ -529,7 +529,7 @@ GlobalsatSportFormat::track_read() if (timezn != nullptr) { gpsDateTime = gpsbabel::DateTime(QDateTime(gpsDate, gpsTime, *timezn).toUTC()); } else { -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED gpsDateTime = gpsbabel::DateTime(QDateTime(gpsDate, gpsTime, QTimeZone::LocalTime).toUTC()); #else gpsDateTime = gpsbabel::DateTime(QDateTime(gpsDate, gpsTime, Qt::LocalTime).toUTC()); diff --git a/gpx.cc b/gpx.cc index 1d133239d..56fcb33dd 100644 --- a/gpx.cc +++ b/gpx.cc @@ -40,7 +40,7 @@ #include // for QStringList #include // for QStringView #include // for QTime -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED #include // for QTimeZone #endif #include // for QVersionNumber @@ -520,7 +520,7 @@ xml_parse_time(const QString& dateTimeString) if (res > 0) { QDate date(year, mon, mday); QTime time(hour, min, sec); -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED dt = QDateTime(date, time, QTimeZone::UTC); #else dt = QDateTime(date, time, Qt::UTC); diff --git a/igc.cc b/igc.cc index 6026fd0c7..dc276ae5e 100644 --- a/igc.cc +++ b/igc.cc @@ -43,7 +43,7 @@ #include // for QString, operator+, QStringLiteral #include // for QStringList #include // for operator<, operator==, QTime -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED #include // for QTimeZone #endif #include // for UTC, SkipEmptyParts @@ -165,7 +165,7 @@ void IgcFormat::TaskRecordReader::igc_task_rec(const char* rec) } else { year += 1900; } -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED creation = QDateTime(QDate(year, month, day), QTime(hour, minute, second), QTimeZone::UTC); #else creation = QDateTime(QDate(year, month, day), QTime(hour, minute, second), Qt::UTC); @@ -405,7 +405,7 @@ void IgcFormat::read() pres_wpt->fs.FsChainAdd(fsdata); } -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED pres_wpt->SetCreationTime(QDateTime(date, tod, QTimeZone::UTC)); #else pres_wpt->SetCreationTime(QDateTime(date, tod, Qt::UTC)); diff --git a/lowranceusr.cc b/lowranceusr.cc index 6e8413793..494ad769a 100644 --- a/lowranceusr.cc +++ b/lowranceusr.cc @@ -105,7 +105,7 @@ #include // for QTextCodec, QTextCodec::IgnoreHeader #include // for QTextEncoder #include // for QTime -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED #include // for QTimeZone #endif #include // for CaseInsensitive, UTC @@ -249,7 +249,7 @@ LowranceusrFormat::lowranceusr4_writestr(const QString& buf, gbfile* file, int b gpsbabel::DateTime LowranceusrFormat::lowranceusr4_get_timestamp(unsigned int jd_number, unsigned int msecs) { -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED QDateTime qdt = QDateTime(QDate::fromJulianDay(jd_number), QTime(0, 0, 0), QTimeZone::UTC).addMSecs(msecs); #else QDateTime qdt = QDateTime(QDate::fromJulianDay(jd_number), QTime(0, 0, 0), Qt::UTC).addMSecs(msecs); diff --git a/mtk_logger.cc b/mtk_logger.cc index 58baa12a0..ddc7804ad 100644 --- a/mtk_logger.cc +++ b/mtk_logger.cc @@ -71,7 +71,7 @@ #include // for QLatin1Char #include // for qMakeStringPrivate, QStringLiteral #include // for QThread -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED #include // for QTimeZone #endif #include // for qPrintable, UTC @@ -842,7 +842,7 @@ int MtkLoggerBase::csv_line(gbfile* csvFile, int idx, unsigned long bmask, data_ , (itm->rcr&0x0004)?"D":"", (itm->rcr&0x0008)?"B":""); if (bmask & (1U<= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED QDateTime dt = QDateTime::fromSecsSinceEpoch(itm->timestamp, QTimeZone::UTC); #else QDateTime dt = QDateTime::fromSecsSinceEpoch(itm->timestamp, Qt::UTC); diff --git a/nmea.cc b/nmea.cc index 6ce28ef00..04ddf32e5 100644 --- a/nmea.cc +++ b/nmea.cc @@ -37,7 +37,7 @@ #include // for hex #include // for QThread #include // for QTime -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED #include // for QTimeZone #endif #include // for UTC @@ -327,7 +327,7 @@ void NmeaFormat::nmea_set_waypoint_time(Waypoint* wpt, QDateTime* prev, const QDate& date, const QTime& time) { if (date.isValid()) { -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED wpt->SetCreationTime(QDateTime(date, time, QTimeZone::UTC)); #else wpt->SetCreationTime(QDateTime(date, time, Qt::UTC)); @@ -338,7 +338,7 @@ NmeaFormat::nmea_set_waypoint_time(Waypoint* wpt, QDateTime* prev, const QDate& } *prev = wpt->GetCreationTime(); } else if (prev->date().isValid()) { -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED wpt->SetCreationTime(QDateTime(prev->date(), time, QTimeZone::UTC)); #else wpt->SetCreationTime(QDateTime(prev->date(), time, Qt::UTC)); @@ -353,7 +353,7 @@ NmeaFormat::nmea_set_waypoint_time(Waypoint* wpt, QDateTime* prev, const QDate& } *prev = wpt->GetCreationTime(); } else { -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED wpt->SetCreationTime(QDateTime(QDate(), time, QTimeZone::UTC)); #else wpt->SetCreationTime(QDateTime(QDate(), time, Qt::UTC)); @@ -654,7 +654,7 @@ NmeaFormat::gpzda_parse(const QString& ibuf) // The prev_datetime data member might be used by // nmea_fix_timestamps and nmea_set_waypoint_time. -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED prev_datetime = QDateTime(date, time, QTimeZone::UTC); #else prev_datetime = QDateTime(date, time, Qt::UTC); @@ -858,7 +858,7 @@ NmeaFormat::nmea_fix_timestamps(route_head* track) return; } -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED QDateTime prev = QDateTime(opt_tm, QTime(0, 0), QTimeZone::UTC); #else QDateTime prev = QDateTime(opt_tm, QTime(0, 0), Qt::UTC); diff --git a/skytraq.cc b/skytraq.cc index 121591ba4..78f6dac26 100644 --- a/skytraq.cc +++ b/skytraq.cc @@ -35,7 +35,7 @@ #include // for QChar #include // for QLatin1Char #include // for QThread -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED #include // for QTimeZone #endif #include // for qPrintable @@ -537,7 +537,7 @@ SkytraqBase::gpstime_to_qdatetime(int week, int sec) const int override = xstrtoi(opt_gps_utc_offset, nullptr, 10); if (override) { gps_timet -= override; -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED return QDateTime::fromSecsSinceEpoch(gps_timet, QTimeZone::UTC); #else return QDateTime::fromSecsSinceEpoch(gps_timet, Qt::UTC); @@ -564,7 +564,7 @@ SkytraqBase::gpstime_to_qdatetime(int week, int sec) const // Future: Consult http://maia.usno.navy.mil/ser7/tai-utc.dat // use http://www.stevegs.com/utils/jd_calc/ for Julian to UNIX sec -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED return QDateTime::fromSecsSinceEpoch(gps_timet, QTimeZone::UTC); #else return QDateTime::fromSecsSinceEpoch(gps_timet, Qt::UTC); diff --git a/src/core/datetime.h b/src/core/datetime.h index 27057884e..8cb26ccbf 100644 --- a/src/core/datetime.h +++ b/src/core/datetime.h @@ -28,7 +28,7 @@ #include #include -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED #include #endif #include @@ -57,7 +57,7 @@ class DateTime : public QDateTime // Qt::LocalTime compared to Qt::UTC on ubuntu bionic. // Note that these conversions can be required if the Qt::TimeSpec is // set to Qt:LocalTime after construction. -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED DateTime() : QDateTime(QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC)) #else DateTime() : QDateTime(QDateTime::fromMSecsSinceEpoch(0, Qt::UTC)) diff --git a/subrip.cc b/subrip.cc index 1be7db5d8..cb75a7afe 100644 --- a/subrip.cc +++ b/subrip.cc @@ -24,7 +24,7 @@ #include // for QDebug #include // for QString #include // for QTime -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED #include // for QTimeZone #endif #include // for UTC @@ -224,7 +224,7 @@ SubripFormat::wr_init(const QString& fname) fatal(FatalMsg().nospace() << MYNAME ": option gps_time value (" << opt_gpstime << ") is invalid. Expected hhmmss[.sss]"); } } -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED gps_datetime = QDateTime(gps_date, gps_time, QTimeZone::UTC); #else gps_datetime = QDateTime(gps_date, gps_time, Qt::UTC); diff --git a/trackfilter.cc b/trackfilter.cc index c6ede1b2c..de5656c13 100644 --- a/trackfilter.cc +++ b/trackfilter.cc @@ -43,7 +43,7 @@ static constexpr bool TRACKF_DBG = false; #include // for QString #include // for UTC, CaseInsensitive #include // for foreach, qPrintable, QAddConst<>::Type, qint64 -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED #include // for QTimeZone #endif @@ -301,7 +301,7 @@ void TrackFilter::trackfilter_title() fatal(MYNAME "-title: Missing your title!\n"); } for (auto* track : std::as_const(track_list)) { -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED trackfilter_pack_init_rte_name(track, QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC)); #else trackfilter_pack_init_rte_name(track, QDateTime::fromMSecsSinceEpoch(0, Qt::UTC)); @@ -683,7 +683,7 @@ QDateTime TrackFilter::trackfilter_range_check(const char* timestr) if (match.hasMatch()) { // QTime::fromString zzz expects exactly 3 digits representing milliseconds. result = QDateTime::fromString(match.captured(0), u"yyyyMMddHHmmss.zzz"); -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED result.setTimeZone(QTimeZone::UTC); #else result.setTimeSpec(Qt::UTC); @@ -845,7 +845,7 @@ TrackFilter::faketime_t TrackFilter::trackfilter_faketime_check(const char* time QString fmtstart("00000101000000"); fmtstart.replace(0, start.size(), start); result.start = QDateTime::fromString(fmtstart, u"yyyyMMddHHmmss"); -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED result.start.setTimeZone(QTimeZone::UTC); #else result.start.setTimeSpec(Qt::UTC); diff --git a/util.cc b/util.cc index 3e3410b91..c6337082a 100644 --- a/util.cc +++ b/util.cc @@ -44,7 +44,7 @@ #include // for operator<<, QTextStream, qSetFieldWidth, endl, QTextStream::AlignLeft #include // for CaseInsensitive #include // for QTime -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED #include // for QTimeZone #endif #include // for QTimeZone @@ -297,7 +297,7 @@ QDateTime make_datetime(QDate date, QTime time, bool is_localtime, bool force_utc, int utc_offset) { QDateTime result; -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED QTimeZone timezone; if (is_localtime) { @@ -376,7 +376,7 @@ gpsbabel::DateTime current_time() { if (gpsbabel_testmode()) { -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED return QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC); #else return QDateTime::fromMSecsSinceEpoch(0, Qt::UTC); @@ -394,7 +394,7 @@ current_time() */ QDateTime dotnet_time_to_qdatetime(long long dotnet) { -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED QDateTime epoch = QDateTime(QDate(1, 1, 1), QTime(0, 0, 0), QTimeZone::UTC); #else QDateTime epoch = QDateTime(QDate(1, 1, 1), QTime(0, 0, 0), Qt::UTC); @@ -405,7 +405,7 @@ QDateTime dotnet_time_to_qdatetime(long long dotnet) long long qdatetime_to_dotnet_time(const QDateTime& dt) { -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED QDateTime epoch = QDateTime(QDate(1, 1, 1), QTime(0, 0, 0), QTimeZone::UTC); #else QDateTime epoch = QDateTime(QDate(1, 1, 1), QTime(0, 0, 0), Qt::UTC); diff --git a/v900.cc b/v900.cc index fd6c82374..5fd374290 100644 --- a/v900.cc +++ b/v900.cc @@ -82,7 +82,7 @@ for a little more info, see structures: #include // for QByteArray #include // for QDate #include // for QTime -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED #include // for QTimeZone #endif #include // for qPrintable, UTC @@ -146,7 +146,7 @@ V900Format::bintime2utc(int date, int time) { // What's left in 'date' is year. QDate dt(date + 2000, month, day); -#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED return QDateTime(dt, tm, QTimeZone::UTC); #else return QDateTime(dt, tm, Qt::UTC); From c69a11bacd70daa42fabde2788fb0280b4c68f35 Mon Sep 17 00:00:00 2001 From: tsteven4 <13596209+tsteven4@users.noreply.github.com> Date: Sat, 28 Sep 2024 15:58:02 -0600 Subject: [PATCH 04/17] correct sort order for includes, duplicates --- src/core/datetime.h | 2 +- trackfilter.cc | 4 ++-- util.cc | 3 --- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/core/datetime.h b/src/core/datetime.h index 8cb26ccbf..30962f23b 100644 --- a/src/core/datetime.h +++ b/src/core/datetime.h @@ -28,10 +28,10 @@ #include #include +#include #ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED #include #endif -#include // As this code began in C, we have several hundred places that set and // read creation_time as a time_t. Provide some operator overloads to make diff --git a/trackfilter.cc b/trackfilter.cc index de5656c13..b45d1c9ea 100644 --- a/trackfilter.cc +++ b/trackfilter.cc @@ -41,11 +41,11 @@ static constexpr bool TRACKF_DBG = false; #include // for QRegularExpression, QRegularExpression::CaseInsensitiveOption, QRegularExpression::PatternOptions #include // for QRegularExpressionMatch #include // for QString -#include // for UTC, CaseInsensitive -#include // for foreach, qPrintable, QAddConst<>::Type, qint64 #ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED #include // for QTimeZone #endif +#include // for UTC, CaseInsensitive +#include // for foreach, qPrintable, QAddConst<>::Type, qint64 #include "defs.h" #include "trackfilter.h" diff --git a/util.cc b/util.cc index c6337082a..a07db0fda 100644 --- a/util.cc +++ b/util.cc @@ -44,9 +44,6 @@ #include // for operator<<, QTextStream, qSetFieldWidth, endl, QTextStream::AlignLeft #include // for CaseInsensitive #include // for QTime -#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED -#include // for QTimeZone -#endif #include // for QTimeZone #include // for qEnvironmentVariableIsSet, QAddConst<>::Type, qPrintable From ff38dc65c6c716a631fc452551caee1606092db9 Mon Sep 17 00:00:00 2001 From: tsteven4 <13596209+tsteven4@users.noreply.github.com> Date: Sat, 28 Sep 2024 16:07:06 -0600 Subject: [PATCH 05/17] remove debug statement --- exif.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/exif.cc b/exif.cc index 694b03b9d..1f49259f9 100644 --- a/exif.cc +++ b/exif.cc @@ -777,7 +777,6 @@ ExifFormat::exif_get_exif_time(ExifApp* app) const #else res.setOffsetFromUtc(((offset_hours * 60) + offset_mins) * 60); #endif -qDebug() << "using offset" << offset_hours << offset_mins << (offset_tag == nullptr); } else if (opt_offsettime) { // Only warn for user supplied offsets. // Offset tags may indicate the offset was unknown, e.g. " : ". From 4d02102b1912830b6be9dc0ce4f3cd917be0b80d Mon Sep 17 00:00:00 2001 From: tsteven4 <13596209+tsteven4@users.noreply.github.com> Date: Sat, 28 Sep 2024 16:12:45 -0600 Subject: [PATCH 06/17] remove const from declaration. --- exif.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exif.h b/exif.h index e218bb2e5..a6cd691d7 100644 --- a/exif.h +++ b/exif.h @@ -171,7 +171,7 @@ class ExifFormat : public Format static void exif_read_app(ExifApp* app); static void exif_examine_app(ExifApp* app); static ExifIfd* exif_find_ifd(ExifApp* app, uint16_t ifd_nr); - static ExifTag* exif_find_tag(ExifIfd* ifd, const uint16_t tag_id); + static ExifTag* exif_find_tag(ExifIfd* ifd, uint16_t tag_id); static ExifTag* exif_find_tag(ExifApp* app, uint16_t ifd_nr, uint16_t tag_id); QDateTime exif_get_gps_time(ExifApp* app) const; QDateTime exif_get_exif_time(ExifApp* app) const; From 4eb06165e49f1b47ea6e076368668b77687616c4 Mon Sep 17 00:00:00 2001 From: tsteven4 <13596209+tsteven4@users.noreply.github.com> Date: Sat, 28 Sep 2024 20:54:25 -0600 Subject: [PATCH 07/17] simplify lightweight timezone usage via qt version depependent defined constants. --- defs.h | 11 +++++++++++ dg-100.cc | 9 +-------- exif.cc | 12 ++---------- garmin_gpi.cc | 9 +-------- gdb.cc | 9 +-------- globalsat_sport.cc | 6 +----- gpx.cc | 9 +-------- igc.cc | 15 ++------------- lowranceusr.cc | 9 +-------- mtk_logger.cc | 9 +-------- nmea.cc | 33 +++++---------------------------- skytraq.cc | 15 ++------------- subrip.cc | 9 +-------- trackfilter.cc | 6 +----- util.cc | 18 +++--------------- v900.cc | 9 +-------- 16 files changed, 35 insertions(+), 153 deletions(-) diff --git a/defs.h b/defs.h index 316468c2e..ff6738288 100644 --- a/defs.h +++ b/defs.h @@ -37,6 +37,9 @@ #include // for QString #include // for QStringView #include // for QTextCodec +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED +#include // for QTimeZone +#endif #include // for CaseInsensitive #include // for QForeachContainer, qMakeForeachContainer, foreach, qint64 @@ -1042,4 +1045,12 @@ int color_to_bbggrr(const char* cname); constexpr double unknown_alt = -99999999.0; constexpr int unknown_color = -1; +#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED +constexpr QTimeZone QtLocalTime = QTimeZone::LocalTime; +constexpr QTimeZone QtUTC = QTimeZone::UTC; +#else +constexpr Qt::TimeSpec QtLocalTime = Qt::LocalTime; +constexpr Qt::TimeSpec QtUTC = Qt::UTC; +#endif + #endif // DEFS_H_INCLUDED_ diff --git a/dg-100.cc b/dg-100.cc index 7c4de3271..3279daeae 100644 --- a/dg-100.cc +++ b/dg-100.cc @@ -43,9 +43,6 @@ #include // for QScopedArrayPointer #include // for QString #include // for QTime -#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED -#include // for QTimeZone -#endif #include // for TextDate, UTC #include // for qPrintable @@ -112,11 +109,7 @@ Dg100Format::bintime2utc(int date, int time) date /= 100; int day = date; -#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED - return QDateTime(QDate(year, mon, day), QTime(hour, min, sec), QTimeZone::UTC); -#else - return QDateTime(QDate(year, mon, day), QTime(hour, min, sec), Qt::UTC); -#endif + return QDateTime(QDate(year, mon, day), QTime(hour, min, sec), QtUTC); } void diff --git a/exif.cc b/exif.cc index 1f49259f9..3710f03a5 100644 --- a/exif.cc +++ b/exif.cc @@ -708,11 +708,7 @@ ExifFormat::exif_get_gps_time(ExifApp* app) const if (gpststag != nullptr) { QDate datestamp = exif_read_datestamp(gpsdstag); QTime timestamp = exif_read_timestamp(gpststag); -#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED - QDateTime gpstime = QDateTime(datestamp, timestamp, QTimeZone::UTC); -#else - QDateTime gpstime = QDateTime(datestamp, timestamp, Qt::UTC); -#endif + QDateTime gpstime = QDateTime(datestamp, timestamp, QtUTC); if (gpstime.isValid()) { res = gpstime; } @@ -960,11 +956,7 @@ ExifFormat::exif_waypt_from_exif_app(ExifApp* app) const } } -#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED - gps_datetime = QDateTime(datestamp, timestamp, QTimeZone::UTC); -#else - gps_datetime = QDateTime(datestamp, timestamp, Qt::UTC); -#endif + gps_datetime = QDateTime(datestamp, timestamp, QtUTC); if (gps_datetime.isValid()) { if (global_opts.debug_level >= 3) { printf(MYNAME "-GPSTimeStamp = %s\n", qPrintable(gps_datetime.toString(Qt::ISODateWithMs))); diff --git a/garmin_gpi.cc b/garmin_gpi.cc index 939b526a8..3d0ee0332 100644 --- a/garmin_gpi.cc +++ b/garmin_gpi.cc @@ -28,9 +28,6 @@ #include // for QList #include // for QString, operator+, operator< #include // for QThread -#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED -#include // for QTimeZone -#endif #include // for CaseInsensitive #include // for foreach, Q_UNUSED @@ -181,11 +178,7 @@ GarminGPIFormat::read_header() if (GPI_DBG) { time_t crdate = GPS_Math_Gtime_To_Utime(rdata->crdate); warning("crdate = %lld (%s)\n", (long long) rdata->crdate, -#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED - CSTR(QDateTime::fromSecsSinceEpoch(crdate, QTimeZone::UTC).toString(Qt::ISODate))); -#else - CSTR(QDateTime::fromSecsSinceEpoch(crdate, Qt::UTC).toString(Qt::ISODate))); -#endif + CSTR(QDateTime::fromSecsSinceEpoch(crdate, QtUTC).toString(Qt::ISODate))); } (void) gbfgetint16(fin); /* 0 */ diff --git a/gdb.cc b/gdb.cc index 67c14d15f..837f18e1c 100644 --- a/gdb.cc +++ b/gdb.cc @@ -31,9 +31,6 @@ #include // for QDateTime #include // for QString, operator!=, operator== #include // for QTime -#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED -#include // for QTimeZone -#endif #include // for CaseInsensitive #include // for Q_UNUSED, qPrintable, foreach @@ -1129,11 +1126,7 @@ GdbFormat::write_header() * This is our "Watermark" to show this file was created by GPSbabel. * The date/time used to be from CVS, and may be from git in the future. */ -#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED - static const QDateTime gdb_release_dt = QDateTime(QDate(2011, 4, 14), QTime(1, 30, 1), QTimeZone::UTC); -#else - static const QDateTime gdb_release_dt = QDateTime(QDate(2011, 4, 14), QTime(1, 30, 1), Qt::UTC); -#endif + static const QDateTime gdb_release_dt = QDateTime(QDate(2011, 4, 14), QTime(1, 30, 1), QtUTC); gdb_write_cstr(QStringLiteral("GPSBabel-%1").arg(gpsbabel_version)); gdb_write_cstr(gdb_release_dt.toString(u"MMM dd yyyy")); gdb_write_cstr(gdb_release_dt.toString(u"HH:mm:ss")); diff --git a/globalsat_sport.cc b/globalsat_sport.cc index 11f7b063c..e4a69c383 100644 --- a/globalsat_sport.cc +++ b/globalsat_sport.cc @@ -529,11 +529,7 @@ GlobalsatSportFormat::track_read() if (timezn != nullptr) { gpsDateTime = gpsbabel::DateTime(QDateTime(gpsDate, gpsTime, *timezn).toUTC()); } else { -#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED - gpsDateTime = gpsbabel::DateTime(QDateTime(gpsDate, gpsTime, QTimeZone::LocalTime).toUTC()); -#else - gpsDateTime = gpsbabel::DateTime(QDateTime(gpsDate, gpsTime, Qt::LocalTime).toUTC()); -#endif + gpsDateTime = gpsbabel::DateTime(QDateTime(gpsDate, gpsTime, QtLocalTime).toUTC()); } int laps_in_package = header.gh_laprec.LapIndex - header.gh_ptrec.Index + 1; diff --git a/gpx.cc b/gpx.cc index 56fcb33dd..080ad5659 100644 --- a/gpx.cc +++ b/gpx.cc @@ -40,9 +40,6 @@ #include // for QStringList #include // for QStringView #include // for QTime -#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED -#include // for QTimeZone -#endif #include // for QVersionNumber #include // for QXmlStreamAttribute #include // for QXmlStreamAttributes @@ -520,11 +517,7 @@ xml_parse_time(const QString& dateTimeString) if (res > 0) { QDate date(year, mon, mday); QTime time(hour, min, sec); -#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED - dt = QDateTime(date, time, QTimeZone::UTC); -#else - dt = QDateTime(date, time, Qt::UTC); -#endif + dt = QDateTime(date, time, QtUTC); // Fractional part of time. if (fsec) { diff --git a/igc.cc b/igc.cc index dc276ae5e..1b831a043 100644 --- a/igc.cc +++ b/igc.cc @@ -43,9 +43,6 @@ #include // for QString, operator+, QStringLiteral #include // for QStringList #include // for operator<, operator==, QTime -#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED -#include // for QTimeZone -#endif #include // for UTC, SkipEmptyParts #include // for foreach, qPrintable @@ -165,11 +162,7 @@ void IgcFormat::TaskRecordReader::igc_task_rec(const char* rec) } else { year += 1900; } -#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED - creation = QDateTime(QDate(year, month, day), QTime(hour, minute, second), QTimeZone::UTC); -#else - creation = QDateTime(QDate(year, month, day), QTime(hour, minute, second), Qt::UTC); -#endif + creation = QDateTime(QDate(year, month, day), QTime(hour, minute, second), QtUTC); if (!creation.isValid()) { fatal(MYNAME ": bad date time\n%s\n", rec); } @@ -405,11 +398,7 @@ void IgcFormat::read() pres_wpt->fs.FsChainAdd(fsdata); } -#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED - pres_wpt->SetCreationTime(QDateTime(date, tod, QTimeZone::UTC)); -#else - pres_wpt->SetCreationTime(QDateTime(date, tod, Qt::UTC)); -#endif + pres_wpt->SetCreationTime(QDateTime(date, tod, QtUTC)); // Add the waypoint to the pressure altitude track if (pres_alt) { diff --git a/lowranceusr.cc b/lowranceusr.cc index 494ad769a..9e12d3931 100644 --- a/lowranceusr.cc +++ b/lowranceusr.cc @@ -105,9 +105,6 @@ #include // for QTextCodec, QTextCodec::IgnoreHeader #include // for QTextEncoder #include // for QTime -#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED -#include // for QTimeZone -#endif #include // for CaseInsensitive, UTC #include // for qPrintable, uint, QAddConst<>::Type @@ -249,11 +246,7 @@ LowranceusrFormat::lowranceusr4_writestr(const QString& buf, gbfile* file, int b gpsbabel::DateTime LowranceusrFormat::lowranceusr4_get_timestamp(unsigned int jd_number, unsigned int msecs) { -#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED - QDateTime qdt = QDateTime(QDate::fromJulianDay(jd_number), QTime(0, 0, 0), QTimeZone::UTC).addMSecs(msecs); -#else - QDateTime qdt = QDateTime(QDate::fromJulianDay(jd_number), QTime(0, 0, 0), Qt::UTC).addMSecs(msecs); -#endif + QDateTime qdt = QDateTime(QDate::fromJulianDay(jd_number), QTime(0, 0, 0), QtUTC).addMSecs(msecs); return qdt; } diff --git a/mtk_logger.cc b/mtk_logger.cc index ddc7804ad..3a2217c85 100644 --- a/mtk_logger.cc +++ b/mtk_logger.cc @@ -71,9 +71,6 @@ #include // for QLatin1Char #include // for qMakeStringPrivate, QStringLiteral #include // for QThread -#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED -#include // for QTimeZone -#endif #include // for qPrintable, UTC #include // for errno, ERANGE #include // for fabs @@ -842,11 +839,7 @@ int MtkLoggerBase::csv_line(gbfile* csvFile, int idx, unsigned long bmask, data_ , (itm->rcr&0x0004)?"D":"", (itm->rcr&0x0008)?"B":""); if (bmask & (1U<timestamp, QTimeZone::UTC); -#else - QDateTime dt = QDateTime::fromSecsSinceEpoch(itm->timestamp, Qt::UTC); -#endif + QDateTime dt = QDateTime::fromSecsSinceEpoch(itm->timestamp, QtUTC); dt = dt.addMSecs(itm->timestamp_ms); QString timestamp = dt.toUTC().toString(u"yyyy/MM/dd,hh:mm:ss.zzz"); diff --git a/nmea.cc b/nmea.cc index 04ddf32e5..62f906242 100644 --- a/nmea.cc +++ b/nmea.cc @@ -37,9 +37,6 @@ #include // for hex #include // for QThread #include // for QTime -#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED -#include // for QTimeZone -#endif #include // for UTC #include // for qPrintable, foreach @@ -327,22 +324,14 @@ void NmeaFormat::nmea_set_waypoint_time(Waypoint* wpt, QDateTime* prev, const QDate& date, const QTime& time) { if (date.isValid()) { -#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED - wpt->SetCreationTime(QDateTime(date, time, QTimeZone::UTC)); -#else - wpt->SetCreationTime(QDateTime(date, time, Qt::UTC)); -#endif + wpt->SetCreationTime(QDateTime(date, time, QtUTC)); if (wpt->wpt_flags.fmt_use != 0) { wpt->wpt_flags.fmt_use = 0; without_date--; } *prev = wpt->GetCreationTime(); } else if (prev->date().isValid()) { -#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED - wpt->SetCreationTime(QDateTime(prev->date(), time, QTimeZone::UTC)); -#else - wpt->SetCreationTime(QDateTime(prev->date(), time, Qt::UTC)); -#endif + wpt->SetCreationTime(QDateTime(prev->date(), time, QtUTC)); if (*prev > wpt->creation_time) { /* go over midnight ? */ wpt->creation_time = wpt->creation_time.addDays(1); @@ -353,11 +342,7 @@ NmeaFormat::nmea_set_waypoint_time(Waypoint* wpt, QDateTime* prev, const QDate& } *prev = wpt->GetCreationTime(); } else { -#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED - wpt->SetCreationTime(QDateTime(QDate(), time, QTimeZone::UTC)); -#else - wpt->SetCreationTime(QDateTime(QDate(), time, Qt::UTC)); -#endif + wpt->SetCreationTime(QDateTime(QDate(), time, QtUTC)); if (wpt->wpt_flags.fmt_use == 0) { wpt->wpt_flags.fmt_use = 1; without_date++; @@ -654,11 +639,7 @@ NmeaFormat::gpzda_parse(const QString& ibuf) // The prev_datetime data member might be used by // nmea_fix_timestamps and nmea_set_waypoint_time. -#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED - prev_datetime = QDateTime(date, time, QTimeZone::UTC); -#else - prev_datetime = QDateTime(date, time, Qt::UTC); -#endif + prev_datetime = QDateTime(date, time, QtUTC); } } @@ -858,11 +839,7 @@ NmeaFormat::nmea_fix_timestamps(route_head* track) return; } -#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED - QDateTime prev = QDateTime(opt_tm, QTime(0, 0), QTimeZone::UTC); -#else - QDateTime prev = QDateTime(opt_tm, QTime(0, 0), Qt::UTC); -#endif + QDateTime prev = QDateTime(opt_tm, QTime(0, 0), QtUTC); foreach (Waypoint* wpt, track->waypoint_list) { diff --git a/skytraq.cc b/skytraq.cc index 78f6dac26..2b2721367 100644 --- a/skytraq.cc +++ b/skytraq.cc @@ -35,9 +35,6 @@ #include // for QChar #include // for QLatin1Char #include // for QThread -#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED -#include // for QTimeZone -#endif #include // for qPrintable #include "defs.h" @@ -537,11 +534,7 @@ SkytraqBase::gpstime_to_qdatetime(int week, int sec) const int override = xstrtoi(opt_gps_utc_offset, nullptr, 10); if (override) { gps_timet -= override; -#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED - return QDateTime::fromSecsSinceEpoch(gps_timet, QTimeZone::UTC); -#else - return QDateTime::fromSecsSinceEpoch(gps_timet, Qt::UTC); -#endif + return QDateTime::fromSecsSinceEpoch(gps_timet, QtUTC); } /* leap second compensation: */ @@ -564,11 +557,7 @@ SkytraqBase::gpstime_to_qdatetime(int week, int sec) const // Future: Consult http://maia.usno.navy.mil/ser7/tai-utc.dat // use http://www.stevegs.com/utils/jd_calc/ for Julian to UNIX sec -#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED - return QDateTime::fromSecsSinceEpoch(gps_timet, QTimeZone::UTC); -#else - return QDateTime::fromSecsSinceEpoch(gps_timet, Qt::UTC); -#endif + return QDateTime::fromSecsSinceEpoch(gps_timet, QtUTC); } void diff --git a/subrip.cc b/subrip.cc index cb75a7afe..062e690b4 100644 --- a/subrip.cc +++ b/subrip.cc @@ -24,9 +24,6 @@ #include // for QDebug #include // for QString #include // for QTime -#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED -#include // for QTimeZone -#endif #include // for UTC #include "defs.h" @@ -224,11 +221,7 @@ SubripFormat::wr_init(const QString& fname) fatal(FatalMsg().nospace() << MYNAME ": option gps_time value (" << opt_gpstime << ") is invalid. Expected hhmmss[.sss]"); } } -#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED - gps_datetime = QDateTime(gps_date, gps_time, QTimeZone::UTC); -#else - gps_datetime = QDateTime(gps_date, gps_time, Qt::UTC); -#endif + gps_datetime = QDateTime(gps_date, gps_time, QtUTC); } video_offset_ms = 0; diff --git a/trackfilter.cc b/trackfilter.cc index b45d1c9ea..835cd6099 100644 --- a/trackfilter.cc +++ b/trackfilter.cc @@ -301,11 +301,7 @@ void TrackFilter::trackfilter_title() fatal(MYNAME "-title: Missing your title!\n"); } for (auto* track : std::as_const(track_list)) { -#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED - trackfilter_pack_init_rte_name(track, QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC)); -#else - trackfilter_pack_init_rte_name(track, QDateTime::fromMSecsSinceEpoch(0, Qt::UTC)); -#endif + trackfilter_pack_init_rte_name(track, QDateTime::fromMSecsSinceEpoch(0, QtUTC)); } } diff --git a/util.cc b/util.cc index a07db0fda..bf54ad498 100644 --- a/util.cc +++ b/util.cc @@ -373,11 +373,7 @@ gpsbabel::DateTime current_time() { if (gpsbabel_testmode()) { -#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED - return QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC); -#else - return QDateTime::fromMSecsSinceEpoch(0, Qt::UTC); -#endif + return QDateTime::fromMSecsSinceEpoch(0, QtUTC); } return QDateTime::currentDateTimeUtc(); @@ -391,22 +387,14 @@ current_time() */ QDateTime dotnet_time_to_qdatetime(long long dotnet) { -#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED - QDateTime epoch = QDateTime(QDate(1, 1, 1), QTime(0, 0, 0), QTimeZone::UTC); -#else - QDateTime epoch = QDateTime(QDate(1, 1, 1), QTime(0, 0, 0), Qt::UTC); -#endif + QDateTime epoch = QDateTime(QDate(1, 1, 1), QTime(0, 0, 0), QtUTC); qint64 millisecs = (dotnet + 5000)/ 10000; return epoch.addMSecs(millisecs); } long long qdatetime_to_dotnet_time(const QDateTime& dt) { -#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED - QDateTime epoch = QDateTime(QDate(1, 1, 1), QTime(0, 0, 0), QTimeZone::UTC); -#else - QDateTime epoch = QDateTime(QDate(1, 1, 1), QTime(0, 0, 0), Qt::UTC); -#endif + QDateTime epoch = QDateTime(QDate(1, 1, 1), QTime(0, 0, 0), QtUTC); qint64 millisecs = epoch.msecsTo(dt); return millisecs * 10000; } diff --git a/v900.cc b/v900.cc index 5fd374290..baf5a326b 100644 --- a/v900.cc +++ b/v900.cc @@ -82,9 +82,6 @@ for a little more info, see structures: #include // for QByteArray #include // for QDate #include // for QTime -#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED -#include // for QTimeZone -#endif #include // for qPrintable, UTC #include "defs.h" @@ -146,11 +143,7 @@ V900Format::bintime2utc(int date, int time) { // What's left in 'date' is year. QDate dt(date + 2000, month, day); -#ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED - return QDateTime(dt, tm, QTimeZone::UTC); -#else - return QDateTime(dt, tm, Qt::UTC); -#endif + return QDateTime(dt, tm, QtUTC); } void From 75a02748d5eff8d204c16f2e5c8fb29457b223d3 Mon Sep 17 00:00:00 2001 From: tsteven4 <13596209+tsteven4@users.noreply.github.com> Date: Sat, 28 Sep 2024 21:13:54 -0600 Subject: [PATCH 08/17] fix for QTimeZone not a QLiteralType --- defs.h | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/defs.h b/defs.h index ff6738288..aff1b63ea 100644 --- a/defs.h +++ b/defs.h @@ -1046,8 +1046,13 @@ constexpr double unknown_alt = -99999999.0; constexpr int unknown_color = -1; #ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED -constexpr QTimeZone QtLocalTime = QTimeZone::LocalTime; -constexpr QTimeZone QtUTC = QTimeZone::UTC; +// error: the type ‘const QTimeZone’ of ‘constexpr’ variable ‘QtLocalTime’ is not literal +// note: ‘QTimeZone’ is not literal because: +// note: ‘QTimeZone’ does not have ‘constexpr’ destructor +//constexpr QTimeZone QtLocalTime = QTimeZone::LocalTime; +//constexpr QTimeZone QtUTC = QTimeZone::UTC; +#define QtLocalTime QTimeZone::LocalTime +#define QtUTC QTimeZone::UTC #else constexpr Qt::TimeSpec QtLocalTime = Qt::LocalTime; constexpr Qt::TimeSpec QtUTC = Qt::UTC; From 88bc52f6baf04ecead95942681955cc062e9744e Mon Sep 17 00:00:00 2001 From: tsteven4 <13596209+tsteven4@users.noreply.github.com> Date: Sat, 28 Sep 2024 21:49:21 -0600 Subject: [PATCH 09/17] cleanup lightweight time constants. --- defs.h | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/defs.h b/defs.h index aff1b63ea..84ecf4636 100644 --- a/defs.h +++ b/defs.h @@ -1046,13 +1046,8 @@ constexpr double unknown_alt = -99999999.0; constexpr int unknown_color = -1; #ifdef LIGHTWEIGHT_TIMEZONES_SUPPORTED -// error: the type ‘const QTimeZone’ of ‘constexpr’ variable ‘QtLocalTime’ is not literal -// note: ‘QTimeZone’ is not literal because: -// note: ‘QTimeZone’ does not have ‘constexpr’ destructor -//constexpr QTimeZone QtLocalTime = QTimeZone::LocalTime; -//constexpr QTimeZone QtUTC = QTimeZone::UTC; -#define QtLocalTime QTimeZone::LocalTime -#define QtUTC QTimeZone::UTC +constexpr QTimeZone::Initialization QtLocalTime = QTimeZone::LocalTime; +constexpr QTimeZone::Initialization QtUTC = QTimeZone::UTC; #else constexpr Qt::TimeSpec QtLocalTime = Qt::LocalTime; constexpr Qt::TimeSpec QtUTC = Qt::UTC; From 31b9d92563a50b859faed81194314edcd22eb1ad Mon Sep 17 00:00:00 2001 From: tsteven4 <13596209+tsteven4@users.noreply.github.com> Date: Sun, 29 Sep 2024 12:56:53 -0600 Subject: [PATCH 10/17] enhance exif offset test --- reference/ricoh-rdc5300.jpg.jpg | Bin 87867 -> 87867 bytes reference/ricoh-rdc5300_offset.csv | 2 +- ...t.jpg.jpg => ricoh-rdc5300_offsettime.jpg} | Bin 87867 -> 87645 bytes testo.d/exif.test | 49 ++++++++++++++++-- 4 files changed, 47 insertions(+), 4 deletions(-) rename reference/{ricoh-rdc5300_offset.jpg.jpg => ricoh-rdc5300_offsettime.jpg} (98%) diff --git a/reference/ricoh-rdc5300.jpg.jpg b/reference/ricoh-rdc5300.jpg.jpg index 9aa1027cdb97b5675cab20295f1fdeeb4b025f2e..feda00cbd3e29cf6090dce1b0205e9633bcead08 100644 GIT binary patch delta 47 wcmdnJj&=7s)(z)b1jQH_7#M-r2uf>Ae!wEmW?*GtYGvH~mu3537Dl@u01;LTfB*mh delta 47 wcmdnJj&=7s)(z)b1VtDa7#M+A4@z52e!wEmW@cqzYGu^?mu3537Dl@u01{#gkpKVy diff --git a/reference/ricoh-rdc5300_offset.csv b/reference/ricoh-rdc5300_offset.csv index df40637a9..abac49f4e 100644 --- a/reference/ricoh-rdc5300_offset.csv +++ b/reference/ricoh-rdc5300_offset.csv @@ -1,2 +1,2 @@ No,Latitude,Longitude,Name,Speed,utc_d,utc_t -1,44.315150,15.265690,"ricoh-rdc5300",0.00,2000/05/31,21:50:40 +1,44.315150,15.265690,"ricoh-rdc5300",0.00,2000/05/31,22:50:40 diff --git a/reference/ricoh-rdc5300_offset.jpg.jpg b/reference/ricoh-rdc5300_offsettime.jpg similarity index 98% rename from reference/ricoh-rdc5300_offset.jpg.jpg rename to reference/ricoh-rdc5300_offsettime.jpg index ad73a08e22b322e1b1bd2b58c671367fb1912fd8..dc46e13923ca141cacb2f323424330afa7a252f7 100644 GIT binary patch delta 368 zcmdnJj`i*uR=xi>{y!A|=30@N#=zj~%b>-;z`()4$;i*Z1Z435aTTKgm@NQgw@uU& z=bgqV&A75cP~q%nTEmU^X!Ro5aY#1u>k7Z4z9ZiEk1!TwH7t3!E)C zi4~-m4dgr~waFV8l_m8i)qssI0E(DRY6GzuIe_eClix5}@iDJkzzTCd^Pb5jOgikk z28LD!1`M0ynGP^cW@MF9Wn*M!U79tW5K|4RdO2l>UK4LL<&K%A>ci+zCn+rK@w#<*-=iF{-6QEFl zBmj6p!2mEqU1T*3S~y5p*U~+{W9$c+0wg=rit*UxehIiuVDezZ#XLmZgI3GWc~An$ z5_l*r>Skl~zY-2%!qHG;hHeo#Vhr;E24U?n;%BKQw`S=kNml!f%(E38L9u(YHJ!Po z*@iB)`7NEd@s2LHHD#lS@xH2Fh7PK*O*I>OOH7$WM?3?AY})qZEIWg&kgKL|(%2P%%w&HNQMIJ4FRlRn4f= cnaOeEUK$iT((myKRWKSnyI1Geb&gL64w*UYD diff --git a/testo.d/exif.test b/testo.d/exif.test index e0223af6a..56f6ddb06 100644 --- a/testo.d/exif.test +++ b/testo.d/exif.test @@ -23,13 +23,56 @@ bincompare ${REFERENCE}/kodak-dc210.jpg.jpg ${TMPDIR}/kodak-dc210.jpg.jpg # test a big endian image # image from https://github.com/ianare/exif-samples.git cp ${REFERENCE}/ricoh-rdc5300.jpg ${TMPDIR}/ricoh-rdc5300.jpg -gpsbabel -i unicsv -f ${REFERENCE}/IMG_2065_retag.csv -o exif,name=IMG_2065 -F ${TMPDIR}/ricoh-rdc5300.jpg +gpsbabel -i unicsv -f ${REFERENCE}/ricoh-rdc5300_offset.csv -o exif,name=ricoh-rdc5300 -F ${TMPDIR}/ricoh-rdc5300.jpg bincompare ${REFERENCE}/ricoh-rdc5300.jpg.jpg ${TMPDIR}/ricoh-rdc5300.jpg.jpg # test offset option. photo has no gps info and no exif offset tags. # the offset is only required if the current system timezone is differnt from utc. +# cat reference/ricoh-rdc5300_offset.csv +# No,Latitude,Longitude,Name,Speed,utc_d,utc_t +# 1,44.315150,15.265690,"ricoh-rdc5300",0.00,2000/05/31,22:50:40 +# $ exiftool -D -G -time:all -composite:GPSPosition -c "%+.6f" reference/ricoh-rdc5300.jpg +# [File] - File Modification Date/Time : 2024:09:27 07:18:42-06:00 +# [File] - File Access Date/Time : 2024:09:28 07:19:24-06:00 +# [File] - File Inode Change Date/Time : 2024:09:27 07:18:42-06:00 +# [EXIF] 36867 Date/Time Original : 2000:05:31 21:50:40 +# [EXIF] 36868 Create Date : 2000:05:31 21:50:40 +# $ exiftool -D -G -time:all -composite:GPSPosition -c "%+.6f" reference//ricoh-rdc5300.jpg.jpg +# [File] - File Modification Date/Time : 2024:09:29 07:04:04-06:00 +# [File] - File Access Date/Time : 2024:09:29 07:04:06-06:00 +# [File] - File Inode Change Date/Time : 2024:09:29 07:04:04-06:00 +# [EXIF] 36867 Date/Time Original : 2000:05:31 21:50:40 +# [EXIF] 36868 Create Date : 2000:05:31 21:50:40 +# [EXIF] 7 GPS Time Stamp : 22:50:40 +# [EXIF] 29 GPS Date Stamp : 2000:05:31 +# [Composite] - GPS Date/Time : 2000:05:31 22:50:40Z +# [Composite] - GPS Position : +44.315150, +15.265690 cp ${REFERENCE}/ricoh-rdc5300.jpg ${TMPDIR}/ricoh-rdc5300_offset.jpg -gpsbabel -i unicsv -f reference/ricoh-rdc5300_offset.csv -o exif,offset="+00:00" -F ${TMPDIR}/ricoh-rdc5300_offset.jpg -bincompare ${REFERENCE}/ricoh-rdc5300_offset.jpg.jpg ${TMPDIR}/ricoh-rdc5300_offset.jpg.jpg +gpsbabel -i unicsv -f ${REFERENCE}/ricoh-rdc5300_offset.csv -o exif,offset="-01:00" -F ${TMPDIR}/ricoh-rdc5300_offset.jpg +bincompare ${REFERENCE}/ricoh-rdc5300.jpg.jpg ${TMPDIR}/ricoh-rdc5300_offset.jpg.jpg +# prove the option value is handled the same as the OffsetTimeOriginal tag. +# $ exiftool -D -G -time:all -composite:GPSPosition -c "%+.6f" reference/ricoh-rdc5300_offsettime.jpg +# [File] - File Modification Date/Time : 2024:09:29 06:32:54-06:00 +# [File] - File Access Date/Time : 2024:09:29 06:33:20-06:00 +# [File] - File Inode Change Date/Time : 2024:09:29 06:32:54-06:00 +# [EXIF] 36867 Date/Time Original : 2000:05:31 21:50:40 +# [EXIF] 36868 Create Date : 2000:05:31 21:50:40 +# [EXIF] 36881 Offset Time Original : -01:00 +# [Composite] - Date/Time Original : 2000:05:31 21:50:40-01:00 +# $ exiftool -D -G -time:all -composite:GPSPosition -c "%+.6f" reference/ricoh-rdc5300_offsettime.jpg.jpg +# [File] - File Modification Date/Time : 2024:09:29 07:09:20-06:00 +# [File] - File Access Date/Time : 2024:09:29 07:09:53-06:00 +# [File] - File Inode Change Date/Time : 2024:09:29 07:09:20-06:00 +# [EXIF] 36867 Date/Time Original : 2000:05:31 21:50:40 +# [EXIF] 36868 Create Date : 2000:05:31 21:50:40 +# [EXIF] 36881 Offset Time Original : -01:00 +# [EXIF] 7 GPS Time Stamp : 22:50:40 +# [EXIF] 29 GPS Date Stamp : 2000:05:31 +# [Composite] - Date/Time Original : 2000:05:31 21:50:40-01:00 +# [Composite] - GPS Date/Time : 2000:05:31 22:50:40Z +# [Composite] - GPS Position : +44.315150, +15.265690 +cp ${REFERENCE}/ricoh-rdc5300_offsettime.jpg ${TMPDIR}/ricoh-rdc5300_offsettime.jpg +gpsbabel -i unicsv -f ${REFERENCE}/ricoh-rdc5300_offset.csv -o exif -F ${TMPDIR}/ricoh-rdc5300_offsettime.jpg +bincompare ${REFERENCE}/ricoh-rdc5300_offsettime.jpg.jpg ${TMPDIR}/ricoh-rdc5300_offsettime.jpg.jpg From e9a8ea334a8b7497c4e13e6eaf74a1c6b030dcc9 Mon Sep 17 00:00:00 2001 From: tsteven4 <13596209+tsteven4@users.noreply.github.com> Date: Sun, 29 Sep 2024 13:06:46 -0600 Subject: [PATCH 11/17] add missing reference --- reference/ricoh-rdc5300_offsettime.jpg.jpg | Bin 0 -> 87887 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 reference/ricoh-rdc5300_offsettime.jpg.jpg diff --git a/reference/ricoh-rdc5300_offsettime.jpg.jpg b/reference/ricoh-rdc5300_offsettime.jpg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..07aefa110b4ae4b5c47f1342e831d2098f202c57 GIT binary patch literal 87887 zcmeFYbx@qo(=WQX1qcL!OMpONf#5E|-4^%Yu;}9M?(XhR2(BTx6BgItPH-o1$ya{w z`&OMgb>**9b!Tg~d;00=>CaO=z4P?$KF>d|%aKdFMK=b#O|EmE&q9P3JtV~RQ56NFH10-Mi%j$pA4|B?H~!~cg5jYs&;+}L>Je-OSHh)4N{f3Xyg`X8Otc+bDqwR^Fj z8z20Khd~Aa;9lqc>pwFSQ!dPZ&CUG}awI@5+`o4L{!8xPxX@o9COiX`fz|gCyvn8=B3x{|ATv%5USTs1CSD0MHWpr4D<)o9V~ zzJE5>zp)5_|C1tKBKHr0mH)&49ltLb0>1DiqW+SL{gK1}6_0=9?Jp7dCu{uSr(g2R zUpg{>bkP5eS@Yp0B`=iarDOg*{+Dvn zzKri*`rCixe{}xL`x9$_D8T0>;M66Q8MxT~dknu^fc*y*Jcyg?&*;UIm!1ByQ~u2Q z)1K#_mjHnP{MXpH*qHdZZ*YkS@QJDTXsF)3qmp9d1oElNYHO*=s(?OQg*$yV^)~~l zxE8qiM<=9brt3PCHIydTho__`!u)?V@Z1ZN{{jX9=CAg*Z!cq5ICum^BxDp+w3pls z0|y5S4~KvN|B`WGy#C}Lcq|0$cg#YFZC?Gg2esOuol)|;&aY2)(RIG;f{wSz# z@$d-<-&50kprvDD=iubx<`EGU6PJ*bl2%qxRa4i{)G{(QF*P%{06RE3IlH*Jxd#LW z1&4%&g~ul(CMBn&rlsc>6c!bil$Mo$t*dWnY-(<4?e6LA>mL{#8ir0y&&UR~eZ-rc_>qrc(2y#I~pzu|ews4%eb@Nn=*fAGM-y8Ho)1&{EK z84+7Z3CRHRhJwWp8AmuSul73%B`fF@*U)|v^(__K`unp#kp4pSe-DuV|0_iQ0rVd{ z&s_j4WPs~SHidZyfW?A=!-9EU1iXTK**I8mSO7u5zyskm`4i4|10C{E&#Tvfosvw? z&~LoMj><4f+o@0bO7*+fF5&N;DjbfQo3LTR@J^lqF`G~9tjQq(~M8V9A5JpVw zt}2=B`t-ZE(j$KNP6=4joUilXXuvWh$;917wyw!)Ifue~M_=>STb~)xN7_#3M0*}| z<4#WczHNe8D8_{He!61AnauqMSz+o^Qb9;|;DsAOkf})6J3H?{A8D+#Xk6kP1I4v_ z$w@i>4fz}F93kM24QC{AD4)P8-MZ~L@HTio{wtgAvM z`(`n*cv;Iu3vJ=VRQS{vTa1d$3_YFE8jUuMs9JtmRowgBDq8!9%rssymR1k1r4)Ns zon9601J^h>?|n@L8k70FH7^PXqKh7SPG5iP`#rY3>fZ03P}!yAqfpPLUQra=$xK>^ z7?H%5I0;;jd~j}B9>W50FFD|l~|A2bOVhR$>R z>Og|aR9OO@AR`LXKS?!X8Q_gM^{Aov~$)`S0IGYpC0yvDg!l zXN%KmYvfDLYyrQy=@_3ge?L6b9BLwIu*_$mDrs#hWBUO|T;zR9Nz+usvdEDrW1G;9 zK9sYqsqCWW#fIY1-uetse@6vxvI+z2lX5(^u>S!-HXUAjm=WV>%>{i`ms)t$=oGgR zQ4Ia1Fe&wvRD47BO(T&w->++rIouwkbcNjDv?VAm`0e8l8$*T9Ok!Fs-`=CWGtV6& z8d!~e2Gs3e72%mLjXKQA{21?uc5y9EWoUgZ9ld*>ARoLkZ;XKI(E`V2%XEvEm)J?oZfcc{fz+VU7)KT37|u=5ZxLGbz8BKhKp9VY z;C3Hw?`fzw*xyVJ8Sfp?0|&t38gK?ueChGATE%GoHRBY^p;iR;aJx_ zhiAZSu^4T*;^g_T3+8F%lHOI;(XY1_niUu`?^N5u@*fh=505i_t_}!X_(xcs6U<3{ z)v^RW{Y-rTT2D#304Nab+#AIOlfk1ml@;4CzBTcyg)yg3P8lwifSoJ{3r~Fb(PAv$KNO8z;6GGMQO@RdxUNyK z)a;P85yt);E-SIDEp8Nd*gv0OWf^?K7dvc^xt=amB9Ae@%8glPbT=DYTA9!pC`}ml zJIkK+q0_4n{u#id5^S!B^3GAIUsFyiQ@dek+cHmT&a1^MH;D4R1lewS8pC$lWTX9FwTFKX+C-G;Tn~asAuk ze265cboIWOJe(rYna_aiL}|V{wK-9|j!XIhf|eNW9r%kk`*Csi=~ech;w4C=Chi{h z`}R@>VXGA+kZ#!meY5QS?FH}_;m$zP>3Zg=m zqbPt5nGb4F`*^e6R8!T2+$x(pBpn`Dcgi;1Np>OItIqeE;U6u&b->uHTp-~K50Kt$=9xaR3=T0=dfh+|Fa zU!C!b*2eUZGlk>WmZV~R+pyi&i+MJ0`pV++CY*{Em^5Ome>%{i+88`Gna(tQTN%N*EGcjxQXd@K+eLR2Pl=E6I?(Y6MZF{j$)L}2q3Tx}_UydXQ!+SW)@?4i*dkdp&gD=Qggf%mmr@d_<4%^;#* zLx?tn1PvU@Mj9xwU`W}P@u`&j8Xg(si5vd5k6_4~QM@^IcvKr@u4?AZnf~VkSXm%RHcS2A6a?{ZO4_QBf<$mCRQ+Me&qY!$S@PS6EH#yf?Ik z5kK^#+oUImhkb&Du|f{DuvWZ}WqSAHrY|4&v=D#G9yWcf(W=z}1YS)T?Q7U`yAhn- zgt0d;ES*z$P-$~~A@Mhb^Esp3BpY=p9)p+m2f77Nqd5c*kmlEKhiiEbwYh)mZ6O)X zFe2=Jud3MQ49i7)Q*KL0ar8cK=s+bp=c%=CRi;%Jt#hZ~z26r!j2YvB6RNG8+!LM0 zwfZ7$0M_|gOn=3)HP__|>T$LDPkUt?Fj1@#-1dm)*e&ME4y&c0S74(0fDgEzRZU8c z-j5i}4;V{YE*$`;GP;pz**kwd3YPr7`nn)_X!kIjfU;4kxk7+T`B6|S^%+3#@wjm|kQ8tdqCK#}rvhY}0}#a;q1KMpFPzEBBLsYvGmt-)nX zk@VT*luOZxJZBrS(Rd~*lLI#{id4!_ph2+Y?&C&YV|MF&8+ARU>iK-VRhJ9hJYu|} zn<reM^kK6_2waQ81eVN?wVm#@?45$6Q` zzOx%1Cx6)V>v@edHsPSz;3m#d*D+9V^)3v84eK@`C?XvxjyFfJ*}++vQ|F3SPDdIB3itv~=dD_gT)s_>g|0y~Q<>O?rjz!+4As81StGTLBYl3Qi3BI6ao}5s< zzmIX}@Rrr{BHIyiUT+|pgMZBsI`{~D743Sci_`iTmOVJx{`m$WPM*i{US&4i7?EAf zW!&2#w)1vh=^5}5@dZQ+GkAqxL^UTA-|K^dMTacOAfK5OhV0c zW9(*pq8K0P?`?s|!5b2uO7Go@mXzKli#U{VEw*P*7qYc&o0t*|b&Z)YP(QXMSyz=( zNWPpj>F%!tlLYV=)#C-3PK26aApb+gjHa4@Kuiz-$3gT-LV3JiD*0mLSsr2ZNo|QxBi3^0s|D zUawuG-=jX#QVr!qb9t{?WmEMT#TgF_tq*$?E%#%Pu$WhC=1 z2ssQ3tK|iSw0`bkEn2Ie|1=eO6_-iYQ(GFzJ!P-nSwu5Z{-c~@!k#b40;iM_AE5FK zh!XQE(GhAqVACykXi=a%ptZLjAF;%^aWOnF*BHjZ@O|=6%ljm-{MHzr&BK?Hof(R) zXMkJQR4N>^RSnpR&Z^))-u7jS#hxtNa_UnM4ZqONU#Z%%DHs)lkH+9)_ZW$cX)g4l z6JH&5FE8!(MQRX%Sd;X+8UzE@eYcd4Xr^}?Y0{k$+0IOCrBsr3 z8pdi|jP*}_g{Ov3Ch3Ys%PdlZu=UU-jkh%pw$jN!OAE>*JBjxLd@L-K%VyD*0>GkFOZksCe1 zJ_$@VCCizu(OQBJaUm#_+Uzs#8@S(X~G|=Q7LNph#I32@ zZhi+PRRM3+`EqOfl{jj(9jmi*hkKBA%x#)h(@oX%tjwBsCFC~ER>e93i#ThgjA1Ae zNUF`v);Uoo;~*P3=pArBjs7|+Ezz^;X6`4ZS*lwFaY)wTp$_!q_u&(gsD~TD z#m6`ZrikQ&JmV3WV6c zGB=Naj^C25YW1+J5L?T}@DRJ+YK&l^4G^^1pc@iazjM{3zeR`F_46iY3vJUpLo)%~ zC1HW+ojH8~Q2c~n=JU!+TKnsxJTd`a5@Pn65xbT~NDG0|&saGYg_Z7IK7bsR($H$o zvUbhG*!?r$syyKwa7EEn^vHg}n$th=yzo-969FJ2A|fFoAR{3mp`ak6zQRF&g@*Qu z0Q(Il4hbO{DG4DlF*y|@4LJopB{A^_PFi{Q4ds{!W=2Sf31O{f<@_P;IVJ@*0{{tqnYy|_*Gzb)zg!S#P) zS?_<;@XnMiur}Fp3?ul#bMwEDP6-8uATg~L7w@>feyNLSDSDvN9aFg0_Irc}p}F1O zDQruy-~lNfUg@tE95It^l*!@&eox74$qNQfjtU4<8erZ;k$nz%n4yUiypgvMYkvl; zusNV5MG<;Z{oa%(bcE~p7-uKwJGr%dwK(m7M80lhyHb8tAO=2A&aJ$_?V1?&p@UZ^ z=tn31KIquGQ-i*fLoChGBt33aVLDM<;Uau zruezuNhunbegu!Lgw{^JWJ-Q9*Ob6ip$#GyuDe>@&bCc%$0}hNA8rx2F7_g>)(p6M z`MG1suhz`O_dzxExBJ%L4Q${*X;~-)_{+cbg%HO0G1xj^wDCEYmq{zm z1R59BUbGNTpEm16`KE^j<4+~baj~aXYG9N1@0HU=YTT(KW~vUjTSPWdok_0`3x!L^ zMoSiFCwBKeI18F>W-9BdnQ$G7MVQgK6NU>LWNv)bu4fC?VhM?p%5-GU%`=Ok0nE5G znhe2(7ctd(^xOw%94OV1#by#-3cfZsJ@4k1o`(H2)aRx)2SUcLQ9XUz`H=x5&Do(J z5e#NvRI#q(j>F4>Q768vB$1G(O;*yqZYdN<^X{ejrL(1mdqh;g2MhGil8|;LqnqCV zd}k|i7}M(T?R!VAs*`Eh!49lQYbfo1sIhx=z~Chm_*R zlr3${S0mwCinK3hYqHy_gg8nxxYf4PX{HM=7KBkECg9pgBA&ychHHcqUQV&TD-mDP zA(T~~W$7VTguj8nR#4m!&q&V%voch?Bi@A8WwTVOLyJG=E>iY65vur{0Ue@e#t^u7 zT7T2S6n36S_h28zZrHP8{uG=|Q(j?YBqL!}T$_`2$9~U9`)R03S5S`iiz%_nIGFCp z0=Ke~)EPb|xt>v04Pq^8Q_%$KGeDf_x6I7mFOIFPG#XP{If4hVN^Ygg6-V{^_qU?p z8GU4%8mjOUZA|+`*SHLdtmddB*P~UnpD)5SoMkvSzQp0yM2JB3C-U4(P%*Y1NKpG# zxa^EE^SX)Gg-~(vNDix;qn5JD zQd&TN>#61@|Mx9y{VpC@7{RY{XMB;a*KF$xi$wm-7`Jkoq}z%dj?>0TRzfX@|2WD zb{8!B@U#Muij=1%er-MjTzz;h&1!p_NZVng#Vy{Zu+4T8MS?cd_4^apDghQKMQc;` z2-HY;8&$%;X0P6&WWkVB0B!?RVxIKopKxn7-#i1}z;E8l*>hskgEc2$TQt9k7`v9J ziZWaWk-LYFWNbtiS&ZZkTC7femg3M)_S$|Y{0}rsXtyDXM z8z^oIZ-4*FA;0=wZ7DZpP#;4i#8nYtiAJhO)*ZaK;4gK_qv1`X*~z&${4K~_=nPIO zalI+;26u3vWT|-@K_f=8fnGpIWjR|A~ z+}U96O7P2nA5v(UW#~1#oql55r1GxN5$zb4x4uGsSCAt z;Izc8mTUv32gmGIjAmhjKZx|SI?UzWuMfQFLf7WMX$3}M)-x_j+?+`RAJh^?v_g)K zczC@X-9XXtgz8=aBD=JP3e3K6Wu>E(BnZI4PNUcE=^`{FWz@RC^#a|oLIZSkpYCwh zewQ{^ejQ$NN^^;aK z%6%+%030Cj37xM62piIuVH@z)f>8BIzCDeEb@7 zf;w+Ra?@QU&K0c2KacBJi=D|$CbaRPA2XX@A&cyU@Dt>!L@IVC)lxaKJ|jzFOfL0n zq_JURy{-VTif#i!hf=^t=~6i+^Enk>v4nUQEH&H%9^NLtDX5|WbK@E((=SeT_)5Rm zO{?77lriS`5br_iBd3)lB^Ng`_*))EpvAxO!5;pr+O7#b2ag1}meH+E-R;Kq?P_>| z4g2)e9OumQ9)$a5Nv4_2lslI-AKzvgo3EyDwGH~k71%UH@KNJ^-`5rRW@97(o)v~~ zk1TtbSrIN;OJfn2Dx@yVe(Nt>iCkJyVUNy0w~1|Nc{tW!o);}qt;kR8cLFckWPylNWy)uh|zo*q!k4T zh@Aeytu_D--0_v%vjoY>xTTp8H6!MA+}WUE1eb^DN4u-kjqT*}_sLcMQoST2z>pXj zfVO6c!ATh{;f`vx&^F=DeEKv=)Py?{=0TA>@ZOH)s0)%Fgt&oVB>_8T0)!bXPv%%P zZjVNAbokJ}bw#hapD+H(U9CM{!USbNN5z^>t8d=0_G5MAShFB$QlR01^vP$d=mUus z``#_mB&3C`n8+Y$FVO#KJYigrA%G zu~gNVjK~~VNp~zxV=kIzL=QL z>&#sSp9=fcDGjab6F-oxdc^FVo2&m`{L0~vPW)y18$2-uIM{X{CFci&3E8V)}FApM)jN4%Ls}TMunX%+g<=|q=`ru4hA+T$lgX5|E zayl6pZobi)4A?{pE#Ptt>$|?wQ;*p&d4`{zjRhXd)93b!z%X} z<;GpOk@8jKx~BH{wWn5% z<>)shb%WcS^%i&i5BF#K9Qge_%AQ{^rTG(nkxn}EaID9$Wqjwi(D58NR7$MIG@npj z=t}^;c~qq~zA8`c6Z8P^TU>nArP5ely8uP_^Qx*Qh3%w3ip#P0QpBLI;QFNN@1C!d3TD4v^!}ZL=|dH&KMA-C+I}X+y-U~S0&CM z5{y+kuyP3Eg)S#Qprm0I4wOpqp$e*a!mm$trPQoX<^+kn#y4tE z4C!}ob!v`!2CQn;az;6!FueEM2*GBAsu-4M1UjR%NNElD>uP;lB&N$Q&b72iI1!(} zS1&A1vL+51Ml^I7)3lT%{@h#W1=I%{98J(mq+>h3)h}XB%iR8|(BbZw&YoG4ii26C zp3w6a8}rJQZANTfC-TDYP=UVi_u{YOQ?CNrc}ey-nxGYeU<_VD&oewq?&X1fZME?C zb>xsf8M0tCkr+<1X|-N&5<;(9p9ZQl5G`qI#mc7H z*y+HMNVDPZgYX>Z2Cp^i0aM`k_iJq;TxMxK%yz{_V01>x#OYSV9JO#yp8-nmhI6!R znuZ5XmycF6je!sgEKH?usXAv?a2!m@cQ?b z1xX|?9#&XB|9&iPlPT3^dQ|HBg-dpX0dq&wQzMV_p<} z9`hB`q$%?xfp*T6v2EMK9O`XWHYF5|_e8#{2CiMlGk6L#y=pci*w^KZs!1N{X_A$M zFN3X(Z?l@Qi5qm)d>mt6;x}gh+Oy5>x8{7o$M=L zZ-wri`C9s(34UPu`lARVPK=hy%!0BzF2m*C6}45igI>sKsWd{s@INcfjR>%Nkvx-ak<*7xp zZ|@xym#ho>2gOo>Bvt+K9JpU)Wkp_P@+=+mYyy;->B$9Q&i(urSNZc22pf%Li`W-~ zk?P?qHECtT0}nGtr1Vx`bqVe}Kn)db=h+a6Uds}Pgjv40SmkHKrV~RVqvP{gn<$JW z*Mp}rJFGY)8e4GR*Ld1UM#yYo6bs8w-+bKPt2@LwTJfyGLuD<__}3>*es?N}<7UTN z)Fvd7rP=#fQez-VbyJnub7A`f$f2AR#efcIMSny<)%&DMiEd?o0d*$^{l~0ci5>k0 zTm8o!$bTp!c1~H)+dQ2(^EnNN=L>3A1Sp^zQ zAIgrlHrKntMC#dgsk_D3B!FJk=V`tNcaBf~1UD zehex5!|P?E2E<6vIn1G02!x4QDqJtCjJucu;^UA#eO4xoG@4(27tleVcBoUGNhVUw zPP5$EnoIdAwJZe`cm=Np?hib*&?84M-4i>qsu;2vQ)%0TKr&nkip?FNw_TZZ9Sh$@~XcUNkt&A+lbYDdm9oJl-D0dVS zr)X#+Pv*g8jj0Twm&$HLaXLjfG51RB=1k<;`m%+*0CsLfuRi&3|1YESG>$Kcn|Gs2_S;2z*ym>!R(bXOLe&scJ_~@4w+7I~E>9heK z29M=I9xN)aZgYlg=`Z&+TaQDVL+odZdJVRRqroWlKlrTo^}Jf>E=05SG>ID;{hSNs zh~SQZ`EQT;Q2FZ{ za2F1)VRvAM+c#QxT^ET~DtQPOlWbfqThe)~sn?QGJ=BWs8AcJfUOaGB{^6j$X=szg zt4?2Fv4V3sz2SsrTc?8y>;qXDgM+)^hcYn21;?h@f`_0dD zRkb41^V4`)=^VjG!Uif+*I`wd-ol{qV=Da4&mLHsL-rYtvdE#am3`Fe>sez{wFnw6 ziJYAwdwQ(}FY(MInmt|n8t*Q<>Bji>F1+{xyWYm|wl+21W5w6((B#l$5h7#4aB=$H z^kgCzizEUK8?G(YDt$Q)bh5G7?(%(Jgsk?+x}h>7Tzp)LT9Wc1lRd)Mn5nG$YDf#I zmz6(RbIS^JeC0$N;j48`&(J5^w`aBb{ki2Kh#vU?bF4 zd##5`sjbI*FUF`?@R!&->c0@Kf(qTtTcO&Y67(c6kQvut6bJ0iX}8wY1_G?33pO6` zC&(o+x1~8di_EtZrZXjU^jtK`k2%}5>2 zH#cN$v1UbXJC!>!KMH2+^BZvGqC-B#n2SU=?0F;M&z`9NPO1h<1X$NwFB`Vm!o@p{ zoZP6@=btDJm)~IQIZ>B^<(^8ujk9W@wx{Qnk*{Dq1Hf&Eo=7;HR9aT&M=>$&?#hV} zrNj#p_)Fa2#;=5AHf@IRSA6Lx7iIuQy?S1&$aHPT`80k7t>(+n_7RGJAJA7nR)7V0 zH0iE6EMWDJF97eP9Yu-OqnzuCsrFCLfPI(UpZDsSpVW`xALfWxLqz3=p-#aINDW+w zZ7n||H#dsN*Fax% z8s5+Iy_$w^ZzuMXEQRU5I03~|>Vabeu>!U7e7tZoO;RJLetlGhW47^cUXf9<97>bq z6?=ZzxBPRCV*q+mC2zda%q36{uPE<1|97WN}p;Ws=rZNnH!yx{c43+I`{p(<` zAe(zQB*8^(Vp9@1%h!t3K~hy{B|I^Rh6^VerZ{l0Q%Wrn0l;YS9k4Gs8ElpC>D76c zCzQ=&0I?95G|<4oHM~ph`}!RmPLajdE2S|eBOZ|TZ?OCT+p<{^ETOms^8n5xh}av4 zoG4~I5+V;U%<>yICm>z^p%QSS&@X`#lFNpCuzN~!31YDx0)aDJ1r-&gyEW8n4wxr! zFx}&$YG^+(pM)n*Zq=o03x^&PdmFvk*R05T%V+EgzGjp~A83%E&fvjJe@mvM2W|TP zlG@{k2x*B>72GMCf-Qr!GjK(w&whaJ5aQOOU?LxfCZMTM3Q{qT?4tE!Tpdd7JbGTj zfsWIZkk#Jd+Vuf&wqd+P4FB*&gM;jYG90vnV(GiP)5=_8p`ZHhtqHiIMdSFYaLZ5l zw*rGqu~AgJ^5PELf#o#it%L0rHikVHdz{1RxDm}OW~pg0I=L&ZcV46$NYeTO98_nz zUIRU~)&cZc9w4!G4}2o}m%_#jgY05s1gu=A0?HG%@kaU14Uz#02!2#s$$$cRL!G8>zp zpb`Q)h;A?qstr*Fq3528qeJq(xH=;pD!=dTf&jgpGP(sKCk^LRoFc>J#i&Q&bOyh* zMxMQwZ0#G)#6~W?ZxE~1*9uskNj>%?WmWF(jc$l-8guqG`Cg%@d#Cvd6ZcIKl>urv zyX|B;H~Ea^w=@=u0L@0K3S(vCZw*OI#44q7{7Q?vNYkSiuay0P-s4;KM(pFdayZmT6Ovj;Ju>S3>z3qH)2biL;98rDbcp1$_`{IdHV6F}GGc*RkH% ztUeQ5oYoU*yJhMtMmJm!#YXi=e_&3;=oI5kwR3jEPx+Gi5|frl()J0X!Z_6Ul32^^ zX~*LPw_%{CG@~JQ*)A^VtVvY8!=Z2Z4eA%Aq}kDdx>oa@rSPd>&|GM*8o4d?L1WdR zSJi4OnC0#xT0tdq*s(Ygc+}q{*of#%D_wN>?3lXls=}7qmRo{kU)&u_LVb9cryXnJ z4el;QGcb_jriHZO=Uo^>Cx1o!OqGMc8t-hqB~1Zag;0?LXxxDc;DlQS4{IvM52WrE zWSlpvvexRH1Ial^t7nZGRs68Y!(Ln!T^Hw3Ygg=J(_}6iyeuc&xJw>BczKp{kW3{a z*Z)#=HxuPXa-{UFsUZZuH+L7>qJV3VPQe_$JXiBQ_2qfCwqZ{*-!Jq~t7k)Y*fLL9 z9-80sNypyOjqjZqg_#GORQ}S_z7X!L5HfPR5?%B?b3Y+*Vm5Lp<96nn!UYDLn8)88+Dtu$8`l zL`er?C!hj>YBO=iQLP!z$z{6MRGEov`Y|kLt{gQgL+My!q}Q$KlP{D$%OhGAv)fen zebA_|hC`#VFDY{JK_zF{xHSfLXJ66Zn>Tz}WOC50>Hf{ix$5SpPSRBxBvULPL)uZc z9D1CH&4YS3wGlLzQAQV#lipF&>mp_**<%ElOSnzw2`l?~_f-ZOU)pj-tZaJXTR0Fx zfxpwrox$7$t>t4jZ*-;a-(j2D0W&U4y!=q{jj@bcjPT?J;wYw&u7sbs)5zx2@Em`>&p-%vtaqWetJh+6aGx0%8rn;9+jORvWb3;gTp5>>A6;Cey4YOG5PQ73 zA}2$+_SuPj0HBSV{gjP*N8>^d5&3RjOQFE2}8}ZMq5mO*NAd)q)D#^HU6C44sI<|*HT}0yTc@J93)!}w0}hm}%5Qq6Vq_$vt<0?Xy-U0# zTe{v-#7e-g@U4W-;E}=EsYNG+MB@9|&|oPH6C*W4F;RSgsz=5A@pSTM+7Eu@lKBKD zmxZfPVn^Hv>ZZ59+F}}*4)9#`>9LaZwHjV?W^bT5@}|ORa;A^Mv*Zn3mxDAW$VZ`X zj%B023-K9G=HgPvZx~x(qFPd5rD+Q^%ytBLg$*77Ga4FwxPtK!TIclM$|z@lwTiRu z&4j1fV^w$nJW(0ks^{%Bs$mIX*GtP_Xk6l!-=oS)=lAcepvKw(TiC`uSck^rqq+E| zFoGRoXQnNA?Dy4=ZHPIz1!hECa4LttvTi`t*hW65mp}|yIfpaVc2kk4rnDfBl+-~u zc-(39yFyQuXR2C@Huk}7xKV}N27R)PXGRDT0@H)F-FGZ-H`;#tASx>)@;Ms@a+^{? zIwOn5u}9bln0`*QxqT(u_s!K~molcuicKM(X|}oYyX-X*9m4HH`Zd%+j;}~Dz}##o zl6P`%;WCDBGFqx)j)1|=O4G_@JvT;K^_qUEMCoX%J5a{CC(TS1^pfR|8tJ~Z8lAMA zw(L~NU#sn-?o_C0NK|6FBbbPxsAd_rQ|-w>f7;-ci$228IO7$0de+(0*hJzVs&(1s z&8Xw7vl%-VW6YBs=)xk=kWXZCdR+rjCP#r^?ssy5S@u4f^daZf;uiyFJ@#vlllFiy z8M0n}hAqukvR{#}-%fx7FL?;2rBG~9d)^AHVcyUD*2TP5xyb8r`}D+B4f;sDAHNjg zK&}z!;dP+}+!&+Vm^Ig0vo=PHoU%qMP1nn84a&q*XBp`TRu~1lJ@N$;keJ0D696vD zs+@FbDZ}xr3jooG?y8$UmhbC_o3N5lg|tijjN5&0hZEg=$ zYl~${l#VsU+UMs$)+>sWiZum@*6Ga!&iqshJsOl2XD1E=gV-zoW1976kU@5)Ay_FHt*`_t^= zd~qJfKvCyfrA)$+X|@)t&zS7>wXBZIg{BG9IM&mjO$bnX!Xb1ju$$~D+3rxkgvfMm zzQNs(+@ToA#dil>8}&$m4b)$>zvQ&q2$i3^nkmbBhHw+$R~D!xJV-7;D=g1rE8{qk zI(UbTZWM5}EYUKI!mv^frHIe_nd2>GboHn`cx8l_O(hEv8?xZKsr03LSZxT#(XICD z+-mU`TMqRh^~wDvU3cRM!bUWWbY5bzEZG?7pa*&Wj>CMy{;ft$Ie~+1&AhNQ^)lF8 zNn3*qb19h1K6gCdSRD&a5dz+_)|s#SO%$d=F-2})`=zFn1azYZ6=UdLglq+3`UUWl~(4ys4a6 zzeEPWyE~5YMrc)zWBwg<)|3)cCndJ^SyfY18^uXZQXJ!8wCqzRiY5=gtv5 z;snOYhG;HAYcp#IbT(AeQFMv;2&-JMU;g$r`z@mWFoG7nmp197&!G_ydzo{bS@i>3 zOWYjYNPOQcELT^bJQROj92aza?WZicRGB!-tj(HCsF}gd`PTEIPd(Z+7)eNJVYN37 z-XTCPSH{#PQjKH7bKtiKA|y}3H2mqUhFt%W4Wz(OhPQ3U_xs~-(u!&xFP zHcWJwE(>(9doF2Imr)5HAGTG)mJ(p2)CX~Q{3!r5yxtN5BOffIZsl-tgcvGqw=pd1 zh&i}U#3V`JW>k$3X|B7c$FrXwC+4)fRgQ_B=Mt6B=@BZzR*d1Zwwo~!*bS}bpO!007cVI@=y;_F8aASnBJk!-8slJ z`H7TZEofhiwy1!j(i$y|=l5WOh6#EXeznbSZ-+5Ch}$k0%Dl^iZ_U-hqO^)zYn6b5UgmZ)3QGV1?9n_u(FpOh|W5 zlYdNWZl^0@wcvEw&C$xK3fjOM=P`K6PlJZFnOl_u(|BwP5>(jMXp}Iv0?Mo(wahs& z&u`wTta~%{deYK=I^*fW-h+Rn z9?%8eAiRFiXc?*FHtMQA?9qGe$eRDUh+vpJd)Wp=SS_lUt=H~ouLuSk*wT&s}Yk(M3?Le=XCiG*xcG~J| zTr`qgRXNmaUNZ|S8*tJ6m(besx4t7E6frxj@_vO44;Xw5HBJD+CY&fT6z$|c6dIOW z&>z40Y#o_XTJ_%lIE0M6Y^Sk%x8;3tj3o@I!K>A);%{bAc12<)Y%DaZ4(ZuMW^umD za==F3uf4}_UYTYPODhbw6mc9>JK{eRG?88rwx9HKOcjXg0dTp9qL^Pv3T-c? zXW^G?EzX}C0*u*9UypI%Pf{m#zH0czUvEtK1z!TfZx z!UOzrT9!j2N0COWzO({ao;)7}gFaomjLa@`uItJL1sAw-0;`d#1T2hen_n;IZ`}}2 z+WpwbCIIv%`xJ?SmI{*#eYz~ajmmP1?JgF?ug(lGSHabGrLy%u3^g6ly{&^TpV5UM zUU>-&YK+h%7r;T=rOyu(UjCU_i`KjmQk-AAl7&5VD>awnZgINExtvNSy$-tGSHS*4 zrj_O7aT^VP98)FN?^Ls%1_}BMZoAdnBTH06bxlxGxC6`S2lOq*M{AH(5pQnW8huUa zaeiY%y%s#QHj8@_B1-Ss!qV9=&ym8W%oQhf7bC6R!IS~n_P0c3EX*pbbTOoz475ej zxma)vQd`5JGP6N(M#8srnCl=YE#cT1l0r)Yr!&YG5vf6mly<5l%Rfww z#fug_sm(wZn6QLvO2UG#RQUF=-l;G@JI`55*G0OK)XE`wc&!?kHQTO@J60dtgVpoO zcBScdXhNr&_wNDU!2S-jCncgAFg~^5f)Dn^bb3FCbsZwi z+uKYGWanw2$yjlV=z9l?q+87*6oJ=tb1aNI;1OL6b6d{V@`hCreA|zHE5uKY@7S@H z1Y%QX;aj?Y#89!v6t*RTt_~?CinBdZHHCcTRtzVQu=K7g;=Bsp7ZSQCb(;!t+N(w5 z%`~_&!7};*+Od3f;#*B)Ls(#u$q$gEQE^!E-t?$`a7V2n;PMEkAsMGFh>qu^YWl3} z;oUmQ0k`*HlUaIyh%ans5?miOK*kTHcA6%IWv+O4PnKCwGA0i^)_$+xaTJ8da+?p` z=dE}Ys!+41GlSiah2htA6-ZDn{{WN>cdn){g|_o)yO#d|{VQ%t_RVs#+P{bO zsG0Ig5Zu?I>AJ?9G7HAMRT#@IYpSfL1ihBVX-0p<-0{6e#$7h{TUkfUje}cy9*3$= z0lJFW%meuG#X;hm_%HlJH1M3pTeo`k>mc`j5U@=sWqhC{3F}>TB;6%-xy??DWhSn9 zMyF_HTm|{Z6@hVV_VVnJFh^ru=Ba4*myVD3ha`F$z}2+)jj6q9fs~)QQ-z<|W-?lx zSHm1MH<9`fYo_sjof)&=v~V+ApTkEG++A-VD=tQBwebbaQ&^B4ScS$jUTo?rb>^Df z?~GjO#iNhXB-2tL*D)h@#TyhOnbOu3|BOdszJyH{Ge87FvS(6SkT*=(vkM66h>}a-` zZ9a@|F#dA322Wb&H8*fPrvwl?*F$S}nsh18oA3`qeXZajx$&FNW_-=hox*=>G56IZ%{nIGg;E9^4c~WitU^Cl#c=T zM?GP8Exp&2!{s&TJ{`Of%Bo1gt`hpxs1mPg*wF6D*mKI((rQ+cDq6&9ha%osDC@>6f$_$WY&8LJi}JTzQ=B=YbS`Vc$1V1CxFiwM zrIIyEP^54v_VOyLaxz6W@sHSpr=D;r8GFigFm={CBI#bhLL#U`g>EM<}<$y&(J zwN|s3NuB}bwskE*F9C7fb*fOQ8rr=L8;hl;=1+!nnJ+v?6DhzCUB8YrtBb3Mp|@|D zQnCC7!~POzVPzW_^IhJc@IQ$pjz!!yab0qaNAR;HDBWD}`|C^n8ePwjJ!y}vPbw=) zG7`HVA3}{6?#2P_UUPPKMi5ofTXno)=I@b++!b`BdfvuHw76)gh zGgDTIl10<3;9Kzx+%qBDAa9|q4~2Sg)I3NsK2_$pS;4_MIr`VEd=IkUadUKA?jDu8 zqN&2dm49gOV`Ih;q&_8%CFzRQHwGOnCVGnIyl&SG=0wiizdCm=P-;cA{s*g&+t4hr1i{^Jn53jj0V0W!w z4n?(4))uh-W!fn2YoyX#TfnSGO6Z#R5+X0&Z0h%UVSwsIYj_?pX@7SiKRlz4YUWbq zr((yCO6+_Q32TX@ag)X>X+fb?ozdA_raor-#;fZZy}pxdW|@G%;8QhCRt+lE<&}WI zuO9Iqh;B8zqDekbKO)yes`9Q>akp(*bHpAzyuD|J)r@hTGCG>T)AW0dN^sA)iyr)% zy`uPbYx&gdCnu$PexIY+=r&(yxY`*;PHQb#B;Ms;4){{rOMqP61q=px?O7f%@$^>F zwU(N4{R;}i@n?>1FIlau*rX$jj`hUF6HhOhAtd$5G~AS9p|2{6yCyPRUP@-TV$8?A zUXIlk29i%s1!?F$8obsgQ4$r4yBhSkJQZVWroWuNV}9BcShkF)5La2h%S>#^b* zwXN8)cb-CiwSj6dy(`)LaiwXocy{JkU3Z1Z0N0IM4lB^Yd@SUzx-5>MRH#O3A;n07 zy37gItRcaw%lXvN=QIJM3Fs=~z6TXT9Ez=Te=IWzymL@%Fgrh#x$u8w58%Q4 z06y`WC`&6~)oniZXL7E@if!EQBxOosq0^O?Q;=u_wbP~9Yz@T z+O%ziaIkHlp1jjQ*=pYU_8ws~D*AwG)C}5;;Lj;$9nV_7XX1NXTXPJyO5WfK!n?a! zue|GV<*Di@Lpl$!x`VaGDx9ujlW8M0o|m%rk-s`?%vj})O#!J7h_1|fOx*tf39lAo znOTVMUZ3Ktg1StA9&uh>)v?}*ZDEpmi?^mJgzm`|C)x73%_6878K__}Pp{`vteB`@ zgNi|rFewc-wmr^U*&6mt%bb%}>}E2?%GfyRUQHeLum_koocG0AgT#8hvvRHU#dE@z zGA`|%Q>#Kzv{C5Sw+1H)(JL)++P%AZjUiAsas^Vj@h#-ghLSUyuMPdh`oGFZL6e&4 ze%Ai;IhQX&-h-@KY36%r(-d1qkEf!ggqLz zFK=y}Z%J1^#-YVH+U07U+7|Y3HC6I}$E96MrT)*mNBi7h*EJ>Jd6m_}6{`nOkL>c6 zZ<&Wm%}K#ogVfE|=G|g2@z;4GC=o(gmV*W4P&@?WGZ+gwR+~W;oE35S??e(7St>-dYa`dJS7&Vphc;)?dHoTm-IQsB+%OI zai&(sT5{dX8Q}9>kobK(*HYWTaIEm0K6_Su-+^^2R&v`+NHSiH1!iH5PIWaS>dz`| zaJ6o43TkoNnao*_`@r#8&}kQ!DAGj(vMIqJahhDHcaap5teMI$)}b(lZaAwirrpLs zcqCl(;*sN$AOS`nQAMq=wJus;-PuL9E2$I?fHh8hL#i_ZZk&ZV88sBze3p<-mTtEtIC1#?xU2d$B^l}M|_many2%|cHy;lnmDnxV3F9612?2CS-X8O>UbSR)yg zdRDl8Nqf5)N~?Ov$?~PncAD7I{8g)HsA067)erFYq>}p0h8N|k;y9#lk+YiVog|gF zB~7Pwp|fSE&#Al1aOI>ub5(VS4$av(t2!;V%kdk36>95N9!l+H;Eam$>P6D4ao*(} z7&7Ub(TcI|4O5=#^;>V+9~-)6odohlYC`;|y}fFwb0yN}y>{|OdbB4wMOiW{spq$t zN*j^hx?LB=H;NQ_xdXLgY7pigM{1#^iA4KUX9lKpDN9MBV_vFPi#yBhLQBaON5{Dp z48Jsas&P4JMtCBvBX5h|yo_ZC(vsy`7wsI^Gu*eLy@JSNxwSGA=qfJ}#b5w7@U(5{ zYR86TSUgK?>;}$q4}L3C$ClB{1)cOr0G$qT>sLn$2}jx{?sPmv`FVOAUYmXPS+*1M zwI-n~W@1o}nyPsv$vNd}8>MUp9Ytx&bV64}zaUR+%hc9=j569?kbdc_x^=)UwT)Yv z%t=DrG{8berCE)6zM6cXwKNnD)C-rrQ9`!po&}2*RARI ziFaZH9EM(Nt{P}0?9T#6G2Y8>AR(8ExiaptaqU`OJJDs+b#JynpCfg}WLrvRvn)qy z&aF2Yb1jaFlTwODKLKQSPkOkQEUAKOlSsd9WygA*fK}(At={)$cj%6n!xv`TSB7;w z=DV0Kh0eaxb@^+E@a3P{u0V^D7d%%6NP*#p zO5xVj-Wd-cEp2$SRb5M5k)r#EFgdKPDIKMkISOlZlGY@*t(iv3-QMT`r{y)*T*Oky zH+2<~zFns%L1NuI*1h91Xyv<+T=@c>d(Zdf}0bjmeDCTn=nA&l(-M-<(4hTWsL6lj5Ah3A!kCpjjoO??gKp|w6`2b%I5bEw(rQ(TnH zD=!aCd3J7Q1Vp@w+_$l7tHic}Ph4;-sC`1hEi=kh9$^^3sk}W5HcT$0QMmFmT@FS@ zrkUW&aTt4&J>2{hm zvd0oA0CmMhI61qsIIp!L3mrDoMY1kJf(A)FYt8&&;yHCWn%)K?5yus;<9`*Rx7ebS z1ogqLAjuz)T(Bh5sXJ*Mj+jQ;vldA3_&rT;cymO3TKOVSe6W6FSy4pycS{^&Eaw8f zyTTqGk4e*!h#q4MlUc$pq^xBrb3Y?vOVeP}Y|nWP`S_ zY}Uf*x_Od7cJW<>jjxxq5k{A%1OqEu31_xI$ABvtJC>0=7XJVy_QpLbE0Q@K1xYo) z18B&_QIb&I%`^lLw3>{8+cd65d(=!%P->8_WO$wA8e5I+w;eNFMY~{UHQ0Ee&-QBq zaa>d~E-{{K(Zc)(9e3{+w+xDr7<2}z2OUYJ^YO?P(BzSgnSD+Ny-1TP^)-(7gmr8W ztwL`>I9#!#nXs|arR;0a=A{$CCoi`(&BiB`^x7)?F$DX}NvEh>)^8#~z!<91tV1}( zLx6kYp_1K?M>NowvMK@EtG2<=(`2`t^d_K^DOB>NfHiE4eB_MP;E}NCE1pJV&rwsY z+pk8T3mUjsq1>PYRP0$?XPo-fSF^n7f^$-7XmCfpFx2UxVj)mHDsdql@leJ-RUXwK z9<&UTdmi+ved($xaZD^o7>;vJ-^E4-2fZq*F~H3LbN(uqHbp&ajkdA-M9Qjq*LC6@ zF6QC|WI{meTc9~ zA9_0BEHxWAZB-?hoy z@?JG8FnO*J-)S!!6p}<>K3-^!<`1&(8jFd2Gg>Up4SUgRV@qlZIww6YXN^1CGIu@&|Hm4BX7NZ+}HJi+^lG0z1tY~5*@W|1= z@WsW;G4l>haULSmrP0Vokdoe&(?zW7f4o$5eVuu(PsI1vmvblD;|jylpS8kGTAS3n z;#0KVgq{-2+M^dz=p$o;(z0%D@T9T8ho+F6e_36Yn8JZfRoQP=TdHW zlr%T1Pm;!kzPT(O8F>PsAnJBrG;)wOF5A)Mnm#%kN!tDrf?YNF{~@UP`pwC#0t`Ae(-sQi5V|$4iNX7}FrX?hG z+I05!cac2dL_s#=(yw0V)(;VtTmVl3y#5Q;iFSrKt1qhDNP$G;0nk@8={GB#bnB%H zSk%M9#2U_PmEI>EMfQrfHoSbJnwHwt z?b#Y~P&Z1t$&ry;CS5mC(<6@Iys4pF1M6GI5af%c7|U@qD~Oj-V?WKYa)!E%Vo0v7 zRg{9jcCRrv#@h9SFY=BvT@IbCEUM7RcNWGCP9-@)iB#6K60Fdx_Z@xf zJ->GC6CMvrEN(oh+9v3FR#l?@CAt*V^%nZzrSF__GwEKH;LS~LAXH|rIn?cpkg;6n zwO#O5sMgn_7i=8Xkf^4Vi1R&L#QIEHj*}_dmQ*IZVh9=pmLd-Xiudavw^qAPA=bRN z#ac)9W%Qpe1F<5vs_#s-syv?ODXAZ=U6pecL8t*1sCRVDTXH_mewCwt3neWMx4@Ti z+TVix3e9N}o#eakAAu#hl-hsfO=MCi{f%KS08!}gV7Z4 zh9+TNh2W91No;Y&bDCF%F8oKXt+Wb46Z1Ye0=*%$IJ`WcVTp^CUzxq?u}!*2sH+(2 z3tzM6rCFL@0H(nnXKp*wFGrW#rEtzyXeIF-ewT8n){4i4Af9WU@xHnC{cuMa-5f_a z^{!J<@ioM5u*BN{<0Gv@1g#)5NW_!WlU?(hR-USn52 z@(C_U=NYXLceXV}HH(domn$t#LGb>W4f`4Al~fLZ*GM$Dnc0Nv<)F_7yp=UMk|2pA z4@?@>vehqRvtZM<)9Py}X{#mFNnGCX2EXKof+zOkxU>&E-PzdFrje(Vu{o}b!S-;= zd~U9B<;T-CpEonH&v#NsTj3i&?AsvhHps)NtzAP?lgVTcl1Ht1_l!Jvw)ZCAPrwVo z#dB7^IKP%qj5lP~+>^G4RC!Z1^{pV?Tr}?IJ#(7F!HY2lBnsWX)tXx+-NcMKRV^Dz zn^)8p7{NI_n#)(AHD`Zy9S?!Dqc!^7NSRgXn)RV}k;Vr=1!C!%7}2ag@ZeK7ZNR>phRU#957J-k-MzL2)cKXgI*RQw?r7{yz= zAuAgeULIp^uaF5D6zh!^=eJL#Q;S=>gar)x7Wnq--f0C0ECj$8InDt)QVOMzQ-i?cMJajEL-xb(vKt)D(%OubefNibbDx6 zjjZ_SE6#O2eqC%u2x4Q zI3~RR0L9v5S9hUwm{!-LAORrO}u=b3FBJXLromBhs`WSRw-pgYR8D-Wb)P$dbZO z%Bf4ET&kV+l8^WeY^N8qA;MizMP*!YYE@uqvT3fIZDsm`Dj%}Uog0Bwe#F_L(0Xu_ zC%sWVdSsO*m2L>?2%rnXOd4M>W09Jsv#C95P~i8caTYej+!d(W+9&qKGjY!bmw#Sp z0yopceb(lmZx@ij9%z@tj*Gx-9GJUH$3+e4|e#<*#<2kKid9`yvNttqZ62bXQ3Z*~8=-EC-t=HB9 z4l1OcAeDLpOP1v+v~v^uJDWcv8i)Q6jZWRNq>=QlrFF~JKO|(-kFM%bfw~ilISJ-G zd^}1vuysC$nBGa_ar#$zt6b=Jo*}iC8(@~JpEKpfM;)h!t~^rVz*{Yxb{VQw<1UD9 zgyY=v`~vvh#aK&qApZ1MXQt?S1@^V5M0USaOOh)zCtyD+dA5*Xm0|c*wRK`s>S~MosbMh*2?vVQv9*;gGT?#hT*r|-SSND& zR)w|g+=^jo$Ur(&#tJ(XDYMF@&9I>8;rL|)uQ344sz^YPeD0J}wT$MG`TX?5H z{>9Vn<+dqt41mbtdVyI~p&9y(Jq(RUO_oFv${XeA2&_qT(*$JWr?q-Exvl70o|yMG za)p~eEM#+Bv{FNKgdAqLYC4o%x*A4FZmy161`QyNNQWn_YJX?jwm)_U(AAsGFZiMW z5y-`3O)cH4@-hW$8uF>|Gop{x?eC*wP0+0_Zsw9=Qq~0A{PJqU>G~e5uMVBQDb!>J z{wmJV^>rrV+GDk6TxZ^|Xu34kx~zAS%8P9oEMIp~>0JrCd(ToO%X?E=9MrZG!tSOv z`A!cNUt<==2{qQutl96l>B}5()~eZD>GMoo)m6O>V(~LqybiCZQJYFN71@)e*`>|c zj$%T9PrYq6ho`W}o=EfRDUmEqub_Ye7#^QW*0_X85{#cb+Ukx3Bpxqh5fD+r5BjU^v5F&xrWl|{^sTvifP zC1}rO%(oCq#pF1`f;;Bls71WOQ=udbf$*t{Yw!1N@=RNDDfiFTX_4!3ZuIchv%#-cF zJm$9aOQ^2xe745ycdaW`smNmrG#g}UcSX%X74zxWK74M<-lDC%eq8LC;MF_mibh`< z73a~HB}0>z(z7c`b@t1Lm5D6el6%xGaM2y0@l`FQk**F`3sx@UE}0!`wM&+!y+-3{ zSgUy}d5b1^r$~k4SzFPbLc6IU@mKsx;5SOk zh4)#XrD+Xe7D{KP{3n2&D*3%Zt~S)Via6qg0)Sde}qPpdVgxmCtU&oqVIw=v|_mX!$ex3_Ae6nonO zw(Q_2xizg>*;uCeRoQi!q>y8hcmln5z*WqJL`Y$s>%#8P7ho z=$mkFv%vf zd^e}H)beVV&60WNwPyIASCdk`TN`8YgN`bs`I)*&Xo%r^zY}ZVA#Wr%YW8g#Ns7wN z6JR6`O>;g6@XAg29271&=5KB^&q+#E9b{k7~ zm8U8cXOmu8u4}Gmk_&biQ;opYzZ7`p?^%)Ih1x58^d0Msl1yj2S39-zEnS4OF>+*b zTCVB(R->ynEg^Oupi~-NfxW#$D8gr)*RE-r#g36;miAW0X+Y;<=bx=EYiLqQY;tyf z8M?Ai*M?vBOB_~`HLL&)tHo?w%dYDARI(Aqd$H!DhrpL}w(E(?=cryNO}>P-MHh)p zvIR*n2WpXgX)wqvt@W*2e}`6h21a&2TDm*|rJ&^vQl~z`<}u;%fsl>yp{t4F8(DwW zTO)l%S#JXAr#lO&_G+y+fPf#my><2?nx`(oc#?g;MxXs{jA#A;DW=E5_Z+>XOaA}? z#ZhkuUc>hKU~+E%G+$td7@Q@w*mYBz=aDL+I(pGK%9_Dh=_A9iT%dSlQ=ZwX7oHcIG3FxYZzj2GKM-D85wc@}*w;s8ndF;)@Lmg{C#SZL^$?139jIg2#!V0 zYQoQKVfnU`isqX}y+$EWwmm8)v%O8gq?P4;OS3)2n)iv**~e`YGXf6&m5nyowUM_N z+$%hNsyu!1idB|TD0T#pd)D-*$`Wn6oVbisD#1lY$7Nxo!+$jF*vg#Lms%t-9qOR~ z?s^)^w(%S>FDUB7VX$jOZa=l4$_dK!(CA2n{7YYQKZ|^Tk$cEA~1H7s|vt4Q~D$M1Sl%3H301w!t`huBPAPj(e*P!ZN zAGVK7f>zqbUVsm~ToT^LWhgMP+`a2cUl_?Hu#Bl@UYR@!iN;Oc8&atS8#7}1&f4nN z?5Pq7c7;=lFvx&=cue>XFZ& z+iO{FuGSE7lh@L&YC2!oATF}+!NKCXy#m76BEJS!7zVR^OK#CX@U{uvoPk`_>vKu2 z#`B`173Okjc*?tWflh+@NMCmB)%MUtQN~_%5=b%>R3F&4O52QNu6XyR>Qbq@BiYV9 z4a*HqIg|$@HFkR_Zjk(=n&c#c>fUktrc!?Bt(`wpl?aYyVf7W~*26ga^w_NW6g3SA z<8txj4{Fbl-a`>box*g+YrGE~%zcezYFaRv2}*Qvj{LO>QeQKYh6!#QB8-z-LqWX@ zxFN+?Xl``bx2QZ-*t}PIgKLE&>0Rzs8oVsZil_F6=~mNN>aa~RkgD98?4=g7qing4 zE$hW{w)*?sxIt_kkEK|bP*})Wtl1d!;<+nERV2BVr=f<#DluvgMqiIjdwC0q5Aspu8PA$(eI&0pH$}=DCebXN}OW(nU*6HDZ|%A(|zp3L*w=r}i+ zyN7zX9xIDAfq(%=HHT$zRg6+_N3CCS%A}#{D;UYsm5Gb9vom2qX{qKh`?71JxI)kd z9fm=y6(UC3+z@N2wSe4drvo?@Ro&W=rH-4x_sb-6q_4?~XwTNQ@8N~*(Kz0xHRbw! z-1b+^6l8~E$Gvt@+IXf|gsZ0+P>u?>HJqu{n)eacMx{G@%+K*O2JYOTOl=%j52npE zh4D?qVApG@jdCSFXwq&JcRO=jCH2EcdA*`#Ao2*sZAvw))kGCNp7Cc?ZhXlD9!*Vf z!QdeJS3PNe9PF%H9@V*>@Nwx}b)e%rv!14sOs^%hM%+4p2&e}j5IRyc&WgxQM+}}~ zky}bHl`^VyW`yh|wQQ&yisfz(*>ATFGHX`m>EQ(l;E|f6s>H1bm>!i>S1YsGnpBdK zO%dJ9&mzz1)YkQk%X4ZndB-)(+drRfRjU4zbL3nYSnzsNuM5Y`9I{T13c4p=b@UTb#Q_uQQ$w7PFhYid&v}sK#M@fmZaeTHTtay@X7%0y)X4EFdsx#Fgt; zDv#ONPCDFR1yPM^_)=ZhGGz3usoP`()t?B+P0WP%ZYz?!Z$+`Kj;~yUcAW2y)#gzE zH2@FytJ$?1Q6`4j^sgD17_}!D=+zl~uL&W&QRyBTns(I`La1O!^C4kfRktEn^)=_7 z7u3uTGVbNT72aA)h(5KYd0Np9rFmoXCM1saLsUT>oQK-Bwgb&#c!Euue7{Qb-m^r< zSsZVLpj(d-7H)vnpN;0*d?E};0xk^_&LfNOdz#=bnV9TB^Bx5$E@@c}tI0&CbPTxw=CdBv zgLLM-4@dBV{{UyT<=gho4RW{9snjG`zTiEpWh9n|O_5H<(3b^;Z6qb#B0-j8flx%E zG|g`KcG+aOYq|db)yK%qb2jHIm^aTaBhhq=dv6T*Y)<3}3gT`mT-vvBteG4h_2r9M;%8$KxU zotA}c!DJ6H94I{3ifdjWz1Qx{v&eSmg&hTDTwUC1Gqm%&J2CERSfko7Gm~8Nn|p$3 zyL1{*^c`zgNATt5sVES_SRVMTzYF*>>spXV>#`j6BdvPwlc2?cS&IX0D!My+7D1E3@F`DAHtKN z<{s0?@{3JXEl3v@vMnGA|?gk{cM*51wyzow)I3_ePx2l@W z(2~^;o-cAl)AW0x#@>Am2g3GJa~zC5jaU-+M^mwF)>lkG{t{@4{{UOln-?%MDDDLu z&3s5XZ}78XPY46bPQ&%6f8iFmPF7%X>MC156vo(DcO!Z*t-F0z8OB2^eGO?DL6Z5F z=Q!FG>U0WzhM|2b@p{5f(z`{THvDP-03qpvT5>Loo@0bI*GbkF81|+aCy)Mm53P5` zG(A*QZEFj4LHSYa$INhs;%s2I<|-K^-N8jQ-L{!(+00A%Rd>*ApZ-~aOOb~%Joal? zB|kJvn$Md-(v>^WgyHwj)g{NXI5TW+1TU}zp=@}l(ZzJykNn~`$>`0z3-tIj| zY8+5p%v;+R`__2RrF8lQ;J4CUp#cW|394yrp-9T1fF_$`4(P6};5kKnjCxhl_gNFO zM$Vye9J+LiC=AceK&}enAKtKB;=22oWC)4WW17I!q4H+=R~a6Zt2Xs23fdV4+Xs?q z7S={$5Hb2x?UP=K;7e;n(e7^=1fJnr0T^eB=9H|iZBCy%vF2jVc71^xccmmzNgU%K zs_tig1k9ys3%84!-6WTz6Q`*EXRK$EARz*k<4(--&OKDJ%v{l zq2$r(QwL4oKF*n|ZQ=d0&!u@V6l#D;n)@=R**I*|$j(&ovEHu@l zHTR3!)LOJpYpleJwSt|;w`$ae>N!UQ8s%m1=C5pW)^d;d38EpWTF5uUARg*#I=Dzn zSTZEzHL9~Zdz&ckROAfTFR18`6Ba;7u7<|^$e=hN`-;9%B^->3<%L?5C1z%uj*>V_ z29r;{SsRMjzttAv?gq|wioJcKtivigS37%UCA5Hyn(d6K)|WR^c*&?*CA)1=yyNC7 zum_VQ8?$HlmT-9jM*wyN5%ySW7`L^8wbvzgI9myCYwq|f$hU%jo7B?taTgfi3R~=E&5bK6O**|6@Et_ zbm#TmIbxITR^Soe6%C!ho;)77uD*R4j)e^1ml6u%t}SJ-xhH80nu#R+*Sa}p3ldyL zP?u57Z1{6iOuP~tZXA7UDQ1pn`qcV8qCNW(*j=Ra>qLF!%E*n`XH$%QqwNr!6*=O) z2f{uyj@L<*ZpmVxkZXX*4nCQe3~Vn8 zl-7kPt!<{eD|0E1JarXDLvIeC(Obw~KT}q&$I4A(6$>`?>J4*3r!_uN!&Rwj`rV}f zB9|$tc z8YUPuJ;Y5M!O(Ik_l@P>`JInix5JJ2;ELK(yXGZ!H8lHyJ-7$&Vyj-j$lhXck4mj) zAh)>2ep6dgsFpmAax01c?sr=Wd#vbw9Z$E!F?ZaUHGksXf*wTFVoq`MU{)7^r(16p zMI4QVa6qqM@iw0xqod4>0XuRl)1&YYso*{wxGQfW4_eb{Tg-g*E8eqgp!)`)b8g&i zbBebsZg&3wcCe|W>YMFYv9ibq@`}}Bi-BsSbiDOzqGYg zF1d*fdds!GonlDBsxQ*Brn<4gG_Td1H^e)Xv4T5$U=utYwdQd~S&2VWTizzr&Znxm z4Y^eDS%fMkdQ?@PL{&*ySgkyvR|2MwQMmgNw}|6##}!UY%P!H+HPLB$NJJA#K9x{P zD7sLx)TN=7(qw6-iJ8wiBC~u&sL!d~7Rgx0L0vubrot6#0j)%gcMi2`dfd~L>wX(e zrdkcx5~@j_roDCzQpQCBJDAVoUp-H4ZEb1_aUt|IdqLB$uUHkinHRPg)kdc-sFzJh z`UPf*x=5$-rFV@KvlRe$uQHFrdY!$wnRSViXwS@RkkouptwSW1e{C*DozVVoz+; zT4jaqw|F46T#|VwwP!2KSu;rKv9hM~Rev_(Mqqi{n(RC~qDy#IF&Tz2)rjQQr-pnG zH190kKKJTYy#gCJp+KsEew7iX=JXte`&0qkcFj0Vj;l#X34@PHUCZlH z36r>`-x=>!a3#p~qqk8};eAC&u_+yB5M${~XrpoSAR?ynF-Xy{=}ZjEjS|Y>9ndd6 zg0m&?vMDWZBSw2**GHD`PUjU4oL@qenmL5A)a_3anG|~SS0cNWKodk%`qtlGqMFg6 z>VlqbGQF}p$RDLl13R8#)|3JoD27qx}d zatQV|PfS#61n-<99B^x{(Nb$rF7NQDzas9fG_|&dVxtNjx5n7vt7M5d6nX6&kP7G2 zRL4=6jz~X+ce<{hX>w$@nlxDo0*nSZtgFo?4L?OoxoyE^J1{%@)3CH>BP6cpBZFGr zAJ&^ml0zhZV!vF|^&L6`rbVdQj3b;f`WnUunj<$BClt}>7Je?$f}cJExSGN7PPJuy zEN^I-0CRy@w)WE8=gEnjj-U#b9V+5^yrC0r^dhQNF0~~?T?$Kb3FjiWG(Qkcqt0Zu zeCMj3hM~Cd-POE%kJBTsq^vv=aDwQIO!y!x{DIT^P55_R1LL8-l3D4OW}O_Omf>GDSYdzCBb?_hfsN zF%VEnMq7{glUX)CVLlJ3T-E!yQY~`EIP$Sbzc2@k)005htf_LucHP>m$)ajrYDkxg z?4Nfdr7mc`rSrkRh^+dB%r_*Y&Ip*H8SPeVb<3#4=HgA+7>J)*zhhw~z1vMKvdUR| z^bPAtu4(8lt(GW$Py~;(cl55$t3}ZEsgv!gN`B49=1-ztNq+=}=@7`RjBOP&Hj^~w z2Z9qONGeoSZ459s4)K`FK0q|-v_zKTNyLR+*qn;<`K>3dj(U-&&hMc4{6D1JMt0i5 zr1t{2jcY-BISbqJop`RO>DMu^g>Ofgr#NGP0jO@Y`t!dSiUb49k zge0wV&(>Z_u)+7JZmi?DQ^3u1H@+6WFvTozl1k*`wP4K+)ti->2pUFlOnCz%#_^ru^EI)#`hS0cJpDLUYRRPOYkz_I~du*BcpnhJG1?8e<{S9-pi z4XCqaRphW7lUB6J<jOzMCx^2m2&d$QC+g-Yy$&h*)^sR2iE}>vlX1E)x z53$J1N6VV;r&pP4xr0sWgiDhr%y?l@o7RToC#588j6q5+BM!TbQfm5=-OkU$J}R<; zWJ{>yAx{L3mARrDPxwu*CW_#BH&*8kPu(@;lG_1jWJB``p=GRHTT6wNl#bc1`c*lj zpdP2<-4$bu%C`wCDbC<)kr#qgRNctpvnKH!%;;m4$sby;X?DJLNbl=WUGqVrlUp4e ztGW#PS2ZmDMcGC?8tEdqj#zP;<#pxS``7fY3@W?jWW}^;$1cIgD_t*##ZNEox`#_S;?kRMm?@pV@(%jwy9n zQsBIa(W;HL(#NNm+O84iRtVWKvp&)r(zdkwuQm`5(y>^HqByBE*~&?@oK_X7-adkA z=EKV+rQBCh5*{`OBE7pp)>m85W06}gv*s1!467_YyjMry4QKm1Qfmnt_ixJPo*Jds zD3++q@qMAwwZAz>%OU2oH)YA}R=pR;x)tmWPr7-5uP*0mO?mAg!( z0&l)$_oGrzD&Zj*c&uXr+8JbBL@G3zz-8e=MT8?!PY2gRnabBcV+iZ8a zO34k@p};uJcaTJ5ff0W3;0nO-)|vkREm&7`p=rkd08~H}ltay9h@ItSvIwUsSnfO_ zrTvReSy@Kr878tkX|C;4YZG9exUJ1oSBFW{+9e=5j+Ny%*D_ySv$;7Yqn^<^U%FO} zcQJEO-AlDd2b!6PL4jG*xp%ChPUBHabDh=nDD9*x47U6 zwFj+@=zLY8&OS@n{{Zi*zXk2B&oIod^fk^80%(mM4ZaEP4l7Ga&@D88QrtGv>T_G( zeT?5HLu73~#Y?n$ii65i(wEC1aK^Mv_8^;&FQ`-*Uf z(a5NN*C04C(u?IEd1>=RELc>Nw1%2mbn0_dpI+0VlVq0&kLXQEHG3I&7b*V$eN*N` zvnMji+yhE37Y%ybu;oF`3N8+`d;w;cM`P;PqFY>+A0$nTm~3!R^Wui>=1nPrt@ zG9U`g&>HR9eKcRR%41?<01@2!*NiKbY=%5lxb;hfBlnDP?@CJg7YXvap3$$#VJ4p! zm#}=lI2D0me1dBYfCb4=YtLoZZ)S|f^0wbfyQS+TXS9jW2>H!SAlBxUYN^`B=ZGhT zHEGJ{&CdfJYAqEblKS4@$f7{lD~hY)8`O(l7g23+R2+2`TH9DM>QJzWBg>5KtobF) zpw#2bW_5ld)-??}M>f|CiaH9zxAE@0gCYFI9@VMhkdJQ9k;((bQP6Ge=hJ||B%W)Z z6GntrG@zMO6skL1wFkuwMGhp153OlI@kx*R+fk2d;rvNu6`lSeAcNReN`qO)F2dB0 zGKn*(I7z0@W3>3CVy*kzcL0nLTFdbdM!DGAnmh~)ityhlhz7k=!&m+plf!oQx`2dE zs6?BGB<88*wEds6O{67R-u61UJX@pAM%&22_cfyyuVF9Tx{T-1tBkvc!OsyeEH29G zyFtOhJescF8qxIzz55-(wep-KOk^N887DQvJdQ8nm*8lz9nsm}Sf-%OELTdb$QOg@ zRprsH{>`!(@Y&8m>sTYfEgCCY>$4HSQXh=eGiaVC(}awgv5_N;$b0ndSv;Py_+**1 zae7$j&9<=^bwD}DG&H@_5pGm@`1y(TuPcw@Ub$}}Mv-4>$0D>K__Kb$>uu5f z#bGS77afxM1hEm8jMde=FLPxflH6rSYRig71f;9Ax)5tl+v22GBg>l0HAhg_wB1kU zhTY?k_N^g974Xgv)aR)fJyR;(*rdoxj%%8_wz#yL%uT}wJXcF^azkxw)bm@#be#b; zyedkQ<(eWDEu@OtABttR0c2y5+}CxZ_^e#QvC2aiV!wrXb?%l#RC+!g97g7}r5$|1ic8#U5Fa~`XwZc+;YR;kJ` zQZSy9Jh9_z8@7qZ1o2aX2*+CA)^u@k3&^AQiCnaD6(%?P!nz|ab#=LuR%H9|3L58c zL5Ap%cs0;JBR%UUQjc=y71M{6rC{hq942Mn&9!}K2=L6fY^m-lv~uN2HgVddGlklt zI2~)TtE&sG&WbB}L?O|SBc)NjN0mxA=C<@VGg^X1Mk(5rqU?&nEw22n!?g<`YAk$=x`>BJ$SD&Nz$ouUX1nK2KpU;MFGesW;w4T*X)0? zJV!iT5&0Fh;N58HSFLX&5QO}>HCxB~Wt?5FKT7l?B_v#X9LAP+>T;h-mh6|E#W%xH z`R{Q#90Asen0c;6XH!Xpo~Jdbq27IsNuz(q+SQxb{KaGKRrHbmk`HieX*<(kw>q6# zCTjr0u&R&y-5))`t=6~uPL{(NIIIg}i&>#=tC3!9IbC`%UCnKa=qnsd9Aw2%y6c#^>t221NB#V1p7rP@f~9%Ci=^{4MO(!4-~nBKg?tx1`>gj!LLP8MX=N35L{po)E9f@Yu0XYkw>R-(yL*2Qh@<;Xt#VEV zc9X?w&iZGC>t!i4R^21iPQ6VW$SsfpTblBO%_aG7JTROa!PDFOG0K>Z0J)6n)Z~-c~ z>s0Ucct3U6r=^s809+1+f`Of~GfS3B za-%4%5$Bfroz0;N;#9||HMb7F+d(sf^{wlRYi}%>B2qm_t~XhV(tDML+AtWO;h@o3 zn$qf1%@36Wf)6C-x3oKHqqkRX_0DPD7zq(`EQ)cS4Rlr-b;NeaQu07O4Qo$Vaw;`z z8)G1ILZ6fas zKT7l4tAjkG=ZehL?rU3kn_5{_BEFj>@Hb|?J4LtgZN-vY4MdEL?O|Sj;EfHnU0EEd zD2FD!{sttGXTAZibd}C?VqLfxm_r)DoMYs@OS&iPty#{9y#O~Yx zGhaM-*HSu%h;AKE$cJdfYe6}^NvR~Gdmfo>@v_mdC$@Dx>tfsD{)IL-u}`S4o#-SF zO6>Msna}N4RDD5h@ejk-Slf9RKIXLH@ivb>3SPu>{?&Y!xPg(!<4#Mdqva)$evM1n z%cBoz9;esw>K1ZxmneRXQ>=*Jc0hj``4$~_RDk~O_F<3q&1lHA-&8vpR<_<)zExx@@|I8=uQi$R8ZiD7RyfKyHNdW) ztH8&~)Fl4^zUeP*{6Tqb_Ia)vSiK3Y-qt41bCu-Dp42xo0tQ8BzJ;j8k>oKSN~-#8 z@*Ef(eiYOj*vr(1I2rvZ{Bg%xV_RIP<|h292$4uEgnks9Bngu3`S>3xsLGu2LdwCj zjTVot?x|6lL)p8K@tts6bN{M%T!1SlkMRR960NbW?I2|cRSzNdE?+%Be8>5#^l)Q?h=!8)2gE%l}-j0j!* zIj&>GTDGsDYZn$G`biWf!?^VZvMu#pMo*PBHy!?FrMuHLT}oqfBO8eyjl-PMZI1Uj z=3>mm^(LA#n$e#{zK55#kPlt8K*Z`!RPpUdIay-LLk-Aq0moxqNLRem()u`p1#Pat zbT!Grks!!5+xS}c1Ex=9GbmPUoYm5|HllY%*MqE~*01KaW4V?*f;*bdlHqN&ON&xK z^4zU;z7Ja{JWmO-17pO&fc39B@np}Zc-HviAWM=flNpDNTiB$uvpPqHJE*X6&2qZF zhcs-@0~~r*u9vJN#103wZXL3(ARO0=8P5+pG2O>Td4HXCZc37JJ!`J;MzZ5j`!uie zIH@&F4mo3y<58S(#dBJGb6H<00EQmb>%w&F)6g0{MtDJ$yQ!`l#Cls>Ol~4ymps== zrt2bhM3;u>Yg+qGj_TEvfI|+o=1ZE5Par(X8F#0>MRy5wJY-eN+XvIH8A_dm@kYSP zMRcho?t^A?tEbH)7D7IiZ8S@%W8ABnuvSPelmmn&wql>l=-owk#&=g5O61-jj^f5I zD&j4pv8#8-Adb~dwLQ`8W74NGt;McK-U7VLOf6HGsp@fhq-G1;jx$%Si70NSnrkNdeFT}%|j{41RAtVlQQ>=Mi!?ishB=+{MWhR}_+Of$p{hE9g z=~~v431chm(yZz_YTOOW!KzkzeZ*2^a-zF=)mUGst!;-y=HBZW;MZBEP9#7H>s+;|`mo2p6rP~Xut_c|#tQ+k`^*fRi{aD~rd`03ZHLH;fKP(H!9q7}d zRZL@=?Q51g?rHJ8HZ*J^NaM?anx0#LqXVT?E>s* zCcm%T>sM_gjzoF+S2d7|S+aUl(k084_VD&`I*xgX3OyinXJfEc&-!z$_yR?Lrk#7VJwHb1r z^(pC9=IM&kqvhC?i9<6c;Y?W>xW_d3{{YnrY&}@hyLJJ=z&OPc%Bc&n=mjnY>W1$E z+FxZgYE25q&t5u|$*Nw;KZ;7@p^V7rfaH^k>AYDc=aBlyPwQA(Qf}0sTyR)Zo`}&N zAa-6>*QvTzxKIQwPQRkkfoWaVG3BQ;PZ4;zpKM zb~$D_CcRVQzO9vt#y0A5!|7g3eqw9U!$Q!zIqOSX2zqs-&P6RD71DDJG?_H~55k&9 zUi839L7ER*KMDjcXeZvE8i!ySp77z04n;5^_4TF66sH3`Q%U2R0PRG-ygypE44*eO zpDnD=$U{XUkZ^J;SXimS$okgmF>7%LSjjej!k6JD(uDn%hZ(#R4j@zNbD)L z_P4i8$rMG%86XbT-;0#B@cgj^V$+UaZ%@Xq_#L$KX?(8`TZM$>&!M5hDT0$|^D8J_ zE?HR*LJe*Ba^4AbS4raqb`mq#*1hhZVlENv<=hE7i5)AOotg`o1S~-v#UZ16#VZSG zc4jmIlx-vqwaMGUvRuZJ94jyc)~(*VE#8|2l#07y7z{d}tz#L=NUWofL8V}A9fr5z zTRR;&u3>U;0R;EWaU=k7jPqSSsp9w5H2(mzNdQB%C?ndrVB2I3*9SDEvje04#;|K> z-J!ZhY-H@>vUM#t$e$L;E60wdNUucEyj`PQ1zEva*#d=O@{Tc9?)5D$&dA%m@U+aF zGYat5GQBz4QD;xHi${N((XWpnCh7({BuEHy3={ZHT6RQ{JI}18H)+Y_drb9vB{=)hy0~_>)B{b6Ya} z-WTxg^b=2GFjbB(FpU0{jd$Q{yCwTXJGQnuRfO}xnDA;Fs>x$NmdR1j=Qg=0VWRjlp{PcaY;R+gfC@U+PMLo%5zM7nde=h~is^%1RAoFo?sG~q zrtKtS>ee>4)A`oYu17cqx_utGRA9-T`1%v+Gkohv^`llQEry>DGdn|DGp#d8q3w!Ozr zYG}TCZX``volHCur@cgCWss4Ym04Oi0eb8*rO7D!h;G}^qN0q_?J!!KpZX%FWtTPd)kmR8BG?7u<>hyL#Vv3W**2SO_ z0nk($I{|W`jdXgn2`-%exUW7>mZ?{?k1K_D>PS87w#b0Oaa^=k<#lA^_^YMV&culH z#w%<~=9E{F6Wr9gfAm7f`?cp+C->7gsjlXEf8tnMKf_!!id~x>%@`$Q!aE&*!`mfE zWV(=l`m0C8H=bm&IXqN;9YJTLmTn0ZhppY0EQ{5RbvMl+#a)o;&PzLvS&eF>ds8N< zX_nh!40_f1j@7OzvgVzTPkvNq-_9b5uz9QmOPxiV1%xB7y>CUPTx&O;RABjI?=?%V z{hvm*TR3s%W0EVfm%6OCHBhv5Ir!j6atAo?T2^3%B=@RTaTz{#&OPe%v!oH@iYD83 zM00dP+)A;jB;($&Zm(We*%2n2b$0hM6hd+BTfQIg^IXiV>&Lxm7^-UWBjR>Mo)_@b z-dv>fsoR{_r%S3^Xcj?JXk{E$OV0+4Wwme^3ga*J32)|Rb~w)hu#83y>lY!}4D{JP+BaL&Kmn5_bblZH=DOhQ*cQB0< z)Toz^4e`RzzdUyvCj;A4-Nt2+m2yDrR6N$?PkV z@h-m|n2-h;$E`UU!CZ@8@f>z>NUHcfD~Z$LpIp>D$#PRYD=^D(t?C^~OxLG)b4E)@ z5S0Mpm%^-S&21x3OGs1!&MRR)`85<{3;@RhrHhh&wNWvX7GwLi;+-Eby08}XxsjU|1LXW*wH741o+&B9Mt&hD~y6f!G?wEhiHvUw>ZhYtBRwakI zsyY&H)@{f8Lag|V=2aBm3@@3kKtI|PRN0zGbLhP^ZPQ>M?9`VMEOE4lpc$gkHdw+x z*{pvSY6DKtt|cc2Vg6OjqkAEqBjZg->OLa4ZP`>iMRR0xQ%@sJJd!cVW0O%=u@%a! zaZX&$<2rXVx%_EJG}5(3V&rDgR zfE2Mj({rA*q-6G_#~o+`=pQCIwJGD3coz;yE8Cn3#gNzlC4cWz^5u z#O}~Yol`jDgH$|643}C3+#(m;Q-QSgtOoHC`F4tukVVmXPoVd%(R^E{Fy+%8;+M6$ z4n(#%j|$pZUTG%M>d|AmUJFRLHG|@<8pBLj+SRv6U*r-e zx;`r^^G~zWe9Jpalz8O?A24Ksed^-5-h@f0BCertr!R#uY>}B%e9zxC<}nP-7x=YinslciW>;xQ*Rwm9veXbGHD327A>zMoBUhlUtOu>v4A{maDp4<8Q5X7TQg` zWJh&q75xaVPfFAdm8~VoT!d~%wRYN%i0!q39G1gt#y)J*r!=0W&OFOPU-(A!nU^LI z54C1q_*YGIklQl`QR`ZsA0KOq;itGOAtWm2wN#k|7ex%CXkn9{)u*(DN6L{N%23s_ zF5kh{_ZFUF+!b-uRcU-6(gC*lPaO&AT^xZe^)E6BH(R*IGg5dZQj6)@}KWHb2>F>@8ItoIXhM@+dJB(-w7h4qpSBpJfRxP;*Ij zIV2t=vXC$r7zZG7MQSID^_WzNtv3_Yl{L}5?6GQ5#9QSt^gg(%M^u?hZ&=(M;1v~x zToxLC5-v4rbUESUZCW=aqEZiHwUesq@2cFa(?Ae`&ffLuI!tzYt9dh8#3cU!cdbit z;jJ*p(Y>PXQ;(LNJie4)G!>Ygd2G)-Ybz^_JWC9N&BsjEM*EvL+>YpdRN}oc{3WI5 zF{>f=HBSEk!jKqGl*Nua)k=j*daY31XvC~Y;16VthG>fTh?hUh& zR<-XUOSoA`8O3H^7y+qaJt+6SQtP?NPc1LI|sR zmHZb|2p$UbV5J-Q@ty zX2bjIa;B@<&TTI?6T#_O&OGpO>VtJ-tJH0U#ks)bisG3X+ToCl4EL_?(m^~pCb_>5 z*s?L11!aV(%O_2f7h(wT@SmkpN5uPm>c*cZnF|i}Mq*>V9+|GV$5w(bQ?Ap=62{fj z%*IHRzB)Bq)ranv@Tu-&+F88~R@4|h zpl@oV+@^&s$If?YAx9?_gKMWtBL*mX)bL+60ycJv-Lkrbrrn?#?4?c9Rt2!>xxMYC91F}a}-5hgKB*w-^8OPsOAIiHHx z@a>qIh`rORMUUSX!9lAT~M*!R~cjqvAbnZK5zler#ik;-i8~nT)b` zsil#xE=-aWR=mVi+66bFvM{Sw+C)H#tF&Ue9}4MTY}ApYUyyTHwkaLOz*lSv?|eBe zwY|WNU3l+VsOn`(H}{#=>{z1+g9-;~iy&m0d(9gRi5K&%Oe`IDwetlef@;>itjnlfIwKrs92&jhjR~fZOCq1frM^{jbdApm z=piCm8F{ZjjwOv1Kv=7Z(=Zv3bgK^IVaY0es z`SZj_H%cncgHz1$1S8OcRQ2PV{CBNi0LSKdfj+cV*_R#9pkw0RAUiF2r^Q`Ft*ll^ zd6Bsu!o4sIMxgdu@o$Lp`Q9a1^N@>EhmGciH)ykkHg0(XH5*$vKX$bhi1(-YnICq& zLx{sD<2eSHbAypv#ZkJiG}CJf3~j{#V3W-R@mnvZL`TYM2hz?mrhv7~%==Pj+OEEx zGL8mKK-QBl@R|i;4D&{5%@l*3q*D&yITXNCN%W&R6qz&#?&qE*npkfY!IBt z@t_iX%DBm`%a09OYd4oy5=pZss=CzJM2h5`{eryNC9vlk>;(A?jNFT}o>0Ms!~hFMGWAnmNw zmP~TFsRYQ!1Y)1or+di{lG+_Ehd$j!cK-l$S7`f1!I_R6jDhQ3X=8ErS$xRbn&1Bb zgoR!#NUguKS7kh9Ii#;+7Y$j`UouM?%AhF+3@YxIX>8UncXF)i8*bG#%}1|VO#w+4 zYo6fstqnI`j@4OC*&=RA6I)g0l{-O~MZz^NF`g#Sp;%Jx+!aX%SJYP$Z>}I?8Dqz- zc6!ddx1kXfM;Z(&isY|mwk4Uc4RKY4Xhljpo25#lYWD17Ue7$+h;Ayzl{`mFoHhiC z8atJ55Iz z$R716LZ@)zxg_tS8va&W7{(1|-$l1B7PKQ}W%r_3yu=`m)fDF8Ad9rD$h<$O29wHc ziq*c1d54Y-a(_LQ=#g`b^Id10E^Lxz?tm!b|I48U5TqsLxA0Ctc1mw91~vOO*crS}T~nygpZz+;LrH&ceIjZQO4z-_oa?!p4uR<%EKubfdmvq+KfX#DK>XX4c zMghPzt)c3X%@361dSKHobm-dQqyS*lxTxQq2CqXlJyv;USjZ!B#dh)P(P`R8l#D#r z7_JKRt-QHG$fieqChhXEIO)wlW}3WFrTv<*wC%LK@}Hf#tQ+gcnqMwHb4|O{p5eAB zHGfIc_qw|bvvjJAeV@H8%$vT%x;~K3%kt&TZ`|4qJ(Np~ky~~)*7`(3S;*at^IYz& zdHth#xqjmGtmOH%X0S>cv1Zg{k{=~lg{oi~7$S;maq^C}p<`~bjqS@Ci`fb(&GSoQ z-K+})WBb)B+oa69@r=`1w{#e$Njk>7n#TI*X)4KS6Qf;nJ1ap10|X3YRt?sm*HV^{ zlkHZtjTY}(JCGHN*Vei;@Vpjlg1efvjVEnPr8f6D7{kBajQ&*1fbb3SaJAMwn!}x` zjCQUs#1C~n!GbuX37$?Vs(O;pT zDqD&UYZ~j~jYUQU!6K^N>sOa*R!IrZy+E)b;}rI=1veq8PAt(o?8q$wtl{M3XPWeH z59-zl5LO@`t$EOBqXanT+LbO)5LK~JICB~&IQgFE1=YOKgB*%~8nSsLj%&qjb(^RN zF-+JUiLQdj#zb7~ts}WFVUNO&d-kH-;^K)9?!l(pua-3}*$>t{NXeJi8*aUSh(5G$C~PVGWW_O8d_jC=J~Z%S33hLJtE@H5ygcrT4+ z68N&`xKIUq)W31_*>PVyc#2Ou#Fx$2_k?~`cvbH+I==}+aWtTu;+jYKG#-`Sa*t-F zh9J{P^`$rhn5;ZG&jy!yJ?cL6r|FsoOeHuuBA0rfy^4Sw)4KG{0wvoE4pdVOoxAqM z8SVK}=b8pU`cy~mnu1Ln{{RWA+lX$xX~IU$F=%%BcZsavMG}zP&=HQtxx1^hpTrVg zDk~x5X|5{CuO!RB8MgJsOEul*Ninct$4Zxdq}5JuMeFBpkw={qK$Obr51-;H%%LB9QcGCnXV@H?mRRIM%1#KV(H=Pt*TLWn2e{8sIg17LxsA zLUMXyx)obS&tslcxt-SLq;u*_nDYS#(AAW?)gS|EgU@4J#M*wLVgd7HMeWU6u(;HQ zU9K3S`qw0zds@Kg)Rv6Z)NXYqx{BiF5_XNN?N%;4MW|cZkjb=d$2HH~c)L=K+A^r< z4;z-LUh8+df)6r0FSTVF5|c`6Lmy{5>WvE@5WSpF4ABP!md$6~YQjm`!r&UAypl^J zepNJa+sME(6&=a0mxiXbiP1s0N!)nURgcUnbe<>Y02-1#7S?W3_Aq+_XfJF;l2VJCU%)ij#z+XB|cFce!KEOyR~Vcx6D@P#AXv z^{nY_Cv^F8N$FABSY9Li&OokZb@0l@oVQw?D7>%`pEAk!FYEs$_WrByn$d6nB}$0GeU-J@9PsTTO}8yVVt>GA21q=EMe&XrxIK2}zzipKI!yCMARp`_OKD(RYx zk&*(CF-w96UuvZljOzG#4r(;WT+cYF(bf~n+401F? z^yygDk2E#tTGlo?tNV4kv~B^&uRprCHuFgt7y`Wp&Tld;hPlrYT5Kj&6^0I@jJX+- z>_woyV*Co3wwnVm1B21+T&2*C8I$I6h zaag)!Lw@7hvP=BDk{l2c_Gu$b22+?M!S&7Ai|2HsR-k8iS(_lM(H&BVH9}X zio>*l?&tF)>F-50-@f)DPVVfjXA2pZFU2coqa1A$r(ybvYnNa%KO+>sDws2=Gx+z8Ql&sy}a4qHQE08jvOI@a`KsZ&vc({o2n(O}Z- z7Ty&Afr4qXX}JfA*HRc}vV2FZ!K3N2O6)h|fnCysY;&aK%nOCFvzWERr~|fZm)AAz zBrBvbDQ{Zj^(|KSRl0ZF#1p_3N%Y&Y3p7oSdh=$JmgjsU%B(hffpc(5i~?%4?9Xh& zZ9WK!T&fYyX*HM+nuFBPt$PHK9Cyxon$Uv(0OcUm`Y(kpbtMHxGhHC~XLb`SAk8m! z`V!$5wK-du1ko2xO=UPS@N-@7{2DNYqs~2$+viSx_a#yKX>o4R)R$@ieQ6~5(_wYXWO^~E+5smfu;THCmoo)PS8?rEPOBp*Xky$C zaa|5@dyu0phLPewr7{n=-&)R_P`D9p5e#FVYACPnOgn&4Q|(tVUd`Cp2j(@yd_t4` z5;gT|-dpRU#FkuFpZMzfd0A21U~^RosWgSiE$IpmUSd@ojITVz=4&S=g#%~m%EJJWvBxa-AsU7Y$BjV4LWRr^5WtuNX|JFv24 zunDUcR?T%djBrh73x)NoR(goFxDF3WiMevVUCN4A)ZV(#8Yo$#VptAEWF@q$<#v(v zu8PmZR`&p*;I~p~>33rD5tUMKD~dRZu+m8BbYU%1IfA8FsRtsH2j04IXJI6T*~Uo8 zsHW2G{Nm9ZjMl3e7rG(g-$rw%^`oz2TGu)>$9#ySBK54Tq%j@Ebi$-&uNGk_IK52$ z24=8BAsJW3MRpeY=9WkAtrW9!(zukBKg zv()V-Z36V82xC?sdyG{{ygQ-XUPfb-ENs02=xdqYe75<3KGc@7v}2b$x{hfqR+ngU z%eAy*bkcYN2Kk`79>TfJM$YR>zH2clU^|1wUWW4Nd5&iX>rK3ryBVf!&yKX7B{lAx zn2a-`?Ivdx*qL+9RC$PE+2B@%wYS^kKR-^@e(%HDdA8jh@`-@uNvVrT>$#ey(z(ok zXgW+7cCEcHTY)Y-$$<<;4PZ|fkttKpIL#uael{enGCo!YfAA1 zaL=*ad2jctm9o-jy>PLsHaRsc`Yp^-GVM7W;;QIco{6e!_O}8RfrZ$Py>S4s+UvCwRbj6CX-eR*zR?GV&3A>g5iq}J*p26GD!u*Zb2uJn&$M) zD^S%Cm=Ki}zhU96cGf{6Te%tJVzP`BRgtrklhmiLTE-P5MA}K@R>g*y7xs0pnxiZW z8mX&kdaKGAtmN7Ur6cN>Q9~4RTe|sZSMJo-jNQ3M1r*)RglSrMh6iX=mQvN7sA(2o zWU*vTtutY&v|8M9EGqA?EM;lenx(n3vQ&^08w}>Tm$gjUs%&PX;izqX)X641tYhCa z#qiC+`#FkZ`^4TbYWAh6$1>c7A%n)f`_-*B@r|{N-Oz16N){rlBYTa}gLW~~PSoLq zIGOg6K<1*9UjzldWjt~#t1^!(%WPmVVO1q`SQrnOFF5q9o-3Pp-I&geJ(9W4MW;(Y z%;=-=tI%n2L-RSorAzNIwx<=fVPGYU+)4wYoDrV2omojonpz>#!?(7EMAs49FUo}b zip`r?Qcgip^sa{f2raHRpjL^w1FkDB>e9mHPB?0C=}M%zUn)aUL@>c} z!#nf%)ZR_NINeXRmt*biSIUMTTIH2Sn54N~jHxZ|8yIu+txY=0LO*zOO^PGuR=Q#c zbBc3wujKyIjP=03n8m|l*T|#Yn-~eJ4zFp+J!f`(ot6#CD4$5^OIKX z?-io*gJQ8uZfF+d$sUo!<_Amri6LMbY zJw{2razU!`-59QcVT_u&!}2juPiz=uR3@H`r0jI|Hwt#ToP*Y`>Ne|jX543r2m=9=DgbU0uc zY42{%(7Qo3=o$u=wy-R+oy=;vdzwmVE2D2rvr8*=W>LJ>)vWAT9M&sc0&(e9lKMM% zOR?xG;`PwvZONSt?z)<7nRg?0IIlI-uP;1Ps9>=WgTSiVmx*Az)Pysi+=I_G*J&Tv zEp8-^V6Bf@n)PItDc4E~YD1-XUf#|jEWt@0wU^>8O5WBsjwMiP=DDs#ZyPK#s-*EMG#igk0&E2D$NZ3BjmERpL~ zD7)xSJWou}bhzx`2WT8t>7E$S?vX|Zb6z_yjCD5~V<89Dvu<_GPH=q7rU3R8QC2aO zqTc7RUF&*%yf|ss^Q=u%#QH4O?HiP0Mk~o>npt>~W^bve3vD?DpD8}kEs?b~^}W6O zvLGoc1F#;MrsLEVMs%7^yLW2-L6n8*lU?SY zEO(G*OYOeE*N}<8NT&8DI?@rHA{~M)$$G zZOnU;FpZ9)vA^LO)wJc`V|L7=qOq#ww&-`h%zr{_!(w)CN<%DM#TBRp8w`EuiWwbuu4^_+zdr0Hax+~`v|%A!4%H!Z zJQQgDmi6s0AzET0g(mdy(e2&_VP5=R8px3N>g z)Mmx|8Y#js_)to2Tb%@!_R`4P;a*AYP_~Ju&DK19DuT^@1dX{%;-*bi@;Ac6j(D$c z*hWb6eXP?YZwcDTlN_wIQf~*&hs=)P5C=n6;-2#QYm;^Nj;+F1{JW8F&QB%Jp(>}O2y?xD*^31i$GR5E-# z(JsbgFCKe?kzEfDVpUt7I`TA%3m!#276TctP@mx}QUmsD?0NKBBlE_(%LjqCc3n@?d&ZX4N$mxes#` zgbvuKaMtF&)7`PPb8PpXVT~1IUbT#xGF{vV!Q`4`n!_}uh-Ds>MRh4Ac$lsZc%>-I zprYf|9;x7+1nHV=&yD+jYcdsG6C_En{{VSvE1d^MzeYy4gpxY}#dA7b z&2^_VmW_zVQHpugUd)CB0y~cM{j#^bMXb&f#$E^h&A53XQX+0a1Ep}Qqg=@@)h8LR zXw`f~nvI)V$eXkJS0u`@leIv}u1Vq?9igewQc#>#)}|Gfgkl@#elg8kn*JL&8Ddhw zI*>RO9n|wlcjW>~cOsDm+G$sow&F7s>^#Cp&7VP2?4>_?Zsro^*%;RzBbk_m1PYed zUwklh7-54|pG}opZ<0y$#YJypadUK#MGF>lfH7TBqXw*zN>Zj@w2oWbpe<0BC!nub z@b84D77O;U@;rkjRPa8z;QuWOeOac^0Ejl?+Om-o+}Wvn=kU zO-ea{8KD>m$1+9b#$+YW1PVi{EK@WxbF||% z%T^PvUdXxdC2cAm9XWho}v7YEj@Y4(iM z0=dN%Ez5Rl?I`MM+S`J65leD%c8b+YaSgUlTviRt0LNj=Zp7> zI#pDv>C4D0XXw$7voSqtYp^#A{uMlS;sD-G2sItRC6E!;v2s$C$GH+F)aSoSR3mvt z=hCg;!Q|UU!m1ycRz)1t+;hU6XbG-omrl z{#;efSLW1Q)d`N(CpC1Jx{#jcE~h46ZfYGi+}&L&scuQB+>0wQ1ZNCJD?3fIC5(KCQk?t{g3I$n;`U~Tzp6x1Vc zyirT3K`dmtA~@9T?rV11#tk+d&y3Z}hPBdd&T+U3;4`i8d!Dy3}D$L_0l^30ZF&bdFm+$*sLU z!WE1$T%UTSZ*IW`c&%7uSfjyV#br`$=!%Psb!NSc0J!J?u8D8rh9JAT3gR165Uv%m zROHqRG5LuVnv9IoF_vLB&$O)(yw*)reEpxW?7+a58BZSCP6Qr^z&h6w|q} zb!!Z)3}lnsntVwtYlU(?hOx%1{0YiGzCh7M}Lns`?cp!_MS=FyxU=Q=c- zjpcUW`_U$sG(#*!TD>}yk{1~R+OwW}gOMX1D^(`VR3P>vXc%#tZFwTO&0( z{`x$F^HtwLI%?y5ymd7AKEPbiUFA#HX{{WRzOQ4-O8!+5FWDvv}=rrFETw9gQq~p}r6fR{!^TxyQr;S7b z$i+Kcn@JwQW8=lz5^Q~Is?+uB8^}i4R3A*&&q=6^ed@VytV;>ZQk6c&mo2s*sy>D= z!EqVfs_I8^UOnTRC~fcO@{}rt&IL)M`0n!2cF1?7WB8L>{?uuu+w(B0rnMhKgqAdz z@Njcp$?*43wYSoe2apEoUN*6~Wdt6z?H&;D{k6`C8=fR1twm?DWkCt?I^_<8s*Dcj z9V^L4O6|TO+T2*j3`SDOTYzhWSvwl;!z)1NukjOP6O2;uDVYX>dsjh#xya6F>(-mj zITQ+GB+db9HfW|>5NJ^ug-U+GUGfG80pE2zq^DYAXLh%~7nZ0~`_4h~nPSdYgR zEoTWZOU%s29RMf2Ub68GtllHKjyFSU@NPgrz-(7S#ZD_xOAQ8NE497UcNUmZpn^WN z9mLaIxL~2!b*X&CxSB&bRB0Ok^a8h+K(IP$tTzR&M2aM3JpryMRCtP<)7cdmaxPey z*7xy88l<{=0tm}vIj3DmpEu@e%E4%0JD!jUOqXpf(K2&og z%eXc=S7c{RZJ@0q1$1pTNme^+sUvcmy7%<1pGm)(JsJ|EJEN3hPo;DJ0Pv7$i+=W( z7OEvi+IX$YEn`QCOe?hkoYTCZlI? zo>WuD7qAAbTItcLX;i1p)wgx7X}5D~e7vsvmo6L4v5}-54lB=ZDBb!uxReOc(u;;R(5BFZ(5TaviN zV79AoaWOK?7bouKu;H_~ytWdlAxR>hx(ukK$+k@Y00}(P)=%Hiha`>v05;O-h@h4| z-kGRx^ywg$6fOeE-!;iiVH`6JzI+Z&0S7f!d3BjD{=$<v7|=gdsZVKdlgUq63c-w-y03xv0SsmRF1J_TdHSA zH4wzqr2X_M zHr1K!wzsyzH7g?Ed(&_HS!ZDx%%PvMuO!!xeX8|S5#2ZERx}I9>~%qNsc)1HoM#o; zPa8^Z#B!a@)yBEv6)Oa0*4@92x{+C<;oYcXHRGA2Jd(#X)mr$wMwSoVPaZ(%cs0)J zo;b0Ln9@=BS64C_U&D^tKt|g(ZaS#u3j@6 zd4g0WUb$;H&8VPPIJ<%-n4Q&X!WhJ%oNzg*Z?xeI?8pdGatrK)zN~cL8vV3B%b)JDt7lif|+S7UHIm8s* z^cAF~eMoTD$2p^Ex`wT&rJamVB<^skz3a8rd@Xn3jR|jc3$$C3+kVPE@cPyL6>R)B zskQBe%wK7NvYu~32*Lh!&3LC(z1Ou%i<`;SnnRo?-5t0TrwUFwkhCh>YY^Rht;Rdn zoEHTKRktN^hfA4q$v5CC?WN7lugc`G^{+m*9uMIb=UFwawxF574_EY^En~nVrDEyV z0_D^%2D>{&5nJwWO7iRTL*2Pf>NaH!U6vR&jt(n_y=E*}cCM3OX=PSu`2x9jm^>^P z;jz-T!^X_HW7{gZFYqm0{ zze=rP2#VaRa7AC)x*fx)uRgTzBJE^k8<}lx_7X~yTP0(e5zYg4tlQ{Bh$J0HT6$c0 zhA6@0U>c`sB+xxeck3jO?dkyHv+WqG7~l1+xm-aS@90HW5k+t}$JU`s-PA;Je1xxR zuF;P$k6N=dWjV)6W3J^{JC3wP^)!p_K-Pu(8r$&1$!hXO=N)O5@rhyFqN%DF@3`YN zok!0X7DcSuFJA!HaxkoW*4Z0Y)RB@2J!>ZB+|0r?>P{(9l3S9#BR59Vn)36^W%)tx zTbh7rWLqn6Njz~{Fj_91r-e{F#uc%lXky&`y63BN&1>yFq`BV9Vy&&p`bUOD5G&2p z^{dy{_WE20X#n=Abvq3OTC`#g16y)NLjQ(x=)<^&?UNroa!~%}$zpOmHItpA_n= zlh&NlJcldAE57EDQQd*lEzoXkW~)Dv7{}#|dey+JqEcoZO)FFmatXatlul+ubl%lLVhy=`Fq;LSYgt*#uS@mz~PkKU%+O;)}Zs zD>md5<0kr@5UtIlB_04vmzFk@8)=gKF~miZT=AS$>wg$R%-hb^Z+h$OHLF|5MkHL3 zjApb=n>Nlr!@d$-HgacB;QH5VW1{Kq2zzMH;ZK$|^AxTzinV6JW!s*$lKv*4H|}Uw zxbUWtFgvXff52-N>*4l|DaeEa^sdzOs2;j!8$ApoIUF4S01Gs?i!qX|ip!VbGO`wi z;DhO2s1NQ3(uDs2S5;@+J)=BkZ-$zj2+bUufbCqR{4(j%yf-V#oE+EE2mMQZE5ZDB zR9#+wzr|}#?{PQGbLuVS!59X*trx`i8e|I;XDTbtU@l}-Q-XM|sQ7bIhS4rm7D6a| zuSO-zwk-IkRg+tIiz&iaD=oM^u}gib&u4Mv$fV<~F?Ben86yU|Df2}b&8GDu*vZqS zDv{9C+vAXBNT?esbBftaix0@f1N5lG%0Bg6fvu##Bm-B>E>Z^jhlyio-GOKouq^BABdaSjqNJ4#jHrVo8Ji#~rF~BG)G2V%U8E#cLsfVkJN$wGcqE zl1LkCigkJPI$SL5jQF(s4N41xEx|`lP-h*g4Kqr+Sj3i^rp1-O+Q%nwt;saISwH2F z9;9(qTS9?wVUkGpoQyX^TE?P^vJ-$sYvNmb`=^fNTztD-SnkaDM{YLwNq7c0J|6IwFciLIr7FbuE; zvzNr0wX2m|sQ?|A*8ZUFWvfpT<7qhjD?d}RxA|X<$CHlrnyTRJ-P1LkBPjDCIJ|4B zFUss6KDBDsSh;z`^4sS=)lMkv(kfXj@nEm=sg@>Jv{90zp60At?b6DH zIE_w1;s~o!s9e~umm8hCw`1P7f4B7_7Hy;eI3kLaZuyZ3o}Fi2D7Tes%wjLDax?suAF&vVX@rH;;jnw zJIdU#rN?BBD|g|#jUxzoF;HRY9~?>(!y6S+G`S_0kUg)3-c^_F_1lR zTYebu){dKHymcq33~RV?;b<+ku(wqM+OU=i6V!amspcEwkop>}HHtYVuXv_yGC9j> z(x1i>VeD zyVTXyF0F3uo+MA391&cVwY2MT^8!|`TFwI!&VL%W_L$YPit3$5vOyVg%IIuR1P6|_ zXv;dF5%G@o5?&#Fyb6)8p-v7fDLHAOqLk#@MvcC=sl^zLW-7hFsHM4{ciiqt&swUN zkiKz9_d8BhW|utPfZ;T*NhDH8qO6~XE0TxHelo^$Oy8oM~WmpK@$n}{Wi$zfj23Q&k$ zjgA+%mp-+*XJqh@NX=r~+_X)=uA0fNCX067F;`vLYp|?H6U<_`BA%tK)T!l7K{eak zpPeZq)Z&?NK|h6aI(JuF7OpX6SCNqPHBFG(-m4$FOv%wSl?DMPfl|KC3oPLRW1%cUOBA&~47CJUG_qU@~16@?D=P6 zpw=$`0BP78eOYO)E#n_}W}_EsTM9BwEIKkE-6Q^Wb`3ri!>G+mP_b0tq*XA={Nt?y zPnEiw=n@#jK;xQZi;kG6=g{3!iZEK##(MOspKB>T%G|sS=v8JwW*t>C9^xrKO2q~ zcp@F5-e8Bh_5ZeoPF$dsII&*XLyCJ z$jKSNu7Uo`ew-CNb*$&Ln#Ie+Nl!|XP0j;W(Qfp%ErL*Ytf457VZU1SJIjb~Z9J*a zZawRb)_gA|vi+jmWltmuO)iHuN)O_R$z0nO#U6Vf6-wv{{oN z4AYHEX(DOXYu%CB_-n z8;8RJ2Q^Zs_M&yBnmwTOs3bV1+FnI>Zm$~x2&9zOvUf*3Rhc^f0H_~IR2Yhyzv@TQ zl}=*KT4b@Tacv>*itrB`NxEB%p0Xe3Ui&%4l&9LheDQ;BmHYni{{TALo``7XtQ0l; zEB?^0p|rbr-$aQdKtWph{{Tr{+N=xy*sr1V@v};d_6b;2_>rpE@c#fBS->^<<3#`g zT!fIdyJQTlb-pQ^%<&D`^lVlc0fq<_>C;U`991=wD#TUC%5Z%uW4&?CYP{CX8Q&Q{ zN_1B{j@Ro~WX$#^45vGmk0}o-aB1TQwH{bBa$8~Z5zFSN7-LyC*Akc7Sn=;#^5q9w z%a_WUY#y{-t-)?}z7>gufpR+5{{TLQtLPCd8d@n*0q=^~5u*+$rwI~4xtg)kL_c+bse-v2RP(ePsh6Ji7=0=y))XPw0jg%)9$KK0 z59^e zgWedHGTl{bgy!Nkw^ubsVLmZ(5S; zP+6G(j|vV>YB}#rj)pK)1I=X_)=42X7F=EMph*Ie)0&Rr&Iy3rfDznO6HI0R43R)5 zfz1ka8r720*%HTZ6fKZ?Q7ouQH5qwVt z5jbogYQ$-78}6YZtlF~f26)>Y_^siGVrR1ekSnD7Nu<9MtpIBT^`A$)JdEym$PT)Rv%hw+%pUl&$T%jwY^M6gJLnST=3t+ zeJEQj_g4zfjF3pI{f)#fIWP zcZz<&Ep98^^H{BfdGi4kFcD{p+ti-Pv*m@)wP6^GK3Aq|3XrqC%Skc*TxaV|cq4wi zRfysP?^MR#Hsm#Px!H}yrJ+hYbU~0Rz;y!{r<+zC4r(WYMD0|nU#T}MPrb9WRTFDG zua1D$kt`1)fc){rXr|W1MXsod-$dQZKj&QriK0d?6@Ui@veI`10M**~ZWkas0bID6 z(@@mfUdNX4z0Jw?+SuT6#d-dsW}4}WKN;^`SBUik3?)|?^shaZ@_#U}tZ;PQxrnC( z<95yKTN$nw1anzh-j_AH63fLFn*8?UWYX%o{{Y(HD*V@cAtfRjNabP&&aTr(apZt& zn6bBcbv zQkCH1R5goCn^(0|K*_+Y>po=KTDP@Gx7cKQRyBpGm05>Xt*FZM$&K1APLo8tl#dDCltbv9At>~qML>!S>R86wFYFQC9 za-_g;I@Ouw6Av|p02M8~@XK$GD?3%YjvIe12pROO6$v&aFLuW@s7lw@;wAf__O6E2 zBDA(uQS)P(t!ry%1V3qJ16*g6)|x<8E(KLOZbCHWoS&372|QNyrIo$ChnY9cBaW5F=w` zdYM8FZsrBu_V1BT6{%&DW*fb8_c1ItEQ;HJJwrNj590M!Yp_LgUr8S2brsDgV`%fc`PXgKn`H4RCjo?c%I5pWGobgRP zaZ_(F=Vt|b;TWtGG92!zarg>bglmO-7OvM>`>_vGT3UMTu|Zc9H#;kyTR(#Dp(k(5 zD?V)s{s4DGYuOwEPXeKm7?~S#1Nc+b3z@0Gup5ri62_t(>z%$ zCk%d5!3L$nsk~;Sv@Ytt9Z92U?Z?lagS~T}OqTK$kxG$WygIG4sE->CzcS{ez0xhU zTW>ZEyUFJj6NS;8T1r}@gPPqgP=+0An$$F@EoAed$j2iU+FjUBWh*3#a68pvi87U7 z4QEcQsk<`;HwS46;V&G^X6tQq#{-UQ)$H|nFX2~52R`-TdZvh1GR5`cjSs}vdPT~` zGd93SCc4^FT+ljWB_rt7{{T=vl&k)xurxmrTk3W(kn6i1wY;Y=gI5-3B+(7yZPTVc z#=dy*Q|_2^{6@Zl)nCie=Wq5+eDC5%&B_k7ygm>`PYlcsM$ZJ0sJXH5iWW1gK0KDY>wGDd_*x;V5 zQh4U8O>7@5yc(XA9QLNyVo^>jhK;sA=U3w)xg9DAU|AQAwG2`;4Yj!xTs+Gc2jy?2 zV%sT~QjJG<6|HpHh>_`3^a#A|e%W!KoKly258 z^b6(MK%F+mqx7jqPLwKY#)_jy9VUfw8RMK(52sF}l{MS#80ZZ$REus%6rB~&(N?zS z5B4_$1XNN$6jxg`P_}R@I%@#r91BD${yLeT0lHg<jm9h;E?PE#(Y$ha3vlnoV9ta&~q{wqII|RP*;DyeRrQEt(T{8t;*lO=>?`c;aexQmTyD3i$2Hx-13BPQtd)YB zcR9qoyCViL=h~ucw#oBjW&9~)ot3f$B$7!f`@B~gUPnu0uw26r-h=7YYh>4^F<(FZ98g z?bXzO5**WXY_2bBeF=ZH$3VRODUYd4bA`oZwc6zDA2*>D3*O6;I&tYzm9|245v4W# z#t+N|W=}k>PUpxp(6h`q$*UIj1f0r16-wq#?^2{z?=xXkpQTDI z(#9RkQe%Ph9vFI5qg0P!R<{}TteLJ7GC&6+?nJT8;ki6@*Z8q3x+rqhV>TX^=Ulw>{3)tp-$$Ot3Stfz`K2tg5DOb4K2SH&Htx7BaY=+{qbyF)r z7CD`|@mf$qRD9IyXaX-h)Ur5Hfn2kx%+%(=*>%QKYhaOJ?qdcVp}@^PaIbt;h3bJea;VB>NT6h zw6iKsIIavsl%}8$vB~TDkDGK?wrdVqP{v5cYV5Py+`AltO;euDS~67RSA8o*B+*{$ zF(#ae2v(~Q+nL5qK{O^eH8s7%MaB(wJ+vmw)w4rn;DM1^7Z-~z*4vC$WH&q1Wlc`9 zqwqy@$}R3`7UFEfD$5o#Syzd&aKqN5j5-XXaaHaeq!{m9@uK4N6fBvsA@j7dJ*zKD zJ6YDQTU-UQF}GY*OI0yS#|H+AaFkO-r)#3S%d+@^(4J{8px+;ug9fZNpDdD>1A|uM zv6163ur;?UO*9%NVARfOIZG8b{dq?IF%MR3^}^{FM9C6P*=f}%>w7bAPWvn zZOI^wa5~ilnNV=prZvj%++0^2qbWPGTD#Qk{4wG0wGnr6M#0VvRq@A(Beb_RR%8y` zRu}vwS5Vt|5y}-Y+OX%ij^<+|&%KXYs6nT8ZO)>sig7#0H#SKpn(3`4jV+N$=CH)p z>(YaGgP}E2i*q`)y9zFbgoQE$+eK0!<>#Gae&jQ|up6`)PDXq(|aQ zI6&lPwRGlaQ$cIWb>=_R`>ns1@$^881$2jv9* z6$ig z;q|KaZIjN|L))V96^7CK!THiYvt=ZUiAP^r@gKLZ{Pbb?)QhQO{#!nO-lgoFhN@ek z?k4)qT!SKzdsarJqgZMv#aTld^2F99UY9NT)rkB-c8BD-$@itnBp%gvEo&Mx>C!L+ zGS)EQXEmX7soq{jL!H^~D>ST$leGR-Mo&k0ikI`-N*NgA(z-nl#jR;_o@0EZ@(ps# z3mT218Orve$l4WCTAtJ7TWfY^Wdr6F$!dBmwo;ZwEVU1YyjCnNR@!cYx|qB}r(Q~{ zD=rVMa!wBVnz+KE)Z-AVjgByTgIM~$h?60B$IL6f*DSQjP|a-W8``;5x{NW6m>g1E z^qt~ywCS^#(>0sj2IW+8bQAvwdPuunGMusmm8~{hUW7_x(tkV zgVMVrB~@K+Zy6?!qV?GU&?hQ$l{NFvcQ5d zT`{_bqPC`=f@2S_$Lwp_d_yOb;rWk1BmR}-UI9S*(v#Y~N5+!*J{Y+t`x^lv*ewmCp|qXxRkNMT0@dJu9(tM)tE|h zmctWs@D$a{drX|S568!hfRPyfSkTK7397mx4X2xk~x^ zz3+&vtmJY)8{68ecuLk=dmlPR;l@C%zYB+(#5Z@~e(pcrX0l52)W5QIi=e<1mSV&X z^~T=A3}R>7-1V2yxUT9?_76?{8l7GZ()~q<07?DM40|1mrl|oBFaJ=`=^@a z4y$>2CdkR>(zfk<*=lVoBg|G?yMc}P9+fPX zlEoJHJXfR-hww;pNsOQFn&-S(;ib^*mDc6lH$c@YlTu8tXqwdK5>-gU3}&tB7mqfQ zsn}K;NOl~Wu`IGrZRN%Z9qXl-7!wWB98~txi+)rM)nI9p%=lF}tt(#*7CWVU3bdZ& zGAn!O?idG{s(ov!)7wXdLtQbI!0FbZ({vjtBoM}?Ni$xT;lBV_#8%?w6=v!Is<&`V z;Dw`V`jQwlr)y>G6Rm1$9tN9HhzK;(Z^v5pt6K|ec*4aBCwDH?G?R0E9GFNm)a>Q;+?PAhhK1*V_0aB*A({By}WNEn=&;lnOz zxv+wZcWi<5{GZ*v57wi2uVEMjkyWOa<`(xGe;z>F;COw5Wkk-Vzg6jwb-6AHn&k&&a9K=u+{bw*2MXb6s}1W z$A`$6fOxGiRirYfahjns7PvXAxtn^Est04Xsa>ivVXE_vJ*y*Ba}pkLPL{F=mD1G` zP3qV+wQs1&5`-T$apv+ucs12{d$Y^|71=1;;wc*_rs*=vf@!U$WlI6gZ7dK=24m}4 zje2dSF~~UetX(^WjEkEm90oON-rmAHL*}vbaazDbaJd9kOPx3zl@zS@1tyMuOC@(C zIoqBoMYIXkvr^q#NT&ggE1>YyS|I-bkdt%YG&a&ME1Rj!h+)qIHKlE(ESp%b71ZB1 zhLy;-10AZESlj(q3EH!%Cbl$$BE}6O#s~wQyNzmTwz_JCEUHh^vhOXNqVw0@tXaZT zD9vKz?YXjwI(UtQZx|7-GwE8oZoQ@2+{zfBBN!FSG9AhXQaBXP_(q;bGj46|$*lQ{ z~=sVL0_m=uROu6KPkGkD3<8(zI1>V(E4P@m36=F&>ngm9lBZ=!qxQ6~53{?ff%g2+cw7Jt5$DP6}D!;y_~KVcE_gbZs*S6*)_}ync_Qh(xi`2osKed z=~U>A#XhG_FJ@i~W~$vc+Enfw)^NGFRm(=ieJWV5H*mm;%~Ivn2PBrLi7lj!$x?Ac z#UrsNn$nIk>9};HXv+0ke$nhDCYh_?X%f>@-yy)R-^ZGyGWcRejlnE2it_|>3vN~_ zeX47l$?l;MNg-tvqonzne%DJhVe{9T4>fqe4Mg_U=*JNja=4X60GgGcVN58)w-u_K zUd&bjoM){m98zNxyRfxFGj#*Cg>`=pguiQ+Wf|HJ@~%5je9Mg2ru-<1Hn+Ll21vlo zQnQj2z8wv=zqyh_=M%TmwJbwikP@uLqj{H19ezylTF~jy+mGE~S9i3GOjI0&wXg^Q zezkZ2qX1M&<#;_Q>T)>ztD2=pCUimx5(C9A)|x5Rk!PP=c&^hxvz9d4Wy#0Ac}}^h z+-rA@GcP3Zfke+G#le#0%X3!kCyE&XF)2~V$gG=57i*hZJ6u`lY-bqSxm?$C;JX1I zhPTMSJYnYtU_#LdU=-+PxmvT81qy-Y8gYNWkKRxiqZ9E z2il+F3wxKECvmh9ilrUD01`>AX~8F}G>+Puv0dAs7#aL2X1`6vl}0|5QVS=Mum&qc zX<tcJ@}xQ_lNw~sHJ3g4gmYIuvv<|OpZXCqtKvbum7c?aID#i?ED<7VPh zJmR|P%iXbzx4DMeUFM;8u*~eaS#t+?VaPtvVq4mwhn6;=T9(MJjg;Yre+noQF|0NAfQ_@h4- zQS{GR^cG+TIIk@DopO@h+oCWfMF4P16EuYfO!HkuwX9KTfQ1>XNSALQb*_%yJ=$hX zS|rVglK4@9>sO*jxM30#lisPT<@~iDjdWU6F~Nd<@$XuhoiBxSh^<*!hGgnZdOfKa zP&!uyrA$PF72DW8=)vzqff~zzwUw>it)8DW%s|4L(?E?nm{DO9a(QaTq|_qY zEgo^JUbdmAOEVrb#b*UCAW@!bXTtl{`wKoi(mL0fN-nhS#)hl{D1GXM$5LxveulCx z2U_%bc~y}2GVVtQ(y^yu$nRR$Y!y$fU|h&Dd8g1r0)pI*Gg`7(MlDuFZq=0;%H-9d za^?{oVKncdv|6!TBQub^*I(gVCq^4`XEoefB3r^TFgw={GPk?Pij;IQ zd`YOhU%Oo5xxeikAuamXVXIALBxDo>*A08L%uyGN)nVfvRT~-9N;(gTjpU<_Gh0x= zu%H;KdUOjC1B$-uD=y_ie+qMwZph6iErfYh0qIocyeEY}l~B|txJ-hCRSRuOTWNO` zRvwHiSW#_UwHT-G7H)5)G_cGaSvy%B43Q(5q()vz}Z zp=1L&6^Uk&+{EDt%JGW#zc$iO56G^n#g~pN$L;LSovylLG054hs!GtmR9)WarE4UX zy*-vO`_e1Zs+(FD6{*|a zUfF2t96n%a4^f(}eGFIjzG4rUj@9R`_jlJOc?&ZWoSN%&OSu*gDqq&KvWhM0WlME& zr^}7Rfm+sD$(;aoB>gG3_CIQrZCvNlx3s+~SS>(ZJ>282Dko7P#wtk2nWLLNwVgG- z;&Ic~wl4I2NY2uInUQnT62(PI7uy^_GV=&`&kPMXX*#>QrzIbvjnFsZP0Fr|VfbX{pes zeU84LcG=S;|>pcK{Q*DThaBgZqT`iew{ z#4G%2e+rup#--@pe52d?*3t|_IPF{{<68S)%m(Vz4dMY98&epnS_4-)JYlJhKX>@o zHYL}A{{U8|q)VM_r!bBw1&)Vkz~eO$MKX-2tW?#tD7co;@##_~yZh1R!przj&?IXZ zP?MBj%9?Fpb;Cx#l~#{cwtnS)wPh~gam0d)2Bk;QEUpe775u9QR`6U7q}%+Y_O8Mv zR>1@xr6jzveQJ=espA^2g|BQ~kCs_SrBk!g&BVJIwx2^@-tb2`*yspm=ZeJCJS7Fg z$t}3@+;qiPHOF(6e}~TYt1NQ-x%SPbuB|kaSh}};v5DQVsx_c z0&PO2k8brG?L9>*N=WdlyCAY}QBrB~#T~-Cs30Cic77)C%(`66Lgo|PS2=HFBytq< zT^#pEKPyhhd!(j=sX&oQ8V9XgzlWMt(uTJylj&YrJI$xfl1k&D2DbFS8s6Em{`9(f zW}}gOliFxv%)rJ!4N;NW%)@1^YvA&7YSvs#3ge zo~BZdGrBI{*fM3)n&AgUMPut)Fu6u_9MYjxDRR^kcUEQ`dcvG$ ztfr?E_pWy4(o0ziusl>MTd}W4*g{&PCUvWI6Cb@&Z-|aau1pz}WD`yob0#yIpR2XA z5!Lxf-7!p(*b#*_&ZemROVMS{-b0Kty6`CX&rWJOEnuEro3Vo~A^#$Ig@`Jl1cC6;PX5o1zr?#iq3-FVjKV}%xqVuZk4nQDshS5o6F;_x&hux(;iLe;Hiu#>5A`MgIT^tf1meyGP+vD;=?v zCqA8OrN*laApGM$TJz0M#_r0(-;?#}T%7vl<;10=oryh%YAy$)>i#W)-B>JxHRk%o z{{Z%t$(M08Qbc)<=^T=M>8~G_!ExG}6Eq+L$Wzyf-?BUO=@fcbIc(dl7!IJItW5^3LoA)y;S=t*A+aTefL4}=qnm3VIz{=2%~!u%mc@19>2g3#^e`sx z#bn%_q}IL9aagzQg(j{=BNF;gy@Ooz&AG^}YuS3%MmJ0N(o7mHG6=1avB{>xGKU3+ zO0{Y8xdccf1qI^KX|05?^CtRpfxR zwlU5rvsyg%B^#;Yvco-n2&a44^Eo5TjD6{#yiO!SLoXv0(q4FG<{;84@M{KWo+jGh z@m{oQDQwD=8r>eD;LjHQzRT=4Er}FhWc95}%{^M-WdIx;=Ddc+;#*6Unl`~x+P#~@ zS261vYL{`m4r`AU7PUg#R6A3)`%a#!y+G!;@P;XxGt?Ycru~I&Y^0I7z^^#DA@vDZ z4mVdHvv699O3@@`{oh{I&+DXlCb}**;MNARq1Oc9RZw2~6*Z~H50v!gtU#wbnDJHa zNm=%-Scv8#Ij>?%KwH?-k5fpOY9>uv)9&TEoB~2FdYb2y9(&fVlW6yIgjUDWu$*F* z%_6ls%UK|TSe&}Qt#C(Gxb4_2iONH-T)V8RkgN*b7wQ{!RPL=jE83%4E-k+(x zo9)jO`;9(m*LDvzMdHs<%_nAz*EAX3>6+nSFyF0e$*+zB^sh6wo?BhH8^62%x}Batbf8;XjA~Me+uLz)uBle90H@QZ|T=o5{3QJ zXX#OPjd@etxhIOP`iP|e0KRGu_)62Dwvhf6u8>;E_hL`VrWSAy`DDM9E8Je{=yP&w z9%R0GiGuo7&-hBB^2Q*O@~LFEjjzfC7|7!luGV(@01+mBl~K4!$EkumQx;BOlk%x! z@olm$(`_L?O4JsX`;YFEr==2E+o(h3CqC6lwW%+a>0=?hRRKKP$^QU+)Ca_tk0;G) zPt_}-Hg@}e)TiZ8t)vE1`;`2uWX75~_tx~+&g)iR!i2rjoP4hF*Fp9RQ=Gz|l|?3# zWa@JQepC+VscK+nQx)Qo?rT&smqEQ)f!Ng~(5%lz+w`WsjG|4cG>gX=G|-)&Q&uI+ zihB-fd83obc8HC~rfU&2+vtDQ-V=_@D($qF$%UAqUr}1ct7>M`z0gZ<9P#a)0}?sn zx!JTQhWJZh5#g5bU+!gil(+V*xbX-#>adF4Z^!R0U;@m$^3n=YGvBbPo| zJR0e>EiUiF*V$m(LF?;Rnk#*N&?(26jy-DQE?+`cx-*=-vW`1+c$^&d6_CoUka1SE z7%nushJr>o9WzGgn4VHZ8S+ zH%hNPkCvIO7^PVUT8{0p8LJh{O}IGkT2}E+v4#NRs3$WIt#)>hui4NQ=M>=V%4*|0 zH>gW(s4i6VThi(+E~M<~@`|Zr3{hPyg+~UuH?p*teWVZx9E$0TlUo@$S=`5MY7~4F zts7ld%0MzetgG7yBqT2evSiZbQ}VH;Xf{%ENbVO>wOkZnaavL9(8&(c21k1HKeAm$ zK36pLlJ+Ci)kQ>^HqAu0k4Z)>L4Q+GrNZiBMV@ai6dCK*v#)MicWI_>q>#0i*9Jx) zAHY{PDoazLCW*r;`LTnQ&&q38!dG^-n(BR~FzDP2)Vd#q?llByCVwe5U@a@M&plJ-ViZ5=V`S~?c3ZKn8oJ=iiaEsEuJ9Y#4Pa);$L zoh|FKY+e_(Dbr@;2c!K29uWNti=+dRnJ+^PE%20{~*G$t$NgIQFW|aO`-iQL!!DzbMB;RHc!? z;8Z?q=Omh`eXU1og;Z{morQ3?yD<~HKT6G>=1KTDRjjwwC6?#Rlb>pyKeSvD=mM=% zT&m=AT#`US;Yp$?HjFf2nn4`M-1AfU>k|R9E%d36GX}?_fV<@wBegbC&cVpqr>8Wp zBB(CFG>4$AwkH9HIIgotUDoUX?Odg=-eKOmPYuQ9 z$0DAab4~0@+{Kx3aKqlNTO0w+SG_`)Z}q3!x6O}A)iNIEQ>Hm3Yoxr@7f;gILx?v2Kv@j>T*WoiHUo1_jgiE^*9oxm&CF;LlTDx1s5ASz4i086&M#3K#d7`FosA*N39hFHuU2l?J^F!V>=g#Xk~u zS7G|sJL0kb025fh>zJ*72+98d5_wnqlN#)XjJYp$9a&&T4hZzBms&=fdbqfqdGT;{W^phgTq9{ko`#tG<)_OrIhHN$v|QMH~%3leVi0~F5>UR=Z(c`=^Gva3aWXp5%xI_pbv_Wdf2!FU9K zlZE6~#*pG@2*)*BR=a5u=cdjw=sYvx-n;j~Vu* z)O0;g&SsF=Paizx4P{Alc$rsL9=R3j#*2%(I$cE7nM-EIuD8K=lSO(INJ5j-HORX; zB$3v-FA6a?$?KZBsq&emn?1MA6KJvmImLN(0v&``uPG*kqSGT@rn(OeowtIp{H8<5Jl5BTa4$t+Ro*Pt8=m>$h6c<7{o2z@ zGs{GK^sJ8ypY%cWu8z}`KU(13o3~=Uy2!IQY}M~tgn!4w8kam8B22Y7{YE8wsk7@` z6GtT4(LfH+_2^ea7gCezYml&rPvRC(KZ>=V!ZSYn_d;%&%rU8bp{qsCoFBDq(#kpmK^ZgHBcrgO@h zj;M|+gS+Qrn%A?vk`fA@1z||N$6A`&d^Xmok~F7VqdWaK!~`%`HP%{cG0cGGyqOq} znNBNLPu1mxfGle(9SvOX5rg07kG)$`5TFX<>~GY{j>jaL>CMte1_-AXMB}Oy;1YA% ziMe=&X@S8l^c45zbsX?1x1fm_{Iv{!>l@fq&C`m3KJ=8H;*P`fK?JW9-qh}x6-Z;^ zQgUek%&nhFScxU6MoXHcOC6j7J*lAbqdloue2h<1#ULNN9>S@JLNIE)d|nE+>x!s@ z7m9OPNotKFs%C_o)CvCp9|ERxP{YjTw0oJYjGqx`aca=A6&tZ$M}2L1;mt*W2X1(; zcFt$TbDk&g^jfqH@(uXTYLl>h?x05*rvP$Lg z-0@qtp)l0!d@rtjmOm+u0Ip-icLMWUo?gWEu7bKj8>J*1X1K}Ro2gaLA+Swr zg-OY@O?K35FoHhm#Y+|3(73}ADmqMaU2>-xD>QO*Ghr?xypL>vb6C2TkW`r?AC*e1 zV>wx3Tl+Q2aqk80*@&AGT!kzG7)jH79-Q@GK3-PJR=b*X;P$_NdCRI`CgzPc3B zMB7qwg=EJzCBQkYOK|hB zRR<^1qSqbEXJ{O8QKVDMSz<L+89I^Yy)`c66_BjY6 zDc6JEuRzESSo7~)9M%?BLyRjQO3j~T=}driIjCTjB5)jmTE(V}q_sLIrt&RJgyRCa zYnj^O<=?JNXy4x{xANm`=hCw+^&1zwe(d3)r>aB){&CwqA$U*Q?9 zKJNAACNgjVs-Z)hSr-+`uFaha>Phu5P?GuLy*3XKYPNVrUCIV|73BUNF1NtMPVDs+ z-cNmcu%3F1V;w8gx{NPv4Atc;8+Ur5>T|5q5R3*ZQ%BXH(yiqT=vCWxOLVRp?rT^r zf&$GeFWys}RcmVto8qyM=@;=cdR8>6Q>y*Q8#-<=yrg=C{{W0FtTflYWZxQ&Fnawf zA|D)U*VfA}pQEB9{n;gM4RLy`%d2V@S`C|K2#E7YuDasx-p0+4CLy#;hR+0w=#*lf zh{7^$YGvuZHt{6>F^f*Sl>(Upx}e}yPmMCQ=ZLIrU^|M#z#g?n!*YfDUadF!$()oY zsIGqVRg&+8!Qe zlL5j=PZgo0*gf>&tJ2V5|(L8NDM=Wh^rT-eCX8hoEh z&hYxQI>aFcGTeh+*NP6dV?*YeJJ}r^?p<0N6wVH|*(NUnu_o zOn!UUrCr8}rR9bRQJV9KvG%tk*1Y=v00`=AB+K%3q*z3jtqW zeXdxYhe61!Xwq|f1sSNjv&HpjOgByGn$z(9kk_%9Nclx~`q#oM##1CWk;{&N@M}H$EA1FykKb?N?IH)y=Jz|p;rQ<@bLctO%<`?_=1Eu#%m+P;}>F~JJTtv zNcUe0oLUb|S4nI4e;Vd|E^%r({u=3RzTx`UBHX!b8O_5~r=jPyL;nCR+NH?aev~c5 z&Qk3D{$uD(b9xHz*X1Lz>sz{m6_#`EYXigOhM{u)^{nkVz0slPzZ0+)rne^#cZ|rf7_3nCxn+~BHE1=DJr-(c+Eu4(;CRaTxMAuWAbnmQ8 zZ9eE05y*M1cD3BQ(~<35vnxi&u?Dwvom2tkN_iBe8){uDy%~Du{jB0c>04T7h&c)GT*2ZLV8mAvOfK|CVRcHoovsg=68%N<~$qyA3zcR6>N_eR4 zkIdCq_lZm0B}18ywK;HPAoRheMt^$LA?43(8l)zV74g(zwVQ_>xUN1m9&(fGU4M+6 zHluWZ+O9AX2qLG~gve#@iHZ878~ z2jyO0sK>tINdWuIO=*NpT$;@^i!sO?aZk=`GTvgZwAPBSb;z#Na*oK&C^$TEP3hj3 zr3@1-#d6ER=Ayf|itSD?8luiBg~iLmHdLGn!le(j9T`ep$R5gQCg2sDit&)yZ2Z*e3owS{a#!cmZMTLL9sc&ky3 zyqbvsPPFaWGz@zjwE+54I+Kb}YLgL5#2zGVPIm~zAtd`(Hzmdo2bzenKPvND`W}Hk zqi{Y$w>8e9Xyn;SD_e=;-eY4L@^C6xytQzI;2u7e=+^^G@a~q;$`Ryc#@h2siKCWg z+BU|=tqELBSeDdoyz-Q8Il!+#(sZ@9h)E#%{{WS8{u++X8?4H6FKqO#)ZNCT?+SJr zEPgc7O+vHA+?Ew0uwlWVW5L1AL3ygBgazbtp37Bl^(d^OIbpxBt}9W#o_U&SUnKq2 z^rFISzo~0d-4i6|1Nc^|!zbEQf&zn3T3VUge1|8{^cAF*@rA&^$9l?3n_x_?_6S#M zw?5Tb^xPA*^I9@t8*EBTdR2D3irAgFX-{+7wS^|t+7q*OD;s~ZC~3ZI{{RMRHn=je z>^ll`%4KrS*(RD$b`_kl5w|0W=+eQ;Elx5*Aq7VVHKn4+R`e6bML`9ll*=Jw*a23w=w*)eOCcYHdKB=A5pr)+%CC)eJ=m=d zkIA>YTdAd)W0DjF6ra6Vl4{XfFj-s%$2``Z(xUl_!{%lAO>uhOog__?+sWsOEf%iM zb=c|?RkfLZSyZ2`XWvS!*+LJ}uryl%b8^V+%0iP?&4lqwktr*lhM~ztTvlwqZdja> ze;T;VP6D6ARanN=864GXok{Iv$c(TZ>w*i~Rl5bb+-TPtk&j|(cPNTDQ1w$(y}mLs zz1_o)_M|n+LE{-MzU(AbORpB(+&ePH1$v54xIK;2=E!=SpHo!sqmXCiB#Oa(dg?+7 zuvYY@ORV3@Hka$@D>+G&qPmtQ4O1ZJxQFia(ko%qISP@?4S$%;!>Zds=7I(6#UBDjm) z9^wGgJVjKJYrD}%Hj-}p*{Yr=+BEEBbgxzv(@dF7qmj@8{kSVhv3r{BuP&iT6Uxi+ zf^%G_hHav{yD`a(o`=%An{N+BjtsIFQPFD(xLTDYq@`qOPPI5Md1^tS*dsvG%?RAh zkWZyn@h-G&)og6f@8si-)uFEIR{AxORbl3lg;8F4X{$yqrMS8b^1nv(uE%Ib$mZ5g z?Cx}3CQTyG?L=?7lw`MDR)2{#Qnn*bM=d#R5Us{xl zw?s*E1cvSz92_~tdbfu3Fd>b$^#IqNUfsugYYL=$B#h?0v%$03UFkN(XOGPY10ilf zq|>miV`om&mNf@$Z9@>wF-Vc^Pyphmj9^k3%HK^rwfmI>uh*qsvYD=w7E@MbhAA%G zIH#7kvrLRvEBKA~Mx1|e4{CU*ZR8TdtUJ`dLtRM0l(iW5LP@R)^3Z>4MA+zaUWs%! zLTitnFm*`t(4J~%vno4})NYViv}{M+;8&hG&CC63w((`0m{*A5an37-0Pi{VuQI#P zbv7L%a;huWyeOMAl=@eYo@7z(E7<%vyL71jm97ZQY-nDe+?wI_KfNKY(@x%!m$6p}6v(xoTmG|5ILQ`3rZKOy>3TawN62AiL~so$CfoxB=a1~!y~mvGn=cC8t{Xu ztEz!hXz5r_Q&^(Kpxq-9J6BPsqPCqI4&u4{2=dMJuBOrtF2)s6{5;d87R>80f;Hx= z-PuKT8A%ixvQE|@(^vE61>|7D(iRLaYj~HS`4WBPRmYCL;sZy9>(*?oi1ee@gP%B9_j4jH@Z@U7v?M zL>vevZ=0nj9;kHceU>)n$>D6^(P4VfKU3Dax$NV)hk9UxT+P;=(X*B8Xh!EvVW|cK zn%0J3;j7PWuAbTOYopV(5WtPu%_pF&bj!)96+;76t>h8`j-v>y(+!A z&Ba)k7^-&1{Wh?F5v+a|U6^rETXJ8Do@{J5s4YeVnx?(tSHepV-g8U`5lnpnr$vyi zX^OeDoBh*Q9nhKK-Yb)J?a%w>x%(J|*OA6Y-XgaAN^^NWKfZsRXK0DLR)8Px3f`bZ z-th;8-qyixqTp@Gt`d01JXg5*xt1RXxyL?V2E0rV{ARSn%3Qq071B>b65<_>NU1HS z=n1R05C#Uaq>RG(72cioM=`08Pqj(MdZ%qLaf-Llb*3Qotec`5W17|DX{>vmW;EDD z*wEEOv90h|rZ}uE4S#k{YiFNY&BZ;Iif1s z4{B=g_dcqP|x%dt?W%P=HgmD?bU*L4aJmaUjh zcF^9tog>Uv{GRXYSyDu~CAyjs$oCaGsF8W(R~|AIsY{yv>FeNL9;`W1_q@miW3@Ob z1GP#a*cgs!_O_B;F)BV$*0QA;;vJ&&^ERsCg^HA;uaR5^knIB|v}`SqJ{XMmZ%Wd% z(M`Y$81ljXBi^?o(CwhN3djk^E$dzMsX~gkQ^~K0m3MxHD@kl^(4tDDlh?gXB*4f3 z+DEP`tLb)vedxFYx2-l~i4`DHPI*0rXyTeMO_p!rd&h|_({zDyK(1nUD=Q?uLBR&Q z4Kh1}szxAvl5A|AxgEuDek`~@Z;-?Cm0}4U&2uJ}hMcY4u7#+bB7NupBy|-po91L= z@vJQ>JIlaIxZ<{AJ0)Q>!$p0IQnTzo$w@$${gs zt-YO@T-?a!X3{MbWMrCkwS;B3P6u;VQsFM25sZ&ozZ`0d+PN_`lzr3-L8}_Zm;hC2 z?ou#GIHz7+EGT&yu3qxyS=;0Uisqw5&D?QIc4|qi!ya+TskA+6)=hfUUZZ`Nf6ugM zkEL_)>Gu~0lsNUReK$-tH%W6T4Y##=k&242r!90l6nGl)@9dz63lf9cxIJ3-?pujt zc^IO$05#fa2hK9KFiGiL{=XU{%BddEdXq)veFIBsQ}D98>d|9Adz$opV^m!-%(inQ z3@G=nKJcZ&TVEC{liIa4Kek@onPpOAUV(cG*PX^XZbV|GKYK)T*NJ(l>KT!XGk5F- zSG>~Yv;~VP1Kzq>FKyzF0YZ>Fj8-a!)UJ!a5HIUfuIwGJ?v2tk@Ikwre(gB})}5(c z8_BT(;co45}$2wDhem-$b?- zHy}0J50y{w)(?n$NgmlP;!$&Q;{|$!rK{UwXC%GYo|)i_x$m@}wA|gKjVa7=?ioSY zS6B|w&3GTf-wkUQ`iQt$rnk37%au6%E7m+u;;U~7>9NTuGRknOg}FZUJG&z?)y&bh zq9O<8H66{Yj!b-!>s;oG;(J|s^)D7P3FuUs?Pa-%VBTA`a>;wf>te-{?6p+SN}P2f zs#wmK5ak(L*9NSP4RkGxSd()Z?_8zofp`x?o-3-81rM!rcW5QM0Gu4u&tb=Mwyra$ zGZUUG&a;^h*1bDfv?-&zaz-o600G+`wdPmRA=M>_192Gt0BBdTXlhqXkLg}HZO!CE z{h?mXqzq~C40aX1320`v6H{U#HOou$TFl<{(`wE8qn}FU^Sa7$$6DVL@S9QG;5=+G zX&rL95BzYWo*Heoqv>5` zxB9VM-Aa27nEvn&N>levJt{UJ+!5_hBmjPtuc)kXdY=8C$*a0On5`Mk_^THYS+rc(EgrS%24kRpIGdeTT;4JM3Dv=;SUu zE|>eZuQ<(c`i7fvq}`GO3?2=8MwGdhLON}#8s>);^lgM0$E9l<*vh0-osL(+{vugb zVVLrx9M?Kn%%!~8TYD-GiaU9D04vMel(BCU#$yT zT!4^eO;Ug#wpG_ZEmgM}yZkFDd`QwS-DR0c1Em&;nB3E*A1yxAY=rSzC3z6vx+0)d zdWDY7K6dssWBysSRKI^ON4RfAHE~*^Zg@7n+wP=3u21Vx_-;M=%s*O9VYkeFxvO3g zjLEG=eJbj*;CDX|B=Wo`x48gUi-V4p>%SA9%h2IZQnlmflU;aN{_j(l5cMYmdgRqB zt9*h7HDw)NBax5zwINTo5!gIx$lt8p3Pv8O-2 zYSd{#gyWtoA-Qw)q3j6gbalnPan`j)aar10?X_MjKp%RONRk8TPaO05RBP|WIDKiM zkK@vq@CM{mg!n+NY@Gos*`02q>A(rPLafmkZ4juab`}Xrls5lL;y$ya>eGh zkfA4v?47nT=CO5KC6F0YgWkGn)NwiI3+hE@f4UR7a@~bqgHlp(P>glrxx{CQxH$E# z8(l%8jnP$Ge+MGF9ceh(>WpByWSVwn_uAr+VO)N7)97%+c8LsFRUhjKJeuS*lVv~d zFCz%e_goxSt;UBfni;Jwop{JOtf(qJRcxs~U`v>sK`1i(yB*C|q2=o<+8egIsQ^v0l#X>9v^T*I6X7eXb(O=0YSHRqiVz#zG5eKGOtVQor3!;<*$}T$<3z z(orl~%5qOixbK(C9;UN&+5GXij8ykCDs?!nI?tY`D2|raJwAJUOc8+f9Gau4=sH}u z5U37$B~5dyaq|+gezj^ViHX3I^{+~sj8>@5S7T-Hm?tq$im3h=xP`+P1XlID@(!(5 zW|z#2FQs9M#8Zm0T8=T2)w4Rv&|4-r%|7CAfc7-$rdZ?2HHkga%OT8w0bX4yZmh1$ zw^m6e+lTqN6)bk~M!5(-8l-P+;X{L#?Np`I=6(?3y*SfRRtud7bza~KyQf2IdwT`D z&Vi(Gqn_rtz4OcbOy0t;>AH2%x{6m;Si#9-R;-C_ox53`FITv<+z!s-xbG3_4EJwt z6ac;JqqJbxk}+c5`evJ7vyXap_Up+X(PT&1`AfeD~7`;f$R7a4DNYH}n<@V{tH! z6eW)U3hb>d?L0GU_KTveaz=Ll0CuTQbz|WhTyZv_!;kiB2G35_d{1`QH%`k79P`ug zq}|rL1xlZ0C9O|gz1OY{zMQNSoHUiQpm=H<1@oo?OM}T~tvekm(@cOWs*X86w3>zS zwT%p59mfOOrcyCUvqSz8Bck2f!w5x+Nk4iqfCqD27msxty?at?{1I#SVqEkdw3qWe z{q`C29DKVD-qoFRdfKL`1&z5rR^Yf5RQrUx9k+zEiS6{LC17(P-Cc2#K>x z6mUfh9AY#AlUklQAtgs9xMeHK=;?~nQ;xpVwOcEZs90*xZmi#PB#+9r?7UmA*~UKA z3>VRktcPn-T}S8XC^-+DjP$D3mZmX=WAx1_)U2PouqZ*Rv!S&3gQ4A%4a2>p{R&Dr z&(@>7yM}A1bj`@&uC9473RP4)sMNZr&W0bCAxw*u2o4aa(mY78QEm-6GLM;CPdcBWNb&F1o zoq!mx7lJb_$}ZwL>J54|ysj)GMsmSNdg#HsM1-^##CqbYGC}G0s|!V$?sV&ykmT;D zHK{VK+K&si{W9cdqgJ?wc$-q(!11vE06{}sW{iK*$JV=#8z=lrkk<>NoL!2_9|5es zBig(=f6V8tECOmAeC2sMxyvYoWabR#Beh*D-F}uXg*^vOyMfmfWE=UggY=AVZH+OZI_p zZuvapip*P<3|R6_Tp}jTIb;zg#XR(@RwHVH!;)(<(HiDqlf`Xp+Q4=c>N_hSk8?#( zArD<;qls-)`&SziNWiiCwbN*_Zn9D7Q9-2a6|Ul$Jn?dP;MQ&2AG%|Vanx4ZVAUJ2 z76@ilQIYlGa>|fnJR@y1sZHm2>)@ni!ld z7O`qqDOq2U02w_iZqn!&qFm>i=BBfIb;uYL`)k6D7(TSU3To$OtQk~~T5|sYTF$h( z4ipnw5s+7dS|(!Ehd14-_QMxOte#ZyP(hEjFdmee)dJa;oCZ0fE+RDN;c2n|0I4;n zQaTHt+?veSU(4|I!xPm{HKusC&0=_|_IPSvaBAW40pZ%FOx3U8sPn9Xdsa50*_OI5 z04RN5BvDtXq)ji1l7FIGr~57hW;}uSv1i^=qpDJgEG&TmnTk&1)K78>27EzJ}zVvxbkb^sAYQ>IRJ2 z{M{Lf^sPHv4MKSc3>4!$^sQJlJI#e9k}Nk}qXvn4M;$jJT$j-E%|}VKM+OCC804Q? zj>brBoQsrlgZPm1UDelwCvTbwvVXeWD7(sD+0N>7+_5T=w>>zlVQ+BF$~J3i?^T{jfC>iQ2Nbr_ z7i_T==+lQHuuaFInHHBkhbMtrHu_XCoXATWwDQLim~A(Ak#cIHT2)wI@4sHLLSx93&>!LWx4>Pfq}(R z)b$zQE9C&d^~m4~g34*N88hUBiF%rqDBo5?gspU4NaUT2^SRhL#b$Vcc8rtO$(Xu@*|4=X$bWqQ0P8dB zR(uC#_MLOjBO(>u_}4RaaV5>e%OT4#&3Z3^tlHB?lJS%MaUdUISmPz^=(}|_qPglM zb{2Oe$+Wo*S{D}Ha8mq_b6lJngjW{_VJcAbT{WhpEq~c zRfVXY?cYCi)~edvO%Cmw6CF=_uWJw4rgEg5^`#g|`^>3IE8Rw&@QJjtGBO2mKl0JB z>s>YKNcN@EBzLZ3kmogpW0tvU$o~MPryc9OgrBo6eJh01hU?X?^Z+df(z>vV-7=2H zFRshAABva3hs@G15BpU|#4bFytKI?mv>UQH`KxS4!fi`(pN-=m*>Rt0^PMk?zB?NA z4;n|ECNt_Q%yi+4-aTs=d<@o4Q`o#P+pR~^yDLWh)o}h5BtW40S8HZ|OlG;B<-LVY zCvUAz{{V3PDiDm<4T_#fpUQ4KQ4vbVBXbaw&t^O*CpE}e5N{pH;2P_7Ndy*BsQb^H z*9#1}k&ql5^IZvCosq3Q&zUK~`D!#Q&$M+lUQd%4IjvnT+_3XlRkosuOPQLwdZsFYGjvlHSiy@;*N0ne1mdm82~XWq)Ja0PGZ zGJgHiifP6~&8GvQCaYgy+P~7Q9<@sSh_;gi^sTBr8O;UnA`LVBL!Vl?`|0Q9M*Od}rD!P2hX87cKLwS5*XLe-Z8b~xg=yAQQ! z8iPjryqx}3>16R)dY+pV>>o0X#-*;sMc;C3E9AR{Sx!zVCs5L;BZFMUp`S{+DB0PX z=+bn!F*30Csc*Sybt2R(!GPg;#d9|{Z4{t^UA4g79xFcX#5(XhQ?TPB3eMo8C^gbp zOXfxoTIZ*1xvw3tT@6>)6>#`~@jXHR0Dfz+ z_-LWE268%A9eM$otGoDUh$WGqikgOz*va^4sGKjV8f8sFFcUbev^a5FSE=U3 z#bhL8$QQj4e8_7IgllmWkK5H8?*lK)q^QU{HoA zJxw@MIRczIW|$5Jo(>H#bJCnCh>NR{?^hy>1<0yt#GH=xriy&5*Oyi3dKC9Eu8;3X zs=!qD88V+rgz?Q(UX~MD+^2Ng=17NgU5=d(lWvKQFm$ji{Dy~YY zp4A1cQa~6EqO$cZJR5hy@+!}V?|l0dB=)PO}T8U7w>MNs@7Z8>HFe@}hKq$hy zXw_|Ma#g02Ij<>{`-RVq16}QG0x}x4tUZmMzVA z{{TT*xl?Y}G<2#Zc8-T!S=&(EJOU;^!<^H#NRQZ2QPjnOfu2QkRvNX<>}@5~jU)8S z8nzxo0b)+Tam{C4+BQZ=b&6WtUoE}MZ9~OYz0lfCL8H@|%6gH-R`YhuBwTJ4sb#L+ zTjgWhhB-V`#x6AU+-tE%`x^e$voOf@tMQ zjuvaFcayM+i|v#4V~X^du6!!+{I*AN9Sw8WR=Rw$7J}bk>?=#Y!m>HEH#1}8W)-EU z=`VQy0K9P+9d{bijCo6hPzTbH=UBlkKr~!dEDa+{wFk|V%Gl^DHH;R_%^XXd@J&ZP zp%BOon#{PncVH5m)GcE{ZrN{ylJk*N^;TJ?^8mo9gf8YX%0VKNP_<=6G=-^{zcY+< ztt)GC$8}b-gLK<^*L9)zc}feL(j$a&0qSYpBWOh>c0;6S%3(K`hs(A>l23Xy9}>0v zV@}dyDx~cg@9$3W4z2yFQ%KWdB|*o@(zpC4;oEBs+seJj8Iixc?NcS(nN)4)FNJ(A zwjj?q4RA(F9@WuYkdZQ|!KpThz?mtdgpa3<-3@el%zwVdR0eemO{*ONu^cq#a!Byt~f4O z*dmFfl@tzGfr|HyKTPsGF>P##mQ)N!y?GagY<}IYz<_6I+-uw+lq_m6$}x_W<>RKL z)DFBnZSNzHT@_MCl|fQYNUcpa(be*q_p9>!*MSe+HNOlN_Lkv?E=6!g`yEp5a`&2T z&F#S3m0WU9YSggNqP2_{`PY>{VP-9 z%Wlwb5Bo;B-xJQI90mruFNT9Y9=pe_Yl!#_X>MBah|ZG`{{UvZrq3&XfyXuLo-L0$ zTt^)iypjQpM2~vHoA+6?w>@{m0C@^?+Pf=7#Ch#pPlp?Ay8Q)rHoV${-xY&emC&_n z1`8hbW>--QA8M%q;11QDt6fZil{1c&YF0*S9MU;GRGXP53-?zzt{G(VrEgMsuRx9w z_FIROfD0$E{jU^)%Lqb9%8|cf`Zqp(<9Uf4Du(4!K^Ht5+d1oQLJ)(8rPVr%JfT)|$g7 z@T^|usHb;j9nzeRYbH45v%OG$=&pwq3&66>cMhHES#f>9%Cbhd>rxUA2hyuc0gac_ zH7fG$?TQm%(&#~TY#cTK=~%*JXLv_IYoa`s9`%E%Kw9Lu6=03)OMx^%`&5bl03SK7 ze#+sY7(FXu(s3lio@%eLE;hM(PKKB`f}bJE8fJ3^TinfTM&Ig}J!_Qsg2ZWXk5VhC zkdYFKN8cb z=iWD$%<(PHpyIi_@mqc=ef}Z4K8;w173))8>OA_d-eMEY10eLI@69d<8LKk@dFe_C z?@9Pj2emL6EZaEGT4WH1xmOs+darzW6*iY688({AO3vuG>R!6G$lRixWjR*bOlVVuCFGGl!s@Ucr?slns#^|v;h3^#V+mzH$3&F z=}ZZh4fA_uv}D9~$BxxjAbipXtysIrwjYnL@E zV?L7Gzq?*datt?aq;d^=L@Lu+GLhQ6qr{em-%@@!CbG+??>I8Ck@r-NkHXrnE&Q^1 z71k~3kN`W^m*{hOH#?LK&nXR4f5G-Y^t8%=6d%Os$T)U(66JjJVz2m_}y_~HgK4?|n~TWV*?eGX>& z541qQ^%c#qXrwFYU4`sT48&uD(z)$U-)nh*b+1m0?vFaO8e~?t(n8}I!1S(}wOidn z(M&eXQZa%>aiPfOwsfsx?$JEB9Ri-rD@u@?ji8feaH-1ga_h@K-ngooZT;QDFuIZ39XD00f#x9$xl_hzO-Zz+xtg~_3eMtNyT2$L zX1W_ISy1Lc4h}LZg`SlfPv)t?t(I>tJ`XjWdavM!?5sBG;bBZ3D<$t^XFoWrS&rsX zml3-!s#bdFGEaSo(Zpo&^sA#4NpnaPIkZKkxr}2jD@r^2MX;1Ki;^%ZwyWV`ZwN4l zEskp*-@_NzD9%Ym9;U176y+Xgp{t=Ny)_Z9AdSf_kx{;|y9kVPQO%%SM#W2HdghrP zi0ALH0=JCgC830%;>0?^_X^}{t}wwWER(MOOvsp>n^=hSW|KfRsX>S`sqiBHUPQm$7rNY_G> zT|!92V*;b`Fi4_LDC8Q|cx@X-v$%p~X#GP&fL7k^}p^{Gz&V8S4QQ zY4*fm51R(Ke*G&?X)2GIiZsXz0~gd0R-u&rd(E$$;N9D@U> z&r0*B9%=J4psI?( z2xASro}#sMeJ>D`FMnF8rRioz6M02(&>HEUNZ_&{j4-Zxl{uwkYZ&sPmG6d9OGc3! z9A>=M@(&{JNb{Yhy;JRPCZ6Yi81=6()SGspDbG_`VmWQ0%~d;UP-%RJ4h{&YZ+uO3 z@v?cRXc)k#wH?9|LB(=cGd5bfFmb#^8CoQ_+Pu$6To;DUVo~i~)}C_~4P^HpLglM`qaCT2_GUyfCnFq+BReD_rkIfn z6+OCBR%*6mt}>+DdYoQJ85$)x312_{MFS6 z`=)MIXQNHwKyf;UodHj1rnACv>*hNs;~ zQZh$Y>01!awiewApK7gt{-l4rDRkE|Sw?-SFTd5N`_*%IiG)?8OK3lF_|=6SY8y;_ zoPBC_T5Yfq{{nhH6Oh- zJ}@dY19`04DKV3enMFi6kHK1H>IU6_Y)wS%U#q)rT2e((^+nUU5sG+|>-a4)tm|cSDZ! zT$YJsUC}44aUT)n#1KcG)!X$&HRsO==9G7&=ML(+qq zVzIMn5Hg*^y+2VvkepPusr%ED-kqwZEy?s1;?;if>eE^r`V1O|;0KXZ_cdWTs?xSD zqaO4}aC;bBFr=$;X zt21o}y-%w_i9Er^Yb&AaUbJ1+&n`;L^&2k**y=WGC6=hGCOR`z7d{Ht?7?V?TqpZH z*AHWJEMsy@BzW$vTb8~e)$Q;t^%o#^W13E+$JVwj@~8k&f!?1b!o~?K1t76CqNFJdexG`!@lCv9!AczG8O2LuZT6iJ z?@)ZJCfw((P}N3>Q(8UHofgimEQ$0nf~bllfPl_*UlH z9cCw)l~=hn>=yTS7XW#3#NUXhl?6R+QmWGB=u@+v&MQAE8P-WUoOi1RV33z{z@?oa z-;jy`>c9%jxs*(&_+d}hs}Dg%w)P^d+g4kVzU$e%#yE+33ahVcOQl&Aj{;U0RrINr zXA$|KPQk(__m8b%&7+&k!*hKv1m|vRO0|^buFIgQQE^^pEe)0Ct8!UUn6c%LYTvc+ z{k5P5bLPrB4uZ7>>RLo$hBN?hF;T;BadyRz%AM;uRdUfA#*$jH0%A@P2OWUmReOui zEOqCw6=zVI3sf;iyQDsqkt9s1=E}IwKuu)XsiS49$Q&01(0kRB;z+#rD6%2OK2umR zUB|a$uN4fEpkh>1i0L5lB-vQYck5oW;O$keqYEGfan`&6Z#KR_uUqgotrJ-duDh$6 zzq{`m!qd?7YrA-^B^Xe1Shsptl{f(hKGm;fa*j6^8T!=s(xa-k8LnoOlWTI5aeSp~ zXkvm45I177^`qrl?;MQQij`z$CyK|syN*O_clF|&V{KUVxt!t6lM%opn&EE-F5bIq zx!Nm39xyT9xSPh^aKu)1UE*ViS{Ztg{{TmCrEvFB{LS^Q+g0M#iS(~Oxs!CQ>}#_C zz0;Y$bcvfSUfb|@{y?{%TJat+Ufb|+{{Y0I?0eSOzks?w5!!f(Go?g*tH$*t*{TDc z_3d6D8Pg&aViq1nugn*UY zI3k$y=H2<{6yVvaH<^i8jNpo0ZV6o+zOnOZmmlt$@<^a~U(7ujtJXDfzfHIq##Gmj ze)21#jO2{*UDUN!Ip?A39uV6!1Uq0SHPbAHS%K_2R}0}u&&-+XE4Q*Eoc69tx;Aw! zVRJ@IJO|pKA3S6lkU0Cfp%Vmw)84X*QC9>+uFnWh;YRI6(`AM_0ZAL}cVAkL=0I`n zR<{#6oelTdDDG5Cnz@iQFsTGpRXJpTY6ycqSbQPY2O;TaqKit_~dq+hLibFhcO zav%0TrDwd6quB8)w%v0pdaY zettty_53N>`F{!pb1LNKQ(Brx#AN%{RQ~|$nAXmiF$GK9(HbEBbntWQQG?!|yq{_d zB?r=-joo_EDC6FoJ*fd09$Rsmu#J;U11Fkr9mf<5kQ{XBPXttZxc8?m0B>3Ojd0u^ zy{cVUKa-88@}i3IYHoVa*uq%Y4waj7W|+{>yF2bYAS8-WQ_JTui=Zb zw;?@fqP@zin-6w*bo8yE=@5qU!)$1!(r=0@nt$gXZ!!Z8Ah zE7_pgW2e_?wp2{5#?8y;p zynz|)2XpnJis7dfIqEy=azEN}yAVzdS&H)*DIo-V(M5OI&ia}#Yj@BA<=inIhnll5 ziLUM;DKJ(aOi@KrinYmdWEUFmpKay&05`2c6iIY)VcbWcqKdwGTGtYay~a$U*~vsG zeKS-pZscRjQAK3-G>+zUlBhW?pK4&gROm8jqLLFFbtxEONEIcuo#v$2iCO5PsUjxq zbvC+W+GdPWW@UGL?9UYjt8I-nnD-P>L08b{v`a|tbvWa7+zIF_(yY8S40EK(9E-P} zv{6?Tdl|O*jVqZLt7H|0e)AsnN*Jcq8+t~<(msRx#)>K89iJ-M6-g^|J=xIMT3cVh z)^CKmQI#Imlc@N5;7C!?mmkIJMHR~^q;$qij>|!Y+!=1SIUN_JQPgf^c|Ol;83ggb z=|vPJp=DpN#irY}#n>$&>6+#*Zq3YuE?8!YDRdRevLmP&ObS61kM~6sQDHsBdpC&# z$Os0lXEJ7fP~7WpL!t2I{i}pE-o&zPL$Ro$qC<->qR2H)tE=Jv}I*goN3~YU<*~bFhz;*Olrv&lry5X~P_66j5EYmZmixhW`MCMHPgV(66bVDoB%`k-sXh z<;^sziiV0Q($*+)dYuP{mRM(!Hde<6IH|l*xLQYqC!WHJE27#M{jk!^gHKP9vyV#C zg`a0Cb43-DR->CI4CRl?e=3YKmjh|*=|vRf(1cjaWDFWcE&bC)6}7Y=g}3AGpUR;g zX7lozD6FK7BE^YZyAr0Q+W!FEG*MR=s}kO#m27>}`Bf>mvar~3^rDI;v?>o$TSRdH z%8-7POs|d=sG_Tta-m<|6szn9Y3b=q!}%xVKa~_x7t5a90O Date: Sun, 29 Sep 2024 13:15:59 -0600 Subject: [PATCH 12/17] fix test comment --- testo.d/exif.test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testo.d/exif.test b/testo.d/exif.test index 56f6ddb06..6cd71360e 100644 --- a/testo.d/exif.test +++ b/testo.d/exif.test @@ -37,7 +37,7 @@ bincompare ${REFERENCE}/ricoh-rdc5300.jpg.jpg ${TMPDIR}/ricoh-rdc5300.jpg.jpg # [File] - File Inode Change Date/Time : 2024:09:27 07:18:42-06:00 # [EXIF] 36867 Date/Time Original : 2000:05:31 21:50:40 # [EXIF] 36868 Create Date : 2000:05:31 21:50:40 -# $ exiftool -D -G -time:all -composite:GPSPosition -c "%+.6f" reference//ricoh-rdc5300.jpg.jpg +# $ exiftool -D -G -time:all -composite:GPSPosition -c "%+.6f" reference/ricoh-rdc5300.jpg.jpg # [File] - File Modification Date/Time : 2024:09:29 07:04:04-06:00 # [File] - File Access Date/Time : 2024:09:29 07:04:06-06:00 # [File] - File Inode Change Date/Time : 2024:09:29 07:04:04-06:00 From 37ff652eada2da2076c671996e7e2cd9e55f8a30 Mon Sep 17 00:00:00 2001 From: tsteven4 <13596209+tsteven4@users.noreply.github.com> Date: Sun, 29 Sep 2024 13:49:10 -0600 Subject: [PATCH 13/17] revert changes to exif writer regarding gps tags. I beleive the original intent of the writer is to create the gps tags from a waypoint. --- exif.cc | 42 +----------------------------------------- exif.h | 2 -- 2 files changed, 1 insertion(+), 43 deletions(-) diff --git a/exif.cc b/exif.cc index 3710f03a5..624f5b4ed 100644 --- a/exif.cc +++ b/exif.cc @@ -666,20 +666,6 @@ ExifFormat::exif_find_ifd(ExifApp* app, const uint16_t ifd_nr) return nullptr; } -ExifFormat::ExifTag* -ExifFormat::exif_find_tag(ExifIfd* ifd, const uint16_t tag_id) -{ - if (ifd != nullptr) { - for (auto& tag_instance : ifd->tags) { - ExifTag* tag = &tag_instance; - if (tag->id == tag_id) { - return tag; - } - } - } - return nullptr; -} - ExifFormat::ExifTag* ExifFormat::exif_find_tag(ExifApp* app, const uint16_t ifd_nr, const uint16_t tag_id) { @@ -695,29 +681,6 @@ ExifFormat::exif_find_tag(ExifApp* app, const uint16_t ifd_nr, const uint16_t ta return nullptr; } -QDateTime -ExifFormat::exif_get_gps_time(ExifApp* app) const -{ - QDateTime res; - - ExifIfd* gpsifd = exif_find_ifd(app, GPS_IFD); - if (gpsifd != nullptr) { - ExifTag* gpsdstag = exif_find_tag(gpsifd, GPS_IFD_TAG_DATESTAMP); - if (gpsdstag != nullptr) { - ExifTag* gpststag = exif_find_tag(gpsifd, GPS_IFD_TAG_TIMESTAMP); - if (gpststag != nullptr) { - QDate datestamp = exif_read_datestamp(gpsdstag); - QTime timestamp = exif_read_timestamp(gpststag); - QDateTime gpstime = QDateTime(datestamp, timestamp, QtUTC); - if (gpstime.isValid()) { - res = gpstime; - } - } - } - } - return res.toUTC(); -} - QDateTime ExifFormat::exif_get_exif_time(ExifApp* app) const { @@ -1520,10 +1483,7 @@ ExifFormat::wr_init(const QString& fname) exif_examine_app(exif_app_); gbfclose(fin_); - exif_time_ref = exif_get_gps_time(exif_app_); - if (!exif_time_ref.isValid()) { - exif_time_ref = exif_get_exif_time(exif_app_); - } + exif_time_ref = exif_get_exif_time(exif_app_); if (!exif_time_ref.isValid()) { fatal(MYNAME ": No valid timestamp found in picture!\n"); } diff --git a/exif.h b/exif.h index a6cd691d7..2be58deda 100644 --- a/exif.h +++ b/exif.h @@ -171,9 +171,7 @@ class ExifFormat : public Format static void exif_read_app(ExifApp* app); static void exif_examine_app(ExifApp* app); static ExifIfd* exif_find_ifd(ExifApp* app, uint16_t ifd_nr); - static ExifTag* exif_find_tag(ExifIfd* ifd, uint16_t tag_id); static ExifTag* exif_find_tag(ExifApp* app, uint16_t ifd_nr, uint16_t tag_id); - QDateTime exif_get_gps_time(ExifApp* app) const; QDateTime exif_get_exif_time(ExifApp* app) const; Waypoint* exif_waypt_from_exif_app(ExifApp* app) const; static Rational exif_dec2frac(double val, double tolerance); From 0968ad348af0564b025da0bdc2aa644734af019c Mon Sep 17 00:00:00 2001 From: tsteven4 <13596209+tsteven4@users.noreply.github.com> Date: Tue, 8 Oct 2024 00:31:36 -0700 Subject: [PATCH 14/17] update qt modules --- tools/ci_install_qt.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/ci_install_qt.sh b/tools/ci_install_qt.sh index 215aeb01b..246787f56 100755 --- a/tools/ci_install_qt.sh +++ b/tools/ci_install_qt.sh @@ -19,6 +19,9 @@ remove=( \ debug_info \ qtcharts \ qtdatavis3d \ +qtgraphs \ +qtgrpc \ +qthttpserver \ qtlottie \ qtnetworkauth \ qtquick3d \ From c2980f485babc2edbf1276c94d8f87c214e2d7a7 Mon Sep 17 00:00:00 2001 From: tsteven4 <13596209+tsteven4@users.noreply.github.com> Date: Tue, 8 Oct 2024 00:45:24 -0700 Subject: [PATCH 15/17] qt 6.8 work 1. allow builds to succeed without webengine by default. This is needed by CI until aqt catches up. 2. macos minos change for 6.8 3. add macos 6.8.0 to CI, remove macos-12 build. --- .github/workflows/macos.yml | 10 +++++----- gui/CMakeLists.txt | 8 +++++--- tools/ci_script_osx.sh | 5 ++++- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 7a143ac06..998c82702 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -18,11 +18,6 @@ jobs: fail-fast: false matrix: include: - - QT_VERSION: '6.2.4' - XCODE_VERSION: '13.4.1' - GENERATOR: 'Ninja' - RELEASE: false - os: macos-12 - QT_VERSION: '6.2.4' XCODE_VERSION: '14.3.1' GENERATOR: 'Ninja' @@ -38,6 +33,11 @@ jobs: GENERATOR: 'Ninja' RELEASE: true os: macos-14 + - QT_VERSION: '6.8.0' + XCODE_VERSION: '16.0' + GENERATOR: 'Ninja' + RELEASE: false + os: macos-15 steps: - name: Checkout repository diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt index 04e095498..dc4e0939c 100644 --- a/gui/CMakeLists.txt +++ b/gui/CMakeLists.txt @@ -22,7 +22,7 @@ if(NOT UNIX OR APPLE) endif() # Find the QtCore library -find_package(Qt6 REQUIRED COMPONENTS Core Gui Network SerialPort Widgets Xml) +find_package(Qt6 REQUIRED COMPONENTS Core Gui Network SerialPort Widgets Xml OPTIONAL_COMPONENTS WebEngineWidgets WebChannel) list(APPEND QT_LIBRARIES Qt6::Core Qt6::Gui Qt6::Network Qt6::SerialPort Qt6::Widgets Qt6::Xml) if(${Qt6Core_VERSION} VERSION_LESS 6.2) message(FATAL_ERROR "Qt version ${Qt6Core_VERSION} found, but version 6.2 or newer is required.") @@ -30,11 +30,13 @@ else() message(STATUS "Using Qt6 version ${Qt6Core_VERSION}") endif() -option(GPSBABEL_MAPPREVIEW "enable map preview." ON) +cmake_dependent_option(GPSBABEL_MAPPREVIEW "enable map preview." ON "Qt6WebEngineWidgets_FOUND;Qt6WebChannel_FOUND" OFF) if (GPSBABEL_MAPPREVIEW) - find_package(Qt6 REQUIRED COMPONENTS WebEngineWidgets WebChannel) list(APPEND QT_LIBRARIES Qt6::WebEngineWidgets Qt6::WebChannel) else() + if (NOT Qt6WebEngineWidgets_FOUND OR NOT Qt6WebChannel_FOUND) + message(WARNING "Optional components Qt6 WebEngineWidgets and/or Qt6 WebChannel not found, MAPPREVIEW is not available.") + endif() target_compile_definitions(gpsbabelfe PRIVATE DISABLE_MAPPREVIEW) endif() diff --git a/tools/ci_script_osx.sh b/tools/ci_script_osx.sh index 7222bc86d..a59d49890 100755 --- a/tools/ci_script_osx.sh +++ b/tools/ci_script_osx.sh @@ -17,7 +17,10 @@ if [ $# -ge 3 ]; then GENERATOR[1]=$3 fi fi -if version_ge "${QTVER}" 6.5.0; then +if version_ge "${QTVER}" 6.8.0; then + DEPLOY_TARGET="12.0" + ARCHS="x86_64;arm64" +elif version_ge "${QTVER}" 6.5.0; then DEPLOY_TARGET="11.0" ARCHS="x86_64;arm64" elif version_ge "${QTVER}" 6.0.0; then From 532487f132609e96b1e673183a74b0bc60f1f357 Mon Sep 17 00:00:00 2001 From: tsteven4 <13596209+tsteven4@users.noreply.github.com> Date: Tue, 8 Oct 2024 01:51:51 -0600 Subject: [PATCH 16/17] avoid Wunused-const-variable --- gdb.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gdb.cc b/gdb.cc index 837f18e1c..3b024e063 100644 --- a/gdb.cc +++ b/gdb.cc @@ -62,7 +62,7 @@ constexpr unsigned int GDB_DBG_TRK = 4; constexpr unsigned int GDB_DBG_WPTe = 8; constexpr unsigned int GDB_DBG_RTEe = 16; -constexpr unsigned int GDB_DBG_TRKe = 32; +//constexpr unsigned int GDB_DBG_TRKe = 32; //constexpr unsigned int GDB_DEBUG = (GDB_DBG_WPTe) /* | GDB_DBG_RTE) */; //constexpr unsigned int GDB_DEBUG = 0xff; From cfad8ce7f0c56ee063058d8dfed3acb93378eb90 Mon Sep 17 00:00:00 2001 From: tsteven4 <13596209+tsteven4@users.noreply.github.com> Date: Tue, 8 Oct 2024 01:59:07 -0600 Subject: [PATCH 17/17] add 6.8.0 to ci for windows --- .github/workflows/windows.yml | 8 ++++++++ tools/ci_install_windows.sh | 2 ++ 2 files changed, 10 insertions(+) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index b37a74a0d..6b9d5d932 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -44,6 +44,14 @@ jobs: RELEASE: true GENERATOR: 'Ninja' os: windows-latest + - QT_VERSION: '6.8.0' + ARCH: 'amd64' + HOST_ARCH: 'amd64' + COMPILER: 'msvc2022_64' + METHOD: 'aqt' + RELEASE: false + GENERATOR: 'Ninja' + os: windows-latest steps: - name: Checkout repository diff --git a/tools/ci_install_windows.sh b/tools/ci_install_windows.sh index 1f2cad96c..7753a2b38 100755 --- a/tools/ci_install_windows.sh +++ b/tools/ci_install_windows.sh @@ -30,6 +30,8 @@ elif [ "${COMPILER}" = "msvc2019_64" ]; then PACKAGE_SUFFIX=win64_msvc2019_64 elif [ "${COMPILER}" = "msvc2019" ]; then PACKAGE_SUFFIX=win32_msvc2019 +elif [ "${COMPILER}" = "msvc2022_64" ]; then + PACKAGE_SUFFIX=win64_msvc2022_64 else echo "ERROR: unrecognized Qt compiler ${COMPILER}." >&2 exit 1