Highlight and summarize walkers (>=10:00/km) and compare with faster participants on parkrun results pages.
What is a userscript?
A userscript is a small piece of JavaScript that runs in your browser and enhances specific websites. These scripts work with parkrun event pages, parkrunner profile pages, and results pages, and can be used with any userscript manager including Userscripts, Tampermonkey, Violentmonkey, or any compatible browser extension.
Installation
-
Install a userscript manager for your browser:
- Desktop: Userscripts (Safari), Tampermonkey (Chrome, Firefox, Edge, Opera), or Violentmonkey (Orion)
- iOS: Userscripts (Safari) or Violentmonkey (Orion)
- Android: Install Kiwi Browser, then install Tampermonkey or Violentmonkey from the Chrome Web Store.
- Click the install link below for this script.
- Click “Install” when prompted by your userscript manager.
Install parkrun Walker Analysis
Bookmarklet version
You can also use this script as a bookmarklet (a bookmark whose URL is JavaScript), which can be useful on browsers that support bookmarks but not userscript managers.
Desktop bookmarklet
Drag this link to your bookmarks bar:
parkrun Walker Analysis bookmarklet
Mobile bookmarklet
On mobile browsers that let you edit bookmark URLs:
- Copy the JavaScript code below to your clipboard.
- Create a new bookmark for any page.
- Edit the bookmark and replace its URL with the code you copied.
- Navigate to the relevant parkrun page.
- Select the bookmark to run the script.
javascript:function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _regenerator(){var m,e="function"==typeof Symbol?Symbol:{},t=e.iterator||"@@iterator",n=e.toStringTag||"@@toStringTag";function r(e,t,n,r){var o,i,a,l,u,c,s,d,p,t=t&&t.prototype instanceof g?t:g,t=Object.create(t.prototype);return _regeneratorDefine2(t,"_invoke",(o=e,i=n,s=r||[],d=!1,p={p:c=0,n:0,v:m,a:f,f:f.bind(m,4),d:function(e,t){return a=e,l=0,u=m,p.n=t,y}},function(e,t,n){if(1<c)throw TypeError("Generator is already running");for(d&&1===t&&f(t,n),l=t,u=n;(b=l<2?m:u)||!d;){a||(l?l<3?(1<l&&(p.n=-1),f(l,u)):p.n=u:p.v=u);try{if(c=2,a){if(b=a[e=l?e:"next"]){if(!(b=b.call(a,u)))throw TypeError("iterator result is not an object");if(!b.done)return b;u=b.value,l<2&&(l=0)}else 1===l&&(b=a.return)&&b.call(a),l<2&&(u=TypeError("The iterator does not provide a '"+e+"' method"),l=1);a=m}else if((b=(d=p.n<0)?u:o.call(i,p))!==y)break}catch(e){a=m,l=1,u=e}finally{c=1}}return{value:b,done:d}}),!0),t;function f(e,t){for(l=e,u=t,b=0;!d&&c&&!n&&b<s.length;b++){var n,r=s[b],o=p.p,i=r[2];3<e?(n=i===t)&&(u=r[(l=r[4])?5:l=3],r[4]=r[5]=m):r[0]<=o&&((n=e<2&&o<r[1])?(l=0,p.v=t,p.n=r[1]):o<i&&(n=e<3||r[0]>t||i<t)&&(r[4]=e,r[5]=t,p.n=i,l=0))}if(n||1<e)return y;throw d=!0,t}}var y={};function g(){}function o(){}function i(){}var b=Object.getPrototypeOf,e=[][t]?b(b([][t]())):(_regeneratorDefine2(b={},t,function(){return this}),b),a=i.prototype=g.prototype=Object.create(e);function l(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,i):(e.__proto__=i,_regeneratorDefine2(e,n,"GeneratorFunction")),e.prototype=Object.create(a),e}return _regeneratorDefine2(a,"constructor",o.prototype=i),_regeneratorDefine2(i,"constructor",o),_regeneratorDefine2(i,n,o.displayName="GeneratorFunction"),_regeneratorDefine2(a),_regeneratorDefine2(a,n,"Generator"),_regeneratorDefine2(a,t,function(){return this}),_regeneratorDefine2(a,"toString",function(){return"[object Generator]"}),(_regenerator=function(){return{w:r,m:l}})()}function _regeneratorDefine2(e,t,n,r){var i=Object.defineProperty;try{i({},"",{})}catch(e){i=0}(_regeneratorDefine2=function(e,t,n,r){function o(t,n){_regeneratorDefine2(e,t,function(e){return this._invoke(t,n,e)})}t?i?i(e,t,{value:n,enumerable:!r,configurable:!r,writable:!r}):e[t]=n:(o("next",0),o("throw",1),o("return",2))})(e,t,n,r)}function asyncGeneratorStep(e,t,n,r,o,i,a){try{var l=e[i](a),u=l.value}catch(e){return void n(e)}l.done?t(u):Promise.resolve(u).then(r,o)}function _asyncToGenerator(l){return function(){var e=this,a=arguments;return new Promise(function(t,n){var r=l.apply(e,a);function o(e){asyncGeneratorStep(r,t,n,o,i,"next",e)}function i(e){asyncGeneratorStep(r,t,n,o,i,"throw",e)}o(void 0)})}}function ownKeys(t,e){var n,r=Object.keys(t);return Object.getOwnPropertySymbols&&(n=Object.getOwnPropertySymbols(t),e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)),r}function _objectSpread(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?ownKeys(Object(n),!0).forEach(function(e){_defineProperty(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):ownKeys(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function _defineProperty(e,t,n){return(t=_toPropertyKey(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _toPropertyKey(e){e=_toPrimitive(e,"string");return"symbol"==_typeof(e)?e:e+""}function _toPrimitive(e,t){if("object"!=_typeof(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0===n)return("string"===t?String:Number)(e);n=n.call(e,t||"default");if("object"!=_typeof(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}var ChartRef="undefined"!=typeof window&&window.Chart?window.Chart:void 0;function assignUnknownFinishTimes(o){return o.map(function(e,t){var n,r;return e.timeStr&&0<e.timeSec?e:(n=(n=(n=o).slice(0,t).reverse().find(function(e){return e.timeStr&&0<e.timeSec}))?n.timeSec:null,t=(r=(r=o).slice(t+1).find(function(e){return e.timeStr&&0<e.timeSec}))?r.timeSec:null,r=n||t||0,_objectSpread(_objectSpread({},e),{},{timeSec:r,estimatedTime:0<r}))})}function getEventMetadata(){var e,t="",n="",r="",o="undefined"!=typeof document?document.querySelector("h1"):null,o=(o?t=o.textContent.trim():"undefined"!=typeof document&&document.title&&(t=document.title.split("-")[0].trim()),"undefined"!=typeof document?document.querySelector("h3"):null);return o&&((e=(o=o.textContent).match(/(\d{1,2}\/\d{1,2}\/\d{2,4})/))&&(n=e[1]),e=o.match(/#(\d+)/))&&(r=e[1]),{eventName:t,eventDate:n,eventNumber:r}}function generateExportFilename(e,t){var n=e.eventName?e.eventName.replace(/[^a-z0-9]+/gi,"").toLowerCase():"event",r=e.eventDate?e.eventDate.replace(/\//g,"_"):"date",e=e.eventNumber||"num";return"".concat(n,"_").concat(r,"_").concat(e,"_").concat(t,".png")}function computeWalkerThreshold(e){var t=5;try{"string"==typeof e&&e&&e.toLowerCase().includes("-juniors")&&(t=2)}catch(e){}return 10*t*60}function parkrunWalkerAnalysisMain(){var _,T,N,D,O,V,j,e="undefined"!=typeof window&&window.location?window.location.pathname:"";function d(e,t){for(var n=0,r=[1e3,500,250,100,50,25,10];n<r.length;n++){var o=r[n];if(o<=e)return{status:"".concat(t," ").concat(o," Club"),milestone:o}}return{status:null,milestone:0}}function M(){j.innerHTML="Breakdown: "+N.map(function(e){return'<button style="margin:0 8px;padding:6px 12px;border-radius:4px;border:none;background:'.concat(D===e.key?"#FFA300":"#00CEAE",';color:#2b223d;font-weight:bold;cursor:pointer;" data-key="').concat(e.key,'">').concat(e.label,"</button>")}).join(""),j.querySelectorAll("button").forEach(function(t){t.onclick=function(){var e;e=t.getAttribute("data-key"),D=e,n()}})}function n(){M();for(var o,r,n,i,a,t,l,u,c,s,d,p,f,e=document.getElementById("walkerRunnerSummaryTable"),m=(e||((e=document.createElement("div")).id="walkerRunnerSummaryTable"),e.innerHTML=(o=D,t=computeWalkerThreshold("undefined"!=typeof document&&document.location?document.location.href:""),l=_.filter(function(e){return e.timeSec>=t}),u=_.filter(function(e){return 0<e.timeSec&&e.timeSec<t}),c=l.length,s=u.length,d=new Set,l.forEach(function(e){return d.add(e[o]||"Unknown")}),u.forEach(function(e){return d.add(e[o]||"Unknown")}),g=Array.from(d),"ageGroup"===o?((g=g.filter(function(e){return e&&"Unknown"!==e&&"Not specified"!==e})).sort(function(e,t){e=parseInt((e||"").split("-")[0],10),t=parseInt((t||"").split("-")[0],10);return isNaN(e)?1:isNaN(t)?-1:e-t}),d.has("Not specified")&&g.push("Not specified"),d.has("Unknown")&&g.push("Unknown")):"parkrunExperience"===o?(r=["First Timer (anywhere)","First Timer (to this event)","Multiple parkruns","parkrun 10 Club","parkrun 25 Club","parkrun 50 Club","parkrun 100 Club","parkrun 250 Club","parkrun 500 Club","parkrun 1000 Club"],n=function(e){var t,n=r.indexOf(e);return-1!==n?n:(n=e.match(/parkrun (\d+) Club/))?(n=parseInt(n[1],10),-1!==(t=[10,25,50,100,250,500,1e3].indexOf(n))?3+t:200+n):"Unknown"===e?9999:999},g.sort(function(e,t){return n(e)-n(t)})):"volunteerStatus"===o?(i=["Yet to Volunteer","Volunteered once","Volunteered multiple times","Volunteer 10 Club","Volunteer 25 Club","Volunteer 50 Club","Volunteer 100 Club","Volunteer 250 Club","Volunteer 500 Club","Volunteer 1000 Club"],a=function(e){var t=i.indexOf(e);return-1!==t?t:(t=e.match(/(\d+)/))?200+parseInt(t[1],10):"Has Volunteered"===e?150:"Unknown"===e?9999:999},g.sort(function(e,t){return a(e)-a(t)})):g.sort(),m=(p=c+s)?(c/p*100).toFixed(1):"0.0",y=p?(s/p*100).toFixed(1):"0.0",f='<div style="text-align:center;margin-bottom:0.5em;font-size:1.08em;">\n <strong>Walkers:</strong> '.concat(c," (").concat(m,"%) | <strong>Runners:</strong> ").concat(s," (").concat(y,"%) | <strong>Total finishers:</strong> ").concat(p,"\n </div>"),f+='<table class="Results-table" style="margin:1em auto;font-size:1.1em;">\n <thead><tr><th>'.concat(N.find(function(e){return e.key===o}).label,"</th><th>Walkers (n)</th><th>Walkers (%)</th><th>Runners (n)</th><th>Runners (%)</th><th>Total (n)</th><th>Total (%)</th></tr></thead><tbody>"),g.forEach(function(t){var e=l.filter(function(e){return(e[o]||"Unknown")===t}).length,n=u.filter(function(e){return(e[o]||"Unknown")===t}).length,r=e+n;f+="<tr><td>".concat(t,'</td><td style="text-align:right">').concat(e,'</td><td style="text-align:right">').concat(c?(e/c*100).toFixed(1):"0.0",'%</td><td style="text-align:right">').concat(n,'</td><td style="text-align:right">').concat(s?(n/s*100).toFixed(1):"0.0",'%</td><td style="text-align:right">').concat(r,'</td><td style="text-align:right">').concat(p?(r/p*100).toFixed(1):"0.0","%</td></tr>")}),f=f+'<tr style="font-weight:bold;"><td>Total</td><td style="text-align:right">'.concat(c,'</td><td style="text-align:right">100.0%</td><td style="text-align:right">').concat(s,'</td><td style="text-align:right">100.0%</td><td style="text-align:right">').concat(p,'</td><td style="text-align:right">100.0%</td></tr>')+"</tbody></table>"),document.getElementById("walkerAnalysisContainer")),y=(m||((m=document.createElement("div")).id="walkerAnalysisContainer",m.style.width="100%",m.style.maxWidth="900px",m.style.margin="20px auto"),m.innerHTML="",document.getElementById(O)),g=(y||((y=document.createElement("div")).id=O),m.appendChild(y),m.appendChild(j),m.appendChild(e),document.querySelector("h3")),b=(g&&g.parentNode?m.parentNode===g.parentNode&&m.previousSibling===g||(g.nextSibling?g.parentNode.insertBefore(m,g.nextSibling):g.parentNode.appendChild(m)):document.body.appendChild(m),D),y=N.find(function(e){return e.key===D}).label,e=O,h=(g=(n=>{var r={},o=1/0,i=0;return _.forEach(function(e){var t;0!==e.timeSec&&(t=Math.floor(e.timeSec/60),o=Math.min(o,t),i=Math.max(i,t),r[t]||(r[t]={}),e=e[n]||"Unknown",r[t][e]=(r[t][e]||0)+1)}),{bins:r,minMinute:o,maxMinute:i}})(b)).bins,k=g.maxMinute,v=[],x=g.minMinute;x<=k;x++)v.push(x);var w=new Set,C=(Object.values(h).forEach(function(e){return Object.keys(e).forEach(function(e){return w.add(e)})}),Array.from(w)),E=(C=((e,t)=>{var n,r,o,i,a;return"ageGroup"===t?((n=e.filter(function(e){return e&&"Unknown"!==e&&"Not specified"!==e})).sort(function(e,t){e=parseInt((e||"").split("-")[0],10),t=parseInt((t||"").split("-")[0],10);return isNaN(e)?1:isNaN(t)?-1:e-t}),e.includes("Not specified")&&n.push("Not specified"),e.includes("Unknown")&&n.push("Unknown"),n):"parkrunExperience"===t?(r=["First Timer (anywhere)","First Timer (to this event)","Multiple parkruns","parkrun 10 Club","parkrun 25 Club","parkrun 50 Club","parkrun 100 Club","parkrun 250 Club","parkrun 500 Club","parkrun 1000 Club"],o=function(e){var t,n=r.indexOf(e);return-1!==n?n:(n=e.match(/parkrun (\d+) Club/))?(n=parseInt(n[1],10),-1!==(t=[10,25,50,100,250,500,1e3].indexOf(n))?3+t:200+n):"Unknown"===e?9999:999},e.slice().sort(function(e,t){return o(e)-o(t)})):"volunteerStatus"===t?(i=["Yet to Volunteer","Volunteered once","Volunteered multiple times","Volunteer 10 Club","Volunteer 25 Club","Volunteer 50 Club","Volunteer 100 Club","Volunteer 250 Club","Volunteer 500 Club","Volunteer 1000 Club"],a=function(e){var t=i.indexOf(e);return-1!==t?t:(t=e.match(/(\d+)/))?200+parseInt(t[1],10):"Has Volunteered"===e?150:"Unknown"===e?9999:999},e.slice().sort(function(e,t){return a(e)-a(t)})):e.slice().sort()})(C,b)).map(function(t){return{label:t,data:v.map(function(e){return h[e]&&h[e][t]?h[e][t]:0}),backgroundColor:(e=t,"volunteerStatus"===b?(r=e.match(/(\d+)/))?(r=parseInt(r[1],10),T[r]||"#cccccc"):T[e]||"#cccccc":"parkrunExperience"===b?(r=e.match(/(\d+)/))?(r=parseInt(r[1],10),T[r]||"#cccccc"):{"First Timer (anywhere)":"#FFE049","First Timer (to this event)":"#FFA300","Multiple parkruns":"#00CEAE",Unknown:"#A1B6B7"}[e]||"#cccccc":"gender"===b?{Male:"#00CEAE",Female:"#E21145","Not specified":"#FFE049",Unknown:"#A1B6B7"}[e]||"#FFA300":"ageGroup"===b?"Not specified"===e?"#F2F2F2":"Unknown"===e?"#A1B6B7":(r=e.match(/^(\d+)-/))&&(r=parseInt(r[1],10),n=["#DA70D6","#9370DB","#6495ED","#4169E1","#1E90FF","#00BFFF","#00CED1","#20B2AA","#3CB371","#32CD32","#9ACD32","#FFD700","#FFA500","#FF8C00","#FF6347","#DC143C","#DB7093"],r=Math.floor((r-10)/5),n[Math.min(r,n.length-1)])||"#cccccc":["#FFA300","#00CEAE","#E21145","#EBE9F0","#FFE049","#2C504A","#6D5698","#C81D31","#A1B6B7"][C.indexOf(e)%9]),stack:"stack1"};var e,n,r}),F=v.map(function(e){var t=Math.floor(e/60),e=e%60;return"".concat(t,":").concat(e.toString().padStart(2,"0"))}),S=document.getElementById(e);S?S.innerHTML="":(S=document.createElement("div")).id=e,S.style.background="#2b223d",S.style.borderRadius="8px",S.style.margin="20px auto",S.style.padding="15px",S.style.maxWidth="900px",S.style.boxShadow="0 2px 4px rgba(0,0,0,0.1)",(g=document.createElement("h3")).textContent="Finishers per Minute by ".concat(y),g.style.textAlign="center",g.style.marginBottom="15px",g.style.color="#FFA300",S.appendChild(g);var A=document.createElement("canvas");S.appendChild(A),(e=document.createElement("button")).textContent="💾 Save as Image",e.style.padding="6px 12px",e.style.backgroundColor="#FFA300",e.style.color="#2b223d",e.style.border="none",e.style.borderRadius="4px",e.style.cursor="pointer",e.style.fontWeight="bold",e.style.display="inline-block",e.style.margin="10px auto 0 auto",e.title="Download chart as PNG image",e.addEventListener("mouseover",function(){this.style.backgroundColor="#e59200"}),e.addEventListener("mouseout",function(){this.style.backgroundColor="#FFA300"}),e.addEventListener("click",_asyncToGenerator(_regenerator().m(function e(){var t,n,r,o,i,a,l,u,c,s,d,p;return _regenerator().w(function(e){for(;;)switch(e.n){case 0:try{t=getEventMetadata(),n=S.querySelector("h3"),r=n?n.textContent.replace(/[^a-z0-9]+/gi,"-").replace(/^-+|-+$/g,"").toLowerCase():"chart",o=generateExportFilename(t,r),a=(i=A).width,l=a,u=i.height+100,(c=document.createElement("canvas")).width=l,c.height=u,(s=c.getContext("2d")).fillStyle="#2b223d",s.fillRect(0,0,l,u),s.fillStyle="#FFA300",s.textAlign="center",s.textBaseline="middle",s.font="bold 56px Arial",d=n?n.textContent:"Finishers per Minute",s.fillText(d,l/2,50),s.drawImage(i,0,100),(p=document.createElement("a")).download=o,p.href=c.toDataURL("image/png"),p.click()}catch(e){alert("Failed to export image: "+e)}case 1:return e.a(2)}},e)}))),(y=S.querySelector(".walker-controls-footer"))||((y=document.createElement("div")).className="walker-controls-footer",y.style.display="flex",y.style.justifyContent="center",y.style.marginTop="12px",S.appendChild(y)),y.innerHTML="",y.appendChild(e),V&&(V.destroy(),V=null),setTimeout(function(){ChartRef&&(V=new ChartRef(A.getContext("2d"),{type:"bar",data:{labels:F,datasets:E},options:{responsive:!0,layout:{padding:{left:60,right:60,top:40,bottom:40}},plugins:{legend:{labels:{color:"#e0e0e0"}},title:{display:!1}},scales:{x:{stacked:!0,title:{display:!0,text:"Finish Time",color:"#e0e0e0"},ticks:{color:"#cccccc"},grid:{color:"rgba(200,200,200,0.2)"}},y:{stacked:!0,beginAtZero:!0,title:{display:!0,text:"Number of Finishers",color:"#e0e0e0"},ticks:{color:"#cccccc",precision:0},grid:{color:"rgba(200,200,200,0.2)"}}}}}))},0),(m=document.getElementById(O))&&m.parentNode?m.nextSibling?m.parentNode.insertBefore(j,m.nextSibling):m.parentNode.appendChild(j):document.body.appendChild(j)}/\/results\/\d{4}-\d{2}-\d{2}\/?$/.test(e)&&(e=Array.from(document.querySelectorAll("tr.Results-table-row"))).length&&(_=assignUnknownFinishTimes(e.map(function(e,t){var n=e.querySelector(".Results-table-td--time .compact"),n=n?n.textContent.trim():"",r=(r=n)?2===(r=r.split(":").map(Number)).length?60*r[0]+r[1]:3===r.length?3600*r[0]+60*r[1]+r[2]:0:0,o=(e.getAttribute("data-gender")||"").trim(),i=parseInt(e.getAttribute("data-runs"),10),a=parseInt(e.getAttribute("data-vols"),10),l=(e.getAttribute("data-achievement")||"").trim(),u="Unknown",l=(!isNaN(i)&&0<i&&(u=1===i?"First Timer (anywhere)":"First Timer!"===l?"First Timer (to this event)":!(i<10)&&d(i,"parkrun").status||"Multiple parkruns"),"Unknown"),i=0,a=(isNaN(a)||(0===a?l="Yet to Volunteer":1===a?l="Volunteered once":1<a&&a<10?l="Volunteered multiple times":(l=(a=d(a,"Volunteer")).status||"Has Volunteered",i=a.milestone)),e.innerHTML.match(/milestone-v(\d+)/)),a=(a&&(l="Volunteer ".concat(a[1]," Club"),i=parseInt(a[1],10)),""),c=e.querySelector(".Results-table-td--agegrade"),c=(c&&(c=c.textContent.trim())&&(a=c.replace("%","")),"Unknown"),s=e.getAttribute("data-agegroup")||"",s=(s?c=s.replace(/^[A-Z]+/,""):(s=e.querySelector(".Results-table-td--agegroup"))?c=s.textContent.trim().replace(/^[A-Z]+/,"")||(n?"Not specified":"Unknown"):n&&(c="Not specified"),o.toLowerCase());return{timeStr:n,timeSec:r,gender:s="male"===s||"m"===s?"Male":"female"===s||"f"===s?"Female":n?"Not specified":"Unknown",parkrunExperience:u,volunteerStatus:l,volunteerMilestone:i,ageGrade:a,ageGroup:c,_row:e,_idx:t}})),T={10:"#EBE9F0",25:"#6D5698",50:"#C81D31",100:"#2E393B",250:"#2C504A",500:"#2E4DA7",1e3:"#FFE049","Volunteered once":"#90EE90","Volunteered multiple times":"#00CEAE","Has Volunteered":"#00CEAE","Yet to Volunteer":"#FFA300",Unknown:"#A1B6B7"},N=[{key:"parkrunExperience",label:"parkrun Experience"},{key:"volunteerStatus",label:"Volunteer Experience"},{key:"gender",label:"Gender"},{key:"ageGroup",label:"Age Group"}],D="parkrunExperience",O="finishersStackedChart",V=null,(j=document.getElementById("walkerAnalysisControls"))||((j=document.createElement("div")).id="walkerAnalysisControls",j.style.textAlign="center",j.style.margin="20px 0 10px 0",j.style.color="#e0e0e0",j.style.background="#2b223d",j.style.padding="10px",j.style.borderRadius="8px",j.style.maxWidth="900px",j.style.marginLeft="auto",j.style.marginRight="auto"),n())}parkrunWalkerAnalysisMain(),"undefined"!=typeof module&&void 0!==module.exports&&(module.exports={assignUnknownFinishTimes:assignUnknownFinishTimes,getEventMetadata:getEventMetadata,generateExportFilename:generateExportFilename,computeWalkerThreshold:computeWalkerThreshold});