Last active
December 30, 2015 20:18
-
-
Save sora/7879335 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <stdio.h> | |
| #include <stdlib.h> | |
| #include <string.h> | |
| //#define DEBUG | |
| #define MAX_FRAME_LEN (9014) | |
| #define _LF 0x10 | |
| #define _SPC 0x11 | |
| #define _SKP 0x20 | |
| const unsigned char _atob[] = { | |
| _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 0-7 */ | |
| _SKP, _SKP, _LF, _SKP, _SKP, _SKP, _SKP, _SKP, /* 8-15 */ | |
| _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 16-23 */ | |
| _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 24-31 */ | |
| _SPC, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 32-39 */ | |
| _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 40-47 */ | |
| 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 48-55 */ | |
| 0x08, 0x09, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 56-63 */ | |
| _SKP, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, _SKP, /* 64-71 */ | |
| _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 72-79 */ | |
| _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 80-87 */ | |
| _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 88-95 */ | |
| _SKP, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, _SKP, /* 96-103 */ | |
| _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 104-111 */ | |
| _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 112-119 */ | |
| _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 120-127 */ | |
| _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 128-135 */ | |
| _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 136-143 */ | |
| _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 144-151 */ | |
| _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 152-159 */ | |
| _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 160-167 */ | |
| _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 168-175 */ | |
| _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 176-183 */ | |
| _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 184-191 */ | |
| _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 192-199 */ | |
| _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 200-207 */ | |
| _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 208-215 */ | |
| _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 216-223 */ | |
| _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 224-231 */ | |
| _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 232-239 */ | |
| _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 240-247 */ | |
| _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP }; /* 248-255 */ | |
| int atob0(FILE *fp) | |
| { | |
| char line[MAX_FRAME_LEN]; | |
| unsigned char c, *cp; | |
| unsigned int frame_len; | |
| while ( fgets(line, MAX_FRAME_LEN, fp) != NULL ) { | |
| frame_len = 0; | |
| cp = (unsigned char *)line; | |
| while ((c = *(cp++)) != '\n') { | |
| ++frame_len; | |
| } | |
| } | |
| return 0; | |
| } | |
| int atob1(FILE *fp) | |
| { | |
| unsigned char tmp_pkt[MAX_FRAME_LEN] = {0}; | |
| char line[MAX_FRAME_LEN]; | |
| unsigned char c, *cp; | |
| unsigned int frame_len; | |
| int tmp; | |
| while ( fgets(line, MAX_FRAME_LEN, fp) != NULL ) { | |
| frame_len = 0; | |
| cp = (unsigned char *)line; | |
| while ((c = *(cp++)) != '\n') { | |
| // skip blank char | |
| if (c == ' ') | |
| continue; | |
| // ascii to number | |
| if (c >= '0' && c <= '9') { | |
| tmp = (c - '0') << 4; | |
| } else if (c >= 'A' && c <= 'F') { | |
| tmp = (c - 'A' + 0xA) << 4; | |
| } else if (c >= 'a' && c <= 'f') { | |
| tmp = (c - 'a' + 0xA) << 4; | |
| } else { | |
| fprintf(stderr, "input data err: %c\n", c); | |
| return 1; | |
| } | |
| c = *(cp++); | |
| // ascii to number | |
| if (c >= '0' && c <= '9') { | |
| tmp_pkt[frame_len] = (tmp | (c - '0')); | |
| } else if (c >= 'A' && c <= 'F') { | |
| tmp_pkt[frame_len] = (tmp | (c - 'A' + 0xA)); | |
| } else if (c >= 'a' && c <= 'f') { | |
| tmp_pkt[frame_len] = (tmp | (c - 'a' + 0xA)); | |
| } else { | |
| fprintf(stderr, "input data err: %c\n", c); | |
| return 1; | |
| } | |
| #ifdef DEBUG | |
| printf(" %02X", tmp_pkt[frame_len]); | |
| #endif | |
| ++frame_len; | |
| } | |
| #ifdef DEBUG | |
| printf("\n"); | |
| #endif | |
| } | |
| return 0; | |
| } | |
| int atob2(FILE *fp) | |
| { | |
| unsigned char tmp_pkt[MAX_FRAME_LEN] = {0}; | |
| char line[MAX_FRAME_LEN]; | |
| unsigned char c, *cp; | |
| unsigned int frame_len; | |
| int tmp; | |
| while ( fgets(line, MAX_FRAME_LEN, fp) != NULL ) { | |
| frame_len = 0; | |
| cp = (unsigned char *)line; | |
| while ((c = *(cp++)) != '\n') { | |
| // skip blank char | |
| if (c == ' ') | |
| continue; | |
| // ascii to number | |
| if ((tmp = _atob[c]) != _SKP) { | |
| tmp <<= 4; | |
| } else { | |
| fprintf(stderr, "input data err: %c\n", c); | |
| return 1; | |
| } | |
| c = *(cp++); | |
| // ascii to number | |
| if (_atob[c] != _SKP) { | |
| tmp_pkt[frame_len] = (tmp | _atob[c]); | |
| } else { | |
| fprintf(stderr, "input data err: %c\n", c); | |
| return 1; | |
| } | |
| #ifdef DEBUG | |
| printf(" %02X", tmp_pkt[frame_len]); | |
| #endif | |
| ++frame_len; | |
| } | |
| #ifdef DEBUG | |
| printf("\n"); | |
| #endif | |
| } | |
| return 0; | |
| } | |
| int atob3(FILE *fp) | |
| { | |
| unsigned char tmp_pkt[MAX_FRAME_LEN] = {0}; | |
| char line[MAX_FRAME_LEN]; | |
| unsigned char *cp; | |
| unsigned int frame_len; | |
| int tmp1, tmp2; | |
| while ( fgets(line, MAX_FRAME_LEN, fp) != NULL ) { | |
| frame_len = 0; | |
| cp = (unsigned char *)line; | |
| while ((tmp1 = *(cp++)) != '\n') { | |
| // skip blank char | |
| if (tmp1 == ' ') | |
| continue; | |
| // ascii to number | |
| tmp2 = *(cp++); | |
| if (_atob[tmp1] != _SKP && _atob[tmp2] != _SKP) { | |
| tmp_pkt[frame_len] = (_atob[tmp1] << 4) | _atob[tmp2]; | |
| } else { | |
| fprintf(stderr, "input data err: %d %d\n", _atob[tmp1], _atob[tmp2]); | |
| return 1; | |
| } | |
| #ifdef DEBUG | |
| printf(" %02X", tmp_pkt[frame_len]); | |
| #endif | |
| ++frame_len; | |
| } | |
| #ifdef DEBUG | |
| printf("\n"); | |
| #endif | |
| } | |
| return 0; | |
| } | |
| int atob4(FILE *fp) | |
| { | |
| unsigned char tmp_pkt[MAX_FRAME_LEN] = {0}; | |
| char line[MAX_FRAME_LEN]; | |
| unsigned char *cp; | |
| unsigned int frame_len; | |
| int tmp1, tmp2; | |
| while ( fgets(line, MAX_FRAME_LEN, fp) != NULL ) { | |
| frame_len = 0; | |
| cp = (unsigned char *)line; | |
| while ((tmp1 = _atob[*(cp++)]) != _LF) { | |
| // skip blank char | |
| if (tmp1 == _SPC) | |
| continue; | |
| // ascii to number | |
| tmp2 = _atob[*(cp++)]; | |
| if (tmp1 != _SKP && tmp2 != _SKP) { | |
| tmp_pkt[frame_len] = (tmp1 << 4) | tmp2; | |
| } else { | |
| fprintf(stderr, "input data err: %02X %02X\n", tmp1, tmp2); | |
| return 1; | |
| } | |
| #ifdef DEBUG | |
| printf(" %02X", tmp_pkt[frame_len]); | |
| #endif | |
| ++frame_len; | |
| } | |
| #ifdef DEBUG | |
| printf("\n"); | |
| #endif | |
| } | |
| return 0; | |
| } | |
| int main(int argc, char **argv) | |
| { | |
| FILE *fp; | |
| int ret; | |
| if (argc != 3) { | |
| fprintf(stderr, "usage: ./atob [packet data] [mode: 0 1 2 3 4]\n"); | |
| exit(EXIT_FAILURE); | |
| } | |
| if ((fp = fopen(argv[1], "r")) == NULL) { | |
| fprintf(stderr, "can't open file: %s\n", argv[1]); | |
| exit(EXIT_FAILURE); | |
| } | |
| if ( !strcmp(argv[2], "0")) | |
| ret = atob0(fp); | |
| if ( !strcmp(argv[2], "1")) | |
| ret = atob1(fp); | |
| if ( !strcmp(argv[2], "2")) | |
| ret = atob2(fp); | |
| if ( !strcmp(argv[2], "3")) | |
| ret = atob3(fp); | |
| if ( !strcmp(argv[2], "4")) | |
| ret = atob4(fp); | |
| if (ret) { | |
| fprintf(stderr, "atob1(): error\n"); | |
| exit(EXIT_FAILURE); | |
| } | |
| fclose(fp); | |
| return 0; | |
| } | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| default: atob | |
| gcc -O -o atob atob.c | |
| clean: | |
| rm -f *.o atob |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 9000000000000000 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 01 | |
| 100000000EE6B280 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 02 | |
| 100000001DCD6500 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 03 | |
| 100000002CB41780 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 04 | |
| 100000003B9ACA00 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 05 | |
| 9000000000000000 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 06 | |
| 100000000EE6B280 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 07 | |
| 100000001DCD6500 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 08 | |
| 100000002CB41780 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 09 | |
| 100000003B9ACA00 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 0A | |
| 9000000000000000 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 0B | |
| 100000000EE6B280 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 0C | |
| 100000001DCD6500 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 0D | |
| 100000002CB41780 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 0E | |
| 100000003B9ACA00 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 0F | |
| 9000000000000000 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 10 | |
| 100000000EE6B280 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 11 | |
| 100000001DCD6500 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 12 | |
| 100000002CB41780 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 13 | |
| 100000003B9ACA00 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 14 | |
| 9000000000000000 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 15 | |
| 100000000EE6B280 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 16 | |
| 100000001DCD6500 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 03 | |
| 100000002CB41780 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 04 | |
| 100000003B9ACA00 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 05 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment