======================
Added
-----
* Added ``bleak.uuids.normalize_uuid_16()`` function.
* Added ``bleak.uuids.normalize_uuid_32()`` function.
* Added ``advertisement_data()`` async iterator method to ``BleakScanner``. Merged 1361.
* Added type hints for kwargs on ``BleakScanner`` class methods.
* Added support for Python 3.12.
Changed
-------
* Improved error messages when failing to get services in WinRT backend.
* Improved error messages with enum values in WinRT backend. Fixes 1284.
* Scanner backends modified to allow multiple advertisement callbacks. Merged 1367.
* Changed default handling of the ``response`` argument in ``BleakClient.write_gatt_char``.
Fixes 909.
* Bleak recipe now automatically installs bleak from GitHub release in Kivy example.
* Changed `BlueZManager` methods to raise `BleakError` when device is not in BlueZ.
* Optimized BlueZ backend device watchers and condition callbacks to avoid linear searches.
* Changed type hint for buffer protocol to ``collections.abc.Buffer``.
Fixed
-----
* Fixed handling all access denied errors when enumerating characteristics on Windows. Fixes 1291.
* Added support for 32bit UUIDs. Fixes 1314.
* Fixed typing for ``BaseBleakScanner`` detection callback.
* Fixed possible crash in ``_stopped_handler()`` in WinRT backend. Fixes 1330.
* Reduced expensive logging in the BlueZ backend. Merged 1376.
* Fixed race condition with ``"InterfaceRemoved"`` when getting services in BlueZ backend.
* Fixed missing permissions and requirements in android Kivy example. Fixes 1184.
* Fixed WinRT backend sometimes hanging forever when a device goes out of range during connection. Fixes 1359.
Removed
-------
Dropped support for Python 3.7.