From 36051eadfb5a247fdfa20f8b5f17eba636919a12 Mon Sep 17 00:00:00 2001 From: kledmundson <6842706+kledmundson@users.noreply.github.com> Date: Wed, 29 Nov 2023 19:01:11 -0700 Subject: [PATCH] The cnetedit application has been refactored to be callable; Makefile tests have been removed and replaced by gtests (#5348) * The cnetedit application has been refactored to be callable; Makefile tests have been migrated to gtest format. Addresses #5346. * Removed extraneous variables from FunctionalTestsCnetedit.cpp. Addresses #5346. * Updated gtests; replace cubes with labels. Addresses #5346. * Per review cleaned up sloppy spacing; made global variables static in cnetedit.cpp to avoid issues when linking libisis. Addresses #5346. --- CHANGELOG.md | 3 +- isis/src/control/apps/cnetedit/cnetedit.cpp | 1127 ++++++ isis/src/control/apps/cnetedit/cnetedit.h | 27 + isis/src/control/apps/cnetedit/main.cpp | 1052 +----- isis/src/control/apps/cnetedit/tsts/Makefile | 5 - .../apps/cnetedit/tsts/checkValid/Makefile | 27 - .../apps/cnetedit/tsts/default/Makefile | 6 - .../apps/cnetedit/tsts/editLock/Makefile | 22 - .../apps/cnetedit/tsts/errors/Makefile | 19 - .../apps/cnetedit/tsts/ignore/Makefile | 15 - .../tsts/ignoreMeasuresPoints/Makefile | 12 - .../apps/cnetedit/tsts/ignorePoints/Makefile | 15 - .../apps/cnetedit/tsts/measurelist/Makefile | 39 - .../apps/cnetedit/tsts/noDelete/Makefile | 13 - .../cnetedit/tsts/preservePoints/Makefile | 14 - isis/tests/FunctionalTestsCnetedit.cpp | 2943 +++++++++++++++ .../cnetedit/I07873009RDR.dstr.cub.label.pvl | 387 ++ .../cnetedit/I09477002RDR.dstr.cub.label.pvl | 387 ++ .../cnetedit/I10101002RDR.dstr.cub.label.pvl | 387 ++ .../cnetedit/I10413004RDR.dstr.cub.label.pvl | 387 ++ .../cnetedit/I18400005RDR.dstr.cub.label.pvl | 388 ++ .../cnetedit/I23604003RDR.dstr.cub.label.pvl | 388 ++ .../cnetedit/I24827003RDR.dstr.cub.label.pvl | 388 ++ .../cnetedit/PSP_002733_1880_RED4.crop.pvl | 518 +++ .../cnetedit/PSP_002733_1880_RED5.crop.pvl | 518 +++ isis/tests/data/cnetedit/cnet_108pts.pvl | 3238 +++++++++++++++++ isis/tests/data/cnetedit/cnet_11pts.pvl | 344 ++ isis/tests/data/cnetedit/cnet_35pts.pvl | 1623 +++++++++ isis/tests/data/cnetedit/e0902065.cal.sub.cub | Bin 0 -> 1213120 bytes 29 files changed, 13069 insertions(+), 1223 deletions(-) create mode 100644 isis/src/control/apps/cnetedit/cnetedit.cpp create mode 100644 isis/src/control/apps/cnetedit/cnetedit.h delete mode 100644 isis/src/control/apps/cnetedit/tsts/Makefile delete mode 100644 isis/src/control/apps/cnetedit/tsts/checkValid/Makefile delete mode 100644 isis/src/control/apps/cnetedit/tsts/default/Makefile delete mode 100644 isis/src/control/apps/cnetedit/tsts/editLock/Makefile delete mode 100644 isis/src/control/apps/cnetedit/tsts/errors/Makefile delete mode 100644 isis/src/control/apps/cnetedit/tsts/ignore/Makefile delete mode 100644 isis/src/control/apps/cnetedit/tsts/ignoreMeasuresPoints/Makefile delete mode 100644 isis/src/control/apps/cnetedit/tsts/ignorePoints/Makefile delete mode 100644 isis/src/control/apps/cnetedit/tsts/measurelist/Makefile delete mode 100644 isis/src/control/apps/cnetedit/tsts/noDelete/Makefile delete mode 100644 isis/src/control/apps/cnetedit/tsts/preservePoints/Makefile create mode 100644 isis/tests/FunctionalTestsCnetedit.cpp create mode 100644 isis/tests/data/cnetedit/I07873009RDR.dstr.cub.label.pvl create mode 100644 isis/tests/data/cnetedit/I09477002RDR.dstr.cub.label.pvl create mode 100644 isis/tests/data/cnetedit/I10101002RDR.dstr.cub.label.pvl create mode 100644 isis/tests/data/cnetedit/I10413004RDR.dstr.cub.label.pvl create mode 100644 isis/tests/data/cnetedit/I18400005RDR.dstr.cub.label.pvl create mode 100644 isis/tests/data/cnetedit/I23604003RDR.dstr.cub.label.pvl create mode 100644 isis/tests/data/cnetedit/I24827003RDR.dstr.cub.label.pvl create mode 100644 isis/tests/data/cnetedit/PSP_002733_1880_RED4.crop.pvl create mode 100644 isis/tests/data/cnetedit/PSP_002733_1880_RED5.crop.pvl create mode 100644 isis/tests/data/cnetedit/cnet_108pts.pvl create mode 100644 isis/tests/data/cnetedit/cnet_11pts.pvl create mode 100644 isis/tests/data/cnetedit/cnet_35pts.pvl create mode 100644 isis/tests/data/cnetedit/e0902065.cal.sub.cub diff --git a/CHANGELOG.md b/CHANGELOG.md index 5032061396..768c418fc9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,7 +36,8 @@ release. ## [Unreleased] ### Changed -- Cnetedit has been refactored to be callable; old Makefile tests have been removed and replaced by gtests. Issue: [#5322](https://github.com/USGS-Astrogeology/ISIS3/issues/5322), +- Cnetedit has been refactored to be callable; old Makefile tests have been removed and replaced by gtests. Issue: [#5346](https://github.com/USGS-Astrogeology/ISIS3/issues/5346), +- Cnetdiff has been refactored to be callable; old Makefile tests have been removed and replaced by gtests. Issue: [#5322](https://github.com/USGS-Astrogeology/ISIS3/issues/5322), - Removed the `.py` extention from the _isisdataeval_ tool `isisdata_mockup` for consistency and install it in $ISISROOT/bin; added the `--tojson` and `--hasher` option to _isisdata_mockup_ tool improve utility; updated the tool `README.md` documentation to reflect this change, removed help output and trimmed example results; fixed paths to test data in `make_isisdata_mockup.sh`. [#5163](https://github.com/DOI-USGS/ISIS3/pull/5163) - Significantly refactored FASTGEOM processing in findfeatures to accommodate stability and functionality. The scope of the algorithm was taken out of the ImageSource class and isolated to support this feature. [#4772](https://github.com/DOI-USGS/ISIS3/issues/4772) - Report better information regarding the behavior of findfeatures, FASTGEOM algorithms, and creation of the output network. [#4772](https://github.com/DOI-USGS/ISIS3/issues/4772) diff --git a/isis/src/control/apps/cnetedit/cnetedit.cpp b/isis/src/control/apps/cnetedit/cnetedit.cpp new file mode 100644 index 0000000000..2e290ddafd --- /dev/null +++ b/isis/src/control/apps/cnetedit/cnetedit.cpp @@ -0,0 +1,1127 @@ +/** This is free and unencumbered software released into the public domain. +The authors of ISIS do not claim copyright on the contents of this file. +For more details about the LICENSE terms and the AUTHORS, you will +find files of those names at the top level of this repository. **/ + +/* SPDX-License-Identifier: CC0-1.0 */ + +#include "cnetedit.h" + +#include +#include +#include +#include +#include +#include + +#include "ControlMeasure.h" +#include "ControlNet.h" +#include "ControlNetValidMeasure.h" +#include "ControlPoint.h" +#include "ControlPointList.h" +#include "Cube.h" +#include "FileName.h" +#include "MeasureValidationResults.h" +#include "Progress.h" +#include "Pvl.h" +#include "PvlGroup.h" +#include "PvlKeyword.h" +#include "PvlObject.h" +#include "SerialNumber.h" +#include "SerialNumberList.h" +#include "IException.h" + +using namespace std; + +namespace Isis { + + // Deletion test + bool shouldDelete(ControlPoint *point); + + // Mutator methods + void ignorePoint(ControlNet &cnet, ControlPoint *point, QString cause); + void ignoreMeasure(ControlNet &cnet, ControlPoint *point, + ControlMeasure *measure, QString cause); + void deletePoint(ControlNet &cnet, int cp); + void deleteMeasure(ControlPoint *point, int cm); + + // Edit passes + void populateLog(ControlNet &cnet, bool ignore); + + void unlockPoints(ControlNet &cnet, ControlPointList &cpList); + void ignorePoints(ControlNet &cnet, ControlPointList &cpList); + void lockPoints(ControlNet &cnet, ControlPointList &cpList); + + void unlockCubes(ControlNet &cnet, SerialNumberList &snl); + void ignoreCubes(ControlNet &cnet, SerialNumberList &snl); + void lockCubes(ControlNet &cnet, SerialNumberList &snl); + + void unlockMeasures(ControlNet &cnet, + QMap< QString, QSet * > &editMeasures); + void ignoreMeasures(ControlNet &cnet, + QMap< QString, QSet * > &editMeasures); + void lockMeasures(ControlNet &cnet, + QMap< QString, QSet * > &editMeasures); + + void checkAllMeasureValidity(ControlNet &cnet, SerialNumberList *serialNumbers); + + // Validity test + MeasureValidationResults validateMeasure(const ControlMeasure *measure, + Cube *cube, Camera *camera); + + // Logging helpers + void logResult(QMap *pointsLog, QString pointId, QString cause); + void logResult(QMap *measuresLog, + QString pointId, QString serial, QString cause); + PvlObject createLog(QString label, QMap *pointsMap); + PvlObject createLog(QString label, + QMap *pointsMap, QMap *measuresMap); + + // Global variables + static int numPointsDeleted; + static int numMeasuresDeleted; + + static bool deleteIgnored; + static bool preservePoints; + static bool retainRef; + static bool keepLog; + static bool ignoreAll; + + static QMap *ignoredPoints; + static QMap *ignoredMeasures; + static QMap *retainedReferences; + static QMap *editLockedPoints; + static QMap *editLockedMeasures; + + static ControlNetValidMeasure *cneteditValidator; + + /** + * Edit a control network + * + * @param ui UserInterface object containing parameters + * @return Pvl results log file + * + * @throws IException::User "Unable to open MEASURELIST [FILENAME]" + * @throws IException::User "Line ___ in the MEASURELIST does not contain a Point ID and a cube filename separated by a comma" + */ + Pvl cnetedit(UserInterface &ui) { + + // Construct control net + ControlNet cnet(ui.GetFileName("CNET")); + + // List of IDs mapping to points to be edited + ControlPointList *cpList = nullptr; + if (ui.WasEntered("POINTLIST") && cnet.GetNumPoints() > 0) { + cpList = new ControlPointList(ui.GetFileName("POINTLIST")); + } + + // Serial number list of cubes to be edited + SerialNumberList *cubeSnList = nullptr; + if (ui.WasEntered("CUBELIST") && cnet.GetNumPoints() > 0) { + cubeSnList = new SerialNumberList(ui.GetFileName("CUBELIST")); + } + + // List of paired Point IDs and cube filenames + QMap< QString, QSet * > *editMeasuresList = nullptr; + if (ui.WasEntered("MEASURELIST") && cnet.GetNumPoints() > 0) { + + QFile file(ui.GetFileName("MEASURELIST")); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + QString msg = "Unable to open MEASURELIST [" + + file.fileName() + "]"; + throw IException(IException::User, msg, _FILEINFO_); + } + + editMeasuresList = new QMap< QString, QSet * >; + + QTextStream in(&file); + int lineNumber = 1; + while (!in.atEnd()) { + QString line = in.readLine(); + QStringList results = line.split(","); + if (results.size() < 2) { + QString msg = "Line " + QString::number(lineNumber) + " in the MEASURELIST does " + "not contain a Point ID and a cube filename separated by a comma"; + throw IException(IException::User, msg, _FILEINFO_); + } + + if (!editMeasuresList->contains(results[0])) + editMeasuresList->insert(results[0], new QSet); + + FileName cubeName(results[1]); + QString sn = SerialNumber::Compose(cubeName.expanded()); + (*editMeasuresList)[results[0]]->insert(sn); + + lineNumber++; + } + } + + // DefFile and cube serial number list for Validity check + Pvl *defFile = nullptr; + SerialNumberList *snValidationList = nullptr; + if (ui.GetBoolean("CHECKVALID") && cnet.GetNumPoints() > 0) { + cneteditValidator = nullptr; + + // Open DefFile and validate its' keywords and value type + defFile = new Pvl(ui.GetFileName("DEFFILE")); + + // create cube serial number validation list + snValidationList = new SerialNumberList(ui.GetFileName("FROMLIST")); + } + + + // call cnetedit with ControlNet plus list files and/or definition files (if any) + Pvl results = cnetedit(cnet, ui, cpList, cubeSnList, editMeasuresList, defFile, snValidationList); + + // clean up + delete cpList; + cpList = nullptr; + + delete cubeSnList; + cubeSnList = nullptr; + + if (editMeasuresList != nullptr) { + QList points = editMeasuresList->keys(); + for (int i = 0; i < points.size(); i++) delete (*editMeasuresList)[points[i]]; + delete editMeasuresList; + editMeasuresList = nullptr; + } + + delete defFile; + defFile = nullptr; + + delete snValidationList; + snValidationList = nullptr; + + return results; + } + + + /** + * Edit a control network + * + * @param ControlNet cnet + * @param UserInterface ui + * @param ControlPointList cpList + * @param SerialNumberList cubeSnl + * @param QMap< QString, QSet * > editMeasuresList + * @param Pvl defFile + * @param SerialNumberList snValidationList + * + * @return Pvl results log file + * + * @throws IException::User "Invalid Deffile" + */ + Pvl cnetedit(ControlNet &cnet, UserInterface &ui, + ControlPointList *cpList, + SerialNumberList *cubeSnl, + QMap< QString, QSet * > *editMeasuresList, + Pvl *defFile, + SerialNumberList *snValidationList) { + + Pvl results; + + // 2016-12-08 Ian Humphrey - Set the QHash seed, otherwise output is ALWAYS slightly + // different. Note that in Qt4, the seed was constant, but in Qt5, the seed is + // created differently for each process. Fixes #4206. + qSetGlobalQHashSeed(0); + + // Reset the counts of points and measures deleted + numPointsDeleted = 0; + numMeasuresDeleted = 0; + + // Get global user parameters + bool ignore = ui.GetBoolean("IGNORE"); + deleteIgnored = ui.GetBoolean("DELETE"); + preservePoints = ui.GetBoolean("PRESERVE"); + retainRef = ui.GetBoolean("RETAIN_REFERENCE"); + ignoreAll = ui.GetBoolean("IGNOREALL"); + + // Data needed to keep track of ignored/deleted points and measures + keepLog = ui.WasEntered("LOG"); + ignoredPoints = NULL; + ignoredMeasures = NULL; + retainedReferences = NULL; + editLockedPoints = NULL; + editLockedMeasures = NULL; + + // If the user wants to keep a log, go ahead and populate it with all the + // existing ignored points and measures + if (keepLog && cnet.GetNumPoints() > 0) + populateLog(cnet, ignore); + + // List has Points Ids + bool processPoints = false; + if (cpList != nullptr) { + processPoints = true; + } + + // List has Cube file names + bool processCubes = false; + if (cubeSnl != nullptr) { + processCubes = true; + } + + // List has measurelist file names + bool processMeasures = false; + if (editMeasuresList != nullptr) { + processMeasures = true; + } + + if (ui.GetBoolean("UNLOCK")) { + if (processPoints) unlockPoints(cnet, *cpList); + if (processCubes) unlockCubes(cnet, *cubeSnl); + if (processMeasures) unlockMeasures(cnet, *editMeasuresList); + } + + /* + * As a first pass, just try and delete anything that's already ignored + * in the Control Network, if the user wants to delete ignored points and + * measures. Originally, this check was performed last, only if the user + * didn't specify any other deletion methods. However, performing this + * check first will actually improve the running time in cases where there + * are already ignored points and measures in the input network. The added + * cost of doing this check here actually doesn't add to the running time at + * all, because these same checks would need to have been done later + * regardless. + */ + if (deleteIgnored && cnet.GetNumPoints() > 0) { + Progress progress; + progress.SetText("Deleting Ignored in Input"); + progress.SetMaximumSteps(cnet.GetNumPoints()); + progress.CheckStatus(); + + for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { + ControlPoint *point = cnet.GetPoint(cp); + if (point->IsIgnored()) { + deletePoint(cnet, cp); + } + else { + for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { + if (point->GetMeasure(cm)->IsIgnored()) { + if (cm == point->IndexOfRefMeasure() && ignoreAll) { + // If the reference is ignored and IgnoreAll is set, the point must ignored too + ignorePoint(cnet, point, "Reference measure ignored"); + } + else { + deleteMeasure(point, cm); + } + } + } + + // Check if the number of measures in the point is zero or there are too + // few measures in the point and we don't want to preserve them. + if (shouldDelete(point)) { + deletePoint(cnet, cp); + } + } + + progress.CheckStatus(); + } + } + + if (ignore) { + if (processPoints) ignorePoints(cnet, *cpList); + if (processCubes) ignoreCubes(cnet, *cubeSnl); + if (processMeasures) ignoreMeasures(cnet, *editMeasuresList); + + // Perform validity check + if (ui.GetBoolean("CHECKVALID") && cnet.GetNumPoints() > 0) { + cneteditValidator = NULL; + + // First validate DefFile's keywords and value type + Pvl defFile(ui.GetFileName("DEFFILE")); + Pvl pvlTemplate("$ISISROOT/appdata/templates/cnet_validmeasure/validmeasure.def"); + Pvl pvlResults; + pvlTemplate.validatePvl(defFile, pvlResults); + if (pvlResults.groups() > 0 || pvlResults.keywords() > 0) { + results.addLogGroup(pvlResults.group(0)); + + QString sErrMsg = "Invalid Deffile\n"; + throw IException(IException::User, sErrMsg, _FILEINFO_); + } + + // Construct the validator from the user-specified definition file + cneteditValidator = new ControlNetValidMeasure(defFile); + + // User also provided a list of all serial numbers corresponding to every + // cube in the control network + checkAllMeasureValidity(cnet, snValidationList); + + // Delete the validator + if (cneteditValidator != NULL) { + delete cneteditValidator; + cneteditValidator = NULL; + } + + // Log the DEFFILE to the print file + results.addLogGroup(defFile.findGroup("ValidMeasure", Pvl::Traverse)); + } + } + + if (ui.GetBoolean("LOCK")) { + if (processPoints) lockPoints(cnet, *cpList); + if (processCubes) lockCubes(cnet, *cubeSnl); + if (processMeasures) lockMeasures(cnet, *editMeasuresList); + } + + // Log statistics + if (keepLog) { + Pvl outputLog; + + outputLog.addKeyword(PvlKeyword("PointsDeleted", toString(numPointsDeleted))); + outputLog.addKeyword(PvlKeyword("MeasuresDeleted", toString(numMeasuresDeleted))); + + PvlObject lockedLog = createLog( + "EditLocked", editLockedPoints, editLockedMeasures); + outputLog.addObject(lockedLog); + + outputLog.addObject(createLog("RetainedReferences", retainedReferences)); + + // Depending on whether the user chose to delete ignored points and + // measures, the log will either contain reasons for being ignored, or + // reasons for being deleted + PvlObject ignoredLog = createLog( + deleteIgnored ? "Deleted" : "Ignored", ignoredPoints, ignoredMeasures); + outputLog.addObject(ignoredLog); + + // Write the log + QString logFileName = ui.GetFileName("LOG"); + outputLog.write(logFileName); + + // Delete the structures keeping track of the ignored points and measures + delete ignoredPoints; + ignoredPoints = NULL; + + delete ignoredMeasures; + ignoredMeasures = NULL; + + delete retainedReferences; + retainedReferences = NULL; + + delete editLockedPoints; + editLockedPoints = NULL; + + delete editLockedMeasures; + editLockedMeasures = NULL; + } + + // Write the network + cnet.Write(ui.GetFileName("ONET")); + + return results; + } + + + /** + * After any modification to a point's measures or ignored status, this check + * should be performed to determine if the changes should result in the point's + * deletion. + * + * @param point The Control Point recently modified + * + * @return Whether or not the point should be deleted + */ + bool shouldDelete(ControlPoint *point){ + + if(!deleteIgnored) + return false; + + else{ + + if ( point->GetNumMeasures() == 0 && !preservePoints) + return true; + + + if (point->GetType() != ControlPoint::Fixed && point->GetNumMeasures()< 2 ){ + + if(preservePoints && point->GetNumMeasures() == 1) + return false; + + return true; //deleteIgnore = TRUE or else we would not be here + } + + + if( point->IsIgnored() ) + return true; + + return false; + } + } + + + /** + * Set the point at the given index in the control network to ignored, and add + * a new keyword to the list of ignored points with a cause for the ignoring, + * if the user wished to keep a log. + * + * @param cnet The Control Network being modified + * @param point The Control Point we wish to ignore + * @param cause A prose description of why the point was ignored (for logging) + */ + void ignorePoint(ControlNet &cnet, ControlPoint *point, QString cause) { + ControlPoint::Status result = point->SetIgnored(true); + + logResult(result == ControlPoint::Success ? ignoredPoints : editLockedPoints, + point->GetId(), cause); + } + + + /** + * Set the measure to be ignored, and add a new keyword to the list of ignored + * measures if the user wished to keep a log. + * + * @param cnet The Control Network being modified + * @param point The Control Point of the Control Measure we wish to ignore + * @param measure The Control Measure we wish to ignore + * @param cause A prose description of why the measure was ignored (for + * logging) + */ + void ignoreMeasure(ControlNet &cnet, ControlPoint *point, + ControlMeasure *measure, QString cause) { + ControlMeasure::Status result = measure->SetIgnored(true); + + logResult( + result == ControlMeasure::Success ? ignoredMeasures : editLockedMeasures, + point->GetId(), measure->GetCubeSerialNumber(), cause); + + if (ignoreAll && measure->Parent()->GetRefMeasure() == measure) { + foreach (ControlMeasure *cm, measure->Parent()->getMeasures()) { + if (!cm->IsIgnored()) + ignoreMeasure(cnet, measure->Parent(), cm, "Reference ignored"); + } + } + } + + + /** + * Delete the point, record how many points and measures have been deleted. + * + * @param cnet The Control Network being modified + * @param cp Index into the Control Network for the point we wish to delete + */ + void deletePoint(ControlNet &cnet, int cp) { + ControlPoint *point = cnet.GetPoint(cp); + + // Do the edit lock check up front so we don't accidentally log that a point + // was deleted when in fact it was not + if (!point->IsEditLocked()) { + numMeasuresDeleted += point->GetNumMeasures(); + numPointsDeleted++; + + if (keepLog) { + // If the point's being deleted but it wasn't set to ignore, it can only + // be because the point has two few measures remaining + if (!point->IsIgnored()) + ignorePoint(cnet, point, "Too few measures"); + + // For any measures not ignored, mark their cause for deletion as being + // caused by the point's deletion + for (int cm = 0; cm < point->GetNumMeasures(); cm++) { + ControlMeasure *measure = point->GetMeasure(cm); + if (!measure->IsIgnored()) + ignoreMeasure(cnet, point, measure, "Point deleted"); + } + } + + cnet.DeletePoint(cp); + } + else { + for (int cm = 0; cm < point->GetNumMeasures(); cm++) { + if (point->GetMeasure(cm)->IsEditLocked()) { + ignorePoint(cnet, point, "EditLocked point skipped"); + } + } + } + } + + + /** + * Delete the measure, increment the count of measures deleted. + * + * @param point The Control Point of the Control Measure we wish to delete + * @param cm Index into the Control Network for the measure we wish to delete + */ + void deleteMeasure(ControlPoint *point, int cm) { + if (point->Delete(cm) == ControlMeasure::Success) numMeasuresDeleted++; + } + + + /** + * Seed the log with points and measures already ignored. + * + * @param cnet The Control Network being modified + */ + void populateLog(ControlNet &cnet, bool ignore) { + ignoredPoints = new QMap; + ignoredMeasures = new QMap; + + retainedReferences = new QMap; + + editLockedPoints = new QMap; + editLockedMeasures = new QMap; + + Progress progress; + progress.SetText("Initializing Log File"); + progress.SetMaximumSteps(cnet.GetNumPoints()); + progress.CheckStatus(); + + for (int cp = 0; cp < cnet.GetNumPoints(); cp++) { + ControlPoint *point = cnet.GetPoint(cp); + + if (point->IsIgnored()) { + ignorePoint(cnet, point, "Ignored from input"); + } + + for (int cm = 0; cm < point->GetNumMeasures(); cm++) { + ControlMeasure *measure = point->GetMeasure(cm); + + if (measure->IsIgnored()) { + if (cm == point->IndexOfRefMeasure() && ignoreAll) { + if (ignore && !point->IsIgnored()) { + ignorePoint(cnet, point, "Reference measure ignored"); + } + } + + ignoreMeasure(cnet, point, measure, "Ignored from input"); + } + } + + progress.CheckStatus(); + } + } + + + void unlockPoints(ControlNet &cnet, ControlPointList &cpList) { + Progress progress; + progress.SetText("Unlocking Points"); + progress.SetMaximumSteps(cnet.GetNumPoints()); + progress.CheckStatus(); + + for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { + ControlPoint *point = cnet.GetPoint(cp); + if (point->IsEditLocked() && cpList.HasControlPoint(point->GetId())) { + point->SetEditLock(false); + } + progress.CheckStatus(); + } + } + + + /** + * Iterates over the points in the Control Network looking for a match in the + * list of Control Points to be ignored. If a match is found, ignore the + * point, and if the DELETE option was selected, the point will then be deleted + * from the network. + * + * @param cnet The Control Network being modified + * @param cpList List of Control Points + */ + void ignorePoints(ControlNet &cnet, ControlPointList &cpList) { + Progress progress; + progress.SetText("Comparing Points to POINTLIST"); + progress.SetMaximumSteps(cnet.GetNumPoints()); + progress.CheckStatus(); + + for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { + ControlPoint *point = cnet.GetPoint(cp); + + // Compare each Point Id listed with the Point in the + // Control Network for according exclusion + if (!point->IsIgnored() && cpList.HasControlPoint(point->GetId())) { + ignorePoint(cnet, point, "Point ID in POINTLIST"); + } + + if (deleteIgnored) { + //look for previously ignored control points + if (point->IsIgnored()) { + deletePoint(cnet, cp); + } + else { + //look for previously ignored control measures + for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { + if (point->GetMeasure(cm)->IsIgnored() && deleteIgnored) { + deleteMeasure(point, cm); + } + } + // Check if there are too few measures in the point or the point was + // previously ignored + if (shouldDelete(point)) { + deletePoint(cnet, cp); + } + } + } + + progress.CheckStatus(); + } + } + + + /** + * Lock points. + * + * @param ControlNet Input ControlNet + * @param ControlPointList List of points to lock + */ + void lockPoints(ControlNet &cnet, ControlPointList &cpList) { + Progress progress; + progress.SetText("Locking Points"); + progress.SetMaximumSteps(cnet.GetNumPoints()); + progress.CheckStatus(); + + for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { + ControlPoint *point = cnet.GetPoint(cp); + if (!point->IsEditLocked() && cpList.HasControlPoint(point->GetId())) { + point->SetEditLock(true); + } + progress.CheckStatus(); + } + } + + + /** + * Unlock cubes. + * + * @param ControlNet Input ControlNet + * @param SerialNumberList List of cubes to unlock + */ + void unlockCubes(ControlNet &cnet, SerialNumberList &snl) { + Progress progress; + progress.SetText("Unlocking Cubes"); + progress.SetMaximumSteps(cnet.GetNumPoints()); + progress.CheckStatus(); + + for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { + ControlPoint *point = cnet.GetPoint(cp); + + for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { + ControlMeasure *measure = point->GetMeasure(cm); + + QString serialNumber = measure->GetCubeSerialNumber(); + if (measure->IsEditLocked() && snl.hasSerialNumber(serialNumber)) { + measure->SetEditLock(false); + } + } + progress.CheckStatus(); + } + } + + + /** + * Iterates over the list of Control Measures in the Control Network and + * compares measure serial numbers with those in the input list of serial + * numbers to be ignored. If a match is found, ignore the measure. If the + * DELETE option was selected, the measure will then be deleted from the + * network. + * + * @param cnet The Control Network being modified + * @param snl List of Serial Numbers to be ignored + */ + void ignoreCubes(ControlNet &cnet, SerialNumberList &snl) { + Progress progress; + progress.SetText("Comparing Measures to CUBELIST"); + progress.SetMaximumSteps(cnet.GetNumPoints()); + progress.CheckStatus(); + + for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { + ControlPoint *point = cnet.GetPoint(cp); + + // Compare each Serial Number listed with the serial number in the + // Control Measure for according exclusion + for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { + ControlMeasure *measure = point->GetMeasure(cm); + + if (!point->IsIgnored() && point->GetMeasure(cm)->IsEditLocked()) { + ignoreMeasure(cnet, point, measure, "EditLocked measure skipped"); + } + + QString serialNumber = measure->GetCubeSerialNumber(); + + if (snl.hasSerialNumber(serialNumber)) { + QString cause = "Serial Number in CUBELIST"; + if (cm == point->IndexOfRefMeasure() && retainRef) { + logResult(retainedReferences, point->GetId(), cause); + } + else if (!measure->IsIgnored() || cm == point->IndexOfRefMeasure()) { + ignoreMeasure(cnet, point, measure, cause); + + if (cm == point->IndexOfRefMeasure() && !point->IsIgnored() && ignoreAll) { + ignorePoint(cnet, point, "Reference measure ignored"); + } + } + } + + // also look for previously ignored control measures + if (deleteIgnored && measure->IsIgnored()) { + deleteMeasure(point, cm); + } + } + // Check if there are too few measures in the point or the point was + // previously ignored + if (shouldDelete(point)) { + deletePoint(cnet, cp); + } + + progress.CheckStatus(); + } + } + + + /** + * Lock cubes. + * + * @param ControlNet Input ControlNet + * @param SerialNumberList List of cubes to Lock + */ + void lockCubes(ControlNet &cnet, SerialNumberList &snl) { + Progress progress; + progress.SetText("Locking Cubes"); + progress.SetMaximumSteps(cnet.GetNumPoints()); + progress.CheckStatus(); + + for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { + ControlPoint *point = cnet.GetPoint(cp); + + for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { + ControlMeasure *measure = point->GetMeasure(cm); + + QString serialNumber = measure->GetCubeSerialNumber(); + if (!measure->IsEditLocked() && snl.hasSerialNumber(serialNumber)) { + measure->SetEditLock(true); + } + } + progress.CheckStatus(); + } + } + + + /** + * Unlock measures. + * + * @param ControlNet Input ControlNet + * @param QMap< QString, QSet * > Measures to unlock + */ + void unlockMeasures(ControlNet &cnet, + QMap< QString, QSet * > &editMeasures) { + + Progress progress; + progress.SetText("Unlocking Measures"); + progress.SetMaximumSteps(cnet.GetNumPoints()); + progress.CheckStatus(); + + for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { + ControlPoint *point = cnet.GetPoint(cp); + + QString id = point->GetId(); + if (editMeasures.contains(id)) { + QSet *measureSet = editMeasures[id]; + + for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { + ControlMeasure *measure = point->GetMeasure(cm); + + QString serialNumber = measure->GetCubeSerialNumber(); + if (measure->IsEditLocked() && measureSet->contains(serialNumber)) { + measure->SetEditLock(false); + } + } + } + progress.CheckStatus(); + } + } + + + /** + * Ignore measures. + * + * @param ControlNet Input ControlNet + * @param QMap< QString, QSet * > Measures to ignore + */ + void ignoreMeasures(ControlNet &cnet, + QMap< QString, QSet * > &editMeasures) { + + Progress progress; + progress.SetText("Ignoring Measures"); + progress.SetMaximumSteps(cnet.GetNumPoints()); + progress.CheckStatus(); + + for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { + ControlPoint *point = cnet.GetPoint(cp); + + QString id = point->GetId(); + if (editMeasures.contains(id)) { + QSet *measureSet = editMeasures[id]; + + // Compare each Serial Number listed with the serial number in the + // Control Measure for according exclusion + for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { + ControlMeasure *measure = point->GetMeasure(cm); + + if (!point->IsIgnored() && point->GetMeasure(cm)->IsEditLocked()) { + ignoreMeasure(cnet, point, measure, "EditLocked measure skipped"); + } + + QString serialNumber = measure->GetCubeSerialNumber(); + if (measureSet->contains(serialNumber)) { + QString cause = "Measure in MEASURELIST"; + if (cm == point->IndexOfRefMeasure() && retainRef) { + logResult(retainedReferences, point->GetId(), cause); + } + else if (!measure->IsIgnored() || cm == point->IndexOfRefMeasure()) { + ignoreMeasure(cnet, point, measure, cause); + + if (cm == point->IndexOfRefMeasure() && !point->IsIgnored() && ignoreAll) { + ignorePoint(cnet, point, "Reference measure ignored"); + } + } + } + + // also look for previously ignored control measures + if (deleteIgnored && measure->IsIgnored()) { + deleteMeasure(point, cm); + } + } + // Check if there are too few measures in the point or the point was + // previously ignored + if (shouldDelete(point)) { + deletePoint(cnet, cp); + } + } + + progress.CheckStatus(); + } + } + + + /** + * Lock measures. + * + * @param ControlNet Input ControlNet + * @param QMap< QString, QSet * > Measures to lock + */ + void lockMeasures(ControlNet &cnet, + QMap< QString, QSet * > &editMeasures) { + + Progress progress; + progress.SetText("Locking Measures"); + progress.SetMaximumSteps(cnet.GetNumPoints()); + progress.CheckStatus(); + + for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { + ControlPoint *point = cnet.GetPoint(cp); + + QString id = point->GetId(); + if (editMeasures.contains(id)) { + QSet *measureSet = editMeasures[id]; + + for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { + ControlMeasure *measure = point->GetMeasure(cm); + + QString serialNumber = measure->GetCubeSerialNumber(); + if (!measure->IsEditLocked() && measureSet->contains(serialNumber)) { + measure->SetEditLock(true); + } + } + } + progress.CheckStatus(); + } + } + + + /** + * Compare each measure in the Control Network against tolerances specified in + * the input DEFFILE. Ignore any measure whose values fall outside the valid + * tolerances, and delete it if the user specified to do so. + * + * @param cnet The Control Network being modified + * @param serialNumbers List of all Serial Numbers in the network + */ + void checkAllMeasureValidity(ControlNet &cnet, SerialNumberList *serialNumbers) { + + QList cnetSerials = cnet.GetCubeSerials(); + Progress progress; + progress.SetText("Checking Measure Validity"); + progress.SetMaximumSteps(cnetSerials.size()); + progress.CheckStatus(); + + foreach (QString serialNumber, cnetSerials) { + + Cube *cube = NULL; + Camera *camera = NULL; + if (cneteditValidator->IsCubeRequired()) { + if (!serialNumbers->hasSerialNumber(serialNumber)) { + QString msg = "Serial Number [" + serialNumber + "] contains no "; + msg += "matching cube in FROMLIST"; + throw IException(IException::User, msg, _FILEINFO_); + } + + cube = new Cube; + cube->open(serialNumbers->fileName(serialNumber)); + + if (cneteditValidator->IsCameraRequired()) { + try { + camera = cube->camera(); + } + catch (IException &e) { + QString msg = "Cannot Create Camera for Image:" + cube->fileName(); + throw IException(e, IException::User, msg, _FILEINFO_); + } + } + } + + QList measures = cnet.GetMeasuresInCube(serialNumber); + for (int cm = 0; cm < measures.size(); cm++) { + ControlMeasure *measure = measures[cm]; + ControlPoint *point = measure->Parent(); + + if (!measure->IsIgnored()) { + MeasureValidationResults results = + validateMeasure(measure, cube, camera); + + if (!results.isValid()) { + QString failure = results.toString(); + QString cause = "Validity Check " + failure; + + if (measure == point->GetRefMeasure() && retainRef) { + logResult(retainedReferences, point->GetId(), cause); + } + else { + ignoreMeasure(cnet, point, measure, cause); + + if (measure == point->GetRefMeasure() && ignoreAll) { + ignorePoint(cnet, point, "Reference measure ignored"); + } + } + } + } + } + + delete cube; + progress.CheckStatus(); + } + + for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { + ControlPoint *point = cnet.GetPoint(cp); + + for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { + ControlMeasure *measure = point->GetMeasure(cm); + + // Also look for previously ignored control measures + if (deleteIgnored && measure->IsIgnored()) { + deleteMeasure(point, cm); + } + } + + // Check if there are too few measures in the point or the point was + // previously ignored + if (shouldDelete(point)) + deletePoint(cnet, cp); + } + } + + + /** + * Test an individual measure against the user-specified tolerances and return + * the result. + * + * @param measure Measure to be tested + * @param cube Cube with serial number matching that of the current measure + * @param camera Camera associated with cube + * + * @return The results of validating the measure as an object containing the + * validity and a formatted error (or success) message + */ + MeasureValidationResults validateMeasure(const ControlMeasure *measure, + Cube *cube, Camera *camera) { + + MeasureValidationResults results = + cneteditValidator->ValidStandardOptions(measure, cube, camera); + + return results; + } + + + void logResult(QMap *pointsLog, QString pointId, QString cause) { + if (keepLog) { + // Label the keyword as the Point ID, and make the cause into the value + (*pointsLog)[pointId] = cause; + } + } + + + void logResult(QMap *measuresLog, + QString pointId, QString serial, QString cause) { + + if (keepLog) { + // Make the keyword label the measure Serial Number, and the cause into the + // value + PvlKeyword measureMessage(PvlKeyword(serial, cause)); + + // Using a map to make accessing by Point ID a O(1) to O(lg n) operation + if (measuresLog->contains(pointId)) { + // If the map already has a group for the given Point ID, simply add the + // new measure to it + PvlGroup &pointGroup = (*measuresLog)[pointId]; + pointGroup.addKeyword(measureMessage); + } + else { + // Else there is no group for the Point ID of the measure being ignored, + // so make a new group, add the measure, and insert it into the map + PvlGroup pointGroup(pointId); + pointGroup.addKeyword(measureMessage); + (*measuresLog)[pointId] = pointGroup; + } + } + } + + + /** + * Create points log. + * + * @param QString Label for points log + * @param QMap Points map + * + * @return PvlObject Points log + */ + PvlObject createLog(QString label, QMap *pointsMap) { + PvlObject pointsLog(label); + + QList pointIds = pointsMap->keys(); + for (int i = 0; i < pointIds.size(); i++) { + QString pointId = pointIds.at(i); + pointsLog.addKeyword(PvlKeyword(pointId, (*pointsMap)[pointId])); + } + + return pointsLog; + } + + + /** + * Create measures log. + * + * @param QString Label for measures log + * @param QMap Points map + * @param QMap Measures map + * + * @return PvlObject Measures log + */ + PvlObject createLog(QString label, + QMap *pointsMap, QMap *measuresMap) { + + PvlObject editLog(label); + + PvlObject pointsLog = createLog("Points", pointsMap); + editLog.addObject(pointsLog); + + // Get all the groups of measures from the map + PvlObject measuresLog("Measures"); + QList measureGroups = measuresMap->values(); + + for (int i = 0; i < measureGroups.size(); i++) + measuresLog.addGroup(measureGroups.at(i)); + + editLog.addObject(measuresLog); + return editLog; + } +} + + diff --git a/isis/src/control/apps/cnetedit/cnetedit.h b/isis/src/control/apps/cnetedit/cnetedit.h new file mode 100644 index 0000000000..d8d054b974 --- /dev/null +++ b/isis/src/control/apps/cnetedit/cnetedit.h @@ -0,0 +1,27 @@ +/** This is free and unencumbered software released into the public domain. + +The authors of ISIS do not claim copyright on the contents of this file. +For more details about the LICENSE terms and the AUTHORS, you will +find files of those names at the top level of this repository. **/ + +/* SPDX-License-Identifier: CC0-1.0 */ +#ifndef cnetedit_h +#define cnetedit_h + +#include "UserInterface.h" + +namespace Isis{ + class ControlNet; + class ControlPointList; + class SerialNumberList; + + extern Pvl cnetedit(UserInterface &ui); + extern Pvl cnetedit(ControlNet &cnet, UserInterface &ui, + ControlPointList *cpList=nullptr, + SerialNumberList *cubeSnl=nullptr, + QMap< QString, QSet * > *editMeasuresList=nullptr, + Pvl *defFile=nullptr, + SerialNumberList *validationSnl=nullptr); +} + +#endif diff --git a/isis/src/control/apps/cnetedit/main.cpp b/isis/src/control/apps/cnetedit/main.cpp index efb4e3aec2..0eab06ab54 100644 --- a/isis/src/control/apps/cnetedit/main.cpp +++ b/isis/src/control/apps/cnetedit/main.cpp @@ -5,1059 +5,40 @@ For more details about the LICENSE terms and the AUTHORS, you will find files of those names at the top level of this repository. **/ /* SPDX-License-Identifier: CC0-1.0 */ - #define GUIHELPERS #include "Isis.h" -#include -#include -#include -#include -#include - -#include "ControlMeasure.h" -#include "ControlNet.h" -#include "ControlNetValidMeasure.h" -#include "ControlPoint.h" -#include "ControlPointList.h" -#include "Cube.h" -#include "FileName.h" -#include "MeasureValidationResults.h" -#include "Progress.h" +#include "Application.h" #include "Pvl.h" -#include "PvlGroup.h" -#include "PvlKeyword.h" -#include "PvlObject.h" -#include "SerialNumber.h" -#include "SerialNumberList.h" -#include "IException.h" +#include "UserInterface.h" +#include "cnetedit.h" #include "GuiEditFile.h" + using namespace std; using namespace Isis; -// Deletion test -bool shouldDelete(ControlPoint *point); - -// Mutator methods -void ignorePoint(ControlNet &cnet, ControlPoint *point, QString cause); -void ignoreMeasure(ControlNet &cnet, ControlPoint *point, - ControlMeasure *measure, QString cause); -void deletePoint(ControlNet &cnet, int cp); -void deleteMeasure(ControlPoint *point, int cm); - -// Edit passes -void populateLog(ControlNet &cnet, bool ignore); - -void unlockPoints(ControlNet &cnet, ControlPointList &cpList); -void ignorePoints(ControlNet &cnet, ControlPointList &cpList); -void lockPoints(ControlNet &cnet, ControlPointList &cpList); - -void unlockCubes(ControlNet &cnet, SerialNumberList &snl); -void ignoreCubes(ControlNet &cnet, SerialNumberList &snl); -void lockCubes(ControlNet &cnet, SerialNumberList &snl); - -void unlockMeasures(ControlNet &cnet, - QMap< QString, QSet * > &editMeasures); -void ignoreMeasures(ControlNet &cnet, - QMap< QString, QSet * > &editMeasures); -void lockMeasures(ControlNet &cnet, - QMap< QString, QSet * > &editMeasures); - -void checkAllMeasureValidity(ControlNet &cnet, QString cubeList); - -// Validity test -MeasureValidationResults validateMeasure(const ControlMeasure *measure, - Cube *cube, Camera *camera); - -// Logging helpers -void logResult(QMap *pointsLog, QString pointId, QString cause); -void logResult(QMap *measuresLog, - QString pointId, QString serial, QString cause); -PvlObject createLog(QString label, QMap *pointsMap); -PvlObject createLog(QString label, - QMap *pointsMap, QMap *measuresMap); - void PrintTemp(); void EditDefFile(); map GuiHelpers() { - map helper; - helper["PrintTemp"] = (void *) PrintTemp; - helper["EditDefFile"] = (void *) EditDefFile; - return helper; + map helper; + helper["PrintTemp"] = (void *) PrintTemp; + helper["EditDefFile"] = (void *) EditDefFile; + return helper; } -// Global variables -int numPointsDeleted; -int numMeasuresDeleted; - -bool deleteIgnored; -bool preservePoints; -bool retainRef; -bool keepLog; -bool ignoreAll; - -QMap *ignoredPoints; -QMap *ignoredMeasures; -QMap *retainedReferences; -QMap *editLockedPoints; -QMap *editLockedMeasures; - -ControlNetValidMeasure *validator; - -// Main program void IsisMain() { - // 2016-12-08 Ian Humphrey - Set the QHash seed, otherwise output is ALWAYS slightly - // different. Note that in Qt4, the seed was constant, but in Qt5, the seed is - // created differently for each process. Fixes #4206. - qSetGlobalQHashSeed(0); - - // Reset the counts of points and measures deleted - numPointsDeleted = 0; - numMeasuresDeleted = 0; - - // Interface for getting user parameters UserInterface &ui = Application::GetUserInterface(); - - // Get global user parameters - bool ignore = ui.GetBoolean("IGNORE"); - deleteIgnored = ui.GetBoolean("DELETE"); - preservePoints = ui.GetBoolean("PRESERVE"); - retainRef = ui.GetBoolean("RETAIN_REFERENCE"); - ignoreAll = ui.GetBoolean("IGNOREALL"); - - // Data needed to keep track of ignored/deleted points and measures - keepLog = ui.WasEntered("LOG"); - ignoredPoints = NULL; - ignoredMeasures = NULL; - retainedReferences = NULL; - editLockedPoints = NULL; - editLockedMeasures = NULL; - - // Test if file exists, throw exception if it does not, continue otherwise. - FileName cnetInput(ui.GetFileName("CNET")); - if (!cnetInput.fileExists()) { - QString msg = "The control network [" + cnetInput.expanded() + "] entered for CNET does not exist."; - throw IException(IException::User, msg, _FILEINFO_); - } - - // If the user wants to keep a log, go ahead and populate it with all the - // existing ignored points and measures - ControlNet cnet(ui.GetFileName("CNET")); - if (keepLog && cnet.GetNumPoints() > 0) - populateLog(cnet, ignore); - - // List has Points Ids - bool processPoints = false; - ControlPointList *cpList = NULL; - if (ui.WasEntered("POINTLIST") && cnet.GetNumPoints() > 0) { - processPoints = true; - QString pointlistFileName = ui.GetFileName("POINTLIST"); - cpList = new ControlPointList((FileName) pointlistFileName); - } - - // List has Cube file names - bool processCubes = false; - SerialNumberList *cubeSnl = NULL; - if (ui.WasEntered("CUBELIST") && cnet.GetNumPoints() > 0) { - processCubes = true; - QString ignorelistFileName = ui.GetFileName("CUBELIST"); - cubeSnl = new SerialNumberList(ignorelistFileName); - } - - // List has measurelist file names - bool processMeasures = false; - QMap< QString, QSet * > *editMeasures = NULL; - if (ui.WasEntered("MEASURELIST") && cnet.GetNumPoints() > 0) { - processMeasures = true; - editMeasures = new QMap< QString, QSet * >; - - QFile file(ui.GetFileName("MEASURELIST")); - if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { - QString msg = "Unable to open MEASURELIST [" + - file.fileName() + "]"; - throw IException(IException::User, msg, _FILEINFO_); - } - - QTextStream in(&file); - int lineNumber = 1; - while (!in.atEnd()) { - QString line = in.readLine(); - QStringList results = line.split(","); - if (results.size() < 2) { - QString msg = "Line " + QString::number(lineNumber) + " in the MEASURELIST does " - "not contain a Point ID and a cube filename separated by a comma"; - throw IException(IException::User, msg, _FILEINFO_); - } - - if (!editMeasures->contains(results[0])) - editMeasures->insert(results[0], new QSet); - - FileName cubeName(results[1]); - QString sn = SerialNumber::Compose(cubeName.expanded()); - (*editMeasures)[results[0]]->insert(sn); - - lineNumber++; - } - } - - if (ui.GetBoolean("UNLOCK")) { - if (processPoints) unlockPoints(cnet, *cpList); - if (processCubes) unlockCubes(cnet, *cubeSnl); - if (processMeasures) unlockMeasures(cnet, *editMeasures); - } - - /* - * As a first pass, just try and delete anything that's already ignored - * in the Control Network, if the user wants to delete ignored points and - * measures. Originally, this check was performed last, only if the user - * didn't specify any other deletion methods. However, performing this - * check first will actually improve the running time in cases where there - * are already ignored points and measures in the input network. The added - * cost of doing this check here actually doesn't add to the running time at - * all, because these same checks would need to have been done later - * regardless. - */ - if (deleteIgnored && cnet.GetNumPoints() > 0) { - Progress progress; - progress.SetText("Deleting Ignored in Input"); - progress.SetMaximumSteps(cnet.GetNumPoints()); - progress.CheckStatus(); - - for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { - ControlPoint *point = cnet.GetPoint(cp); - if (point->IsIgnored()) { - deletePoint(cnet, cp); - } - else { - for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { - if (point->GetMeasure(cm)->IsIgnored()) { - if (cm == point->IndexOfRefMeasure() && ignoreAll) { - // If the reference is ignored and IgnoreAll is set, the point must ignored too - ignorePoint(cnet, point, "Reference measure ignored"); - } - else { - deleteMeasure(point, cm); - } - } - } - - // Check if the number of measures in the point is zero or there are too - // few measures in the point and we don't want to preserve them. - if (shouldDelete(point)) { - deletePoint(cnet, cp); - } - } - - progress.CheckStatus(); - } - } - - if (ignore) { - if (processPoints) ignorePoints(cnet, *cpList); - if (processCubes) ignoreCubes(cnet, *cubeSnl); - if (processMeasures) ignoreMeasures(cnet, *editMeasures); - - // Perform validity check - if (ui.GetBoolean("CHECKVALID") && cnet.GetNumPoints() > 0) { - validator = NULL; - - // First validate DefFile's keywords and value type - Pvl defFile(ui.GetFileName("DEFFILE")); - Pvl pvlTemplate("$ISISROOT/appdata/templates/cnet_validmeasure/validmeasure.def"); - Pvl pvlResults; - pvlTemplate.validatePvl(defFile, pvlResults); - if (pvlResults.groups() > 0 || pvlResults.keywords() > 0) { - Application::Log(pvlResults.group(0)); - QString sErrMsg = "Invalid Deffile\n"; - throw IException(IException::User, sErrMsg, _FILEINFO_); - } - - // Construct the validator from the user-specified definition file - validator = new ControlNetValidMeasure(&defFile); - - // User also provided a list of all serial numbers corresponding to every - // cube in the control network - QString cubeList = ui.GetFileName("FROMLIST"); - checkAllMeasureValidity(cnet, cubeList); - - // Delete the validator - if (validator != NULL) { - delete validator; - validator = NULL; - } - - // Log the DEFFILE to the print file - Application::Log(defFile.findGroup("ValidMeasure", Pvl::Traverse)); - } - } - - if (ui.GetBoolean("LOCK")) { - if (processPoints) lockPoints(cnet, *cpList); - if (processCubes) lockCubes(cnet, *cubeSnl); - if (processMeasures) lockMeasures(cnet, *editMeasures); - } - - // Log statistics - if (keepLog) { - Pvl outputLog; - - outputLog.addKeyword(PvlKeyword("PointsDeleted", toString(numPointsDeleted))); - outputLog.addKeyword(PvlKeyword("MeasuresDeleted", toString(numMeasuresDeleted))); - - PvlObject lockedLog = createLog( - "EditLocked", editLockedPoints, editLockedMeasures); - outputLog.addObject(lockedLog); - - outputLog.addObject(createLog("RetainedReferences", retainedReferences)); - - // Depending on whether the user chose to delete ignored points and - // measures, the log will either contain reasons for being ignored, or - // reasons for being deleted - PvlObject ignoredLog = createLog( - deleteIgnored ? "Deleted" : "Ignored", ignoredPoints, ignoredMeasures); - outputLog.addObject(ignoredLog); - - // Write the log - QString logFileName = ui.GetFileName("LOG"); - outputLog.write(logFileName); - - // Delete the structures keeping track of the ignored points and measures - delete ignoredPoints; - ignoredPoints = NULL; - - delete ignoredMeasures; - ignoredMeasures = NULL; - - delete retainedReferences; - retainedReferences = NULL; - - delete editLockedPoints; - editLockedPoints = NULL; - - delete editLockedMeasures; - editLockedMeasures = NULL; - } - - delete cpList; - cpList = NULL; - - delete cubeSnl; - cubeSnl = NULL; - - if (editMeasures != NULL) { - QList points = editMeasures->keys(); - for (int i = 0; i < points.size(); i++) delete (*editMeasures)[points[i]]; - delete editMeasures; - editMeasures = NULL; - } - - // Write the network - cnet.Write(ui.GetFileName("ONET")); -} - - -/** - * After any modification to a point's measures or ignored status, this check - * should be performed to determine if the changes should result in the point's - * deletion. - * - * @param point The Control Point recently modified - * - * @return Whether or not the point should be deleted - */ - -bool shouldDelete(ControlPoint *point){ - - if(!deleteIgnored) - return false; - - - else{ - - if ( point->GetNumMeasures() == 0 && !preservePoints) - return true; - - - if (point->GetType() != ControlPoint::Fixed && point->GetNumMeasures()< 2 ){ - - if(preservePoints && point->GetNumMeasures() == 1) - return false; - - return true; //deleteIgnore = TRUE or else we would not be here - } - - - if( point->IsIgnored() ) - return true; - - return false; - - } - - -} - - - - - -/* -bool shouldDelete(ControlPoint *point) { - // If the point only has one measure, then unless it's a fixed point or the - // user wishes to preserve such points, it should be deleted. As a side - // effect, this check will also delete empty points that satisfy this - // condition without having to do the next check - if ((point->GetNumMeasures() < 2 && !preservePoints) && - point->GetType() != ControlPoint::Fixed) - return true; - - // A point without any measures should always be deleted - if (point->GetNumMeasures() == 0) - return true; - - // If the user wants to delete ignored points, and this point is ignored, - // then it follows that it should be deleted - if (point->IsIgnored() && deleteIgnored) - return true; - - // Otherwise, the point looks good - return false; -} -*/ - -/** - * Set the point at the given index in the control network to ignored, and add - * a new keyword to the list of ignored points with a cause for the ignoring, - * if the user wished to keep a log. - * - * @param cnet The Control Network being modified - * @param point The Control Point we wish to ignore - * @param cause A prose description of why the point was ignored (for logging) - */ -void ignorePoint(ControlNet &cnet, ControlPoint *point, QString cause) { - ControlPoint::Status result = point->SetIgnored(true); - - logResult(result == ControlPoint::Success ? ignoredPoints : editLockedPoints, - point->GetId(), cause); -} - - -/** - * Set the measure to be ignored, and add a new keyword to the list of ignored - * measures if the user wished to keep a log. - * - * @param cnet The Control Network being modified - * @param point The Control Point of the Control Measure we wish to ignore - * @param measure The Control Measure we wish to ignore - * @param cause A prose description of why the measure was ignored (for - * logging) - */ -void ignoreMeasure(ControlNet &cnet, ControlPoint *point, - ControlMeasure *measure, QString cause) { - ControlMeasure::Status result = measure->SetIgnored(true); - - logResult( - result == ControlMeasure::Success ? ignoredMeasures : editLockedMeasures, - point->GetId(), measure->GetCubeSerialNumber(), cause); - - if (ignoreAll && measure->Parent()->GetRefMeasure() == measure) { - foreach (ControlMeasure *cm, measure->Parent()->getMeasures()) { - if (!cm->IsIgnored()) - ignoreMeasure(cnet, measure->Parent(), cm, "Reference ignored"); - } - } -} - - -/** - * Delete the point, record how many points and measures have been deleted. - * - * @param cnet The Control Network being modified - * @param cp Index into the Control Network for the point we wish to delete - */ -void deletePoint(ControlNet &cnet, int cp) { - ControlPoint *point = cnet.GetPoint(cp); - - // Do the edit lock check up front so we don't accidentally log that a point - // was deleted when in fact it was not - if (!point->IsEditLocked()) { - numMeasuresDeleted += point->GetNumMeasures(); - numPointsDeleted++; - - if (keepLog) { - // If the point's being deleted but it wasn't set to ignore, it can only - // be because the point has two few measures remaining - if (!point->IsIgnored()) - ignorePoint(cnet, point, "Too few measures"); - - // For any measures not ignored, mark their cause for deletion as being - // caused by the point's deletion - for (int cm = 0; cm < point->GetNumMeasures(); cm++) { - ControlMeasure *measure = point->GetMeasure(cm); - if (!measure->IsIgnored()) - ignoreMeasure(cnet, point, measure, "Point deleted"); - } - } - - cnet.DeletePoint(cp); - } - else { - for (int cm = 0; cm < point->GetNumMeasures(); cm++) { - if (point->GetMeasure(cm)->IsEditLocked()) { - ignorePoint(cnet, point, "EditLocked point skipped"); - } - } - } -} - - -/** - * Delete the measure, increment the count of measures deleted. - * - * @param cnet The Control Network being modified - * @param point The Control Point of the Control Measure we wish to delete - * @param cm Index into the Control Network for the measure we wish to delete - */ -void deleteMeasure(ControlPoint *point, int cm) { - if (point->Delete(cm) == ControlMeasure::Success) numMeasuresDeleted++; -} - - -/** - * Seed the log with points and measures already ignored. - * - * @param cnet The Control Network being modified - */ -void populateLog(ControlNet &cnet, bool ignore) { - ignoredPoints = new QMap; - ignoredMeasures = new QMap; - - retainedReferences = new QMap; - - editLockedPoints = new QMap; - editLockedMeasures = new QMap; - - Progress progress; - progress.SetText("Initializing Log File"); - progress.SetMaximumSteps(cnet.GetNumPoints()); - progress.CheckStatus(); - - for (int cp = 0; cp < cnet.GetNumPoints(); cp++) { - ControlPoint *point = cnet.GetPoint(cp); - - if (point->IsIgnored()) { - ignorePoint(cnet, point, "Ignored from input"); - } - - for (int cm = 0; cm < point->GetNumMeasures(); cm++) { - ControlMeasure *measure = point->GetMeasure(cm); - - if (measure->IsIgnored()) { - if (cm == point->IndexOfRefMeasure() && ignoreAll) { - if (ignore && !point->IsIgnored()) { - ignorePoint(cnet, point, "Reference measure ignored"); - } - } - - ignoreMeasure(cnet, point, measure, "Ignored from input"); - } - } - - progress.CheckStatus(); - } -} - - -void unlockPoints(ControlNet &cnet, ControlPointList &cpList) { - Progress progress; - progress.SetText("Unlocking Points"); - progress.SetMaximumSteps(cnet.GetNumPoints()); - progress.CheckStatus(); - - for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { - ControlPoint *point = cnet.GetPoint(cp); - if (point->IsEditLocked() && cpList.HasControlPoint(point->GetId())) { - point->SetEditLock(false); - } - progress.CheckStatus(); - } -} - - -/** - * Iterates over the points in the Control Network looking for a match in the - * list of Control Points to be ignored. If a match is found, ignore the - * point, and if the DELETE option was selected, the point will then be deleted - * from the network. - * - * @param fileName Name of the file containing the list of Control Points - * @param cnet The Control Network being modified - */ -void ignorePoints(ControlNet &cnet, ControlPointList &cpList) { - Progress progress; - progress.SetText("Comparing Points to POINTLIST"); - progress.SetMaximumSteps(cnet.GetNumPoints()); - progress.CheckStatus(); - - for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { - ControlPoint *point = cnet.GetPoint(cp); - - // Compare each Point Id listed with the Point in the - // Control Network for according exclusion - if (!point->IsIgnored() && cpList.HasControlPoint(point->GetId())) { - ignorePoint(cnet, point, "Point ID in POINTLIST"); - } - - if (deleteIgnored) { - //look for previously ignored control points - if (point->IsIgnored()) { - deletePoint(cnet, cp); - } - else { - //look for previously ignored control measures - for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { - if (point->GetMeasure(cm)->IsIgnored() && deleteIgnored) { - deleteMeasure(point, cm); - } - } - // Check if there are too few measures in the point or the point was - // previously ignored - if (shouldDelete(point)) { - deletePoint(cnet, cp); - } - } - } - - progress.CheckStatus(); - } -} - - -void lockPoints(ControlNet &cnet, ControlPointList &cpList) { - Progress progress; - progress.SetText("Locking Points"); - progress.SetMaximumSteps(cnet.GetNumPoints()); - progress.CheckStatus(); - - for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { - ControlPoint *point = cnet.GetPoint(cp); - if (!point->IsEditLocked() && cpList.HasControlPoint(point->GetId())) { - point->SetEditLock(true); - } - progress.CheckStatus(); - } -} - - -void unlockCubes(ControlNet &cnet, SerialNumberList &snl) { - Progress progress; - progress.SetText("Unlocking Cubes"); - progress.SetMaximumSteps(cnet.GetNumPoints()); - progress.CheckStatus(); - - for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { - ControlPoint *point = cnet.GetPoint(cp); - - for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { - ControlMeasure *measure = point->GetMeasure(cm); - - QString serialNumber = measure->GetCubeSerialNumber(); - if (measure->IsEditLocked() && snl.hasSerialNumber(serialNumber)) { - measure->SetEditLock(false); - } - } - progress.CheckStatus(); - } -} - - -/** - * Iterates over the list of Control Measures in the Control Network and - * compares measure serial numbers with those in the input list of serial - * numbers to be ignored. If a match is found, ignore the measure. If the - * DELETE option was selected, the measure will then be deleted from the - * network. - * - * @param fileName Name of the file containing the list of Serial Numbers to be - * ignored - * @param cnet The Control Network being modified - */ -void ignoreCubes(ControlNet &cnet, SerialNumberList &snl) { - Progress progress; - progress.SetText("Comparing Measures to CUBELIST"); - progress.SetMaximumSteps(cnet.GetNumPoints()); - progress.CheckStatus(); - - for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { - ControlPoint *point = cnet.GetPoint(cp); - - // Compare each Serial Number listed with the serial number in the - // Control Measure for according exclusion - for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { - ControlMeasure *measure = point->GetMeasure(cm); - - if (!point->IsIgnored() && point->GetMeasure(cm)->IsEditLocked()) { - ignoreMeasure(cnet, point, measure, "EditLocked measure skipped"); - } - - QString serialNumber = measure->GetCubeSerialNumber(); - - if (snl.hasSerialNumber(serialNumber)) { - QString cause = "Serial Number in CUBELIST"; - if (cm == point->IndexOfRefMeasure() && retainRef) { - logResult(retainedReferences, point->GetId(), cause); - } - else if (!measure->IsIgnored() || cm == point->IndexOfRefMeasure()) { - ignoreMeasure(cnet, point, measure, cause); - - if (cm == point->IndexOfRefMeasure() && !point->IsIgnored() && ignoreAll) { - ignorePoint(cnet, point, "Reference measure ignored"); - } - } - } - - //also look for previously ignored control measures - if (deleteIgnored && measure->IsIgnored()) { - deleteMeasure(point, cm); - } - } - // Check if there are too few measures in the point or the point was - // previously ignored - if (shouldDelete(point)) { - deletePoint(cnet, cp); - } - - progress.CheckStatus(); - } -} - - -void lockCubes(ControlNet &cnet, SerialNumberList &snl) { - Progress progress; - progress.SetText("Locking Cubes"); - progress.SetMaximumSteps(cnet.GetNumPoints()); - progress.CheckStatus(); - - for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { - ControlPoint *point = cnet.GetPoint(cp); - - for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { - ControlMeasure *measure = point->GetMeasure(cm); - - QString serialNumber = measure->GetCubeSerialNumber(); - if (!measure->IsEditLocked() && snl.hasSerialNumber(serialNumber)) { - measure->SetEditLock(true); - } - } - progress.CheckStatus(); - } -} - - -void unlockMeasures(ControlNet &cnet, - QMap< QString, QSet * > &editMeasures) { - - Progress progress; - progress.SetText("Unlocking Measures"); - progress.SetMaximumSteps(cnet.GetNumPoints()); - progress.CheckStatus(); - - for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { - ControlPoint *point = cnet.GetPoint(cp); - - QString id = point->GetId(); - if (editMeasures.contains(id)) { - QSet *measureSet = editMeasures[id]; - - for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { - ControlMeasure *measure = point->GetMeasure(cm); - - QString serialNumber = measure->GetCubeSerialNumber(); - if (measure->IsEditLocked() && measureSet->contains(serialNumber)) { - measure->SetEditLock(false); - } - } - } - progress.CheckStatus(); - } -} - - -void ignoreMeasures(ControlNet &cnet, - QMap< QString, QSet * > &editMeasures) { - - Progress progress; - progress.SetText("Ignoring Measures"); - progress.SetMaximumSteps(cnet.GetNumPoints()); - progress.CheckStatus(); - - for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { - ControlPoint *point = cnet.GetPoint(cp); - - QString id = point->GetId(); - if (editMeasures.contains(id)) { - QSet *measureSet = editMeasures[id]; - - // Compare each Serial Number listed with the serial number in the - // Control Measure for according exclusion - for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { - ControlMeasure *measure = point->GetMeasure(cm); - - if (!point->IsIgnored() && point->GetMeasure(cm)->IsEditLocked()) { - ignoreMeasure(cnet, point, measure, "EditLocked measure skipped"); - } - - QString serialNumber = measure->GetCubeSerialNumber(); - if (measureSet->contains(serialNumber)) { - QString cause = "Measure in MEASURELIST"; - if (cm == point->IndexOfRefMeasure() && retainRef) { - logResult(retainedReferences, point->GetId(), cause); - } - else if (!measure->IsIgnored() || cm == point->IndexOfRefMeasure()) { - ignoreMeasure(cnet, point, measure, cause); - - if (cm == point->IndexOfRefMeasure() && !point->IsIgnored() && ignoreAll) { - ignorePoint(cnet, point, "Reference measure ignored"); - } - } - } - - //also look for previously ignored control measures - if (deleteIgnored && measure->IsIgnored()) { - deleteMeasure(point, cm); - } - } - // Check if there are too few measures in the point or the point was - // previously ignored - if (shouldDelete(point)) { - deletePoint(cnet, cp); - } - } - - progress.CheckStatus(); - } -} - - -void lockMeasures(ControlNet &cnet, - QMap< QString, QSet * > &editMeasures) { - - Progress progress; - progress.SetText("Locking Measures"); - progress.SetMaximumSteps(cnet.GetNumPoints()); - progress.CheckStatus(); - - for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { - ControlPoint *point = cnet.GetPoint(cp); - - QString id = point->GetId(); - if (editMeasures.contains(id)) { - QSet *measureSet = editMeasures[id]; - - for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { - ControlMeasure *measure = point->GetMeasure(cm); - - QString serialNumber = measure->GetCubeSerialNumber(); - if (!measure->IsEditLocked() && measureSet->contains(serialNumber)) { - measure->SetEditLock(true); - } - } - } - progress.CheckStatus(); - } -} - - -/** - * Compare each measure in the Control Network against tolerances specified in - * the input DEFFILE. Ignore any measure whose values fall outside the valid - * tolerances, and delete it if the user specified to do so. - * - * @param cnet The Control Network being modified - * @param cubeList Name of the file containing the list of all Serial Numbers - * in the network - */ -void checkAllMeasureValidity(ControlNet &cnet, QString cubeList) { - SerialNumberList serialNumbers(cubeList); - - QList cnetSerials = cnet.GetCubeSerials(); - Progress progress; - progress.SetText("Checking Measure Validity"); - progress.SetMaximumSteps(cnetSerials.size()); - progress.CheckStatus(); - - foreach (QString serialNumber, cnetSerials) { - - Cube *cube = NULL; - Camera *camera = NULL; - if (validator->IsCubeRequired()) { - if (!serialNumbers.hasSerialNumber(serialNumber)) { - QString msg = "Serial Number [" + serialNumber + "] contains no "; - msg += "matching cube in FROMLIST"; - throw IException(IException::User, msg, _FILEINFO_); - } - - cube = new Cube; - cube->open(serialNumbers.fileName(serialNumber)); - - if (validator->IsCameraRequired()) { - try { - camera = cube->camera(); - } - catch (IException &e) { - QString msg = "Cannot Create Camera for Image:" + cube->fileName(); - throw IException(e, IException::User, msg, _FILEINFO_); - } - } - } - - QList measures = cnet.GetMeasuresInCube(serialNumber); - for (int cm = 0; cm < measures.size(); cm++) { - ControlMeasure *measure = measures[cm]; - ControlPoint *point = measure->Parent(); - - if (!measure->IsIgnored()) { - MeasureValidationResults results = - validateMeasure(measure, cube, camera); - - if (!results.isValid()) { - QString failure = results.toString(); - QString cause = "Validity Check " + failure; - - if (measure == point->GetRefMeasure() && retainRef) { - logResult(retainedReferences, point->GetId(), cause); - } - else { - ignoreMeasure(cnet, point, measure, cause); - - if (measure == point->GetRefMeasure() && ignoreAll) { - ignorePoint(cnet, point, "Reference measure ignored"); - } - } - } - } - } - - delete cube; - progress.CheckStatus(); - } - - for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { - ControlPoint *point = cnet.GetPoint(cp); - - for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { - ControlMeasure *measure = point->GetMeasure(cm); - - // Also look for previously ignored control measures - if (deleteIgnored && measure->IsIgnored()) { - deleteMeasure(point, cm); - } - } - - // Check if there are too few measures in the point or the point was - // previously ignored - if (shouldDelete(point)) - deletePoint(cnet, cp); - } -} - - -/** - * Test an individual measure against the user-specified tolerances and return - * the result. - * - * @param curMeasure The measure currently being tested - * @param cubeName Name of the cube whose serial number matches that of the - * current measure - * - * @return The results of validating the measure as an object containing the - * validity and a formatted error (or success) message - */ -MeasureValidationResults validateMeasure(const ControlMeasure *measure, - Cube *cube, Camera *camera) { - - MeasureValidationResults results = - validator->ValidStandardOptions(measure, cube, camera); - - return results; -} - - -void logResult(QMap *pointsLog, QString pointId, QString cause) { - if (keepLog) { - // Label the keyword as the Point ID, and make the cause into the value - (*pointsLog)[pointId] = cause; - } -} - - -void logResult(QMap *measuresLog, - QString pointId, QString serial, QString cause) { - - if (keepLog) { - // Make the keyword label the measure Serial Number, and the cause into the - // value - PvlKeyword measureMessage(PvlKeyword(serial, cause)); - - // Using a map to make accessing by Point ID a O(1) to O(lg n) operation - if (measuresLog->contains(pointId)) { - // If the map already has a group for the given Point ID, simply add the - // new measure to it - PvlGroup &pointGroup = (*measuresLog)[pointId]; - pointGroup.addKeyword(measureMessage); - } - else { - // Else there is no group for the Point ID of the measure being ignored, - // so make a new group, add the measure, and insert it into the map - PvlGroup pointGroup(pointId); - pointGroup.addKeyword(measureMessage); - (*measuresLog)[pointId] = pointGroup; - } - } -} - - -PvlObject createLog(QString label, QMap *pointsMap) { - PvlObject pointsLog(label); - - QList pointIds = pointsMap->keys(); - for (int i = 0; i < pointIds.size(); i++) { - QString pointId = pointIds.at(i); - pointsLog.addKeyword(PvlKeyword(pointId, (*pointsMap)[pointId])); - } - - return pointsLog; + Pvl results = cnetedit(ui); } - -PvlObject createLog(QString label, - QMap *pointsMap, QMap *measuresMap) { - - PvlObject editLog(label); - - PvlObject pointsLog = createLog("Points", pointsMap); - editLog.addObject(pointsLog); - - // Get all the groups of measures from the map - PvlObject measuresLog("Measures"); - QList measureGroups = measuresMap->values(); - - for (int i = 0; i < measureGroups.size(); i++) - measuresLog.addGroup(measureGroups.at(i)); - - editLog.addObject(measuresLog); - return editLog; -} - - /** - * Helper function to print out template to session log. - */ + * Helper function to print out template to session log. + */ void PrintTemp() { UserInterface &ui = Application::GetUserInterface(); @@ -1069,12 +50,13 @@ void PrintTemp() { Isis::Application::GuiLog(userTemp); } + /** - * Helper function to be able to edit the Deffile. - * Opens an editor to edit the file. - * - * @author Sharmila Prasad (5/23/2011) - */ + * Helper function to be able to edit the Deffile. + * Opens an editor to edit the file. + * + * @author Sharmila Prasad (5/23/2011) + */ void EditDefFile(void) { UserInterface &ui = Application::GetUserInterface(); QString sDefFile = ui.GetAsString("DEFFILE"); diff --git a/isis/src/control/apps/cnetedit/tsts/Makefile b/isis/src/control/apps/cnetedit/tsts/Makefile deleted file mode 100644 index 322a6262d1..0000000000 --- a/isis/src/control/apps/cnetedit/tsts/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -BLANKS = "%-6s" -LENGTH = "%-40s" - -include $(ISISROOT)/make/isismake.tststree - diff --git a/isis/src/control/apps/cnetedit/tsts/checkValid/Makefile b/isis/src/control/apps/cnetedit/tsts/checkValid/Makefile deleted file mode 100644 index 72ee5aa8c8..0000000000 --- a/isis/src/control/apps/cnetedit/tsts/checkValid/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -APPNAME = cnetedit - -include $(ISISROOT)/make/isismake.tsts - -commands: -# normal test - $(LS) $(INPUT)/*.cub > $(OUTPUT)/list.lis; - $(APPNAME) CNET=$(INPUT)/cnet.net \ - ONET=$(OUTPUT)/cnet.net \ - LOG=$(OUTPUT)/log.txt \ - CHECKVALID=yes \ - FROMLIST=$(OUTPUT)/list.lis \ - DEFFILE=$(INPUT)/deffile.def \ - RETAIN_REFERENCE=yes > /dev/null; - -# test with IGNOREALL=true -# $(LS) $(INPUT)/*.cub > $(OUTPUT)/list.lis; - $(APPNAME) CNET=$(INPUT)/cnet.net \ - ONET=$(OUTPUT)/cnet2.net \ - LOG=$(OUTPUT)/log2.txt \ - CHECKVALID=yes \ - IGNOREALL=true \ - FROMLIST=$(OUTPUT)/list.lis \ - DEFFILE=$(INPUT)/deffile.def > /dev/null; - -# Cleanup - $(RM) $(OUTPUT)/list.lis; diff --git a/isis/src/control/apps/cnetedit/tsts/default/Makefile b/isis/src/control/apps/cnetedit/tsts/default/Makefile deleted file mode 100644 index 39b4d39908..0000000000 --- a/isis/src/control/apps/cnetedit/tsts/default/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -APPNAME = cnetedit - -include $(ISISROOT)/make/isismake.tsts - -commands: - $(APPNAME) CNET=$(INPUT)/cnet.net ONET=$(OUTPUT)/cnet.net > /dev/null; diff --git a/isis/src/control/apps/cnetedit/tsts/editLock/Makefile b/isis/src/control/apps/cnetedit/tsts/editLock/Makefile deleted file mode 100644 index eb0e6f149c..0000000000 --- a/isis/src/control/apps/cnetedit/tsts/editLock/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -APPNAME = cnetedit - -include $(ISISROOT)/make/isismake.tsts - -commands: - $(LS) $(INPUT)/*.cub > $(OUTPUT)/list.lis; - - $(APPNAME) CNET=$(INPUT)/cnet.net \ - LOG=$(OUTPUT)/locked.txt \ - CUBELIST=$(OUTPUT)/list.lis \ - POINTLIST=$(INPUT)/points.lis \ - IGNORE=no DELETE=no LOCK=yes \ - ONET=$(OUTPUT)/locked.net > /dev/null; - - $(APPNAME) CNET=$(INPUT)/cnet.net \ - LOG=$(OUTPUT)/unlocked.txt \ - CUBELIST=$(OUTPUT)/list.lis \ - POINTLIST=$(INPUT)/points.lis \ - UNLOCK=yes IGNORE=no DELETE=no \ - ONET=$(OUTPUT)/unlocked.net > /dev/null; - - $(RM) $(OUTPUT)/list.lis; diff --git a/isis/src/control/apps/cnetedit/tsts/errors/Makefile b/isis/src/control/apps/cnetedit/tsts/errors/Makefile deleted file mode 100644 index a2630fbc54..0000000000 --- a/isis/src/control/apps/cnetedit/tsts/errors/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -APPNAME = cnetedit - -include $(ISISROOT)/make/isismake.tsts - -commands: -# Test with a non-existant file - echo -e "Error Test: Non-existant file" > $(OUTPUT)/error_temp.txt; - if [[ `$(APPNAME) CNET=$(INPUT)/cnet.net \ - ONET=$(OUTPUT)/cnet.net \ - 2>> $(OUTPUT)/error_temp.txt \ - > /dev/null` ]]; \ - then \ - true; \ - fi; - - $(SED) 's+\[/.*/input/+\[input/+' $(OUTPUT)/error_temp.txt > $(OUTPUT)/error.txt; - -# Cleanup - $(RM) $(OUTPUT)/error_temp.txt; diff --git a/isis/src/control/apps/cnetedit/tsts/ignore/Makefile b/isis/src/control/apps/cnetedit/tsts/ignore/Makefile deleted file mode 100644 index c7f763dc8f..0000000000 --- a/isis/src/control/apps/cnetedit/tsts/ignore/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -APPNAME = cnetedit - -include $(ISISROOT)/make/isismake.tsts - -commands: - $(LS) $(INPUT)/*.cub > $(OUTPUT)/list.lis; - $(CAT) $(INPUT)/measurelist.txt | sed 's#X#$(INPUT)#' \ - > $(OUTPUT)/measurelist.txt; - $(APPNAME) CNET=$(INPUT)/cnet.net \ - CUBELIST=$(OUTPUT)/list.lis \ - MEASURELIST=$(OUTPUT)/measurelist.txt \ - ONET=$(OUTPUT)/cnet.net DELETE=no \ - IGNOREALL=yes \ - log=$(OUTPUT)/log.txt > /dev/null; - $(RM) $(OUTPUT)/list.lis $(OUTPUT)/measurelist.txt; diff --git a/isis/src/control/apps/cnetedit/tsts/ignoreMeasuresPoints/Makefile b/isis/src/control/apps/cnetedit/tsts/ignoreMeasuresPoints/Makefile deleted file mode 100644 index d8fd565c07..0000000000 --- a/isis/src/control/apps/cnetedit/tsts/ignoreMeasuresPoints/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -APPNAME = cnetedit - -include $(ISISROOT)/make/isismake.tsts - -commands: - $(LS) $(INPUT)/*.cub > $(OUTPUT)/list.lis; - $(APPNAME) CNET=$(INPUT)/cnet.net \ - LOG=$(OUTPUT)/log.txt \ - CUBELIST=$(OUTPUT)/list.lis \ - POINTLIST=$(INPUT)/points.lis \ - ONET=$(OUTPUT)/cnet.net > /dev/null; - $(RM) $(OUTPUT)/list.lis; diff --git a/isis/src/control/apps/cnetedit/tsts/ignorePoints/Makefile b/isis/src/control/apps/cnetedit/tsts/ignorePoints/Makefile deleted file mode 100644 index 77cc4386f2..0000000000 --- a/isis/src/control/apps/cnetedit/tsts/ignorePoints/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -APPNAME = cnetedit - -include $(ISISROOT)/make/isismake.tsts - -commands: -# original test - $(APPNAME) CNET=$(INPUT)/cnet.net \ - POINTLIST=$(INPUT)/points.lis \ - ONET=$(OUTPUT)/cnet.net > /dev/null; - -# test IGNOREALL=true with ignored input measures / points - $(APPNAME) CNET=$(INPUT)/cnet.net \ - POINTLIST=$(INPUT)/points.lis \ - IGNOREALL = true \ - ONET=$(OUTPUT)/cnet2.net > /dev/null; diff --git a/isis/src/control/apps/cnetedit/tsts/measurelist/Makefile b/isis/src/control/apps/cnetedit/tsts/measurelist/Makefile deleted file mode 100644 index 8dc1357221..0000000000 --- a/isis/src/control/apps/cnetedit/tsts/measurelist/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -APPNAME = cnetedit - -include $(ISISROOT)/make/isismake.tsts - -commands: - -# general test - $(CAT) $(INPUT)/bad_measures.lis | $(SED) "s#,#,$(INPUT)/#" \ - > $(OUTPUT)/list.lis; - - $(APPNAME) CNET=$(INPUT)/cnet.net \ - LOG=$(OUTPUT)/log.txt \ - MEASURELIST=$(OUTPUT)/list.lis \ - DELETE=no \ - ONET=$(OUTPUT)/cnet.net > /dev/null; - -# test with IGNOREALL = true, DELETE=no measure that is a reference for a non-ignored point - $(CAT) $(INPUT)/bad_measures2.lis | $(SED) "s#,#,$(INPUT)/#" \ - > $(OUTPUT)/list2.lis; - - $(APPNAME) CNET=$(INPUT)/cnet.net \ - LOG=$(OUTPUT)/log2.txt \ - MEASURELIST=$(OUTPUT)/list2.lis \ - IGNOREALL=true \ - DELETE=no \ - ONET=$(OUTPUT)/cnet2.net > /dev/null; - -# test with DELETE=yes - $(CAT) $(INPUT)/bad_measures.lis | $(SED) "s#,#,$(INPUT)/#" \ - > $(OUTPUT)/list.lis; - - $(APPNAME) CNET=$(INPUT)/cnet.net \ - LOG=$(OUTPUT)/log3.txt \ - MEASURELIST=$(OUTPUT)/list.lis \ - ONET=$(OUTPUT)/cnet3.net > /dev/null; - -# Cleanup - $(RM) $(OUTPUT)/list.lis; - $(RM) $(OUTPUT)/list2.lis; diff --git a/isis/src/control/apps/cnetedit/tsts/noDelete/Makefile b/isis/src/control/apps/cnetedit/tsts/noDelete/Makefile deleted file mode 100644 index 93096a1e09..0000000000 --- a/isis/src/control/apps/cnetedit/tsts/noDelete/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -APPNAME = cnetedit - -include $(ISISROOT)/make/isismake.tsts - -commands: - $(LS) $(INPUT)/*.cub > $(OUTPUT)/list.lis; - $(APPNAME) CNET=$(INPUT)/cnet.net \ - LOG=$(OUTPUT)/log.txt \ - CUBELIST=$(OUTPUT)/list.lis \ - POINTLIST=$(INPUT)/points.lis \ - DELETE = false \ - ONET=$(OUTPUT)/cnet2.net > /dev/null; - $(RM) $(OUTPUT)/list.lis; diff --git a/isis/src/control/apps/cnetedit/tsts/preservePoints/Makefile b/isis/src/control/apps/cnetedit/tsts/preservePoints/Makefile deleted file mode 100644 index 779e410259..0000000000 --- a/isis/src/control/apps/cnetedit/tsts/preservePoints/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -APPNAME = cnetedit - -include $(ISISROOT)/make/isismake.tsts - -commands: - $(LS) $(INPUT)/*.cub > $(OUTPUT)/list.lis; - $(APPNAME) CNET=$(INPUT)/cnet.net \ - LOG=$(OUTPUT)/log.txt \ - CUBELIST=$(OUTPUT)/list.lis \ - POINTLIST=$(INPUT)/points.lis \ - DELETE = true \ - PRESERVE = true \ - ONET=$(OUTPUT)/cnet2.net > /dev/null; - $(RM) $(OUTPUT)/list.lis; diff --git a/isis/tests/FunctionalTestsCnetedit.cpp b/isis/tests/FunctionalTestsCnetedit.cpp new file mode 100644 index 0000000000..a7cca587e7 --- /dev/null +++ b/isis/tests/FunctionalTestsCnetedit.cpp @@ -0,0 +1,2943 @@ +#include +#include +#include + +#include "cnetedit.h" +#include "ControlMeasure.h" +#include "ControlNet.h" +#include "ControlPoint.h" +#include "FileList.h" +#include "Progress.h" +#include "Pvl.h" +#include "PvlGroup.h" +#include "PvlObject.h" +#include "LineManager.h" +#include "spiceinit.h" +#include "TempFixtures.h" +#include "TestUtilities.h" + +#include "gtest/gtest.h" + +using namespace Isis; + +static QString APP_XML = FileName("$ISISROOT/bin/xml/cnetedit.xml").expanded(); + +class CneteditCheckValid : public TempTestingFiles { + protected: + QString cnet11File; + QString chkValidCubeListFile; + QString defFile; + + void SetUp() override { + TempTestingFiles::SetUp(); + + chkValidCubeListFile = tempDir.path() + "/chkValidCubeList.lis"; + cnet11File = "data/cnetedit/cnet_11pts.pvl"; + defFile = tempDir.path() + "/defFile.def"; + + std::ifstream label1Strm("data/cnetedit/PSP_002733_1880_RED4.crop.pvl"); + std::ifstream label2Strm("data/cnetedit/PSP_002733_1880_RED5.crop.pvl"); + + Pvl label1; + Pvl label2; + + label1Strm >> label1; + label2Strm >> label2; + + Cube cube1; + Cube cube2; + + cube1.fromLabel(tempDir.path() + "/PSP_002733_1880_RED4.crop.cub", + label1, "rw"); + cube2.fromLabel(tempDir.path() + "/PSP_002733_1880_RED5.crop.cub", + label2, "rw"); + + LineManager line(cube1); + LineManager line2(cube2); + + for(line.begin(); !line.end(); line++) { + for(int i = 0; i < line.size(); i++) { + line[i] = (double)(i+1); + } + cube1.write(line); + } + for(line2.begin(); !line2.end(); line2++) { + for(int i = 0; i < line2.size(); i++) { + line2[i] = (double)(i+1); + } + cube2.write(line2); + } + cube1.reopen("rw"); + cube2.reopen("rw"); + + // set up cube list for checkValid tests + FileList chkValidCubeList; + chkValidCubeList.append(cube1.fileName()); + chkValidCubeList.append(cube2.fileName()); + chkValidCubeList.write(chkValidCubeListFile); + + // set up pvl def file + PvlGroup validMeasureGroup("ValidMeasure"); + validMeasureGroup.addKeyword(PvlKeyword("MinDN", "-1000000")); + validMeasureGroup.addKeyword(PvlKeyword("MaxDN", "1000000")); + validMeasureGroup.addKeyword(PvlKeyword("MinEmission", "0")); + validMeasureGroup.addKeyword(PvlKeyword("MaxEmission", "135")); + validMeasureGroup.addKeyword(PvlKeyword("MinIncidence", "0")); + validMeasureGroup.addKeyword(PvlKeyword("MaxIncidence", "135")); + validMeasureGroup.addKeyword(PvlKeyword("MinResolution", "0")); + validMeasureGroup.addKeyword(PvlKeyword("MaxResolution", "1000")); + validMeasureGroup.addKeyword(PvlKeyword("PixelsFromEdge", "5")); + validMeasureGroup.addKeyword(PvlKeyword("SampleResidual", "5")); + validMeasureGroup.addKeyword(PvlKeyword("LineResidual", "5")); + validMeasureGroup.addKeyword(PvlKeyword("SampleShift", "3")); + validMeasureGroup.addKeyword(PvlKeyword("LineShift", "5")); + Pvl p; + p.addGroup(validMeasureGroup); + p.write(defFile); + } +}; + +class CneteditMeasureList : public TempTestingFiles { + protected: + QString cnet35File; + QString badMeasureListFile1; + QString badMeasureListFile2; + + void SetUp() override { + TempTestingFiles::SetUp(); + + cnet35File = "data/cnetedit/cnet_35pts.pvl"; + badMeasureListFile1 = tempDir.path() + "badMeasureList1.lis"; + badMeasureListFile2 = tempDir.path() + "badMeasureList2.lis"; + + // setup badMeasureLists with pvl label files + FileList badMeasureList1; + badMeasureList1.append("I24827003RDR_bndry_32,data/cnetedit/I10101002RDR.dstr.cub.label.pvl"); + badMeasureList1.append("I24827003RDR_bndry_32,data/cnetedit/I10413004RDR.dstr.cub.label.pvl"); + badMeasureList1.append("I24827003RDR_bndry_35,data/cnetedit/I07873009RDR.dstr.cub.label.pvl"); + badMeasureList1.append("I24827003RDR_bndry_35,data/cnetedit/I23604003RDR.dstr.cub.label.pvl"); + badMeasureList1.append("I24827003RDR_bndry_35,data/cnetedit/I24827003RDR.dstr.cub.label.pvl"); + badMeasureList1.append("I24827003RDR_bndry_36,data/cnetedit/I07873009RDR.dstr.cub.label.pvl"); + badMeasureList1.append("I24827003RDR_bndry_36,data/cnetedit/I24827003RDR.dstr.cub.label.pvl"); + badMeasureList1.append("I24827003RDR_bndry_50,data/cnetedit/I24827003RDR.dstr.cub.label.pvl"); + badMeasureList1.append("I24827003RDR_bndry_53,data/cnetedit/I24827003RDR.dstr.cub.label.pvl"); + badMeasureList1.append("I24827003RDR_bndry_56,data/cnetedit/I24827003RDR.dstr.cub.label.pvl"); + badMeasureList1.append("I24827003RDR_bndry_8,data/cnetedit/I07873009RDR.dstr.cub.label.pvl"); + badMeasureList1.write(badMeasureListFile1); + + FileList badMeasureList2(badMeasureList1); + badMeasureList2.append("I24827003RDR_bndry_11,data/cnetedit/I24827003RDR.dstr.cub.label.pvl"); + badMeasureList2.write(badMeasureListFile2); + } +}; + + +class Cnetedit : public TempTestingFiles { + protected: + QString cnet108File; + QString pointListFile; + QString cubeListFile; + QString measureListFile; + + void SetUp() override { + TempTestingFiles::SetUp(); + + cnet108File = "data/cnetedit/cnet_108pts.pvl"; + pointListFile = tempDir.path() + "/pointList.lis"; + cubeListFile = tempDir.path() + "/cubeList.lis"; + measureListFile = tempDir.path() + "measureList.lis"; + + // set up cube list + FileList cubeList; + cubeList.append("data/cnetedit/e0902065.cal.sub.cub"); + cubeList.write(cubeListFile); + + // set up measureList + FileList measureList; + measureList.append("new0001,data/cnetedit/e0902065.cal.sub.cub"); + measureList.write(measureListFile); + + // set up point list + FileList pointList; + pointList.append("new0007"); + pointList.append("new0050"); + pointList.append("new0001"); + pointList.append("new0036"); + pointList.append("new0020"); + pointList.append("new0008"); + pointList.write(pointListFile); + } +}; + + +/** + * FunctionalTestCneteditCheckValid + * + * Cnetedit test of check valid functionality. + * Input ... + * 1) ControlNet with 11 points (data/cnetedit/cnet_11pts.pvl) + * 2) two image cube list file (data/cnetedit/PSP_002733_1880_RED4.crop.cub; + * data/cnetedit/PSP_002733_1880_RED5.crop.cub) + * 3) def file + * 4) CHECKVALID = yes + * 5) RETAIN_REFERENCE=yes + * + * Output ... + * 1) edited ControlNet + * 2) Pvl log file. + */ +TEST_F(CneteditCheckValid, FunctionalTestCneteditCheckValid) { + QTemporaryDir tempDir; + + QVector args = {"cnet=" + cnet11File, + "log=" + tempDir.path() + "/log.txt", + "checkvalid=yes", + "fromlist=" + chkValidCubeListFile, + "retain_reference=yes", + "deffile=" + defFile, + "onet=" + tempDir.path() + "/out.net" + }; + + UserInterface ui(APP_XML, args); + + Pvl cneteditLog; + + try { + cneteditLog = cnetedit(ui); + } + catch(IException &e) { + FAIL() << e.toString().toStdString().c_str() << std::endl; + } + + // read back log file + Pvl log; + try { + log.read(tempDir.path()+ "/log.txt"); + } + catch (IException &e) { + FAIL() << "Unable to open log file: " << e.what() << std::endl; + } + + // check number of deleted points and measures + EXPECT_EQ((int)log.findKeyword("PointsDeleted"), 4); + EXPECT_EQ((int)log.findKeyword("MeasuresDeleted"), 8); + + // no edit locked points or measures + EXPECT_EQ(log.findObject("EditLocked").findObject("Points").keywords(), 0); + EXPECT_EQ(log.findObject("EditLocked").findObject("Measures").keywords(), 0); + + // check retained references + PvlObject retainedRefs = log.findObject("RetainedReferences"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, retainedRefs.findKeyword("pointregTest0001"), + "Validity Check failed: Sample Residual is greater than" + " tolerance 5"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, retainedRefs.findKeyword("pointregTest0007"), + "Validity Check failed: Sample Residual is greater than" + " tolerance 5"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, retainedRefs.findKeyword("pointregTest0008"), + "Validity Check failed: Pixels From Edge is less than" + " tolerance 5"); + + // check deleted points + PvlObject deletedPoints = log.findObject("Deleted").findObject("Points"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("pointregTest0002"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("pointregTest0003"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("pointregTest0004"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("pointregTest0011"), + "Too few measures"); + + // check deleted measures + PvlObject deletedMeasures = log.findObject("Deleted").findObject("Measures"); + PvlGroup pointregTest0002 = deletedMeasures.findGroup("pointregTest0002"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0002. + findKeyword("MRO/HIRISE/856864216:41044/RED4/2"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0002. + findKeyword("MRO/HIRISE/856864216:41044/RED5/2"), + "Point deleted"); + PvlGroup pointregTest0003 = deletedMeasures.findGroup("pointregTest0003"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0003. + findKeyword("MRO/HIRISE/856864216:41044/RED5/2"), + "Validity Check failed: Pixels From Edge is less than" + " tolerance 5 Line Residual is greater than tolerance 5"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0003. + findKeyword("MRO/HIRISE/856864216:41044/RED4/2"), + "Point deleted"); + PvlGroup pointregTest0004 = deletedMeasures.findGroup("pointregTest0004"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0004. + findKeyword("MRO/HIRISE/856864216:41044/RED4/2"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0004. + findKeyword("MRO/HIRISE/856864216:41044/RED5/2"), + "Point deleted"); + PvlGroup pointregTest0011 = deletedMeasures.findGroup("pointregTest0011"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0011. + findKeyword("MRO/HIRISE/856864216:41044/RED5/2"), + "Validity Check failed: Pixels From Edge is less than" + " tolerance 5"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0011. + findKeyword("MRO/HIRISE/856864216:41044/RED4/2"), + "Point deleted"); + + // check output ControlNetwork + ControlNet outNet(tempDir.path() + "/out.net"); + EXPECT_EQ(outNet.GetNumPoints(), 7); + EXPECT_EQ(outNet.GetNumValidPoints(), 7); + EXPECT_EQ(outNet.GetNumEditLockPoints(), 0); + EXPECT_EQ(outNet.GetNumMeasures(), 14); + EXPECT_EQ(outNet.GetNumIgnoredMeasures(), 0); + EXPECT_EQ(outNet.GetNumEditLockMeasures(), 0); +} + + +/** + * FunctionalTestCneteditCheckValidIgnoreAll + * + * Cnetedit test of check valid functionality with IGNOREALL=YES. + * Input ... + * 1) ControlNet with 11 points (data/cnetedit/cnet_11pts.pvl) + * 2) two image cube list file (data/cnetedit/PSP_002733_1880_RED4.crop.cub; + * data/cnetedit/PSP_002733_1880_RED5.crop.cub) + * 3) def file + * 4) CHECKVALID = yes + * 5) IGNOREALL=yes + * + * Output ... + * 1) edited ControlNet + * 2) Pvl log file. + */ +TEST_F(CneteditCheckValid, FunctionalTestCneteditCheckValidIgnoreAll) { + QTemporaryDir tempDir; + + QVector args = {"cnet=" + cnet11File, + "log=" + tempDir.path() + "/log.txt", + "checkvalid=yes", + "ignoreall=yes", + "fromlist=" + chkValidCubeListFile, + "deffile=" + defFile, + "onet=" + tempDir.path() + "/out.net" + }; + + UserInterface ui(APP_XML, args); + + Pvl cneteditLog; + + try { + cneteditLog = cnetedit(ui); + } + catch(IException &e) { + FAIL() << e.toString().toStdString().c_str() << std::endl; + } + + // read back log file + Pvl log; + try { + log.read(tempDir.path()+ "/log.txt"); + } + catch (IException &e) { + FAIL() << "Unable to open log file: " << e.what() << std::endl; + } + + // check number of deleted points and measures + EXPECT_EQ((int)log.findKeyword("PointsDeleted"), 7); + EXPECT_EQ((int)log.findKeyword("MeasuresDeleted"), 14); + + // no edit locked points or measures + EXPECT_EQ(log.findObject("EditLocked").findObject("Points").keywords(), 0); + EXPECT_EQ(log.findObject("EditLocked").findObject("Measures").keywords(), 0); + + // no retained references + EXPECT_EQ(log.findObject("RetainedReferences").keywords(), 0); + + // check deleted points + PvlObject deletedPoints = log.findObject("Deleted").findObject("Points"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("pointregTest0001"), + "Reference measure ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("pointregTest0002"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("pointregTest0003"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("pointregTest0004"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("pointregTest0007"), + "Reference measure ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("pointregTest0008"), + "Reference measure ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("pointregTest0011"), + "Too few measures"); + + // check deleted measures + PvlObject deletedMeasures = log.findObject("Deleted").findObject("Measures"); + PvlGroup pointregTest0001 = deletedMeasures.findGroup("pointregTest0001"); + + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0001. + findKeyword("MRO/HIRISE/856864216:41044/RED4/2"), + "Validity Check failed: Sample Residual is greater than " + "tolerance 5"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0001. + findKeyword("MRO/HIRISE/856864216:41044/RED5/2"), + "Reference ignored"); + PvlGroup pointregTest0002 = deletedMeasures.findGroup("pointregTest0002"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0002. + findKeyword("MRO/HIRISE/856864216:41044/RED4/2"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0002. + findKeyword("MRO/HIRISE/856864216:41044/RED5/2"), + "Reference ignored"); + PvlGroup pointregTest0003 = deletedMeasures.findGroup("pointregTest0003"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0003. + findKeyword("MRO/HIRISE/856864216:41044/RED5/2"), + "Validity Check failed: Pixels From Edge is less than" + " tolerance 5 Line Residual is greater than tolerance 5"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0003. + findKeyword("MRO/HIRISE/856864216:41044/RED4/2"), + "Point deleted"); + PvlGroup pointregTest0004 = deletedMeasures.findGroup("pointregTest0004"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0004. + findKeyword("MRO/HIRISE/856864216:41044/RED4/2"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0004. + findKeyword("MRO/HIRISE/856864216:41044/RED5/2"), + "Reference ignored"); + PvlGroup pointregTest0007 = deletedMeasures.findGroup("pointregTest0007"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0007. + findKeyword("MRO/HIRISE/856864216:41044/RED4/2"), + "Validity Check failed: Sample Residual is greater than " + "tolerance 5"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0007. + findKeyword("MRO/HIRISE/856864216:41044/RED5/2"), + "Reference ignored"); + PvlGroup pointregTest0008 = deletedMeasures.findGroup("pointregTest0008"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0008. + findKeyword("MRO/HIRISE/856864216:41044/RED4/2"), + "Validity Check failed: Pixels From Edge is less than " + "tolerance 5"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0008. + findKeyword("MRO/HIRISE/856864216:41044/RED5/2"), + "Reference ignored"); + PvlGroup pointregTest0011 = deletedMeasures.findGroup("pointregTest0011"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0011. + findKeyword("MRO/HIRISE/856864216:41044/RED5/2"), + "Validity Check failed: Pixels From Edge is less than" + " tolerance 5"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0011. + findKeyword("MRO/HIRISE/856864216:41044/RED4/2"), + "Point deleted"); + + // check output ControlNetwork + ControlNet outNet(tempDir.path() + "/out.net"); + EXPECT_EQ(outNet.GetNumPoints(), 4); + EXPECT_EQ(outNet.GetNumValidPoints(), 4); + EXPECT_EQ(outNet.GetNumEditLockPoints(), 0); + EXPECT_EQ(outNet.GetNumMeasures(), 8); + EXPECT_EQ(outNet.GetNumIgnoredMeasures(), 0); + EXPECT_EQ(outNet.GetNumEditLockMeasures(), 0); +} + + +/** + * CneteditDefault + * + * Input ... + * 1) ControlNet with 108 points (data/cnetedit/cnet_108pts.pvl) + * + * Output ... + * 1) edited ControlNet + * 2) Pvl log file. + */ +TEST_F(Cnetedit, FunctionalTestCneteditDefault) { + QTemporaryDir tempDir; + + QVector args = {"cnet=" + cnet108File, + "log=" + tempDir.path() + "/log.txt", + "onet=" + tempDir.path() + "/out.net" + }; + + UserInterface ui(APP_XML, args); + + Pvl cneteditLog; + + try { + cneteditLog = cnetedit(ui); + } + catch(IException &e) { + FAIL() << e.toString().toStdString().c_str() << std::endl; + } + + // read back log file + Pvl log; + try { + log.read(tempDir.path()+ "/log.txt"); + } + catch (IException &e) { + FAIL() << "Unable to open log file: " << e.what() << std::endl; + } + + // check number of deleted points and measures + EXPECT_EQ((int)log.findKeyword("PointsDeleted"), 8); + EXPECT_EQ((int)log.findKeyword("MeasuresDeleted"), 21); + + // no edit locked points or measures + EXPECT_EQ(log.findObject("EditLocked").findObject("Points").keywords(), 0); + EXPECT_EQ(log.findObject("EditLocked").findObject("Measures").keywords(), 0); + + // no retained references + EXPECT_EQ(log.findObject("RetainedReferences").keywords(), 0); + + // check deleted points + PvlObject deletedPoints = log.findObject("Deleted").findObject("Points"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0031"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0032"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0038"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0039"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0064"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0065"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0067"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0068"), + "Ignored from input"); + + // check deleted measures + PvlObject deletedMeasures = log.findObject("Deleted").findObject("Measures"); + PvlGroup new0031 = deletedMeasures.findGroup("new0031"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0031. + findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0031. + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0032 = deletedMeasures.findGroup("new0032"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0032. + findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0032. + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0038 = deletedMeasures.findGroup("new0038"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0038. + findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0038. + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0039 = deletedMeasures.findGroup("new0039"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0039. + findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0039. + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0064 = deletedMeasures.findGroup("new0064"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0064. + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0064. + findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0064. + findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0065 = deletedMeasures.findGroup("new0065"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0065. + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0065. + findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0065. + findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0066"). + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0067 = deletedMeasures.findGroup("new0067"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0067. + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0067. + findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0067. + findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0068 = deletedMeasures.findGroup("new0068"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0068. + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0068. + findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0068. + findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + + // check output ControlNetwork + ControlNet outNet(tempDir.path() + "/out.net"); + EXPECT_EQ(outNet.GetNumPoints(), 100); + EXPECT_EQ(outNet.GetNumValidPoints(), 100); + EXPECT_EQ(outNet.GetNumEditLockPoints(), 0); + EXPECT_EQ(outNet.GetNumMeasures(), 240); + EXPECT_EQ(outNet.GetNumIgnoredMeasures(), 0); + EXPECT_EQ(outNet.GetNumEditLockMeasures(), 0); +} + + +/** + * CneteditEditlock + * + * Cnetedit test of edit lock functionality. + * Input ... + * 1) ControlNet with 108 points (data/cnetedit/cnet_108pts.pvl) + * 2) one image cube list file (data/cnetedit/e0902065.cal.sub.cub) + * 3) points list file + * 4) ignore=no + * 5) delete=no + * 6) lock=yes + * + * Output ... + * 1) edited ControlNet + * 2) Pvl log file. + */ +TEST_F(Cnetedit, FunctionalTestCneteditEditlock) { + QTemporaryDir tempDir; + + QVector args = {"cnet=" + cnet108File, + "log=" + tempDir.path() + "/log.txt", + "cubelist=" + cubeListFile, + "pointlist=" + pointListFile, + "ignore=no", + "delete=no", + "lock=yes", + "onet=" + tempDir.path() + "/out.net" + }; + + UserInterface ui(APP_XML, args); + + Pvl cneteditLog; + + try { + cneteditLog = cnetedit(ui); + } + catch(IException &e) { + FAIL() << e.toString().toStdString().c_str() << std::endl; + } + + // read back log file + Pvl log; + try { + log.read(tempDir.path()+ "/log.txt"); + } + catch (IException &e) { + FAIL() << "Unable to open log file: " << e.what() << std::endl; + } + + // check number of deleted points and measures + EXPECT_EQ((int)log.findKeyword("PointsDeleted"), 0); + EXPECT_EQ((int)log.findKeyword("MeasuresDeleted"), 0); + + // no edit locked points or measures + EXPECT_EQ(log.findObject("EditLocked").findObject("Points").keywords(), 0); + EXPECT_EQ(log.findObject("EditLocked").findObject("Measures").groups(), 0); + + // no retained references + EXPECT_EQ(log.findObject("RetainedReferences").keywords(), 0); + + // check deleted points + PvlObject ignoredPoints = log.findObject("Ignored").findObject("Points"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0031"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0032"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0064"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0065"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0068"), + "Ignored from input"); + + // check ignored measures + PvlObject ignoredMeasures = log.findObject("Ignored").findObject("Measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0038"). + findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0039 = ignoredMeasures.findGroup("new0039"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0039. + findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0039. + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0065"). + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0066"). + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0067 = ignoredMeasures.findGroup("new0067"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0067. + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0067. + findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0068 = ignoredMeasures.findGroup("new0068"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0068. + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0068. + findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0068. + findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + + // check output ControlNetwork + ControlNet outNet(tempDir.path() + "/out.net"); + EXPECT_EQ(outNet.GetNumPoints(), 108); + EXPECT_EQ(outNet.GetNumValidPoints(), 103); + EXPECT_EQ(outNet.GetNumEditLockPoints(), 6); //should be 6 + EXPECT_EQ(outNet.GetNumMeasures(), 261); + EXPECT_EQ(outNet.GetNumIgnoredMeasures(), 10); + EXPECT_EQ(outNet.GetNumEditLockMeasures(), 52); +} + + +/** + * CneteditEditUnlock + * + * Cnetedit test of edit lock functionality with unlock=yes. + * Input ... + * 1) ControlNet with 108 points (data/cnetedit/cnet_108pts.pvl) + * 2) one image cube list file (data/cnetedit/e0902065.cal.sub.cub) + * 3) points list file + * 4) ignore=no + * 5) delete=no + * 6) unlock=yes + * + * Output ... + * 1) edited ControlNet + * 2) Pvl log file. + */ +TEST_F(Cnetedit, FunctionalTestCneteditEditUnlock) { + QTemporaryDir tempDir; + + QVector args = {"cnet=" + cnet108File, + "log=" + tempDir.path() + "/log.txt", + "cubelist=" + cubeListFile, + "pointlist=" + pointListFile, + "ignore=no", + "delete=no", + "unlock=yes", + "onet=" + tempDir.path() + "/out.net" + }; + + UserInterface ui(APP_XML, args); + + Pvl cneteditLog; + + try { + cneteditLog = cnetedit(ui); + } + catch(IException &e) { + FAIL() << e.toString().toStdString().c_str() << std::endl; + } + + // read back log file + Pvl log; + try { + log.read(tempDir.path()+ "/log.txt"); + } + catch (IException &e) { + FAIL() << "Unable to open log file: " << e.what() << std::endl; + } + + // check number of deleted points and measures + EXPECT_EQ((int)log.findKeyword("PointsDeleted"), 0); + EXPECT_EQ((int)log.findKeyword("MeasuresDeleted"), 0); + + // no edit locked points or measures + EXPECT_EQ(log.findObject("EditLocked").findObject("Points").keywords(), 0); + EXPECT_EQ(log.findObject("EditLocked").findObject("Measures").keywords(), 0); + + // no retained references + EXPECT_EQ(log.findObject("RetainedReferences").keywords(), 0); + + // check deleted points + PvlObject ignoredPoints = log.findObject("Ignored").findObject("Points"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0031"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0032"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0064"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0065"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0068"), + "Ignored from input"); + + // check ignored measures + PvlObject ignoredMeasures = log.findObject("Ignored").findObject("Measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0038"). + findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0039 = ignoredMeasures.findGroup("new0039"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0039. + findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0039. + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0065"). + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0066"). + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0067 = ignoredMeasures.findGroup("new0067"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0067. + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0067. + findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0068 = ignoredMeasures.findGroup("new0068"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0068. + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0068. + findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0068. + findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + + // check output ControlNetwork + ControlNet outNet(tempDir.path() + "/out.net"); + EXPECT_EQ(outNet.GetNumPoints(), 108); + EXPECT_EQ(outNet.GetNumValidPoints(), 103); + EXPECT_EQ(outNet.GetNumEditLockPoints(), 0); + EXPECT_EQ(outNet.GetNumMeasures(), 261); + EXPECT_EQ(outNet.GetNumIgnoredMeasures(), 10); + EXPECT_EQ(outNet.GetNumEditLockMeasures(), 0); +} + + +/** + * CneteditError + * + * Cnetedit test given a nonexistant input ControlNet. + */ +TEST_F(Cnetedit, FunctionalTestCneteditError) { + + QVector args = {"cnet=cnet.net", + "onet=cnet.net", + }; + + UserInterface ui(APP_XML, args); + + Pvl log; + + try { + log = cnetedit(ui); + FAIL() << "Expected Exception for an invalid control network"; + } + catch(IException &e) { + EXPECT_TRUE(e.toString().toLatin1().contains("Invalid control network")) + << e.toString().toStdString(); + } +} + + +/** + * CneteditIgnore + * + * Cnetedit test with IGNOREALL=YES + * Input ... + * 1) ControlNet with 108 points (data/cnetedit/cnet_108pts.pvl) + * 2) one image cube list file (data/cnetedit/e0902065.cal.sub.cub) + * 3) measure list file (new0001,data/cnetedit/e0902065.cal.sub.cub) + * 4) delete=no + * 5) ignoreall=yes + * + * Output ... + * 1) edited ControlNet + * 2) Pvl log file. + */ +TEST_F(Cnetedit, CneteditIgnore) { + QTemporaryDir tempDir; + + QVector args = {"cnet=" + cnet108File, + "cubelist=" + cubeListFile, + "measurelist=" + measureListFile, + "onet=" + tempDir.path() + "/out.net", +// "onet=/Users/kledmundson/ISISDev/cnetedit/Oct242023cne/ISIS3/isis/tests/data/cnetedit/ignore/truth/gtestCnet1.net", + "delete=no", + "ignoreall=yes", + "log=" + tempDir.path() + "/log.txt" +// "log=/Users/kledmundson/ISISDev/cnetedit/Oct242023cne/ISIS3/isis/tests/data/cnetedit/ignore/truth/gtestLog1.txt", + }; + + UserInterface ui(APP_XML, args); + + Pvl cneteditlog; + + try { + cneteditlog = cnetedit(ui); + } + catch(IException &e) { + FAIL() << e.toString().toStdString().c_str() << std::endl; + } + + // read back log file + Pvl log; + try { + log.read(tempDir.path()+ "/log.txt"); + } + catch (IException &e) { + FAIL() << "Unable to open log file: " << e.what() << std::endl; + } + + // check number of deleted points and measures + EXPECT_EQ((int)log.findKeyword("PointsDeleted"), 0); + EXPECT_EQ((int)log.findKeyword("MeasuresDeleted"), 0); + + // no edit locked points or measures + EXPECT_EQ(log.findObject("EditLocked").findObject("Points").keywords(), 0); + EXPECT_EQ(log.findObject("EditLocked").findObject("Measures").keywords(), 0); + + // no retained references + EXPECT_EQ(log.findObject("RetainedReferences").keywords(), 0); + + // check ignored points + PvlObject ignoredPoints = log.findObject("Ignored").findObject("Points"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0001"), + "Reference measure ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0002"), + "Reference measure ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0031"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0032"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0038"), + "Reference measure ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0039"), + "Reference measure ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0064"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0065"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0067"), + "Reference measure ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0068"), + "Ignored from input"); + + // check ignored measures + PvlObject ignoredMeasures = log.findObject("Ignored").findObject("Measures"); + PvlGroup new0001 = ignoredMeasures.findGroup("new0001"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0001.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0001.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Reference ignored"); + + new0001.deleteKeyword("MGS/688540926:0/MOC-WA/RED"); + + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0001.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Measure in MEASURELIST"); + + PvlGroup new0002 = ignoredMeasures.findGroup("new0002"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0002.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0002.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Reference ignored"); + PvlGroup new0038 = ignoredMeasures.findGroup("new0038"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0038.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0038.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Reference ignored"); + + new0038.deleteKeyword("MGS/718369703:160/MOC-WA/RED"); + + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0038.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + + PvlGroup new0039 = ignoredMeasures.findGroup("new0039"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0039.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0039.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0064"). + findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Serial Number in CUBELIST"); + PvlGroup new0065 = ignoredMeasures.findGroup("new0065"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Reference ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Reference ignored"); + + new0065.deleteKeyword("MGS/688540926:0/MOC-WA/RED"); + new0065.deleteKeyword("MGS/691204200:96/MOC-WA/RED"); + + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + + PvlGroup new0066 = ignoredMeasures.findGroup("new0066"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0066.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0066.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Reference ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0066.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Reference ignored"); + + new0066.deleteKeyword("MGS/688540926:0/MOC-WA/RED"); + new0066.deleteKeyword("MGS/691204200:96/MOC-WA/RED"); + + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0066.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0066.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + + PvlGroup new0067 = ignoredMeasures.findGroup("new0067"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Reference ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + + new0067.deleteKeyword("MGS/691204200:96/MOC-WA/RED"); + + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + + PvlGroup new0068 = ignoredMeasures.findGroup("new0068"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0069"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0070"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0071"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0072"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0073"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0074"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0075"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0076"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0077"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0078"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0079"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0080"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0081"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0082"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0083"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0084"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0085"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0086"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0087"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0088"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0089"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0090"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0091"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0092"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0093"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0094"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0095"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0096"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0097"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0098"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0099"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0100"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0101"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0102"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0103"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0104"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0105"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0106"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0107"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0108"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + + // check output ControlNetwork + ControlNet outNet(tempDir.path() + "/out.net"); + EXPECT_EQ(outNet.GetNumPoints(), 108); + EXPECT_EQ(outNet.GetNumValidPoints(), 97); + EXPECT_EQ(outNet.GetNumEditLockPoints(), 0); + EXPECT_EQ(outNet.GetNumMeasures(), 261); + EXPECT_EQ(outNet.GetNumIgnoredMeasures(), 61); + EXPECT_EQ(outNet.GetNumEditLockMeasures(), 0); +} + + +/** + * CneteditIgnoreMeasuresPoints + * + * Cnetedit test with ignore measures and points lists. + * Input ... + * 1) ControlNet with 108 points (data/cnetedit/cnet_108pts.pvl) + * 2) one image cube list file (data/cnetedit/e0902065.cal.sub.cub) + * 3) point list file + * + * Output ... + * 1) edited ControlNet + * 2) Pvl log file. + */ +TEST_F(Cnetedit, CneteditIgnoreMeasuresPoints) { + QTemporaryDir tempDir; + + QVector args = {"cnet=" + cnet108File, + "cubelist=" + cubeListFile, + "log=" + tempDir.path() + "/log.txt", + "pointlist=" + pointListFile, + "onet=" + tempDir.path() + "/out.net", + }; + + UserInterface ui(APP_XML, args); + + Pvl cneteditlog; + + try { + cneteditlog = cnetedit(ui); + } + catch(IException &e) { + FAIL() << e.toString().toStdString().c_str() << std::endl; + } + + // read back log file + Pvl log; + try { + log.read(tempDir.path()+ "/log.txt"); + } + catch (IException &e) { + FAIL() << "Unable to open log file: " << e.what() << std::endl; + } + + // check number of deleted points and measures + EXPECT_EQ((int)log.findKeyword("PointsDeleted"), 16); + EXPECT_EQ((int)log.findKeyword("MeasuresDeleted"), 77); + + // no edit locked points or measures + EXPECT_EQ(log.findObject("EditLocked").findObject("Points").keywords(), 0); + EXPECT_EQ(log.findObject("EditLocked").findObject("Measures").keywords(), 0); + + // no retained references + EXPECT_EQ(log.findObject("RetainedReferences").keywords(), 0); + + // check deleted points + PvlObject deletedPoints = log.findObject("Deleted").findObject("Points"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0001"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0002"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0007"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0008"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0020"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0031"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0032"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0036"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0038"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0039"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0050"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0064"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0065"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0066"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0067"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0068"), + "Ignored from input"); + + // check deleted measures + PvlObject deletedMeasures = log.findObject("Deleted").findObject("Measures"); + PvlGroup new0001 = deletedMeasures.findGroup("new0001"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0001.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0001.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0002 = deletedMeasures.findGroup("new0002"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0002.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0002.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0007 = deletedMeasures.findGroup("new0007"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0007.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0007.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0008 = deletedMeasures.findGroup("new0008"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0008.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0008.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0020 = deletedMeasures.findGroup("new0020"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0020.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0020.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0031 = deletedMeasures.findGroup("new0031"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0031.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0031.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0032 = deletedMeasures.findGroup("new0032"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0032.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0032.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0036 = deletedMeasures.findGroup("new0036"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0036.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0036.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0038 = deletedMeasures.findGroup("new0038"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0038.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0038.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0039 = deletedMeasures.findGroup("new0039"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0039.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0039.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0050 = deletedMeasures.findGroup("new0050"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0050.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0050.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0064 = deletedMeasures.findGroup("new0064"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0064.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0064.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0064.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0065 = deletedMeasures.findGroup("new0065"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0066 = deletedMeasures.findGroup("new0066"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0066.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0066.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0066.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0067 = deletedMeasures.findGroup("new0067"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0068 = deletedMeasures.findGroup("new0068"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0069"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0070"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0071"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0072"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0073"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0074"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0075"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0076"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0077"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0078"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0079"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0080"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0081"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0082"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0083"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0084"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0085"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0086"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0087"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0088"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0089"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0090"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0091"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0092"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0093"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0094"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0095"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0096"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0097"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0098"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0099"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0100"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0101"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0102"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0103"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0104"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0105"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0106"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0107"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0108"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + + // check output ControlNetwork + ControlNet outNet(tempDir.path() + "/out.net"); + EXPECT_EQ(outNet.GetNumPoints(), 92); + EXPECT_EQ(outNet.GetNumValidPoints(), 92); + EXPECT_EQ(outNet.GetNumEditLockPoints(), 0); + EXPECT_EQ(outNet.GetNumMeasures(), 184); + EXPECT_EQ(outNet.GetNumIgnoredMeasures(), 0); + EXPECT_EQ(outNet.GetNumEditLockMeasures(), 0); +} + + +/** + * CneteditIgnorePoints + * + * Cnetedit test with ignore points list. + * Input ... + * 1) ControlNet with 108 points (data/cnetedit/cnet_108pts.pvl) + * 2) point list file + * + * Output ... + * 1) edited ControlNet + * 2) Pvl log file. + */ +TEST_F(Cnetedit, CneteditIgnorePoints) { + QTemporaryDir tempDir; + + QVector args = {"cnet=" + cnet108File, + "log=" + tempDir.path() + "/log.txt", + "pointlist=" + pointListFile, + "onet=" + tempDir.path() + "/out.net" + }; + + UserInterface ui(APP_XML, args); + + Pvl cneteditlog; + + try { + cneteditlog = cnetedit(ui); + } + catch(IException &e) { + FAIL() << e.toString().toStdString().c_str() << std::endl; + } + + // read back log file + Pvl log; + try { + log.read(tempDir.path()+ "/log.txt"); + } + catch (IException &e) { + FAIL() << "Unable to open log file: " << e.what() << std::endl; + } + + // check number of deleted points and measures + EXPECT_EQ((int)log.findKeyword("PointsDeleted"), 14); + EXPECT_EQ((int)log.findKeyword("MeasuresDeleted"), 33); + + // no edit locked points or measures + EXPECT_EQ(log.findObject("EditLocked").findObject("Points").keywords(), 0); + EXPECT_EQ(log.findObject("EditLocked").findObject("Measures").keywords(), 0); + + // no retained references + EXPECT_EQ(log.findObject("RetainedReferences").keywords(), 0); + + // check deleted points + PvlObject deletedPoints = log.findObject("Deleted").findObject("Points"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0001"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0007"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0008"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0020"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0031"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0032"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0036"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0038"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0039"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0050"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0064"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0065"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0067"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0068"), + "Ignored from input"); + + // check deleted measures + PvlObject deletedMeasures = log.findObject("Deleted").findObject("Measures"); + PvlGroup new0001 = deletedMeasures.findGroup("new0001"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0001.findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0001.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0007 = deletedMeasures.findGroup("new0007"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0007.findKeyword("MGS/691204200:96/MOC-WA/RED "), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0007.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0008 = deletedMeasures.findGroup("new0008"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0008.findKeyword("MGS/691204200:96/MOC-WA/RED "), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0008.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0020 = deletedMeasures.findGroup("new0020"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0020.findKeyword("MGS/691204200:96/MOC-WA/RED "), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0020.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0031 = deletedMeasures.findGroup("new0031"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0031.findKeyword("MGS/691204200:96/MOC-WA/RED "), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0031.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0032 = deletedMeasures.findGroup("new0032"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0032.findKeyword("MGS/691204200:96/MOC-WA/RED "), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0032.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0036 = deletedMeasures.findGroup("new0036"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0036.findKeyword("MGS/691204200:96/MOC-WA/RED "), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0036.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0038 = deletedMeasures.findGroup("new0038"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0038.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0038.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0039 = deletedMeasures.findGroup("new0039"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0039.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0039.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0050 = deletedMeasures.findGroup("new0050"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0050.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0050.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0064 = deletedMeasures.findGroup("new0064"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0064.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0064.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0064"). + findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0065 = deletedMeasures.findGroup("new0065"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0066"). + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0067 = deletedMeasures.findGroup("new0067"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0068 = deletedMeasures.findGroup("new0068"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + + // check output ControlNetwork + ControlNet outNet(tempDir.path() + "/out.net"); + EXPECT_EQ(outNet.GetNumPoints(), 94); + EXPECT_EQ(outNet.GetNumValidPoints(), 94); + EXPECT_EQ(outNet.GetNumEditLockPoints(), 0); + EXPECT_EQ(outNet.GetNumMeasures(), 228); + EXPECT_EQ(outNet.GetNumIgnoredMeasures(), 0); + EXPECT_EQ(outNet.GetNumEditLockMeasures(), 0); +} + + +/** + * CneteditIgnoreAllPoints + * + * Cnetedit test with ignore points list and IGNOREALL=YES. + * Input ... + * 1) ControlNet with 108 points (data/cnetedit/cnet_108pts.pvl) + * 2) point list file + * 3) ignoreall=yes + * + * Output ... + * 1) edited ControlNet + * 2) Pvl log file. + */ +TEST_F(Cnetedit, CneteditIgnoreAllPoints) { + QTemporaryDir tempDir; + + QVector args = {"cnet=" + cnet108File, + "log=" + tempDir.path() + "/log.txt", + "pointlist=" + pointListFile, + "ignoreall=yes", + "onet=" + tempDir.path() + "/out.net" + }; + + UserInterface ui(APP_XML, args); + + Pvl cneteditlog; + + try { + cneteditlog = cnetedit(ui); + } + catch(IException &e) { + FAIL() << e.toString().toStdString().c_str() << std::endl; + } + + // read back log file + Pvl log; + try { + log.read(tempDir.path()+ "/log.txt"); + } + catch (IException &e) { + FAIL() << "Unable to open log file: " << e.what() << std::endl; + } + + // check number of deleted points and measures + EXPECT_EQ((int)log.findKeyword("PointsDeleted"), 15); + EXPECT_EQ((int)log.findKeyword("MeasuresDeleted"), 35); + + // no edit locked points or measures + EXPECT_EQ(log.findObject("EditLocked").findObject("Points").keywords(), 0); + EXPECT_EQ(log.findObject("EditLocked").findObject("Measures").keywords(), 0); + + // no retained references + EXPECT_EQ(log.findObject("RetainedReferences").keywords(), 0); + + // check deleted points + PvlObject deletedPoints = log.findObject("Deleted").findObject("Points"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0001"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0007"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0008"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0020"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0031"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0032"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0036"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0038"), + "Reference measure ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0039"), + "Reference measure ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0050"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0064"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0065"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0066"), + "Reference measure ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0067"), + "Reference measure ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0068"), + "Ignored from input"); + + // check deleted measures + PvlObject deletedMeasures = log.findObject("Deleted").findObject("Measures"); + PvlGroup new0001 = deletedMeasures.findGroup("new0001"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0001.findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0001.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Reference ignored"); + PvlGroup new0007 = deletedMeasures.findGroup("new0007"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0007.findKeyword("MGS/691204200:96/MOC-WA/RED "), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0007.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Reference ignored"); + PvlGroup new0008 = deletedMeasures.findGroup("new0008"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0008.findKeyword("MGS/691204200:96/MOC-WA/RED "), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0008.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Reference ignored"); + PvlGroup new0020 = deletedMeasures.findGroup("new0020"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0020.findKeyword("MGS/691204200:96/MOC-WA/RED "), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0020.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Reference ignored"); + PvlGroup new0031 = deletedMeasures.findGroup("new0031"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0031.findKeyword("MGS/691204200:96/MOC-WA/RED "), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0031.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Reference ignored"); + PvlGroup new0032 = deletedMeasures.findGroup("new0032"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0032.findKeyword("MGS/691204200:96/MOC-WA/RED "), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0032.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Reference ignored"); + PvlGroup new0036 = deletedMeasures.findGroup("new0036"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0036.findKeyword("MGS/691204200:96/MOC-WA/RED "), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0036.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Reference ignored"); + PvlGroup new0038 = deletedMeasures.findGroup("new0038"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0038.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0038.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Reference ignored"); + + new0038.deleteKeyword("MGS/718369703:160/MOC-WA/RED"); + + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0038.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0039 = deletedMeasures.findGroup("new0039"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0039.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0039.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0050 = deletedMeasures.findGroup("new0050"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0050.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0050.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Reference ignored"); + PvlGroup new0064 = deletedMeasures.findGroup("new0064"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0064.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0064.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Reference ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0064.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Reference ignored"); + PvlGroup new0065 = deletedMeasures.findGroup("new0065"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Reference ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Reference ignored"); + + new0065.deleteKeyword("MGS/688540926:0/MOC-WA/RED"); + new0065.deleteKeyword("MGS/691204200:96/MOC-WA/RED"); + + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0066 = deletedMeasures.findGroup("new0066"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0066.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0066.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Reference ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0066.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Reference ignored"); + + new0066.deleteKeyword("MGS/688540926:0/MOC-WA/RED"); + new0066.deleteKeyword("MGS/691204200:96/MOC-WA/RED"); + + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0066.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0066.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0067 = deletedMeasures.findGroup("new0067"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Reference ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + + new0067.deleteKeyword("MGS/691204200:96/MOC-WA/RED"); + + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0068 = deletedMeasures.findGroup("new0068"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + + // check output ControlNetwork + ControlNet outNet(tempDir.path() + "/out.net"); + EXPECT_EQ(outNet.GetNumPoints(), 93); + EXPECT_EQ(outNet.GetNumValidPoints(), 93); + EXPECT_EQ(outNet.GetNumEditLockPoints(), 0); + EXPECT_EQ(outNet.GetNumMeasures(), 226); + EXPECT_EQ(outNet.GetNumIgnoredMeasures(), 0); + EXPECT_EQ(outNet.GetNumEditLockMeasures(), 0); +} + +/** + * CneteditNoDelete + * + * Cnetedit test with DELETE=NO. + * Input ... + * 1) ControlNet with 108 points (data/cnetedit/cnet_108pts.pvl) + * 2) one image cube list file (data/cnetedit/e0902065.cal.sub.cub) + * 3) point list file + * 4) delete=no + * + * Output ... + * 1) edited ControlNet + * 2) Pvl log file. + */ +TEST_F(Cnetedit, CneteditNoDelete) { + QTemporaryDir tempDir; + + QVector args = {"cnet=" + cnet108File, + "cubelist=" + cubeListFile, + "log=" + tempDir.path() + "/log.txt", + "pointlist=" + pointListFile, + "delete=no", + "onet=" + tempDir.path() + "/out.net", + }; + + UserInterface ui(APP_XML, args); + + Pvl cneteditlog; + + try { + cneteditlog = cnetedit(ui); + } + catch(IException &e) { + FAIL() << e.toString().toStdString().c_str() << std::endl; + } + + // read back log file + Pvl log; + try { + log.read(tempDir.path()+ "/log.txt"); + } + catch (IException &e) { + FAIL() << "Unable to open log file: " << e.what() << std::endl; + } + + // check number of deleted points and measures + EXPECT_EQ((int)log.findKeyword("PointsDeleted"), 0); + EXPECT_EQ((int)log.findKeyword("MeasuresDeleted"), 0); + + // no edit locked points or measures + EXPECT_EQ(log.findObject("EditLocked").findObject("Points").keywords(), 0); + EXPECT_EQ(log.findObject("EditLocked").findObject("Measures").keywords(), 0); + + // no retained references + EXPECT_EQ(log.findObject("RetainedReferences").keywords(), 0); + + // check ignored points + PvlObject ignoredPoints = log.findObject("Ignored").findObject("Points"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0001"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0007"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0008"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0020"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0031"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0032"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0036"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0050"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0064"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0065"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0068"), + "Ignored from input"); + + // check ignored measures + PvlObject ignoredMeasures = log.findObject("Ignored").findObject("Measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0001"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0002"). + findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0038"). + findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0039 = ignoredMeasures.findGroup("new0039"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0039.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0039.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0064"). + findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Serial Number in CUBELIST"); + PvlGroup new0065 = ignoredMeasures.findGroup("new0065"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Serial Number in CUBELIST"); + PvlGroup new0066 = ignoredMeasures.findGroup("new0066"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0066.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0066.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Serial Number in CUBELIST"); + PvlGroup new0067 = ignoredMeasures.findGroup("new0067"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0068 = ignoredMeasures.findGroup("new0068"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0069"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0070"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0071"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0072"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0073"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0074"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0075"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0076"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0077"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0078"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0079"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0080"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0081"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0082"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0083"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0084"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0085"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0086"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0087"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0088"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0089"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0090"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0091"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0092"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0093"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0094"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0095"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0096"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0097"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0098"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0099"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0100"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0101"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0102"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0103"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0104"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0105"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0106"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0107"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0108"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + + // check output ControlNetwork + ControlNet outNet(tempDir.path() + "/out.net"); + EXPECT_EQ(outNet.GetNumPoints(), 108); + EXPECT_EQ(outNet.GetNumValidPoints(), 97); + EXPECT_EQ(outNet.GetNumEditLockPoints(), 0); + EXPECT_EQ(outNet.GetNumMeasures(), 261); + EXPECT_EQ(outNet.GetNumIgnoredMeasures(), 55); + EXPECT_EQ(outNet.GetNumEditLockMeasures(), 0); +} + +/** + * CneteditPreservePoints + * + * Cnetedit test with PRESERVE=YES. + * Input ... + * 1) ControlNet with 108 points (data/cnetedit/cnet_108pts.pvl) + * 2) one image cube list file (data/cnetedit/e0902065.cal.sub.cub) + * 3) point list file + * 4) preserve=yes + * + * Output ... + * 1) edited ControlNet + * 2) Pvl log file. + */ +TEST_F(Cnetedit, CneteditPreservePoints) { + QTemporaryDir tempDir; + + QVector args = {"cnet=" + cnet108File, + "cubelist=" + cubeListFile, + "log=" + tempDir.path() + "/log.txt", + "pointlist=" + pointListFile, + "preserve=yes", + "onet=" + tempDir.path() + "/out.net", + }; + + UserInterface ui(APP_XML, args); + + Pvl cneteditlog; + + try { + cneteditlog = cnetedit(ui); + } + catch(IException &e) { + FAIL() << e.toString().toStdString().c_str() << std::endl; + } + + // read back log file + Pvl log; + try { + log.read(tempDir.path()+ "/log.txt"); + } + catch (IException &e) { + FAIL() << "Unable to open log file: " << e.what() << std::endl; + } + + // check number of deleted points and measures + EXPECT_EQ((int)log.findKeyword("PointsDeleted"), 12); + EXPECT_EQ((int)log.findKeyword("MeasuresDeleted"), 73); + + // no edit locked points or measures + EXPECT_EQ(log.findObject("EditLocked").findObject("Points").keywords(), 0); + EXPECT_EQ(log.findObject("EditLocked").findObject("Measures").keywords(), 0); + + // no retained references + EXPECT_EQ(log.findObject("RetainedReferences").keywords(), 0); + + // check deleted points + PvlObject deletedPoints = log.findObject("Deleted").findObject("Points"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0001"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0007"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0008"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0020"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0031"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0032"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0036"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0039"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0050"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0064"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0065"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0068"), + "Ignored from input"); + + // check deleted measures + PvlObject deletedMeasures = log.findObject("Deleted").findObject("Measures"); + PvlGroup new0001 = deletedMeasures.findGroup("new0001"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0001.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0001.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0002"). + findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Serial Number in CUBELIST"); + PvlGroup new0007 = deletedMeasures.findGroup("new0007"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0007.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0007.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0008 = deletedMeasures.findGroup("new0008"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0008.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0008.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0020 = deletedMeasures.findGroup("new0020"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0020.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0020.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0031 = deletedMeasures.findGroup("new0031"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0031.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0031.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0032 = deletedMeasures.findGroup("new0032"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0032.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0032.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0036 = deletedMeasures.findGroup("new0036"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0036.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0036.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0038"). + findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0039 = deletedMeasures.findGroup("new0039"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0039.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0039.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0050 = deletedMeasures.findGroup("new0050"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0050.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0050.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0064 = deletedMeasures.findGroup("new0064"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0064.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0064.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0064.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0065 = deletedMeasures.findGroup("new0065"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0066 = deletedMeasures.findGroup("new0066"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0066.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0066.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Serial Number in CUBELIST"); + PvlGroup new0067 = deletedMeasures.findGroup("new0067"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0068 = deletedMeasures.findGroup("new0068"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0069"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0070"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0071"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0072"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0073"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0074"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0075"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0076"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0077"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0078"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0079"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0080"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0081"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0082"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0083"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0084"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0085"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0086"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0087"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0088"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0089"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0090"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0091"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0092"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0093"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0094"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0095"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0096"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0097"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0098"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0099"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0100"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0101"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0102"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0103"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0104"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0105"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0106"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0107"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0108"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + + // check output ControlNetwork + ControlNet outNet(tempDir.path() + "/out.net"); + EXPECT_EQ(outNet.GetNumPoints(), 96); + EXPECT_EQ(outNet.GetNumValidPoints(), 96); + EXPECT_EQ(outNet.GetNumEditLockPoints(), 0); + EXPECT_EQ(outNet.GetNumMeasures(), 188); + EXPECT_EQ(outNet.GetNumIgnoredMeasures(), 0); + EXPECT_EQ(outNet.GetNumEditLockMeasures(), 0); +} + + +/** + * CneteditMeasureListGeneral + * General cnetedit test with bad measures list. + * Input ... + * 1) ControlNet with 35 points (data/cnetedit/cnet_35pts.pvl) + * 2) list file of bad measures + * 3) delete=no + * + * Output ... + * 1) edited ControlNet + * 2) Pvl log file. + */ +TEST_F(CneteditMeasureList, CneteditMeasureListGeneral) { + QTemporaryDir tempDir; + + QVector args = {"cnet=" + cnet35File, + "log=" + tempDir.path() + "/log.txt", + "measurelist=" + badMeasureListFile1, + "delete=no", + "onet=" + tempDir.path() + "/out.net", + }; + + UserInterface ui(APP_XML, args); + + Pvl cneteditlog; + + try { + cneteditlog = cnetedit(ui); + } + catch(IException &e) { + FAIL() << e.toString().toStdString().c_str() << std::endl; + } + + // read back log file + Pvl log; + try { + log.read(tempDir.path()+ "/log.txt"); + } + catch (IException &e) { + FAIL() << "Unable to open log file: " << e.what() << std::endl; + } + + // check number of deleted points and measures + EXPECT_EQ((int)log.findKeyword("PointsDeleted"), 0); + EXPECT_EQ((int)log.findKeyword("MeasuresDeleted"), 0); + + // no edit locked points or measures + EXPECT_EQ(log.findObject("EditLocked").findObject("Points").keywords(), 0); + EXPECT_EQ(log.findObject("EditLocked").findObject("Measures").keywords(), 0); + + // no retained references + EXPECT_EQ(log.findObject("RetainedReferences").keywords(), 0); + + // no ignored points + EXPECT_EQ(log.findObject("Ignored").findObject("Points").keywords(), 0); + + // check ignored measures + PvlObject ignoredMeasures = log.findObject("Ignored").findObject("Measures"); + PvlGroup bndry_32 = ignoredMeasures.findGroup("I24827003RDR_bndry_32"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_32.findKeyword("Odyssey/THEMIS_IR/766864399.204"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_32.findKeyword("Odyssey/THEMIS_IR/764644820.000"), + "Measure in MEASURELIST"); + PvlGroup bndry_35 = ignoredMeasures.findGroup("I24827003RDR_bndry_35"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_35.findKeyword("Odyssey/THEMIS_IR/860700556.051"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_35.findKeyword("Odyssey/THEMIS_IR/748799078.000"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_35.findKeyword("Odyssey/THEMIS_IR/869400711.102"), + "Measure in MEASURELIST"); + PvlGroup bndry_36 = ignoredMeasures.findGroup("I24827003RDR_bndry_36"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_36.findKeyword("Odyssey/THEMIS_IR/748799078.000"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_36.findKeyword("Odyssey/THEMIS_IR/869400711.102"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("I24827003RDR_bndry_50"). + findKeyword("Odyssey/THEMIS_IR/869400711.102"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("I24827003RDR_bndry_53"). + findKeyword("Odyssey/THEMIS_IR/869400711.102"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("I24827003RDR_bndry_56"). + findKeyword("Odyssey/THEMIS_IR/869400711.102"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("I24827003RDR_bndry_8"). + findKeyword("Odyssey/THEMIS_IR/748799078.000"), + "Measure in MEASURELIST"); + + // check output ControlNetwork + ControlNet outNet(tempDir.path() + "/out.net"); + EXPECT_EQ(outNet.GetNumPoints(), 35); + EXPECT_EQ(outNet.GetNumValidPoints(), 35); + EXPECT_EQ(outNet.GetNumEditLockPoints(), 0); + EXPECT_EQ(outNet.GetNumMeasures(), 91); + EXPECT_EQ(outNet.GetNumIgnoredMeasures(), 11); + EXPECT_EQ(outNet.GetNumEditLockMeasures(), 0); +} + +/** + * CneteditMeasureListIgnoreAll + * + * Cnetedit test with bad measures list and IGNOREALL=YES; DELETE=NO. + * Input ... + * 1) ControlNet with 35 points (data/cnetedit/cnet_35pts.pvl) + * 2) bad measure list + * 3) ignoreall=yes + * 4) delete=no + * + * Output ... + * 1) edited ControlNet + * 2) Pvl log file. + */ +TEST_F(CneteditMeasureList, CneteditMeasureListIgnoreAll) { + QTemporaryDir tempDir; + + QVector args = {"cnet=" + cnet35File, + "log=" + tempDir.path() + "/log.txt", + "measurelist=" + badMeasureListFile2, + "ignoreall=yes", + "delete=no", + "onet=" + tempDir.path() + "/out.net", + }; + + UserInterface ui(APP_XML, args); + + Pvl cneteditlog; + + try { + cneteditlog = cnetedit(ui); + } + catch(IException &e) { + FAIL() << e.toString().toStdString().c_str() << std::endl; + } + + // read back log file + Pvl log; + try { + log.read(tempDir.path()+ "/log.txt"); + } + catch (IException &e) { + FAIL() << "Unable to open log file: " << e.what() << std::endl; + } + + // check number of deleted points and measures + EXPECT_EQ((int)log.findKeyword("PointsDeleted"), 0); + EXPECT_EQ((int)log.findKeyword("MeasuresDeleted"), 0); + + // no edit locked points or measures + EXPECT_EQ(log.findObject("EditLocked").findObject("Points").keywords(), 0); + EXPECT_EQ(log.findObject("EditLocked").findObject("Measures").keywords(), 0); + + // no retained references + EXPECT_EQ(log.findObject("RetainedReferences").keywords(), 0); + + // no ignored points + EXPECT_EQ(log.findObject("Ignored").findObject("Points").keywords(), 1); + + // check ignored measures + PvlObject ignoredMeasures = log.findObject("Ignored").findObject("Measures"); + PvlGroup bndry_32 = ignoredMeasures.findGroup("I24827003RDR_bndry_32"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_32.findKeyword("Odyssey/THEMIS_IR/766864399.204"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_32.findKeyword("Odyssey/THEMIS_IR/764644820.000"), + "Measure in MEASURELIST"); + PvlGroup bndry_35 = ignoredMeasures.findGroup("I24827003RDR_bndry_35"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_35.findKeyword("Odyssey/THEMIS_IR/860700556.051"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_35.findKeyword("Odyssey/THEMIS_IR/748799078.000"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_35.findKeyword("Odyssey/THEMIS_IR/869400711.102"), + "Measure in MEASURELIST"); + PvlGroup bndry_36 = ignoredMeasures.findGroup("I24827003RDR_bndry_36"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_36.findKeyword("Odyssey/THEMIS_IR/748799078.000"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_36.findKeyword("Odyssey/THEMIS_IR/869400711.102"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("I24827003RDR_bndry_50"). + findKeyword("Odyssey/THEMIS_IR/869400711.102"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("I24827003RDR_bndry_53"). + findKeyword("Odyssey/THEMIS_IR/869400711.102"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("I24827003RDR_bndry_56"). + findKeyword("Odyssey/THEMIS_IR/869400711.102"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("I24827003RDR_bndry_8"). + findKeyword("Odyssey/THEMIS_IR/748799078.000"), + "Measure in MEASURELIST"); + + // check output ControlNetwork + ControlNet outNet(tempDir.path() + "/out.net"); + EXPECT_EQ(outNet.GetNumPoints(), 35); + EXPECT_EQ(outNet.GetNumValidPoints(), 34); + EXPECT_EQ(outNet.GetNumEditLockPoints(), 0); + EXPECT_EQ(outNet.GetNumMeasures(), 91); + EXPECT_EQ(outNet.GetNumIgnoredMeasures(), 13); + EXPECT_EQ(outNet.GetNumEditLockMeasures(), 0); +} + + +/** + * CneteditMeasureListDelete + * + * Cnetedit test with bad measures list and delete=yes. + * Input ... + * 1) ControlNet with 35 points (data/cnetedit/cnet_35pts.pvl) + * 2) bad measure list + * 4) delete=yes (default) + * + * Output ... + * 1) edited ControlNet + * 2) Pvl log file. + */ +TEST_F(CneteditMeasureList, CneteditMeasureListDelete) { + QTemporaryDir tempDir; + + QVector args = {"cnet=" + cnet35File, + "log=" + tempDir.path() + "/log.txt", + "measurelist=" + badMeasureListFile1, + "onet=" + tempDir.path() + "/out.net", + }; + + UserInterface ui(APP_XML, args); + + Pvl cneteditlog; + + try { + cneteditlog = cnetedit(ui); + } + catch(IException &e) { + FAIL() << e.toString().toStdString().c_str() << std::endl; + } + + // read back log file + Pvl log; + try { + log.read(tempDir.path()+ "/log.txt"); + } + catch (IException &e) { + FAIL() << "Unable to open log file: " << e.what() << std::endl; + } + + // check number of deleted points and measures + EXPECT_EQ((int)log.findKeyword("PointsDeleted"), 5); + EXPECT_EQ((int)log.findKeyword("MeasuresDeleted"),16); + + // no edit locked points or measures + EXPECT_EQ(log.findObject("EditLocked").findObject("Points").keywords(), 0); + EXPECT_EQ(log.findObject("EditLocked").findObject("Measures").keywords(), 0); + + // no retained references + EXPECT_EQ(log.findObject("RetainedReferences").keywords(), 0); + + // check deleted points + PvlObject deletedPoints = log.findObject("Deleted").findObject("Points"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("I24827003RDR_bndry_32"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("I24827003RDR_bndry_50"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("I24827003RDR_bndry_53"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("I24827003RDR_bndry_56"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("I24827003RDR_bndry_8"), + "Too few measures"); + + // check deleted measures + PvlObject deletedMeasures = log.findObject("Deleted").findObject("Measures"); + PvlGroup bndry_32 = deletedMeasures.findGroup("I24827003RDR_bndry_32"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_32.findKeyword("Odyssey/THEMIS_IR/766864399.204"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_32.findKeyword("Odyssey/THEMIS_IR/764644820.000"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_32.findKeyword("Odyssey/THEMIS_IR/860700556.051"), + "Point deleted"); + PvlGroup bndry_35 = deletedMeasures.findGroup("I24827003RDR_bndry_35"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_35.findKeyword("Odyssey/THEMIS_IR/860700556.051"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_35.findKeyword("Odyssey/THEMIS_IR/748799078.000"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_35.findKeyword("Odyssey/THEMIS_IR/869400711.102"), + "Measure in MEASURELIST"); + PvlGroup bndry_36 = deletedMeasures.findGroup("I24827003RDR_bndry_36"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_36.findKeyword("Odyssey/THEMIS_IR/748799078.000"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_36.findKeyword("Odyssey/THEMIS_IR/869400711.102"), + "Measure in MEASURELIST"); + PvlGroup bndry_50 = deletedMeasures.findGroup("I24827003RDR_bndry_50"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_50.findKeyword("Odyssey/THEMIS_IR/869400711.102"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_50.findKeyword("Odyssey/THEMIS_IR/823680993.230"), + "Point deleted"); + PvlGroup bndry_53 = deletedMeasures.findGroup("I24827003RDR_bndry_53"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_53.findKeyword("Odyssey/THEMIS_IR/869400711.102"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_53.findKeyword("Odyssey/THEMIS_IR/823680993.230"), + "Point deleted"); + PvlGroup bndry_56 = deletedMeasures.findGroup("I24827003RDR_bndry_56"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_56.findKeyword("Odyssey/THEMIS_IR/869400711.102"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_56.findKeyword("Odyssey/THEMIS_IR/823680993.230"), + "Point deleted"); + PvlGroup bndry_8 = deletedMeasures.findGroup("I24827003RDR_bndry_8"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_8.findKeyword("Odyssey/THEMIS_IR/748799078.000"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_8.findKeyword("Odyssey/THEMIS_IR/760206015.230"), + "Point deleted"); + + // check output ControlNetwork + ControlNet outNet(tempDir.path() + "/out.net"); + EXPECT_EQ(outNet.GetNumPoints(), 30); + EXPECT_EQ(outNet.GetNumValidPoints(), 30); + EXPECT_EQ(outNet.GetNumEditLockPoints(), 0); + EXPECT_EQ(outNet.GetNumMeasures(), 75); + EXPECT_EQ(outNet.GetNumIgnoredMeasures(), 0); + EXPECT_EQ(outNet.GetNumEditLockMeasures(), 0); +} \ No newline at end of file diff --git a/isis/tests/data/cnetedit/I07873009RDR.dstr.cub.label.pvl b/isis/tests/data/cnetedit/I07873009RDR.dstr.cub.label.pvl new file mode 100644 index 0000000000..bea220d69b --- /dev/null +++ b/isis/tests/data/cnetedit/I07873009RDR.dstr.cub.label.pvl @@ -0,0 +1,387 @@ +Object = IsisCube + Object = Core + StartByte = 65537 + Format = Tile + TileSamples = 320 + TileLines = 472 + + Group = Dimensions + Samples = 320 + Lines = 17936 + Bands = 1 + End_Group + + Group = Pixels + Type = Real + ByteOrder = Lsb + Base = 0.0 + Multiplier = 1.0 + End_Group + End_Object + + Group = Instrument + SpacecraftName = MARS_ODYSSEY + InstrumentId = THEMIS_IR + TargetName = MARS + MissionPhaseName = MAPPING + StartTime = 2003-09-23T15:42:25.400 + StopTime = 2003-09-23T15:52:23.262 + SpacecraftClockCount = 748799078.000 + GainNumber = 16 + OffsetNumber = 2 + MissingScanLines = 0 + TimeDelayIntegration = ENABLED + SpacecraftClockOffset = 0.0 + End_Group + + Group = Archive + DataSetId = ODY-M-THM-3-IRRDR-V1.0 + ProducerId = ODY_THM_TEAM + ProductId = I07873009RDR + ProductCreationTime = 2004-10-14T00:21:58 + ProductVersionId = 1.1 + OrbitNumber = 07873 + FlightSoftwareVersionId = 1.00 + CommandSequenceNumber = 7873 + Description = "No Description Given" + End_Group + + Group = BandBin + OriginalBand = 2 + Center = 12.57 + Width = 0.81 + FilterNumber = 9 + End_Group + + Group = Kernels + NaifFrameCode = -53031 + LeapSecond = $base/kernels/lsk/naif0009.tls + TargetAttitudeShape = $base/kernels/pck/pck00009.tpc + TargetPosition = (Table, $base/kernels/spk/de405.bsp) + InstrumentPointing = (Table, $odyssey/kernels/ck/m01_sc_map7.bc, + $odyssey/kernels/fk/m01_v29.tf) + Instrument = Null + SpacecraftClock = $odyssey/kernels/sclk/ORB1_SCLKSCET.00184.tsc + InstrumentPosition = (Table, $odyssey/kernels/spk/m01_map7.bsp) + InstrumentAddendum = $odyssey/kernels/iak/themisAddendum003.ti + ShapeModel = $base/dems/molaMarsPlanetaryRadius0005.cub + InstrumentPositionQuality = Reconstructed + InstrumentPointingQuality = Reconstructed + CameraVersion = 2 + End_Group +End_Object + +Object = Label + Bytes = 65536 +End_Object + +Object = Table + Name = InstrumentPointing + StartByte = 23023617 + Bytes = 8960 + Records = 140 + ByteOrder = Lsb + TimeDependentFrames = (-53000, 16, 1) + ConstantFrames = (-53031, -53030, -53000) + ConstantRotation = (0.0013835021734055, 0.011529976186854, + 0.99993257051207, 0.28811330695433, 0.95752799265849, + -0.011439651709814, -0.95759532594806, + 0.28810970640458, -0.0019971975093594) + CkTableStartTime = 117603812.11191 + CkTableEndTime = 117604414.30884 + CkTableOriginalSize = 17937 + Description = "Created by spiceinit" + Kernels = ($odyssey/kernels/ck/m01_sc_map7.bc, + $odyssey/kernels/fk/m01_v29.tf) + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = InstrumentPosition + StartByte = 23032577 + Bytes = 4200 + Records = 75 + ByteOrder = Lsb + CacheType = HermiteSpline + SpkTableStartTime = 117603812.11191 + SpkTableEndTime = 117604414.30884 + SpkTableOriginalSize = 17937.0 + Description = "Created by spiceinit" + Kernels = $odyssey/kernels/spk/m01_map7.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = BodyRotation + StartByte = 23036777 + Bytes = 128 + Records = 2 + ByteOrder = Lsb + TimeDependentFrames = (10014, 1) + CkTableStartTime = 117603812.11191 + CkTableEndTime = 117604414.30884 + CkTableOriginalSize = 2 + Description = "Created by spiceinit" + Kernels = ($base/kernels/spk/de405.bsp, + $base/kernels/pck/pck00009.tpc) + SolarLongitude = 266.33576028989 + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = SunPosition + StartByte = 23036905 + Bytes = 112 + Records = 2 + ByteOrder = Lsb + CacheType = Linear + SpkTableStartTime = 117603812.11191 + SpkTableEndTime = 117604414.30884 + SpkTableOriginalSize = 2.0 + Description = "Created by spiceinit" + Kernels = $base/kernels/spk/de405.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = CameraStatistics + StartByte = 23037017 + Bytes = 624 + Records = 12 + ByteOrder = Lsb + + Group = Field + Name = Name + Type = Text + Size = 20 + End_Group + + Group = Field + Name = Minimum + Type = Double + Size = 1 + End_Group + + Group = Field + Name = Maximum + Type = Double + Size = 1 + End_Group + + Group = Field + Name = Average + Type = Double + Size = 1 + End_Group + + Group = Field + Name = StandardDeviation + Type = Double + Size = 1 + End_Group +End_Object + +Object = History + Name = IsisCube + StartByte = 23073798 + Bytes = 4311 +End_Object + +Object = NaifKeywords + BODY499_RADII = (3396.19, 3396.19, 3376.2) + BODY_FRAME_CODE = 10014 + CLOCK_ET_-53_748799078.000_COMPUTED = b4105486f7099c41 + INS-53031_TRANSX = (0.0, 0.05, 0.0) + INS-53031_TRANSY = (0.0, 0.0, 0.05) + INS-53031_ITRANSS = (0.0, 20.0, 0.0) + INS-53031_ITRANSL = (0.0, 0.0, 20.0) +End_Object + +Object = Polygon + Name = Footprint + StartByte = 23037641 + Bytes = 31880 +End_Object + +Object = OriginalLabel + Name = IsisCube + StartByte = 23069521 + Bytes = 4277 +End_Object +End diff --git a/isis/tests/data/cnetedit/I09477002RDR.dstr.cub.label.pvl b/isis/tests/data/cnetedit/I09477002RDR.dstr.cub.label.pvl new file mode 100644 index 0000000000..84d977c639 --- /dev/null +++ b/isis/tests/data/cnetedit/I09477002RDR.dstr.cub.label.pvl @@ -0,0 +1,387 @@ +Object = IsisCube + Object = Core + StartByte = 65537 + Format = Tile + TileSamples = 320 + TileLines = 128 + + Group = Dimensions + Samples = 320 + Lines = 10768 + Bands = 1 + End_Group + + Group = Pixels + Type = Real + ByteOrder = Lsb + Base = 0.0 + Multiplier = 1.0 + End_Group + End_Object + + Group = Instrument + SpacecraftName = MARS_ODYSSEY + InstrumentId = THEMIS_IR + TargetName = MARS + MissionPhaseName = MAPPING + StartTime = 2004-02-02T16:17:44.937 + StopTime = 2004-02-02T16:23:43.874 + SpacecraftClockCount = 760206015.230 + GainNumber = 16 + OffsetNumber = 2 + MissingScanLines = 0 + TimeDelayIntegration = ENABLED + SpacecraftClockOffset = 0.0 + End_Group + + Group = Archive + DataSetId = ODY-M-THM-3-IRRDR-V1.0 + ProducerId = ODY_THM_TEAM + ProductId = I09477002RDR + ProductCreationTime = 2004-10-14T18:27:41 + ProductVersionId = 1.1 + OrbitNumber = 09477 + FlightSoftwareVersionId = 1.00 + CommandSequenceNumber = 9477 + Description = "No Description Given" + End_Group + + Group = BandBin + OriginalBand = 9 + Center = 12.57 + Width = 0.81 + FilterNumber = 9 + End_Group + + Group = Kernels + NaifFrameCode = -53031 + LeapSecond = $base/kernels/lsk/naif0009.tls + TargetAttitudeShape = $base/kernels/pck/pck00009.tpc + TargetPosition = (Table, $base/kernels/spk/de405.bsp) + InstrumentPointing = (Table, $odyssey/kernels/ck/m01_sc_map9.bc, + $odyssey/kernels/fk/m01_v29.tf) + Instrument = Null + SpacecraftClock = $odyssey/kernels/sclk/ORB1_SCLKSCET.00184.tsc + InstrumentPosition = (Table, $odyssey/kernels/spk/m01_map9.bsp) + InstrumentAddendum = $odyssey/kernels/iak/themisAddendum003.ti + ShapeModel = $base/dems/molaMarsPlanetaryRadius0005.cub + InstrumentPositionQuality = Reconstructed + InstrumentPointingQuality = Reconstructed + CameraVersion = 2 + End_Group +End_Object + +Object = Label + Bytes = 65536 +End_Object + +Object = Table + Name = InstrumentPointing + StartByte = 13991937 + Bytes = 5504 + Records = 86 + ByteOrder = Lsb + TimeDependentFrames = (-53000, 16, 1) + ConstantFrames = (-53031, -53030, -53000) + ConstantRotation = (0.0013835021734055, 0.011529976186854, + 0.99993257051207, 0.28811330695433, 0.95752799265849, + -0.011439651709814, -0.95759532594806, + 0.28810970640458, -0.0019971975093594) + CkTableStartTime = 129010729.38783 + CkTableEndTime = 129011095.24634 + CkTableOriginalSize = 10769 + Description = "Created by spiceinit" + Kernels = ($odyssey/kernels/ck/m01_sc_map9.bc, + $odyssey/kernels/fk/m01_v29.tf) + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = InstrumentPosition + StartByte = 13997441 + Bytes = 1736 + Records = 31 + ByteOrder = Lsb + CacheType = HermiteSpline + SpkTableStartTime = 129010729.38783 + SpkTableEndTime = 129011095.24634 + SpkTableOriginalSize = 10769.0 + Description = "Created by spiceinit" + Kernels = $odyssey/kernels/spk/m01_map9.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = BodyRotation + StartByte = 13999177 + Bytes = 128 + Records = 2 + ByteOrder = Lsb + TimeDependentFrames = (10014, 1) + CkTableStartTime = 129010729.38783 + CkTableEndTime = 129011095.24634 + CkTableOriginalSize = 2 + Description = "Created by spiceinit" + Kernels = ($base/kernels/spk/de405.bsp, + $base/kernels/pck/pck00009.tpc) + SolarLongitude = 343.59609359065 + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = SunPosition + StartByte = 13999305 + Bytes = 112 + Records = 2 + ByteOrder = Lsb + CacheType = Linear + SpkTableStartTime = 129010729.38783 + SpkTableEndTime = 129011095.24634 + SpkTableOriginalSize = 2.0 + Description = "Created by spiceinit" + Kernels = $base/kernels/spk/de405.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = CameraStatistics + StartByte = 13999417 + Bytes = 624 + Records = 12 + ByteOrder = Lsb + + Group = Field + Name = Name + Type = Text + Size = 20 + End_Group + + Group = Field + Name = Minimum + Type = Double + Size = 1 + End_Group + + Group = Field + Name = Maximum + Type = Double + Size = 1 + End_Group + + Group = Field + Name = Average + Type = Double + Size = 1 + End_Group + + Group = Field + Name = StandardDeviation + Type = Double + Size = 1 + End_Group +End_Object + +Object = History + Name = IsisCube + StartByte = 14024477 + Bytes = 4311 +End_Object + +Object = NaifKeywords + BODY499_RADII = (3396.19, 3396.19, 3376.2) + BODY_FRAME_CODE = 10014 + CLOCK_ET_-53_760206015.230_COMPUTED = e2727ca430c29e41 + INS-53031_TRANSX = (0.0, 0.05, 0.0) + INS-53031_TRANSY = (0.0, 0.0, 0.05) + INS-53031_ITRANSS = (0.0, 20.0, 0.0) + INS-53031_ITRANSL = (0.0, 0.0, 20.0) +End_Object + +Object = Polygon + Name = Footprint + StartByte = 14000041 + Bytes = 19582 +End_Object + +Object = OriginalLabel + Name = IsisCube + StartByte = 14019623 + Bytes = 4854 +End_Object +End diff --git a/isis/tests/data/cnetedit/I10101002RDR.dstr.cub.label.pvl b/isis/tests/data/cnetedit/I10101002RDR.dstr.cub.label.pvl new file mode 100644 index 0000000000..3801944460 --- /dev/null +++ b/isis/tests/data/cnetedit/I10101002RDR.dstr.cub.label.pvl @@ -0,0 +1,387 @@ +Object = IsisCube + Object = Core + StartByte = 65537 + Format = Tile + TileSamples = 320 + TileLines = 128 + + Group = Dimensions + Samples = 320 + Lines = 10768 + Bands = 1 + End_Group + + Group = Pixels + Type = Real + ByteOrder = Lsb + Base = 0.0 + Multiplier = 1.0 + End_Group + End_Object + + Group = Instrument + SpacecraftName = MARS_ODYSSEY + InstrumentId = THEMIS_IR + TargetName = MARS + MissionPhaseName = MAPPING + StartTime = 2004-03-25T01:17:41.845 + StopTime = 2004-03-25T01:23:40.774 + SpacecraftClockCount = 764644820.000 + GainNumber = 16 + OffsetNumber = 2 + MissingScanLines = 0 + TimeDelayIntegration = ENABLED + SpacecraftClockOffset = 0.0 + End_Group + + Group = Archive + DataSetId = ODY-M-THM-3-IRRDR-V1.0 + ProducerId = ODY_THM_TEAM + ProductId = I10101002RDR + ProductCreationTime = 2004-10-15T00:32:17 + ProductVersionId = 1.1 + OrbitNumber = 10101 + FlightSoftwareVersionId = 1.00 + CommandSequenceNumber = 10101 + Description = "No Description Given" + End_Group + + Group = BandBin + OriginalBand = 9 + Center = 12.57 + Width = 0.81 + FilterNumber = 9 + End_Group + + Group = Kernels + NaifFrameCode = -53031 + LeapSecond = $base/kernels/lsk/naif0009.tls + TargetAttitudeShape = $base/kernels/pck/pck00009.tpc + TargetPosition = (Table, $base/kernels/spk/de405.bsp) + InstrumentPointing = (Table, $odyssey/kernels/ck/m01_sc_map9.bc, + $odyssey/kernels/fk/m01_v29.tf) + Instrument = Null + SpacecraftClock = $odyssey/kernels/sclk/ORB1_SCLKSCET.00184.tsc + InstrumentPosition = (Table, $odyssey/kernels/spk/m01_map9.bsp) + InstrumentAddendum = $odyssey/kernels/iak/themisAddendum003.ti + ShapeModel = $base/dems/molaMarsPlanetaryRadius0005.cub + InstrumentPositionQuality = Reconstructed + InstrumentPointingQuality = Reconstructed + CameraVersion = 2 + End_Group +End_Object + +Object = Label + Bytes = 65536 +End_Object + +Object = Table + Name = InstrumentPointing + StartByte = 13991937 + Bytes = 5504 + Records = 86 + ByteOrder = Lsb + TimeDependentFrames = (-53000, 16, 1) + ConstantFrames = (-53031, -53030, -53000) + ConstantRotation = (0.0013835021734055, 0.011529976186854, + 0.99993257051207, 0.28811330695433, 0.95752799265849, + -0.011439651709814, -0.95759532594806, + 0.28810970640458, -0.0019971975093594) + CkTableStartTime = 133449526.29696 + CkTableEndTime = 133449892.15548 + CkTableOriginalSize = 10769 + Description = "Created by spiceinit" + Kernels = ($odyssey/kernels/ck/m01_sc_map9.bc, + $odyssey/kernels/fk/m01_v29.tf) + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = InstrumentPosition + StartByte = 13997441 + Bytes = 1568 + Records = 28 + ByteOrder = Lsb + CacheType = HermiteSpline + SpkTableStartTime = 133449526.29696 + SpkTableEndTime = 133449892.15548 + SpkTableOriginalSize = 10769.0 + Description = "Created by spiceinit" + Kernels = $odyssey/kernels/spk/m01_map9.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = BodyRotation + StartByte = 13999009 + Bytes = 128 + Records = 2 + ByteOrder = Lsb + TimeDependentFrames = (10014, 1) + CkTableStartTime = 133449526.29696 + CkTableEndTime = 133449892.15548 + CkTableOriginalSize = 2 + Description = "Created by spiceinit" + Kernels = ($base/kernels/spk/de405.bsp, + $base/kernels/pck/pck00009.tpc) + SolarLongitude = 9.5252197504187 + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = SunPosition + StartByte = 13999137 + Bytes = 112 + Records = 2 + ByteOrder = Lsb + CacheType = Linear + SpkTableStartTime = 133449526.29696 + SpkTableEndTime = 133449892.15548 + SpkTableOriginalSize = 2.0 + Description = "Created by spiceinit" + Kernels = $base/kernels/spk/de405.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = CameraStatistics + StartByte = 13999249 + Bytes = 624 + Records = 12 + ByteOrder = Lsb + + Group = Field + Name = Name + Type = Text + Size = 20 + End_Group + + Group = Field + Name = Minimum + Type = Double + Size = 1 + End_Group + + Group = Field + Name = Maximum + Type = Double + Size = 1 + End_Group + + Group = Field + Name = Average + Type = Double + Size = 1 + End_Group + + Group = Field + Name = StandardDeviation + Type = Double + Size = 1 + End_Group +End_Object + +Object = History + Name = IsisCube + StartByte = 14024342 + Bytes = 4311 +End_Object + +Object = NaifKeywords + BODY499_RADII = (3396.19, 3396.19, 3376.2) + BODY_FRAME_CODE = 10014 + CLOCK_ET_-53_764644820.000_COMPUTED = 05661fd81cd19f41 + INS-53031_TRANSX = (0.0, 0.05, 0.0) + INS-53031_TRANSY = (0.0, 0.0, 0.05) + INS-53031_ITRANSS = (0.0, 20.0, 0.0) + INS-53031_ITRANSL = (0.0, 0.0, 20.0) +End_Object + +Object = Polygon + Name = Footprint + StartByte = 13999873 + Bytes = 19582 +End_Object + +Object = OriginalLabel + Name = IsisCube + StartByte = 14019455 + Bytes = 4887 +End_Object +End diff --git a/isis/tests/data/cnetedit/I10413004RDR.dstr.cub.label.pvl b/isis/tests/data/cnetedit/I10413004RDR.dstr.cub.label.pvl new file mode 100644 index 0000000000..fa1d80b26f --- /dev/null +++ b/isis/tests/data/cnetedit/I10413004RDR.dstr.cub.label.pvl @@ -0,0 +1,387 @@ +Object = IsisCube + Object = Core + StartByte = 65537 + Format = Tile + TileSamples = 320 + TileLines = 450 + + Group = Dimensions + Samples = 320 + Lines = 3600 + Bands = 1 + End_Group + + Group = Pixels + Type = Real + ByteOrder = Lsb + Base = 0.0 + Multiplier = 1.0 + End_Group + End_Object + + Group = Instrument + SpacecraftName = MARS_ODYSSEY + InstrumentId = THEMIS_IR + TargetName = MARS + MissionPhaseName = MAPPING + StartTime = 2004-04-19T17:50:38.067 + StopTime = 2004-04-19T17:52:38.067 + SpacecraftClockCount = 766864399.204 + GainNumber = 16 + OffsetNumber = 2 + MissingScanLines = 0 + TimeDelayIntegration = ENABLED + SpacecraftClockOffset = 0.0 + End_Group + + Group = Archive + DataSetId = ODY-M-THM-3-IRRDR-V1.0 + ProducerId = ODY_THM_TEAM + ProductId = I10413004RDR + ProductCreationTime = 2004-09-28T13:50:33 + ProductVersionId = 1.0 + OrbitNumber = 10413 + FlightSoftwareVersionId = 1.00 + CommandSequenceNumber = 10413 + Description = "No Description Given" + End_Group + + Group = BandBin + OriginalBand = 9 + Center = 12.57 + Width = 0.81 + FilterNumber = 9 + End_Group + + Group = Kernels + NaifFrameCode = -53031 + LeapSecond = $base/kernels/lsk/naif0009.tls + TargetAttitudeShape = $base/kernels/pck/pck00009.tpc + TargetPosition = (Table, $base/kernels/spk/de405.bsp) + InstrumentPointing = (Table, $odyssey/kernels/ck/m01_sc_map10.bc, + $odyssey/kernels/fk/m01_v29.tf) + Instrument = Null + SpacecraftClock = $odyssey/kernels/sclk/ORB1_SCLKSCET.00184.tsc + InstrumentPosition = (Table, $odyssey/kernels/spk/m01_map10.bsp) + InstrumentAddendum = $odyssey/kernels/iak/themisAddendum003.ti + ShapeModel = $base/dems/molaMarsPlanetaryRadius0005.cub + InstrumentPositionQuality = Reconstructed + InstrumentPointingQuality = Reconstructed + CameraVersion = 2 + End_Group +End_Object + +Object = Label + Bytes = 65536 +End_Object + +Object = Table + Name = InstrumentPointing + StartByte = 4673537 + Bytes = 2048 + Records = 32 + ByteOrder = Lsb + TimeDependentFrames = (-53000, 16, 1) + ConstantFrames = (-53031, -53030, -53000) + ConstantRotation = (0.0013835021734055, 0.011529976186854, + 0.99993257051207, 0.28811330695433, 0.95752799265849, + -0.011439651709814, -0.95759532594806, + 0.28810970640458, -0.0019971975093594) + CkTableStartTime = 135669102.51927 + CkTableEndTime = 135669229.77585 + CkTableOriginalSize = 3601 + Description = "Created by spiceinit" + Kernels = ($odyssey/kernels/ck/m01_sc_map10.bc, + $odyssey/kernels/fk/m01_v29.tf) + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = InstrumentPosition + StartByte = 4675585 + Bytes = 336 + Records = 6 + ByteOrder = Lsb + CacheType = HermiteSpline + SpkTableStartTime = 135669102.51927 + SpkTableEndTime = 135669229.77585 + SpkTableOriginalSize = 3601.0 + Description = "Created by spiceinit" + Kernels = $odyssey/kernels/spk/m01_map10.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = BodyRotation + StartByte = 4675921 + Bytes = 128 + Records = 2 + ByteOrder = Lsb + TimeDependentFrames = (10014, 1) + CkTableStartTime = 135669102.51927 + CkTableEndTime = 135669229.77585 + CkTableOriginalSize = 2 + Description = "Created by spiceinit" + Kernels = ($base/kernels/spk/de405.bsp, + $base/kernels/pck/pck00009.tpc) + SolarLongitude = 21.755944220554 + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = SunPosition + StartByte = 4676049 + Bytes = 112 + Records = 2 + ByteOrder = Lsb + CacheType = Linear + SpkTableStartTime = 135669102.51927 + SpkTableEndTime = 135669229.77585 + SpkTableOriginalSize = 2.0 + Description = "Created by spiceinit" + Kernels = $base/kernels/spk/de405.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = CameraStatistics + StartByte = 4676161 + Bytes = 624 + Records = 12 + ByteOrder = Lsb + + Group = Field + Name = Name + Type = Text + Size = 20 + End_Group + + Group = Field + Name = Minimum + Type = Double + Size = 1 + End_Group + + Group = Field + Name = Maximum + Type = Double + Size = 1 + End_Group + + Group = Field + Name = Average + Type = Double + Size = 1 + End_Group + + Group = Field + Name = StandardDeviation + Type = Double + Size = 1 + End_Group +End_Object + +Object = History + Name = IsisCube + StartByte = 4688865 + Bytes = 4311 +End_Object + +Object = NaifKeywords + BODY499_RADII = (3396.19, 3396.19, 3376.2) + BODY_FRAME_CODE = 10014 + CLOCK_ET_-53_766864399.204_COMPUTED = a08581dc4a2ca041 + INS-53031_TRANSX = (0.0, 0.05, 0.0) + INS-53031_TRANSY = (0.0, 0.0, 0.05) + INS-53031_ITRANSS = (0.0, 20.0, 0.0) + INS-53031_ITRANSL = (0.0, 0.0, 20.0) +End_Object + +Object = Polygon + Name = Footprint + StartByte = 4676785 + Bytes = 7198 +End_Object + +Object = OriginalLabel + Name = IsisCube + StartByte = 4683983 + Bytes = 4882 +End_Object +End diff --git a/isis/tests/data/cnetedit/I18400005RDR.dstr.cub.label.pvl b/isis/tests/data/cnetedit/I18400005RDR.dstr.cub.label.pvl new file mode 100644 index 0000000000..3c7096ad62 --- /dev/null +++ b/isis/tests/data/cnetedit/I18400005RDR.dstr.cub.label.pvl @@ -0,0 +1,388 @@ +Object = IsisCube + Object = Core + StartByte = 65537 + Format = Tile + TileSamples = 320 + TileLines = 128 + + Group = Dimensions + Samples = 320 + Lines = 10768 + Bands = 1 + End_Group + + Group = Pixels + Type = Real + ByteOrder = Lsb + Base = 0.0 + Multiplier = 1.0 + End_Group + End_Object + + Group = Instrument + SpacecraftName = MARS_ODYSSEY + InstrumentId = THEMIS_IR + TargetName = MARS + MissionPhaseName = EXTENDED-1 + StartTime = 2006-02-06T08:12:21.766 + StopTime = 2006-02-06T08:18:20.703 + SpacecraftClockCount = 823680993.230 + GainNumber = 16 + OffsetNumber = 2 + MissingScanLines = 0 + TimeDelayIntegration = ENABLED + SpatialSumming = 1 + SpacecraftClockOffset = 0.0 + End_Group + + Group = Archive + DataSetId = ODY-M-THM-3-IRRDR-V1.0 + ProducerId = ODY_THM_TEAM + ProductId = I18400005RDR + ProductCreationTime = 2008-06-04T16:19:13 + ProductVersionId = 1.1 + OrbitNumber = 18400 + FlightSoftwareVersionId = 1.00 + CommandSequenceNumber = 18400 + Description = "No Description Given" + End_Group + + Group = BandBin + OriginalBand = 9 + Center = 12.57 + Width = 0.81 + FilterNumber = 9 + End_Group + + Group = Kernels + NaifFrameCode = -53031 + LeapSecond = $base/kernels/lsk/naif0009.tls + TargetAttitudeShape = $base/kernels/pck/pck00009.tpc + TargetPosition = (Table, $base/kernels/spk/de405.bsp) + InstrumentPointing = (Table, $odyssey/kernels/ck/m01_sc_ext6.bc, + $odyssey/kernels/fk/m01_v29.tf) + Instrument = Null + SpacecraftClock = $odyssey/kernels/sclk/ORB1_SCLKSCET.00184.tsc + InstrumentPosition = (Table, $odyssey/kernels/spk/m01_ext6.bsp) + InstrumentAddendum = $odyssey/kernels/iak/themisAddendum003.ti + ShapeModel = $base/dems/molaMarsPlanetaryRadius0005.cub + InstrumentPositionQuality = Reconstructed + InstrumentPointingQuality = Reconstructed + CameraVersion = 2 + End_Group +End_Object + +Object = Label + Bytes = 65536 +End_Object + +Object = Table + Name = InstrumentPointing + StartByte = 13991937 + Bytes = 9024 + Records = 141 + ByteOrder = Lsb + TimeDependentFrames = (-53000, 16, 1) + ConstantFrames = (-53031, -53030, -53000) + ConstantRotation = (0.0013835021734055, 0.011529976186854, + 0.99993257051207, 0.28811330695433, 0.95752799265849, + -0.011439651709814, -0.95759532594806, + 0.28810970640458, -0.0019971975093594) + CkTableStartTime = 192485606.20742 + CkTableEndTime = 192485972.06594 + CkTableOriginalSize = 10769 + Description = "Created by spiceinit" + Kernels = ($odyssey/kernels/ck/m01_sc_ext6.bc, + $odyssey/kernels/fk/m01_v29.tf) + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = InstrumentPosition + StartByte = 14000961 + Bytes = 1736 + Records = 31 + ByteOrder = Lsb + CacheType = HermiteSpline + SpkTableStartTime = 192485606.20742 + SpkTableEndTime = 192485972.06594 + SpkTableOriginalSize = 10769.0 + Description = "Created by spiceinit" + Kernels = $odyssey/kernels/spk/m01_ext6.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = BodyRotation + StartByte = 14002697 + Bytes = 128 + Records = 2 + ByteOrder = Lsb + TimeDependentFrames = (10014, 1) + CkTableStartTime = 192485606.20742 + CkTableEndTime = 192485972.06594 + CkTableOriginalSize = 2 + Description = "Created by spiceinit" + Kernels = ($base/kernels/spk/de405.bsp, + $base/kernels/pck/pck00009.tpc) + SolarLongitude = 7.7251945911519 + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = SunPosition + StartByte = 14002825 + Bytes = 112 + Records = 2 + ByteOrder = Lsb + CacheType = Linear + SpkTableStartTime = 192485606.20742 + SpkTableEndTime = 192485972.06594 + SpkTableOriginalSize = 2.0 + Description = "Created by spiceinit" + Kernels = $base/kernels/spk/de405.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = CameraStatistics + StartByte = 14002937 + Bytes = 624 + Records = 12 + ByteOrder = Lsb + + Group = Field + Name = Name + Type = Text + Size = 20 + End_Group + + Group = Field + Name = Minimum + Type = Double + Size = 1 + End_Group + + Group = Field + Name = Maximum + Type = Double + Size = 1 + End_Group + + Group = Field + Name = Average + Type = Double + Size = 1 + End_Group + + Group = Field + Name = StandardDeviation + Type = Double + Size = 1 + End_Group +End_Object + +Object = History + Name = IsisCube + StartByte = 14028182 + Bytes = 4311 +End_Object + +Object = NaifKeywords + BODY499_RADII = (3396.19, 3396.19, 3376.2) + BODY_FRAME_CODE = 10014 + CLOCK_ET_-53_823680993.230_COMPUTED = 68dbe1cb31f2a641 + INS-53031_TRANSX = (0.0, 0.05, 0.0) + INS-53031_TRANSY = (0.0, 0.0, 0.05) + INS-53031_ITRANSS = (0.0, 20.0, 0.0) + INS-53031_ITRANSL = (0.0, 0.0, 20.0) +End_Object + +Object = Polygon + Name = Footprint + StartByte = 14003561 + Bytes = 19582 +End_Object + +Object = OriginalLabel + Name = IsisCube + StartByte = 14023143 + Bytes = 5039 +End_Object +End diff --git a/isis/tests/data/cnetedit/I23604003RDR.dstr.cub.label.pvl b/isis/tests/data/cnetedit/I23604003RDR.dstr.cub.label.pvl new file mode 100644 index 0000000000..b71f721e2f --- /dev/null +++ b/isis/tests/data/cnetedit/I23604003RDR.dstr.cub.label.pvl @@ -0,0 +1,388 @@ +Object = IsisCube + Object = Core + StartByte = 65537 + Format = Tile + TileSamples = 320 + TileLines = 449 + + Group = Dimensions + Samples = 320 + Lines = 7184 + Bands = 1 + End_Group + + Group = Pixels + Type = Real + ByteOrder = Lsb + Base = 0.0 + Multiplier = 1.0 + End_Group + End_Object + + Group = Instrument + SpacecraftName = MARS_ODYSSEY + InstrumentId = THEMIS_IR + TargetName = MARS + MissionPhaseName = EXTENDED-1 + StartTime = 2007-04-10T19:24:04.439 + StopTime = 2007-04-10T19:28:03.903 + SpacecraftClockCount = 860700556.051 + GainNumber = 16 + OffsetNumber = 2 + MissingScanLines = 0 + TimeDelayIntegration = ENABLED + SpatialSumming = 1 + SpacecraftClockOffset = 0.0 + End_Group + + Group = Archive + DataSetId = ODY-M-THM-3-IRRDR-V1.0 + ProducerId = ODY_THM_TEAM + ProductId = I23604003RDR + ProductCreationTime = 2007-04-13T15:26:13 + ProductVersionId = 1.0 + OrbitNumber = 23604 + FlightSoftwareVersionId = 1.00 + CommandSequenceNumber = 23604 + Description = "No Description Given" + End_Group + + Group = BandBin + OriginalBand = 9 + Center = 12.57 + Width = 0.81 + FilterNumber = 9 + End_Group + + Group = Kernels + NaifFrameCode = -53031 + LeapSecond = $base/kernels/lsk/naif0009.tls + TargetAttitudeShape = $base/kernels/pck/pck00009.tpc + TargetPosition = (Table, $base/kernels/spk/de405.bsp) + InstrumentPointing = (Table, $odyssey/kernels/ck/m01_sc_ext11.bc, + $odyssey/kernels/fk/m01_v29.tf) + Instrument = Null + SpacecraftClock = $odyssey/kernels/sclk/ORB1_SCLKSCET.00184.tsc + InstrumentPosition = (Table, $odyssey/kernels/spk/m01_ext11.bsp) + InstrumentAddendum = $odyssey/kernels/iak/themisAddendum003.ti + ShapeModel = $base/dems/molaMarsPlanetaryRadius0005.cub + InstrumentPositionQuality = Reconstructed + InstrumentPointingQuality = Reconstructed + CameraVersion = 2 + End_Group +End_Object + +Object = Label + Bytes = 65536 +End_Object + +Object = Table + Name = InstrumentPointing + StartByte = 9261057 + Bytes = 3584 + Records = 56 + ByteOrder = Lsb + TimeDependentFrames = (-53000, 16, 1) + ConstantFrames = (-53031, -53030, -53000) + ConstantRotation = (0.0013835021734055, 0.011529976186854, + 0.99993257051207, 0.28811330695433, 0.95752799265849, + -0.011439651709814, -0.95759532594806, + 0.28810970640458, -0.0019971975093594) + CkTableStartTime = 229505108.63108 + CkTableEndTime = 229505355.18863 + CkTableOriginalSize = 7185 + Description = "Created by spiceinit" + Kernels = ($odyssey/kernels/ck/m01_sc_ext11.bc, + $odyssey/kernels/fk/m01_v29.tf) + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = InstrumentPosition + StartByte = 9264641 + Bytes = 896 + Records = 16 + ByteOrder = Lsb + CacheType = HermiteSpline + SpkTableStartTime = 229505108.63108 + SpkTableEndTime = 229505355.18863 + SpkTableOriginalSize = 7185.0 + Description = "Created by spiceinit" + Kernels = $odyssey/kernels/spk/m01_ext11.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = BodyRotation + StartByte = 9265537 + Bytes = 128 + Records = 2 + ByteOrder = Lsb + TimeDependentFrames = (10014, 1) + CkTableStartTime = 229505108.63108 + CkTableEndTime = 229505355.18863 + CkTableOriginalSize = 2 + Description = "Created by spiceinit" + Kernels = ($base/kernels/spk/de405.bsp, + $base/kernels/pck/pck00009.tpc) + SolarLongitude = 216.68369485425 + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = SunPosition + StartByte = 9265665 + Bytes = 112 + Records = 2 + ByteOrder = Lsb + CacheType = Linear + SpkTableStartTime = 229505108.63108 + SpkTableEndTime = 229505355.18863 + SpkTableOriginalSize = 2.0 + Description = "Created by spiceinit" + Kernels = $base/kernels/spk/de405.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = CameraStatistics + StartByte = 9265777 + Bytes = 624 + Records = 12 + ByteOrder = Lsb + + Group = Field + Name = Name + Type = Text + Size = 20 + End_Group + + Group = Field + Name = Minimum + Type = Double + Size = 1 + End_Group + + Group = Field + Name = Maximum + Type = Double + Size = 1 + End_Group + + Group = Field + Name = Average + Type = Double + Size = 1 + End_Group + + Group = Field + Name = StandardDeviation + Type = Double + Size = 1 + End_Group +End_Object + +Object = History + Name = IsisCube + StartByte = 9284827 + Bytes = 4311 +End_Object + +Object = NaifKeywords + BODY499_RADII = (3396.19, 3396.19, 3376.2) + BODY_FRAME_CODE = 10014 + CLOCK_ET_-53_860700556.051_COMPUTED = 56c4baa8f05bab41 + INS-53031_TRANSX = (0.0, 0.05, 0.0) + INS-53031_TRANSY = (0.0, 0.0, 0.05) + INS-53031_ITRANSS = (0.0, 20.0, 0.0) + INS-53031_ITRANSL = (0.0, 0.0, 20.0) +End_Object + +Object = Polygon + Name = Footprint + StartByte = 9266401 + Bytes = 13390 +End_Object + +Object = OriginalLabel + Name = IsisCube + StartByte = 9279791 + Bytes = 5036 +End_Object +End diff --git a/isis/tests/data/cnetedit/I24827003RDR.dstr.cub.label.pvl b/isis/tests/data/cnetedit/I24827003RDR.dstr.cub.label.pvl new file mode 100644 index 0000000000..82e2439cc6 --- /dev/null +++ b/isis/tests/data/cnetedit/I24827003RDR.dstr.cub.label.pvl @@ -0,0 +1,388 @@ +Object = IsisCube + Object = Core + StartByte = 65537 + Format = Tile + TileSamples = 160 + TileLines = 128 + + Group = Dimensions + Samples = 160 + Lines = 5384 + Bands = 1 + End_Group + + Group = Pixels + Type = Real + ByteOrder = Lsb + Base = 0.0 + Multiplier = 1.0 + End_Group + End_Object + + Group = Instrument + SpacecraftName = MARS_ODYSSEY + InstrumentId = THEMIS_IR + TargetName = MARS + MissionPhaseName = EXTENDED-1 + StartTime = 2007-07-20T12:06:24.995 + StopTime = 2007-07-20T12:12:23.932 + SpacecraftClockCount = 869400711.102 + GainNumber = 16 + OffsetNumber = 2 + MissingScanLines = 0 + TimeDelayIntegration = ENABLED + SpatialSumming = 2 + SpacecraftClockOffset = 0.0 + End_Group + + Group = Archive + DataSetId = ODY-M-THM-3-IRRDR-V1.0 + ProducerId = ODY_THM_TEAM + ProductId = I24827003RDR + ProductCreationTime = 2008-01-04T17:31:37 + ProductVersionId = 1.0 + OrbitNumber = 24827 + FlightSoftwareVersionId = 1.00 + CommandSequenceNumber = 24827 + Description = "No Description Given" + End_Group + + Group = BandBin + OriginalBand = 7 + Center = 12.57 + Width = 0.81 + FilterNumber = 9 + End_Group + + Group = Kernels + NaifFrameCode = -53031 + LeapSecond = $base/kernels/lsk/naif0009.tls + TargetAttitudeShape = $base/kernels/pck/pck00009.tpc + TargetPosition = (Table, $base/kernels/spk/de405.bsp) + InstrumentPointing = (Table, $odyssey/kernels/ck/m01_sc_ext12.bc, + $odyssey/kernels/fk/m01_v29.tf) + Instrument = Null + SpacecraftClock = $odyssey/kernels/sclk/ORB1_SCLKSCET.00184.tsc + InstrumentPosition = (Table, $odyssey/kernels/spk/m01_ext12.bsp) + InstrumentAddendum = $odyssey/kernels/iak/themisAddendum003.ti + ShapeModel = $base/dems/molaMarsPlanetaryRadius0005.cub + InstrumentPositionQuality = Reconstructed + InstrumentPointingQuality = Reconstructed + CameraVersion = 2 + End_Group +End_Object + +Object = Label + Bytes = 65536 +End_Object + +Object = Table + Name = InstrumentPointing + StartByte = 3588097 + Bytes = 5504 + Records = 86 + ByteOrder = Lsb + TimeDependentFrames = (-53000, 16, 1) + ConstantFrames = (-53031, -53030, -53000) + ConstantRotation = (0.0013835021734055, 0.011529976186854, + 0.99993257051207, 0.28811330695433, 0.95752799265849, + -0.011439651709814, -0.95759532594806, + 0.28810970640458, -0.0019971975093594) + CkTableStartTime = 238205250.8296 + CkTableEndTime = 238205615.29006 + CkTableOriginalSize = 5385 + Description = "Created by spiceinit" + Kernels = ($odyssey/kernels/ck/m01_sc_ext12.bc, + $odyssey/kernels/fk/m01_v29.tf) + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = InstrumentPosition + StartByte = 3593601 + Bytes = 728 + Records = 13 + ByteOrder = Lsb + CacheType = HermiteSpline + SpkTableStartTime = 238205250.8296 + SpkTableEndTime = 238205615.29006 + SpkTableOriginalSize = 5385.0 + Description = "Created by spiceinit" + Kernels = $odyssey/kernels/spk/m01_ext12.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = BodyRotation + StartByte = 3594329 + Bytes = 128 + Records = 2 + ByteOrder = Lsb + TimeDependentFrames = (10014, 1) + CkTableStartTime = 238205250.8296 + CkTableEndTime = 238205615.29006 + CkTableOriginalSize = 2 + Description = "Created by spiceinit" + Kernels = ($base/kernels/spk/de405.bsp, + $base/kernels/pck/pck00009.tpc) + SolarLongitude = 280.0343296642 + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = SunPosition + StartByte = 3594457 + Bytes = 112 + Records = 2 + ByteOrder = Lsb + CacheType = Linear + SpkTableStartTime = 238205250.8296 + SpkTableEndTime = 238205615.29006 + SpkTableOriginalSize = 2.0 + Description = "Created by spiceinit" + Kernels = $base/kernels/spk/de405.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = CameraStatistics + StartByte = 3594569 + Bytes = 624 + Records = 12 + ByteOrder = Lsb + + Group = Field + Name = Name + Type = Text + Size = 20 + End_Group + + Group = Field + Name = Minimum + Type = Double + Size = 1 + End_Group + + Group = Field + Name = Maximum + Type = Double + Size = 1 + End_Group + + Group = Field + Name = Average + Type = Double + Size = 1 + End_Group + + Group = Field + Name = StandardDeviation + Type = Double + Size = 1 + End_Group +End_Object + +Object = History + Name = IsisCube + StartByte = 3609866 + Bytes = 4311 +End_Object + +Object = NaifKeywords + BODY499_RADII = (3396.19, 3396.19, 3376.2) + BODY_FRAME_CODE = 10014 + CLOCK_ET_-53_869400711.102_COMPUTED = b79a54827265ac41 + INS-53031_TRANSX = (0.0, 0.05, 0.0) + INS-53031_TRANSY = (0.0, 0.0, 0.05) + INS-53031_ITRANSS = (0.0, 20.0, 0.0) + INS-53031_ITRANSL = (0.0, 0.0, 20.0) +End_Object + +Object = Polygon + Name = Footprint + StartByte = 3595193 + Bytes = 9864 +End_Object + +Object = OriginalLabel + Name = IsisCube + StartByte = 3605057 + Bytes = 4809 +End_Object +End diff --git a/isis/tests/data/cnetedit/PSP_002733_1880_RED4.crop.pvl b/isis/tests/data/cnetedit/PSP_002733_1880_RED4.crop.pvl new file mode 100644 index 0000000000..945a054912 --- /dev/null +++ b/isis/tests/data/cnetedit/PSP_002733_1880_RED4.crop.pvl @@ -0,0 +1,518 @@ +Object = IsisCube + Object = Core + StartByte = 65537 + Format = Tile + TileSamples = 128 + TileLines = 128 + + Group = Dimensions + Samples = 2048 + Lines = 2000 + Bands = 1 + End_Group + + Group = Pixels + Type = Real + ByteOrder = Lsb + Base = 0.0 + Multiplier = 1.0 + End_Group + End_Object + + Group = Instrument + SpacecraftName = "MARS RECONNAISSANCE ORBITER" + InstrumentId = HIRISE + TargetName = Mars + StartTime = 2007-02-25T09:49:57.917 + StopTime = 2007-02-25T09:50:04.917 + ObservationStartCount = 856864216:41044 + SpacecraftClockStartCount = 856864216:53351 + SpacecraftClockStopCount = 856864223:53351 + ReadoutStartCount = 856864468:00780 + CalibrationStartTime = 2007-02-25T09:49:57.902 + CalibrationStartCount = 856864216:52387 + MissionPhaseName = "PRIMARY SCIENCE PHASE" + LineExposureDuration = 87.5000 + ScanExposureDuration = 87.5000 + DeltaLineTimerCount = 216 + Summing = 1 + Tdi = 128 + FocusPositionCount = 2023 + PoweredCpmmFlag = (On, On, On, On, On, On, On, On, On, On, On, + On, On, On) + CpmmNumber = 5 + CcdId = RED4 + ChannelNumber = 2 + LookupTableType = Stored + LookupTableNumber = 10 + LookupTableMinimum = -9998 + LookupTableMaximum = -9998 + LookupTableMedian = -9998 + LookupTableKValue = -9998 + StimulationLampFlag = (Off, Off, Off) + HeaterControlFlag = (On, On, On, On, On, On, On, On, On, On, On, + On, On, On) + OptBnchFlexureTemperature = 20.0215 + OptBnchMirrorTemperature = 20.1082 + OptBnchFoldFlatTemperature = 20.3683 + OptBnchFpaTemperature = 19.7615 + OptBnchFpeTemperature = 19.5881 + OptBnchLivingRmTemperature = 20.0215 + OptBnchBoxBeamTemperature = 20.1949 + OptBnchCoverTemperature = 19.9348 + FieldStopTemperature = 18.4616 + FpaPositiveYTemperature = 19.5881 + FpaNegativeYTemperature = 19.5881 + FpeTemperature = 17.7686 + PrimaryMirrorMntTemperature = 20.1082 + PrimaryMirrorTemperature = 20.455 + PrimaryMirrorBafTemperature = 3.34153 + MsTrussLeg0ATemperature = 19.8482 + MsTrussLeg0BTemperature = 19.9348 + MsTrussLeg120ATemperature = 19.4148 + MsTrussLeg120BTemperature = 20.1949 + MsTrussLeg240ATemperature = 20.5417 + MsTrussLeg240BTemperature = 20.6284 + BarrelBaffleTemperature = -12.4606 + SunShadeTemperature = -14.001 + SpiderLeg30Temperature = 16.1233 + SpiderLeg120Temperature = -9999 + SpiderLeg240Temperature = -9999 + SecMirrorMtrRngTemperature = 19.7615 + SecMirrorTemperature = 20.8885 + SecMirrorBaffleTemperature = -9.71965 + IeaTemperature = 25.9221 + FocusMotorTemperature = 21.3221 + IePwsBoardTemperature = 17.8502 + CpmmPwsBoardTemperature = 21.4948 + MechTlmBoardTemperature = 35.1464 + InstContBoardTemperature = 34.6875 + DllLockedFlag = (YES, YES) + DllResetCount = 0 + DllLockedOnceFlag = (YES, YES) + DllFrequenceCorrectCount = 4 + ADCTimingSetting = -9999 + Unlutted = TRUE + StitchedChannels = (0, 1) + StitchedProductIds = (PSP_002733_1880_RED4_0, + PSP_002733_1880_RED4_1) + End_Group + + Group = Archive + DataSetId = MRO-M-HIRISE-2-EDR-V1.0 + ProducerId = UA + ObservationId = PSP_002733_1880 + ProductId = PSP_002733_1880_RED4_0 + ProductVersionId = 1.0 + EdrProductCreationTime = 2007-02-25T22:21:23 + RationaleDescription = Null + OrbitNumber = 2733 + SoftwareName = "HiRISE_Observation v2.9.1 (2.43 2006/10/0 + 05:41:12)" + ObservationStartTime = 2007-02-25T09:49:57.729 + ReadoutStartTime = 2007-02-25T09:54:09.115 + TrimLines = 1797 + FelicsCompressionFlag = YES + IdFlightSoftwareName = IE_FSW_V4 + End_Group + + Group = BandBin + Name = Red + Center = 700 + Width = 300 + End_Group + + Group = Kernels + NaifIkCode = -74699 + LeapSecond = $base/kernels/lsk/naif0009.tls + TargetAttitudeShape = $base/kernels/pck/pck00009.tpc + TargetPosition = (Table, $base/kernels/spk/de405.bsp) + InstrumentPointing = (Table, + $mro/kernels/ck/mro_sc_psp_070220_070226.bc, + $mro/kernels/fk/mro_v14.tf) + Instrument = $mro/kernels/ik/mro_hirise_v11.ti + SpacecraftClock = $mro/kernels/sclk/MRO_SCLKSCET.00038.65536.tsc + InstrumentPosition = (Table, $mro/kernels/spk/mro_psp2.bsp) + InstrumentAddendum = $mro/kernels/iak/hiriseAddendum006.ti + ShapeModel = Null + InstrumentPositionQuality = Reconstructed + InstrumentPointingQuality = Reconstructed + CameraVersion = 1 + End_Group + + Group = Radiometry + CalibrationParameters = (OFFSET:/HiRISE/Data/HiCalCoefficients/Matrices/B- + _TDI128_BIN1_0001.cub, + GAIN:/HiRISE/Data/HiCalCoefficients/Matrices/A_TD- + I128_BIN1_0001.cub, + GAIN:/HiRISE/Data/HiCalCoefficients/Matrices/G_TD- + I128_BIN1_0001.cub) + End_Group + + Group = AlphaCube + AlphaSamples = 2048 + AlphaLines = 80000 + AlphaStartingSample = 0.5 + AlphaStartingLine = 0.5 + AlphaEndingSample = 2048.5 + AlphaEndingLine = 2000.5 + BetaSamples = 2048 + BetaLines = 2000 + End_Group + + Group = RadiometricCalibration + Name = hiclean + Version = 1.4.1 + Compatability = "Alan D. clean.pro, version 2/29 sep 2006" + Revision = "$Revision: 1.3 $" + MaskStartingRow = 21 + MaskEndingRow = 38 + BadMaskPixels = 0 + MaskInducedNulls = 0 + DarkStartingColumn = 4 + DarkEndingColumn = 11 + BadDarkPixels = 0 + DarkInducedNulls = 0 + LastGoodLine = 80000 + End_Group +End_Object + +Object = Label + Bytes = 65536 +End_Object + +Object = Table + Name = "HiRISE Calibration Ancillary" + StartByte = 8454145 + Bytes = 20160 + Records = 168 + ByteOrder = Lsb + + Group = Field + Name = GapFlag + Type = Integer + Size = 1 + End_Group + + Group = Field + Name = LineNumber + Type = Integer + Size = 1 + End_Group + + Group = Field + Name = BufferPixels + Type = Integer + Size = 12 + End_Group + + Group = Field + Name = DarkPixels + Type = Integer + Size = 16 + End_Group +End_Object + +Object = Table + Name = "HiRISE Calibration Image" + StartByte = 8474305 + Bytes = 688128 + Records = 168 + ByteOrder = Lsb + + Group = Field + Name = Calibration + Type = Integer + Size = 1024 + End_Group +End_Object + +Object = Table + Name = "HiRISE Ancillary" + StartByte = 9162433 + Bytes = 9600000 + Records = 80000 + ByteOrder = Lsb + Association = Lines + + Group = Field + Name = GapFlag + Type = Integer + Size = 1 + End_Group + + Group = Field + Name = LineNumber + Type = Integer + Size = 1 + End_Group + + Group = Field + Name = BufferPixels + Type = Integer + Size = 12 + End_Group + + Group = Field + Name = DarkPixels + Type = Integer + Size = 16 + End_Group +End_Object + +Object = Table + Name = InstrumentPointing + StartByte = 18762433 + Bytes = 256 + Records = 4 + ByteOrder = Lsb + TimeDependentFrames = (-74000, -74900, 1) + ConstantFrames = (-74690, -74000) + ConstantRotation = (0.9999703083413, 0.0, -0.0077059999872177, + 8.81584889031119e-06, 0.99999934560434, + 0.0011439900269605, 0.0077059949444447, + -0.0011440239949305, 0.99996965396507) + CkTableStartTime = 225669063.07843 + CkTableEndTime = 225669063.25343 + CkTableOriginalSize = 2001 + Description = "Created by spiceinit" + Kernels = ($mro/kernels/ck/mro_sc_psp_070220_070226.bc, + $mro/kernels/fk/mro_v14.tf) + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = InstrumentPosition + StartByte = 21962473 + Bytes = 168 + Records = 3 + ByteOrder = Lsb + CacheType = HermiteSpline + Description = "Created by spiceinit" + Kernels = $mro/kernels/spk/mro_psp2.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = BodyRotation + StartByte = 24522505 + Bytes = 128 + Records = 2 + ByteOrder = Lsb + TimeDependentFrames = (10014, 1) + CkTableStartTime = 225669063.07843 + CkTableEndTime = 225669063.25343 + CkTableOriginalSize = 2 + Description = "Created by spiceinit" + Kernels = ($base/kernels/spk/de405.bsp, + $base/kernels/pck/pck00009.tpc) + SolarLongitude = 190.08669942814 + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = SunPosition + StartByte = 27722545 + Bytes = 112 + Records = 2 + ByteOrder = Lsb + CacheType = Linear + Description = "Created by spiceinit" + Kernels = $base/kernels/spk/de405.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = History + Name = IsisCube + StartByte = 30373328 + Bytes = 14212 +End_Object + +Object = OriginalLabel + Name = OriginalLabel + StartByte = 30282577 + Bytes = 30940 +End_Object + +Object = Polygon + Name = Footprint + StartByte = 30369908 + Bytes = 3420 +End_Object +End diff --git a/isis/tests/data/cnetedit/PSP_002733_1880_RED5.crop.pvl b/isis/tests/data/cnetedit/PSP_002733_1880_RED5.crop.pvl new file mode 100644 index 0000000000..683e0d6085 --- /dev/null +++ b/isis/tests/data/cnetedit/PSP_002733_1880_RED5.crop.pvl @@ -0,0 +1,518 @@ +Object = IsisCube + Object = Core + StartByte = 65537 + Format = Tile + TileSamples = 128 + TileLines = 128 + + Group = Dimensions + Samples = 2048 + Lines = 2000 + Bands = 1 + End_Group + + Group = Pixels + Type = Real + ByteOrder = Lsb + Base = 0.0 + Multiplier = 1.0 + End_Group + End_Object + + Group = Instrument + SpacecraftName = "MARS RECONNAISSANCE ORBITER" + InstrumentId = HIRISE + TargetName = Mars + StartTime = 2007-02-25T09:49:57.866 + StopTime = 2007-02-25T09:50:04.866 + ObservationStartCount = 856864216:41044 + SpacecraftClockStartCount = 856864216:50008 + SpacecraftClockStopCount = 856864223:50008 + ReadoutStartCount = 856864554:12778 + CalibrationStartTime = 2007-02-25T09:49:57.851 + CalibrationStartCount = 856864216:49044 + MissionPhaseName = "PRIMARY SCIENCE PHASE" + LineExposureDuration = 87.5000 + ScanExposureDuration = 87.5000 + DeltaLineTimerCount = 216 + Summing = 1 + Tdi = 128 + FocusPositionCount = 2023 + PoweredCpmmFlag = (On, On, On, On, On, On, On, On, On, On, On, + On, On, On) + CpmmNumber = 8 + CcdId = RED5 + ChannelNumber = 2 + LookupTableType = Stored + LookupTableNumber = 17 + LookupTableMinimum = -9998 + LookupTableMaximum = -9998 + LookupTableMedian = -9998 + LookupTableKValue = -9998 + StimulationLampFlag = (Off, Off, Off) + HeaterControlFlag = (On, On, On, On, On, On, On, On, On, On, On, + On, On, On) + OptBnchFlexureTemperature = 20.0215 + OptBnchMirrorTemperature = 20.1082 + OptBnchFoldFlatTemperature = 20.3683 + OptBnchFpaTemperature = 19.7615 + OptBnchFpeTemperature = 19.5881 + OptBnchLivingRmTemperature = 20.0215 + OptBnchBoxBeamTemperature = 20.1949 + OptBnchCoverTemperature = 19.9348 + FieldStopTemperature = 18.4616 + FpaPositiveYTemperature = 19.5881 + FpaNegativeYTemperature = 19.5881 + FpeTemperature = 17.7686 + PrimaryMirrorMntTemperature = 20.1082 + PrimaryMirrorTemperature = 20.455 + PrimaryMirrorBafTemperature = 3.34153 + MsTrussLeg0ATemperature = 19.8482 + MsTrussLeg0BTemperature = 19.9348 + MsTrussLeg120ATemperature = 19.4148 + MsTrussLeg120BTemperature = 20.1949 + MsTrussLeg240ATemperature = 20.5417 + MsTrussLeg240BTemperature = 20.6284 + BarrelBaffleTemperature = -12.4606 + SunShadeTemperature = -14.001 + SpiderLeg30Temperature = 16.1233 + SpiderLeg120Temperature = -9999 + SpiderLeg240Temperature = -9999 + SecMirrorMtrRngTemperature = 19.7615 + SecMirrorTemperature = 20.8885 + SecMirrorBaffleTemperature = -9.71965 + IeaTemperature = 25.9221 + FocusMotorTemperature = 21.3221 + IePwsBoardTemperature = 17.8502 + CpmmPwsBoardTemperature = 21.4948 + MechTlmBoardTemperature = 35.1464 + InstContBoardTemperature = 34.6875 + DllLockedFlag = (YES, YES) + DllResetCount = 0 + DllLockedOnceFlag = (YES, YES) + DllFrequenceCorrectCount = 4 + ADCTimingSetting = -9999 + Unlutted = TRUE + StitchedChannels = (0, 1) + StitchedProductIds = (PSP_002733_1880_RED5_0, + PSP_002733_1880_RED5_1) + End_Group + + Group = Archive + DataSetId = MRO-M-HIRISE-2-EDR-V1.0 + ProducerId = UA + ObservationId = PSP_002733_1880 + ProductId = PSP_002733_1880_RED5_0 + ProductVersionId = 1.0 + EdrProductCreationTime = 2007-02-25T22:27:25 + RationaleDescription = Null + OrbitNumber = 2733 + SoftwareName = "HiRISE_Observation v2.9.1 (2.43 2006/10/0 + 05:41:12)" + ObservationStartTime = 2007-02-25T09:49:57.729 + ReadoutStartTime = 2007-02-25T09:55:35.298 + TrimLines = 1214 + FelicsCompressionFlag = YES + IdFlightSoftwareName = IE_FSW_V4 + End_Group + + Group = BandBin + Name = Red + Center = 700 + Width = 300 + End_Group + + Group = Kernels + NaifIkCode = -74699 + LeapSecond = $base/kernels/lsk/naif0009.tls + TargetAttitudeShape = $base/kernels/pck/pck00009.tpc + TargetPosition = (Table, $base/kernels/spk/de405.bsp) + InstrumentPointing = (Table, + $mro/kernels/ck/mro_sc_psp_070220_070226.bc, + $mro/kernels/fk/mro_v14.tf) + Instrument = $mro/kernels/ik/mro_hirise_v11.ti + SpacecraftClock = $mro/kernels/sclk/MRO_SCLKSCET.00038.65536.tsc + InstrumentPosition = (Table, $mro/kernels/spk/mro_psp2.bsp) + InstrumentAddendum = $mro/kernels/iak/hiriseAddendum006.ti + ShapeModel = Null + InstrumentPositionQuality = Reconstructed + InstrumentPointingQuality = Reconstructed + CameraVersion = 1 + End_Group + + Group = Radiometry + CalibrationParameters = (OFFSET:/HiRISE/Data/HiCalCoefficients/Matrices/B- + _TDI128_BIN1_0001.cub, + GAIN:/HiRISE/Data/HiCalCoefficients/Matrices/A_TD- + I128_BIN1_0001.cub, + GAIN:/HiRISE/Data/HiCalCoefficients/Matrices/G_TD- + I128_BIN1_0001.cub) + End_Group + + Group = AlphaCube + AlphaSamples = 2048 + AlphaLines = 80000 + AlphaStartingSample = 0.5 + AlphaStartingLine = 0.5 + AlphaEndingSample = 2048.5 + AlphaEndingLine = 2000.5 + BetaSamples = 2048 + BetaLines = 2000 + End_Group + + Group = RadiometricCalibration + Name = hiclean + Version = 1.4.1 + Compatability = "Alan D. clean.pro, version 2/29 sep 2006" + Revision = "$Revision: 1.3 $" + MaskStartingRow = 21 + MaskEndingRow = 38 + BadMaskPixels = 0 + MaskInducedNulls = 0 + DarkStartingColumn = 4 + DarkEndingColumn = 11 + BadDarkPixels = 0 + DarkInducedNulls = 0 + LastGoodLine = 80000 + End_Group +End_Object + +Object = Label + Bytes = 65536 +End_Object + +Object = Table + Name = "HiRISE Calibration Ancillary" + StartByte = 8454145 + Bytes = 20160 + Records = 168 + ByteOrder = Lsb + + Group = Field + Name = GapFlag + Type = Integer + Size = 1 + End_Group + + Group = Field + Name = LineNumber + Type = Integer + Size = 1 + End_Group + + Group = Field + Name = BufferPixels + Type = Integer + Size = 12 + End_Group + + Group = Field + Name = DarkPixels + Type = Integer + Size = 16 + End_Group +End_Object + +Object = Table + Name = "HiRISE Calibration Image" + StartByte = 8474305 + Bytes = 688128 + Records = 168 + ByteOrder = Lsb + + Group = Field + Name = Calibration + Type = Integer + Size = 1024 + End_Group +End_Object + +Object = Table + Name = "HiRISE Ancillary" + StartByte = 9162433 + Bytes = 9600000 + Records = 80000 + ByteOrder = Lsb + Association = Lines + + Group = Field + Name = GapFlag + Type = Integer + Size = 1 + End_Group + + Group = Field + Name = LineNumber + Type = Integer + Size = 1 + End_Group + + Group = Field + Name = BufferPixels + Type = Integer + Size = 12 + End_Group + + Group = Field + Name = DarkPixels + Type = Integer + Size = 16 + End_Group +End_Object + +Object = Table + Name = InstrumentPointing + StartByte = 18762433 + Bytes = 256 + Records = 4 + ByteOrder = Lsb + TimeDependentFrames = (-74000, -74900, 1) + ConstantFrames = (-74690, -74000) + ConstantRotation = (0.9999703083413, 0.0, -0.0077059999872177, + 8.81584889031119e-06, 0.99999934560434, + 0.0011439900269605, 0.0077059949444447, + -0.0011440239949305, 0.99996965396507) + CkTableStartTime = 225669063.02742 + CkTableEndTime = 225669063.20242 + CkTableOriginalSize = 2001 + Description = "Created by spiceinit" + Kernels = ($mro/kernels/ck/mro_sc_psp_070220_070226.bc, + $mro/kernels/fk/mro_v14.tf) + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = InstrumentPosition + StartByte = 21962473 + Bytes = 168 + Records = 3 + ByteOrder = Lsb + CacheType = HermiteSpline + Description = "Created by spiceinit" + Kernels = $mro/kernels/spk/mro_psp2.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = BodyRotation + StartByte = 24522505 + Bytes = 128 + Records = 2 + ByteOrder = Lsb + TimeDependentFrames = (10014, 1) + CkTableStartTime = 225669063.02742 + CkTableEndTime = 225669063.20242 + CkTableOriginalSize = 2 + Description = "Created by spiceinit" + Kernels = ($base/kernels/spk/de405.bsp, + $base/kernels/pck/pck00009.tpc) + SolarLongitude = 190.08669908562 + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = SunPosition + StartByte = 27722545 + Bytes = 112 + Records = 2 + ByteOrder = Lsb + CacheType = Linear + Description = "Created by spiceinit" + Kernels = $base/kernels/spk/de405.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = History + Name = IsisCube + StartByte = 30373330 + Bytes = 14212 +End_Object + +Object = OriginalLabel + Name = OriginalLabel + StartByte = 30282577 + Bytes = 30942 +End_Object + +Object = Polygon + Name = Footprint + StartByte = 30369910 + Bytes = 3420 +End_Object +End diff --git a/isis/tests/data/cnetedit/cnet_108pts.pvl b/isis/tests/data/cnetedit/cnet_108pts.pvl new file mode 100644 index 0000000000..a9dfed4a99 --- /dev/null +++ b/isis/tests/data/cnetedit/cnet_108pts.pvl @@ -0,0 +1,3238 @@ +Object = ControlNetwork + NetworkId = NewNetwork + TargetName = Mars + UserName = caustin + Created = Null + LastModified = Null + Description = NewNetwork + Version = 5 + + Object = ControlPoint + PointType = Free + PointId = new0001 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:31 + Sample = 11.002362806422 + Line = 422.04915727097 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:31 + Sample = 1.6628550989635 + Line = 328.45336149322 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0002 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:31 + Sample = 18.215874334214 + Line = 442.29284754422 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:31 + Sample = 8.9231888331417 + Line = 348.63944344774 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0003 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 472.66293186489 + Line = 286.5028408727 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 462.63180582145 + Line = 180.62363048896 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0004 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 475.15468487065 + Line = 306.89233376838 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 465.1316930521 + Line = 200.92276750532 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0005 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 477.53757440886 + Line = 327.46214256434 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 467.5550525596 + Line = 221.38613187076 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0006 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 480.23040562098 + Line = 347.48594461527 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 470.2565958944 + Line = 241.37444692109 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0007 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 215.83286033802 + Line = 386.11449945343 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 205.84205510189 + Line = 280.15987230805 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0008 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 27.52772891931 + Line = 399.43869629082 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 18.020527100954 + Line = 293.55619563515 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0009 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 66.029356641932 + Line = 396.51994976475 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 56.3928897278 + Line = 290.62638349716 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0010 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 104.71454341575 + Line = 393.57978828151 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 94.960468344733 + Line = 287.67316516766 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0011 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 143.55456618838 + Line = 390.80933654525 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 133.69928982239 + Line = 284.88669857134 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0012 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 182.45221586379 + Line = 388.25314334373 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 172.51638102427 + Line = 282.3135842755 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0013 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 218.33345803397 + Line = 406.43165385853 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 208.3637100796 + Line = 300.45509221498 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0014 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 257.10788297379 + Line = 403.92827127584 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 247.09425026747 + Line = 297.93934590851 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0015 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 295.81013351473 + Line = 401.07147464254 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 285.76108663093 + Line = 295.07114770209 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0016 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 334.2409901193 + Line = 398.61327555411 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 324.1817366712 + Line = 292.60034187579 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0017 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 372.38481470749 + Line = 396.21013151637 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 362.33270246833 + Line = 290.18438687577 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0018 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 410.2841487475 + Line = 393.63779838354 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 400.24906215823 + Line = 287.59640437607 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0019 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 447.11346910145 + Line = 392.3965595217 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 437.1398375913 + Line = 286.3359479599 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0020 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 35.314504786338 + Line = 419.37682721863 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 25.789877685118 + Line = 313.45441568757 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0021 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 73.879724569268 + Line = 416.510362235 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 64.230148841699 + Line = 310.5769812793 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0022 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 112.59354536983 + Line = 413.53082913619 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 102.83112890233 + Line = 307.58674074819 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0023 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 151.47688688712 + Line = 410.97993475279 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 141.6258655717 + Line = 305.02378286756 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0024 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 190.36508552431 + Line = 408.17893239589 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 180.43582455199 + Line = 302.21139421271 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0025 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 220.81867088281 + Line = 426.99739584839 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 210.86181154898 + Line = 320.98301723143 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0026 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 259.62261193082 + Line = 424.18225627403 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 249.6163909158 + Line = 318.15668410401 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0027 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 298.30899741076 + Line = 421.42519521595 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 288.27100255896 + Line = 315.38818888577 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0028 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 336.67502325167 + Line = 419.15164091881 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 326.63233739384 + Line = 313.10171234904 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0029 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 374.8088274976 + Line = 416.71043920798 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 364.77378781645 + Line = 310.64804045112 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0030 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 412.7433497737 + Line = 414.01320951525 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 402.72610762286 + Line = 307.93903526759 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0031 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + Ignore = True + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 449.39753091028 + Line = 413.04779127673 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 439.45072383102 + Line = 306.9568034164 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0032 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + Ignore = True + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 43.464883969992 + Line = 439.2597477519 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 33.785100683671 + Line = 333.44372186509 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0033 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 82.031381315359 + Line = 436.43090829286 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 72.267021555104 + Line = 330.56192690454 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0034 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 120.7671638813 + Line = 433.67673785268 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 110.93424436092 + Line = 327.75725841392 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0035 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 159.61329195052 + Line = 431.1786289072 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 149.72990151882 + Line = 325.21286995747 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0036 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 198.45415035333 + Line = 428.54785222778 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 188.53108510233 + Line = 322.54050296699 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0037 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 223.56671055391 + Line = 447.23228271631 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 213.3680193192 + Line = 341.41565776505 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0038 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Ignore = True + Sample = 262.29151761831 + Line = 444.69748447539 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 252.07974106094 + Line = 338.82993376889 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0039 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Ignore = True + Sample = 300.89010791282 + Line = 442.0620807151 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Ignore = True + Sample = 290.68547871004 + Line = 336.1462253802 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0040 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 339.25760065483 + Line = 439.57228386989 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 329.07862766947 + Line = 333.61118699507 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0041 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 377.34966143085 + Line = 437.1164701152 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 367.21318088003 + Line = 331.11187899492 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0042 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 415.17157257786 + Line = 434.56008250241 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 405.09296772439 + Line = 328.51259675658 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0043 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 451.89397453419 + Line = 433.37769193293 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 441.8988274385 + Line = 327.29998051101 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0044 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 13.541454340573 + Line = 461.87473795926 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 3.7137561540906 + Line = 356.38113613293 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0045 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 51.938895574767 + Line = 459.03122322641 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 42.006442017098 + Line = 353.47159461034 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0046 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 90.558527581699 + Line = 456.27310299719 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 80.537235545132 + Line = 350.65073017945 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0047 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 129.35190059662 + Line = 453.78121391638 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 119.26018439067 + Line = 348.10145811183 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0048 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 168.16802368972 + Line = 451.12751290768 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 158.02073803666 + Line = 345.39039327971 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0049 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 206.99014030732 + Line = 448.4386990938 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 196.80364235828 + Line = 342.64586897144 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0050 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 226.33117866633 + Line = 467.58759283332 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 215.89971074881 + Line = 362.00972482935 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0051 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 265.04255741077 + Line = 465.02110268501 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 254.59646415154 + Line = 359.3840500572 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0052 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 303.6479954802 + Line = 462.28151086847 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 293.20268982868 + Line = 356.58540905665 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0053 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 341.99675884552 + Line = 459.81323396253 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 331.57208539356 + Line = 354.0629701884 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0054 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 380.03388251292 + Line = 457.45503614473 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 369.64769313335 + Line = 351.65357406926 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0055 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 417.92282628311 + Line = 454.70389565052 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 407.58769130151 + Line = 348.84939882781 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0056 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 454.63786374006 + Line = 453.49883330126 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 444.38378805588 + Line = 347.60710671977 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0057 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 60.62584221893 + Line = 478.85864591418 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 50.446464870616 + Line = 373.56602044442 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0058 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 99.30081884234 + Line = 476.2538782229 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 89.038905243482 + Line = 370.88698959096 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0059 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 138.07605197639 + Line = 473.63373806196 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 127.74358623113 + Line = 368.2004283557 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0060 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 176.8933393194 + Line = 470.97641350486 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 166.50656130793 + Line = 365.47824912369 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0061 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 382.75999557669 + Line = 477.68493710411 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 372.13679566215 + Line = 372.08901208852 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0062 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 420.52829813638 + Line = 475.15133662178 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 409.95804420569 + Line = 369.49666811078 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0063 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 457.72885192594 + Line = 472.99638403268 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 447.23100437209 + Line = 367.28844933244 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0064 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + Ignore = True + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 457.6304846974 + Line = 75.398182723679 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 474.83447903502 + Line = 275.12751002867 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 467.5225551724 + Line = 180.99580115403 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0065 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + Ignore = True + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Ignore = True + Sample = 460.01225255037 + Line = 95.876800782756 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 477.187963359 + Line = 295.70367014835 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 469.89397574436 + Line = 201.56542498155 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0066 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + Ignore = True + Sample = 462.35208428959 + Line = 116.36800076912 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 479.53352230593 + Line = 316.30088843423 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 472.25532228181 + Line = 222.14816684858 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0067 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Ignore = True + Sample = 33.04943477971 + Line = 207.64538731051 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Ignore = True + Sample = 51.932170047058 + Line = 407.05378039341 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 42.658880082357 + Line = 313.39222000341 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0068 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + Ignore = True + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Ignore = True + Sample = 205.19224208483 + Line = 215.86245786587 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Ignore = True + Sample = 223.96005623139 + Line = 415.65437180684 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Ignore = True + Sample = 215.20985155685 + Line = 321.75094064898 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0069 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 243.95950172752 + Line = 213.20782099833 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 262.61831136631 + Line = 413.06490335698 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 254.02897765876 + Line = 319.10606841165 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0070 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 282.60854604844 + Line = 210.59602015523 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 301.12588456368 + Line = 410.51802995416 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 292.71249261284 + Line = 316.50416245431 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0071 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 321.08280074311 + Line = 207.99772219339 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 339.42576541018 + Line = 407.98462619752 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 331.20451888514 + Line = 313.91571346014 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0072 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 1.9318287545343 + Line = 230.65251394295 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 20.71510390822 + Line = 430.09779971251 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 11.405115857796 + Line = 336.47098191308 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0073 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 40.197992724746 + Line = 227.68227481392 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 59.052790658398 + Line = 427.19368883739 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 49.80843138117 + Line = 333.51818027174 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0074 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 78.757251487916 + Line = 224.96602512573 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 97.641116971002 + Line = 424.54430570307 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 88.485503730667 + Line = 330.82014340192 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0075 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 117.41224012231 + Line = 222.00785504853 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 136.30405378312 + Line = 421.65134801753 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 127.24974189508 + Line = 327.87463218332 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0076 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 156.19715775607 + Line = 219.1575052782 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 175.06015908186 + Line = 418.86624970626 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 166.1273508863 + Line = 325.03317358112 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0077 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 207.75060818821 + Line = 236.31923835468 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 226.46286346465 + Line = 436.21338827757 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 217.7516603177 + Line = 342.26911316279 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0078 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 246.50250756643 + Line = 233.71853580313 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 265.10091571913 + Line = 433.67996341343 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 256.55019021969 + Line = 339.68698873763 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0079 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 285.14809915517 + Line = 231.03857862623 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 303.6055342191 + Line = 431.06639750112 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 295.22768092533 + Line = 337.02545730574 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0080 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 323.60491818759 + Line = 228.4488703099 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 341.88795040063 + Line = 428.54310007565 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 333.69790889885 + Line = 334.45447746053 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0081 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 361.7423801317 + Line = 226.10177726401 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 379.8128437515 + Line = 426.26329064209 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 371.82708581589 + Line = 332.1268065637 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0082 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 399.61875568541 + Line = 223.62261082721 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 417.45549129239 + Line = 423.8502381098 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 409.68217002062 + Line = 329.66676251229 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0083 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 437.07471263846 + Line = 221.28466899767 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 454.64731647662 + Line = 421.57876031021 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 447.10042792123 + Line = 327.34107303664 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0084 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 9.2728348419828 + Line = 250.86120472502 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 28.03228422598 + Line = 450.39562482308 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 18.772164358801 + Line = 356.70695331817 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0085 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 47.576831614772 + Line = 247.88912683565 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 66.398015039437 + Line = 447.49348074201 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 57.206855272589 + Line = 353.7544538475 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0086 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 86.128736340207 + Line = 245.03816050386 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 104.97511458817 + Line = 444.71338361445 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 95.872873826211 + Line = 350.92399901593 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0087 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 124.81458927671 + Line = 242.09895644984 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 143.65810104625 + Line = 441.84489934573 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 134.65961115059 + Line = 348.00592061661 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0088 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 163.61149616781 + Line = 239.22804352143 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 182.41742908741 + Line = 439.04475026917 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 173.54075885534 + Line = 345.15658826528 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0089 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 210.28240398663 + Line = 256.95948365094 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 228.95190144135 + Line = 456.92687292921 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 220.28981014413 + Line = 362.91588956689 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0090 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 249.02711018549 + Line = 254.2567648022 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 267.58172263012 + Line = 454.2957319601 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 259.07897306573 + Line = 360.23418990954 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0091 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 287.66706609449 + Line = 251.53246833885 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 306.07706817476 + Line = 451.64271851927 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 297.74734956111 + Line = 357.53157974596 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0092 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 326.10405196827 + Line = 248.95666709406 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 344.33374949004 + Line = 449.13920021898 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 336.19312649703 + Line = 354.97824670457 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0093 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 364.22874451962 + Line = 246.58401748283 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 382.24191641484 + Line = 446.83967090939 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 374.30603198036 + Line = 352.6288151688 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0094 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 402.08034166792 + Line = 244.1081340044 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 419.85454454593 + Line = 444.43667258752 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 412.13205666513 + Line = 350.17670485629 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0095 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 439.64155090357 + Line = 241.51723607622 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 457.15598607744 + Line = 441.91838180779 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 449.65450271612 + Line = 347.61016925278 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0096 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 16.706313553447 + Line = 270.85785446436 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 35.495469601723 + Line = 470.48373747509 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 26.244980889334 + Line = 376.71994832416 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0097 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 55.096100211402 + Line = 268.00710272558 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 73.926983952242 + Line = 467.69892383747 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 64.760076105261 + Line = 373.88649650395 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0098 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 93.653900937427 + Line = 265.0532822766 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 112.49920617427 + Line = 464.81148761724 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 103.43078817918 + Line = 370.95055781871 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0099 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 132.37019878824 + Line = 262.13677620159 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 151.19663836386 + Line = 461.96248715372 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 142.24425262511 + Line = 368.05273651857 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0100 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 171.19785333443 + Line = 259.63363163384 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 189.95691061088 + Line = 459.5295415342 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 181.14492956916 + Line = 365.56950123898 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0101 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 212.81424378753 + Line = 277.47574436131 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 231.50551171771 + Line = 477.51787903431 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 222.82226310755 + Line = 383.43333766726 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0102 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 251.55729692049 + Line = 274.70165880063 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 270.1263973688 + Line = 474.8112660352 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 261.61752210309 + Line = 380.67741048979 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0103 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 290.17957584383 + Line = 272.02267182857 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 308.59231734557 + Line = 472.20099900447 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 300.27020286304 + Line = 378.01742249825 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0104 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 328.58063576356 + Line = 269.51561607631 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 346.80111690207 + Line = 469.76413220215 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 338.67746829452 + Line = 375.53030167793 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0105 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 366.70525962922 + Line = 267.07668425596 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 384.70306691995 + Line = 467.39641276823 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 376.79063695802 + Line = 373.11196939834 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0106 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 404.61798154484 + Line = 264.41868722101 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 422.37441658546 + Line = 464.80965274513 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 414.68055033674 + Line = 370.47509653686 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0107 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 441.66228137884 + Line = 262.78248139854 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 459.11784379988 + Line = 463.24871167321 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 451.66575491637 + Line = 368.86094398859 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0108 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 178.94746933022 + Line = 279.83515345393 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 197.72240205749 + Line = 479.81896983674 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 188.89803974946 + Line = 385.7773340193 + End_Group + End_Object +End_Object +End diff --git a/isis/tests/data/cnetedit/cnet_11pts.pvl b/isis/tests/data/cnetedit/cnet_11pts.pvl new file mode 100644 index 0000000000..da6e3473b1 --- /dev/null +++ b/isis/tests/data/cnetedit/cnet_11pts.pvl @@ -0,0 +1,344 @@ +Object = ControlNetwork + NetworkId = pointregTest + TargetName = Mars + UserName = jwalldren + Created = Null + LastModified = Null + Description = pointregAppTest + Version = 5 + + Object = ControlPoint + PointType = Free + PointId = pointregTest0001 + ChooserName = cnetbin2pvl + DateTime = 2023-11-15T08:30:46 + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED4/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 2024.9426496396 + Line = 1002.2851420811 + SampleResidual = 10.0 + LineResidual = 0.0 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED5/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 24.231028472272 + Line = 1003.4315948486 + AprioriSample = 25.0 + AprioriLine = 1000.0 + SampleResidual = 0.0 + LineResidual = 0.0 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = pointregTest0002 + ChooserName = cnetbin2pvl + DateTime = 2023-11-15T08:30:46 + Ignore = True + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED4/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 2037.6533300862 + Line = 1184.6426576887 + SampleResidual = 0.0 + LineResidual = 0.0 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED5/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 36.997759287231 + Line = 1185.8466715131 + SampleResidual = 0.0 + LineResidual = 0.0 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = pointregTest0003 + ChooserName = cnetbin2pvl + DateTime = 2023-11-15T08:30:46 + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED4/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 2003.8286760498 + Line = 1361.3694076538 + SampleResidual = 0.0 + LineResidual = 0.0 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED5/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 3.217924722872 + Line = 1362.6534620013 + SampleResidual = 0.0 + LineResidual = 6.0 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = pointregTest0004 + ChooserName = cnetbin2pvl + DateTime = 2023-11-15T08:30:46 + Ignore = True + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED4/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 2016.6480691753 + Line = 1543.6421143668 + SampleResidual = 0.0 + LineResidual = 0.0 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED5/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 16.046408804032 + Line = 1545.0106370108 + SampleResidual = 0.0 + LineResidual = 0.0 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = pointregTest0005 + ChooserName = cnetbin2pvl + DateTime = 2023-11-15T08:30:46 + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED4/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 2029.5446002794 + Line = 1725.8194536482 + SampleResidual = 0.0 + LineResidual = 0.0 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED5/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 28.925844700071 + Line = 1727.3395423889 + SampleResidual = 0.0 + LineResidual = 0.0 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = pointregTest0006 + ChooserName = cnetbin2pvl + DateTime = 2023-11-15T08:30:46 + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED4/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 2042.5256884771 + Line = 1907.9279921395 + SampleResidual = 0.0 + LineResidual = 0.0 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED5/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 41.865298408191 + Line = 1909.6773033142 + SampleResidual = 0.0 + LineResidual = 0.0 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = pointregTest0007 + ChooserName = cnetbin2pvl + DateTime = 2023-11-15T08:30:46 + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED4/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 2012.201404177 + Line = 819.94669995989 + SampleResidual = 11.0 + LineResidual = 0.0 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED5/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 11.40926078542 + Line = 821.0601147243 + SampleResidual = 0.0 + LineResidual = 0.0 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = pointregTest0008 + ChooserName = cnetbin2pvl + DateTime = 2023-11-15T08:30:46 + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED4/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 2045.9696349664 + Line = 643.09835651943 + SampleResidual = 0.0 + LineResidual = 0.0 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED5/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 45.063543577348 + Line = 644.22982297625 + SampleResidual = 0.0 + LineResidual = 0.0 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = pointregTest0009 + ChooserName = cnetbin2pvl + DateTime = 2023-11-15T08:30:46 + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED4/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 2033.1477595262 + Line = 460.74015971592 + SampleResidual = 0.0 + LineResidual = 0.0 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED5/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 32.112688695736 + Line = 461.86277062552 + SampleResidual = 0.0 + LineResidual = 0.0 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = pointregTest0010 + ChooserName = cnetbin2pvl + DateTime = 2023-11-15T08:30:46 + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED4/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 2020.272346886 + Line = 278.31520571027 + SampleResidual = 0.0 + LineResidual = 0.0 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED5/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 19.083908218492 + Line = 279.54408318656 + SampleResidual = 0.0 + LineResidual = 0.0 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = pointregTest0011 + ChooserName = cnetbin2pvl + DateTime = 2023-11-15T08:30:46 + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED4/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 2007.3360059905 + Line = 95.954965318952 + SampleResidual = 0.0 + LineResidual = 0.0 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED5/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 5.9696691241626 + Line = 97.276485443115 + SampleResidual = 0.0 + LineResidual = 0.0 + End_Group + End_Object +End_Object +End diff --git a/isis/tests/data/cnetedit/cnet_35pts.pvl b/isis/tests/data/cnetedit/cnet_35pts.pvl new file mode 100644 index 0000000000..c0556f3564 --- /dev/null +++ b/isis/tests/data/cnetedit/cnet_35pts.pvl @@ -0,0 +1,1623 @@ +Object = ControlNetwork + NetworkId = I24827003RDR_BOUNDARY_NET + TargetName = Mars + UserName = lweller + Created = 2011-12-15T23:19:37 + LastModified = 2011-12-15T23:19:37 + Description = "I24827003RDR IMAGE BOUNDARY NETWORK" + Version = 5 + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_UL + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 27.607059317834 + Line = 18.295111585227 + AprioriSample = 27.592145368644 + AprioriLine = 18.277370871022 + MinimumPixelZScore = -9.1101292766656 + MaximumPixelZScore = 7.1550838917398 + GoodnessOfFit = 0.42491860555961 + SubPixelCorrelation = 0.42491860555961 + Obsolete_Eccentricity = 0.82500889401041 + WholePixelCorrelation = 0.48094671315067 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/764644820.000 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 142.0 + Line = 5710.0 + AprioriSample = 137.85157104559 + AprioriLine = 5723.5583837946 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/766864399.204 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 224.84594511441 + Line = 1114.556157076 + AprioriSample = 224.86109569625 + AprioriLine = 1114.5366784126 + MinimumPixelZScore = -9.1101292766656 + MaximumPixelZScore = 7.1550838917398 + GoodnessOfFit = 0.6301057592872 + SubPixelCorrelation = 0.6301057592872 + Obsolete_Eccentricity = 0.85464446637656 + WholePixelCorrelation = 0.91990818731499 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/860700556.051 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 241.70373879742 + Line = 4170.1757137588 + AprioriSample = 241.66704417356 + AprioriLine = 4170.1768448015 + MinimumPixelZScore = -9.1101292766656 + MaximumPixelZScore = 7.1550838917398 + GoodnessOfFit = 0.52130053192069 + SubPixelCorrelation = 0.52130053192069 + Obsolete_Eccentricity = 0.87083916894004 + WholePixelCorrelation = 0.68332380944365 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_UR + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 126.11723415114 + Line = 14.624031718257 + AprioriSample = 126.13262109331 + AprioriLine = 14.60864867694 + MinimumPixelZScore = -7.7826442877901 + MaximumPixelZScore = 6.4531771874365 + GoodnessOfFit = 0.54141035408281 + SubPixelCorrelation = 0.54141035408281 + Obsolete_Eccentricity = 0.80166834482906 + WholePixelCorrelation = 0.59126689617359 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 167.0 + Line = 4129.0 + AprioriSample = 185.89330945024 + AprioriLine = 4149.8781759925 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_LL + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 15.994142166447 + Line = 5351.59876634 + AprioriSample = 15.988352444663 + AprioriLine = 5351.6271443448 + MinimumPixelZScore = -1.3323758785145 + MaximumPixelZScore = 1.7088719658458 + GoodnessOfFit = 0.97152986956068 + SubPixelCorrelation = 0.97152986956068 + Obsolete_Eccentricity = 0.84992032708551 + WholePixelCorrelation = 0.97231368866292 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/823680993.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 276.0 + Line = 10691.0 + AprioriSample = 294.45457233458 + AprioriLine = 10704.104037218 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_CTR + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 72.351376549012 + Line = 2683.7835945571 + AprioriSample = 72.31156993241 + AprioriLine = 2683.7871073413 + MinimumPixelZScore = -10.556951321328 + MaximumPixelZScore = 7.6843165392047 + GoodnessOfFit = 0.42694248853572 + SubPixelCorrelation = 0.42694248853572 + Obsolete_Eccentricity = 0.86764337082849 + WholePixelCorrelation = 0.47513217291136 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 62.0 + Line = 9450.0 + AprioriSample = 78.035822649479 + AprioriLine = 9466.8664683336 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_1 + ChooserName = cnetadd + DateTime = 2012-01-13T13:06:19 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 48.760708608846 + Line = 34.687788591 + AprioriSample = 48.783779645185 + AprioriLine = 34.690686342128 + MinimumPixelZScore = -10.336933423527 + MaximumPixelZScore = 8.3466298590249 + GoodnessOfFit = 0.42219888501096 + SubPixelCorrelation = 0.42219888501096 + Obsolete_Eccentricity = 0.81654602547138 + WholePixelCorrelation = 0.4842514894252 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/764644820.000 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 185.0 + Line = 5743.0 + AprioriSample = 192.35430957356 + AprioriLine = 5723.6616154452 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/766864399.204 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 268.02675159169 + Line = 1147.6104906502 + AprioriSample = 268.09033141866 + AprioriLine = 1147.56287184 + MinimumPixelZScore = -10.336933423527 + MaximumPixelZScore = 8.3466298590249 + GoodnessOfFit = 0.59150804215855 + SubPixelCorrelation = 0.59150804215855 + Obsolete_Eccentricity = 0.87243685463714 + WholePixelCorrelation = 0.90247447994431 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/860700556.051 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 284.81369462788 + Line = 4203.1792327291 + AprioriSample = 284.85045436259 + AprioriLine = 4203.2511600821 + MinimumPixelZScore = -10.336933423527 + MaximumPixelZScore = 8.3466298590249 + GoodnessOfFit = 0.47601397505042 + SubPixelCorrelation = 0.47601397505042 + Obsolete_Eccentricity = 0.89216340544699 + WholePixelCorrelation = 0.67632719937417 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_2 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 64.553532057187 + Line = 16.16468261595 + AprioriSample = 64.572486285992 + AprioriLine = 16.159319580388 + MinimumPixelZScore = -10.851025717118 + MaximumPixelZScore = 9.0681589770554 + GoodnessOfFit = 0.36725373651513 + SubPixelCorrelation = 0.36725373651513 + Obsolete_Eccentricity = 0.82699300047967 + WholePixelCorrelation = 0.42843510599361 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 42.01598881521 + Line = 4131.262421516 + AprioriSample = 42.019306132363 + AprioriLine = 4131.2821435604 + MinimumPixelZScore = -10.851025717118 + MaximumPixelZScore = 9.0681589770554 + GoodnessOfFit = 0.58620780317928 + SubPixelCorrelation = 0.58620780317928 + Obsolete_Eccentricity = 0.85025939150097 + WholePixelCorrelation = 0.85996682715537 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/764644820.000 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 217.0 + Line = 5706.0 + AprioriSample = 246.84321887463 + AprioriLine = 5723.765018548 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_3 + ChooserName = cnetadd + DateTime = 2012-01-13T13:06:19 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 121.11506062968 + Line = 31.572854327236 + AprioriSample = 121.14548884404 + AprioriLine = 31.572969450255 + MinimumPixelZScore = -8.5291500072502 + MaximumPixelZScore = 7.7800103958966 + GoodnessOfFit = 0.50147560129106 + SubPixelCorrelation = 0.50147560129106 + Obsolete_Eccentricity = 0.82257001244825 + WholePixelCorrelation = 0.54888811579928 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 157.0 + Line = 4163.0 + AprioriSample = 126.98178618374 + AprioriLine = 4149.931145305 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_4 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 138.20448769735 + Line = 228.14972149796 + AprioriSample = 138.2463996157 + AprioriLine = 228.15056835088 + MinimumPixelZScore = -8.3439788918745 + MaximumPixelZScore = 6.8503359515919 + GoodnessOfFit = 0.58524107005789 + SubPixelCorrelation = 0.58524107005789 + Obsolete_Eccentricity = 0.79963813984092 + WholePixelCorrelation = 0.61793743687586 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 192.0 + Line = 4555.0 + AprioriSample = 186.03957998842 + AprioriLine = 4558.6289790526 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_5 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 149.20509521588 + Line = 423.93494885646 + AprioriSample = 149.18783166409 + AprioriLine = 423.90617198328 + MinimumPixelZScore = -6.9567313793804 + MaximumPixelZScore = 7.116669122997 + GoodnessOfFit = 0.58378259591105 + SubPixelCorrelation = 0.58378259591105 + Obsolete_Eccentricity = 0.81140407536592 + WholePixelCorrelation = 0.62604756787944 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 214.0 + Line = 4945.0 + AprioriSample = 186.32462775985 + AprioriLine = 4967.2377534825 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_6 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 128.28737710591 + Line = 651.23659834539 + AprioriSample = 128.29832945259 + AprioriLine = 651.26409956921 + MinimumPixelZScore = -6.0616802552658 + MaximumPixelZScore = 5.8974339078448 + GoodnessOfFit = 0.46624774328617 + SubPixelCorrelation = 0.46624774328617 + Obsolete_Eccentricity = 0.66978571811643 + WholePixelCorrelation = 0.50483735035139 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 173.0 + Line = 5399.0 + AprioriSample = 186.47612972153 + AprioriLine = 5375.9772827805 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_8 + ChooserName = cnetadd + DateTime = 2012-01-13T13:25:48 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/748799078.000 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 28.513330924664 + Line = 15802.82320805 + AprioriSample = 28.577348166348 + AprioriLine = 15802.74722498 + MinimumPixelZScore = -3.3013168477769 + MaximumPixelZScore = 2.2949036325521 + GoodnessOfFit = 0.71147478712267 + SubPixelCorrelation = 0.71147478712267 + Obsolete_Eccentricity = 0.93900106979889 + WholePixelCorrelation = 0.71074079991412 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 197.0 + Line = 6217.0 + AprioriSample = 187.20197125496 + AprioriLine = 6193.3583087996 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_9 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 132.43324628739 + Line = 1244.9963043389 + AprioriSample = 132.41230089305 + AprioriLine = 1244.9968964388 + MinimumPixelZScore = -4.3267682575543 + MaximumPixelZScore = 3.3036547408159 + GoodnessOfFit = 0.64094554586329 + SubPixelCorrelation = 0.64094554586329 + Obsolete_Eccentricity = 0.69326613917787 + WholePixelCorrelation = 0.70413968240039 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/748799078.000 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 139.20929458768 + Line = 15461.410830143 + AprioriSample = 139.07279851894 + AprioriLine = 15461.411736985 + MinimumPixelZScore = -4.3267682575543 + MaximumPixelZScore = 3.3036547408159 + GoodnessOfFit = 0.57147470389177 + SubPixelCorrelation = 0.57147470389177 + Obsolete_Eccentricity = 0.46252692121887 + WholePixelCorrelation = 0.63489389099904 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 182.0 + Line = 6582.0 + AprioriSample = 187.43332157572 + AprioriLine = 6601.9213229651 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_10 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 119.0 + Line = 1437.0 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/748799078.000 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 273.65933086114 + Line = 15088.126010294 + AprioriSample = 273.79775945033 + AprioriLine = 15088.279072135 + MinimumPixelZScore = -4.5982076153028 + MaximumPixelZScore = 5.1547250339538 + GoodnessOfFit = 0.46437443646356 + SubPixelCorrelation = 0.46437443646356 + Obsolete_Eccentricity = 0.5755806348777 + WholePixelCorrelation = 0.47471560826242 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 155.87633505028 + Line = 6965.8249656384 + AprioriSample = 155.75079341732 + AprioriLine = 6965.8015269146 + MinimumPixelZScore = -4.5982076153028 + MaximumPixelZScore = 5.1547250339538 + GoodnessOfFit = 0.6221840844042 + SubPixelCorrelation = 0.6221840844042 + Obsolete_Eccentricity = 0.78095310139119 + WholePixelCorrelation = 0.67240071516507 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_11 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 118.0 + Line = 1634.0 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 153.15891256983 + Line = 7357.6539686369 + AprioriSample = 153.22494967358 + AprioriLine = 7357.6402737744 + MinimumPixelZScore = -8.8742551139388 + MaximumPixelZScore = 4.4648645875177 + GoodnessOfFit = 0.43246786725171 + SubPixelCorrelation = 0.43246786725171 + Obsolete_Eccentricity = 0.84442625710954 + WholePixelCorrelation = 0.57817462187924 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_12 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 121.49478999227 + Line = 1856.731446573 + AprioriSample = 121.50516007892 + AprioriLine = 1856.7635557292 + MinimumPixelZScore = -6.8138683213418 + MaximumPixelZScore = 2.9308636161718 + GoodnessOfFit = 0.64478667558312 + SubPixelCorrelation = 0.64478667558312 + Obsolete_Eccentricity = 0.72771562095133 + WholePixelCorrelation = 0.66352150232528 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 161.0 + Line = 7802.0 + AprioriSample = 188.35852324024 + AprioriLine = 7828.0151912856 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_13 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 137.57913021604 + Line = 2075.8951198701 + AprioriSample = 137.58325445598 + AprioriLine = 2075.9164372763 + MinimumPixelZScore = -5.1298466964338 + MaximumPixelZScore = 3.768980062869 + GoodnessOfFit = 0.63467767714999 + SubPixelCorrelation = 0.63467767714999 + Obsolete_Eccentricity = 0.74702153978772 + WholePixelCorrelation = 0.66651958106393 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 194.0 + Line = 8239.0 + AprioriSample = 188.7116242464 + AprioriLine = 8236.611878563 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_14 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 143.29125188489 + Line = 2295.6657077538 + AprioriSample = 143.27818713457 + AprioriLine = 2295.7018251456 + MinimumPixelZScore = -2.8495963378738 + MaximumPixelZScore = 4.2726177946745 + GoodnessOfFit = 0.50555393181678 + SubPixelCorrelation = 0.50555393181678 + Obsolete_Eccentricity = 0.84376716040979 + WholePixelCorrelation = 0.52159173578701 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 207.0 + Line = 8675.0 + AprioriSample = 189.16494375722 + AprioriLine = 8645.4100113685 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_15 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 145.30808018025 + Line = 2477.1515954142 + AprioriSample = 145.33233846913 + AprioriLine = 2477.1921753136 + MinimumPixelZScore = -3.5474697309863 + MaximumPixelZScore = 2.6587565865915 + GoodnessOfFit = 0.74011087203503 + SubPixelCorrelation = 0.74011087203503 + Obsolete_Eccentricity = 0.64299738534369 + WholePixelCorrelation = 0.74945020462948 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 211.0 + Line = 9039.0 + AprioriSample = 189.75749469492 + AprioriLine = 9054.1180252552 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_16 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 140.38785971346 + Line = 2681.7415355665 + AprioriSample = 140.40848396701 + AprioriLine = 2681.7274129245 + MinimumPixelZScore = -3.1758333116921 + MaximumPixelZScore = 9.0338725240029 + GoodnessOfFit = 0.64015829348973 + SubPixelCorrelation = 0.64015829348973 + Obsolete_Eccentricity = 0.83201034936892 + WholePixelCorrelation = 0.66279412202517 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 200.0 + Line = 9446.0 + AprioriSample = 189.74898445243 + AprioriLine = 9462.737163363 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_17 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 124.74745142602 + Line = 2886.7706306145 + AprioriSample = 124.71763854068 + AprioriLine = 2886.7534192259 + MinimumPixelZScore = -5.0257793273488 + MaximumPixelZScore = 4.5136102504828 + GoodnessOfFit = 0.64224423008729 + SubPixelCorrelation = 0.64224423008729 + Obsolete_Eccentricity = 0.88553794865542 + WholePixelCorrelation = 0.6693638769383 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 169.0 + Line = 9855.0 + AprioriSample = 190.17574850163 + AprioriLine = 9871.5220697322 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_19 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 133.32938592698 + Line = 3304.5102172403 + AprioriSample = 133.33076800753 + AprioriLine = 3304.5111192353 + MinimumPixelZScore = -3.5877838148283 + MaximumPixelZScore = 5.9675648071378 + GoodnessOfFit = 0.57259590692606 + SubPixelCorrelation = 0.57259590692606 + Obsolete_Eccentricity = 0.61612921400087 + WholePixelCorrelation = 0.59797982339977 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 188.0 + Line = 10688.0 + AprioriSample = 191.38234151276 + AprioriLine = 10688.903800361 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_32 + ChooserName = cnetadd + DateTime = 2012-01-13T13:25:48 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/764644820.000 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 131.10154251818 + Line = 6114.7427251932 + AprioriSample = 131.08464580002 + AprioriLine = 6114.72255253 + MinimumPixelZScore = -6.7883347305594 + MaximumPixelZScore = 3.0268974724574 + GoodnessOfFit = 0.46612674246283 + SubPixelCorrelation = 0.46612674246283 + Obsolete_Eccentricity = 0.92407264183803 + WholePixelCorrelation = 0.55739606549034 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/766864399.204 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 213.1699011323 + Line = 1518.9151968876 + AprioriSample = 213.26905955464 + AprioriLine = 1518.9193152579 + MinimumPixelZScore = -6.7883347305594 + MaximumPixelZScore = 3.0268974724574 + GoodnessOfFit = 0.41028456857734 + SubPixelCorrelation = 0.41028456857734 + Obsolete_Eccentricity = 0.91737961021451 + WholePixelCorrelation = 0.49561038667554 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/860700556.051 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 231.0 + Line = 4574.0 + AprioriSample = 235.04493503215 + AprioriLine = 4589.2309851386 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_33 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 32.243849071197 + Line = 443.99293787456 + AprioriSample = 32.267286312846 + AprioriLine = 443.93790066253 + MinimumPixelZScore = -9.4814064508761 + MaximumPixelZScore = 7.613279128717 + GoodnessOfFit = 0.35909430591995 + SubPixelCorrelation = 0.35909430591995 + Obsolete_Eccentricity = 0.86088783993688 + WholePixelCorrelation = 0.42439889849862 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/764644820.000 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 150.0 + Line = 6561.0 + AprioriSample = 136.08250364324 + AprioriLine = 6542.0592380917 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/766864399.204 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 231.61495841089 + Line = 1964.6495319857 + AprioriSample = 231.58016101587 + AprioriLine = 1964.5656483556 + MinimumPixelZScore = -9.4814064508761 + MaximumPixelZScore = 7.613279128717 + GoodnessOfFit = 0.63763367292373 + SubPixelCorrelation = 0.63763367292373 + Obsolete_Eccentricity = 0.88928007456266 + WholePixelCorrelation = 0.9083985074489 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/860700556.051 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 248.64525826167 + Line = 5019.6082778839 + AprioriSample = 248.66537068953 + AprioriLine = 5019.6509310444 + MinimumPixelZScore = -9.4814064508761 + MaximumPixelZScore = 7.613279128717 + GoodnessOfFit = 0.47134697831144 + SubPixelCorrelation = 0.47134697831144 + Obsolete_Eccentricity = 0.90697269892977 + WholePixelCorrelation = 0.67790447057524 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_34 + ChooserName = cnetadd + DateTime = 2012-01-13T13:06:19 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 39.377323532456 + Line = 644.45059392332 + AprioriSample = 39.422550221501 + AprioriLine = 644.48255376688 + MinimumPixelZScore = -3.6303773877818 + MaximumPixelZScore = 3.9449657352508 + GoodnessOfFit = 0.68219867118992 + SubPixelCorrelation = 0.68219867118992 + Obsolete_Eccentricity = 0.6687629032313 + WholePixelCorrelation = 0.69541576692436 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/764644820.000 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 165.0 + Line = 6962.0 + AprioriSample = 135.40596122852 + AprioriLine = 6951.3519736314 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/766864399.204 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 245.82294568014 + Line = 2365.749168986 + AprioriSample = 245.80677488643 + AprioriLine = 2365.659647922 + MinimumPixelZScore = -3.6303773877818 + MaximumPixelZScore = 3.9449657352508 + GoodnessOfFit = 0.88500611615228 + SubPixelCorrelation = 0.88500611615228 + Obsolete_Eccentricity = 0.79641849988017 + WholePixelCorrelation = 0.93879938608019 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/860700556.051 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 262.99285894944 + Line = 5419.5752950317 + AprioriSample = 262.93741513321 + AprioriLine = 5419.5000790279 + MinimumPixelZScore = -3.6303773877818 + MaximumPixelZScore = 3.9449657352508 + GoodnessOfFit = 0.8384872040154 + SubPixelCorrelation = 0.8384872040154 + Obsolete_Eccentricity = 0.80938385565388 + WholePixelCorrelation = 0.88811262489038 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_35 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 38.84105669372 + Line = 832.10752901602 + AprioriSample = 38.80553051742 + AprioriLine = 832.12557774503 + MinimumPixelZScore = -3.8007083634248 + MaximumPixelZScore = 4.4757735324342 + GoodnessOfFit = 0.42116724718091 + SubPixelCorrelation = 0.42116724718091 + Obsolete_Eccentricity = 0.73339213911551 + WholePixelCorrelation = 0.4230891360784 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/748799078.000 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 122.65301115881 + Line = 16293.50679139 + AprioriSample = 122.78458208301 + AprioriLine = 16293.419624892 + MinimumPixelZScore = -3.8007083634248 + MaximumPixelZScore = 4.4757735324342 + GoodnessOfFit = 0.44965842923952 + SubPixelCorrelation = 0.44965842923952 + Obsolete_Eccentricity = 0.84701026248297 + WholePixelCorrelation = 0.45019255138853 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/764644820.000 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 150.0 + Line = 7353.0 + AprioriSample = 134.63818771615 + AprioriLine = 7360.5513465387 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/766864399.204 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 230.33072524429 + Line = 2756.0791608266 + AprioriSample = 230.33084176063 + AprioriLine = 2756.1290924305 + MinimumPixelZScore = -3.8007083634248 + MaximumPixelZScore = 4.4757735324342 + GoodnessOfFit = 0.90144944908857 + SubPixelCorrelation = 0.90144944908857 + Obsolete_Eccentricity = 0.82298722113186 + WholePixelCorrelation = 0.96435572021431 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/860700556.051 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 248.02226348435 + Line = 5809.3611366058 + AprioriSample = 248.02655270592 + AprioriLine = 5809.4447753716 + MinimumPixelZScore = -3.8007083634248 + MaximumPixelZScore = 4.4757735324342 + GoodnessOfFit = 0.71300187736795 + SubPixelCorrelation = 0.71300187736795 + Obsolete_Eccentricity = 0.8291423602584 + WholePixelCorrelation = 0.76584458449782 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_36 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 19.767099267132 + Line = 1053.224776834 + AprioriSample = 19.768653236342 + AprioriLine = 1053.2080015315 + MinimumPixelZScore = -2.0483817202699 + MaximumPixelZScore = 2.8640554045295 + GoodnessOfFit = 0.58115488237753 + SubPixelCorrelation = 0.58115488237753 + Obsolete_Eccentricity = 0.85917790473711 + WholePixelCorrelation = 0.5848321471167 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/748799078.000 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 291.4370894032 + Line = 15864.748037614 + AprioriSample = 291.36469422798 + AprioriLine = 15864.232672573 + MinimumPixelZScore = -2.0483817202699 + MaximumPixelZScore = 2.8640554045295 + GoodnessOfFit = 0.58326123746324 + SubPixelCorrelation = 0.58326123746324 + Obsolete_Eccentricity = 0.90296752695405 + WholePixelCorrelation = 0.58348490860222 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/764644820.000 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 124.0 + Line = 7777.0 + AprioriSample = 133.54370444799 + AprioriLine = 7769.8770322264 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/766864399.204 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 203.98302895363 + Line = 3179.4605858777 + AprioriSample = 203.85450286355 + AprioriLine = 3179.5000595293 + MinimumPixelZScore = -2.0483817202699 + MaximumPixelZScore = 2.8640554045295 + GoodnessOfFit = 0.97240168667426 + SubPixelCorrelation = 0.97240168667426 + Obsolete_Eccentricity = 0.85995206536045 + WholePixelCorrelation = 0.98978024760144 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/860700556.051 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 220.86690968465 + Line = 6234.9839367112 + AprioriSample = 220.81710118731 + AprioriLine = 6234.7801259019 + MinimumPixelZScore = -2.0483817202699 + MaximumPixelZScore = 2.8640554045295 + GoodnessOfFit = 0.90014960228514 + SubPixelCorrelation = 0.90014960228514 + Obsolete_Eccentricity = 0.89695661349753 + WholePixelCorrelation = 0.91793725667105 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_37 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 36.888733189199 + Line = 1242.731084961 + AprioriSample = 36.911483608247 + AprioriLine = 1242.6935558131 + MinimumPixelZScore = -3.5448692768999 + MaximumPixelZScore = 3.21268016751 + GoodnessOfFit = 0.59407851965547 + SubPixelCorrelation = 0.59407851965547 + Obsolete_Eccentricity = 0.74709296406025 + WholePixelCorrelation = 0.60911835276394 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/764644820.000 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 157.0 + Line = 8156.0 + AprioriSample = 132.61992449207 + AprioriLine = 8178.9207494154 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/766864399.204 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 236.2196163681 + Line = 3558.0866737144 + AprioriSample = 236.22665154064 + AprioriLine = 3558.2674905463 + MinimumPixelZScore = -3.5448692768999 + MaximumPixelZScore = 3.21268016751 + GoodnessOfFit = 0.92551012715239 + SubPixelCorrelation = 0.92551012715239 + Obsolete_Eccentricity = 0.79541873154535 + WholePixelCorrelation = 0.96799250418854 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/860700556.051 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 253.44978676116 + Line = 6612.4380581812 + AprioriSample = 253.5215797661 + AprioriLine = 6612.5086541373 + MinimumPixelZScore = -3.5448692768999 + MaximumPixelZScore = 3.21268016751 + GoodnessOfFit = 0.81024350233636 + SubPixelCorrelation = 0.81024350233636 + Obsolete_Eccentricity = 0.83198975240015 + WholePixelCorrelation = 0.85543090385472 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_38 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 34.966885270204 + Line = 1445.2306971316 + AprioriSample = 34.976625619327 + AprioriLine = 1445.2507961096 + MinimumPixelZScore = -2.7649404184731 + MaximumPixelZScore = 3.885430669618 + GoodnessOfFit = 0.50123049691391 + SubPixelCorrelation = 0.50123049691391 + Obsolete_Eccentricity = 0.71542230034353 + WholePixelCorrelation = 0.52019516111106 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/764644820.000 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 152.0 + Line = 8559.0 + AprioriSample = 131.66372638651 + AprioriLine = 8588.1443315449 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/860700556.051 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 248.54298985524 + Line = 7015.0925938841 + AprioriSample = 248.47477041243 + AprioriLine = 7015.0708018329 + MinimumPixelZScore = -2.7649404184731 + MaximumPixelZScore = 3.885430669618 + GoodnessOfFit = 0.57404993830787 + SubPixelCorrelation = 0.57404993830787 + Obsolete_Eccentricity = 0.79975823900933 + WholePixelCorrelation = 0.61126341945065 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_39 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 21.124305682401 + Line = 1660.7015570648 + AprioriSample = 21.244027873838 + AprioriLine = 1660.6652772725 + MinimumPixelZScore = -9.91464328244 + MaximumPixelZScore = 6.6095255951013 + GoodnessOfFit = 0.40060655379026 + SubPixelCorrelation = 0.40060655379026 + Obsolete_Eccentricity = 0.8842462315449 + WholePixelCorrelation = 0.42777155677984 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/764644820.000 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 122.0 + Line = 8990.0 + AprioriSample = 130.84304170727 + AprioriLine = 8997.4098805041 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_41 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 39.651442821199 + Line = 2081.9946567966 + AprioriSample = 39.640958585734 + AprioriLine = 2081.9963499484 + MinimumPixelZScore = -2.0151952076585 + MaximumPixelZScore = 1.89602994523 + GoodnessOfFit = 0.91233424417264 + SubPixelCorrelation = 0.91233424417264 + Obsolete_Eccentricity = 0.8685408387441 + WholePixelCorrelation = 0.91685736046086 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/764644820.000 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 158.0 + Line = 9831.0 + AprioriSample = 128.74374032515 + AprioriLine = 9815.6199810588 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_43 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 40.331922777574 + Line = 2498.4634598633 + AprioriSample = 40.342396523112 + AprioriLine = 2498.4688726782 + MinimumPixelZScore = -2.1929700186508 + MaximumPixelZScore = 2.6406477049999 + GoodnessOfFit = 0.87903042477486 + SubPixelCorrelation = 0.87903042477486 + Obsolete_Eccentricity = 0.80945067719471 + WholePixelCorrelation = 0.88307243605489 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/764644820.000 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 158.0 + Line = 10661.0 + AprioriSample = 126.82388485966 + AprioriLine = 10634.051423648 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_50 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 14.277915476186 + Line = 3935.2833714183 + AprioriSample = 14.234425279049 + AprioriLine = 3935.2313000495 + MinimumPixelZScore = -3.2207280824112 + MaximumPixelZScore = 2.179464511159 + GoodnessOfFit = 0.61079317083437 + SubPixelCorrelation = 0.61079317083437 + Obsolete_Eccentricity = 0.83055975470962 + WholePixelCorrelation = 0.621385909313 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/823680993.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 296.0 + Line = 7863.0 + AprioriSample = 317.16905352284 + AprioriLine = 7832.2439273096 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_51 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 11.30320020209 + Line = 4130.0913785706 + AprioriSample = 11.27822009864 + AprioriLine = 4130.0656229356 + MinimumPixelZScore = -5.5551124504224 + MaximumPixelZScore = 5.3507909286785 + GoodnessOfFit = 0.43949327976759 + SubPixelCorrelation = 0.43949327976759 + Obsolete_Eccentricity = 0.76159002924015 + WholePixelCorrelation = 0.46446010837209 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/823680993.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 286.0 + Line = 8252.0 + AprioriSample = 314.07066277501 + AprioriLine = 8241.2675814639 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_53 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 30.377263509207 + Line = 4535.7660808899 + AprioriSample = 30.440341462824 + AprioriLine = 4535.748993877 + MinimumPixelZScore = -3.7311603048292 + MaximumPixelZScore = 2.4776325037694 + GoodnessOfFit = 0.61516820087654 + SubPixelCorrelation = 0.61516820087654 + Obsolete_Eccentricity = 0.74206145332326 + WholePixelCorrelation = 0.61756685189949 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/823680993.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 297.0 + Line = 9048.0 + AprioriSample = 307.37707389729 + AprioriLine = 9059.4587520006 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_56 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 28.435531108092 + Line = 5157.421973579 + AprioriSample = 28.433104417652 + AprioriLine = 5157.4175236742 + MinimumPixelZScore = -2.608895713487 + MaximumPixelZScore = 3.0009659960998 + GoodnessOfFit = 0.80009655417522 + SubPixelCorrelation = 0.80009655417522 + Obsolete_Eccentricity = 0.91052297013589 + WholePixelCorrelation = 0.80523427372119 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/823680993.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 305.0 + Line = 10302.0 + AprioriSample = 297.73233806667 + AprioriLine = 10286.943394023 + Reference = True + End_Group + End_Object +End_Object +End diff --git a/isis/tests/data/cnetedit/e0902065.cal.sub.cub b/isis/tests/data/cnetedit/e0902065.cal.sub.cub new file mode 100644 index 0000000000000000000000000000000000000000..32bd8b0633e48585f36906bdd98c85ea2073d558 GIT binary patch literal 1213120 zcmeEvXLy{|wKd&z0wkd%fH1|9rq4)j#D`{^VjCP6ObHm-mO;2kNHXA%&_eH|(IJEy zLIMdPKoVjIJ@n9fz|_$D#RT~FI+``!vvuBgMqIw{$M?K>p4>}}EX!xjT6^tv_Bm(Q z83(k_>}?p;uv1S*&-M#uw6EIGuq%IU`_69s?}moSy=~pS+b!&Emwz7BFtoL`G|d0{ z*v{^GZN2yk{Q8uRxqV-bf0*1huWN35kNk3>INX0Resz4ueEBteF@Dwm@($gd3%cYN zMt96>pWoBbIlssMvizZy@6a+lU;eeFzklhkZPzw`R{4ASuNpId)^z_(tH1xmjzik# z@_SEN*oD6f{xhm!QhVFn^7qHzao6ry?cMnG@jWy6%WXYNzdWDiPcvb`+}@6^xgGN5 z@)s)q^3p%Pp#lHgx0?7__&42Yeot@r0{Pqa`foqEt8Hfc%`$ypH+%`9Doo%m3Taod?hF_b;)Q{@;%6oY^*a;@r0R z?Ni$4b+vc5^)Bdc#~;@+G~4RGVu!Yl`4c*4wd+;D-=U>%4e)6hb4XWbkNm#T3*`69 zrwjjjcs?s1ANfzi_vUrXo!imVKC@FkL(YHC2^~H76i(bYIcFvr$edmJt!V+Q5@Zqg3`4PpTBl|u=ll+g=Hn)9r zd(X@Y4g$UWJiYCQ^fq+NYum5AVRmP?z%sO@5By!bXLR)LvS8i}d`c_-kw3dIY*^nP zKenU0rx$xa_ciU^`n&sY zK3%@`^eJPuo#2ZUq>Y zd+@xrIqh8{4uxzX-?w;EyXJPb&C-81zHsU;HLp@$Z-y*+(Dwf?F2lZSt*ZD-ADpFeBCJim_mkLYOg zKNkOeK3}T*d{{jw)7+}Rk_TZ{`@A0c+stj7AXUICs}%NyliFr=Ea;IRv6P*;03|Q@ zNx)a(Gu6G&FT?i2k{NxH+V>febeEP zPlT*X`E%UaK6`e@%ntcD%f}xdE?H7pLHqkAwa=QiZFZ)7bzgDctf8Uub9KyYXg_d4 zpU8L2Z|M6|{Ld<1g$mu+1q;xSY4~A7s-biC?52iXL!121{pA0*A0q!Ss}G*Gr3+X7 zr%?^9*`Y&+`fnz`(foTjqH^(UEBPb;8Ax&b3;ex>~zDy`?pI0m4C!y z^vJLFUUkPBg%g)3|94jM1sT@6o(fI#bTjlM6t#H74glh|AQZ| zW!Q*9VZ^Y~uo1%x!%zm6e!}oiv`7`>IlgU1J1iOO7%U_l=g?JyUrMeoE!FtJHN*ON zFW;@&#TE*MmV&R>eSb>dPc45d`Kw?>CW(-Bdt-@j*fJc;uk4}xTAx2eq3G`D^7{qVH1i>@0mGWN`6ar#!PJ%$9A;Ooh84& zp~3$RM>Xs$1}*>nKFqw0739S8~2)^E4R*Zb}E{Mx?V|0O1fOpR*Tu5;GHNu9mE z63c388u))-C=AUPeJ7%s(D$zb;_LrKfBp5p++TwIFW05Q{wo`+-6^OstGy-Pnw`

<-?8Ka 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

S z(f-r_r|!S2|Bv}!ia+l^MEx`W)BX?YKPmkq|5N`D`+tSs8og(n`vuoH^FQ)O{73%} z{U5znHS7QWf2DuD|1jA4ANWW8561pe|MdTO|M5@1tlIe}c+afw{YSn3p3;B3|EK&p z|4aXm_#gJanf?b;|DpY7{XgoT{U5FW)x7Tm{j>ka{Ez(A|3m-epBMk3{ySLzAMHQx zf2;me_kX$nGf@7g{-61u`u~C6|Iql4{J-+I{_ftsW_`G3xTNB+$Jq5sIA{hz3R#DC4||IGg||B=`KWByP7AM3y9|Fix>{?I@CKlG3I zU-N(3|Nm6~sQ)+PkN$7uANzmc&-zb4``@?!AMgJ${^R^ttpBk8$M;`o|L2-(!uwz7 z{|+YqWBwoY&-Wi_|GEFsEdJB_ulj%LpYb34f1Lkf{x>Q7S^v$`zxw}y>OYMC(EpiK z{m1?9y!sFI-^l+${73zhzt;a$|J?uL{1@MU!u%)g|6uu3|MdTw|8f71`p?V%@SP}s zwf`FbWBvpFKc)X@|MUDm>;IqnEO_Mq-{^m*?JC*(&(Z#;-v40!mx}-L=0BqTb^lZ2 zKfV9L{U4qGwm2Oq~`zm{)68C)BG>K|CY-C!9UOclRxLb82@qp zi~YZp{u%$V{~P;1%>PjT)%gFvvH#HjVCp}b|MC8_#(&!XNzH#S{sZI4pZTBGe^dHr z|DXL|>Oao^rSgCE|9byh<3DgE|5X1k<^S{MKiU6>{ckq^L;KJCkMkd~|AYE()IamT zIXy;T{h$6nW&eMEWhI;cMf?}_&-_2e|JeUv{tx{Z7IC}b_dhiM!~H+yPyf&OAMxK{ z_0RdAJpQczbN(~-f7$=x{0HlQ%AfPU%>VWN8~Nk?$LRmbe=zw!`BVRl|5X2+|6~4_ zivMZ<+5gS!|IM;!#q#2R=KqoZzCKrS$S##k|KR__HI<3pf71Mq{hyTn^Wy)0^`E}@ zPxY_!ztq3lfA0Um{=@&X|DW3bj`N?a|MC6<;y<${6FkJ?te7XKjZ&Y z|2O)7>R;zSng28XhyGLip?}POYW%11Klr2mr~DEBkw4-;>VNz!m1O*{_x~dQl>W8< zpX&eV{Ex`yct^{ulQDU-$Q-82{7$tN!)= z8|**kzo>uI|5NoJ&i|0V=6|zqKH>f=_x~CHGyiA)$M~Q1f5!iu|5E$U_#gE@`2S|} zAJ9MI|7QGC^B-#e5&uW~zuqzBZ2v!{f35$h{*PFzY?%My`)|7c9pnGh{WsQsQvP4( z|1keM5dS#;!T68$U(Nr)pY?zG{}}&i{TJT}_rLPyKeYa@`9I@7_3|( zkpIX07wkX!e~kYb|6%?I_1~2Je_*;w*8fxc|LsL(WBy0`5B_UE>hn&0@Bb+O82^)h zy#K}bANl?#^MB=!`_JI7_rIY38{Qbw@BVj6|62di{xA4*|6A=p^MB<}{louL|D69( z{d50Ewk^ivL*uNBtN4QU9a;kNH31fAoJ5|E1#psDIl3l>U`J=RcVL zNBiH5Kj(i_`5*Y}`%iiIzdzn$NaOvVt6m&py#I9gIYTo2)Bkh+JGKAA_>cRay#EsU z^Zo`XBkn{4eUC^Pl7&-~Yz@e<}S(|Ihr7^cBK`hVVk(fSYkKleYQ{g3{i z{U6SMG5%}j|1tj+^MCCBq5hwW|9JmtQu!nP)B10!{|Ei+`>*=`H|#&&f1~|}|KI+O zA=&-^$RGOOc+DX;^#%ol{y%(bo-F=X{;N+_uzTk!Wc&Zi?p)}1|0Rz<>OZjmsr_H& z&;D;J|7ZM9{m1-Y?Z4LlwEn~RKk{e&pY|W~KY8_^X#b=CC;z>C4-N5OGyQY^Q}aLQ zAMszT|Hb}KO8>F{hxniRNBx)j&*M-14_(b~0gL?y|5JAvVtf6@=REuFKdkfU5Ci`Y z{pUjexc_n8T|?|V8{+TCr|-Ye{fB1jpPyOF?_dFT@v2H8A|8R(1`KuxJ&UN$HR;v~I@jqa# zg5mx@_0Rj?i2r#14{-wQ|6uO_QU8qpnE%E6pYtEoKkh%o{vZ24(EniKKaKzC{||hj zl-2*(|0jR-|H_~Fzt(?Z|0mV|r~Xs>KN|lj|ET{j4jIz#{y+Ki{ZHl3_#gb2I%`Pg z|Dk{IhyPdoD}UAhmroAK>OXn!KS2Mu|3Ln*|9SqO^Zs{*UwD zi>_VmxBtccALRe2|Ev86f98MS&-_2H|C4wBi}@ewzdv?+TMzT!wEyt`8vnEY1O4B- zw!aBGNdHg$lRx7>_5ajA?0?ih_*4J9|EKyVf9C&_%AfH+?>}h$m-U}G|Hb$}?*BB4 z|1tkZ{%Zf3|LgoW>p$d={7?0d{%^GZs{hpdH}}8M|7HA_;=jnNLmKb@Dt~?d7yP6B zr~YI9$NDe%Q~xRcu>bJ?dG=Y0{%8J={m(f6o8r&-5BkUbU;2N{e@6YY{=@iR_22CN3;8$Z zfBWn|^FQie?SHENo3j7kd^C?y|KP9wpZQ-N|5W@>{?Y#Td^yB$|CRZ_`u`aJ#rU84 z|MrIierWw@{TZ~rfz~(B`UYCxKll^srego~Fwb{RRZ?}zyw%gTrx7jOCwORSgy4~`A%?`W7-)cRy zZcoltv(*=>+PWhv_ORbv{q5M2-M?qa7T?(4+PJW2b6;DuN4G25(U1Dwsnv?M@<~OT z{-}~YGrnkJPAJ-;rx)zWp(R`A-J;!dVZjbrqGUt-UeRo$OLqG3vMu26=8XKbXuD2R z%6{J3T}8Wl){=Gqv1ospu4pIvt(|>tDcGae6l~jn6l`U`neq5B1zYs`qAm49!5&;= zNOlkJn7RCYuyYDFd=J0DyK~Vl`<4Hkcm3w}DSo@{vmtiXH2&}UQ^6L#d5Ha}T(sH7 z7i_&pi+1lBC7WWSq8+?)$sY7~d!KFd8>|2FxA<->+B2sYZR1sn_Tpjw_ondo*JdbM zcd=-T|1iY%_g`nkX$5=V?{wdPZo&2(S+qsJFWRj?D%rJ5`TcIcPqe~FG$&UW2 zY?t^g^zARH*e_0~+P{a^ZI+|j?SK9KgZ~xVw>9|JAE?{o@73(hAGO;K_trE1x7O=+ z^AfeD{IA%(WLw@kc|J^&-m|c z=7P;QqrbV~{C7RhZ)X3xl=1(k-|Zy-&o3@y{9jzZG)es5@mqnB|10m8GX5u>Ubfp0 ztk@FenzfB?`=9e4`J%tu>ik!zwfTMYx`99R|LE6s+w;bnow8@m$bZ+BtG4M^ev{?z z<%#s)jQ>{`6dU?a@h=_aZxuR!>OaLF`Zxc+pnvkG{!{#+|Mj+ZJ-Ysfxs8JUmH*;{Vqtsw$|JgPuW%fU%|EoT6J8(xS)Bkmkmoxhh{SSse^bh`@zfsKiPkpA_ z;6DA2U(fI9UR^NNe~Lft|8Zjr6WM?8ALH)WgV_8U{fGa* zdmE1r&Mh_k|Fl>5J^w!YPyW}e?l-1|Km0%SKjqK-ZHFBDpT}SQ|ISwwZMy@DcH!^c zwr@Q_|M36cxYi?o+JEXlkH7l=L+A0h#QneOAN-g1UpM;yKi%&)9zXCKkM94$|AeCp z4gL>LQJF0G!~UoA&-f4g-~Un7z@Pe0+5f{2EZdDQm+jZPR_xR({mr%0%68|B{?>CJ z|Akhp82E2Awru48u)kvl{ZDsVCF2kOkDu3!|Dm6i8v38e{&$uP{2Bj&|2wWf*njeW z_v)g-|3~}ZEdI;WKka`W|ET{}&M)=j|C_}t|8xDT|A+mD|3CP}svY@A#V$D3-!xjS zY}1S{XZ$t(fA*lVJv7SS*|@Hh#s882k1wp)d4)>G|CQUz23=40b-BS`Hp%t1b_PfwLB(={!{!l{>!uf7oFyJw>|!+{Be&V)U;VUXzps?7QZ3mp?cyKml#ZE|TT<3H0? zr7ZrB_8lzh_z(Uc z{MG*}{|(;q_+c{PUs$td#Tje1@!3_o=+dga_h;8>AOF>sESd60{0I9F{!{KyvdBN$ z|Dk>l8v2J_2md#otYr3ol^490;P#*Vng4D{^$Bf{P*OtRhwqYsx5U=C3}13?3>(A3xC>w=>MnwW(fJi{=ee4U>|B;I|MU1;5zs&FKlw-dpVGe#_guvJufJK<#x7npxBxr{CB?8bKXAwi2s!THQV~PakKk^krV1a(Eswo3IpnY za^Szt1736KHqO-Q2&hop#MWX?t}gj z{|&EK8}=XkA6%(s-#=EhPpq2h|0|Cz+n#a#CHSAa+l2RU$^YDA{9Tlti#E+}rH1{# zbdGY;{wsgf|C;Ha_WvIXc^xnM|33a}ed0bx_^bY5|KA?%y7&BVa?w9*^HGacGW~-; z-kzfUzy5&IMEs$D)PL3gcRo{T=wIzW`RCdH$Y1rZ{Er-4vAsU@cLhZMJKb2edEHOV zH;unl=l);y5B|*m&YZq%E8kGEsDH%&%>P*b&CCA~|7-j=ko{-0$2AKP*`@{*3=3f7pNUr~bkJ&f6+k{s;ci{;U62{u=+O{=Z$lX5>%(=ZQ{x9@i!ngn9`^)72(HG@@{CD-Z z9`Qfzzw(Fw|IpuV`@=yV+x7W>R{8RQH`k&^tn*IChsx{*e`w#weJW#e2 z|AFj3>c8Z_#PCvs{|x?y6zxC#KkI*5|3&;i-Abi?{Xg)}%l{`Q{}210;-At#^S?a) zDf_SSU$pTqM*L&Ef zd+)c;|0{pQf7CzYfAT-v^Mu&{L;VN+U)KL87yhWtlm84J`yu{Y^U`9L|7rY3{geL` zXH>KLU&{W&|7-pS{;>b5f3^RN|EYh?|0Dl}{EZR#f7t)-hbme82m3#e{>PUqng3`0 zPy4^pGo>W|duR7|hTQ(=>7VicRAb7voB#SNcr1FV#}DH@=861c{}1v1?4HL=4)q`U zf5d;0f3*Lo|FZw9`cK7wgW-?(5BiV%HUCHc7yUopivoY-|A_x5g+JRD@aOyo`v2gM{?FvZANIc)fAoLg|DpfO zUaDmAU#$PU__6=F?O)B}fAUBF2j5uKKm0%W$M_HWr~L_7NJ|FHi9@mKwKZc%CIAN=2Wr=0o! zGuQX`j=%c9`JYa=7n2)*)j#Whu>acsA%Cs^q5iA&ANv0pud8PLpEd5U8tnfcwyI5J z|H+^FNB>9bf9U_9{tNz$|6u>gpZ34OfBA}S^Y@C)d_l!Vol>zaPN+2UKjnYsH)T7^ zqY>(~4EDuNe6M^nglc|093Qe{DLe{~iK=%>RJ@hZ_z!sk{lD@@{RjGw{Hgz& zJfA!^!9S&c@}I(OS{{GuU;RJpzw`Rr^~yib{zLy;m8u#4MW=In_7M)=P@SqzrxkkhW@|ru1;kC!T;AkD_b-E%>TiElkGh3mHr?2U$sIt)Bh@et7Q6r z;1T~OB>pR|TgmKyYH0Te01a@wvue|JDDq|8q*0 z*PZ+Hzvu;J1OKT1^?E%X5&rLNTeVl_tl5_LRr~3GaA>c8Yq z|F8BR^FOiw3;xXiV*IcEAN4==|0(+)^?%3{75kO@qM7}N@`wJ1e&9Kc^GE)#{9*qa z@&BkwR{x{@NBmFwPyHkRqyH!W%RlpY#_d1&!~QG($u0ha|40A#?K3K-`bYhj{E`2u z|EK-e{7>V5_5WJ`i~Je?H{(B$|6k*sYCr#v_#g2f>_7QK|A_yg|3}=;G~>TxTQ%dq z^F3ZS5dNxv#D6C|>oc6kR1Nn3rk$$xntx;6Kdai~n^!HxU+w?oqJP$Z$shASsQ;gG zrrX~Qy*D_%+?fA?{@MRy{U7{c|2hB1`cLE^>;G#1WB(WaU+q8nQ~#|0sQ&5y5&uX2 zu>aKmXERo_`2X8QJU$Kj-=N*!to8Um#s8zuiru`7=baM&f&aZ{)cW!N!h6?;{kmqq z`Jrk%^mx89s%A&G)osjUH3NU_e@rg%A7V51f5D&jKaW54->m+_{!fa3Ui}yRo9UnV zpZ0$k|H1!5|KNYiE7dIii~OVghyKa`$~&qJ`w#xVUZ;qpYwl=|5^Xx{Flamtp6*2jsIf)PyHkQZ+o(u#s7@|BL7*=^&XW&R)f zSN`z-|2(T|Px!3!!Xs)8{x7}jvr*60GXCE`=>DLO|G}$Ov-p47d#erm5B|%IuJz+T ze8zf1|A_yff91d8hPD5B{}=OLnE&Ja7y0Y_7x;7jN8>-W|JwhJ{eR|v;Ibn zQ~%`8{7>t@n*S?*=>Pa_YMK6N|H+^6KkWaiZ+Jf5=l`Mq;=f(r3I1~|STpda{v-eU z)~T8DANxivZ)J|BV0W|7rhY|5xLG)_=gC z^Z%;<82{7%YyBsW|M?yhUg3JC{?-4({;U4UKTrRN|H=QK?#~(jD}Tm+DgDF#?{!r@ z+y9=N_|yMu{Ezw%^FQ#<)4%5bsQ(SbU*kXef35%0{}05U`bYnV@jvUoi2v#ToAF2f zH!1v8|KJb()BZnoSlyui|3C3h#edxY(fmK9|CIgD;}2ak{$u@z`Y#>zfBQeQ|2qHA z{;$@5S^po5{!#z=PxQak7qu+@qy4Aa+hl zT;;b8-2cyF^?vam@;~tZtN#`J$8B0S@JIXy{-w|AcId?(^LzYH{cHSB|G(%0ZCUiVg8f-f35$({%idw#UJtihWqE?u7}{@Zz#dd46AANn8n zlK*h~5B@8DT<@3vjohQ&i2o7)fq&`wx*`69|DRm=)BZ0ocfC>nhy9QIG5?qH|I~k8 z{P&;oSNl)?I{#1oWBv>NpZOpCKj%MC|Dpfa`Y-E0s(;jf$Y0|>)c=tGrT7n4|FHk$ zKhvFU8UM-Q{)^WCX#XRB?*FIw$NC@hKj#1BPyes`U)=wU`q%uQ^*`PJiv3@W|B(N) z{)7Gx=0B8wtp5x){)_gX{vZ4`{yToHwtn>=wg2D``w#xxt zxc?RJKg9V@&VMx1KYk76pQ`_8{|E8E+JDA>@c+&1Kk~n5|F!-@{~zmri2v#TWB#Z9 zKc#<-{}KN&|A+nmJsgl{wFv7sLhi<^^f~ssrw&M{~I0ea}7EB zU#S0Z|0m}E8vil>OV$6m{~7sf|3A+EX#G$7zli^7|H)tDKi2=0KjQxsf5!jx|Ik1D zzs7&$ulnEnt+vTd|K!j7ANL>h{-5ff{4xKD`TxB9kNw|N{YUM8jQ?W&ANfD+KjXjH z|LYh3$^4(je~AB;zs7&C|6f1gv3y_sH~N3&&-kD5AM-zr|Fr){{j>fD{)qo3C;PAb zH}1RtaPW)X_jti;*unmjKjMGzr~VQDv;QCGKeYazm;bB(Zzx4la{iZF;|LFfy_8;{h#{aPY8vjqO_8{A2!){15(L`FDEX zGuHp0f6Ra9_5aoW>;4Dt|K!zw5&y&gSGBn=tY!Kqf9jv} zpOJrR{x4NfzW4PzuJfkr{{H?CzW%S52R(bgmiX+o_S$Q$y$^c-kLpkJf7G9S{{!`}>#o?Y z|I_(j8vm*O?ZtnZ|FiX{^?%f#`akXe)AK*-kMDo5@Bgv)f5H9_JO4xf$N4|D|6~8Z z=WoS7*8e-&|FQmu`Cmupe;WTW|HJ&B`hREFpPv8d{15hj@cfVOKjZsW_6oeE*N_|7`s`%KvEpr@j22?f>lgPxky5`agUAht_}C z`cwaB=l_4{|3jI{|MC2P5Z==j?ElmH54-=@S^S?p|3~Y;IR8WAzo7nt@jsw^D3kyF zxBBD$PxZ(1AJre<|E2n4|DWdns6W2R|E1?Y+W({dADaLFN&oitfAs&( z(Ep?PKfV9K)}NmL+3$bj{*UpWeg3EMpX%S<`A;zar|8`H%MhIz#;bZ|nc~{f9lv z6q)>wtv|+psz2@jv;80QKkP9I>fhe|FLwN=`q#nzf9n4o?f-23@%ujQBu{!iU|E2jq#(%c|qyA2i|I_n7 z+y4dUKmJtzrTahnKYRbD{eSlP?@#kzwEv6wA6tL+{x4YnW8eR3Pk+4sCs_acpXC2k zf1LlI^?%y`VW0mxTmP5l|5*QPPk-G1JMw=#|Dpe5|Bw1V)nBmwN9R9j{g16bjsLX% zgZ+Pc{-^W*bpETo{14B6SpRG9{7375?EN3_f7AUR=YQGzKaKzF{Xgsz%yPs02fO}D z&;N$;(DVJb|2wZzVfw%9{GaXrwEoxG`oGlwY5lJ~|Ht?*=>IhSQ~m#&`VZA#u>OPb zAJ2cZ|4a2}_y6eqpN{;$J^kA||F@?<`aiw@CAj}n{oBj`X#WTOAN9BKP~n^nQQ^d^ zsQj(}%kKYS{@)qC|AhNLz5hk)e{}wj#($dsceMYr>;F`L?EkKZyAU1a|LplMdj6yJ zf2{w|{U7r`w*G?sf5G_A)?YCGv-`go{{{QMxc>|4&p!XL_kVW&kN%JOUwyR7U;3l} zcceev|2u>JH2;ZEN2Jz|FHkx-u}(fyz8|Ly6I^Z$7ML;dg6z)UC1f3fvv*MHFe zJG=hW|LOUk`ajj5*8kc1mwr|JTmKL9KZWyfAM)SzKkEM-)qmLgKc4^F>;Jb`|EK4F z+W!^o|IzucS(o9Q!n*%K^FJE@Y5y1Nzx4bks6X5P>HMdl|I_{-)xW*?kNPW~P+{i3 zUe>8_!r|XUo@%G@|9{e-UH=u_|5cAFa%lcX>wgbI;C}1B<3C&f_Ugav{I9+9AI<+d zs{hdU-|74(&Ht(YWBkYYKX(3y=YP~6<3GFp|KI9Q{hz)6_fCVHpOyc!^FOx#v-Rh# z9@gpNKb`-e@t@uQVW0od|MC2f`rE<$JKO)+`s4mj`+ulEJ^!)$zjXeCt$#=RKl(rI z|Iq!P-T&=q{(~L=Y5fQ1f7trd{vVD1g8q;7Uz-2X`7b>Gtr1fBTm1i1{;%Dt%J@I- z|D92Pn*Y=MPq6<({h#WO^Iz!y{Cb!f{CE5p)SsRIqyF~ALz(x#+4(=lf5G$rpW?sZ z`JdMR+l&9y|LOfNsz3FA8vk+rS1|t*od0T1f5H9V%t5u?^IynZRSxRE;kW8v@xLk- zV!;1${zv0K&Hvcvf2u#t|Ed18{>zU4g8KJPRs382-;w{b^M88&YtR4b{J-G&kL~|d ze;WVqfTnEy|1|$i{U7UpwEjcuzqtR?{*Pe%r~W^?hbnXaqx!FiROPsiRpt1b!Cnvh zKkAS9KkDC^{h#K4wEu_ue|!BOI{(Fv|6}_paoGOP-v8PCKbrrw_x%T2{}c3o)E~e9 zLiMNlKfV9c-uwsEKkWg5E*Unbr2RRG!u z`agUA3-5oh{h!wVQGa&-k6r(@OHpFcfBOCt>QCQ)6ny^)_3sStztH@@qy4|5`p=)@Kkonkq`%nE&DZKf(7O@%?A2 ze}&Eeeg7Hve|-O~v-m%){|o9*>%W5f|2O#`t^Z;D$0-kTr(EdeL%t;#|JnIJTYtR& z-I4ws<^S~l7mfdH{ptRX`TtMI1l&wsT3L(l)1 z|FQL_`5%q{mGhK2QJ%{G;s130L-74)`u;n<|4sGB_urqd`q%s4)c^7Q_s*z4JN~2o zwEoAw|4;R&^*^dV&HvH=QGYX4<-h7bnExBWTWA>n|6lc|_y2MJi@yI%-~Xif|KGm< z1@m8Y{uAea+5I0{|E2jq^?$bhLv|^1P=Ad7Z2zbAANu|;`~7eF{U5ge^!<0b|Kt1L z?dAWS!T+iLg7sha{?FE*?*HugkNqF&|Bg{g99sXO`d@(@n(hC~_b73E8gR}0EB}9U z6=H(G``>i_AN`-LKlOk5{@dU5|M&MlY5kYZf6)F9?*HxSZ01K$-lnc*53D@X#DT!{dac$*V**P{vW>ofbqX0{r_qINBwF2hpqp8 zN2R~wKk7fAP3bTF1cQP>QDQB?S22l zf5gAO|JYvq|EKpKI%ECsPx1dx^WU`pOXEN7|Iq!P>QDWjt^bYtN*t=c4}tojfc|v< zr{{mH|Iql4`#;V9Y5j-Re+AF~RDTB}6-NKxMENiM+5XSY|FQmy^I!P=7ySMg`akaf z?C-ze_n)Z#^!)d5;{W~r1N;3KcK?UYe|DDpKQ#ZR{r^AJ|7iTD_dn?T5AFZT_zz|F ze?0$T{73z9|EK|55#E|A#&QP3QkH|6`y3 zsQ%Rdss1$o@5uirxhZq9p!P=NKXO$639xVcG*)EhziIuC)_>UgWBtDZ@=5f6iO(>r zoB?qqOPPuPRDV4GvETou`9Gci5bXa8>d*fE3;X;}-~VCX|D*MP>i_NC|LAP@e`)+@ z_kU>pAM<~D|C_BpJ^#`9FLwQh9skk)JJO#W|A)-|*Es?8&snO(q59MNKZ5xm#(&!X zq550=Q2Lwx*#D#XKk85C|LFTqIRA_HfAITng7ZH#{^R~n^%s2qTfXsM^S@MoeE$#U zzv=rQ^!^up|Dm(?e+BjbZ}NXS|3&r3`Cs&ZTK}Q(zoYyQ<3IX8=6`hm$92N@R{BeS zF$*P*=zFM_!}lNEpjXE}|5N=rdlflcI8W?#g*;D8g@f@Q{U7sxTK}Q%Ke6?v^M8W+ z)9-)L`ENS^%l`fYd;XL5f9U%U=>P2dUo`$>{in0(PxF6v{h!wV*#6I+|EBqWd-~J! zKaKzYP5y`Rzdil!s+2fX|Hc8zoR7VfIq6zT9Q^*P_-jSx`%iKbN*uQS)c-O67p(sX z&VOV758r4XTSeW_y5jt{`*t^kG=oX z{x8k{=>E^n|7iSg@BByOKh6IJfWK1zr}|_3XZt_u-``f5qyGi&TWG3s%;i)#i)JWu ze%L{c>EHU}{V!LjIZ*${{hwX`rSCse|Hu0uwExe(|4G09+0pzjo&RFbe{?keOZBJc z|BmW^ok4%<|AO(K&i~Q-AAj2a>G_`>|LOk!Px+tV{!jIPwifcYf9oFzy*IZ0)c+Nr zHi!QIm;V3${+FQsc>klL`#&`Q6P*8V@BKf){y**iGV#A1|EK!X{x5$2n|}XMR{_2? zWc$DW{Rh+^=Rf{i{n`Fc^FOLT`ag~TQjeAXR{y8|kLUkw$Cdx8|Dpcq|0)ZWIqdw8 z>W}ds{h!8v^na>9e*cZef13Z%`+xNP59mlXc?{pZf`{YM)A+tZ)!|MdKa{lE6|f2u#*|Ed1C|6~6j z^|zB#X8M1${zuRM?ZtnpKaKy+aF>qm{}})2_n+AJfB)(J2R;9@=RfKBpU(f$`5!v} zN9TV8`~UR*C!PPL^I!D-Kj#1J`7f&f{wM|J`|tSu=gy%2|7-lG^&i^*r}e*%{J*3A z4?X{5{)hgLbs{S7BFRT9}*#B#<|4ZvX?bZK# ztyXEb|BwDp=f5!i)A=u|Kl}bC=70G9BgTK!ALBn;f2<+@{9nHRLG@?n|MdPp=6`hm z$L~MU{y#ha??`{T|I_*(JN~o%AN9YHt^8N~XX{@mqRJTxZz-VuZ2xD+f9n5oxe6TY z|6u?31(gr}Mv9|EK+b`u-cn zfA;(r)gR}7>HH_1|7Y+2^!-nq|DgVl`#<`BXVRa&|5N?x{SWr}PcZ*y>o3^E^v|4;Fs_W!Nr;d{eoLpbj~$#aZiHSYy|E2SvwEsi%Kl=WUVE#w(q<@t@xRru9FJ|J46G(%<}p9H%qv z|J48K{?C5@k-h)_$^QlQ$NCS=|LOU^qxjGEf7D-Pj|%7bSyd+f)AK*-kN%JEe_{QX zz5k>BbpDUM|A+2`_hdkSJpa-6Ki>>g;0V6|NcE@tKU;q~|Bdti=>NF?_Xt*H&VOwE zY5iBQ{)hQLTYrrI)c-q^{`CF__J6Ve!_NP3{#W!DyrcT>_rKfQ|7rcdz4{;3pB?{c z{}<=K*!uspQDO8K%>O&u|Jm<<(ET6%KRQ&NgZk6=Uk&5sIp^VRv6;Q)|3iPw{{-`Y zI{%IHAJqTp{g3wipPv8e`yVv_qxxh0FXX!dbN;9Lcb5Fm{)+rx_kXDVH2$~e|5*QF z$A3Eii~V03|Jn6l)Su4(WBjN2AFcnQ{+Rz~S*dWS{+3bjW)kcC*Pi}#{_~&wAK!mv z>tA_Uj`Q)A9EZODhW?NGuX+mK<&02azW+z(f7t%d&i~oxKX(4l)}OuqWB%7!^%so) zZ2zbGKj#1R`_I(>Y5kwAKfC_JKL4@vKX(0(=KoaxPcEv={?FDQ&wo^ZTK~cLPv<}B z{?9)D)AJw3|Mv8sUM0`yPv8Gx>(8G5MExgzRc`nG7rXz5{U1F4)BPXkzi|G$q5^tL zeTKA~|4GAlEIQl%PxF6_|Lwj1FZlf@tpEN~{|Eh_J^#!0e}_C}&a!PPoajQ8|L}jT z|6%^$(fPk4{RQj4s6X!iH2zcnpE^>WdH;p(|LFg8{;zer%HQU{+4uk0??1A?|3$z5 zj`LqQ|G#do0;9i~2;>})|Fivn7<{j)v+e)98hMU{kNjWn{|oki*#6Is|ENEG|CjoI zY39G~f46u3qxxT#P~o8d?)z2$(x2vkg8t90|IqrsVEy-h;{O=`1>gU}^B+C`)A&#C z|Fn1iAN{}ky`g`*|3&A2cgVtbh(Uj~H}Z`C|C%Px=#TZk4d;e1_216o|NqswFbJ@K-U`RS_55cplc0ut%0sJ z(6t7-)yHllWuD{5t%xxUGssvs*@8E0-TVGNELDcqY|F$0T)x;ERrkQ zLxH<7E0*D+%-3B=-_Iv+3{Nk-F~f=YpOL&51YE57F6Z6At(Tqu3GH2(aAfN&;D&4b zI&#&>iRk!56~zGe!MECG4{);8^$fRPLD(cKj8C|WN69ssz~AMd8o3MH?CU1I_X3xb zdaxSpNp8FJ!U(t{W8=OrHgh5)-M_UJ0atNltQm6tVLCO)eX}ZBma~sfWcC#n#;|miZuO^!gdYnMWpA526j*oQV9VhhxtG_o}*O zF>-5`q%z#{?tbr<0=LcoZpoq$Ct~~B^wT}yW;tjbL2iJ$bv@dP&dacR70M^~IJS4L zhdGfCZ7a?e1NT;GzGDs>~!3Tq^^82Sf+bTTEoEC4#+F5aO5l63kmr2 z!V0)~4Glv3uQ`$5N8M*S0GH>uixUpq%t53Hxv&RDCMCgqVqD-{RF~*PVtyO8?gGwe z)|PF^eXA^EIE~YzpR55cZR4>UCaF$D@m=_hbHI(7E0l%Y#gyP?w0C1j#GJC7d{Q2^ zW%soVCsI4r)Gh-!w*cK<5x}k7JLVg5F_Zl6uLExXn3{EcA3Kq4efB7o05|-DstIy^ z*W@#tW!)#;k2`=qJae=@qsDH^V0}0=fI+J-(y8S@Yi{ZUAn8;rju(g-+!0 zaGTJ*Dz> zz^No(i$-pbzvNHkYB?E)9f12h>7C=kIww+)cy+~Y;M8XvEkSPjqN@z|rFOP-?KVEy zbNt8btIbZthc~+S1>k~P#;HUC*QjdRiuS@6F9>!7j&ScP^!epPb~-AjWdb*+)M+hp z=bFDW+zeZOTm4o(sYn~yuvx^JZ1LaYSPGo=&y{D8GtWN$3+-)~RO#vh++{uT=$V8w zIn&Ka`8RNdGn>kh>v>GS4LQ3z-k-h(LOdw?d30=FXL771Cr@6iChgqa$!Z6IySur9 z;o^UVt#SwMlKX1My@Q-dj!ksn6yTn1RI@?OamMc7Xzx<%$bxTN(4*0Q<`)HLa&A`T zxTU}?Ft~dLIn@DLLX&~JonmO{1>75LW!VL)&gA5w3-6qOQ&}Kfj$Gl#mkif;R7J{< z06vMka;Ez72xns1w`|W|;POK1Ric2~mF(RO?FBjY()0!HOaIury~jC|FLNSv;_&A- zhps_RcekQ2a&rT2#{BZsJFdhyd3Z6vV4p=uAem zh#Z;*oJ)CBBy!0Y%(|n!5f4*dZTIDq99NeM#>M(GM3uAhqy%+9ji93Dx#6#O)Zm+e@MEyxgWEgN( zL!9R#m#;iq47t34JJlqBYq&p5&feCUxO~pwTn6rdj`R-XwtxM^a8LK=M}&Cu$^!2itg46IQ`ke$)ntz$qbG9y&r*_CAp{-xle~D zNFcXvWYgw7UVKvX@XF3mUuP0sG_^^=YOcg&v8aQ0KPUrPbEd6UVq>aEVC z!Sd%DMc|?j={X^{koZfYJ=Yn-48uJ6YqVsi+ zJD*&f(h~6Nsxx_cr?UDAaEeA@Zs&n}YMIDz*5-3`dIOg~H*;QDvNK7StKF6ZoICer z(M906nif)MFFp5Z;BGfQdFrSslbzvAJd3R5D}igcl18oor!6eh2RToT=Z|^8LEFAO)^^7_GDE_@O(oik%~ zwKEyG$kSy7a9>r6o~HoUW*i}n_L62t7l{M+`d*6U>?UXOy-rHp12}oLU)pKFT~nOW z54p1nJ%$E5^NGdK!WW}{I}?@Ke#at!`>v1~c^|m74R09kW=Z90G2m>}_8gOza3MnT zwrgGkE}*CO_e|ghWd`;~dm)jtPw#Nz6VX#8>%R4KA-_b{-hTqz@j8PQ*}!E*sSiLd zQ%~_jci^H|=Z-E`a3Mj1ubNf?H{;2VlqbOX*yS)>w>Qq}L5_T~e2nGS`|4mXWaG!~ zJ!{gIMlTzZ3*1;e$AM_C!g>he1kz)1@=Fr4jH^PvIAJ;_t4 zcXJ_Y9V1tL0`7I$2Kj2>9^@aCLwghTey?cT1pDRh+>eC;E<{~KqozkM*!L~NyuJYE zaaKnjxdr0NQGURE*0H;IXO|0+s8RD&1uiyc<*Rz&MtYVooYlwF{8l^oxyHvGPDQv7 z*OB2O(}7bRmph>exHofy6wsbX(aYYxz@2Wh9T$Aug%qT2+G`1%UP#6M@4)RFGI9uV z?>=la{AtT4_lM**IGlGO`_9J8dI49?KmFw=aQb!67%se*$5wCPw!1%1SaRKk41B-- zR3vac6uZy+4cyoJE<@4YeG{QOEgSh{*2@j?v~(D@xUEi-t)Y$ZC={>NLfYX zdfXIk@&xWj_rsGFGhK+rBAJ9|!1?V;6z&1sijAoZ_gy}4%=Zm=o;mql^tlUpJaK?- zHE=sJdRR#S*IUP03GFS*^0Dy%PIAk89R}Q%&yoH60_R*3$8ZTpOJBGF*T-?+l*AerVwiX+cRFxA z8wwoy1E+SwLUiuTgt54kn2~m^!*k%WtZ$DR2Hfe~U^TR-9(%f<6L9DHZMrNw+?5>eGvZS^XrR6LQ$lfH*1$P_WJqcDELYOgd*YTEz!^^M8KMQ;W_g9- z$enwW{>A~g>&LrAUtQ=*-kiEyyArs!Pf|)I0H^fj9>a~WYU}-ZHJ>~wl3E_Q+?DJe zcyo(4a2cl3lcxap;-1Y2wD)F2BF7#$;Vaks`>b^(p?R{k2Z5{3?YTz>xE&FaBavID zU$wb<6`yP>t9rWH!IjJ?ta7*k+>9A*xFR@DHfuH|qDx#*rP47cao`D+`2 z`~39vLirF^vTpj`5{W)FX@T9J$Ql5*=zLcN-mun^GY2! zE8g=%$cbLpAA_8er1Aarz+K8vc56E3N=~hv_S68lyB9oVX9AbFt%Bh;O)z`>!4mTE zX{tM|&$*IV_k{bafjjE;FbX-_WxL0sy)RFS^VR`(Fa6e`=T}|H*mp;h{D5nolRRh^ za0(-|G?80$^9`@ef={e(DO}V|b|qdW^>Igl|mkjqvd&N6z;NqV0Z(q3Y zN=94XIFSV0(6T-KX9KtOnfExfcTs)GhxaS^BzM)woIy`q$-zgZ;RR^#(w6_T6$m88s>BQ{7w8Ep(TM zRNtDkV>&9kkvlTmRvYc^d+3as+xWT7S3t0envt)}_ zKPflzaGUCg6Tqd4#(qamc3sRwv^VX7r*P3SKAGsSloKH1Mvge8%G?1iDgC<3T;Lv0 znmq}*0SXUAmIL>7uGqX9B{vebCbK&qI7#m6FUa{xR5P6HjBrujQi%5>`kE~t=|&=} zr#3bLmohbB<2>NTz1cSz?FF{*Ma_WAU4PN~;dnQadtbh!pL9*ygZfLQ$dz81Fa^2# zImbl{P5DG9|E0rtJvVaUqumot;FMzLS{efv8OUciY0WnxOMxqy8t!>=wj0^AOyia@ za4#(PyhP5>)PE}4^SXXexL^sNytjY1wYP~Ic_+Q-v@LM?ecTqz2kxi3>NMmE@}3AS z0j_vz>Td7lZlsrN<(?hDsib#%gxr;uM+}!1?%$TT80tP-MjfoMb|ZcpYdlT^m+Cm4 zEC6ox6MG%B_qI9irwMQe-i$b5YVSr43tO$Z2VBfh$t2|ZpODr??uF3O@6Q+UN$J8{ z=hNNXNcIQaxy8UeejGG*A#e|!5*cph4X>{YfD<}Ycy(-m8*!7~rTqiAX>RAvBIh~N zLJ#d__m!)AY65xow(UtrgWZUDkiMKuKiCI{*ejR-H%dl`gIvH5?P_D-b~?4*6%ThK z-i@~1CIFZGs4yJ4w^e5tP9^d2hn$6cQqVU$)9t7mk#71`VFFyK{YUXd!0o?dM9^N= zu($8#0{1p;*pt#TZX`?h_frSp=JY-4kKD|CUl^{hkpn+_0n{Vr_sL&)#f?ZlcDNA& zT>15{jmR~xiI|S|j;nd*8v?g6IQZ3_BsZdW%;?a0;1U)!Zd?r9g$Yw;ASavJ_W03! z_&rG2n-S@5Z3gqjey&k#_)43=Y9|=a3kk0+8eY1XQuu%6S?$D>ITRy{q1>uCU8}&S}Prk z-AH=KFE#o8P(Qu9YN{!4t^qj=mwoKZ`HXo`AD7duDgNk2_?Lc)O#$xI(x^+wX)Jb} ziS|r|OOERUXSYJ4c5a;;)EPEZnF6={lZ)a~;EIL~oQ2$B?fDVubNQs{%i8*+7B>=~ zKpr~*7wXrvAGzJ%k{QllYJBi?;2I|GXdEWuPR<+exVRTMFKGqQWx$cgRA_S z<`u}D*%HfeS@i{LQw^d1XAsi7Nzt7=bgP*20l2ti2Xiyv%=G6QqCFLId6_P7PmY{v z<_&iz=1WV}ga<&K+F*D#a*_iZ7*2dcH=~p}e6m1sUh^z%cQW32u81OVKOXO#Y7Sg# z#X%#qH^@G3+BD$QPxv*(>$sEqIf^AZz}+|5eE~Vg+d6ZRt2G%iI(as%zbc)tinH8_ z-5TpV=D-~*m^gSja4LIB7|!c^?C{CJDVk4ud}Dz-`F-~D3pe1_Eq`i*+{;x#^U&Te z#d#(-X7P!As>YCTb9dtPE^cK6aJ_!HY(Xwqd!#XPyb@~F?M|E*<$k;d zoX_kOPvoX`f6j2FdUeO+X7b4yt)uA+?A^(NpDVUJ11@3W=|JQ@zjB$6_R@OPWoQ8R zOm#*7G4Af0U&IP!7m5#)N9ST96-^|`mTkLmNtA@x?# ztO$29)pvX7OyCaM?}|b0mWr4Oa!NJ_mdOIA?i*%$?zlT?94{qp4cyH`2V#-i)D*{X z8_tz^9hd=i$8WKxx1V<>>56TU0l*!zn|>9!p;;!2(B7e_*kgTx>ux=(!TP#85eAPs z4xC}>?wiQv9%*8@5S_BSyQlNXgdH~1XQa3jnf-mEZv&V1+badRZ4O5kqrD!H5hdcl zm5q_utC;CdEC!BO<^lKfzF0bPlctj;$bCGQ+%1Seol9lh>tD~@$=IBf(@ns&jhgfj zxvGBU40mPvVwG;dIr+;Bf5USp9NRdx{)3=CG_89Ma>qUdo1#6b-|O}LIDGO=LCp1b zsXJ-O`h9L3a4TwEpCh;6)|jQp#mZE#Y0-naS@*ALhicqO^TQO41;Aw)1-(G7TWCJR z5sgZ&8*pm<)q8q0yOZm>#pgHS&o!F#3b}-p9?Q_)!e1*+)a&v|>guAUONBg0Zpk{0 zU1+a%XAyGi$0?X0cjcHtssnIilKP$;FX=%N;}@Sh2b{BxcQJB{aPuXGYt7WRL{4j}+~Ebly;{}yPHnjdDYH=w4hQa3coawZRpe>|B_ z9=xhm6J6^;wroDz?HX{?#dR6ZdeiQeXm8EJ^N(i(x8d{HO{Ml8WN}59_fz1`KXqk( zkAWO5E94d|JXv~w67(;VKVQA)?m;AXmNt9>?!}Y^%-a37opPf{<*i2kBYpZr~4`iP$$ja>Tri{gx(C_5Xw0pnz^N`hP>9@jp&JZmb9SkZ25`Ig_1spF;z2gn8jVf{F4ZtU zAGx>}W^2)&gxt@)r?vUy&ck0B@tGc^_xh(N3W4iZdhHoL@s0A zY#ZdI2;2dGCKqeDfgM5@tMG;QXRo5|DeHF<}F8so}?4 zLN)oM`BRWyrI06CwS!~06Sy7y2VFsK??FDp*=^-Yhy%A_(0T8NlAfeiX?M~Y;7lhj zKaboDTmOw{FLEbecKcY!$D?K@of+Us2#=`W2d=tR_at&(byRJU8*nyOLkKuB)v9sp zP)~9>Zux&2ns0%x!+dGspaoR(YIqrGou zXIR<;x7teX`s5{^BzRMSt`l%ym&!z212=56kOOkIW*OF%BVipFzZh<5q*|fzutTixEFn|2iO7^l4rCT?M<>%-CQyP z>Q^7H3_9!TN%Z{^^B)1H|GuWy9yr}IUl`6fubYb{aB(tuyR!p4$su9IE9Jm(+8(WP z1g_RSVhh?k=WXi28_p+>rfd@a65>hbI8_IClZSJ_2L0zQz@0Lh;)tBOt-OyZa6^0f zdGtHzNv>qcuN?~9(IJ)`58zA{iW%<4Hz|U(?kAu0V0%WpCib zY6G3nUYk;nKx5z@r>amkY?YQ_#U2X5hJ2YG+sZl|j|BiFBP#I`JTKG8Pxe-V)6 zNvd>3zqkVTQ`}}(AaD)`au_cD_1*0=flH6SKKsml_&b+B$lMQH-|nr=+ksQs;OK(( zinl%sx~Ik`<23SaWj*yI0g{!+t^gOMqP;E{xcsRDU6Ip~HQu2MoW=b5k)L^2Ko3j{bSPQo}`bWrBNktivxZ2_5nBLos}Ef^G?1P zGy%BMYVqEaYCXxBvvEVaE7YXrMulAn2kz5#5qIQzMg?!brphOE%Cr1d{O}~keO5Ip z1J~<^!N7yS9p4_ya4QRowvGmF?uq6a|L$I7lZE>u4sf;S4{{F!XJR(r1MMyGj^W0t z@W}}EA(p56dJ(H#^+zm#bBGD9J_ek~$OeYX3VP!=47hEcw;n%|_aZwF!cts)=g73>;6>dVKiP1mHf_ zxcH*I1?Acn!9zi}$}i~;ZM{gT$}1&(;C{*lOuPl$;WSx4OP40uWzske@dwAP(-xx3QIpu~@K5)|%ohN4lH>lWzi}rpz;tY2L z?u7ogNimna$op<*tG@t8#>*Xl0$ldhCWceKz#CE{$0t!s-yF|O@*;DUe%$Oi6!Pr- zYlL%w^WAzR5bfPpsOYy5xS9xU(NFiiNXVcY0mFfdn`XG-1#p^6$yVfUs@aK^4~F_x zT8pjJGgt>@&kbh*_i4DAHOd)||8ULERltcJ)q1YY_afrKCeqfxIc{pyECTMp zkKk=+ucyefFRx|cykE&5Z&vO_#DpjE{ec_Sm=sYA+?=Olwj*~hHtxL{a6?W_KIBvD zMbt(8PaXwMq)7f-32;A7wKTj*&5wINqkuCoTvu8ToM)`QA#ge` zw;416H!|!h!&SbFa8DTkf9D+oW_jy*6H}A5!ZyI=#_6B=4qUOd=`OSv*h9`{GH_4o z&z^}k^d@h{KYkDhTy@S#(N^HXCblqK?w0{eZuEzIZQWUsj3wSgzT&`+XyCjjMz8w~ zoW6K;2-=I^zkRwUa9$_-Syxzj6BpZzIVr%|S5A8%Y?qhTRHPq@T=MkcK^ObMyuih^ z5BJ!5lW8UrH+jI79Q&DxT7@U-tfnH!(ZiyY?J#acRG%BNysu8;15yms^nSQm}t~ zXxtre*PC4ZddT_#aPE^niXq1_klK&jw4S3~fA{7S%|415L$bZemTx;=z6b8Ik;5|~ z;OYn7U^xB$jMy>U^BcIOE#U`{J5y;Ej`q&{)_Bv@3-Y@38)H_y z^(Ns`p~(u$HEA1XnXN!>SxPIz&3dt;uS^=!m&)0M3RpDtkhkH@UN< zNzx5C;{uBd$ZZ~9&2W2sew2!L+*XXFIhujI( zEQZ^+Pd6h|49@4Xxr)JtKIBBhJ#hozV)z4p{{n7tv;ASTH@RnB-E`m%HvXEgzQl(N zNWJc|8o1|gFWy5=G+X)zauR!GhTiD`=g{Y+J`YyD*=@EsiuQti(%j>_L;YD%wNS{#hxE!QxONM; zj3{Lhc+Wms=#@roHTzO?nAcKY_9C93VBKXD1GE6 zCVyeL(C8h?Cq&@fSWvyy>$ne@H?!ZuvA{(t%5+1nGBhF@?cF<5G*=Edd%t6sWMX~D zPa=DB9&p9tF=;=6J7P8E1ab?qPq{=2Lx0~p{^iYhA5#66D`yK_+}>6B6Be677xl+Lsa94f5UXz115Y`4DkY@3Pat z)oyA2{sXuhh3YZL8A>L6>H%EA;KlR9@_opsV97b@z^%{uaTB@q7jhVGRi?4@Rv|e5 z4*Kabw%CURT={k3EpVGNjyoeK>+5(5?U`R*KKa*g9vQ?DKk}r)hbX!(>D3Bcck_2+ zk;_>y@HBEMp|31GfonESNwaJ4AvgB*+B|qzP1??#X`fnv^H;vjaH9&J1U9zu$cn*X z<>J5K_l?kaJ_$JerJQrfjr(eK2JKB+HtF1E;QFk}5Xk-5lSk&Zf#_9|BmG%fteBL|Z%C#3575|7;_;uXMY z2u%|~ZcVvPEOMS!Q`{B-cfV=kON%+aNdN)8Mx7!&l#@w()ZW&fcr52sA-v# zFOiJOdFKUOK*iE?$i3_48i)4uJq>Rpedm#^ZuhR<^Yta&2W@qX0pUQ9{A2%h&edCev$tvr7!hOlO`rcvr zzT%FB_WB8@PSG4f4;j zd}03J>yq`r>A#wsikw^2k!xsAYYsPl=T{yvDf#6T_rjNq)Qf$$4Y+#;mPR8t+>TsF z&U0qP)o#G~h}b*|e(OsVIVpBAz|9)mHvqXJ-ExL&%)fKVr;$gBG&U)$ukt0$`^Gli z1+K@s4Xcpb(`Q#a+I!+IcA=?(N5=Kt5-v#JEyiNGy0FMora`3i-b$UWVE=0I^BkIV_! zefyT8A5rq^esVEzzjn+^L9XYRbcS0IGJLNYaB73M^gKAykCYz2sqP5eW#5H|k-Pib zCK2sL*$&;ASIZ;f+u|%-Ci)ROv&>6-fLlMc&K)_&e90u_wrcMPmD_8pwRiS%#MTSE? zry;zm5jdS8(aC5p&nePkJa7uRW@VY1{7CnOS7s;!_hi38CUReD^=~6r_-)dn%QZYA zDRxoww7Va%_V}5>0q*Jdu#?Ee+^=A`jb3wSYXJA&($t3==tpWaV`o_c_eR~v2RYNo z-6?2qZ_D#(G1U;)B9=W|x!aHY^hkK<1zfAV@G|6jY}C4g9LML;Sb5;A9Io}%iSi>K z7bwk%0&Xl%Z5(pR(+U~Rv744k06yR>G7>?uFeBcb|X0&q?iA0?2p@9mR{_J;54 zHLwqGuKnyzH(l~0*Ut@_oe$i@vj$}izzr=?yo;Q<#tN}rRXkF%Cc8R6$&VPQ$2_RT zpPQt22f4iX2Mj0rba0C>a9NfCUqVLv+keV*DE zKN1^MJANB*UP%iZ@jSRNx0T_3{n&P49dHB8EW?Cb{7BZ!q$?+Z+u+iijhyi5nETA{ zF|ID^?FSxl(H~gwPQ;&R?S4D_E^rRbQ%@q7;5Iu0xeGg=1(^d^p`j|1D&e^}MLtO@DHyc2ds?z#Yxr z&{PK;_a2|&M7>fcPX{jH(s>2#Y5wF%q0ZJtz>OJ~l8u~pg#SadCwHMx<#s8LC>5-* z>@&-sOw&L4eKT-nE8~tM_rXT>5pu4*t$R-ZPHyX(qcsctVV-N<=H0+0EuP|p+@UF1 z4A=X@s&ALy^GKy<3O{>=KiPYFXW0edE=gI>L~d?Rhb*-B-v4=t25|A-8)eSh_>*CW zB+VZI_hA2U8RUKyOJ^fjY;q+#ri4dkXT_Orcl0NYnV)mY@&8v8T2%|&wQGqCCx1pb zULLsq>TO|beEeaKTayTng88+Y&=lm>ZnJod_I6FnJ{flk*eut}6nU z@nHBKt4+OR*aNs>nP*$~#`%*oPOrbZ19x)Qaz@{= z&%XSNOOUY$Eas6P22b-1Z^3%mW6%--oQme;N4O43PDVUMdvB*U+PA*pk;5SdvBH`D zS*~-O2MOVmhORo&k4kaAtpu8?$E@Gu*zG zpL-i#^T`98xhBVGw3zg2znC;XKUyQ=}0zcW?@_d%<>ISd!GI6rkQ za2coFvQLW!5aE8Sd*}lv<2Wi7IqCh5d1z13Zqbvsd>)w@e)q^q=>Re?bXkv8z-7EO zGRC~*!P)EE8WQGQi!@d{0`vS**B~pi+`=r|p_j-FwMFEdTggqwd z=ew*KFW=3^;qP%_M*f z_;j+h7Pwcczr8UZ*AJZk677vj-6fM=$Ro$h5?yYs3?LGtv%dElQomY=4M0-~yRYoVhgmrZ%x#wt)08-LR zvvxLcOR^PK;W=tWi_Rs(-xa6tw?~qfQ`JCaV?a5s_6u2d) zPyc+97(hzr40!SiIM*wR{&?Q!4RS3)d&8r>EDz`N$Y`VP89Oop$bET@jIY4iTuxKK zx}%xed?Ks|0QceA)m_tb1IQPvsATD}HEFvh{k)Bw-kns2J3M0O#(jA_(iV1V z;g2@~;ERJDB!ROzSv(-23fAAauru?3v#glejNGX; zV#UZg3+-?U%H@%zk*oO*&0sH8_V7mFMEWd=z`E4Z36~h|tmaxbA>bB8L_Uk?#wDkd z+I9y4_xxU~Cf4D^#TLCqdpD+C_w;$rBP)Z3UaJ%1l08H8xu<|jYn|}~xfFgA!&!W? z_i28{BlX*y_s^H&lIy3+oYQ~{d#JKe1h~zYj=V#A3+qn!IRW=EU(WgB04^yX`F`CS z;A;Dw5D^7V36>CY(d+dBYM$~)y8X??V)9&)w_R^p3vgfR5~GoOv8bHk+S(RyHvnfF znWMcc{#A2HQwcV zPv8>CiHiq10Ox#ngqRp`(Z@W>(B9*VZT?Gu6Vv5heKn0svdXw3A;4A5op%zsMOzfg zku&->)9=}19_f2EW6y*cTyo=kuljSqS+5bFDh`~eemcV))@$`P0xrn%!lwOmxJ22d zxi|y3qHb&QkV_n}{sY=e;STeBkPZ2ZqL$H@`CQ_-SnqKOaPvnmwUq$QwnFkFau+jF zT?ufhFIK3}Gv$)z$oDsY0hd@(E+h$@!tJXJXD5;6csq+nT9&Ab#IE3yUV3FG<;KB$ ziDKVF$UWO_T7mYOO%3cP0{6-%;+^OkF3jCRy%{*0io&ryfeT#K!f+opkKSK`CXWb3nGAo)FWtDaVeEN<^|k@ajI3gUdA~{)gpJKx?AX{bRHQy z@wBnRS@?a^=S_?Pt~FxEDCA1X4Tk$PSZ(!M;NJakzhZEaOI&+aKTQB`%g7xLxK1Pc znb)Dc;TvyHcyo_OrgN(MY`V%N&i5*9@`2mksC*Uu!|+2Z!>!_{i!TL^|NggQcmkJ% zzMJ{07C7_T<#p(nKayhV(O!h3&YP!cJkl*IAul6e zJ(Wk?E@hdRJ>wF$qlYWE0jK-o&^Y8gU-B8wLEN}$1aQxW9lz@Tf=lL&80{MaT;Ol7 zEf{x4#rij)J+%zy%u{!uPBT_o>KuHX|pI+%r-hIGszw z?4K6Hx_7mYc>|npUEdnqKf>l`G2G;{{ns5x;SrIbZ`of+(kj z3Q9>wJb*j$p+z_R8<%{z8R+5&oa((K1>~eQ3H?Cs*sWjd>u&ML_$!YNCAV@(qotVe zUf@i&d7EP%k*;@^;XGmzwQYfGke~3iq+1{vyRLd)9B>X^{0PiTT>H-biT09<-~W1_ z1o^HsStu?RNNOLC8Ild$)>8$~FdtGc`@(QGjsaOKfV=Eic|o&RAlVi6?7~Oj_O@-3 zK#qSiq806Jv)mW{A`yNMg>j;0(t*S@;ps%t2{mbl_na`md~J8|lwZinoRzjT2F~l- zKr8=2f#m$eQR&LSom;rY5A#1_QOs}(-9^+gZ}Lb;WpdJ4`9QKNr(zxfu9Cb?#Jsa% z%+@xvce9V(XFcE^WxekER4I_8cNZ?S1g`tWvRcez&j@M!My@Ep;AUb1*p|M(Bw=!Q}$WEa^Z$w)))5oM$hib{lt zR7At5(4a(dsVfbVLUt;Zab#vh5<-!ztc(ze-_z&&KEMB859i+VI#*LUUN zn*-=iytyw9qg=bP8pnLOHLGmd=KtQuC7O{dP;M+LYV~V+0Nt_XAZ@9}{Q9VK>->8E z^DsO6e7UAo1y&)MO?1C*+L?B}0D6w!;t)lY3lUKDnqMCU7bX6$Tx{}d(FG{?RGYVo z!zh40?k~t=h;mPwM3U#%Wt(sBS}_0j6tZR7{W37m@z0Z3XA(d^({d@&3FStr;@ald zd4oqs|5tA31Y7)gdJ}z5q}18H76J7BZMy|8quljhMSSz+Vz=C(&Hue*W2+-4P|kK& zZ{>OG0Q&7)r(@z!Zi`8v;rx5-JxjF~&X+qAEhO8MhIM0Huz13u0Q#1=8L4gqw@-QOR!qFiM3r_2GA%XxlA_PL12i2%AnY)PEJ28@F* zqXg&6t+KB9U%AK=333%FO>}kbgcI95asPBnBs5S?d->s=eJEF}=*2bv_jY`G(z6Za z3X)U{UCyCCHcH0rLAmOO<>!B*+@)E;Mf2tU)e1j(`>cr`HGY6M{Coht>U`U3ca(c| zxGKFDJGZf|2rVIbg|E{1n-hT1?-wWE+=b4t= zMBiO|IBYODfPP8DFD@D79L1t&^M5bq3^B4GnO2cmWhi&c zhJDF=x!r~-|10<6^m5%tNlkS6R_Q^(r~o?0XRe}7lR2@~@6^Z?o-da@H2%MG3-+?`+)iww*ElO0>BR-mU$Sy_tU@`# zs$uc@a!!SJm(Kq^XP>z7Whl4Mn*WdW(*U~Z5ytQqlvDJtl$kFl6iHt;UoNTSdGocW zm~XI0C!9OL@4#=^$RtC`5S03HmhjKzf2|DxTj4q4v&X==ua9w)@ zx8dkgfuRjO;()IDmV zzp9i=RqYI*Pp)V^bO`0HzDwFUUyiRP{eR`GTwkXdqujy1%Do1C0d%`>c22%1XZ1pP z*L=CMIE$6@f6q%kDYP^W@BQ4r&)EzI(B;qQ9A~1OP|5Dy^W}WJrv6v1S#6OUfpUIa zHxoT40_Y3FE_l8`x%v?#}b$ zvDut~^q?BMK<-W0kC6WMzt6Y5;D*rr-#d0;?#Q0?N#ucbglbSalN61;z0mn>1hF9D z`KfW1DY}2%x)VnlM+r6DZ1$@O)h!3%XWX% z+B#?im9r%nt(#{GXWmw9zBrRf?h29`7=TMGb2__c!4#da=eb$%d9*-laGUrmI4XCG zw=8KF58SuXhP`fZK8F5>KNLg|oSeV10AxM1tFMK|H794@u~?v|Q$No3W- z%6-*vO@FmNr;`!HK~;?bmW8;VFKD+1>PHJUCT$*bf}?V|yl7L-H{s;^9_&@lVv>6v z*y@KDMi6}6nvzX$EPiVQF2UVf)%!&oj>_q3;{QIf8?Im4!u%%OWX6wIr`|;n?x|Dz z(mC+`%#v>l!7b2vnZFW_%I&fdec-(mPR#u0u3@*8BQZ&M7+Cai1^a z(`Z4)o`kre?=*tS@fr|ZH&?BkMBX1U-(mKgNiv;;BQ=U6h^B2X-`H?X;r|)`-P!?n zdEbk`QaCEt>-FO3z)-jd)?}?Lxa9Yxb1O?Ch@63pUiC#&^jf>}#b4`23yzw1AASHw z<$NXmZe-sDH^uf{g*Tf?e!chE1W`m+^>R91A*Ld zCF7H8yx>&Zchr3;#r=%`w)F>G?Y2iVTyRpvGvVEER1VlgV#8eJ+9Y!B%g~C?aF0I; zZ+csX_7JlC$Qy3l&*hn?Vn2=+G;O5+mWHEp!K}QPJ|S?7^iq}$FPP-!vnCJjl}8X( zt}NHXm*8`HEA?!E%Q*A9@?SfRpmM@mG}et7&AT%f25!TRRP?Z3cppIsR;H#LU5fju z#k;?{cC=u?zas849F-e(Y4EPgA~?46l?{_{#k)HkY%3y&Dr3QF`Z7G9Tuzk^a81#L zr&Hmm95Kt7uV3FQC6RSjVR=?BnPe8*)?%VEg5bHS-M^A&imq})ddqapXhAl6v;Gx0 zDp$;iK4EeVj{SG{qt|f7GBaz|R7DWKMIzB>~1Grd! z@vFkGnB?!xqW;i%lPRF}lHoN&pro1A^&wiY~S z>4aO*v1a4F73e1>`~34hj26s@{>B+6pa1?ob2#xgSI&2~(FiJ+EZyxnTM%6PheeWGbC{%vU|HzXng}A-ozKpQZ;I~z zYr~$t>QU@N>F&sdqjJiQwf%9~0kmkeZd~Cw^G?r&i&5W_nS&a8$0@-I=k#<`Qq1OeIX$$YGsQny4T;6);v7#_O=QX~63*lxe z`ENdgqjJ%tf9+ujgbOd*lc)QZNqW+s@MkrkUn(?BU=zW8IbvaTzhbl?CG@L-4;+<~ zrpCK-uMS-AU=a@YQ;W&HRjn?zcOzT6iKx4Smr)f61(2~i(z@hSSPpx65);mS33 z_yxmJIczJ%QkC-HI3A_&{e)v%cy6+}75$6iwCfKzmKP(*ugh>hmrcsq!BM$vb~6E< zesIg918NNOnPkbcYK`2l7^meUtlvnW-tF&9nZOB#zW<~NN9DAA`KXk$1uh^!GdLOU zuFmCC_rFCD8^^l0hp)l&X_mC3yAZON%WuV<<9-Gnmr5$Z zyl3%Yx7%=3&Rb;3rWYIGIG2}Ot|gh|@hJ(*H60N|?6&Le18^+PYRBkszb`f~IRQuI zzRkGs|C*FeB5hP!*u&s16uiF1{sZ#@x1hoznfdY7DdThTXu&y;)2Z9xs2sS+1!Xd? z-~@E4(}&=gr!#Xq;r=AhWADnM-}PSj`xspBkM%pn;HX?Un<&$RXW(Rt?pvD_GRe0h zoI@p@c+PHS`gzFVIkV;4zy>!U#MAS;g+@?0aeGD6Z)(8BZ`jS60oOfJAojE?f?#I0 z?KO}`d#DRL!z>yt;J&*opbC!4jk^@xMgEpbBG1Hpd&2XMNv_)1xHGsrf*4LIS6;1v zb{lx+g)&_G6BVJya8!=m5AM-l&*3shjEy|tEQgHGx%5O3juOWfOu&hYRE-wD!~E=$ zXSy#Ol`D7p%x6(gxb2%_`ai-k>m}ojdNJQ+zHh8j#C+*cnDPNQ_ZN-2=5SQb+@^*w zeN{N!(emr6MNG1-&$>$SC*~oU9f|QuxZdBqqa%f*1%$s%g903tJGWj*+2!8`yvRH{V&h@ti^LZwLdNhE~RIIGaDS0LuYd?=ynF2QBL8zF}RD)okBx! z;sJVkX3A(s4o8~A;BNh@9{n{xs);i#Oty<;t{%5arM8l%~83XXkt83Pf7R90BSEF8~{A{`^R$aN)4 zuE9~cb>eHvX9m}x|9qZ*mA`~ZUg?_&2p^0fjJtN;`>cZdvUa6cdjYPeGIrYzj>@qU z*S{{D3RfE`Ep!I%i{0_KQ$ra4<_c|7)}tPb8Xup5Q>(m@i!)6ThU2_Fzk^=Z0GllpVhej>@?sJsBp7aOTessiM-Q(yXX#Fzr)Np{|K&EaQU8! zI{NEN$!j;kSzVk-%!i|L@U*$6oEle|r;$ux~(T-i6X^c&ppT8@AtaK^7HpB#sya`OE4 zy?H1LcO~)T{?~A=w>!7I9z(xWSzDaF0iSb|b>iP#e7}cXYqrBtxp`BXHfi1BXbc$xDp&7Gi(H8#+}DBrZ_RKoy@fmvPDBt&{g0Y9 zZo>SUuZu7L?P!6h!dyrt9F?{cX(Mg8uBoE>C~BTT2W(&ETk9zKqnyCObHt z+VIkY6-+X0^lL)dmE@2;x>k_hA7#p0i~d zEloM21)ba0N2SA2xqgm6Cf^@~b2eOk;~U&(g}{8rf0!4fWy}u3-TJFDasqAvCpmK! zj>`FSvid@bzzIpN`=edOBr8~MliO!8KE$g<7Zd2`W%6h=xZ+}W`$KS4?%$K5h!@Rb zN#yDiV)hT=UY2qc%FJQi;dyd>j1Kz2=qG|Pudog{uUo1CN96!YN=qe1!+9tFd_M@)rm~l)hjk{woeeaC$_Z?&sJtowXEZ6wAmJqcgyg(uWe|~UX9ia3q25!b z^ljkEM}xZG!cn<_+{-#nHHapWxg3{&i+?~pZ1v1aW@8Y1!I8e>aKn%8S&Y5Fy11}o z8v~BY5xi{p@n963AJ=>H0JzhhFOx&q8N^1ym9uI)+U?6U+iP&{-)!%@!cn<`nm)Jn zEa2k&1~R_G(Z1}9b6db51fNeuJlcVNK2h0aHC$)S?6?jbl{2Uqr>4LQCwzEl@wOWD z^J#l;@1ijXs{kDlZ~giEBIfZT8}-+O2r4)#ckobt;*vU%B(iJ62ggTn6VJ1*DKBIY z^-P^O69c%7K4*8rE%^5+Zum2epmGRnKaLIEf)kt#dCOLdd8^AY-(?&OLaS#=O2!cP zvv0fK_vhG0ArgO=!BM${S6c)=n7~E9l;v@Ni(Kk|Y#5GM;__q$&a}_};#s)t?wain z;i#NK-!aKm0gQD@+&+``O{U014w zG4J_1l_mL+N%r&>?#SX|5aL3o9wqI>b5^Jm5TAwlnevs6U2s&6;gbB&LpR_AIi*-H z!!?VIt!FI4^=>Q@^EbwQF)hEi2~JCZS6Ld4$~7#DU8b=U?#~s?U7c{1fxaSMiy4Ia z*Zom@ccK2$^ZaTu;na%G&eYS0r&0fxb6D){!nFu)-MIW6y*ljM+_7V~_i%w>OiQ^?5}9K;_3bg-iFRucb)bOj>z=E408G}g4)gZ}Kv9Yb?Cp0&>xal%nKikpkn8v@~CT4^#@;aVc9lhf-lkA$lz;Te5K`1TsaA}7#9cmNihl`|7zX^q- zau*{UeO4C;U|+Z*zV-=RtfP)_R1Tw7tIoIc zaDy^*8bN;BgW4lG6YvCgziPXZ|oi;;0A6e$ZEm;|6E3+j=NfLm0mA3o#D2x zoD7|XyVp(&a@dD@|IYKRA!W3{><^yl_-b5?~aPaKKcvW?hhSevI#3NVQ5(wR*>)_7i; zvQpXLvQ+zR>ht5ZqPqL|U96gSa8Xb*meW=dvP$`3&m^SGk`| zI4ak%Ah!CfCR~vaeV_*}Q}Yvmjr~Wu4f-=7C!ygaj7O8kq2nKE1eFWfcwn=tD%?-=`xlPF{YksWN)tnScswVv z@(}7zjeGJ6T<@Kf%qlo4C(`niN6RoD?#unJ_sikjSX0Wo;5wr$90%ZHbtFECz`0*k zu8)VKawA1AUJOi!n`!#{My?s{NOxse=_=I2C)?zAw&>?a6H+r1vHv+z_uB`K%8^tF zbdo&*7jR|bb1+P#gFB>_Vc10WqH#KTbSfidEfe@ z5)8uNe(8zr_Go__>(o5qw6bpQWPzh{Ck4%vxRT-ORhI}S!C4CgO}TyUJ{@*Nv%X#|x+X}#7n;V9hG$9_s&t>`BX`kN|9V%(h3?H++M-SNKp!4u4P zTbKEz!BM%C19OpdS-3YG@3mauG-f%u7fYcZ)QnhF?l|9W2cN0WJITx8SKz3e%J=1= zja@5}NXgbwqxW!*HG?Jna81|mSUfm_e#y<>w;}=irgg#z2jQsP%HKhUjz5O$jGNjk z{}uZox0EhaNizuU=sm$+PH0EBE*aXv2`bjVRD+{(ERS#HWOaZWvTC)v2DgQ^L_Jjo z&kNhT*GA6xetRbQCmv(}^HfIZA~-77a>LK-5fX6v0r!vogzJ;Y`57vU{>-GeSNtgE zyPnPMA#fIJ)9b(2&lYuMveJlbs~U;j-wDhJas zOJcJPoY5n0Pp&p5S+gd6cAWx)@LzE6XuK=hk)hPaU2q3q`i?olQMs5dnhT0V;C|nv zpK^iAX5&ibQDhMAPj82LAH(PLE1&6jgn39jZF(ylm6J(kk%rAYc+WLtdh$J-=Zbvm z5jd?n{VWqV^h?^U1?S*W1hZ!O;HccpBT^P0m~b)$+OG2LOmb#<^@2Jjj4Lu}pQMlD zdD&_guoO<+Du8w11C5|^G!Nb=G~EZ6=Fj194bCh;JuPc3gSf0$KKd6D@rqXqh$_O~M;}Jv> zoUC$Ctc423BWtT|7u?YgveutH0w-E0JgpB$mx!frjQT;QhP_;&KEGKk{-pT`tV!9C3Q zc?+(-aby2@HI1NhIy+T(RX;3EBF|ZVUGyGK=>5#43Al|8+s?CiqCd0JkClOA;hkx( zf}?Uf#Vp+tZonyKr2m%t!6fH)G)gq8F$m@LhkLd=oByX*DK37_rRru_Lus=QMsOB{!g!P!3DqWE$oHk zi-@#hYT)}7U5O7ojqi6o{Y}q(%zL5)UYWsBIiICLA){qWu#W3BO)%(Wk`@oWN6u|v z5aim7XI5uW4+)&d&ch8boD$^VsN7G}D?4ni!tn%0UQL8Ez4t2ES`+iZp0G^ivuF<< zbwa#wR-sMdb5%5g$^jMdZZ6S-TNRyngtLoDa&TF$+PslL*vU)2Sa1&a#hkk=@gC-_ z+mHJ-z)`uNdmQwY*x^!Q9&bAe7kp$}mhdLblV^{7mUBuQF2`T`NGcqa6WXSG z<5nSe5_#?Bd9iZ1I*;pmf8ma9bbOKFjedTAy=Z+5Tp)|_Ww@mOazo36Q%5ht-TAFL zA=}L)dj}Ohw`@lH^XARE>VtWY(cuyoxY(PsDhJ@G9MJ{6kN0T9vG06W6$F9XskYBl)U=YE729969i05;1>`p%u?@1);ogLw*oYJ%b;z%~!vwIt!mcrSD zsKv~|Ioe#^Z|9HxrR|PJ0Nlo(W%Mm@RBq}1GjcCa!HIEKosjv-B#+UeR<-M3{kP+j z-i845yPYW?SHh)y{l>onj><8$o9JDz9%z+)1n8mO3kJqtU4r|}xYu|a*OQ*SaT|`xJq_2QcOHXl zdzo`K0d92BH4*#m4B~hB!p6|cc&@9Ds~(5DH+c8JaX2ammHoDZf&$$8gVE}=ekPgV z8Fzcz4(w|TetO|>1^t=u>rys2V*Ie29vqd6THkf}L@y_PCopFD%MoscF%OTVKKl9U zJrSF(;(D%UteH{h2mOu5gyE>1)H%gX8BgHc{f3?v!)>%^3}QE65S$}d+?EAl9dQ0} z-&(lN<@<9--qQ#wH}%TV-d~PzTh1IlBsIV!mvc}2`vI5x=a^m>TsxbdPf;Z11w+>_ zmBUdvs>fqI)=I+dKAgGYGF+Ue>#1Tx2J!eRyYSm!e7{6XPHQ;918oKm;iz2IjN(s6 zzjI(-m)BbS1Fo+^v+J=D>OtIO@YXeazqL(~Lk#SjHt*#=14reo?&;)t^bl_I;!ZE! zK_)r0{NUazJ27uPx+~x5I_48PRjV(<{mvMvHin~eSIwuTzSzL6tted+5BGqxvE+y` z`fKCa8(JZ_-r)KqAvm%lJya5o%3;k~$h%Y&?y%354{Sr&Ct8=JwqqBA@OpFDdc_Sq zFI%|Qr$>wyC_i;57%?p#r7cso&?BSM|G(MEs%^(gwJS*7?=dQ8m zl^)!JqqjLe!cjS`XW9Hbm~bbQudRLu*KvK{A`TO@qdt0nUMRj_C%0B}IOc;z`Grs6 zsNB}^k@1In;e4~c6ifU(;&uZg(1zQeite5EIv zVcnrnqE5eseo(WQyn74l+hp!8MK~(wHRtNZRpD@I-M^j^!%T8E|5beO9`u8jd&l^~ z(O-+W(pBbN<-0pBgiM%E1@3OkYZ3fl>lQEgYVWR~G4sRY`g`;v}`8X75mVR6wNma+(te8 ztl`fL9WAKJABkNAN9D@)ZSk8fVoxG}WUMOw3fE~Vrt-{ce%)W#I{Z7u1C@@zQMt5gLfr_d>Alr;`<1;HaG1OXtM*`M{NP9P)e%r!%vzmfHsX?)9C@ zLNU0X7j?4N!?mkPIIn=Ca%(qzP;=M_rzUPcAw13`y$76E4Z=0$eg7~7XZkN}RoQja z!>0t+pCvSc%CWT;mO4JcnnYG45odkiY^ugws}EuQP%L}A_#VFBWs{(TaIFrz?-syO zxwfqb`@OQ^UQ11ne}QX{X?T%pi}{k2IM?0#xSw?aLnGJly9;OG^|#@uoZI(Np+2YJ ze(>BpwP}J$axK7^PCh_?c3Z|G2##BFQK=gom3u2v!g)aj&T8o2028js z@ZOFS$c8U}C%Jk1L-g}4TXRI=Zrv5L)`g>Ta2xv$T^wS;epa5rkw0+8au;vxw#Pc| zt8$HSES~G6GU2RXT(8cePY906#ht|uOH=0EzvC_YCYj{HGcRhD9q|1;ejXl%v&$^@ z)rb4NB*S~S7{7b^@qanF9zwT$UEw6s>`h+5v3VKrE_1{>XZOC*k~q}+BDI#*Ahf@5 zWsWj9DmT}8jrSQjxLDJzg)9FsNvp#O7Qf(#05AWTN2tFHzD=j#TE#y`+=rubbSot^ zPj=5Gl7}2eRnEZeykN_yIf8y^g5dUuNByO^L~+207Tyu{f}?VEZwq`l@)*w1CGf## zxb}*^+H@!EFR2$q?RbpOnX58snAXDqxY$DmWdQbBh+`iqx7foGI?-B>4%AVkPN!~Dd5UxB+ zVEqR;DwlU6EKA`Y+`!MBbn|H@X)omXQpFYf45oJ<-+MY=@9%exUPeD38=m_q6 zv3IGzpbRD9v6++Ky{1dAYC(Z?FL z6@Qte(FM`fBXFj7;Wg;G;aFQ z4f~3}&kBeoqrJ1L5m}co-#ykKD+fpA`tl#&P|bjQa3L?R7VfTubU@~D>}Op&8#W5( zt{onx4`)@^7CZZnMo>Aw8Qi`ZW^m23e+5)#m}JJ?r|ID*a6czy*vp@x|GZ(}(i(_$ zs_GKK&u~=k@5@KG!X|*?pgFNg{v=)!X*lPlO2N- zU%E-J%pdEVlia2>I4Vcjf%SJo@n77}3TsX`xD!px_&QIl-y4&{$}>=Z>iIzj;k-7k z$ZaXa@1Fk473Mgk{45aer^7AtN;u{rr_wAhjJH}cWA`)h{kUGfAGwI@ecmFI1xMu! zi)HGaC*WjB>7Y5H!?@eqjHF2HqQ#@!kyl0BKH$6WNERK z`C04}HNRZ3DjVy@ZnLYI7x0{!hg)mFQMtsN9`W7YaOc#ATn$*F$=SNEgxWdO`?I0r zV{o~olD)ByBLnjDek$yCPNeMExYrxr*P~X#s_%4G2WInl$O81eUUPoX*rMn zY*=2bgQO8uZn1Eo_u28OL{dsG?dL+)X!5cGpVt_ivDitm2QTrQiTqRdfOA}}ptBq?F1LURW{_457sNMpL=+|Lc5(5b6W^!%xeB6435e*=I_s)bBFuN zY_~0evt+p$``j1%M6QWN202)-)MUoR_@TdUysv%)j>UG*BznZ@hRDsY`W++kbbsNCcBA=iroe-g6OWR^N zDu?;G?7L5Q;5P0wHf@FLSZyL^aRuv@{n8ny3gNhWgBQT%wyt|}7mmthK3%fnyd~T} zt*h=^7DkgCHjGv3S1})arPr>Je>(qH)JDx}y{til>g6l}&6a5Y67kP8% zD4eN@@nF#zJlDd}C&l2X9Os)yB;CT`@;8|jTX95_cRY3r)(7J~iFJ-oSuy&vFV7ZR z!*On=rH|#|cTfN2I%|CW#%&CDYWP>nE4U9SEi1CGVc%x?t*7@&(CI*(FZ&%RXm5?qRnkz6bsmHRxB z-mPEuJCO{@%v*2e9I#)EAt4<$K z3&lM7OSbL^T&&@~8{6PISLoHQfunMw6CNMrVSzjR_``YzoX=OsZ@gishuU9`rSH)% zt#yxU^u)UH_w@x+xio^xjpqBY;c?zrBIyw5r!@)}r}6#67##QRFPCB}&@cU%$##SD zlbqO414rdZiwX{F_`)T9T(aG4Q8c-4>(jhXH!-f*9mns{(f*Fim9oOQIbU^7fTMDy zALw2#*$5{Sac*Y@+%0u7`S~rZQybFXY_CE;QFXfU_Nn=Pcgt;GI4WoQ;gPXD6QhY_ zt8T8zvc=Kljsps}8Q~bG_dKiHP)QewZ91JITz#)N99d5iY!? zt0C(Sp3k0Tn}*=*Y$7D-aKWA&@0H-Foa-~I=^h=!iR87s!%`eeqe+1a4cQS)jJHdU zXcv7#|7j&DQ-1>E=8A-%|3f%c*B$&$aLafE!cRrxdQna~%zCUl=<>2I zaJ3%t>|fr{2r37=Kh43x29A%DeL)GF@AAZBd+y@L2Q;k78B90T=8c^@|Bc&K{oa8r+D{xd!wyWT{anr9v zGDv`{B@iyv{2RcuW1C8vmNB^u<*kWo|gq$CuiXT^B*{eKSY04pv!-(8P8dbIJ+O5*B9By=WtZ+ zw!pOg$q+d0x81vKmPeC3#&#P#VzEB@nt;U#_6yu=CVA#vxkubJI4Xx*(SzP#0QbJb zMJX4K@0tg@SsdmQxzES=TJbr}$NCanG2e}8$N%r({mOs2+$G;8HZOz=_buiSSrJWM z)cE*8T;Y<}mTQ|=;rq@diI4Y;RbKAB1MT3cC#Fano-f#!Z0+>AUn4hiv zSf2kC&r3#3RgDYY!|JTfUkpd(b_d`8^UohHhlQ5Y1eYQjXg3VU+4Vi0@eSkAoz-t0 z;Z&Lz6@Sm65mb)%-68rxZMfyf+iqy`Mw2G{8f0o8V;_wFLFCakJTEgHKdva_U2y&vuazu=qjJG5Cm6gV{fQ)3DlKX`e>6$I%sHr>g#OdP97iuqZUP?QX26vDAd(a)uJ4P*OX)^ZNhgXnCI&nSCDE_l>;$zaU z-@;M3;UQvsvX8+zmsGB)fm^*M)nN!O*!z6s<}O^%w`6iL9PwB&BOH#(5g%XU%PJ4& z@b*;q+Lh6yY?GJhhi9mV*l?$1-MBBJZcVXAFs`KRO>l;za>aXAT{Q0Q!+h}3=+hf; z%zq)DQd96d&Yxx*I^l*JgI;OCiQjm_+zLnKjN31_i;9Pvm^O6ohx6Do8XTI6esCg} z{dEtncStCz!V&HEn#grtI4XDi*tAHi9b81QkCc%>G?~%xMC*7O>hD$EhtOV(N3X>_ zY~gs4UU>g}Nh5;(%OU^!C0l$I+@86>wnR9~>&ZjL>DVt2WZbd;iT--z{?6YH*#8{z zaxQ?Qa>)fV$=_}xYRjE!a=+EGrp)HOK&2iE3Ma8yot zf#11!Cfr2>VG}2~{EIQWxHIuN6<4g`?ni%CG5uEz&Tosu)?;u~Zutm3;kzZ==Y}Nq z61W=y*Qfj8)YBgs*#|565TLy;uN_$~9+64&PVXi}_2LnNuK~KChX{v*&nT>`d&g58`uX zPM>Q%jQ!7Bw!;H2XatpW-fX((W+)tQk_+E=xJ~g2lh?D+Uvn=Nu^qza?B8PK0cW~& zw(cDqm3vMM4HX-~sm@rDbm3?+_>tLt*B1;zwB^hvwO{CWcZ>-wguC^j@HrEX%0X8T zbpFEu7eKCdeE_GqyiCXFCElmLxps|n81u+#@!q?3*thwd9B~4U%0+*}ohx6`lSnR_ zC|LdvPIuk4PWe~pCw6V$`gPu^lw_}i(>wb5q#hiVlU@}%XcY+eQdINR0TGNxT6eE- z%v=?NV&ef9_pdJt7 zk?ts`pNIGFCam456R3y7Dr#o(x1_5tn#&S`LWZm_YA!bKY}@?`Sy{>Wre zP~aq|zSRmwB zgnhmra-tVz;QsE^+XJ_8qM>L!3;$RCUk?1z{6E~yKN3k_8IkWnaNbfTk93RiK4#7k>bA!I1Y_luN;oPPJ~eZN=pDG>AyubtxW(tXW z{kq)Cx+a<=cb|D#ScZLlmK9BpS*Gcx!>!~dxD1uhvuog}T=_`}QQZ)@-F{P!c5ruX z3C*~2^z$w3rP_NxY#dAUDa?@?tE-ql_3p|!}aJsG0A9hdrgj-T?NLm6N9#E*r(~l z9j{zw|G{d5Ws(G{edG*~zc2!hI3+w60t*P0w&&EFb}AeD2rGZa6BZo^iKI zR}1c#ZEMy>DXfdVpT^C?c}-;1J*44&zTJ`c!V>jh`1F|+9F<%DXWiwkQ|;If;Wb@z z2X37VA^5Et?a1Jsq1QruzwkeYjo^C2E?Z4!;Qz}1%dzLn714MJ_aZ0Z<~W>kpjc?$ z2kbAcQp`8tn5O#=uc5VBVEkJi%w7ve<=U5Mhbnl&Z852vHkXbjPgU!)+^@mD@OB3k zG0tgv>`>7YPdKGznJEcyRL=eKoUdXka1DDK9J1gz4DvnvYB4Xc(~TX08{X2ogA;B+ z&78R}9F==NCA)apU>o|0n#>9wnP{>n^WygdAF)q#sB%du*EHR(<5<@{bL_iWcukqY zQ91bM!gyzs=G|-ibtmCCc7~d4sbdg&N`KGYT?E&EDsVlV-{YnCW#Fh>{HXrvJ}0<* zzW(rPI4?%$Tj5XGKRfa9`-#P?x9;aI;Ljw;GV zlS(_U$xOr5J~cJa<;L~KdS2~^Gya|Z?IRqOoB!~dZGQW=MAG|#zv*>21y%2xU+U4% z`<_h^STap-KV)h8%MAVC8`AG79F?OVUeWsaKHTc+8!5eTj+|K&IiKM|^_C9IyXnn6 zm*AN9M+MKrQMvjeY#Xobhx_5BRdGKi09SEd;ZOox9@`@FY$Mw3?Z%48Wq8h#j`5_L&d=w|cFMs~x%-@!mv`2G z#XkGRH_zGSqsdAqnKk>Gur6MGPuhhC?cwyRM>=qc<*pt7((r%f|K;$zx}TO0hg<6@ z!C?<4IvpCg;S2VAesWycx*Y9&)JLts1n>W5)Xsi_qjLFA1a7D8h6~?kYem9kNfG_@Gn~5%<5BYg-MLg6LFN1xn`~E^ZAm2A zPfCBd19xnGGm-io%X@jKBE)@}N(07so0 z@J#iabQ+unZ|#zkaEj-*ZK&zM?}*cezLq@xDk$X=<#6|IJf`K5eWaP+~*2s zZlQ~us*LblCv9l|oPysy{dcZ_@I{*xS-4wQLoX;Q zN0Wp8d#ge_@j17Dl%|PJV|?deI}F#VJ9O|F9CgmXc7daAonI2kxun$R*Wez>*YX|j z!hP9rz~&3wt>gR8j~n9mQfyU?{&3W}1N=|+D8#{C)PCIE19!KOalp8nL9|_P2vQX6wt?HC=OM6T9meJC=4g|mUqWvIMKQBAB%diE>3J6w_J^Ov|gq=%K-cAK}K6y;iz*8 z4hd`TYiz=Ph~$k^Y${lfb>5clgOi(@l~fSN_q((IfIi#;_QH&YXZXMJ|IRJQy%fV8 z35N~xdvYmTJ*7h_R3~W3LJHgLD`R{0#mpvrL)EPZ~=MG z;}iR^4>qUfT_=I(#cZvPJDl8rctijkb*_Qu=27=0aMJ-(eWL55$(O?_?Lqw*Z(Huc*viFz>_{vFwAR&N(O#>R(;am`Gkot61s_C(oD^b{@d{>0_)VK9U&!tiFp! z@4)XW?+Upo!BOWPkd*~hSK+oAyQ_SGE0p4}*fEHG;fHoTyQOeF75A{UaOE~84Xkj~ zISBR(Po33;TXkT-L{k;}w9G$r>?Zy~{lrzt55e1B6hi=$w!5vMXy4IM4|11CR z+=UG>ce;fWyt*k{n@ zFFm#v->*6QTPWPQe}Mx^aMZaC@7C-h4#C}$Hx=2o0qs_h#W!~n^><&jimr@$I5D_s z4IJrvgPI>e+Mv}^p7NM@KzOU=U7ovz6DnZkNSdH=^AxD2m~ej_*)?b(hLIO?2-U?-J9 z2AuZ_Q|W`6(WFSF=r`+W?1x-AQu|f~{gU~KZEbYS&kVfQ2f|V3KFIKQo;8KD+-4^A z1}v9&fx@mcSiwkd+YJh;s)%cKvNC% zUb=qkJ#E|<_Wb2+aMU>w%YLp~d=>7)A2YssxW-p%Mh*Y4{^Oj@UaXG(`qrCJ6*$p- zAFLXm;{VG3J2%4qly&GfxNXOuE>hiu=PYN??!_#|2W@&{8=PHgZfo&YJfHfs2PtsW zITFsJ_DkkICX!`)KF;2RTP{CzI&u#6U?~~>Tm$#BW}|{NoVcjN_W(HRTnS+pqmZ|7 z$K~sW2jN_UHLrQHL=v^tDM3LS@HsQqo*C4_I@P>q%|1BloC&{%WgO?=)JLAQ@7x?s zcJ3{|yN5NB;52UbJfMksV7*5Mz*(q8*ek(N=T6+(ob9g;$ERTSAqno1MQrkVwn*Y= z{xh3(8!(jtjJhxZO%*n;{~{vqZJ7i+%u%3e6?9E-j2{bWZ? zBI(~FzULyGZ{>pa8w(=|QC;iGJzAL0-%+&vy9xVzCFE;GIO<#rMosbBhj7yR?^VCT zH8})#9pi{3hR0c+%4|hFEE#-o6R!S^&j1S?bx z7_2t-pN6}&P425CT(8dou?D;vqRzdL&lO3Srf%N%K^yml z{#7VvBlc0a9E_jAQRiS>5WVVL{~?jAxj~jqz&+H@>*rh)Nyvp&DL$g(`CP_rX$-gV zSh%-89Ca>+yJTbKEx1oAnGY?rqe+{4hx>ZqEYewLPZM}P-(-iiYht{O?|y6vN1cA37aVVC;OQ(l19APH(#4TP{oI#oLmhlSqsCG%xXZ8XKPbRa=Vmq* znQ!%^pK7`?p^rwu2!kpGoD5lxO=eeizUvPdGui8;>H!#whr zG_ynl^`O{v_#zy2?gsNZ=hSpnA~|WgBrphW|C!D_37$wIIP&3Zx9#|xVaeszaDF8# z11;dFb2#psy6=7k*MFnMs0*&e!XtxaIlkW&LtkPC<`c$AlY{E$Kh6DO<>9DvIrcBf ziSvZ}_1bs2t`6?Ynr(4yaO!Q5oB8xHuC%U^4urE3<;t6l$M2s0JE!9V`E_(19KY4* z=UBLvZToNKuZScBB`#0)z!6jYW-Hu8If5s zLPN45rHoP;k=ZgTS}G(XBP$^yrIfOwjO-P8uJe0+KhOW~t6T1M&be>b#df>oQ!8?0 zw`0M*d)H8XR=H)rYSKUCKIs>pxyc@{5j48)d9f~TZ{LN$2QoNs+>$t&g&f)O=w_*j z%0lj`tF4vo?&R{UyS7JyIN~)j$93JK_3%EO>XE629Pe<_ieTi(uE)8Ih|h5 zUxeJ%933;8b@3W|?{DIF(#P#xX{>LN#_Miy1+N)$Wapz@N@UAs0(;HAAiSNxk{^%Zr z9N7&CIA(qHU0qhWww|}`5ORkjPCtm}j@O8{_K~tS#&L3{V3GlHYz@ConIcDaM5L-^ zvLli6*(b}Qubo_8{6+twHxFJXatl9hH^KcE_9O564&=-P&j=w$c17;39qQIW?(N?C zg8Rq`ZajE+A1~flB+~+DOsV6E_08VMWmbe;_?t$rL3TzyTVCL%Lry_K?hw6Ba(U|N zS87rl@woO8<^DkBI%|HdKrYLE^~Gl7$nMCa*jeMUH~74f!=2d)Ikud`8`${bHMSR8 zzP!H=?_=&`%Wg>E_Qyha(k@>%mdBvx^y6s zQxds_vG~iUkt4e#6@%yUIzc6=)UW4qI_=;OAdm{Im zZjFq*ZgROoYm9>XmUxW?)+Dj_jWF@i6AxLC(`r`k%2LzPA>`d5d8y-p6zgnrm6( zaYldbiVAX%mc6z!M2_sBT&COq-WIt=xxQ>TiIfNW8}6;jaVEc6eP1`0$J$xjRGY^uEZET^0VNFiQhagv7Zlk0w z8jr8Zv^y)>;NhzFnQjWi`=;h-?mN2k=>O&mVIF%$n6@Ra8cQd@6%2UFY?Ul2XcG^cQSHO-s`+Nw&V7qqu%8@BFDcs?*wux%>y^< zkR!V+!57W%%~fWV=cFC+m_g2aOQ>j(IGzvuEW0BPBFDPv*>dD0RqW2*LXPaTl(F09 z<|DV*eek!rVRHGQa|+!_5;#7y70Eqt2>1JI&qql@I9}?Xwf9Dj?6%Zg-(Bj3obz>Y z*XPI?8A>Mk?ZEGIpntQ36CP(nJMV2r&W*D~MHe};;}W-;sa71h9)*T3R-@!{Stj?r zmXf&t+_j^Y9me~ZO5m;Xt+?K^;Xda^yYJ)$IDgU z$N@o|2mBp>TZ0_geL1)5`iFzaHS5J`Z8OGojf5BW*a%6EoB%Zst#SQnL4coy?0h}KlkJ8mfj_kx-+PtjkI&x7T z@S%eVz8_g{buemYyaxZl+drp}Yi?39Q9$l%xeFIJa%4BA+PdeBDRK{4RhDid$7bTe zbW{$yF@Y&Df>dum$JEMJ@v)H}H4m|Lw@UyLhjB6>_b`K5l=JdskVSV<3<7 zmCmBn8}4`>y`U3yL@qBqD!&prvMY1*iQbF4a(utQ`a+YHDPGU+S(=L~;OBhta{Ral z-pAt8I3_paeRKBPxg_Ms&dkpG`s^^|Z2FyKUm&M2D>=ich}Q`&%RQQ&xZll-7bB3% zTV|nu6gjdxlhi4mx(m5-7tTcXefWN|zfn>@axv4_lGh)_<8#TRj|aKt%850*ks~`a zRRc#O7t3%S_v!Y`3FHFYp2*iI#cOyfAOH0WxzSsP>T~$T(|Y8{E=|d=Xum?_ zS{3Fj-XX_SYuuKpjQ5qRzvNyW!*N#MXpSawTGd&pgQ@u5(|IS zRO2D(I)VS6&bd<_$URM5*mxZ|vSZ_%FD*S>isN#+d8ePqc?DHxXsE?&G`Or^ zBkzUhd*ylaB|aQ~`X2gv1Ua&6b2+wkeKv9}*>?&x&6CTU6TFl*smE&^zPH+f`6TX# zG8&mUBPKX!#bwz0tHBxQ7yMZ0jm!ic{YKZVEVj8nA{a)PQ6l_khs{BIXW;2uYO z5^@ZW{N`UG_iSCkh2-5he-9Th-0wp@K3i{g^Wr$mF3&#}IkJ+IdXdMdbLe3h6T=r_dbsO$j-&qca+x%hOPjRsNn$_CqsriO-z3?bMFf_}U~l((H#^ zCNtkH9vtr;6}`%e9NEnNMR9j42L{bMfT$PP&Xy*9*p-R#i!va z$o2aCsm()a*k`ImfIsoc7OB-%1gf$ z;ymCBr$GyHQp}-QRYrK7-*YUi2RTXOnGZATaX!r)bz2%avIEq!jxI16x#PWu{C3#j zb?L_{z6@hrmogK+@gfATgZ8-zmyxRyU{_p$9N7ihrzEt~0=c{2&!k;Ju0rrrY={Y- ze-%MbFP+Ezury@32|0~><;@+5_}u}t|n&9#jIkFq{*mYG#!%KYsMMUC{j%{-J?;?p)YWwgy@q@NyM<{Nu zt*u3e%H4~b4@Hjb2&JBQZ+Q{9`+ntXGm+cdP}t3DhU1V<$?vpbczrn*9`%I-*G-=n zUa>}w>4pUn@ss#ML(oc8#f z%jLx71j~4hr)=yCMi=pWQ5HESg4}X}p4ShNBfCWJ*c%I_kqfvzmf?e3V7Kbnsr`6= z&@@}zdmu;aRs@#ClZ`&2k?4!qk25$GG0HW?(FnOZowe7WAQq^ z_w?VcQJSEb-e%-(bAA~8g`AwwqVEWDRSlJtNLh+9N9(MmXYv+6}iXh-Q4!bRej3+;cAb^3-8fq zh0%C?cFkQmfSlI5X%j)@$WGFrSjOJ^JRB$A9^X`qobFt?oQ?y|i|wUuUWvi)Q!!L# zWHp}eYfS5AM|O_h+&M3C0PddfurfcKkqKw+0NjdDCeIl-vTHPRQYGR9+}ogs^4xF-H6s`Y z;kLY5;XMsUc8usRPkj%EOCEQV;eb1HZ^~{MuK)M)(^GI{x2SjEvBFKb)t9#JSPgeK zz$y0+oW-hTA(L>q+F8Hkuuo<6#yK_@j#aWtlo5`-vYBxl?)~P4hzU5dOY|p>_jeuK zSJoRsv~ZH%s`is`-z27^#^J~g5pP$^?jLZ9G?rTyX5OeLBxmPN!_A5RxjqI*c8B;a zFQ!hz?c!qPn}+M(zK&@Qj!~fh#wZ-w8S0Txom~08N_|MbmTMI5pv*b@zi_@Rof&`N z$ga>a!?C>ra0)kr*Zqd;$^MW4J%XzgKp`J^1#@o)#`4wB+Rw9N7t)V`bX!0w?Hpo3S0v;PGZxiiMWmG5StX@I*L zJZ;Ye$96ro@fRG~{kg8geJ~qt*6QWoYPdbu?ebXQxFte948W0{pXWR33d`VrB_5e6 zgB#_nVpb-V7LaAe0vwN=n#2(H$z zZX_4Z=0tSfS~#vky!@Y1Er=<7vVac&NN?wV-D127Jzdp z%i#JBM|N~*%6uhn!<`)4+He7G*yf(YR=9ng5&WHSWH(2*s=Dgo{Ebdk`oU?Rc3~EU8=KrK@fB{{=kht~_af8b^UBJxMaO#W(Bx@@eBJu!jat? zK1pRGH#qxUgPDeKJsYPSl;DE;?Cjg%$WBd5cE`P7xOn=@clJ=X>ui#*0(UG%-uVL@ z*`)~=4_u0eyEZR!V;9`D^$(fV;qFSadA7ol9h&FT+*S|aHqpFEREA?yqj%f|_p7G= zWD6YGo$*e6`LqIVAD?sFPPmut_W7D{kw&Ef@8QVKjNocZrgk{}qsyXqz-{|hz^nu3 z)fjiK8IJ7Axb%)69D(cka3fL#uGE~(Q5P;(-7TUCj_k-pR7Djn|4^l_epEhO0FGbI zEngo_Ia@jE9UR$>*)Al?&I2dC{(ZML%hq~P_%L3NG^@V%po5CgE$VsnPFF*$(u>Noc)fJ_L6~TdSoCj_k4oZDhYR4|i`k&7uqL(-f2AVK^u0m7go& z$PSBH>b)+uwkmawX(`hVxPE?{d>6PS*4FQ@;mGcauz;eHFr4X*ioI=c#rY4JkHB^G zCjG2{BReb3tLv|+!ij|#>o&o?eD&AC1CIN#-EcV^*;R4fY&&QMSMm3&W*uCLv_bw+ zI3thElVxyZM@97XkfuA_n#3dOm2e>&QkYM`iShN$m%@?VlvA8RH_pMWG@DX-1?S~C z;BXSIp!)7I%8{KE2X2 zau@El5O01U+~A)y-Xb`%bE1Areg7z&=KFNP+iMnZtYZAEWd(R!t!M!Zw5`76rc1$=ATQF{f(;t7r69+fQxR`eyPLb<_WC0x6EipCx z?kEFS|4?SbRXBkz9p*5&`omY{U%-)_67e9nLOnQ!@Pf4wa84pI4iRuG?rN*$!;xK* zqL$G$j&SoAl~#wqg>|;)U4m2TSkTIYBReF&j`_R$!eu`yVG4wMMz@*y3fxA9T!UOV zvO9A2*wX7OaFYY7^geJ4scsHYa0dk4_C1FqJ0m}?hw)^e3P*NCj^sx-G{NbeE}1z5m+@EG;X2%c zT8K*y9N7)g`o+HWC!C#>(u6IX!2XcDM7U%L>7!5J$WF+lR^pijIHffOBbIPsn`)R+ z;KVt)y&uDoT@d*(YYrVvS`=gZmUZ81Vp(?0f{Rx%u4!uK7>e zS2ei)#8&$ZI4;%1sBAd0>ml}#SHTlbE0DWg0Z!xUy1ct^=7YPgXTgd3|KOo^(`B+! zW6s0bZo1Yg4Ocd0$&>{*bY(F0J{;NYpl{^*l?10U#MrbQZc}}t{R6l&g7NA1;K)vg zm__2Q9Jtr-gWn3l-D7XheFW#3qnv#gj_h*uY~e_$hWqzvqM9F0s$m0D4jj{t?wm|G zvcqwRGiJO4j&6lp1vlJ{F-!Yra4DG)FEZfB?#79oEC%Cn)%G1F9B^Y7uIJ{$3A1f~ zl@3RCHilZmG8o&d)Fo;SU#^C`aHW;;1zh#frph!pva3|{vSxzQhj`&YL5-Zb1x#u~daxJy3!I&Z>}U5vw(-|hSwSf-@qNMu9{7TBfA!^!g*!y z;ndBxN4LYhIWw@L9xkWMeklo#>{y7M5#}6#`%0S-*#Z~zli#ipj_%P6J>|%5#kKk5 z6aU~;I{t+xA2f9VyU;Zieth2r4I&P3zqdeLKWz5R>Fp1_?CakcG$n=$Yc zzXnHkCD_(0T?mDX3OeYX1*bKi`s^Fr;sB#;EF9U95VO7CkpjoPyUIBouI_6S!w)!v zGs#LZaAY^)m;i_DGq_!xLI-caUE4`#+YR@CPGna!9NCGmTzl?HEu74T2-^fWmA^Zm z^};PbSFk4vj_g8oY#Z$T1~;tMzdr`9R@{xDAI@@I%jhZ`*@5utv{0RdQ#r0<773U4 zIoakH+)<17=2zgz?n6a!*>&bGRq6-cWEzFSogaVubPz7+iLK3LII{C_v3%PIKb)dI zt$r|^jQ?Ny5x9uOp9dr1$gV@fwpbl`xaMAaZGSjgFEN`@xKZ^JZkOQ5jze0?>@7n$ z*{4MsC*cxX4?G=*OAnYmb`g&3HWXZSm~nzbaf6B{+_6WO=%?VE@1FIEfFnB%4mH)r zr{P#G9hY~3Q=ck0Fay_8O&=5vM|K&`35jLJz}_Ca6H9Gvpk$n#-vWQRej zA)4ks+|(q$!~wXc&1>lw;7s~gUkZgIy9=AzCahk;O`7?On8RH>qJH2XTvcCe^aVJw zvk)w>|5+i*M;L5NLWq>NAo)V zMhG0)Q5Z4jIYiS@rG8mEfM+*cdt-$)JzU*wj*N3~WH+J8JE&+q+*RSm^(t`Bg@&H2 zfctYIF8eGT*-7~G>FZi?xILo$Yvtgg|Eyci3|A?)=4mh-*+qD#t>U2x*J*chl_Z?R z7Io{Da9tBuUz~v>I|x0psg>4n8`3KoMd6t0U7xImTb04|DhQ739z+<-@tlC$%*wG` z5U%b=G~F6FS>4deKsd5cP4-7cPaFW_k_W?l;TnIN|umhClklk==q7N$zLr z;4^YEmn%k3 z!I9m8?aIxaTi~R}{W>S$6l_W!3BbjDkeTs@BRd08uZ86m;b_ClKM%uAI(}a!1czRN z#glMkSAe%ZINBJ_UzD+}A8zF9vi;lO__fz9rySW4a4!4M?+n+r!nnB$?sA#HBT+bp zL;3#axnak$0Eakdk1WGA5NeQ?q>xSW+=YTDqobUIt^ zfE&Bvu;Dly*#+2<*D{&~XQIXTx(V(pd-y{sxY&&PjmO}~4nRl8R=qN~tQ!Yk)xjkc z-ldU+>%1i=codHG{(p7xPiuoKT$TB<63(-w%0dqA^3^+{o^Yh+U%=w++#p<7Vqfkn zI4Ap_2MTb>$C;!&;7G6k#9p3#wBK+&XP;0`0UW3KG8$#L5nV5NcR14Hf5_A00ViDA zPL~JI;GVqTvrvW8;A~et0!MoLTUQp-?tm*1xqJ5^Tu8L?19iCc&#GE(aHOZdbezdX z8!l6==gwU?j}zcU=^-EaFn=5!H`^+3|KI5-Er?0>p&U0!eP4#Sb2 z{l9c-CAZ+Fezjb^3a4vPX=VUtGbei336AvY=V@Ky$cHOPUwJ74j_uvoEJL^^-$?gE zaHL1SE2`DA9?tNJc4!D(>eH!3W4P$SffEPeNN>K4%Esz0xU{G!=5)ef%I;Ov4OT=WyBL>oBLYu|9{%|}s>|*cbg;xg!|vB=4}DDctbAtb2#x(gt5-Si_Ot`qJ+v z5%F*%ynNOMaJSEv{5=fUJ;UdM|$YHwsOXNg4;atP+t+wJ!5j-1J1Hz`6~-J z(mO9KWj!zqSM2*)TLz9zg~8+)oN!@>*Asadc8SB~X>GWB0&eE& z-8wTk(kov)*Pg@;XE`9HA`B;2Bs_l-E_MH8(>^%TBfma*!l0bQ5!)J#eIl zT~@c5T@@~@m1nUXPA2B9K`h+Ki`O^nz>(f{*+_a%Gq`3C<=GavkgctE;@~oJ+k~~@ zNYA?T4yCFia80}iCK}*|#5<<0!^yO8NNB;4UiH&l$9T`d-5l{7sev=O*R7uf=hL@O zRuhi&sB`J1ol1aH?27+Y4wn=4>vjseA9g23*Xo05df>(tAEScwL;K3-3qiobS`A zpYIl(-aR&ql+>e=`k;1=9klhTP0)nItK1i=t|wkaF0{=c`Ct?-tySXd!roS zM$AvXiiEpuz4~Sj9GhDBNkur)Q-0>S|4$#dsOa#Qp>R!UtmDt%K7M%VuK-7S$-mlW zs9k|u|2H`|7_P{SZBHIt|DoT(@^GYwT%o=(Asx=b@6i)~xbJ~%H(tQ4?BNcRgCo7; z1CBEzFX23SOS4bHb+WOIy@cCtt$%qZ9O)T9>&L&R2~MWvU8X18dR|tYVz@&U{;{%f zq*pvJU-xz&T<6oy+b(e1;#Z}>z8ZNzLF+&QD^o0M-E4jZ7u3LmD)*PK>H)`5BzAr`TxP^}1Gz9_~!|&NC`- z$5&1aH^My%s(HN~j`Vu>zdi1l1efih<}U|lx_o$dGn~!2!8c-Xq{q8fIrilfxZ)5U zZ%Mcb=bwo!aF&6rO`>q5xBG?obGB-@=q$ryqHr~;--kZHIlD=>iNKMb?%cyIZXIyj zM$L{0!X<=#+Vu%;i@tfsHaODDEqQmWd<^b|oAqHnxJ~j+37_G_1bn)L;Ybg6nl2j` zV-MbE=ItCf;VNxv20P#q|HStT!I9o=+M^O)d~ggm4jxzwcXPT#qZ4k!licC0aHMCu z_N76cEZmgKVT+Y;rvIK_{{a_w=>3Es9O>205p&yY0GEHj#e@Ow`^l`|-EeHHM&<L)_Xs=@=RBq`EgvgeHa_x567t? z$gl;D^klp3Din!=8y$DqH3@gdJM7mlIP+T7m7C#6FE;1HmXJ)iH7A`_M&Oz<{ndux zI<+m=^23oH?C{*d&qZ+G<_^gZz@0Ysh#P_1flqTb!I9qUqt$fM@8MFOJ4koKeQ~lI z7=^3j3FYI1BR$s|N<5MMa2rBx#J|Fs4;raXz`gNF7TgF&daX4lrMeg4j{90}`v_Ov zt$u9^&Zp|JC@&o8vA$EVM~R~spZ6r22sFcuYfARdz@22SkmP|Qz12N`ZLf*KJ#WPD>$e8ng)O_es^D@CvBoaIsUPoE;esQ*)Z-h%cJGJV zlcmT}O8tE7|N8#H>Bmj(=7b|X)Yrw5QjWsCRg+|W3AaXhNNE{2zJHKSr?&x)^iG?E zJ{Z3M$1}Z^`8k|v%jal1IHkNb#_Qoo&$Q0+68#i7(~sQrkKjB%*7VZDG3E1Ftb-%H z(&GIM=}+Mdn^x1@gS%yztH=naoGog@0Y`eIFSdT2uYuE=TZWlL9B)Y6j$(#;8Nc%& zI~?ha4znNH_YJN~Y;r0YuKr?V&q}y|C)8cn!jYcnTDHFrCg2W5^o_>Bbs768u)?Wp z>K{8yM-B`>NDGvVR=B3YT}z;p!T=rj;h%Y;fzpnVh4}7rK70v*CwZQ&{~o z0`9h;UN<}3>pIH-Ryfl89O$_vR}OBYUtU)TT&l9P{Cc0blkVqSA!;e^|`>0sC@IMVAp&add?1Xp1f{mBQ;_62PhHynS_;ma%GNRRU)FU{fr zxV^!FEyv+@ZT!7+Bitoj*H{)f(%XFV*IxD*xYAme#v^e5Mw=ry!To7)OJs&4Jkt;B8JKQO~SJ~=tK6Goo?SK;#v#g+lBfZI|KLxk$hI<&BmZ=E0?7)PS zG+e!zaV;$z=}Dd}2@$h~E2Is(Ed%Geu`OH{&i&+`#$|9ZJLfJ@kE=&@7cLx!E4bmB zA`X{n_@YA&jwwQ|l?IOVAWQEL>j;DM*`s$|7>;8yK~fQ}Iy*ttUkZpn^qZ~>0=7`M}fDu0J#GpIes3Mbpo9=aQjLy30mFC6JD zzVtgJZi@Q(QZfUX;EulEOa>n#A|O9ck!Z zn1ds|#JddwHMhXkKd|*$9DAc4mHY6#9-L;_ds@no9%8{B-&6&-lZWL!XDIhE;*$Yf zlXMy5EF9?_F8k{>VFcGMvBq@_uI#web|X0NmWQin;7HGKs8@_k{h7h%KDxv(3_DaHI$L%b=po zAe>{?@a|f;*b?(#d$_D+D-=fINbm2*QHk7T12})XRIXY9C)Om^>ImnpH>mmtj`aM- zSP8Ij!mS9srcey`*_?Kp6I@2}kJ>gWBo7((_BfY!<5}mIj;Oq|H=DP`Jd0Mpj7+f;_ zj)TA8NDr^cY$NwAxPBQ=u0*(ySP|AI)?&BEZk>_<^XTF zn}hwH{cxmb_d(vnw{PLjZlq(q47W-u{hbfogT~hA6++q>nrUH~dq%?*QE1ReU}d;f8jdO6!Cpy|$tH z!(DN3Je*74&EZxr{jQ6IQ!mxN{|%1x*d|^6p!fie^H9YXBe-u)1$a5Y1@ zFTcQ%UfRT`VY`OmPOqb@SAnY$j6@9g^9hGSfC-tW(rOTta|KB`HAyPnVa_7fcGnf>4(sV527IG|E23TOG# zhbI-Tw!6FOBOK|KP1>_IO$UxwWG-J2F3Mc(#7(#b`bTYTaHL1JvvFe97LM;^-cvp} zb`^%|+i-JSr#e2sk>1!nfgen~;WqUid&mjr5!1+(4mTyB+|>$4dSX+J^Rh0%F`nIa zZ!KJkY5cKFxM_i9{Vi~$7xsr+9L*iLk4jy4R>BpYKTvrO?jC2&(0e%21G}=;%jyN( zl?}v)9m(*`(>RVE2EaKrL_o)6*LI`_^t!I7TVl84(F zd*Fh37-Hu~@%_`X?25;5%W_u#dk05)T|?U$9p~V_94Nj#2}l3*==!H{XMLOKC`Wo+ zk8bZRU>&Sd-&uJ)d<3p^m6XSGxCNPLrbal@+xm^Bj8zEER7D_U0PcR*L|Go(wH`y( z1~}5wD#4xXssd;Bu`RG0?!wj=90hQnBUske!;xOrB9)V6`{3-;B7DEXv99O+@L|E|B`2;BBF3SJ-K-c2i%7Q=0Nc7eYRj`Xh1Wp6ot7H%$Nz@r(?K4NZd zDO{7Rn$R0K(zE(ta<1k&Tv%eF%Ud{}s6y9rxVQ&1VzqFjSM`E!Gv6aPo=)w9RdCV& z{7YWLJ>2kAss@hqs48^b^?eO@O?$$o6mG0jeoZx;cYv#WH5}d&b4r3O&e9K;7CvEh9x7RKXB5=4NRZIJs8g|s)K9hYTaE4M|x3@>TU_9AF5J! z-!*OU2(D_A7i$9?olS)9YdF$_>bZ8RjR($8@Q%(sIHpSR!|&h>qLhp(;7ISO7{0+E z4QI!%x9bj^{pVjVo8jj2hRn+0NYCl)siZJnIBml*$|I3;ig({T9?6*UemLy zj(oF+V~R_Xi-!x^>v*UQZhx<#Ln$2TFy z(p~RYT)hnE6x%Cy5pH+T2bM2zZT%12OW;UP=@IUay=ib`yDkZxhg(&0)$uD_di(wp z#c-sT^k7zo%1byGcJa+Ya5Ww}`JHfEO6h!y;7AWCd-93+cW?!ZO+3DEQBnVxy5JZR zp9B`dk>1hk?^K3*;YJxxu0H{%v-yR658TbeRv|CpNYChuD5KV2IDS?3HSTaN{6};9 z;1sqkizt92y`md`x1_Eau2SC-nagq*&OJ_maR5&Kd)Ac~aHL1n;Q5USVK^;DGX{IO zg5#fUf5Tn8YJ4ppj`W7E`Ri<;1}Bs_Mq>ph{yOT}5ZtKvRAL?+=?Oi5Pa?w{Zdfh) zuPI!9geJouxK|a)H*?`gFDRSp^t?M<;im1=25?QeGY7`tM2u83p2LwIP($-q`$FKH z*1Q?jhU2h&m@@(QsNs9oGdR-wX@2d(gG9I`F{eRwxE;>+%ctR_cZEE83P*ZA1!eST zpTGq>EcPkFnf9|;&%*I$Z_dksBfXy0^Q#V2!HpFs{E&gu`}q3tJRHl4ioz#wq{mZi zMa#1f2l-Fb?35$>_IL)l|E(%Tteb)9JpF6~oIn=st+1Uoi>Yqhwj4te{ZHhLTv`z2F=3{ zX5iZPBrdFhJFiwTmI+6CG8@0|+f)Qs!ZevV2Dgeq)06{l2fxKk1{~?dEcmh7uNlsC z?ELLPI9b_|yX)a%ru!Gt;Ybgrwb0vlKjGfZv8D9E>9r)ybHd%P2%x1L>Afs`7b>&} zr@(V7{yUs|&u(KLxGm?H8PniM&t>aPwP5x?_&XqH(df@`HV20?Hp1PJO<8pZj`Uid zAD(FwfvYReztjrnYjJ&c6Wq>@ZS1$<)?3olQ|D1G%umHN-~{Y6LL1>$JXST_0#_XP zg7X#}>8-rl;~HiOw{yNOxE5~VTwj_XToH>V-%U8uQyJaE_stVdw|rkf1zcstm1!Zk zlGt|wH{eJwrQgs8*$Z&?1z)_2;gmgP3`F48vRaFz!jT?IHmk@h$&{--cq|{T{L<&! zVsH&-yCqWKNbjVIka}+p+^*4nw;VVl?z5BPaKkH8- zf_jp0l`7+kNpPfBvL@zU+*i1dnPYYta59(Cv93v$M|vccS*-`h;Sv>mtZu@& zyLpbw!hLOA)JlLOy^$6z%$iK2xZXKDvo8@YE}wOeJlrOR^ZM7}NKd5jY;npaxUQlA z!&ta-pXaHHaBrmOP2%B5FJzOD=lD*z@WS~$m*MW-HXl`nt1*wTh=U_NkaKN3`g`I2 zy*a%*3@%4~T1ySC{RpGYH8|4yIQ{T#+95b>1E`#ZySO(oSp)9Rsf&)WaHQvPKW)IA zKU}rGzkC2(WRv{JZaBV^D_mmWNUvkoSs~MCIG$HiQr>V@WuJCy!+TR z)~vg5{*EWNABF4S^h?|W_tBWvD+-SEHlAL2mZk*mImd{QE8K;Fbwhe^-rIwHufma@ z#;=N^RxNP9$J{m_gj*EM)7T5QerY!F3LNQWWQzKbGXS?~wwuQWPWzqdbtAaq+LIxd z;Ybf-^`YPuOK>u*w(Bk6o(_-vGJ*3uKNubfM|u~>lZ74Djp1__^$%>uaAM~!tC_*2 zNIG4)1V?%nxxO^L5QE!s$ACo-&MZhc&H`@D$Ir1B;YhDyU69}E-EbSZU(;*Cg$=&$ z-w!u(%s4Ruj`S#6Y~ypWg5#-{r%{FTsIpTz0LQ;nc_SQ-^d`EQSG_t0H-7HXyd0bt z`)rIYoJ)v&dKet(N!)t>$ht7NI%obVNjQV1*gku>+_~)gp>U)ZG1zwX(NwsLPH}%k z;kN%1RXRxhd(J$MFTjx=#A5E}RnOq;uF?M%gey&`jBnvbuF8+*U9CE>Ad-&%56Q!;#*? zn3^xAH^Utfm3hYiXQ=pM=W)1Vx+jfi;7Cv5aof`^@^F2t@4TUbyX9vP=>_M?&)FIT zM|uf=%W;Vs!R_Z*Svfy~&wIB1==6rGkqT)Kgd;tKjFtr$B;|td* z|LfanIMO@#qR{;FX*lllT?Hd>>@6!U`om>QoAd<0k)A;Zp)tu=xNGzJ&j;Y%*QIq0o(O|eWm%8?$xLWiqr8{pO| zK8vY>yWLIGei1IWosP*Hj`aQ=84yemhf})9ak&(ZZZvxPWjLvTL#t21k)FTg{NiCv zIKx@ru$OTAj`D?Eg>zb6&h72d! zKX06X3)ECR{Rl25Pf_$5oD!!$-*Gt7+qe2m;AA-56~5$C_uxW;Yl7q9eq3o0I0i?0 z`d-?y?!5^Yy>|B49XQ|OeXR*_gOg$+N8v~>ACGo=MlM{2yycM;INn2@!pU$(=Ajav zaHNN?^RevTI=G~xxlZwLKZB11rNUL;?U3<+BfWbTsx|w5z{NGN+DE~iW}Ixk38ytI zrRWYvdiJDu?0+x~7pUc7brFt>K6vXLIMHnpYDeHmuU`6v{$;Bs@%(73-gh3Z2Us*9hz=%q(|@DYhP;tIK$hU41?fC^<&;;!nvK1&~t?&y?Hke(?3&$lRNLf#}`gC zo>SmHTt(tJBNsT*lh@!D$7lk#D!6&q2{=!aJAT=4A$Q-KIm3}&yapeBM;Ew%4}?|R z;p}{c8y>@MdZJ>Kx5Cr#j;Edd1xMORd@IQg8Ogmxk1V?)B`aUSI#=*t! zX_d5xJIW{P^As-YYN^v9IMQ>scd*hW8_vE~Sj-B}ETypSIh@upmLmt@NUz;)9i!4R zIDWUlt^43MhpX}B!^LavKjsKWdhGsXe_Hnu?w{hjO?%;Pbi6)U0H?y1?(G0adh3{? z9FGpc74!0Q>%b}9*QqUpn}0XxZx2U$>I#zvs%WQhePf#!hX!2c_d1>uxUvhf!FF(@ zm+oi(ab7MsU5kp7w<{iW!4{76&^-#A_TB-{p~UVTR7KCj~0dD3Ps)@t%h6G zy*JJpj`Ye^iG`m&2`8d7H?tY;ajfam?SGW(j)gYm#O6<+$g*DI1ik=%lq|j z;i{WkZtjO8y>ZJ*u87=*%lsETv<}YTnTbaOoXSp)3`;oD6IaN{8j=rZ$o%CeD;$Ss zQ`tK>_bBr$3pmmXr)MA2UJtink3bg_TzHHj$9uSu&bY_saHI!rz;umdH{6RW9vyUW z>Js&Ct#GRREziy1Nbj4rQEbF4oCjTQ+u|_3FTYdwRU2HF73<4=aHQvL<72k(tEcff zMBH4{3>?GLsx|F!ze5dPnZl7?w*w~8a$DhEYpTB;gR@N0aQOoF_-^=X6FAc2=DC0! zcDO5BL#qbi3`dHKzQWbKDz7z$BfV{v%#nSjaJ%^5l=e|BUyk)V+@89*1|vAq(-s)W zpy~!UD8o|t9nS2}Q>QLCsW(zBhH#{pjd3a@J{Ydp-!S(x9BrKF%O1GnrEZ`0!jT@f z#=~Zj+Ju?0YF8I3PjS9H@WESROI6hvb zAze7qqxM**OK$|u@a*M;Vz@rf^Y(w>#y)$D?SUh`X)hD3(w5KQ`bNN;n0z>;7qidD z;C@`XF|7kfdeY9UYMSMStG~JYat@ri=dl%&aBVvp{%XUKUbIs`wM?Yo!oR48WyASj z@3EPNldYSlp&aQ!Tl=%{{vJ4Ujnii{;0}seJ)MP1vf9R=1xI?%=yfHQ?BLdwps{uj=v!<`Pb?P;dH}xny!Vbz1FU#2uFIvY)lu+&EOh_#uaVgX00=@Opo*P zlsQcWIMN$-X~2!s9j;<#v#bT&gEY4J^>B&_Tzc|wT=D9x3b-DzxvKT}Ik-{*6A5Fu zUDjuexZoVZ6^!KINH3UimTGMR+~;#=w&}rzp8l221NZf)rP)q6(gXH(<$b=#aJ?hh zTQuQ%)>zDJggd#%+e#LW^nN`~Wc96tTMTRCRfSu%zTAKxZq0^hI~h3A^EDaj*Z3K3 zgB;BUc{us2qIb5yt^bmJNE(jxdbxb)6dZ-yv?Q`d3eMFpeo_!FBBs(+3Xb%6-B_(1 z#4v~Rqh)3+VsKmDEb0ow-BJJQDG5haOCIeSxlD@Ap&e`Y@kIMT~y-sF8=503T8n>kLnjV^LJ5^%G0{6XSy zq=#!>;nQaaxC7fqCf34T47iyh36~x!8?qga^ltSmSCaCDyHmM#WF_3x65StZxcu2Y z;bL&4XUlyi_2Lycx=^_R2Dq&gM>KcBH61!|Srm@+YE2(m{GJYHY+>C^0~cW1lqe5J zU*-`b0!MnZY-{c03*nj_0>91=;q`vI?2sbdclMy`+u%rVR#oP!s3y3bfj2%*!Wo}T z(olhGJ8(Hg7>@L0wQql-S66qxqW#q7bu=;IyN<24Iqmr=VAncJ!=n9s8_V4u_AK7q zDPO)&dQ$9BpI|xZ&Ei)6qEF@iY>;H2a=%-CdQ!R7qk<2p99w1kKPvYy@bY#lM|!lZ z^ceP1IqqV$nWgCPT>*(F9jF|CrD5zRIa~wojjFWZgt@Zm3z4PF)fvIJvJgq<1e5_Ge8Ocg>Q@P58b(@xR+UYx|SR4Nb%_Qn}z9 z4@N3?{L6WHDo1+03O<$Yr*gF1?+;QrBdvjUD);TG+pHyW8*3ezs2pcvssfcGyD zx$=q)?NrWwTAzi=d9pPsQ905Jc92%nhRSKvEy_~4;@Hbisa&nipIR!nuu5YkmE&ma zQ>JpHCoGBWxGk02caKGg%86TU$e?mBrfLePTya@R77PE)zWO2Y^$=jF-4M&)wKbTz0P=@~n& zx9K32OP1F8P336ZbdFNFP`j;uRBm-B(;6yg9&~UQl_R}lY5NThQMvRs^A0L^Y-BgbBkbQLabE0yO{GA%8T*s*0J}PGw`@xdRY35F>rEc%` z)HO{iM|#N^PGuaXa*aGEUr{-`{9jsB?ts`M9V++j?EpKK+x7gR7M0t6%VdJ;#Zo-q zEW{`hpyl^X>k|LFM|6RcTW>(p%;p^VfySeLWa`o65v6AjueJ8Q@4eOY zWeG=e(43o^g5hMgHS^(|##OwAyWz3zA)Ijdt|@RwS{GTtkzBNOuZD-hX=rzvz};^) zYk{l&9#8|fW5c$oa27cc)^H>z?ZhXoFgSYC7ach6?uJ^p;vEKO;MDf6p9a_Eu+avN zl=!5KttO@&j- zj`e{P9d9=S?yImUACBa(m6>y61+K*U3ETnBlms|&x(y#Ld$x%J-1f`U9pOkWTa%N| zayTC=*E?{Ne-wtm4ZE#m3^&tQR}oGlk>dnMa@vM`GUDL8KP z60MnV*SU7ia3r^FR#ZhioJVGS8C>hSN_)79pN)!e^P^@e!FhfOSOiCM+$`6;SpgTz zPTdb@V_{(ecOvJgEZp6Vla=AVomk@nM{?aF)5j&kMKxzv& zxQx)9i{VJlTlQ{)B)HIo!nJTCA9$$21=cS4#HU=>h2bi2D(a_}z>(ayiX*`*;g(H5 z9S!H3{cakZsW0mVT+IEi0$0^p>k3D5;My&!uoACrdzmPbHA|Q1e~^ZuP0o^mi=@%@49Wia3qKBmD;ydIQtgPd$`j{ zj}F3#-?_06&Zsb(0rxreupb=Br5nam+6cEa(exP{ZN67FT)+QbL%16io0xDZCe{9M zB&SZ^Y~dz22YJVPa519qQ{iq6Th4&9YFy2Nn;`r+0FLC=&2dcH3}<@Py9(~s?f3+^ zUHLXM;O=+FXu}m<`Wy&Ha_k(vOSTBk&o}ZUoOZfMDBK3N@)$UW;X!OTc7jw89Lcqd zjCi;e&RBfSLAVr$Z60vWcYg}OHBIr*fve^y2g8w^yUnYHWx%nIr0;-ho+#%4H!JXA zuLI>=n2sDc`_FSj;7IOW(H4zua4I%?QsC4cA2NaK7cOmwYqMCug=;T!4uvB*cvtdW zGT|oo9gT%su}_-|cVpMOdvLCv^LTKfA>mdl8(Ls+AmE(mht0puY@NJ-BtR_ea2y+&r=CPqN^I zTAMB4R`xWFhO<~UY9Cx{@$@-xV-8-7gd;h6a*ZQ%;6#%;b>TWrcnia6j(Cv{x9GC0 zK3u+gLlhjz)nh$p=fZuG?^hR$Gxo#h0Ll&SzPJkR(IfG>a7xqOMZ=MtJ&Rt?Jh=9& zBjn%`brU+_u5&WO;2hrn6u7eH5wUP2chCLTmYs0*zOvGAH-Cw?!lmC2bceeq@@XFW z<7UY%ha)+BQIZ$);Vy_P3=L9lY;|TGoJ)|QEu5v?8w0qig*tI?B$qE`%IjTlNm#Z>%4_vX$ybicZ%flz&g!lGp!p*mOFdy#j zZT}T;B)9Ld&fL9l+xn~@z=_J}6u{MTZ%&6R_r75Sw`jxa1UQo8S8lv)A6(`R*J?Q5 z#;R<%BMFoS@TiM{=#x;39*U|FWmt(aaMja9%1O0MW%3XDsHcYBe{R?Lf;>RvrJ0O zhU3lf4Tbx@SNSR2uBv=9xZwB~tKdiu;E%*9g>Vd7&IY*EuX;V;s(8QZ;bdDf%;Eaj zKUTw$T)>f=OpD+&s|(}cT1pZf;C44Wtb|MLO|gKB`Zz8bj^qSR$crq78|QaA5Kb;s z+!W3|q_h<7r&z)QxG%>v*20n8K&9e6hv2@6S1*S1VD8|;%@9l34HqdNZV49`WV#NH zTrYmT(`iz(($!|`!>rx1&-tj>Q?t3hHJHHp942|@rWE; zg|2oIoQut3Yq%9Jm#>E-IfEwm6^_DH_Py7D(_6)nflF!}6#`f9Yik2HxG!S^9LXKD zduCG#w|B?S>2L`~)xvOdLSMMT%}X-274+v;k_tz12p9LPI0l!@k(7a}5VQT_Pq}Ym zwqYG7N4^U27-Y{r#D9;AlrR7sACoYTXD&ateb- zHk83FPE!5&opLrAeywonddp_RZL3zaha1TJvz5uKnkROgNH@xIIYh0^FXy^fb7s@41O^tzow1 za2fthi{P9u?%NJWauT!RSr_3}?AWsc&hg~6P`J#IvyQ<1Tv_J=_aOGd4mgsVn76^b z9L|wb8U(jB*3J`d!NFfU;rz3!7Qvz8ExL~#;3n!n+6Z^A z^z0J2st<3o;YhCH&V%PF;S`c?Tf>bR@;8OM^Qd$MoNmn#S2*3H!*k(C&SL(F7nk6^ z%eTyhGpqi@g-Z@kSq69D@jf@WQvuWR;7IOb{^ikE;2N(|)vqa+uwj)t98bb+F`UHb ztfg?OO6;9*B!_WVy2U83YA=9`9JR?EZf}QmJ{-wq%x&|(3YRY~ zG8XRJ=o}fi^ZJsyaLo#X>b`0autIgPnp+pFQCj>ry&o871|9Bx_D3spFM-55`} zw8g7-!;##^9RruI!I|4AeEvo`_uOM&{3tgiqI@!3!NO%;aK9$x?tvpYj@v}u)xhcW z(O7~h0@rekvhPVCjfdN`B0^Sj{gF>G?w;?g81kNuc@Fd*+h`yU}S=U+q zaJn_J1#l!6GS>2DEnK+#ik)zW8D9$E0!H0B57+-hB>=8u&Fn(BzvV=_e6E8tx|+HP zuKCOA9Jq;v`wqc5e~}A>n=;p=2#(}N`uo%Fz>V|GNrW45QF0^P)wyxGaOWgtm%(lN z?p6#(awJ`2tnR}75Gx9SGg+CN2)CixHWhBdOz|MNfwQrP;7G0{e{I}7xVpoqm%>HP zpBVxcNY8^TZ zM{*|(_TGB{x2*TR0o;w-dVIK)!bi? z)0lV63@&5M<50M=LoG+)NG_#HxynPh={g@2;AT5G@ZfryQ#f#MbMJ@2P4WF$3P*A( zaJ!~Y?f*)-3w!%z;Jz11iop#&EsKO(vUAP}IFf7m z>0@&XoNtwCC)_jdL#8u9Y}mgtIJDYJ=M>8FU@aV@^seoY3aIXW&RK=1H}*r*H?Ye2&1ajXqHiXI3=- zEZkX#70coL%+H^NBRQG-xM!Zh1%HU#1y{_~zakjtyeUO+(m`QyaCb)BKLGuO74$=lRROQ05`;&S`J5YHu>ScFX8sA zDD{BTw+P+{x3(zG7tZshQ6ijAKdS>T0FJmV(8 z-8^Yk2}g1`)i+nZhMRTe_I$V%_t%EOU22(S0w*@0u@Y`}nC~SxlFK<}XICfOaPJlt z+|jJjUU0EdL)vgI(u%9#wy3YX3`cT0e-w}Jg1aH|W+vP%mwZ0lSgEF&a7UCTt%mFE z%)SCgaywt0F?2JAaJsB z9o29o=QHnFO%L3Q423SZ1NO2iK4__BtHN0ree}>xJ`qG_Mve>0`%mxEn<;tKl}Bc$5Oiv{%0Y zM{+?eMlR@s(~Y;OfGa*5((gmLSc8gFaE&)>*Tbbt8{dQ@IiVU8V?V+TOm!=TyS(Dt z8#w9K?FZrH+plbZdw<*Y797b99iw#M6WrNLL3`jH%}r^8D~Jl(4i`LdCKYbMhM3!M zBuDfk^Ui0u&7LdL;f93A+<|kDGFl6FM*2t^T#?b%S~!v``q1F}7dW#KX{+JJ-Pm;n zuCr)L6x=Z7eH-D13l-PFk(|*pHp&BV!;5nw;8ZuMoPtX<_~->^p`W!0&b{JtJsim$ z&2hE=3U|q($O}&2_H-fK=+;~Ia69-LH^W_wYrX?Va!8jiTlo!c#khyKp3z)G_YxcQ}jmYGb(ArrM2g)>83IIK{QmTj4_bM&5@bIi=d` z9}No5kNJQNmzwXK1oy1SP5~}>XJ9(q^-_fga3r@>c8Bm!xQfPhWw>1T7h!N=1}bCW zPM%nr0VlsquK|wan10x=`3r9I@(&Z?Diy=L;3l;W4TBrF>97qhR+--jM{-T;jxQd9 zGn(>C9PUo%cRpNkR8yZd<@DRlGvVr=2S0=(Ij1F+>xFJp?t6vg_kPMfIkMgiPFw1D z2VC-i{&u*Tds804k=)ai+LOcJPPk9)hI<<}Ru`_OX#IV-8`7*Da0yHHG{KP^RF9UY z!f<}VYLDUiS$k%~*&8gaf*Yx!=lJ^^Q` zFP9Cc)OfcAj^w1ue$f$udu?WR2~M%%%ow=jD5?E$>HM)da4Rz2w8D|x)NWyKQMmlK zj>q9NR~wFila_jw0e3G*EEn#M)v(8KBuDkCOuCrh{I>Y)gR?QN@AszMiK2?ta58Iu z2pnzXlqYZ`S2cfnxj5Wpdek;J7jc&^xH$$p!r|<8_T{0!$QtHTIFhp(IlFTt-0cTz zlHok-UbewqYYFmz%Q*3RC*1Wlme1fw?y9-2>?pXzn2ad6z>M%aaMn>qc7pS}*_IDC zajs809LZswZaz;EZuX?TK5!BIA6MWSC8rv|NwweG1sC`|u>+3evVL?7l7jnqvD6W6 z%cRs(a4|(6wcr*E)a-^ke>Uqm9LZ_D;hiH5x8JS86fX0zY!Te|dAH@^Hb|H6ffI{5 z_5zONw&q7vkA}0O{#zhi?!LXbaBEujkA}OZRJIq+S?k72IFjQUy6S@r+{A+|DsU%# z)HlJ=qT+|FC?}*}xDT$d``IfvlIuEe%ha)OH70K+!<|(*mjqWRx$py=9)IV4xKG7j zU&E1{SJ`|sS-7Y-{St5&-^~w)Q!Y|@1{V{QegMwUXUrQolKcANP}DfM>6=7;e4$)L z*&Q#ql6gXR;f^P-I|#Rxrq%^Va$rxN-8&wxR%2Wb+@2H7Q!j#E$N0MIkEN+1}4IBqZoGu?ni_! zoSEc?J#a2Jy^G)?9HZaCk=$5?cE!nX9peqIz%^d^IUDYJ;nJ;e>CYAw!&Qvg(gR0w zWP5sSr@$RNZ*v0f&AK#sIL~=HE8%MTtq;M8+$nqyM{;E=1{0>jSuJrp0M}_gek|P6 zW~orPA5umoa5ft+eSjl5v#BEwO@sUVGiW>9E6M#M;M^l$xxq1%xQF3#O`Ce*NbW3u zVxt^f{=OCK;M(ua9`K^v<588?aDH<%j=*&Y_x8b&99o)^kUZRcqqG>fCp*q}!MPOf z(1+XQpl}pU<+AuEIFd`-#hgup8+w)F2iLR6_%Yo3xxpH6^~)xf!i6Tx_zXvKYEK(1 zngLgsTI3AZHSOLVxWHy3IXIzY$zyP5IJ#fpNN#PS%{m3R1?p$a;a;>asem?{Ow z%o}zbZt#$Lyh8!THTS@EGpe z)Akc^w^eq3gCn`O`6=47;QG#dkc4aL-M9&^y(zv9?(>(2C*h=Co%s$&a&SGjd#J!= zF8cNJGv)4`p0Exwy*vH><)e7?k_~*A{mm9IjJB^(fpz z>L~!1>DKuJj^yNaA3LuG_jdQxc0qr0G`-c#BCW3IKvm*t8n$#Ow8dtn~o>IH3jZH z2j`T@5Gth{$<<{y&(VbINHIGFcO~_{E?i^yh9J1%Yj&K6%duH7436aN4!jD`f?KKL zQ~-Cv%1r~#T*7?`oK|ky1-K>&Z(%r+yL%d6nNKAhSL7ru~L1$XJ4$|yLJ`&;Vyg$FmIy+sbrfNpjg zE->uVEx4?JSy$n{9Ws=JBRRkUVKemLE+)T`hMWEQK@nV|cSES;h4UQrQk>| zuws(+95{cafuT=u=a=TeEjnZi@J@ zKsf(TuWrCuj(s#1j^qqqsZyN}7i@2E2JZHz$xd*|`s`2>Px({fNY1gJ)<#RXS^j7A;bf0cd2N(?9Gukzx4e4o zJvjNY)6?Kc?(ro3vsQ3tM_$u}`w}|*37o!Y$PKv6*0}p{w!!ssa3lx$_JZfuaK=X; z$iqEkrr(9zv)A|>Txnm(1GqIRucyP2T;#Y#(zbA2HXSl>xB91Cg`3KoRt#4o?%e=) z{N*osIFggB;-_l|7t{A)7+lfCqSJ734?bnXJ(FM52={E?#2IiTH@P{=Zz0_99lt() zq+H5MW-(lAQ0;oSuR7Kb;iTQ@3UDMxdHtG9d$>X!sh4oE^DpJW*@+yCg_E|K{|HWR zvV|fX$yL@)zvKYNXqoyD&Ovm+X1HT}R`|gw`*ND#0v~$Lgd;i2&v(7$!<8qfU5C@U z{ct6mB-h>vZcgItX1JVfE0o|!?sEF!2~KdP(|PCMMs4+sfD5>AM`yv2T;^9bp^M-`y`A#l8pg*v z!SP14D8VIFjcS9Na{ZbL9LZ_k*09qBZa~C$BizxJ5f*Sec9)HZ%V-vQ3}>4BL=}$Y zHtTgg1{l_J6(=3yN;le$qX~MbR zbN^yaxig~OPtafPcj?)1B-eTKkLhl32YWKy;LMc{(csPpa$dpRlxu$qclGQn4LFkX ztSw==6mC|=UK=>ME|x5u%<$0<;o7txK7;FyG|+@2xzCR$E_a73WgeRc_wndu5ja08 zbQZ4L@^(AiSS=SVIFbXsPU)Zr9Q|Ph9qwkh%EjI|hSZaCTE#$HJw2^?CxgDj;MB z+~jQ~FW}aDA7sLj+~_EqSw3(ND&7o-bF6rO7w*w8lXY+^hxWXLE0wQc!I2#439b&l za6#?^pZh4Mw|d1@IK%vD(Qw+Ax4(kB*Vd>FM{=bv2CnjhdpAtXT@nnpM$a1l)XV^%6TjOE&4(^&z z@*FslV=aH{R480#RB#ep+n#18xB=gmk7ktHxO`3z-1CZ^`fw!I`qHCkVQ^9t5<=mM zy?iX-Ooqyy!)@Ejcn>!`{?uGJl5_3$a#RG|#`9_Ja8b&=dT`rwQy;+P6)Jy#Q()K4 zgCn`u-}^X`a3hxF+QI3+P0)mU#_+fbx36MqFPvfDO9MEPgPl9%9R;`MXOSVC*fFsg zaO$<3lW>I%GJS9!r9TbfNG>)*DkB6Tw>q^BRG(yttd%HbM;YhA_ zzL7yZ+(@Gy00*ereXx z;3^Ls`vzyf;ISnf$?4v*VcIIV5GUSIxIu@cop1&>56TF}dEwx9xFFFlR&XS@TQSRg zHC+2wv)yo)CXUd>G+Do}lp=l0qBo}xj%mZuBHJ|KR%d#o!|ji- z5{8@9dC?J$%DBFEx!Va08#-eEmQ<`85*X+$gtY;F1m8x_X)@oJW(~VmOjJ-p6s-3g?|Y z&;{3GoZSs~Gb4L0T;j{|VsMe$b(X-99P%WSlytZ|T+ueTOmT&$a3X4l zwzjTtB$s@o!-)*Ig>B>N;N0s<@4+pqHkl6RKUQcY+_q5xZg3>0Jj>(BHn{R6#Y(sd z8N6z^ZLV_CaBiw!1a9Ar)l1<>ZaFP<`1YOohBYvRH~a8uIjdf-f)pN)bmpLfy&j^vs%(>$}_M*G@kz*)3C z-U;WRQt$+h8`>xdcWdyrCmhK+ugKn#4Hql6bPe3EJpo(bHdQ6m!>Om-l7f45?u8c| z$vrnJxR3+)v?MqZ?xfe}Rd81pJ5<8S?Ybll_af?tHyp`9uRHN77tX{g!5hw3d37Y* zmrrV?aHCJ18V&beYrHQU$wgmydCX3@s`qJpIE}ZXeBtJA5#9|qbnB1|+}CamKRA+; z-dv}j52w5>*97iKX^t~ota9sSxcBY5$G{CgWaMXzM{?9VIEgWEJyW)57ogZ~6LP5#wjIFiHO zCue#9F4MiY8&1mjsVH1|Wv4pa+GVa2;n*^5A#fy@JyJdLAe^M|&||oIv1Q*}DJSfF zc`97!nuU|#bn8Ba!jYWzPux8PaKQyqci`e{zjVXVd$UKuEy^{W3^zYjG8~TNwnv-Z zE`+N$opu>+X8M|^a2{!)gT|CIKCU+f&eT{b0*>Uke{|?Cf-~w;D}#GsFLfWTNWrul zZuWKhRJa8~b0gtMu6u;1!XdZ=n|S--woJ&YhI>#h*9JHKiPAJU>k6kRIFj?;8){Pm zH>6>n38&LK^DNv?{+HWuL!YL|!P&=!MZ=NY_prnjhvD4rIjx0zyu0iWoa+0!i*T#k2lMiRVq2MrF{R|O#IOpDdv2Y|8-aqHTQ8>-< z(Y|noN;kK_<Bn9! zoJn|)FPzFd;bm~%Ni7P3{@RBpz>!>ehx+6baAkXrslvTw4LHNuq_n!gneMowC~&)` zCBl)M`TEvlC*ejKR!)K2JdnHqE_V7!3pmvy)idE1En+9Zk=%LHH?61OJYUp~g3~IO z)`#13E{z8#b@jXwobx!Fm2f17{?ZrGGjJDDT7UFV?*7W1T5wf%o~m#knoE`89Pjz9 zf+M-~tl_M)aH=X@J#ZW5D=WbL>f%m@yYu0|EI7N(t5(C2ocbd&?&siE-X3@grz(1K z9NdhxG9%&2L~~W(Y|V4mz>(Z~h3T8l!#xZZy$5&mmcAIA@w7KzjVPBPw?!3h!H5&d za3se*Oa0shIK$E7tKbs1-1@eJa;wi=eghY#ova3DeC5_!IFf5Wiud9oT+Ru_lW>z3 zI=+KDV3X4fXJffs9d2&o^L20}=YEyx=nA-Q2j)SzbK^Rm!qs$!-h`X&6+9b`#~n<8 zyL#=*ar{4qPY!yOaP#^NcEItQgYUyVUu}9GZdAOd2AuY1*$r?c2j9=r{}Nngu5Aij zZ~oV6IN>SN55aY&J88mcl+8|sBf0oZq1!LR4eBn9h1=)8?kt?%sV_Nj)kT(Ca5IBV z(%?u={({8ISKzFk1pCA3Daw?|D;Y1WRTEMM6JZmdl>B>ZZIQwojCY;2+^v!T2 zS3j@7=o*~UwOn1eX`!c9!`+(5cZQoSOk=?bxgOdAM{@SXPlnaN75Eja!<}Z#i-LPm zrfvo&HhH`@T>r$Xt#BlFKlXC|b-2&sXQ#nge!1-n_tRoH2kx1c1RL&MLrXdw$>D!l zcjE@!{3F+-;GUm%S_C)oMXNI0InyD5dzSt&1CHeKFKqpE6Rya*;nzFLZApB-0L~)u z;=t92&D;)0a{JZ3 zSk}TBWcIehogMyN3ohZ9Xa9W4>27+;g}YEaX9pa~@y`^FtAjhJJ#-(=<3@@C++j1` zYdGlx4LrERs~of7NUr~{(FOHzJ&&ZS;rcd?84p+8F7pWP#rd1MaQS+n*>EK1-(T+D z9XL+>w9|0wY<7#mHOIfHfjfVY4N4EIPaL;Yi(p5RapcaODNQfpCGeMc3f?%csY{Juuv00LMKjyc>?x5oic$eh4?o zEP64V;7HwqjkS_b;iS*C_H|RPch1>GaKZ*{pA0EC@2i$M z+>Yd%g>a;fL02>P8Jw?6*K@e7Lh~)*lv_@|fEzhl$pS8MZbuOuscW#{wNE=-@!&uM z+=OfO`f$w1jSX;(N>diV`F#IY3`go59R8Hi0oS=(v<7b11{XS<{wS|%xV>{mTf$kL z9a{oN>K=?7R{0!G#bEqdI7Q1>3UFoxyi;%i4kN7KSdr?7;Yb|>Kk2R)aQ@E~i{TDQ zM~sJCs6XZ)9DUh0ft#Xfd<2fvMW~uO{uNy1I%Y1M;e#Jya8ZxmWWo)ses7KbhPqsj z!jU=&G*!dbaD&Q*X>ixGQop-UE+OnnGTfz{7dCLO3S&y)NZo`4osdpA-Ywe|a277( zdf<}9b0gtWjy2oD-S*si435-Mcx06K25xiE(jd6!)Al`sJFq{@3vNM8y&c>!x#Ht+ zq^<&EVNDm@EvXP!IG=X)2XH02X7+HSA75Pvm(g;$435-U*u1pwE!>E*1Z%ig2hUxD zJJv9LK3wC+bM|mCSyWk$| zDI5bQ$H{Son|w>*3>>M`@P7OL4{*bIXUD*OJ@I-gToWg07~C`K%}#LN*Xf;wBXt{0 z_Sg5q>9<`IhKr4fTm#o~kKboNx&1zCoZ;FG_~+nA9fzIAzV*RvPHOn{mU7~}Ur}%$ z17~-@c_zdzg1hh|_&gk`>+qpm=@Z;F`R6a;*8NEHgZm^r;y&Dr%pe!I-18|H;7FYZ z<68?q!+opjeF!(~%6Jz+fB9`!;5rU@EQX7V-g6Po)bz<6+<)dhO8Nq)=`(a4ZpGUD zmI9}Jstj)5Wyd9Oj`VZoaHI}I&x?|NIB!wu^KhR{HRi&7sNc8`&i&B>S2*o=cPrpX zT?m7|hXZgY4oxe8OP07mhZFbr%7B~NGtUi9`p}z7I8rBK+pl5Y;9f0I-wF4l-dGV% zR7iIXG{3`5>fvpIi`jN>JlwFnG2w7oQ`FqyZpcr$0!Qjd zuqH1ag!4)_PlOY8bQOo2$n0{5vt`J8!0m5iR>6_F66=)L|A5=Ua1McspY-PYBFf3s zUa^IfFdyd$mylz56^_)IXk?xI33t80cPZTawx}MsQ9ilz;I1tl=>_NH;8P7p>Q2lw zeEJLSTTHYqocG?LXKcC>sf(TFR+ST5AB;?6v6uoKUuz zJREQHCvWs8UYk_|N9s~sUZOJ$F7o0w2AqfT#2UCUTJodeJ{)-C1NUtGvFmW8PK8vU zmoVI3*L@0bja>)M!HM1M|22Hcf{czCGy<-0hzg0dTz7F|}}{&V}xtv0`wcuUcQj9Ur*A2JXAM z<0ZIN<4y*`jb^IV!I8QbDM#jt!|mMA)dVMB?iLOA{@UzgaBTJBWpFQg=GViKIv97( zFB=J0qx$tG+}4#{esCRbBlf_(G29gdcdlf~9XL`KW5V@p2{^Gj(Ti|n=Eu0e_4K!G zfy-aCEf_A%H~KCdsgtp^;p!+jX6X1Ma4SWIS;0L`Ka~V$6}CPE&UMC?dvK&~Mq&GV zNjO)TnY-Y+Z*HCocVA^w2;5LgLMR;lN#T7sQb*%$&lG96T_>4a;DR?#V!*XkdAY%r z?FtWr8_K=(0FKnvpbwgkhO6Nlu7qp0El`B3TdZph=W)t69PR^?KHQkwizDC;%JeqEk-8h@c~C1HspBEGC}ASp&uZ#F z9#ZaEacm7-Vw(J8I0gI3%i-dduWN%Nbv-P6izmU!`<)eqGYS$u59hBiPz!e_KspZ2 zl(qXY9I5k>7TGWv&Pcpw;0@(UG`Ajxvn{_<4!2^}@OZefAI?01BXvJ+ts0sF=Xi1$-Cir{GuapGqb-6+>^t1p2CqjAmUrpr@^IKJ#T@FI8&Gor_hs>4|n%y&kFQ+ z$glGm9H|Rpywh0@?#lb#+i+cRjAS^a^^Tk1VymAgz=bOab-Ly07q+WN`%vUI_WtasT*?T^l^E(A*OUGT!I3&8 z&SPHAg8R8Y+88d>dFn{GrLVib=~K=!ef2uHsEVg=;Yi(*^yxCHa1)K!vf*w`DIRp9 z+`Ls)U2r{xF)47IxPfjsQpco5eU2KO`Ri@UaC%Rf@8Nip@><~1E0(Q?`^J*#fg^QI z2Dt(1a9*kVCcWJY7I8yh-&*6#&-1fT4Z=IAgRe4kc_vpEN30#EGf;2cI|HZvECmi)6rgnyw6hd%Jl07C2L<%Fl45j*3s#E*2bXK=e4=%x@XVaE{L$7s0KM zklhL=JoeESI8s-I%G=R~GtV2p4=%o9S`3_4oQ64^LaKN=+|~N`{cxnt%8lcn*>J9U zGq=IjtvcinH*$;!7w+<&p8~f!P3$Y2hgX;(doBby@gLaXh%A zGwgieT5eg+gFD=|NepiD^T(NRXDb#C!jU>H$uA3Z;VP?_I>M=MX=1>wiS{0tLph~y z_qW4E#x45+N9wj5@4Kf5ch@(>6fVimdnVi>DZNg(OQUb>fYa1o`xB1TacTYaV-DPa zSRx0mL-xZ2IJ2U$O>lhWiY&O-AM$^}k-9FTlB#pz#13y%fulFA7zsCR-rMVN-E&T4 z!yPzsdI*lxd0|aeI4|g>@uLy4Pviw}Q@rtj9!I3&JsjO1!-&9fiGvn;wYsyWUF}(vWdt^j5 z-0{^Jd2sble+k3=tuBl~%X~OzX3aae_?IOOa4Qd(uZJ_tN!bavcIU(qaHLL5i?xU` zoNr^p6S$gU_H{U0Jz6Xr6>pRer|U!)fg^QehAm;3z=g*?zXLZmsOmhNLgRohT;R2^ zU2wf)EJWc*9hq4HZl-YCC-q&1i_o+_0w)=A*Aeb}tIuw@!g^0JI8s-}HYUvsZuiBZ zGPsL<&AZ`RMT$+}w)DB|fpbk;Ar43C%)}(0F^4O0l|BF`e8wjO?$Dl?Ia6P}o0^rmFMMU84SZW@CQ;&Nh z30ELAYY5i~(R04ma2+qr{oq(vw=ah4ANJ(49_8G;6c55ZW%WzJk-9ai*S6Wfy;<+< z3>TLoZw+^4=joSl-Eor&;L<-xkA@?4Y%K3r+QNyd`kBKum>-!3SHRlb2p5+wRR}ll z$SfH+Qr9NaC=m0lybmmmJU70o$;f8*WEr6Te@U9sB**}et zg(G!v?uvx+;ijJ0Ckgk=v2`R|P4?UEa3x(Ghv0;FZX5?k>f&^d-RTI&b~yg?73Ely z{eJK%SEO}yEgVy*sRZtr(_P^BytaFA;@%@0 z;l_M7cYv!iI(roEOlr?0I8s-~(`>ha+`*UZpB~!1;@?mcwo6w_OW&ajVlu zUCQ;|jy?%@=KUIZI8wLgXO_JuoNuvV0Nm9JZ830hvoxQ>MRx?Af?IlcCk>9&@fmk; zr59YBg`EqWOp<>9oc$G%2XOrZOHadz_??;oN9y{hmmT(oi|$^!0M6Xt(_%OomnT(l z@zVS=a7Smjgy_Mo9=^&NuDPP za=5Jk+XEI4z@iH8@gNsBY4z5V(-R zh6iwRix+-?lb7FV0Jr?=4}oj=wM`w4)ERoJ#0iD--Tk~8&PMJ@2VC>H2s+&7=Dtew z7jyCOY&cSP=mXO`3~uqfzSD4P+5;Nlw%J+G;KDwliA8 zJ9Y5$b+`pxG#R*Vk;j+eE-)Tz!jZZ}($?h>aIR~mbKt)Et-b&^Df#OVk8-}#?q7j( z>G`Y$N9q*GE$)mI^rs}33a6|lc@*yMlzSiGo-wai!F@X<#egGqi`4yPqv4EhsK>)O z_T=n=TYIYb8Qfxv@~d#UKFUluQpboBJue2%I#72RTyB}-HaI)0Rd?a;yO&kN>Con} z;7DB~<26CCa0a6+mcU()I=&W88Qox}P@o=(z(VB1;mG(>ErXGK?74G%bJ5vVkl+iK+xUBZgp>R82hu(sFk7ru$Zzl=ejrp=}Q9^>z0{&f?!gq7iZ6D#+B(?*}hmRM?G zZD{rvqY-qePt%cburo9=F|s!_<^RQW=+mqX?H%0BtZe5STDdzo+B=!J*xE~2TQ~?N z*UsF~;a_G^pJuX%Z(?I?Vl2Tov^O*PtK*{g-^Z4)uyNqqJ6fCA@c(tK(8ktC!`V>6 z&feD8(a6O9FWLx>Wai*bwRGp37+Omh8}bd^9jJc)W$l0WYUZF}t%2j(7-~5iYA`j7 z9gOWXtmqm}3{CnUJ@MU*>`e^$*g<@Yzi$$K8k0_EYS4KaOgf*z(`C?gnRE#UTT{NX zq5Z$i#2<645aJo+8}1WDV`wty3KEWXRpguildF?-^TD)CqOkZq4Tr^TTjA) znqmGwj8M?$?_UIiWoR(y8cZENovq7c=(3oaEUtuLOZ@*<4t!g?e}||+Q4{m$zL>fU zYBm{v-d;vlwnmojzlUsO>uAHLln$56)~55AI=a*}{(UEsrc{r=TT)GJvYydkL^v3L0dsz85|BvLc-Q-nXh*=)stYuNziDR(SN*> z{l3use#G6u(Av(5H28-{?Cedbi>LeVi={q|{>QPX2{!%b@Bco?pRd7qPB~bZ*-+PB z3md+PnTb8c|7b>?1{n~wqW|!HcWXljOTk1j6&ZhgDN-$r%uS3esg?cvc~dK*qeyK8 z27|}uC`y=w`ndl-b^P(~vk(&I%?ykRjG~TVLH*|B8yOWC7W&6wsO4a3QWprWmv6Ku zEfG&AF0M1UV$f)IkzxLko*{oCf+rl+f~`UA)W0>b^NbGo+X1y=qWq(@!h@(^&@C%8 z&_5tLI9~7kL_)?1{=$XOPVDR|Vc?ElV2l)ki`cscPM)^km^W%TKdQy)X`$l<328N@jzYR~pf+~{{8I6}? z?7a}r=xARbT<`zbkKQp}zO=y5=rF--{n3O*9qg~Z&{#o&deAH~EGC>f3yjCklbSQ% zXlkAX%GBQ0ntFu1Zd0$=5rXgYZK)&v>HERHv2;!9fYgInO2HBTyr_R)(Wvl1Z{NVs zz-X%J|J;&Ni;fxpW6l2yOUl({>rfs17nal*vmFu`>PvI5voJED1^GsX`UXb{t}UK4 zZ)!Cnso(z7wIU1s*K0$g8S?ptM&^IC(x*|k5hm1WQO{6I2WtzyxryM`kGkzLv~nO1 z;7;j}OZYzk>H=eIVZ;adM_^-UZ1Kk>?#~Z6*!`)Ge|q5Wef+5l3jDo~e*or&f4^JQ zr#ZMdP%mtP(-6E;+8O@7fu$~b)XfRbj=HrX-^5^lfBXMqqf(b1Z_i+g|Bvlb27|ix zPzU_4?NT;Fm-%1XrS_gafnn5zAu^Dfl;C)3Uj_$yMN(J5D4OTrFF^m%9l_Y16gY+FTxs#b!}ATD;k~pXG4aEH2d#i|T{H zW#DK!bdEOl3tfl9)u!4BnsJ#-29w9+@~B>^L;r5Z<#D+z9R^FA&CsF7#?WLkxYR(n zbS6B5gHD;+JUW-dX0Ui{Y8-T~pc#ijXRtWbYb~3@;Bh&WqOtzfb(l;XjKgJ9&FD)nt%H|&YL0XmZ0eLb+B^=6Ivh_hA=*r8ye#UA8kdeXbu=_%FsYkd z9yLHNhnfML0-c%!CXYwGgJfflcvLesPcU8`23?z}!_r}66?9lEEDD>;Wiohl4hzk6 zbad#rV`efa$)QexT2nehhgv@!h7OBb4=xkUSR5U^HPxmjiJE0eRCpg+a?IWzhKW`*e)!EdhW9j^d$7Hd2nj8+b&2P7wA2$ou&C64n139R&Y^~^O+Dr4TxxsL zIhac(1*rw4Q|Cl2G_@TtMm$B?)U%XYTL$(98e$XaP-CP{lubQ#emBHKu$k2Jh+2Jy z4o}dK&1F!VgQty2qw}ckiX(FItfDq7hk7FNcq}%K$kpL+c-qu{)235flG`F%6+@9!u6_jdPxZ+HK1-e>bVVbS4{)W-t<({H=+iN}BU4GmkDjSl_`Z@c*cfl;*Z-=7iDVxk1^WAMqI zhL>j)^_fa=U{o|M%un#fJBmhqpyD0rOTF9qcb}z%hXu#`hlNsahC+R4)XzO4spCZl zP(S{l{q2#!Q0l{kXA7AR>e|t2%+t>V$-%I^|JM_1YX#V_m$