From 71f4156c9c146d2f5bd1827d9d384cd043f6df38 Mon Sep 17 00:00:00 2001 From: solosky Date: Wed, 25 Sep 2024 22:41:08 +0800 Subject: [PATCH 1/6] fixed #273: Fix Splatoon 3 Alterna and Side Order --- fw/application/src/amiidb/db_amiibo.c | 6 +- fw/application/src/amiidb/db_link.c | 6 +- .../src/mui/u8g2_font_wqy12_t_gb2312a.c | 2561 ++++++++--------- fw/data/amiidb_amiibo.csv | 6 +- fw/data/amiidb_link.csv | 6 +- 5 files changed, 1284 insertions(+), 1301 deletions(-) diff --git a/fw/application/src/amiidb/db_amiibo.c b/fw/application/src/amiidb/db_amiibo.c index 3a08c0ac..665491ca 100644 --- a/fw/application/src/amiidb/db_amiibo.c +++ b/fw/application/src/amiidb/db_amiibo.c @@ -135,9 +135,9 @@ const db_amiibo_t amiibo_list[] = { {0x08090000, 0x04350402, "Big Man", "鬼福"}, {0x08060100, 0x041c0402, "Smallfry", "小鲑鱼"}, {0x08010000, 0x04360402, "Callie - Alterna", "小拟 - 幻界"}, -{0x08020200, 0x04370402, "Marie - Alterna", "小萤 - 幻界"}, -{0x08030100, 0x04380402, "Pearl - Side Order", "小姬 - 秩序篇"}, -{0x08040100, 0x04390402, "Marina - Side Order", "饭田 - 秩序篇"}, +{0x08020000, 0x04370402, "Marie - Alterna", "小萤 - 幻界"}, +{0x08030000, 0x04380402, "Pearl - Side Order", "小姬 - 秩序篇"}, +{0x08040000, 0x04390402, "Marina - Side Order", "饭田 - 秩序篇"}, {0x00240000, 0x038d0002, "Piranha Plant", "吞食花"}, {0x00c00000, 0x037b0002, "King K. Rool", "库鲁鲁王"}, {0x01810000, 0x037d0002, "Isabelle", "西施惠"}, diff --git a/fw/application/src/amiidb/db_link.c b/fw/application/src/amiidb/db_link.c index 741cda65..155cb1b2 100644 --- a/fw/application/src/amiidb/db_link.c +++ b/fw/application/src/amiidb/db_link.c @@ -149,9 +149,9 @@ const db_link_t link_list[] = { {12, 0x08070000, 0x04330402, "", "暂无简介", ""}, {12, 0x08060100, 0x041c0402, "", "暂无简介", ""}, {12, 0x08010000, 0x04360402, "", "暂无简介", ""}, -{12, 0x08020200, 0x04370402, "", "暂无简介", ""}, -{12, 0x08030100, 0x04380402, "", "暂无简介", ""}, -{12, 0x08040100, 0x04390402, "", "暂无简介", ""}, +{12, 0x08020000, 0x04370402, "", "暂无简介", ""}, +{12, 0x08030000, 0x04380402, "", "暂无简介", ""}, +{12, 0x08040000, 0x04390402, "", "暂无简介", ""}, {13, 0x21060000, 0x03601202, "", "暂无简介", ""}, {13, 0x210b0000, 0x03a50002, "", "暂无简介", ""}, {13, 0x21070000, 0x03611202, "", "暂无简介", ""}, diff --git a/fw/application/src/mui/u8g2_font_wqy12_t_gb2312a.c b/fw/application/src/mui/u8g2_font_wqy12_t_gb2312a.c index 087b9053..b733fd5d 100644 --- a/fw/application/src/mui/u8g2_font_wqy12_t_gb2312a.c +++ b/fw/application/src/mui/u8g2_font_wqy12_t_gb2312a.c @@ -1,1289 +1,1272 @@ - -#include "mui_u8g2.h" - -#include "u8x8.h" - -/* - Fontname: -wenquanyi-wenquanyi bitmap song-medium-r-normal--12-120-75-75-P-119-ISO10646-1 - Copyright: (null) - Glyphs: 1624/30503 - BBX Build Mode: 0 -*/ -#ifdef U8G2_USE_LARGE_FONTS -const uint8_t u8g2_font_wqy12_t_gb2312a[40780] U8G2_FONT_SECTION("u8g2_font_wqy12_t_gb2312a") = - "X\0\3\2\4\4\4\4\5\14\15\0\376\10\376\12\377\1d\2\332\5y \5\0\230\26!\7\221\212" - "\26\247\0\42\7\64\371\26\221)#\16\226\210\67Q\313\260D\275\14K\324\2$\17\245xV\331RQ" - "\62QK\224\312\26\1%\20\226x\66Q\322EK\302\64\211\222.Z\2&\16\205\210VY\22%Y" - "eJ\242H\11'\6\61\372\25\3(\13\263yVI\224D\335\242,)\14\263y\26Y\224E]\242" - "$\2*\14u\210V\225\312AY\232\42\0+\13w\210xqm\30\262\270\6,\7\62z\26\212\2" - "-\7\25\310\26\203\0.\6!\212\25\2/\14\304xvMY)+e\65\0\60\12\205\210\66K\346" - "[\262\0\61\11\205\210\26c\237\6\1\62\13\205\210\66K\26\326\332\6\1\63\15\205\210\26C\32&k" - "\30\16\12\0\64\16\206\210wZ\22u\311\222aL\23\0\65\15\205\210\26C\22\206C\32\206\203\2\66" - "\15\205\210\66K\30\16IfK\26\0\67\13\205\210\26\203X\13\263\260\4\70\15\205\210\66K\246%K" - "fK\26\0\71\15\205\210\66KfK\206PK\26\0:\7a\210\22\222\0;\11\202z\26C\254(" - "\0<\10\225\210\226Y\327\16=\10\65\270\26\203:\10>\11\225\210\26i\267\216\0\77\15\225\210\66K" - "\246\205\221\226Ca\4@\24\247xX[%\221\264DR\224\212R\221\22%\313&\0A\16\207\210x" - "q\232\204IV\32\224T\15B\15\206\210\27\203\22\212\303\22\32\207\5C\14\206\210\67C\22\252\35\223" - "!\1D\15\207\210\30\203\24&\251\307d\220\0E\13\205\210\26\307p\30\213\203\0F\13\205\210\26\307" - "pH\302F\0G\15\206\210\67C\22\252\265QL\6\1H\13\206\210\27\241q\30D\307\0I\11\203" - "\210\24K\324\313\0J\10\243hT\375i\1K\16\205\210\26\231\224\224\64-\211*Y\0L\11\205\210" - "\26a\37\7\1M\20\207\210\30\332\220-\25\245\42ER\244\252\1N\15\206\210\27\341\246DR\242\215" - "\306\0O\14\207\210X[%uM\262l\2P\14\205\210\26C\222\331\6%,\2Q\16\227xX[" - "%uM\262l\7\22\0R\20\206\210\27C\224%Y\222%C\324\226\204\1S\14\205\210\66\203\230\256" - "a\70(\0T\12\207\210\30\207,\356\33\0U\12\206\210\27\241\37\223!\1V\17\207\210\30\251\232d" - "QV\11\223\64\316\0W\21\211\210\32Y\246eZ\245S\322\224\264\25\263\10X\16\206\210\27\241\230D" - "\231\26\265\204b\0Y\14\207\210\30i\222U\322\270\33\0Z\12\207\210\30\207\264\317\303\20[\11\263z" - "\26C\324\237\6\134\15\245x\26a\32\246a\32\246a\0]\11\263y\26S\177\32\2^\10\65\350V" - "YR\13_\7\25x\26\203\0`\7\62\371\25I\24a\14e\210\66K\226\14\232\226\14\1b\14\205" - "\210\26a\70$\231\333\240\0c\10d\210\65C\326\70d\13\205\210\226\225AsK\206\0e\13e\210" - "\66K\66\14a:\4f\11\203\210\64\323\20u\2g\14\205h\66\203\346\226\14a\262\0h\13\205\210" - "\26a\70$\231\267\0i\7\201\210\22\311\60j\11\242h\63Y\322\313\0k\15\205\210\26a))i" - "IT\311\2l\7\201\210\22\7\1m\16g\210\30\213\22ER$ER$\25n\11e\210\26C\222" - "y\13o\12e\210\66K\346\226,\0p\14\205h\26C\222\271\15J\30\2q\13\205h\66\203\346\226" - "\14a\1r\10c\210\24C\324\11s\14e\210\66K\226\250I\226,\0t\12\203\210\24Q\64Dm" - "\2u\11e\210\26\231\267d\10v\14e\210\26\231\226\224\222,\214\0w\17g\210\30Q$EJE" - "\351\26e\11\0x\13e\210\26YR\253\324\264\0y\15\205h\26\231\226\224\222,\314\302\14z\12e" - "\210\26\203\230\265\15\2{\13\243xTIT\311\242\266\0|\7\261z\25\17\2}\13\243x\24YT" - "K\242\226\10~\7&\270\67\222\5\200\17\225\210VR%\33\242l\210\302(R\0\241\7\201\210\22\311" - "\60\277\12\204\210U\71\220E\265p\301\20\267\210\230i\16W\223\60\311J\203\222\252\1\303\21\267\210X" - "JTG\343\64\11\223\254\64(\251\32\311\14\265\210vu\340\30\16cq\20\312\15\265\210VY\22\17" - "c\70\214\305A\315\12\263\210TI\270D\275\14\326\16\247\210XI\16n\225\324\65\311\262\11\332\14\266" - "\210wa\16\205~L\206\4\334\14\246\210\67Q\16\204~L\206\4\337\15\205\210\66R%JJ\225\314" - "\224\0\340\15\225\210\66i\216\254\311\240i\311\20\341\15\225\210vudM\6MK\206\0\343\15\225\210" - "\66\246\34X\223A\323\222!\344\15\205\210\66u`M\6MK\206\0\347\13\204h\65C\326\70%\22" - "\0\350\15\225\210\66i\216,\331\60\204\351\20\351\15\225\210vud\311\206!L\207\0\352\16\225\210V" - "Y\222\3K\66\14a:\4\353\15\205\210\66u`\311\206!L\207\0\355\11\222\210\63Z\322\13\0\361" - "\13\225\210\66\246xH\62o\1\363\13\225\210vud\311\334\222\5\365\16\246\210\66\222\35\31\222\320c" - "\62$\0\366\13\205\210\66u`\311\334\222\5\371\13\225\210\66i\16d\336\222!\372\13\225\210vu " - "\363\226\14\1\374\12\205\210\66\345\314[\62\4\0\0\0<\60\246\6\77N\262\10\224Q\263\12\217T\11" - "\12DY}\12p^\234\12ib\345\13\14gQ\13 n\220\12\331w\355\12\310~\335\13\16\210c" - "\12\311\217\70\13\15\226\206\13b\377\377\1M\14\205\210\66;\260dn\311\2\1Q\15\225\210VI;" - "\260dn\311\2\4\1\15\245\210\66\345a\14\207\261\70\10\4\20\16\205\210VK\224D\232\66\14\231\26" - "\4\21\15\205\210\26\307pH\62\333\240\0\4\22\16\205\210\26C\222i\203\222\331\6\5\4\23\11\205\210" - "\26\307>\2\4\24\23\227xXC\26eQ\26eQ-\312\222aP\3\4\27\16\205\210\66K\26F" - "j\250%\13\0\4\30\15\205\210\26\231\323\222(\311\244\5\4\32\17\205\210\26\231\224\224\246J\224dZ" - "\0\4\33\21\205\210VK\224DI\224DI\224DZ\0\4\34\21\207\210\30\351\66dKE\251H\221" - "\24\251\1\4\35\14\205\210\26\231m\30\62\267\0\4\36\13\205\210\66K\346[\262\0\4\37\11\205\210\26" - "\67\277\5\4 \15\205\210\26C\222i\203\22\66\2\4!\14\205\210\66K&vK\26\0\4\42\12\205" - "\210\26\203\24\366\11\4#\14\205\210\26\231\267d\10\7\5\4$\21\207\210x\341\240D\221\24I\221T" - "\31\304\14\4'\13\205\210\26\231[\62\204\15\4-\16\205\210\66K\26&C\30j\311\2\4/\17\205" - "\210\66\203\246%C\22%\221\246\5\4\60\13d\210\65b\62DR\62\4\61\15\224\210u\211\222-\221" - "S\242\0\4\62\15d\210\25K\64$\221\64$\0\4\63\11d\210\25\203\326\15\4\64\17vxW[" - "\222%Y\22U\206!\14\4\65\14d\210\65J\64lQ\242\0\4\66\16g\210\30Q\245mK\232\42" - "\251\0\4\67\13d\210\65JT\224\22\5\4\70\15e\210\26\231\264$J\62i\1\4\71\17\225\210\66" - "\265\34\310\244%Q\222I\13\4:\14d\210\25\221\222HII\12\4;\12d\210\65K\277H\1\4" - "<\14f\210\27\341\64D\213\307\0\4=\13d\210\25\221\64L\246\0\4>\13d\210\65J\344\224(" - "\0\4\77\11d\210\25\203\344)\4@\16\205h\26\211I\323&E\11C\0\4A\13d\210\65J\244" - "\225\22\5\4B\12e\210\26\203\24v\2\4C\14\204h\25\221\245I\312\242\14\4D\23\247hxq" - "\70(Q$ER$U\6\61\316\0\4E\14e\210\26YR\253\324\264\0\4F\20ux\26Q\22" - "%Q\22%Q\62\210\1\4G\12d\210\25\221)\331\12\4H\20g\210\30Q$ER$ER\64" - "\14\2\4I\22xx\31Q%\252D\225\250\22U\206A\7\2\4K\16f\210\27\241\70DR\42%" - "C\24\4L\14d\210\25Y\266D\322\220\0\4M\14d\210\65J\24iR\242\0\4N\17f\210\27" - "\221R\32\42%R\42\13\0\4O\14d\210\65C$%K\42\5\4Q\16\204\210\25Q\252D\303\26" - "%\12\0 \23\10\33\311\34\17\2 \34\13E\376<\221\224(C\42 \35\14E\371\34\312\220(\221" - "\224\0\60\1\10\63\210\34\231\24\60\2\13D\213\30\273x\34\273x\134\311\260\225\262R\62(\305,\231\262R\61RZ\244,\315\222,\322\2W@\35" - "\273x\134a\32\246a\66,i\224\14Q%\215\222\64J\322!\311\264$\36\6\1WG\33\273x\134" - "Y\234\305\321p\210\243b\224\225\222,\211\264h\323r,G\24\0WO\32\273x\134\71\226\14C\224" - "F\203\26VC\61S\62\245\64\265\3\71\226\1WP\27\273x\274\71\20\25\243bTKz\333\322x" - "\70\347X:\34\4WW\35\273x\134a\32\246\321\240\14R\222\205I\26&Y\62\14\221\226\211I\16" - "d\241\32W[\32\273x\134\71\26\15Z\216\14\71\224\14C\24\246Y,\205Zq\30\304\64W\203\32" - "\273x\134Y\34\246\321p\320\221(+eM\331\22%b\222c\361\60\4W\213\37\273x<\303\224%" - "Q\222%Q\222\14\203\222%Q\222%a\24\231s\340\220\3\351p\20W\316\33\273x<\261\24'\245" - "\341\255\264\64%]\224DR\232\224D\251U\244\254\0W\337\33\273x\134\251\226&Q\62\34\304\312R" - "J:%\213&F\232R\223\22\71\13W\372\30\273x|\305\341\230\305K\234\314Y\66\34\244&eP" - "\324t\70\10X\2\32\273x\134\255Imx\207\224aH\242\64\34\206\34\310\201\203\234\16\7\1XT" - "\35\273x\134\265\312\60D\225\312\240\24\243\254\222,Q\216\15\203\62e\361 g\11\0X^\31\273x" - "\274\351\360\224E\311p\314\262\341\240U\243Z\62(q:\34\4X\203\36\273x\134a\232\14C\224%" - "\321p\220j\245A\213\262L\31\24\61\311\201(\311D\1X\223\32\273x\34\17b\224\16C\230\206\303" - "\20\246\321p\220\232\224AQ\343\341\2X\231\37\273x" - "\32\273x\274\351pPs *F\265\244\267-Lr K\323A\7\22\0YG\33\273x\274\361p" - "Mr \313\206\203\216\204\203\22fI\70(\71\226C\22\0YH\27\273x\274\351p\320\252%eP" - "tt\70\347@Tk\311\304\0YO\31\273x\274\361p\215\207\203V\35\206H\313\244a\210\223\34\310" - "BU\1YV\33\273x\34Q\26&\321\240%RfR\262\70\321\241t\70\210I\254I: YW" - "\32\273x\234\361p\320\302pX\22%\316\6\71\7\36\304\34\12\303aP\0Ye\31\273x\234\71\360" - "\224t\212\246h\70ES\245\313p\20\223\34\310\262uYs\30\273x\234\71\226c\361p\320\312Y\32" - "\246K\16\351H\244\255\11\0Yy\36\273x\134a\32%\331\220$S\222,Q\262\224\222NIe\213" - "\222T\11\223Fu\20Y}\33\273x\134\71\226\15\207\60K\262\60\311J\303\220\24C\261\222\225\262(" - "\235\0Y\202 \273x\134\71\226#\203\62HI-JjI\224dI\224d\221\224E\322\240DI\246" - "c\0Y\231\34\273x\134a\32f\203\242d\211\22U\242JT\325\242,\315\222\254\232\205\42\0Y\256" - "\35\273x<\331\260d\341\60\204IeX\232\223&)i\222\22Q)%QI\12\7Y\306 \273x" - "<\331 eR\62$MI-J\206S\42%Q\322$e\231\62H\305$\7\24\0Y\313 \273x" - "\134a\32f\203\22eI-J\206!\211r \211\6I\312\242\244\226D\311\260f\1Y\354\34\273x" - "\134\321\60\65\15S\226T\246\244S\322)\351\26%\233\22e\221T\34\6Z\1 \273x\374@\222#" - "Q\62\34\222\64L\226(\211Z\206!\211\222N\221\224H\221\262Da\0Z\3\34\273x\134a\32f" - "C\62HI\26&\303)\13\223,\215\6M\13\243Z\70\14Z\5 \273x<\71\26\15\7)\311\222" - "(\311\22\245\27KT\311\264$\314\222,\211\222(\33\206\0Z\34\42\273x<\311\220,QR\31\226" - "\212\222,\211\322\242$\203\222(}JZ\224\312RJ\242J\24\1ZZ\37\273x\134\321\240E\245\341" - "\240\64eI\42)\345\244\62hQ\226)\203\24iI\70(\0[P\30\273x\134\303\220C\71\224C" - "\71\226\16\7\65\307r,G\352P\14[W\31\273x\274\361pHrD\32\224\34\310\241t\70\250\71" - "\226c\71\262\2[X\31\273x\234\361p\320r(\31\266\64\23\263d\70\205i\230\206i\264\1[f" - "\31\272y\33\273x\134\303\240\305\331\60h\241" - "\70\310\331\220\15r\66d\203\226\204\231:\10\134@\36\273x\134\303\240\305\331\60h\71\66\234r J" - "\206\250\22U\242!J\242\222\16(\0\134B\33\273x\134\303\240\305\331\60h\71\226\14[\216\15\247," - "\216jQ\230d\303\20\134E\34\273x\134\303\240\305\331\60h\345\341\224\305\311\260%a\226\204Q\64," - "Y\230\0\134O\31\273x\134\303)\7\242\341\224\204YT\34N\215\303\251-\312\242b\4\134U\31\273" - "x<\303)\7\242\341\324\70\234\32\207CRj\311\244JT\22\5\134^\37\273x<\303)\7\242\341" - "\224\3Q\62la\232\14C\224D\225d\70$Y\246$C\42\134q\27\271y\234\71\22f\231\226i" - "\231\226i\231\226i\331p\320\201\0\134\201\30\272x \273x" - "\134a\234e\303\62DY\224EImJ\262$J\262$+EZ\224DI\224\204\1e\77\37\273x" - "\374@\66,q\66d\221\22%K)\311\222(\311\222(\11\263d\212\306$\326\2eE\33\273x|" - "\345,\33\226!\253\204QiPJ-Q\255\224eC\224D\321\26eH\35\273x\134a\234e\303\62" - "DI\242DY\322\26%Y\22%aKVM\212Z\0eL\34\273x|R\66\246\341p\211\262(" - "\251\205I\62HI\255\224\225\6)\251m\1eO\37\273x\34\273x\134\303\20\246\341\60" - "\204i\70\14q\222FI\224%\245,iN\302\341 fB\35\273x\374@\66$\203\22e\245,\33" - "\236\302(\32NI\24\15Q\222c\71\62\1fZ\36\273x\274\351\64DI)K\206AYJI\247" - "\244\62,\65mJ\242\60\252eC\0fh\36\273x\134\303\20\246\341\60\204i\66\34\222\34K\206!" - "\312\261\341\220\224\222(\222\26\0fn\32\273x|\305\341T\211\262\244i\70\350\360\60\204i\70\14a" - "\32\16C\4fz\37\272y<\71\64$\203\222E\303 E\322\220DI\244\14C\226f\303\220\245\331" - "\60$\0f\202\37\273x\134q\62([\22\205\203\62hQ\22\15I\24\16C\230\206\303\20\246\341\60" - "D\0f\227\36\273x\374@\66<%Y\22U\242\341)\7\242dP\206$K\242d\220\263xP\0" - "f\362\27\272y|Q\34e\303A*I%\251\64<\225\244\322\360\216\4f\364\31\273x<\303!\216" - "\207A+e\303\240\225\262aP\223\34\312\21\333:f\370\33\273x\134\303\220\3Q\64\34\324(\33\316" - "\351p\220\322p\30\302\64\34\206\10f\374\32\272y\134\303\230Da\224D\303A*\15\7\35\35\326(" - "\7\304!\32\2f\376\31\271y\134\265\341 EK\313p\310\261a\210\322h\30\242\64\32\206\4g\0" - "\33\273x\134\303\20\246\341\60\204i\64\34\224(\7\236*Q\64D\246H\236\4g\10\32\271y\134\303" - "\20\245Q\32\15C\224Fi\64\14Q\32\245I\230\310\11\0g\11\30\273x\234\361p\320rl\30\305" - ",\31\246b:\254a\32\246\231\4g\13\36\273x\33\273x|\265a\211\263!\31\222,G*C\226c\321\60eIOMK\30kL\37\273x\34" - "\227\34\210\262%\32\224\266aP\342,Z\262()%\311\22%i\222ec\0kb\27\272y\274\71" - "\224Cq\24GC\26\305Q\34\305Q\34\205\303!kc\32\253x\34\17j\216\345@\224\3\321\240E" - "\71\20\345@\224\3Q:\34\4kd\36\273x|\345,\316\242\244\226D\311\242%Y\230da\222\205" - "I\26%\311\22\15\351\0ke\31\273x\274\71\20\15Z\224\3Q:\34\324\34\251\225ji\216\210\203" - "\14kw\34\273x<\303!\311J\211\244EY\66\34\222(\253\234\224>\15ITL\206\3k{\30" - "\273x\34\17Z\216\225\227\250\245$%R\245\16Dq\26\25\243yk\265\34\273x|\312\246%Y\230" - "dK\264\344\330\62HY)L\242!\13+Y\244\11k\301\33\273x\34\213\262\204IEY\32\223d" - "\270cC\62,\305,\11\253Ke+k\315\34\273x\134\303\20&Y\30\25\323h\70HI\26F\305" - "\64\33\16\71\222#\32\0k\317\33\273x\134\71\66\134r(\32\326$\212\206\203\324\230%\331p\310\221" - "\34\321\0k\322\30\273x\274\351pP\343\341\234\16\7\251i\70(Y\224\15\207X\3k\324\25\272y" - "\34aOI\230DC\242\205}Q\262-S\207\0k\333\27\273x\334\333\240c\71\66d\203\216\345\330" - "\360\216\205i\30\17\2l\21\31\272y\34/\71\220\344@\62\134\262\64K\207\203XJ\62%\213\326\1" - "l\24\32\273x|\71\66\14Y\16%\303\224\243\303\216\345X\224\3Q\216\324!\1l\27\33\273x|" - "\71\66\14R\16%\303\220\344\340\60\350H\61\252jI\24Y\302,l\64\30\273x\274\71\226c\225!" - "Q\322\244\234T\243bTk\211\222\260\14l\70\31\273x\274\71\30\17Y\34ECRN\344(I\243" - "ZmJr(\6lB\32\273x\274Q\16d\311pPs \252&u`\7\222jT\322\62Q\5" - "lI\33\273x<\71\220%\303 fQR\13\223\254%\314\222H\15+YS\242\6l_\32\273x" - "<\71\30\15J\34&Y\234\245a\32fj\230\206\311\60(\71\4l`\37\273x\35\273x<\261\226\14" - "\71\20n\311\226(\305\244SR\61%\265(\211Z\242J$\5mA\32\273x\34ie\30\324Z\313" - "\60dq\226\64II-J:%=E\2mN\34\273x\32\273x\245\331" - "pG\207\203\324d\23y\217\37\273x<\321\60D\71<(C\222\205\311\240\345\330pQ\242HI\206" - "!J\242\226a\10y\273\33\273x\274\351p\220\222\306\250\230\64\16C\16\304\303\251%J\6%\212\25" - "\0y\301\32\273x|\362\230\206\331 \245Y:\245J\61\211\262\312\60D\305(G\0y\315\33\273x" - "|R\66\246\321\360\22\265D\221RJ\224aP\302\64L\303\64\314\0y\321\34\273x|b\262EY" - "\230$\203\230\225\62-\211\224p\11\267H\312\342,N\0y\322\33\273x|\265\61\215\222\312\220\224Z" - "\242d)*Q\244\304Y\32fj\242\2y\351\35\273x|a\264%a\66$\303\24\246\241\62LI" - "\226)Y\224\204I\326\224\210\1y\360\31\273x|J\270\305\321p\220\32\303\245IJz*iQ\61" - "\315\64\0y\373\33\273x|\265\203T\34\226(\13-J\230DC\242eJ\224\324\322\60\332\0z\13" - "\36\273x|\311\240LY)K\206d\320rL\31$%\12\245A)\246a\232\14C\0z\15\36\273" - "x|R\64DI-\314\206C\26e\321\62H\212\226\224\6-\312JY)R\0z.\34\273x|" - "\311\240\214i\64\274\324\242AS\332\222a\22\263$\32\264\60M\206!z\61\35\273x|\241\62M\225" - "(\32\224\266h\320\224\266d\230\244\244\313\60D\265R\244\0z\77\36\273x|R\66\15S\26%\203" - "\62d\71\66\234\222\64Q\222E\351)I\226(\11\5zv\30\273x\274\351\360\224E\325,\12\323\34" - "\31v \212\263\250\30\315\3zz\30\273x\274\361pHrD\213\342\60\223\303a\7r,\307\342\341" - "\20z\177\32\273x\274\351\360\224EJ\232$\303 f\351pMr \212\263P\32\1z\201\31\273x" - "\274\361pH\242\222\24\226\222r\224\15\207\64\207\222X\223t@z\227\36\272y\274\341pP\302\244\224" - "%\303!\211\262(\31\246)\211\42\251\22%\321\60(\0z\313\30\273x\274\71\230\16\207\234\20\246a" - "\34\345@\224\3I\216\205\303Az\326\36\273x|\311 %\265(\211\222,\311\302$J\322$\223\323" - "\341\230\345@\22\16\7\1z\331\34\273x\65&" - "\215Z\0\226b\35\273x\34C\24FY%\31N\251\22\15J\224\3\321pHJ\225\250\242U\244T" - "\226d\36\273x\34CV\252DI\224%R\262(a\26\15\247,\233\222\266(\222\262H\325\0\226\206" - " \273x\34C\222F\311\240T\264D\234\222D\233\222Z\224\14\7)K\242A\211\263h\30\4\226\217" - " \273x\34c\226(\303\220\64j\203R\213\222\344\220tJ\244dH\262$J\62\65\212\6\1\226\220" - "\42\273x\34C\62D\225\250\222\14\213\222&\245A\211\322$J\6E\211\302$Q\232\222(\21\207\10" - "\226\250!\273x\34CVR\206%*i\303\220\204IiY\242\244eH\222\245\224\264%Q\22eC" - "\0\226\274\30\273x\134Y<\134\264\60\31\6\255<\14Zy\70\207\303A\16\1\226\276\35\273x\334I" - "\64DI\232\14C\64eI)\214\206\251-I\206\245\251\30\345\300\1\226\304\37\273x|\345(\211\206" - "\203\224%a\244dI\64(\245$*\15K\226\204I\333\220\14\2\226\306\34\273x|I\16d\351p" - "P\242\34\70hQ\16\34\264(\35\16ZR\233\242\1\226\314\37\273x\134I\224&\215I\62,\203\22" - "%\225a\351\224T\206\245S\62(\221\224\14r\10\226\350\30\273x\34\17j\216\305\303)+%\235\42" - "O\225NY)\213\24\0\226\352\31\273x<\303\71\35\36CEI\224\34\35\356X\66\14:\26\15\27" - "\0\226\366\31\273x<\303\71\35\236\222R\70k\222\226I\303\220C\71\260c\32\0\226\367\30\273x<" - "\303\71\35\36CEI\224\64\36NYi\70e\245\341\2\226\373\30\273x<\303\71\35^\242J\62\234" - "\262\322p\312J\303\71L\207\1\227\0\31\273x<\303\71\35^\224DI\323\341 \346\300S%j\211" - "Z\22\5\227\6\34\273x<\303\71\35^\242\312\240\14Z\30.\203\230\205\311\60H\71\242\14\203\0\227" - "\23\34\273x<\303\71\35^\242J\62\15Q\16DC\62D\71\20\15\307(\33\262A\227\36\32\273x" - "<\303\71\35\236\222\322\260\14Q\61\32Na\24\15IT\325\242I\227\62\36\273x<\303\71\35\236\222" - "\322 \15I\224H\311\220\211\221\264\34\222Z\224\14\321\220\0\227\70\34\273x<\303\71\35\236\222\322p" - "\220*Q\62(C\322)\31\16Y)\213\42\5\227R\30\273x\274\361p\316\201C\16\244\303A\13\323" - "a\15\323a\15#\0\227Y\37\273x\134a\66,[%\33\222!\13\223d\70(Q%R\222!J" - "\244\60*&\66\0\227^\34\273x\234I\216\24\7e\20\223\34\251\16\311\220&\71R\34\224ALr" - "\244\10\227`\34\273x\134u\340 e\351p\220\322p\30\342$\34\224AL\302A\31\304$\4\227b" - "\30\272y\34\17a\216\304\303A*IC$\225\244!\222J\303;\22\227i\31\273x|\265\341\240\225" - "\7\35\311\201C\30\25\207!\7\322\341\240\246\0\227\215\35\273x<\265l\70(\215\311\226\206\331\360R" - "J\222A\211\262P\32\244$\213\264\0\227\363\32\273x\274\361p\314r \11\207\203\16\17C\230\206\303" - "\20\246\341\60D\0\227\365\35\273x\134Y\70(a\226\14J\343\260d\71\20\15\253\26)\303\240i\351" - "\260)\0\230\5\31\273x\274\303AJ\243a*F\321\60\25\243\341\240\205\351\60G\251\30\230\30\36\273" - "x|\311\60\211Y\224\14K\244\225\206C\222\205\311\240\224\262(\33\264\250\230\204\1\230^\36\273x\34" - "IeP\306\332pH\262d\32\226\266(\33\16I\26e\203RKj[\0\230o\42\273x<\203\62" - "$Y\224\15\312\220dI\224\14\312\220D\211\24)\311\220tJ\224aH\372\267\0\230u\31\273x\34" - "\17j\16\34\302\64\214\212Q\61*FJ\34\305\241$'\0\230y\32\273x\274\303AJ\243a*F" - "\225\250%j\211\242!\211V\35\211R\61\230\177\35\273x\134\331 \245\321\240\14R\226)]\224.\303" - "\322\224%\245$\13\265$\326\2\230\206\33\273x|\321\240\205\225(\224\206!\252\305IeH\32\223\266" - "\260%\214\262\0\230\221\37\273x|\321\240\24\263d\30\224R\66\14J-J\272(-JE\252\224\302" - "$\321\264\0\230\230!\273x\11\225\210\26i\267\216\0\77\15\225\210\66K" + "\246\205\221\226Ca\4@\24\247xX[%\221\264DR\224\212R\221\22%\313&\0A\16\207\210x" + "q\232\204IV\32\224T\15B\15\206\210\27\203\22\212\303\22\32\207\5C\14\206\210\67C\22\252\35\223" + "!\1D\15\207\210\30\203\24&\251\307d\220\0E\13\205\210\26\307p\30\213\203\0F\13\205\210\26\307" + "pH\302F\0G\15\206\210\67C\22\252\265QL\6\1H\13\206\210\27\241q\30D\307\0I\11\203" + "\210\24K\324\313\0J\10\243hT\375i\1K\16\205\210\26\231\224\224\64-\211*Y\0L\11\205\210" + "\26a\37\7\1M\20\207\210\30\332\220-\25\245\42ER\244\252\1N\15\206\210\27\341\246DR\242\215" + "\306\0O\14\207\210X[%uM\262l\2P\14\205\210\26C\222\331\6%,\2Q\15\227xX[" + "%uM\262lO\0R\20\206\210\27C\224%Y\222%C\324\226\204\1S\14\205\210\66\203\230\256a" + "\70(\0T\12\207\210\30\207,\356\33\0U\12\206\210\27\241\37\223!\1V\17\207\210\30\251\232dQ" + "V\11\223\64\316\0W\21\211\210\32Y\246eZ\245S\322\224\264\25\263\10X\16\206\210\27\241\230D\231" + "\26\265\204b\0Y\14\207\210\30i\222U\322\270\33\0Z\12\207\210\30\207\264\317\303\20[\11\263z\26" + "C\324\237\6\134\15\245x\26a\32\246a\32\246a\0]\11\263y\26S\177\32\2^\10\65\350VY" + "R\13_\7\25x\26\203\0`\7\62\371\25I\24a\14e\210\66K\226\14\232\226\14\1b\14\205\210" + "\26a\70$\231\333\240\0c\10d\210\65C\326\70d\13\205\210\226\225AsK\206\0e\13e\210\66" + "K\66\14a:\4f\11\203\210\64\323\20u\2g\14\205h\66\203\346\226\14a\262\0h\13\205\210\26" + "a\70$\231\267\0i\7\201\210\22\311\60j\11\242h\63Y\322\313\0k\15\205\210\26a))iI" + "T\311\2l\7\201\210\22\7\1m\16g\210\30\213\22ER$ER$\25n\11e\210\26C\222y" + "\13o\12e\210\66K\346\226,\0p\14\205h\26C\222\271\15J\30\2q\13\205h\66\203\346\226\14" + "a\1r\10c\210\24C\324\11s\14e\210\66K\226\250I\226,\0t\12\203\210\24Q\64Dm\2" + "u\11e\210\26\231\267d\10v\14e\210\26\231\226\224\222,\214\0w\17g\210\30Q$EJE\351" + "\26e\11\0x\13e\210\26YR\253\324\264\0y\15\205h\26\231\226\224\222,\314\302\14z\12e\210" + "\26\203\230\265\15\2{\13\243xTIT\311\242\266\0|\7\261z\25\17\2}\13\243x\24YTK" + "\242\226\10~\7&\270\67\222\5\200\17\225\210VR%\33\242l\210\302(R\0\241\7\201\210\22\311\60" + "\277\12\204\210Uy\26\325\302\1\301\20\267\210\230i\16W\223\60\311J\203\222\252\1\303\21\267\210XJ" + "TG\343\64\11\223\254\64(\251\32\311\14\265\210v\365a\14\207\261\70\10\312\15\265\210VY\22\17c" + "\70\214\305A\315\12\263\210TI\270D\275\14\326\16\247\210XI\16n\225\324\65\311\262\11\332\14\266\210" + "wa\16\205~L\206\4\334\14\246\210\67Q\36\372\61\31\22\0\337\15\205\210\66R%JJ\225\314\224" + "\0\340\15\225\210\66i\216\254\311\240i\311\20\341\15\225\210vudM\6MK\206\0\343\15\225\210\66" + "\246|M\6MK\206\0\344\14\205\210\66\365\65\31\64-\31\2\347\13\204h\65C\326\70%\22\0\350" + "\15\225\210\66i\216,\331\60\204\351\20\351\15\225\210vud\311\206!L\207\0\352\15\225\210VY\222" + "/\331\60\204\351\20\353\14\205\210\66\365%\33\206\60\35\2\355\11\222\210\63Z\322\13\0\361\13\225\210\66" + "\246xH\62o\1\363\13\225\210vud\311\334\222\5\365\16\246\210\66\222\35\31\222\320c\62$\0\366" + "\13\205\210\66\365%sK\26\0\371\13\225\210\66i\236yK\206\0\372\12\225\210v\365\314[\62\4\374" + "\12\205\210\66\345\314[\62\4\0\0\0\70\60\246\6 N\262\10DQ\263\12`T\11\12#Y}\12" + "C^\234\12@b\345\12\355gQ\13\1n\220\12\272w\355\12\256~\335\12\361\210c\12\243\217\70\12" + "\362\377\377\1M\14\205\210\66\373\222\271%\13\0\1Q\15\225\210VI\373\222\271%\13\0\4\1\15\245" + "\210\66\345a\14\207\261\70\10\4\20\16\205\210VK\224D\232\66\14\231\26\4\21\15\205\210\26\307pH" + "\62\333\240\0\4\22\16\205\210\26C\222i\203\222\331\6\5\4\23\11\205\210\26\307>\2\4\24\23\227x" + "XC\26eQ\26eQ-\312\222aP\3\4\27\16\205\210\66K\26Fj\250%\13\0\4\30\15\205" + "\210\26\231\323\222(\311\244\5\4\32\17\205\210\26\231\224\224\246J\224dZ\0\4\33\21\205\210VK\224" + "DI\224DI\224DZ\0\4\34\21\207\210\30\351\66dKE\251H\221\24\251\1\4\35\14\205\210\26" + "\231m\30\62\267\0\4\36\13\205\210\66K\346[\262\0\4\37\11\205\210\26\67\277\5\4 \15\205\210\26" + "C\222i\203\22\66\2\4!\14\205\210\66K&vK\26\0\4\42\12\205\210\26\203\24\366\11\4#\14" + "\205\210\26\231\267d\10\7\5\4$\21\207\210x\341\240D\221\24I\221T\31\304\14\4'\13\205\210\26" + "\231[\62\204\15\4-\16\205\210\66K\26&C\30j\311\2\4/\17\205\210\66\203\246%C\22%\221" + "\246\5\4\60\13d\210\65b\62DR\62\4\61\15\224\210u\211\222-\221S\242\0\4\62\15d\210\25" + "K\64$\221\64$\0\4\63\11d\210\25\203\326\15\4\64\17vxW[\222%Y\22U\206!\14\4" + "\65\14d\210\65J\64lQ\242\0\4\66\16g\210\30Q\245mK\232\42\251\0\4\67\13d\210\65J" + "T\224\22\5\4\70\15e\210\26\231\264$J\62i\1\4\71\16\225\210\66\265<\223\226DI&-\4" + ":\14d\210\25\221\222HII\12\4;\12d\210\65K\277H\1\4<\14f\210\27\341\64D\213\307" + "\0\4=\13d\210\25\221\64L\246\0\4>\13d\210\65J\344\224(\0\4\77\11d\210\25\203\344)" + "\4@\16\205h\26\211I\323&E\11C\0\4A\13d\210\65J\244\225\22\5\4B\12e\210\26\203" + "\24v\2\4C\14\204h\25\221\245I\312\242\14\4D\23\247hxq\70(Q$ER$U\6\61" + "\316\0\4E\14e\210\26YR\253\324\264\0\4F\20ux\26Q\22%Q\22%Q\62\210\1\4G" + "\12d\210\25\221)\331\12\4H\20g\210\30Q$ER$ER\64\14\2\4I\21xx\31Q%" + "\252D\225\250\22U\206A\17\4K\16f\210\27\241\70DR\42%C\24\4L\14d\210\25Y\266D" + "\322\220\0\4M\14d\210\65J\24iR\242\0\4N\17f\210\27\221R\32\42%R\42\13\0\4O" + "\14d\210\65C$%K\42\5\4Q\16\204\210\25Q\252D\303\26%\12\0 \23\10\33\311\34\17\2" + " \34\13E\376<\221\224(C\42 \35\14E\371\34\312\220(\221\224\0\60\1\10\63\210\34\231\24\60" + "\2\13D\213\10\60j\30\271y\134\71\224d\203\242\205RV\314\302(" + "\32\302L\253d\33\0\60k\26\251y\34\71\224M\211\264F\71\222#Y\230\24\265!\311\1\60n\24" + "\231\211|kR\213*Y&\205R\250\204Q\30k\0\60o\32\272y\334Y\234%\331\22\15Q\34\305" + "Q\34eC\224h\212\222%\245\15\60y\22\213\230\374I\216\24u$J\305\34\314\301\34\24\60~\26" + "\270z|a\66$C\236e\323\220\207C\226-Y\224\214\0\60\177\32\272y\30\273x\14aT\34\206\60*F\245\341 \245a\32\206\22\0Q\231\33\273x<\303!\311\21)\15\207" + "\65\307\206!\307\242aHr,Or(\3Q\233\30\272y\34\17:\22\306\303 \346H\224\16\203\34" + "\16\207\64\207B\0Q\234\32\273x\274\361pH\262P\323\302(\217jR\222%Y)\211RQ\213\3" + "Q\245\31\273x\34\337!e\30\222(\15\207!L\303a\310\323\341\240\325\326\1Q\260\33\273x\34\324,\315\322l\30\2T\16\32\273" + "x\374\333 \347\330p\312\261\34K\206-\11\243b\24\15K\26&\0T\21\30\272x\234\71\22\17\7" + "\35\221\206H*I%i\210tDG\344\1T\27\34\273x\234\303\62\244I\324\22\265DI\226D\311" + "\60D\261\64,\203\234c\371\2T\36\30\273x<\303\71\307\322\341\240Uk\303\245\232Di\70\14a" + "\32\1T&\32\273x\34\17j\16)\242\222%Z\230\346\303\240\305Y\234\15\203\26'\0T'\32\273" + "x\234\303\262DI\247\244S\322)i\31\226%N\352X\32\246\351\60T,\35\273x\374\210\62$[" + "\224\244Q\222F\311\60DI\24\15I\224Gq\226\206\325\10T/\32\272x\274\361\60Hq\24G\303" + " \345\320\60HjRM\222a\220\322\0TJ\31\273x\134\365(\37\6)\313\261t\70\350\360\60\204" + "i\230\206\303\20\1TX\31\273x\134\303\20\246\341\60\344\370p\312\243\254\224\225*Q\230e\353\0T" + "b\34\273x\234\303\262\204IcR\31\226\346\244mH*J\213\236d\245,\21\207\0Th\35\273x" + "\134\303)+%\203\22e\245\341\224G\311\240DI\226\224\6\245\216\350\210\0Ts\32\273x\374\331\220" + "\225\222A\211\262\322p\312\262!\232*\255Q\255\224g\0T}\32\273x\274\71\224\344Y\266\334\321!" + "\31\242J\324\22EC\22\265$z\10T\206\35\273x\274\71\66\134RE\31\22%\252(QE\211\206" + "d\210\262\244\224ca<\10T\214\32\273x\234\362\216e\303!\211\262R\64\225\224R\322I\312\242," + "\33\262\34T\232\32\273x\334\341\66$\245,\351)\11\263$K\242E[$\35\314uP\2T\301\26" + "\272y\134\303\330q\330\321!\32\244\222T\222J\203\64H\15T\315\33\273x\374\71\24.\303\240T\225" + "\312\242tQ\272\14I\262\204i\230\206\241\0T\345\31\272y\34\17y\66DYT\33\242h\70\344\331" + "\20eQm\210\362\11T\350\34\273x\234Q\64(\235\262R\62\14Q\22J\311pHB)\31\326\60" + "\15\323hT\352\37\273x|C\62,-J\27eP\224^\224AI\206\244E\351\61I\266(\11#" + "%\2T\356\36\273x\334\331\220\14K-\211\222\341\220da\22\15\312\222E\211\62Li\216\345\310\4" + "U$\34\273x\334\71\66$C\22\225\206!\211\222NI\313\220t\32\6=\207\222X\23U.\31\273" + "x\134Y<\234\262t\270\324\342a\320\312\303)\316\342l\30\24\0UF\35\273x\274\351p\320\212\303" + "\251\22U\262$\32NI\226D\311\240DI\226D\261\2U_\35\273x|\305A\11\263dH\6\245" + "\24*Q\262\224\222NI\251%*-\255Y\0Uf\33\273x\274I\66\265\14\207$J\223HJJ" + "IeQZ\224\346(\37\266\25U\232\33\273x\274C\64\265\224\262d\30\224\26\245ER\226R\70\14" + "r\222g\241\32U\234\31\273x\274\351pP\343\341\226\206\303\220f\331p\220\322\60\15\207!\2U\256" + "\34\272y\34C\64H%\251\64\34\224,\212\206A\312\242h\30\344p\70\244!\0U\267\34\273x\374" + "\331\62\14J\224t\31\6%\312\222\312pHR\245T\214\312I\254\11V\27\31\273x\134M\303S\26" + "e\203\232\305\211\226\15\203X\35\326\60\35&\0V\30\36\273x\334C\262\205I\62\14J\233\222\14K" + "\267!\211\6\245\253\322\24)R\62\14\2Vh \273x\34\273x\134\311\260\225\262R\62(\305,\231\262R\61RZ\244,\315\222" + ",\322\2W@\35\273x\134a\32\246a\66,i\224\14Q%\215\222\64J\322!\311\264$\36\6\1" + "WG\33\273x\134Y\234\305\321p\210\243b\224\225\222,\211\264h\323r,G\24\0WO\31\273x" + "\134\71\226\14C\224F\203\26VC\61S\62\245\64\265\347X\6WP\26\273x\274yT\214\212Q-" + "\351mK\343\341\234c\351p\20WW\35\273x\134a\32\246\321\240\14R\222\205I\26&Y\62\14\221" + "\226\211I\236\205j\0W[\32\273x\134\71\26\15Z\216\14\71\224\14C\24\246Y,\205Zq\30\304" + "\64W\203\32\273x\134Y\34\246\321p\320\221(+eM\331\22%b\222c\361\60\4W\213\36\273x" + "<\303\224%Q\222%Q\222\14\203\222%Q\222%a\24\231\363a\310\323\341 W\316\33\273x<\261" + "\24'\245\341\255\264\64%]\224DR\232\224D\251U\244\254\0W\337\33\273x\134\251\226&Q\62\34" + "\304\312RJ:%\213&F\232R\223\22\71\13W\372\30\273x|\305\341\230\305K\234\314Y\66\34\244" + "&eP\324t\70\10X\2\31\273x\134\255Imx\207\224aH\242\64\34\206<\37\6\71\35\16\2" + "XT\35\273x\134\265\312\60D\225\312\240\24\243\254\222,Q\216\15\203\62e\361 g\11\0X^\31" + "\273x\274\351\360\224E\311p\314\262\341\240U\243Z\62(q:\34\4X\203\35\273x\134a\232\14C" + "\224%\321p\220j\245A\213\262L\31\24\61\311\243$\23\5X\223\32\273x\34\17b\224\16C\230\206" + "\303\20\246\321p\220\232\224AQ\343\341\2X\231\37\273x\27\273x\274\351pP\363\250\30\325\222\336\266\60" + "\311\263\64\35\364\4YG\32\273x\274\361pM\362,\33\16:\22\16J\230%\341\240\344X\16I\0" + "YH\26\273x\274\351p\320\252%ePtt\70\347Q\255%\23\3YO\30\273x\274\361p\215\207" + "\203V\35\206H\313\244a\210\223<\13U\5YV\33\273x\34Q\26&\321\240%RfR\262\70\321" + "\241t\70\210I\254I\272\0YW\32\273x\234\361p\320\302pX\22%\316\6\71\37\16b\16\205\341" + "\60(\0Ye\31\273x\234\371pJ:ES\64\234\242\251\322e\70\210I\236e\353\0Ys\30\273" + "x\234\71\226c\361p\320\312Y\32\246K\16\351H\244\255\11\0Yy\36\273x\134a\32%\331\220$" + "S\222,Q\262\224\222NIe\213\222T\11\223Fu\20Y}\33\273x\134\71\226\15\207\60K\262\60" + "\311J\303\220\24C\261\222\225\262(\235\0Y\202 \273x\134\71\226#\203\62HI-JjI\224d" + "I\224d\221\224E\322\240DI\246c\0Y\231\34\273x\134a\32f\203\242d\211\22U\242JT\325" + "\242,\315\222\254\232\205\42\0Y\256\35\273x<\331\260d\341\60\204IeX\232\223&)i\222\22Q" + ")%QI\12\7Y\306\37\273x<\331 eR\62$MI-J\206S\42%Q\322$e\231\62" + "H\305$W\0Y\313\37\273x\134a\32f\203\22eI-J\206!\211\362$\32$)\213\222Z\22" + "%\303\232\5Y\354\34\273x\134\321\60\65\15S\226T\246\244S\322)\351\26%\233\22e\221T\34\6" + "Z\1\37\273x\374I\216D\311pH\322\60Y\242$j\31\206$J:ER\42E\312\22\205\1Z" + "\3\34\273x\134a\32fC\62HI\26&\303)\13\223,\215\6M\13\243Z\70\14Z\5 \273x" + "<\71\26\15\7)\311\222(\311\22\245\27KT\311\264$\314\222,\211\222(\33\206\0Z\34\42\273x" + "<\311\220,QR\31\226\212\222,\211\322\242$\203\222(}JZ\224\312RJ\242J\24\1ZZ\37" + "\273x\134\321\240E\245\341\240\64eI\42)\345\244\62hQ\226)\203\24iI\70(\0[P\30\273" + "x\134\303\220C\71\224C\71\226\16\7\65\307r,G\352P\14[W\30\273x\274\361pHrD\32" + "\224<\207\322\341\240\346X\216\345\310\12[X\31\273x\234\361p\320r(\31\266\64\23\263d\70\205i" + "\230\206i\264\1[f\30\272y\33\273x\134\303\240\305\331\60h\241\70\310\331\220\15r\66d\203\226\204\231:\10\134" + "@\34\273x\134\303\240\305\331\60h\71\66\234\362(\31\242JT\211\206(\211J\272\2\134B\33\273x" + "\134\303\240\305\331\60h\71\226\14[\216\15\247,\216jQ\230d\303\20\134E\34\273x\134\303\240\305\331" + "\60h\345\341\224\305\311\260%a\226\204Q\64,Y\230\0\134O\31\273x\134\303)\217\206S\22fQ" + "q\70\65\16\247\266(\213\212\21\0\134U\30\273x<\303)\217\206S\343pj\34\16I\251%\223*" + "QI\24\134^\36\273x<\303)\217\206S\36%\303\26\246\311\60DITI\206C\222eJ\62$" + "\2\134q\26\271y\234\71\22f\231\226i\231\226i\231\226i\331p\320\3\134\201\30\272x \273x\134a\234e" + "\303\62DY\224EImJ\262$J\262$+EZ\224DI\224\204\1e\77\36\273x\374\331\260\304" + "\331\220EJ\224,\245$K\242$K\242$\314\222)\32\223X\13eE\33\273x|\345,\33\226!" + "\253\204QiPJ-Q\255\224eC\224D\321\26eH\35\273x\134a\234e\303\62DI\242DY" + "\322\26%Y\22%aKVM\212Z\0eL\34\273x|R\66\246\341p\211\262(\251\205I\62H" + "I\255\224\225\6)\251m\1eO\37\273x\34\273x\134\303\20\246\341\60\204i\70\14q\222FI\224%\245,iN\302\341 f" + "B\34\273x\374\331\220\14J\224\225\262lx\12\243h\70%Q\64DI\216\345\310\4fZ\36\273x" + "\274\351\64DI)K\206AYJI\247\244\62,\65mJ\242\60\252eC\0fh\36\273x\134\303" + "\20\246\341\60\204i\66\34\222\34K\206!\312\261\341\220\224\222(\222\26\0fn\32\273x|\305\341T" + "\211\262\244i\70\350\360\60\204i\70\14a\32\16C\4fz\37\272y<\71\64$\203\222E\303 E" + "\322\220DI\244\14C\226f\303\220\245\331\60$\0f\202\37\273x\134q\62([\22\205\203\62hQ" + "\22\15I\24\16C\230\206\303\20\246\341\60D\0f\227\34\273x\374\331\360\224dIT\211\206\247\33\273x|\265" + "a\211\263!\31\222,G*C\226c\321\60eIOMK\30kL\36\273x\34\227<\312\226hP" + "\332\206A\211\263h\311\242\244\224$K\224\244I\226\215\1kb\27\272y\274\71\224Cq\24GC\26" + "\305Q\34\305Q\34\205\303!kc\26\253x\34\17j\216\345Q\36\15Z\224Gy\224G\351p\20k" + "d\36\273x|\345,\316\242\244\226D\311\242%Y\230da\222\205I\26%\311\22\15\351\0ke\30" + "\273x\274y\64hQ\36\245\303A\315\221Z\251\226\346\210\70\310\0kw\34\273x<\303!\311J\211" + "\244EY\66\34\222(\253\234\224>\15ITL\206\3k{\30\273x\34\17Z\216\225\227\250\245$%" + "R\245\36\305YT\214\346\1k\265\34\273x|\312\246%Y\230dK\264\344\330\62HY)L\242!" + "\13+Y\244\11k\301\33\273x\34\213\262\204IEY\32\223d\270cC\62,\305,\11\253Ke+" + "k\315\34\273x\134\303\20&Y\30\25\323h\70HI\26F\305\64\33\16\71\222#\32\0k\317\33\273" + "x\134\71\66\134r(\32\326$\212\206\203\324\230%\331p\310\221\34\321\0k\322\30\273x\274\351pP" + "\343\341\234\16\7\251i\70(Y\224\15\207X\3k\324\25\272y\34aOI\230DC\242\205}Q\262" + "-S\207\0k\333\27\273x\334\333\240c\71\66d\203\216\345\330\360\216\205i\30\17\2l\21\27\272y" + "\34/y\222'\303%K\263t\70\210\245$S\262h\35l\24\31\273x|\71\66\14Y\16%\303\224" + "\243\303\216\345X\224G\71R\207\4l\27\33\273x|\71\66\14R\16%\303\220\344\340\60\350H\61\252" + "jI\24Y\302,l\64\30\273x\274\71\226c\225!Q\322\244\234T\243bTk\211\222\260\14l\70" + "\31\273x\274\71\30\17Y\34ECRN\344(I\243ZmJr(\6lB\27\273x\274Q\236%" + "\303A\315\243jR\337\223jT\322\62Q\5lI\32\273x\34\273x<\261\226\14y\270%[\242\24\223NI\305\224\324\242$j\211*\221\24mA\32\273" + "x\34ie\30\324Z\313\60dq\226\64II-J:%=E\2mN\34\273x\14\1t*\32\273x\274Y\62\34" + "\244ZiP\206$+\15Z\224e\303A\307\263\264\0t\64\32\273x\34\203\62HivK\243A\31" + "\324\34\261M\321\66\350P\16\245\0t^\34\273x\234Q\64L-\303\20\345\320p\210\262\70\31\206h" + "\251LIc\322\30\12t\334\34\273x\374\333\260FI\32%i\224\244Q\61*FY\224%\245lH" + "\64)\11t\343 \273x\32\273x\245\331pG\207\203\324d\23y\217\37\273x<\321\60D\71<(C\222\205\311\240\345" + "\330pQ\242HI\206!J\242\226a\10y\273\32\273x\274\351p\220\222\306\250\230\64\16C\36\17\247" + "\226(\31\224(V\0y\301\32\273x|\362\230\206\331 \245Y:\245J\61\211\262\312\60D\305(G" + "\0y\315\33\273x|R\66\246\321\360\22\265D\221RJ\224aP\302\64L\303\64\314\0y\321\34\273" + "x|b\262EY\230$\203\230\225\62-\211\224p\11\267H\312\342,N\0y\322\33\273x|\265\61" + "\215\222\312\220\224Z\242d)*Q\244\304Y\32fj\242\2y\351\35\273x|a\264%a\66$\303" + "\24\246\241\62LI\226)Y\224\204I\326\224\210\1y\360\31\273x|J\270\305\321p\220\32\303\245I" + "Jz*iQ\61\315\64\0y\373\33\273x|\265\203T\34\226(\13-J\230DC\242eJ\224\324" + "\322\60\332\0z\13\36\273x|\311\240LY)K\206d\320rL\31$%\12\245A)\246a\232\14" + "C\0z\15\36\273x|R\64DI-\314\206C\26e\321\62H\212\226\224\6-\312JY)R\0" + "z.\34\273x|\311\240\214i\64\274\324\242AS\332\222a\22\263$\32\264\60M\206!z\61\35\273" + "x|\241\62M\225(\32\224\266h\320\224\266d\230\244\244\313\60D\265R\244\0z\77\36\273x|R" + "\66\15S\26%\203\62d\71\66\234\222\64Q\222E\351)I\226(\11\5zv\27\273x\274\351\360\224" + "E\325,\12\323\34\31\366(\316\242b\64\17zz\30\273x\274\361pHrD\213\342\60\223\303a\317" + "\261\34\213\207C\0z\177\31\273x\274\351\360\224EJ\232$\303 f\351pM\362(\316Bi\4z" + "\201\31\273x\274\361pH\242\222\24\226\222r\224\15\207\64\207\222X\223t\1z\227\36\272y\274\341p" + "P\302\244\224%\303!\211\262(\31\246)\211\42\251\22%\321\60(\0z\313\27\273x\274\71\230\16\207" + "\34\17\323\60\216\362(Or,\34\16\2z\326\35\273x|\311 %\265(\211\222,\311\302$J\322" + "$\223\323\341\230\345I\70\34\4z\331\34\273x\254a\32\246\303\4{~\33\273x\34\242J\324\22%\303A\205\317\37\273x\234Q\66\34\304(\251" + "\14\207\244\323\62(Q\222%C\62,\275(\311\240T\23\1\206\21\36\273x\234Y\64\34\304\244\66\34" + "\222(\313\206C\242t\31\16I\24FC\230d\303\2\206N\34\273x\274\203\34\17\207$\12\243a\320" + "\242\64\211\206!\311\261h\10\243\222\42\16\206k\26\273x\274\71\26\17\247\254\224\225\206s\216Ey\26" + "\17\7\65\206y\35\273x\134\71\226\15\207,JjQR\213\222Z\64ha\32&Y\270E\313\60\4" + "\206}\30\273x\134\303\20\246\341\60\204Q=\36NYi\70\347Xe\70\10\206~\35\273x\134\71\26" + "\15\7)KJYR\222\222R\222\14Rc\232D\351\224iI\6\206\331\35\273x\134a\32\15Z\230" + "\15R\226$\303\240\224\7)\215\6-\211\322)\223\206!\207\203\37\273x\134a\32\15\7\245\224$\303" + "\240$R\242$\303K\234\15RR\213\206pH\62\5\207\215 \273x\34\247\34\313\206dP\242\244e" + "H\232\223dxPJ\321\60%J\24\15I\62D\1\207\371\35\273x\134\313\240D\245aH\22\245)" + "\33\16ISe\70\325\262a\220\263d\270\4\210@\32\273x\234\71\224#\303\251\22\265D-QK\324" + "\22\265D-Q\62\34\4\210L\32\273x\134\321 \345P\16\347P\62\14\211\32%i\230\206i\230\206" + "\331\4\210W\34\273x\134\245%\31\302\372\60f\321\240\225\222A\211\262R\266D\311\26\305\12\0\210c" + "\31\273x\274\71\30\16\7\65\207\222(\214\222P\13\223\254\224D\251X\16\210e\31\273x\65&\215Z\0\226b\35\273x\34C\24FY%\31N\251\22\15J" + "\224G\303!)U\242\212V\221R\1\226d\36\273x\34CV\252DI\224%R\262(a\26\15\247" + ",\233\222\266(\222\262H\325\0\226\206 \273x\34C\222F\311\240T\264D\234\222D\233\222Z\224\14" + "\7)K\242A\211\263h\30\4\226\217 \273x\34c\226(\303\220\64j\203R\213\222\344\220tJ\244" + "dH\262$J\62\65\212\6\1\226\220\42\273x\34C\62D\225\250\222\14\213\222&\245A\211\322$J" + "\6E\211\302$Q\232\222(\21\207\10\226\250!\273x\34CVR\206%*i\303\220\204IiY\242" + "\244eH\222\245\224\264%Q\22eC\0\226\274\30\273x\134Y<\134\264\60\31\6\255<\14Zy\70" + "\207\303A\16\1\226\276\35\273x\334I\64DI\232\14C\64eI)\214\206\251-I\206\245\251\30\345" + "\303\0\226\304\37\273x|\345(\211\206\203\224%a\244dI\64(\245$*\15K\226\204I\333\220\14" + "\2\226\306\33\273x|I\236\245\303A\211\362a\320\242|\30\264(\35\16ZR\233\242\1\226\314\37\273" + "x\134I\224&\215I\62,\203\22%\225a\351\224T\206\245S\62(\221\224\14r\10\226\350\30\273x" + "\34\17j\216\305\303)+%\235\42O\225NY)\213\24\0\226\352\31\273x<\303\71\35\36CEI" + "\224\34\35\356X\66\14:\26\15\27\0\226\366\30\273x<\303\71\35\236\222R\70k\222\226I\303\220C" + "\371\216i\0\226\367\30\273x<\303\71\35\36CEI\224\64\36NYi\70e\245\341\2\226\373\30\273" + "x<\303\71\35^\242J\62\234\262\322p\312J\303\71L\207\1\227\0\31\273x<\303\71\35^\224D" + "I\323\341 \346\303\251\22\265D-\211\2\227\6\34\273x<\303\71\35^\242\312\240\14Z\30.\203\230" + "\205\311\60H\71\242\14\203\0\227\23\33\273x<\303\71\35^\242J\62\15Q\36\15\311\20\345\321p\214" + "\262!\33\4\227\36\32\273x<\303\71\35\236\222\322\260\14Q\61\32Na\24\15IT\325\242I\227\62" + "\36\273x<\303\71\35\236\222\322 \15I\224H\311\220\211\221\264\34\222Z\224\14\321\220\0\227\70\34\273" + "x<\303\71\35\236\222\322p\220*Q\62(C\322)\31\16Y)\213\42\5\227R\27\273x\274\361p" + "\316\207!O\207\203\26\246\303\32\246\303\32F\0\227Y\37\273x\134a\66,[%\33\222!\13\223d" + "\70(Q%R\222!J\244\60*&\66\0\227^\34\273x\234I\216\24\7e\20\223\34\251\16\311\220" + "&\71R\34\224ALr\244\10\227`\34\273x\134\365a\220\262t\70Hi\70\14q\22\16\312 &" + "\341\240\14b\22\2\227b\30\272y\34\17a\216\304\303A*IC$\225\244!\222J\303;\22\227i" + "\30\273x|\265\341\240\225\7\35\311\207!\214\212\303\220\247\303AM\1\227\215\35\273x<\265l\70(" + "\215\311\226\206\331\360RJ\222A\211\262P\32\244$\213\264\0\227\363\31\273x\274\361p\314\362$\34\16" + ":<\14a\32\16C\230\206\303\20\1\227\365\34\273x\134Y\70(a\226\14J\343\260dy\64\254Z" + "\244\14\203\246\245\303\246\0\230\5\31\273x\274\303AJ\243a*F\321\60\25\243\341\240\205\351\60G\251" + "\30\230\30\36\273x|\311\60\211Y\224\14K\244\225\206C\222\205\311\240\224\262(\33\264\250\230\204\1\230" + "^\36\273x\34IeP\306\332pH\262d\32\226\266(\33\16I\26e\203RKj[\0\230o\42" + "\273x<\203\62$Y\224\15\312\220dI\224\14\312\220D\211\24)\311\220tJ\224aH\372\267\0\230" + "u\31\273x\34\17j>\14a\32F\305\250\30\25#%\216\342P\222\23\0\230y\32\273x\274\303A" + "J\243a*F\225\250%j\211\242!\211V\35\211R\61\230\177\35\273x\134\331 \245\321\240\14R\226" + ")]\224.\303\322\224%\245$\13\265$\326\2\230\206\33\273x|\321\240\205\225(\224\206!\252\305I" + "eH\32\223\266\260%\214\262\0\230\221\37\273x|\321\240\24\263d\30\224R\66\14J-J\272(-" + "JE\252\224\302$\321\264\0\230\230!\273x Date: Thu, 26 Sep 2024 22:14:26 +0800 Subject: [PATCH 2/6] Fixed #281: Add Go Sleep menu in settings --- .../app/settings/scene/settings_scene_main.c | 6 + fw/application/src/i18n/de_DE.c | 1 + fw/application/src/i18n/en_US.c | 1 + fw/application/src/i18n/es_ES.c | 1 + fw/application/src/i18n/fr_FR.c | 1 + fw/application/src/i18n/hu_HU.c | 1 + fw/application/src/i18n/it_IT.c | 1 + fw/application/src/i18n/ja_JP.c | 1 + fw/application/src/i18n/nl_NL.c | 1 + fw/application/src/i18n/pt_BR.c | 1 + fw/application/src/i18n/ru_RU.c | 1 + fw/application/src/i18n/string_id.h | 1 + fw/application/src/i18n/zh_Hans.c | 1 + fw/application/src/i18n/zh_TW.c | 1 + .../src/mui/u8g2_font_wqy12_t_gb2312a.c | 272 +++++++++--------- fw/application/src/utils.c | 26 +- fw/application/src/utils2.h | 10 +- fw/data/i18n.csv | 1 + 18 files changed, 173 insertions(+), 155 deletions(-) diff --git a/fw/application/src/app/settings/scene/settings_scene_main.c b/fw/application/src/app/settings/scene/settings_scene_main.c index 3ccf26d7..f66435fd 100644 --- a/fw/application/src/app/settings/scene/settings_scene_main.c +++ b/fw/application/src/app/settings/scene/settings_scene_main.c @@ -19,6 +19,7 @@ enum settings_main_menu_t { SETTINGS_MAIN_MENU_SHOW_MEM_USAGE, SETTINGS_MAIN_MENU_SLEEP_TIMEOUT, SETTINGS_MAIN_MENU_ANIM_ENABLED, + SETTINGS_MAIN_MENU_GO_SLEEP, SETTINGS_MAIN_MENU_DFU, SETTINGS_MAIN_MENU_REBOOT, SETTINGS_MAIN_MENU_RESET_DEFAULT, @@ -84,6 +85,10 @@ static void settings_scene_main_list_view_on_selected(mui_list_view_event_t even mui_scene_dispatcher_next_scene(app->p_scene_dispatcher, SETTINGS_SCENE_LANGUAGE); break; + case SETTINGS_MAIN_MENU_GO_SLEEP: + go_sleep(); + break; + case SETTINGS_MAIN_MENU_DFU: enter_dfu(); break; @@ -205,6 +210,7 @@ static void settings_scene_main_reload(void *user_data) { mui_list_view_add_item_ext(app->p_list_view, 0xe1c9, _T(APP_SET_SLEEP_TIMEOUT), txt, (void *)SETTINGS_MAIN_MENU_SLEEP_TIMEOUT); + mui_list_view_add_item(app->p_list_view, 0xe1c9, _T(APP_SET_GO_SLEEP), (void *)SETTINGS_MAIN_MENU_GO_SLEEP); mui_list_view_add_item(app->p_list_view, 0xe1ca, _T(APP_SET_DFU), (void *)SETTINGS_MAIN_MENU_DFU); mui_list_view_add_item(app->p_list_view, 0xe1cb, _T(APP_SET_REBOOT), (void *)SETTINGS_MAIN_MENU_REBOOT); mui_list_view_add_item(app->p_list_view, 0xe1ce, _T(APP_SET_RESET_DEFAULT), diff --git a/fw/application/src/i18n/de_DE.c b/fw/application/src/i18n/de_DE.c index 9b58ea72..9fd7ad18 100644 --- a/fw/application/src/i18n/de_DE.c +++ b/fw/application/src/i18n/de_DE.c @@ -26,6 +26,7 @@ const char * const lang_de_DE[_L_COUNT] = { [_L_APP_SET_HIBERNATE] = "Schnelles Aufwachen", [_L_APP_SET_SLEEP_TIMEOUT] = "Standby nach", [_L_APP_SET_LANGUAGE] = "Sprache", + [_L_APP_SET_GO_SLEEP] = "", [_L_APP_SET_DFU] = "Firmw. Aktualisierung", [_L_APP_SET_REBOOT] = "System Neustart", [_L_APP_SET_RESET_DEFAULT] = "Standardeinstellungen", diff --git a/fw/application/src/i18n/en_US.c b/fw/application/src/i18n/en_US.c index d452ecc4..658a74d0 100644 --- a/fw/application/src/i18n/en_US.c +++ b/fw/application/src/i18n/en_US.c @@ -26,6 +26,7 @@ const char * const lang_en_US[_L_COUNT] = { [_L_APP_SET_HIBERNATE] = "Fast Wakeup", [_L_APP_SET_SLEEP_TIMEOUT] = "Sleep Timeout", [_L_APP_SET_LANGUAGE] = "Language", + [_L_APP_SET_GO_SLEEP] = "Go Sleep", [_L_APP_SET_DFU] = "Firmware Update", [_L_APP_SET_REBOOT] = "System Reboot", [_L_APP_SET_RESET_DEFAULT] = "Reset Default Setting", diff --git a/fw/application/src/i18n/es_ES.c b/fw/application/src/i18n/es_ES.c index b3e737c9..977ba09b 100644 --- a/fw/application/src/i18n/es_ES.c +++ b/fw/application/src/i18n/es_ES.c @@ -26,6 +26,7 @@ const char * const lang_es_ES[_L_COUNT] = { [_L_APP_SET_HIBERNATE] = "Hibernar", [_L_APP_SET_SLEEP_TIMEOUT] = "Dormir en:", [_L_APP_SET_LANGUAGE] = "Idioma", + [_L_APP_SET_GO_SLEEP] = "", [_L_APP_SET_DFU] = "Actualizar firmware", [_L_APP_SET_REBOOT] = "Reiniciar", [_L_APP_SET_RESET_DEFAULT] = "Restablecer config.", diff --git a/fw/application/src/i18n/fr_FR.c b/fw/application/src/i18n/fr_FR.c index 73dc43b5..f6696005 100644 --- a/fw/application/src/i18n/fr_FR.c +++ b/fw/application/src/i18n/fr_FR.c @@ -26,6 +26,7 @@ const char * const lang_fr_FR[_L_COUNT] = { [_L_APP_SET_HIBERNATE] = "Réveil Rapide", [_L_APP_SET_SLEEP_TIMEOUT] = "Délai de mise en veille", [_L_APP_SET_LANGUAGE] = "Langue", + [_L_APP_SET_GO_SLEEP] = "", [_L_APP_SET_DFU] = "Mise à Jour du Micrologiciel", [_L_APP_SET_REBOOT] = "Redémarrage du Système", [_L_APP_SET_RESET_DEFAULT] = "Rétablir les Paramètres par Défaut", diff --git a/fw/application/src/i18n/hu_HU.c b/fw/application/src/i18n/hu_HU.c index 62145bfd..f66c057c 100644 --- a/fw/application/src/i18n/hu_HU.c +++ b/fw/application/src/i18n/hu_HU.c @@ -26,6 +26,7 @@ const char * const lang_hu_HU[_L_COUNT] = { [_L_APP_SET_HIBERNATE] = "Gyors Ébresztés", [_L_APP_SET_SLEEP_TIMEOUT] = "Alvási Időkorlát", [_L_APP_SET_LANGUAGE] = "Nyelv", + [_L_APP_SET_GO_SLEEP] = "", [_L_APP_SET_DFU] = "Firmware Frissítés", [_L_APP_SET_REBOOT] = "Rendszer Újraindítása", [_L_APP_SET_RESET_DEFAULT] = "Alapért. Beállítás Visszaállítása", diff --git a/fw/application/src/i18n/it_IT.c b/fw/application/src/i18n/it_IT.c index ff1cda27..34fa8f7b 100644 --- a/fw/application/src/i18n/it_IT.c +++ b/fw/application/src/i18n/it_IT.c @@ -26,6 +26,7 @@ const char * const lang_it_IT[_L_COUNT] = { [_L_APP_SET_HIBERNATE] = "Risveglio rapido", [_L_APP_SET_SLEEP_TIMEOUT] = "Timeout di sospensione", [_L_APP_SET_LANGUAGE] = "Lingua", + [_L_APP_SET_GO_SLEEP] = "", [_L_APP_SET_DFU] = "Aggiornamento firmware", [_L_APP_SET_REBOOT] = "Riavvio del sistema", [_L_APP_SET_RESET_DEFAULT] = "Ripristina impostazioni predefinite", diff --git a/fw/application/src/i18n/ja_JP.c b/fw/application/src/i18n/ja_JP.c index ed3eb507..b9db0380 100644 --- a/fw/application/src/i18n/ja_JP.c +++ b/fw/application/src/i18n/ja_JP.c @@ -26,6 +26,7 @@ const char * const lang_ja_JP[_L_COUNT] = { [_L_APP_SET_HIBERNATE] = "高速起動", [_L_APP_SET_SLEEP_TIMEOUT] = "スリープタイムアウト", [_L_APP_SET_LANGUAGE] = "言語", + [_L_APP_SET_GO_SLEEP] = "", [_L_APP_SET_DFU] = "ファームウェア更新", [_L_APP_SET_REBOOT] = "システム再起動", [_L_APP_SET_RESET_DEFAULT] = "デフォルト設定に戻す", diff --git a/fw/application/src/i18n/nl_NL.c b/fw/application/src/i18n/nl_NL.c index c7e8562c..c199cc6e 100644 --- a/fw/application/src/i18n/nl_NL.c +++ b/fw/application/src/i18n/nl_NL.c @@ -26,6 +26,7 @@ const char * const lang_nl_NL[_L_COUNT] = { [_L_APP_SET_HIBERNATE] = "Snel Ontwaken", [_L_APP_SET_SLEEP_TIMEOUT] = "Time-out Slaapstand", [_L_APP_SET_LANGUAGE] = "Taal", + [_L_APP_SET_GO_SLEEP] = "", [_L_APP_SET_DFU] = "Firmware Bijwerken", [_L_APP_SET_REBOOT] = "Systeem Herstarten", [_L_APP_SET_RESET_DEFAULT] = "Terugzetten Naar Standaardwaarden", diff --git a/fw/application/src/i18n/pt_BR.c b/fw/application/src/i18n/pt_BR.c index 8b9976a4..94973874 100644 --- a/fw/application/src/i18n/pt_BR.c +++ b/fw/application/src/i18n/pt_BR.c @@ -26,6 +26,7 @@ const char * const lang_pt_BR[_L_COUNT] = { [_L_APP_SET_HIBERNATE] = "Despertar Rápido", [_L_APP_SET_SLEEP_TIMEOUT] = "Tempo Limite de Suspensão", [_L_APP_SET_LANGUAGE] = "Idioma", + [_L_APP_SET_GO_SLEEP] = "", [_L_APP_SET_DFU] = "Atualização de Firmware", [_L_APP_SET_REBOOT] = "Reinicialização do Sistema", [_L_APP_SET_RESET_DEFAULT] = "Restaurar Configurações Padrão", diff --git a/fw/application/src/i18n/ru_RU.c b/fw/application/src/i18n/ru_RU.c index 3c406c2b..ad09c9ba 100644 --- a/fw/application/src/i18n/ru_RU.c +++ b/fw/application/src/i18n/ru_RU.c @@ -26,6 +26,7 @@ const char * const lang_ru_RU[_L_COUNT] = { [_L_APP_SET_HIBERNATE] = "Гибернация", [_L_APP_SET_SLEEP_TIMEOUT] = "Таймаут сна", [_L_APP_SET_LANGUAGE] = "Язык", + [_L_APP_SET_GO_SLEEP] = "", [_L_APP_SET_DFU] = "Обновление ПО", [_L_APP_SET_REBOOT] = "Перезагрузка", [_L_APP_SET_RESET_DEFAULT] = "Сброс настроек", diff --git a/fw/application/src/i18n/string_id.h b/fw/application/src/i18n/string_id.h index e643be5c..0e77b56f 100644 --- a/fw/application/src/i18n/string_id.h +++ b/fw/application/src/i18n/string_id.h @@ -27,6 +27,7 @@ typedef enum { _L_APP_SET_HIBERNATE, _L_APP_SET_SLEEP_TIMEOUT, _L_APP_SET_LANGUAGE, + _L_APP_SET_GO_SLEEP, _L_APP_SET_DFU, _L_APP_SET_REBOOT, _L_APP_SET_RESET_DEFAULT, diff --git a/fw/application/src/i18n/zh_Hans.c b/fw/application/src/i18n/zh_Hans.c index 3c3d1183..719a6087 100644 --- a/fw/application/src/i18n/zh_Hans.c +++ b/fw/application/src/i18n/zh_Hans.c @@ -26,6 +26,7 @@ const char * const lang_zh_Hans[_L_COUNT] = { [_L_APP_SET_HIBERNATE] = "快速唤醒", [_L_APP_SET_SLEEP_TIMEOUT] = "休眠时间", [_L_APP_SET_LANGUAGE] = "系统语言", + [_L_APP_SET_GO_SLEEP] = "进入休眠", [_L_APP_SET_DFU] = "固件更新", [_L_APP_SET_REBOOT] = "重启设备", [_L_APP_SET_RESET_DEFAULT] = "重置默认配置", diff --git a/fw/application/src/i18n/zh_TW.c b/fw/application/src/i18n/zh_TW.c index 3ea80660..6df779ee 100644 --- a/fw/application/src/i18n/zh_TW.c +++ b/fw/application/src/i18n/zh_TW.c @@ -26,6 +26,7 @@ const char * const lang_zh_TW[_L_COUNT] = { [_L_APP_SET_HIBERNATE] = "快速喚醒", [_L_APP_SET_SLEEP_TIMEOUT] = "休眠時間", [_L_APP_SET_LANGUAGE] = "系統語言", + [_L_APP_SET_GO_SLEEP] = "進入休眠", [_L_APP_SET_DFU] = "軟體升級", [_L_APP_SET_REBOOT] = "重啟設備", [_L_APP_SET_RESET_DEFAULT] = "重置默認配置", diff --git a/fw/application/src/mui/u8g2_font_wqy12_t_gb2312a.c b/fw/application/src/mui/u8g2_font_wqy12_t_gb2312a.c index b733fd5d..eb9a131f 100644 --- a/fw/application/src/mui/u8g2_font_wqy12_t_gb2312a.c +++ b/fw/application/src/mui/u8g2_font_wqy12_t_gb2312a.c @@ -6,12 +6,12 @@ /* Fontname: -wenquanyi-wenquanyi bitmap song-medium-r-normal--12-120-75-75-P-119-ISO10646-1 Copyright: (null) - Glyphs: 1624/30503 + Glyphs: 1625/30503 BBX Build Mode: 0 */ #ifdef U8G2_USE_LARGE_FONTS -const uint8_t u8g2_font_wqy12_t_gb2312a[40228] U8G2_FONT_SECTION("u8g2_font_wqy12_t_gb2312a") = - "X\0\3\2\4\4\4\4\5\14\15\0\376\10\376\12\377\1d\2\331\5t \5\0\230\26!\7\221\212" +const uint8_t u8g2_font_wqy12_t_gb2312a[40254] U8G2_FONT_SECTION("u8g2_font_wqy12_t_gb2312a") = + "Y\0\3\2\4\4\4\4\5\14\15\0\376\10\376\12\377\1d\2\331\5t \5\0\230\26!\7\221\212" "\26\247\0\42\7\64\371\26\221)#\16\226\210\67Q\313\260D\275\14K\324\2$\17\245xV\331RQ" "\62QK\224\312\26\1%\20\226x\66Q\322EK\302\64\211\222.Z\2&\16\205\210VY\22%Y" "eJ\242H\11'\6\61\372\25\3(\13\263yVI\224D\335\242,)\14\263y\26Y\224E]\242" @@ -1136,137 +1136,137 @@ const uint8_t u8g2_font_wqy12_t_gb2312a[40228] U8G2_FONT_SECTION("u8g2_font_wqy1 "\33\273x\65&\215Z\0\226b\35\273x\34C\24FY%\31N\251\22\15J" - "\224G\303!)U\242\212V\221R\1\226d\36\273x\34CV\252DI\224%R\262(a\26\15\247" - ",\233\222\266(\222\262H\325\0\226\206 \273x\34C\222F\311\240T\264D\234\222D\233\222Z\224\14" - "\7)K\242A\211\263h\30\4\226\217 \273x\34c\226(\303\220\64j\203R\213\222\344\220tJ\244" - "dH\262$J\62\65\212\6\1\226\220\42\273x\34C\62D\225\250\222\14\213\222&\245A\211\322$J" - "\6E\211\302$Q\232\222(\21\207\10\226\250!\273x\34CVR\206%*i\303\220\204IiY\242" - "\244eH\222\245\224\264%Q\22eC\0\226\274\30\273x\134Y<\134\264\60\31\6\255<\14Zy\70" - "\207\303A\16\1\226\276\35\273x\334I\64DI\232\14C\64eI)\214\206\251-I\206\245\251\30\345" - "\303\0\226\304\37\273x|\345(\211\206\203\224%a\244dI\64(\245$*\15K\226\204I\333\220\14" - "\2\226\306\33\273x|I\236\245\303A\211\362a\320\242|\30\264(\35\16ZR\233\242\1\226\314\37\273" - "x\134I\224&\215I\62,\203\22%\225a\351\224T\206\245S\62(\221\224\14r\10\226\350\30\273x" - "\34\17j\216\305\303)+%\235\42O\225NY)\213\24\0\226\352\31\273x<\303\71\35\36CEI" - "\224\34\35\356X\66\14:\26\15\27\0\226\366\30\273x<\303\71\35\236\222R\70k\222\226I\303\220C" - "\371\216i\0\226\367\30\273x<\303\71\35\36CEI\224\64\36NYi\70e\245\341\2\226\373\30\273" - "x<\303\71\35^\242J\62\234\262\322p\312J\303\71L\207\1\227\0\31\273x<\303\71\35^\224D" - "I\323\341 \346\303\251\22\265D-\211\2\227\6\34\273x<\303\71\35^\242\312\240\14Z\30.\203\230" - "\205\311\60H\71\242\14\203\0\227\23\33\273x<\303\71\35^\242J\62\15Q\36\15\311\20\345\321p\214" - "\262!\33\4\227\36\32\273x<\303\71\35\236\222\322\260\14Q\61\32Na\24\15IT\325\242I\227\62" - "\36\273x<\303\71\35\236\222\322 \15I\224H\311\220\211\221\264\34\222Z\224\14\321\220\0\227\70\34\273" - "x<\303\71\35\236\222\322p\220*Q\62(C\322)\31\16Y)\213\42\5\227R\27\273x\274\361p" - "\316\207!O\207\203\26\246\303\32\246\303\32F\0\227Y\37\273x\134a\66,[%\33\222!\13\223d" - "\70(Q%R\222!J\244\60*&\66\0\227^\34\273x\234I\216\24\7e\20\223\34\251\16\311\220" - "&\71R\34\224ALr\244\10\227`\34\273x\134\365a\220\262t\70Hi\70\14q\22\16\312 &" - "\341\240\14b\22\2\227b\30\272y\34\17a\216\304\303A*IC$\225\244!\222J\303;\22\227i" - "\30\273x|\265\341\240\225\7\35\311\207!\214\212\303\220\247\303AM\1\227\215\35\273x<\265l\70(" - "\215\311\226\206\331\360RJ\222A\211\262P\32\244$\213\264\0\227\363\31\273x\274\361p\314\362$\34\16" - ":<\14a\32\16C\230\206\303\20\1\227\365\34\273x\134Y\70(a\226\14J\343\260dy\64\254Z" - "\244\14\203\246\245\303\246\0\230\5\31\273x\274\303AJ\243a*F\321\60\25\243\341\240\205\351\60G\251" - "\30\230\30\36\273x|\311\60\211Y\224\14K\244\225\206C\222\205\311\240\224\262(\33\264\250\230\204\1\230" - "^\36\273x\34IeP\306\332pH\262d\32\226\266(\33\16I\26e\203RKj[\0\230o\42" - "\273x<\203\62$Y\224\15\312\220dI\224\14\312\220D\211\24)\311\220tJ\224aH\372\267\0\230" - "u\31\273x\34\17j>\14a\32F\305\250\30\25#%\216\342P\222\23\0\230y\32\273x\274\303A" - "J\243a*F\225\250%j\211\242!\211V\35\211R\61\230\177\35\273x\134\331 \245\321\240\14R\226" - ")]\224.\303\322\224%\245$\13\265$\326\2\230\206\33\273x|\321\240\205\225(\224\206!\252\305I" - "eH\32\223\266\260%\214\262\0\230\221\37\273x|\321\240\24\263d\30\224R\66\14J-J\272(-" - "JE\252\224\302$\321\264\0\230\230!\273x\65&\215Z\0\226b\35\273x\34C\24FY%\31N\251\22\15J\224G\303!)U" + "\242\212V\221R\1\226d\36\273x\34CV\252DI\224%R\262(a\26\15\247,\233\222\266(\222" + "\262H\325\0\226\206 \273x\34C\222F\311\240T\264D\234\222D\233\222Z\224\14\7)K\242A\211" + "\263h\30\4\226\217 \273x\34c\226(\303\220\64j\203R\213\222\344\220tJ\244dH\262$J\62" + "\65\212\6\1\226\220\42\273x\34C\62D\225\250\222\14\213\222&\245A\211\322$J\6E\211\302$Q" + "\232\222(\21\207\10\226\250!\273x\34CVR\206%*i\303\220\204IiY\242\244eH\222\245\224" + "\264%Q\22eC\0\226\274\30\273x\134Y<\134\264\60\31\6\255<\14Zy\70\207\303A\16\1\226" + "\276\35\273x\334I\64DI\232\14C\64eI)\214\206\251-I\206\245\251\30\345\303\0\226\304\37\273" + "x|\345(\211\206\203\224%a\244dI\64(\245$*\15K\226\204I\333\220\14\2\226\306\33\273x" + "|I\236\245\303A\211\362a\320\242|\30\264(\35\16ZR\233\242\1\226\314\37\273x\134I\224&\215" + "I\62,\203\22%\225a\351\224T\206\245S\62(\221\224\14r\10\226\350\30\273x\34\17j\216\305\303" + ")+%\235\42O\225NY)\213\24\0\226\352\31\273x<\303\71\35\36CEI\224\34\35\356X\66" + "\14:\26\15\27\0\226\366\30\273x<\303\71\35\236\222R\70k\222\226I\303\220C\371\216i\0\226\367" + "\30\273x<\303\71\35\36CEI\224\64\36NYi\70e\245\341\2\226\373\30\273x<\303\71\35^" + "\242J\62\234\262\322p\312J\303\71L\207\1\227\0\31\273x<\303\71\35^\224DI\323\341 \346\303" + "\251\22\265D-\211\2\227\6\34\273x<\303\71\35^\242\312\240\14Z\30.\203\230\205\311\60H\71\242" + "\14\203\0\227\23\33\273x<\303\71\35^\242J\62\15Q\36\15\311\20\345\321p\214\262!\33\4\227\36" + "\32\273x<\303\71\35\236\222\322\260\14Q\61\32Na\24\15IT\325\242I\227\62\36\273x<\303\71" + "\35\236\222\322 \15I\224H\311\220\211\221\264\34\222Z\224\14\321\220\0\227\70\34\273x<\303\71\35\236" + "\222\322p\220*Q\62(C\322)\31\16Y)\213\42\5\227R\27\273x\274\361p\316\207!O\207\203" + "\26\246\303\32\246\303\32F\0\227Y\37\273x\134a\66,[%\33\222!\13\223d\70(Q%R\222" + "!J\244\60*&\66\0\227^\34\273x\234I\216\24\7e\20\223\34\251\16\311\220&\71R\34\224A" + "Lr\244\10\227`\34\273x\134\365a\220\262t\70Hi\70\14q\22\16\312 &\341\240\14b\22\2" + "\227b\30\272y\34\17a\216\304\303A*IC$\225\244!\222J\303;\22\227i\30\273x|\265\341" + "\240\225\7\35\311\207!\214\212\303\220\247\303AM\1\227\215\35\273x<\265l\70(\215\311\226\206\331\360" + "RJ\222A\211\262P\32\244$\213\264\0\227\363\31\273x\274\361p\314\362$\34\16:<\14a\32\16" + "C\230\206\303\20\1\227\365\34\273x\134Y\70(a\226\14J\343\260dy\64\254Z\244\14\203\246\245\303" + "\246\0\230\5\31\273x\274\303AJ\243a*F\321\60\25\243\341\240\205\351\60G\251\30\230\30\36\273x" + "|\311\60\211Y\224\14K\244\225\206C\222\205\311\240\224\262(\33\264\250\230\204\1\230^\36\273x\34I" + "eP\306\332pH\262d\32\226\266(\33\16I\26e\203RKj[\0\230o\42\273x<\203\62$" + "Y\224\15\312\220dI\224\14\312\220D\211\24)\311\220tJ\224aH\372\267\0\230u\31\273x\34\17" + "j>\14a\32F\305\250\30\25#%\216\342P\222\23\0\230y\32\273x\274\303AJ\243a*F\225" + "\250%j\211\242!\211V\35\211R\61\230\177\35\273x\134\331 \245\321\240\14R\226)]\224.\303\322" + "\224%\245$\13\265$\326\2\230\206\33\273x|\321\240\205\225(\224\206!\252\305IeH\32\223\266\260" + "%\214\262\0\230\221\37\273x|\321\240\24\263d\30\224R\66\14J-J\272(-JE\252\224\302$" + "\321\264\0\230\230!\273xDEVICEID[0]), 4); memcpy(p_device_id + 4, &(NRF_FICR->DEVICEID[1]), 4); } -void int32_to_bytes_le(uint32_t val, uint8_t* data) { - data[0] = val>>24; - data[1] = val>>16; - data[2] = val>>8; - data[3] = val>>0; +void int32_to_bytes_le(uint32_t val, uint8_t *data) { + data[0] = val >> 24; + data[1] = val >> 16; + data[2] = val >> 8; + data[3] = val >> 0; } void enter_dfu() { @@ -39,6 +39,6 @@ void enter_dfu() { sd_nvic_SystemReset(); } -void system_reboot(){ - sd_nvic_SystemReset(); -} \ No newline at end of file +void system_reboot() { sd_nvic_SystemReset(); } + +void go_sleep() { nrf_pwr_mgmt_shutdown(NRF_PWR_MGMT_SHUTDOWN_GOTO_SYSOFF); } \ No newline at end of file diff --git a/fw/application/src/utils2.h b/fw/application/src/utils2.h index 77fa0bad..f990f5bc 100644 --- a/fw/application/src/utils2.h +++ b/fw/application/src/utils2.h @@ -8,16 +8,14 @@ #ifndef UTILS2_H_ #define UTILS2_H_ -#include #include "sdk_errors.h" +#include ret_code_t utils_rand_bytes(uint8_t rand[], uint8_t bytes); -void int32_to_bytes_le(uint32_t val, uint8_t* data) ; -void utils_get_device_id(uint8_t* p_device_id); +void int32_to_bytes_le(uint32_t val, uint8_t *data); +void utils_get_device_id(uint8_t *p_device_id); void enter_dfu(); void system_reboot(); - - - +void go_sleep(); #endif /* UTILS_H_ */ diff --git a/fw/data/i18n.csv b/fw/data/i18n.csv index 6a187eed..522e4fa7 100644 --- a/fw/data/i18n.csv +++ b/fw/data/i18n.csv @@ -25,6 +25,7 @@ _L_APP_SET_SHOW_MEM_USAGE,Memory Used,内存使用率,記憶體使用率,Estad. _L_APP_SET_HIBERNATE,Fast Wakeup,快速唤醒,快速喚醒,Hibernar,Gyors Ébresztés,Schnelles Aufwachen,Réveil Rapide,Snel Ontwaken,Despertar Rápido,高速起動,Risveglio rapido,Гибернация _L_APP_SET_SLEEP_TIMEOUT,Sleep Timeout,休眠时间,休眠時間,Dormir en:,Alvási Időkorlát,Standby nach,Délai de mise en veille,Time-out Slaapstand,Tempo Limite de Suspensão,スリープタイムアウト,Timeout di sospensione,Таймаут сна _L_APP_SET_LANGUAGE,Language,系统语言,系統語言,Idioma,Nyelv,Sprache,Langue,Taal,Idioma,言語,Lingua,Язык +_L_APP_SET_GO_SLEEP,Go Sleep,进入休眠,進入休眠,,,,,,,,, _L_APP_SET_DFU,Firmware Update,固件更新,軟體升級,Actualizar firmware,Firmware Frissítés,Firmw. Aktualisierung,Mise à Jour du Micrologiciel,Firmware Bijwerken,Atualização de Firmware,ファームウェア更新,Aggiornamento firmware,Обновление ПО _L_APP_SET_REBOOT,System Reboot,重启设备,重啟設備,Reiniciar,Rendszer Újraindítása,System Neustart,Redémarrage du Système,Systeem Herstarten,Reinicialização do Sistema,システム再起動,Riavvio del sistema,Перезагрузка _L_APP_SET_RESET_DEFAULT,Reset Default Setting,重置默认配置,重置默認配置,Restablecer config.,Alapért. Beállítás Visszaállítása,Standardeinstellungen,Rétablir les Paramètres par Défaut,Terugzetten Naar Standaardwaarden,Restaurar Configurações Padrão,デフォルト設定に戻す,Ripristina impostazioni predefinite,Сброс настроек From 0eaa1a4df55bcda049f2259764b0430b06294952 Mon Sep 17 00:00:00 2001 From: solosky Date: Tue, 8 Oct 2024 22:22:59 +0800 Subject: [PATCH 3/6] Fixed #282: add more chinese glyphs --- .../src/mui/u8g2_font_wqy12_t_gb2312a.c | 2387 +++++++++-------- fw/data/chinese3.txt | 4 +- 2 files changed, 1217 insertions(+), 1174 deletions(-) diff --git a/fw/application/src/mui/u8g2_font_wqy12_t_gb2312a.c b/fw/application/src/mui/u8g2_font_wqy12_t_gb2312a.c index eb9a131f..89ea1312 100644 --- a/fw/application/src/mui/u8g2_font_wqy12_t_gb2312a.c +++ b/fw/application/src/mui/u8g2_font_wqy12_t_gb2312a.c @@ -6,12 +6,12 @@ /* Fontname: -wenquanyi-wenquanyi bitmap song-medium-r-normal--12-120-75-75-P-119-ISO10646-1 Copyright: (null) - Glyphs: 1625/30503 + Glyphs: 1671/30503 BBX Build Mode: 0 */ #ifdef U8G2_USE_LARGE_FONTS -const uint8_t u8g2_font_wqy12_t_gb2312a[40254] U8G2_FONT_SECTION("u8g2_font_wqy12_t_gb2312a") = - "Y\0\3\2\4\4\4\4\5\14\15\0\376\10\376\12\377\1d\2\331\5t \5\0\230\26!\7\221\212" +const uint8_t u8g2_font_wqy12_t_gb2312a[41548] U8G2_FONT_SECTION("u8g2_font_wqy12_t_gb2312a") = + "\207\0\3\2\4\4\4\4\5\14\15\0\376\10\376\12\377\1d\2\331\5t \5\0\230\26!\7\221\212" "\26\247\0\42\7\64\371\26\221)#\16\226\210\67Q\313\260D\275\14K\324\2$\17\245xV\331RQ" "\62QK\224\312\26\1%\20\226x\66Q\322EK\302\64\211\222.Z\2&\16\205\210VY\22%Y" "eJ\242H\11'\6\61\372\25\3(\13\263yVI\224D\335\242,)\14\263y\26Y\224E]\242" @@ -55,452 +55,467 @@ const uint8_t u8g2_font_wqy12_t_gb2312a[40254] U8G2_FONT_SECTION("u8g2_font_wqy1 "/\331\60\204\351\20\353\14\205\210\66\365%\33\206\60\35\2\355\11\222\210\63Z\322\13\0\361\13\225\210\66" "\246xH\62o\1\363\13\225\210vud\311\334\222\5\365\16\246\210\66\222\35\31\222\320c\62$\0\366" "\13\205\210\66\365%sK\26\0\371\13\225\210\66i\236yK\206\0\372\12\225\210v\365\314[\62\4\374" - "\12\205\210\66\345\314[\62\4\0\0\0\70\60\246\6 N\262\10DQ\263\12`T\11\12#Y}\12" - "C^\234\12@b\345\12\355gQ\13\1n\220\12\272w\355\12\256~\335\12\361\210c\12\243\217\70\12" - "\362\377\377\1M\14\205\210\66\373\222\271%\13\0\1Q\15\225\210VI\373\222\271%\13\0\4\1\15\245" - "\210\66\345a\14\207\261\70\10\4\20\16\205\210VK\224D\232\66\14\231\26\4\21\15\205\210\26\307pH" - "\62\333\240\0\4\22\16\205\210\26C\222i\203\222\331\6\5\4\23\11\205\210\26\307>\2\4\24\23\227x" - "XC\26eQ\26eQ-\312\222aP\3\4\27\16\205\210\66K\26Fj\250%\13\0\4\30\15\205" - "\210\26\231\323\222(\311\244\5\4\32\17\205\210\26\231\224\224\246J\224dZ\0\4\33\21\205\210VK\224" - "DI\224DI\224DZ\0\4\34\21\207\210\30\351\66dKE\251H\221\24\251\1\4\35\14\205\210\26" - "\231m\30\62\267\0\4\36\13\205\210\66K\346[\262\0\4\37\11\205\210\26\67\277\5\4 \15\205\210\26" - "C\222i\203\22\66\2\4!\14\205\210\66K&vK\26\0\4\42\12\205\210\26\203\24\366\11\4#\14" - "\205\210\26\231\267d\10\7\5\4$\21\207\210x\341\240D\221\24I\221T\31\304\14\4'\13\205\210\26" - "\231[\62\204\15\4-\16\205\210\66K\26&C\30j\311\2\4/\17\205\210\66\203\246%C\22%\221" - "\246\5\4\60\13d\210\65b\62DR\62\4\61\15\224\210u\211\222-\221S\242\0\4\62\15d\210\25" - "K\64$\221\64$\0\4\63\11d\210\25\203\326\15\4\64\17vxW[\222%Y\22U\206!\14\4" - "\65\14d\210\65J\64lQ\242\0\4\66\16g\210\30Q\245mK\232\42\251\0\4\67\13d\210\65J" - "T\224\22\5\4\70\15e\210\26\231\264$J\62i\1\4\71\16\225\210\66\265<\223\226DI&-\4" - ":\14d\210\25\221\222HII\12\4;\12d\210\65K\277H\1\4<\14f\210\27\341\64D\213\307" - "\0\4=\13d\210\25\221\64L\246\0\4>\13d\210\65J\344\224(\0\4\77\11d\210\25\203\344)" - "\4@\16\205h\26\211I\323&E\11C\0\4A\13d\210\65J\244\225\22\5\4B\12e\210\26\203" - "\24v\2\4C\14\204h\25\221\245I\312\242\14\4D\23\247hxq\70(Q$ER$U\6\61" - "\316\0\4E\14e\210\26YR\253\324\264\0\4F\20ux\26Q\22%Q\22%Q\62\210\1\4G" - "\12d\210\25\221)\331\12\4H\20g\210\30Q$ER$ER\64\14\2\4I\21xx\31Q%" - "\252D\225\250\22U\206A\17\4K\16f\210\27\241\70DR\42%C\24\4L\14d\210\25Y\266D" - "\322\220\0\4M\14d\210\65J\24iR\242\0\4N\17f\210\27\221R\32\42%R\42\13\0\4O" - "\14d\210\65C$%K\42\5\4Q\16\204\210\25Q\252D\303\26%\12\0 \23\10\33\311\34\17\2" - " \34\13E\376<\221\224(C\42 \35\14E\371\34\312\220(\221\224\0\60\1\10\63\210\34\231\24\60" - "\2\13D\213\10\60j\30\271y\134\71\224d\203\242\205RV\314\302(" - "\32\302L\253d\33\0\60k\26\251y\34\71\224M\211\264F\71\222#Y\230\24\265!\311\1\60n\24" - "\231\211|kR\213*Y&\205R\250\204Q\30k\0\60o\32\272y\334Y\234%\331\22\15Q\34\305" - "Q\34eC\224h\212\222%\245\15\60y\22\213\230\374I\216\24u$J\305\34\314\301\34\24\60~\26" - "\270z|a\66$C\236e\323\220\207C\226-Y\224\214\0\60\177\32\272y\30\273x\14aT\34\206\60*F\245\341 \245a\32\206\22\0Q\231\33\273x<\303!\311\21)\15\207" - "\65\307\206!\307\242aHr,Or(\3Q\233\30\272y\34\17:\22\306\303 \346H\224\16\203\34" - "\16\207\64\207B\0Q\234\32\273x\274\361pH\262P\323\302(\217jR\222%Y)\211RQ\213\3" - "Q\245\31\273x\34\337!e\30\222(\15\207!L\303a\310\323\341\240\325\326\1Q\260\33\273x\34\324,\315\322l\30\2T\16\32\273" - "x\374\333 \347\330p\312\261\34K\206-\11\243b\24\15K\26&\0T\21\30\272x\234\71\22\17\7" - "\35\221\206H*I%i\210tDG\344\1T\27\34\273x\234\303\62\244I\324\22\265DI\226D\311" - "\60D\261\64,\203\234c\371\2T\36\30\273x<\303\71\307\322\341\240Uk\303\245\232Di\70\14a" - "\32\1T&\32\273x\34\17j\16)\242\222%Z\230\346\303\240\305Y\234\15\203\26'\0T'\32\273" - "x\234\303\262DI\247\244S\322)i\31\226%N\352X\32\246\351\60T,\35\273x\374\210\62$[" - "\224\244Q\222F\311\60DI\24\15I\224Gq\226\206\325\10T/\32\272x\274\361\60Hq\24G\303" - " \345\320\60HjRM\222a\220\322\0TJ\31\273x\134\365(\37\6)\313\261t\70\350\360\60\204" - "i\230\206\303\20\1TX\31\273x\134\303\20\246\341\60\344\370p\312\243\254\224\225*Q\230e\353\0T" - "b\34\273x\234\303\262\204IcR\31\226\346\244mH*J\213\236d\245,\21\207\0Th\35\273x" - "\134\303)+%\203\22e\245\341\224G\311\240DI\226\224\6\245\216\350\210\0Ts\32\273x\374\331\220" - "\225\222A\211\262\322p\312\262!\232*\255Q\255\224g\0T}\32\273x\274\71\224\344Y\266\334\321!" - "\31\242J\324\22EC\22\265$z\10T\206\35\273x\274\71\66\134RE\31\22%\252(QE\211\206" - "d\210\262\244\224ca<\10T\214\32\273x\234\362\216e\303!\211\262R\64\225\224R\322I\312\242," - "\33\262\34T\232\32\273x\334\341\66$\245,\351)\11\263$K\242E[$\35\314uP\2T\301\26" - "\272y\134\303\330q\330\321!\32\244\222T\222J\203\64H\15T\315\33\273x\374\71\24.\303\240T\225" - "\312\242tQ\272\14I\262\204i\230\206\241\0T\345\31\272y\34\17y\66DYT\33\242h\70\344\331" - "\20eQm\210\362\11T\350\34\273x\234Q\64(\235\262R\62\14Q\22J\311pHB)\31\326\60" - "\15\323hT\352\37\273x|C\62,-J\27eP\224^\224AI\206\244E\351\61I\266(\11#" - "%\2T\356\36\273x\334\331\220\14K-\211\222\341\220da\22\15\312\222E\211\62Li\216\345\310\4" - "U$\34\273x\334\71\66$C\22\225\206!\211\222NI\313\220t\32\6=\207\222X\23U.\31\273" - "x\134Y<\234\262t\270\324\342a\320\312\303)\316\342l\30\24\0UF\35\273x\274\351p\320\212\303" - "\251\22U\262$\32NI\226D\311\240DI\226D\261\2U_\35\273x|\305A\11\263dH\6\245" - "\24*Q\262\224\222NI\251%*-\255Y\0Uf\33\273x\274I\66\265\14\207$J\223HJJ" - "IeQZ\224\346(\37\266\25U\232\33\273x\274C\64\265\224\262d\30\224\26\245ER\226R\70\14" - "r\222g\241\32U\234\31\273x\274\351pP\343\341\226\206\303\220f\331p\220\322\60\15\207!\2U\256" - "\34\272y\34C\64H%\251\64\34\224,\212\206A\312\242h\30\344p\70\244!\0U\267\34\273x\374" - "\331\62\14J\224t\31\6%\312\222\312pHR\245T\214\312I\254\11V\27\31\273x\134M\303S\26" - "e\203\232\305\211\226\15\203X\35\326\60\35&\0V\30\36\273x\334C\262\205I\62\14J\233\222\14K" - "\267!\211\6\245\253\322\24)R\62\14\2Vh \273x\34\273x\134\311\260\225\262R\62(\305,\231\262R\61RZ\244,\315\222" - ",\322\2W@\35\273x\134a\32\246a\66,i\224\14Q%\215\222\64J\322!\311\264$\36\6\1" - "WG\33\273x\134Y\234\305\321p\210\243b\224\225\222,\211\264h\323r,G\24\0WO\31\273x" - "\134\71\226\14C\224F\203\26VC\61S\62\245\64\265\347X\6WP\26\273x\274yT\214\212Q-" - "\351mK\343\341\234c\351p\20WW\35\273x\134a\32\246\321\240\14R\222\205I\26&Y\62\14\221" - "\226\211I\236\205j\0W[\32\273x\134\71\26\15Z\216\14\71\224\14C\24\246Y,\205Zq\30\304" - "\64W\203\32\273x\134Y\34\246\321p\320\221(+eM\331\22%b\222c\361\60\4W\213\36\273x" - "<\303\224%Q\222%Q\222\14\203\222%Q\222%a\24\231\363a\310\323\341 W\316\33\273x<\261" - "\24'\245\341\255\264\64%]\224DR\232\224D\251U\244\254\0W\337\33\273x\134\251\226&Q\62\34" - "\304\312RJ:%\213&F\232R\223\22\71\13W\372\30\273x|\305\341\230\305K\234\314Y\66\34\244" - "&eP\324t\70\10X\2\31\273x\134\255Imx\207\224aH\242\64\34\206<\37\6\71\35\16\2" - "XT\35\273x\134\265\312\60D\225\312\240\24\243\254\222,Q\216\15\203\62e\361 g\11\0X^\31" - "\273x\274\351\360\224E\311p\314\262\341\240U\243Z\62(q:\34\4X\203\35\273x\134a\232\14C" - "\224%\321p\220j\245A\213\262L\31\24\61\311\243$\23\5X\223\32\273x\34\17b\224\16C\230\206" - "\303\20\246\321p\220\232\224AQ\343\341\2X\231\37\273x\27\273x\274\351pP\363\250\30\325\222\336\266\60" - "\311\263\64\35\364\4YG\32\273x\274\361pM\362,\33\16:\22\16J\230%\341\240\344X\16I\0" - "YH\26\273x\274\351p\320\252%ePtt\70\347Q\255%\23\3YO\30\273x\274\361p\215\207" - "\203V\35\206H\313\244a\210\223<\13U\5YV\33\273x\34Q\26&\321\240%RfR\262\70\321" - "\241t\70\210I\254I\272\0YW\32\273x\234\361p\320\302pX\22%\316\6\71\37\16b\16\205\341" - "\60(\0Ye\31\273x\234\371pJ:ES\64\234\242\251\322e\70\210I\236e\353\0Ys\30\273" - "x\234\71\226c\361p\320\312Y\32\246K\16\351H\244\255\11\0Yy\36\273x\134a\32%\331\220$" - "S\222,Q\262\224\222NIe\213\222T\11\223Fu\20Y}\33\273x\134\71\226\15\207\60K\262\60" - "\311J\303\220\24C\261\222\225\262(\235\0Y\202 \273x\134\71\226#\203\62HI-JjI\224d" - "I\224d\221\224E\322\240DI\246c\0Y\231\34\273x\134a\32f\203\242d\211\22U\242JT\325" - "\242,\315\222\254\232\205\42\0Y\256\35\273x<\331\260d\341\60\204IeX\232\223&)i\222\22Q" - ")%QI\12\7Y\306\37\273x<\331 eR\62$MI-J\206S\42%Q\322$e\231\62" - "H\305$W\0Y\313\37\273x\134a\32f\203\22eI-J\206!\211\362$\32$)\213\222Z\22" - "%\303\232\5Y\354\34\273x\134\321\60\65\15S\226T\246\244S\322)\351\26%\233\22e\221T\34\6" - "Z\1\37\273x\374I\216D\311pH\322\60Y\242$j\31\206$J:ER\42E\312\22\205\1Z" - "\3\34\273x\134a\32fC\62HI\26&\303)\13\223,\215\6M\13\243Z\70\14Z\5 \273x" - "<\71\26\15\7)\311\222(\311\22\245\27KT\311\264$\314\222,\211\222(\33\206\0Z\34\42\273x" - "<\311\220,QR\31\226\212\222,\211\322\242$\203\222(}JZ\224\312RJ\242J\24\1ZZ\37" - "\273x\134\321\240E\245\341\240\64eI\42)\345\244\62hQ\226)\203\24iI\70(\0[P\30\273" - "x\134\303\220C\71\224C\71\226\16\7\65\307r,G\352P\14[W\30\273x\274\361pHrD\32" - "\224<\207\322\341\240\346X\216\345\310\12[X\31\273x\234\361p\320r(\31\266\64\23\263d\70\205i" - "\230\206i\264\1[f\30\272y\33\273x\134\303\240\305\331\60h\241\70\310\331\220\15r\66d\203\226\204\231:\10\134" - "@\34\273x\134\303\240\305\331\60h\71\66\234\362(\31\242JT\211\206(\211J\272\2\134B\33\273x" - "\134\303\240\305\331\60h\71\226\14[\216\15\247,\216jQ\230d\303\20\134E\34\273x\134\303\240\305\331" - "\60h\345\341\224\305\311\260%a\226\204Q\64,Y\230\0\134O\31\273x\134\303)\217\206S\22fQ" - "q\70\65\16\247\266(\213\212\21\0\134U\30\273x<\303)\217\206S\343pj\34\16I\251%\223*" - "QI\24\134^\36\273x<\303)\217\206S\36%\303\26\246\311\60DITI\206C\222eJ\62$" - "\2\134q\26\271y\234\71\22f\231\226i\231\226i\231\226i\331p\320\3\134\201\30\272x\2\4" + "\24\23\227xXC\26eQ\26eQ-\312\222aP\3\4\27\16\205\210\66K\26Fj\250%\13\0" + "\4\30\15\205\210\26\231\323\222(\311\244\5\4\32\17\205\210\26\231\224\224\246J\224dZ\0\4\33\21\205" + "\210VK\224DI\224DI\224DZ\0\4\34\21\207\210\30\351\66dKE\251H\221\24\251\1\4\35" + "\14\205\210\26\231m\30\62\267\0\4\36\13\205\210\66K\346[\262\0\4\37\11\205\210\26\67\277\5\4 " + "\15\205\210\26C\222i\203\22\66\2\4!\14\205\210\66K&vK\26\0\4\42\12\205\210\26\203\24\366" + "\11\4#\14\205\210\26\231\267d\10\7\5\4$\21\207\210x\341\240D\221\24I\221T\31\304\14\4'" + "\13\205\210\26\231[\62\204\15\4-\16\205\210\66K\26&C\30j\311\2\4/\17\205\210\66\203\246%" + "C\22%\221\246\5\4\60\13d\210\65b\62DR\62\4\61\15\224\210u\211\222-\221S\242\0\4\62" + "\15d\210\25K\64$\221\64$\0\4\63\11d\210\25\203\326\15\4\64\17vxW[\222%Y\22U" + "\206!\14\4\65\14d\210\65J\64lQ\242\0\4\66\16g\210\30Q\245mK\232\42\251\0\4\67\13" + "d\210\65JT\224\22\5\4\70\15e\210\26\231\264$J\62i\1\4\71\16\225\210\66\265<\223\226D" + "I&-\4:\14d\210\25\221\222HII\12\4;\12d\210\65K\277H\1\4<\14f\210\27\341" + "\64D\213\307\0\4=\13d\210\25\221\64L\246\0\4>\13d\210\65J\344\224(\0\4\77\11d\210" + "\25\203\344)\4@\16\205h\26\211I\323&E\11C\0\4A\13d\210\65J\244\225\22\5\4B\12" + "e\210\26\203\24v\2\4C\14\204h\25\221\245I\312\242\14\4D\23\247hxq\70(Q$ER" + "$U\6\61\316\0\4E\14e\210\26YR\253\324\264\0\4F\20ux\26Q\22%Q\22%Q\62" + "\210\1\4G\12d\210\25\221)\331\12\4H\20g\210\30Q$ER$ER\64\14\2\4I\21x" + "x\31Q%\252D\225\250\22U\206A\17\4K\16f\210\27\241\70DR\42%C\24\4L\14d\210" + "\25Y\266D\322\220\0\4M\14d\210\65J\24iR\242\0\4N\17f\210\27\221R\32\42%R\42" + "\13\0\4O\14d\210\65C$%K\42\5\4Q\16\204\210\25Q\252D\303\26%\12\0 \23\10\33" + "\311\34\17\2 \34\13E\376<\221\224(C\42 \35\14E\371\34\312\220(\221\224\0\60\1\10\63\210" + "\34\231\24\60\2\13D\213\10\60j\30\271y\134\71\224d\203\242\205R" + "V\314\302(\32\302L\253d\33\0\60k\26\251y\34\71\224M\211\264F\71\222#Y\230\24\265!\311" + "\1\60n\24\231\211|kR\213*Y&\205R\250\204Q\30k\0\60o\32\272y\334Y\234%\331\22" + "\15Q\34\305Q\34eC\224h\212\222%\245\15\60y\22\213\230\374I\216\24u$J\305\34\314\301\34" + "\24\60~\26\270z|a\66$C\236e\323\220\207C\226-Y\224\214\0\60\177\32\272y\30\273x\14aT\34\206\60*F\245\341 \245a" + "\32\206\22\0Q\231\33\273x<\303!\311\21)\15\207\65\307\206!\307\242aHr,Or(\3Q" + "\233\30\272y\34\17:\22\306\303 \346H\224\16\203\34\16\207\64\207B\0Q\234\32\273x\274\361pH" + "\262P\323\302(\217jR\222%Y)\211RQ\213\3Q\245\31\273x\34\337!e\30\222(\15\207!" + "L\303a\310\323\341\240\325\326\1Q\260\33\273x" + "\34\324,\315\322l\30\2T\16\32\273x\374\333 \347\330p\312\261\34K\206-\11\243b\24\15K\26" + "&\0T\21\30\272x\234\71\22\17\7\35\221\206H*I%i\210tDG\344\1T\27\34\273x\234" + "\303\62\244I\324\22\265DI\226D\311\60D\261\64,\203\234c\371\2T\36\30\273x<\303\71\307\322" + "\341\240Uk\303\245\232Di\70\14a\32\1T&\32\273x\34\17j\16)\242\222%Z\230\346\303\240" + "\305Y\234\15\203\26'\0T'\32\273x\234\303\262DI\247\244S\322)i\31\226%N\352X\32\246" + "\351\60T,\35\273x\374\210\62$[\224\244Q\222F\311\60DI\24\15I\224Gq\226\206\325\10T" + "/\32\272x\274\361\60Hq\24G\303 \345\320\60HjRM\222a\220\322\0TJ\31\273x\134\365" + "(\37\6)\313\261t\70\350\360\60\204i\230\206\303\20\1TX\31\273x\134\303\20\246\341\60\344\370p" + "\312\243\254\224\225*Q\230e\353\0Tb\34\273x\234\303\262\204IcR\31\226\346\244mH*J\213" + "\236d\245,\21\207\0Th\35\273x\134\303)+%\203\22e\245\341\224G\311\240DI\226\224\6\245" + "\216\350\210\0Ts\32\273x\374\331\220\225\222A\211\262\322p\312\262!\232*\255Q\255\224g\0T}" + "\32\273x\274\71\224\344Y\266\334\321!\31\242J\324\22EC\22\265$z\10T\206\35\273x\274\71\66" + "\134RE\31\22%\252(QE\211\206d\210\262\244\224ca<\10T\214\32\273x\234\362\216e\303!" + "\211\262R\64\225\224R\322I\312\242,\33\262\34T\232\32\273x\334\341\66$\245,\351)\11\263$K" + "\242E[$\35\314uP\2T\301\26\272y\134\303\330q\330\321!\32\244\222T\222J\203\64H\15T" + "\315\33\273x\374\71\24.\303\240T\225\312\242tQ\272\14I\262\204i\230\206\241\0T\345\31\272y\34" + "\17y\66DYT\33\242h\70\344\331\20eQm\210\362\11T\350\34\273x\234Q\64(\235\262R\62" + "\14Q\22J\311pHB)\31\326\60\15\323hT\352\37\273x|C\62,-J\27eP\224^\224" + "AI\206\244E\351\61I\266(\11#%\2T\356\36\273x\334\331\220\14K-\211\222\341\220da\22" + "\15\312\222E\211\62Li\216\345\310\4U$\34\273x\334\71\66$C\22\225\206!\211\222NI\313\220" + "t\32\6=\207\222X\23U.\31\273x\134Y<\234\262t\270\324\342a\320\312\303)\316\342l\30\24" + "\0UF\35\273x\274\351p\320\212\303\251\22U\262$\32NI\226D\311\240DI\226D\261\2U_" + "\35\273x|\305A\11\263dH\6\245\24*Q\262\224\222NI\251%*-\255Y\0Uf\33\273x" + "\274I\66\265\14\207$J\223HJJIeQZ\224\346(\37\266\25U\232\33\273x\274C\64\265\224" + "\262d\30\224\26\245ER\226R\70\14r\222g\241\32U\234\31\273x\274\351pP\343\341\226\206\303\220" + "f\331p\220\322\60\15\207!\2U\256\34\272y\34C\64H%\251\64\34\224,\212\206A\312\242h\30" + "\344p\70\244!\0U\267\34\273x\374\331\62\14J\224t\31\6%\312\222\312pHR\245T\214\312I" + "\254\11V\16\33\273x|\303 \207\313\260tJ\232\222\226a\251E\311p\220\223\34\221\262iV\27\31" + "\273x\134M\303S\26e\203\232\305\211\226\15\203X\35\326\60\35&\0V\30\36\273x\334C\262\205I" + "\62\14J\233\222\14K\267!\211\6\245\253\322\24)R\62\14\2Vh \273x\34\273x\134\311\260\225\262R\62(\305,\231\262R" + "\61RZ\244,\315\222,\322\2W@\35\273x\134a\32\246a\66,i\224\14Q%\215\222\64J\322" + "!\311\264$\36\6\1WG\33\273x\134Y\234\305\321p\210\243b\224\225\222,\211\264h\323r,G" + "\24\0WO\31\273x\134\71\226\14C\224F\203\26VC\61S\62\245\64\265\347X\6WP\26\273x" + "\274yT\214\212Q-\351mK\343\341\234c\351p\20WW\35\273x\134a\32\246\321\240\14R\222\205" + "I\26&Y\62\14\221\226\211I\236\205j\0W[\32\273x\134\71\26\15Z\216\14\71\224\14C\24\246" + "Y,\205Zq\30\304\64Wf\32\273x\134\71\26\15Z\224\225\262d\70dQV\312J\203\66\353\360" + "\60\4W\203\32\273x\134Y\34\246\321p\320\221(+eM\331\22%b\222c\361\60\4W\213\36\273" + "x<\303\224%Q\222%Q\222\14\203\222%Q\222%a\24\231\363a\310\323\341 W\316\33\273x<" + "\261\24'\245\341\255\264\64%]\224DR\232\224D\251U\244\254\0W\337\33\273x\134\251\226&Q\62" + "\34\304\312RJ:%\213&F\232R\223\22\71\13W\371\33\273x\134Y\34\246\311pP\262\226\60\31" + "\206(\307\224A\321\312Y<(\0W\372\30\273x|\305\341\230\305K\234\314Y\66\34\244&eP\324" + "t\70\10X\2\31\273x\134\255Imx\207\224aH\242\64\34\206<\37\6\71\35\16\2XT\35\273" + "x\134\265\312\60D\225\312\240\24\243\254\222,Q\216\15\203\62e\361 g\11\0X^\31\273x\274\351" + "\360\224E\311p\314\262\341\240U\243Z\62(q:\34\4X\203\35\273x\134a\232\14C\224%\321p" + "\220j\245A\213\262L\31\24\61\311\243$\23\5X\223\32\273x\34\17b\224\16C\230\206\303\20\246\321" + "p\220\232\224AQ\343\341\2X\231\37\273x\27\273" + "x\274\351pP\363\250\30\325\222\336\266\60\311\263\64\35\364\4YG\32\273x\274\361pM\362,\33\16" + ":\22\16J\230%\341\240\344X\16I\0YH\26\273x\274\351p\320\252%ePtt\70\347Q\255" + "%\23\3YO\30\273x\274\361p\215\207\203V\35\206H\313\244a\210\223<\13U\5YV\33\273x" + "\34Q\26&\321\240%RfR\262\70\321\241t\70\210I\254I\272\0YW\32\273x\234\361p\320\302" + "pX\22%\316\6\71\37\16b\16\205\341\60(\0Ye\31\273x\234\371pJ:ES\64\234\242\251" + "\322e\70\210I\236e\353\0Ys\30\273x\234\71\226c\361p\320\312Y\32\246K\16\351H\244\255\11" + "\0Yy\36\273x\134a\32%\331\220$S\222,Q\262\224\222NIe\213\222T\11\223Fu\20Y" + "}\33\273x\134\71\226\15\207\60K\262\60\311J\303\220\24C\261\222\225\262(\235\0Y\202 \273x\134" + "\71\226#\203\62HI-JjI\224dI\224d\221\224E\322\240DI\246c\0Y\231\34\273x\134" + "a\32f\203\242d\211\22U\242JT\325\242,\315\222\254\232\205\42\0Y\256\35\273x<\331\260d\341" + "\60\204IeX\232\223&)i\222\22Q)%QI\12\7Y\306\37\273x<\331 eR\62$M" + "I-J\206S\42%Q\322$e\231\62H\305$W\0Y\313\37\273x\134a\32f\203\22eI-" + "J\206!\211\362$\32$)\213\222Z\22%\303\232\5Y\354\34\273x\134\321\60\65\15S\226T\246\244" + "S\322)\351\26%\233\22e\221T\34\6Z\1\37\273x\374I\216D\311pH\322\60Y\242$j\31" + "\206$J:ER\42E\312\22\205\1Z\3\34\273x\134a\32fC\62HI\26&\303)\13\223," + "\215\6M\13\243Z\70\14Z\5 \273x<\71\26\15\7)\311\222(\311\22\245\27KT\311\264$\314" + "\222,\211\222(\33\206\0Z\34\42\273x<\311\220,QR\31\226\212\222,\211\322\242$\203\222(}" + "JZ\224\312RJ\242J\24\1ZZ\37\273x\134\321\240E\245\341\240\64eI\42)\345\244\62hQ" + "\226)\203\24iI\70(\0[P\30\273x\134\303\220C\71\224C\71\226\16\7\65\307r,G\352P" + "\14[W\30\273x\274\361pHrD\32\224<\207\322\341\240\346X\216\345\310\12[X\31\273x\234\361" + "p\320r(\31\266\64\23\263d\70\205i\230\206i\264\1[f\30\272y\33\273x\134\303\240\305\331\60h\241\70\310" + "\331\220\15r\66d\203\226\204\231:\10\134@\34\273x\134\303\240\305\331\60h\71\66\234\362(\31\242J" + "T\211\206(\211J\272\2\134B\33\273x\134\303\240\305\331\60h\71\226\14[\216\15\247,\216jQ\230" + "d\303\20\134E\34\273x\134\303\240\305\331\60h\345\341\224\305\311\260%a\226\204Q\64,Y\230\0\134" + "O\31\273x\134\303)\217\206S\22fQq\70\65\16\247\266(\213\212\21\0\134U\30\273x<\303)" + "\217\206S\343pj\34\16I\251%\223*QI\24\134^\36\273x<\303)\217\206S\36%\303\26\246" + "\311\60DITI\206C\222eJ\62$\2\134q\26\271y\234\71\22f\231\226i\231\226i\231\226i" + "\331p\320\3\134\201\30\272x \273x\134a\234e" - "\303\62DY\224EImJ\262$J\262$+EZ\224DI\224\204\1e\77\36\273x\374\331\260\304" - "\331\220EJ\224,\245$K\242$K\242$\314\222)\32\223X\13eE\33\273x|\345,\33\226!" - "\253\204QiPJ-Q\255\224eC\224D\321\26eH\35\273x\134a\234e\303\62DI\242DY" - "\322\26%Y\22%aKVM\212Z\0eL\34\273x|R\66\246\341p\211\262(\251\205I\62H" - "I\255\224\225\6)\251m\1eO\37\273x\34\273x\134\303\20\246\341\60\204i\70\14q\222FI\224%\245,iN\302\341 f" - "B\34\273x\374\331\220\14J\224\225\262lx\12\243h\70%Q\64DI\216\345\310\4fZ\36\273x" - "\274\351\64DI)K\206AYJI\247\244\62,\65mJ\242\60\252eC\0fh\36\273x\134\303" - "\20\246\341\60\204i\66\34\222\34K\206!\312\261\341\220\224\222(\222\26\0fn\32\273x|\305\341T" - "\211\262\244i\70\350\360\60\204i\70\14a\32\16C\4fz\37\272y<\71\64$\203\222E\303 E" - "\322\220DI\244\14C\226f\303\220\245\331\60$\0f\202\37\273x\134q\62([\22\205\203\62hQ" - "\22\15I\24\16C\230\206\303\20\246\341\60D\0f\227\34\273x\374\331\360\224dIT\211\206\247\33\273x|\265" - "a\211\263!\31\222,G*C\226c\321\60eIOMK\30kL\36\273x\34\227<\312\226hP" - "\332\206A\211\263h\311\242\244\224$K\224\244I\226\215\1kb\27\272y\274\71\224Cq\24GC\26" - "\305Q\34\305Q\34\205\303!kc\26\253x\34\17j\216\345Q\36\15Z\224Gy\224G\351p\20k" - "d\36\273x|\345,\316\242\244\226D\311\242%Y\230da\222\205I\26%\311\22\15\351\0ke\30" - "\273x\274y\64hQ\36\245\303A\315\221Z\251\226\346\210\70\310\0kw\34\273x<\303!\311J\211" - "\244EY\66\34\222(\253\234\224>\15ITL\206\3k{\30\273x\34\17Z\216\225\227\250\245$%" - "R\245\36\305YT\214\346\1k\265\34\273x|\312\246%Y\230dK\264\344\330\62HY)L\242!" - "\13+Y\244\11k\301\33\273x\34\213\262\204IEY\32\223d\270cC\62,\305,\11\253Ke+" - "k\315\34\273x\134\303\20&Y\30\25\323h\70HI\26F\305\64\33\16\71\222#\32\0k\317\33\273" - "x\134\71\66\134r(\32\326$\212\206\203\324\230%\331p\310\221\34\321\0k\322\30\273x\274\351pP" - "\343\341\234\16\7\251i\70(Y\224\15\207X\3k\324\25\272y\34aOI\230DC\242\205}Q\262" - "-S\207\0k\333\27\273x\334\333\240c\71\66d\203\216\345\330\360\216\205i\30\17\2l\21\27\272y" - "\34/y\222'\303%K\263t\70\210\245$S\262h\35l\24\31\273x|\71\66\14Y\16%\303\224" - "\243\303\216\345X\224G\71R\207\4l\27\33\273x|\71\66\14R\16%\303\220\344\340\60\350H\61\252" - "jI\24Y\302,l\64\30\273x\274\71\226c\225!Q\322\244\234T\243bTk\211\222\260\14l\70" - "\31\273x\274\71\30\17Y\34ECRN\344(I\243ZmJr(\6lB\27\273x\274Q\236%" - "\303A\315\243jR\337\223jT\322\62Q\5lI\32\273x\34\273x<\261\226\14y\270%[\242\24\223NI\305\224\324\242$j\211*\221\24mA\32\273" - "x\34ie\30\324Z\313\60dq\226\64II-J:%=E\2mN\34\273x\14\1t*\32\273x\274Y\62\34" - "\244ZiP\206$+\15Z\224e\303A\307\263\264\0t\64\32\273x\34\203\62HivK\243A\31" - "\324\34\261M\321\66\350P\16\245\0t^\34\273x\234Q\64L-\303\20\345\320p\210\262\70\31\206h" - "\251LIc\322\30\12t\334\34\273x\374\333\260FI\32%i\224\244Q\61*FY\224%\245lH" - "\64)\11t\343 \273x\32\273x\245\331pG\207\203\324d\23y\217\37\273x<\321\60D\71<(C\222\205\311\240\345" - "\330pQ\242HI\206!J\242\226a\10y\273\32\273x\274\351p\220\222\306\250\230\64\16C\36\17\247" - "\226(\31\224(V\0y\301\32\273x|\362\230\206\331 \245Y:\245J\61\211\262\312\60D\305(G" - "\0y\315\33\273x|R\66\246\321\360\22\265D\221RJ\224aP\302\64L\303\64\314\0y\321\34\273" - "x|b\262EY\230$\203\230\225\62-\211\224p\11\267H\312\342,N\0y\322\33\273x|\265\61" - "\215\222\312\220\224Z\242d)*Q\244\304Y\32fj\242\2y\351\35\273x|a\264%a\66$\303" - "\24\246\241\62LI\226)Y\224\204I\326\224\210\1y\360\31\273x|J\270\305\321p\220\32\303\245I" - "Jz*iQ\61\315\64\0y\373\33\273x|\265\203T\34\226(\13-J\230DC\242eJ\224\324" - "\322\60\332\0z\13\36\273x|\311\240LY)K\206d\320rL\31$%\12\245A)\246a\232\14" - "C\0z\15\36\273x|R\64DI-\314\206C\26e\321\62H\212\226\224\6-\312JY)R\0" - "z.\34\273x|\311\240\214i\64\274\324\242AS\332\222a\22\263$\32\264\60M\206!z\61\35\273" - "x|\241\62M\225(\32\224\266h\320\224\266d\230\244\244\313\60D\265R\244\0z\77\36\273x|R" - "\66\15S\26%\203\62d\71\66\234\222\64Q\222E\351)I\226(\11\5zv\27\273x\274\351\360\224" - "E\325,\12\323\34\31\366(\316\242b\64\17zz\30\273x\274\361pHrD\213\342\60\223\303a\317" - "\261\34\213\207C\0z\177\31\273x\274\351\360\224EJ\232$\303 f\351pM\362(\316Bi\4z" - "\201\31\273x\274\361pH\242\222\24\226\222r\224\15\207\64\207\222X\223t\1z\227\36\272y\274\341p" - "P\302\244\224%\303!\211\262(\31\246)\211\42\251\22%\321\60(\0z\313\27\273x\274\71\230\16\207" - "\34\17\323\60\216\362(Or,\34\16\2z\326\35\273x|\311 %\265(\211\222,\311\302$J\322" - "$\223\323\341\230\345I\70\34\4z\331\34\273x\254a\32\246\303\4{~\33\273x\34\242J\324\22%\303A\205\317\37\273x\234Q\66\34\304(\251" - "\14\207\244\323\62(Q\222%C\62,\275(\311\240T\23\1\206\21\36\273x\234Y\64\34\304\244\66\34" - "\222(\313\206C\242t\31\16I\24FC\230d\303\2\206N\34\273x\274\203\34\17\207$\12\243a\320" - "\242\64\211\206!\311\261h\10\243\222\42\16\206k\26\273x\274\71\26\17\247\254\224\225\206s\216Ey\26" - "\17\7\65\206y\35\273x\134\71\226\15\207,JjQR\213\222Z\64ha\32&Y\270E\313\60\4" - "\206}\30\273x\134\303\20\246\341\60\204Q=\36NYi\70\347Xe\70\10\206~\35\273x\134\71\26" - "\15\7)KJYR\222\222R\222\14Rc\232D\351\224iI\6\206\331\35\273x\134a\32\15Z\230" - "\15R\226$\303\240\224\7)\215\6-\211\322)\223\206!\207\203\37\273x\134a\32\15\7\245\224$\303" - "\240$R\242$\303K\234\15RR\213\206pH\62\5\207\215 \273x\34\247\34\313\206dP\242\244e" - "H\232\223dxPJ\321\60%J\24\15I\62D\1\207\371\35\273x\134\313\240D\245aH\22\245)" - "\33\16ISe\70\325\262a\220\263d\270\4\210@\32\273x\234\71\224#\303\251\22\265D-QK\324" - "\22\265D-Q\62\34\4\210L\32\273x\134\321 \345P\16\347P\62\14\211\32%i\230\206i\230\206" - "\331\4\210W\34\273x\134\245%\31\302\372\60f\321\240\225\222A\211\262R\266D\311\26\305\12\0\210c" - "\31\273x\274\71\30\16\7\65\207\222(\214\222P\13\223\254\224D\251X\16\210e\31\273x\65&\215Z\0\226b\35\273x\34C\24FY%\31N\251\22\15J\224G\303!)U" - "\242\212V\221R\1\226d\36\273x\34CV\252DI\224%R\262(a\26\15\247,\233\222\266(\222" - "\262H\325\0\226\206 \273x\34C\222F\311\240T\264D\234\222D\233\222Z\224\14\7)K\242A\211" - "\263h\30\4\226\217 \273x\34c\226(\303\220\64j\203R\213\222\344\220tJ\244dH\262$J\62" - "\65\212\6\1\226\220\42\273x\34C\62D\225\250\222\14\213\222&\245A\211\322$J\6E\211\302$Q" - "\232\222(\21\207\10\226\250!\273x\34CVR\206%*i\303\220\204IiY\242\244eH\222\245\224" - "\264%Q\22eC\0\226\274\30\273x\134Y<\134\264\60\31\6\255<\14Zy\70\207\303A\16\1\226" - "\276\35\273x\334I\64DI\232\14C\64eI)\214\206\251-I\206\245\251\30\345\303\0\226\304\37\273" - "x|\345(\211\206\203\224%a\244dI\64(\245$*\15K\226\204I\333\220\14\2\226\306\33\273x" - "|I\236\245\303A\211\362a\320\242|\30\264(\35\16ZR\233\242\1\226\314\37\273x\134I\224&\215" - "I\62,\203\22%\225a\351\224T\206\245S\62(\221\224\14r\10\226\350\30\273x\34\17j\216\305\303" - ")+%\235\42O\225NY)\213\24\0\226\352\31\273x<\303\71\35\36CEI\224\34\35\356X\66" - "\14:\26\15\27\0\226\366\30\273x<\303\71\35\236\222R\70k\222\226I\303\220C\371\216i\0\226\367" - "\30\273x<\303\71\35\36CEI\224\64\36NYi\70e\245\341\2\226\373\30\273x<\303\71\35^" - "\242J\62\234\262\322p\312J\303\71L\207\1\227\0\31\273x<\303\71\35^\224DI\323\341 \346\303" - "\251\22\265D-\211\2\227\6\34\273x<\303\71\35^\242\312\240\14Z\30.\203\230\205\311\60H\71\242" - "\14\203\0\227\23\33\273x<\303\71\35^\242J\62\15Q\36\15\311\20\345\321p\214\262!\33\4\227\36" - "\32\273x<\303\71\35\236\222\322\260\14Q\61\32Na\24\15IT\325\242I\227\62\36\273x<\303\71" - "\35\236\222\322 \15I\224H\311\220\211\221\264\34\222Z\224\14\321\220\0\227\70\34\273x<\303\71\35\236" - "\222\322p\220*Q\62(C\322)\31\16Y)\213\42\5\227R\27\273x\274\361p\316\207!O\207\203" - "\26\246\303\32\246\303\32F\0\227Y\37\273x\134a\66,[%\33\222!\13\223d\70(Q%R\222" - "!J\244\60*&\66\0\227^\34\273x\234I\216\24\7e\20\223\34\251\16\311\220&\71R\34\224A" - "Lr\244\10\227`\34\273x\134\365a\220\262t\70Hi\70\14q\22\16\312 &\341\240\14b\22\2" - "\227b\30\272y\34\17a\216\304\303A*IC$\225\244!\222J\303;\22\227i\30\273x|\265\341" - "\240\225\7\35\311\207!\214\212\303\220\247\303AM\1\227\215\35\273x<\265l\70(\215\311\226\206\331\360" - "RJ\222A\211\262P\32\244$\213\264\0\227\363\31\273x\274\361p\314\362$\34\16:<\14a\32\16" - "C\230\206\303\20\1\227\365\34\273x\134Y\70(a\226\14J\343\260dy\64\254Z\244\14\203\246\245\303" - "\246\0\230\5\31\273x\274\303AJ\243a*F\321\60\25\243\341\240\205\351\60G\251\30\230\30\36\273x" - "|\311\60\211Y\224\14K\244\225\206C\222\205\311\240\224\262(\33\264\250\230\204\1\230^\36\273x\34I" - "eP\306\332pH\262d\32\226\266(\33\16I\26e\203RKj[\0\230o\42\273x<\203\62$" - "Y\224\15\312\220dI\224\14\312\220D\211\24)\311\220tJ\224aH\372\267\0\230u\31\273x\34\17" - "j>\14a\32F\305\250\30\25#%\216\342P\222\23\0\230y\32\273x\274\303AJ\243a*F\225" - "\250%j\211\242!\211V\35\211R\61\230\177\35\273x\134\331 \245\321\240\14R\226)]\224.\303\322" - "\224%\245$\13\265$\326\2\230\206\33\273x|\321\240\205\225(\224\206!\252\305IeH\32\223\266\260" - "%\214\262\0\230\221\37\273x|\321\240\24\263d\30\224R\66\14J-J\272(-JE\252\224\302$" - "\321\264\0\230\230!\273x \273x\134a\234e\303\62DY\224EImJ\262$J\262$+EZ\224DI\224\204\1" + "e\77\36\273x\374\331\260\304\331\220EJ\224,\245$K\242$K\242$\314\222)\32\223X\13eE" + "\33\273x|\345,\33\226!\253\204QiPJ-Q\255\224eC\224D\321\26eH\35\273x\134a" + "\234e\303\62DI\242DY\322\26%Y\22%aKVM\212Z\0eL\34\273x|R\66\246\341" + "p\211\262(\251\205I\62HI\255\224\225\6)\251m\1eO\37\273x\34\273x\134\303\20\246\341\60\204i\70\14q\222FI\224%\245,iN" + "\302\341 fB\34\273x\374\331\220\14J\224\225\262lx\12\243h\70%Q\64DI\216\345\310\4f" + "Z\36\273x\274\351\64DI)K\206AYJI\247\244\62,\65mJ\242\60\252eC\0fh\36" + "\273x\134\303\20\246\341\60\204i\66\34\222\34K\206!\312\261\341\220\224\222(\222\26\0fn\32\273x" + "|\305\341T\211\262\244i\70\350\360\60\204i\70\14a\32\16C\4fz\37\272y<\71\64$\203\222" + "E\303 E\322\220DI\244\14C\226f\303\220\245\331\60$\0f\202\37\273x\134q\62([\22\205" + "\203\62hQ\22\15I\24\16C\230\206\303\20\246\341\60D\0f\227\34\273x\374\331\360\224dIT\211" + "\206\247\33\273x|\265a\211\263!\31\222,G*C" + "\226c\321\60eIOMK\30kL\36\273x\34\227<\312\226hP\332\206A\211\263h\311\242\244\224" + "$K\224\244I\226\215\1kb\27\272y\274\71\224Cq\24GC\26\305Q\34\305Q\34\205\303!k" + "c\26\253x\34\17j\216\345Q\36\15Z\224Gy\224G\351p\20kd\36\273x|\345,\316\242\244" + "\226D\311\242%Y\230da\222\205I\26%\311\22\15\351\0ke\30\273x\274y\64hQ\36\245\303" + "A\315\221Z\251\226\346\210\70\310\0kf\35\273x\374\342\220\324\221l\70\210Q\232Di\242\244I\224" + "&Y\22%K\62\250\2kw\34\273x<\303!\311J\211\244EY\66\34\222(\253\234\224>\15I" + "TL\206\3k{\30\273x\34\17Z\216\225\227\250\245$%R\245\36\305YT\214\346\1k\265\34\273" + "x|\312\246%Y\230dK\264\344\330\62HY)L\242!\13+Y\244\11k\301\33\273x\34\213\262" + "\204IEY\32\223d\270cC\62,\305,\11\253Ke+k\315\34\273x\134\303\20&Y\30\25\323" + "h\70HI\26F\305\64\33\16\71\222#\32\0k\317\33\273x\134\71\66\134r(\32\326$\212\206\203" + "\324\230%\331p\310\221\34\321\0k\322\30\273x\274\351pP\343\341\234\16\7\251i\70(Y\224\15\207" + "X\3k\324\25\272y\34aOI\230DC\242\205}Q\262-S\207\0k\333\27\273x\334\333\240c" + "\71\66d\203\216\345\330\360\216\205i\30\17\2l\21\27\272y\34/y\222'\303%K\263t\70\210\245" + "$S\262h\35l\24\31\273x|\71\66\14Y\16%\303\224\243\303\216\345X\224G\71R\207\4l\27" + "\33\273x|\71\66\14R\16%\303\220\344\340\60\350H\61\252jI\24Y\302,l\64\30\273x\274\71" + "\226c\225!Q\322\244\234T\243bTk\211\222\260\14l\70\31\273x\274\71\30\17Y\34ECRN" + "\344(I\243ZmJr(\6lB\27\273x\274Q\236%\303A\315\243jR\337\223jT\322\62Q" + "\5lI\32\273x\34\273x<\261\226\14y\270%[\242\24\223" + "NI\305\224\324\242$j\211*\221\24mA\32\273x\34ie\30\324Z\313\60dq\226\64II-" + "J:%=E\2mN\34\273x\14\1t*\32\273x" + "\274Y\62\34\244ZiP\206$+\15Z\224e\303A\307\263\264\0t\64\32\273x\34\203\62Hiv" + "K\243A\31\324\34\261M\321\66\350P\16\245\0t^\34\273x\234Q\64L-\303\20\345\320p\210\262" + "\70\31\206h\251LIc\322\30\12t_\36\273x\34\203\62HivK\243A\31\304\254\322\230D\225" + "(\211\222LK\206d\220\0t\334\34\273x\374\333\260FI\32%i\224\244Q\61*FY\224%\245" + "lH\64)\11t\343 \273x\32\273x\245\331pG" + "\207\203\324d\23y\217\37\273x<\321\60D\71<(C\222\205\311\240\345\330pQ\242HI\206!J" + "\242\226a\10y\273\32\273x\274\351p\220\222\306\250\230\64\16C\36\17\247\226(\31\224(V\0y\301" + "\32\273x|\362\230\206\331 \245Y:\245J\61\211\262\312\60D\305(G\0y\315\33\273x|R\66" + "\246\321\360\22\265D\221RJ\224aP\302\64L\303\64\314\0y\321\34\273x|b\262EY\230$\203" + "\230\225\62-\211\224p\11\267H\312\342,N\0y\322\33\273x|\265\61\215\222\312\220\224Z\242d)" + "*Q\244\304Y\32fj\242\2y\351\35\273x|a\264%a\66$\303\24\246\241\62LI\226)Y" + "\224\204I\326\224\210\1y\360\31\273x|J\270\305\321p\220\32\303\245IJz*iQ\61\315\64\0" + "y\373\33\273x|\265\203T\34\226(\13-J\230DC\242eJ\224\324\322\60\332\0z\13\36\273x" + "|\311\240LY)K\206d\320rL\31$%\12\245A)\246a\232\14C\0z\15\36\273x|R" + "\64DI-\314\206C\26e\321\62H\212\226\224\6-\312JY)R\0z.\34\273x|\311\240\214" + "i\64\274\324\242AS\332\222a\22\263$\32\264\60M\206!z\61\35\273x|\241\62M\225(\32\224" + "\266h\320\224\266d\230\244\244\313\60D\265R\244\0z\77\36\273x|R\66\15S\26%\203\62d\71" + "\66\234\222\64Q\222E\351)I\226(\11\5zv\27\273x\274\351\360\224E\325,\12\323\34\31\366(" + "\316\242b\64\17zz\30\273x\274\361pHrD\213\342\60\223\303a\317\261\34\213\207C\0z\177\31" + "\273x\274\351\360\224EJ\232$\303 f\351pM\362(\316Bi\4z\201\31\273x\274\361pH\242" + "\222\24\226\222r\224\15\207\64\207\222X\223t\1z\227\36\272y\274\341pP\302\244\224%\303!\211\262" + "(\31\246)\211\42\251\22%\321\60(\0z\313\27\273x\274\71\230\16\207\34\17\323\60\216\362(Or" + ",\34\16\2z\326\35\273x|\311 %\265(\211\222,\311\302$J\322$\223\323\341\230\345I\70\34" + "\4z\331\34\273x\254" + "a\32\246\303\4{~\33\273x\34\242J\324\22%\303A\205" + "\317\37\273x\234Q\66\34\304(\251\14\207\244\323\62(Q\222%C\62,\275(\311\240T\23\1\206\21" + "\36\273x\234Y\64\34\304\244\66\34\222(\313\206C\242t\31\16I\24FC\230d\303\2\206N\34\273" + "x\274\203\34\17\207$\12\243a\320\242\64\211\206!\311\261h\10\243\222\42\16\206k\26\273x\274\71\26" + "\17\247\254\224\225\206s\216Ey\26\17\7\65\206y\35\273x\134\71\226\15\207,JjQR\213\222Z" + "\64ha\32&Y\270E\313\60\4\206}\30\273x\134\303\20\246\341\60\204Q=\36NYi\70\347X" + "e\70\10\206~\35\273x\134\71\26\15\7)KJYR\222\222R\222\14Rc\232D\351\224iI\6" + "\206\307\32\273x\134aZ\214\206G\245\61iJ\6e\314\342\244\26-\331\24\15\1\206\331\35\273x\134" + "a\32\15Z\230\15R\226$\303\240\224\7)\215\6-\211\322)\223\206!\207\203\37\273x\134a\32\15" + "\7\245\224$\303\240$R\242$\303K\234\15RR\213\206pH\62\5\207\215 \273x\34\247\34\313\206" + "dP\242\244eH\232\223dxPJ\321\60%J\24\15I\62D\1\207\371\35\273x\134\313\240D\245" + "aH\22\245)\33\16ISe\70\325\262a\220\263d\270\4\210@\32\273x\234\71\224#\303\251\22\265" + "D-QK\324\22\265D-Q\62\34\4\210L\32\273x\134\321 \345P\16\347P\62\14\211\32%i" + "\230\206i\230\206\331\4\210W\34\273x\134\245%\31\302\372\60f\321\240\225\222A\211\262R\266D\311\26" + "\305\12\0\210c\31\273x\274\71\30\16\7\65\207\222(\214\222P\13\223\254\224D\251X\16\210e\31\273" + "x\31\273x\34\17b\222\16\247J\24\15w|\30\302\250\30\225\223t[\0\215D\33\273x\65&\215Z\0\226b\35\273" + "x\34C\24FY%\31N\251\22\15J\224G\303!)U\242\212V\221R\1\226d\36\273x\34C" + "V\252DI\224%R\262(a\26\15\247,\233\222\266(\222\262H\325\0\226\206 \273x\34C\222F" + "\311\240T\264D\234\222D\233\222Z\224\14\7)K\242A\211\263h\30\4\226\217 \273x\34c\226(" + "\303\220\64j\203R\213\222\344\220tJ\244dH\262$J\62\65\212\6\1\226\220\42\273x\34C\62D" + "\225\250\222\14\213\222&\245A\211\322$J\6E\211\302$Q\232\222(\21\207\10\226\250!\273x\34C" + "VR\206%*i\303\220\204IiY\242\244eH\222\245\224\264%Q\22eC\0\226\274\30\273x\134" + "Y<\134\264\60\31\6\255<\14Zy\70\207\303A\16\1\226\276\35\273x\334I\64DI\232\14C\64" + "eI)\214\206\251-I\206\245\251\30\345\303\0\226\304\37\273x|\345(\211\206\203\224%a\244dI" + "\64(\245$*\15K\226\204I\333\220\14\2\226\306\33\273x|I\236\245\303A\211\362a\320\242|\30" + "\264(\35\16ZR\233\242\1\226\314\37\273x\134I\224&\215I\62,\203\22%\225a\351\224T\206\245" + "S\62(\221\224\14r\10\226\350\30\273x\34\17j\216\305\303)+%\235\42O\225NY)\213\24\0" + "\226\352\31\273x<\303\71\35\36CEI\224\34\35\356X\66\14:\26\15\27\0\226\366\30\273x<\303" + "\71\35\236\222R\70k\222\226I\303\220C\371\216i\0\226\367\30\273x<\303\71\35\36CEI\224\64" + "\36NYi\70e\245\341\2\226\373\30\273x<\303\71\35^\242J\62\234\262\322p\312J\303\71L\207" + "\1\227\0\31\273x<\303\71\35^\224DI\323\341 \346\303\251\22\265D-\211\2\227\6\34\273x<" + "\303\71\35^\242\312\240\14Z\30.\203\230\205\311\60H\71\242\14\203\0\227\15\33\273x<\303\71\35^" + "\242J\64\334\242x\30\244$\12\243a\10\243|\30\4\227\23\33\273x<\303\71\35^\242J\62\15Q" + "\36\15\311\20\345\321p\214\262!\33\4\227\36\32\273x<\303\71\35\236\222\322\260\14Q\61\32Na\24" + "\15IT\325\242I\227\62\36\273x<\303\71\35\236\222\322 \15I\224H\311\220\211\221\264\34\222Z\224" + "\14\321\220\0\227\70\34\273x<\303\71\35\236\222\322p\220*Q\62(C\322)\31\16Y)\213\42\5" + "\227R\27\273x\274\361p\316\207!O\207\203\26\246\303\32\246\303\32F\0\227Y\37\273x\134a\66," + "[%\33\222!\13\223d\70(Q%R\222!J\244\60*&\66\0\227^\34\273x\234I\216\24\7" + "e\20\223\34\251\16\311\220&\71R\34\224ALr\244\10\227`\34\273x\134\365a\220\262t\70Hi" + "\70\14q\22\16\312 &\341\240\14b\22\2\227b\30\272y\34\17a\216\304\303A*IC$\225\244" + "!\222J\303;\22\227i\30\273x|\265\341\240\225\7\35\311\207!\214\212\303\220\247\303AM\1\227\215" + "\35\273x<\265l\70(\215\311\226\206\331\360RJ\222A\211\262P\32\244$\213\264\0\227\363\31\273x" + "\274\361p\314\362$\34\16:<\14a\32\16C\230\206\303\20\1\227\365\34\273x\134Y\70(a\226\14" + "J\343\260dy\64\254Z\244\14\203\246\245\303\246\0\230\5\31\273x\274\303AJ\243a*F\321\60\25" + "\243\341\240\205\351\60G\251\30\230\30\36\273x|\311\60\211Y\224\14K\244\225\206C\222\205\311\240\224\262" + "(\33\264\250\230\204\1\230^\36\273x\34IeP\306\332pH\262d\32\226\266(\33\16I\26e\203" + "RKj[\0\230o\42\273x<\203\62$Y\224\15\312\220dI\224\14\312\220D\211\24)\311\220t" + "J\224aH\372\267\0\230u\31\273x\34\17j>\14a\32F\305\250\30\25#%\216\342P\222\23\0" + "\230y\32\273x\274\303AJ\243a*F\225\250%j\211\242!\211V\35\211R\61\230\177\35\273x\134" + "\331 \245\321\240\14R\226)]\224.\303\322\224%\245$\13\265$\326\2\230\206\33\273x|\321\240\205" + "\225(\224\206!\252\305IeH\32\223\266\260%\214\262\0\230\221\37\273x|\321\240\24\263d\30\224R" + "\66\14J-J\272(-JE\252\224\302$\321\264\0\230\230!\273x Date: Sun, 13 Oct 2024 11:24:45 +0800 Subject: [PATCH 4/6] fix vscode c_cpp_properties.json --- .vscode/c_cpp_properties.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index 78ca8a7c..b3a519e7 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -3,12 +3,12 @@ { "name": "Pixl.js Debug", "includePath": [ - "${workspaceFolder}/src/**", - "${workspaceFolder}/../components/**", - "D:/dev/SDKs/nRF5_SDK_17.1.0_ddde560/**" + "${workspaceFolder}/fw/application/src/**", + "${workspaceFolder}/fw/components/**", + "${NRF52_SDK_ROOT}/**" ], "forcedInclude": [ - "${workspaceFolder}/config/sdk_config.h" + "${workspaceFolder}/fw/application/config/sdk_config.h" ], "defines": [ "BOARD_PCA10056", @@ -24,7 +24,7 @@ "DEBUG_NRF", "M_USE_THREAD_BACKEND=0" ], - "compilerPath": "D:/dev/SDKs/gcc-arm-none-eabi-10-2020-q4-major/bin/arm-none-eabi-gcc.exe", + "compilerPath": "/usr/local/bin/arm-none-eabi-gcc", "cStandard": "c11", "cppStandard": "c++17", "intelliSenseMode": "windows-gcc-arm" From a1965c7e49e24965649e18dcd61fd317d4982475 Mon Sep 17 00:00:00 2001 From: solosky Date: Sun, 13 Oct 2024 14:28:06 +0800 Subject: [PATCH 5/6] Fixed #270: add option to custom uid --- .gitignore | 3 + fw/application/src/amiibo_helper.c | 32 ++++- fw/application/src/app/amiibo/app_amiibo.c | 13 ++ fw/application/src/app/amiibo/app_amiibo.h | 8 +- .../scene/amiibo_scene_amiibo_detail_menu.c | 80 +++++++++++- fw/application/src/i18n/de_DE.c | 4 + fw/application/src/i18n/en_US.c | 4 + fw/application/src/i18n/es_ES.c | 4 + fw/application/src/i18n/fr_FR.c | 4 + fw/application/src/i18n/hu_HU.c | 4 + fw/application/src/i18n/it_IT.c | 4 + fw/application/src/i18n/ja_JP.c | 4 + fw/application/src/i18n/nl_NL.c | 4 + fw/application/src/i18n/pt_BR.c | 4 + fw/application/src/i18n/ru_RU.c | 4 + fw/application/src/i18n/string_id.h | 4 + fw/application/src/i18n/zh_Hans.c | 4 + fw/application/src/i18n/zh_TW.c | 4 + fw/application/src/ntag/ntag_store.c | 118 ++++++++++-------- fw/application/src/ntag/ntag_store.h | 15 +-- 20 files changed, 252 insertions(+), 69 deletions(-) diff --git a/.gitignore b/.gitignore index 566d1df6..6d12761c 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,9 @@ fw/.settings fw/_build fw/.idea +fw/application/.idea +fw/bootloader/.idea + fw/src/amiibo_private.c fw/src/version.inc.h fw/src/version.json diff --git a/fw/application/src/amiibo_helper.c b/fw/application/src/amiibo_helper.c index aa1a1750..7ade328f 100644 --- a/fw/application/src/amiibo_helper.c +++ b/fw/application/src/amiibo_helper.c @@ -149,6 +149,31 @@ ret_code_t amiibo_helper_rand_amiibo_uuid(ntag_t *ntag) { return err_code; } +ret_code_t amiibo_helper_set_amiibo_uuid(ntag_t *ntag, uint8_t *uuid) { + ret_code_t err_code; + ntag_t ntag_new; + ntag_t *ntag_current = ntag; + + memcpy(&ntag_new, ntag_current, sizeof(ntag_t)); + + if (!is_valid_amiibo_ntag(ntag_current)) { + return NRF_ERROR_INVALID_DATA; + } + + if (!amiibo_helper_is_key_loaded()) { + return NRF_ERROR_INVALID_DATA; + } + + ntag_store_set_uuid(&ntag_new, uuid); + + // sign new + err_code = amiibo_helper_sign_new_ntag(ntag_current, &ntag_new); + if (err_code == NRF_SUCCESS) { + memcpy(ntag, &ntag_new, sizeof(ntag_t)); + } + return err_code; +} + ret_code_t amiibo_helper_generate_amiibo(uint32_t head, uint32_t tail, ntag_t *ntag) { if (!amiibo_helper_is_key_loaded()) { return NRF_ERROR_INVALID_DATA; @@ -192,20 +217,18 @@ void amiibo_helper_try_load_amiibo_keys_from_vfs() { } } -uint32_t to_little_endian_int32(const uint8_t* data){ +uint32_t to_little_endian_int32(const uint8_t *data) { uint32_t val = 0; val += data[0]; val <<= 8; val += data[1]; val <<= 8; val += data[2]; - val <<=8; + val <<= 8; val += data[3]; return val; } - - bool is_valid_amiibo_ntag(const ntag_t *ntag) { uint32_t head = to_little_endian_int32(&ntag->data[84]); uint32_t tail = to_little_endian_int32(&ntag->data[88]); @@ -224,4 +247,3 @@ bool is_valid_amiibo_ntag(const ntag_t *ntag) { return false; } - diff --git a/fw/application/src/app/amiibo/app_amiibo.c b/fw/application/src/app/amiibo/app_amiibo.c index 192015b0..38ee78cd 100644 --- a/fw/application/src/app/amiibo/app_amiibo.c +++ b/fw/application/src/app/amiibo/app_amiibo.c @@ -46,6 +46,9 @@ void app_amiibo_on_run(mini_app_inst_t *p_app_inst) { p_app_handle->p_msg_box = mui_msg_box_create(); mui_msg_box_set_user_data(p_app_handle->p_msg_box, p_app_handle); + p_app_handle->p_toast_view = mui_toast_view_create(); + mui_toast_view_set_user_data(p_app_handle->p_toast_view, p_app_handle); + p_app_handle->p_scene_dispatcher = mui_scene_dispatcher_create(); string_init(p_app_handle->current_file); @@ -67,6 +70,12 @@ void app_amiibo_on_run(mini_app_inst_t *p_app_inst) { mui_view_dispatcher_attach(p_app_handle->p_view_dispatcher, MUI_LAYER_FULLSCREEN); + p_app_handle->p_view_dispatcher_toast = mui_view_dispatcher_create(); + mui_view_dispatcher_add_view(p_app_handle->p_view_dispatcher_toast, AMIIBO_VIEW_ID_TOAST, + mui_toast_view_get_view(p_app_handle->p_toast_view)); + mui_view_dispatcher_attach(p_app_handle->p_view_dispatcher_toast, MUI_LAYER_TOAST); + mui_view_dispatcher_switch_to_view(p_app_handle->p_view_dispatcher_toast, AMIIBO_VIEW_ID_TOAST); + extern const ntag_t default_ntag215; APP_ERROR_CHECK(ntag_emu_init(&default_ntag215)); @@ -133,6 +142,10 @@ void app_amiibo_on_kill(mini_app_inst_t *p_app_inst) { mui_scene_dispatcher_free(p_app_handle->p_scene_dispatcher); amiibo_detail_view_free(p_app_handle->p_amiibo_detail_view); + mui_view_dispatcher_detach(p_app_handle->p_view_dispatcher_toast, MUI_LAYER_TOAST); + mui_view_dispatcher_free(p_app_handle->p_view_dispatcher_toast); + mui_toast_view_free(p_app_handle->p_toast_view); + string_clear(p_app_handle->current_file); string_clear(p_app_handle->current_folder); string_array_clear(p_app_handle->amiibo_files); diff --git a/fw/application/src/app/amiibo/app_amiibo.h b/fw/application/src/app/amiibo/app_amiibo.h index 921f5386..143c0b40 100644 --- a/fw/application/src/app/amiibo/app_amiibo.h +++ b/fw/application/src/app/amiibo/app_amiibo.h @@ -7,21 +7,23 @@ #include "mui_msg_box.h" #include "mui_scene_dispatcher.h" #include "mui_text_input.h" +#include "mui_toast_view.h" #include "ntag_def.h" #include "vfs.h" #include "mlib_common.h" - typedef struct { amiibo_detail_view_t *p_amiibo_detail_view; mui_list_view_t *p_list_view; mui_text_input_t *p_text_input; mui_msg_box_t *p_msg_box; + mui_toast_view_t *p_toast_view; mui_view_dispatcher_t *p_view_dispatcher; mui_scene_dispatcher_t *p_scene_dispatcher; + mui_view_dispatcher_t *p_view_dispatcher_toast; ntag_t ntag; - + /** file browser*/ vfs_drive_t current_drive; string_t current_folder; @@ -39,6 +41,7 @@ typedef enum { AMIIBO_VIEW_ID_DETAIL, AMIIBO_VIEW_ID_INPUT, AMIIBO_VIEW_ID_MSG_BOX, + AMIIBO_VIEW_ID_TOAST } amiibo_view_id_t; typedef struct { @@ -50,7 +53,6 @@ typedef struct { uint32_t current_scene_id; } app_amiibo_cache_data_t; - extern mini_app_t app_amiibo_info; #endif \ No newline at end of file diff --git a/fw/application/src/app/amiibo/scene/amiibo_scene_amiibo_detail_menu.c b/fw/application/src/app/amiibo/scene/amiibo_scene_amiibo_detail_menu.c index a491febb..d4615318 100644 --- a/fw/application/src/app/amiibo/scene/amiibo_scene_amiibo_detail_menu.c +++ b/fw/application/src/app/amiibo/scene/amiibo_scene_amiibo_detail_menu.c @@ -21,6 +21,7 @@ enum amiibo_detail_menu_t { AMIIBO_DETAIL_MENU_RAND_UID, AMIIBO_DETAIL_MENU_AUTO_RAND_UID, AMIIBO_DETAIL_MENU_READ_ONLY, + AMIIBO_DETAIL_MENU_SET_CUSTOM_UID, AMIIBO_DETAIL_MENU_REMOVE_AMIIBO, AMIIBO_DETAIL_MENU_BACK_AMIIBO_DETAIL, AMIIBO_DETAIL_MENU_BACK_FILE_BROWSER, @@ -33,7 +34,6 @@ static ret_code_t amiibo_scene_amiibo_detail_set_readonly(app_amiibo_t *app, boo vfs_obj_t obj; uint8_t meta_buf[VFS_MAX_META_LEN]; - cwalk_append_segment(path, string_get_cstr(app->current_folder), string_get_cstr(app->current_file)); vfs_driver_t *p_vfs_driver = vfs_get_driver(VFS_DRIVE_EXT); @@ -112,6 +112,60 @@ static void amiibo_scene_amiibo_detail_delete_tag_confirmed(mui_msg_box_event_t } } +static void amiibo_scene_amiibo_detail_menu_text_input_set_id_event_cb(mui_text_input_event_t event, + mui_text_input_t *p_text_input) { + app_amiibo_t *app = p_text_input->user_data; + const char *input_text = mui_text_input_get_input_text(p_text_input); + if (event == MUI_TEXT_INPUT_EVENT_CONFIRMED && strlen(input_text) > 0) { + + int8_t uid[7]; + ret_code_t err_code; + char path[VFS_MAX_PATH_LEN]; + + ntag_t *ntag = &app->ntag; + + // read uid from input + if (sscanf(input_text, "%02x.%02x.%02x.%02x.%02x.%02x.%02x", uid, uid + 1, uid + 2, uid + 3, uid + 4, uid + 5, + uid + 6) != 7) { + mui_toast_view_show(app->p_toast_view, _T(INAVLID_ID)); + return; + } + + // same uid as current tag + uint8_t cur_uid[7]; + ntag_store_get_uuid(ntag, cur_uid); + if (memcmp(cur_uid, uid, 7) == 0) { + mui_scene_dispatcher_previous_scene(app->p_scene_dispatcher); + return; + } + + // set current ntag uid + err_code = amiibo_helper_set_amiibo_uuid(ntag, uid); + if (err_code != NRF_SUCCESS) { + mui_toast_view_show(app->p_toast_view, _T(FAILED)); + return; + } + + // set ntag emu to emulate new tag + ntag_emu_set_tag(&app->ntag); + + // save to file + vfs_driver_t *p_driver = vfs_get_driver(app->current_drive); + + cwalk_append_segment(path, string_get_cstr(app->current_folder), string_get_cstr(app->current_file)); + int32_t res = p_driver->write_file_data(path, ntag->data, sizeof(ntag->data)); + + if (res < 0) { + mui_toast_view_show(app->p_toast_view, _T(FAILED)); + return; + } + + mui_scene_dispatcher_previous_scene(app->p_scene_dispatcher); + } else { + mui_scene_dispatcher_previous_scene(app->p_scene_dispatcher); + } +} + static void amiibo_scene_amiibo_detail_menu_on_selected(mui_list_view_event_t event, mui_list_view_t *p_list_view, mui_list_item_t *p_item) { app_amiibo_t *app = p_list_view->user_data; @@ -168,6 +222,27 @@ static void amiibo_scene_amiibo_detail_menu_on_selected(mui_list_view_event_t ev p_item, (p_settings->auto_gen_amiibo ? getLangString(_L_ON_F) : getLangString(_L_OFF_F))); } break; + case AMIIBO_DETAIL_MENU_SET_CUSTOM_UID: { + char id_text[32]; + uint8_t id[7]; + ntag_t *ntag = &app->ntag; + + if (!amiibo_helper_is_key_loaded()) { + amiibo_scene_amiibo_detail_no_key_msg(app); + return; + } + + ntag_store_get_uuid(ntag, id); + + sprintf(id_text, "%02x.%02x.%02x.%02x.%02x.%02x.%02x", id[0], id[1], id[2], id[3], id[4], id[5], id[6]); + + mui_text_input_set_header(app->p_text_input, getLangString(_L_INPUT_ID)); + mui_text_input_set_input_text(app->p_text_input, id_text); + mui_text_input_set_event_cb(app->p_text_input, amiibo_scene_amiibo_detail_menu_text_input_set_id_event_cb); + + mui_view_dispatcher_switch_to_view(app->p_view_dispatcher, AMIIBO_VIEW_ID_INPUT); + } break; + case AMIIBO_DETAIL_MENU_READ_ONLY: { ret_code_t err_code = amiibo_scene_amiibo_detail_set_readonly(app, !app->ntag.read_only); if (err_code == NRF_SUCCESS) { @@ -207,6 +282,9 @@ void amiibo_scene_amiibo_detail_menu_on_enter(void *user_data) { (p_settings->auto_gen_amiibo ? getLangString(_L_ON_F) : getLangString(_L_OFF_F)), (void *)AMIIBO_DETAIL_MENU_AUTO_RAND_UID); + mui_list_view_add_item(app->p_list_view, 0xe1c8, getLangString(_L_SET_CUSTOM_ID), + (void *)AMIIBO_DETAIL_MENU_SET_CUSTOM_UID); + mui_list_view_add_item_ext(app->p_list_view, 0xe007, getLangString(_L_READ_ONLY), app->ntag.read_only ? getLangString(_L_ON_F) : getLangString(_L_OFF_F), (void *)AMIIBO_DETAIL_MENU_READ_ONLY); diff --git a/fw/application/src/i18n/de_DE.c b/fw/application/src/i18n/de_DE.c index 9fd7ad18..32c0cf50 100644 --- a/fw/application/src/i18n/de_DE.c +++ b/fw/application/src/i18n/de_DE.c @@ -7,6 +7,7 @@ const char * const lang_de_DE[_L_COUNT] = { [_L_BACK] = "Zurück", [_L_ERR] = "Fehler", [_L_ERR_CODE] = "Fehlercode", + [_L_FAILED] = "", [_L_APP_AMIIBO] = "Amiibo Emulator", [_L_APP_AMIIBOLINK] = "AmiiboLink", [_L_APP_BLE] = "BLE Dateitransfer", @@ -46,6 +47,9 @@ const char * const lang_de_DE[_L_COUNT] = { [_L_KNOW] = "Verstanden", [_L_RANDOM_GENERATION] = "Zufällige UUID", [_L_AUTO_RANDOM_GENERATION] = "Zufällige UUID (Automatisch)", + [_L_SET_CUSTOM_ID] = "", + [_L_INPUT_ID] = "", + [_L_INAVLID_ID] = "", [_L_SHOW_QRCODE] = "QR Code", [_L_READ_ONLY] = "", [_L_DELETE_TAG] = "Tag löschen", diff --git a/fw/application/src/i18n/en_US.c b/fw/application/src/i18n/en_US.c index 658a74d0..2724fca9 100644 --- a/fw/application/src/i18n/en_US.c +++ b/fw/application/src/i18n/en_US.c @@ -7,6 +7,7 @@ const char * const lang_en_US[_L_COUNT] = { [_L_BACK] = "Back", [_L_ERR] = "Error", [_L_ERR_CODE] = "Error Code", + [_L_FAILED] = "Failed", [_L_APP_AMIIBO] = "Amiibo Emulator", [_L_APP_AMIIBOLINK] = "AmiiboLink", [_L_APP_BLE] = "BLE File Transfer", @@ -46,6 +47,9 @@ const char * const lang_en_US[_L_COUNT] = { [_L_KNOW] = "Got it", [_L_RANDOM_GENERATION] = "Rand. Tag", [_L_AUTO_RANDOM_GENERATION] = "Auto Rand.", + [_L_SET_CUSTOM_ID] = "Set Custom ID", + [_L_INPUT_ID] = "Input ID", + [_L_INAVLID_ID] = "Invalid ID", [_L_SHOW_QRCODE] = "Display QR Code", [_L_READ_ONLY] = "Read-only", [_L_DELETE_TAG] = "Delete Tag", diff --git a/fw/application/src/i18n/es_ES.c b/fw/application/src/i18n/es_ES.c index 977ba09b..00122a32 100644 --- a/fw/application/src/i18n/es_ES.c +++ b/fw/application/src/i18n/es_ES.c @@ -7,6 +7,7 @@ const char * const lang_es_ES[_L_COUNT] = { [_L_BACK] = "[Atrás]", [_L_ERR] = "Error", [_L_ERR_CODE] = "Código error", + [_L_FAILED] = "", [_L_APP_AMIIBO] = "Emulador de amiibo", [_L_APP_AMIIBOLINK] = "AmiiboLink", [_L_APP_BLE] = "Transferencia BLE", @@ -46,6 +47,9 @@ const char * const lang_es_ES[_L_COUNT] = { [_L_KNOW] = "Entendido", [_L_RANDOM_GENERATION] = "Nuevo serial aleat.", [_L_AUTO_RANDOM_GENERATION] = "Serial alea. aut", + [_L_SET_CUSTOM_ID] = "", + [_L_INPUT_ID] = "", + [_L_INAVLID_ID] = "", [_L_SHOW_QRCODE] = "Mostrar QR", [_L_READ_ONLY] = "", [_L_DELETE_TAG] = "Borrar amiibo...", diff --git a/fw/application/src/i18n/fr_FR.c b/fw/application/src/i18n/fr_FR.c index f6696005..b7cb3abe 100644 --- a/fw/application/src/i18n/fr_FR.c +++ b/fw/application/src/i18n/fr_FR.c @@ -7,6 +7,7 @@ const char * const lang_fr_FR[_L_COUNT] = { [_L_BACK] = "Retour", [_L_ERR] = "Erreur", [_L_ERR_CODE] = "Code d'Erreur", + [_L_FAILED] = "", [_L_APP_AMIIBO] = "Emulateur Amiibo", [_L_APP_AMIIBOLINK] = "AmiiboLink", [_L_APP_BLE] = "Transfert de Fichiers BLE", @@ -46,6 +47,9 @@ const char * const lang_fr_FR[_L_COUNT] = { [_L_KNOW] = "Compris", [_L_RANDOM_GENERATION] = "Randomiser la Balise", [_L_AUTO_RANDOM_GENERATION] = "Randomisation Automatique", + [_L_SET_CUSTOM_ID] = "", + [_L_INPUT_ID] = "", + [_L_INAVLID_ID] = "", [_L_SHOW_QRCODE] = "Afficher le Code QR", [_L_READ_ONLY] = "", [_L_DELETE_TAG] = "Supprimer la Balise", diff --git a/fw/application/src/i18n/hu_HU.c b/fw/application/src/i18n/hu_HU.c index f66c057c..55f2dd42 100644 --- a/fw/application/src/i18n/hu_HU.c +++ b/fw/application/src/i18n/hu_HU.c @@ -7,6 +7,7 @@ const char * const lang_hu_HU[_L_COUNT] = { [_L_BACK] = "Vissza", [_L_ERR] = "Hiba", [_L_ERR_CODE] = "Hibakód", + [_L_FAILED] = "", [_L_APP_AMIIBO] = "Amiibo Emulátor", [_L_APP_AMIIBOLINK] = "AmiiboLink", [_L_APP_BLE] = "BLE Fájltovábbítás", @@ -46,6 +47,9 @@ const char * const lang_hu_HU[_L_COUNT] = { [_L_KNOW] = "Megvan", [_L_RANDOM_GENERATION] = "Véletlengenerátor", [_L_AUTO_RANDOM_GENERATION] = "Automat. Véletlengenerátor", + [_L_SET_CUSTOM_ID] = "", + [_L_INPUT_ID] = "", + [_L_INAVLID_ID] = "", [_L_SHOW_QRCODE] = "QR-kód Megjelenítése", [_L_READ_ONLY] = "", [_L_DELETE_TAG] = "Címke Törlése", diff --git a/fw/application/src/i18n/it_IT.c b/fw/application/src/i18n/it_IT.c index 34fa8f7b..a000d7ce 100644 --- a/fw/application/src/i18n/it_IT.c +++ b/fw/application/src/i18n/it_IT.c @@ -7,6 +7,7 @@ const char * const lang_it_IT[_L_COUNT] = { [_L_BACK] = "Indietro", [_L_ERR] = "Errore", [_L_ERR_CODE] = "Codice errore", + [_L_FAILED] = "", [_L_APP_AMIIBO] = "Emulatore Amiibo", [_L_APP_AMIIBOLINK] = "AmiiboLink", [_L_APP_BLE] = "Trasferimento file BLE", @@ -46,6 +47,9 @@ const char * const lang_it_IT[_L_COUNT] = { [_L_KNOW] = "Ho Capito", [_L_RANDOM_GENERATION] = "Tag casuale", [_L_AUTO_RANDOM_GENERATION] = "Casuale automatico", + [_L_SET_CUSTOM_ID] = "", + [_L_INPUT_ID] = "", + [_L_INAVLID_ID] = "", [_L_SHOW_QRCODE] = "Mostra codice QR", [_L_READ_ONLY] = "", [_L_DELETE_TAG] = "Elimina tag", diff --git a/fw/application/src/i18n/ja_JP.c b/fw/application/src/i18n/ja_JP.c index b9db0380..2442be6e 100644 --- a/fw/application/src/i18n/ja_JP.c +++ b/fw/application/src/i18n/ja_JP.c @@ -7,6 +7,7 @@ const char * const lang_ja_JP[_L_COUNT] = { [_L_BACK] = "戻る", [_L_ERR] = "エラー", [_L_ERR_CODE] = "エラーコード", + [_L_FAILED] = "", [_L_APP_AMIIBO] = "Amiiboエミュレータ", [_L_APP_AMIIBOLINK] = "AmiiboLink", [_L_APP_BLE] = "BLEファイル転送", @@ -46,6 +47,9 @@ const char * const lang_ja_JP[_L_COUNT] = { [_L_KNOW] = "了解", [_L_RANDOM_GENERATION] = "タグのランダム化", [_L_AUTO_RANDOM_GENERATION] = "自動ランダム化", + [_L_SET_CUSTOM_ID] = "", + [_L_INPUT_ID] = "", + [_L_INAVLID_ID] = "", [_L_SHOW_QRCODE] = "QRコード表示", [_L_READ_ONLY] = "", [_L_DELETE_TAG] = "タグの削除", diff --git a/fw/application/src/i18n/nl_NL.c b/fw/application/src/i18n/nl_NL.c index c199cc6e..ea115235 100644 --- a/fw/application/src/i18n/nl_NL.c +++ b/fw/application/src/i18n/nl_NL.c @@ -7,6 +7,7 @@ const char * const lang_nl_NL[_L_COUNT] = { [_L_BACK] = "Terug", [_L_ERR] = "Fout", [_L_ERR_CODE] = "Foutcode", + [_L_FAILED] = "", [_L_APP_AMIIBO] = "Amiibo-Emulator", [_L_APP_AMIIBOLINK] = "AmiiboLink", [_L_APP_BLE] = "BLE Bestandsoverdracht", @@ -46,6 +47,9 @@ const char * const lang_nl_NL[_L_COUNT] = { [_L_KNOW] = "Begrepen", [_L_RANDOM_GENERATION] = "Willekeurige Tag", [_L_AUTO_RANDOM_GENERATION] = "Automatische Randomisatie", + [_L_SET_CUSTOM_ID] = "", + [_L_INPUT_ID] = "", + [_L_INAVLID_ID] = "", [_L_SHOW_QRCODE] = "QR-Code Weergeven", [_L_READ_ONLY] = "", [_L_DELETE_TAG] = "Tag Verwijderen", diff --git a/fw/application/src/i18n/pt_BR.c b/fw/application/src/i18n/pt_BR.c index 94973874..cfde87a1 100644 --- a/fw/application/src/i18n/pt_BR.c +++ b/fw/application/src/i18n/pt_BR.c @@ -7,6 +7,7 @@ const char * const lang_pt_BR[_L_COUNT] = { [_L_BACK] = "Voltar", [_L_ERR] = "Erro", [_L_ERR_CODE] = "Código de Erro", + [_L_FAILED] = "", [_L_APP_AMIIBO] = "Emulador de Amiibo", [_L_APP_AMIIBOLINK] = "AmiiboLink", [_L_APP_BLE] = "Transferência de Arquivos BLE", @@ -46,6 +47,9 @@ const char * const lang_pt_BR[_L_COUNT] = { [_L_KNOW] = "Entendi", [_L_RANDOM_GENERATION] = "Randomizar Etiqueta", [_L_AUTO_RANDOM_GENERATION] = "Randomização Automática", + [_L_SET_CUSTOM_ID] = "", + [_L_INPUT_ID] = "", + [_L_INAVLID_ID] = "", [_L_SHOW_QRCODE] = "Exibir QR Code", [_L_READ_ONLY] = "", [_L_DELETE_TAG] = "Excluir Etiqueta", diff --git a/fw/application/src/i18n/ru_RU.c b/fw/application/src/i18n/ru_RU.c index ad09c9ba..0cf77478 100644 --- a/fw/application/src/i18n/ru_RU.c +++ b/fw/application/src/i18n/ru_RU.c @@ -7,6 +7,7 @@ const char * const lang_ru_RU[_L_COUNT] = { [_L_BACK] = "[Назад]", [_L_ERR] = "Ошибка", [_L_ERR_CODE] = "Код ошибки", + [_L_FAILED] = "", [_L_APP_AMIIBO] = "Эмулятор Amiibo", [_L_APP_AMIIBOLINK] = "AmiiboLink", [_L_APP_BLE] = "Передача файлов", @@ -46,6 +47,9 @@ const char * const lang_ru_RU[_L_COUNT] = { [_L_KNOW] = "[Понятно]", [_L_RANDOM_GENERATION] = "Сгенерировать UUID", [_L_AUTO_RANDOM_GENERATION] = "Автогенерация", + [_L_SET_CUSTOM_ID] = "", + [_L_INPUT_ID] = "", + [_L_INAVLID_ID] = "", [_L_SHOW_QRCODE] = "QR-код", [_L_READ_ONLY] = "Только чтение", [_L_DELETE_TAG] = "Удалить тег", diff --git a/fw/application/src/i18n/string_id.h b/fw/application/src/i18n/string_id.h index 0e77b56f..35954f1c 100644 --- a/fw/application/src/i18n/string_id.h +++ b/fw/application/src/i18n/string_id.h @@ -8,6 +8,7 @@ typedef enum { _L_BACK, _L_ERR, _L_ERR_CODE, + _L_FAILED, _L_APP_AMIIBO, _L_APP_AMIIBOLINK, _L_APP_BLE, @@ -47,6 +48,9 @@ typedef enum { _L_KNOW, _L_RANDOM_GENERATION, _L_AUTO_RANDOM_GENERATION, + _L_SET_CUSTOM_ID, + _L_INPUT_ID, + _L_INAVLID_ID, _L_SHOW_QRCODE, _L_READ_ONLY, _L_DELETE_TAG, diff --git a/fw/application/src/i18n/zh_Hans.c b/fw/application/src/i18n/zh_Hans.c index 719a6087..5bde367c 100644 --- a/fw/application/src/i18n/zh_Hans.c +++ b/fw/application/src/i18n/zh_Hans.c @@ -7,6 +7,7 @@ const char * const lang_zh_Hans[_L_COUNT] = { [_L_BACK] = "返回", [_L_ERR] = "错误", [_L_ERR_CODE] = "错误码", + [_L_FAILED] = "失败", [_L_APP_AMIIBO] = "Amiibo模拟器", [_L_APP_AMIIBOLINK] = "AmiiboLink", [_L_APP_BLE] = "蓝牙传输", @@ -46,6 +47,9 @@ const char * const lang_zh_Hans[_L_COUNT] = { [_L_KNOW] = "知道了", [_L_RANDOM_GENERATION] = "随机生成", [_L_AUTO_RANDOM_GENERATION] = "自动随机生成", + [_L_SET_CUSTOM_ID] = "自定义 ID", + [_L_INPUT_ID] = "输入 ID", + [_L_INAVLID_ID] = "无效的 ID", [_L_SHOW_QRCODE] = "显示二维码", [_L_READ_ONLY] = "禁止写入", [_L_DELETE_TAG] = "删除标签", diff --git a/fw/application/src/i18n/zh_TW.c b/fw/application/src/i18n/zh_TW.c index 6df779ee..8a2d29ea 100644 --- a/fw/application/src/i18n/zh_TW.c +++ b/fw/application/src/i18n/zh_TW.c @@ -7,6 +7,7 @@ const char * const lang_zh_TW[_L_COUNT] = { [_L_BACK] = "返回", [_L_ERR] = "錯誤", [_L_ERR_CODE] = "錯誤碼", + [_L_FAILED] = "失敗", [_L_APP_AMIIBO] = "Amiibo模擬器", [_L_APP_AMIIBOLINK] = "AmiiboLink", [_L_APP_BLE] = "藍牙傳送", @@ -46,6 +47,9 @@ const char * const lang_zh_TW[_L_COUNT] = { [_L_KNOW] = "知道了", [_L_RANDOM_GENERATION] = "隨機產生", [_L_AUTO_RANDOM_GENERATION] = "自動隨機產生", + [_L_SET_CUSTOM_ID] = "自定義 ID", + [_L_INPUT_ID] = "输入 ID", + [_L_INAVLID_ID] = "無效的 ID", [_L_SHOW_QRCODE] = "顯示二維碼", [_L_READ_ONLY] = "禁止寫入", [_L_DELETE_TAG] = "刪除標籤", diff --git a/fw/application/src/ntag/ntag_store.c b/fw/application/src/ntag/ntag_store.c index f8c197ff..36b9631a 100644 --- a/fw/application/src/ntag/ntag_store.c +++ b/fw/application/src/ntag/ntag_store.c @@ -6,69 +6,83 @@ */ #include "ntag_store.h" -//#include "fds.h" +// #include "fds.h" #include "nrf_log.h" #include "utils2.h" #include "vfs.h" const ntag_t default_ntag215 = { - .data = {0x04, 0x68, 0x95, 0x71, 0xfa, 0x5c, 0x64, 0x80, 0x42, 0x48, 0x00, 0x00, 0xe1, - 0x10, 0x3e, 0x00, 0x03, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xf1, 0x10, 0xff, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf1, 0x10, 0xff, 0xee, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xbd, 0x04, 0x00, 0x00, 0xff, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - }; + .data = {0x04, 0x68, 0x95, 0x71, 0xfa, 0x5c, 0x64, 0x80, 0x42, 0x48, 0x00, 0x00, 0xe1, 0x10, 0x3e, 0x00, 0x03, + 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf1, 0x10, 0xff, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf1, 0x10, 0xff, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x04, 0x00, 0x00, + 0xff, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +}; ret_code_t ntag_store_generate(uint8_t idx, ntag_t *ntag) { memcpy(ntag, &default_ntag215, sizeof(ntag_t)); ntag->data[7] = idx; - //ntag->index = idx; - // BCC 0 is always equal to UID0 ⊕ UID 1 ⊕ UID 2 ⊕ 0x88 - // ntag->data[3] = ntag->data[0] ^ ntag->data[1] ^ ntag->data[2] ^ 0x88; - // BCC 1 is always equal to UID3 ⊕ UID 4 ⊕ UID 5 ⊕ UID6 + // ntag->index = idx; + // BCC 0 is always equal to UID0 ⊕ UID 1 ⊕ UID 2 ⊕ 0x88 + // ntag->data[3] = ntag->data[0] ^ ntag->data[1] ^ ntag->data[2] ^ 0x88; + // BCC 1 is always equal to UID3 ⊕ UID 4 ⊕ UID 5 ⊕ UID6 ntag->data[8] = ntag->data[4] ^ ntag->data[5] ^ ntag->data[6] ^ ntag->data[7]; return NRF_SUCCESS; } +void ntag_store_set_uuid(ntag_t *ntag, uint8_t *uuid) { + + ntag->data[0] = uuid[0]; // fixed + ntag->data[1] = uuid[1]; + ntag->data[2] = uuid[2]; + // BCC 0 is always equal to UID0 ⊕ UID 1 ⊕ UID 2 ⊕ 0x88 + ntag->data[3] = ntag->data[0] ^ ntag->data[1] ^ ntag->data[2] ^ 0x88; + ntag->data[4] = uuid[3]; + ntag->data[5] = uuid[4]; + ntag->data[6] = uuid[5]; + ntag->data[7] = uuid[6]; + + // BCC 1 is always equal to UID3 ⊕ UID 4 ⊕ UID 5 ⊕ UID6 + ntag->data[8] = ntag->data[4] ^ ntag->data[5] ^ ntag->data[6] ^ ntag->data[7]; +} +void ntag_store_get_uuid(ntag_t *ntag, uint8_t *uuid) { + uuid[0] = ntag->data[0]; + uuid[1] = ntag->data[1]; + uuid[2] = ntag->data[2]; + uuid[3] = ntag->data[4]; + uuid[4] = ntag->data[5]; + uuid[5] = ntag->data[6]; + uuid[6] = ntag->data[7]; +} ret_code_t ntag_store_uuid_rand(ntag_t *ntag) { @@ -92,15 +106,14 @@ ret_code_t ntag_store_uuid_rand(ntag_t *ntag) { return NRF_SUCCESS; } -void ntag_store_new_rand(ntag_t* ntag){ +void ntag_store_new_rand(ntag_t *ntag) { memcpy(ntag, &default_ntag215, sizeof(ntag_t)); ntag_store_uuid_rand(ntag); } #ifdef INTERNAL_ENABLE -static volatile bool m_fds_ready = - false; /**< Flag used to indicate that FDS initialization is finished. */ +static volatile bool m_fds_ready = false; /**< Flag used to indicate that FDS initialization is finished. */ static volatile ret_code_t m_fs_op_retcode = NRF_SUCCESS; #define FILE_ID 0xAABB @@ -168,8 +181,7 @@ ret_code_t ntag_store_read(uint8_t idx, ntag_t *tag) { memcpy(tag->data, flash_record.p_data, NTAG_DATA_SIZE); // Print file length and raw message data. - NRF_LOG_DEBUG("NDEF file data length: %u bytes.", - flash_record.p_header->length_words * sizeof(uint32_t)); + NRF_LOG_DEBUG("NDEF file data length: %u bytes.", flash_record.p_header->length_words * sizeof(uint32_t)); // Close the record when done. err_code = fds_record_close(&m_record_desc); diff --git a/fw/application/src/ntag/ntag_store.h b/fw/application/src/ntag/ntag_store.h index 439fa1da..11907b01 100644 --- a/fw/application/src/ntag/ntag_store.h +++ b/fw/application/src/ntag/ntag_store.h @@ -8,20 +8,21 @@ #ifndef NTAG_STORE_H_ #define NTAG_STORE_H_ -#include -#include #include "compiler_abstraction.h" -#include "sdk_errors.h" #include "ntag_def.h" +#include "sdk_errors.h" +#include +#include -//填充默认ntag数据并随机uuid -void ntag_store_new_rand(ntag_t* ntag); -//随机uuid数据(不修改其他) +// 填充默认ntag数据并随机uuid +void ntag_store_new_rand(ntag_t *ntag); +// 随机uuid数据(不修改其他) ret_code_t ntag_store_uuid_rand(ntag_t *ntag); +void ntag_store_set_uuid(ntag_t *ntag, uint8_t *uuid); +void ntag_store_get_uuid(ntag_t *ntag, uint8_t *uuid); ret_code_t ntag_store_read(uint8_t idx, ntag_t *ntag); ret_code_t ntag_store_write(uint8_t idx, ntag_t *ntag); ret_code_t ntag_store_reset(uint8_t idx, ntag_t *ntag); - #endif /* NTAG_STORE_H_ */ From 40ace4c30287f9283a7ab6c1fe769e18e20b29fd Mon Sep 17 00:00:00 2001 From: solosky Date: Sun, 13 Oct 2024 14:28:49 +0800 Subject: [PATCH 6/6] Update i18n.csv --- fw/data/i18n.csv | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fw/data/i18n.csv b/fw/data/i18n.csv index 522e4fa7..5f65a24d 100644 --- a/fw/data/i18n.csv +++ b/fw/data/i18n.csv @@ -6,6 +6,7 @@ _L_OFF_F,[OFF],[关],[關],[NO],[KI],[AUS],[DÉSACTIVÉ],[UIT],[DESLIGADO],[オ _L_BACK,Back,返回,返回,[Atrás],Vissza,Zurück,Retour,Terug,Voltar,戻る,Indietro,[Назад] _L_ERR,Error,错误,錯誤,Error,Hiba,Fehler,Erreur,Fout,Erro,エラー,Errore,Ошибка _L_ERR_CODE,Error Code,错误码,錯誤碼,Código error,Hibakód,Fehlercode,Code d'Erreur,Foutcode,Código de Erro,エラーコード,Codice errore,Код ошибки +_L_FAILED,Failed,失败,失敗,,,,,,,,, _L_APP_AMIIBO,Amiibo Emulator,Amiibo模拟器,Amiibo模擬器,Emulador de amiibo,Amiibo Emulátor,Amiibo Emulator,Emulateur Amiibo,Amiibo-Emulator,Emulador de Amiibo,Amiiboエミュレータ,Emulatore Amiibo,Эмулятор Amiibo _L_APP_AMIIBOLINK,AmiiboLink,AmiiboLink,AmiiboLink,AmiiboLink,AmiiboLink,AmiiboLink,AmiiboLink,AmiiboLink,AmiiboLink,AmiiboLink,AmiiboLink,AmiiboLink _L_APP_BLE,BLE File Transfer,蓝牙传输,藍牙傳送,Transferencia BLE,BLE Fájltovábbítás,BLE Dateitransfer,Transfert de Fichiers BLE,BLE Bestandsoverdracht,Transferência de Arquivos BLE,BLEファイル転送,Trasferimento file BLE,Передача файлов @@ -45,6 +46,9 @@ _L_UPLOAD_KEY_RETAIL_BIN,Upload the file key_retail.bin to the root directory of _L_KNOW,Got it,知道了,知道了,Entendido,Megvan,Verstanden,Compris,Begrepen,Entendi,了解,Ho Capito,[Понятно] _L_RANDOM_GENERATION,Rand. Tag,随机生成,隨機產生,Nuevo serial aleat.,Véletlengenerátor,Zufällige UUID,Randomiser la Balise,Willekeurige Tag,Randomizar Etiqueta,タグのランダム化,Tag casuale,Сгенерировать UUID _L_AUTO_RANDOM_GENERATION,Auto Rand.,自动随机生成,自動隨機產生,Serial alea. aut,Automat. Véletlengenerátor,Zufällige UUID (Automatisch),Randomisation Automatique,Automatische Randomisatie,Randomização Automática,自動ランダム化,Casuale automatico,Автогенерация +_L_SET_CUSTOM_ID,Set Custom ID,自定义 ID,自定義 ID,,,,,,,,, +_L_INPUT_ID,Input ID,输入 ID,输入 ID,,,,,,,,, +_L_INAVLID_ID,Invalid ID,无效的 ID,無效的 ID,,,,,,,,, _L_SHOW_QRCODE,Display QR Code,显示二维码,顯示二維碼,Mostrar QR,QR-kód Megjelenítése,QR Code,Afficher le Code QR,QR-Code Weergeven,Exibir QR Code,QRコード表示,Mostra codice QR,QR-код _L_READ_ONLY,Read-only,禁止写入,禁止寫入,,,,,,,,,Только чтение _L_DELETE_TAG,Delete Tag,删除标签,刪除標籤,Borrar amiibo...,Címke Törlése,Tag löschen,Supprimer la Balise,Tag Verwijderen,Excluir Etiqueta,タグの削除,Elimina tag,Удалить тег