(cherry picked from commit d220ffae6ab3b1d564e16fb7132a3e116b77e1e3)
(cherry picked from commit 25665f548e5338f5adb6c430bebd1b9b03c723c6)
(cherry picked from commit c5e5228e7849a0caad53e4fa7bcb9958da2e8f3e)