(cherry picked from commit 28eb23738c64856bedb57d7182a51dea46288b0a)
(cherry picked from commit a9e4ef9b7b0d161f41211fdd5d3a12a33891d41a)
(cherry picked from commit 0a4023ef004fb184c4bd333332fbac574af98d4e)