(cherry picked from commit 21a2d0b8d03faf1c66ec0c5c11fbd2ab24547727)
(cherry picked from commit 5c8b956f8f3f17e8d577d97cb66424954be72684)
(cherry picked from commit 1f842c71c35db031a24de646429834d6054adf1d) (cherry picked from commit 144746223d8dc3f6ff2a0e805aa27a6e57df558a)