# Anaerobic adaptation



## hrumpole (Jun 17, 2008)

After a summer of mainly riding solo and steady efforts, I've found that in a group I'm getting shredded. No top end. Sure, FTP could always be higher, but what seems to kill me is recovery--IOW, paceline at or around FTP, but considerably higher in the wind and after a series of those, I'm OTB and headed for the regroup.

Carrying a CTL of about 70, give or take, I've started doing more intensity work (things 1 min @ 1.3x ftp, 1 min off, or 15 on 15 off). In general, how long before the adaptations from that work kind of work set in?


----------



## TDFbound (Jul 11, 2017)

Foreword- I'm not a coach, nor a pro, nor even a good rider, so take my anecdote for what it's worth. You know what they say, free advice is worth what you pay for it.

I don't remember my old training routine, as it was a bit of a home-brew mess. I did do a lot of short, high intensity efforts such as sprints from stoplights, trying to stay in the big ring up short but steep climbs, and chasing cars to try to catch a draft. My anaerobic abilities were pretty rad, and I could mostly recover from a hard effort in only a few moments- it was actually my strategy for winning races and group rides, was to simply attack off the front, and attack again as soon as I was caught, and usually by the third or fourth time I'd be off the front and have myself a good minute or two of solo riding before crossing the line.

Now, after only a couple months on the bike after 10+ years off, that's not the case. However, even just a handful of hard efforts a week for a month has really been paying off. I'm a long way from where I want, but I'm also a long way from where I was last month. I'd say it really takes a whole season to build up your anaerobic endurance to the point you could predictably rely on it to do what you want it to do.


----------



## woodys737 (Dec 31, 2005)

Not a coach either...After a short glance it looks like cardiovascular, skeletal and metabolic adaptations from HIIT to increase VO2max are anywhere from 2-8 weeks and those are because of the duration of the study. So my best guess is weeks not months to see adaptations occur.


----------



## Alex_Simmons/RST (Jan 12, 2008)

hrumpole said:


> After a summer of mainly riding solo and steady efforts, I've found that in a group I'm getting shredded. No top end. Sure, FTP could always be higher, but what seems to kill me is recovery--IOW, paceline at or around FTP, but considerably higher in the wind and after a series of those, I'm OTB and headed for the regroup.
> 
> Carrying a CTL of about 70, give or take, I've started doing more intensity work (things 1 min @ 1.3x ftp, 1 min off, or 15 on 15 off). In general, how long before the adaptations from that work kind of work set in?


Adaptations occur within hours. The time course is fairly predictable but the size of power change less so. In general higher intensity work tends to plateau after ~6 weeks or so. Whether such work will have the desired impact for you is another question.

Keep in mind that recovery from any effort or efforts, no matter how hard, is a wholly aerobic process. And that the higher your sustainable aerobic power (i.e. threshold), the less deep you go when you do "surge", and when pace settles back down the further below threshold you will be, meaning recovery of oxygen deficit and anaerobic reserves will happen more quickly, enabling you to sustain harder efforts more frequently and with shorter recovery times. Just 10W higher threshold can make a large difference in your recovery ability.

So if you are struggling to cope with surges, then in general it's still your aerobic fitness that is primarily the issue, plus of course your group riding skills which on their own can mean you are able to minimise surges.

If you are getting shredded as a result of one sustained high intensity effort, that's different, but if it's because of repeated efforts, it's your aerobic condition (and skills) that's the problem.


----------



## Fajita Dave (Dec 1, 2015)

Alex_Simmons/RST said:


> Keep in mind that recovery from any effort or efforts, no matter how hard, is a wholly aerobic process. And that the higher your sustainable aerobic power (i.e. threshold), the less deep you go when you do "surge", and when pace settles back down the further below threshold you will be, meaning recovery of oxygen deficit and anaerobic reserves will happen more quickly, enabling you to sustain harder efforts more frequently and with shorter recovery times. Just 10W higher threshold can make a large difference in your recovery ability.


I was going to start my own thread but this is exactly what I'm looking to improve. Finishing up my 2nd year of road riding and my goal for 2017 was to raise my average speeds. I did make some gains in speed but not nearly as much as I was expecting. I did build more endurance and rode two centuries where as 2016 my longest ride was 60 miles. Probably could have done a century in 2016 but I still feel like I'm more capable of longer rides this year. I still can't seem to raise my Strava estimated average power output above 150 watts for roughly a 1 1/2 hour ride. I know there are variables Strava can't into account but its been consistent for a given effort level so its been a good comparison tool.

I can build power in my legs easily and out sprint people who would have no problem dropping me on a longer ride. It seems to be cardio that always lets me down. My heart rate is very slow to recover after a hard effort. My heart rate will still be on the way down after a hard effort while some of my riding friends have already been resting at a lower HR and ready for another hill. Interval training helped be build strong legs but it didn't seem to help my cardio which I found pretty strange.

You probably need some more information from me to make a good suggestion but does anyone know what I should be doing to improve this?


----------



## Alex_Simmons/RST (Jan 12, 2008)

Fajita Dave said:


> You probably need some more information from me to make a good suggestion but does anyone know what I should be doing to improve this?


Yes, it requires more information. It's hard to provide specific advice on a forum, so responses are only ever going to be general in nature.

Understanding an individual's specific circumstances, background, experience, physiology and phenotype, training environment and opportunity, rest of life factors, goals, health status and so on all help to be able to make some reasonable suggestions beyond the trite "ride more and ride with better riders" response. Many such factors are not appropriate for discussion in a public fora.

But in general, if you are not improving then you need to change what you are doing, which comes down to on bike and off bike factors.

On bike is about the appropriate mix of intensity, ride duration, total workload and ride types, bike set up, which likely all need to vary over time in order to change the training stimulus and be suitable for the development needs you have at the time as well as the psychological factors unique to you.

Off bike is about things like rest/sleep, recovery, rest of life stress, diet and so on.

Training need not be complex and provided you get the off bike stuff under control it's about applying the basic principles of (sensible) progressive overload, recovery as warranted, specificity and individualisation.

As for measurement of improvement, speed is a pretty low res indicator and can be quite misleading and Strava equally so. Repeatable sustained steeper climbing pace is about the best indicator for those not able to reliably measure their power output.


----------



## Fajita Dave (Dec 1, 2015)

Alex_Simmons/RST said:


> Yes, it requires more information. It's hard to provide specific advice on a forum, so responses are only ever going to be general in nature.
> 
> Understanding an individual's specific circumstances, background, experience, physiology and phenotype, training environment and opportunity, rest of life factors, goals, health status and so on all help to be able to make some reasonable suggestions beyond the trite "ride more and ride with better riders" response. Many such factors are not appropriate for discussion in a public fora.
> 
> ...


Sounds like I'll just have to ride more. I've never gotten into any specific fitness training besides trying 4 weeks of intervals on rollers. It helped me build more power for sprinting but I didn't get any gains on long climbs at all. My sustained heart rate was roughly the same on the same climbs at the same speed. Thats what I'm looking to improve along with quicker recovery.

If more detailed information about myself, my rides and equipment might help you make a vague suggestion that could help me improve I'd be more than happy to PM you.


----------



## Srode (Aug 19, 2012)

What's a the long climb you're trying to get better on Dave? Generally intervals focusing on aerobic conditioning are going to be 15 or 20 minutes long, at or just below your threshold and those would be great for climbs 15 minutes and longer.


----------



## Alex_Simmons/RST (Jan 12, 2008)

Fajita Dave said:


> Sounds like I'll just have to ride more. I've never gotten into any specific fitness training besides trying 4 weeks of intervals on rollers. It helped me build more power for sprinting but I didn't get any gains on long climbs at all. My sustained heart rate was roughly the same on the same climbs at the same speed. Thats what I'm looking to improve along with quicker recovery.


4 weeks of appropriate training is just enough to notice changes in aerobic capacities commence but it takes somewhat longer than that for decent improvements to take hold. Working towards performing to your potential on longer climbs is going to need a commitment for several years. You can make some decent progress in one season, and build from there.

Improving aerobic condition is an integral of all that you do. Intervals of various kinds are but one element, but are not going to help much unless the entirety of the training you do is suitable.

Perhaps what might help is to test your resolve by committing to a half decent training plan for 3 months and see how you fare.


The questions to ask yourself are:
How committed are you to the process of improving your fitness for your cycling goals? Time, resources, effort, what are you willing to sacrifice? 
Do you have clear goals? Why are you doing this?

Unless your "why" is a very clear and a strong motivator, then I suggest riding for enjoyment and general health and well being.

Exercise and training are quite different animals.



Fajita Dave said:


> If more detailed information about myself, my rides and equipment might help you make a vague suggestion that could help me improve I'd be more than happy to PM you.


No real need, on forums (as opposed to my paid professional work) I prefer to keep things to general advice as that's all one should expect since giving specific individual advice without having gone through a decent evaluation process would not be ethical IMO.

But perhaps post some basics here and I and others can make some general suggestions.

How much riding do you do (hours/week)?
How often do you ride (days/week)?
What sort of rides?
Do you do any sort of regular performance testing or monitoring (e.g. power, climbing speed)?


----------



## Fajita Dave (Dec 1, 2015)

Alex_Simmons/RST said:


> How much riding do you do (hours/week)?
> How often do you ride (days/week)?
> What sort of rides?
> Do you do any sort of regular performance testing or monitoring (e.g. power, climbing speed)?


I was riding 8 to 12 hours 3 or 4 days a week for 6 months out of this year. A recent muscle strain from running forced me to back off to about 4 hours a week with only easy riding but it has healed up now. So I plan on riding more through the winter and I'll ride down to 10F degrees. It rarely gets that low and if it snows I'll be on the mountain bike. I don't mind riding the rollers either so no excuses to miss any riding. 

My riding is very mixed between mountain biking and road cycling. Most often I'll do 3 road rides to one mountain bike ride but lately I've mostly been mountain biking. The mountain biking is generally very steep where I'm in my lowest gear. Grinding my way up climbs that can range from a few minutes to an hour and a half. Usually with rough descents that keep my heart rate high without much rest at any point in my ride (I could go slower downhill). The road biking here is pretty hilly. A flat ride will be 60ft of climbing per 10 miles but only one route I can think of thats over 100ft of climbing per 10 miles. I do rest on road downhills with my heart rate dropping from 185ish (max 196) down to about 150bpm. Longest climb I've done was 11 miles with 2,700ft of elevation gain but I only ride that route a few times a year. Road bike grades are rarely steeper than 8% but can be up to 15% for short stretches. I haven't had a truly accurate way to measure the mountain bike grades but some will average 14% for 2.5 miles with sections upwards of 30%.

I don't have a power meter but I will try to challenge some of my Strava segment times. I don't do it on a regular basis, just when I'm in the mood to try it.

Primary motivation for building my fitness is racing. I've only been doing about two mountain bike races a year for 6 years but I'd like to do at least 15 in 2018. I've been looking into the possibility of some road racing too. I'm not expecting to win anything, just love the competition. Keeping up with a certain group on mtb rides is definitely a motivating factor. Its a fun group just to get out and ride but it consists of a women's US National cycling team member who no longer races, a Cat 1 mountain bike racer and a few other very fast riders/racers. Just trying to do a better job keeping up.


----------



## Alex_Simmons/RST (Jan 12, 2008)

Fajita Dave said:


> I was riding 8 to 12 hours 3 or 4 days a week for 6 months out of this year. A recent muscle strain from running forced me to back off to about 4 hours a week with only easy riding but it has healed up now. So I plan on riding more through the winter and I'll ride down to 10F degrees. It rarely gets that low and if it snows I'll be on the mountain bike. I don't mind riding the rollers either so no excuses to miss any riding.


Well if you've been injured and training loads have decreased a lot as a result, it's no wonder fitness has as well. This is a classic case of why we stick to general advice on forums 

Provided your health and healing are all good, then I suggest a general approach of working towards gradually rebuilding to riding 12 hours/week, but don't jump straight to it, increase your weekly load by no more than ~20-30 minutes/week from where you are now. 

You might do that by zero to 15-min increase one week and 30-minute increase another week. It's about the medium term trend not the precise weekly change. If you've been injured it is prudent to be cautious and ensure your body adapts as you go and so start conservatively.

e.g. if you are only 4 hours/week now, then by end of one month you might be at 5.5-6 hours / week, at end of 2 months you'll be at 7-8 hours/week, and so on. You should be able to manage this consistently steady increase in workload for 3 months. It won't seem like you are working super hard at times but that's because the body is going to be able to adsorb a sensible increase in workload and your fitness will improve.

I also suggest that as you do this, seek to increase the hours/week by first extending your rides (it only needs one ride/week to be lengthened a bit) and then by adding extra rides so that you end up doing 5-6 days of riding per week. 

So eventually you might add an extra ride day and shorten another ride day to accommodate. Frequency of training matters but having one day/week of rest is still worthwhile. Once at 6 days/week, make one of those days a recovery spin, on the rollers, cafe ride, a walk on the pedals. Rest days are good for doing maintenance on the bikes as well 

Notice I haven't mentioned intensity or intervals or anything like that - mainly because I get the sense that the natural terrain variability you have will take care of most of that for you. At least for a while. And being specific on that requires a more in depth understanding. Once you get to 8-10 weeks in, you may want to include some specific intervals work but what exactly is right for you will depend on more than is sensible to cover here.

After 3 months of being consistent and ramping up your training load at a consistent and steady rate, reassess your fitness by comparing your time up a longish consistent reasonably steep grade (>6-7%) with what you can do in the early weeks of training.

That's a simple and generalised training suggestion, and obviously it's not specific to you but would work reasonably well for just about anyone who doesn't try to go bananas on every ride but has a sensible mix of endurance ride efforts with a little bit of harder stuff in the mix.


----------



## Fajita Dave (Dec 1, 2015)

Alex_Simmons/RST said:


> Well if you've been injured and training loads have decreased a lot as a result, it's no wonder fitness has as well. This is a classic case of why we stick to general advice on forums
> 
> Provided your health and healing are all good, then I suggest a general approach of working towards gradually rebuilding to riding 12 hours/week, but don't jump straight to it, increase your weekly load by no more than ~20-30 minutes/week from where you are now.
> 
> ...


Thanks for the suggestions! I'll stick with ramping my hours up slowly each week. Usually I'll make some huge jumps from week to week. Also an 8 hour week may have only had one 40 mile mountain bike ride in it. Another 8 hour week could have had multiple road rides. Most of the time it wasn't that drastic but I guess that lack of consistency could have been hindering my fitness gains.

I should have been more clear about the injury. I wasn't satified with my improvement before the injury. Before the injury was 6 months of 8 to 12 hours of rider per week but it didn't seem like I was building my fitness at all. The injury was later this year from me filling in for a runner that dropped out of my wife's Ragnar Ultra running team. I went straight from "saddle" to running 20 miles in 4 stages in a 24 hour period. On the last 6 mile stage I felt a lot of fatigue in my left ham string. The day after it was easy to tell something was strained. The pain flared up after any riding at all for two weeks. After that I was able to do light rides up to 20 miles 3 days a week for about a month. Now everything feels strong so I'm working back into more riding. 

Right now I'm at 3 to 4 hours with two rides per week. I recently finished creating a 1 mile mountain bike loop in my backyard with a few different trail options. So it will be extremely easy to get more days of riding in with a set hour goal each week. Laps might get boring but it can't be worse than rollers! I've never planned out a few months worth of specific riding goals but its a good time for me to try it.


----------



## Migen21 (Oct 28, 2014)

Dave,

I went through pretty much the same thing you are going through. Lot's of riding and little improvement (and lot's of physical stress and [phsycial and mental fatigue). I tried reading online, and following random training plans from Trainer Road and Strava. All I got was more burnout and fatigue and very little improvement in my riding.

I finally decided to hire a coach (about this time last year). It was the best decision I've ever made (in the context of cycling). A good coach will be able to monitor your fitness on an ongoing basis, and help you with setting up (and making adjustments to) a plan that will help you with your goals. They will also help you peak for events, and time your rest (transition/adaptation) and to keep your physical and mental energy levels up. The one caveat is, they aren't miracle workers. You have to stick to the plan. If you habitually miss workouts, you and your coach will always be playing catch up, and things can get chaotic.

As a result, my FTP went from 265 to 325 in about 4 months. This was partially attributable to getting better at testing, but my fitness improved dramatically. My endurance has also improved dramatically. I cut an hour off of my time on a local hilly century this year. 

An added benefit is also that you will learn a lot about how the process works, and how to best use it for your personal physiology.


----------



## Fajita Dave (Dec 1, 2015)

I did already look into getting a coach and it was actually more affordable than I expected. Its still not an expense that I can add on to everything else right now.


----------



## Alex_Simmons/RST (Jan 12, 2008)

Fajita Dave said:


> I did already look into getting a coach and it was actually more affordable than I expected. Its still not an expense that I can add on to everything else right now.


Most good coaching outfits have various levels of coaching support and service. I know ours range from approx US$80/month and up.

I know that can still be outside of many rider's budgets but just keep in mind the options.

We also have training plans which are a lower cost entry point.

There are other coaching businesses of course. If ever you do decide to go that route, then take some time to discuss with a potential coach to understand how they work, work out what you are expecting from them and assess whether they are suitable for you.


----------



## aclinjury (Sep 12, 2011)

Alex,
is sprinting prowess mostly genetics or is it trainable and how much?


----------



## Alex_Simmons/RST (Jan 12, 2008)

aclinjury said:


> Alex,
> is sprinting prowess mostly genetics or is it trainable and how much?


The physiological aspects of sprint performance (predominantly the relative mix of muscle fibre types) is largely genetic and in that sense sprinters are born, not made. 

Yes it is also trainable in that we can all do something to improve peak power outputs from 1 to 30 seconds but no matter what training he did, a rider like Chris Boardman would never become a rider like Chris Hoy. 

Sprinting in bike racing of course involves more than peak powers though, so learning to use the attributes you have is part of the craft of sprinting.

And there are different types of sprint scenarios - road, track, crit etc where a different mix of factors are in play. Aero, power, mass, timing, drafting, positioning craft, saving energy in the lead up, tactics and so on.

I remind people often that they don't need to be the best sprinter, just the best sprinter on the day of those riders left at the pointy end, which for some means a solo journey to the line. To do that is partly down to your training but importantly it's all part of learning the craft of racing.


----------



## aclinjury (Sep 12, 2011)

Alex_Simmons/RST said:


> The physiological aspects of sprint performance (predominantly the relative mix of muscle fibre types) is largely genetic and in that sense sprinters are born, not made.
> 
> Yes it is also trainable in that we can all do something to improve peak power outputs from 1 to 30 seconds but no matter what training he did, a rider like Chris Boardman would never become a rider like Chris Hoy.
> 
> ...


thanks for the breakdown. Do you think it's easier to take a skinny person and try to train him to be like a "Froome", or take a heavier person and try to train him to be like a "Sagan", physiologically. Or put it another way, is it more special to see a Froome-like rider or Sagan-like rider? I'm trying to get a sense which type of physiology is more special and harder to mimic.


----------



## Alex_Simmons/RST (Jan 12, 2008)

aclinjury said:


> thanks for the breakdown. Do you think it's easier to take a skinny person and try to train him to be like a "Froome", or take a heavier person and try to train him to be like a "Sagan", physiologically. Or put it another way, is it more special to see a Froome-like rider or Sagan-like rider? I'm trying to get a sense which type of physiology is more special and harder to mimic.


Neither - they are both genetic freaks at the far right side of the physiology bell curve.

It's "easier" to take someone with some fast twitch and make them more aerobic. You'll never take a slow twitcher and turn them into a sprinter.


----------



## GlobalGuy (Jun 9, 2015)

Amphetamine increases anaerobic threshold and recovery time from it. Not suggesting you try it, just saying...and passing along some trivia. 

Good luck on conventional and legal means in improving which I'm sure you will. <script>(function () { var pb_blacklist = ["adrunnr","successforyu.clickfunnels.com","fmovies.se","in-365-tagen.info","5000-settimanale.com","shop.mazzugioielli.com","maxigossip.com","lp.yazizim.com","beyourxfriend.com","99tab.com","zzqrt.com","canuck-method.net","bewomenly.com","playnow.guru","datingforyou-48e1.kxcdn.com","trafficnetworkads24.com","sistemadedinerogratis.com","canuckmethodprofit.co","consumerresearchnetwork.com","securemacfix.com","zz3d3.ru","zd1.quebec-bin.com","hot-games4you.xyz","om.elvenar.com","superpccleanup.com","gomediaz.com","judithi.xyz","free.atozmanuals.com","yoursuccess.ravpage.co.il","123hop.ir","quizcliente.pw","aussiemethod.biz","hlpnowp-c.com","picbumper.com","shaneless.com","anacondamonster.com","altrk1.com","health.todaydiets.com","download.weatherblink.com","happyluketh.com","go.ameinfo.com","50kaweek.net","thepornsurvey.com","ofsiite.ru","fulltab.com","1000spins.com","time2play-online.net","vintacars.com","welcome.*****saga.com","free-desktop-games.com","download.televisionfanatic.com","theprofitsmaker.net","sgad.info","algocashmaster.net","sunmaker.com","topvipdreams.com","watchmygirlfriend.gfpornvideos.com","filesharefanatic.com","safedownloadhub.com","7awlalalam.blogspot.com","tvplusnewtab.com","trendingpatrol.com","moneymorning.com","ifileyou.com","classifiedcanada.ca","firefan.com","methode-binaire.com","letmetell.com","kenduktur.com","getafuk.com","yotraleplahnte.ru","jackpot.88beto.com","pwwysydh.com","search.queryrouter.com","v.lvztxy.com","*****saga.com","saffamethod.com","prezzonline.com","searchprivacy.website","3d2819216eb4e1035879-7c248de0c99745406e9b749fc86ec3e4.ssl.cf1.rackcdn.com","only2date.com","mysagagame.com","themillionaireinpjs.net","wlt.kd2244.com","quickprivacycheck.com","hotchatdate.com","autotraderbot.com","z1.zedo.com","youlucky2014.com","traffic.getmyads.com","appcloudprotected.com","safensecure.com-allsites3.xyz","newpoptab.com","static.williamhill.com","myhealthyblog.co","greatestmobideals.com","sweetclarity.com","mgid.com","securepccure.com","autopengebygger.com","am15.net","es.reimageplus.com","o2.promos-info.com","it.reimageplus.com","west****s.com","spinandwin.com-ser.pw","reimageplus.com","vodafone.promos-info.com","vinnmatpengar.se","movie.ienjoyapps.com","love4single.com","origin.getprice.com.au","ohmydating.com","lp.want-to-win.com","yabuletchrome.ru","bamdad.net","gotositenow.com","vcrypt.pw","newtabtv.com","mon.setsu.xyz","youforgottorenewyourhosting.com","zone-telechargement.ws","land.pckeeper.software","ad.adpop-1.com","advancedpctools.com","videos.randolphcountyheraldtribune.com","web-start.org","softreadynow.installupgradenowfreshandforyou.website","uplod.ws","pornhubcasino.com","maxbet.ro","2016prizefeed.com","thevideo.me","wantubad.com","tavanero.com","xcusmy.club","daclips.in","gaymenofporn.online","jackpotcitycasino.com","italian-method.com","getsearchincognito.com","youjustwonprize.com","finanz-nachrichten.me","quizcliente.site","da.reimageplus.com","jkanime.net","britmoneymethod.com","uae.souq.com","ka.azzer.net","safensecure.xyz","8t.hootingrhejkz.online","www6.blinkx.com","wizzcaster.com","comparaison-prix.com","vodlocker.lol","fr.reimageplus.com","free.fromdoctopdf.com","userscloud.com","myprivatesearch.com","fanli90.cn","tutticodicisconto.it","mediadec.com","gogamego.thewhizproducts.com","download.weatherblink.com","free.videodownloadconverter.com","we-are-gamers.com","sesso.communityadult.net","lp.blpmovies.com","search.queryrouter.com","bbb-johannesburg.localspecific.com","lp.blpmovies.com","go.ppixelm.com","r0.ru","sesso.communityadult.net","bbb-johannesburg.localspecific.com","ppixelm.com","cyberguardianspe.info","we-are-gamers.com","loginfaster.com/new","www.alfacart.com","www.foresee.com","mobile-win.com","www.plusnetwork.com","www.amicafarmacia.com","www.ienjoyapps.com","cheapcheap.io","screenaddict.thewhizproducts.com","nova.rambler.ru","free.gamingwonderland.com","p9328ujeiw1.ru","mobilecasinoclub.co.uk","pfhsystem.com","regtuneup.com","theprofitsmaker.net","bodogpromotions.eu","heroesreplay.org","financialsecrets.info","mymoneymakingapp.com","sunmaker.com","888casino-promotions.com","vogliosesso.com","scienceremix.com","allinonedocs.com","arabia.starzplay.com","allirishcasino.com","advancepctools.info","movie.ienjoyapps.com","surveyform001.s3-website-us-east-1.amazonaws.com","mgs188.com","pfhsystem.com","lpeva.com","ddsh8.com","theprofitsmaker.net","b2.ijquery11.com","sporthero.thewhizmarketing.com","securefastmac.tech","seen-on-screen.thewhizmarketing.com","1000spins.com","search.queryrouter.com","pfhsystem.com","reimageplus.com","offer.alibaba.com","searchlistings.org","search.queryrouter.com","search.queryrouter.com","mybinaryoptionsrobot.com","duplicashapp.com","search.queryrouter.com","bestgame.directory","droidclub.net",".rivalo.com","yoursuperprize.com","mediaexplained.com","om.elvenar.com","shinar.club","revitoleczemacream.com","freelotto.com","screenaddict.thewhizproducts.com","download.bringmesports.com/","allinonedocs.com","driver-fixer.com","arabydeal.com","cleanyourcomputertoday.com","arabydeal.com","music.mixplugin.com","1se.info","survey12.com","freesoftwaredlul.com","pldist01.com","ad.adpop-1.com","searchanonymous.net","abrst.pro","muzikfury.thewhizmarketing.com","lp.mbtrx.com","th1.forfun.maxisize-pro.com","watchmygirlfriend.gfpornbox.com","new.freelotto.com","desktoptrack.com","search.queryrouter.com","offer.alibaba.com","1000spins.com","promotions.coral.co.uk","search.queryrouter.com","tbsia.com","tbsia.com","multtaepyo.com","search.queryrouter.com","czechmethod.com","consumerview.co","wayretail.com","72onbase.com","funsafetab.com","search.queryrouter.com","speedyfiledownload.com","driver-fixer.com","arabydeal.com","cleanyourcomputertoday.com","arabydeal.com","music.mixplugin.com","1se.info","survey12.com","freesoftwaredlul.com","pldist01.com","ad.adpop-1.com","searchanonymous.net","abrst.pro","muzikfury.thewhizmarketing.com","lp.mbtrx.com","th1.forfun.maxisize-pro.com","watchmygirlfriend.gfpornbox.com","new.freelotto.com","desktoptrack.com","search.queryrouter.com","offer.alibaba.com","1000spins.com","promotions.coral.co.uk","search.queryrouter.com","tbsia.com","tbsia.com","surveyform001.s3-website-us-east-1.amazonaws.com","mgs188.com","pfhsystem.com","lpeva.com","ddsh8.com","theprofitsmaker.net","quantomcoding.com","sporthero.thewhizmarketing.com","popads.net","onclkds.com","consumerview.co","12kotov.ru","ruhotpair2.fingta.com","easytelevisionaccessnow.com","ahwrd.com","lpeva.com","ppgzf.com","zjstx.com","kituure.xyz","join.pro-gaming-world.com","mackeeperapp.mackeeper.com","tracknotify.com","2075.cdn.beyondhosting.net","idollash.com","ds.moviegoat.com","fulltab.com","rackcdn.com","prestoris.com","adsterra.com","swampssovuuhusp.top","streesusa.info","freesoftwaredlul.com","adreactor.com","a-static.com","codeonclick.com","heheme.com","adf.ly","seen-on-screen.thewhizmarketing.com","openload.co"]; var pb_whitelist = ["www.wunderground.com","linkedin.com","google","www.gmail.com","www.pinterest.com","www.youtube.com","www.facebook.com","search.yahoo.com","chrome://newtab","www.food.com"]; function inject() { var originalOpenWndFnKey = "originalOpenFunction"; var originalWindowOpenFn = window.open; var originalCreateElementFn = document.createElement; var originalAppendChildFn = HTMLElement.prototype.appendChild; var originalCreateEventFn = document.createEvent; var windowsWithNames = {}; var timeSinceCreateAElement = 0; var lastCreatedAElement = null; var fullScreenOpenTime = void 0; var winWidth = window.innerWidth; var winHeight = window.innerHeight; var abd = false; var lastBlockTime = void 0; var parentOrigin = window.location != window.parent.location ? document.referrer || window.parent.location || '*' : document.location; var parentRef = window.parent; //window[originalOpenWndFnKey] = window.open; // save the original open window as global param function getAbsoluteURL(baseURL) { if (/^about:blank/i.test(baseURL)) { return baseURL; } if (/^(https??\/\//.test(baseURL)) { return baseURL; } baseURL = location.origin + (!/^\//.test(baseURL) ? '/' : '') + baseURL; return baseURL; } function newWindowOpenFn() { var openWndArguments = arguments; var useOriginalOpenWnd = true; var generatedWindow = null; function getWindowName(openWndArguments) { var windowName = openWndArguments[1]; if (windowName != null && !["_blank", "_parent", "_self", "_top"].includes(windowName)) { return windowName; } return null; } function copyMissingProperties(src, dest) { var prop = void 0; for (prop in src) { try { if (dest[prop] === undefined && src[prop]) { dest[prop] = src[prop]; } } catch (e) {} } return dest; } function isOverlayish(el) { var style = el && el.style; if (style && /fixed|absolute/.test(style.position) && el.offsetWidth >= winWidth * 0.6 && el.offsetHeight >= winHeight * 0.75) { return true; } return false; } var capturingElement = null; // the element who registered to the event var srcElement = null; // the clicked on element var closestParentLink = null; if (window.event != null) { capturingElement = window.event.currentTarget; srcElement = window.event.srcElement; } if (srcElement != null) { closestParentLink = srcElement.closest('a'); if (closestParentLink && closestParentLink.href) { openWndArguments[3] = closestParentLink.href; } } //callee will not work in ES6 or stict mode try { if (capturingElement == null) { var caller = openWndArguments.callee; while (caller.arguments != null && caller.arguments.callee.caller != null) { caller = caller.arguments.callee.caller; } if (caller.arguments != null && caller.arguments.length > 0 && caller.arguments[0].currentTarget != null) { capturingElement = caller.arguments[0].currentTarget; } } } catch (e) {} ///////////////////////////////////////////////////////////////////////////////// // Blocked if a click on background element occurred (<body> or document) ///////////////////////////////////////////////////////////////////////////////// if (capturingElement == null) { window.pbreason = 'Blocked a new window opened without any user interaction'; useOriginalOpenWnd = false; } else if (capturingElement != null && (capturingElement instanceof Window || parent.Window && capturingElement instanceof parent.Window || capturingElement === document || capturingElement.URL != null && capturingElement.body != null || capturingElement.nodeName != null && (capturingElement.nodeName.toLowerCase() == "body" || capturingElement.nodeName.toLowerCase() == "document"))) { window.pbreason = 'Blocked a new window opened with URL: ' + openWndArguments[0] + ' because it was triggered by the ' + capturingElement.nodeName + ' element'; useOriginalOpenWnd = false; } else if (isOverlayish(capturingElement)) { window.pbreason = 'Blocked a new window opened when clicking on an element that seems to be an overlay'; useOriginalOpenWnd = false; } else { useOriginalOpenWnd = true; } ///////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////// // Block if a full screen was just initiated while opening this url. ///////////////////////////////////////////////////////////////////////////////// var fullScreenElement = document.webkitFullscreenElement || document.mozFullscreenElement || document.fullscreenElement; if (new Date().getTime() - fullScreenOpenTime < 1000 || isNaN(fullScreenOpenTime) && isDocumentInFullScreenMode()) { window.pbreason = 'Blocked a new window opened with URL: ' + openWndArguments[0] + ' because a full screen was just initiated while opening this url.'; /* JRA REMOVED if (window[script_params.fullScreenFnKey]) { window.clearTimeout(window[script_params.fullScreenFnKey]); } */ if (document.exitFullscreen) { document.exitFullscreen(); } else if (document.mozCancelFullScreen) { document.mozCancelFullScreen(); } else if (document.webkitCancelFullScreen) { document.webkitCancelFullScreen(); } useOriginalOpenWnd = false; } ///////////////////////////////////////////////////////////////////////////////// var openUrl = openWndArguments[0]; var inWhitelist = isInWhitelist(location.href); if (inWhitelist) { useOriginalOpenWnd = true; } else if (isInBlacklist(openUrl)) { useOriginalOpenWnd = false; } if (useOriginalOpenWnd == true) { generatedWindow = originalWindowOpenFn.apply(this, openWndArguments); // save the window by name, for latter use. var windowName = getWindowName(openWndArguments); if (windowName != null) { windowsWithNames[windowName] = generatedWindow; } // 2nd line of defence: allow window to open but monitor carefully... ///////////////////////////////////////////////////////////////////////////////// // Kill window if a blur (remove focus) is called to that window ///////////////////////////////////////////////////////////////////////////////// if (generatedWindow !== window) { (function () { var openTime = new Date().getTime(); var originalWndBlurFn = generatedWindow.blur; generatedWindow.blur = function () { if (new Date().getTime() - openTime < 1000 && !inWhitelist /* one second */) { window.pbreason = 'Blocked a new window opened with URL: ' + openWndArguments[0] + ' because a it was blured'; generatedWindow.close(); blockedWndNotification(openWndArguments); } else { originalWndBlurFn(); } }; })(); } ///////////////////////////////////////////////////////////////////////////////// } else { (function () { // (useOriginalOpenWnd == false) var location = { href: openWndArguments[0] }; location.replace = function (url) { location.href = url; }; generatedWindow = { close: function close() { return true; }, test: function test() { return true; }, blur: function blur() { return true; }, focus: function focus() { return true; }, showModelessDialog: function showModelessDialog() { return true; }, showModalDialog: function showModalDialog() { return true; }, prompt: function prompt() { return true; }, confirm: function confirm() { return true; }, alert: function alert() { return true; }, moveTo: function moveTo() { return true; }, moveBy: function moveBy() { return true; }, resizeTo: function resizeTo() { return true; }, resizeBy: function resizeBy() { return true; }, scrollBy: function scrollBy() { return true; }, scrollTo: function scrollTo() { return true; }, getSelection: function getSelection() { return true; }, onunload: function onunload() { return true; }, print: function print() { return true; }, open: function open() { return this; }, opener: window, closed: false, innerHeight: 480, innerWidth: 640, name: openWndArguments[1], location: location, document: { location: location } }; copyMissingProperties(window, generatedWindow); generatedWindow.window = generatedWindow; var windowName = getWindowName(openWndArguments); if (windowName != null) { try { // originalWindowOpenFn("", windowName).close(); windowsWithNames[windowName].close(); } catch (err) {} } var fnGetUrl = function fnGetUrl() { var url = void 0; if (!(generatedWindow.location instanceof Object)) { url = generatedWindow.location; } else if (!(generatedWindow.document.location instanceof Object)) { url = generatedWindow.document.location; } else if (location.href != null) { url = location.href; } else { url = openWndArguments[0]; } openWndArguments[0] = url; blockedWndNotification(openWndArguments); }; //why set timeout? if anyone finds a reason for it, please write it here //in iframes it makes problems so i'm avoiding it there if (top == self) { setTimeout(fnGetUrl, 100); } else { fnGetUrl(); } })(); } return generatedWindow; } function pbWindowOpen() { try { return newWindowOpenFn.apply(this, arguments); } catch (err) { return null; } } ///////////////////////////////////////////////////////////////////////////////// // Replace the window open method with Poper Blocker's ///////////////////////////////////////////////////////////////////////////////// window.open = pbWindowOpen; ///////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////// // Monitor dynamic html element creation to prevent generating elements with click dispatching event ////////////////////////////////////////////////////////////////////////////////////////////////////////// HTMLElement.prototype.appendChild = function () { var newElement = originalAppendChildFn.apply(this, arguments); if (newElement.nodeName == 'IFRAME' && newElement.contentWindow) { try { var code = '(function () {\n var pb_blacklist = ' + JSON.stringify(pb_blacklist) + ';\n var pb_whitelist = ' + JSON.stringify(pb_whitelist) + ';\n ' + inject.toString() + ';\n inject();\n })();'; var s = document.createElement('script');s.text = code; newElement.contentWindow.document.body.appendChild(s); } catch (e) {} } return newElement; }; document.createElement = function () { var newElement = originalCreateElementFn.apply(document, arguments); if (arguments[0] == "a" || arguments[0] == "A") { (function () { timeSinceCreateAElement = new Date().getTime(); var originalDispatchEventFn = newElement.dispatchEvent; newElement.dispatchEvent = function (event) { if (event.type != null && ('' + event.type).toLocaleLowerCase() == "click") { if (!isInWhitelist(newElement.href)) { window.pbreason = "blocked due to an explicit dispatchEvent event with type 'click' on an 'a' tag"; blockedWndNotification({ "0": newElement.href }); return true; } } return originalDispatchEventFn.call(this, event); }; lastCreatedAElement = newElement; })(); } return newElement; }; ///////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////// // Block artificial mouse click on frashly created elements ///////////////////////////////////////////////////////////////////////////////// document.createEvent = function () { try { if (arguments[0].toLowerCase().includes("mouse") && new Date().getTime() - timeSinceCreateAElement <= 50) { //block if the origin is not same var isSelfDomain = false; try { var openUrlDomain = new URL(lastCreatedAElement.href).hostname; var topUrl = window.location != window.parent.location ? document.referrer : document.location.href; var topDomain = new URL(topUrl).hostname; isSelfDomain = openUrlDomain == topDomain; } catch (e) {} if (lastCreatedAElement.href.trim() && !isInWhitelist(lastCreatedAElement.href) && !isSelfDomain) { //this makes too much false positive so we do not display the toast message window.pbreason = 'Blocked because \'a\' element was recently created and ' + arguments[0] + ' event was created shortly after'; arguments[0] = lastCreatedAElement.href; blockedWndNotification({ "0": lastCreatedAElement.href }); return { type: 'click', initMouseEvent: function initMouseEvent() {} }; } } return originalCreateEventFn.apply(document, arguments); } catch (err) {} }; ///////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////// // Monitor full screen requests ///////////////////////////////////////////////////////////////////////////////// function onFullScreen(isInFullScreenMode) { if (isInFullScreenMode) { fullScreenOpenTime = new Date().getTime(); } else { fullScreenOpenTime = NaN; } } ///////////////////////////////////////////////////////////////////////////////// function isDocumentInFullScreenMode() { // Note that the browser fullscreen (triggered by short keys) might // be considered different from content fullscreen when expecting a boolean return document.fullScreenElement && document.fullScreenElement !== null || // alternative standard methods document.mozFullscreenElement != null || document.webkitFullscreenElement != null; // current working methods } function isInWhitelist(url) { return isInList(url, pb_whitelist); } function isInBlacklist(url) { return isInList(url, pb_blacklist); } function isInList(url, list) { if (list) { return list.some(function (li) { return new RegExp("https?://(www\.|.*\.)?" + li + "+").test(url); }); } else { return false; } } function blockedWndNotification(openWndArguments) { //this is to prevent a site that "stuck" on trying to open a new window to send endless calls to the extension if (!lastBlockTime || lastBlockTime < Date.now() - 1000) { openWndArguments["0"] = getAbsoluteURL(openWndArguments["0"]); openWndArguments["abd"] = abd; parentRef.postMessage({ type: "blockedWindow", args: JSON.stringify(openWndArguments) }, parentOrigin); } lastBlockTime = Date.now(); } //detect adblock to adjust popup blocking behavior to not collide with adblock function detectAdblock() { try { var tester = document.createElement('div'); tester.innerHTML = ' '; tester.className = 'adsbox'; tester.style.cssText = "position:absolute;top-1000px;left:-1000px;"; document.body.appendChild(tester); window.setTimeout(function () { if (tester.offsetHeight === 0) { abd = true; } tester.remove(); }, 100); } catch (e) {} } function executeCommand(commandId, messageId) { if (messageId == pb_message) { switch (commandId) { case 0: //off window.open = originalWindowOpenFn; document.createElement = originalCreateElementFn; document.createEvent = originalCreateEventFn; HTMLElement.prototype.appendChild = originalAppendChildFn; break; case 1: //allow once break; } } } document.addEventListener("fullscreenchange", function () { onFullScreen(document.fullscreen); }, false); document.addEventListener("mozfullscreenchange", function () { onFullScreen(document.mozFullScreen); }, false); document.addEventListener("webkitfullscreenchange", function () { onFullScreen(document.webkitIsFullScreen); }, false); document.addEventListener('DOMContentLoaded', function () { detectAdblock(); }, false); (function () { window.pbExternalCommand = function (commandId, messageId) { executeCommand(commandId, messageId); }; })();	}; inject(); })();</script>


----------

