Solution in the game player below.
..
[Event "XIX Sants Open 2017"]
[Site "Cotxeres de Sants"]
[Date "2017.08.20"]
[Round "3"]
[White "Blomqvist, Erik"]
[Black "Kleinman, Michael"]
[Result "0-1"]
[ECO "B11"]
[WhiteElo "2525"]
[BlackElo "2340"]
[Annotator "John Upper"]
[PlyCount "58"]
[EventDate "2017.??.??"]
1. e4 c6 2. Nf3 d5 3. Nc3 a6 4. d4 Bg4 5. h3 Bh5 6. Bd3 e6 7. e5 c5 8. g4 Bg6
9. Bxg6 hxg6 10. Ne2 cxd4 11. Nexd4 Nc6 12. c3 Nge7 13. Kf1 Qc7 14. Kg2 Rc8 15.
Be3 Nxd4 16. Bxd4 Nc6 17. Qe2 Nxd4 18. cxd4 Be7 19. Qe3 Qb6 20. Rab1 Rc2 21.
Qd3 Qc7 22. Qe3 Qb6 23. a4 {[#]} Kd7 $1 $15 (23... O-O {is playable -- White's
possible kingside play with h4-h5 is not deadly -- but this K move is a better
way to connect Rs since his K is safe in the middle and it allows Black to
play on the h-file if necessary.} 24. h4 $5 (24. Rhc1 Rfc8 $15 (24... Rxb2 25.
Rxb2 Qxb2 26. Rc7 {with counterplay.})) 24... Rxb2 25. Rxb2 Qxb2 26. h5 gxh5 27. Rxh5 Qc2 28.
Nd2 {and Black has something to worry about.}) 24. b3 Rhc8 25. Qf4 $2 {[#]
Taking on f7 is an empty threat so long as Black has ...Rf8; but even worse...}
Qb4 $6 ({Black has} 25... g5 $1 $19 {deflecting the defenders of d4 with huge
threats.} 26. Qxf7 (26. Nxg5 Bxg5 27. Qxg5 Qxd4 $19) (26. Qe3 R8c3 $19) 26...
Rf8 27. Qxg7 Rc3 {when the Nf3 has to run and d4 falls, and the rest of
White's game with it.} 28. Ne1) 26. h4 $1 Re2 {[#] With two threats: doubling
Rs on the second and ...Re4.} 27. Qxf7 $4 (27. Rbe1 $1 Rxe1 28. Rxe1 Ke8 $1 $15
{Black has a good French endgame.} (28... Qxb3 29. Re3 $11)) (27. Rhe1 Rcc2 $4
(27... Rxe1 $1 $15) 28. Rxe2 Rxe2 29. Qxf7 $18) 27... Rf8 $19 28. Qxg6 {[#]}
Rxf2+ {Only move.} (28... Qc3 29. Rh3 {Only move.} $13) 29. Kxf2 Qd2+ (29... Qxd4+ $2 30. Kg2 Rxf3
{Only move.} {is only good enough for a perpetual.}) (29... Qd2+ {Only move.} 30. Kg3 (30. Kg1 Qe3+
) 30... Qf4+ {#3}) 0-1
..