From 392d1bec43dcfb806fbdf77380c334f2cdc84778 Mon Sep 17 00:00:00 2001 From: Joshua Wise Date: Wed, 14 Jan 2009 02:10:56 -0500 Subject: [PATCH 1/1] tests: Add the new testbench. --- tests/ack.c | 25 ++ tests/corecurse.c | 25 ++ tests/j4cbo.c | 172 +++++++ tests/ram.hex | 2 +- tests/testbench.c | 109 +++++ tests/testbench.hex | 1039 +++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 1371 insertions(+), 1 deletion(-) create mode 100644 tests/ack.c create mode 100644 tests/corecurse.c create mode 100644 tests/j4cbo.c create mode 100644 tests/testbench.c create mode 100644 tests/testbench.hex diff --git a/tests/ack.c b/tests/ack.c new file mode 100644 index 0000000..ab57018 --- /dev/null +++ b/tests/ack.c @@ -0,0 +1,25 @@ +//#test return 61 + +int ack(int m, int n) +{ + if(m == 0) { + return n + 1; + } + else if(n == 0) { + return ack(m - 1, 1); + } + else { + return ack(m - 1, ack(m, n - 1)); + } +} + +void acktest() +{ int x; + if ((x = ack(3, 3)) != 61) + { + puts("FAIL: Ack test did not return 61\n"); + puthex(x); + } + else + puts("PASS: Ack test returned 61\n"); +} diff --git a/tests/corecurse.c b/tests/corecurse.c new file mode 100644 index 0000000..33576fe --- /dev/null +++ b/tests/corecurse.c @@ -0,0 +1,25 @@ +int b(int x); +int a(int x); + +int a(int x) +{ + if (x) + return b(x/2) + a(x - 1); + return 1; +} + +int b(int x) +{ + if (x) + return a(x) + a(x - 1); + return 0; +} + +int corecurse() +{ + int v = a(35) + b(32) - 4450/28; + if (v == 15411) + puts("PASS\n"); + else + puts("FAIL\n"); +} \ No newline at end of file diff --git a/tests/j4cbo.c b/tests/j4cbo.c new file mode 100644 index 0000000..3a1382e --- /dev/null +++ b/tests/j4cbo.c @@ -0,0 +1,172 @@ +//#test return 151 + +/* example tree from http://en.wikipedia.org/wiki/Huffman_coding */ + +int getbyte(int byte) +{ + if (byte == 0) return 106; + if (byte == 1) return 139; + if (byte == 2) return 120; + if (byte == 3) return 183; + if (byte == 4) return 69; + if (byte == 5) return 197; + if (byte == 6) return 147; + if (byte == 7) return 207; + if (byte == 8) return 35; + if (byte == 9) return 155; + if (byte == 10) return 122; + if (byte == 11) return 244; + if (byte == 12) return 125; + if (byte == 13) return 215; + if (byte == 14) return 69; + if (byte == 15) return 219; + if (byte == 16) return 2; + if (byte == 17) return 224; + puts("FAIL [abort]: request for byte #"); + puthex(byte); + while(1); + return 0; +} + +int getbit(int bp) +{ + int byte; + byte = getbyte(bp/8); + return (byte >> (7 - (bp % 8))) & 1; +} + +int h(int bitpos) +{ + if (getbit(bitpos)) + return h1(bitpos+1); + else + return h0(bitpos+1); +} + +int h0(int bitpos) +{ + if (getbit(bitpos)) + return h01(bitpos+1); + else + return h00(bitpos+1); +} + +int h00(int bitpos) +{ + if (getbit(bitpos)) + return h001(bitpos+1); + else + return 69+h(bitpos+1); +} + +int h001(int bitpos) +{ + if (getbit(bitpos)) + return h0011(bitpos+1); + else + return 78+h(bitpos+1); +} + +int h0011(int bitpos) +{ + if (getbit(bitpos)) + return 79+h(bitpos+1); + else + return 85+h(bitpos+1); +} + +int h01(int bitpos) +{ + if (getbit(bitpos)) + return h011(bitpos+1); + else + return 65+h(bitpos+1); +} + +int h011(int bitpos) +{ + if (getbit(bitpos)) + return 77+h(bitpos+1); + else + return 84+h(bitpos+1); +} + +int h1(bitpos) +{ + if (getbit(bitpos)) + return h11(bitpos+1); + else + return h10(bitpos+1); +} + +int h10(bitpos) +{ + if (getbit(bitpos)) + return h101(bitpos+1); + else + return h100(bitpos+1); +} + +int h100(bitpos) +{ + if (getbit(bitpos)) + return h1001(bitpos+1); + else + return 73+h(bitpos+1); +} + +int h1001(bitpos) +{ + if (getbit(bitpos)) + return 80+h(bitpos+1); + else + return 88+h(bitpos+1); +} + +int h101(bitpos) +{ + if (getbit(bitpos)) + return h1011(bitpos+1); + else + return 72+h(bitpos+1); +} + +int h1011(bitpos) +{ + if (getbit(bitpos)) + return -2169; + else + return 83+h(bitpos+1); +} + +int h11(bitpos) +{ + if (getbit(bitpos)) + return 32+h(bitpos+1); + else + return h110(bitpos+1); +} + +int h110(bitpos) +{ + if (getbit(bitpos)) + return 70+h(bitpos+1); + else + return h1100(bitpos+1); +} + +int h1100(bitpos) +{ + if (getbit(bitpos)) + return 76+h(bitpos+1); + else + return 82+h(bitpos+1); +} + +void j4cbo() +{ + if (h(0) != 151) + puts("Result was not 151\r\n"); + else + puts("Result was 151\r\n"); +} diff --git a/tests/ram.hex b/tests/ram.hex index 0f379b7..0185b5b 120000 --- a/tests/ram.hex +++ b/tests/ram.hex @@ -1 +1 @@ -costas.hex \ No newline at end of file +testbench.hex \ No newline at end of file diff --git a/tests/testbench.c b/tests/testbench.c new file mode 100644 index 0000000..ff9f96c --- /dev/null +++ b/tests/testbench.c @@ -0,0 +1,109 @@ +extern void putc(unsigned char c); + +void puts(unsigned char *s) +{ + while (*s) + putc(*(s++)); +} + +void puthex(unsigned int x) +{ + unsigned char *hex = "0123456789ABCDEF"; + int i; + + for (i = 7; i >= 0; i--) + putc(hex[(x >> (i * 4)) & 0xF]); +} + +#define putchar putc +#include "ack.c" +#include "j4cbo.c" +#include "corecurse.c" + +int fact(int n) +{ + if (n == 0) + return 1; + else + return n * fact(n-1); +} + +void facttest() +{ + if (fact(10) != 3628800) + puts("FAIL\n"); + else + puts("PASS\n"); +} + +struct tests { + char *name; + void (*test)(); +}; + +extern int ldm_bonehead(); + +__asm__( +".globl ldm_bonehead\n" +"ldm_bonehead:;" +"mov r3, lr;" +"bl 1f;" +"nop;" +"nop;" +"nop;" +"nop;" +"nop;" +"nop;" +"nop;" +"nop;" +"nop;" +"mov pc, r3\n;" +"1:\n" +"ldr r2, =0x00002FE0;" +"ldr r1, =0x0000004C;" +"mov ip, sp;" +"stmdb sp!, {fp, ip, lr, pc};" +"mov r0, #0x00880000;" +"ldmia sp, {fp, sp, pc};" +"mul r0, r1, r2;" +"nop;" +"nop;\n" +); + +void ldm_tester() +{ + int x = ldm_bonehead(); + if (x != 0x00880000) + { + puts("FAIL: result was "); + puthex(x); + puts("\n"); + } else + puts("PASS\n"); +} + +struct tests tlist[] = { + {"ldm pc/mul", ldm_tester}, + {"fact", facttest}, + {"j4cbo", j4cbo}, + {"ack", acktest}, + {"corecurse", corecurse}, + {0, 0}}; + +int main() +{ + struct tests *t; + + puts("Testbench running\n"); + + for (t = tlist; t->name; t++) + { + puts("Running "); + puts(t->name); + puts(": "); + t->test(); + } + puts("Done!\n"); + + return 0; +} diff --git a/tests/testbench.hex b/tests/testbench.hex new file mode 100644 index 0000000..ceab6f8 --- /dev/null +++ b/tests/testbench.hex @@ -0,0 +1,1039 @@ +e59fd00c +eb00038c +eafffffe +ee000510 +e1a0f00e +00003ffc +e1a0c00d +e92dd800 +e24cb004 +e24dd004 +e50b0010 +ea000007 +e51b3010 +e5d33000 +e1a02003 +e51b3010 +e2833001 +e50b3010 +e1a00002 +ebffffee +e51b3010 +e5d33000 +e3530000 +1afffff3 +e89da808 +e1a0c00d +e92dd800 +e24cb004 +e24dd00c +e50b0018 +e59f3058 +e50b3014 +e3a03007 +e50b3010 +ea00000d +e51b3010 +e1a02103 +e51b3018 +e1a03233 +e203300f +e1a02003 +e51b3014 +e0823003 +e5d33000 +e1a00003 +ebffffd4 +e51b3010 +e2433001 +e50b3010 +e51b3010 +e3530000 +aaffffee +e24bd00c +e89da800 +00000ee8 +e1a0c00d +e92dd810 +e24cb004 +e24dd00c +e50b0014 +e50b1018 +e51b3014 +e3530000 +1a000003 +e51b3018 +e2833001 +e50b301c +ea000017 +e51b3018 +e3530000 +1a000007 +e51b3014 +e2433001 +e1a00003 +e3a01001 +ebffffea +e1a03000 +e50b301c +ea00000c +e51b3014 +e2434001 +e51b3018 +e2433001 +e51b0014 +e1a01003 +ebffffe0 +e1a03000 +e1a00004 +e1a01003 +ebffffdc +e1a03000 +e50b301c +e51b301c +e1a00003 +e24bd010 +e89da810 +e1a0c00d +e92dd800 +e24cb004 +e24dd004 +e3a00003 +e3a01003 +ebffffcf +e1a03000 +e50b3010 +e51b3010 +e353003d +0a000006 +e59f3024 +e1a00003 +ebffff96 +e51b3010 +e1a00003 +ebffffa6 +ea000002 +e59f300c +e1a00003 +ebffff8f +e89da808 +00000efc +00000f20 +e1a0c00d +e92dd800 +e24cb004 +e24dd008 +e50b0010 +e51b3010 +e3530000 +1a000002 +e3a0306a +e50b3014 +ea00006c +e51b3010 +e3530001 +1a000002 +e3a0308b +e50b3014 +ea000066 +e51b3010 +e3530002 +1a000002 +e3a03078 +e50b3014 +ea000060 +e51b3010 +e3530003 +1a000002 +e3a030b7 +e50b3014 +ea00005a +e51b3010 +e3530004 +1a000002 +e3a03045 +e50b3014 +ea000054 +e51b3010 +e3530005 +1a000002 +e3a030c5 +e50b3014 +ea00004e +e51b3010 +e3530006 +1a000002 +e3a03093 +e50b3014 +ea000048 +e51b3010 +e3530007 +1a000002 +e3a030cf +e50b3014 +ea000042 +e51b3010 +e3530008 +1a000002 +e3a03023 +e50b3014 +ea00003c +e51b3010 +e3530009 +1a000002 +e3a0309b +e50b3014 +ea000036 +e51b3010 +e353000a +1a000002 +e3a0307a +e50b3014 +ea000030 +e51b3010 +e353000b +1a000002 +e3a030f4 +e50b3014 +ea00002a +e51b3010 +e353000c +1a000002 +e3a0307d +e50b3014 +ea000024 +e51b3010 +e353000d +1a000002 +e3a030d7 +e50b3014 +ea00001e +e51b3010 +e353000e +1a000002 +e3a03045 +e50b3014 +ea000018 +e51b3010 +e353000f +1a000002 +e3a030db +e50b3014 +ea000012 +e51b3010 +e3530010 +1a000002 +e3a03002 +e50b3014 +ea00000c +e51b3010 +e3530011 +1a000002 +e3a030e0 +e50b3014 +ea000006 +e59f3024 +e1a00003 +ebffff18 +e51b3010 +e1a00003 +ebffff28 +eafffffe +e51b3014 +e1a00003 +e24bd00c +e89da800 +00000f3c +e1a0c00d +e92dd800 +e24cb004 +e24dd008 +e50b0014 +e51b3014 +e2832007 +e3530000 +b1a03002 +e1a031c3 +e1a00003 +ebffff76 +e1a03000 +e50b3010 +e51b2014 +e1a03fc2 +e1a01ea3 +e0823001 +e2033007 +e0613003 +e2632007 +e51b3010 +e1a03253 +e2033001 +e1a00003 +e24bd00c +e89da800 +e1a0c00d +e92dd800 +e24cb004 +e24dd008 +e50b0010 +e51b0010 +ebffffdd +e1a03000 +e3530000 +0a000006 +e51b3010 +e2833001 +e1a00003 +eb0000b5 +e1a03000 +e50b3014 +ea000005 +e51b3010 +e2833001 +e1a00003 +eb000005 +e1a03000 +e50b3014 +e51b3014 +e1a00003 +e24bd00c +e89da800 +e1a0c00d +e92dd800 +e24cb004 +e24dd008 +e50b0010 +e51b0010 +ebffffc2 +e1a03000 +e3530000 +0a000006 +e51b3010 +e2833001 +e1a00003 +eb000061 +e1a03000 +e50b3014 +ea000005 +e51b3010 +e2833001 +e1a00003 +eb000005 +e1a03000 +e50b3014 +e51b3014 +e1a00003 +e24bd00c +e89da800 +e1a0c00d +e92dd800 +e24cb004 +e24dd008 +e50b0010 +e51b0010 +ebffffa7 +e1a03000 +e3530000 +0a000006 +e51b3010 +e2833001 +e1a00003 +eb00000d +e1a03000 +e50b3014 +ea000006 +e51b3010 +e2833001 +e1a00003 +ebffffb4 +e1a03000 +e2833045 +e50b3014 +e51b3014 +e1a00003 +e24bd00c +e89da800 +e1a0c00d +e92dd800 +e24cb004 +e24dd008 +e50b0010 +e51b0010 +ebffff8b +e1a03000 +e3530000 +0a000006 +e51b3010 +e2833001 +e1a00003 +eb00000d +e1a03000 +e50b3014 +ea000006 +e51b3010 +e2833001 +e1a00003 +ebffff98 +e1a03000 +e283304e +e50b3014 +e51b3014 +e1a00003 +e24bd00c +e89da800 +e1a0c00d +e92dd800 +e24cb004 +e24dd008 +e50b0010 +e51b0010 +ebffff6f +e1a03000 +e3530000 +0a000007 +e51b3010 +e2833001 +e1a00003 +ebffff83 +e1a03000 +e283304f +e50b3014 +ea000006 +e51b3010 +e2833001 +e1a00003 +ebffff7b +e1a03000 +e2833055 +e50b3014 +e51b3014 +e1a00003 +e24bd00c +e89da800 +e1a0c00d +e92dd800 +e24cb004 +e24dd008 +e50b0010 +e51b0010 +ebffff52 +e1a03000 +e3530000 +0a000006 +e51b3010 +e2833001 +e1a00003 +eb00000d +e1a03000 +e50b3014 +ea000006 +e51b3010 +e2833001 +e1a00003 +ebffff5f +e1a03000 +e2833041 +e50b3014 +e51b3014 +e1a00003 +e24bd00c +e89da800 +e1a0c00d +e92dd800 +e24cb004 +e24dd008 +e50b0010 +e51b0010 +ebffff36 +e1a03000 +e3530000 +0a000007 +e51b3010 +e2833001 +e1a00003 +ebffff4a +e1a03000 +e283304d +e50b3014 +ea000006 +e51b3010 +e2833001 +e1a00003 +ebffff42 +e1a03000 +e2833054 +e50b3014 +e51b3014 +e1a00003 +e24bd00c +e89da800 +e1a0c00d +e92dd800 +e24cb004 +e24dd008 +e50b0010 +e51b0010 +ebffff19 +e1a03000 +e3530000 +0a000006 +e51b3010 +e2833001 +e1a00003 +eb000097 +e1a03000 +e50b3014 +ea000005 +e51b3010 +e2833001 +e1a00003 +eb000005 +e1a03000 +e50b3014 +e51b3014 +e1a00003 +e24bd00c +e89da800 +e1a0c00d +e92dd800 +e24cb004 +e24dd008 +e50b0010 +e51b0010 +ebfffefe +e1a03000 +e3530000 +0a000006 +e51b3010 +e2833001 +e1a00003 +eb000045 +e1a03000 +e50b3014 +ea000005 +e51b3010 +e2833001 +e1a00003 +eb000005 +e1a03000 +e50b3014 +e51b3014 +e1a00003 +e24bd00c +e89da800 +e1a0c00d +e92dd800 +e24cb004 +e24dd008 +e50b0010 +e51b0010 +ebfffee3 +e1a03000 +e3530000 +0a000006 +e51b3010 +e2833001 +e1a00003 +eb00000d +e1a03000 +e50b3014 +ea000006 +e51b3010 +e2833001 +e1a00003 +ebfffef0 +e1a03000 +e2833049 +e50b3014 +e51b3014 +e1a00003 +e24bd00c +e89da800 +e1a0c00d +e92dd800 +e24cb004 +e24dd008 +e50b0010 +e51b0010 +ebfffec7 +e1a03000 +e3530000 +0a000007 +e51b3010 +e2833001 +e1a00003 +ebfffedb +e1a03000 +e2833050 +e50b3014 +ea000006 +e51b3010 +e2833001 +e1a00003 +ebfffed3 +e1a03000 +e2833058 +e50b3014 +e51b3014 +e1a00003 +e24bd00c +e89da800 +e1a0c00d +e92dd800 +e24cb004 +e24dd008 +e50b0010 +e51b0010 +ebfffeaa +e1a03000 +e3530000 +0a000006 +e51b3010 +e2833001 +e1a00003 +eb00000d +e1a03000 +e50b3014 +ea000006 +e51b3010 +e2833001 +e1a00003 +ebfffeb7 +e1a03000 +e2833048 +e50b3014 +e51b3014 +e1a00003 +e24bd00c +e89da800 +e1a0c00d +e92dd800 +e24cb004 +e24dd008 +e50b0010 +e51b0010 +ebfffe8e +e1a03000 +e3530000 +0a000005 +e3e03e87 +e50b3014 +e51b3014 +e2433008 +e50b3014 +ea000006 +e51b3010 +e2833001 +e1a00003 +ebfffe9c +e1a03000 +e2833053 +e50b3014 +e51b3014 +e1a00003 +e24bd00c +e89da800 +e1a0c00d +e92dd800 +e24cb004 +e24dd008 +e50b0010 +e51b0010 +ebfffe73 +e1a03000 +e3530000 +0a000007 +e51b3010 +e2833001 +e1a00003 +ebfffe87 +e1a03000 +e2833020 +e50b3014 +ea000005 +e51b3010 +e2833001 +e1a00003 +eb000005 +e1a03000 +e50b3014 +e51b3014 +e1a00003 +e24bd00c +e89da800 +e1a0c00d +e92dd800 +e24cb004 +e24dd008 +e50b0010 +e51b0010 +ebfffe57 +e1a03000 +e3530000 +0a000007 +e51b3010 +e2833001 +e1a00003 +ebfffe6b +e1a03000 +e2833046 +e50b3014 +ea000005 +e51b3010 +e2833001 +e1a00003 +eb000005 +e1a03000 +e50b3014 +e51b3014 +e1a00003 +e24bd00c +e89da800 +e1a0c00d +e92dd800 +e24cb004 +e24dd008 +e50b0010 +e51b0010 +ebfffe3b +e1a03000 +e3530000 +0a000007 +e51b3010 +e2833001 +e1a00003 +ebfffe4f +e1a03000 +e283304c +e50b3014 +ea000006 +e51b3010 +e2833001 +e1a00003 +ebfffe47 +e1a03000 +e2833052 +e50b3014 +e51b3014 +e1a00003 +e24bd00c +e89da800 +e1a0c00d +e92dd800 +e24cb004 +e3a00000 +ebfffe3b +e1a03000 +e3530097 +0a000003 +e59f3018 +e1a00003 +ebfffd2a +ea000002 +e59f300c +e1a00003 +ebfffd26 +e89da800 +00000f60 +00000f78 +e1a0c00d +e92dd810 +e24cb004 +e24dd008 +e50b0014 +e51b3014 +e3530000 +0a00000e +e51b2014 +e1a03fa2 +e0833002 +e1a030c3 +e1a00003 +eb00000e +e1a04000 +e51b3014 +e2433001 +e1a00003 +ebffffec +e1a03000 +e0844003 +e50b4018 +ea000001 +e3a03001 +e50b3018 +e51b3018 +e1a00003 +e24bd010 +e89da810 +e1a0c00d +e92dd810 +e24cb004 +e24dd008 +e50b0014 +e51b3014 +e3530000 +0a00000a +e51b0014 +ebffffd8 +e1a04000 +e51b3014 +e2433001 +e1a00003 +ebffffd3 +e1a03000 +e0844003 +e50b4018 +ea000001 +e3a03000 +e50b3018 +e51b3018 +e1a00003 +e24bd010 +e89da810 +e1a0c00d +e92dd810 +e24cb004 +e24dd004 +e3a00023 +ebffffc3 +e1a04000 +e3a00020 +ebffffdd +e1a03000 +e0843003 +e243309e +e50b3014 +e51b2014 +e3a03b0f +e2833033 +e1520003 +1a000003 +e59f3018 +e1a00003 +ebfffcd8 +ea000002 +e59f300c +e1a00003 +ebfffcd4 +e89da818 +00000f8c +00000f94 +e1a0c00d +e92dd800 +e24cb004 +e24dd008 +e50b0010 +e51b3010 +e3530000 +1a000002 +e3a01001 +e50b1014 +ea000007 +e51b3010 +e2433001 +e1a00003 +ebfffff0 +e1a02000 +e51b3010 +e0010293 +e50b1014 +e51b3014 +e1a00003 +e24bd00c +e89da800 +e1a0c00d +e92dd800 +e24cb004 +e3a0000a +ebffffe3 +e1a02000 +e3a039dd +e2833c1f +e1520003 +0a000003 +e59f3018 +e1a00003 +ebfffcad +ea000002 +e59f300c +e1a00003 +ebfffca9 +e89da800 +00000f94 +00000f8c +e1a0300e +eb000009 +e1a00000 +e1a00000 +e1a00000 +e1a00000 +e1a00000 +e1a00000 +e1a00000 +e1a00000 +e1a00000 +e1a0f003 +e59f2130 +e3a0104c +e1a0c00d +e92dd800 +e3a00722 +e89da800 +e0000291 +e1a00000 +e1a00000 +e1a0c00d +e92dd800 +e24cb004 +e24dd004 +ebffffe5 +e1a03000 +e50b3010 +e51b3010 +e3530722 +0a000009 +e59f3030 +e1a00003 +ebfffc84 +e51b3010 +e1a00003 +ebfffc94 +e59f301c +e1a00003 +ebfffc7e +ea000002 +e59f3010 +e1a00003 +ebfffc7a +e89da808 +00000f9c +00000fb0 +00000f8c +e1a0c00d +e92dd800 +e24cb004 +e24dd004 +e59f307c +e1a00003 +ebfffc6f +e59f3074 +e50b3010 +ea000010 +e59f306c +e1a00003 +ebfffc69 +e51b3010 +e5933000 +e1a00003 +ebfffc65 +e59f3054 +e1a00003 +ebfffc62 +e51b3010 +e5933004 +e1a0e00f +e1a0f003 +e51b3010 +e2833008 +e50b3010 +e51b3010 +e5933000 +e3530000 +1affffea +e59f3020 +e1a00003 +ebfffc54 +e3a03000 +e1a00003 +e89da808 +00000fe0 +0000100c +00000ff4 +00001000 +00001004 +00002fe0 +33323130 +37363534 +42413938 +46454443 +00000000 +4c494146 +6341203a +6574206b +64207473 +6e206469 +7220746f +72757465 +3136206e +0000000a +53534150 +6341203a +6574206b +72207473 +72757465 +2064656e +000a3136 +4c494146 +62615b20 +5d74726f +6572203a +73657571 +6f662074 +79622072 +23206574 +00000000 +75736552 +7720746c +6e207361 +3120746f +0a0d3135 +00000000 +75736552 +7720746c +31207361 +0a0d3135 +00000000 +53534150 +0000000a +4c494146 +0000000a +4c494146 +6572203a +746c7573 +73617720 +00000020 +0000000a +206d646c +6d2f6370 +00006c75 +74636166 +00000000 +6263346a +0000006f +006b6361 +65726f63 +73727563 +00000065 +74736554 +636e6562 +75722068 +6e696e6e +00000a67 +6e6e7552 +20676e69 +00000000 +0000203a +656e6f44 +00000a21 +00000fb4 +00000dd0 +00000fc0 +00000d2c +00000fc8 +00000b40 +00000fd0 +00000180 +00000fd4 +00000c60 +00000000 +00000000 -- 2.39.2