/* Read in the bootloader command (first byte sent from host) */
        uint8_t Command = FetchNextCommandByte();
 
        /* Read in the bootloader command (first byte sent from host) */
        uint8_t Command = FetchNextCommandByte();
 
        {
                /* Return ATMEGA128 part code - this is only to allow AVRProg to use the bootloader */
                WriteNextResponseByte(0x44);
                WriteNextResponseByte(0x00);
        }
        {
                /* Return ATMEGA128 part code - this is only to allow AVRProg to use the bootloader */
                WriteNextResponseByte(0x44);
                WriteNextResponseByte(0x00);
        }
        {
                /* Write the 7-byte software identifier to the endpoint */
                for (uint8_t CurrByte = 0; CurrByte < 7; CurrByte++)
                  WriteNextResponseByte(SOFTWARE_IDENTIFIER[CurrByte]);
        }
        {
                /* Write the 7-byte software identifier to the endpoint */
                for (uint8_t CurrByte = 0; CurrByte < 7; CurrByte++)
                  WriteNextResponseByte(SOFTWARE_IDENTIFIER[CurrByte]);
        }
        {
                WriteNextResponseByte('0' + BOOTLOADER_VERSION_MAJOR);
                WriteNextResponseByte('0' + BOOTLOADER_VERSION_MINOR);
        }
        {
                WriteNextResponseByte('0' + BOOTLOADER_VERSION_MAJOR);
                WriteNextResponseByte('0' + BOOTLOADER_VERSION_MINOR);
        }
        {
                WriteNextResponseByte(AVR_SIGNATURE_3);
                WriteNextResponseByte(AVR_SIGNATURE_2);
                WriteNextResponseByte(AVR_SIGNATURE_1);
        }
        {
                WriteNextResponseByte(AVR_SIGNATURE_3);
                WriteNextResponseByte(AVR_SIGNATURE_2);
                WriteNextResponseByte(AVR_SIGNATURE_1);
        }
        {
                /* Clear the application section of flash */
                for (uint32_t CurrFlashAddress = 0; CurrFlashAddress < (uint32_t)BOOT_START_ADDR; CurrFlashAddress += SPM_PAGESIZE)
        {
                /* Clear the application section of flash */
                for (uint32_t CurrFlashAddress = 0; CurrFlashAddress < (uint32_t)BOOT_START_ADDR; CurrFlashAddress += SPM_PAGESIZE)
        {
                WriteNextResponseByte(boot_lock_fuse_bits_get(GET_EXTENDED_FUSE_BITS));
        }
        #if !defined(NO_BLOCK_SUPPORT)
        {
                WriteNextResponseByte(boot_lock_fuse_bits_get(GET_EXTENDED_FUSE_BITS));
        }
        #if !defined(NO_BLOCK_SUPPORT)
        {
                /* Delegate the block write/read to a separate function for clarity */
                ReadWriteMemoryBlock(Command);
        }
        #endif
        #if !defined(NO_FLASH_BYTE_SUPPORT)
        {
                /* Delegate the block write/read to a separate function for clarity */
                ReadWriteMemoryBlock(Command);
        }
        #endif
        #if !defined(NO_FLASH_BYTE_SUPPORT)
        {
                /* Write the high byte to the current flash page */
                boot_page_fill(CurrAddress, FetchNextCommandByte());
        {
                /* Write the high byte to the current flash page */
                boot_page_fill(CurrAddress, FetchNextCommandByte());
        {
                /* Write the low byte to the current flash page */
                boot_page_fill(CurrAddress | 0x01, FetchNextCommandByte());
        {
                /* Write the low byte to the current flash page */
                boot_page_fill(CurrAddress | 0x01, FetchNextCommandByte());
        {
                /* Read the byte from the endpoint and write it to the EEPROM */
                eeprom_write_byte((uint8_t*)((intptr_t)(CurrAddress >> 1)), FetchNextCommandByte());
        {
                /* Read the byte from the endpoint and write it to the EEPROM */
                eeprom_write_byte((uint8_t*)((intptr_t)(CurrAddress >> 1)), FetchNextCommandByte());
        {
                /* Read the EEPROM byte and write it to the endpoint */
                WriteNextResponseByte(eeprom_read_byte((uint8_t*)((intptr_t)(CurrAddress >> 1))));
        {
                /* Read the EEPROM byte and write it to the endpoint */
                WriteNextResponseByte(eeprom_read_byte((uint8_t*)((intptr_t)(CurrAddress >> 1))));
        {
                /* Unknown (non-sync) command, return fail code */
                WriteNextResponseByte('?');
        {
                /* Unknown (non-sync) command, return fail code */
                WriteNextResponseByte('?');