From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24336 invoked by alias); 13 Mar 2003 23:46:00 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 24290 invoked by uid 71); 13 Mar 2003 23:46:00 -0000 Resent-Date: 13 Mar 2003 23:46:00 -0000 Resent-Message-ID: <20030313234600.24288.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, dat94ali@ludat.lth.se Received: (qmail 17088 invoked by uid 48); 13 Mar 2003 23:36:30 -0000 Message-Id: <20030313233630.17087.qmail@sources.redhat.com> Date: Thu, 13 Mar 2003 23:46:00 -0000 From: dat94ali@ludat.lth.se Reply-To: dat94ali@ludat.lth.se To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: target/10067: GCC-3.2.2 outputs invalid asm on sparc64 X-SW-Source: 2003-03/txt/msg00798.txt.bz2 List-Id: >Number: 10067 >Category: target >Synopsis: GCC-3.2.2 outputs invalid asm on sparc64 >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Thu Mar 13 23:46:00 UTC 2003 >Closed-Date: >Last-Modified: >Originator: dat94ali@ludat.lth.se >Release: gcc-3.2.2 >Organization: >Environment: sparc-unknown-netbsdelf16 gcc 3.2.2 binutils 2.13.2.1 >Description: When building a generic cross-compiler from sparc to sparc64 (using GNU make and native gcc 3.2.2 for the build), the resulting "xgcc" will output assembly operands in incorrect order, making GNU as stop on error. GCC will output branch-with-prediction instructions like "ba,pt,a %xcc LABEL" which is invalid. The correct order is "ba,a,pt %xcc LABEL". This did not happen with GCC 3.2.1 so it is some kind of regression. The error does not occur while building a native gcc-3.2.2 on sparc64 NetBSD-1.5ZC configured with --enable-languages=c,c++ and similarly configured binutils 2.13.2.1 Binutils and GCC were both configured with: "--target=sparc64-elf --program-prefix=sparc64- --enable-languages=c,c++" and newlib-1.11.0 was linked into the gcc tree for automatic building, with NetBSD startup files (crt*.o) in /usr/local/sparc64/lib to make configure scripts that try to test whether xgcc works by attempting to link something happy. The errors occurred while trying to build newlib/libc/stdlib/ A transcript of the failing session follows: -----8<-----------8<-----------8<-----------8<-----------8<------ Reading specs from /usr/tmp/gcc-3.2.2/work/gcc/specs Configured with: ../configure --prefix=/usr/local/sparc64 --enable-languages=c,c++ --target=sparc64-elf --program-prefix=sparc64- Thread model: single gcc version 3.2.2 /usr/tmp/gcc-3.2.2/work/gcc/cpp0 -lang-c -nostdinc -v -I. -I../../../../../newlib/libc/stdlib -iprefix /usr/tmp/gcc-3.2.2/work/gcc/../lib/gcc-lib/sparc64-elf/3.2.2/ -isystem /usr/tmp/gcc-3.2.2/work/gcc/include -isystem /usr/tmp/gcc-3.2.2/work/sparc64-elf/newlib/include -isystem /usr/local/sparc64/sparc64-elf/bin/include -isystem /usr/local/sparc64/sparc64-elf/lib/include -D__GNUC__=3 -D__GNUC_MINOR__=2 -D__GNUC_PATCHLEVEL__=2 -D__GXX_ABI_VERSION=102 -Dsparc -D__ELF__ -D__sparc__ -D__ELF__ -D__sparc -Acpu=sparc -Amachine=sparc -D__OPTIMIZE__ -D__STDC_HOSTED__=1 -D__supersparc__ -D__sparc_v8__ -D__arch64__ -Acpu=sparc64 -Amachine=sparc64 -D__svr4__ -DPACKAGE="newlib" -DVERSION="1.11.0" -DMALLOC_ALIGNMENT=8 -DREENTRANT_SYSCALLS_PROVIDED -DHAVE_BLKSIZE -DHAVE_GETTIMEOFDAY -DHAVE_FCNTL -DTARGET_PTR_SIZE=64 -DINTERNAL_NEWLIB -DDEFINE_MALLOPT -isystem /usr/tmp/gcc-3.2.2/work/sparc64-elf/newlib/targ-include -isystem /usr/tmp/gcc-3.2.2/newlib/libc/include -isystem /usr/local/sparc64/sparc64-elf/include ../../../../../newlib/libc/stdlib/mallocr.c mallocr.i ignoring nonexistent directory "/usr/tmp/gcc-3.2.2/work/sparc64-elf/newlib/include" ignoring nonexistent directory "/usr/local/sparc64/sparc64-elf/bin/include" ignoring nonexistent directory "/usr/local/sparc64/sparc64-elf/lib/include" ignoring nonexistent directory "/usr/local/sparc64/sparc64-elf/include" GNU CPP version 3.2.2 (cpplib) (sparc64-elf) #include "..." search starts here: #include <...> search starts here: . ../../../../../newlib/libc/stdlib /usr/tmp/gcc-3.2.2/work/gcc/include /usr/tmp/gcc-3.2.2/work/sparc64-elf/newlib/targ-include /usr/tmp/gcc-3.2.2/newlib/libc/include End of search list. /usr/tmp/gcc-3.2.2/work/gcc/cc1 -fpreprocessed mallocr.i -quiet -dumpbase mallocr.c -mcpu=supersparc -mtune=supersparc -O2 -O2 -O2 -version -fno-builtin -o mallocr.s GNU CPP version 3.2.2 (cpplib) (sparc64-elf) GNU C version 3.2.2 (sparc64-elf) compiled by GNU C version 3.2.2. /usr/local/sparc64/sparc64-elf/bin/as -V -s -64 -no-undeclared-regs -o malloptr.o mallocr.s GNU assembler version 2.13.2.1 (sparc64-elf) using BFD version 2.13.2.1 mallocr.s: Assembler messages: mallocr.s:24: Error: Illegal operands mallocr.s:43: Error: Illegal operands -----8<-----------8<-----------8<-----------8<-----------8<------ >How-To-Repeat: Configure and try to build a sparc->sparc64 cross compiler, and compile any C source leading to the emission of branch with prediction instructions with the "annul" bit set, such as newlib-1.11.0/newlib/libc/stdlib/mallocr.c (preprocessed source included) >Fix: Correct order of emission of attributes to branch instructions with predictions; The ",a" modifier ("annul" bit) should always appear first (sections A.3 - A.7 of the SPARCv9 architecture manual). >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="mallocr.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="mallocr.i" IyAxICIuLi8uLi8uLi8uLi8uLi9uZXdsaWIvbGliYy9zdGRsaWIvbWFsbG9jci5jIgojIDEgIjxi dWlsdC1pbj4iCiMgMSAiPGNvbW1hbmQgbGluZT4iCiMgMSAiLi4vLi4vLi4vLi4vLi4vbmV3bGli L2xpYmMvc3RkbGliL21hbGxvY3IuYyIKIyAyNjAgIi4uLy4uLy4uLy4uLy4uL25ld2xpYi9saWJj L3N0ZGxpYi9tYWxsb2NyLmMiCiMgMSAiL3Vzci90bXAvZ2NjLTMuMi4yL3dvcmsvZ2NjL2luY2x1 ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMTUxICIvdXNyL3RtcC9nY2MtMy4yLjIvd29yay9nY2MvaW5j bHVkZS9zdGRkZWYuaCIgMyA0CnR5cGVkZWYgbG9uZyBpbnQgcHRyZGlmZl90OwojIDIxMyAiL3Vz ci90bXAvZ2NjLTMuMi4yL3dvcmsvZ2NjL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAp0eXBlZGVmIGxv bmcgdW5zaWduZWQgaW50IHNpemVfdDsKIyAzMjUgIi91c3IvdG1wL2djYy0zLjIuMi93b3JrL2dj Yy9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKdHlwZWRlZiBzaG9ydCB1bnNpZ25lZCBpbnQgd2NoYXJf dDsKIyAyNjEgIi4uLy4uLy4uLy4uLy4uL25ld2xpYi9saWJjL3N0ZGxpYi9tYWxsb2NyLmMiIDIK IyAyNjkgIi4uLy4uLy4uLy4uLy4uL25ld2xpYi9saWJjL3N0ZGxpYi9tYWxsb2NyLmMiCiMgMSAi L3Vzci90bXAvZ2NjLTMuMi4yL25ld2xpYi9saWJjL2luY2x1ZGUvc3RkaW8uaCIgMSAzIDQKIyAy OSAiL3Vzci90bXAvZ2NjLTMuMi4yL25ld2xpYi9saWJjL2luY2x1ZGUvc3RkaW8uaCIgMyA0CiMg MSAiL3Vzci90bXAvZ2NjLTMuMi4yL25ld2xpYi9saWJjL2luY2x1ZGUvX2Fuc2kuaCIgMSAzIDQK IyAxNSAiL3Vzci90bXAvZ2NjLTMuMi4yL25ld2xpYi9saWJjL2luY2x1ZGUvX2Fuc2kuaCIgMyA0 CiMgMSAiL3Vzci90bXAvZ2NjLTMuMi4yL3dvcmsvc3BhcmM2NC1lbGYvbmV3bGliL3RhcmctaW5j bHVkZS9uZXdsaWIuaCIgMSAzIDQKIyAxNiAiL3Vzci90bXAvZ2NjLTMuMi4yL25ld2xpYi9saWJj L2luY2x1ZGUvX2Fuc2kuaCIgMiAzIDQKIyAxICIvdXNyL3RtcC9nY2MtMy4yLjIvbmV3bGliL2xp YmMvaW5jbHVkZS9zeXMvY29uZmlnLmgiIDEgMyA0CgoKCiMgMSAiL3Vzci90bXAvZ2NjLTMuMi4y L25ld2xpYi9saWJjL2luY2x1ZGUvbWFjaGluZS9pZWVlZnAuaCIgMSAzIDQKIyA1ICIvdXNyL3Rt cC9nY2MtMy4yLjIvbmV3bGliL2xpYmMvaW5jbHVkZS9zeXMvY29uZmlnLmgiIDIgMyA0CiMgMTcg Ii91c3IvdG1wL2djYy0zLjIuMi9uZXdsaWIvbGliYy9pbmNsdWRlL19hbnNpLmgiIDIgMyA0CiMg MzAgIi91c3IvdG1wL2djYy0zLjIuMi9uZXdsaWIvbGliYy9pbmNsdWRlL3N0ZGlvLmgiIDIgMyA0 CgoKCgojIDEgIi91c3IvdG1wL2djYy0zLjIuMi93b3JrL2djYy9pbmNsdWRlL3N0ZGRlZi5oIiAx IDMgNAojIDM1ICIvdXNyL3RtcC9nY2MtMy4yLjIvbmV3bGliL2xpYmMvaW5jbHVkZS9zdGRpby5o IiAyIDMgNAoKCiMgMSAiL3Vzci90bXAvZ2NjLTMuMi4yL3dvcmsvZ2NjL2luY2x1ZGUvc3RkYXJn LmgiIDEgMyA0CiMgNDMgIi91c3IvdG1wL2djYy0zLjIuMi93b3JrL2djYy9pbmNsdWRlL3N0ZGFy Zy5oIiAzIDQKdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlzdDsKIyAzOCAi L3Vzci90bXAvZ2NjLTMuMi4yL25ld2xpYi9saWJjL2luY2x1ZGUvc3RkaW8uaCIgMiAzIDQKCgoK CgoKCiMgMSAiL3Vzci90bXAvZ2NjLTMuMi4yL25ld2xpYi9saWJjL2luY2x1ZGUvc3lzL3JlZW50 LmgiIDEgMyA0CiMgMTQgIi91c3IvdG1wL2djYy0zLjIuMi9uZXdsaWIvbGliYy9pbmNsdWRlL3N5 cy9yZWVudC5oIiAzIDQKIyAxICIvdXNyL3RtcC9nY2MtMy4yLjIvbmV3bGliL2xpYmMvaW5jbHVk ZS9zeXMvX3R5cGVzLmgiIDEgMyA0CiMgMTIgIi91c3IvdG1wL2djYy0zLjIuMi9uZXdsaWIvbGli Yy9pbmNsdWRlL3N5cy9fdHlwZXMuaCIgMyA0CnR5cGVkZWYgbG9uZyBfb2ZmX3Q7Cl9fZXh0ZW5z aW9uX18gdHlwZWRlZiBsb25nIGxvbmcgX29mZjY0X3Q7CgoKdHlwZWRlZiBpbnQgX3NzaXplX3Q7 CgoKCgoKIyAxICIvdXNyL3RtcC9nY2MtMy4yLjIvd29yay9nY2MvaW5jbHVkZS9zdGRkZWYuaCIg MSAzIDQKIyAzNTQgIi91c3IvdG1wL2djYy0zLjIuMi93b3JrL2djYy9pbmNsdWRlL3N0ZGRlZi5o IiAzIDQKdHlwZWRlZiBsb25nIGludCB3aW50X3Q7CiMgMjMgIi91c3IvdG1wL2djYy0zLjIuMi9u ZXdsaWIvbGliYy9pbmNsdWRlL3N5cy9fdHlwZXMuaCIgMiAzIDQKCgp0eXBlZGVmIHN0cnVjdAp7 CiAgaW50IF9fY291bnQ7CiAgdW5pb24KICB7CiAgICB3aW50X3QgX193Y2g7CiAgICB1bnNpZ25l ZCBjaGFyIF9fd2NoYls0XTsKICB9IF9fdmFsdWU7Cn0gX21ic3RhdGVfdDsKCnR5cGVkZWYgaW50 IF9mbG9ja190OwojIDE1ICIvdXNyL3RtcC9nY2MtMy4yLjIvbmV3bGliL2xpYmMvaW5jbHVkZS9z eXMvcmVlbnQuaCIgMiAzIDQKCgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgaW50IF9fVUxvbmc7CiMg NDAgIi91c3IvdG1wL2djYy0zLjIuMi9uZXdsaWIvbGliYy9pbmNsdWRlL3N5cy9yZWVudC5oIiAz IDQKc3RydWN0IF9CaWdpbnQKewogIHN0cnVjdCBfQmlnaW50ICpfbmV4dDsKICBpbnQgX2ssIF9t YXh3ZHMsIF9zaWduLCBfd2RzOwogIF9fVUxvbmcgX3hbMV07Cn07CgoKc3RydWN0IF9fdG0Kewog IGludCBfX3RtX3NlYzsKICBpbnQgX190bV9taW47CiAgaW50IF9fdG1faG91cjsKICBpbnQgX190 bV9tZGF5OwogIGludCBfX3RtX21vbjsKICBpbnQgX190bV95ZWFyOwogIGludCBfX3RtX3dkYXk7 CiAgaW50IF9fdG1feWRheTsKICBpbnQgX190bV9pc2RzdDsKfTsKIyA2OCAiL3Vzci90bXAvZ2Nj LTMuMi4yL25ld2xpYi9saWJjL2luY2x1ZGUvc3lzL3JlZW50LmgiIDMgNApzdHJ1Y3QgX2F0ZXhp dCB7CiAgICAgICAgc3RydWN0IF9hdGV4aXQgKl9uZXh0OwogICAgICAgIGludCBfaW5kOwogICAg ICAgIHZvaWQgKCpfZm5zWzMyXSkodm9pZCk7CiAgICAgICAgdm9pZCAqX2ZuYXJnc1szMl07CiAg ICAgICAgX19VTG9uZyBfZm50eXBlczsKfTsKIyA5MSAiL3Vzci90bXAvZ2NjLTMuMi4yL25ld2xp Yi9saWJjL2luY2x1ZGUvc3lzL3JlZW50LmgiIDMgNApzdHJ1Y3QgX19zYnVmIHsKICAgICAgICB1 bnNpZ25lZCBjaGFyICpfYmFzZTsKICAgICAgICBpbnQgX3NpemU7Cn07CgoKCgoKCnR5cGVkZWYg bG9uZyBfZnBvc190OwojIDE1NiAiL3Vzci90bXAvZ2NjLTMuMi4yL25ld2xpYi9saWJjL2luY2x1 ZGUvc3lzL3JlZW50LmgiIDMgNApzdHJ1Y3QgX19zRklMRSB7CiAgdW5zaWduZWQgY2hhciAqX3A7 CiAgaW50IF9yOwogIGludCBfdzsKICBzaG9ydCBfZmxhZ3M7CiAgc2hvcnQgX2ZpbGU7CiAgc3Ry dWN0IF9fc2J1ZiBfYmY7CiAgaW50IF9sYmZzaXplOwoKCgoKCgogIHZvaWQgKiBfY29va2llOwoK ICBpbnQgKCpfcmVhZCkgKHZvaWQgKiBfY29va2llLCBjaGFyICpfYnVmLCBpbnQgX24pOwogIGlu dCAoKl93cml0ZSkgKHZvaWQgKiBfY29va2llLCBjb25zdCBjaGFyICpfYnVmLCBpbnQgX24pOwoK ICBfZnBvc190ICgqX3NlZWspICh2b2lkICogX2Nvb2tpZSwgX2Zwb3NfdCBfb2Zmc2V0LCBpbnQg X3doZW5jZSk7CiAgaW50ICgqX2Nsb3NlKSAodm9pZCAqIF9jb29raWUpOwoKCiAgc3RydWN0IF9f c2J1ZiBfdWI7CiAgdW5zaWduZWQgY2hhciAqX3VwOwogIGludCBfdXI7CgoKICB1bnNpZ25lZCBj aGFyIF91YnVmWzNdOwogIHVuc2lnbmVkIGNoYXIgX25idWZbMV07CgoKICBzdHJ1Y3QgX19zYnVm IF9sYjsKCgogIGludCBfYmxrc2l6ZTsKICBpbnQgX29mZnNldDsKCgogIHN0cnVjdCBfcmVlbnQg Kl9kYXRhOwoKCgogIF9mbG9ja190IF9sb2NrOwoKfTsKIyAyNDkgIi91c3IvdG1wL2djYy0zLjIu Mi9uZXdsaWIvbGliYy9pbmNsdWRlL3N5cy9yZWVudC5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QgX19z RklMRSBfX0ZJTEU7CgoKc3RydWN0IF9nbHVlCnsKICBzdHJ1Y3QgX2dsdWUgKl9uZXh0OwogIGlu dCBfbmlvYnM7CiAgX19GSUxFICpfaW9iczsKfTsKIyAyODAgIi91c3IvdG1wL2djYy0zLjIuMi9u ZXdsaWIvbGliYy9pbmNsdWRlL3N5cy9yZWVudC5oIiAzIDQKc3RydWN0IF9yYW5kNDggewogIHVu c2lnbmVkIHNob3J0IF9zZWVkWzNdOwogIHVuc2lnbmVkIHNob3J0IF9tdWx0WzNdOwogIHVuc2ln bmVkIHNob3J0IF9hZGQ7CgoKCgp9OwojIDUzMiAiL3Vzci90bXAvZ2NjLTMuMi4yL25ld2xpYi9s aWJjL2luY2x1ZGUvc3lzL3JlZW50LmgiIDMgNApzdHJ1Y3QgX3JlZW50CnsKICBpbnQgX2Vycm5v OwoKCgoKICBfX0ZJTEUgKl9zdGRpbiwgKl9zdGRvdXQsICpfc3RkZXJyOwoKICBpbnQgX2luYzsK ICBjaGFyIF9lbWVyZ2VuY3lbMjVdOwoKICBpbnQgX2N1cnJlbnRfY2F0ZWdvcnk7CiAgY29uc3Qg Y2hhciAqX2N1cnJlbnRfbG9jYWxlOwoKICBpbnQgX19zZGlkaW5pdDsKCiAgdm9pZCAoKl9fY2xl YW51cCkgKHN0cnVjdCBfcmVlbnQgKik7CgoKICBzdHJ1Y3QgX0JpZ2ludCAqX3Jlc3VsdDsKICBp bnQgX3Jlc3VsdF9rOwogIHN0cnVjdCBfQmlnaW50ICpfcDVzOwogIHN0cnVjdCBfQmlnaW50ICoq X2ZyZWVsaXN0OwoKCiAgaW50IF9jdnRsZW47CiAgY2hhciAqX2N2dGJ1ZjsKCiAgdW5pb24KICAg IHsKICAgICAgc3RydWN0CiAgICAgICAgewogICAgICAgICAgdW5zaWduZWQgaW50IF91bnVzZWRf cmFuZDsKICAgICAgICAgIGNoYXIgKiBfc3RydG9rX2xhc3Q7CiAgICAgICAgICBjaGFyIF9hc2N0 aW1lX2J1ZlsyNl07CiAgICAgICAgICBzdHJ1Y3QgX190bSBfbG9jYWx0aW1lX2J1ZjsKICAgICAg ICAgIGludCBfZ2FtbWFfc2lnbmdhbTsKICAgICAgICAgIF9fZXh0ZW5zaW9uX18gdW5zaWduZWQg bG9uZyBsb25nIF9yYW5kX25leHQ7CiAgICAgICAgICBzdHJ1Y3QgX3JhbmQ0OCBfcjQ4OwogICAg ICAgICAgX21ic3RhdGVfdCBfbWJsZW5fc3RhdGU7CiAgICAgICAgICBfbWJzdGF0ZV90IF9tYnRv d2Nfc3RhdGU7CiAgICAgICAgICBfbWJzdGF0ZV90IF93Y3RvbWJfc3RhdGU7CiAgICAgICAgICBj aGFyIF9sNjRhX2J1Zls4XTsKICAgICAgICAgIGNoYXIgX3NpZ25hbF9idWZbMjRdOwogICAgICAg ICAgaW50IF9nZXRkYXRlX2VycjsKICAgICAgICAgIF9tYnN0YXRlX3QgX21icmxlbl9zdGF0ZTsK ICAgICAgICAgIF9tYnN0YXRlX3QgX21icnRvd2Nfc3RhdGU7CiAgICAgICAgICBfbWJzdGF0ZV90 IF9tYnNydG93Y3Nfc3RhdGU7CiAgICAgICAgICBfbWJzdGF0ZV90IF93Y3J0b21iX3N0YXRlOwog ICAgICAgICAgX21ic3RhdGVfdCBfd2NzcnRvbWJzX3N0YXRlOwogICAgICAgIH0gX3JlZW50OwoK CgogICAgICBzdHJ1Y3QKICAgICAgICB7CgogICAgICAgICAgdW5zaWduZWQgY2hhciAqIF9uZXh0 ZlszMF07CiAgICAgICAgICB1bnNpZ25lZCBpbnQgX25tYWxsb2NbMzBdOwogICAgICAgIH0gX3Vu dXNlZDsKICAgIH0gX25ldzsKCgogIHN0cnVjdCBfYXRleGl0ICpfYXRleGl0OwogIHN0cnVjdCBf YXRleGl0IF9hdGV4aXQwOwoKCiAgdm9pZCAoKiooX3NpZ19mdW5jKSkoaW50KTsKCgoKCiAgc3Ry dWN0IF9nbHVlIF9fc2dsdWU7CiAgX19GSUxFIF9fc2ZbM107Cn07CiMgNzI4ICIvdXNyL3RtcC9n Y2MtMy4yLjIvbmV3bGliL2xpYmMvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMyA0CmV4dGVybiBzdHJ1 Y3QgX3JlZW50ICpfaW1wdXJlX3B0ciA7Cgp2b2lkIF9yZWNsYWltX3JlZW50IChzdHJ1Y3QgX3Jl ZW50ICopOwojIDQ2ICIvdXNyL3RtcC9nY2MtMy4yLjIvbmV3bGliL2xpYmMvaW5jbHVkZS9zdGRp by5oIiAyIDMgNAojIDEgIi91c3IvdG1wL2djYy0zLjIuMi9uZXdsaWIvbGliYy9pbmNsdWRlL3N5 cy90eXBlcy5oIiAxIDMgNAojIDI0ICIvdXNyL3RtcC9nY2MtMy4yLjIvbmV3bGliL2xpYmMvaW5j bHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgc2hvcnQgaW50IF9faW50MTZfdDsKdHlwZWRl ZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191aW50MTZfdDsKCgoKCgp0eXBlZGVmIGludCBfX2ludDMy X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7CgoKCnR5cGVkZWYgbG9uZyBpbnQg X19pbnQ2NF90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9fdWludDY0X3Q7CiMgNTkgIi91 c3IvdG1wL2djYy0zLjIuMi9uZXdsaWIvbGliYy9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKIyAx ICIvdXNyL3RtcC9nY2MtMy4yLjIvd29yay9nY2MvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyA2 MCAiL3Vzci90bXAvZ2NjLTMuMi4yL25ld2xpYi9saWJjL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIg MyA0CiMgMSAiL3Vzci90bXAvZ2NjLTMuMi4yL25ld2xpYi9saWJjL2luY2x1ZGUvbWFjaGluZS90 eXBlcy5oIiAxIDMgNAojIDM2ICIvdXNyL3RtcC9nY2MtMy4yLjIvbmV3bGliL2xpYmMvaW5jbHVk ZS9tYWNoaW5lL3R5cGVzLmgiIDMgNAp0eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYg aW50IF9fcGlkX3Q7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIGludCBfX2xvZmZf dDsKIyA2MSAiL3Vzci90bXAvZ2NjLTMuMi4yL25ld2xpYi9saWJjL2luY2x1ZGUvc3lzL3R5cGVz LmgiIDIgMyA0CiMgODIgIi91c3IvdG1wL2djYy0zLjIuMi9uZXdsaWIvbGliYy9pbmNsdWRlL3N5 cy90eXBlcy5oIiAzIDQKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVfY2hhcjsKdHlwZWRlZiB1bnNp Z25lZCBzaG9ydCB1X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDsKdHlwZWRlZiB1 bnNpZ25lZCBsb25nIHVfbG9uZzsKCgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1c2hvcnQ7CnR5 cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBjbG9ja190 OwoKCgoKdHlwZWRlZiBsb25nIHRpbWVfdDsKCgoKCnN0cnVjdCB0aW1lc3BlYyB7CiAgdGltZV90 IHR2X3NlYzsKICBsb25nIHR2X25zZWM7Cn07CgpzdHJ1Y3QgaXRpbWVyc3BlYyB7CiAgc3RydWN0 IHRpbWVzcGVjIGl0X2ludGVydmFsOwogIHN0cnVjdCB0aW1lc3BlYyBpdF92YWx1ZTsKfTsKCgp0 eXBlZGVmIGxvbmcgZGFkZHJfdDsKdHlwZWRlZiBjaGFyICogY2FkZHJfdDsKCgoKCgp0eXBlZGVm IHVuc2lnbmVkIGxvbmcgaW5vX3Q7CiMgMTU4ICIvdXNyL3RtcC9nY2MtMy4yLjIvbmV3bGliL2xp YmMvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgc2hvcnQgZGV2X3Q7CgoKCgp0eXBl ZGVmIGxvbmcgb2ZmX3Q7Cgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVpZF90Owp0eXBlZGVmIHVu c2lnbmVkIHNob3J0IGdpZF90OwoKCnR5cGVkZWYgaW50IHBpZF90Owp0eXBlZGVmIGxvbmcga2V5 X3Q7CnR5cGVkZWYgX3NzaXplX3Qgc3NpemVfdDsKCgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9u ZyBtb2RlX3Q7CiMgMTg4ICIvdXNyL3RtcC9nY2MtMy4yLjIvbmV3bGliL2xpYmMvaW5jbHVkZS9z eXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgbmxpbmtfdDsKIyAyMTAgIi91 c3IvdG1wL2djYy0zLjIuMi9uZXdsaWIvbGliYy9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlw ZWRlZiBsb25nIGZkX21hc2s7CgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBfdHlwZXNfZmRfc2V0IHsK ICAgICAgICBmZF9tYXNrIGZkc19iaXRzWygoKDY0KSsoKChzaXplb2YgKGZkX21hc2spICogOCkp LTEpKS8oKHNpemVvZiAoZmRfbWFzaykgKiA4KSkpXTsKfSBfdHlwZXNfZmRfc2V0OwojIDQ3ICIv dXNyL3RtcC9nY2MtMy4yLjIvbmV3bGliL2xpYmMvaW5jbHVkZS9zdGRpby5oIiAyIDMgNAoKCgp0 eXBlZGVmIF9mcG9zX3QgZnBvc190Owp0eXBlZGVmIF9fRklMRSBGSUxFOwoKCgoKCiMgMSAiL3Vz ci90bXAvZ2NjLTMuMi4yL25ld2xpYi9saWJjL2luY2x1ZGUvc3lzL3N0ZGlvLmgiIDEgMyA0CiMg NTggIi91c3IvdG1wL2djYy0zLjIuMi9uZXdsaWIvbGliYy9pbmNsdWRlL3N0ZGlvLmgiIDIgMyA0 CiMgMTYyICIvdXNyL3RtcC9nY2MtMy4yLjIvbmV3bGliL2xpYmMvaW5jbHVkZS9zdGRpby5oIiAz IDQKRklMRSAqIHRtcGZpbGUgKHZvaWQpOwpjaGFyICogdG1wbmFtIChjaGFyICopOwppbnQgZmNs b3NlIChGSUxFICopOwppbnQgZmZsdXNoIChGSUxFICopOwpGSUxFICogZnJlb3BlbiAoY29uc3Qg Y2hhciAqLCBjb25zdCBjaGFyICosIEZJTEUgKik7CnZvaWQgc2V0YnVmIChGSUxFICosIGNoYXIg Kik7CmludCBzZXR2YnVmIChGSUxFICosIGNoYXIgKiwgaW50LCBzaXplX3QpOwppbnQgZnByaW50 ZiAoRklMRSAqLCBjb25zdCBjaGFyICosIC4uLik7CmludCBmc2NhbmYgKEZJTEUgKiwgY29uc3Qg Y2hhciAqLCAuLi4pOwppbnQgcHJpbnRmIChjb25zdCBjaGFyICosIC4uLik7CmludCBzY2FuZiAo Y29uc3QgY2hhciAqLCAuLi4pOwppbnQgc3NjYW5mIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIg KiwgLi4uKTsKaW50IHZmcHJpbnRmIChGSUxFICosIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xp c3QpOwppbnQgdnByaW50ZiAoY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7CmludCB2c3By aW50ZiAoY2hhciAqLCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKaW50IGZnZXRjIChG SUxFICopOwpjaGFyICogZmdldHMgKGNoYXIgKiwgaW50LCBGSUxFICopOwppbnQgZnB1dGMgKGlu dCwgRklMRSAqKTsKaW50IGZwdXRzIChjb25zdCBjaGFyICosIEZJTEUgKik7CmludCBnZXRjIChG SUxFICopOwppbnQgZ2V0Y2hhciAodm9pZCk7CmNoYXIgKiBnZXRzIChjaGFyICopOwppbnQgcHV0 YyAoaW50LCBGSUxFICopOwppbnQgcHV0Y2hhciAoaW50KTsKaW50IHB1dHMgKGNvbnN0IGNoYXIg Kik7CmludCB1bmdldGMgKGludCwgRklMRSAqKTsKc2l6ZV90IGZyZWFkICh2b2lkICosIHNpemVf dCBfc2l6ZSwgc2l6ZV90IF9uLCBGSUxFICopOwpzaXplX3QgZndyaXRlIChjb25zdCB2b2lkICog LCBzaXplX3QgX3NpemUsIHNpemVfdCBfbiwgRklMRSAqKTsKaW50IGZnZXRwb3MgKEZJTEUgKiwg ZnBvc190ICopOwppbnQgZnNlZWsgKEZJTEUgKiwgbG9uZywgaW50KTsKaW50IGZzZXRwb3MgKEZJ TEUgKiwgY29uc3QgZnBvc190ICopOwpsb25nIGZ0ZWxsICggRklMRSAqKTsKdm9pZCByZXdpbmQg KEZJTEUgKik7CnZvaWQgY2xlYXJlcnIgKEZJTEUgKik7CmludCBmZW9mIChGSUxFICopOwppbnQg ZmVycm9yIChGSUxFICopOwp2b2lkIHBlcnJvciAoY29uc3QgY2hhciAqKTsKCkZJTEUgKiBmb3Bl biAoY29uc3QgY2hhciAqX25hbWUsIGNvbnN0IGNoYXIgKl90eXBlKTsKaW50IHNwcmludGYgKGNo YXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOwppbnQgcmVtb3ZlIChjb25zdCBjaGFyICopOwppbnQg cmVuYW1lIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CgoKaW50IGFzcHJpbnRmIChjaGFy ICoqLCBjb25zdCBjaGFyICosIC4uLik7CmludCBmc2Vla28gKEZJTEUgKiwgb2ZmX3QsIGludCk7 Cm9mZl90IGZ0ZWxsbyAoIEZJTEUgKik7CmludCB2ZmlwcmludGYgKEZJTEUgKiwgY29uc3QgY2hh ciAqLCBfX2dudWNfdmFfbGlzdCk7CmludCBpcHJpbnRmIChjb25zdCBjaGFyICosIC4uLik7Cmlu dCBmaXByaW50ZiAoRklMRSAqLCBjb25zdCBjaGFyICosIC4uLik7CmludCBzaXByaW50ZiAoY2hh ciAqLCBjb25zdCBjaGFyICosIC4uLik7CmNoYXIgKiB0ZW1wbmFtIChjb25zdCBjaGFyICosIGNv bnN0IGNoYXIgKik7CmludCB2YXNwcmludGYgKGNoYXIgKiosIGNvbnN0IGNoYXIgKiwgX19nbnVj X3ZhX2xpc3QpOwppbnQgdnNucHJpbnRmIChjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCBf X2dudWNfdmFfbGlzdCk7CmludCB2ZnNjYW5mIChGSUxFICosIGNvbnN0IGNoYXIgKiwgX19nbnVj X3ZhX2xpc3QpOwppbnQgdnNjYW5mIChjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKaW50 IHZzc2NhbmYgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7Cgpp bnQgZmNsb3NlYWxsICh2b2lkKTsKaW50IHNucHJpbnRmIChjaGFyICosIHNpemVfdCwgY29uc3Qg Y2hhciAqLCAuLi4pOwojIDIzMSAiL3Vzci90bXAvZ2NjLTMuMi4yL25ld2xpYi9saWJjL2luY2x1 ZGUvc3RkaW8uaCIgMyA0CkZJTEUgKiBmZG9wZW4gKGludCwgY29uc3QgY2hhciAqKTsKCmludCBm aWxlbm8gKEZJTEUgKik7CmludCBnZXR3IChGSUxFICopOwppbnQgcGNsb3NlIChGSUxFICopOwpG SUxFICogcG9wZW4gKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKaW50IHB1dHcgKGludCwg RklMRSAqKTsKdm9pZCBzZXRidWZmZXIgKEZJTEUgKiwgY2hhciAqLCBpbnQpOwppbnQgc2V0bGlu ZWJ1ZiAoRklMRSAqKTsKaW50IGdldGNfdW5sb2NrZWQgKEZJTEUgKik7CmludCBnZXRjaGFyX3Vu bG9ja2VkICh2b2lkKTsKdm9pZCBmbG9ja2ZpbGUgKEZJTEUgKik7CmludCBmdHJ5bG9ja2ZpbGUg KEZJTEUgKik7CnZvaWQgZnVubG9ja2ZpbGUgKEZJTEUgKik7CmludCBwdXRjX3VubG9ja2VkIChp bnQsIEZJTEUgKik7CmludCBwdXRjaGFyX3VubG9ja2VkIChpbnQpOwoKCgoKCgppbnQgX2FzcHJp bnRmX3IgKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqKiwgY29uc3QgY2hhciAqLCAuLi4pOwppbnQg X2ZjbG9zZWFsbF9yIChzdHJ1Y3QgX3JlZW50ICopOwpGSUxFICogX2Zkb3Blbl9yIChzdHJ1Y3Qg X3JlZW50ICosIGludCwgY29uc3QgY2hhciAqKTsKRklMRSAqIF9mb3Blbl9yIChzdHJ1Y3QgX3Jl ZW50ICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKaW50IF9mc2NhbmZfciAoc3RydWN0 IF9yZWVudCAqLCBGSUxFICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKaW50IF9nZXRjaGFyX3IgKHN0 cnVjdCBfcmVlbnQgKik7CmNoYXIgKiBfZ2V0c19yIChzdHJ1Y3QgX3JlZW50ICosIGNoYXIgKik7 CmludCBfaXByaW50Zl9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKaW50 IF9ta3N0ZW1wX3IgKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqKTsKY2hhciAqIF9ta3RlbXBfciAo c3RydWN0IF9yZWVudCAqLCBjaGFyICopOwp2b2lkIF9wZXJyb3JfciAoc3RydWN0IF9yZWVudCAq LCBjb25zdCBjaGFyICopOwppbnQgX3ByaW50Zl9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNo YXIgKiwgLi4uKTsKaW50IF9wdXRjaGFyX3IgKHN0cnVjdCBfcmVlbnQgKiwgaW50KTsKaW50IF9w dXRzX3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqKTsKaW50IF9yZW1vdmVfciAoc3Ry dWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICopOwppbnQgX3JlbmFtZV9yIChzdHJ1Y3QgX3JlZW50 ICosIGNvbnN0IGNoYXIgKl9vbGQsIGNvbnN0IGNoYXIgKl9uZXcpOwoKaW50IF9zY2FuZl9yIChz dHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKaW50IF9zcHJpbnRmX3IgKHN0cnVj dCBfcmVlbnQgKiwgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7CmludCBfc25wcmludGZfciAo c3RydWN0IF9yZWVudCAqLCBjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCAuLi4pOwppbnQg X3NzY2FuZl9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAu Li4pOwpjaGFyICogX3RlbXBuYW1fciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIGNv bnN0IGNoYXIgKik7CkZJTEUgKiBfdG1wZmlsZV9yIChzdHJ1Y3QgX3JlZW50ICopOwpjaGFyICog X3RtcG5hbV9yIChzdHJ1Y3QgX3JlZW50ICosIGNoYXIgKik7CmludCBfdmFzcHJpbnRmX3IgKHN0 cnVjdCBfcmVlbnQgKiwgY2hhciAqKiwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7Cmlu dCBfdmZwcmludGZfciAoc3RydWN0IF9yZWVudCAqLCBGSUxFICosIGNvbnN0IGNoYXIgKiwgX19n bnVjX3ZhX2xpc3QpOwppbnQgX3ZwcmludGZfciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFy ICosIF9fZ251Y192YV9saXN0KTsKaW50IF92c3ByaW50Zl9yIChzdHJ1Y3QgX3JlZW50ICosIGNo YXIgKiwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7CmludCBfdnNucHJpbnRmX3IgKHN0 cnVjdCBfcmVlbnQgKiwgY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xp c3QpOwppbnQgX3Zmc2NhbmZfciAoc3RydWN0IF9yZWVudCAqLCBGSUxFICosIGNvbnN0IGNoYXIg KiwgX19nbnVjX3ZhX2xpc3QpOwppbnQgX3ZzY2FuZl9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0 IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOwppbnQgX3Zzc2NhbmZfciAoc3RydWN0IF9yZWVudCAq LCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOwoKc3NpemVfdCBf X2dldGRlbGltIChjaGFyICoqLCBzaXplX3QgKiwgaW50LCBGSUxFICopOwpzc2l6ZV90IF9fZ2V0 bGluZSAoY2hhciAqKiwgc2l6ZV90ICosIEZJTEUgKik7CiMgMzA5ICIvdXNyL3RtcC9nY2MtMy4y LjIvbmV3bGliL2xpYmMvaW5jbHVkZS9zdGRpby5oIiAzIDQKaW50IF9fc3JnZXQgKEZJTEUgKik7 CmludCBfX3N3YnVmIChpbnQsIEZJTEUgKik7CgoKCgoKCkZJTEUgKmZ1bm9wZW4gKGNvbnN0IHZv aWQgKiBfY29va2llLCBpbnQgKCpyZWFkZm4pKHZvaWQgKiBfY29va2llLCBjaGFyICpfYnVmLCBp bnQgX24pLCBpbnQgKCp3cml0ZWZuKSh2b2lkICogX2Nvb2tpZSwgY29uc3QgY2hhciAqX2J1Ziwg aW50IF9uKSwgZnBvc190ICgqc2Vla2ZuKSh2b2lkICogX2Nvb2tpZSwgZnBvc190IF9vZmYsIGlu dCBfd2hlbmNlKSwgaW50ICgqY2xvc2Vmbikodm9pZCAqIF9jb29raWUpKTsKIyA0MTYgIi91c3Iv dG1wL2djYy0zLjIuMi9uZXdsaWIvbGliYy9pbmNsdWRlL3N0ZGlvLmgiIDMgNAoKIyAyNzAgIi4u Ly4uLy4uLy4uLy4uL25ld2xpYi9saWJjL3N0ZGxpYi9tYWxsb2NyLmMiIDIKIyAxICIvdXNyL3Rt cC9nY2MtMy4yLjIvd29yay9nY2MvaW5jbHVkZS9saW1pdHMuaCIgMSAzIDQKIyAyNzEgIi4uLy4u Ly4uLy4uLy4uL25ld2xpYi9saWJjL3N0ZGxpYi9tYWxsb2NyLmMiIDIKIyAyOTggIi4uLy4uLy4u Ly4uLy4uL25ld2xpYi9saWJjL3N0ZGxpYi9tYWxsb2NyLmMiCiMgMSAiL3Vzci90bXAvZ2NjLTMu Mi4yL25ld2xpYi9saWJjL2luY2x1ZGUvcmVlbnQuaCIgMSAzIDQKIyA1NCAiL3Vzci90bXAvZ2Nj LTMuMi4yL25ld2xpYi9saWJjL2luY2x1ZGUvcmVlbnQuaCIgMyA0CiMgMSAiL3Vzci90bXAvZ2Nj LTMuMi4yL3dvcmsvZ2NjL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgNTUgIi91c3IvdG1wL2dj Yy0zLjIuMi9uZXdsaWIvbGliYy9pbmNsdWRlL3JlZW50LmgiIDIgMyA0CgoKc3RydWN0IHN0YXQ7 CnN0cnVjdCB0bXM7CnN0cnVjdCB0aW1ldmFsOwpzdHJ1Y3QgdGltZXpvbmU7CgoKCmV4dGVybiBp bnQgX2Nsb3NlX3IgKHN0cnVjdCBfcmVlbnQgKiwgaW50KTsKZXh0ZXJuIGludCBfZXhlY3ZlX3Ig KHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqLCBjaGFyICoqLCBjaGFyICoqKTsKZXh0ZXJuIGludCBf ZmNudGxfciAoc3RydWN0IF9yZWVudCAqLCBpbnQsIGludCwgaW50KTsKZXh0ZXJuIGludCBfZm9y a19yIChzdHJ1Y3QgX3JlZW50ICopOwpleHRlcm4gaW50IF9mc3RhdF9yIChzdHJ1Y3QgX3JlZW50 ICosIGludCwgc3RydWN0IHN0YXQgKik7CmV4dGVybiBpbnQgX2dldHBpZF9yIChzdHJ1Y3QgX3Jl ZW50ICopOwpleHRlcm4gaW50IF9raWxsX3IgKHN0cnVjdCBfcmVlbnQgKiwgaW50LCBpbnQpOwpl eHRlcm4gaW50IF9saW5rX3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqLCBjb25zdCBj aGFyICopOwpleHRlcm4gX29mZl90IF9sc2Vla19yIChzdHJ1Y3QgX3JlZW50ICosIGludCwgX29m Zl90LCBpbnQpOwpleHRlcm4gaW50IF9vcGVuX3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hh ciAqLCBpbnQsIGludCk7CmV4dGVybiBfc3NpemVfdCBfcmVhZF9yIChzdHJ1Y3QgX3JlZW50ICos IGludCwgdm9pZCAqLCBzaXplX3QpOwpleHRlcm4gdm9pZCAqX3NicmtfciAoc3RydWN0IF9yZWVu dCAqLCBwdHJkaWZmX3QpOwpleHRlcm4gaW50IF9zdGF0X3IgKHN0cnVjdCBfcmVlbnQgKiwgY29u c3QgY2hhciAqLCBzdHJ1Y3Qgc3RhdCAqKTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX3RpbWVzX3Ig KHN0cnVjdCBfcmVlbnQgKiwgc3RydWN0IHRtcyAqKTsKZXh0ZXJuIGludCBfdW5saW5rX3IgKHN0 cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBfd2FpdF9yIChzdHJ1Y3Qg X3JlZW50ICosIGludCAqKTsKZXh0ZXJuIF9zc2l6ZV90IF93cml0ZV9yIChzdHJ1Y3QgX3JlZW50 ICosIGludCwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwoKCmV4dGVybiBpbnQgX2dldHRpbWVvZmRh eV9yIChzdHJ1Y3QgX3JlZW50ICosIHN0cnVjdCB0aW1ldmFsICp0cCwgc3RydWN0IHRpbWV6b25l ICp0enApOwojIDI5OSAiLi4vLi4vLi4vLi4vLi4vbmV3bGliL2xpYmMvc3RkbGliL21hbGxvY3Iu YyIgMgojIDMyMiAiLi4vLi4vLi4vLi4vLi4vbmV3bGliL2xpYmMvc3RkbGliL21hbGxvY3IuYyIK ZXh0ZXJuIHZvaWQgX19tYWxsb2NfbG9jayhzdHJ1Y3QgX3JlZW50ICopOwpleHRlcm4gdm9pZCBf X21hbGxvY191bmxvY2soc3RydWN0IF9yZWVudCAqKTsKIyA1MDEgIi4uLy4uLy4uLy4uLy4uL25l d2xpYi9saWJjL3N0ZGxpYi9tYWxsb2NyLmMiCnZvaWQqIG1lbXNldCh2b2lkKiwgaW50LCBzaXpl X3QpOwp2b2lkKiBtZW1jcHkodm9pZCosIGNvbnN0IHZvaWQqLCBzaXplX3QpOwojIDYzNyAiLi4v Li4vLi4vLi4vLi4vbmV3bGliL2xpYmMvc3RkbGliL21hbGxvY3IuYyIKIyAxICIvdXNyL3RtcC9n Y2MtMy4yLjIvbmV3bGliL2xpYmMvaW5jbHVkZS91bmlzdGQuaCIgMSAzIDQKCgoKIyAxICIvdXNy L3RtcC9nY2MtMy4yLjIvbmV3bGliL2xpYmMvaW5jbHVkZS9zeXMvdW5pc3RkLmgiIDEgMyA0CiMg MTMgIi91c3IvdG1wL2djYy0zLjIuMi9uZXdsaWIvbGliYy9pbmNsdWRlL3N5cy91bmlzdGQuaCIg MyA0CiMgMSAiL3Vzci90bXAvZ2NjLTMuMi4yL3dvcmsvZ2NjL2luY2x1ZGUvc3RkZGVmLmgiIDEg MyA0CiMgMTQgIi91c3IvdG1wL2djYy0zLjIuMi9uZXdsaWIvbGliYy9pbmNsdWRlL3N5cy91bmlz dGQuaCIgMiAzIDQKCmV4dGVybiBjaGFyICoqZW52aXJvbjsKCnZvaWQgX2V4aXQgKGludCBfX3N0 YXR1cyApIF9fYXR0cmlidXRlX18gKChub3JldHVybikpOwoKaW50IGFjY2VzcyAoY29uc3QgY2hh ciAqX19wYXRoLCBpbnQgX19hbW9kZSApOwp1bnNpZ25lZCBhbGFybSAodW5zaWduZWQgX19zZWNz ICk7CmludCBjaGRpciAoY29uc3QgY2hhciAqX19wYXRoICk7CmludCBjaG1vZCAoY29uc3QgY2hh ciAqX19wYXRoLCBtb2RlX3QgX19tb2RlICk7CmludCBjaG93biAoY29uc3QgY2hhciAqX19wYXRo LCB1aWRfdCBfX293bmVyLCBnaWRfdCBfX2dyb3VwICk7CgoKCmludCBjbG9zZSAoaW50IF9fZmls ZGVzICk7CmNoYXIgKmN0ZXJtaWQgKGNoYXIgKl9fcyApOwpjaGFyICpjdXNlcmlkIChjaGFyICpf X3MgKTsKaW50IGR1cCAoaW50IF9fZmlsZGVzICk7CmludCBkdXAyIChpbnQgX19maWxkZXMsIGlu dCBfX2ZpbGRlczIgKTsKCgoKaW50IGV4ZWNsIChjb25zdCBjaGFyICpfX3BhdGgsIGNvbnN0IGNo YXIgKiwgLi4uICk7CmludCBleGVjbGUgKGNvbnN0IGNoYXIgKl9fcGF0aCwgY29uc3QgY2hhciAq LCAuLi4gKTsKaW50IGV4ZWNscCAoY29uc3QgY2hhciAqX19maWxlLCBjb25zdCBjaGFyICosIC4u LiApOwppbnQgZXhlY3YgKGNvbnN0IGNoYXIgKl9fcGF0aCwgY2hhciAqIGNvbnN0IF9fYXJndltd ICk7CmludCBleGVjdmUgKGNvbnN0IGNoYXIgKl9fcGF0aCwgY2hhciAqIGNvbnN0IF9fYXJndltd LCBjaGFyICogY29uc3QgX19lbnZwW10gKTsKaW50IGV4ZWN2cCAoY29uc3QgY2hhciAqX19maWxl LCBjaGFyICogY29uc3QgX19hcmd2W10gKTsKCgoKaW50IGZjaG1vZCAoaW50IF9fZmlsZGVzLCBt b2RlX3QgX19tb2RlICk7CmludCBmY2hvd24gKGludCBfX2ZpbGRlcywgdWlkX3QgX19vd25lciwg Z2lkX3QgX19ncm91cCApOwpwaWRfdCBmb3JrICh2b2lkICk7CmxvbmcgZnBhdGhjb25mIChpbnQg X19mZCwgaW50IF9fbmFtZSApOwppbnQgZnN5bmMgKGludCBfX2ZkKTsKY2hhciAqZ2V0Y3dkIChj aGFyICpfX2J1Ziwgc2l6ZV90IF9fc2l6ZSApOwoKCgpnaWRfdCBnZXRlZ2lkICh2b2lkICk7CnVp ZF90IGdldGV1aWQgKHZvaWQgKTsKZ2lkX3QgZ2V0Z2lkICh2b2lkICk7CmludCBnZXRncm91cHMg KGludCBfX2dpZHNldHNpemUsIGdpZF90IF9fZ3JvdXBsaXN0W10gKTsKY2hhciAqZ2V0bG9naW4g KHZvaWQgKTsKCgoKY2hhciAqZ2V0cGFzcyAoX19jb25zdCBjaGFyICpfX3Byb21wdCk7CnNpemVf dCBnZXRwYWdlc2l6ZSAodm9pZCk7CnBpZF90IGdldHBnaWQgKHBpZF90KTsKcGlkX3QgZ2V0cGdy cCAodm9pZCApOwpwaWRfdCBnZXRwaWQgKHZvaWQgKTsKcGlkX3QgZ2V0cHBpZCAodm9pZCApOwoK Cgp1aWRfdCBnZXR1aWQgKHZvaWQgKTsKCgoKCgppbnQgaXNhdHR5IChpbnQgX19maWxkZXMgKTsK aW50IGxjaG93biAoY29uc3QgY2hhciAqX19wYXRoLCB1aWRfdCBfX293bmVyLCBnaWRfdCBfX2dy b3VwICk7CmludCBsaW5rIChjb25zdCBjaGFyICpfX3BhdGgxLCBjb25zdCBjaGFyICpfX3BhdGgy ICk7CmludCBuaWNlIChpbnQgX19uaWNlX3ZhbHVlICk7Cm9mZl90IGxzZWVrIChpbnQgX19maWxk ZXMsIG9mZl90IF9fb2Zmc2V0LCBpbnQgX193aGVuY2UgKTsKbG9uZyBwYXRoY29uZiAoY29uc3Qg Y2hhciAqX19wYXRoLCBpbnQgX19uYW1lICk7CmludCBwYXVzZSAodm9pZCApOwoKCgppbnQgcGlw ZSAoaW50IF9fZmlsZGVzWzJdICk7CnNzaXplX3QgcHJlYWQgKGludCBfX2ZkLCB2b2lkICpfX2J1 Ziwgc2l6ZV90IF9fbmJ5dGVzLCBvZmZfdCBfX29mZnNldCk7CnNzaXplX3QgcHdyaXRlIChpbnQg X19mZCwgY29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcywgb2ZmX3QgX19vZmZzZXQp OwppbnQgcmVhZCAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZSApOwoKCgpp bnQgcm1kaXIgKGNvbnN0IGNoYXIgKl9fcGF0aCApOwoKCgp2b2lkICogc2JyayAocHRyZGlmZl90 IF9faW5jcik7CgoKCgppbnQgc2V0Z2lkIChnaWRfdCBfX2dpZCApOwoKCgppbnQgc2V0cGdpZCAo cGlkX3QgX19waWQsIHBpZF90IF9fcGdpZCApOwppbnQgc2V0cGdycCAodm9pZCApOwpwaWRfdCBz ZXRzaWQgKHZvaWQgKTsKaW50IHNldHVpZCAodWlkX3QgX191aWQgKTsKCgoKdW5zaWduZWQgc2xl ZXAgKHVuc2lnbmVkIGludCBfX3NlY29uZHMgKTsKdm9pZCBzd2FiIChjb25zdCB2b2lkICosIHZv aWQgKiwgc3NpemVfdCk7Cmxvbmcgc3lzY29uZiAoaW50IF9fbmFtZSApOwpwaWRfdCB0Y2dldHBn cnAgKGludCBfX2ZpbGRlcyApOwppbnQgdGNzZXRwZ3JwIChpbnQgX19maWxkZXMsIHBpZF90IF9f cGdycF9pZCApOwpjaGFyICp0dHluYW1lIChpbnQgX19maWxkZXMgKTsKaW50IHVubGluayAoY29u c3QgY2hhciAqX19wYXRoICk7CmludCB2aGFuZ3VwICh2b2lkICk7CmludCB3cml0ZSAoaW50IF9f ZmQsIGNvbnN0IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZSApOwoKZXh0ZXJuIGNoYXIgKm9w dGFyZzsKZXh0ZXJuIGludCBvcHRpbmQsIG9wdGVyciwgb3B0b3B0OwppbnQgZ2V0b3B0KGludCwg Y2hhciAqIGNvbnN0IFtdLCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50IG9wdHJlc2V0OwoKCnBp ZF90IHZmb3JrICh2b2lkICk7CgpleHRlcm4gY2hhciAqc3Vib3B0YXJnOwppbnQgZ2V0c3Vib3B0 KGNoYXIgKiosIGNoYXIgKiBjb25zdCAqLCBjaGFyICoqKTsKCgoKCmludCBfY2xvc2UgKGludCBf X2ZpbGRlcyApOwpwaWRfdCBfZm9yayAodm9pZCApOwpwaWRfdCBfZ2V0cGlkICh2b2lkICk7Cmlu dCBfbGluayAoY29uc3QgY2hhciAqX19wYXRoMSwgY29uc3QgY2hhciAqX19wYXRoMiApOwpvZmZf dCBfbHNlZWsgKGludCBfX2ZpbGRlcywgb2ZmX3QgX19vZmZzZXQsIGludCBfX3doZW5jZSApOwpp bnQgX3JlYWQgKGludCBfX2ZkLCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGUgKTsKdm9pZCAq IF9zYnJrIChwdHJkaWZmX3QgX19pbmNyKTsKaW50IF91bmxpbmsgKGNvbnN0IGNoYXIgKl9fcGF0 aCApOwppbnQgX3dyaXRlIChpbnQgX19mZCwgY29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBfX25i eXRlICk7CmludCBfZXhlY3ZlIChjb25zdCBjaGFyICpfX3BhdGgsIGNoYXIgKiBjb25zdCBfX2Fy Z3ZbXSwgY2hhciAqIGNvbnN0IF9fZW52cFtdICk7CiMgMTc0ICIvdXNyL3RtcC9nY2MtMy4yLjIv bmV3bGliL2xpYmMvaW5jbHVkZS9zeXMvdW5pc3RkLmgiIDMgNAojIDEgIi91c3IvdG1wL2djYy0z LjIuMi9uZXdsaWIvbGliYy9pbmNsdWRlL3N5cy9mZWF0dXJlcy5oIiAxIDMgNAojIDE3NSAiL3Vz ci90bXAvZ2NjLTMuMi4yL25ld2xpYi9saWJjL2luY2x1ZGUvc3lzL3VuaXN0ZC5oIiAyIDMgNAoj IDUgIi91c3IvdG1wL2djYy0zLjIuMi9uZXdsaWIvbGliYy9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMg NAojIDYzOCAiLi4vLi4vLi4vLi4vLi4vbmV3bGliL2xpYmMvc3RkbGliL21hbGxvY3IuYyIgMgoj IDcxNCAiLi4vLi4vLi4vLi4vLi4vbmV3bGliL2xpYmMvc3RkbGliL21hbGxvY3IuYyIKc3RydWN0 IG1hbGxpbmZvIHsKICBpbnQgYXJlbmE7CiAgaW50IG9yZGJsa3M7CiAgaW50IHNtYmxrczsKICBp bnQgaGJsa3M7CiAgaW50IGhibGtoZDsKICBpbnQgdXNtYmxrczsKICBpbnQgZnNtYmxrczsKICBp bnQgdW9yZGJsa3M7CiAgaW50IGZvcmRibGtzOwogIGludCBrZWVwY29zdDsKfTsKIyAxMDM0ICIu Li8uLi8uLi8uLi8uLi9uZXdsaWIvbGliYy9zdGRsaWIvbWFsbG9jci5jIgp2b2lkKiBfbWFsbG9j X3Ioc3RydWN0IF9yZWVudCAqcmVlbnRfcHRyLCBzaXplX3QpOwp2b2lkIF9mcmVlX3Ioc3RydWN0 IF9yZWVudCAqcmVlbnRfcHRyLCB2b2lkKik7CnZvaWQqIF9yZWFsbG9jX3Ioc3RydWN0IF9yZWVu dCAqcmVlbnRfcHRyLCB2b2lkKiwgc2l6ZV90KTsKdm9pZCogX21lbWFsaWduX3Ioc3RydWN0IF9y ZWVudCAqcmVlbnRfcHRyLCBzaXplX3QsIHNpemVfdCk7CnZvaWQqIF92YWxsb2NfcihzdHJ1Y3Qg X3JlZW50ICpyZWVudF9wdHIsIHNpemVfdCk7CnZvaWQqIF9wdmFsbG9jX3Ioc3RydWN0IF9yZWVu dCAqcmVlbnRfcHRyLCBzaXplX3QpOwp2b2lkKiBfY2FsbG9jX3Ioc3RydWN0IF9yZWVudCAqcmVl bnRfcHRyLCBzaXplX3QsIHNpemVfdCk7CnZvaWQgY2ZyZWUodm9pZCopOwppbnQgX21hbGxvY190 cmltX3Ioc3RydWN0IF9yZWVudCAqcmVlbnRfcHRyLCBzaXplX3QpOwpzaXplX3QgX21hbGxvY191 c2FibGVfc2l6ZV9yKHN0cnVjdCBfcmVlbnQgKnJlZW50X3B0ciwgdm9pZCopOwp2b2lkIF9tYWxs b2Nfc3RhdHNfcihzdHJ1Y3QgX3JlZW50ICpyZWVudF9wdHIpOwppbnQgX21hbGxvcHRfcihzdHJ1 Y3QgX3JlZW50ICpyZWVudF9wdHIsIGludCwgaW50KTsKc3RydWN0IG1hbGxpbmZvIF9tYWxsaW5m b19yKHN0cnVjdCBfcmVlbnQgKnJlZW50X3B0cik7CiMgMTI0MyAiLi4vLi4vLi4vLi4vLi4vbmV3 bGliL2xpYmMvc3RkbGliL21hbGxvY3IuYyIKc3RydWN0IG1hbGxvY19jaHVuawp7CiAgc2l6ZV90 IHByZXZfc2l6ZTsKICBzaXplX3Qgc2l6ZTsKICBzdHJ1Y3QgbWFsbG9jX2NodW5rKiBmZDsKICBz dHJ1Y3QgbWFsbG9jX2NodW5rKiBiazsKfTsKCnR5cGVkZWYgc3RydWN0IG1hbGxvY19jaHVuayog bWNodW5rcHRyOwojIDE1NTEgIi4uLy4uLy4uLy4uLy4uL25ld2xpYi9saWJjL3N0ZGxpYi9tYWxs b2NyLmMiCnR5cGVkZWYgc3RydWN0IG1hbGxvY19jaHVuayogbWJpbnB0cjsKIyAxNjAzICIuLi8u Li8uLi8uLi8uLi9uZXdsaWIvbGliYy9zdGRsaWIvbWFsbG9jci5jIgpleHRlcm4gbWJpbnB0ciBf X21hbGxvY19hdl9bMTI4ICogMiArIDJdOwojIDE3MjIgIi4uLy4uLy4uLy4uLy4uL25ld2xpYi9s aWJjL3N0ZGxpYi9tYWxsb2NyLmMiCmV4dGVybiB1bnNpZ25lZCBsb25nIF9fbWFsbG9jX3RyaW1f dGhyZXNob2xkOwpleHRlcm4gdW5zaWduZWQgbG9uZyBfX21hbGxvY190b3BfcGFkOwoKCgoKZXh0 ZXJuIGNoYXIqIF9fbWFsbG9jX3NicmtfYmFzZTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19tYWxs b2NfbWF4X3NicmtlZF9tZW07CmV4dGVybiB1bnNpZ25lZCBsb25nIF9fbWFsbG9jX21heF90b3Rh bF9tZW07CmV4dGVybiBzdHJ1Y3QgbWFsbGluZm8gX19tYWxsb2NfY3VycmVudF9tYWxsaW5mbzsK IyAzNDMyICIuLi8uLi8uLi8uLi8uLi9uZXdsaWIvbGliYy9zdGRsaWIvbWFsbG9jci5jIgpleHRl cm4gdm9pZCBfX21hbGxvY191cGRhdGVfbWFsbGluZm8odm9pZCk7CiMgMzU0OSAiLi4vLi4vLi4v Li4vLi4vbmV3bGliL2xpYmMvc3RkbGliL21hbGxvY3IuYyIKaW50IF9tYWxsb3B0X3Ioc3RydWN0 IF9yZWVudCAqcmVlbnRfcHRyLCBpbnQgcGFyYW1fbnVtYmVyLCBpbnQgdmFsdWUpCgoKCnsKICBf X21hbGxvY19sb2NrKHJlZW50X3B0cik7CiAgc3dpdGNoKHBhcmFtX251bWJlcikKICB7CiAgICBj YXNlIC0xOgogICAgICBfX21hbGxvY190cmltX3RocmVzaG9sZCA9IHZhbHVlOyBfX21hbGxvY191 bmxvY2socmVlbnRfcHRyKTsgcmV0dXJuIDE7CiAgICBjYXNlIC0yOgogICAgICBfX21hbGxvY190 b3BfcGFkID0gdmFsdWU7IF9fbWFsbG9jX3VubG9jayhyZWVudF9wdHIpOyByZXR1cm4gMTsKICAg IGNhc2UgLTM6CgoKCiAgICAgIF9fbWFsbG9jX3VubG9jayhyZWVudF9wdHIpOwogICAgICByZXR1 cm4gMTsKICAgIGNhc2UgLTQ6CgoKCiAgICAgIF9fbWFsbG9jX3VubG9jayhyZWVudF9wdHIpOyBy ZXR1cm4gdmFsdWUgPT0gMDsKCgogICAgZGVmYXVsdDoKICAgICAgX19tYWxsb2NfdW5sb2NrKHJl ZW50X3B0cik7CiAgICAgIHJldHVybiAwOwogIH0KfQo=