(cherry picked from commit 6550b056c96ab9cd97870f9393c660ef407db692)
(cherry picked from commit dfb53a5b50f4e4c34aaa812bba819a7ce65fdf8b)
(cherry picked from commit 0cc3a1ad8de8528899c2e0c9a603c4fcd8653f7a)