From 889da8f0633ba61fec9874e0a053c771865d1673 Mon Sep 17 00:00:00 2001 From: Sandeep Mistry Date: Wed, 26 Aug 2015 15:13:59 -0400 Subject: [PATCH 001/123] implement Wire.end() for SAM core also moved common reset and disable code in libsam TWI_ConfigureMaster and TWI_ConfigureSlave functions to new TWI_Disable function, which is used in TwoWire::end() --- hardware/arduino/sam/libraries/Wire/Wire.cpp | 4 + hardware/arduino/sam/libraries/Wire/Wire.h | 4 + .../arduino/sam/system/libsam/include/twi.h | 2 + .../arduino/sam/system/libsam/source/twi.c | 38 ++++++---- .../arduino_due_x/libsam_sam3x8e_gcc_rel.a | Bin 116884 -> 117430 bytes .../libsam_sam3x8e_gcc_rel.a.txt | 71 +++++++++--------- 6 files changed, 68 insertions(+), 51 deletions(-) diff --git a/hardware/arduino/sam/libraries/Wire/Wire.cpp b/hardware/arduino/sam/libraries/Wire/Wire.cpp index 696a1ecaadc..bc8bef7ecc3 100644 --- a/hardware/arduino/sam/libraries/Wire/Wire.cpp +++ b/hardware/arduino/sam/libraries/Wire/Wire.cpp @@ -126,6 +126,10 @@ void TwoWire::begin(int address) { begin((uint8_t) address); } +void TwoWire::end(void) { + TWI_Disable(twi); +} + void TwoWire::setClock(uint32_t frequency) { twiClock = frequency; TWI_SetClock(twi, twiClock, VARIANT_MCK); diff --git a/hardware/arduino/sam/libraries/Wire/Wire.h b/hardware/arduino/sam/libraries/Wire/Wire.h index 76cc3d2673f..2730e2c4151 100644 --- a/hardware/arduino/sam/libraries/Wire/Wire.h +++ b/hardware/arduino/sam/libraries/Wire/Wire.h @@ -29,12 +29,16 @@ #define BUFFER_LENGTH 32 + // WIRE_HAS_END means Wire has end() +#define WIRE_HAS_END 1 + class TwoWire : public Stream { public: TwoWire(Twi *twi, void(*begin_cb)(void)); void begin(); void begin(uint8_t); void begin(int); + void end(); void setClock(uint32_t); void beginTransmission(uint8_t); void beginTransmission(int); diff --git a/hardware/arduino/sam/system/libsam/include/twi.h b/hardware/arduino/sam/system/libsam/include/twi.h index 0967089f7aa..76ecd9c8034 100644 --- a/hardware/arduino/sam/system/libsam/include/twi.h +++ b/hardware/arduino/sam/system/libsam/include/twi.h @@ -71,6 +71,8 @@ extern void TWI_SetClock( Twi *pTwi, uint32_t dwTwCk, uint32_t dwMCk ); extern void TWI_ConfigureSlave(Twi *pTwi, uint8_t slaveAddress); +extern void TWI_Disable(Twi *pTwi); + extern void TWI_Stop(Twi *pTwi); extern void TWI_StartRead( diff --git a/hardware/arduino/sam/system/libsam/source/twi.c b/hardware/arduino/sam/system/libsam/source/twi.c index 4366e17c187..a00e1b519ff 100644 --- a/hardware/arduino/sam/system/libsam/source/twi.c +++ b/hardware/arduino/sam/system/libsam/source/twi.c @@ -100,13 +100,8 @@ void TWI_ConfigureMaster( Twi* pTwi, uint32_t dwTwCk, uint32_t dwMCk ) /* SVEN: TWI Slave Mode Enabled */ pTwi->TWI_CR = TWI_CR_SVEN ; - /* Reset the TWI */ - pTwi->TWI_CR = TWI_CR_SWRST ; - pTwi->TWI_RHR ; - /* TWI Slave Mode Disabled, TWI Master Mode Disabled. */ - pTwi->TWI_CR = TWI_CR_SVDIS ; - pTwi->TWI_CR = TWI_CR_MSDIS ; + TWI_Disable(pTwi); /* Set master mode */ pTwi->TWI_CR = TWI_CR_MSEN ; @@ -156,15 +151,7 @@ void TWI_ConfigureSlave(Twi *pTwi, uint8_t slaveAddress) { uint32_t i; - /* TWI software reset */ - pTwi->TWI_CR = TWI_CR_SWRST; - pTwi->TWI_RHR; - - /* Wait at least 10 ms */ - for (i=0; i < 1000000; i++); - - /* TWI Slave Mode Disabled, TWI Master Mode Disabled*/ - pTwi->TWI_CR = TWI_CR_SVDIS | TWI_CR_MSDIS; + TWI_Disable(pTwi); /* Configure slave address. */ pTwi->TWI_SMR = 0; @@ -178,6 +165,27 @@ void TWI_ConfigureSlave(Twi *pTwi, uint8_t slaveAddress) assert( (pTwi->TWI_CR & TWI_CR_SVDIS)!= TWI_CR_SVDIS ) ; } +/** + * \brief Disables the TWI. + * \param pTwi Pointer to an Twi instance. + */ +void TWI_Disable(Twi *pTwi) +{ + assert( pTwi ) ; + + uint32_t i; + + /* TWI software reset */ + pTwi->TWI_CR = TWI_CR_SWRST; + pTwi->TWI_RHR; + + /* Wait at least 10 ms */ + for (i=0; i < 1000000; i++); + + /* TWI Slave Mode Disabled, TWI Master Mode Disabled*/ + pTwi->TWI_CR = TWI_CR_SVDIS | TWI_CR_MSDIS; +} + /** * \brief Sends a STOP condition on the TWI. * \param pTwi Pointer to an Twi instance. diff --git a/hardware/arduino/sam/variants/arduino_due_x/libsam_sam3x8e_gcc_rel.a b/hardware/arduino/sam/variants/arduino_due_x/libsam_sam3x8e_gcc_rel.a index 4ccce8bd692be22e981d8029ea67ce19e972386a..62a27a8e43d89a2502eb9a59990107211bb08ac5 100644 GIT binary patch delta 34576 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 T#pzR3dTuYnEiXG*InE_7e*$BC17oA_{QmcZ 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 eCzqX##0Pj2g@Cgt1V7b?_^0UU;`M}J_ Date: Tue, 29 Sep 2015 10:53:55 -0400 Subject: [PATCH 002/123] Add end callback for deinitialization on end --- hardware/arduino/sam/libraries/Wire/Wire.cpp | 43 ++++++++++++++++++-- hardware/arduino/sam/libraries/Wire/Wire.h | 5 ++- 2 files changed, 43 insertions(+), 5 deletions(-) diff --git a/hardware/arduino/sam/libraries/Wire/Wire.cpp b/hardware/arduino/sam/libraries/Wire/Wire.cpp index bc8bef7ecc3..12c225316cd 100644 --- a/hardware/arduino/sam/libraries/Wire/Wire.cpp +++ b/hardware/arduino/sam/libraries/Wire/Wire.cpp @@ -92,10 +92,11 @@ static inline bool TWI_STATUS_NACK(uint32_t status) { return (status & TWI_SR_NACK) == TWI_SR_NACK; } -TwoWire::TwoWire(Twi *_twi, void(*_beginCb)(void)) : +TwoWire::TwoWire(Twi *_twi, void(*_beginCb)(void), void(*_endCb)(void)) : twi(_twi), rxBufferIndex(0), rxBufferLength(0), txAddress(0), txBufferLength(0), srvBufferIndex(0), srvBufferLength(0), status( - UNINITIALIZED), onBeginCallback(_beginCb), twiClock(TWI_CLOCK) { + UNINITIALIZED), onBeginCallback(_beginCb), + onEndCallback(_endCb), twiClock(TWI_CLOCK) { } void TwoWire::begin(void) { @@ -128,6 +129,12 @@ void TwoWire::begin(int address) { void TwoWire::end(void) { TWI_Disable(twi); + + // Enable PDC channel + twi->TWI_PTCR &= ~(UART_PTCR_RXTDIS | UART_PTCR_TXTDIS); + + if (onEndCallback) + onEndCallback(); } void TwoWire::setClock(uint32_t frequency) { @@ -385,7 +392,21 @@ static void Wire_Init(void) { NVIC_EnableIRQ(WIRE_ISR_ID); } -TwoWire Wire = TwoWire(WIRE_INTERFACE, Wire_Init); +static void Wire_Deinit(void) { + NVIC_DisableIRQ(WIRE_ISR_ID); + NVIC_ClearPendingIRQ(WIRE_ISR_ID); + + pmc_disable_periph_clk(WIRE_INTERFACE_ID); + + // disable pull ups + pinMode(PIN_WIRE_SDA, OUTPUT); + pinMode(PIN_WIRE_SCL, OUTPUT); + + digitalWrite(PIN_WIRE_SDA, LOW); + digitalWrite(PIN_WIRE_SCL, LOW); +} + +TwoWire Wire = TwoWire(WIRE_INTERFACE, Wire_Init, Wire_Deinit); void WIRE_ISR_HANDLER(void) { Wire.onService(); @@ -412,7 +433,21 @@ static void Wire1_Init(void) { NVIC_EnableIRQ(WIRE1_ISR_ID); } -TwoWire Wire1 = TwoWire(WIRE1_INTERFACE, Wire1_Init); +static void Wire1_Deinit(void) { + NVIC_DisableIRQ(WIRE1_ISR_ID); + NVIC_ClearPendingIRQ(WIRE1_ISR_ID); + + pmc_disable_periph_clk(WIRE1_INTERFACE_ID); + + // disable pull ups + pinMode(PIN_WIRE1_SDA, OUTPUT); + pinMode(PIN_WIRE1_SCL, OUTPUT); + + digitalWrite(PIN_WIRE1_SDA, LOW); + digitalWrite(PIN_WIRE1_SCL, LOW); +} + +TwoWire Wire1 = TwoWire(WIRE1_INTERFACE, Wire1_Init, Wire1_Deinit); void WIRE1_ISR_HANDLER(void) { Wire1.onService(); diff --git a/hardware/arduino/sam/libraries/Wire/Wire.h b/hardware/arduino/sam/libraries/Wire/Wire.h index 2730e2c4151..3913c983bcd 100644 --- a/hardware/arduino/sam/libraries/Wire/Wire.h +++ b/hardware/arduino/sam/libraries/Wire/Wire.h @@ -34,7 +34,7 @@ class TwoWire : public Stream { public: - TwoWire(Twi *twi, void(*begin_cb)(void)); + TwoWire(Twi *twi, void(*begin_cb)(void), void(*end_cb)(void)); void begin(); void begin(uint8_t); void begin(int); @@ -89,6 +89,9 @@ class TwoWire : public Stream { // Called before initialization void (*onBeginCallback)(void); + // Called after deinitialization + void (*onEndCallback)(void); + // TWI instance Twi *twi; From e609e67ca8fe73640f1c81b44e2f9b7151e31127 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Fri, 17 Jul 2015 12:08:26 +0200 Subject: [PATCH 003/123] USB libraries: replace non-portable u8 with uint8_t --- libraries/Keyboard/src/Keyboard.cpp | 2 +- libraries/Mouse/src/Mouse.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/Keyboard/src/Keyboard.cpp b/libraries/Keyboard/src/Keyboard.cpp index 73f4691193e..6ea365c5e39 100644 --- a/libraries/Keyboard/src/Keyboard.cpp +++ b/libraries/Keyboard/src/Keyboard.cpp @@ -27,7 +27,7 @@ //================================================================================ // Keyboard -static const u8 _hidReportDescriptor[] PROGMEM = { +static const uint8_t _hidReportDescriptor[] PROGMEM = { // Keyboard 0x05, 0x01, // USAGE_PAGE (Generic Desktop) // 47 diff --git a/libraries/Mouse/src/Mouse.cpp b/libraries/Mouse/src/Mouse.cpp index a0566811c28..234ca60341d 100644 --- a/libraries/Mouse/src/Mouse.cpp +++ b/libraries/Mouse/src/Mouse.cpp @@ -23,7 +23,7 @@ #if defined(_USING_HID) -static const u8 _hidReportDescriptor[] PROGMEM = { +static const uint8_t _hidReportDescriptor[] PROGMEM = { // Mouse 0x05, 0x01, // USAGE_PAGE (Generic Desktop) // 54 @@ -88,7 +88,7 @@ void Mouse_::click(uint8_t b) void Mouse_::move(signed char x, signed char y, signed char wheel) { - u8 m[4]; + uint8_t m[4]; m[0] = _buttons; m[1] = x; m[2] = y; From 8e523df1744cd31f91e4215d745658a81537bb1c Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Fri, 17 Jul 2015 12:13:21 +0200 Subject: [PATCH 004/123] sam: add HID library --- hardware/arduino/sam/libraries/HID/HID.cpp | 168 ++++++++++++++++++ hardware/arduino/sam/libraries/HID/HID.h | 94 +++++++++- .../arduino/sam/libraries/HID/keywords.txt | 21 +++ .../sam/libraries/HID/library.properties | 8 + 4 files changed, 289 insertions(+), 2 deletions(-) create mode 100644 hardware/arduino/sam/libraries/HID/HID.cpp create mode 100644 hardware/arduino/sam/libraries/HID/keywords.txt create mode 100644 hardware/arduino/sam/libraries/HID/library.properties diff --git a/hardware/arduino/sam/libraries/HID/HID.cpp b/hardware/arduino/sam/libraries/HID/HID.cpp new file mode 100644 index 00000000000..d704bc88320 --- /dev/null +++ b/hardware/arduino/sam/libraries/HID/HID.cpp @@ -0,0 +1,168 @@ +/* Copyright (c) 2015, Arduino LLC +** +** Original code (pre-library): Copyright (c) 2011, Peter Barrett +** +** Permission to use, copy, modify, and/or distribute this software for +** any purpose with or without fee is hereby granted, provided that the +** above copyright notice and this permission notice appear in all copies. +** +** THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL +** WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED +** WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR +** BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES +** OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +** ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +** SOFTWARE. +*/ + +#include "USB/PluggableUSB.h" +#include "HID.h" + +HID_ HID; + +static uint8_t HID_ENDPOINT_INT; + +//================================================================================ +//================================================================================ + +// HID report descriptor + +#define LSB(_x) ((_x) & 0xFF) +#define MSB(_x) ((_x) >> 8) + +#define RAWHID_USAGE_PAGE 0xFFC0 +#define RAWHID_USAGE 0x0C00 +#define RAWHID_TX_SIZE 64 +#define RAWHID_RX_SIZE 64 + +static uint8_t HID_INTERFACE; + +HIDDescriptor _hidInterface; + +static HIDDescriptorListNode* rootNode = NULL; +static uint8_t sizeof_hidReportDescriptor = 0; +static uint8_t modules_count = 0; +//================================================================================ +//================================================================================ +// Driver + +uint8_t _hid_protocol = 1; +uint8_t _hid_idle = 1; + +int HID_GetInterface(uint8_t* interfaceNum) +{ + interfaceNum[0] += 1; // uses 1 + _hidInterface = + { + D_INTERFACE(HID_INTERFACE,1,3,0,0), + D_HIDREPORT(sizeof_hidReportDescriptor), + D_ENDPOINT(USB_ENDPOINT_IN (HID_ENDPOINT_INT),USB_ENDPOINT_TYPE_INTERRUPT,0x40,0x01) + }; + return USBD_SendControl(0,&_hidInterface,sizeof(_hidInterface)); +} + +int HID_GetDescriptor(int8_t t) +{ + if (HID_REPORT_DESCRIPTOR_TYPE == t) { + HIDDescriptorListNode* current = rootNode; + int total = 0; + while(current != NULL) { + total += USBD_SendControl(0,current->cb->descriptor,current->cb->length); + current = current->next; + } + return total; + } else { + return 0; + } +} + +void HID_::AppendDescriptor(HIDDescriptorListNode *node) +{ + if (modules_count == 0) { + rootNode = node; + } else { + HIDDescriptorListNode *current = rootNode; + while(current->next != NULL) { + current = current->next; + } + current->next = node; + } + modules_count++; + sizeof_hidReportDescriptor += node->cb->length; +} + +void HID_::SendReport(uint8_t id, const void* data, int len) +{ + uint8_t p[64]; + const uint8_t *d = reinterpret_cast(data); + + p[0] = id; + for (uint32_t i=0; i +#include + +#define _USING_HID + +//================================================================================ +//================================================================================ +// HID 'Driver' + +#define HID_GET_REPORT 0x01 +#define HID_GET_IDLE 0x02 +#define HID_GET_PROTOCOL 0x03 +#define HID_SET_REPORT 0x09 +#define HID_SET_IDLE 0x0A +#define HID_SET_PROTOCOL 0x0B + +#define HID_HID_DESCRIPTOR_TYPE 0x21 +#define HID_REPORT_DESCRIPTOR_TYPE 0x22 +#define HID_PHYSICAL_DESCRIPTOR_TYPE 0x23 + +typedef struct __attribute__((packed)) { + uint8_t length; + const void* descriptor; +} HID_Descriptor; + +class HIDDescriptorListNode { +public: + HIDDescriptorListNode *next = NULL; + const HID_Descriptor * cb; + HIDDescriptorListNode(const HID_Descriptor *ncb) {cb = ncb;} +}; + +class HID_ +{ +public: + HID_(void); + int begin(void); + void SendReport(uint8_t id, const void* data, int len); + void AppendDescriptor(HIDDescriptorListNode* node); +}; + +typedef struct +{ + uint8_t len; // 9 + uint8_t dtype; // 0x21 + uint8_t addr; + uint8_t versionL; // 0x101 + uint8_t versionH; // 0x101 + uint8_t country; + uint8_t desctype; // 0x22 report + uint8_t descLenL; + uint8_t descLenH; +} HIDDescDescriptor; + +typedef struct +{ + InterfaceDescriptor hid; + HIDDescDescriptor desc; + EndpointDescriptor in; +} HIDDescriptor; + +#define HID_TX HID_ENDPOINT_INT + +#define D_HIDREPORT(_descriptorLength) \ + { 9, 0x21, 0x1, 0x1, 0, 1, 0x22, _descriptorLength, 0 } + +#define WEAK __attribute__ ((weak)) + +#endif \ No newline at end of file diff --git a/hardware/arduino/sam/libraries/HID/keywords.txt b/hardware/arduino/sam/libraries/HID/keywords.txt new file mode 100644 index 00000000000..32a9ba5f20c --- /dev/null +++ b/hardware/arduino/sam/libraries/HID/keywords.txt @@ -0,0 +1,21 @@ +####################################### +# Syntax Coloring Map HID +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### + +HID KEYWORD1 + +####################################### +# Methods and Functions (KEYWORD2) +####################################### +begin KEYWORD2 +SendReport KEYWORD2 +AppendDescriptor KEYWORD2 + +####################################### +# Constants (LITERAL1) +####################################### +HID_TX LITERAL1 \ No newline at end of file diff --git a/hardware/arduino/sam/libraries/HID/library.properties b/hardware/arduino/sam/libraries/HID/library.properties new file mode 100644 index 00000000000..5114f1bc57a --- /dev/null +++ b/hardware/arduino/sam/libraries/HID/library.properties @@ -0,0 +1,8 @@ +name=HID +version=1.0 +author=Arduino +maintainer=Arduino +sentence=Module for PluggableUSB infrastructure. Exposes an API for devices like Keyboards, Mice and Gamepads +paragraph= +url=http://www.arduino.cc/en/Reference/HID +architectures=sam \ No newline at end of file From 77a7103781c78ad3909df975508b63b0f46b6df0 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Fri, 17 Jul 2015 12:16:09 +0200 Subject: [PATCH 005/123] remove HID from core --- .../arduino/sam/cores/arduino/USB/HID.cpp | 518 ------------------ 1 file changed, 518 deletions(-) delete mode 100644 hardware/arduino/sam/cores/arduino/USB/HID.cpp diff --git a/hardware/arduino/sam/cores/arduino/USB/HID.cpp b/hardware/arduino/sam/cores/arduino/USB/HID.cpp deleted file mode 100644 index c243f495142..00000000000 --- a/hardware/arduino/sam/cores/arduino/USB/HID.cpp +++ /dev/null @@ -1,518 +0,0 @@ -/* Copyright (c) 2011, Peter Barrett -** -** Permission to use, copy, modify, and/or distribute this software for -** any purpose with or without fee is hereby granted, provided that the -** above copyright notice and this permission notice appear in all copies. -** -** THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -** WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -** WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR -** BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES -** OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -** ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS -** SOFTWARE. -*/ - -#include "Arduino.h" - -#ifdef HID_ENABLED - -//#define RAWHID_ENABLED - -// Singletons for mouse and keyboard - -Mouse_ Mouse; -Keyboard_ Keyboard; - -//================================================================================ -//================================================================================ - -// HID report descriptor - -#define LSB(_x) ((_x) & 0xFF) -#define MSB(_x) ((_x) >> 8) - -#define RAWHID_USAGE_PAGE 0xFFC0 -#define RAWHID_USAGE 0x0C00 -#define RAWHID_TX_SIZE 64 -#define RAWHID_RX_SIZE 64 - -extern const uint8_t _hidReportDescriptor[] = { - // Mouse - 0x05, 0x01, // USAGE_PAGE (Generic Desktop) // 54 - 0x09, 0x02, // USAGE (Mouse) - 0xa1, 0x01, // COLLECTION (Application) - 0x09, 0x01, // USAGE (Pointer) - 0xa1, 0x00, // COLLECTION (Physical) - 0x85, 0x01, // REPORT_ID (1) - 0x05, 0x09, // USAGE_PAGE (Button) - 0x19, 0x01, // USAGE_MINIMUM (Button 1) - 0x29, 0x03, // USAGE_MAXIMUM (Button 3) - 0x15, 0x00, // LOGICAL_MINIMUM (0) - 0x25, 0x01, // LOGICAL_MAXIMUM (1) - 0x95, 0x03, // REPORT_COUNT (3) - 0x75, 0x01, // REPORT_SIZE (1) - 0x81, 0x02, // INPUT (Data,Var,Abs) - 0x95, 0x01, // REPORT_COUNT (1) - 0x75, 0x05, // REPORT_SIZE (5) - 0x81, 0x03, // INPUT (Cnst,Var,Abs) - 0x05, 0x01, // USAGE_PAGE (Generic Desktop) - 0x09, 0x30, // USAGE (X) - 0x09, 0x31, // USAGE (Y) - 0x09, 0x38, // USAGE (Wheel) - 0x15, 0x81, // LOGICAL_MINIMUM (-127) - 0x25, 0x7f, // LOGICAL_MAXIMUM (127) - 0x75, 0x08, // REPORT_SIZE (8) - 0x95, 0x03, // REPORT_COUNT (3) - 0x81, 0x06, // INPUT (Data,Var,Rel) - 0xc0, // END_COLLECTION - 0xc0, // END_COLLECTION - - // Keyboard - 0x05, 0x01, // USAGE_PAGE (Generic Desktop) // 47 - 0x09, 0x06, // USAGE (Keyboard) - 0xa1, 0x01, // COLLECTION (Application) - 0x85, 0x02, // REPORT_ID (2) - 0x05, 0x07, // USAGE_PAGE (Keyboard) - - 0x19, 0xe0, // USAGE_MINIMUM (Keyboard LeftControl) - 0x29, 0xe7, // USAGE_MAXIMUM (Keyboard Right GUI) - 0x15, 0x00, // LOGICAL_MINIMUM (0) - 0x25, 0x01, // LOGICAL_MAXIMUM (1) - 0x75, 0x01, // REPORT_SIZE (1) - - 0x95, 0x08, // REPORT_COUNT (8) - 0x81, 0x02, // INPUT (Data,Var,Abs) - 0x95, 0x01, // REPORT_COUNT (1) - 0x75, 0x08, // REPORT_SIZE (8) - 0x81, 0x03, // INPUT (Cnst,Var,Abs) - - 0x95, 0x06, // REPORT_COUNT (6) - 0x75, 0x08, // REPORT_SIZE (8) - 0x15, 0x00, // LOGICAL_MINIMUM (0) - 0x25, 0x65, // LOGICAL_MAXIMUM (101) - 0x05, 0x07, // USAGE_PAGE (Keyboard) - - 0x19, 0x00, // USAGE_MINIMUM (Reserved (no event indicated)) - 0x29, 0x65, // USAGE_MAXIMUM (Keyboard Application) - 0x81, 0x00, // INPUT (Data,Ary,Abs) - 0xc0, // END_COLLECTION - -#ifdef RAWHID_ENABLED - // RAW HID - 0x06, LSB(RAWHID_USAGE_PAGE), MSB(RAWHID_USAGE_PAGE), // 30 - 0x0A, LSB(RAWHID_USAGE), MSB(RAWHID_USAGE), - - 0xA1, 0x01, // Collection 0x01 - 0x85, 0x03, // REPORT_ID (3) - 0x75, 0x08, // report size = 8 bits - 0x15, 0x00, // logical minimum = 0 - 0x26, 0xFF, 0x00, // logical maximum = 255 - - 0x95, 64, // report count TX - 0x09, 0x01, // usage - 0x81, 0x02, // Input (array) - - 0x95, 64, // report count RX - 0x09, 0x02, // usage - 0x91, 0x02, // Output (array) - 0xC0 // end collection -#endif -}; - -_Pragma("pack(1)") -extern const HIDDescriptor _hidInterface = -{ - D_INTERFACE(HID_INTERFACE,1,3,0,0), - D_HIDREPORT(sizeof(_hidReportDescriptor)), - D_ENDPOINT(USB_ENDPOINT_IN(HID_ENDPOINT_INT),USB_ENDPOINT_TYPE_INTERRUPT,0x40,0x01) -}; -_Pragma("pack()") - -//================================================================================ -//================================================================================ -// Driver - -uint8_t _hid_protocol = 1; -uint8_t _hid_idle = 1; - -#define WEAK __attribute__ ((weak)) - -int WEAK HID_GetInterface(uint8_t* interfaceNum) -{ - interfaceNum[0] += 1; // uses 1 - return USBD_SendControl(0,&_hidInterface,sizeof(_hidInterface)); -} - -int WEAK HID_GetDescriptor(int i) -{ - return USBD_SendControl(0,_hidReportDescriptor,sizeof(_hidReportDescriptor)); -} - -void WEAK HID_SendReport(uint8_t id, const void* data, uint32_t len) -{ - uint8_t p[64]; - const uint8_t *d = reinterpret_cast(data); - - p[0] = id; - for (uint32_t i=0; i 0) - return true; - return false; -} - -//================================================================================ -//================================================================================ -// Keyboard - -Keyboard_::Keyboard_(void) -{ -} - -void Keyboard_::begin(void) -{ -} - -void Keyboard_::end(void) -{ -} - -void Keyboard_::sendReport(KeyReport* keys) -{ - HID_SendReport(2,keys,sizeof(KeyReport)); -} - -#define SHIFT 0x80 -extern const uint8_t _asciimap[128] = -{ - 0x00, // NUL - 0x00, // SOH - 0x00, // STX - 0x00, // ETX - 0x00, // EOT - 0x00, // ENQ - 0x00, // ACK - 0x00, // BEL - 0x2a, // BS Backspace - 0x2b, // TAB Tab - 0x28, // LF Enter - 0x00, // VT - 0x00, // FF - 0x00, // CR - 0x00, // SO - 0x00, // SI - 0x00, // DEL - 0x00, // DC1 - 0x00, // DC2 - 0x00, // DC3 - 0x00, // DC4 - 0x00, // NAK - 0x00, // SYN - 0x00, // ETB - 0x00, // CAN - 0x00, // EM - 0x00, // SUB - 0x00, // ESC - 0x00, // FS - 0x00, // GS - 0x00, // RS - 0x00, // US - - 0x2c, // ' ' - 0x1e|SHIFT, // ! - 0x34|SHIFT, // " - 0x20|SHIFT, // # - 0x21|SHIFT, // $ - 0x22|SHIFT, // % - 0x24|SHIFT, // & - 0x34, // ' - 0x26|SHIFT, // ( - 0x27|SHIFT, // ) - 0x25|SHIFT, // * - 0x2e|SHIFT, // + - 0x36, // , - 0x2d, // - - 0x37, // . - 0x38, // / - 0x27, // 0 - 0x1e, // 1 - 0x1f, // 2 - 0x20, // 3 - 0x21, // 4 - 0x22, // 5 - 0x23, // 6 - 0x24, // 7 - 0x25, // 8 - 0x26, // 9 - 0x33|SHIFT, // : - 0x33, // ; - 0x36|SHIFT, // < - 0x2e, // = - 0x37|SHIFT, // > - 0x38|SHIFT, // ? - 0x1f|SHIFT, // @ - 0x04|SHIFT, // A - 0x05|SHIFT, // B - 0x06|SHIFT, // C - 0x07|SHIFT, // D - 0x08|SHIFT, // E - 0x09|SHIFT, // F - 0x0a|SHIFT, // G - 0x0b|SHIFT, // H - 0x0c|SHIFT, // I - 0x0d|SHIFT, // J - 0x0e|SHIFT, // K - 0x0f|SHIFT, // L - 0x10|SHIFT, // M - 0x11|SHIFT, // N - 0x12|SHIFT, // O - 0x13|SHIFT, // P - 0x14|SHIFT, // Q - 0x15|SHIFT, // R - 0x16|SHIFT, // S - 0x17|SHIFT, // T - 0x18|SHIFT, // U - 0x19|SHIFT, // V - 0x1a|SHIFT, // W - 0x1b|SHIFT, // X - 0x1c|SHIFT, // Y - 0x1d|SHIFT, // Z - 0x2f, // [ - 0x31, // bslash - 0x30, // ] - 0x23|SHIFT, // ^ - 0x2d|SHIFT, // _ - 0x35, // ` - 0x04, // a - 0x05, // b - 0x06, // c - 0x07, // d - 0x08, // e - 0x09, // f - 0x0a, // g - 0x0b, // h - 0x0c, // i - 0x0d, // j - 0x0e, // k - 0x0f, // l - 0x10, // m - 0x11, // n - 0x12, // o - 0x13, // p - 0x14, // q - 0x15, // r - 0x16, // s - 0x17, // t - 0x18, // u - 0x19, // v - 0x1a, // w - 0x1b, // x - 0x1c, // y - 0x1d, // z - 0x2f|SHIFT, // - 0x31|SHIFT, // | - 0x30|SHIFT, // } - 0x35|SHIFT, // ~ - 0 // DEL -}; - -uint8_t USBPutChar(uint8_t c); - -// press() adds the specified key (printing, non-printing, or modifier) -// to the persistent key report and sends the report. Because of the way -// USB HID works, the host acts like the key remains pressed until we -// call release(), releaseAll(), or otherwise clear the report and resend. -size_t Keyboard_::press(uint8_t k) -{ - uint8_t i; - if (k >= 136) { // it's a non-printing key (not a modifier) - k = k - 136; - } else if (k >= 128) { // it's a modifier key - _keyReport.modifiers |= (1<<(k-128)); - k = 0; - } else { // it's a printing key - k = _asciimap[k]; - if (!k) { - setWriteError(); - return 0; - } - if (k & 0x80) { // it's a capital letter or other character reached with shift - _keyReport.modifiers |= 0x02; // the left shift modifier - k &= 0x7F; - } - } - - // Add k to the key report only if it's not already present - // and if there is an empty slot. - if (_keyReport.keys[0] != k && _keyReport.keys[1] != k && - _keyReport.keys[2] != k && _keyReport.keys[3] != k && - _keyReport.keys[4] != k && _keyReport.keys[5] != k) { - - for (i=0; i<6; i++) { - if (_keyReport.keys[i] == 0x00) { - _keyReport.keys[i] = k; - break; - } - } - if (i == 6) { - setWriteError(); - return 0; - } - } - sendReport(&_keyReport); - return 1; -} - -// release() takes the specified key out of the persistent key report and -// sends the report. This tells the OS the key is no longer pressed and that -// it shouldn't be repeated any more. -size_t Keyboard_::release(uint8_t k) -{ - uint8_t i; - if (k >= 136) { // it's a non-printing key (not a modifier) - k = k - 136; - } else if (k >= 128) { // it's a modifier key - _keyReport.modifiers &= ~(1<<(k-128)); - k = 0; - } else { // it's a printing key - k = _asciimap[k]; - if (!k) { - return 0; - } - if (k & 0x80) { // it's a capital letter or other character reached with shift - _keyReport.modifiers &= ~(0x02); // the left shift modifier - k &= 0x7F; - } - } - - // Test the key report to see if k is present. Clear it if it exists. - // Check all positions in case the key is present more than once (which it shouldn't be) - for (i=0; i<6; i++) { - if (0 != k && _keyReport.keys[i] == k) { - _keyReport.keys[i] = 0x00; - } - } - - sendReport(&_keyReport); - return 1; -} - -void Keyboard_::releaseAll(void) -{ - _keyReport.keys[0] = 0; - _keyReport.keys[1] = 0; - _keyReport.keys[2] = 0; - _keyReport.keys[3] = 0; - _keyReport.keys[4] = 0; - _keyReport.keys[5] = 0; - _keyReport.modifiers = 0; - sendReport(&_keyReport); -} - -size_t Keyboard_::write(uint8_t c) -{ - uint8_t p = 0; - - p = press(c); // Keydown - release(c); // Keyup - - return (p); // Just return the result of press() since release() almost always returns 1 -} - -#endif From dfd411951201d85f3658e884ab99ec28310d6131 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Fri, 17 Jul 2015 12:16:38 +0200 Subject: [PATCH 006/123] port PluggableUSB to sam core --- .../arduino/sam/cores/arduino/USB/CDC.cpp | 3 +- .../sam/cores/arduino/USB/PluggableUSB.cpp | 98 +++++++++++++++ .../sam/cores/arduino/USB/PluggableUSB.h | 63 ++++++++++ .../arduino/sam/cores/arduino/USB/USBAPI.h | 112 ++---------------- .../arduino/sam/cores/arduino/USB/USBCore.cpp | 66 ++++++----- .../arduino/sam/cores/arduino/USB/USBCore.h | 34 ------ .../arduino/sam/cores/arduino/USB/USBDesc.h | 18 +-- 7 files changed, 208 insertions(+), 186 deletions(-) create mode 100644 hardware/arduino/sam/cores/arduino/USB/PluggableUSB.cpp create mode 100644 hardware/arduino/sam/cores/arduino/USB/PluggableUSB.h diff --git a/hardware/arduino/sam/cores/arduino/USB/CDC.cpp b/hardware/arduino/sam/cores/arduino/USB/CDC.cpp index 0f15d82a145..306c124ff24 100644 --- a/hardware/arduino/sam/cores/arduino/USB/CDC.cpp +++ b/hardware/arduino/sam/cores/arduino/USB/CDC.cpp @@ -17,6 +17,7 @@ #include "Arduino.h" #include "USBAPI.h" #include "Reset.h" +#include "Print.h" #ifdef CDC_ENABLED @@ -103,7 +104,7 @@ int WEAK CDC_GetOtherInterface(uint8_t* interfaceNum) return USBD_SendControl(0,&_cdcOtherInterface,sizeof(_cdcOtherInterface)); } -bool WEAK CDC_Setup(Setup& setup) +bool WEAK CDC_Setup(USBSetup& setup) { uint8_t r = setup.bRequest; uint8_t requestType = setup.bmRequestType; diff --git a/hardware/arduino/sam/cores/arduino/USB/PluggableUSB.cpp b/hardware/arduino/sam/cores/arduino/USB/PluggableUSB.cpp new file mode 100644 index 00000000000..84d781d812a --- /dev/null +++ b/hardware/arduino/sam/cores/arduino/USB/PluggableUSB.cpp @@ -0,0 +1,98 @@ +/* + PluggableUSB.cpp + Copyright (c) 2015 Arduino LLC + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "USBAPI.h" +#include "USBDesc.h" +#include "PluggableUSB.h" + +#ifdef PLUGGABLE_USB_ENABLED + +#define MAX_MODULES 6 + +static uint8_t lastIf = CDC_ACM_INTERFACE + CDC_INTERFACE_COUNT; +static uint8_t lastEp = CDC_FIRST_ENDPOINT + CDC_ENPOINT_COUNT; + +extern uint32_t EndPoints[]; + +//PUSBCallbacks cbs[MAX_MODULES]; +static uint8_t modules_count = 0; + +static PUSBListNode* rootNode = NULL; + +int PUSB_GetInterface(uint8_t* interfaceNum) +{ + int ret = 0; + PUSBListNode* node = rootNode; + for (uint8_t i=0; icb->getInterface(interfaceNum); + node = node->next; + } + return ret; +} + +int PUSB_GetDescriptor(int8_t t) +{ + int ret = 0; + PUSBListNode* node = rootNode; + for (uint8_t i=0; icb->getDescriptor(t); + node = node->next; + } + return ret; +} + +bool PUSB_Setup(USBSetup& setup, uint8_t j) +{ + bool ret = false; + PUSBListNode* node = rootNode; + for (uint8_t i=0; icb->setup(setup, j); + node = node->next; + } + return ret; +} + +int8_t PUSB_AddFunction(PUSBListNode *node, uint8_t* interface) +{ + if (modules_count >= MAX_MODULES) { + return 0; + } + + if (modules_count == 0) { + rootNode = node; + } else { + PUSBListNode *current = rootNode; + while(current->next != NULL) { + current = current->next; + } + current->next = node; + } + + *interface = lastIf; + lastIf += node->cb->numInterfaces; + for ( uint8_t i = 0; i< node->cb->numEndpoints; i++) { + EndPoints[lastEp] = node->cb->endpointType[i]; + lastEp++; + } + modules_count++; + return lastEp - node->cb->numEndpoints; + // restart USB layer??? +} + +#endif \ No newline at end of file diff --git a/hardware/arduino/sam/cores/arduino/USB/PluggableUSB.h b/hardware/arduino/sam/cores/arduino/USB/PluggableUSB.h new file mode 100644 index 00000000000..20590055094 --- /dev/null +++ b/hardware/arduino/sam/cores/arduino/USB/PluggableUSB.h @@ -0,0 +1,63 @@ +/* + PluggableUSB.h + Copyright (c) 2015 Arduino LLC + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef PUSB_h +#define PUSB_h + +#include "USBAPI.h" +#include + +#if defined(USBCON) + +typedef struct __attribute__((packed)) +{ + bool (*setup)(USBSetup& setup, uint8_t i); + int (*getInterface)(uint8_t* interfaceNum); + int (*getDescriptor)(int8_t t); + int8_t numEndpoints; + int8_t numInterfaces; + uint8_t *endpointType; +} PUSBCallbacks; + +typedef struct +{ + uint8_t interface; + uint8_t firstEndpoint; +} PUSBReturn; + +class PUSBListNode { +public: + PUSBListNode *next = NULL; + PUSBCallbacks *cb; + PUSBListNode(PUSBCallbacks *ncb) {cb = ncb;} +}; + +int8_t PUSB_AddFunction(PUSBListNode *node, uint8_t *interface); + +int PUSB_GetInterface(uint8_t* interfaceNum); + +int PUSB_GetDescriptor(int8_t t); + +bool PUSB_Setup(USBSetup& setup, uint8_t i); + +void PUSB_Begin(); + +#endif + +#endif diff --git a/hardware/arduino/sam/cores/arduino/USB/USBAPI.h b/hardware/arduino/sam/cores/arduino/USB/USBAPI.h index eda623ddb54..97e8ad6fec5 100644 --- a/hardware/arduino/sam/cores/arduino/USB/USBAPI.h +++ b/hardware/arduino/sam/cores/arduino/USB/USBAPI.h @@ -22,6 +22,10 @@ #if defined __cplusplus #include "RingBuffer.h" +#include "Stream.h" +#include + +#define min(a, b) Min(a, b) //================================================================================ //================================================================================ @@ -86,97 +90,6 @@ class Serial_ : public Stream }; extern Serial_ SerialUSB; -//================================================================================ -//================================================================================ -// Mouse - -#define MOUSE_LEFT 1 -#define MOUSE_RIGHT 2 -#define MOUSE_MIDDLE 4 -#define MOUSE_ALL (MOUSE_LEFT | MOUSE_RIGHT | MOUSE_MIDDLE) - -class Mouse_ -{ -private: - uint8_t _buttons; - void buttons(uint8_t b); -public: - Mouse_(void); - void begin(void); - void end(void); - void click(uint8_t b = MOUSE_LEFT); - void move(signed char x, signed char y, signed char wheel = 0); - void press(uint8_t b = MOUSE_LEFT); // press LEFT by default - void release(uint8_t b = MOUSE_LEFT); // release LEFT by default - bool isPressed(uint8_t b = MOUSE_ALL); // check all buttons by default -}; -extern Mouse_ Mouse; - -//================================================================================ -//================================================================================ -// Keyboard - -#define KEY_LEFT_CTRL 0x80 -#define KEY_LEFT_SHIFT 0x81 -#define KEY_LEFT_ALT 0x82 -#define KEY_LEFT_GUI 0x83 -#define KEY_RIGHT_CTRL 0x84 -#define KEY_RIGHT_SHIFT 0x85 -#define KEY_RIGHT_ALT 0x86 -#define KEY_RIGHT_GUI 0x87 - -#define KEY_UP_ARROW 0xDA -#define KEY_DOWN_ARROW 0xD9 -#define KEY_LEFT_ARROW 0xD8 -#define KEY_RIGHT_ARROW 0xD7 -#define KEY_BACKSPACE 0xB2 -#define KEY_TAB 0xB3 -#define KEY_RETURN 0xB0 -#define KEY_ESC 0xB1 -#define KEY_INSERT 0xD1 -#define KEY_DELETE 0xD4 -#define KEY_PAGE_UP 0xD3 -#define KEY_PAGE_DOWN 0xD6 -#define KEY_HOME 0xD2 -#define KEY_END 0xD5 -#define KEY_CAPS_LOCK 0xC1 -#define KEY_F1 0xC2 -#define KEY_F2 0xC3 -#define KEY_F3 0xC4 -#define KEY_F4 0xC5 -#define KEY_F5 0xC6 -#define KEY_F6 0xC7 -#define KEY_F7 0xC8 -#define KEY_F8 0xC9 -#define KEY_F9 0xCA -#define KEY_F10 0xCB -#define KEY_F11 0xCC -#define KEY_F12 0xCD - -// Low level key report: up to 6 keys and shift, ctrl etc at once -typedef struct -{ - uint8_t modifiers; - uint8_t reserved; - uint8_t keys[6]; -} KeyReport; - -class Keyboard_ : public Print -{ -private: - KeyReport _keyReport; - void sendReport(KeyReport* keys); -public: - Keyboard_(void); - void begin(void); - void end(void); - virtual size_t write(uint8_t k); - virtual size_t press(uint8_t k); - virtual size_t release(uint8_t k); - virtual void releaseAll(void); -}; -extern Keyboard_ Keyboard; - //================================================================================ //================================================================================ // Low level API @@ -189,16 +102,7 @@ typedef struct uint8_t wValueH; uint16_t wIndex; uint16_t wLength; -} Setup; - -//================================================================================ -//================================================================================ -// HID 'Driver' - -int HID_GetInterface(uint8_t* interfaceNum); -int HID_GetDescriptor(int i); -bool HID_Setup(Setup& setup); -void HID_SendReport(uint8_t id, const void* data, uint32_t len); +} USBSetup; //================================================================================ //================================================================================ @@ -206,7 +110,7 @@ void HID_SendReport(uint8_t id, const void* data, uint32_t len); int MSC_GetInterface(uint8_t* interfaceNum); int MSC_GetDescriptor(int i); -bool MSC_Setup(Setup& setup); +bool MSC_Setup(USBSetup& setup); bool MSC_Data(uint8_t rx,uint8_t tx); //================================================================================ @@ -216,7 +120,7 @@ bool MSC_Data(uint8_t rx,uint8_t tx); int CDC_GetInterface(uint8_t* interfaceNum); int CDC_GetOtherInterface(uint8_t* interfaceNum); int CDC_GetDescriptor(int i); -bool CDC_Setup(Setup& setup); +bool CDC_Setup(USBSetup& setup); //================================================================================ //================================================================================ @@ -228,7 +132,7 @@ void USBD_InitControl(int end); int USBD_SendControl(uint8_t flags, const void* d, uint32_t len); int USBD_RecvControl(void* d, uint32_t len); int USBD_SendInterfaces(void); -bool USBD_ClassInterfaceRequest(Setup& setup); +bool USBD_ClassInterfaceRequest(USBSetup& setup); uint32_t USBD_Available(uint32_t ep); diff --git a/hardware/arduino/sam/cores/arduino/USB/USBCore.cpp b/hardware/arduino/sam/cores/arduino/USB/USBCore.cpp index c21fda7f4c9..3fc6e43d618 100644 --- a/hardware/arduino/sam/cores/arduino/USB/USBCore.cpp +++ b/hardware/arduino/sam/cores/arduino/USB/USBCore.cpp @@ -18,11 +18,13 @@ #include "USBAPI.h" #include "Reset.h" #include +#include "PluggableUSB.h" +#include //#define TRACE_CORE(x) x #define TRACE_CORE(x) -static const uint32_t EndPoints[] = +uint32_t EndPoints[] = { EP_TYPE_CONTROL, @@ -32,8 +34,14 @@ static const uint32_t EndPoints[] = EP_TYPE_BULK_IN, // CDC_ENDPOINT_IN #endif -#ifdef HID_ENABLED - EP_TYPE_INTERRUPT_IN_HID // HID_ENDPOINT_INT +#ifdef PLUGGABLE_USB_ENABLED + //allocate 6 endpoints and remove const so they can be changed by the user + 0, + 0, + 0, + 0, + 0, + 0, #endif }; @@ -91,7 +99,7 @@ const DeviceDescriptor USB_DeviceDescriptor = D_DEVICE(0x00,0x00,0x00,64,USB_VID,USB_PID,0x100,IMANUFACTURER,IPRODUCT,0,1); const DeviceDescriptor USB_DeviceDescriptorA = - D_DEVICE(DEVICE_CLASS,0x00,0x00,64,USB_VID,USB_PID,0x100,IMANUFACTURER,IPRODUCT,0,1); + D_DEVICE(0xEF,0x02,0x01,64,USB_VID,USB_PID,0x100,IMANUFACTURER,IPRODUCT,0,1); const DeviceDescriptor USB_DeviceQualifier = D_QUALIFIER(0x00,0x00,0x00,64,1); @@ -274,7 +282,7 @@ int USBD_RecvControl(void* d, uint32_t len) } // Handle CLASS_INTERFACE requests -bool USBD_ClassInterfaceRequest(Setup& setup) +bool USBD_ClassInterfaceRequest(USBSetup& setup) { uint8_t i = setup.wIndex; @@ -287,11 +295,8 @@ bool USBD_ClassInterfaceRequest(Setup& setup) } #endif -#ifdef HID_ENABLED - if (HID_INTERFACE == i) - { - return HID_Setup(setup); - } +#ifdef PLUGGABLE_USB_ENABLED + return PUSB_Setup(setup, i); #endif return false; @@ -299,37 +304,33 @@ bool USBD_ClassInterfaceRequest(Setup& setup) int USBD_SendInterfaces(void) { - int total = 0; uint8_t interfaces = 0; #ifdef CDC_ENABLED - total = CDC_GetInterface(&interfaces); + CDC_GetInterface(&interfaces); #endif -#ifdef HID_ENABLED - total += HID_GetInterface(&interfaces); +#ifdef PLUGGABLE_USB_ENABLED + PUSB_GetInterface(&interfaces); #endif - total = total; // Get rid of compiler warning - TRACE_CORE(printf("=> USBD_SendInterfaces, total=%d interfaces=%d\r\n", total, interfaces);) + TRACE_CORE(printf("=> USBD_SendInterfaces, interfaces=%d\r\n", interfaces);) return interfaces; } int USBD_SendOtherInterfaces(void) { - int total = 0; uint8_t interfaces = 0; #ifdef CDC_ENABLED - total = CDC_GetOtherInterface(&interfaces); + CDC_GetOtherInterface(&interfaces); #endif -#ifdef HID_ENABLED - total += HID_GetInterface(&interfaces); +#ifdef PLUGGABLE_USB_ENABLED + PUSB_GetInterface(&interfaces); #endif - total = total; // Get rid of compiler warning - TRACE_CORE(printf("=> USBD_SendInterfaces, total=%d interfaces=%d\r\n", total, interfaces);) + TRACE_CORE(printf("=> USBD_SendInterfaces, interfaces=%d\r\n", interfaces);) return interfaces; } @@ -382,10 +383,11 @@ _Pragma("pack()") return true; } -static bool USBD_SendDescriptor(Setup& setup) +static bool USBD_SendDescriptor(USBSetup& setup) { uint8_t t = setup.wValueH; uint8_t desc_length = 0; + int ret = 0; const uint8_t* desc_addr = 0; if (USB_CONFIGURATION_DESCRIPTOR_TYPE == t) @@ -395,11 +397,11 @@ static bool USBD_SendDescriptor(Setup& setup) } USBD_InitControl(setup.wLength); -#ifdef HID_ENABLED - if (HID_REPORT_DESCRIPTOR_TYPE == t) - { - TRACE_CORE(puts("=> USBD_SendDescriptor : HID_REPORT_DESCRIPTOR_TYPE\r\n");) - return HID_GetDescriptor(t); + +#ifdef PLUGGABLE_USB_ENABLED + ret = PUSB_GetDescriptor(t); + if (ret != 0) { + return (ret > 0 ? true : false); } #endif @@ -640,7 +642,7 @@ static void USB_ISR(void) return; } - Setup setup; + USBSetup setup; UDD_Recv(EP0, (uint8_t*)&setup, 8); UDD_ClearSetupInt(); @@ -765,7 +767,11 @@ static void USB_ISR(void) { TRACE_CORE(printf(">>> EP0 Int: SET_CONFIGURATION REQUEST_DEVICE %d\r\n", setup.wValueL);) - UDD_InitEndpoints(EndPoints, (sizeof(EndPoints) / sizeof(EndPoints[0]))); + uint32_t num_endpoints = 0; + while (EndPoints[num_endpoints] != 0) { + num_endpoints++; + } + UDD_InitEndpoints(EndPoints, num_endpoints); _usbConfiguration = setup.wValueL; #ifdef CDC_ENABLED diff --git a/hardware/arduino/sam/cores/arduino/USB/USBCore.h b/hardware/arduino/sam/cores/arduino/USB/USBCore.h index b01d7576a1e..c522d448207 100644 --- a/hardware/arduino/sam/cores/arduino/USB/USBCore.h +++ b/hardware/arduino/sam/cores/arduino/USB/USBCore.h @@ -58,13 +58,6 @@ #define MSC_RESET 0xFF #define MSC_GET_MAX_LUN 0xFE -#define HID_GET_REPORT 0x01 -#define HID_GET_IDLE 0x02 -#define HID_GET_PROTOCOL 0x03 -#define HID_SET_REPORT 0x09 -#define HID_SET_IDLE 0x0A -#define HID_SET_PROTOCOL 0x0B - // Descriptors #define USB_DEVICE_DESC_SIZE 18 @@ -121,10 +114,6 @@ #define MSC_SUBCLASS_SCSI 0x06 #define MSC_PROTOCOL_BULK_ONLY 0x50 -#define HID_HID_DESCRIPTOR_TYPE 0x21 -#define HID_REPORT_DESCRIPTOR_TYPE 0x22 -#define HID_PHYSICAL_DESCRIPTOR_TYPE 0x23 - _Pragma("pack(1)") // Device @@ -259,26 +248,6 @@ typedef struct EndpointDescriptor out; } MSCDescriptor; -typedef struct -{ - uint8_t len; // 9 - uint8_t dtype; // 0x21 - uint8_t addr; - uint8_t versionL; // 0x101 - uint8_t versionH; // 0x101 - uint8_t country; - uint8_t desctype; // 0x22 report - uint8_t descLenL; - uint8_t descLenH; -} HIDDescDescriptor; - -typedef struct -{ - InterfaceDescriptor hid; - HIDDescDescriptor desc; - EndpointDescriptor in; -} HIDDescriptor; - _Pragma("pack()") #define D_DEVICE(_class,_subClass,_proto,_packetSize0,_vid,_pid,_version,_im,_ip,_is,_configs) \ @@ -302,9 +271,6 @@ _Pragma("pack()") #define D_IAD(_firstInterface, _count, _class, _subClass, _protocol) \ { 8, 11, _firstInterface, _count, _class, _subClass, _protocol, 0 } -#define D_HIDREPORT(_descriptorLength) \ - { 9, 0x21, 0x1, 0x1, 0, 1, 0x22, _descriptorLength, 0 } - #define D_CDCCS(_subtype,_d0,_d1) { 5, 0x24, _subtype, _d0, _d1 } #define D_CDCCS4(_subtype,_d0) { 4, 0x24, _subtype, _d0 } diff --git a/hardware/arduino/sam/cores/arduino/USB/USBDesc.h b/hardware/arduino/sam/cores/arduino/USB/USBDesc.h index 878095e2450..389967cf988 100644 --- a/hardware/arduino/sam/cores/arduino/USB/USBDesc.h +++ b/hardware/arduino/sam/cores/arduino/USB/USBDesc.h @@ -18,7 +18,7 @@ #define __USBDESC_H__ #define CDC_ENABLED -#define HID_ENABLED +#define PLUGGABLE_USB_ENABLED #ifdef CDC_ENABLED #define CDC_INTERFACE_COUNT 2 @@ -28,14 +28,6 @@ #define CDC_ENPOINT_COUNT 0 #endif -#ifdef HID_ENABLED -#define HID_INTERFACE_COUNT 1 -#define HID_ENPOINT_COUNT 1 -#else -#define HID_INTERFACE_COUNT 0 -#define HID_ENPOINT_COUNT 0 -#endif - #define CDC_ACM_INTERFACE 0 // CDC ACM #define CDC_DATA_INTERFACE 1 // CDC Data #define CDC_FIRST_ENDPOINT 1 @@ -43,10 +35,6 @@ #define CDC_ENDPOINT_OUT (CDC_FIRST_ENDPOINT+1) #define CDC_ENDPOINT_IN (CDC_FIRST_ENDPOINT+2) -#define HID_INTERFACE (CDC_ACM_INTERFACE + CDC_INTERFACE_COUNT) // HID Interface -#define HID_FIRST_ENDPOINT (CDC_FIRST_ENDPOINT + CDC_ENPOINT_COUNT) -#define HID_ENDPOINT_INT (HID_FIRST_ENDPOINT) - #define INTERFACE_COUNT (MSC_INTERFACE + MSC_INTERFACE_COUNT) #ifdef CDC_ENABLED @@ -54,10 +42,6 @@ #define CDC_TX CDC_ENDPOINT_IN #endif -#ifdef HID_ENABLED -#define HID_TX HID_ENDPOINT_INT -#endif - #define IMANUFACTURER 1 #define IPRODUCT 2 From 20b2a302fa91be32658fef4d7d0dcf58e76f42bc Mon Sep 17 00:00:00 2001 From: Federico Fissore Date: Wed, 26 Aug 2015 16:05:10 +0200 Subject: [PATCH 007/123] Added support to VID+PID specific build properties --- .../LoadVIDPIDSpecificPreferences.java | 68 +++++++++++++++++++ .../packages/uploaders/SerialUploader.java | 3 + .../src/processing/app/debug/Compiler.java | 19 +++--- 3 files changed, 81 insertions(+), 9 deletions(-) create mode 100644 arduino-core/src/cc/arduino/LoadVIDPIDSpecificPreferences.java diff --git a/arduino-core/src/cc/arduino/LoadVIDPIDSpecificPreferences.java b/arduino-core/src/cc/arduino/LoadVIDPIDSpecificPreferences.java new file mode 100644 index 00000000000..09a99d11aef --- /dev/null +++ b/arduino-core/src/cc/arduino/LoadVIDPIDSpecificPreferences.java @@ -0,0 +1,68 @@ +/* + * This file is part of Arduino. + * + * Copyright 2015 Arduino LLC (http://www.arduino.cc/) + * + * Arduino is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * As a special exception, you may use this file as part of a free software + * library without restriction. Specifically, if other files instantiate + * templates or use macros or inline functions from this file, or you compile + * this file and link it with other files to produce an executable, this + * file does not by itself cause the resulting executable to be covered by + * the GNU General Public License. This exception does not however + * invalidate any other reasons why the executable file might be covered by + * the GNU General Public License. + */ + +package cc.arduino; + +import cc.arduino.packages.BoardPort; +import processing.app.BaseNoGui; +import processing.app.PreferencesData; +import processing.app.helpers.PreferencesMap; + +import java.util.Map; +import java.util.Optional; + +public class LoadVIDPIDSpecificPreferences { + + public void load(PreferencesMap prefs) { + BoardPort boardPort = BaseNoGui.getDiscoveryManager().find(PreferencesData.get("serial.port")); + if (boardPort == null) { + return; + } + + int VIDPIDIndex = findVIDPIDIndex(prefs, boardPort.getPrefs().get("vid").toUpperCase(), boardPort.getPrefs().get("pid").toUpperCase()); + if (VIDPIDIndex < 0) { + return; + } + + prefs.putAll(prefs.subTree("vid." + VIDPIDIndex)); + } + + private int findVIDPIDIndex(PreferencesMap preferences, String vid, String pid) { + Optional vidPid = preferences.subTree("vid").entrySet().stream() + .filter(keyValue -> !keyValue.getKey().contains(".")) + .filter(keyValue -> vid.equals(keyValue.getValue().toUpperCase()) && pid.equals(preferences.get("pid." + keyValue.getKey()).toUpperCase())) + .map(Map.Entry::getKey) + .map(Integer::valueOf) + .findFirst(); + + return vidPid.orElse(-1); + } + +} + diff --git a/arduino-core/src/cc/arduino/packages/uploaders/SerialUploader.java b/arduino-core/src/cc/arduino/packages/uploaders/SerialUploader.java index dc8cf8f6709..8470eb66df7 100644 --- a/arduino-core/src/cc/arduino/packages/uploaders/SerialUploader.java +++ b/arduino-core/src/cc/arduino/packages/uploaders/SerialUploader.java @@ -28,6 +28,7 @@ import cc.arduino.packages.Uploader; import processing.app.*; +import cc.arduino.LoadVIDPIDSpecificPreferences; import processing.app.debug.RunnerException; import processing.app.debug.TargetPlatform; import processing.app.helpers.OSUtils; @@ -343,6 +344,8 @@ public boolean burnBootloader() throws Exception { prefs.put("bootloader.verbose", prefs.getOrExcept("bootloader.params.quiet")); } + new LoadVIDPIDSpecificPreferences().load(prefs); + String pattern = prefs.getOrExcept("erase.pattern"); String[] cmd = StringReplacer.formatAndSplit(pattern, prefs, true); if (!executeUploadCommand(cmd)) diff --git a/arduino-core/src/processing/app/debug/Compiler.java b/arduino-core/src/processing/app/debug/Compiler.java index a3a42487fe8..ad1cb914f62 100644 --- a/arduino-core/src/processing/app/debug/Compiler.java +++ b/arduino-core/src/processing/app/debug/Compiler.java @@ -24,6 +24,7 @@ package processing.app.debug; import cc.arduino.Constants; +import cc.arduino.LoadVIDPIDSpecificPreferences; import cc.arduino.MyStreamPumper; import cc.arduino.contributions.packages.ContributedPlatform; import cc.arduino.contributions.packages.ContributedTool; @@ -536,7 +537,7 @@ private void adviseDuplicateLibraries() { private PreferencesMap createBuildPreferences(String _buildPath, String _primaryClassName) throws RunnerException { - + if (BaseNoGui.getBoardPreferences() == null) { RunnerException re = new RunnerException( tr("No board selected; please choose a board from the Tools > Board menu.")); @@ -561,7 +562,7 @@ private PreferencesMap createBuildPreferences(String _buildPath, throw re; } } - + // Merge all the global preference configuration in order of priority PreferencesMap buildPref = new PreferencesMap(); buildPref.putAll(PreferencesData.getMap()); @@ -579,7 +580,7 @@ private PreferencesMap createBuildPreferences(String _buildPath, buildPref.put("build.path", _buildPath); buildPref.put("build.project_name", _primaryClassName); buildPref.put("build.arch", targetPlatform.getId().toUpperCase()); - + // Platform.txt should define its own compiler.path. For // compatibility with earlier 1.5 versions, we define a (ugly, // avr-specific) default for it, but this should be removed at some @@ -603,7 +604,7 @@ private PreferencesMap createBuildPreferences(String _buildPath, coreFolder = new File(coreFolder, core); buildPref.put("build.core", core); buildPref.put("build.core.path", coreFolder.getAbsolutePath()); - + // System Folder File systemFolder = referencePlatform.getFolder(); systemFolder = new File(systemFolder, "system"); @@ -648,13 +649,13 @@ private PreferencesMap createBuildPreferences(String _buildPath, .collect(Collectors.toList()); buildPref.entrySet().stream() - .filter(entry -> { - return unsetPrefs.stream() - .filter(unsetPrefEntry -> entry.getValue().contains(unsetPrefEntry.getKey())) - .count() > 0; - }) + .filter(entry -> unsetPrefs.stream() + .filter(unsetPrefEntry -> entry.getValue().contains(unsetPrefEntry.getKey())) + .count() > 0) .forEach(invalidEntry -> buildPref.put(invalidEntry.getKey(), "")); + new LoadVIDPIDSpecificPreferences().load(buildPref); + return buildPref; } From 72493610913caa29a1a4bebcc1e661d9aa05619d Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Wed, 26 Aug 2015 16:06:13 +0200 Subject: [PATCH 008/123] Added support to Genuino boards (drivers, boards.txt entries, bootloaders) --- build/windows/dist/drivers/genuino.cat | Bin 0 -> 8193 bytes build/windows/dist/drivers/genuino.inf | 97 ++++ hardware/arduino/avr/boards.txt | 35 +- .../caterina/Caterina-Genuino-Micro.hex | 257 +++++++++ .../caterina/Caterina-Genuino-Micro.txt | 19 + ...D-dfu-usbserial-atmega16u2-Mega2560-R3.hex | 490 ++++++++++++++++++ ...MBINED-dfu-usbserial-atmega16u2-Uno-R3.hex | 490 ++++++++++++++++++ ...nuino-usbserial-atmega16u2-Mega2560-R3.hex | 248 +++++++++ .../Genuino-usbserial-atmega16u2-Uno-R3.hex | 248 +++++++++ 9 files changed, 1879 insertions(+), 5 deletions(-) create mode 100755 build/windows/dist/drivers/genuino.cat create mode 100755 build/windows/dist/drivers/genuino.inf create mode 100644 hardware/arduino/avr/bootloaders/caterina/Caterina-Genuino-Micro.hex create mode 100644 hardware/arduino/avr/bootloaders/caterina/Caterina-Genuino-Micro.txt create mode 100644 hardware/arduino/avr/firmwares/atmegaxxu2/Genuino-COMBINED-dfu-usbserial-atmega16u2-Mega2560-R3.hex create mode 100644 hardware/arduino/avr/firmwares/atmegaxxu2/Genuino-COMBINED-dfu-usbserial-atmega16u2-Uno-R3.hex create mode 100644 hardware/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Genuino-usbserial-atmega16u2-Mega2560-R3.hex create mode 100644 hardware/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Genuino-usbserial-atmega16u2-Uno-R3.hex diff --git a/build/windows/dist/drivers/genuino.cat b/build/windows/dist/drivers/genuino.cat new file mode 100755 index 0000000000000000000000000000000000000000..2c250449bc04116b25311af11965409a1a85c267 GIT binary patch literal 8193 zcmc(k2|SeB`@r8>Y-5S+5|Ta3`;HlVMb=~|gwh!MI+;TMLf`XwiAPj~=Ak~F$Z!jJ<{x%kk!Xlb5 z5$0u*h~}VUAb1ti5@7`%s+qIx9XY8CJydSqo7uM?(e-SFJ-!X%LZcA}*iOO%iUc+q z1AB?UY6D;~9#R2!VGQcppoD;naSsfcA!yYECC2?TR)GM_Hw68)L0@BV?M0)}5FEiY z2MP&<{Ux{{YsenxrhzMT@m3x1kPaB83e+nD6<^Ev#j*yF!%XF+J`6c?A9bca1h7n5 zbhH3WNAtq570gCpV=uz71rk_>8H>}$o^Xb2AZKt>8bHU_GUMk`h8)47Q-PtRZ>`Ld zuYEMXwJ}OxWm?~4jM7(`JG2v&7*;No+`qLU;0~AO|5|2@0YA0PccyQE^(AnS8RP_Q z1iu4e(R}4FV50}*2K4(uo+DN7VRQmQg45~fW^E0B|~@jn#&z} z<9I9oS<7Mj7}^A8$hTyB)jlaGZbkOT>ok@c#Z-@0(`z#$_Dv$6Rdqj8qOQxLF#x>h zV_(6sFBX2xmCI15c`Oz<2`juDtno^IMx7mI1z%_s1g~Vsc(6iP0h8`^^G^n<=i^>a z>_1)H=iez%SOc3fnx(M%@H$wJ6$^?GOn~vM?BKn`!or3|3Ca1=XcVfBn%b^iyHtG^ z9Eu7YN|hWEq!#K$38DJYLPB?|!Rib}l34JTfEBXjvSi|=83VyMa%dp)xL_}uS}1Tn zRUn5Y8G}}1MPQ*Af$fprV#eGV4F_!0_F|g}7v{grZDRHW;OW2

|I&$219(>pdHh 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 literal 0 HcmV?d00001 diff --git a/build/windows/dist/drivers/genuino.inf b/build/windows/dist/drivers/genuino.inf new file mode 100755 index 00000000000..25197a722f1 --- /dev/null +++ b/build/windows/dist/drivers/genuino.inf @@ -0,0 +1,97 @@ +; +; Copyright 2015 Arduino LLC (http://www.arduino.cc/) +; +; Developed by Zach Eveland, Blacklabel Development, Inc. +; +; Arduino is free software; you can redistribute it and/or modify +; it under the terms of the GNU General Public License as published by +; the Free Software Foundation; either version 2 of the License, or +; (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this program; if not, write to the Free Software +; Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +; +; As a special exception, you may use this file as part of a free software +; library without restriction. Specifically, if other files instantiate +; templates or use macros or inline functions from this file, or you compile +; this file and link it with other files to produce an executable, this +; file does not by itself cause the resulting executable to be covered by +; the GNU General Public License. This exception does not however +; invalidate any other reasons why the executable file might be covered by +; the GNU General Public License. +; + +[Strings] +DriverPackageDisplayName="Genuino USB Driver" +ManufacturerName="Arduino LLC (www.arduino.cc)" +ServiceName="USB RS-232 Emulation Driver" +unoR3.name="Genuino Uno" +mega2560rev3.name="Genuino Mega 2560" +micro.bootloader.name="Genuino Micro bootloader" +micro.sketch.name="Genuino Micro" + +[DefaultInstall] +CopyINF=genuino.inf + +[Version] +Class=Ports +ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} +Signature="$Windows NT$" +Provider=%ManufacturerName% +DriverPackageDisplayName=%DriverPackageDisplayName% +CatalogFile=genuino.cat +DriverVer=08/25/2015,1.0.1.0 + +[Manufacturer] +%ManufacturerName%=DeviceList, NTamd64, NTia64 + +[DestinationDirs] +FakeModemCopyFileSection=12 +DefaultDestDir=12 + +[DeviceList] +%mega2560rev3.name%=DriverInstall, USB\VID_2341&PID_0242 +%micro.bootloader.name%=DriverInstall, USB\VID_2341&PID_0237 +%micro.sketch.name%=DriverInstall, USB\VID_2341&PID_8237&MI_00 +%unoR3.name%=DriverInstall, USB\VID_2341&PID_0243 + +[DeviceList.NTamd64] +%mega2560rev3.name%=DriverInstall, USB\VID_2341&PID_0242 +%micro.bootloader.name%=DriverInstall, USB\VID_2341&PID_0237 +%micro.sketch.name%=DriverInstall, USB\VID_2341&PID_8237&MI_00 +%unoR3.name%=DriverInstall, USB\VID_2341&PID_0243 + +[DeviceList.NTia64] +%mega2560rev3.name%=DriverInstall, USB\VID_2341&PID_0242 +%micro.bootloader.name%=DriverInstall, USB\VID_2341&PID_0237 +%micro.sketch.name%=DriverInstall, USB\VID_2341&PID_8237&MI_00 +%unoR3.name%=DriverInstall, USB\VID_2341&PID_0243 + +[DriverInstall] +include=mdmcpq.inf,usb.inf +CopyFiles = FakeModemCopyFileSection +AddReg=DriverAddReg + +[DriverAddReg] +HKR,,DevLoader,,*ntkern +HKR,,NTMPDriver,,usbser.sys +HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider" + +[DriverInstall.Services] +include=mdmcpq.inf +AddService=usbser, 0x00000002, DriverService + +[DriverService] +DisplayName=%ServiceName% +ServiceType=1 +StartType=3 +ErrorControl=1 +ServiceBinary=%12%\usbser.sys +LoadOrderGroup=Base + diff --git a/hardware/arduino/avr/boards.txt b/hardware/arduino/avr/boards.txt index 65df589e567..7b55a6d98b8 100644 --- a/hardware/arduino/avr/boards.txt +++ b/hardware/arduino/avr/boards.txt @@ -46,7 +46,7 @@ yun.build.extra_flags={build.usb_flags} ############################################################## -uno.name=Arduino Uno +uno.name=Arduino/Genuino Uno uno.vid.0=0x2341 uno.pid.0=0x0043 @@ -54,6 +54,8 @@ uno.vid.1=0x2341 uno.pid.1=0x0001 uno.vid.2=0x2A03 uno.pid.2=0x0043 +uno.vid.3=0x2341 +uno.pid.3=0x0243 uno.upload.tool=avrdude uno.upload.protocol=arduino @@ -168,7 +170,7 @@ nano.menu.cpu.atmega168.build.mcu=atmega168 ############################################################## -mega.name=Arduino Mega or Mega 2560 +mega.name=Arduino/Genuino Mega or Mega 2560 mega.vid.0=0x2341 mega.pid.0=0x0010 @@ -178,6 +180,10 @@ mega.vid.2=0x2A03 mega.pid.2=0x0010 mega.vid.3=0x2A03 mega.pid.3=0x0042 +mega.vid.4=0x2341 +mega.pid.4=0x0210 +mega.vid.5=0x2341 +mega.pid.5=0x0242 mega.upload.tool=avrdude mega.upload.maximum_data_size=8192 @@ -190,10 +196,10 @@ mega.bootloader.lock_bits=0x0F mega.build.f_cpu=16000000L mega.build.core=arduino mega.build.variant=mega -# default board may be overridden by the cpu menu +# default board may be overridden by the cpu menu mega.build.board=AVR_MEGA2560 -## Arduino Mega w/ ATmega2560 +## Arduino/Genuino Mega w/ ATmega2560 ## ------------------------- mega.menu.cpu.atmega2560=ATmega2560 (Mega 2560) @@ -297,7 +303,8 @@ leonardo.build.extra_flags={build.usb_flags} ############################################################## -micro.name=Arduino Micro +micro.name=Arduino/Genuino Micro + micro.vid.0=0x2341 micro.pid.0=0x0037 micro.vid.1=0x2341 @@ -307,6 +314,24 @@ micro.pid.2=0x0037 micro.vid.3=0x2A03 micro.pid.3=0x8037 +micro.vid.4=0x2341 +micro.pid.4=0x0237 +# If the board is a 2341:0237 use 2341:8237 for build and set +# other parameters as well +micro.vid.4.build.vid=0x2341 +micro.vid.4.build.pid=0x8237 +micro.vid.4.build.usb_product="Genuino Micro" +micro.vid.4.bootloader.file=caterina/Caterina-Genuino-Micro.hex + +micro.vid.5=0x2341 +micro.pid.5=0x8237 +# If the board is a 2341:8237 use 2341:8237 for build and set +# other paramters as well +micro.vid.5.build.vid=0x2341 +micro.vid.5.build.pid=0x8237 +micro.vid.5.build.usb_product="Genuino Micro" +micro.vid.5.bootloader.file=caterina/Caterina-Genuino-Micro.hex + micro.upload.tool=avrdude micro.upload.protocol=avr109 micro.upload.maximum_size=28672 diff --git a/hardware/arduino/avr/bootloaders/caterina/Caterina-Genuino-Micro.hex b/hardware/arduino/avr/bootloaders/caterina/Caterina-Genuino-Micro.hex new file mode 100644 index 00000000000..b658b286997 --- /dev/null +++ b/hardware/arduino/avr/bootloaders/caterina/Caterina-Genuino-Micro.hex @@ -0,0 +1,257 @@ +:1070000055C000006EC000006CC000006AC00000E7 +:1070100068C0000066C0000064C0000062C00000DC +:1070200060C000005EC00000F2C400005AC0000052 +:1070300058C0000056C0000054C0000052C00000FC +:1070400050C0000078C000004CC000004AC00000E2 +:1070500048C0000046C0000044C0000042C000001C +:1070600040C000003EC000003CC000003AC000002C +:1070700038C0000036C0000034C0000032C000003C +:1070800030C000002EC000002CC000002AC000004C +:1070900028C0000026C0000024C0000022C000005C +:1070A00020C000001EC000001CC0000011241FBE34 +:1070B000CFEFDAE0DEBFCDBF11E0A0E0B1E0E2E368 +:1070C000FFE702C005900D92A83AB107D9F711E089 +:1070D000A8EAB1E001C01D92AE3BB107E1F78FD342 +:1070E00026C78ECFF89410926F00109281001092F4 +:1070F00085001092840081E085BF15BE47985D9899 +:1071000028980C94000008952091B2013091B301A9 +:107110002F5F3F4F3093B3012093B201932F37FF7E +:1071200003C08EEF831B982F990F921710F4479886 +:107130000895479A08951F920F920FB60F92112447 +:107140002F938F939F93EF93FF931092850010924C +:1071500084008091A8019091A901009741F00197C6 +:107160009093A9018093A801892B09F45D988091DF +:10717000AA019091AB01009741F001979093AB0168 +:107180008093AA01892B09F42898E0E0F0E085912A +:1071900094918F5F9F4F49F08091AC019091AD0128 +:1071A00001969093AD018093AC01FF91EF919F9177 +:1071B0008F912F910F900FBE0F901F90189584E024 +:1071C0008093E9000DC08091E8008B778093E80000 +:1071D00003C08EB3882351F08091E80082FFF9CF7D +:1071E0008091E80085FFEFCF8091F1000895982FFE +:1071F00083E08093E9008091E80085FD0DC08091D7 +:10720000E8008E778093E80003C08EB3882369F08E +:107210008091E80080FFF9CF9093F1005D9A84E6B9 +:1072200090E09093A9018093A80108954F925F92F6 +:107230006F927F928F929F92AF92BF92CF92DF9286 +:10724000EF92FF920F931F93CF93DF9384E080938D +:10725000E9008091E80082FF57C2289A84E690E016 +:107260009093AB018093AA01AADF182F853481F493 +:107270008CE49DE19093AD018093AC0107B600FCD6 +:10728000FDCFF999FECF81E180935700E89503C0C7 +:10729000843519F494DF8DE00DC28C34E1F3803530 +:1072A000D1F3843721F484E4A2DF80E003C2813685 +:1072B00011F489E5FFC18134B1F481DF182F7FDF3C +:1072C00090E0880F991FAA2797FDA095BA2F312F1C +:1072D000330F20E0442737FD4095542F822B932B0A +:1072E000A42BB52BB8C1803711F483E5E3C18335F6 +:1072F00049F4C0E0D1E089917ADF21E0C730D207BC +:10730000D1F7D9C1863521F481E371DF80E3D2C1A1 +:10731000833731F487E86BDF85E969DF8EE1CAC125 +:107320008536B9F4E0E0F0E093E085E09093570013 +:10733000E89507B600FCFDCF80935700E89507B6A7 +:1073400000FCFDCFE058FF4FA0E7E030FA0771F7EF +:10735000A2CF823739F4E1E0F0E089E08093570072 +:107360008491A8C1863439F4E0E0F0E089E08093AC +:10737000570084919FC18E3439F4E3E0F0E089E056 +:1073800080935700849196C1813539F4E2E0F0E0B2 +:1073900089E08093570084918DC1823631F489E56C +:1073A00026DF80E024DF80E885C1823419F087364B +:1073B00009F0E5C01092AD011092AC0100DF082F7A +:1073C000FEDEF82EFCDE682E8554823008F071C196 +:1073D000902F80E0CF2DD0E0C82BD92B10926F00DA +:1073E000173609F04BC081E180935700E895DD2402 +:1073F000CC24C3943FC0E090AE01F090AF01009167 +:10740000B0011091B101B6E46B16D9F4ED2DF0E0A6 +:10741000EE29FF29E4918E2FEADEDD2081F082E063 +:1074200090E0A0E0B0E0E80EF91E0A1F1B1FE092FA +:10743000AE01F092AF010093B0011093B101DC24D2 +:1074400018C0D801C701B695A7959795879559D5C6 +:10745000CEDE82E090E0A0E0B0E0E80EF91E0A1F68 +:107460001B1FE092AE01F092AF010093B0011093A8 +:10747000B1012197209709F0BECF7DC08090AE0169 +:107480009090AF01A090B001B090B10196E4691660 +:1074900009F05DC083E0F40180935700E89507B6DA +:1074A00000FCFDCF54C0F6E46F1661F5772031F192 +:1074B000E090AE01F090AF010091B0011091B101E8 +:1074C0007EDED82ECC24852D90E08C299D29F701D5 +:1074D0000C0140925700E895112482E090E0A0E072 +:1074E000B0E0E80EF91E0A1F1B1FE092AE01F092F9 +:1074F000AF010093B0011093B10102C060DE582EBD +:10750000742423C0E090AE01F090AF010091B0016F +:107510001091B10116950795F794E79450DE682F06 +:10752000C701F7D48091AE019091AF01A091B00155 +:10753000B091B1010296A11DB11D8093AE0190934F +:10754000AF01A093B001B093B101219704C05524BD +:10755000772444244394209709F0A5CF96E4691634 +:1075600041F485E0F40180935700E89507B600FCEC +:10757000FDCF8DE03CDE82E080936F009CC08334C1 +:1075800071F40091AE011091AF0119DE90E021E09D +:10759000F8010C0120935700E89511247CCE833626 +:1075A00019F5E090AE01F090AF010091B00110919B +:1075B000B10105DEF701E16090E021E00C012093CC +:1075C0005700E895112482E090E0A0E0B0E0E80EDA +:1075D000F91E0A1F1B1FE092AE01F092AF0100934B +:1075E000B0011093B10157CE8D3661F4E091AE0138 +:1075F000F091AF0185E080935700E89507B600FC55 +:10760000FDCF49CE823551F4E091AE01F091AF014A +:1076100005911491812FEBDD802F4CC0843421F52E +:10762000E090AE01F090AF010091B0011091B10176 +:1076300016950795F794E794C2DD682FC70169D4C2 +:107640008091AE019091AF01A091B001B091B101D4 +:107650000296A11DB11D8093AE019093AF01A0933E +:10766000B001B093B10117CE843609F5E090AE01B8 +:10767000F090AF010091B0011091B101D801C701A4 +:10768000B695A795979587953CD4B1DD82E090E0BB +:10769000A0E0B0E0E80EF91E0A1F1B1FE092AE0149 +:1076A000F092AF010093B0011093B10104C08B318F +:1076B00011F08FE39CDD83E08093E9009091E80076 +:1076C0008091E8008E778093E80095FF04C010C099 +:1076D0008EB38823C9F08091E80080FFF9CF8091B4 +:1076E000E8008E778093E80003C08EB3882361F0B2 +:1076F0008091E80080FFF9CF84E08093E9008091D9 +:10770000E8008B778093E800DF91CF911F910F9174 +:10771000FF90EF90DF90CF90BF90AF909F908F90B1 +:107720007F906F905F904F9008959091B601892F50 +:107730008F77813249F58091B7018032A1F0813293 +:1077400019F5913A09F58091E800877F8093E80068 +:107750008DE091E067E070E00BD28091E8008B77DC +:107760008093E8000895913279F48091E800877F52 +:107770008093E8008DE091E067E070E05DD2809159 +:10778000E8008E778093E800089582E061EC42E0A3 +:10779000B5D083E061E842E1B1D084E060E842E145 +:1077A000ADC084B7877F84BF88E10FB6F89480931B +:1077B0006000109260000FBE20E880E090E00FB6FD +:1077C000F89420936100809361000FBE81E085BF33 +:1077D00092E095BF3F9A209A559AE1E6F0E0208327 +:1077E000108247985D982898109289008AEF8093BC +:1077F000880090936F0083E080938100F0C04091F7 +:10780000000850910108109201081092000894B7E6 +:1078100014BE88E10FB6F894809360001092600067 +:107820000FBE292F30E0F901E270F07091FD18C011 +:1078300090FF05C0859194918F5F9F4F81F423FF46 +:107840000FC08091090190910A014817590741F032 +:10785000E0E0F0E0859194918F5F9F4F09F042DC6A +:10786000A0DF78941092AD011092AC010CC0DEDC68 +:1078700036D38091AC019091AD0181549F4110F0BD +:107880001092140141DC80911401882381F78091CA +:10789000E00081608093E00025DC80E090E00895C6 +:1078A000FA01923049F0933061F09130F9F485E1BA +:1078B00091E022E130E01EC087E291E02EE330E06B +:1078C00019C0882329F485E691E024E030E012C055 +:1078D000813029F489E691E022E230E00BC0823069 +:1078E00029F48DE891E028E130E004C080E090E0E8 +:1078F00020E030E091838083C90108958093E900FE +:107900008091EB0081608093EB001092ED0060931A +:10791000EC004093ED008091EE00881F8827881FBF +:1079200008958091B60188238CF403C08EB3882318 +:10793000B1F08091E80082FFF9CF8091E8008B7769 +:107940008093E80008958EB3882349F08091E80081 +:1079500080FFF9CF8091E8008E778093E80008954A +:10796000EF92FF920F931F9345D04CD008ED10E09B +:10797000F80180818F778083808180688083808117 +:107980008F7D808319BC1EBA1092B40180EEE82E60 +:10799000F12CF70180818B7F8083F80180818160E9 +:1079A000808380E060E042E0A9DFE1EEF0E08081EA +:1079B0008E7F8083E2EEF0E0808181608083808131 +:1079C00088608083F70180818E7F8083F8018081C9 +:1079D000806180831F910F91FF90EF900895E7EDF4 +:1079E000F0E08081816080838AE482BF81E08093BF +:1079F000B501B6CFE8EDF0E080818E7F80831092F4 +:107A0000E20008951092DA001092E10008951F92AA +:107A10000F920FB60F9211242F933F934F935F93C2 +:107A20006F937F938F939F93AF93BF93EF93FF9346 +:107A30008091DA0080FF1BC08091D80080FF17C0C2 +:107A40008091DA008E7F8093DA008091D90080FFE8 +:107A50000BC080E189BD82E189BD09B400FEFDCF84 +:107A600081E08EBB3BD203C019BC1EBA37D28091D5 +:107A7000E10080FF17C08091E20080FF13C0809179 +:107A8000E2008E7F8093E2008091E200806180932B +:107A9000E2008091D80080628093D80019BC85E014 +:107AA0008EBB1CD28091E10084FF2CC08091E2004B +:107AB00084FF28C080E189BD82E189BD09B400FE50 +:107AC000FDCF8091D8008F7D8093D8008091E10018 +:107AD0008F7E8093E1008091E2008F7E8093E200B0 +:107AE0008091E20081608093E2008091B40188235C +:107AF00031F48091E30087FD02C081E001C084E0A1 +:107B00008EBBECD18091E10083FF21C08091E20027 +:107B100083FF1DC08091E100877F8093E10082E0B8 +:107B20008EBB1092B4018091E1008E7F8093E100C2 +:107B30008091E2008E7F8093E2008091E20080617C +:107B40008093E20080E060E042E0D8DEC7D1FF91A0 +:107B5000EF91BF91AF919F918F917F916F915F91C5 +:107B60004F913F912F910F900FBE0F901F9018953E +:107B70009C014091BC015091BD014617570718F474 +:107B8000F90190E044C06115710511F0AB01F8CF27 +:107B90008091E8008E778093E80040E050E0F0CFDD +:107BA0008EB3882309F444C0853009F443C0809122 +:107BB000E80083FF02C081E008958091E80082FD23 +:107BC00031C08091E80080FF22C08091F300909145 +:107BD000F200782F60E0292F30E0262B372B07C0EA +:107BE00081918093F100415050402F5F3F4F4115EC +:107BF000510519F02830310598F390E0283031050F +:107C000009F491E08091E8008E778093E8004115B7 +:107C1000510531F6992321F605C08EB3882341F032 +:107C2000853041F08091E80082FFF7CF80E0089531 +:107C300082E0089583E008959C016115710529F49F +:107C40008091E8008B778093E800F90126C08EB31D +:107C5000882391F1853091F18091E80083FF02C083 +:107C600081E008958091E80082FFF1CF06C0809105 +:107C7000F10081936150704059F02091F3008091A0 +:107C8000F200322F20E090E0822B932B892B79F7A2 +:107C90008091E8008B778093E80061157105B9F653 +:107CA00005C08EB3882341F0853041F08091E80013 +:107CB00080FFF7CF80E0089582E0089583E0089583 +:107CC0000F931F93DF93CF9300D0CDB7DEB7E6EBD2 +:107CD000F1E08091F100819381E0EE3BF807C9F774 +:107CE00024DD8091E80083FFE4C08091B60190918B +:107CF000B701953009F46DC0963040F4913081F1B0 +:107D0000913070F0933009F0D4C02AC0983009F453 +:107D1000A3C0993009F4B2C0963009F0CAC07CC043 +:107D2000803809F4C6C0823809F0C3C08091BA0116 +:107D300087708093E9008091EB001092E900209118 +:107D4000E800277F2093E80090E025E0969587954E +:107D50002A95E1F781708093F1001092F10087C0BD +:107D6000882319F0823009F0A4C08F71823009F0A5 +:107D7000A0C08091B801882331F52091BA01277005 +:107D800009F497C02093E9008091EB0080FF1BC0AD +:107D9000933021F48091EB00806213C08091EB005E +:107DA00080618093EB0081E090E002C0880F991F12 +:107DB0002A95E2F78093EA001092EA008091EB00A6 +:107DC00088608093EB001092E9008091E800877F43 +:107DD00051C0882309F06DC01091B8011F770FB70B +:107DE000F8948091E800877F8093E8009ADD809185 +:107DF000E80080FFFCCF8091E3008078812B8093A6 +:107E0000E30080688093E300112311F482E001C055 +:107E100083E08EBB0FBF4DC08058823008F049C050 +:107E20008091B8019091B9016091BA01AE014F5FA4 +:107E30005F4F36DDBC01009709F43BC08091E8003C +:107E4000877F8093E80089819A8192DE8091E800A3 +:107E50008B778093E8002DC0803859F58091E80039 +:107E6000877F8093E8008091B4018093F100809136 +:107E7000E8008E778093E80054DD1BC08823C9F4A6 +:107E80009091B8019230A8F48091E800877F8093A8 +:107E9000E8009093B40145DD8091B401882331F46A +:107EA0008091E30087FD02C081E001C084E08EBBC9 +:107EB0006CDC8091E80083FF0AC08091EB00806257 +:107EC0008093EB008091E800877F8093E8000F901B +:107ED0000F90CF91DF911F910F91089508951F93F7 +:107EE0008EB3882361F01091E9001092E90080912F +:107EF000E80083FF01C0E4DE17701093E9001F91D2 +:107F00000895F999FECF92BD81BDF89A992780B561 +:107F10000895262FF999FECF1FBA92BD81BD20BDCD +:107F20000FB6F894FA9AF99A0FBE01960895F8944C +:027F3000FFCF81 +:107F32004341544552494E41007777000800000002 +:107F4200000000080112011001020000084123375D +:107F52000201000201000109023E0002010080321A +:107F6200090400000102020100052400100104249A +:107F720002040524060001070582030800FF090424 +:107F82000100020A000000070504021000010705B3 +:107F92008302100001040309042203470065006EF6 +:107FA20000750069006E006F0020004D00690063DB +:107FB2000072006F00200020002000000018034122 +:107FC2000072006400750069006E006F0020004CB2 +:087FD200004C00430000000018 +:040000030000700089 +:00000001FF diff --git a/hardware/arduino/avr/bootloaders/caterina/Caterina-Genuino-Micro.txt b/hardware/arduino/avr/bootloaders/caterina/Caterina-Genuino-Micro.txt new file mode 100644 index 00000000000..fd29bd8b8c7 --- /dev/null +++ b/hardware/arduino/avr/bootloaders/caterina/Caterina-Genuino-Micro.txt @@ -0,0 +1,19 @@ +GENUINO MICRO PRODUCTION FIRMWARES +================================== + +Bootloader: +----------- + +Name: Caterina-Genuino-Micro.hex + +Notes: +Builds against LUFA version 111009 +make version 3.81 +avrdude version 5.11 + +All AVR tools except avrdude were installed by CrossPack 20100115: +avr-gcc version 4.3.3 (GCC) +Thread model: single +Configured with: ../configure —prefix=/usr/local/CrossPack-AVR-20100115 —disable-dependency-tracking —disable-nls —disable-werror —target=avr —enable-languages=c,c++ —disable-nls —disable-libssp —with-dwarf2 +avr-libc version 1.6.7 +binutils version 2.19 diff --git a/hardware/arduino/avr/firmwares/atmegaxxu2/Genuino-COMBINED-dfu-usbserial-atmega16u2-Mega2560-R3.hex b/hardware/arduino/avr/firmwares/atmegaxxu2/Genuino-COMBINED-dfu-usbserial-atmega16u2-Mega2560-R3.hex new file mode 100644 index 00000000000..80c358b68f7 --- /dev/null +++ b/hardware/arduino/avr/firmwares/atmegaxxu2/Genuino-COMBINED-dfu-usbserial-atmega16u2-Mega2560-R3.hex @@ -0,0 +1,490 @@ +:200000009EC00000B7C00000B5C00000B3C00000B1C00000AFC00000ADC00000ABC000006B +:20002000A9C00000A7C00000A5C00000FCC30000A1C400009FC000009DC000009BC0000050 +:2000400099C0000097C0000095C0000093C0000091C000008FC000008DC00000C6C10000D4 +:2000600089C0000087C0000085C0000083C0000081C00000160538052206380522067A05C3 +:2000800097052206EA05FC052403470065006E00750069006E006F0020004D006500670077 +:2000A00061002000320035003600300000003A03410072006400750069006E006F002000C3 +:2000C0004C004C004300200028007700770077002E00610072006400750069006E006F0078 +:2000E0002E0063006300290000000403090409023E00020100C0320904000001020201007E +:200100000524000110042402060524060001070582030800FF09040100020A000000070587 +:2001200004024000010705830240000112011001020000084123420201000102DC011124BA +:200140001FBECFEFD2E0DEBFCDBF11E0A0E0B1E0EEE4FFE002C005900D92A631B107D9F721 +:2001600012E0A6E1B1E001C01D92AF32B107E1F764D0EBC645CFFC01E058FF4FA081B181C5 +:200180006C93A081B1819D012F5F3F4F318320832E173F0721F412969C938E9311972FB7D6 +:2001A000F894FC01EC57FF4F80818F5F80832FBF0895DC01AE57BF4FED91FC911197419133 +:2001C0001196FC93EE939C0120583F4FE217F30711F48D939C932FB7F894FC01EC57FF4F7E +:2001E0009081915090832FBF842F089584B7877F84BF88E10FB6F894809360001092600009 +:200200000FBE87E690E09093CD008093CC0086E08093CA001092C80088E18093C900539A86 +:200220005A9A8AB180638AB98BB180638BB9F0D284E085BD5F9A579A0895D8DF2FB7F894EE +:200240008EE991E090931F0280931E0290932102809320022FBF2FB7F89489E191E0909366 +:200260009A018093990190939C0180939B012FBF7894D3E09FB7F894809122029FBF8038ED +:2002800049F080E091E00ED697FD04C0682F8EE991E071DF8FB7F894C0919D018FBFA899F9 +:2002A00002C0C13658F1A89A80919D01882319F05D98D0931601CC2349F089E191E079DFCD +:2002C000682F80E091E093D5C150F5CF80911601882341F0809116018150809316018111C0 +:2002E00001C05D9A80911701882341F080911701815080931701811101C05C9A9FB7F894F1 +:20030000809122029FBF882361F08EE991E051DF9091C80095FFFCCF8093CE005C98D093B6 +:20032000170180E091E0B0D59AD4A4CF80E091E011C580E091E0A5C41F93CF93DF93EC011A +:200340008C89813031F0823011F010E003C010E201C010E38B89823009F418608D898730A2 +:2003600031F0883031F0863029F4126003C0146001C016601092C9001092C8001092CA008F +:200380002F85388949895A89211581EE38074105510571F0CA01B90196958795779567957E +:2003A00060587B47814E9F4FA8D52150310902C020E130E03093CD002093CC001093CA008F +:2003C0008F859889A989BA898115914EA105B10511F480E001C082E08093C80088E98093BB +:2003E000C900DF91CF911F9108951F920F920FB60F9211242F933F934F935F936F937F93AE +:200400008F939F93AF93BF93EF93FF936091CE008EB3843019F489E191E0ADDEFF91EF91A9 +:20042000BF91AF919F918F917F916F915F914F913F912F910F900FBE0F901F901895FC0108 +:20044000858580FF02C05F9808955F9A0895292F33272230310559F02330310569F0213071 +:200460003105F9F482E190E02CE231E01EC08EE390E02EEE30E019C099278130910541F06B +:200480008230910541F0892B61F4EAEEF0E005C0EEEAF0E002C0E8E8F0E0849190E09F013E +:2004A00004C080E090E020E030E0FA0131832083089528E030E040E02817390720F44F5F30 +:2004C000220F331FF9CF842F8295807F08958093E900EBEEF0E0808181608083EDEEF0E036 +:2004E00010826093EC0040838091EE00881F8827881F08951092F40080E08093E90010929B +:20050000F0001092E8001092ED009091EB009E7F9093EB008F5F853081F7089580912702A9 +:2005200087FD05C08091E80080FF0DC010C08091E80082FD04C08EB38111F9CF08958091D8 +:20054000E8008B7707C08EB38111ECCF08958091E8008E778093E800089585E69091EC00B1 +:2005600090FF05C09091E80090FF05C01BC09091E80092FD17C09EB39923B1F09EB39530BC +:20058000A9F09091EB0095FD13C09091E10092FFE5CF9091E1009B7F9093E1008150F1F632 +:2005A00084E0089580E0089582E0089583E0089581E0089520912D0230912E0226173707F4 +:2005C00048F06115710539F42091E8002E772093E80001C0B90130E06115710591F1209147 +:2005E000E80023FD38C02091E80022FF06C08091E80082FF29C080E008952EB3222369F19B +:200600002EB3253061F12091E80020FFE5CF2091F200FC01CF016115710549F0283038F4CD +:2006200081918093F100615071092F5FF3CF31E0283009F030E02091E8002E772093E800DE +:20064000CBCF3111CCCFD3CF8EB3882331F08EB3853069F604C081E0089582E0089583E0FB +:20066000089520912D0230912E022617370748F06115710539F42091E8002E772093E80067 +:2006800001C0B90130E06115710599F12091E80023FD39C02091E80022FF06C08091E8002E +:2006A00082FF2AC080E008952EB3222371F12EB3253069F12091E80020FFE5CF2091F200AB +:2006C000FC01CF016115710551F0283040F484918093F100615071092F5F3196F2CF31E029 +:2006E000283009F030E02091E8002E772093E800CACF3111CBCFD2CF8EB3882331F08EB35C +:20070000853061F604C081E0089582E0089583E008956115710529F42091E8002B77209315 +:20072000E8006115710549F12091E80023FD2AC02EB3222359F12EB3253051F12091E80087 +:2007400022FFF2CFFC018091F200882371F09F012F5F3F4FC9014091F10040836150710975 +:2007600061157105C9F2F901EECFCF01D5CF8EB3882361F08EB3853059F08091E80080FFB3 +:20078000F6CF02C081E0089580E0089582E0089583E0089542D044D01EBA1092250210926F +:2007A00024021092230284E089BD89B5826089BD09B400FEFDCF8091D800982F9F779093CC +:2007C000D80080688093D800809163008E7F809363008091D8008F7D8093D8008091E000A6 +:2007E0008E7F8093E0008091E1008E7F8093E1008091E20081608093E2008091E100877F45 +:200800008093E1008091E20088608093E2000895C1DF81E08093260208951092E20008957D +:200820001092E10008951F920F920FB60F9211242F933F934F935F936F937F938F939F93DB +:20084000AF93BF93EF93FF938091E10080FF1BC08091E20080FF17C08091E1008E7F809349 +:20086000E1008091E2008E7F8093E2008091E20080618093E2008091D80080628093D80023 +:2008800019BC1EBAEBD18091E10084FF29C08091E20084FF25C084E089BD89B5826089BD26 +:2008A00009B400FEFDCF8091D8008F7D8093D8008091E1008F7E8093E1008091E2008F7EDE +:2008C0008093E2008091E20081608093E20080912502882311F084E001C081E08EBBBED118 +:2008E0008091E10083FF27C08091E20083FF23C08091E100877F8093E10082E08EBB10920C +:2009000025028091E1008E7F8093E1008091E2008E7F8093E2008091E20080618093E200FF +:20092000E9DD42E060E080E0D2DD8091F00088608093F00093D18091E10082FF0AC08091E2 +:20094000E20082FF06C08091E1008B7F8093E10085D1FF91EF91BF91AF919F918F917F9128 +:200960006F915F914F913F912F910F900FBE0F901F9018951F920F920FB60F9211242F9301 +:200980003F934F935F936F937F938F939F93AF93BF93CF93EF93FF93E9EEF0E0C081C77020 +:2009A0001082E0EFF0E08081877F808378941CD0F894E9EEF0E01082A0EFB0E08C9188601B +:2009C0008C93C083FF91EF91CF91BF91AF919F918F917F916F915F914F913F912F910F9056 +:2009E0000FBE0F901F9018951F93CF93DF93CDB7DEB7AA970FB6F894DEBF0FBECDBFE7E23F +:200A0000F2E08091F100819322E0EF32F207C9F72091270230912802832F90E08A309105DB +:200A200008F010C1FC01E65CFF4F89C2203881F0223809F007C180912B0287708093E90000 +:200A40008091EB0085FB882780F91092E90006C08091230290912402911182609091E80097 +:200A6000977F9093E8008093F1001092F100BDC0822F8D7F09F0E6C0222319F0223061F0F4 +:200A8000D2C080912902813009F0CDC0333009F080E08093240228C080912902811124C0C2 +:200AA00020912B02277009F4BEC02093E9008091EB0080FFB8C08091EB00333011F4806271 +:200AC00011C080618093EB0081E090E0022E01C0880F0A94EAF78093EA001092EA008091F4 +:200AE000EB0088608093EB001092E9008091E800877F7EC02111A6C0109129028091E80000 +:200B0000877F8093E8000ADD8091E80080FD04C08EB38111F9CF87C0812F8F7711F093E0A7 +:200B200001C092E09EBB80688093E3007CC02058223008F087C08091290290912A028C3DB4 +:200B400023E0920781F583E08A838AE289834FB7F894DE01139620E03EE051E2E32FF0E04E +:200B600050935700E49120FF03C0E295EF703F5FEF7090E39E0F9A3310F0E95C01C0E92F06 +:200B80008E2F90E08D939D932F5F243139F74FBF8091E800877F8093E8006AE270E0CE0152 +:200BA000019608DD11C0AE014F5F5F4F60912B024EDC0097C1F12091E800277F2093E80072 +:200BC000BC0189819A814DDD8091E8008B778093E80029C02038B1F58091E800877F80931A +:200BE000E800809125028093F1008091E8008E778093E80093DC17C0211124C09091290230 +:200C0000923088F48091E800877F8093E8009093250284DC80912502882311F084E001C0E9 +:200C200083E08EBB83DB8091E80083FF0DC08091EB0080628093EB008091E800877F809374 +:200C4000E80002C076DBEFCFAA960FB6F894DEBF0FBECDBFDF91CF911F9108950895CF9338 +:200C60008EB3882359F0C091E900C7701092E9008091E80083FDB8DEC093E900CF910895FB +:200C80000895CF93DF93EC018091E80083FF5FC0888190E020912B0230912C022817390797 +:200CA00009F055C080912802813249F018F48032C9F04DC0823261F18332C9F148C08091ED +:200CC0002702813A09F043C08091E800877F8093E80067E070E0CE010F966CDC8091E800EE +:200CE0008B7713C080912702813289F58091E800877F8093E80067E070E0CE010F9609DDC9 +:200D0000CE011ADB8091E8008E778093E8001FC0809127028132D9F48091E800877F80936B +:200D2000E800809129028D87CE0189DB0DC080912702813261F48091E800877F8093E8003F +:200D400060912902CE019CDFDF91CF91E7CBDF91CF9108950F931F93CF93DF93EC01FC012C +:200D60003D9689E0DF011D928A95E9F72A813B818C81882311F014E001C010E00981C90190 +:200D800098DB412F482B426061E8802FA0DB882341F12E813F818885882311F014E001C02E +:200DA00010E00D81C90185DB412F482B426060E8802F8DDB8823A9F02A853B858C85882338 +:200DC00011F014E001C010E0C985C90172DB412F482B426061EC8C2FDF91CF911F910F915B +:200DE00076CB80E0DF91CF911F910F910895CF93C62F2EB32430E9F4FC01478550896189A0 +:200E00007289452B462B472BA1F081818093E9008091E80085FF04C0C093F10080E00AC046 +:200E20008091E8008E778093E80097DB8823A1F301C082E0CF9108952EB3243019F5FC01A8 +:200E40004785508961897289452B462B472BD1F081818093E9008091F200882389F09091AE +:200E6000E8008091E8008E778093E80095FD08C074DB811108C08091E8008E778093E80095 +:200E800080E0089582E008952EB3243051F4FC014785508961897289452B462B472B09F009 +:200EA000CBCF08952EB3243019F08FEF9FEF0895FC014785508961897289452B462B472B3A +:200EC000A1F385818093E9008091E80082FFEDCF8091F200882321F02091F10030E002C013 +:200EE0002FEF3FEF8091F200811105C08091E8008B778093E800C9010895A1E21A2EAA1B5F +:200F0000BB1BFD010DC0AA1FBB1FEE1FFF1FA217B307E407F50720F0A21BB30BE40BF50B8E +:200F2000661F771F881F991F1A9469F760957095809590959B01AC01BD01CF010895EE0F84 +:200F4000FF1F0590F491E02D0994F894FFCF000340000004400000020800000000000000C4 +:200F600000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:200F800020F0A21BB30BE40BF50B661F771F881F991F1A9469F760957095809590959B017F +:200FA000AC01BD01CF010895F894FFCF00034000000440000002080000000000000000006E +:200FC0000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F +:200FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:20100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +:20102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0 +:20104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0 +:20106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90 +:20108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70 +:2010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50 +:2010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30 +:2010E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10 +:20110000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF +:20112000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF +:20114000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF +:20116000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F +:20118000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F +:2011A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F +:2011C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F +:2011E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +:20120000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE +:20122000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE +:20124000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE +:20126000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E +:20128000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E +:2012A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E +:2012C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E +:2012E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:20130000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:20132000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:20134000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:20136000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:20138000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:2013A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:2013C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:2013E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:20140000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +:20142000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC +:20144000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:20146000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:20148000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:2014A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:2014C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:2014E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:20150000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB +:20152000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCB +:20154000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB +:20156000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B +:20158000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B +:2015A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B +:2015C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B +:2015E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B +:20160000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA +:20162000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA +:20164000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAA +:20166000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A +:20168000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A +:2016A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A +:2016C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A +:2016E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A +:20170000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 +:20172000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9 +:20174000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9 +:20176000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89 +:20178000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF69 +:2017A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49 +:2017C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29 +:2017E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09 +:20180000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:20182000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8 +:20184000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8 +:20186000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF88 +:20188000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68 +:2018A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48 +:2018C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28 +:2018E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08 +:20190000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7 +:20192000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7 +:20194000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7 +:20196000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87 +:20198000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67 +:2019A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47 +:2019C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27 +:2019E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07 +:201A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6 +:201A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6 +:201A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6 +:201A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86 +:201A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66 +:201AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46 +:201AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26 +:201AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06 +:201B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5 +:201B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5 +:201B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 +:201B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85 +:201B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF65 +:201BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF45 +:201BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25 +:201BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05 +:201C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4 +:201C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4 +:201C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4 +:201C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84 +:201C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64 +:201CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF44 +:201CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF24 +:201CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04 +:201D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3 +:201D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3 +:201D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3 +:201D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83 +:201D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63 +:201DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43 +:201DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23 +:201DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03 +:201E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2 +:201E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2 +:201E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2 +:201E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82 +:201E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62 +:201EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF42 +:201EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22 +:201EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02 +:201F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 +:201F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1 +:201F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1 +:201F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81 +:201F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61 +:201FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF41 +:201FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21 +:201FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01 +:20200000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 +:20202000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 +:20204000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 +:20206000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 +:20208000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 +:2020A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:2020C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:2020E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +:20210000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:20212000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:20214000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:20216000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:20218000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:2021A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:2021C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:2021E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:20220000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:20222000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:20224000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:20226000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:20228000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:2022A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:2022C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:2022E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:20230000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:20232000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:20234000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:20236000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:20238000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:2023A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:2023C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:2023E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:20240000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC +:20242000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:20244000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:20246000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:20248000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:2024A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:2024C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:2024E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +:20250000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB +:20252000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBB +:20254000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9B +:20256000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B +:20258000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B +:2025A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B +:2025C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B +:2025E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB +:20260000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDA +:20262000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBA +:20264000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A +:20266000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A +:20268000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A +:2026A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A +:2026C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A +:2026E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA +:20270000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9 +:20272000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9 +:20274000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 +:20276000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79 +:20278000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF59 +:2027A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39 +:2027C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19 +:2027E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 +:20280000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8 +:20282000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8 +:20284000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF98 +:20286000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF78 +:20288000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF58 +:2028A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38 +:2028C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18 +:2028E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 +:20290000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7 +:20292000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7 +:20294000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97 +:20296000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 +:20298000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57 +:2029A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF37 +:2029C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17 +:2029E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 +:202A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6 +:202A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6 +:202A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96 +:202A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76 +:202A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56 +:202AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF36 +:202AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF16 +:202AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6 +:202B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5 +:202B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5 +:202B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF95 +:202B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75 +:202B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55 +:202BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35 +:202BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF15 +:202BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 +:202C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4 +:202C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4 +:202C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94 +:202C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74 +:202C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF54 +:202CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF34 +:202CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF14 +:202CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4 +:202D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3 +:202D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3 +:202D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF93 +:202D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF73 +:202D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF53 +:202DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF33 +:202DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF13 +:202DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3 +:202E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2 +:202E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2 +:202E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF92 +:202E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 +:202E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF52 +:202EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF32 +:202EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF12 +:202EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2 +:202F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1 +:202F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1 +:202F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF91 +:202F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71 +:202F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF51 +:202FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF31 +:202FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:202FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 +:203000004BC0000064C0000062C0000060C000005EC000005CC000005AC0000058C00000D3 +:2030200056C0000054C0000052C00000CBC400004EC000004CC000004AC0000048C0000099 +:2030400046C0000044C0000042C0000040C000003EC000003CC000003AC0000038C0000078 +:2030600036C0000034C0000032C0000030C000002EC000002CC000002AC0000028C00000D8 +:2030800026C0000024C0000022C0000020C000001EC000001CC0000011241FBECFEFD2E068 +:2030A000DEBFCDBF11E0A0E0B1E0E4EBFCE302C005900D92A836B107D9F711E0A8E6B1E0CB +:2030C00001C01D92A738B107E1F74FD3F1C598CF982F15C08091F200882371F48091E8002A +:2030E0008B7F8093E80003C08EB3882351F08091E80082FFF9CF02C08091F1009150992338 +:2031000049F708952091760130917501809174019091730180936D0190936E01C901809368 +:203120006F0190937001089580917101843009F45AC0853030F4813059F0833009F0C3C09E +:203140001FC0853009F4A0C0863009F0BCC0AFC080917201823008F0B6C0D4DF8091720109 +:20316000882361F480916D0190916E0123E0FC0120935700E89507B600FCFDCF85E008C007 +:2031800080917201882311F0823029F4BBDF89E0809301010895813009F095C020E030E06C +:2031A00040E050E0F90184918F3F81F0CA01AA27BB2780936C0130936E0120936D018AE0B6 +:2031C0008093010185E08093690108952F5F3F4F4F4F5F4F2030F0E33F07F0E04F07F0E094 +:2031E0005F0701F7089580917201833051F581E0809368018091770190917801892B71F042 +:2032000080917301813009F05EC0809176019091750190936B0180936A0108958091730113 +:20322000882361F42CE088E190E00FB6F894A895809360000FBE2093600008951092000188 +:203240000895882309F03FC0809173018F3F09F03AC0E0E0F0E093E085E090935700E89589 +:2032600007B600FCFDCF80935700E89507B600FCFDCFE058FF4F20E3E030F20771F781E101 +:2032800080935700E8950895E091730180917201882321F4F0E0EB5FFE4F05C0813099F417 +:2032A000F0E0EE52FF4F808180937C01089580917201833041F480917301882321F48091C0 +:2032C000740180936C0108952F923F924F925F926F927F929F92AF92BF92CF92DF92EF92D0 +:2032E000FF920F931F93CF93DF938091850190918601909378018093770180917901882379 +:2033000051F08091790181508093790180917901882309F45D9A80917A01882351F08091D0 +:203320007A01815080937A0180917A01882309F45C9A80918001833009F4B2C1843030F4FC +:20334000813071F0823009F0E3C111C1853009F4C5C1853008F4BAC1863009F0D9C1CDC1FF +:203360005C9883E080937A018091E800877F8093E80080916801882329F0D6DE5D9A5C9A8F +:203380001092680120917701309178012115310529F42AC08EB3882309F4BAC18091E800EF +:2033A00082FFF8CF8091F10080937101215030403093780120937701E2E7F1E00CC080917F +:2033C000F10081932150304081E0E737F80719F43183208308C08091F200882381F7309374 +:2033E000780120937701A0DE80910101853009F0BAC08091770190917801892B21F482E022 +:2034000080930101B0C08AE163DE80916D018F715FDEC0916F01D091700120916D0130914C +:203420006E0121968E01021B130B219780917201882309F093C0180136942794C901A091D0 +:203440006C01B0E09C01AD0162E0E62EF12C012D112DE20EF31E041F151F59016A0190E0B8 +:2034600099249394B5E0A3E048C08091F200882371F48091E8008B7F8093E80004C08EB332 +:20348000882309F445C18091E80082FFF8CF0894210831088091F100682F8091F100782FFD +:2034A000F5010B0190925700E89511249F5F903419F021143104A1F4F901B0935700E89504 +:2034C00007B600FCFDCF2114310451F0F701A0935700E89507B600FCFDCFA801970190E087 +:2034E00042E0442E512C612C712CE40CF51C061D171DA40CB51CC61CD71C2114310409F080 +:20350000B4CFD0936E01C0936D0181E180935700E89527C08091F200882371F48091E80059 +:203520008B7F8093E80004C08EB3882309F4F0C08091E80082FFF8CF6091F10080916D0187 +:2035400090916E01A7D380916D0190916E01019690936E0180936D010150104001151105DB +:20356000C9F680E1B5DD8091E8008B7FC3C08091E800877F8093E8005D9883E08093790134 +:2035800004C08EB3882309F4C3C08091E80080FFF8CF80910101893091F08A3069F4809147 +:2035A0007201813049F480916D0190916E018093F1009093F1009BC080917C0196C0609153 +:2035C0006F017091700120916D0130916E016F5F7F4F7B01E21AF30A6150704080917201C4 +:2035E000882389F5870116950795C901A0916C01B0E09C01AD011FC08091F200803271F497 +:203600008091E8008E7F8093E80004C08EB3882309F47EC08091E80080FFF8CFF90185916F +:2036200094918093F1009093F100015010402E5F3F4F4F4F5F4F01151105F1F670936E01C0 +:2036400060936D0129C0823039F523C08091F200803271F48091E8008E7F8093E80004C07E +:203660008EB3882309F454C08091E80080FFF8CF00916D0110916E01C80104D38093F1005B +:203680000F5F1F4F10936E0100936D010894E108F108E114F104D1F682E08093010127C0AE +:2036A0008091E800877F8093E800809169018093F1001092F1001092F1001092F1008091C7 +:2036C00001018093F1001092F10011C08091E800877F8093E8001092690119C08091E800A8 +:2036E000877F8093E800809101018093F1008091E8008E7F8093E8000AC08091E800877FE8 +:203700008093E8005D9A5C9A82E08093010187D0DF91CF911F910F91FF90EF90DF90CF90F7 +:20372000BF90AF909F907F906F905F904F903F902F9008952BD181E085BF15BE089584B779 +:20374000877F84BF88E10FB6F89480936000109260000FBE81E085BF82E085BF8AB18063BB +:203760008AB98BB180638BB90CC1E9DF789401C080D2809100018823D9F78091680188233D +:20378000B9F7D8DFE0916A01F0916B010995FA01923071F0933089F0913029F488E091E04A +:2037A00022E130E019C080E090E020E030E014C08AE191E02BE130E00FC0882339F48091B9 +:2037C0003501282F30E085E391E006C080913901282F30E089E391E091838083C9010895A0 +:2037E0008091EB0081608093EB001092ED006093EC004093ED008091EE00881F8827881FC4 +:2038000008951092F4001092F0001092E8001092ED00EBEEF0E080818E7F80830895809162 +:203820007F0188238CF403C08EB38823B1F08091E80082FFF9CF8091E8008B7F8093E8004D +:2038400008958EB3882349F08091E80080FFF9CF8091E8008E7F8093E80008959C0140915A +:203860008501509186014617570718F4F90120E038C06115710511F0AB01F8CF8091E80048 +:203880008E7F8093E80040E050E0F0CF8091E80083FF02C081E008958091E80082FD2DC071 +:2038A0008EB3882381F18EB3853079F18091E80080FF17C09091F20006C081918093F1000C +:2038C000415050409F5F4115510511F09032A8F320E0903209F421E08091E8008E7F8093E6 +:2038E000E8004115510591F6222381F606C08EB3882349F08EB3853041F08091E80082FF65 +:20390000F6CF80E0089582E0089583E0089554D056D01EBA10927D0184E089BD89B58260DA +:2039200089BD09B400FEFDCF8091D800982F9F779093D80080688093D800809163008E7FA5 +:20394000809363008091D8008F7D8093D8008091E0008E7F8093E0008091E1008E7F80930E +:20396000E1008091E20081608093E2008091E100877F8093E1008091E20088608093E200E1 +:203980000895C5DF81E080937E010895C0DFE0EEF0E0808181608083E8EDF0E080818F7788 +:2039A00080830AD00CD019BCE3E6F0E080818160808310927E0108951092E200089510927A +:2039C000E10008951F920F920FB60F9211242F933F934F935F936F937F938F939F93AF936A +:2039E000BF93EF93FF938091E10080FF1BC08091E20080FF17C08091E1008E7F8093E100D9 +:203A00008091E2008E7F8093E2008091E20080618093E2008091D80080628093D80019BC5D +:203A20001EBA26D18091E10084FF29C08091E20084FF25C084E089BD89B5826089BD09B431 +:203A400000FEFDCF8091D8008F7D8093D8008091E1008F7E8093E1008091E2008F7E8093B6 +:203A6000E2008091E20081608093E20080917D01882311F481E001C084E08EBBF9D08091B3 +:203A8000E10083FF22C08091E20083FF1EC08091E100877F8093E10082E08EBB10927D01D7 +:203AA0008091E1008E7F8093E1008091E2008E7F8093E2008091E20080618093E200A1DED6 +:203AC00080E060E042E28CDED3D08091E10082FF0AC08091E20082FF06C08091E1008B7FA2 +:203AE0008093E100C5D0FF91EF91BF91AF919F918F917F916F915F914F913F912F910F903E +:203B00000FBE0F901F9018951F93DF93CF9300D0CDB7DEB7EFE7F1E08091F100819381E050 +:203B2000E738F807C9F790917F0180918001853011F1863040F48130B9F0813070F08330B5 +:203B400009F081C011C0883009F453C0893009F462C0863009F077C02DC0903809F474C0EE +:203B6000923809F070C070C0992309F46DC0923009F069C069C0992309F065C01091810132 +:203B80008091E800877F8093E80049DE04C08EB3882309F459C08091E80080FFF8CF812F4F +:203BA0008F7711F492E001C093E09EBB80688093E3004AC09058923008F045C080918101D9 +:203BC0009091820160918301AE014F5F5F4FDFDDBC010097C9F18091E800877F8093E800FD +:203BE00089819A813BDE8091E8008B7F8093E8002BC0903841F58091E800877F8093E800A6 +:203C000080917D018093F1008091E8008E7F8093E80005DE19C09923B1F49091810192308E +:203C200098F48091E800877F8093E80090937D01F6DD80917D01882311F483E001C084E0C3 +:203C40008EBB16D001C040DB8091E80083FF0AC08091EB0080628093EB008091E800877F39 +:203C60008093E8000F900F90CF91DF911F91089508958EB3882329F08091E80083FF01C010 +:203C800043CF0895F999FECF92BD81BDF89A992780B50895262FF999FECF1FBA92BD81BD4B +:203CA00020BD0FB6F894FA9AF99A0FBE01960895F894FFCF01021E948920DCFB12011001FB +:203CC00000000020EB03EF2F00000001000109021B0001010080320904000000FE010200CE +:203CE0000921030000000C0001040309042C03410054006D0065006700610031003600555C +:1C3D00000032002000440046005500200020002000200020002000200000000096 +:00000001FF diff --git a/hardware/arduino/avr/firmwares/atmegaxxu2/Genuino-COMBINED-dfu-usbserial-atmega16u2-Uno-R3.hex b/hardware/arduino/avr/firmwares/atmegaxxu2/Genuino-COMBINED-dfu-usbserial-atmega16u2-Uno-R3.hex new file mode 100644 index 00000000000..a6fe19413be --- /dev/null +++ b/hardware/arduino/avr/firmwares/atmegaxxu2/Genuino-COMBINED-dfu-usbserial-atmega16u2-Uno-R3.hex @@ -0,0 +1,490 @@ +:2000000098C00000B1C00000AFC00000ADC00000ABC00000A9C00000A7C00000A5C000009B +:20002000A3C00000A1C000009FC00000F6C300009BC4000099C0000097C0000095C0000080 +:2000400093C0000091C000008FC000008DC000008BC0000089C0000087C00000C0C1000004 +:2000600083C0000081C000007FC000007DC000007BC00000100532051C0632051C06740505 +:2000800091051C06E405F6051803470065006E00750069006E006F00200055006E006F0082 +:2000A00000003A03410072006400750069006E006F0020004C004C00430020002800770077 +:2000C000770077002E00610072006400750069006E006F002E0063006300290000000403EE +:2000E000090409023E00020100C03209040000010202010005240001100424020605240609 +:200100000001070582030800FF09040100020A000000070504024000010705830240000107 +:2001200012011001020000084123430201000102DC0111241FBECFEFD2E0DEBFCDBF11E06B +:20014000A0E0B1E0E2E4FFE002C005900D92A631B107D9F712E0A6E1B1E001C01D92AF3239 +:20016000B107E1F764D0EBC64BCFFC01E058FF4FA081B1816C93A081B1819D012F5F3F4F0E +:20018000318320832E173F0721F412969C938E9311972FB7F894FC01EC57FF4F80818F5FD9 +:2001A00080832FBF0895DC01AE57BF4FED91FC91119741911196FC93EE939C0120583F4FE2 +:2001C000E217F30711F48D939C932FB7F894FC01EC57FF4F9081915090832FBF842F089595 +:2001E00084B7877F84BF88E10FB6F89480936000109260000FBE87E690E09093CD0080939F +:20020000CC0086E08093CA001092C80088E18093C900539A5A9A8AB180638AB98BB18063BF +:200220008BB9F0D284E085BD5F9A579A0895D8DF2FB7F8948EE991E090931F0280931E0203 +:2002400090932102809320022FBF2FB7F89489E191E090939A018093990190939C018093AA +:200260009B012FBF7894D3E09FB7F894809122029FBF803849F080E091E00ED697FD04C0C2 +:20028000682F8EE991E071DF8FB7F894C0919D018FBFA89902C0C13658F1A89A80919D014C +:2002A000882319F05D98D0931601CC2349F089E191E079DF682F80E091E093D5C150F5CF1B +:2002C00080911601882341F080911601815080931601811101C05D9A80911701882341F0A8 +:2002E00080911701815080931701811101C05C9A9FB7F894809122029FBF882361F08EE9A8 +:2003000091E051DF9091C80095FFFCCF8093CE005C98D093170180E091E0B0D59AD4A4CF6D +:2003200080E091E011C580E091E0A5C41F93CF93DF93EC018C89813031F0823011F010E0DF +:2003400003C010E201C010E38B89823009F418608D89873031F0883031F0863029F41260ED +:2003600003C0146001C016601092C9001092C8001092CA002F85388949895A89211581EEFF +:2003800038074105510571F0CA01B901969587957795679560587B47814E9F4FA8D5215028 +:2003A000310902C020E130E03093CD002093CC001093CA008F859889A989BA898115914E95 +:2003C000A105B10511F480E001C082E08093C80088E98093C900DF91CF911F9108951F9243 +:2003E0000F920FB60F9211242F933F934F935F936F937F938F939F93AF93BF93EF93FF9349 +:200400006091CE008EB3843019F489E191E0ADDEFF91EF91BF91AF919F918F917F916F91B5 +:200420005F914F913F912F910F900FBE0F901F901895FC01858580FF02C05F9808955F9A20 +:200440000895292F33272230310559F02330310569F021303105F9F482E190E020E231E040 +:200460001EC08EE390E022EE30E019C099278130910541F08230910541F0892B61F4EEED2F +:20048000F0E005C0E2EAF0E002C0E8E8F0E0849190E09F0104C080E090E020E030E0FA0105 +:2004A00031832083089528E030E040E02817390720F44F5F220F331FF9CF842F8295807FBB +:2004C00008958093E900EBEEF0E0808181608083EDEEF0E010826093EC0040838091EE0017 +:2004E000881F8827881F08951092F40080E08093E9001092F0001092E8001092ED009091A4 +:20050000EB009E7F9093EB008F5F853081F708958091270287FD05C08091E80080FF0DC045 +:2005200010C08091E80082FD04C08EB38111F9CF08958091E8008B7707C08EB38111ECCF27 +:2005400008958091E8008E778093E800089585E69091EC0090FF05C09091E80090FF05C03F +:200560001BC09091E80092FD17C09EB39923B1F09EB39530A9F09091EB0095FD13C0909142 +:20058000E10092FFE5CF9091E1009B7F9093E1008150F1F684E0089580E0089582E0089560 +:2005A00083E0089581E0089520912D0230912E022617370748F06115710539F42091E80007 +:2005C0002E772093E80001C0B90130E06115710591F12091E80023FD38C02091E80022FF77 +:2005E00006C08091E80082FF29C080E008952EB3222369F12EB3253061F12091E80020FF15 +:20060000E5CF2091F200FC01CF016115710549F0283038F481918093F100615071092F5F3E +:20062000F3CF31E0283009F030E02091E8002E772093E800CBCF3111CCCFD3CF8EB38823A8 +:2006400031F08EB3853069F604C081E0089582E0089583E0089520912D0230912E02261755 +:20066000370748F06115710539F42091E8002E772093E80001C0B90130E06115710599F111 +:200680002091E80023FD39C02091E80022FF06C08091E80082FF2AC080E008952EB32223A1 +:2006A00071F12EB3253069F12091E80020FFE5CF2091F200FC01CF016115710551F02830E7 +:2006C00040F484918093F100615071092F5F3196F2CF31E0283009F030E02091E8002E77DC +:2006E0002093E800CACF3111CBCFD2CF8EB3882331F08EB3853061F604C081E0089582E0CB +:20070000089583E008956115710529F42091E8002B772093E8006115710549F12091E8009E +:2007200023FD2AC02EB3222359F12EB3253051F12091E80022FFF2CFFC018091F2008823A1 +:2007400071F09F012F5F3F4FC9014091F10040836150710961157105C9F2F901EECFCF01D4 +:20076000D5CF8EB3882361F08EB3853059F08091E80080FFF6CF02C081E0089580E008955F +:2007800082E0089583E0089542D044D01EBA10922502109224021092230284E089BD89B51C +:2007A000826089BD09B400FEFDCF8091D800982F9F779093D80080688093D8008091630082 +:2007C0008E7F809363008091D8008F7D8093D8008091E0008E7F8093E0008091E1008E7FC6 +:2007E0008093E1008091E20081608093E2008091E100877F8093E1008091E2008860809362 +:20080000E2000895C1DF81E08093260208951092E20008951092E10008951F920F920FB628 +:200820000F9211242F933F934F935F936F937F938F939F93AF93BF93EF93FF938091E10078 +:2008400080FF1BC08091E20080FF17C08091E1008E7F8093E1008091E2008E7F8093E2000D +:200860008091E20080618093E2008091D80080628093D80019BC1EBAEBD18091E10084FF1B +:2008800029C08091E20084FF25C084E089BD89B5826089BD09B400FEFDCF8091D8008F7D88 +:2008A0008093D8008091E1008F7E8093E1008091E2008F7E8093E2008091E200816080937E +:2008C000E20080912502882311F084E001C081E08EBBBED18091E10083FF27C08091E200A6 +:2008E00083FF23C08091E100877F8093E10082E08EBB109225028091E1008E7F8093E10040 +:200900008091E2008E7F8093E2008091E20080618093E200E9DD42E060E080E0D2DD8091D1 +:20092000F00088608093F00093D18091E10082FF0AC08091E20082FF06C08091E1008B7F05 +:200940008093E10085D1FF91EF91BF91AF919F918F917F916F915F914F913F912F910F904E +:200960000FBE0F901F9018951F920F920FB60F9211242F933F934F935F936F937F938F9324 +:200980009F93AF93BF93CF93EF93FF93E9EEF0E0C081C7701082E0EFF0E08081877F8083C1 +:2009A00078941CD0F894E9EEF0E01082A0EFB0E08C9188608C93C083FF91EF91CF91BF9134 +:2009C000AF919F918F917F916F915F914F913F912F910F900FBE0F901F9018951F93CF939C +:2009E000DF93CDB7DEB7AA970FB6F894DEBF0FBECDBFE7E2F2E08091F100819322E0EF3210 +:200A0000F207C9F72091270230912802832F90E08A30910508F010C1FC01E65CFF4F89C245 +:200A2000203881F0223809F007C180912B0287708093E9008091EB0085FB882780F910925B +:200A4000E90006C08091230290912402911182609091E800977F9093E8008093F100109216 +:200A6000F100BDC0822F8D7F09F0E6C0222319F0223061F0D2C080912902813009F0CDC0B6 +:200A8000333009F080E08093240228C080912902811124C020912B02277009F4BEC0209324 +:200AA000E9008091EB0080FFB8C08091EB00333011F4806211C080618093EB0081E090E093 +:200AC000022E01C0880F0A94EAF78093EA001092EA008091EB0088608093EB001092E90019 +:200AE0008091E800877F7EC02111A6C0109129028091E800877F8093E8000ADD8091E8007B +:200B000080FD04C08EB38111F9CF87C0812F8F7711F093E001C092E09EBB80688093E3001E +:200B20007CC02058223008F087C08091290290912A028C3D23E0920781F583E08A838AE230 +:200B400089834FB7F894DE01139620E03EE051E2E32FF0E050935700E49120FF03C0E29534 +:200B6000EF703F5FEF7090E39E0F9A3310F0E95C01C0E92F8E2F90E08D939D932F5F2431AE +:200B800039F74FBF8091E800877F8093E8006AE270E0CE01019608DD11C0AE014F5F5F4F5A +:200BA00060912B024EDC0097C1F12091E800277F2093E800BC0189819A814DDD8091E800C5 +:200BC0008B778093E80029C02038B1F58091E800877F8093E800809125028093F1008091EA +:200BE000E8008E778093E80093DC17C0211124C090912902923088F48091E800877F809315 +:200C0000E8009093250284DC80912502882311F084E001C083E08EBB83DB8091E80083FFB4 +:200C20000DC08091EB0080628093EB008091E800877F8093E80002C076DBEFCFAA960FB63B +:200C4000F894DEBF0FBECDBFDF91CF911F9108950895CF938EB3882359F0C091E900C77050 +:200C60001092E9008091E80083FDB8DEC093E900CF9108950895CF93DF93EC018091E8004A +:200C800083FF5FC0888190E020912B0230912C022817390709F055C080912802813249F0B9 +:200CA00018F48032C9F04DC0823261F18332C9F148C080912702813A09F043C08091E80049 +:200CC000877F8093E80067E070E0CE010F966CDC8091E8008B7713C080912702813289F587 +:200CE0008091E800877F8093E80067E070E0CE010F9609DDCE011ADB8091E8008E77809334 +:200D0000E8001FC0809127028132D9F48091E800877F8093E800809129028D87CE0189DBD5 +:200D20000DC080912702813261F48091E800877F8093E80060912902CE019CDFDF91CF9174 +:200D4000E7CBDF91CF9108950F931F93CF93DF93EC01FC013D9689E0DF011D928A95E9F798 +:200D60002A813B818C81882311F014E001C010E00981C90198DB412F482B426061E8802F6A +:200D8000A0DB882341F12E813F818885882311F014E001C010E00D81C90185DB412F482B93 +:200DA000426060E8802F8DDB8823A9F02A853B858C85882311F014E001C010E0C985C90105 +:200DC00072DB412F482B426061EC8C2FDF91CF911F910F9176CB80E0DF91CF911F910F9158 +:200DE0000895CF93C62F2EB32430E9F4FC014785508961897289452B462B472BA1F0818180 +:200E00008093E9008091E80085FF04C0C093F10080E00AC08091E8008E778093E80097DBBC +:200E20008823A1F301C082E0CF9108952EB3243019F5FC014785508961897289452B462BA8 +:200E4000472BD1F081818093E9008091F200882389F09091E8008091E8008E778093E80038 +:200E600095FD08C074DB811108C08091E8008E778093E80080E0089582E008952EB3243045 +:200E800051F4FC014785508961897289452B462B472B09F0CBCF08952EB3243019F08FEF47 +:200EA0009FEF0895FC014785508961897289452B462B472BA1F385818093E9008091E8009E +:200EC00082FFEDCF8091F200882321F02091F10030E002C02FEF3FEF8091F200811105C0FC +:200EE0008091E8008B778093E800C9010895A1E21A2EAA1BBB1BFD010DC0AA1FBB1FEE1FB4 +:200F0000FF1FA217B307E407F50720F0A21BB30BE40BF50B661F771F881F991F1A9469F757 +:200F200060957095809590959B01AC01BD01CF010895EE0FFF1F0590F491E02D0994F8949E +:200F4000FFCF00034000000440000002080000000000000000000000FFFFFFFFFFFFFFFF3A +:200F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF91 +:200F800020F0A21BB30BE40BF50B661F771F881F991F1A9469F760957095809590959B017F +:200FA000AC01BD01CF010895F894FFCF00034000000440000002080000000000000000006E +:200FC0000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F +:200FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:20100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +:20102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0 +:20104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0 +:20106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90 +:20108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70 +:2010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50 +:2010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30 +:2010E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10 +:20110000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF +:20112000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF +:20114000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF +:20116000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F +:20118000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F +:2011A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F +:2011C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F +:2011E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +:20120000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE +:20122000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE +:20124000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE +:20126000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E +:20128000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E +:2012A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E +:2012C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E +:2012E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:20130000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:20132000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:20134000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:20136000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:20138000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:2013A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:2013C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:2013E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:20140000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +:20142000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC +:20144000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:20146000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:20148000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:2014A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:2014C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:2014E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:20150000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB +:20152000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCB +:20154000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB +:20156000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B +:20158000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B +:2015A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B +:2015C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B +:2015E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B +:20160000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA +:20162000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA +:20164000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAA +:20166000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A +:20168000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A +:2016A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A +:2016C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A +:2016E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A +:20170000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 +:20172000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9 +:20174000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9 +:20176000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89 +:20178000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF69 +:2017A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49 +:2017C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29 +:2017E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09 +:20180000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:20182000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8 +:20184000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8 +:20186000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF88 +:20188000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68 +:2018A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48 +:2018C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28 +:2018E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08 +:20190000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7 +:20192000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7 +:20194000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7 +:20196000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87 +:20198000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67 +:2019A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47 +:2019C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27 +:2019E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07 +:201A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6 +:201A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6 +:201A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6 +:201A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86 +:201A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66 +:201AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46 +:201AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26 +:201AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06 +:201B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5 +:201B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5 +:201B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 +:201B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85 +:201B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF65 +:201BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF45 +:201BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25 +:201BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05 +:201C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4 +:201C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4 +:201C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4 +:201C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84 +:201C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64 +:201CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF44 +:201CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF24 +:201CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04 +:201D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3 +:201D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3 +:201D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3 +:201D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83 +:201D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63 +:201DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43 +:201DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23 +:201DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03 +:201E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2 +:201E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2 +:201E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2 +:201E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82 +:201E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62 +:201EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF42 +:201EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22 +:201EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02 +:201F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 +:201F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1 +:201F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1 +:201F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81 +:201F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61 +:201FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF41 +:201FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21 +:201FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01 +:20200000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 +:20202000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 +:20204000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 +:20206000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 +:20208000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 +:2020A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:2020C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:2020E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +:20210000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:20212000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:20214000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:20216000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:20218000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:2021A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:2021C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:2021E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:20220000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:20222000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:20224000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:20226000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:20228000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:2022A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:2022C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:2022E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:20230000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:20232000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:20234000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:20236000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:20238000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:2023A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:2023C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:2023E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:20240000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC +:20242000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:20244000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:20246000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:20248000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:2024A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:2024C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:2024E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +:20250000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB +:20252000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBB +:20254000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9B +:20256000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B +:20258000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B +:2025A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B +:2025C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B +:2025E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB +:20260000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDA +:20262000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBA +:20264000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A +:20266000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A +:20268000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A +:2026A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A +:2026C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A +:2026E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA +:20270000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9 +:20272000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9 +:20274000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 +:20276000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79 +:20278000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF59 +:2027A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39 +:2027C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19 +:2027E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 +:20280000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8 +:20282000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8 +:20284000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF98 +:20286000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF78 +:20288000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF58 +:2028A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38 +:2028C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18 +:2028E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 +:20290000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7 +:20292000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7 +:20294000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97 +:20296000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 +:20298000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57 +:2029A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF37 +:2029C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17 +:2029E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 +:202A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6 +:202A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6 +:202A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96 +:202A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76 +:202A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56 +:202AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF36 +:202AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF16 +:202AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6 +:202B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5 +:202B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5 +:202B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF95 +:202B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75 +:202B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55 +:202BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35 +:202BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF15 +:202BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 +:202C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4 +:202C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4 +:202C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94 +:202C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74 +:202C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF54 +:202CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF34 +:202CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF14 +:202CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4 +:202D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3 +:202D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3 +:202D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF93 +:202D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF73 +:202D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF53 +:202DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF33 +:202DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF13 +:202DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3 +:202E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2 +:202E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2 +:202E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF92 +:202E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 +:202E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF52 +:202EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF32 +:202EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF12 +:202EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2 +:202F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1 +:202F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1 +:202F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF91 +:202F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71 +:202F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF51 +:202FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF31 +:202FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:202FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 +:203000004BC0000064C0000062C0000060C000005EC000005CC000005AC0000058C00000D3 +:2030200056C0000054C0000052C00000CBC400004EC000004CC000004AC0000048C0000099 +:2030400046C0000044C0000042C0000040C000003EC000003CC000003AC0000038C0000078 +:2030600036C0000034C0000032C0000030C000002EC000002CC000002AC0000028C00000D8 +:2030800026C0000024C0000022C0000020C000001EC000001CC0000011241FBECFEFD2E068 +:2030A000DEBFCDBF11E0A0E0B1E0E4EBFCE302C005900D92A836B107D9F711E0A8E6B1E0CB +:2030C00001C01D92A738B107E1F74FD3F1C598CF982F15C08091F200882371F48091E8002A +:2030E0008B7F8093E80003C08EB3882351F08091E80082FFF9CF02C08091F1009150992338 +:2031000049F708952091760130917501809174019091730180936D0190936E01C901809368 +:203120006F0190937001089580917101843009F45AC0853030F4813059F0833009F0C3C09E +:203140001FC0853009F4A0C0863009F0BCC0AFC080917201823008F0B6C0D4DF8091720109 +:20316000882361F480916D0190916E0123E0FC0120935700E89507B600FCFDCF85E008C007 +:2031800080917201882311F0823029F4BBDF89E0809301010895813009F095C020E030E06C +:2031A00040E050E0F90184918F3F81F0CA01AA27BB2780936C0130936E0120936D018AE0B6 +:2031C0008093010185E08093690108952F5F3F4F4F4F5F4F2030F0E33F07F0E04F07F0E094 +:2031E0005F0701F7089580917201833051F581E0809368018091770190917801892B71F042 +:2032000080917301813009F05EC0809176019091750190936B0180936A0108958091730113 +:20322000882361F42CE088E190E00FB6F894A895809360000FBE2093600008951092000188 +:203240000895882309F03FC0809173018F3F09F03AC0E0E0F0E093E085E090935700E89589 +:2032600007B600FCFDCF80935700E89507B600FCFDCFE058FF4F20E3E030F20771F781E101 +:2032800080935700E8950895E091730180917201882321F4F0E0EB5FFE4F05C0813099F417 +:2032A000F0E0EE52FF4F808180937C01089580917201833041F480917301882321F48091C0 +:2032C000740180936C0108952F923F924F925F926F927F929F92AF92BF92CF92DF92EF92D0 +:2032E000FF920F931F93CF93DF938091850190918601909378018093770180917901882379 +:2033000051F08091790181508093790180917901882309F45D9A80917A01882351F08091D0 +:203320007A01815080937A0180917A01882309F45C9A80918001833009F4B2C1843030F4FC +:20334000813071F0823009F0E3C111C1853009F4C5C1853008F4BAC1863009F0D9C1CDC1FF +:203360005C9883E080937A018091E800877F8093E80080916801882329F0D6DE5D9A5C9A8F +:203380001092680120917701309178012115310529F42AC08EB3882309F4BAC18091E800EF +:2033A00082FFF8CF8091F10080937101215030403093780120937701E2E7F1E00CC080917F +:2033C000F10081932150304081E0E737F80719F43183208308C08091F200882381F7309374 +:2033E000780120937701A0DE80910101853009F0BAC08091770190917801892B21F482E022 +:2034000080930101B0C08AE163DE80916D018F715FDEC0916F01D091700120916D0130914C +:203420006E0121968E01021B130B219780917201882309F093C0180136942794C901A091D0 +:203440006C01B0E09C01AD0162E0E62EF12C012D112DE20EF31E041F151F59016A0190E0B8 +:2034600099249394B5E0A3E048C08091F200882371F48091E8008B7F8093E80004C08EB332 +:20348000882309F445C18091E80082FFF8CF0894210831088091F100682F8091F100782FFD +:2034A000F5010B0190925700E89511249F5F903419F021143104A1F4F901B0935700E89504 +:2034C00007B600FCFDCF2114310451F0F701A0935700E89507B600FCFDCFA801970190E087 +:2034E00042E0442E512C612C712CE40CF51C061D171DA40CB51CC61CD71C2114310409F080 +:20350000B4CFD0936E01C0936D0181E180935700E89527C08091F200882371F48091E80059 +:203520008B7F8093E80004C08EB3882309F4F0C08091E80082FFF8CF6091F10080916D0187 +:2035400090916E01A7D380916D0190916E01019690936E0180936D010150104001151105DB +:20356000C9F680E1B5DD8091E8008B7FC3C08091E800877F8093E8005D9883E08093790134 +:2035800004C08EB3882309F4C3C08091E80080FFF8CF80910101893091F08A3069F4809147 +:2035A0007201813049F480916D0190916E018093F1009093F1009BC080917C0196C0609153 +:2035C0006F017091700120916D0130916E016F5F7F4F7B01E21AF30A6150704080917201C4 +:2035E000882389F5870116950795C901A0916C01B0E09C01AD011FC08091F200803271F497 +:203600008091E8008E7F8093E80004C08EB3882309F47EC08091E80080FFF8CFF90185916F +:2036200094918093F1009093F100015010402E5F3F4F4F4F5F4F01151105F1F670936E01C0 +:2036400060936D0129C0823039F523C08091F200803271F48091E8008E7F8093E80004C07E +:203660008EB3882309F454C08091E80080FFF8CF00916D0110916E01C80104D38093F1005B +:203680000F5F1F4F10936E0100936D010894E108F108E114F104D1F682E08093010127C0AE +:2036A0008091E800877F8093E800809169018093F1001092F1001092F1001092F1008091C7 +:2036C00001018093F1001092F10011C08091E800877F8093E8001092690119C08091E800A8 +:2036E000877F8093E800809101018093F1008091E8008E7F8093E8000AC08091E800877FE8 +:203700008093E8005D9A5C9A82E08093010187D0DF91CF911F910F91FF90EF90DF90CF90F7 +:20372000BF90AF909F907F906F905F904F903F902F9008952BD181E085BF15BE089584B779 +:20374000877F84BF88E10FB6F89480936000109260000FBE81E085BF82E085BF8AB18063BB +:203760008AB98BB180638BB90CC1E9DF789401C080D2809100018823D9F78091680188233D +:20378000B9F7D8DFE0916A01F0916B010995FA01923071F0933089F0913029F488E091E04A +:2037A00022E130E019C080E090E020E030E014C08AE191E02BE130E00FC0882339F48091B9 +:2037C0003501282F30E085E391E006C080913901282F30E089E391E091838083C9010895A0 +:2037E0008091EB0081608093EB001092ED006093EC004093ED008091EE00881F8827881FC4 +:2038000008951092F4001092F0001092E8001092ED00EBEEF0E080818E7F80830895809162 +:203820007F0188238CF403C08EB38823B1F08091E80082FFF9CF8091E8008B7F8093E8004D +:2038400008958EB3882349F08091E80080FFF9CF8091E8008E7F8093E80008959C0140915A +:203860008501509186014617570718F4F90120E038C06115710511F0AB01F8CF8091E80048 +:203880008E7F8093E80040E050E0F0CF8091E80083FF02C081E008958091E80082FD2DC071 +:2038A0008EB3882381F18EB3853079F18091E80080FF17C09091F20006C081918093F1000C +:2038C000415050409F5F4115510511F09032A8F320E0903209F421E08091E8008E7F8093E6 +:2038E000E8004115510591F6222381F606C08EB3882349F08EB3853041F08091E80082FF65 +:20390000F6CF80E0089582E0089583E0089554D056D01EBA10927D0184E089BD89B58260DA +:2039200089BD09B400FEFDCF8091D800982F9F779093D80080688093D800809163008E7FA5 +:20394000809363008091D8008F7D8093D8008091E0008E7F8093E0008091E1008E7F80930E +:20396000E1008091E20081608093E2008091E100877F8093E1008091E20088608093E200E1 +:203980000895C5DF81E080937E010895C0DFE0EEF0E0808181608083E8EDF0E080818F7788 +:2039A00080830AD00CD019BCE3E6F0E080818160808310927E0108951092E200089510927A +:2039C000E10008951F920F920FB60F9211242F933F934F935F936F937F938F939F93AF936A +:2039E000BF93EF93FF938091E10080FF1BC08091E20080FF17C08091E1008E7F8093E100D9 +:203A00008091E2008E7F8093E2008091E20080618093E2008091D80080628093D80019BC5D +:203A20001EBA26D18091E10084FF29C08091E20084FF25C084E089BD89B5826089BD09B431 +:203A400000FEFDCF8091D8008F7D8093D8008091E1008F7E8093E1008091E2008F7E8093B6 +:203A6000E2008091E20081608093E20080917D01882311F481E001C084E08EBBF9D08091B3 +:203A8000E10083FF22C08091E20083FF1EC08091E100877F8093E10082E08EBB10927D01D7 +:203AA0008091E1008E7F8093E1008091E2008E7F8093E2008091E20080618093E200A1DED6 +:203AC00080E060E042E28CDED3D08091E10082FF0AC08091E20082FF06C08091E1008B7FA2 +:203AE0008093E100C5D0FF91EF91BF91AF919F918F917F916F915F914F913F912F910F903E +:203B00000FBE0F901F9018951F93DF93CF9300D0CDB7DEB7EFE7F1E08091F100819381E050 +:203B2000E738F807C9F790917F0180918001853011F1863040F48130B9F0813070F08330B5 +:203B400009F081C011C0883009F453C0893009F462C0863009F077C02DC0903809F474C0EE +:203B6000923809F070C070C0992309F46DC0923009F069C069C0992309F065C01091810132 +:203B80008091E800877F8093E80049DE04C08EB3882309F459C08091E80080FFF8CF812F4F +:203BA0008F7711F492E001C093E09EBB80688093E3004AC09058923008F045C080918101D9 +:203BC0009091820160918301AE014F5F5F4FDFDDBC010097C9F18091E800877F8093E800FD +:203BE00089819A813BDE8091E8008B7F8093E8002BC0903841F58091E800877F8093E800A6 +:203C000080917D018093F1008091E8008E7F8093E80005DE19C09923B1F49091810192308E +:203C200098F48091E800877F8093E80090937D01F6DD80917D01882311F483E001C084E0C3 +:203C40008EBB16D001C040DB8091E80083FF0AC08091EB0080628093EB008091E800877F39 +:203C60008093E8000F900F90CF91DF911F91089508958EB3882329F08091E80083FF01C010 +:203C800043CF0895F999FECF92BD81BDF89A992780B50895262FF999FECF1FBA92BD81BD4B +:203CA00020BD0FB6F894FA9AF99A0FBE01960895F894FFCF01021E948920DCFB12011001FB +:203CC00000000020EB03EF2F00000001000109021B0001010080320904000000FE010200CE +:203CE0000921030000000C0001040309042C03410054006D0065006700610031003600555C +:1C3D00000032002000440046005500200020002000200020002000200000000096 +:00000001FF diff --git a/hardware/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Genuino-usbserial-atmega16u2-Mega2560-R3.hex b/hardware/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Genuino-usbserial-atmega16u2-Mega2560-R3.hex new file mode 100644 index 00000000000..5393cf61305 --- /dev/null +++ b/hardware/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Genuino-usbserial-atmega16u2-Mega2560-R3.hex @@ -0,0 +1,248 @@ +:100000009EC00000B7C00000B5C00000B3C0000033 +:10001000B1C00000AFC00000ADC00000ABC0000028 +:10002000A9C00000A7C00000A5C00000FCC30000DC +:10003000A1C400009FC000009DC000009BC0000044 +:1000400099C0000097C0000095C0000093C0000058 +:1000500091C000008FC000008DC00000C6C100002C +:1000600089C0000087C0000085C0000083C0000078 +:1000700081C00000160538052206380522067A05DB +:1000800097052206EA05FC052403470065006E007B +:10009000750069006E006F0020004D00650067006C +:1000A00061002000320035003600300000003A03C5 +:1000B000410072006400750069006E006F0020004E +:1000C0004C004C00430020002800770077007700A8 +:1000D0002E00610072006400750069006E006F0000 +:1000E0002E006300630029000000040309040902D4 +:1000F0003E00020100C032090400000102020100BA +:100100000524000110042402060524060001070549 +:1001100082030800FF09040100020A00000007052D +:100120000402400001070583024000011201100192 +:10013000020000084123420201000102DC011124F7 +:100140001FBECFEFD2E0DEBFCDBF11E0A0E0B1E037 +:10015000EEE4FFE002C005900D92A631B107D9F799 +:1001600012E0A6E1B1E001C01D92AF32B107E1F7A4 +:1001700064D0EBC645CFFC01E058FF4FA081B181B0 +:100180006C93A081B1819D012F5F3F4F318320830C +:100190002E173F0721F412969C938E9311972FB739 +:1001A000F894FC01EC57FF4F80818F5F80832FBF55 +:1001B0000895DC01AE57BF4FED91FC91119741912D +:1001C0001196FC93EE939C0120583F4FE217F307E2 +:1001D00011F48D939C932FB7F894FC01EC57FF4FCB +:1001E0009081915090832FBF842F089584B7877F8B +:1001F00084BF88E10FB6F89480936000109260008D +:100200000FBE87E690E09093CD008093CC0086E00F +:100210008093CA001092C80088E18093C900539A65 +:100220005A9A8AB180638AB98BB180638BB9F0D254 +:1002300084E085BD5F9A579A0895D8DF2FB7F89468 +:100240008EE991E090931F0280931E029093210209 +:10025000809320022FBF2FB7F89489E191E090930B +:100260009A018093990190939C0180939B012FBFE9 +:100270007894D3E09FB7F894809122029FBF803892 +:1002800049F080E091E00ED697FD04C0682F8EE91A +:1002900091E071DF8FB7F894C0919D018FBFA8994D +:1002A00002C0C13658F1A89A80919D01882319F0A7 +:1002B0005D98D0931601CC2349F089E191E079DF74 +:1002C000682F80E091E093D5C150F5CF8091160161 +:1002D000882341F08091160181508093160181118D +:1002E00001C05D9A80911701882341F08091170128 +:1002F000815080931701811101C05C9A9FB7F894D7 +:10030000809122029FBF882361F08EE991E051DF46 +:100310009091C80095FFFCCF8093CE005C98D0935D +:10032000170180E091E0B0D59AD4A4CF80E091E0AD +:1003300011C580E091E0A5C41F93CF93DF93EC013A +:100340008C89813031F0823011F010E003C010E26E +:1003500001C010E38B89823009F418608D898730E1 +:1003600031F0883031F0863029F4126003C0146017 +:1003700001C016601092C9001092C8001092CA0005 +:100380002F85388949895A89211581EE3807410519 +:10039000510571F0CA01B9019695879577956795D2 +:1003A00060587B47814E9F4FA8D52150310902C02C +:1003B00020E130E03093CD002093CC001093CA00B0 +:1003C0008F859889A989BA898115914EA105B105B2 +:1003D00011F480E001C082E08093C80088E9809336 +:1003E000C900DF91CF911F9108951F920F920FB610 +:1003F0000F9211242F933F934F935F936F937F93AB +:100400008F939F93AF93BF93EF93FF936091CE0031 +:100410008EB3843019F489E191E0ADDEFF91EF9164 +:10042000BF91AF919F918F917F916F915F914F910C +:100430003F912F910F900FBE0F901F901895FC01C8 +:10044000858580FF02C05F9808955F9A0895292FDF +:1004500033272230310559F02330310569F021303E +:100460003105F9F482E190E02CE231E01EC08EE328 +:1004700090E02EEE30E019C099278130910541F0CF +:100480008230910541F0892B61F4EAEEF0E005C07D +:10049000EEEAF0E002C0E8E8F0E0849190E09F012D +:1004A00004C080E090E020E030E0FA013183208356 +:1004B000089528E030E040E02817390720F44F5F26 +:1004C000220F331FF9CF842F8295807F0895809368 +:1004D000E900EBEEF0E0808181608083EDEEF0E0FA +:1004E00010826093EC0040838091EE00881F882783 +:1004F000881F08951092F40080E08093E900109224 +:10050000F0001092E8001092ED009091EB009E7FB9 +:100510009093EB008F5F853081F7089580912702DB +:1005200087FD05C08091E80080FF0DC010C080915C +:10053000E80082FD04C08EB38111F9CF0895809147 +:10054000E8008B7707C08EB38111ECCF08958091BE +:10055000E8008E778093E800089585E69091EC009E +:1005600090FF05C09091E80090FF05C01BC09091DE +:10057000E80092FD17C09EB39923B1F09EB3953069 +:10058000A9F09091EB0095FD13C09091E10092FFCE +:10059000E5CF9091E1009B7F9093E1008150F1F6CF +:1005A00084E0089580E0089582E0089583E008954E +:1005B00081E0089520912D0230912E0226173707F1 +:1005C00048F06115710539F42091E8002E772093E9 +:1005D000E80001C0B90130E06115710591F1209189 +:1005E000E80023FD38C02091E80022FF06C080917A +:1005F000E80082FF29C080E008952EB3222369F12C +:100600002EB3253061F12091E80020FFE5CF209145 +:10061000F200FC01CF016115710549F0283038F472 +:1006200081918093F100615071092F5FF3CF31E028 +:10063000283009F030E02091E8002E772093E80080 +:10064000CBCF3111CCCFD3CF8EB3882331F08EB343 +:10065000853069F604C081E0089582E0089583E062 +:10066000089520912D0230912E022617370748F069 +:100670006115710539F42091E8002E772093E80088 +:1006800001C0B90130E06115710599F12091E800D0 +:1006900023FD39C02091E80022FF06C08091E800C8 +:1006A00082FF2AC080E008952EB3222371F12EB379 +:1006B000253069F12091E80020FFE5CF2091F2007C +:1006C000FC01CF016115710551F0283040F484918F +:1006D0008093F100615071092F5F3196F2CF31E0C4 +:1006E000283009F030E02091E8002E772093E800D0 +:1006F000CACF3111CBCFD2CF8EB3882331F08EB396 +:10070000853061F604C081E0089582E0089583E0B9 +:1007100008956115710529F42091E8002B77209345 +:10072000E8006115710549F12091E80023FD2AC018 +:100730002EB3222359F12EB3253051F12091E80038 +:1007400022FFF2CFFC018091F200882371F09F011B +:100750002F5F3F4FC9014091F10040836150710903 +:1007600061157105C9F2F901EECFCF01D5CF8EB376 +:10077000882361F08EB3853059F08091E80080FFC6 +:10078000F6CF02C081E0089580E0089582E00895E8 +:1007900083E0089542D044D01EBA109225021092F0 +:1007A00024021092230284E089BD89B5826089BD4C +:1007B00009B400FEFDCF8091D800982F9F779093C9 +:1007C000D80080688093D800809163008E7F8093EA +:1007D00063008091D8008F7D8093D8008091E000E5 +:1007E0008E7F8093E0008091E1008E7F8093E10016 +:1007F0008091E20081608093E2008091E100877F38 +:100800008093E1008091E20088608093E200089587 +:10081000C1DF81E08093260208951092E2000895DE +:100820001092E10008951F920F920FB60F921124BB +:100830002F933F934F935F936F937F938F939F93E8 +:10084000AF93BF93EF93FF938091E10080FF1BC0B4 +:100850008091E20080FF17C08091E1008E7F80933D +:10086000E1008091E2008E7F8093E2008091E200BF +:1008700080618093E2008091D80080628093D800EC +:1008800019BC1EBAEBD18091E10084FF29C0809190 +:10089000E20084FF25C084E089BD89B5826089BDFE +:1008A00009B400FEFDCF8091D8008F7D8093D800E1 +:1008B0008091E1008F7E8093E1008091E2008F7E45 +:1008C0008093E2008091E20081608093E200809159 +:1008D0002502882311F084E001C081E08EBBBED1E7 +:1008E0008091E10083FF27C08091E20083FF23C055 +:1008F0008091E100877F8093E10082E08EBB1092BF +:1009000025028091E1008E7F8093E1008091E200DA +:100910008E7F8093E2008091E20080618093E2000C +:10092000E9DD42E060E080E0D2DD8091F0008860A7 +:100930008093F00093D18091E10082FF0AC0809102 +:10094000E20082FF06C08091E1008B7F8093E1008E +:1009500085D1FF91EF91BF91AF919F918F917F9141 +:100960006F915F914F913F912F910F900FBE0F901C +:100970001F9018951F920F920FB60F9211242F936C +:100980003F934F935F936F937F938F939F93AF9317 +:10099000BF93CF93EF93FF93E9EEF0E0C081C77070 +:1009A0001082E0EFF0E08081877F808378941CD014 +:1009B000F894E9EEF0E01082A0EFB0E08C9188604E +:1009C0008C93C083FF91EF91CF91BF91AF919F9195 +:1009D0008F917F916F915F914F913F912F910F90E8 +:1009E0000FBE0F901F9018951F93CF93DF93CDB735 +:1009F000DEB7AA970FB6F894DEBF0FBECDBFE7E211 +:100A0000F2E08091F100819322E0EF32F207C9F722 +:100A10002091270230912802832F90E08A3091059F +:100A200008F010C1FC01E65CFF4F89C2203881F05C +:100A3000223809F007C180912B0287708093E9006A +:100A40008091EB0085FB882780F91092E90006C0B1 +:100A50008091230290912402911182609091E8008C +:100A6000977F9093E8008093F1001092F100BDC051 +:100A7000822F8D7F09F0E6C0222319F0223061F029 +:100A8000D2C080912902813009F0CDC0333009F005 +:100A900080E08093240228C080912902811124C023 +:100AA00020912B02277009F4BEC02093E9008091A9 +:100AB000EB0080FFB8C08091EB00333011F480620E +:100AC00011C080618093EB0081E090E0022E01C0B4 +:100AD000880F0A94EAF78093EA001092EA00809166 +:100AE000EB0088608093EB001092E9008091E800B1 +:100AF000877F7EC02111A6C0109129028091E80055 +:100B0000877F8093E8000ADD8091E80080FD04C0C3 +:100B10008EB38111F9CF87C0812F8F7711F093E0C9 +:100B200001C092E09EBB80688093E3007CC02058A7 +:100B3000223008F087C08091290290912A028C3DD2 +:100B400023E0920781F583E08A838AE289834FB7A5 +:100B5000F894DE01139620E03EE051E2E32FF0E04E +:100B600050935700E49120FF03C0E295EF703F5F80 +:100B7000EF7090E39E0F9A3310F0E95C01C0E92F0B +:100B80008E2F90E08D939D932F5F243139F74FBFC7 +:100B90008091E800877F8093E8006AE270E0CE01F0 +:100BA000019608DD11C0AE014F5F5F4F60912B02CF +:100BB0004EDC0097C1F12091E800277F2093E800E8 +:100BC000BC0189819A814DDD8091E8008B7780930B +:100BD000E80029C02038B1F58091E800877F809334 +:100BE000E800809125028093F1008091E8008E77E3 +:100BF0008093E80093DC17C0211124C09091290252 +:100C0000923088F48091E800877F8093E800909389 +:100C1000250284DC80912502882311F084E001C044 +:100C200083E08EBB83DB8091E80083FF0DC0809161 +:100C3000EB0080628093EB008091E800877F8093D7 +:100C4000E80002C076DBEFCFAA960FB6F894DEBFBD +:100C50000FBECDBFDF91CF911F9108950895CF931F +:100C60008EB3882359F0C091E900C7701092E90053 +:100C70008091E80083FDB8DEC093E900CF9108952C +:100C80000895CF93DF93EC018091E80083FF5FC06C +:100C9000888190E020912B0230912C02281739078F +:100CA00009F055C080912802813249F018F4803251 +:100CB000C9F04DC0823261F18332C9F148C08091E0 +:100CC0002702813A09F043C08091E800877F809332 +:100CD000E80067E070E0CE010F966CDC8091E800E0 +:100CE0008B7713C080912702813289F58091E800CB +:100CF000877F8093E80067E070E0CE010F9609DD02 +:100D0000CE011ADB8091E8008E778093E8001FC047 +:100D1000809127028132D9F48091E800877F809307 +:100D2000E800809129028D87CE0189DB0DC080917A +:100D30002702813261F48091E800877F8093E80088 +:100D400060912902CE019CDFDF91CF91E7CBDF914B +:100D5000CF9108950F931F93CF93DF93EC01FC0184 +:100D60003D9689E0DF011D928A95E9F72A813B8152 +:100D70008C81882311F014E001C010E00981C901C1 +:100D800098DB412F482B426061E8802FA0DB88234D +:100D900041F12E813F818885882311F014E001C044 +:100DA00010E00D81C90185DB412F482B426060E8CE +:100DB000802F8DDB8823A9F02A853B858C858823AD +:100DC00011F014E001C010E0C985C90172DB412FA8 +:100DD000482B426061EC8C2FDF91CF911F910F91D6 +:100DE00076CB80E0DF91CF911F910F910895CF9343 +:100DF000C62F2EB32430E9F4FC0147855089618960 +:100E00007289452B462B472BA1F081818093E90005 +:100E10008091E80085FF04C0C093F10080E00AC023 +:100E20008091E8008E778093E80097DB8823A1F318 +:100E300001C082E0CF9108952EB3243019F5FC0152 +:100E40004785508961897289452B462B472BD1F004 +:100E500081818093E9008091F200882389F090914C +:100E6000E8008091E8008E778093E80095FD08C047 +:100E700074DB811108C08091E8008E778093E800D0 +:100E800080E0089582E008952EB3243051F4FC01EF +:100E90004785508961897289452B462B472B09F07C +:100EA000CBCF08952EB3243019F08FEF9FEF089524 +:100EB000FC014785508961897289452B462B472B58 +:100EC000A1F385818093E9008091E80082FFEDCF56 +:100ED0008091F200882321F02091F10030E002C0DF +:100EE0002FEF3FEF8091F200811105C08091E80063 +:100EF0008B778093E800C9010895A1E21A2EAA1BFE +:100F0000BB1BFD010DC0AA1FBB1FEE1FFF1FA217B9 +:100F1000B307E407F50720F0A21BB30BE40BF50BB6 +:100F2000661F771F881F991F1A9469F7609570953F +:100F3000809590959B01AC01BD01CF010895EE0F06 +:0E0F4000FF1F0590F491E02D0994F894FFCF67 +:100F4E000003400000044000000208000000000002 +:060F5E000000000000008D +:00000001FF diff --git a/hardware/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Genuino-usbserial-atmega16u2-Uno-R3.hex b/hardware/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Genuino-usbserial-atmega16u2-Uno-R3.hex new file mode 100644 index 00000000000..3abf6adbae1 --- /dev/null +++ b/hardware/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Genuino-usbserial-atmega16u2-Uno-R3.hex @@ -0,0 +1,248 @@ +:1000000098C00000B1C00000AFC00000ADC000004B +:10001000ABC00000A9C00000A7C00000A5C0000040 +:10002000A3C00000A1C000009FC00000F6C30000F4 +:100030009BC4000099C0000097C0000095C000005C +:1000400093C0000091C000008FC000008DC0000070 +:100050008BC0000089C0000087C00000C0C1000044 +:1000600083C0000081C000007FC000007DC0000090 +:100070007BC00000100532051C0632051C06740505 +:1000800091051C06E405F6051803470065006E009F +:10009000750069006E006F00200055006E006F0053 +:1000A00000003A03410072006400750069006E00B0 +:1000B0006F0020004C004C00430020002800770017 +:1000C000770077002E0061007200640075006900FF +:1000D0006E006F002E00630063002900000004031F +:1000E000090409023E00020100C0320904000001B7 +:1000F0000202010005240001100424020605240662 +:100100000001070582030800FF09040100020A003C +:1001100000000705040240000107058302400001BA +:1001200012011001020000084123430201000102F4 +:10013000DC0111241FBECFEFD2E0DEBFCDBF11E046 +:10014000A0E0B1E0E2E4FFE002C005900D92A6312C +:10015000B107D9F712E0A6E1B1E001C01D92AF32BC +:10016000B107E1F764D0EBC64BCFFC01E058FF4F7D +:10017000A081B1816C93A081B1819D012F5F3F4F20 +:10018000318320832E173F0721F412969C938E9380 +:1001900011972FB7F894FC01EC57FF4F80818F5FC8 +:1001A00080832FBF0895DC01AE57BF4FED91FC91C6 +:1001B000119741911196FC93EE939C0120583F4F6B +:1001C000E217F30711F48D939C932FB7F894FC0179 +:1001D000EC57FF4F9081915090832FBF842F08954B +:1001E00084B7877F84BF88E10FB6F894809360005E +:1001F000109260000FBE87E690E09093CD00809350 +:10020000CC0086E08093CA001092C80088E18093F9 +:10021000C900539A5A9A8AB180638AB98BB18063B4 +:100220008BB9F0D284E085BD5F9A579A0895D8DFE4 +:100230002FB7F8948EE991E090931F0280931E02ED +:1002400090932102809320022FBF2FB7F89489E169 +:1002500091E090939A018093990190939C018093EF +:100260009B012FBF7894D3E09FB7F894809122022E +:100270009FBF803849F080E091E00ED697FD04C022 +:10028000682F8EE991E071DF8FB7F894C0919D01DE +:100290008FBFA89902C0C13658F1A89A80919D01DC +:1002A000882319F05D98D0931601CC2349F089E199 +:1002B00091E079DF682F80E091E093D5C150F5CFD0 +:1002C00080911601882341F080911601815080931E +:1002D0001601811101C05D9A80911701882341F0B8 +:1002E00080911701815080931701811101C05C9AA0 +:1002F0009FB7F894809122029FBF882361F08EE916 +:1003000091E051DF9091C80095FFFCCF8093CE0023 +:100310005C98D093170180E091E0B0D59AD4A4CF37 +:1003200080E091E011C580E091E0A5C41F93CF93D8 +:10033000DF93EC018C89813031F0823011F010E0D4 +:1003400003C010E201C010E38B89823009F4186009 +:100350008D89873031F0883031F0863029F4126091 +:1003600003C0146001C016601092C9001092C8004A +:100370001092CA002F85388949895A89211581EE42 +:1003800038074105510571F0CA01B9019695879565 +:100390007795679560587B47814E9F4FA8D5215030 +:1003A000310902C020E130E03093CD002093CC0031 +:1003B0001093CA008F859889A989BA898115914EB1 +:1003C000A105B10511F480E001C082E08093C8006E +:1003D00088E98093C900DF91CF911F9108951F9202 +:1003E0000F920FB60F9211242F933F934F935F9369 +:1003F0006F937F938F939F93AF93BF93EF93FF93ED +:100400006091CE008EB3843019F489E191E0ADDEC5 +:10041000FF91EF91BF91AF919F918F917F916F91DC +:100420005F914F913F912F910F900FBE0F901F90B2 +:100430001895FC01858580FF02C05F9808955F9A3A +:100440000895292F33272230310559F02330310503 +:1004500069F021303105F9F482E190E020E231E0E9 +:100460001EC08EE390E022EE30E019C09927813063 +:10047000910541F08230910541F0892B61F4EEED58 +:10048000F0E005C0E2EAF0E002C0E8E8F0E08491C4 +:1004900090E09F0104C080E090E020E030E0FA01AD +:1004A00031832083089528E030E040E028173907A1 +:1004B00020F44F5F220F331FF9CF842F8295807F66 +:1004C00008958093E900EBEEF0E080818160808305 +:1004D000EDEEF0E010826093EC0040838091EE003E +:1004E000881F8827881F08951092F40080E0809369 +:1004F000E9001092F0001092E8001092ED00909147 +:10050000EB009E7F9093EB008F5F853081F708951D +:100510008091270287FD05C08091E80080FF0DC013 +:1005200010C08091E80082FD04C08EB38111F9CF24 +:1005300008958091E8008B7707C08EB38111ECCFCE +:1005400008958091E8008E778093E800089585E60D +:100550009091EC0090FF05C09091E80090FF05C0DD +:100560001BC09091E80092FD17C09EB39923B1F093 +:100570009EB39530A9F09091EB0095FD13C090913A +:10058000E10092FFE5CF9091E1009B7F9093E10025 +:100590008150F1F684E0089580E0089582E00895A6 +:1005A00083E0089581E0089520912D0230912E027C +:1005B0002617370748F06115710539F42091E800D6 +:1005C0002E772093E80001C0B90130E06115710574 +:1005D00091F12091E80023FD38C02091E80022FF2E +:1005E00006C08091E80082FF29C080E008952EB304 +:1005F000222369F12EB3253061F12091E80020FF1C +:10060000E5CF2091F200FC01CF016115710549F0A1 +:10061000283038F481918093F100615071092F5F87 +:10062000F3CF31E0283009F030E02091E8002E7758 +:100630002093E800CBCF3111CCCFD3CF8EB388231A +:1006400031F08EB3853069F604C081E0089582E010 +:10065000089583E0089520912D0230912E022617EF +:10066000370748F06115710539F42091E8002E77BD +:100670002093E80001C0B90130E06115710599F1DE +:100680002091E80023FD39C02091E80022FF06C038 +:100690008091E80082FF2AC080E008952EB32223D3 +:1006A00071F12EB3253069F12091E80020FFE5CFEC +:1006B0002091F200FC01CF016115710551F0283045 +:1006C00040F484918093F100615071092F5F31965D +:1006D000F2CF31E0283009F030E02091E8002E77A9 +:1006E0002093E800CACF3111CBCFD2CF8EB388236D +:1006F00031F08EB3853061F604C081E0089582E068 +:10070000089583E008956115710529F42091E800AA +:100710002B772093E8006115710549F12091E800DD +:1007200023FD2AC02EB3222359F12EB3253051F1D7 +:100730002091E80022FFF2CFFC018091F200882393 +:1007400071F09F012F5F3F4FC9014091F10040833D +:100750006150710961157105C9F2F901EECFCF0140 +:10076000D5CF8EB3882361F08EB3853059F0809158 +:10077000E80080FFF6CF02C081E0089580E0089590 +:1007800082E0089583E0089542D044D01EBA1092CA +:100790002502109224021092230284E089BD89B5BB +:1007A000826089BD09B400FEFDCF8091D800982FEA +:1007B0009F779093D80080688093D80080916300E1 +:1007C0008E7F809363008091D8008F7D8093D800C6 +:1007D0008091E0008E7F8093E0008091E1008E7F29 +:1007E0008093E1008091E20081608093E20080913B +:1007F000E100877F8093E1008091E2008860809330 +:10080000E2000895C1DF81E08093260208951092EE +:10081000E20008951092E10008951F920F920FB622 +:100820000F9211242F933F934F935F936F937F9376 +:100830008F939F93AF93BF93EF93FF938091E100CA +:1008400080FF1BC08091E20080FF17C08091E10013 +:100850008E7F8093E1008091E2008E7F8093E200A2 +:100860008091E20080618093E2008091D8008062F4 +:100870008093D80019BC1EBAEBD18091E10084FFAF +:1008800029C08091E20084FF25C084E089BD89B53C +:10089000826089BD09B400FEFDCF8091D8008F7DB4 +:1008A0008093D8008091E1008F7E8093E100809159 +:1008B000E2008F7E8093E2008091E200816080936D +:1008C000E20080912502882311F084E001C081E0DC +:1008D0008EBBBED18091E10083FF27C08091E200F2 +:1008E00083FF23C08091E100877F8093E10082E055 +:1008F0008EBB109225028091E1008E7F8093E100F3 +:100900008091E2008E7F8093E2008091E20080611E +:100910008093E200E9DD42E060E080E0D2DD80919A +:10092000F00088608093F00093D18091E10082FF15 +:100930000AC08091E20082FF06C08091E1008B7FB7 +:100940008093E10085D1FF91EF91BF91AF919F918D +:100950008F917F916F915F914F913F912F910F9068 +:100960000FBE0F901F9018951F920F920FB60F9207 +:1009700011242F933F934F935F936F937F938F93A4 +:100980009F93AF93BF93CF93EF93FF93E9EEF0E084 +:10099000C081C7701082E0EFF0E08081877F8083A4 +:1009A00078941CD0F894E9EEF0E01082A0EFB0E06B +:1009B0008C9188608C93C083FF91EF91CF91BF9110 +:1009C000AF919F918F917F916F915F914F913F91E7 +:1009D0002F910F900FBE0F901F9018951F93CF93DC +:1009E000DF93CDB7DEB7AA970FB6F894DEBF0FBE80 +:1009F000CDBFE7E2F2E08091F100819322E0EF3297 +:100A0000F207C9F72091270230912802832F90E046 +:100A10008A30910508F010C1FC01E65CFF4F89C2E5 +:100A2000203881F0223809F007C180912B028770AD +:100A30008093E9008091EB0085FB882780F9109274 +:100A4000E90006C0809123029091240291118260F6 +:100A50009091E800977F9093E8008093F1001092C6 +:100A6000F100BDC0822F8D7F09F0E6C0222319F06E +:100A7000223061F0D2C080912902813009F0CDC0CE +:100A8000333009F080E08093240228C0809129024D +:100A9000811124C020912B02277009F4BEC020933D +:100AA000E9008091EB0080FFB8C08091EB0033300B +:100AB00011F4806211C080618093EB0081E090E0CE +:100AC000022E01C0880F0A94EAF78093EA00109280 +:100AD000EA008091EB0088608093EB001092E900BF +:100AE0008091E800877F7EC02111A6C01091290265 +:100AF0008091E800877F8093E8000ADD8091E8001C +:100B000080FD04C08EB38111F9CF87C0812F8F770C +:100B100011F093E001C092E09EBB80688093E300F7 +:100B20007CC02058223008F087C080912902909123 +:100B30002A028C3D23E0920781F583E08A838AE2D2 +:100B400089834FB7F894DE01139620E03EE051E22E +:100B5000E32FF0E050935700E49120FF03C0E295AB +:100B6000EF703F5FEF7090E39E0F9A3310F0E95CF7 +:100B700001C0E92F8E2F90E08D939D932F5F24313C +:100B800039F74FBF8091E800877F8093E8006AE2E1 +:100B900070E0CE01019608DD11C0AE014F5F5F4FDE +:100BA00060912B024EDC0097C1F12091E800277F75 +:100BB0002093E800BC0189819A814DDD8091E80095 +:100BC0008B778093E80029C02038B1F58091E80048 +:100BD000877F8093E800809125028093F1008091C7 +:100BE000E8008E778093E80093DC17C0211124C0C1 +:100BF00090912902923088F48091E800877F809359 +:100C0000E8009093250284DC80912502882311F06E +:100C100084E001C083E08EBB83DB8091E80083FF2A +:100C20000DC08091EB0080628093EB008091E80022 +:100C3000877F8093E80002C076DBEFCFAA960FB6DD +:100C4000F894DEBF0FBECDBFDF91CF911F91089505 +:100C50000895CF938EB3882359F0C091E900C770EF +:100C60001092E9008091E80083FDB8DEC093E900AE +:100C7000CF9108950895CF93DF93EC018091E80020 +:100C800083FF5FC0888190E020912B0230912C027D +:100C90002817390709F055C080912802813249F0A0 +:100CA00018F48032C9F04DC0823261F18332C9F14B +:100CB00048C080912702813A09F043C08091E80042 +:100CC000877F8093E80067E070E0CE010F966CDCD0 +:100CD0008091E8008B7713C080912702813289F5DB +:100CE0008091E800877F8093E80067E070E0CE01A4 +:100CF0000F9609DDCE011ADB8091E8008E77809394 +:100D0000E8001FC0809127028132D9F48091E80069 +:100D1000877F8093E800809129028D87CE0189DB4F +:100D20000DC080912702813261F48091E800877FB5 +:100D30008093E80060912902CE019CDFDF91CF9182 +:100D4000E7CBDF91CF9108950F931F93CF93DF935C +:100D5000EC01FC013D9689E0DF011D928A95E9F7DF +:100D60002A813B818C81882311F014E001C010E0BE +:100D70000981C90198DB412F482B426061E8802F2F +:100D8000A0DB882341F12E813F818885882311F0E3 +:100D900014E001C010E00D81C90185DB412F482B13 +:100DA000426060E8802F8DDB8823A9F02A853B858F +:100DB0008C85882311F014E001C010E0C985C901B9 +:100DC00072DB412F482B426061EC8C2FDF91CF9179 +:100DD0001F910F9176CB80E0DF91CF911F910F9102 +:100DE0000895CF93C62F2EB32430E9F4FC01478534 +:100DF000508961897289452B462B472BA1F081814F +:100E00008093E9008091E80085FF04C0C093F10061 +:100E100080E00AC08091E8008E778093E80097DB3D +:100E20008823A1F301C082E0CF9108952EB324302E +:100E300019F5FC014785508961897289452B462B3C +:100E4000472BD1F081818093E9008091F2008823C3 +:100E500089F09091E8008091E8008E778093E80017 +:100E600095FD08C074DB811108C08091E8008E7781 +:100E70008093E80080E0089582E008952EB3243046 +:100E800051F4FC014785508961897289452B462BB5 +:100E9000472B09F0CBCF08952EB3243019F08FEFF4 +:100EA0009FEF0895FC014785508961897289452B20 +:100EB000462B472BA1F385818093E9008091E800C0 +:100EC00082FFEDCF8091F200882321F02091F10084 +:100ED00030E002C02FEF3FEF8091F200811105C09A +:100EE0008091E8008B778093E800C9010895A1E222 +:100EF0001A2EAA1BBB1BFD010DC0AA1FBB1FEE1F94 +:100F0000FF1FA217B307E407F50720F0A21BB30BDE +:100F1000E40BF50B661F771F881F991F1A9469F75A +:100F200060957095809590959B01AC01BD01CF01B6 +:100F30000895EE0FFF1F0590F491E02D0994F894A9 +:020F4000FFCFE1 +:100F4200000340000004400000020800000000000E +:060F520000000000000099 +:00000001FF From b4f58a9ff600cf23c605c53cf761a4a34e89be3f Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Thu, 27 Aug 2015 10:58:27 +0200 Subject: [PATCH 009/123] Release new boards as AVR core 1.6.8 --- hardware/arduino/avr/platform.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hardware/arduino/avr/platform.txt b/hardware/arduino/avr/platform.txt index 80513e8f849..58eed797f6a 100644 --- a/hardware/arduino/avr/platform.txt +++ b/hardware/arduino/avr/platform.txt @@ -6,7 +6,7 @@ # https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5-3rd-party-Hardware-specification name=Arduino AVR Boards -version=1.6.7 +version=1.6.8 # AVR compile variables # --------------------- From 3dba83dd8181bc6c106bfb77af56a4e6674cf52c Mon Sep 17 00:00:00 2001 From: Federico Fissore Date: Thu, 27 Aug 2015 11:40:25 +0200 Subject: [PATCH 010/123] Update revisions.txt --- build/shared/revisions.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/build/shared/revisions.txt b/build/shared/revisions.txt index 43696029379..98fd21e02cd 100644 --- a/build/shared/revisions.txt +++ b/build/shared/revisions.txt @@ -24,6 +24,11 @@ ARDUINO 1.6.6 * Bridge: YunClient.connected() returns true if there are bytes available for read. Thanks @RobAtticus * Bridge: YunClient.stop() now empties all buffers. Thanks @RobAtticus +ARDUINO 1.6.5-r4 - 2015.08.27 + +[ide] +* Added support to Genuino boards + ARDUINO 1.6.5-r3 - 2015.07.20 [ide] From 83e1570ecf8bc38364f365936107ca40fdafe0a8 Mon Sep 17 00:00:00 2001 From: Federico Fissore Date: Fri, 28 Aug 2015 09:01:47 +0200 Subject: [PATCH 011/123] LoadVIDPIDSpecificPreferences was giving for granted that the attached board provided VID & PID. This is not always true, especially with counterfeits. Fixes #3738 --- .../cc/arduino/LoadVIDPIDSpecificPreferences.java | 9 ++++++++- arduino-core/src/cc/arduino/packages/BoardPort.java | 10 +++++----- .../packages/discoverers/NetworkDiscovery.java | 13 +++++-------- .../discoverers/serial/SerialBoardsLister.java | 8 ++------ 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/arduino-core/src/cc/arduino/LoadVIDPIDSpecificPreferences.java b/arduino-core/src/cc/arduino/LoadVIDPIDSpecificPreferences.java index 09a99d11aef..623d3089205 100644 --- a/arduino-core/src/cc/arduino/LoadVIDPIDSpecificPreferences.java +++ b/arduino-core/src/cc/arduino/LoadVIDPIDSpecificPreferences.java @@ -30,6 +30,7 @@ package cc.arduino; import cc.arduino.packages.BoardPort; +import org.apache.commons.lang3.StringUtils; import processing.app.BaseNoGui; import processing.app.PreferencesData; import processing.app.helpers.PreferencesMap; @@ -45,7 +46,13 @@ public void load(PreferencesMap prefs) { return; } - int VIDPIDIndex = findVIDPIDIndex(prefs, boardPort.getPrefs().get("vid").toUpperCase(), boardPort.getPrefs().get("pid").toUpperCase()); + String vid = boardPort.getPrefs().get("vid"); + String pid = boardPort.getPrefs().get("pid"); + if (StringUtils.isEmpty(vid) || StringUtils.isEmpty(pid)) { + return; + } + + int VIDPIDIndex = findVIDPIDIndex(prefs, vid.toUpperCase(), pid.toUpperCase()); if (VIDPIDIndex < 0) { return; } diff --git a/arduino-core/src/cc/arduino/packages/BoardPort.java b/arduino-core/src/cc/arduino/packages/BoardPort.java index 1b29b0765ca..e2c16c43e69 100644 --- a/arduino-core/src/cc/arduino/packages/BoardPort.java +++ b/arduino-core/src/cc/arduino/packages/BoardPort.java @@ -37,7 +37,11 @@ public class BoardPort { private String protocol; private String boardName; private String label; - private PreferencesMap prefs; + private final PreferencesMap prefs; + + public BoardPort() { + this.prefs = new PreferencesMap(); + } public String getAddress() { return address; @@ -63,10 +67,6 @@ public void setBoardName(String boardName) { this.boardName = boardName; } - public void setPrefs(PreferencesMap prefs) { - this.prefs = prefs; - } - public PreferencesMap getPrefs() { return prefs; } diff --git a/arduino-core/src/cc/arduino/packages/discoverers/NetworkDiscovery.java b/arduino-core/src/cc/arduino/packages/discoverers/NetworkDiscovery.java index b02e3b65424..6f8fa10a64c 100644 --- a/arduino-core/src/cc/arduino/packages/discoverers/NetworkDiscovery.java +++ b/arduino-core/src/cc/arduino/packages/discoverers/NetworkDiscovery.java @@ -35,7 +35,6 @@ import cc.arduino.packages.discoverers.network.NetworkChecker; import org.apache.commons.compress.utils.IOUtils; import processing.app.BaseNoGui; -import processing.app.helpers.PreferencesMap; import processing.app.zeroconf.jmdns.ArduinoDNSTaskStarter; import javax.jmdns.*; @@ -135,16 +134,16 @@ public void serviceResolved(ServiceEvent serviceEvent) { String address = inetAddress.getHostAddress(); String name = serviceEvent.getName(); - PreferencesMap prefs = null; + BoardPort port = new BoardPort(); + String board = null; String description = null; if (info.hasData()) { - prefs = new PreferencesMap(); board = info.getPropertyString("board"); description = info.getPropertyString("description"); - prefs.put("board", board); - prefs.put("distro_version", info.getPropertyString("distro_version")); - prefs.put("port", "" + info.getPort()); + port.getPrefs().put("board", board); + port.getPrefs().put("distro_version", info.getPropertyString("distro_version")); + port.getPrefs().put("port", "" + info.getPort()); } String label = name + " at " + address; @@ -157,11 +156,9 @@ public void serviceResolved(ServiceEvent serviceEvent) { label += " (" + description + ")"; } - BoardPort port = new BoardPort(); port.setAddress(address); port.setBoardName(name); port.setProtocol("network"); - port.setPrefs(prefs); port.setLabel(label); synchronized (boardPortsDiscoveredWithJmDNS) { diff --git a/arduino-core/src/cc/arduino/packages/discoverers/serial/SerialBoardsLister.java b/arduino-core/src/cc/arduino/packages/discoverers/serial/SerialBoardsLister.java index 4531f0e8778..475fb6e9439 100644 --- a/arduino-core/src/cc/arduino/packages/discoverers/serial/SerialBoardsLister.java +++ b/arduino-core/src/cc/arduino/packages/discoverers/serial/SerialBoardsLister.java @@ -35,7 +35,6 @@ import processing.app.Platform; import processing.app.Serial; import processing.app.debug.TargetBoard; -import processing.app.helpers.PreferencesMap; import java.util.*; @@ -84,11 +83,9 @@ public void run() { String label = port; - PreferencesMap prefs = new PreferencesMap(); - if (boardData != null) { - prefs.put("vid", boardData.get("vid").toString()); - prefs.put("pid", boardData.get("pid").toString()); + boardPort.getPrefs().put("vid", boardData.get("vid").toString()); + boardPort.getPrefs().put("pid", boardData.get("pid").toString()); TargetBoard board = (TargetBoard) boardData.get("board"); if (board != null) { @@ -101,7 +98,6 @@ public void run() { } boardPort.setLabel(label); - boardPort.setPrefs(prefs); boardPorts.add(boardPort); } From a093f77befd2c122ba1551e4688e86a56a6f367d Mon Sep 17 00:00:00 2001 From: Federico Fissore Date: Fri, 28 Aug 2015 09:07:28 +0200 Subject: [PATCH 012/123] Update revisions.txt --- build/shared/revisions.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/build/shared/revisions.txt b/build/shared/revisions.txt index 98fd21e02cd..1f9e798625d 100644 --- a/build/shared/revisions.txt +++ b/build/shared/revisions.txt @@ -24,6 +24,11 @@ ARDUINO 1.6.6 * Bridge: YunClient.connected() returns true if there are bytes available for read. Thanks @RobAtticus * Bridge: YunClient.stop() now empties all buffers. Thanks @RobAtticus +ARDUINO 1.6.5-r5 - 2015.08.28 + +[ide] +* Fixed a but preventing upload on boards that do not supply VID/PID. See #3738 + ARDUINO 1.6.5-r4 - 2015.08.27 [ide] From 00b059d7f6626b7810d111b2ff948274f64b5812 Mon Sep 17 00:00:00 2001 From: Federico Fissore Date: Fri, 28 Aug 2015 09:47:16 +0200 Subject: [PATCH 013/123] MacOSX: Home/End key preference was coded backwards. Fixed. See #3715 --- .../processing/app/syntax/SketchTextAreaDefaultInputMap.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/processing/app/syntax/SketchTextAreaDefaultInputMap.java b/app/src/processing/app/syntax/SketchTextAreaDefaultInputMap.java index 0b8690de616..8e514104758 100644 --- a/app/src/processing/app/syntax/SketchTextAreaDefaultInputMap.java +++ b/app/src/processing/app/syntax/SketchTextAreaDefaultInputMap.java @@ -50,7 +50,7 @@ public SketchTextAreaDefaultInputMap() { put(KeyStroke.getKeyStroke(KeyEvent.VK_UP, defaultModifier | shift), DefaultEditorKit.selectionBeginAction); put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, defaultModifier | shift), DefaultEditorKit.selectionEndAction); - if (PreferencesData.getBoolean("editor.keys.home_and_end_to_start_end_of_doc")) { + if (!PreferencesData.getBoolean("editor.keys.home_and_end_beginning_end_of_doc")) { put(KeyStroke.getKeyStroke(KeyEvent.VK_HOME, 0), DefaultEditorKit.beginLineAction); put(KeyStroke.getKeyStroke(KeyEvent.VK_END, 0), DefaultEditorKit.endLineAction); } From 4dd07c98305a5d626f1b642f86fccddccc0c8923 Mon Sep 17 00:00:00 2001 From: Federico Fissore Date: Mon, 31 Aug 2015 08:45:58 +0200 Subject: [PATCH 014/123] Cleanup --- arduino-core/src/processing/app/helpers/OSUtils.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/arduino-core/src/processing/app/helpers/OSUtils.java b/arduino-core/src/processing/app/helpers/OSUtils.java index 5efb77e29b3..80a36b9e964 100644 --- a/arduino-core/src/processing/app/helpers/OSUtils.java +++ b/arduino-core/src/processing/app/helpers/OSUtils.java @@ -7,7 +7,7 @@ public class OSUtils { */ static public boolean isWindows() { //return PApplet.platform == PConstants.WINDOWS; - return System.getProperty("os.name").indexOf("Windows") != -1; + return System.getProperty("os.name").contains("Windows"); } /** @@ -15,7 +15,7 @@ static public boolean isWindows() { */ static public boolean isLinux() { //return PApplet.platform == PConstants.LINUX; - return System.getProperty("os.name").indexOf("Linux") != -1; + return System.getProperty("os.name").contains("Linux"); } /** @@ -23,7 +23,7 @@ static public boolean isLinux() { */ static public boolean isMacOS() { //return PApplet.platform == PConstants.MACOSX; - return System.getProperty("os.name").indexOf("Mac") != -1; + return System.getProperty("os.name").contains("Mac"); } } From bc26004964bd8ec1d0ab2b14c67775ad8f8718a5 Mon Sep 17 00:00:00 2001 From: "Andrew J. Kroll" Date: Mon, 3 Nov 2014 08:57:03 -0500 Subject: [PATCH 015/123] AVR: Faster Interrupts, no size change. Fixes #2408 --- .../arduino/avr/cores/arduino/WInterrupts.c | 60 ++++++++++++------- 1 file changed, 37 insertions(+), 23 deletions(-) diff --git a/hardware/arduino/avr/cores/arduino/WInterrupts.c b/hardware/arduino/avr/cores/arduino/WInterrupts.c index 71dd45cac5f..f974ce64118 100644 --- a/hardware/arduino/avr/cores/arduino/WInterrupts.c +++ b/hardware/arduino/avr/cores/arduino/WInterrupts.c @@ -32,7 +32,37 @@ #include "wiring_private.h" -static volatile voidFuncPtr intFunc[EXTERNAL_NUM_INTERRUPTS]; +static void nothing(void) { +} + +static volatile voidFuncPtr intFunc[EXTERNAL_NUM_INTERRUPTS] = { +#if EXTERNAL_NUM_INTERRUPTS > 8 + #warning There are more than 8 external interrupts. Some callbacks may not be initialized. + nothing, +#endif +#if EXTERNAL_NUM_INTERRUPTS > 7 + nothing, +#endif +#if EXTERNAL_NUM_INTERRUPTS > 6 + nothing, +#endif +#if EXTERNAL_NUM_INTERRUPTS > 5 + nothing, +#endif +#if EXTERNAL_NUM_INTERRUPTS > 4 + nothing, +#endif +#if EXTERNAL_NUM_INTERRUPTS > 3 + nothing, +#endif +#if EXTERNAL_NUM_INTERRUPTS > 2 + nothing, +#endif +#if EXTERNAL_NUM_INTERRUPTS > 1 + nothing, +#endif + nothing +}; // volatile static voidFuncPtr twiIntFunc; void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode) { @@ -238,7 +268,7 @@ void detachInterrupt(uint8_t interruptNum) { #endif } - intFunc[interruptNum] = 0; + intFunc[interruptNum] = nothing; } } @@ -250,87 +280,71 @@ void attachInterruptTwi(void (*userFunc)(void) ) { #if defined(__AVR_ATmega32U4__) ISR(INT0_vect) { - if(intFunc[EXTERNAL_INT_0]) - intFunc[EXTERNAL_INT_0](); + intFunc[EXTERNAL_INT_0](); } ISR(INT1_vect) { - if(intFunc[EXTERNAL_INT_1]) - intFunc[EXTERNAL_INT_1](); + intFunc[EXTERNAL_INT_1](); } ISR(INT2_vect) { - if(intFunc[EXTERNAL_INT_2]) - intFunc[EXTERNAL_INT_2](); + intFunc[EXTERNAL_INT_2](); } ISR(INT3_vect) { - if(intFunc[EXTERNAL_INT_3]) - intFunc[EXTERNAL_INT_3](); + intFunc[EXTERNAL_INT_3](); } ISR(INT6_vect) { - if(intFunc[EXTERNAL_INT_4]) - intFunc[EXTERNAL_INT_4](); + intFunc[EXTERNAL_INT_4](); } #elif defined(EICRA) && defined(EICRB) ISR(INT0_vect) { - if(intFunc[EXTERNAL_INT_2]) intFunc[EXTERNAL_INT_2](); } ISR(INT1_vect) { - if(intFunc[EXTERNAL_INT_3]) intFunc[EXTERNAL_INT_3](); } ISR(INT2_vect) { - if(intFunc[EXTERNAL_INT_4]) intFunc[EXTERNAL_INT_4](); } ISR(INT3_vect) { - if(intFunc[EXTERNAL_INT_5]) intFunc[EXTERNAL_INT_5](); } ISR(INT4_vect) { - if(intFunc[EXTERNAL_INT_0]) intFunc[EXTERNAL_INT_0](); } ISR(INT5_vect) { - if(intFunc[EXTERNAL_INT_1]) intFunc[EXTERNAL_INT_1](); } ISR(INT6_vect) { - if(intFunc[EXTERNAL_INT_6]) intFunc[EXTERNAL_INT_6](); } ISR(INT7_vect) { - if(intFunc[EXTERNAL_INT_7]) intFunc[EXTERNAL_INT_7](); } #else ISR(INT0_vect) { - if(intFunc[EXTERNAL_INT_0]) intFunc[EXTERNAL_INT_0](); } ISR(INT1_vect) { - if(intFunc[EXTERNAL_INT_1]) intFunc[EXTERNAL_INT_1](); } #if defined(EICRA) && defined(ISC20) ISR(INT2_vect) { - if(intFunc[EXTERNAL_INT_2]) intFunc[EXTERNAL_INT_2](); } #endif From bf3249064907de242ddd82c29177c27c2e500fdb Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Mon, 31 Aug 2015 18:12:13 +0200 Subject: [PATCH 016/123] Added EXTERNAL_NUM_INTERRUPTS for AVR xxU2 series --- hardware/arduino/avr/cores/arduino/wiring_private.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hardware/arduino/avr/cores/arduino/wiring_private.h b/hardware/arduino/avr/cores/arduino/wiring_private.h index ed7c8f0a72a..a277b148450 100644 --- a/hardware/arduino/avr/cores/arduino/wiring_private.h +++ b/hardware/arduino/avr/cores/arduino/wiring_private.h @@ -52,7 +52,8 @@ uint32_t countPulseASM(volatile uint8_t *port, uint8_t bit, uint8_t stateMask, u #define EXTERNAL_INT_6 6 #define EXTERNAL_INT_7 7 -#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega128RFA1__) || defined(__AVR_ATmega256RFR2__) +#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega128RFA1__) || defined(__AVR_ATmega256RFR2__) || \ + defined(__AVR_AT90USB82__) || defined(__AVR_AT90USB162__) || defined(__AVR_ATmega32U2__) || defined(__AVR_ATmega16U2__) || defined(__AVR_ATmega8U2__) #define EXTERNAL_NUM_INTERRUPTS 8 #elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega644__) || defined(__AVR_ATmega644A__) || defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644PA__) #define EXTERNAL_NUM_INTERRUPTS 3 From 46e0dab1d2f6a0f9ac3a6d29d890103e73be64a4 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Tue, 1 Sep 2015 10:11:43 +0200 Subject: [PATCH 017/123] Added missing #ifdef in WInterrupts.c... (oops) See #2408 --- hardware/arduino/avr/cores/arduino/WInterrupts.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hardware/arduino/avr/cores/arduino/WInterrupts.c b/hardware/arduino/avr/cores/arduino/WInterrupts.c index f974ce64118..83b762f5dba 100644 --- a/hardware/arduino/avr/cores/arduino/WInterrupts.c +++ b/hardware/arduino/avr/cores/arduino/WInterrupts.c @@ -61,7 +61,9 @@ static volatile voidFuncPtr intFunc[EXTERNAL_NUM_INTERRUPTS] = { #if EXTERNAL_NUM_INTERRUPTS > 1 nothing, #endif +#if EXTERNAL_NUM_INTERRUPTS > 0 nothing +#endif }; // volatile static voidFuncPtr twiIntFunc; From 333f295aa8411169622a4b8d03186c424c7fdfeb Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Tue, 1 Sep 2015 10:58:31 +0200 Subject: [PATCH 018/123] ...and also a leading ','... (oops 2) See #2408 --- hardware/arduino/avr/cores/arduino/WInterrupts.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hardware/arduino/avr/cores/arduino/WInterrupts.c b/hardware/arduino/avr/cores/arduino/WInterrupts.c index 83b762f5dba..7e9f71702d8 100644 --- a/hardware/arduino/avr/cores/arduino/WInterrupts.c +++ b/hardware/arduino/avr/cores/arduino/WInterrupts.c @@ -62,7 +62,7 @@ static volatile voidFuncPtr intFunc[EXTERNAL_NUM_INTERRUPTS] = { nothing, #endif #if EXTERNAL_NUM_INTERRUPTS > 0 - nothing + nothing, #endif }; // volatile static voidFuncPtr twiIntFunc; From d7f7ddcfd83629e7bb7a14a2ae7e19a417566452 Mon Sep 17 00:00:00 2001 From: Sandeep Mistry Date: Tue, 1 Sep 2015 18:08:12 -0400 Subject: [PATCH 019/123] Call on onBoardOrPortChange after selectBoard in no GUI mode Like GUI mode does when a board is changed. --- arduino-core/src/processing/app/helpers/CommandlineParser.java | 1 + 1 file changed, 1 insertion(+) diff --git a/arduino-core/src/processing/app/helpers/CommandlineParser.java b/arduino-core/src/processing/app/helpers/CommandlineParser.java index efd91ae139e..e8554f4dfe0 100644 --- a/arduino-core/src/processing/app/helpers/CommandlineParser.java +++ b/arduino-core/src/processing/app/helpers/CommandlineParser.java @@ -249,6 +249,7 @@ private void processBoardArgument(String selectBoard) { } BaseNoGui.selectBoard(targetBoard); + BaseNoGui.onBoardOrPortChange(); if (split.length > 3) { String[] options = split[3].split(","); From 9b7930a5f2860de0b1b05d5dd9457576b2c574cb Mon Sep 17 00:00:00 2001 From: Arturo Guadalupi Date: Wed, 2 Sep 2015 10:07:14 +0200 Subject: [PATCH 020/123] Added Ethernet.maintain() to examples According to #3634 I added the Ethernet.maintain to examples: Webserver UdpNtpClient DhcpChatServer DhcpAddressPrinter --- .../DhcpAddressPrinter/DhcpAddressPrinter.ino | 69 +++++++++++++++---- .../DhcpChatServer/DhcpChatServer.ino | 3 + .../examples/UdpNtpClient/UdpNtpClient.ino | 3 + .../Ethernet/examples/WebServer/WebServer.ino | 3 + 4 files changed, 63 insertions(+), 15 deletions(-) diff --git a/libraries/Ethernet/examples/DhcpAddressPrinter/DhcpAddressPrinter.ino b/libraries/Ethernet/examples/DhcpAddressPrinter/DhcpAddressPrinter.ino index a41b774039e..3feafad588d 100644 --- a/libraries/Ethernet/examples/DhcpAddressPrinter/DhcpAddressPrinter.ino +++ b/libraries/Ethernet/examples/DhcpAddressPrinter/DhcpAddressPrinter.ino @@ -1,18 +1,20 @@ /* DHCP-based IP printer - This sketch uses the DHCP extensions to the Ethernet library - to get an IP address via DHCP and print the address obtained. - using an Arduino Wiznet Ethernet shield. + This sketch uses the DHCP extensions to the Ethernet library + to get an IP address via DHCP and print the address obtained. + using an Arduino Wiznet Ethernet shield. - Circuit: - * Ethernet shield attached to pins 10, 11, 12, 13 + Circuit: + Ethernet shield attached to pins 10, 11, 12, 13 - created 12 April 2011 - modified 9 Apr 2012 - by Tom Igoe + created 12 April 2011 + modified 9 Apr 2012 + by Tom Igoe + modified 02 Sept 2015 + by Arturo Guadalupi - */ +*/ #include #include @@ -44,17 +46,54 @@ void setup() { ; } // print your local IP address: + printIPAddress(); +} + +void loop() { + + switch (Ethernet.maintain()) + { + case 1: + //renewed fail + Serial.println("Error: renewed fail"); + break; + + case 2: + //renewed success + Serial.println("Renewed success"); + + //print your local IP address: + printIPAddress(); + break; + + case 3: + //rebind fail + Serial.println("Error: rebind fail"); + break; + + case 4: + //rebind success + Serial.println("Rebind success"); + + //print your local IP address: + printIPAddress(); + break; + + default: + //nothing happened + break; + + } +} + +void printIPAddress() +{ Serial.print("My IP address: "); for (byte thisByte = 0; thisByte < 4; thisByte++) { // print the value of each byte of the IP address: Serial.print(Ethernet.localIP()[thisByte], DEC); Serial.print("."); } - Serial.println(); -} - -void loop() { + Serial.println(); } - - diff --git a/libraries/Ethernet/examples/DhcpChatServer/DhcpChatServer.ino b/libraries/Ethernet/examples/DhcpChatServer/DhcpChatServer.ino index 73cde4bbbbe..32e35789af4 100644 --- a/libraries/Ethernet/examples/DhcpChatServer/DhcpChatServer.ino +++ b/libraries/Ethernet/examples/DhcpChatServer/DhcpChatServer.ino @@ -14,6 +14,8 @@ created 21 May 2011 modified 9 Apr 2012 by Tom Igoe + modified 02 Sept 2015 + by Arturo Guadalupi Based on ChatServer example by David A. Mellis */ @@ -83,6 +85,7 @@ void loop() { server.write(thisChar); // echo the bytes to the server as well: Serial.print(thisChar); + Ethernet.maintain(); } } diff --git a/libraries/Ethernet/examples/UdpNtpClient/UdpNtpClient.ino b/libraries/Ethernet/examples/UdpNtpClient/UdpNtpClient.ino index 641ebf02c18..af4bf5387b8 100644 --- a/libraries/Ethernet/examples/UdpNtpClient/UdpNtpClient.ino +++ b/libraries/Ethernet/examples/UdpNtpClient/UdpNtpClient.ino @@ -11,6 +11,8 @@ by Michael Margolis modified 9 Apr 2012 by Tom Igoe + modified 02 Sept 2015 + by Arturo Guadalupi This code is in the public domain. @@ -103,6 +105,7 @@ void loop() { } // wait ten seconds before asking for the time again delay(10000); + Ethernet.maintain(); } // send an NTP request to the time server at the given address diff --git a/libraries/Ethernet/examples/WebServer/WebServer.ino b/libraries/Ethernet/examples/WebServer/WebServer.ino index 4a483af573a..0dac664600d 100644 --- a/libraries/Ethernet/examples/WebServer/WebServer.ino +++ b/libraries/Ethernet/examples/WebServer/WebServer.ino @@ -12,6 +12,8 @@ by David A. Mellis modified 9 Apr 2012 by Tom Igoe + modified 02 Sept 2015 + by Arturo Guadalupi */ @@ -95,6 +97,7 @@ void loop() { // close the connection: client.stop(); Serial.println("client disconnected"); + Ethernet.maintain(); } } From a47fb77cbc4143c2bd216be897c72657c2b0f620 Mon Sep 17 00:00:00 2001 From: Arturo Guadalupi Date: Thu, 3 Sep 2015 14:26:37 +0200 Subject: [PATCH 021/123] Removed StringToIntRGB example like discussed in #3537 --- .../StringToIntRGB/StringToIntRGB.ino | 235 ------------------ 1 file changed, 235 deletions(-) delete mode 100644 build/shared/examples/08.Strings/StringToIntRGB/StringToIntRGB.ino diff --git a/build/shared/examples/08.Strings/StringToIntRGB/StringToIntRGB.ino b/build/shared/examples/08.Strings/StringToIntRGB/StringToIntRGB.ino deleted file mode 100644 index f79b9528309..00000000000 --- a/build/shared/examples/08.Strings/StringToIntRGB/StringToIntRGB.ino +++ /dev/null @@ -1,235 +0,0 @@ -/* - Serial RGB controller - - Reads a serial input string looking for three comma-separated - integers with a newline at the end. Values should be between - 0 and 255. The sketch uses those values to set the color - of an RGB LED attached to pins 9 - 11. - - The circuit: - * Common-anode RGB LED cathodes attached to pins 9 - 11 - * LED anode connected to pin 13 - - To turn on any given channel, set the pin LOW. - To turn off, set the pin HIGH. The higher the analogWrite level, - the lower the brightness. - - created 29 Nov 2010 - by Tom Igoe - - This example code is in the public domain. - */ - -String inString = ""; // string to hold input -int currentColor = 0; -int red, green, blue = 0; - -void setup() { - // Open serial communications and wait for port to open: - Serial.begin(9600); - while (!Serial) { - ; // wait for serial port to connect. Needed for Leonardo only - } - - // send an intro: - Serial.println("\n\nString toInt() RGB:"); - Serial.println(); - // set LED cathode pins as outputs: - pinMode(9, OUTPUT); - pinMode(10, OUTPUT); - pinMode(11, OUTPUT); - // turn on pin 13 to power the LEDs: - pinMode(13, OUTPUT); - digitalWrite(13, HIGH); -} - -void loop() { - int inChar; - - // Read serial input: - if (Serial.available() > 0) { - inChar = Serial.read(); - } - - if (isDigit(inChar)) { - // convert the incoming byte to a char - // and add it to the string: - inString += (char)inChar; - } - - // if you get a comma, convert to a number, - // set the appropriate color, and increment - // the color counter: - if (inChar == ',') { - // do something different for each value of currentColor: - switch (currentColor) { - case 0: // 0 = red - red = inString.toInt(); - // clear the string for new input: - inString = ""; - break; - case 1: // 1 = green: - green = inString.toInt(); - // clear the string for new input: - inString = ""; - break; - } - currentColor++; - } - // if you get a newline, you know you've got - // the last color, i.e. blue: - if (inChar == '\n') { - blue = inString.toInt(); - - // set the levels of the LED. - // subtract value from 255 because a higher - // analogWrite level means a dimmer LED, since - // you're raising the level on the anode: - analogWrite(11, 255 - red); - analogWrite(9, 255 - green); - analogWrite(10, 255 - blue); - - // print the colors: - Serial.print("Red: "); - Serial.print(red); - Serial.print(", Green: "); - Serial.print(green); - Serial.print(", Blue: "); - Serial.println(blue); - - // clear the string for new input: - inString = ""; - // reset the color counter: - currentColor = 0; - } - -} - - -/* -Here's a Processing sketch that will draw a color wheel and send a serial - string with the color you click on: - - // Subtractive Color Wheel with Serial - // Based on a Processing example by Ira Greenberg. - // Serial output added by Tom Igoe - // - // The primaries are red, yellow, and blue. The secondaries are green, - // purple, and orange. The tertiaries are yellow-orange, red-orange, - // red-purple, blue-purple, blue-green, and yellow-green. - // - // Create a shade or tint of the subtractive color wheel using - // SHADE or TINT parameters. - - // Updated 29 November 2010. - - - - import processing.serial.*; - - int segs = 12; - int steps = 6; - float rotAdjust = TWO_PI / segs / 2; - float radius; - float segWidth; - float interval = TWO_PI / segs; - - Serial myPort; - - void setup() { - size(200, 200); - background(127); - smooth(); - ellipseMode(RADIUS); - noStroke(); - // make the diameter 90% of the sketch area - radius = min(width, height) * 0.45; - segWidth = radius / steps; - - // swap which line is commented out to draw the other version - // drawTintWheel(); - drawShadeWheel(); - // open the first serial port in your computer's list - myPort = new Serial(this, Serial.list()[0], 9600); - } - - - void drawShadeWheel() { - for (int j = 0; j < steps; j++) { - color[] cols = { - color(255-(255/steps)*j, 255-(255/steps)*j, 0), - color(255-(255/steps)*j, (255/1.5)-((255/1.5)/steps)*j, 0), - color(255-(255/steps)*j, (255/2)-((255/2)/steps)*j, 0), - color(255-(255/steps)*j, (255/2.5)-((255/2.5)/steps)*j, 0), - color(255-(255/steps)*j, 0, 0), - color(255-(255/steps)*j, 0, (255/2)-((255/2)/steps)*j), - color(255-(255/steps)*j, 0, 255-(255/steps)*j), - color((255/2)-((255/2)/steps)*j, 0, 255-(255/steps)*j), - color(0, 0, 255-(255/steps)*j), - color(0, 255-(255/steps)*j, (255/2.5)-((255/2.5)/steps)*j), - color(0, 255-(255/steps)*j, 0), - color((255/2)-((255/2)/steps)*j, 255-(255/steps)*j, 0) - }; - for (int i = 0; i < segs; i++) { - fill(cols[i]); - arc(width/2, height/2, radius, radius, - interval*i+rotAdjust, interval*(i+1)+rotAdjust); - } - radius -= segWidth; - } - } - - - void drawTintWheel() { - for (int j = 0; j < steps; j++) { - color[] cols = { - color((255/steps)*j, (255/steps)*j, 0), - color((255/steps)*j, ((255/1.5)/steps)*j, 0), - color((255/steps)*j, ((255/2)/steps)*j, 0), - color((255/steps)*j, ((255/2.5)/steps)*j, 0), - color((255/steps)*j, 0, 0), - color((255/steps)*j, 0, ((255/2)/steps)*j), - color((255/steps)*j, 0, (255/steps)*j), - color(((255/2)/steps)*j, 0, (255/steps)*j), - color(0, 0, (255/steps)*j), - color(0, (255/steps)*j, ((255/2.5)/steps)*j), - color(0, (255/steps)*j, 0), - color(((255/2)/steps)*j, (255/steps)*j, 0) - }; - for (int i = 0; i < segs; i++) { - fill(cols[i]); - arc(width/2, height/2, radius, radius, - interval*i+rotAdjust, interval*(i+1)+rotAdjust); - } - radius -= segWidth; - } - } - - void draw() { - // nothing happens here - } - - void mouseReleased() { - // get the color of the mouse position's pixel: - color targetColor = get(mouseX, mouseY); - // get the component values: - int r = int(red(targetColor)); - int g = int(green(targetColor)); - int b = int(blue(targetColor)); - // make a comma-separated string: - String colorString = r + "," + g + "," + b + "\n"; - // send it out the serial port: - myPort.write(colorString ); - } - -*/ - - - - - - - - - - From cde3a14087040d57b37b9fa2c0668ce759628b74 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Fri, 4 Sep 2015 10:03:40 +0200 Subject: [PATCH 022/123] fix OUT endpoints was using only lower 8 bits of configuration registers --- hardware/arduino/sam/cores/arduino/USB/PluggableUSB.h | 2 +- hardware/arduino/sam/libraries/HID/HID.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hardware/arduino/sam/cores/arduino/USB/PluggableUSB.h b/hardware/arduino/sam/cores/arduino/USB/PluggableUSB.h index 20590055094..502da9ebcf0 100644 --- a/hardware/arduino/sam/cores/arduino/USB/PluggableUSB.h +++ b/hardware/arduino/sam/cores/arduino/USB/PluggableUSB.h @@ -32,7 +32,7 @@ typedef struct __attribute__((packed)) int (*getDescriptor)(int8_t t); int8_t numEndpoints; int8_t numInterfaces; - uint8_t *endpointType; + uint32_t *endpointType; } PUSBCallbacks; typedef struct diff --git a/hardware/arduino/sam/libraries/HID/HID.cpp b/hardware/arduino/sam/libraries/HID/HID.cpp index d704bc88320..935039096d5 100644 --- a/hardware/arduino/sam/libraries/HID/HID.cpp +++ b/hardware/arduino/sam/libraries/HID/HID.cpp @@ -144,7 +144,7 @@ bool HID_Setup(USBSetup& setup, uint8_t i) HID_::HID_(void) { - static uint8_t endpointType[1]; + static uint32_t endpointType[1]; endpointType[0] = EP_TYPE_INTERRUPT_IN; From 548970be2236cba38f75e6a2c086d1bf68f356dd Mon Sep 17 00:00:00 2001 From: Federico Fissore Date: Tue, 8 Sep 2015 15:30:34 +0200 Subject: [PATCH 023/123] Libraries in unknown categories get set as Uncategorized. Fixes #3732 --- arduino-core/src/cc/arduino/Constants.java | 3 +++ .../libraries/LibrariesIndexer.java | 3 ++- .../processing/app/packages/UserLibrary.java | 18 ++---------------- 3 files changed, 7 insertions(+), 17 deletions(-) diff --git a/arduino-core/src/cc/arduino/Constants.java b/arduino-core/src/cc/arduino/Constants.java index d6bfe48d90a..6cc47c83a29 100644 --- a/arduino-core/src/cc/arduino/Constants.java +++ b/arduino-core/src/cc/arduino/Constants.java @@ -65,6 +65,9 @@ public class Constants { public static final String LIBRARY_INDEX_URL; public static final String LIBRARY_INDEX_URL_GZ; + public static final List LIBRARY_CATEGORIES = Arrays.asList("Display", "Communication", "Signal Input/Output", "Sensors", "Device Control", "Timing", "Data Storage", "Data Processing", "Other", "Uncategorized"); + public static final List LIBRARY_MANDATORY_PROPERTIES = Arrays.asList("name", "version", "author", "maintainer", "sentence", "paragraph", "url"); + static { String extenalPackageIndexUrl = System.getProperty("PACKAGE_INDEX_URL"); if (extenalPackageIndexUrl != null && !"".equals(extenalPackageIndexUrl)) { diff --git a/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndexer.java b/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndexer.java index 47c27121b82..5e7cb28a7ba 100644 --- a/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndexer.java +++ b/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndexer.java @@ -29,6 +29,7 @@ package cc.arduino.contributions.libraries; +import cc.arduino.Constants; import cc.arduino.contributions.libraries.filters.LibraryInstalledInsideCore; import cc.arduino.contributions.libraries.filters.TypePredicate; import cc.arduino.contributions.packages.ContributedPlatform; @@ -92,7 +93,7 @@ private void parseIndex(File indexFile) throws IOException { index.getLibraries() .stream() - .filter(library -> library.getCategory() == null || "".equals(library.getCategory())) + .filter(library -> library.getCategory() == null || "".equals(library.getCategory()) || !Constants.LIBRARY_CATEGORIES.contains(library.getCategory())) .forEach(library -> library.setCategory("Uncategorized")); } finally { IOUtils.closeQuietly(indexIn); diff --git a/arduino-core/src/processing/app/packages/UserLibrary.java b/arduino-core/src/processing/app/packages/UserLibrary.java index d8bfce03a13..10d5d64e6f3 100644 --- a/arduino-core/src/processing/app/packages/UserLibrary.java +++ b/arduino-core/src/processing/app/packages/UserLibrary.java @@ -39,7 +39,6 @@ import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; -import java.util.Arrays; import java.util.LinkedList; import java.util.List; @@ -59,15 +58,6 @@ public class UserLibrary extends ContributedLibrary { private List declaredTypes; private boolean onGoingDevelopment; - private static final List MANDATORY_PROPERTIES = Arrays - .asList("name", "version", "author", "maintainer", - "sentence", "paragraph", "url"); - - private static final List CATEGORIES = Arrays.asList( - "Display", "Communication", "Signal Input/Output", "Sensors", - "Device Control", "Timing", "Data Storage", "Data Processing", "Other", - "Uncategorized"); - public static UserLibrary create(File libFolder) throws IOException { // Parse metadata File propertiesFile = new File(libFolder, "library.properties"); @@ -90,7 +80,7 @@ public static UserLibrary create(File libFolder) throws IOException { throw new IOException("'arch' folder is no longer supported! See http://goo.gl/gfFJzU for more information"); // Check mandatory properties - for (String p : MANDATORY_PROPERTIES) + for (String p : Constants.LIBRARY_MANDATORY_PROPERTIES) if (!properties.containsKey(p)) throw new IOException("Missing '" + p + "' from library"); @@ -135,7 +125,7 @@ public static UserLibrary create(File libFolder) throws IOException { String category = properties.get("category"); if (category == null) category = "Uncategorized"; - if (!CATEGORIES.contains(category)) { + if (!Constants.LIBRARY_CATEGORIES.contains(category)) { System.out.println("WARNING: Category '" + category + "' in library " + properties.get("name") + " is not valid. Setting to 'Uncategorized'"); category = "Uncategorized"; } @@ -222,10 +212,6 @@ public String getLicense() { return license; } - public static List getCategories() { - return CATEGORIES; - } - @Override public void setCategory(String category) { this.category = category; From 438bf5adbc5d9507661346f1425087ac5a659f7e Mon Sep 17 00:00:00 2001 From: Federico Fissore Date: Tue, 8 Sep 2015 16:25:09 +0200 Subject: [PATCH 024/123] Code cleanup SerialPlotter now uses min/2 and max*2 instead of plain min and max Ticks works also when min == max Fixes #3767 --- app/src/processing/app/SerialPlotter.java | 160 ++++++++---------- .../app/helpers/CircularBuffer.java | 53 +++--- app/src/processing/app/helpers/Ticks.java | 39 +++-- 3 files changed, 121 insertions(+), 131 deletions(-) diff --git a/app/src/processing/app/SerialPlotter.java b/app/src/processing/app/SerialPlotter.java index 8497fcaf313..0ff7ff2d467 100644 --- a/app/src/processing/app/SerialPlotter.java +++ b/app/src/processing/app/SerialPlotter.java @@ -19,23 +19,24 @@ package processing.app; import cc.arduino.packages.BoardPort; +import processing.app.helpers.CircularBuffer; +import processing.app.helpers.Ticks; import processing.app.legacy.PApplet; -import processing.app.helpers.*; -import static processing.app.I18n.tr; - -import java.awt.*; -import java.awt.event.*; -import java.awt.geom.*; import javax.swing.*; -import javax.swing.border.*; +import javax.swing.border.EmptyBorder; +import java.awt.*; +import java.awt.event.ActionListener; +import java.awt.geom.AffineTransform; +import java.awt.geom.Rectangle2D; + +import static processing.app.I18n.tr; public class SerialPlotter extends AbstractMonitor { - private StringBuffer messageBuffer; - private CircularBuffer buffer; - private GraphPanel graphPanel; - private JComboBox serialRates; + private final StringBuffer messageBuffer; + private CircularBuffer buffer; + private JComboBox serialRates; private Serial serial; private int serialRate; @@ -43,30 +44,30 @@ private class GraphPanel extends JPanel { private double minY, maxY, rangeY; private Rectangle bounds; private int xOffset; - private Font font; - private Color graphColor; - + private final Font font; + private final Color graphColor; + public GraphPanel() { font = Theme.getFont("console.font"); graphColor = Theme.getColor("header.bgcolor"); xOffset = 20; } - + @Override public void paintComponent(Graphics g1) { - Graphics2D g = (Graphics2D)g1; + Graphics2D g = (Graphics2D) g1; g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g.setFont(font); super.paintComponent(g); - + bounds = g.getClipBounds(); setBackground(Color.WHITE); - if(buffer.isEmpty()) { + if (buffer.isEmpty()) { return; } - - minY = buffer.min(); - maxY = buffer.max(); + + minY = buffer.min() / 2; + maxY = buffer.max() * 2; Ticks ticks = new Ticks(minY, maxY, 3); minY = Math.min(minY, ticks.getTick(0)); maxY = Math.max(maxY, ticks.getTick(ticks.getTickCount() - 1)); @@ -77,45 +78,45 @@ public void paintComponent(Graphics g1) { g.setStroke(new BasicStroke(1.0f)); FontMetrics fm = g.getFontMetrics(); - for(int i = 0; i < ticks.getTickCount(); ++i) { + for (int i = 0; i < ticks.getTickCount(); ++i) { double tick = ticks.getTick(i); Rectangle2D fRect = fm.getStringBounds(String.valueOf(tick), g); - xOffset = Math.max(xOffset, (int)fRect.getWidth() + 15); + xOffset = Math.max(xOffset, (int) fRect.getWidth() + 15); // draw tick - g.drawLine(xOffset - 5, (int)transformY(tick), xOffset + 2, (int)transformY(tick)); + g.drawLine(xOffset - 5, (int) transformY(tick), xOffset + 2, (int) transformY(tick)); // draw tick label - g.drawString(String.valueOf(tick), xOffset - (int)fRect.getWidth() - 10, transformY(tick) - (float)fRect.getHeight() * 0.5f + fm.getAscent()); + g.drawString(String.valueOf(tick), xOffset - (int) fRect.getWidth() - 10, transformY(tick) - (float) fRect.getHeight() * 0.5f + fm.getAscent()); } g.drawLine(bounds.x + xOffset, bounds.y + 5, bounds.x + xOffset, bounds.y + bounds.height - 10); - - g.setTransform(AffineTransform.getTranslateInstance(xOffset, 0)); - float xstep = (float)(bounds.width - xOffset) / (float)buffer.capacity(); - + + g.setTransform(AffineTransform.getTranslateInstance(xOffset, 0)); + float xstep = (float) (bounds.width - xOffset) / (float) buffer.capacity(); + g.setColor(graphColor); g.setStroke(new BasicStroke(0.75f)); - - for(int i = 0; i < buffer.size() - 1; ++i) { + + for (int i = 0; i < buffer.size() - 1; ++i) { g.drawLine( - (int)(i * xstep), (int)transformY(buffer.get(i)), - (int)((i + 1) * xstep), (int)transformY(buffer.get(i + 1)) + (int) (i * xstep), (int) transformY(buffer.get(i)), + (int) ((i + 1) * xstep), (int) transformY(buffer.get(i + 1)) ); } } - + @Override public Dimension getMinimumSize() { return new Dimension(200, 100); } - + @Override public Dimension getPreferredSize() { return new Dimension(500, 250); } - + private float transformY(double rawY) { - return (float)(5 + (bounds.height - 10) * (1.0 - (rawY - minY) / rangeY)); + return (float) (5 + (bounds.height - 10) * (1.0 - (rawY - minY) / rangeY)); } } @@ -124,93 +125,80 @@ public SerialPlotter(BoardPort port) { serialRate = PreferencesData.getInteger("serial.debug_rate"); serialRates.setSelectedItem(serialRate + " " + tr("baud")); - onSerialRateChange(new ActionListener() { - public void actionPerformed(ActionEvent event) { - String wholeString = (String) serialRates.getSelectedItem(); - String rateString = wholeString.substring(0, wholeString.indexOf(' ')); - serialRate = Integer.parseInt(rateString); - PreferencesData.set("serial.debug_rate", rateString); - try { - close(); - Thread.sleep(100); // Wait for serial port to properly close - open(); - } catch (InterruptedException e) { - // noop - } catch (Exception e) { - System.err.println(e); - } + onSerialRateChange(event -> { + String wholeString = (String) serialRates.getSelectedItem(); + String rateString = wholeString.substring(0, wholeString.indexOf(' ')); + serialRate = Integer.parseInt(rateString); + PreferencesData.set("serial.debug_rate", rateString); + try { + close(); + Thread.sleep(100); // Wait for serial port to properly close + open(); + } catch (Exception e) { + // ignore } }); messageBuffer = new StringBuffer(); } - + protected void onCreateWindow(Container mainPane) { mainPane.setLayout(new BorderLayout()); - - Font consoleFont = Theme.getFont("console.font"); - Font editorFont = PreferencesData.getFont("editor.font"); - Font font = new Font(consoleFont.getName(), consoleFont.getStyle(), editorFont.getSize()); - + buffer = new CircularBuffer(500); - graphPanel = new GraphPanel(); - + GraphPanel graphPanel = new GraphPanel(); + mainPane.add(graphPanel, BorderLayout.CENTER); - + JPanel pane = new JPanel(); pane.setLayout(new BoxLayout(pane, BoxLayout.X_AXIS)); pane.setBorder(new EmptyBorder(4, 4, 4, 4)); - - serialRates = new JComboBox(); - for (int i = 0; i < serialRateStrings.length; i++) - serialRates.addItem(serialRateStrings[i] + " " + tr("baud")); - + + serialRates = new JComboBox<>(); + for (String serialRateString : serialRateStrings) serialRates.addItem(serialRateString + " " + tr("baud")); + serialRates.setMaximumSize(serialRates.getMinimumSize()); pane.add(Box.createRigidArea(new Dimension(8, 0))); pane.add(serialRates); - + mainPane.add(pane, BorderLayout.SOUTH); } - - protected void onEnableWindow(boolean enable) - { - serialRates.setEnabled(enable); + + protected void onEnableWindow(boolean enable) { + serialRates.setEnabled(enable); } - - public void onSerialRateChange(ActionListener listener) { + + private void onSerialRateChange(ActionListener listener) { serialRates.addActionListener(listener); } - + public void message(final String s) { messageBuffer.append(s); - while(true) { + while (true) { int linebreak = messageBuffer.indexOf("\n"); - if(linebreak == -1) { + if (linebreak == -1) { break; } - + String line = messageBuffer.substring(0, linebreak); line = line.trim(); messageBuffer.delete(0, linebreak + 1); - + try { double value = Double.valueOf(line); buffer.add(value); - } catch(NumberFormatException e) { - continue; // ignore lines that can't be cast to a number + } catch (NumberFormatException e) { + // ignore } } - SwingUtilities.invokeLater(new Runnable() { - public void run() { - SerialPlotter.this.repaint(); - }}); + SwingUtilities.invokeLater(SerialPlotter.this::repaint); } - + public void open() throws Exception { super.open(); - + if (serial != null) return; serial = new Serial(getBoardPort().getAddress(), serialRate) { diff --git a/app/src/processing/app/helpers/CircularBuffer.java b/app/src/processing/app/helpers/CircularBuffer.java index 6239822042d..8396c8fd2e1 100644 --- a/app/src/processing/app/helpers/CircularBuffer.java +++ b/app/src/processing/app/helpers/CircularBuffer.java @@ -3,77 +3,74 @@ import java.util.NoSuchElementException; public class CircularBuffer { - private double[] elements; + + private final double[] elements; private int start = -1; private int end = -1; - private int capacity; - + private final int capacity; + public void add(double num) { end = (end + 1) % capacity; elements[end] = num; - if(start == end || start == -1) { + if (start == end || start == -1) { start = (start + 1) % capacity; } } - + public double get(int index) { - if(index >= capacity) { + if (index >= capacity) { throw new IndexOutOfBoundsException(); } - if(index >= size()) { + if (index >= size()) { throw new IndexOutOfBoundsException(); } - + return elements[(start + index) % capacity]; } - + public boolean isEmpty() { return start == -1 && end == -1; } - - public void clear() { - start = end = -1; - } - + public CircularBuffer(int capacity) { this.capacity = capacity; elements = new double[capacity]; } - + public double min() { - if(size() == 0) { + if (size() == 0) { throw new NoSuchElementException(); } - + double out = get(0); - for(int i = 1; i < size(); ++i) { + for (int i = 1; i < size(); ++i) { out = Math.min(out, get(i)); } - + return out; } - + public double max() { - if(size() == 0) { + if (size() == 0) { throw new NoSuchElementException(); } - + double out = get(0); - for(int i = 1; i < size(); ++i) { + for (int i = 1; i < size(); ++i) { out = Math.max(out, get(i)); } - + return out; } - + public int size() { - if(end == -1) { + if (end == -1) { return 0; } - + return (end - start + capacity) % capacity + 1; } - + public int capacity() { return capacity; } diff --git a/app/src/processing/app/helpers/Ticks.java b/app/src/processing/app/helpers/Ticks.java index a4b32a2c310..e9e9e842a04 100644 --- a/app/src/processing/app/helpers/Ticks.java +++ b/app/src/processing/app/helpers/Ticks.java @@ -1,45 +1,50 @@ package processing.app.helpers; public class Ticks { + + private final int tickCount; + private final double[] ticks; private double tickMin; private double tickMax; private double tickStep; - private int tickCount; - - private double[] ticks; - - public Ticks(double min, double max, int tickCount) { + + public Ticks(double min, double max, int tickCount) { double range = max - min; - double exp = Math.floor(Math.log10(range / (tickCount - 1))); + double exp; + if (range == 0.0) { + exp = 0; + } else { + exp = Math.floor(Math.log10(range / (tickCount - 1))); + } double scale = Math.pow(10, exp); - + double rawTickStep = (range / (tickCount - 1)) / scale; - for(double potentialStep : new double[] {1.0, 1.5, 2.0, 2.5, 3.0, 4.0, 5.0, 6.0, 8.0, 10.0}) { - if(potentialStep < rawTickStep) { + for (double potentialStep : new double[]{1.0, 1.5, 2.0, 2.5, 3.0, 4.0, 5.0, 6.0, 8.0, 10.0}) { + if (potentialStep < rawTickStep) { continue; } - + tickStep = potentialStep * scale; tickMin = tickStep * Math.floor(min / tickStep); tickMax = tickMin + tickStep * (tickCount - 1); - if(tickMax >= max) { + if (tickMax >= max) { break; } } - - tickCount -= (int)Math.floor((tickMax - max) / tickStep); + + tickCount -= (int) Math.floor((tickMax - max) / tickStep); this.tickCount = tickCount; - + ticks = new double[tickCount]; - for(int i = 0; i < tickCount; ++i) { + for (int i = 0; i < tickCount; ++i) { ticks[i] = tickMin + i * tickStep; } } - + public double getTick(int i) { return ticks[i]; } - + public int getTickCount() { return tickCount; } From 48f8c64d5a8fa2549a9408b7376f90b156dfd305 Mon Sep 17 00:00:00 2001 From: Federico Fissore Date: Tue, 8 Sep 2015 17:41:33 +0200 Subject: [PATCH 025/123] Editor is now able to find a commented line even if // was not written at its beginning. Fixes #3513 --- .../app/syntax/SketchTextAreaEditorKit.java | 103 +++++++++++++++++- 1 file changed, 102 insertions(+), 1 deletion(-) diff --git a/app/src/processing/app/syntax/SketchTextAreaEditorKit.java b/app/src/processing/app/syntax/SketchTextAreaEditorKit.java index b1c03e9600d..41379ae0b0a 100644 --- a/app/src/processing/app/syntax/SketchTextAreaEditorKit.java +++ b/app/src/processing/app/syntax/SketchTextAreaEditorKit.java @@ -1,5 +1,6 @@ package processing.app.syntax; +import org.fife.ui.rsyntaxtextarea.RSyntaxDocument; import org.fife.ui.rsyntaxtextarea.RSyntaxTextAreaEditorKit; import org.fife.ui.rtextarea.RTextArea; import org.fife.ui.rtextarea.RecordableTextAction; @@ -16,7 +17,8 @@ public class SketchTextAreaEditorKit extends RSyntaxTextAreaEditorKit { private static final Action[] defaultActions = { new DeleteNextWordAction(), new DeleteLineToCursorAction(), - new SelectWholeLineAction() + new SelectWholeLineAction(), + new ToggleCommentAction() }; @Override @@ -126,4 +128,103 @@ public final String getMacroID() { } + public static class ToggleCommentAction extends RecordableTextAction { + + public ToggleCommentAction() { + super(rstaToggleCommentAction); + } + + @Override + public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { + + if (!textArea.isEditable() || !textArea.isEnabled()) { + UIManager.getLookAndFeel().provideErrorFeedback(textArea); + return; + } + + RSyntaxDocument doc = (RSyntaxDocument) textArea.getDocument(); + Element map = doc.getDefaultRootElement(); + Caret c = textArea.getCaret(); + int dot = c.getDot(); + int mark = c.getMark(); + int line1 = map.getElementIndex(dot); + int line2 = map.getElementIndex(mark); + int start = Math.min(line1, line2); + int end = Math.max(line1, line2); + + org.fife.ui.rsyntaxtextarea.Token t = doc.getTokenListForLine(start); + int languageIndex = t != null ? t.getLanguageIndex() : 0; + String[] startEnd = doc.getLineCommentStartAndEnd(languageIndex); + + if (startEnd == null) { + UIManager.getLookAndFeel().provideErrorFeedback(textArea); + return; + } + + // Don't toggle comment on last line if there is no + // text selected on it. + if (start != end) { + Element elem = map.getElement(end); + if (Math.max(dot, mark) == elem.getStartOffset()) { + end--; + } + } + + textArea.beginAtomicEdit(); + try { + boolean add = getDoAdd(doc, map, start, end, startEnd); + for (line1 = start; line1 <= end; line1++) { + Element elem = map.getElement(line1); + handleToggleComment(elem, doc, startEnd, add); + } + } catch (BadLocationException ble) { + ble.printStackTrace(); + UIManager.getLookAndFeel().provideErrorFeedback(textArea); + } finally { + textArea.endAtomicEdit(); + } + + } + + private boolean getDoAdd(Document doc, Element map, int startLine, int endLine, String[] startEnd) throws BadLocationException { + boolean doAdd = false; + for (int i = startLine; i <= endLine; i++) { + Element elem = map.getElement(i); + int start = elem.getStartOffset(); + String t = doc.getText(start, elem.getEndOffset() - start - 1).trim(); + if (!t.startsWith(startEnd[0]) || + (startEnd[1] != null && !t.endsWith(startEnd[1]))) { + doAdd = true; + break; + } + } + return doAdd; + } + + private void handleToggleComment(Element elem, Document doc, String[] startEnd, boolean add) throws BadLocationException { + int start = elem.getStartOffset(); + int end = elem.getEndOffset() - 1; + if (add) { + doc.insertString(start, startEnd[0], null); + if (startEnd[1] != null) { + doc.insertString(end + startEnd[0].length(), startEnd[1], null); + } + } else { + String text = doc.getText(start, elem.getEndOffset() - start - 1); + start += text.indexOf(startEnd[0]); + doc.remove(start, startEnd[0].length()); + if (startEnd[1] != null) { + int temp = startEnd[1].length(); + doc.remove(end - startEnd[0].length() - temp, temp); + } + } + } + + @Override + public final String getMacroID() { + return rstaToggleCommentAction; + } + + } + } From 90f7290b0779ea2f5520f89cdb972b39ce0e6142 Mon Sep 17 00:00:00 2001 From: Federico Fissore Date: Wed, 9 Sep 2015 11:21:22 +0200 Subject: [PATCH 026/123] Proxy selection was using old logic when url resulted in 302 --- arduino-core/src/cc/arduino/utils/network/FileDownloader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arduino-core/src/cc/arduino/utils/network/FileDownloader.java b/arduino-core/src/cc/arduino/utils/network/FileDownloader.java index 73e9ec5fedc..76da4dedd43 100644 --- a/arduino-core/src/cc/arduino/utils/network/FileDownloader.java +++ b/arduino-core/src/cc/arduino/utils/network/FileDownloader.java @@ -145,7 +145,7 @@ public void download() throws InterruptedException { if (resp == HttpURLConnection.HTTP_MOVED_PERM || resp == HttpURLConnection.HTTP_MOVED_TEMP) { URL newUrl = new URL(connection.getHeaderField("Location")); - proxy = ProxySelector.getDefault().select(newUrl.toURI()).get(0); + proxy = new CustomProxySelector(PreferencesData.getMap()).getProxyFor(newUrl.toURI()); // open the new connnection again connection = (HttpURLConnection) newUrl.openConnection(proxy); From 4e1f6560d22dc059e8daf77f473d9a5e173d49fa Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Mon, 24 Aug 2015 10:54:24 +0200 Subject: [PATCH 027/123] Fixed DNSClient::inet_aton function. Fixes #2500 --- libraries/Ethernet/src/Dns.cpp | 70 +++++++++++++--------------------- 1 file changed, 26 insertions(+), 44 deletions(-) diff --git a/libraries/Ethernet/src/Dns.cpp b/libraries/Ethernet/src/Dns.cpp index 62e36f8a335..aa9ad03a4de 100644 --- a/libraries/Ethernet/src/Dns.cpp +++ b/libraries/Ethernet/src/Dns.cpp @@ -55,64 +55,46 @@ void DNSClient::begin(const IPAddress& aDNSServer) } -int DNSClient::inet_aton(const char* aIPAddrString, IPAddress& aResult) +int DNSClient::inet_aton(const char* addr, IPAddress& result) { - // See if we've been given a valid IP address - const char* p =aIPAddrString; - while (*p && - ( (*p == '.') || (*p >= '0') || (*p <= '9') )) - { - p++; - } + // TODO: add support for "a", "a.b", "a.b.c" formats + + uint16_t acc = 0; // Accumulator + uint8_t dots = 0; - if (*p == '\0') + while (*address) { - // It's looking promising, we haven't found any invalid characters - p = aIPAddrString; - int segment =0; - int segmentValue =0; - while (*p && (segment < 4)) + char c = *address++; + if (c >= '0' && c <= '9') { - if (*p == '.') - { - // We've reached the end of a segment - if (segmentValue > 255) - { - // You can't have IP address segments that don't fit in a byte - return 0; - } - else - { - aResult[segment] = (byte)segmentValue; - segment++; - segmentValue = 0; - } + acc = acc * 10 + (c - '0'); + if (acc > 255) { + // Value out of [0..255] range + return 0; } - else - { - // Next digit - segmentValue = (segmentValue*10)+(*p - '0'); - } - p++; } - // We've reached the end of address, but there'll still be the last - // segment to deal with - if ((segmentValue > 255) || (segment > 3)) + else if (c == '.') { - // You can't have IP address segments that don't fit in a byte, - // or more than four segments - return 0; + if (dots == 3) { + // Too much dots (there must be 3 dots) + return 0; + } + result[dots++] = acc; + acc = 0; } else { - aResult[segment] = (byte)segmentValue; - return 1; + // Invalid char + return 0; } } - else - { + + if (dots != 3) { + // Too few dots (there must be 3 dots) return 0; } + result[3] = acc; + return 1; } int DNSClient::getHostByName(const char* aHostname, IPAddress& aResult) From 8b8796e88ae2eeeb5a5e4dcb1482ca42f3748a4c Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Wed, 9 Sep 2015 11:52:33 +0200 Subject: [PATCH 028/123] Added IPAddress::fromString(....) function --- .../arduino/avr/cores/arduino/IPAddress.cpp | 42 +++++++++++++++++++ .../arduino/avr/cores/arduino/IPAddress.h | 4 +- .../arduino/sam/cores/arduino/IPAddress.cpp | 42 +++++++++++++++++++ .../arduino/sam/cores/arduino/IPAddress.h | 4 +- 4 files changed, 90 insertions(+), 2 deletions(-) diff --git a/hardware/arduino/avr/cores/arduino/IPAddress.cpp b/hardware/arduino/avr/cores/arduino/IPAddress.cpp index 899cbd4eda8..76aefa8b21f 100644 --- a/hardware/arduino/avr/cores/arduino/IPAddress.cpp +++ b/hardware/arduino/avr/cores/arduino/IPAddress.cpp @@ -43,6 +43,48 @@ IPAddress::IPAddress(const uint8_t *address) memcpy(_address.bytes, address, sizeof(_address.bytes)); } +bool IPAddress::fromString(const char *address) +{ + // TODO: add support for "a", "a.b", "a.b.c" formats + + uint16_t acc = 0; // Accumulator + uint8_t dots = 0; + + while (*address) + { + char c = *address++; + if (c >= '0' && c <= '9') + { + acc = acc * 10 + (c - '0'); + if (acc > 255) { + // Value out of [0..255] range + return false; + } + } + else if (c == '.') + { + if (dots == 3) { + // Too much dots (there must be 3 dots) + return false; + } + _address.bytes[dots++] = acc; + acc = 0; + } + else + { + // Invalid char + return false; + } + } + + if (dots != 3) { + // Too few dots (there must be 3 dots) + return false; + } + _address.bytes[3] = acc; + return true; +} + IPAddress& IPAddress::operator=(const uint8_t *address) { memcpy(_address.bytes, address, sizeof(_address.bytes)); diff --git a/hardware/arduino/avr/cores/arduino/IPAddress.h b/hardware/arduino/avr/cores/arduino/IPAddress.h index 94acdc45668..b20ab58afa6 100644 --- a/hardware/arduino/avr/cores/arduino/IPAddress.h +++ b/hardware/arduino/avr/cores/arduino/IPAddress.h @@ -45,6 +45,9 @@ class IPAddress : public Printable { IPAddress(uint32_t address); IPAddress(const uint8_t *address); + bool fromString(const char *address); + bool fromString(const String &address) { return fromString(address.c_str()); } + // Overloaded cast operator to allow IPAddress objects to be used where a pointer // to a four-byte uint8_t array is expected operator uint32_t() const { return _address.dword; }; @@ -71,5 +74,4 @@ class IPAddress : public Printable { const IPAddress INADDR_NONE(0,0,0,0); - #endif diff --git a/hardware/arduino/sam/cores/arduino/IPAddress.cpp b/hardware/arduino/sam/cores/arduino/IPAddress.cpp index 899cbd4eda8..76aefa8b21f 100644 --- a/hardware/arduino/sam/cores/arduino/IPAddress.cpp +++ b/hardware/arduino/sam/cores/arduino/IPAddress.cpp @@ -43,6 +43,48 @@ IPAddress::IPAddress(const uint8_t *address) memcpy(_address.bytes, address, sizeof(_address.bytes)); } +bool IPAddress::fromString(const char *address) +{ + // TODO: add support for "a", "a.b", "a.b.c" formats + + uint16_t acc = 0; // Accumulator + uint8_t dots = 0; + + while (*address) + { + char c = *address++; + if (c >= '0' && c <= '9') + { + acc = acc * 10 + (c - '0'); + if (acc > 255) { + // Value out of [0..255] range + return false; + } + } + else if (c == '.') + { + if (dots == 3) { + // Too much dots (there must be 3 dots) + return false; + } + _address.bytes[dots++] = acc; + acc = 0; + } + else + { + // Invalid char + return false; + } + } + + if (dots != 3) { + // Too few dots (there must be 3 dots) + return false; + } + _address.bytes[3] = acc; + return true; +} + IPAddress& IPAddress::operator=(const uint8_t *address) { memcpy(_address.bytes, address, sizeof(_address.bytes)); diff --git a/hardware/arduino/sam/cores/arduino/IPAddress.h b/hardware/arduino/sam/cores/arduino/IPAddress.h index 94acdc45668..b20ab58afa6 100644 --- a/hardware/arduino/sam/cores/arduino/IPAddress.h +++ b/hardware/arduino/sam/cores/arduino/IPAddress.h @@ -45,6 +45,9 @@ class IPAddress : public Printable { IPAddress(uint32_t address); IPAddress(const uint8_t *address); + bool fromString(const char *address); + bool fromString(const String &address) { return fromString(address.c_str()); } + // Overloaded cast operator to allow IPAddress objects to be used where a pointer // to a four-byte uint8_t array is expected operator uint32_t() const { return _address.dword; }; @@ -71,5 +74,4 @@ class IPAddress : public Printable { const IPAddress INADDR_NONE(0,0,0,0); - #endif From f8d88e028e1fee33f97d80faf13c21faa06346c4 Mon Sep 17 00:00:00 2001 From: Federico Fissore Date: Fri, 11 Sep 2015 14:02:16 +0200 Subject: [PATCH 029/123] Boards Manager: if a tool is not resolvable, print a warning and DON'T add a null ref --- .../cc/arduino/contributions/packages/ContributedPlatform.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/arduino-core/src/cc/arduino/contributions/packages/ContributedPlatform.java b/arduino-core/src/cc/arduino/contributions/packages/ContributedPlatform.java index 894801fad29..464650bba0c 100644 --- a/arduino-core/src/cc/arduino/contributions/packages/ContributedPlatform.java +++ b/arduino-core/src/cc/arduino/contributions/packages/ContributedPlatform.java @@ -78,8 +78,9 @@ public void resolveToolsDependencies(Collection packages) { ContributedTool tool = dep.resolve(packages); if (tool == null) { System.err.println("Index error: could not find referenced tool " + dep); + } else { + resolvedTools.add(tool); } - resolvedTools.add(tool); } } From aed2d2da113af8e9c8b2f4e13a5a73c465270284 Mon Sep 17 00:00:00 2001 From: Federico Fissore Date: Mon, 14 Sep 2015 09:08:10 +0200 Subject: [PATCH 030/123] Removed spourious arduino-builder folder --- arduino-builder/.classpath | 8 -------- arduino-builder/.project | 17 ----------------- .../.settings/org.eclipse.jdt.core.prefs | 11 ----------- .../cc/arduino/builder/ArduinoBuilder.class | Bin 519 -> 0 bytes .../src/cc/arduino/builder/ArduinoBuilder.java | 11 ----------- 5 files changed, 47 deletions(-) delete mode 100644 arduino-builder/.classpath delete mode 100644 arduino-builder/.project delete mode 100644 arduino-builder/.settings/org.eclipse.jdt.core.prefs delete mode 100644 arduino-builder/bin/cc/arduino/builder/ArduinoBuilder.class delete mode 100644 arduino-builder/src/cc/arduino/builder/ArduinoBuilder.java diff --git a/arduino-builder/.classpath b/arduino-builder/.classpath deleted file mode 100644 index 3e1f72898d0..00000000000 --- a/arduino-builder/.classpath +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/arduino-builder/.project b/arduino-builder/.project deleted file mode 100644 index 1e4da7c5f2b..00000000000 --- a/arduino-builder/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - arduino-builder - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/arduino-builder/.settings/org.eclipse.jdt.core.prefs b/arduino-builder/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 8000cd6ca61..00000000000 --- a/arduino-builder/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,11 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.6 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.6 diff --git a/arduino-builder/bin/cc/arduino/builder/ArduinoBuilder.class b/arduino-builder/bin/cc/arduino/builder/ArduinoBuilder.class deleted file mode 100644 index c704729744299d20550e72275515cf40376a850b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 519 zcmah_!A`0;o@mqHn^m;&9*iEmM4t|KfsSN zPAQR)n0T3)H#7U*+xhzb_yllNNX@SbJSdXc zobr2bCjFG5dZ9v$72TLI+{oeWz=m{P-SSiDwM-)?n(V1yg)Lv+{hQfSZI~w zWz$HXRKjrN{%fR9B6FcahIa4KT^SmsT7}boZo;~G@nxKsP@pIKEpo65)OU Date: Mon, 14 Sep 2015 09:13:08 +0200 Subject: [PATCH 031/123] Update translations --- .../processing/app/i18n/Resources_en_GB.po | 40 +++++++++---------- .../app/i18n/Resources_en_GB.properties | 38 +++++++++--------- .../src/processing/app/i18n/Resources_es.po | 22 +++++----- .../app/i18n/Resources_es.properties | 20 +++++----- .../src/processing/app/i18n/Resources_in.po | 7 ++-- .../src/processing/app/i18n/Resources_pl.po | 22 +++++----- .../app/i18n/Resources_pl.properties | 22 +++++----- .../processing/app/i18n/Resources_pt_BR.po | 27 +++++++------ .../app/i18n/Resources_pt_BR.properties | 25 ++++++------ .../src/processing/app/i18n/Resources_ro.po | 4 +- .../app/i18n/Resources_ro.properties | 2 +- 11 files changed, 116 insertions(+), 113 deletions(-) diff --git a/arduino-core/src/processing/app/i18n/Resources_en_GB.po b/arduino-core/src/processing/app/i18n/Resources_en_GB.po index 50333b0a2c1..ee9808b5408 100644 --- a/arduino-core/src/processing/app/i18n/Resources_en_GB.po +++ b/arduino-core/src/processing/app/i18n/Resources_en_GB.po @@ -12,8 +12,8 @@ msgstr "" "Project-Id-Version: Arduino IDE 1.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-03-29 10:24-0400\n" -"PO-Revision-Date: 2015-08-24 14:35+0000\n" -"Last-Translator: Federico Fissore \n" +"PO-Revision-Date: 2015-08-28 22:54+0000\n" +"Last-Translator: Andi Chandler \n" "Language-Team: English (United Kingdom) (http://www.transifex.com/mbanzi/arduino-ide-15/language/en_GB/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -64,18 +64,18 @@ msgstr ".pde -> .ino" #: ../../../../../app/src/cc/arduino/contributions/ContributionsSelfCheck.java:64 #, java-format msgid "
Update available for some of your {0}boards{1}" -msgstr "" +msgstr "
Update available for some of your {0}boards{1}" #: ../../../../../app/src/cc/arduino/contributions/ContributionsSelfCheck.java:66 #, java-format msgid "" "
Update available for some of your {0}boards{1} and {2}libraries{3}" -msgstr "" +msgstr "
Update available for some of your {0}boards{1} and {2}libraries{3}" #: ../../../../../app/src/cc/arduino/contributions/ContributionsSelfCheck.java:62 #, java-format msgid "
Update available for some of your {0}libraries{1}" -msgstr "" +msgstr "
Update available for some of your {0}libraries{1}" #: Editor.java:2053 msgid "" @@ -289,11 +289,11 @@ msgstr "Auto Format finished." #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:457 msgid "Auto-detect proxy settings" -msgstr "" +msgstr "Auto-detect proxy settings" #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:474 msgid "Automatic proxy configuration URL:" -msgstr "" +msgstr "Automatic proxy configuration URL:" #: SerialMonitor.java:110 msgid "Autoscroll" @@ -1051,7 +1051,7 @@ msgstr "Hindi" #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:489 msgid "Host name:" -msgstr "" +msgstr "Host name:" #: Sketch.java:295 msgid "" @@ -1170,7 +1170,7 @@ msgstr "Latvian" #: ../../../../../app/src/cc/arduino/contributions/libraries/ui/LibraryManagerUI.java:93 msgid "Library Manager" -msgstr "" +msgstr "Library Manager" #: ../../../../../app/src/processing/app/Base.java:2349 msgid "Library added to your libraries. Check \"Include library\" menu" @@ -1203,7 +1203,7 @@ msgstr "Manage Libraries..." #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:466 msgid "Manual proxy configuration" -msgstr "" +msgstr "Manual proxy configuration" #: Preferences.java:107 msgid "Marathi" @@ -1260,7 +1260,7 @@ msgstr "Nepali" #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:601 msgid "Network" -msgstr "" +msgstr "Network" #: ../../../../../app/src/processing/app/Editor.java:65 msgid "Network ports" @@ -1328,7 +1328,7 @@ msgstr "No parameters" #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:453 msgid "No proxy" -msgstr "" +msgstr "No proxy" #: Base.java:541 msgid "No really, time for some fresh air for you." @@ -1463,7 +1463,7 @@ msgstr "Port" #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:491 msgid "Port number:" -msgstr "" +msgstr "Port number:" #: ../../../processing/app/Preferences.java:151 msgid "Portugese" @@ -1714,7 +1714,7 @@ msgstr "Serial ports" #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:450 msgid "Settings" -msgstr "" +msgstr "Settings" #: Base.java:1681 msgid "Settings issues" @@ -2057,7 +2057,7 @@ msgstr "Unspecified platform, no launcher available.\nTo enable opening URLs or #: ../../../../../app/src/cc/arduino/contributions/libraries/ui/DropdownUpdatableLibrariesItem.java:27 #: ../../../../../app/src/cc/arduino/contributions/packages/ui/DropdownUpdatableCoresItem.java:27 msgid "Updatable" -msgstr "" +msgstr "Updatable" #: UpdateCheck.java:111 msgid "Update" @@ -2110,7 +2110,7 @@ msgstr "Use external editor" #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:493 #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:499 msgid "Username:" -msgstr "" +msgstr "Username:" #: ../../../processing/app/debug/Compiler.java:410 #, java-format @@ -2137,7 +2137,7 @@ msgstr "Verify code after upload" #: ../../../../../app/src/processing/app/Editor.java:725 msgid "Verify/Compile" -msgstr "" +msgstr "Verify/Compile" #: ../../../../../app/src/processing/app/Base.java:451 msgid "Verifying and uploading..." @@ -2197,17 +2197,17 @@ msgstr "Warning: file {0} links to an absolute path {1}" #: ../../../cc/arduino/contributions/packages/ContributionsIndexer.java:133 msgid "Warning: forced trusting untrusted contributions" -msgstr "" +msgstr "Warning: forced trusting untrusted contributions" #: ../../../cc/arduino/contributions/packages/ContributionInstaller.java:217 #, java-format msgid "Warning: forced untrusted script execution ({0})" -msgstr "" +msgstr "Warning: forced untrusted script execution ({0})" #: ../../../cc/arduino/contributions/packages/ContributionInstaller.java:212 #, java-format msgid "Warning: non trusted contribution, skipping script execution ({0})" -msgstr "" +msgstr "Warning: non trusted contribution, skipping script execution ({0})" #: ../../../processing/app/debug/LegacyTargetPlatform.java:158 #, java-format diff --git a/arduino-core/src/processing/app/i18n/Resources_en_GB.properties b/arduino-core/src/processing/app/i18n/Resources_en_GB.properties index 62e121e303f..7178e9ab21f 100644 --- a/arduino-core/src/processing/app/i18n/Resources_en_GB.properties +++ b/arduino-core/src/processing/app/i18n/Resources_en_GB.properties @@ -7,7 +7,7 @@ # Translators: # Translators: # Andi Chandler , 2013-2015 -!=Project-Id-Version\: Arduino IDE 1.5\nReport-Msgid-Bugs-To\: \nPOT-Creation-Date\: 2012-03-29 10\:24-0400\nPO-Revision-Date\: 2015-08-24 14\:35+0000\nLast-Translator\: Federico Fissore \nLanguage-Team\: English (United Kingdom) (http\://www.transifex.com/mbanzi/arduino-ide-15/language/en_GB/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: en_GB\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n +!=Project-Id-Version\: Arduino IDE 1.5\nReport-Msgid-Bugs-To\: \nPOT-Creation-Date\: 2012-03-29 10\:24-0400\nPO-Revision-Date\: 2015-08-28 22\:54+0000\nLast-Translator\: Andi Chandler \nLanguage-Team\: English (United Kingdom) (http\://www.transifex.com/mbanzi/arduino-ide-15/language/en_GB/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: en_GB\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n #: Preferences.java:358 Preferences.java:374 \ \ (requires\ restart\ of\ Arduino)=\ (requires restart of Arduino) @@ -40,15 +40,15 @@ #: ../../../../../app/src/cc/arduino/contributions/ContributionsSelfCheck.java:64 #, java-format -!
Update\ available\ for\ some\ of\ your\ {0}boards{1}= +
Update\ available\ for\ some\ of\ your\ {0}boards{1}=
Update available for some of your {0}boards{1} #: ../../../../../app/src/cc/arduino/contributions/ContributionsSelfCheck.java:66 #, java-format -!
Update\ available\ for\ some\ of\ your\ {0}boards{1}\ and\ {2}libraries{3}= +
Update\ available\ for\ some\ of\ your\ {0}boards{1}\ and\ {2}libraries{3}=
Update available for some of your {0}boards{1} and {2}libraries{3} #: ../../../../../app/src/cc/arduino/contributions/ContributionsSelfCheck.java:62 #, java-format -!
Update\ available\ for\ some\ of\ your\ {0}libraries{1}= +
Update\ available\ for\ some\ of\ your\ {0}libraries{1}=
Update available for some of your {0}libraries{1} #: Editor.java:2053 \ \ b\ {\ font\:\ 13pt\ "Lucida\ Grande"\ }p\ {\ font\:\ 11pt\ "Lucida\ Grande";\ margin-top\:\ 8px\ }\ Do\ you\ want\ to\ save\ changes\ to\ this\ sketch
\ before\ closing?

If\ you\ don't\ save,\ your\ changes\ will\ be\ lost.= Do you want to save changes to this sketch
before closing?

If you don't save, your changes will be lost. @@ -197,10 +197,10 @@ Auto\ Format=Auto Format Auto\ Format\ finished.=Auto Format finished. #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:457 -!Auto-detect\ proxy\ settings= +Auto-detect\ proxy\ settings=Auto-detect proxy settings #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:474 -!Automatic\ proxy\ configuration\ URL\:= +Automatic\ proxy\ configuration\ URL\:=Automatic proxy configuration URL\: #: SerialMonitor.java:110 Autoscroll=Autoscroll @@ -760,7 +760,7 @@ Help=Help Hindi=Hindi #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:489 -!Host\ name\:= +Host\ name\:=Host name\: #: Sketch.java:295 How\ about\ saving\ the\ sketch\ first\ \nbefore\ trying\ to\ rename\ it?=How about saving the sketch first \nbefore trying to rename it? @@ -845,7 +845,7 @@ Korean=Korean Latvian=Latvian #: ../../../../../app/src/cc/arduino/contributions/libraries/ui/LibraryManagerUI.java:93 -!Library\ Manager= +Library\ Manager=Library Manager #: ../../../../../app/src/processing/app/Base.java:2349 Library\ added\ to\ your\ libraries.\ Check\ "Include\ library"\ menu=Library added to your libraries. Check "Include library" menu @@ -870,7 +870,7 @@ Malay\ (Malaysia)=Malay (Malaysia) Manage\ Libraries...=Manage Libraries... #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:466 -!Manual\ proxy\ configuration= +Manual\ proxy\ configuration=Manual proxy configuration #: Preferences.java:107 Marathi=Marathi @@ -913,7 +913,7 @@ Name\ for\ new\ file\:=Name for new file\: Nepali=Nepali #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:601 -!Network= +Network=Network #: ../../../../../app/src/processing/app/Editor.java:65 Network\ ports=Network ports @@ -964,7 +964,7 @@ No\ line\ ending=No line ending No\ parameters=No parameters #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:453 -!No\ proxy= +No\ proxy=No proxy #: Base.java:541 No\ really,\ time\ for\ some\ fresh\ air\ for\ you.=No really, time for some fresh air for you. @@ -1065,7 +1065,7 @@ Polish=Polish Port=Port #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:491 -!Port\ number\:= +Port\ number\:=Port number\: #: ../../../processing/app/Preferences.java:151 Portugese=Portugese @@ -1251,7 +1251,7 @@ Serial\ port\ {0}\ not\ found.\nRetry\ the\ upload\ with\ another\ serial\ port? Serial\ ports=Serial ports #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:450 -!Settings= +Settings=Settings #: Base.java:1681 Settings\ issues=Settings issues @@ -1473,7 +1473,7 @@ Unspecified\ platform,\ no\ launcher\ available.\nTo\ enable\ opening\ URLs\ or\ #: ../../../../../app/src/cc/arduino/contributions/libraries/ui/DropdownUpdatableLibrariesItem.java:27 #: ../../../../../app/src/cc/arduino/contributions/packages/ui/DropdownUpdatableCoresItem.java:27 -!Updatable= +Updatable=Updatable #: UpdateCheck.java:111 Update=Update @@ -1513,7 +1513,7 @@ Use\ external\ editor=Use external editor #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:493 #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:499 -!Username\:= +Username\:=Username\: #: ../../../processing/app/debug/Compiler.java:410 #, java-format @@ -1534,7 +1534,7 @@ Verify=Verify Verify\ code\ after\ upload=Verify code after upload #: ../../../../../app/src/processing/app/Editor.java:725 -!Verify/Compile= +Verify/Compile=Verify/Compile #: ../../../../../app/src/processing/app/Base.java:451 Verifying\ and\ uploading...=Verifying and uploading... @@ -1577,15 +1577,15 @@ Warning\:\ This\ core\ does\ not\ support\ exporting\ sketches.\ Please\ conside Warning\:\ file\ {0}\ links\ to\ an\ absolute\ path\ {1}=Warning\: file {0} links to an absolute path {1} #: ../../../cc/arduino/contributions/packages/ContributionsIndexer.java:133 -!Warning\:\ forced\ trusting\ untrusted\ contributions= +Warning\:\ forced\ trusting\ untrusted\ contributions=Warning\: forced trusting untrusted contributions #: ../../../cc/arduino/contributions/packages/ContributionInstaller.java:217 #, java-format -!Warning\:\ forced\ untrusted\ script\ execution\ ({0})= +Warning\:\ forced\ untrusted\ script\ execution\ ({0})=Warning\: forced untrusted script execution ({0}) #: ../../../cc/arduino/contributions/packages/ContributionInstaller.java:212 #, java-format -!Warning\:\ non\ trusted\ contribution,\ skipping\ script\ execution\ ({0})= +Warning\:\ non\ trusted\ contribution,\ skipping\ script\ execution\ ({0})=Warning\: non trusted contribution, skipping script execution ({0}) #: ../../../processing/app/debug/LegacyTargetPlatform.java:158 #, java-format diff --git a/arduino-core/src/processing/app/i18n/Resources_es.po b/arduino-core/src/processing/app/i18n/Resources_es.po index 5d66c4ed6d9..27f19d34317 100644 --- a/arduino-core/src/processing/app/i18n/Resources_es.po +++ b/arduino-core/src/processing/app/i18n/Resources_es.po @@ -20,8 +20,8 @@ msgstr "" "Project-Id-Version: Arduino IDE 1.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-03-29 10:24-0400\n" -"PO-Revision-Date: 2015-08-24 14:35+0000\n" -"Last-Translator: Federico Fissore \n" +"PO-Revision-Date: 2015-08-25 15:48+0000\n" +"Last-Translator: Pedro Luis \n" "Language-Team: Spanish (http://www.transifex.com/mbanzi/arduino-ide-15/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -297,11 +297,11 @@ msgstr "Auto Formato terminado." #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:457 msgid "Auto-detect proxy settings" -msgstr "" +msgstr "Auto-detectar configuración del proxy" #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:474 msgid "Automatic proxy configuration URL:" -msgstr "" +msgstr "URL configuración automática proxy:" #: SerialMonitor.java:110 msgid "Autoscroll" @@ -1059,7 +1059,7 @@ msgstr "Hindú" #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:489 msgid "Host name:" -msgstr "" +msgstr "Nombre del Host:" #: Sketch.java:295 msgid "" @@ -1211,7 +1211,7 @@ msgstr "Gestionar Librerías" #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:466 msgid "Manual proxy configuration" -msgstr "" +msgstr "Configuración manual del proxy" #: Preferences.java:107 msgid "Marathi" @@ -1268,7 +1268,7 @@ msgstr "Nepalí" #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:601 msgid "Network" -msgstr "" +msgstr "Red" #: ../../../../../app/src/processing/app/Editor.java:65 msgid "Network ports" @@ -1336,7 +1336,7 @@ msgstr "Sin parámetros" #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:453 msgid "No proxy" -msgstr "" +msgstr "Sin proxy" #: Base.java:541 msgid "No really, time for some fresh air for you." @@ -1471,7 +1471,7 @@ msgstr "Puerto" #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:491 msgid "Port number:" -msgstr "" +msgstr "Número de puerto:" #: ../../../processing/app/Preferences.java:151 msgid "Portugese" @@ -1722,7 +1722,7 @@ msgstr "Puertos Serie" #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:450 msgid "Settings" -msgstr "" +msgstr "Ajustes" #: Base.java:1681 msgid "Settings issues" @@ -2118,7 +2118,7 @@ msgstr "Usar editor externo" #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:493 #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:499 msgid "Username:" -msgstr "" +msgstr "Nombre usuario:" #: ../../../processing/app/debug/Compiler.java:410 #, java-format diff --git a/arduino-core/src/processing/app/i18n/Resources_es.properties b/arduino-core/src/processing/app/i18n/Resources_es.properties index 43e2cc1c65c..179c1baa168 100644 --- a/arduino-core/src/processing/app/i18n/Resources_es.properties +++ b/arduino-core/src/processing/app/i18n/Resources_es.properties @@ -15,7 +15,7 @@ # Moritz Werner Casero , 2015 # Pedro Luis , 2015 # Salvador Parra Camacho , 2014 -!=Project-Id-Version\: Arduino IDE 1.5\nReport-Msgid-Bugs-To\: \nPOT-Creation-Date\: 2012-03-29 10\:24-0400\nPO-Revision-Date\: 2015-08-24 14\:35+0000\nLast-Translator\: Federico Fissore \nLanguage-Team\: Spanish (http\://www.transifex.com/mbanzi/arduino-ide-15/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n +!=Project-Id-Version\: Arduino IDE 1.5\nReport-Msgid-Bugs-To\: \nPOT-Creation-Date\: 2012-03-29 10\:24-0400\nPO-Revision-Date\: 2015-08-25 15\:48+0000\nLast-Translator\: Pedro Luis \nLanguage-Team\: Spanish (http\://www.transifex.com/mbanzi/arduino-ide-15/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n #: Preferences.java:358 Preferences.java:374 \ \ (requires\ restart\ of\ Arduino)=(requiere reiniciar Arduino) @@ -205,10 +205,10 @@ Auto\ Format=Auto Formato Auto\ Format\ finished.=Auto Formato terminado. #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:457 -!Auto-detect\ proxy\ settings= +Auto-detect\ proxy\ settings=Auto-detectar configuraci\u00f3n del proxy #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:474 -!Automatic\ proxy\ configuration\ URL\:= +Automatic\ proxy\ configuration\ URL\:=URL configuraci\u00f3n autom\u00e1tica proxy\: #: SerialMonitor.java:110 Autoscroll=Autoscroll @@ -768,7 +768,7 @@ Help=Ayuda Hindi=Hind\u00fa #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:489 -!Host\ name\:= +Host\ name\:=Nombre del Host\: #: Sketch.java:295 How\ about\ saving\ the\ sketch\ first\ \nbefore\ trying\ to\ rename\ it?=\u00bfPor qu\u00e9 no salvar el programa primero\nantes de intentar renombrarlo? @@ -878,7 +878,7 @@ Malay\ (Malaysia)=Malayo (Malasia) Manage\ Libraries...=Gestionar Librer\u00edas #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:466 -!Manual\ proxy\ configuration= +Manual\ proxy\ configuration=Configuraci\u00f3n manual del proxy #: Preferences.java:107 Marathi=Marathi @@ -921,7 +921,7 @@ Name\ for\ new\ file\:=Nombre del nuevo fichero\: Nepali=Nepal\u00ed #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:601 -!Network= +Network=Red #: ../../../../../app/src/processing/app/Editor.java:65 Network\ ports=Puertos de Red @@ -972,7 +972,7 @@ No\ line\ ending=Sin ajuste de l\u00ednea No\ parameters=Sin par\u00e1metros #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:453 -!No\ proxy= +No\ proxy=Sin proxy #: Base.java:541 No\ really,\ time\ for\ some\ fresh\ air\ for\ you.=No, en serio, toma un poco de aire fresco. @@ -1073,7 +1073,7 @@ Polish=Polaco Port=Puerto #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:491 -!Port\ number\:= +Port\ number\:=N\u00famero de puerto\: #: ../../../processing/app/Preferences.java:151 Portugese=Portugues @@ -1259,7 +1259,7 @@ Serial\ port\ {0}\ not\ found.\nRetry\ the\ upload\ with\ another\ serial\ port? Serial\ ports=Puertos Serie #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:450 -!Settings= +Settings=Ajustes #: Base.java:1681 Settings\ issues=Cuestiones de ajustes @@ -1521,7 +1521,7 @@ Use\ external\ editor=Usar editor externo #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:493 #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:499 -!Username\:= +Username\:=Nombre usuario\: #: ../../../processing/app/debug/Compiler.java:410 #, java-format diff --git a/arduino-core/src/processing/app/i18n/Resources_in.po b/arduino-core/src/processing/app/i18n/Resources_in.po index e356bf393e5..8034a3a47cc 100644 --- a/arduino-core/src/processing/app/i18n/Resources_in.po +++ b/arduino-core/src/processing/app/i18n/Resources_in.po @@ -7,6 +7,7 @@ # Translators: # Translators: # Ade Malsasa Akbar , 2013 +# Johannes Sutiktio , 2015 # Joshua Adiel Wijaya , 2015 # Rendiyono Wahyu Saputro , 2015 msgid "" @@ -14,8 +15,8 @@ msgstr "" "Project-Id-Version: Arduino IDE 1.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-03-29 10:24-0400\n" -"PO-Revision-Date: 2015-08-24 14:35+0000\n" -"Last-Translator: Federico Fissore \n" +"PO-Revision-Date: 2015-09-05 00:14+0000\n" +"Last-Translator: Johannes Sutiktio \n" "Language-Team: Indonesian (http://www.transifex.com/mbanzi/arduino-ide-15/language/id/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -25,7 +26,7 @@ msgstr "" #: Preferences.java:358 Preferences.java:374 msgid " (requires restart of Arduino)" -msgstr "(memerlukan Arduino untuk mulai-ulang)" +msgstr "if / else\n\nif/else allows greater control over the flow of code than the basic if statement, by allowing multiple tests to be grouped together. For example, an analog input could be tested and one action taken if the input was less than 500, and another action taken if the input was 500 or greater. The code would look like this:\n\nif (pinFiveInput < 500)\n{\n // action A\n}\nelse\n{\n // action B\n}\n\nelse can proceed another if test, so that multiple, mutually exclusive tests can be run at the same time.\n\nEach test will proceed to the next one until a true test is encountered. When a true test is found, its associated block of code is run, and the program then skips to the line following the entire if/else construction. If no test proves to be true, the default else block is executed, if one is present, and sets the default behavior.\n\nNote that an else if block may be used with or without a terminating else block and vice versa. An unlimited number of such else if branches is allowed.\n\nif (pinFiveInput < 500)\n{\n // do Thing A\n}\nelse if (pinFiveInput >= 1000)\n{\n // do Thing B\n}\nelse\n{\n // do Thing C\n}\n\nAnother way to express branching, mutually exclusive tests, is with the switch case statement.\nSee also:\n\nswitch case Reference Home\n\nCorrections, suggestions, and new documentation should be posted to the Forum.\n\nThe text of the Arduino reference is licensed under a Creative Commons Attribution-ShareAlike 3.0 License. Code samples in the reference are released into the public domain.\nShare" #: ../../../processing/app/debug/Compiler.java:529 #, java-format diff --git a/arduino-core/src/processing/app/i18n/Resources_pl.po b/arduino-core/src/processing/app/i18n/Resources_pl.po index d3b77b7657e..2ba228adaa7 100644 --- a/arduino-core/src/processing/app/i18n/Resources_pl.po +++ b/arduino-core/src/processing/app/i18n/Resources_pl.po @@ -17,7 +17,7 @@ msgstr "" "Project-Id-Version: Arduino IDE 1.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-03-29 10:24-0400\n" -"PO-Revision-Date: 2015-08-24 15:30+0000\n" +"PO-Revision-Date: 2015-09-08 11:37+0000\n" "Last-Translator: Tom Box \n" "Language-Team: Polish (http://www.transifex.com/mbanzi/arduino-ide-15/language/pl/)\n" "MIME-Version: 1.0\n" @@ -1950,7 +1950,7 @@ msgstr "Folder szkicownika nie istnieje.\nArduino przełączy się na domyślny msgid "" "The specified sketchbook folder contains your copy of the IDE.\n" "Please choose a different folder for your sketchbook." -msgstr "" +msgstr "Podany katalog na szkice zawiera twoją kopię środowiska programistycznego.\nProszę wybrać inny katalog na twoje szkice." #: ../../../processing/app/debug/Compiler.java:201 msgid "" @@ -1969,7 +1969,7 @@ msgstr "Ten plik został już skopiowany do \nlokalizacji z której próbowałe msgid "" "This library is not listed on Library Manager. You won't be able to reinstall it from here.\n" "Are you sure you want to delete it?" -msgstr "" +msgstr "Ta biblioteka nie figuruje w Zarządcy Bibliotek. Nie będziesz mógł jej stąd przeinstalować.\nCzy na pewno chcesz ją usunąć?" #: ../../../processing/app/EditorStatus.java:467 msgid "This report would have more information with" @@ -2193,7 +2193,7 @@ msgstr "Ostrzeżenia" msgid "" "Warning: This core does not support exporting sketches. Please consider " "upgrading it or contacting its author" -msgstr "" +msgstr "Uwaga: Ten rdzeń nie obsługuje eksportowania szkiców. Proszę rozważyć jego aktualizację lub skontaktować się z autorem." #: ../../../cc/arduino/utils/ArchiveExtractor.java:197 #, java-format @@ -2202,31 +2202,31 @@ msgstr "Uwaga: plik {0} połączony jest ze ścieżką {1}" #: ../../../cc/arduino/contributions/packages/ContributionsIndexer.java:133 msgid "Warning: forced trusting untrusted contributions" -msgstr "" +msgstr "Uwaga: wymuszanie zaufania do niezaufanego dodatku" #: ../../../cc/arduino/contributions/packages/ContributionInstaller.java:217 #, java-format msgid "Warning: forced untrusted script execution ({0})" -msgstr "" +msgstr "Uwaga: wymuszenie wykonania niezaufanego skryptu ({0})" #: ../../../cc/arduino/contributions/packages/ContributionInstaller.java:212 #, java-format msgid "Warning: non trusted contribution, skipping script execution ({0})" -msgstr "" +msgstr "Uwaga: niezaufany dodatek, pominięcie wykonania skryptu ({0})" #: ../../../processing/app/debug/LegacyTargetPlatform.java:158 #, java-format msgid "" "Warning: platform.txt from core '{0}' contains deprecated {1}, automatically" " converted to {2}. Consider upgrading this core." -msgstr "" +msgstr "Uwaga: platform.txt z rdzenia '{0}' zawiera przestarzałe {1}, przekonwertowane automatycznie na {2}. Rozważ uaktualnienie tego rdzenia." #: ../../../processing/app/debug/LegacyTargetPlatform.java:170 #, java-format msgid "" "Warning: platform.txt from core '{0}' misses property {1}, automatically set" " to {2}. Consider upgrading this core." -msgstr "" +msgstr "Uwaga: w platform.txt z rdzenia '{0}' brakuje właściwości {1}, zostanie automatycznie ustawione na {2}. Rozważ aktualizację tego rdzenia." #: ../../../../../app/src/processing/app/Preferences.java:190 msgid "Western Frisian" @@ -2303,13 +2303,13 @@ msgstr "Wykorzystałeś limit automatycznego nazewnictwa nowych szkiców\nna dzi msgid "" "Your copy of the IDE is installed in a subfolder of your settings folder.\n" "Please move the IDE to another folder." -msgstr "" +msgstr "Twoja kopia środowiska programistycznego została zainstalowana w podkatalogu twojego katalogu z ustawieniami.\nProszę przenieść środowisko do innego katalogu." #: ../../../processing/app/BaseNoGui.java:771 msgid "" "Your copy of the IDE is installed in a subfolder of your sketchbook.\n" "Please move the IDE to another folder." -msgstr "" +msgstr "Twoja kopia środowiska programistycznego została zainstalowana w podkatalogu twojego katalogu ze szkicami.\nProszę przenieść środowisko do innego katalogu." #: Base.java:2638 msgid "ZIP files or folders" diff --git a/arduino-core/src/processing/app/i18n/Resources_pl.properties b/arduino-core/src/processing/app/i18n/Resources_pl.properties index cf560ca2a48..deabcbb3d01 100644 --- a/arduino-core/src/processing/app/i18n/Resources_pl.properties +++ b/arduino-core/src/processing/app/i18n/Resources_pl.properties @@ -12,7 +12,7 @@ # Szymon Borecki , 2015 # Tom Box , 2015 # Voltinus , 2015 -!=Project-Id-Version\: Arduino IDE 1.5\nReport-Msgid-Bugs-To\: \nPOT-Creation-Date\: 2012-03-29 10\:24-0400\nPO-Revision-Date\: 2015-08-24 15\:30+0000\nLast-Translator\: Tom Box \nLanguage-Team\: Polish (http\://www.transifex.com/mbanzi/arduino-ide-15/language/pl/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pl\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n +!=Project-Id-Version\: Arduino IDE 1.5\nReport-Msgid-Bugs-To\: \nPOT-Creation-Date\: 2012-03-29 10\:24-0400\nPO-Revision-Date\: 2015-09-08 11\:37+0000\nLast-Translator\: Tom Box \nLanguage-Team\: Polish (http\://www.transifex.com/mbanzi/arduino-ide-15/language/pl/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pl\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n #: Preferences.java:358 Preferences.java:374 \ \ (requires\ restart\ of\ Arduino)=(wymagany restart Arduino) @@ -1400,7 +1400,7 @@ The\ sketch\ name\ had\ to\ be\ modified.\ Sketch\ names\ can\ only\ consist\nof The\ sketchbook\ folder\ no\ longer\ exists.\nArduino\ will\ switch\ to\ the\ default\ sketchbook\nlocation,\ and\ create\ a\ new\ sketchbook\ folder\ if\nnecessary.\ Arduino\ will\ then\ stop\ talking\ about\nhimself\ in\ the\ third\ person.=Folder szkicownika nie istnieje.\nArduino prze\u0142\u0105czy si\u0119 na domy\u015blny szkicownik,\noraz utworzy nowy szkicownik je\u015bli potrzeba.\nPotem Arduino przestanie m\u00f3wi\u0107 o sobie \nw trzeciej osobie. #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:514 -!The\ specified\ sketchbook\ folder\ contains\ your\ copy\ of\ the\ IDE.\nPlease\ choose\ a\ different\ folder\ for\ your\ sketchbook.= +The\ specified\ sketchbook\ folder\ contains\ your\ copy\ of\ the\ IDE.\nPlease\ choose\ a\ different\ folder\ for\ your\ sketchbook.=Podany katalog na szkice zawiera twoj\u0105 kopi\u0119 \u015brodowiska programistycznego.\nProsz\u0119 wybra\u0107 inny katalog na twoje szkice. #: ../../../processing/app/debug/Compiler.java:201 Third-party\ platform.txt\ does\ not\ define\ compiler.path.\ Please\ report\ this\ to\ the\ third-party\ hardware\ maintainer.=Plik platform.txt os\u00f3b trzecich nie definiuje compiler.path. Prosz\u0119 to zg\u0142osi\u0107 do opiekuna oprogramowania do obs\u0142ugi sprz\u0119tu firmy trzeciej. @@ -1409,7 +1409,7 @@ Third-party\ platform.txt\ does\ not\ define\ compiler.path.\ Please\ report\ th This\ file\ has\ already\ been\ copied\ to\ the\nlocation\ from\ which\ where\ you're\ trying\ to\ add\ it.\nI\ ain't\ not\ doin\ nuthin'.=Ten plik zosta\u0142 ju\u017c skopiowany do \nlokalizacji z kt\u00f3rej pr\u00f3bowa\u0142e\u015b go doda\u0107.\nTo nic nie zmieni. #: ../../../../../app/src/cc/arduino/contributions/libraries/ui/LibraryManagerUI.java:257 -!This\ library\ is\ not\ listed\ on\ Library\ Manager.\ You\ won't\ be\ able\ to\ reinstall\ it\ from\ here.\nAre\ you\ sure\ you\ want\ to\ delete\ it?= +This\ library\ is\ not\ listed\ on\ Library\ Manager.\ You\ won't\ be\ able\ to\ reinstall\ it\ from\ here.\nAre\ you\ sure\ you\ want\ to\ delete\ it?=Ta biblioteka nie figuruje w Zarz\u0105dcy Bibliotek. Nie b\u0119dziesz m\u00f3g\u0142 jej st\u0105d przeinstalowa\u0107.\nCzy na pewno chcesz j\u0105 usun\u0105\u0107? #: ../../../processing/app/EditorStatus.java:467 This\ report\ would\ have\ more\ information\ with=Raport ten b\u0119dzie mia\u0142 wi\u0119cej informacji z @@ -1575,30 +1575,30 @@ WARNING\:\ library\ {0}\ claims\ to\ run\ on\ {1}\ architecture(s)\ and\ may\ be Warning=Ostrze\u017cenia #: ../../../processing/app/debug/Compiler.java:1295 -!Warning\:\ This\ core\ does\ not\ support\ exporting\ sketches.\ Please\ consider\ upgrading\ it\ or\ contacting\ its\ author= +Warning\:\ This\ core\ does\ not\ support\ exporting\ sketches.\ Please\ consider\ upgrading\ it\ or\ contacting\ its\ author=Uwaga\: Ten rdze\u0144 nie obs\u0142uguje eksportowania szkic\u00f3w. Prosz\u0119 rozwa\u017cy\u0107 jego aktualizacj\u0119 lub skontaktowa\u0107 si\u0119 z autorem. #: ../../../cc/arduino/utils/ArchiveExtractor.java:197 #, java-format Warning\:\ file\ {0}\ links\ to\ an\ absolute\ path\ {1}=Uwaga\: plik {0} po\u0142\u0105czony jest ze \u015bcie\u017ck\u0105 {1} #: ../../../cc/arduino/contributions/packages/ContributionsIndexer.java:133 -!Warning\:\ forced\ trusting\ untrusted\ contributions= +Warning\:\ forced\ trusting\ untrusted\ contributions=Uwaga\: wymuszanie zaufania do niezaufanego dodatku #: ../../../cc/arduino/contributions/packages/ContributionInstaller.java:217 #, java-format -!Warning\:\ forced\ untrusted\ script\ execution\ ({0})= +Warning\:\ forced\ untrusted\ script\ execution\ ({0})=Uwaga\: wymuszenie wykonania niezaufanego skryptu ({0}) #: ../../../cc/arduino/contributions/packages/ContributionInstaller.java:212 #, java-format -!Warning\:\ non\ trusted\ contribution,\ skipping\ script\ execution\ ({0})= +Warning\:\ non\ trusted\ contribution,\ skipping\ script\ execution\ ({0})=Uwaga\: niezaufany dodatek, pomini\u0119cie wykonania skryptu ({0}) #: ../../../processing/app/debug/LegacyTargetPlatform.java:158 #, java-format -!Warning\:\ platform.txt\ from\ core\ '{0}'\ contains\ deprecated\ {1},\ automatically\ converted\ to\ {2}.\ Consider\ upgrading\ this\ core.= +Warning\:\ platform.txt\ from\ core\ '{0}'\ contains\ deprecated\ {1},\ automatically\ converted\ to\ {2}.\ Consider\ upgrading\ this\ core.=Uwaga\: platform.txt z rdzenia '{0}' zawiera przestarza\u0142e {1}, przekonwertowane automatycznie na {2}. Rozwa\u017c uaktualnienie tego rdzenia. #: ../../../processing/app/debug/LegacyTargetPlatform.java:170 #, java-format -!Warning\:\ platform.txt\ from\ core\ '{0}'\ misses\ property\ {1},\ automatically\ set\ to\ {2}.\ Consider\ upgrading\ this\ core.= +Warning\:\ platform.txt\ from\ core\ '{0}'\ misses\ property\ {1},\ automatically\ set\ to\ {2}.\ Consider\ upgrading\ this\ core.=Uwaga\: w platform.txt z rdzenia '{0}' brakuje w\u0142a\u015bciwo\u015bci {1}, zostanie automatycznie ustawione na {2}. Rozwa\u017c aktualizacj\u0119 tego rdzenia. #: ../../../../../app/src/processing/app/Preferences.java:190 Western\ Frisian=Wschodni fryzyjski @@ -1646,10 +1646,10 @@ You've\ pressed\ {0}\ but\ nothing\ was\ sent.\ Should\ you\ select\ a\ line\ en You've\ reached\ the\ limit\ for\ auto\ naming\ of\ new\ sketches\nfor\ the\ day.\ How\ about\ going\ for\ a\ walk\ instead?=Wykorzysta\u0142e\u015b limit automatycznego nazewnictwa nowych szkic\u00f3w\nna dzi\u015b. Mo\u017ce p\u00f3jdziesz na spacer zamiast tego ? #: ../../../processing/app/BaseNoGui.java:768 -!Your\ copy\ of\ the\ IDE\ is\ installed\ in\ a\ subfolder\ of\ your\ settings\ folder.\nPlease\ move\ the\ IDE\ to\ another\ folder.= +Your\ copy\ of\ the\ IDE\ is\ installed\ in\ a\ subfolder\ of\ your\ settings\ folder.\nPlease\ move\ the\ IDE\ to\ another\ folder.=Twoja kopia \u015brodowiska programistycznego zosta\u0142a zainstalowana w podkatalogu twojego katalogu z ustawieniami.\nProsz\u0119 przenie\u015b\u0107 \u015brodowisko do innego katalogu. #: ../../../processing/app/BaseNoGui.java:771 -!Your\ copy\ of\ the\ IDE\ is\ installed\ in\ a\ subfolder\ of\ your\ sketchbook.\nPlease\ move\ the\ IDE\ to\ another\ folder.= +Your\ copy\ of\ the\ IDE\ is\ installed\ in\ a\ subfolder\ of\ your\ sketchbook.\nPlease\ move\ the\ IDE\ to\ another\ folder.=Twoja kopia \u015brodowiska programistycznego zosta\u0142a zainstalowana w podkatalogu twojego katalogu ze szkicami.\nProsz\u0119 przenie\u015b\u0107 \u015brodowisko do innego katalogu. #: Base.java:2638 ZIP\ files\ or\ folders=Pliki ZIP lub foldery diff --git a/arduino-core/src/processing/app/i18n/Resources_pt_BR.po b/arduino-core/src/processing/app/i18n/Resources_pt_BR.po index a68db45b28f..a5e01a372ca 100644 --- a/arduino-core/src/processing/app/i18n/Resources_pt_BR.po +++ b/arduino-core/src/processing/app/i18n/Resources_pt_BR.po @@ -8,6 +8,7 @@ # Translators: # andre graes , 2012 # Erick Simões , 2014-2015 +# Gustavo Bertoli, 2015 # Henrique P. Machado , 2013 # Philipe Rabelo , 2013 # Rafael H L Moretti , 2014 @@ -17,8 +18,8 @@ msgstr "" "Project-Id-Version: Arduino IDE 1.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-03-29 10:24-0400\n" -"PO-Revision-Date: 2015-08-24 14:35+0000\n" -"Last-Translator: Federico Fissore \n" +"PO-Revision-Date: 2015-08-28 20:52+0000\n" +"Last-Translator: Gustavo Bertoli\n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/mbanzi/arduino-ide-15/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -118,7 +119,7 @@ msgstr "Há {0} novos pacotes disponíveis" #: ../../../../../app/src/processing/app/Base.java:2307 msgid "A subfolder of your sketchbook is not a valid library" -msgstr "" +msgstr "Um subdiretório do seu projeto não é uma biblioteca válida" #: Editor.java:1116 msgid "About Arduino" @@ -126,7 +127,7 @@ msgstr "Sobre Arduino" #: ../../../../../app/src/processing/app/Base.java:1177 msgid "Add .ZIP Library..." -msgstr "" +msgstr "Adicionar biblioteca .ZIP" #: Editor.java:650 msgid "Add File..." @@ -270,7 +271,7 @@ msgstr "Argumento requerido para --preferences-file" #: ../../../processing/app/helpers/CommandlineParser.java:83 #, java-format msgid "Argument required for {0}" -msgstr "" +msgstr "Argumento requerido par {0}" #: ../../../processing/app/Preferences.java:137 msgid "Armenian" @@ -294,7 +295,7 @@ msgstr "Autoformatação concluída." #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:457 msgid "Auto-detect proxy settings" -msgstr "" +msgstr "Detectar automaticamente definições de proxy" #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:474 msgid "Automatic proxy configuration URL:" @@ -400,7 +401,7 @@ msgstr "Gravando o bootloader na placa de E/S (isso pode demorar um tempinho)... #: ../../../cc/arduino/contributions/DownloadableContributionsDownloader.java:77 msgid "CRC doesn't match. File is corrupted." -msgstr "" +msgstr "CRC não confere. Arquivo corrompido." #: ../../../processing/app/Base.java:379 #, java-format @@ -479,7 +480,7 @@ msgstr "Comentar/descomentar" #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:266 msgid "Compiler warnings: " -msgstr "" +msgstr "Avisos do compilador:" #: Sketch.java:1608 Editor.java:1890 msgid "Compiling sketch..." @@ -576,7 +577,7 @@ msgstr "Não foi possível salvar novamente o sketch" msgid "" "Could not read color theme settings.\n" "You'll need to reinstall Arduino." -msgstr "" +msgstr "Não foi possível ler as configurações do esquema de cores.\nVocê terá que reinstalar o Arduino." #: Preferences.java:219 msgid "" @@ -735,20 +736,20 @@ msgstr "Baixado {0}kb de {1}kb." #: ../../../cc/arduino/contributions/packages/ContributionInstaller.java:107 msgid "Downloading boards definitions." -msgstr "" +msgstr "Baixando definições das placas." #: ../../../cc/arduino/contributions/libraries/LibraryInstaller.java:86 msgid "Downloading libraries index..." -msgstr "" +msgstr "Baixando índice de bibliotecas..." #: ../../../cc/arduino/contributions/libraries/LibraryInstaller.java:115 #, java-format msgid "Downloading library: {0}" -msgstr "" +msgstr "Baixando biblioteca: {0}" #: ../../../cc/arduino/contributions/packages/ContributionInstaller.java:318 msgid "Downloading platforms index..." -msgstr "" +msgstr "Carregando índices de plataformas..." #: ../../../cc/arduino/contributions/packages/ContributionInstaller.java:113 #, java-format diff --git a/arduino-core/src/processing/app/i18n/Resources_pt_BR.properties b/arduino-core/src/processing/app/i18n/Resources_pt_BR.properties index db09077a635..05005a66e21 100644 --- a/arduino-core/src/processing/app/i18n/Resources_pt_BR.properties +++ b/arduino-core/src/processing/app/i18n/Resources_pt_BR.properties @@ -8,11 +8,12 @@ # Translators: # andre graes , 2012 # Erick Sim\u00f5es , 2014-2015 +# Gustavo Bertoli, 2015 # Henrique P. Machado , 2013 # Philipe Rabelo , 2013 # Rafael H L Moretti , 2014 # Tiago Goto Sala, 2014 -!=Project-Id-Version\: Arduino IDE 1.5\nReport-Msgid-Bugs-To\: \nPOT-Creation-Date\: 2012-03-29 10\:24-0400\nPO-Revision-Date\: 2015-08-24 14\:35+0000\nLast-Translator\: Federico Fissore \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/mbanzi/arduino-ide-15/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n +!=Project-Id-Version\: Arduino IDE 1.5\nReport-Msgid-Bugs-To\: \nPOT-Creation-Date\: 2012-03-29 10\:24-0400\nPO-Revision-Date\: 2015-08-28 20\:52+0000\nLast-Translator\: Gustavo Bertoli\nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/mbanzi/arduino-ide-15/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n #: Preferences.java:358 Preferences.java:374 \ \ (requires\ restart\ of\ Arduino)=(requer reinicializa\u00e7\u00e3o do Arduino) @@ -78,13 +79,13 @@ A\ new\ version\ of\ Arduino\ is\ available,\nwould\ you\ like\ to\ visit\ the\ A\ newer\ {0}\ package\ is\ available=H\u00e1 {0} novos pacotes dispon\u00edveis #: ../../../../../app/src/processing/app/Base.java:2307 -!A\ subfolder\ of\ your\ sketchbook\ is\ not\ a\ valid\ library= +A\ subfolder\ of\ your\ sketchbook\ is\ not\ a\ valid\ library=Um subdiret\u00f3rio do seu projeto n\u00e3o \u00e9 uma biblioteca v\u00e1lida #: Editor.java:1116 About\ Arduino=Sobre Arduino #: ../../../../../app/src/processing/app/Base.java:1177 -!Add\ .ZIP\ Library...= +Add\ .ZIP\ Library...=Adicionar biblioteca .ZIP #: Editor.java:650 Add\ File...=Adicionar Arquivo... @@ -184,7 +185,7 @@ Argument\ required\ for\ --preferences-file=Argumento requerido para --preferenc #: ../../../processing/app/helpers/CommandlineParser.java:76 #: ../../../processing/app/helpers/CommandlineParser.java:83 #, java-format -!Argument\ required\ for\ {0}= +Argument\ required\ for\ {0}=Argumento requerido par {0} #: ../../../processing/app/Preferences.java:137 Armenian=Arm\u00eanio @@ -202,7 +203,7 @@ Auto\ Format=Autoformata\u00e7\u00e3o Auto\ Format\ finished.=Autoformata\u00e7\u00e3o conclu\u00edda. #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:457 -!Auto-detect\ proxy\ settings= +Auto-detect\ proxy\ settings=Detectar automaticamente defini\u00e7\u00f5es de proxy #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:474 !Automatic\ proxy\ configuration\ URL\:= @@ -281,7 +282,7 @@ Burn\ Bootloader=Gravar Bootloader Burning\ bootloader\ to\ I/O\ Board\ (this\ may\ take\ a\ minute)...=Gravando o bootloader na placa de E/S (isso pode demorar um tempinho)... #: ../../../cc/arduino/contributions/DownloadableContributionsDownloader.java:77 -!CRC\ doesn't\ match.\ File\ is\ corrupted.= +CRC\ doesn't\ match.\ File\ is\ corrupted.=CRC n\u00e3o confere. Arquivo corrompido. #: ../../../processing/app/Base.java:379 #, java-format @@ -341,7 +342,7 @@ Close=Fechar Comment/Uncomment=Comentar/descomentar #: ../../../../../app/src/cc/arduino/view/preferences/Preferences.java:266 -!Compiler\ warnings\:\ = +Compiler\ warnings\:\ =Avisos do compilador\: #: Sketch.java:1608 Editor.java:1890 Compiling\ sketch...=Compilando sketch... @@ -410,7 +411,7 @@ Could\ not\ properly\ re-save\ the\ sketch.\ You\ may\ be\ in\ trouble\ at\ this Could\ not\ re-save\ sketch=N\u00e3o foi poss\u00edvel salvar novamente o sketch #: Theme.java:52 -!Could\ not\ read\ color\ theme\ settings.\nYou'll\ need\ to\ reinstall\ Arduino.= +Could\ not\ read\ color\ theme\ settings.\nYou'll\ need\ to\ reinstall\ Arduino.=N\u00e3o foi poss\u00edvel ler as configura\u00e7\u00f5es do esquema de cores.\nVoc\u00ea ter\u00e1 que reinstalar o Arduino. #: Preferences.java:219 Could\ not\ read\ default\ settings.\nYou'll\ need\ to\ reinstall\ Arduino.=N\u00e3o foi poss\u00edvel ler as configura\u00e7\u00f5es padr\u00e3o.\nVoc\u00ea ter\u00e1 que reinstalar o Arduino. @@ -524,17 +525,17 @@ Done\ uploading.=Carregado. Downloaded\ {0}kb\ of\ {1}kb.=Baixado {0}kb de {1}kb. #: ../../../cc/arduino/contributions/packages/ContributionInstaller.java:107 -!Downloading\ boards\ definitions.= +Downloading\ boards\ definitions.=Baixando defini\u00e7\u00f5es das placas. #: ../../../cc/arduino/contributions/libraries/LibraryInstaller.java:86 -!Downloading\ libraries\ index...= +Downloading\ libraries\ index...=Baixando \u00edndice de bibliotecas... #: ../../../cc/arduino/contributions/libraries/LibraryInstaller.java:115 #, java-format -!Downloading\ library\:\ {0}= +Downloading\ library\:\ {0}=Baixando biblioteca\: {0} #: ../../../cc/arduino/contributions/packages/ContributionInstaller.java:318 -!Downloading\ platforms\ index...= +Downloading\ platforms\ index...=Carregando \u00edndices de plataformas... #: ../../../cc/arduino/contributions/packages/ContributionInstaller.java:113 #, java-format diff --git a/arduino-core/src/processing/app/i18n/Resources_ro.po b/arduino-core/src/processing/app/i18n/Resources_ro.po index bcb3c7e9c1a..8d0d5c9bcf1 100644 --- a/arduino-core/src/processing/app/i18n/Resources_ro.po +++ b/arduino-core/src/processing/app/i18n/Resources_ro.po @@ -18,8 +18,8 @@ msgstr "" "Project-Id-Version: Arduino IDE 1.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-03-29 10:24-0400\n" -"PO-Revision-Date: 2015-08-24 14:35+0000\n" -"Last-Translator: Federico Fissore \n" +"PO-Revision-Date: 2015-09-13 20:46+0000\n" +"Last-Translator: Pop Gheorghe \n" "Language-Team: Romanian (http://www.transifex.com/mbanzi/arduino-ide-15/language/ro/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/arduino-core/src/processing/app/i18n/Resources_ro.properties b/arduino-core/src/processing/app/i18n/Resources_ro.properties index ba2d56dc153..4febe68d840 100644 --- a/arduino-core/src/processing/app/i18n/Resources_ro.properties +++ b/arduino-core/src/processing/app/i18n/Resources_ro.properties @@ -13,7 +13,7 @@ # Pop Gheorghe , 2013 # Pop Gheorghe , 2013-2015 # Vl\u0103du\u0163 Ilie , 2015 -!=Project-Id-Version\: Arduino IDE 1.5\nReport-Msgid-Bugs-To\: \nPOT-Creation-Date\: 2012-03-29 10\:24-0400\nPO-Revision-Date\: 2015-08-24 14\:35+0000\nLast-Translator\: Federico Fissore \nLanguage-Team\: Romanian (http\://www.transifex.com/mbanzi/arduino-ide-15/language/ro/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ro\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1?0\:(((n%100>19)||((n%100\=\=0)&&(n\!\=0)))?2\:1));\n +!=Project-Id-Version\: Arduino IDE 1.5\nReport-Msgid-Bugs-To\: \nPOT-Creation-Date\: 2012-03-29 10\:24-0400\nPO-Revision-Date\: 2015-09-13 20\:46+0000\nLast-Translator\: Pop Gheorghe \nLanguage-Team\: Romanian (http\://www.transifex.com/mbanzi/arduino-ide-15/language/ro/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ro\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1?0\:(((n%100>19)||((n%100\=\=0)&&(n\!\=0)))?2\:1));\n #: Preferences.java:358 Preferences.java:374 \ \ (requires\ restart\ of\ Arduino)=(este necesar\u0103 repornirea editorului Arduino) From f1d325411c928fccb1c6dce8da3b92c9855a365b Mon Sep 17 00:00:00 2001 From: Federico Fissore Date: Mon, 14 Sep 2015 13:18:37 +0200 Subject: [PATCH 032/123] Upgraded rsyntaxtextarea to 2.5.8 Removed useless ecj.jar --- app/lib/ecj.LICENSE.EPL-1.0.txt | 0 app/lib/ecj.jar | Bin 1647271 -> 0 bytes ...ar => rsyntaxtextarea-2.5.8.1+arduino.jar} | Bin 1055797 -> 1058591 bytes 3 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 app/lib/ecj.LICENSE.EPL-1.0.txt delete mode 100644 app/lib/ecj.jar rename app/lib/{rsyntaxtextarea-2.5.7.1+arduino.jar => rsyntaxtextarea-2.5.8.1+arduino.jar} (87%) diff --git a/app/lib/ecj.LICENSE.EPL-1.0.txt b/app/lib/ecj.LICENSE.EPL-1.0.txt deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/app/lib/ecj.jar b/app/lib/ecj.jar deleted file mode 100644 index 878a32cfc5d8e2f86d536200674d09f4d3eb266a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1647271 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%0DcNIuR~i#KcW#q4Vza%$)f}rRN=xh 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