(cherry picked from commit 2dcd1310974c18a03f0d896789ed883e609b4083)
(cherry picked from commit 5002fc5fccd16927f08ba1d8673617ecca42be09)
(cherry picked from commit 16aac738581606c46b4938ff97b80c633f3f07c5)