From cd64bfe84b1f549cce5b772475c07752e54a949d Mon Sep 17 00:00:00 2001 From: "Sergio R. Caprile" Date: Fri, 14 Apr 2023 10:11:12 -0300 Subject: [PATCH] Remove %H %V %Q %q modifiers --- examples/device-dashboard/net.c | 43 +- examples/device-dashboard/packed_fs.c | 1397 ++++++++++++++-------- examples/embedded-filesystem/packed_fs.c | 743 +++++++++++- examples/esp32/uart-bridge/main/cli.c | 5 +- examples/huge-response/main.c | 10 +- examples/json-rpc-over-websocket/main.c | 5 +- examples/uart-bridge/net.c | 22 +- examples/webui-login/main.c | 8 +- examples/webui-plain/main.c | 10 +- examples/webui-push-rest/main.c | 7 +- examples/webui-push-ws/main.c | 7 +- examples/webui-rest/main.c | 8 +- mongoose.c | 176 +-- mongoose.h | 3 + src/fmt.c | 88 +- src/printf.c | 71 +- src/printf.h | 3 + src/rpc.c | 19 +- test/unit_test.c | 25 +- 19 files changed, 1868 insertions(+), 782 deletions(-) diff --git a/examples/device-dashboard/net.c b/examples/device-dashboard/net.c index fcf52695..c2b44c70 100644 --- a/examples/device-dashboard/net.c +++ b/examples/device-dashboard/net.c @@ -5,9 +5,9 @@ #if !defined(MQTT_SERVER) #if MG_ENABLE_MBEDTLS || MG_ENABLE_OPENSSL - #define MQTT_SERVER "mqtts://broker.hivemq.com:8883" +#define MQTT_SERVER "mqtts://broker.hivemq.com:8883" #else - #define MQTT_SERVER "mqtt://broker.hivemq.com:1883" +#define MQTT_SERVER "mqtt://broker.hivemq.com:1883" #endif #endif #define MQTT_PUBLISH_TOPIC "mg/my_device" @@ -115,7 +115,8 @@ static void send_notification(struct mg_mgr *mgr, const char *fmt, ...) { // Send simulated metrics data to the dashboard, for chart rendering static void timer_metrics_fn(void *param) { - send_notification(param, "{%Q:%Q,%Q:[%lu, %d]}", "name", "metrics", "data", + send_notification(param, "{%m:%m,%m:[%lu, %d]}", mg_print_esc, 0, "name", + mg_print_esc, 0, "metrics", mg_print_esc, 0, "data", (unsigned long) ourtime(NULL), 10 + (int) ((double) rand() * 10 / RAND_MAX)); } @@ -132,14 +133,17 @@ static void mqtt_fn(struct mg_connection *c, int ev, void *ev_data, void *fnd) { s_connected = true; c->is_hexdumping = 1; mg_mqtt_sub(s_mqtt, mg_str(s_config.sub), 2); - send_notification(c->mgr, "{%Q:%Q,%Q:null}", "name", "config", "data"); + send_notification(c->mgr, "{%m:%m,%m:null}", mg_print_esc, 0, "name", + mg_print_esc, 0, "config", mg_print_esc, 0, "data"); MG_INFO(("MQTT connected, server %s", MQTT_SERVER)); } else if (ev == MG_EV_MQTT_MSG) { struct mg_mqtt_message *mm = ev_data; - send_notification(c->mgr, "{%Q:%Q,%Q:{%Q: %.*Q, %Q: %.*Q, %Q: %d}}", "name", - "message", "data", "topic", (int) mm->topic.len, - mm->topic.ptr, "data", (int) mm->data.len, mm->data.ptr, - "qos", (int) mm->qos); + send_notification(c->mgr, "{%m:%m,%m:{%m: %m, %m: %m, %m: %d}}", + mg_print_esc, 0, "name", mg_print_esc, 0, "message", + mg_print_esc, 0, "data", mg_print_esc, 0, "topic", + mg_print_esc, (int) mm->topic.len, mm->topic.ptr, + mg_print_esc, 0, "data", mg_print_esc, (int) mm->data.len, + mm->data.ptr, mg_print_esc, 0, "qos", (int) mm->qos); } else if (ev == MG_EV_MQTT_CMD) { struct mg_mqtt_message *mm = (struct mg_mqtt_message *) ev_data; MG_DEBUG(("%lu cmd %d qos %d", c->id, mm->cmd, mm->qos)); @@ -147,7 +151,8 @@ static void mqtt_fn(struct mg_connection *c, int ev, void *ev_data, void *fnd) { s_mqtt = NULL; if (s_connected) { s_connected = false; - send_notification(c->mgr, "{%Q:%Q,%Q:null}", "name", "config", "data"); + send_notification(c->mgr, "{%m:%m,%m:null}", mg_print_esc, 0, "name", + mg_print_esc, 0, "config", mg_print_esc, 0, "data"); } } (void) fnd; @@ -216,11 +221,15 @@ void device_dashboard_fn(struct mg_connection *c, int ev, void *ev_data, mg_http_reply(c, 403, "", "Denied\n"); } else if (mg_http_match_uri(hm, "/api/config/get")) { #ifdef DISABLE_ROUTING - mg_http_reply(c, 200, NULL, "{%Q:%Q,%Q:%Q,%Q:%Q}\n", "url", s_config.url, - "pub", s_config.pub, "sub", s_config.sub); + mg_http_reply(c, 200, NULL, "{%m:%m,%m:%m,%m:%m}\n", mg_print_esc, 0, + "url", mg_print_esc, 0, s_config.url, mg_print_esc, 0, + "pub", mg_print_esc, 0, s_config.pub, mg_print_esc, 0, + "sub", mg_print_esc, 0, s_config.sub); #else - mg_http_reply(c, 200, NULL, "{%Q:%Q,%Q:%Q,%Q:%Q,%Q:%s}\n", "url", - s_config.url, "pub", s_config.pub, "sub", s_config.sub, + mg_http_reply(c, 200, NULL, "{%m:%m,%m:%m,%m:%m,%m:%s}\n", mg_print_esc, + 0, "url", mg_print_esc, 0, s_config.url, mg_print_esc, 0, + "pub", mg_print_esc, 0, s_config.pub, mg_print_esc, 0, + "sub", mg_print_esc, 0, s_config.sub, mg_print_esc, 0, "connected", s_connected ? "true" : "false"); #endif } else if (mg_http_match_uri(hm, "/api/config/set")) { @@ -230,7 +239,8 @@ void device_dashboard_fn(struct mg_connection *c, int ev, void *ev_data, update_config(&hm->body, "pub", &s_config.pub); update_config(&hm->body, "sub", &s_config.sub); if (s_mqtt) s_mqtt->is_closing = 1; // Ask to disconnect from MQTT - send_notification(c->mgr, "{%Q:%Q,%Q:null}", "name", "config", "data"); + send_notification(c->mgr, "{%m:%m,%m:null}", mg_print_esc, 0, "name", + mg_print_esc, 0, "config", mg_print_esc, 0, "data"); mg_http_reply(c, 200, "", "ok\n"); } else { mg_http_reply(c, 403, "", "Denied\n"); @@ -246,8 +256,9 @@ void device_dashboard_fn(struct mg_connection *c, int ev, void *ev_data, c->data[0] = 'W'; // Mark ourselves as a event listener mg_ws_upgrade(c, hm, NULL); } else if (mg_http_match_uri(hm, "/api/login")) { - mg_http_reply(c, 200, NULL, "{%Q:%Q,%Q:%Q}\n", "user", u->name, "token", - u->token); + mg_http_reply(c, 200, NULL, "{%m:%m,%m:%m}\n", mg_print_esc, 0, "user", + mg_print_esc, 0, u->name, mg_print_esc, 0, "token", + mg_print_esc, 0, u->token); } else { struct mg_http_serve_opts opts; memset(&opts, 0, sizeof(opts)); diff --git a/examples/device-dashboard/packed_fs.c b/examples/device-dashboard/packed_fs.c index 2c633f8d..a973594e 100644 --- a/examples/device-dashboard/packed_fs.c +++ b/examples/device-dashboard/packed_fs.c @@ -3,414 +3,424 @@ #include static const unsigned char v1[] = { - 31, 139, 8, 8, 16, 107, 222, 99, 0, 3, 109, 97, // .....k.c..ma - 105, 110, 46, 106, 115, 0, 189, 91, 123, 119, 219, 184, // in.js..[{w.. - 177, 255, 63, 159, 2, 171, 235, 91, 81, 181, 68, 73, // ..?....[Q.DI - 118, 156, 205, 149, 35, 245, 164, 217, 237, 221, 244, 36, // v...#......$ - 217, 116, 157, 109, 187, 199, 199, 167, 166, 72, 72, 98, // .t.m.....HHb - 77, 145, 92, 18, 122, 213, 225, 119, 191, 191, 25, 128, // M...z..w.... - 36, 40, 203, 143, 108, 218, 235, 228, 72, 36, 48, 24, // $(..l...H$0. - 12, 102, 6, 243, 2, 212, 94, 229, 82, 228, 42, 11, // .f....^.R.*. - 125, 213, 62, 127, 22, 46, 211, 36, 83, 226, 246, 77, // }.>....$S..M - 130, 135, 88, 198, 170, 43, 22, 248, 175, 150, 81, 87, // ..X..+....QW - 100, 50, 14, 100, 214, 21, 24, 240, 253, 108, 38, 125, // d2.d.....l&} - 197, 143, 23, 202, 83, 146, 159, 126, 146, 179, 66, 204, // ....S..~..B. - 178, 100, 41, 218, 110, 63, 205, 164, 231, 43, 119, 25, // .d).n?...+w. - 198, 238, 63, 115, 32, 126, 182, 246, 50, 17, 200, 181, // ..?s ~..2... - 23, 4, 153, 24, 139, 22, 125, 203, 60, 31, 209, 116, // ......}.<..t - 45, 116, 251, 73, 156, 43, 241, 222, 219, 190, 151, 68, // -t.I.+.....D - 75, 254, 157, 167, 188, 143, 73, 24, 171, 28, 208, 103, // K.....I....g - 3, 64, 244, 251, 226, 211, 34, 204, 69, 14, 26, 35, // .@....".E..# - 41, 210, 213, 52, 10, 243, 69, 63, 95, 77, 115, 63, // )..4..E?_Ms? - 11, 167, 82, 160, 15, 84, 4, 66, 37, 34, 245, 242, // ..R..T.B%".. - 92, 196, 137, 10, 103, 161, 239, 169, 16, 184, 133, 90, // ....g......Z - 120, 74, 108, 100, 38, 9, 81, 38, 125, 25, 174, 1, // xJld&.Q&}... - 203, 228, 170, 5, 56, 32, 179, 53, 45, 14, 131, 189, // ....8 .5-... - 40, 18, 254, 34, 140, 2, 225, 151, 92, 200, 69, 50, // (.."......E2 - 99, 48, 47, 77, 93, 94, 202, 199, 213, 244, 98, 53, // c0/M]^....b5 - 5, 109, 206, 108, 21, 251, 52, 133, 211, 17, 183, 207, // .m.l..4..... - 132, 160, 206, 133, 23, 7, 145, 204, 136, 244, 219, 162, // ............ - 43, 194, 0, 15, 88, 130, 192, 188, 106, 149, 197, 12, // +...X...j... - 39, 68, 69, 249, 72, 84, 56, 102, 113, 199, 244, 138, // 'DE.HT8fq... - 10, 203, 101, 24, 28, 31, 95, 1, 197, 44, 62, 231, // ..e..._..,>. - 174, 162, 203, 95, 171, 248, 16, 134, 48, 168, 49, 4, // ..._....0.1. - 50, 146, 74, 218, 136, 174, 26, 24, 12, 15, 173, 209, // 2.J......... - 1, 216, 94, 143, 159, 37, 153, 112, 104, 65, 55, 34, // ..^..%.phA7" - 140, 43, 52, 157, 26, 225, 205, 149, 30, 97, 176, 226, // .+4......a.. - 179, 56, 127, 86, 116, 156, 78, 37, 209, 15, 222, 26, // .8.Vt.N%.... - 148, 167, 89, 146, 130, 27, 19, 214, 164, 235, 103, 175, // ..Y.......g. - 130, 112, 13, 157, 219, 69, 114, 220, 154, 122, 254, 205, // .p...Er..z.. - 60, 75, 86, 113, 48, 18, 255, 117, 122, 122, 122, 14, // .,.Lv... - 37, 158, 105, 39, 99, 139, 184, 66, 92, 232, 206, 89, // %.i'c..B...Y - 24, 201, 188, 43, 162, 240, 70, 138, 55, 23, 23, 253, // ...+..F.7... - 63, 95, 244, 127, 248, 244, 254, 29, 112, 193, 44, 133, // ?_......p.,. - 75, 111, 78, 189, 94, 38, 121, 225, 128, 165, 77, 131, // KoN.^&y...M. - 229, 213, 214, 92, 76, 195, 216, 203, 118, 238, 179, 146, // ....L...v... - 169, 63, 191, 37, 15, 145, 51, 200, 79, 223, 95, 124, // .?.%..3.O._| - 18, 175, 63, 190, 21, 236, 78, 150, 180, 57, 3, 49, // ..?...N..9.1 - 221, 113, 159, 230, 71, 87, 211, 46, 118, 201, 74, 248, // .q..GW..v.J. - 216, 120, 114, 11, 58, 99, 9, 100, 154, 253, 226, 149, // .xr.:c.d.... - 15, 230, 79, 252, 85, 22, 189, 234, 243, 35, 81, 178, // ..O.U....#Q. - 196, 154, 122, 17, 224, 196, 74, 133, 81, 168, 118, 35, // ..z...J.Q.v# - 214, 225, 84, 11, 152, 116, 184, 30, 38, 122, 43, 225, // ..T..t..&z+. - 5, 64, 58, 34, 135, 53, 16, 71, 183, 198, 67, 22, // .@:".5.G..C. - 125, 47, 13, 129, 51, 158, 133, 243, 254, 92, 170, 18, // }/..3....... - 127, 189, 41, 126, 11, 162, 92, 42, 209, 11, 68, 27, // ..)~...*..D. - 102, 127, 188, 156, 247, 177, 3, 66, 191, 253, 149, 168, // f......B.... - 151, 112, 226, 144, 4, 112, 67, 148, 132, 220, 52, 140, // .p...pC...4. - 23, 50, 138, 146, 125, 236, 150, 142, 151, 92, 102, 214, // .2..}.....f. - 242, 232, 61, 127, 77, 146, 36, 165, 175, 118, 0, 252, // ..=.M.$..v.. - 183, 23, 239, 84, 184, 148, 174, 248, 96, 195, 146, 186, // ...T....`... - 102, 36, 244, 24, 138, 77, 114, 255, 155, 156, 94, 36, // f$...Mr...^$ - 254, 13, 150, 139, 49, 63, 255, 244, 214, 72, 138, 9, // ....1?...H.. - 222, 120, 202, 95, 148, 100, 121, 185, 248, 243, 197, 143, // .x._.dy..... - 31, 56, 254, 137, 231, 216, 220, 26, 240, 182, 5, 149, // .8.......... - 148, 173, 145, 104, 185, 110, 171, 43, 90, 228, 227, 240, // ...h.n.+Z... - 230, 186, 110, 97, 70, 150, 124, 250, 132, 61, 164, 199, // ..naF.|..=.. - 108, 114, 80, 35, 122, 61, 24, 245, 5, 105, 89, 54, // lrP#z=...iY6 - 100, 134, 13, 209, 4, 246, 199, 48, 69, 98, 67, 187, // d......0EbC. - 104, 143, 127, 54, 57, 150, 201, 75, 75, 131, 103, 217, // h..69..KK.g. - 61, 109, 246, 224, 31, 176, 153, 199, 181, 203, 102, 3, // =m........f. - 168, 125, 182, 134, 184, 164, 217, 187, 96, 135, 250, 25, // .}......`... - 15, 20, 56, 148, 97, 154, 211, 110, 179, 171, 54, 112, // ..8.a..n..6p - 68, 31, 195, 125, 196, 195, 253, 112, 145, 153, 81, 194, // D..}...p..Q. - 147, 151, 158, 97, 38, 65, 182, 83, 89, 126, 33, 218, // ...a&A.SY~!. - 188, 26, 6, 109, 119, 173, 246, 219, 133, 244, 96, 119, // ...mw.....`w - 192, 218, 219, 215, 224, 12, 140, 198, 191, 88, 104, 35, // .........Xh# - 209, 254, 163, 151, 99, 151, 183, 197, 177, 152, 170, 196, // ....c....... - 115, 136, 106, 60, 183, 71, 212, 66, 164, 117, 138, 162, // s.j<.G.B.u.. - 99, 97, 114, 177, 51, 99, 39, 35, 83, 159, 33, 166, // car.3c'#S.!. - 164, 128, 235, 190, 110, 241, 187, 223, 137, 202, 69, 133, // ....n.....E. - 104, 109, 66, 250, 196, 115, 71, 102, 12, 140, 175, 142, // hmB..sGf.... - 21, 154, 221, 245, 34, 236, 25, 200, 54, 176, 1, 109, // ...."...6..m - 213, 38, 126, 219, 219, 132, 129, 66, 244, 244, 252, 229, // .&~....B.... - 32, 133, 183, 175, 140, 190, 113, 236, 182, 163, 57, 59, // .....q...9; - 236, 104, 234, 112, 102, 223, 171, 159, 208, 128, 50, 152, // .h.pf.....2. - 169, 29, 75, 233, 117, 94, 188, 120, 1, 167, 178, 239, // ..K.u^.x.... - 72, 140, 114, 104, 127, 178, 31, 155, 212, 62, 233, 204, // H.rh.....>.. - 248, 164, 210, 203, 135, 113, 186, 82, 66, 237, 82, 57, // .....q.RB.R9 - 110, 43, 185, 85, 109, 129, 32, 198, 151, 139, 36, 194, // n+.Um. ...$. - 130, 199, 237, 15, 216, 11, 237, 18, 139, 89, 242, 112, // .........Y.p - 48, 248, 239, 243, 86, 197, 212, 36, 102, 28, 136, 12, // 0...V..$f... - 88, 73, 74, 221, 115, 228, 218, 85, 152, 86, 42, 119, // XIJ.s..U.V*w - 237, 69, 43, 217, 41, 4, 127, 3, 142, 163, 13, 68, // .E+.)......D - 36, 15, 69, 83, 79, 162, 184, 69, 170, 2, 55, 23, // $.ESO..E..7. - 180, 26, 84, 183, 62, 86, 205, 95, 74, 57, 141, 124, // ..T.>V._J9.| - 128, 114, 154, 175, 176, 198, 251, 136, 134, 231, 212, 193, // .r.......... - 186, 246, 212, 53, 13, 247, 86, 52, 93, 41, 5, 167, // ...5..V4]).. - 108, 135, 91, 7, 232, 62, 16, 55, 85, 148, 32, 246, // l.[..>.7U. . - 244, 166, 240, 130, 160, 228, 27, 222, 75, 159, 63, 139, // ........K.?. - 111, 152, 88, 43, 112, 211, 52, 78, 42, 69, 209, 211, // o.X+p.4N*E.. - 62, 72, 113, 35, 208, 177, 117, 250, 132, 131, 78, 51, // >Hq#..u...N3 - 255, 95, 17, 235, 6, 218, 84, 96, 175, 91, 14, 163, // ._....T`.[.. - 107, 27, 67, 253, 114, 194, 47, 39, 15, 135, 121, 69, // k.C.r./'..yE - 29, 233, 189, 97, 247, 181, 202, 216, 112, 60, 98, 250, // ...a....p - 125, 50, 1, 122, 35, 191, 109, 24, 117, 114, 67, 173, // }2.z#.m.urC. - 59, 9, 124, 211, 116, 139, 218, 153, 100, 81, 97, 91, // ;.|.t...dQa[ - 226, 74, 196, 133, 5, 124, 200, 71, 97, 179, 221, 53, // .J...|.Ga..5 - 244, 165, 1, 63, 96, 146, 27, 54, 214, 76, 106, 44, // ...?`..6.Lj, - 235, 157, 57, 239, 205, 134, 15, 228, 190, 63, 243, 96, // ..9......?.` - 219, 28, 55, 194, 241, 39, 242, 94, 60, 206, 252, 139, // ..7..'.^<... - 170, 90, 198, 209, 255, 215, 9, 160, 100, 63, 116, 245, // .Z......d?t. - 0, 251, 169, 245, 33, 55, 75, 214, 234, 55, 51, 191, // ....!7K..73. - 156, 178, 193, 124, 107, 198, 255, 127, 230, 63, 206, 251, // ...|k....?.. - 143, 186, 218, 246, 239, 224, 124, 205, 251, 244, 32, 239, // ......|... . - 83, 155, 247, 135, 131, 156, 175, 225, 126, 122, 136, 251, // S.......~z.. - 233, 127, 132, 251, 154, 160, 95, 76, 10, 78, 181, 234, // ......_L.N.. - 70, 93, 2, 9, 213, 102, 179, 113, 23, 225, 90, 46, // F]...f.q..Z. - 127, 133, 119, 91, 246, 3, 185, 76, 242, 254, 70, 78, // ..w[...L..FN - 115, 206, 0, 123, 32, 18, 174, 163, 111, 196, 243, 3, // s..{ ...o... - 0, 223, 255, 133, 18, 68, 221, 45, 0, 40, 52, 8, // .....D.-.(4. - 87, 43, 144, 117, 114, 46, 106, 178, 216, 58, 13, 45, // W+.ur.j..:.- - 173, 245, 29, 237, 48, 60, 90, 230, 115, 51, 133, 149, // ....06 - 151, 26, 85, 156, 40, 75, 28, 135, 2, 199, 247, 90, // ..U.(K.....Z - 138, 112, 198, 203, 170, 66, 248, 104, 130, 209, 216, 193, // .p...B.h.... - 191, 38, 121, 107, 130, 143, 145, 56, 186, 93, 186, 70, // .&yk...8.].F - 43, 92, 52, 20, 162, 222, 192, 141, 17, 188, 187, 91, // +.4........[ - 19, 189, 201, 27, 163, 184, 233, 222, 113, 92, 99, 152, // ........q.c. - 208, 103, 115, 20, 181, 84, 101, 217, 253, 98, 192, 251, // .gs..Te..b.. - 82, 77, 31, 12, 138, 75, 101, 230, 40, 181, 28, 210, // RM...Ke.(... - 8, 85, 47, 175, 236, 128, 86, 109, 21, 131, 126, 218, // .U/...Vm..~. - 170, 187, 85, 129, 123, 131, 87, 61, 152, 207, 58, 244, // ..U.{.W=..:. - 225, 136, 91, 29, 79, 212, 103, 36, 80, 144, 250, 120, // ..[.O.g$P..x - 33, 156, 9, 106, 112, 41, 226, 19, 227, 113, 85, 59, // !..jp)...qU; - 106, 119, 108, 66, 157, 45, 205, 177, 165, 208, 21, 81, // jwlB.-.....Q - 157, 115, 73, 35, 136, 41, 87, 157, 242, 216, 193, 124, // .sI#.)W....| - 155, 72, 201, 76, 110, 157, 142, 208, 153, 72, 25, 6, // .H.Ln....H.. - 55, 66, 95, 218, 234, 203, 74, 71, 180, 109, 180, 195, // 7B_...JG.m.. - 94, 187, 184, 245, 132, 192, 247, 203, 130, 94, 19, 240, // ^........^.. - 150, 245, 178, 131, 1, 47, 36, 241, 88, 192, 139, 96, // ...../$.X..` - 183, 174, 124, 104, 161, 145, 160, 44, 121, 194, 222, 42, // ..|h...,y..* - 218, 251, 99, 209, 50, 214, 71, 34, 43, 198, 246, 182, // ..c.2.G"+... - 83, 130, 26, 156, 96, 168, 60, 187, 34, 173, 250, 166, // S...`.<."... - 28, 252, 7, 209, 182, 235, 210, 11, 143, 206, 215, 180, // ............ - 193, 42, 133, 235, 81, 181, 179, 45, 70, 13, 188, 110, // .*..Q..-F..n - 53, 37, 161, 168, 94, 8, 172, 13, 151, 82, 55, 124, // 5%..^....R7| - 117, 172, 123, 58, 240, 7, 207, 7, 143, 197, 186, 76, // u.{:.......L - 113, 185, 33, 236, 248, 86, 155, 45, 203, 2, 11, 205, // q.!..V.-.... - 132, 17, 157, 1, 29, 221, 214, 92, 41, 204, 33, 208, // ........).!. - 193, 32, 65, 31, 183, 80, 182, 78, 238, 142, 138, 145, // . A..P.N.... - 179, 40, 217, 140, 76, 69, 104, 255, 100, 171, 85, 121, // .(..LEh.d.Uy - 88, 93, 91, 210, 52, 96, 247, 27, 250, 220, 165, 151, // X][.4`...... - 58, 149, 130, 194, 128, 57, 102, 83, 64, 23, 77, 115, // :....9fS@.Ms - 209, 233, 20, 191, 45, 98, 121, 122, 192, 98, 166, 58, // ....-byz.b.: - 20, 178, 52, 74, 46, 20, 191, 176, 57, 79, 233, 104, // ..4J....9O.h - 87, 240, 121, 151, 235, 186, 15, 7, 51, 101, 32, 3, // W.y.....3e . - 85, 111, 4, 50, 214, 222, 44, 26, 193, 135, 209, 200, // Uo.2..,..... - 50, 214, 56, 16, 219, 208, 22, 184, 39, 182, 121, 130, // 2.8.....'.y. - 239, 46, 249, 141, 177, 57, 215, 33, 181, 107, 173, 207, // .....9.!.k.. - 5, 196, 58, 244, 248, 248, 128, 206, 75, 100, 108, 247, // ..:.....Kdl. - 16, 209, 240, 156, 8, 229, 18, 198, 71, 93, 182, 74, // ........G].J - 113, 117, 154, 26, 92, 241, 26, 174, 186, 161, 140, 116, // qu.........t - 38, 227, 213, 135, 194, 129, 142, 19, 141, 101, 51, 199, // &........e3. - 213, 123, 231, 19, 119, 3, 128, 61, 191, 78, 148, 214, // .{..w..=.N.. - 101, 230, 251, 188, 37, 146, 209, 239, 183, 169, 222, 164, // e...%....... - 224, 217, 138, 14, 67, 242, 17, 53, 107, 119, 68, 37, // ....C..5kwD% - 119, 44, 32, 36, 15, 34, 221, 185, 43, 46, 197, 229, // w, $."..+... - 240, 197, 217, 243, 211, 23, 195, 211, 179, 147, 174, 24, // ............ - 254, 207, 85, 215, 106, 57, 69, 203, 75, 180, 64, 244, // ..U.j9E.K.@. - 226, 138, 176, 112, 5, 171, 107, 142, 34, 187, 98, 167, // ...p..k.".b. - 16, 54, 2, 213, 214, 124, 239, 16, 35, 208, 167, 183, // .6...|..#... - 69, 27, 63, 111, 241, 108, 60, 220, 197, 95, 255, 247, // E.?o.l<.._.. - 30, 231, 6, 196, 214, 223, 166, 108, 57, 238, 29, 250, // .......l9... - 59, 46, 187, 63, 151, 3, 22, 67, 107, 244, 231, 70, // ;..?...Ck..F - 183, 141, 226, 248, 110, 247, 103, 123, 160, 249, 88, 212, // ....n.g{..X. - 16, 155, 225, 30, 196, 230, 228, 203, 240, 107, 242, 78, // .........k.N - 14, 80, 247, 208, 218, 240, 17, 81, 60, 91, 30, 137, // .P.....Q<[.. - 186, 37, 215, 171, 134, 146, 255, 32, 112, 44, 78, 7, // .%..... p,N. - 93, 34, 108, 44, 240, 189, 160, 134, 151, 93, 154, 115, // ]"l,.....].s - 12, 209, 157, 27, 84, 90, 78, 213, 112, 243, 250, 249, // ....TZN.p... - 179, 120, 94, 202, 174, 234, 219, 86, 125, 103, 229, 104, // .x^....V}g.h - 82, 157, 170, 159, 95, 208, 123, 121, 85, 33, 95, 242, // R..._.{yU!_. - 153, 130, 65, 77, 47, 232, 30, 212, 189, 222, 214, 234, // ..AM/....... - 197, 11, 122, 223, 123, 106, 1, 139, 184, 117, 189, 52, // ..z.{j...u.4 - 141, 118, 78, 188, 138, 162, 46, 79, 195, 102, 50, 165, // .vN....O.f2. - 205, 159, 94, 14, 77, 88, 64, 88, 182, 246, 28, 91, // ..^.MX@X...[ - 51, 135, 198, 18, 198, 15, 98, 25, 52, 176, 88, 180, // 3.....b.4.X. - 108, 191, 132, 22, 141, 69, 11, 239, 151, 158, 183, 197, // l....E...... - 214, 36, 62, 9, 58, 29, 204, 217, 80, 70, 222, 84, // .$>.:...PF.T - 70, 121, 197, 111, 143, 171, 112, 114, 35, 94, 103, 153, // Fy.o..pr#^g. - 183, 115, 12, 199, 143, 197, 176, 211, 113, 103, 97, 20, // .s......qga. - 57, 131, 14, 227, 119, 254, 209, 21, 33, 135, 94, 97, // 9...w...!.^a - 231, 156, 209, 135, 113, 64, 39, 184, 181, 228, 128, 41, // ....q@'....) - 100, 151, 33, 122, 36, 215, 158, 112, 248, 105, 200, 175, // d.!z$..p.i.. - 29, 241, 123, 244, 246, 141, 132, 207, 107, 77, 211, 152, // ..{.....kM.. - 228, 182, 157, 139, 95, 42, 92, 235, 18, 151, 195, 146, // ...._*...... - 232, 177, 236, 246, 80, 84, 192, 84, 85, 219, 213, 193, // ....PT.TU... - 54, 31, 132, 110, 135, 176, 206, 155, 97, 33, 118, 244, // 6..n....a!v. - 176, 43, 196, 246, 132, 26, 240, 126, 162, 223, 203, 208, // .+.....~.... - 25, 168, 90, 125, 178, 74, 37, 54, 69, 12, 217, 117, // ..Z}.J%6E..u - 197, 186, 83, 163, 164, 252, 88, 108, 199, 3, 177, 163, // ..S...Xl.... - 193, 224, 206, 89, 133, 128, 217, 217, 130, 183, 94, 195, // ...Y......^. - 73, 19, 28, 135, 202, 188, 172, 191, 63, 206, 127, 202, // I.......?... - 67, 103, 75, 154, 114, 21, 135, 28, 116, 178, 44, 190, // CgK.r...t.,. - 163, 208, 151, 91, 126, 79, 158, 107, 0, 89, 168, 228, // ...[~O.k.Y.. - 237, 197, 143, 23, 124, 102, 232, 116, 56, 204, 85, 153, // ....|f.t8.U. - 51, 196, 182, 56, 171, 181, 102, 95, 152, 219, 223, 42, // 3..8..f_...* - 204, 109, 45, 76, 236, 220, 99, 225, 108, 32, 130, 13, // .m-L..c.l .. - 9, 114, 83, 9, 114, 187, 47, 200, 61, 97, 254, 189, // .rS.r./.=a.. - 194, 85, 9, 211, 172, 214, 225, 125, 1, 172, 91, 45, // .U.....}..[- - 219, 173, 37, 91, 141, 213, 90, 18, 9, 119, 91, 75, // ..%[..Z..w[K - 34, 197, 38, 16, 193, 184, 245, 30, 33, 203, 182, 232, // ".&.....!... - 30, 221, 46, 32, 227, 119, 213, 11, 171, 90, 209, 186, // ... .w...Z.. - 79, 186, 91, 45, 221, 173, 145, 174, 113, 231, 13, 25, // O.[-....q... - 3, 19, 144, 12, 33, 96, 146, 53, 33, 60, 121, 138, // ....!`.5!.... - 160, 123, 114, 114, 214, 61, 57, 59, 235, 210, 165, 165, // .{rr.=9;.... - 179, 78, 99, 176, 61, 247, 201, 217, 129, 21, 33, 51, // .Nc.=.....!3 - 40, 153, 0, 155, 108, 84, 150, 205, 12, 60, 2, 249, // (...lT...<.. - 49, 39, 236, 232, 68, 229, 78, 183, 50, 221, 20, 23, // 1'..D.N.2... - 174, 45, 176, 173, 13, 6, 211, 67, 6, 212, 234, 230, // .-.....C.... - 141, 161, 53, 26, 162, 221, 3, 86, 6, 152, 226, 20, // ..5....V.... - 141, 147, 210, 205, 54, 83, 90, 26, 173, 163, 91, 86, // ....6SZ...[V - 78, 18, 164, 94, 164, 251, 79, 232, 160, 211, 22, 237, // N..^..O..... - 14, 181, 65, 9, 107, 211, 85, 178, 176, 101, 146, 136, // ..A.k.U..e.. - 61, 28, 131, 131, 72, 246, 70, 243, 88, 240, 105, 61, // =...H.F.X.i= - 223, 63, 221, 132, 200, 212, 195, 5, 28, 90, 44, 87, // .?.......Z,W - 100, 232, 86, 236, 161, 194, 205, 127, 164, 34, 243, 13, // d.V......".. - 87, 100, 248, 54, 110, 187, 99, 246, 196, 121, 89, 225, // Wd.6n.c..yY. - 213, 180, 220, 95, 155, 113, 145, 105, 194, 137, 57, 189, // ..._.q.i..9. - 67, 87, 122, 191, 166, 114, 99, 133, 100, 8, 93, 151, // CWz..rc.d.]. - 97, 158, 235, 218, 198, 193, 171, 195, 61, 97, 233, 9, // a.......=a.. - 33, 226, 5, 154, 49, 19, 49, 232, 148, 168, 44, 19, // !...1.1...,. - 74, 254, 222, 69, 10, 236, 144, 193, 102, 135, 15, 143, // J..E....f... - 96, 198, 124, 117, 145, 66, 250, 167, 143, 85, 40, 136, // `.|u.B...U(. - 124, 173, 20, 135, 142, 223, 30, 41, 41, 84, 74, 87, // |......))TJW - 102, 247, 71, 183, 200, 160, 138, 242, 26, 232, 201, 243, // f.G......... - 129, 206, 198, 198, 47, 6, 3, 118, 66, 20, 71, 129, // ..../..vB.G. - 5, 227, 147, 1, 179, 130, 92, 46, 190, 10, 230, 219, // ............ - 88, 111, 179, 167, 166, 206, 84, 159, 102, 93, 38, 191, // Xo....T.f]&. - 146, 35, 202, 90, 115, 66, 156, 39, 153, 40, 21, 56, // .#.ZsB.'.(.8 - 86, 205, 20, 246, 137, 9, 170, 86, 228, 215, 105, 250, // V......V..i. - 239, 185, 247, 164, 43, 83, 12, 169, 143, 59, 27, 176, // ....+S...;.. - 183, 133, 93, 34, 156, 75, 165, 193, 41, 86, 177, 226, // ..]".K..)V.. - 148, 3, 167, 227, 115, 125, 58, 126, 255, 133, 167, 246, // ....s}:~.... - 111, 189, 208, 84, 17, 250, 224, 77, 38, 251, 64, 153, // o..T...M&.@. - 142, 188, 171, 220, 227, 111, 4, 197, 151, 185, 27, 87, // .....o.....W - 236, 92, 241, 58, 23, 121, 66, 101, 7, 58, 164, 176, // ...:.yBe.:.. - 251, 40, 88, 130, 248, 144, 156, 243, 77, 122, 190, 48, // .(X.....Mz.0 - 170, 113, 153, 67, 6, 171, 76, 81, 95, 146, 175, 152, // .q.C..LQ_... - 198, 194, 180, 101, 85, 90, 24, 186, 75, 78, 209, 200, // ...eUZ..KN.. - 6, 129, 105, 178, 1, 165, 190, 169, 237, 67, 152, 138, // ..i......C.. - 110, 243, 70, 46, 63, 97, 135, 184, 153, 228, 226, 146, // n.F.?a...... - 211, 166, 115, 30, 48, 182, 189, 201, 219, 198, 94, 16, // ..s.0.....^. - 26, 21, 6, 200, 96, 115, 186, 221, 55, 54, 195, 143, // ....`s..76.. - 69, 187, 223, 167, 219, 99, 145, 187, 72, 64, 198, 177, // E....c..H@.. - 185, 149, 198, 228, 180, 171, 145, 153, 44, 47, 228, 29, // ........,/.. - 160, 80, 131, 108, 40, 106, 160, 216, 189, 186, 73, 232, // .P.l(j....I. - 240, 84, 157, 210, 254, 81, 85, 35, 119, 147, 152, 206, // .T...QU#w... - 70, 74, 205, 104, 8, 0, 212, 138, 186, 184, 89, 141, // FJ.h......Y. - 227, 65, 117, 201, 185, 154, 94, 174, 59, 86, 121, 89, // .Au...^.;VyY - 101, 187, 70, 177, 153, 72, 194, 78, 195, 0, 186, 173, // e.F..H.N.... - 232, 166, 94, 150, 75, 170, 112, 89, 119, 239, 245, 159, // ..^.K.pYw... - 177, 160, 230, 94, 63, 219, 118, 187, 155, 50, 130, 251, // ...^?.v..2.. - 45, 252, 30, 249, 189, 9, 152, 222, 196, 128, 224, 155, // -........... - 37, 235, 200, 78, 131, 190, 198, 200, 183, 241, 154, 239, // %..N........ - 2, 129, 1, 124, 5, 121, 4, 52, 21, 173, 76, 131, // ...|.y.4..L. - 204, 145, 129, 169, 158, 41, 234, 241, 101, 217, 122, 10, // .....)..e.z. - 243, 84, 52, 56, 230, 71, 73, 46, 15, 139, 11, 179, // .T48.GI..... - 71, 210, 203, 62, 133, 75, 153, 172, 148, 163, 140, 199, // G..>.K...... - 48, 140, 100, 231, 71, 37, 65, 211, 93, 201, 190, 171, // 0.d.G%A.]... - 77, 123, 13, 186, 47, 188, 70, 113, 186, 130, 51, 100, // M{../.Fq..3d - 21, 165, 223, 50, 32, 142, 246, 82, 150, 221, 136, 246, // ...2 ..R.... - 175, 105, 174, 74, 146, 131, 196, 231, 10, 27, 156, 102, // .i.J.......f - 114, 19, 210, 170, 174, 61, 31, 233, 94, 254, 15, 133, // r....=..^... - 8, 43, 166, 243, 84, 151, 159, 138, 115, 113, 33, 253, // .+..T...sq!. - 85, 38, 187, 226, 7, 108, 129, 31, 227, 104, 135, 22, // U&...l...h.. - 112, 244, 34, 84, 114, 252, 206, 219, 146, 245, 135, 41, // p."Tr......) - 239, 211, 181, 172, 109, 143, 14, 17, 78, 97, 214, 175, // ....m...Na.. - 171, 251, 64, 124, 5, 111, 197, 23, 251, 205, 2, 72, // ..@|.o.....H - 250, 229, 166, 67, 108, 231, 101, 176, 185, 58, 125, 165, // ...Cl.e..:}. - 84, 22, 185, 8, 157, 194, 192, 247, 145, 58, 220, 214, // T........:.. - 170, 254, 118, 38, 126, 93, 241, 117, 113, 6, 164, 187, // ..v&~].uq... - 232, 127, 32, 168, 46, 153, 242, 24, 43, 34, 227, 81, // .. .....+".Q - 170, 59, 153, 136, 234, 248, 213, 21, 127, 34, 243, 47, // .;......."./ - 167, 171, 185, 62, 209, 44, 144, 93, 64, 148, 37, 114, // ...>.,.]@.%r - 222, 154, 224, 30, 205, 242, 230, 192, 248, 110, 89, 251, // .........nY. - 212, 108, 245, 224, 64, 230, 153, 151, 46, 202, 155, 54, // .l..@......6 - 207, 106, 157, 49, 126, 185, 50, 216, 7, 101, 2, 29, // .j.1~.2..e.. - 168, 78, 122, 158, 38, 142, 47, 23, 194, 190, 4, 140, // .Nz.&./..... - 243, 41, 30, 56, 59, 163, 213, 195, 172, 194, 154, 66, // .).8;......B - 215, 37, 221, 90, 14, 99, 170, 34, 67, 107, 159, 89, // .%.Z.c."Ck.Y - 251, 186, 142, 139, 216, 26, 76, 68, 227, 244, 76, 47, // ......LD..L/ - 187, 77, 151, 95, 45, 38, 24, 201, 219, 254, 202, 220, // .M._-&...... - 210, 125, 178, 171, 122, 208, 81, 89, 157, 119, 47, 219, // .}..z.QY.w/. - 54, 29, 148, 197, 144, 253, 168, 142, 20, 147, 111, 45, // 6.........o- - 118, 26, 241, 21, 194, 151, 119, 250, 86, 37, 227, 182, // v.....w.V%.. - 47, 89, 94, 31, 200, 212, 142, 110, 63, 120, 235, 130, // /Y^....n?x.. - 79, 136, 171, 43, 166, 90, 232, 122, 36, 253, 90, 133, // O..+.Z.z$.Z. - 195, 240, 67, 63, 32, 186, 243, 211, 162, 44, 217, 216, // ..C? ....,.. - 191, 38, 170, 224, 35, 10, 224, 122, 47, 90, 19, 204, // .&..#..z/Z.. - 71, 63, 66, 41, 248, 135, 53, 205, 187, 147, 7, 129, // G?B)..5..... - 57, 168, 123, 26, 180, 225, 160, 94, 4, 75, 151, 143, // 9.{....^.K.. - 210, 89, 184, 11, 231, 77, 243, 96, 252, 86, 203, 186, // .Y...M.`.V.. - 48, 73, 219, 147, 104, 41, 79, 87, 11, 115, 202, 62, // 0I..h)OW.s.> - 62, 42, 177, 216, 244, 29, 10, 198, 140, 239, 78, 226, // >*........N. - 40, 241, 130, 202, 247, 233, 31, 7, 58, 11, 7, 81, // (.......:..Q - 26, 242, 174, 106, 87, 209, 41, 39, 68, 252, 127, 231, // ...jW.)'D... - 89, 87, 40, 102, 56, 0, 0, 0 // YW(f8.. + 31, 139, 8, 8, 255, 98, 56, 100, 0, 3, 105, 110, // .....b8d..in + 100, 101, 120, 46, 104, 116, 109, 108, 0, 93, 144, 177, // dex.html.].. + 78, 196, 48, 12, 134, 247, 123, 138, 144, 153, 180, 176, // N.0...{..... + 49, 36, 149, 208, 245, 6, 38, 24, 64, 130, 49, 77, // 1$....&.@.1M + 124, 23, 67, 154, 148, 196, 237, 169, 111, 79, 218, 30, // |.C.....oO.. + 226, 196, 100, 255, 246, 103, 203, 254, 229, 77, 251, 188, // ..d..g...M.. + 127, 253, 120, 57, 48, 71, 189, 111, 118, 114, 9, 204, // ..x90G.ovr.. + 235, 112, 82, 28, 2, 111, 118, 140, 73, 7, 218, 46, // .pR..ov.I... + 73, 73, 9, 201, 67, 211, 194, 132, 6, 88, 171, 179, // II..C....X.. + 235, 162, 78, 86, 214, 91, 125, 99, 122, 32, 205, 140, // ..NV.[}cz .. + 211, 41, 3, 41, 62, 210, 81, 60, 112, 86, 95, 55, // .).)>.Q3 + 47, 244, 6, 21, 115, 235, 205, 228, 31, 137, 226, 92, // /...s....... + 130, 117, 1, 0, 0, 0 // .u... }; static const unsigned char v2[] = { - 31, 139, 8, 8, 16, 107, 222, 99, 0, 3, 112, 114, // .....k.c..pr + 31, 139, 8, 8, 255, 98, 56, 100, 0, 3, 109, 97, // .....b8d..ma + 105, 110, 46, 106, 115, 46, 111, 114, 105, 103, 0, 189, // in.js.orig.. + 91, 121, 115, 219, 200, 177, 255, 223, 159, 98, 150, 207, // [ys......b.. + 89, 130, 49, 9, 30, 178, 188, 126, 148, 201, 148, 227, // Y.1....~.... + 221, 122, 235, 148, 237, 56, 43, 111, 146, 45, 149, 42, // .z...8+o.-.* + 2, 129, 33, 137, 8, 4, 16, 96, 120, 69, 198, 119, // ..!....`xE.w + 127, 191, 238, 25, 0, 3, 138, 58, 214, 222, 68, 118, // .......:..Dv + 145, 192, 28, 61, 61, 125, 119, 207, 176, 189, 206, 165, // ...==}w..... + 200, 85, 22, 250, 170, 125, 246, 36, 92, 165, 73, 166, // .U...}.$..I. + 196, 205, 155, 4, 15, 177, 140, 85, 87, 44, 241, 95, // .......UW,._ + 173, 162, 174, 200, 100, 28, 200, 172, 43, 48, 225, 135, // ....d...+0.. + 249, 92, 250, 138, 31, 207, 149, 167, 36, 63, 253, 36, // ........$?.$ + 231, 133, 152, 103, 201, 74, 180, 221, 126, 154, 73, 207, // ...g.J..~.I. + 87, 238, 42, 140, 221, 127, 230, 0, 252, 196, 79, 226, // W.*.......O. + 92, 137, 247, 222, 238, 189, 164, 197, 242, 239, 61, 229, // ..........=. + 125, 76, 194, 88, 229, 98, 34, 78, 7, 24, 209, 239, // }L.X.b"N.... + 139, 79, 203, 48, 23, 57, 144, 136, 164, 72, 215, 179, // .O.0.9...H.. + 40, 204, 151, 253, 124, 61, 203, 253, 44, 156, 73, 129, // (...|=..,.I. + 62, 44, 19, 8, 149, 136, 212, 203, 115, 17, 39, 42, // >,......s.'* + 156, 135, 190, 167, 66, 192, 22, 106, 233, 41, 177, 149, // ....B..j.).. + 153, 36, 64, 153, 244, 101, 184, 193, 88, 198, 71, 45, // .$@..e..X.G- + 177, 69, 153, 109, 8, 123, 76, 246, 162, 72, 248, 203, // .E.m.{L..H.. + 48, 10, 132, 95, 110, 51, 23, 201, 156, 135, 121, 105, // 0.._n3....yi + 234, 62, 217, 120, 153, 248, 184, 158, 157, 175, 103, 192, // .>.x......g. + 205, 153, 175, 99, 159, 150, 112, 58, 226, 230, 137, 16, // ...c..p:.... + 212, 185, 244, 226, 32, 146, 25, 161, 126, 83, 116, 69, // .... ...~StE + 24, 224, 1, 91, 16, 88, 87, 173, 179, 152, 199, 9, // ...[.XW..... + 81, 97, 62, 22, 21, 140, 121, 220, 49, 189, 162, 130, // Qa>...y.1... + 114, 17, 6, 207, 158, 93, 2, 196, 60, 62, 227, 174, // r....]..<>.. + 162, 203, 95, 235, 248, 24, 132, 48, 168, 33, 4, 50, // .._....0.!.2 + 146, 74, 218, 128, 46, 27, 16, 12, 13, 173, 217, 1, // .J.......... + 200, 94, 207, 159, 39, 153, 112, 104, 67, 215, 34, 140, // .^..'.phC.". + 43, 48, 157, 26, 224, 245, 165, 158, 97, 160, 226, 179, // +0......a... + 56, 123, 82, 116, 156, 78, 197, 209, 15, 222, 6, 152, // 8{Rt.N...... + 167, 89, 146, 130, 26, 83, 22, 149, 171, 39, 175, 130, // .Y...S...'.. + 112, 3, 161, 218, 71, 114, 210, 154, 121, 254, 245, 34, // p...Gr..y.." + 75, 214, 113, 48, 22, 255, 115, 114, 114, 114, 6, 230, // K.q0..srrr.. + 5, 65, 24, 47, 198, 98, 224, 158, 202, 213, 25, 184, // .A./.b...... + 16, 37, 25, 58, 231, 243, 249, 89, 107, 138, 53, 120, // .%.:...Yk.5x + 186, 31, 129, 199, 147, 22, 86, 81, 94, 24, 203, 76, // ......VQ^..L + 4, 189, 121, 36, 119, 60, 192, 12, 49, 43, 80, 243, // ..y$w<..1+P. + 88, 12, 241, 207, 91, 171, 228, 76, 4, 97, 158, 70, // X...[..L.a.F + 222, 30, 187, 70, 199, 25, 216, 29, 46, 226, 94, 168, // ...F......^. + 228, 42, 31, 11, 31, 204, 150, 217, 153, 129, 2, 56, // .*.........8 + 179, 233, 47, 201, 26, 236, 206, 146, 96, 237, 171, 87, // ../.....`..W + 253, 153, 129, 223, 199, 2, 183, 151, 122, 4, 104, 161, // ........z.h. + 209, 25, 224, 159, 70, 167, 94, 43, 79, 189, 120, 250, // ....F.^+O.x. + 46, 89, 44, 32, 152, 160, 183, 151, 143, 95, 245, 185, // .Y, ....._.. + 205, 30, 80, 46, 85, 83, 201, 208, 169, 53, 125, 21, // ..P.US...5}. + 174, 22, 34, 207, 252, 73, 11, 122, 144, 185, 105, 188, // .."..I.z..i. + 104, 137, 165, 12, 23, 75, 53, 105, 141, 70, 45, 209, // h....K5i.F-. + 159, 30, 129, 55, 125, 122, 195, 220, 113, 105, 78, 113, // ...7}z..qiNq + 48, 192, 43, 201, 60, 83, 113, 75, 36, 177, 31, 133, // 0.+.i-.J. + 113, 191, 191, 74, 226, 69, 146, 228, 210, 221, 230, 125, // q..J.E.....} + 5, 209, 205, 66, 47, 202, 251, 212, 219, 211, 214, 179, // ...B/....... + 223, 154, 46, 247, 179, 12, 230, 78, 191, 19, 47, 197, // .......N../. + 118, 25, 250, 75, 0, 4, 159, 54, 97, 32, 115, 144, // v..K...6a s. + 83, 45, 65, 39, 152, 101, 159, 209, 14, 246, 177, 183, // S-A'.e...... + 194, 51, 105, 50, 84, 196, 21, 226, 92, 119, 206, 195, // .3i2T....w.. + 72, 230, 93, 17, 133, 215, 82, 188, 57, 63, 239, 255, // H.]...R.9?.. + 233, 188, 255, 227, 167, 247, 239, 0, 11, 102, 41, 92, // .........f). + 121, 11, 234, 245, 50, 201, 27, 199, 88, 82, 26, 108, // y...2...XR.l + 175, 182, 230, 98, 22, 198, 94, 182, 119, 159, 148, 68, // ...b..^.w..D + 253, 249, 45, 121, 136, 156, 135, 252, 244, 195, 249, 39, // ..-y.......' + 241, 250, 227, 91, 193, 238, 100, 69, 202, 25, 136, 217, // ...[..dE.... + 158, 251, 52, 61, 186, 26, 119, 177, 79, 214, 194, 135, // ..4=..w.O... + 226, 201, 29, 240, 140, 37, 128, 105, 242, 139, 87, 62, // .....%.i..W> + 136, 63, 245, 215, 89, 244, 170, 207, 143, 132, 201, 10, // .?..Y....... + 123, 234, 69, 24, 39, 214, 42, 140, 66, 181, 31, 179, // {.E.'.*.B... + 12, 167, 154, 193, 36, 195, 245, 52, 209, 91, 11, 47, // ....$..4.[./ + 0, 208, 49, 57, 172, 129, 136, 18, 223, 139, 150, 73, // ..19.......I + 174, 198, 47, 7, 131, 65, 223, 75, 67, 192, 141, 231, // ../..A.KC... + 225, 162, 191, 144, 170, 92, 163, 86, 140, 47, 5, 150, // .......V./.. + 75, 37, 122, 129, 104, 195, 252, 79, 86, 139, 62, 52, // K%z.h..OV.>4 + 33, 244, 219, 191, 1, 248, 149, 204, 115, 112, 5, 240, // !.......sp.. + 193, 86, 90, 192, 52, 76, 150, 50, 138, 146, 195, 21, // .VZ.4L.2.... + 44, 121, 47, 41, 206, 100, 230, 217, 7, 190, 155, 184, // ,y/).d...... + 74, 10, 80, 105, 3, 124, 185, 23, 239, 85, 184, 146, // J.Pi.|...U.. + 174, 248, 96, 143, 37, 209, 205, 72, 0, 98, 8, 57, // ..`.%..H.b.9 + 201, 192, 223, 228, 236, 60, 241, 175, 177, 101, 204, 249, // .....<...e.. + 249, 167, 183, 134, 107, 140, 240, 214, 83, 254, 178, 68, // ....k...S..D + 203, 203, 197, 159, 206, 255, 252, 129, 131, 157, 120, 1, // ..........x. + 69, 215, 3, 111, 90, 16, 79, 217, 26, 139, 150, 235, // E..oZ.O..... + 182, 186, 162, 69, 254, 14, 111, 174, 235, 22, 102, 102, // ...E..o...ff + 73, 171, 79, 208, 39, 61, 103, 155, 3, 27, 209, 235, // I.O.'=g..... + 193, 192, 47, 73, 226, 178, 33, 19, 109, 136, 38, 176, // ../I..!.m.&. + 32, 134, 89, 18, 91, 210, 168, 35, 52, 180, 81, 178, // .Y.[..#4.Q. + 76, 96, 90, 26, 64, 203, 14, 106, 51, 8, 127, 1, // L`Z.@..j3... + 229, 158, 212, 46, 156, 13, 162, 246, 225, 122, 196, 5, // .........z.. + 97, 208, 5, 73, 212, 207, 120, 160, 64, 162, 140, 203, // a..I..x.@... + 156, 118, 155, 93, 183, 25, 71, 56, 242, 184, 143, 120, // .v.]..G8...x + 184, 123, 92, 100, 86, 148, 240, 236, 165, 167, 152, 75, // .{.dV......K + 160, 237, 84, 158, 64, 136, 54, 239, 134, 135, 182, 187, // ..T.@.6..... + 86, 251, 205, 82, 122, 176, 67, 32, 239, 205, 107, 80, // V..Rz.C ..kP + 7, 70, 228, 223, 204, 184, 177, 104, 255, 209, 203, 161, // .F.....h.... + 245, 109, 241, 76, 204, 84, 226, 57, 132, 53, 158, 219, // .m.L.T.9.5.. + 99, 106, 33, 212, 58, 69, 209, 177, 32, 185, 208, 212, // cj!.:E.. ... + 216, 201, 200, 244, 103, 8, 34, 41, 0, 187, 171, 91, // ....g.")...[ + 124, 251, 173, 168, 92, 86, 136, 214, 230, 72, 159, 104, // |....V...H.h + 238, 200, 140, 7, 227, 171, 99, 133, 106, 183, 189, 10, // ......c.j... + 123, 10, 178, 21, 108, 80, 91, 181, 201, 223, 245, 182, // {...lP[..... + 97, 160, 16, 77, 61, 127, 57, 72, 225, 253, 43, 39, // a..M=.9H..+' + 96, 28, 189, 237, 120, 78, 143, 59, 158, 58, 188, 57, // `...xN.;.:.9 + 244, 242, 35, 154, 80, 6, 55, 181, 163, 41, 189, 208, // ..#.P.7..).. + 139, 23, 47, 224, 100, 14, 29, 139, 17, 14, 237, 95, // ../.d......_ + 14, 99, 149, 218, 71, 157, 26, 31, 85, 122, 253, 48, // .c..G...Uz.0 + 78, 215, 74, 168, 125, 42, 39, 109, 37, 119, 170, 45, // N.J.}*'m%w.- + 16, 212, 248, 114, 153, 68, 216, 240, 164, 253, 1, 250, // ...r.D...... + 208, 46, 161, 152, 45, 15, 7, 131, 223, 157, 181, 42, // ....-......* + 162, 38, 49, 195, 64, 164, 192, 66, 82, 202, 158, 35, // .&1.@..BR..# + 55, 174, 194, 178, 82, 185, 27, 47, 90, 203, 78, 33, // 7...R../Z.N! + 248, 27, 227, 56, 250, 64, 132, 114, 95, 116, 245, 40, // ...8.@.r_t.( + 140, 91, 36, 42, 112, 123, 65, 171, 129, 117, 235, 99, // .[$*p{A..u.c + 213, 252, 107, 49, 167, 153, 247, 96, 78, 235, 21, 214, // ..k1...`N... + 124, 31, 209, 241, 130, 58, 88, 214, 30, 187, 167, 225, // |....:X..... + 193, 142, 102, 107, 165, 224, 164, 237, 240, 235, 8, 222, // ..fk........ + 71, 226, 168, 10, 19, 196, 162, 222, 12, 94, 17, 152, // G........^.. + 124, 195, 186, 244, 249, 179, 248, 134, 145, 181, 2, 57, // |..........9 + 141, 227, 180, 18, 20, 189, 236, 189, 24, 55, 2, 31, // .........7.. + 91, 166, 71, 28, 132, 154, 245, 255, 138, 216, 55, 208, // [.G.......7. + 166, 2, 186, 110, 57, 142, 174, 109, 16, 245, 203, 136, // ...n9..m.... + 95, 70, 247, 135, 125, 69, 29, 249, 189, 97, 55, 182, // _F..}E...a7. + 206, 216, 112, 60, 96, 250, 178, 72, 91, 190, 44, 106, // ..p<`..H[.,j + 24, 52, 109, 13, 180, 63, 116, 201, 187, 129, 56, 7, // .4m..?t...8. + 198, 112, 61, 211, 182, 112, 61, 187, 123, 38, 6, 221, // .p=..p=.{&.. + 158, 153, 155, 153, 231, 247, 205, 204, 173, 153, 28, 81, // ...........Q + 152, 164, 217, 65, 26, 9, 177, 51, 25, 34, 35, 126, // ...A...3."#~ + 11, 89, 147, 110, 105, 228, 110, 33, 84, 247, 158, 31, // .Y.ni.n!T... + 246, 230, 166, 23, 57, 233, 133, 221, 113, 169, 145, 208, // ....9...q... + 248, 175, 83, 184, 56, 73, 153, 45, 57, 190, 46, 201, // ..S.8I.-9... + 57, 163, 164, 77, 124, 251, 32, 144, 104, 119, 171, 108, // 9..M|. .hw.l + 241, 190, 191, 149, 132, 173, 135, 140, 182, 83, 120, 187, // .........Sx. + 134, 67, 184, 235, 111, 150, 4, 200, 163, 174, 158, 222, // .C..o....... + 16, 22, 5, 233, 99, 76, 78, 17, 30, 188, 42, 62, // ....cLN...*> + 56, 132, 90, 113, 245, 32, 176, 162, 115, 220, 196, 219, // 8.Zq. ..s... + 251, 37, 25, 48, 46, 205, 180, 56, 109, 180, 97, 123, // .%.0...8m.a{ + 37, 193, 237, 209, 41, 167, 254, 205, 209, 104, 195, 232, // %...)....h.. + 146, 1, 246, 232, 252, 200, 232, 156, 71, 107, 134, 152, // ........Gk.. + 225, 73, 36, 201, 63, 105, 150, 117, 141, 236, 106, 49, // .I$.?i.u..j1 + 132, 36, 221, 239, 148, 234, 84, 135, 220, 195, 201, 209, // .$....T..... + 228, 218, 31, 156, 60, 63, 121, 222, 204, 167, 237, 100, // .... + 78, 149, 233, 70, 145, 2, 25, 213, 118, 187, 117, 151, // N..F....v.u. + 225, 70, 174, 254, 5, 215, 182, 234, 7, 114, 149, 228, // .F.......r.. + 253, 173, 156, 229, 156, 2, 246, 128, 36, 252, 70, 223, // ........$.F. + 176, 231, 71, 12, 124, 255, 23, 202, 16, 117, 183, 192, // ..G.|....u.. + 64, 161, 135, 112, 233, 2, 105, 39, 39, 163, 38, 141, // @..p..i''.&. + 173, 243, 208, 210, 90, 223, 146, 14, 67, 163, 85, 190, // ....Z...C.U. + 48, 75, 88, 185, 237, 181, 148, 105, 46, 60, 145, 34, // 0KX....i.<." + 251, 9, 115, 42, 117, 8, 147, 12, 82, 20, 99, 10, // ..s*u...R.c. + 23, 190, 177, 184, 200, 47, 44, 211, 232, 50, 172, 55, // ...../,..2.7 + 204, 214, 6, 22, 86, 24, 68, 89, 47, 121, 14, 111, // ....V.DY/y.o + 225, 41, 93, 4, 231, 202, 78, 153, 10, 32, 8, 83, // .)]...N.. .S + 217, 158, 225, 176, 120, 152, 250, 209, 138, 42, 67, 135, // ....x....*C. + 185, 53, 182, 156, 204, 120, 101, 61, 22, 107, 82, 253, // .5...xe=.kR. + 8, 195, 51, 145, 164, 50, 150, 1, 195, 169, 97, 215, // ..3..2....a. + 132, 56, 78, 5, 100, 232, 210, 4, 129, 216, 57, 16, // .8N.d.....9. + 78, 178, 220, 228, 250, 82, 175, 110, 252, 151, 174, 99, // N....R.n...c + 145, 206, 240, 186, 134, 116, 26, 107, 123, 183, 92, 154, // .....t.k{... + 137, 200, 193, 230, 82, 131, 138, 19, 101, 177, 227, 88, // ....R...e..X + 212, 248, 94, 115, 17, 158, 120, 85, 149, 11, 31, 204, // ..^s..xU.... + 46, 26, 26, 252, 175, 36, 111, 77, 241, 49, 22, 79, // .....$oM.1.O + 111, 86, 174, 145, 10, 23, 13, 133, 168, 21, 184, 49, // oV.........1 + 131, 181, 187, 53, 213, 74, 222, 152, 197, 77, 119, 206, // ...5.J...Mw. + 227, 34, 195, 148, 62, 155, 179, 168, 165, 170, 209, 30, // ."..>....... + 86, 2, 222, 151, 98, 122, 111, 68, 92, 10, 51, 135, // V...bzoD..3. + 168, 229, 148, 70, 156, 122, 113, 105, 71, 179, 106, 167, // ...F.zqiG.j. + 120, 232, 167, 157, 186, 93, 18, 184, 51, 114, 213, 147, // x....]..3r.. + 249, 224, 67, 159, 148, 184, 213, 89, 69, 125, 96, 2, // ..C....YE}`. + 1, 169, 207, 26, 194, 185, 160, 6, 151, 194, 61, 49, // ..........=1 + 153, 84, 197, 163, 118, 199, 70, 212, 217, 209, 26, 59, // .T..v.F....; + 138, 91, 17, 210, 57, 23, 52, 131, 136, 114, 217, 41, // .[..9.4..r.) + 207, 32, 204, 183, 137, 148, 204, 226, 214, 81, 9, 29, // . .......Q.. + 144, 148, 49, 112, 35, 238, 37, 85, 95, 85, 50, 162, // ..1p#.%U_U2. + 109, 163, 29, 243, 218, 213, 173, 71, 68, 189, 191, 46, // m......GD... + 226, 53, 209, 110, 89, 48, 59, 26, 237, 130, 19, 15, // .5.nY0;..... + 69, 187, 136, 116, 235, 178, 135, 102, 26, 49, 202, 226, // E..t...f.1.. + 39, 153, 28, 42, 190, 174, 243, 178, 118, 94, 38, 7, // '..*....v^&. + 198, 24, 193, 118, 252, 65, 180, 171, 151, 182, 192, 22, // ...v.A...... + 96, 238, 235, 134, 175, 142, 67, 79, 6, 254, 224, 249, // `.....CO.... + 224, 161, 56, 148, 205, 95, 41, 172, 118, 236, 169, 77, // ..8.._).v..M + 138, 101, 29, 133, 222, 207, 152, 14, 107, 158, 222, 212, // .e......k... + 27, 44, 204, 105, 205, 81, 7, 174, 207, 69, 40, 141, // .,.i.Q...E(. + 38, 87, 68, 149, 194, 121, 148, 108, 199, 166, 84, 115, // &WD..y.l..Ts + 120, 4, 213, 170, 188, 159, 46, 250, 104, 28, 160, 153, // x.......h... + 6, 63, 119, 229, 165, 78, 37, 60, 48, 46, 142, 17, // .?w..N%<0... + 88, 200, 137, 105, 46, 58, 157, 226, 203, 162, 137, 199, // X..i.:...... + 7, 19, 102, 169, 99, 225, 68, 163, 22, 66, 177, 5, // ..f.c.D..B.. + 155, 218, 52, 195, 12, 193, 7, 83, 174, 235, 222, 31, // ..4....S.... + 104, 148, 65, 6, 196, 176, 17, 100, 88, 122, 83, 186, // h.A....dXzS. + 252, 35, 33, 6, 73, 226, 29, 33, 198, 35, 92, 104, // .#!.I..!.#.h + 73, 90, 204, 205, 185, 22, 168, 61, 92, 93, 171, 23, // IZ.....=.].. + 155, 208, 227, 146, 62, 157, 97, 200, 216, 238, 33, 252, // ....>.a...!. + 224, 192, 16, 81, 37, 12, 143, 186, 108, 233, 225, 42, // ...Q%...l..* + 49, 53, 184, 226, 53, 60, 102, 67, 238, 232, 156, 196, // 15..5U......y + 201, 187, 170, 111, 87, 245, 157, 150, 179, 73, 116, 170, // ...oW....It. + 126, 126, 65, 239, 197, 101, 5, 124, 197, 117, 125, 3, // ~~A..e.|.u}. + 154, 94, 208, 61, 168, 123, 189, 157, 213, 139, 23, 244, // .^.=.{...... + 190, 247, 212, 18, 198, 111, 231, 122, 105, 26, 237, 157, // .....o.zi... + 120, 29, 69, 93, 94, 134, 45, 98, 74, 202, 159, 94, // x.E]^.-bJ..^ + 12, 141, 119, 38, 40, 59, 123, 141, 157, 89, 67, 67, // ..w&(;{..YCC + 9, 227, 123, 161, 12, 26, 80, 44, 92, 118, 191, 6, // ..{...P,.v.. + 23, 13, 69, 51, 239, 151, 158, 183, 131, 106, 18, 157, // ..E3.....j.. + 4, 157, 216, 229, 108, 19, 35, 111, 38, 163, 188, 162, // ....l.#o&... + 183, 199, 149, 48, 185, 21, 175, 179, 204, 219, 59, 134, // ...0......;. + 226, 207, 196, 176, 211, 113, 231, 97, 20, 57, 131, 14, // .....q.a.9.. + 195, 119, 254, 209, 21, 33, 71, 64, 97, 231, 140, 193, // .w...!G@a... + 135, 113, 64, 167, 170, 53, 231, 0, 41, 100, 239, 32, // .q@..5..)d. + 122, 196, 215, 158, 112, 248, 105, 200, 175, 29, 241, 123, // z...p.i....{ + 244, 246, 13, 135, 207, 106, 73, 211, 144, 228, 174, 157, // .....jI..... + 139, 95, 42, 88, 155, 18, 150, 195, 156, 232, 49, 239, // ._*X......1. + 14, 64, 84, 131, 169, 178, 181, 175, 99, 94, 62, 156, // .@T.....c^>. + 220, 13, 97, 157, 183, 195, 66, 236, 233, 97, 95, 136, // ..a...B..a_. + 221, 136, 26, 240, 62, 210, 239, 101, 4, 11, 80, 173, // ....>..e..P. + 62, 89, 165, 18, 154, 34, 130, 236, 187, 98, 211, 169, // >Y..."...b.. + 65, 82, 154, 42, 118, 147, 129, 216, 211, 100, 80, 231, // AR.*v....dP. + 180, 2, 192, 228, 108, 193, 49, 111, 224, 143, 105, 28, // ....l.1o..i. + 71, 172, 188, 173, 191, 63, 76, 127, 74, 7, 231, 43, // G....?L.J..+ + 90, 114, 29, 135, 28, 251, 49, 47, 190, 167, 8, 148, // Zr....1/.... + 91, 126, 79, 78, 106, 0, 94, 168, 228, 237, 249, 159, // [~ONj.^..... + 207, 249, 236, 206, 233, 112, 180, 169, 50, 103, 8, 181, // .....p..2g.. + 56, 173, 165, 230, 144, 153, 187, 47, 101, 230, 174, 102, // 8....../e..f + 38, 52, 247, 153, 112, 182, 96, 193, 150, 24, 185, 173, // &4..p.`..... + 24, 185, 59, 100, 228, 1, 51, 255, 94, 193, 170, 152, // ..;d..3.^... + 105, 118, 235, 176, 94, 0, 234, 78, 243, 118, 103, 241, // iv..^..N.vg. + 86, 67, 181, 182, 68, 204, 221, 213, 156, 72, 161, 4, // VC..D....H.. + 34, 152, 180, 222, 35, 58, 217, 21, 221, 167, 55, 75, // "...#:....7K + 240, 248, 93, 245, 194, 162, 86, 180, 238, 226, 238, 78, // ..]...V....N + 115, 119, 103, 184, 107, 220, 121, 131, 199, 128, 4, 32, // swg.k.y.... + 67, 48, 152, 120, 77, 0, 71, 143, 225, 245, 167, 204, // C0.xM.G..... + 139, 243, 121, 146, 173, 180, 17, 74, 245, 213, 46, 143, // ..y....J.... + 216, 160, 143, 237, 253, 4, 161, 85, 24, 131, 2, 37, // .......U...% + 235, 73, 195, 55, 53, 137, 55, 21, 37, 250, 194, 105, // .I.75.7.%..i + 146, 6, 202, 63, 36, 2, 53, 216, 80, 25, 189, 125, // ...?$.5.P..} + 9, 167, 214, 187, 77, 165, 49, 4, 171, 161, 66, 21, // ....M.1...B. + 44, 91, 55, 43, 88, 148, 208, 52, 77, 202, 5, 155, // ,[7+X..4M... + 29, 142, 109, 157, 96, 231, 104, 11, 211, 21, 118, 235, // ..m.`.h...v. + 222, 209, 54, 240, 210, 130, 67, 108, 11, 2, 55, 146, // ..6...Cl..7. + 241, 66, 45, 207, 52, 141, 94, 83, 68, 22, 37, 74, // .B-.4.^SD.%J + 199, 19, 68, 38, 47, 23, 204, 209, 169, 144, 250, 142, // ..D&/....... + 130, 153, 63, 147, 136, 23, 7, 12, 34, 66, 184, 126, // ..?....."B.~ + 69, 220, 14, 2, 44, 141, 255, 196, 103, 253, 60, 188, // E...,...g.<. + 44, 174, 16, 190, 163, 119, 208, 29, 84, 60, 230, 185, // ,....w..T<.. + 152, 202, 147, 96, 1, 106, 177, 184, 210, 162, 254, 54, // ...`.j.....6 + 14, 85, 232, 69, 154, 71, 102, 18, 149, 65, 170, 213, // .U.E.Gf..A.. + 222, 233, 213, 232, 13, 146, 80, 174, 89, 2, 161, 21, // ......P.Y... + 223, 221, 6, 109, 0, 233, 152, 165, 130, 5, 18, 84, // ...m.......T + 148, 228, 89, 68, 191, 130, 191, 9, 251, 14, 128, 145, // ..YD........ + 127, 186, 149, 114, 228, 155, 5, 2, 41, 185, 253, 99, // ...r....)..c + 178, 155, 180, 232, 46, 21, 219, 46, 44, 87, 152, 180, // ........,W.. + 157, 2, 89, 45, 191, 46, 27, 153, 27, 58, 215, 79, // ..Y-.....:.O + 174, 37, 242, 13, 207, 243, 206, 232, 114, 73, 52, 70, // .%......rI4F + 0, 29, 203, 51, 161, 195, 86, 151, 165, 247, 246, 192, // ...3..V..... + 250, 238, 210, 240, 132, 142, 117, 205, 104, 182, 90, 214, // ......u.h.Z. + 96, 223, 247, 155, 80, 117, 79, 143, 2, 63, 22, 243, // `...PuO..?.. + 49, 252, 112, 57, 89, 83, 97, 182, 176, 0, 232, 73, // 1.p9YSa....I + 26, 64, 182, 152, 121, 206, 104, 48, 232, 142, 70, 167, // .@..y.h0..F. + 221, 209, 233, 105, 151, 46, 18, 157, 118, 26, 147, 237, // ...i....v... + 181, 71, 167, 71, 118, 132, 36, 160, 36, 2, 108, 178, // .G.Gv.$.$.l. + 17, 89, 54, 51, 240, 8, 228, 199, 156, 176, 163, 115, // .Y63.......s + 146, 91, 221, 202, 116, 83, 92, 184, 177, 134, 237, 236, // .[..tS...... + 97, 48, 61, 100, 64, 173, 110, 86, 12, 45, 209, 96, // a0=d@.nV.-.` + 237, 193, 96, 101, 6, 83, 156, 162, 97, 82, 102, 217, // ..`e.S..aRf. + 102, 76, 75, 163, 245, 244, 134, 133, 147, 24, 169, 55, // fLK........7 + 233, 254, 19, 50, 232, 180, 69, 187, 67, 109, 16, 194, // ...2..E.Cm.. + 218, 116, 149, 36, 108, 153, 36, 226, 0, 198, 224, 40, // .t.$l.$....( + 144, 131, 217, 60, 23, 116, 218, 44, 14, 79, 24, 193, // ...<.t.,.O.. + 50, 117, 127, 29, 133, 54, 203, 133, 17, 186, 169, 122, // 2u...6.....z + 172, 126, 242, 31, 41, 140, 124, 195, 133, 17, 190, 33, // .~..).|....! + 219, 238, 24, 157, 56, 43, 11, 173, 26, 151, 187, 75, // ....8+.....K + 36, 46, 146, 74, 56, 49, 167, 119, 236, 154, 237, 215, // $..J81.w.... + 20, 80, 172, 144, 12, 161, 235, 42, 204, 249, 126, 212, // .P.....*..~. + 228, 248, 117, 222, 158, 176, 228, 132, 0, 241, 6, 205, // ..u......... + 156, 169, 24, 116, 74, 80, 150, 9, 37, 127, 239, 34, // ...tJP..%.." + 219, 117, 200, 96, 179, 195, 135, 71, 48, 115, 190, 186, // .u.`...G0s.. + 30, 33, 253, 147, 135, 138, 17, 132, 190, 22, 138, 99, // .!.........c + 167, 96, 15, 84, 15, 42, 161, 43, 19, 249, 167, 55, // .`.T.*.+...7 + 200, 160, 138, 242, 106, 230, 232, 249, 64, 103, 99, 147, // ....j...@gc. + 23, 131, 1, 59, 33, 138, 163, 64, 130, 201, 104, 192, // ...;!..@..h. + 164, 32, 151, 139, 175, 130, 233, 54, 209, 106, 246, 216, // . .....6.j.. + 212, 153, 202, 196, 44, 203, 228, 87, 114, 68, 89, 27, // ....,..WrDY. + 78, 136, 243, 36, 19, 165, 0, 199, 170, 153, 194, 62, // N..$.......> + 50, 65, 213, 130, 252, 58, 77, 127, 155, 187, 71, 186, // 2A...:M...G. + 8, 197, 35, 245, 169, 99, 99, 236, 77, 97, 87, 234, // ..#..cc.MaW. + 22, 82, 233, 225, 20, 171, 88, 113, 202, 145, 19, 234, // .R....Xq.... + 133, 62, 161, 190, 251, 210, 81, 251, 75, 47, 21, 85, // .>....Q.K/.U + 136, 222, 123, 155, 200, 62, 215, 165, 99, 103, 123, 27, // ..{..>..cg{. + 209, 225, 205, 173, 117, 169, 244, 65, 226, 115, 194, 15, // ....u..A.s.. + 29, 78, 174, 67, 42, 71, 94, 121, 62, 162, 207, 252, // .N.C*G^y>... + 31, 10, 6, 63, 166, 83, 22, 151, 159, 138, 51, 50, // ...?.S....32 + 123, 147, 254, 25, 221, 62, 162, 194, 225, 9, 100, 232, // {....>....d. + 170, 186, 0, 192, 119, 110, 214, 124, 179, 183, 169, 213, // ....wn.|.... + 21, 5, 29, 173, 202, 77, 172, 146, 181, 170, 42, 160, // .....M....*. + 143, 67, 232, 16, 141, 67, 28, 12, 175, 139, 50, 26, // .C...C....2. + 252, 27, 209, 136, 175, 151, 55, 46, 250, 185, 226, 117, // ......7....u + 46, 242, 132, 138, 46, 116, 82, 98, 247, 81, 168, 8, // .....tRb.Q.. + 225, 205, 187, 250, 110, 63, 95, 97, 213, 176, 204, 73, // ....n?_a...I + 135, 85, 164, 169, 175, 237, 87, 187, 98, 81, 182, 105, // .U....W.bQ.i + 93, 146, 154, 110, 183, 83, 44, 182, 69, 88, 158, 108, // ]..n.S,.EX.l + 93, 186, 145, 167, 15, 24, 32, 202, 138, 238, 23, 71, // ]..... ....G + 46, 63, 193, 62, 184, 153, 228, 42, 154, 211, 166, 195, // .?.>...*.... + 38, 136, 85, 123, 155, 183, 13, 93, 9, 140, 10, 3, // &.U{...].... + 228, 239, 57, 221, 49, 156, 152, 233, 207, 68, 187, 223, // ..9.1....D.. + 167, 251, 107, 145, 75, 215, 252, 248, 189, 210, 172, 118, // ..k.K......v + 53, 51, 147, 229, 181, 192, 35, 24, 234, 33, 91, 138, // 53....#..![. + 153, 40, 115, 169, 238, 51, 58, 188, 84, 167, 180, 254, // .(s..3:.T... + 219, 220, 77, 98, 58, 157, 41, 149, 162, 33, 123, 64, // ..Mb:.)..!{@ + 85, 212, 37, 220, 230, 164, 186, 232, 93, 173, 45, 55, // U.%.....].-7 + 29, 171, 192, 173, 178, 125, 163, 220, 77, 248, 192, 200, // .....}..M... + 96, 2, 93, 152, 116, 83, 47, 203, 37, 21, 247, 172, // `.].tS/.%... + 159, 2, 232, 63, 227, 60, 204, 207, 12, 216, 173, 217, // ...?.<...... + 221, 247, 120, 182, 3, 220, 123, 83, 144, 187, 57, 29, // ..x...{S..9. + 73, 7, 243, 212, 145, 157, 6, 114, 141, 153, 111, 227, // I......r..o. + 13, 223, 67, 194, 238, 249, 58, 244, 24, 96, 42, 68, // ..C...:..`*D + 89, 122, 100, 142, 204, 83, 245, 204, 129, 38, 95, 220, // Yzd..S...&_. + 173, 151, 48, 79, 69, 131, 92, 126, 148, 228, 242, 56, // ..0OE..~...8 + 163, 176, 122, 36, 189, 236, 83, 184, 146, 208, 33, 71, // ..z$..S...!G + 25, 79, 105, 168, 200, 78, 159, 74, 161, 166, 187, 226, // .Oi..N.J.... + 122, 87, 187, 180, 122, 232, 33, 231, 26, 245, 247, 106, // zW..z.!....j + 156, 65, 171, 40, 53, 219, 12, 177, 85, 250, 120, 12, // .A.(5...U.x. + 130, 109, 191, 129, 202, 64, 83, 176, 27, 73, 247, 98, // .m...@S..I.b + 195, 152, 234, 163, 192, 235, 137, 197, 182, 218, 227, 51, // ...........3 + 179, 167, 162, 113, 60, 163, 237, 71, 155, 174, 86, 90, // ...q<..G..VZ + 214, 196, 32, 103, 91, 98, 115, 7, 244, 209, 70, 248, // .. g[bs...F. + 94, 19, 108, 117, 222, 190, 202, 169, 59, 89, 183, 172, // ^.lu....;Y.. + 198, 134, 61, 182, 12, 210, 97, 16, 67, 210, 200, 23, // ..=...a.C... + 229, 58, 141, 112, 2, 222, 250, 157, 190, 200, 199, 11, // .:.p........ + 218, 247, 250, 174, 142, 36, 38, 79, 111, 62, 120, 155, // .....$&Oo>x. + 130, 207, 37, 171, 91, 141, 218, 164, 234, 153, 244, 131, // ..%.[....... + 9, 142, 58, 143, 253, 134, 229, 214, 175, 91, 178, 100, // ..:......[.d + 107, 255, 160, 165, 26, 31, 81, 188, 210, 123, 209, 154, // k.....Q..{.. + 98, 61, 250, 29, 68, 193, 191, 237, 104, 94, 215, 59, // b=..D...h^.; + 58, 152, 99, 152, 199, 141, 54, 20, 212, 155, 96, 150, // :.c...6...`. + 243, 1, 46, 115, 124, 233, 188, 105, 30, 199, 222, 104, // ...s|..i...h + 1, 40, 76, 142, 242, 40, 92, 202, 51, 189, 194, 156, // .(L..(..3... + 237, 78, 158, 150, 80, 108, 252, 142, 197, 30, 198, 88, // .N..Pl.....X + 39, 113, 148, 120, 65, 101, 239, 244, 15, 208, 156, 165, // 'q.xAe...... + 131, 160, 4, 105, 70, 229, 179, 232, 108, 13, 44, 254, // ...iF...l.,. + 127, 21, 173, 12, 91, 202, 54, 0, 0, 0 // ....[.6.. +}; +static const unsigned char v3[] = { + 31, 139, 8, 8, 255, 98, 56, 100, 0, 3, 112, 114, // .....b8d..pr 101, 97, 99, 116, 46, 109, 105, 110, 46, 106, 115, 0, // eact.min.js. 157, 91, 123, 119, 219, 182, 146, 255, 127, 63, 69, 164, // .[{w.....?E. 211, 163, 18, 43, 68, 177, 147, 182, 187, 75, 5, 213, // ...+D....K.. @@ -855,33 +865,74 @@ static const unsigned char v2[] = { 14, 139, 221, 126, 250, 31, 255, 11, 22, 19, 178, 116, // ...~.......t 138, 51, 0, 0, 0 // .3.. }; -static const unsigned char v3[] = { - 31, 139, 8, 8, 16, 107, 222, 99, 0, 3, 105, 110, // .....k.c..in - 100, 101, 120, 46, 104, 116, 109, 108, 0, 93, 144, 177, // dex.html.].. - 78, 196, 48, 12, 134, 247, 123, 138, 144, 153, 180, 176, // N.0...{..... - 49, 36, 149, 208, 245, 6, 38, 24, 64, 130, 49, 77, // 1$....&.@.1M - 124, 23, 67, 154, 148, 196, 237, 169, 111, 79, 218, 30, // |.C.....oO.. - 226, 196, 100, 255, 246, 103, 203, 254, 229, 77, 251, 188, // ..d..g...M.. - 127, 253, 120, 57, 48, 71, 189, 111, 118, 114, 9, 204, // ..x90G.ovr.. - 235, 112, 82, 28, 2, 111, 118, 140, 73, 7, 218, 46, // .pR..ov.I... - 73, 73, 9, 201, 67, 211, 194, 132, 6, 88, 171, 179, // II..C....X.. - 235, 162, 78, 86, 214, 91, 125, 99, 122, 32, 205, 140, // ..NV.[}cz .. - 211, 41, 3, 41, 62, 210, 81, 60, 112, 86, 95, 55, // .).)>.Q3 - 47, 244, 6, 21, 115, 235, 205, 228, 31, 137, 226, 92, // /...s....... - 130, 117, 1, 0, 0, 0 // .u... -}; static const unsigned char v4[] = { - 31, 139, 8, 8, 16, 107, 222, 99, 0, 3, 117, 115, // .....k.c..us + 31, 139, 8, 8, 255, 98, 56, 100, 0, 3, 115, 116, // .....b8d..st + 121, 108, 101, 46, 99, 115, 115, 0, 117, 84, 203, 110, // yle.css.uT.n + 219, 48, 16, 188, 251, 43, 88, 4, 5, 218, 32, 82, // .0...+X... R + 44, 41, 178, 99, 249, 210, 91, 63, 162, 232, 129, 18, // ,).c..[?.... + 87, 54, 17, 138, 84, 73, 58, 118, 90, 248, 223, 187, // W6..TI:vZ... + 164, 30, 164, 226, 228, 98, 75, 187, 163, 125, 204, 12, // .....bK..}.. + 121, 79, 254, 145, 90, 93, 18, 195, 255, 114, 121, 168, // yO..Z]...ry. + 240, 89, 51, 208, 9, 134, 246, 228, 186, 58, 218, 78, // .Y3......:.N + 60, 96, 140, 189, 33, 172, 163, 250, 192, 101, 69, 214, // <`..!....eE. + 123, 210, 83, 198, 60, 28, 159, 143, 192, 15, 71, 91, // {.S.<.....G[ + 145, 108, 189, 254, 186, 39, 173, 146, 238, 121, 211, 95, // .l...'...y._ + 136, 161, 210, 36, 6, 52, 111, 93, 41, 3, 2, 26, // ...$.4o])... + 251, 64, 184, 236, 79, 248, 39, 104, 13, 162, 170, 106, // .@..O.'h...j + 104, 149, 134, 7, 98, 225, 98, 169, 6, 138, 109, 212, // h...b.b...m. + 201, 10, 46, 161, 34, 82, 73, 216, 15, 195, 29, 41, // ...."RI....) + 83, 231, 202, 5, 200, 23, 222, 245, 74, 91, 42, 237, // S.......J[*. + 126, 28, 22, 219, 185, 110, 74, 112, 70, 238, 154, 166, // ~....nJpF... + 89, 64, 174, 171, 70, 49, 108, 208, 107, 192, 218, 141, // Y@..F1l.k... + 18, 10, 241, 119, 197, 182, 24, 70, 77, 90, 218, 113, // ...w...FMZ.q + 241, 86, 145, 78, 73, 101, 122, 218, 192, 24, 63, 143, // .V.NIez...?. + 91, 213, 74, 96, 139, 49, 136, 36, 225, 92, 166, 163, // [.J`.1.$.... + 66, 184, 88, 77, 155, 151, 131, 86, 39, 201, 176, 36, // B.XM...V'..$ + 99, 44, 230, 37, 205, 160, 195, 223, 2, 186, 105, 204, // c,.%......i. + 68, 83, 198, 79, 198, 229, 114, 23, 189, 174, 166, 165, // DS.O..r..... + 103, 82, 82, 252, 92, 73, 156, 51, 234, 150, 149, 253, // gRR..I.3.... + 229, 179, 77, 23, 13, 203, 161, 40, 86, 163, 213, 43, // ..M....(V..+ + 55, 220, 2, 115, 143, 180, 177, 252, 53, 222, 189, 44, // 7..s....5.., + 189, 30, 115, 175, 197, 22, 0, 72, 0, 233, 184, 76, // ..s....H...L + 206, 156, 217, 99, 69, 118, 88, 21, 193, 181, 69, 232, // ...cEvX...E. + 138, 44, 193, 126, 130, 155, 229, 162, 149, 189, 63, 166, // .,.~......?. + 190, 109, 139, 125, 155, 147, 54, 238, 173, 87, 92, 90, // .m.}..6..W.Z + 228, 16, 75, 50, 110, 122, 65, 81, 2, 46, 157, 238, // ..K2nzAQ.... + 73, 45, 84, 243, 178, 216, 108, 131, 84, 122, 202, 62, // I-T...l.Tz.> + 82, 102, 53, 76, 247, 11, 203, 208, 90, 0, 251, 237, // Rf5L....Z... + 44, 132, 66, 114, 251, 230, 89, 9, 61, 233, 201, 42, // ,.Br..Y.=..* + 183, 139, 233, 148, 178, 71, 132, 89, 141, 14, 229, 150, // .....G.Y.... + 43, 52, 53, 74, 74, 210, 220, 120, 102, 26, 108, 67, // +45JJ..xf.lC + 113, 20, 29, 155, 158, 228, 107, 39, 196, 72, 139, 175, // q.....k'.H.. + 229, 176, 44, 105, 5, 92, 16, 56, 175, 225, 222, 199, // ..,i...8.... + 148, 55, 108, 148, 26, 28, 237, 6, 246, 244, 248, 163, // .7l......... + 119, 163, 171, 55, 18, 98, 60, 203, 192, 102, 80, 68, // w..7.b<..fPD + 241, 40, 117, 42, 213, 89, 211, 30, 17, 231, 35, 202, // .(u*.Y....#. + 157, 120, 255, 186, 46, 46, 234, 1, 157, 57, 188, 87, // .x.......9.W + 152, 65, 59, 139, 38, 160, 69, 34, 203, 208, 187, 220, // .A;.&.E".... + 177, 91, 79, 69, 102, 220, 185, 35, 62, 81, 226, 29, // .[OEf..#>Q.. + 238, 219, 24, 60, 217, 220, 155, 41, 208, 149, 141, 51, // ...<...)...3 + 90, 213, 243, 6, 173, 205, 168, 69, 107, 166, 127, 148, // Z......Ek... + 65, 88, 220, 35, 247, 7, 165, 252, 240, 160, 60, 185, // AX.#......<. + 232, 80, 51, 209, 131, 236, 35, 212, 149, 30, 106, 45, // .P3...#...j- + 253, 219, 210, 208, 245, 125, 178, 133, 33, 233, 70, 121, // .....}..!.Fy + 159, 163, 224, 79, 197, 234, 241, 158, 252, 212, 72, 197, // ...O......H. + 253, 163, 83, 224, 124, 43, 172, 251, 77, 28, 193, 21, // ..S.|+..M... + 153, 105, 70, 139, 127, 126, 63, 170, 87, 208, 173, 192, // .iF..~?.W... + 235, 43, 152, 6, 241, 73, 150, 59, 221, 6, 55, 13, // .+...I.;..7. + 87, 231, 148, 200, 66, 98, 151, 165, 155, 77, 148, 90, // W...Bb...M.Z + 135, 212, 115, 145, 22, 69, 72, 237, 66, 102, 91, 134, // ..s..EH.Bf[. + 240, 115, 8, 111, 54, 139, 90, 219, 144, 41, 159, 23, // .s.o6.Z..).. + 165, 54, 81, 38, 154, 171, 12, 225, 167, 229, 88, 79, // .6Q&......XO + 33, 83, 44, 167, 42, 66, 38, 143, 166, 138, 87, 95, // !S,.*B&...W_ + 78, 21, 237, 62, 15, 245, 163, 3, 198, 41, 249, 22, // N..>.....).. + 221, 74, 89, 145, 225, 105, 252, 142, 224, 15, 15, 235, // .JY..i...... + 64, 244, 132, 205, 183, 254, 228, 94, 227, 82, 244, 50, // @......^.R.2 + 95, 112, 249, 84, 201, 201, 61, 74, 185, 212, 5, 63, // _p.T..=J...? + 252, 15, 225, 232, 67, 124, 39, 7, 0, 0, 0 // ....C|'... +}; +static const unsigned char v5[] = { + 31, 139, 8, 8, 255, 98, 56, 100, 0, 3, 117, 115, // .....b8d..us 101, 114, 46, 112, 110, 103, 0, 1, 16, 15, 239, 240, // er.png...... 137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, // .PNG........ 73, 72, 68, 82, 0, 0, 0, 128, 0, 0, 0, 128, // IHDR........ @@ -1206,71 +1257,412 @@ static const unsigned char v4[] = { 126, 121, 49, 188, 0, 0, 0, 0, 73, 69, 78, 68, // ~y1.....IEND 174, 66, 96, 130, 199, 98, 29, 214, 16, 15, 0, 0, 0 // .B`..b...... }; -static const unsigned char v5[] = { - 31, 139, 8, 8, 16, 107, 222, 99, 0, 3, 115, 116, // .....k.c..st - 121, 108, 101, 46, 99, 115, 115, 0, 117, 84, 203, 110, // yle.css.uT.n - 219, 48, 16, 188, 251, 43, 88, 4, 5, 218, 32, 82, // .0...+X... R - 44, 41, 178, 99, 249, 210, 91, 63, 162, 232, 129, 18, // ,).c..[?.... - 87, 54, 17, 138, 84, 73, 58, 118, 90, 248, 223, 187, // W6..TI:vZ... - 164, 30, 164, 226, 228, 98, 75, 187, 163, 125, 204, 12, // .....bK..}.. - 121, 79, 254, 145, 90, 93, 18, 195, 255, 114, 121, 168, // yO..Z]...ry. - 240, 89, 51, 208, 9, 134, 246, 228, 186, 58, 218, 78, // .Y3......:.N - 60, 96, 140, 189, 33, 172, 163, 250, 192, 101, 69, 214, // <`..!....eE. - 123, 210, 83, 198, 60, 28, 159, 143, 192, 15, 71, 91, // {.S.<.....G[ - 145, 108, 189, 254, 186, 39, 173, 146, 238, 121, 211, 95, // .l...'...y._ - 136, 161, 210, 36, 6, 52, 111, 93, 41, 3, 2, 26, // ...$.4o])... - 251, 64, 184, 236, 79, 248, 39, 104, 13, 162, 170, 106, // .@..O.'h...j - 104, 149, 134, 7, 98, 225, 98, 169, 6, 138, 109, 212, // h...b.b...m. - 201, 10, 46, 161, 34, 82, 73, 216, 15, 195, 29, 41, // ...."RI....) - 83, 231, 202, 5, 200, 23, 222, 245, 74, 91, 42, 237, // S.......J[*. - 126, 28, 22, 219, 185, 110, 74, 112, 70, 238, 154, 166, // ~....nJpF... - 89, 64, 174, 171, 70, 49, 108, 208, 107, 192, 218, 141, // Y@..F1l.k... - 18, 10, 241, 119, 197, 182, 24, 70, 77, 90, 218, 113, // ...w...FMZ.q - 241, 86, 145, 78, 73, 101, 122, 218, 192, 24, 63, 143, // .V.NIez...?. - 91, 213, 74, 96, 139, 49, 136, 36, 225, 92, 166, 163, // [.J`.1.$.... - 66, 184, 88, 77, 155, 151, 131, 86, 39, 201, 176, 36, // B.XM...V'..$ - 99, 44, 230, 37, 205, 160, 195, 223, 2, 186, 105, 204, // c,.%......i. - 68, 83, 198, 79, 198, 229, 114, 23, 189, 174, 166, 165, // DS.O..r..... - 103, 82, 82, 252, 92, 73, 156, 51, 234, 150, 149, 253, // gRR..I.3.... - 229, 179, 77, 23, 13, 203, 161, 40, 86, 163, 213, 43, // ..M....(V..+ - 55, 220, 2, 115, 143, 180, 177, 252, 53, 222, 189, 44, // 7..s....5.., - 189, 30, 115, 175, 197, 22, 0, 72, 0, 233, 184, 76, // ..s....H...L - 206, 156, 217, 99, 69, 118, 88, 21, 193, 181, 69, 232, // ...cEvX...E. - 138, 44, 193, 126, 130, 155, 229, 162, 149, 189, 63, 166, // .,.~......?. - 190, 109, 139, 125, 155, 147, 54, 238, 173, 87, 92, 90, // .m.}..6..W.Z - 228, 16, 75, 50, 110, 122, 65, 81, 2, 46, 157, 238, // ..K2nzAQ.... - 73, 45, 84, 243, 178, 216, 108, 131, 84, 122, 202, 62, // I-T...l.Tz.> - 82, 102, 53, 76, 247, 11, 203, 208, 90, 0, 251, 237, // Rf5L....Z... - 44, 132, 66, 114, 251, 230, 89, 9, 61, 233, 201, 42, // ,.Br..Y.=..* - 183, 139, 233, 148, 178, 71, 132, 89, 141, 14, 229, 150, // .....G.Y.... - 43, 52, 53, 74, 74, 210, 220, 120, 102, 26, 108, 67, // +45JJ..xf.lC - 113, 20, 29, 155, 158, 228, 107, 39, 196, 72, 139, 175, // q.....k'.H.. - 229, 176, 44, 105, 5, 92, 16, 56, 175, 225, 222, 199, // ..,i...8.... - 148, 55, 108, 148, 26, 28, 237, 6, 246, 244, 248, 163, // .7l......... - 119, 163, 171, 55, 18, 98, 60, 203, 192, 102, 80, 68, // w..7.b<..fPD - 241, 40, 117, 42, 213, 89, 211, 30, 17, 231, 35, 202, // .(u*.Y....#. - 157, 120, 255, 186, 46, 46, 234, 1, 157, 57, 188, 87, // .x.......9.W - 152, 65, 59, 139, 38, 160, 69, 34, 203, 208, 187, 220, // .A;.&.E".... - 177, 91, 79, 69, 102, 220, 185, 35, 62, 81, 226, 29, // .[OEf..#>Q.. - 238, 219, 24, 60, 217, 220, 155, 41, 208, 149, 141, 51, // ...<...)...3 - 90, 213, 243, 6, 173, 205, 168, 69, 107, 166, 127, 148, // Z......Ek... - 65, 88, 220, 35, 247, 7, 165, 252, 240, 160, 60, 185, // AX.#......<. - 232, 80, 51, 209, 131, 236, 35, 212, 149, 30, 106, 45, // .P3...#...j- - 253, 219, 210, 208, 245, 125, 178, 133, 33, 233, 70, 121, // .....}..!.Fy - 159, 163, 224, 79, 197, 234, 241, 158, 252, 212, 72, 197, // ...O......H. - 253, 163, 83, 224, 124, 43, 172, 251, 77, 28, 193, 21, // ..S.|+..M... - 153, 105, 70, 139, 127, 126, 63, 170, 87, 208, 173, 192, // .iF..~?.W... - 235, 43, 152, 6, 241, 73, 150, 59, 221, 6, 55, 13, // .+...I.;..7. - 87, 231, 148, 200, 66, 98, 151, 165, 155, 77, 148, 90, // W...Bb...M.Z - 135, 212, 115, 145, 22, 69, 72, 237, 66, 102, 91, 134, // ..s..EH.Bf[. - 240, 115, 8, 111, 54, 139, 90, 219, 144, 41, 159, 23, // .s.o6.Z..).. - 165, 54, 81, 38, 154, 171, 12, 225, 167, 229, 88, 79, // .6Q&......XO - 33, 83, 44, 167, 42, 66, 38, 143, 166, 138, 87, 95, // !S,.*B&...W_ - 78, 21, 237, 62, 15, 245, 163, 3, 198, 41, 249, 22, // N..>.....).. - 221, 74, 89, 145, 225, 105, 252, 142, 224, 15, 15, 235, // .JY..i...... - 64, 244, 132, 205, 183, 254, 228, 94, 227, 82, 244, 50, // @......^.R.2 - 95, 112, 249, 84, 201, 201, 61, 74, 185, 212, 5, 63, // _p.T..=J...? - 252, 15, 225, 232, 67, 124, 39, 7, 0, 0, 0 // ....C|'... +static const unsigned char v6[] = { + 31, 139, 8, 8, 255, 98, 56, 100, 0, 3, 109, 97, // .....b8d..ma + 105, 110, 46, 106, 115, 0, 189, 91, 123, 119, 219, 184, // in.js..[{w.. + 177, 255, 63, 159, 2, 171, 235, 91, 81, 181, 68, 73, // ..?....[Q.DI + 118, 156, 205, 149, 35, 245, 164, 217, 237, 221, 244, 36, // v...#......$ + 217, 116, 157, 109, 187, 199, 199, 167, 166, 72, 72, 98, // .t.m.....HHb + 77, 145, 92, 18, 122, 213, 225, 119, 191, 191, 25, 128, // M...z..w.... + 36, 40, 203, 143, 108, 218, 235, 228, 72, 36, 48, 24, // $(..l...H$0. + 12, 102, 6, 243, 2, 212, 94, 229, 82, 228, 42, 11, // .f....^.R.*. + 125, 213, 62, 127, 22, 46, 211, 36, 83, 226, 246, 77, // }.>....$S..M + 130, 135, 88, 198, 170, 43, 22, 248, 175, 150, 81, 87, // ..X..+....QW + 100, 50, 14, 100, 214, 21, 24, 240, 253, 108, 38, 125, // d2.d.....l&} + 197, 143, 23, 202, 83, 146, 159, 126, 146, 179, 66, 204, // ....S..~..B. + 178, 100, 41, 218, 110, 63, 205, 164, 231, 43, 119, 25, // .d).n?...+w. + 198, 238, 63, 115, 32, 126, 182, 246, 50, 17, 200, 181, // ..?s ~..2... + 23, 4, 153, 24, 139, 22, 125, 203, 60, 31, 209, 116, // ......}.<..t + 45, 116, 251, 73, 156, 43, 241, 222, 219, 190, 151, 68, // -t.I.+.....D + 75, 254, 157, 167, 188, 143, 73, 24, 171, 28, 208, 103, // K.....I....g + 3, 64, 244, 251, 226, 211, 34, 204, 69, 14, 26, 35, // .@....".E..# + 41, 210, 213, 52, 10, 243, 69, 63, 95, 77, 115, 63, // )..4..E?_Ms? + 11, 167, 82, 160, 15, 84, 4, 66, 37, 34, 245, 242, // ..R..T.B%".. + 92, 196, 137, 10, 103, 161, 239, 169, 16, 184, 133, 90, // ....g......Z + 120, 74, 108, 100, 38, 9, 81, 38, 125, 25, 174, 1, // xJld&.Q&}... + 203, 228, 170, 5, 56, 32, 179, 53, 45, 14, 131, 189, // ....8 .5-... + 40, 18, 254, 34, 140, 2, 225, 151, 92, 200, 69, 50, // (.."......E2 + 99, 48, 47, 77, 93, 94, 202, 199, 213, 244, 98, 53, // c0/M]^....b5 + 5, 109, 206, 108, 21, 251, 52, 133, 211, 17, 183, 207, // .m.l..4..... + 132, 160, 206, 133, 23, 7, 145, 204, 136, 244, 219, 162, // ............ + 43, 194, 0, 15, 88, 130, 192, 188, 106, 149, 197, 12, // +...X...j... + 39, 68, 69, 249, 72, 84, 56, 102, 113, 199, 244, 138, // 'DE.HT8fq... + 10, 203, 101, 24, 28, 31, 95, 1, 197, 44, 62, 231, // ..e..._..,>. + 174, 162, 203, 95, 171, 248, 16, 134, 48, 168, 49, 4, // ..._....0.1. + 50, 146, 74, 218, 136, 174, 26, 24, 12, 15, 173, 209, // 2.J......... + 1, 216, 94, 143, 159, 37, 153, 112, 104, 65, 55, 34, // ..^..%.phA7" + 140, 43, 52, 157, 26, 225, 205, 149, 30, 97, 176, 226, // .+4......a.. + 179, 56, 127, 86, 116, 156, 78, 37, 209, 15, 222, 26, // .8.Vt.N%.... + 148, 167, 89, 146, 130, 27, 19, 214, 164, 235, 103, 175, // ..Y.......g. + 130, 112, 13, 157, 219, 69, 114, 220, 154, 122, 254, 205, // .p...Er..z.. + 60, 75, 86, 113, 48, 18, 255, 117, 122, 122, 122, 14, // .,.Lv... + 37, 158, 105, 39, 99, 139, 184, 66, 92, 232, 206, 89, // %.i'c..B...Y + 24, 201, 188, 43, 162, 240, 70, 138, 55, 23, 23, 253, // ...+..F.7... + 63, 95, 244, 127, 248, 244, 254, 29, 112, 193, 44, 133, // ?_......p.,. + 75, 111, 78, 189, 94, 38, 121, 225, 128, 165, 77, 131, // KoN.^&y...M. + 229, 213, 214, 92, 76, 195, 216, 203, 118, 238, 179, 146, // ....L...v... + 169, 63, 191, 37, 15, 145, 51, 200, 79, 223, 95, 124, // .?.%..3.O._| + 18, 175, 63, 190, 21, 236, 78, 150, 180, 57, 3, 49, // ..?...N..9.1 + 221, 113, 159, 230, 71, 87, 211, 46, 118, 201, 74, 248, // .q..GW..v.J. + 216, 120, 114, 11, 58, 99, 9, 100, 154, 253, 226, 149, // .xr.:c.d.... + 15, 230, 79, 252, 85, 22, 189, 234, 243, 35, 81, 178, // ..O.U....#Q. + 196, 154, 122, 17, 224, 196, 74, 133, 81, 168, 118, 35, // ..z...J.Q.v# + 214, 225, 84, 11, 152, 116, 184, 30, 38, 122, 43, 225, // ..T..t..&z+. + 5, 64, 58, 34, 135, 53, 16, 71, 183, 198, 67, 22, // .@:".5.G..C. + 125, 47, 13, 129, 51, 158, 133, 243, 254, 92, 170, 18, // }/..3....... + 127, 189, 41, 126, 11, 162, 92, 42, 209, 11, 68, 27, // ..)~...*..D. + 102, 127, 188, 156, 247, 177, 3, 66, 191, 253, 149, 168, // f......B.... + 151, 112, 226, 144, 4, 112, 67, 148, 132, 220, 52, 140, // .p...pC...4. + 23, 50, 138, 146, 125, 236, 150, 142, 151, 92, 102, 214, // .2..}.....f. + 242, 232, 61, 127, 77, 146, 36, 165, 175, 118, 0, 252, // ..=.M.$..v.. + 183, 23, 239, 84, 184, 148, 174, 248, 96, 195, 146, 186, // ...T....`... + 102, 36, 244, 24, 138, 77, 114, 255, 155, 156, 94, 36, // f$...Mr...^$ + 254, 13, 150, 139, 49, 63, 255, 244, 214, 72, 138, 9, // ....1?...H.. + 222, 120, 202, 95, 148, 100, 121, 185, 248, 243, 197, 143, // .x._.dy..... + 31, 56, 254, 137, 231, 216, 220, 26, 240, 182, 5, 149, // .8.......... + 148, 173, 145, 104, 185, 110, 171, 43, 90, 228, 227, 240, // ...h.n.+Z... + 230, 186, 110, 97, 70, 150, 124, 250, 132, 61, 164, 199, // ..naF.|..=.. + 108, 114, 80, 35, 122, 61, 24, 245, 5, 105, 89, 54, // lrP#z=...iY6 + 100, 134, 13, 209, 4, 246, 199, 48, 69, 98, 67, 187, // d......0EbC. + 104, 143, 127, 54, 57, 150, 201, 75, 75, 131, 103, 217, // h..69..KK.g. + 61, 109, 246, 224, 31, 176, 153, 199, 181, 203, 102, 3, // =m........f. + 168, 125, 182, 134, 184, 164, 217, 187, 96, 135, 250, 25, // .}......`... + 15, 20, 56, 148, 97, 154, 211, 110, 179, 171, 54, 112, // ..8.a..n..6p + 68, 31, 195, 125, 196, 195, 253, 112, 145, 153, 81, 194, // D..}...p..Q. + 147, 151, 158, 97, 38, 65, 182, 83, 89, 126, 33, 218, // ...a&A.SY~!. + 188, 26, 6, 109, 119, 173, 246, 219, 133, 244, 96, 119, // ...mw.....`w + 192, 218, 219, 215, 224, 12, 140, 198, 191, 88, 104, 35, // .........Xh# + 209, 254, 163, 151, 99, 151, 183, 197, 177, 152, 170, 196, // ....c....... + 115, 136, 106, 60, 183, 71, 212, 66, 164, 117, 138, 162, // s.j<.G.B.u.. + 99, 97, 114, 177, 51, 99, 39, 35, 83, 159, 33, 166, // car.3c'#S.!. + 164, 128, 235, 190, 110, 241, 187, 223, 137, 202, 69, 133, // ....n.....E. + 104, 109, 66, 250, 196, 115, 71, 102, 12, 140, 175, 142, // hmB..sGf.... + 21, 154, 221, 245, 34, 236, 25, 200, 54, 176, 1, 109, // ...."...6..m + 213, 38, 126, 219, 219, 132, 129, 66, 244, 244, 252, 229, // .&~....B.... + 32, 133, 183, 175, 140, 190, 113, 236, 182, 163, 57, 59, // .....q...9; + 236, 104, 234, 112, 102, 223, 171, 159, 208, 128, 50, 152, // .h.pf.....2. + 169, 29, 75, 233, 117, 94, 188, 120, 1, 167, 178, 239, // ..K.u^.x.... + 72, 140, 114, 104, 127, 178, 31, 155, 212, 62, 233, 204, // H.rh.....>.. + 248, 164, 210, 203, 135, 113, 186, 82, 66, 237, 82, 57, // .....q.RB.R9 + 110, 43, 185, 85, 109, 129, 32, 198, 151, 139, 36, 194, // n+.Um. ...$. + 130, 199, 237, 15, 216, 11, 237, 18, 139, 89, 242, 112, // .........Y.p + 48, 248, 239, 243, 86, 197, 212, 36, 102, 28, 136, 12, // 0...V..$f... + 88, 73, 74, 221, 115, 228, 218, 85, 152, 86, 42, 119, // XIJ.s..U.V*w + 237, 69, 43, 217, 41, 4, 127, 3, 142, 163, 13, 68, // .E+.)......D + 36, 15, 69, 83, 79, 162, 184, 69, 170, 2, 55, 23, // $.ESO..E..7. + 180, 26, 84, 183, 62, 86, 205, 95, 74, 57, 141, 124, // ..T.>V._J9.| + 128, 114, 154, 175, 176, 198, 251, 136, 134, 231, 212, 193, // .r.......... + 186, 246, 212, 53, 13, 247, 86, 52, 93, 41, 5, 167, // ...5..V4]).. + 108, 135, 91, 7, 232, 62, 16, 55, 85, 148, 32, 246, // l.[..>.7U. . + 244, 166, 240, 130, 160, 228, 27, 222, 75, 159, 63, 139, // ........K.?. + 111, 152, 88, 43, 112, 211, 52, 78, 42, 69, 209, 211, // o.X+p.4N*E.. + 62, 72, 113, 35, 208, 177, 117, 250, 132, 131, 78, 51, // >Hq#..u...N3 + 255, 95, 17, 235, 6, 218, 84, 96, 175, 91, 14, 163, // ._....T`.[.. + 107, 27, 67, 253, 114, 194, 47, 39, 15, 135, 121, 69, // k.C.r./'..yE + 29, 233, 189, 97, 247, 181, 202, 216, 112, 60, 98, 250, // ...a....p + 125, 50, 1, 122, 35, 191, 109, 24, 117, 114, 67, 173, // }2.z#.m.urC. + 59, 9, 124, 211, 116, 139, 218, 153, 100, 81, 97, 91, // ;.|.t...dQa[ + 226, 74, 196, 133, 5, 124, 200, 71, 97, 179, 221, 53, // .J...|.Ga..5 + 244, 165, 1, 63, 96, 146, 27, 54, 214, 76, 106, 44, // ...?`..6.Lj, + 235, 157, 57, 239, 205, 134, 15, 228, 190, 63, 243, 96, // ..9......?.` + 219, 28, 55, 194, 241, 39, 242, 94, 60, 206, 252, 139, // ..7..'.^<... + 170, 90, 198, 209, 255, 215, 9, 160, 100, 63, 116, 245, // .Z......d?t. + 0, 251, 169, 245, 33, 55, 75, 214, 234, 55, 51, 191, // ....!7K..73. + 156, 178, 193, 124, 107, 198, 255, 127, 230, 63, 206, 251, // ...|k....?.. + 143, 186, 218, 246, 239, 224, 124, 205, 251, 244, 32, 239, // ......|... . + 83, 155, 247, 135, 131, 156, 175, 225, 126, 122, 136, 251, // S.......~z.. + 233, 127, 132, 251, 154, 160, 95, 76, 10, 78, 181, 234, // ......_L.N.. + 70, 93, 2, 9, 213, 102, 179, 113, 23, 225, 90, 46, // F]...f.q..Z. + 127, 133, 119, 91, 246, 3, 185, 76, 242, 254, 70, 78, // ..w[...L..FN + 115, 206, 0, 123, 32, 18, 174, 163, 111, 196, 243, 3, // s..{ ...o... + 0, 223, 255, 133, 18, 68, 221, 45, 0, 40, 52, 8, // .....D.-.(4. + 87, 43, 144, 117, 114, 46, 106, 178, 216, 58, 13, 45, // W+.ur.j..:.- + 173, 245, 29, 237, 48, 60, 90, 230, 115, 51, 133, 149, // ....06 + 151, 26, 85, 156, 40, 75, 28, 135, 2, 199, 247, 90, // ..U.(K.....Z + 138, 112, 198, 203, 170, 66, 248, 104, 130, 209, 216, 193, // .p...B.h.... + 191, 38, 121, 107, 130, 143, 145, 56, 186, 93, 186, 70, // .&yk...8.].F + 43, 92, 52, 20, 162, 222, 192, 141, 17, 188, 187, 91, // +.4........[ + 19, 189, 201, 27, 163, 184, 233, 222, 113, 92, 99, 152, // ........q.c. + 208, 103, 115, 20, 181, 84, 101, 217, 253, 98, 192, 251, // .gs..Te..b.. + 82, 77, 31, 12, 138, 75, 101, 230, 40, 181, 28, 210, // RM...Ke.(... + 8, 85, 47, 175, 236, 128, 86, 109, 21, 131, 126, 218, // .U/...Vm..~. + 170, 187, 85, 129, 123, 131, 87, 61, 152, 207, 58, 244, // ..U.{.W=..:. + 225, 136, 91, 29, 79, 212, 103, 36, 80, 144, 250, 120, // ..[.O.g$P..x + 33, 156, 9, 106, 112, 41, 226, 19, 227, 113, 85, 59, // !..jp)...qU; + 106, 119, 108, 66, 157, 45, 205, 177, 165, 208, 21, 81, // jwlB.-.....Q + 157, 115, 73, 35, 136, 41, 87, 157, 242, 216, 193, 124, // .sI#.)W....| + 155, 72, 201, 76, 110, 157, 142, 208, 153, 72, 25, 6, // .H.Ln....H.. + 55, 66, 95, 218, 234, 203, 74, 71, 180, 109, 180, 195, // 7B_...JG.m.. + 94, 187, 184, 245, 132, 192, 247, 203, 130, 94, 19, 240, // ^........^.. + 150, 245, 178, 131, 1, 47, 36, 241, 88, 192, 139, 96, // ...../$.X..` + 183, 174, 124, 104, 161, 145, 160, 44, 121, 194, 222, 42, // ..|h...,y..* + 218, 251, 99, 209, 50, 214, 71, 34, 43, 198, 246, 182, // ..c.2.G"+... + 83, 130, 26, 156, 96, 168, 60, 187, 34, 173, 250, 166, // S...`.<."... + 28, 252, 7, 209, 182, 235, 210, 11, 143, 206, 215, 180, // ............ + 193, 42, 133, 235, 81, 181, 179, 45, 70, 13, 188, 110, // .*..Q..-F..n + 53, 37, 161, 168, 94, 8, 172, 13, 151, 82, 55, 124, // 5%..^....R7| + 117, 172, 123, 58, 240, 7, 207, 7, 143, 197, 186, 76, // u.{:.......L + 113, 185, 33, 236, 248, 86, 155, 45, 203, 2, 11, 205, // q.!..V.-.... + 132, 17, 157, 1, 29, 221, 214, 92, 41, 204, 33, 208, // ........).!. + 193, 32, 65, 31, 183, 80, 182, 78, 238, 142, 138, 145, // . A..P.N.... + 179, 40, 217, 140, 76, 69, 104, 255, 100, 171, 85, 121, // .(..LEh.d.Uy + 88, 93, 91, 210, 52, 96, 247, 27, 250, 220, 165, 151, // X][.4`...... + 58, 149, 130, 194, 128, 57, 102, 83, 64, 23, 77, 115, // :....9fS@.Ms + 209, 233, 20, 191, 45, 98, 121, 122, 192, 98, 166, 58, // ....-byz.b.: + 20, 178, 52, 74, 46, 20, 191, 176, 57, 79, 233, 104, // ..4J....9O.h + 87, 240, 121, 151, 235, 186, 15, 7, 51, 101, 32, 3, // W.y.....3e . + 85, 111, 4, 50, 214, 222, 44, 26, 193, 135, 209, 200, // Uo.2..,..... + 50, 214, 56, 16, 219, 208, 22, 184, 39, 182, 121, 130, // 2.8.....'.y. + 239, 46, 249, 141, 177, 57, 215, 33, 181, 107, 173, 207, // .....9.!.k.. + 5, 196, 58, 244, 248, 248, 128, 206, 75, 100, 108, 247, // ..:.....Kdl. + 16, 209, 240, 156, 8, 229, 18, 198, 71, 93, 182, 74, // ........G].J + 113, 117, 154, 26, 92, 241, 26, 174, 186, 161, 140, 116, // qu.........t + 38, 227, 213, 135, 194, 129, 142, 19, 141, 101, 51, 199, // &........e3. + 213, 123, 231, 19, 119, 3, 128, 61, 191, 78, 148, 214, // .{..w..=.N.. + 101, 230, 251, 188, 37, 146, 209, 239, 183, 169, 222, 164, // e...%....... + 224, 217, 138, 14, 67, 242, 17, 53, 107, 119, 68, 37, // ....C..5kwD% + 119, 44, 32, 36, 15, 34, 221, 185, 43, 46, 197, 229, // w, $."..+... + 240, 197, 217, 243, 211, 23, 195, 211, 179, 147, 174, 24, // ............ + 254, 207, 85, 215, 106, 57, 69, 203, 75, 180, 64, 244, // ..U.j9E.K.@. + 226, 138, 176, 112, 5, 171, 107, 142, 34, 187, 98, 167, // ...p..k.".b. + 16, 54, 2, 213, 214, 124, 239, 16, 35, 208, 167, 183, // .6...|..#... + 69, 27, 63, 111, 241, 108, 60, 220, 197, 95, 255, 247, // E.?o.l<.._.. + 30, 231, 6, 196, 214, 223, 166, 108, 57, 238, 29, 250, // .......l9... + 59, 46, 187, 63, 151, 3, 22, 67, 107, 244, 231, 70, // ;..?...Ck..F + 183, 141, 226, 248, 110, 247, 103, 123, 160, 249, 88, 212, // ....n.g{..X. + 16, 155, 225, 30, 196, 230, 228, 203, 240, 107, 242, 78, // .........k.N + 14, 80, 247, 208, 218, 240, 17, 81, 60, 91, 30, 137, // .P.....Q<[.. + 186, 37, 215, 171, 134, 146, 255, 32, 112, 44, 78, 7, // .%..... p,N. + 93, 34, 108, 44, 240, 189, 160, 134, 151, 93, 154, 115, // ]"l,.....].s + 12, 209, 157, 27, 84, 90, 78, 213, 112, 243, 250, 249, // ....TZN.p... + 179, 120, 94, 202, 174, 234, 219, 86, 125, 103, 229, 104, // .x^....V}g.h + 82, 157, 170, 159, 95, 208, 123, 121, 85, 33, 95, 242, // R..._.{yU!_. + 153, 130, 65, 77, 47, 232, 30, 212, 189, 222, 214, 234, // ..AM/....... + 197, 11, 122, 223, 123, 106, 1, 139, 184, 117, 189, 52, // ..z.{j...u.4 + 141, 118, 78, 188, 138, 162, 46, 79, 195, 102, 50, 165, // .vN....O.f2. + 205, 159, 94, 14, 77, 88, 64, 88, 182, 246, 28, 91, // ..^.MX@X...[ + 51, 135, 198, 18, 198, 15, 98, 25, 52, 176, 88, 180, // 3.....b.4.X. + 108, 191, 132, 22, 141, 69, 11, 239, 151, 158, 183, 197, // l....E...... + 214, 36, 62, 9, 58, 29, 204, 217, 80, 70, 222, 84, // .$>.:...PF.T + 70, 121, 197, 111, 143, 171, 112, 114, 35, 94, 103, 153, // Fy.o..pr#^g. + 183, 115, 12, 199, 143, 197, 176, 211, 113, 103, 97, 20, // .s......qga. + 57, 131, 14, 227, 119, 254, 209, 21, 33, 135, 94, 97, // 9...w...!.^a + 231, 156, 209, 135, 113, 64, 39, 184, 181, 228, 128, 41, // ....q@'....) + 100, 151, 33, 122, 36, 215, 158, 112, 248, 105, 200, 175, // d.!z$..p.i.. + 29, 241, 123, 244, 246, 141, 132, 207, 107, 77, 211, 152, // ..{.....kM.. + 228, 182, 157, 139, 95, 42, 92, 235, 18, 151, 195, 146, // ...._*...... + 232, 177, 236, 246, 80, 84, 192, 84, 85, 219, 213, 193, // ....PT.TU... + 54, 31, 132, 110, 135, 176, 206, 155, 97, 33, 118, 244, // 6..n....a!v. + 176, 43, 196, 246, 132, 26, 240, 126, 162, 223, 203, 208, // .+.....~.... + 25, 168, 90, 125, 178, 74, 37, 54, 69, 12, 217, 117, // ..Z}.J%6E..u + 197, 186, 83, 163, 164, 252, 88, 108, 199, 3, 177, 163, // ..S...Xl.... + 193, 224, 206, 89, 133, 128, 217, 217, 130, 183, 94, 195, // ...Y......^. + 73, 19, 28, 135, 202, 188, 172, 191, 63, 206, 127, 202, // I.......?... + 67, 103, 75, 154, 114, 21, 135, 28, 116, 178, 44, 190, // CgK.r...t.,. + 163, 208, 151, 91, 126, 79, 158, 107, 0, 89, 168, 228, // ...[~O.k.Y.. + 237, 197, 143, 23, 124, 102, 232, 116, 56, 204, 85, 153, // ....|f.t8.U. + 51, 196, 182, 56, 171, 181, 102, 95, 152, 219, 223, 42, // 3..8..f_...* + 204, 109, 45, 76, 236, 220, 99, 225, 108, 32, 130, 13, // .m-L..c.l .. + 9, 114, 83, 9, 114, 187, 47, 200, 61, 97, 254, 189, // .rS.r./.=a.. + 194, 85, 9, 211, 172, 214, 225, 125, 1, 172, 91, 45, // .U.....}..[- + 219, 173, 37, 91, 141, 213, 90, 18, 9, 119, 91, 75, // ..%[..Z..w[K + 34, 197, 38, 16, 193, 184, 245, 30, 33, 203, 182, 232, // ".&.....!... + 30, 221, 46, 32, 227, 119, 213, 11, 171, 90, 209, 186, // ... .w...Z.. + 79, 186, 91, 45, 221, 173, 145, 174, 113, 231, 13, 25, // O.[-....q... + 3, 19, 144, 12, 33, 96, 146, 53, 33, 60, 121, 138, // ....!`.5!.... + 160, 123, 114, 114, 214, 61, 57, 59, 235, 210, 165, 165, // .{rr.=9;.... + 179, 78, 99, 176, 61, 247, 201, 217, 129, 21, 33, 51, // .Nc.=.....!3 + 40, 153, 0, 155, 108, 84, 150, 205, 12, 60, 2, 249, // (...lT...<.. + 49, 39, 236, 232, 68, 229, 78, 183, 50, 221, 20, 23, // 1'..D.N.2... + 174, 45, 176, 173, 13, 6, 211, 67, 6, 212, 234, 230, // .-.....C.... + 141, 161, 53, 26, 162, 221, 3, 86, 6, 152, 226, 20, // ..5....V.... + 141, 147, 210, 205, 54, 83, 90, 26, 173, 163, 91, 86, // ....6SZ...[V + 78, 18, 164, 94, 164, 251, 79, 232, 160, 211, 22, 237, // N..^..O..... + 14, 181, 65, 9, 107, 211, 85, 178, 176, 101, 146, 136, // ..A.k.U..e.. + 61, 28, 131, 131, 72, 246, 70, 243, 88, 240, 105, 61, // =...H.F.X.i= + 223, 63, 221, 132, 200, 212, 195, 5, 28, 90, 44, 87, // .?.......Z,W + 100, 232, 86, 236, 161, 194, 205, 127, 164, 34, 243, 13, // d.V......".. + 87, 100, 248, 54, 110, 187, 99, 246, 196, 121, 89, 225, // Wd.6n.c..yY. + 213, 180, 220, 95, 155, 113, 145, 105, 194, 137, 57, 189, // ..._.q.i..9. + 67, 87, 122, 191, 166, 114, 99, 133, 100, 8, 93, 151, // CWz..rc.d.]. + 97, 158, 235, 218, 198, 193, 171, 195, 61, 97, 233, 9, // a.......=a.. + 33, 226, 5, 154, 49, 19, 49, 232, 148, 168, 44, 19, // !...1.1...,. + 74, 254, 222, 69, 10, 236, 144, 193, 102, 135, 15, 143, // J..E....f... + 96, 198, 124, 117, 145, 66, 250, 167, 143, 85, 40, 136, // `.|u.B...U(. + 124, 173, 20, 135, 142, 223, 30, 41, 41, 84, 74, 87, // |......))TJW + 102, 247, 71, 183, 200, 160, 138, 242, 26, 232, 201, 243, // f.G......... + 129, 206, 198, 198, 47, 6, 3, 118, 66, 20, 71, 129, // ..../..vB.G. + 5, 227, 147, 1, 179, 130, 92, 46, 190, 10, 230, 219, // ............ + 88, 111, 179, 167, 166, 206, 84, 159, 102, 93, 38, 191, // Xo....T.f]&. + 146, 35, 202, 90, 115, 66, 156, 39, 153, 40, 21, 56, // .#.ZsB.'.(.8 + 86, 205, 20, 246, 137, 9, 170, 86, 228, 215, 105, 250, // V......V..i. + 239, 185, 247, 164, 43, 83, 12, 169, 143, 59, 27, 176, // ....+S...;.. + 183, 133, 93, 34, 156, 75, 165, 193, 41, 86, 177, 226, // ..]".K..)V.. + 148, 3, 167, 227, 115, 125, 58, 126, 255, 133, 167, 246, // ....s}:~.... + 111, 189, 208, 84, 17, 250, 224, 77, 38, 251, 64, 153, // o..T...M&.@. + 142, 188, 171, 220, 227, 111, 4, 197, 151, 185, 27, 87, // .....o.....W + 236, 92, 241, 58, 23, 121, 66, 101, 7, 58, 164, 176, // ...:.yBe.:.. + 251, 40, 88, 130, 248, 144, 156, 243, 77, 122, 190, 48, // .(X.....Mz.0 + 170, 113, 153, 67, 6, 171, 76, 81, 95, 146, 175, 152, // .q.C..LQ_... + 198, 194, 180, 101, 85, 90, 24, 186, 75, 78, 209, 200, // ...eUZ..KN.. + 6, 129, 105, 178, 1, 165, 190, 169, 237, 67, 152, 138, // ..i......C.. + 110, 243, 70, 46, 63, 97, 135, 184, 153, 228, 226, 146, // n.F.?a...... + 211, 166, 115, 30, 48, 182, 189, 201, 219, 198, 94, 16, // ..s.0.....^. + 26, 21, 6, 200, 96, 115, 186, 221, 55, 54, 195, 143, // ....`s..76.. + 69, 187, 223, 167, 219, 99, 145, 187, 72, 64, 198, 177, // E....c..H@.. + 185, 149, 198, 228, 180, 171, 145, 153, 44, 47, 228, 29, // ........,/.. + 160, 80, 131, 108, 40, 106, 160, 216, 189, 186, 73, 232, // .P.l(j....I. + 240, 84, 157, 210, 254, 81, 85, 35, 119, 147, 152, 206, // .T...QU#w... + 70, 74, 205, 104, 8, 0, 212, 138, 186, 184, 89, 141, // FJ.h......Y. + 227, 65, 117, 201, 185, 154, 94, 174, 59, 86, 121, 89, // .Au...^.;VyY + 101, 187, 70, 177, 153, 72, 194, 78, 195, 0, 186, 173, // e.F..H.N.... + 232, 166, 94, 150, 75, 170, 112, 89, 119, 239, 245, 159, // ..^.K.pYw... + 177, 160, 230, 94, 63, 219, 118, 187, 155, 50, 130, 251, // ...^?.v..2.. + 45, 252, 30, 249, 189, 9, 152, 222, 196, 128, 224, 155, // -........... + 37, 235, 200, 78, 131, 190, 198, 200, 183, 241, 154, 239, // %..N........ + 2, 129, 1, 124, 5, 121, 4, 52, 21, 173, 76, 131, // ...|.y.4..L. + 204, 145, 129, 169, 158, 41, 234, 241, 101, 217, 122, 10, // .....)..e.z. + 243, 84, 52, 56, 230, 71, 73, 46, 15, 139, 11, 179, // .T48.GI..... + 71, 210, 203, 62, 133, 75, 153, 172, 148, 163, 140, 199, // G..>.K...... + 48, 140, 100, 231, 71, 37, 65, 211, 93, 201, 190, 171, // 0.d.G%A.]... + 77, 123, 13, 186, 47, 188, 70, 113, 186, 130, 51, 100, // M{../.Fq..3d + 21, 165, 223, 50, 32, 142, 246, 82, 150, 221, 136, 246, // ...2 ..R.... + 175, 105, 174, 74, 146, 131, 196, 231, 10, 27, 156, 102, // .i.J.......f + 114, 19, 210, 170, 174, 61, 31, 233, 94, 254, 15, 133, // r....=..^... + 8, 43, 166, 243, 84, 151, 159, 138, 115, 113, 33, 253, // .+..T...sq!. + 85, 38, 187, 226, 7, 108, 129, 31, 227, 104, 135, 22, // U&...l...h.. + 112, 244, 34, 84, 114, 252, 206, 219, 146, 245, 135, 41, // p."Tr......) + 239, 211, 181, 172, 109, 143, 14, 17, 78, 97, 214, 175, // ....m...Na.. + 171, 251, 64, 124, 5, 111, 197, 23, 251, 205, 2, 72, // ..@|.o.....H + 250, 229, 166, 67, 108, 231, 101, 176, 185, 58, 125, 165, // ...Cl.e..:}. + 84, 22, 185, 8, 157, 194, 192, 247, 145, 58, 220, 214, // T........:.. + 170, 254, 118, 38, 126, 93, 241, 117, 113, 6, 164, 187, // ..v&~].uq... + 232, 127, 32, 168, 46, 153, 242, 24, 43, 34, 227, 81, // .. .....+".Q + 170, 59, 153, 136, 234, 248, 213, 21, 127, 34, 243, 47, // .;......."./ + 167, 171, 185, 62, 209, 44, 144, 93, 64, 148, 37, 114, // ...>.,.]@.%r + 222, 154, 224, 30, 205, 242, 230, 192, 248, 110, 89, 251, // .........nY. + 212, 108, 245, 224, 64, 230, 153, 151, 46, 202, 155, 54, // .l..@......6 + 207, 106, 157, 49, 126, 185, 50, 216, 7, 101, 2, 29, // .j.1~.2..e.. + 168, 78, 122, 158, 38, 142, 47, 23, 194, 190, 4, 140, // .Nz.&./..... + 243, 41, 30, 56, 59, 163, 213, 195, 172, 194, 154, 66, // .).8;......B + 215, 37, 221, 90, 14, 99, 170, 34, 67, 107, 159, 89, // .%.Z.c."Ck.Y + 251, 186, 142, 139, 216, 26, 76, 68, 227, 244, 76, 47, // ......LD..L/ + 187, 77, 151, 95, 45, 38, 24, 201, 219, 254, 202, 220, // .M._-&...... + 210, 125, 178, 171, 122, 208, 81, 89, 157, 119, 47, 219, // .}..z.QY.w/. + 54, 29, 148, 197, 144, 253, 168, 142, 20, 147, 111, 45, // 6.........o- + 118, 26, 241, 21, 194, 151, 119, 250, 86, 37, 227, 182, // v.....w.V%.. + 47, 89, 94, 31, 200, 212, 142, 110, 63, 120, 235, 130, // /Y^....n?x.. + 79, 136, 171, 43, 166, 90, 232, 122, 36, 253, 90, 133, // O..+.Z.z$.Z. + 195, 240, 67, 63, 32, 186, 243, 211, 162, 44, 217, 216, // ..C? ....,.. + 191, 38, 170, 224, 35, 10, 224, 122, 47, 90, 19, 204, // .&..#..z/Z.. + 71, 63, 66, 41, 248, 135, 53, 205, 187, 147, 7, 129, // G?B)..5..... + 57, 168, 123, 26, 180, 225, 160, 94, 4, 75, 151, 143, // 9.{....^.K.. + 210, 89, 184, 11, 231, 77, 243, 96, 252, 86, 203, 186, // .Y...M.`.V.. + 48, 73, 219, 147, 104, 41, 79, 87, 11, 115, 202, 62, // 0I..h)OW.s.> + 62, 42, 177, 216, 244, 29, 10, 198, 140, 239, 78, 226, // >*........N. + 40, 241, 130, 202, 247, 233, 31, 7, 58, 11, 7, 81, // (.......:..Q + 26, 242, 174, 106, 87, 209, 41, 39, 68, 252, 127, 231, // ...jW.)'D... + 89, 87, 40, 102, 56, 0, 0, 0 // YW(f8.. }; static const struct packed_file { @@ -1279,11 +1671,12 @@ static const struct packed_file { size_t size; time_t mtime; } packed_files[] = { - {"/web_root/main.js.gz", v1, sizeof(v1), 1675520784}, - {"/web_root/preact.min.js.gz", v2, sizeof(v2), 1675520784}, - {"/web_root/index.html.gz", v3, sizeof(v3), 1675520784}, - {"/web_root/user.png.gz", v4, sizeof(v4), 1675520784}, - {"/web_root/style.css.gz", v5, sizeof(v5), 1675520784}, + {"/web_root/index.html.gz", v1, sizeof(v1), 1681416959}, + {"/web_root/main.js.orig.gz", v2, sizeof(v2), 1681416959}, + {"/web_root/preact.min.js.gz", v3, sizeof(v3), 1681416959}, + {"/web_root/style.css.gz", v4, sizeof(v4), 1681416959}, + {"/web_root/user.png.gz", v5, sizeof(v5), 1681416959}, + {"/web_root/main.js.gz", v6, sizeof(v6), 1681416959}, {NULL, NULL, 0, 0} }; diff --git a/examples/embedded-filesystem/packed_fs.c b/examples/embedded-filesystem/packed_fs.c index eafd9064..138100d1 100644 --- a/examples/embedded-filesystem/packed_fs.c +++ b/examples/embedded-filesystem/packed_fs.c @@ -3,51 +3,552 @@ #include static const unsigned char v1[] = { - 60, 33, 68, 79, 67, 84, 89, 80, 69, 32, 104, 116, // .. < - 104, 101, 97, 100, 62, 10, 32, 32, 32, 32, 60, 109, // head>. . - 32, 32, 32, 32, 60, 109, 101, 116, 97, 32, 104, 116, // . - 32, 32, 32, 32, 60, 109, 101, 116, 97, 32, 104, 116, // . - 32, 32, 60, 109, 101, 116, 97, 32, 110, 97, 109, 101, // . - 32, 32, 32, 32, 32, 32, 32, 60, 116, 105, 116, 108, // Mongoose E - 109, 98, 101, 100, 100, 101, 100, 32, 70, 105, 108, 101, // mbedded File - 115, 121, 116, 101, 109, 32, 101, 120, 97, 109, 112, 108, // sytem exampl - 101, 60, 47, 116, 105, 116, 108, 101, 62, 10, 32, 32, // e. - 32, 32, 60, 108, 105, 110, 107, 32, 114, 101, 108, 61, // . < - 47, 104, 101, 97, 100, 62, 10, 32, 32, 60, 98, 111, // /head>. . - 32, 60, 115, 99, 114, 105, 112, 116, 32, 116, 121, 112, // .< - 47, 104, 116, 109, 108, 62, 10, 0 // /html>. + 31, 139, 8, 8, 219, 27, 244, 98, 0, 3, 112, 114, // .......b..pr + 101, 97, 99, 116, 46, 109, 105, 110, 46, 106, 115, 0, // eact.min.js. + 157, 91, 123, 119, 219, 182, 146, 255, 127, 63, 69, 164, // .[{w.....?E. + 211, 163, 18, 43, 68, 177, 147, 182, 187, 75, 5, 213, // ...+D....K.. + 105, 29, 183, 238, 109, 234, 230, 38, 105, 123, 123, 85, // i...m..&i{{U + 93, 30, 138, 132, 44, 214, 20, 169, 242, 97, 91, 53, // ]...,....a[5 + 245, 221, 247, 55, 3, 128, 164, 108, 185, 247, 236, 158, // ...7...l.... + 36, 34, 30, 131, 1, 48, 47, 204, 12, 144, 155, 176, // $"...0/..... + 120, 166, 101, 38, 3, 89, 201, 92, 22, 178, 150, 169, // x.e&.Y...... + 186, 223, 203, 68, 205, 23, 50, 82, 47, 194, 40, 169, // ...D..2R/.(. + 26, 125, 231, 205, 252, 178, 185, 106, 178, 102, 219, 124, // .}.....j.f.| + 34, 154, 98, 187, 110, 174, 138, 36, 110, 242, 219, 178, // ".b.n..$n... + 217, 100, 81, 147, 85, 183, 77, 146, 233, 121, 180, 94, // .dQ.U.M..y.^ + 52, 127, 230, 121, 243, 175, 188, 136, 155, 164, 210, 69, // 4..y.......E + 248, 34, 153, 174, 234, 44, 170, 146, 60, 123, 86, 122, // ."...,..<{Vz + 152, 72, 220, 175, 242, 194, 187, 193, 172, 193, 179, 36, // .H.........$ + 123, 150, 9, 61, 15, 22, 42, 195, 207, 180, 208, 85, // {..=..*....U + 93, 100, 207, 244, 190, 29, 177, 242, 180, 184, 39, 216, // ]d........'. + 76, 233, 201, 54, 44, 116, 86, 93, 230, 177, 158, 102, // L..6,tV]...f + 163, 81, 54, 41, 244, 38, 191, 209, 103, 235, 36, 141, // .Q6).&..g.$. + 1, 214, 13, 10, 61, 222, 141, 25, 216, 109, 105, 74, // ....=....miJ + 243, 214, 52, 103, 32, 134, 215, 122, 55, 84, 170, 158, // ..4g ..z7T.. + 229, 42, 152, 215, 11, 127, 88, 232, 21, 215, 11, 83, // .*....X....S + 79, 241, 195, 165, 105, 178, 242, 194, 226, 170, 222, 96, // O...i......` + 230, 114, 146, 234, 236, 170, 90, 127, 249, 114, 52, 242, // .r....Z..r4. + 210, 73, 68, 19, 99, 69, 234, 81, 255, 171, 153, 158, // .ID.cE.Q.... + 68, 97, 154, 118, 35, 229, 75, 225, 87, 66, 14, 221, // Da.v#.K.WB.. + 26, 49, 87, 181, 219, 234, 124, 245, 140, 118, 82, 167, // .1W...|..vR. + 233, 64, 101, 147, 88, 175, 194, 58, 173, 222, 21, 249, // .@e.X..:.... + 182, 20, 237, 98, 31, 180, 223, 228, 73, 252, 236, 68, // ...b....I..D + 41, 69, 75, 164, 117, 208, 74, 15, 97, 208, 34, 28, // )EK.u.J.a.". + 45, 183, 160, 69, 202, 124, 165, 89, 122, 68, 218, 130, // -..E.|.YzD.. + 23, 150, 225, 134, 80, 32, 17, 45, 201, 215, 114, 75, // ....P .-..rK + 72, 252, 74, 130, 70, 62, 0, 244, 202, 47, 100, 16, // H.J.F>.../d. + 92, 251, 132, 1, 5, 247, 93, 250, 39, 248, 213, 174, // ......].'... + 26, 251, 102, 105, 40, 70, 174, 109, 109, 10, 81, 158, // ..fi(F.mm.Q. + 149, 85, 81, 71, 85, 94, 116, 64, 55, 220, 71, 52, // .UQGU^t@7.G4 + 31, 143, 3, 191, 222, 187, 21, 59, 106, 220, 100, 96, // .......;j.d` + 52, 177, 153, 11, 94, 42, 100, 218, 173, 126, 77, 114, // 4...^*d..~Mr + 225, 196, 165, 229, 68, 215, 31, 27, 73, 171, 214, 73, // ....D...I..I + 57, 225, 237, 40, 236, 150, 42, 88, 74, 165, 239, 42, // 9..(..*XJ..* + 213, 131, 189, 49, 176, 96, 180, 89, 80, 38, 90, 196, // ...1.`.YP&Z. + 65, 48, 67, 47, 62, 146, 126, 240, 247, 122, 146, 100, // A0C/>.~..z.d + 177, 190, 251, 145, 228, 114, 124, 42, 120, 11, 211, 86, // .....r|*x..V + 158, 167, 217, 107, 205, 64, 70, 14, 166, 217, 120, 44, // ...k.@F...x, + 44, 218, 129, 242, 2, 197, 157, 243, 108, 33, 28, 207, // ,.......l!.. + 9, 165, 118, 211, 113, 197, 82, 225, 136, 160, 232, 9, // ..v.q.R..... + 21, 104, 61, 102, 218, 110, 3, 187, 86, 73, 100, 48, // .h=f.n..VId0 + 237, 230, 211, 60, 95, 59, 23, 85, 34, 163, 124, 84, // ...<_;.U".|T + 52, 189, 209, 100, 25, 150, 90, 49, 151, 50, 117, 242, // 4..d..Z1.2u. + 255, 220, 192, 253, 35, 132, 102, 47, 203, 66, 135, 215, // ....#.f/.B.. + 123, 187, 61, 90, 229, 190, 91, 244, 134, 22, 237, 13, // {.=Z..[..... + 104, 76, 12, 49, 230, 175, 26, 156, 0, 115, 53, 217, // hL.1.....s5. + 214, 37, 49, 120, 52, 26, 92, 161, 185, 24, 143, 155, // .%1x4....... + 166, 24, 40, 150, 242, 101, 14, 4, 250, 189, 6, 23, // ..(..e...... + 138, 36, 187, 2, 140, 231, 21, 71, 123, 154, 38, 23, // .$.....G{.&. + 222, 85, 79, 226, 175, 188, 206, 244, 232, 41, 99, 86, // .UO......)cV + 149, 219, 169, 208, 40, 151, 121, 81, 121, 14, 222, 72, // ....(.yQy..H + 69, 79, 20, 110, 240, 111, 249, 60, 115, 165, 189, 144, // EO.n.o...D....J. + 208, 20, 246, 246, 155, 230, 206, 193, 99, 113, 128, 35, // ........cq.# + 225, 8, 58, 208, 64, 0, 99, 64, 59, 199, 20, 248, // ..:.@.c@;... + 28, 194, 83, 135, 216, 59, 57, 25, 230, 142, 124, 163, // ..S..;9...|. + 209, 48, 51, 229, 211, 133, 128, 11, 2, 250, 227, 104, // .03........h + 167, 168, 100, 155, 134, 145, 246, 94, 156, 133, 91, 176, // ..d....^..[. + 71, 127, 242, 130, 166, 132, 61, 67, 95, 149, 191, 205, // G.....=C_... + 111, 117, 113, 6, 23, 201, 19, 152, 89, 207, 30, 180, // ouq.....Y... + 77, 202, 52, 193, 88, 68, 11, 89, 91, 132, 22, 164, // M.4.XD.Y[... + 176, 163, 248, 69, 16, 195, 181, 121, 54, 46, 16, 158, // ...E...y6... + 200, 96, 86, 53, 13, 4, 47, 142, 207, 111, 32, 139, // .`V5../..o . + 111, 147, 178, 210, 240, 5, 192, 202, 98, 246, 193, 63, // o.......b..? + 135, 152, 192, 54, 153, 40, 233, 41, 128, 86, 1, 134, // ...6.(.).V.. + 113, 152, 93, 233, 34, 175, 203, 116, 247, 65, 87, 223, // q.]."..t.AW. + 101, 128, 187, 248, 248, 195, 91, 50, 134, 198, 59, 206, // e.....[2..;. + 197, 193, 246, 238, 32, 96, 215, 243, 11, 127, 189, 192, // .... `...... + 6, 215, 67, 209, 245, 148, 151, 225, 134, 183, 93, 14, // ..C.......]. + 123, 248, 215, 20, 98, 17, 50, 16, 46, 197, 66, 92, // {...b.2...B. + 25, 108, 216, 184, 114, 21, 46, 191, 35, 255, 218, 213, // .l..r...#... + 99, 248, 54, 105, 30, 198, 182, 206, 220, 210, 162, 42, // c.6i.......* + 118, 247, 15, 5, 53, 152, 90, 101, 217, 71, 97, 21, // v...5.Ze.Ga. + 113, 120, 176, 63, 102, 66, 65, 72, 235, 185, 66, 136, // qx.?fBAH..B. + 6, 167, 3, 214, 249, 97, 216, 99, 106, 209, 50, 213, // .....a.cj.2. + 40, 200, 87, 21, 196, 111, 89, 87, 218, 106, 136, 37, // (.W..oYW.j.% + 104, 175, 89, 244, 253, 218, 115, 154, 154, 67, 141, 116, // h.Y...s..C.t + 110, 92, 246, 241, 224, 116, 225, 101, 19, 77, 28, 152, // n....t.e.M.. + 217, 47, 57, 241, 253, 144, 245, 195, 145, 81, 39, 255, // ./9......Q'. + 118, 20, 29, 203, 189, 176, 93, 38, 50, 50, 90, 183, // v.....]&22Z. + 146, 161, 220, 202, 27, 235, 155, 45, 229, 25, 121, 103, // .......-..yg + 240, 200, 204, 9, 114, 96, 27, 131, 73, 47, 58, 19, // ....r`..I/:. + 189, 24, 108, 106, 232, 68, 254, 220, 26, 180, 138, 76, // ..lj.D.....L + 9, 38, 204, 156, 91, 21, 27, 101, 42, 175, 77, 248, // .&..[..e*.M. + 80, 171, 121, 130, 131, 222, 91, 177, 153, 93, 194, 172, // P.y...[..].. + 145, 146, 77, 153, 89, 108, 2, 30, 115, 227, 156, 229, // ..M.Yl..s... + 138, 252, 31, 227, 45, 157, 41, 140, 62, 119, 49, 218, // ....-.).>w1. + 71, 242, 73, 70, 163, 124, 190, 34, 183, 0, 135, 145, // G.IF.|.".... + 90, 205, 206, 102, 103, 6, 214, 28, 185, 62, 117, 33, // Z..fg....>u! + 70, 165, 197, 68, 179, 43, 133, 19, 141, 86, 100, 214, // F..D.+...Vd. + 26, 145, 255, 172, 66, 252, 156, 251, 222, 16, 163, 170, // ....B....... + 156, 230, 29, 66, 134, 206, 71, 163, 243, 73, 219, 2, // ...B..G..I.. + 142, 82, 208, 48, 51, 67, 67, 149, 233, 91, 176, 113, // .R.03CC..[.q + 41, 239, 132, 239, 245, 219, 98, 110, 147, 97, 159, 98, // ).....bn.a.b + 234, 28, 117, 51, 94, 125, 37, 228, 217, 104, 116, 54, // ..u3^}%..ht6 + 41, 235, 165, 23, 18, 156, 137, 60, 151, 40, 149, 85, // )......<.(.U + 88, 105, 200, 158, 45, 177, 34, 135, 109, 48, 122, 39, // Xi..-.".m0z' + 105, 149, 153, 202, 229, 150, 215, 75, 129, 16, 55, 173, // i......K..7. + 217, 119, 50, 98, 78, 117, 248, 20, 30, 127, 149, 69, // .w2bNu.....E + 228, 220, 164, 243, 201, 149, 174, 222, 32, 240, 185, 209, // ........ ... + 241, 7, 234, 248, 166, 200, 55, 156, 12, 104, 71, 184, // ......7..hG. + 33, 109, 3, 71, 25, 92, 132, 117, 42, 77, 163, 124, // !m.G...u*M.| + 26, 145, 183, 116, 192, 66, 222, 40, 187, 57, 248, 132, // ...t.B.(.9.. + 22, 173, 220, 10, 179, 206, 191, 90, 138, 89, 44, 109, // .......Z.Y,m + 124, 179, 205, 51, 72, 244, 47, 73, 154, 254, 128, 192, // |..3H./I.... + 13, 6, 248, 88, 171, 231, 246, 215, 235, 124, 147, 196, // ...X.....|.. + 237, 8, 80, 200, 248, 142, 71, 250, 69, 123, 128, 252, // ..P...G.E{.. + 251, 117, 45, 161, 8, 55, 79, 44, 239, 189, 142, 52, // .u-..7O,...4 + 198, 88, 200, 191, 232, 52, 210, 49, 8, 141, 83, 230, // .X...4.1..S. + 112, 149, 235, 188, 78, 227, 51, 55, 232, 167, 109, 204, // p...N.37..m. + 60, 24, 156, 42, 245, 84, 175, 163, 52, 208, 53, 77, // <..*.T..4.5M + 192, 65, 160, 98, 137, 190, 17, 247, 143, 132, 202, 200, // .A.b........ + 5, 43, 226, 205, 192, 130, 89, 22, 67, 140, 78, 5, // .+....Y.C.N. + 163, 186, 161, 195, 226, 129, 218, 94, 115, 249, 218, 148, // .......^s... + 39, 176, 194, 231, 33, 236, 102, 63, 140, 213, 54, 46, // '...!.f?..6. + 87, 129, 216, 27, 60, 107, 235, 166, 140, 70, 169, 165, // W...i........ + 117, 155, 249, 75, 196, 194, 174, 156, 164, 71, 155, 51, // u..K.....G.3 + 184, 239, 2, 188, 161, 38, 113, 79, 189, 17, 37, 48, // .....&qO..%0 + 241, 65, 60, 163, 197, 163, 84, 17, 128, 248, 120, 100, // .A<...T...xd + 2, 174, 237, 116, 199, 83, 74, 54, 161, 76, 154, 216, // ...t.SJ6.L.. + 237, 160, 157, 159, 109, 195, 190, 159, 180, 185, 245, 250, // ....m....... + 41, 155, 214, 49, 40, 217, 49, 88, 131, 118, 70, 140, // )..1(.1X.vF. + 227, 246, 236, 221, 89, 231, 64, 110, 16, 163, 176, 215, // ....Y.@n.... + 125, 67, 46, 183, 218, 113, 222, 106, 112, 226, 84, 180, // }C...q.jp.T. + 102, 191, 121, 186, 121, 93, 187, 144, 101, 99, 50, 56, // f.y.y]..ec28 + 136, 109, 235, 249, 134, 67, 189, 146, 60, 40, 136, 232, // .m...C..<(.. + 110, 6, 127, 38, 199, 194, 201, 33, 4, 42, 255, 21, // n..&...!.*.. + 194, 226, 9, 165, 115, 249, 108, 23, 216, 129, 42, 37, // ....s.l...*% + 141, 50, 177, 146, 201, 57, 244, 18, 177, 157, 245, 86, // .2...9.....V + 59, 231, 155, 196, 121, 196, 57, 245, 73, 4, 232, 74, // ;...y.9.I..J + 147, 247, 79, 65, 152, 23, 139, 105, 166, 138, 217, 131, // ..OA...i.... + 110, 155, 20, 187, 252, 0, 7, 180, 170, 182, 254, 139, // n........... + 23, 183, 183, 183, 147, 219, 87, 147, 188, 184, 122, 241, // ......W...z. + 242, 228, 228, 228, 5, 237, 19, 234, 226, 31, 31, 232, // ............ + 237, 100, 12, 69, 24, 141, 98, 23, 209, 201, 136, 100, // .d.E..b....d + 181, 191, 176, 53, 126, 99, 196, 69, 196, 107, 168, 95, // ...5~c.E.k._ + 104, 170, 158, 173, 196, 221, 65, 84, 147, 92, 91, 78, // h.....AT..[N + 102, 70, 231, 104, 233, 37, 116, 64, 121, 45, 83, 154, // fF.h.%t@y-S. + 38, 21, 147, 39, 188, 113, 56, 8, 241, 147, 125, 131, // &..'.q8...}. + 168, 37, 152, 227, 211, 154, 174, 114, 136, 163, 155, 215, // .%.....r.... + 217, 36, 116, 46, 107, 217, 103, 221, 122, 222, 239, 1, // .$t.k.g.z... + 47, 38, 25, 184, 69, 119, 10, 135, 173, 236, 112, 77, // /&..Ew....pM + 61, 216, 166, 144, 120, 188, 37, 85, 30, 141, 182, 36, // =...x.%U...$ + 179, 213, 198, 250, 39, 84, 106, 154, 174, 13, 72, 18, // ....'Tj...H. + 183, 60, 193, 36, 105, 171, 106, 219, 13, 134, 7, 142, // .<.$i.j..... + 8, 137, 104, 218, 79, 190, 30, 134, 145, 180, 155, 194, // ..h.O....... + 94, 222, 56, 107, 69, 242, 137, 88, 220, 94, 230, 112, // ^.8kE..X.^.p + 88, 206, 55, 38, 77, 67, 113, 168, 185, 242, 64, 252, // X.7&MCq...@. + 86, 44, 160, 159, 29, 130, 76, 228, 20, 118, 56, 111, // V,....L..v8o + 180, 13, 109, 51, 0, 2, 217, 211, 200, 135, 76, 2, // ..m3......L. + 87, 137, 214, 58, 186, 214, 177, 173, 210, 44, 28, 55, // W..:.....,.7 + 16, 14, 59, 59, 77, 108, 103, 223, 67, 29, 99, 185, // ..;;Mlg.C.c. + 70, 43, 172, 230, 86, 184, 100, 104, 27, 29, 109, 156, // F+..V.dh..m. + 30, 182, 150, 24, 118, 56, 147, 143, 50, 145, 27, 31, // ....v8..2... + 172, 112, 138, 109, 130, 39, 157, 92, 101, 63, 46, 127, // .p.m.'..e?.. + 215, 17, 71, 84, 59, 214, 246, 122, 86, 35, 152, 241, // ..GT;..zV#.. + 43, 147, 9, 163, 60, 16, 244, 55, 58, 84, 225, 141, // +...<..7:T.. + 234, 52, 184, 203, 62, 145, 50, 146, 161, 100, 85, 158, // .4..>.2..dU. + 194, 44, 122, 118, 215, 32, 92, 12, 84, 46, 108, 192, // .,zv. ..T.l. + 240, 216, 136, 4, 9, 195, 134, 147, 44, 92, 5, 101, // ........,..e + 176, 145, 171, 66, 151, 165, 53, 31, 131, 13, 64, 46, // ...B..5...@. + 176, 27, 139, 9, 49, 201, 218, 192, 74, 242, 79, 90, // ....1...J.OZ + 66, 30, 155, 193, 246, 81, 234, 146, 167, 176, 117, 139, // B....Q....u. + 207, 141, 100, 140, 182, 66, 56, 197, 254, 113, 162, 232, // ..d..B8..q.. + 163, 181, 211, 108, 113, 143, 93, 175, 204, 180, 199, 225, // ...lq.]..... + 93, 84, 23, 148, 216, 81, 193, 99, 59, 123, 96, 229, // ]T...Q.c;{`. + 127, 114, 8, 237, 45, 35, 223, 188, 76, 234, 108, 99, // .r..-#..L.lc + 156, 211, 182, 8, 4, 146, 83, 97, 38, 59, 234, 229, // ......Sa&;.. + 110, 6, 132, 54, 174, 72, 25, 36, 154, 163, 105, 62, // n..6.H.$..i> + 82, 10, 140, 197, 182, 77, 129, 218, 60, 90, 100, 18, // R....M.......| + 163, 48, 87, 7, 57, 241, 128, 239, 43, 140, 99, 193, // .0W.9...+.c. + 151, 222, 239, 160, 46, 129, 242, 6, 208, 175, 28, 29, // ............ + 130, 117, 53, 244, 214, 134, 47, 243, 0, 17, 89, 77, // .u5.../...YM + 121, 240, 180, 187, 132, 169, 30, 93, 194, 240, 232, 217, // y......].... + 60, 95, 248, 181, 153, 170, 154, 172, 146, 162, 52, 190, // <_........4. + 158, 187, 30, 174, 250, 103, 128, 185, 167, 73, 236, 200, // .....g...I.. + 28, 227, 106, 162, 213, 193, 64, 74, 252, 189, 241, 146, // ..j...@J.... + 3, 50, 124, 99, 46, 170, 248, 2, 82, 221, 243, 229, // .2|c....R... + 171, 26, 226, 115, 54, 28, 215, 227, 49, 221, 215, 106, // ...s6...1..j + 9, 231, 178, 196, 225, 86, 248, 79, 92, 110, 57, 163, // .....V.O.n9. + 227, 101, 98, 47, 17, 204, 220, 36, 241, 1, 176, 69, // .eb/...$...E + 47, 171, 105, 159, 53, 15, 92, 87, 216, 10, 119, 129, // /.i.5..W..w. + 133, 240, 150, 242, 51, 4, 37, 143, 129, 170, 158, 31, // ....3.%..... + 239, 48, 238, 13, 228, 209, 136, 72, 245, 151, 210, 93, // .0.....H...] + 234, 26, 43, 194, 202, 195, 37, 114, 26, 217, 115, 66, // ..+...%r..sB + 8, 96, 177, 213, 203, 131, 177, 129, 187, 91, 156, 186, // .`.......[.. + 71, 5, 199, 84, 102, 122, 188, 185, 191, 106, 76, 180, // G..Tfz...jL. + 229, 252, 92, 208, 187, 17, 150, 48, 103, 252, 50, 129, // .......0g.2. + 185, 75, 215, 157, 36, 240, 237, 237, 116, 123, 197, 29, // .K..$...t{.. + 76, 28, 141, 57, 186, 154, 56, 246, 244, 51, 31, 176, // L..9..8..3.. + 63, 112, 65, 77, 18, 80, 102, 196, 88, 253, 128, 123, // ?pAM.Pf.X..{ + 237, 181, 51, 105, 193, 52, 227, 88, 102, 202, 158, 88, // ..3i.4.Xf..X + 192, 229, 136, 46, 80, 233, 164, 97, 227, 64, 237, 213, // ....P..a.@.. + 131, 108, 143, 139, 82, 171, 99, 161, 241, 121, 81, 228, // .l..R.c..yQ. + 5, 59, 195, 37, 162, 12, 106, 245, 158, 134, 195, 102, // .;.%..j....f + 133, 204, 205, 253, 131, 179, 91, 193, 65, 128, 118, 70, // ......[.A.vF + 54, 136, 209, 61, 106, 37, 202, 181, 99, 243, 254, 117, // 6..=j%..c..u + 248, 121, 107, 133, 177, 95, 173, 178, 125, 181, 46, 242, // .yk.._..}... + 91, 4, 155, 123, 104, 232, 9, 60, 179, 46, 135, 227, // [..{h..<.... + 22, 169, 14, 137, 100, 238, 229, 3, 27, 9, 177, 76, // ....d......L + 112, 26, 197, 149, 72, 121, 89, 80, 104, 236, 204, 181, // p...HyYPh... + 250, 174, 96, 146, 36, 29, 196, 209, 235, 39, 142, 147, // ..`.$....'.. + 149, 54, 65, 29, 226, 200, 78, 64, 65, 20, 116, 150, // .6A...N@A.t. + 198, 251, 183, 215, 240, 237, 220, 20, 166, 103, 109, 205, // .........gm. + 6, 184, 153, 144, 27, 143, 154, 112, 136, 29, 236, 15, // .......p.... + 220, 142, 244, 83, 218, 96, 144, 217, 162, 166, 236, 145, // ...S.`...... + 126, 136, 88, 63, 133, 216, 38, 175, 214, 230, 54, 59, // ~.X?..&...6; + 63, 102, 46, 33, 173, 155, 164, 212, 51, 251, 237, 13, // ?f.!....3... + 174, 214, 58, 155, 44, 161, 1, 158, 235, 195, 193, 159, // ..:.,....... + 167, 55, 26, 113, 172, 15, 150, 124, 76, 54, 58, 175, // .7.q...|L6:. + 43, 105, 110, 219, 79, 96, 144, 79, 88, 243, 222, 202, // +in.O`.OX... + 75, 249, 139, 124, 143, 150, 239, 104, 214, 31, 77, 206, // K..|...h..M. + 80, 254, 108, 2, 114, 249, 71, 27, 181, 201, 175, 141, // P.l.r.G..... + 44, 203, 79, 84, 123, 162, 118, 15, 138, 126, 239, 34, // ,.OT{.v..~." + 173, 181, 177, 251, 107, 239, 82, 106, 249, 30, 14, 153, // ....k.Rj.... + 32, 244, 60, 89, 165, 46, 209, 115, 1, 251, 196, 95, // ..!.....m. + 15, 231, 22, 225, 143, 241, 161, 219, 51, 136, 146, 154, // ........3... + 237, 176, 146, 195, 16, 134, 160, 231, 74, 18, 93, 88, // ........J.]X + 167, 169, 242, 88, 109, 146, 160, 4, 68, 65, 93, 127, // ...Xm...DA]. + 14, 199, 25, 230, 26, 220, 73, 56, 226, 67, 89, 208, // ......I8.CY. + 79, 173, 232, 72, 74, 15, 160, 233, 246, 144, 159, 193, // O..HJ....... + 0, 95, 174, 242, 238, 237, 197, 191, 126, 43, 255, 243, // ._......~+.. + 183, 12, 63, 141, 43, 124, 242, 226, 138, 31, 160, 136, // ..?.+|...... + 89, 109, 54, 141, 224, 0, 81, 22, 229, 226, 29, 138, // Ym6...Q..... + 92, 204, 60, 219, 249, 138, 59, 177, 130, 151, 194, 127, // ..<...;..... + 105, 32, 134, 147, 201, 132, 82, 121, 57, 84, 196, 225, // i ....Ry9T.. + 248, 12, 96, 39, 45, 4, 122, 6, 109, 215, 231, 242, // ..`'-.z.m... + 68, 194, 71, 192, 12, 213, 151, 234, 115, 122, 159, 155, // D.G.....sz.. + 55, 205, 0, 166, 145, 88, 95, 145, 163, 99, 1, 43, // 7....X_..c.+ + 0, 230, 28, 47, 169, 47, 56, 78, 234, 58, 128, 220, // ..././8N.:.. + 117, 8, 166, 196, 158, 159, 78, 37, 175, 117, 247, 78, // u.....N%.u.N + 138, 222, 54, 210, 97, 97, 150, 144, 66, 33, 83, 47, // ..6.aa..B!S/ + 17, 162, 21, 241, 8, 3, 162, 215, 122, 158, 44, 220, // ........z.,. + 152, 8, 99, 16, 242, 163, 101, 14, 167, 135, 7, 206, // ..c...e..... + 134, 175, 249, 185, 199, 204, 35, 4, 160, 116, 13, 215, // ......#..t.. + 88, 189, 18, 126, 62, 86, 25, 75, 52, 64, 158, 63, // X..~>V.K4@.? + 183, 219, 31, 126, 105, 129, 29, 131, 0, 167, 178, 113, // ...~i......q + 78, 185, 214, 98, 150, 81, 38, 120, 70, 44, 51, 163, // N..b.Q&xF,3. + 63, 29, 126, 106, 238, 65, 134, 159, 154, 97, 5, 26, // ?.~j.A...a.. + 91, 20, 52, 31, 208, 128, 74, 244, 216, 79, 181, 136, // [.4...J..O.. + 63, 135, 205, 205, 45, 242, 225, 11, 110, 38, 167, 248, // ?...-...n&.. + 245, 231, 192, 195, 99, 205, 250, 199, 244, 62, 133, 145, // ....c....>.. + 56, 62, 214, 138, 114, 190, 132, 180, 150, 174, 98, 232, // 8>..r.....b. + 249, 18, 212, 172, 168, 3, 28, 27, 62, 27, 218, 69, // ........>..E + 253, 86, 181, 165, 172, 45, 21, 7, 171, 123, 105, 232, // .V...-...{i. + 208, 206, 49, 28, 180, 164, 192, 74, 63, 147, 118, 22, // ..1....J?.v. + 167, 67, 76, 194, 61, 167, 2, 48, 166, 251, 191, 15, // .CL.=..0.... + 56, 74, 132, 251, 175, 17, 167, 179, 204, 39, 189, 220, // 8J.......'.. + 155, 168, 49, 20, 83, 125, 183, 205, 139, 234, 62, 124, // ..1.S}....>| + 22, 150, 207, 214, 208, 60, 254, 86, 155, 84, 254, 64, // .....<.V.T.@ + 37, 19, 157, 202, 152, 202, 109, 82, 72, 126, 67, 85, // %.....mRH~CU + 115, 79, 99, 51, 74, 242, 91, 106, 130, 91, 201, 81, // sOc3J.[j.[.Q + 142, 252, 211, 214, 222, 235, 184, 142, 48, 254, 111, 182, // ........0.o. + 126, 14, 239, 36, 170, 228, 247, 182, 250, 54, 220, 225, // ~..$.....6.. + 252, 182, 141, 127, 111, 199, 172, 228, 63, 108, 249, 187, // ....o...?l.. + 205, 86, 23, 56, 84, 110, 244, 69, 152, 197, 169, 150, // .V.8Tn.E.... + 191, 218, 142, 31, 244, 38, 151, 255, 180, 149, 179, 48, // .....&.....0 + 77, 151, 97, 116, 45, 181, 118, 45, 118, 85, 153, 107, // M.at-.v-vU.k + 232, 188, 93, 25, 184, 54, 206, 156, 124, 141, 179, 51, // ..]..6..|..3 + 14, 139, 221, 126, 250, 31, 255, 11, 22, 19, 178, 116, // ...~.......t + 138, 51, 0, 0, 0 // .3.. }; static const unsigned char v2[] = { + 31, 139, 8, 8, 219, 27, 244, 98, 0, 3, 109, 97, // .......b..ma + 105, 110, 46, 106, 115, 0, 165, 86, 237, 110, 219, 54, // in.js..V.n.6 + 20, 253, 239, 167, 184, 8, 6, 52, 65, 109, 41, 77, // .......4Am)M + 246, 1, 52, 138, 1, 55, 93, 129, 20, 93, 61, 204, // ..4..7]..]=. + 233, 218, 254, 43, 37, 210, 22, 91, 138, 84, 249, 97, // ...+%..[.T.a + 205, 11, 242, 46, 125, 150, 62, 217, 14, 37, 217, 177, // ....}.>..%.. + 19, 103, 195, 218, 95, 166, 36, 222, 123, 15, 207, 185, // .g.._.$.{... + 247, 208, 143, 130, 19, 228, 188, 149, 133, 127, 116, 54, // ..........t6 + 144, 85, 109, 172, 167, 107, 42, 135, 84, 250, 74, 13, // .Um..k*.T.J. + 201, 10, 205, 133, 165, 27, 154, 91, 83, 209, 163, 36, // .......[S..$ + 173, 173, 96, 133, 79, 42, 169, 147, 143, 14, 33, 131, // ..`.O*....!. + 65, 97, 180, 243, 244, 142, 206, 105, 30, 116, 225, 165, // Aa.....i.t.. + 209, 116, 120, 68, 215, 131, 1, 33, 218, 7, 171, 219, // .txD...!.... + 84, 31, 240, 152, 113, 185, 164, 66, 49, 231, 206, 15, // T...q..B1... + 16, 229, 153, 212, 194, 30, 140, 241, 5, 223, 202, 147, // ............ + 245, 39, 39, 218, 44, 7, 227, 201, 179, 233, 155, 43, // .''.,......+ + 122, 51, 203, 210, 242, 164, 223, 181, 149, 193, 154, 166, // z3.......... + 143, 189, 155, 89, 141, 126, 217, 124, 193, 183, 122, 220, // ...Y.~.|..z. + 45, 54, 111, 136, 46, 132, 99, 168, 79, 51, 51, 247, // -6o...c.O33. + 13, 179, 130, 94, 121, 158, 144, 116, 84, 10, 198, 63, // ...^y..tT..? + 7, 102, 189, 176, 130, 127, 253, 34, 53, 61, 15, 185, // .f....."5=.. + 146, 122, 72, 127, 136, 58, 174, 10, 50, 115, 186, 180, // .zH..:..2s.. + 66, 49, 205, 147, 219, 26, 105, 189, 83, 112, 231, 121, // B1....i.Sp.y + 26, 44, 40, 54, 118, 69, 214, 24, 239, 40, 103, 197, // .,(6vE...(g. + 39, 242, 134, 78, 142, 143, 127, 28, 82, 83, 10, 77, // '..N....RS.M + 191, 25, 189, 48, 6, 82, 188, 21, 57, 205, 132, 93, // ...0.R..9..] + 130, 243, 87, 50, 183, 204, 174, 190, 126, 225, 98, 41, // ..W2....~.b) + 148, 169, 43, 161, 61, 242, 68, 108, 192, 154, 229, 118, // ..+.=.Dl...v + 60, 216, 148, 152, 184, 189, 41, 22, 86, 52, 132, 51, // <.....).V4.3 + 212, 166, 14, 138, 89, 233, 87, 4, 216, 84, 49, 200, // ....Y.W..T1. + 34, 56, 153, 184, 199, 151, 130, 230, 70, 41, 211, 72, // "8......F).H + 189, 160, 149, 96, 214, 13, 99, 204, 201, 241, 147, 211, // ...`..c..... + 13, 79, 13, 115, 36, 80, 27, 4, 184, 18, 145, 64, // .O.s$P.....@ + 31, 5, 148, 58, 8, 146, 56, 210, 54, 196, 88, 97, // ...:..8.6.Xa + 3, 172, 182, 102, 41, 57, 90, 44, 212, 109, 107, 33, // ...f)9Z,.mk! + 208, 128, 142, 37, 83, 1, 105, 138, 0, 94, 42, 97, // ...%S.i..^*a + 221, 195, 76, 190, 21, 20, 245, 65, 158, 208, 150, 45, // ..L....A...- + 217, 18, 111, 42, 28, 182, 77, 180, 201, 128, 67, 233, // ..o*..M...C. + 21, 101, 114, 252, 2, 101, 130, 22, 244, 211, 241, 113, // .er..e.....q + 150, 202, 49, 112, 86, 53, 211, 82, 56, 194, 25, 26, // ..1pV5.R8... + 161, 84, 252, 173, 4, 151, 161, 106, 161, 186, 138, 225, // .T.....j.... + 157, 147, 127, 11, 202, 131, 67, 71, 58, 39, 182, 240, // ......CG:'.. + 16, 184, 44, 194, 134, 58, 244, 134, 138, 107, 52, 65, // ..,..:...k4A + 44, 239, 140, 10, 177, 87, 93, 236, 29, 70, 53, 179, // ,....W]..F5. + 128, 22, 64, 194, 220, 88, 10, 174, 13, 105, 9, 198, // ..@..X...i.. + 204, 96, 193, 252, 94, 153, 16, 139, 49, 228, 148, 175, // .`..^...1... + 232, 245, 100, 54, 33, 150, 27, 102, 187, 192, 75, 141, // ..d6!..f..K. + 78, 212, 44, 214, 96, 138, 102, 53, 43, 4, 205, 124, // N.,.`.f5+..| + 251, 28, 195, 182, 96, 198, 221, 57, 52, 138, 194, 204, // ....`..94... + 165, 173, 186, 61, 96, 76, 250, 100, 135, 212, 150, 214, // ...=`L.d.... + 153, 212, 200, 20, 53, 30, 110, 68, 46, 163, 200, 127, // ....5.nD.... + 129, 44, 14, 44, 81, 85, 144, 206, 3, 128, 71, 229, // .,.,QU....G. + 208, 34, 210, 36, 64, 189, 214, 186, 61, 27, 151, 209, // .".$@...=... + 59, 242, 224, 5, 137, 42, 23, 60, 70, 186, 245, 76, // ;....*.4..`.z + 17, 96, 1, 163, 198, 148, 99, 119, 95, 227, 150, 170, // .`....cw_... + 238, 196, 194, 71, 138, 175, 74, 244, 164, 235, 224, 175, // ...G..J..... + 39, 61, 197, 168, 247, 102, 176, 94, 246, 139, 15, 103, // '=...f.^...g + 131, 155, 179, 181, 31, 189, 255, 110, 63, 58, 189, 239, // .......n?:.. + 71, 155, 182, 187, 69, 109, 197, 83, 216, 211, 233, 55, // G...Em.S...7 + 219, 83, 22, 212, 150, 52, 153, 146, 219, 66, 81, 6, // .S...4...BQ. + 85, 172, 152, 159, 31, 148, 222, 215, 238, 105, 154, 86, // U........i.V + 125, 251, 36, 141, 75, 15, 198, 123, 154, 41, 75, 217, // }.$.K..{.)K. + 78, 134, 17, 136, 189, 213, 166, 193, 62, 215, 53, 93, // N.......>.5] + 228, 27, 52, 55, 198, 126, 138, 131, 175, 58, 183, 217, // ..47.~...:.. + 130, 146, 238, 96, 249, 79, 100, 75, 48, 152, 72, 3, // ...`.OdK0.H. + 84, 127, 94, 76, 95, 99, 117, 31, 201, 196, 242, 32, // T.^L_cu.... + 181, 25, 181, 35, 233, 101, 174, 208, 177, 177, 211, 93, // ...#.e.....] + 215, 29, 121, 144, 202, 143, 96, 61, 177, 125, 219, 166, // ..y...`=.}.. + 153, 94, 77, 40, 212, 156, 121, 225, 182, 51, 117, 30, // .^M(..y..3u. + 166, 217, 66, 180, 134, 195, 153, 43, 219, 60, 223, 14, // ..B....+.<.. + 190, 138, 57, 18, 208, 1, 248, 213, 243, 126, 189, 151, // ..9......~.. + 74, 152, 5, 32, 142, 12, 28, 230, 210, 92, 209, 239, // J.. ........ + 138, 97, 52, 108, 245, 29, 165, 123, 13, 71, 198, 37, // .a4l...{.G.% + 32, 102, 75, 212, 233, 108, 47, 2, 83, 11, 11, 246, // fK..l/.S... + 160, 153, 91, 57, 47, 170, 214, 107, 96, 223, 163, 218, // ..[9/..k`... + 52, 208, 181, 146, 133, 53, 177, 155, 45, 76, 29, 198, // 4....5..-L.. + 120, 23, 217, 255, 128, 182, 128, 42, 33, 143, 168, 210, // x......*!... + 162, 243, 136, 180, 250, 232, 192, 208, 203, 253, 200, 54, // ...........6 + 109, 246, 146, 45, 217, 172, 176, 178, 246, 36, 244, 2, // m..-.....$.. + 83, 213, 98, 188, 72, 47, 30, 63, 126, 128, 168, 44, // S.b.H/.?~.., + 189, 157, 131, 173, 17, 191, 63, 58, 63, 239, 222, 236, // ......?:?... + 89, 62, 158, 238, 248, 112, 55, 144, 249, 238, 13, 188, // Y>...p7..... + 59, 100, 237, 193, 37, 108, 102, 1, 30, 163, 213, 105, // ;d..%lf....i + 184, 164, 47, 77, 192, 17, 209, 139, 240, 29, 156, 24, // ../M........ + 119, 74, 33, 97, 185, 235, 73, 191, 35, 107, 155, 131, // wJ!a..I.#k.. + 139, 90, 153, 85, 119, 29, 150, 65, 115, 220, 169, 109, // .Z.Uw..As..m + 120, 37, 149, 106, 193, 192, 42, 37, 152, 107, 175, 224, // x%.j..*%.k.. + 46, 79, 116, 35, 161, 151, 210, 26, 29, 123, 247, 78, // .Ot#.....{.N + 218, 7, 88, 248, 87, 163, 155, 212, 245, 142, 213, 161, // ..X.W....... + 80, 237, 246, 249, 93, 86, 62, 25, 63, 99, 14, 255, // P...]V>.?c.. + 96, 126, 93, 235, 244, 66, 42, 209, 55, 17, 23, 21, // `~]..B*.7... + 38, 22, 91, 6, 89, 95, 236, 135, 235, 242, 240, 221, // &.[.Y_...... + 209, 205, 160, 47, 186, 253, 250, 253, 230, 117, 15, 5, // .../.....u.. + 255, 29, 184, 105, 18, 163, 149, 97, 28, 112, 96, 184, // ...i...a.p`. + 231, 227, 254, 207, 227, 97, 121, 8, 140, 71, 67, 226, // .....ay..GC. + 112, 255, 120, 232, 36, 55, 124, 117, 116, 54, 248, 7, // p.x.$7|ut6.. + 71, 33, 75, 134, 124, 10, 0, 0, 0 // G!K.|... +}; +static const unsigned char v3[] = { 39, 117, 115, 101, 32, 115, 116, 114, 105, 99, 116, 39, // 'use strict' 59, 10, 105, 109, 112, 111, 114, 116, 32, 123, 32, 104, // ;.import { h 44, 32, 104, 116, 109, 108, 44, 32, 114, 101, 110, 100, // , html, rend @@ -273,7 +774,7 @@ static const unsigned char v2[] = { 112, 41, 44, 32, 100, 111, 99, 117, 109, 101, 110, 116, // p), document 46, 98, 111, 100, 121, 41, 59, 10, 0 // .body);. }; -static const unsigned char v3[] = { +static const unsigned char v4[] = { 118, 97, 114, 32, 101, 44, 110, 44, 95, 44, 116, 44, // var e,n,_,t, 111, 44, 114, 44, 117, 44, 108, 61, 123, 125, 44, 105, // o,r,u,l={},i 61, 91, 93, 44, 99, 61, 47, 97, 99, 105, 116, 124, // =[],c=/acit| @@ -1375,7 +1876,147 @@ static const unsigned char v3[] = { 115, 101, 69, 114, 114, 111, 114, 66, 111, 117, 110, 100, // seErrorBound 97, 114, 121, 125, 59, 10, 0 // ary};. }; -static const unsigned char v4[] = { +static const unsigned char v5[] = { + 60, 33, 68, 79, 67, 84, 89, 80, 69, 32, 104, 116, // .. < + 104, 101, 97, 100, 62, 10, 32, 32, 32, 32, 60, 109, // head>. . + 32, 32, 32, 32, 60, 109, 101, 116, 97, 32, 104, 116, // . + 32, 32, 32, 32, 60, 109, 101, 116, 97, 32, 104, 116, // . + 32, 32, 60, 109, 101, 116, 97, 32, 110, 97, 109, 101, // . + 32, 32, 32, 32, 32, 32, 32, 60, 116, 105, 116, 108, // Mongoose E + 109, 98, 101, 100, 100, 101, 100, 32, 70, 105, 108, 101, // mbedded File + 115, 121, 116, 101, 109, 32, 101, 120, 97, 109, 112, 108, // sytem exampl + 101, 60, 47, 116, 105, 116, 108, 101, 62, 10, 32, 32, // e. + 32, 32, 60, 108, 105, 110, 107, 32, 114, 101, 108, 61, // . < + 47, 104, 101, 97, 100, 62, 10, 32, 32, 60, 98, 111, // /head>. . + 32, 60, 115, 99, 114, 105, 112, 116, 32, 116, 121, 112, // .< + 47, 104, 116, 109, 108, 62, 10, 0 // /html>. +}; +static const unsigned char v6[] = { + 31, 139, 8, 8, 219, 27, 244, 98, 0, 3, 105, 110, // .......b..in + 100, 101, 120, 46, 104, 116, 109, 108, 0, 141, 145, 77, // dex.html...M + 75, 3, 49, 16, 134, 239, 253, 21, 99, 206, 166, 139, // K.1.....c... + 55, 193, 205, 130, 212, 22, 60, 136, 30, 90, 208, 99, // 7.....<..Z.c + 154, 140, 205, 104, 62, 214, 205, 244, 99, 255, 189, 217, // ...h>...c... + 110, 133, 5, 17, 60, 205, 7, 47, 15, 51, 239, 91, // n...<../.3.[ + 95, 61, 60, 47, 214, 111, 47, 75, 112, 28, 124, 51, // _= + 82, 102, 53, 76, 247, 11, 203, 208, 90, 0, 251, 237, // Rf5L....Z... + 44, 132, 66, 114, 251, 230, 89, 9, 61, 233, 201, 42, // ,.Br..Y.=..* + 183, 139, 233, 148, 178, 71, 132, 89, 141, 14, 229, 150, // .....G.Y.... + 43, 52, 53, 74, 74, 210, 220, 120, 102, 26, 108, 67, // +45JJ..xf.lC + 113, 20, 29, 155, 158, 228, 107, 39, 196, 72, 139, 175, // q.....k'.H.. + 229, 176, 44, 105, 5, 92, 16, 56, 175, 225, 222, 199, // ..,i...8.... + 148, 55, 108, 148, 26, 28, 237, 6, 246, 244, 248, 163, // .7l......... + 119, 163, 171, 55, 18, 98, 60, 203, 192, 102, 80, 68, // w..7.b<..fPD + 241, 40, 117, 42, 213, 89, 211, 30, 17, 231, 35, 202, // .(u*.Y....#. + 157, 120, 255, 186, 46, 46, 234, 1, 157, 57, 188, 87, // .x.......9.W + 152, 65, 59, 139, 38, 160, 69, 34, 203, 208, 187, 220, // .A;.&.E".... + 177, 91, 79, 69, 102, 220, 185, 35, 62, 81, 226, 29, // .[OEf..#>Q.. + 238, 219, 24, 60, 217, 220, 155, 41, 208, 149, 141, 51, // ...<...)...3 + 90, 213, 243, 6, 173, 205, 168, 69, 107, 166, 127, 148, // Z......Ek... + 65, 88, 220, 35, 247, 7, 165, 252, 240, 160, 60, 185, // AX.#......<. + 232, 80, 51, 209, 131, 236, 35, 212, 149, 30, 106, 45, // .P3...#...j- + 253, 219, 210, 208, 245, 125, 178, 133, 33, 233, 70, 121, // .....}..!.Fy + 159, 163, 224, 79, 197, 234, 241, 158, 252, 212, 72, 197, // ...O......H. + 253, 163, 83, 224, 124, 43, 172, 251, 77, 28, 193, 21, // ..S.|+..M... + 153, 105, 70, 139, 127, 126, 63, 170, 87, 208, 173, 192, // .iF..~?.W... + 235, 43, 152, 6, 241, 73, 150, 59, 221, 6, 55, 13, // .+...I.;..7. + 87, 231, 148, 200, 66, 98, 151, 165, 155, 77, 148, 90, // W...Bb...M.Z + 135, 212, 115, 145, 22, 69, 72, 237, 66, 102, 91, 134, // ..s..EH.Bf[. + 240, 115, 8, 111, 54, 139, 90, 219, 144, 41, 159, 23, // .s.o6.Z..).. + 165, 54, 81, 38, 154, 171, 12, 225, 167, 229, 88, 79, // .6Q&......XO + 33, 83, 44, 167, 42, 66, 38, 143, 166, 138, 87, 95, // !S,.*B&...W_ + 78, 21, 237, 62, 15, 245, 163, 3, 198, 41, 249, 22, // N..>.....).. + 221, 74, 89, 145, 225, 105, 252, 142, 224, 15, 15, 235, // .JY..i...... + 64, 244, 132, 205, 183, 254, 228, 94, 227, 82, 244, 50, // @......^.R.2 + 95, 112, 249, 84, 201, 201, 61, 74, 185, 212, 5, 63, // _p.T..=J...? + 252, 15, 225, 232, 67, 124, 39, 7, 0, 0, 0 // ....C|'... +}; +static const unsigned char v8[] = { 42, 32, 123, 32, 98, 111, 120, 45, 115, 105, 122, 105, // * { box-sizi 110, 103, 58, 32, 98, 111, 114, 100, 101, 114, 45, 98, // ng: border-b 111, 120, 59, 32, 125, 10, 104, 116, 109, 108, 44, 32, // ox; }.html, @@ -1537,10 +2178,14 @@ static const struct packed_file { size_t size; time_t mtime; } packed_files[] = { - {"/web_root/index.html", v1, sizeof(v1), 1660216320}, - {"/web_root/main.js", v2, sizeof(v2), 1660216320}, - {"/web_root/preact.min.js", v3, sizeof(v3), 1660216320}, - {"/web_root/style.css", v4, sizeof(v4), 1660216320}, + {"/web_root/preact.min.js.gz", v1, sizeof(v1), 1660165083}, + {"/web_root/main.js.gz", v2, sizeof(v2), 1660165083}, + {"/web_root/main.js", v3, sizeof(v3), 1660586478}, + {"/web_root/preact.min.js", v4, sizeof(v4), 1660586478}, + {"/web_root/index.html", v5, sizeof(v5), 1660586478}, + {"/web_root/index.html.gz", v6, sizeof(v6), 1660165083}, + {"/web_root/style.css.gz", v7, sizeof(v7), 1660165083}, + {"/web_root/style.css", v8, sizeof(v8), 1660586478}, {NULL, NULL, 0, 0} }; diff --git a/examples/esp32/uart-bridge/main/cli.c b/examples/esp32/uart-bridge/main/cli.c index fe07a478..d7925366 100644 --- a/examples/esp32/uart-bridge/main/cli.c +++ b/examples/esp32/uart-bridge/main/cli.c @@ -2,8 +2,9 @@ static void cli_wifi(const char *ssid, const char *pass) { if (wifi_init(ssid, pass)) { - mg_file_printf(&mg_fs_posix, WIFI_FILE, "{%Q:%Q,%Q:%Q}\n", "ssid", ssid, - "pass", pass); + mg_file_printf(&mg_fs_posix, WIFI_FILE, "{%m:%m,%m:%m}\n", mg_print_esc, 0, + "ssid", mg_print_esc, 0, ssid, mg_print_esc, 0, "pass", + mg_print_esc, 0, pass); MG_INFO(("Reboot now")); } } diff --git a/examples/huge-response/main.c b/examples/huge-response/main.c index 69e0b0cc..820efdf0 100644 --- a/examples/huge-response/main.c +++ b/examples/huge-response/main.c @@ -52,12 +52,14 @@ static void fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data) { if (version > 0 && version != s_version) { // Version mismatch: s_data has changed while client fetches it // Tell client to restart - mg_http_reply(c, 200, headers, "{%Q:%Q, %Q:%ld}", "error", - "wrong version", "version", version); + mg_http_reply(c, 200, headers, "{%m:%m, %m:%ld}", mg_print_esc, 0, + "error", mg_print_esc, 0, "wrong version", mg_print_esc, + 0, "version", version); } else { // Return data, up to CHUNK_SIZE elements - mg_http_reply(c, 200, headers, "{%Q:%ld,%Q:%ld,%Q:[%M]}", "version", - s_version, "start", start, "data", printdata, start); + mg_http_reply(c, 200, headers, "{%m:%ld,%m:%ld,%m:[%M]}", mg_print_esc, + 0, "version", s_version, mg_print_esc, 0, "start", start, + mg_print_esc, 0, "data", printdata, start); } } else { struct mg_http_serve_opts opts = {0}; diff --git a/examples/json-rpc-over-websocket/main.c b/examples/json-rpc-over-websocket/main.c index 44a63476..5130fa88 100644 --- a/examples/json-rpc-over-websocket/main.c +++ b/examples/json-rpc-over-websocket/main.c @@ -59,8 +59,9 @@ static void timer_fn(void *arg) { // Broadcast message to all connected websocket clients. for (struct mg_connection *c = mgr->conns; c != NULL; c = c->next) { if (c->data[0] != 'W') continue; - mg_ws_printf(c, WEBSOCKET_OP_TEXT, "{%Q:%Q,%Q:[%d,%d,%d]}", "method", - "notification1", "params", 1, 2, 3); + mg_ws_printf(c, WEBSOCKET_OP_TEXT, "{%m:%m,%m:[%d,%d,%d]}", mg_print_esc, 0, + "method", mg_print_esc, 0, "notification1", mg_print_esc, 0, + "params", 1, 2, 3); } } diff --git a/examples/uart-bridge/net.c b/examples/uart-bridge/net.c index 84eafb77..fe74e399 100644 --- a/examples/uart-bridge/net.c +++ b/examples/uart-bridge/net.c @@ -199,15 +199,19 @@ void uart_bridge_fn(struct mg_connection *c, int ev, void *ev_data, mg_http_reply(c, 200, "", "true\n"); } else if (mg_http_match_uri(hm, "/api/config/get")) { mg_http_reply(c, 200, "Content-Type: application/json\r\n", - "{%Q:{%Q:%Q,%Q:%s},%Q:{%Q:%Q,%Q:%s},%Q:{%Q:%Q,%Q:%s}," - "%Q:%d,%Q:%d,%Q:%d}\n", - "tcp", "url", s_state.tcp.url, "enable", - s_state.tcp.enable ? "true" : "false", "ws", "url", - s_state.websocket.url, "enable", - s_state.websocket.enable ? "true" : "false", "mqtt", "url", - s_state.mqtt.url, "enable", - s_state.mqtt.enable ? "true" : "false", "rx", s_state.rx, - "tx", s_state.tx, "baud", s_state.baud); + "{%m:{%m:%m,%m:%s},%m:{%m:%m,%m:%s},%m:{%m:%m,%m:%s}," + "%m:%d,%m:%d,%m:%d}\n", + mg_print_esc, 0, "tcp", mg_print_esc, 0, "url", + mg_print_esc, 0, s_state.tcp.url, mg_print_esc, 0, "enable", + s_state.tcp.enable ? "true" : "false", mg_print_esc, 0, + "ws", mg_print_esc, 0, "url", mg_print_esc, 0, + s_state.websocket.url, mg_print_esc, 0, "enable", + s_state.websocket.enable ? "true" : "false", mg_print_esc, + 0, "mqtt", mg_print_esc, 0, "url", mg_print_esc, 0, + s_state.mqtt.url, mg_print_esc, 0, "enable", + s_state.mqtt.enable ? "true" : "false", mg_print_esc, 0, + "rx", s_state.rx, mg_print_esc, 0, "tx", s_state.tx, + mg_print_esc, 0, "baud", s_state.baud); } else { struct mg_http_serve_opts opts; memset(&opts, 0, sizeof(opts)); diff --git a/examples/webui-login/main.c b/examples/webui-login/main.c index bf6dd838..a11818a4 100644 --- a/examples/webui-login/main.c +++ b/examples/webui-login/main.c @@ -52,10 +52,14 @@ void fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data) { mg_http_reply(c, 403, "", "Denied\n"); } else if (mg_http_match_uri(hm, "/api/data")) { mg_http_reply(c, 200, "Content-Type: application/json\r\n", - "{%Q:%Q,%Q:%Q}\n", "text", "Hello!", "data", "somedata"); + "{%m:%m,%m:%m}\n", mg_print_esc, 0, "text", mg_print_esc, 0, + "Hello!", mg_print_esc, 0, "data", mg_print_esc, 0, + "somedata"); } else if (mg_http_match_uri(hm, "/api/login")) { mg_http_reply(c, 200, "Content-Type: application/json\r\n", - "{%Q:%Q,%Q:%Q}\n", "user", u->name, "token", u->token); + "{%m:%m,%m:%m}\n", mg_print_esc, 0, "user", mg_print_esc, 0, + u->name, mg_print_esc, 0, "token", mg_print_esc, 0, + u->token); } else { struct mg_http_serve_opts opts = {.root_dir = "web_root"}; mg_http_serve_dir(c, ev_data, &opts); diff --git a/examples/webui-plain/main.c b/examples/webui-plain/main.c index a80cf330..d5b3368e 100644 --- a/examples/webui-plain/main.c +++ b/examples/webui-plain/main.c @@ -16,7 +16,9 @@ static const char *s_root_dir = "web_root"; #define MQTT_PUBLISH_TOPIC "mg/my_device" #define MQTT_SUBSCRIBE_TOPIC "mg/#" -static struct config { char *url, *pub, *sub; } s_config; +static struct config { + char *url, *pub, *sub; +} s_config; // Try to update a single configuration value static void update_config(struct mg_str json, const char *path, char **value) { @@ -36,8 +38,10 @@ static void fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data) { struct mg_http_message *hm = (struct mg_http_message *) ev_data; if (mg_http_match_uri(hm, "/api/config/get")) { mg_http_reply(c, 200, "Content-Type: application/json\r\n", - "{%Q:%Q,%Q:%Q,%Q:%Q}\n", "url", s_config.url, "pub", - s_config.pub, "sub", s_config.sub); + "{%m:%m,%m:%m,%m:%m}\n", mg_print_esc, 0, "url", + mg_print_esc, 0, s_config.url, mg_print_esc, 0, "pub", + mg_print_esc, 0, s_config.pub, mg_print_esc, 0, "sub", + mg_print_esc, 0, s_config.sub); } else if (mg_http_match_uri(hm, "/api/config/set")) { struct mg_str json = hm->body; update_config(json, "$.url", &s_config.url); diff --git a/examples/webui-push-rest/main.c b/examples/webui-push-rest/main.c index e057132c..0aca7624 100644 --- a/examples/webui-push-rest/main.c +++ b/examples/webui-push-rest/main.c @@ -45,13 +45,14 @@ static void fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data) { if (version > 0 && version == s_version) { // Version match: no changes mg_http_reply(c, 200, "Content-Type: application/json\r\n", - "{%Q:%Q,%Q:%ld}\n", "status", "no change", "version", + "{%m:%m,%m:%ld}\n", mg_print_esc, 0, "status", + mg_print_esc, 0, "no change", mg_print_esc, 0, "version", version); } else { // Version mismatch, return data mg_http_reply(c, 200, "Content-Type: application/json\r\n", - "{%Q:%ld,%Q:[%M]}\n", "version", s_version, "data", - printdata); + "{%m:%ld,%m:[%M]}\n", mg_print_esc, 0, "version", + s_version, mg_print_esc, 0, "data", printdata); } } else { struct mg_http_serve_opts opts = {.root_dir = s_root_dir}; diff --git a/examples/webui-push-ws/main.c b/examples/webui-push-ws/main.c index 190e1fa6..4b954a69 100644 --- a/examples/webui-push-ws/main.c +++ b/examples/webui-push-ws/main.c @@ -15,7 +15,7 @@ static void fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data) { struct mg_http_message *hm = (struct mg_http_message *) ev_data; if (mg_http_match_uri(hm, "/api/watch")) { mg_ws_upgrade(c, hm, NULL); // Upgrade HTTP to Websocket - c->data[0] = 'W'; // Set some unique mark on the connection + c->data[0] = 'W'; // Set some unique mark on the connection } else { struct mg_http_serve_opts opts = {.root_dir = s_web_root}; mg_http_serve_dir(c, ev_data, &opts); @@ -29,8 +29,9 @@ static void push(struct mg_mgr *mgr, const char *name, const void *data) { struct mg_connection *c; for (c = mgr->conns; c != NULL; c = c->next) { if (c->data[0] != 'W') continue; - mg_ws_printf(c, WEBSOCKET_OP_TEXT, "{%Q:%Q,%Q:%Q}", "name", name, "data", - data); + mg_ws_printf(c, WEBSOCKET_OP_TEXT, "{%m:%m,%m:%m}", mg_print_esc, 0, "name", + mg_print_esc, 0, name, mg_print_esc, 0, "data", mg_print_esc, + 0, data); } } diff --git a/examples/webui-rest/main.c b/examples/webui-rest/main.c index 608b47e1..e60ee043 100644 --- a/examples/webui-rest/main.c +++ b/examples/webui-rest/main.c @@ -17,8 +17,8 @@ static void fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data) { if (ev == MG_EV_HTTP_MSG) { struct mg_http_message *hm = (struct mg_http_message *) ev_data; if (mg_http_match_uri(hm, "/api/f1")) { - mg_http_reply(c, 200, "Content-Type: application/json\r\n", "{%Q:%d}\n", - "result", 123); + mg_http_reply(c, 200, "Content-Type: application/json\r\n", "{%m:%d}\n", + mg_print_esc, 0, "result", 123); } else if (mg_http_match_uri(hm, "/api/sum")) { // Attempt to fetch a JSON array from the body, hm->body struct mg_str json = hm->body; @@ -26,8 +26,8 @@ static void fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data) { if (mg_json_get_num(json, "$[0]", &num1) && mg_json_get_num(json, "$[1]", &num2)) { // Success! create a JSON response - mg_http_reply(c, 200, "Content-Type: application/json\r\n", "{%Q:%g}\n", - "result", num1 + num2); + mg_http_reply(c, 200, "Content-Type: application/json\r\n", "{%m:%g}\n", + mg_print_esc, 0, "result", num1 + num2); } } else { struct mg_http_serve_opts opts = {.root_dir = s_root_dir}; diff --git a/mongoose.c b/mongoose.c index ee65b18d..f173a81b 100644 --- a/mongoose.c +++ b/mongoose.c @@ -412,7 +412,9 @@ void mg_error(struct mg_connection *c, const char *fmt, ...) { -static bool is_digit(int c) { return c >= '0' && c <= '9'; } +static bool is_digit(int c) { + return c >= '0' && c <= '9'; +} static int addexp(char *buf, int e, int sign) { int n = 0; @@ -527,63 +529,12 @@ static size_t mg_lld(char *buf, int64_t val, bool is_signed, bool is_hex) { } static size_t scpy(void (*out)(char, void *), void *ptr, char *buf, - size_t len) { + size_t len) { size_t i = 0; while (i < len && buf[i] != '\0') out(buf[i++], ptr); return i; } -static char mg_esc(int c, bool esc) { - const char *p, *esc1 = "\b\f\n\r\t\\\"", *esc2 = "bfnrt\\\""; - for (p = esc ? esc1 : esc2; *p != '\0'; p++) { - if (*p == c) return esc ? esc2[p - esc1] : esc1[p - esc2]; - } - return 0; -} - -static char mg_escape(int c) { return mg_esc(c, true); } - -static size_t qcpy(void (*out)(char, void *), void *ptr, char *buf, - size_t len) { - size_t i = 0, extra = 0; - for (i = 0; i < len && buf[i] != '\0'; i++) { - char c = mg_escape(buf[i]); - if (c) { - out('\\', ptr), out(c, ptr), extra++; - } else { - out(buf[i], ptr); - } - } - return i + extra; -} - -static size_t Qcpy(void (*out)(char, void *), void *ptr, char *buf, - size_t len) { - size_t n = 2; - out('"', ptr); - n += qcpy(out, ptr, buf, len); - out('"', ptr); - return n; -} - -static size_t bcpy(void (*out)(char, void *), void *ptr, uint8_t *buf, - size_t len) { - size_t i, n = 0; - const char *t = - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - out('"', ptr), n++; - for (i = 0; i < len; i += 3) { - uint8_t c1 = buf[i], c2 = i + 1 < len ? buf[i + 1] : 0, - c3 = i + 2 < len ? buf[i + 2] : 0; - char tmp[4] = {t[c1 >> 2], t[(c1 & 3) << 4 | (c2 >> 4)], '=', '='}; - if (i + 1 < len) tmp[2] = t[(c2 & 15) << 2 | (c3 >> 6)]; - if (i + 2 < len) tmp[3] = t[c3 & 63]; - n += scpy(out, ptr, tmp, sizeof(tmp)); - } - out('"', ptr), n++; - return n; -} - size_t mg_xprintf(void (*out)(char, void *), void *ptr, const char *fmt, ...) { size_t len = 0; va_list ap; @@ -648,40 +599,23 @@ size_t mg_vxprintf(void (*out)(char, void *), void *param, const char *fmt, n += scpy(out, param, tmp, k); for (j = 0; pad == ' ' && minus && k < w && j + k < w; j++) n += scpy(out, param, &pad, 1); - } else if (c == 'M') { + } else if (c == 'm' || c == 'M') { mg_pm_t f = va_arg(*ap, mg_pm_t); + if (c == 'm') out('"', param); n += f(out, param, ap); + if (c == 'm') n += 2, out('"', param); } else if (c == 'c') { int ch = va_arg(*ap, int); out((char) ch, param); n++; - } else if (c == 'H') { - // Print hex-encoded double-quoted string - size_t bl = (size_t) va_arg(*ap, int); - uint8_t *p = va_arg(*ap, uint8_t *), dquote = '"'; - const char *hex = "0123456789abcdef"; - n += scpy(out, param, (char *) &dquote, 1); - for (j = 0; j < bl; j++) { - n += scpy(out, param, (char *) &hex[(p[j] >> 4) & 15], 1); - n += scpy(out, param, (char *) &hex[p[j] & 15], 1); - } - n += scpy(out, param, (char *) &dquote, 1); - } else if (c == 'V') { - // Print base64-encoded double-quoted string - size_t len = (size_t) va_arg(*ap, int); - uint8_t *buf = va_arg(*ap, uint8_t *); - n += bcpy(out, param, buf, len); - } else if (c == 's' || c == 'Q' || c == 'q') { + } else if (c == 's') { char *p = va_arg(*ap, char *); - size_t (*f)(void (*)(char, void *), void *, char *, size_t) = scpy; - if (c == 'Q') f = Qcpy; - if (c == 'q') f = qcpy; if (pr == ~0U) pr = p == NULL ? 0 : strlen(p); for (j = 0; !minus && pr < w && j + pr < w; j++) - n += f(out, param, &pad, 1); - n += f(out, param, p, pr); + n += scpy(out, param, &pad, 1); + n += scpy(out, param, p, pr); for (j = 0; minus && pr < w && j + pr < w; j++) - n += f(out, param, &pad, 1); + n += scpy(out, param, &pad, 1); } else if (c == '%') { out('%', param); n++; @@ -3500,7 +3434,7 @@ size_t mg_queue_vprintf(struct mg_queue *q, const char *fmt, va_list *ap) { if (len == 0 || mg_queue_book(q, &buf, len + 1) < len + 1) { len = 0; // Nah. Not enough space } else { - len = mg_vsnprintf((char *)buf, len + 1, fmt, ap); + len = mg_vsnprintf((char *) buf, len + 1, fmt, ap); mg_queue_add(q, len); } return len; @@ -3608,6 +3542,73 @@ size_t mg_print_mac(void (*out)(char, void *), void *arg, va_list *ap) { p[3], p[4], p[5]); } +static char mg_esc(int c, bool esc) { + const char *p, *esc1 = "\b\f\n\r\t\\\"", *esc2 = "bfnrt\\\""; + for (p = esc ? esc1 : esc2; *p != '\0'; p++) { + if (*p == c) return esc ? esc2[p - esc1] : esc1[p - esc2]; + } + return 0; +} + +static char mg_escape(int c) { + return mg_esc(c, true); +} + +static size_t qcpy(void (*out)(char, void *), void *ptr, char *buf, + size_t len) { + size_t i = 0, extra = 0; + for (i = 0; i < len && buf[i] != '\0'; i++) { + char c = mg_escape(buf[i]); + if (c) { + out('\\', ptr), out(c, ptr), extra++; + } else { + out(buf[i], ptr); + } + } + return i + extra; +} + +static size_t bcpy(void (*out)(char, void *), void *arg, uint8_t *buf, + size_t len) { + size_t i, j, n = 0; + const char *t = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + for (i = 0; i < len; i += 3) { + uint8_t c1 = buf[i], c2 = i + 1 < len ? buf[i + 1] : 0, + c3 = i + 2 < len ? buf[i + 2] : 0; + char tmp[4] = {t[c1 >> 2], t[(c1 & 3) << 4 | (c2 >> 4)], '=', '='}; + if (i + 1 < len) tmp[2] = t[(c2 & 15) << 2 | (c3 >> 6)]; + if (i + 2 < len) tmp[3] = t[c3 & 63]; + for (j = 0; j < sizeof(tmp) && tmp[j] != '\0'; j++) out(tmp[j], arg); + n += j; + } + return n; +} + +size_t mg_print_hex(void (*out)(char, void *), void *arg, va_list *ap) { + size_t bl = (size_t) va_arg(*ap, int); + uint8_t *p = va_arg(*ap, uint8_t *); + const char *hex = "0123456789abcdef"; + size_t j; + for (j = 0; j < bl; j++) { + out(hex[(p[j] >> 4) & 0x0F], arg); + out(hex[p[j] & 0x0F], arg); + } + return 2 * bl; +} +size_t mg_print_base64(void (*out)(char, void *), void *arg, va_list *ap) { + size_t len = (size_t) va_arg(*ap, int); + uint8_t *buf = va_arg(*ap, uint8_t *); + return bcpy(out, arg, buf, len); +} + +size_t mg_print_esc(void (*out)(char, void *), void *arg, va_list *ap) { + size_t len = (size_t) va_arg(*ap, int); + char *p = va_arg(*ap, char *); + if (len == 0) len = p == NULL ? 0 : strlen(p); + return qcpy(out, arg, p, len); +} + #ifdef MG_ENABLE_LINES #line 1 "src/queue.c" #endif @@ -3699,6 +3700,7 @@ void mg_queue_del(struct mg_queue *q, size_t len) { #endif + void mg_rpc_add(struct mg_rpc **head, struct mg_str method, void (*fn)(struct mg_rpc_req *), void *fn_data) { struct mg_rpc *rpc = (struct mg_rpc *) calloc(1, sizeof(*rpc)); @@ -3741,15 +3743,16 @@ void mg_rpc_process(struct mg_rpc_req *r) { (off = mg_json_get(r->frame, "$.error", &len)) > 0) { mg_rpc_call(r, mg_str("")); // JSON response! call "" method handler } else { - mg_rpc_err(r, -32700, "%.*Q", (int) r->frame.len, r->frame.ptr); // Invalid + mg_rpc_err(r, -32700, "%m", mg_print_esc, (int) r->frame.len, + r->frame.ptr); // Invalid } } void mg_rpc_vok(struct mg_rpc_req *r, const char *fmt, va_list *ap) { int len, off = mg_json_get(r->frame, "$.id", &len); if (off > 0) { - mg_xprintf(r->pfn, r->pfn_data, "{%Q:%.*s,%Q:", "id", len, - &r->frame.ptr[off], "result"); + mg_xprintf(r->pfn, r->pfn_data, "{%m:%.*s,%m:", mg_print_esc, 0, "id", len, + &r->frame.ptr[off], mg_print_esc, 0, "result"); mg_vxprintf(r->pfn, r->pfn_data, fmt == NULL ? "null" : fmt, ap); mg_xprintf(r->pfn, r->pfn_data, "}"); } @@ -3766,10 +3769,11 @@ void mg_rpc_verr(struct mg_rpc_req *r, int code, const char *fmt, va_list *ap) { int len, off = mg_json_get(r->frame, "$.id", &len); mg_xprintf(r->pfn, r->pfn_data, "{"); if (off > 0) { - mg_xprintf(r->pfn, r->pfn_data, "%Q:%.*s,", "id", len, &r->frame.ptr[off]); + mg_xprintf(r->pfn, r->pfn_data, "%m:%.*s,", mg_print_esc, 0, "id", len, + &r->frame.ptr[off]); } - mg_xprintf(r->pfn, r->pfn_data, "%Q:{%Q:%d,%Q:", "error", "code", code, - "message"); + mg_xprintf(r->pfn, r->pfn_data, "%m:{%m:%d,%m:", mg_print_esc, 0, "error", + mg_print_esc, 0, "code", code, mg_print_esc, 0, "message"); mg_vxprintf(r->pfn, r->pfn_data, fmt == NULL ? "null" : fmt, ap); mg_xprintf(r->pfn, r->pfn_data, "}}"); } @@ -3786,8 +3790,8 @@ static size_t print_methods(mg_pfn_t pfn, void *pfn_data, va_list *ap) { size_t len = 0; for (h = *head; h != NULL; h = h->next) { if (h->method.len == 0) continue; // Ignore response handler - len += mg_xprintf(pfn, pfn_data, "%s%.*Q", h == *head ? "" : ",", - (int) h->method.len, h->method.ptr); + len += mg_xprintf(pfn, pfn_data, "%s%m", h == *head ? "" : ",", + mg_print_esc, (int) h->method.len, h->method.ptr); } return len; } diff --git a/mongoose.h b/mongoose.h index ee7e8287..506872a5 100644 --- a/mongoose.h +++ b/mongoose.h @@ -882,6 +882,9 @@ size_t mg_queue_vprintf(struct mg_queue *, const char *fmt, va_list *); size_t mg_queue_printf(struct mg_queue *, const char *fmt, ...); // %M print helper functions +size_t mg_print_base64(void (*out)(char, void *), void *arg, va_list *ap); +size_t mg_print_esc(void (*out)(char, void *), void *arg, va_list *ap); +size_t mg_print_hex(void (*out)(char, void *), void *arg, va_list *ap); size_t mg_print_ip(void (*out)(char, void *), void *arg, va_list *ap); size_t mg_print_ip_port(void (*out)(char, void *), void *arg, va_list *ap); size_t mg_print_ip4(void (*out)(char, void *), void *arg, va_list *ap); diff --git a/src/fmt.c b/src/fmt.c index 7fb5fe69..f2209f1a 100644 --- a/src/fmt.c +++ b/src/fmt.c @@ -2,7 +2,9 @@ #include "printf.h" #include "util.h" -static bool is_digit(int c) { return c >= '0' && c <= '9'; } +static bool is_digit(int c) { + return c >= '0' && c <= '9'; +} static int addexp(char *buf, int e, int sign) { int n = 0; @@ -117,63 +119,12 @@ static size_t mg_lld(char *buf, int64_t val, bool is_signed, bool is_hex) { } static size_t scpy(void (*out)(char, void *), void *ptr, char *buf, - size_t len) { + size_t len) { size_t i = 0; while (i < len && buf[i] != '\0') out(buf[i++], ptr); return i; } -static char mg_esc(int c, bool esc) { - const char *p, *esc1 = "\b\f\n\r\t\\\"", *esc2 = "bfnrt\\\""; - for (p = esc ? esc1 : esc2; *p != '\0'; p++) { - if (*p == c) return esc ? esc2[p - esc1] : esc1[p - esc2]; - } - return 0; -} - -static char mg_escape(int c) { return mg_esc(c, true); } - -static size_t qcpy(void (*out)(char, void *), void *ptr, char *buf, - size_t len) { - size_t i = 0, extra = 0; - for (i = 0; i < len && buf[i] != '\0'; i++) { - char c = mg_escape(buf[i]); - if (c) { - out('\\', ptr), out(c, ptr), extra++; - } else { - out(buf[i], ptr); - } - } - return i + extra; -} - -static size_t Qcpy(void (*out)(char, void *), void *ptr, char *buf, - size_t len) { - size_t n = 2; - out('"', ptr); - n += qcpy(out, ptr, buf, len); - out('"', ptr); - return n; -} - -static size_t bcpy(void (*out)(char, void *), void *ptr, uint8_t *buf, - size_t len) { - size_t i, n = 0; - const char *t = - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - out('"', ptr), n++; - for (i = 0; i < len; i += 3) { - uint8_t c1 = buf[i], c2 = i + 1 < len ? buf[i + 1] : 0, - c3 = i + 2 < len ? buf[i + 2] : 0; - char tmp[4] = {t[c1 >> 2], t[(c1 & 3) << 4 | (c2 >> 4)], '=', '='}; - if (i + 1 < len) tmp[2] = t[(c2 & 15) << 2 | (c3 >> 6)]; - if (i + 2 < len) tmp[3] = t[c3 & 63]; - n += scpy(out, ptr, tmp, sizeof(tmp)); - } - out('"', ptr), n++; - return n; -} - size_t mg_xprintf(void (*out)(char, void *), void *ptr, const char *fmt, ...) { size_t len = 0; va_list ap; @@ -238,40 +189,23 @@ size_t mg_vxprintf(void (*out)(char, void *), void *param, const char *fmt, n += scpy(out, param, tmp, k); for (j = 0; pad == ' ' && minus && k < w && j + k < w; j++) n += scpy(out, param, &pad, 1); - } else if (c == 'M') { + } else if (c == 'm' || c == 'M') { mg_pm_t f = va_arg(*ap, mg_pm_t); + if (c == 'm') out('"', param); n += f(out, param, ap); + if (c == 'm') n += 2, out('"', param); } else if (c == 'c') { int ch = va_arg(*ap, int); out((char) ch, param); n++; - } else if (c == 'H') { - // Print hex-encoded double-quoted string - size_t bl = (size_t) va_arg(*ap, int); - uint8_t *p = va_arg(*ap, uint8_t *), dquote = '"'; - const char *hex = "0123456789abcdef"; - n += scpy(out, param, (char *) &dquote, 1); - for (j = 0; j < bl; j++) { - n += scpy(out, param, (char *) &hex[(p[j] >> 4) & 15], 1); - n += scpy(out, param, (char *) &hex[p[j] & 15], 1); - } - n += scpy(out, param, (char *) &dquote, 1); - } else if (c == 'V') { - // Print base64-encoded double-quoted string - size_t len = (size_t) va_arg(*ap, int); - uint8_t *buf = va_arg(*ap, uint8_t *); - n += bcpy(out, param, buf, len); - } else if (c == 's' || c == 'Q' || c == 'q') { + } else if (c == 's') { char *p = va_arg(*ap, char *); - size_t (*f)(void (*)(char, void *), void *, char *, size_t) = scpy; - if (c == 'Q') f = Qcpy; - if (c == 'q') f = qcpy; if (pr == ~0U) pr = p == NULL ? 0 : strlen(p); for (j = 0; !minus && pr < w && j + pr < w; j++) - n += f(out, param, &pad, 1); - n += f(out, param, p, pr); + n += scpy(out, param, &pad, 1); + n += scpy(out, param, p, pr); for (j = 0; minus && pr < w && j + pr < w; j++) - n += f(out, param, &pad, 1); + n += scpy(out, param, &pad, 1); } else if (c == '%') { out('%', param); n++; diff --git a/src/printf.c b/src/printf.c index 34e8fd37..f6ad86d6 100644 --- a/src/printf.c +++ b/src/printf.c @@ -1,5 +1,5 @@ -#include "fmt.h" #include "printf.h" +#include "fmt.h" #include "util.h" size_t mg_queue_vprintf(struct mg_queue *q, const char *fmt, va_list *ap) { @@ -8,7 +8,7 @@ size_t mg_queue_vprintf(struct mg_queue *q, const char *fmt, va_list *ap) { if (len == 0 || mg_queue_book(q, &buf, len + 1) < len + 1) { len = 0; // Nah. Not enough space } else { - len = mg_vsnprintf((char *)buf, len + 1, fmt, ap); + len = mg_vsnprintf((char *) buf, len + 1, fmt, ap); mg_queue_add(q, len); } return len; @@ -115,3 +115,70 @@ size_t mg_print_mac(void (*out)(char, void *), void *arg, va_list *ap) { return mg_xprintf(out, arg, "%02x:%02x:%02x:%02x:%02x:%02x", p[0], p[1], p[2], p[3], p[4], p[5]); } + +static char mg_esc(int c, bool esc) { + const char *p, *esc1 = "\b\f\n\r\t\\\"", *esc2 = "bfnrt\\\""; + for (p = esc ? esc1 : esc2; *p != '\0'; p++) { + if (*p == c) return esc ? esc2[p - esc1] : esc1[p - esc2]; + } + return 0; +} + +static char mg_escape(int c) { + return mg_esc(c, true); +} + +static size_t qcpy(void (*out)(char, void *), void *ptr, char *buf, + size_t len) { + size_t i = 0, extra = 0; + for (i = 0; i < len && buf[i] != '\0'; i++) { + char c = mg_escape(buf[i]); + if (c) { + out('\\', ptr), out(c, ptr), extra++; + } else { + out(buf[i], ptr); + } + } + return i + extra; +} + +static size_t bcpy(void (*out)(char, void *), void *arg, uint8_t *buf, + size_t len) { + size_t i, j, n = 0; + const char *t = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + for (i = 0; i < len; i += 3) { + uint8_t c1 = buf[i], c2 = i + 1 < len ? buf[i + 1] : 0, + c3 = i + 2 < len ? buf[i + 2] : 0; + char tmp[4] = {t[c1 >> 2], t[(c1 & 3) << 4 | (c2 >> 4)], '=', '='}; + if (i + 1 < len) tmp[2] = t[(c2 & 15) << 2 | (c3 >> 6)]; + if (i + 2 < len) tmp[3] = t[c3 & 63]; + for (j = 0; j < sizeof(tmp) && tmp[j] != '\0'; j++) out(tmp[j], arg); + n += j; + } + return n; +} + +size_t mg_print_hex(void (*out)(char, void *), void *arg, va_list *ap) { + size_t bl = (size_t) va_arg(*ap, int); + uint8_t *p = va_arg(*ap, uint8_t *); + const char *hex = "0123456789abcdef"; + size_t j; + for (j = 0; j < bl; j++) { + out(hex[(p[j] >> 4) & 0x0F], arg); + out(hex[p[j] & 0x0F], arg); + } + return 2 * bl; +} +size_t mg_print_base64(void (*out)(char, void *), void *arg, va_list *ap) { + size_t len = (size_t) va_arg(*ap, int); + uint8_t *buf = va_arg(*ap, uint8_t *); + return bcpy(out, arg, buf, len); +} + +size_t mg_print_esc(void (*out)(char, void *), void *arg, va_list *ap) { + size_t len = (size_t) va_arg(*ap, int); + char *p = va_arg(*ap, char *); + if (len == 0) len = p == NULL ? 0 : strlen(p); + return qcpy(out, arg, p, len); +} diff --git a/src/printf.h b/src/printf.h index cb29fcad..47ea873c 100644 --- a/src/printf.h +++ b/src/printf.h @@ -13,6 +13,9 @@ size_t mg_queue_vprintf(struct mg_queue *, const char *fmt, va_list *); size_t mg_queue_printf(struct mg_queue *, const char *fmt, ...); // %M print helper functions +size_t mg_print_base64(void (*out)(char, void *), void *arg, va_list *ap); +size_t mg_print_esc(void (*out)(char, void *), void *arg, va_list *ap); +size_t mg_print_hex(void (*out)(char, void *), void *arg, va_list *ap); size_t mg_print_ip(void (*out)(char, void *), void *arg, va_list *ap); size_t mg_print_ip_port(void (*out)(char, void *), void *arg, va_list *ap); size_t mg_print_ip4(void (*out)(char, void *), void *arg, va_list *ap); diff --git a/src/rpc.c b/src/rpc.c index 14c5b1db..942f882a 100644 --- a/src/rpc.c +++ b/src/rpc.c @@ -1,4 +1,5 @@ #include "rpc.h" +#include "printf.h" void mg_rpc_add(struct mg_rpc **head, struct mg_str method, void (*fn)(struct mg_rpc_req *), void *fn_data) { @@ -42,15 +43,16 @@ void mg_rpc_process(struct mg_rpc_req *r) { (off = mg_json_get(r->frame, "$.error", &len)) > 0) { mg_rpc_call(r, mg_str("")); // JSON response! call "" method handler } else { - mg_rpc_err(r, -32700, "%.*Q", (int) r->frame.len, r->frame.ptr); // Invalid + mg_rpc_err(r, -32700, "%m", mg_print_esc, (int) r->frame.len, + r->frame.ptr); // Invalid } } void mg_rpc_vok(struct mg_rpc_req *r, const char *fmt, va_list *ap) { int len, off = mg_json_get(r->frame, "$.id", &len); if (off > 0) { - mg_xprintf(r->pfn, r->pfn_data, "{%Q:%.*s,%Q:", "id", len, - &r->frame.ptr[off], "result"); + mg_xprintf(r->pfn, r->pfn_data, "{%m:%.*s,%m:", mg_print_esc, 0, "id", len, + &r->frame.ptr[off], mg_print_esc, 0, "result"); mg_vxprintf(r->pfn, r->pfn_data, fmt == NULL ? "null" : fmt, ap); mg_xprintf(r->pfn, r->pfn_data, "}"); } @@ -67,10 +69,11 @@ void mg_rpc_verr(struct mg_rpc_req *r, int code, const char *fmt, va_list *ap) { int len, off = mg_json_get(r->frame, "$.id", &len); mg_xprintf(r->pfn, r->pfn_data, "{"); if (off > 0) { - mg_xprintf(r->pfn, r->pfn_data, "%Q:%.*s,", "id", len, &r->frame.ptr[off]); + mg_xprintf(r->pfn, r->pfn_data, "%m:%.*s,", mg_print_esc, 0, "id", len, + &r->frame.ptr[off]); } - mg_xprintf(r->pfn, r->pfn_data, "%Q:{%Q:%d,%Q:", "error", "code", code, - "message"); + mg_xprintf(r->pfn, r->pfn_data, "%m:{%m:%d,%m:", mg_print_esc, 0, "error", + mg_print_esc, 0, "code", code, mg_print_esc, 0, "message"); mg_vxprintf(r->pfn, r->pfn_data, fmt == NULL ? "null" : fmt, ap); mg_xprintf(r->pfn, r->pfn_data, "}}"); } @@ -87,8 +90,8 @@ static size_t print_methods(mg_pfn_t pfn, void *pfn_data, va_list *ap) { size_t len = 0; for (h = *head; h != NULL; h = h->next) { if (h->method.len == 0) continue; // Ignore response handler - len += mg_xprintf(pfn, pfn_data, "%s%.*Q", h == *head ? "" : ",", - (int) h->method.len, h->method.ptr); + len += mg_xprintf(pfn, pfn_data, "%s%m", h == *head ? "" : ",", + mg_print_esc, (int) h->method.len, h->method.ptr); } return len; } diff --git a/test/unit_test.c b/test/unit_test.c index 919fa75e..894c766e 100644 --- a/test/unit_test.c +++ b/test/unit_test.c @@ -1321,7 +1321,9 @@ static void test_http_range(void) { ASSERT(mgr.conns == NULL); } -static void f1(void *arg) { (*(int *) arg)++; } +static void f1(void *arg) { + (*(int *) arg)++; +} static void test_timer(void) { int v1 = 0, v2 = 0, v3 = 0; @@ -1557,7 +1559,7 @@ static void test_str(void) { const char *expected; expected = "\"\""; - mg_snprintf(buf, sizeof(buf), "%Q", ""); + mg_snprintf(buf, sizeof(buf), "%m", mg_print_esc, 0, ""); ASSERT(strcmp(buf, expected) == 0); expected = ""; @@ -1569,20 +1571,20 @@ static void test_str(void) { ASSERT(strcmp(buf, expected) == 0); expected = "\"hi, \\\"\""; - mg_snprintf(buf, sizeof(buf), "\"hi, %q\"", "\""); + mg_snprintf(buf, sizeof(buf), "\"hi, %M\"", mg_print_esc, 0, "\""); MG_INFO(("[%s] [%s]", buf, expected)); ASSERT(strcmp(buf, expected) == 0); expected = "\"a'b\""; - mg_snprintf(buf, sizeof(buf), "%Q", "a'b"); + mg_snprintf(buf, sizeof(buf), "%m", mg_print_esc, 0, "a'b"); ASSERT(strcmp(buf, expected) == 0); expected = "\"a\\b\\n\\f\\r\\t\\\"\""; - mg_snprintf(buf, sizeof(buf), "%Q", "a\b\n\f\r\t\""); + mg_snprintf(buf, sizeof(buf), "%m", mg_print_esc, 0, "a\b\n\f\r\t\""); ASSERT(strcmp(buf, expected) == 0); expected = "\"abc\""; - mg_snprintf(buf, sizeof(buf), "%.*Q", 3, "abcdef"); + mg_snprintf(buf, sizeof(buf), "%m", mg_print_esc, 3, "abcdef"); ASSERT(strcmp(buf, expected) == 0); p = mg_mprintf("[%s,%M,%s]", "null", pf1, 2, 3, "hi"); @@ -1679,15 +1681,16 @@ static void test_str(void) { { const char *expected = "[\"MA==\",\"MAo=\",\"MAr+\",\"MAr+Zw==\"]"; char tmp[100], s[] = "0\n\xfeg"; - ASSERT(mg_snprintf(tmp, sizeof(tmp), "[%V,%V,%V,%V]", 1, s, 2, s, 3, s, 4, - s) == 33); + ASSERT(mg_snprintf(tmp, sizeof(tmp), "[%m,%m,%m,%m]", mg_print_base64, 1, s, + mg_print_base64, 2, s, mg_print_base64, 3, s, + mg_print_base64, 4, s) == 33); ASSERT(strcmp(tmp, expected) == 0); } { const char *expected = "\"002001200220616263\""; char tmp[100], s[] = "\x00 \x01 \x02 abc"; - ASSERT(mg_snprintf(tmp, sizeof(tmp), "%H", 9, s) == 20); + ASSERT(mg_snprintf(tmp, sizeof(tmp), "%m", mg_print_hex, 9, s) == 20); ASSERT(strcmp(tmp, expected) == 0); } @@ -2778,7 +2781,9 @@ static void start_thread(void (*f)(void *), void *p) { pthread_attr_destroy(&attr); } #else -static void start_thread(void (*f)(void *), void *p) { (void) f, (void) p; } +static void start_thread(void (*f)(void *), void *p) { + (void) f, (void) p; +} #endif static void test_queue(void) {