From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28154 invoked by alias); 27 Aug 2012 06:37:09 -0000 Received: (qmail 28144 invoked by uid 22791); 27 Aug 2012 06:37:07 -0000 X-SWARE-Spam-Status: No, hits=-4.2 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_NO,RCVD_IN_HOSTKARMA_W,RCVD_IN_HOSTKARMA_WL X-Spam-Check-By: sourceware.org Received: from co1ehsobe006.messaging.microsoft.com (HELO co1outboundpool.messaging.microsoft.com) (216.32.180.189) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 27 Aug 2012 06:36:53 +0000 Received: from mail143-co1-R.bigfish.com (10.243.78.226) by CO1EHSOBE001.bigfish.com (10.243.66.64) with Microsoft SMTP Server id 14.1.225.23; Mon, 27 Aug 2012 06:36:52 +0000 Received: from mail143-co1 (localhost [127.0.0.1]) by mail143-co1-R.bigfish.com (Postfix) with ESMTP id 94EF2C80154 for ; Mon, 27 Aug 2012 06:36:52 +0000 (UTC) X-Forefront-Antispam-Report: CIP:59.163.77.45;KIP:(null);UIP:(null);IPV:NLI;H:KCHJEXHC01.kpit.com;RD:59.163.77.45.static.vsnl.net.in;EFVD:NLI X-SpamScore: -8 X-BigFish: VPS-8(zz936eIc85fh168aJ154dMzz1202hzz8275bh8275dhz2dh2a8h668h839hd25hf0ah107ah34h1155h) Received: from mail143-co1 (localhost.localdomain [127.0.0.1]) by mail143-co1 (MessageSwitch) id 1346049410535170_5402; Mon, 27 Aug 2012 06:36:50 +0000 (UTC) Received: from CO1EHSMHS014.bigfish.com (unknown [10.243.78.239]) by mail143-co1.bigfish.com (Postfix) with ESMTP id 730CB480043 for ; Mon, 27 Aug 2012 06:36:50 +0000 (UTC) Received: from KCHJEXHC01.kpit.com (59.163.77.45) by CO1EHSMHS014.bigfish.com (10.243.66.24) with Microsoft SMTP Server (TLS) id 14.1.225.23; Mon, 27 Aug 2012 06:36:49 +0000 Received: from KCHJEXMB03.kpit.com ([169.254.4.166]) by KCHJEXHC01.kpit.com ([172.10.15.73]) with mapi id 14.01.0289.001; Mon, 27 Aug 2012 12:06:16 +0530 From: Kaushik Phatak To: "gdb-patches@sourceware.org" Subject: [RFC] New GDB Port CR16 Date: Mon, 27 Aug 2012 06:37:00 -0000 Message-ID: Content-Type: multipart/mixed; boundary="_002_C6CA53A2A46BA7469348BDBD663AB65845B27868KCHJEXMB03kpitc_" MIME-Version: 1.0 X-OriginatorOrg: kpitcummins.com Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2012-08/txt/msg00789.txt.bz2 --_002_C6CA53A2A46BA7469348BDBD663AB65845B27868KCHJEXMB03kpitc_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Content-length: 2325 Hi, Please find attached a patch that adds support for the National Semiconduct= or CR16=20 architecture to GDB. The sim patch is already present in the sources. This = patch enhances the sim to support breakpoints for sim based debugging. I had earlier posted a patch to fix the build failures in CR16 sim, http://sourceware.org/ml/gdb-patches/2012-05/msg00342.html However these were already fixed by Mike Frysinger, http://sourceware.org/bugzilla/show_bug.cgi?id=3D12862 This fixed the build failures, but the target was not emulating the correct system calls. This patch should fix this problem by regenerating nltvals.de= f=20 using gennltvals.sh with the following libgloss additions to Newlib posted= =20 recently, http://sourceware.org/ml/newlib/2012/msg00319.html The attached patch includes the expected nltvals.def file changes, however = I=20 may have not run the script correctly. Please let me know if this is ok. Additionally, the port uses two functions from the disassembler in=20 opcodes/cr16-dis.c. The static declarations have been removed from these. T= hese are added to the patch below. Do I need to copy that hunk to binutils maili= ng list? The port uses basic structure of the Renesas RX port and some concepts borr= owed=20 from the ARM port. Kindly review the same and let me know if further modifi= cations are required. Additional Information on CR16 target: The CR16 target saves the return address (right shifted by 1) onto the RA register, which is later pushed onto the stack for leaf calls. The unwinder takes care of this in the frame_prev_register call. The CR16 target has a combination of 16 and 32 bit registers. R0 to R11 are 16 bits wide and can be accessed as 16 bit or 32 bit (register pair). R12, R13, RA and SP are 32 bit registers. 2012-08-24 Kaushik Phatak gdb/ChangeLog: * configure.tgt (cr16-*-elf): New target. * cr16-tdep.c: New file. sim/cr16/ChangeLog: * interp.c (sim_complete_command): New stub function. * cr16_sim.h : Add defines for TRAP handling * simops.c: Breakpoint handling code opcodes/ChangeLog: * cr16-dis.c (match_opcode): Remove static function declaration. (make_instruction): Likewise. Thanks & Best Regards, Kaushik kaushik.phatak@kpitcummins.com KPIT Cummins Infosystems Ltd www.kpitcummins.com --_002_C6CA53A2A46BA7469348BDBD663AB65845B27868KCHJEXMB03kpitc_ Content-Type: application/octet-stream; name="cr16_gdb.diff" Content-Description: cr16_gdb.diff Content-Disposition: attachment; filename="cr16_gdb.diff"; size=34370; creation-date="Fri, 10 Aug 2012 10:58:23 GMT"; modification-date="Mon, 27 Aug 2012 05:42:30 GMT" Content-Transfer-Encoding: base64 Content-length: 46592 LS0tIGdkYl9zcmMub3JpZy9zaW0vY29tbW9uL2dlbm5sdHZhbHMuc2gJMjAx Mi0wMy0xOSAxMDoyNDo0OC4wMDAwMDAwMDAgKzA1MzAKKysrIC4vZ2RiX3Ny Yy9zaW0vY29tbW9uL2dlbm5sdHZhbHMuc2gJMjAxMi0wOC0xNyAxNTozNTox NS4wMDAwMDAwMDAgKzA1MzAKQEAgLTQxLDcgKzQxLDcgQEAgJHNoZWxsICR7 c3JjY29tfS9nZW50dmFscy5zaCAkdGFyZ2V0IHN5cwogIyBPQlNPTEVURSAk c2hlbGwgJHtzcmNjb219L2dlbnR2YWxzLnNoICR0YXJnZXQgc3lzICR7c3Jj cm9vdH0vJGRpciBcCiAjIE9CU09MRVRFIAkic3lzY2FsbC5oIiAnU1lTX1tf WzphbG51bTpdXSonICIke2NwcH0iCiAKLWRpcj1saWJnbG9zcyB0YXJnZXQ9 Y3IxNgorZGlyPWxpYmdsb3NzL2NyMTYvc3lzIHRhcmdldD1jcjE2CiAkc2hl bGwgJHtzcmNjb219L2dlbnR2YWxzLnNoICR0YXJnZXQgc3lzICR7c3Jjcm9v dH0vJGRpciBcCiAJInN5c2NhbGwuaCIgJ1NZU19bX1s6YWxudW06XV0qJyAi JHtjcHB9IgogCi0tLSBnZGJfc3JjLm9yaWcvc2ltL2NvbW1vbi9ubHR2YWxz LmRlZgkyMDExLTA1LTI2IDIzOjUwOjEzLjAwMDAwMDAwMCArMDUzMAorKysg Li9nZGJfc3JjL3NpbS9jb21tb24vbmx0dmFscy5kZWYJMjAxMi0wOC0xNyAx NTozNjozOS4wMDAwMDAwMDAgKzA1MzAKQEAgLTIxOCwzMCArMjE4LDM0IEBA CiAjaWZkZWYgc3lzX2RlZnMKIC8qIGZyb20gc3lzY2FsbC5oICovCiAvKiBi ZWdpbiBjcjE2IHN5cyB0YXJnZXQgbWFjcm9zICovCi0geyAiU1lTX2FyZ2Mi LCAyMiB9LAotIHsgIlNZU19hcmduIiwgMjQgfSwKLSB7ICJTWVNfYXJnbmxl biIsIDIzIH0sCi0geyAiU1lTX2FyZ3YiLCAxMyB9LAotIHsgIlNZU19hcmd2 bGVuIiwgMTIgfSwKLSB7ICJTWVNfY2hkaXIiLCAxNCB9LAotIHsgIlNZU19j aG1vZCIsIDE2IH0sCi0geyAiU1lTX2Nsb3NlIiwgMyB9LAotIHsgIlNZU19l eGl0IiwgMSB9LAotIHsgIlNZU19mc3RhdCIsIDEwIH0sCi0geyAiU1lTX2dl dHBpZCIsIDggfSwKLSB7ICJTWVNfZ2V0dGltZW9mZGF5IiwgMTkgfSwKLSB7 ICJTWVNfa2lsbCIsIDkgfSwKLSB7ICJTWVNfbGluayIsIDIxIH0sCi0geyAi U1lTX2xzZWVrIiwgNiB9LAotIHsgIlNZU19vcGVuIiwgMiB9LAotIHsgIlNZ U19yZWFkIiwgNCB9LAotIHsgIlNZU19yZWNvbmZpZyIsIDI1IH0sCi0geyAi U1lTX3N0YXQiLCAxNSB9LAotIHsgIlNZU190aW1lIiwgMTggfSwKLSB7ICJT WVNfdGltZXMiLCAyMCB9LAotIHsgIlNZU191bmxpbmsiLCA3IH0sCi0geyAi U1lTX3V0aW1lIiwgMTcgfSwKLSB7ICJTWVNfd3JpdGUiLCA1IH0sCisgeyAi U1lTX0FSRyIsIDI0IH0sCisgeyAiU1lTX2NoZGlyIiwgMTIgfSwKKyB7ICJT WVNfY2htb2QiLCAxNSB9LAorIHsgIlNZU19jaG93biIsIDE2IH0sCisgeyAi U1lTX2Nsb3NlIiwgMHg0MDIgfSwKKyB7ICJTWVNfY3JlYXRlIiwgOCB9LAor IHsgIlNZU19leGVjdiIsIDExIH0sCisgeyAiU1lTX2V4ZWN2ZSIsIDU5IH0s CisgeyAiU1lTX2V4aXQiLCAweDQxMCB9LAorIHsgIlNZU19mb3JrIiwgMiB9 LAorIHsgIlNZU19mc3RhdCIsIDIyIH0sCisgeyAiU1lTX2dldHBpZCIsIDIw IH0sCisgeyAiU1lTX2lzYXR0eSIsIDIxIH0sCisgeyAiU1lTX2tpbGwiLCA2 MCB9LAorIHsgIlNZU19saW5rIiwgOSB9LAorIHsgIlNZU19sc2VlayIsIDB4 NDA1IH0sCisgeyAiU1lTX21rbm9kIiwgMTQgfSwKKyB7ICJTWVNfb3BlbiIs IDB4NDAxIH0sCisgeyAiU1lTX3BpcGUiLCA0MiB9LAorIHsgIlNZU19yZWFk IiwgMHg0MDMgfSwKKyB7ICJTWVNfcmVuYW1lIiwgMHg0MDYgfSwKKyB7ICJT WVNfc3RhdCIsIDM4IH0sCisgeyAiU1lTX3RpbWUiLCAweDMwMCB9LAorIHsg IlNZU191bmxpbmsiLCAweDQwNyB9LAorIHsgIlNZU191dGltZSIsIDIwMSB9 LAorIHsgIlNZU193YWl0IiwgMjAyIH0sCisgeyAiU1lTX3dhaXQ0IiwgNyB9 LAorIHsgIlNZU193cml0ZSIsIDB4NDA0IH0sCiAvKiBlbmQgY3IxNiBzeXMg dGFyZ2V0IG1hY3JvcyAqLwogI2VuZGlmCiAjZW5kaWYKLS0tIGdkYl9zcmMu b3JpZy9zaW0vY3IxNi9jcjE2X3NpbS5oCTIwMTItMDEtMDQgMTM6NTg6MDcu MDAwMDAwMDAwICswNTMwCisrKyAuL2dkYl9zcmMvc2ltL2NyMTYvY3IxNl9z aW0uaAkyMDEyLTA4LTI0IDE3OjIyOjI0LjAwMDAwMDAwMCArMDUzMApAQCAt NDcyLDMgKzQ3Miw5IEBAIGV4dGVybiB2b2lkIHdyaXRlX2xvbmdsb25nIFBB UkFNUyAoKHVpbnQKICAgIFBTUiBpcyBtYXNrZWQgZm9yIHplcm8gYml0cy4g Ki8KIAogZXh0ZXJuIGNyZWdfdCBtb3ZlX3RvX2NyIChpbnQgY3IsIGNyZWdf dCBtYXNrLCBjcmVnX3QgdmFsLCBpbnQgcHN3X2h3X3ApOworCisjaWZuZGVm IFNJR1RSQVAKKyNkZWZpbmUgU0lHVFJBUCA1CisjZW5kaWYKKy8qIFNwZWNp YWwgcHVycG9zZSB0cmFwICAqLworI2RlZmluZSBUUkFQX0JSRUFLUE9JTlQg OAotLS0gZ2RiX3NyYy5vcmlnL3NpbS9jcjE2L2ludGVycC5jCTIwMTItMDYt MTggMDU6MDQ6MTcuMDAwMDAwMDAwICswNTMwCisrKyAuL2dkYl9zcmMvc2lt L2NyMTYvaW50ZXJwLmMJMjAxMi0wOC0xNyAxNTo0MTozNS4wMDAwMDAwMDAg KzA1MzAKQEAgLTExOTIsNyArMTE5MiwxMSBAQCBzaW1fcmVzdW1lIChTSU1f REVTQyBzZCwgaW50IHN0ZXAsIGludCBzCiAgICAgICBpYWRkciA9IGltZW1f YWRkciAoKHVpbnQzMilQQyk7CiAgICAgICBpZiAoaWFkZHIgPT0gU3RhdGUu bWVtLmZhdWx0KQogICAgICAgICB7CisjaWZkZWYgU0lHQlVTCiAgICAgICAg ICAgU3RhdGUuZXhjZXB0aW9uID0gU0lHQlVTOworI2Vsc2UKKyAgICAgICAg ICBTdGF0ZS5leGNlcHRpb24gPSBTSUdTRUdWOworI2VuZGlmCiAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgIH0KICAKQEAgLTE1NDgsNiArMTU1MiwxMSBA QCBzaW1fc3RvcmVfcmVnaXN0ZXIgKHNkLCBybiwgbWVtb3J5LCBsZW5nCiAg IHJldHVybiBzaXplOwogfQogCitjaGFyICoqCitzaW1fY29tcGxldGVfY29t bWFuZCAoU0lNX0RFU0Mgc2QsIGNoYXIgKnRleHQsIGNoYXIgKndvcmQpCit7 CisgIHJldHVybiBOVUxMOworfQogCiB2b2lkCiBzaW1fZG9fY29tbWFuZCAo c2QsIGNtZCkKLS0tIGdkYl9zcmMub3JpZy9zaW0vY3IxNi9zaW1vcHMuYwky MDEyLTAxLTA0IDEzOjU4OjA3LjAwMDAwMDAwMCArMDUzMAorKysgLi9nZGJf c3JjL3NpbS9jcjE2L3NpbW9wcy5jCTIwMTItMDgtMTcgMTY6MzQ6MTEuMDAw MDAwMDAwICswNTMwCkBAIC01MDU5LDYgKzUwNTksOCBAQCBPUF8xNENfMTQg KCkKIHZvaWQKIE9QX0NfQyAoKQogeworICB1aW50MzIgdG1wOworICB1aW50 MTYgYTsKICAgdHJhY2VfaW5wdXQgKCJleGNwIiwgT1BfQ09OU1RBTlQ0LCBP UF9WT0lELCBPUF9WT0lEKTsKICAgc3dpdGNoIChPUFswXSkKICAgICB7CkBA IC01NDY1LDkgKzU0NjcsMjQgQEAgT1BfQ19DICgpCiAjZW5kaWYKIAkgICAg CiAJICBkZWZhdWx0OgorCSAgICBhID0gT1BbMF07CisJICAgIHN3aXRjaChh KQorCSAgICB7CisJICBjYXNlICBUUkFQX0JSRUFLUE9JTlQ6CisJICAgIFN0 YXRlLmV4Y2VwdGlvbiA9IFNJR1RSQVA7CisJICAgIHRtcCA9IChQQyk7CisJ ICAgIEpNUCh0bXApOworCSAgICB0cmFjZV9vdXRwdXRfdm9pZCAoKTsKKwkg IGJyZWFrOworCSAgY2FzZSAgU0lHVFJBUDogIC8vIHN1cGVydmlzb3IgY2Fs bCA/CisJICAgIFN0YXRlLmV4Y2VwdGlvbiA9IFNJR19DUjE2X0VYSVQ7CisJ ICAgIHRyYWNlX291dHB1dF92b2lkICgpOworCSAgYnJlYWs7CisJICBkZWZh dWx0OgogCSAgICBjcjE2X2NhbGxiYWNrLT5lcnJvciAoY3IxNl9jYWxsYmFj aywgIlVua25vd24gc3lzY2FsbCAlZCIsIEZVTkMpOworCSAgYnJlYWs7CisJ ICAgIH0KIAkgIH0KLQogCWlmICgodWludDE2KSByZXN1bHQgPT0gKHVpbnQx NikgLTEpCiAJICBSRVRFUlIgKGNyMTZfY2FsbGJhY2stPmdldF9lcnJubyhj cjE2X2NhbGxiYWNrKSk7CiAJZWxzZQpkaWZmIC11cHJOIGdkYl9zcmMub3Jp Zy9vcGNvZGVzL2NyMTYtZGlzLmMgLi9nZGJfc3JjL29wY29kZXMvY3IxNi1k aXMuYwotLS0gZ2RiX3NyYy5vcmlnL29wY29kZXMvY3IxNi1kaXMuYwkyMDEy LTA1LTE3IDIwOjQzOjI1LjAwMDAwMDAwMCArMDUzMAorKysgLi9nZGJfc3Jj L29wY29kZXMvY3IxNi1kaXMuYwkyMDEyLTA4LTE3IDE2OjEwOjQ0LjAwMDAw MDAwMCArMDUzMApAQCAtMzE3LDcgKzMxNyw5IEBAIGJ1aWxkX21hc2sgKHZv aWQpCiAKIC8qIFNlYXJjaCBmb3IgYSBtYXRjaGluZyBvcGNvZGUuIFJldHVy biAxIGZvciBzdWNjZXNzLCAwIGZvciBmYWlsdXJlLiAgKi8KIAotc3RhdGlj IGludAoraW50IG1hdGNoX29wY29kZSAodm9pZCk7CisKK2ludAogbWF0Y2hf b3Bjb2RlICh2b2lkKQogewogICB1bnNpZ25lZCBsb25nIG1hc2s7CkBAIC03 MzQsNyArNzM2LDkgQEAgcHJpbnRfYXJndW1lbnRzIChpbnMgKmN1cnJlbnRJ bnNuLCBiZmRfdgogCiAvKiBCdWlsZCB0aGUgaW5zdHJ1Y3Rpb24ncyBhcmd1 bWVudHMuICAqLwogCi1zdGF0aWMgdm9pZAordm9pZCBtYWtlX2luc3RydWN0 aW9uICh2b2lkKTsKKwordm9pZAogbWFrZV9pbnN0cnVjdGlvbiAodm9pZCkK IHsKICAgaW50IGk7CkNvbW1vbiBzdWJkaXJlY3RvcmllczogZ2RiX3NyYy5v cmlnL2dkYi9jbGkgYW5kIC4vZ2RiX3NyYy9nZGIvY2xpCkNvbW1vbiBzdWJk aXJlY3RvcmllczogZ2RiX3NyYy5vcmlnL2dkYi9jb21tb24gYW5kIC4vZ2Ri X3NyYy9nZGIvY29tbW9uCkNvbW1vbiBzdWJkaXJlY3RvcmllczogZ2RiX3Ny Yy5vcmlnL2dkYi9jb25maWcgYW5kIC4vZ2RiX3NyYy9nZGIvY29uZmlnCmRp ZmYgLXVwTiBnZGJfc3JjLm9yaWcvZ2RiL2NvbmZpZ3VyZS50Z3QgLi9nZGJf c3JjL2dkYi9jb25maWd1cmUudGd0Ci0tLSBnZGJfc3JjLm9yaWcvZ2RiL2Nv bmZpZ3VyZS50Z3QJMjAxMi0wOC0wMiAwMToxODo0NC4wMDAwMDAwMDAgKzA1 MzAKKysrIC4vZ2RiX3NyYy9nZGIvY29uZmlndXJlLnRndAkyMDEyLTA4LTE3 IDE2OjAxOjM3LjAwMDAwMDAwMCArMDUzMApAQCAtMTE2LDYgKzExNiwxMyBA QCBiZmluLSotKikKIAlnZGJfc2ltPS4uL3NpbS9iZmluL2xpYnNpbS5hCiAJ OzsKIAorY3IxNiotKi0qKQorCSMgVGFyZ2V0OiBDUjE2IHByb2Nlc3Nvcgor CWdkYl90YXJnZXRfb2JzPSJjcjE2LXRkZXAubyIKKwlnZGJfc2ltPS4uL3Np bS9jcjE2L2xpYnNpbS5hCisJYnVpbGRfZ2Ric2VydmVyPXllcworCTs7CisK IGNyaXMqKQogCSMgVGFyZ2V0OiBDUklTCiAJZ2RiX3RhcmdldF9vYnM9ImNy aXMtdGRlcC5vIHNvbGliLXN2cjQubyIKQ29tbW9uIHN1YmRpcmVjdG9yaWVz OiBnZGJfc3JjLm9yaWcvZ2RiL2NvbnRyaWIgYW5kIC4vZ2RiX3NyYy9nZGIv Y29udHJpYgpkaWZmIC11cE4gZ2RiX3NyYy5vcmlnL2dkYi9jcjE2LXRkZXAu YyAuL2dkYl9zcmMvZ2RiL2NyMTYtdGRlcC5jCi0tLSBnZGJfc3JjLm9yaWcv Z2RiL2NyMTYtdGRlcC5jCTE5NzAtMDEtMDEgMDU6MzA6MDAuMDAwMDAwMDAw ICswNTMwCisrKyAuL2dkYl9zcmMvZ2RiL2NyMTYtdGRlcC5jCTIwMTItMDgt MjcgMTA6MTA6MjIuMDAwMDAwMDAwICswNTMwCkBAIC0wLDAgKzEsODkxIEBA CisvKiBUYXJnZXQtZGVwZW5kZW50IGNvZGUgZm9yIHRoZSBTaXRlbCBDUjE2 IGZvciBHREIsIHRoZSBHTlUgZGVidWdnZXIuCisgCisgICBDb3B5cmlnaHQg KEMpIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgCisg ICBDb250cmlidXRlZCBieSBLUElUIEN1bW1pbnMgSW5mb3N5c3RlbXMgTGlt aXRlZC4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKworICBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQorICBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQorICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy c2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorIAorICBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor IAorICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4gICovCisKKyNpbmNsdWRlICJkZWZzLmgiCisjaW5jbHVkZSAi YXJjaC11dGlscy5oIgorI2luY2x1ZGUgInByb2xvZ3VlLXZhbHVlLmgiCisj aW5jbHVkZSAidGFyZ2V0LmgiCisjaW5jbHVkZSAicmVnY2FjaGUuaCIKKyNp bmNsdWRlICJvcGNvZGUvY3IxNi5oIgorI2luY2x1ZGUgImRpcy1hc20uaCIK KyNpbmNsdWRlICJnZGJ0eXBlcy5oIgorI2luY2x1ZGUgImZyYW1lLmgiCisj aW5jbHVkZSAiZnJhbWUtdW53aW5kLmgiCisjaW5jbHVkZSAiZnJhbWUtYmFz ZS5oIgorI2luY2x1ZGUgInZhbHVlLmgiCisjaW5jbHVkZSAiZ2RiY29yZS5o IgorI2luY2x1ZGUgImR3YXJmMi1mcmFtZS5oIgorI2luY2x1ZGUgImdkYi9z aW0tY3IxNi5oIgorI2luY2x1ZGUgImVsZi9jcjE2LmgiCisjaW5jbHVkZSAi ZWxmLWJmZC5oIgorCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHdvcmRVOwor ZXh0ZXJuIHdvcmRVIHdvcmRzWzNdOworZXh0ZXJuIFVMT05HTE9ORyBhbGxX b3JkczsKK2V4dGVybiBpbnMgY3Vyckluc247CisKKy8qIEFyY2hpdGVjdHVy ZSBzcGVjaWZpYyBkYXRhLiAgKi8KK3N0cnVjdCBnZGJhcmNoX3RkZXAKK3sK KyAgLyogVGhlIEVMRiBoZWFkZXIgZmxhZ3Mgc3BlY2lmeSB0aGUgbXVsdGls aWIgdXNlZC4gICovCisgIGludCBlbGZfZmxhZ3M7Cit9OworCisvKiBDZXJ0 YWluIGltcG9ydGFudCByZWdpc3RlciBudW1iZXJzLiAgKi8KK2VudW0KK3sK KyAgQ1IxNl9SMF9SRUdOVU0gPSAwLAorICBDUjE2X1I3X1JFR05VTSA9IDcs CisgIENSMTZfUjEyX1JFR05VTSA9IDEyLAorICBDUjE2X0ZQX1JFR05VTSA9 IDEzLAorICBDUjE2X1JBX1JFR05VTSA9IDE0LAorICBDUjE2X1NQX1JFR05V TSA9IDE1LAorICBDUjE2X1BDX1JFR05VTSA9IDE2LAorICBDUjE2X05VTV9S RUdTID0gMjIKK307CisKKy8qIFRoaXMgc3RydWN0dXJlIGhvbGRzIHRoZSBy ZXN1bHRzIG9mIGEgcHJvbG9ndWUgYW5hbHlzaXMuICAqLworc3RydWN0IGNy MTZfcHJvbG9ndWUKK3sKKyAgLyogVGhlIG9mZnNldCBmcm9tIHRoZSBmcmFt ZSBiYXNlIHRvIHRoZSBzdGFjayBwb2ludGVyIC0tLSBhbHdheXMKKyAgICAg emVybyBvciBuZWdhdGl2ZS4KKworICAgICBDYWxsaW5nIHRoaXMgYSAic2l6 ZSIgaXMgYSBiaXQgbWlzbGVhZGluZywgYnV0IGdpdmVuIHRoYXQgdGhlCisg ICAgIHN0YWNrIGdyb3dzIGRvd253YXJkcywgdXNpbmcgb2Zmc2V0cyBmb3Ig ZXZlcnl0aGluZyBrZWVwcyBvbmUKKyAgICAgZnJvbSBnb2luZyBjb21wbGV0 ZWx5IHNpZ24tY3Jhenk6IHlvdSBuZXZlciBjaGFuZ2UgYW55dGhpbmcncwor ICAgICBzaWduIGZvciBhbiBBREQgaW5zdHJ1Y3Rpb247IGFsd2F5cyBjaGFu Z2UgdGhlIHNlY29uZCBvcGVyYW5kJ3MKKyAgICAgc2lnbiBmb3IgYSBTVUIg aW5zdHJ1Y3Rpb247IGFuZCBldmVyeXRoaW5nIHRha2VzIGNhcmUgb2YKKyAg ICAgaXRzZWxmLiAgKi8KKyAgaW50IGZyYW1lX3NpemU7CisKKyAgLyogTm9u LXplcm8gaWYgdGhpcyBmdW5jdGlvbiBoYXMgaW5pdGlhbGl6ZWQgdGhlIGZy YW1lIHBvaW50ZXIgZnJvbQorICAgICB0aGUgc3RhY2sgcG9pbnRlciwgemVy byBvdGhlcndpc2UuICAqLworICBpbnQgaGFzX2ZyYW1lX3B0cjsKKworICAv KiBJZiBoYXNfZnJhbWVfcHRyIGlzIG5vbi16ZXJvLCB0aGlzIGlzIHRoZSBv ZmZzZXQgZnJvbSB0aGUgZnJhbWUKKyAgICAgYmFzZSB0byB3aGVyZSB0aGUg ZnJhbWUgcG9pbnRlciBwb2ludHMuICBUaGlzIGlzIGFsd2F5cyB6ZXJvIG9y CisgICAgIG5lZ2F0aXZlLiAgKi8KKyAgaW50IGZyYW1lX3B0cl9vZmZzZXQ7 CisKKyAgLyogVGhlIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGluc3RydWN0aW9u IGF0IHdoaWNoIHRoZSBmcmFtZSBoYXMgYmVlbgorICAgICBzZXQgdXAgYW5k IHRoZSBhcmd1bWVudHMgYXJlIHdoZXJlIHRoZSBkZWJ1ZyBpbmZvIHNheXMg dGhleSBhcmUKKyAgICAgLS0tIGFzIGJlc3QgYXMgd2UgY2FuIHRlbGwuICAq LworICBDT1JFX0FERFIgcHJvbG9ndWVfZW5kOworCisgIC8qIHJlZ19vZmZz ZXRbUl0gaXMgdGhlIG9mZnNldCBmcm9tIHRoZSBDRkEgYXQgd2hpY2ggcmVn aXN0ZXIgUiBpcworICAgICBzYXZlZCwgb3IgMSBpZiByZWdpc3RlciBSIGhh cyBub3QgYmVlbiBzYXZlZC4gIChSZWFsIHZhbHVlcyBhcmUKKyAgICAgYWx3 YXlzIHplcm8gb3IgbmVnYXRpdmUuKSAgKi8KKyAgaW50IHJlZ19vZmZzZXRb Q1IxNl9OVU1fUkVHU107Cit9OworCisvKiBJbXBsZW1lbnQgdGhlICJyZWdp c3Rlcl9uYW1lIiBnZGJhcmNoIG1ldGhvZC4gICovCitzdGF0aWMgY29uc3Qg Y2hhciAqCitjcjE2X3JlZ2lzdGVyX25hbWUgKHN0cnVjdCBnZGJhcmNoICpn ZGJhcmNoLCBpbnQgcmVnbnIpCit7CisgIHN0YXRpYyBjb25zdCBjaGFyICpj b25zdCByZWdfbmFtZXNbXSA9IHsKKyAgICAicjAiLAorICAgICJyMSIsCisg ICAgInIyIiwKKyAgICAicjMiLAorICAgICJyNCIsCisgICAgInI1IiwKKyAg ICAicjYiLAorICAgICJyNyIsCisgICAgInI4IiwKKyAgICAicjkiLAorICAg ICJyMTAiLAorICAgICJyMTEiLAorICAgICJyMTIiLAorICAgICJyMTMiLAor ICAgICJyYSIsCisgICAgInNwIiwKKyAgICAicGMiLAorICAgICJpc3AiLAor ICAgICJ1c3AiLAorICAgICJpbnRiYXNlIiwKKyAgICAicHNyIiwKKyAgICAi Y2ZnIgorICB9OworCisgIHJldHVybiByZWdfbmFtZXNbcmVnbnJdOworfQor CisvKiBJbXBsZW1lbnQgdGhlICJyZWdpc3Rlcl90eXBlIiBnZGJhcmNoIG1l dGhvZC4gICovCitzdGF0aWMgc3RydWN0IHR5cGUgKgorY3IxNl9yZWdpc3Rl cl90eXBlIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgaW50IHJlZ19ucikK K3sKKyAgc3dpdGNoIChyZWdfbnIpCisgICAgeworICAgIGNhc2UgQ1IxNl9Q Q19SRUdOVU06CS8qIE5vdGU6UEMgaW4gQ1IxNiBpcyBvZiAyNCBiaXRzICov CisgICAgICByZXR1cm4gYnVpbHRpbl90eXBlIChnZGJhcmNoKS0+YnVpbHRp bl9mdW5jX3B0cjsKKworICAgIGNhc2UgQ1IxNl9SQV9SRUdOVU06CS8qIFJl dHVybiBhZGRyZXNzIHJlZyAqLworICAgICAgcmV0dXJuIGJ1aWx0aW5fdHlw ZSAoZ2RiYXJjaCktPmJ1aWx0aW5fZGF0YV9wdHI7CisgICAgICBicmVhazsK KworICAgIGNhc2UgQ1IxNl9GUF9SRUdOVU06CS8qRnJhbWUgUG9pbnRlciBy ZWcgKi8KKyAgICBjYXNlIENSMTZfU1BfUkVHTlVNOgkvKlN0YWNrIFBvaW50 ZXIgcmVnICovCisgICAgICByZXR1cm4gYnVpbHRpbl90eXBlIChnZGJhcmNo KS0+YnVpbHRpbl9kYXRhX3B0cjsKKyAgICAgIGJyZWFrOworCisgICAgY2Fz ZSBTSU1fQ1IxNl9JU1BfUkVHTlVNOgorICAgIGNhc2UgU0lNX0NSMTZfVVNQ X1JFR05VTToKKyAgICBjYXNlIFNJTV9DUjE2X0lOVEJBU0VfUkVHTlVNOgor ICAgICAgcmV0dXJuIGJ1aWx0aW5fdHlwZSAoZ2RiYXJjaCktPmJ1aWx0aW5f aW50MzI7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU0lNX0NSMTZfUFNS X1JFR05VTToKKyAgICBjYXNlIFNJTV9DUjE2X0NGR19SRUdOVU06CisgICAg ICByZXR1cm4gYnVpbHRpbl90eXBlIChnZGJhcmNoKS0+YnVpbHRpbl91aW50 MzI7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU0lNX0NSMTZfUjBfUkVH TlVNOgorICAgIGNhc2UgU0lNX0NSMTZfUjFfUkVHTlVNOgorICAgIGNhc2Ug U0lNX0NSMTZfUjJfUkVHTlVNOgorICAgIGNhc2UgU0lNX0NSMTZfUjNfUkVH TlVNOgorICAgIGNhc2UgU0lNX0NSMTZfUjRfUkVHTlVNOgorICAgIGNhc2Ug U0lNX0NSMTZfUjVfUkVHTlVNOgorICAgIGNhc2UgU0lNX0NSMTZfUjZfUkVH TlVNOgorICAgIGNhc2UgU0lNX0NSMTZfUjdfUkVHTlVNOgorICAgIGNhc2Ug U0lNX0NSMTZfUjhfUkVHTlVNOgorICAgIGNhc2UgU0lNX0NSMTZfUjlfUkVH TlVNOgorICAgIGNhc2UgU0lNX0NSMTZfUjEwX1JFR05VTToKKyAgICBjYXNl IFNJTV9DUjE2X1IxMV9SRUdOVU06CisgICAgICByZXR1cm4gYnVpbHRpbl90 eXBlIChnZGJhcmNoKS0+YnVpbHRpbl9pbnQxNjsKKyAgICAgIGJyZWFrOwor CisgICAgY2FzZSBTSU1fQ1IxNl9SMTJfUkVHTlVNOgorICAgICAgcmV0dXJu IGJ1aWx0aW5fdHlwZSAoZ2RiYXJjaCktPmJ1aWx0aW5faW50MzI7CisgICAg ICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBwcmludGYKKwkoIlxu UmVnaXN0ZXIgVHlwZSBub3Qgc3VwcG9ydGVkXG5GdW5jdGlvbiA6IGNyMTZf cmVnaXN0ZXJfdHlwZVxuIik7CisgICAgICByZXR1cm4gMDsKKyAgICAgIGJy ZWFrOworICAgIH0KK30KKworLyogRnVuY3Rpb24gZm9yIGZpbmRpbmcgc2F2 ZWQgcmVnaXN0ZXJzIGluIGEgJ3N0cnVjdCBwdl9hcmVhJzsgdGhpcworICAg ZnVuY3Rpb24gaXMgcGFzc2VkIHRvIHB2X2FyZWFfc2Nhbi4KKyAKKyAgIElm IFZBTFVFIGlzIGEgc2F2ZWQgcmVnaXN0ZXIsIEFERFIgc2F5cyBpdCB3YXMg c2F2ZWQgYXQgYSBjb25zdGFudAorICAgb2Zmc2V0IGZyb20gdGhlIGZyYW1l IGJhc2UsIGFuZCBTSVpFIGluZGljYXRlcyB0aGF0IHRoZSB3aG9sZQorICAg cmVnaXN0ZXIgd2FzIHNhdmVkLCByZWNvcmQgaXRzIG9mZnNldC4gICovCitz dGF0aWMgdm9pZAorY2hlY2tfZm9yX3NhdmVkICh2b2lkICpyZXN1bHRfdW50 eXBlZCwgcHZfdCBhZGRyLCBDT1JFX0FERFIgc2l6ZSwgcHZfdCB2YWx1ZSkK K3sKKyAgc3RydWN0IGNyMTZfcHJvbG9ndWUgKnJlc3VsdCA9IChzdHJ1Y3Qg Y3IxNl9wcm9sb2d1ZSAqKSByZXN1bHRfdW50eXBlZDsKKworICBpZiAodmFs dWUua2luZCA9PSBwdmtfcmVnaXN0ZXIKKyAgICAgICYmIHZhbHVlLmsgPT0g MAorICAgICAgJiYgcHZfaXNfcmVnaXN0ZXIgKGFkZHIsIENSMTZfU1BfUkVH TlVNKQorICAgICAgJiYgc2l6ZSA9PSByZWdpc3Rlcl9zaXplICh0YXJnZXRf Z2RiYXJjaCwgdmFsdWUucmVnKSkKKyAgICByZXN1bHQtPnJlZ19vZmZzZXRb dmFsdWUucmVnXSA9IGFkZHIuazsKK30KKworLyogRGVmaW5lIGEgImhhbmRs ZSIgc3RydWN0IGZvciBmZXRjaGluZyB0aGUgbmV4dCBvcGNvZGUuICAqLwor c3RydWN0IGNyMTZfZ2V0X29wY29kZV9ieXRlX2hhbmRsZQoreworICBDT1JF X0FERFIgcGM7Cit9OworCisvKiBVc2UgZnVuY3Rpb25zIGZyb20gb3Bjb2Rl cy9jcjE2LWRpcy5jIGJ5IG1ha2luZyB0aGVtIG5vbi1zdGF0aWMqLworZXh0 ZXJuIHZvaWQgbWFrZV9pbnN0cnVjdGlvbiAodm9pZCk7CitleHRlcm4gaW50 IG1hdGNoX29wY29kZSAodm9pZCk7CitleHRlcm4gdm9pZCBnZXRfd29yZHNf YXRfUEMgKGJmZF92bWEgbWVtYWRkciwgc3RydWN0IGRpc2Fzc2VtYmxlX2lu Zm8gKmluZm8pOworCisvKiBBbmFseXplIGEgcHJvbG9ndWUgc3RhcnRpbmcg YXQgU1RBUlRfUEMsIGdvaW5nIG5vIGZ1cnRoZXIgdGhhbgorICAgTElNSVRf UEMuICBGaWxsIGluIFJFU1VMVCBhcyBhcHByb3ByaWF0ZS4gICovCitzdGF0 aWMgdm9pZAorY3IxNl9hbmFseXplX3Byb2xvZ3VlIChDT1JFX0FERFIgc3Rh cnRfcGMsCisJCSAgICAgICBDT1JFX0FERFIgbGltaXRfcGMsIHN0cnVjdCBj cjE2X3Byb2xvZ3VlICpyZXN1bHQpCit7CisgIENPUkVfQUREUiBwYywgbmV4 dF9wYzsKKyAgZ2RiX2J5dGUgYnVmWzZdOworICBjaGFyIGluc25fYnl0ZTEs IGluc25fYnl0ZTI7CisgIGludCBybjsKKyAgaW50IGxlbmd0aDsKKyAgcHZf dCByZWdbQ1IxNl9OVU1fUkVHU107CisgIHN0cnVjdCBwdl9hcmVhICpzdGFj azsKKyAgc3RydWN0IGNsZWFudXAgKmJhY2tfdG87CisgIENPUkVfQUREUiBh ZnRlcl9sYXN0X2ZyYW1lX3NldHVwX2luc24gPSBzdGFydF9wYzsKKyAgaW50 IGlzX2RlY29kZWQ7ICAgICAgICAgICAgICAgLyogTm9uemVybyBtZWFucyBp bnN0cnVjdGlvbiBoYXMgYSBtYXRjaC4gICovCisKKyAgbWVtc2V0IChyZXN1 bHQsIDAsIHNpemVvZiAoKnJlc3VsdCkpOworCisgIGZvciAocm4gPSAwOyBy biA8IENSMTZfTlVNX1JFR1M7IHJuKyspCisgICAgeworICAgICAgcmVnW3Ju XSA9IHB2X3JlZ2lzdGVyIChybiwgMCk7CisgICAgICByZXN1bHQtPnJlZ19v ZmZzZXRbcm5dID0gMTsKKyAgICB9CisKKyAgc3RhY2sgPSBtYWtlX3B2X2Fy ZWEgKENSMTZfU1BfUkVHTlVNLCBnZGJhcmNoX2FkZHJfYml0ICh0YXJnZXRf Z2RiYXJjaCkpOworICBiYWNrX3RvID0gbWFrZV9jbGVhbnVwX2ZyZWVfcHZf YXJlYSAoc3RhY2spOworCisgIHBjID0gc3RhcnRfcGM7CisgIHdoaWxlIChw YyA8IGxpbWl0X3BjKQorICAgIHsKKyAgICAgIHRhcmdldF9yZWFkX21lbW9y eSAocGMsIGJ1ZiwgNik7CS8vIHJlYWQgNiBieXRlcywgbWF4IDQ4IGJpdCBv cGNvZGUKKyAgICAgIHdvcmRzWzBdID0gYnVmWzFdIDw8IDggfCBidWZbMF07 CisgICAgICB3b3Jkc1sxXSA9IGJ1ZlszXSA8PCA4IHwgYnVmWzJdOworICAg ICAgd29yZHNbMl0gPSBidWZbNV0gPDwgOCB8IGJ1Zls0XTsKKyAgICAgIGFs bFdvcmRzID0KKwkoKFVMT05HTE9ORykgd29yZHNbMF0gPDwgMzIpICsgKCh1 bnNpZ25lZCBsb25nKSB3b3Jkc1sxXSA8PCAxNikgKworCXdvcmRzWzJdOwor CisgICAgICAvKiBGaW5kIGEgbWF0Y2hpbmcgb3Bjb2RlIGluIHRhYmxlLiAg Ki8KKyAgICAgIGlzX2RlY29kZWQgPSBtYXRjaF9vcGNvZGUgKCk7CisgICAg ICBtYWtlX2luc3RydWN0aW9uICgpOworICAgICAgbGVuZ3RoID0gY3Vycklu c24uc2l6ZTsKKyAgICAgIG5leHRfcGMgPSBwYyArIGxlbmd0aDsKKyAgICAg IGluc25fYnl0ZTEgPSAod29yZHNbMF0gPj4gOCkgJiAweEZGOworCisgICAg ICBpZiAoaW5zbl9ieXRlMSA9PSAweDAxKQkvLyBQVVNICisJeworCSAgaW50 IHIxLCByMjsKKwkgIGludCByOworCSAgaW5zbl9ieXRlMiA9IHdvcmRzWzBd OworCisJICBpZiAoaW5zbl9ieXRlMiAmIDB4ODApCS8vIFNhdmUgUkEgcmVn CisJICAgIHsKKwkgICAgICByZWdbQ1IxNl9TUF9SRUdOVU1dID0gcHZfYWRk X2NvbnN0YW50IChyZWdbQ1IxNl9TUF9SRUdOVU1dLCAtNCk7CisJICAgICAg cHZfYXJlYV9zdG9yZSAoc3RhY2ssIHJlZ1tDUjE2X1NQX1JFR05VTV0sIDQs CisJCQkgICAgIHJlZ1tDUjE2X1JBX1JFR05VTV0pOworCSAgICB9CisKKwkg IHIxID0gaW5zbl9ieXRlMiAmIDB4MEY7CS8vIFN0YXJ0IFJlZ2lzdGVyCisJ ICByMiA9ICgoaW5zbl9ieXRlMiAmIDB4NzApID4+IDQpOwkvLzMgYml0IGlt bSBjb3VudAorCSAgcjIgPSByMiArIHIxICsgMTsJLy8gMyBiaXQgY291bnQg aXMgMSB0byA4CisKKwkgIGZvciAociA9IHIxOyByIDwgcjI7IHIrKykKKwkg ICAgeworCSAgICAgIGlmIChyID49IENSMTZfUjEyX1JFR05VTSkKKwkJewor CQkgIHJlZ1tDUjE2X1NQX1JFR05VTV0gPQorCQkgICAgcHZfYWRkX2NvbnN0 YW50IChyZWdbQ1IxNl9TUF9SRUdOVU1dLCAtNCk7CisJCSAgcHZfYXJlYV9z dG9yZSAoc3RhY2ssIHJlZ1tDUjE2X1NQX1JFR05VTV0sIDQsIHJlZ1tyXSk7 CisJCSAgcisrOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgcmVnW0NS MTZfU1BfUkVHTlVNXSA9CisJCSAgICBwdl9hZGRfY29uc3RhbnQgKHJlZ1tD UjE2X1NQX1JFR05VTV0sIC0yKTsKKwkJICBwdl9hcmVhX3N0b3JlIChzdGFj aywgcmVnW0NSMTZfU1BfUkVHTlVNXSwgMiwgcmVnW3JdKTsKKwkJfQorCSAg ICB9CisJICBhZnRlcl9sYXN0X2ZyYW1lX3NldHVwX2luc24gPSBuZXh0X3Bj OworCX0KKworICAgICAgZWxzZSBpZiAoaW5zbl9ieXRlMSA9PSAweDYwKQkv LyBBZGQgY29uc3RhbnQgdG8gU1AKKwl7CisJICBpbnQgcmRzdDsKKwkgIHNp Z25lZCBzaG9ydCBhZGRlbmQ7CisJICBpbnNuX2J5dGUyID0gd29yZHNbMF07 CisJICByZHN0ID0gaW5zbl9ieXRlMiAmIDB4MEY7CS8vIG1hc2sgdXBwZXIg bmliYmxlIAorCSAgaWYgKHJkc3QgPT0gQ1IxNl9TUF9SRUdOVU0pCS8vIGFk ZGluZyB0byBTUD8KKwkgICAgeworCSAgICAgIGlmIChsZW5ndGggPT0gMikK KwkJeworCQkgIGFkZGVuZCA9IChpbnNuX2J5dGUyICYgMHhGMCkgPj4gNDsJ Ly8gdXNlIHVwcGVyIG5pYmJsZQorCQkgIHJlZ1tyZHN0XSA9IHB2X2FkZF9j b25zdGFudCAocmVnW3Jkc3RdLCBhZGRlbmQpOworCQl9CisJICAgICAgaWYg KGxlbmd0aCA9PSA0KQorCQl7CisJCSAgYWRkZW5kID0gd29yZHNbMV07CisJ CSAgcmVnW3Jkc3RdID0gcHZfYWRkX2NvbnN0YW50IChyZWdbcmRzdF0sIGFk ZGVuZCk7CisJCX0KKwkgICAgICBhZnRlcl9sYXN0X2ZyYW1lX3NldHVwX2lu c24gPSBuZXh0X3BjOworCSAgICB9CisJfQorICAgICAgZWxzZSBpZiAoaW5z bl9ieXRlMSA9PSAweDU1KQkvLyBNT1ZECisJeworCSAgaW50IHJkc3QsIHJz cmM7CisJICBpbnNuX2J5dGUyID0gd29yZHNbMF07CisJICByc3JjID0gKGlu c25fYnl0ZTIgJiAweEYwKSA+PiA0OworCSAgcmRzdCA9IChpbnNuX2J5dGUy ICYgMHgwRik7CisJICByZWdbcmRzdF0gPSByZWdbcnNyY107CisJICBpZiAo cnNyYyA9PSBDUjE2X1NQX1JFR05VTSAmJiByZHN0ID09IENSMTZfRlBfUkVH TlVNKQorCSAgICBhZnRlcl9sYXN0X2ZyYW1lX3NldHVwX2luc24gPSBuZXh0 X3BjOworCX0KKyAgICAgIGVsc2UgaWYgKCgoaW5zbl9ieXRlMSA+PiA0KSAm IDB4MEYpID09IDB4ZCkJLy8gbWFzayBvZiBsb3dlciBuaWJibGUKKwl7CisJ ICAvKiBUaGlzIG1vdmVzIGFuIGFyZ3VtZW50IHJlZ2lzdGVyIHRvIHRoZSBz dGFjay4gIERvbid0CisJICAgICByZWNvcmQgaXQsIGJ1dCBhbGxvdyBpdCB0 byBiZSBhIHBhcnQgb2YgdGhlIHByb2xvZ3VlLiAgKi8KKwkgIGFmdGVyX2xh c3RfZnJhbWVfc2V0dXBfaW5zbiA9IG5leHRfcGM7CisJfQorICAgICAgZWxz ZQorCXsKKwkgIGJyZWFrOwkJLyogVGVybWluYXRlIHRoZSBwcm9sb2d1ZSBz Y2FuLiAgKi8KKwl9CisKKyAgICAgIHBjID0gbmV4dF9wYzsKKyAgICB9CisK KyAgLyogSXMgdGhlIGZyYW1lIHNpemUgKG9mZnNldCwgcmVhbGx5KSBhIGtu b3duIGNvbnN0YW50PyAgKi8KKyAgaWYgKHB2X2lzX3JlZ2lzdGVyIChyZWdb Q1IxNl9TUF9SRUdOVU1dLCBDUjE2X1NQX1JFR05VTSkpCisgICAgcmVzdWx0 LT5mcmFtZV9zaXplID0gcmVnW0NSMTZfU1BfUkVHTlVNXS5rOworCisgIC8q IFdhcyB0aGUgZnJhbWUgcG9pbnRlciBpbml0aWFsaXplZD8gICovCisgIGlm IChwdl9pc19yZWdpc3RlciAocmVnW0NSMTZfRlBfUkVHTlVNXSwgQ1IxNl9T UF9SRUdOVU0pKQorICAgIHsKKyAgICAgIHJlc3VsdC0+aGFzX2ZyYW1lX3B0 ciA9IDE7CisgICAgICByZXN1bHQtPmZyYW1lX3B0cl9vZmZzZXQgPSByZWdb Q1IxNl9GUF9SRUdOVU1dLms7CisgICAgfQorCisgIC8qIFJlY29yZCB3aGVy ZSBhbGwgdGhlIHJlZ2lzdGVycyB3ZXJlIHNhdmVkLiAgKi8KKyAgcHZfYXJl YV9zY2FuIChzdGFjaywgY2hlY2tfZm9yX3NhdmVkLCAodm9pZCAqKSByZXN1 bHQpOworCisgIHJlc3VsdC0+cHJvbG9ndWVfZW5kID0gYWZ0ZXJfbGFzdF9m cmFtZV9zZXR1cF9pbnNuOworICBkb19jbGVhbnVwcyAoYmFja190byk7Cit9 CisKKworLyogSW1wbGVtZW50IHRoZSAic2tpcF9wcm9sb2d1ZSIgZ2RiYXJj aCBtZXRob2QuICAqLworc3RhdGljIENPUkVfQUREUgorY3IxNl9za2lwX3By b2xvZ3VlIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgQ09SRV9BRERSIHBj KQoreworICBjb25zdCBjaGFyICpuYW1lOworICBDT1JFX0FERFIgZnVuY19h ZGRyLCBmdW5jX2VuZDsKKyAgc3RydWN0IGNyMTZfcHJvbG9ndWUgcDsKKwor ICAvKiBUcnkgdG8gZmluZCB0aGUgZXh0ZW50IG9mIHRoZSBmdW5jdGlvbiB0 aGF0IGNvbnRhaW5zIFBDLiAgKi8KKyAgaWYgKCFmaW5kX3BjX3BhcnRpYWxf ZnVuY3Rpb24gKHBjLCAmbmFtZSwgJmZ1bmNfYWRkciwgJmZ1bmNfZW5kKSkK KyAgICByZXR1cm4gcGM7CisKKyAgY3IxNl9hbmFseXplX3Byb2xvZ3VlIChw YywgZnVuY19lbmQsICZwKTsKKyAgcmV0dXJuIHAucHJvbG9ndWVfZW5kOwor fQorCisvKiBHaXZlbiBhIGZyYW1lIGRlc2NyaWJlZCBieSBUSElTX0ZSQU1F LCBkZWNvZGUgdGhlIHByb2xvZ3VlIG9mIGl0cworICAgYXNzb2NpYXRlZCBm dW5jdGlvbiBpZiB0aGVyZSBpcyBub3QgY2FjaGUgZW50cnkgYXMgc3BlY2lm aWVkIGJ5CisgICBUSElTX1BST0xPR1VFX0NBQ0hFLiAgU2F2ZSB0aGUgZGVj b2RlZCBwcm9sb2d1ZSBpbiB0aGUgY2FjaGUgYW5kCisgICByZXR1cm4gdGhh dCBzdHJ1Y3QgYXMgdGhlIHZhbHVlIG9mIHRoaXMgZnVuY3Rpb24uICAqLwor c3RhdGljIHN0cnVjdCBjcjE2X3Byb2xvZ3VlICoKK2NyMTZfYW5hbHl6ZV9m cmFtZV9wcm9sb2d1ZSAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUs CisJCQkgICAgIHZvaWQgKip0aGlzX3Byb2xvZ3VlX2NhY2hlKQoreworICBp ZiAoISp0aGlzX3Byb2xvZ3VlX2NhY2hlKQorICAgIHsKKyAgICAgIENPUkVf QUREUiBmdW5jX3N0YXJ0LCBzdG9wX2FkZHI7CisKKyAgICAgICp0aGlzX3By b2xvZ3VlX2NhY2hlID0gRlJBTUVfT0JTVEFDS19aQUxMT0MgKHN0cnVjdCBj cjE2X3Byb2xvZ3VlKTsKKworICAgICAgZnVuY19zdGFydCA9IGdldF9mcmFt ZV9mdW5jICh0aGlzX2ZyYW1lKTsKKyAgICAgIHN0b3BfYWRkciA9IGdldF9m cmFtZV9wYyAodGhpc19mcmFtZSk7CisKKyAgICAgIC8qIElmIHdlIGNvdWxk bid0IGZpbmQgYW55IGZ1bmN0aW9uIGNvbnRhaW5pbmcgdGhlIFBDLCB0aGVu CisgICAgICAgICBqdXN0IGluaXRpYWxpemUgdGhlIHByb2xvZ3VlIGNhY2hl LCBidXQgZG9uJ3QgZG8gYW55dGhpbmcuICAqLworICAgICAgaWYgKCFmdW5j X3N0YXJ0KQorCXN0b3BfYWRkciA9IGZ1bmNfc3RhcnQ7CisKKyAgICAgIGNy MTZfYW5hbHl6ZV9wcm9sb2d1ZSAoZnVuY19zdGFydCwgc3RvcF9hZGRyLCAq dGhpc19wcm9sb2d1ZV9jYWNoZSk7CisgICAgfQorCisgIHJldHVybiAqdGhp c19wcm9sb2d1ZV9jYWNoZTsKK30KKworLyogR2l2ZW4gdGhlIG5leHQgZnJh bWUgYW5kIGEgcHJvbG9ndWUgY2FjaGUsIHJldHVybiB0aGlzIGZyYW1lJ3MK KyAgIGJhc2UuICAqLworc3RhdGljIENPUkVfQUREUgorY3IxNl9mcmFtZV9i YXNlIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwgdm9pZCAqKnRo aXNfcHJvbG9ndWVfY2FjaGUpCit7CisgIHN0cnVjdCBjcjE2X3Byb2xvZ3Vl ICpwCisgICAgPSBjcjE2X2FuYWx5emVfZnJhbWVfcHJvbG9ndWUgKHRoaXNf ZnJhbWUsIHRoaXNfcHJvbG9ndWVfY2FjaGUpOworCisgIC8qIEluIGZ1bmN0 aW9ucyB0aGF0IHVzZSBhbGxvY2EsIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRo ZSBzdGFjaworICAgICBwb2ludGVyIGFuZCB0aGUgZnJhbWUgYmFzZSB2YXJp ZXMgZHluYW1pY2FsbHksIHNvIHdlIGNhbid0IHVzZQorICAgICB0aGUgU1Ag cGx1cyBzdGF0aWMgaW5mb3JtYXRpb24gbGlrZSBwcm9sb2d1ZSBhbmFseXNp cyB0byBmaW5kIHRoZQorICAgICBmcmFtZSBiYXNlLiAgSG93ZXZlciwgc3Vj aCBmdW5jdGlvbnMgbXVzdCBoYXZlIGEgZnJhbWUgcG9pbnRlciwKKyAgICAg dG8gYmUgYWJsZSB0byByZXN0b3JlIHRoZSBTUCBvbiBleGl0LiAgU28gd2hl bmV2ZXIgd2UgZG8gaGF2ZSBhCisgICAgIGZyYW1lIHBvaW50ZXIsIHVzZSB0 aGF0IHRvIGZpbmQgdGhlIGJhc2UuICAqLworICBpZiAocC0+aGFzX2ZyYW1l X3B0cikKKyAgICB7CisgICAgICBDT1JFX0FERFIgZnAgPSBnZXRfZnJhbWVf cmVnaXN0ZXJfdW5zaWduZWQgKHRoaXNfZnJhbWUsIENSMTZfRlBfUkVHTlVN KTsKKyAgICAgIHJldHVybiBmcCAtIHAtPmZyYW1lX3B0cl9vZmZzZXQ7Cisg ICAgfQorICBlbHNlCisgICAgeworICAgICAgQ09SRV9BRERSIHNwID0gZ2V0 X2ZyYW1lX3JlZ2lzdGVyX3Vuc2lnbmVkICh0aGlzX2ZyYW1lLCBDUjE2X1NQ X1JFR05VTSk7CisgICAgICByZXR1cm4gc3AgLSBwLT5mcmFtZV9zaXplOwor ICAgIH0KK30KKworLyogSW1wbGVtZW50IHRoZSAiZnJhbWVfdGhpc19pZCIg bWV0aG9kIGZvciB1bndpbmRpbmcgZnJhbWVzLiAgKi8KK3N0YXRpYyB2b2lk CitjcjE2X2ZyYW1lX3RoaXNfaWQgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlz X2ZyYW1lLAorCQkgICAgdm9pZCAqKnRoaXNfcHJvbG9ndWVfY2FjaGUsIHN0 cnVjdCBmcmFtZV9pZCAqdGhpc19pZCkKK3sKKyAgKnRoaXNfaWQgPQorICAg IGZyYW1lX2lkX2J1aWxkIChjcjE2X2ZyYW1lX2Jhc2UgKHRoaXNfZnJhbWUs IHRoaXNfcHJvbG9ndWVfY2FjaGUpLAorCQkgICAgZ2V0X2ZyYW1lX2Z1bmMg KHRoaXNfZnJhbWUpKTsKK30KKworc3RhdGljIHN0cnVjdCB2YWx1ZSAqCitj cjE2X2ZyYW1lX3ByZXZfcmVnaXN0ZXIgKHN0cnVjdCBmcmFtZV9pbmZvICp0 aGlzX2ZyYW1lLAorCQkJICB2b2lkICoqdGhpc19wcm9sb2d1ZV9jYWNoZSwg aW50IHJlZ251bSkKK3sKKyAgc3RydWN0IGNyMTZfcHJvbG9ndWUgKnAgPQor ICAgIGNyMTZfYW5hbHl6ZV9mcmFtZV9wcm9sb2d1ZSAodGhpc19mcmFtZSwg dGhpc19wcm9sb2d1ZV9jYWNoZSk7CisgIENPUkVfQUREUiBmcmFtZV9iYXNl ID0gY3IxNl9mcmFtZV9iYXNlICh0aGlzX2ZyYW1lLCB0aGlzX3Byb2xvZ3Vl X2NhY2hlKTsKKyAgaW50IHJlZ19zaXplID0gcmVnaXN0ZXJfc2l6ZSAoZ2V0 X2ZyYW1lX2FyY2ggKHRoaXNfZnJhbWUpLCByZWdudW0pOworICBVTE9OR0VT VCByYV9wcmV2OworCisgIGlmIChyZWdudW0gPT0gQ1IxNl9TUF9SRUdOVU0p CisgICAgcmV0dXJuIGZyYW1lX3Vud2luZF9nb3RfY29uc3RhbnQgKHRoaXNf ZnJhbWUsIHJlZ251bSwgZnJhbWVfYmFzZSk7CisKKyAgLyogVGhlIGNhbGwg aW5zdHJ1Y3Rpb24gaGFzIHNhdmVkIHRoZSByZXR1cm4gYWRkcmVzcyBvbiB0 aGUgUkEgcmVnaXN0ZXIsCisgICAgIENSMTZfUjEzX1JFR05VTS4gU28sIHdl IG5lZWQgbm90IGFkanVzdCBhbnl0aGluZyBkaXJlY3RseS4gV2Ugd2lsbCAK KyAgICAgYW5hbHl6ZSBwcm9sb2d1ZSBhcyB0aGlzIFJBIHJlZ2lzdGVyIGlz IHB1c2hlZCBvbnRvIHN0YWNrIGZvciBmdXJ0aGVyCisgICAgIGxlYWYgZnVu Y3Rpb24gY2FsbHMgdG8gd29yayAqLworICBlbHNlIGlmIChyZWdudW0gPT0g Q1IxNl9QQ19SRUdOVU0pCisgICAgeworICAgICAgcmFfcHJldiA9IGZyYW1l X3Vud2luZF9yZWdpc3Rlcl91bnNpZ25lZCAodGhpc19mcmFtZSwgQ1IxNl9S QV9SRUdOVU0pOworICAgICAgcmFfcHJldiA9IHJhX3ByZXYgPDwgMTsKKyAg ICAgIHJldHVybiBmcmFtZV91bndpbmRfZ290X2NvbnN0YW50ICh0aGlzX2Zy YW1lLCBDUjE2X1BDX1JFR05VTSwgcmFfcHJldik7CisgICAgfQorCisgIC8q IElmIHByb2xvZ3VlIGFuYWx5c2lzIHNheXMgd2Ugc2F2ZWQgdGhpcyByZWdp c3RlciBzb21ld2hlcmUsCisgICAgIHJldHVybiBhIGRlc2NyaXB0aW9uIG9m IHRoZSBzdGFjayBzbG90IGhvbGRpbmcgaXQuICAqLworICBlbHNlIGlmIChw LT5yZWdfb2Zmc2V0W3JlZ251bV0gIT0gMSkKKyAgICB7CisgICAgICByZXR1 cm4gZnJhbWVfdW53aW5kX2dvdF9tZW1vcnkgKHRoaXNfZnJhbWUsIHJlZ251 bSwKKwkJCQkgICAgICBmcmFtZV9iYXNlICsgcC0+cmVnX29mZnNldFtyZWdu dW1dKTsKKyAgICB9CisKKyAgLyogT3RoZXJ3aXNlLCBwcmVzdW1lIHdlIGhh dmVuJ3QgY2hhbmdlZCB0aGUgdmFsdWUgb2YgdGhpcworICAgICByZWdpc3Rl ciwgYW5kIGdldCBpdCBmcm9tIHRoZSBuZXh0IGZyYW1lLiAgKi8KKyAgZWxz ZQorICAgIHsKKyAgICAgIHJldHVybiBmcmFtZV91bndpbmRfZ290X3JlZ2lz dGVyICh0aGlzX2ZyYW1lLCByZWdudW0sIHJlZ251bSk7CisgICAgfQorfQor CitzdGF0aWMgY29uc3Qgc3RydWN0IGZyYW1lX3Vud2luZCBjcjE2X2ZyYW1l X3Vud2luZCA9IHsKKyAgTk9STUFMX0ZSQU1FLAorICBkZWZhdWx0X2ZyYW1l X3Vud2luZF9zdG9wX3JlYXNvbiwKKyAgY3IxNl9mcmFtZV90aGlzX2lkLAor ICBjcjE2X2ZyYW1lX3ByZXZfcmVnaXN0ZXIsCisgIE5VTEwsCisgIGRlZmF1 bHRfZnJhbWVfc25pZmZlcgorfTsKKworLyogSW1wbGVtZW50IHRoZSAidW53 aW5kX3BjIiBnZGJhcmNoIG1ldGhvZC4gICovCitzdGF0aWMgQ09SRV9BRERS CitjcjE2X3Vud2luZF9wYyAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIHN0 cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lKQoreworICBVTE9OR0VTVCBw YzsKKworICBwYyA9IGZyYW1lX3Vud2luZF9yZWdpc3Rlcl91bnNpZ25lZCAo dGhpc19mcmFtZSwgQ1IxNl9QQ19SRUdOVU0pOworICByZXR1cm4gcGM7Cit9 CisKKy8qIEltcGxlbWVudCB0aGUgInVud2luZF9zcCIgZ2RiYXJjaCBtZXRo b2QuICAqLworc3RhdGljIENPUkVfQUREUgorY3IxNl91bndpbmRfc3AgKHN0 cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhp c19mcmFtZSkKK3sKKyAgVUxPTkdFU1Qgc3A7CisKKyAgc3AgPSBmcmFtZV91 bndpbmRfcmVnaXN0ZXJfdW5zaWduZWQgKHRoaXNfZnJhbWUsIENSMTZfU1Bf UkVHTlVNKTsKKyAgcmV0dXJuIHNwOworfQorCisvKiBJbXBsZW1lbnQgdGhl ICJkdW1teV9pZCIgZ2RiYXJjaCBtZXRob2QuICAqLworc3RhdGljIHN0cnVj dCBmcmFtZV9pZAorY3IxNl9kdW1teV9pZCAoc3RydWN0IGdkYmFyY2ggKmdk YmFyY2gsIHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lKQoreworICBy ZXR1cm4KKyAgICBmcmFtZV9pZF9idWlsZCAoZ2V0X2ZyYW1lX3JlZ2lzdGVy X3Vuc2lnbmVkICh0aGlzX2ZyYW1lLCBDUjE2X1NQX1JFR05VTSksCisJCSAg ICBnZXRfZnJhbWVfcGMgKHRoaXNfZnJhbWUpKTsKK30KKworLyogSW1wbGVt ZW50IHRoZSAicHVzaF9kdW1teV9jYWxsIiBnZGJhcmNoIG1ldGhvZC4gICov CitzdGF0aWMgQ09SRV9BRERSCitjcjE2X3B1c2hfZHVtbXlfY2FsbCAoc3Ry dWN0IGdkYmFyY2ggKmdkYmFyY2gsIHN0cnVjdCB2YWx1ZSAqZnVuY3Rpb24s CisJCSAgICAgIHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIENPUkVfQURE UiBicF9hZGRyLCBpbnQgbmFyZ3MsCisJCSAgICAgIHN0cnVjdCB2YWx1ZSAq KmFyZ3MsIENPUkVfQUREUiBzcCwgaW50IHN0cnVjdF9yZXR1cm4sCisJCSAg ICAgIENPUkVfQUREUiBzdHJ1Y3RfYWRkcikKK3sKKyAgZW51bSBiZmRfZW5k aWFuIGJ5dGVfb3JkZXIgPSBnZGJhcmNoX2J5dGVfb3JkZXIgKGdkYmFyY2gp OworICBpbnQgd3JpdGVfcGFzczsKKyAgaW50IHNwX29mZiA9IDA7CisgIENP UkVfQUREUiBjZmE7CisgIGludCBudW1fcmVnaXN0ZXJfY2FuZGlkYXRlX2Fy Z3M7CisKKyAgc3RydWN0IHR5cGUgKmZ1bmNfdHlwZSA9IHZhbHVlX3R5cGUg KGZ1bmN0aW9uKTsKKworICAvKiBEZXJlZmVyZW5jZSBmdW5jdGlvbiBwb2lu dGVyIHR5cGVzLiAgKi8KKyAgd2hpbGUgKFRZUEVfQ09ERSAoZnVuY190eXBl KSA9PSBUWVBFX0NPREVfUFRSKQorICAgIGZ1bmNfdHlwZSA9IFRZUEVfVEFS R0VUX1RZUEUgKGZ1bmNfdHlwZSk7CisKKyAgLyogVGhlIGVuZCByZXN1bHQg aGFkIGJldHRlciBiZSBhIGZ1bmN0aW9uIG9yIGEgbWV0aG9kLiAgKi8KKyAg Z2RiX2Fzc2VydCAoVFlQRV9DT0RFIChmdW5jX3R5cGUpID09IFRZUEVfQ09E RV9GVU5DCisJICAgICAgfHwgVFlQRV9DT0RFIChmdW5jX3R5cGUpID09IFRZ UEVfQ09ERV9NRVRIT0QpOworCisgIC8qIEZ1bmN0aW9ucyB3aXRoIGEgdmFy aWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBoYXZlIGFsbCBvZiB0aGVpcgor ICAgICB2YXJpYWJsZSBhcmd1bWVudHMgYW5kIHRoZSBsYXN0IG5vbi12YXJp YWJsZSBhcmd1bWVudCBwYXNzZWQKKyAgICAgb24gdGhlIHN0YWNrLgorCisg ICAgIE90aGVyd2lzZSwgd2UgY2FuIHBhc3MgdXAgdG8gZm91ciBhcmd1bWVu dHMgb24gdGhlIHN0YWNrLgorCisgICAgIE9uY2UgY29tcHV0ZWQsIHdlIGxl YXZlIHRoaXMgdmFsdWUgYWxvbmUuICBJLmUuIHdlIGRvbid0IHVwZGF0ZQor ICAgICBpdCBpbiBjYXNlIG9mIGEgc3RydWN0IHJldHVybiBnb2luZyBpbiBh IHJlZ2lzdGVyIG9yIGFuIGFyZ3VtZW50CisgICAgIHJlcXVpcmluZyBtdWx0 aXBsZSByZWdpc3RlcnMsIGV0Yy4gIFdlIHJlbHkgaW5zdGVhZCBvbiB0aGUg dmFsdWUKKyAgICAgb2YgdGhlIGBgYXJnX3JlZycnIHZhcmlhYmxlIHRvIGdl dCB0aGVzZSBvdGhlciBkZXRhaWxzIGNvcnJlY3QuICAqLworCisgIGlmIChU WVBFX1ZBUkFSR1MgKGZ1bmNfdHlwZSkpCisgICAgbnVtX3JlZ2lzdGVyX2Nh bmRpZGF0ZV9hcmdzID0gVFlQRV9ORklFTERTIChmdW5jX3R5cGUpIC0gMTsK KyAgZWxzZQorICAgIG51bV9yZWdpc3Rlcl9jYW5kaWRhdGVfYXJncyA9IDQ7 CisKKyAgLyogV2UgbWFrZSB0d28gcGFzc2VzOyB0aGUgZmlyc3QgZG9lcyB0 aGUgc3RhY2sgYWxsb2NhdGlvbiwKKyAgICAgdGhlIHNlY29uZCBhY3R1YWxs eSBzdG9yZXMgdGhlIGFyZ3VtZW50cy4gICovCisgIGZvciAod3JpdGVfcGFz cyA9IDA7IHdyaXRlX3Bhc3MgPD0gMTsgd3JpdGVfcGFzcysrKQorICAgIHsK KyAgICAgIGludCBpOworICAgICAgaW50IGFyZ19yZWcgPSBDUjE2X1IwX1JF R05VTTsKKworICAgICAgaWYgKHdyaXRlX3Bhc3MpCisJc3AgPSBhbGlnbl9k b3duIChzcCAtIHNwX29mZiwgNCk7CisgICAgICBzcF9vZmYgPSAwOworCisg ICAgICBpZiAoc3RydWN0X3JldHVybikKKwl7CisJICBzdHJ1Y3QgdHlwZSAq cmV0dXJuX3R5cGUgPSBUWVBFX1RBUkdFVF9UWVBFIChmdW5jX3R5cGUpOwor CisJICBnZGJfYXNzZXJ0IChUWVBFX0NPREUgKHJldHVybl90eXBlKSA9PSBU WVBFX0NPREVfU1RSVUNUCisJCSAgICAgIHx8IFRZUEVfQ09ERSAoZnVuY190 eXBlKSA9PSBUWVBFX0NPREVfVU5JT04pOworCisJICBpZiAoVFlQRV9MRU5H VEggKHJldHVybl90eXBlKSA+IDE2CisJICAgICAgfHwgVFlQRV9MRU5HVEgg KHJldHVybl90eXBlKSAlIDQgIT0gMCkKKwkgICAgeworCSAgICAgIGlmICh3 cml0ZV9wYXNzKQorCQlyZWdjYWNoZV9jb29rZWRfd3JpdGVfdW5zaWduZWQg KHJlZ2NhY2hlLCBDUjE2X1IxMl9SRUdOVU0sCisJCQkJCQlzdHJ1Y3RfYWRk cik7CisJICAgIH0KKwl9CisKKyAgICAgIC8qIFB1c2ggdGhlIGFyZ3VtZW50 cy4gICovCisgICAgICBmb3IgKGkgPSAwOyBpIDwgbmFyZ3M7IGkrKykKKwl7 CisJICBzdHJ1Y3QgdmFsdWUgKmFyZyA9IGFyZ3NbaV07CisJICBjb25zdCBn ZGJfYnl0ZSAqYXJnX2JpdHMgPSB2YWx1ZV9jb250ZW50c19hbGwgKGFyZyk7 CisJICBzdHJ1Y3QgdHlwZSAqYXJnX3R5cGUgPSBjaGVja190eXBlZGVmICh2 YWx1ZV90eXBlIChhcmcpKTsKKwkgIFVMT05HRVNUIGFyZ19zaXplID0gVFlQ RV9MRU5HVEggKGFyZ190eXBlKTsKKworCSAgaWYgKGkgPT0gMCAmJiBzdHJ1 Y3RfYWRkciAhPSAwICYmICFzdHJ1Y3RfcmV0dXJuCisJICAgICAgJiYgVFlQ RV9DT0RFIChhcmdfdHlwZSkgPT0gVFlQRV9DT0RFX1BUUgorCSAgICAgICYm IGV4dHJhY3RfdW5zaWduZWRfaW50ZWdlciAoYXJnX2JpdHMsIDQsCisJCQkJ CSAgIGJ5dGVfb3JkZXIpID09IHN0cnVjdF9hZGRyKQorCSAgICB7CisJICAg ICAgLyogVGhpcyBhcmd1bWVudCByZXByZXNlbnRzIHRoZSBhZGRyZXNzIGF0 IHdoaWNoIEMrKyAoYW5kCisJICAgICAgICAgcG9zc2libHkgb3RoZXIgbGFu Z3VhZ2VzKSBzdG9yZSB0aGVpciByZXR1cm4gdmFsdWUuCisJICAgICAgICAg UHV0IHRoaXMgdmFsdWUgaW4gUjE1LiAgKi8KKwkgICAgICBpZiAod3JpdGVf cGFzcykKKwkJcmVnY2FjaGVfY29va2VkX3dyaXRlX3Vuc2lnbmVkIChyZWdj YWNoZSwgQ1IxNl9SMTJfUkVHTlVNLAorCQkJCQkJc3RydWN0X2FkZHIpOwor CSAgICB9CisJICBlbHNlIGlmIChUWVBFX0NPREUgKGFyZ190eXBlKSAhPSBU WVBFX0NPREVfU1RSVUNUCisJCSAgICYmIFRZUEVfQ09ERSAoYXJnX3R5cGUp ICE9IFRZUEVfQ09ERV9VTklPTikKKwkgICAgeworCSAgICAgIC8qIEFyZ3Vt ZW50IGlzIGEgc2NhbGFyLiAgKi8KKwkgICAgICBpZiAoYXJnX3NpemUgPT0g OCkKKwkJeworCQkgIGlmIChpIDwgbnVtX3JlZ2lzdGVyX2NhbmRpZGF0ZV9h cmdzCisJCSAgICAgICYmIGFyZ19yZWcgPD0gQ1IxNl9SN19SRUdOVU0gLSAx KQorCQkgICAgeworCQkgICAgICAvKiBJZiBhcmd1bWVudCByZWdpc3RlcnMg YXJlIGdvaW5nIHRvIGJlIHVzZWQgdG8gcGFzcworCQkgICAgICAgICBhbiA4 IGJ5dGUgc2NhbGFyLCB0aGUgQUJJIHNwZWNpZmllcyB0aGF0IHR3byByZWdp c3RlcnMKKwkJICAgICAgICAgbXVzdCBiZSBhdmFpbGFibGUuICAqLworCQkg ICAgICBpZiAod3JpdGVfcGFzcykKKwkJCXsKKwkJCSAgcmVnY2FjaGVfY29v a2VkX3dyaXRlX3Vuc2lnbmVkIChyZWdjYWNoZSwgYXJnX3JlZywKKwkJCQkJ CQkgIGV4dHJhY3RfdW5zaWduZWRfaW50ZWdlcgorCQkJCQkJCSAgKGFyZ19i aXRzLCA0LAorCQkJCQkJCSAgIGJ5dGVfb3JkZXIpKTsKKwkJCSAgcmVnY2Fj aGVfY29va2VkX3dyaXRlX3Vuc2lnbmVkIChyZWdjYWNoZSwKKwkJCQkJCQkg IGFyZ19yZWcgKyAxLAorCQkJCQkJCSAgZXh0cmFjdF91bnNpZ25lZF9pbnRl Z2VyCisJCQkJCQkJICAoYXJnX2JpdHMgKyA0LCA0LAorCQkJCQkJCSAgIGJ5 dGVfb3JkZXIpKTsKKwkJCX0KKwkJICAgICAgYXJnX3JlZyArPSAyOworCQkg ICAgfQorCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgc3Bfb2ZmID0gYWxp Z25fdXAgKHNwX29mZiwgNCk7CisJCSAgICAgIC8qIE90aGVyd2lzZSwgcGFz cyB0aGUgOCBieXRlIHNjYWxhciBvbiB0aGUgc3RhY2suICAqLworCQkgICAg ICBpZiAod3JpdGVfcGFzcykKKwkJCXdyaXRlX21lbW9yeSAoc3AgKyBzcF9v ZmYsIGFyZ19iaXRzLCA4KTsKKwkJICAgICAgc3Bfb2ZmICs9IDg7CisJCSAg ICB9CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICBVTE9OR0VTVCB1Owor CisJCSAgZ2RiX2Fzc2VydCAoYXJnX3NpemUgPD0gNCk7CisKKwkJICB1ID0K KwkJICAgIGV4dHJhY3RfdW5zaWduZWRfaW50ZWdlciAoYXJnX2JpdHMsIGFy Z19zaXplLCBieXRlX29yZGVyKTsKKworCQkgIGlmIChpIDwgbnVtX3JlZ2lz dGVyX2NhbmRpZGF0ZV9hcmdzCisJCSAgICAgICYmIGFyZ19yZWcgPD0gQ1Ix Nl9SN19SRUdOVU0pCisJCSAgICB7CisJCSAgICAgIGlmICh3cml0ZV9wYXNz KQorCQkJcmVnY2FjaGVfY29va2VkX3dyaXRlX3Vuc2lnbmVkIChyZWdjYWNo ZSwgYXJnX3JlZywgdSk7CisJCSAgICAgIGFyZ19yZWcgKz0gMTsKKwkJICAg IH0KKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIGludCBwX2FyZ19zaXpl ID0gNDsKKworCQkgICAgICBpZiAoVFlQRV9QUk9UT1RZUEVEIChmdW5jX3R5 cGUpCisJCQkgICYmIGkgPCBUWVBFX05GSUVMRFMgKGZ1bmNfdHlwZSkpCisJ CQl7CisJCQkgIHN0cnVjdCB0eXBlICpwX2FyZ190eXBlID0KKwkJCSAgICBU WVBFX0ZJRUxEX1RZUEUgKGZ1bmNfdHlwZSwgaSk7CisJCQkgIHBfYXJnX3Np emUgPSBUWVBFX0xFTkdUSCAocF9hcmdfdHlwZSk7CisJCQl9CisKKwkJICAg ICAgc3Bfb2ZmID0gYWxpZ25fdXAgKHNwX29mZiwgcF9hcmdfc2l6ZSk7CisK KwkJICAgICAgaWYgKHdyaXRlX3Bhc3MpCisJCQl3cml0ZV9tZW1vcnlfdW5z aWduZWRfaW50ZWdlciAoc3AgKyBzcF9vZmYsCisJCQkJCQkgICAgICAgcF9h cmdfc2l6ZSwgYnl0ZV9vcmRlciwKKwkJCQkJCSAgICAgICB1KTsKKwkJICAg ICAgc3Bfb2ZmICs9IHBfYXJnX3NpemU7CisJCSAgICB9CisJCX0KKwkgICAg fQorCSAgZWxzZQorCSAgICB7CisJICAgICAgLyogQXJndW1lbnQgaXMgYSBz dHJ1Y3Qgb3IgdW5pb24uICBQYXNzIGFzIG11Y2ggb2YgdGhlIHN0cnVjdAor CSAgICAgICAgIGluIHJlZ2lzdGVycywgaWYgcG9zc2libGUuICBQYXNzIHRo ZSByZXN0IG9uIHRoZSBzdGFjay4gICovCisJICAgICAgd2hpbGUgKGFyZ19z aXplID4gMCkKKwkJeworCQkgIGlmIChpIDwgbnVtX3JlZ2lzdGVyX2NhbmRp ZGF0ZV9hcmdzCisJCSAgICAgICYmIGFyZ19yZWcgPD0gQ1IxNl9SN19SRUdO VU0KKwkJICAgICAgJiYgYXJnX3NpemUgPD0gNCAqIChDUjE2X1I3X1JFR05V TSAtIGFyZ19yZWcgKyAxKQorCQkgICAgICAmJiBhcmdfc2l6ZSAlIDQgPT0g MCkKKwkJICAgIHsKKwkJICAgICAgaW50IGxlbiA9IG1pbiAoYXJnX3NpemUs IDQpOworCisJCSAgICAgIGlmICh3cml0ZV9wYXNzKQorCQkJcmVnY2FjaGVf Y29va2VkX3dyaXRlX3Vuc2lnbmVkIChyZWdjYWNoZSwgYXJnX3JlZywKKwkJ CQkJCQlleHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIKKwkJCQkJCQkoYXJnX2Jp dHMsIGxlbiwKKwkJCQkJCQkgYnl0ZV9vcmRlcikpOworCQkgICAgICBhcmdf Yml0cyArPSBsZW47CisJCSAgICAgIGFyZ19zaXplIC09IGxlbjsKKwkJICAg ICAgYXJnX3JlZysrOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIHsKKwkJ ICAgICAgc3Bfb2ZmID0gYWxpZ25fdXAgKHNwX29mZiwgNCk7CisJCSAgICAg IGlmICh3cml0ZV9wYXNzKQorCQkJd3JpdGVfbWVtb3J5IChzcCArIHNwX29m ZiwgYXJnX2JpdHMsIGFyZ19zaXplKTsKKwkJICAgICAgc3Bfb2ZmICs9IGFs aWduX3VwIChhcmdfc2l6ZSwgNCk7CisJCSAgICAgIGFyZ19zaXplID0gMDsK KwkJICAgIH0KKwkJfQorCSAgICB9CisJfQorICAgIH0KKworICAvKiBLZWVw IHRyYWNrIG9mIHRoZSBzdGFjayBhZGRyZXNzIHByaW9yIHRvIHB1c2hpbmcg dGhlIHJldHVybiBhZGRyZXNzLgorICAgICBUaGlzIGlzIHRoZSB2YWx1ZSB0 aGF0IHdlJ2xsIHJldHVybi4gICovCisgIGNmYSA9IHNwOworCisgIC8qIFB1 c2ggdGhlIHJldHVybiBhZGRyZXNzLiAgKi8KKyAgc3AgPSBzcCAtIDQ7Cisg IHdyaXRlX21lbW9yeV91bnNpZ25lZF9pbnRlZ2VyIChzcCwgNCwgYnl0ZV9v cmRlciwgYnBfYWRkcik7CisKKyAgLyogVXBkYXRlIHRoZSBzdGFjayBwb2lu dGVyLiAgKi8KKyAgcmVnY2FjaGVfY29va2VkX3dyaXRlX3Vuc2lnbmVkIChy ZWdjYWNoZSwgQ1IxNl9TUF9SRUdOVU0sIHNwKTsKKworICByZXR1cm4gY2Zh OworfQorCisvKiBJbXBsZW1lbnQgdGhlICJyZXR1cm5fdmFsdWUiIGdkYmFy Y2ggbWV0aG9kLiAgKi8KK3N0YXRpYyBlbnVtIHJldHVybl92YWx1ZV9jb252 ZW50aW9uCitjcjE2X3JldHVybl92YWx1ZSAoc3RydWN0IGdkYmFyY2ggKmdk YmFyY2gsCisJCSAgIHN0cnVjdCB0eXBlICpmdW5jX3R5cGUsCisJCSAgIHN0 cnVjdCB0eXBlICp2YWx0eXBlLAorCQkgICBzdHJ1Y3QgcmVnY2FjaGUgKnJl Z2NhY2hlLAorCQkgICBnZGJfYnl0ZSAqIHJlYWRidWYsIGNvbnN0IGdkYl9i eXRlICogd3JpdGVidWYpCit7CisgIGVudW0gYmZkX2VuZGlhbiBieXRlX29y ZGVyID0gZ2RiYXJjaF9ieXRlX29yZGVyIChnZGJhcmNoKTsKKyAgVUxPTkdF U1QgdmFsdHlwZV9sZW4gPSBUWVBFX0xFTkdUSCAodmFsdHlwZSk7CisKKyAg aWYgKFRZUEVfTEVOR1RIICh2YWx0eXBlKSA+IDE2CisgICAgICB8fCAoKFRZ UEVfQ09ERSAodmFsdHlwZSkgPT0gVFlQRV9DT0RFX1NUUlVDVAorCSAgIHx8 IFRZUEVfQ09ERSAodmFsdHlwZSkgPT0gVFlQRV9DT0RFX1VOSU9OKQorCSAg JiYgVFlQRV9MRU5HVEggKHZhbHR5cGUpICUgNCAhPSAwKSkKKyAgICByZXR1 cm4gUkVUVVJOX1ZBTFVFX1NUUlVDVF9DT05WRU5USU9OOworCisgIGlmIChy ZWFkYnVmKQorICAgIHsKKyAgICAgIFVMT05HRVNUIHU7CisgICAgICBpbnQg YXJncmVnID0gQ1IxNl9SMF9SRUdOVU07CisgICAgICBpbnQgb2Zmc2V0ID0g MDsKKworICAgICAgd2hpbGUgKHZhbHR5cGVfbGVuID4gMCkKKwl7CisJICBp bnQgbGVuID0gbWluICh2YWx0eXBlX2xlbiwgNCk7CisKKwkgIHJlZ2NhY2hl X2Nvb2tlZF9yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgYXJncmVnLCAmdSk7 CisJICBzdG9yZV91bnNpZ25lZF9pbnRlZ2VyIChyZWFkYnVmICsgb2Zmc2V0 LCBsZW4sIGJ5dGVfb3JkZXIsIHUpOworCSAgdmFsdHlwZV9sZW4gLT0gbGVu OworCSAgb2Zmc2V0ICs9IGxlbjsKKwkgIGFyZ3JlZysrOworCX0KKyAgICB9 CisKKyAgaWYgKHdyaXRlYnVmKQorICAgIHsKKyAgICAgIFVMT05HRVNUIHU7 CisgICAgICBpbnQgYXJncmVnID0gQ1IxNl9SMF9SRUdOVU07CisgICAgICBp bnQgb2Zmc2V0ID0gMDsKKworICAgICAgd2hpbGUgKHZhbHR5cGVfbGVuID4g MCkKKwl7CisJICBpbnQgbGVuID0gbWluICh2YWx0eXBlX2xlbiwgNCk7CisK KwkgIHUgPSBleHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIgKHdyaXRlYnVmICsg b2Zmc2V0LCBsZW4sIGJ5dGVfb3JkZXIpOworCSAgcmVnY2FjaGVfY29va2Vk X3dyaXRlX3Vuc2lnbmVkIChyZWdjYWNoZSwgYXJncmVnLCB1KTsKKwkgIHZh bHR5cGVfbGVuIC09IGxlbjsKKwkgIG9mZnNldCArPSBsZW47CisJICBhcmdy ZWcrKzsKKwl9CisgICAgfQorCisgIHJldHVybiBSRVRVUk5fVkFMVUVfUkVH SVNURVJfQ09OVkVOVElPTjsKK30KKworLyogSW1wbGVtZW50IHRoZSAiYnJl YWtwb2ludF9mcm9tX3BjIiBnZGJhcmNoIG1ldGhvZC4gICovCitzdGF0aWMg Y29uc3QgZ2RiX2J5dGUgKgorY3IxNl9icmVha3BvaW50X2Zyb21fcGMgKHN0 cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBDT1JFX0FERFIgKiBwY3B0ciwKKwkJ CSBpbnQgKmxlbnB0cikKK3sKKyAgLyogb3Bjb2RlIG9mIGV4Y3AgaW5zdHJ1 Y3Rpb24gZm9yIGJwdCBpcyAweDAwQzgsIGhvd2V2ZXIgZm9yIHVjbGludXgg d2UgdXNlCisgICAgIGV4Y3AgZmxnICgweDAwQzcpIHRvIGluc2VydCBhIGJy ZWFrcG9pbnQuIFRoZSBleGNwIGJwdCByZXF1aXJlcyBleHRlcm5hbAorICAg ICBoYXJkd2FyZSBzdXBwb3J0IGZvciBicmVha3BvaW50cyB0byB3b3JrIG9u IENSMTYgdGFyZ2V0LiBTb2Z0d2FyZSBiYXNlZAorICAgICBicmVha3BvaW50 cyBhcmUgaW1wbGVtZW50ZWQgaW4gdGhlIGtlcm5lbCB1c2luZyBleGNwIGZs ZyBhbmQgdGVzdGVkIG9uCisgICAgIHRoZSBTQzE0NDUyIHRhcmdldC4gVXNl IDB4MDBDNyB3aXRoIGdkYnNlcnZlci9rZXJuZWwgYW5kIDB4MDBDOCBmb3Ig c2ltL0VMRgorICAgICBXZSByZXByZXNlbnQgdGhlIGJyZWFrcG9pbnQgaW4g bGl0dGxlIGVuZGlhbiBmb3JtYXQgc2luY2UgQ1IxNiBzdXBwb3J0cyAKKyAg ICAgb25seSBsaXR0bGUgZW5kaWFuLgorICAgKi8KKyAgc3RhdGljIGdkYl9i eXRlIGJyZWFrcG9pbnRbXSA9IHsgMHhDOCwgMHgwMCB9OworICAqbGVucHRy ID0gc2l6ZW9mIGJyZWFrcG9pbnQ7CisgIHJldHVybiBicmVha3BvaW50Owor fQorCisKKworLyogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYSBnZGJhcmNo IG9iamVjdC4gICovCitzdGF0aWMgc3RydWN0IGdkYmFyY2ggKgorY3IxNl9n ZGJhcmNoX2luaXQgKHN0cnVjdCBnZGJhcmNoX2luZm8gaW5mbywgc3RydWN0 IGdkYmFyY2hfbGlzdCAqYXJjaGVzKQoreworICBzdHJ1Y3QgZ2RiYXJjaCAq Z2RiYXJjaDsKKyAgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcDsKKyAgaW50 IGVsZl9mbGFnczsKKworICAvKiBFeHRyYWN0IHRoZSBlbGZfZmxhZ3MgaWYg YXZhaWxhYmxlLiAgKi8KKyAgaWYgKGluZm8uYWJmZCAhPSBOVUxMCisgICAg ICAmJiBiZmRfZ2V0X2ZsYXZvdXIgKGluZm8uYWJmZCkgPT0gYmZkX3Rhcmdl dF9lbGZfZmxhdm91cikKKyAgICBlbGZfZmxhZ3MgPSBlbGZfZWxmaGVhZGVy IChpbmZvLmFiZmQpLT5lX2ZsYWdzOworICBlbHNlCisgICAgZWxmX2ZsYWdz ID0gMDsKKworICAvKiBUcnkgdG8gZmluZCB0aGUgYXJjaGl0ZWN0dXJlIGlu IHRoZSBsaXN0IG9mIGFscmVhZHkgZGVmaW5lZAorICAgICBhcmNoaXRlY3R1 cmVzLiAgKi8KKyAgZm9yIChhcmNoZXMgPSBnZGJhcmNoX2xpc3RfbG9va3Vw X2J5X2luZm8gKGFyY2hlcywgJmluZm8pOworICAgICAgIGFyY2hlcyAhPSBO VUxMOworICAgICAgIGFyY2hlcyA9IGdkYmFyY2hfbGlzdF9sb29rdXBfYnlf aW5mbyAoYXJjaGVzLT5uZXh0LCAmaW5mbykpCisgICAgeworICAgICAgaWYg KGdkYmFyY2hfdGRlcCAoYXJjaGVzLT5nZGJhcmNoKS0+ZWxmX2ZsYWdzICE9 IGVsZl9mbGFncykKKwljb250aW51ZTsKKworICAgICAgcmV0dXJuIGFyY2hl cy0+Z2RiYXJjaDsKKyAgICB9CisgIC8qIE5vbmUgZm91bmQsIGNyZWF0ZSBh IG5ldyBhcmNoaXRlY3R1cmUgZnJvbSB0aGUgaW5mb3JtYXRpb24KKyAgICAg cHJvdmlkZWQuICAqLworICB0ZGVwID0gKHN0cnVjdCBnZGJhcmNoX3RkZXAg KikgeG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgZ2RiYXJjaF90ZGVwKSk7Cisg IGdkYmFyY2ggPSBnZGJhcmNoX2FsbG9jICgmaW5mbywgdGRlcCk7CisgIHRk ZXAtPmVsZl9mbGFncyA9IGVsZl9mbGFnczsKKworICBzZXRfZ2RiYXJjaF9u dW1fcmVncyAoZ2RiYXJjaCwgQ1IxNl9OVU1fUkVHUyk7CisgIHNldF9nZGJh cmNoX251bV9wc2V1ZG9fcmVncyAoZ2RiYXJjaCwgMCk7CisgIHNldF9nZGJh cmNoX3JlZ2lzdGVyX25hbWUgKGdkYmFyY2gsIGNyMTZfcmVnaXN0ZXJfbmFt ZSk7CisgIHNldF9nZGJhcmNoX3JlZ2lzdGVyX3R5cGUgKGdkYmFyY2gsIGNy MTZfcmVnaXN0ZXJfdHlwZSk7CisgIHNldF9nZGJhcmNoX3BjX3JlZ251bSAo Z2RiYXJjaCwgQ1IxNl9QQ19SRUdOVU0pOworICBzZXRfZ2RiYXJjaF9zcF9y ZWdudW0gKGdkYmFyY2gsIENSMTZfU1BfUkVHTlVNKTsKKyAgc2V0X2dkYmFy Y2hfaW5uZXJfdGhhbiAoZ2RiYXJjaCwgY29yZV9hZGRyX2xlc3N0aGFuKTsK KyAgc2V0X2dkYmFyY2hfZGVjcl9wY19hZnRlcl9icmVhayAoZ2RiYXJjaCwg Mik7CisgIHNldF9nZGJhcmNoX2JyZWFrcG9pbnRfZnJvbV9wYyAoZ2RiYXJj aCwgY3IxNl9icmVha3BvaW50X2Zyb21fcGMpOworICBzZXRfZ2RiYXJjaF9z a2lwX3Byb2xvZ3VlIChnZGJhcmNoLCBjcjE2X3NraXBfcHJvbG9ndWUpOwor CisgIC8qIFBhc3NpbmcgTlVMTCAgdmFsdWVzIGluIHRoZSBmb2xsb3dpbmcg dHdvIGZ1bmN0aW9ucworICAgICBmb3IgdGhlIHRpbWUgYmVpbmcsIHRvIGZp eCBsYXRlciAgKi8KKyAgc2V0X2dkYmFyY2hfcHJpbnRfaW5zbiAoZ2RiYXJj aCwgcHJpbnRfaW5zbl9jcjE2KTsKKyAgc2V0X2dkYmFyY2hfdW53aW5kX3Bj IChnZGJhcmNoLCBjcjE2X3Vud2luZF9wYyk7CisgIHNldF9nZGJhcmNoX3Vu d2luZF9zcCAoZ2RiYXJjaCwgY3IxNl91bndpbmRfc3ApOworCisgIC8qIE1l dGhvZHMgZm9yIHNhdmluZyAvIGV4dHJhY3RpbmcgYSBkdW1teSBmcmFtZSdz IElELgorICAgICBUaGUgSUQncyBzdGFjayBhZGRyZXNzIG11c3QgbWF0Y2gg dGhlIFNQIHZhbHVlIHJldHVybmVkIGJ5CisgICAgIFBVU0hfRFVNTVlfQ0FM TCwgYW5kIHNhdmVkIGJ5IGdlbmVyaWNfc2F2ZV9kdW1teV9mcmFtZV90b3Mu ICAqLworICBzZXRfZ2RiYXJjaF9kdW1teV9pZCAoZ2RiYXJjaCwgY3IxNl9k dW1teV9pZCk7CisgIHNldF9nZGJhcmNoX3B1c2hfZHVtbXlfY2FsbCAoZ2Ri YXJjaCwgY3IxNl9wdXNoX2R1bW15X2NhbGwpOworICAvKiBUYXJnZXQgYnVp bHRpbiBkYXRhIHR5cGVzLiAgKi8KKyAgc2V0X2dkYmFyY2hfY2hhcl9zaWdu ZWQgKGdkYmFyY2gsIDgpOworICBzZXRfZ2RiYXJjaF9zaG9ydF9iaXQgKGdk YmFyY2gsIDE2KTsKKworICAvKiBpZiB3ZSBkb24ndCBwYXNzIHRoZSBvcHRp b24gLW1pbnQzMgorICAgICBUbyBmaXggOiBhZGQgaWYgZWxzZSBjYXNlIGRl cGVuZGluZyBvbiB0aGUgb3B0aW9uIHBhc3NlZCwKKyAgICAgc3AgdGhhdCB3 ZSBjYW4gaGF2ZSBpbnQgc2l6ZSBhcyAxNiBvciAzMiBiaXRzIGJvdGguICov CisgIHNldF9nZGJhcmNoX2ludF9iaXQgKGdkYmFyY2gsIDE2KTsKKyAgc2V0 X2dkYmFyY2hfbG9uZ19iaXQgKGdkYmFyY2gsIDMyKTsKKyAgc2V0X2dkYmFy Y2hfbG9uZ19sb25nX2JpdCAoZ2RiYXJjaCwgNjQpOworICBzZXRfZ2RiYXJj aF9mbG9hdF9iaXQgKGdkYmFyY2gsIDMyKTsKKworICBzZXRfZ2RiYXJjaF9w dHJfYml0IChnZGJhcmNoLCAzMik7CisgIHNldF9nZGJhcmNoX2Zsb2F0X2Zv cm1hdCAoZ2RiYXJjaCwgZmxvYXRmb3JtYXRzX2llZWVfc2luZ2xlKTsKKyAg c2V0X2dkYmFyY2hfZG91YmxlX2JpdCAoZ2RiYXJjaCwgNjQpOworICBzZXRf Z2RiYXJjaF9sb25nX2RvdWJsZV9iaXQgKGdkYmFyY2gsIDY0KTsKKyAgc2V0 X2dkYmFyY2hfZG91YmxlX2Zvcm1hdCAoZ2RiYXJjaCwgZmxvYXRmb3JtYXRz X2llZWVfZG91YmxlKTsKKyAgc2V0X2dkYmFyY2hfbG9uZ19kb3VibGVfZm9y bWF0IChnZGJhcmNoLCBmbG9hdGZvcm1hdHNfaWVlZV9kb3VibGUpOworCisg IGZyYW1lX3Vud2luZF9hcHBlbmRfdW53aW5kZXIgKGdkYmFyY2gsICZjcjE2 X2ZyYW1lX3Vud2luZCk7CisgIHNldF9nZGJhcmNoX3JldHVybl92YWx1ZSAo Z2RiYXJjaCwgY3IxNl9yZXR1cm5fdmFsdWUpOworCisgIHJldHVybiBnZGJh cmNoOworCit9CisKKy8qIC1XbWlzc2luZy1wcm90b3R5cGVzICovCitleHRl cm4gaW5pdGlhbGl6ZV9maWxlX2Z0eXBlIF9pbml0aWFsaXplX2NyMTZfdGRl cDsKKworLyogUmVnaXN0ZXIgdGhlIGFib3ZlIGluaXRpYWxpemF0aW9uIHJv dXRpbmUuICAqLwordm9pZAorX2luaXRpYWxpemVfY3IxNl90ZGVwICh2b2lk KQoreworICByZWdpc3Rlcl9nZGJhcmNoX2luaXQgKGJmZF9hcmNoX2NyMTYs IGNyMTZfZ2RiYXJjaF9pbml0KTsKK30KZGlmZiAtdXBOIGdkYl9zcmMub3Jp Zy9jb25maWd1cmUgLi9nZGJfc3JjL2NvbmZpZ3VyZQotLS0gZ2RiX3NyYy5v cmlnL2NvbmZpZ3VyZQkyMDEyLTA2LTI4IDE3OjIwOjUyLjAwMDAwMDAwMCAr MDUzMAorKysgLi9nZGJfc3JjL2NvbmZpZ3VyZQkyMDEyLTA4LTE3IDE2OjU2 OjEwLjAwMDAwMDAwMCArMDUzMApAQCAtMzQ0Nyw3ICszNDQ3LDcgQEAgY2Fz ZSAiJHt0YXJnZXR9IiBpbgogICAgIG5vY29uZmlnZGlycz0iJG5vY29uZmln ZGlycyB0YXJnZXQtbGliZ2xvc3MgZ2RiIgogICAgIDs7CiAgIGNyMTYtKi0q KQotICAgIG5vY29uZmlnZGlycz0iJG5vY29uZmlnZGlycyBnZGIiCisgICAg bm9jb25maWdkaXJzPSIkbm9jb25maWdkaXJzIHRhcmdldC1saWJnbG9zcyIK ICAgICA7OwogICBkMTB2LSotKikKICAgICBub2NvbmZpZ2RpcnM9IiRub2Nv bmZpZ2RpcnMgdGFyZ2V0LWxpYmdsb3NzIgpkaWZmIC11cE4gZ2RiX3NyYy5v cmlnL2NvbmZpZ3VyZS5hYyAuL2dkYl9zcmMvY29uZmlndXJlLmFjCi0tLSBn ZGJfc3JjLm9yaWcvY29uZmlndXJlLmFjCTIwMTItMDYtMjggMTc6MjA6NTIu MDAwMDAwMDAwICswNTMwCisrKyAuL2dkYl9zcmMvY29uZmlndXJlLmFjCTIw MTItMDgtMTcgMTY6NTY6MTcuMDAwMDAwMDAwICswNTMwCkBAIC04NzMsNyAr ODczLDcgQEAgY2FzZSAiJHt0YXJnZXR9IiBpbgogICAgIG5vY29uZmlnZGly cz0iJG5vY29uZmlnZGlycyB0YXJnZXQtbGliZ2xvc3MgZ2RiIgogICAgIDs7 CiAgIGNyMTYtKi0qKQotICAgIG5vY29uZmlnZGlycz0iJG5vY29uZmlnZGly cyBnZGIiCisgICAgbm9jb25maWdkaXJzPSIkbm9jb25maWdkaXJzIHRhcmdl dC1saWJnbG9zcyIKICAgICA7OwogICBkMTB2LSotKikKICAgICBub2NvbmZp Z2RpcnM9IiRub2NvbmZpZ2RpcnMgdGFyZ2V0LWxpYmdsb3NzIgpDb21tb24g c3ViZGlyZWN0b3JpZXM6IGdkYl9zcmMub3JpZy9jcHUgYW5kIC4vZ2RiX3Ny Yy9jcHUKQ29tbW9uIHN1YmRpcmVjdG9yaWVzOiBnZGJfc3JjLm9yaWcvQ1ZT IGFuZCAuL2dkYl9zcmMvQ1ZTCkNvbW1vbiBzdWJkaXJlY3RvcmllczogZ2Ri X3NyYy5vcmlnL2V0YyBhbmQgLi9nZGJfc3JjL2V0YwpDb21tb24gc3ViZGly ZWN0b3JpZXM6IGdkYl9zcmMub3JpZy9nZGIgYW5kIC4vZ2RiX3NyYy9nZGIK Q29tbW9uIHN1YmRpcmVjdG9yaWVzOiBnZGJfc3JjLm9yaWcvaW5jbHVkZSBh bmQgLi9nZGJfc3JjL2luY2x1ZGUKQ29tbW9uIHN1YmRpcmVjdG9yaWVzOiBn ZGJfc3JjLm9yaWcvaW50bCBhbmQgLi9nZGJfc3JjL2ludGwKQ29tbW9uIHN1 YmRpcmVjdG9yaWVzOiBnZGJfc3JjLm9yaWcvbGliZGVjbnVtYmVyIGFuZCAu L2dkYl9zcmMvbGliZGVjbnVtYmVyCkNvbW1vbiBzdWJkaXJlY3Rvcmllczog Z2RiX3NyYy5vcmlnL2xpYmliZXJ0eSBhbmQgLi9nZGJfc3JjL2xpYmliZXJ0 eQpDb21tb24gc3ViZGlyZWN0b3JpZXM6IGdkYl9zcmMub3JpZy9vcGNvZGVz IGFuZCAuL2dkYl9zcmMvb3Bjb2RlcwpDb21tb24gc3ViZGlyZWN0b3JpZXM6 IGdkYl9zcmMub3JpZy9yZWFkbGluZSBhbmQgLi9nZGJfc3JjL3JlYWRsaW5l CkNvbW1vbiBzdWJkaXJlY3RvcmllczogZ2RiX3NyYy5vcmlnL3NpbSBhbmQg Li9nZGJfc3JjL3NpbQpDb21tb24gc3ViZGlyZWN0b3JpZXM6IGdkYl9zcmMu b3JpZy90ZXhpbmZvIGFuZCAuL2dkYl9zcmMvdGV4aW5mbwo= --_002_C6CA53A2A46BA7469348BDBD663AB65845B27868KCHJEXMB03kpitc_--