(cherry picked from commit a2fdff47df15822410ce53e7f6b9bfd5214e5bb9)
(cherry picked from commit b3b1d9744720191ed7dc0528fe4c71e2b62d50e2)
(cherry picked from commit 86e0a375fabd62601613a87ee36c2a8118c65fdc)