diff --git a/calculator/calc.ts b/calculator/calc.ts index 9556193..70029b2 100644 --- a/calculator/calc.ts +++ b/calculator/calc.ts @@ -1,7 +1,5 @@ -import { Activity, Attribute, attributes, BenchmarkPerformance, findNearestPoints, Gender, getActivityAttribute, getAttributeActivities, kgToLb, Levels, msToTime, Player, StandardsItem } from "./util"; -import rawStandards from "./standards.json" assert { type: "json" } - -const standards = rawStandards as StandardsItem[]; +import { Activity, Attribute, attributes, ActivityPerformance, findNearestPoints, getActivityAttribute, getAttributeActivities, Player, StandardsMap, BaseLevel, Standard } from "./util"; +import rawStandards from "./newStandards.json" assert { type: "json" } // SOURCES // Squat, Bench, Dead Lift: @@ -13,136 +11,32 @@ const standards = rawStandards as StandardsItem[]; // Broad Jump: // +const standards = rawStandards as StandardsMap; + +type BaseLevelValues = Record // ------------------------------------------------------------------------------------------------- -// Level calculations +// Level utilities (helpers) // ------------------------------------------------------------------------------------------------- -export const calcBenchmarkLevel = (performance: number, levels: Record): number => { - let playerLevel = 1; - let playerLevelDiff = Infinity; + +function findLevel(levels: Record, performance: number): number { + let resultLevel = 1; + let resultLevelDiff = Infinity; for (const level in levels) { const diff = Math.abs(performance - levels[level as unknown as number]); - if (diff < playerLevelDiff) { - playerLevel = +level; - playerLevelDiff = diff; + if (diff < resultLevelDiff) { + resultLevel = +level; + resultLevelDiff = diff; } } - return playerLevel; -}; + return resultLevel; +} -export const calcAttributeLevel = ( - attribute: Attribute, - benchmarkPerformances: BenchmarkPerformance[], -): number => { - // must be activities of the given attribute - if (benchmarkPerformances.some((bp) => getActivityAttribute(bp.activity) !== attribute)) { - throw new Error("Wrong benchmark performance attribute"); - } - - // must perform all of an attributes activities - for (const activity of getAttributeActivities(attribute)) { - const benchmarkActivites = benchmarkPerformances.map((bp) => bp.activity); - if (!benchmarkActivites.includes(activity)) - return 0; - } - - // must have all benchmarks using a valid performance value (> 0) - for (const benchmarkPerformance of benchmarkPerformances) { - if (benchmarkPerformance.performance <= 0) - return 0 - } - - const benchmarkLevels = benchmarkPerformances.map((abp) => - calcBenchmarkLevel(abp.performance, abp.levels), - ); - - const benchmarkLevelsAvg = Math.round( - benchmarkLevels.reduce((sum, curr) => sum + curr, 0) / benchmarkLevels.length, - ); - - return benchmarkLevelsAvg; -}; - -export const calcAttributeLevels = ( - player: Player, - benchmarkPerformances: BenchmarkPerformance[], -): Record => { - const attrLevels: Record = { - [attributes.STRENGTH]: 0, - [attributes.POWER]: 0, - [attributes.ENDURANCE]: 0, - // [attributes.SPEED]: 0, - [attributes.AGILITY]: 0, - } as const; - - for (const value of Object.values(player)) { - if (!value) - return attrLevels; - } - - (Object.values(attributes) as Attribute[]).forEach((attribute) => { - const attrBenchmarkPerformances = benchmarkPerformances.filter( - (bp) => getActivityAttribute(bp.activity) === attribute, - ); - attrLevels[attribute] = calcAttributeLevel(attribute, attrBenchmarkPerformances); - }); - - return attrLevels; -}; - -export const calcPlayerLevel = (player: Player, benchmarkPerformances: BenchmarkPerformance[]): number => { - for (const value of Object.values(player)) { - if (!value) - return 0; - } - - const attrLevels = calcAttributeLevels(player, benchmarkPerformances); - for (const level of Object.values(attrLevels)) { - if (!level) - return 0; - } - - const attrLevelsSum = Object.values(attrLevels).reduce((sum, lvl) => sum + lvl, 0); - return Math.round(attrLevelsSum / Object.keys(attributes).length); -}; - -// ------------------------------------------------------------------------------------------------- -// Presentation helpers -// ------------------------------------------------------------------------------------------------- -// export const formatLevelValues = ( -// levels: Record, -// activity: Activity, -// ): Record => { -// const timedActivities: Activity[] = [activities.RUN, activities.DASH, activities.CONE_DRILL]; -// -// const formattedLevels: Record = {}; -// for (const level in levels) { -// const lvl = +level as number; -// let displayValue = ""; -// if (timedActivities.includes(activity)) { -// displayValue = msToTime(levels[lvl]); -// } else if (activity === activities.TREADMILL_DASH) { -// displayValue = `${(levels[lvl] * 1000).toFixed(2)} m/s`; -// } else if (activity === activities.BROAD_JUMP) { -// displayValue = `${(levels[lvl] * 0.0328084).toFixed(2)} ft.`; -// } else { -// displayValue = kgToLb(levels[lvl]).toFixed(0); -// } -// -// formattedLevels[lvl] = displayValue; -// } -// -// return formattedLevels; -// }; - -// ------------------------------------------------------------------------------------------------- -// Level utilities -// ------------------------------------------------------------------------------------------------- -const compressLevels = ( +function compressLevels( levels: Record, targetLevelsAmount: number, -): Record => { +): Record { const levelsAmount = Object.keys(levels).length; if (levelsAmount < targetLevelsAmount) { throw new Error( @@ -166,12 +60,12 @@ const compressLevels = ( } return compressedLevels; -}; +} -const expandLevels = ( - levels: Levels | Record, +function expandLevels( + levels: BaseLevel | Record, i: number -): Record => { +): Record { if (i == 0) { // ensure we always use number keys const newLevels = {}; @@ -198,15 +92,70 @@ const expandLevels = ( } // ------------------------------------------------------------------------------------------------- -// Main level function +// Standards interpolation (heavy math bits) // ------------------------------------------------------------------------------------------------- -export const computeLevels = ( - age: number, - weightKG: number, - gender: Gender, + +function interpolateStandardsValues( + lower: BaseLevelValues, + upper: BaseLevelValues, + ratio: number, +): BaseLevelValues { + function lerp(k: BaseLevel): number { + return (lower[k] as number) + ((upper[k] as number) - (lower[k] as number)) * ratio; + } + + return { + physicallyActive: lerp("physicallyActive"), + beginner: lerp("beginner"), + intermediate: lerp("intermediate"), + advanced: lerp("advanced"), + elite: lerp("elite"), + }; +} + +function interpolateByBodyWeight( + targetAge: number, + bodyWeightKG: number, + standardsArr: Standard[], +): BaseLevelValues | null { + const ageFilteredStandards = standardsArr.filter((s) => s.metrics.age === targetAge); + if (ageFilteredStandards[0].metrics.weight === -1) return ageFilteredStandards[0].levels; + + const weightArray = [...new Set(ageFilteredStandards.map((s) => s.metrics.weight))].sort((a, b) => a - b); + const { lower, upper } = findNearestPoints(bodyWeightKG, weightArray); + + const weightLower = ageFilteredStandards.find((s) => s.metrics.weight === lower); + const weightUpper = ageFilteredStandards.find((s) => s.metrics.weight === upper); + if (!weightLower || !weightUpper) return null; + + let weightRatio = upper === lower ? 1 : (bodyWeightKG - lower) / (upper - lower); + weightRatio = Math.max(0, Math.min(1, weightRatio)); + + return interpolateStandardsValues(weightLower.levels, weightUpper.levels, weightRatio); +} + +function interpolateActivityLevels( activity: Activity, -) => { - const levels = calculateLevels(age, weightKG, gender, activity, standards); + player: Player, +): Record { + // Filter dataset + const filteredStandards = standards[activity] + .filter(a => a.metrics.gender === player.gender); + if (filteredStandards.length === 0) return {}; + + // Age interpolation + const ageArray = [...new Set(filteredStandards.map((s) => s.metrics.age))].sort((a, b) => a - b); + const { lower: ageLower, upper: ageUpper } = findNearestPoints(player.age, ageArray); + + const lowerValues = interpolateByBodyWeight(ageLower, player.weightKG, filteredStandards); + const upperValues = interpolateByBodyWeight(ageUpper, player.weightKG, filteredStandards); + if (!lowerValues || !upperValues) return {}; + + let ageRatio = ageUpper === ageLower ? 1 : (player.age - ageLower) / (ageUpper - ageLower); + ageRatio = Math.max(0, Math.min(1, ageRatio)); + + const levels = interpolateStandardsValues(lowerValues, upperValues, ageRatio); + if (levels) { const expandedLevels = expandLevels(levels, 5); const compressedLevels = compressLevels(expandedLevels, 100); @@ -217,69 +166,83 @@ export const computeLevels = ( } // ------------------------------------------------------------------------------------------------- -// Standards interpolation (heavy math bits) +// Level calculations (public API) // ------------------------------------------------------------------------------------------------- -const calculateLevels = ( - age: number, - weightKG: number, - gender: Gender, - activity: Activity, - standards: StandardsItem[], -): Levels | null => { - // Filter dataset - const filtered = standards.filter( - (item) => item.gender === gender && item.activityType === activity, + +export function calcAttributeLevel( + attribute: Attribute, + player: Player, + activityPerformances: ActivityPerformance[], +): number { + // must be activities of the given attribute + if (activityPerformances.some((bp) => getActivityAttribute(bp.activity) !== attribute)) { + throw new Error("Wrong activity performance attribute"); + } + + // must perform all of an attributes activities + for (const activity of getAttributeActivities(attribute)) { + const filteredActivites = activityPerformances.map((bp) => bp.activity); + if (!filteredActivites.includes(activity)) + return 0; + } + + // must have all activties using a valid performance value (> 0) + for (const activityPerformance of activityPerformances) { + if (activityPerformance.performance <= 0) + return 0 + } + + const activityLevels = activityPerformances.map((abp) => + findLevel(interpolateActivityLevels(abp.activity, player), abp.performance), ); - if (filtered.length === 0) return null; - // Age interpolation - const ageArray = [...new Set(filtered.map((s) => s.age))].sort((a, b) => a - b); - const { lower: ageLower, upper: ageUpper } = findNearestPoints(age, ageArray); + const activityLevelsAvg = Math.round( + activityLevels.reduce((sum, curr) => sum + curr, 0) / activityLevels.length, + ); - const lowerValues = interpolateByBodyWeight(ageLower, weightKG, filtered); - const upperValues = interpolateByBodyWeight(ageUpper, weightKG, filtered); - if (!lowerValues || !upperValues) return null; + return activityLevelsAvg; +} - let ageRatio = ageUpper === ageLower ? 1 : (age - ageLower) / (ageUpper - ageLower); - ageRatio = Math.max(0, Math.min(1, ageRatio)); +export function calcAllAttributeLevels( + player: Player, + activityPerformances: ActivityPerformance[], +): Record { + const attrLevels: Record = { + [attributes.STRENGTH]: 0, + [attributes.POWER]: 0, + [attributes.ENDURANCE]: 0, + // [attributes.SPEED]: 0, + [attributes.AGILITY]: 0, + } as const; - return interpolateStandardsValues(lowerValues, upperValues, ageRatio); -}; + for (const value of Object.values(player)) { + if (!value) + return attrLevels; + } -const interpolateByBodyWeight = ( - agePoint: number, - bodyWeightKG: number, - filtered: StandardsItem[], -): Levels | null => { - const ageFiltered = filtered.filter((item) => item.age === agePoint); - if (ageFiltered[0].bodyWeight === -1) return ageFiltered[0]; + (Object.values(attributes) as Attribute[]).forEach((attribute) => { + const attrActivityPerformances = activityPerformances.filter( + (bp) => getActivityAttribute(bp.activity) === attribute, + ); + attrLevels[attribute] = calcAttributeLevel(attribute, player, attrActivityPerformances); + }); - const weightArray = [...new Set(ageFiltered.map((obj) => obj.bodyWeight))].sort((a, b) => a - b); - const { lower, upper } = findNearestPoints(bodyWeightKG, weightArray); + return attrLevels; +} - const weightLower = ageFiltered.find((i) => i.bodyWeight === lower); - const weightUpper = ageFiltered.find((i) => i.bodyWeight === upper); - if (!weightLower || !weightUpper) return null; +export function calcPlayerLevel(player: Player, activityPerformances: ActivityPerformance[]): number { + for (const value of Object.values(player)) { + if (!value) + return 0; + } - let weightRatio = upper === lower ? 1 : (bodyWeightKG - lower) / (upper - lower); - weightRatio = Math.max(0, Math.min(1, weightRatio)); + const attrLevels = calcAllAttributeLevels(player, activityPerformances); + for (const level of Object.values(attrLevels)) { + if (!level) + return 0; + } - return interpolateStandardsValues(weightLower, weightUpper, weightRatio); -}; + const attrLevelsSum = Object.values(attrLevels).reduce((sum, lvl) => sum + lvl, 0); + return Math.round(attrLevelsSum / Object.keys(attributes).length); +} -const interpolateStandardsValues = ( - lower: Levels, - upper: Levels, - ratio: number, -): Levels => { - const lerp = (k: keyof Levels): number => - (lower[k] as number) + ((upper[k] as number) - (lower[k] as number)) * ratio; - - return { - physicallyActive: lerp("physicallyActive"), - beginner: lerp("beginner"), - intermediate: lerp("intermediate"), - advanced: lerp("advanced"), - elite: lerp("elite"), - }; -}; diff --git a/calculator/newStandards.json b/calculator/newStandards.json new file mode 100644 index 0000000..f599c71 --- /dev/null +++ b/calculator/newStandards.json @@ -0,0 +1,5814 @@ +{ + "Back Squat": [ + { + "metrics": { + "age": 17, + "weight": 57, + "gender": "male" + }, + "levels": { + "physicallyActive": 34, + "beginner": 59, + "intermediate": 78, + "advanced": 107, + "elite": 136 + } + }, + { + "metrics": { + "age": 17, + "weight": 68, + "gender": "male" + }, + "levels": { + "physicallyActive": 38, + "beginner": 65, + "intermediate": 87, + "advanced": 120, + "elite": 158 + } + }, + { + "metrics": { + "age": 17, + "weight": 79, + "gender": "male" + }, + "levels": { + "physicallyActive": 46, + "beginner": 80, + "intermediate": 106, + "advanced": 146, + "elite": 192 + } + }, + { + "metrics": { + "age": 17, + "weight": 91, + "gender": "male" + }, + "levels": { + "physicallyActive": 49, + "beginner": 85, + "intermediate": 113, + "advanced": 155, + "elite": 205 + } + }, + { + "metrics": { + "age": 17, + "weight": 102, + "gender": "male" + }, + "levels": { + "physicallyActive": 52, + "beginner": 89, + "intermediate": 118, + "advanced": 162, + "elite": 209 + } + }, + { + "metrics": { + "age": 17, + "weight": 113, + "gender": "male" + }, + "levels": { + "physicallyActive": 53, + "beginner": 90, + "intermediate": 120, + "advanced": 165, + "elite": 213 + } + }, + { + "metrics": { + "age": 17, + "weight": 136, + "gender": "male" + }, + "levels": { + "physicallyActive": 56, + "beginner": 97, + "intermediate": 129, + "advanced": 177, + "elite": 219 + } + }, + { + "metrics": { + "age": 25, + "weight": 57, + "gender": "male" + }, + "levels": { + "physicallyActive": 38, + "beginner": 65, + "intermediate": 87, + "advanced": 120, + "elite": 153 + } + }, + { + "metrics": { + "age": 25, + "weight": 68, + "gender": "male" + }, + "levels": { + "physicallyActive": 46, + "beginner": 78, + "intermediate": 104, + "advanced": 143, + "elite": 189 + } + }, + { + "metrics": { + "age": 25, + "weight": 79, + "gender": "male" + }, + "levels": { + "physicallyActive": 51, + "beginner": 87, + "intermediate": 116, + "advanced": 160, + "elite": 210 + } + }, + { + "metrics": { + "age": 25, + "weight": 91, + "gender": "male" + }, + "levels": { + "physicallyActive": 58, + "beginner": 98, + "intermediate": 130, + "advanced": 179, + "elite": 236 + } + }, + { + "metrics": { + "age": 25, + "weight": 102, + "gender": "male" + }, + "levels": { + "physicallyActive": 57, + "beginner": 98, + "intermediate": 131, + "advanced": 180, + "elite": 232 + } + }, + { + "metrics": { + "age": 25, + "weight": 113, + "gender": "male" + }, + "levels": { + "physicallyActive": 70, + "beginner": 120, + "intermediate": 160, + "advanced": 220, + "elite": 285 + } + }, + { + "metrics": { + "age": 25, + "weight": 136, + "gender": "male" + }, + "levels": { + "physicallyActive": 68, + "beginner": 116, + "intermediate": 164, + "advanced": 226, + "elite": 282 + } + }, + { + "metrics": { + "age": 35, + "weight": 57, + "gender": "male" + }, + "levels": { + "physicallyActive": 40, + "beginner": 68, + "intermediate": 91, + "advanced": 125, + "elite": 159 + } + }, + { + "metrics": { + "age": 35, + "weight": 68, + "gender": "male" + }, + "levels": { + "physicallyActive": 48, + "beginner": 82, + "intermediate": 110, + "advanced": 151, + "elite": 199 + } + }, + { + "metrics": { + "age": 35, + "weight": 79, + "gender": "male" + }, + "levels": { + "physicallyActive": 53, + "beginner": 91, + "intermediate": 122, + "advanced": 167, + "elite": 220 + } + }, + { + "metrics": { + "age": 35, + "weight": 91, + "gender": "male" + }, + "levels": { + "physicallyActive": 58, + "beginner": 99, + "intermediate": 132, + "advanced": 181, + "elite": 238 + } + }, + { + "metrics": { + "age": 35, + "weight": 102, + "gender": "male" + }, + "levels": { + "physicallyActive": 62, + "beginner": 106, + "intermediate": 142, + "advanced": 195, + "elite": 252 + } + }, + { + "metrics": { + "age": 35, + "weight": 113, + "gender": "male" + }, + "levels": { + "physicallyActive": 66, + "beginner": 113, + "intermediate": 150, + "advanced": 206, + "elite": 267 + } + }, + { + "metrics": { + "age": 35, + "weight": 136, + "gender": "male" + }, + "levels": { + "physicallyActive": 74, + "beginner": 127, + "intermediate": 169, + "advanced": 232, + "elite": 291 + } + }, + { + "metrics": { + "age": 45, + "weight": 57, + "gender": "male" + }, + "levels": { + "physicallyActive": 38, + "beginner": 65, + "intermediate": 86, + "advanced": 118, + "elite": 142 + } + }, + { + "metrics": { + "age": 45, + "weight": 68, + "gender": "male" + }, + "levels": { + "physicallyActive": 43, + "beginner": 73, + "intermediate": 98, + "advanced": 134, + "elite": 161 + } + }, + { + "metrics": { + "age": 45, + "weight": 79, + "gender": "male" + }, + "levels": { + "physicallyActive": 46, + "beginner": 79, + "intermediate": 105, + "advanced": 144, + "elite": 173 + } + }, + { + "metrics": { + "age": 45, + "weight": 91, + "gender": "male" + }, + "levels": { + "physicallyActive": 54, + "beginner": 92, + "intermediate": 123, + "advanced": 169, + "elite": 203 + } + }, + { + "metrics": { + "age": 45, + "weight": 102, + "gender": "male" + }, + "levels": { + "physicallyActive": 56, + "beginner": 97, + "intermediate": 129, + "advanced": 177, + "elite": 213 + } + }, + { + "metrics": { + "age": 45, + "weight": 113, + "gender": "male" + }, + "levels": { + "physicallyActive": 61, + "beginner": 104, + "intermediate": 139, + "advanced": 191, + "elite": 229 + } + }, + { + "metrics": { + "age": 45, + "weight": 136, + "gender": "male" + }, + "levels": { + "physicallyActive": 66, + "beginner": 113, + "intermediate": 150, + "advanced": 206, + "elite": 248 + } + }, + { + "metrics": { + "age": 55, + "weight": 57, + "gender": "male" + }, + "levels": { + "physicallyActive": 32, + "beginner": 55, + "intermediate": 73, + "advanced": 100, + "elite": 132 + } + }, + { + "metrics": { + "age": 55, + "weight": 68, + "gender": "male" + }, + "levels": { + "physicallyActive": 37, + "beginner": 64, + "intermediate": 85, + "advanced": 117, + "elite": 154 + } + }, + { + "metrics": { + "age": 55, + "weight": 79, + "gender": "male" + }, + "levels": { + "physicallyActive": 42, + "beginner": 71, + "intermediate": 95, + "advanced": 131, + "elite": 172 + } + }, + { + "metrics": { + "age": 55, + "weight": 91, + "gender": "male" + }, + "levels": { + "physicallyActive": 46, + "beginner": 80, + "intermediate": 106, + "advanced": 146, + "elite": 192 + } + }, + { + "metrics": { + "age": 55, + "weight": 102, + "gender": "male" + }, + "levels": { + "physicallyActive": 50, + "beginner": 86, + "intermediate": 114, + "advanced": 157, + "elite": 207 + } + }, + { + "metrics": { + "age": 55, + "weight": 113, + "gender": "male" + }, + "levels": { + "physicallyActive": 53, + "beginner": 90, + "intermediate": 120, + "advanced": 165, + "elite": 218 + } + }, + { + "metrics": { + "age": 55, + "weight": 136, + "gender": "male" + }, + "levels": { + "physicallyActive": 54, + "beginner": 93, + "intermediate": 124, + "advanced": 171, + "elite": 225 + } + }, + { + "metrics": { + "age": 65, + "weight": 57, + "gender": "male" + }, + "levels": { + "physicallyActive": 23, + "beginner": 40, + "intermediate": 53, + "advanced": 73, + "elite": 96 + } + }, + { + "metrics": { + "age": 65, + "weight": 68, + "gender": "male" + }, + "levels": { + "physicallyActive": 33, + "beginner": 57, + "intermediate": 76, + "advanced": 105, + "elite": 138 + } + }, + { + "metrics": { + "age": 65, + "weight": 79, + "gender": "male" + }, + "levels": { + "physicallyActive": 40, + "beginner": 68, + "intermediate": 91, + "advanced": 125, + "elite": 165 + } + }, + { + "metrics": { + "age": 65, + "weight": 91, + "gender": "male" + }, + "levels": { + "physicallyActive": 43, + "beginner": 74, + "intermediate": 98, + "advanced": 135, + "elite": 178 + } + }, + { + "metrics": { + "age": 65, + "weight": 102, + "gender": "male" + }, + "levels": { + "physicallyActive": 47, + "beginner": 80, + "intermediate": 107, + "advanced": 147, + "elite": 194 + } + }, + { + "metrics": { + "age": 65, + "weight": 113, + "gender": "male" + }, + "levels": { + "physicallyActive": 48, + "beginner": 83, + "intermediate": 110, + "advanced": 151, + "elite": 199 + } + }, + { + "metrics": { + "age": 65, + "weight": 136, + "gender": "male" + }, + "levels": { + "physicallyActive": 50, + "beginner": 86, + "intermediate": 115, + "advanced": 158, + "elite": 208 + } + }, + { + "metrics": { + "age": 75, + "weight": 57, + "gender": "male" + }, + "levels": { + "physicallyActive": 22, + "beginner": 38, + "intermediate": 51, + "advanced": 70, + "elite": 92 + } + }, + { + "metrics": { + "age": 75, + "weight": 68, + "gender": "male" + }, + "levels": { + "physicallyActive": 30, + "beginner": 51, + "intermediate": 68, + "advanced": 94, + "elite": 123 + } + }, + { + "metrics": { + "age": 75, + "weight": 79, + "gender": "male" + }, + "levels": { + "physicallyActive": 33, + "beginner": 56, + "intermediate": 75, + "advanced": 103, + "elite": 136 + } + }, + { + "metrics": { + "age": 75, + "weight": 91, + "gender": "male" + }, + "levels": { + "physicallyActive": 34, + "beginner": 59, + "intermediate": 78, + "advanced": 107, + "elite": 141 + } + }, + { + "metrics": { + "age": 75, + "weight": 102, + "gender": "male" + }, + "levels": { + "physicallyActive": 35, + "beginner": 59, + "intermediate": 79, + "advanced": 109, + "elite": 143 + } + }, + { + "metrics": { + "age": 75, + "weight": 113, + "gender": "male" + }, + "levels": { + "physicallyActive": 35, + "beginner": 60, + "intermediate": 80, + "advanced": 110, + "elite": 145 + } + }, + { + "metrics": { + "age": 75, + "weight": 136, + "gender": "male" + }, + "levels": { + "physicallyActive": 36, + "beginner": 62, + "intermediate": 82, + "advanced": 113, + "elite": 149 + } + }, + { + "metrics": { + "age": 85, + "weight": 57, + "gender": "male" + }, + "levels": { + "physicallyActive": 18, + "beginner": 30, + "intermediate": 40, + "advanced": 55, + "elite": 73 + } + }, + { + "metrics": { + "age": 85, + "weight": 68, + "gender": "male" + }, + "levels": { + "physicallyActive": 24, + "beginner": 40, + "intermediate": 54, + "advanced": 74, + "elite": 97 + } + }, + { + "metrics": { + "age": 85, + "weight": 79, + "gender": "male" + }, + "levels": { + "physicallyActive": 26, + "beginner": 44, + "intermediate": 59, + "advanced": 81, + "elite": 107 + } + }, + { + "metrics": { + "age": 85, + "weight": 91, + "gender": "male" + }, + "levels": { + "physicallyActive": 27, + "beginner": 46, + "intermediate": 62, + "advanced": 85, + "elite": 112 + } + }, + { + "metrics": { + "age": 85, + "weight": 102, + "gender": "male" + }, + "levels": { + "physicallyActive": 28, + "beginner": 46, + "intermediate": 62, + "advanced": 86, + "elite": 113 + } + }, + { + "metrics": { + "age": 85, + "weight": 113, + "gender": "male" + }, + "levels": { + "physicallyActive": 28, + "beginner": 47, + "intermediate": 63, + "advanced": 87, + "elite": 115 + } + }, + { + "metrics": { + "age": 85, + "weight": 136, + "gender": "male" + }, + "levels": { + "physicallyActive": 28, + "beginner": 49, + "intermediate": 65, + "advanced": 89, + "elite": 117 + } + }, + { + "metrics": { + "age": 17, + "weight": 57, + "gender": "female" + }, + "levels": { + "physicallyActive": 23, + "beginner": 32, + "intermediate": 44, + "advanced": 61, + "elite": 84 + } + }, + { + "metrics": { + "age": 17, + "weight": 68, + "gender": "female" + }, + "levels": { + "physicallyActive": 29, + "beginner": 41, + "intermediate": 56, + "advanced": 77, + "elite": 106 + } + }, + { + "metrics": { + "age": 17, + "weight": 79, + "gender": "female" + }, + "levels": { + "physicallyActive": 32, + "beginner": 44, + "intermediate": 61, + "advanced": 84, + "elite": 116 + } + }, + { + "metrics": { + "age": 17, + "weight": 91, + "gender": "female" + }, + "levels": { + "physicallyActive": 35, + "beginner": 48, + "intermediate": 66, + "advanced": 91, + "elite": 126 + } + }, + { + "metrics": { + "age": 17, + "weight": 102, + "gender": "female" + }, + "levels": { + "physicallyActive": 35, + "beginner": 48, + "intermediate": 66, + "advanced": 91, + "elite": 125 + } + }, + { + "metrics": { + "age": 17, + "weight": 113, + "gender": "female" + }, + "levels": { + "physicallyActive": 36, + "beginner": 50, + "intermediate": 68, + "advanced": 94, + "elite": 130 + } + }, + { + "metrics": { + "age": 17, + "weight": 136, + "gender": "female" + }, + "levels": { + "physicallyActive": 53, + "beginner": 73, + "intermediate": 100, + "advanced": 138, + "elite": 190 + } + }, + { + "metrics": { + "age": 25, + "weight": 57, + "gender": "female" + }, + "levels": { + "physicallyActive": 27, + "beginner": 37, + "intermediate": 51, + "advanced": 70, + "elite": 97 + } + }, + { + "metrics": { + "age": 25, + "weight": 68, + "gender": "female" + }, + "levels": { + "physicallyActive": 32, + "beginner": 45, + "intermediate": 61, + "advanced": 85, + "elite": 118 + } + }, + { + "metrics": { + "age": 25, + "weight": 79, + "gender": "female" + }, + "levels": { + "physicallyActive": 35, + "beginner": 49, + "intermediate": 67, + "advanced": 93, + "elite": 128 + } + }, + { + "metrics": { + "age": 25, + "weight": 91, + "gender": "female" + }, + "levels": { + "physicallyActive": 36, + "beginner": 50, + "intermediate": 69, + "advanced": 95, + "elite": 132 + } + }, + { + "metrics": { + "age": 25, + "weight": 102, + "gender": "female" + }, + "levels": { + "physicallyActive": 40, + "beginner": 55, + "intermediate": 76, + "advanced": 105, + "elite": 145 + } + }, + { + "metrics": { + "age": 25, + "weight": 113, + "gender": "female" + }, + "levels": { + "physicallyActive": 46, + "beginner": 63, + "intermediate": 87, + "advanced": 120, + "elite": 165 + } + }, + { + "metrics": { + "age": 25, + "weight": 136, + "gender": "female" + }, + "levels": { + "physicallyActive": 57, + "beginner": 75, + "intermediate": 105, + "advanced": 140, + "elite": 195 + } + }, + { + "metrics": { + "age": 35, + "weight": 57, + "gender": "female" + }, + "levels": { + "physicallyActive": 28, + "beginner": 43, + "intermediate": 65, + "advanced": 89, + "elite": 112 + } + }, + { + "metrics": { + "age": 35, + "weight": 68, + "gender": "female" + }, + "levels": { + "physicallyActive": 34, + "beginner": 48, + "intermediate": 71, + "advanced": 97, + "elite": 128 + } + }, + { + "metrics": { + "age": 35, + "weight": 79, + "gender": "female" + }, + "levels": { + "physicallyActive": 36, + "beginner": 55, + "intermediate": 80, + "advanced": 110, + "elite": 144 + } + }, + { + "metrics": { + "age": 35, + "weight": 91, + "gender": "female" + }, + "levels": { + "physicallyActive": 38, + "beginner": 59, + "intermediate": 85, + "advanced": 117, + "elite": 154 + } + }, + { + "metrics": { + "age": 35, + "weight": 102, + "gender": "female" + }, + "levels": { + "physicallyActive": 44, + "beginner": 62, + "intermediate": 89, + "advanced": 123, + "elite": 157 + } + }, + { + "metrics": { + "age": 35, + "weight": 113, + "gender": "female" + }, + "levels": { + "physicallyActive": 51, + "beginner": 68, + "intermediate": 97, + "advanced": 134, + "elite": 171 + } + }, + { + "metrics": { + "age": 35, + "weight": 136, + "gender": "female" + }, + "levels": { + "physicallyActive": 60, + "beginner": 81, + "intermediate": 114, + "advanced": 157, + "elite": 192 + } + }, + { + "metrics": { + "age": 45, + "weight": 57, + "gender": "female" + }, + "levels": { + "physicallyActive": 23, + "beginner": 38, + "intermediate": 41, + "advanced": 69, + "elite": 78 + } + }, + { + "metrics": { + "age": 45, + "weight": 68, + "gender": "female" + }, + "levels": { + "physicallyActive": 30, + "beginner": 49, + "intermediate": 55, + "advanced": 90, + "elite": 100 + } + }, + { + "metrics": { + "age": 45, + "weight": 79, + "gender": "female" + }, + "levels": { + "physicallyActive": 33, + "beginner": 53, + "intermediate": 59, + "advanced": 96, + "elite": 108 + } + }, + { + "metrics": { + "age": 45, + "weight": 91, + "gender": "female" + }, + "levels": { + "physicallyActive": 34, + "beginner": 55, + "intermediate": 62, + "advanced": 101, + "elite": 114 + } + }, + { + "metrics": { + "age": 45, + "weight": 102, + "gender": "female" + }, + "levels": { + "physicallyActive": 36, + "beginner": 58, + "intermediate": 65, + "advanced": 105, + "elite": 119 + } + }, + { + "metrics": { + "age": 45, + "weight": 113, + "gender": "female" + }, + "levels": { + "physicallyActive": 38, + "beginner": 61, + "intermediate": 69, + "advanced": 111, + "elite": 126 + } + }, + { + "metrics": { + "age": 45, + "weight": 136, + "gender": "female" + }, + "levels": { + "physicallyActive": 40, + "beginner": 64, + "intermediate": 73, + "advanced": 117, + "elite": 133 + } + }, + { + "metrics": { + "age": 55, + "weight": 57, + "gender": "female" + }, + "levels": { + "physicallyActive": 19, + "beginner": 33, + "intermediate": 40, + "advanced": 60, + "elite": 76 + } + }, + { + "metrics": { + "age": 55, + "weight": 68, + "gender": "female" + }, + "levels": { + "physicallyActive": 24, + "beginner": 41, + "intermediate": 54, + "advanced": 74, + "elite": 97 + } + }, + { + "metrics": { + "age": 55, + "weight": 79, + "gender": "female" + }, + "levels": { + "physicallyActive": 25, + "beginner": 42, + "intermediate": 56, + "advanced": 76, + "elite": 102 + } + }, + { + "metrics": { + "age": 55, + "weight": 91, + "gender": "female" + }, + "levels": { + "physicallyActive": 26, + "beginner": 44, + "intermediate": 59, + "advanced": 81, + "elite": 107 + } + }, + { + "metrics": { + "age": 55, + "weight": 102, + "gender": "female" + }, + "levels": { + "physicallyActive": 29, + "beginner": 49, + "intermediate": 64, + "advanced": 90, + "elite": 118 + } + }, + { + "metrics": { + "age": 55, + "weight": 113, + "gender": "female" + }, + "levels": { + "physicallyActive": 29, + "beginner": 50, + "intermediate": 67, + "advanced": 92, + "elite": 121 + } + }, + { + "metrics": { + "age": 55, + "weight": 136, + "gender": "female" + }, + "levels": { + "physicallyActive": 35, + "beginner": 59, + "intermediate": 70, + "advanced": 111, + "elite": 130 + } + }, + { + "metrics": { + "age": 65, + "weight": 57, + "gender": "female" + }, + "levels": { + "physicallyActive": 15, + "beginner": 26, + "intermediate": 35, + "advanced": 48, + "elite": 63 + } + }, + { + "metrics": { + "age": 65, + "weight": 68, + "gender": "female" + }, + "levels": { + "physicallyActive": 18, + "beginner": 33, + "intermediate": 44, + "advanced": 62, + "elite": 81 + } + }, + { + "metrics": { + "age": 65, + "weight": 79, + "gender": "female" + }, + "levels": { + "physicallyActive": 20, + "beginner": 35, + "intermediate": 47, + "advanced": 65, + "elite": 83 + } + }, + { + "metrics": { + "age": 65, + "weight": 91, + "gender": "female" + }, + "levels": { + "physicallyActive": 22, + "beginner": 37, + "intermediate": 48, + "advanced": 66, + "elite": 85 + } + }, + { + "metrics": { + "age": 65, + "weight": 102, + "gender": "female" + }, + "levels": { + "physicallyActive": 24, + "beginner": 40, + "intermediate": 54, + "advanced": 74, + "elite": 93 + } + }, + { + "metrics": { + "age": 65, + "weight": 113, + "gender": "female" + }, + "levels": { + "physicallyActive": 25, + "beginner": 42, + "intermediate": 56, + "advanced": 78, + "elite": 99 + } + }, + { + "metrics": { + "age": 65, + "weight": 136, + "gender": "female" + }, + "levels": { + "physicallyActive": 26, + "beginner": 45, + "intermediate": 58, + "advanced": 79, + "elite": 102 + } + }, + { + "metrics": { + "age": 75, + "weight": 57, + "gender": "female" + }, + "levels": { + "physicallyActive": 14, + "beginner": 24, + "intermediate": 32, + "advanced": 44, + "elite": 58 + } + }, + { + "metrics": { + "age": 75, + "weight": 68, + "gender": "female" + }, + "levels": { + "physicallyActive": 15, + "beginner": 25, + "intermediate": 33, + "advanced": 46, + "elite": 60 + } + }, + { + "metrics": { + "age": 75, + "weight": 79, + "gender": "female" + }, + "levels": { + "physicallyActive": 16, + "beginner": 27, + "intermediate": 36, + "advanced": 50, + "elite": 65 + } + }, + { + "metrics": { + "age": 75, + "weight": 91, + "gender": "female" + }, + "levels": { + "physicallyActive": 17, + "beginner": 28, + "intermediate": 37, + "advanced": 52, + "elite": 69 + } + }, + { + "metrics": { + "age": 75, + "weight": 102, + "gender": "female" + }, + "levels": { + "physicallyActive": 17, + "beginner": 29, + "intermediate": 39, + "advanced": 54, + "elite": 71 + } + }, + { + "metrics": { + "age": 75, + "weight": 113, + "gender": "female" + }, + "levels": { + "physicallyActive": 18, + "beginner": 30, + "intermediate": 40, + "advanced": 55, + "elite": 73 + } + }, + { + "metrics": { + "age": 75, + "weight": 136, + "gender": "female" + }, + "levels": { + "physicallyActive": 18, + "beginner": 30, + "intermediate": 40, + "advanced": 55, + "elite": 73 + } + }, + { + "metrics": { + "age": 85, + "weight": 57, + "gender": "female" + }, + "levels": { + "physicallyActive": 11, + "beginner": 19, + "intermediate": 25, + "advanced": 35, + "elite": 46 + } + }, + { + "metrics": { + "age": 85, + "weight": 68, + "gender": "female" + }, + "levels": { + "physicallyActive": 11, + "beginner": 20, + "intermediate": 26, + "advanced": 36, + "elite": 48 + } + }, + { + "metrics": { + "age": 85, + "weight": 79, + "gender": "female" + }, + "levels": { + "physicallyActive": 12, + "beginner": 21, + "intermediate": 28, + "advanced": 39, + "elite": 52 + } + }, + { + "metrics": { + "age": 85, + "weight": 91, + "gender": "female" + }, + "levels": { + "physicallyActive": 13, + "beginner": 23, + "intermediate": 30, + "advanced": 41, + "elite": 54 + } + }, + { + "metrics": { + "age": 85, + "weight": 102, + "gender": "female" + }, + "levels": { + "physicallyActive": 13, + "beginner": 23, + "intermediate": 31, + "advanced": 42, + "elite": 56 + } + }, + { + "metrics": { + "age": 85, + "weight": 113, + "gender": "female" + }, + "levels": { + "physicallyActive": 14, + "beginner": 24, + "intermediate": 32, + "advanced": 43, + "elite": 57 + } + }, + { + "metrics": { + "age": 85, + "weight": 136, + "gender": "female" + }, + "levels": { + "physicallyActive": 14, + "beginner": 24, + "intermediate": 32, + "advanced": 43, + "elite": 57 + } + } + ], + "Deadlift": [ + { + "metrics": { + "age": 17, + "weight": 57, + "gender": "male" + }, + "levels": { + "physicallyActive": 45, + "beginner": 74, + "intermediate": 93, + "advanced": 103, + "elite": 115 + } + }, + { + "metrics": { + "age": 17, + "weight": 68, + "gender": "male" + }, + "levels": { + "physicallyActive": 58, + "beginner": 97, + "intermediate": 121, + "advanced": 134, + "elite": 149 + } + }, + { + "metrics": { + "age": 17, + "weight": 79, + "gender": "male" + }, + "levels": { + "physicallyActive": 73, + "beginner": 122, + "intermediate": 152, + "advanced": 169, + "elite": 188 + } + }, + { + "metrics": { + "age": 17, + "weight": 91, + "gender": "male" + }, + "levels": { + "physicallyActive": 77, + "beginner": 129, + "intermediate": 161, + "advanced": 179, + "elite": 199 + } + }, + { + "metrics": { + "age": 17, + "weight": 102, + "gender": "male" + }, + "levels": { + "physicallyActive": 81, + "beginner": 135, + "intermediate": 169, + "advanced": 188, + "elite": 209 + } + }, + { + "metrics": { + "age": 17, + "weight": 113, + "gender": "male" + }, + "levels": { + "physicallyActive": 82, + "beginner": 137, + "intermediate": 172, + "advanced": 191, + "elite": 212 + } + }, + { + "metrics": { + "age": 17, + "weight": 136, + "gender": "male" + }, + "levels": { + "physicallyActive": 84, + "beginner": 139, + "intermediate": 174, + "advanced": 194, + "elite": 215 + } + }, + { + "metrics": { + "age": 25, + "weight": 57, + "gender": "male" + }, + "levels": { + "physicallyActive": 47, + "beginner": 81, + "intermediate": 101, + "advanced": 127, + "elite": 141 + } + }, + { + "metrics": { + "age": 25, + "weight": 68, + "gender": "male" + }, + "levels": { + "physicallyActive": 64, + "beginner": 112, + "intermediate": 139, + "advanced": 186, + "elite": 207 + } + }, + { + "metrics": { + "age": 25, + "weight": 79, + "gender": "male" + }, + "levels": { + "physicallyActive": 76, + "beginner": 131, + "intermediate": 164, + "advanced": 219, + "elite": 243 + } + }, + { + "metrics": { + "age": 25, + "weight": 91, + "gender": "male" + }, + "levels": { + "physicallyActive": 83, + "beginner": 144, + "intermediate": 180, + "advanced": 240, + "elite": 266 + } + }, + { + "metrics": { + "age": 25, + "weight": 102, + "gender": "male" + }, + "levels": { + "physicallyActive": 84, + "beginner": 146, + "intermediate": 182, + "advanced": 243, + "elite": 270 + } + }, + { + "metrics": { + "age": 25, + "weight": 113, + "gender": "male" + }, + "levels": { + "physicallyActive": 85, + "beginner": 147, + "intermediate": 184, + "advanced": 245, + "elite": 273 + } + }, + { + "metrics": { + "age": 25, + "weight": 136, + "gender": "male" + }, + "levels": { + "physicallyActive": 86, + "beginner": 149, + "intermediate": 187, + "advanced": 249, + "elite": 276 + } + }, + { + "metrics": { + "age": 35, + "weight": 57, + "gender": "male" + }, + "levels": { + "physicallyActive": 51, + "beginner": 89, + "intermediate": 112, + "advanced": 149, + "elite": 175 + } + }, + { + "metrics": { + "age": 35, + "weight": 68, + "gender": "male" + }, + "levels": { + "physicallyActive": 64, + "beginner": 112, + "intermediate": 140, + "advanced": 186, + "elite": 219 + } + }, + { + "metrics": { + "age": 35, + "weight": 79, + "gender": "male" + }, + "levels": { + "physicallyActive": 76, + "beginner": 132, + "intermediate": 165, + "advanced": 220, + "elite": 259 + } + }, + { + "metrics": { + "age": 35, + "weight": 91, + "gender": "male" + }, + "levels": { + "physicallyActive": 81, + "beginner": 142, + "intermediate": 177, + "advanced": 236, + "elite": 278 + } + }, + { + "metrics": { + "age": 35, + "weight": 102, + "gender": "male" + }, + "levels": { + "physicallyActive": 83, + "beginner": 145, + "intermediate": 181, + "advanced": 242, + "elite": 284 + } + }, + { + "metrics": { + "age": 35, + "weight": 113, + "gender": "male" + }, + "levels": { + "physicallyActive": 84, + "beginner": 146, + "intermediate": 183, + "advanced": 244, + "elite": 287 + } + }, + { + "metrics": { + "age": 35, + "weight": 136, + "gender": "male" + }, + "levels": { + "physicallyActive": 89, + "beginner": 154, + "intermediate": 192, + "advanced": 257, + "elite": 302 + } + }, + { + "metrics": { + "age": 45, + "weight": 57, + "gender": "male" + }, + "levels": { + "physicallyActive": 46, + "beginner": 80, + "intermediate": 100, + "advanced": 118, + "elite": 131 + } + }, + { + "metrics": { + "age": 45, + "weight": 68, + "gender": "male" + }, + "levels": { + "physicallyActive": 53, + "beginner": 92, + "intermediate": 115, + "advanced": 154, + "elite": 181 + } + }, + { + "metrics": { + "age": 45, + "weight": 79, + "gender": "male" + }, + "levels": { + "physicallyActive": 63, + "beginner": 109, + "intermediate": 137, + "advanced": 182, + "elite": 214 + } + }, + { + "metrics": { + "age": 45, + "weight": 91, + "gender": "male" + }, + "levels": { + "physicallyActive": 65, + "beginner": 113, + "intermediate": 141, + "advanced": 188, + "elite": 222 + } + }, + { + "metrics": { + "age": 45, + "weight": 102, + "gender": "male" + }, + "levels": { + "physicallyActive": 71, + "beginner": 124, + "intermediate": 154, + "advanced": 206, + "elite": 242 + } + }, + { + "metrics": { + "age": 45, + "weight": 113, + "gender": "male" + }, + "levels": { + "physicallyActive": 75, + "beginner": 130, + "intermediate": 162, + "advanced": 217, + "elite": 255 + } + }, + { + "metrics": { + "age": 45, + "weight": 136, + "gender": "male" + }, + "levels": { + "physicallyActive": 76, + "beginner": 133, + "intermediate": 166, + "advanced": 221, + "elite": 260 + } + }, + { + "metrics": { + "age": 55, + "weight": 57, + "gender": "male" + }, + "levels": { + "physicallyActive": 40, + "beginner": 69, + "intermediate": 86, + "advanced": 102, + "elite": 113 + } + }, + { + "metrics": { + "age": 55, + "weight": 68, + "gender": "male" + }, + "levels": { + "physicallyActive": 48, + "beginner": 84, + "intermediate": 105, + "advanced": 140, + "elite": 164 + } + }, + { + "metrics": { + "age": 55, + "weight": 79, + "gender": "male" + }, + "levels": { + "physicallyActive": 56, + "beginner": 97, + "intermediate": 121, + "advanced": 161, + "elite": 190 + } + }, + { + "metrics": { + "age": 55, + "weight": 91, + "gender": "male" + }, + "levels": { + "physicallyActive": 60, + "beginner": 104, + "intermediate": 130, + "advanced": 173, + "elite": 204 + } + }, + { + "metrics": { + "age": 55, + "weight": 102, + "gender": "male" + }, + "levels": { + "physicallyActive": 63, + "beginner": 110, + "intermediate": 138, + "advanced": 183, + "elite": 216 + } + }, + { + "metrics": { + "age": 55, + "weight": 113, + "gender": "male" + }, + "levels": { + "physicallyActive": 64, + "beginner": 111, + "intermediate": 139, + "advanced": 185, + "elite": 218 + } + }, + { + "metrics": { + "age": 55, + "weight": 136, + "gender": "male" + }, + "levels": { + "physicallyActive": 65, + "beginner": 114, + "intermediate": 142, + "advanced": 190, + "elite": 223 + } + }, + { + "metrics": { + "age": 65, + "weight": 57, + "gender": "male" + }, + "levels": { + "physicallyActive": 35, + "beginner": 61, + "intermediate": 79, + "advanced": 95, + "elite": 109 + } + }, + { + "metrics": { + "age": 65, + "weight": 68, + "gender": "male" + }, + "levels": { + "physicallyActive": 46, + "beginner": 79, + "intermediate": 103, + "advanced": 124, + "elite": 142 + } + }, + { + "metrics": { + "age": 65, + "weight": 79, + "gender": "male" + }, + "levels": { + "physicallyActive": 52, + "beginner": 90, + "intermediate": 117, + "advanced": 141, + "elite": 162 + } + }, + { + "metrics": { + "age": 65, + "weight": 91, + "gender": "male" + }, + "levels": { + "physicallyActive": 57, + "beginner": 98, + "intermediate": 128, + "advanced": 155, + "elite": 177 + } + }, + { + "metrics": { + "age": 65, + "weight": 102, + "gender": "male" + }, + "levels": { + "physicallyActive": 61, + "beginner": 107, + "intermediate": 138, + "advanced": 167, + "elite": 191 + } + }, + { + "metrics": { + "age": 65, + "weight": 113, + "gender": "male" + }, + "levels": { + "physicallyActive": 62, + "beginner": 109, + "intermediate": 140, + "advanced": 170, + "elite": 194 + } + }, + { + "metrics": { + "age": 65, + "weight": 136, + "gender": "male" + }, + "levels": { + "physicallyActive": 64, + "beginner": 112, + "intermediate": 144, + "advanced": 175, + "elite": 200 + } + }, + { + "metrics": { + "age": 75, + "weight": 57, + "gender": "male" + }, + "levels": { + "physicallyActive": 29, + "beginner": 51, + "intermediate": 68, + "advanced": 85, + "elite": 98 + } + }, + { + "metrics": { + "age": 75, + "weight": 68, + "gender": "male" + }, + "levels": { + "physicallyActive": 36, + "beginner": 62, + "intermediate": 82, + "advanced": 103, + "elite": 121 + } + }, + { + "metrics": { + "age": 75, + "weight": 79, + "gender": "male" + }, + "levels": { + "physicallyActive": 42, + "beginner": 74, + "intermediate": 98, + "advanced": 123, + "elite": 144 + } + }, + { + "metrics": { + "age": 75, + "weight": 91, + "gender": "male" + }, + "levels": { + "physicallyActive": 45, + "beginner": 79, + "intermediate": 105, + "advanced": 131, + "elite": 155 + } + }, + { + "metrics": { + "age": 75, + "weight": 102, + "gender": "male" + }, + "levels": { + "physicallyActive": 49, + "beginner": 86, + "intermediate": 114, + "advanced": 143, + "elite": 168 + } + }, + { + "metrics": { + "age": 75, + "weight": 113, + "gender": "male" + }, + "levels": { + "physicallyActive": 50, + "beginner": 87, + "intermediate": 116, + "advanced": 145, + "elite": 170 + } + }, + { + "metrics": { + "age": 75, + "weight": 136, + "gender": "male" + }, + "levels": { + "physicallyActive": 52, + "beginner": 90, + "intermediate": 120, + "advanced": 150, + "elite": 176 + } + }, + { + "metrics": { + "age": 85, + "weight": 57, + "gender": "male" + }, + "levels": { + "physicallyActive": 21, + "beginner": 36, + "intermediate": 48, + "advanced": 60, + "elite": 68 + } + }, + { + "metrics": { + "age": 85, + "weight": 68, + "gender": "male" + }, + "levels": { + "physicallyActive": 25, + "beginner": 43, + "intermediate": 58, + "advanced": 72, + "elite": 85 + } + }, + { + "metrics": { + "age": 85, + "weight": 79, + "gender": "male" + }, + "levels": { + "physicallyActive": 30, + "beginner": 51, + "intermediate": 69, + "advanced": 86, + "elite": 101 + } + }, + { + "metrics": { + "age": 85, + "weight": 91, + "gender": "male" + }, + "levels": { + "physicallyActive": 32, + "beginner": 55, + "intermediate": 74, + "advanced": 92, + "elite": 108 + } + }, + { + "metrics": { + "age": 85, + "weight": 102, + "gender": "male" + }, + "levels": { + "physicallyActive": 35, + "beginner": 60, + "intermediate": 80, + "advanced": 100, + "elite": 118 + } + }, + { + "metrics": { + "age": 85, + "weight": 113, + "gender": "male" + }, + "levels": { + "physicallyActive": 35, + "beginner": 61, + "intermediate": 81, + "advanced": 101, + "elite": 119 + } + }, + { + "metrics": { + "age": 85, + "weight": 136, + "gender": "male" + }, + "levels": { + "physicallyActive": 36, + "beginner": 63, + "intermediate": 84, + "advanced": 105, + "elite": 123 + } + }, + { + "metrics": { + "age": 17, + "weight": 57, + "gender": "female" + }, + "levels": { + "physicallyActive": 17, + "beginner": 39, + "intermediate": 51, + "advanced": 62, + "elite": 82 + } + }, + { + "metrics": { + "age": 17, + "weight": 68, + "gender": "female" + }, + "levels": { + "physicallyActive": 22, + "beginner": 51, + "intermediate": 65, + "advanced": 80, + "elite": 102 + } + }, + { + "metrics": { + "age": 17, + "weight": 79, + "gender": "female" + }, + "levels": { + "physicallyActive": 24, + "beginner": 56, + "intermediate": 72, + "advanced": 88, + "elite": 108 + } + }, + { + "metrics": { + "age": 17, + "weight": 91, + "gender": "female" + }, + "levels": { + "physicallyActive": 25, + "beginner": 59, + "intermediate": 75, + "advanced": 92, + "elite": 113 + } + }, + { + "metrics": { + "age": 17, + "weight": 102, + "gender": "female" + }, + "levels": { + "physicallyActive": 26, + "beginner": 61, + "intermediate": 79, + "advanced": 99, + "elite": 118 + } + }, + { + "metrics": { + "age": 17, + "weight": 113, + "gender": "female" + }, + "levels": { + "physicallyActive": 27, + "beginner": 62, + "intermediate": 80, + "advanced": 103, + "elite": 123 + } + }, + { + "metrics": { + "age": 17, + "weight": 136, + "gender": "female" + }, + "levels": { + "physicallyActive": 29, + "beginner": 69, + "intermediate": 89, + "advanced": 109, + "elite": 129 + } + }, + { + "metrics": { + "age": 25, + "weight": 57, + "gender": "female" + }, + "levels": { + "physicallyActive": 25, + "beginner": 58, + "intermediate": 74, + "advanced": 91, + "elite": 120 + } + }, + { + "metrics": { + "age": 25, + "weight": 68, + "gender": "female" + }, + "levels": { + "physicallyActive": 30, + "beginner": 70, + "intermediate": 90, + "advanced": 110, + "elite": 140 + } + }, + { + "metrics": { + "age": 25, + "weight": 79, + "gender": "female" + }, + "levels": { + "physicallyActive": 33, + "beginner": 77, + "intermediate": 99, + "advanced": 121, + "elite": 150 + } + }, + { + "metrics": { + "age": 25, + "weight": 91, + "gender": "female" + }, + "levels": { + "physicallyActive": 34, + "beginner": 79, + "intermediate": 101, + "advanced": 124, + "elite": 154 + } + }, + { + "metrics": { + "age": 25, + "weight": 102, + "gender": "female" + }, + "levels": { + "physicallyActive": 35, + "beginner": 82, + "intermediate": 107, + "advanced": 133, + "elite": 162 + } + }, + { + "metrics": { + "age": 25, + "weight": 113, + "gender": "female" + }, + "levels": { + "physicallyActive": 35, + "beginner": 82, + "intermediate": 106, + "advanced": 134, + "elite": 164 + } + }, + { + "metrics": { + "age": 25, + "weight": 136, + "gender": "female" + }, + "levels": { + "physicallyActive": 36, + "beginner": 84, + "intermediate": 108, + "advanced": 132, + "elite": 159 + } + }, + { + "metrics": { + "age": 35, + "weight": 57, + "gender": "female" + }, + "levels": { + "physicallyActive": 30, + "beginner": 70, + "intermediate": 90, + "advanced": 110, + "elite": 145 + } + }, + { + "metrics": { + "age": 35, + "weight": 68, + "gender": "female" + }, + "levels": { + "physicallyActive": 32, + "beginner": 74, + "intermediate": 96, + "advanced": 117, + "elite": 149 + } + }, + { + "metrics": { + "age": 35, + "weight": 79, + "gender": "female" + }, + "levels": { + "physicallyActive": 35, + "beginner": 81, + "intermediate": 104, + "advanced": 127, + "elite": 157 + } + }, + { + "metrics": { + "age": 35, + "weight": 91, + "gender": "female" + }, + "levels": { + "physicallyActive": 36, + "beginner": 83, + "intermediate": 107, + "advanced": 131, + "elite": 162 + } + }, + { + "metrics": { + "age": 35, + "weight": 102, + "gender": "female" + }, + "levels": { + "physicallyActive": 39, + "beginner": 91, + "intermediate": 118, + "advanced": 147, + "elite": 179 + } + }, + { + "metrics": { + "age": 35, + "weight": 113, + "gender": "female" + }, + "levels": { + "physicallyActive": 40, + "beginner": 93, + "intermediate": 119, + "advanced": 151, + "elite": 185 + } + }, + { + "metrics": { + "age": 35, + "weight": 136, + "gender": "female" + }, + "levels": { + "physicallyActive": 40, + "beginner": 94, + "intermediate": 120, + "advanced": 147, + "elite": 178 + } + }, + { + "metrics": { + "age": 45, + "weight": 57, + "gender": "female" + }, + "levels": { + "physicallyActive": 23, + "beginner": 54, + "intermediate": 70, + "advanced": 85, + "elite": 112 + } + }, + { + "metrics": { + "age": 45, + "weight": 68, + "gender": "female" + }, + "levels": { + "physicallyActive": 29, + "beginner": 67, + "intermediate": 86, + "advanced": 105, + "elite": 133 + } + }, + { + "metrics": { + "age": 45, + "weight": 79, + "gender": "female" + }, + "levels": { + "physicallyActive": 30, + "beginner": 69, + "intermediate": 89, + "advanced": 109, + "elite": 134 + } + }, + { + "metrics": { + "age": 45, + "weight": 91, + "gender": "female" + }, + "levels": { + "physicallyActive": 32, + "beginner": 74, + "intermediate": 95, + "advanced": 116, + "elite": 143 + } + }, + { + "metrics": { + "age": 45, + "weight": 102, + "gender": "female" + }, + "levels": { + "physicallyActive": 33, + "beginner": 78, + "intermediate": 101, + "advanced": 126, + "elite": 153 + } + }, + { + "metrics": { + "age": 45, + "weight": 113, + "gender": "female" + }, + "levels": { + "physicallyActive": 35, + "beginner": 81, + "intermediate": 104, + "advanced": 132, + "elite": 160 + } + }, + { + "metrics": { + "age": 45, + "weight": 136, + "gender": "female" + }, + "levels": { + "physicallyActive": 35, + "beginner": 82, + "intermediate": 106, + "advanced": 129, + "elite": 156 + } + }, + { + "metrics": { + "age": 55, + "weight": 57, + "gender": "female" + }, + "levels": { + "physicallyActive": 22, + "beginner": 51, + "intermediate": 65, + "advanced": 80, + "elite": 105 + } + }, + { + "metrics": { + "age": 55, + "weight": 68, + "gender": "female" + }, + "levels": { + "physicallyActive": 24, + "beginner": 57, + "intermediate": 73, + "advanced": 89, + "elite": 114 + } + }, + { + "metrics": { + "age": 55, + "weight": 79, + "gender": "female" + }, + "levels": { + "physicallyActive": 26, + "beginner": 60, + "intermediate": 78, + "advanced": 95, + "elite": 117 + } + }, + { + "metrics": { + "age": 55, + "weight": 91, + "gender": "female" + }, + "levels": { + "physicallyActive": 28, + "beginner": 65, + "intermediate": 83, + "advanced": 102, + "elite": 126 + } + }, + { + "metrics": { + "age": 55, + "weight": 102, + "gender": "female" + }, + "levels": { + "physicallyActive": 29, + "beginner": 69, + "intermediate": 90, + "advanced": 112, + "elite": 136 + } + }, + { + "metrics": { + "age": 55, + "weight": 113, + "gender": "female" + }, + "levels": { + "physicallyActive": 30, + "beginner": 69, + "intermediate": 89, + "advanced": 114, + "elite": 137 + } + }, + { + "metrics": { + "age": 55, + "weight": 136, + "gender": "female" + }, + "levels": { + "physicallyActive": 31, + "beginner": 72, + "intermediate": 92, + "advanced": 113, + "elite": 135 + } + }, + { + "metrics": { + "age": 65, + "weight": 57, + "gender": "female" + }, + "levels": { + "physicallyActive": 18, + "beginner": 43, + "intermediate": 55, + "advanced": 67, + "elite": 89 + } + }, + { + "metrics": { + "age": 65, + "weight": 68, + "gender": "female" + }, + "levels": { + "physicallyActive": 23, + "beginner": 53, + "intermediate": 69, + "advanced": 84, + "elite": 107 + } + }, + { + "metrics": { + "age": 65, + "weight": 79, + "gender": "female" + }, + "levels": { + "physicallyActive": 24, + "beginner": 56, + "intermediate": 72, + "advanced": 89, + "elite": 109 + } + }, + { + "metrics": { + "age": 65, + "weight": 91, + "gender": "female" + }, + "levels": { + "physicallyActive": 25, + "beginner": 58, + "intermediate": 74, + "advanced": 91, + "elite": 112 + } + }, + { + "metrics": { + "age": 65, + "weight": 102, + "gender": "female" + }, + "levels": { + "physicallyActive": 25, + "beginner": 60, + "intermediate": 77, + "advanced": 97, + "elite": 116 + } + }, + { + "metrics": { + "age": 65, + "weight": 113, + "gender": "female" + }, + "levels": { + "physicallyActive": 26, + "beginner": 60, + "intermediate": 77, + "advanced": 99, + "elite": 118 + } + }, + { + "metrics": { + "age": 65, + "weight": 136, + "gender": "female" + }, + "levels": { + "physicallyActive": 26, + "beginner": 60, + "intermediate": 78, + "advanced": 95, + "elite": 112 + } + }, + { + "metrics": { + "age": 75, + "weight": 57, + "gender": "female" + }, + "levels": { + "physicallyActive": 18, + "beginner": 42, + "intermediate": 53, + "advanced": 66, + "elite": 84 + } + }, + { + "metrics": { + "age": 75, + "weight": 68, + "gender": "female" + }, + "levels": { + "physicallyActive": 18, + "beginner": 43, + "intermediate": 55, + "advanced": 67, + "elite": 86 + } + }, + { + "metrics": { + "age": 75, + "weight": 79, + "gender": "female" + }, + "levels": { + "physicallyActive": 20, + "beginner": 46, + "intermediate": 59, + "advanced": 72, + "elite": 92 + } + }, + { + "metrics": { + "age": 75, + "weight": 91, + "gender": "female" + }, + "levels": { + "physicallyActive": 20, + "beginner": 47, + "intermediate": 60, + "advanced": 73, + "elite": 93 + } + }, + { + "metrics": { + "age": 75, + "weight": 102, + "gender": "female" + }, + "levels": { + "physicallyActive": 20, + "beginner": 47, + "intermediate": 61, + "advanced": 79, + "elite": 94 + } + }, + { + "metrics": { + "age": 75, + "weight": 113, + "gender": "female" + }, + "levels": { + "physicallyActive": 20, + "beginner": 47, + "intermediate": 61, + "advanced": 79, + "elite": 95 + } + }, + { + "metrics": { + "age": 75, + "weight": 136, + "gender": "female" + }, + "levels": { + "physicallyActive": 20, + "beginner": 48, + "intermediate": 61, + "advanced": 79, + "elite": 95 + } + }, + { + "metrics": { + "age": 85, + "weight": 57, + "gender": "female" + }, + "levels": { + "physicallyActive": 15, + "beginner": 34, + "intermediate": 44, + "advanced": 53, + "elite": 68 + } + }, + { + "metrics": { + "age": 85, + "weight": 68, + "gender": "female" + }, + "levels": { + "physicallyActive": 15, + "beginner": 35, + "intermediate": 45, + "advanced": 55, + "elite": 69 + } + }, + { + "metrics": { + "age": 85, + "weight": 79, + "gender": "female" + }, + "levels": { + "physicallyActive": 16, + "beginner": 37, + "intermediate": 48, + "advanced": 58, + "elite": 74 + } + }, + { + "metrics": { + "age": 85, + "weight": 91, + "gender": "female" + }, + "levels": { + "physicallyActive": 16, + "beginner": 38, + "intermediate": 48, + "advanced": 59, + "elite": 75 + } + }, + { + "metrics": { + "age": 85, + "weight": 102, + "gender": "female" + }, + "levels": { + "physicallyActive": 16, + "beginner": 38, + "intermediate": 50, + "advanced": 65, + "elite": 76 + } + }, + { + "metrics": { + "age": 85, + "weight": 113, + "gender": "female" + }, + "levels": { + "physicallyActive": 16, + "beginner": 38, + "intermediate": 49, + "advanced": 65, + "elite": 77 + } + }, + { + "metrics": { + "age": 85, + "weight": 136, + "gender": "female" + }, + "levels": { + "physicallyActive": 17, + "beginner": 39, + "intermediate": 50, + "advanced": 65, + "elite": 77 + } + } + ], + "Bench Press": [ + { + "metrics": { + "age": 17, + "weight": 57, + "gender": "male" + }, + "levels": { + "physicallyActive": 34, + "beginner": 47, + "intermediate": 61, + "advanced": 74, + "elite": 85 + } + }, + { + "metrics": { + "age": 17, + "weight": 68, + "gender": "male" + }, + "levels": { + "physicallyActive": 42, + "beginner": 59, + "intermediate": 76, + "advanced": 92, + "elite": 107 + } + }, + { + "metrics": { + "age": 17, + "weight": 79, + "gender": "male" + }, + "levels": { + "physicallyActive": 43, + "beginner": 60, + "intermediate": 77, + "advanced": 94, + "elite": 110 + } + }, + { + "metrics": { + "age": 17, + "weight": 91, + "gender": "male" + }, + "levels": { + "physicallyActive": 51, + "beginner": 71, + "intermediate": 91, + "advanced": 111, + "elite": 132 + } + }, + { + "metrics": { + "age": 17, + "weight": 102, + "gender": "male" + }, + "levels": { + "physicallyActive": 53, + "beginner": 74, + "intermediate": 95, + "advanced": 116, + "elite": 134 + } + }, + { + "metrics": { + "age": 17, + "weight": 113, + "gender": "male" + }, + "levels": { + "physicallyActive": 53, + "beginner": 74, + "intermediate": 96, + "advanced": 117, + "elite": 137 + } + }, + { + "metrics": { + "age": 17, + "weight": 136, + "gender": "male" + }, + "levels": { + "physicallyActive": 53, + "beginner": 74, + "intermediate": 95, + "advanced": 116, + "elite": 138 + } + }, + { + "metrics": { + "age": 25, + "weight": 57, + "gender": "male" + }, + "levels": { + "physicallyActive": 36, + "beginner": 51, + "intermediate": 65, + "advanced": 80, + "elite": 92 + } + }, + { + "metrics": { + "age": 25, + "weight": 68, + "gender": "male" + }, + "levels": { + "physicallyActive": 50, + "beginner": 70, + "intermediate": 90, + "advanced": 110, + "elite": 130 + } + }, + { + "metrics": { + "age": 25, + "weight": 79, + "gender": "male" + }, + "levels": { + "physicallyActive": 50, + "beginner": 70, + "intermediate": 90, + "advanced": 110, + "elite": 150 + } + }, + { + "metrics": { + "age": 25, + "weight": 91, + "gender": "male" + }, + "levels": { + "physicallyActive": 52, + "beginner": 73, + "intermediate": 93, + "advanced": 114, + "elite": 161 + } + }, + { + "metrics": { + "age": 25, + "weight": 102, + "gender": "male" + }, + "levels": { + "physicallyActive": 55, + "beginner": 77, + "intermediate": 99, + "advanced": 121, + "elite": 170 + } + }, + { + "metrics": { + "age": 25, + "weight": 113, + "gender": "male" + }, + "levels": { + "physicallyActive": 59, + "beginner": 82, + "intermediate": 106, + "advanced": 129, + "elite": 181 + } + }, + { + "metrics": { + "age": 25, + "weight": 136, + "gender": "male" + }, + "levels": { + "physicallyActive": 61, + "beginner": 85, + "intermediate": 109, + "advanced": 133, + "elite": 182 + } + }, + { + "metrics": { + "age": 35, + "weight": 57, + "gender": "male" + }, + "levels": { + "physicallyActive": 39, + "beginner": 55, + "intermediate": 71, + "advanced": 87, + "elite": 114 + } + }, + { + "metrics": { + "age": 35, + "weight": 68, + "gender": "male" + }, + "levels": { + "physicallyActive": 53, + "beginner": 75, + "intermediate": 96, + "advanced": 117, + "elite": 155 + } + }, + { + "metrics": { + "age": 35, + "weight": 79, + "gender": "male" + }, + "levels": { + "physicallyActive": 54, + "beginner": 75, + "intermediate": 97, + "advanced": 119, + "elite": 156 + } + }, + { + "metrics": { + "age": 35, + "weight": 91, + "gender": "male" + }, + "levels": { + "physicallyActive": 59, + "beginner": 83, + "intermediate": 107, + "advanced": 131, + "elite": 173 + } + }, + { + "metrics": { + "age": 35, + "weight": 102, + "gender": "male" + }, + "levels": { + "physicallyActive": 61, + "beginner": 84, + "intermediate": 108, + "advanced": 135, + "elite": 176 + } + }, + { + "metrics": { + "age": 35, + "weight": 113, + "gender": "male" + }, + "levels": { + "physicallyActive": 62, + "beginner": 85, + "intermediate": 110, + "advanced": 139, + "elite": 177 + } + }, + { + "metrics": { + "age": 35, + "weight": 136, + "gender": "male" + }, + "levels": { + "physicallyActive": 67, + "beginner": 94, + "intermediate": 121, + "advanced": 148, + "elite": 195 + } + }, + { + "metrics": { + "age": 45, + "weight": 57, + "gender": "male" + }, + "levels": { + "physicallyActive": 37, + "beginner": 52, + "intermediate": 66, + "advanced": 81, + "elite": 105 + } + }, + { + "metrics": { + "age": 45, + "weight": 68, + "gender": "male" + }, + "levels": { + "physicallyActive": 41, + "beginner": 57, + "intermediate": 73, + "advanced": 89, + "elite": 116 + } + }, + { + "metrics": { + "age": 45, + "weight": 79, + "gender": "male" + }, + "levels": { + "physicallyActive": 48, + "beginner": 67, + "intermediate": 86, + "advanced": 105, + "elite": 135 + } + }, + { + "metrics": { + "age": 45, + "weight": 91, + "gender": "male" + }, + "levels": { + "physicallyActive": 54, + "beginner": 75, + "intermediate": 97, + "advanced": 118, + "elite": 143 + } + }, + { + "metrics": { + "age": 45, + "weight": 102, + "gender": "male" + }, + "levels": { + "physicallyActive": 56, + "beginner": 78, + "intermediate": 100, + "advanced": 122, + "elite": 154 + } + }, + { + "metrics": { + "age": 45, + "weight": 113, + "gender": "male" + }, + "levels": { + "physicallyActive": 58, + "beginner": 81, + "intermediate": 104, + "advanced": 127, + "elite": 164 + } + }, + { + "metrics": { + "age": 45, + "weight": 136, + "gender": "male" + }, + "levels": { + "physicallyActive": 62, + "beginner": 87, + "intermediate": 111, + "advanced": 136, + "elite": 166 + } + }, + { + "metrics": { + "age": 55, + "weight": 57, + "gender": "male" + }, + "levels": { + "physicallyActive": 29, + "beginner": 41, + "intermediate": 53, + "advanced": 65, + "elite": 74 + } + }, + { + "metrics": { + "age": 55, + "weight": 68, + "gender": "male" + }, + "levels": { + "physicallyActive": 40, + "beginner": 56, + "intermediate": 72, + "advanced": 88, + "elite": 104 + } + }, + { + "metrics": { + "age": 55, + "weight": 79, + "gender": "male" + }, + "levels": { + "physicallyActive": 43, + "beginner": 60, + "intermediate": 77, + "advanced": 94, + "elite": 111 + } + }, + { + "metrics": { + "age": 55, + "weight": 91, + "gender": "male" + }, + "levels": { + "physicallyActive": 49, + "beginner": 68, + "intermediate": 88, + "advanced": 107, + "elite": 129 + } + }, + { + "metrics": { + "age": 55, + "weight": 102, + "gender": "male" + }, + "levels": { + "physicallyActive": 53, + "beginner": 74, + "intermediate": 95, + "advanced": 116, + "elite": 140 + } + }, + { + "metrics": { + "age": 55, + "weight": 113, + "gender": "male" + }, + "levels": { + "physicallyActive": 54, + "beginner": 75, + "intermediate": 97, + "advanced": 118, + "elite": 143 + } + }, + { + "metrics": { + "age": 55, + "weight": 136, + "gender": "male" + }, + "levels": { + "physicallyActive": 54, + "beginner": 76, + "intermediate": 98, + "advanced": 120, + "elite": 145 + } + }, + { + "metrics": { + "age": 65, + "weight": 57, + "gender": "male" + }, + "levels": { + "physicallyActive": 25, + "beginner": 35, + "intermediate": 45, + "advanced": 55, + "elite": 68 + } + }, + { + "metrics": { + "age": 65, + "weight": 68, + "gender": "male" + }, + "levels": { + "physicallyActive": 32, + "beginner": 45, + "intermediate": 57, + "advanced": 70, + "elite": 88 + } + }, + { + "metrics": { + "age": 65, + "weight": 79, + "gender": "male" + }, + "levels": { + "physicallyActive": 36, + "beginner": 50, + "intermediate": 64, + "advanced": 78, + "elite": 99 + } + }, + { + "metrics": { + "age": 65, + "weight": 91, + "gender": "male" + }, + "levels": { + "physicallyActive": 47, + "beginner": 66, + "intermediate": 84, + "advanced": 103, + "elite": 131 + } + }, + { + "metrics": { + "age": 65, + "weight": 102, + "gender": "male" + }, + "levels": { + "physicallyActive": 48, + "beginner": 67, + "intermediate": 87, + "advanced": 106, + "elite": 134 + } + }, + { + "metrics": { + "age": 65, + "weight": 113, + "gender": "male" + }, + "levels": { + "physicallyActive": 49, + "beginner": 68, + "intermediate": 88, + "advanced": 107, + "elite": 136 + } + }, + { + "metrics": { + "age": 65, + "weight": 136, + "gender": "male" + }, + "levels": { + "physicallyActive": 50, + "beginner": 69, + "intermediate": 89, + "advanced": 109, + "elite": 138 + } + }, + { + "metrics": { + "age": 75, + "weight": 57, + "gender": "male" + }, + "levels": { + "physicallyActive": 23, + "beginner": 32, + "intermediate": 41, + "advanced": 50, + "elite": 60 + } + }, + { + "metrics": { + "age": 75, + "weight": 68, + "gender": "male" + }, + "levels": { + "physicallyActive": 29, + "beginner": 40, + "intermediate": 52, + "advanced": 63, + "elite": 78 + } + }, + { + "metrics": { + "age": 75, + "weight": 79, + "gender": "male" + }, + "levels": { + "physicallyActive": 33, + "beginner": 46, + "intermediate": 59, + "advanced": 72, + "elite": 89 + } + }, + { + "metrics": { + "age": 75, + "weight": 91, + "gender": "male" + }, + "levels": { + "physicallyActive": 34, + "beginner": 48, + "intermediate": 62, + "advanced": 76, + "elite": 94 + } + }, + { + "metrics": { + "age": 75, + "weight": 102, + "gender": "male" + }, + "levels": { + "physicallyActive": 36, + "beginner": 51, + "intermediate": 65, + "advanced": 80, + "elite": 99 + } + }, + { + "metrics": { + "age": 75, + "weight": 113, + "gender": "male" + }, + "levels": { + "physicallyActive": 44, + "beginner": 61, + "intermediate": 79, + "advanced": 96, + "elite": 121 + } + }, + { + "metrics": { + "age": 75, + "weight": 136, + "gender": "male" + }, + "levels": { + "physicallyActive": 48, + "beginner": 67, + "intermediate": 86, + "advanced": 105, + "elite": 131 + } + }, + { + "metrics": { + "age": 85, + "weight": 57, + "gender": "male" + }, + "levels": { + "physicallyActive": 16, + "beginner": 22, + "intermediate": 28, + "advanced": 34, + "elite": 41 + } + }, + { + "metrics": { + "age": 85, + "weight": 68, + "gender": "male" + }, + "levels": { + "physicallyActive": 20, + "beginner": 28, + "intermediate": 36, + "advanced": 44, + "elite": 54 + } + }, + { + "metrics": { + "age": 85, + "weight": 79, + "gender": "male" + }, + "levels": { + "physicallyActive": 22, + "beginner": 31, + "intermediate": 40, + "advanced": 49, + "elite": 61 + } + }, + { + "metrics": { + "age": 85, + "weight": 91, + "gender": "male" + }, + "levels": { + "physicallyActive": 24, + "beginner": 33, + "intermediate": 43, + "advanced": 52, + "elite": 65 + } + }, + { + "metrics": { + "age": 85, + "weight": 102, + "gender": "male" + }, + "levels": { + "physicallyActive": 25, + "beginner": 35, + "intermediate": 45, + "advanced": 55, + "elite": 69 + } + }, + { + "metrics": { + "age": 85, + "weight": 113, + "gender": "male" + }, + "levels": { + "physicallyActive": 30, + "beginner": 42, + "intermediate": 54, + "advanced": 66, + "elite": 83 + } + }, + { + "metrics": { + "age": 85, + "weight": 136, + "gender": "male" + }, + "levels": { + "physicallyActive": 33, + "beginner": 46, + "intermediate": 59, + "advanced": 72, + "elite": 91 + } + }, + { + "metrics": { + "age": 17, + "weight": 57, + "gender": "female" + }, + "levels": { + "physicallyActive": 14, + "beginner": 19, + "intermediate": 27, + "advanced": 37, + "elite": 51 + } + }, + { + "metrics": { + "age": 17, + "weight": 68, + "gender": "female" + }, + "levels": { + "physicallyActive": 17, + "beginner": 23, + "intermediate": 32, + "advanced": 44, + "elite": 61 + } + }, + { + "metrics": { + "age": 17, + "weight": 79, + "gender": "female" + }, + "levels": { + "physicallyActive": 19, + "beginner": 27, + "intermediate": 37, + "advanced": 51, + "elite": 70 + } + }, + { + "metrics": { + "age": 17, + "weight": 91, + "gender": "female" + }, + "levels": { + "physicallyActive": 21, + "beginner": 28, + "intermediate": 39, + "advanced": 54, + "elite": 75 + } + }, + { + "metrics": { + "age": 17, + "weight": 102, + "gender": "female" + }, + "levels": { + "physicallyActive": 22, + "beginner": 30, + "intermediate": 41, + "advanced": 57, + "elite": 78 + } + }, + { + "metrics": { + "age": 17, + "weight": 113, + "gender": "female" + }, + "levels": { + "physicallyActive": 22, + "beginner": 31, + "intermediate": 42, + "advanced": 58, + "elite": 81 + } + }, + { + "metrics": { + "age": 17, + "weight": 136, + "gender": "female" + }, + "levels": { + "physicallyActive": 23, + "beginner": 32, + "intermediate": 44, + "advanced": 61, + "elite": 84 + } + }, + { + "metrics": { + "age": 25, + "weight": 57, + "gender": "female" + }, + "levels": { + "physicallyActive": 14, + "beginner": 19, + "intermediate": 26, + "advanced": 36, + "elite": 49 + } + }, + { + "metrics": { + "age": 25, + "weight": 68, + "gender": "female" + }, + "levels": { + "physicallyActive": 19, + "beginner": 27, + "intermediate": 37, + "advanced": 51, + "elite": 70 + } + }, + { + "metrics": { + "age": 25, + "weight": 79, + "gender": "female" + }, + "levels": { + "physicallyActive": 21, + "beginner": 29, + "intermediate": 40, + "advanced": 56, + "elite": 77 + } + }, + { + "metrics": { + "age": 25, + "weight": 91, + "gender": "female" + }, + "levels": { + "physicallyActive": 22, + "beginner": 30, + "intermediate": 42, + "advanced": 57, + "elite": 79 + } + }, + { + "metrics": { + "age": 25, + "weight": 102, + "gender": "female" + }, + "levels": { + "physicallyActive": 25, + "beginner": 34, + "intermediate": 47, + "advanced": 64, + "elite": 89 + } + }, + { + "metrics": { + "age": 25, + "weight": 113, + "gender": "female" + }, + "levels": { + "physicallyActive": 25, + "beginner": 35, + "intermediate": 48, + "advanced": 66, + "elite": 91 + } + }, + { + "metrics": { + "age": 25, + "weight": 136, + "gender": "female" + }, + "levels": { + "physicallyActive": 28, + "beginner": 39, + "intermediate": 54, + "advanced": 75, + "elite": 103 + } + }, + { + "metrics": { + "age": 35, + "weight": 57, + "gender": "female" + }, + "levels": { + "physicallyActive": 12, + "beginner": 17, + "intermediate": 22, + "advanced": 27, + "elite": 57 + } + }, + { + "metrics": { + "age": 35, + "weight": 68, + "gender": "female" + }, + "levels": { + "physicallyActive": 30, + "beginner": 41, + "intermediate": 53, + "advanced": 65, + "elite": 83 + } + }, + { + "metrics": { + "age": 35, + "weight": 79, + "gender": "female" + }, + "levels": { + "physicallyActive": 33, + "beginner": 45, + "intermediate": 60, + "advanced": 73, + "elite": 89 + } + }, + { + "metrics": { + "age": 35, + "weight": 91, + "gender": "female" + }, + "levels": { + "physicallyActive": 35, + "beginner": 51, + "intermediate": 66, + "advanced": 80, + "elite": 98 + } + }, + { + "metrics": { + "age": 35, + "weight": 102, + "gender": "female" + }, + "levels": { + "physicallyActive": 38, + "beginner": 51, + "intermediate": 67, + "advanced": 84, + "elite": 100 + } + }, + { + "metrics": { + "age": 35, + "weight": 113, + "gender": "female" + }, + "levels": { + "physicallyActive": 39, + "beginner": 52, + "intermediate": 66, + "advanced": 86, + "elite": 102 + } + }, + { + "metrics": { + "age": 35, + "weight": 136, + "gender": "female" + }, + "levels": { + "physicallyActive": 41, + "beginner": 58, + "intermediate": 74, + "advanced": 90, + "elite": 106 + } + }, + { + "metrics": { + "age": 45, + "weight": 57, + "gender": "female" + }, + "levels": { + "physicallyActive": 14, + "beginner": 14, + "intermediate": 25, + "advanced": 25, + "elite": 46 + } + }, + { + "metrics": { + "age": 45, + "weight": 68, + "gender": "female" + }, + "levels": { + "physicallyActive": 20, + "beginner": 31, + "intermediate": 36, + "advanced": 56, + "elite": 66 + } + }, + { + "metrics": { + "age": 45, + "weight": 79, + "gender": "female" + }, + "levels": { + "physicallyActive": 23, + "beginner": 37, + "intermediate": 41, + "advanced": 67, + "elite": 75 + } + }, + { + "metrics": { + "age": 45, + "weight": 91, + "gender": "female" + }, + "levels": { + "physicallyActive": 24, + "beginner": 44, + "intermediate": 44, + "advanced": 80, + "elite": 81 + } + }, + { + "metrics": { + "age": 45, + "weight": 102, + "gender": "female" + }, + "levels": { + "physicallyActive": 26, + "beginner": 32, + "intermediate": 44, + "advanced": 59, + "elite": 85 + } + }, + { + "metrics": { + "age": 45, + "weight": 113, + "gender": "female" + }, + "levels": { + "physicallyActive": 26, + "beginner": 41, + "intermediate": 48, + "advanced": 75, + "elite": 87 + } + }, + { + "metrics": { + "age": 45, + "weight": 136, + "gender": "female" + }, + "levels": { + "physicallyActive": 28, + "beginner": 44, + "intermediate": 51, + "advanced": 79, + "elite": 93 + } + }, + { + "metrics": { + "age": 55, + "weight": 57, + "gender": "female" + }, + "levels": { + "physicallyActive": 7, + "beginner": 13, + "intermediate": 17, + "advanced": 23, + "elite": 43 + } + }, + { + "metrics": { + "age": 55, + "weight": 68, + "gender": "female" + }, + "levels": { + "physicallyActive": 16, + "beginner": 22, + "intermediate": 32, + "advanced": 37, + "elite": 61 + } + }, + { + "metrics": { + "age": 55, + "weight": 79, + "gender": "female" + }, + "levels": { + "physicallyActive": 18, + "beginner": 30, + "intermediate": 40, + "advanced": 55, + "elite": 68 + } + }, + { + "metrics": { + "age": 55, + "weight": 91, + "gender": "female" + }, + "levels": { + "physicallyActive": 18, + "beginner": 31, + "intermediate": 41, + "advanced": 56, + "elite": 69 + } + }, + { + "metrics": { + "age": 55, + "weight": 102, + "gender": "female" + }, + "levels": { + "physicallyActive": 15, + "beginner": 27, + "intermediate": 35, + "advanced": 49, + "elite": 72 + } + }, + { + "metrics": { + "age": 55, + "weight": 113, + "gender": "female" + }, + "levels": { + "physicallyActive": 18, + "beginner": 32, + "intermediate": 42, + "advanced": 58, + "elite": 75 + } + }, + { + "metrics": { + "age": 55, + "weight": 136, + "gender": "female" + }, + "levels": { + "physicallyActive": 21, + "beginner": 36, + "intermediate": 48, + "advanced": 66, + "elite": 82 + } + }, + { + "metrics": { + "age": 65, + "weight": 57, + "gender": "female" + }, + "levels": { + "physicallyActive": 9, + "beginner": 13, + "intermediate": 17, + "advanced": 38, + "elite": 38 + } + }, + { + "metrics": { + "age": 65, + "weight": 68, + "gender": "female" + }, + "levels": { + "physicallyActive": 18, + "beginner": 33, + "intermediate": 44, + "advanced": 40, + "elite": 53 + } + }, + { + "metrics": { + "age": 65, + "weight": 79, + "gender": "female" + }, + "levels": { + "physicallyActive": 20, + "beginner": 25, + "intermediate": 34, + "advanced": 46, + "elite": 61 + } + }, + { + "metrics": { + "age": 65, + "weight": 91, + "gender": "female" + }, + "levels": { + "physicallyActive": 22, + "beginner": 33, + "intermediate": 48, + "advanced": 66, + "elite": 62 + } + }, + { + "metrics": { + "age": 65, + "weight": 102, + "gender": "female" + }, + "levels": { + "physicallyActive": 12, + "beginner": 20, + "intermediate": 27, + "advanced": 37, + "elite": 65 + } + }, + { + "metrics": { + "age": 65, + "weight": 113, + "gender": "female" + }, + "levels": { + "physicallyActive": 18, + "beginner": 31, + "intermediate": 41, + "advanced": 56, + "elite": 69 + } + }, + { + "metrics": { + "age": 65, + "weight": 136, + "gender": "female" + }, + "levels": { + "physicallyActive": 20, + "beginner": 45, + "intermediate": 58, + "advanced": 65, + "elite": 70 + } + }, + { + "metrics": { + "age": 75, + "weight": 57, + "gender": "female" + }, + "levels": { + "physicallyActive": 9, + "beginner": 12, + "intermediate": 16, + "advanced": 21, + "elite": 28 + } + }, + { + "metrics": { + "age": 75, + "weight": 68, + "gender": "female" + }, + "levels": { + "physicallyActive": 14, + "beginner": 18, + "intermediate": 24, + "advanced": 32, + "elite": 43 + } + }, + { + "metrics": { + "age": 75, + "weight": 79, + "gender": "female" + }, + "levels": { + "physicallyActive": 16, + "beginner": 21, + "intermediate": 28, + "advanced": 37, + "elite": 49 + } + }, + { + "metrics": { + "age": 75, + "weight": 91, + "gender": "female" + }, + "levels": { + "physicallyActive": 17, + "beginner": 23, + "intermediate": 30, + "advanced": 40, + "elite": 54 + } + }, + { + "metrics": { + "age": 75, + "weight": 102, + "gender": "female" + }, + "levels": { + "physicallyActive": 17, + "beginner": 23, + "intermediate": 31, + "advanced": 41, + "elite": 55 + } + }, + { + "metrics": { + "age": 75, + "weight": 113, + "gender": "female" + }, + "levels": { + "physicallyActive": 18, + "beginner": 24, + "intermediate": 32, + "advanced": 42, + "elite": 56 + } + }, + { + "metrics": { + "age": 75, + "weight": 136, + "gender": "female" + }, + "levels": { + "physicallyActive": 19, + "beginner": 25, + "intermediate": 33, + "advanced": 44, + "elite": 59 + } + }, + { + "metrics": { + "age": 85, + "weight": 57, + "gender": "female" + }, + "levels": { + "physicallyActive": 8, + "beginner": 10, + "intermediate": 14, + "advanced": 18, + "elite": 24 + } + }, + { + "metrics": { + "age": 85, + "weight": 68, + "gender": "female" + }, + "levels": { + "physicallyActive": 9, + "beginner": 14, + "intermediate": 19, + "advanced": 25, + "elite": 34 + } + }, + { + "metrics": { + "age": 85, + "weight": 79, + "gender": "female" + }, + "levels": { + "physicallyActive": 12, + "beginner": 16, + "intermediate": 22, + "advanced": 29, + "elite": 39 + } + }, + { + "metrics": { + "age": 85, + "weight": 91, + "gender": "female" + }, + "levels": { + "physicallyActive": 13, + "beginner": 18, + "intermediate": 24, + "advanced": 32, + "elite": 43 + } + }, + { + "metrics": { + "age": 85, + "weight": 102, + "gender": "female" + }, + "levels": { + "physicallyActive": 14, + "beginner": 19, + "intermediate": 25, + "advanced": 33, + "elite": 44 + } + }, + { + "metrics": { + "age": 85, + "weight": 113, + "gender": "female" + }, + "levels": { + "physicallyActive": 15, + "beginner": 19, + "intermediate": 26, + "advanced": 34, + "elite": 46 + } + }, + { + "metrics": { + "age": 85, + "weight": 136, + "gender": "female" + }, + "levels": { + "physicallyActive": 15, + "beginner": 20, + "intermediate": 27, + "advanced": 36, + "elite": 48 + } + } + ], + "Run": [ + { + "metrics": { + "age": 10, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 676000, + "beginner": 560000, + "intermediate": 475000, + "advanced": 414000, + "elite": 369000 + } + }, + { + "metrics": { + "age": 15, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 585000, + "beginner": 485000, + "intermediate": 411000, + "advanced": 358000, + "elite": 319000 + } + }, + { + "metrics": { + "age": 20, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 565000, + "beginner": 468000, + "intermediate": 398000, + "advanced": 346000, + "elite": 308000 + } + }, + { + "metrics": { + "age": 25, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 565000, + "beginner": 468000, + "intermediate": 398000, + "advanced": 346000, + "elite": 308000 + } + }, + { + "metrics": { + "age": 30, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 566000, + "beginner": 469000, + "intermediate": 398000, + "advanced": 346000, + "elite": 309000 + } + }, + { + "metrics": { + "age": 35, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 575000, + "beginner": 476000, + "intermediate": 404000, + "advanced": 352000, + "elite": 314000 + } + }, + { + "metrics": { + "age": 40, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 595000, + "beginner": 493000, + "intermediate": 418000, + "advanced": 364000, + "elite": 325000 + } + }, + { + "metrics": { + "age": 45, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 617000, + "beginner": 511000, + "intermediate": 434000, + "advanced": 378000, + "elite": 337000 + } + }, + { + "metrics": { + "age": 50, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 642000, + "beginner": 531000, + "intermediate": 451000, + "advanced": 393000, + "elite": 350000 + } + }, + { + "metrics": { + "age": 55, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 668000, + "beginner": 553000, + "intermediate": 469000, + "advanced": 409000, + "elite": 364000 + } + }, + { + "metrics": { + "age": 60, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 696000, + "beginner": 577000, + "intermediate": 489000, + "advanced": 426000, + "elite": 380000 + } + }, + { + "metrics": { + "age": 65, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 727000, + "beginner": 602000, + "intermediate": 511000, + "advanced": 445000, + "elite": 397000 + } + }, + { + "metrics": { + "age": 70, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 763000, + "beginner": 632000, + "intermediate": 537000, + "advanced": 467000, + "elite": 417000 + } + }, + { + "metrics": { + "age": 75, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 820000, + "beginner": 680000, + "intermediate": 577000, + "advanced": 502000, + "elite": 448000 + } + }, + { + "metrics": { + "age": 80, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 908000, + "beginner": 752000, + "intermediate": 638000, + "advanced": 556000, + "elite": 495000 + } + }, + { + "metrics": { + "age": 85, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 1045000, + "beginner": 866000, + "intermediate": 735000, + "advanced": 640000, + "elite": 570000 + } + }, + { + "metrics": { + "age": 90, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 1273000, + "beginner": 1055000, + "intermediate": 895000, + "advanced": 779000, + "elite": 695000 + } + }, + { + "metrics": { + "age": 10, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 749000, + "beginner": 632000, + "intermediate": 543000, + "advanced": 477000, + "elite": 428000 + } + }, + { + "metrics": { + "age": 15, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 672000, + "beginner": 567000, + "intermediate": 488000, + "advanced": 428000, + "elite": 384000 + } + }, + { + "metrics": { + "age": 20, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 640000, + "beginner": 540000, + "intermediate": 464000, + "advanced": 408000, + "elite": 366000 + } + }, + { + "metrics": { + "age": 25, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 640000, + "beginner": 540000, + "intermediate": 464000, + "advanced": 408000, + "elite": 366000 + } + }, + { + "metrics": { + "age": 30, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 640000, + "beginner": 540000, + "intermediate": 464000, + "advanced": 408000, + "elite": 366000 + } + }, + { + "metrics": { + "age": 35, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 644000, + "beginner": 544000, + "intermediate": 467000, + "advanced": 410000, + "elite": 368000 + } + }, + { + "metrics": { + "age": 40, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 658000, + "beginner": 555000, + "intermediate": 477000, + "advanced": 419000, + "elite": 376000 + } + }, + { + "metrics": { + "age": 45, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 681000, + "beginner": 575000, + "intermediate": 494000, + "advanced": 434000, + "elite": 389000 + } + }, + { + "metrics": { + "age": 50, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 716000, + "beginner": 604000, + "intermediate": 520000, + "advanced": 456000, + "elite": 409000 + } + }, + { + "metrics": { + "age": 55, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 757000, + "beginner": 639000, + "intermediate": 550000, + "advanced": 482000, + "elite": 433000 + } + }, + { + "metrics": { + "age": 60, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 804000, + "beginner": 678000, + "intermediate": 583000, + "advanced": 512000, + "elite": 459000 + } + }, + { + "metrics": { + "age": 65, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 856000, + "beginner": 722000, + "intermediate": 621000, + "advanced": 545000, + "elite": 489000 + } + }, + { + "metrics": { + "age": 70, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 915000, + "beginner": 772000, + "intermediate": 664000, + "advanced": 583000, + "elite": 523000 + } + }, + { + "metrics": { + "age": 75, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 983000, + "beginner": 830000, + "intermediate": 713000, + "advanced": 626000, + "elite": 562000 + } + }, + { + "metrics": { + "age": 80, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 1065000, + "beginner": 898000, + "intermediate": 772000, + "advanced": 678000, + "elite": 608000 + } + }, + { + "metrics": { + "age": 85, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 1199000, + "beginner": 1012000, + "intermediate": 870000, + "advanced": 763000, + "elite": 685000 + } + }, + { + "metrics": { + "age": 90, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 1445000, + "beginner": 1219000, + "intermediate": 1048000, + "advanced": 920000, + "elite": 825000 + } + } + ], + "Dash": [ + { + "metrics": { + "age": 18, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 14000, + "beginner": 13000, + "intermediate": 12000, + "advanced": 11300, + "elite": 10800 + } + }, + { + "metrics": { + "age": 40, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 14500, + "beginner": 13500, + "intermediate": 12400, + "advanced": 11700, + "elite": 11200 + } + }, + { + "metrics": { + "age": 45, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 15700, + "beginner": 14500, + "intermediate": 13400, + "advanced": 12600, + "elite": 12100 + } + }, + { + "metrics": { + "age": 50, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 15900, + "beginner": 14800, + "intermediate": 13600, + "advanced": 12800, + "elite": 12300 + } + }, + { + "metrics": { + "age": 55, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 16500, + "beginner": 15300, + "intermediate": 14200, + "advanced": 13300, + "elite": 12700 + } + }, + { + "metrics": { + "age": 60, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 17100, + "beginner": 15900, + "intermediate": 14700, + "advanced": 13800, + "elite": 13200 + } + }, + { + "metrics": { + "age": 65, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 18000, + "beginner": 16700, + "intermediate": 15400, + "advanced": 14500, + "elite": 13900 + } + }, + { + "metrics": { + "age": 70, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 18400, + "beginner": 17100, + "intermediate": 15800, + "advanced": 14900, + "elite": 14200 + } + }, + { + "metrics": { + "age": 75, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 19400, + "beginner": 18000, + "intermediate": 16600, + "advanced": 15600, + "elite": 14900 + } + }, + { + "metrics": { + "age": 80, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 20800, + "beginner": 19300, + "intermediate": 17800, + "advanced": 16800, + "elite": 16100 + } + }, + { + "metrics": { + "age": 18, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 15400, + "beginner": 14300, + "intermediate": 13300, + "advanced": 12500, + "elite": 11900 + } + }, + { + "metrics": { + "age": 40, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 16100, + "beginner": 14900, + "intermediate": 13900, + "advanced": 13100, + "elite": 12400 + } + }, + { + "metrics": { + "age": 45, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 16500, + "beginner": 15300, + "intermediate": 14200, + "advanced": 13400, + "elite": 12700 + } + }, + { + "metrics": { + "age": 50, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 16900, + "beginner": 15700, + "intermediate": 14600, + "advanced": 13700, + "elite": 13100 + } + }, + { + "metrics": { + "age": 55, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 17600, + "beginner": 16400, + "intermediate": 15200, + "advanced": 14300, + "elite": 13600 + } + }, + { + "metrics": { + "age": 60, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 19200, + "beginner": 17800, + "intermediate": 16500, + "advanced": 15600, + "elite": 14800 + } + }, + { + "metrics": { + "age": 65, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 20200, + "beginner": 18700, + "intermediate": 17400, + "advanced": 16400, + "elite": 15600 + } + }, + { + "metrics": { + "age": 70, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 21400, + "beginner": 19900, + "intermediate": 18500, + "advanced": 17400, + "elite": 16500 + } + }, + { + "metrics": { + "age": 75, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 21800, + "beginner": 20300, + "intermediate": 18800, + "advanced": 17700, + "elite": 16900 + } + }, + { + "metrics": { + "age": 80, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 23600, + "beginner": 21900, + "intermediate": 20300, + "advanced": 19100, + "elite": 18200 + } + } + ], + "Treadmill Dash": [ + { + "metrics": { + "age": 18, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 0.007142857142857143, + "beginner": 0.007692307692307693, + "intermediate": 0.008333333333333333, + "advanced": 0.008849557522123894, + "elite": 0.009259259259259259 + } + }, + { + "metrics": { + "age": 40, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 0.006896551724137931, + "beginner": 0.007407407407407408, + "intermediate": 0.008064516129032258, + "advanced": 0.008547008547008548, + "elite": 0.008928571428571428 + } + }, + { + "metrics": { + "age": 45, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 0.006369426751592357, + "beginner": 0.006896551724137931, + "intermediate": 0.007462686567164179, + "advanced": 0.007936507936507936, + "elite": 0.008264462809917356 + } + }, + { + "metrics": { + "age": 50, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 0.006289308176100629, + "beginner": 0.006756756756756757, + "intermediate": 0.007352941176470588, + "advanced": 0.0078125, + "elite": 0.008130081300813009 + } + }, + { + "metrics": { + "age": 55, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 0.006060606060606061, + "beginner": 0.006535947712418301, + "intermediate": 0.007042253521126761, + "advanced": 0.007518796992481203, + "elite": 0.007874015748031496 + } + }, + { + "metrics": { + "age": 60, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 0.005847953216374269, + "beginner": 0.006289308176100629, + "intermediate": 0.006802721088435374, + "advanced": 0.007246376811594203, + "elite": 0.007575757575757576 + } + }, + { + "metrics": { + "age": 65, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 0.005555555555555556, + "beginner": 0.005988023952095809, + "intermediate": 0.006493506493506494, + "advanced": 0.006896551724137931, + "elite": 0.007194244604316547 + } + }, + { + "metrics": { + "age": 70, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 0.005434782608695652, + "beginner": 0.005847953216374269, + "intermediate": 0.006329113924050633, + "advanced": 0.006711409395973154, + "elite": 0.007042253521126761 + } + }, + { + "metrics": { + "age": 75, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 0.005154639175257732, + "beginner": 0.005555555555555556, + "intermediate": 0.006024096385542169, + "advanced": 0.00641025641025641, + "elite": 0.006711409395973154 + } + }, + { + "metrics": { + "age": 80, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 0.004807692307692308, + "beginner": 0.0051813471502590676, + "intermediate": 0.0056179775280898875, + "advanced": 0.005952380952380952, + "elite": 0.006211180124223602 + } + }, + { + "metrics": { + "age": 18, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 0.006493506493506494, + "beginner": 0.006993006993006993, + "intermediate": 0.007518796992481203, + "advanced": 0.008, + "elite": 0.008403361344537815 + } + }, + { + "metrics": { + "age": 40, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 0.006211180124223602, + "beginner": 0.006711409395973154, + "intermediate": 0.007194244604316547, + "advanced": 0.007633587786259542, + "elite": 0.008064516129032258 + } + }, + { + "metrics": { + "age": 45, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 0.006060606060606061, + "beginner": 0.006535947712418301, + "intermediate": 0.007042253521126761, + "advanced": 0.007462686567164179, + "elite": 0.007874015748031496 + } + }, + { + "metrics": { + "age": 50, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 0.005917159763313609, + "beginner": 0.006369426751592357, + "intermediate": 0.00684931506849315, + "advanced": 0.0072992700729927005, + "elite": 0.007633587786259542 + } + }, + { + "metrics": { + "age": 55, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 0.005681818181818182, + "beginner": 0.006097560975609756, + "intermediate": 0.006578947368421052, + "advanced": 0.006993006993006993, + "elite": 0.007352941176470588 + } + }, + { + "metrics": { + "age": 60, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 0.005208333333333333, + "beginner": 0.0056179775280898875, + "intermediate": 0.006060606060606061, + "advanced": 0.00641025641025641, + "elite": 0.006756756756756757 + } + }, + { + "metrics": { + "age": 65, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 0.0049504950495049506, + "beginner": 0.0053475935828877, + "intermediate": 0.005747126436781609, + "advanced": 0.006097560975609756, + "elite": 0.00641025641025641 + } + }, + { + "metrics": { + "age": 70, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 0.004672897196261682, + "beginner": 0.005025125628140704, + "intermediate": 0.005405405405405406, + "advanced": 0.005747126436781609, + "elite": 0.006060606060606061 + } + }, + { + "metrics": { + "age": 75, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 0.0045871559633027525, + "beginner": 0.0049261083743842365, + "intermediate": 0.005319148936170213, + "advanced": 0.005649717514124294, + "elite": 0.005917159763313609 + } + }, + { + "metrics": { + "age": 80, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 0.00423728813559322, + "beginner": 0.0045662100456621, + "intermediate": 0.0049261083743842365, + "advanced": 0.005235602094240838, + "elite": 0.005494505494505495 + } + } + ], + "Broad Jump": [ + { + "metrics": { + "age": 18, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 200, + "beginner": 214, + "intermediate": 224, + "advanced": 234, + "elite": 245 + } + }, + { + "metrics": { + "age": 18, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 150, + "beginner": 164, + "intermediate": 174, + "advanced": 184, + "elite": 194 + } + } + ], + "Cone Drill": [ + { + "metrics": { + "age": 18, + "weight": -1, + "gender": "male" + }, + "levels": { + "physicallyActive": 9500, + "beginner": 8700, + "intermediate": 7800, + "advanced": 7000, + "elite": 6500 + } + }, + { + "metrics": { + "age": 18, + "weight": -1, + "gender": "female" + }, + "levels": { + "physicallyActive": 10500, + "beginner": 9600, + "intermediate": 8700, + "advanced": 7800, + "elite": 7200 + } + } + ] +} \ No newline at end of file diff --git a/calculator/test.ts b/calculator/test.ts index 8288a14..bd0902a 100644 --- a/calculator/test.ts +++ b/calculator/test.ts @@ -1,14 +1,5 @@ -import { activities, BenchmarkPerformance, genders, Player } from "./util"; -import { calcAttributeLevels, calcPlayerLevel, computeLevels } from "./calc.ts"; - -const lbToKg = (lb) => +lb * 0.453592; -const kgToLb = (kg) => +kg * 2.20462; - -const minToMs = (min) => min * 60000; -const secToMs = (sec) => sec * 1000; - -const feetToCm = (feet) => feet * 30.48; -const inchesToCm = (inches) => inches * 2.54; +import { activities, ActivityPerformance, feetToCm, genders, inchesToCm, lbToKg, minToMs, Player, secToMs } from "./util"; +import { calcAllAttributeLevels, calcPlayerLevel } from "./calc.ts"; const player: Player = { age: 18, @@ -16,77 +7,73 @@ const player: Player = { gender: genders.MALE }; -const computedPerformances: BenchmarkPerformance[] = [ +const computedPerformances: ActivityPerformance[] = [ // STRENGTH { activity: activities.BENCH_PRESS, - performance: lbToKg(200), - levels: computeLevels( - player.age, - player.weightKG, - player.gender, - activities.BENCH_PRESS - ) + performance: lbToKg(200) }, { activity: activities.DEADLIFT, performance: lbToKg(200), - levels: computeLevels( - player.age, - player.weightKG, - player.gender, - activities.DEADLIFT - ) }, { activity: activities.BACK_SQUAT, performance: lbToKg(200), - levels: computeLevels( - player.age, - player.weightKG, - player.gender, - activities.BACK_SQUAT - ) }, // POWER { activity: activities.BROAD_JUMP, - performance: feetToCm(5) + inchesToCm(2), - levels: computeLevels( - player.age, - player.weightKG, - player.gender, - activities.BROAD_JUMP - ) + performance: feetToCm(10) + inchesToCm(2), }, // ENDURANCE { activity: activities.RUN, performance: minToMs(5) + secToMs(20), - levels: computeLevels( - player.age, - player.weightKG, - player.gender, - activities.RUN - ) }, // AGILITY { activity: activities.CONE_DRILL, performance: secToMs(5), - levels: computeLevels( - player.age, - player.weightKG, - player.gender, - activities.CONE_DRILL - ) }, ]; const levels = { - attributes: calcAttributeLevels(player, computedPerformances), + attributes: calcAllAttributeLevels(player, computedPerformances), player: calcPlayerLevel(player, computedPerformances) }; console.log(levels); +// const newStandards: Standards = { +// "Back Squat": [], +// "Deadlift": [], +// "Bench Press": [], +// "Run": [], +// "Dash": [], +// "Treadmill Dash": [], +// "Broad Jump": [], +// "Cone Drill": [], +// }; +// +// for (const item of standards) { +// if (!newStandards[item.activityType]) +// continue; +// +// newStandards[item.activityType].push({ +// metrics: { +// age: item.age, +// weight: item.bodyWeight, +// gender: item.gender +// }, +// levels: { +// physicallyActive: item.physicallyActive, +// beginner: item.beginner, +// intermediate: item.intermediate, +// advanced: item.advanced, +// elite: item.elite +// } +// }); +// } +// +// Bun.write("./newStandards.json", JSON.stringify(newStandards, null, 2)); diff --git a/calculator/util.ts b/calculator/util.ts index f90a38a..c71a4c7 100644 --- a/calculator/util.ts +++ b/calculator/util.ts @@ -70,38 +70,45 @@ export type Gender = typeof genders[keyof typeof genders]; // ------------------------------------------------------------------------------------------------- // Data model interfaces // ------------------------------------------------------------------------------------------------- -export interface BenchmarkPerformance { +export interface ActivityPerformance { activity: Activity; performance: number; - /** - * Key: level number, Value: performance value (kg, ms, m/s, etc.) - */ - levels: Record; } -export interface Levels { - /** KG or -1 for body‑weight‑agnostic entries */ - physicallyActive: number; - beginner: number; - intermediate: number; - advanced: number; - elite: number; -} +export type BaseLevel = + | "physicallyActive" + | "beginner" + | "intermediate" + | "advanced" + | "elite"; -export interface StandardsItem extends Levels { - bodyWeight: number; - gender: Gender; - activityType: Activity; +interface Metrics { age: number; + weight: number; + gender: Gender; +}; + +export interface Standard { + metrics: Metrics; + levels: Record; } +export type StandardsMap = Record< + Activity, + Standard[] +>; + // ------------------------------------------------------------------------------------------------- // Conversion utilities // ------------------------------------------------------------------------------------------------- export const lbToKg = (lb: number | string): number => +lb * 0.453592; export const kgToLb = (kg: number | string): number => +kg * 2.20462; -export const feetToCm = (feet: number): number => feet * 30.48; +export const minToMs = (min) => min * 60000; +export const secToMs = (sec) => sec * 1000; + +export const feetToCm = (feet) => feet * 30.48; +export const inchesToCm = (inches) => inches * 2.54; export const mphToMtrsPerMs = (mph: number): number => (mph * 0.44704) / 1000; diff --git a/main.ts b/main.ts index 76f0c2f..c9487a7 100644 --- a/main.ts +++ b/main.ts @@ -1,14 +1,11 @@ -import { calcAttributeLevels, calcPlayerLevel, computeLevels } from "./calculator/calc.ts"; -import { Activity, BenchmarkPerformance, Player } from "./calculator/util.ts"; +import { calcAllAttributeLevels, calcPlayerLevel } from "./calculator/calc.ts"; +import { ActivityPerformance, Player } from "./calculator/util.ts"; import { Printful } from "./commerce/printful.ts" import { Webflow } from "./commerce/webflow.ts"; interface CalcRequest { player: Player, - performances: { - activity: Activity, - performance: number, - }[] + performances: ActivityPerformance[] } export class ClientResponse extends Response { @@ -39,24 +36,10 @@ const server = Bun.serve({ const calcReq: CalcRequest = await req.json(); const { player, performances } = calcReq; - const computedPerformances: BenchmarkPerformance[] = []; - for (const p of performances) { - computedPerformances.push({ - activity: p.activity, - performance: p.performance, - levels: computeLevels( - player.age, - player.weightKG, - player.gender, - p.activity - ) - }) - } - return ClientResponse.json({ levels: { - attributes: calcAttributeLevels(player, computedPerformances), - player: calcPlayerLevel(player, computedPerformances) + attributes: calcAllAttributeLevels(player, performances), + player: calcPlayerLevel(player, performances) } }) }