(cherry picked from commit d87917f8f6eb9d2e144a9f840d6d91767ea2eb69)
(cherry picked from commit d4966246e68dbdcdab45ec5c5141362834d74425)
(cherry picked from commit a5529df3e1a4c08a120e8c05203a7d885b0fe8d8)