From: *jeffdb AT netzone DOT nospam DOT com (Mikey) Subject: Re: Caps lock problem and/or less can't search? 31 May 1997 14:35:42 -0700 Approved: cygnus DOT gnu-win32 AT cygnus DOT com Distribution: cygnus Message-ID: <339056c1.408050.cygnus.gnu-win32@smtp.netzone.com> References: <6XqZ1gi4pfB AT mike DOT franken DOT de> Reply-To: *jeffdb AT netzone DOT nospam DOT com Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="--=_339057e770280908aad679.MFSBCHJLHS" Original-To: mh AT mike DOT franken DOT de (Michael Hirmke) Original-Cc: gnu-win32 AT cygnus DOT com In-Reply-To: <6XqZ1gi4pfB@mike.franken.de> X-Mailer: Forte Agent 1.01/32.397 Original-Sender: owner-gnu-win32 AT cygnus DOT com ----=_339057e770280908aad679.MFSBCHJLHS Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit less, and other programs that use regex need the rx.h file from librx directory in cdksrc.tar.gz, i've appended it here, just copy it to ..../H-i386-cygwin32/i386-cygwin32/include/ , and less builds with the included (trivial) diff. No solution (TIKO) for the caps lock problem. On 30 May 1997 21:32:00 +0200, you wrote: >Hi Seymore, > >> I've noticed that when you put the caps lock on, every key applies the >> shift, not just letters. I think it was back in 17.1 as well. >> >> I finally got around to compiling less last night. All went well, just >> had to rename the iprintf(). Compiles easily. But you can't search >> with the / or ? commands. I haven't had a chance to investigate it >> further, but I figured less is a fairly popular program, maybe another >> kind person has already found/fixed it. So, has anyone? > >Only thing, I can say - I came across the same problem and no solution >yet. > >> >> Many thank > >Bye. >Michael. >-- >Ich bin vom 1. Juni bis 3. Juli in Urlaub, Ihr muesst Euch also leider >bis dahin mit einer Antwort auf Euere Postings und Mails gedulden :)) >-- >I'm on vacation from June, 1st to Juli, 3rd - so please be patient to >get an answer to your postings and mails until I'll be back - thx :)) >-- >Michael Hirmke | Telefon +49 (911) 557999 >Georg-Strobel-Strasse 81 | FAX +49 (911) 557664 >90489 Nuernberg | E-Mail mh AT mike DOT franken DOT de > | WWW http://minimike.franken.de/ >- >For help on using this list (especially unsubscribing), send a message to >"gnu-win32-request AT cygnus DOT com" with one line of text: "help". > ----=_339057e770280908aad679.MFSBCHJLHS Content-Type: application/octet-stream; name=rx.h Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=rx.h I2lmICFkZWZpbmVkKFJYSCkgfHwgZGVmaW5lZChSWF9XQU5UX1NFX0RFRlMpCiNkZWZpbmUgUlhI CgovKglDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuCgpUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgbGlicnggbGlicmFyeS4KCkxpYnJ4IGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5k ZXIKdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieQp0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAyLCBvciAoYXQgeW91ciBvcHRpb24pCmFueSBsYXRlciB2ZXJzaW9uLgoKTGlicnggaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQK QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hB TlRBQklMSVRZIG9yCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpmb3IgbW9yZSBkZXRhaWxzLgoKWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKTGlj ZW5zZSBhbG9uZyB3aXRoIHRoaXMgc29mdHdhcmU7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g IElmIG5vdCwKd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNjc1IE1hc3Mg QXZlLCBDYW1icmlkZ2UsIE1BCjAyMTM5LCBVU0EuICAqLwovKiAgdC4gbG9yZAlXZWQgU2VwIDIz IDE4OjIwOjU3IDE5OTIJKi8KCgoMCgoKCgoKI2lmbmRlZiBSWF9XQU5UX1NFX0RFRlMKCi8qIFRo aXMgcGFnZTogQml0c2V0cyAqLwoKI2lmbmRlZiBSWF9zdWJzZXQKdHlwZWRlZiB1bnNpZ25lZCBp bnQgUlhfc3Vic2V0OwojZGVmaW5lIFJYX3N1YnNldF9iaXRzCSgzMikKI2RlZmluZSBSWF9zdWJz ZXRfbWFzawkoUlhfc3Vic2V0X2JpdHMgLSAxKQojZW5kaWYKCnR5cGVkZWYgUlhfc3Vic2V0ICog cnhfQml0c2V0OwoKI2lmZGVmIF9fU1REQ19fCnR5cGVkZWYgdm9pZCAoKnJ4X2JpdHNldF9pdGVy YXRvcikgKHZvaWQgKiwgaW50IG1lbWJlcl9pbmRleCk7CiNlbHNlCnR5cGVkZWYgdm9pZCAoKnJ4 X2JpdHNldF9pdGVyYXRvcikgKCk7CiNlbmRpZgoKI2RlZmluZSByeF9iaXRzZXRfc3Vic2V0KE4p ICAoKE4pIC8gUlhfc3Vic2V0X2JpdHMpCiNkZWZpbmUgcnhfYml0c2V0X3N1YnNldF92YWwoQixO KSAgKChCKVtyeF9iaXRzZXRfc3Vic2V0KE4pXSkKI2RlZmluZSBSWF9iaXRzZXRfYWNjZXNzKEIs TixPUCkgXAogICgoQilbcnhfYml0c2V0X3N1YnNldChOKV0gT1Agcnhfc3Vic2V0X3NpbmdsZXRv bnNbKE4pICYgUlhfc3Vic2V0X21hc2tdKQojZGVmaW5lIFJYX2JpdHNldF9tZW1iZXIoQixOKSAg IFJYX2JpdHNldF9hY2Nlc3MoQiwgTiwgJikKI2RlZmluZSBSWF9iaXRzZXRfZW5qb2luKEIsTikg ICBSWF9iaXRzZXRfYWNjZXNzKEIsIE4sIHw9KQojZGVmaW5lIFJYX2JpdHNldF9yZW1vdmUoQixO KSAgIFJYX2JpdHNldF9hY2Nlc3MoQiwgTiwgJj0gfikKI2RlZmluZSBSWF9iaXRzZXRfdG9nZ2xl KEIsTikgICBSWF9iaXRzZXRfYWNjZXNzKEIsIE4sIF49ICkKI2RlZmluZSByeF9iaXRzZXRfbnVt Yl9zdWJzZXRzKE4pICgoKE4pICsgUlhfc3Vic2V0X2JpdHMgLSAxKSAvIFJYX3N1YnNldF9iaXRz KQojZGVmaW5lIHJ4X3NpemVvZl9iaXRzZXQoTikJKHJ4X2JpdHNldF9udW1iX3N1YnNldHMoTikg KiBzaXplb2YoUlhfc3Vic2V0KSkKCgwKCi8qIFRoaXMgcGFnZTogU3BsYXkgdHJlZXMuICovCgoj aWZkZWYgX19TVERDX18KdHlwZWRlZiBpbnQgKCpyeF9zcF9jb21wYXJlcikgKHZvaWQgKiBhLCB2 b2lkICogYik7CiNlbHNlCnR5cGVkZWYgaW50ICgqcnhfc3BfY29tcGFyZXIpICgpOwojZW5kaWYK CnN0cnVjdCByeF9zcF9ub2RlIAp7CiAgdm9pZCAqIGtleTsKICB2b2lkICogZGF0YTsKICBzdHJ1 Y3Qgcnhfc3Bfbm9kZSAqIGtpZHNbMl07Cn07CgojaWZkZWYgX19TVERDX18KdHlwZWRlZiB2b2lk ICgqcnhfc3Bfa2V5X2RhdGFfZnJlZXIpIChzdHJ1Y3Qgcnhfc3Bfbm9kZSAqKTsKI2Vsc2UKdHlw ZWRlZiB2b2lkICgqcnhfc3Bfa2V5X2RhdGFfZnJlZXIpICgpOwojZW5kaWYKCgwKLyogZ2lhbnQg aW5mbGF0YWJsZSBoYXNoIHRyZWVzICovCgpzdHJ1Y3QgcnhfaGFzaF9pdGVtCnsKICBzdHJ1Y3Qg cnhfaGFzaF9pdGVtICogbmV4dF9zYW1lX2hhc2g7CiAgc3RydWN0IHJ4X2hhc2ggKiB0YWJsZTsK ICB1bnNpZ25lZCBsb25nIGhhc2g7CiAgdm9pZCAqIGRhdGE7CiAgdm9pZCAqIGJpbmRpbmc7Cn07 CgpzdHJ1Y3QgcnhfaGFzaAp7CiAgc3RydWN0IHJ4X2hhc2ggKiBwYXJlbnQ7CiAgaW50IHJlZnM7 CiAgc3RydWN0IHJ4X2hhc2ggKiBjaGlsZHJlblsxM107CiAgc3RydWN0IHJ4X2hhc2hfaXRlbSAq IGJ1Y2tldHMgWzEzXTsKICBpbnQgYnVja2V0X3NpemUgWzEzXTsKfTsKCnN0cnVjdCByeF9oYXNo X3J1bGVzOwoKI2lmZGVmIF9fU1REQ19fCi8qIHNob3VsZCByZXR1cm4gbGlrZSA9PSAqLwp0eXBl ZGVmIGludCAoKnJ4X2hhc2hfZXEpKHZvaWQgKiwgdm9pZCAqKTsKdHlwZWRlZiBzdHJ1Y3Qgcnhf aGFzaCAqICgqcnhfYWxsb2NfaGFzaCkoc3RydWN0IHJ4X2hhc2hfcnVsZXMgKik7CnR5cGVkZWYg dm9pZCAoKnJ4X2ZyZWVfaGFzaCkoc3RydWN0IHJ4X2hhc2ggKiwKCQkJICAgIHN0cnVjdCByeF9o YXNoX3J1bGVzICopOwp0eXBlZGVmIHN0cnVjdCByeF9oYXNoX2l0ZW0gKiAoKnJ4X2FsbG9jX2hh c2hfaXRlbSkoc3RydWN0IHJ4X2hhc2hfcnVsZXMgKiwKCQkJCQkJICAgIHZvaWQgKik7CnR5cGVk ZWYgdm9pZCAoKnJ4X2ZyZWVfaGFzaF9pdGVtKShzdHJ1Y3QgcnhfaGFzaF9pdGVtICosCgkJCQkg c3RydWN0IHJ4X2hhc2hfcnVsZXMgKik7CiNlbHNlCnR5cGVkZWYgaW50ICgqcnhfaGFzaF9lcSko KTsKdHlwZWRlZiBzdHJ1Y3QgcnhfaGFzaCAqICgqcnhfYWxsb2NfaGFzaCkoKTsKdHlwZWRlZiB2 b2lkICgqcnhfZnJlZV9oYXNoKSgpOwp0eXBlZGVmIHN0cnVjdCByeF9oYXNoX2l0ZW0gKiAoKnJ4 X2FsbG9jX2hhc2hfaXRlbSkoKTsKdHlwZWRlZiB2b2lkICgqcnhfZnJlZV9oYXNoX2l0ZW0pKCk7 CiNlbmRpZgoKc3RydWN0IHJ4X2hhc2hfcnVsZXMKewogIHJ4X2hhc2hfZXEgZXE7CiAgcnhfYWxs b2NfaGFzaCBoYXNoX2FsbG9jOwogIHJ4X2ZyZWVfaGFzaCBmcmVlX2hhc2g7CiAgcnhfYWxsb2Nf aGFzaF9pdGVtIGhhc2hfaXRlbV9hbGxvYzsKICByeF9mcmVlX2hhc2hfaXRlbSBmcmVlX2hhc2hf aXRlbTsKfTsKCgwKLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KCnN0cnVjdCByeF9jYWNoZTsK c3RydWN0IHJ4X3N1cGVyc2V0OwpzdHJ1Y3Qgcng7CnN0cnVjdCByeF9zZV9saXN0OwoKDAoKLyog CiAqIEdMT1NTQVJZCiAqCiAqIHJlZ2V4cAogKiByZWd1bGFyIGV4cHJlc3Npb24KICogZXhwcmVz c2lvbgogKiBwYXR0ZXJuIC0gYSBgcmVndWxhcicgZXhwcmVzc2lvbi4gIFRoZSBleHByZXNzaW9u CiAqICAgICAgIG5lZWQgbm90IGJlIGZvcm1hbGx5IHJlZ3VsYXIgLS0gaXQgY2FuIGNvbnRhaW4K ICogICAgICAgY29uc3RydWN0cyB0aGF0IGRvbid0IGNvcnJlc3BvbmQgdG8gcHVyZWx5IHJlZ3Vs YXIKICogICAgICAgZXhwcmVzc2lvbnMuCiAqCiAqIGJ1ZmZlcgogKiBzdHJpbmcgLSB0aGUgc3Ry aW5nIChvciBzdHJpbmdzKSBiZWluZyBzZWFyY2hlZCBvciBtYXRjaGVkLgogKgogKiBwYXR0ZXJu IGJ1ZmZlciAtIGEgc3RydWN0dXJlIG9mIHR5cGUgYHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlcicK ICogICAgICAgVGhpcyBpbiB0dXJuIGNvbnRhaW5zIGEgYHN0cnVjdCByeCcsIHdoaWNoIGhvbGRz IHRoZQogKiAgICAgICBORkEgY29tcGlsZWQgZnJvbSBhIHBhdHRlcm4sIGFzIHdlbGwgYXMgc29t ZSBvZiB0aGUgc3RhdGUKICogICAgICAgb2YgYSBtYXRjaGVyIHVzaW5nIHRoZSBwYXR0ZXJuLgog KgogKiBORkEgLSBub25kZXRlcm1pbmlzdGljIGZpbml0ZSBhdXRvbWF0YS4gIFNvbWUgcGVvcGxl CiAqICAgICAgIHVzZSB0aGlzIHRlcm0gdG8gYSBtZW1iZXIgb2YgdGhlIGNsYXNzIG9mIAogKiAg ICAgICByZWd1bGFyIGF1dG9tYXRhICh0aG9zZSBjb3JyZXNwb25kaW5nIHRvIGEgcmVndWxhcgog KiAgICAgICBsYW5ndWFnZSkuICBIb3dldmVyLCBpbiB0aGlzIGNvZGUsIHRoZSBtZWFuaW5nIGlz CiAqICAgICAgIG1vcmUgZ2VuZXJhbC4gIFRoZSBhdXRvbWF0YSB1c2VkIGJ5IFJ4IGFyZSBjb21w ZXJhYmxlCiAqICAgICAgIGluIHBvd2VyIHRvIHdoYXQgYXJlIHVzdWFsbHkgY2FsbGVkIGBwdXNo IGRvd24gYXV0b21hdGEnLgogKgogKiAgICAgICBUd28gTkZBIGFyZSBidWlsdCBieSByeCBmb3Ig ZXZlcnkgcGF0dGVybi4gIE9uZSBpcyBidWlsdAogKiAgICAgICBieSB0aGUgY29tcGlsZXIuICBU aGUgb3RoZXIgaXMgYnVpbHQgZnJvbSB0aGUgZmlyc3QsIG9uCiAqICAgICAgIHRoZSBmbHksIGJ5 IHRoZSBtYXRjaGVyLiAgVGhlIGxhdHRlciBpcyBjYWxsZWQgdGhlIGBzdXBlcnN0YXRlCiAqICAg ICAgIE5GQScgYmVjYXVzZSBpdHMgc3RhdGVzIGNvcnJlc3BvbmQgdG8gc2V0cyBvZiBzdGF0ZXMg ZnJvbQogKiAgICAgICB0aGUgZmlyc3QgTkZBLiAgKEpvZSBLZWFuZSBnZXRzIGNyZWRpdCBmb3Ig dGhlIG5hbWUKICogICAgICAgYHN1cGVyc3RhdGUgTkZBJykuCiAqCiAqIE5GQSBlZGdlcwogKiBl cHNpbG9uIGVkZ2VzCiAqIHNpZGUtZWZmZWN0IGVkZ2VzIC0gVGhlIE5GQSBjb21waWxlZCBmcm9t IGEgcGF0dGVybiBjYW4gaGF2ZSB0aHJlZQogKiAgICAgICBraW5kcyBvZiBlZGdlcy4gIEVwc2ls b24gZWRnZXMgY2FuIGJlIHRha2VuIGZyZWVseSBhbnl0aW1lCiAqICAgICAgIHRoZWlyIHNvdXJj ZSBzdGF0ZSBpcyByZWFjaGVkLiAgQ2hhcmFjdGVyIHNldCBlZGdlcyBjYW4gYmUKICogICAgICAg dGFrZW4gd2hlbiB0aGVpciBzb3VyY2Ugc3RhdGUgaXMgcmVhY2hlZCBhbmQgd2hlbiB0aGUgbmV4 dCAKICogICAgICAgY2hhcmFjdGVyIGluIHRoZSBidWZmZXIgaXMgYSBtZW1iZXIgb2YgdGhlIHNl dC4gIFNpZGUgZWZmZWN0CiAqICAgICAgIGVkZ2VzIGltcGx5IGEgdHJhbnNpdGlvbiB0aGF0IGNh biBvbmx5IGJlIHRha2VuIGFmdGVyIHRoZQogKiAgICAgICBpbmRpY2F0ZWQgc2lkZSBlZmZlY3Qg aGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGFjY29tcGxpc2hlZC4KICogICAgICAgU29tZSBleGFtcGxl cyBvZiBzaWRlIGVmZmVjdHMgYXJlOgogKgogKgkJU3RvcmluZyB0aGUgY3VycmVudCBtYXRjaCBw b3NpdGlvbiB0byByZWNvcmQgdGhlCiAqICAgICAgICAgICAgICBsb2NhdGlvbiBvZiBhIHBhcmVu dGVzaXplZCBzdWJleHByZXNzaW9uLgogKgogKiAgICAgICAgICAgICAgQWR2YW5jaW5nIHRoZSBt YXRjaGVyIG92ZXIgTiBjaGFyYWN0ZXJzIGlmIHRoZXkKICogICAgICAgICAgICAgIG1hdGNoIHRo ZSBOIGNoYXJhY3RlcnMgcHJldmlvdXNseSBtYXRjaGVkIGJ5IGEgCiAqICAgICAgICAgICAgICBw YXJlbnRlc2l6ZWQgc3ViZXhwcmVzc2lvbi4KICoKICogICAgICAgQm90aCBvZiB0aG9zZSBraW5k cyBvZiBlZGdlcyBvY2N1ciBpbiB0aGUgTkZBIGdlbmVyYXRlZAogKiAgICAgICBieSB0aGUgcGF0 dGVybjogIFwoLlwpXDEKICoKICogICAgICAgRXBzaWxvbiBhbmQgc2lkZSBlZmZlY3QgZWRnZXMg YXJlIHNpbWlsYXIuICBVbmZvcnR1bmF0ZWx5LAogKiAgICAgICBzb21lIG9mIHRoZSBjb2RlIHVz ZXMgdGhlIG5hbWUgYGVwc2lsb24gZWRnZScgdG8gbWVhbgogKiAgICAgICBib3RoIGVwc2lsb24g YW5kIHNpZGUgZWZmZWN0IGVkZ2VzLiAgRm9yIGV4YW1wbGUsICB0aGUKICogICAgICAgZnVuY3Rp b24gaGFzX25vbl9pZGVtcG90ZW50X2Vwc2lsb25fcGF0aCBjb21wdXRlcyB0aGUgZXhpc3RhbmNl CiAqICAgICAgIG9mIGEgbm9uLXRyaXZpYWwgcGF0aCBjb250YWluaW5nIG9ubHkgYSBtaXggb2Yg ZXBzaWxvbiBhbmQKICogICAgICAgc2lkZSBlZmZlY3QgZWRnZXMuICBJbiB0aGF0IGNhc2UgYG5v bmlkZW1wb3RlbnQgZXBzaWxvbicgaXMgYmVpbmcKICogICAgICAgdXNlZCB0byBtZWFuIGBzaWRl IGVmZmVjdCcuCiAqLwoKCgoMCgovKiBMT1cgTEVWRUwgUEFUVEVSTiBCVUZGRVJTICovCgovKiBT dXBwb3NlIHRoYXQgZnJvbSBzb21lIE5GQSBzdGF0ZSwgbW9yZSB0aGFuIG9uZSBwYXRoIHRocm91 Z2gKICogc2lkZS1lZmZlY3QgZWRnZXMgaXMgcG9zc2libGUuICBJbiB3aGF0IG9yZGVyIHNob3Vs ZCB0aGUgcGF0aHMKICogYmUgdHJpZWQ/ICBBIGZ1bmN0aW9uIG9mIHR5cGUgcnhfc2VfbGlzdF9v cmRlciBhbnN3ZXJzIHRoYXQKICogcXVlc3Rpb24uICBJdCBjb21wYXJlcyB0d28gbGlzdHMgb2Yg c2lkZSBlZmZlY3RzLCBhbmQgc2F5cwogKiB3aGljaCBsaXN0IGNvbWVzIGZpcnN0LgogKi8KIAoj aWZkZWYgX19TVERDX18KdHlwZWRlZiBpbnQgKCpyeF9zZV9saXN0X29yZGVyKSAoc3RydWN0IHJ4 ICosCgkJCQkgc3RydWN0IHJ4X3NlX2xpc3QgKiwgCgkJCQkgc3RydWN0IHJ4X3NlX2xpc3QgKik7 CiNlbHNlCnR5cGVkZWYgaW50ICgqcnhfc2VfbGlzdF9vcmRlcikgKCk7CiNlbmRpZgoKCgovKiBT dHJ1Y3QgUlggaG9sZHMgYSBjb21waWxlZCByZWd1bGFyIGV4cHJlc3Npb24gLSB0aGF0IGlzLCBh biBuZmEKICogcmVhZHkgdG8gYmUgY29udmVydGVkIG9uIGRlbWFuZCB0byBhIG1vcmUgZWZmaWNp ZW50IHN1cGVyc3RhdGUgbmZhLgogKiBUaGlzIGlzIGZvciB0aGUgbG93IGxldmVsIGludGVyZmFj ZS4gIFRoZSBoaWdoLWxldmVsIGludGVyZmFjZXMgZW5jbG9zZQogKiB0aGlzIGluIGEgYHN0cnVj dCByZV9wYXR0ZXJuX2J1ZmZlcicuICAKICovCnN0cnVjdCByeAp7CiAgLyogVGhlIGNvbXBpbGVy IGFzc2lnbnMgYSB1bmlxdWUgaWQgdG8gZXZlcnkgcGF0dGVybi4KICAgKiBMaWtlIHNlcXVlbmNl IG51bWJlcnMgaW4gWCwgdGhlcmUgaXMgYSBzdWJ0bGUgYnVnIGhlcmUKICAgKiBpZiB5b3UgdXNl IFJ4IGluIGEgc3lzdGVtIHRoYXQgcnVucyBmb3IgYSBsb25nIHRpbWUuCiAgICogQnV0LCBiZWNh dXNlIG9mIHRoZSB3YXkgdGhlIGNhY2hlcyB3b3JrIG91dCwgaXQgaXMgYWxtb3N0CiAgICogaW1w b3NzaWJsZSB0byB0cmlnZ2VyIHRoZSBSeCB2ZXJzaW9uIG9mIHRoaXMgYnVnLgogICAqCiAgICog VGhlIGlkIGlzIHVzZWQgdG8gdmFsaWRhdGUgc3VwZXJzdGF0ZXMgZm91bmQgaW4gYSBjYWNoZQog ICAqIG9mIHN1cGVyc3RhdGVzLiAgSXQgaXNuJ3Qgc3VmZmljaWVudCB0byBsZXQgYSBzdXBlcnN0 YXRlCiAgICogcG9pbnQgYmFjayB0byB0aGUgcnggZm9yIHdoaWNoIGl0IHdhcyBjb21waWxlZCAt LSB0aGUgY2FsbGVyCiAgICogbWF5IGJlIHJlLXVzaW5nIGEgYHN0cnVjdCByeCcgaW4gd2hpY2gg Y2FzZSB0aGUgc3VwZXJzdGF0ZQogICAqIGlzIG5vdCByZWFsbHkgdmFsaWQuICBTbyBpbnN0ZWFk LCBzdXBlcnN0YXRlcyBhcmUgdmFsaWRhdGVkCiAgICogYnkgY2hlY2tpbmcgdGhlIHNlcXVlbmNl IG51bWJlciBvZiB0aGUgcGF0dGVybiBmb3Igd2hpY2gKICAgKiB0aGV5IHdlcmUgYnVpbHQuCiAg ICovCiAgaW50IHJ4X2lkOwoKICAvKiBUaGlzIGlzIG1lbW9yeSBtZ3QuIHN0YXRlIGZvciBzdXBl cnN0YXRlcy4gIFRoaXMgbWF5IGJlIAogICAqIHNoYXJlZCBieSBtb3JlIHRoYW4gb25lIHN0cnVj dCByeC4KICAgKi8KICBzdHJ1Y3QgcnhfY2FjaGUgKiBjYWNoZTsKCiAgLyogRXZlcnkgcmVnZXgg ZGVmaW5lcyB0aGUgc2l6ZSBvZiBpdHMgb3duIGNoYXJhY3RlciBzZXQuIAogICAqIEEgc3VwZXJz dGF0ZSBoYXMgYW4gYXJyYXkgb2YgdGhpcyBzaXplLCB3aXRoIGVhY2ggZWxlbWVudAogICAqIGEg YHN0cnVjdCByeF9pbngnLiAgU28sIGRvbid0IG1ha2UgdGhpcyBudW1iZXIgdG9vIGxhcmdlLgog ICAqIEluIHBhcnRpY3VsYXIsIGRvbid0IG1ha2UgaXQgMl4xNi4KICAgKi8KICBpbnQgbG9jYWxf Y3NldF9zaXplOwoKICAvKiBBZnRlciB0aGUgTkZBIGlzIGJ1aWx0LCBpdCBpcyBjb3BpZWQgaW50 byBhIGNvbnRpZ3VvdXMgcmVnaW9uCiAgICogb2YgbWVtb3J5IChtb3N0bHkgZm9yIGNvbXBhdGFi aWxpdHkgd2l0aCBHTlUgcmVnZXgpLgogICAqIEhlcmUgaXMgdGhhdCByZWdpb24sIGFuZCBpdCdz IHNpemU6CiAgICovCiAgdm9pZCAqIGJ1ZmZlcjsKICB1bnNpZ25lZCBsb25nIGFsbG9jYXRlZDsK CiAgLyogQ2xpZW50cyBvZiBSWCBjYW4gYXNrIGZvciBzb21lIGV4dHJhIHN0b3JhZ2UgaW4gdGhl IHNwYWNlIHBvaW50ZWQKICAgKiB0byBieSBCVUZGRVIuICBUaGUgZmllbGQgUkVTRVJWRUQgaXMg YW4gaW5wdXQgcGFyYW1ldGVyIHRvIHRoZQogICAqIGNvbXBpbGVyLiAgQWZ0ZXIgY29tcGlsYXRp b24sIHRoaXMgbXVjaCBzcGFjZSB3aWxsIGJlIGF2YWlsYWJsZSAKICAgKiBhdCAoYnVmZmVyICsg YWxsb2NhdGVkIC0gcmVzZXJ2ZWQpCiAgICovCiAgdW5zaWduZWQgbG9uZyByZXNlcnZlZDsKCiAg LyogLS0tLS0tLS0tIFRoZSByZW1haW5pbmcgZmllbGRzIGFyZSBmb3IgaW50ZXJuYWwgdXNlIG9u bHkuIC0tLS0tLS0tLSAqLwogIC8qIC0tLS0tLS0tLSBCdXQhIHRoZXkgbXVzdCBiZSBpbml0aWFs aXplZCB0byAwLgkgICAgICAgLS0tLS0tLS0tICovCgogIC8qIE5PREVDIGlzIHRoZSBudW1iZXIg b2Ygbm9kZXMgaW4gdGhlIE5GQSB3aXRoIG5vbi1lcHNpbG9uCiAgICogdHJhbnNpdGlvbnMuIAog ICAqLwogIGludCBub2RlYzsKCiAgLyogRVBTTk9ERUMgaXMgdGhlIG51bWJlciBvZiBub2RlcyB3 aXRoIG9ubHkgZXBzaWxvbiB0cmFuc2l0aW9ucy4gKi8KICBpbnQgZXBzbm9kZWM7CgogIC8qIFRo ZSBzdW0gKE5PREVDICsgRVBTTk9ERUMpIGlzIHRoZSB0b3RhbCBudW1iZXIgb2Ygc3RhdGVzIGlu IHRoZQogICAqIGNvbXBpbGVkIE5GQS4KICAgKi8KCiAgLyogTGlzdHMgb2Ygc2lkZSBlZmZlY3Rz IGFzIHN0b3JlZCBpbiB0aGUgTkZBIGFyZSBgaGFzaCBjb25zZWQnLi5tZWFuaW5nCiAgICogdGhh dCBsaXN0cyB3aXRoIHRoZSBzYW1lIGVsZW1lbnRzIGFyZSA9PS4gIER1cmluZyBjb21waWxhdGlv biwgCiAgICogdGhpcyB0YWJsZSBmYWNpbGl0YXRlcyBoYXNoLWNvbnNpbmcuCiAgICovCiAgc3Ry dWN0IHJ4X2hhc2ggc2VfbGlzdF9tZW1vOwoKICAvKiBMaXN0cyBvZiBORkEgc3RhdGVzIGFyZSBh bHNvIGhhc2hlZC4gCiAgICovCiAgc3RydWN0IHJ4X2hhc2ggc2V0X2xpc3RfbWVtbzsKCgoKCiAg LyogVGhlIGNvbXBpbGVyIGFuZCBtYXRjaGVyIG11c3QgYnVpbGQgYSBudW1iZXIgb2YgaW5zdHJ1 Y3Rpb24gZnJhbWVzLgogICAqIFRoZSBmb3JtYXQgb2YgdGhlc2UgZnJhbWVzIGlzIGZpeGVkIChj LmYuIHN0cnVjdCByeF9pbngpLiAgVGhlIHZhbHVlcwogICAqIG9mIHRoZSBpbnN0cnVjdGlvbnMg aXMgbm90IGZpeGVkLgogICAqCiAgICogQW4gZW51bWVyYXRlZCB0eXBlIChlbnVtIHJ4X29wY29k ZSkgZGVmaW5lcyB0aGUgc2V0IG9mIGluc3RydWN0aW9ucwogICAqIHRoYXQgdGhlIGNvbXBpbGVy IG9yIG1hdGNoZXIgbWlnaHQgZ2VuZXJhdGUuICBXaGVuIGZpbGxpbmcgYW4gaW5zdHJ1Y3Rpb24K ICAgKiBmcmFtZSwgdGhlIElOWCBmaWVsZCBpcyBmb3VuZCBieSBpbmRleGluZyB0aGlzIGluc3Ry dWN0aW9uIHRhYmxlCiAgICogd2l0aCBhbiBvcGNvZGU6CiAgICovCiAgdm9pZCAqKiBpbnN0cnVj dGlvbl90YWJsZTsKCiAgLyogVGhlIGxpc3Qgb2YgYWxsIHN0YXRlcyBpbiBhbiBORkEuCiAgICog RHVyaW5nIGNvbXBpbGF0aW9uLCB0aGUgTkVYVCBmaWVsZCBvZiBORkEgc3RhdGVzIGxpbmtzIHRo aXMgbGlzdC4KICAgKiBBZnRlciBjb21waWxhdGlvbiwgYWxsIHRoZSBzdGF0ZXMgYXJlIGNvbXBh Y3RlZCBpbnRvIGFuIGFycmF5LAogICAqIG9yZGVyZWQgYnkgc3RhdGUgaWQgbnVtYmVycy4gIEF0 IHRoYXQgdGltZSwgdGhpcyBwb2ludHMgdG8gdGhlIGJhc2UgCiAgICogb2YgdGhhdCBhcnJheS4K ICAgKi8KICBzdHJ1Y3QgcnhfbmZhX3N0YXRlICpuZmFfc3RhdGVzOwoKICAvKiBFdmVyeSBuZmEg YmVnaW5zIHdpdGggb25lIGRpc3Rpbmd1aXNoZWQgc3RhcnRpbmcgc3RhdGU6CiAgICovCiAgc3Ry dWN0IHJ4X25mYV9zdGF0ZSAqc3RhcnQ7CgogIC8qIFRoaXMgb3JkZXJzIHRoZSBzZWFyY2ggdGhy b3VnaCBzdXBlci1uZmEgcGF0aHMuCiAgICogU2VlIHRoZSBjb21tZW50IG5lYXIgdGhlIHR5cGVk ZWYgb2Ygcnhfc2VfbGlzdF9vcmRlci4KICAgKi8KICByeF9zZV9saXN0X29yZGVyIHNlX2xpc3Rf Y21wOwoKICBzdHJ1Y3Qgcnhfc3VwZXJzZXQgKiBzdGFydF9zZXQ7Cn07CgoKCgwKLyogU1lOVEFY IFRSRUVTICovCgovKiBDb21waWxhdGlvbiBpcyBpbiBzdGFnZXMuICAKICoKICogSW4gdGhlIGZp cnN0IHN0YWdlLCBhIHBhdHRlcm4gc3BlY2lmaWVkIGJ5IGEgc3RyaW5nIGlzIAogKiB0cmFuc2xh dGVkIGludG8gYSBzeW50YXggdHJlZS4gIExhdGVyIHN0YWdlcyB3aWxsIGNvbnZlcnQKICogdGhl IHN5bnRheCB0cmVlIGludG8gYW4gTkZBIG9wdGltaXplZCBmb3IgY29udmVyc2lvbiB0byBhCiAq IHN1cGVyc3RhdGUtTkZBLgogKgogKiBUaGlzIHBhZ2UgaXMgYWJvdXQgc3ludGF4IHRyZWVzLgog Ki8KCmVudW0gcmV4cF9ub2RlX3R5cGUKewogIHJfY3NldCwJCQkvKiBNYXRjaCBmcm9tIGEgY2hh cmFjdGVyIHNldC4gYGEnIG9yIGBbYS16XScqLwogIHJfY29uY2F0LAkJCS8qIENvbmNhdCB0d28g c3ViZXhwcmVzc2lvbnMuICAgYGFiJyAqLwogIHJfYWx0ZXJuYXRlLAkJCS8qIENob29zZSBvbmUg b2YgdHdvIHN1YmV4cHJlc3Npb25zLiBgYVx8YicgKi8KICByX29wdCwJCQkvKiBPcHRpb25hbCBz dWJleHByZXNzaW9uLiBgYT8nICovCiAgcl9zdGFyLAkJCS8qIFJlcGVhdGVkIHN1YmV4cHJlc3Np b24uIGBhKicgKi8KCgogIC8qIEEgMnBoYXNlLXN0YXIgaXMgYSB2YXJpYXRpb24gb24gYSByZXBl YXRlZCBzdWJleHByZXNzaW9uLgogICAqIEluIHRoaXMgY2FzZSwgdGhlcmUgYXJlIHR3byBzdWJl eHByZXNzaW9ucy4gIFRoZSBmaXJzdCwgaWYgbWF0Y2hlZCwKICAgKiBiZWdpbnMgYSByZXBpdGl0 aW9uIChvdGhlcndpc2UsIHRoZSB3aG9sZSBleHByZXNzaW9uIGlzIG1hdGNoZXMgdGhlCiAgICog ZW1wdGggc3RyaW5nKS4gIAogICAqIAogICAqIEFmdGVyIG1hdGNoaW5nIHRoZSBmaXJzdCBzdWJl eHByZXNzaW9uLCBhIDJwaGFzZSBzdGFyIGVpdGhlciBmaW5pc2hlcywKICAgKiBvciBtYXRjaGVz IHRoZSBzZWNvbmQgc3ViZXhwcmVzc2lvbi4gIElmIHRoZSBzZWNvbmQgc3ViZXhwcmVzc2lvbiBp cwogICAqIG1hdGNoZWQsIHRoZW4gdGhlIHdob2xlIGNvbnN0cnVjdCByZXBlYXRzLgogICAqCiAg ICogMnBoYXNlIHN0YXJzIGFyZSB1c2VkIGluIHR3byBjaXJjdW1zdGFuY2VzLiAgRmlyc3QsIHRo ZXkKICAgKiBhcmUgdXNlZCBhcyBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBQT1NJWCBp bnRlcnZhbHMgKGNvdW50ZWQKICAgKiByZXBpdGl0aW9ucykuICBTZWNvbmQsIHRoZXkgYXJlIHVz ZWQgdG8gaW1wbGVtZW50IHByb3BlciBzdGFyCiAgICogc2VtYW50aWNzIHdoZW4gdGhlIHJlcGVh dGVkIHN1YmV4cHJlc3Npb24gY29udGFpbnMgcGF0aHMgb2YKICAgKiBvbmx5IHNpZGUgZWZmZWN0 cy4gIFNlZSByeF9jb21waWxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAqLwogIHJfMnBoYXNl X3N0YXIsCgoKICAvKiBjLmYuICJ0eXBlZGVmIHZvaWQgKiByeF9zaWRlX2VmZmVjdCIgKi8KICBy X3NpZGVfZWZmZWN0LAoKICAvKiBUaGlzIGlzIGFuIGV4dGVuc2lvbiB0eXBlOiAgSXQgaXMgZm9y IHRyYW5zaWVudCB1c2UgaW4gc291cmNlLT5zb3VyY2UKICAgKiB0cmFuc2Zvcm1hdGlvbnMgKGlt cGxlbWVudGVkIG92ZXIgc3ludGF4IHRyZWVzKS4KICAgKi8KICByX2RhdGEKfTsKCi8qIEEgc2lk ZSBlZmZlY3QgaXMgYSBtYXRjaGVyLXNwZWNpZmljIGFjdGlvbiBhc3NvY2lhdGVkIHdpdGgKICog dHJhbnNpdGlvbnMgaW4gdGhlIE5GQS4gIFRoZSBkZXRhaWxzIG9mIHNpZGUgZWZmZWN0cyBhcmUg dXAKICogdG8gdGhlIG1hdGNoZXIuICBUbyB0aGUgY29tcGlsZXIgYW5kIHN1cGVyc3RhdGUgY29u c3RydWN0b3JzCiAqIHNpZGUgZWZmZWN0cyBhcmUgb3BhcXVlOgogKi8KCnR5cGVkZWYgdm9pZCAq IHJ4X3NpZGVfZWZmZWN0OwoKLyogTm9kZXMgaW4gYSBzeW50YXggdHJlZSBhcmUgb2YgdGhpcyB0 eXBlOgogKi8Kc3RydWN0IHJleHBfbm9kZQp7CiAgZW51bSByZXhwX25vZGVfdHlwZSB0eXBlOwog IHVuaW9uCiAgewogICAgcnhfQml0c2V0IGNzZXQ7CiAgICByeF9zaWRlX2VmZmVjdCBzaWRlX2Vm ZmVjdDsKICAgIHN0cnVjdAogICAgICB7CglzdHJ1Y3QgcmV4cF9ub2RlICpsZWZ0OwoJc3RydWN0 IHJleHBfbm9kZSAqcmlnaHQ7CiAgICAgIH0gcGFpcjsKICAgIHZvaWQgKiBkYXRhOwogIH0gcGFy YW1zOwp9OwoKCgwKLyogTkZBCiAqCiAqIEEgc3ludGF4IHRyZWUgaXMgY29tcGlsZWQgaW50byBh biBORkEuICBUaGlzIHBhZ2UgZGVmaW5lcyB0aGUgc3RydWN0dXJlCiAqIG9mIHRoYXQgTkZBLgog Ki8KCnN0cnVjdCByeF9uZmFfc3RhdGUKewogIC8qIFRoZXNlIGFyZSBrZXB0IGluIGEgbGlzdCBh cyB0aGUgTkZBIGlzIGJlaW5nIGJ1aWx0LiAqLwogIHN0cnVjdCByeF9uZmFfc3RhdGUgKm5leHQ7 CgogIC8qIEFmdGVyIHRoZSBORkEgaXMgYnVpbHQsIHN0YXRlcyBhcmUgZ2l2ZW4gaW50ZWdlciBp ZCdzLgogICAqIFN0YXRlcyB3aG9zZSBvdXRnb2luZyB0cmFuc2l0aW9ucyBhcmUgYWxsIGVpdGhl ciBlcHNpbG9uIG9yIAogICAqIHNpZGUgZWZmZWN0IGVkZ2VzIGFyZSBnaXZlbiBpZHMgbGVzcyB0 aGFuIDAuICBPdGhlciBzdGF0ZXMKICAgKiBhcmUgZ2l2ZW4gc3VjY2Vzc2l2ZSBub24tbmVnYXRp dmUgaWRzIHN0YXJ0aW5nIGZyb20gMC4KICAgKi8KICBpbnQgaWQ7CgogIC8qIFRoZSBsaXN0IG9m IE5GQSBlZGdlcyB0aGF0IGdvIGZyb20gdGhpcyBzdGF0ZSB0byBzb21lIG90aGVyLiAqLwogIHN0 cnVjdCByeF9uZmFfZWRnZSAqZWRnZXM7CgogIC8qIElmIHlvdSBsYW5kIGluIHRoaXMgc3RhdGUs IHRoZW4geW91IGltcGxpY2l0bHkgbGFuZAogICAqIGluIGFsbCBvdGhlciBzdGF0ZXMgcmVhY2hh YmxlIGJ5IG9ubHkgZXBzaWxvbiB0cmFuc2xhdGlvbnMuCiAgICogQ2FsbCB0aGUgc2V0IG9mIG1h eGltYWwgcGF0aHMgdG8gc3VjaCBzdGF0ZXMgdGhlIGVwc2lsb24gY2xvc3VyZQogICAqIG9mIHRo aXMgc3RhdGUuCiAgICoKICAgKiBUaGVyZSBtYXkgYmUgb3RoZXIgc3RhdGVzIHRoYXQgYXJlIHJl YWNoYWJsZSBieSBhIG1peHR1cmUgb2YKICAgKiBlcHNpbG9uIGFuZCBzaWRlIGVmZmVjdCBlZGdl cy4gIENvbnNpZGVyIHRoZSBzZXQgb2YgbWF4aW1hbCBwYXRocwogICAqIG9mIHRoYXQgc29ydCBm cm9tIHRoaXMgc3RhdGUuICBDYWxsIGl0IHRoZSBlcHNpbG9uLXNpZGUtZWZmZWN0CiAgICogY2xv c3VyZSBvZiB0aGUgc3RhdGUuCiAgICogCiAgICogVGhlIGVwc2lsb24gY2xvc3VyZSBvZiB0aGUg c3RhdGUgaXMgYSBzdWJzZXQgb2YgdGhlIGVwc2lsb24tc2lkZS0KICAgKiBlZmZlY3QgY2xvc3Vy ZS4gIEl0IGNvbnNpc3RzIG9mIGFsbCB0aGUgcGF0aHMgdGhhdCBjb250YWluIAogICAqIG5vIHNp ZGUgZWZmZWN0cyAtLSBvbmx5IGVwc2lsb24gZWRnZXMuCiAgICogCiAgICogVGhlIHBhdGhzIGlu IHRoZSBlcHNpbG9uLXNpZGUtZWZmZWN0IGNsb3N1cmUgIGNhbiBiZSBwYXJ0aXRpb25lZAogICAq IGludG8gZXF1aXZhbGFuY2Ugc2V0cy4gVHdvIHBhdGhzIGFyZSBlcXVpdmFsYW50IGlmIHRoZXkg aGF2ZSB0aGUKICAgKiBzYW1lIHNldCBvZiBzaWRlIGVmZmVjdHMsIGluIHRoZSBzYW1lIG9yZGVy LiAgVGhlIGVwc2lsb24tY2xvc3VyZQogICAqIGlzIG9uZSBvZiB0aGVzZSBlcXVpdmFsYW5jZSBz ZXRzLiAgTGV0J3MgY2FsbCB0aGVzZSBlcXVpdmFsYW5jZQogICAqIHNldHM6IG9ic2VydmFibHkg ZXF1aXZhbGFudCBwYXRoIHNldHMuICBUaGF0IG5hbWUgaXMgY2hvc2VuCiAgICogYmVjYXVzZSBl cXVpdmFsYW5jZSBvZiB0d28gcGF0aHMgbWVhbnMgdGhleSBjYXVzZSB0aGUgc2FtZSBzaWRlCiAg ICogZWZmZWN0cyAtLSBzbyB0aGV5IGxlYWQgdG8gdGhlIHNhbWUgc3Vic2VxdWVudCBvYnNlcnZh dGlvbnMgb3RoZXIKICAgKiB0aGFuIHRoYXQgdGhleSBtYXkgd2luZCB1cCBpbiBkaWZmZXJlbnQg dGFyZ2V0IHN0YXRlcy4KICAgKgogICAqIFRoZSBzdXBlcnN0YXRlIG5mYSwgd2hpY2ggaXMgZGVy aXZlZCBmcm9tIHRoaXMgbmZhLCBpcyBiYXNlZCBvbgogICAqIHRoZSBvYnNlcnZhdGlvbiB0aGF0 IGFsbCBvZiB0aGUgcGF0aHMgaW4gYW4gb2JzZXJ2YWJseSBlcXVpdmFsYW50CiAgICogcGF0aCBz ZXQgY2FuIGJlIGV4cGxvcmVkIGF0IHRoZSBzYW1lIHRpbWUsIHByb3ZpZGVkIHRoYXQgdGhlCiAg ICogbWF0Y2hlciBrZWVwcyB0cmFjayBub3Qgb2YgYSBzaW5nbGUgbmZhIHN0YXRlLCBidXQgb2Yg YSBzZXQgb2YKICAgKiBzdGF0ZXMuICAgSW4gcGFydGljdWxhciwgYWZ0ZXIgZm9sbG93aW5nIGFs bCB0aGUgcGF0aHMgaW4gYW4KICAgKiBvYnNlcnZhYmx5IGVxdWl2YWxhbnQgc2V0LCB5b3Ugd2lu ZCB1cCBhdCBhIHNldCBvZiB0YXJnZXQgc3RhdGVzLgogICAqIFRoYXQgc2V0IG9mIHRhcmdldCBz dGF0ZXMgY29ycmVzcG9uZHMgdG8gb25lIHN0YXRlIGluIHRoZQogICAqIHN1cGVyc3RhdGUgTkZB LgogICAqCiAgICogU3RhdGljbHksIGJlZm9yZSBtYXRjaGluZyBiZWdpbnMsIGl0IGlzIGNvbnZl bmllbnQgdG8gYW5hbHl6ZSB0aGUKICAgKiBuZmEuICBFYWNoIHN0YXRlIGlzIGxhYmVsZWQgd2l0 aCBhIGxpc3Qgb2YgdGhlIG9ic2VydmFibHkKICAgKiBlcXVpdmFsYW50IHBhdGggc2V0cyB3aG8n cyB1bmlvbiBjb3ZlcnMgYWxsIHRoZQogICAqIGVwc2lsb24tc2lkZS1lZmZlY3QgcGF0aHMgYmVn aW5uaW5nIGluIHRoaXMgc3RhdGUuICBUaGlzIGxpc3QgaXMKICAgKiBjYWxsZWQgdGhlIHBvc3Np YmxlIGZ1dHVyZXMgb2YgdGhlIHN0YXRlLgogICAqCiAgICogQSB0cml2aWFsIGV4YW1wbGUgaXMg dGhpcyBORkE6CiAgICogICAgICAgICAgICAgczEKICAgKiAgICAgICAgIEEgIC0tLT4gIEIKICAg KgogICAqICAgICAgICAgICAgIHMyICAKICAgKiAgICAgICAgICAgIC0tLT4gIEMKICAgKgogICAq ICAgICAgICAgICAgIGVwc2lsb24gICAgICAgICAgIHMxCiAgICogICAgICAgICAgICAtLS0tLS0t LS0+ICBEICAgLS0tLS0tPiBFCiAgICogCiAgICogCiAgICogSW4gdGhpcyBleGFtcGxlLCBBIGhh cyB0d28gcG9zc2libGUgZnV0dXJlcy4KICAgKiBPbmUgaW52b2tlcyB0aGUgc2lkZSBlZmZlY3Qg YHMxJyBhbmQgY29udGFpbnMgdHdvIHBhdGhzLAogICAqIG9uZSBlbmRpbmcgaW4gc3RhdGUgQiwg dGhlIG90aGVyIGluIHN0YXRlIEUuCiAgICogVGhlIG90aGVyIGludm9rZXMgdGhlIHNpZGUgZWZm ZWN0IGBzMicgYW5kIGNvbnRhaW5zIG9ubHkKICAgKiBvbmUgcGF0aCwgbGFuZGluZyBpbiBzdGF0 ZSBDLgogICAqLwogIHN0cnVjdCByeF9wb3NzaWJsZV9mdXR1cmUgKmZ1dHVyZXM7CgoKICAvKiBU aGVyZSBhcmUgZXhhY3RseSB0d28gZGlzdGluZ3Vpc2hlZCBzdGF0ZXMgaW4gZXZlcnkgTkZBOiAq LwogIHVuc2lnbmVkIGludCBpc19maW5hbDoxOwogIHVuc2lnbmVkIGludCBpc19zdGFydDoxOwoK ICAvKiBUaGVzZSBhcmUgdXNlZCBkdXJpbmcgTkZBIGNvbnN0cnVjdGlvbi4uLiAqLwogIHVuc2ln bmVkIGludCBlY2xvc3VyZV9uZWVkZWQ6MTsKICB1bnNpZ25lZCBpbnQgbWFyazoxOwp9OwoKCi8q IEFuIGVkZ2UgaW4gYW4gTkZBIGlzIHR5cGVkOiAqLwplbnVtIHJ4X25mYV9ldHlwZQp7CiAgLyog QSBjc2V0IGVkZ2UgaXMgbGFibGVkIHdpdGggYSBzZXQgb2YgY2hhcmFjdGVycyBvbmUgb2Ygd2hp Y2gKICAgKiBtdXN0IGJlIG1hdGNoZWQgZm9yIHRoZSBlZGdlIHRvIGJlIHRha2VuLgogICAqLwog IG5lX2NzZXQsCgogIC8qIEFuIGVwc2lsb24gZWRnZSBpcyB0YWtlbiB3aGVuZXZlciBpdHMgc3Rh cnRpbmcgc3RhdGUgaXMKICAgKiByZWFjaGVkLiAKICAgKi8KICBuZV9lcHNpbG9uLAoKICAvKiBB IHNpZGUgZWZmZWN0IGVkZ2UgaXMgdGFrZW4gd2hlbmV2ZXIgaXRzIHN0YXJ0aW5nIHN0YXRlIGlz CiAgICogcmVhY2hlZC4gIFNpZGUgZWZmZWN0cyBtYXkgY2F1c2UgdGhlIG1hdGNoIHRvIGZhaWwg b3IgdGhlCiAgICogcG9zaXRpb24gb2YgdGhlIG1hdGNoZXIgdG8gYWR2YW5jZS4KICAgKi8KICBu ZV9zaWRlX2VmZmVjdAkJLyogQSBzcGVjaWFsIGtpbmQgb2YgZXBzaWxvbi4gKi8KfTsKCnN0cnVj dCByeF9uZmFfZWRnZQp7CiAgc3RydWN0IHJ4X25mYV9lZGdlICpuZXh0OwogIGVudW0gcnhfbmZh X2V0eXBlIHR5cGU7CiAgc3RydWN0IHJ4X25mYV9zdGF0ZSAqZGVzdDsKICB1bmlvbgogIHsKICAg IHJ4X0JpdHNldCBjc2V0OwogICAgcnhfc2lkZV9lZmZlY3Qgc2lkZV9lZmZlY3Q7CiAgfSBwYXJh bXM7Cn07CgoKCi8qIEEgcG9zc2libGUgZnV0dXJlIGNvbnNpc3RzIG9mIGEgbGlzdCBvZiBzaWRl IGVmZmVjdHMKICogYW5kIGEgc2V0IG9mIGRlc3RpbmF0aW9uIHN0YXRlcy4gIEJlbG93IGFyZSB0 aGVpcgogKiByZXByZXNlbnRhdGlvbnMuICBUaGVzZSBzdHJ1Y3R1cmVzIGFyZSBoYXNoLWNvbnNl ZCB3aGljaAogKiBtZWFucyB0aGF0IGxpc3RzIHdpdGggdGhlIHNhbWUgZWxlbWVudHMgc2hhcmUg YSByZXByZXNlbnRhdGlvbgogKiAodGhlaXIgYWRkcmVzc2VzIGFyZSA9PSkuCiAqLwoKc3RydWN0 IHJ4X25mYV9zdGF0ZV9zZXQKewogIHN0cnVjdCByeF9uZmFfc3RhdGUgKiBjYXI7CiAgc3RydWN0 IHJ4X25mYV9zdGF0ZV9zZXQgKiBjZHI7Cn07CgpzdHJ1Y3Qgcnhfc2VfbGlzdAp7CiAgcnhfc2lk ZV9lZmZlY3QgY2FyOwogIHN0cnVjdCByeF9zZV9saXN0ICogY2RyOwp9OwoKc3RydWN0IHJ4X3Bv c3NpYmxlX2Z1dHVyZQp7CiAgc3RydWN0IHJ4X3Bvc3NpYmxlX2Z1dHVyZSAqbmV4dDsKICBzdHJ1 Y3Qgcnhfc2VfbGlzdCAqIGVmZmVjdHM7CiAgc3RydWN0IHJ4X25mYV9zdGF0ZV9zZXQgKiBkZXN0 c2V0Owp9OwoKDAoKLyogVGhpcyBiZWdpbnMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBzdXBlcnN0 YXRlIE5GQS4KICoKICogVGhlIHN1cGVyc3RhdGUgTkZBIGNvcnJlc3BvbmRzIHRvIHRoZSBORkEg aW4gdGhlc2Ugd2F5czoKICoKICogRXZlcnkgc3VwZXJzdGF0ZSBORkEgc3RhdGVzIFNVUEVSIGNv cnJlc3BvbmQgdG8gc2V0cyBvZiBORkEgc3RhdGVzLAogKiBuZmFfc3RhdGVzKFNVUEVSKS4KICoK ICogU3VwZXJzdGF0ZSBlZGdlcyBjb3JyZXNwb25kIHRvIE5GQSBwYXRocy4KICoKICogVGhlIHN1 cGVyc3RhdGUgaGFzIG5vIGVwc2lsb24gdHJhbnNpdGlvbnM7CiAqIGV2ZXJ5IGVkZ2UgaGFzIGEg Y2hhcmFjdGVyIGxhYmVsLCBhbmQgYSAocG9zc2libHkgZW1wdHkpIHNpZGUKICogZWZmZWN0IGxh YmVsLiAgIFRoZSBzaWRlIGVmZmVjdCBsYWJlbCBjb3JyZXNwb25kcyB0byBhIGxpc3Qgb2YKICog c2lkZSBlZmZlY3RzIHRoYXQgb2NjdXIgaW4gdGhlIE5GQS4gIFRoZXNlIHBhcnRzIGFyZSByZWZl cnJlZAogKiB0byBhczogICBzdXBlcmVkZ2VfY2hhcmFjdGVyKEVER0UpIGFuZCBzdXBlcmVkZ2Vf c2lkZXMoRURHRSkuCiAqCiAqIEZvciBhIHN1cGVyc3RhdGUgZWRnZSBFREdFIHN0YXJ0aW5nIGlu IHNvbWUgc3VwZXJzdGF0ZSBTVVBFUiwKICogdGhlIGZvbGxvd2luZyBpcyB0cnVlIChpbiBwc2V1 ZG8tbm90YXRpb24gOi0pOgogKgogKiAgICAgICBleGlzdHMgREVTVCBpbiBuZmFfc3RhdGVzIHMu dC4gCiAqICAgICAgICAgZXhpc3RzIG5mYUVER0UgaW4gbmZhX2VkZ2VzIHMudC4KICogICAgICAg ICAgICAgICAgIG9yaWdpbiAobmZhRURHRSkgPT0gREVTVAogKiAgICAgICAgICAgICAgJiYgb3Jp Z2luIChuZmFFREdFKSBpcyBhIG1lbWJlciBvZiBuZmFfc3RhdGVzKFNVUEVSKQogKiAgICAgICAg ICAgICAgJiYgZXhpc3RzIFBGIGluIHBvc3NpYmxlX2Z1dHVyZXMoZGVzdChuZmFFREdFKSkgcy50 LgogKiAJICAgICAgICAgICAgICAgIHNpZGVzX29mX3Bvc3NpYmxlX2Z1dHVyZSAoUEYpID09IHN1 cGVyZWRnZV9zaWRlcyAoRURHRSkKICoKICogYWxzbzoKICoKICogICAgICBsZXQgU1VQRVIyIDo9 IHN1cGVyZWRnZV9kZXN0aW5hdGlvbihFREdFKQogKiAgICAgICAgICBuZmFfc3RhdGVzKFNVUEVS MikKICogICAgICAgICAgID09IHVuaW9uIG9mIGFsbCBuZmEgc3RhdGUgc2V0cyBTIHMudC4KICog ICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0cyBQRiBpbiBwb3NzaWJsZV9mdXR1cmVzKGRl c3QobmZhRURHRSkpIHMudC4KICogCSAgICAgICAgICAgICAgICAgICAgICAgc2lkZXNfb2ZfcG9z c2libGVfZnV0dXJlIChQRikgPT0gc3VwZXJlZGdlX3NpZGVzIChFREdFKQogKiAgICAgICAgICAg ICAgICAgICAgICAgICAgJiYgUyA9PSBkZXN0c19vZl9wb3NzaWJsZV9mdXR1cmUgKFBGKSB9CiAq CiAqIE9yIGluIGVuZ2xpc2gsIGV2ZXJ5IHN1cGVyc3RhdGUgaXMgYSBzZXQgb2YgbmZhIHN0YXRl cy4gIEEgZ2l2ZW4KICogY2hhcmFjdGVyIGFuZCBhIHN1cGVyc3RhdGUgaW1wbGllcyBtYW55IHRy YW5zaXRpb25zIGluIHRoZSBORkEgLS0KICogdGhvc2UgdGhhdCBiZWdpbiB3aXRoIGFuIGVkZ2Ug bGFiZWxlZCB3aXRoIHRoYXQgY2hhcmFjdGVyIGZyb20gYQogKiBzdGF0ZSBpbiB0aGUgc2V0IGNv cnJlc3BvbmRpbmcgdG8gdGhlIHN1cGVyc3RhdGUuCiAqIAogKiBUaGUgZGVzdGluYXRpb25zIG9m IHRob3NlIHRyYW5zaXRpb25zIGVhY2ggaGF2ZSBhIHNldCBvZiBwb3NzaWJsZQogKiBmdXR1cmVz LiAgQSBwb3NzaWJsZSBmdXR1cmUgaXMgYSBsaXN0IG9mIHNpZGUgZWZmZWN0cyBhbmQgYSBzZXQg b2YKICogZGVzdGluYXRpb24gTkZBIHN0YXRlcy4gIFR3byBzZXRzIG9mIHBvc3NpYmxlIGZ1dHVy ZXMgY2FuIGJlCiAqIGBtZXJnZWQnIGJ5IGNvbWJpbmluZyBhbGwgcGFpcnMgb2YgcG9zc2libGUg ZnV0dXJlcyB0aGF0IGhhdmUgdGhlCiAqIHNhbWUgc2lkZSBlZmZlY3RzLiAgQSBwYWlyIGlzIGNv bWJpbmVkIGJ5IGNyZWF0aW5nIGEgbmV3IGZ1dHVyZQogKiB3aXRoIHRoZSBzYW1lIHNpZGUgZWZm ZWN0IGJ1dCB0aGUgdW5pb24gb2YgdGhlIHR3byBkZXN0aW5hdGlvbiBzZXRzLgogKiBJbiB0aGlz IHdheSwgYWxsIHRoZSBwb3NzaWJsZSBmdXR1cmVzIHN1Z2dlc3RlZCBieSBhIHN1cGVyc3RhdGUK ICogYW5kIGEgY2hhcmFjdGVyIGNhbiBiZSBtZXJnZWQgaW50byBhIHNldCBvZiBwb3NzaWJsZSBm dXR1cmVzIHdoZXJlCiAqIG5vIHR3byBlbGVtZW50cyBvZiB0aGUgc2V0IGhhdmUgdGhlIHNhbWUg c2V0IG9mIHNpZGUgZWZmZWN0cy4KICoKICogVGhlIGRlc3RpbmF0aW9uIG9mIGEgcG9zc2libGUg ZnV0dXJlLCBiZWluZyBhIHNldCBvZiBORkEgc3RhdGVzLCAKICogY29ycmVzcG9uZHMgdG8gYSBz dXBlcm5mYSBzdGF0ZS4gIFNvLCB0aGUgbWVyZ2VkIHNldCBvZiBwb3NzaWJsZQogKiBmdXR1cmVz IHdlIGp1c3QgY3JlYXRlZCBjYW4gc2VydmUgYXMgYSBzZXQgb2YgZWRnZXMgaW4gdGhlCiAqIHN1 cGVybmZhLgogKgogKiBUaGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cGVyc3RhdGUgbmZhIGFu ZCB0aGUgbmZhIGlzIGNyaXRpY2FsLgogKiBUaGUgbmZhIGhhcyB0byBiZSBjb21wYWN0LCBidXQg aGFzIHRvIGZhY2lsaXRhdGUgdGhlIHJhcGlkCiAqIGNvbXB1dGF0aW9uIG9mIG1pc3Npbmcgc3Vw ZXJzdGF0ZXMuICBUaGUgc3VwZXJzdGF0ZSBuZmEgaGFzIHRvIAogKiBiZSBmYXN0IHRvIGludGVy cHJldCwgbGF6aWxseSBjb25zdHJ1Y3RlZCwgYW5kIGJvdW5kZWQgaW4gc3BhY2UuCiAqCiAqIFRv IGZhY2lsaXRhdGUgaW50ZXJwcmV0YXRpb24sIHRoZSBzdXBlcnN0YXRlIGRhdGEgc3RydWN0dXJl cyBhcmUgCiAqIHBlcHBlcmVkIHdpdGggYGluc3RydWN0aW9uIGZyYW1lcycuICBUaGVyZSBpcyBh biBpbnN0cnVjdGlvbiBzZXQKICogZGVmaW5lZCBiZWxvdyB3aGljaCBtYXRjaGVycyB1c2luZyB0 aGUgc3VwZXJuZmEgbXVzdCBiZSBhYmxlIHRvCiAqIGludGVycHJldC4KICoKICogV2UnZCBsaWtl IHRvIG1ha2UgaXQgcG9zc2libGUgYnV0IG5vdCBtYW5kYXRvcnkgdG8gdXNlIGNvZGUKICogYWRk cmVzc2VzIHRvIHJlcHJlc2VudCBpbnN0cnVjdGlvbnMgKGMuZi4gZ2NjJ3MgY29tcHV0ZWQgZ290 bykuCiAqIFRoZXJlZm9yZSwgd2UgZGVmaW5lIGFuIGVudW1lcmF0ZWQgdHlwZSBvZiBvcGNvZGVz LCBhbmQgd2hlbgogKiB3cml0aW5nIG9uZSBvZiB0aGVzZSBpbnN0cnVjdGlvbnMgaW50byBhIGRh dGEgc3RydWN0dXJlLCB1c2UKICogdGhlIG9wY29kZSBhcyBhbiBpbmRleCBpbnRvIGEgdGFibGUg b2YgaW5zdHJ1Y3Rpb24gdmFsdWVzLgogKiAKICogSGVyZSBhcmUgdGhlIG9wY29kZXMgdGhhdCBv Y2N1ciBpbiB0aGUgc3VwZXJzdGF0ZSBuZmE6CiAqLwogCgovKiBFdmVyeSBzdXBlcnN0YXRlIGNv bnRhaW5zIGEgdGFibGUgb2YgaW5zdHJ1Y3Rpb24gZnJhbWVzIGluZGV4ZWQgCiAqIGJ5IGNoYXJh Y3RlcnMuICBBIG5vcm1hbCBgbW92ZScgaW4gYSBtYXRjaGVyIGlzIHRvIGZldGNoIHRoZSBuZXh0 CiAqIGNoYXJhY3RlciBhbmQgdXNlIGl0IGFzIGFuIGluZGV4IGludG8gYSBzdXBlcnN0YXRlcyB0 cmFuc2l0aW9uCiAqIHRhYmxlLgogKgogKiBJbiB0aGUgZmFzdGVkIGNhc2UsIG9ubHkgb25lIGVk Z2UgZm9sbG93cyBmcm9tIHRoYXQgY2hhcmFjdGVyLgogKiBJbiBvdGhlciBjYXNlcyB0aGVyZSBp cyBtb3JlIHdvcmsgdG8gZG8uCiAqIAogKiBUaGUgZGVzY3JpcHRpb25zIG9mIHRoZSBvcGNvZGVz IHJlZmVyIHRvIGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZQogKiBkZXNjcmliZWQgZnVydGhlciBi ZWxvdy4gCiAqLwoKZW51bSByeF9vcGNvZGUKewogIC8qIAogICAqIEJBQ0tUUkFDS19QT0lOVCBp cyBpbnZva2VkIHdoZW4gYSBjaGFyYWN0ZXIgdHJhbnNpdGlvbiBpbiAKICAgKiBhIHN1cGVyc3Rh dGUgbGVhZHMgdG8gbW9yZSB0aGFuIG9uZSBlZGdlLiAgSW4gdGhhdCBjYXNlLAogICAqIHRoZSBl ZGdlcyBoYXZlIHRvIGJlIGV4cGxvcmVkIGluZGVwZW5kZW50bHkgdXNpbmcgYSBiYWNrdHJhY2tp bmcKICAgKiBzdHJhdGVneS4KICAgKgogICAqIEEgQkFDS1RSQUNLX1BPSU5UIGluc3RydWN0aW9u IGlzIHN0b3JlZCBpbiBhIHN1cGVyc3RhdGUncyAKICAgKiB0cmFuc2l0aW9uIHRhYmxlIGZvciBz b21lIGNoYXJhY3RlciB3aGVuIGl0IGlzIGtub3duIHRoYXQgdGhhdAogICAqIGNoYXJhY3RlciBj cm9zc2VzIG1vcmUgdGhhbiBvbmUgZWRnZS4gIE9uIGVuY291bnRlcmluZyB0aGlzCiAgICogaW5z dHJ1Y3Rpb24sIHRoZSBtYXRjaGVyIHNhdmVzIGVub3VnaCBzdGF0ZSB0byBiYWNrdHJhY2sgdG8g dGhpcwogICAqIHBvaW50IGluIHRoZSBtYXRjaCBsYXRlci4KICAgKi8KICByeF9iYWNrdHJhY2tf cG9pbnQgPSAwLAkvKiBkYXRhIGlzIChzdHJ1Y3QgdHJhbnNpdGlvbl9jbGFzcyAqKSAqLwoKICAv KiAKICAgKiBSWF9ET19TSURFX0VGRkVDVFMgZXZhbHVhdGVzIHRoZSBzaWRlIGVmZmVjdHMgb2Yg YW4gZXBzaWxvbiBwYXRoLgogICAqIFRoZXJlIGlzIG9uZSBvY2N1cmVuY2Ugb2YgdGhpcyBpbnN0 cnVjdGlvbiBwZXIgcnhfZGlzdGluY3RfZnV0dXJlLgogICAqIFRoaXMgaW5zdHJ1Y3Rpb24gaXMg c2tpcHBlZCBpZiBhIHJ4X2Rpc3RpbmN0X2Z1dHVyZSBoYXMgbm8gc2lkZSBlZmZlY3RzLgogICAq LwogIHJ4X2RvX3NpZGVfZWZmZWN0cyA9IHJ4X2JhY2t0cmFja19wb2ludCArIDEsCgogIC8qIGRh dGEgaXMgKHN0cnVjdCByeF9kaXN0aW5jdF9mdXR1cmUgKikgKi8KCiAgLyogCiAgICogUlhfQ0FD SEVfTUlTUyBpbnN0cnVjdGlvbnMgYXJlIHN0b3JlZCBpbiByeF9kaXN0aW5jdF9mdXR1cmVzIHdo b3NlCiAgICogZGVzdGluYXRpb24gc3VwZXJzdGF0ZSBoYXMgYmVlbiByZWNsYWltZWQgKG9yIHdh cyBuZXZlciBidWlsdCkuCiAgICogSXQgcmVjb21wdXRlcyB0aGUgZGVzdGluYXRpb24gc3VwZXJz dGF0ZS4KICAgKiBSWF9DQUNIRV9NSVNTIGlzIGFsc28gc3RvcmVkIGluIGEgc3VwZXJzdGF0ZSB0 cmFuc2l0aW9uIHRhYmxlIGJlZm9yZQogICAqIGFueSBvZiBpdHMgZWRnZXMgaGF2ZSBiZWVuIGJ1 aWx0LgogICAqLwogIHJ4X2NhY2hlX21pc3MgPSByeF9kb19zaWRlX2VmZmVjdHMgKyAxLAogIC8q IGRhdGEgaXMgKHN0cnVjdCByeF9kaXN0aW5jdF9mdXR1cmUgKikgKi8KCiAgLyogCiAgICogUlhf TkVYVF9DSEFSIGlzIGNhbGxlZCB0byBjb25zdW1lIHRoZSBuZXh0IGNoYXJhY3RlciBhbmQgdGFr ZSB0aGUKICAgKiBjb3JyZXNwb25kaW5nIHRyYW5zaXRpb24uICBUaGlzIGlzIHRoZSBvbmx5IGlu c3RydWN0aW9uIHRoYXQgdXNlcyAKICAgKiB0aGUgREFUQSBmaWVsZCBvZiB0aGUgaW5zdHJ1Y3Rp b24gZnJhbWUgaW5zdGVhZCBvZiBEQVRBXzIuCiAgICogKHNlZSBFWFBMT1JFX0ZVVFVSRSBpbiBy ZWdleC5jKS4KICAgKi8KICByeF9uZXh0X2NoYXIgPSByeF9jYWNoZV9taXNzICsgMSwgLyogZGF0 YSBpcyAoc3RydWN0IHN1cGVyc3RhdGUgKikgKi8KCiAgLyogUlhfQkFDS1RSQUNLIGluZGljYXRl cyB0aGF0IGEgdHJhbnNpdGlvbiBmYWlscy4KICAgKi8KICByeF9iYWNrdHJhY2sgPSByeF9uZXh0 X2NoYXIgKyAxLCAvKiBubyBkYXRhICovCgogIC8qIAogICAqIFJYX0VSUk9SX0lOWCBpcyBzdG9y ZWQgb25seSBpbiBwbGFjZXMgdGhhdCBzaG91bGQgbmV2ZXIgYmUgZXhlY3V0ZWQuCiAgICovCiAg cnhfZXJyb3JfaW54ID0gcnhfYmFja3RyYWNrICsgMSwgLyogTm90IHN1cHBvc2VkIHRvIG9jY3Vy LiAqLwoKICByeF9udW1faW5zdHJ1Y3Rpb25zID0gcnhfZXJyb3JfaW54ICsgMQp9OwoKLyogQW4g aWRfaW5zdHJ1Y3Rpb25fdGFibGUgaG9sZHMgdGhlIHZhbHVlcyBzdG9yZWQgaW4gaW5zdHJ1Y3Rp b24KICogZnJhbWVzLiAgVGhlIHRhYmxlIGlzIGluZGV4ZWQgYnkgdGhlIGVudW1zIGRlY2xhcmVk IGFib3ZlLgogKi8KZXh0ZXJuIHZvaWQgKiByeF9pZF9pbnN0cnVjdGlvbl90YWJsZVtyeF9udW1f aW5zdHJ1Y3Rpb25zXTsKCi8qIFRoZSBoZWFydCBvZiB0aGUgbWF0Y2hlciBpcyBhIGB3b3JkLWNv ZGUtaW50ZXJwcmV0ZXInIAogKiAobGlrZSBhIGJ5dGUtY29kZSBpbnRlcnByZXRlciwgZXhjZXB0 IHRoYXQgaW5zdHJ1Y3Rpb25zCiAqIGFyZSBhIGZ1bGwgd29yZCB3aWRlKS4KICoKICogSW5zdHJ1 Y3Rpb25zIGFyZSBub3Qgc3RvcmVkIGluIGEgdmVjdG9yIG9mIGNvZGUsIGluc3RlYWQsCiAqIHRo ZXkgYXJlIHNjYXR0ZXJlZCB0aHJvdWdob3V0IHRoZSBkYXRhIHN0cnVjdHVyZXMgYnVpbHQKICog YnkgdGhlIHJlZ2V4cCBjb21waWxlciBhbmQgdGhlIG1hdGNoZXIuICBPbmUgd29yZC1jb2RlIGlu c3RydWN0aW9uLAogKiB0b2dldGhlciB3aXRoIHRoZSBhcmd1bWVudHMgdG8gdGhhdCBpbnN0cnVj dGlvbiwgY29uc3RpdHV0ZQogKiBhbiBpbnN0cnVjdGlvbiBmcmFtZSAoc3RydWN0IHJ4X2lueCku CiAqCiAqIFRoaXMgc3RydWN0dXJlIHR5cGUgaXMgcGFkZGVkIGJ5IGhhbmQgdG8gYSBwb3dlciBv ZiAyIGJlY2F1c2UKICogaW4gb25lIG9mIHRoZSBkb21pbmFudCBjYXNlcywgd2UgZGlzcGF0Y2gg YnkgaW5kZXhpbmcgYSB0YWJsZQogKiBvZiBpbnN0cnVjdGlvbiBmcmFtZXMuICBJZiB0aGF0IGlu ZGV4aW5nIGNhbiBiZSBhY2NvbXBsaXNoZWQKICogYnkganVzdCBhIHNoaWZ0IG9mIHRoZSBpbmRl eCwgd2UncmUgaGFwcHkuCiAqCiAqIEluc3RydWN0aW9ucyB0YWtlIGF0IG1vc3Qgb25lIGFyZ3Vt ZW50LCBidXQgdGhlcmUgYXJlIHR3bwogKiBzbG90cyBpbiBhbiBpbnN0cnVjdGlvbiBmcmFtZSB0 aGF0IG1pZ2h0IGhvbGQgdGhhdCBhcmd1bWVudC4KICogVGhlc2UgYXJlIGNhbGxlZCBkYXRhIGFu ZCBkYXRhXzIuICBUaGUgZGF0YSBzbG90IGlzIG9ubHkKICogdXNlZCBmb3Igb25lIGluc3RydWN0 aW9uIChSWF9ORVhUX0NIQVIpLiAgRm9yIGFsbCBvdGhlciAKICogaW5zdHJ1Y3Rpb25zLCBkYXRh IHNob3VsZCBiZSBzZXQgdG8gMC4KICoKICogUlhfTkVYVF9DSEFSIGlzIHRoZSBtb3N0IGltcG9y dGFudCBpbnN0cnVjdGlvbiBieSBmYXIuCiAqIEJ5IHJlc2VydmluZyB0aGUgZGF0YSBmaWVsZCBm b3IgaXRzIGV4Y2x1c2l2ZSB1c2UsIAogKiBpbnN0cnVjdGlvbiBkaXNwYXRjaCBpcyBzcGVkIHVw IGluIHRoYXQgY2FzZS4gIFRoZXJlIGlzCiAqIG5vIG5lZWQgdG8gZmV0Y2ggYm90aCB0aGUgaW5z dHJ1Y3Rpb24gYW5kIHRoZSBkYXRhLAogKiBvbmx5IHRoZSBkYXRhIGlzIG5lZWRlZC4gIEluIG90 aGVyIHdvcmRzLCBhIGBjeWNsZScgYmVnaW5zCiAqIGJ5IGZldGNoaW5nIHRoZSBmaWVsZCBkYXRh LiAgSWYgdGhhdCBpcyBub24tMCwgdGhlbiBpdCBtdXN0CiAqIGJlIHRoZSBkZXN0aW5hdGlvbiBz dGF0ZSBvZiBhIG5leHRfY2hhciB0cmFuc2l0aW9uLCBzbwogKiBtYWtlIHRoYXQgdmFsdWUgdGhl IGN1cnJlbnQgc3RhdGUsIGFkdmFuY2UgdGhlIG1hdGNoIHBvc2l0aW9uCiAqIGJ5IG9uZSBjaGFy YWN0ZXIsIGFuZCBzdGFydCBhIG5ldyBjeWNsZS4gIE9uIHRoZSBvdGhlciBoYW5kLAogKiBpZiBk YXRhIGlzIDAsIGZldGNoIHRoZSBpbnN0cnVjdGlvbiBhbmQgZG8gYSBtb3JlIGNvbXBsaWNhdGVk CiAqIGRpc3BhdGNoIG9uIHRoYXQuCiAqLwoKc3RydWN0IHJ4X2lueCAKewogIHZvaWQgKiBkYXRh OwogIHZvaWQgKiBkYXRhXzI7CiAgdm9pZCAqIGlueDsKICB2b2lkICogZm5vcmQ7Cn07CgojaWZu ZGVmIFJYX1RBSUxfQVJSQVkKI2RlZmluZSBSWF9UQUlMX0FSUkFZICAxCiNlbmRpZgoKLyogQSBz dXBlcnN0YXRlIGNvcnJlc3BvbmRzIHRvIGEgc2V0IG9mIG5mYSBzdGF0ZXMuICBUaG9zZSBzZXRz IGFyZQogKiByZXByZXNlbnRlZCBieSBTVFJVQ1QgUlhfU1VQRVJTRVQuICBUaGUgY29uc3RydWN0 b3JzCiAqIGd1YXJhbnRlZSB0aGF0IG9ubHkgb25lIChzaGFyZWQpIHN0cnVjdHVyZSBpcyBjcmVh dGVkIGZvciBhIGdpdmVuIHNldC4KICovCnN0cnVjdCByeF9zdXBlcnNldAp7CiAgaW50IHJlZnM7 CQkJLyogVGhpcyBpcyBhIHJlZmVyZW5jZSBjb3VudGVkIHN0cnVjdHVyZS4gKi8KCiAgLyogV2Ug a2VlcCB0aGVzZSBzZXRzIGluIGEgY2FjaGUgYmVjYXVzZSAoaW4gYW4gdW5wcmVkaWN0YWJsZSB3 YXkpLAogICAqIHRoZSBzYW1lIHNldCBpcyBvZnRlbiBjcmVhdGVkIGFnYWluIGFuZCBhZ2Fpbi4g IEJ1dCB0aGF0IGlzIGFsc28KICAgKiBwcm9ibGVtYXRpYyAtLSBjb21wYXRpYmlsaXR5IHdpdGgg UE9TSVggYW5kIEdOVSByZWdleCByZXF1aXJlcwogICAqIHRoYXQgd2Ugbm90IGJlIGFibGUgdG8g dGVsbCB3aGVuIGEgcHJvZ3JhbSBkaXNjYXJkcyBhIHBhcnRpY3VsYXIKICAgKiBORkEgKHRodXMg aW52YWxpZGF0aW5nIHRoZSBzdXBlcnNldHMgY3JlYXRlZCBmcm9tIGl0KS4KICAgKgogICAqIEJ1 dCB3aGVuIGEgY2FjaGUgaGl0IGFwcGVhcnMgdG8gb2NjdXIsIHdlIHdpbGwgaGF2ZSBpbiBoYW5k IHRoZQogICAqIG5mYSBmb3Igd2hpY2ggaXQgbWF5IGhhdmUgaGFwcGVuZWQuICBUaGF0IGlzIHdo eSBldmVyeSBuZmEgaXMgZ2l2ZW4KICAgKiBpdHMgb3duIHNlcXVlbmNlIG51bWJlci4gIE9uIGEg Y2FjaGUgaGl0LCB0aGUgY2FjaGUgaXMgdmFsaWRhdGVkCiAgICogYnkgY29tcGFyaW5nIHRoZSBu ZmEgc2VxdWVuY2UgbnVtYmVyIHRvIHRoaXMgZmllbGQ6CiAgICovCiAgaW50IGlkOwoKICBzdHJ1 Y3QgcnhfbmZhX3N0YXRlICogY2FyOwkvKiBNYXkgb3IgbWF5IG5vdCBiZSBhIHZhbGlkIGFkZHIu ICovCiAgc3RydWN0IHJ4X3N1cGVyc2V0ICogY2RyOwoKICAvKiBJZiB0aGUgY29ycmVzcG9uZGlu ZyBzdXBlcnN0YXRlIGV4aXN0czogKi8KICBzdHJ1Y3Qgcnhfc3VwZXJzdGF0ZSAqIHN1cGVyc3Rh dGU7CgoKICAvKiBUaGVyZSBpcyBhbm90aGVyIGJvb2trZWVwaW5nIHByb2JsZW0uICBJdCBpcyBl eHBlbnNpdmUgdG8gCiAgICogY29tcHV0ZSB0aGUgc3RhcnRpbmcgbmZhIHN0YXRlIHNldCBmb3Ig YW4gbmZhLiAgU28sIG9uY2UgY29tcHV0ZWQsCiAgICogaXQgaXMgY2FjaGVkIGluIHRoZSBgc3Ry dWN0IHJ4Jy4KICAgKgogICAqIEJ1dCwgdGhlIHN0YXRlIHNldCBjYW4gYmUgZmx1c2hlZCBmcm9t IHRoZSBzdXBlcnN0YXRlIGNhY2hlLgogICAqIFdoZW4gdGhhdCBoYXBwZW5zLCB3ZSBjYW4ndCBr bm93IGlmIHRoZSBjb3JyZXNwb25kaW5nIGBzdHJ1Y3QgcngnCiAgICogaXMgc3RpbGwgYWxpdmUg b3IgaWYgaXQgaGFzIGJlZW4gZnJlZWQgb3IgcmUtdXNlZCBieSB0aGUgcHJvZ3JhbS4KICAgKiBT bywgdGhlIGNhY2hlZCBwb2ludGVyIHRvIHRoaXMgc2V0IGluIGEgc3RydWN0IHJ4IG1pZ2h0IGJl IGludmFsaWQKICAgKiBhbmQgd2UgbmVlZCBhIHdheSB0byB2YWxpZGF0ZSBpdC4KICAgKgogICAq IEZvcnR1bmF0ZWx5LCBldmVuIGlmIHRoaXMgc2V0IGlzIGZsdXNoZWQgZnJvbSB0aGUgY2FjaGUs IGl0IGlzCiAgICogbm90IGZyZWVkLiAgSXQganVzdCBnb2VzIG9uIHRoZSBmcmVlLWxpc3Qgb2Yg c3VwZXJzZXRzLgogICAqIFNvIHdlIGNhbiBzdGlsbCBleGFtaW5lIGl0LiAgCiAgICoKICAgKiBT byB0byB2YWxpZGF0ZSBhIHN0YXJ0aW5nIHNldCBtZW1vLCBjaGVjayB0byBzZWUgaWYgdGhlCiAg ICogc3RhcnRzX2ZvciBmaWVsZCBzdGlsbCBwb2ludHMgYmFjayB0byB0aGUgc3RydWN0IHJ4IGlu IHF1ZXN0aW9uLAogICAqIGFuZCBpZiB0aGUgSUQgbWF0Y2hlcyB0aGUgcnggc2VxdWVuY2UgbnVt YmVyLgogICAqLwogIHN0cnVjdCByeCAqIHN0YXJ0c19mb3I7CgogIC8qIFRoaXMgaXMgdXNlZCB0 byBsaW5rIGludG8gYSBoYXNoIGJ1Y2tldCBzbyB0aGVzZSBvYmplY3RzIGNhbgogICAqIGJlIGBo YXNoLWNvbnNlZCcuCiAgICovCiAgc3RydWN0IHJ4X2hhc2hfaXRlbSBoYXNoX2l0ZW07Cn07Cgoj ZGVmaW5lIHJ4X3Byb3RlY3Rfc3VwZXJzZXQoUlgsQ09OKSAoKysoQ09OKS0+cmVmcykKCi8qIFRo ZSB0ZXJtaW5vbG9neSBtYXkgYmUgY29uZnVzaW5nIChyZW5hbWUgdGhpcyBzdHJ1Y3R1cmU/KS4K ICogRXZlcnkgY2hhcmFjdGVyIG9jY3VycyBpbiBhdCBtb3N0IG9uZSByeF9zdXBlcl9lZGdlIHBl ciBzdXBlci1zdGF0ZS4KICogQnV0LCB0aGF0IHN0cnVjdHVyZSBtaWdodCBoYXZlIG1vcmUgdGhh biBvbmUgb3B0aW9uLCBpbmRpY2F0aW5nIGEgcG9pbnQKICogb2Ygbm9uLWRldGVybWluaXNtLiAK ICoKICogSW4gb3RoZXIgd29yZHMsIHRoaXMgc3RydWN0dXJlIGhvbGRzIGEgbGlzdCBvZiBzdXBl cnN0YXRlIGVkZ2VzCiAqIHNoYXJpbmcgYSBjb21tb24gc3RhcnRpbmcgc3RhdGUgYW5kIGNoYXJh Y3RlciBsYWJlbC4gIFRoZSBlZGdlcwogKiBhcmUgaW4gdGhlIGZpZWxkIE9QVElPTlMuICBBbGwg c3VwZXJzdGF0ZSBlZGdlcyBzaGFyaW5nIHRoZSBzYW1lCiAqIHN0YXJ0aW5nIHN0YXRlIGFuZCBj aGFyYWN0ZXIgYXJlIGluIHRoaXMgbGlzdC4KICovCnN0cnVjdCByeF9zdXBlcl9lZGdlCnsKICBz dHJ1Y3Qgcnhfc3VwZXJfZWRnZSAqbmV4dDsKICBzdHJ1Y3QgcnhfaW54IHJ4X2JhY2t0cmFja19m cmFtZTsKICBpbnQgY3NldF9zaXplOwogIHJ4X0JpdHNldCBjc2V0OwogIHN0cnVjdCByeF9kaXN0 aW5jdF9mdXR1cmUgKm9wdGlvbnM7Cn07CgovKiBBIHN1cGVyc3RhdGUgaXMgYSBzZXQgb2YgbmZh IHN0YXRlcyAoUlhfU1VQRVJTRVQpIGFsb25nCiAqIHdpdGggYSB0cmFuc2l0aW9uIHRhYmxlLiAg U3VwZXJzdGF0ZXMgYXJlIGJ1aWx0IG9uIGRlbWFuZCBhbmQgcmVjbGFpbWVkCiAqIHdpdGhvdXQg d2FybmluZy4gIFRvIHByb3RlY3QgYSBzdXBlcnN0YXRlIGZyb20gdGhpcyBnaGFzdGx5IGZhdGUs CiAqIHVzZSBMT0NLX1NVUEVSU1RBVEUuIAogKi8Kc3RydWN0IHJ4X3N1cGVyc3RhdGUKewogIGlu dCByeF9pZDsJCQkvKiBjLmYuIHRoZSBpZCBmaWVsZCBvZiByeF9zdXBlcnNldCAqLwogIGludCBs b2NrczsJCQkvKiBwcm90ZWN0aW9uIGZyb20gcmVjbGFtYXRpb24gKi8KCiAgLyogV2l0aGluIGEg c3VwZXJzdGF0ZSBjYWNoZSwgYWxsIHRoZSBzdXBlcnN0YXRlcyBhcmUga2VwdCBpbiBhIGJpZwog ICAqIHF1ZXVlLiAgVGhlIHRhaWwgb2YgdGhlIHF1ZXVlIGlzIHRoZSBzdGF0ZSBtb3N0IGxpa2Vs eSB0byBiZQogICAqIHJlY2xhaW1lZC4gIFRoZSAqcmVjeWNsYWJsZSBmaWVsZHMgaG9sZCB0aGUg cXVldWUgcG9zaXRpb24gb2YgCiAgICogdGhpcyBzdGF0ZS4KICAgKi8KICBzdHJ1Y3Qgcnhfc3Vw ZXJzdGF0ZSAqIG5leHRfcmVjeWNsYWJsZTsKICBzdHJ1Y3Qgcnhfc3VwZXJzdGF0ZSAqIHByZXZf cmVjeWNsYWJsZTsKCiAgLyogVGhlIHN1cGVybmZhIGVkZ2VzIHRoYXQgZXhpc3QgaW4gdGhlIGNh Y2hlIGFuZCB0aGF0IGhhdmUKICAgKiB0aGlzIHN0YXRlIGFzIHRoZWlyIGRlc3RpbmF0aW9uIGFy ZSBrZXB0IGluIHRoaXMgbGlzdDoKICAgKi8KICBzdHJ1Y3QgcnhfZGlzdGluY3RfZnV0dXJlICog dHJhbnNpdGlvbl9yZWZzOwoKICAvKiBUaGUgbGlzdCBvZiBuZmEgc3RhdGVzIGNvcnJlc3BvbmRp bmcgdG8gdGhpcyBzdXBlcnN0YXRlOiAqLwogIHN0cnVjdCByeF9zdXBlcnNldCAqIGNvbnRlbnRz OwoKICAvKiBUaGUgbGlzdCBvZiBlZGdlcyBpbiB0aGUgY2FjaGUgYmVnaW5uaW5nIGZyb20gdGhp cyBzdGF0ZS4gKi8KICBzdHJ1Y3Qgcnhfc3VwZXJfZWRnZSAqIGVkZ2VzOwoKICAvKiBBIHRhaWwg b2YgdGhlIHJlY3ljbGFibGUgcXVldWUgaXMgbWFya2VkIGFzIHNlbWlmcmVlLiAgQSBzZW1pZnJl ZQogICAqIHN0YXRlIGhhcyBubyBpbmNvbWluZyBuZXh0X2NoYXIgdHJhbnNpdGlvbnMgLS0gYW55 IHRyYW5zaXRpb24KICAgKiBpbnRvIGEgc2VtaWZyZWUgc3RhdGUgY2F1c2VzIGEgY29tcGxleCBk aXNwYXRjaCB3aXRoIHRoZSBzaWRlCiAgICogZWZmZWN0IG9mIHJlc2N1aW5nIHRoZSBzdGF0ZSBm cm9tIGl0cyBzZW1pZnJlZSBzdGF0ZS4KICAgKgogICAqIEFuIGFsdGVybmF0aXZlIHRvIHRoaXMg bWlnaHQgYmUgdG8gbWFrZSBuZXh0X2NoYXIgbW9yZSBleHBlbnNpdmUsCiAgICogYW5kIHRvIG1v dmUgYSBzdGF0ZSB0byB0aGUgaGVhZCBvZiB0aGUgcmVjeWNsYWJsZSBxdWV1ZSB3aGVuZXZlcgog ICAqIGl0IGlzIGVudGVyZWQuICBUaGF0IHdheSwgcG9wdWxhciBzdGF0ZXMgd291bGQgbmV2ZXIg YmUgcmVjeWNsZWQuCiAgICoKICAgKiBCdXQgdW5pbGF0ZXJhbGx5IG1ha2luZyBuZXh0X2NoYXIg bW9yZSBleHBlbnNpdmUgYWN0dWFsbHkgbG9zZXMuCiAgICogU28sIGluY29taW5nIHRyYW5zaXRp b25zIGFyZSBvbmx5IG1hZGUgZXhwZW5zaXZlIGZvciBzdGF0ZXMgbmVhcgogICAqIHRoZSB0YWls IG9mIHRoZSByZWN5Y2xhYmxlIHF1ZXVlLiAgVGhlIG1vcmUgY2FjaGUgY29udGVudGlvbgogICAq IHRoZXJlIGlzLCB0aGUgbW9yZSBmcmVxdWVudGx5IGEgc3RhdGUgd2lsbCBoYXZlIHRvIHByb3Zl IGl0c2VsZgogICAqIGFuZCBiZSBtb3ZlZCBiYWNrIHRvIHRoZSBmcm9udCBvZiB0aGUgcXVldWUu ICBJZiB0aGVyZSBpcyBsZXNzIAogICAqIGNvbnRlbnRpb24sIHRoZW4gcG9wdWxhciBzdGF0ZXMg anVzdCBhZ2dyZWdhdGUgaW4gdGhlIGZyb250IG9mIAogICAqIHRoZSBxdWV1ZSBhbmQgc3RheSB0 aGVyZS4KICAgKi8KICBpbnQgaXNfc2VtaWZyZWU7CgoKICAvKiBUaGlzIGtlZXBzIHRyYWNrIG9m IHRoZSBzaXplIG9mIHRoZSB0cmFuc2l0aW9uIHRhYmxlIGZvciB0aGlzCiAgICogc3RhdGUuICBU aGVyZSBpcyBhIGhhbGYtaGVhcnRlZCBhdHRlbXB0IHRvIHN1cHBvcnQgdmFyaWFibGUgc2l6ZWQK ICAgKiBzdXBlcnN0YXRlcy4KICAgKi8KICBpbnQgdHJhbnNfc2l6ZTsKCiAgLyogSW5kZXhlZCBi eSBjaGFyYWN0ZXJzLi4uICovCiAgc3RydWN0IHJ4X2lueCB0cmFuc2l0aW9uc1tSWF9UQUlMX0FS UkFZXTsKfTsKCgovKiBBIGxpc3Qgb2YgZGlzdGluY3QgZnV0dXJlcyBkZWZpbmUgdGhlIGVkZ2Vz IHRoYXQgbGVhdmUgZnJvbSBhIAogKiBnaXZlbiBzdXBlcnN0YXRlIG9uIGEgZ2l2ZW4gY2hhcmFj dGVyLiAgYy5mLiByeF9zdXBlcl9lZGdlLgogKi8KCnN0cnVjdCByeF9kaXN0aW5jdF9mdXR1cmUK ewogIHN0cnVjdCByeF9kaXN0aW5jdF9mdXR1cmUgKiBuZXh0X3NhbWVfc3VwZXJfZWRnZVsyXTsK ICBzdHJ1Y3QgcnhfZGlzdGluY3RfZnV0dXJlICogbmV4dF9zYW1lX2Rlc3Q7CiAgc3RydWN0IHJ4 X2Rpc3RpbmN0X2Z1dHVyZSAqIHByZXZfc2FtZV9kZXN0OwogIHN0cnVjdCByeF9zdXBlcnN0YXRl ICogcHJlc2VudDsJLyogc291cmNlIHN0YXRlICovCiAgc3RydWN0IHJ4X3N1cGVyc3RhdGUgKiBm dXR1cmU7CS8qIGRlc3RpbmF0aW9uIHN0YXRlICovCiAgc3RydWN0IHJ4X3N1cGVyX2VkZ2UgKiBl ZGdlOwoKCiAgLyogVGhlIGZ1dHVyZV9mcmFtZSBob2xkcyB0aGUgaW5zdHJ1Y3Rpb24gdGhhdCBz aG91bGQgYmUgZXhlY3V0ZWQKICAgKiBhZnRlciBhbGwgdGhlIHNpZGUgZWZmZWN0cyBhcmUgZG9u ZSwgd2hlbiBpdCBpcyB0aW1lIHRvIGNvbXBsZXRlCiAgICogdGhlIHRyYW5zaXRpb24gdG8gdGhl IG5leHQgc3RhdGUuCiAgICoKICAgKiBOb3JtYWxseSB0aGlzIGlzIGEgbmV4dF9jaGFyIGluc3Ry dWN0aW9uLCBidXQgaXQgbWF5IGJlIGEKICAgKiBjYWNoZV9taXNzIGluc3RydWN0aW9uIGFzIHdl bGwsIGRlcGVuZGluZyBvbiB3aGV0aGVyIG9yIG5vdAogICAqIHRoZSBzdXBlcnN0YXRlIGlzIGlu IHRoZSBjYWNoZSBhbmQgc2VtaWZyZWUuCiAgICogCiAgICogSWYgdGhpcyBpcyB0aGUgb25seSBm dXR1cmUgZm9yIGEgZ2l2ZW4gc3VwZXJzdGF0ZS9jaGFyLCBhbmQKICAgKiBpZiB0aGVyZSBhcmUg bm8gc2lkZSBlZmZlY3RzIHRvIGJlIHBlcmZvcm1lZCwgdGhpcyBmcmFtZSBpcwogICAqIG5vdCB1 c2VkIChkaXJlY3RseSkgYXQgYWxsLiAgSW5zdGVhZCwgaXRzIGNvbnRlbnRzIGFyZSBjb3BpZWQK ICAgKiBpbnRvIHRoZSB0cmFuc2l0aW9uIHRhYmxlIG9mIHRoZSBzdGFydGluZyBzdGF0ZSBvZiB0 aGlzIGRpc3QuIGZ1dHVyZS4KICAgKi8KICBzdHJ1Y3QgcnhfaW54IGZ1dHVyZV9mcmFtZTsKCiAg c3RydWN0IHJ4X2lueCBzaWRlX2VmZmVjdHNfZnJhbWU7CiAgc3RydWN0IHJ4X3NlX2xpc3QgKiBl ZmZlY3RzOwp9OwoKI2RlZmluZSByeF9sb2NrX3N1cGVyc3RhdGUoUixTKSAgKChTKS0+bG9ja3Mr KykKI2RlZmluZSByeF91bmxvY2tfc3VwZXJzdGF0ZShSLFMpICgtLShTKS0+bG9ja3MpCgoMCi8q IFRoaXMgcGFnZSBkZXN0aW5lZCBmb3IgcnguaCAqLwoKc3RydWN0IHJ4X2Jsb2NrbGlzdAp7CiAg c3RydWN0IHJ4X2Jsb2NrbGlzdCAqIG5leHQ7CiAgaW50IGJ5dGVzOwp9OwoKc3RydWN0IHJ4X2Zy ZWVsaXN0CnsKICBzdHJ1Y3QgcnhfZnJlZWxpc3QgKiBuZXh0Owp9OwoKc3RydWN0IHJ4X2NhY2hl OwoKI2lmZGVmIF9fU1REQ19fCnR5cGVkZWYgdm9pZCAoKnJ4X21vcmVjb3JlX2ZuKShzdHJ1Y3Qg cnhfY2FjaGUgKik7CiNlbHNlCnR5cGVkZWYgdm9pZCAoKnJ4X21vcmVjb3JlX2ZuKSgpOwojZW5k aWYKCi8qIFlvdSB1c2UgdGhpcyB0byBjb250cm9sIHRoZSBhbGxvY2F0aW9uIG9mIHN1cGVyc3Rh dGUgZGF0YSAKICogZHVyaW5nIG1hdGNoaW5nLiAgTW9zdCBvZiBpdCBzaG91bGQgYmUgaW5pdGlh bGl6ZWQgdG8gMC4KICoKICogQSBNT1JFQ09SRSBmdW5jdGlvbiBpcyBuZWNlc3NhcnkuICBJdCBz aG91bGQgYWxsb2NhdGUKICogYSBuZXcgYmxvY2sgb2YgbWVtb3J5IG9yIHJldHVybiAwLgogKiBB IGRlZmF1bHQgdGhhdCB1c2VzIG1hbGxvYyBpcyBjYWxsZWQgYHJ4X21vcmVjb3JlJy4KICoKICog VGhlIG51bWJlciBvZiBTVVBFUlNUQVRFU19BTExPV0VEIGluZGlyZWN0bHkgbGltaXRzIGhvdyBt dWNoIG1lbW9yeQogKiB0aGUgc3lzdGVtIHdpbGwgdHJ5IHRvIGFsbG9jYXRlLiAgVGhlIGRlZmF1 bHQgaXMgMTI4LiAgQmF0Y2ggc3R5bGUKICogYXBwbGljYXRpb25zIHRoYXQgYXJlIHZlcnkgcmVn ZXhwIGludGVuc2l2ZSBzaG91bGQgdXNlIGFzIGhpZ2ggYSBudW1iZXIKICogYXMgcG9zc2libGUg d2l0aG91dCB0aHJhc2hpbmcuCiAqIAogKiBUaGUgTE9DQUxfQ1NFVF9TSVpFIGlzIHRoZSBudW1i ZXIgb2YgY2hhcmFjdGVycyBpbiBhIGNoYXJhY3RlciBzZXQuCiAqIEl0IGlzIHRoZXJlZm9yZSB0 aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gYSBzdXBlcnN0YXRlIHRyYW5zaXRpb24gdGFibGUuCiAq IEdlbmVyYWxseSwgaXQgc2hvdWxkIGJlIDI1Ni4gIElmIHlvdXIgY2hhcmFjdGVyIHNldCBoYXMg MTYgYml0cywgCiAqIGl0IGlzIGJldHRlciB0byB0cmFuc2xhdGUgeW91ciByZWdleHBzIGludG8g ZXF1aXZhbGVudCA4IGJpdCBwYXR0ZXJucy4KICovCgpzdHJ1Y3QgcnhfY2FjaGUKewogIHN0cnVj dCByeF9oYXNoX3J1bGVzIHN1cGVyc2V0X2hhc2hfcnVsZXM7CgogIC8qIE9iamVjdHMgYXJlIGFs bG9jYXRlZCBieSBpbmNyZW1lbnRpbmcgYSBwb2ludGVyIHRoYXQgCiAgICogc2NhbnMgYWNyb3Nz IHJ4X2Jsb2NrbGlzdHMuCiAgICovCiAgc3RydWN0IHJ4X2Jsb2NrbGlzdCAqIG1lbW9yeTsKICBz dHJ1Y3QgcnhfYmxvY2tsaXN0ICogbWVtb3J5X3BvczsKICBpbnQgYnl0ZXNfbGVmdDsKICBjaGFy ICogbWVtb3J5X2FkZHI7CiAgcnhfbW9yZWNvcmVfZm4gbW9yZWNvcmU7CgogIC8qIEZyZWVsaXN0 cy4gKi8KICBzdHJ1Y3QgcnhfZnJlZWxpc3QgKiBmcmVlX3N1cGVyc3RhdGVzOwogIHN0cnVjdCBy eF9mcmVlbGlzdCAqIGZyZWVfdHJhbnNpdGlvbl9jbGFzc2VzOwogIHN0cnVjdCByeF9mcmVlbGlz dCAqIGZyZWVfZGlzY2VybmFibGVfZnV0dXJlczsKICBzdHJ1Y3QgcnhfZnJlZWxpc3QgKiBmcmVl X3N1cGVyc2V0czsKICBzdHJ1Y3QgcnhfZnJlZWxpc3QgKiBmcmVlX2hhc2g7CgogIC8qIFR3byBz ZXRzIG9mIHN1cGVyc3RhdGVzIC0tIHRob3NlIHRoYXQgYXJlIHNlbWlmcmVlZCwgYW5kIHRob3Nl CiAgICogdGhhdCBhcmUgYmVpbmcgdXNlZC4KICAgKi8KICBzdHJ1Y3Qgcnhfc3VwZXJzdGF0ZSAq IGxydV9zdXBlcnN0YXRlOwogIHN0cnVjdCByeF9zdXBlcnN0YXRlICogc2VtaWZyZWVfc3VwZXJz dGF0ZTsKCiAgc3RydWN0IHJ4X3N1cGVyc2V0ICogZW1wdHlfc3VwZXJzZXQ7CgogIGludCBzdXBl cnN0YXRlczsKICBpbnQgc2VtaWZyZWVfc3VwZXJzdGF0ZXM7CiAgaW50IGhpdHM7CiAgaW50IG1p c3NlczsKICBpbnQgc3VwZXJzdGF0ZXNfYWxsb3dlZDsKCiAgaW50IGxvY2FsX2NzZXRfc2l6ZTsK ICB2b2lkICoqIGluc3RydWN0aW9uX3RhYmxlOwoKICBzdHJ1Y3QgcnhfaGFzaCBzdXBlcnNldF90 YWJsZTsKfTsKCgwKCi8qIFRoZSBsb3dlc3QtbGV2ZWwgc2VhcmNoIGZ1bmN0aW9uIHN1cHBvcnRz IGFyYml0cmFyaWx5IGZyYWdtZW50ZWQKICogc3RyaW5ncyBhbmQgKG9wdGlvbmFsbHkpIHN1c3Bl bmRhYmxlL3Jlc3VtYWJsZSBzZWFyY2hlcy4KICoKICogQ2FsbGVycyBoYXZlIHRvIHByb3ZpZGUg YSBmZXcgaG9va3MuCiAqLwoKI2lmbmRlZiBfX0dOVUNfXwojaWZkZWYgX19TVERDX18KI2RlZmlu ZSBfX2NvbnN0X18gY29uc3QKI2Vsc2UKI2RlZmluZSBfX2NvbnN0X18KI2VuZGlmCiNlbmRpZgoK LyogVGhpcyBob2xkcyBhIG1hdGNoZXIgcG9zaXRpb24gKi8Kc3RydWN0IHJ4X3N0cmluZ19wb3Np dGlvbgp7CiAgX19jb25zdF9fIHVuc2lnbmVkIGNoYXIgKiBwb3M7CS8qIFRoZSBjdXJyZW50IHBv cy4gKi8KICBfX2NvbnN0X18gdW5zaWduZWQgY2hhciAqIHN0cmluZzsgLyogVGhlIGN1cnJlbnQg c3RyaW5nIGJ1cnN0LiAqLwogIF9fY29uc3RfXyB1bnNpZ25lZCBjaGFyICogZW5kOwkvKiBGaXJz dCBpbnZhbGlkIHBvc2l0aW9uID49IFBPUy4gKi8KICBpbnQgb2Zmc2V0OwkJCS8qIEludGVnZXIg YWRkcmVzcyBvZiB0aGUgY3VycmVudCBidXJzdC4gKi8KICBpbnQgc2l6ZTsJCQkvKiBDdXJyZW50 IHN0cmluZydzIHNpemUuICovCiAgaW50IHNlYXJjaF9kaXJlY3Rpb247CQkvKiAxIG9yIC0xICov CiAgaW50IHNlYXJjaF9lbmQ7CQkvKiBGaXJzdCBwb3NpdGlvbiB0byBub3QgdHJ5LiAqLwp9OwoK CmVudW0gcnhfZ2V0X2J1cnN0X3JldHVybgp7CiAgcnhfZ2V0X2J1cnN0X2NvbnRpbnVhdGlvbiwK ICByeF9nZXRfYnVyc3RfZXJyb3IsCiAgcnhfZ2V0X2J1cnN0X29rLAogIHJ4X2dldF9idXJzdF9u b19tb3JlCn07CgoKLyogQSBjYWxsIHRvIGdldCBidXJzdCBzaG91bGQgbWFrZSBQT1MgdmFsaWQu ICBJdCBtaWdodCBiZSBpbnZhbGlkCiAqIGlmIHRoZSBTVFJJTkcgZmllbGQgZG9lc24ndCBwb2lu dCB0byBhIGJ1cnN0IHRoYXQgYWN0dWFsbHkKICogY29udGFpbnMgUE9TLgogKgogKiBHRVRfQlVS U1Qgc2hvdWxkIHRha2UgYSBjbHVlIGZyb20gU0VBUkNIX0RJUkVDVElPTiAoMSBvciAtMSkgYXMg dG8KICogd2hldGhlciBvciBub3QgdG8gcGFkIHRvIHRoZSBsZWZ0LiAgUGFkZGluZyB0byB0aGUg cmlnaHQgaXMgYWx3YXlzCiAqIGFwcHJvcHJpYXRlLCBidXQgbmVlZCBub3QgZ28gcGFzdCB0aGUg cG9pbnQgaW5kaWNhdGVkIGJ5IFNUT1AuCiAqCiAqIElmIGEgY29udGludWF0aW9uIGlzIHJldHVy bmVkLCB0aGVuIHRoZSByZWVudGVyaW5nIGNhbGwgdG8KICogYSBzZWFyY2ggZnVuY3Rpb24gd2ls bCByZXRyeSB0aGUgZ2V0X2J1cnN0LgogKi8KCiNpZmRlZiBfX1NURENfXwp0eXBlZGVmIGVudW0g cnhfZ2V0X2J1cnN0X3JldHVybgogICgqcnhfZ2V0X2J1cnN0X2ZuKSAoc3RydWN0IHJ4X3N0cmlu Z19wb3NpdGlvbiAqIHBvcywKCQkgICAgICB2b2lkICogYXBwX2Nsb3N1cmUsCgkJICAgICAgaW50 IHN0b3ApOwoJCQkJCSAgICAgICAKI2Vsc2UKdHlwZWRlZiBlbnVtIHJ4X2dldF9idXJzdF9yZXR1 cm4gKCpyeF9nZXRfYnVyc3RfZm4pICgpOwojZW5kaWYKCgplbnVtIHJ4X2JhY2tfY2hlY2tfcmV0 dXJuCnsKICByeF9iYWNrX2NoZWNrX2NvbnRpbnVhdGlvbiwKICByeF9iYWNrX2NoZWNrX2Vycm9y LAogIHJ4X2JhY2tfY2hlY2tfcGFzcywKICByeF9iYWNrX2NoZWNrX2ZhaWwKfTsKCi8qIEJhY2tf Y2hlY2sgc2hvdWxkIGFkdmFuY2UgdGhlIHBvc2l0aW9uIGl0IGlzIHBhc3NlZCAKICogb3ZlciBy cGFyZW4gLSBscGFyZW4gY2hhcmFjdGVycyBhbmQgcmV0dXJuIHBhc3MgaWZmCiAqIHRoZSBjaGFy YWN0ZXJzIHN0YXJ0aW5nIGF0IFBPUyBtYXRjaCB0aG9zZSBpbmRleGVkCiAqIGJ5IFtMUEFSRU4u LlJQQVJFTl0uCiAqCiAqIElmIGEgY29udGludWF0aW9uIGlzIHJldHVybmVkLCB0aGVuIHRoZSBy ZWVudGVyaW5nIGNhbGwgdG8KICogYSBzZWFyY2ggZnVuY3Rpb24gd2lsbCByZXRyeSB0aGUgYmFj a19jaGVjay4KICovCgojaWZkZWYgX19TVERDX18KdHlwZWRlZiBlbnVtIHJ4X2JhY2tfY2hlY2tf cmV0dXJuCiAgKCpyeF9iYWNrX2NoZWNrX2ZuKSAoc3RydWN0IHJ4X3N0cmluZ19wb3NpdGlvbiAq IHBvcywKCQkgICAgICAgaW50IGxwYXJlbiwKCQkgICAgICAgaW50IHJwYXJlbiwKCQkgICAgICAg dW5zaWduZWQgY2hhciAqIHRyYW5zbGF0ZSwKCQkgICAgICAgdm9pZCAqIGFwcF9jbG9zdXJlLAoJ CSAgICAgICBpbnQgc3RvcCk7CgkJCQkJICAgICAgIAojZWxzZQp0eXBlZGVmIGVudW0gcnhfYmFj a19jaGVja19yZXR1cm4gKCpyeF9iYWNrX2NoZWNrX2ZuKSAoKTsKI2VuZGlmCgoKCgovKiBBIGNh bGwgdG8gZmV0Y2hfY2hhciBzaG91bGQgcmV0dXJuIHRoZSBjaGFyYWN0ZXIgYXQgUE9TIG9yIFBP UyArIDEuCiAqIFJldHVybmluZyBjb250aW51YXRpb25zIGhlcmUgaXNuJ3Qgc3VwcG9ydGVkLiAg T0ZGU0VUIGlzIGVpdGhlciAwIG9yIDEKICogYW5kIGluZGljYXRlcyB3aGljaCBjaGFyYWN0ZXJz IGlzIGRlc2lyZWQuCiAqLwoKI2lmZGVmIF9fU1REQ19fCnR5cGVkZWYgaW50ICgqcnhfZmV0Y2hf Y2hhcl9mbikgKHN0cnVjdCByeF9zdHJpbmdfcG9zaXRpb24gKiBwb3MsCgkJCQkgaW50IG9mZnNl dCwKCQkJCSB2b2lkICogYXBwX2Nsb3N1cmUsCgkJCQkgaW50IHN0b3ApOwojZWxzZQp0eXBlZGVm IGludCAoKnJ4X2ZldGNoX2NoYXJfZm4pICgpOwojZW5kaWYKCgplbnVtIHJ4X3NlYXJjaF9yZXR1 cm4KewogIHJ4X3NlYXJjaF9jb250aW51YXRpb24gPSAtNCwKICByeF9zZWFyY2hfZXJyb3IgPSAt MywKICByeF9zZWFyY2hfc29mdF9mYWlsID0gLTIsCS8qIGZhaWxlZCBieSBydW5uaW5nIG91dCBv ZiBzdHJpbmcgKi8KICByeF9zZWFyY2hfZmFpbCA9IC0xCQkvKiBmYWlsZWQgb25seSBieSByZWFj aGluZyBmYWlsdXJlIHN0YXRlcyAqLwogIC8qIHJldHVybiB2YWx1ZXMgPj0gMCBpbmRpY2F0ZSB0 aGUgcG9zaXRpb24gb2YgYSBzdWNjZXNzZnVsIG1hdGNoICovCn07CgoKCgoMCgovKiByZWdleC5o CiAqIAogKiBUaGUgcmVtYWluaW5nIGRlY2xhcmF0aW9ucyByZXBsYWNlIHJlZ2V4LmguCiAqLwoK LyogVGhpcyBpcyBhbiBhcnJheSBvZiBlcnJvciBtZXNzYWdlcyBjb3JyZXNwb25kaW5nIHRvIHRo ZSBlcnJvciBjb2Rlcy4KICovCmV4dGVybiBfX2NvbnN0X18gY2hhciAqcmVfZXJyb3JfbXNnW107 CgovKiBJZiBhbnkgZXJyb3IgY29kZXMgYXJlIHJlbW92ZWQsIGNoYW5nZWQsIG9yIGFkZGVkLCB1 cGRhdGUgdGhlCiAgIGByZV9lcnJvcl9tc2cnIHRhYmxlIGluIHJlZ2V4LmMuICAqLwp0eXBlZGVm IGVudW0KewogIFJFR19OT0VSUk9SID0gMCwJLyogU3VjY2Vzcy4gICovCiAgUkVHX05PTUFUQ0gs CQkvKiBEaWRuJ3QgZmluZCBhIG1hdGNoIChmb3IgcmVnZXhlYykuICAqLwoKICAvKiBQT1NJWCBy ZWdjb21wIHJldHVybiBlcnJvciBjb2Rlcy4gIChJbiB0aGUgb3JkZXIgbGlzdGVkIGluIHRoZQog ICAgIHN0YW5kYXJkLikgICovCiAgUkVHX0JBRFBBVCwJCS8qIEludmFsaWQgcGF0dGVybi4gICov CiAgUkVHX0VDT0xMQVRFLAkJLyogTm90IGltcGxlbWVudGVkLiAgKi8KICBSRUdfRUNUWVBFLAkJ LyogSW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MgbmFtZS4gICovCiAgUkVHX0VFU0NBUEUsCQkvKiBU cmFpbGluZyBiYWNrc2xhc2guICAqLwogIFJFR19FU1VCUkVHLAkJLyogSW52YWxpZCBiYWNrIHJl ZmVyZW5jZS4gICovCiAgUkVHX0VCUkFDSywJCS8qIFVubWF0Y2hlZCBsZWZ0IGJyYWNrZXQuICAq LwogIFJFR19FUEFSRU4sCQkvKiBQYXJlbnRoZXNpcyBpbWJhbGFuY2UuICAqLyAKICBSRUdfRUJS QUNFLAkJLyogVW5tYXRjaGVkIFx7LiAgKi8KICBSRUdfQkFEQlIsCQkvKiBJbnZhbGlkIGNvbnRl bnRzIG9mIFx7XH0uICAqLwogIFJFR19FUkFOR0UsCQkvKiBJbnZhbGlkIHJhbmdlIGVuZC4gICov CiAgUkVHX0VTUEFDRSwJCS8qIFJhbiBvdXQgb2YgbWVtb3J5LiAgKi8KICBSRUdfQkFEUlBULAkJ LyogTm8gcHJlY2VkaW5nIHJlIGZvciByZXBldGl0aW9uIG9wLiAgKi8KCiAgLyogRXJyb3IgY29k ZXMgd2UndmUgYWRkZWQuICAqLwogIFJFR19FRU5ELAkJLyogUHJlbWF0dXJlIGVuZC4gICovCiAg UkVHX0VTSVpFLAkJLyogQ29tcGlsZWQgcGF0dGVybiBiaWdnZXIgdGhhbiAyXjE2IGJ5dGVzLiAg Ki8KICBSRUdfRVJQQVJFTgkJLyogVW5tYXRjaGVkICkgb3IgXCk7IG5vdCByZXR1cm5lZCBmcm9t IHJlZ2NvbXAuICAqLwp9IHJlZ19lcnJjb2RlX3Q7CgovKiBUaGUgcmVnZXguYyBzdXBwb3J0LCBh cyBhIGNsaWVudCBvZiByeCwgZGVmaW5lcyBhIHNldCBvZiBwb3NzaWJsZQogKiBzaWRlIGVmZmVj dHMgdGhhdCBjYW4gYmUgYWRkZWQgdG8gdGhlIGVkZ2UgbGFibGVzIG9mIG5mYSBlZGdlcy4KICog SGVyZSBpcyB0aGUgbGlzdCBvZiBzaWRlZiBlZmZlY3RzIGluIHVzZS4KICovCgplbnVtIHJlX3Np ZGVfZWZmZWN0cwp7CiNkZWZpbmUgUlhfV0FOVF9TRV9ERUZTIDEKI3VuZGVmIFJYX0RFRl9TRQoj dW5kZWYgUlhfREVGX0NQTFhfU0UKI2RlZmluZSBSWF9ERUZfU0UoSURFTSwgTkFNRSwgVkFMVUUp CSAgICAgIE5BTUUgVkFMVUUsCiNkZWZpbmUgUlhfREVGX0NQTFhfU0UoSURFTSwgTkFNRSwgVkFM VUUpICAgICBOQU1FIFZBTFVFLAojaW5jbHVkZSAicnguaCIKI3VuZGVmIFJYX0RFRl9TRQojdW5k ZWYgUlhfREVGX0NQTFhfU0UKI3VuZGVmIFJYX1dBTlRfU0VfREVGUwogICByZV9mbG9vZ2xlX2Zs YXAgPSA2NTUzMwp9OwoKLyogVGhlc2UgaG9sZCBwYXJhbWF0ZXJzIGZvciB0aGUga2luZHMgb2Yg c2lkZSBlZmZlY3RzIHRoYXQgYXJlIHBvc3NpYmxlCiAqIGluIHRoZSBzdXBwb3J0ZWQgcGF0dGVy biBsYW5ndWFnZXMuICBUaGVzZSBpbmNsdWRlIHRoaW5ncyBsaWtlIHRoZSAKICogbnVtZXJpYyBi b3VuZHMgb2Yge30gb3BlcmF0b3JzIGFuZCB0aGUgaW5kZXggb2YgcGFyZW4gcmVnaXN0ZXJzIGZv ciAKICogc3ViZXhwcmVzc2lvbiBtZWFzdXJlbWVudCBvciBiYWNrcmVmZXJlbmNpbmcuCiAqLwpz dHJ1Y3QgcmVfc2VfcGFyYW1zCnsKICBlbnVtIHJlX3NpZGVfZWZmZWN0cyBzZTsKICBpbnQgb3Ax OwogIGludCBvcDI7Cn07Cgp0eXBlZGVmIHVuc2lnbmVkIHJlZ19zeW50YXhfdDsKCnN0cnVjdCBy ZV9wYXR0ZXJuX2J1ZmZlcgp7CiAgc3RydWN0IHJ4IHJ4OwogIHJlZ19zeW50YXhfdCBzeW50YXg7 CQkvKiBTZWUgYmVsb3cgZm9yIHN5bnRheCBiaXQgZGVmaW5pdGlvbnMuICovCgogIHVuc2lnbmVk IGludCBub19zdWI6MTsJLyogSWYgc2V0LCBkb24ndCAgcmV0dXJuIHJlZ2lzdGVyIG9mZnNldHMu ICovCiAgdW5zaWduZWQgaW50IG5vdF9ib2w6MTsJLyogSWYgc2V0LCB0aGUgYW5jaG9ycyAoJ14n IGFuZCAnJCcpIGRvbid0ICovCiAgdW5zaWduZWQgaW50IG5vdF9lb2w6MTsJLyogICAgIG1hdGNo IGF0IHRoZSBlbmRzIG9mIHRoZSBzdHJpbmcuICAqLyAgCiAgdW5zaWduZWQgaW50IG5ld2xpbmVf YW5jaG9yOjE7LyogSWYgdHJ1ZSwgYW4gYW5jaG9yIGF0IGEgbmV3bGluZSBtYXRjaGVzLiovCiAg dW5zaWduZWQgaW50IGxlYXN0X3N1YnM6MTsJLyogSWYgc2V0LCBhbmQgcmV0dXJuaW5nIHJlZ2lz dGVycywgcmV0dXJuCgkJCQkgKiBhcyBmZXcgdmFsdWVzIGFzIHBvc3NpYmxlLiAgT25seSAKCQkJ CSAqIGJhY2tyZWZlcmVuY2VkIGdyb3VwcyBhbmQgZ3JvdXAgMCAodGhlIHdob2xlCgkJCQkgKiBt YXRjaCkgd2lsbCBiZSByZXR1cm5lZC4KCQkJCSAqLwoKICAvKiBJZiB0cnVlLCB0aGlzIHNheXMg dGhhdCB0aGUgbWF0Y2hlciBzaG91bGQga2VlcCByZWdpc3RlcnMgb24gaXRzCiAgICogYmFja3Ry YWNraW5nIHN0YWNrLiAgRm9yIG1hbnkgcGF0dGVybnMsIHdlIGNhbiBlYXNpbHkgZGV0ZXJtaW5l IHRoYXQKICAgKiB0aGlzIGlzbid0IG5lY2Vzc2FyeS4KICAgKi8KICB1bnNpZ25lZCBpbnQgbWF0 Y2hfcmVnc19vbl9zdGFjazoxOwogIHVuc2lnbmVkIGludCBzZWFyY2hfcmVnc19vbl9zdGFjazox OwoKICAvKiBpc19hbmNob3JlZCBhbmQgYmVnYnVmX29ubHkgYXJlIGZpbGxlZCBpbiBieSByeF9j b21waWxlLiAqLwogIHVuc2lnbmVkIGludCBpc19hbmNob3JlZDoxOwkvKiBBbmNob3JkZWQgYnkg Xj8gKi8KICB1bnNpZ25lZCBpbnQgYmVnYnVmX29ubHk6MTsJLyogQW5jaG9yZWQgdG8gY2hhciBw b3NpdGlvbiAwPyAqLwoKICAKICAvKiBJZiBSRUdTX1VOQUxMT0NBVEVELCBhbGxvY2F0ZSBzcGFj ZSBpbiB0aGUgYHJlZ3MnIHN0cnVjdHVyZQogICAqIGZvciBgbWF4IChSRV9OUkVHUywgcmVfbnN1 YiArIDEpJyBncm91cHMuCiAgICogSWYgUkVHU19SRUFMTE9DQVRFLCByZWFsbG9jYXRlIHNwYWNl IGlmIG5lY2Vzc2FyeS4KICAgKiBJZiBSRUdTX0ZJWEVELCB1c2Ugd2hhdCdzIHRoZXJlLiAgCiAg ICovCiNkZWZpbmUgUkVHU19VTkFMTE9DQVRFRCAwCiNkZWZpbmUgUkVHU19SRUFMTE9DQVRFIDEK I2RlZmluZSBSRUdTX0ZJWEVEIDIKICB1bnNpZ25lZCBpbnQgcmVnc19hbGxvY2F0ZWQ6MjsKCiAg CiAgLyogRWl0aGVyIGEgdHJhbnNsYXRlIHRhYmxlIHRvIGFwcGx5IHRvIGFsbCBjaGFyYWN0ZXJz IGJlZm9yZQogICAqIGNvbXBhcmluZyB0aGVtLCBvciB6ZXJvIGZvciBubyB0cmFuc2xhdGlvbi4g IFRoZSB0cmFuc2xhdGlvbgogICAqIGlzIGFwcGxpZWQgdG8gYSBwYXR0ZXJuIHdoZW4gaXQgaXMg Y29tcGlsZWQgYW5kIHRvIGEgc3RyaW5nCiAgICogd2hlbiBpdCBpcyBtYXRjaGVkLgogICAqLwog IHVuc2lnbmVkIGNoYXIgKiB0cmFuc2xhdGU7CgogIC8qIElmIHRoaXMgaXMgYSB2YWxpZCBwb2lu dGVyLCBpdCB0ZWxscyByeCBub3QgdG8gc3RvcmUgdGhlIGV4dGVudHMgb2YgCiAgICogY2VydGFp biBzdWJleHByZXNzaW9ucyAodGhvc2UgY29ycmVzcG9uZGluZyB0byBub24temVybyBlbnRyaWVz KS4KICAgKiBQYXNzaW5nIDB4MSBpcyB0aGUgc2FtZSBhcyBwYXNzaW5nIGFuIGFycmF5IG9mIGFs bCBvbmVzLiAgUGFzc2luZyAweDAKICAgKiBpcyB0aGUgc2FtZSBhcyBwYXNzaW5nIGFuIGFycmF5 IG9mIGFsbCB6ZXJvcy4KICAgKiBUaGUgYXJyYXkgc2hvdWxkIGNvbnRhaW4gYXMgbWFueSBlbnRy aWVzIGFzIHRoZWlyIGFyZSBzdWJleHBzIGluIHRoZSAKICAgKiByZWdleHAuCiAgICoKICAgKiBG b3IgUE9TSVggY29tcGF0YWJpbGl0eSwgd2hlbiB1c2luZyByZWdjb21wIGFuZCByZWdleGVjIHRo aXMgZmllbGQKICAgKiBpcyB6ZXJvZWQgYW5kIGlnbm9yZWQuCiAgICovCiAgY2hhciAqIHN5bnRh eF9wYXJlbnM7CgoJLyogTnVtYmVyIG9mIHN1YmV4cHJlc3Npb25zIGZvdW5kIGJ5IHRoZSBjb21w aWxlci4gICovCiAgc2l6ZV90IHJlX25zdWI7CgogIHZvaWQgKiBidWZmZXI7CQkvKiBNYWxsb2Nl ZCBtZW1vcnkgZm9yIHRoZSBuZmEuICovCiAgdW5zaWduZWQgbG9uZyBhbGxvY2F0ZWQ7CS8qIFNp emUgb2YgdGhhdCBtZW1vcnkuICovCgogIC8qIFBvaW50ZXIgdG8gYSBmYXN0bWFwLCBpZiBhbnks IG90aGVyd2lzZSB6ZXJvLiAgcmVfc2VhcmNoIHVzZXMKICAgKiB0aGUgZmFzdG1hcCwgaWYgdGhl cmUgaXMgb25lLCB0byBza2lwIG92ZXIgaW1wb3NzaWJsZQogICAqIHN0YXJ0aW5nIHBvaW50cyBm b3IgbWF0Y2hlcy4gICovCiAgY2hhciAqZmFzdG1hcDsKCiAgdW5zaWduZWQgaW50IGZhc3RtYXBf YWNjdXJhdGU6MTsgLyogVGhlc2UgdGhyZWUgYXJlIGludGVybmFsLiAqLwogIHVuc2lnbmVkIGlu dCBjYW5fbWF0Y2hfZW1wdHk6MTsgIAogIHN0cnVjdCByeF9uZmFfc3RhdGUgKiBzdGFydDsJLyog VGhlIG5mYSBzdGFydGluZyBzdGF0ZS4gKi8KCiAgLyogVGhpcyBpcyB0aGUgbGlzdCBvZiBpdGVy YXRvciBib3VuZHMgZm9yIHtsbyxoaX0gY29uc3RydWN0cy4KICAgKiBUaGUgbWVtb3J5IHBvaW50 ZWQgdG8gaXMgcGFydCBvZiB0aGUgcngtPmJ1ZmZlci4KICAgKi8KICBzdHJ1Y3QgcmVfc2VfcGFy YW1zICpzZV9wYXJhbXM7CgogIC8qIFRoaXMgaXMgYSBiaXRzZXQgcmVwcmVzZW50YXRpb24gb2Yg dGhlIGZhc3RtYXAuCiAgICogVGhpcyBpcyBhIHRydWUgZmFzdG1hcCB0aGF0IGFscmVhZHkgdGFr ZXMgdGhlIHRyYW5zbGF0ZQogICAqIHRhYmxlIGludG8gYWNjb3VudC4KICAgKi8KICByeF9CaXRz ZXQgZmFzdHNldDsKfTsKCi8qIFR5cGUgZm9yIGJ5dGUgb2Zmc2V0cyB3aXRoaW4gdGhlIHN0cmlu Zy4gIFBPU0lYIG1hbmRhdGVzIHRoaXMuICAqLwp0eXBlZGVmIGludCByZWdvZmZfdDsKCi8qIFRo aXMgaXMgdGhlIHN0cnVjdHVyZSB3ZSBzdG9yZSByZWdpc3RlciBtYXRjaCBkYXRhIGluLiAgU2Vl CiAgIHJlZ2V4LnRleGluZm8gZm9yIGEgZnVsbCBkZXNjcmlwdGlvbiBvZiB3aGF0IHJlZ2lzdGVy cyBtYXRjaC4gICovCnN0cnVjdCByZV9yZWdpc3RlcnMKewogIHVuc2lnbmVkIG51bV9yZWdzOwog IHJlZ29mZl90ICpzdGFydDsKICByZWdvZmZfdCAqZW5kOwp9OwoKdHlwZWRlZiBzdHJ1Y3QgcmVf cGF0dGVybl9idWZmZXIgcmVnZXhfdDsKCi8qIFBPU0lYIHNwZWNpZmljYXRpb24gZm9yIHJlZ2lz dGVycy4gIEFzaWRlIGZyb20gdGhlIGRpZmZlcmVudCBuYW1lcyB0aGFuCiAgIGByZV9yZWdpc3Rl cnMnLCBQT1NJWCB1c2VzIGFuIGFycmF5IG9mIHN0cnVjdHVyZXMsIGluc3RlYWQgb2YgYQogICBz dHJ1Y3R1cmUgb2YgYXJyYXlzLiAgKi8KdHlwZWRlZiBzdHJ1Y3QKewogIHJlZ29mZl90IHJtX3Nv OyAgLyogQnl0ZSBvZmZzZXQgZnJvbSBzdHJpbmcncyBzdGFydCB0byBzdWJzdHJpbmcncyBzdGFy dC4gICovCiAgcmVnb2ZmX3Qgcm1fZW87ICAvKiBCeXRlIG9mZnNldCBmcm9tIHN0cmluZydzIHN0 YXJ0IHRvIHN1YnN0cmluZydzIGVuZC4gICovCn0gcmVnbWF0Y2hfdDsKCgwKLyogVGhlIGZvbGxv d2luZyBiaXRzIGFyZSB1c2VkIHRvIGRldGVybWluZSB0aGUgcmVnZXhwIHN5bnRheCB3ZQogICBy ZWNvZ25pemUuICBUaGUgc2V0L25vdC1zZXQgbWVhbmluZ3MgYXJlIGNob3NlbiBzbyB0aGF0IEVt YWNzIHN5bnRheAogICByZW1haW5zIHRoZSB2YWx1ZSAwLiAgVGhlIGJpdHMgYXJlIGdpdmVuIGlu IGFscGhhYmV0aWNhbCBvcmRlciwgYW5kCiAgIHRoZSBkZWZpbml0aW9ucyBzaGlmdGVkIGJ5IG9u ZSBmcm9tIHRoZSBwcmV2aW91cyBiaXQ7IHRodXMsIHdoZW4gd2UKICAgYWRkIG9yIHJlbW92ZSBh IGJpdCwgb25seSBvbmUgb3RoZXIgZGVmaW5pdGlvbiBuZWVkIGNoYW5nZS4gICovCgovKiBJZiB0 aGlzIGJpdCBpcyBub3Qgc2V0LCB0aGVuIFwgaW5zaWRlIGEgYnJhY2tldCBleHByZXNzaW9uIGlz IGxpdGVyYWwuCiAgIElmIHNldCwgdGhlbiBzdWNoIGEgXCBxdW90ZXMgdGhlIGZvbGxvd2luZyBj aGFyYWN0ZXIuICAqLwojZGVmaW5lIFJFX0JBQ0tTTEFTSF9FU0NBUEVfSU5fTElTVFMgKDEpCgov KiBJZiB0aGlzIGJpdCBpcyBub3Qgc2V0LCB0aGVuICsgYW5kID8gYXJlIG9wZXJhdG9ycywgYW5k IFwrIGFuZCBcPyBhcmUKICAgICBsaXRlcmFscy4gCiAgIElmIHNldCwgdGhlbiBcKyBhbmQgXD8g YXJlIG9wZXJhdG9ycyBhbmQgKyBhbmQgPyBhcmUgbGl0ZXJhbHMuICAqLwojZGVmaW5lIFJFX0JL X1BMVVNfUU0gKFJFX0JBQ0tTTEFTSF9FU0NBUEVfSU5fTElTVFMgPDwgMSkKCi8qIElmIHRoaXMg Yml0IGlzIHNldCwgdGhlbiBjaGFyYWN0ZXIgY2xhc3NlcyBhcmUgc3VwcG9ydGVkLiAgVGhleSBh cmU6CiAgICAgWzphbHBoYTpdLCBbOnVwcGVyOl0sIFs6bG93ZXI6XSwgIFs6ZGlnaXQ6XSwgWzph bG51bTpdLCBbOnhkaWdpdDpdLAogICAgIFs6c3BhY2U6XSwgWzpwcmludDpdLCBbOnB1bmN0Ol0s IFs6Z3JhcGg6XSwgYW5kIFs6Y250cmw6XS4KICAgSWYgbm90IHNldCwgdGhlbiBjaGFyYWN0ZXIg Y2xhc3NlcyBhcmUgbm90IHN1cHBvcnRlZC4gICovCiNkZWZpbmUgUkVfQ0hBUl9DTEFTU0VTIChS RV9CS19QTFVTX1FNIDw8IDEpCgovKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gXiBhbmQgJCBh cmUgYWx3YXlzIGFuY2hvcnMgKG91dHNpZGUgYnJhY2tldAogICAgIGV4cHJlc3Npb25zLCBvZiBj b3Vyc2UpLgogICBJZiB0aGlzIGJpdCBpcyBub3Qgc2V0LCB0aGVuIGl0IGRlcGVuZHM6CiAgICAg ICAgXiAgaXMgYW4gYW5jaG9yIGlmIGl0IGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSByZWd1bGFy CiAgICAgICAgICAgZXhwcmVzc2lvbiBvciBhZnRlciBhbiBvcGVuLWdyb3VwIG9yIGFuIGFsdGVy bmF0aW9uIG9wZXJhdG9yOwogICAgICAgICQgIGlzIGFuIGFuY2hvciBpZiBpdCBpcyBhdCB0aGUg ZW5kIG9mIGEgcmVndWxhciBleHByZXNzaW9uLCBvcgogICAgICAgICAgIGJlZm9yZSBhIGNsb3Nl LWdyb3VwIG9yIGFuIGFsdGVybmF0aW9uIG9wZXJhdG9yLiAgCgogICBUaGlzIGJpdCBjb3VsZCBi ZSAocmUpY29tYmluZWQgd2l0aCBSRV9DT05URVhUX0lOREVQX09QUywgYmVjYXVzZQogICBQT1NJ WCBkcmFmdCAxMS4yIHNheXMgdGhhdCAqIGV0Yy4gaW4gbGVhZGluZyBwb3NpdGlvbnMgaXMgdW5k ZWZpbmVkLgogICBXZSBhbHJlYWR5IGltcGxlbWVudGVkIGEgcHJldmlvdXMgZHJhZnQgd2hpY2gg bWFkZSB0aG9zZSBjb25zdHJ1Y3RzCiAgIGludmFsaWQsIHRob3VnaCwgc28gd2UgaGF2ZW4ndCBj aGFuZ2VkIHRoZSBjb2RlIGJhY2suICAqLwojZGVmaW5lIFJFX0NPTlRFWFRfSU5ERVBfQU5DSE9S UyAoUkVfQ0hBUl9DTEFTU0VTIDw8IDEpCgovKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gc3Bl Y2lhbCBjaGFyYWN0ZXJzIGFyZSBhbHdheXMgc3BlY2lhbAogICAgIHJlZ2FyZGxlc3Mgb2Ygd2hl cmUgdGhleSBhcmUgaW4gdGhlIHBhdHRlcm4uCiAgIElmIHRoaXMgYml0IGlzIG5vdCBzZXQsIHRo ZW4gc3BlY2lhbCBjaGFyYWN0ZXJzIGFyZSBzcGVjaWFsIG9ubHkgaW4KICAgICBzb21lIGNvbnRl eHRzOyBvdGhlcndpc2UgdGhleSBhcmUgb3JkaW5hcnkuICBTcGVjaWZpY2FsbHksIAogICAgICog KyA/IGFuZCBpbnRlcnZhbHMgYXJlIG9ubHkgc3BlY2lhbCB3aGVuIG5vdCBhZnRlciB0aGUgYmVn aW5uaW5nLAogICAgIG9wZW4tZ3JvdXAsIG9yIGFsdGVybmF0aW9uIG9wZXJhdG9yLiAgKi8KI2Rl ZmluZSBSRV9DT05URVhUX0lOREVQX09QUyAoUkVfQ09OVEVYVF9JTkRFUF9BTkNIT1JTIDw8IDEp CgovKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gKiwgKywgPywgYW5kIHsgY2Fubm90IGJlIGZp cnN0IGluIGFuIHJlIG9yCiAgICAgaW1tZWRpYXRlbHkgYWZ0ZXIgYW4gYWx0ZXJuYXRpb24gb3Ig YmVnaW4tZ3JvdXAgb3BlcmF0b3IuICAqLwojZGVmaW5lIFJFX0NPTlRFWFRfSU5WQUxJRF9PUFMg KFJFX0NPTlRFWFRfSU5ERVBfT1BTIDw8IDEpCgovKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4g LiBtYXRjaGVzIG5ld2xpbmUuCiAgIElmIG5vdCBzZXQsIHRoZW4gaXQgZG9lc24ndC4gICovCiNk ZWZpbmUgUkVfRE9UX05FV0xJTkUgKFJFX0NPTlRFWFRfSU5WQUxJRF9PUFMgPDwgMSkKCi8qIElm IHRoaXMgYml0IGlzIHNldCwgdGhlbiAuIGRvZXNuJ3QgbWF0Y2ggTlVMLgogICBJZiBub3Qgc2V0 LCB0aGVuIGl0IGRvZXMuICAqLwojZGVmaW5lIFJFX0RPVF9OT1RfTlVMTCAoUkVfRE9UX05FV0xJ TkUgPDwgMSkKCi8qIElmIHRoaXMgYml0IGlzIHNldCwgbm9ubWF0Y2hpbmcgbGlzdHMgW14uLi5d IGRvIG5vdCBtYXRjaCBuZXdsaW5lLgogICBJZiBub3Qgc2V0LCB0aGV5IGRvLiAgKi8KI2RlZmlu ZSBSRV9IQVRfTElTVFNfTk9UX05FV0xJTkUgKFJFX0RPVF9OT1RfTlVMTCA8PCAxKQoKLyogSWYg dGhpcyBiaXQgaXMgc2V0LCBlaXRoZXIgXHsuLi5cfSBvciB7Li4ufSBkZWZpbmVzIGFuCiAgICAg aW50ZXJ2YWwsIGRlcGVuZGluZyBvbiBSRV9OT19CS19CUkFDRVMuIAogICBJZiBub3Qgc2V0LCBc eywgXH0sIHssIGFuZCB9IGFyZSBsaXRlcmFscy4gICovCiNkZWZpbmUgUkVfSU5URVJWQUxTIChS RV9IQVRfTElTVFNfTk9UX05FV0xJTkUgPDwgMSkKCi8qIElmIHRoaXMgYml0IGlzIHNldCwgKywg PyBhbmQgfCBhcmVuJ3QgcmVjb2duaXplZCBhcyBvcGVyYXRvcnMuCiAgIElmIG5vdCBzZXQsIHRo ZXkgYXJlLiAgKi8KI2RlZmluZSBSRV9MSU1JVEVEX09QUyAoUkVfSU5URVJWQUxTIDw8IDEpCgov KiBJZiB0aGlzIGJpdCBpcyBzZXQsIG5ld2xpbmUgaXMgYW4gYWx0ZXJuYXRpb24gb3BlcmF0b3Iu CiAgIElmIG5vdCBzZXQsIG5ld2xpbmUgaXMgbGl0ZXJhbC4gICovCiNkZWZpbmUgUkVfTkVXTElO RV9BTFQgKFJFX0xJTUlURURfT1BTIDw8IDEpCgovKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4g YHsuLi59JyBkZWZpbmVzIGFuIGludGVydmFsLCBhbmQgXHsgYW5kIFx9CiAgICAgYXJlIGxpdGVy YWxzLgogIElmIG5vdCBzZXQsIHRoZW4gYFx7Li4uXH0nIGRlZmluZXMgYW4gaW50ZXJ2YWwuICAq LwojZGVmaW5lIFJFX05PX0JLX0JSQUNFUyAoUkVfTkVXTElORV9BTFQgPDwgMSkKCi8qIElmIHRo aXMgYml0IGlzIHNldCwgKC4uLikgZGVmaW5lcyBhIGdyb3VwLCBhbmQgXCggYW5kIFwpIGFyZSBs aXRlcmFscy4KICAgSWYgbm90IHNldCwgXCguLi5cKSBkZWZpbmVzIGEgZ3JvdXAsIGFuZCAoIGFu ZCApIGFyZSBsaXRlcmFscy4gICovCiNkZWZpbmUgUkVfTk9fQktfUEFSRU5TIChSRV9OT19CS19C UkFDRVMgPDwgMSkKCi8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBcPGRpZ2l0PiBtYXRjaGVz IDxkaWdpdD4uCiAgIElmIG5vdCBzZXQsIHRoZW4gXDxkaWdpdD4gaXMgYSBiYWNrLXJlZmVyZW5j ZS4gICovCiNkZWZpbmUgUkVfTk9fQktfUkVGUyAoUkVfTk9fQktfUEFSRU5TIDw8IDEpCgovKiBJ ZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gfCBpcyBhbiBhbHRlcm5hdGlvbiBvcGVyYXRvciwgYW5k IFx8IGlzIGxpdGVyYWwuIAogICBJZiBub3Qgc2V0LCB0aGVuIFx8IGlzIGFuIGFsdGVybmF0aW9u IG9wZXJhdG9yLCBhbmQgfCBpcyBsaXRlcmFsLiAgKi8KI2RlZmluZSBSRV9OT19CS19WQkFSIChS RV9OT19CS19SRUZTIDw8IDEpCgovKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gYW4gZW5kaW5n IHJhbmdlIHBvaW50IGNvbGxhdGluZyBoaWdoZXIKICAgICB0aGFuIHRoZSBzdGFydGluZyByYW5n ZSBwb2ludCwgYXMgaW4gW3otYV0sIGlzIGludmFsaWQuCiAgIElmIG5vdCBzZXQsIHRoZW4gd2hl biBlbmRpbmcgcmFuZ2UgcG9pbnQgY29sbGF0ZXMgaGlnaGVyIHRoYW4gdGhlCiAgICAgc3RhcnRp bmcgcmFuZ2UgcG9pbnQsIHRoZSByYW5nZSBpcyBpZ25vcmVkLiAgKi8KI2RlZmluZSBSRV9OT19F TVBUWV9SQU5HRVMgKFJFX05PX0JLX1ZCQVIgPDwgMSkKCi8qIElmIHRoaXMgYml0IGlzIHNldCwg dGhlbiBhbiB1bm1hdGNoZWQgKSBpcyBvcmRpbmFyeS4KICAgSWYgbm90IHNldCwgdGhlbiBhbiB1 bm1hdGNoZWQgKSBpcyBpbnZhbGlkLiAgKi8KI2RlZmluZSBSRV9VTk1BVENIRURfUklHSFRfUEFS RU5fT1JEIChSRV9OT19FTVBUWV9SQU5HRVMgPDwgMSkKCi8qIFRoaXMgZ2xvYmFsIHZhcmlhYmxl IGRlZmluZXMgdGhlIHBhcnRpY3VsYXIgcmVnZXhwIHN5bnRheCB0byB1c2UgKGZvcgogICBzb21l IGludGVyZmFjZXMpLiAgV2hlbiBhIHJlZ2V4cCBpcyBjb21waWxlZCwgdGhlIHN5bnRheCB1c2Vk IGlzCiAgIHN0b3JlZCBpbiB0aGUgcGF0dGVybiBidWZmZXIsIHNvIGNoYW5naW5nIHRoaXMgZG9l cyBub3QgYWZmZWN0CiAgIGFscmVhZHktY29tcGlsZWQgcmVnZXhwcy4gICovCmV4dGVybiByZWdf c3ludGF4X3QgcmVfc3ludGF4X29wdGlvbnM7CgwKLyogRGVmaW5lIGNvbWJpbmF0aW9ucyBvZiB0 aGUgYWJvdmUgYml0cyBmb3IgdGhlIHN0YW5kYXJkIHBvc3NpYmlsaXRpZXMuCiAgIChUaGUgW1tb IGNvbW1lbnRzIGRlbGltaXQgd2hhdCBnZXRzIHB1dCBpbnRvIHRoZSBUZXhpbmZvIGZpbGUsIHNv CiAgIGRvbid0IGRlbGV0ZSB0aGVtISkgICovIAovKiBbW1tiZWdpbiBzeW50YXhlc11dXSAqLwoj ZGVmaW5lIFJFX1NZTlRBWF9FTUFDUyAwCgojZGVmaW5lIFJFX1NZTlRBWF9BV0sJCQkJCQkJXAog IChSRV9CQUNLU0xBU0hfRVNDQVBFX0lOX0xJU1RTIHwgUkVfRE9UX05PVF9OVUxMCQkJXAogICB8 IFJFX05PX0JLX1BBUkVOUyAgICAgICAgICAgIHwgUkVfTk9fQktfUkVGUwkJCQlcCiAgIHwgUkVf Tk9fQktfVkJBUiAgICAgICAgICAgICAgIHwgUkVfTk9fRU1QVFlfUkFOR0VTCQkJXAogICB8IFJF X1VOTUFUQ0hFRF9SSUdIVF9QQVJFTl9PUkQpCgojZGVmaW5lIFJFX1NZTlRBWF9QT1NJWF9BV0sg CQkJCQkJXAogIChSRV9TWU5UQVhfUE9TSVhfRVhURU5ERUQgfCBSRV9CQUNLU0xBU0hfRVNDQVBF X0lOX0xJU1RTKQoKI2RlZmluZSBSRV9TWU5UQVhfR1JFUAkJCQkJCQlcCiAgKFJFX0JLX1BMVVNf UU0gICAgICAgICAgICAgIHwgUkVfQ0hBUl9DTEFTU0VTCQkJCVwKICAgfCBSRV9IQVRfTElTVFNf Tk9UX05FV0xJTkUgfCBSRV9JTlRFUlZBTFMJCQkJXAogICB8IFJFX05FV0xJTkVfQUxUKQoKI2Rl ZmluZSBSRV9TWU5UQVhfRUdSRVAJCQkJCQkJXAogIChSRV9DSEFSX0NMQVNTRVMgICAgICAgIHwg UkVfQ09OVEVYVF9JTkRFUF9BTkNIT1JTCQkJXAogICB8IFJFX0NPTlRFWFRfSU5ERVBfT1BTIHwg UkVfSEFUX0xJU1RTX05PVF9ORVdMSU5FCQkJXAogICB8IFJFX05FV0xJTkVfQUxUICAgICAgIHwg UkVfTk9fQktfUEFSRU5TCQkJCVwKICAgfCBSRV9OT19CS19WQkFSKQoKI2RlZmluZSBSRV9TWU5U QVhfUE9TSVhfRUdSRVAJCQkJCQlcCiAgKFJFX1NZTlRBWF9FR1JFUCB8IFJFX0lOVEVSVkFMUyB8 IFJFX05PX0JLX0JSQUNFUykKCiNkZWZpbmUgUkVfU1lOVEFYX1NFRCBSRV9TWU5UQVhfUE9TSVhf QkFTSUMKCi8qIFN5bnRheCBiaXRzIGNvbW1vbiB0byBib3RoIGJhc2ljIGFuZCBleHRlbmRlZCBQ T1NJWCByZWdleCBzeW50YXguICAqLwojZGVmaW5lIF9SRV9TWU5UQVhfUE9TSVhfQ09NTU9OCQkJ CQkJXAogIChSRV9DSEFSX0NMQVNTRVMgfCBSRV9ET1RfTkVXTElORSAgICAgIHwgUkVfRE9UX05P VF9OVUxMCQlcCiAgIHwgUkVfSU5URVJWQUxTICB8IFJFX05PX0VNUFRZX1JBTkdFUykKCiNkZWZp bmUgUkVfU1lOVEFYX1BPU0lYX0JBU0lDCQkJCQkJXAogIChfUkVfU1lOVEFYX1BPU0lYX0NPTU1P TiB8IFJFX0JLX1BMVVNfUU0pCgovKiBEaWZmZXJzIGZyb20gLi4uX1BPU0lYX0JBU0lDIG9ubHkg aW4gdGhhdCBSRV9CS19QTFVTX1FNIGJlY29tZXMKICAgUkVfTElNSVRFRF9PUFMsIGkuZS4sIFw/ IFwrIFx8IGFyZSBub3QgcmVjb2duaXplZC4gIEFjdHVhbGx5LCB0aGlzCiAgIGlzbid0IG1pbmlt YWwsIHNpbmNlIG90aGVyIG9wZXJhdG9ycywgc3VjaCBhcyBcYCwgYXJlbid0IGRpc2FibGVkLiAg Ki8KI2RlZmluZSBSRV9TWU5UQVhfUE9TSVhfTUlOSU1BTF9CQVNJQwkJCQkJXAogIChfUkVfU1lO VEFYX1BPU0lYX0NPTU1PTiB8IFJFX0xJTUlURURfT1BTKQoKI2RlZmluZSBSRV9TWU5UQVhfUE9T SVhfRVhURU5ERUQJCQkJCVwKICAoX1JFX1NZTlRBWF9QT1NJWF9DT01NT04gfCBSRV9DT05URVhU X0lOREVQX0FOQ0hPUlMJCQlcCiAgIHwgUkVfQ09OVEVYVF9JTkRFUF9PUFMgIHwgUkVfTk9fQktf QlJBQ0VTCQkJCVwKICAgfCBSRV9OT19CS19QQVJFTlMgICAgICAgfCBSRV9OT19CS19WQkFSCQkJ CVwKICAgfCBSRV9VTk1BVENIRURfUklHSFRfUEFSRU5fT1JEKQoKLyogRGlmZmVycyBmcm9tIC4u Ll9QT1NJWF9FWFRFTkRFRCBpbiB0aGF0IFJFX0NPTlRFWFRfSU5WQUxJRF9PUFMKICAgcmVwbGFj ZXMgUkVfQ09OVEVYVF9JTkRFUF9PUFMgYW5kIFJFX05PX0JLX1JFRlMgaXMgYWRkZWQuICAqLwoj ZGVmaW5lIFJFX1NZTlRBWF9QT1NJWF9NSU5JTUFMX0VYVEVOREVECQkJCVwKICAoX1JFX1NZTlRB WF9QT1NJWF9DT01NT04gIHwgUkVfQ09OVEVYVF9JTkRFUF9BTkNIT1JTCQkJXAogICB8IFJFX0NP TlRFWFRfSU5WQUxJRF9PUFMgfCBSRV9OT19CS19CUkFDRVMJCQkJXAogICB8IFJFX05PX0JLX1BB UkVOUyAgICAgICAgfCBSRV9OT19CS19SRUZTCQkJCVwKICAgfCBSRV9OT19CS19WQkFSCSAgICB8 IFJFX1VOTUFUQ0hFRF9SSUdIVF9QQVJFTl9PUkQpCi8qIFtbW2VuZCBzeW50YXhlc11dXSAqLwoK LyogTWF4aW11bSBudW1iZXIgb2YgZHVwbGljYXRlcyBhbiBpbnRlcnZhbCBjYW4gYWxsb3cuICBT b21lIHN5c3RlbXMKICAgKGVycm9uZW91c2x5KSBkZWZpbmUgdGhpcyBpbiBvdGhlciBoZWFkZXIg ZmlsZXMsIGJ1dCB3ZSB3YW50IG91cgogICB2YWx1ZSwgc28gcmVtb3ZlIGFueSBwcmV2aW91cyBk ZWZpbmUuICAqLwojaWZkZWYgUkVfRFVQX01BWAojdW5kZWYgUkVfRFVQX01BWAojZW5kaWYKI2Rl ZmluZSBSRV9EVVBfTUFYICgoMSA8PCAxNSkgLSAxKSAKCgoKLyogUE9TSVggYGNmbGFncycgYml0 cyAoaS5lLiwgaW5mb3JtYXRpb24gZm9yIGByZWdjb21wJykuICAqLwoKLyogSWYgdGhpcyBiaXQg aXMgc2V0LCB0aGVuIHVzZSBleHRlbmRlZCByZWd1bGFyIGV4cHJlc3Npb24gc3ludGF4LgogICBJ ZiBub3Qgc2V0LCB0aGVuIHVzZSBiYXNpYyByZWd1bGFyIGV4cHJlc3Npb24gc3ludGF4LiAgKi8K I2RlZmluZSBSRUdfRVhURU5ERUQgMQoKLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIGlnbm9y ZSBjYXNlIHdoZW4gbWF0Y2hpbmcuCiAgIElmIG5vdCBzZXQsIHRoZW4gY2FzZSBpcyBzaWduaWZp Y2FudC4gICovCiNkZWZpbmUgUkVHX0lDQVNFIChSRUdfRVhURU5ERUQgPDwgMSkKIAovKiBJZiB0 aGlzIGJpdCBpcyBzZXQsIHRoZW4gYW5jaG9ycyBkbyBub3QgbWF0Y2ggYXQgbmV3bGluZQogICAg IGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZy4KICAgSWYgbm90IHNldCwgdGhlbiBhbmNob3JzIGRv IG1hdGNoIGF0IG5ld2xpbmVzLiAgKi8KI2RlZmluZSBSRUdfTkVXTElORSAoUkVHX0lDQVNFIDw8 IDEpCgovKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gcmVwb3J0IG9ubHkgc3VjY2VzcyBvciBm YWlsIGluIHJlZ2V4ZWMuCiAgIElmIG5vdCBzZXQsIHRoZW4gcmV0dXJucyBkaWZmZXIgYmV0d2Vl biBub3QgbWF0Y2hpbmcgYW5kIGVycm9ycy4gICovCiNkZWZpbmUgUkVHX05PU1VCIChSRUdfTkVX TElORSA8PCAxKQoKCi8qIFBPU0lYIGBlZmxhZ3MnIGJpdHMgKGkuZS4sIGluZm9ybWF0aW9uIGZv ciByZWdleGVjKS4gICovCgovKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gdGhlIGJlZ2lubmlu Zy1vZi1saW5lIG9wZXJhdG9yIGRvZXNuJ3QgbWF0Y2gKICAgICB0aGUgYmVnaW5uaW5nIG9mIHRo ZSBzdHJpbmcgKHByZXN1bWFibHkgYmVjYXVzZSBpdCdzIG5vdCB0aGUKICAgICBiZWdpbm5pbmcg b2YgYSBsaW5lKS4KICAgSWYgbm90IHNldCwgdGhlbiB0aGUgYmVnaW5uaW5nLW9mLWxpbmUgb3Bl cmF0b3IgZG9lcyBtYXRjaCB0aGUKICAgICBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZy4gICovCiNk ZWZpbmUgUkVHX05PVEJPTCAxCgovKiBMaWtlIFJFR19OT1RCT0wsIGV4Y2VwdCBmb3IgdGhlIGVu ZC1vZi1saW5lLiAgKi8KI2RlZmluZSBSRUdfTk9URU9MICgxIDw8IDEpCgovKiBJZiBgcmVnc19h bGxvY2F0ZWQnIGlzIFJFR1NfVU5BTExPQ0FURUQgaW4gdGhlIHBhdHRlcm4gYnVmZmVyLAogKiBg cmVfbWF0Y2hfMicgcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhdCBsZWFzdCB0aGlzIG1hbnkg cmVnaXN0ZXJzCiAqIHRoZSBmaXJzdCB0aW1lIGEgYHJlZ3MnIHN0cnVjdHVyZSBpcyBwYXNzZWQu IAogKgogKiBBbHNvLCB0aGlzIGlzIHRoZSBncmVhdGVzdCBudW1iZXIgb2YgYmFja3JlZmVyZW5j ZWQgc3ViZXhwcmVzc2lvbnMKICogYWxsb3dlZCBpbiBhIHBhdHRlcm4gYmVpbmcgbWF0Y2hlZCB3 aXRob3V0IGNhbGxlci1zdXBwbGllZCByZWdpc3RlcnMuCiAqLwojaWZuZGVmIFJFX05SRUdTCiNk ZWZpbmUgUkVfTlJFR1MgMzAKI2VuZGlmCgpleHRlcm4gaW50IHJ4X2NhY2hlX2JvdW5kOwpleHRl cm4gY2hhciByeF92ZXJzaW9uX3N0cmluZ1tdOwoKCgwKI2lmZGVmIFJYX1dBTlRfUlhfREVGUwoK LyogVGhpcyBpcyBkZWNscyB0byB0aGUgaW50ZXJlc3Rpbmcgc3Vic3lzdGVtcyBhbmQgbG93ZXIg bGF5ZXJzCiAqIG9mIHJ4LiAgRXZlcnl0aGluZyB3aGljaCBkb2Vzbid0IGhhdmUgYSBwdWJsaWMg Y291bnRlcnBhcnQgaW4gCiAqIHJlZ2V4LmMgaXMgZGVjbGFyZWQgaGVyZS4KICovCgoKI2lmZGVm IF9fU1REQ19fCnR5cGVkZWYgdm9pZCAoKnJ4X2hhc2hfZnJlZWZuKSAoc3RydWN0IHJ4X2hhc2hf aXRlbSAqIGl0KTsKI2Vsc2UgLyogbmRlZiBfX1NURENfXyAqLwp0eXBlZGVmIHZvaWQgKCpyeF9o YXNoX2ZyZWVmbikgKCk7CiNlbmRpZiAvKiBuZGVmIF9fU1REQ19fICovCgoKDAoKI2lmZGVmIF9f U1REQ19fClJYX0RFQ0wgaW50IHJ4X2JpdHNldF9pc19lcXVhbCAoaW50IHNpemUsIHJ4X0JpdHNl dCBhLCByeF9CaXRzZXQgYik7ClJYX0RFQ0wgaW50IHJ4X2JpdHNldF9pc19zdWJzZXQgKGludCBz aXplLCByeF9CaXRzZXQgYSwgcnhfQml0c2V0IGIpOwpSWF9ERUNMIGludCByeF9iaXRzZXRfZW1w dHkgKGludCBzaXplLCByeF9CaXRzZXQgc2V0KTsKUlhfREVDTCB2b2lkIHJ4X2JpdHNldF9udWxs IChpbnQgc2l6ZSwgcnhfQml0c2V0IGIpOwpSWF9ERUNMIHZvaWQgcnhfYml0c2V0X3VuaXZlcnNl IChpbnQgc2l6ZSwgcnhfQml0c2V0IGIpOwpSWF9ERUNMIHZvaWQgcnhfYml0c2V0X2NvbXBsZW1l bnQgKGludCBzaXplLCByeF9CaXRzZXQgYik7ClJYX0RFQ0wgdm9pZCByeF9iaXRzZXRfYXNzaWdu IChpbnQgc2l6ZSwgcnhfQml0c2V0IGEsIHJ4X0JpdHNldCBiKTsKUlhfREVDTCB2b2lkIHJ4X2Jp dHNldF91bmlvbiAoaW50IHNpemUsIHJ4X0JpdHNldCBhLCByeF9CaXRzZXQgYik7ClJYX0RFQ0wg dm9pZCByeF9iaXRzZXRfaW50ZXJzZWN0aW9uIChpbnQgc2l6ZSwKCQkJCSAgICAgcnhfQml0c2V0 IGEsIHJ4X0JpdHNldCBiKTsKUlhfREVDTCB2b2lkIHJ4X2JpdHNldF9kaWZmZXJlbmNlIChpbnQg c2l6ZSwgcnhfQml0c2V0IGEsIHJ4X0JpdHNldCBiKTsKUlhfREVDTCB2b2lkIHJ4X2JpdHNldF9y ZXZkaWZmZXJlbmNlIChpbnQgc2l6ZSwKCQkJCSAgICAgIHJ4X0JpdHNldCBhLCByeF9CaXRzZXQg Yik7ClJYX0RFQ0wgdm9pZCByeF9iaXRzZXRfeG9yIChpbnQgc2l6ZSwgcnhfQml0c2V0IGEsIHJ4 X0JpdHNldCBiKTsKUlhfREVDTCB1bnNpZ25lZCBsb25nIHJ4X2JpdHNldF9oYXNoIChpbnQgc2l6 ZSwgcnhfQml0c2V0IGIpOwpSWF9ERUNMIHN0cnVjdCByeF9oYXNoX2l0ZW0gKiByeF9oYXNoX2Zp bmQgKHN0cnVjdCByeF9oYXNoICogdGFibGUsCgkJCQkJICAgIHVuc2lnbmVkIGxvbmcgaGFzaCwK CQkJCQkgICAgdm9pZCAqIHZhbHVlLAoJCQkJCSAgICBzdHJ1Y3QgcnhfaGFzaF9ydWxlcyAqIHJ1 bGVzKTsKUlhfREVDTCBzdHJ1Y3QgcnhfaGFzaF9pdGVtICogcnhfaGFzaF9zdG9yZSAoc3RydWN0 IHJ4X2hhc2ggKiB0YWJsZSwKCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgaGFzaCwKCQkJCQkgICAg IHZvaWQgKiB2YWx1ZSwKCQkJCQkgICAgIHN0cnVjdCByeF9oYXNoX3J1bGVzICogcnVsZXMpOwpS WF9ERUNMIHZvaWQgcnhfaGFzaF9mcmVlIChzdHJ1Y3QgcnhfaGFzaF9pdGVtICogaXQsIHN0cnVj dCByeF9oYXNoX3J1bGVzICogcnVsZXMpOwpSWF9ERUNMIHZvaWQgcnhfZnJlZV9oYXNoX3RhYmxl IChzdHJ1Y3QgcnhfaGFzaCAqIHRhYiwgcnhfaGFzaF9mcmVlZm4gZnJlZWZuLAoJCQkJIHN0cnVj dCByeF9oYXNoX3J1bGVzICogcnVsZXMpOwpSWF9ERUNMIHJ4X0JpdHNldCByeF9jc2V0IChzdHJ1 Y3QgcnggKnJ4KTsKUlhfREVDTCByeF9CaXRzZXQgcnhfY29weV9jc2V0IChzdHJ1Y3QgcnggKnJ4 LCByeF9CaXRzZXQgYSk7ClJYX0RFQ0wgdm9pZCByeF9mcmVlX2NzZXQgKHN0cnVjdCByeCAqIHJ4 LCByeF9CaXRzZXQgYyk7ClJYX0RFQ0wgc3RydWN0IHJleHBfbm9kZSAqIHJleHBfbm9kZSAoc3Ry dWN0IHJ4ICpyeCwKCQkJCSAgICAgIGVudW0gcmV4cF9ub2RlX3R5cGUgdHlwZSk7ClJYX0RFQ0wg c3RydWN0IHJleHBfbm9kZSAqIHJ4X21rX3JfY3NldCAoc3RydWN0IHJ4ICogcngsCgkJCQkJIHJ4 X0JpdHNldCBiKTsKUlhfREVDTCBzdHJ1Y3QgcmV4cF9ub2RlICogcnhfbWtfcl9jb25jYXQgKHN0 cnVjdCByeCAqIHJ4LAoJCQkJCSAgIHN0cnVjdCByZXhwX25vZGUgKiBhLAoJCQkJCSAgIHN0cnVj dCByZXhwX25vZGUgKiBiKTsKUlhfREVDTCBzdHJ1Y3QgcmV4cF9ub2RlICogcnhfbWtfcl9hbHRl cm5hdGUgKHN0cnVjdCByeCAqIHJ4LAoJCQkJCSAgICAgIHN0cnVjdCByZXhwX25vZGUgKiBhLAoJ CQkJCSAgICAgIHN0cnVjdCByZXhwX25vZGUgKiBiKTsKUlhfREVDTCBzdHJ1Y3QgcmV4cF9ub2Rl ICogcnhfbWtfcl9vcHQgKHN0cnVjdCByeCAqIHJ4LAoJCQkJCXN0cnVjdCByZXhwX25vZGUgKiBh KTsKUlhfREVDTCBzdHJ1Y3QgcmV4cF9ub2RlICogcnhfbWtfcl9zdGFyIChzdHJ1Y3QgcnggKiBy eCwKCQkJCQkgc3RydWN0IHJleHBfbm9kZSAqIGEpOwpSWF9ERUNMIHN0cnVjdCByZXhwX25vZGUg KiByeF9ta19yXzJwaGFzZV9zdGFyIChzdHJ1Y3QgcnggKiByeCwKCQkJCQkJc3RydWN0IHJleHBf bm9kZSAqIGEsCgkJCQkJCXN0cnVjdCByZXhwX25vZGUgKiBiKTsKUlhfREVDTCBzdHJ1Y3QgcmV4 cF9ub2RlICogcnhfbWtfcl9zaWRlX2VmZmVjdCAoc3RydWN0IHJ4ICogcngsCgkJCQkJCXJ4X3Np ZGVfZWZmZWN0IGEpOwpSWF9ERUNMIHN0cnVjdCByZXhwX25vZGUgKiByeF9ta19yX2RhdGEgIChz dHJ1Y3QgcnggKiByeCwKCQkJCQkgIHZvaWQgKiBhKTsKUlhfREVDTCB2b2lkIHJ4X2ZyZWVfcmV4 cCAoc3RydWN0IHJ4ICogcngsIHN0cnVjdCByZXhwX25vZGUgKiBub2RlKTsKUlhfREVDTCBzdHJ1 Y3QgcmV4cF9ub2RlICogcnhfY29weV9yZXhwIChzdHJ1Y3QgcnggKnJ4LAoJCQkJCSBzdHJ1Y3Qg cmV4cF9ub2RlICpub2RlKTsKUlhfREVDTCBzdHJ1Y3QgcnhfbmZhX3N0YXRlICogcnhfbmZhX3N0 YXRlIChzdHJ1Y3QgcnggKnJ4KTsKUlhfREVDTCB2b2lkIHJ4X2ZyZWVfbmZhX3N0YXRlIChzdHJ1 Y3QgcnhfbmZhX3N0YXRlICogbik7ClJYX0RFQ0wgc3RydWN0IHJ4X25mYV9zdGF0ZSAqIHJ4X2lk X3RvX25mYV9zdGF0ZSAoc3RydWN0IHJ4ICogcngsCgkJCQkJCSAgaW50IGlkKTsKUlhfREVDTCBz dHJ1Y3QgcnhfbmZhX2VkZ2UgKiByeF9uZmFfZWRnZSAoc3RydWN0IHJ4ICpyeCwKCQkJCQkgIGVu dW0gcnhfbmZhX2V0eXBlIHR5cGUsCgkJCQkJICBzdHJ1Y3QgcnhfbmZhX3N0YXRlICpzdGFydCwK CQkJCQkgIHN0cnVjdCByeF9uZmFfc3RhdGUgKmRlc3QpOwpSWF9ERUNMIHZvaWQgcnhfZnJlZV9u ZmFfZWRnZSAoc3RydWN0IHJ4X25mYV9lZGdlICogZSk7ClJYX0RFQ0wgdm9pZCByeF9mcmVlX25m YSAoc3RydWN0IHJ4ICpyeCk7ClJYX0RFQ0wgaW50IHJ4X2J1aWxkX25mYSAoc3RydWN0IHJ4ICpy eCwKCQkJICBzdHJ1Y3QgcmV4cF9ub2RlICpyZXhwLAoJCQkgIHN0cnVjdCByeF9uZmFfc3RhdGUg KipzdGFydCwKCQkJICBzdHJ1Y3QgcnhfbmZhX3N0YXRlICoqZW5kKTsKUlhfREVDTCB2b2lkIHJ4 X25hbWVfbmZhX3N0YXRlcyAoc3RydWN0IHJ4ICpyeCk7ClJYX0RFQ0wgaW50IHJ4X2VjbG9zZV9u ZmEgKHN0cnVjdCByeCAqcngpOwpSWF9ERUNMIHZvaWQgcnhfZGVsZXRlX2Vwc2lsb25fdHJhbnNp dGlvbnMgKHN0cnVjdCByeCAqcngpOwpSWF9ERUNMIGludCByeF9jb21wYWN0aWZ5X25mYSAoc3Ry dWN0IHJ4ICpyeCwKCQkJICAgICAgIHZvaWQgKiptZW0sIHVuc2lnbmVkIGxvbmcgKnNpemUpOwpS WF9ERUNMIHZvaWQgcnhfcmVsZWFzZV9zdXBlcnNldCAoc3RydWN0IHJ4ICpyeCwKCQkJCSAgc3Ry dWN0IHJ4X3N1cGVyc2V0ICpzZXQpOwpSWF9ERUNMIHN0cnVjdCByeF9zdXBlcnNldCAqIHJ4X3N1 cGVyc2V0X2NvbnMgKHN0cnVjdCByeCAqIHJ4LAoJCQkJCSAgICAgICBzdHJ1Y3QgcnhfbmZhX3N0 YXRlICpjYXIsIHN0cnVjdCByeF9zdXBlcnNldCAqY2RyKTsKUlhfREVDTCBzdHJ1Y3Qgcnhfc3Vw ZXJzZXQgKiByeF9zdXBlcnN0YXRlX2VjbG9zdXJlX3VuaW9uCiAgKHN0cnVjdCByeCAqIHJ4LCBz dHJ1Y3Qgcnhfc3VwZXJzZXQgKnNldCwgc3RydWN0IHJ4X25mYV9zdGF0ZV9zZXQgKmVjbCk7ClJY X0RFQ0wgc3RydWN0IHJ4X3N1cGVyc3RhdGUgKiByeF9zdXBlcnN0YXRlIChzdHJ1Y3QgcnggKnJ4 LAoJCQkJCSAgICAgIHN0cnVjdCByeF9zdXBlcnNldCAqc2V0KTsKUlhfREVDTCBzdHJ1Y3Qgcnhf aW54ICogcnhfaGFuZGxlX2NhY2hlX21pc3MKICAoc3RydWN0IHJ4ICpyeCwgc3RydWN0IHJ4X3N1 cGVyc3RhdGUgKnN1cGVyLCB1bnNpZ25lZCBjaGFyIGNociwgdm9pZCAqZGF0YSk7ClJYX0RFQ0wg cmVnX2VycmNvZGVfdCByeF9jb21waWxlIChfX2NvbnN0X18gY2hhciAqcGF0dGVybiwgaW50IHNp emUsCgkJCQkgIHJlZ19zeW50YXhfdCBzeW50YXgsCgkJCQkgIHN0cnVjdCByZV9wYXR0ZXJuX2J1 ZmZlciAqIHJ4Yik7ClJYX0RFQ0wgdm9pZCByeF9ibG93X3VwX2Zhc3RtYXAgKHN0cnVjdCByZV9w YXR0ZXJuX2J1ZmZlciAqIHJ4Yik7CiNlbHNlIC8qIFNUREMgKi8KUlhfREVDTCBpbnQgcnhfYml0 c2V0X2lzX2VxdWFsICgpOwpSWF9ERUNMIGludCByeF9iaXRzZXRfaXNfc3Vic2V0ICgpOwpSWF9E RUNMIGludCByeF9iaXRzZXRfZW1wdHkgKCk7ClJYX0RFQ0wgdm9pZCByeF9iaXRzZXRfbnVsbCAo KTsKUlhfREVDTCB2b2lkIHJ4X2JpdHNldF91bml2ZXJzZSAoKTsKUlhfREVDTCB2b2lkIHJ4X2Jp dHNldF9jb21wbGVtZW50ICgpOwpSWF9ERUNMIHZvaWQgcnhfYml0c2V0X2Fzc2lnbiAoKTsKUlhf REVDTCB2b2lkIHJ4X2JpdHNldF91bmlvbiAoKTsKUlhfREVDTCB2b2lkIHJ4X2JpdHNldF9pbnRl cnNlY3Rpb24gKCk7ClJYX0RFQ0wgdm9pZCByeF9iaXRzZXRfZGlmZmVyZW5jZSAoKTsKUlhfREVD TCB2b2lkIHJ4X2JpdHNldF9yZXZkaWZmZXJlbmNlICgpOwpSWF9ERUNMIHZvaWQgcnhfYml0c2V0 X3hvciAoKTsKUlhfREVDTCB1bnNpZ25lZCBsb25nIHJ4X2JpdHNldF9oYXNoICgpOwpSWF9ERUNM IHN0cnVjdCByeF9oYXNoX2l0ZW0gKiByeF9oYXNoX2ZpbmQgKCk7ClJYX0RFQ0wgc3RydWN0IHJ4 X2hhc2hfaXRlbSAqIHJ4X2hhc2hfc3RvcmUgKCk7ClJYX0RFQ0wgdm9pZCByeF9oYXNoX2ZyZWUg KCk7ClJYX0RFQ0wgdm9pZCByeF9mcmVlX2hhc2hfdGFibGUgKCk7ClJYX0RFQ0wgcnhfQml0c2V0 IHJ4X2NzZXQgKCk7ClJYX0RFQ0wgcnhfQml0c2V0IHJ4X2NvcHlfY3NldCAoKTsKUlhfREVDTCB2 b2lkIHJ4X2ZyZWVfY3NldCAoKTsKUlhfREVDTCBzdHJ1Y3QgcmV4cF9ub2RlICogcmV4cF9ub2Rl ICgpOwpSWF9ERUNMIHN0cnVjdCByZXhwX25vZGUgKiByeF9ta19yX2NzZXQgKCk7ClJYX0RFQ0wg c3RydWN0IHJleHBfbm9kZSAqIHJ4X21rX3JfY29uY2F0ICgpOwpSWF9ERUNMIHN0cnVjdCByZXhw X25vZGUgKiByeF9ta19yX2FsdGVybmF0ZSAoKTsKUlhfREVDTCBzdHJ1Y3QgcmV4cF9ub2RlICog cnhfbWtfcl9vcHQgKCk7ClJYX0RFQ0wgc3RydWN0IHJleHBfbm9kZSAqIHJ4X21rX3Jfc3RhciAo KTsKUlhfREVDTCBzdHJ1Y3QgcmV4cF9ub2RlICogcnhfbWtfcl8ycGhhc2Vfc3RhciAoKTsKUlhf REVDTCBzdHJ1Y3QgcmV4cF9ub2RlICogcnhfbWtfcl9zaWRlX2VmZmVjdCAoKTsKUlhfREVDTCBz dHJ1Y3QgcmV4cF9ub2RlICogcnhfbWtfcl9kYXRhICAoKTsKUlhfREVDTCB2b2lkIHJ4X2ZyZWVf cmV4cCAoKTsKUlhfREVDTCBzdHJ1Y3QgcmV4cF9ub2RlICogcnhfY29weV9yZXhwICgpOwpSWF9E RUNMIHN0cnVjdCByeF9uZmFfc3RhdGUgKiByeF9uZmFfc3RhdGUgKCk7ClJYX0RFQ0wgdm9pZCBy eF9mcmVlX25mYV9zdGF0ZSAoKTsKUlhfREVDTCBzdHJ1Y3QgcnhfbmZhX3N0YXRlICogcnhfaWRf dG9fbmZhX3N0YXRlICgpOwpSWF9ERUNMIHN0cnVjdCByeF9uZmFfZWRnZSAqIHJ4X25mYV9lZGdl ICgpOwpSWF9ERUNMIHZvaWQgcnhfZnJlZV9uZmFfZWRnZSAoKTsKUlhfREVDTCB2b2lkIHJ4X2Zy ZWVfbmZhICgpOwpSWF9ERUNMIGludCByeF9idWlsZF9uZmEgKCk7ClJYX0RFQ0wgdm9pZCByeF9u YW1lX25mYV9zdGF0ZXMgKCk7ClJYX0RFQ0wgaW50IHJ4X2VjbG9zZV9uZmEgKCk7ClJYX0RFQ0wg dm9pZCByeF9kZWxldGVfZXBzaWxvbl90cmFuc2l0aW9ucyAoKTsKUlhfREVDTCBpbnQgcnhfY29t cGFjdGlmeV9uZmEgKCk7ClJYX0RFQ0wgdm9pZCByeF9yZWxlYXNlX3N1cGVyc2V0ICgpOwpSWF9E RUNMIHN0cnVjdCByeF9zdXBlcnNldCAqIHJ4X3N1cGVyc2V0X2NvbnMgKCk7ClJYX0RFQ0wgc3Ry dWN0IHJ4X3N1cGVyc2V0ICogcnhfc3VwZXJzdGF0ZV9lY2xvc3VyZV91bmlvbiAoKTsKUlhfREVD TCBzdHJ1Y3Qgcnhfc3VwZXJzdGF0ZSAqIHJ4X3N1cGVyc3RhdGUgKCk7ClJYX0RFQ0wgc3RydWN0 IHJ4X2lueCAqIHJ4X2hhbmRsZV9jYWNoZV9taXNzICgpOwpSWF9ERUNMIHJlZ19lcnJjb2RlX3Qg cnhfY29tcGlsZSAoKTsKUlhfREVDTCB2b2lkIHJ4X2Jsb3dfdXBfZmFzdG1hcCAoKTsKI2VuZGlm IC8qIFNUREMgKi8KCgojZW5kaWYgLyogUlhfV0FOVF9SWF9ERUZTICovCgoKDAojaWZkZWYgX19T VERDX18KZXh0ZXJuIGludCByZV9zZWFyY2hfMiAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpy eGIsCgkJCV9fY29uc3RfXyBjaGFyICogc3RyaW5nMSwgaW50IHNpemUxLAoJCQlfX2NvbnN0X18g Y2hhciAqIHN0cmluZzIsIGludCBzaXplMiwKCQkJaW50IHN0YXJ0cG9zLCBpbnQgcmFuZ2UsCgkJ CXN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsCgkJCWludCBzdG9wKTsKZXh0ZXJuIGludCByZV9z ZWFyY2ggKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqIHJ4YiwgX19jb25zdF9fIGNoYXIgKnN0 cmluZywKCQkgICAgICBpbnQgc2l6ZSwgaW50IHN0YXJ0cG9zLCBpbnQgcmFuZ2UsCgkJICAgICAg c3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncyk7CmV4dGVybiBpbnQgcmVfbWF0Y2hfMiAoc3RydWN0 IHJlX3BhdHRlcm5fYnVmZmVyICogcnhiLAoJCSAgICAgICBfX2NvbnN0X18gY2hhciAqIHN0cmlu ZzEsIGludCBzaXplMSwKCQkgICAgICAgX19jb25zdF9fIGNoYXIgKiBzdHJpbmcyLCBpbnQgc2l6 ZTIsCgkJICAgICAgIGludCBwb3MsIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsIGludCBzdG9w KTsKZXh0ZXJuIGludCByZV9tYXRjaCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICogcnhiLAoJ CSAgICAgX19jb25zdF9fIGNoYXIgKiBzdHJpbmcsCgkJICAgICBpbnQgc2l6ZSwgaW50IHBvcywK CQkgICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MpOwpleHRlcm4gcmVnX3N5bnRheF90IHJl X3NldF9zeW50YXggKHJlZ19zeW50YXhfdCBzeW50YXgpOwpleHRlcm4gdm9pZCByZV9zZXRfcmVn aXN0ZXJzIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsCgkJCSAgICAgIHN0cnVjdCBy ZV9yZWdpc3RlcnMgKnJlZ3MsCgkJCSAgICAgIHVuc2lnbmVkIG51bV9yZWdzLAoJCQkgICAgICBy ZWdvZmZfdCAqIHN0YXJ0cywgcmVnb2ZmX3QgKiBlbmRzKTsKZXh0ZXJuIF9fY29uc3RfXyBjaGFy ICogcmVfY29tcGlsZV9wYXR0ZXJuIChfX2NvbnN0X18gY2hhciAqcGF0dGVybiwKCQkJCQlpbnQg bGVuZ3RoLAoJCQkJCXN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqIHJ4Yik7CmV4dGVybiBpbnQg cmVfY29tcGlsZV9mYXN0bWFwIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKiByeGIpOwpleHRl cm4gY2hhciAqIHJlX2NvbXAgKF9fY29uc3RfXyBjaGFyICpzKTsKZXh0ZXJuIGludCByZV9leGVj IChfX2NvbnN0X18gY2hhciAqcyk7CmV4dGVybiBpbnQgcmVnY29tcCAocmVnZXhfdCAqIHByZWcs IF9fY29uc3RfXyBjaGFyICogcGF0dGVybiwgaW50IGNmbGFncyk7CmV4dGVybiBpbnQgcmVnZXhl YyAoX19jb25zdF9fIHJlZ2V4X3QgKnByZWcsIF9fY29uc3RfXyBjaGFyICpzdHJpbmcsCgkJICAg IHNpemVfdCBubWF0Y2gsIHJlZ21hdGNoX3QgcG1hdGNoW10sCgkJICAgIGludCBlZmxhZ3MpOwpl eHRlcm4gc2l6ZV90IHJlZ2Vycm9yIChpbnQgZXJyY29kZSwgX19jb25zdF9fIHJlZ2V4X3QgKnBy ZWcsCgkJCWNoYXIgKmVycmJ1Ziwgc2l6ZV90IGVycmJ1Zl9zaXplKTsKZXh0ZXJuIHZvaWQgcmVn ZnJlZSAocmVnZXhfdCAqcHJlZyk7CgojZWxzZSAvKiBTVERDICovCmV4dGVybiBpbnQgcmVfc2Vh cmNoXzIgKCk7CmV4dGVybiBpbnQgcmVfc2VhcmNoICgpOwpleHRlcm4gaW50IHJlX21hdGNoXzIg KCk7CmV4dGVybiBpbnQgcmVfbWF0Y2ggKCk7CmV4dGVybiByZWdfc3ludGF4X3QgcmVfc2V0X3N5 bnRheCAoKTsKZXh0ZXJuIHZvaWQgcmVfc2V0X3JlZ2lzdGVycyAoKTsKZXh0ZXJuIF9fY29uc3Rf XyBjaGFyICogcmVfY29tcGlsZV9wYXR0ZXJuICgpOwpleHRlcm4gaW50IHJlX2NvbXBpbGVfZmFz dG1hcCAoKTsKZXh0ZXJuIGNoYXIgKiByZV9jb21wICgpOwpleHRlcm4gaW50IHJlX2V4ZWMgKCk7 CmV4dGVybiBpbnQgcmVnY29tcCAoKTsKZXh0ZXJuIGludCByZWdleGVjICgpOwpleHRlcm4gc2l6 ZV90IHJlZ2Vycm9yICgpOwpleHRlcm4gdm9pZCByZWdmcmVlICgpOwoKI2VuZGlmIC8qIFNUREMg Ki8KCgwKCiNpZmRlZiBSWF9XQU5UX1JYX0RFRlMKCnN0cnVjdCByeF9jb3VudGVyX2ZyYW1lCnsK ICBpbnQgdGFnOwogIGludCB2YWw7CiAgc3RydWN0IHJ4X2NvdW50ZXJfZnJhbWUgKiBpbmhlcml0 ZWRfZnJvbTsgLyogSWYgdGhpcyBpcyBhIGNvcHkuICovCiAgc3RydWN0IHJ4X2NvdW50ZXJfZnJh bWUgKiBjZHI7Cn07CgpzdHJ1Y3QgcnhfYmFja3RyYWNrX2ZyYW1lCnsKICBjaGFyICogY291bnRl cl9zdGFja19zcDsKCiAgLyogQSBmcmFtZSBpcyB1c2VkIHRvIHNhdmUgdGhlIG1hdGNoZXJzIHN0 YXRlIHdoZW4gaXQgY3Jvc3NlcyBhIAogICAqIGJhY2t0cmFja2luZyBwb2ludC4gIFRoZSBgc3Rr XycgZmllbGRzIGNvcnJlc3BvbmQgdG8gdmFyaWFibGVzCiAgICogaW4gcmVfc2VhcmNoXzIgKGp1 c3Qgc3RyaXAgb2ZmIHRoZXMgYHN0a18nKS4gIFRoZXkgYXJlIGRvY3VtZW50ZWQKICAgKiB0ZXJl LgogICAqLwogIHN0cnVjdCByeF9zdXBlcnN0YXRlICogc3RrX3N1cGVyOwogIHVuc2lnbmVkIGlu dCBzdGtfYzsKICBzdHJ1Y3Qgcnhfc3RyaW5nX3Bvc2l0aW9uIHN0a190ZXN0X3BvczsKICBpbnQg c3RrX2xhc3RfbDsKICBpbnQgc3RrX2xhc3RfcjsKICBpbnQgc3RrX3Rlc3RfcmV0OwoKICAvKiBU aGlzIGlzIHRoZSBsaXN0IG9mIG9wdGlvbnMgbGVmdCB0byBleHBsb3JlIGF0IHRoZSBiYWNrdHJh Y2sKICAgKiBwb2ludCBmb3Igd2hpY2ggdGhpcyBmcmFtZSB3YXMgY3JlYXRlZC4gCiAgICovCiAg c3RydWN0IHJ4X2Rpc3RpbmN0X2Z1dHVyZSAqIGRmOwogIHN0cnVjdCByeF9kaXN0aW5jdF9mdXR1 cmUgKiBmaXJzdF9kZjsKCiNpZmRlZiBSWF9ERUJVRwogICBpbnQgc3RrX2xpbmVfbm87CiNlbmRp Zgp9OwoKc3RydWN0IHJ4X3N0YWNrX2NodW5rCnsKICBzdHJ1Y3Qgcnhfc3RhY2tfY2h1bmsgKiBu ZXh0X2NodW5rOwogIGludCBieXRlc19sZWZ0OwogIGNoYXIgKiBzcDsKfTsKCmVudW0gcnhfb3V0 ZXJfZW50cnkKewogIHJ4X291dGVyX3N0YXJ0LAogIHJ4X291dGVyX2Zhc3RtYXAsCiAgcnhfb3V0 ZXJfdGVzdCwKICByeF9vdXRlcl9yZXN0b3JlX3Bvcwp9OwoKZW51bSByeF9mYXN0bWFwX3JldHVy bgp7CiAgcnhfZmFzdG1hcF9jb250aW51YXRpb24sCiAgcnhfZmFzdG1hcF9lcnJvciwKICByeF9m YXN0bWFwX29rLAogIHJ4X2Zhc3RtYXBfZmFpbAp9OwoKZW51bSByeF9mYXN0bWFwX2VudHJ5CnsK ICByeF9mYXN0bWFwX3N0YXJ0LAogIHJ4X2Zhc3RtYXBfc3RyaW5nX2JyZWFrCn07CgplbnVtIHJ4 X3Rlc3RfcmV0dXJuCnsKICByeF90ZXN0X2NvbnRpbnVhdGlvbiwKICByeF90ZXN0X2Vycm9yLAog IHJ4X3Rlc3RfZmFpbCwKICByeF90ZXN0X29rCn07CgplbnVtIHJ4X3Rlc3RfaW50ZXJuYWxfcmV0 dXJuCnsKICByeF90ZXN0X2ludGVybmFsX2Vycm9yLAogIHJ4X3Rlc3RfZm91bmRfZmlyc3QsCiAg cnhfdGVzdF9saW5lX2ZpbmlzaGVkCn07CgplbnVtIHJ4X3Rlc3RfbWF0Y2hfZW50cnkKewogIHJ4 X3Rlc3Rfc3RhcnQsCiAgcnhfdGVzdF9jYWNoZV9oaXRfbG9vcCwKICByeF90ZXN0X2JhY2tyZWZl cmVuY2VfY2hlY2ssCiAgcnhfdGVzdF9iYWNrdHJhY2tfcmV0dXJuCn07CgpzdHJ1Y3Qgcnhfc2Vh cmNoX3N0YXRlCnsKICAvKiBUd28gZ3JvdXBzIG9mIHJlZ2lzdGVycyBhcmUga2VwdC4gIFRoZSBn cm91cCB3aXRoIHRoZSByZWdpc3RlciBzdGF0ZQogICAqIG9mIHRoZSBjdXJyZW50IHRlc3QgbWF0 Y2gsIGFuZCB0aGUgZ3JvdXAgdGhhdCBob2xkcyB0aGUgc3RhdGUgYXQgdGhlIGVuZAogICAqIG9m IHRoZSBiZXN0IGtub3duIG1hdGNoLCBpZiBhbnkuCiAgICoKICAgKiBGb3Igc29tZSBwYXR0ZXJu cywgdGhlcmUgbWF5IGFsc28gYmUgcmVnaXN0ZXJzIHNhdmVkIG9uIHRoZSBzdGFjay4KICAgKi8K ICB1bnNpZ25lZCBudW1fcmVnczsJCS8qIEluY2x1ZGVzIGFuIGVsZW1lbnQgZm9yIHJlZ2lzdGVy IHplcm8uICovCiAgcmVnb2ZmX3QgKiBscGFyZW47CQkvKiBzY3JhdGNoIHNwYWNlIGZvciByZWdp c3RlciByZXR1cm5zICovCiAgcmVnb2ZmX3QgKiBycGFyZW47CiAgcmVnb2ZmX3QgKiBiZXN0X2xw c3BhY2U7CS8qIGluIGNhc2UgdGhlIHVzZXIgZG9lc24ndCB3YW50IHRoZXNlICovCiAgcmVnb2Zm X3QgKiBiZXN0X3Jwc3BhY2U7CS8qIHZhbHVlcywgd2Ugc3RpbGwgbmVlZCBzcGFjZSB0byBzdG9y ZQoJCQkJICogdGhlbS4gIE5vcm1hbGx5LCB0aGlzIG1lbW9yeWlzIHVudXNlZAoJCQkJICogYW5k IHRoZSBzcGFjZSBwb2ludGVkIHRvIGJ5IFJFR1MgaXMgCgkJCQkgKiB1c2VkIGluc3RlYWQuCgkJ CQkgKi8KICAKICBpbnQgbGFzdF9sOwkJCS8qIEhpZ2hlc3QgaW5kZXggb2YgYSB2YWxpZCBscGFy ZW4uICovCiAgaW50IGxhc3RfcjsJCQkvKiBJdCdzIGR1YWwuICovCiAgCiAgaW50ICogYmVzdF9s cGFyZW47CQkvKiBUaGlzIGNvbnRhaW5zIHRoZSBiZXN0IGtub3duIHJlZ2lzdGVyICovCiAgaW50 ICogYmVzdF9ycGFyZW47CQkvKiBhc3NpZ25tZW50cy4gCgkJCQkgKiBUaGlzIG1heSBwb2ludCB0 byB0aGUgc2FtZSBtZW0gYXMKCQkJCSAqIGJlc3RfbHBzcGFjZSwgb3IgaXQgbWlnaHQgcG9pbnQg dG8gbWVtb3J5CgkJCQkgKiBwYXNzZWQgYnkgdGhlIGNhbGxlci4KCQkJCSAqLwogIGludCBiZXN0 X2xhc3RfbDsJCS8qIGJlc3RfbGFzdF9sOmJlc3RfbHBhcmVuOjpsYXN0X2w6bHBhcmVuICovCiAg aW50IGJlc3RfbGFzdF9yOwoKCiAgdW5zaWduZWQgY2hhciAqIHRyYW5zbGF0ZTsgIAoKICBzdHJ1 Y3Qgcnhfc3RyaW5nX3Bvc2l0aW9uIG91dGVyX3BvczsKCiAgc3RydWN0IHJ4X3N1cGVyc3RhdGUg KiBzdGFydF9zdXBlcjsKICBpbnQgbmZhX2Nob2ljZTsKICBpbnQgZmlyc3RfZm91bmQ7CQkvKiBJ ZiB0cnVlLCByZXR1cm4gYWZ0ZXIgZmluZGluZyBhbnkgbWF0Y2guICovCiAgaW50IHJldF92YWw7 CgogIC8qIEZvciBjb250aW51YXRpb25zLi4uICovCiAgZW51bSByeF9vdXRlcl9lbnRyeSBvdXRl cl9zZWFyY2hfcmVzdW1lX3B0OwogIHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqIHNhdmVkX3J4 YjsKICBpbnQgc2F2ZWRfc3RhcnRwb3M7CiAgaW50IHNhdmVkX3JhbmdlOwogIGludCBzYXZlZF9z dG9wOwogIGludCBzYXZlZF90b3RhbF9zaXplOwogIHJ4X2dldF9idXJzdF9mbiBzYXZlZF9nZXRf YnVyc3Q7CiAgcnhfYmFja19jaGVja19mbiBzYXZlZF9iYWNrX2NoZWNrOwogIHN0cnVjdCByZV9y ZWdpc3RlcnMgKiBzYXZlZF9yZWdzOwogIAogIC8qKgogICAqKiBzdGF0ZSBmb3IgZmFzdG1hcAog ICAqKi8KICBjaGFyICogZmFzdG1hcDsKICBpbnQgZmFzdG1hcF9jaHI7CiAgaW50IGZhc3RtYXBf dmFsOwoKICAvKiBmb3IgY29udGludWF0aW9ucyBpbiB0aGUgZmFzdG1hcCBwcm9jZWR1cmU6ICov CiAgZW51bSByeF9mYXN0bWFwX2VudHJ5IGZhc3RtYXBfcmVzdW1lX3B0OwoKICAvKioKICAgKiog c3RhdGUgZm9yIHRlc3RfbWF0Y2ggCiAgICoqLwoKICAvKiBUaGUgY3VycmVudCBzdXBlck5GQSBw b3NpdGlvbiBvZiB0aGUgbWF0Y2hlci4gKi8KICBzdHJ1Y3Qgcnhfc3VwZXJzdGF0ZSAqIHN1cGVy OwogIAogIC8qIFRoZSBtYXRjaGVyIGludGVycHJldHMgYSBzZXJpZXMgb2YgaW5zdHJ1Y3Rpb24g ZnJhbWVzLgogICAqIFRoaXMgaXMgdGhlIGBpbnN0cnVjdGlvbiBjb3VudGVyJyBmb3IgdGhlIGlu dGVycHJldGF0aW9uLgogICAqLwogIHN0cnVjdCByeF9pbnggKiBpZnI7CiAgCiAgLyogV2UgaW5z ZXJ0IGEgZ2hvc3QgY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcgdG8gcHJpbWUKICAgKiB0aGUgbmZh LiAgdGVzdF9wb3MucG9zLCB0ZXN0X3Bvcy5zdHJfaGFsZiwgYW5kIHRlc3RfcG9zLmVuZF9oYWxm CiAgICoga2VlcCB0cmFjayBvZiB0aGUgdGVzdC1tYXRjaCBwb3NpdGlvbiBhbmQgc3RyaW5nLWhh bGYuCiAgICovCiAgdW5zaWduZWQgY2hhciBjOwogIAogIC8qIFBvc2l0aW9uIHdpdGhpbiB0aGUg c3RyaW5nLiAqLwogIHN0cnVjdCByeF9zdHJpbmdfcG9zaXRpb24gdGVzdF9wb3M7CgogIHN0cnVj dCByeF9zdGFja19jaHVuayAqIGNvdW50ZXJfc3RhY2s7CiAgc3RydWN0IHJ4X3N0YWNrX2NodW5r ICogYmFja3RyYWNrX3N0YWNrOwogIGludCBiYWNrdHJhY2tfZnJhbWVfYnl0ZXM7CiAgaW50IGNo dW5rX2J5dGVzOwogIHN0cnVjdCByeF9zdGFja19jaHVuayAqIGZyZWVfY2h1bmtzOwoKICAvKiBU byByZXR1cm4gZnJvbSB0aGlzIGZ1bmN0aW9uLCBzZXQgdGVzdF9yZXQgYW5kIAogICAqIGBnb3Rv IHRlc3RfZG9fcmV0dXJuJy4KICAgKgogICAqIFBvc3NpYmxlIHJldHVybiB2YWx1ZXMgYXJlOgog ICAqICAgICAxICAgLS0tIGVuZCBvZiBzdHJpbmcgd2hpbGUgdGhlIHN1cGVyTkZBIGlzIHN0aWxs IGdvaW5nCiAgICogICAgIDAgICAtLS0gaW50ZXJuYWwgZXJyb3IgKG91dCBvZiBtZW1vcnkpCiAg ICoJLTEgICAtLS0gc2VhcmNoIGNvbXBsZXRlZCBieSByZWFjaGluZyB0aGUgc3VwZXJORkEgZmFp bCBzdGF0ZQogICAqICAgIC0yICAgLS0tIGEgbWF0Y2ggd2FzIGZvdW5kLCBtYXliZSBub3QgdGhl IGxvbmdlc3QuCiAgICoKICAgKiBXaGVuIHRoZSBzZWFyY2ggaXMgY29tcGxldGUgKC0xKSwgYmVz dF9sYXN0X3IgaW5kaWNhdGVzIHdoZXRoZXIKICAgKiBhIG1hdGNoIHdhcyBmb3VuZC4KICAgKgog ICAqIC0yIGlzIHJldHVybiBvbmx5IGlmIHNlYXJjaF9zdGF0ZS5maXJzdF9mb3VuZCBpcyBub24t emVyby4KICAgKgogICAqIGlmIHNlYXJjaF9zdGF0ZS5maXJzdF9mb3VuZCBpcyBub24temVybywg YSByZXR1cm4gb2YgLTEgaW5kaWNhdGVzIG5vIG1hdGNoLAogICAqIG90aGVyd2lzZSwgYmVzdF9s YXN0X3IgaGFzIHRvIGJlIGNoZWNrZWQuCiAgICovCiAgaW50IHRlc3RfcmV0OwoKICBpbnQgY291 bGRfaGF2ZV9jb250aW51ZWQ7CiAgCiNpZmRlZiBSWF9ERUJVRwogIGludCBiYWNrdHJhY2tfZGVw dGg7CiAgLyogVGhlcmUgaXMgYSBzZWFyY2ggdHJlZSB3aXRoIGV2ZXJ5IG5vZGUgYXMgc2V0IG9m IGRldGVybWluaXN0aWMKICAgKiB0cmFuc2l0aW9ucyBpbiB0aGUgc3VwZXIgbmZhLiAgRm9yIGV2 ZXJ5IGJyYW5jaCBvZiBhIAogICAqIGJhY2t0cmFjayBwb2ludCBpcyBhbiBlZGdlIGluIHRoZSB0 cmVlLgogICAqIFRoaXMgY291bnRzIHVwIGEgcHJlLW9yZGVyIG9mIG5vZGVzIGluIHRoYXQgdHJl ZS4KICAgKiBJdCdzIHNhdmVkIG9uIHRoZSBzZWFyY2ggc3RhY2sgYW5kIHByaW50ZWQgd2hlbiBk ZWJ1Z2dpbmcuIAogICAqLwogIGludCBsaW5lX25vOwogIGludCBsaW5lc19mb3VuZDsKI2VuZGlm CgoKICAvKiBGb3IgY29udGludWF0aW9ucyB3aXRoaW4gdGhlIG1hdGNoIHRlc3RlciAqLwogIGVu dW0gcnhfdGVzdF9tYXRjaF9lbnRyeSB0ZXN0X21hdGNoX3Jlc3VtZV9wdDsKICBzdHJ1Y3Qgcnhf aW54ICogc2F2ZWRfbmV4dF90cl90YWJsZTsKICBzdHJ1Y3QgcnhfaW54ICogc2F2ZWRfdGhpc190 cl90YWJsZTsKICBpbnQgc2F2ZWRfcmVnOwogIHN0cnVjdCByeF9iYWNrdHJhY2tfZnJhbWUgKiBz YXZlZF9iZjsKICAKfTsKCgwKZXh0ZXJuIGNoYXIgcnhfc2xvd21hcFtdOwpleHRlcm4gdW5zaWdu ZWQgY2hhciByeF9pZF90cmFuc2xhdGlvbltdOwoKc3RhdGljIF9faW5saW5lX18gdm9pZAppbml0 X2Zhc3RtYXAgKHJ4Yiwgc2VhcmNoX3N0YXRlKQogICAgIHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZl ciAqIHJ4YjsKICAgICBzdHJ1Y3Qgcnhfc2VhcmNoX3N0YXRlICogc2VhcmNoX3N0YXRlOwp7CiAg c2VhcmNoX3N0YXRlLT5mYXN0bWFwID0gKHJ4Yi0+ZmFzdG1hcAoJCQkgICA/IChjaGFyICopcnhi LT5mYXN0bWFwCgkJCSAgIDogKGNoYXIgKilyeF9zbG93bWFwKTsKICAvKiBVcGRhdGUgdGhlIGZh c3RtYXAgbm93IGlmIG5vdCBjb3JyZWN0IGFscmVhZHkuIAogICAqIFdoZW4gdGhlIHJlZ2V4cCB3 YXMgY29tcGlsZWQsIHRoZSBmYXN0bWFwIHdhcyBjb21wdXRlZAogICAqIGFuZCBzdG9yZWQgaW4g YSBiaXRzZXQuICBUaGlzIGV4cGFuZHMgdGhlIGJpdHNldCBpbnRvIGEKICAgKiBjaGFyYWN0ZXIg YXJyYXkgY29udGFpbmluZyAxcyBhbmQgMHMuCiAgICovCiAgaWYgKChzZWFyY2hfc3RhdGUtPmZh c3RtYXAgPT0gcnhiLT5mYXN0bWFwKSAmJiAhcnhiLT5mYXN0bWFwX2FjY3VyYXRlKQogICAgcnhf Ymxvd191cF9mYXN0bWFwIChyeGIpOwogIHNlYXJjaF9zdGF0ZS0+ZmFzdG1hcF9jaHIgPSAtMTsK ICBzZWFyY2hfc3RhdGUtPmZhc3RtYXBfdmFsID0gMDsKICBzZWFyY2hfc3RhdGUtPmZhc3RtYXBf cmVzdW1lX3B0ID0gcnhfZmFzdG1hcF9zdGFydDsKfQoKc3RhdGljIF9faW5saW5lX18gdm9pZAp1 bmluaXRfZmFzdG1hcCAocnhiLCBzZWFyY2hfc3RhdGUpCiAgICAgc3RydWN0IHJlX3BhdHRlcm5f YnVmZmVyICogcnhiOwogICAgIHN0cnVjdCByeF9zZWFyY2hfc3RhdGUgKiBzZWFyY2hfc3RhdGU7 CnsKICAvKiBVbnNldCB0aGUgZmFzdG1hcCBzZW50aW5lbCAqLwogIGlmIChzZWFyY2hfc3RhdGUt PmZhc3RtYXBfY2hyID49IDApCiAgICBzZWFyY2hfc3RhdGUtPmZhc3RtYXBbc2VhcmNoX3N0YXRl LT5mYXN0bWFwX2Nocl0KICAgICAgPSBzZWFyY2hfc3RhdGUtPmZhc3RtYXBfdmFsOwp9CgpzdGF0 aWMgX19pbmxpbmVfXyBpbnQKZmFzdG1hcF9zZWFyY2ggKHJ4Yiwgc3RvcCwgZ2V0X2J1cnN0LCBh cHBfY2xvc3VyZSwgc2VhcmNoX3N0YXRlKQogICAgIHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAq IHJ4YjsKICAgICBpbnQgc3RvcDsKICAgICByeF9nZXRfYnVyc3RfZm4gZ2V0X2J1cnN0OwogICAg IHZvaWQgKiBhcHBfY2xvc3VyZTsKICAgICBzdHJ1Y3Qgcnhfc2VhcmNoX3N0YXRlICogc2VhcmNo X3N0YXRlOwp7CiAgZW51bSByeF9mYXN0bWFwX2VudHJ5IHBjOwoKICBpZiAoMCkKICAgIHsKICAg IHJldHVybl9jb250aW51YXRpb246CiAgICAgIHNlYXJjaF9zdGF0ZS0+ZmFzdG1hcF9yZXN1bWVf cHQgPSBwYzsKICAgICAgcmV0dXJuIHJ4X2Zhc3RtYXBfY29udGludWF0aW9uOwogICAgfQoKICBw YyA9IHNlYXJjaF9zdGF0ZS0+ZmFzdG1hcF9yZXN1bWVfcHQ7CgogIHN3aXRjaCAocGMpCiAgICB7 CiAgICBkZWZhdWx0OgogICAgICByZXR1cm4gcnhfZmFzdG1hcF9lcnJvcjsKICAgIGNhc2Ugcnhf ZmFzdG1hcF9zdGFydDoKICAgIGluaXRfZmFzdG1hcF9zZW50aW5hbDoKICAgICAgLyogRm9yIHRo ZSBzYWtlIG9mIGZhc3QgZmFzdG1hcHBpbmcsIHNldCBhIHNlbnRpbmFsIGluIHRoZSBmYXN0bWFw LgogICAgICAgKiBUaGlzIHNlbnRpbmFsIHdpbGwgdHJhcCB0aGUgZmFzdG1hcCBsb29wIHdoZW4g aXQgcmVhY2hlcyB0aGUgbGFzdAogICAgICAgKiB2YWxpZCBjaGFyYWN0ZXIgaW4gYSBzdHJpbmcg aGFsZi4KICAgICAgICoKICAgICAgICogVGhpcyBtdXN0IGJlIHJlc2V0IHdoZW4gdGhlIGZhc3Rt YXAvc2VhcmNoIGxvb3AgY3Jvc3NlcyBhIHN0cmluZyAKICAgICAgICogYm91bmRyeSwgYW5kIGJl Zm9yZSByZXR1cm5pbmcgdG8gdGhlIGNhbGxlci4gIFNvIHNvbWV0aW1lcywKICAgICAgICogdGhl IGZhc3RtYXAgbG9vcCBpcyByZXN0YXJ0ZWQgd2l0aCBgY29udGludWUnLCBvdGhlcnRpbWVzIGJ5 CiAgICAgICAqIGBnb3RvIGluaXRfZmFzdG1hcF9zZW50aW5hbCcuCiAgICAgICAqLwogICAgICBp ZiAoc2VhcmNoX3N0YXRlLT5vdXRlcl9wb3Muc2l6ZSkKCXsKCSAgc2VhcmNoX3N0YXRlLT5mYXN0 bWFwX2NociA9ICgoc2VhcmNoX3N0YXRlLT5vdXRlcl9wb3Muc2VhcmNoX2RpcmVjdGlvbiA9PSAx KQoJCQkJICAgICAgID8gKihzZWFyY2hfc3RhdGUtPm91dGVyX3Bvcy5lbmQgLSAxKQoJCQkJICAg ICAgIDogKnNlYXJjaF9zdGF0ZS0+b3V0ZXJfcG9zLnN0cmluZyk7CgkgIHNlYXJjaF9zdGF0ZS0+ ZmFzdG1hcF92YWwKCSAgICA9IHNlYXJjaF9zdGF0ZS0+ZmFzdG1hcFtzZWFyY2hfc3RhdGUtPmZh c3RtYXBfY2hyXTsKCSAgc2VhcmNoX3N0YXRlLT5mYXN0bWFwW3NlYXJjaF9zdGF0ZS0+ZmFzdG1h cF9jaHJdID0gMTsKCX0KICAgICAgZWxzZQoJewoJICBzZWFyY2hfc3RhdGUtPmZhc3RtYXBfY2hy ID0gLTE7CgkgIHNlYXJjaF9zdGF0ZS0+ZmFzdG1hcF92YWwgPSAwOwoJfQogICAgICAKICAgICAg aWYgKHNlYXJjaF9zdGF0ZS0+b3V0ZXJfcG9zLnBvcyA+PSBzZWFyY2hfc3RhdGUtPm91dGVyX3Bv cy5lbmQpCglnb3RvIGZhc3RtYXBfaGl0X2JvdW5kOwogICAgICBlbHNlCgl7CgkgIGlmIChzZWFy Y2hfc3RhdGUtPm91dGVyX3Bvcy5zZWFyY2hfZGlyZWN0aW9uID09IDEpCgkgICAgewoJICAgICAg aWYgKHNlYXJjaF9zdGF0ZS0+ZmFzdG1hcF92YWwpCgkJewoJCSAgZm9yICg7OykKCQkgICAgewoJ CSAgICAgIHdoaWxlICghc2VhcmNoX3N0YXRlLT5mYXN0bWFwWypzZWFyY2hfc3RhdGUtPm91dGVy X3Bvcy5wb3NdKQoJCQkrK3NlYXJjaF9zdGF0ZS0+b3V0ZXJfcG9zLnBvczsKCQkgICAgICByZXR1 cm4gcnhfZmFzdG1hcF9vazsKCQkgICAgfQoJCX0KCSAgICAgIGVsc2UKCQl7CgkJICBmb3IgKDs7 KQoJCSAgICB7CgkJICAgICAgd2hpbGUgKCFzZWFyY2hfc3RhdGUtPmZhc3RtYXBbKnNlYXJjaF9z dGF0ZS0+b3V0ZXJfcG9zLnBvc10pCgkJCSsrc2VhcmNoX3N0YXRlLT5vdXRlcl9wb3MucG9zOwoJ CSAgICAgIGlmICgqc2VhcmNoX3N0YXRlLT5vdXRlcl9wb3MucG9zICE9IHNlYXJjaF9zdGF0ZS0+ ZmFzdG1hcF9jaHIpCgkJCXJldHVybiByeF9mYXN0bWFwX29rOwoJCSAgICAgIGVsc2UgCgkJCXsK CQkJICArK3NlYXJjaF9zdGF0ZS0+b3V0ZXJfcG9zLnBvczsKCQkJICBpZiAoc2VhcmNoX3N0YXRl LT5vdXRlcl9wb3MucG9zID09IHNlYXJjaF9zdGF0ZS0+b3V0ZXJfcG9zLmVuZCkKCQkJICAgIGdv dG8gZmFzdG1hcF9oaXRfYm91bmQ7CgkJCX0KCQkgICAgfQoJCX0KCSAgICB9CgkgIGVsc2UKCSAg ICB7CgkgICAgICBfX2NvbnN0X18gdW5zaWduZWQgY2hhciAqIGJvdW5kOwoJICAgICAgYm91bmQg PSBzZWFyY2hfc3RhdGUtPm91dGVyX3Bvcy5zdHJpbmcgLSAxOwoJICAgICAgaWYgKHNlYXJjaF9z dGF0ZS0+ZmFzdG1hcF92YWwpCgkJewoJCSAgZm9yICg7OykKCQkgICAgewoJCSAgICAgIHdoaWxl ICghc2VhcmNoX3N0YXRlLT5mYXN0bWFwWypzZWFyY2hfc3RhdGUtPm91dGVyX3Bvcy5wb3NdKQoJ CQktLXNlYXJjaF9zdGF0ZS0+b3V0ZXJfcG9zLnBvczsKCQkgICAgICByZXR1cm4gcnhfZmFzdG1h cF9vazsKCQkgICAgfQoJCX0KCSAgICAgIGVsc2UKCQl7CgkJICBmb3IgKDs7KQoJCSAgICB7CgkJ ICAgICAgd2hpbGUgKCFzZWFyY2hfc3RhdGUtPmZhc3RtYXBbKnNlYXJjaF9zdGF0ZS0+b3V0ZXJf cG9zLnBvc10pCgkJCS0tc2VhcmNoX3N0YXRlLT5vdXRlcl9wb3MucG9zOwoJCSAgICAgIGlmICgo KnNlYXJjaF9zdGF0ZS0+b3V0ZXJfcG9zLnBvcyAhPSBzZWFyY2hfc3RhdGUtPmZhc3RtYXBfY2hy KSB8fCBzZWFyY2hfc3RhdGUtPmZhc3RtYXBfdmFsKQoJCQlyZXR1cm4gcnhfZmFzdG1hcF9vazsK CQkgICAgICBlbHNlIAoJCQl7CgkJCSAgLS1zZWFyY2hfc3RhdGUtPm91dGVyX3Bvcy5wb3M7CgkJ CSAgaWYgKHNlYXJjaF9zdGF0ZS0+b3V0ZXJfcG9zLnBvcyA9PSBib3VuZCkKCQkJICAgIGdvdG8g ZmFzdG1hcF9oaXRfYm91bmQ7CgkJCX0KCQkgICAgfQoJCX0KCSAgICB9Cgl9CiAgICAgIAogICAg Y2FzZSByeF9mYXN0bWFwX3N0cmluZ19icmVhazoKICAgIGZhc3RtYXBfaGl0X2JvdW5kOgogICAg ICB7CgkvKiBJZiB3ZSBoaXQgYSBib3VuZCwgaXQgbWF5IGJlIHRpbWUgdG8gZmV0Y2ggYW5vdGhl ciBidXJzdAoJICogb2Ygc3RyaW5nLCBvciBpdCBtYXkgYmUgdGltZSB0byByZXR1cm4gYSBjb250 aW51YXRpb24gdG8gCiAJICogdGhlIGNhbGxlciwgb3IgaXQgbWlnaHQgYmUgdGltZSB0byBmYWls LgoJICovCgoJaW50IGJ1cnN0X3N0YXRlOwoJYnVyc3Rfc3RhdGUgPSBnZXRfYnVyc3QgKCZzZWFy Y2hfc3RhdGUtPm91dGVyX3BvcywgYXBwX2Nsb3N1cmUsIHN0b3ApOwoJc3dpdGNoIChidXJzdF9z dGF0ZSkKCSAgewoJICBkZWZhdWx0OgoJICBjYXNlIHJ4X2dldF9idXJzdF9lcnJvcjoKCSAgICBy ZXR1cm4gcnhfZmFzdG1hcF9lcnJvcjsKCSAgY2FzZSByeF9nZXRfYnVyc3RfY29udGludWF0aW9u OgoJICAgIHsKCSAgICAgIHBjID0gcnhfZmFzdG1hcF9zdHJpbmdfYnJlYWs7CgkgICAgICBnb3Rv IHJldHVybl9jb250aW51YXRpb247CgkgICAgfQoJICBjYXNlIHJ4X2dldF9idXJzdF9vazoKCSAg ICBnb3RvIGluaXRfZmFzdG1hcF9zZW50aW5hbDsKCSAgY2FzZSByeF9nZXRfYnVyc3Rfbm9fbW9y ZToKCSAgICAvKiAuLi5ub3QgYSBzdHJpbmcgc3BsaXQsIHNpbXBseSBubyBtb3JlIHN0cmluZy4g CgkgICAgICoKCSAgICAgKiBXaGVuIHNlYXJjaGluZyBiYWNrd2FyZCwgcnVubmluZyBvdXQgb2Yg c3RyaW5nCgkgICAgICogaXMgcmVhc29uIHRvIHF1aXQuCgkgICAgICoKCSAgICAgKiBXaGVuIHNl YXJjaGluZyBmb3J3YXJkLCB3ZSBhbGxvdyB0aGUgcG9zc2liaWxpdHkKCSAgICAgKiBvZiBhbiAo ZW1wdHkpIG1hdGNoIGFmdGVyIHRoZSBsYXN0IGNoYXJhY3RlciBpbiB0aGUKCSAgICAgKiB2aXJ0 dWFsIHN0cmluZy4gIFNvLCBmYWxsIHRocm91Z2ggdG8gdGhlIG1hdGNoZXIKCSAgICAgKi8KCSAg ICByZXR1cm4gKCAgKHNlYXJjaF9zdGF0ZS0+b3V0ZXJfcG9zLnNlYXJjaF9kaXJlY3Rpb24gPT0g MSkKCQkgICAgPyByeF9mYXN0bWFwX29rCgkJICAgIDogcnhfZmFzdG1hcF9mYWlsKTsKCSAgfQog ICAgICB9CiAgICB9Cgp9CgoMCgojaWZkZWYgZW1hY3MKLyogVGhlIGBlbWFjcycgc3dpdGNoIHR1 cm5zIG9uIGNlcnRhaW4gbWF0Y2hpbmcgY29tbWFuZHMKICogdGhhdCBtYWtlIHNlbnNlIG9ubHkg aW4gRW1hY3MuIAogKi8KI2luY2x1ZGUgImNvbmZpZy5oIgojaW5jbHVkZSAibGlzcC5oIgojaW5j bHVkZSAiYnVmZmVyLmgiCiNpbmNsdWRlICJzeW50YXguaCIKI2VuZGlmIC8qIGVtYWNzICovCgov KiBTZXR0aW5nIFJYX01FTURCVUcgaXMgdXNlZnVsIGlmIHlvdSBoYXZlIGRibWFsbG9jLiAgTWF5 YmUgd2l0aCBzaW1pbGFyCiAqIHBhY2thZ2VzIHRvby4KICovCiNpZmRlZiBSWF9NRU1EQlVHCiNp bmNsdWRlIDxtYWxsb2MuaD4KI2VuZGlmIC8qIFJYX1JYX01FTURCVUcgKi8KCi8qIFdlIHVzZWQg dG8gdGVzdCBmb3IgYEJTVFJJTkcnIGhlcmUsIGJ1dCBvbmx5IEdDQyBhbmQgRW1hY3MgZGVmaW5l CiAqIGBCU1RSSU5HJywgYXMgZmFyIGFzIEkga25vdywgYW5kIG5laXRoZXIgb2YgdGhlbSB1c2Ug dGhpcyBjb2RlLiAgCiAqLwojaWYgSEFWRV9TVFJJTkdfSCB8fCBTVERDX0hFQURFUlMKI2luY2x1 ZGUgPHN0cmluZy5oPgoKI2lmbmRlZiBiY21wCiNkZWZpbmUgYmNtcChzMSwgczIsIG4pCW1lbWNt cCAoKHMxKSwgKHMyKSwgKG4pKQojZW5kaWYKCiNpZm5kZWYgYmNvcHkKI2RlZmluZSBiY29weShz LCBkLCBuKQltZW1jcHkgKChkKSwgKHMpLCAobikpCiNlbmRpZgoKI2lmbmRlZiBiemVybwojZGVm aW5lIGJ6ZXJvKHMsIG4pCW1lbXNldCAoKHMpLCAwLCAobikpCiNlbmRpZgoKI2Vsc2UgLyogIEhB VkVfU1RSSU5HX0ggfHwgU1REQ19IRUFERVJTICovCiNpbmNsdWRlIDxzdHJpbmdzLmg+CiNlbmRp ZiAgIC8qIG5vdCAoSEFWRV9TVFJJTkdfSCB8fCBTVERDX0hFQURFUlMpICovCgojaWZkZWYgU1RE Q19IRUFERVJTCiNpbmNsdWRlIDxzdGRsaWIuaD4KI2Vsc2UgLyogbm90IFNURENfSEVBREVSUyAq LwpjaGFyICptYWxsb2MgKCk7CmNoYXIgKnJlYWxsb2MgKCk7CiNlbmRpZiAvKiBub3QgU1REQ19I RUFERVJTICovCgoKDAoKLyogSG93IG1hbnkgY2hhcmFjdGVycyBpbiB0aGUgY2hhcmFjdGVyIHNl dC4gICovCiNkZWZpbmUgQ0hBUl9TRVRfU0laRSAoMSA8PCBDSEFSQklUUykKCiNpZm5kZWYgZW1h Y3MKLyogRGVmaW5lIHRoZSBzeW50YXggYmFzaWNzIGZvciBcPCwgXD4sIGV0Yy4KICogVGhpcyBt dXN0IGJlIG5vbnplcm8gZm9yIHRoZSB3b3JkY2hhciBhbmQgbm90d29yZGNoYXIgcGF0dGVybgog KiBjb21tYW5kcyBpbiByZV9tYXRjaF8yLgogKi8KI2lmbmRlZiBTd29yZCAKI2RlZmluZSBTd29y ZCAxCiNlbmRpZgojZGVmaW5lIFNZTlRBWChjKSByZV9zeW50YXhfdGFibGVbY10KUlhfREVDTCBj aGFyIHJlX3N5bnRheF90YWJsZVtDSEFSX1NFVF9TSVpFXTsKI2VuZGlmIC8qIG5vdCBlbWFjcyAq LwoKCi8qIFRlc3QgaWYgYXQgdmVyeSBiZWdpbm5pbmcgb3IgYXQgdmVyeSBlbmQgb2YgdGhlIHZp cnR1YWwgY29uY2F0ZW5hdGlvbgogKiAgb2YgYHN0cmluZzEnIGFuZCBgc3RyaW5nMicuICBJZiBv bmx5IG9uZSBzdHJpbmcsIGl0J3MgYHN0cmluZzInLiAgCiAqLwoKI2RlZmluZSBBVF9TVFJJTkdT X0JFRygpIFwKICAoICAgLTEJCSBcCiAgID09ICgoc2VhcmNoX3N0YXRlLnRlc3RfcG9zLnBvcyAt IHNlYXJjaF9zdGF0ZS50ZXN0X3Bvcy5zdHJpbmcpIFwKICAgICAgICsgc2VhcmNoX3N0YXRlLnRl c3RfcG9zLm9mZnNldCkpCgojZGVmaW5lIEFUX1NUUklOR1NfRU5EKCkgXAogICggICAodG90YWxf c2l6ZSAtIDEpCSBcCiAgID09ICgoc2VhcmNoX3N0YXRlLnRlc3RfcG9zLnBvcyAtIHNlYXJjaF9z dGF0ZS50ZXN0X3Bvcy5zdHJpbmcpIFwKICAgICAgICsgc2VhcmNoX3N0YXRlLnRlc3RfcG9zLm9m ZnNldCkpCgoKLyogVGVzdCBpZiBQT1MgKyAxIHBvaW50cyB0byBhIGNoYXJhY3RlciB3aGljaCBp cyB3b3JkLWNvbnN0aXR1ZW50LiAgV2UgaGF2ZQogKiB0d28gc3BlY2lhbCBjYXNlcyB0byBjaGVj ayBmb3I6IGlmIHBhc3QgdGhlIGVuZCBvZiBzdHJpbmcxLCBsb29rIGF0CiAqIHRoZSBmaXJzdCBj aGFyYWN0ZXIgaW4gc3RyaW5nMjsgYW5kIGlmIGJlZm9yZSB0aGUgYmVnaW5uaW5nIG9mCiAqIHN0 cmluZzIsIGxvb2sgYXQgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHN0cmluZzEuCiAqCiAqIEFzc3Vt ZXMgYHN0cmluZzEnIGV4aXN0cywgc28gdXNlIGluIGNvbmp1bmN0aW9uIHdpdGggQVRfU1RSSU5H U19CRUcgKCkuICAKICovCiNkZWZpbmUgTEVUVEVSX1AoUE9TLE9GRikJCQkJCQlcCiAgKCAgIFNZ TlRBWCAoZmV0Y2hfY2hhcihQT1MsIE9GRiwgYXBwX2Nsb3N1cmUsIHN0b3ApKQkJCVwKICAgPT0g U3dvcmQpCgovKiBUZXN0IGlmIHRoZSBjaGFyYWN0ZXIgYXQgRCBhbmQgdGhlIG9uZSBhZnRlciBE IGRpZmZlciB3aXRoIHJlc3BlY3QKICogdG8gYmVpbmcgd29yZC1jb25zdGl0dWVudC4gIAogKi8K I2RlZmluZSBBVF9XT1JEX0JPVU5EQVJZKGQpCQkJCQkJXAogIChBVF9TVFJJTkdTX0JFRyAoKSB8 fCBBVF9TVFJJTkdTX0VORCAoKSB8fCBMRVRURVJfUCAoZCwwKSAhPSBMRVRURVJfUCAoZCwgMSkp CgoKI2lmZGVmIFJYX1NVUFBPUlRfQ09OVElOVUFUSU9OUwojZGVmaW5lIFJYX1NUQUNLX0FMTE9D KEJZVEVTKSBtYWxsb2MoQllURVMpCiNkZWZpbmUgUlhfU1RBQ0tfRlJFRShNRU0pIGZyZWUoTUVN KQojZWxzZQojZGVmaW5lIFJYX1NUQUNLX0FMTE9DKEJZVEVTKSBhbGxvY2EoQllURVMpCiNkZWZp bmUgUlhfU1RBQ0tfRlJFRShNRU0pIFwKICAgICAgKChzdHJ1Y3Qgcnhfc3RhY2tfY2h1bmsgKilN RU0pLT5uZXh0X2NodW5rID0gc2VhcmNoX3N0YXRlLmZyZWVfY2h1bmtzOyBcCiAgICAgIHNlYXJj aF9zdGF0ZS5mcmVlX2NodW5rcyA9ICgoc3RydWN0IHJ4X3N0YWNrX2NodW5rICopTUVNKTsKCiNl bmRpZgoKI2RlZmluZSBQVVNIKENIVU5LX1ZBUixCWVRFUykgICBcCiAgaWYgKCFDSFVOS19WQVIg fHwgKENIVU5LX1ZBUi0+Ynl0ZXNfbGVmdCA8IChCWVRFUykpKSAgXAogICAgewkJCQkJXAogICAg ICBzdHJ1Y3Qgcnhfc3RhY2tfY2h1bmsgKiBuZXdfY2h1bms7CVwKICAgICAgaWYgKHNlYXJjaF9z dGF0ZS5mcmVlX2NodW5rcykJCQlcCgl7CQkJCVwKCSAgbmV3X2NodW5rID0gc2VhcmNoX3N0YXRl LmZyZWVfY2h1bmtzOwlcCgkgIHNlYXJjaF9zdGF0ZS5mcmVlX2NodW5rcyA9IHNlYXJjaF9zdGF0 ZS5mcmVlX2NodW5rcy0+bmV4dF9jaHVuazsgXAoJfQkJCQlcCiAgICAgIGVsc2UJCQkJXAoJewkJ CQlcCgkgIG5ld19jaHVuayA9IChzdHJ1Y3Qgcnhfc3RhY2tfY2h1bmsgKilSWF9TVEFDS19BTExP QyhzZWFyY2hfc3RhdGUuY2h1bmtfYnl0ZXMpOyBcCgkgIGlmICghbmV3X2NodW5rKQkJXAoJICAg IHsJCQkJXAoJICAgICAgc2VhcmNoX3N0YXRlLnJldF92YWwgPSAwOwkJXAoJICAgICAgZ290byB0 ZXN0X2RvX3JldHVybjsJXAoJICAgIH0JCQkJXAoJfQkJCQlcCiAgICAgIG5ld19jaHVuay0+c3Ag PSAoY2hhciAqKW5ld19jaHVuayArIHNpemVvZiAoc3RydWN0IHJ4X3N0YWNrX2NodW5rKTsgXAog ICAgICBuZXdfY2h1bmstPmJ5dGVzX2xlZnQgPSAoc2VhcmNoX3N0YXRlLmNodW5rX2J5dGVzIFwK CQkJICAgICAgIC0gKEJZVEVTKSBcCgkJCSAgICAgICAtIHNpemVvZiAoc3RydWN0IHJ4X3N0YWNr X2NodW5rKSk7IFwKICAgICAgbmV3X2NodW5rLT5uZXh0X2NodW5rID0gQ0hVTktfVkFSOyBcCiAg ICAgIENIVU5LX1ZBUiA9IG5ld19jaHVuazsJCVwKICAgIH0gXAogIGVsc2UgXAogICAgKENIVU5L X1ZBUi0+c3AgKz0gKEJZVEVTKSksIChDSFVOS19WQVItPmJ5dGVzX2xlZnQgLT0gKEJZVEVTKSkK CiNkZWZpbmUgUE9QKENIVU5LX1ZBUixCWVRFUykgXAogIGlmIChDSFVOS19WQVItPnNwID09ICgo Y2hhciAqKUNIVU5LX1ZBUiArIHNpemVvZigqQ0hVTktfVkFSKSkpIFwKICAgIHsgXAogICAgICBz dHJ1Y3Qgcnhfc3RhY2tfY2h1bmsgKiBuZXdfY2h1bmsgPSBDSFVOS19WQVItPm5leHRfY2h1bms7 IFwKICAgICAgUlhfU1RBQ0tfRlJFRShDSFVOS19WQVIpOyBcCiAgICAgIENIVU5LX1ZBUiA9IG5l d19jaHVuazsgXAogICAgfSBcCiAgZWxzZSBcCiAgICAoQ0hVTktfVkFSLT5zcCAtPSBCWVRFUyks IChDSFVOS19WQVItPmJ5dGVzX2xlZnQgKz0gQllURVMpCgoKCiNkZWZpbmUgU1JDSF9UUkFOU0xB VEUoQykgIHNlYXJjaF9zdGF0ZS50cmFuc2xhdGVbKHVuc2lnbmVkIGNoYXIpIChDKV0KCgoMCgoj aWZkZWYgX19TVERDX18KUlhfREVDTCBfX2lubGluZV9fIGludApyeF9zZWFyY2ggIChzdHJ1Y3Qg cmVfcGF0dGVybl9idWZmZXIgKiByeGIsCgkgICAgaW50IHN0YXJ0cG9zLAoJICAgIGludCByYW5n ZSwKCSAgICBpbnQgc3RvcCwKCSAgICBpbnQgdG90YWxfc2l6ZSwKCSAgICByeF9nZXRfYnVyc3Rf Zm4gZ2V0X2J1cnN0LAoJICAgIHJ4X2JhY2tfY2hlY2tfZm4gYmFja19jaGVjaywKCSAgICByeF9m ZXRjaF9jaGFyX2ZuIGZldGNoX2NoYXIsCgkgICAgdm9pZCAqIGFwcF9jbG9zdXJlLAoJICAgIHN0 cnVjdCByZV9yZWdpc3RlcnMgKiByZWdzLAoJICAgIHN0cnVjdCByeF9zZWFyY2hfc3RhdGUgKiBy ZXN1bWVfc3RhdGUsCgkgICAgc3RydWN0IHJ4X3NlYXJjaF9zdGF0ZSAqIHNhdmVfc3RhdGUpCiNl bHNlClJYX0RFQ0wgX19pbmxpbmVfXyBpbnQKcnhfc2VhcmNoICAocnhiLCBzdGFydHBvcywgcmFu Z2UsIHN0b3AsIHRvdGFsX3NpemUsCgkgICAgZ2V0X2J1cnN0LCBiYWNrX2NoZWNrLCBmZXRjaF9j aGFyLAoJICAgIGFwcF9jbG9zdXJlLCByZWdzLCByZXN1bWVfc3RhdGUsIHNhdmVfc3RhdGUpCiAg ICAgc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICogcnhiOwogICAgIGludCBzdGFydHBvczsKICAg ICBpbnQgcmFuZ2U7CiAgICAgaW50IHN0b3A7CiAgICAgaW50IHRvdGFsX3NpemU7CiAgICAgcnhf Z2V0X2J1cnN0X2ZuIGdldF9idXJzdDsKICAgICByeF9iYWNrX2NoZWNrX2ZuIGJhY2tfY2hlY2s7 CiAgICAgcnhfZmV0Y2hfY2hhcl9mbiBmZXRjaF9jaGFyOwogICAgIHZvaWQgKiBhcHBfY2xvc3Vy ZTsKICAgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICogcmVnczsKICAgICBzdHJ1Y3Qgcnhfc2VhcmNo X3N0YXRlICogcmVzdW1lX3N0YXRlOwogICAgIHN0cnVjdCByeF9zZWFyY2hfc3RhdGUgKiBzYXZl X3N0YXRlOwojZW5kaWYKewogIGludCBwYzsKICBpbnQgdGVzdF9zdGF0ZTsKICBzdHJ1Y3Qgcnhf c2VhcmNoX3N0YXRlIHNlYXJjaF9zdGF0ZTsKCiAgc2VhcmNoX3N0YXRlLmZyZWVfY2h1bmtzID0g MDsKICBpZiAoIXJlc3VtZV9zdGF0ZSkKICAgIHBjID0gcnhfb3V0ZXJfc3RhcnQ7CiAgZWxzZQog ICAgewogICAgICBzZWFyY2hfc3RhdGUgPSAqcmVzdW1lX3N0YXRlOwogICAgICByZWdzID0gc2Vh cmNoX3N0YXRlLnNhdmVkX3JlZ3M7CiAgICAgIHJ4YiA9IHNlYXJjaF9zdGF0ZS5zYXZlZF9yeGI7 CiAgICAgIHN0YXJ0cG9zID0gc2VhcmNoX3N0YXRlLnNhdmVkX3N0YXJ0cG9zOwogICAgICByYW5n ZSA9IHNlYXJjaF9zdGF0ZS5zYXZlZF9yYW5nZTsKICAgICAgc3RvcCA9IHNlYXJjaF9zdGF0ZS5z YXZlZF9zdG9wOwogICAgICB0b3RhbF9zaXplID0gc2VhcmNoX3N0YXRlLnNhdmVkX3RvdGFsX3Np emU7CiAgICAgIGdldF9idXJzdCA9IHNlYXJjaF9zdGF0ZS5zYXZlZF9nZXRfYnVyc3Q7CiAgICAg IGJhY2tfY2hlY2sgPSBzZWFyY2hfc3RhdGUuc2F2ZWRfYmFja19jaGVjazsKICAgICAgcGMgPSBz ZWFyY2hfc3RhdGUub3V0ZXJfc2VhcmNoX3Jlc3VtZV9wdDsKICAgICAgaWYgKDApCgl7CglyZXR1 cm5fY29udGludWF0aW9uOgoJICBpZiAoc2F2ZV9zdGF0ZSkKCSAgICB7CgkgICAgICAqc2F2ZV9z dGF0ZSA9IHNlYXJjaF9zdGF0ZTsKCSAgICAgIHNhdmVfc3RhdGUtPnNhdmVkX3JlZ3MgPSByZWdz OwoJICAgICAgc2F2ZV9zdGF0ZS0+c2F2ZWRfcnhiID0gcnhiOwoJICAgICAgc2F2ZV9zdGF0ZS0+ c2F2ZWRfc3RhcnRwb3MgPSBzdGFydHBvczsKCSAgICAgIHNhdmVfc3RhdGUtPnNhdmVkX3Jhbmdl ID0gcmFuZ2U7CgkgICAgICBzYXZlX3N0YXRlLT5zYXZlZF9zdG9wID0gc3RvcDsKCSAgICAgIHNh dmVfc3RhdGUtPnNhdmVkX3RvdGFsX3NpemUgPSB0b3RhbF9zaXplOwoJICAgICAgc2F2ZV9zdGF0 ZS0+c2F2ZWRfZ2V0X2J1cnN0ID0gZ2V0X2J1cnN0OwoJICAgICAgc2F2ZV9zdGF0ZS0+c2F2ZWRf YmFja19jaGVjayA9IGJhY2tfY2hlY2s7CgkgICAgICBzYXZlX3N0YXRlLT5vdXRlcl9zZWFyY2hf cmVzdW1lX3B0ID0gcGM7CgkgICAgfQoJICByZXR1cm4gcnhfc2VhcmNoX2NvbnRpbnVhdGlvbjsK CX0KICAgIH0KCiAgc3dpdGNoIChwYykKICAgIHsKICAgIGNhc2Ugcnhfb3V0ZXJfc3RhcnQ6CiAg ICAgIHNlYXJjaF9zdGF0ZS5yZXRfdmFsID0gcnhfc2VhcmNoX2ZhaWw7CiAgICAgICggIHNlYXJj aF9zdGF0ZS5scGFyZW4KICAgICAgID0gc2VhcmNoX3N0YXRlLnJwYXJlbgogICAgICAgPSBzZWFy Y2hfc3RhdGUuYmVzdF9scHNwYWNlCiAgICAgICA9IHNlYXJjaF9zdGF0ZS5iZXN0X3Jwc3BhY2UK ICAgICAgID0gMCk7CiAgICAgIAogICAgICAvKiBmaWd1cmUgdGhlIG51bWJlciBvZiByZWdpc3Rl cnMgd2UgbWF5IG5lZWQgZm9yIHVzZSBpbiBiYWNrcmVmZXJlbmNlcy4KICAgICAgICogdGhlIG51 bWJlciBoZXJlIGluY2x1ZGVzIGFuIGVsZW1lbnQgZm9yIHJlZ2lzdGVyIHplcm8uICAKICAgICAg ICovCiAgICAgIHNlYXJjaF9zdGF0ZS5udW1fcmVncyA9IHJ4Yi0+cmVfbnN1YiArIDE7CiAgICAg IAogICAgICAKICAgICAgLyogY2hlY2sgZm9yIG91dC1vZi1yYW5nZSBzdGFydHBvcy4gICovCiAg ICAgIGlmICgoc3RhcnRwb3MgPCAwKSB8fCAoc3RhcnRwb3MgPiB0b3RhbF9zaXplKSkKCXJldHVy biByeF9zZWFyY2hfZmFpbDsKICAgICAgCiAgICAgIC8qIGZpeCB1cCByYW5nZSBpZiBpdCBtaWdo dCBldmVudHVhbGx5IHRha2UgdXMgb3V0c2lkZSB0aGUgc3RyaW5nLiAqLwogICAgICB7CglpbnQg ZW5kcG9zOwoJZW5kcG9zID0gc3RhcnRwb3MgKyByYW5nZTsKCWlmIChlbmRwb3MgPCAtMSkKCSAg cmFuZ2UgPSAoLTEgLSBzdGFydHBvcyk7CgllbHNlIGlmIChlbmRwb3MgPiAodG90YWxfc2l6ZSAr IDEpKQoJICByYW5nZSA9IHRvdGFsX3NpemUgLSBzdGFydHBvczsKICAgICAgfQogICAgICAKICAg ICAgLyogaWYgdGhlIHNlYXJjaCBpc24ndCB0byBiZSBhIGJhY2t3YXJkcyBvbmUsIGRvbid0IHdh c3RlIHRpbWUgaW4gYQogICAgICAgKiBsb25nIHNlYXJjaCBmb3IgYSBwYXR0ZXJuIHRoYXQgc2F5 cyBpdCBpcyBhbmNob3JlZC4KICAgICAgICovCiAgICAgIGlmIChyeGItPmJlZ2J1Zl9vbmx5ICYm IChyYW5nZSA+IDApKQoJewoJICBpZiAoc3RhcnRwb3MgPiAwKQoJICAgIHJldHVybiByeF9zZWFy Y2hfZmFpbDsKCSAgZWxzZQoJICAgIHJhbmdlID0gMTsKCX0KICAgICAgCiAgICAgIC8qIGRlY2lk ZSB3aGV0aGVyIHRvIHVzZSBpbnRlcm5hbCBvciB1c2VyLXByb3ZpZGVkIHJlZyBidWZmZXJzLiAq LwogICAgICBpZiAoIXJlZ3MgfHwgcnhiLT5ub19zdWIpCgl7CgkgIHNlYXJjaF9zdGF0ZS5iZXN0 X2xwc3BhY2UgPQoJICAgIChyZWdvZmZfdCAqKVJFR0VYX0FMTE9DQVRFIChzZWFyY2hfc3RhdGUu bnVtX3JlZ3MgKiBzaXplb2YocmVnb2ZmX3QpKTsKCSAgc2VhcmNoX3N0YXRlLmJlc3RfcnBzcGFj ZSA9CgkgICAgKHJlZ29mZl90ICopUkVHRVhfQUxMT0NBVEUgKHNlYXJjaF9zdGF0ZS5udW1fcmVn cyAqIHNpemVvZihyZWdvZmZfdCkpOwoJICBzZWFyY2hfc3RhdGUuYmVzdF9scGFyZW4gPSBzZWFy Y2hfc3RhdGUuYmVzdF9scHNwYWNlOwoJICBzZWFyY2hfc3RhdGUuYmVzdF9ycGFyZW4gPSBzZWFy Y2hfc3RhdGUuYmVzdF9ycHNwYWNlOwoJfQogICAgICBlbHNlCgl7CQoJICAvKiBoYXZlIHRoZSBy ZWdpc3RlciBkYXRhIGFycmF5cyBiZWVuIGFsbG9jYXRlZD8gICovCgkgIGlmIChyeGItPnJlZ3Nf YWxsb2NhdGVkID09IFJFR1NfVU5BTExPQ0FURUQpCgkgICAgeyAvKiBuby4gIHNvIGFsbG9jYXRl IHRoZW0gd2l0aCBtYWxsb2MuICB3ZSBuZWVkIG9uZQoJCSBleHRyYSBlbGVtZW50IGJleW9uZCBg c2VhcmNoX3N0YXRlLm51bV9yZWdzJyBmb3IgdGhlIGAtMScgbWFya2VyCgkJIGdudSBjb2RlIHVz ZXMuICAqLwoJICAgICAgcmVncy0+bnVtX3JlZ3MgPSBNQVggKFJFX05SRUdTLCByeGItPnJlX25z dWIgKyAxKTsKCSAgICAgIHJlZ3MtPnN0YXJ0ID0gKChyZWdvZmZfdCAqKQoJCQkgICAgIG1hbGxv YyAocmVncy0+bnVtX3JlZ3MgKiBzaXplb2YgKCByZWdvZmZfdCkpKTsKCSAgICAgIHJlZ3MtPmVu ZCA9ICgocmVnb2ZmX3QgKikKCQkJICAgbWFsbG9jIChyZWdzLT5udW1fcmVncyAqIHNpemVvZiAo IHJlZ29mZl90KSkpOwoJICAgICAgaWYgKHJlZ3MtPnN0YXJ0ID09IDAgfHwgcmVncy0+ZW5kID09 IDApCgkJcmV0dXJuIHJ4X3NlYXJjaF9lcnJvcjsKCSAgICAgIHJ4Yi0+cmVnc19hbGxvY2F0ZWQg PSBSRUdTX1JFQUxMT0NBVEU7CgkgICAgfQoJICBlbHNlIGlmIChyeGItPnJlZ3NfYWxsb2NhdGVk ID09IFJFR1NfUkVBTExPQ0FURSkKCSAgICB7IC8qIHllcy4gIGlmIHdlIG5lZWQgbW9yZSBlbGVt ZW50cyB0aGFuIHdlcmUgYWxyZWFkeQoJCSBhbGxvY2F0ZWQsIHJlYWxsb2NhdGUgdGhlbS4gIGlm IHdlIG5lZWQgZmV3ZXIsIGp1c3QKCQkgbGVhdmUgaXQgYWxvbmUuICAqLwoJICAgICAgaWYgKHJl Z3MtPm51bV9yZWdzIDwgc2VhcmNoX3N0YXRlLm51bV9yZWdzICsgMSkKCQl7CgkJICByZWdzLT5u dW1fcmVncyA9IHNlYXJjaF9zdGF0ZS5udW1fcmVncyArIDE7CgkJICByZWdzLT5zdGFydCA9ICgo cmVnb2ZmX3QgKikKCQkJCSByZWFsbG9jIChyZWdzLT5zdGFydCwKCQkJCQkgIHJlZ3MtPm51bV9y ZWdzICogc2l6ZW9mIChyZWdvZmZfdCkpKTsKCQkgIHJlZ3MtPmVuZCA9ICgocmVnb2ZmX3QgKikK CQkJICAgICAgIHJlYWxsb2MgKHJlZ3MtPmVuZCwKCQkJCQlyZWdzLT5udW1fcmVncyAqIHNpemVv ZiAoIHJlZ29mZl90KSkpOwoJCSAgaWYgKHJlZ3MtPnN0YXJ0ID09IDAgfHwgcmVncy0+ZW5kID09 IDApCgkJICAgIHJldHVybiByeF9zZWFyY2hfZXJyb3I7CgkJfQoJICAgIH0KCSAgZWxzZSBpZiAo cnhiLT5yZWdzX2FsbG9jYXRlZCAhPSBSRUdTX0ZJWEVEKQoJICAgIHJldHVybiByeF9zZWFyY2hf ZXJyb3I7CgkgIAoJICBpZiAocmVncy0+bnVtX3JlZ3MgPCBzZWFyY2hfc3RhdGUubnVtX3JlZ3Mg KyAxKQoJICAgIHsKCSAgICAgIHNlYXJjaF9zdGF0ZS5iZXN0X2xwc3BhY2UgPQoJCSgocmVnb2Zm X3QgKikKCQkgUkVHRVhfQUxMT0NBVEUgKHNlYXJjaF9zdGF0ZS5udW1fcmVncyAqIHNpemVvZihy ZWdvZmZfdCkpKTsKCSAgICAgIHNlYXJjaF9zdGF0ZS5iZXN0X3Jwc3BhY2UgPQoJCSgocmVnb2Zm X3QgKikKCQkgUkVHRVhfQUxMT0NBVEUgKHNlYXJjaF9zdGF0ZS5udW1fcmVncyAqIHNpemVvZihy ZWdvZmZfdCkpKTsKCSAgICAgIHNlYXJjaF9zdGF0ZS5iZXN0X2xwYXJlbiA9IHNlYXJjaF9zdGF0 ZS5iZXN0X2xwc3BhY2U7CgkgICAgICBzZWFyY2hfc3RhdGUuYmVzdF9ycGFyZW4gPSBzZWFyY2hf c3RhdGUuYmVzdF9ycHNwYWNlOwoJICAgIH0KCSAgZWxzZQoJICAgIHsKCSAgICAgIHNlYXJjaF9z dGF0ZS5iZXN0X2xwYXJlbiA9IHJlZ3MtPnN0YXJ0OwoJICAgICAgc2VhcmNoX3N0YXRlLmJlc3Rf cnBhcmVuID0gcmVncy0+ZW5kOwoJICAgIH0KCX0KICAgICAgCiAgICAgIHNlYXJjaF9zdGF0ZS5s cGFyZW4gPQoJKHJlZ29mZl90ICopIFJFR0VYX0FMTE9DQVRFIChzZWFyY2hfc3RhdGUubnVtX3Jl Z3MgKiBzaXplb2YocmVnb2ZmX3QpKTsKICAgICAgc2VhcmNoX3N0YXRlLnJwYXJlbiA9CgkocmVn b2ZmX3QgKikgUkVHRVhfQUxMT0NBVEUgKHNlYXJjaF9zdGF0ZS5udW1fcmVncyAqIHNpemVvZihy ZWdvZmZfdCkpOyAKICAgICAgCiAgICAgIGlmICghICggICBzZWFyY2hfc3RhdGUuYmVzdF9ycGFy ZW4KCSAgICAgJiYgc2VhcmNoX3N0YXRlLmJlc3RfbHBhcmVuCgkgICAgICYmIHNlYXJjaF9zdGF0 ZS5scGFyZW4gJiYgc2VhcmNoX3N0YXRlLnJwYXJlbikpCglyZXR1cm4gcnhfc2VhcmNoX2Vycm9y OwogICAgICAKICAgICAgc2VhcmNoX3N0YXRlLmJlc3RfbGFzdF9sID0gc2VhcmNoX3N0YXRlLmJl c3RfbGFzdF9yID0gLTE7CiAgICAgIAogICAgICBzZWFyY2hfc3RhdGUudHJhbnNsYXRlID0gKHJ4 Yi0+dHJhbnNsYXRlCgkJCQk/IHJ4Yi0+dHJhbnNsYXRlCgkJCQk6IHJ4X2lkX3RyYW5zbGF0aW9u KTsKICAgICAgCiAgICAgIAogICAgICAKICAgICAgLyoKICAgICAgICogdHdvIG5mYSdzIHdlcmUg Y29tcGlsZWQuICAKICAgICAgICogYDAnIGlzIGNvbXBsZXRlLgogICAgICAgKiBgMScgZmFzdGVy IGJ1dCBnZXRzIHJlZ2lzdGVycyB3cm9uZyBhbmQgZW5kcyB0b28gc29vbi4KICAgICAgICovCiAg ICAgIHNlYXJjaF9zdGF0ZS5uZmFfY2hvaWNlID0gKHJlZ3MgJiYgIXJ4Yi0+bGVhc3Rfc3Vicykg PyAnXDAnIDogJ1wxJzsKICAgICAgCiAgICAgIC8qIHdlIGhhdmUgdGhlIG9wdGlvbiB0byBsb29r IGZvciB0aGUgYmVzdCBtYXRjaCBvciB0aGUgZmlyc3QKICAgICAgICogb25lIHdlIGNhbiBmaW5k LiAgaWYgdGhlIHVzZXIgaXNuJ3QgYXNraW5nIGZvciByZWdpc3RlciBpbmZvcm1hdGlvbiwKICAg ICAgICogd2UgZG9uJ3QgbmVlZCB0byBmaW5kIHRoZSBiZXN0IG1hdGNoLgogICAgICAgKi8KICAg ICAgc2VhcmNoX3N0YXRlLmZpcnN0X2ZvdW5kID0gIXJlZ3M7CiAgICAgIAogICAgICBpZiAocmFu Z2UgPj0gMCkKCXsKCSAgc2VhcmNoX3N0YXRlLm91dGVyX3Bvcy5zZWFyY2hfZW5kID0gc3RhcnRw b3MgKyByYW5nZTsKCSAgc2VhcmNoX3N0YXRlLm91dGVyX3Bvcy5zZWFyY2hfZGlyZWN0aW9uID0g MTsKCX0KICAgICAgZWxzZQoJewoJICBzZWFyY2hfc3RhdGUub3V0ZXJfcG9zLnNlYXJjaF9lbmQg PSBzdGFydHBvcyArIHJhbmdlOwoJICBzZWFyY2hfc3RhdGUub3V0ZXJfcG9zLnNlYXJjaF9kaXJl Y3Rpb24gPSAtMTsKCX0KICAgICAgCiAgICAgIC8qIHRoZSB2YWN1b3VzIHNlYXJjaCBhbHdheXMg dHVybnMgdXAgbm90aGluZy4gKi8KICAgICAgaWYgKChzZWFyY2hfc3RhdGUub3V0ZXJfcG9zLnNl YXJjaF9kaXJlY3Rpb24gPT0gMSkKCSAgPyAoc3RhcnRwb3MgPiBzZWFyY2hfc3RhdGUub3V0ZXJf cG9zLnNlYXJjaF9lbmQpCgkgIDogKHN0YXJ0cG9zIDwgc2VhcmNoX3N0YXRlLm91dGVyX3Bvcy5z ZWFyY2hfZW5kKSkKCXJldHVybiByeF9zZWFyY2hfZmFpbDsKICAgICAgCiAgICAgIC8qIG5vdyB3 ZSBidWlsZCB0aGUgc3RhcnRpbmcgc3RhdGUgb2YgdGhlIHN1cGVybmZhLiAqLwogICAgICB7Cglz dHJ1Y3Qgcnhfc3VwZXJzZXQgKiBzdGFydF9jb250ZW50czsKCXN0cnVjdCByeF9uZmFfc3RhdGVf c2V0ICogc3RhcnRfbmZhX3NldDsKCQoJLyogd2UgcHJlc3VtZSBoZXJlIHRoYXQgdGhlIG5mYSBz dGFydCBzdGF0ZSBoYXMgb25seSBvbmUKCSAqIHBvc3NpYmxlIGZ1dHVyZSB3aXRoIG5vIHNpZGUg ZWZmZWN0cy4gIAoJICovCglzdGFydF9uZmFfc2V0ID0gcnhiLT5zdGFydC0+ZnV0dXJlcy0+ZGVz dHNldDsKCWlmICggICByeGItPnJ4LnN0YXJ0X3NldAoJICAgICYmIChyeGItPnJ4LnN0YXJ0X3Nl dC0+c3RhcnRzX2ZvciA9PSAmcnhiLT5yeCkpCgkgIHN0YXJ0X2NvbnRlbnRzID0gcnhiLT5yeC5z dGFydF9zZXQ7CgllbHNlCgkgIHsKCSAgICBzdGFydF9jb250ZW50cyA9CgkgICAgICByeF9zdXBl cnN0YXRlX2VjbG9zdXJlX3VuaW9uICgmcnhiLT5yeCwKCQkJCQkgICAgcnhfc3VwZXJzZXRfY29u cyAoJnJ4Yi0+cngsIDAsIDApLAoJCQkJCSAgICBzdGFydF9uZmFfc2V0KTsKCSAgICAKCSAgICBp ZiAoIXN0YXJ0X2NvbnRlbnRzKQoJICAgICAgcmV0dXJuIHJ4X3NlYXJjaF9mYWlsOwoJICAgIAoJ ICAgIHN0YXJ0X2NvbnRlbnRzLT5zdGFydHNfZm9yID0gJnJ4Yi0+cng7CgkgICAgcnhiLT5yeC5z dGFydF9zZXQgPSBzdGFydF9jb250ZW50czsKCSAgfQoJaWYgKCAgIHN0YXJ0X2NvbnRlbnRzLT5z dXBlcnN0YXRlCgkgICAgJiYgKHN0YXJ0X2NvbnRlbnRzLT5zdXBlcnN0YXRlLT5yeF9pZCA9PSBy eGItPnJ4LnJ4X2lkKSkKCSAgewoJICAgIHNlYXJjaF9zdGF0ZS5zdGFydF9zdXBlciA9IHN0YXJ0 X2NvbnRlbnRzLT5zdXBlcnN0YXRlOwoJICAgIHJ4X2xvY2tfc3VwZXJzdGF0ZSAoJnJ4Yi0+cngs IHNlYXJjaF9zdGF0ZS5zdGFydF9zdXBlcik7CgkgIH0KCWVsc2UKCSAgewoJICAgIHJ4X3Byb3Rl Y3Rfc3VwZXJzZXQgKCZyeGItPnJ4LCBzdGFydF9jb250ZW50cyk7CgkgICAgCgkgICAgc2VhcmNo X3N0YXRlLnN0YXJ0X3N1cGVyID0gcnhfc3VwZXJzdGF0ZSAoJnJ4Yi0+cngsIHN0YXJ0X2NvbnRl bnRzKTsKCSAgICBpZiAoIXNlYXJjaF9zdGF0ZS5zdGFydF9zdXBlcikKCSAgICAgIHJldHVybiBy eF9zZWFyY2hfZmFpbDsKCSAgICByeF9sb2NrX3N1cGVyc3RhdGUgKCZyeGItPnJ4LCBzZWFyY2hf c3RhdGUuc3RhcnRfc3VwZXIpOwoJICAgIHJ4X3JlbGVhc2Vfc3VwZXJzZXQgKCZyeGItPnJ4LCBz dGFydF9jb250ZW50cyk7CgkgIH0KICAgICAgfQogICAgICAKICAgICAgCiAgICAgIC8qIFRoZSBv dXRlcl9wb3MgdHJhY2tzIHRoZSBwb3NpdGlvbiB3aXRoaW4gdGhlIHN0cmluZ3MKICAgICAgICog YXMgc2VlbiBieSBsb29wIHRoYXQgY2FsbHMgZmFzdG1hcF9zZWFyY2guCiAgICAgICAqCiAgICAg ICAqIFRoZSBjYWxsZXIgc3VwcGxpZWQgZ2V0X2J1cnN0IGZ1bmN0aW9uIGFjdHVhbGx5IAogICAg ICAgKiBnaXZlcyB1cyBwb2ludGVycyB0byBjaGFycy4KICAgICAgICogCiAgICAgICAqIENvbW11 bmljYXRpb24gd2l0aCB0aGUgZ2V0X2J1cnN0IGZ1bmN0aW9uIGlzIHRocm91Z2ggYW4KICAgICAg ICogcnhfc3RyaW5nX3Bvc2l0aW9uIHN0cnVjdHVyZS4gIEhlcmUsIHRoZSBzdHJ1Y3R1cmUgZm9y CiAgICAgICAqIG91dGVyX3BvcyBpcyBpbml0aWFsaXplZC4gICBJdCBpcyBzZXQgdG8gcG9pbnQg dG8gdGhlCiAgICAgICAqIE5VTEwgc3RyaW5nLCBhdCBhbiBvZmZzZXQgb2YgU1RBUlRQT1MuICBT VEFSVFBPUyBpcyBvdXQKICAgICAgICogb2YgcmFuZ2Ugb2YgdGhlIE5VTEwgc3RyaW5nLCBzbyB0 aGUgZmlyc3QgY2FsbCB0byAKICAgICAgICogZ2V0YnVyc3Qgd2lsbCBwYXRjaCB1cCB0aGUgcnhf c3RyaW5nX3Bvc2l0aW9uIHRvIHBvaW50CiAgICAgICAqIHRvIHZhbGlkIGNoYXJhY3RlcnMuCiAg ICAgICAqLwoKICAgICAgKCAgc2VhcmNoX3N0YXRlLm91dGVyX3Bvcy5zdHJpbmcKICAgICAgID0g c2VhcmNoX3N0YXRlLm91dGVyX3Bvcy5lbmQKICAgICAgID0gMCk7CgogICAgICBzZWFyY2hfc3Rh dGUub3V0ZXJfcG9zLm9mZnNldCA9IDA7CiAgICAgIHNlYXJjaF9zdGF0ZS5vdXRlcl9wb3Muc2l6 ZSA9IDA7CiAgICAgIHNlYXJjaF9zdGF0ZS5vdXRlcl9wb3MucG9zID0gKHVuc2lnbmVkIGNoYXIg KilzdGFydHBvczsKICAgICAgaW5pdF9mYXN0bWFwIChyeGIsICZzZWFyY2hfc3RhdGUpOwoKICAg ICAgc2VhcmNoX3N0YXRlLmZhc3RtYXBfcmVzdW1lX3B0ID0gcnhfZmFzdG1hcF9zdGFydDsKICAg IGNhc2Ugcnhfb3V0ZXJfZmFzdG1hcDoKICAgICAgLyogZG8geyAqLwogICAgcHNldWRvX2RvOgog ICAgICB7Cgl7CgkgIGludCBmYXN0bWFwX3N0YXRlOwoJICBmYXN0bWFwX3N0YXRlID0gZmFzdG1h cF9zZWFyY2ggKHJ4Yiwgc3RvcCwgZ2V0X2J1cnN0LCBhcHBfY2xvc3VyZSwKCQkJCQkgICZzZWFy Y2hfc3RhdGUpOwoJICBzd2l0Y2ggKGZhc3RtYXBfc3RhdGUpCgkgICAgewoJICAgIGNhc2Ugcnhf ZmFzdG1hcF9jb250aW51YXRpb246CgkgICAgICBwYyA9IHJ4X291dGVyX2Zhc3RtYXA7CgkgICAg ICBnb3RvIHJldHVybl9jb250aW51YXRpb247CgkgICAgY2FzZSByeF9mYXN0bWFwX2ZhaWw6Cgkg ICAgICBnb3RvIGZpbmlzaDsKCSAgICBjYXNlIHJ4X2Zhc3RtYXBfb2s6CgkgICAgICBicmVhazsK CSAgICB9Cgl9CgkKCS8qIG5vdyB0aGUgZmFzdG1hcCBsb29wIGhhcyBicm91Z2h0IHVzIHRvIGEg cGxhdXNpYmxlIAoJICogc3RhcnRpbmcgcG9pbnQgZm9yIGEgbWF0Y2guICBzbywgaXQncyB0aW1l IHRvIHJ1biB0aGUKCSAqIG5mYSBhbmQgc2VlIGlmIGEgbWF0Y2ggb2NjdXJlZC4KCSAqLwoJc3Rh cnRwb3MgPSAoICBzZWFyY2hfc3RhdGUub3V0ZXJfcG9zLnBvcwoJCSAgICAtIHNlYXJjaF9zdGF0 ZS5vdXRlcl9wb3Muc3RyaW5nCgkJICAgICsgc2VhcmNoX3N0YXRlLm91dGVyX3Bvcy5vZmZzZXQp OwojaWYgMAovKnwqLwlpZiAoKHJhbmdlID4gMCkgJiYgKHN0YXJ0cG9zID09IHNlYXJjaF9zdGF0 ZS5vdXRlcl9wb3Muc2VhcmNoX2VuZCkpCi8qfCovCSAgZ290byBmaW5pc2g7CiNlbmRpZgogICAg ICB9CgogICAgICBzZWFyY2hfc3RhdGUudGVzdF9tYXRjaF9yZXN1bWVfcHQgPSByeF90ZXN0X3N0 YXJ0OwogICAgICAvKiBkbyBpbnRlcnJ1cHRlZCBmb3IgZW50cnkgcG9pbnQuLi4gKi8KICAgIGNh c2Ugcnhfb3V0ZXJfdGVzdDoKICAgICAgLyogLi4uZG8gY29udGludWVkICovCiAgICAgIHsKCWdv dG8gdGVzdF9tYXRjaDsKICAgICAgdGVzdF9yZXR1cm5zX3RvX3NlYXJjaDoKCXN3aXRjaCAodGVz dF9zdGF0ZSkKCSAgewoJICBjYXNlIHJ4X3Rlc3RfY29udGludWF0aW9uOgoJICAgIHBjID0gcnhf b3V0ZXJfdGVzdDsKCSAgICBnb3RvIHJldHVybl9jb250aW51YXRpb247CgkgIGNhc2UgcnhfdGVz dF9lcnJvcjoKCSAgICBzZWFyY2hfc3RhdGUucmV0X3ZhbCA9IHJ4X3NlYXJjaF9lcnJvcjsKCSAg ICBnb3RvIGZpbmlzaDsKCSAgY2FzZSByeF90ZXN0X2ZhaWw6CgkgICAgYnJlYWs7CgkgIGNhc2Ug cnhfdGVzdF9vazoKCSAgICBnb3RvIGZpbmlzaDsKCSAgfQoJc2VhcmNoX3N0YXRlLm91dGVyX3Bv cy5wb3MgKz0gc2VhcmNoX3N0YXRlLm91dGVyX3Bvcy5zZWFyY2hfZGlyZWN0aW9uOwoJc3RhcnRw b3MgKz0gc2VhcmNoX3N0YXRlLm91dGVyX3Bvcy5zZWFyY2hfZGlyZWN0aW9uOwojaWYgMAovKnwq LwlpZiAoc2VhcmNoX3N0YXRlLnRlc3RfcG9zLnBvcyA8IHNlYXJjaF9zdGF0ZS50ZXN0X3Bvcy5l bmQpCi8qfCovCSAgYnJlYWs7CiNlbmRpZgogICAgICB9CiAgICAgIC8qIGRvIGludGVycnVwdGVk IGZvciBlbnRyeSBwb2ludC4uLiAqLwogICAgY2FzZSByeF9vdXRlcl9yZXN0b3JlX3BvczoKICAg ICAgewoJaW50IHg7Cgl4ID0gZ2V0X2J1cnN0ICgmc2VhcmNoX3N0YXRlLm91dGVyX3BvcywgYXBw X2Nsb3N1cmUsIHN0b3ApOwoJc3dpdGNoICh4KQoJICB7CgkgIGNhc2UgcnhfZ2V0X2J1cnN0X2Nv bnRpbnVhdGlvbjoKCSAgICBwYyA9IHJ4X291dGVyX3Jlc3RvcmVfcG9zOwoJICAgIGdvdG8gcmV0 dXJuX2NvbnRpbnVhdGlvbjsKCSAgY2FzZSByeF9nZXRfYnVyc3RfZXJyb3I6CgkgICAgc2VhcmNo X3N0YXRlLnJldF92YWwgPSByeF9zZWFyY2hfZXJyb3I7CgkgICAgZ290byBmaW5pc2g7CgkgIGNh c2UgcnhfZ2V0X2J1cnN0X25vX21vcmU6CgkgICAgaWYgKHJ4Yi0+Y2FuX21hdGNoX2VtcHR5KQoJ ICAgICAgYnJlYWs7CgkgICAgZ290byBmaW5pc2g7CgkgIGNhc2UgcnhfZ2V0X2J1cnN0X29rOgoJ ICAgIGJyZWFrOwoJICB9CiAgICAgIH0gLyogfSB3aGlsZSAoLi4uc2VlIGJlbG93Li4uKSAqLwoK ICAgICAgaWYgKChzZWFyY2hfc3RhdGUub3V0ZXJfcG9zLnNlYXJjaF9kaXJlY3Rpb24gPT0gMSkK CSAgPyAoc3RhcnRwb3MgPD0gc2VhcmNoX3N0YXRlLm91dGVyX3Bvcy5zZWFyY2hfZW5kKQoJICA6 IChzdGFydHBvcyA+IHNlYXJjaF9zdGF0ZS5vdXRlcl9wb3Muc2VhcmNoX2VuZCkpCglnb3RvIHBz ZXVkb19kbzsKCgkKICAgIGZpbmlzaDoKICAgICAgdW5pbml0X2Zhc3RtYXAgKHJ4YiwgJnNlYXJj aF9zdGF0ZSk7CiAgICAgIGlmIChzZWFyY2hfc3RhdGUuc3RhcnRfc3VwZXIpCglyeF91bmxvY2tf c3VwZXJzdGF0ZSAoJnJ4Yi0+cngsIHNlYXJjaF9zdGF0ZS5zdGFydF9zdXBlcik7CiAgICAgIAoj aWZkZWYgcmVnZXhfbWFsbG9jCiAgICAgIGlmIChzZWFyY2hfc3RhdGUubHBhcmVuKSBmcmVlIChz ZWFyY2hfc3RhdGUubHBhcmVuKTsKICAgICAgaWYgKHNlYXJjaF9zdGF0ZS5ycGFyZW4pIGZyZWUg KHNlYXJjaF9zdGF0ZS5ycGFyZW4pOwogICAgICBpZiAoc2VhcmNoX3N0YXRlLmJlc3RfbHBzcGFj ZSkgZnJlZSAoc2VhcmNoX3N0YXRlLmJlc3RfbHBzcGFjZSk7CiAgICAgIGlmIChzZWFyY2hfc3Rh dGUuYmVzdF9ycHNwYWNlKSBmcmVlIChzZWFyY2hfc3RhdGUuYmVzdF9ycHNwYWNlKTsKI2VuZGlm CiAgICAgIHJldHVybiBzZWFyY2hfc3RhdGUucmV0X3ZhbDsKICAgIH0KCgogdGVzdF9tYXRjaDoK ICB7CiAgICBlbnVtIHJ4X3Rlc3RfbWF0Y2hfZW50cnkgdGVzdF9wYzsKICAgIGludCBpbng7CiAg ICB0ZXN0X3BjID0gc2VhcmNoX3N0YXRlLnRlc3RfbWF0Y2hfcmVzdW1lX3B0OwogICAgaWYgKHRl c3RfcGMgPT0gcnhfdGVzdF9zdGFydCkKICAgICAgewojaWZkZWYgUlhfREVCVUcKCXNlYXJjaF9z dGF0ZS5iYWNrdHJhY2tfZGVwdGggPSAwOwojZW5kaWYKCXNlYXJjaF9zdGF0ZS5sYXN0X2wgPSBz ZWFyY2hfc3RhdGUubGFzdF9yID0gMDsKCXNlYXJjaF9zdGF0ZS5scGFyZW5bMF0gPSBzdGFydHBv czsKCXNlYXJjaF9zdGF0ZS5zdXBlciA9IHNlYXJjaF9zdGF0ZS5zdGFydF9zdXBlcjsKCXNlYXJj aF9zdGF0ZS5jID0gc2VhcmNoX3N0YXRlLm5mYV9jaG9pY2U7CglzZWFyY2hfc3RhdGUudGVzdF9w b3MucG9zID0gc2VhcmNoX3N0YXRlLm91dGVyX3Bvcy5wb3MgLSAxOyAgICAKCXNlYXJjaF9zdGF0 ZS50ZXN0X3Bvcy5zdHJpbmcgPSBzZWFyY2hfc3RhdGUub3V0ZXJfcG9zLnN0cmluZzsKCXNlYXJj aF9zdGF0ZS50ZXN0X3Bvcy5lbmQgPSBzZWFyY2hfc3RhdGUub3V0ZXJfcG9zLmVuZDsKCXNlYXJj aF9zdGF0ZS50ZXN0X3Bvcy5vZmZzZXQgPSBzZWFyY2hfc3RhdGUub3V0ZXJfcG9zLm9mZnNldDsK CXNlYXJjaF9zdGF0ZS50ZXN0X3Bvcy5zaXplID0gc2VhcmNoX3N0YXRlLm91dGVyX3Bvcy5zaXpl OwoJc2VhcmNoX3N0YXRlLnRlc3RfcG9zLnNlYXJjaF9kaXJlY3Rpb24gPSAxOwoJc2VhcmNoX3N0 YXRlLmNvdW50ZXJfc3RhY2sgPSAwOwoJc2VhcmNoX3N0YXRlLmJhY2t0cmFja19zdGFjayA9IDA7 CglzZWFyY2hfc3RhdGUuYmFja3RyYWNrX2ZyYW1lX2J5dGVzID0KCSAgKHNpemVvZiAoc3RydWN0 IHJ4X2JhY2t0cmFja19mcmFtZSkKCSAgICsgKHJ4Yi0+bWF0Y2hfcmVnc19vbl9zdGFjawoJICAg ICAgPyBzaXplb2YgKHJlZ29mZl90KSAqIChzZWFyY2hfc3RhdGUubnVtX3JlZ3MgKyAxKSAqIDIK CSAgICAgIDogMCkpOwoJc2VhcmNoX3N0YXRlLmNodW5rX2J5dGVzID0gc2VhcmNoX3N0YXRlLmJh Y2t0cmFja19mcmFtZV9ieXRlcyAqIDY0OwoJc2VhcmNoX3N0YXRlLnRlc3RfcmV0ID0gcnhfdGVz dF9saW5lX2ZpbmlzaGVkOwoJc2VhcmNoX3N0YXRlLmNvdWxkX2hhdmVfY29udGludWVkID0gMDsK ICAgICAgfSAgCiAgICAvKiBUaGlzIGlzIHdoaWxlICgxKS4uLmV4Y2VwdCB0aGF0IHRoZSBib2R5 IG9mIHRoZSBsb29wIGlzIGludGVycnVwdGVkIAogICAgICogYnkgc29tZSBhbHRlcm5hdGl2ZSBl bnRyeSBwb2ludHMuCiAgICAgKi8KICBwc2V1ZG9fd2hpbGVfMToKICAgIHN3aXRjaCAodGVzdF9w YykKICAgICAgewogICAgICBjYXNlIHJ4X3Rlc3RfY2FjaGVfaGl0X2xvb3A6Cglnb3RvIHJlc3Vt ZV9jb250aW51YXRpb25fMTsKICAgICAgY2FzZSByeF90ZXN0X2JhY2tyZWZlcmVuY2VfY2hlY2s6 Cglnb3RvIHJlc3VtZV9jb250aW51YXRpb25fMjsKICAgICAgY2FzZSByeF90ZXN0X2JhY2t0cmFj a19yZXR1cm46Cglnb3RvIHJlc3VtZV9jb250aW51YXRpb25fMzsKICAgICAgY2FzZSByeF90ZXN0 X3N0YXJ0OgojaWZkZWYgUlhfREVCVUcKCS8qIFRoZXJlIGlzIGEgc2VhcmNoIHRyZWUgd2l0aCBl dmVyeSBub2RlIGFzIHNldCBvZiBkZXRlcm1pbmlzdGljCgkgKiB0cmFuc2l0aW9ucyBpbiB0aGUg c3VwZXIgbmZhLiAgRm9yIGV2ZXJ5IGJyYW5jaCBvZiBhIAoJICogYmFja3RyYWNrIHBvaW50IGlz IGFuIGVkZ2UgaW4gdGhlIHRyZWUuCgkgKiBUaGlzIGNvdW50cyB1cCBhIHByZS1vcmRlciBvZiBu b2RlcyBpbiB0aGF0IHRyZWUuCgkgKiBJdCdzIHNhdmVkIG9uIHRoZSBzZWFyY2ggc3RhY2sgYW5k IHByaW50ZWQgd2hlbiBkZWJ1Z2dpbmcuIAoJICovCglzZWFyY2hfc3RhdGUubGluZV9ubyA9IDA7 CglzZWFyY2hfc3RhdGUubGluZXNfZm91bmQgPSAwOwojZW5kaWYKCQogICAgICB0b3Bfb2ZfY3lj bGU6CgkvKiBBIHN1cGVyc3RhdGUgaXMgYmFzaWNseSBhIHRyYW5zaXRpb24gdGFibGUsIGluZGV4 ZWQgYnkgCgkgKiBjaGFyYWN0ZXJzIGZyb20gdGhlIHN0cmluZyBiZWluZyB0ZXN0ZWQsIGFuZCBj b250YWluaW5nIAoJICogUlhfSU5YIChgaW5zdHJ1Y3Rpb24gZnJhbWUnKSBzdHJ1Y3R1cmVzLgoJ ICovCglzZWFyY2hfc3RhdGUuaWZyID0gJnNlYXJjaF9zdGF0ZS5zdXBlci0+dHJhbnNpdGlvbnMg W3NlYXJjaF9zdGF0ZS5jXTsKCQogICAgICByZWN1cnNlX3Rlc3RfbWF0Y2g6CgkvKiBUaGlzIGlz IHRoZSBwb2ludCB0byB3aGljaCBjb250cm9sIGlzIHNlbnQgd2hlbiB0aGUKCSAqIHRlc3QgbWF0 Y2hlciBgcmVjdXJzZXMnLiAgQmVmb3JlIGp1bXBpbmcgaGVyZSwgc29tZSB2YXJpYWJsZXMKCSAq IG5lZWQgdG8gYmUgc2F2ZWQgb24gdGhlIHN0YWNrIGFuZCB0aGUgbmV4dCBpbnN0cnVjdGlvbiBm cmFtZQoJICogaGFzIHRvIGJlIGNvbXB1dGVkLgoJICovCgkKICAgICAgcmVzdGFydDoKCS8qIFNv bWUgaW5zdHJ1Y3Rpb25zIGRvbid0IGFkdmFuY2UgdGhlIG1hdGNoZXIsIGJ1dCBqdXN0CgkgKiBj YXJyeSBvdXQgc29tZSBzaWRlIGVmZmVjdHMgYW5kIGZldGNoIGEgbmV3IGluc3RydWN0aW9uLgoJ ICogVG8gZGlzcGF0Y2ggdGhhdCBuZXcgaW5zdHJ1Y3Rpb24sIGBnb3RvIHJlc3RhcnQnLgoJICov CgkKCXsKCSAgc3RydWN0IHJ4X2lueCAqIG5leHRfdHJfdGFibGU7CgkgIHN0cnVjdCByeF9pbngg KiB0aGlzX3RyX3RhYmxlOwoJICAvKiBUaGUgZmFzdGVzdCByb3V0ZSB0aHJvdWdoIHRoZSBsb29w IGlzIHdoZW4gdGhlIGluc3RydWN0aW9uIAoJICAgKiBpcyBSWF9ORVhUX0NIQVIuICBUaGlzIGNh c2UgaXMgZGV0ZWN0ZWQgd2hlbiBTRUFSQ0hfU1RBVEUuSUZSLT5EQVRBCgkgICAqIGlzIG5vbi16 ZXJvLiAgSW4gdGhhdCBjYXNlLCBpdCBwb2ludHMgdG8gdGhlIG5leHQKCSAgICogc3VwZXJzdGF0 ZS4gCgkgICAqCgkgICAqIFRoaXMgYWxsb3dzIHVzIHRvIG5vdCBib3RoZXIgZmV0Y2hpbmcgdGhl IGJ5dGVjb2RlLgoJICAgKi8KCSAgbmV4dF90cl90YWJsZSA9IChzdHJ1Y3QgcnhfaW54ICopc2Vh cmNoX3N0YXRlLmlmci0+ZGF0YTsKCSAgdGhpc190cl90YWJsZSA9IHNlYXJjaF9zdGF0ZS5zdXBl ci0+dHJhbnNpdGlvbnM7CgkgIHdoaWxlIChuZXh0X3RyX3RhYmxlKQoJICAgIHsKI2lmZGVmIFJY X0RFQlVHXzAKCSAgICAgIGlmIChyeF9kZWJ1Z190cmFjZSkKCQl7CgkJICBzdHJ1Y3Qgcnhfc3Vw ZXJzZXQgKiBzZXRwOwoJCSAgCgkJICBmcHJpbnRmIChzdGRlcnIsICIlZCAlZD4+IHJlX25leHRf Y2hhciBAICVkICglZCkiLAoJCQkgICBzZWFyY2hfc3RhdGUubGluZV9ubywKCQkJICAgc2VhcmNo X3N0YXRlLmJhY2t0cmFja19kZXB0aCwKCQkJICAgKHNlYXJjaF9zdGF0ZS50ZXN0X3Bvcy5wb3Mg LSBzZWFyY2hfc3RhdGUudGVzdF9wb3Muc3RyaW5nCgkJCSAgICArIHNlYXJjaF9zdGF0ZS50ZXN0 X3Bvcy5vZmZzZXQpLCBzZWFyY2hfc3RhdGUuYyk7CgkJICAKCQkgIHNlYXJjaF9zdGF0ZS5zdXBl ciA9CgkJICAgICgoc3RydWN0IHJ4X3N1cGVyc3RhdGUgKikKCQkgICAgICgoY2hhciAqKXRoaXNf dHJfdGFibGUKCQkgICAgICAtICgodW5zaWduZWQgbG9uZykKCQkJICgoc3RydWN0IHJ4X3N1cGVy c3RhdGUgKikwKS0+dHJhbnNpdGlvbnMpKSk7CgkJICAKCQkgIHNldHAgPSBzZWFyY2hfc3RhdGUu c3VwZXItPmNvbnRlbnRzOwoJCSAgZnByaW50ZiAoc3RkZXJyLCAiICAgc3VwZXJzdGV0IChyeD0l ZCwgJj0leDogIiwKCQkJICAgcnhiLT5yeC5yeF9pZCwgc2V0cCk7CgkJICB3aGlsZSAoc2V0cCkK CQkgICAgewoJCSAgICAgIGZwcmludGYgKHN0ZGVyciwgIiVkICIsIHNldHAtPmlkKTsKCQkgICAg ICBzZXRwID0gc2V0cC0+Y2RyOwoJCSAgICB9CgkJICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOwoJ CX0KI2VuZGlmCgkgICAgICB0aGlzX3RyX3RhYmxlID0gbmV4dF90cl90YWJsZTsKCSAgICAgICsr c2VhcmNoX3N0YXRlLnRlc3RfcG9zLnBvczsKCSAgICAgIGlmIChzZWFyY2hfc3RhdGUudGVzdF9w b3MucG9zID09IHNlYXJjaF9zdGF0ZS50ZXN0X3Bvcy5lbmQpCgkJewoJCSAgaW50IGJ1cnN0X3N0 YXRlOwoJCXRyeV9idXJzdF8xOgoJCSAgYnVyc3Rfc3RhdGUgPSBnZXRfYnVyc3QgKCZzZWFyY2hf c3RhdGUudGVzdF9wb3MsCgkJCQkJICAgYXBwX2Nsb3N1cmUsIHN0b3ApOwoJCSAgc3dpdGNoIChi dXJzdF9zdGF0ZSkKCQkgICAgewoJCSAgICBjYXNlIHJ4X2dldF9idXJzdF9jb250aW51YXRpb246 CgkJICAgICAgc2VhcmNoX3N0YXRlLnNhdmVkX3RoaXNfdHJfdGFibGUgPSB0aGlzX3RyX3RhYmxl OwoJCSAgICAgIHNlYXJjaF9zdGF0ZS5zYXZlZF9uZXh0X3RyX3RhYmxlID0gbmV4dF90cl90YWJs ZTsKCQkgICAgICB0ZXN0X3BjID0gcnhfdGVzdF9jYWNoZV9oaXRfbG9vcDsKCQkgICAgICBnb3Rv IHRlc3RfcmV0dXJuX2NvbnRpbnVhdGlvbjsKCQkgICAgICAKCQkgICAgcmVzdW1lX2NvbnRpbnVh dGlvbl8xOgoJCSAgICAgIC8qIENvbnRpbnVhdGlvbiBvbmUganVtcHMgaGVyZSB0byBkbyBpdHMg d29yazogKi8KCQkgICAgICBzZWFyY2hfc3RhdGUuc2F2ZWRfdGhpc190cl90YWJsZSA9IHRoaXNf dHJfdGFibGU7CgkJICAgICAgc2VhcmNoX3N0YXRlLnNhdmVkX25leHRfdHJfdGFibGUgPSBuZXh0 X3RyX3RhYmxlOwoJCSAgICAgIGdvdG8gdHJ5X2J1cnN0XzE7CgkJICAgICAgCgkJICAgIGNhc2Ug cnhfZ2V0X2J1cnN0X29rOgoJCSAgICAgIC8qIGdldF9idXJzdCBzdWNjZWVkZWQuLi5rZWVwIGdv aW5nICovCgkJICAgICAgYnJlYWs7CgkJICAgICAgCgkJICAgIGNhc2UgcnhfZ2V0X2J1cnN0X25v X21vcmU6CgkJICAgICAgc2VhcmNoX3N0YXRlLnRlc3RfcmV0ID0gcnhfdGVzdF9saW5lX2Zpbmlz aGVkOwoJCSAgICAgIHNlYXJjaF9zdGF0ZS5jb3VsZF9oYXZlX2NvbnRpbnVlZCA9IDE7CgkJICAg ICAgZ290byB0ZXN0X2RvX3JldHVybjsKCQkgICAgICAKCQkgICAgY2FzZSByeF9nZXRfYnVyc3Rf ZXJyb3I6CgkJICAgICAgLyogQW4gZXJyb3IuLi4gKi8KCQkgICAgICBzZWFyY2hfc3RhdGUudGVz dF9yZXQgPSByeF90ZXN0X2ludGVybmFsX2Vycm9yOwoJCSAgICAgIGdvdG8gdGVzdF9kb19yZXR1 cm47CgkJICAgIH0KCQl9CgkgICAgICBzZWFyY2hfc3RhdGUuYyA9ICpzZWFyY2hfc3RhdGUudGVz dF9wb3MucG9zOwoJICAgICAgc2VhcmNoX3N0YXRlLmlmciA9IHRoaXNfdHJfdGFibGUgKyBzZWFy Y2hfc3RhdGUuYzsKCSAgICAgIG5leHRfdHJfdGFibGUgPSAoc3RydWN0IHJ4X2lueCAqKXNlYXJj aF9zdGF0ZS5pZnItPmRhdGE7CgkgICAgfSAvKiBGYXN0IGxvb3AgdGhyb3VnaCBjYWNoZWQgdHJh bnNpdGlvbiB0YWJsZXMgKi8KCSAgCgkgIC8qIEhlcmUgd2hlbiB3ZSByYW4gb3V0IG9mIGNhY2hl ZCBuZXh0LWNoYXIgdHJhbnNpdGlvbnMuIAoJICAgKiBTbywgaXQgd2lsbCBiZSBuZWNlc3Nhcnkg dG8gZG8gYSBtb3JlIGV4cGVuc2l2ZQoJICAgKiBkaXNwYXRjaCBvbiB0aGUgY3VycmVudCBpbnN0 cnVjdGlvbi4gIFRoZSBzdXBlcnN0YXRlCgkgICAqIHBvaW50ZXIgaXMgYWxsb3dlZCB0byBiZWNv bWUgaW52YWxpZCBkdXJpbmcgbmV4dC1jaGFyCgkgICAqIHRyYW5zaXRpb25zIC0tIG5vdyB3ZSBt dXN0IGJyaW5nIGl0IHVwIHRvIGRhdGUuCgkgICAqLwoJICBzZWFyY2hfc3RhdGUuc3VwZXIgPQoJ ICAgICgoc3RydWN0IHJ4X3N1cGVyc3RhdGUgKikKCSAgICAgKChjaGFyICopdGhpc190cl90YWJs ZQoJICAgICAgLSAoKHVuc2lnbmVkIGxvbmcpCgkJICgoc3RydWN0IHJ4X3N1cGVyc3RhdGUgKikw KS0+dHJhbnNpdGlvbnMpKSk7Cgl9CgkKCS8qIFdlJ3ZlIGVuY291bnRlcmVkIGFuIGluc3RydWN0 aW9uIG90aGVyIHRoYW4gbmV4dC1jaGFyLgoJICogRGlzcGF0Y2ggdGhhdCBpbnN0cnVjdGlvbjoK CSAqLwoJaW54ID0gKGludClzZWFyY2hfc3RhdGUuaWZyLT5pbng7CiNpZmRlZiBSWF9ERUJVR18w CglpZiAocnhfZGVidWdfdHJhY2UpCgkgIHsKCSAgICBzdHJ1Y3Qgcnhfc3VwZXJzZXQgKiBzZXRw ID0gc2VhcmNoX3N0YXRlLnN1cGVyLT5jb250ZW50czsKCSAgICAKCSAgICBmcHJpbnRmIChzdGRl cnIsICIlZCAlZD4+ICVzIEAgJWQgKCVkKSIsIHNlYXJjaF9zdGF0ZS5saW5lX25vLAoJCSAgICAg c2VhcmNoX3N0YXRlLmJhY2t0cmFja19kZXB0aCwKCQkgICAgIGlueF9uYW1lc1tpbnhdLAoJCSAg ICAgKHNlYXJjaF9zdGF0ZS50ZXN0X3Bvcy5wb3MgLSBzZWFyY2hfc3RhdGUudGVzdF9wb3Muc3Ry aW5nCgkJICAgICAgKyAodGVzdF9wb3MuaGFsZiA9PSAwID8gMCA6IHNpemUxKSksIHNlYXJjaF9z dGF0ZS5jKTsKCSAgICAKCSAgICBmcHJpbnRmIChzdGRlcnIsICIgICBzdXBlcnN0ZXQgKHJ4PSVk LCAmPSV4OiAiLAoJCSAgICAgcnhiLT5yeC5yeF9pZCwgc2V0cCk7CgkgICAgd2hpbGUgKHNldHAp CgkgICAgICB7CgkJZnByaW50ZiAoc3RkZXJyLCAiJWQgIiwgc2V0cC0+aWQpOwoJCXNldHAgPSBz ZXRwLT5jZHI7CgkgICAgICB9CgkgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKCSAgfQojZW5k aWYKCXN3aXRjaCAoKGVudW0gcnhfb3Bjb2RlKWlueCkKCSAgewoJICBjYXNlIHJ4X2RvX3NpZGVf ZWZmZWN0czoKCSAgICAKCSAgICAvKiAgUlhfRE9fU0lERV9FRkZFQ1RTIG9jY3VycyB3aGVuIHdl IGNyb3NzIGVwc2lsb24gCgkgICAgICogIGVkZ2VzIGFzc29jaWF0ZWQgd2l0aCBwYXJlbnRoZXNl cywgYmFja3JlZmVyZW5jaW5nLCBldGMuCgkgICAgICovCgkgICAgewoJICAgICAgc3RydWN0IHJ4 X2Rpc3RpbmN0X2Z1dHVyZSAqIGRmID0KCQkoc3RydWN0IHJ4X2Rpc3RpbmN0X2Z1dHVyZSAqKXNl YXJjaF9zdGF0ZS5pZnItPmRhdGFfMjsKCSAgICAgIHN0cnVjdCByeF9zZV9saXN0ICogZWwgPSBk Zi0+ZWZmZWN0czsKCSAgICAgIC8qIFNpZGUgZWZmZWN0cyBjb21lIGluIGxpc3RzLiAgVGhpcyB3 YWxrcyBkb3duCgkgICAgICAgKiBhIGxpc3QsIGRpc3BhdGNoaW5nLgoJICAgICAgICovCgkgICAg ICB3aGlsZSAoZWwpCgkJewoJCSAgbG9uZyBlZmZlY3Q7CgkJICBlZmZlY3QgPSAobG9uZyllbC0+ Y2FyOwoJCSAgaWYgKGVmZmVjdCA8IDApCgkJICAgIHsKI2lmZGVmIFJYX0RFQlVHXzAKCQkgICAg ICBpZiAocnhfZGVidWdfdHJhY2UpCgkJCXsKCQkJICBzdHJ1Y3Qgcnhfc3VwZXJzZXQgKiBzZXRw ID0gc2VhcmNoX3N0YXRlLnN1cGVyLT5jb250ZW50czsKCQkJICAKCQkJICBmcHJpbnRmIChzdGRl cnIsICIuLi4uJWQgJWQ+PiAlc1xuIiwgc2VhcmNoX3N0YXRlLmxpbmVfbm8sCgkJCQkgICBzZWFy Y2hfc3RhdGUuYmFja3RyYWNrX2RlcHRoLAoJCQkJICAgZWZuYW1lc1stZWZmZWN0XSk7CgkJCX0K I2VuZGlmCgkJICAgICAgc3dpdGNoICgoZW51bSByZV9zaWRlX2VmZmVjdHMpIGVmZmVjdCkKCgkJ CXsKCQkJY2FzZSByZV9zZV9wdXNoYmFjazoKCQkJICBzZWFyY2hfc3RhdGUuaWZyID0gJmRmLT5m dXR1cmVfZnJhbWU7CgkJCSAgaWYgKCFzZWFyY2hfc3RhdGUuaWZyLT5kYXRhKQoJCQkgICAgewoJ CQkgICAgICBzdHJ1Y3Qgcnhfc3VwZXJzdGF0ZSAqIHN1cDsKCQkJICAgICAgc3VwID0gc2VhcmNo X3N0YXRlLnN1cGVyOwoJCQkgICAgICByeF9sb2NrX3N1cGVyc3RhdGUgKHJ4LCBzdXApOwoJCQkg ICAgICBpZiAoIXJ4X2hhbmRsZV9jYWNoZV9taXNzICgmcnhiLT5yeCwKCQkJCQkJCSBzZWFyY2hf c3RhdGUuc3VwZXIsCgkJCQkJCQkgc2VhcmNoX3N0YXRlLmMsCgkJCQkJCQkgKHNlYXJjaF9zdGF0 ZS5pZnIKCQkJCQkJCSAgLT5kYXRhXzIpKSkKCQkJCXsKCQkJCSAgcnhfdW5sb2NrX3N1cGVyc3Rh dGUgKHJ4LCBzdXApOwoJCQkJICBzZWFyY2hfc3RhdGUudGVzdF9yZXQgPSByeF90ZXN0X2ludGVy bmFsX2Vycm9yOwoJCQkJICBnb3RvIHRlc3RfZG9fcmV0dXJuOwoJCQkJfQoJCQkgICAgICByeF91 bmxvY2tfc3VwZXJzdGF0ZSAocngsIHN1cCk7CgkJCSAgICB9CgkJCSAgLyogLS1zZWFyY2hfc3Rh dGUudGVzdF9wb3MucG9zOyAqLwoJCQkgIHNlYXJjaF9zdGF0ZS5jID0gJ3QnOwoJCQkgIHNlYXJj aF9zdGF0ZS5zdXBlcgoJCQkgICAgPSAoKHN0cnVjdCByeF9zdXBlcnN0YXRlICopCgkJCSAgICAg ICAoKGNoYXIgKilzZWFyY2hfc3RhdGUuaWZyLT5kYXRhCgkJCQktIChsb25nKSgoKHN0cnVjdCBy eF9zdXBlcnN0YXRlICopMCkKCQkJCQkgLT50cmFuc2l0aW9ucykpKTsKCQkJICBnb3RvIHRvcF9v Zl9jeWNsZTsKCQkJICBicmVhazsKCQkJY2FzZSByZV9zZV9wdXNoMDoKCQkJICB7CgkJCSAgICBz dHJ1Y3QgcnhfY291bnRlcl9mcmFtZSAqIG9sZF9jZgoJCQkgICAgICA9IChzZWFyY2hfc3RhdGUu Y291bnRlcl9zdGFjawoJCQkJID8gKChzdHJ1Y3QgcnhfY291bnRlcl9mcmFtZSAqKQoJCQkJICAg IHNlYXJjaF9zdGF0ZS5jb3VudGVyX3N0YWNrLT5zcCkKCQkJCSA6IDApOwoJCQkgICAgc3RydWN0 IHJ4X2NvdW50ZXJfZnJhbWUgKiBjZjsKCQkJICAgIFBVU0ggKHNlYXJjaF9zdGF0ZS5jb3VudGVy X3N0YWNrLAoJCQkJICBzaXplb2YgKHN0cnVjdCByeF9jb3VudGVyX2ZyYW1lKSk7CgkJCSAgICBj ZiA9ICgoc3RydWN0IHJ4X2NvdW50ZXJfZnJhbWUgKikKCQkJCSAgc2VhcmNoX3N0YXRlLmNvdW50 ZXJfc3RhY2stPnNwKTsKCQkJICAgIGNmLT50YWcgPSByZV9zZV9pdGVyOwoJCQkgICAgY2YtPnZh bCA9IDA7CgkJCSAgICBjZi0+aW5oZXJpdGVkX2Zyb20gPSAwOwoJCQkgICAgY2YtPmNkciA9IG9s ZF9jZjsKCQkJICAgIGJyZWFrOwoJCQkgIH0KCQkJY2FzZSByZV9zZV9mYWlsOgoJCQkgIGdvdG8g dGVzdF9kb19yZXR1cm47CgkJCWNhc2UgcmVfc2VfYmVnYnVmOgoJCQkgIGlmICghQVRfU1RSSU5H U19CRUcgKCkpCgkJCSAgICBnb3RvIHRlc3RfZG9fcmV0dXJuOwoJCQkgIGJyZWFrOwoJCQljYXNl IHJlX3NlX2VuZGJ1ZjoKCQkJICBpZiAoIUFUX1NUUklOR1NfRU5EICgpKQoJCQkgICAgZ290byB0 ZXN0X2RvX3JldHVybjsKCQkJICBicmVhazsKCQkJY2FzZSByZV9zZV93b3JkYmVnOgoJCQkgIGlm ICggICBMRVRURVJfUCAoJnNlYXJjaF9zdGF0ZS50ZXN0X3BvcywgMSkKCQkJICAgICAgJiYgKCAg IEFUX1NUUklOR1NfQkVHKCkKCQkJCSAgfHwgIUxFVFRFUl9QICgmc2VhcmNoX3N0YXRlLnRlc3Rf cG9zLCAwKSkpCgkJCSAgICBicmVhazsKCQkJICBlbHNlCgkJCSAgICBnb3RvIHRlc3RfZG9fcmV0 dXJuOwoJCQljYXNlIHJlX3NlX3dvcmRlbmQ6CgkJCSAgaWYgKCAgICFBVF9TVFJJTkdTX0JFRyAo KQoJCQkgICAgICAmJiBMRVRURVJfUCAoJnNlYXJjaF9zdGF0ZS50ZXN0X3BvcywgMCkKCQkJICAg ICAgJiYgKEFUX1NUUklOR1NfRU5EICgpCgkJCQkgIHx8ICFMRVRURVJfUCAoJnNlYXJjaF9zdGF0 ZS50ZXN0X3BvcywgMSkpKQoJCQkgICAgYnJlYWs7CgkJCSAgZWxzZQoJCQkgICAgZ290byB0ZXN0 X2RvX3JldHVybjsKCQkJY2FzZSByZV9zZV93b3JkYm91bmQ6CgkJCSAgaWYgKEFUX1dPUkRfQk9V TkRBUlkgKCZzZWFyY2hfc3RhdGUudGVzdF9wb3MpKQoJCQkgICAgYnJlYWs7CgkJCSAgZWxzZQoJ CQkgICAgZ290byB0ZXN0X2RvX3JldHVybjsKCQkJY2FzZSByZV9zZV9ub3R3b3JkYm91bmQ6CgkJ CSAgaWYgKCFBVF9XT1JEX0JPVU5EQVJZICgmc2VhcmNoX3N0YXRlLnRlc3RfcG9zKSkKCQkJICAg IGJyZWFrOwoJCQkgIGVsc2UKCQkJICAgIGdvdG8gdGVzdF9kb19yZXR1cm47CgkJCWNhc2UgcmVf c2VfaGF0OgoJCQkgIGlmIChBVF9TVFJJTkdTX0JFRyAoKSkKCQkJICAgIHsKCQkJICAgICAgaWYg KHJ4Yi0+bm90X2JvbCkKCQkJCWdvdG8gdGVzdF9kb19yZXR1cm47CgkJCSAgICAgIGVsc2UKCQkJ CWJyZWFrOwoJCQkgICAgfQoJCQkgIGVsc2UKCQkJICAgIHsKCQkJICAgICAgY2hhciBwb3NfYyA9 ICpzZWFyY2hfc3RhdGUudGVzdF9wb3MucG9zOwoJCQkgICAgICBpZiAoICAgKFNSQ0hfVFJBTlNM QVRFIChwb3NfYykKCQkJCSAgICAgID09IFNSQ0hfVFJBTlNMQVRFKCdcbicpKQoJCQkJICAmJiBy eGItPm5ld2xpbmVfYW5jaG9yKQoJCQkJYnJlYWs7CgkJCSAgICAgIGVsc2UKCQkJCWdvdG8gdGVz dF9kb19yZXR1cm47CgkJCSAgICB9CgkJCWNhc2UgcmVfc2VfZG9sbGFyOgoJCQkgIGlmIChBVF9T VFJJTkdTX0VORCAoKSkKCQkJICAgIHsKCQkJICAgICAgaWYgKHJ4Yi0+bm90X2VvbCkKCQkJCWdv dG8gdGVzdF9kb19yZXR1cm47CgkJCSAgICAgIGVsc2UKCQkJCWJyZWFrOwoJCQkgICAgfQoJCQkg IGVsc2UKCQkJICAgIHsKCQkJICAgICAgaWYgKCAgICggICBTUkNIX1RSQU5TTEFURSAoZmV0Y2hf Y2hhcgoJCQkJCQkgICAgKCZzZWFyY2hfc3RhdGUudGVzdF9wb3MsIDEsCgkJCQkJCSAgICAgYXBw X2Nsb3N1cmUsIHN0b3ApKQoJCQkJICAgICAgPT0gU1JDSF9UUkFOU0xBVEUgKCdcbicpKQoJCQkJ ICAmJiByeGItPm5ld2xpbmVfYW5jaG9yKQoJCQkJYnJlYWs7CgkJCSAgICAgIGVsc2UKCQkJCWdv dG8gdGVzdF9kb19yZXR1cm47CgkJCSAgICB9CgkJCSAgCgkJCWNhc2UgcmVfc2VfdHJ5OgoJCQkg IC8qIFRoaXMgaXMgdGhlIGZpcnN0IHNpZGUgZWZmZWN0IGluIGV2ZXJ5CgkJCSAgICogZXhwcmVz c2lvbi4KCQkJICAgKgoJCQkgICAqICBGT1IgTk8gR09PRCBSRUFTT04uLi5nZXQgcmlkIG9mIGl0 Li4uCgkJCSAgICovCgkJCSAgYnJlYWs7CgkJCSAgCgkJCWNhc2UgcmVfc2VfcHVzaHBvczoKCQkJ ICB7CgkJCSAgICBpbnQgdXJoZXJlID0KCQkJICAgICAgKChpbnQpKHNlYXJjaF9zdGF0ZS50ZXN0 X3Bvcy5wb3MKCQkJCSAgICAgLSBzZWFyY2hfc3RhdGUudGVzdF9wb3Muc3RyaW5nKQoJCQkgICAg ICAgKyBzZWFyY2hfc3RhdGUudGVzdF9wb3Mub2Zmc2V0KTsKCQkJICAgIHN0cnVjdCByeF9jb3Vu dGVyX2ZyYW1lICogb2xkX2NmCgkJCSAgICAgID0gKHNlYXJjaF9zdGF0ZS5jb3VudGVyX3N0YWNr CgkJCQkgPyAoKHN0cnVjdCByeF9jb3VudGVyX2ZyYW1lICopCgkJCQkgICAgc2VhcmNoX3N0YXRl LmNvdW50ZXJfc3RhY2stPnNwKQoJCQkJIDogMCk7CgkJCSAgICBzdHJ1Y3QgcnhfY291bnRlcl9m cmFtZSAqIGNmOwoJCQkgICAgUFVTSChzZWFyY2hfc3RhdGUuY291bnRlcl9zdGFjaywKCQkJCSBz aXplb2YgKHN0cnVjdCByeF9jb3VudGVyX2ZyYW1lKSk7CgkJCSAgICBjZiA9ICgoc3RydWN0IHJ4 X2NvdW50ZXJfZnJhbWUgKikKCQkJCSAgc2VhcmNoX3N0YXRlLmNvdW50ZXJfc3RhY2stPnNwKTsK CQkJICAgIGNmLT50YWcgPSByZV9zZV9wdXNocG9zOwoJCQkgICAgY2YtPnZhbCA9IHVyaGVyZTsK CQkJICAgIGNmLT5pbmhlcml0ZWRfZnJvbSA9IDA7CgkJCSAgICBjZi0+Y2RyID0gb2xkX2NmOwoJ CQkgICAgYnJlYWs7CgkJCSAgfQoJCQkgIAoJCQljYXNlIHJlX3NlX2Noa3BvczoKCQkJICB7CgkJ CSAgICBpbnQgdXJoZXJlID0KCQkJICAgICAgKChpbnQpKHNlYXJjaF9zdGF0ZS50ZXN0X3Bvcy5w b3MKCQkJCSAgICAgLSBzZWFyY2hfc3RhdGUudGVzdF9wb3Muc3RyaW5nKQoJCQkgICAgICAgKyBz ZWFyY2hfc3RhdGUudGVzdF9wb3Mub2Zmc2V0KTsKCQkJICAgIHN0cnVjdCByeF9jb3VudGVyX2Zy YW1lICogY2YKCQkJICAgICAgPSAoKHN0cnVjdCByeF9jb3VudGVyX2ZyYW1lICopCgkJCQkgc2Vh cmNoX3N0YXRlLmNvdW50ZXJfc3RhY2stPnNwKTsKCQkJICAgIGlmIChjZi0+dmFsID09IHVyaGVy ZSkKCQkJICAgICAgZ290byB0ZXN0X2RvX3JldHVybjsKCQkJICAgIGNmLT52YWwgPSB1cmhlcmU7 CgkJCSAgICBicmVhazsKCQkJICB9CgkJCSAgYnJlYWs7CgkJCSAgCgkJCWNhc2UgcmVfc2VfcG9w cG9zOgoJCQkgIFBPUChzZWFyY2hfc3RhdGUuY291bnRlcl9zdGFjaywKCQkJICAgICAgc2l6ZW9m IChzdHJ1Y3QgcnhfY291bnRlcl9mcmFtZSkpOwoJCQkgIGJyZWFrOwoJCQkgIAoJCQkgIAoJCQlj YXNlIHJlX3NlX2F0X2RvdDoKCQkJY2FzZSByZV9zZV9zeW50YXg6CgkJCWNhc2UgcmVfc2Vfbm90 X3N5bnRheDoKI2lmZGVmIGVtYWNzCgkJCSAgLyogCgkJCSAgICogdGhpcyByZWxlYXNlIGxhY2tz IGVtYWNzIHN1cHBvcnQKCQkJICAgKi8KI2VuZGlmCgkJCSAgYnJlYWs7CgkJCWNhc2UgcmVfc2Vf d2luOgoJCQljYXNlIHJlX3NlX2xwYXJlbjoKCQkJY2FzZSByZV9zZV9ycGFyZW46CgkJCWNhc2Ug cmVfc2VfYmFja3JlZjoKCQkJY2FzZSByZV9zZV9pdGVyOgoJCQljYXNlIHJlX3NlX2VuZF9pdGVy OgoJCQljYXNlIHJlX3NlX3R2OgoJCQljYXNlIHJlX2Zsb29nbGVfZmxhcDoKCQkJICBzZWFyY2hf c3RhdGUucmV0X3ZhbCA9IDA7CgkJCSAgZ290byB0ZXN0X2RvX3JldHVybjsKCQkJfQoJCSAgICB9 CgkJICBlbHNlCgkJICAgIHsKI2lmZGVmIFJYX0RFQlVHXzAKCQkgICAgICBpZiAocnhfZGVidWdf dHJhY2UpCgkJCWZwcmludGYgKHN0ZGVyciwgIi4uLi4lZCAlZD4+ICVzICVkICVkXG4iLCBzZWFy Y2hfc3RhdGUubGluZV9ubywKCQkJCSBzZWFyY2hfc3RhdGUuYmFja3RyYWNrX2RlcHRoLAoJCQkJ IGVmbmFtZXMyW3J4Yi0+c2VfcGFyYW1zIFtlZmZlY3RdLnNlXSwKCQkJCSByeGItPnNlX3BhcmFt cyBbZWZmZWN0XS5vcDEsCgkJCQkgcnhiLT5zZV9wYXJhbXMgW2VmZmVjdF0ub3AyKTsKI2VuZGlm CgkJICAgICAgc3dpdGNoIChyeGItPnNlX3BhcmFtcyBbZWZmZWN0XS5zZSkKCQkJewoJCQljYXNl IHJlX3NlX3dpbjoKCQkJICAvKiBUaGlzIHNpZGUgZWZmZWN0IGluZGljYXRlcyB0aGF0IHdlJ3Zl IAoJCQkgICAqIGZvdW5kIGEgbWF0Y2gsIHRob3VnaCBub3QgbmVjZXNzYXJpbHkgdGhlIAoJCQkg ICAqIGJlc3QgbWF0Y2guICBUaGlzIGlzIGEgZmFuY3kgYXNzaWdubWVudCB0byAKCQkJICAgKiBy ZWdpc3RlciAwIHVubGVzcyB0aGUgY2FsbGVyIGRpZG4ndCAKCQkJICAgKiBjYXJlIGFib3V0IHJl Z2lzdGVycy4gIEluIHdoaWNoIGNhc2UsCgkJCSAgICogdGhpcyBzdG9wcyB0aGUgbWF0Y2guCgkJ CSAgICovCgkJCSAgewoJCQkgICAgaW50IHVyaGVyZSA9CgkJCSAgICAgICgoaW50KShzZWFyY2hf c3RhdGUudGVzdF9wb3MucG9zCgkJCQkgICAgIC0gc2VhcmNoX3N0YXRlLnRlc3RfcG9zLnN0cmlu ZykKCQkJICAgICAgICsgc2VhcmNoX3N0YXRlLnRlc3RfcG9zLm9mZnNldCk7CgkJCSAgICAKCQkJ ICAgIGlmICggICAoc2VhcmNoX3N0YXRlLmJlc3RfbGFzdF9yIDwgMCkKCQkJCXx8ICh1cmhlcmUg KyAxID4gc2VhcmNoX3N0YXRlLmJlc3RfcnBhcmVuWzBdKSkKCQkJICAgICAgewoJCQkJLyogUmVj b3JkIHRoZSBiZXN0IGtub3duIGFuZCBrZWVwCgkJCQkgKiBsb29raW5nLgoJCQkJICovCgkJCQlp bnQgeDsKCQkJCWZvciAoeCA9IDA7IHggPD0gc2VhcmNoX3N0YXRlLmxhc3RfbDsgKyt4KQoJCQkJ ICBzZWFyY2hfc3RhdGUuYmVzdF9scGFyZW5beF0gPSBzZWFyY2hfc3RhdGUubHBhcmVuW3hdOwoJ CQkJc2VhcmNoX3N0YXRlLmJlc3RfbGFzdF9sID0gc2VhcmNoX3N0YXRlLmxhc3RfbDsKCQkJCWZv ciAoeCA9IDA7IHggPD0gc2VhcmNoX3N0YXRlLmxhc3RfcjsgKyt4KQoJCQkJICBzZWFyY2hfc3Rh dGUuYmVzdF9ycGFyZW5beF0gPSBzZWFyY2hfc3RhdGUucnBhcmVuW3hdOwoJCQkJc2VhcmNoX3N0 YXRlLmJlc3RfcnBhcmVuWzBdID0gdXJoZXJlICsgMTsKCQkJCXNlYXJjaF9zdGF0ZS5iZXN0X2xh c3RfciA9IHNlYXJjaF9zdGF0ZS5sYXN0X3I7CgkJCSAgICAgIH0KCQkJICAgIC8qIElmIHdlJ3Jl IG5vdCByZXBvcnRpbmcgdGhlIG1hdGNoLWxlbmd0aCAKCQkJICAgICAqIG9yIG90aGVyIHJlZ2lz dGVyIGluZm8sIHdlIG5lZWQgbG9vayBubwoJCQkgICAgICogZnVydGhlci4KCQkJICAgICAqLwoJ CQkgICAgaWYgKHNlYXJjaF9zdGF0ZS5maXJzdF9mb3VuZCkKCQkJICAgICAgewoJCQkJc2VhcmNo X3N0YXRlLnRlc3RfcmV0ID0gcnhfdGVzdF9mb3VuZF9maXJzdDsKCQkJCWdvdG8gdGVzdF9kb19y ZXR1cm47CgkJCSAgICAgIH0KCQkJICB9CgkJCSAgYnJlYWs7CgkJCWNhc2UgcmVfc2VfbHBhcmVu OgoJCQkgIHsKCQkJICAgIGludCB1cmhlcmUgPQoJCQkgICAgICAoKGludCkoc2VhcmNoX3N0YXRl LnRlc3RfcG9zLnBvcwoJCQkJICAgICAtIHNlYXJjaF9zdGF0ZS50ZXN0X3Bvcy5zdHJpbmcpCgkJ CSAgICAgICArIHNlYXJjaF9zdGF0ZS50ZXN0X3Bvcy5vZmZzZXQpOwoJCQkgICAgCgkJCSAgICBp bnQgcmVnID0gcnhiLT5zZV9wYXJhbXMgW2VmZmVjdF0ub3AxOwojaWYgMAoJCQkgICAgaWYgKHJl ZyA+IHNlYXJjaF9zdGF0ZS5sYXN0X2wpCiNlbmRpZgoJCQkgICAgICB7CgkJCQlzZWFyY2hfc3Rh dGUubHBhcmVuW3JlZ10gPSB1cmhlcmUgKyAxOwoJCQkJLyogSW4gYWRkaXRpb24gdG8gbWFraW5n IHRoaXMgYXNzaWdubWVudCwKCQkJCSAqIHdlIG5vdyBrbm93IHRoYXQgbG93ZXIgbnVtYmVyZWQg cmVncwoJCQkJICogdGhhdCBoYXZlbid0IGFscmVhZHkgYmVlbiBhc3NpZ25lZCwKCQkJCSAqIHdv bid0IGJlLiAgV2UgbWFrZSBzdXJlIHRoZXkncmUKCQkJCSAqIGZpbGxlZCB3aXRoIC0xLCBzbyB0 aGV5IGNhbiBiZQoJCQkJICogcmVjb2duaXplZCBhcyB1bmFzc2lnbmVkLgoJCQkJICovCgkJCQlp ZiAoc2VhcmNoX3N0YXRlLmxhc3RfbCA8IHJlZykKCQkJCSAgd2hpbGUgKCsrc2VhcmNoX3N0YXRl Lmxhc3RfbCA8IHJlZykKCQkJCSAgICBzZWFyY2hfc3RhdGUubHBhcmVuW3NlYXJjaF9zdGF0ZS5s YXN0X2xdID0gLTE7CgkJCSAgICAgIH0KCQkJICAgIGJyZWFrOwoJCQkgIH0KCQkJICAKCQkJY2Fz ZSByZV9zZV9ycGFyZW46CgkJCSAgewoJCQkgICAgaW50IHVyaGVyZSA9CgkJCSAgICAgICgoaW50 KShzZWFyY2hfc3RhdGUudGVzdF9wb3MucG9zCgkJCQkgICAgIC0gc2VhcmNoX3N0YXRlLnRlc3Rf cG9zLnN0cmluZykKCQkJICAgICAgICsgc2VhcmNoX3N0YXRlLnRlc3RfcG9zLm9mZnNldCk7CgkJ CSAgICBpbnQgcmVnID0gcnhiLT5zZV9wYXJhbXMgW2VmZmVjdF0ub3AxOwoJCQkgICAgc2VhcmNo X3N0YXRlLnJwYXJlbltyZWddID0gdXJoZXJlICsgMTsKCQkJICAgIGlmIChzZWFyY2hfc3RhdGUu bGFzdF9yIDwgcmVnKQoJCQkgICAgICB7CgkJCQl3aGlsZSAoKytzZWFyY2hfc3RhdGUubGFzdF9y IDwgcmVnKQoJCQkJICBzZWFyY2hfc3RhdGUucnBhcmVuW3NlYXJjaF9zdGF0ZS5sYXN0X3JdCgkJ CQkgICAgPSAtMTsKCQkJICAgICAgfQoJCQkgICAgYnJlYWs7CgkJCSAgfQoJCQkgIAoJCQljYXNl IHJlX3NlX2JhY2tyZWY6CgkJCSAgewoJCQkgICAgaW50IHJlZyA9IHJ4Yi0+c2VfcGFyYW1zIFtl ZmZlY3RdLm9wMTsKCQkJICAgIGlmICggICByZWcgPiBzZWFyY2hfc3RhdGUubGFzdF9yCgkJCQl8 fCBzZWFyY2hfc3RhdGUucnBhcmVuW3JlZ10gPCAwKQoJCQkgICAgICBnb3RvIHRlc3RfZG9fcmV0 dXJuOwoJCQkgICAgCgkJCSAgICB7CgkJCSAgICAgIGludCBiYWNrcmVmX3N0YXR1czsKCQkJICAg IGNoZWNrX2JhY2tyZWZlcmVuY2U6CgkJCSAgICAgIGJhY2tyZWZfc3RhdHVzCgkJCQk9IGJhY2tf Y2hlY2sgKCZzZWFyY2hfc3RhdGUudGVzdF9wb3MsCgkJCQkJICAgICAgc2VhcmNoX3N0YXRlLmxw YXJlbltyZWddLAoJCQkJCSAgICAgIHNlYXJjaF9zdGF0ZS5ycGFyZW5bcmVnXSwKCQkJCQkgICAg ICBzZWFyY2hfc3RhdGUudHJhbnNsYXRlLAoJCQkJCSAgICAgIGFwcF9jbG9zdXJlLAoJCQkJCSAg ICAgIHN0b3ApOwoJCQkgICAgICBzd2l0Y2ggKGJhY2tyZWZfc3RhdHVzKQoJCQkJewoJCQkJY2Fz ZSByeF9iYWNrX2NoZWNrX2NvbnRpbnVhdGlvbjoKCQkJCSAgc2VhcmNoX3N0YXRlLnNhdmVkX3Jl ZyA9IHJlZzsKCQkJCSAgdGVzdF9wYyA9IHJ4X3Rlc3RfYmFja3JlZmVyZW5jZV9jaGVjazsKCQkJ CSAgZ290byB0ZXN0X3JldHVybl9jb250aW51YXRpb247CgkJCQlyZXN1bWVfY29udGludWF0aW9u XzI6CgkJCQkgIHJlZyA9IHNlYXJjaF9zdGF0ZS5zYXZlZF9yZWc7CgkJCQkgIGdvdG8gY2hlY2tf YmFja3JlZmVyZW5jZTsKCQkJCWNhc2UgcnhfYmFja19jaGVja19mYWlsOgoJCQkJICAvKiBGYWls ICovCgkJCQkgIGdvdG8gdGVzdF9kb19yZXR1cm47CgkJCQljYXNlIHJ4X2JhY2tfY2hlY2tfcGFz czoKCQkJCSAgLyogcGFzcyAtLQoJCQkJICAgKiB0ZXN0X3BvcyBub3cgYWR2YW5jZWQgdG8gbGFz dAoJCQkJICAgKiBjaGFyIG1hdGNoZWQgYnkgYmFja3JlZgoJCQkJICAgKi8KCQkJCSAgYnJlYWs7 CgkJCQl9CgkJCSAgICB9CgkJCSAgICBicmVhazsKCQkJICB9CgkJCWNhc2UgcmVfc2VfaXRlcjoK CQkJICB7CgkJCSAgICBzdHJ1Y3QgcnhfY291bnRlcl9mcmFtZSAqIGNzcAoJCQkgICAgICA9ICgo c3RydWN0IHJ4X2NvdW50ZXJfZnJhbWUgKikKCQkJCSBzZWFyY2hfc3RhdGUuY291bnRlcl9zdGFj ay0+c3ApOwoJCQkgICAgaWYgKGNzcC0+dmFsID09IHJ4Yi0+c2VfcGFyYW1zW2VmZmVjdF0ub3Ay KQoJCQkgICAgICBnb3RvIHRlc3RfZG9fcmV0dXJuOwoJCQkgICAgZWxzZQoJCQkgICAgICArK2Nz cC0+dmFsOwoJCQkgICAgYnJlYWs7CgkJCSAgfQoJCQljYXNlIHJlX3NlX2VuZF9pdGVyOgoJCQkg IHsKCQkJICAgIHN0cnVjdCByeF9jb3VudGVyX2ZyYW1lICogY3NwCgkJCSAgICAgID0gKChzdHJ1 Y3QgcnhfY291bnRlcl9mcmFtZSAqKQoJCQkJIHNlYXJjaF9zdGF0ZS5jb3VudGVyX3N0YWNrLT5z cCk7CgkJCSAgICBpZiAoY3NwLT52YWwgPCByeGItPnNlX3BhcmFtc1tlZmZlY3RdLm9wMSkKCQkJ ICAgICAgZ290byB0ZXN0X2RvX3JldHVybjsKCQkJICAgIGVsc2UKCQkJICAgICAgewoJCQkJc3Ry dWN0IHJ4X2NvdW50ZXJfZnJhbWUgKiBzb3VyY2UgPSBjc3A7CgkJCQl3aGlsZSAoc291cmNlLT5p bmhlcml0ZWRfZnJvbSkKCQkJCSAgc291cmNlID0gc291cmNlLT5pbmhlcml0ZWRfZnJvbTsKCQkJ CWlmICghc291cmNlIHx8ICFzb3VyY2UtPmNkcikKCQkJCSAgewoJCQkJICAgIFBPUChzZWFyY2hf c3RhdGUuY291bnRlcl9zdGFjaywKCQkJCQlzaXplb2Yoc3RydWN0IHJ4X2NvdW50ZXJfZnJhbWUp KTsKCQkJCSAgfQoJCQkJZWxzZQoJCQkJICB7CgkJCQkgICAgc291cmNlID0gc291cmNlLT5jZHI7 CgkJCQkgICAgY3NwLT52YWwgPSBzb3VyY2UtPnZhbDsKCQkJCSAgICBjc3AtPnRhZyA9IHNvdXJj ZS0+dGFnOwoJCQkJICAgIGNzcC0+Y2RyID0gMDsKCQkJCSAgICBjc3AtPmluaGVyaXRlZF9mcm9t ID0gc291cmNlOwoJCQkJICB9CgkJCSAgICAgIH0KCQkJICAgIGJyZWFrOwoJCQkgIH0KCQkJY2Fz ZSByZV9zZV90djoKCQkJICAvKiBpcyBhIG5vb3AgKi8KCQkJICBicmVhazsKCQkJY2FzZSByZV9z ZV90cnk6CgkJCWNhc2UgcmVfc2VfcHVzaGJhY2s6CgkJCWNhc2UgcmVfc2VfcHVzaDA6CgkJCWNh c2UgcmVfc2VfcHVzaHBvczoKCQkJY2FzZSByZV9zZV9jaGtwb3M6CgkJCWNhc2UgcmVfc2VfcG9w cG9zOgoJCQljYXNlIHJlX3NlX2F0X2RvdDoKCQkJY2FzZSByZV9zZV9zeW50YXg6CgkJCWNhc2Ug cmVfc2Vfbm90X3N5bnRheDoKCQkJY2FzZSByZV9zZV9iZWdidWY6CgkJCWNhc2UgcmVfc2VfaGF0 OgoJCQljYXNlIHJlX3NlX3dvcmRiZWc6CgkJCWNhc2UgcmVfc2Vfd29yZGJvdW5kOgoJCQljYXNl IHJlX3NlX25vdHdvcmRib3VuZDoKCQkJY2FzZSByZV9zZV93b3JkZW5kOgoJCQljYXNlIHJlX3Nl X2VuZGJ1ZjoKCQkJY2FzZSByZV9zZV9kb2xsYXI6CgkJCWNhc2UgcmVfc2VfZmFpbDoKCQkJY2Fz ZSByZV9mbG9vZ2xlX2ZsYXA6CgkJCSAgc2VhcmNoX3N0YXRlLnJldF92YWwgPSAwOwoJCQkgIGdv dG8gdGVzdF9kb19yZXR1cm47CgkJCX0KCQkgICAgfQoJCSAgZWwgPSBlbC0+Y2RyOwoJCX0KCSAg ICAgIC8qIE5vdyB0aGUgc2lkZSBlZmZlY3RzIGFyZSBkb25lLAoJICAgICAgICogc28gZ2V0IHRo ZSBuZXh0IGluc3RydWN0aW9uLgoJICAgICAgICogYW5kIG1vdmUgb24uCgkgICAgICAgKi8KCSAg ICAgIHNlYXJjaF9zdGF0ZS5pZnIgPSAmZGYtPmZ1dHVyZV9mcmFtZTsKCSAgICAgIGdvdG8gcmVz dGFydDsKCSAgICB9CgkgICAgCgkgIGNhc2UgcnhfYmFja3RyYWNrX3BvaW50OgoJICAgIHsKCSAg ICAgIC8qIEEgYmFja3RyYWNrIHBvaW50IGluZGljYXRlcyB0aGF0IHdlJ3ZlIHJlYWNoZWQgYQoJ ICAgICAgICogbm9uLWRldGVybWluaXNtIGluIHRoZSBzdXBlcnN0YXRlIE5GQS4gIFRoaXMgaXMg YQoJICAgICAgICogbG9vcCB0aGF0IGV4aGF1c3RpdmVseSBzZWFyY2hlcyB0aGUgcG9zc2liaWxp dGllcy4KCSAgICAgICAqCgkgICAgICAgKiBBIGJhY2t0cmFja2luZyBzdHJhdGVneSBpcyB1c2Vk LiAgV2Uga2VlcCB0cmFjayBvZiB3aGF0CgkgICAgICAgKiByZWdpc3RlcnMgYXJlIHZhbGlkIHNv IHdlIGNhbiBlcmFzZSBzaWRlIGVmZmVjdHMuCgkgICAgICAgKgoJICAgICAgICogRmlyc3QsIG1h a2Ugc3VyZSB0aGVyZSBpcyBzb21lIHN0YWNrIHNwYWNlIHRvIGhvbGQgCgkgICAgICAgKiBvdXIg c3RhdGUuCgkgICAgICAgKi8KCSAgICAgIAoJICAgICAgc3RydWN0IHJ4X2JhY2t0cmFja19mcmFt ZSAqIGJmOwoJICAgICAgCgkgICAgICBQVVNIKHNlYXJjaF9zdGF0ZS5iYWNrdHJhY2tfc3RhY2ss CgkJICAgc2VhcmNoX3N0YXRlLmJhY2t0cmFja19mcmFtZV9ieXRlcyk7CiNpZmRlZiBSWF9ERUJV R18wCgkgICAgICArK3NlYXJjaF9zdGF0ZS5iYWNrdHJhY2tfZGVwdGg7CiNlbmRpZgoJICAgICAg CgkgICAgICBiZiA9ICgoc3RydWN0IHJ4X2JhY2t0cmFja19mcmFtZSAqKQoJCSAgICBzZWFyY2hf c3RhdGUuYmFja3RyYWNrX3N0YWNrLT5zcCk7CgkgICAgICB7CgkJYmYtPnN0a19zdXBlciA9IHNl YXJjaF9zdGF0ZS5zdXBlcjsKCQkvKiBXZSBwcmV2ZW50IHRoZSBjdXJyZW50IHN1cGVyc3RhdGUg ZnJvbSBiZWluZwoJCSAqIGRlbGV0ZWQgZnJvbSB0aGUgc3VwZXJzdGF0ZSBjYWNoZS4KCQkgKi8K CQlyeF9sb2NrX3N1cGVyc3RhdGUgKCZyeGItPnJ4LCBzZWFyY2hfc3RhdGUuc3VwZXIpOwojaWZk ZWYgUlhfREVCVUdfMAoJCWJmLT5zdGtfc2VhcmNoX3N0YXRlLmxpbmVfbm8gPSBzZWFyY2hfc3Rh dGUubGluZV9ubzsKI2VuZGlmCgkJYmYtPnN0a19jID0gc2VhcmNoX3N0YXRlLmM7CgkJYmYtPnN0 a190ZXN0X3BvcyA9IHNlYXJjaF9zdGF0ZS50ZXN0X3BvczsKCQliZi0+c3RrX2xhc3RfbCA9IHNl YXJjaF9zdGF0ZS5sYXN0X2w7CgkJYmYtPnN0a19sYXN0X3IgPSBzZWFyY2hfc3RhdGUubGFzdF9y OwoJCWJmLT5kZiA9ICgoc3RydWN0IHJ4X3N1cGVyX2VkZ2UgKikKCQkJICBzZWFyY2hfc3RhdGUu aWZyLT5kYXRhXzIpLT5vcHRpb25zOwoJCWJmLT5maXJzdF9kZiA9IGJmLT5kZjsKCQliZi0+Y291 bnRlcl9zdGFja19zcCA9IChzZWFyY2hfc3RhdGUuY291bnRlcl9zdGFjawoJCQkJCT8gc2VhcmNo X3N0YXRlLmNvdW50ZXJfc3RhY2stPnNwCgkJCQkJOiAwKTsKCQliZi0+c3RrX3Rlc3RfcmV0ID0g c2VhcmNoX3N0YXRlLnRlc3RfcmV0OwoJCWlmIChyeGItPm1hdGNoX3JlZ3Nfb25fc3RhY2spCgkJ ICB7CgkJICAgIGludCB4OwoJCSAgICByZWdvZmZfdCAqIHN0ayA9CgkJICAgICAgKHJlZ29mZl90 ICopKChjaGFyICopYmYgKyBzaXplb2YgKCpiZikpOwoJCSAgICBmb3IgKHggPSAwOyB4IDw9IHNl YXJjaF9zdGF0ZS5sYXN0X2w7ICsreCkKCQkgICAgICBzdGtbeF0gPSBzZWFyY2hfc3RhdGUubHBh cmVuW3hdOwoJCSAgICBzdGsgKz0geDsKCQkgICAgZm9yICh4ID0gMDsgeCA8PSBzZWFyY2hfc3Rh dGUubGFzdF9yOyArK3gpCgkJICAgICAgc3RrW3hdID0gc2VhcmNoX3N0YXRlLnJwYXJlblt4XTsK CQkgIH0KCSAgICAgIH0KCSAgICAgIAoJICAgICAgLyogSGVyZSBpcyBhIHdoaWxlIGxvb3Agd2hv c2UgYm9keSBpcyBtYWlubHkgYSBmdW5jdGlvbgoJICAgICAgICogY2FsbCBhbmQgc29tZSBjb2Rl IHRvIGhhbmRsZSBhIHJldHVybiBmcm9tIHRoYXQKCSAgICAgICAqIGZ1bmN0aW9uLgoJICAgICAg ICoKCSAgICAgICAqIEZyb20gaGVyZSBvbiBmb3IgdGhlIHJlc3Qgb2YgYGNhc2UgYmFja3RyYWNr X3BvaW50JyBpdAoJICAgICAgICogaXMgdW5zYWZlIHRvIGFzc3VtZSB0aGF0IHRoZSBzZWFyY2hf c3RhdGUgY29waWVzIG9mIAoJICAgICAgICogdmFyaWFibGVzIHNhdmVkIG9uIHRoZSBiYWNrdHJh Y2tpbmcgc3RhY2sgYXJlIHZhbGlkCgkgICAgICAgKiAtLSBzbyByZWFkIHRoZWlyIHZhbHVlcyBm cm9tIHRoZSBiYWNrdHJhY2tpbmcgc3RhY2suCgkgICAgICAgKgoJICAgICAgICogVGhpcyBsZXRz IHVzIHVzZSBvbmUgZ2VuZXJhdGlvbiBmZXdlciBzdGFjayBzYXZlcyBpbgoJICAgICAgICogdGhl IGNhbGwtZ3JhcGggb2YgYSBzZWFyY2guCgkgICAgICAgKi8KCSAgICAgIAoJICAgIHdoaWxlX25v bl9kZXRfb3B0aW9uczoKI2lmZGVmIFJYX0RFQlVHXzAKCSAgICAgICsrc2VhcmNoX3N0YXRlLmxp bmVzX2ZvdW5kOwoJICAgICAgaWYgKHJ4X2RlYnVnX3RyYWNlKQoJCWZwcmludGYgKHN0ZGVyciwg IkBAQCAlZCBjYWxscyAlZCBAQEBcbiIsCgkJCSBzZWFyY2hfc3RhdGUubGluZV9ubywgc2VhcmNo X3N0YXRlLmxpbmVzX2ZvdW5kKTsKCSAgICAgIAoJICAgICAgc2VhcmNoX3N0YXRlLmxpbmVfbm8g PSBzZWFyY2hfc3RhdGUubGluZXNfZm91bmQ7CiNlbmRpZgoJICAgICAgCgkgICAgICBpZiAoYmYt PmRmLT5uZXh0X3NhbWVfc3VwZXJfZWRnZVswXSA9PSBiZi0+Zmlyc3RfZGYpCgkJewoJCSAgLyog VGhpcyBpcyBhIHRhaWwtY2FsbCBvcHRpbWl6YXRpb24gLS0gd2UgZG9uJ3QgcmVjdXJzZQoJCSAg ICogZm9yIHRoZSBsYXN0IG9mIHRoZSBwb3NzaWJsZSBmdXR1cmVzLgoJCSAgICovCgkJICBzZWFy Y2hfc3RhdGUuaWZyID0gKGJmLT5kZi0+ZWZmZWN0cwoJCQkJICAgICAgPyAmYmYtPmRmLT5zaWRl X2VmZmVjdHNfZnJhbWUKCQkJCSAgICAgIDogJmJmLT5kZi0+ZnV0dXJlX2ZyYW1lKTsKCQkgIAoJ CSAgcnhfdW5sb2NrX3N1cGVyc3RhdGUgKCZyeGItPnJ4LCBzZWFyY2hfc3RhdGUuc3VwZXIpOwoJ CSAgUE9QKHNlYXJjaF9zdGF0ZS5iYWNrdHJhY2tfc3RhY2ssCgkJICAgICAgc2VhcmNoX3N0YXRl LmJhY2t0cmFja19mcmFtZV9ieXRlcyk7CiNpZmRlZiBSWF9ERUJVRwoJCSAgLS1zZWFyY2hfc3Rh dGUuYmFja3RyYWNrX2RlcHRoOwojZW5kaWYKCQkgIGdvdG8gcmVzdGFydDsKCQl9CgkgICAgICBl bHNlCgkJewoJCSAgaWYgKHNlYXJjaF9zdGF0ZS5jb3VudGVyX3N0YWNrKQoJCSAgICB7CgkJICAg ICAgc3RydWN0IHJ4X2NvdW50ZXJfZnJhbWUgKiBvbGRfY2YKCQkJPSAoKHN0cnVjdCByeF9jb3Vu dGVyX2ZyYW1lICopc2VhcmNoX3N0YXRlLmNvdW50ZXJfc3RhY2stPnNwKTsKCQkgICAgICBzdHJ1 Y3QgcnhfY291bnRlcl9mcmFtZSAqIGNmOwoJCSAgICAgIFBVU0goc2VhcmNoX3N0YXRlLmNvdW50 ZXJfc3RhY2ssIHNpemVvZiAoc3RydWN0IHJ4X2NvdW50ZXJfZnJhbWUpKTsKCQkgICAgICBjZiA9 ICgoc3RydWN0IHJ4X2NvdW50ZXJfZnJhbWUgKilzZWFyY2hfc3RhdGUuY291bnRlcl9zdGFjay0+ c3ApOwoJCSAgICAgIGNmLT50YWcgPSBvbGRfY2YtPnRhZzsKCQkgICAgICBjZi0+dmFsID0gb2xk X2NmLT52YWw7CgkJICAgICAgY2YtPmluaGVyaXRlZF9mcm9tID0gb2xkX2NmOwoJCSAgICAgIGNm LT5jZHIgPSAwOwoJCSAgICB9CQkJCgkJICAvKiBgQ2FsbCcgdGhpcyB0ZXN0LW1hdGNoIGJsb2Nr ICovCgkJICBzZWFyY2hfc3RhdGUuaWZyID0gKGJmLT5kZi0+ZWZmZWN0cwoJCQkJICAgICAgPyAm YmYtPmRmLT5zaWRlX2VmZmVjdHNfZnJhbWUKCQkJCSAgICAgIDogJmJmLT5kZi0+ZnV0dXJlX2Zy YW1lKTsKCQkgIGdvdG8gcmVjdXJzZV90ZXN0X21hdGNoOwoJCX0KCSAgICAgIAoJICAgICAgLyog UmV0dXJucyBpbiB0aGlzIGJsb2NrIGFyZSBhY2NvbXBsaXNoZWQgYnkKCSAgICAgICAqIGdvdG8g dGVzdF9kb19yZXR1cm4uICBUaGVyZSBhcmUgdHdvIGNhc2VzLgoJICAgICAgICogSWYgdGhlcmUg aXMgc29tZSBzZWFyY2gtc3RhY2sgbGVmdCwKCSAgICAgICAqIHRoZW4gaXQgaXMgYSByZXR1cm4g ZnJvbSBhIGByZWN1cnNpdmUnIGNhbGwuCgkgICAgICAgKiBJZiB0aGVyZSBpcyBubyBzZWFyY2gt c3RhY2sgbGVmdCwgdGhlbgoJICAgICAgICogd2Ugc2hvdWxkIHJldHVybiB0byB0aGUgZmFzdG1h cC9zZWFyY2ggbG9vcC4KCSAgICAgICAqLwoJICAgICAgCgkgICAgdGVzdF9kb19yZXR1cm46Cgkg ICAgICAKCSAgICAgIGlmICghc2VhcmNoX3N0YXRlLmJhY2t0cmFja19zdGFjaykKCQl7CiNpZmRl ZiBSWF9ERUJVR18wCgkJICBpZiAocnhfZGVidWdfdHJhY2UpCgkJICAgIGZwcmludGYgKHN0ZGVy ciwgIiEhISAlZCBiYWlscyByZXR1cm5pbmcgJWQgISEhXG4iLAoJCQkgICAgIHNlYXJjaF9zdGF0 ZS5saW5lX25vLCBzZWFyY2hfc3RhdGUudGVzdF9yZXQpOwojZW5kaWYKCQkgIAoJCSAgLyogTm8g bW9yZSBzZWFyY2gtc3RhY2sgLS0gdGhpcyB0ZXN0IGlzIGRvbmUuICovCgkJICBpZiAoc2VhcmNo X3N0YXRlLnRlc3RfcmV0ICE9IHJ4X3Rlc3RfaW50ZXJuYWxfZXJyb3IpCgkJICAgIGdvdG8gcmV0 dXJuX2Zyb21fdGVzdF9tYXRjaDsKCQkgIGVsc2UKCQkgICAgZ290byBlcnJvcl9pbl90ZXN0aW5n X21hdGNoOwoJCX0KCSAgICAgIAoJICAgICAgLyogUmV0dXJuaW5nIGZyb20gYSByZWN1cnNpdmUg Y2FsbCB0byAKCSAgICAgICAqIHRoZSB0ZXN0IG1hdGNoIGJsb2NrOgoJICAgICAgICovCgkgICAg ICAKCSAgICAgIGJmID0gKChzdHJ1Y3QgcnhfYmFja3RyYWNrX2ZyYW1lICopCgkJICAgIHNlYXJj aF9zdGF0ZS5iYWNrdHJhY2tfc3RhY2stPnNwKTsKI2lmZGVmIFJYX0RFQlVHXzAKCSAgICAgIGlm IChyeF9kZWJ1Z190cmFjZSkKCQlmcHJpbnRmIChzdGRlcnIsICIrKysgJWQgcmV0dXJucyAlZCAo dG8gJWQpKysrXG4iLAoJCQkgc2VhcmNoX3N0YXRlLmxpbmVfbm8sCgkJCSBzZWFyY2hfc3RhdGUu dGVzdF9yZXQsCgkJCSBiZi0+c3RrX3NlYXJjaF9zdGF0ZS5saW5lX25vKTsKI2VuZGlmCgkgICAg ICAKCSAgICAgIHdoaWxlIChzZWFyY2hfc3RhdGUuY291bnRlcl9zdGFjawoJCSAgICAgJiYgKCFi Zi0+Y291bnRlcl9zdGFja19zcAoJCQkgfHwgKGJmLT5jb3VudGVyX3N0YWNrX3NwCgkJCSAgICAg IT0gc2VhcmNoX3N0YXRlLmNvdW50ZXJfc3RhY2stPnNwKSkpCgkJewoJCSAgUE9QKHNlYXJjaF9z dGF0ZS5jb3VudGVyX3N0YWNrLAoJCSAgICAgIHNpemVvZiAoc3RydWN0IHJ4X2NvdW50ZXJfZnJh bWUpKTsKCQl9CgkgICAgICAKCSAgICAgIGlmIChzZWFyY2hfc3RhdGUudGVzdF9yZXQgPT0gcnhf dGVzdF9pbnRlcm5hbF9lcnJvcikKCQl7CgkJICBQT1AgKHNlYXJjaF9zdGF0ZS5iYWNrdHJhY2tf c3RhY2ssCgkJICAgICAgIHNlYXJjaF9zdGF0ZS5iYWNrdHJhY2tfZnJhbWVfYnl0ZXMpOwoJCSAg c2VhcmNoX3N0YXRlLnRlc3RfcmV0ID0gcnhfdGVzdF9pbnRlcm5hbF9lcnJvcjsKCQkgIGdvdG8g dGVzdF9kb19yZXR1cm47CgkJfQoJICAgICAgCgkgICAgICAvKiBJZiBhIG5vbi1sb25nZXN0IG1h dGNoIHdhcyBmb3VuZCBhbmQgdGhhdCBpcyBnb29kIAoJICAgICAgICogZW5vdWdoLCByZXR1cm4g aW1tZWRpYXRlbHkuCgkgICAgICAgKi8KCSAgICAgIGlmICggICAoc2VhcmNoX3N0YXRlLnRlc3Rf cmV0ID09IHJ4X3Rlc3RfZm91bmRfZmlyc3QpCgkJICAmJiBzZWFyY2hfc3RhdGUuZmlyc3RfZm91 bmQpCgkJewoJCSAgcnhfdW5sb2NrX3N1cGVyc3RhdGUgKCZyeGItPnJ4LCBiZi0+c3RrX3N1cGVy KTsKCQkgIFBPUCAoc2VhcmNoX3N0YXRlLmJhY2t0cmFja19zdGFjaywKCQkgICAgICAgc2VhcmNo X3N0YXRlLmJhY2t0cmFja19mcmFtZV9ieXRlcyk7CgkJICBnb3RvIHRlc3RfZG9fcmV0dXJuOwoJ CX0KCSAgICAgIAoJICAgICAgc2VhcmNoX3N0YXRlLnRlc3RfcmV0ID0gYmYtPnN0a190ZXN0X3Jl dDsKCSAgICAgIHNlYXJjaF9zdGF0ZS5sYXN0X2wgPSBiZi0+c3RrX2xhc3RfbDsKCSAgICAgIHNl YXJjaF9zdGF0ZS5sYXN0X3IgPSBiZi0+c3RrX2xhc3RfcjsKCSAgICAgIGJmLT5kZiA9IGJmLT5k Zi0+bmV4dF9zYW1lX3N1cGVyX2VkZ2VbMF07CgkgICAgICBzZWFyY2hfc3RhdGUuc3VwZXIgPSBi Zi0+c3RrX3N1cGVyOwoJICAgICAgc2VhcmNoX3N0YXRlLmMgPSBiZi0+c3RrX2M7CiNpZmRlZiBS WF9ERUJVR18wCgkgICAgICBzZWFyY2hfc3RhdGUubGluZV9ubyA9IGJmLT5zdGtfc2VhcmNoX3N0 YXRlLmxpbmVfbm87CiNlbmRpZgoJICAgICAgCgkgICAgICBpZiAocnhiLT5tYXRjaF9yZWdzX29u X3N0YWNrKQoJCXsKCQkgIGludCB4OwoJCSAgcmVnb2ZmX3QgKiBzdGsgPQoJCSAgICAocmVnb2Zm X3QgKikoKGNoYXIgKiliZiArIHNpemVvZiAoKmJmKSk7CgkJICBmb3IgKHggPSAwOyB4IDw9IHNl YXJjaF9zdGF0ZS5sYXN0X2w7ICsreCkKCQkgICAgc2VhcmNoX3N0YXRlLmxwYXJlblt4XSA9IHN0 a1t4XTsKCQkgIHN0ayArPSB4OwoJCSAgZm9yICh4ID0gMDsgeCA8PSBzZWFyY2hfc3RhdGUubGFz dF9yOyArK3gpCgkJICAgIHNlYXJjaF9zdGF0ZS5ycGFyZW5beF0gPSBzdGtbeF07CgkJfQoJICAg ICAgCgkgICAgICB7CgkJaW50IHg7CgkgICAgICB0cnlfYnVyc3RfMjoKCQl4ID0gZ2V0X2J1cnN0 ICgmYmYtPnN0a190ZXN0X3BvcywgYXBwX2Nsb3N1cmUsIHN0b3ApOwoJCXN3aXRjaCAoeCkKCQkg IHsKCQkgIGNhc2UgcnhfZ2V0X2J1cnN0X2NvbnRpbnVhdGlvbjoKCQkgICAgc2VhcmNoX3N0YXRl LnNhdmVkX2JmID0gYmY7CgkJICAgIHRlc3RfcGMgPSByeF90ZXN0X2JhY2t0cmFja19yZXR1cm47 CgkJICAgIGdvdG8gdGVzdF9yZXR1cm5fY29udGludWF0aW9uOwoJCSAgcmVzdW1lX2NvbnRpbnVh dGlvbl8zOgoJCSAgICBiZiA9IHNlYXJjaF9zdGF0ZS5zYXZlZF9iZjsKCQkgICAgZ290byB0cnlf YnVyc3RfMjsKCQkgIGNhc2UgcnhfZ2V0X2J1cnN0X25vX21vcmU6CgkJICAgIC8qIFNpbmNlIHdl J3ZlIGJlZW4gaGVyZSBiZWZvcmUsIGl0IGlzIHNvbWUga2luZCBvZgoJCSAgICAgKiBlcnJvciB0 aGF0IHdlIGNhbid0IHJldHVybi4KCQkgICAgICovCgkJICBjYXNlIHJ4X2dldF9idXJzdF9lcnJv cjoKCQkgICAgc2VhcmNoX3N0YXRlLnRlc3RfcmV0ID0gcnhfdGVzdF9pbnRlcm5hbF9lcnJvcjsK CQkgICAgZ290byB0ZXN0X2RvX3JldHVybjsKCQkgIGNhc2UgcnhfZ2V0X2J1cnN0X29rOgoJCSAg ICBicmVhazsKCQkgIH0KCSAgICAgIH0KCSAgICAgIHNlYXJjaF9zdGF0ZS50ZXN0X3BvcyA9IGJm LT5zdGtfdGVzdF9wb3M7CgkgICAgICBnb3RvIHdoaWxlX25vbl9kZXRfb3B0aW9uczsKCSAgICB9 CgkgICAgCgkgICAgCgkgIGNhc2UgcnhfY2FjaGVfbWlzczoKCSAgICAvKiBCZWNhdXNlIHRoZSBz dXBlcnN0YXRlIE5GQSBpcyBsYXppbHkgY29uc3RydWN0ZWQsCgkgICAgICogYW5kIGluIGZhY3Qg bWF5IGVyb2RlIGZyb20gdW5kZXJuZWF0aCB1cywgd2Ugc29tZXRpbWVzCgkgICAgICogaGF2ZSB0 byBjb25zdHJ1Y3QgdGhlIG5leHQgaW5zdHJ1Y3Rpb24gZnJvbSB0aGUgaGFyZCB3YXkuCgkgICAg ICogVGhpcyBpbnZva2VzIG9uZSBzdGVwIGluIHRoZSBsYXp5LWNvbnZlcnNpb24uCgkgICAgICov CgkgICAgc2VhcmNoX3N0YXRlLmlmciA9IHJ4X2hhbmRsZV9jYWNoZV9taXNzICgmcnhiLT5yeCwK CQkJCQkJICAgICBzZWFyY2hfc3RhdGUuc3VwZXIsCgkJCQkJCSAgICAgc2VhcmNoX3N0YXRlLmMs CgkJCQkJCSAgICAgc2VhcmNoX3N0YXRlLmlmci0+ZGF0YV8yKTsKCSAgICBpZiAoIXNlYXJjaF9z dGF0ZS5pZnIpCgkgICAgICB7CgkJc2VhcmNoX3N0YXRlLnRlc3RfcmV0ID0gcnhfdGVzdF9pbnRl cm5hbF9lcnJvcjsKCQlnb3RvIHRlc3RfZG9fcmV0dXJuOwoJICAgICAgfQoJICAgIGdvdG8gcmVz dGFydDsKCSAgICAKCSAgY2FzZSByeF9iYWNrdHJhY2s6CgkgICAgLyogUlhfQkFDS1RSQUNLIG1l YW5zIHRoYXQgd2UndmUgcmVhY2hlZCB0aGUgZW1wdHkKCSAgICAgKiBzdXBlcnN0YXRlLCBpbmRp Y2F0aW5nIHRoYXQgbWF0Y2ggY2FuJ3Qgc3VjY2VlZAoJICAgICAqIGZyb20gdGhpcyBwb2ludC4K CSAgICAgKi8KCSAgICBnb3RvIHRlc3RfZG9fcmV0dXJuOwoJICAgIAoJICBjYXNlIHJ4X25leHRf Y2hhcjoKCSAgY2FzZSByeF9lcnJvcl9pbng6CgkgIGNhc2UgcnhfbnVtX2luc3RydWN0aW9uczoK CSAgICBzZWFyY2hfc3RhdGUucmV0X3ZhbCA9IDA7CgkgICAgZ290byB0ZXN0X2RvX3JldHVybjsK CSAgfQoJZ290byBwc2V1ZG9fd2hpbGVfMTsKICAgICAgfQogICAgCiAgICAvKiBIZWFsdGh5IGV4 aXRzIGZyb20gdGhlIHRlc3QtbWF0Y2ggbG9vcCBkbyBhIAogICAgICogYGdvdG8gcmV0dXJuX2Zy b21fdGVzdF9tYXRjaCcgICBPbiB0aGUgb3RoZXIgaGFuZCwgCiAgICAgKiB3ZSBtaWdodCBlbmQg dXAgaGVyZS4KICAgICAqLwogIGVycm9yX2luX3Rlc3RpbmdfbWF0Y2g6CiAgICB0ZXN0X3N0YXRl ID0gcnhfdGVzdF9lcnJvcjsKICAgIGdvdG8gdGVzdF9yZXR1cm5zX3RvX3NlYXJjaDsKICAgIAog ICAgLyoqKioqIGZhc3RtYXAvc2VhcmNoIGxvb3AgYm9keQogICAgICoJICAgICAgY29uc2lkZXJp bmcgdGhlIHJlc3VsdHMgdGVzdGluZyBmb3IgYSBtYXRjaAogICAgICovCiAgICAKICByZXR1cm5f ZnJvbV90ZXN0X21hdGNoOgogICAgCiAgICBpZiAoc2VhcmNoX3N0YXRlLmJlc3RfbGFzdF9sID49 IDApCiAgICAgIHsKCWlmIChyZWdzICYmIChyZWdzLT5zdGFydCAhPSBzZWFyY2hfc3RhdGUuYmVz dF9scGFyZW4pKQoJICB7CgkgICAgYmNvcHkgKHNlYXJjaF9zdGF0ZS5iZXN0X2xwYXJlbiwgcmVn cy0+c3RhcnQsCgkJICAgcmVncy0+bnVtX3JlZ3MgKiBzaXplb2YgKGludCkpOwoJICAgIGJjb3B5 IChzZWFyY2hfc3RhdGUuYmVzdF9ycGFyZW4sIHJlZ3MtPmVuZCwKCQkgICByZWdzLT5udW1fcmVn cyAqIHNpemVvZiAoaW50KSk7CgkgIH0KCWlmIChyZWdzICYmICFyeGItPm5vX3N1YikKCSAgewoJ ICAgIGludCBxOwoJICAgIGludCBib3VuZCA9IChyZWdzLT5udW1fcmVncyA+IHNlYXJjaF9zdGF0 ZS5udW1fcmVncwoJCQkgPyByZWdzLT5udW1fcmVncwoJCQkgOiBzZWFyY2hfc3RhdGUubnVtX3Jl Z3MpOwoJICAgIHJlZ29mZl90ICogcyA9IHJlZ3MtPnN0YXJ0OwoJICAgIHJlZ29mZl90ICogZSA9 IHJlZ3MtPmVuZDsKCSAgICBmb3IgKHEgPSBzZWFyY2hfc3RhdGUuYmVzdF9sYXN0X2wgKyAxOyAg cSA8IGJvdW5kOyArK3EpCgkgICAgICBzW3FdID0gZVtxXSA9IC0xOwoJICB9CglzZWFyY2hfc3Rh dGUucmV0X3ZhbCA9IHNlYXJjaF9zdGF0ZS5iZXN0X2xwYXJlblswXTsKCXRlc3Rfc3RhdGUgPSBy eF90ZXN0X29rOwoJZ290byB0ZXN0X3JldHVybnNfdG9fc2VhcmNoOwogICAgICB9CiAgICBlbHNl CiAgICAgIHsKCXRlc3Rfc3RhdGUgPSByeF90ZXN0X2ZhaWw7Cglnb3RvIHRlc3RfcmV0dXJuc190 b19zZWFyY2g7CiAgICAgIH0KICAgIAogIHRlc3RfcmV0dXJuX2NvbnRpbnVhdGlvbjoKICAgIHNl YXJjaF9zdGF0ZS50ZXN0X21hdGNoX3Jlc3VtZV9wdCA9IHRlc3RfcGM7CiAgICB0ZXN0X3N0YXRl ID0gcnhfdGVzdF9jb250aW51YXRpb247CiAgICBnb3RvIHRlc3RfcmV0dXJuc190b19zZWFyY2g7 CiAgfQp9CgoKCiNlbmRpZiAvKiBSWF9XQU5UX1JYX0RFRlMgKi8KCgoKI2Vsc2UgLyogUlhfV0FO VF9TRV9ERUZTICovCiAgLyogSW50ZWdlcnMgYXJlIHVzZWQgdG8gcmVwcmVzZW50IHNpZGUgZWZm ZWN0cy4KICAgKgogICAqIFNpbXBsZSBzaWRlIGVmZmVjdHMgYXJlIGdpdmVuIG5lZ2F0aXZlIGlu dGVnZXIgbmFtZXMgYnkgdGhlc2UgZW51bXMuCiAgICogCiAgICogTm9uLW5lZ2F0aXZlIG5hbWVz IGFyZSByZXNlcnZlZCBmb3IgY29tcGxleCBlZmZlY3RzLgogICAqCiAgICogQ29tcGxleCBlZmZl Y3RzIGFyZSB0aG9zZSB0aGF0IHRha2UgYXJndW1lbnRzLiAgRm9yIGV4YW1wbGUsIAogICAqIGEg cmVnaXN0ZXIgYXNzaWdubWVudCBhc3NvY2lhdGVkIHdpdGggYSBncm91cCBpcyBjb21wbGV4IGJl Y2F1c2UKICAgKiBpdCByZXF1aXJlcyBhbiBhcmd1bWVudCB0byB0ZWxsIHdoaWNoIGdyb3VwIGlz IGJlaW5nIG1hdGNoZWQuCiAgICogCiAgICogVGhlIGludGVnZXIgbmFtZSBvZiBhIGNvbXBsZXgg ZWZmZWN0IGlzIGFuIGluZGV4IGludG8gcnhiLT5zZV9wYXJhbXMuCiAgICovCiAKICBSWF9ERUZf U0UoMSwgcmVfc2VfdHJ5LCA9IC0xKQkJLyogRXBzaWxvbiBmcm9tIHN0YXJ0IHN0YXRlICovCgog IFJYX0RFRl9TRSgwLCByZV9zZV9wdXNoYmFjaywgPSByZV9zZV90cnkgLSAxKQogIFJYX0RFRl9T RSgwLCByZV9zZV9wdXNoMCwgPSByZV9zZV9wdXNoYmFjayAtMSkKICBSWF9ERUZfU0UoMCwgcmVf c2VfcHVzaHBvcywgPSByZV9zZV9wdXNoMCAtIDEpCiAgUlhfREVGX1NFKDAsIHJlX3NlX2Noa3Bv cywgPSByZV9zZV9wdXNocG9zIC0xKQogIFJYX0RFRl9TRSgwLCByZV9zZV9wb3Bwb3MsID0gcmVf c2VfY2hrcG9zIC0gMSkKCiAgUlhfREVGX1NFKDEsIHJlX3NlX2F0X2RvdCwgPSByZV9zZV9wb3Bw b3MgLSAxKQkvKiBFbWFjcyBvbmx5ICovCiAgUlhfREVGX1NFKDAsIHJlX3NlX3N5bnRheCwgPSBy ZV9zZV9hdF9kb3QgLSAxKSAvKiBFbWFjcyBvbmx5ICovCiAgUlhfREVGX1NFKDAsIHJlX3NlX25v dF9zeW50YXgsID0gcmVfc2Vfc3ludGF4IC0gMSkgLyogRW1hY3Mgb25seSAqLwoKICBSWF9ERUZf U0UoMSwgcmVfc2VfYmVnYnVmLCA9IHJlX3NlX25vdF9zeW50YXggLSAxKSAvKiBtYXRjaCBiZWdp bm5pbmcgb2YgYnVmZmVyICovCiAgUlhfREVGX1NFKDEsIHJlX3NlX2hhdCwgPSByZV9zZV9iZWdi dWYgLSAxKSAvKiBtYXRjaCBiZWdpbm5pbmcgb2YgbGluZSAqLwoKICBSWF9ERUZfU0UoMSwgcmVf c2Vfd29yZGJlZywgPSByZV9zZV9oYXQgLSAxKSAKICBSWF9ERUZfU0UoMSwgcmVfc2Vfd29yZGJv dW5kLCA9IHJlX3NlX3dvcmRiZWcgLSAxKQogIFJYX0RFRl9TRSgxLCByZV9zZV9ub3R3b3JkYm91 bmQsID0gcmVfc2Vfd29yZGJvdW5kIC0gMSkKCiAgUlhfREVGX1NFKDEsIHJlX3NlX3dvcmRlbmQs ID0gcmVfc2Vfbm90d29yZGJvdW5kIC0gMSkKICBSWF9ERUZfU0UoMSwgcmVfc2VfZW5kYnVmLCA9 IHJlX3NlX3dvcmRlbmQgLSAxKQoKICAvKiBUaGlzIGZhaWxzIGV4Y2VwdCBhdCB0aGUgZW5kIG9m IGEgbGluZS4gCiAgICogSXQgZGVzZXJ2ZXMgdG8gZ28gaGVyZSBzaW5jZSBpdCBpcyB0eXBpY2x5 IG9uZSBvZiB0aGUgbGFzdCBzdGVwcyAKICAgKiBpbiBhIG1hdGNoLgogICAqLwogIFJYX0RFRl9T RSgxLCByZV9zZV9kb2xsYXIsID0gcmVfc2VfZW5kYnVmIC0gMSkKCiAgLyogU2ltcGxlIGVmZmVj dHM6ICovCiAgUlhfREVGX1NFKDEsIHJlX3NlX2ZhaWwsID0gcmVfc2VfZG9sbGFyIC0gMSkKCiAg LyogQ29tcGxleCBlZmZlY3RzLiAgVGhlc2UgYXJlIHVzZWQgaW4gdGhlICdzZScgZmllbGQgb2Yg CiAgICogYSBzdHJ1Y3QgcmVfc2VfcGFyYW1zLiAgSW5kZXhlcyBpbnRvIHRoZSBzZSBhcnJheQog ICAqIGFyZSBzdG9yZWQgYXMgaW5zdHJ1Y3Rpb25zIG9uIG5mYSBlZGdlcy4KICAgKi8KICBSWF9E RUZfQ1BMWF9TRSgxLCByZV9zZV93aW4sID0gMCkKICBSWF9ERUZfQ1BMWF9TRSgxLCByZV9zZV9s cGFyZW4sID0gcmVfc2Vfd2luICsgMSkKICBSWF9ERUZfQ1BMWF9TRSgxLCByZV9zZV9ycGFyZW4s ID0gcmVfc2VfbHBhcmVuICsgMSkKICBSWF9ERUZfQ1BMWF9TRSgwLCByZV9zZV9iYWNrcmVmLCA9 IHJlX3NlX3JwYXJlbiArIDEpCiAgUlhfREVGX0NQTFhfU0UoMCwgcmVfc2VfaXRlciwgPSByZV9z ZV9iYWNrcmVmICsgMSkgCiAgUlhfREVGX0NQTFhfU0UoMCwgcmVfc2VfZW5kX2l0ZXIsID0gcmVf c2VfaXRlciArIDEpCiAgUlhfREVGX0NQTFhfU0UoMCwgcmVfc2VfdHYsID0gcmVfc2VfZW5kX2l0 ZXIgKyAxKQoKI2VuZGlmCgojZW5kaWYK ----=_339057e770280908aad679.MFSBCHJLHS Content-Type: application/octet-stream; name=less.dif.gz Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=less.dif.gz H4sICFUqHTMAA2xlc3MuZGlmZgCtkd9OwjAUxq/bp/i8cjAGbGgIEBL0xsTExMgDLGXroMn+pe1U Qnx3T8c0EdAre3N6zvn69dfTVGUZgkZv7jEqRrk0ZlQ1tm7sMMHwZ86DIDgTsbWweBIa4xBhOB9H 88kE4Ww25b7vnzqwdVPiUZQII9LMo3B+Oz2KVysE0c1sMIV/DKsVB/pojCq3ECgqLVFX2opNLiH0 tilkaZErY1HIZCdKZQpYiqi1Km12bYbOYMTBjBVWJaAqD9Sx62WFHaAmnx73i/15EUzLLZlLDTLX 6FNvQdXnu5cH9J2GskOLPYla7GNw2IwlVQ5/CVPFJn5Tqd25ox8cPPhqnXMsuI9udZoLXORDTiqD dyXKfZwqU+di73A7lum4ZWmDYzlQK8ml0PGmsp47z4iKRie1ywLmvVYq7f3N02ku8zD6WWO1Rx0d 2yoWG/ql74veVXdrljdm57Yt5ixqMdvQjsw96eRFJ9z/wppgia20yU57v87yE58B0RUSAwAA ----=_339057e770280908aad679.MFSBCHJLHS-- - For help on using this list (especially unsubscribing), send a message to "gnu-win32-request AT cygnus DOT com" with one line of text: "help".