mirror of
https://github.com/GoldenCheetah/GoldenCheetah.git
synced 2026-02-13 16:18:42 +00:00
Add Time and Percent in Zones I-II-III metrics for HR, Power and Pace
In total 18 new metrics are added and 6 new charts using them are included in charts.xml (existing users needs to remove their local copy in config/charts.xml to activate them, reset doesn't work since it retrieves the server copy which is v3.5 yet.) Fixes #2555 [publish binaries]
This commit is contained in:
@@ -32,9 +32,6 @@ class HrZoneTime : public RideMetric {
|
||||
int level;
|
||||
double seconds;
|
||||
|
||||
QList<int> lo;
|
||||
QList<int> hi;
|
||||
|
||||
public:
|
||||
|
||||
HrZoneTime() : level(0), seconds(0.0)
|
||||
@@ -741,7 +738,336 @@ class HrZonePTime10 : public RideMetric {
|
||||
MetricValidity validity() const { return Unknown; }
|
||||
RideMetric *clone() const { return new HrZonePTime10(*this); }
|
||||
};
|
||||
|
||||
// Time in Zones I, II and III
|
||||
class HrZoneTimeI : public RideMetric {
|
||||
Q_DECLARE_TR_FUNCTIONS(HrZoneTimeI)
|
||||
double seconds;
|
||||
|
||||
public:
|
||||
|
||||
HrZoneTimeI() : seconds(0.0)
|
||||
{
|
||||
setType(RideMetric::Total);
|
||||
setMetricUnits(tr("seconds"));
|
||||
setImperialUnits(tr("seconds"));
|
||||
setPrecision(0);
|
||||
setConversion(1.0);
|
||||
setSymbol("time_in_zone_HI");
|
||||
setInternalName("HI Time in Zone");
|
||||
}
|
||||
|
||||
void initialize ()
|
||||
{
|
||||
setName(tr("HI Time in Zone"));
|
||||
setMetricUnits(tr("seconds"));
|
||||
setImperialUnits(tr("seconds"));
|
||||
setDescription(tr("Time in Heart Rate Zone I - Below AeT"));
|
||||
}
|
||||
|
||||
bool isTime() const { return true; }
|
||||
|
||||
void compute(RideItem *item, Specification spec, const QHash<QString,RideMetric*> &) {
|
||||
|
||||
// no ride or no samples
|
||||
if (spec.isEmpty(item->ride())) {
|
||||
setValue(RideFile::NIL);
|
||||
setCount(0);
|
||||
return;
|
||||
}
|
||||
|
||||
double totalSecs = 0.0;
|
||||
seconds = 0;
|
||||
|
||||
// get zone ranges
|
||||
if (item->context->athlete->hrZones(item->isRun) && item->hrZoneRange >= 0 && item->ride()->areDataPresent()->hr) {
|
||||
|
||||
int AeT = item->context->athlete->hrZones(item->isRun)->getAeT(item->hrZoneRange);
|
||||
|
||||
// iterate and compute
|
||||
RideFileIterator it(item->ride(), spec);
|
||||
while (it.hasNext()) {
|
||||
struct RideFilePoint *point = it.next();
|
||||
totalSecs += item->ride()->recIntSecs();
|
||||
if (point->hr < AeT)
|
||||
seconds += item->ride()->recIntSecs();
|
||||
}
|
||||
}
|
||||
setValue(seconds);
|
||||
setCount(totalSecs);
|
||||
}
|
||||
|
||||
bool canAggregate() { return false; }
|
||||
void aggregateWith(const RideMetric &) {}
|
||||
MetricClass classification() const { return Undefined; }
|
||||
MetricValidity validity() const { return Unknown; }
|
||||
RideMetric *clone() const { return new HrZoneTimeI(*this); }
|
||||
};
|
||||
|
||||
class HrZoneTimeII : public RideMetric {
|
||||
Q_DECLARE_TR_FUNCTIONS(HrZoneTimeII)
|
||||
double seconds;
|
||||
|
||||
public:
|
||||
|
||||
HrZoneTimeII() : seconds(0.0)
|
||||
{
|
||||
setType(RideMetric::Total);
|
||||
setMetricUnits(tr("seconds"));
|
||||
setImperialUnits(tr("seconds"));
|
||||
setPrecision(0);
|
||||
setConversion(1.0);
|
||||
setSymbol("time_in_zone_HII");
|
||||
setInternalName("HII Time in Zone");
|
||||
}
|
||||
|
||||
void initialize ()
|
||||
{
|
||||
setName(tr("HII Time in Zone"));
|
||||
setMetricUnits(tr("seconds"));
|
||||
setImperialUnits(tr("seconds"));
|
||||
setDescription(tr("Time in Heart Rate Zone II - Between AeT and LT"));
|
||||
}
|
||||
|
||||
bool isTime() const { return true; }
|
||||
|
||||
void compute(RideItem *item, Specification spec, const QHash<QString,RideMetric*> &) {
|
||||
|
||||
// no ride or no samples
|
||||
if (spec.isEmpty(item->ride())) {
|
||||
setValue(RideFile::NIL);
|
||||
setCount(0);
|
||||
return;
|
||||
}
|
||||
|
||||
double totalSecs = 0.0;
|
||||
seconds = 0;
|
||||
|
||||
// get zone ranges
|
||||
if (item->context->athlete->hrZones(item->isRun) && item->hrZoneRange >= 0 && item->ride()->areDataPresent()->hr) {
|
||||
|
||||
int AeT = item->context->athlete->hrZones(item->isRun)->getAeT(item->hrZoneRange);
|
||||
int LT = item->context->athlete->hrZones(item->isRun)->getLT(item->hrZoneRange);
|
||||
|
||||
// iterate and compute
|
||||
RideFileIterator it(item->ride(), spec);
|
||||
while (it.hasNext()) {
|
||||
struct RideFilePoint *point = it.next();
|
||||
totalSecs += item->ride()->recIntSecs();
|
||||
if (point->hr >= AeT && point->hr < LT)
|
||||
seconds += item->ride()->recIntSecs();
|
||||
}
|
||||
}
|
||||
setValue(seconds);
|
||||
setCount(totalSecs);
|
||||
}
|
||||
|
||||
bool canAggregate() { return false; }
|
||||
void aggregateWith(const RideMetric &) {}
|
||||
MetricClass classification() const { return Undefined; }
|
||||
MetricValidity validity() const { return Unknown; }
|
||||
RideMetric *clone() const { return new HrZoneTimeII(*this); }
|
||||
};
|
||||
|
||||
class HrZoneTimeIII : public RideMetric {
|
||||
Q_DECLARE_TR_FUNCTIONS(HrZoneTimeIII)
|
||||
double seconds;
|
||||
|
||||
public:
|
||||
|
||||
HrZoneTimeIII() : seconds(0.0)
|
||||
{
|
||||
setType(RideMetric::Total);
|
||||
setMetricUnits(tr("seconds"));
|
||||
setImperialUnits(tr("seconds"));
|
||||
setPrecision(0);
|
||||
setConversion(1.0);
|
||||
setSymbol("time_in_zone_HIII");
|
||||
setInternalName("HIII Time in Zone");
|
||||
}
|
||||
|
||||
void initialize ()
|
||||
{
|
||||
setName(tr("HIII Time in Zone"));
|
||||
setMetricUnits(tr("seconds"));
|
||||
setImperialUnits(tr("seconds"));
|
||||
setDescription(tr("Time in Heart Rate Zone III - Above LT"));
|
||||
}
|
||||
|
||||
bool isTime() const { return true; }
|
||||
|
||||
void compute(RideItem *item, Specification spec, const QHash<QString,RideMetric*> &) {
|
||||
|
||||
// no ride or no samples
|
||||
if (spec.isEmpty(item->ride())) {
|
||||
setValue(RideFile::NIL);
|
||||
setCount(0);
|
||||
return;
|
||||
}
|
||||
|
||||
double totalSecs = 0.0;
|
||||
seconds = 0;
|
||||
|
||||
// get zone ranges
|
||||
if (item->context->athlete->hrZones(item->isRun) && item->hrZoneRange >= 0 && item->ride()->areDataPresent()->hr) {
|
||||
|
||||
int LT = item->context->athlete->hrZones(item->isRun)->getLT(item->hrZoneRange);
|
||||
|
||||
// iterate and compute
|
||||
RideFileIterator it(item->ride(), spec);
|
||||
while (it.hasNext()) {
|
||||
struct RideFilePoint *point = it.next();
|
||||
totalSecs += item->ride()->recIntSecs();
|
||||
if (point->hr >= LT)
|
||||
seconds += item->ride()->recIntSecs();
|
||||
}
|
||||
}
|
||||
setValue(seconds);
|
||||
setCount(totalSecs);
|
||||
}
|
||||
|
||||
bool canAggregate() { return false; }
|
||||
void aggregateWith(const RideMetric &) {}
|
||||
MetricClass classification() const { return Undefined; }
|
||||
MetricValidity validity() const { return Unknown; }
|
||||
RideMetric *clone() const { return new HrZoneTimeIII(*this); }
|
||||
};
|
||||
|
||||
// Now for Time In Zone as a Percentage of Ride Time
|
||||
class HrZonePTimeI : public RideMetric {
|
||||
|
||||
Q_DECLARE_TR_FUNCTIONS(HrZonePTimeI)
|
||||
|
||||
public:
|
||||
|
||||
HrZonePTimeI()
|
||||
{
|
||||
setSymbol("percent_in_zone_HI");
|
||||
setInternalName("HI Percent in Zone");
|
||||
setType(RideMetric::Average);
|
||||
setMetricUnits("%");
|
||||
setImperialUnits("%");
|
||||
setPrecision(0);
|
||||
setConversion(1.0);
|
||||
}
|
||||
|
||||
void initialize ()
|
||||
{
|
||||
setName(tr("HI Percent in Zone"));
|
||||
setDescription(tr("Percent of Time in Heart Rate Zone I - Below AeT"));
|
||||
}
|
||||
|
||||
void compute(RideItem *, Specification, const QHash<QString,RideMetric*> &deps) {
|
||||
|
||||
assert(deps.contains("time_in_zone_HI"));
|
||||
|
||||
// compute
|
||||
double time = deps.value("time_in_zone_HI")->count();
|
||||
double inzone = deps.value("time_in_zone_HI")->value(true);
|
||||
|
||||
if (time && inzone) setValue((inzone / time) * 100.00);
|
||||
else setValue(0);
|
||||
setCount(time);
|
||||
}
|
||||
|
||||
bool aggregateZero() const { return true; }
|
||||
bool canAggregate() { return false; }
|
||||
void aggregateWith(const RideMetric &) {}
|
||||
MetricClass classification() const { return Undefined; }
|
||||
MetricValidity validity() const { return Unknown; }
|
||||
RideMetric *clone() const { return new HrZonePTimeI(*this); }
|
||||
};
|
||||
|
||||
class HrZonePTimeII : public RideMetric {
|
||||
|
||||
Q_DECLARE_TR_FUNCTIONS(HrZonePTimeII)
|
||||
|
||||
public:
|
||||
|
||||
HrZonePTimeII()
|
||||
{
|
||||
setSymbol("percent_in_zone_HII");
|
||||
setInternalName("HII Percent in Zone");
|
||||
setType(RideMetric::Average);
|
||||
setMetricUnits("%");
|
||||
setImperialUnits("%");
|
||||
setPrecision(0);
|
||||
setConversion(1.0);
|
||||
}
|
||||
|
||||
void initialize ()
|
||||
{
|
||||
setName(tr("HII Percent in Zone"));
|
||||
setDescription(tr("Percent of Time in Heart Rate Zone II - Between AeT and LT"));
|
||||
}
|
||||
|
||||
void compute(RideItem *, Specification, const QHash<QString,RideMetric*> &deps) {
|
||||
|
||||
assert(deps.contains("time_in_zone_HII"));
|
||||
|
||||
// compute
|
||||
double time = deps.value("time_in_zone_HII")->count();
|
||||
double inzone = deps.value("time_in_zone_HII")->value(true);
|
||||
|
||||
if (time && inzone) setValue((inzone / time) * 100.00);
|
||||
else setValue(0);
|
||||
setCount(time);
|
||||
}
|
||||
|
||||
bool aggregateZero() const { return true; }
|
||||
bool canAggregate() { return false; }
|
||||
void aggregateWith(const RideMetric &) {}
|
||||
MetricClass classification() const { return Undefined; }
|
||||
MetricValidity validity() const { return Unknown; }
|
||||
RideMetric *clone() const { return new HrZonePTimeII(*this); }
|
||||
};
|
||||
|
||||
class HrZonePTimeIII : public RideMetric {
|
||||
|
||||
Q_DECLARE_TR_FUNCTIONS(HrZonePTimeIII)
|
||||
|
||||
public:
|
||||
|
||||
HrZonePTimeIII()
|
||||
{
|
||||
setSymbol("percent_in_zone_HIII");
|
||||
setInternalName("HIII Percent in Zone");
|
||||
setType(RideMetric::Average);
|
||||
setMetricUnits("%");
|
||||
setImperialUnits("%");
|
||||
setPrecision(0);
|
||||
setConversion(1.0);
|
||||
}
|
||||
|
||||
void initialize ()
|
||||
{
|
||||
setName(tr("HIII Percent in Zone"));
|
||||
setDescription(tr("Percent of Time in Heart Rate Zone III - Above LT"));
|
||||
}
|
||||
|
||||
void compute(RideItem *, Specification, const QHash<QString,RideMetric*> &deps) {
|
||||
|
||||
assert(deps.contains("time_in_zone_HIII"));
|
||||
|
||||
// compute
|
||||
double time = deps.value("time_in_zone_HIII")->count();
|
||||
double inzone = deps.value("time_in_zone_HIII")->value(true);
|
||||
|
||||
if (time && inzone) setValue((inzone / time) * 100.00);
|
||||
else setValue(0);
|
||||
setCount(time);
|
||||
}
|
||||
|
||||
bool aggregateZero() const { return true; }
|
||||
bool canAggregate() { return false; }
|
||||
void aggregateWith(const RideMetric &) {}
|
||||
MetricClass classification() const { return Undefined; }
|
||||
MetricValidity validity() const { return Unknown; }
|
||||
RideMetric *clone() const { return new HrZonePTimeIII(*this); }
|
||||
};
|
||||
|
||||
static bool addAllHrZones() {
|
||||
|
||||
RideMetricFactory::instance().addMetric(HrZoneTime1());
|
||||
RideMetricFactory::instance().addMetric(HrZoneTime2());
|
||||
RideMetricFactory::instance().addMetric(HrZoneTime3());
|
||||
@@ -752,6 +1078,7 @@ static bool addAllHrZones() {
|
||||
RideMetricFactory::instance().addMetric(HrZoneTime8());
|
||||
RideMetricFactory::instance().addMetric(HrZoneTime9());
|
||||
RideMetricFactory::instance().addMetric(HrZoneTime10());
|
||||
|
||||
QVector<QString> deps;
|
||||
deps.append("time_in_zone_H1");
|
||||
RideMetricFactory::instance().addMetric(HrZonePTime1(), &deps);
|
||||
@@ -782,6 +1109,21 @@ static bool addAllHrZones() {
|
||||
deps.clear();
|
||||
deps.append("time_in_zone_H10");
|
||||
RideMetricFactory::instance().addMetric(HrZonePTime10(), &deps);
|
||||
|
||||
RideMetricFactory::instance().addMetric(HrZoneTimeI());
|
||||
RideMetricFactory::instance().addMetric(HrZoneTimeII());
|
||||
RideMetricFactory::instance().addMetric(HrZoneTimeIII());
|
||||
|
||||
deps.clear();
|
||||
deps.append("time_in_zone_HI");
|
||||
RideMetricFactory::instance().addMetric(HrZonePTimeI(), &deps);
|
||||
deps.clear();
|
||||
deps.append("time_in_zone_HII");
|
||||
RideMetricFactory::instance().addMetric(HrZonePTimeII(), &deps);
|
||||
deps.clear();
|
||||
deps.append("time_in_zone_HIII");
|
||||
RideMetricFactory::instance().addMetric(HrZonePTimeIII(), &deps);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -33,9 +33,6 @@ class PaceZoneTime : public RideMetric {
|
||||
int level;
|
||||
double seconds;
|
||||
|
||||
QList<int> lo;
|
||||
QList<int> hi;
|
||||
|
||||
public:
|
||||
|
||||
PaceZoneTime() : level(0), seconds(0.0)
|
||||
@@ -53,9 +50,9 @@ class PaceZoneTime : public RideMetric {
|
||||
void compute(RideItem *item, Specification spec, const QHash<QString,RideMetric*> &) {
|
||||
|
||||
// no ride or no samples
|
||||
if (spec.isEmpty(item->ride()) &&
|
||||
if (spec.isEmpty(item->ride()) ||
|
||||
// pace only makes sense for running or swimming
|
||||
!item->isRun && !item->isSwim) {
|
||||
(!item->isRun && !item->isSwim)) {
|
||||
setValue(RideFile::NIL);
|
||||
setCount(0);
|
||||
return;
|
||||
@@ -752,7 +749,347 @@ class PaceZonePTime10 : public RideMetric {
|
||||
RideMetric *clone() const { return new PaceZonePTime10(*this); }
|
||||
};
|
||||
|
||||
// Time in Zones I, II and III
|
||||
class PaceZoneTimeI : public RideMetric {
|
||||
Q_DECLARE_TR_FUNCTIONS(PaceZoneTimeI)
|
||||
double seconds;
|
||||
|
||||
public:
|
||||
|
||||
PaceZoneTimeI() : seconds(0.0)
|
||||
{
|
||||
setType(RideMetric::Total);
|
||||
setMetricUnits(tr("seconds"));
|
||||
setImperialUnits(tr("seconds"));
|
||||
setPrecision(0);
|
||||
setConversion(1.0);
|
||||
setSymbol("time_in_zone_PI");
|
||||
setInternalName("PI Time in Pace Zone");
|
||||
}
|
||||
|
||||
void initialize ()
|
||||
{
|
||||
setName(tr("PI Time in Pace Zone"));
|
||||
setMetricUnits(tr("seconds"));
|
||||
setImperialUnits(tr("seconds"));
|
||||
setDescription(tr("Time in Pace Zone I - Below AeT"));
|
||||
}
|
||||
|
||||
bool isTime() const { return true; }
|
||||
|
||||
void compute(RideItem *item, Specification spec, const QHash<QString,RideMetric*> &)
|
||||
{
|
||||
// no ride or no samples
|
||||
if (spec.isEmpty(item->ride()) ||
|
||||
// pace only makes sense for running or swimming
|
||||
(!item->isRun && !item->isSwim)) {
|
||||
setValue(RideFile::NIL);
|
||||
setCount(0);
|
||||
return;
|
||||
}
|
||||
|
||||
double totalSecs = 0.0;
|
||||
seconds = 0;
|
||||
|
||||
const PaceZones *zone = item->context->athlete->paceZones(item->isSwim);
|
||||
int zoneRange = item->paceZoneRange;
|
||||
|
||||
// get zone ranges
|
||||
if (zone && zoneRange >= 0) {
|
||||
|
||||
double AeT = zone->getAeT(zoneRange);
|
||||
|
||||
// iterate and compute
|
||||
RideFileIterator it(item->ride(), spec);
|
||||
while (it.hasNext()) {
|
||||
struct RideFilePoint *point = it.next();
|
||||
totalSecs += item->ride()->recIntSecs();
|
||||
if (point->kph < AeT)
|
||||
seconds += item->ride()->recIntSecs();
|
||||
}
|
||||
}
|
||||
setValue(seconds);
|
||||
setCount(totalSecs);
|
||||
}
|
||||
|
||||
bool canAggregate() { return false; }
|
||||
void aggregateWith(const RideMetric &) {}
|
||||
MetricClass classification() const { return Undefined; }
|
||||
MetricValidity validity() const { return Unknown; }
|
||||
RideMetric *clone() const { return new PaceZoneTimeI(*this); }
|
||||
};
|
||||
|
||||
class PaceZoneTimeII : public RideMetric {
|
||||
Q_DECLARE_TR_FUNCTIONS(PaceZoneTimeII)
|
||||
double seconds;
|
||||
|
||||
public:
|
||||
|
||||
PaceZoneTimeII() : seconds(0.0)
|
||||
{
|
||||
setType(RideMetric::Total);
|
||||
setMetricUnits(tr("seconds"));
|
||||
setImperialUnits(tr("seconds"));
|
||||
setPrecision(0);
|
||||
setConversion(1.0);
|
||||
setSymbol("time_in_zone_PII");
|
||||
setInternalName("PII Time in Pace Zone");
|
||||
}
|
||||
|
||||
void initialize ()
|
||||
{
|
||||
setName(tr("PII Time in Pace Zone"));
|
||||
setMetricUnits(tr("seconds"));
|
||||
setImperialUnits(tr("seconds"));
|
||||
setDescription(tr("Time in Pace Zone II - Between AeT and CV"));
|
||||
}
|
||||
|
||||
bool isTime() const { return true; }
|
||||
|
||||
void compute(RideItem *item, Specification spec, const QHash<QString,RideMetric*> &)
|
||||
{
|
||||
// no ride or no samples
|
||||
if (spec.isEmpty(item->ride()) ||
|
||||
// pace only makes sense for running or swimming
|
||||
(!item->isRun && !item->isSwim)) {
|
||||
setValue(RideFile::NIL);
|
||||
setCount(0);
|
||||
return;
|
||||
}
|
||||
|
||||
double totalSecs = 0.0;
|
||||
seconds = 0;
|
||||
|
||||
const PaceZones *zone = item->context->athlete->paceZones(item->isSwim);
|
||||
int zoneRange = item->paceZoneRange;
|
||||
|
||||
// get zone ranges
|
||||
if (zone && zoneRange >= 0) {
|
||||
|
||||
double AeT = zone->getAeT(zoneRange);
|
||||
double CV = zone->getCV(zoneRange);
|
||||
|
||||
// iterate and compute
|
||||
RideFileIterator it(item->ride(), spec);
|
||||
while (it.hasNext()) {
|
||||
struct RideFilePoint *point = it.next();
|
||||
totalSecs += item->ride()->recIntSecs();
|
||||
if (point->kph >= AeT && point->kph < CV)
|
||||
seconds += item->ride()->recIntSecs();
|
||||
}
|
||||
}
|
||||
setValue(seconds);
|
||||
setCount(totalSecs);
|
||||
}
|
||||
|
||||
bool canAggregate() { return false; }
|
||||
void aggregateWith(const RideMetric &) {}
|
||||
MetricClass classification() const { return Undefined; }
|
||||
MetricValidity validity() const { return Unknown; }
|
||||
RideMetric *clone() const { return new PaceZoneTimeII(*this); }
|
||||
};
|
||||
|
||||
class PaceZoneTimeIII : public RideMetric {
|
||||
Q_DECLARE_TR_FUNCTIONS(PaceZoneTimeIII)
|
||||
double seconds;
|
||||
|
||||
public:
|
||||
|
||||
PaceZoneTimeIII() : seconds(0.0)
|
||||
{
|
||||
setType(RideMetric::Total);
|
||||
setMetricUnits(tr("seconds"));
|
||||
setImperialUnits(tr("seconds"));
|
||||
setPrecision(0);
|
||||
setConversion(1.0);
|
||||
setSymbol("time_in_zone_PIII");
|
||||
setInternalName("PIII Time in Pace Zone");
|
||||
}
|
||||
|
||||
void initialize ()
|
||||
{
|
||||
setName(tr("PIII Time in Pace Zone"));
|
||||
setMetricUnits(tr("seconds"));
|
||||
setImperialUnits(tr("seconds"));
|
||||
setDescription(tr("Time in Pace Zone III - Above CV"));
|
||||
}
|
||||
|
||||
bool isTime() const { return true; }
|
||||
|
||||
void compute(RideItem *item, Specification spec, const QHash<QString,RideMetric*> &)
|
||||
{
|
||||
// no ride or no samples
|
||||
if (spec.isEmpty(item->ride()) ||
|
||||
// pace only makes sense for running or swimming
|
||||
(!item->isRun && !item->isSwim)) {
|
||||
setValue(RideFile::NIL);
|
||||
setCount(0);
|
||||
return;
|
||||
}
|
||||
|
||||
double totalSecs = 0.0;
|
||||
seconds = 0;
|
||||
|
||||
const PaceZones *zone = item->context->athlete->paceZones(item->isSwim);
|
||||
int zoneRange = item->paceZoneRange;
|
||||
|
||||
// get zone ranges
|
||||
if (zone && zoneRange >= 0) {
|
||||
|
||||
double CV = zone->getCV(zoneRange);
|
||||
|
||||
// iterate and compute
|
||||
RideFileIterator it(item->ride(), spec);
|
||||
while (it.hasNext()) {
|
||||
struct RideFilePoint *point = it.next();
|
||||
totalSecs += item->ride()->recIntSecs();
|
||||
if (point->kph >= CV)
|
||||
seconds += item->ride()->recIntSecs();
|
||||
}
|
||||
}
|
||||
setValue(seconds);
|
||||
setCount(totalSecs);
|
||||
}
|
||||
|
||||
bool canAggregate() { return false; }
|
||||
void aggregateWith(const RideMetric &) {}
|
||||
MetricClass classification() const { return Undefined; }
|
||||
MetricValidity validity() const { return Unknown; }
|
||||
RideMetric *clone() const { return new PaceZoneTimeIII(*this); }
|
||||
};
|
||||
|
||||
// Now for Time In Zone as a Percentage of Ride Time
|
||||
class PaceZonePTimeI : public RideMetric {
|
||||
Q_DECLARE_TR_FUNCTIONS(PaceZonePTimeI)
|
||||
|
||||
public:
|
||||
|
||||
PaceZonePTimeI()
|
||||
{
|
||||
setSymbol("percent_in_zone_PI");
|
||||
setInternalName("PI Percent in Pace Zone");
|
||||
setType(RideMetric::Average);
|
||||
setMetricUnits("%");
|
||||
setImperialUnits("%");
|
||||
setPrecision(0);
|
||||
setConversion(1.0);
|
||||
}
|
||||
|
||||
void initialize ()
|
||||
{
|
||||
setName(tr("PI Percent in Pace Zone"));
|
||||
setDescription(tr("Percent of Time in Pace Zone I - Below AeT"));
|
||||
}
|
||||
|
||||
void compute(RideItem *, Specification, const QHash<QString,RideMetric*> &deps)
|
||||
{
|
||||
assert(deps.contains("time_in_zone_PI"));
|
||||
|
||||
// compute
|
||||
double time = deps.value("time_in_zone_PI")->count();
|
||||
double inzone = deps.value("time_in_zone_PI")->value(true);
|
||||
|
||||
if (time && inzone) setValue((inzone / time) * 100.00);
|
||||
else setValue(0);
|
||||
setCount(time);
|
||||
}
|
||||
|
||||
bool aggregateZero() const { return true; }
|
||||
bool canAggregate() { return false; }
|
||||
void aggregateWith(const RideMetric &) {}
|
||||
MetricClass classification() const { return Undefined; }
|
||||
MetricValidity validity() const { return Unknown; }
|
||||
RideMetric *clone() const { return new PaceZonePTimeI(*this); }
|
||||
};
|
||||
|
||||
class PaceZonePTimeII : public RideMetric {
|
||||
Q_DECLARE_TR_FUNCTIONS(PaceZonePTimeII)
|
||||
|
||||
public:
|
||||
|
||||
PaceZonePTimeII()
|
||||
{
|
||||
setSymbol("percent_in_zone_PII");
|
||||
setInternalName("PII Percent in Pace Zone");
|
||||
setType(RideMetric::Average);
|
||||
setMetricUnits("%");
|
||||
setImperialUnits("%");
|
||||
setPrecision(0);
|
||||
setConversion(1.0);
|
||||
}
|
||||
|
||||
void initialize ()
|
||||
{
|
||||
setName(tr("PII Percent in Pace Zone"));
|
||||
setDescription(tr("Percent of Time in Pace Zone II - Between AeT and CV"));
|
||||
}
|
||||
|
||||
void compute(RideItem *, Specification, const QHash<QString,RideMetric*> &deps)
|
||||
{
|
||||
assert(deps.contains("time_in_zone_PII"));
|
||||
|
||||
// compute
|
||||
double time = deps.value("time_in_zone_PII")->count();
|
||||
double inzone = deps.value("time_in_zone_PII")->value(true);
|
||||
|
||||
if (time && inzone) setValue((inzone / time) * 100.00);
|
||||
else setValue(0);
|
||||
setCount(time);
|
||||
}
|
||||
|
||||
bool aggregateZero() const { return true; }
|
||||
bool canAggregate() { return false; }
|
||||
void aggregateWith(const RideMetric &) {}
|
||||
MetricClass classification() const { return Undefined; }
|
||||
MetricValidity validity() const { return Unknown; }
|
||||
RideMetric *clone() const { return new PaceZonePTimeII(*this); }
|
||||
};
|
||||
|
||||
class PaceZonePTimeIII : public RideMetric {
|
||||
Q_DECLARE_TR_FUNCTIONS(PaceZonePTimeIII)
|
||||
|
||||
public:
|
||||
|
||||
PaceZonePTimeIII()
|
||||
{
|
||||
setSymbol("percent_in_zone_PIII");
|
||||
setInternalName("PIII Percent in Pace Zone");
|
||||
setType(RideMetric::Average);
|
||||
setMetricUnits("%");
|
||||
setImperialUnits("%");
|
||||
setPrecision(0);
|
||||
setConversion(1.0);
|
||||
}
|
||||
|
||||
void initialize ()
|
||||
{
|
||||
setName(tr("PIII Percent in Pace Zone"));
|
||||
setDescription(tr("Percent of Time in Pace Zone III - Above CV"));
|
||||
}
|
||||
|
||||
void compute(RideItem *, Specification, const QHash<QString,RideMetric*> &deps)
|
||||
{
|
||||
assert(deps.contains("time_in_zone_PIII"));
|
||||
|
||||
// compute
|
||||
double time = deps.value("time_in_zone_PIII")->count();
|
||||
double inzone = deps.value("time_in_zone_PIII")->value(true);
|
||||
|
||||
if (time && inzone) setValue((inzone / time) * 100.00);
|
||||
else setValue(0);
|
||||
setCount(time);
|
||||
}
|
||||
|
||||
bool aggregateZero() const { return true; }
|
||||
bool canAggregate() { return false; }
|
||||
void aggregateWith(const RideMetric &) {}
|
||||
MetricClass classification() const { return Undefined; }
|
||||
MetricValidity validity() const { return Unknown; }
|
||||
RideMetric *clone() const { return new PaceZonePTimeIII(*this); }
|
||||
};
|
||||
|
||||
static bool addAllZones() {
|
||||
|
||||
RideMetricFactory::instance().addMetric(PaceZoneTime1());
|
||||
RideMetricFactory::instance().addMetric(PaceZoneTime2());
|
||||
RideMetricFactory::instance().addMetric(PaceZoneTime3());
|
||||
@@ -763,6 +1100,7 @@ static bool addAllZones() {
|
||||
RideMetricFactory::instance().addMetric(PaceZoneTime8());
|
||||
RideMetricFactory::instance().addMetric(PaceZoneTime9());
|
||||
RideMetricFactory::instance().addMetric(PaceZoneTime10());
|
||||
|
||||
QVector<QString> deps;
|
||||
deps.append("time_in_zone_P1");
|
||||
RideMetricFactory::instance().addMetric(PaceZonePTime1(), &deps);
|
||||
@@ -793,6 +1131,21 @@ static bool addAllZones() {
|
||||
deps.clear();
|
||||
deps.append("time_in_zone_P10");
|
||||
RideMetricFactory::instance().addMetric(PaceZonePTime10(), &deps);
|
||||
|
||||
RideMetricFactory::instance().addMetric(PaceZoneTimeI());
|
||||
RideMetricFactory::instance().addMetric(PaceZoneTimeII());
|
||||
RideMetricFactory::instance().addMetric(PaceZoneTimeIII());
|
||||
|
||||
deps.clear();
|
||||
deps.append("time_in_zone_PI");
|
||||
RideMetricFactory::instance().addMetric(PaceZonePTimeI(), &deps);
|
||||
deps.clear();
|
||||
deps.append("time_in_zone_PII");
|
||||
RideMetricFactory::instance().addMetric(PaceZonePTimeII(), &deps);
|
||||
deps.clear();
|
||||
deps.append("time_in_zone_PIII");
|
||||
RideMetricFactory::instance().addMetric(PaceZonePTimeIII(), &deps);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -163,8 +163,9 @@
|
||||
// 153 8 Dec 2019 Mark Liversedge Regenerate after v3.5 RC2/RC2X re-issue
|
||||
// 154 18 Apr 2020 Mark Liversedge Added PeakPowerIndex (only for full rides)
|
||||
// 155 27 Jun 2020 Mark Liversedge Added Ride Date as days since 1900,01,01
|
||||
// 156 18 Mar 2021 Ale Martinez Added Time and % in Zones I, II and III
|
||||
|
||||
int DBSchemaVersion = 155;
|
||||
int DBSchemaVersion = 156;
|
||||
|
||||
RideMetricFactory *RideMetricFactory::_instance;
|
||||
QVector<QString> RideMetricFactory::noDeps;
|
||||
|
||||
@@ -32,9 +32,6 @@ class ZoneTime : public RideMetric {
|
||||
int level;
|
||||
double seconds;
|
||||
|
||||
QList<int> lo;
|
||||
QList<int> hi;
|
||||
|
||||
public:
|
||||
|
||||
ZoneTime() : level(0), seconds(0.0)
|
||||
@@ -723,7 +720,311 @@ class ZonePTime10 : public RideMetric {
|
||||
RideMetric *clone() const { return new ZonePTime10(*this); }
|
||||
};
|
||||
|
||||
// Time in Zones I, II and III
|
||||
class ZoneTimeI : public RideMetric {
|
||||
Q_DECLARE_TR_FUNCTIONS(ZoneTimeI)
|
||||
double seconds;
|
||||
|
||||
public:
|
||||
|
||||
ZoneTimeI() : seconds(0.0)
|
||||
{
|
||||
setType(RideMetric::Total);
|
||||
setMetricUnits(tr("seconds"));
|
||||
setImperialUnits(tr("seconds"));
|
||||
setPrecision(0);
|
||||
setConversion(1.0);
|
||||
setSymbol("time_in_zone_LI");
|
||||
setInternalName("LI Time in Zone");
|
||||
}
|
||||
|
||||
void initialize ()
|
||||
{
|
||||
setName(tr("LI Time in Zone"));
|
||||
setMetricUnits(tr("seconds"));
|
||||
setImperialUnits(tr("seconds"));
|
||||
setDescription(tr("Time in Power Zone I - Below AeT"));
|
||||
}
|
||||
|
||||
bool isTime() const { return true; }
|
||||
|
||||
void compute(RideItem *item, Specification spec, const QHash<QString,RideMetric*> &) {
|
||||
|
||||
// no ride or no samples
|
||||
if (spec.isEmpty(item->ride()) ||
|
||||
item->context->athlete->zones(item->isRun) == NULL || item->zoneRange < 0 ||
|
||||
!item->ride()->areDataPresent()->watts) {
|
||||
setValue(RideFile::NIL);
|
||||
setCount(0);
|
||||
return;
|
||||
}
|
||||
|
||||
int AeT = item->context->athlete->zones(item->isRun)->getAeT(item->zoneRange);
|
||||
double totalSecs = 0.0;
|
||||
seconds = 0;
|
||||
|
||||
// iterate and compute
|
||||
RideFileIterator it(item->ride(), spec);
|
||||
while (it.hasNext()) {
|
||||
struct RideFilePoint *point = it.next();
|
||||
totalSecs += item->ride()->recIntSecs();
|
||||
if (point->watts < AeT)
|
||||
seconds += item->ride()->recIntSecs();
|
||||
}
|
||||
setValue(seconds);
|
||||
setCount(totalSecs);
|
||||
}
|
||||
|
||||
MetricClass classification() const { return Undefined; }
|
||||
MetricValidity validity() const { return Unknown; }
|
||||
RideMetric *clone() const { return new ZoneTimeI(*this); }
|
||||
};
|
||||
|
||||
class ZoneTimeII : public RideMetric {
|
||||
Q_DECLARE_TR_FUNCTIONS(ZoneTimeII)
|
||||
double seconds;
|
||||
|
||||
public:
|
||||
|
||||
ZoneTimeII() : seconds(0.0)
|
||||
{
|
||||
setType(RideMetric::Total);
|
||||
setMetricUnits(tr("seconds"));
|
||||
setImperialUnits(tr("seconds"));
|
||||
setPrecision(0);
|
||||
setConversion(1.0);
|
||||
setSymbol("time_in_zone_LII");
|
||||
setInternalName("LII Time in Zone");
|
||||
}
|
||||
|
||||
void initialize ()
|
||||
{
|
||||
setName(tr("LII Time in Zone"));
|
||||
setMetricUnits(tr("seconds"));
|
||||
setImperialUnits(tr("seconds"));
|
||||
setDescription(tr("Time in Power Zone II - Between AeT and CP"));
|
||||
}
|
||||
|
||||
bool isTime() const { return true; }
|
||||
|
||||
void compute(RideItem *item, Specification spec, const QHash<QString,RideMetric*> &) {
|
||||
|
||||
// no ride or no samples
|
||||
if (spec.isEmpty(item->ride()) ||
|
||||
item->context->athlete->zones(item->isRun) == NULL || item->zoneRange < 0 ||
|
||||
!item->ride()->areDataPresent()->watts) {
|
||||
setValue(RideFile::NIL);
|
||||
setCount(0);
|
||||
return;
|
||||
}
|
||||
|
||||
int AeT = item->context->athlete->zones(item->isRun)->getAeT(item->zoneRange);
|
||||
int CP = item->context->athlete->zones(item->isRun)->getCP(item->zoneRange);
|
||||
double totalSecs = 0.0;
|
||||
seconds = 0;
|
||||
|
||||
// iterate and compute
|
||||
RideFileIterator it(item->ride(), spec);
|
||||
while (it.hasNext()) {
|
||||
struct RideFilePoint *point = it.next();
|
||||
totalSecs += item->ride()->recIntSecs();
|
||||
if (point->watts >= AeT && point->watts < CP)
|
||||
seconds += item->ride()->recIntSecs();
|
||||
}
|
||||
setValue(seconds);
|
||||
setCount(totalSecs);
|
||||
}
|
||||
|
||||
MetricClass classification() const { return Undefined; }
|
||||
MetricValidity validity() const { return Unknown; }
|
||||
RideMetric *clone() const { return new ZoneTimeII(*this); }
|
||||
};
|
||||
|
||||
class ZoneTimeIII : public RideMetric {
|
||||
Q_DECLARE_TR_FUNCTIONS(ZoneTimeIII)
|
||||
double seconds;
|
||||
|
||||
public:
|
||||
|
||||
ZoneTimeIII() : seconds(0.0)
|
||||
{
|
||||
setType(RideMetric::Total);
|
||||
setMetricUnits(tr("seconds"));
|
||||
setImperialUnits(tr("seconds"));
|
||||
setPrecision(0);
|
||||
setConversion(1.0);
|
||||
setSymbol("time_in_zone_LIII");
|
||||
setInternalName("LIII Time in Zone");
|
||||
}
|
||||
|
||||
void initialize ()
|
||||
{
|
||||
setName(tr("LIII Time in Zone"));
|
||||
setMetricUnits(tr("seconds"));
|
||||
setImperialUnits(tr("seconds"));
|
||||
setDescription(tr("Time in Power Zone III - Above CP"));
|
||||
}
|
||||
|
||||
bool isTime() const { return true; }
|
||||
|
||||
void compute(RideItem *item, Specification spec, const QHash<QString,RideMetric*> &) {
|
||||
|
||||
// no ride or no samples
|
||||
if (spec.isEmpty(item->ride()) ||
|
||||
item->context->athlete->zones(item->isRun) == NULL || item->zoneRange < 0 ||
|
||||
!item->ride()->areDataPresent()->watts) {
|
||||
setValue(RideFile::NIL);
|
||||
setCount(0);
|
||||
return;
|
||||
}
|
||||
|
||||
int CP = item->context->athlete->zones(item->isRun)->getCP(item->zoneRange);
|
||||
double totalSecs = 0.0;
|
||||
seconds = 0;
|
||||
|
||||
// iterate and compute
|
||||
RideFileIterator it(item->ride(), spec);
|
||||
while (it.hasNext()) {
|
||||
struct RideFilePoint *point = it.next();
|
||||
totalSecs += item->ride()->recIntSecs();
|
||||
if (point->watts >= CP)
|
||||
seconds += item->ride()->recIntSecs();
|
||||
}
|
||||
setValue(seconds);
|
||||
setCount(totalSecs);
|
||||
}
|
||||
|
||||
MetricClass classification() const { return Undefined; }
|
||||
MetricValidity validity() const { return Unknown; }
|
||||
RideMetric *clone() const { return new ZoneTimeIII(*this); }
|
||||
};
|
||||
|
||||
// Now for Time In Zones as a Percentage of Ride Time
|
||||
class ZonePTimeI : public RideMetric {
|
||||
Q_DECLARE_TR_FUNCTIONS(ZonePTimeI)
|
||||
|
||||
public:
|
||||
|
||||
ZonePTimeI()
|
||||
{
|
||||
setSymbol("percent_in_zone_LI");
|
||||
setInternalName("LI Percent in Zone");
|
||||
setType(RideMetric::Average);
|
||||
setMetricUnits("%");
|
||||
setImperialUnits("%");
|
||||
setPrecision(0);
|
||||
setConversion(1.0);
|
||||
}
|
||||
|
||||
void initialize ()
|
||||
{
|
||||
setName(tr("LI Percent in Zone"));
|
||||
setDescription(tr("Percent of Time in Power Zone I - Below AeT"));
|
||||
}
|
||||
|
||||
void compute(RideItem *, Specification, const QHash<QString,RideMetric*> &deps)
|
||||
{
|
||||
assert(deps.contains("time_in_zone_LI"));
|
||||
|
||||
// compute
|
||||
double time = deps.value("time_in_zone_LI")->count();
|
||||
double inzone = deps.value("time_in_zone_LI")->value(true);
|
||||
|
||||
if (time && inzone) setValue((inzone / time) * 100.00);
|
||||
else setValue(0);
|
||||
setCount(time);
|
||||
}
|
||||
|
||||
bool aggregateZero() const { return true; }
|
||||
MetricClass classification() const { return Undefined; }
|
||||
MetricValidity validity() const { return Unknown; }
|
||||
RideMetric *clone() const { return new ZonePTimeI(*this); }
|
||||
};
|
||||
|
||||
class ZonePTimeII : public RideMetric {
|
||||
Q_DECLARE_TR_FUNCTIONS(ZonePTimeII)
|
||||
|
||||
public:
|
||||
|
||||
ZonePTimeII()
|
||||
{
|
||||
setSymbol("percent_in_zone_LII");
|
||||
setInternalName("LII Percent in Zone");
|
||||
setType(RideMetric::Average);
|
||||
setMetricUnits("%");
|
||||
setImperialUnits("%");
|
||||
setPrecision(0);
|
||||
setConversion(1.0);
|
||||
}
|
||||
|
||||
void initialize ()
|
||||
{
|
||||
setName(tr("LII Percent in Zone"));
|
||||
setDescription(tr("Percent of Time in Power Zone II - Between AeT and CP"));
|
||||
}
|
||||
|
||||
void compute(RideItem *, Specification, const QHash<QString,RideMetric*> &deps)
|
||||
{
|
||||
assert(deps.contains("time_in_zone_LII"));
|
||||
|
||||
// compute
|
||||
double time = deps.value("time_in_zone_LII")->count();
|
||||
double inzone = deps.value("time_in_zone_LII")->value(true);
|
||||
|
||||
if (time && inzone) setValue((inzone / time) * 100.00);
|
||||
else setValue(0);
|
||||
setCount(time);
|
||||
}
|
||||
|
||||
bool aggregateZero() const { return true; }
|
||||
MetricClass classification() const { return Undefined; }
|
||||
MetricValidity validity() const { return Unknown; }
|
||||
RideMetric *clone() const { return new ZonePTimeII(*this); }
|
||||
};
|
||||
|
||||
class ZonePTimeIII : public RideMetric {
|
||||
Q_DECLARE_TR_FUNCTIONS(ZonePTimeIII)
|
||||
|
||||
public:
|
||||
|
||||
ZonePTimeIII()
|
||||
{
|
||||
setSymbol("percent_in_zone_LIII");
|
||||
setInternalName("LIII Percent in Zone");
|
||||
setType(RideMetric::Average);
|
||||
setMetricUnits("%");
|
||||
setImperialUnits("%");
|
||||
setPrecision(0);
|
||||
setConversion(1.0);
|
||||
}
|
||||
|
||||
void initialize ()
|
||||
{
|
||||
setName(tr("LIII Percent in Zone"));
|
||||
setDescription(tr("Percent of Time in Power Zone III - Above CP"));
|
||||
}
|
||||
|
||||
void compute(RideItem *, Specification, const QHash<QString,RideMetric*> &deps)
|
||||
{
|
||||
assert(deps.contains("time_in_zone_LIII"));
|
||||
|
||||
// compute
|
||||
double time = deps.value("time_in_zone_LIII")->count();
|
||||
double inzone = deps.value("time_in_zone_LIII")->value(true);
|
||||
|
||||
if (time && inzone) setValue((inzone / time) * 100.00);
|
||||
else setValue(0);
|
||||
setCount(time);
|
||||
}
|
||||
|
||||
bool aggregateZero() const { return true; }
|
||||
MetricClass classification() const { return Undefined; }
|
||||
MetricValidity validity() const { return Unknown; }
|
||||
RideMetric *clone() const { return new ZonePTimeIII(*this); }
|
||||
};
|
||||
|
||||
static bool addAllZones() {
|
||||
|
||||
RideMetricFactory::instance().addMetric(ZoneTime1());
|
||||
RideMetricFactory::instance().addMetric(ZoneTime2());
|
||||
RideMetricFactory::instance().addMetric(ZoneTime3());
|
||||
@@ -734,6 +1035,7 @@ static bool addAllZones() {
|
||||
RideMetricFactory::instance().addMetric(ZoneTime8());
|
||||
RideMetricFactory::instance().addMetric(ZoneTime9());
|
||||
RideMetricFactory::instance().addMetric(ZoneTime10());
|
||||
|
||||
QVector<QString> deps;
|
||||
deps.append("time_in_zone_L1");
|
||||
RideMetricFactory::instance().addMetric(ZonePTime1(), &deps);
|
||||
@@ -764,6 +1066,21 @@ static bool addAllZones() {
|
||||
deps.clear();
|
||||
deps.append("time_in_zone_L10");
|
||||
RideMetricFactory::instance().addMetric(ZonePTime10(), &deps);
|
||||
|
||||
RideMetricFactory::instance().addMetric(ZoneTimeI());
|
||||
RideMetricFactory::instance().addMetric(ZoneTimeII());
|
||||
RideMetricFactory::instance().addMetric(ZoneTimeIII());
|
||||
|
||||
deps.clear();
|
||||
deps.append("time_in_zone_LI");
|
||||
RideMetricFactory::instance().addMetric(ZonePTimeI(), &deps);
|
||||
deps.clear();
|
||||
deps.append("time_in_zone_LII");
|
||||
RideMetricFactory::instance().addMetric(ZonePTimeII(), &deps);
|
||||
deps.clear();
|
||||
deps.append("time_in_zone_LIII");
|
||||
RideMetricFactory::instance().addMetric(ZonePTimeIII(), &deps);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -9,12 +9,12 @@
|
||||
<chart name="PMC (TriScore)">"AAAAHABQAE0AQwAgACgAVAByAGkAUwBjAG8AcgBlACkAAAAeANoAbAB0AGkAbQBvAHMAIAAzACAAbQBlAHMAZQBzACV9EwAAAAD/ACV+iQAAAAD/AAAAAQAB////////////////AAAAFQAAAAQAAAAHAAAAABAAdAByAGkAcwBjAG8AcgBlAAAAEABUAHIAaQBTAGMAbwByAGUAAAAGAEEAVABMAAAAEABUAHIAaQBTAGMAbwByAGUAAAAAAAEAAAAAAAAAAAAAAAABFWyo+GHfHk4VbKj4AAAAARVsqPj//////////wH/////AAD//wAAAAAAAD/wAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAAAAPnAAAOEAAAABgAdAByAGkAcwBjAG8AcgBlAF8AbAB0AHMAAAAKAAAAAAAAAAAAAAAADAAyACAAUABhAHIAbQAAAAAAAAPnAAAOEAABAAAAAP//////////AAAAAf////8AAAAAAAAAAAEBAAAAABYAcABvAHcAZQByAF8AaQBuAGQAZQB4AAAABwAAAAAQAHQAcgBpAHMAYwBvAHIAZQAAABAAVAByAGkAUwBjAG8AcgBlAAAABgBDAFQATAAAABAAVAByAGkAUwBjAG8AcgBlAAAAAAABAAAAAAAAAAAAAAAAARVsqPhh3x5OFWyo+AAAAAEVbKj4//////////8B//9VVQAA//8AAAAAAAA/8AAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAAAD5wAADhAAAAAYAHQAcgBpAHMAYwBvAHIAZQBfAHMAdABzAAAACgAAAAAAAAAAAAAAAAwAMgAgAFAAYQByAG0AAAAAAAAD5wAADhAAAQAAAAH//////////wAAAAH/////AAAAAAAAAAABAQAAAAAWAHAAbwB3AGUAcgBfAGkAbgBkAGUAeAAAAAcAAAAAEAB0AHIAaQBzAGMAbwByAGUAAAAQAFQAcgBpAFMAYwBvAHIAZQAAAAYAVABTAEIAAAAQAFQAcgBpAFMAYwBvAHIAZQAAAAAAAAAAAAAAAAAAAAAAAAEVbKj4Yd8eThVsqPgAAAABFWyo+P//////////Af///////39/AAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAAAAAAAAA4QAAAAFgB0AHIAaQBzAGMAbwByAGUAXwBzAGIAAAAKAAAAAAAAAAABAAAADAAyACAAUABhAHIAbQAAAAAAAAPnAAAOEAABAAAAAv//////////AAAAAf////8AAAAAAAAAAAEBAAAAABYAcABvAHcAZQByAF8AaQBuAGQAZQB4AAAABwAAAAAQAHQAcgBpAHMAYwBvAHIAZQAAABAAVAByAGkAUwBjAG8AcgBlAAAABABSAFIAAAAQAFQAcgBpAFMAYwBvAHIAZQAAAAAAAwAAAAAAAAAAAAAAAAEVbKj4Yd8eThVsqPgAAAABFWyo+P//////////Af//VVX//wAAAAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAQAAA+cAAA4QAAAAFgB0AHIAaQBzAGMAbwByAGUAXwByAHIAAAAKAAAAAAAAAAAAAAAADAAyACAAUABhAHIAbQAAAAAAAAAAAAAOEAABAAAAA///////////AAAAAf////8AAAAAAAAAAAEBAAAAABYAcABvAHcAZQByAF8AaQBuAGQAZQB4AAAAAAAD"</chart>
|
||||
<chart name="PMC (TRIMP)">"AAAAFgBQAE0AQwAgACgAVABSAEkATQBQACkAAAAWAFAATQBDACAAKABUAFIASQBNAFAAKQAlfRMAAAAA/wAlfrMAAAAA/wAAAAEAAP///////////////wAAABUAAAADAAAAAgAAAAASAHQAcgBpAG0AcABfAHMAdABzAAAALgBUAFIASQBNAFAAIABTAGgAbwByAHQAIABUAGUAcgBtACAAUwB0AHIAZQBzAHMAAAAuAFQAUgBJAE0AUAAgAFMAaABvAHIAdAAgAFQAZQByAG0AIABTAHQAcgBlAHMAcwAAAAwAUwB0AHIAZQBzAHMAAAAAAAEAAAAAAAAAAAAAAAABAAAAAQAAAAEFrZAAAAB//1+/qXD//////////wH/////xMT//wAAAAAAAD/wAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAAAAACAAAOEP////8AAAAK/////wAAAAAAAAAADAAyACAAUABhAHIAbQAAAAAAAAPnAAAOEAABAAAAAP//////////AAAAAf////8AAAAAAAAAAAEBAAAAABYAcABvAHcAZQByAF8AaQBuAGQAZQB4AAAAAgAAAAASAHQAcgBpAG0AcABfAGwAdABzAAAALABUAFIASQBNAFAAIABMAG8AbgBnACAAVABlAHIAbQAgAFMAdAByAGUAcwBzAAAALABUAFIASQBNAFAAIABMAG8AbgBnACAAVABlAHIAbQAgAFMAdAByAGUAcwBzAAAADABTAHQAcgBlAHMAcwAAAAAAAQAAAAAAAAAAAAAAAAEAAH//AAB//1+/0sAAAH//X7/OMP//////////Af//qqr/////AAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAAAAAIAAA4Q/////wAAAAoAAAAAAAAAAAAAAAAMADIAIABQAGEAcgBtAAAAAAAAA+cAAA4QAAEAAAAA//////////8AAAAB/////wAAAAAAAAAAAQEAAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAACAAAAABAAdAByAGkAbQBwAF8AcwBiAAAAKABUAFIASQBNAFAAIABTAHQAcgBlAHMAcwAgAEIAYQBsAGEAbgBjAGUAAAAoAFQAUgBJAE0AUAAgAFMAdAByAGUAcwBzACAAQgBhAGwAYQBuAGMAZQAAAAwAUwB0AHIAZQBzAHMAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////wH///////8AAAAAAAAAAD/wAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAAAAAAAAAOEP////8AAAAKAAAAAAAAAAAAAAAADAAyACAAUABhAHIAbQAAAAAAAAPnAAAOEAABAAAAAAAAABwAUwB0AHIAZQBzAHMAIABCAGEAbABhAG4AYwBl/////wAAAAH/////AAAAAAAAAAABAQAAAAAWAHAAbwB3AGUAcgBfAGkAbgBkAGUAeAAAAAAAAg=="</chart>
|
||||
<chart name="PMC (Session RPE)">"AAAAIgBQAE0AQwAgACgAUwBlAHMAcwBpAG8AbgAgAFIAUABFACkAAAAiAFAATQBDACAAKABTAGUAcwBzAGkAbwBuACAAUgBQAEUAKQAlfjYAAAAA/wAlfpEAAAAA/wAAAAEAAf///////////////wAAABUAAAAEAAAABwAAAAAWAHMAZQBzAHMAaQBvAG4AXwByAHAAZQAAABYAUwBlAHMAcwBpAG8AbgAgAFIAUABFAAAABgBBAFQATAAAABYAUwBlAHMAcwBpAG8AbgAgAFIAUABFAAAAAAABAAAAAAAAAAAAAAAAAQpN9wBh3x5OCk33AAAAAAEKTfcA//////////8B/////wAA//8AAAAAAAA/8AAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAAAD5wAADhAAAAAeAHMAZQBzAHMAaQBvAG4AXwByAHAAZQBfAGwAdABzAAAACgAAAAAAAAAAAAAAAAwAMgAgAFAAYQByAG0AAAAAAAAD5wAADhAAAQAAAAAAAAAA/////wAAAAH/////AAAAAAAAAAABAQAAAAAWAHAAbwB3AGUAcgBfAGkAbgBkAGUAeAAAAAcAAAAAFgBzAGUAcwBzAGkAbwBuAF8AcgBwAGUAAAAWAFMAZQBzAHMAaQBvAG4AIABSAFAARQAAAAYAQwBUAEwAAAAWAFMAZQBzAHMAaQBvAG4AIABSAFAARQAAAAAAAQAAAAAAAAAAAAAAAAEKTfcAYd8eTgpN9wAAAAABCk33AP//////////Af//VVUAAP//AAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAAAA+cAAA4QAAAAHgBzAGUAcwBzAGkAbwBuAF8AcgBwAGUAXwBzAHQAcwAAAAoAAAAAAAAAAAAAAAAMADIAIABQAGEAcgBtAAAAAAAAA+cAAA4QAAEAAAABAAAAAP////8AAAAB/////wAAAAAAAAAAAQEAAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAAHAAAAABYAcwBlAHMAcwBpAG8AbgBfAHIAcABlAAAAFgBTAGUAcwBzAGkAbwBuACAAUgBQAEUAAAAGAFQAUwBCAAAAFgBTAGUAcwBzAGkAbwBuACAAUgBQAEUAAAAAAAEAAAAAAAAAAAAAAAABCk33AGHfHk4KTfcAAAAAAQpN9wD//////////wH///////9/fwAAAAAAAD/wAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAAAAAAAAAOEAAAABwAcwBlAHMAcwBpAG8AbgBfAHIAcABlAF8AcwBiAAAACgAAAAAAAAAAAQAAAAwAMgAgAFAAYQByAG0AAAAAAAAD5wAADhAAAQAAAAIAAAAA/////wAAAAH/////AAAAAAAAAAABAQAAAAAWAHAAbwB3AGUAcgBfAGkAbgBkAGUAeAAAAAcAAAAAFgBzAGUAcwBzAGkAbwBuAF8AcgBwAGUAAAAWAFMAZQBzAHMAaQBvAG4AIABSAFAARQAAAAQAUgBSAAAAFgBTAGUAcwBzAGkAbwBuACAAUgBQAEUAAAAAAAMAAAAAAAAAAAAAAAABCk33AGHfHk4KTfcAAAAAAQpN9wD//////////wH//6qq//9/fwAAAAAAAD/wAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAEAAAPnAAAOEAAAABwAcwBlAHMAcwBpAG8AbgBfAHIAcABlAF8AcgByAAAACgAAAAAAAAAAAwAAAAwAMgAgAFAAYQByAG0AAAAAAAAAAAAADhAAAQAAAAMAAAAA/////wAAAAH/////AAAAAAAAAAABAQAAAAAWAHAAbwB3AGUAcgBfAGkAbgBkAGUAeAAAAAAAAw=="</chart>
|
||||
<chart name="CP History">"AAAAFABDAFAAIABIAGkAcwB0AG8AcgB5AAAACAAyADAAMAA5ACV0mAAAAAD/ACV2QQAAAAD/AAAAAQAB////////////////AAAAFQAAAAQAAAAGAAAAABAAQwBQAF8AKABFAHgAdAApAAAAAAAAABAAQwBQACAAKABFAHgAdAApAAAACgBXAGEAdAB0AHMAAAAAAAEAAAAAAAAAAAAAAAABAAAAAAAAf//0gZauAAB/////qLD//////////wH/////9fUAAAAAAAAAAD/wAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAAAAPnAAAOEP////8AAAAKAAAAAAAAAAABAAAABgBFAHgAdAAAAAEAAAPnAAAOEAABAAAAAP//////////AAAAAf////8AAAAAAAAAAAEBAAAAABYAcABvAHcAZQByAF8AaQBuAGQAZQB4AAAAAQAAAAAUAGMAcABfAHMAZQB0AHQAaQBuAGcAAAAcAEMAcgBpAHQAaQBjAGEAbAAgAFAAbwB3AGUAcgAAABwAQwByAGkAdABpAGMAYQBsACAAUABvAHcAZQByAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAEAAH/dAAAAAAAAATgAAAAABLvJMP//////////Af////9MzQAAAAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAAAAAAAAA4Q/////wAAAAoAAAAAAAAAAAAAAAAMADIAIABQAGEAcgBtAAAAAAAAAAEAAA4QAAEAAAAAAAAAAP////8AAAAB/////wAAAAAAAAAAAQEAAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAAGAAAAABAAVwAnAF8AKABFAHgAdAApAAAAAAAAABAAVwAnACAAKABFAHgAdAApAAAADABKAG8AdQBsAGUAcwAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAALlbUAAAAAAAAAAGP//////////Af//AAD/////AAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAAAAAAAAA4Q/////wAAAAoAAAAAAAAAAAAAAAAGAEUAeAB0AAAAAAAAAAEAAA4QAAEAAAAA//////////8AAAAB/////wAAAAAAAAAAAQEAAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAAGAAAAABYAcAAtAE0AYQB4AF8AKABFAHgAdAApAAAAAAAAABYAcAAtAE0AYQB4ACAAKABFAHgAdAApAAAACgBXAGEAdAB0AHMAAAAAAAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABj//////////wH//1VV//8AAAAAAAAAAD/wAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAAAAHAAAAOEP////8AAAAKAAAAAAAAAAABAAAABgBFAHgAdAAAAAMAAAABAAAOEAABAAAAAP//////////AAAAAf////8AAAAAAAAAAAEBAAAAABYAcABvAHcAZQByAF8AaQBuAGQAZQB4AAAAAAAD"</chart>
|
||||
<chart name="CP History">"AAAAFABDAFAAIABIAGkAcwB0AG8AcgB5AAAAFABDAFAAIABIAGkAcwB0AG8AcgB5ACWCCAAAAAD/ACWDdAAAAAD/AAAAAQAB////////////////AAAAFQAAAAQAAAAGAAAAABAAQwBQAF8AKABlAHgAdAApAAAAAAAAABAAQwBQACAAKABlAHgAdAApAAAACgBXAGEAdAB0AHMAAAAAAAEAAAAAAAAAAAAAAAABAAAAAAAAf//0gZauAAB/////qLD//////////wH/////9fUAAAAAAAAAAD/wAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAAAAPnAAAOEP////8AAAAKAAAAAAAAAAABAAAABgBlAHgAdAAAAAEAAAPnAAAOEAABAAAAAP////8AAAEEACMAIAB0AHkAcABlACAAaQBuACAAYQAgAGYAbwByAG0AdQBsAGEAIAB0AG8AIAB1AHMAZQAKACMAIABmAG8AcgAgAGUALgBnAC4AIABCAGkAawBlAFMAdAByAGUAcwBzACAALwAgAEQAdQByAGEAdABpAG8AbgAKACMAIABhAHMAIAB5AG8AdQAgAHQAeQBwAGUAIAB0AGgAZQAgAGEAdgBhAGkAbABhAGIAbABlACAAbQBlAHQAcgBpAGMAcwAKACMAIAB3AGkAbABsACAAYgBlACAAbwBmAGYAZQByAGUAZAAgAGIAeQAgAGEAdQB0AG8AYwBvAG0AcABsAGUAdABlAAoAAAABAAAADgBzAGUAYQByAGMAaAA6AAAAAAAAAAABAQAAAAAWAHAAbwB3AGUAcgBfAGkAbgBkAGUAeAAAAAEAAAAAFABjAHAAXwBzAGUAdAB0AGkAbgBnAAAAHABDAHIAaQB0AGkAYwBhAGwAIABQAG8AdwBlAHIAAAAcAEMAcgBpAHQAaQBjAGEAbAAgAFAAbwB3AGUAcgAAAAAAAAAAAAEAAAAAAAAAAAAAAAABAAB/3QAAAAAAAAE4AAAAAAS7yTD//////////wH/////TM0AAAAAAAAAAD/wAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAAAAAAAAAOEP////8AAAAKAAAAAAAAAAAAAAAADAAyACAAUABhAHIAbQAAAAAAAAABAAAOEAABAAAAAAAAAAD/////AAAAAf////8AAAAAAAAAAAEBAAAAABYAcABvAHcAZQByAF8AaQBuAGQAZQB4AAAABgAAAAAQAFcAJwBfACgAZQB4AHQAKQAAAAAAAAAQAFcAJwAgACgAZQB4AHQAKQAAAAwASgBvAHUAbABlAHMAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAC5W1AAAAAAAAAABj//////////wH//wAA/////wAAAAAAAD/wAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAAAAAAAAAOEP////8AAAAKAAAAAAAAAAAAAAAABgBlAHgAdAAAAAAAAAABAAAOEAABAAAAAP////8AAAEEACMAIAB0AHkAcABlACAAaQBuACAAYQAgAGYAbwByAG0AdQBsAGEAIAB0AG8AIAB1AHMAZQAKACMAIABmAG8AcgAgAGUALgBnAC4AIABCAGkAawBlAFMAdAByAGUAcwBzACAALwAgAEQAdQByAGEAdABpAG8AbgAKACMAIABhAHMAIAB5AG8AdQAgAHQAeQBwAGUAIAB0AGgAZQAgAGEAdgBhAGkAbABhAGIAbABlACAAbQBlAHQAcgBpAGMAcwAKACMAIAB3AGkAbABsACAAYgBlACAAbwBmAGYAZQByAGUAZAAgAGIAeQAgAGEAdQB0AG8AYwBvAG0AcABsAGUAdABlAAoAAAABAAAADgBzAGUAYQByAGMAaAA6AAAAAAAAAAABAQAAAAAWAHAAbwB3AGUAcgBfAGkAbgBkAGUAeAAAAAYAAAAAFgBwAC0ATQBhAHgAXwAoAGUAeAB0ACkAAAAAAAAAFgBwAC0ATQBhAHgAIAAoAGUAeAB0ACkAAAAKAFcAYQB0AHQAcwAAAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAGP//////////Af//VVX//wAAAAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAAAAcAAAA4Q/////wAAAAoAAAAAAAAAAAEAAAAGAGUAeAB0AAAAAwAAAAEAAA4QAAEAAAAA/////wAAAQQAIwAgAHQAeQBwAGUAIABpAG4AIABhACAAZgBvAHIAbQB1AGwAYQAgAHQAbwAgAHUAcwBlAAoAIwAgAGYAbwByACAAZQAuAGcALgAgAEIAaQBrAGUAUwB0AHIAZQBzAHMAIAAvACAARAB1AHIAYQB0AGkAbwBuAAoAIwAgAGEAcwAgAHkAbwB1ACAAdAB5AHAAZQAgAHQAaABlACAAYQB2AGEAaQBsAGEAYgBsAGUAIABtAGUAdAByAGkAYwBzAAoAIwAgAHcAaQBsAGwAIABiAGUAIABvAGYAZgBlAHIAZQBkACAAYgB5ACAAYQB1AHQAbwBjAG8AbQBwAGwAZQB0AGUACgAAAAEAAAAOAHMAZQBhAHIAYwBoADoAAAAAAAAAAAEBAAAAABYAcABvAHcAZQByAF8AaQBuAGQAZQB4AAAAAAAD"</chart>
|
||||
<chart name="Athlete Weight">"AAAAHABBAHQAaABsAGUAdABlACAAVwBlAGkAZwBoAHQAAAAIADIAMAAxADAAJXaeAAAAAP8AJXgLAAAAAP8AAAABAAH///////////////8AAAAVAAAAAwAAAAEAAAAAJgBhAHQAaABsAGUAdABlAF8AZgBhAHQAXwBwAGUAcgBjAGUAbgB0AAAALgBBAHQAaABsAGUAdABlACAAQgBvAGQAeQBmAGEAdAAgAFAAZQByAGMAZQBuAHQAAAAuAEEAdABoAGwAZQB0AGUAIABCAG8AZAB5AGYAYQB0ACAAUABlAHIAYwBlAG4AdAAAAAIAJQAAAAAAAAAAAAAAAAAAAAAAAAEAAH/vAAAAAAAAAUAAAAAABFsU4AAAAAL/////Af///////39/AAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAAAA+cAAA4Q/////wAAAAoAAAADAAAAAAAAAAAMADIAIABQAGEAcgBtAAAAAAAAAAAAAA4QAAEAAAAAAAAAAgAl/////wAAAAH/////AAAAAAAAAAABAQAAAAAWAHAAbwB3AGUAcgBfAGkAbgBkAGUAeAAAAAEAAAAAHABhAHQAaABsAGUAdABlAF8AdwBlAGkAZwBoAHQAAAAcAEEAdABoAGwAZQB0AGUAIABXAGUAaQBnAGgAdAAAABwAQQB0AGgAbABlAHQAZQAgAFcAZQBpAGcAaAB0AAAABABrAGcAAAAAAAEAAAAAAAAAAAAAAAABAAB/ZwAAAAAAAAFAAAAAAAiZ7KAAAAAC/////wH//6qqqqr//wAAAAAAAD/wAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAAAAAAAAAOEP////8AAAAKAAAAAwAAAAABAAAADAAyACAAUABhAHIAbQAAAAAAAAAAAAAOEAEBAAAAAAAAAAQAawBn/////wAAAAH/////AAAAAAAAAAABAQAAAAAWAHAAbwB3AGUAcgBfAGkAbgBkAGUAeAAAAAEAAAAAGABhAHQAaABsAGUAdABlAF8AbABlAGEAbgAAACYAQQB0AGgAbABlAHQAZQAgAEwAZQBhAG4AIABXAGUAaQBnAGgAdAAAACYAQQB0AGgAbABlAHQAZQAgAEwAZQBhAG4AIABXAGUAaQBnAGgAdAAAAAQAawBnAAAAAAAAAAAAAAAAAAAAAAAAAQAAf/8AAAAAAAAAAAAAAAAAAAAQAAAAAv////8B//9VVf//AAAAAAAAAAA/8AAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAAAD5wAADhD/////AAAACgAAAAMAAAAAAAAAAAwAMgAgAFAAYQByAG0AAAAAAAAAAAAADhAAAQAAAAAAAAAEAGsAZ/////8AAAAB/////wAAAAAAAAAAAQEAAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAAAAAA="</chart>
|
||||
<chart name="Vo2max Estimation">"AAAAIgBWAG8AMgBtAGEAeAAgAEUAcwB0AGkAbQBhAHQAaQBvAG4AAAAIADIAMAAwADkAJXSlAAAAAP8AJXZBAAAAAP8AAAABAAH///////////////8AAAAVAAAAAgAAAAYAAAAAKgBWAG8AMgBNAGEAeABfAEUAcwB0AGkAbQBhAHQAZQBfACgARQB4AHQAKQAAAAAAAAAqAFYAbwAyAE0AYQB4ACAARQBzAHQAaQBtAGEAdABlACAAKABFAHgAdAApAAAAEgBtAGwALwBtAGkAbgAvAGsAZwAAAAAAAQAAAAAAAAAAAAAAAAEAAAAAAAB//aV4hgAAAAAACNrdEP//////////Af//VVWqqv//AAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAAAA+cAAA4Q/////wAAAAoAAAAAAAAAAAAAAAAGAEUAeAB0AAAABgAAABQAAAA8AQEAAAAA//////////8AAAAB/////wAAAAAAAAAAAQEAAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAABAAAAAAwAdgBvADIAbQBhAHgAAAAgAEUAcwB0AGkAbQBhAHQAZQBkACAAVgBPADIATQBBAFgAAAAgAEUAcwB0AGkAbQBhAHQAZQBkACAAVgBPADIATQBBAFgAAAASAG0AbAAvAG0AaQBuAC8AawBnAAAAAAABAAAAAAAAAAAAAAAAAQAAf2UAAAAAAAABQAAAAAAI4BnQAAAAAgAAAAAB//9VVf////8AAAAAAAA/8AAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAAAD5wAADhD/////AAAACgAAAAAAAAAAAAAAAAwAMgAgAFAAYQByAG0AAAAAAAAAAAAADhAAAQAAAAAAAAASAG0AbAAvAG0AaQBuAC8AawBn/////wAAAAH/////AAAAAAAAAAABAQAAAAAWAHAAbwB3AGUAcgBfAGkAbgBkAGUAeAAAAAAAAw=="</chart>
|
||||
<chart name="Vo2max Estimation">"AAAAIgBWAG8AMgBtAGEAeAAgAEUAcwB0AGkAbQBhAHQAaQBvAG4AAAAiAFYAbwAyAG0AYQB4ACAARQBzAHQAaQBtAGEAdABpAG8AbgAlgggAAAAA/wAlg3QAAAAA/wAAAAEAAf///////////////wAAABUAAAACAAAABgAAAAAqAFYAbwAyAE0AYQB4AF8ARQBzAHQAaQBtAGEAdABlAF8AKABlAHgAdAApAAAAAAAAACoAVgBvADIATQBhAHgAIABFAHMAdABpAG0AYQB0AGUAIAAoAGUAeAB0ACkAAAASAG0AbAAvAG0AaQBuAC8AawBnAAAAAAABAAAAAAAAAAAAAAAAAQAAAAAAAH/9pXiGAAAAAAAI2t0Q//////////8B//9VVaqq//8AAAAAAAA/8AAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAAAD5wAADhD/////AAAACgAAAAAAAAAAAAAAAAYAZQB4AHQAAAAGAAAAFAAAADwBAQAAAAD/////AAABBAAjACAAdAB5AHAAZQAgAGkAbgAgAGEAIABmAG8AcgBtAHUAbABhACAAdABvACAAdQBzAGUACgAjACAAZgBvAHIAIABlAC4AZwAuACAAQgBpAGsAZQBTAHQAcgBlAHMAcwAgAC8AIABEAHUAcgBhAHQAaQBvAG4ACgAjACAAYQBzACAAeQBvAHUAIAB0AHkAcABlACAAdABoAGUAIABhAHYAYQBpAGwAYQBiAGwAZQAgAG0AZQB0AHIAaQBjAHMACgAjACAAdwBpAGwAbAAgAGIAZQAgAG8AZgBmAGUAcgBlAGQAIABiAHkAIABhAHUAdABvAGMAbwBtAHAAbABlAHQAZQAKAAAAAQAAAA4AcwBlAGEAcgBjAGgAOgAAAAAAAAAAAQEAAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAABAAAAAAwAdgBvADIAbQBhAHgAAAAgAEUAcwB0AGkAbQBhAHQAZQBkACAAVgBPADIATQBBAFgAAAAgAEUAcwB0AGkAbQBhAHQAZQBkACAAVgBPADIATQBBAFgAAAASAG0AbAAvAG0AaQBuAC8AawBnAAAAAAABAAAAAAAAAAAAAAAAAQAAf2UAAAAAAAABQAAAAAAI4BnQAAAAAgAAAAAB//9VVf////8AAAAAAAA/8AAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAAAD5wAADhD/////AAAACgAAAAAAAAAAAAAAAAwAMgAgAFAAYQByAG0AAAAAAAAAAAAADhAAAQAAAAAAAAASAG0AbAAvAG0AaQBuAC8AawBn/////wAAAAH/////AAAAAAAAAAABAQAAAAAWAHAAbwB3AGUAcgBfAGkAbgBkAGUAeAAAAAAAAw=="</chart>
|
||||
<chart name="KPI Tracker">"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"</chart>
|
||||
<chart name="Sustained Time In Zone">"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"</chart>
|
||||
<chart name="CP Analysis">"AAAAFgBDAFAAIABBAG4AYQBsAHkAcwBpAHMAAAAWAEMAUAAgAEEAbgBhAGwAeQBzAGkAcwAlfjgAAAAA/wAlfpMCX2wA/wAAAAEAAP///////////////wAAABUAAAAEAAAABgAAAAAWAEMAUABfACgAMgBfAFAAYQByAG0AKQAAAAAAAAAWAEMAUAAgACgAMgAgAFAAYQByAG0AKQAAAAoAVwBhAHQAdABzAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAH/95Hp3YAAAAAAJPWLg//////////8B////////AAAAAAAAAAA/8AAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAAAD5wAADhD/////AAAACgAAAAAAAAAAAAAAAAwAMgAgAFAAYQByAG0AAAABAAAAAAAADhAAAQAAAAD//////////wAAAAH/////AAAAAAAAAAABAQAAAAAWAHAAbwB3AGUAcgBfAGkAbgBkAGUAeAAAAAEAAAAAFABjAHAAXwBzAGUAdAB0AGkAbgBnAAAAHABDAHIAaQB0AGkAYwBhAGwAIABQAG8AdwBlAHIAAAAeAEMAUAAgACgAQwBvAG4AZgBpAGcAdQByAGUAZAApAAAACgBXAGEAdAB0AHMAAAAAAAEAAAAAAAAAAAAAAAABAAB/3gAAAAAAAAEoAAAAAAmwJ2D//////////wH/////AAAAAAAAAAAAAD/wAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAAAAAwAAAOEP////8AAAAKAAAAAAAAAAAAAAAADAAyACAAUABhAHIAbQAAAAAAAAAAAAAOEAABAAAAAAAAAAD/////AAAAAf////8AAAAAAAAAAAEBAAAAABYAcABvAHcAZQByAF8AaQBuAGQAZQB4AAAABQD/////AAAAAAAAABIAMwAwAG0AIABQAG8AdwBlAHIAAAAKAFcAYQB0AHQAcwAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAvbypAAAAAAAAAAQAAAAAIAAAAAAf////9VVf//AAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAAAAB4AAAA8AAAAKABQAGUAYQBrAF8AMwAwAF8AbQBpAG4AdQB0AGUAXwBQAG8AdwBlAHIAAAAKAAAAAAAAAAAAAAAADAAyACAAUABhAHIAbQAAAAAAAAAAAAAOEAABAAAAAP//////////AAAAAf////8AAAAAAAAAAAEBAAAAABYAcABvAHcAZQByAF8AaQBuAGQAZQB4AAAABQD/////AAAAAAAAABIANAA1AG0AIABQAG8AdwBlAHIAAAAKAFcAYQB0AHQAcwAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAvbypAAAAAAAAAAQAAAAAIAAAAAAf////+qqv//AAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAAAAC0AAAA8AAAAKABQAGUAYQBrAF8ANAA1AF8AbQBpAG4AdQB0AGUAXwBQAG8AdwBlAHIAAAAKAAAAAAAAAAAAAAAADAAyACAAUABhAHIAbQAAAAAAAAAAAAAOEAABAAAAAP//////////AAAAAf////8AAAAAAAAAAAEBAAAAABYAcABvAHcAZQByAF8AaQBuAGQAZQB4AAAAAAAD"</chart>
|
||||
<chart name="CP Analysis">"AAAAFgBDAFAAIABBAG4AYQBsAHkAcwBpAHMAAAAWAEMAUAAgAEEAbgBhAGwAeQBzAGkAcwAlgggAAAAA/wAlg3QAAAAA/wAAAAEAAP///////////////wAAABUAAAAEAAAABgAAAAAQAEMAUABfACgAYwBwADIAKQAAAAAAAAAQAEMAUAAgACgAYwBwADIAKQAAAAoAVwBhAHQAdABzAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAH/95Hp3YAAAAAAJPWLg//////////8B////////AAAAAAAAAAA/8AAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAAAD5wAADhD/////AAAACgAAAAAAAAAAAAAAAAYAYwBwADIAAAABAAAAAAAADhAAAQAAAAD/////AAABBAAjACAAdAB5AHAAZQAgAGkAbgAgAGEAIABmAG8AcgBtAHUAbABhACAAdABvACAAdQBzAGUACgAjACAAZgBvAHIAIABlAC4AZwAuACAAQgBpAGsAZQBTAHQAcgBlAHMAcwAgAC8AIABEAHUAcgBhAHQAaQBvAG4ACgAjACAAYQBzACAAeQBvAHUAIAB0AHkAcABlACAAdABoAGUAIABhAHYAYQBpAGwAYQBiAGwAZQAgAG0AZQB0AHIAaQBjAHMACgAjACAAdwBpAGwAbAAgAGIAZQAgAG8AZgBmAGUAcgBlAGQAIABiAHkAIABhAHUAdABvAGMAbwBtAHAAbABlAHQAZQAKAAAAAQAAAA4AcwBlAGEAcgBjAGgAOgAAAAAAAAAAAQEAAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAABAAAAABQAYwBwAF8AcwBlAHQAdABpAG4AZwAAABwAQwByAGkAdABpAGMAYQBsACAAUABvAHcAZQByAAAAHgBDAFAAIAAoAEMAbwBuAGYAaQBnAHUAcgBlAGQAKQAAAAoAVwBhAHQAdABzAAAAAAABAAAAAAAAAAAAAAAAAQAAf94AAAAAAAABKAAAAAAJsCdg//////////8B/////wAAAAAAAAAAAAA/8AAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAAAAMAAADhD/////AAAACgAAAAAAAAAAAAAAAAwAMgAgAFAAYQByAG0AAAAAAAAAAAAADhAAAQAAAAAAAAAA/////wAAAAH/////AAAAAAAAAAABAQAAAAAWAHAAbwB3AGUAcgBfAGkAbgBkAGUAeAAAAAUA/////wAAAAAAAAASADMAMABtACAAUABvAHcAZQByAAAACgBXAGEAdAB0AHMAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAL28qQAAAAAAAAAEAAAAACAAAAAAH/////VVX//wAAAAAAAD/wAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAAAAAeAAAAPAAAACgAUABlAGEAawBfADMAMABfAG0AaQBuAHUAdABlAF8AUABvAHcAZQByAAAACgAAAAAAAAAAAAAAAAwAMgAgAFAAYQByAG0AAAAAAAAAAAAADhAAAQAAAAD//////////wAAAAH/////AAAAAAAAAAABAQAAAAAWAHAAbwB3AGUAcgBfAGkAbgBkAGUAeAAAAAUA/////wAAAAAAAAASADQANQBtACAAUABvAHcAZQByAAAACgBXAGEAdAB0AHMAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAL28qQAAAAAAAAAEAAAAACAAAAAAH/////qqr//wAAAAAAAD/wAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAAAAAtAAAAPAAAACgAUABlAGEAawBfADQANQBfAG0AaQBuAHUAdABlAF8AUABvAHcAZQByAAAACgAAAAAAAAAAAAAAAAwAMgAgAFAAYQByAG0AAAAAAAAAAAAADhAAAQAAAAD//////////wAAAAH/////AAAAAAAAAAABAQAAAAAWAHAAbwB3AGUAcgBfAGkAbgBkAGUAeAAAAAAAAw=="</chart>
|
||||
<chart name="Time in W' Zone">"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"</chart>
|
||||
<chart name="Time In Power Zone">"AAAAJABUAGkAbQBlACAASQBuACAAUABvAHcAZQByACAAWgBvAG4AZQAAACQAVABpAG0AZQAgAEkAbgAgAFAAbwB3AGUAcgAgAFoAbwBuAGUAJX44AAAAAP8AJX6NA4NOqP8BWcLAAAD///////////////8AAAAVAAAAAwAAAAEBAAAAHgB0AGkAbQBlAF8AaQBuAF8AegBvAG4AZQBfAEwAMwAAAB4ATAAzACAAVABpAG0AZQAgAGkAbgAgAFoAbwBuAGUAAAAeAEwAMwAgAFQAaQBtAGUAIABpAG4AIABaAG8AbgBlAAAADgBzAGUAYwBvAG4AZABzAAAAAAAAAAAAAAAAAAAAAAAAAQAAf/8AAAAAAUfhCAAAAAABZKioAAAAAQAAAAAB///NzdnZ//8AAAAAAAA/8AAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAA478bQAAAf///////AUfhCAAAAAAAAAAAAAAAAAAAAABAAAAAAAZ7DgkBAQAAAAAAAAAOAHMAZQBjAG8AbgBkAHP/////AAAAAf////8AAAAAAAAAAAEBAAAAABYAcABvAHcAZQByAF8AaQBuAGQAZQB4AAAAAQEAAAAeAHQAaQBtAGUAXwBpAG4AXwB6AG8AbgBlAF8ATAA0AAAAHgBMADQAIABUAGkAbQBlACAAaQBuACAAWgBvAG4AZQAAAB4ATAA0ACAAVABpAG0AZQAgAGkAbgAgAFoAbwBuAGUAAAAOAHMAZQBjAG8AbgBkAHMAAAAAAAAAAAAAAAAAAAAAAAABAAB//wAAAAABR+EIAAAAAAFkqKgAAAABAAAAAAH//1VVYGD//wAAAAAAAD/wAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAIOrhcAAB/mf////8AAAACAAAAAAAAAAAAAAAAAAFOSFAAAAAAAWDVQAABAAAAAAAAAA4AcwBlAGMAbwBuAGQAc/////8AAAAB/////wAAAAAAAAAAAQEAAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAABAQAAAB4AdABpAG0AZQBfAGkAbgBfAHoAbwBuAGUAXwBMADUAAAAeAEwANQAgAFQAaQBtAGUAIABpAG4AIABaAG8AbgBlAAAAHgBMADUAIABUAGkAbQBlACAAaQBuACAAWgBvAG4AZQAAAA4AcwBlAGMAbwBuAGQAcwAAAAAAAAAAAAAAAAAAAAAAAAEAAH//AAAAAAFH4QgAAAAAAWSoqAAAAAEAAAAAAf/////AwFpaAAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAg6uFwAAH+Z/////wAAAAIAAAAAAAAAAAAAAAAAAU5IUAAAAAABYNVAAAEAAAAAAAAADgBzAGUAYwBvAG4AZABz/////wAAAAH/////AAAAAAAAAAABAQAAAAAWAHAAbwB3AGUAcgBfAGkAbgBkAGUAeAABAAAAAA=="</chart>
|
||||
<chart name="Time In HR Zone">"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"</chart>
|
||||
@@ -32,4 +32,10 @@
|
||||
<chart name="Time & Distance">"AAAAHgBUAGkAbQBlACAAJgAgAEQAaQBzAHQAYQBuAGMAZf////8AAAAA//////8AAAAA//////8BYM1AAAD///////////////8AAAAVAAAAAwAAAAEAAAAAGAB3AG8AcgBrAG8AdQB0AF8AdABpAG0AZQAAABAARAB1AHIAYQB0AGkAbwBuAAAAEABEAHUAcgBhAHQAaQBvAG4AAAAOAHMAZQBjAG8AbgBkAHMAAAAAAAUAAAAAAAAAAAAAAAABAAB//wAAAAABR+EIAAAAAAFgqHgAAAABAAAAAAH//wAA/////wAAAAAAAD/wAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAADjvxtAAAB///////8BR+EIAAAAAAAAAAAAAAAAAAAAAEAAAAAABnsOCQEBAAAAAAAAAA4AcwBlAGMAbwBuAGQAc/////8AAAAB/////wAAAAAAAAAAAQEAAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAABAAAAABwAdABvAHQAYQBsAF8AZABpAHMAdABhAG4AYwBlAAAAEABEAGkAcwB0AGEAbgBjAGUAAAAQAEQAaQBzAHQAYQBuAGMAZQAAAAQAawBtAAAAAAAFAAAAAAAAAAAAAAAAAQAAf/8AAAAAAUfhCAAAAAABYKh4/////wAAAAEB//+qqgAAAAAAAAAAAAA/8AAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAACDq4XAAAf5n/////AAAAAgAAAAAAAAAAAAAAAAABTkhQAAAAAAFg1UAAAQAAAAAAAAAEAGsAbf////8AAAAB/////wAAAAAAAAAAAQEAAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAABAAAAABYAdABpAG0AZQBfAHIAaQBkAGkAbgBnAAAAFgBUAGkAbQBlACAATQBvAHYAaQBuAGcAAAAWAFQAaQBtAGUAIABNAG8AdgBpAG4AZwAAAA4AcwBlAGMAbwBuAGQAcwAAAAAABQAAAAAAAAAAAAAAAAEAAH//AAAAAAFH4QgAAAAAAWCoeAAAAAEAAAAAAf//AABVVX9/AAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAg6uFwAAH+Z/////wAAAAIAAAAAAAAAAAAAAAAAAU5IUAAAAAABYNVAAAEAAAAAAAAADgBzAGUAYwBvAG4AZABz/////wAAAAH/////AAAAAAAAAAABAQAAAAAWAHAAbwB3AGUAcgBfAGkAbgBkAGUAeAABAAAAAA=="</chart>
|
||||
<chart name="Stress and Distance">"AAAAJgBTAHQAcgBlAHMAcwAgAGEAbgBkACAARABpAHMAdABhAG4AYwBl/////wAAAAD//////wAAAAD//////wFk08AAAP///////////////wAAABUAAAACAAAAAQAAAAAUAGMAbwBnAGcAYQBuAF8AdABzAHMAAAAUAEIAaQBrAGUAUwB0AHIAZQBzAHMAAAAGAFQAUwBT/////wAAAAAAAAAAAAAAAAAAAAAAAAEAAH//AAAAAAFH4QgAAAAAAWDz+AAAAAEAAAAAAf///////wAAAAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAOO/G0AAAH///////wFH4QgAAAAAAAAAAAAAAAAAAAAAQAAAAAAGew4JAQEAAAAA//////////8AAAAB/////wAAAAAAAAAAAQEAAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAABAAAAABwAdABvAHQAYQBsAF8AZABpAHMAdABhAG4AYwBlAAAAEABEAGkAcwB0AGEAbgBjAGUAAAAQAEQAaQBzAHQAYQBuAGMAZQAAAAQAawBtAAAAAAAAAAAAAAAAAAAAAAAAAQAAf/8AAAAAAUfhCAAAAAABYPP4AAAAAgAAAAIB/////wAAAAAAAAAAAAA/8AAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAACDq4XAAAf5n/////AAAAAgAAAAAAAAAAAAAAAAABTkhQAAAAAAFg1UAAAQAAAAAAAAAEAGsAbf////8AAAAB/////wAAAAAAAAAAAQEAAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAQAAAAA="</chart>
|
||||
<chart name="Calories vs Duration">"AAAAKABDAGEAbABvAHIAaQBlAHMAIAB2AHMAIABEAHUAcgBhAHQAaQBvAG7/////AAAAAP//////AAAAAP//////AWDLcAAA////////////////AAAAFQAAAAIAAAABAAAAABQAdABvAHQAYQBsAF8AdwBvAHIAawAAAAgAVwBvAHIAawAAAAgAVwBvAHIAawAAAAQAawBKAAAAAAAAAAAAAAAAAAAAAAAAAQAAf/8AAAAAAUfhCAAAAAABYMLI/////wAAAAAB//8AAAAAf38AAAAAAAA/8AAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAA478bQAAAf///////AUfhCAAAAAAAAAAAAAAAAAAAAABAAAAAAAZ7DgkBAQAAAAAAAAAEAGsASv////8AAAAB/////wAAAAAAAAAAAQEAAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAABAAAAABgAdwBvAHIAawBvAHUAdABfAHQAaQBtAGUAAAAQAEQAdQByAGEAdABpAG8AbgAAABAARAB1AHIAYQB0AGkAbwBuAAAADgBzAGUAYwBvAG4AZABzAAAAAAACAAAAAAAAAAAAAAAAAQAAf/8AAAAAAUfhCAAAAAABYMLIAAAAAQAAAAAB//9OTpub//8AAAAAAAA/8AAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAACDq4XAAAf5n/////AAAAAgAAAAAAAAAAAAAAAAABTkhQAAAAAAFg1UAAAQAAAAAAAAAOAHMAZQBjAG8AbgBkAHP/////AAAAAf////8AAAAAAAAAAAEBAAAAABYAcABvAHcAZQByAF8AaQBuAGQAZQB4AAEAAAAA"</chart>
|
||||
<chart name="Time in HR Zones I-II-III">"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"</chart>
|
||||
<chart name="Percent in HR Zones I-II-III">"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"</chart>
|
||||
<chart name="Time in Power Zones I-II-III">"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"</chart>
|
||||
<chart name="Percent in Power Zones I-II-III">"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"</chart>
|
||||
<chart name="Time in Pace Zones I-II-III">"AAAANgBUAGkAbQBlACAAaQBuACAAUABhAGMAZQAgAFoAbwBuAGUAcwAgAEkALQBJAEkALQBJAEkASQAAADYAVABpAG0AZQAgAGkAbgAgAFAAYQBjAGUAIABaAG8AbgBlAHMAIABJAC0ASQBJAC0ASQBJAEkAJYIIAAAAAP8AJYN0AAAAAP8AAAABAAD///////////////8AAAAVAAAAAwAAAAEAAAAAHgB0AGkAbQBlAF8AaQBuAF8AegBvAG4AZQBfAFAASQAAACgAUABJACAAVABpAG0AZQAgAGkAbgAgAFAAYQBjAGUAIABaAG8AbgBlAAAAKABQAEkAIABUAGkAbQBlACAAaQBuACAAUABhAGMAZQAgAFoAbwBuAGUAAAAOAHMAZQBjAG8AbgBkAHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbgAAAFsAAAAB/////wH//wAA//8AAAAAAAAAAD/wAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAAAAPnAAAOEP////8AAAAKAAAAAAAAAAAAAAAABgBjAHAAMgAAAAAAAAAAAAAOEAAAAAAAAAAAAA4AcwBlAGMAbwBuAGQAcwAAAQQAIwAgAHQAeQBwAGUAIABpAG4AIABhACAAZgBvAHIAbQB1AGwAYQAgAHQAbwAgAHUAcwBlAAoAIwAgAGYAbwByACAAZQAuAGcALgAgAEIAaQBrAGUAUwB0AHIAZQBzAHMAIAAvACAARAB1AHIAYQB0AGkAbwBuAAoAIwAgAGEAcwAgAHkAbwB1ACAAdAB5AHAAZQAgAHQAaABlACAAYQB2AGEAaQBsAGEAYgBsAGUAIABtAGUAdAByAGkAYwBzAAoAIwAgAHcAaQBsAGwAIABiAGUAIABvAGYAZgBlAHIAZQBkACAAYgB5ACAAYQB1AHQAbwBjAG8AbQBwAGwAZQB0AGUACgAAAAEAAAAOAHMAZQBhAHIAYwBoADoAAAAAAAAAAAEBAQAAABYAcABvAHcAZQByAF8AaQBuAGQAZQB4AAAAAQAAAAAgAHQAaQBtAGUAXwBpAG4AXwB6AG8AbgBlAF8AUABJAEkAAAAqAFAASQBJACAAVABpAG0AZQAgAGkAbgAgAFAAYQBjAGUAIABaAG8AbgBlAAAAKgBQAEkASQAgAFQAaQBtAGUAIABpAG4AIABQAGEAYwBlACAAWgBvAG4AZQAAAA4AcwBlAGMAbwBuAGQAcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuAAAAWwAAAAH/////Af///////wAAAAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAAAA+cAAA4Q/////wAAAAoAAAAAAAAAAAAAAAAGAGMAcAAyAAAAAAAAA+cAAA4QAAAAAAAAAAAADgBzAGUAYwBvAG4AZABzAAABBAAjACAAdAB5AHAAZQAgAGkAbgAgAGEAIABmAG8AcgBtAHUAbABhACAAdABvACAAdQBzAGUACgAjACAAZgBvAHIAIABlAC4AZwAuACAAQgBpAGsAZQBTAHQAcgBlAHMAcwAgAC8AIABEAHUAcgBhAHQAaQBvAG4ACgAjACAAYQBzACAAeQBvAHUAIAB0AHkAcABlACAAdABoAGUAIABhAHYAYQBpAGwAYQBiAGwAZQAgAG0AZQB0AHIAaQBjAHMACgAjACAAdwBpAGwAbAAgAGIAZQAgAG8AZgBmAGUAcgBlAGQAIABiAHkAIABhAHUAdABvAGMAbwBtAHAAbABlAHQAZQAKAAAAAQAAAA4AcwBlAGEAcgBjAGgAOgAAAAAAAAAAAQEBAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAABAAAAACIAdABpAG0AZQBfAGkAbgBfAHoAbwBuAGUAXwBQAEkASQBJAAAALABQAEkASQBJACAAVABpAG0AZQAgAGkAbgAgAFAAYQBjAGUAIABaAG8AbgBlAAAALABQAEkASQBJACAAVABpAG0AZQAgAGkAbgAgAFAAYQBjAGUAIABaAG8AbgBlAAAADgBzAGUAYwBvAG4AZABzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG4AAABbAAAAAf////8B/////zMzAAAAAAAAAAA/8AAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAAAD5wAADhD/////AAAACgAAAAAAAAAAAAAAAAYAYwBwADIAAAAAAAAD5wAADhAAAAAAAAAAAAAOAHMAZQBjAG8AbgBkAHMAAAEEACMAIAB0AHkAcABlACAAaQBuACAAYQAgAGYAbwByAG0AdQBsAGEAIAB0AG8AIAB1AHMAZQAKACMAIABmAG8AcgAgAGUALgBnAC4AIABCAGkAawBlAFMAdAByAGUAcwBzACAALwAgAEQAdQByAGEAdABpAG8AbgAKACMAIABhAHMAIAB5AG8AdQAgAHQAeQBwAGUAIAB0AGgAZQAgAGEAdgBhAGkAbABhAGIAbABlACAAbQBlAHQAcgBpAGMAcwAKACMAIAB3AGkAbABsACAAYgBlACAAbwBmAGYAZQByAGUAZAAgAGIAeQAgAGEAdQB0AG8AYwBvAG0AcABsAGUAdABlAAoAAAABAAAADgBzAGUAYQByAGMAaAA6AAAAAAAAAAABAQEAAAAWAHAAbwB3AGUAcgBfAGkAbgBkAGUAeAAAAAAAAw=="</chart>
|
||||
<chart name="Percent in Pace Zones I-II-III">"AAAAPABQAGUAcgBjAGUAbgB0ACAAaQBuACAAUABhAGMAZQAgAFoAbwBuAGUAcwAgAEkALQBJAEkALQBJAEkASQAAADwAUABlAHIAYwBlAG4AdAAgAGkAbgAgAFAAYQBjAGUAIABaAG8AbgBlAHMAIABJAC0ASQBJAC0ASQBJAEkAJYIIAAAAAP8AJYN0AAAAAP8AAAABAAD///////////////8AAAAVAAAAAwAAAAEBAAAAJABwAGUAcgBjAGUAbgB0AF8AaQBuAF8AegBvAG4AZQBfAFAASQAAAC4AUABJACAAUABlAHIAYwBlAG4AdAAgAGkAbgAgAFAAYQBjAGUAIABaAG8AbgBlAAAALgBQAEkAIABQAGUAcgBjAGUAbgB0ACAAaQBuACAAUABhAGMAZQAgAFoAbwBuAGUAAAACACUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbgAAAFsAAAAB/////wH//wAA//8AAAAAAAAAAD/wAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAAAAPnAAAOEP////8AAAAKAAAAAAAAAAAAAAAABgBjAHAAMgAAAAAAAAAAAAAOEAAAAAAAAAAAAAIAJQAAAQQAIwAgAHQAeQBwAGUAIABpAG4AIABhACAAZgBvAHIAbQB1AGwAYQAgAHQAbwAgAHUAcwBlAAoAIwAgAGYAbwByACAAZQAuAGcALgAgAEIAaQBrAGUAUwB0AHIAZQBzAHMAIAAvACAARAB1AHIAYQB0AGkAbwBuAAoAIwAgAGEAcwAgAHkAbwB1ACAAdAB5AHAAZQAgAHQAaABlACAAYQB2AGEAaQBsAGEAYgBsAGUAIABtAGUAdAByAGkAYwBzAAoAIwAgAHcAaQBsAGwAIABiAGUAIABvAGYAZgBlAHIAZQBkACAAYgB5ACAAYQB1AHQAbwBjAG8AbQBwAGwAZQB0AGUACgAAAAEAAAAOAHMAZQBhAHIAYwBoADoAAAAAAAAAAAEBAAAAABYAcABvAHcAZQByAF8AaQBuAGQAZQB4AAAAAQEAAAAmAHAAZQByAGMAZQBuAHQAXwBpAG4AXwB6AG8AbgBlAF8AUABJAEkAAAAwAFAASQBJACAAUABlAHIAYwBlAG4AdAAgAGkAbgAgAFAAYQBjAGUAIABaAG8AbgBlAAAAMABQAEkASQAgAFAAZQByAGMAZQBuAHQAIABpAG4AIABQAGEAYwBlACAAWgBvAG4AZQAAAAIAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuAAAAWwAAAAH/////Af///////wAAAAAAAAAAP/AAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAAAA+cAAA4Q/////wAAAAoAAAAAAAAAAAAAAAAGAGMAcAAyAAAAAAAAA+cAAA4QAAAAAAAAAAAAAgAlAAABBAAjACAAdAB5AHAAZQAgAGkAbgAgAGEAIABmAG8AcgBtAHUAbABhACAAdABvACAAdQBzAGUACgAjACAAZgBvAHIAIABlAC4AZwAuACAAQgBpAGsAZQBTAHQAcgBlAHMAcwAgAC8AIABEAHUAcgBhAHQAaQBvAG4ACgAjACAAYQBzACAAeQBvAHUAIAB0AHkAcABlACAAdABoAGUAIABhAHYAYQBpAGwAYQBiAGwAZQAgAG0AZQB0AHIAaQBjAHMACgAjACAAdwBpAGwAbAAgAGIAZQAgAG8AZgBmAGUAcgBlAGQAIABiAHkAIABhAHUAdABvAGMAbwBtAHAAbABlAHQAZQAKAAAAAQAAAA4AcwBlAGEAcgBjAGgAOgAAAAAAAAAAAQEAAAAAFgBwAG8AdwBlAHIAXwBpAG4AZABlAHgAAAABAQAAACgAcABlAHIAYwBlAG4AdABfAGkAbgBfAHoAbwBuAGUAXwBQAEkASQBJAAAAMgBQAEkASQBJACAAUABlAHIAYwBlAG4AdAAgAGkAbgAgAFAAYQBjAGUAIABaAG8AbgBlAAAAMgBQAEkASQBJACAAUABlAHIAYwBlAG4AdAAgAGkAbgAgAFAAYQBjAGUAIABaAG8AbgBlAAAAAgAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG4AAABbAAAAAf////8B/////wzNAAAAAAAAAAA/8AAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAAAD5wAADhD/////AAAACgAAAAAAAAAAAAAAAAYAYwBwADIAAAAAAAAAAAAADhAAAAAAAAAAAAACACUAAAEEACMAIAB0AHkAcABlACAAaQBuACAAYQAgAGYAbwByAG0AdQBsAGEAIAB0AG8AIAB1AHMAZQAKACMAIABmAG8AcgAgAGUALgBnAC4AIABCAGkAawBlAFMAdAByAGUAcwBzACAALwAgAEQAdQByAGEAdABpAG8AbgAKACMAIABhAHMAIAB5AG8AdQAgAHQAeQBwAGUAIAB0AGgAZQAgAGEAdgBhAGkAbABhAGIAbABlACAAbQBlAHQAcgBpAGMAcwAKACMAIAB3AGkAbABsACAAYgBlACAAbwBmAGYAZQByAGUAZAAgAGIAeQAgAGEAdQB0AG8AYwBvAG0AcABsAGUAdABlAAoAAAABAAAADgBzAGUAYQByAGMAaAA6AAAAAAAAAAABAQAAAAAWAHAAbwB3AGUAcgBfAGkAbgBkAGUAeAAAAAAAAw=="</chart>
|
||||
</charts>
|
||||
|
||||
Reference in New Issue
Block a user