Add firmware files

This commit is contained in:
Simon Stürz 2022-01-10 17:30:14 +01:00 committed by Michael Zanetti
parent 5954d1b645
commit 328d282b75
18 changed files with 3884 additions and 66 deletions

1
debian/control vendored
View File

@ -468,6 +468,7 @@ Package: nymea-plugin-owlet
Architecture: any
Depends: ${shlibs:Depends},
${misc:Depends},
avrdude,
nymea-plugins-translations,
Description: nymea.io plugin for nymea:owlet
nymea:owlet is a firmware for microcontrollers (Arduino/ESP8266/ESP32) which

View File

@ -1 +1,2 @@
usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_integrationpluginowlet.so
owlet/firmware usr/share/nymea/owlet/firmware

84
owlet/README.md Normal file
View File

@ -0,0 +1,84 @@
# Owlet
nymea:owlet is a firmware for different microcontrollers (Arduino/ESP8266/ESP32) which
exposes pins of the microcontroller to nymea and allows using them for
whatever purpose like moodlights, control relays, reading analog values
or controlling servos.
# ESP8285
# ESP32
# M5Stick-C
# Arduino
In order to use owlet with an [Arduino](https://docs.arduino.cc/) you need to add the corresponding model into nymea. Once the thing is connected the firmware will be flashed automatically if required.
Following models are available:
* [Arduino Uno](https://docs.arduino.cc/hardware/uno-rev3)
* [Arduino Mini Pro (5v, 16MHz)](https://docs.arduino.cc/retired/boards/arduino-pro-mini)
* [Arduino Mini Pro (3.3v, 8MHz)](https://docs.arduino.cc/retired/boards/arduino-pro-mini)
* [Arduino Nano](https://store.arduino.cc/products/arduino-nano)
Once the Arduino has been added to nymea and the owlet firmware has been flashed successfully, the pins
can be configured as desired within the Arduino thing settings. Depending on the pin capabilities you can select
how the mode for each pin you require for your project. By default all pins are unconfigured.
When applying the settings, for each pin a new thing will appear in nymea giving you controls and information about
the current states of the pin. If a pin has been configured to a specific type and you want to remove a thing,
just configure it as type `None` and the associated thing will be removed from nymea.
## Available configurations
Not all pins can be configured to any type. Within the settings you can see for each pin
the possible configurations.
### Digital Output
If you configure a pin as *Output* you can switch on and off the associated GPIO.
Usecase examples:
* Switching relays
* Enable / Disable a LED
### Digital Input
If you configure a pin as *Input* you get a thing with a `bool` state indicating if the current state of the pin.
Usecase examples:
* Buttons
* Contact sensors
### Analog output (PWM)
If you configure a pin as *PWM* you can set the current duty cylcle of the PWM in a range of 0 - 255. The frequency of the duty cycle depends on the hardware you are using and requires some datasheet reading in order to understand hot it works.
[Arduino analogWrite() refference](https://www.arduino.cc/reference/en/language/functions/analog-io/analogwrite/
)
Usecase examples:
* LED brightness
* Piezo buzzer
* Control motor speed
### Analog input (ADC)
If you configure a pin as *Analog input* you can read periodically the value from the internal ADC (analog digital converter). Most ADCs have a resolution of 10 Bits giving you a value range of 0 - 1023. Once you configured the pin as analog input you can configure in the thing settings how often the value should be fetched. Default is every 500 ms.
Usecase examples:
* Reading analog sensor values like humidity, distance...
* Reading a potentiometer value
### Servo
If you configure a pin as *Servo* you can control a servo motor in the range of 0° - 180°. A servo normally gets controlled using a PWM signal, but for most DIY servos the internal PWM functionality has a to high frequency. This mode makes use of the [Arduino Servo library](https://www.arduino.cc/reference/en/libraries/servo/) and uses the internal timers to generate a customizable PWM signal.
> Please note that if you configure a Servo, 2 internal timers will be used and therefore you loose some native PWM functionality. Plase read the documetation of your Hardware.

100
owlet/arduinoflasher.cpp Normal file
View File

@ -0,0 +1,100 @@
#include "arduinoflasher.h"
#include "extern-plugininfo.h"
#include <QDir>
#include <QJsonDocument>
ArduinoFlasher::ArduinoFlasher(Arduino model, const QString &serialPort, QObject *parent) :
QObject(parent),
m_model(model),
m_serialPort(serialPort)
{
QString firmwareBasePath = "usr/share/nymea/owlet/firmware";
switch (model) {
case ArduinoUno: {
QString firmwarePath = firmwareBasePath + QDir::separator() + "arduino-uno";
QVariantMap releaseInfo = loadReleaseInfo(firmwarePath);
if (releaseInfo.isEmpty())
return;
m_availableVersion = releaseInfo.value("version").toString();
m_firmwareFileName = firmwarePath + QDir::separator() + releaseInfo.value("firmwareFile").toString();
if (!QFileInfo::exists(m_firmwareFileName)) {
qCWarning(dcOwlet()) << "ArduinoFlasher: Could not find the firmware file for flashing" << m_firmwareFileName;
return;
}
m_flashProcessArguments << "-c" << "avrisp" << "-p" << "m328p" << "-P" << serialPort << "-b" << "19200" << "-U" << QString("flash:w:%1:i").arg(m_firmwareFileName);
m_available = true;
break;
}
case ArduinoNano: {
break;
}
case ArduinoMiniPro3V: {
break;
}
case ArduinoMiniPro5V: {
break;
}
}
}
QString ArduinoFlasher::availableVersion() const
{
return m_availableVersion;
}
bool ArduinoFlasher::flashFirmware()
{
if (!m_available)
return false;
if (m_flashProcess)
return false;
m_flashProcess = new QProcess(this);
m_flashProcess->setProgram("avrdude");
m_flashProcess->setArguments(m_flashProcessArguments);
connect(m_flashProcess, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(onProcessFinished(int,QProcess::ExitStatus)));
m_flashProcess->start();
return true;
}
QVariantMap ArduinoFlasher::loadReleaseInfo(const QString &firmwareDirectoryPath)
{
QFileInfo releaseFileInfo(firmwareDirectoryPath + QDir::separator() + "release.json");
if (!releaseFileInfo.exists()) {
qCWarning(dcOwlet()) << "ArduinoFlasher: Could not load release info. The release file does not exist" << releaseFileInfo.absoluteFilePath();
return QVariantMap();
}
QFile releaseFile;
releaseFile.setFileName(releaseFileInfo.absoluteFilePath());
if (!releaseFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
qCWarning(dcOwlet()) << "ArduinoFlasher: Could not open release file" << releaseFileInfo.absoluteFilePath();
return QVariantMap();
}
QByteArray releaseJsonData = releaseFile.readAll();
releaseFile.close();
return QJsonDocument::fromJson(releaseJsonData).toVariant().toMap();
}
void ArduinoFlasher::onProcessFinished(int returnCode, QProcess::ExitStatus exitStatus)
{
if (returnCode != EXIT_SUCCESS || exitStatus != QProcess::NormalExit) {
qCWarning(dcOwlet()) << "ArduinoFlasher: Flash process finished with error" << returnCode << exitStatus;
emit flashProcessFinished(false);
} else {
qCDebug(dcOwlet()) << "ArduinoFlasher: Flash process finished successfully";
emit flashProcessFinished(true);
}
m_flashProcess->deleteLater();
m_flashProcess = nullptr;
}

49
owlet/arduinoflasher.h Normal file
View File

@ -0,0 +1,49 @@
#ifndef ARDUINOFLASHER_H
#define ARDUINOFLASHER_H
#include <QObject>
#include <QFileInfo>
#include <QProcess>
class ArduinoFlasher : public QObject
{
Q_OBJECT
public:
enum Arduino {
ArduinoUno,
ArduinoMiniPro5V,
ArduinoMiniPro3V,
ArduinoNano
};
Q_ENUM(Arduino)
explicit ArduinoFlasher(Arduino model, const QString &serialPort, QObject *parent = nullptr);
bool available() const;
QString availableVersion() const;
bool flashFirmware();
signals:
void flashProcessFinished(bool success);
private:
Arduino m_model = ArduinoUno;
QString m_serialPort;
QProcess *m_flashProcess = nullptr;
bool m_available = false;
QString m_availableVersion;
QString m_firmwareFileName;
QStringList m_flashProcessArguments;
QVariantMap loadReleaseInfo(const QString &firmwareDirectoryPath);
private slots:
void onProcessFinished(int returnCode, QProcess::ExitStatus exitStatus);
};
#endif // ARDUINOFLASHER_H

View File

@ -0,0 +1,650 @@
:100000000C9463000C948B000C948B000C948B006C
:100010000C948B000C948B000C948B000C948B0034
:100020000C948B000C948B000C948B000C94EB0EB6
:100030000C948B000C948B000C948B000C948B0014
:100040000C94490E0C948B000C94B90E0C94930EE6
:100050000C948B000C948B000C948B000C948B00F4
:100060000C948B000C948B000000000024002700EF
:100070002A0000000000250028002B0000000000DE
:1000800023002600290004040404040404040202DA
:100090000202020203030303030301020408102007
:1000A0004080010204081020010204081020000012
:1000B0000008000201000003040700000000000027
:1000C0000000A70F601211241FBECFEFD8E0DEBFE3
:1000D000CDBF11E0A0E0B1E0EEE5F8E202C005908E
:1000E0000D92A832B107D9F722E0A8E2B1E001C031
:1000F0001D92A13AB207E1F710E0C2E6D0E004C0D9
:100100002197FE010E94F712C136D107C9F70E945C
:10011000E1100C9422140C940000833081F028F438
:10012000813099F08230A9F008958730A9F08830A5
:10013000C9F08430B1F4809180008F7D03C080913C
:1001400080008F7780938000089584B58F7784BD79
:10015000089584B58F7DFBCF8091B0008F77809319
:10016000B00008958091B0008F7DF9CFCF93DF93D9
:10017000282F30E0F901E255FF4F8491F901E6564E
:10018000FF4FD491F901EA57FF4FC491CC23A1F05E
:1001900081110E948D00EC2FF0E0EE0FFF1FE4585C
:1001A000FF4FA591B491EC91ED2381E090E009F42B
:1001B00080E0DF91CF91089580E090E0FACF1F9327
:1001C000CF93DF93282F30E0F901E255FF4F849160
:1001D000F901E656FF4FD491F901EA57FF4FC49158
:1001E000CC23A9F0162F81110E948D00EC2FF0E096
:1001F000EE0FFF1FEE58FF4FA591B4918FB7F89403
:10020000EC91111108C0D095DE23DC938FBFDF91F4
:10021000CF911F910895DE2BF8CFCF93DF9390E01D
:10022000FC01E656FF4F24918A579F4FFC018491B1
:100230008823D1F090E0880F991FFC01E859FF4F07
:10024000A591B491FC01EE58FF4FC591D491611175
:100250000EC09FB7F8948C91E22FE0958E238C937B
:100260002881E223E8839FBFDF91CF9108958FB764
:10027000F894EC91E22BEC938FBFF6CF8E3008F020
:100280008E508770806480937C0080917A008064B7
:1002900080937A0080917A0086FDFCCF809178006F
:1002A0009091790008953FB7F894809163019091FF
:1002B0006401A0916501B091660126B5A89B05C0B7
:1002C0002F3F19F00196A11DB11D3FBFBA2FA92FD5
:1002D000982F8827BC01CD01620F711D811D911DD2
:1002E00043E0660F771F881F991F4A95D1F708953D
:1002F0008F929F92AF92BF92CF92DF92EF92FF9236
:100300000E9453014B015C0184E6C82ED12CE12CE4
:10031000F12C0E945301681979098A099B09683EEA
:10032000734081059105A8F321E0C21AD108E108C4
:10033000F10888EE880E83E0981EA11CB11CC11440
:10034000D104E104F10429F7FF90EF90DF90CF9002
:10035000BF90AF909F908F9008950895AF92BF92F5
:10036000CF92DF92EF92FF920F931F93CF93DF9381
:100370006C017B018B01040F151FEB015E01AE18B0
:10038000BF08C017D10759F06991D601ED91FC91D2
:100390000190F081E02DC6010995892B79F7C501FF
:1003A000DF91CF911F910F91FF90EF90DF90CF9051
:1003B000BF90AF900895FC01538D448D252F30E000
:1003C000842F90E0821B930B541710F0CF96089562
:1003D00001970895FC01918D828D981761F0A28D8F
:1003E000AE0FBF2FB11D5D968C91928D9F5F9F7355
:1003F000928F90E008958FEF9FEF0895FC01918D0B
:10040000828D981731F0828DE80FF11D858D90E077
:1004100008958FEF9FEF0895FC01918D228D892F14
:1004200090E0805C9F4F821B91098F7399270895FC
:1004300087E691E00E940C0221E0892B09F420E07C
:10044000822F089580E090E0892B29F00E94180205
:1004500081110C9400000895FC01A48DA80FB92F00
:10046000B11DA35ABF4F2C91848D90E001968F73DC
:100470009927848FA689B7892C93A089B1898C91FB
:10048000837080648C93938D848D981306C002884A
:10049000F389E02D80818F7D80830895EF92FF9214
:1004A0000F931F93CF93DF93EC0181E0888F9B8D97
:1004B0008C8D98131AC0E889F989808185FF15C051
:1004C0009FB7F894EE89FF896083E889F989808174
:1004D0008370806480839FBF81E090E0DF91CF9143
:1004E0001F910F91FF90EF900895F62E0B8D10E065
:1004F0000F5F1F4F0F731127E02E8C8D8E110CC0D4
:100500000FB607FCFACFE889F989808185FFF5CF1E
:10051000CE010E942C02F1CFEB8DEC0FFD2FF11DCF
:10052000E35AFF4FF0829FB7F8940B8FEA89FB895B
:1005300080818062CFCFCF93DF93EC01888D8823B9
:10054000B9F0AA89BB89E889F9898C9185FD03C036
:10055000808186FD0DC00FB607FCF7CF8C9185FF1B
:10056000F2CF808185FFEDCFCE010E942C02E9CF32
:10057000DF91CF910895CF93DF9300D0CDB7DEB751
:10058000DA012C91FB01308139832A83DC018D91C2
:100590009C91DC01ED91FC910284F385E02D22E039
:1005A00030E0AE014F5F5F4F61EF70E009950F9053
:1005B0000F90DF91CF9108956115710531F0FC0125
:1005C00080819181FB01918380830895CF92DF9296
:1005D000EF92FF920F931F93CF93DF93EC01162FAF
:1005E0006A017901E881F9810280F381E02D41E01F
:1005F00060EC0995E881F9810280F381E02D40E00B
:10060000612FCE010995E881F9810280F381E02D07
:10061000DE01A95FBE4F6C9181E0860F8C9340E0B4
:10062000CE0109958601EC0CFD1CE881F981028060
:10063000F381E02DE016F10639F0D8016D918D01BE
:1006400040E0CE010995F1CF41E060ECCE01099583
:100650008A819B81DC01ED91FC910680F781E02D80
:10066000DF91CF911F910F91FF90EF90DF90CF908E
:100670000994BF92CF92DF92EF92FF920F931F9354
:10068000CF93DF93EC01B62EC42ED22EE881F981F0
:100690000280F381E02D41E060EC0995E881F98169
:1006A0000280F381E02D40E06B2DCE010995E881B9
:1006B000F9810280F381E02D40E06C2DCE01099597
:1006C000E881F9810280F381E02D40E06D2DCE01BB
:1006D00009956801E00EF11EE881F9810280F3813D
:1006E000E02DEC14FD0439F0D6016D916D0140E070
:1006F000CE010995F1CF41E060ECCE0109958A81E8
:100700009B81DC01ED91FC910680F781E02DDF916A
:10071000CF911F910F91FF90EF90DF90CF90BF90FE
:100720000994DC0112968D919C91DC01ED91FC9174
:100730000190F081E02D0994CF93DF93DC01ED91DE
:10074000FC910480F581E02D442319F0DF91CF91D5
:100750000994EC01603C21F06B3D59F0CE01F6CFDD
:100760006BED0995E881F9810480F581E02D6CED50
:10077000F5CF6BED0995E881F9810480F581E02DD5
:100780006DEDECCF0F931F93CF93DF93EC01CA5F16
:10079000DE4F2881222321F06C3D49F06D3D09F1A7
:1007A000603C59F16B3D81F481E088833AC0DC0103
:1007B000AB5FBE4FEC9121E02E0F2C93E80FF92F89
:1007C000F11D20EC26831882FC01EB5FFE4F208197
:1007D00031E0320F3083820F911DDC0116966C934D
:1007E00020C0DC01AB5FBE4FEC9121E02E0F2C93BB
:1007F000E80FF92FF11D2BEDE5CF8C010B5F1E4F9C
:10080000D8014C91442351F0BC016A5F7F4FDC0159
:10081000ED91FC910680F781E02D0995F801108299
:100820001882DF91CF911F910F910895DC01ED9116
:10083000FC91309729F00280F381E02D0296099413
:100840000895FC01828D938D30E020E02817390750
:10085000E1F0A785B089A20FB31F4C91641312C0B9
:1008600080A591A52817390718F082A593A50895AA
:10087000220F331F858D968D280F391FF901808136
:10088000918108952F5F3F4FE1CF8585968508952B
:10089000CF93DF93EC01CD3C8CE0D807A0F42AE0A5
:1008A0002C9FC0012D9F900D112402960E94FD12D5
:1008B000FC01C193D193CF012197D7FD07C01182CD
:1008C00010823A96F9CF8FEF9FEFF0CFDF91CF9163
:1008D0000895EF92FF920F931F93CF93DF93EC0154
:1008E0008B0180E190E09F838E8381E088871D8665
:1008F000FB01E184F284C7010E94FD129983888381
:10090000892B61F1F801828193819B838A838481A1
:1009100095819D838C83868197819F838E8380853B
:100920008887FA86E986838594859C878B87858569
:100930008D8790E080E02B853C858217930770F4CB
:10094000E0913E02F0913F02E80FF91F2081E8811B
:10095000F981E80FF91F20830196EDCFDF91CF9148
:100960001F910F91FF90EF900895EF92FF920F93D8
:100970001F93CF93DF930097C1F1EC01FC013297F5
:10098000808191812AE0289F8001299F100D1124E8
:100990000C0F1D1F7801CE15DF0539F08AE0E81A2B
:1009A000F108C7010E941604F6CFC8018C1B9D0BED
:1009B000969587954DEC5CE4849F9001859F300D62
:1009C000949F300D11243F7746EF4203C001439FAF
:1009D000900D11240297800F911FDF91CF911F91ED
:1009E0000F91FF90EF900C949913DF91CF911F918D
:1009F0000F91FF90EF9008952F923F924F925F9248
:100A00006F927F928F929F92AF92BF92CF92DF921E
:100A1000EF92FF920F931F93CF93DF938C016B01A3
:100A2000FC01C481D58181859285C617D707B8F4AA
:100A3000C817D907A9F480E0DF91CF911F910F91DA
:100A4000FF90EF90DF90CF90BF90AF909F908F90EE
:100A50007F906F905F904F903F902F900895EB01A3
:100A6000F8012085211105C08C179D0738F081E021
:100A7000E3CF6E018C179D0708F46C011E012097CF
:100A800019F480E1282E312CC1010E9448043C0158
:100A9000009789F27C01512C412CF80180809180D3
:100AA000C414D504E9F05701A618B708C7010E947D
:100AB0001604E114F10469F0F401EA0DFB1D8191C3
:100AC0009191D7018D939D9388E001900D928A9525
:100AD000E1F7FFEF4F1A5F0A8AE0E80EF11CDDCF65
:100AE000C4010E94B504F8017182608221863286B9
:100AF00083859485C817D90708F0B9CFD487C387F1
:100B0000B6CF0F931F93CF93DF938C0160918F0229
:100B100070919002809191029091920286179707AE
:100B2000F8F420919102309192024AE0429FC00174
:100B3000439F900D1124C0918602D0918702C80F67
:100B4000D91FCE010E9416042097E9F480919102EA
:100B500090919202019690939202809391020EC01E
:100B600080918C0290918D02009741F0680F791F5F
:100B700086E892E00E94FC048111D3CFDF91CF91EF
:100B80001F910F910895F80181919191DE018D934C
:100B90009D9388E001900D928A95E1F7D7CF0F934E
:100BA0001F93CF93DF93EC018B0169857A8506173C
:100BB000170738F08E819F81680F791FCE010E9440
:100BC000FC0489859A852B853C850217130740F024
:100BD0008017910740F098012F5F3F4F3C872B878C
:100BE0000817190738F0CE010D96DF91CF911F91AC
:100BF0000F9108958AE0809F9001819F300D11240C
:100C000088819981820F931FF0CFAF92BF92CF92CC
:100C1000DF92EF92FF920F931F93CF93DF938C019C
:100C20007B01FC01C481D58181859285C617D707D8
:100C300078F4C817D90769F480E0DF91CF911F914C
:100C40000F91FF90EF90DF90CF90BF90AF900895FD
:100C5000EB01F8012085211105C08C179D0738F0A4
:100C600081E0EBCF7E018C179D0708F47C01209773
:100C700021F16E018FEF9FEFC115F0E4DF0718F44B
:100C8000C601880F991F0E94FD125C010097A1F216
:100C9000DC01F8018081918130E020E0E216F3066A
:100CA00081F0F901EE0FFF1FE80FF91F408151811C
:100CB0004D935D932F5F3F4FF1CF60E1C62ED12C56
:100CC000DFCF009711F00E949913F801B182A08242
:100CD000D286C18683859485C817D90708F6D4873C
:100CE000C387BECF0F931F93CF93DF93EC018B018C
:100CF00069857A850617170738F08E819F81680FFE
:100D0000791FCE010E94050689859A852B853C8531
:100D10000217130740F08017910740F098012F5FEA
:100D20003F4F3C872B870817190738F0CE010D96E7
:100D3000DF91CF911F910F910895000F111F8881AE
:100D40009981800F911FF4CF8F929F92AF92BF92A3
:100D5000CF92DF92EF92FF920F931F93CF93DF9387
:100D6000EC017B0189859A856817790760F0CE8050
:100D7000DF80C80ED91E0C811D810C151D0528F5BC
:100D80008017910719F589859A852B853C85E21690
:100D9000F30640F08E159F0548F097012F5F3F4FF7
:100DA0003C872B87E816F90608F458C0CE010D964B
:100DB000DF91CF911F910F91FF90EF90DF90CF9037
:100DC000BF90AF909F908F90089586012885211144
:100DD00027C080179107B8F60115110539F15801A0
:100DE000011580E4180730F5C501880F991F0E948E
:100DF000FD124C01009739F2DC018881998130E0C5
:100E000020E0C216D306C9F0F901EE0FFF1FE80F6C
:100E1000F91F408151814D935D932F5F3F4FF1CF7B
:100E20006C0108171907C0F66801D6CF60E1A62E3D
:100E3000B12CDACF8FEF9FEFDACF009711F00E943D
:100E4000991399828882BA86A9868B859C85081712
:100E5000190708F098CF1C870B8795CFEE0CFF1C65
:100E6000888199818E0D9F1DA3CFAF92BF92CF92A3
:100E7000DF92EF92FF920F931F93CF93DF938C013A
:100E80007B01DC011496CD91DC91159719968D911B
:100E90009C91C617D70778F4C817D90769F480E082
:100EA000DF91CF911F910F91FF90EF90DF90CF9046
:100EB000BF90AF900895EB01F8012085211105C086
:100EC0008C179D0738F081E0EBCF7E018C179D07D2
:100ED00008F47C016E01209719F480E1C82ED12C12
:100EE000C6010E94FD125C010097C9F2FC01D80105
:100EF0008D919C9130E020E0E216F30641F0DC0198
:100F0000A20FB31F4C9141932F5F3F4FF5CF009736
:100F100011F00E949913F801B182A082C186D28695
:100F200083859485C817D90770F6D487C387CBCF3C
:100F3000CF93FC0183859485C0E06817790750F54D
:100F40008385948501976817790778F4808191816A
:100F50009B012F5F3F4FDC01A20FB31F4C91680F25
:100F6000791FDB014C93B901EBCF94878387C08550
:100F7000CC2399F04185528526813781BA01621BC5
:100F8000730B8617970730F42417350718F4CF0131
:100F90000E9435078C2FCF910895C1E0FBCF0F93AE
:100FA0001F93CF93DF93EC018B0169857A858B8545
:100FB0009C8586179707A8F4F8018081E881F9815C
:100FC0002B853C85E20FF31F80832B853C85C9016F
:100FD00001969C878B87C901DF91CF911F910F915B
:100FE00008958E819F81009719F48FEF9FEFF4CFC2
:100FF000680F791FCE010E9435078111DDCFF5CF33
:101000000F931F93CF93DF93EC018B0169857A8552
:101010000617170738F08E819F81680F791FCE0160
:101020000E94350789859A852B853C850217130711
:1010300040F08017910740F098012F5F3F4F3C87A9
:101040002B870817190738F0CE010D96DF91CF9145
:101050001F910F91089588819981800F911FF6CF7C
:10106000CF92DF92FF920F931F93CF93DF938C0168
:10107000F62ED0E0C0E06C018FE0C80ED11CF80164
:10108000828D938DC817D90798F4BE01C6010E94BE
:101090000008FC0180818F1109C0CE01DF91CF9142
:1010A0001F910F91FF90DF90CF9008952196E7CF89
:1010B0008FEF9FEFF3CFCF92DF92EF92FF920F93DC
:1010C0001F93CF93DF931F92CDB7DEB78C01698357
:1010D000F12CE12C6C018FE0C80ED11CF801828D3F
:1010E000938DE816F90698F4B701C6010E9400082E
:1010F000FC0190818981981306C0B701C8014D9603
:101100000E94A4060EC0FFEFEF1AFF0AE7CFBE0150
:101110006F5F7F4FC6010E94CF0797FF0CC0C801C9
:101120000D960F90DF91CF911F910F91FF90EF904F
:10113000DF90CF900895F801208131812F5F3F4FDC
:1011400031832083BC01DACFCF92DF92EF92FF92FE
:101150000F931F93CF93DF938C01D62ED0E0C0E086
:101160007C018FE0E80EF11CD8015A968D919C917C
:10117000C817D90708F052C0BE01C7010E94000875
:10118000FC0180818D1148C0D80198968D919C9169
:10119000C817D90798F5AE01440F551FBE01019736
:1011A000FA0132966817790790F4D8015D962D916F
:1011B0003C916F5F7F4FD901AE0FBF1FCD90DC9088
:1011C000240F351FD901CD92DC92AF01E9CFF80190
:1011D00091A780A725A1222389F046A157A123A189
:1011E00034A1BA01621B730B8617970738F42417D2
:1011F000350720F4C8014D960E940506BE01C701BF
:101200000E949807CE01DF91CF911F910F91FF901F
:10121000EF90DF90CF9008952196A6CF8FEF9FEFAC
:10122000F2CFCF92DF92EF92FF920F931F93CF9363
:10123000DF931F92CDB7DEB78C016983F12CE12CCF
:101240006C018FE0C80ED11CF801828D938DE816D9
:10125000F90698F4B701C6010E940008FC019081CC
:101260008981981306C0B701C8014D960E94720685
:101270000EC0FFEFEF1AFF0AE7CFBE016F5F7F4F8F
:10128000C6010E94CF0797FF0CC0C8010D960F90B2
:10129000DF91CF911F910F91FF90EF90DF90CF9052
:1012A0000895F801208131812F5F3F4F31832083E2
:1012B000BC01DACFCF92DF92EF92FF920F931F9390
:1012C000CF93DF931F92CDB7DEB78C016983F12CEA
:1012D000E12C6C018EE0C80ED11CF801818D928D3D
:1012E000E816F90698F4B701C6010E940008FC014F
:1012F00090818981981306C0B701C8014C960E945D
:1013000000080EC0FFEFEF1AFF0AE7CFBE016F5FC4
:101310007F4FC6010E94CF0797FF0CC0C8010D96F2
:101320000F90DF91CF911F910F91FF90EF90DF9081
:10133000CF900895F801208131812F5F3F4F318395
:101340002083BC01DACFFC0180819181009711F0EC
:101350000C94991308952F923F925F926F927F920F
:101360008F929F92AF92BF92CF92DF92EF92FF92B5
:101370000F931F93CF93DF93CDB7DEB729970FB6A7
:10138000F894DEBF0FBECDBF6C017B01DB016C9119
:1013900011965C90673008F06DC4E62FF0E0ED52D6
:1013A000F64F0C94F712DA09100AF10B5F0C9E0C41
:1013B0003D0D790DDC01ED91FC910084F185E02D6E
:1013C000423011F1F12CE12C10E000E023E030E09C
:1013D000452D60E0C601099529960FB6F894DEBF49
:1013E0000FBECDBFDF91CF911F910F91FF90EF9076
:1013F000DF90CF90BF90AF909F908F907F906F9035
:101400005F903F902F90089519821A824B8333E0AA
:10141000E32EF12C8E010F5F1F4F30E020E0D8CF7C
:10142000EDB7FEB7F987E887443079F0DC01ED913C
:10143000FC910084F185E02DF12CE12C10E000E01E
:1014400023E030E0452D61E0C5CFF70112818381B3
:10145000282E312CD6011496ED90FC90823009F4A0
:10146000F7C078F4882309F437C1813009F4E0C06B
:10147000612FC7010E945B08DC012D923C9280E045
:10148000BEC0843009F4F1C008F4E7C0853081F7AC
:101490005701F6E5AF0EB11C712C612C9701205954
:1014A0003F4F3F832E8345013FE0830E911CAE8169
:1014B000BF818D919C916816790650F4B301C401E7
:1014C0000E940008FC0180811813DCC077FEDEC09A
:1014D00083E090E00E94FD124C0180914C018C3021
:1014E00008F0F6C091E0980F90934C01D4018C93D2
:1014F00090E0FC01EE0FFF1FE80FF91FE85DFE4FC3
:101500008CED95E092838183612FC5010E941109C2
:10151000DC018D929C92612FC5010E941109FC0192
:1015200080809180D4018C918C3008F055C061E0AE
:10153000812F0E940D01F4018081282F30E0F901F4
:10154000EE0FFF1FE20FF31FE85DFE4F9081907CCE
:10155000212F2F73922B9083D40111961C921197F7
:1015600012961C922CE0622F0E94EB12829FB00117
:10157000112430E020E0AB01420F531FFA01EE0FBF
:10158000FF1FE40FF51FE85DFE4F908196FD16C02A
:101590002F5F3F4F2C30310571F781110FC0109232
:1015A000800082E080938100109285001092840078
:1015B000B19A80916F00826080936F00D401EC91AA
:1015C0008E2F90E0FC01EE0FFF1FE80FF91FE85D82
:1015D000FE4F808180648083F40180818F3F09F019
:1015E00047CF612FC5010E941109DC018D919C91AB
:1015F0000E949913612FC5010E94A40885E0898388
:10160000D601ED91FC910084F185E02DEE24E39468
:10161000F12C8E010F5F1F4F30E020E0452D61E07F
:10162000C60109950FB6F894DEBF0FBECDBFD4CE6C
:1016300060E0812F0E940D01812F0E94B600082FCB
:10164000612FC7018C960E945A09FC01008310CFBC
:1016500061E0812F0E940D010BCF60E0812F0E947D
:101660000D01812F0E943E0103CF61E0812F0E9476
:101670000D0161E0812F0E940D0160E0812F0E9429
:10168000DF00F6CEFFEF6F1A7F0A11CF612FC50181
:101690000E941109DC01ED91FC91E0818E2F90E018
:1016A000FC01EE0FFF1FE80FF91FE85DFE4F808180
:1016B0008F7B8083612FC5010E941109FC0180810D
:1016C00091810E949913612FC5010E94A40800CF47
:1016D0008FEFF401808318CFB12CA12CF701E059D2
:1016E000FF4FFF83EE834701F6E58F0E911C340117
:1016F0002FE0620E711CAE81BF818D919C91A81666
:10170000B90650F4B501C3010E940008FC018081B4
:1017100018131EC0B7FE20C0B12CA12C3701F5E470
:101720006F0E711C47012AE3820E911CD3018D912B
:101730009C91A816B90650F4B501C4010E94000896
:10174000FC01808118132AC0B7FE2CC060E081CF55
:10175000FFEFAF1ABF0ACFCF612FC4010E9411095A
:10176000DC01ED91FC91E0818E2F90E0FC01EE0F09
:10177000FF1FE80FF91FE85DFE4F80818F7B80839C
:10178000612FC4010E941109FC01808191810E9496
:101790009913612FC4010E94A408BECFFFEFAF1AB6
:1017A000BF0AC4CFB12CA12CD3018D919C91A81656
:1017B000B90660F6B501C4010E940008FC018081F1
:1017C00018130BC0B501C701885B9F4F0E94980793
:1017D000B501C4010E949807B9CFFFEFAF1ABF0A45
:1017E000E3CF443079F0DC01ED91FC910084F18588
:1017F000E02DF12CE12C10E000E023E030E0452D5D
:1018000062E0E8CDF70112819380DC011496ED903F
:10181000FC90612FC7010E9430080196C9F1612F29
:10182000C7010E945B08FC0180819181029709F049
:1018300042C001E0911001C000E0602F812F0E94A2
:10184000DF00912C812C3701FDE86F0E711C22E81E
:10185000E20EF11CD3018D919C918816990668F5D2
:10186000B401C7010E94CF051C830983DC01ED91FF
:10187000FC910480F581E02DAE014F5F5F4FBE010A
:101880006C5F7F4F02960995BFEF8B1A9B0AE2CFE0
:1018900081E08D83D601ED91FC910084F185E02DEE
:1018A000EE24E394F12C8E010B5F1F4F30E020E01B
:1018B000452D62E0B5CE83E0ECCF80E0EACF433047
:1018C00079F0DC01ED91FC910084F185E02DF12CA3
:1018D000E12C10E000E023E030E0452D63E07ACD1C
:1018E000F7011281612FDC0114968D919C910E9469
:1018F00021040097F1F001970297F0F4812F0E94E4
:10190000B60021E0892B09F420E080E089832A8356
:10191000D601ED91FC910084F185E02D02E0E02EEE
:10192000F12C8E010F5F1F4F30E020E0452D63E06A
:1019300077CE81E020E0EACF82E0FCCF443079F03E
:10194000DC01ED91FC910084F185E02DF12CE12C7E
:1019500010E000E023E030E0452D64E03BCDF701EE
:101960001281DC0114968D909C90612FC4010E941D
:101970002104009799F481E08983D601ED91FC91CF
:101980000084F185E02DEE24E394F12C8E010F5FAD
:101990001F4F30E020E0452D64E042CE049711F067
:1019A00083E0EACFF7010381612FC4010E94300870
:1019B000019609F3612FC4010E945B08DC018D913F
:1019C0009C91049769F7E02EF12C61E0812F0E9431
:1019D0000D01E114F10429F460E0812F0E94DF0081
:1019E0002BC0BFEFEB16F10411F461E0F6CFE12F4D
:1019F000F0E0E255FF4FE491E33029F148F4E130A3
:101A0000B9F0E230D9F0E0E8EE16F10474F7E4CF73
:101A1000E73019F1E83049F1E430A9F7809180000E
:101A2000806280938000F0928B00E0928A0004C074
:101A300084B5806884BD07BD80E09ECF84B5806298
:101A400084BD08BDF9CF80918000806880938000BC
:101A5000F0928900E0928800EFCF8091B00080681A
:101A60008093B0000093B300E7CF8091B000806214
:101A70008093B0000093B400DFCF433079F0DC01F5
:101A8000ED91FC910084F185E02DF12CE12C10E02A
:101A900000E023E030E0452D65E09CCCF7011281A9
:101AA000612FDC0114968D919C910E942104009776
:101AB000E1F0039722E00297C8F4812F0E943E01D3
:101AC00020E029839A838B83D601ED91FC910084D9
:101AD000F185E02DB3E0EB2EF12C8E010F5F1F4F4F
:101AE00030E020E0452D65E09BCD21E080E090E0F6
:101AF000E8CF443079F0DC01ED91FC910084F18570
:101B0000E02DF12CE12C10E000E023E030E0452D49
:101B100066E060CCF7011281DC0114968D909C90F8
:101B2000612FC4010E942104009799F481E0898308
:101B3000D601ED91FC910084F185E02DEE24E39433
:101B4000F12C8E010F5F1F4F30E020E0452D66E045
:101B500067CD059709F08AC0F701038184E0053B52
:101B600030F7612FC4010E94300897FDDFCF612F4D
:101B7000C4010E945B08DC018D919C91059709F0DE
:101B800077C0B6E58B0E911C612FC4010E9411092C
:101B9000DC01ED91FC91E0818E2F90E0FC01EE0FD5
:101BA000FF1FE80FF91FE85DFE4F808186FFBECF63
:101BB000612FC4010E941109DC01ED91FC9110819B
:101BC0001C3008F051C0828148E5842E42E0942EFA
:101BD000881A910887FD93941401220C331C220C5F
:101BE000331C818168E8E62EF12CE81AF10887FDA4
:101BF000F394EE0CFF1CEE0CFF1C37010F2C000CB5
:101C0000880899089101032C000C440B550B2619E8
:101C1000370948095909A02FB0E00E94AF1224EB00
:101C200030E040E050E00E949012BA01A901460D58
:101C3000571D681D791D4E155F052CF07101421569
:101C400053050CF47A012FB7F894812F90E0B2E09D
:101C5000EB1AF108FC01EE0FFF1FE80FF91FE85D1A
:101C6000FE4FF282E1822FBF80E061CF82E05FCF42
:101C700083E05DCFDC01ED91FC910084F185E02DE6
:101C8000F12CE12C10E000E022E030E0452D099538
:101C9000A3CB1F920F920FB60F9211242F933F9355
:101CA0008F939F93AF93BF9380915F019091600159
:101CB000A0916101B091620130915E0126E0230F95
:101CC0002D3758F50296A11DB11D20935E0180931A
:101CD0005F0190936001A0936101B09362018091D4
:101CE000630190916401A0916501B0916601019634
:101CF000A11DB11D8093630190936401A0936501C0
:101D0000B0936601BF91AF919F918F913F912F91B9
:101D10000F900FBE0F901F90189529E8230F039680
:101D2000A11DB11DD2CF1F920F920FB60F92112499
:101D30002F933F934F935F936F937F938F939F93D3
:101D4000AF93BF93EF93FF9387E691E00E942C023D
:101D5000FF91EF91BF91AF919F918F917F916F9183
:101D60005F914F913F912F910F900FBE0F901F9059
:101D700018951F920F920FB60F9211242F938F93E5
:101D80009F93EF93FF93E0917701F0917801808129
:101D9000E0917D01F0917E0182FD1BC090818091D8
:101DA00080018F5F8F7320918101821741F0E09154
:101DB0008001F0E0E959FE4F958F80938001FF91FB
:101DC000EF919F918F912F910F900FBE0F901F90C9
:101DD00018958081F4CF1F920F920FB60F921124A5
:101DE0002F933F934F935F936F937F938F939F9323
:101DF000AF93BF93CF93DF93EF93FF9380914D0108
:101E0000C0914C01D0E087FF24C010928500109251
:101E1000840080914D018F5F80934D0180914D0131
:101E2000082E000C990B8C179D0724F480914D010E
:101E30008C30C4F1809184009091850004968032AA
:101E40009E4408F47AC080918400909185000496A5
:101E500076C080914D01082E000C990B8C179D07C0
:101E6000C4F6E0914D018E2FEE0F990BFC01EE0FA1
:101E7000FF1FE80FF91FE85DFE4F808186FFC9CF85
:101E8000E0914D018E2FEE0F990BFC01EE0FFF1F1D
:101E9000E80FF91FE85DFE4F808160E08F730E94BC
:101EA000DF00B7CF2091840030918500E0914D0193
:101EB0008E2FEE0F990BFC01EE0FFF1FE80FF91F9D
:101EC000E85DFE4F81819281820F931F909389007C
:101ED00080938800E0914D018E2FEE0F990BFC014D
:101EE000EE0FFF1FE80FF91FE85DFE4F808186FFB0
:101EF00011C0E0914D018E2FEE0F990BFC01EE0FFA
:101F0000FF1FE80FF91FE85DFE4F808161E08F73CE
:101F10000E94DF00FF91EF91DF91CF91BF91AF91D0
:101F20009F918F917F916F915F914F913F912F91F1
:101F30000F900FBE0F901F90189580E29EE4909333
:101F40008900809388008FEF80934D01E3CFCF927B
:101F5000DF92FF920F931F93CF93DF93E7E6F1E0B9
:101F60001382128288EE93E0A0E0B0E08483958330
:101F7000A683B7838AE191E09183808385EC90E02A
:101F80009587848784EC90E09787868780EC90E043
:101F9000918B808B81EC90E0938B828B82EC90E034
:101FA000958B848B86EC90E0978B868B118E128EAE
:101FB000138E148EC4E0D2E000E110E01F830E8384
:101FC000CC24CA94DC2CD986C8861B870A87FF24B8
:101FD000F394FC861E861D861A8B098BDC8ACB8ABD
:101FE0001E8B0D8BFF8A1C8E1B8E1A8E198F088FED
:101FF00080E190E00E94FD12988B8F8718A30F8FCD
:10200000DAA2C9A21CA30BA3FDA21BA61AA619A69D
:1020100018A61FA30EA380E290E00E94FD129E8FDF
:102020008D8F198218821D830C831BAB0AABDDAA2E
:10203000CCAA1FAB0EABF8AE19AE1DAF0CAFDFAE26
:10204000CEAE1093450200934402F09246021092E5
:102050004B0210924A0210924902109348020093D8
:10206000470280E190E00E94FD129BAF8AAF10937F
:102070004F0200934E02D0925102C0925002109330
:10208000530200935202F09254021092590210929D
:10209000580210925702109356020093550280E1A5
:1020A00090E00E94FD1290934D0280934C021DA679
:1020B0001CA619AB08AB1093610200936002D0928A
:1020C0006302C09262021093650200936402F09270
:1020D0006602109268021092670210936C020093DD
:1020E0006B02D0926E02C0926D0210937002009348
:1020F0006F02F092710210927602109275021092A5
:102100007402109373020093720280E190E00E94C7
:10211000FD1290936A028093690210937A020093F1
:102120007902D0927C02C0927B0210937E020093CF
:102130007D02F0927F02109285021092840210922A
:10214000830210928202109381020093800280E247
:1021500090E00E94FD129093780280937702109293
:102160005B0210925A0210935F0200935E0210937A
:10217000890200938802D0928B02C0928A02109347
:102180008D0200938C02F0928E02109294021092B3
:102190009302109292021092910210939002009377
:1021A0008F0280E190E00E94480490938702809320
:1021B0008602DF91CF911F910F91FF90DF90CF901A
:1021C0000895CF93DF93CDB7DEB760970FB6F8943D
:1021D000DEBF0FBECDBF789484B5826084BD84B568
:1021E000816084BD85B5826085BD85B5816085BD12
:1021F00080916E00816080936E00109281008091CA
:102200008100826080938100809181008160809351
:102210008100809180008160809380008091B10076
:1022200084608093B1008091B00081608093B000A1
:1022300080917A00846080937A0080917A00826035
:1022400080937A0080917A008E7F80937A008091CB
:102250007A00806880937A001092C10088E091E053
:102260000E94FD128C018AE091E0D80111969C93A6
:102270008E9387E691E013969C938E93129784E059
:1022800092E015969C938E931497F801EB5FFE4FA6
:102290001082319610823196108280915401811102
:1022A00015C08CED92E090934F0180934E018DEA22
:1022B00091E090935101809350018BEB92E09093C9
:1022C00053018093520181E0809354018EE491E0A8
:1022D0009A8389831C830B83CE0101960E9481051A
:1022E000CE0101960E94160410935D0100935C01DB
:1022F00061E08DE00E940D0161E08DE00E94DF0051
:102300000E94780160E08DE00E94DF000E94780169
:1023100061E08DE00E94DF000E94780160E08DE0C6
:102320000E94DF0060E08DE00E940D01D80112964E
:10233000ED91FC91A089B18982E08C93A485B5854B
:102340001C92A685B78588E08C93108EA489B589E8
:1023500086E08C93A289B3898C9180618C93A28949
:10236000B3898C9188608C93A289B3898C918068A1
:102370008C930288F389E02D80818F7D80830E9479
:10238000780130E020E050E040E060EF70E0C8010C
:102390000E94E60280E0A82E80E0B82E6EE372E094
:1023A000CE0101960E946904F12CE12C8C859D855B
:1023B000E816F90608F04FC0B701CE0101960E9459
:1023C0000008FC011081612F84E092E00E945B080C
:1023D000DC018D919C910197D1F5812F0E94B6006F
:1023E000082F612F80E392E00E945A09FC0180814E
:1023F000081769F1612F80E392E00E945A09DC011D
:102400000C93D12CC12C8091910290919202C8160C
:10241000D906E8F4B60186E892E00E94CF05188B51
:1024200021E0013009F020E02F87DC01ED91FC91E3
:102430000480F581E02DAE01415F5F4FBE01605F1A
:102440007F4F02960995BFEFCB1ADB0ADCCFEFEF87
:10245000EE1AFE0AABCFCE0101960E94A3090091AD
:102460005C0110915D01D80112968D919C91DC0167
:10247000ED91FC910084F185E02D0995892BA1F067
:10248000F80182819381DC01ED91FC910284F38556
:10249000E02D0995D801ED91FC910190F081E02D9E
:1024A000682FC8010995DFCFA114B10409F476CFD4
:1024B0000E941802882309F471CF0E9400006ECF99
:1024C0008091860290918702009731F00E94B504B6
:1024D000109287021092860283E992E00E9416040D
:1024E0008091770290917802009711F00E949913E1
:1024F00089E692E00E94A3098CE492E00E94A3097D
:102500008EE392E00E94A309809121029091220221
:10251000009711F00E94991383E192E00C94A309B3
:10252000052E97FB1EF400940E94A71257FD07D0BA
:102530000E94BA1207FC03D04EF40C94A7125095D7
:102540004095309521953F4F4F4F5F4F089590959F
:102550008095709561957F4F8F4F9F4F08950E9492
:10256000DC12A59F900DB49F900DA49F800D911D2E
:1025700011240895A1E21A2EAA1BBB1BFD010DC058
:10258000AA1FBB1FEE1FFF1FA217B307E407F50723
:1025900020F0A21BB30BE40BF50B661F771F881FFF
:1025A000991F1A9469F760957095809590959B0195
:1025B000AC01BD01CF010895A29FB001B39FC0013E
:1025C000A39F700D811D1124911DB29F700D811D5F
:1025D0001124911D0895991B79E004C0991F961745
:1025E00008F0961B881F7A95C9F780950895EE0F1D
:1025F000FF1F0590F491E02D09940F931F93CF9343
:10260000DF938230910510F482E090E0E0919F0228
:10261000F091A00230E020E0B0E0A0E0309799F423
:102620002115310509F44AC0281B390B2430310526
:10263000D8F58A819B816115710589F1FB0193832E
:102640008283FE0111C040815181028113814817AC
:102650005907E0F04817590799F4109761F012965E
:102660000C93129713961C933296CF01DF91CF9162
:102670001F910F91089500939F021093A002F4CF31
:102680002115310551F04217530738F0A901DB013C
:102690009A01BD01DF01F801C1CFEF01F9CF90939D
:1026A000A00280939F02CDCFFE01E20FF31F819322
:1026B00091932250310939832883D7CF20919D02ED
:1026C00030919E02232B41F42091020130910301AD
:1026D00030939E0220939D022091000130910101D0
:1026E0002115310541F42DB73EB7409104015091B9
:1026F0000501241B350BE0919D02F0919E02E2172B
:10270000F307A0F42E1B3F0B2817390778F0AC0114
:102710004E5F5F4F2417350748F04E0F5F1F5093F1
:102720009E0240939D02819391939FCFF0E0E0E061
:102730009CCFCF93DF930097E9F0FC01329713828F
:102740001282A0919F02B091A002ED0130E020E042
:102750001097A1F420813181820F931F20919D0257
:1027600030919E022817390709F061C0F0939E024C
:10277000E0939D02DF91CF910895EA01CE17DF0724
:10278000E8F54A815B819E0141155105B1F7E901E8
:10279000FB83EA8349915991C40FD51FEC17FD07BC
:1027A00061F4808191810296840F951FE9019983DC
:1027B0008883828193819B838A83F0E0E0E0129694
:1027C0008D919C9113970097B9F52D913C9111979C
:1027D000CD010296820F931F20919D0230919E029F
:1027E0002817390739F6309751F51092A002109248
:1027F0009F02B0939E02A0939D02BCCFD383C2835D
:1028000040815181840F951FC817D90761F44E5F2D
:102810005F4F88819981480F591F518340838A8176
:102820009B81938382832115310509F0B0CFF0930A
:10283000A002E0939F029ECFFD01DC01C0CF138276
:102840001282D7CF10E0C2E6D0E004C0FE010E94A1
:0E285000F7122196C336D107C9F7F894FFCFCF
:10285E000000A102800000000000C2039C0391034F
:10286E00AB093903E602000000004E02AE01DB01A7
:08287E009B020C02EA01FE01BD
:00000001FF

View File

@ -0,0 +1,4 @@
{
"firmwareFile": "firmware.hex",
"version": "0.0.2"
}

View File

@ -0,0 +1,651 @@
:100000000C9463000C948B000C948B000C948B006C
:100010000C948B000C948B000C948B000C948B0034
:100020000C948B000C948B000C948B000C94ED0EB4
:100030000C948B000C948B000C948B000C948B0014
:100040000C944B0E0C948B000C94BB0E0C94950EE0
:100050000C948B000C948B000C948B000C948B00F4
:100060000C948B000C948B000000000024002700EF
:100070002A0000000000250028002B0000000000DE
:1000800023002600290004040404040404040202DA
:100090000202020203030303030301020408102007
:1000A0004080010204081020010204081020000012
:1000B0000008000201000003040700000000000027
:1000C0000000A90F621211241FBECFEFD8E0DEBFDF
:1000D000CDBF11E0A0E0B1E0E2E6F8E202C0059099
:1000E0000D92A832B107D9F722E0A8E2B1E001C031
:1000F0001D92A13AB207E1F710E0C2E6D0E004C0D9
:100100002197FE010E94F912C136D107C9F70E945A
:10011000E3100C9424140C940000833081F028F434
:10012000813099F08230A9F008958730A9F08830A5
:10013000C9F08430B1F4809180008F7D03C080913C
:1001400080008F7780938000089584B58F7784BD79
:10015000089584B58F7DFBCF8091B0008F77809319
:10016000B00008958091B0008F7DF9CFCF93DF93D9
:10017000282F30E0F901E255FF4F8491F901E6564E
:10018000FF4FD491F901EA57FF4FC491CC23A1F05E
:1001900081110E948D00EC2FF0E0EE0FFF1FE4585C
:1001A000FF4FA591B491EC91ED2381E090E009F42B
:1001B00080E0DF91CF91089580E090E0FACF1F9327
:1001C000CF93DF93282F30E0F901E255FF4F849160
:1001D000F901E656FF4FD491F901EA57FF4FC49158
:1001E000CC23A9F0162F81110E948D00EC2FF0E096
:1001F000EE0FFF1FEE58FF4FA591B4918FB7F89403
:10020000EC91111108C0D095DE23DC938FBFDF91F4
:10021000CF911F910895DE2BF8CFCF93DF9390E01D
:10022000FC01E656FF4F24918A579F4FFC018491B1
:100230008823D1F090E0880F991FFC01E859FF4F07
:10024000A591B491FC01EE58FF4FC591D491611175
:100250000EC09FB7F8948C91E22FE0958E238C937B
:100260002881E223E8839FBFDF91CF9108958FB764
:10027000F894EC91E22BEC938FBFF6CF8E3008F020
:100280008E508770806480937C0080917A008064B7
:1002900080937A0080917A0086FDFCCF809178006F
:1002A0009091790008953FB7F894809163019091FF
:1002B0006401A0916501B091660126B5A89B05C0B7
:1002C0002F3F19F00196A11DB11D3FBFBA2FA92FD5
:1002D000982F8827BC01CD01620F711D811D911DD2
:1002E00042E0660F771F881F991F4A95D1F708953E
:1002F0008F929F92AF92BF92CF92DF92EF92FF9236
:100300000E9453014B015C0184E6C82ED12CE12CE4
:10031000F12C0E945301681979098A099B09683EEA
:10032000734081059105A8F321E0C21AD108E108C4
:10033000F10888EE880E83E0981EA11CB11CC11440
:10034000D104E104F10429F7FF90EF90DF90CF9002
:10035000BF90AF909F908F9008950895AF92BF92F5
:10036000CF92DF92EF92FF920F931F93CF93DF9381
:100370006C017B018B01040F151FEB015E01AE18B0
:10038000BF08C017D10759F06991D601ED91FC91D2
:100390000190F081E02DC6010995892B79F7C501FF
:1003A000DF91CF911F910F91FF90EF90DF90CF9051
:1003B000BF90AF900895FC01538D448D252F30E000
:1003C000842F90E0821B930B541710F0CF96089562
:1003D00001970895FC01918D828D981761F0A28D8F
:1003E000AE0FBF2FB11D5D968C91928D9F5F9F7355
:1003F000928F90E008958FEF9FEF0895FC01918D0B
:10040000828D981731F0828DE80FF11D858D90E077
:1004100008958FEF9FEF0895FC01918D228D892F14
:1004200090E0805C9F4F821B91098F7399270895FC
:1004300087E691E00E940C0221E0892B09F420E07C
:10044000822F089580E090E0892B29F00E94180205
:1004500081110C9400000895FC01A48DA80FB92F00
:10046000B11DA35ABF4F2C91848D90E001968F73DC
:100470009927848FA689B7892C93A089B1898C91FB
:10048000837080648C93938D848D981306C002884A
:10049000F389E02D80818F7D80830895EF92FF9214
:1004A0000F931F93CF93DF93EC0181E0888F9B8D97
:1004B0008C8D98131AC0E889F989808185FF15C051
:1004C0009FB7F894EE89FF896083E889F989808174
:1004D0008370806480839FBF81E090E0DF91CF9143
:1004E0001F910F91FF90EF900895F62E0B8D10E065
:1004F0000F5F1F4F0F731127E02E8C8D8E110CC0D4
:100500000FB607FCFACFE889F989808185FFF5CF1E
:10051000CE010E942C02F1CFEB8DEC0FFD2FF11DCF
:10052000E35AFF4FF0829FB7F8940B8FEA89FB895B
:1005300080818062CFCFCF93DF93EC01888D8823B9
:10054000B9F0AA89BB89E889F9898C9185FD03C036
:10055000808186FD0DC00FB607FCF7CF8C9185FF1B
:10056000F2CF808185FFEDCFCE010E942C02E9CF32
:10057000DF91CF910895CF93DF9300D0CDB7DEB751
:10058000DA012C91FB01308139832A83DC018D91C2
:100590009C91DC01ED91FC910284F385E02D22E039
:1005A00030E0AE014F5F5F4F61EF70E009950F9053
:1005B0000F90DF91CF9108956115710531F0FC0125
:1005C00080819181FB01918380830895CF92DF9296
:1005D000EF92FF920F931F93CF93DF93EC01162FAF
:1005E0006A017901E881F9810280F381E02D41E01F
:1005F00060EC0995E881F9810280F381E02D40E00B
:10060000612FCE010995E881F9810280F381E02D07
:10061000DE01A95FBE4F6C9181E0860F8C9340E0B4
:10062000CE0109958601EC0CFD1CE881F981028060
:10063000F381E02DE016F10639F0D8016D918D01BE
:1006400040E0CE010995F1CF41E060ECCE01099583
:100650008A819B81DC01ED91FC910680F781E02D80
:10066000DF91CF911F910F91FF90EF90DF90CF908E
:100670000994BF92CF92DF92EF92FF920F931F9354
:10068000CF93DF93EC01B62EC42ED22EE881F981F0
:100690000280F381E02D41E060EC0995E881F98169
:1006A0000280F381E02D40E06B2DCE010995E881B9
:1006B000F9810280F381E02D40E06C2DCE01099597
:1006C000E881F9810280F381E02D40E06D2DCE01BB
:1006D00009956801E00EF11EE881F9810280F3813D
:1006E000E02DEC14FD0439F0D6016D916D0140E070
:1006F000CE010995F1CF41E060ECCE0109958A81E8
:100700009B81DC01ED91FC910680F781E02DDF916A
:10071000CF911F910F91FF90EF90DF90CF90BF90FE
:100720000994DC0112968D919C91DC01ED91FC9174
:100730000190F081E02D0994CF93DF93DC01ED91DE
:10074000FC910480F581E02D442319F0DF91CF91D5
:100750000994EC01603C21F06B3D59F0CE01F6CFDD
:100760006BED0995E881F9810480F581E02D6CED50
:10077000F5CF6BED0995E881F9810480F581E02DD5
:100780006DEDECCF0F931F93CF93DF93EC01CA5F16
:10079000DE4F2881222321F06C3D49F06D3D09F1A7
:1007A000603C59F16B3D81F481E088833AC0DC0103
:1007B000AB5FBE4FEC9121E02E0F2C93E80FF92F89
:1007C000F11D20EC26831882FC01EB5FFE4F208197
:1007D00031E0320F3083820F911DDC0116966C934D
:1007E00020C0DC01AB5FBE4FEC9121E02E0F2C93BB
:1007F000E80FF92FF11D2BEDE5CF8C010B5F1E4F9C
:10080000D8014C91442351F0BC016A5F7F4FDC0159
:10081000ED91FC910680F781E02D0995F801108299
:100820001882DF91CF911F910F910895DC01ED9116
:10083000FC91309729F00280F381E02D0296099413
:100840000895FC01828D938D30E020E02817390750
:10085000E1F0A785B089A20FB31F4C91641312C0B9
:1008600080A591A52817390718F082A593A50895AA
:10087000220F331F858D968D280F391FF901808136
:10088000918108952F5F3F4FE1CF8585968508952B
:10089000CF93DF93EC01CD3C8CE0D807A0F42AE0A5
:1008A0002C9FC0012D9F900D112402960E94FF12D3
:1008B000FC01C193D193CF012197D7FD07C01182CD
:1008C00010823A96F9CF8FEF9FEFF0CFDF91CF9163
:1008D0000895EF92FF920F931F93CF93DF93EC0154
:1008E0008B0180E190E09F838E8381E088871D8665
:1008F000FB01E184F284C7010E94FF12998388837F
:10090000892B61F1F801828193819B838A838481A1
:1009100095819D838C83868197819F838E8380853B
:100920008887FA86E986838594859C878B87858569
:100930008D8790E080E02B853C858217930770F4CB
:10094000E0913E02F0913F02E80FF91F2081E8811B
:10095000F981E80FF91F20830196EDCFDF91CF9148
:100960001F910F91FF90EF900895EF92FF920F93D8
:100970001F93CF93DF930097C1F1EC01FC013297F5
:10098000808191812AE0289F8001299F100D1124E8
:100990000C0F1D1F7801CE15DF0539F08AE0E81A2B
:1009A000F108C7010E941604F6CFC8018C1B9D0BED
:1009B000969587954DEC5CE4849F9001859F300D62
:1009C000949F300D11243F7746EF4203C001439FAF
:1009D000900D11240297800F911FDF91CF911F91ED
:1009E0000F91FF90EF900C949B13DF91CF911F918B
:1009F0000F91FF90EF9008952F923F924F925F9248
:100A00006F927F928F929F92AF92BF92CF92DF921E
:100A1000EF92FF920F931F93CF93DF938C016B01A3
:100A2000FC01C481D58181859285C617D707B8F4AA
:100A3000C817D907A9F480E0DF91CF911F910F91DA
:100A4000FF90EF90DF90CF90BF90AF909F908F90EE
:100A50007F906F905F904F903F902F900895EB01A3
:100A6000F8012085211105C08C179D0738F081E021
:100A7000E3CF6E018C179D0708F46C011E012097CF
:100A800019F480E1282E312CC1010E9448043C0158
:100A9000009789F27C01512C412CF80180809180D3
:100AA000C414D504E9F05701A618B708C7010E947D
:100AB0001604E114F10469F0F401EA0DFB1D8191C3
:100AC0009191D7018D939D9388E001900D928A9525
:100AD000E1F7FFEF4F1A5F0A8AE0E80EF11CDDCF65
:100AE000C4010E94B504F8017182608221863286B9
:100AF00083859485C817D90708F0B9CFD487C387F1
:100B0000B6CF0F931F93CF93DF938C0160918F0229
:100B100070919002809191029091920286179707AE
:100B2000F8F420919102309192024AE0429FC00174
:100B3000439F900D1124C0918602D0918702C80F67
:100B4000D91FCE010E9416042097E9F480919102EA
:100B500090919202019690939202809391020EC01E
:100B600080918C0290918D02009741F0680F791F5F
:100B700086E892E00E94FC048111D3CFDF91CF91EF
:100B80001F910F910895F80181919191DE018D934C
:100B90009D9388E001900D928A95E1F7D7CF0F934E
:100BA0001F93CF93DF93EC018B0169857A8506173C
:100BB000170738F08E819F81680F791FCE010E9440
:100BC000FC0489859A852B853C850217130740F024
:100BD0008017910740F098012F5F3F4F3C872B878C
:100BE0000817190738F0CE010D96DF91CF911F91AC
:100BF0000F9108958AE0809F9001819F300D11240C
:100C000088819981820F931FF0CFAF92BF92CF92CC
:100C1000DF92EF92FF920F931F93CF93DF938C019C
:100C20007B01FC01C481D58181859285C617D707D8
:100C300078F4C817D90769F480E0DF91CF911F914C
:100C40000F91FF90EF90DF90CF90BF90AF900895FD
:100C5000EB01F8012085211105C08C179D0738F0A4
:100C600081E0EBCF7E018C179D0708F47C01209773
:100C700021F16E018FEF9FEFC115F0E4DF0718F44B
:100C8000C601880F991F0E94FF125C010097A1F214
:100C9000DC01F8018081918130E020E0E216F3066A
:100CA00081F0F901EE0FFF1FE80FF91F408151811C
:100CB0004D935D932F5F3F4FF1CF60E1C62ED12C56
:100CC000DFCF009711F00E949B13F801B182A08240
:100CD000D286C18683859485C817D90708F6D4873C
:100CE000C387BECF0F931F93CF93DF93EC018B018C
:100CF00069857A850617170738F08E819F81680FFE
:100D0000791FCE010E94050689859A852B853C8531
:100D10000217130740F08017910740F098012F5FEA
:100D20003F4F3C872B870817190738F0CE010D96E7
:100D3000DF91CF911F910F910895000F111F8881AE
:100D40009981800F911FF4CF8F929F92AF92BF92A3
:100D5000CF92DF92EF92FF920F931F93CF93DF9387
:100D6000EC017B0189859A856817790760F0CE8050
:100D7000DF80C80ED91E0C811D810C151D0528F5BC
:100D80008017910719F589859A852B853C85E21690
:100D9000F30640F08E159F0548F097012F5F3F4FF7
:100DA0003C872B87E816F90608F458C0CE010D964B
:100DB000DF91CF911F910F91FF90EF90DF90CF9037
:100DC000BF90AF909F908F90089586012885211144
:100DD00027C080179107B8F60115110539F15801A0
:100DE000011580E4180730F5C501880F991F0E948E
:100DF000FF124C01009739F2DC018881998130E0C3
:100E000020E0C216D306C9F0F901EE0FFF1FE80F6C
:100E1000F91F408151814D935D932F5F3F4FF1CF7B
:100E20006C0108171907C0F66801D6CF60E1A62E3D
:100E3000B12CDACF8FEF9FEFDACF009711F00E943D
:100E40009B1399828882BA86A9868B859C85081710
:100E5000190708F098CF1C870B8795CFEE0CFF1C65
:100E6000888199818E0D9F1DA3CFAF92BF92CF92A3
:100E7000DF92EF92FF920F931F93CF93DF938C013A
:100E80007B01DC011496CD91DC91159719968D911B
:100E90009C91C617D70778F4C817D90769F480E082
:100EA000DF91CF911F910F91FF90EF90DF90CF9046
:100EB000BF90AF900895EB01F8012085211105C086
:100EC0008C179D0738F081E0EBCF7E018C179D07D2
:100ED00008F47C016E01209719F480E1C82ED12C12
:100EE000C6010E94FF125C010097C9F2FC01D80103
:100EF0008D919C9130E020E0E216F30641F0DC0198
:100F0000A20FB31F4C9141932F5F3F4FF5CF009736
:100F100011F00E949B13F801B182A082C186D28693
:100F200083859485C817D90770F6D487C387CBCF3C
:100F3000CF93FC0183859485C0E06817790750F54D
:100F40008385948501976817790778F4808191816A
:100F50009B012F5F3F4FDC01A20FB31F4C91680F25
:100F6000791FDB014C93B901EBCF94878387C08550
:100F7000CC2399F04185528526813781BA01621BC5
:100F8000730B8617970730F42417350718F4CF0131
:100F90000E9435078C2FCF910895C1E0FBCF0F93AE
:100FA0001F93CF93DF93EC018B0169857A858B8545
:100FB0009C8586179707A8F4F8018081E881F9815C
:100FC0002B853C85E20FF31F80832B853C85C9016F
:100FD00001969C878B87C901DF91CF911F910F915B
:100FE00008958E819F81009719F48FEF9FEFF4CFC2
:100FF000680F791FCE010E9435078111DDCFF5CF33
:101000000F931F93CF93DF93EC018B0169857A8552
:101010000617170738F08E819F81680F791FCE0160
:101020000E94350789859A852B853C850217130711
:1010300040F08017910740F098012F5F3F4F3C87A9
:101040002B870817190738F0CE010D96DF91CF9145
:101050001F910F91089588819981800F911FF6CF7C
:10106000CF92DF92FF920F931F93CF93DF938C0168
:10107000F62ED0E0C0E06C018FE0C80ED11CF80164
:10108000828D938DC817D90798F4BE01C6010E94BE
:101090000008FC0180818F1109C0CE01DF91CF9142
:1010A0001F910F91FF90DF90CF9008952196E7CF89
:1010B0008FEF9FEFF3CFCF92DF92EF92FF920F93DC
:1010C0001F93CF93DF931F92CDB7DEB78C01698357
:1010D000F12CE12C6C018FE0C80ED11CF801828D3F
:1010E000938DE816F90698F4B701C6010E9400082E
:1010F000FC0190818981981306C0B701C8014D9603
:101100000E94A4060EC0FFEFEF1AFF0AE7CFBE0150
:101110006F5F7F4FC6010E94CF0797FF0CC0C801C9
:101120000D960F90DF91CF911F910F91FF90EF904F
:10113000DF90CF900895F801208131812F5F3F4FDC
:1011400031832083BC01DACFCF92DF92EF92FF92FE
:101150000F931F93CF93DF938C01D62ED0E0C0E086
:101160007C018FE0E80EF11CD8015A968D919C917C
:10117000C817D90708F052C0BE01C7010E94000875
:10118000FC0180818D1148C0D80198968D919C9169
:10119000C817D90798F5AE01440F551FBE01019736
:1011A000FA0132966817790790F4D8015D962D916F
:1011B0003C916F5F7F4FD901AE0FBF1FCD90DC9088
:1011C000240F351FD901CD92DC92AF01E9CFF80190
:1011D00091A780A725A1222389F046A157A123A189
:1011E00034A1BA01621B730B8617970738F42417D2
:1011F000350720F4C8014D960E940506BE01C701BF
:101200000E949807CE01DF91CF911F910F91FF901F
:10121000EF90DF90CF9008952196A6CF8FEF9FEFAC
:10122000F2CFCF92DF92EF92FF920F931F93CF9363
:10123000DF931F92CDB7DEB78C016983F12CE12CCF
:101240006C018FE0C80ED11CF801828D938DE816D9
:10125000F90698F4B701C6010E940008FC019081CC
:101260008981981306C0B701C8014D960E94720685
:101270000EC0FFEFEF1AFF0AE7CFBE016F5F7F4F8F
:10128000C6010E94CF0797FF0CC0C8010D960F90B2
:10129000DF91CF911F910F91FF90EF90DF90CF9052
:1012A0000895F801208131812F5F3F4F31832083E2
:1012B000BC01DACFCF92DF92EF92FF920F931F9390
:1012C000CF93DF931F92CDB7DEB78C016983F12CEA
:1012D000E12C6C018EE0C80ED11CF801818D928D3D
:1012E000E816F90698F4B701C6010E940008FC014F
:1012F00090818981981306C0B701C8014C960E945D
:1013000000080EC0FFEFEF1AFF0AE7CFBE016F5FC4
:101310007F4FC6010E94CF0797FF0CC0C8010D96F2
:101320000F90DF91CF911F910F91FF90EF90DF9081
:10133000CF900895F801208131812F5F3F4F318395
:101340002083BC01DACFFC0180819181009711F0EC
:101350000C949B1308952F923F925F926F927F920D
:101360008F929F92AF92BF92CF92DF92EF92FF92B5
:101370000F931F93CF93DF93CDB7DEB729970FB6A7
:10138000F894DEBF0FBECDBF6C017B01DB016C9119
:1013900011965C90673008F06FC4E62FF0E0ED52D4
:1013A000F64F0C94F912DA09100AF10B5F0C9E0C3F
:1013B0003D0D790DDC01ED91FC910084F185E02D6E
:1013C000423011F1F12CE12C10E000E023E030E09C
:1013D000452D60E0C601099529960FB6F894DEBF49
:1013E0000FBECDBFDF91CF911F910F91FF90EF9076
:1013F000DF90CF90BF90AF909F908F907F906F9035
:101400005F903F902F90089519821A824B8333E0AA
:10141000E32EF12C8E010F5F1F4F30E020E0D8CF7C
:10142000EDB7FEB7F987E887443079F0DC01ED913C
:10143000FC910084F185E02DF12CE12C10E000E01E
:1014400023E030E0452D61E0C5CFF70112818381B3
:10145000282E312CD6011496ED90FC90823009F4A0
:10146000F7C078F4882309F437C1813009F4E0C06B
:10147000612FC7010E945B08DC012D923C9280E045
:10148000BEC0843009F4F1C008F4E7C0853081F7AC
:101490005701F6E5AF0EB11C712C612CC7018059C4
:1014A0009F4F9F838E8345019FE0890E911CAE81E3
:1014B000BF818D919C916816790650F4B301C401E7
:1014C0000E940008FC0180811813DCC077FEDEC09A
:1014D00083E090E00E94FF124C0180914C018C301F
:1014E00008F0F6C091E0980F90934C01D4018C93D2
:1014F00090E0FC01EE0FFF1FE80FF91FE85DFE4FC3
:1015000088EB9BE092838183612FC5010E941109C2
:10151000DC018D929C92612FC5010E941109FC0192
:1015200080809180D4018C918C3008F055C061E0AE
:10153000812F0E940D01F4018081282F30E0F901F4
:10154000EE0FFF1FE20FF31FE85DFE4F9081907CCE
:10155000212F2F73922B9083D40111961C921197F7
:1015600012961C922CE0622F0E94ED12829FB00115
:10157000112430E020E0AB01420F531FFA01EE0FBF
:10158000FF1FE40FF51FE85DFE4F908196FD16C02A
:101590002F5F3F4F2C30310571F781110FC0109232
:1015A000800082E080938100109285001092840078
:1015B000B19A80916F00826080936F00D401EC91AA
:1015C0008E2F90E0FC01EE0FFF1FE80FF91FE85D82
:1015D000FE4F808180648083F40180818F3F09F019
:1015E00047CF612FC5010E941109DC018D919C91AB
:1015F0000E949B13612FC5010E94A40885E0898386
:10160000D601ED91FC910084F185E02DEE24E39468
:10161000F12C8E010F5F1F4F30E020E0452D61E07F
:10162000C60109950FB6F894DEBF0FBECDBFD4CE6C
:1016300060E0812F0E940D01812F0E94B600082FCB
:10164000612FC7018C960E945A09FC01008310CFBC
:1016500061E0812F0E940D010BCF60E0812F0E947D
:101660000D01812F0E943E0103CF61E0812F0E9476
:101670000D0161E0812F0E940D0160E0812F0E9429
:10168000DF00F6CEFFEF6F1A7F0A11CF612FC50181
:101690000E941109DC01ED91FC91E0818E2F90E018
:1016A000FC01EE0FFF1FE80FF91FE85DFE4F808180
:1016B0008F7B8083612FC5010E941109FC0180810D
:1016C00091810E949B13612FC5010E94A40800CF45
:1016D0008FEFF401808318CFB12CA12CF701E059D2
:1016E000FF4FFF83EE834701F6E58F0E911C340117
:1016F0002FE0620E711CAE81BF818D919C91A81666
:10170000B90650F4B501C3010E940008FC018081B4
:1017100018131EC0B7FE20C0B12CA12C3701F5E470
:101720006F0E711C47012AE3820E911CD3018D912B
:101730009C91A816B90650F4B501C4010E94000896
:10174000FC01808118132AC0B7FE2CC060E081CF55
:10175000FFEFAF1ABF0ACFCF612FC4010E9411095A
:10176000DC01ED91FC91E0818E2F90E0FC01EE0F09
:10177000FF1FE80FF91FE85DFE4F80818F7B80839C
:10178000612FC4010E941109FC01808191810E9496
:101790009B13612FC4010E94A408BECFFFEFAF1AB4
:1017A000BF0AC4CFB12CA12CD3018D919C91A81656
:1017B000B90660F6B501C4010E940008FC018081F1
:1017C00018130BC0B501C701885B9F4F0E94980793
:1017D000B501C4010E949807B9CFFFEFAF1ABF0A45
:1017E000E3CF443079F0DC01ED91FC910084F18588
:1017F000E02DF12CE12C10E000E023E030E0452D5D
:1018000062E0E8CDF70112819380DC011496ED903F
:10181000FC90612FC7010E9430080196C9F1612F29
:10182000C7010E945B08FC0180819181029709F049
:1018300042C001E0911001C000E0602F812F0E94A2
:10184000DF00912C812C3701FDE86F0E711C22E81E
:10185000E20EF11CD3018D919C918816990668F5D2
:10186000B401C7010E94CF051C830983DC01ED91FF
:10187000FC910480F581E02DAE014F5F5F4FBE010A
:101880006C5F7F4F02960995BFEF8B1A9B0AE2CFE0
:1018900081E08D83D601ED91FC910084F185E02DEE
:1018A000EE24E394F12C8E010B5F1F4F30E020E01B
:1018B000452D62E0B5CE83E0ECCF80E0EACF433047
:1018C00079F0DC01ED91FC910084F185E02DF12CA3
:1018D000E12C10E000E023E030E0452D63E07ACD1C
:1018E000F7011281612FDC0114968D919C910E9469
:1018F00021040097F1F001970297F0F4812F0E94E4
:10190000B60021E0892B09F420E080E089832A8356
:10191000D601ED91FC910084F185E02D02E0E02EEE
:10192000F12C8E010F5F1F4F30E020E0452D63E06A
:1019300077CE81E020E0EACF82E0FCCF443079F03E
:10194000DC01ED91FC910084F185E02DF12CE12C7E
:1019500010E000E023E030E0452D64E03BCDF701EE
:101960001281DC0114968D909C90612FC4010E941D
:101970002104009799F481E08983D601ED91FC91CF
:101980000084F185E02DEE24E394F12C8E010F5FAD
:101990001F4F30E020E0452D64E042CE049711F067
:1019A00083E0EACFF7010381612FC4010E94300870
:1019B000019609F3612FC4010E945B08DC018D913F
:1019C0009C91049769F7E02EF12C61E0812F0E9431
:1019D0000D01E114F10429F460E0812F0E94DF0081
:1019E0002BC0BFEFEB16F10411F461E0F6CFE12F4D
:1019F000F0E0E255FF4FE491E33029F148F4E130A3
:101A0000B9F0E230D9F0E0E8EE16F10474F7E4CF73
:101A1000E73019F1E83049F1E430A9F7809180000E
:101A2000806280938000F0928B00E0928A0004C074
:101A300084B5806884BD07BD80E09ECF84B5806298
:101A400084BD08BDF9CF80918000806880938000BC
:101A5000F0928900E0928800EFCF8091B00080681A
:101A60008093B0000093B300E7CF8091B000806214
:101A70008093B0000093B400DFCF433079F0DC01F5
:101A8000ED91FC910084F185E02DF12CE12C10E02A
:101A900000E023E030E0452D65E09CCCF7011281A9
:101AA000612FDC0114968D919C910E942104009776
:101AB000E1F0039722E00297C8F4812F0E943E01D3
:101AC00020E029839A838B83D601ED91FC910084D9
:101AD000F185E02DB3E0EB2EF12C8E010F5F1F4F4F
:101AE00030E020E0452D65E09BCD21E080E090E0F6
:101AF000E8CF443079F0DC01ED91FC910084F18570
:101B0000E02DF12CE12C10E000E023E030E0452D49
:101B100066E060CCF7011281DC0114968D909C90F8
:101B2000612FC4010E942104009799F481E0898308
:101B3000D601ED91FC910084F185E02DEE24E39433
:101B4000F12C8E010F5F1F4F30E020E0452D66E045
:101B500067CD059709F08CC0F701038184E0053B50
:101B600030F7612FC4010E94300897FDDFCF612F4D
:101B7000C4010E945B08DC018D919C91059709F0DE
:101B800079C0B6E58B0E911C612FC4010E9411092A
:101B9000DC01ED91FC91E0818E2F90E0FC01EE0FD5
:101BA000FF1FE80FF91FE85DFE4F808186FFBECF63
:101BB000612FC4010E941109DC01ED91FC9110819B
:101BC0001C3008F053C0828148E5842E42E0942EF8
:101BD000881A910887FD93941401220C331C220C5F
:101BE000331C818168E8E62EF12CE81AF10887FDA4
:101BF000F394EE0CFF1CEE0CFF1C37010F2C000CB5
:101C0000880899089101032C000C440B550B2619E8
:101C1000370948095909A02FB0E00E94B11224EBFE
:101C200030E040E050E00E949212BA01A901460D56
:101C3000571D681D791D4E155F052CF07101421569
:101C400053050CF47A01B2E0EB1AF108EE0CFF1C1C
:101C50002FB7F894812F90E0FC01EE0FFF1FE80FE3
:101C6000F91FE85DFE4FF282E1822FBF80E05FCF77
:101C700082E05DCF83E05BCFDC01ED91FC910084DD
:101C8000F185E02DF12CE12C10E000E022E030E0C5
:101C9000452D0995A1CB1F920F920FB60F921124DB
:101CA0002F933F938F939F93AF93BF9380915F0147
:101CB00090916001A0916101B091620130915E014B
:101CC00023E0230F2D3758F50196A11DB11D209358
:101CD0005E0180935F0190936001A0936101B093D6
:101CE00062018091630190916401A0916501B091BE
:101CF00066010196A11DB11D80936301909364015B
:101D0000A0936501B0936601BF91AF919F918F91B0
:101D10003F912F910F900FBE0F901F90189526E8BE
:101D2000230F0296A11DB11DD2CF1F920F920FB6A5
:101D30000F9211242F933F934F935F936F937F9351
:101D40008F939F93AF93BF93EF93FF9387E691E0B9
:101D50000E942C02FF91EF91BF91AF919F918F91C3
:101D60007F916F915F914F913F912F910F900FBE97
:101D70000F901F9018951F920F920FB60F9211247B
:101D80002F938F939F93EF93FF93E0917701F091BF
:101D900078018081E0917D01F0917E0182FD1BC080
:101DA0009081809180018F5F8F73209181018217D4
:101DB00041F0E0918001F0E0E959FE4F958F80936A
:101DC0008001FF91EF919F918F912F910F900FBE06
:101DD0000F901F9018958081F4CF1F920F920FB62D
:101DE0000F9211242F933F934F935F936F937F93A1
:101DF0008F939F93AF93BF93CF93DF93EF93FF9313
:101E000080914D01C0914C01D0E087FF24C0109219
:101E100085001092840080914D018F5F80934D0169
:101E200080914D01082E000C990B8C179D0724F40E
:101E300080914D018C30C4F1809184009091850097
:101E4000049680349C4908F47AC080918400909173
:101E50008500049676C080914D01082E000C990BE8
:101E60008C179D07C4F6E0914D018E2FEE0F990B54
:101E7000FC01EE0FFF1FE80FF91FE85DFE4F8081A8
:101E800086FFC9CFE0914D018E2FEE0F990BFC011B
:101E9000EE0FFF1FE80FF91FE85DFE4F808160E045
:101EA0008F730E94DF00B7CF2091840030918500AE
:101EB000E0914D018E2FEE0F990BFC01EE0FFF1FED
:101EC000E80FF91FE85DFE4F81819281820F931F19
:101ED0009093890080938800E0914D018E2FEE0F42
:101EE000990BFC01EE0FFF1FE80FF91FE85DFE4F95
:101EF000808186FF11C0E0914D018E2FEE0F990B6E
:101F0000FC01EE0FFF1FE80FF91FE85DFE4F808117
:101F100061E08F730E94DF00FF91EF91DF91CF911D
:101F2000BF91AF919F918F917F916F915F914F91F1
:101F30003F912F910F900FBE0F901F90189580E446
:101F40009CE990938900809388008FEF80934D01E6
:101F5000E3CFCF92DF92FF920F931F93CF93DF9344
:101F6000E7E6F1E01382128288EE93E0A0E0B0E0B1
:101F700084839583A683B7838AE191E091838083EC
:101F800085EC90E09587848784EC90E0978786873E
:101F900080EC90E0918B808B81EC90E0938B828B36
:101FA00082EC90E0958B848B86EC90E0978B868B0F
:101FB000118E128E138E148EC4E0D2E000E110E078
:101FC0001F830E83CC24CA94DC2CD986C8861B8739
:101FD0000A87FF24F394FC861E861D861A8B098BC4
:101FE000DC8ACB8A1E8B0D8BFF8A1C8E1B8E1A8E71
:101FF000198F088F80E190E00E94FF12988B8F87E5
:1020000018A30F8FDAA2C9A21CA30BA3FDA21BA6C3
:102010001AA619A618A61FA30EA380E290E00E949C
:10202000FF129E8F8D8F198218821D830C831BAB2C
:102030000AABDDAACCAA1FAB0EABF8AE19AE1DAF32
:102040000CAFDFAECEAE1093450200934402F09287
:10205000460210924B0210924A02109249021093CB
:1020600048020093470280E190E00E94FF129BAF7C
:102070008AAF10934F0200934E02D0925102C09249
:1020800050021093530200935202F09254021092A5
:102090005902109258021092570210935602009360
:1020A000550280E190E00E94FF1290934D028093D0
:1020B0004C021DA61CA619AB08AB1093610200933D
:1020C0006002D0926302C092620210936502009394
:1020D0006402F092660210926802109267021093F6
:1020E0006C0200936B02D0926E02C0926D0210934C
:1020F000700200936F02F0927102109276021092B9
:10210000750210927402109373020093720280E1C0
:1021100090E00E94FF1290936A02809369021093EC
:102120007A0200937902D0927C02C0927B021093D3
:102130007E0200937D02F0927F021092850210923F
:102140008402109283021092820210938102009303
:10215000800280E290E00E94FF12909378028093C8
:10216000770210925B0210925A0210935F02009362
:102170005E021093890200938802D0928B02C09273
:102180008A0210938D0200938C02F0928E021092BC
:102190009402109293021092920210929102109364
:1021A000900200938F0280E190E00E944804909397
:1021B000870280938602DF91CF911F910F91FF904C
:1021C000DF90CF900895CF93DF93CDB7DEB76097C0
:1021D0000FB6F894DEBF0FBECDBF789484B5826091
:1021E00084BD84B5816084BD85B5826085BD85B5BB
:1021F000816085BD80916E00816080936E00109239
:1022000081008091810082608093810080918100B3
:102210008160809381008091800081608093800044
:102220008091B10084608093B1008091B0008160A2
:102230008093B00080917A00846080937A008091CE
:102240007A00826080937A0080917A008160809326
:102250007A0080917A00806880937A001092C100A1
:1022600088E091E00E94FF128C018AE091E0D801A1
:1022700011969C938E9387E691E013969C938E9390
:10228000129784E092E015969C938E931497F80130
:10229000EB5FFE4F10823196108231961082809152
:1022A0005401811115C08CED92E090934F01809301
:1022B0004E018DEA91E090935101809350018BEB98
:1022C00092E0909353018093520181E080935401F6
:1022D0008EE491E09A8389831C830B83CE0101965F
:1022E0000E948105CE0101960E94160410935D01A3
:1022F00000935C0161E08DE00E940D0161E08DE0E2
:102300000E94DF000E94780160E08DE00E94DF0003
:102310000E94780161E08DE00E94DF000E94780158
:1023200060E08DE00E94DF0060E08DE00E940D0122
:10233000D8011296ED91FC91A089B18982E08C932D
:10234000A485B5851C92A685B78580E18C93108EF7
:10235000A489B58986E08C93A289B3898C91806128
:102360008C93A289B3898C9188608C93A289B3895C
:102370008C9180688C930288F389E02D80818F7D19
:1023800080830E94780130E020E050E040E060EF80
:1023900070E0C8010E94E60280E0A82E80E0B82E1E
:1023A0006EE372E0CE0101960E946904F12CE12CEB
:1023B0008C859D85E816F90608F04FC0B701CE015F
:1023C00001960E940008FC011081612F84E092E0D8
:1023D0000E945B08DC018D919C910197D1F5812FC2
:1023E0000E94B600082F612F80E392E00E945A09F4
:1023F000FC018081081769F1612F80E392E00E945F
:102400005A09DC010C93D12CC12C8091910290913E
:102410009202C816D906E8F4B60186E892E00E9456
:10242000CF05188B21E0013009F020E02F87DC0177
:10243000ED91FC910480F581E02DAE01415F5F4F8D
:10244000BE01605F7F4F02960995BFEFCB1ADB0A92
:10245000DCCFEFEFEE1AFE0AABCFCE0101960E9461
:10246000A30900915C0110915D01D80112968D9134
:102470009C91DC01ED91FC910084F185E02D0995A2
:10248000892BA1F0F80182819381DC01ED91FC910F
:102490000284F385E02D0995D801ED91FC9101901E
:1024A000F081E02D682FC8010995DFCFA114B10498
:1024B00009F476CF0E941802882309F471CF0E9494
:1024C00000006ECF8091860290918702009731F0D4
:1024D0000E94B504109287021092860283E992E06E
:1024E0000E9416048091770290917802009711F073
:1024F0000E949B1389E692E00E94A3098CE492E07B
:102500000E94A3098EE392E00E94A3098091210218
:1025100090912202009711F00E949B1383E192E0B8
:102520000C94A309052E97FB1EF400940E94A91297
:1025300057FD07D00E94BC1207FC03D04EF40C9448
:10254000A91250954095309521953F4F4F4F5F4FC1
:10255000089590958095709561957F4F8F4F9F4F0F
:1025600008950E94DE12A59F900DB49F900DA49F28
:10257000800D911D11240895A1E21A2EAA1BBB1BE8
:10258000FD010DC0AA1FBB1FEE1FFF1FA217B3073F
:10259000E407F50720F0A21BB30BE40BF50B661F55
:1025A000771F881F991F1A9469F760957095809519
:1025B00090959B01AC01BD01CF010895A29FB00190
:1025C000B39FC001A39F700D811D1124911DB29F67
:1025D000700D811D1124911D0895991B79E004C08F
:1025E000991F961708F0961B881F7A95C9F7809552
:1025F0000895EE0FFF1F0590F491E02D09940F93BD
:102600001F93CF93DF938230910510F482E090E026
:10261000E0919F02F091A00230E020E0B0E0A0E065
:10262000309799F42115310509F44AC0281B390B5C
:1026300024303105D8F58A819B816115710589F1B6
:10264000FB0193838283FE0111C04081518102818D
:10265000138148175907E0F04817590799F4109764
:1026600061F012960C93129713961C933296CF0139
:10267000DF91CF911F910F91089500939F021093C6
:10268000A002F4CF2115310551F04217530738F05D
:10269000A901DB019A01BD01DF01F801C1CFEF0102
:1026A000F9CF9093A00280939F02CDCFFE01E20F5D
:1026B000F31F819391932250310939832883D7CF17
:1026C00020919D0230919E02232B41F42091020122
:1026D0003091030130939E0220939D0220910001CE
:1026E000309101012115310541F42DB73EB74091DC
:1026F000040150910501241B350BE0919D02F091DE
:102700009E02E217F307A0F42E1B3F0B2817390790
:1027100078F0AC014E5F5F4F2417350748F04E0F3D
:102720005F1F50939E0240939D02819391939FCF90
:10273000F0E0E0E09CCFCF93DF930097E9F0FC015D
:10274000329713821282A0919F02B091A002ED01F4
:1027500030E020E01097A1F420813181820F931F97
:1027600020919D0230919E022817390709F061C01F
:10277000F0939E02E0939D02DF91CF910895EA01CC
:10278000CE17DF07E8F54A815B819E0141155105AF
:10279000B1F7E901FB83EA8349915991C40FD51F31
:1027A000EC17FD0761F4808191810296840F951FDB
:1027B000E90199838883828193819B838A83F0E0F6
:1027C000E0E012968D919C9113970097B9F52D91A9
:1027D0003C911197CD010296820F931F20919D028B
:1027E00030919E022817390739F6309751F510922B
:1027F000A00210929F02B0939E02A0939D02BCCFB4
:10280000D383C28340815181840F951FC817D90794
:1028100061F44E5F5F4F88819981480F591F518342
:1028200040838A819B81938382832115310509F03E
:10283000B0CFF093A002E0939F029ECFFD01DC0198
:10284000C0CF13821282D7CF10E0C2E6D0E004C01E
:10285000FE010E94F9122196C336D107C9F7F894F8
:02286000FFCFA8
:102862000000A102800000000000C2039C0391034B
:10287200AB093903E602000000004E02AE01DB01A3
:082882009B020C02EA01FE01B9
:00000001FF

View File

@ -0,0 +1,4 @@
{
"firmwareFile": "firmware.hex",
"version": "0.0.2"
}

View File

@ -0,0 +1,651 @@
:100000000C9463000C948B000C948B000C948B006C
:100010000C948B000C948B000C948B000C948B0034
:100020000C948B000C948B000C948B000C94ED0EB4
:100030000C948B000C948B000C948B000C948B0014
:100040000C944B0E0C948B000C94BB0E0C94950EE0
:100050000C948B000C948B000C948B000C948B00F4
:100060000C948B000C948B000000000024002700EF
:100070002A0000000000250028002B0000000000DE
:1000800023002600290004040404040404040202DA
:100090000202020203030303030301020408102007
:1000A0004080010204081020010204081020000012
:1000B0000008000201000003040700000000000027
:1000C0000000A90F621211241FBECFEFD8E0DEBFDF
:1000D000CDBF11E0A0E0B1E0E2E6F8E202C0059099
:1000E0000D92A832B107D9F722E0A8E2B1E001C031
:1000F0001D92A13AB207E1F710E0C2E6D0E004C0D9
:100100002197FE010E94F912C136D107C9F70E945A
:10011000E3100C9424140C940000833081F028F434
:10012000813099F08230A9F008958730A9F08830A5
:10013000C9F08430B1F4809180008F7D03C080913C
:1001400080008F7780938000089584B58F7784BD79
:10015000089584B58F7DFBCF8091B0008F77809319
:10016000B00008958091B0008F7DF9CFCF93DF93D9
:10017000282F30E0F901E255FF4F8491F901E6564E
:10018000FF4FD491F901EA57FF4FC491CC23A1F05E
:1001900081110E948D00EC2FF0E0EE0FFF1FE4585C
:1001A000FF4FA591B491EC91ED2381E090E009F42B
:1001B00080E0DF91CF91089580E090E0FACF1F9327
:1001C000CF93DF93282F30E0F901E255FF4F849160
:1001D000F901E656FF4FD491F901EA57FF4FC49158
:1001E000CC23A9F0162F81110E948D00EC2FF0E096
:1001F000EE0FFF1FEE58FF4FA591B4918FB7F89403
:10020000EC91111108C0D095DE23DC938FBFDF91F4
:10021000CF911F910895DE2BF8CFCF93DF9390E01D
:10022000FC01E656FF4F24918A579F4FFC018491B1
:100230008823D1F090E0880F991FFC01E859FF4F07
:10024000A591B491FC01EE58FF4FC591D491611175
:100250000EC09FB7F8948C91E22FE0958E238C937B
:100260002881E223E8839FBFDF91CF9108958FB764
:10027000F894EC91E22BEC938FBFF6CF8E3008F020
:100280008E508770806480937C0080917A008064B7
:1002900080937A0080917A0086FDFCCF809178006F
:1002A0009091790008953FB7F894809163019091FF
:1002B0006401A0916501B091660126B5A89B05C0B7
:1002C0002F3F19F00196A11DB11D3FBFBA2FA92FD5
:1002D000982F8827BC01CD01620F711D811D911DD2
:1002E00042E0660F771F881F991F4A95D1F708953E
:1002F0008F929F92AF92BF92CF92DF92EF92FF9236
:100300000E9453014B015C0184E6C82ED12CE12CE4
:10031000F12C0E945301681979098A099B09683EEA
:10032000734081059105A8F321E0C21AD108E108C4
:10033000F10888EE880E83E0981EA11CB11CC11440
:10034000D104E104F10429F7FF90EF90DF90CF9002
:10035000BF90AF909F908F9008950895AF92BF92F5
:10036000CF92DF92EF92FF920F931F93CF93DF9381
:100370006C017B018B01040F151FEB015E01AE18B0
:10038000BF08C017D10759F06991D601ED91FC91D2
:100390000190F081E02DC6010995892B79F7C501FF
:1003A000DF91CF911F910F91FF90EF90DF90CF9051
:1003B000BF90AF900895FC01538D448D252F30E000
:1003C000842F90E0821B930B541710F0CF96089562
:1003D00001970895FC01918D828D981761F0A28D8F
:1003E000AE0FBF2FB11D5D968C91928D9F5F9F7355
:1003F000928F90E008958FEF9FEF0895FC01918D0B
:10040000828D981731F0828DE80FF11D858D90E077
:1004100008958FEF9FEF0895FC01918D228D892F14
:1004200090E0805C9F4F821B91098F7399270895FC
:1004300087E691E00E940C0221E0892B09F420E07C
:10044000822F089580E090E0892B29F00E94180205
:1004500081110C9400000895FC01A48DA80FB92F00
:10046000B11DA35ABF4F2C91848D90E001968F73DC
:100470009927848FA689B7892C93A089B1898C91FB
:10048000837080648C93938D848D981306C002884A
:10049000F389E02D80818F7D80830895EF92FF9214
:1004A0000F931F93CF93DF93EC0181E0888F9B8D97
:1004B0008C8D98131AC0E889F989808185FF15C051
:1004C0009FB7F894EE89FF896083E889F989808174
:1004D0008370806480839FBF81E090E0DF91CF9143
:1004E0001F910F91FF90EF900895F62E0B8D10E065
:1004F0000F5F1F4F0F731127E02E8C8D8E110CC0D4
:100500000FB607FCFACFE889F989808185FFF5CF1E
:10051000CE010E942C02F1CFEB8DEC0FFD2FF11DCF
:10052000E35AFF4FF0829FB7F8940B8FEA89FB895B
:1005300080818062CFCFCF93DF93EC01888D8823B9
:10054000B9F0AA89BB89E889F9898C9185FD03C036
:10055000808186FD0DC00FB607FCF7CF8C9185FF1B
:10056000F2CF808185FFEDCFCE010E942C02E9CF32
:10057000DF91CF910895CF93DF9300D0CDB7DEB751
:10058000DA012C91FB01308139832A83DC018D91C2
:100590009C91DC01ED91FC910284F385E02D22E039
:1005A00030E0AE014F5F5F4F61EF70E009950F9053
:1005B0000F90DF91CF9108956115710531F0FC0125
:1005C00080819181FB01918380830895CF92DF9296
:1005D000EF92FF920F931F93CF93DF93EC01162FAF
:1005E0006A017901E881F9810280F381E02D41E01F
:1005F00060EC0995E881F9810280F381E02D40E00B
:10060000612FCE010995E881F9810280F381E02D07
:10061000DE01A95FBE4F6C9181E0860F8C9340E0B4
:10062000CE0109958601EC0CFD1CE881F981028060
:10063000F381E02DE016F10639F0D8016D918D01BE
:1006400040E0CE010995F1CF41E060ECCE01099583
:100650008A819B81DC01ED91FC910680F781E02D80
:10066000DF91CF911F910F91FF90EF90DF90CF908E
:100670000994BF92CF92DF92EF92FF920F931F9354
:10068000CF93DF93EC01B62EC42ED22EE881F981F0
:100690000280F381E02D41E060EC0995E881F98169
:1006A0000280F381E02D40E06B2DCE010995E881B9
:1006B000F9810280F381E02D40E06C2DCE01099597
:1006C000E881F9810280F381E02D40E06D2DCE01BB
:1006D00009956801E00EF11EE881F9810280F3813D
:1006E000E02DEC14FD0439F0D6016D916D0140E070
:1006F000CE010995F1CF41E060ECCE0109958A81E8
:100700009B81DC01ED91FC910680F781E02DDF916A
:10071000CF911F910F91FF90EF90DF90CF90BF90FE
:100720000994DC0112968D919C91DC01ED91FC9174
:100730000190F081E02D0994CF93DF93DC01ED91DE
:10074000FC910480F581E02D442319F0DF91CF91D5
:100750000994EC01603C21F06B3D59F0CE01F6CFDD
:100760006BED0995E881F9810480F581E02D6CED50
:10077000F5CF6BED0995E881F9810480F581E02DD5
:100780006DEDECCF0F931F93CF93DF93EC01CA5F16
:10079000DE4F2881222321F06C3D49F06D3D09F1A7
:1007A000603C59F16B3D81F481E088833AC0DC0103
:1007B000AB5FBE4FEC9121E02E0F2C93E80FF92F89
:1007C000F11D20EC26831882FC01EB5FFE4F208197
:1007D00031E0320F3083820F911DDC0116966C934D
:1007E00020C0DC01AB5FBE4FEC9121E02E0F2C93BB
:1007F000E80FF92FF11D2BEDE5CF8C010B5F1E4F9C
:10080000D8014C91442351F0BC016A5F7F4FDC0159
:10081000ED91FC910680F781E02D0995F801108299
:100820001882DF91CF911F910F910895DC01ED9116
:10083000FC91309729F00280F381E02D0296099413
:100840000895FC01828D938D30E020E02817390750
:10085000E1F0A785B089A20FB31F4C91641312C0B9
:1008600080A591A52817390718F082A593A50895AA
:10087000220F331F858D968D280F391FF901808136
:10088000918108952F5F3F4FE1CF8585968508952B
:10089000CF93DF93EC01CD3C8CE0D807A0F42AE0A5
:1008A0002C9FC0012D9F900D112402960E94FF12D3
:1008B000FC01C193D193CF012197D7FD07C01182CD
:1008C00010823A96F9CF8FEF9FEFF0CFDF91CF9163
:1008D0000895EF92FF920F931F93CF93DF93EC0154
:1008E0008B0180E190E09F838E8381E088871D8665
:1008F000FB01E184F284C7010E94FF12998388837F
:10090000892B61F1F801828193819B838A838481A1
:1009100095819D838C83868197819F838E8380853B
:100920008887FA86E986838594859C878B87858569
:100930008D8790E080E02B853C858217930770F4CB
:10094000E0913E02F0913F02E80FF91F2081E8811B
:10095000F981E80FF91F20830196EDCFDF91CF9148
:100960001F910F91FF90EF900895EF92FF920F93D8
:100970001F93CF93DF930097C1F1EC01FC013297F5
:10098000808191812AE0289F8001299F100D1124E8
:100990000C0F1D1F7801CE15DF0539F08AE0E81A2B
:1009A000F108C7010E941604F6CFC8018C1B9D0BED
:1009B000969587954DEC5CE4849F9001859F300D62
:1009C000949F300D11243F7746EF4203C001439FAF
:1009D000900D11240297800F911FDF91CF911F91ED
:1009E0000F91FF90EF900C949B13DF91CF911F918B
:1009F0000F91FF90EF9008952F923F924F925F9248
:100A00006F927F928F929F92AF92BF92CF92DF921E
:100A1000EF92FF920F931F93CF93DF938C016B01A3
:100A2000FC01C481D58181859285C617D707B8F4AA
:100A3000C817D907A9F480E0DF91CF911F910F91DA
:100A4000FF90EF90DF90CF90BF90AF909F908F90EE
:100A50007F906F905F904F903F902F900895EB01A3
:100A6000F8012085211105C08C179D0738F081E021
:100A7000E3CF6E018C179D0708F46C011E012097CF
:100A800019F480E1282E312CC1010E9448043C0158
:100A9000009789F27C01512C412CF80180809180D3
:100AA000C414D504E9F05701A618B708C7010E947D
:100AB0001604E114F10469F0F401EA0DFB1D8191C3
:100AC0009191D7018D939D9388E001900D928A9525
:100AD000E1F7FFEF4F1A5F0A8AE0E80EF11CDDCF65
:100AE000C4010E94B504F8017182608221863286B9
:100AF00083859485C817D90708F0B9CFD487C387F1
:100B0000B6CF0F931F93CF93DF938C0160918F0229
:100B100070919002809191029091920286179707AE
:100B2000F8F420919102309192024AE0429FC00174
:100B3000439F900D1124C0918602D0918702C80F67
:100B4000D91FCE010E9416042097E9F480919102EA
:100B500090919202019690939202809391020EC01E
:100B600080918C0290918D02009741F0680F791F5F
:100B700086E892E00E94FC048111D3CFDF91CF91EF
:100B80001F910F910895F80181919191DE018D934C
:100B90009D9388E001900D928A95E1F7D7CF0F934E
:100BA0001F93CF93DF93EC018B0169857A8506173C
:100BB000170738F08E819F81680F791FCE010E9440
:100BC000FC0489859A852B853C850217130740F024
:100BD0008017910740F098012F5F3F4F3C872B878C
:100BE0000817190738F0CE010D96DF91CF911F91AC
:100BF0000F9108958AE0809F9001819F300D11240C
:100C000088819981820F931FF0CFAF92BF92CF92CC
:100C1000DF92EF92FF920F931F93CF93DF938C019C
:100C20007B01FC01C481D58181859285C617D707D8
:100C300078F4C817D90769F480E0DF91CF911F914C
:100C40000F91FF90EF90DF90CF90BF90AF900895FD
:100C5000EB01F8012085211105C08C179D0738F0A4
:100C600081E0EBCF7E018C179D0708F47C01209773
:100C700021F16E018FEF9FEFC115F0E4DF0718F44B
:100C8000C601880F991F0E94FF125C010097A1F214
:100C9000DC01F8018081918130E020E0E216F3066A
:100CA00081F0F901EE0FFF1FE80FF91F408151811C
:100CB0004D935D932F5F3F4FF1CF60E1C62ED12C56
:100CC000DFCF009711F00E949B13F801B182A08240
:100CD000D286C18683859485C817D90708F6D4873C
:100CE000C387BECF0F931F93CF93DF93EC018B018C
:100CF00069857A850617170738F08E819F81680FFE
:100D0000791FCE010E94050689859A852B853C8531
:100D10000217130740F08017910740F098012F5FEA
:100D20003F4F3C872B870817190738F0CE010D96E7
:100D3000DF91CF911F910F910895000F111F8881AE
:100D40009981800F911FF4CF8F929F92AF92BF92A3
:100D5000CF92DF92EF92FF920F931F93CF93DF9387
:100D6000EC017B0189859A856817790760F0CE8050
:100D7000DF80C80ED91E0C811D810C151D0528F5BC
:100D80008017910719F589859A852B853C85E21690
:100D9000F30640F08E159F0548F097012F5F3F4FF7
:100DA0003C872B87E816F90608F458C0CE010D964B
:100DB000DF91CF911F910F91FF90EF90DF90CF9037
:100DC000BF90AF909F908F90089586012885211144
:100DD00027C080179107B8F60115110539F15801A0
:100DE000011580E4180730F5C501880F991F0E948E
:100DF000FF124C01009739F2DC018881998130E0C3
:100E000020E0C216D306C9F0F901EE0FFF1FE80F6C
:100E1000F91F408151814D935D932F5F3F4FF1CF7B
:100E20006C0108171907C0F66801D6CF60E1A62E3D
:100E3000B12CDACF8FEF9FEFDACF009711F00E943D
:100E40009B1399828882BA86A9868B859C85081710
:100E5000190708F098CF1C870B8795CFEE0CFF1C65
:100E6000888199818E0D9F1DA3CFAF92BF92CF92A3
:100E7000DF92EF92FF920F931F93CF93DF938C013A
:100E80007B01DC011496CD91DC91159719968D911B
:100E90009C91C617D70778F4C817D90769F480E082
:100EA000DF91CF911F910F91FF90EF90DF90CF9046
:100EB000BF90AF900895EB01F8012085211105C086
:100EC0008C179D0738F081E0EBCF7E018C179D07D2
:100ED00008F47C016E01209719F480E1C82ED12C12
:100EE000C6010E94FF125C010097C9F2FC01D80103
:100EF0008D919C9130E020E0E216F30641F0DC0198
:100F0000A20FB31F4C9141932F5F3F4FF5CF009736
:100F100011F00E949B13F801B182A082C186D28693
:100F200083859485C817D90770F6D487C387CBCF3C
:100F3000CF93FC0183859485C0E06817790750F54D
:100F40008385948501976817790778F4808191816A
:100F50009B012F5F3F4FDC01A20FB31F4C91680F25
:100F6000791FDB014C93B901EBCF94878387C08550
:100F7000CC2399F04185528526813781BA01621BC5
:100F8000730B8617970730F42417350718F4CF0131
:100F90000E9435078C2FCF910895C1E0FBCF0F93AE
:100FA0001F93CF93DF93EC018B0169857A858B8545
:100FB0009C8586179707A8F4F8018081E881F9815C
:100FC0002B853C85E20FF31F80832B853C85C9016F
:100FD00001969C878B87C901DF91CF911F910F915B
:100FE00008958E819F81009719F48FEF9FEFF4CFC2
:100FF000680F791FCE010E9435078111DDCFF5CF33
:101000000F931F93CF93DF93EC018B0169857A8552
:101010000617170738F08E819F81680F791FCE0160
:101020000E94350789859A852B853C850217130711
:1010300040F08017910740F098012F5F3F4F3C87A9
:101040002B870817190738F0CE010D96DF91CF9145
:101050001F910F91089588819981800F911FF6CF7C
:10106000CF92DF92FF920F931F93CF93DF938C0168
:10107000F62ED0E0C0E06C018FE0C80ED11CF80164
:10108000828D938DC817D90798F4BE01C6010E94BE
:101090000008FC0180818F1109C0CE01DF91CF9142
:1010A0001F910F91FF90DF90CF9008952196E7CF89
:1010B0008FEF9FEFF3CFCF92DF92EF92FF920F93DC
:1010C0001F93CF93DF931F92CDB7DEB78C01698357
:1010D000F12CE12C6C018FE0C80ED11CF801828D3F
:1010E000938DE816F90698F4B701C6010E9400082E
:1010F000FC0190818981981306C0B701C8014D9603
:101100000E94A4060EC0FFEFEF1AFF0AE7CFBE0150
:101110006F5F7F4FC6010E94CF0797FF0CC0C801C9
:101120000D960F90DF91CF911F910F91FF90EF904F
:10113000DF90CF900895F801208131812F5F3F4FDC
:1011400031832083BC01DACFCF92DF92EF92FF92FE
:101150000F931F93CF93DF938C01D62ED0E0C0E086
:101160007C018FE0E80EF11CD8015A968D919C917C
:10117000C817D90708F052C0BE01C7010E94000875
:10118000FC0180818D1148C0D80198968D919C9169
:10119000C817D90798F5AE01440F551FBE01019736
:1011A000FA0132966817790790F4D8015D962D916F
:1011B0003C916F5F7F4FD901AE0FBF1FCD90DC9088
:1011C000240F351FD901CD92DC92AF01E9CFF80190
:1011D00091A780A725A1222389F046A157A123A189
:1011E00034A1BA01621B730B8617970738F42417D2
:1011F000350720F4C8014D960E940506BE01C701BF
:101200000E949807CE01DF91CF911F910F91FF901F
:10121000EF90DF90CF9008952196A6CF8FEF9FEFAC
:10122000F2CFCF92DF92EF92FF920F931F93CF9363
:10123000DF931F92CDB7DEB78C016983F12CE12CCF
:101240006C018FE0C80ED11CF801828D938DE816D9
:10125000F90698F4B701C6010E940008FC019081CC
:101260008981981306C0B701C8014D960E94720685
:101270000EC0FFEFEF1AFF0AE7CFBE016F5F7F4F8F
:10128000C6010E94CF0797FF0CC0C8010D960F90B2
:10129000DF91CF911F910F91FF90EF90DF90CF9052
:1012A0000895F801208131812F5F3F4F31832083E2
:1012B000BC01DACFCF92DF92EF92FF920F931F9390
:1012C000CF93DF931F92CDB7DEB78C016983F12CEA
:1012D000E12C6C018EE0C80ED11CF801818D928D3D
:1012E000E816F90698F4B701C6010E940008FC014F
:1012F00090818981981306C0B701C8014C960E945D
:1013000000080EC0FFEFEF1AFF0AE7CFBE016F5FC4
:101310007F4FC6010E94CF0797FF0CC0C8010D96F2
:101320000F90DF91CF911F910F91FF90EF90DF9081
:10133000CF900895F801208131812F5F3F4F318395
:101340002083BC01DACFFC0180819181009711F0EC
:101350000C949B1308952F923F925F926F927F920D
:101360008F929F92AF92BF92CF92DF92EF92FF92B5
:101370000F931F93CF93DF93CDB7DEB729970FB6A7
:10138000F894DEBF0FBECDBF6C017B01DB016C9119
:1013900011965C90673008F06FC4E62FF0E0ED52D4
:1013A000F64F0C94F912DA09100AF10B5F0C9E0C3F
:1013B0003D0D790DDC01ED91FC910084F185E02D6E
:1013C000423011F1F12CE12C10E000E023E030E09C
:1013D000452D60E0C601099529960FB6F894DEBF49
:1013E0000FBECDBFDF91CF911F910F91FF90EF9076
:1013F000DF90CF90BF90AF909F908F907F906F9035
:101400005F903F902F90089519821A824B8333E0AA
:10141000E32EF12C8E010F5F1F4F30E020E0D8CF7C
:10142000EDB7FEB7F987E887443079F0DC01ED913C
:10143000FC910084F185E02DF12CE12C10E000E01E
:1014400023E030E0452D61E0C5CFF70112818381B3
:10145000282E312CD6011496ED90FC90823009F4A0
:10146000F7C078F4882309F437C1813009F4E0C06B
:10147000612FC7010E945B08DC012D923C9280E045
:10148000BEC0843009F4F1C008F4E7C0853081F7AC
:101490005701F6E5AF0EB11C712C612CC7018059C4
:1014A0009F4F9F838E8345019FE0890E911CAE81E3
:1014B000BF818D919C916816790650F4B301C401E7
:1014C0000E940008FC0180811813DCC077FEDEC09A
:1014D00083E090E00E94FF124C0180914C018C301F
:1014E00008F0F6C091E0980F90934C01D4018C93D2
:1014F00090E0FC01EE0FFF1FE80FF91FE85DFE4FC3
:1015000088EB9BE092838183612FC5010E941109C2
:10151000DC018D929C92612FC5010E941109FC0192
:1015200080809180D4018C918C3008F055C061E0AE
:10153000812F0E940D01F4018081282F30E0F901F4
:10154000EE0FFF1FE20FF31FE85DFE4F9081907CCE
:10155000212F2F73922B9083D40111961C921197F7
:1015600012961C922CE0622F0E94ED12829FB00115
:10157000112430E020E0AB01420F531FFA01EE0FBF
:10158000FF1FE40FF51FE85DFE4F908196FD16C02A
:101590002F5F3F4F2C30310571F781110FC0109232
:1015A000800082E080938100109285001092840078
:1015B000B19A80916F00826080936F00D401EC91AA
:1015C0008E2F90E0FC01EE0FFF1FE80FF91FE85D82
:1015D000FE4F808180648083F40180818F3F09F019
:1015E00047CF612FC5010E941109DC018D919C91AB
:1015F0000E949B13612FC5010E94A40885E0898386
:10160000D601ED91FC910084F185E02DEE24E39468
:10161000F12C8E010F5F1F4F30E020E0452D61E07F
:10162000C60109950FB6F894DEBF0FBECDBFD4CE6C
:1016300060E0812F0E940D01812F0E94B600082FCB
:10164000612FC7018C960E945A09FC01008310CFBC
:1016500061E0812F0E940D010BCF60E0812F0E947D
:101660000D01812F0E943E0103CF61E0812F0E9476
:101670000D0161E0812F0E940D0160E0812F0E9429
:10168000DF00F6CEFFEF6F1A7F0A11CF612FC50181
:101690000E941109DC01ED91FC91E0818E2F90E018
:1016A000FC01EE0FFF1FE80FF91FE85DFE4F808180
:1016B0008F7B8083612FC5010E941109FC0180810D
:1016C00091810E949B13612FC5010E94A40800CF45
:1016D0008FEFF401808318CFB12CA12CF701E059D2
:1016E000FF4FFF83EE834701F6E58F0E911C340117
:1016F0002FE0620E711CAE81BF818D919C91A81666
:10170000B90650F4B501C3010E940008FC018081B4
:1017100018131EC0B7FE20C0B12CA12C3701F5E470
:101720006F0E711C47012AE3820E911CD3018D912B
:101730009C91A816B90650F4B501C4010E94000896
:10174000FC01808118132AC0B7FE2CC060E081CF55
:10175000FFEFAF1ABF0ACFCF612FC4010E9411095A
:10176000DC01ED91FC91E0818E2F90E0FC01EE0F09
:10177000FF1FE80FF91FE85DFE4F80818F7B80839C
:10178000612FC4010E941109FC01808191810E9496
:101790009B13612FC4010E94A408BECFFFEFAF1AB4
:1017A000BF0AC4CFB12CA12CD3018D919C91A81656
:1017B000B90660F6B501C4010E940008FC018081F1
:1017C00018130BC0B501C701885B9F4F0E94980793
:1017D000B501C4010E949807B9CFFFEFAF1ABF0A45
:1017E000E3CF443079F0DC01ED91FC910084F18588
:1017F000E02DF12CE12C10E000E023E030E0452D5D
:1018000062E0E8CDF70112819380DC011496ED903F
:10181000FC90612FC7010E9430080196C9F1612F29
:10182000C7010E945B08FC0180819181029709F049
:1018300042C001E0911001C000E0602F812F0E94A2
:10184000DF00912C812C3701FDE86F0E711C22E81E
:10185000E20EF11CD3018D919C918816990668F5D2
:10186000B401C7010E94CF051C830983DC01ED91FF
:10187000FC910480F581E02DAE014F5F5F4FBE010A
:101880006C5F7F4F02960995BFEF8B1A9B0AE2CFE0
:1018900081E08D83D601ED91FC910084F185E02DEE
:1018A000EE24E394F12C8E010B5F1F4F30E020E01B
:1018B000452D62E0B5CE83E0ECCF80E0EACF433047
:1018C00079F0DC01ED91FC910084F185E02DF12CA3
:1018D000E12C10E000E023E030E0452D63E07ACD1C
:1018E000F7011281612FDC0114968D919C910E9469
:1018F00021040097F1F001970297F0F4812F0E94E4
:10190000B60021E0892B09F420E080E089832A8356
:10191000D601ED91FC910084F185E02D02E0E02EEE
:10192000F12C8E010F5F1F4F30E020E0452D63E06A
:1019300077CE81E020E0EACF82E0FCCF443079F03E
:10194000DC01ED91FC910084F185E02DF12CE12C7E
:1019500010E000E023E030E0452D64E03BCDF701EE
:101960001281DC0114968D909C90612FC4010E941D
:101970002104009799F481E08983D601ED91FC91CF
:101980000084F185E02DEE24E394F12C8E010F5FAD
:101990001F4F30E020E0452D64E042CE049711F067
:1019A00083E0EACFF7010381612FC4010E94300870
:1019B000019609F3612FC4010E945B08DC018D913F
:1019C0009C91049769F7E02EF12C61E0812F0E9431
:1019D0000D01E114F10429F460E0812F0E94DF0081
:1019E0002BC0BFEFEB16F10411F461E0F6CFE12F4D
:1019F000F0E0E255FF4FE491E33029F148F4E130A3
:101A0000B9F0E230D9F0E0E8EE16F10474F7E4CF73
:101A1000E73019F1E83049F1E430A9F7809180000E
:101A2000806280938000F0928B00E0928A0004C074
:101A300084B5806884BD07BD80E09ECF84B5806298
:101A400084BD08BDF9CF80918000806880938000BC
:101A5000F0928900E0928800EFCF8091B00080681A
:101A60008093B0000093B300E7CF8091B000806214
:101A70008093B0000093B400DFCF433079F0DC01F5
:101A8000ED91FC910084F185E02DF12CE12C10E02A
:101A900000E023E030E0452D65E09CCCF7011281A9
:101AA000612FDC0114968D919C910E942104009776
:101AB000E1F0039722E00297C8F4812F0E943E01D3
:101AC00020E029839A838B83D601ED91FC910084D9
:101AD000F185E02DB3E0EB2EF12C8E010F5F1F4F4F
:101AE00030E020E0452D65E09BCD21E080E090E0F6
:101AF000E8CF443079F0DC01ED91FC910084F18570
:101B0000E02DF12CE12C10E000E023E030E0452D49
:101B100066E060CCF7011281DC0114968D909C90F8
:101B2000612FC4010E942104009799F481E0898308
:101B3000D601ED91FC910084F185E02DEE24E39433
:101B4000F12C8E010F5F1F4F30E020E0452D66E045
:101B500067CD059709F08CC0F701038184E0053B50
:101B600030F7612FC4010E94300897FDDFCF612F4D
:101B7000C4010E945B08DC018D919C91059709F0DE
:101B800079C0B6E58B0E911C612FC4010E9411092A
:101B9000DC01ED91FC91E0818E2F90E0FC01EE0FD5
:101BA000FF1FE80FF91FE85DFE4F808186FFBECF63
:101BB000612FC4010E941109DC01ED91FC9110819B
:101BC0001C3008F053C0828148E5842E42E0942EF8
:101BD000881A910887FD93941401220C331C220C5F
:101BE000331C818168E8E62EF12CE81AF10887FDA4
:101BF000F394EE0CFF1CEE0CFF1C37010F2C000CB5
:101C0000880899089101032C000C440B550B2619E8
:101C1000370948095909A02FB0E00E94B11224EBFE
:101C200030E040E050E00E949212BA01A901460D56
:101C3000571D681D791D4E155F052CF07101421569
:101C400053050CF47A01B2E0EB1AF108EE0CFF1C1C
:101C50002FB7F894812F90E0FC01EE0FFF1FE80FE3
:101C6000F91FE85DFE4FF282E1822FBF80E05FCF77
:101C700082E05DCF83E05BCFDC01ED91FC910084DD
:101C8000F185E02DF12CE12C10E000E022E030E0C5
:101C9000452D0995A1CB1F920F920FB60F921124DB
:101CA0002F933F938F939F93AF93BF9380915F0147
:101CB00090916001A0916101B091620130915E014B
:101CC00023E0230F2D3758F50196A11DB11D209358
:101CD0005E0180935F0190936001A0936101B093D6
:101CE00062018091630190916401A0916501B091BE
:101CF00066010196A11DB11D80936301909364015B
:101D0000A0936501B0936601BF91AF919F918F91B0
:101D10003F912F910F900FBE0F901F90189526E8BE
:101D2000230F0296A11DB11DD2CF1F920F920FB6A5
:101D30000F9211242F933F934F935F936F937F9351
:101D40008F939F93AF93BF93EF93FF9387E691E0B9
:101D50000E942C02FF91EF91BF91AF919F918F91C3
:101D60007F916F915F914F913F912F910F900FBE97
:101D70000F901F9018951F920F920FB60F9211247B
:101D80002F938F939F93EF93FF93E0917701F091BF
:101D900078018081E0917D01F0917E0182FD1BC080
:101DA0009081809180018F5F8F73209181018217D4
:101DB00041F0E0918001F0E0E959FE4F958F80936A
:101DC0008001FF91EF919F918F912F910F900FBE06
:101DD0000F901F9018958081F4CF1F920F920FB62D
:101DE0000F9211242F933F934F935F936F937F93A1
:101DF0008F939F93AF93BF93CF93DF93EF93FF9313
:101E000080914D01C0914C01D0E087FF24C0109219
:101E100085001092840080914D018F5F80934D0169
:101E200080914D01082E000C990B8C179D0724F40E
:101E300080914D018C30C4F1809184009091850097
:101E4000049680349C4908F47AC080918400909173
:101E50008500049676C080914D01082E000C990BE8
:101E60008C179D07C4F6E0914D018E2FEE0F990B54
:101E7000FC01EE0FFF1FE80FF91FE85DFE4F8081A8
:101E800086FFC9CFE0914D018E2FEE0F990BFC011B
:101E9000EE0FFF1FE80FF91FE85DFE4F808160E045
:101EA0008F730E94DF00B7CF2091840030918500AE
:101EB000E0914D018E2FEE0F990BFC01EE0FFF1FED
:101EC000E80FF91FE85DFE4F81819281820F931F19
:101ED0009093890080938800E0914D018E2FEE0F42
:101EE000990BFC01EE0FFF1FE80FF91FE85DFE4F95
:101EF000808186FF11C0E0914D018E2FEE0F990B6E
:101F0000FC01EE0FFF1FE80FF91FE85DFE4F808117
:101F100061E08F730E94DF00FF91EF91DF91CF911D
:101F2000BF91AF919F918F917F916F915F914F91F1
:101F30003F912F910F900FBE0F901F90189580E446
:101F40009CE990938900809388008FEF80934D01E6
:101F5000E3CFCF92DF92FF920F931F93CF93DF9344
:101F6000E7E6F1E01382128288EE93E0A0E0B0E0B1
:101F700084839583A683B7838AE191E091838083EC
:101F800085EC90E09587848784EC90E0978786873E
:101F900080EC90E0918B808B81EC90E0938B828B36
:101FA00082EC90E0958B848B86EC90E0978B868B0F
:101FB000118E128E138E148EC4E0D2E000E110E078
:101FC0001F830E83CC24CA94DC2CD986C8861B8739
:101FD0000A87FF24F394FC861E861D861A8B098BC4
:101FE000DC8ACB8A1E8B0D8BFF8A1C8E1B8E1A8E71
:101FF000198F088F80E190E00E94FF12988B8F87E5
:1020000018A30F8FDAA2C9A21CA30BA3FDA21BA6C3
:102010001AA619A618A61FA30EA380E290E00E949C
:10202000FF129E8F8D8F198218821D830C831BAB2C
:102030000AABDDAACCAA1FAB0EABF8AE19AE1DAF32
:102040000CAFDFAECEAE1093450200934402F09287
:10205000460210924B0210924A02109249021093CB
:1020600048020093470280E190E00E94FF129BAF7C
:102070008AAF10934F0200934E02D0925102C09249
:1020800050021093530200935202F09254021092A5
:102090005902109258021092570210935602009360
:1020A000550280E190E00E94FF1290934D028093D0
:1020B0004C021DA61CA619AB08AB1093610200933D
:1020C0006002D0926302C092620210936502009394
:1020D0006402F092660210926802109267021093F6
:1020E0006C0200936B02D0926E02C0926D0210934C
:1020F000700200936F02F0927102109276021092B9
:10210000750210927402109373020093720280E1C0
:1021100090E00E94FF1290936A02809369021093EC
:102120007A0200937902D0927C02C0927B021093D3
:102130007E0200937D02F0927F021092850210923F
:102140008402109283021092820210938102009303
:10215000800280E290E00E94FF12909378028093C8
:10216000770210925B0210925A0210935F02009362
:102170005E021093890200938802D0928B02C09273
:102180008A0210938D0200938C02F0928E021092BC
:102190009402109293021092920210929102109364
:1021A000900200938F0280E190E00E944804909397
:1021B000870280938602DF91CF911F910F91FF904C
:1021C000DF90CF900895CF93DF93CDB7DEB76097C0
:1021D0000FB6F894DEBF0FBECDBF789484B5826091
:1021E00084BD84B5816084BD85B5826085BD85B5BB
:1021F000816085BD80916E00816080936E00109239
:1022000081008091810082608093810080918100B3
:102210008160809381008091800081608093800044
:102220008091B10084608093B1008091B0008160A2
:102230008093B00080917A00846080937A008091CE
:102240007A00826080937A0080917A008160809326
:102250007A0080917A00806880937A001092C100A1
:1022600088E091E00E94FF128C018AE091E0D801A1
:1022700011969C938E9387E691E013969C938E9390
:10228000129784E092E015969C938E931497F80130
:10229000EB5FFE4F10823196108231961082809152
:1022A0005401811115C08CED92E090934F01809301
:1022B0004E018DEA91E090935101809350018BEB98
:1022C00092E0909353018093520181E080935401F6
:1022D0008EE491E09A8389831C830B83CE0101965F
:1022E0000E948105CE0101960E94160410935D01A3
:1022F00000935C0161E08DE00E940D0161E08DE0E2
:102300000E94DF000E94780160E08DE00E94DF0003
:102310000E94780161E08DE00E94DF000E94780158
:1023200060E08DE00E94DF0060E08DE00E940D0122
:10233000D8011296ED91FC91A089B18982E08C932D
:10234000A485B5851C92A685B78580E18C93108EF7
:10235000A489B58986E08C93A289B3898C91806128
:102360008C93A289B3898C9188608C93A289B3895C
:102370008C9180688C930288F389E02D80818F7D19
:1023800080830E94780130E020E050E040E060EF80
:1023900070E0C8010E94E60280E0A82E80E0B82E1E
:1023A0006EE372E0CE0101960E946904F12CE12CEB
:1023B0008C859D85E816F90608F04FC0B701CE015F
:1023C00001960E940008FC011081612F84E092E0D8
:1023D0000E945B08DC018D919C910197D1F5812FC2
:1023E0000E94B600082F612F80E392E00E945A09F4
:1023F000FC018081081769F1612F80E392E00E945F
:102400005A09DC010C93D12CC12C8091910290913E
:102410009202C816D906E8F4B60186E892E00E9456
:10242000CF05188B21E0013009F020E02F87DC0177
:10243000ED91FC910480F581E02DAE01415F5F4F8D
:10244000BE01605F7F4F02960995BFEFCB1ADB0A92
:10245000DCCFEFEFEE1AFE0AABCFCE0101960E9461
:10246000A30900915C0110915D01D80112968D9134
:102470009C91DC01ED91FC910084F185E02D0995A2
:10248000892BA1F0F80182819381DC01ED91FC910F
:102490000284F385E02D0995D801ED91FC9101901E
:1024A000F081E02D682FC8010995DFCFA114B10498
:1024B00009F476CF0E941802882309F471CF0E9494
:1024C00000006ECF8091860290918702009731F0D4
:1024D0000E94B504109287021092860283E992E06E
:1024E0000E9416048091770290917802009711F073
:1024F0000E949B1389E692E00E94A3098CE492E07B
:102500000E94A3098EE392E00E94A3098091210218
:1025100090912202009711F00E949B1383E192E0B8
:102520000C94A309052E97FB1EF400940E94A91297
:1025300057FD07D00E94BC1207FC03D04EF40C9448
:10254000A91250954095309521953F4F4F4F5F4FC1
:10255000089590958095709561957F4F8F4F9F4F0F
:1025600008950E94DE12A59F900DB49F900DA49F28
:10257000800D911D11240895A1E21A2EAA1BBB1BE8
:10258000FD010DC0AA1FBB1FEE1FFF1FA217B3073F
:10259000E407F50720F0A21BB30BE40BF50B661F55
:1025A000771F881F991F1A9469F760957095809519
:1025B00090959B01AC01BD01CF010895A29FB00190
:1025C000B39FC001A39F700D811D1124911DB29F67
:1025D000700D811D1124911D0895991B79E004C08F
:1025E000991F961708F0961B881F7A95C9F7809552
:1025F0000895EE0FFF1F0590F491E02D09940F93BD
:102600001F93CF93DF938230910510F482E090E026
:10261000E0919F02F091A00230E020E0B0E0A0E065
:10262000309799F42115310509F44AC0281B390B5C
:1026300024303105D8F58A819B816115710589F1B6
:10264000FB0193838283FE0111C04081518102818D
:10265000138148175907E0F04817590799F4109764
:1026600061F012960C93129713961C933296CF0139
:10267000DF91CF911F910F91089500939F021093C6
:10268000A002F4CF2115310551F04217530738F05D
:10269000A901DB019A01BD01DF01F801C1CFEF0102
:1026A000F9CF9093A00280939F02CDCFFE01E20F5D
:1026B000F31F819391932250310939832883D7CF17
:1026C00020919D0230919E02232B41F42091020122
:1026D0003091030130939E0220939D0220910001CE
:1026E000309101012115310541F42DB73EB74091DC
:1026F000040150910501241B350BE0919D02F091DE
:102700009E02E217F307A0F42E1B3F0B2817390790
:1027100078F0AC014E5F5F4F2417350748F04E0F3D
:102720005F1F50939E0240939D02819391939FCF90
:10273000F0E0E0E09CCFCF93DF930097E9F0FC015D
:10274000329713821282A0919F02B091A002ED01F4
:1027500030E020E01097A1F420813181820F931F97
:1027600020919D0230919E022817390709F061C01F
:10277000F0939E02E0939D02DF91CF910895EA01CC
:10278000CE17DF07E8F54A815B819E0141155105AF
:10279000B1F7E901FB83EA8349915991C40FD51F31
:1027A000EC17FD0761F4808191810296840F951FDB
:1027B000E90199838883828193819B838A83F0E0F6
:1027C000E0E012968D919C9113970097B9F52D91A9
:1027D0003C911197CD010296820F931F20919D028B
:1027E00030919E022817390739F6309751F510922B
:1027F000A00210929F02B0939E02A0939D02BCCFB4
:10280000D383C28340815181840F951FC817D90794
:1028100061F44E5F5F4F88819981480F591F518342
:1028200040838A819B81938382832115310509F03E
:10283000B0CFF093A002E0939F029ECFFD01DC0198
:10284000C0CF13821282D7CF10E0C2E6D0E004C01E
:10285000FE010E94F9122196C336D107C9F7F894F8
:02286000FFCFA8
:102862000000A102800000000000C2039C0391034B
:10287200AB093903E602000000004E02AE01DB01A3
:082882009B020C02EA01FE01B9
:00000001FF

View File

@ -0,0 +1,4 @@
{
"firmwareFile": "firmware.hex",
"version": "0.0.2"
}

View File

@ -0,0 +1,651 @@
:100000000C9463000C948B000C948B000C948B006C
:100010000C948B000C948B000C948B000C948B0034
:100020000C948B000C948B000C948B000C94ED0EB4
:100030000C948B000C948B000C948B000C948B0014
:100040000C944B0E0C948B000C94BB0E0C94950EE0
:100050000C948B000C948B000C948B000C948B00F4
:100060000C948B000C948B000000000024002700EF
:100070002A0000000000250028002B0000000000DE
:1000800023002600290004040404040404040202DA
:100090000202020203030303030301020408102007
:1000A0004080010204081020010204081020000012
:1000B0000008000201000003040700000000000027
:1000C0000000A90F621211241FBECFEFD8E0DEBFDF
:1000D000CDBF11E0A0E0B1E0E2E6F8E202C0059099
:1000E0000D92A832B107D9F722E0A8E2B1E001C031
:1000F0001D92A13AB207E1F710E0C2E6D0E004C0D9
:100100002197FE010E94F912C136D107C9F70E945A
:10011000E3100C9424140C940000833081F028F434
:10012000813099F08230A9F008958730A9F08830A5
:10013000C9F08430B1F4809180008F7D03C080913C
:1001400080008F7780938000089584B58F7784BD79
:10015000089584B58F7DFBCF8091B0008F77809319
:10016000B00008958091B0008F7DF9CFCF93DF93D9
:10017000282F30E0F901E255FF4F8491F901E6564E
:10018000FF4FD491F901EA57FF4FC491CC23A1F05E
:1001900081110E948D00EC2FF0E0EE0FFF1FE4585C
:1001A000FF4FA591B491EC91ED2381E090E009F42B
:1001B00080E0DF91CF91089580E090E0FACF1F9327
:1001C000CF93DF93282F30E0F901E255FF4F849160
:1001D000F901E656FF4FD491F901EA57FF4FC49158
:1001E000CC23A9F0162F81110E948D00EC2FF0E096
:1001F000EE0FFF1FEE58FF4FA591B4918FB7F89403
:10020000EC91111108C0D095DE23DC938FBFDF91F4
:10021000CF911F910895DE2BF8CFCF93DF9390E01D
:10022000FC01E656FF4F24918A579F4FFC018491B1
:100230008823D1F090E0880F991FFC01E859FF4F07
:10024000A591B491FC01EE58FF4FC591D491611175
:100250000EC09FB7F8948C91E22FE0958E238C937B
:100260002881E223E8839FBFDF91CF9108958FB764
:10027000F894EC91E22BEC938FBFF6CF8E3008F020
:100280008E508770806480937C0080917A008064B7
:1002900080937A0080917A0086FDFCCF809178006F
:1002A0009091790008953FB7F894809163019091FF
:1002B0006401A0916501B091660126B5A89B05C0B7
:1002C0002F3F19F00196A11DB11D3FBFBA2FA92FD5
:1002D000982F8827BC01CD01620F711D811D911DD2
:1002E00042E0660F771F881F991F4A95D1F708953E
:1002F0008F929F92AF92BF92CF92DF92EF92FF9236
:100300000E9453014B015C0184E6C82ED12CE12CE4
:10031000F12C0E945301681979098A099B09683EEA
:10032000734081059105A8F321E0C21AD108E108C4
:10033000F10888EE880E83E0981EA11CB11CC11440
:10034000D104E104F10429F7FF90EF90DF90CF9002
:10035000BF90AF909F908F9008950895AF92BF92F5
:10036000CF92DF92EF92FF920F931F93CF93DF9381
:100370006C017B018B01040F151FEB015E01AE18B0
:10038000BF08C017D10759F06991D601ED91FC91D2
:100390000190F081E02DC6010995892B79F7C501FF
:1003A000DF91CF911F910F91FF90EF90DF90CF9051
:1003B000BF90AF900895FC01538D448D252F30E000
:1003C000842F90E0821B930B541710F0CF96089562
:1003D00001970895FC01918D828D981761F0A28D8F
:1003E000AE0FBF2FB11D5D968C91928D9F5F9F7355
:1003F000928F90E008958FEF9FEF0895FC01918D0B
:10040000828D981731F0828DE80FF11D858D90E077
:1004100008958FEF9FEF0895FC01918D228D892F14
:1004200090E0805C9F4F821B91098F7399270895FC
:1004300087E691E00E940C0221E0892B09F420E07C
:10044000822F089580E090E0892B29F00E94180205
:1004500081110C9400000895FC01A48DA80FB92F00
:10046000B11DA35ABF4F2C91848D90E001968F73DC
:100470009927848FA689B7892C93A089B1898C91FB
:10048000837080648C93938D848D981306C002884A
:10049000F389E02D80818F7D80830895EF92FF9214
:1004A0000F931F93CF93DF93EC0181E0888F9B8D97
:1004B0008C8D98131AC0E889F989808185FF15C051
:1004C0009FB7F894EE89FF896083E889F989808174
:1004D0008370806480839FBF81E090E0DF91CF9143
:1004E0001F910F91FF90EF900895F62E0B8D10E065
:1004F0000F5F1F4F0F731127E02E8C8D8E110CC0D4
:100500000FB607FCFACFE889F989808185FFF5CF1E
:10051000CE010E942C02F1CFEB8DEC0FFD2FF11DCF
:10052000E35AFF4FF0829FB7F8940B8FEA89FB895B
:1005300080818062CFCFCF93DF93EC01888D8823B9
:10054000B9F0AA89BB89E889F9898C9185FD03C036
:10055000808186FD0DC00FB607FCF7CF8C9185FF1B
:10056000F2CF808185FFEDCFCE010E942C02E9CF32
:10057000DF91CF910895CF93DF9300D0CDB7DEB751
:10058000DA012C91FB01308139832A83DC018D91C2
:100590009C91DC01ED91FC910284F385E02D22E039
:1005A00030E0AE014F5F5F4F61EF70E009950F9053
:1005B0000F90DF91CF9108956115710531F0FC0125
:1005C00080819181FB01918380830895CF92DF9296
:1005D000EF92FF920F931F93CF93DF93EC01162FAF
:1005E0006A017901E881F9810280F381E02D41E01F
:1005F00060EC0995E881F9810280F381E02D40E00B
:10060000612FCE010995E881F9810280F381E02D07
:10061000DE01A95FBE4F6C9181E0860F8C9340E0B4
:10062000CE0109958601EC0CFD1CE881F981028060
:10063000F381E02DE016F10639F0D8016D918D01BE
:1006400040E0CE010995F1CF41E060ECCE01099583
:100650008A819B81DC01ED91FC910680F781E02D80
:10066000DF91CF911F910F91FF90EF90DF90CF908E
:100670000994BF92CF92DF92EF92FF920F931F9354
:10068000CF93DF93EC01B62EC42ED22EE881F981F0
:100690000280F381E02D41E060EC0995E881F98169
:1006A0000280F381E02D40E06B2DCE010995E881B9
:1006B000F9810280F381E02D40E06C2DCE01099597
:1006C000E881F9810280F381E02D40E06D2DCE01BB
:1006D00009956801E00EF11EE881F9810280F3813D
:1006E000E02DEC14FD0439F0D6016D916D0140E070
:1006F000CE010995F1CF41E060ECCE0109958A81E8
:100700009B81DC01ED91FC910680F781E02DDF916A
:10071000CF911F910F91FF90EF90DF90CF90BF90FE
:100720000994DC0112968D919C91DC01ED91FC9174
:100730000190F081E02D0994CF93DF93DC01ED91DE
:10074000FC910480F581E02D442319F0DF91CF91D5
:100750000994EC01603C21F06B3D59F0CE01F6CFDD
:100760006BED0995E881F9810480F581E02D6CED50
:10077000F5CF6BED0995E881F9810480F581E02DD5
:100780006DEDECCF0F931F93CF93DF93EC01CA5F16
:10079000DE4F2881222321F06C3D49F06D3D09F1A7
:1007A000603C59F16B3D81F481E088833AC0DC0103
:1007B000AB5FBE4FEC9121E02E0F2C93E80FF92F89
:1007C000F11D20EC26831882FC01EB5FFE4F208197
:1007D00031E0320F3083820F911DDC0116966C934D
:1007E00020C0DC01AB5FBE4FEC9121E02E0F2C93BB
:1007F000E80FF92FF11D2BEDE5CF8C010B5F1E4F9C
:10080000D8014C91442351F0BC016A5F7F4FDC0159
:10081000ED91FC910680F781E02D0995F801108299
:100820001882DF91CF911F910F910895DC01ED9116
:10083000FC91309729F00280F381E02D0296099413
:100840000895FC01828D938D30E020E02817390750
:10085000E1F0A785B089A20FB31F4C91641312C0B9
:1008600080A591A52817390718F082A593A50895AA
:10087000220F331F858D968D280F391FF901808136
:10088000918108952F5F3F4FE1CF8585968508952B
:10089000CF93DF93EC01CD3C8CE0D807A0F42AE0A5
:1008A0002C9FC0012D9F900D112402960E94FF12D3
:1008B000FC01C193D193CF012197D7FD07C01182CD
:1008C00010823A96F9CF8FEF9FEFF0CFDF91CF9163
:1008D0000895EF92FF920F931F93CF93DF93EC0154
:1008E0008B0180E190E09F838E8381E088871D8665
:1008F000FB01E184F284C7010E94FF12998388837F
:10090000892B61F1F801828193819B838A838481A1
:1009100095819D838C83868197819F838E8380853B
:100920008887FA86E986838594859C878B87858569
:100930008D8790E080E02B853C858217930770F4CB
:10094000E0913E02F0913F02E80FF91F2081E8811B
:10095000F981E80FF91F20830196EDCFDF91CF9148
:100960001F910F91FF90EF900895EF92FF920F93D8
:100970001F93CF93DF930097C1F1EC01FC013297F5
:10098000808191812AE0289F8001299F100D1124E8
:100990000C0F1D1F7801CE15DF0539F08AE0E81A2B
:1009A000F108C7010E941604F6CFC8018C1B9D0BED
:1009B000969587954DEC5CE4849F9001859F300D62
:1009C000949F300D11243F7746EF4203C001439FAF
:1009D000900D11240297800F911FDF91CF911F91ED
:1009E0000F91FF90EF900C949B13DF91CF911F918B
:1009F0000F91FF90EF9008952F923F924F925F9248
:100A00006F927F928F929F92AF92BF92CF92DF921E
:100A1000EF92FF920F931F93CF93DF938C016B01A3
:100A2000FC01C481D58181859285C617D707B8F4AA
:100A3000C817D907A9F480E0DF91CF911F910F91DA
:100A4000FF90EF90DF90CF90BF90AF909F908F90EE
:100A50007F906F905F904F903F902F900895EB01A3
:100A6000F8012085211105C08C179D0738F081E021
:100A7000E3CF6E018C179D0708F46C011E012097CF
:100A800019F480E1282E312CC1010E9448043C0158
:100A9000009789F27C01512C412CF80180809180D3
:100AA000C414D504E9F05701A618B708C7010E947D
:100AB0001604E114F10469F0F401EA0DFB1D8191C3
:100AC0009191D7018D939D9388E001900D928A9525
:100AD000E1F7FFEF4F1A5F0A8AE0E80EF11CDDCF65
:100AE000C4010E94B504F8017182608221863286B9
:100AF00083859485C817D90708F0B9CFD487C387F1
:100B0000B6CF0F931F93CF93DF938C0160918F0229
:100B100070919002809191029091920286179707AE
:100B2000F8F420919102309192024AE0429FC00174
:100B3000439F900D1124C0918602D0918702C80F67
:100B4000D91FCE010E9416042097E9F480919102EA
:100B500090919202019690939202809391020EC01E
:100B600080918C0290918D02009741F0680F791F5F
:100B700086E892E00E94FC048111D3CFDF91CF91EF
:100B80001F910F910895F80181919191DE018D934C
:100B90009D9388E001900D928A95E1F7D7CF0F934E
:100BA0001F93CF93DF93EC018B0169857A8506173C
:100BB000170738F08E819F81680F791FCE010E9440
:100BC000FC0489859A852B853C850217130740F024
:100BD0008017910740F098012F5F3F4F3C872B878C
:100BE0000817190738F0CE010D96DF91CF911F91AC
:100BF0000F9108958AE0809F9001819F300D11240C
:100C000088819981820F931FF0CFAF92BF92CF92CC
:100C1000DF92EF92FF920F931F93CF93DF938C019C
:100C20007B01FC01C481D58181859285C617D707D8
:100C300078F4C817D90769F480E0DF91CF911F914C
:100C40000F91FF90EF90DF90CF90BF90AF900895FD
:100C5000EB01F8012085211105C08C179D0738F0A4
:100C600081E0EBCF7E018C179D0708F47C01209773
:100C700021F16E018FEF9FEFC115F0E4DF0718F44B
:100C8000C601880F991F0E94FF125C010097A1F214
:100C9000DC01F8018081918130E020E0E216F3066A
:100CA00081F0F901EE0FFF1FE80FF91F408151811C
:100CB0004D935D932F5F3F4FF1CF60E1C62ED12C56
:100CC000DFCF009711F00E949B13F801B182A08240
:100CD000D286C18683859485C817D90708F6D4873C
:100CE000C387BECF0F931F93CF93DF93EC018B018C
:100CF00069857A850617170738F08E819F81680FFE
:100D0000791FCE010E94050689859A852B853C8531
:100D10000217130740F08017910740F098012F5FEA
:100D20003F4F3C872B870817190738F0CE010D96E7
:100D3000DF91CF911F910F910895000F111F8881AE
:100D40009981800F911FF4CF8F929F92AF92BF92A3
:100D5000CF92DF92EF92FF920F931F93CF93DF9387
:100D6000EC017B0189859A856817790760F0CE8050
:100D7000DF80C80ED91E0C811D810C151D0528F5BC
:100D80008017910719F589859A852B853C85E21690
:100D9000F30640F08E159F0548F097012F5F3F4FF7
:100DA0003C872B87E816F90608F458C0CE010D964B
:100DB000DF91CF911F910F91FF90EF90DF90CF9037
:100DC000BF90AF909F908F90089586012885211144
:100DD00027C080179107B8F60115110539F15801A0
:100DE000011580E4180730F5C501880F991F0E948E
:100DF000FF124C01009739F2DC018881998130E0C3
:100E000020E0C216D306C9F0F901EE0FFF1FE80F6C
:100E1000F91F408151814D935D932F5F3F4FF1CF7B
:100E20006C0108171907C0F66801D6CF60E1A62E3D
:100E3000B12CDACF8FEF9FEFDACF009711F00E943D
:100E40009B1399828882BA86A9868B859C85081710
:100E5000190708F098CF1C870B8795CFEE0CFF1C65
:100E6000888199818E0D9F1DA3CFAF92BF92CF92A3
:100E7000DF92EF92FF920F931F93CF93DF938C013A
:100E80007B01DC011496CD91DC91159719968D911B
:100E90009C91C617D70778F4C817D90769F480E082
:100EA000DF91CF911F910F91FF90EF90DF90CF9046
:100EB000BF90AF900895EB01F8012085211105C086
:100EC0008C179D0738F081E0EBCF7E018C179D07D2
:100ED00008F47C016E01209719F480E1C82ED12C12
:100EE000C6010E94FF125C010097C9F2FC01D80103
:100EF0008D919C9130E020E0E216F30641F0DC0198
:100F0000A20FB31F4C9141932F5F3F4FF5CF009736
:100F100011F00E949B13F801B182A082C186D28693
:100F200083859485C817D90770F6D487C387CBCF3C
:100F3000CF93FC0183859485C0E06817790750F54D
:100F40008385948501976817790778F4808191816A
:100F50009B012F5F3F4FDC01A20FB31F4C91680F25
:100F6000791FDB014C93B901EBCF94878387C08550
:100F7000CC2399F04185528526813781BA01621BC5
:100F8000730B8617970730F42417350718F4CF0131
:100F90000E9435078C2FCF910895C1E0FBCF0F93AE
:100FA0001F93CF93DF93EC018B0169857A858B8545
:100FB0009C8586179707A8F4F8018081E881F9815C
:100FC0002B853C85E20FF31F80832B853C85C9016F
:100FD00001969C878B87C901DF91CF911F910F915B
:100FE00008958E819F81009719F48FEF9FEFF4CFC2
:100FF000680F791FCE010E9435078111DDCFF5CF33
:101000000F931F93CF93DF93EC018B0169857A8552
:101010000617170738F08E819F81680F791FCE0160
:101020000E94350789859A852B853C850217130711
:1010300040F08017910740F098012F5F3F4F3C87A9
:101040002B870817190738F0CE010D96DF91CF9145
:101050001F910F91089588819981800F911FF6CF7C
:10106000CF92DF92FF920F931F93CF93DF938C0168
:10107000F62ED0E0C0E06C018FE0C80ED11CF80164
:10108000828D938DC817D90798F4BE01C6010E94BE
:101090000008FC0180818F1109C0CE01DF91CF9142
:1010A0001F910F91FF90DF90CF9008952196E7CF89
:1010B0008FEF9FEFF3CFCF92DF92EF92FF920F93DC
:1010C0001F93CF93DF931F92CDB7DEB78C01698357
:1010D000F12CE12C6C018FE0C80ED11CF801828D3F
:1010E000938DE816F90698F4B701C6010E9400082E
:1010F000FC0190818981981306C0B701C8014D9603
:101100000E94A4060EC0FFEFEF1AFF0AE7CFBE0150
:101110006F5F7F4FC6010E94CF0797FF0CC0C801C9
:101120000D960F90DF91CF911F910F91FF90EF904F
:10113000DF90CF900895F801208131812F5F3F4FDC
:1011400031832083BC01DACFCF92DF92EF92FF92FE
:101150000F931F93CF93DF938C01D62ED0E0C0E086
:101160007C018FE0E80EF11CD8015A968D919C917C
:10117000C817D90708F052C0BE01C7010E94000875
:10118000FC0180818D1148C0D80198968D919C9169
:10119000C817D90798F5AE01440F551FBE01019736
:1011A000FA0132966817790790F4D8015D962D916F
:1011B0003C916F5F7F4FD901AE0FBF1FCD90DC9088
:1011C000240F351FD901CD92DC92AF01E9CFF80190
:1011D00091A780A725A1222389F046A157A123A189
:1011E00034A1BA01621B730B8617970738F42417D2
:1011F000350720F4C8014D960E940506BE01C701BF
:101200000E949807CE01DF91CF911F910F91FF901F
:10121000EF90DF90CF9008952196A6CF8FEF9FEFAC
:10122000F2CFCF92DF92EF92FF920F931F93CF9363
:10123000DF931F92CDB7DEB78C016983F12CE12CCF
:101240006C018FE0C80ED11CF801828D938DE816D9
:10125000F90698F4B701C6010E940008FC019081CC
:101260008981981306C0B701C8014D960E94720685
:101270000EC0FFEFEF1AFF0AE7CFBE016F5F7F4F8F
:10128000C6010E94CF0797FF0CC0C8010D960F90B2
:10129000DF91CF911F910F91FF90EF90DF90CF9052
:1012A0000895F801208131812F5F3F4F31832083E2
:1012B000BC01DACFCF92DF92EF92FF920F931F9390
:1012C000CF93DF931F92CDB7DEB78C016983F12CEA
:1012D000E12C6C018EE0C80ED11CF801818D928D3D
:1012E000E816F90698F4B701C6010E940008FC014F
:1012F00090818981981306C0B701C8014C960E945D
:1013000000080EC0FFEFEF1AFF0AE7CFBE016F5FC4
:101310007F4FC6010E94CF0797FF0CC0C8010D96F2
:101320000F90DF91CF911F910F91FF90EF90DF9081
:10133000CF900895F801208131812F5F3F4F318395
:101340002083BC01DACFFC0180819181009711F0EC
:101350000C949B1308952F923F925F926F927F920D
:101360008F929F92AF92BF92CF92DF92EF92FF92B5
:101370000F931F93CF93DF93CDB7DEB729970FB6A7
:10138000F894DEBF0FBECDBF6C017B01DB016C9119
:1013900011965C90673008F06FC4E62FF0E0ED52D4
:1013A000F64F0C94F912DA09100AF10B5F0C9E0C3F
:1013B0003D0D790DDC01ED91FC910084F185E02D6E
:1013C000423011F1F12CE12C10E000E023E030E09C
:1013D000452D60E0C601099529960FB6F894DEBF49
:1013E0000FBECDBFDF91CF911F910F91FF90EF9076
:1013F000DF90CF90BF90AF909F908F907F906F9035
:101400005F903F902F90089519821A824B8333E0AA
:10141000E32EF12C8E010F5F1F4F30E020E0D8CF7C
:10142000EDB7FEB7F987E887443079F0DC01ED913C
:10143000FC910084F185E02DF12CE12C10E000E01E
:1014400023E030E0452D61E0C5CFF70112818381B3
:10145000282E312CD6011496ED90FC90823009F4A0
:10146000F7C078F4882309F437C1813009F4E0C06B
:10147000612FC7010E945B08DC012D923C9280E045
:10148000BEC0843009F4F1C008F4E7C0853081F7AC
:101490005701F6E5AF0EB11C712C612CC7018059C4
:1014A0009F4F9F838E8345019FE0890E911CAE81E3
:1014B000BF818D919C916816790650F4B301C401E7
:1014C0000E940008FC0180811813DCC077FEDEC09A
:1014D00083E090E00E94FF124C0180914C018C301F
:1014E00008F0F6C091E0980F90934C01D4018C93D2
:1014F00090E0FC01EE0FFF1FE80FF91FE85DFE4FC3
:1015000088EB9BE092838183612FC5010E941109C2
:10151000DC018D929C92612FC5010E941109FC0192
:1015200080809180D4018C918C3008F055C061E0AE
:10153000812F0E940D01F4018081282F30E0F901F4
:10154000EE0FFF1FE20FF31FE85DFE4F9081907CCE
:10155000212F2F73922B9083D40111961C921197F7
:1015600012961C922CE0622F0E94ED12829FB00115
:10157000112430E020E0AB01420F531FFA01EE0FBF
:10158000FF1FE40FF51FE85DFE4F908196FD16C02A
:101590002F5F3F4F2C30310571F781110FC0109232
:1015A000800082E080938100109285001092840078
:1015B000B19A80916F00826080936F00D401EC91AA
:1015C0008E2F90E0FC01EE0FFF1FE80FF91FE85D82
:1015D000FE4F808180648083F40180818F3F09F019
:1015E00047CF612FC5010E941109DC018D919C91AB
:1015F0000E949B13612FC5010E94A40885E0898386
:10160000D601ED91FC910084F185E02DEE24E39468
:10161000F12C8E010F5F1F4F30E020E0452D61E07F
:10162000C60109950FB6F894DEBF0FBECDBFD4CE6C
:1016300060E0812F0E940D01812F0E94B600082FCB
:10164000612FC7018C960E945A09FC01008310CFBC
:1016500061E0812F0E940D010BCF60E0812F0E947D
:101660000D01812F0E943E0103CF61E0812F0E9476
:101670000D0161E0812F0E940D0160E0812F0E9429
:10168000DF00F6CEFFEF6F1A7F0A11CF612FC50181
:101690000E941109DC01ED91FC91E0818E2F90E018
:1016A000FC01EE0FFF1FE80FF91FE85DFE4F808180
:1016B0008F7B8083612FC5010E941109FC0180810D
:1016C00091810E949B13612FC5010E94A40800CF45
:1016D0008FEFF401808318CFB12CA12CF701E059D2
:1016E000FF4FFF83EE834701F6E58F0E911C340117
:1016F0002FE0620E711CAE81BF818D919C91A81666
:10170000B90650F4B501C3010E940008FC018081B4
:1017100018131EC0B7FE20C0B12CA12C3701F5E470
:101720006F0E711C47012AE3820E911CD3018D912B
:101730009C91A816B90650F4B501C4010E94000896
:10174000FC01808118132AC0B7FE2CC060E081CF55
:10175000FFEFAF1ABF0ACFCF612FC4010E9411095A
:10176000DC01ED91FC91E0818E2F90E0FC01EE0F09
:10177000FF1FE80FF91FE85DFE4F80818F7B80839C
:10178000612FC4010E941109FC01808191810E9496
:101790009B13612FC4010E94A408BECFFFEFAF1AB4
:1017A000BF0AC4CFB12CA12CD3018D919C91A81656
:1017B000B90660F6B501C4010E940008FC018081F1
:1017C00018130BC0B501C701885B9F4F0E94980793
:1017D000B501C4010E949807B9CFFFEFAF1ABF0A45
:1017E000E3CF443079F0DC01ED91FC910084F18588
:1017F000E02DF12CE12C10E000E023E030E0452D5D
:1018000062E0E8CDF70112819380DC011496ED903F
:10181000FC90612FC7010E9430080196C9F1612F29
:10182000C7010E945B08FC0180819181029709F049
:1018300042C001E0911001C000E0602F812F0E94A2
:10184000DF00912C812C3701FDE86F0E711C22E81E
:10185000E20EF11CD3018D919C918816990668F5D2
:10186000B401C7010E94CF051C830983DC01ED91FF
:10187000FC910480F581E02DAE014F5F5F4FBE010A
:101880006C5F7F4F02960995BFEF8B1A9B0AE2CFE0
:1018900081E08D83D601ED91FC910084F185E02DEE
:1018A000EE24E394F12C8E010B5F1F4F30E020E01B
:1018B000452D62E0B5CE83E0ECCF80E0EACF433047
:1018C00079F0DC01ED91FC910084F185E02DF12CA3
:1018D000E12C10E000E023E030E0452D63E07ACD1C
:1018E000F7011281612FDC0114968D919C910E9469
:1018F00021040097F1F001970297F0F4812F0E94E4
:10190000B60021E0892B09F420E080E089832A8356
:10191000D601ED91FC910084F185E02D02E0E02EEE
:10192000F12C8E010F5F1F4F30E020E0452D63E06A
:1019300077CE81E020E0EACF82E0FCCF443079F03E
:10194000DC01ED91FC910084F185E02DF12CE12C7E
:1019500010E000E023E030E0452D64E03BCDF701EE
:101960001281DC0114968D909C90612FC4010E941D
:101970002104009799F481E08983D601ED91FC91CF
:101980000084F185E02DEE24E394F12C8E010F5FAD
:101990001F4F30E020E0452D64E042CE049711F067
:1019A00083E0EACFF7010381612FC4010E94300870
:1019B000019609F3612FC4010E945B08DC018D913F
:1019C0009C91049769F7E02EF12C61E0812F0E9431
:1019D0000D01E114F10429F460E0812F0E94DF0081
:1019E0002BC0BFEFEB16F10411F461E0F6CFE12F4D
:1019F000F0E0E255FF4FE491E33029F148F4E130A3
:101A0000B9F0E230D9F0E0E8EE16F10474F7E4CF73
:101A1000E73019F1E83049F1E430A9F7809180000E
:101A2000806280938000F0928B00E0928A0004C074
:101A300084B5806884BD07BD80E09ECF84B5806298
:101A400084BD08BDF9CF80918000806880938000BC
:101A5000F0928900E0928800EFCF8091B00080681A
:101A60008093B0000093B300E7CF8091B000806214
:101A70008093B0000093B400DFCF433079F0DC01F5
:101A8000ED91FC910084F185E02DF12CE12C10E02A
:101A900000E023E030E0452D65E09CCCF7011281A9
:101AA000612FDC0114968D919C910E942104009776
:101AB000E1F0039722E00297C8F4812F0E943E01D3
:101AC00020E029839A838B83D601ED91FC910084D9
:101AD000F185E02DB3E0EB2EF12C8E010F5F1F4F4F
:101AE00030E020E0452D65E09BCD21E080E090E0F6
:101AF000E8CF443079F0DC01ED91FC910084F18570
:101B0000E02DF12CE12C10E000E023E030E0452D49
:101B100066E060CCF7011281DC0114968D909C90F8
:101B2000612FC4010E942104009799F481E0898308
:101B3000D601ED91FC910084F185E02DEE24E39433
:101B4000F12C8E010F5F1F4F30E020E0452D66E045
:101B500067CD059709F08CC0F701038184E0053B50
:101B600030F7612FC4010E94300897FDDFCF612F4D
:101B7000C4010E945B08DC018D919C91059709F0DE
:101B800079C0B6E58B0E911C612FC4010E9411092A
:101B9000DC01ED91FC91E0818E2F90E0FC01EE0FD5
:101BA000FF1FE80FF91FE85DFE4F808186FFBECF63
:101BB000612FC4010E941109DC01ED91FC9110819B
:101BC0001C3008F053C0828148E5842E42E0942EF8
:101BD000881A910887FD93941401220C331C220C5F
:101BE000331C818168E8E62EF12CE81AF10887FDA4
:101BF000F394EE0CFF1CEE0CFF1C37010F2C000CB5
:101C0000880899089101032C000C440B550B2619E8
:101C1000370948095909A02FB0E00E94B11224EBFE
:101C200030E040E050E00E949212BA01A901460D56
:101C3000571D681D791D4E155F052CF07101421569
:101C400053050CF47A01B2E0EB1AF108EE0CFF1C1C
:101C50002FB7F894812F90E0FC01EE0FFF1FE80FE3
:101C6000F91FE85DFE4FF282E1822FBF80E05FCF77
:101C700082E05DCF83E05BCFDC01ED91FC910084DD
:101C8000F185E02DF12CE12C10E000E022E030E0C5
:101C9000452D0995A1CB1F920F920FB60F921124DB
:101CA0002F933F938F939F93AF93BF9380915F0147
:101CB00090916001A0916101B091620130915E014B
:101CC00023E0230F2D3758F50196A11DB11D209358
:101CD0005E0180935F0190936001A0936101B093D6
:101CE00062018091630190916401A0916501B091BE
:101CF00066010196A11DB11D80936301909364015B
:101D0000A0936501B0936601BF91AF919F918F91B0
:101D10003F912F910F900FBE0F901F90189526E8BE
:101D2000230F0296A11DB11DD2CF1F920F920FB6A5
:101D30000F9211242F933F934F935F936F937F9351
:101D40008F939F93AF93BF93EF93FF9387E691E0B9
:101D50000E942C02FF91EF91BF91AF919F918F91C3
:101D60007F916F915F914F913F912F910F900FBE97
:101D70000F901F9018951F920F920FB60F9211247B
:101D80002F938F939F93EF93FF93E0917701F091BF
:101D900078018081E0917D01F0917E0182FD1BC080
:101DA0009081809180018F5F8F73209181018217D4
:101DB00041F0E0918001F0E0E959FE4F958F80936A
:101DC0008001FF91EF919F918F912F910F900FBE06
:101DD0000F901F9018958081F4CF1F920F920FB62D
:101DE0000F9211242F933F934F935F936F937F93A1
:101DF0008F939F93AF93BF93CF93DF93EF93FF9313
:101E000080914D01C0914C01D0E087FF24C0109219
:101E100085001092840080914D018F5F80934D0169
:101E200080914D01082E000C990B8C179D0724F40E
:101E300080914D018C30C4F1809184009091850097
:101E4000049680349C4908F47AC080918400909173
:101E50008500049676C080914D01082E000C990BE8
:101E60008C179D07C4F6E0914D018E2FEE0F990B54
:101E7000FC01EE0FFF1FE80FF91FE85DFE4F8081A8
:101E800086FFC9CFE0914D018E2FEE0F990BFC011B
:101E9000EE0FFF1FE80FF91FE85DFE4F808160E045
:101EA0008F730E94DF00B7CF2091840030918500AE
:101EB000E0914D018E2FEE0F990BFC01EE0FFF1FED
:101EC000E80FF91FE85DFE4F81819281820F931F19
:101ED0009093890080938800E0914D018E2FEE0F42
:101EE000990BFC01EE0FFF1FE80FF91FE85DFE4F95
:101EF000808186FF11C0E0914D018E2FEE0F990B6E
:101F0000FC01EE0FFF1FE80FF91FE85DFE4F808117
:101F100061E08F730E94DF00FF91EF91DF91CF911D
:101F2000BF91AF919F918F917F916F915F914F91F1
:101F30003F912F910F900FBE0F901F90189580E446
:101F40009CE990938900809388008FEF80934D01E6
:101F5000E3CFCF92DF92FF920F931F93CF93DF9344
:101F6000E7E6F1E01382128288EE93E0A0E0B0E0B1
:101F700084839583A683B7838AE191E091838083EC
:101F800085EC90E09587848784EC90E0978786873E
:101F900080EC90E0918B808B81EC90E0938B828B36
:101FA00082EC90E0958B848B86EC90E0978B868B0F
:101FB000118E128E138E148EC4E0D2E000E110E078
:101FC0001F830E83CC24CA94DC2CD986C8861B8739
:101FD0000A87FF24F394FC861E861D861A8B098BC4
:101FE000DC8ACB8A1E8B0D8BFF8A1C8E1B8E1A8E71
:101FF000198F088F80E190E00E94FF12988B8F87E5
:1020000018A30F8FDAA2C9A21CA30BA3FDA21BA6C3
:102010001AA619A618A61FA30EA380E290E00E949C
:10202000FF129E8F8D8F198218821D830C831BAB2C
:102030000AABDDAACCAA1FAB0EABF8AE19AE1DAF32
:102040000CAFDFAECEAE1093450200934402F09287
:10205000460210924B0210924A02109249021093CB
:1020600048020093470280E190E00E94FF129BAF7C
:102070008AAF10934F0200934E02D0925102C09249
:1020800050021093530200935202F09254021092A5
:102090005902109258021092570210935602009360
:1020A000550280E190E00E94FF1290934D028093D0
:1020B0004C021DA61CA619AB08AB1093610200933D
:1020C0006002D0926302C092620210936502009394
:1020D0006402F092660210926802109267021093F6
:1020E0006C0200936B02D0926E02C0926D0210934C
:1020F000700200936F02F0927102109276021092B9
:10210000750210927402109373020093720280E1C0
:1021100090E00E94FF1290936A02809369021093EC
:102120007A0200937902D0927C02C0927B021093D3
:102130007E0200937D02F0927F021092850210923F
:102140008402109283021092820210938102009303
:10215000800280E290E00E94FF12909378028093C8
:10216000770210925B0210925A0210935F02009362
:102170005E021093890200938802D0928B02C09273
:102180008A0210938D0200938C02F0928E021092BC
:102190009402109293021092920210929102109364
:1021A000900200938F0280E190E00E944804909397
:1021B000870280938602DF91CF911F910F91FF904C
:1021C000DF90CF900895CF93DF93CDB7DEB76097C0
:1021D0000FB6F894DEBF0FBECDBF789484B5826091
:1021E00084BD84B5816084BD85B5826085BD85B5BB
:1021F000816085BD80916E00816080936E00109239
:1022000081008091810082608093810080918100B3
:102210008160809381008091800081608093800044
:102220008091B10084608093B1008091B0008160A2
:102230008093B00080917A00846080937A008091CE
:102240007A00826080937A0080917A008160809326
:102250007A0080917A00806880937A001092C100A1
:1022600088E091E00E94FF128C018AE091E0D801A1
:1022700011969C938E9387E691E013969C938E9390
:10228000129784E092E015969C938E931497F80130
:10229000EB5FFE4F10823196108231961082809152
:1022A0005401811115C08CED92E090934F01809301
:1022B0004E018DEA91E090935101809350018BEB98
:1022C00092E0909353018093520181E080935401F6
:1022D0008EE491E09A8389831C830B83CE0101965F
:1022E0000E948105CE0101960E94160410935D01A3
:1022F00000935C0161E08DE00E940D0161E08DE0E2
:102300000E94DF000E94780160E08DE00E94DF0003
:102310000E94780161E08DE00E94DF000E94780158
:1023200060E08DE00E94DF0060E08DE00E940D0122
:10233000D8011296ED91FC91A089B18982E08C932D
:10234000A485B5851C92A685B78580E18C93108EF7
:10235000A489B58986E08C93A289B3898C91806128
:102360008C93A289B3898C9188608C93A289B3895C
:102370008C9180688C930288F389E02D80818F7D19
:1023800080830E94780130E020E050E040E060EF80
:1023900070E0C8010E94E60280E0A82E80E0B82E1E
:1023A0006EE372E0CE0101960E946904F12CE12CEB
:1023B0008C859D85E816F90608F04FC0B701CE015F
:1023C00001960E940008FC011081612F84E092E0D8
:1023D0000E945B08DC018D919C910197D1F5812FC2
:1023E0000E94B600082F612F80E392E00E945A09F4
:1023F000FC018081081769F1612F80E392E00E945F
:102400005A09DC010C93D12CC12C8091910290913E
:102410009202C816D906E8F4B60186E892E00E9456
:10242000CF05188B21E0013009F020E02F87DC0177
:10243000ED91FC910480F581E02DAE01415F5F4F8D
:10244000BE01605F7F4F02960995BFEFCB1ADB0A92
:10245000DCCFEFEFEE1AFE0AABCFCE0101960E9461
:10246000A30900915C0110915D01D80112968D9134
:102470009C91DC01ED91FC910084F185E02D0995A2
:10248000892BA1F0F80182819381DC01ED91FC910F
:102490000284F385E02D0995D801ED91FC9101901E
:1024A000F081E02D682FC8010995DFCFA114B10498
:1024B00009F476CF0E941802882309F471CF0E9494
:1024C00000006ECF8091860290918702009731F0D4
:1024D0000E94B504109287021092860283E992E06E
:1024E0000E9416048091770290917802009711F073
:1024F0000E949B1389E692E00E94A3098CE492E07B
:102500000E94A3098EE392E00E94A3098091210218
:1025100090912202009711F00E949B1383E192E0B8
:102520000C94A309052E97FB1EF400940E94A91297
:1025300057FD07D00E94BC1207FC03D04EF40C9448
:10254000A91250954095309521953F4F4F4F5F4FC1
:10255000089590958095709561957F4F8F4F9F4F0F
:1025600008950E94DE12A59F900DB49F900DA49F28
:10257000800D911D11240895A1E21A2EAA1BBB1BE8
:10258000FD010DC0AA1FBB1FEE1FFF1FA217B3073F
:10259000E407F50720F0A21BB30BE40BF50B661F55
:1025A000771F881F991F1A9469F760957095809519
:1025B00090959B01AC01BD01CF010895A29FB00190
:1025C000B39FC001A39F700D811D1124911DB29F67
:1025D000700D811D1124911D0895991B79E004C08F
:1025E000991F961708F0961B881F7A95C9F7809552
:1025F0000895EE0FFF1F0590F491E02D09940F93BD
:102600001F93CF93DF938230910510F482E090E026
:10261000E0919F02F091A00230E020E0B0E0A0E065
:10262000309799F42115310509F44AC0281B390B5C
:1026300024303105D8F58A819B816115710589F1B6
:10264000FB0193838283FE0111C04081518102818D
:10265000138148175907E0F04817590799F4109764
:1026600061F012960C93129713961C933296CF0139
:10267000DF91CF911F910F91089500939F021093C6
:10268000A002F4CF2115310551F04217530738F05D
:10269000A901DB019A01BD01DF01F801C1CFEF0102
:1026A000F9CF9093A00280939F02CDCFFE01E20F5D
:1026B000F31F819391932250310939832883D7CF17
:1026C00020919D0230919E02232B41F42091020122
:1026D0003091030130939E0220939D0220910001CE
:1026E000309101012115310541F42DB73EB74091DC
:1026F000040150910501241B350BE0919D02F091DE
:102700009E02E217F307A0F42E1B3F0B2817390790
:1027100078F0AC014E5F5F4F2417350748F04E0F3D
:102720005F1F50939E0240939D02819391939FCF90
:10273000F0E0E0E09CCFCF93DF930097E9F0FC015D
:10274000329713821282A0919F02B091A002ED01F4
:1027500030E020E01097A1F420813181820F931F97
:1027600020919D0230919E022817390709F061C01F
:10277000F0939E02E0939D02DF91CF910895EA01CC
:10278000CE17DF07E8F54A815B819E0141155105AF
:10279000B1F7E901FB83EA8349915991C40FD51F31
:1027A000EC17FD0761F4808191810296840F951FDB
:1027B000E90199838883828193819B838A83F0E0F6
:1027C000E0E012968D919C9113970097B9F52D91A9
:1027D0003C911197CD010296820F931F20919D028B
:1027E00030919E022817390739F6309751F510922B
:1027F000A00210929F02B0939E02A0939D02BCCFB4
:10280000D383C28340815181840F951FC817D90794
:1028100061F44E5F5F4F88819981480F591F518342
:1028200040838A819B81938382832115310509F03E
:10283000B0CFF093A002E0939F029ECFFD01DC0198
:10284000C0CF13821282D7CF10E0C2E6D0E004C01E
:10285000FE010E94F9122196C336D107C9F7F894F8
:02286000FFCFA8
:102862000000A102800000000000C2039C0391034B
:10287200AB093903E602000000004E02AE01DB01A3
:082882009B020C02EA01FE01B9
:00000001FF

View File

@ -0,0 +1,4 @@
{
"firmwareFile": "firmware.hex",
"version": "0.0.2"
}

View File

@ -47,6 +47,7 @@
IntegrationPluginOwlet::IntegrationPluginOwlet()
{
}
void IntegrationPluginOwlet::init()
@ -56,7 +57,9 @@ void IntegrationPluginOwlet::init()
m_owletIdParamTypeMap.insert(ws2812ThingClassId, ws2812ThingOwletIdParamTypeId);
m_owletSerialPortParamTypeMap.insert(arduinoUnoThingClassId, arduinoUnoThingSerialPortParamTypeId);
m_owletSerialPortParamTypeMap.insert(arduinoMiniProThingClassId, arduinoMiniProThingSerialPortParamTypeId);
m_owletSerialPortParamTypeMap.insert(arduinoNanoThingClassId, arduinoNanoThingSerialPortParamTypeId);
m_owletSerialPortParamTypeMap.insert(arduinoMiniPro5VThingClassId, arduinoMiniPro5VThingSerialPortParamTypeId);
m_owletSerialPortParamTypeMap.insert(arduinoMiniPro3VThingClassId, arduinoMiniPro3VThingSerialPortParamTypeId);
m_zeroConfBrowser = hardwareManager()->zeroConfController()->createServiceBrowser("_nymea-owlet._tcp");
@ -89,36 +92,121 @@ void IntegrationPluginOwlet::init()
m_arduinoUnoPinMapping.insert(arduinoUnoSettingsPinA4ParamTypeId, 18);
m_arduinoUnoPinMapping.insert(arduinoUnoSettingsPinA5ParamTypeId, 19);
// Arduino Mini Pro mapping
m_arduinoMiniProPinMapping.insert(arduinoMiniProSettingsPin2ParamTypeId, 2);
m_arduinoMiniProPinMapping.insert(arduinoMiniProSettingsPin3ParamTypeId, 3);
m_arduinoMiniProPinMapping.insert(arduinoMiniProSettingsPin4ParamTypeId, 4);
m_arduinoMiniProPinMapping.insert(arduinoMiniProSettingsPin5ParamTypeId, 5);
m_arduinoMiniProPinMapping.insert(arduinoMiniProSettingsPin6ParamTypeId, 6);
m_arduinoMiniProPinMapping.insert(arduinoMiniProSettingsPin7ParamTypeId, 7);
m_arduinoMiniProPinMapping.insert(arduinoMiniProSettingsPin8ParamTypeId, 8);
m_arduinoMiniProPinMapping.insert(arduinoMiniProSettingsPin9ParamTypeId, 9);
m_arduinoMiniProPinMapping.insert(arduinoMiniProSettingsPin10ParamTypeId, 10);
m_arduinoMiniProPinMapping.insert(arduinoMiniProSettingsPin11ParamTypeId, 11);
m_arduinoMiniProPinMapping.insert(arduinoMiniProSettingsPin12ParamTypeId, 12);
m_arduinoMiniProPinMapping.insert(arduinoMiniProSettingsPin13ParamTypeId, 13);
m_arduinoMiniProPinMapping.insert(arduinoMiniProSettingsPinA1ParamTypeId, 15);
m_arduinoMiniProPinMapping.insert(arduinoMiniProSettingsPinA2ParamTypeId, 16);
m_arduinoMiniProPinMapping.insert(arduinoMiniProSettingsPinA3ParamTypeId, 17);
m_arduinoMiniProPinMapping.insert(arduinoMiniProSettingsPinA4ParamTypeId, 18);
m_arduinoMiniProPinMapping.insert(arduinoMiniProSettingsPinA5ParamTypeId, 19);
m_arduinoMiniProPinMapping.insert(arduinoMiniProSettingsPinA6ParamTypeId, 20);
m_arduinoMiniProPinMapping.insert(arduinoMiniProSettingsPinA7ParamTypeId, 21);
// Arduino Mini Pro 5V mapping
m_arduinoMiniPro5VPinMapping.insert(arduinoMiniPro5VSettingsPin2ParamTypeId, 2);
m_arduinoMiniPro5VPinMapping.insert(arduinoMiniPro5VSettingsPin3ParamTypeId, 3);
m_arduinoMiniPro5VPinMapping.insert(arduinoMiniPro5VSettingsPin4ParamTypeId, 4);
m_arduinoMiniPro5VPinMapping.insert(arduinoMiniPro5VSettingsPin5ParamTypeId, 5);
m_arduinoMiniPro5VPinMapping.insert(arduinoMiniPro5VSettingsPin6ParamTypeId, 6);
m_arduinoMiniPro5VPinMapping.insert(arduinoMiniPro5VSettingsPin7ParamTypeId, 7);
m_arduinoMiniPro5VPinMapping.insert(arduinoMiniPro5VSettingsPin8ParamTypeId, 8);
m_arduinoMiniPro5VPinMapping.insert(arduinoMiniPro5VSettingsPin9ParamTypeId, 9);
m_arduinoMiniPro5VPinMapping.insert(arduinoMiniPro5VSettingsPin10ParamTypeId, 10);
m_arduinoMiniPro5VPinMapping.insert(arduinoMiniPro5VSettingsPin11ParamTypeId, 11);
m_arduinoMiniPro5VPinMapping.insert(arduinoMiniPro5VSettingsPin12ParamTypeId, 12);
m_arduinoMiniPro5VPinMapping.insert(arduinoMiniPro5VSettingsPin13ParamTypeId, 13);
m_arduinoMiniPro5VPinMapping.insert(arduinoMiniPro5VSettingsPinA1ParamTypeId, 15);
m_arduinoMiniPro5VPinMapping.insert(arduinoMiniPro5VSettingsPinA2ParamTypeId, 16);
m_arduinoMiniPro5VPinMapping.insert(arduinoMiniPro5VSettingsPinA3ParamTypeId, 17);
m_arduinoMiniPro5VPinMapping.insert(arduinoMiniPro5VSettingsPinA4ParamTypeId, 18);
m_arduinoMiniPro5VPinMapping.insert(arduinoMiniPro5VSettingsPinA5ParamTypeId, 19);
m_arduinoMiniPro5VPinMapping.insert(arduinoMiniPro5VSettingsPinA6ParamTypeId, 20);
m_arduinoMiniPro5VPinMapping.insert(arduinoMiniPro5VSettingsPinA7ParamTypeId, 21);
// Arduino Mini Pro 3.3V mapping
m_arduinoMiniPro3VPinMapping.insert(arduinoMiniPro3VSettingsPin2ParamTypeId, 2);
m_arduinoMiniPro3VPinMapping.insert(arduinoMiniPro3VSettingsPin3ParamTypeId, 3);
m_arduinoMiniPro3VPinMapping.insert(arduinoMiniPro3VSettingsPin4ParamTypeId, 4);
m_arduinoMiniPro3VPinMapping.insert(arduinoMiniPro3VSettingsPin5ParamTypeId, 5);
m_arduinoMiniPro3VPinMapping.insert(arduinoMiniPro3VSettingsPin6ParamTypeId, 6);
m_arduinoMiniPro3VPinMapping.insert(arduinoMiniPro3VSettingsPin7ParamTypeId, 7);
m_arduinoMiniPro3VPinMapping.insert(arduinoMiniPro3VSettingsPin8ParamTypeId, 8);
m_arduinoMiniPro3VPinMapping.insert(arduinoMiniPro3VSettingsPin9ParamTypeId, 9);
m_arduinoMiniPro3VPinMapping.insert(arduinoMiniPro3VSettingsPin10ParamTypeId, 10);
m_arduinoMiniPro3VPinMapping.insert(arduinoMiniPro3VSettingsPin11ParamTypeId, 11);
m_arduinoMiniPro3VPinMapping.insert(arduinoMiniPro3VSettingsPin12ParamTypeId, 12);
m_arduinoMiniPro3VPinMapping.insert(arduinoMiniPro3VSettingsPin13ParamTypeId, 13);
m_arduinoMiniPro3VPinMapping.insert(arduinoMiniPro3VSettingsPinA1ParamTypeId, 15);
m_arduinoMiniPro3VPinMapping.insert(arduinoMiniPro3VSettingsPinA2ParamTypeId, 16);
m_arduinoMiniPro3VPinMapping.insert(arduinoMiniPro3VSettingsPinA3ParamTypeId, 17);
m_arduinoMiniPro3VPinMapping.insert(arduinoMiniPro3VSettingsPinA4ParamTypeId, 18);
m_arduinoMiniPro3VPinMapping.insert(arduinoMiniPro3VSettingsPinA5ParamTypeId, 19);
m_arduinoMiniPro3VPinMapping.insert(arduinoMiniPro3VSettingsPinA6ParamTypeId, 20);
m_arduinoMiniPro3VPinMapping.insert(arduinoMiniPro3VSettingsPinA7ParamTypeId, 21);
// Arduino Nano
m_arduinoNanoPinMapping.insert(arduinoNanoSettingsPin0ParamTypeId, 0);
m_arduinoNanoPinMapping.insert(arduinoNanoSettingsPin1ParamTypeId, 1);
m_arduinoNanoPinMapping.insert(arduinoNanoSettingsPin2ParamTypeId, 2);
m_arduinoNanoPinMapping.insert(arduinoNanoSettingsPin3ParamTypeId, 3);
m_arduinoNanoPinMapping.insert(arduinoNanoSettingsPin4ParamTypeId, 4);
m_arduinoNanoPinMapping.insert(arduinoNanoSettingsPin5ParamTypeId, 5);
m_arduinoNanoPinMapping.insert(arduinoNanoSettingsPin6ParamTypeId, 6);
m_arduinoNanoPinMapping.insert(arduinoNanoSettingsPin7ParamTypeId, 7);
m_arduinoNanoPinMapping.insert(arduinoNanoSettingsPin8ParamTypeId, 8);
m_arduinoNanoPinMapping.insert(arduinoNanoSettingsPin9ParamTypeId, 9);
m_arduinoNanoPinMapping.insert(arduinoNanoSettingsPin10ParamTypeId, 10);
m_arduinoNanoPinMapping.insert(arduinoNanoSettingsPin11ParamTypeId, 11);
m_arduinoNanoPinMapping.insert(arduinoNanoSettingsPin12ParamTypeId, 12);
m_arduinoNanoPinMapping.insert(arduinoNanoSettingsPin13ParamTypeId, 13);
m_arduinoNanoPinMapping.insert(arduinoNanoSettingsPinA0ParamTypeId, 14);
m_arduinoNanoPinMapping.insert(arduinoNanoSettingsPinA1ParamTypeId, 15);
m_arduinoNanoPinMapping.insert(arduinoNanoSettingsPinA2ParamTypeId, 16);
m_arduinoNanoPinMapping.insert(arduinoNanoSettingsPinA3ParamTypeId, 17);
m_arduinoNanoPinMapping.insert(arduinoNanoSettingsPinA4ParamTypeId, 18);
m_arduinoNanoPinMapping.insert(arduinoNanoSettingsPinA5ParamTypeId, 19);
m_arduinoNanoPinMapping.insert(arduinoNanoSettingsPinA6ParamTypeId, 20);
m_arduinoNanoPinMapping.insert(arduinoNanoSettingsPinA7ParamTypeId, 21);
}
void IntegrationPluginOwlet::discoverThings(ThingDiscoveryInfo *info)
{
if (info->thingClassId() == arduinoMiniProThingClassId) {
if (info->thingClassId() == arduinoMiniPro5VThingClassId) {
// Discover serial ports for arduino bords
foreach(const QSerialPortInfo &port, QSerialPortInfo::availablePorts()) {
qCDebug(dcOwlet()) << "Found serial port" << port.systemLocation() << port.description() << port.serialNumber();
QString description = port.systemLocation() + " " + port.manufacturer() + " " + port.description();
ThingDescriptor thingDescriptor(info->thingClassId(), "Arduino Pro Mini Owlet", description);
ThingDescriptor thingDescriptor(info->thingClassId(), "Arduino Pro Mini 5V Owlet", description);
ParamList parameters;
foreach (Thing *existingThing, myThings()) {
if (existingThing->paramValue(m_owletSerialPortParamTypeMap.value(info->thingClassId())).toString() == port.systemLocation()) {
thingDescriptor.setThingId(existingThing->id());
break;
}
}
parameters.append(Param(m_owletSerialPortParamTypeMap.value(info->thingClassId()), port.systemLocation()));
thingDescriptor.setParams(parameters);
info->addThingDescriptor(thingDescriptor);
}
info->finish(Thing::ThingErrorNoError);
} else if (info->thingClassId() == arduinoMiniPro3VThingClassId) {
// Discover serial ports for arduino bords
foreach(const QSerialPortInfo &port, QSerialPortInfo::availablePorts()) {
qCDebug(dcOwlet()) << "Found serial port" << port.systemLocation() << port.description() << port.serialNumber();
QString description = port.systemLocation() + " " + port.manufacturer() + " " + port.description();
ThingDescriptor thingDescriptor(info->thingClassId(), "Arduino Pro Mini 3.3V Owlet", description);
ParamList parameters;
foreach (Thing *existingThing, myThings()) {
if (existingThing->paramValue(m_owletSerialPortParamTypeMap.value(info->thingClassId())).toString() == port.systemLocation()) {
thingDescriptor.setThingId(existingThing->id());
break;
}
}
parameters.append(Param(m_owletSerialPortParamTypeMap.value(info->thingClassId()), port.systemLocation()));
thingDescriptor.setParams(parameters);
info->addThingDescriptor(thingDescriptor);
}
info->finish(Thing::ThingErrorNoError);
} else if (info->thingClassId() == arduinoNanoThingClassId) {
// Discover serial ports for arduino bords
foreach(const QSerialPortInfo &port, QSerialPortInfo::availablePorts()) {
qCDebug(dcOwlet()) << "Found serial port" << port.systemLocation() << port.description() << port.serialNumber();
QString description = port.systemLocation() + " " + port.manufacturer() + " " + port.description();
ThingDescriptor thingDescriptor(info->thingClassId(), "Arduino Nano Owlet", description);
ParamList parameters;
foreach (Thing *existingThing, myThings()) {
@ -173,9 +261,9 @@ void IntegrationPluginOwlet::setupThing(ThingSetupInfo *info)
{
Thing *thing = info->thing();
if (thing->thingClassId() == arduinoMiniProThingClassId) {
QString serialPort = thing->paramValue(arduinoMiniProThingSerialPortParamTypeId).toString();
qCDebug(dcOwlet()) << "Setup arduino mini pro owlet on" << serialPort;
if (thing->thingClassId() == arduinoUnoThingClassId) {
QString serialPort = thing->paramValue(arduinoUnoThingSerialPortParamTypeId).toString();
qCDebug(dcOwlet()) << "Setup Arduino UNO owlet on" << serialPort;
OwletTransport *transport = new OwletSerialTransport(serialPort, 115200, this);
OwletSerialClient *client = new OwletSerialClient(transport, transport);
@ -193,7 +281,7 @@ void IntegrationPluginOwlet::setupThing(ThingSetupInfo *info)
// Runtime
connect(client, &OwletSerialClient::connected, thing, [=](){
thing->setStateValue("connected", true);
thing->setStateValue(arduinoMiniProCurrentVersionStateTypeId, client->firmwareVersion());
thing->setStateValue(arduinoUnoCurrentVersionStateTypeId, client->firmwareVersion());
foreach (Thing *childThing, myThings().filterByParentId(thing->id())) {
childThing->setStateValue("connected", true);
}
@ -207,8 +295,8 @@ void IntegrationPluginOwlet::setupThing(ThingSetupInfo *info)
});
connect(thing, &Thing::settingChanged, thing, [=](const ParamTypeId &paramTypeId, const QVariant &value){
qCDebug(dcOwlet()) << "Arduino Mini Pro settings changed" << paramTypeId << value;
quint8 pinId = m_arduinoMiniProPinMapping.value(paramTypeId);
qCDebug(dcOwlet()) << "Arduino UNO settings changed" << paramTypeId << value;
quint8 pinId = m_arduinoUnoPinMapping.value(paramTypeId);
OwletSerialClient::PinMode pinMode = getPinModeFromSettingsValue(value.toString());
// Check if we have a thing for this pin and if we need to remove it before setting up
@ -248,10 +336,9 @@ void IntegrationPluginOwlet::setupThing(ThingSetupInfo *info)
return;
}
if (thing->thingClassId() == arduinoUnoThingClassId) {
QString serialPort = thing->paramValue(arduinoUnoThingSerialPortParamTypeId).toString();
qCDebug(dcOwlet()) << "Setup arduino uno owlet on" << serialPort;
if (thing->thingClassId() == arduinoNanoThingClassId) {
QString serialPort = thing->paramValue(arduinoNanoThingSerialPortParamTypeId).toString();
qCDebug(dcOwlet()) << "Setup Arduino Nano owlet on" << serialPort;
OwletTransport *transport = new OwletSerialTransport(serialPort, 115200, this);
OwletSerialClient *client = new OwletSerialClient(transport, transport);
@ -269,7 +356,7 @@ void IntegrationPluginOwlet::setupThing(ThingSetupInfo *info)
// Runtime
connect(client, &OwletSerialClient::connected, thing, [=](){
thing->setStateValue("connected", true);
thing->setStateValue(arduinoUnoCurrentVersionStateTypeId, client->firmwareVersion());
thing->setStateValue(arduinoNanoCurrentVersionStateTypeId, client->firmwareVersion());
foreach (Thing *childThing, myThings().filterByParentId(thing->id())) {
childThing->setStateValue("connected", true);
}
@ -283,8 +370,158 @@ void IntegrationPluginOwlet::setupThing(ThingSetupInfo *info)
});
connect(thing, &Thing::settingChanged, thing, [=](const ParamTypeId &paramTypeId, const QVariant &value){
qCDebug(dcOwlet()) << "Arduino UNO settings changed" << paramTypeId << value;
quint8 pinId = m_arduinoUnoPinMapping.value(paramTypeId);
qCDebug(dcOwlet()) << "Arduino Nano settings changed" << paramTypeId << value;
quint8 pinId = m_arduinoNanoPinMapping.value(paramTypeId);
OwletSerialClient::PinMode pinMode = getPinModeFromSettingsValue(value.toString());
// Check if we have a thing for this pin and if we need to remove it before setting up
Thing *existingThing = nullptr;
foreach (Thing *childThing, myThings().filterByParentId(thing->id())) {
int existingPinId = childThing->paramValue(m_owletSerialPinParamTypeMap.value(childThing->thingClassId())).toUInt();
if (existingPinId == pinId) {
qCDebug(dcOwlet()) << "Found already configured thing for pin" << pinId;
existingThing = childThing;
break;
}
}
if (existingThing) {
if ((pinMode == OwletSerialClient::PinModeDigitalOutput && existingThing->thingClassId() == digitalOutputSerialThingClassId) ||
(pinMode == OwletSerialClient::PinModeDigitalInput && existingThing->thingClassId() == digitalInputSerialThingClassId) ||
(pinMode == OwletSerialClient::PinModeAnalogOutput && existingThing->thingClassId() == analogOutputSerialThingClassId) ||
(pinMode == OwletSerialClient::PinModeAnalogInput && existingThing->thingClassId() == analogInputSerialThingClassId) ||
(pinMode == OwletSerialClient::PinModeServo && existingThing->thingClassId() == servoSerialThingClassId)) {
qCDebug(dcOwlet()) << "Thing for pin" << pinId << "is already configured as" << pinMode;
return;
} else {
qCDebug(dcOwlet()) << "Have thing for pin" << pinId << "but should be configured as" << pinMode;
qCDebug(dcOwlet()) << "Remove existing thing before setup a new one";
emit autoThingDisappeared(existingThing->id());
}
}
setupArduinoChildThing(client, pinId, pinMode);
});
m_serialClients.insert(thing, client);
info->finish(Thing::ThingErrorNoError);
client->transport()->connectTransport();
return;
}
if (thing->thingClassId() == arduinoMiniPro5VThingClassId) {
QString serialPort = thing->paramValue(arduinoMiniPro5VThingSerialPortParamTypeId).toString();
qCDebug(dcOwlet()) << "Setup Arduino Mini Pro 5V owlet on" << serialPort;
OwletTransport *transport = new OwletSerialTransport(serialPort, 115200, this);
OwletSerialClient *client = new OwletSerialClient(transport, transport);
// During setup
connect(client, &OwletSerialClient::connected, info, [=](){
qCDebug(dcOwlet()) << "Connected to serial owlet" << client->firmwareVersion();
thing->setStateValue("connected", true);
});
connect(client, &OwletSerialClient::error, info, [=](){
//info->finish(Thing::ThingErrorHardwareFailure);
transport->deleteLater();
});
// Runtime
connect(client, &OwletSerialClient::connected, thing, [=](){
thing->setStateValue("connected", true);
thing->setStateValue(arduinoMiniPro5VCurrentVersionStateTypeId, client->firmwareVersion());
foreach (Thing *childThing, myThings().filterByParentId(thing->id())) {
childThing->setStateValue("connected", true);
}
});
connect(client, &OwletSerialClient::disconnected, thing, [=](){
thing->setStateValue("connected", false);
foreach (Thing *childThing, myThings().filterByParentId(thing->id())) {
childThing->setStateValue("connected", false);
}
});
connect(thing, &Thing::settingChanged, thing, [=](const ParamTypeId &paramTypeId, const QVariant &value){
qCDebug(dcOwlet()) << "Arduino Mini Pro 5V settings changed" << paramTypeId << value;
quint8 pinId = m_arduinoMiniPro5VPinMapping.value(paramTypeId);
OwletSerialClient::PinMode pinMode = getPinModeFromSettingsValue(value.toString());
// Check if we have a thing for this pin and if we need to remove it before setting up
Thing *existingThing = nullptr;
foreach (Thing *childThing, myThings().filterByParentId(thing->id())) {
int existingPinId = childThing->paramValue(m_owletSerialPinParamTypeMap.value(childThing->thingClassId())).toUInt();
if (existingPinId == pinId) {
qCDebug(dcOwlet()) << "Found already configured thing for pin" << pinId;
existingThing = childThing;
break;
}
}
if (existingThing) {
if ((pinMode == OwletSerialClient::PinModeDigitalOutput && existingThing->thingClassId() == digitalOutputSerialThingClassId) ||
(pinMode == OwletSerialClient::PinModeDigitalInput && existingThing->thingClassId() == digitalInputSerialThingClassId) ||
(pinMode == OwletSerialClient::PinModeAnalogOutput && existingThing->thingClassId() == analogOutputSerialThingClassId) ||
(pinMode == OwletSerialClient::PinModeAnalogInput && existingThing->thingClassId() == analogInputSerialThingClassId) ||
(pinMode == OwletSerialClient::PinModeServo && existingThing->thingClassId() == servoSerialThingClassId)) {
qCDebug(dcOwlet()) << "Thing for pin" << pinId << "is already configured as" << pinMode;
return;
} else {
qCDebug(dcOwlet()) << "Have thing for pin" << pinId << "but should be configured as" << pinMode;
qCDebug(dcOwlet()) << "Remove existing thing before setup a new one";
emit autoThingDisappeared(existingThing->id());
}
}
setupArduinoChildThing(client, pinId, pinMode);
});
m_serialClients.insert(thing, client);
info->finish(Thing::ThingErrorNoError);
client->transport()->connectTransport();
return;
}
if (thing->thingClassId() == arduinoMiniPro3VThingClassId) {
QString serialPort = thing->paramValue(arduinoMiniPro3VThingSerialPortParamTypeId).toString();
qCDebug(dcOwlet()) << "Setup Arduino Mini Pro 3.3V owlet on" << serialPort;
OwletTransport *transport = new OwletSerialTransport(serialPort, 115200, this);
OwletSerialClient *client = new OwletSerialClient(transport, transport);
// During setup
connect(client, &OwletSerialClient::connected, info, [=](){
qCDebug(dcOwlet()) << "Connected to serial owlet" << client->firmwareVersion();
thing->setStateValue("connected", true);
});
connect(client, &OwletSerialClient::error, info, [=](){
//info->finish(Thing::ThingErrorHardwareFailure);
transport->deleteLater();
});
// Runtime
connect(client, &OwletSerialClient::connected, thing, [=](){
thing->setStateValue("connected", true);
thing->setStateValue(arduinoMiniPro3VCurrentVersionStateTypeId, client->firmwareVersion());
foreach (Thing *childThing, myThings().filterByParentId(thing->id())) {
childThing->setStateValue("connected", true);
}
});
connect(client, &OwletSerialClient::disconnected, thing, [=](){
thing->setStateValue("connected", false);
foreach (Thing *childThing, myThings().filterByParentId(thing->id())) {
childThing->setStateValue("connected", false);
}
});
connect(thing, &Thing::settingChanged, thing, [=](const ParamTypeId &paramTypeId, const QVariant &value){
qCDebug(dcOwlet()) << "Arduino Mini Pro 3.3V settings changed" << paramTypeId << value;
quint8 pinId = m_arduinoMiniPro3VPinMapping.value(paramTypeId);
OwletSerialClient::PinMode pinMode = getPinModeFromSettingsValue(value.toString());
// Check if we have a thing for this pin and if we need to remove it before setting up
@ -746,30 +983,6 @@ void IntegrationPluginOwlet::executeAction(ThingActionInfo *info)
return;
}
if (info->thing()->thingClassId() == arduinoMiniProThingClassId) {
OwletSerialClient *client = m_serialClients.value(info->thing());
if (!client) {
qCWarning(dcOwlet()) << "Could not execute action. There is no client available for this thing";
info->finish(Thing::ThingErrorHardwareFailure);
return;
}
if (!client->isReady()) {
qCWarning(dcOwlet()) << "Could not execute action. The serial client is not ready or connected.";
info->finish(Thing::ThingErrorHardwareNotAvailable);
return;
}
if (info->action().actionTypeId() == arduinoMiniProPerformUpdateActionTypeId) {
qCDebug(dcOwlet()) << "Perform firmware update on" << info->thing();
//if (client->firmwareVersion() != )
// TODO: run upgrade process using avrdude
info->finish(Thing::ThingErrorNoError);
return;
}
}
if (info->thing()->thingClassId() == arduinoUnoThingClassId) {
OwletSerialClient *client = m_serialClients.value(info->thing());
if (!client) {
@ -794,6 +1007,78 @@ void IntegrationPluginOwlet::executeAction(ThingActionInfo *info)
}
}
if (info->thing()->thingClassId() == arduinoNanoThingClassId) {
OwletSerialClient *client = m_serialClients.value(info->thing());
if (!client) {
qCWarning(dcOwlet()) << "Could not execute action. There is no client available for this thing";
info->finish(Thing::ThingErrorHardwareFailure);
return;
}
if (!client->isReady()) {
qCWarning(dcOwlet()) << "Could not execute action. The serial client is not ready or connected.";
info->finish(Thing::ThingErrorHardwareNotAvailable);
return;
}
if (info->action().actionTypeId() == arduinoNanoPerformUpdateActionTypeId) {
qCDebug(dcOwlet()) << "Perform firmware update on" << info->thing();
//if (client->firmwareVersion() != )
// TODO: run upgrade process using avrdude
info->finish(Thing::ThingErrorNoError);
return;
}
}
if (info->thing()->thingClassId() == arduinoMiniPro5VThingClassId) {
OwletSerialClient *client = m_serialClients.value(info->thing());
if (!client) {
qCWarning(dcOwlet()) << "Could not execute action. There is no client available for this thing";
info->finish(Thing::ThingErrorHardwareFailure);
return;
}
if (!client->isReady()) {
qCWarning(dcOwlet()) << "Could not execute action. The serial client is not ready or connected.";
info->finish(Thing::ThingErrorHardwareNotAvailable);
return;
}
if (info->action().actionTypeId() == arduinoMiniPro5VPerformUpdateActionTypeId) {
qCDebug(dcOwlet()) << "Perform firmware update on" << info->thing();
//if (client->firmwareVersion() != )
// TODO: run upgrade process using avrdude
info->finish(Thing::ThingErrorNoError);
return;
}
}
if (info->thing()->thingClassId() == arduinoMiniPro3VThingClassId) {
OwletSerialClient *client = m_serialClients.value(info->thing());
if (!client) {
qCWarning(dcOwlet()) << "Could not execute action. There is no client available for this thing";
info->finish(Thing::ThingErrorHardwareFailure);
return;
}
if (!client->isReady()) {
qCWarning(dcOwlet()) << "Could not execute action. The serial client is not ready or connected.";
info->finish(Thing::ThingErrorHardwareNotAvailable);
return;
}
if (info->action().actionTypeId() == arduinoMiniPro3VPerformUpdateActionTypeId) {
qCDebug(dcOwlet()) << "Perform firmware update on" << info->thing();
//if (client->firmwareVersion() != )
// TODO: run upgrade process using avrdude
info->finish(Thing::ThingErrorNoError);
return;
}
}
if (info->thing()->thingClassId() == analogOutputSerialThingClassId) {
OwletSerialClient *client = m_serialClients.value(myThings().findById(info->thing()->parentId()));
if (!client) {
@ -954,7 +1239,13 @@ void IntegrationPluginOwlet::executeAction(ThingActionInfo *info)
void IntegrationPluginOwlet::thingRemoved(Thing *thing)
{
if (thing->thingClassId() == arduinoMiniProThingClassId && m_serialClients.contains(thing)) {
if (thing->thingClassId() == arduinoMiniPro5VThingClassId && m_serialClients.contains(thing)) {
m_serialClients.take(thing)->deleteLater();
} else if (thing->thingClassId() == arduinoMiniPro3VThingClassId && m_serialClients.contains(thing)) {
m_serialClients.take(thing)->deleteLater();
} else if (thing->thingClassId() == arduinoUnoThingClassId && m_serialClients.contains(thing)) {
m_serialClients.take(thing)->deleteLater();
} else if (thing->thingClassId() == arduinoNanoThingClassId && m_serialClients.contains(thing)) {
m_serialClients.take(thing)->deleteLater();
}
}
@ -1087,8 +1378,12 @@ QString IntegrationPluginOwlet::getPinName(Thing *parent, quint8 pinId)
{
if (parent->thingClassId() == arduinoUnoThingClassId) {
return parent->thingClass().settingsTypes().findById(m_arduinoUnoPinMapping.key(pinId)).displayName();
} else if (parent->thingClassId() == arduinoMiniProThingClassId) {
return parent->thingClass().settingsTypes().findById(m_arduinoMiniProPinMapping.key(pinId)).displayName();
} else if (parent->thingClassId() == arduinoMiniPro5VThingClassId) {
return parent->thingClass().settingsTypes().findById(m_arduinoMiniPro5VPinMapping.key(pinId)).displayName();
} else if (parent->thingClassId() == arduinoMiniPro3VThingClassId) {
return parent->thingClass().settingsTypes().findById(m_arduinoMiniPro3VPinMapping.key(pinId)).displayName();
} else if (parent->thingClassId() == arduinoNanoThingClassId) {
return parent->thingClass().settingsTypes().findById(m_arduinoNanoPinMapping.key(pinId)).displayName();
}
return QString();

View File

@ -68,7 +68,9 @@ private:
QHash<ThingClassId, ParamTypeId> m_owletSerialPinParamTypeMap;
QHash<ParamTypeId, quint8> m_arduinoUnoPinMapping;
QHash<ParamTypeId, quint8> m_arduinoMiniProPinMapping;
QHash<ParamTypeId, quint8> m_arduinoMiniPro5VPinMapping;
QHash<ParamTypeId, quint8> m_arduinoMiniPro3VPinMapping;
QHash<ParamTypeId, quint8> m_arduinoNanoPinMapping;
OwletSerialClient::PinMode getPinModeFromSettingsValue(const QString &settingsValue);
void setupArduinoChildThing(OwletSerialClient *client, quint8 pinId, OwletSerialClient::PinMode pinMode);

View File

@ -543,8 +543,8 @@
},
{
"id": "22f216f4-9715-48f9-ab76-f7d7436d49c9",
"name": "arduinoMiniPro",
"displayName": "Arduino Pro Mini Owlet",
"name": "arduinoMiniPro5V",
"displayName": "Arduino Pro Mini 5V Owlet",
"createMethods": ["user", "discovery"],
"interfaces": ["gateway", "update", "connectable"],
"paramTypes": [
@ -849,6 +849,661 @@
}
]
},
{
"id": "851e3edb-91f5-4a9b-82ee-ce8b0c140f63",
"name": "arduinoMiniPro3V",
"displayName": "Arduino Pro Mini 3.3V Owlet",
"createMethods": ["user", "discovery"],
"interfaces": ["gateway", "update", "connectable"],
"paramTypes": [
{
"id": "bb177b49-f601-4afe-9107-3273622efaf3",
"name": "serialPort",
"displayName": "Serial port",
"type": "QString",
"inputType": "TextLine",
"defaultValue": "/dev/ttyS0"
},
{
"id": "f953d32a-72d6-4e69-b784-00aaa590307f",
"name": "resetGpio",
"displayName": "Reset GPIO",
"type": "uint",
"defaultValue": 18
}
],
"settingsTypes": [
{
"id": "52ec2ef1-2eb8-4249-a968-31851fc1ffb0",
"name": "pin2",
"displayName": "Pin 2",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output"
],
"defaultValue": "None"
},
{
"id": "e810eeeb-46db-453e-9526-b66632183184",
"name": "pin3",
"displayName": "Pin 3",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output",
"PWM",
"Servo"
],
"defaultValue": "None"
},
{
"id": "4d8df173-bcc5-4965-8163-b3b178d7ecc3",
"name": "pin4",
"displayName": "Pin 4",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output"
],
"defaultValue": "None"
},
{
"id": "c59494c0-b5b3-4fdc-9efa-3c7d8981bc69",
"name": "pin5",
"displayName": "Pin 5",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output",
"PWM",
"Servo"
],
"defaultValue": "None"
},
{
"id": "cb908496-e638-4280-999a-517723855078",
"name": "pin6",
"displayName": "Pin 6",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output",
"PWM",
"Servo"
],
"defaultValue": "None"
},
{
"id": "3ea774fd-1548-4b49-96c8-57b7d444319c",
"name": "pin7",
"displayName": "Pin 7",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output"
],
"defaultValue": "None"
},
{
"id": "68af1181-482c-4c6c-abe0-29f3665dada3",
"name": "pin8",
"displayName": "Pin 8",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output"
],
"defaultValue": "None"
},
{
"id": "0b1d1fd6-d4fc-47d2-8023-a7dfbff69684",
"name": "pin9",
"displayName": "Pin 9",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output",
"PWM",
"Servo"
],
"defaultValue": "None"
},
{
"id": "96501a1a-360f-4704-bcd5-97219fcc24c5",
"name": "pin10",
"displayName": "Pin 10",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output",
"PWM",
"Servo"
],
"defaultValue": "None"
},
{
"id": "8a57d186-d55d-405d-a2ad-58b9a7113250",
"name": "pin11",
"displayName": "Pin 11",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output",
"PWM",
"Servo"
],
"defaultValue": "None"
},
{
"id": "2c2cf54c-7463-4b10-b360-65aa6d74dc5d",
"name": "pin12",
"displayName": "Pin 12",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output"
],
"defaultValue": "None"
},
{
"id": "a99af2d8-4195-48f1-a85d-59de7f8575ca",
"name": "pin13",
"displayName": "Pin 13 - LED",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output"
],
"defaultValue": "None"
},
{
"id": "3211da31-2765-41ce-ad57-09db29e67d92",
"name": "pinA1",
"displayName": "Pin A1",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output",
"Analog Input"
],
"defaultValue": "None"
},
{
"id": "69022223-6e8e-4900-8cb3-2027c1dff0e4",
"name": "pinA2",
"displayName": "Pin A2",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output",
"Analog Input"
],
"defaultValue": "None"
},
{
"id": "91a121c5-4bae-490f-be3d-45aca3a08153",
"name": "pinA3",
"displayName": "Pin A3",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output",
"Analog Input"
],
"defaultValue": "None"
},
{
"id": "19e712be-8da8-4bd9-ad47-aa7ebe8a2750",
"name": "pinA4",
"displayName": "Pin A4",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output",
"Analog Input"
],
"defaultValue": "None"
},
{
"id": "82d02472-ec98-4824-a2b4-eb61acb08bc6",
"name": "pinA5",
"displayName": "Pin A5",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output",
"Analog Input"
],
"defaultValue": "None"
},
{
"id": "e57824d7-5718-4718-bbf0-daf364eb0881",
"name": "pinA6",
"displayName": "Pin A6",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output",
"Analog Input"
],
"defaultValue": "None"
},
{
"id": "836f26f1-3b5a-444e-8ebd-30e05aa08293",
"name": "pinA7",
"displayName": "Pin A7",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output",
"Analog Input"
],
"defaultValue": "None"
}
],
"stateTypes": [
{
"id": "5092d770-b1f1-491b-ab4d-261f7e9d28f6",
"name": "connected",
"displayName": "Connected",
"displayNameEvent": "Connected changed",
"type": "bool",
"defaultValue": false,
"cached": false
},
{
"id": "97e4757f-f12b-411c-9d12-4385c624da41",
"name": "currentVersion",
"displayName": "Firmware version",
"displayNameEvent": "Firmware version changed",
"type": "QString",
"defaultValue": ""
},
{
"id": "877a41fa-28f9-4e55-aef1-1578d8144f11",
"name": "updateStatus",
"displayName": "Update status",
"displayNameEvent": "Update status changed",
"type": "QString",
"possibleValues": ["idle", "available", "updating"],
"defaultValue": "idle"
}
],
"actionTypes": [
{
"id": "c4725773-b51f-48c1-9b83-65c64d44c8d8",
"name": "performUpdate",
"displayName": "Update firmware"
}
]
},
{
"id": "08320505-4247-4afb-90f8-ec7cba4988dc",
"name": "arduinoNano",
"displayName": "Arduino Nano Owlet",
"createMethods": ["user", "discovery"],
"interfaces": ["gateway", "update", "connectable"],
"paramTypes": [
{
"id": "59659d72-ed74-4a0e-8bcd-0d383da0c66e",
"name": "serialPort",
"displayName": "Serial port",
"type": "QString",
"inputType": "TextLine",
"defaultValue": "/dev/ttyS0"
}
],
"settingsTypes": [
{
"id": "5bea8e92-4549-4fab-8094-b385233e1674",
"name": "pin0",
"displayName": "D0 - RX",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output",
"Servo"
],
"defaultValue": "None"
},
{
"id": "9989f40b-f74c-4af9-bf3c-e06aadf61f33",
"name": "pin1",
"displayName": "D1 - TX",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output",
"Servo"
],
"defaultValue": "None"
},
{
"id": "92fb8412-fd61-4217-8e9b-29129c99e28f",
"name": "pin2",
"displayName": "D2",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output",
"Servo"
],
"defaultValue": "None"
},
{
"id": "d535b1be-91ac-4f39-a4b8-e68cb2913e19",
"name": "pin3",
"displayName": "D3",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output",
"PWM",
"Servo"
],
"defaultValue": "None"
},
{
"id": "5a3cbfda-5f49-4165-b9a8-cb7c63700396",
"name": "pin4",
"displayName": "D4",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output",
"Servo"
],
"defaultValue": "None"
},
{
"id": "3aae34ae-4603-42dc-a37d-a2bfaff50a9d",
"name": "pin5",
"displayName": "D5",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output",
"PWM",
"Servo"
],
"defaultValue": "None"
},
{
"id": "0d41ebd4-9968-48d4-847d-838c4516cb5b",
"name": "pin6",
"displayName": "D6",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output",
"PWM",
"Servo"
],
"defaultValue": "None"
},
{
"id": "6126783c-fcd7-4a47-833b-ae7b1a0d38d7",
"name": "pin7",
"displayName": "D7",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output",
"Servo"
],
"defaultValue": "None"
},
{
"id": "c0110e6d-0447-4c1e-ba47-1076d368f910",
"name": "pin8",
"displayName": "D8",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output",
"Servo"
],
"defaultValue": "None"
},
{
"id": "ccb92f37-85aa-49ba-b23a-841a3e62f6f9",
"name": "pin9",
"displayName": "D9",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output",
"PWM",
"Servo"
],
"defaultValue": "None"
},
{
"id": "eafd8726-b379-44a7-8045-b92b1277223e",
"name": "pin10",
"displayName": "D10",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output",
"PWM",
"Servo"
],
"defaultValue": "None"
},
{
"id": "12c5a481-6358-485a-9f2e-bf15c73b92a6",
"name": "pin11",
"displayName": "D11",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output",
"PWM",
"Servo"
],
"defaultValue": "None"
},
{
"id": "f662e8ee-1e3e-4549-bbe1-853b096687e4",
"name": "pin12",
"displayName": "D12",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output",
"Servo"
],
"defaultValue": "None"
},
{
"id": "6169b8db-0041-4404-a569-62fe65dad7a7",
"name": "pin13",
"displayName": "D13 - LED",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output",
"Servo"
],
"defaultValue": "None"
},
{
"id": "d6792750-e6b2-4114-a920-fdd58af26add",
"name": "pinA0",
"displayName": "A0",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output",
"Analog Input",
"Servo"
],
"defaultValue": "None"
},
{
"id": "20ca17fd-8717-40f8-8d01-89f78d275919",
"name": "pinA1",
"displayName": "A1",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output",
"Analog Input"
],
"defaultValue": "None"
},
{
"id": "16571039-7c64-41e6-baaa-65670170341d",
"name": "pinA2",
"displayName": "A2",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output",
"Analog Input"
],
"defaultValue": "None"
},
{
"id": "eb3f6de3-c953-4881-a86f-68725d481246",
"name": "pinA3",
"displayName": "A3",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output",
"Analog Input"
],
"defaultValue": "None"
},
{
"id": "1d89e5f1-089e-4d17-aa6b-7dba1f12c622",
"name": "pinA4",
"displayName": "A4",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output",
"Analog Input"
],
"defaultValue": "None"
},
{
"id": "34745f25-551e-49c0-8af4-c4724884a220",
"name": "pinA5",
"displayName": "A5",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output",
"Analog Input"
],
"defaultValue": "None"
},
{
"id": "37b6d1ff-5bbc-4f77-9f40-6d4e237d7fcd",
"name": "pinA6",
"displayName": "A6",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output",
"Analog Input"
],
"defaultValue": "None"
},
{
"id": "dc4ce0d4-9544-4aaf-8834-d936a3336449",
"name": "pinA7",
"displayName": "A7",
"type": "QString",
"allowedValues": [
"None",
"Input",
"Output",
"Analog Input"
],
"defaultValue": "None"
}
],
"stateTypes": [
{
"id": "e3821856-b4db-4306-b6ca-8d72ca38803f",
"name": "connected",
"displayName": "Connected",
"displayNameEvent": "Connected changed",
"type": "bool",
"defaultValue": false,
"cached": false
},
{
"id": "55f54f1c-7545-4138-b20a-d07fd706ff9e",
"name": "currentVersion",
"displayName": "Firmware version",
"displayNameEvent": "Firmware version changed",
"type": "QString",
"defaultValue": ""
},
{
"id": "bbf9cae1-6272-488e-8664-a1b08bd402eb",
"name": "updateStatus",
"displayName": "Update status",
"displayNameEvent": "Update status changed",
"type": "QString",
"possibleValues": ["idle", "available", "updating"],
"defaultValue": "idle"
}
],
"actionTypes": [
{
"id": "a9f3a645-8ece-4692-928f-093fd51c53e2",
"name": "performUpdate",
"displayName": "Update firmware"
}
]
},
{
"id": "43aca5c1-3972-49ae-b21f-4d1486942e1f",
"displayName": "Digital GPIO output on owlet",
@ -1039,6 +1694,7 @@
"displayNameEvent": "Angle changed",
"displayNameAction": "Set angle",
"type": "uint",
"unit": "Degree",
"minValue": 0,
"maxValue": 180,
"defaultValue": 0,

9
owlet/meta.json Normal file
View File

@ -0,0 +1,9 @@
{
"title": "Owlet",
"tagline": "Allows using microcontroller pins of various microcontrollers with nymea",
"icon": "",
"stability": "community",
"offline": true,
"technologies": ["Serial Port", "Network"],
"categories": ["Sensor", "Relay", "Switch", "Gateway"]
}

View File

@ -3,6 +3,7 @@ include(../plugins.pri)
QT += network serialport
SOURCES += \
arduinoflasher.cpp \
integrationpluginowlet.cpp \
owletclient.cpp \
owletserialclient.cpp \
@ -11,6 +12,7 @@ SOURCES += \
owlettransport.cpp
HEADERS += \
arduinoflasher.h \
integrationpluginowlet.h \
owletclient.h \
owletserialclient.h \