+#ifndef CONFIG_NO__ONDEMAND_PAGEERASE
+# define HAVE_ONDEMAND_PAGEERASE 1
+#else
+# define HAVE_ONDEMAND_PAGEERASE 0
+#endif
+/* Even if "HAVE_CHIP_ERASE" is avtivated - enabling the "HAVE_ONDEMAND_PAGEERASE"-
+ * feature the bootloader will erase pages on demand short before writing new data
+ * to it.
+ * If pages are not erase before reprogram (for example because user call avrdude -D)
+ * then data may become inconsistent since writing only allow to unset bits in the flash.
+ * This feature may prevent this...
+ */
+
+#ifndef CONFIG_NO__NEED_WATCHDOG
+# define NEED_WATCHDOG 1
+#else
+# define NEED_WATCHDOG 0
+#endif
+/* ATTANTION: This macro MUST BE 1, if the MCU has reset enabled watchdog (WDTON is 0).
+ * If this macro is defined to 1, the bootloader implements an additional "wdt_disable()"
+ * after its contional entry point.
+ * If the used MCU is fused not to enable watchdog after reset (WDTON is 1 - safty level 1)
+ * then "NEED_WATCHDOG" may be deactivated in order to save some memory.
+ */
+
+#ifndef CONFIG_NO__PRECISESLEEP
+# define HAVE_UNPRECISEWAIT 0
+#else
+# define HAVE_UNPRECISEWAIT 1
+#endif
+/* This macro enables hand-optimized assembler code
+ * instead to use _sleep_ms for delaying USB enumeration.
+ * Because normally these timings do not need to be exact,
+ * the optimized assembler code does not need to be precise.
+ * Therefore it is very small, which saves some PROGMEM bytes!
+ */
+
+#ifndef CONFIG_NO__FLASH_BYTE_READACCESS
+# define HAVE_FLASH_BYTE_READACCESS 1
+#else
+# define HAVE_FLASH_BYTE_READACCESS 0
+#endif
+/* If HAVE_FLASH_BYTE_READACCESS is defined to 1, byte mode access to FLASH is
+ * compiled in. Byte mode sometimes might be used by some programming softwares
+ * (avrdude in terminal mode). Without this feature the device would return "0"
+ * instead the right content of the flash memory.
+ */
+
+#ifdef CONFIG_USE__EXCESSIVE_ASSEMBLER
+# define USE_EXCESSIVE_ASSEMBLER 1
+#else
+# define USE_EXCESSIVE_ASSEMBLER 0
+#endif
+/* This macro enables large codeareas of hand-optimized assembler code.
+ * WARNING:
+ * It will only work properly on devices with <64k of flash memory and SRAM.
+ * Some configuration macros (when changed) may not be applied correctly
+ * (since their behaviour is raced within asm)!
+ * Nevertheless this feature saves lots of memory.
+ */
+
+#ifdef CONFIG_USE__BOOTUP_CLEARRAM
+# define USE_BOOTUP_CLEARRAM 1
+#else
+# define USE_BOOTUP_CLEARRAM 0
+#endif
+/* This macro enables some (init3) code, executed at bootup.
+ * This codefragment will safely overwrite the whole SRAM with "0"
+ * (except registers and IO), since RESET will NOT clear old RAM content.
+ */
+
+#ifdef CONFIG_NO__BOOTLOADERENTRY_FROMSOFTWARE
+# define HAVE_BOOTLOADERENTRY_FROMSOFTWARE 0
+#else
+# define HAVE_BOOTLOADERENTRY_FROMSOFTWARE 1
+#endif
+/*
+ * Enable firmware to boot the bootloader without
+ * user intervention
+ */
+
+#ifdef CONFIG_NO__BOOTLOADER_HIDDENEXITCOMMAND
+# define HAVE_BOOTLOADER_HIDDENEXITCOMMAND 0
+#else
+# define HAVE_BOOTLOADER_HIDDENEXITCOMMAND 0xff
+#endif
+/*
+ * When enabling "BOOTLOADER_HIDDENEXITCOMMAND", then
+ * sending the RAW-ISP command "0xff 0xXX 0xXX 0xXX"
+ * will cause the bootloader to start the firmware
+ * as soon as the programming software disconnects.
+ */
+
+#ifndef BOOTLOADER_LOOPCYCLES_TIMEOUT
+# define BOOTLOADER_LOOPCYCLES_TIMEOUT 0
+#endif
+/*
+ * When greater than "0", "BOOTLOADER_LOOPCYCLES_TIMEOUT"
+ * defines how many 16bit loopcycles can be cycled,
+ * before bootloader times out and starts user
+ * firmware.
+ * Of course "BOOTLOADER_CAN_EXIT" must be enabled.
+ * If value is even too small, bootloader will not
+ * exit as long as bootLoaderConditionSimple stays on.
+ */
+
+#ifdef CONFIG_HAVE__BOOTLOADER_ABORTTIMEOUTONACT
+#endif
+/*
+ * When defined, the bootloader will abort the timeout when
+ * it sees some activity (bootLoaderConditionSimple() or
+ * programming).
+ * After aborting timeout, the bootloader falls back to
+ * conventional exitting.
+ */
+
+#ifdef CONFIG_HAVE__BOOTLOADER_ALWAYSENTERPROGRAMMODE
+#endif
+/*
+ * Ignore bootLoaderCondition() (BUT NOT bootLoaderConditionSimple())
+ * and always enter the program-mode.
+ * This is helpful to emulate behaviour of Arduino bootloaders
+ */
+