#include bool analyze(unsigned char *data, int len) { static unsigned long scanner = 0xffffffff; int o = 6 + 3 + data[ 6 + 2 ]; int n = 0; for (int i = o; i < len; i++) { scanner <<= 8; scanner |= data[ i ]; if (scanner == 0x00000100) { // fprintf(stderr, "."); n++; if (n > 1) return false; } } return true; } int main() { long long p = 0; unsigned char buf[ 4096 ]; while (true) { int r = fread(buf, 1, 6, stdin); p += r; if (r != 6) { if (r == 0) return 0; fprintf(stderr, "error 1 at: 0x%llx\n", p); return 1; } if (buf[ 0 ] != 0x00 || buf[ 1 ] != 0x00 || buf[ 2 ] != 0x01) { fprintf(stderr, "error 2 at: 0x%llx\n", p); return 2; } int l = buf[ 4 ] * 256 + buf[ 5 ]; if (l > (2048 - 6)) { fprintf(stderr, "error 3 at: 0x%llx\n", p); return 3; } r = fread(buf + 6, 1, l, stdin); p += r; if (r != l) { fprintf(stderr, "error 4 at: 0x%llx\n", p); return 4; } if (((buf[ 3 ] & 0xf0) == 0xe0) && !analyze(buf, 6 + l)) { fprintf(stderr, "error 5 at: 0x%llx\n", p); return 5; } } }