Astana's Vincenzo Nibali won the 19th stage of the Giro d'Italia as Esteban Chaves took the overall lead.
Italian Nibali, the 2013 champion, moved up from fourth to second overall, only 44 seconds behind Colombian Chaves, who finished third on Friday.
Overnight leader Steven Kruijswijk finished almost five minutes later after surviving a huge crash.
The Lotto rider, who dropped to third overall, hit a snowbank on a descent from the highest point of the race.
The Dutchman, who drifted wide on a left-hand bend and went over his handlebars, appeared to be not badly hurt but needed a change of bike and was unable to make up the time he lost on the ride to the summit finish at Risoul.
Kruijswijk was not the only rider to crash on the treacherous descent of the Colle dell'Agnello, which peaks at 2,744m. Katusha's Ilnur Zakarin suffered a suspected broken collarbone after he came off and landed near a stream.
Nibali rode clear on the final ascent and broke down in tears after beating Team Sky's Mikel Nieve by 51 seconds, with Chaves a couple of seconds further adrift.
Kruijswijk is now 65 seconds behind Chaves to leave the race intriguingly poised and Saturday's 134km mountainous stage, which features three category one climbs and a summit finish, will decide the overall winner.
The 99th edition of the race ends with a processional stage into Turin on Sunday.
General classification after stage 19:
1. Esteban Chaves (Col/Orica) 78hrs 14mins 20secs
2. Vincenzo Nibali (Ita/Astana) +44secs
3. Steven Kruijswijk (Ned/LottoNL) +1min 05secs
4. Alejandro Valverde (Spa/Movistar) +1min 48secs
5. Rafal Majka (Pol/Tinkoff) +3mins 59secs