From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1FFTm9-0007ZH-0x for mharc-grub-devel@gnu.org; Sat, 04 Mar 2006 05:14:13 -0500 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1FEtTH-0008W0-Oj for grub-devel@gnu.org; Thu, 02 Mar 2006 14:28:20 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1FEtTC-0008Ux-9P for grub-devel@gnu.org; Thu, 02 Mar 2006 14:28:18 -0500 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1FEtTA-0008Uf-85 for grub-devel@gnu.org; Thu, 02 Mar 2006 14:28:12 -0500 Received: from [157.24.2.30] (helo=smtp1.cc.lut.fi) by monty-python.gnu.org with esmtp (Exim 4.52) id 1FEtUf-0000vO-Rf for grub-devel@gnu.org; Thu, 02 Mar 2006 14:29:47 -0500 Received: from localhost (smtp1 [127.0.0.1]) by smtp1.cc.lut.fi (Postfix) with ESMTP id E34B17020A; Thu, 2 Mar 2006 21:28:08 +0200 (EET) Received: from smtp1.cc.lut.fi ([127.0.0.1]) by localhost (smtp1.cc.lut.fi [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 16830-08; Thu, 2 Mar 2006 21:28:08 +0200 (EET) Received: from [192.168.1.100] (lk4-a-4-1.lnet.lut.fi [157.24.102.107]) by smtp1.cc.lut.fi (Postfix) with ESMTP id 56AFB701E1; Thu, 2 Mar 2006 21:28:07 +0200 (EET) Message-ID: <4407474E.6060708@nic.fi> Date: Thu, 02 Mar 2006 21:28:14 +0200 From: =?UTF-8?B?VmVzYSBKw6TDpHNrZWzDpGluZW4=?= User-Agent: Thunderbird 1.5 (Windows/20051201) MIME-Version: 1.0 To: The development of GRUB 2 X-Enigmail-Version: 0.93.2.0 Content-Type: multipart/mixed; boundary="------------070608020509020002050407" X-Virus-Scanned: by lut.fi X-Mailman-Approved-At: Sat, 04 Mar 2006 05:14:11 -0500 Cc: Subject: New patch for video subsystem... X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The development of GRUB 2 List-Id: The development of GRUB 2 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 02 Mar 2006 19:28:21 -0000 This is a multi-part message in MIME format. --------------070608020509020002050407 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi, Here is the newest modifications to video subsystem. In short: This patch adds support for video driver interface, example driver for VBE, new video terminal (framebuffer terminal) using this video subsystem= . Longer description: This patch implements most of the functionality described in grub's wiki (http://grub.enbug.org/VideoSubsystem). There are still some issues left to be implemented, but in my opinion it would be more important in this point to get feedback about it and test how well it works on other systems. Currently speed has not been target, only the functionality, so some operations will take more time than would be nice. There is support for index color and RGB modes. Video driver interface consist of video module (video/video.c) that will forward all queries to active driver and then interface definition (include/grub/video.h). There is an example driver that implements VESA Bios Extension 2.0 support, only to framebuffer modes (video/i386/pc/vbe.c). It also contains some support functionality for MultiBoot standard as it needs some VBE fields. There is implementaion for video terminal (term/videoterm.c) that has basic support for rendering graphical terminal with two layers (actually background layer is just a plain color, but other source could also be used). Enhancing functionality the videoterm at this point is quite easy, we just need to know what we want. At this stage I think it would be Ok, to start to write drivers for other architectures so we can have common video terminal. How to use it: In order to have graphical console, you need to first load video driver (that would be vbe module) and then load videoterm module. After that you will need to tell what video mode you would like to use. And last you just initialize it with "terminal videoterm". Example command sequence: insmod font font /boot/grub/unifont.pff insmod terminal insmod vbe insmod videoterm set video_mode=3D1024x768 terminal videoterm How to fine tune video mode: Handling of video_mode environment variable is a flexible one. You can specify multiple settings at one line. If video_mode is not set, it will use 1024x768 as a default resolution and will use highes number of colors available. Supported options are following: width=3D height=3D index rgb xx And you can make combo's of those like: set video_mode=3D"width=3D1024 height=3D768 rgb" It would tell driver to only look for RGB modes in that size. Thanks, Vesa J=C3=A4=C3=A4skel=C3=A4inen --------------070608020509020002050407 Content-Type: text/plain; name="grub2-video-20060302.diff" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="grub2-video-20060302.diff" ZGlmZiAtcnVOIC14ICcqQ1ZTKicgZ3J1YjIvQ2hhbmdlTG9nIGdydWIyLm5ldy9DaGFuZ2VM b2cKLS0tIGdydWIyL0NoYW5nZUxvZwkyMDA2LTAyLTA5IDAwOjQyOjQ3LjAwMDAwMDAwMCAr MDIwMAorKysgZ3J1YjIubmV3L0NoYW5nZUxvZwkyMDA2LTAzLTAyIDIwOjQwOjUxLjM0NjI0 ODEyMCArMDIwMApAQCAtMSwzICsxLDEwMiBAQAorMjAwNi0wMi0yNSAgVmVzYSBKYWFza2Vs YWluZW4gIDxjaGFhY0BuaWMuZmk+CisKKwkqIERJU1RMSVNUOiBBZGRlZCBpbmNsdWRlL2dy dWIvdmlkZW8uaCwgdGVybS92aWRlb3Rlcm0uYywKKwl2aWRlby92aWRlby5jLgorCVJlbW92 ZWQgdGVybS9pMzg2L3BjL3Zlc2FmYi5jLgorCisJKiBjb25mL2kzODYtcGMucm1rIChwa2dk YXRhX01PRFVMRVMpOiBBZGRlZCB2aWRlby5tb2QsCisJdmlkZW90ZXJtLm1vZC4KKwlSZW1v dmVkIHZnYS5tb2QsIHZlc2FmYi5tb2QuCisJKHZpZGVvX21vZF9TT1VSQ0VTKTogQWRkZWQu CisJKHZpZGVvX21vZF9DRkxBR1MpOiBBZGRlZC4KKwkodmlkZW9fbW9kX0xERkxBR1MpOiBB ZGRlZC4KKwkodmlkZW90ZXJtX21vZF9TT1VSQ0VTKTogQWRkZWQuCisJKHZpZGVvdGVybV9t b2RfQ0ZMQUdTKTogQWRkZWQuCisJKHZpZGVvdGVybV9tb2RfTERGTEFHUyk6IEFkZGVkLgor CSh2ZXNhZmJfbW9kX1NPVVJDRVMpOiBSZW1vdmVkLgorCSh2ZXNhZmJfbW9kX0NGTEFHUyk6 IFJlbW92ZWQuCisJKHZlc2FmYl9tb2RfTERGTEFHUyk6IFJlbW92ZWQuCisJKHZnYV9tb2Rf U09VUkNFUyk6IFJlbW92ZWQuCisJKHZnYV9tb2RfQ0ZMQUdTKTogUmVtb3ZlZC4KKwkodmdh X21vZF9MREZMQUdTKTogUmVtb3ZlZC4KKworCSogZm9udC9tYW5hZ2VyLmMgKGZpbGxfd2l0 aF9kZWZhdWx0X2dseXBoKTogTW9kaWZpZWQgdG8gdXNlCisJZ3J1Yl9mb250X2dseXBoLgor CShncnViX2ZvbnRfZ2V0X2dseXBoKTogTW9kaWZpZWQgdG8gdXNlIGdydWJfZm9udF9nbHlw aC4KKwkoZm9udG1hbmFnZXIpOiBSZW5hbWVkIHRvIGZvbnRfbWFuYWdlci4KKworCSogaW5j bHVkZS9ncnViL2ZvbnQuaCAoZ3J1Yl9mb250X2dseXBoKTogQWRkZWQuCisJKGdydWJfZm9u dF9nZXRfZ2x5cGgpIE1vZGlmaWVkIHRvIHVzZSBncnViX2ZvbnRfZ2x5cGguCisKKwkqIGlu Y2x1ZGUvZ3J1Yi9taXNjLmggKGdydWJfYWJzKTogQWRkZWQgYXMgaW5saW5lIGZ1bmN0aW9u LgorCisJKiBpbmNsdWRlL2dydWIvaTM4Ni9wYy92YmUuaCAoR1JVQl9WQkVfU1RBVFVTX09L KTogQWRkZWQuCisJKEdSVUJfVkJFX01FTU9SWV9NT0RFTF9QQUNLRURfUElYRUwpOiBMaWtl d2lzZS4KKwkoR1JVQl9WQkVfTUVNT1JZX01PREVMX0RJUkVDVF9DT0xPUik6IExpa2V3aXNl LgorCShncnViX3ZiZV9nZXRfY29udHJvbGxlcl9pbmZvKTogUmVuYW1lZCB0bworCWdydWJf dmJlX2Jpb3NfZ2V0X2NvbnRyb2xsZXJfaW5mby4KKwkoZ3J1Yl92YmVfZ2V0X21vZGVfaW5m byk6IFJlbmFtZWQgdG8gZ3J1Yl92YmVfYmlvc19nZXRfbW9kZV9pbmZvLgorCShncnViX3Zi ZV9zZXRfbW9kZSk6IFJlbmFtZWQgdG8gZ3J1Yl92YmVfYmlvc19zZXRfbW9kZS4KKwkoZ3J1 Yl92YmVfZ2V0X21vZGUpOiBSZW5hbWVkIHRvIGdydWJfdmJlX2Jpb3NfZ2V0X21vZGUuCisJ KGdydWJfdmJlX3NldF9tZW1vcnlfd2luZG93KTogUmVuYW1lZCB0bworCWdydWJfdmJlX2Jp b3Nfc2V0X21lbW9yeV93aW5kb3cuCisJKGdydWJfdmJlX2dldF9tZW1vcnlfd2luZG93KTog UmVuYW1lZCB0bworCWdydWJfdmJlX2Jpb3NfZ2V0X21lbW9yeV93aW5kb3cuCisJKGdydWJf dmJlX3NldF9zY2FubGluZV9sZW5ndGgpOiBSZW5hbWVkIHRvCisJZ3J1Yl92YmVfc2V0X3Nj YW5saW5lX2xlbmd0aC4KKwkoZ3J1Yl92YmVfZ2V0X3NjYW5saW5lX2xlbmd0aCk6IFJlbmFt ZWQgdG8KKwlncnViX3ZiZV9iaW9zX2dldF9zY2FubGluZV9sZW5ndGguCisJKGdydWJfdmJl X3NldF9kaXNwbGF5X3N0YXJ0KTogUmVuYW1lZCB0bworCWdydWJfdmJlX2Jpb3Nfc2V0X2Rp c3BsYXlfc3RhcnQuCisJKGdydWJfdmJlX2dldF9kaXNwbGF5X3N0YXJ0KTogUmVuYW1lZCB0 bworCWdydWJfdmJlX2Jpb3NfZ2V0X2Rpc3BsYXlfc3RhcnQuCisJKGdydWJfdmJlX3NldF9w YWxldHRlX2RhdGEpOiBSZW5hbWVkIHRvCisJZ3J1Yl92YmVfYmlvc19zZXRfcGFsZXR0ZV9k YXRhLgorCShncnViX3ZiZV9zZXRfcGl4ZWxfcmdiKTogUmVtb3ZlZC4KKwkoZ3J1Yl92YmVf c2V0X3BpeGVsX2luZGV4KTogTGlrZXdpc2UuCisKKwkqIGluY2x1ZGUvZ3J1Yi92aWRlby5o OiBBZGRlZC4KKworCSoga2Vybi9pMzg2L3BjL3N0YXJ0dXAuUyAoZ3J1Yl92YmVfZ2V0X2Nv bnRyb2xsZXJfaW5mbyk6IFJlbmFtZWQgdG8KKwlncnViX3ZiZV9iaW9zX2dldF9jb250cm9s bGVyX2luZm8uCisJKGdydWJfdmJlX2dldF9tb2RlX2luZm8pOiBSZW5hbWVkIHRvIGdydWJf dmJlX2Jpb3NfZ2V0X21vZGVfaW5mby4KKwkoZ3J1Yl92YmVfc2V0X21vZGUpOiBSZW5hbWVk IHRvIGdydWJfdmJlX2Jpb3Nfc2V0X21vZGUuCisJKGdydWJfdmJlX2dldF9tb2RlKTogUmVu YW1lZCB0byBncnViX3ZiZV9iaW9zX2dldF9tb2RlLgorCShncnViX3ZiZV9zZXRfbWVtb3J5 X3dpbmRvdyk6IFJlbmFtZWQgdG8KKwlncnViX3ZiZV9iaW9zX3NldF9tZW1vcnlfd2luZG93 LgorCShncnViX3ZiZV9nZXRfbWVtb3J5X3dpbmRvdyk6IFJlbmFtZWQgdG8KKwlncnViX3Zi ZV9iaW9zX2dldF9tZW1vcnlfd2luZG93LgorCShncnViX3ZiZV9zZXRfc2NhbmxpbmVfbGVu Z3RoKTogUmVuYW1lZCB0bworCWdydWJfdmJlX3NldF9zY2FubGluZV9sZW5ndGguCisJKGdy dWJfdmJlX2dldF9zY2FubGluZV9sZW5ndGgpOiBSZW5hbWVkIHRvCisJZ3J1Yl92YmVfYmlv c19nZXRfc2NhbmxpbmVfbGVuZ3RoLgorCShncnViX3ZiZV9zZXRfZGlzcGxheV9zdGFydCk6 IFJlbmFtZWQgdG8KKwlncnViX3ZiZV9iaW9zX3NldF9kaXNwbGF5X3N0YXJ0LgorCShncnVi X3ZiZV9nZXRfZGlzcGxheV9zdGFydCk6IFJlbmFtZWQgdG8KKwlncnViX3ZiZV9iaW9zX2dl dF9kaXNwbGF5X3N0YXJ0LgorCShncnViX3ZiZV9zZXRfcGFsZXR0ZV9kYXRhKTogUmVuYW1l ZCB0bworCWdydWJfdmJlX2Jpb3Nfc2V0X3BhbGV0dGVfZGF0YS4KKwkoZ3J1Yl92YmVfYmlv c19nZXRfY29udHJvbGxlcl9pbmZvKTogRml4ZWQgcHJvYmxlbSB3aXRoIHJlZ2lzdGVycwor CWdldHRpbmcgY29ycnVwdGVkIGFmdGVyIGNhbGxpbmcgaXQuIEFkZGVkIG1vcmUgcHVzaGVz IGFuZCBwb3BzLgorCShncnViX3ZiZV9iaW9zX3NldF9tb2RlKTogTGlrZXdpc2UuCisJKGdy dWJfdmJlX2Jpb3NfZ2V0X21vZGUpOiBMaWtld2lzZS4KKwkoZ3J1Yl92YmVfYmlvc19nZXRf bWVtb3J5X3dpbmRvdyk6IExpa2V3aXNlLgorCShncnViX3ZiZV9iaW9zX3NldF9zY2FubGlu ZV9sZW5ndGgpOiBMaWtld2lzZS4KKwkoZ3J1Yl92YmVfYmlvc19nZXRfc2NhbmxpbmVfbGVu Z3RoKTogTGlrZXdpc2UuCisJKGdydWJfdmJlX2Jpb3NfZ2V0X2Rpc3BsYXlfc3RhcnQpOiBM aWtld2lzZS4KKwkoZ3J1Yl92YmVfYmlvc19zZXRfcGFsZXR0ZV9kYXRhKTogTGlrZXdpc2Uu CisKKwkqIG5vcm1hbC9jbWRsaW5lLmMgKGNsX3NldF9wb3MpOiBNYWRlIGl0IHJlZnJlc2gg c2NyZWVuLCB0byBlbmFibGUKKwliZXR0ZXIgdmlzdWFsIGV4cGVyaWVuY2UgdG8gdmlkZW8g ZHJpdmVycy4KKwkoY2xfaW5zZXJ0KTogTGlrZXdpc2UuCisJKGNsX2RlbGV0ZSk6IExpa2V3 aXNlLgorCisJKiB0ZXJtL3ZpZGVvdGVybS5jOiBBZGRlZC4KKworCSogdmlkZW8vdmlkZW8u YzogQWRkZWQKKworCSogdmlkZW8vaTM4Ni9wYy92YmUuYzogUmVmYWN0b3JlZCB0byBuZXcg dmlkZW8gc3Vic3lzdGVtLgorCiAyMDA2LTAyLTAxICBZb3NoaW5vcmkgSy4gT2t1amkgIDxv a3VqaUBlbmJ1Zy5vcmc+CiAKIAkqIGJvb3QvaTM4Ni9wYy9ib290LlMgKGdlbmVyYWxfZXJy b3IpOiBCZWZvcmUgbG9vcGluZywgdHJ5IElOVApkaWZmIC1ydU4gLXggJypDVlMqJyBncnVi Mi9ESVNUTElTVCBncnViMi5uZXcvRElTVExJU1QKLS0tIGdydWIyL0RJU1RMSVNUCTIwMDUt MTItMjYgMDE6MDQ6MjguMDAwMDAwMDAwICswMjAwCisrKyBncnViMi5uZXcvRElTVExJU1QJ MjAwNi0wMi0yNSAxMzoyOToxNi4wMDAwMDAwMDAgKzAyMDAKQEAgLTEwNiw2ICsxMDYsNyBA QAogaW5jbHVkZS9ncnViL3Rlcm1pbmZvLmgKIGluY2x1ZGUvZ3J1Yi90cGFybS5oCiBpbmNs dWRlL2dydWIvdHlwZXMuaAoraW5jbHVkZS9ncnViL3ZpZGVvLmgKIGluY2x1ZGUvZ3J1Yi9p Mzg2L3NldGptcC5oCiBpbmNsdWRlL2dydWIvaTM4Ni90eXBlcy5oCiBpbmNsdWRlL2dydWIv aTM4Ni9wYy9iaW9zZGlzay5oCkBAIC0yMDgsNiArMjA5LDcgQEAKIHBhcnRtYXAvc3VuLmMK IHRlcm0vdGVybWluZm8uYwogdGVybS90cGFybS5jCit0ZXJtL3ZpZGVvdGVybS5jCiB0ZXJt L2kzODYvcGMvY29uc29sZS5jCiB0ZXJtL2kzODYvcGMvc2VyaWFsLmMKIHRlcm0vaTM4Ni9w Yy92ZXNhZmIuYwpAQCAtMjI5LDQgKzIzMSw1IEBACiB1dGlsL2kzODYvcGMvbWlzYy5jCiB1 dGlsL3Bvd2VycGMvaWVlZTEyNzUvZ3J1Yi1ta2ltYWdlLmMKIHV0aWwvcG93ZXJwYy9pZWVl MTI3NS9taXNjLmMKK3ZpZGVvL3ZpZGVvLmMKIHZpZGVvL2kzODYvcGMvdmJlLmMKZGlmZiAt cnVOIC14ICcqQ1ZTKicgZ3J1YjIvY29uZi9pMzg2LXBjLnJtayBncnViMi5uZXcvY29uZi9p Mzg2LXBjLnJtawotLS0gZ3J1YjIvY29uZi9pMzg2LXBjLnJtawkyMDA1LTEyLTI2IDAxOjA0 OjI5LjAwMDAwMDAwMCArMDIwMAorKysgZ3J1YjIubmV3L2NvbmYvaTM4Ni1wYy5ybWsJMjAw Ni0wMi0yNSAxNDoyMzoxMC4wMDAwMDAwMDAgKzAyMDAKQEAgLTExMyw5ICsxMTMsOSBAQAog Z3J1Yl9pbnN0YWxsX1NPVVJDRVMgPSB1dGlsL2kzODYvcGMvZ3J1Yi1pbnN0YWxsLmluCiAK ICMgTW9kdWxlcy4KLXBrZ2RhdGFfTU9EVUxFUyA9IF9jaGFpbi5tb2QgX2xpbnV4Lm1vZCBs aW51eC5tb2Qgbm9ybWFsLm1vZCB2Z2EubW9kCVwKK3BrZ2RhdGFfTU9EVUxFUyA9IF9jaGFp bi5tb2QgX2xpbnV4Lm1vZCBsaW51eC5tb2Qgbm9ybWFsLm1vZCBcCiAJX211bHRpYm9vdC5t b2QgY2hhaW4ubW9kIG11bHRpYm9vdC5tb2QgcmVib290Lm1vZCBoYWx0Lm1vZAlcCi0JdmJl Lm1vZCB2ZXNhZmIubW9kIHZiZXRlc3QubW9kIHZiZWluZm8ubW9kIHBsYXkubW9kCisJdmJl Lm1vZCB2YmV0ZXN0Lm1vZCB2YmVpbmZvLm1vZCB2aWRlby5tb2QgdmlkZW90ZXJtLm1vZCBw bGF5Lm1vZAogCiAjIEZvciBfY2hhaW4ubW9kLgogX2NoYWluX21vZF9TT1VSQ0VTID0gbG9h ZGVyL2kzODYvcGMvY2hhaW5sb2FkZXIuYwpAQCAtMTU3LDExICsxNTcsNiBAQAogaGFsdF9t b2RfQ0ZMQUdTID0gJChDT01NT05fQ0ZMQUdTKQogaGFsdF9tb2RfTERGTEFHUyA9ICQoQ09N TU9OX0xERkxBR1MpCiAKLSMgRm9yIHZnYS5tb2QuCi12Z2FfbW9kX1NPVVJDRVMgPSB0ZXJt L2kzODYvcGMvdmdhLmMKLXZnYV9tb2RfQ0ZMQUdTID0gJChDT01NT05fQ0ZMQUdTKQotdmdh X21vZF9MREZMQUdTID0gJChDT01NT05fTERGTEFHUykKLQogIyBGb3Igc2VyaWFsLm1vZC4K IHNlcmlhbF9tb2RfU09VUkNFUyA9IHRlcm0vaTM4Ni9wYy9zZXJpYWwuYwogc2VyaWFsX21v ZF9DRkxBR1MgPSAkKENPTU1PTl9DRkxBR1MpCkBAIC0xODIsMTEgKzE3Nyw2IEBACiB2YmVf bW9kX0NGTEFHUyA9ICQoQ09NTU9OX0NGTEFHUykKIHZiZV9tb2RfTERGTEFHUyA9ICQoQ09N TU9OX0xERkxBR1MpCiAKLSMgRm9yIHZlc2FmYi5tb2QuCi12ZXNhZmJfbW9kX1NPVVJDRVMg PSB0ZXJtL2kzODYvcGMvdmVzYWZiLmMKLXZlc2FmYl9tb2RfQ0ZMQUdTID0gJChDT01NT05f Q0ZMQUdTKQotdmVzYWZiX21vZF9MREZMQUdTID0gJChDT01NT05fTERGTEFHUykKLQogIyBG b3IgdmJlaW5mby5tb2QuCiB2YmVpbmZvX21vZF9TT1VSQ0VTID0gY29tbWFuZHMvaTM4Ni9w Yy92YmVpbmZvLmMKIHZiZWluZm9fbW9kX0NGTEFHUyA9ICQoQ09NTU9OX0NGTEFHUykKQEAg LTIwMiw0ICsxOTIsMTQgQEAKIHBsYXlfbW9kX0NGTEFHUyA9ICQoQ09NTU9OX0NGTEFHUykK IHBsYXlfbW9kX0xERkxBR1MgPSAkKENPTU1PTl9MREZMQUdTKQogCisjIEZvciB2aWRlby5t b2QuCit2aWRlb19tb2RfU09VUkNFUyA9IHZpZGVvL3ZpZGVvLmMKK3ZpZGVvX21vZF9DRkxB R1MgPSAkKENPTU1PTl9DRkxBR1MpCit2aWRlb19tb2RfTERGTEFHUyA9ICQoQ09NTU9OX0xE RkxBR1MpCisKKyMgRm9yIHZpZGVvdGVybS5tb2QuCit2aWRlb3Rlcm1fbW9kX1NPVVJDRVMg PSB0ZXJtL3ZpZGVvdGVybS5jCit2aWRlb3Rlcm1fbW9kX0NGTEFHUyA9ICQoQ09NTU9OX0NG TEFHUykKK3ZpZGVvdGVybV9tb2RfTERGTEFHUyA9ICQoQ09NTU9OX0xERkxBR1MpCisKIGlu Y2x1ZGUgJChzcmNkaXIpL2NvbmYvY29tbW9uLm1rCmRpZmYgLXJ1TiAteCAnKkNWUyonIGdy dWIyL2ZvbnQvbWFuYWdlci5jIGdydWIyLm5ldy9mb250L21hbmFnZXIuYwotLS0gZ3J1YjIv Zm9udC9tYW5hZ2VyLmMJMjAwNS0xMS0xMyAxNzo0NzowOS4wMDAwMDAwMDAgKzAyMDAKKysr IGdydWIyLm5ldy9mb250L21hbmFnZXIuYwkyMDA2LTAyLTI1IDE0OjE2OjE2LjAwMDAwMDAw MCArMDIwMApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGdydWIvdHlwZXMuaD4KICNp bmNsdWRlIDxncnViL21tLmg+CiAjaW5jbHVkZSA8Z3J1Yi9mb250Lmg+CisvLyNpbmNsdWRl IDxncnViL2d6aW8uaD4KIAogc3RydWN0IGVudHJ5CiB7CkBAIC01MCw2ICs1MSw3IEBACiAg IHN0cnVjdCBmb250ICpmb250ID0gMDsKIAogICBmaWxlID0gZ3J1Yl9maWxlX29wZW4gKGZp bGVuYW1lKTsKKyAgLy9maWxlID0gZ3J1Yl9nemZpbGVfb3BlbiAoZmlsZW5hbWUsIDEpOwog ICBpZiAoISBmaWxlKQogICAgIGdvdG8gZmFpbDsKIApAQCAtMTUxLDI2ICsxNTMsMjcgQEAK IAogLyogU2V0IHRoZSBnbHlwaCB0byBzb21ldGhpbmcgc3R1cGlkLiAgKi8KIHN0YXRpYyB2 b2lkCi1maWxsX3dpdGhfZGVmYXVsdF9nbHlwaCAodW5zaWduZWQgY2hhciBiaXRtYXBbMzJd LCB1bnNpZ25lZCAqd2lkdGgpCitmaWxsX3dpdGhfZGVmYXVsdF9nbHlwaCAoZ3J1Yl9mb250 X2dseXBoX3QgZ2x5cGgpCiB7Ci0gIGlmIChiaXRtYXApCi0gICAgewotICAgICAgdW5zaWdu ZWQgaTsKKyAgdW5zaWduZWQgaTsKIAotICAgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKysp Ci0JYml0bWFwW2ldID0gKGkgJiAxKSA/IDB4NTUgOiAweGFhOwotICAgIH0KLSAgICAgIAot ICAqd2lkdGggPSAxOworICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKyAgICBnbHlwaC0+ Yml0bWFwW2ldID0gKGkgJiAxKSA/IDB4NTUgOiAweGFhOworCisgIGdseXBoLT5jaGFyX3dp ZHRoID0gMTsKKyAgZ2x5cGgtPndpZHRoID0gZ2x5cGgtPmNoYXJfd2lkdGggKiA4OworICBn bHlwaC0+aGVpZ2h0ID0gMTY7CisgIGdseXBoLT5iYXNlbGluZSA9ICgxNiozKS80OwogfQog CiAvKiBHZXQgYSBnbHlwaCBjb3JyZXNwb25kaW5nIHRvIHRoZSBjb2RlcG9pbnQgQ09ERS4g QWx3YXlzIGZpbGwgQklUTUFQCiAgICBhbmQgV0lEVEggd2l0aCBzb21ldGhpbmcsIGV2ZW4g aWYgbm8gZ2x5cGggaXMgZm91bmQuICAqLwogaW50CiBncnViX2ZvbnRfZ2V0X2dseXBoIChn cnViX3VpbnQzMl90IGNvZGUsCi0JCSAgICAgdW5zaWduZWQgY2hhciBiaXRtYXBbMzJdLCB1 bnNpZ25lZCAqd2lkdGgpCisJCSAgICAgZ3J1Yl9mb250X2dseXBoX3QgZ2x5cGgpCiB7CiAg IHN0cnVjdCBmb250ICpmb250OworICBncnViX3VpbnQ4X3QgYml0bWFwWzMyXTsKIAogICAv KiBGSVhNRTogSXQgaXMgbmVjZXNzYXJ5IHRvIGNhY2hlIGdseXBocyEgICovCiAgIApAQCAt MTgzLDEyICsxODYsMTkgQEAKICAgICAgIGlmIChvZmZzZXQpCiAJewogCSAgZ3J1Yl91aW50 MzJfdCB3OworCSAgZ3J1Yl91aW50OF90IHg7CisJICBncnViX3VpbnQ4X3QgeTsKKwkgIGdy dWJfdWludDMyX3QgbGVuOworCisgICAgICAgICAgLyogTWFrZSBzdXJlIHdlIGNhbiBmaW5k IGdseXBocyBmb3IgZXJyb3IgbWVzc2FnZXMuIFB1c2ggYWN0aXZlCisgICAgICAgICAgICAg ZXJyb3IgbWVzc2FnZSB0byBlcnJvciBzdGFjayBhbmQgcmVzZXQgZXJyb3IgbWVzc2FnZS4g ICovCisgICAgICAgICAgZ3J1Yl9lcnJvcl9wdXNoICgpOwogCSAgCiAJICBncnViX2ZpbGVf c2VlayAoZm9udC0+ZmlsZSwgb2Zmc2V0KTsKLQkgIGlmIChncnViX2ZpbGVfcmVhZCAoZm9u dC0+ZmlsZSwgKGNoYXIgKikgJncsIDQpICE9IDQpCisJICBpZiAoKGxlbiA9IGdydWJfZmls ZV9yZWFkIChmb250LT5maWxlLCAoY2hhciAqKSAmdywgNCkpICE9IDQpCiAJICAgIHsKLQkg ICAgICByZW1vdmVfZm9udCAoZm9udCk7Ci0JICAgICAgZ290byByZXN0YXJ0OworICAgICAg ICAgICAgICByZW1vdmVfZm9udCAoZm9udCk7CisgICAgICAgICAgICAgIGdvdG8gcmVzdGFy dDsKIAkgICAgfQogCiAJICB3ID0gZ3J1Yl9sZV90b19jcHUzMiAodyk7CkBAIC0yMDYsMTQg KzIxNiwzMCBAQAogCSAgICAgIHJlbW92ZV9mb250IChmb250KTsKIAkgICAgICBnb3RvIHJl c3RhcnQ7CiAJICAgIH0KLQotCSAgKndpZHRoID0gdzsKKwkgICAgCisgICAgICAgICAgLyog VGVtcG9yYXJ5IHdvcmthcm91bmQsIGZpeCBmb250IGJpdG1hcC4gICovCisgICAgICAgICAg Zm9yICh5ID0gMDsgeSA8IDE2OyB5KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg IGZvciAoeCA9IDA7IHggPCB3OyB4KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgICAgZ2x5cGgtPmJpdG1hcFt5ICogdyArIHhdID0gYml0bWFwW3ggKiAxNiArIHld OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAKKwkgIGds eXBoLT5jaGFyX3dpZHRoID0gdzsKKwkgIGdseXBoLT53aWR0aCA9IGdseXBoLT5jaGFyX3dp ZHRoICogODsKKwkgIGdseXBoLT5oZWlnaHQgPSAxNjsKKwkgIGdseXBoLT5iYXNlbGluZSA9 ICgxNiozKS80OworCSAgCisJICAvKiBSZXN0b3JlIG9sZCBlcnJvciBtZXNzYWdlLiAgKi8K KyAgICAgICAgICBncnViX2Vycm9yX3BvcCAoKTsKKyAgICAgICAgICAKIAkgIHJldHVybiAx OwogCX0KICAgICB9CiAKICAgLyogVWdnaC4uLiBObyBmb250IHdhcyBmb3VuZC4gICovCi0g IGZpbGxfd2l0aF9kZWZhdWx0X2dseXBoIChiaXRtYXAsIHdpZHRoKTsKKyAgZmlsbF93aXRo X2RlZmF1bHRfZ2x5cGggKGdseXBoKTsKICAgcmV0dXJuIDA7CiB9CiAKQEAgLTIzMiw3ICsy NTgsNyBAQAogICByZXR1cm4gMDsKIH0KIAotR1JVQl9NT0RfSU5JVChmb250bWFuYWdlcikK K0dSVUJfTU9EX0lOSVQoZm9udF9tYW5hZ2VyKQogewogICAodm9pZCkgbW9kOyAvKiBTdG9w IHdhcm5pbmcuICAqLwogICBncnViX3JlZ2lzdGVyX2NvbW1hbmQgKCJmb250IiwgZm9udF9j b21tYW5kLCBHUlVCX0NPTU1BTkRfRkxBR19CT1RILApAQCAtMjQwLDcgKzI2Niw3IEBACiAJ CQkgIlNwZWNpZnkgb25lIG9yIG1vcmUgZm9udCBmaWxlcyB0byBkaXNwbGF5LiIsIDApOwog fQogCi1HUlVCX01PRF9GSU5JKGZvbnRtYW5hZ2VyKQorR1JVQl9NT0RfRklOSShmb250X21h bmFnZXIpCiB7CiAgIGdydWJfdW5yZWdpc3Rlcl9jb21tYW5kICgiZm9udCIpOwogfQpkaWZm IC1ydU4gLXggJypDVlMqJyBncnViMi9pbmNsdWRlL2dydWIvZm9udC5oIGdydWIyLm5ldy9p bmNsdWRlL2dydWIvZm9udC5oCi0tLSBncnViMi9pbmNsdWRlL2dydWIvZm9udC5oCTIwMDQt MDQtMDQgMTY6NDY6MDAuMDAwMDAwMDAwICswMzAwCisrKyBncnViMi5uZXcvaW5jbHVkZS9n cnViL2ZvbnQuaAkyMDA2LTAyLTI1IDEzOjQzOjA4LjAwMDAwMDAwMCArMDIwMApAQCAtMjQs NyArMjQsMzEgQEAKIAogI2RlZmluZSBHUlVCX0ZPTlRfTUFHSUMJIlBQRlx4N2YiCiAKK3N0 cnVjdCBncnViX2ZvbnRfZ2x5cGgKK3sKKyAgLyogR2x5cGggd2lkdGggaW4gcGl4ZWxzLiAg Ki8KKyAgZ3J1Yl91aW50OF90IHdpZHRoOworICAKKyAgLyogR2x5cGggaGVpZ2h0IGluIHBp eGVscy4gICovCisgIGdydWJfdWludDhfdCBoZWlnaHQ7CisgIAorICAvKiBHbHlwaCB3aWR0 aCBpbiBjaGFyYWN0ZXJzLiAgKi8KKyAgZ3J1Yl91aW50OF90IGNoYXJfd2lkdGg7CisgIAor ICAvKiBHbHlwaCBiYXNlbGluZSBwb3NpdGlvbiBpbiBwaXhlbHMgKGZyb20gdXApLiAgKi8K KyAgZ3J1Yl91aW50OF90IGJhc2VsaW5lOworICAKKyAgLyogR2x5cGggYml0bWFwIGRhdGEg YXJyYXkgb2YgYnl0ZXMgaW4gKCh3aWR0aCArIDcpIC8gOCkgKiBoZWlnaHQuCisgICAgIEJp dG1hcCBpcyBmb3JtdWxhdGVkIGJ5IGhlaWdodCBzY2FubGluZXMsIGVhY2ggc2NhbmxpbmUg aGF2aW5nCisgICAgIHdpZHRoIG51bWJlciBvZiBwaXhlbHMuIFBpeGVscyBhcmUgY29kZWQg YXMgYml0cywgdmFsdWUgMSBtZWFuaW5nCisgICAgIG9mIG9wYXF1ZSBwaXhlbCBhbmQgMCBp cyB0cmFuc3BhcmVudC4gSWYgd2lkdGggZG9lcyBub3QgZml0IGJ5dGUKKyAgICAgYm91bmRh cnksIGl0IHdpbGwgYmUgcGFkZGVkIHdpdGggMCB0byBtYWtlIGl0IGZpdC4gICovCisgIGdy dWJfdWludDhfdCBiaXRtYXBbMzJdOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgZ3J1Yl9mb250 X2dseXBoICpncnViX2ZvbnRfZ2x5cGhfdDsKKwogaW50IGdydWJfZm9udF9nZXRfZ2x5cGgg KGdydWJfdWludDMyX3QgY29kZSwKLQkJCSB1bnNpZ25lZCBjaGFyIGJpdG1hcFszMl0sIHVu c2lnbmVkICp3aWR0aCk7CisJCQkgZ3J1Yl9mb250X2dseXBoX3QgZ2x5cGgpOwogCiAjZW5k aWYgLyogISBHUlVCX0ZPTlRfSEVBREVSICovCmRpZmYgLXJ1TiAteCAnKkNWUyonIGdydWIy L2luY2x1ZGUvZ3J1Yi9pMzg2L3BjL3ZiZS5oIGdydWIyLm5ldy9pbmNsdWRlL2dydWIvaTM4 Ni9wYy92YmUuaAotLS0gZ3J1YjIvaW5jbHVkZS9ncnViL2kzODYvcGMvdmJlLmgJMjAwNS0w OC0xNiAyMTozNDoxNy4wMDAwMDAwMDAgKzAzMDAKKysrIGdydWIyLm5ldy9pbmNsdWRlL2dy dWIvaTM4Ni9wYy92YmUuaAkyMDA2LTAzLTAyIDE3OjQyOjQ0LjM0MjA1NTI1NiArMDIwMApA QCAtMjcsNiArMjcsMTMgQEAKIC8qIERlZmF1bHQgdmlkZW8gbW9kZSB0byBiZSB1c2VkLiAg Ki8KICNkZWZpbmUgR1JVQl9WQkVfREVGQVVMVF9WSURFT19NT0RFICAgICAweDEwMQogCisv KiBWQkUgc3RhdHVzIGNvZGVzLiAgKi8KKyNkZWZpbmUgR1JVQl9WQkVfU1RBVFVTX09LCQkw eDAwNGYKKworLyogVkJFIG1lbW9yeSBtb2RlbCB0eXBlcy4gICovCisjZGVmaW5lCUdSVUJf VkJFX01FTU9SWV9NT0RFTF9QQUNLRURfUElYRUwJMHgwNAorI2RlZmluZQlHUlVCX1ZCRV9N RU1PUllfTU9ERUxfRElSRUNUX0NPTE9SCTB4MDYKKwogLyogTm90ZToKICAKICAgIFBsZWFz ZSByZWZlciB0byBWRVNBIEJJT1MgRXh0ZW5zaW9uIDMuMCBTcGVjaWZpY2F0aW9uIGZvciBt b3JlIGRlc2NyaXB0aXZlCkBAIC0xNDcsNDUgKzE1NCw0NSBAQAogLyogUHJvdG90eXBlcyBm b3Iga2VybmVsIHJlYWwgbW9kZSB0aHVua3MuICAqLwogCiAvKiBDYWxsIFZFU0EgQklPUyAw eDRmMDAgdG8gZ2V0IFZCRSBDb250cm9sbGVyIEluZm9ybWF0aW9uLCByZXR1cm4gc3RhdHVz LiAgKi8KLWdydWJfdmJlX3N0YXR1c190IEVYUE9SVF9GVU5DKGdydWJfdmJlX2dldF9jb250 cm9sbGVyX2luZm8pIChzdHJ1Y3QgZ3J1Yl92YmVfaW5mb19ibG9jayAqY29udHJvbGxlcl9p bmZvKTsKK2dydWJfdmJlX3N0YXR1c190IEVYUE9SVF9GVU5DKGdydWJfdmJlX2Jpb3NfZ2V0 X2NvbnRyb2xsZXJfaW5mbykgKHN0cnVjdCBncnViX3ZiZV9pbmZvX2Jsb2NrICpjb250cm9s bGVyX2luZm8pOwogCiAvKiBDYWxsIFZFU0EgQklPUyAweDRmMDEgdG8gZ2V0IFZCRSBNb2Rl IEluZm9ybWF0aW9uLCByZXR1cm4gc3RhdHVzLiAgKi8KLWdydWJfdmJlX3N0YXR1c190IEVY UE9SVF9GVU5DKGdydWJfdmJlX2dldF9tb2RlX2luZm8pIChncnViX3VpbnQzMl90IG1vZGUs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IGdydWJfdmJlX21vZGVfaW5mb19ibG9jayAqbW9kZV9pbmZvKTsKK2dydWJf dmJlX3N0YXR1c190IEVYUE9SVF9GVU5DKGdydWJfdmJlX2Jpb3NfZ2V0X21vZGVfaW5mbykg KGdydWJfdWludDMyX3QgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBncnViX3ZiZV9tb2RlX2luZm9f YmxvY2sgKm1vZGVfaW5mbyk7CiAKIC8qIENhbGwgVkVTQSBCSU9TIDB4NGYwMiB0byBzZXQg dmlkZW8gbW9kZSwgcmV0dXJuIHN0YXR1cy4gICovCi1ncnViX3ZiZV9zdGF0dXNfdCBFWFBP UlRfRlVOQyhncnViX3ZiZV9zZXRfbW9kZSkgKGdydWJfdWludDMyX3QgbW9kZSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGdy dWJfdmJlX2NydGNfaW5mb19ibG9jayAqY3J0Y19pbmZvKTsKK2dydWJfdmJlX3N0YXR1c190 IEVYUE9SVF9GVU5DKGdydWJfdmJlX2Jpb3Nfc2V0X21vZGUpIChncnViX3VpbnQzMl90IG1v ZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IGdydWJfdmJlX2NydGNfaW5mb19ibG9jayAqY3J0Y19pbmZvKTsKIAog LyogQ2FsbCBWRVNBIEJJT1MgMHg0ZjAzIHRvIHJldHVybiBjdXJyZW50IFZCRSBNb2RlLCBy ZXR1cm4gc3RhdHVzLiAgKi8KLWdydWJfdmJlX3N0YXR1c190IEVYUE9SVF9GVU5DKGdydWJf dmJlX2dldF9tb2RlKSAoZ3J1Yl91aW50MzJfdCAqbW9kZSk7CitncnViX3ZiZV9zdGF0dXNf dCBFWFBPUlRfRlVOQyhncnViX3ZiZV9iaW9zX2dldF9tb2RlKSAoZ3J1Yl91aW50MzJfdCAq bW9kZSk7CiAKIC8qIENhbGwgVkVTQSBCSU9TIDB4NGYwNSB0byBzZXQgbWVtb3J5IHdpbmRv dywgcmV0dXJuIHN0YXR1cy4gICovCi1ncnViX3ZiZV9zdGF0dXNfdCBFWFBPUlRfRlVOQyhn cnViX3ZiZV9zZXRfbWVtb3J5X3dpbmRvdykgKGdydWJfdWludDMyX3Qgd2luZG93LAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBncnViX3VpbnQzMl90IHBvc2l0aW9uKTsKK2dydWJfdmJlX3N0YXR1c190IEVYUE9SVF9G VU5DKGdydWJfdmJlX2Jpb3Nfc2V0X21lbW9yeV93aW5kb3cpIChncnViX3VpbnQzMl90IHdp bmRvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBncnViX3VpbnQzMl90IHBvc2l0aW9uKTsKIAogLyogQ2FsbCBW RVNBIEJJT1MgMHg0ZjA1IHRvIHJldHVybiBtZW1vcnkgd2luZG93LCByZXR1cm4gc3RhdHVz LiAgKi8KLWdydWJfdmJlX3N0YXR1c190IEVYUE9SVF9GVU5DKGdydWJfdmJlX2dldF9tZW1v cnlfd2luZG93KSAoZ3J1Yl91aW50MzJfdCB3aW5kb3csCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdydWJfdWludDMyX3Qg KnBvc2l0aW9uKTsKK2dydWJfdmJlX3N0YXR1c190IEVYUE9SVF9GVU5DKGdydWJfdmJlX2Jp b3NfZ2V0X21lbW9yeV93aW5kb3cpIChncnViX3VpbnQzMl90IHdpbmRvdywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBncnViX3VpbnQzMl90ICpwb3NpdGlvbik7CiAKIC8qIENhbGwgVkVTQSBCSU9TIDB4NGYw NiB0byBzZXQgc2NhbmxpbmUgbGVuZ3RoIChpbiBieXRlcyksIHJldHVybiBzdGF0dXMuICAq LwotZ3J1Yl92YmVfc3RhdHVzX3QgRVhQT1JUX0ZVTkMoZ3J1Yl92YmVfc2V0X3NjYW5saW5l X2xlbmd0aCkgKGdydWJfdWludDMyX3QgbGVuZ3RoKTsKK2dydWJfdmJlX3N0YXR1c190IEVY UE9SVF9GVU5DKGdydWJfdmJlX2Jpb3Nfc2V0X3NjYW5saW5lX2xlbmd0aCkgKGdydWJfdWlu dDMyX3QgbGVuZ3RoKTsKIAogLyogQ2FsbCBWRVNBIEJJT1MgMHg0ZjA2IHRvIHJldHVybiBz Y2FubGluZSBsZW5ndGggKGluIGJ5dGVzKSwgcmV0dXJuIHN0YXR1cy4gICovCi1ncnViX3Zi ZV9zdGF0dXNfdCBFWFBPUlRfRlVOQyhncnViX3ZiZV9nZXRfc2NhbmxpbmVfbGVuZ3RoKSAo Z3J1Yl91aW50MzJfdCAqbGVuZ3RoKTsKK2dydWJfdmJlX3N0YXR1c190IEVYUE9SVF9GVU5D KGdydWJfdmJlX2Jpb3NfZ2V0X3NjYW5saW5lX2xlbmd0aCkgKGdydWJfdWludDMyX3QgKmxl bmd0aCk7CiAKIC8qIENhbGwgVkVTQSBCSU9TIDB4NGYwNyB0byBzZXQgZGlzcGxheSBzdGFy dCwgcmV0dXJuIHN0YXR1cy4gICovCi1ncnViX3ZiZV9zdGF0dXNfdCBFWFBPUlRfRlVOQyhn cnViX3ZiZV9zZXRfZGlzcGxheV9zdGFydCkgKGdydWJfdWludDMyX3QgeCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3J1 Yl91aW50MzJfdCB5KTsKK2dydWJfdmJlX3N0YXR1c190IEVYUE9SVF9GVU5DKGdydWJfdmJl X2Jpb3Nfc2V0X2Rpc3BsYXlfc3RhcnQpIChncnViX3VpbnQzMl90IHgsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Z3J1Yl91aW50MzJfdCB5KTsKIAogLyogQ2FsbCBWRVNBIEJJT1MgMHg0ZjA3IHRvIGdldCBk aXNwbGF5IHN0YXJ0LCByZXR1cm4gc3RhdHVzLiAgKi8KLWdydWJfdmJlX3N0YXR1c190IEVY UE9SVF9GVU5DKGdydWJfdmJlX2dldF9kaXNwbGF5X3N0YXJ0KSAoZ3J1Yl91aW50MzJfdCAq eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZ3J1Yl91aW50MzJfdCAqeSk7CitncnViX3ZiZV9zdGF0dXNfdCBFWFBPUlRf RlVOQyhncnViX3ZiZV9iaW9zX2dldF9kaXNwbGF5X3N0YXJ0KSAoZ3J1Yl91aW50MzJfdCAq eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBncnViX3VpbnQzMl90ICp5KTsKIAogLyogQ2FsbCBWRVNBIEJJT1Mg MHg0ZjA5IHRvIHNldCBwYWxldHRlIGRhdGEsIHJldHVybiBzdGF0dXMuICAqLwotZ3J1Yl92 YmVfc3RhdHVzX3QgRVhQT1JUX0ZVTkMoZ3J1Yl92YmVfc2V0X3BhbGV0dGVfZGF0YSkgKGdy dWJfdWludDMyX3QgY29sb3JfY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3J1Yl91aW50MzJfdCBzdGFydF9pbmRl eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgZ3J1Yl92YmVfcGFsZXR0ZV9kYXRhICpwYWxldHRlX2RhdGEpOwor Z3J1Yl92YmVfc3RhdHVzX3QgRVhQT1JUX0ZVTkMoZ3J1Yl92YmVfYmlvc19zZXRfcGFsZXR0 ZV9kYXRhKSAoZ3J1Yl91aW50MzJfdCBjb2xvcl9jb3VudCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdydWJfdWlu dDMyX3Qgc3RhcnRfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZ3J1Yl92YmVfcGFsZXR0ZV9k YXRhICpwYWxldHRlX2RhdGEpOwogCiAvKiBQcm90b3R5cGVzIGZvciBoZWxwZXIgZnVuY3Rp b25zLiAgKi8KIApAQCAtMTk1LDEzICsyMDIsNSBAQAogZ3J1Yl9lcnJfdCBncnViX3ZiZV9n ZXRfdmlkZW9fbW9kZSAoZ3J1Yl91aW50MzJfdCAqbW9kZSk7CiBncnViX2Vycl90IGdydWJf dmJlX2dldF92aWRlb19tb2RlX2luZm8gKGdydWJfdWludDMyX3QgbW9kZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGdydWJfdmJlX21vZGVf aW5mb19ibG9jayAqbW9kZV9pbmZvKTsKLXZvaWQgZ3J1Yl92YmVfc2V0X3BpeGVsX3JnYiAo Z3J1Yl91aW50MzJfdCB4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnViX3Vp bnQzMl90IHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdydWJfdWludDhfdCBy ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdydWJfdWludDhfdCBncmVlbiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3J1Yl91aW50OF90IGJsdWUpOwotdm9p ZCBncnViX3ZiZV9zZXRfcGl4ZWxfaW5kZXggKGdydWJfdWludDMyX3QgeCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBncnViX3VpbnQzMl90IHksCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ3J1Yl91aW50OF90IGNvbG9yKTsKIAogI2VuZGlmIC8qICEg R1JVQl9WQkVfTUFDSElORV9IRUFERVIgKi8KZGlmZiAtcnVOIC14ICcqQ1ZTKicgZ3J1YjIv aW5jbHVkZS9ncnViL21pc2MuaCBncnViMi5uZXcvaW5jbHVkZS9ncnViL21pc2MuaAotLS0g Z3J1YjIvaW5jbHVkZS9ncnViL21pc2MuaAkyMDA1LTEwLTI0IDEzOjIzOjQ2LjAwMDAwMDAw MCArMDMwMAorKysgZ3J1YjIubmV3L2luY2x1ZGUvZ3J1Yi9taXNjLmgJMjAwNi0wMy0wMiAy MDo0MDowOC42MTE3NDQ3NTIgKzAyMDAKQEAgLTc2LDQgKzc2LDE0IEBACiAJCQkJCSAgICAg Y29uc3QgZ3J1Yl91aW50OF90ICpzcmMsCiAJCQkJCSAgICAgZ3J1Yl9zaXplX3Qgc2l6ZSk7 CiAKKy8qIElubGluZSBmdW5jdGlvbnMuICAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBp bnQKK2dydWJfYWJzIChpbnQgeCkKK3sKKyAgaWYgKHggPCAwKQorICAgIHJldHVybiAodW5z aWduZWQgaW50KSgteCk7CisgIGVsc2UKKyAgICByZXR1cm4gKHVuc2lnbmVkIGludCl4Owor fQorCiAjZW5kaWYgLyogISBHUlVCX01JU0NfSEVBREVSICovCmRpZmYgLXJ1TiAteCAnKkNW UyonIGdydWIyL2luY2x1ZGUvZ3J1Yi92aWRlby5oIGdydWIyLm5ldy9pbmNsdWRlL2dydWIv dmlkZW8uaAotLS0gZ3J1YjIvaW5jbHVkZS9ncnViL3ZpZGVvLmgJMTk3MC0wMS0wMSAwMjow MDowMC4wMDAwMDAwMDAgKzAyMDAKKysrIGdydWIyLm5ldy9pbmNsdWRlL2dydWIvdmlkZW8u aAkyMDA2LTAzLTAyIDE1OjMzOjMyLjY1MDIyNTMxMiArMDIwMApAQCAtMCwwICsxLDMwMCBA QAorLyoKKyAqICBHUlVCICAtLSAgR1JhbmQgVW5pZmllZCBCb290bG9hZGVyCisgKiAgQ29w eXJpZ2h0IChDKSAyMDAyLDIwMDMsMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuCisgKgorICogIEdSVUIgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg b3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor ICogIGFsb25nIHdpdGggR1JVQjsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy ZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAw MjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgR1JVQl9WSURFT19IRUFERVIKKyNkZWZpbmUg R1JVQl9WSURFT19IRUFERVIJMQorCisjaW5jbHVkZSA8Z3J1Yi9lcnIuaD4KKyNpbmNsdWRl IDxncnViL3N5bWJvbC5oPgorI2luY2x1ZGUgPGdydWIvdHlwZXMuaD4KKwordHlwZWRlZiBn cnViX3VpbnQzMl90IGdydWJfY29sb3JfdDsKK3N0cnVjdCBncnViX3ZpZGVvX3JlbmRlcl90 YXJnZXQ7CisKKy8qIERlZmluZXMgdXNlZCB0byBkZXNjcmliZSB2aWRlbyBtb2RlIG9yIHJl bmRlcmluZyB0YXJnZXQuICAqLworI2RlZmluZSBHUlVCX1ZJREVPX01PREVfVFlQRV9BTFBI QQkJMHgwMDAwMDAwOAorI2RlZmluZSBHUlVCX1ZJREVPX01PREVfVFlQRV9ET1VCTEVfQlVG RkVSRUQJMHgwMDAwMDAwNAorI2RlZmluZSBHUlVCX1ZJREVPX01PREVfVFlQRV9JTkRFWF9D T0xPUgkweDAwMDAwMDAyCisjZGVmaW5lIEdSVUJfVklERU9fTU9ERV9UWVBFX1JHQgkJMHgw MDAwMDAwMQorCisvKiBEZWZpbmVzIHVzZWQgdG8gbWFzayBmbGFncy4gICovCisjZGVmaW5l IEdSVUJfVklERU9fTU9ERV9UWVBFX0NPTE9SX01BU0sJCTB4MDAwMDAwMDMKKworLyogRGVm aW5lZCBwcmVkZWZpbmVkIHJlbmRlciB0YXJnZXRzLiAgKi8KKyNkZWZpbmUgR1JVQl9WSURF T19SRU5ERVJfVEFSR0VUX0RJU1BMQVkJKChzdHJ1Y3QgZ3J1Yl92aWRlb19yZW5kZXJfdGFy Z2V0ICopIDApCisjZGVmaW5lIEdSVUJfVklERU9fUkVOREVSX1RBUkdFVF9GUk9OVF9CVUZG RVIJKChzdHJ1Y3QgZ3J1Yl92aWRlb19yZW5kZXJfdGFyZ2V0ICopIDApCisjZGVmaW5lIEdS VUJfVklERU9fUkVOREVSX1RBUkdFVF9CQUNLX0JVRkZFUgkoKHN0cnVjdCBncnViX3ZpZGVv X3JlbmRlcl90YXJnZXQgKikgMSkKKworc3RydWN0IGdydWJfdmlkZW9fbW9kZV9pbmZvIHsK KyAgLyogV2lkdGggb2YgdGhlIHNjcmVlbi4gICovCisgIGdydWJfdWludDMyX3Qgd2lkdGg7 CisgIAorICAvKiBIZWlnaHQgb2YgdGhlIHNjcmVlbi4gICovCisgIGdydWJfdWludDMyX3Qg aGVpZ2h0OworCisgIC8qIE1vZGUgdHlwZSBiaXRtYXNrLiBDb250YWlucyBpbmZvcm1hdGlv biBsaWtlIGlzIGl0IEluZGV4IGNvbG9yIG9yIAorICAgICBSR0IgbW9kZS4gICovCisgIGdy dWJfdWludDMyX3QgbW9kZV90eXBlOworCisgIC8qIEJpdHMgcGVyIHBpeGVsLiAgKi8KKyAg Z3J1Yl91aW50MzJfdCBicHA7CisgIAorICAvKiBCeXRlcyBwZXIgcGl4ZWwuICAqLworICBn cnViX3VpbnQzMl90IGJ5dGVzX3Blcl9waXhlbDsKKyAgCisgIC8qIFBpdGNoIG9mIG9uZSBz Y2FubGluZS4gSG93IG1hbnkgYnl0ZXMgdGhlcmUgYXJlIGZvciBzY2FubGluZS4gICovCisg IGdydWJfdWludDMyX3QgcGl0Y2g7CisKKyAgLyogSW4gaW5kZXggY29sb3IgbW9kZSwgbnVt YmVyIG9mIGNvbG9ycy4gSW4gUkdCIG1vZGUgdGhpcyBpcyAyNTYuICAqLworICBncnViX3Vp bnQzMl90IG51bWJlcl9vZl9jb2xvcnM7CisKKyAgLyogSG93IG1hbnkgYml0cyBhcmUgcmVz ZXJ2ZWQgZm9yIHJlZCBjb2xvci4gICovCisgIGdydWJfdWludDMyX3QgcmVkX21hc2tfc2l6 ZTsKKworICAvKiBXaGF0IGlzIGxvY2F0aW9uIG9mIHJlZCBjb2xvciBiaXRzLiBJbiBJbmRl eCBDb2xvciBtb2RlLCB0aGlzIGlzIDAuICAqLworICBncnViX3VpbnQzMl90IHJlZF9maWVs ZF9wb3M7CisKKyAgLyogSG93IG1hbnkgYml0cyBhcmUgcmVzZXJ2ZWQgZm9yIGdyZWVuIGNv bG9yLiAgKi8KKyAgZ3J1Yl91aW50MzJfdCBncmVlbl9tYXNrX3NpemU7CisKKyAgLyogV2hh dCBpcyBsb2NhdGlvbiBvZiBncmVlbiBjb2xvciBiaXRzLiBJbiBJbmRleCBDb2xvciBtb2Rl LCB0aGlzIGlzIDAuICAqLworICBncnViX3VpbnQzMl90IGdyZWVuX2ZpZWxkX3BvczsKKwor ICAvKiBIb3cgbWFueSBiaXRzIGFyZSByZXNlcnZlZCBmb3IgYmx1ZSBjb2xvci4gICovCisg IGdydWJfdWludDMyX3QgYmx1ZV9tYXNrX3NpemU7CisKKyAgLyogV2hhdCBpcyBsb2NhdGlv biBvZiBibHVlIGNvbG9yIGJpdHMuIEluIEluZGV4IENvbG9yIG1vZGUsIHRoaXMgaXMgMC4g ICovCisgIGdydWJfdWludDMyX3QgYmx1ZV9maWVsZF9wb3M7CisKKyAgLyogSG93IG1hbnkg Yml0cyBhcmUgcmVzZXJ2ZWQgaW4gY29sb3IuICAqLworICBncnViX3VpbnQzMl90IHJlc2Vy dmVkX21hc2tfc2l6ZTsKKworICAvKiBXaGF0IGlzIGxvY2F0aW9uIG9mIHJlc2VydmVkIGNv bG9yIGJpdHMuIEluIEluZGV4IENvbG9yIG1vZGUsIAorICAgICB0aGlzIGlzIDAuICAqLwor ICBncnViX3VpbnQzMl90IHJlc2VydmVkX2ZpZWxkX3BvczsKK307CisKK3N0cnVjdCBncnVi X3ZpZGVvX3JlbmRlcl90YXJnZXQgeworICAvKiBDb3B5IG9mIHRoZSBzY3JlZW4ncyBtb2Rl IGluZm8gc3RydWN0dXJlLCBleGNlcHQgdGhhdCB3aWR0aCwgaGVpZ2h0IGFuZAorICAgICBt b2RlX3R5cGUgaGFzIGJlZW4gcmUtYWRqdXN0ZWQgdG8gcmVxdWVzdGVkIHJlbmRlciB0YXJn ZXQgc2V0dGluZ3MuICAqLworICBzdHJ1Y3QgZ3J1Yl92aWRlb19tb2RlX2luZm8gbW9kZV9p bmZvOworCisgIHN0cnVjdCB7CisgICAgdW5zaWduZWQgaW50IHg7CisgICAgdW5zaWduZWQg aW50IHk7CisgICAgdW5zaWduZWQgaW50IHdpZHRoOworICAgIHVuc2lnbmVkIGludCBoZWln aHQ7CQorICB9IHZpZXdwb3J0OworCisgIC8qIEluZGljYXRlcyB3ZXRoZXIgdGhlIGRhdGEg aGFzIGJlZW4gYWxsb2NhdGVkIGJ5IHVzIGFuZCBtdXN0IGJlIGZyZWVkIAorICAgICB3aGVu IHJlbmRlciB0YXJnZXQgaXMgZGVzdHJveWVkLiAgKi8KKyAgaW50IGlzX2FsbG9jYXRlZDsK KyAgCisgIC8qIFBvaW50ZXIgdG8gZGF0YS4gQ2FuIGVpdGhlciBiZSBpbiB2aWRlbyBjYXJk IG1lbW9yeSBvciBpbiBsb2NhbCBob3N0J3MKKyAgICAgbWVtb3J5LiAgKi8KKyAgdm9pZCAq ZGF0YTsKK307CisKK3N0cnVjdCBncnViX3ZpZGVvX3BhbGV0dGVfZGF0YSB7CisgIGdydWJf dWludDhfdCByOyAvKiBSZWQgY29sb3IgdmFsdWUgKDAtMjU1KS4gICovCisgIGdydWJfdWlu dDhfdCBnOyAvKiBHcmVlbiBjb2xvciB2YWx1ZSAoMC0yNTUpLiAgKi8KKyAgZ3J1Yl91aW50 OF90IGI7IC8qIEJsdWUgY29sb3IgdmFsdWUgKDAtMjU1KS4gICovCisgIGdydWJfdWludDhf dCBhOyAvKiBSZXNlcnZlZCBiaXRzIHZhbHVlICgwLTI1NSkuICAqLworfTsKKworc3RydWN0 IGdydWJfZm9udF9nbHlwaDsKK3N0cnVjdCBncnViX3ZpZGVvX2JpdG1hcDsKKworc3RydWN0 IGdydWJfdmlkZW9fYWRhcHRlcgoreworICAvKiBUaGUgdmlkZW8gYWRhcHRlciBuYW1lLiAg Ki8KKyAgY29uc3QgY2hhciAqbmFtZTsKKworICAvKiBJbml0aWFsaXplIHRoZSB2aWRlbyBh ZGFwdGVyLiAgKi8KKyAgZ3J1Yl9lcnJfdCAoKmluaXQpICh2b2lkKTsKKworICAvKiBDbGVh biB1cCB0aGUgdmlkZW8gYWRhcHRlci4gICovCisgIGdydWJfZXJyX3QgKCpmaW5pKSAodm9p ZCk7CisKKyAgZ3J1Yl9lcnJfdCAoKnNldHVwKSAodW5zaWduZWQgaW50IHdpZHRoLCAKKwkJ ICAgICAgIHVuc2lnbmVkIGludCBoZWlnaHQsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgbW9k ZV90eXBlKTsKKworICBncnViX2Vycl90ICgqZ2V0X2luZm8pIChzdHJ1Y3QgZ3J1Yl92aWRl b19tb2RlX2luZm8gKiBtb2RlX2luZm8pOworICAKKyAgZ3J1Yl9lcnJfdCAoKnNldF9wYWxl dHRlKSAodW5zaWduZWQgaW50IHN0YXJ0LAorCQkJICAgICB1bnNpZ25lZCBpbnQgY291bnQs CisJCQkgICAgIHN0cnVjdCBncnViX3ZpZGVvX3BhbGV0dGVfZGF0YSAqcGFsZXR0ZV9kYXRh KTsKKworICBncnViX2Vycl90ICgqZ2V0X3BhbGV0dGUpICh1bnNpZ25lZCBpbnQgc3RhcnQs CisJCQkgICAgIHVuc2lnbmVkIGludCBjb3VudCwKKwkJCSAgICAgc3RydWN0IGdydWJfdmlk ZW9fcGFsZXR0ZV9kYXRhICpwYWxldHRlX2RhdGEpOworCisgIGdydWJfZXJyX3QgKCpzZXRf dmlld3BvcnQpICh1bnNpZ25lZCBpbnQgeCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCB5LAor CQkJICAgICAgdW5zaWduZWQgaW50IHdpZHRoLAorCQkJICAgICAgdW5zaWduZWQgaW50IGhl aWdodCk7CisKKyAgZ3J1Yl9lcnJfdCAoKmdldF92aWV3cG9ydCkgKHVuc2lnbmVkIGludCAq IHgsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgKiB5LAorCQkJICAgICAgdW5zaWduZWQgaW50 ICogd2lkdGgsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgKiBoZWlnaHQpOworCisgIGdydWJf Y29sb3JfdCAoKm1hcF9jb2xvcikgKGdydWJfdWludDMyX3QgY29sb3JfbmFtZSk7CisgIAor ICBncnViX2NvbG9yX3QgKCptYXBfcmdiKSAoZ3J1Yl91aW50OF90IHJlZCwKKwkJCSAgIGdy dWJfdWludDhfdCBncmVlbiwKKwkJCSAgIGdydWJfdWludDhfdCBibHVlKTsKKworICBncnVi X2NvbG9yX3QgKCptYXBfcmdiYSkgKGdydWJfdWludDhfdCByZWQsCisJCQkgICAgZ3J1Yl91 aW50OF90IGdyZWVuLAorCQkJICAgIGdydWJfdWludDhfdCBibHVlLAorCQkJICAgIGdydWJf dWludDhfdCBhbHBoYSk7CisKKyAgZ3J1Yl9lcnJfdCAoKmZpbGxfcmVjdCkgKGdydWJfY29s b3JfdCBjb2xvciwKKwkJCSAgIGludCB4LAorCQkJICAgaW50IHksCisJCQkgICB1bnNpZ25l ZCBpbnQgd2lkdGgsCisJCQkgICB1bnNpZ25lZCBpbnQgaGVpZ2h0KTsKKworICBncnViX2Vy cl90ICgqYmxpdF9nbHlwaCkgKHN0cnVjdCBncnViX2ZvbnRfZ2x5cGggKiBnbHlwaCwKKwkJ CSAgICBncnViX2NvbG9yX3QgY29sb3IsCisJCQkgICAgaW50IHgsCisJCQkgICAgaW50IHkp OworCisgIGdydWJfZXJyX3QgKCpibGl0X2JpdG1hcCkgKHN0cnVjdCBncnViX3ZpZGVvX2Jp dG1hcCAqIGJpdG1hcCwKKwkJCSAgICAgaW50IHgsCisJCQkgICAgIGludCB5LAorCQkJICAg ICBpbnQgb2Zmc2V0X3gsCisJCQkgICAgIGludCBvZmZzZXRfeSwKKwkJCSAgICAgdW5zaWdu ZWQgaW50IHdpZHRoLAorCQkJICAgICB1bnNpZ25lZCBpbnQgaGVpZ2h0KTsKKworICBncnVi X2Vycl90ICgqYmxpdF9yZW5kZXJfdGFyZ2V0KSAoc3RydWN0IGdydWJfdmlkZW9fcmVuZGVy X3RhcmdldCAqIHNvdXJjZSwKKwkJCQkgICAgaW50IHgsCisJCQkJICAgIGludCB5LAorCQkJ CSAgICBpbnQgb2Zmc2V0X3gsCisJCQkJICAgIGludCBvZmZzZXRfeSwKKwkJCQkgICAgdW5z aWduZWQgaW50IHdpZHRoLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgaGVpZ2h0KTsKKworICBn cnViX2Vycl90ICgqc2Nyb2xsKSAoZ3J1Yl9jb2xvcl90IGNvbG9yLAorICAJCQlpbnQgZHgs CisgIAkJCWludCBkeSk7CisKKyAgZ3J1Yl9lcnJfdCAoKnN3YXBfYnVmZmVycykgKHZvaWQp OworCisgIGdydWJfZXJyX3QgKCpjcmVhdGVfcmVuZGVyX3RhcmdldCkgKHN0cnVjdCBncnVi X3ZpZGVvX3JlbmRlcl90YXJnZXQgKiAqIHJlc3VsdCwKKwkJCQkgICAgICB1bnNpZ25lZCBp bnQgbW9kZV90eXBlLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCB3aWR0aCwKKwkJCQkgICAg ICB1bnNpZ25lZCBpbnQgaGVpZ2h0KTsKKworICBncnViX2Vycl90ICgqZGVsZXRlX3JlbmRl cl90YXJnZXQpIChzdHJ1Y3QgZ3J1Yl92aWRlb19yZW5kZXJfdGFyZ2V0ICogdGFyZ2V0KTsK KworICBncnViX2Vycl90ICgqc2V0X2FjdGl2ZV9yZW5kZXJfdGFyZ2V0KSAoc3RydWN0IGdy dWJfdmlkZW9fcmVuZGVyX3RhcmdldCAqIHRhcmdldCk7CisKKyAgLyogVGhlIG5leHQgdmlk ZW8gYWRhcHRlci4gICovCisgIHN0cnVjdCBncnViX3ZpZGVvX2FkYXB0ZXIgKm5leHQ7Cit9 OwordHlwZWRlZiBzdHJ1Y3QgZ3J1Yl92aWRlb19hZGFwdGVyICpncnViX3ZpZGVvX2FkYXB0 ZXJfdDsKKwordm9pZCBFWFBPUlRfRlVOQyhncnViX3ZpZGVvX3JlZ2lzdGVyKSAoZ3J1Yl92 aWRlb19hZGFwdGVyX3QgYWRhcHRlcik7Cit2b2lkIEVYUE9SVF9GVU5DKGdydWJfdmlkZW9f dW5yZWdpc3RlcikgKGdydWJfdmlkZW9fYWRhcHRlcl90IGFkYXB0ZXIpOwordm9pZCBFWFBP UlRfRlVOQyhncnViX3ZpZGVvX2l0ZXJhdGUpIChpbnQgKCpob29rKSAoZ3J1Yl92aWRlb19h ZGFwdGVyX3QgYWRhcHRlcikpOworCitncnViX2Vycl90IEVYUE9SVF9GVU5DKGdydWJfdmlk ZW9fc2V0dXApICh1bnNpZ25lZCBpbnQgd2lkdGgsCisJCQkJCSAgdW5zaWduZWQgaW50IGhl aWdodCwKKwkJCQkJICB1bnNpZ25lZCBpbnQgbW9kZV90eXBlKTsKKworZ3J1Yl9lcnJfdCBF WFBPUlRfRlVOQyhncnViX3ZpZGVvX3Jlc3RvcmUpICh2b2lkKTsKKworZ3J1Yl9lcnJfdCBF WFBPUlRfRlVOQyhncnViX3ZpZGVvX2dldF9pbmZvKSAoc3RydWN0IGdydWJfdmlkZW9fbW9k ZV9pbmZvICogbW9kZV9pbmZvKTsKKworZ3J1Yl9lcnJfdCBFWFBPUlRfRlVOQyhncnViX3Zp ZGVvX3NldF9wYWxldHRlKSAodW5zaWduZWQgaW50IHN0YXJ0LAorCQkJCQkJdW5zaWduZWQg aW50IGNvdW50LAorCQkJCQkJc3RydWN0IGdydWJfdmlkZW9fcGFsZXR0ZV9kYXRhICpwYWxl dHRlX2RhdGEpOworCitncnViX2Vycl90IEVYUE9SVF9GVU5DKGdydWJfdmlkZW9fZ2V0X3Bh bGV0dGUpICh1bnNpZ25lZCBpbnQgc3RhcnQsCisJCQkJCQl1bnNpZ25lZCBpbnQgY291bnQs CisJCQkJCQlzdHJ1Y3QgZ3J1Yl92aWRlb19wYWxldHRlX2RhdGEgKnBhbGV0dGVfZGF0YSk7 CisKK2dydWJfZXJyX3QgRVhQT1JUX0ZVTkMoZ3J1Yl92aWRlb19zZXRfdmlld3BvcnQpICh1 bnNpZ25lZCBpbnQgeCwKKwkJCQkJCSB1bnNpZ25lZCBpbnQgeSwKKwkJCQkJCSB1bnNpZ25l ZCBpbnQgd2lkdGgsCisJCQkJCQkgdW5zaWduZWQgaW50IGhlaWdodCk7CisKK2dydWJfZXJy X3QgRVhQT1JUX0ZVTkMoZ3J1Yl92aWRlb19nZXRfdmlld3BvcnQpICh1bnNpZ25lZCBpbnQg KiB4LAorCQkJCQkJIHVuc2lnbmVkIGludCAqIHksCisJCQkJCQkgdW5zaWduZWQgaW50ICog d2lkdGgsCisJCQkJCQkgdW5zaWduZWQgaW50ICogaGVpZ2h0KTsKKworZ3J1Yl9jb2xvcl90 IEVYUE9SVF9GVU5DKGdydWJfdmlkZW9fbWFwX2NvbG9yKSAoZ3J1Yl91aW50MzJfdCBjb2xv cl9uYW1lKTsKKworZ3J1Yl9jb2xvcl90IEVYUE9SVF9GVU5DKGdydWJfdmlkZW9fbWFwX3Jn YikgKGdydWJfdWludDhfdCByZWQsCisJCQkJCSAgICAgIGdydWJfdWludDhfdCBncmVlbiwK KwkJCQkJICAgICAgZ3J1Yl91aW50OF90IGJsdWUpOworCitncnViX2NvbG9yX3QgRVhQT1JU X0ZVTkMoZ3J1Yl92aWRlb19tYXBfcmdiYSkgKGdydWJfdWludDhfdCByZWQsCisJCQkJCSAg ICAgICBncnViX3VpbnQ4X3QgZ3JlZW4sCisJCQkJCSAgICAgICBncnViX3VpbnQ4X3QgYmx1 ZSwKKwkJCQkJICAgICAgIGdydWJfdWludDhfdCBhbHBoYSk7CisKK2dydWJfZXJyX3QgRVhQ T1JUX0ZVTkMoZ3J1Yl92aWRlb19maWxsX3JlY3QpIChncnViX2NvbG9yX3QgY29sb3IsCisJ CQkJCSAgICAgIGludCB4LAorCQkJCQkgICAgICBpbnQgeSwKKwkJCQkJICAgICAgdW5zaWdu ZWQgaW50IHdpZHRoLAorCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgaGVpZ2h0KTsKKworZ3J1 Yl9lcnJfdCBFWFBPUlRfRlVOQyhncnViX3ZpZGVvX2JsaXRfZ2x5cGgpIChzdHJ1Y3QgZ3J1 Yl9mb250X2dseXBoICogZ2x5cGgsCisJCQkJCSAgICAgICBncnViX2NvbG9yX3QgY29sb3Is CisJCQkJCSAgICAgICBpbnQgeCwKKwkJCQkJICAgICAgIGludCB5KTsKKworZ3J1Yl9lcnJf dCBFWFBPUlRfRlVOQyhncnViX3ZpZGVvX2JsaXRfYml0bWFwKSAoc3RydWN0IGdydWJfdmlk ZW9fYml0bWFwICogYml0bWFwLAorCQkJCQkJaW50IHgsCisJCQkJCQlpbnQgeSwKKwkJCQkJ CWludCBvZmZzZXRfeCwKKwkJCQkJCWludCBvZmZzZXRfeSwKKwkJCQkJCXVuc2lnbmVkIGlu dCB3aWR0aCwKKwkJCQkJCXVuc2lnbmVkIGludCBoZWlnaHQpOworCitncnViX2Vycl90IEVY UE9SVF9GVU5DKGdydWJfdmlkZW9fYmxpdF9yZW5kZXJfdGFyZ2V0KSAoc3RydWN0IGdydWJf dmlkZW9fcmVuZGVyX3RhcmdldCAqIHNvdXJjZSwKKwkJCQkJCSAgICAgICBpbnQgeCwKKwkJ CQkJCSAgICAgICBpbnQgeSwKKwkJCQkJCSAgICAgICBpbnQgb2Zmc2V0X3gsCisJCQkJCQkg ICAgICAgaW50IG9mZnNldF95LAorCQkJCQkJICAgICAgIHVuc2lnbmVkIGludCB3aWR0aCwK KwkJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgaGVpZ2h0KTsKKworZ3J1Yl9lcnJfdCBFWFBP UlRfRlVOQyhncnViX3ZpZGVvX3Njcm9sbCkgKGdydWJfY29sb3JfdCBjb2xvciwKKwkJCQkJ ICAgaW50IGR4LAorCQkJCQkgICBpbnQgZHkpOworCitncnViX2Vycl90IEVYUE9SVF9GVU5D KGdydWJfdmlkZW9fc3dhcF9idWZmZXJzKSAodm9pZCk7CisKK2dydWJfZXJyX3QgRVhQT1JU X0ZVTkMoZ3J1Yl92aWRlb19jcmVhdGVfcmVuZGVyX3RhcmdldCkgKHN0cnVjdCBncnViX3Zp ZGVvX3JlbmRlcl90YXJnZXQgKiAqIHJlc3VsdCwKKwkJCQkJCQkgdW5zaWduZWQgaW50IG1v ZGVfdHlwZSwKKwkJCQkJCQkgdW5zaWduZWQgaW50IHdpZHRoLAorCQkJCQkJCSB1bnNpZ25l ZCBpbnQgaGVpZ2h0KTsKKworZ3J1Yl9lcnJfdCBFWFBPUlRfRlVOQyhncnViX3ZpZGVvX2Rl bGV0ZV9yZW5kZXJfdGFyZ2V0KSAoc3RydWN0IGdydWJfdmlkZW9fcmVuZGVyX3RhcmdldCAq IHRhcmdldCk7CisKK2dydWJfZXJyX3QgRVhQT1JUX0ZVTkMoZ3J1Yl92aWRlb19zZXRfYWN0 aXZlX3JlbmRlcl90YXJnZXQpIChzdHJ1Y3QgZ3J1Yl92aWRlb19yZW5kZXJfdGFyZ2V0ICog dGFyZ2V0KTsKKwkJCQkJICAgCisjZW5kaWYgLyogISBHUlVCX1ZJREVPX0hFQURFUiAqLwpk aWZmIC1ydU4gLXggJypDVlMqJyBncnViMi9rZXJuL2kzODYvcGMvc3RhcnR1cC5TIGdydWIy Lm5ldy9rZXJuL2kzODYvcGMvc3RhcnR1cC5TCi0tLSBncnViMi9rZXJuL2kzODYvcGMvc3Rh cnR1cC5TCTIwMDUtMTAtMTUgMjA6Mjg6MzYuMDAwMDAwMDAwICswMzAwCisrKyBncnViMi5u ZXcva2Vybi9pMzg2L3BjL3N0YXJ0dXAuUwkyMDA2LTAzLTAyIDE0OjE0OjA2Ljc2MDM1ODU4 NCArMDIwMApAQCAtMTc1OCwxNCArMTc1OCwxNSBAQAogCXJldAogCiAvKgotICogZ3J1Yl92 YmVfc3RhdHVzX3QgZ3J1Yl92YmVfZ2V0X2NvbnRyb2xsZXJfaW5mbyAoc3RydWN0IGdydWJf dmJlX2luZm9fYmxvY2sgKmNvbnRyb2xsZXJfaW5mbykKKyAqIGdydWJfdmJlX2Jpb3Nfc3Rh dHVzX3QgZ3J1Yl92YmVfZ2V0X2NvbnRyb2xsZXJfaW5mbyAoc3RydWN0IGdydWJfdmJlX2lu Zm9fYmxvY2sgKmNvbnRyb2xsZXJfaW5mbykKICAqCiAgKiBSZWdpc3RlciBhbGxvY2F0aW9u cyBmb3IgcGFyYW1ldGVyczoKICAqICVlYXgJCSpjb250cm9sbGVyX2luZm8KICAqLwotRlVO Q1RJT04oZ3J1Yl92YmVfZ2V0X2NvbnRyb2xsZXJfaW5mbykKK0ZVTkNUSU9OKGdydWJfdmJl X2Jpb3NfZ2V0X2NvbnRyb2xsZXJfaW5mbykKIAlwdXNobAklZWJwCiAJcHVzaGwJJWVkaQor CXB1c2hsCSVlZHgKIAogCW1vdncJJWF4LCAlZGkJLyogU3RvcmUgKmNvbnRyb2xsZXJfaW5m byB0byAlZWR4OiVkaS4gICovCiAJeG9ydwklYXgsICVheApAQCAtMTc5MSwxOSArMTc5Miwy MCBAQAogCW1vdmwJJWVkeCwgJWVheAogCWFuZGwJJDB4MEZGRkYsICVlYXgJLyogUmV0dXJu IHZhbHVlIGluICVlYXguICAqLwogCQorCXBvcAklZWR4CiAJcG9wbAklZWRpCiAJcG9wbAkl ZWJwCiAJcmV0CiAKIC8qCi0gKiBncnViX3ZiZV9zdGF0dXNfdCBncnViX3ZiZV9nZXRfbW9k ZV9pbmZvIChncnViX3VpbnQzMl90IG1vZGUsCi0gKgkJCQkJICAgICBzdHJ1Y3QgZ3J1Yl92 YmVfbW9kZV9pbmZvX2Jsb2NrICptb2RlX2luZm8pCisgKiBncnViX3ZiZV9zdGF0dXNfdCBn cnViX3ZiZV9iaW9zX2dldF9tb2RlX2luZm8gKGdydWJfdWludDMyX3QgbW9kZSwKKyAqCQkJ CQkJICBzdHJ1Y3QgZ3J1Yl92YmVfbW9kZV9pbmZvX2Jsb2NrICptb2RlX2luZm8pCiAgKgog ICogUmVnaXN0ZXIgYWxsb2NhdGlvbnMgZm9yIHBhcmFtZXRlcnM6CiAgKiAlZWF4CQltb2Rl CiAgKiAlZWR4CQkqbW9kZV9pbmZvCiAgKi8KLUZVTkNUSU9OKGdydWJfdmJlX2dldF9tb2Rl X2luZm8pCitGVU5DVElPTihncnViX3ZiZV9iaW9zX2dldF9tb2RlX2luZm8pCiAJcHVzaGwg ICAlZWJwCiAJcHVzaGwgICAlZWRpCiAKQEAgLTE4MzcsMTYgKzE4MzksMTcgQEAKIAlyZXQK IAogLyoKLSAqIGdydWJfdmJlX3N0YXR1c190IGdydWJfdmJlX3NldF9tb2RlIChncnViX3Vp bnQzMl90IG1vZGUsCi0gKgkJCQkJc3RydWN0IGdydWJfdmJlX2NydGNfaW5mb19ibG9jayAq Y3J0Y19pbmZvKQorICogZ3J1Yl92YmVfc3RhdHVzX3QgZ3J1Yl92YmVfYmlvc19zZXRfbW9k ZSAoZ3J1Yl91aW50MzJfdCBtb2RlLAorICoJCQkJCSAgICAgc3RydWN0IGdydWJfdmJlX2Ny dGNfaW5mb19ibG9jayAqY3J0Y19pbmZvKQogICoKICAqIFJlZ2lzdGVyIGFsbG9jYXRpb25z IGZvciBwYXJhbWV0ZXJzOgogICogJWVheAkJbW9kZQogICogJWVkeAkJKmNydGNfaW5mbwog ICovCi1GVU5DVElPTihncnViX3ZiZV9zZXRfbW9kZSkKK0ZVTkNUSU9OKGdydWJfdmJlX2Jp b3Nfc2V0X21vZGUpCiAJcHVzaGwJJWVicAogCXB1c2hsCSVlYngKKwlwdXNobAklZWRpCiAK IAltb3ZsCSVlYXgsICVlYngJLyogU3RvcmUgbW9kZSBpbiAlZWJ4LiAgKi8KIApAQCAtMTg3 NCwxOSArMTg3NywyMiBAQAogCW1vdncJJWR4LCAlYXgKIAlhbmRsCSQweEZGRkYsICVlYXgJ LyogUmV0dXJuIHZhbHVlIGluICVlYXguICAqLwogCisJcG9wbAklZWRpCiAJcG9wbAklZWJ4 CiAJcG9wbAklZWJwCiAJcmV0CiAKIC8qCi0gKiBncnViX3ZiZV9zdGF0dXNfdCBncnViX3Zi ZV9nZXRfbW9kZSAoZ3J1Yl91aW50MzJfdCAqbW9kZSkKKyAqIGdydWJfdmJlX3N0YXR1c190 IGdydWJfdmJlX2Jpb3NfZ2V0X21vZGUgKGdydWJfdWludDMyX3QgKm1vZGUpCiAgKgogICog UmVnaXN0ZXIgYWxsb2NhdGlvbnMgZm9yIHBhcmFtZXRlcnM6CiAgKiAlZWF4CQkqbW9kZQog ICovCi1GVU5DVElPTihncnViX3ZiZV9nZXRfbW9kZSkKK0ZVTkNUSU9OKGdydWJfdmJlX2Jp b3NfZ2V0X21vZGUpCiAJcHVzaGwgICAlZWJwCiAJcHVzaGwgICAlZWJ4CisJcHVzaGwJJWVk aQorCXB1c2hsCSVlZHgKIAlwdXNobAklZWF4CQkvKiBQdXNoICptb2RlIHRvIHN0YWNrLiAg Ki8KIAogCWNhbGwgICAgcHJvdF90b19yZWFsCkBAIC0xOTA3LDE5ICsxOTEzLDIxIEBACiAJ bW92dwklZHgsICVheAogCWFuZGwJJDB4RkZGRiwgJWVheAkvKiBSZXR1cm4gdmFsdWUgaW4g JWVheC4gICovCiAKKwlwb3BsCSVlZHgKKwlwb3BsCSVlZGkKIAlwb3BsICAgICVlYngKIAlw b3BsICAgICVlYnAKIAlyZXQKIAogLyoKLSAqIGdydWJfdmJlX3N0YXR1c190IGdydWJfdmJl X3NldF9tZW1vcnlfd2luZG93IChncnViX3VpbnQzMl90IHdpbmRvdywKLSAqCQkJCQkJIGdy dWJfdWludDMyX3QgcG9zaXRpb24pOworICogZ3J1Yl92YmVfc3RhdHVzX3QgZ3J1Yl92YmVf Ymlvc19zZXRfbWVtb3J5X3dpbmRvdyAoZ3J1Yl91aW50MzJfdCB3aW5kb3csCisgKgkJCQkJ CSAgICAgIGdydWJfdWludDMyX3QgcG9zaXRpb24pOwogICoKICAqIFJlZ2lzdGVyIGFsbG9j YXRpb25zIGZvciBwYXJhbWV0ZXJzOgogICogJWVheAkJd2luZG93CiAgKiAlZWR4CQlwb3Np dGlvbgogICovCi1GVU5DVElPTihncnViX3ZiZV9zZXRfbWVtb3J5X3dpbmRvdykKK0ZVTkNU SU9OKGdydWJfdmJlX2Jpb3Nfc2V0X21lbW9yeV93aW5kb3cpCiAJcHVzaGwJJWVicAogCXB1 c2hsCSVlYngKIApAQCAtMTk0NSwxNiArMTk1MywxNyBAQAogCXJldAogCiAvKgotICogZ3J1 Yl92YmVfc3RhdHVzX3QgZ3J1Yl92YmVfZ2V0X21lbW9yeV93aW5kb3cgKGdydWJfdWludDMy X3Qgd2luZG93LAotICogCQkJCQkJIGdydWJfdWludDMyX3QgKnBvc2l0aW9uKTsKKyAqIGdy dWJfdmJlX3N0YXR1c190IGdydWJfdmJlX2Jpb3NfZ2V0X21lbW9yeV93aW5kb3cgKGdydWJf dWludDMyX3Qgd2luZG93LAorICogCQkJCQkJICAgICAgZ3J1Yl91aW50MzJfdCAqcG9zaXRp b24pOwogICoKICAqIFJlZ2lzdGVyIGFsbG9jYXRpb25zIGZvciBwYXJhbWV0ZXJzOgogICog JWVheAkJd2luZG93CiAgKiAlZWR4CQkqcG9zaXRpb24KICAqLwotRlVOQ1RJT04oZ3J1Yl92 YmVfZ2V0X21lbW9yeV93aW5kb3cpCitGVU5DVElPTihncnViX3ZiZV9iaW9zX2dldF9tZW1v cnlfd2luZG93KQogCXB1c2hsICAgJWVicAogCXB1c2hsICAgJWVieAorCXB1c2hsCSVlZGkK IAlwdXNobAklZWR4CQkvKiBQdXNoICpwb3NpdGlvbiB0byBzdGFjay4gICovCiAKIAltb3Zs CSVlYXgsICVlYngJLyogU3RvcmUgd2luZG93IGluICVlYnguICAqLwpAQCAtMTk3OSwxOSAr MTk4OCwyMSBAQAogCW1vdncJJWJ4LCAlYXgKIAlhbmRsCSQweEZGRkYsICVlYXgJLyogUmV0 dXJuIHZhbHVlIGluICVlYXguICAqLwogCisJcG9wbAklZWRpCiAJcG9wbCAgICAlZWJ4CiAJ cG9wbCAgICAlZWJwCiAJcmV0CiAKIC8qCi0gKiBncnViX3ZiZV9zdGF0dXNfdCBncnViX3Zi ZV9zZXRfc2NhbmxpbmVfbGVuZ3RoIChncnViX3VpbnQzMl90IGxlbmd0aCkKKyAqIGdydWJf dmJlX3N0YXR1c190IGdydWJfdmJlX2Jpb3Nfc2V0X3NjYW5saW5lX2xlbmd0aCAoZ3J1Yl91 aW50MzJfdCBsZW5ndGgpCiAgKgogICogUmVnaXN0ZXIgYWxsb2NhdGlvbnMgZm9yIHBhcmFt ZXRlcnM6CiAgKiAlZWF4CQlsZW5ndGgKICAqLwotRlVOQ1RJT04oZ3J1Yl92YmVfc2V0X3Nj YW5saW5lX2xlbmd0aCkKK0ZVTkNUSU9OKGdydWJfdmJlX2Jpb3Nfc2V0X3NjYW5saW5lX2xl bmd0aCkKIAlwdXNobAklZWJwCiAJcHVzaGwJJWVieAorCXB1c2hsCSVlZHgKIAogCW1vdmwJ JWVheCwgJWVjeAkvKiBTdG9yZSBsZW5ndGggaW4gJWVjeC4gICovCiAKQEAgLTIwMTAsMTkg KzIwMjEsMjEgQEAKIAltb3Z3CSVkeCwgJWF4CiAJYW5kbAkkMHhGRkZGLCAlZWF4CS8qIFJl dHVybiB2YWx1ZSBpbiAlZWF4LiAgKi8KIAorCXBvcGwJJWVkeAogCXBvcGwJJWVieAogCXBv cGwJJWVicAogCXJldAogCiAvKgotICogZ3J1Yl92YmVfc3RhdHVzX3QgZ3J1Yl92YmVfZ2V0 X3NjYW5saW5lX2xlbmd0aCAoZ3J1Yl91aW50MzJfdCAqbGVuZ3RoKQorICogZ3J1Yl92YmVf c3RhdHVzX3QgZ3J1Yl92YmVfYmlvc19nZXRfc2NhbmxpbmVfbGVuZ3RoIChncnViX3VpbnQz Ml90ICpsZW5ndGgpCiAgKgogICogUmVnaXN0ZXIgYWxsb2NhdGlvbnMgZm9yIHBhcmFtZXRl cnM6CiAgKiAlZWF4CQkqbGVuZ3RoCiAgKi8KLUZVTkNUSU9OKGdydWJfdmJlX2dldF9zY2Fu bGluZV9sZW5ndGgpCitGVU5DVElPTihncnViX3ZiZV9iaW9zX2dldF9zY2FubGluZV9sZW5n dGgpCiAJcHVzaGwgICAlZWJwCiAJcHVzaGwgICAlZWJ4CisJcHVzaGwJJWVkaQogCXB1c2hs CSVlZHgJCS8qIFB1c2ggKmxlbmd0aCB0byBzdGFjay4gICovCiAKIAljYWxsICAgIHByb3Rf dG9fcmVhbApAQCAtMjA0NCwxOSArMjA1NywyMCBAQAogCW1vdncJJWR4LCAlYXgKIAlhbmRs CSQweEZGRkYsICVlYXgJLyogUmV0dXJuIHZhbHVlIGluICVlYXguICAqLwogCisJcG9wbAkl ZWRpCiAJcG9wbCAgICAlZWJ4CiAJcG9wbCAgICAlZWJwCiAJcmV0CiAKIC8qCi0gKiBncnVi X3ZiZV9zdGF0dXNfdCBncnViX3ZiZV9zZXRfZGlzcGxheV9zdGFydCAoZ3J1Yl91aW50MzJf dCB4LAotICoJCQkJCQkgZ3J1Yl91aW50MzJfdCB5KQorICogZ3J1Yl92YmVfc3RhdHVzX3Qg Z3J1Yl92YmVfYmlvc19zZXRfZGlzcGxheV9zdGFydCAoZ3J1Yl91aW50MzJfdCB4LAorICoJ CQkJCQkgICAgICBncnViX3VpbnQzMl90IHkpCiAgKgogICogUmVnaXN0ZXIgYWxsb2NhdGlv bnMgZm9yIHBhcmFtZXRlcnM6CiAgKiAlZWF4CQl4CiAgKiAlZWR4CQl5CiAgKi8KLUZVTkNU SU9OKGdydWJfdmJlX3NldF9kaXNwbGF5X3N0YXJ0KQorRlVOQ1RJT04oZ3J1Yl92YmVfYmlv c19zZXRfZGlzcGxheV9zdGFydCkKIAlwdXNobAklZWJwCiAJcHVzaGwJJWVieAogCkBAIC0y MDgzLDE2ICsyMDk3LDE3IEBACiAJcmV0CiAKIC8qCi0gKiBncnViX3ZiZV9zdGF0dXNfdCBn cnViX3ZiZV9nZXRfZGlzcGxheV9zdGFydCAoZ3J1Yl91aW50MzJfdCAqeCwKLSAqCQkJCQkJ IGdydWJfdWludDMyX3QgKnkpCisgKiBncnViX3ZiZV9zdGF0dXNfdCBncnViX3ZiZV9iaW9z X2dldF9kaXNwbGF5X3N0YXJ0IChncnViX3VpbnQzMl90ICp4LAorICoJCQkJCQkgICAgICBn cnViX3VpbnQzMl90ICp5KQogICoKICAqIFJlZ2lzdGVyIGFsbG9jYXRpb25zIGZvciBwYXJh bWV0ZXJzOgogICogJWVheAkJKngKICAqICVlZHgJCSp5CiAgKi8KLUZVTkNUSU9OKGdydWJf dmJlX2dldF9kaXNwbGF5X3N0YXJ0KQorRlVOQ1RJT04oZ3J1Yl92YmVfYmlvc19nZXRfZGlz cGxheV9zdGFydCkKIAlwdXNobCAgICVlYnAKIAlwdXNobCAgICVlYngKKwlwdXNobAklZWRp CiAJcHVzaGwJJWVheAkJLyogUHVzaCAqeCB0byBzdGFjay4gICovCiAJcHVzaGwJJWVkeAkJ LyogUHVzaCAqeSB0byBzdGFjay4gICovCiAKQEAgLTIxMTksMjMgKzIxMzQsMjUgQEAKIAlt b3Z3CSVieCwgJWF4CiAJYW5kbAkkMHhGRkZGLCAlZWF4CS8qIFJldHVybiB2YWx1ZSBpbiAl ZWF4LiAgKi8KIAorCXBvcGwJJWVkaQogCXBvcGwgICAgJWVieAogCXBvcGwgICAgJWVicAog CXJldAogCiAvKgotICogZ3J1Yl92YmVfc3RhdHVzX3QgZ3J1Yl92YmVfc2V0X3BhbGV0dGVf ZGF0YSAoZ3J1Yl91aW50MzJfdCBjb2xvcl9jb3VudCwKLSAqCQkJCQkJZ3J1Yl91aW50MzJf dCBzdGFydF9pbmRleCwKLSAqCQkJCQkJc3RydWN0IGdydWJfdmJlX3BhbGV0dGVfZGF0YSAq cGFsZXR0ZV9kYXRhKQorICogZ3J1Yl92YmVfc3RhdHVzX3QgZ3J1Yl92YmVfYmlvc19zZXRf cGFsZXR0ZV9kYXRhIChncnViX3VpbnQzMl90IGNvbG9yX2NvdW50LAorICoJCQkJCQkgICAg IGdydWJfdWludDMyX3Qgc3RhcnRfaW5kZXgsCisgKgkJCQkJCSAgICAgc3RydWN0IGdydWJf dmJlX3BhbGV0dGVfZGF0YSAqcGFsZXR0ZV9kYXRhKQogICoKICAqIFJlZ2lzdGVyIGFsbG9j YXRpb25zIGZvciBwYXJhbWV0ZXJzOgogICogJWVheAkJY29sb3JfY291bnQKICAqICVlZHgJ CXN0YXJ0X2luZGV4CiAgKiAlZWN4CQkqcGFsZXR0ZV9kYXRhCiAgKi8KLUZVTkNUSU9OKGdy dWJfdmJlX3NldF9wYWxldHRlX2RhdGEpCitGVU5DVElPTihncnViX3ZiZV9iaW9zX3NldF9w YWxldHRlX2RhdGEpCiAJcHVzaGwJJWVicAogCXB1c2hsCSVlYngKKwlwdXNobAklZWRpCiAK IAltb3ZsCSVlYXgsICVlYngJLyogU3RvcmUgY29sb3JfY291bnQgaW4gJWVieC4gICovCiAK QEAgLTIxNjUsNiArMjE4Miw3IEBACiAJbW92dwklZHgsICVheAogCWFuZGwJJDB4RkZGRiwg JWVheAkvKiBSZXR1cm4gdmFsdWUgaW4gJWVheC4gICovCiAKKwlwb3BsCSVlZGkKIAlwb3Bs CSVlYngKIAlwb3BsCSVlYnAKIAlyZXQKZGlmZiAtcnVOIC14ICcqQ1ZTKicgZ3J1YjIvbm9y bWFsL2NtZGxpbmUuYyBncnViMi5uZXcvbm9ybWFsL2NtZGxpbmUuYwotLS0gZ3J1YjIvbm9y bWFsL2NtZGxpbmUuYwkyMDA1LTA4LTI4IDIwOjAxOjE2LjAwMDAwMDAwMCArMDMwMAorKysg Z3J1YjIubmV3L25vcm1hbC9jbWRsaW5lLmMJMjAwNi0wMi0yNSAxNDo1MDo0NC4wMDAwMDAw MDAgKzAyMDAKQEAgLTIzMSw2ICsyMzEsOCBAQAogICAgICAgeHBvcyA9IChwbGVuICsgbHBv cykgJSA3OTsKICAgICAgIHlwb3MgPSB5c3RhcnQgKyAocGxlbiArIGxwb3MpIC8gNzk7CiAg ICAgICBncnViX2dvdG94eSAoeHBvcywgeXBvcyk7CisgICAgICAKKyAgICAgIGdydWJfcmVm cmVzaCAoKTsKICAgICB9CiAgIAogICB2b2lkIGNsX3ByaW50IChpbnQgcG9zLCBpbnQgYykK QEAgLTI3MSw2ICsyNzMsOCBAQAogCSAgY2xfcHJpbnQgKGxwb3MgLSBsZW4sIGVjaG9fY2hh cik7CiAJICBjbF9zZXRfcG9zICgpOwogCX0KKyAgICAgIAorICAgICAgZ3J1Yl9yZWZyZXNo ICgpOwogICAgIH0KIAogICB2b2lkIGNsX2RlbGV0ZSAodW5zaWduZWQgbGVuKQpAQCAtMjkw LDYgKzI5NCw4IEBACiAJICBjbF9wcmludCAobHBvcywgZWNob19jaGFyKTsKIAkgIGNsX3Nl dF9wb3MgKCk7CiAJfQorICAgICAgCisgICAgICBncnViX3JlZnJlc2ggKCk7CiAgICAgfQog ICAKICAgcGxlbiA9IGdydWJfc3RybGVuIChwcm9tcHQpOwpkaWZmIC1ydU4gLXggJypDVlMq JyBncnViMi90ZXJtL3ZpZGVvdGVybS5jIGdydWIyLm5ldy90ZXJtL3ZpZGVvdGVybS5jCi0t LSBncnViMi90ZXJtL3ZpZGVvdGVybS5jCTE5NzAtMDEtMDEgMDI6MDA6MDAuMDAwMDAwMDAw ICswMjAwCisrKyBncnViMi5uZXcvdGVybS92aWRlb3Rlcm0uYwkyMDA2LTAzLTAyIDE1OjMy OjExLjk5MTQ4NzMwNCArMDIwMApAQCAtMCwwICsxLDg3MyBAQAorLyoKKyAqICBHUlVCICAt LSAgR1JhbmQgVW5pZmllZCBCb290bG9hZGVyCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1ICBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK KyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5k YXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgor ICovCisKKyNpbmNsdWRlIDxncnViL21hY2hpbmUvbWVtb3J5Lmg+CisjaW5jbHVkZSA8Z3J1 Yi9tYWNoaW5lL2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxncnViL3Rlcm0uaD4KKyNpbmNsdWRl IDxncnViL3R5cGVzLmg+CisjaW5jbHVkZSA8Z3J1Yi9kbC5oPgorI2luY2x1ZGUgPGdydWIv bWlzYy5oPgorI2luY2x1ZGUgPGdydWIvbm9ybWFsLmg+CisjaW5jbHVkZSA8Z3J1Yi9mb250 Lmg+CisjaW5jbHVkZSA8Z3J1Yi9hcmcuaD4KKyNpbmNsdWRlIDxncnViL21tLmg+CisjaW5j bHVkZSA8Z3J1Yi9lbnYuaD4KKyNpbmNsdWRlIDxncnViL3ZpZGVvLmg+CisKKyNkZWZpbmUg REVGQVVMVF9DSEFSX1dJRFRIICA4CisjZGVmaW5lIERFRkFVTFRfQ0hBUl9IRUlHSFQgMTYK KworI2RlZmluZSBERUZBVUxUX0ZHX0NPTE9SICAgIAkweDBhCisjZGVmaW5lIERFRkFVTFRf QkdfQ09MT1IgICAgCTB4MDAKKyNkZWZpbmUgREVGQVVMVF9DVVJTT1JfQ09MT1IJMHgwZgor CitzdHJ1Y3QgZ3J1Yl9kaXJ0eV9yZWdpb24KK3sKKyAgaW50IHRvcF9sZWZ0X3g7CisgIGlu dCB0b3BfbGVmdF95OworICBpbnQgYm90dG9tX3JpZ2h0X3g7CisgIGludCBib3R0b21fcmln aHRfeTsKK307CisKK3N0cnVjdCBncnViX2NvbG9yZWRfY2hhcgoreworICAvKiBBbiBVbmlj b2RlIGNvZGVwb2ludC4gICovCisgIGdydWJfdWludDMyX3QgY29kZTsKKworICAvKiBDb2xv ciB2YWx1ZXMuICAqLworICBncnViX2NvbG9yX3QgZmdfY29sb3I7CisgIGdydWJfY29sb3Jf dCBiZ19jb2xvcjsKKworICAvKiBUaGUgd2lkdGggb2YgdGhpcyBjaGFyYWN0ZXIgbWludXMg b25lLiAgKi8KKyAgdW5zaWduZWQgY2hhciB3aWR0aDsKKworICAvKiBUaGUgY29sdW1uIGlu ZGV4IG9mIHRoaXMgY2hhcmFjdGVyLiAgKi8KKyAgdW5zaWduZWQgY2hhciBpbmRleDsKK307 CisKK3N0cnVjdCBncnViX3ZpcnR1YWxfc2NyZWVuCit7CisgIC8qIERpbWVuc2lvbnMgb2Yg dGhlIHZpcnVhbCBzY3JlZW4uICAqLworICBncnViX3VpbnQzMl90IHdpZHRoOworICBncnVi X3VpbnQzMl90IGhlaWdodDsKKworICAvKiBPZmZzZXQgaW4gdGhlIGRpc3BsYXkuICAqLwor ICBncnViX3VpbnQzMl90IG9mZnNldF94OworICBncnViX3VpbnQzMl90IG9mZnNldF95Owor CisgIC8qIFRUWSBDaGFyYWN0ZXIgc2l6ZXMuICAqLworICBncnViX3VpbnQzMl90IGNoYXJf d2lkdGg7CisgIGdydWJfdWludDMyX3QgY2hhcl9oZWlnaHQ7CisKKyAgLyogVmlydHVhbCBz Y3JlZW4gVFRZIHNpemUuICAqLworICBncnViX3VpbnQzMl90IGNvbHVtbnM7CisgIGdydWJf dWludDMyX3Qgcm93czsKKworICAvKiBDdXJyZW50IGN1cnNvciBkZXRhaWxzLiAgKi8KKyAg Z3J1Yl91aW50MzJfdCBjdXJzb3JfeDsKKyAgZ3J1Yl91aW50MzJfdCBjdXJzb3JfeTsKKyAg Z3J1Yl91aW50OF90IGN1cnNvcl9zdGF0ZTsKKyAgZ3J1Yl9jb2xvcl90IGZnX2NvbG9yX3Nl dHRpbmc7CisgIGdydWJfY29sb3JfdCBiZ19jb2xvcl9zZXR0aW5nOworICBncnViX2NvbG9y X3QgZmdfY29sb3I7CisgIGdydWJfY29sb3JfdCBiZ19jb2xvcjsKKyAgZ3J1Yl9jb2xvcl90 IGN1cnNvcl9jb2xvcjsKKworICAvKiBUZXh0IGJ1ZmZlciBmb3IgdmlydWFsIHNjcmVlbi4g Q29udGFpbnMgKGNvbHVtbnMgKiByb3dzKSBudW1iZXIKKyAgICAgb2YgZW50cmllcy4gICov CisgIHN0cnVjdCBncnViX2NvbG9yZWRfY2hhciAqdGV4dF9idWZmZXI7Cit9OworCisvKiBN YWtlIHNldXJlIHRleHQgYnVmZmVyIGlzIG5vdCBtYXJrZWQgYXMgYWxsb2NhdGVkLiAgKi8K K3N0YXRpYyBzdHJ1Y3QgZ3J1Yl92aXJ0dWFsX3NjcmVlbiB2aXJ0dWFsX3NjcmVlbiA9Cisg IHsKKyAgICAudGV4dF9idWZmZXIgPSAwCisgIH07CisKK3N0YXRpYyBncnViX2RsX3QgbXlf bW9kOworc3RhdGljIHN0cnVjdCBncnViX3ZpZGVvX21vZGVfaW5mbyBtb2RlX2luZm87CisK K3N0YXRpYyBzdHJ1Y3QgZ3J1Yl92aWRlb19yZW5kZXJfdGFyZ2V0ICp0ZXh0X2xheWVyID0g MDsKKworc3RhdGljIHN0cnVjdCBncnViX2RpcnR5X3JlZ2lvbiBkaXJ0eV9yZWdpb247CisK K3N0YXRpYyB2b2lkIGRpcnR5X3JlZ2lvbl9yZXNldCAodm9pZCk7CisKK3N0YXRpYyBpbnQg ZGlydHlfcmVnaW9uX2lzX2VtcHR5ICh2b2lkKTsKKworc3RhdGljIHZvaWQgZGlydHlfcmVn aW9uX2FkZCAoaW50IHgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHks CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgd2lkdGgsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaGVpZ2h0KTsKKwor c3RhdGljIHZvaWQKK2dydWJfdmlydHVhbF9zY3JlZW5fZnJlZSAodm9pZCkKK3sKKyAgLyog SWYgdmlydHVhbCBzY3JlZW4gaGFzIGJlZW4gYWxsb2NhdGVkLCBmcmVlIGl0LiAgKi8KKyAg aWYgKHZpcnR1YWxfc2NyZWVuLnRleHRfYnVmZmVyICE9IDApCisgICAgZ3J1Yl9mcmVlICh2 aXJ0dWFsX3NjcmVlbi50ZXh0X2J1ZmZlcik7CisKKyAgLyogUmVzZXQgdmlydHVhbCBzY3Jl ZW4gZGF0YS4gICovCisgIGdydWJfbWVtc2V0ICgmdmlydHVhbF9zY3JlZW4sIDAsIHNpemVv ZiAodmlydHVhbF9zY3JlZW4pKTsKKyAgCisgIC8qIEZyZWUgcmVuZGVyIHRhcmdldHMuICAq LworICBncnViX3ZpZGVvX2RlbGV0ZV9yZW5kZXJfdGFyZ2V0ICh0ZXh0X2xheWVyKTsKKyAg dGV4dF9sYXllciA9IDA7Cit9CisKK3N0YXRpYyBncnViX2Vycl90CitncnViX3ZpcnR1YWxf c2NyZWVuX3NldHVwIChncnViX3VpbnQzMl90IHgsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBncnViX3VpbnQzMl90IHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBncnVi X3VpbnQzMl90IHdpZHRoLAorCQkJICAgZ3J1Yl91aW50MzJfdCBoZWlnaHQpCit7CisgIC8q IEZyZWUgb2xkIHZpcnR1YWwgc2NyZWVuLiAgKi8KKyAgZ3J1Yl92aXJ0dWFsX3NjcmVlbl9m cmVlICgpOworCisgIC8qIEluaXRpYWxpemUgd2l0aCBkZWZhdWx0IGRhdGEuICAqLworICB2 aXJ0dWFsX3NjcmVlbi53aWR0aCA9IHdpZHRoOworICB2aXJ0dWFsX3NjcmVlbi5oZWlnaHQg PSBoZWlnaHQ7CisgIHZpcnR1YWxfc2NyZWVuLm9mZnNldF94ID0geDsKKyAgdmlydHVhbF9z Y3JlZW4ub2Zmc2V0X3kgPSB5OworICB2aXJ0dWFsX3NjcmVlbi5jaGFyX3dpZHRoID0gREVG QVVMVF9DSEFSX1dJRFRIOworICB2aXJ0dWFsX3NjcmVlbi5jaGFyX2hlaWdodCA9IERFRkFV TFRfQ0hBUl9IRUlHSFQ7CisgIHZpcnR1YWxfc2NyZWVuLmN1cnNvcl94ID0gMDsKKyAgdmly dHVhbF9zY3JlZW4uY3Vyc29yX3kgPSAwOworICB2aXJ0dWFsX3NjcmVlbi5jdXJzb3Jfc3Rh dGUgPSAxOworCisgIC8qIENhbGN1bGF0ZSBzaXplIG9mIHRleHQgYnVmZmVyLiAgKi8KKyAg dmlydHVhbF9zY3JlZW4uY29sdW1ucyA9IHZpcnR1YWxfc2NyZWVuLndpZHRoIC8gdmlydHVh bF9zY3JlZW4uY2hhcl93aWR0aDsKKyAgdmlydHVhbF9zY3JlZW4ucm93cyA9IHZpcnR1YWxf c2NyZWVuLmhlaWdodCAvIHZpcnR1YWxfc2NyZWVuLmNoYXJfaGVpZ2h0OworCisgIC8qIEFs bG9jYXRlIG1lbW9yeSBmb3IgdGV4dCBidWZmZXIuICAqLworICB2aXJ0dWFsX3NjcmVlbi50 ZXh0X2J1ZmZlciA9CisgICAgKHN0cnVjdCBncnViX2NvbG9yZWRfY2hhciAqKSBncnViX21h bGxvYyAodmlydHVhbF9zY3JlZW4uY29sdW1ucworCQkJCQkgICAgICAqIHZpcnR1YWxfc2Ny ZWVuLnJvd3MKKwkJCQkJICAgICAgKiBzaXplb2YgKCp2aXJ0dWFsX3NjcmVlbi50ZXh0X2J1 ZmZlcikpOworICBpZiAoZ3J1Yl9lcnJubyAhPSBHUlVCX0VSUl9OT05FKQorICAgIHJldHVy biBncnViX2Vycm5vOworCisgIC8qIENsZWFyZSBuZXcgcmVuZGVyIHRhcmdldCBmb3IgdGV4 dCBsYXllci4gICovCisgIGdydWJfdmlkZW9fY3JlYXRlX3JlbmRlcl90YXJnZXQgKCZ0ZXh0 X2xheWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlVCX1ZJREVP X01PREVfVFlQRV9SR0IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBH UlVCX1ZJREVPX01PREVfVFlQRV9BTFBIQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdmlydHVhbF9zY3JlZW4ud2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZpcnR1YWxfc2NyZWVuLmhlaWdodCk7CisgIGlmIChncnViX2Vycm5v ICE9IEdSVUJfRVJSX05PTkUpCisgICAgcmV0dXJuIGdydWJfZXJybm87CisgIAorICAvKiBB cyB3ZSB3YW50IHRvIGhhdmUgY29sb3JzIGNvbXBhdGlibGUgd2l0aCByZW5kZXJpbmcgdGFy Z2V0LAorICAgICB3ZSBjYW4gb25seSBoYXZlIHRob3NlIGFmdGVyIG1vZGUgaXMgaW5pdGlh bGl6ZWQuICAqLyAgICAKKyAgZ3J1Yl92aWRlb19zZXRfYWN0aXZlX3JlbmRlcl90YXJnZXQg KHRleHRfbGF5ZXIpOworICAKKyAgdmlydHVhbF9zY3JlZW4uZmdfY29sb3Jfc2V0dGluZyA9 IGdydWJfdmlkZW9fbWFwX2NvbG9yIChERUZBVUxUX0ZHX0NPTE9SKTsKKyAgdmlydHVhbF9z Y3JlZW4uYmdfY29sb3Jfc2V0dGluZyA9IGdydWJfdmlkZW9fbWFwX2NvbG9yIChERUZBVUxU X0JHX0NPTE9SKTsKKyAgdmlydHVhbF9zY3JlZW4uZmdfY29sb3IgPSB2aXJ0dWFsX3NjcmVl bi5mZ19jb2xvcl9zZXR0aW5nOworICB2aXJ0dWFsX3NjcmVlbi5iZ19jb2xvciA9IHZpcnR1 YWxfc2NyZWVuLmJnX2NvbG9yX3NldHRpbmc7CisgIHZpcnR1YWxfc2NyZWVuLmN1cnNvcl9j b2xvciA9IGdydWJfdmlkZW9fbWFwX2NvbG9yIChERUZBVUxUX0NVUlNPUl9DT0xPUik7Cisg IAorICBncnViX3ZpZGVvX3NldF9hY3RpdmVfcmVuZGVyX3RhcmdldCAoR1JVQl9WSURFT19S RU5ERVJfVEFSR0VUX0RJU1BMQVkpOworICAKKyAgcmV0dXJuIGdydWJfZXJybm87Cit9CisK K3N0YXRpYyBncnViX2Vycl90CitncnViX3ZpZGVvdGVybV9pbml0ICh2b2lkKQoreworICBj aGFyICptb2RldmFyOworICBpbnQgd2lkdGggPSAxMDI0OworICBpbnQgaGVpZ2h0ID0gNzY4 OworICBpbnQgZmxhZ3MgPSAwOworICBncnViX2NvbG9yX3QgY29sb3I7CisgIAorICAvKiBQ YXJzZSB2aWRlb19tb2RlIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHNldC4gICovCisgIG1v ZGV2YXIgPSBncnViX2Vudl9nZXQgKCJ2aWRlb19tb2RlIik7CisgIGlmIChtb2RldmFyKQor ICAgIHsKKyAgICAgIGNoYXIgKnRtcDsKKyAgICAgIGNoYXIgKnBhcmFtOworICAgICAgY2hh ciAqdmFsdWU7CisgICAgICAKKyAgICAgIC8qIFRha2UgY29weSBvZiBlbnYudmFyLiBhcyB3 ZSBkb24ndCB3YW50IHRvIG1vZGlmeSB0aGF0LiAgKi8KKyAgICAgIHRtcCA9IGdydWJfc3Ry ZHVwIChtb2RldmFyKTsKKyAgICAgIG1vZGV2YXIgPSB0bXA7CisgICAgICAKKyAgICAgIGlm IChncnViX2Vycm5vICE9IEdSVUJfRVJSX05PTkUpCisgICAgICAgIHJldHVybiBncnViX2Vy cm5vOyAgICAgICAgCisgICAgICAKKyAgICAgIC8qIFNraXAgd2hpdGVzcGFjZS4gICovCisg ICAgICB3aGlsZSAoZ3J1Yl9pc3NwYWNlICgqdG1wKSkKKyAgICAgICAgeworICAgICAgICAg IHRtcCsrOworICAgICAgICB9CisgICAgICAKKyAgICAgIC8qIEluaXRpYWxpemUgdG9rZW4g aG9sZGVycy4gICovCisgICAgICBwYXJhbSA9IHRtcDsKKyAgICAgIHZhbHVlID0gTlVMTDsK KworICAgICAgLyogTG9vcCB1bnRpbCBhbGwgY2hhcmFjdGVycyBoYXZlIGJlZW4gaGFuZGxl ZC4gICovCisgICAgICB3aGlsZSAoMSkKKyAgICAgICAgeworICAgICAgICAgIGlmIChncnVi X2lzc3BhY2UgKCp0bXApIHx8ICgqdG1wID09IDApKQorICAgICAgICAgICAgeworICAgICAg ICAgICAgICAvKiBJZiB0aGVyZSBhcmUgbW9yZSB2YXJpYWJsZXMsIG1hcmsgc2VwZXJhdG9y IHdpdGggTlVMLiAgKi8KKyAgICAgICAgICAgICAgaWYgKCp0bXAgIT0gMCkKKyAgICAgICAg ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAqdG1wKysgPSAwOworICAgICAgICAgICAg ICAgIH0gICAgICAgICAgICAgIAorCisgICAgICAgICAgICAgIC8qIEFuYWx5emUgc2V0dGlu Zy4gICovCisgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAvKiBIYW5kbGUgd2lkdGg9 PG51bWJlcj4uICAqLworICAgICAgICAgICAgICBpZiAoKGdydWJfc3RyY21wIChwYXJhbSwg IndpZHRoIikgPT0gMCkgJiYgKHZhbHVlICE9IE5VTEwpKQorICAgICAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgICAgIHdpZHRoID0gZ3J1Yl9zdHJ0b3VsICh2YWx1ZSwgMCwgMCk7 CisgICAgICAgICAgICAgICAgICBpZiAoZ3J1Yl9lcnJubyAhPSBHUlVCX0VSUl9OT05FKQor ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgLyogRnJlZSBt ZW1vcnkgYmVmb3JlIHJldHVybmluZy4gICovCisgICAgICAgICAgICAgICAgICAgICAgZ3J1 Yl9mcmVlIChtb2RldmFyKTsKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ3J1Yl9l cnJubzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAg ICAgICAgICAgICAvKiBIYW5kbGUgaGVpZ2h0PTxudW1iZXI+LiAgKi8KKyAgICAgICAgICAg ICAgaWYgKChncnViX3N0cmNtcCAocGFyYW0sICJoZWlnaHQiKSA9PSAwKSAmJiAodmFsdWUg IT0gTlVMTCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgaGVpZ2h0 ID0gZ3J1Yl9zdHJ0b3VsICh2YWx1ZSwgMCwgMCk7CisgICAgICAgICAgICAgICAgICBpZiAo Z3J1Yl9lcnJubyAhPSBHUlVCX0VSUl9OT05FKQorICAgICAgICAgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgICAgICAgLyogRnJlZSBtZW1vcnkgYmVmb3JlIHJldHVybmluZy4g ICovCisgICAgICAgICAgICAgICAgICAgICAgZ3J1Yl9mcmVlIChtb2RldmFyKTsKKyAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gZ3J1Yl9lcnJubzsKKyAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAvKiBIYW5kbGUgcmdi LiBVc2VkIHRvIHJlcXVlc3QgUkdCIG1vZGUuICAqLworICAgICAgICAgICAgICBpZiAoKGdy dWJfc3RyY21wIChwYXJhbSwgInJnYiIpID09IDApICYmICh2YWx1ZSA9PSBOVUxMKSkKKyAg ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBmbGFncyAmPSB+R1JVQl9WSURF T19NT0RFX1RZUEVfSU5ERVhfQ09MT1I7CisgICAgICAgICAgICAgICAgICBmbGFncyB8PSBH UlVCX1ZJREVPX01PREVfVFlQRV9SR0I7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg ICAgICAgIC8qIEhhbmRsZSBpbmRleC4gVXNlZCB0byByZXF1ZXN0IGluZGV4IGNvbG9yIG1v ZGUuICAqLworICAgICAgICAgICAgICBpZiAoKGdydWJfc3RyY21wIChwYXJhbSwgImluZGV4 IikgPT0gMCkgJiYgKHZhbHVlID09IE5VTEwpKQorICAgICAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICAgIGZsYWdzICY9IH5HUlVCX1ZJREVPX01PREVfVFlQRV9SR0I7CisgICAg ICAgICAgICAgICAgICBmbGFncyB8PSBHUlVCX1ZJREVPX01PREVfVFlQRV9JTkRFWF9DT0xP UjsKKyAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIAorCisgICAgICAgICAgICAg IC8qIEhhbmRsZSBkb3VibGUuIFVzZWQgdG8gcmVxdWVzdCBkb3VibGUgYnVmZmVyaW5nIG1v ZGUuICAqLworICAgICAgICAgICAgICBpZiAoKGdydWJfc3RyY21wIChwYXJhbSwgImRvdWJs ZSIpID09IDApICYmICh2YWx1ZSA9PSBOVUxMKSkKKyAgICAgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgICBmbGFncyB8PSBHUlVCX1ZJREVPX01PREVfVFlQRV9ET1VCTEVfQlVG RkVSRUQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAKKyAgICAgICAgICAg ICAgLyogSGFuZGxlIDx3aWR0aD54PGhlaWdodD5beDxkZXB0aD5dKi8KKyAgICAgICAgICAg ICAgaWYgKGdydWJfaXNkaWdpdCAocGFyYW1bMF0pKQorICAgICAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICAgIC8qIEZpbmQgd2lkdGggdmFsdWUuICAqLworICAgICAgICAgICAg ICAgICAgdmFsdWUgPSBwYXJhbTsKKyAgICAgICAgICAgICAgICAgIHBhcmFtID0gZ3J1Yl9z dHJjaHIocGFyYW0sICd4Jyk7CisgICAgICAgICAgICAgICAgICBpZiAocGFyYW0gPT0gTlVM TCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIC8qIEZy ZWUgbWVtb3J5IGJlZm9yZSByZXR1cm5pbmcuICAqLworICAgICAgICAgICAgICAgICAgICAg IGdydWJfZnJlZSAobW9kZXZhcik7CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdy dWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9BUkdVTUVOVCwgCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGFyZ3VtZW50OiAlc1xuIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0pOworICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg KnBhcmFtID0gMDsKKyAgICAgICAgICAgICAgICAgIHBhcmFtKys7CisgICAgICAgICAgICAg ICAgICAgICAgCisgICAgICAgICAgICAgICAgICB3aWR0aCA9IGdydWJfc3RydG91bCAodmFs dWUsIDAsIDApOworICAgICAgICAgICAgICAgICAgaWYgKGdydWJfZXJybm8gIT0gR1JVQl9F UlJfTk9ORSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg IC8qIEZyZWUgbWVtb3J5IGJlZm9yZSByZXR1cm5pbmcuICAqLworICAgICAgICAgICAgICAg ICAgICAgIGdydWJfZnJlZSAobW9kZXZhcik7CisgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIGdydWJfZXJybm87CisgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAg ICAgICAgCisKKyAgICAgICAgICAgICAgICAgIC8qIEZpbmQgaGVpZ2h0IHZhbHVlLiAgKi8K KyAgICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyYW07CisgICAgICAgICAgICAgICAgICBw YXJhbSA9IGdydWJfc3RyY2hyKHBhcmFtLCAneCcpOworICAgICAgICAgICAgICAgICAgaWYg KHBhcmFtID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAg ICAgIAorICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCA9IGdydWJfc3RydG91bCAodmFs dWUsIDAsIDApOworICAgICAgICAgICAgICAgICAgICAgIGlmIChncnViX2Vycm5vICE9IEdS VUJfRVJSX05PTkUpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEZyZWUgbWVtb3J5IGJlZm9yZSByZXR1cm5pbmcuICAqLworICAg ICAgICAgICAgICAgICAgICAgICAgICBncnViX2ZyZWUgKG1vZGV2YXIpOworICAgICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gZ3J1Yl9lcnJubzsKKyAgICAgICAgICAgICAgICAg ICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg ICAgICAgICAgICAgICAgIC8qIFdlIGhhdmUgb3B0aW9uYWwgY29sb3IgZGVwdGggdmFsdWUu ICAqLworICAgICAgICAgICAgICAgICAgICAgICpwYXJhbSA9IDA7CisgICAgICAgICAgICAg ICAgICAgICAgcGFyYW0rKzsKKyAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg ICAgICAgICAgICBoZWlnaHQgPSBncnViX3N0cnRvdWwgKHZhbHVlLCAwLCAwKTsKKyAgICAg ICAgICAgICAgICAgICAgICBpZiAoZ3J1Yl9lcnJubyAhPSBHUlVCX0VSUl9OT05FKQorICAg ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBG cmVlIG1lbW9yeSBiZWZvcmUgcmV0dXJuaW5nLiAgKi8KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgZ3J1Yl9mcmVlIChtb2RldmFyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIGdydWJfZXJybm87CisgICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAg ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg ICAgICAgIC8qIENvbnZlcnQgY29sb3IgZGVwdGggdmFsdWUuICAqLworICAgICAgICAgICAg ICAgICAgICAgIHZhbHVlID0gcGFyYW07CisjaWYgMCAgICAgICAgICAgICAgICAgICAgICAK KyAgICAgICAgICAgICAgICAgICAgICBkZXB0aCA9IGdydWJfc3RydG91bCAodmFsdWUsIDAs IDApOworICAgICAgICAgICAgICAgICAgICAgIGlmIChncnViX2Vycm5vICE9IEdSVUJfRVJS X05PTkUpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEZyZWUgbWVtb3J5IGJlZm9yZSByZXR1cm5pbmcuICAqLworICAgICAgICAg ICAgICAgICAgICAgICAgICBncnViX2ZyZWUgKG1vZGV2YXIpOworICAgICAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4gZ3J1Yl9lcnJubzsKKyAgICAgICAgICAgICAgICAgICAgICAg IH0KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg ICAvKiBTa2lwIHdoaXRlc3BhY2UuICAqLworICAgICAgICAgICAgICB3aGlsZSAoZ3J1Yl9p c3NwYWNlICgqdG1wKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICB0 bXArKzsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgLyogQ2hlY2sgaWYg d2UgYXJlIGF0IGVuZCBvZiBzdHJpbmcuICAqLworICAgICAgICAgICAgICBpZiAoKnRtcCA9 PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgCisgICAgICAgICAgICAgIC8qIEluaXRp YWxpemUgdG9rZW4gaG9sZGVycy4gICovCisgICAgICAgICAgICAgIHBhcmFtID0gdG1wOwor ICAgICAgICAgICAgICB2YWx1ZSA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAg CisgICAgICAgICAgLyogQ2hlY2sgaWYgdGhlcmUgaXMgdmFsdWUgc2VwZXJhdG9yLiAgKi8K KyAgICAgICAgICBpZiAoKnRtcCA9PSAnPScpCisgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICp0bXArKyA9IDA7CisgICAgICAgICAgICAgIHZhbHVlID0gdG1wOworICAgICAgICAg ICAgfQorICAgICAgICAgIAorICAgICAgICAgIC8qIEFkdmFuY2UgdG8gbmV4dCBjaGFyYWN0 ZXIuICAqLworICAgICAgICAgIHRtcCsrOworICAgICAgICB9CisgICAgICAgIAorICAgICAg ICAvKiBGcmVlIG1lbW9yeS4gICovCisgICAgICAgIGdydWJfZnJlZSAobW9kZXZhcik7Cisg ICAgfQorCisgIC8qIEludGlhbGl6ZSB1c2VyIHJlcXVlc3RlZCBtb2RlLiAgKi8KKyAgaWYg KGdydWJfdmlkZW9fc2V0dXAgKHdpZHRoLCBoZWlnaHQsIGZsYWdzKSAhPSBHUlVCX0VSUl9O T05FKQorICAgIHJldHVybiBncnViX2Vycm5vOworCisgIC8qIEZpZ3VyZSBvdXQgd2hhdCBt b2RlIHdlIGVuZGVkIHVwLiAgKi8KKyAgaWYgKGdydWJfdmlkZW9fZ2V0X2luZm8gKCZtb2Rl X2luZm8pICE9IEdSVUJfRVJSX05PTkUpCisgICAgcmV0dXJuIGdydWJfZXJybm87CisKKyAg LyogTWFrZSBzdXJlIHNjcmVlbiBpcyBibGFjay4gICovCisgIGNvbG9yID0gZ3J1Yl92aWRl b19tYXBfcmdiICgwLCAwLCAwKTsKKyAgZ3J1Yl92aWRlb19maWxsX3JlY3QgKGNvbG9yLCAw LCAwLCBtb2RlX2luZm8ud2lkdGgsIG1vZGVfaW5mby5oZWlnaHQpOworCisgIC8qIExlYXZl IGJvcmRlcnMgZm9yIHZpcnR1YWwgc2NyZWVuLiAgKi8KKyAgd2lkdGggPSBtb2RlX2luZm8u d2lkdGggLSAoMiAqIDEwKTsKKyAgaGVpZ2h0ID0gbW9kZV9pbmZvLmhlaWdodCAtICgyICog MTApOworICAKKyAgLyogQ3JlYXRlIHZpcnR1YWwgc2NyZWVuLiAgKi8KKyAgaWYgKGdydWJf dmlydHVhbF9zY3JlZW5fc2V0dXAgKDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwKKwkJ CQkgaGVpZ2h0KSAhPSBHUlVCX0VSUl9OT05FKQorICAgIHsKKyAgICAgIGdydWJfdmlkZW9f cmVzdG9yZSAoKTsKKyAgICAgIHJldHVybiBncnViX2Vycm5vOworICAgIH0KKworICAvKiBN YXJrIHdob2xlIHNjcmVlbiBhcyBkaXJ0eS4gICovCisgIGRpcnR5X3JlZ2lvbl9yZXNldCAo KTsgIAorICBkaXJ0eV9yZWdpb25fYWRkICgwLCAwLCBtb2RlX2luZm8ud2lkdGgsIG1vZGVf aW5mby5oZWlnaHQpOworCisgIHJldHVybiAoZ3J1Yl9lcnJubyA9IEdSVUJfRVJSX05PTkUp OworfQorCitzdGF0aWMgZ3J1Yl9lcnJfdAorZ3J1Yl92aWRlb3Rlcm1fZmluaSAodm9pZCkK K3sKKyAgZ3J1Yl92aXJ0dWFsX3NjcmVlbl9mcmVlICgpOworCisgIGdydWJfdmlkZW9fcmVz dG9yZSAoKTsKKworICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKK30KKworc3RhdGljIHZvaWQK K3JlZHJhd19zY3JlZW5fcmVjdCAodW5zaWduZWQgaW50IHgsIAorICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBpbnQgeSwgCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu dCB3aWR0aCwgCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoZWlnaHQpCit7 CisgIGdydWJfY29sb3JfdCBjb2xvcjsKKyAgCisgIGdydWJfdmlkZW9fc2V0X2FjdGl2ZV9y ZW5kZXJfdGFyZ2V0IChHUlVCX1ZJREVPX1JFTkRFUl9UQVJHRVRfRElTUExBWSk7CisKKyAg LyogUmVuZGVyIGJhY2tncm91bmQgbGF5ZXIuICAqLworICBjb2xvciA9IHZpcnR1YWxfc2Ny ZWVuLmJnX2NvbG9yOworICBncnViX3ZpZGVvX2ZpbGxfcmVjdCAoY29sb3IsIHgsIHksIHdp ZHRoLCBoZWlnaHQpOworICAKKyAgLyogUmVuZGVyIHRleHQgbGF5ZXIuICAqLworICBncnVi X3ZpZGVvX2JsaXRfcmVuZGVyX3RhcmdldCAodGV4dF9sYXllciwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCAtIHZpcnR1YWxfc2Ny ZWVuLm9mZnNldF94LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSAtIHZp cnR1YWxfc2NyZWVuLm9mZnNldF95LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQpOwor fQorCitzdGF0aWMgdm9pZAorZGlydHlfcmVnaW9uX3Jlc2V0ICh2b2lkKQoreworICBkaXJ0 eV9yZWdpb24udG9wX2xlZnRfeCA9IC0xOworICBkaXJ0eV9yZWdpb24udG9wX2xlZnRfeSA9 IC0xOworICBkaXJ0eV9yZWdpb24uYm90dG9tX3JpZ2h0X3ggPSAtMTsKKyAgZGlydHlfcmVn aW9uLmJvdHRvbV9yaWdodF95ID0gLTE7Cit9CisKK3N0YXRpYyBpbnQKK2RpcnR5X3JlZ2lv bl9pc19lbXB0eSAodm9pZCkKK3sKKyAgaWYgKChkaXJ0eV9yZWdpb24udG9wX2xlZnRfeCA9 PSAtMSkKKyAgICAgIHx8IChkaXJ0eV9yZWdpb24udG9wX2xlZnRfeSA9PSAtMSkKKyAgICAg IHx8IChkaXJ0eV9yZWdpb24uYm90dG9tX3JpZ2h0X3ggPT0gLTEpCisgICAgICB8fCAoZGly dHlfcmVnaW9uLmJvdHRvbV9yaWdodF95ID09IC0xKSkKKyAgICB7CisgICAgICByZXR1cm4g MTsKKyAgICB9CisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorZGlydHlfcmVnaW9u X2FkZCAoaW50IHgsIGludCB5LCB1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBo ZWlnaHQpCit7CisgIGlmICgod2lkdGggPT0gMCkgfHwgKGhlaWdodCA9PSAwKSkKKyAgICBy ZXR1cm47CisgICAgCisgIGlmIChkaXJ0eV9yZWdpb25faXNfZW1wdHkgKCkpCisgICAgewor ICAgICAgZGlydHlfcmVnaW9uLnRvcF9sZWZ0X3ggPSB4OworICAgICAgZGlydHlfcmVnaW9u LnRvcF9sZWZ0X3kgPSB5OworICAgICAgZGlydHlfcmVnaW9uLmJvdHRvbV9yaWdodF94ID0g eCArIHdpZHRoIC0gMTsKKyAgICAgIGRpcnR5X3JlZ2lvbi5ib3R0b21fcmlnaHRfeSA9IHkg KyBoZWlnaHQgLSAxOworICAgIH0gCisgIGVsc2UKKyAgICB7CisgICAgICBpZiAoeCA8IGRp cnR5X3JlZ2lvbi50b3BfbGVmdF94KQorICAgICAgICB7CisgICAgICAgICAgZGlydHlfcmVn aW9uLnRvcF9sZWZ0X3ggPSB4OworICAgICAgICB9CisgICAgICBpZiAoeSA8IGRpcnR5X3Jl Z2lvbi50b3BfbGVmdF95KQorICAgICAgICB7CisgICAgICAgICAgZGlydHlfcmVnaW9uLnRv cF9sZWZ0X3kgPSB5OworICAgICAgICB9CisgICAgICBpZiAoKHggKyAoaW50KXdpZHRoIC0g MSkgPiBkaXJ0eV9yZWdpb24uYm90dG9tX3JpZ2h0X3gpCisgICAgICAgIHsKKyAgICAgICAg ICBkaXJ0eV9yZWdpb24uYm90dG9tX3JpZ2h0X3ggPSB4ICsgd2lkdGggLSAxOworICAgICAg ICB9CisgICAgICBpZiAoKHkgKyAoaW50KWhlaWdodCAtIDEpID4gZGlydHlfcmVnaW9uLmJv dHRvbV9yaWdodF95KQorICAgICAgICB7CisgICAgICAgICAgZGlydHlfcmVnaW9uLmJvdHRv bV9yaWdodF95ID0geSArIGhlaWdodCAtIDE7CisgICAgICAgIH0KKyAgICB9Cit9IAorCitz dGF0aWMgdm9pZAorZGlydHlfcmVnaW9uX2FkZF92aXJ0dWFsc2NyZWVuICh2b2lkKQorewor ICAvKiBNYXJrIHZpcnR1YWwgc2NyZWVuIGFzIGRpcnR5LiAgKi8KKyAgZGlydHlfcmVnaW9u X2FkZCAodmlydHVhbF9zY3JlZW4ub2Zmc2V0X3gsIHZpcnR1YWxfc2NyZWVuLm9mZnNldF95 LAorICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsX3NjcmVlbi53aWR0aCwgdmlydHVhbF9z Y3JlZW4uaGVpZ2h0KTsKK30KKworCitzdGF0aWMgdm9pZAorZGlydHlfcmVnaW9uX3JlZHJh dyAodm9pZCkKK3sKKyAgaW50IHg7CisgIGludCB5OworICBpbnQgd2lkdGg7CisgIGludCBo ZWlnaHQ7CisgIAorICBpZiAoZGlydHlfcmVnaW9uX2lzX2VtcHR5ICgpKQorICAgIHJldHVy bjsKKyAgCisgIHggPSBkaXJ0eV9yZWdpb24udG9wX2xlZnRfeDsKKyAgeSA9IGRpcnR5X3Jl Z2lvbi50b3BfbGVmdF95OworICAKKyAgd2lkdGggPSBkaXJ0eV9yZWdpb24uYm90dG9tX3Jp Z2h0X3ggLSB4ICsgMTsKKyAgaGVpZ2h0ID0gZGlydHlfcmVnaW9uLmJvdHRvbV9yaWdodF95 IC0geSArIDE7CisgIAorICByZWRyYXdfc2NyZWVuX3JlY3QgKHgsIHksIHdpZHRoLCBoZWln aHQpOworICAKKyAgZGlydHlfcmVnaW9uX3Jlc2V0ICgpOworfQorCitzdGF0aWMgdm9pZAor d3JpdGVfY2hhciAodm9pZCkKK3sKKyAgc3RydWN0IGdydWJfY29sb3JlZF9jaGFyICpwOwor ICBzdHJ1Y3QgZ3J1Yl9mb250X2dseXBoIGdseXBoOworICBncnViX3VpbnQzMl90IHgsIHk7 CisKKyAgZ3J1Yl92aWRlb19zZXRfYWN0aXZlX3JlbmRlcl90YXJnZXQgKHRleHRfbGF5ZXIp OworICAKKyAgcCA9ICh2aXJ0dWFsX3NjcmVlbi50ZXh0X2J1ZmZlcgorICAgICAgICsgdmly dHVhbF9zY3JlZW4uY3Vyc29yX3gKKyAgICAgICArICh2aXJ0dWFsX3NjcmVlbi5jdXJzb3Jf eSAqIHZpcnR1YWxfc2NyZWVuLmNvbHVtbnMpKTsKKworICBwIC09IHAtPmluZGV4OworCisg IGdydWJfdWludDMyX3QgY29sb3IsIGJnY29sb3I7CisgICAgCisgIGdydWJfZm9udF9nZXRf Z2x5cGggKHAtPmNvZGUsICZnbHlwaCk7CisKKyAgY29sb3IgPSBwLT5mZ19jb2xvcjsKKyAg Ymdjb2xvciA9IHAtPmJnX2NvbG9yOworCisgIHggPSB2aXJ0dWFsX3NjcmVlbi5jdXJzb3Jf eCAqIHZpcnR1YWxfc2NyZWVuLmNoYXJfd2lkdGg7CisgIHkgPSB2aXJ0dWFsX3NjcmVlbi5j dXJzb3JfeSAqIHZpcnR1YWxfc2NyZWVuLmNoYXJfaGVpZ2h0OworCisgIGdydWJfdmlkZW9f ZmlsbF9yZWN0IChiZ2NvbG9yLCB4LCB5LCBnbHlwaC53aWR0aCwgZ2x5cGguaGVpZ2h0KTsK KworICBncnViX3ZpZGVvX2JsaXRfZ2x5cGggKCZnbHlwaCwgY29sb3IsIHgsIHkpOworICAK KyAgZ3J1Yl92aWRlb19zZXRfYWN0aXZlX3JlbmRlcl90YXJnZXQgKEdSVUJfVklERU9fUkVO REVSX1RBUkdFVF9ESVNQTEFZKTsKKworICBkaXJ0eV9yZWdpb25fYWRkICh2aXJ0dWFsX3Nj cmVlbi5vZmZzZXRfeCArIHgsCisgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxfc2NyZWVu Lm9mZnNldF95ICsgeSwKKyAgICAgICAgICAgICAgICAgICAgZ2x5cGgud2lkdGgsCisgICAg ICAgICAgICAgICAgICAgIGdseXBoLmhlaWdodCk7Cit9CisKK3N0YXRpYyB2b2lkCit3cml0 ZV9jdXJzb3IgKHZvaWQpCit7CisgIGdydWJfdWludDMyX3QgeDsKKyAgZ3J1Yl91aW50MzJf dCB5OworICBncnViX3VpbnQzMl90IHdpZHRoOworICBncnViX3VpbnQzMl90IGhlaWdodDsK KyAgZ3J1Yl91aW50MzJfdCBjb2xvcjsKKworICBncnViX3ZpZGVvX3NldF9hY3RpdmVfcmVu ZGVyX3RhcmdldCAodGV4dF9sYXllcik7CisgIAorICB4ID0gdmlydHVhbF9zY3JlZW4uY3Vy c29yX3ggKiB2aXJ0dWFsX3NjcmVlbi5jaGFyX3dpZHRoOworICB5ID0gKCh2aXJ0dWFsX3Nj cmVlbi5jdXJzb3JfeSArIDEpICogdmlydHVhbF9zY3JlZW4uY2hhcl9oZWlnaHQpIC0gMzsg IAorICB3aWR0aCA9IHZpcnR1YWxfc2NyZWVuLmNoYXJfd2lkdGg7CisgIGhlaWdodCA9IDI7 CisKKyAgY29sb3IgPSB2aXJ0dWFsX3NjcmVlbi5jdXJzb3JfY29sb3I7CisgIGdydWJfdmlk ZW9fZmlsbF9yZWN0IChjb2xvciwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgIAorICBncnVi X3ZpZGVvX3NldF9hY3RpdmVfcmVuZGVyX3RhcmdldCAoR1JVQl9WSURFT19SRU5ERVJfVEFS R0VUX0RJU1BMQVkpOworCisgIGRpcnR5X3JlZ2lvbl9hZGQgKHZpcnR1YWxfc2NyZWVuLm9m ZnNldF94ICsgeCwKKyAgICAgICAgICAgICAgICAgICAgdmlydHVhbF9zY3JlZW4ub2Zmc2V0 X3kgKyB5LAorICAgICAgICAgICAgICAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAg ICAgaGVpZ2h0KTsKK30KKworc3RhdGljIHZvaWQKK3Njcm9sbF91cCAodm9pZCkKK3sKKyAg Z3J1Yl91aW50MzJfdCBpOworICBncnViX3VpbnQzMl90IGNvbG9yOworCisgIC8qIFNjcm9s bCB0ZXh0IGJ1ZmZlciB3aXRoIG9uZSBsaW5lIHRvIHVwLiAgKi8KKyAgZ3J1Yl9tZW1tb3Zl ICh2aXJ0dWFsX3NjcmVlbi50ZXh0X2J1ZmZlciwKKwkJdmlydHVhbF9zY3JlZW4udGV4dF9i dWZmZXIgKyB2aXJ0dWFsX3NjcmVlbi5jb2x1bW5zLAorICAgICAgICAgICAgICAgIHNpemVv ZiAoKnZpcnR1YWxfc2NyZWVuLnRleHRfYnVmZmVyKQorICAgICAgICAgICAgICAgICogdmly dHVhbF9zY3JlZW4uY29sdW1ucworICAgICAgICAgICAgICAgICogKHZpcnR1YWxfc2NyZWVu LnJvd3MgLSAxKSk7CisKKyAgLyogQ2xlYXIgbGFzdCBsaW5lIGluIHRleHQgYnVmZmVyLiAg Ki8KKyAgZm9yIChpID0gdmlydHVhbF9zY3JlZW4uY29sdW1ucyAqICh2aXJ0dWFsX3NjcmVl bi5yb3dzIC0gMSk7CisgICAgICAgaSA8IHZpcnR1YWxfc2NyZWVuLmNvbHVtbnMgKiB2aXJ0 dWFsX3NjcmVlbi5yb3dzOworICAgICAgIGkrKykKKyAgICB7CisgICAgICB2aXJ0dWFsX3Nj cmVlbi50ZXh0X2J1ZmZlcltpXS5jb2RlID0gJyAnOworICAgICAgdmlydHVhbF9zY3JlZW4u dGV4dF9idWZmZXJbaV0uZmdfY29sb3IgPSB2aXJ0dWFsX3NjcmVlbi5mZ19jb2xvcjsKKyAg ICAgIHZpcnR1YWxfc2NyZWVuLnRleHRfYnVmZmVyW2ldLmJnX2NvbG9yID0gdmlydHVhbF9z Y3JlZW4uYmdfY29sb3I7CisgICAgICB2aXJ0dWFsX3NjcmVlbi50ZXh0X2J1ZmZlcltpXS53 aWR0aCA9IDA7CisgICAgICB2aXJ0dWFsX3NjcmVlbi50ZXh0X2J1ZmZlcltpXS5pbmRleCA9 IDA7CisgICAgfQorICAgIAorICAvKiBTY3JvbGwgcGh5c2NhbCBzY3JlZW4uICAqLworICBn cnViX3ZpZGVvX3NldF9hY3RpdmVfcmVuZGVyX3RhcmdldCAodGV4dF9sYXllcik7CisKKyAg Y29sb3IgPSB2aXJ0dWFsX3NjcmVlbi5iZ19jb2xvcjsKKworICBncnViX3ZpZGVvX3Njcm9s bCAoY29sb3IsIDAsIC12aXJ0dWFsX3NjcmVlbi5jaGFyX2hlaWdodCk7CisKKyAgZ3J1Yl92 aWRlb19zZXRfYWN0aXZlX3JlbmRlcl90YXJnZXQgKEdSVUJfVklERU9fUkVOREVSX1RBUkdF VF9ESVNQTEFZKTsKKyAgCisgIGRpcnR5X3JlZ2lvbl9hZGRfdmlydHVhbHNjcmVlbiAoKTsK K30KKworc3RhdGljIHZvaWQKK2dydWJfdmlkZW90ZXJtX3B1dGNoYXIgKGdydWJfdWludDMy X3QgYykKK3sKKyAgaWYgKGMgPT0gJ1xhJykKKyAgICAvKiBGSVhNRSAqLworICAgIHJldHVy bjsKKworICBpZiAoYyA9PSAnXGInIHx8IGMgPT0gJ1xuJyB8fCBjID09ICdccicpCisgICAg eworICAgICAgLyogRXJhc2UgY3VycmVudCBjdXJzb3IsIGlmIGFueS4gICovCisgICAgICBp ZiAodmlydHVhbF9zY3JlZW4uY3Vyc29yX3N0YXRlKQorCXdyaXRlX2NoYXIgKCk7CisKKyAg ICAgIHN3aXRjaCAoYykKKwl7CisJY2FzZSAnXGInOgorCSAgaWYgKHZpcnR1YWxfc2NyZWVu LmN1cnNvcl94ID4gMCkKKwkgICAgdmlydHVhbF9zY3JlZW4uY3Vyc29yX3gtLTsKKwkgIGJy ZWFrOworCSAgCisJY2FzZSAnXG4nOgorCSAgaWYgKHZpcnR1YWxfc2NyZWVuLmN1cnNvcl95 ID49IHZpcnR1YWxfc2NyZWVuLnJvd3MgLSAxKQorCSAgICBzY3JvbGxfdXAgKCk7CisJICBl bHNlCisJICAgIHZpcnR1YWxfc2NyZWVuLmN1cnNvcl95Kys7CisJICBicmVhazsKKwkgIAor CWNhc2UgJ1xyJzoKKwkgIHZpcnR1YWxfc2NyZWVuLmN1cnNvcl94ID0gMDsKKwkgIGJyZWFr OworCX0KKworICAgICAgaWYgKHZpcnR1YWxfc2NyZWVuLmN1cnNvcl9zdGF0ZSkKKwl3cml0 ZV9jdXJzb3IgKCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgc3RydWN0IGdydWJf Zm9udF9nbHlwaCBnbHlwaDsKKyAgICAgIHN0cnVjdCBncnViX2NvbG9yZWRfY2hhciAqcDsK KyAgICAgIAorICAgICAgZ3J1Yl9mb250X2dldF9nbHlwaCAoYywgJmdseXBoKTsKKworICAg ICAgaWYgKHZpcnR1YWxfc2NyZWVuLmN1cnNvcl94ICsgZ2x5cGguY2hhcl93aWR0aCA+IHZp cnR1YWxfc2NyZWVuLmNvbHVtbnMpCisJZ3J1Yl9wdXRjaGFyICgnXG4nKTsKKworICAgICAg cCA9ICh2aXJ0dWFsX3NjcmVlbi50ZXh0X2J1ZmZlciArCisJICAgdmlydHVhbF9zY3JlZW4u Y3Vyc29yX3ggKworCSAgIHZpcnR1YWxfc2NyZWVuLmN1cnNvcl95ICogdmlydHVhbF9zY3Jl ZW4uY29sdW1ucyk7CisgICAgICBwLT5jb2RlID0gYzsKKyAgICAgIHAtPmZnX2NvbG9yID0g dmlydHVhbF9zY3JlZW4uZmdfY29sb3I7CisgICAgICBwLT5iZ19jb2xvciA9IHZpcnR1YWxf c2NyZWVuLmJnX2NvbG9yOworICAgICAgcC0+d2lkdGggPSBnbHlwaC5jaGFyX3dpZHRoIC0g MTsKKyAgICAgIHAtPmluZGV4ID0gMDsKKworICAgICAgaWYgKGdseXBoLmNoYXJfd2lkdGgg PiAxKQorCXsKKwkgIHVuc2lnbmVkIGk7CisKKwkgIGZvciAoaSA9IDE7IGkgPCBnbHlwaC5j aGFyX3dpZHRoOyBpKyspCisJICAgIHsKKwkgICAgICBwW2ldLmNvZGUgPSAnICc7CisJICAg ICAgcFtpXS53aWR0aCA9IGdseXBoLmNoYXJfd2lkdGggLSAxOworCSAgICAgIHBbaV0uaW5k ZXggPSBpOworCSAgICB9CisJfQorCSAgCisgICAgICB3cml0ZV9jaGFyICgpOworICAKKyAg ICAgIHZpcnR1YWxfc2NyZWVuLmN1cnNvcl94ICs9IGdseXBoLmNoYXJfd2lkdGg7CisgICAg ICBpZiAodmlydHVhbF9zY3JlZW4uY3Vyc29yX3ggPj0gdmlydHVhbF9zY3JlZW4uY29sdW1u cykKKwl7CisJICB2aXJ0dWFsX3NjcmVlbi5jdXJzb3JfeCA9IDA7CisJICAKKwkgIGlmICh2 aXJ0dWFsX3NjcmVlbi5jdXJzb3JfeSA+PSB2aXJ0dWFsX3NjcmVlbi5yb3dzIC0gMSkKKwkg ICAgc2Nyb2xsX3VwICgpOworCSAgZWxzZQorCSAgICB2aXJ0dWFsX3NjcmVlbi5jdXJzb3Jf eSsrOworCX0KKworICAgICAgaWYgKHZpcnR1YWxfc2NyZWVuLmN1cnNvcl9zdGF0ZSkKKwl3 cml0ZV9jdXJzb3IgKCk7CisgICAgfQorfQorCitzdGF0aWMgZ3J1Yl9zc2l6ZV90CitncnVi X3ZpZGVvdGVybV9nZXRjaGFyd2lkdGggKGdydWJfdWludDMyX3QgYykKK3sKKyAgc3RydWN0 IGdydWJfZm9udF9nbHlwaCBnbHlwaDsKKyAgCisgIGlmICghIGdydWJfZm9udF9nZXRfZ2x5 cGggKGMsICZnbHlwaCkpCisgICAgcmV0dXJuIDA7CisKKyAgcmV0dXJuIGdseXBoLmNoYXJf d2lkdGg7Cit9CisKK3N0YXRpYyBncnViX3VpbnQxNl90CitncnViX3ZpcnR1YWxfc2NyZWVu X2dldHdoICh2b2lkKQoreworICByZXR1cm4gKHZpcnR1YWxfc2NyZWVuLmNvbHVtbnMgPDwg OCkgfCB2aXJ0dWFsX3NjcmVlbi5yb3dzOworfQorCitzdGF0aWMgZ3J1Yl91aW50MTZfdAor Z3J1Yl92aXJ0dWFsX3NjcmVlbl9nZXR4eSAodm9pZCkKK3sKKyAgcmV0dXJuICgodmlydHVh bF9zY3JlZW4uY3Vyc29yX3ggPDwgOCkgfCB2aXJ0dWFsX3NjcmVlbi5jdXJzb3JfeSk7Cit9 CisKK3N0YXRpYyB2b2lkCitncnViX3ZpZGVvdGVybV9nb3RveHkgKGdydWJfdWludDhfdCB4 LCBncnViX3VpbnQ4X3QgeSkKK3sKKyAgaWYgKHggPj0gdmlydHVhbF9zY3JlZW4uY29sdW1u cyB8fCB5ID49IHZpcnR1YWxfc2NyZWVuLnJvd3MpCisgICAgeworICAgICAgZ3J1Yl9lcnJv ciAoR1JVQl9FUlJfT1VUX09GX1JBTkdFLCAiaW52YWxpZCBwb2ludCAoJXUsJXUpIiwKKwkJ ICAodW5zaWduZWQpIHgsICh1bnNpZ25lZCkgeSk7CisgICAgICByZXR1cm47CisgICAgfQor CisgIGlmICh2aXJ0dWFsX3NjcmVlbi5jdXJzb3Jfc3RhdGUpCisgICAgd3JpdGVfY2hhciAo KTsKKworICB2aXJ0dWFsX3NjcmVlbi5jdXJzb3JfeCA9IHg7CisgIHZpcnR1YWxfc2NyZWVu LmN1cnNvcl95ID0geTsKKworICBpZiAodmlydHVhbF9zY3JlZW4uY3Vyc29yX3N0YXRlKQor ICAgIHdyaXRlX2N1cnNvciAoKTsKK30KKworc3RhdGljIHZvaWQKK2dydWJfdmlydHVhbF9z Y3JlZW5fY2xzICh2b2lkKQoreworICBncnViX3VpbnQzMl90IGk7CisKKyAgZm9yIChpID0g MDsgaSA8IHZpcnR1YWxfc2NyZWVuLmNvbHVtbnMgKiB2aXJ0dWFsX3NjcmVlbi5yb3dzOyBp KyspCisgICAgeworICAgICAgdmlydHVhbF9zY3JlZW4udGV4dF9idWZmZXJbaV0uY29kZSA9 ICcgJzsKKyAgICAgIHZpcnR1YWxfc2NyZWVuLnRleHRfYnVmZmVyW2ldLmZnX2NvbG9yID0g dmlydHVhbF9zY3JlZW4uZmdfY29sb3I7CisgICAgICB2aXJ0dWFsX3NjcmVlbi50ZXh0X2J1 ZmZlcltpXS5iZ19jb2xvciA9IHZpcnR1YWxfc2NyZWVuLmJnX2NvbG9yOworICAgICAgdmly dHVhbF9zY3JlZW4udGV4dF9idWZmZXJbaV0ud2lkdGggPSAwOworICAgICAgdmlydHVhbF9z Y3JlZW4udGV4dF9idWZmZXJbaV0uaW5kZXggPSAwOworICAgIH0KKworICB2aXJ0dWFsX3Nj cmVlbi5jdXJzb3JfeCA9IHZpcnR1YWxfc2NyZWVuLmN1cnNvcl95ID0gMDsKK30KKworc3Rh dGljIHZvaWQKK2dydWJfdmlkZW90ZXJtX2NscyAodm9pZCkKK3sKKyAgZ3J1Yl91aW50MzJf dCBjb2xvcjsKKworICBncnViX3ZpZGVvX3NldF9hY3RpdmVfcmVuZGVyX3RhcmdldCAodGV4 dF9sYXllcik7CisgIGdydWJfdmlydHVhbF9zY3JlZW5fY2xzICgpOworCisgIGNvbG9yID0g dmlydHVhbF9zY3JlZW4uYmdfY29sb3Jfc2V0dGluZzsKKyAgZ3J1Yl92aWRlb19maWxsX3Jl Y3QgKGNvbG9yLCAwLCAwLCBtb2RlX2luZm8ud2lkdGgsIG1vZGVfaW5mby5oZWlnaHQpOwor ICBncnViX3ZpZGVvX3NldF9hY3RpdmVfcmVuZGVyX3RhcmdldCAoR1JVQl9WSURFT19SRU5E RVJfVEFSR0VUX0RJU1BMQVkpOworICAKKyAgLyogUmVkcmF3IG9ubHkgdmlydHVhbCBzY3Jl ZW4uICAqLworICBkaXJ0eV9yZWdpb25fYWRkX3ZpcnR1YWxzY3JlZW4gKCk7Cit9CisKK3N0 YXRpYyB2b2lkCitncnViX3ZpcnR1YWxfc2NyZWVuX3NldGNvbG9yc3RhdGUgKGdydWJfdGVy bV9jb2xvcl9zdGF0ZSBzdGF0ZSkKK3sKKyAgc3dpdGNoIChzdGF0ZSkKKyAgICB7CisgICAg Y2FzZSBHUlVCX1RFUk1fQ09MT1JfU1RBTkRBUkQ6CisgICAgY2FzZSBHUlVCX1RFUk1fQ09M T1JfTk9STUFMOgorICAgICAgdmlydHVhbF9zY3JlZW4uZmdfY29sb3IgPSB2aXJ0dWFsX3Nj cmVlbi5mZ19jb2xvcl9zZXR0aW5nOworICAgICAgdmlydHVhbF9zY3JlZW4uYmdfY29sb3Ig PSB2aXJ0dWFsX3NjcmVlbi5iZ19jb2xvcl9zZXR0aW5nOworICAgICAgYnJlYWs7CisgICAg Y2FzZSBHUlVCX1RFUk1fQ09MT1JfSElHSExJR0hUOgorICAgICAgdmlydHVhbF9zY3JlZW4u ZmdfY29sb3IgPSB2aXJ0dWFsX3NjcmVlbi5iZ19jb2xvcl9zZXR0aW5nOworICAgICAgdmly dHVhbF9zY3JlZW4uYmdfY29sb3IgPSB2aXJ0dWFsX3NjcmVlbi5mZ19jb2xvcl9zZXR0aW5n OworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAgIH0KK30K Kworc3RhdGljIHZvaWQKK2dydWJfdmlydHVhbF9zY3JlZW5fc2V0Y29sb3IgKGdydWJfdWlu dDhfdCBub3JtYWxfY29sb3IgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorCQkJICAgICAg Z3J1Yl91aW50OF90IGhpZ2hsaWdodF9jb2xvciBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkp Cit7CisgIHZpcnR1YWxfc2NyZWVuLmZnX2NvbG9yX3NldHRpbmcgPSBncnViX3ZpZGVvX21h cF9jb2xvciAobm9ybWFsX2NvbG9yKTsKKyAgdmlydHVhbF9zY3JlZW4uYmdfY29sb3Jfc2V0 dGluZyA9IGdydWJfdmlkZW9fbWFwX2NvbG9yIChoaWdobGlnaHRfY29sb3IpOworfQorCitz dGF0aWMgdm9pZAorZ3J1Yl92aWRlb3Rlcm1fc2V0Y3Vyc29yIChpbnQgb24pCit7CisgIGlm ICh2aXJ0dWFsX3NjcmVlbi5jdXJzb3Jfc3RhdGUgIT0gb24pCisgICAgeworICAgICAgaWYg KHZpcnR1YWxfc2NyZWVuLmN1cnNvcl9zdGF0ZSkKKwl3cml0ZV9jaGFyICgpOworICAgICAg ZWxzZQorCXdyaXRlX2N1cnNvciAoKTsKKworICAgICAgdmlydHVhbF9zY3JlZW4uY3Vyc29y X3N0YXRlID0gb247CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorZ3J1Yl92aWRlb3Rlcm1f cmVmcmVzaCAodm9pZCkKK3sKKyAgLyogUmVkcmF3IG9ubHkgY2hhbmdlZCByZWdpb25zLiAg Ki8KKyAgZGlydHlfcmVnaW9uX3JlZHJhdyAoKTsKK30KKworc3RhdGljIHN0cnVjdCBncnVi X3Rlcm0gZ3J1Yl92aWRlb190ZXJtID0KKyAgeworICAgIC5uYW1lID0gInZpZGVvdGVybSIs CisgICAgLmluaXQgPSBncnViX3ZpZGVvdGVybV9pbml0LAorICAgIC5maW5pID0gZ3J1Yl92 aWRlb3Rlcm1fZmluaSwKKyAgICAucHV0Y2hhciA9IGdydWJfdmlkZW90ZXJtX3B1dGNoYXIs CisgICAgLmdldGNoYXJ3aWR0aCA9IGdydWJfdmlkZW90ZXJtX2dldGNoYXJ3aWR0aCwKKyAg ICAuY2hlY2trZXkgPSBncnViX2NvbnNvbGVfY2hlY2trZXksCisgICAgLmdldGtleSA9IGdy dWJfY29uc29sZV9nZXRrZXksCisgICAgLmdldHdoID0gZ3J1Yl92aXJ0dWFsX3NjcmVlbl9n ZXR3aCwKKyAgICAuZ2V0eHkgPSBncnViX3ZpcnR1YWxfc2NyZWVuX2dldHh5LAorICAgIC5n b3RveHkgPSBncnViX3ZpZGVvdGVybV9nb3RveHksCisgICAgLmNscyA9IGdydWJfdmlkZW90 ZXJtX2NscywKKyAgICAuc2V0Y29sb3JzdGF0ZSA9IGdydWJfdmlydHVhbF9zY3JlZW5fc2V0 Y29sb3JzdGF0ZSwKKyAgICAuc2V0Y29sb3IgPSBncnViX3ZpcnR1YWxfc2NyZWVuX3NldGNv bG9yLAorICAgIC5zZXRjdXJzb3IgPSBncnViX3ZpZGVvdGVybV9zZXRjdXJzb3IsCisgICAg LnJlZnJlc2ggPSBncnViX3ZpZGVvdGVybV9yZWZyZXNoLCAgICAKKyAgICAuZmxhZ3MgPSAw LAorICAgIC5uZXh0ID0gMAorICB9OworCitHUlVCX01PRF9JTklUKHRlcm1fdmlkZW90ZXJt KQoreworICBteV9tb2QgPSBtb2Q7CisgIGdydWJfdGVybV9yZWdpc3RlciAoJmdydWJfdmlk ZW9fdGVybSk7Cit9CisKK0dSVUJfTU9EX0ZJTkkodGVybV92aWRlb3Rlcm0pCit7CisgIGdy dWJfdGVybV91bnJlZ2lzdGVyICgmZ3J1Yl92aWRlb190ZXJtKTsKK30KRmlsZXMgZ3J1YjIv dW5pZm9udC5wZmYgYW5kIGdydWIyLm5ldy91bmlmb250LnBmZiBkaWZmZXIKZGlmZiAtcnVO IC14ICcqQ1ZTKicgZ3J1YjIvdmlkZW8vaTM4Ni9wYy92YmUuYyBncnViMi5uZXcvdmlkZW8v aTM4Ni9wYy92YmUuYwotLS0gZ3J1YjIvdmlkZW8vaTM4Ni9wYy92YmUuYwkyMDA1LTA5LTE5 IDAwOjA0OjQxLjAwMDAwMDAwMCArMDMwMAorKysgZ3J1YjIubmV3L3ZpZGVvL2kzODYvcGMv dmJlLmMJMjAwNi0wMy0wMiAyMDozNTo0My43MTkwMTQ1NjggKzAyMDAKQEAgLTEsNiArMSw2 IEBACiAvKgogICogIEdSVUIgIC0tICBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIKLSAqICBD b3B5cmlnaHQgKEMpIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICog IENvcHlyaWdodCAoQykgMjAwNS0yMDA2ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMTcs NiArMTcsMTEgQEAKICAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJy aWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCisvKiBHZW5lcmFsIFRPRE8nczoKKyAgIC0g SW1wbGVtZW50IG1vZGUgb3B0aW1pemVkIG9wZXJhdGlvbnMgYW5kIGF1dG9tYXRpY2FsbHkg c2VsZWN0IGJlc3QKKworKi8KKwogI2luY2x1ZGUgPGdydWIvZXJyLmg+CiAjaW5jbHVkZSA8 Z3J1Yi9tYWNoaW5lL21lbW9yeS5oPgogI2luY2x1ZGUgPGdydWIvbWFjaGluZS92Z2EuaD4K QEAgLTMxLDYgKzM2LDcgQEAKICNpbmNsdWRlIDxncnViL2FyZy5oPgogI2luY2x1ZGUgPGdy dWIvbW0uaD4KICNpbmNsdWRlIDxncnViL2Vudi5oPgorI2luY2x1ZGUgPGdydWIvdmlkZW8u aD4KIAogLyogU3BlY2lmeSAic3RhbmRhcmQiIFZHQSBwYWxldHRlLCBzb21lIHZpZGVvIGNh cmRzIG1heQogICAgbmVlZCB0aGlzIGFuZCB0aGlzIHdpbGwgYWxzbyBiZSB1c2VkIHdoZW4g dXNpbmcgUkdCIG1vZGVzLiAgKi8KQEAgLTU3LDE1ICs2Myw1MSBAQAogICB9OwogCiBzdGF0 aWMgaW50IHZiZV9kZXRlY3RlZCA9IC0xOwotc3RhdGljIGludCBpbmRleF9jb2xvcl9tb2Rl ID0gMDsKIAogc3RhdGljIHN0cnVjdCBncnViX3ZiZV9pbmZvX2Jsb2NrIGNvbnRyb2xsZXJf aW5mbzsKIHN0YXRpYyBzdHJ1Y3QgZ3J1Yl92YmVfbW9kZV9pbmZvX2Jsb2NrIGFjdGl2ZV9t b2RlX2luZm87CiAKLXN0YXRpYyBncnViX3VpbnQzMl90IGFjdGl2ZV9tb2RlID0gMDsKK3N0 YXRpYyBzdHJ1Y3QgeworICBzdHJ1Y3QgZ3J1Yl92aWRlb19yZW5kZXJfdGFyZ2V0IHJlbmRl cl90YXJnZXQ7CisKKyAgdW5zaWduZWQgaW50IGJ5dGVzX3Blcl9zY2FuX2xpbmU7CisgIHVu c2lnbmVkIGludCBieXRlc19wZXJfcGl4ZWw7CisgIGdydWJfdWludDMyX3QgYWN0aXZlX21v ZGU7CisgIGdydWJfdWludDhfdCAqcHRyOworICBpbnQgaW5kZXhfY29sb3JfbW9kZTsKKyAg c3RydWN0IGdydWJfdmlkZW9fcGFsZXR0ZV9kYXRhIHBhbGV0dGVbMjU2XTsKK30gZnJhbWVi dWZmZXI7ICAKKworc3RhdGljIHN0cnVjdCBncnViX3ZpZGVvX3JlbmRlcl90YXJnZXQgKnJl bmRlcl90YXJnZXQ7CisKK3N0YXRpYyBncnViX2RsX3QgbXlfbW9kID0gMDsKKworc3RhdGlj IGdydWJfY29sb3JfdAorZ3J1Yl92aWRlb192YmVfbWFwX3JnYiAoZ3J1Yl91aW50OF90IHJl ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdydWJfdWludDhfdCBncmVlbiwKKyAgICAg ICAgICAgICAgICAgICAgICAgIGdydWJfdWludDhfdCBibHVlKTsKIAotc3RhdGljIGdydWJf dWludDhfdCAqZnJhbWVidWZmZXIgPSAwOwotc3RhdGljIGdydWJfdWludDMyX3QgYnl0ZXNf cGVyX3NjYW5fbGluZSA9IDA7CitzdGF0aWMgZ3J1Yl9jb2xvcl90CitncnViX3ZpZGVvX3Zi ZV9tYXBfcmdiYSAoZ3J1Yl91aW50OF90IHJlZCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICBncnViX3VpbnQ4X3QgZ3JlZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgZ3J1Yl91 aW50OF90IGJsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgZ3J1Yl91aW50OF90IGFs cGhhKTsKKworc3RhdGljIHZvaWQKK2dydWJfdmlkZW9fdmJlX3VubWFwX2NvbG9yIChzdHJ1 Y3QgZ3J1Yl92aWRlb19yZW5kZXJfdGFyZ2V0ICogc291cmNlLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGdydWJfY29sb3JfdCBjb2xvciwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBncnViX3VpbnQ4X3QgKiByZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZ3J1Yl91aW50OF90ICogZ3JlZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg Z3J1Yl91aW50OF90ICogYmx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnVi X3VpbnQ4X3QgKiBhbHBoYSk7CisKKworc3RhdGljIHZvaWQgKgorcmVhbDJwbSAoZ3J1Yl92 YmVfZmFycHRyX3QgcHRyKQoreworICByZXR1cm4gKHZvaWQgKikgKCgoKHVuc2lnbmVkIGxv bmcpIHB0ciAmIDB4RkZGRjAwMDApID4+IDEyVUwpCisgICAgICAgICAgICAgICAgICAgKyAo KHVuc2lnbmVkIGxvbmcpIHB0ciAmIDB4MDAwMEZGRkYpKTsKK30KIAogZ3J1Yl9lcnJfdAog Z3J1Yl92YmVfcHJvYmUgKHN0cnVjdCBncnViX3ZiZV9pbmZvX2Jsb2NrICppbmZvX2Jsb2Nr KQpAQCAtOTksNyArMTQxLDcgQEAKICAgICAgIHZiZV9pYi0+c2lnbmF0dXJlWzNdID0gJzIn OwogICAgICAgCiAgICAgICAvKiBUcnkgdG8gZ2V0IGNvbnRyb2xsZXIgaW5mbyBibG9jay4g ICovCi0gICAgICBzdGF0dXMgPSBncnViX3ZiZV9nZXRfY29udHJvbGxlcl9pbmZvICh2YmVf aWIpOworICAgICAgc3RhdHVzID0gZ3J1Yl92YmVfYmlvc19nZXRfY29udHJvbGxlcl9pbmZv ICh2YmVfaWIpOwogICAgICAgaWYgKHN0YXR1cyA9PSAweDAwNEYpCiAJewogCSAgLyogQ29w eSBpdCBmb3IgbGF0ZXIgdXNhZ2UuICAqLwpAQCAtMTI4LDExICsxNzAsMTMgQEAKICAgZ3J1 Yl91aW50MzJfdCBvbGRfbW9kZTsKICAgCiAgIC8qIE1ha2Ugc3VyZSB0aGF0IFZCRSBpcyBz dXBwb3J0ZWQuICAqLwotICBpZiAoZ3J1Yl92YmVfcHJvYmUgKDApICE9IEdSVUJfRVJSX05P TkUpCisgIGdydWJfdmJlX3Byb2JlICgwKTsKKyAgaWYgKGdydWJfZXJybm8gIT0gR1JVQl9F UlJfTk9ORSkKICAgICByZXR1cm4gZ3J1Yl9lcnJubzsKIAogICAvKiBUcnkgdG8gZ2V0IG1v ZGUgaW5mby4gICovCi0gIGlmIChncnViX3ZiZV9nZXRfdmlkZW9fbW9kZV9pbmZvIChtb2Rl LCAmYWN0aXZlX21vZGVfaW5mbykgIT0gR1JVQl9FUlJfTk9ORSkKKyAgZ3J1Yl92YmVfZ2V0 X3ZpZGVvX21vZGVfaW5mbyAobW9kZSwgJmFjdGl2ZV9tb2RlX2luZm8pOworICBpZiAoZ3J1 Yl9lcnJubyAhPSBHUlVCX0VSUl9OT05FKQogICAgIHJldHVybiBncnViX2Vycm5vOwogCiAg IC8qIEZvciBhbGwgVkVTQSBCSU9TIG1vZGVzLCBmb3JjZSBsaW5lYXIgZnJhbWUgYnVmZmVy LiAgKi8KQEAgLTE0NCwxMiArMTg4LDEyIEBACiAgICAgICAvKiBEZXRlcm1pbmUgZnJhbWUg YnVmZmVyIHBpeGVsIGZvcm1hdC4gICovCiAgICAgICBzd2l0Y2ggKGFjdGl2ZV9tb2RlX2lu Zm8ubWVtb3J5X21vZGVsKQogCXsKLQljYXNlIDB4MDQ6Ci0JICBpbmRleF9jb2xvcl9tb2Rl ID0gMTsKKwljYXNlIEdSVUJfVkJFX01FTU9SWV9NT0RFTF9QQUNLRURfUElYRUw6CisJICBm cmFtZWJ1ZmZlci5pbmRleF9jb2xvcl9tb2RlID0gMTsKIAkgIGJyZWFrOwogCSAgCi0JY2Fz ZSAweDA2OgotCSAgaW5kZXhfY29sb3JfbW9kZSA9IDA7CisJY2FzZSBHUlVCX1ZCRV9NRU1P UllfTU9ERUxfRElSRUNUX0NPTE9SOgorCSAgZnJhbWVidWZmZXIuaW5kZXhfY29sb3JfbW9k ZSA9IDA7CiAJICBicmVhazsKIAkgIAogCWRlZmF1bHQ6CkBAIC0xNjAsNTEgKzIwNCw2OCBA QAogICAgIH0KIAogICAvKiBHZXQgY3VycmVudCBtb2RlLiAgKi8KLSAgaWYgKGdydWJfdmJl X2dldF92aWRlb19tb2RlICgmb2xkX21vZGUpICE9IEdSVUJfRVJSX05PTkUpCisgIGdydWJf dmJlX2dldF92aWRlb19tb2RlICgmb2xkX21vZGUpOworICBpZiAoZ3J1Yl9lcnJubyAhPSBH UlVCX0VSUl9OT05FKQogICAgIHJldHVybiBncnViX2Vycm5vOwogICAKICAgLyogVHJ5IHRv IHNldCB2aWRlbyBtb2RlLiAgKi8KLSAgc3RhdHVzID0gZ3J1Yl92YmVfc2V0X21vZGUgKG1v ZGUsIDApOwotICBpZiAoc3RhdHVzICE9IDB4MDA0RikKKyAgc3RhdHVzID0gZ3J1Yl92YmVf Ymlvc19zZXRfbW9kZSAobW9kZSwgMCk7CisgIGlmIChzdGF0dXMgIT0gR1JVQl9WQkVfU1RB VFVTX09LKQogICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfREVWSUNFLCAi Y2Fubm90IHNldCBWQkUgbW9kZSAleCIsIG1vZGUpOwogCiAgIC8qIFNhdmUgaW5mb3JtYXRp b24gZm9yIGxhdGVyIHVzYWdlLiAgKi8KLSAgYWN0aXZlX21vZGUgPSBtb2RlOworICBmcmFt ZWJ1ZmZlci5hY3RpdmVfbW9kZSA9IG1vZGU7CiAKICAgaWYgKG1vZGUgPCAweDEwMCkKICAg ICB7CiAgICAgICAvKiBJZiB0aGlzIGlzIG5vdCBhIFZFU0EgbW9kZSwgZ3Vlc3MgYWRkcmVz cy4gICovCi0gICAgICBmcmFtZWJ1ZmZlciA9IChncnViX3VpbnQ4X3QgKikgMHhBMDAwMDsK LSAgICAgIGluZGV4X2NvbG9yX21vZGUgPSAxOworICAgICAgZnJhbWVidWZmZXIucHRyID0g KGdydWJfdWludDhfdCAqKSAweEEwMDAwOworICAgICAgZnJhbWVidWZmZXIuaW5kZXhfY29s b3JfbW9kZSA9IDE7CiAgICAgfQogICBlbHNlCiAgICAgewotICAgICAgZnJhbWVidWZmZXIg PSAoZ3J1Yl91aW50OF90ICopIGFjdGl2ZV9tb2RlX2luZm8ucGh5c19iYXNlX2FkZHI7Cisg ICAgICBmcmFtZWJ1ZmZlci5wdHIgPSAoZ3J1Yl91aW50OF90ICopIGFjdGl2ZV9tb2RlX2lu Zm8ucGh5c19iYXNlX2FkZHI7CiAKICAgICAgIGlmIChjb250cm9sbGVyX2luZm8udmVyc2lv biA+PSAweDMwMCkKLQlieXRlc19wZXJfc2Nhbl9saW5lID0gYWN0aXZlX21vZGVfaW5mby5s aW5fYnl0ZXNfcGVyX3NjYW5fbGluZTsKKwlmcmFtZWJ1ZmZlci5ieXRlc19wZXJfc2Nhbl9s aW5lID0gYWN0aXZlX21vZGVfaW5mby5saW5fYnl0ZXNfcGVyX3NjYW5fbGluZTsKICAgICAg IGVsc2UKLQlieXRlc19wZXJfc2Nhbl9saW5lID0gYWN0aXZlX21vZGVfaW5mby5ieXRlc19w ZXJfc2Nhbl9saW5lOworCWZyYW1lYnVmZmVyLmJ5dGVzX3Blcl9zY2FuX2xpbmUgPSBhY3Rp dmVfbW9kZV9pbmZvLmJ5dGVzX3Blcl9zY2FuX2xpbmU7CisgICAgfQorICAgIAorICAvKiBD YWxjdWxhdGUgYnl0ZXNfcGVyX3BpeGVsIHZhbHVlLiAgKi8KKyAgc3dpdGNoKGFjdGl2ZV9t b2RlX2luZm8uYml0c19wZXJfcGl4ZWwpCisgICAgeworICAgIGNhc2UgMzI6IGZyYW1lYnVm ZmVyLmJ5dGVzX3Blcl9waXhlbCA9IDQ7IGJyZWFrOworICAgIGNhc2UgMjQ6IGZyYW1lYnVm ZmVyLmJ5dGVzX3Blcl9waXhlbCA9IDM7IGJyZWFrOworICAgIGNhc2UgMTY6IGZyYW1lYnVm ZmVyLmJ5dGVzX3Blcl9waXhlbCA9IDI7IGJyZWFrOworICAgIGNhc2UgMTU6IGZyYW1lYnVm ZmVyLmJ5dGVzX3Blcl9waXhlbCA9IDI7IGJyZWFrOworICAgIGNhc2UgODogZnJhbWVidWZm ZXIuYnl0ZXNfcGVyX3BpeGVsID0gMTsgYnJlYWs7CisgICAgZGVmYXVsdDogICAgCisgICAg ICBncnViX3ZiZV9iaW9zX3NldF9tb2RlIChvbGRfbW9kZSwgMCk7CisgICAgICByZXR1cm4g Z3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0RFVklDRSwgCisgICAgICAgICAgICAgICAgICAg ICAgICAgImNhbm5vdCBzZXQgVkJFIG1vZGUgJXgiLCAKKyAgICAgICAgICAgICAgICAgICAg ICAgICBtb2RlKTsKKyAgICAgIGJyZWFrOwogICAgIH0KIAogICAvKiBJZiB2aWRlbyBtb2Rl IGlzIGluIGluZGV4ZWQgY29sb3IsIHNldHVwIGRlZmF1bHQgVkdBIHBhbGV0dGUuICAqLwot ICBpZiAoaW5kZXhfY29sb3JfbW9kZSkKKyAgaWYgKGZyYW1lYnVmZmVyLmluZGV4X2NvbG9y X21vZGUpCiAgICAgewogICAgICAgc3RydWN0IGdydWJfdmJlX3BhbGV0dGVfZGF0YSAqcGFs ZXR0ZQogCT0gKHN0cnVjdCBncnViX3ZiZV9wYWxldHRlX2RhdGEgKikgR1JVQl9NRU1PUllf TUFDSElORV9TQ1JBVENIX0FERFI7CiAKICAgICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBC SU9TIGNhbiByZWFjaCB0aGUgcGFsZXR0ZS4gICovCiAgICAgICBncnViX21lbWNweSAocGFs ZXR0ZSwgdmdhX2NvbG9ycywgc2l6ZW9mICh2Z2FfY29sb3JzKSk7Ci0gICAgICBzdGF0dXMg PSBncnViX3ZiZV9zZXRfcGFsZXR0ZV9kYXRhIChzaXplb2YgKHZnYV9jb2xvcnMpIAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBzaXplb2YgKHN0cnVj dCBncnViX3ZiZV9wYWxldHRlX2RhdGEpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDAsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGFsZXR0ZSk7CisgICAgICBzdGF0dXMgPSBncnViX3ZiZV9iaW9zX3NldF9w YWxldHRlX2RhdGEgKHNpemVvZiAodmdhX2NvbG9ycykgCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gc2l6ZW9mIChzdHJ1Y3QgZ3J1Yl92YmVf cGFsZXR0ZV9kYXRhKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDAsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwYWxldHRlKTsKIAogICAgICAgLyogRm9yIG5vdywgaWdub3JlIHRoZSBzdGF0 dXMuIE5vdCBzdXJlIGlmIHRoaXMgaXMgZmF0YWwuICAqLwogI2lmIDAKLSAgICAgIGlmIChz dGF0dXMgIT0gMHgwMDRGKQorICAgICAgaWYgKHN0YXR1cyAhPSBHUlVCX1ZCRV9TVEFUVVNf T0spCiAJewotCSAgZ3J1Yl92YmVfc2V0X21vZGUgKG9sZF9tb2RlLCAwKTsKKwkgIGdydWJf dmJlX2Jpb3Nfc2V0X21vZGUgKG9sZF9tb2RlLCAwKTsKIAkgIHJldHVybiBncnViX2Vycm9y IChHUlVCX0VSUl9CQURfREVWSUNFLAogCQkJICAgICAiY2Fubm90IHNldCB0aGUgZGVmYXVs dCBWR0EgcGFsZXR0ZSIpOwogCX0KQEAgLTIyNCwxMiArMjg1LDEzIEBACiAgIGdydWJfdmJl X3N0YXR1c190IHN0YXR1czsKIAogICAvKiBNYWtlIHN1cmUgdGhhdCBWQkUgaXMgc3VwcG9y dGVkLiAgKi8KLSAgaWYgKGdydWJfdmJlX3Byb2JlICgwKSAhPSBHUlVCX0VSUl9OT05FKQor ICBncnViX3ZiZV9wcm9iZSAoMCk7CisgIGlmIChncnViX2Vycm5vICE9IEdSVUJfRVJSX05P TkUpCiAgICAgcmV0dXJuIGdydWJfZXJybm87CiAKICAgLyogVHJ5IHRvIHF1ZXJ5IGN1cnJl bnQgbW9kZSBmcm9tIFZFU0EgQklPUy4gICovCi0gIHN0YXR1cyA9IGdydWJfdmJlX2dldF9t b2RlIChtb2RlKTsKLSAgaWYgKHN0YXR1cyAhPSAweDAwNEYpCisgIHN0YXR1cyA9IGdydWJf dmJlX2Jpb3NfZ2V0X21vZGUgKG1vZGUpOworICBpZiAoc3RhdHVzICE9IEdSVUJfVkJFX1NU QVRVU19PSykKICAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0RFVklDRSwg ImNhbm5vdCBnZXQgY3VycmVudCBWQkUgbW9kZSIpOwogCiAgIHJldHVybiBHUlVCX0VSUl9O T05FOwpAQCAtMjQ0LDE1ICszMDYsMTYgQEAKICAgZ3J1Yl92YmVfc3RhdHVzX3Qgc3RhdHVz OwogCiAgIC8qIE1ha2Ugc3VyZSB0aGF0IFZCRSBpcyBzdXBwb3J0ZWQuICAqLwotICBpZiAo Z3J1Yl92YmVfcHJvYmUgKDApICE9IEdSVUJfRVJSX05PTkUpCisgIGdydWJfdmJlX3Byb2Jl ICgwKTsKKyAgaWYgKGdydWJfZXJybm8gIT0gR1JVQl9FUlJfTk9ORSkKICAgICByZXR1cm4g Z3J1Yl9lcnJubzsKIAogICAvKiBJZiBtb2RlIGlzIG5vdCBWRVNBIG1vZGUsIHNraXAgbW9k ZSBpbmZvIHF1ZXJ5LiAgKi8KICAgaWYgKG1vZGUgPj0gMHgxMDApCiAgICAgewogICAgICAg LyogVHJ5IHRvIGdldCBtb2RlIGluZm8gZnJvbSBWRVNBIEJJT1MuICAqLwotICAgICAgc3Rh dHVzID0gZ3J1Yl92YmVfZ2V0X21vZGVfaW5mbyAobW9kZSwgbWlfdG1wKTsKLSAgICAgIGlm IChzdGF0dXMgIT0gMHgwMDRGKQorICAgICAgc3RhdHVzID0gZ3J1Yl92YmVfYmlvc19nZXRf bW9kZV9pbmZvIChtb2RlLCBtaV90bXApOworICAgICAgaWYgKHN0YXR1cyAhPSBHUlVCX1ZC RV9TVEFUVVNfT0spCiAJcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9ERVZJQ0Us CiAJCQkgICAiY2Fubm90IGdldCBpbmZvcm1hdGlvbiBvbiB0aGUgbW9kZSAleCIsIG1vZGUp OwogCkBAIC0yNjYsNjAgKzMyOSw3NSBAQAogICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKIH0K IAotdm9pZAotZ3J1Yl92YmVfc2V0X3BpeGVsX3JnYiAoZ3J1Yl91aW50MzJfdCB4LAotCQkJ Z3J1Yl91aW50MzJfdCB5LAotICAgICAgICAgICAgICAgICAgICAgICAgZ3J1Yl91aW50OF90 IHJlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGdydWJfdWludDhfdCBncmVlbiwKLSAg ICAgICAgICAgICAgICAgICAgICAgIGdydWJfdWludDhfdCBibHVlKQorc3RhdGljIGdydWJf dWludDhfdCAqCitncnViX3ZpZGVvX3ZiZV9nZXRfdmlkZW9fcHRyIChzdHJ1Y3QgZ3J1Yl92 aWRlb19yZW5kZXJfdGFyZ2V0ICogc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ3J1Yl91aW50MzJfdCB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Z3J1Yl91aW50MzJfdCB5KQogewotICBncnViX3VpbnQzMl90IHZhbHVlOworICBncnViX3Vp bnQ4X3QgKnB0ciA9IDA7CisgIAorICBzd2l0Y2ggKHNvdXJjZS0+bW9kZV9pbmZvLmJwcCkK KyAgICB7CisgICAgY2FzZSAzMjoKKyAgICAgIHB0ciA9IChncnViX3VpbnQ4X3QgKilzb3Vy Y2UtPmRhdGEKKyAgICAgICAgICAgICsgeSAqIHNvdXJjZS0+bW9kZV9pbmZvLnBpdGNoCisg ICAgICAgICAgICArIHggKiA0OworICAgICAgYnJlYWs7CiAKLSAgaWYgKHggPj0gYWN0aXZl X21vZGVfaW5mby54X3Jlc29sdXRpb24pCi0gICAgcmV0dXJuOworICAgIGNhc2UgMjQ6Cisg ICAgICBwdHIgPSAoZ3J1Yl91aW50OF90ICopc291cmNlLT5kYXRhCisgICAgICAgICAgICAr IHkgKiBzb3VyY2UtPm1vZGVfaW5mby5waXRjaAorICAgICAgICAgICAgKyB4ICogMzsKKyAg ICAgIGJyZWFrOwogCi0gIGlmICh5ID49IGFjdGl2ZV9tb2RlX2luZm8ueV9yZXNvbHV0aW9u KQotICAgIHJldHVybjsKKyAgICBjYXNlIDE2OgorICAgIGNhc2UgMTU6CisgICAgICBwdHIg PSAoZ3J1Yl91aW50OF90ICopc291cmNlLT5kYXRhCisgICAgICAgICAgICArIHkgKiBzb3Vy Y2UtPm1vZGVfaW5mby5waXRjaAorICAgICAgICAgICAgKyB4ICogMjsKKyAgICAgIGJyZWFr OwogCi0gIGlmIChjb250cm9sbGVyX2luZm8udmVyc2lvbiA+PSAweDMwMCkKLSAgICB7Ci0g ICAgICByZWQgPj49IDggLSBhY3RpdmVfbW9kZV9pbmZvLmxpbl9yZWRfbWFza19zaXplOwot ICAgICAgZ3JlZW4gPj49IDggLSBhY3RpdmVfbW9kZV9pbmZvLmxpbl9ncmVlbl9tYXNrX3Np emU7Ci0gICAgICBibHVlID4+PSA4IC0gYWN0aXZlX21vZGVfaW5mby5saW5fYmx1ZV9tYXNr X3NpemU7Ci0KLSAgICAgIHZhbHVlID0gcmVkIDw8IGFjdGl2ZV9tb2RlX2luZm8ubGluX3Jl ZF9maWVsZF9wb3NpdGlvbjsKLSAgICAgIHZhbHVlIHw9IGdyZWVuIDw8IGFjdGl2ZV9tb2Rl X2luZm8ubGluX2dyZWVuX2ZpZWxkX3Bvc2l0aW9uOwotICAgICAgdmFsdWUgfD0gYmx1ZSA8 PCBhY3RpdmVfbW9kZV9pbmZvLmxpbl9ibHVlX2ZpZWxkX3Bvc2l0aW9uOworICAgIGNhc2Ug ODoKKyAgICAgIHB0ciA9IChncnViX3VpbnQ4X3QgKilzb3VyY2UtPmRhdGEKKyAgICAgICAg ICAgICsgeSAqIHNvdXJjZS0+bW9kZV9pbmZvLnBpdGNoCisgICAgICAgICAgICArIHg7ICAg ICAgICAKKyAgICAgIGJyZWFrOwogICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIHJlZCA+ Pj0gOCAtIGFjdGl2ZV9tb2RlX2luZm8ucmVkX21hc2tfc2l6ZTsKLSAgICAgIGdyZWVuID4+ PSA4IC0gYWN0aXZlX21vZGVfaW5mby5ncmVlbl9tYXNrX3NpemU7Ci0gICAgICBibHVlID4+ PSA4IC0gYWN0aXZlX21vZGVfaW5mby5ibHVlX21hc2tfc2l6ZTsKKyAgICAKKyAgcmV0dXJu IHB0cjsKK30KIAotICAgICAgdmFsdWUgPSByZWQgPDwgYWN0aXZlX21vZGVfaW5mby5yZWRf ZmllbGRfcG9zaXRpb247Ci0gICAgICB2YWx1ZSB8PSBncmVlbiA8PCBhY3RpdmVfbW9kZV9p bmZvLmdyZWVuX2ZpZWxkX3Bvc2l0aW9uOwotICAgICAgdmFsdWUgfD0gYmx1ZSA8PCBhY3Rp dmVfbW9kZV9pbmZvLmJsdWVfZmllbGRfcG9zaXRpb247Ci0gICAgfQorc3RhdGljIHZvaWQK K2dydWJfdmlkZW9fdmJlX2RyYXdfcGl4ZWwgKGdydWJfdWludDMyX3QgeCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIGdydWJfdWludDMyX3QgeSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIGdydWJfY29sb3JfdCBjb2xvcikKK3sKKyAgaWYgKHggPj0gcmVuZGVyX3Rh cmdldC0+bW9kZV9pbmZvLndpZHRoKQorICAgIHJldHVybjsKKworICBpZiAoeSA+PSByZW5k ZXJfdGFyZ2V0LT5tb2RlX2luZm8uaGVpZ2h0KQorICAgIHJldHVybjsKIAotICBzd2l0Y2gg KGFjdGl2ZV9tb2RlX2luZm8uYml0c19wZXJfcGl4ZWwpCisgIHN3aXRjaCAocmVuZGVyX3Rh cmdldC0+bW9kZV9pbmZvLmJwcCkKICAgICB7CiAgICAgY2FzZSAzMjoKICAgICAgIHsKLQln cnViX3VpbnQzMl90ICpwdHIgPSAoZ3J1Yl91aW50MzJfdCAqKSAoZnJhbWVidWZmZXIKLQkJ CQkJCSsgeSAqIGJ5dGVzX3Blcl9zY2FuX2xpbmUKLQkJCQkJCSsgeCAqIDQpOworCWdydWJf dWludDMyX3QgKnB0cjsKKwkKKyAgICAgICAgcHRyID0gKGdydWJfdWludDMyX3QgKilncnVi X3ZpZGVvX3ZiZV9nZXRfdmlkZW9fcHRyIChyZW5kZXJfdGFyZ2V0LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgeSk7CiAJCi0JKnB0ciA9IHZhbHVlOworCSpwdHIgPSBjb2xvcjsKICAgICAgIH0K ICAgICAgIGJyZWFrOwogICAgICAgCiAgICAgY2FzZSAyNDoKICAgICAgIHsKLQlncnViX3Vp bnQ4X3QgKnB0ciA9IChncnViX3VpbnQ4X3QgKikgKGZyYW1lYnVmZmVyCi0JCQkJCSAgICAg ICsgeSAqIGJ5dGVzX3Blcl9zY2FuX2xpbmUKLQkJCQkJICAgICAgKyB4ICogMyk7Ci0JZ3J1 Yl91aW50OF90ICpwdHIyID0gKGdydWJfdWludDhfdCAqKSAmdmFsdWU7CisJZ3J1Yl91aW50 OF90ICpwdHI7CisJZ3J1Yl91aW50OF90ICpwdHIyID0gKGdydWJfdWludDhfdCAqKSAmY29s b3I7CisgICAgICAgIAorICAgICAgICBwdHIgPSBncnViX3ZpZGVvX3ZiZV9nZXRfdmlkZW9f cHRyIChyZW5kZXJfdGFyZ2V0LCB4LCB5KTsKIAkKIAlwdHJbMF0gPSBwdHIyWzBdOwogCXB0 clsxXSA9IHB0cjJbMV07CkBAIC0zMzAsMTEgKzQwOCwyNSBAQAogICAgIGNhc2UgMTY6CiAg ICAgY2FzZSAxNToKICAgICAgIHsKLQlncnViX3VpbnQxNl90ICpwdHIgPSAoZ3J1Yl91aW50 MTZfdCAqKSAoZnJhbWVidWZmZXIKLQkJCQkJCSsgeSAqIGJ5dGVzX3Blcl9zY2FuX2xpbmUK LQkJCQkJCSsgeCAqIDIpOworCWdydWJfdWludDE2X3QgKnB0cjsKKwkKKyAgICAgICAgcHRy ID0gKGdydWJfdWludDE2X3QgKilncnViX3ZpZGVvX3ZiZV9nZXRfdmlkZW9fcHRyIChyZW5k ZXJfdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSk7CiAJCi0JKnB0ciA9IChncnViX3Vp bnQxNl90KSAodmFsdWUgJiAweEZGRkYpOworCSpwdHIgPSAoZ3J1Yl91aW50MTZfdCkgKGNv bG9yICYgMHhGRkZGKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSA4Ogor ICAgICAgeworCWdydWJfdWludDhfdCAqcHRyOworCQorICAgICAgICBwdHIgPSAoZ3J1Yl91 aW50OF90ICopZ3J1Yl92aWRlb192YmVfZ2V0X3ZpZGVvX3B0ciAocmVuZGVyX3RhcmdldCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB5KTsKKwkKKwkqcHRyID0gKGdydWJfdWludDhfdCkgKGNvbG9y ICYgMHhGRik7CiAgICAgICB9CiAgICAgICBicmVhazsKIApAQCAtMzQzLDQ0ICs0MzUsMTIw MyBAQAogICAgIH0KIH0KIAotdm9pZAotZ3J1Yl92YmVfc2V0X3BpeGVsX2luZGV4IChncnVi X3VpbnQzMl90IHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGdydWJfdWludDMyX3Qg eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZ3J1Yl91aW50OF90IGNvbG9yKQorc3Rh dGljIGdydWJfY29sb3JfdAorZ3J1Yl92aWRlb192YmVfZ2V0X3BpeGVsIChzdHJ1Y3QgZ3J1 Yl92aWRlb19yZW5kZXJfdGFyZ2V0ICogc291cmNlLAorICAgICAgICAgICAgICAgICAgICAg ICAgICBncnViX3VpbnQzMl90IHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGdydWJf dWludDMyX3QgeSkKIHsKLSAgaWYgKHggPj0gYWN0aXZlX21vZGVfaW5mby54X3Jlc29sdXRp b24pCi0gICAgcmV0dXJuOworICBncnViX2NvbG9yX3QgY29sb3IgPSAwOworICAKKyAgaWYg KHggPj0gc291cmNlLT5tb2RlX2luZm8ud2lkdGgpCisgICAgcmV0dXJuIDA7CiAKLSAgaWYg KHkgPj0gYWN0aXZlX21vZGVfaW5mby55X3Jlc29sdXRpb24pCi0gICAgcmV0dXJuOworICBp ZiAoeSA+PSBzb3VyY2UtPm1vZGVfaW5mby5oZWlnaHQpCisgICAgcmV0dXJuIDA7CiAKLSAg aWYgKGluZGV4X2NvbG9yX21vZGUgPT0gMSkKKyAgc3dpdGNoIChzb3VyY2UtPm1vZGVfaW5m by5icHApCiAgICAgewotICAgICAgZ3J1Yl91aW50OF90ICpwdHIgPSAoZ3J1Yl91aW50OF90 ICopIChmcmFtZWJ1ZmZlcgotCQkJCQkgICAgKyB5ICogYnl0ZXNfcGVyX3NjYW5fbGluZQot CQkJCQkgICAgKyB4KTsKKyAgICBjYXNlIDMyOgorICAgICAgeworICAgICAgICBjb2xvciA9 ICooZ3J1Yl91aW50MzJfdCAqKWdydWJfdmlkZW9fdmJlX2dldF92aWRlb19wdHIgKHNvdXJj ZSwgeCwgeSk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICAgIAorICAgIGNhc2UgMjQ6 CisgICAgICB7CisJZ3J1Yl91aW50OF90ICpwdHI7CisgICAgICAgIHB0ciA9IGdydWJfdmlk ZW9fdmJlX2dldF92aWRlb19wdHIgKHNvdXJjZSwgeCwgeSk7CisgICAgICAgIGNvbG9yID0g cHRyWzBdIHwgKHB0clsxXSA8PCA4KSB8IChwdHJbMl0gPDwgMTYpOworICAgICAgfQorICAg ICAgYnJlYWs7CisKKyAgICBjYXNlIDE2OgorICAgIGNhc2UgMTU6CisgICAgICB7CisgICAg ICAgIGNvbG9yID0gKihncnViX3VpbnQxNl90ICopZ3J1Yl92aWRlb192YmVfZ2V0X3ZpZGVv X3B0ciAoc291cmNlLCB4LCB5KTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgICAgCisg ICAgY2FzZSA4OgorICAgICAgeworICAgICAgICBjb2xvciA9ICooZ3J1Yl91aW50OF90ICop Z3J1Yl92aWRlb192YmVfZ2V0X3ZpZGVvX3B0ciAoc291cmNlLCB4LCB5KTsKKyAgICAgIH0K KyAgICAgIGJyZWFrOworICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAg IH0KKworICByZXR1cm4gY29sb3I7ICAgIAorfQorCitzdGF0aWMgZ3J1Yl91aW50MzJfdCBp bml0aWFsX21vZGUgPSAwOworc3RhdGljIGdydWJfdWludDMyX3QgbW9kZV9pbl91c2UgPSAw eDU1YWE7CitzdGF0aWMgZ3J1Yl91aW50MTZfdCAqbW9kZV9saXN0ID0gMDsKKworc3RhdGlj IGdydWJfZXJyX3QKK2dydWJfdmlkZW9fdmJlX2luaXQgKHZvaWQpCit7CisgIGdydWJfdWlu dDE2X3QgKnJtX21vZGVfbGlzdDsKKyAgZ3J1Yl91aW50MTZfdCAqcDsKKyAgZ3J1Yl9zaXpl X3QgbW9kZV9saXN0X3NpemU7CisgIHN0cnVjdCBncnViX3ZiZV9pbmZvX2Jsb2NrIGluZm9f YmxvY2s7CiAKLSAgICAgICpwdHIgPSBjb2xvcjsKKyAgLyogQ2hlY2sgaWYgdGhlcmUgaXMg YWRhcHRlciBwcmVzZW50LgorICAKKyAgICAgRmlybXdhcmUgbm90ZTogVGhlcmUgaGFzIGJl ZW4gYSByZXBvcnQgdGhhdCBzb21lIGNhcmRzIHN0b3JlIHZpZGVvIG1vZGUKKyAgICAgbGlz dCBpbiB0ZW1wb3JhcnkgbWVtb3J5LiBTbyB3ZSBtdXN0IGZpcnN0IHVzZSB2YmUgcHJvYmUg dG8gZ2V0CisgICAgIHJlZnJlc2hlZCBpbmZvcm1hdGlvbiB0byByZWNlaXZlIHZhbGlkIHBv aW50ZXJzIGFuZCBkYXRhLCBhbmQgdGhlbgorICAgICBjb3B5IHRoaXMgaW5mb3JtYXRpb24g dG8gc29tZXdoZXJlIHNhZmUuICAqLworICBncnViX3ZiZV9wcm9iZSAoJmluZm9fYmxvY2sp OworICBpZiAoZ3J1Yl9lcnJubyAhPSBHUlVCX0VSUl9OT05FKQorICAgIHJldHVybiBncnVi X2Vycm5vOworICAKKyAgLyogQ29weSBtb2RlbGlzdCB0byBsb2NhbCBtZW1vcnkuICAqLwor ICBwID0gcm1fbW9kZV9saXN0ID0gcmVhbDJwbSAoaW5mb19ibG9jay52aWRlb19tb2RlX3B0 cik7CisgIHdoaWxlKCpwKysgIT0gMHhGRkZGKQorICAgIDsKKyAgCisgIG1vZGVfbGlzdF9z aXplID0gKGdydWJfYWRkcl90KSBwIC0gKGdydWJfYWRkcl90KSBybV9tb2RlX2xpc3Q7Cisg IG1vZGVfbGlzdCA9IGdydWJfbWFsbG9jIChtb2RlX2xpc3Rfc2l6ZSk7CisgIGlmICghIG1v ZGVfbGlzdCkKKyAgICByZXR1cm4gZ3J1Yl9lcnJubzsKKyAgZ3J1Yl9tZW1jcHkgKG1vZGVf bGlzdCwgcm1fbW9kZV9saXN0LCBtb2RlX2xpc3Rfc2l6ZSk7CisKKyAgLyogQWRhcHRlciBj b3VsZCBiZSBmb3VuZCwgZmlndXJlIG91dCBpbml0aWFsIHZpZGVvIG1vZGUuICAqLworICBn cnViX3ZiZV9nZXRfdmlkZW9fbW9kZSAoJmluaXRpYWxfbW9kZSk7CisgIGlmIChncnViX2Vy cm5vICE9IEdSVUJfRVJSX05PTkUpCisgICAgeworICAgICAgLyogRnJlZSBhbGxvY2F0ZWQg cmVzb3VyY2VzLiAgKi8KKyAgICAgIGdydWJfZnJlZSAobW9kZV9saXN0KTsKKyAgICAgIG1v ZGVfbGlzdCA9IDA7CisgICAgICAKKyAgICAgIHJldHVybiBncnViX2Vycm5vOworICAgIH0K KworICAvKiBSZXNldCBmcmFtZSBidWZmZXIgYW5kIHJlbmRlciB0YXJnZXQgdmFyaWFibGVz LiAgKi8KKyAgZ3J1Yl9tZW1zZXQgKCZmcmFtZWJ1ZmZlciwgMCwgc2l6ZW9mKGZyYW1lYnVm ZmVyKSk7ICAKKyAgcmVuZGVyX3RhcmdldCA9ICZmcmFtZWJ1ZmZlci5yZW5kZXJfdGFyZ2V0 OworCisgIHJldHVybiBHUlVCX0VSUl9OT05FOworfQorCitzdGF0aWMgZ3J1Yl9lcnJfdAor Z3J1Yl92aWRlb192YmVfZmluaSAodm9pZCkKK3sKKyAgZ3J1Yl92YmVfc3RhdHVzX3Qgc3Rh dHVzOworICAKKyAgLyogUmVzdG9yZSBvbGQgdmlkZW8gbW9kZS4gICovCisgIHN0YXR1cyA9 IGdydWJfdmJlX2Jpb3Nfc2V0X21vZGUgKGluaXRpYWxfbW9kZSwgMCk7CisgIGlmIChzdGF0 dXMgIT0gR1JVQl9WQkVfU1RBVFVTX09LKQorICAgIHsKKyAgICAgIC8qIFRPRE86IERlY2lk ZSwgaXMgdGhpcyBzb21ldGhpbmcgd2Ugd2FudCB0byBkby4gICovCisgICAgICByZXR1cm4g Z3J1Yl9lcnJubzsKKyAgICB9CisgIAorICAvKiBUT0RPOiBGcmVlIGFueSByZXNvdXJjZXMg YWxsb2NhdGVkIGJ5IGRyaXZlci4gICovCisgIGdydWJfZnJlZSAobW9kZV9saXN0KTsKKyAg bW9kZV9saXN0ID0gMDsKKworICAvKiBUT0RPOiBkZXN0cm95IHJlbmRlciB0YXJnZXRzLiAg Ki8KKyAgCisgIC8qIFJldHVybiBzdWNjZXNzIHRvIGNhbGxlci4gICovCisgIHJldHVybiBH UlVCX0VSUl9OT05FOworfQorCitzdGF0aWMgZ3J1Yl9lcnJfdAorZ3J1Yl92aWRlb192YmVf c2V0dXAgKHVuc2lnbmVkIGludCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBpbnQgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBt b2RlX3R5cGUpCit7CisgIGdydWJfdWludDE2X3QgKnA7CisgIHN0cnVjdCBncnViX3ZiZV9t b2RlX2luZm9fYmxvY2sgbW9kZV9pbmZvOworICBzdHJ1Y3QgZ3J1Yl92YmVfbW9kZV9pbmZv X2Jsb2NrIGJlc3RfbW9kZV9pbmZvOworICBncnViX3VpbnQzMl90IGJlc3RfbW9kZSA9IDA7 CisgIHVuc2lnbmVkIGludCBpOworICAKKyAgLyogV2FsayB0aHJ1IG1vZGUgbGlzdCBhbmQg dHJ5IHRvIGZpbmQgbWF0Y2hpbmcgbW9kZS4gICovCisgIGZvciAocCA9IG1vZGVfbGlzdDsg KnAgIT0gMHhGRkZGOyBwKyspCisgICAgeworICAgICAgZ3J1Yl91aW50MzJfdCBtb2RlID0g KnA7CisgICAgICAKKyAgICAgIGdydWJfdmJlX2dldF92aWRlb19tb2RlX2luZm8gKG1vZGUs ICZtb2RlX2luZm8pOworICAgICAgaWYgKGdydWJfZXJybm8gIT0gR1JVQl9FUlJfTk9ORSkK KyAgICAgICAgeworICAgICAgICAgIC8qIENvdWxkIG5vdCByZXRyaWV2ZSBtb2RlIGluZm8s IHJldHJlYXQuICAqLworICAgICAgICAgIGdydWJfZXJybm8gPSBHUlVCX0VSUl9OT05FOwor ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgIGlmICgobW9kZV9pbmZvLm1v ZGVfYXR0cmlidXRlcyAmIDB4MDAxKSA9PSAwKQorICAgICAgICAvKiBJZiBub3QgYXZhaWxh YmxlLCBza2lwIGl0LiAgKi8KKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGlmICgobW9k ZV9pbmZvLm1vZGVfYXR0cmlidXRlcyAmIDB4MDAyKSA9PSAwKQorICAgICAgICAvKiBOb3Qg ZW5vdWdoIGluZm9ybWF0aW9uLiAgKi8KKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGlm ICgobW9kZV9pbmZvLm1vZGVfYXR0cmlidXRlcyAmIDB4MDA4KSA9PSAwKQorICAgICAgICAv KiBNb25vY2hyb21lIGlzIHVudXNhYmxlLiAgKi8KKyAgICAgICAgY29udGludWU7CisKKyAg ICAgIGlmICgobW9kZV9pbmZvLm1vZGVfYXR0cmlidXRlcyAmIDB4MDgwKSA9PSAwKQorICAg ICAgICAvKiBXZSBzdXBwb3J0IG9ubHkgbGluZWFyIGZyYW1lIGJ1ZmZlciBtb2Rlcy4gICov CisgICAgICAgIGNvbnRpbnVlOworCisgICAgICBpZiAoKG1vZGVfaW5mby5tb2RlX2F0dHJp YnV0ZXMgJiAweDAxMCkgPT0gMCkKKyAgICAgICAgLyogV2UgYWxsb3cgb25seSBncmFwaGlj YWwgbW9kZXMuICAqLworICAgICAgICBjb250aW51ZTsKKyAgICAgIAorICAgICAgaWYgKCht b2RlX2luZm8ubWVtb3J5X21vZGVsICE9IEdSVUJfVkJFX01FTU9SWV9NT0RFTF9QQUNLRURf UElYRUwpCisgICAgICAgICAgJiYgKG1vZGVfaW5mby5tZW1vcnlfbW9kZWwgIT0gR1JVQl9W QkVfTUVNT1JZX01PREVMX0RJUkVDVF9DT0xPUikpCisgICAgICAgIC8qIE5vdCBjb21wYXRp YmxlIG1lbW9yeSBtb2RlbC4gICovCisgICAgICAgIGNvbnRpbnVlOworICAgICAgCisgICAg ICBpZiAoKG1vZGVfaW5mby54X3Jlc29sdXRpb24gIT0gd2lkdGgpCisgICAgICAgICAgfHwg KG1vZGVfaW5mby55X3Jlc29sdXRpb24gIT0gaGVpZ2h0KSkKKyAgICAgICAgLyogTm9uIG1h dGNoaW5nIHJlc29sdXRpb24uICAqLworICAgICAgICBjb250aW51ZTsKKworICAgICAgLyog Q2hlY2sgaWYgdXNlciByZXF1ZXN0ZWQgUkdCIG9yIGluZGV4IGNvbG9yIG1vZGUuICAqLwor ICAgICAgaWYgKChtb2RlX3R5cGUgJiBHUlVCX1ZJREVPX01PREVfVFlQRV9DT0xPUl9NQVNL KSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCgobW9kZV90eXBlICYgR1JVQl9W SURFT19NT0RFX1RZUEVfSU5ERVhfQ09MT1IpICE9IDApCisgICAgICAgICAgICAgICYmICht b2RlX2luZm8ubWVtb3J5X21vZGVsICE9IEdSVUJfVkJFX01FTU9SWV9NT0RFTF9QQUNLRURf UElYRUwpKQorICAgICAgICAgICAgLyogUmVxdWVzdGVkIG9ubHkgaW5kZXggY29sb3IgbW9k ZXMuICAqLworICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICBpZiAoKChtb2Rl X3R5cGUgJiBHUlVCX1ZJREVPX01PREVfVFlQRV9SR0IpICE9IDApCisgICAgICAgICAgICAg ICYmIChtb2RlX2luZm8ubWVtb3J5X21vZGVsICE9IEdSVUJfVkJFX01FTU9SWV9NT0RFTF9E SVJFQ1RfQ09MT1IpKQorICAgICAgICAgICAgLyogUmVxdWVzdGVkIG9ubHkgUkdCIG1vZGVz LiAgKi8KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAKKyAgICAg IC8qIFNlbGVjdCBtb2RlIHdpdGggbW9zdCBudW1iZXIgb2YgYml0cyBwZXIgcGl4ZWwuICAq LworICAgICAgaWYgKGJlc3RfbW9kZSAhPSAwKQorICAgICAgCXsKKyAgICAgIAkgIGlmICht b2RlX2luZm8uYml0c19wZXJfcGl4ZWwgPCBiZXN0X21vZGVfaW5mby5iaXRzX3Blcl9waXhl bCkKKyAgICAgIAkgICAgY29udGludWU7CisgICAgICAJfQorICAgICAgCisgICAgICAvKiBT YXZlIHNvIGZhciBiZXN0IG1vZGUgaW5mb3JtYXRpb24gZm9yIGxhdGVyIHVzZS4gICovCisg ICAgICBiZXN0X21vZGUgPSBtb2RlOworICAgICAgZ3J1Yl9tZW1jcHkgKCZiZXN0X21vZGVf aW5mbywgJm1vZGVfaW5mbywgc2l6ZW9mIChtb2RlX2luZm8pKTsKKyAgICB9CisKKyAgLyog VHJ5IHRvIGluaXRpYWxpemUgYmVzdCBtb2RlIGZvdW5kLiAgKi8KKyAgaWYgKGJlc3RfbW9k ZSAhPSAwKQorICAgIHsKKyAgICAgIC8qIElmIHRoaXMgZmFpbHMsIHRoZW4gd2UgaGF2ZSBt b2RlIHNlbGVjdGlvbiBoZXVyaXN0aWNzIHByb2JsZW0sIAorICAgICAgICAgb3IgYWRhcHRl ciBmYWlsdXJlLiAgKi8KKyAgICAgIGdydWJfdmJlX3NldF92aWRlb19tb2RlIChiZXN0X21v ZGUsICZhY3RpdmVfbW9kZV9pbmZvKTsKKyAgICAgIGlmIChncnViX2Vycm5vICE9IEdSVUJf RVJSX05PTkUpCisgICAgICAgIHJldHVybiBncnViX2Vycm5vOworICAgICAgCisgICAgICAv KiBOb3cgd2UgYXJlIGhhcHBpbHkgaW4gcmVxdWVzdGVkIHZpZGVvIG1vZGUuIENhY2hlIHNv bWUgaW5mbworICAgICAgICAgaW4gb3JkZXIgdG8gZmFzdGVuIGxhdGVyIG9wZXJhdGlvbnMu ICAqLworICAgICAgbW9kZV9pbl91c2UgPSBiZXN0X21vZGU7CisKKyAgICAgIC8qIFJlc2V0 IHJlbmRlciB0YXJnZXQgdG8gZnJhbWVidWZmZXIgb25lLiAgKi8KKyAgICAgIHJlbmRlcl90 YXJnZXQgPSAmZnJhbWVidWZmZXIucmVuZGVyX3RhcmdldDsKKyAgICAgIAorICAgICAgLyog RmlsbCBtb2RlIGluZm8gZGV0YWlscyBpbiBmcmFtZWJ1ZmZlcidzIHJlbmRlciB0YXJnZXQu ICAqLworICAgICAgcmVuZGVyX3RhcmdldC0+bW9kZV9pbmZvLndpZHRoID0gYWN0aXZlX21v ZGVfaW5mby54X3Jlc29sdXRpb247CisgICAgICByZW5kZXJfdGFyZ2V0LT5tb2RlX2luZm8u aGVpZ2h0ID0gYWN0aXZlX21vZGVfaW5mby55X3Jlc29sdXRpb247CisgICAgICAKKyAgICAg IHJlbmRlcl90YXJnZXQtPm1vZGVfaW5mby53aWR0aCA9IGFjdGl2ZV9tb2RlX2luZm8ueF9y ZXNvbHV0aW9uOworICAgICAgcmVuZGVyX3RhcmdldC0+bW9kZV9pbmZvLmhlaWdodCA9IGFj dGl2ZV9tb2RlX2luZm8ueV9yZXNvbHV0aW9uOworCisgICAgICBpZiAoZnJhbWVidWZmZXIu aW5kZXhfY29sb3JfbW9kZSkKKyAgICAgICAgeworICAgICAgICAgIHJlbmRlcl90YXJnZXQt Pm1vZGVfaW5mby5tb2RlX3R5cGUgPSBHUlVCX1ZJREVPX01PREVfVFlQRV9JTkRFWF9DT0xP UjsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgcmVuZGVy X3RhcmdldC0+bW9kZV9pbmZvLm1vZGVfdHlwZSA9IEdSVUJfVklERU9fTU9ERV9UWVBFX1JH QjsKKyAgICAgICAgfQorCisgICAgICByZW5kZXJfdGFyZ2V0LT5tb2RlX2luZm8uYnBwID0g YWN0aXZlX21vZGVfaW5mby5iaXRzX3Blcl9waXhlbDsKKyAgICAgIHJlbmRlcl90YXJnZXQt Pm1vZGVfaW5mby5ieXRlc19wZXJfcGl4ZWwgPSBmcmFtZWJ1ZmZlci5ieXRlc19wZXJfcGl4 ZWw7CisgICAgICByZW5kZXJfdGFyZ2V0LT5tb2RlX2luZm8ucGl0Y2ggPSBmcmFtZWJ1ZmZl ci5ieXRlc19wZXJfc2Nhbl9saW5lOworICAgICAgcmVuZGVyX3RhcmdldC0+bW9kZV9pbmZv Lm51bWJlcl9vZl9jb2xvcnMgPSAyNTY7IC8qIFRPRE86IGZpeCBtZS4gICovCisgICAgICBy ZW5kZXJfdGFyZ2V0LT5tb2RlX2luZm8ucmVkX21hc2tfc2l6ZSA9IGFjdGl2ZV9tb2RlX2lu Zm8ucmVkX21hc2tfc2l6ZTsKKyAgICAgIHJlbmRlcl90YXJnZXQtPm1vZGVfaW5mby5yZWRf ZmllbGRfcG9zID0gYWN0aXZlX21vZGVfaW5mby5yZWRfZmllbGRfcG9zaXRpb247CisgICAg ICByZW5kZXJfdGFyZ2V0LT5tb2RlX2luZm8uZ3JlZW5fbWFza19zaXplID0gYWN0aXZlX21v ZGVfaW5mby5ncmVlbl9tYXNrX3NpemU7CisgICAgICByZW5kZXJfdGFyZ2V0LT5tb2RlX2lu Zm8uZ3JlZW5fZmllbGRfcG9zID0gYWN0aXZlX21vZGVfaW5mby5ncmVlbl9maWVsZF9wb3Np dGlvbjsKKyAgICAgIHJlbmRlcl90YXJnZXQtPm1vZGVfaW5mby5ibHVlX21hc2tfc2l6ZSA9 IGFjdGl2ZV9tb2RlX2luZm8uYmx1ZV9tYXNrX3NpemU7CisgICAgICByZW5kZXJfdGFyZ2V0 LT5tb2RlX2luZm8uYmx1ZV9maWVsZF9wb3MgPSBhY3RpdmVfbW9kZV9pbmZvLmJsdWVfZmll bGRfcG9zaXRpb247CisgICAgICByZW5kZXJfdGFyZ2V0LT5tb2RlX2luZm8ucmVzZXJ2ZWRf bWFza19zaXplID0gYWN0aXZlX21vZGVfaW5mby5yc3ZkX21hc2tfc2l6ZTsKKyAgICAgIHJl bmRlcl90YXJnZXQtPm1vZGVfaW5mby5yZXNlcnZlZF9maWVsZF9wb3MgPSBhY3RpdmVfbW9k ZV9pbmZvLnJzdmRfZmllbGRfcG9zaXRpb247CisgICAgIAorICAgICAgLyogUmVzZXQgdmll d3BvcnQgdG8gbWF0Y2ggbmV3IG1vZGUuICAqLworICAgICAgcmVuZGVyX3RhcmdldC0+dmll d3BvcnQueCA9IDA7CisgICAgICByZW5kZXJfdGFyZ2V0LT52aWV3cG9ydC55ID0gMDsKKyAg ICAgIHJlbmRlcl90YXJnZXQtPnZpZXdwb3J0LndpZHRoID0gYWN0aXZlX21vZGVfaW5mby54 X3Jlc29sdXRpb247CisgICAgICByZW5kZXJfdGFyZ2V0LT52aWV3cG9ydC5oZWlnaHQgPSBh Y3RpdmVfbW9kZV9pbmZvLnlfcmVzb2x1dGlvbjsKKworICAgICAgLyogU2V0IGZyYW1lYnVm ZmVyIHBvaW50ZXIgYW5kIG1hcmsgaXQgYXMgbm9uIGFsbG9jYXRlZC4gICovCisgICAgICBy ZW5kZXJfdGFyZ2V0LT5pc19hbGxvY2F0ZWQgPSAwOworICAgICAgcmVuZGVyX3RhcmdldC0+ ZGF0YSA9IGZyYW1lYnVmZmVyLnB0cjsKKworICAgICAgLyogQ29weSBkZWZhdWx0IHBhbGV0 dGUgdG8gaW5pdGlhbGl6ZSBlbXVsYXRlZCBwYWxldHRlLiAgKi8KKyAgICAgIGZvciAoaSA9 IDA7IAorICAgICAgICAgICBpIDwgKHNpemVvZiAodmdhX2NvbG9ycykgCisgICAgICAgICAg ICAgICAgLyBzaXplb2YgKHN0cnVjdCBncnViX3ZiZV9wYWxldHRlX2RhdGEpKTsKKyAgICAg ICAgICAgaSsrKQorICAgICAgICB7CisgICAgICAgICAgZnJhbWVidWZmZXIucGFsZXR0ZVtp XS5yID0gdmdhX2NvbG9yc1tpXS5yZWQ7CisgICAgICAgICAgZnJhbWVidWZmZXIucGFsZXR0 ZVtpXS5nID0gdmdhX2NvbG9yc1tpXS5ncmVlbjsKKyAgICAgICAgICBmcmFtZWJ1ZmZlci5w YWxldHRlW2ldLmIgPSB2Z2FfY29sb3JzW2ldLmJsdWU7CisgICAgICAgICAgZnJhbWVidWZm ZXIucGFsZXR0ZVtpXS5hID0gMHhGRjsKKyAgICAgICAgfQorCisgICAgICByZXR1cm4gR1JV Ql9FUlJfTk9ORTsKKyAgICB9CisKKyAgLyogQ291bGRuJ3QgZm91bmQgbWF0Y2hpbmcgbW9k ZS4gICovCisgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9VTktOT1dOX0RFVklDRSwg Im5vIG1hdGNoaW5nIG1vZGUgZm91bmQuIik7Cit9CisKK3N0YXRpYyBncnViX2Vycl90Citn cnViX3ZpZGVvX3ZiZV9nZXRfaW5mbyAoc3RydWN0IGdydWJfdmlkZW9fbW9kZV9pbmZvICog bW9kZV9pbmZvKQoreworICAvKiBDb3B5IG1vZGUgaW5mbyBmcm9tIGFjdGl2ZSByZW5kZXIg dGFyZ2V0LiAgKi8KKyAgZ3J1Yl9tZW1jcHkgKG1vZGVfaW5mbywgCisgICAgICAgICAgICAg ICAmcmVuZGVyX3RhcmdldC0+bW9kZV9pbmZvLCAKKyAgICAgICAgICAgICAgIHNpemVvZiAo c3RydWN0IGdydWJfdmlkZW9fbW9kZV9pbmZvKSk7CisgIAorICByZXR1cm4gR1JVQl9FUlJf Tk9ORTsKK30KKworc3RhdGljIGdydWJfZXJyX3QKK2dydWJfdmlkZW9fdmJlX3NldF9wYWxl dHRlICh1bnNpZ25lZCBpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgaW50IGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBncnViX3ZpZGVvX3BhbGV0dGVfZGF0YSAqcGFsZXR0ZV9kYXRhKQoreworICB1bnNpZ25l ZCBpbnQgaTsKKyAgCisgIGlmIChmcmFtZWJ1ZmZlci5pbmRleF9jb2xvcl9tb2RlKQorICAg IHsKKyAgICAgIC8qIFRPRE86IEltcGxlbWVudCBzZXR0aW5nIGluZGV4ZWQgY29sb3IgbW9k ZSBwYWxldHRlIHRvIGhhcmR3YXJlLiAgKi8KKyAgICAgIC8vc3RhdHVzID0gZ3J1Yl92YmVf Ymlvc19zZXRfcGFsZXR0ZV9kYXRhIChzaXplb2YgKHZnYV9jb2xvcnMpIAorICAgICAgLy8g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gc2l6ZW9mIChzdHJ1 Y3QgZ3J1Yl92YmVfcGFsZXR0ZV9kYXRhKSwgCisgICAgICAvLyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMCwgCisgICAgICAvLyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGFsZXR0ZSk7CisgICAgICAKKyAgICB9CisKKyAg LyogVGhlbiBzZXQgY29sb3IgdG8gZW11bGF0ZWQgcGFsZXR0ZS4gKi8KKyAgZm9yIChpID0g MDsgKGkgPCBjb3VudCkgJiYgKChpICsgc3RhcnQpIDwgMjU2KTsgaSsrKQorICAgIHsKKyAg ICAgIGZyYW1lYnVmZmVyLnBhbGV0dGVbc3RhcnQgKyBpXSA9IHBhbGV0dGVfZGF0YVtpXTsK KyAgICB9CisKKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cit9CisKK3N0YXRpYyBncnViX2Vy cl90CitncnViX3ZpZGVvX3ZiZV9nZXRfcGFsZXR0ZSAodW5zaWduZWQgaW50IHN0YXJ0LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3VudCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZ3J1Yl92aWRlb19wYWxldHRlX2RhdGEg KnBhbGV0dGVfZGF0YSkKK3sKKyAgdW5zaWduZWQgaW50IGk7CisKKyAgLyogQXNzdW1lIHRo YXQgd2Uga25vdyBldmVyeXRoaW5nIGZyb20gaW5kZXggY29sb3IgcGFsZXR0ZS4gICovCisg IGZvciAoaSA9IDA7IChpIDwgY291bnQpICYmICgoaSArIHN0YXJ0KSA8IDI1Nik7IGkrKykK KyAgICB7CisgICAgICBwYWxldHRlX2RhdGFbaV0gPSBmcmFtZWJ1ZmZlci5wYWxldHRlW3N0 YXJ0ICsgaV07CisgICAgfQorCisgIHJldHVybiBHUlVCX0VSUl9OT05FOworfQorCitzdGF0 aWMgZ3J1Yl9lcnJfdAorZ3J1Yl92aWRlb192YmVfc2V0X3ZpZXdwb3J0ICh1bnNpZ25lZCBp bnQgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB3aWR0aCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGhlaWdodCkKK3sKKyAgLyog TWFrZSBzdXJlIHZpZXdwb3J0IGlzIHdpdGhpbmcgc2NyZWVuIGRpbWVuc2lvbnMuIElmIHZp ZXdwb3J0IHdhcyBzZXQKKyAgICAgdG8gYmUgb3V0IG9mIHRoZSByZXFpb24sIG1hcmsgaXRz IHNpemUgYXMgemVyby4gICovCisgIGlmICh4ID4gYWN0aXZlX21vZGVfaW5mby54X3Jlc29s dXRpb24pCisgICAgeworICAgICAgeCA9IDA7CisgICAgICB3aWR0aCA9IDA7CisgICAgfQor ICAKKyAgaWYgKHkgPiBhY3RpdmVfbW9kZV9pbmZvLnlfcmVzb2x1dGlvbikKKyAgICB7Cisg ICAgICB5ID0gMDsKKyAgICAgIGhlaWdodCA9IDA7CisgICAgfQorICAgIAorICBpZiAoeCAr IHdpZHRoID4gYWN0aXZlX21vZGVfaW5mby54X3Jlc29sdXRpb24pCisgICAgeworICAgICAg d2lkdGggPSBhY3RpdmVfbW9kZV9pbmZvLnhfcmVzb2x1dGlvbiAtIHg7CisgICAgfQorCisg IGlmICh5ICsgaGVpZ2h0ID4gYWN0aXZlX21vZGVfaW5mby55X3Jlc29sdXRpb24pCisgICAg eworICAgICAgaGVpZ2h0ID0gYWN0aXZlX21vZGVfaW5mby55X3Jlc29sdXRpb24gLSB5Owor ICAgIH0KKworICByZW5kZXJfdGFyZ2V0LT52aWV3cG9ydC54ID0geDsKKyAgcmVuZGVyX3Rh cmdldC0+dmlld3BvcnQueSA9IHk7CisgIHJlbmRlcl90YXJnZXQtPnZpZXdwb3J0LndpZHRo ID0gd2lkdGg7CisgIHJlbmRlcl90YXJnZXQtPnZpZXdwb3J0LmhlaWdodCA9IGhlaWdodDsK KyAgCisgIHJldHVybiBHUlVCX0VSUl9OT05FOworfQorCitzdGF0aWMgZ3J1Yl9lcnJfdAor Z3J1Yl92aWRlb192YmVfZ2V0X3ZpZXdwb3J0ICh1bnNpZ25lZCBpbnQgKiB4LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKiB5LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKiB3aWR0aCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICogaGVpZ2h0KQoreworICBpZiAoeCkgKngg PSByZW5kZXJfdGFyZ2V0LT52aWV3cG9ydC54OworICBpZiAoeSkgKnkgPSByZW5kZXJfdGFy Z2V0LT52aWV3cG9ydC55OworICBpZiAod2lkdGgpICp3aWR0aCA9IHJlbmRlcl90YXJnZXQt PnZpZXdwb3J0LndpZHRoOworICBpZiAoaGVpZ2h0KSAqaGVpZ2h0ID0gcmVuZGVyX3Rhcmdl dC0+dmlld3BvcnQuaGVpZ2h0OworICAKKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cit9CisK K3N0YXRpYyBncnViX2NvbG9yX3QKK2dydWJfdmlkZW9fdmJlX21hcF9jb2xvciAoZ3J1Yl91 aW50MzJfdCBjb2xvcl9uYW1lKQoreworICAvKiBUT0RPOiBpbXBsZW1lbnQgY29sb3IgdGhl bWUgbWFwcGluZyBjb2RlLiAgKi8KKyAgCisgIGlmIChjb2xvcl9uYW1lIDwgMjU2KQorICAg IHsKKyAgICAgIGlmICgocmVuZGVyX3RhcmdldC0+bW9kZV9pbmZvLm1vZGVfdHlwZQorICAg ICAgICAgICAmIEdSVUJfVklERU9fTU9ERV9UWVBFX0lOREVYX0NPTE9SKSAhPSAwKQorICAg ICAgICB7CisgICAgICAgICAgcmV0dXJuIGNvbG9yX25hbWU7CisgICAgICAgIH0KKyAgICAg IGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGdydWJfY29sb3JfdCBjb2xvcjsKKyAgICAg ICAgICAKKyAgICAgICAgICBjb2xvciA9IGdydWJfdmlkZW9fdmJlX21hcF9yZ2IgKGZyYW1l YnVmZmVyLnBhbGV0dGVbY29sb3JfbmFtZV0uciwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyLnBhbGV0dGVbY29sb3JfbmFtZV0uZywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVy LnBhbGV0dGVbY29sb3JfbmFtZV0uYik7CisgICAgICAgICAgCisgICAgICAgICAgcmV0dXJu IGNvbG9yOworICAgICAgICB9CisgICAgfQorICAgIAorICByZXR1cm4gMDsKK30KKworc3Rh dGljIGdydWJfY29sb3JfdAorZ3J1Yl92aWRlb192YmVfbWFwX3JnYiAoZ3J1Yl91aW50OF90 IHJlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdydWJfdWludDhfdCBncmVlbiwKKyAg ICAgICAgICAgICAgICAgICAgICAgIGdydWJfdWludDhfdCBibHVlKQoreworICBpZiAoKHJl bmRlcl90YXJnZXQtPm1vZGVfaW5mby5tb2RlX3R5cGUgCisgICAgICAgJiBHUlVCX1ZJREVP X01PREVfVFlQRV9JTkRFWF9DT0xPUikgIT0gMCkKKyAgICB7CisgICAgICBpbnQgbWluaW5k ZXggPSAwOworICAgICAgaW50IGRlbHRhID0gMDsKKyAgICAgIGludCB0bXA7CisgICAgICBp bnQgdmFsOworICAgICAgaW50IGk7CisgICAgICAKKyAgICAgIC8qIEZpbmQgYmVzdCBtYXRj aGluZyBjb2xvci4gICovCisgICAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisgICAg ICAgIHsKKyAgICAgICAgICB2YWwgPSBmcmFtZWJ1ZmZlci5wYWxldHRlW2ldLnIgLSByZWQ7 CisgICAgICAgICAgdG1wID0gdmFsICogdmFsOworICAgICAgICAgIHZhbCA9IGZyYW1lYnVm ZmVyLnBhbGV0dGVbaV0uZyAtIGdyZWVuOworICAgICAgICAgIHRtcCArPSB2YWwgKiB2YWw7 CisgICAgICAgICAgdmFsID0gZnJhbWVidWZmZXIucGFsZXR0ZVtpXS5iIC0gYmx1ZTsKKyAg ICAgICAgICB0bXAgKz0gdmFsICogdmFsOworICAgICAgICAgIAorICAgICAgICAgIGlmIChp ID09IDApCisgICAgICAgICAgICBkZWx0YSA9IHRtcDsKKyAgICAgICAgICAKKyAgICAgICAg ICBpZiAodG1wIDwgZGVsdGEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGRlbHRh ID0gdG1wOworICAgICAgICAgICAgICBtaW5pbmRleCA9IGk7CisgICAgICAgICAgICAgIGlm ICh0bXAgPT0gMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgICAgCisgICAgICByZXR1cm4gbWluaW5kZXg7CiAgICAgfQogICBlbHNl CiAgICAgewotICAgICAgY29sb3IgJj0gMHgwRjsKKyAgICAgIGdydWJfdWludDMyX3QgdmFs dWU7CisgICAgICBncnViX3VpbnQ4X3QgYWxwaGEgPSAyNTU7IC8qIE9wYXF1ZSBjb2xvci4g ICovCiAgICAgICAKLSAgICAgIGlmIChjb2xvciA8IDE2KQotCXsKLQkgIGdydWJfdmJlX3Nl dF9waXhlbF9yZ2IgKHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Z2FfY29sb3JzW2NvbG9yXS5y ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmdhX2NvbG9yc1tjb2xv cl0uZ3JlZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmdhX2NvbG9y c1tjb2xvcl0uYmx1ZSk7Ci0JfQorICAgICAgcmVkID4+PSA4IC0gcmVuZGVyX3RhcmdldC0+ bW9kZV9pbmZvLnJlZF9tYXNrX3NpemU7CisgICAgICBncmVlbiA+Pj0gOCAtIHJlbmRlcl90 YXJnZXQtPm1vZGVfaW5mby5ncmVlbl9tYXNrX3NpemU7CisgICAgICBibHVlID4+PSA4IC0g cmVuZGVyX3RhcmdldC0+bW9kZV9pbmZvLmJsdWVfbWFza19zaXplOworICAgICAgYWxwaGEg Pj49IDggLSByZW5kZXJfdGFyZ2V0LT5tb2RlX2luZm8ucmVzZXJ2ZWRfbWFza19zaXplOwor CisgICAgICB2YWx1ZSA9IHJlZCA8PCByZW5kZXJfdGFyZ2V0LT5tb2RlX2luZm8ucmVkX2Zp ZWxkX3BvczsKKyAgICAgIHZhbHVlIHw9IGdyZWVuIDw8IHJlbmRlcl90YXJnZXQtPm1vZGVf aW5mby5ncmVlbl9maWVsZF9wb3M7CisgICAgICB2YWx1ZSB8PSBibHVlIDw8IHJlbmRlcl90 YXJnZXQtPm1vZGVfaW5mby5ibHVlX2ZpZWxkX3BvczsKKyAgICAgIHZhbHVlIHw9IGFscGhh IDw8IHJlbmRlcl90YXJnZXQtPm1vZGVfaW5mby5yZXNlcnZlZF9maWVsZF9wb3M7CisgICAg ICAKKyAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKK30KKworc3RhdGljIGdydWJfY29s b3JfdAorZ3J1Yl92aWRlb192YmVfbWFwX3JnYmEgKGdydWJfdWludDhfdCByZWQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgZ3J1Yl91aW50OF90IGdyZWVuLAorICAgICAgICAgICAg ICAgICAgICAgICAgIGdydWJfdWludDhfdCBibHVlLAorICAgICAgICAgICAgICAgICAgICAg ICAgIGdydWJfdWludDhfdCBhbHBoYSkKK3sKKyAgaWYgKChyZW5kZXJfdGFyZ2V0LT5tb2Rl X2luZm8ubW9kZV90eXBlIAorICAgICAgICYgR1JVQl9WSURFT19NT0RFX1RZUEVfSU5ERVhf Q09MT1IpICE9IDApCisgICAgeworICAgICAgLyogTm8gYWxwaGEgYXZhaWxhYmxlIGluIGlu ZGV4IGNvbG9yIG1vZGVzLCBqdXN0IHVzZQorICAgICAgICAgc2FtZSB2YWx1ZSBhcyBpbiBv bmx5IFJHQiBtb2Rlcy4gICovCisgICAgICByZXR1cm4gZ3J1Yl92aWRlb192YmVfbWFwX3Jn YiAocmVkLCBncmVlbiwgYmx1ZSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZ3J1 Yl91aW50MzJfdCB2YWx1ZTsKKyAgICAgIAorICAgICAgcmVkID4+PSA4IC0gcmVuZGVyX3Rh cmdldC0+bW9kZV9pbmZvLnJlZF9tYXNrX3NpemU7CisgICAgICBncmVlbiA+Pj0gOCAtIHJl bmRlcl90YXJnZXQtPm1vZGVfaW5mby5ncmVlbl9tYXNrX3NpemU7CisgICAgICBibHVlID4+ PSA4IC0gcmVuZGVyX3RhcmdldC0+bW9kZV9pbmZvLmJsdWVfbWFza19zaXplOworICAgICAg YWxwaGEgPj49IDggLSByZW5kZXJfdGFyZ2V0LT5tb2RlX2luZm8ucmVzZXJ2ZWRfbWFza19z aXplOworCisgICAgICB2YWx1ZSA9IHJlZCA8PCByZW5kZXJfdGFyZ2V0LT5tb2RlX2luZm8u cmVkX2ZpZWxkX3BvczsKKyAgICAgIHZhbHVlIHw9IGdyZWVuIDw8IHJlbmRlcl90YXJnZXQt Pm1vZGVfaW5mby5ncmVlbl9maWVsZF9wb3M7CisgICAgICB2YWx1ZSB8PSBibHVlIDw8IHJl bmRlcl90YXJnZXQtPm1vZGVfaW5mby5ibHVlX2ZpZWxkX3BvczsKKyAgICAgIHZhbHVlIHw9 IGFscGhhIDw8IHJlbmRlcl90YXJnZXQtPm1vZGVfaW5mby5yZXNlcnZlZF9maWVsZF9wb3M7 CisgICAgICAKKyAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk CitncnViX3ZpZGVvX3ZiZV91bm1hcF9jb2xvciAoc3RydWN0IGdydWJfdmlkZW9fcmVuZGVy X3RhcmdldCAqIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnViX2Nv bG9yX3QgY29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3J1Yl91aW50OF90 ICogcmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdydWJfdWludDhfdCAqIGdy ZWVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdydWJfdWludDhfdCAqIGJsdWUs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3J1Yl91aW50OF90ICogYWxwaGEpCit7 CisgIGlmICgoc291cmNlLT5tb2RlX2luZm8ubW9kZV90eXBlIAorICAgICAgICYgR1JVQl9W SURFT19NT0RFX1RZUEVfSU5ERVhfQ09MT1IpICE9IDApCisgICAgeworICAgICAgLyogSWYg d2UgaGF2ZSBvdXQgb2YgYm91bmRzIGNvbG9yLCByZXR1cm4gdHJhc25wYXJlbnQgYmxhY2su ICAqLworICAgICAgaWYgKGNvbG9yID4gMjU1KQorICAgICAgICB7CisgICAgICAgICAgKnJl ZCA9IDA7CisgICAgICAgICAgKmdyZWVuID0gMDsKKyAgICAgICAgICAqYmx1ZSA9IDA7Cisg ICAgICAgICAgKmFscGhhID0gMDsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg ICAgICAgCisgICAgICAqcmVkID0gZnJhbWVidWZmZXIucGFsZXR0ZVtjb2xvcl0ucjsKKyAg ICAgICpncmVlbiA9IGZyYW1lYnVmZmVyLnBhbGV0dGVbY29sb3JdLmc7CisgICAgICAqYmx1 ZSA9IGZyYW1lYnVmZmVyLnBhbGV0dGVbY29sb3JdLmI7CisgICAgICAqYWxwaGEgPSBmcmFt ZWJ1ZmZlci5wYWxldHRlW2NvbG9yXS5hOworICAgICAgcmV0dXJuOworICAgIH0KKyAgZWxz ZQorICAgIHsgICAgICAKKyAgICAgIGdydWJfdWludDMyX3QgdG1wOworICAgICAgCisgICAg ICAvKiBHZXQgcmVkIGNvbXBvbmVudC4gICovCisgICAgICB0bXAgPSBjb2xvciA+PiBzb3Vy Y2UtPm1vZGVfaW5mby5yZWRfZmllbGRfcG9zOworICAgICAgdG1wICY9ICgxIDw8IHNvdXJj ZS0+bW9kZV9pbmZvLnJlZF9tYXNrX3NpemUpIC0gMTsKKyAgICAgIHRtcCA8PD0gOCAtIHNv dXJjZS0+bW9kZV9pbmZvLnJlZF9tYXNrX3NpemU7CisgICAgICB0bXAgfD0gKDEgPDwgKDgg LSBzb3VyY2UtPm1vZGVfaW5mby5yZWRfbWFza19zaXplKSkgLSAxOworICAgICAgKnJlZCA9 IHRtcCAmIDB4RkY7CisKKyAgICAgIC8qIEdldCBncmVlbiBjb21wb25lbnQuICAqLworICAg ICAgdG1wID0gY29sb3IgPj4gc291cmNlLT5tb2RlX2luZm8uZ3JlZW5fZmllbGRfcG9zOwor ICAgICAgdG1wICY9ICgxIDw8IHNvdXJjZS0+bW9kZV9pbmZvLmdyZWVuX21hc2tfc2l6ZSkg LSAxOworICAgICAgdG1wIDw8PSA4IC0gc291cmNlLT5tb2RlX2luZm8uZ3JlZW5fbWFza19z aXplOworICAgICAgdG1wIHw9ICgxIDw8ICg4IC0gc291cmNlLT5tb2RlX2luZm8uZ3JlZW5f bWFza19zaXplKSkgLSAxOworICAgICAgKmdyZWVuID0gdG1wICYgMHhGRjsKKworICAgICAg LyogR2V0IGJsdWUgY29tcG9uZW50LiAgKi8KKyAgICAgIHRtcCA9IGNvbG9yID4+IHNvdXJj ZS0+bW9kZV9pbmZvLmJsdWVfZmllbGRfcG9zOworICAgICAgdG1wICY9ICgxIDw8IHNvdXJj ZS0+bW9kZV9pbmZvLmJsdWVfbWFza19zaXplKSAtIDE7CisgICAgICB0bXAgPDw9IDggLSBz b3VyY2UtPm1vZGVfaW5mby5ibHVlX21hc2tfc2l6ZTsKKyAgICAgIHRtcCB8PSAoMSA8PCAo OCAtIHNvdXJjZS0+bW9kZV9pbmZvLmJsdWVfbWFza19zaXplKSkgLSAxOworICAgICAgKmJs dWUgPSB0bXAgJiAweEZGOworCisgICAgICAvKiBHZXQgYWxwaGEgY29tcG9uZW50LiAgKi8K KyAgICAgIGlmIChzb3VyY2UtPm1vZGVfaW5mby5yZXNlcnZlZF9tYXNrX3NpemUgPiAwKQor ICAgICAgICB7CisgICAgICAgICAgdG1wID0gY29sb3IgPj4gc291cmNlLT5tb2RlX2luZm8u cmVzZXJ2ZWRfZmllbGRfcG9zOworICAgICAgICAgIHRtcCAmPSAoMSA8PCBzb3VyY2UtPm1v ZGVfaW5mby5yZXNlcnZlZF9tYXNrX3NpemUpIC0gMTsKKyAgICAgICAgICB0bXAgPDw9IDgg LSBzb3VyY2UtPm1vZGVfaW5mby5yZXNlcnZlZF9tYXNrX3NpemU7CisgICAgICAgICAgdG1w IHw9ICgxIDw8ICg4IC0gc291cmNlLT5tb2RlX2luZm8ucmVzZXJ2ZWRfbWFza19zaXplKSkg LSAxOworICAgICAgICB9CiAgICAgICBlbHNlCi0JewotCSAgZ3J1Yl92YmVfc2V0X3BpeGVs X3JnYiAoeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5LAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsK LQl9CisgICAgICAgIHsKKyAgICAgICAgICAvKiBJZiB0aGVyZSBpcyBubyBhbHBoYSBjb21w b25lbnQsIGFzc3VtZSBpdCBvcGFxdWUuICAqLworICAgICAgICAgIHRtcCA9IDI1NTsKKyAg ICAgICAgfQorCisgICAgICAqYWxwaGEgPSB0bXAgJiAweEZGOworICAgIH0KK30KKworc3Rh dGljIGdydWJfZXJyX3QKK2dydWJfdmlkZW9fdmJlX2ZpbGxfcmVjdCAoZ3J1Yl9jb2xvcl90 IGNvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IHksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGludCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50 IGhlaWdodCkKK3sKKyAgdW5zaWduZWQgaW50IGksIGo7CisKKyAgLyogTWFrZSBzdXJlIHRo ZXJlIGlzIHNvbWV0aGluZyB0byBkby4gICovCisgIGlmICgoeCA+IChpbnQpcmVuZGVyX3Rh cmdldC0+dmlld3BvcnQud2lkdGgpIHx8ICh4ICsgKGludCl3aWR0aCA8IDApKQorICAgIHJl dHVybiBHUlVCX0VSUl9OT05FOworICBpZiAoKHkgPiAoaW50KXJlbmRlcl90YXJnZXQtPnZp ZXdwb3J0LmhlaWdodCkgfHwgKHkgKyAoaW50KWhlaWdodCA8IDApKQorICAgIHJldHVybiBH UlVCX0VSUl9OT05FOworCisgIC8qIERvIG5vdCBhbGxvdyBkcmF3aW5nIG91dCBvZiB2aWV3 cG9ydC4gICovCisgIGlmICh4IDwgMCkKKyAgICB7CisgICAgICB3aWR0aCArPSB4OworICAg ICAgeCA9IDA7CisgICAgfQorICBpZiAoeSA8IDApCisgICAgeworICAgICAgaGVpZ2h0ICs9 IHk7CisgICAgICB5ID0gMDsKKyAgICB9CisgIAorICBpZiAoKHggKyB3aWR0aCkgPiByZW5k ZXJfdGFyZ2V0LT52aWV3cG9ydC53aWR0aCkKKyAgICB7CisgICAgICB3aWR0aCA9IHJlbmRl cl90YXJnZXQtPnZpZXdwb3J0LndpZHRoIC0geDsKKyAgICB9CisgIGlmICgoeSArIGhlaWdo dCkgPiByZW5kZXJfdGFyZ2V0LT52aWV3cG9ydC5oZWlnaHQpCisgICAgeworICAgICAgaGVp Z2h0ID0gcmVuZGVyX3RhcmdldC0+dmlld3BvcnQuaGVpZ2h0IC0geTsKKyAgICB9CisKKyAg Ly8gYWRkIHZpZXdwb3J0IG9mZnNldAorICB4ICs9IHJlbmRlcl90YXJnZXQtPnZpZXdwb3J0 Lng7CisgIHkgKz0gcmVuZGVyX3RhcmdldC0+dmlld3BvcnQueTsKKworICBmb3IgKGogPSAw OyBqIDwgaGVpZ2h0OyBqKyspCisgICAgeworICAgICAgZm9yIChpID0gMDsgaSA8IHdpZHRo OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICBncnViX3ZpZGVvX3ZiZV9kcmF3X3BpeGVs ICh4K2ksIHkraiwgY29sb3IpOworICAgICAgICB9CisgICAgfQorICAKKyAgcmV0dXJuIEdS VUJfRVJSX05PTkU7Cit9CisKK3N0YXRpYyBncnViX2Vycl90CitncnViX3ZpZGVvX3ZiZV9i bGl0X2dseXBoIChzdHJ1Y3QgZ3J1Yl9mb250X2dseXBoICogZ2x5cGgsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBncnViX2NvbG9yX3QgY29sb3IsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB5KQor eworICB1bnNpZ25lZCBpbnQgd2lkdGg7CisgIHVuc2lnbmVkIGludCBjaGFyd2lkdGg7Cisg IHVuc2lnbmVkIGludCBoZWlnaHQ7CisgIHVuc2lnbmVkIGludCBpOworICB1bnNpZ25lZCBp bnQgajsKKyAgdW5zaWduZWQgaW50IHhfb2Zmc2V0ID0gMDsKKyAgdW5zaWduZWQgaW50IHlf b2Zmc2V0ID0gMDsKKyAgCisgIC8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBzb21ldGhpbmcgdG8g ZG8uICAqLworICBpZiAoeCA+IChpbnQpcmVuZGVyX3RhcmdldC0+dmlld3BvcnQud2lkdGgp CisgICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7CisgICAgCisgIGlmICh5ID4gKGludClyZW5k ZXJfdGFyZ2V0LT52aWV3cG9ydC5oZWlnaHQpCisgICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7 CisKKyAgLyogQ2FsY3VsYXRlIGdseXBoIGRpbWVuc2lvbnMuICAqLworICB3aWR0aCA9ICgo Z2x5cGgtPndpZHRoICsgNykgLyA4KSAqIDg7CisgIGNoYXJ3aWR0aCA9IHdpZHRoOworICBo ZWlnaHQgPSBnbHlwaC0+aGVpZ2h0OworICAKKyAgaWYgKHggKyAoaW50KXdpZHRoIDwgMCkK KyAgICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKKyAgICAKKyAgaWYgKHkgKyAoaW50KWhlaWdo dCA8IDApCisgICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7CisKKyAgLyogRG8gbm90IGFsbG93 IGRyYXdpbmcgb3V0IG9mIHZpZXdwb3J0LiAgKi8KKyAgaWYgKHggPCAwKQorICAgIHsKKyAg ICAgIHdpZHRoICs9IHg7CisgICAgICB4X29mZnNldCA9ICh1bnNpZ25lZCBpbnQpLXg7Cisg ICAgICB4ID0gMDsKKyAgICB9CisgIGlmICh5IDwgMCkKKyAgICB7CisgICAgICBoZWlnaHQg Kz0geTsKKyAgICAgIHlfb2Zmc2V0ID0gKHVuc2lnbmVkIGludCkteTsKKyAgICAgIHkgPSAw OworICAgIH0KKyAgCisgIGlmICgoeCArIHdpZHRoKSA+IHJlbmRlcl90YXJnZXQtPnZpZXdw b3J0LndpZHRoKQorICAgIHsKKyAgICAgIHdpZHRoID0gcmVuZGVyX3RhcmdldC0+dmlld3Bv cnQud2lkdGggLSB4OworICAgIH0KKyAgaWYgKCh5ICsgaGVpZ2h0KSA+IHJlbmRlcl90YXJn ZXQtPnZpZXdwb3J0LmhlaWdodCkKKyAgICB7CisgICAgICBoZWlnaHQgPSByZW5kZXJfdGFy Z2V0LT52aWV3cG9ydC5oZWlnaHQgLSB5OworICAgIH0KKworICAvKiBBZGQgdmlld3BvcnQg b2Zmc2V0LiAgKi8KKyAgeCArPSByZW5kZXJfdGFyZ2V0LT52aWV3cG9ydC54OworICB5ICs9 IHJlbmRlcl90YXJnZXQtPnZpZXdwb3J0Lnk7CisgIAorICAvKiBEcmF3IGdseXBoLiAgKi8K KyAgZm9yIChqID0gMDsgaiA8IGhlaWdodDsgaisrKQorICAgIHsKKyAgICAgIGZvciAoaSA9 IDA7IGkgPCB3aWR0aDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgaWYgKChnbHlwaC0+ Yml0bWFwWygoaSArIHhfb2Zmc2V0KSAvIDgpIAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICArIChqICsgeV9vZmZzZXQpICogKGNoYXJ3aWR0aCAvIDgpXSAKKyAgICAgICAgICAg ICAgICYgKDEgPDwgKChjaGFyd2lkdGggLSAoaSArIHhfb2Zmc2V0KSAtIDEpICUgOCkpKSkK KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZ3J1Yl92aWRlb192YmVfZHJhd19waXhl bCAoeCtpLCB5K2osIGNvbG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K KworICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKK30KKworc3RhdGljIGdydWJfZXJyX3QKK2dy dWJfdmlkZW9fdmJlX2JsaXRfYml0bWFwIChzdHJ1Y3QgZ3J1Yl92aWRlb19iaXRtYXAgKiBi aXRtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IG9mZnNldF94LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXRf eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgd2lkdGgsICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGludCBoZWlnaHQpCit7CisgIC8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBzb21l dGhpbmcgdG8gZG8uICAqLworICBpZiAoKHggPiAoaW50KXJlbmRlcl90YXJnZXQtPnZpZXdw b3J0LndpZHRoKSB8fCAoeCArIChpbnQpd2lkdGggPCAwKSkKKyAgICByZXR1cm4gR1JVQl9F UlJfTk9ORTsKKyAgaWYgKCh5ID4gKGludClyZW5kZXJfdGFyZ2V0LT52aWV3cG9ydC5oZWln aHQpIHx8ICh5ICsgKGludCloZWlnaHQgPCAwKSkKKyAgICByZXR1cm4gR1JVQl9FUlJfTk9O RTsKKworICAvKiBEbyBub3QgYWxsb3cgZHJhd2luZyBvdXQgb2Ygdmlld3BvcnQuICAqLwor ICBpZiAob2Zmc2V0X3ggPCAwKQorICAgIHsKKyAgICAgIHdpZHRoICs9IG9mZnNldF94Owor ICAgICAgeCAtPSBvZmZzZXRfeDsKKyAgICAgIG9mZnNldF94ID0gMDsKKyAgICB9CisgICAg CisgIGlmIChvZmZzZXRfeSA8IDApCisgICAgeworICAgICAgaGVpZ2h0ICs9IG9mZnNldF95 OworICAgICAgeSAtPSBvZmZzZXRfeTsKKyAgICAgIG9mZnNldF95ID0gMDsKKyAgICB9CisK KyAgaWYgKHggPCAwKQorICAgIHsKKyAgICAgIHdpZHRoICs9IHg7CisgICAgICBvZmZzZXRf eCArPSAodW5zaWduZWQgaW50KS14OworICAgICAgeCA9IDA7CisgICAgfQorICBpZiAoeSA8 IDApCisgICAgeworICAgICAgaGVpZ2h0ICs9IHk7CisgICAgICBvZmZzZXRfeSArPSAodW5z aWduZWQgaW50KS15OworICAgICAgeSA9IDA7CisgICAgfQorICAKKyAgaWYgKCh4ICsgd2lk dGgpID4gcmVuZGVyX3RhcmdldC0+dmlld3BvcnQud2lkdGgpCisgICAgeworICAgICAgd2lk dGggPSByZW5kZXJfdGFyZ2V0LT52aWV3cG9ydC53aWR0aCAtIHg7CisgICAgfQorICBpZiAo KHkgKyBoZWlnaHQpID4gcmVuZGVyX3RhcmdldC0+dmlld3BvcnQuaGVpZ2h0KQorICAgIHsK KyAgICAgIGhlaWdodCA9IHJlbmRlcl90YXJnZXQtPnZpZXdwb3J0LmhlaWdodCAtIHk7Cisg ICAgfQorCisgIC8qIFRPRE86IExpbWl0IGRyYXdpbmcgdG8gYml0bWFwIGRpbWVuc2lvbnMu ICAqLworCisgIC8qIEFkZCB2aWV3cG9ydCBvZmZzZXQuICAqLworICB4ICs9IHJlbmRlcl90 YXJnZXQtPnZpZXdwb3J0Lng7CisgIHkgKz0gcmVuZGVyX3RhcmdldC0+dmlld3BvcnQueTsK KworICAvKiBUT0RPOiBSZW5kZXIgYml0bWFwLiAgKi8KKworICByZXR1cm4gR1JVQl9FUlJf Tk9ORTsKK30KKworc3RhdGljIGdydWJfZXJyX3QKK2dydWJfdmlkZW9fdmJlX2JsaXRfcmVu ZGVyX3RhcmdldCAoc3RydWN0IGdydWJfdmlkZW9fcmVuZGVyX3RhcmdldCAqIHNvdXJjZSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCB5LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgb2Zmc2V0X3gsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBvZmZzZXRfeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBpbnQgaGVpZ2h0KQoreworICB1bnNpZ25lZCBpbnQgaTsKKyAg dW5zaWduZWQgaW50IGo7CisKKyAgLyogTWFrZSBzdXJlIHRoZXJlIGlzIHNvbWV0aGluZyB0 byBkby4gICovCisgIGlmICgod2lkdGggPT0gMCkgfHwgKGhlaWdodCA9PSAwKSkKKyAgICBy ZXR1cm4gR1JVQl9FUlJfTk9ORTsKKyAgaWYgKCh4ID4gKGludClyZW5kZXJfdGFyZ2V0LT52 aWV3cG9ydC53aWR0aCkgfHwgKHggKyAoaW50KXdpZHRoIDwgMCkpCisgICAgcmV0dXJuIEdS VUJfRVJSX05PTkU7CisgIGlmICgoeSA+IChpbnQpcmVuZGVyX3RhcmdldC0+dmlld3BvcnQu aGVpZ2h0KSB8fCAoeSArIChpbnQpaGVpZ2h0IDwgMCkpCisgICAgcmV0dXJuIEdSVUJfRVJS X05PTkU7ICAgIAorICBpZiAoKHggKyAoaW50KXNvdXJjZS0+bW9kZV9pbmZvLndpZHRoKSA8 IDApCisgICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7CisgIGlmICgoeSArIChpbnQpc291cmNl LT5tb2RlX2luZm8uaGVpZ2h0KSA8IDApCisgICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7ICAg IAorICBpZiAoKG9mZnNldF94ID4gKGludClzb3VyY2UtPm1vZGVfaW5mby53aWR0aCkgCisg ICAgICB8fCAob2Zmc2V0X3ggKyAoaW50KXNvdXJjZS0+bW9kZV9pbmZvLndpZHRoIDwgMCkp CisgICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7CisgIGlmICgob2Zmc2V0X3kgPiAoaW50KXNv dXJjZS0+bW9kZV9pbmZvLmhlaWdodCkgCisgICAgICB8fCAob2Zmc2V0X3kgKyAoaW50KXNv dXJjZS0+bW9kZV9pbmZvLmhlaWdodCA8IDApKQorICAgIHJldHVybiBHUlVCX0VSUl9OT05F OyAgICAKKworICAvKiBJZiB3ZSBoYXZlIG5lZ2F0aXZlIGNvb3JkaW50ZXMsIG9wdGltaXpl IGRyYXdpbmcgdG8gbWluaW11bS4gICovCisgIGlmIChvZmZzZXRfeCA8IDApCisgICAgewor ICAgICAgd2lkdGggKz0gb2Zmc2V0X3g7CisgICAgICB4IC09IG9mZnNldF94OworICAgICAg b2Zmc2V0X3ggPSAwOworICAgIH0KKyAgICAKKyAgaWYgKG9mZnNldF95IDwgMCkKKyAgICB7 CisgICAgICBoZWlnaHQgKz0gb2Zmc2V0X3k7CisgICAgICB5IC09IG9mZnNldF95OworICAg ICAgb2Zmc2V0X3kgPSAwOworICAgIH0KKyAgICAKKyAgaWYgKHggPCAwKQorICAgIHsKKyAg ICAgIHdpZHRoICs9IHg7CisgICAgICBvZmZzZXRfeCArPSAodW5zaWduZWQgaW50KS14Owor ICAgICAgeCA9IDA7CisgICAgfQorICAgIAorICBpZiAoeSA8IDApCisgICAgeworICAgICAg aGVpZ2h0ICs9IHk7CisgICAgICBvZmZzZXRfeSArPSAodW5zaWduZWQgaW50KS15OworICAg ICAgeSA9IDA7CisgICAgfQorICAKKyAgLyogRG8gbm90IGFsbG93IGRyYXdpbmcgb3V0IG9m IHZpZXdwb3J0LiAgKi8KKyAgaWYgKCh4ICsgd2lkdGgpID4gcmVuZGVyX3RhcmdldC0+dmll d3BvcnQud2lkdGgpCisgICAgeworICAgICAgd2lkdGggPSByZW5kZXJfdGFyZ2V0LT52aWV3 cG9ydC53aWR0aCAtIHg7CisgICAgfQorICBpZiAoKHkgKyBoZWlnaHQpID4gcmVuZGVyX3Rh cmdldC0+dmlld3BvcnQuaGVpZ2h0KQorICAgIHsKKyAgICAgIGhlaWdodCA9IHJlbmRlcl90 YXJnZXQtPnZpZXdwb3J0LmhlaWdodCAtIHk7CisgICAgfQorICAKKyAgaWYgKChvZmZzZXRf eCArIHdpZHRoKSA+IHNvdXJjZS0+bW9kZV9pbmZvLndpZHRoKQorICAgIHsKKyAgICAgIHdp ZHRoID0gc291cmNlLT5tb2RlX2luZm8ud2lkdGggLSBvZmZzZXRfeDsKKyAgICB9CisgIGlm ICgob2Zmc2V0X3kgKyBoZWlnaHQpID4gc291cmNlLT5tb2RlX2luZm8uaGVpZ2h0KQorICAg IHsKKyAgICAgIGhlaWdodCA9IHNvdXJjZS0+bW9kZV9pbmZvLmhlaWdodCAtIG9mZnNldF95 OworICAgIH0KKyAgCisgIC8qIExpbWl0IGRyYXdpbmcgdG8gc291cmNlIHJlbmRlciB0YXJn ZXQgZGltZW5zaW9ucy4gICovCisgIGlmICh3aWR0aCA+IHNvdXJjZS0+bW9kZV9pbmZvLndp ZHRoKQorICAgIHsKKyAgICAgIHdpZHRoID0gc291cmNlLT5tb2RlX2luZm8ud2lkdGg7Cisg ICAgfQorICAKKyAgaWYgKGhlaWdodCA+IHNvdXJjZS0+bW9kZV9pbmZvLmhlaWdodCkKKyAg ICB7CisgICAgICBoZWlnaHQgPSBzb3VyY2UtPm1vZGVfaW5mby5oZWlnaHQ7CisgICAgfQor CisgIC8qIEFkZCB2aWV3cG9ydCBvZmZzZXQuICAqLworICB4ICs9IHJlbmRlcl90YXJnZXQt PnZpZXdwb3J0Lng7CisgIHkgKz0gcmVuZGVyX3RhcmdldC0+dmlld3BvcnQueTsKKworICAv KiBSZW5kZXIuICAqLworICBmb3IgKGogPSAwOyBqIDwgaGVpZ2h0OyBqKyspCisgICAgewor ICAgICAgZm9yIChpID0gMDsgaSA8IHdpZHRoOyBpKyspCisgICAgICAgIHsgICAgICAgICAg ICAgIAorICAgICAgICAgIGdydWJfdWludDhfdCBzcmNfcmVkOworICAgICAgICAgIGdydWJf dWludDhfdCBzcmNfZ3JlZW47CisgICAgICAgICAgZ3J1Yl91aW50OF90IHNyY19ibHVlOwor ICAgICAgICAgIGdydWJfdWludDhfdCBzcmNfYWxwaGE7CisgICAgICAgICAgZ3J1Yl91aW50 OF90IGRzdF9yZWQ7CisgICAgICAgICAgZ3J1Yl91aW50OF90IGRzdF9ncmVlbjsKKyAgICAg ICAgICBncnViX3VpbnQ4X3QgZHN0X2JsdWU7CisgICAgICAgICAgZ3J1Yl91aW50OF90IGRz dF9hbHBoYTsKKyAgICAgICAgICBncnViX2NvbG9yX3Qgc3JjX2NvbG9yOworICAgICAgICAg IGdydWJfY29sb3JfdCBkc3RfY29sb3I7CisgICAgICAgICAgCisgICAgICAgICAgc3JjX2Nv bG9yID0gZ3J1Yl92aWRlb192YmVfZ2V0X3BpeGVsIChzb3VyY2UsIGkgKyBvZmZzZXRfeCwg aiArIG9mZnNldF95KTsKKyAgICAgICAgICBncnViX3ZpZGVvX3ZiZV91bm1hcF9jb2xvciAo c291cmNlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2Nv bG9yLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNyY19yZWQs IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3JjX2dyZWVuLCAK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNyY19ibHVlLCAKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNyY19hbHBoYSk7CisgICAg ICAgICAgICAgIAorICAgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgY29udGludWU7Cisg ICAgICAgICAgCisgICAgICAgICAgaWYgKHNyY19hbHBoYSA9PSAyNTUpCisgICAgICAgICAg ICB7CisgICAgICAgICAgICAgIGRzdF9jb2xvciA9IGdydWJfdmlkZW9fdmJlX21hcF9yZ2Jh IChzcmNfcmVkLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNyY19ncmVlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNyY19ibHVlLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhKTsKKyAgICAgICAgICAgICAg IGdydWJfdmlkZW9fdmJlX2RyYXdfcGl4ZWwgKHggKyBpLCB5ICsgaiwgZHN0X2NvbG9yKTsK KyAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAg ZHN0X2NvbG9yID0gZ3J1Yl92aWRlb192YmVfZ2V0X3BpeGVsIChyZW5kZXJfdGFyZ2V0LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCArIGks CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ICsg aik7CisgICAgICAgICAgCisgICAgICAgICAgZ3J1Yl92aWRlb192YmVfdW5tYXBfY29sb3Ig KHJlbmRlcl90YXJnZXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkc3RfY29sb3IsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm ZHN0X3JlZCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkc3Rf Z3JlZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZHN0X2Js dWUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZHN0X2FscGhh KTsKKyAgICAgICAgICAKKyAgICAgICAgICBkc3RfcmVkID0gKCgoc3JjX3JlZCAqIHNyY19h bHBoYSkKKyAgICAgICAgICAgICAgICAgICAgICArIChkc3RfcmVkICogKDI1NSAtIHNyY19h bHBoYSkpKSAvIDI1NSk7CisgICAgICAgICAgZHN0X2dyZWVuID0gKCgoc3JjX2dyZWVuICog c3JjX2FscGhhKQorICAgICAgICAgICAgICAgICAgICAgICAgKyAoZHN0X2dyZWVuICogKDI1 NSAtIHNyY19hbHBoYSkpKSAvIDI1NSk7CisgICAgICAgICAgZHN0X2JsdWUgPSAoKChzcmNf Ymx1ZSAqIHNyY19hbHBoYSkKKyAgICAgICAgICAgICAgICAgICAgICAgKyAoZHN0X2JsdWUg KiAoMjU1IC0gc3JjX2FscGhhKSkpIC8gMjU1KTsKKyAgICAgICAgICAgICAgICAgICAgCisg ICAgICAgICAgZHN0X2FscGhhID0gc3JjX2FscGhhOworICAgICAgICAgIGRzdF9jb2xvciA9 IGdydWJfdmlkZW9fdmJlX21hcF9yZ2JhIChkc3RfcmVkLCAKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0X2dyZWVuLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RfYmx1ZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0X2FscGhhKTsKKwor ICAgICAgICAgICBncnViX3ZpZGVvX3ZiZV9kcmF3X3BpeGVsICh4ICsgaSwgeSArIGosIGRz dF9jb2xvcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7 Cit9CisKK3N0YXRpYyBncnViX2Vycl90CitncnViX3ZpZGVvX3ZiZV9zY3JvbGwgKGdydWJf Y29sb3JfdCBjb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IGR4LAorICAgICAg ICAgICAgICAgICAgICAgICBpbnQgZHkpCit7CisgIGludCB3aWR0aDsKKyAgaW50IGhlaWdo dDsKKyAgaW50IHNyY194OworICBpbnQgc3JjX3k7CisgIGludCBkc3RfeDsKKyAgaW50IGRz dF95OworICAKKyAgLyogVE9ETzogRml4IHggJiB5IGhhbmRsaW5nLiAgKi8KKyAgCisgIC8q IDEuIENoZWNrIGlmIHdlIGhhdmUgc29tZXRoaW5nIHRvIGRvLiAgKi8KKyAgaWYgKChkeCA9 PSAwKSAmJiAoZHkgPT0gMCkpCisgICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7CisKKyAgd2lk dGggPSByZW5kZXJfdGFyZ2V0LT52aWV3cG9ydC53aWR0aCAtIGdydWJfYWJzKGR4KTsKKyAg aGVpZ2h0ID0gcmVuZGVyX3RhcmdldC0+dmlld3BvcnQuaGVpZ2h0IC0gZ3J1Yl9hYnMoZHkp OworICAKKyAgaWYgKGR4IDwgMCkKKyAgICB7CisgICAgICBzcmNfeCA9IHJlbmRlcl90YXJn ZXQtPnZpZXdwb3J0LnggLSBkeDsKKyAgICAgIGRzdF94ID0gcmVuZGVyX3RhcmdldC0+dmll d3BvcnQueDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBzcmNfeCA9IHJlbmRlcl90 YXJnZXQtPnZpZXdwb3J0Lng7CisgICAgICBkc3RfeCA9IHJlbmRlcl90YXJnZXQtPnZpZXdw b3J0LnggKyBkeDsKKyAgICB9CisKKyAgaWYgKGR5IDwgMCkKKyAgICB7CisgICAgICBzcmNf eSA9IHJlbmRlcl90YXJnZXQtPnZpZXdwb3J0LnkgLSBkeTsKKyAgICAgIGRzdF95ID0gcmVu ZGVyX3RhcmdldC0+dmlld3BvcnQueTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBz cmNfeSA9IHJlbmRlcl90YXJnZXQtPnZpZXdwb3J0Lnk7CisgICAgICBkc3RfeSA9IHJlbmRl cl90YXJnZXQtPnZpZXdwb3J0LnkgKyBkeTsKKyAgICB9CisKKyAgLyogMi4gQ2hlY2sgaWYg dGhlcmUgaXMgbmVlZCB0byBjb3B5IGRhdGEuICAqLworICBpZiAoKGdydWJfYWJzIChkeCkg PCByZW5kZXJfdGFyZ2V0LT52aWV3cG9ydC53aWR0aCkgCisgICAgICAgJiYgKGdydWJfYWJz IChkeSkgPCByZW5kZXJfdGFyZ2V0LT52aWV3cG9ydC5oZWlnaHQpKQorICAgIHsKKyAgICAg IC8qIDMuIE1vdmUgZGF0YSBpbiByZW5kZXIgdGFyZ2V0LiAgKi8KKyAgICAgIGdydWJfdWlu dDhfdCAqc3JjOworICAgICAgZ3J1Yl91aW50OF90ICpkc3Q7CisgICAgICBpbnQgajsKKyAg ICAgICAgICAgIAorICAgICAgZm9yIChqID0gMDsgaiA8IGhlaWdodDsgaisrKQorICAgICAg ICB7CisgICAgICAgICAgZHN0ID0gZ3J1Yl92aWRlb192YmVfZ2V0X3ZpZGVvX3B0ciAocmVu ZGVyX3RhcmdldCwgZHN0X3gsIGRzdF95ICsgaik7CisgICAgICAgICAgc3JjID0gZ3J1Yl92 aWRlb192YmVfZ2V0X3ZpZGVvX3B0ciAocmVuZGVyX3RhcmdldCwgc3JjX3gsIHNyY195ICsg aik7CisgICAgICAgICAgZ3J1Yl9tZW1tb3ZlIChkc3QsIAorICAgICAgICAgICAgICAgICAg ICAgICAgc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggKiByZW5kZXJfdGFy Z2V0LT5tb2RlX2luZm8uYnl0ZXNfcGVyX3BpeGVsKTsKKyAgICAgICAgfQorICAgIH0KKyAg CisgIC8qIDQuIEZpbGwgZW1wdHkgc3BhY2Ugd2l0aCBzcGVjaWZpZWQgY29sb3IuIEluIHRo aXMgaW1wbGVtZW50YXRpb24KKyAgICAgdGhlcmUgbWlnaHQgYmUgY29sbGlkaW5nIGFyZWFz IGJ1dCBhdCB0aGUgbW9tZW50IHRoZXJlIGlzIG5vIG5lZWQKKyAgICAgdG8gb3B0aW1pemUg dGhpcy4gICovCisKKyAgLy8gVE9ETzogUFJPT0ZSRUFEIFRISVMhLgorICAKKyAgLyogNGEu IEZpbGwgdG9wICYgYm90dG9tIHBhcnRzLiAgKi8KKyAgaWYgKGR5ID4gMCkKKyAgICB7Cisg ICAgICBncnViX3ZpZGVvX3ZiZV9maWxsX3JlY3QgKGNvbG9yLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZW5kZXJfdGFyZ2V0LT52aWV3cG9ydC53aWR0aCwgZHkpOworICAgIH0KKyAgZWxzZSBp ZiAoZHkgPCAwKQorICAgIHsKKyAgICAgIGlmIChyZW5kZXJfdGFyZ2V0LT52aWV3cG9ydC5o ZWlnaHQgPCBncnViX2FicyhkeSkpCisgICAgICAgIGR5ID0gLXJlbmRlcl90YXJnZXQtPnZp ZXdwb3J0LmhlaWdodDsKKyAgICAgICAgCisgICAgICBncnViX3ZpZGVvX3ZiZV9maWxsX3Jl Y3QgKGNvbG9yLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgcmVuZGVy X3RhcmdldC0+dmlld3BvcnQuaGVpZ2h0ICsgZHksIAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByZW5kZXJfdGFyZ2V0LT52aWV3cG9ydC53aWR0aCwgLWR5KTsKKyAgICB9 CisKKyAgLyogNGIuIEZpbGwgbGVmdCAmIHJpZ2h0IHBhcnRzLiAgKi8KKyAgaWYgKGR4ID4g MCkKKyAgICB7CisgICAgICBncnViX3ZpZGVvX3ZiZV9maWxsX3JlY3QgKGNvbG9yLCAKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGR4LCByZW5kZXJfdGFyZ2V0LT52aWV3cG9ydC5oZWlnaHQpOwor ICAgIH0KKyAgZWxzZSBpZiAoZHggPCAwKQorICAgIHsKKyAgICAgIGlmIChyZW5kZXJfdGFy Z2V0LT52aWV3cG9ydC53aWR0aCA8IGdydWJfYWJzKGR4KSkKKyAgICAgICAgZHggPSAtcmVu ZGVyX3RhcmdldC0+dmlld3BvcnQud2lkdGg7CisgICAgICAgIAorICAgICAgZ3J1Yl92aWRl b192YmVfZmlsbF9yZWN0IChjb2xvciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJlbmRlcl90YXJnZXQtPnZpZXdwb3J0LndpZHRoICsgZHgsIDAsIAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAtZHgsIHJlbmRlcl90YXJnZXQtPnZpZXdwb3J0Lmhl aWdodCk7CisgICAgfQorICAKKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cit9CisKK3N0YXRp YyBncnViX2Vycl90IAorZ3J1Yl92aWRlb192YmVfc3dhcF9idWZmZXJzICh2b2lkKQorewor ICAvKiBUT0RPOiBJbXBsZW1lbnQgYnVmZmVyIHN3YXBwaW5nLiAgKi8KKyAgcmV0dXJuIEdS VUJfRVJSX05PTkU7Cit9CisKK3N0YXRpYyBncnViX2Vycl90CitncnViX3ZpZGVvX3ZiZV9j cmVhdGVfcmVuZGVyX3RhcmdldCAoc3RydWN0IGdydWJfdmlkZW9fcmVuZGVyX3RhcmdldCAq ICogcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGludCBtb2RlX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGludCBoZWlnaHQpCit7CisgIHN0cnVjdCBncnViX3ZpZGVvX3Jl bmRlcl90YXJnZXQgKnRhcmdldDsKKyAgdW5zaWduZWQgaW50IHNpemU7CisgIAorICAvKiBW YWxpZGF0ZSBhcmd1bWVudHMuICAqLworICBpZiAoKCEgcmVzdWx0KQorICAgICAgfHwgKHdp ZHRoID09IDApCisgICAgICB8fCAoaGVpZ2h0ID09IDApKQorICAgIHsKKyAgICAgIHJldHVy biBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJHVU1FTlQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgImludmFsaWQgYXJndW1lbnQgZ2l2ZW4uIik7CisgICAgfQorICAKKyAgLyog QWxsb2NhdGUgbWVtb3J5IGZvciByZW5kZXIgdGFyZ2V0LiAgKi8KKyAgdGFyZ2V0ID0gZ3J1 Yl9tYWxsb2MgKHNpemVvZiAoc3RydWN0IGdydWJfdmlkZW9fcmVuZGVyX3RhcmdldCkpOwor ICBpZiAoISB0YXJnZXQpCisgICAgcmV0dXJuIGdydWJfZXJybm87CisgIAorICAvKiBUT0RP OiBJbXBsZW1lbnQgb3RoZXIgdHlwZXMgdG9vLiAgKi8KKyAgc2l6ZSA9ICh3aWR0aCAqIDQp ICogaGVpZ2h0OworICAKKyAgdGFyZ2V0LT5kYXRhID0gZ3J1Yl9tYWxsb2MgKHNpemUpOwor ICBpZiAoISB0YXJnZXQtPmRhdGEpCisgICAgeworICAgICAgZ3J1Yl9mcmVlICh0YXJnZXQp OworICAgICAgcmV0dXJuIGdydWJfZXJybm87CisgICAgfQorICAKKyAgLyogQ2xlYXIgcmVu ZGVyIHRhcmdldCB3aXRoIGJsYWNrIGFuZCBtYXhpbXVtIHRyYW5zcGFyZW5jeS4gICovCisg IGdydWJfbWVtc2V0ICh0YXJnZXQtPmRhdGEsIDAsIHNpemUpOworCisgIC8qIE1hcmsgcmVu ZGVyIHRhcmdldCBhcyBhbGxvY2F0ZWQuICAqLworICB0YXJnZXQtPmlzX2FsbG9jYXRlZCA9 IDE7CisgIAorICAvKiBNYXhpbWl6ZSB2aWV3cG9ydC4gICovCisgIHRhcmdldC0+dmlld3Bv cnQueCA9IDA7CisgIHRhcmdldC0+dmlld3BvcnQueSA9IDA7CisgIHRhcmdldC0+dmlld3Bv cnQud2lkdGggPSB3aWR0aDsKKyAgdGFyZ2V0LT52aWV3cG9ydC5oZWlnaHQgPSBoZWlnaHQ7 CisKKyAgLyogU2V0dXAgcmVuZGVyIHRhcmdldCBmb3JtYXQuICAqLworICB0YXJnZXQtPm1v ZGVfaW5mby53aWR0aCA9IHdpZHRoOworICB0YXJnZXQtPm1vZGVfaW5mby5oZWlnaHQgPSBo ZWlnaHQ7CisgIHRhcmdldC0+bW9kZV9pbmZvLm1vZGVfdHlwZSA9IEdSVUJfVklERU9fTU9E RV9UWVBFX1JHQiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHUlVCX1ZJ REVPX01PREVfVFlQRV9BTFBIQTsKKyAgdGFyZ2V0LT5tb2RlX2luZm8uYnBwID0gMzI7Cisg IHRhcmdldC0+bW9kZV9pbmZvLmJ5dGVzX3Blcl9waXhlbCA9IDQ7CisgIHRhcmdldC0+bW9k ZV9pbmZvLnBpdGNoID0gdGFyZ2V0LT5tb2RlX2luZm8uYnl0ZXNfcGVyX3BpeGVsICogd2lk dGg7CisgIHRhcmdldC0+bW9kZV9pbmZvLm51bWJlcl9vZl9jb2xvcnMgPSAyNTY7CisgIHRh cmdldC0+bW9kZV9pbmZvLnJlZF9tYXNrX3NpemUgPSA4OworICB0YXJnZXQtPm1vZGVfaW5m by5yZWRfZmllbGRfcG9zID0gMDsKKyAgdGFyZ2V0LT5tb2RlX2luZm8uZ3JlZW5fbWFza19z aXplID0gODsKKyAgdGFyZ2V0LT5tb2RlX2luZm8uZ3JlZW5fZmllbGRfcG9zID0gODsKKyAg dGFyZ2V0LT5tb2RlX2luZm8uYmx1ZV9tYXNrX3NpemUgPSA4OworICB0YXJnZXQtPm1vZGVf aW5mby5ibHVlX2ZpZWxkX3BvcyA9IDE2OworICB0YXJnZXQtPm1vZGVfaW5mby5yZXNlcnZl ZF9tYXNrX3NpemUgPSA4OworICB0YXJnZXQtPm1vZGVfaW5mby5yZXNlcnZlZF9maWVsZF9w b3MgPSAyNDsKKworICAvKiBUT0RPOiBBZGQgcmVuZGVyIHRhcmdldCB0byByZW5kZXIgdGFy Z2V0IGxpc3QuICAqLworICAKKyAgLyogU2F2ZSByZXN1bHQgdG8gY2FsbGVyLiAgKi8KKyAg KnJlc3VsdCA9IHRhcmdldDsKKyAgCisgIHJldHVybiBHUlVCX0VSUl9OT05FOworfQorCitz dGF0aWMgZ3J1Yl9lcnJfdAorZ3J1Yl92aWRlb192YmVfZGVsZXRlX3JlbmRlcl90YXJnZXQg KHN0cnVjdCBncnViX3ZpZGVvX3JlbmRlcl90YXJnZXQgKiB0YXJnZXQpCit7CisgIC8qIElm IHRoZXJlIGlzIG5vIHRhcmdldCwgdGhlbiBqdXN0IHJldHVybiB3aXRob3V0IGVycm9yLiAg Ki8KKyAgaWYgKCEgdGFyZ2V0KQorICAgIHsKKyAgICAgIHJldHVybiBHUlVCX0VSUl9OT05F OworICAgIH0KKyAgICAKKyAgLyogVE9ETzogRGVsaXN0IHJlbmRlciB0YXJnZXQgZnJvbiBy ZW5kZXIgdGFyZ2V0IGxpc3QuICAqLworICAgIAorICAvKiBJZiB0aGlzIGlzIHNvZnR3YXJl IHJlbmRlciB0YXJnZXQsIGZyZWUgaXQncyBtZW1vcnkuICAqLworICBpZiAodGFyZ2V0LT5p c19hbGxvY2F0ZWQpCisgICAgeworICAgICAgZ3J1Yl9mcmVlICh0YXJnZXQtPmRhdGEpOwor ICAgIH0gICAgICAgIAorICAgICAgICAKKyAgLyogRnJlZSByZW5kZXIgdGFyZ2V0LiAgKi8K KyAgZ3J1Yl9mcmVlICh0YXJnZXQpOworICAKKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cit9 CisKK3N0YXRpYyBncnViX2Vycl90CitncnViX3ZpZGVvX3ZiZV9zZXRfYWN0aXZlX3JlbmRl cl90YXJnZXQgKHN0cnVjdCBncnViX3ZpZGVvX3JlbmRlcl90YXJnZXQgKiB0YXJnZXQpCit7 CisgIGlmICh0YXJnZXQgPT0gR1JVQl9WSURFT19SRU5ERVJfVEFSR0VUX0ZST05UX0JVRkZF UikKKyAgICB7CisgICAgICByZW5kZXJfdGFyZ2V0ID0gJmZyYW1lYnVmZmVyLnJlbmRlcl90 YXJnZXQ7CisgICAgICAKKyAgICAgIHJldHVybiBHUlVCX0VSUl9OT05FOwogICAgIH0KKyAg CisgIGlmICh0YXJnZXQgPT0gR1JVQl9WSURFT19SRU5ERVJfVEFSR0VUX0JBQ0tfQlVGRkVS KQorICAgIHsKKyAgICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9OT1RfSU1QTEVN RU5URURfWUVULCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZG91YmxlIGJ1ZmZlcmlu ZyBub3QgaW1wbGVtZW50ZWQgeWV0LiIpOworICAgIH0KKyAgICAKKyAgaWYgKCEgdGFyZ2V0 LT5kYXRhKQorICAgIHsKKyAgICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURf QVJHVU1FTlQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHJlbmRlciB0 YXJnZXQgZ2l2ZW4uIik7CisgICAgfQorICAKKyAgcmVuZGVyX3RhcmdldCA9IHRhcmdldDsK KyAgCisgIHJldHVybiBHUlVCX0VSUl9OT05FOworfQorCitzdGF0aWMgc3RydWN0IGdydWJf dmlkZW9fYWRhcHRlciBncnViX3ZpZGVvX3ZiZV9hZGFwdGVyID0KKyAgeworICAgIC5uYW1l ID0gIlZFU0EgQklPUyBFeHRlbnNpb24gVmlkZW8gRHJpdmVyIiwKKworICAgIC5pbml0ID0g Z3J1Yl92aWRlb192YmVfaW5pdCwKKyAgICAuZmluaSA9IGdydWJfdmlkZW9fdmJlX2Zpbmks CisgICAgLnNldHVwID0gZ3J1Yl92aWRlb192YmVfc2V0dXAsCisgICAgLmdldF9pbmZvID0g Z3J1Yl92aWRlb192YmVfZ2V0X2luZm8sCisgICAgLnNldF9wYWxldHRlID0gZ3J1Yl92aWRl b192YmVfc2V0X3BhbGV0dGUsCisgICAgLmdldF9wYWxldHRlID0gZ3J1Yl92aWRlb192YmVf Z2V0X3BhbGV0dGUsCisgICAgLnNldF92aWV3cG9ydCA9IGdydWJfdmlkZW9fdmJlX3NldF92 aWV3cG9ydCwKKyAgICAuZ2V0X3ZpZXdwb3J0ID0gZ3J1Yl92aWRlb192YmVfZ2V0X3ZpZXdw b3J0LAorICAgIC5tYXBfY29sb3IgPSBncnViX3ZpZGVvX3ZiZV9tYXBfY29sb3IsCisgICAg Lm1hcF9yZ2IgPSBncnViX3ZpZGVvX3ZiZV9tYXBfcmdiLAorICAgIC5tYXBfcmdiYSA9IGdy dWJfdmlkZW9fdmJlX21hcF9yZ2JhLAorICAgIC5maWxsX3JlY3QgPSBncnViX3ZpZGVvX3Zi ZV9maWxsX3JlY3QsCisgICAgLmJsaXRfZ2x5cGggPSBncnViX3ZpZGVvX3ZiZV9ibGl0X2ds eXBoLAorICAgIC5ibGl0X2JpdG1hcCA9IGdydWJfdmlkZW9fdmJlX2JsaXRfYml0bWFwLAor ICAgIC5ibGl0X3JlbmRlcl90YXJnZXQgPSBncnViX3ZpZGVvX3ZiZV9ibGl0X3JlbmRlcl90 YXJnZXQsCisgICAgLnNjcm9sbCA9IGdydWJfdmlkZW9fdmJlX3Njcm9sbCwKKyAgICAuc3dh cF9idWZmZXJzID0gZ3J1Yl92aWRlb192YmVfc3dhcF9idWZmZXJzLAorICAgIC5jcmVhdGVf cmVuZGVyX3RhcmdldCA9IGdydWJfdmlkZW9fdmJlX2NyZWF0ZV9yZW5kZXJfdGFyZ2V0LAor ICAgIC5kZWxldGVfcmVuZGVyX3RhcmdldCA9IGdydWJfdmlkZW9fdmJlX2RlbGV0ZV9yZW5k ZXJfdGFyZ2V0LAorICAgIC5zZXRfYWN0aXZlX3JlbmRlcl90YXJnZXQgPSBncnViX3ZpZGVv X3ZiZV9zZXRfYWN0aXZlX3JlbmRlcl90YXJnZXQsCisgICAgCisgICAgLm5leHQgPSAwICAK KyAgfTsKKworR1JVQl9NT0RfSU5JVCh2aWRlb19pMzg2X3BjX3ZiZSkKK3sKKyAgbXlfbW9k ID0gbW9kOworICBncnViX3ZpZGVvX3JlZ2lzdGVyICgmZ3J1Yl92aWRlb192YmVfYWRhcHRl cik7Cit9CisKK0dSVUJfTU9EX0ZJTkkodmlkZW9faTM4Nl9wY19vdmJlKQoreworICBncnVi X3ZpZGVvX3VucmVnaXN0ZXIgKCZncnViX3ZpZGVvX3ZiZV9hZGFwdGVyKTsKIH0KZGlmZiAt cnVOIC14ICcqQ1ZTKicgZ3J1YjIvdmlkZW8vdmlkZW8uYyBncnViMi5uZXcvdmlkZW8vdmlk ZW8uYwotLS0gZ3J1YjIvdmlkZW8vdmlkZW8uYwkxOTcwLTAxLTAxIDAyOjAwOjAwLjAwMDAw MDAwMCArMDIwMAorKysgZ3J1YjIubmV3L3ZpZGVvL3ZpZGVvLmMJMjAwNi0wMy0wMiAxNjo0 OToxMy4wMjIyODMyNTYgKzAyMDAKQEAgLTAsMCArMSw0ODIgQEAKKy8qCisgKiAgR1JVQiAg LS0gIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlcgorICogIENvcHlyaWdodCAoQykgMjAwNSAg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz IHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3Vu ZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4K KyAqLworCisjaW5jbHVkZSA8Z3J1Yi9tYWNoaW5lL21lbW9yeS5oPgorI2luY2x1ZGUgPGdy dWIvdmlkZW8uaD4KKyNpbmNsdWRlIDxncnViL3R5cGVzLmg+CisjaW5jbHVkZSA8Z3J1Yi9k bC5oPgorI2luY2x1ZGUgPGdydWIvbWlzYy5oPgorI2luY2x1ZGUgPGdydWIvbm9ybWFsLmg+ CisjaW5jbHVkZSA8Z3J1Yi9mb250Lmg+CisjaW5jbHVkZSA8Z3J1Yi9hcmcuaD4KKyNpbmNs dWRlIDxncnViL21tLmg+CisjaW5jbHVkZSA8Z3J1Yi9lbnYuaD4KKyNpbmNsdWRlIDxncnVi L2ZvbnQuaD4KKyNpbmNsdWRlIDxncnViL3Rlcm0uaD4KKworLyogVGhlIGxpc3Qgb2Ygdmlk ZW8gYWRhcHRlcnMgcmVnaXN0ZXJkIHRvIHN5c3RlbS4gICovCitzdGF0aWMgZ3J1Yl92aWRl b19hZGFwdGVyX3QgZ3J1Yl92aWRlb19hZGFwdGVyX2xpc3Q7CisKKy8qIEFjdGl2ZSB2aWRl byBhZGFwdGVyLiAgKi8KK3N0YXRpYyBncnViX3ZpZGVvX2FkYXB0ZXJfdCBncnViX3ZpZGVv X2FkYXB0ZXJfYWN0aXZlOworCitzdGF0aWMgZ3J1Yl9kbF90IG15X21vZDsKKwordm9pZAor Z3J1Yl92aWRlb19yZWdpc3RlciAoZ3J1Yl92aWRlb19hZGFwdGVyX3QgYWRhcHRlcikKK3sK KyAgYWRhcHRlci0+bmV4dCA9IGdydWJfdmlkZW9fYWRhcHRlcl9saXN0OworICBncnViX3Zp ZGVvX2FkYXB0ZXJfbGlzdCA9IGFkYXB0ZXI7Cit9CisKK3ZvaWQKK2dydWJfdmlkZW9fdW5y ZWdpc3RlciAoZ3J1Yl92aWRlb19hZGFwdGVyX3QgYWRhcHRlcikKK3sKKyAgZ3J1Yl92aWRl b19hZGFwdGVyX3QgKnAsIHE7CisgIAorICBmb3IgKHAgPSAmZ3J1Yl92aWRlb19hZGFwdGVy X2xpc3QsIHEgPSAqcDsgcTsgcCA9ICYocS0+bmV4dCksIHEgPSBxLT5uZXh0KQorICAgIGlm IChxID09IGFkYXB0ZXIpCisgICAgICB7CisgICAgICAgICpwID0gcS0+bmV4dDsKKyAgICAg ICAgYnJlYWs7CisgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Cit9CisKK3ZvaWQKK2dydWJfdmlkZW9faXRlcmF0ZSAoaW50ICgqaG9vaykgKGdydWJfdmlk ZW9fYWRhcHRlcl90IGFkYXB0ZXIpKQoreworICBncnViX3ZpZGVvX2FkYXB0ZXJfdCBwOwor ICAKKyAgZm9yIChwID0gZ3J1Yl92aWRlb19hZGFwdGVyX2xpc3Q7IHA7IHAgPSBwLT5uZXh0 KQorICAgIGlmIChob29rIChwKSkKKyAgICAgIGJyZWFrOworfQorCitncnViX2Vycl90Citn cnViX3ZpZGVvX3NldHVwICh1bnNpZ25lZCBpbnQgd2lkdGgsCisgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBpbnQgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50 IG1vZGVfdHlwZSkKK3sKKyAgZ3J1Yl92aWRlb19hZGFwdGVyX3QgcDsKKworICAvKiBEZS1h Y3RpdmF0ZSBsYXN0IHNldCB2aWRlbyBhZGFwdGVyLiAgKi8KKyAgaWYgKGdydWJfdmlkZW9f YWRhcHRlcl9hY3RpdmUpCisgICAgeworICAgICAgLyogRmluYWxpemUgYWRhcHRlci4gICov CisgICAgICBncnViX3ZpZGVvX2FkYXB0ZXJfYWN0aXZlLT5maW5pICgpOworICAgICAgaWYg KGdydWJfZXJybm8gIT0gR1JVQl9FUlJfTk9ORSkKKyAgICAgICAgcmV0dXJuIGdydWJfZXJy bm87CisgICAgICAgIAorICAgICAgLyogTWFyayBhY3RpdmUgYWRhcHRlciBhcyBub3Qgc2V0 LiAgKi8KKyAgICAgIGdydWJfdmlkZW9fYWRhcHRlcl9hY3RpdmUgPSAwOworICAgIH0KKyAg CisgIC8qIExvb3AgdGhydSBhbGwgcG9zc2libGUgdmlkZW8gYWRhcHRlciB0cnlpbmcgdG8g ZmluZCByZXF1ZXN0ZWQgbW9kZS4gICovCisgIGZvciAocCA9IGdydWJfdmlkZW9fYWRhcHRl cl9saXN0OyBwOyBwID0gcC0+bmV4dCkKKyAgICB7CisgICAgICAvKiBUcnkgdG8gaW5pdGlh bGl6ZSBhZGFwdGVyLCBpZiBjYW4ndCBza2lwIHRvIG5leHQuICAqLworICAgICAgcC0+aW5p dCAoKTsKKyAgICAgIGlmIChncnViX2Vycm5vICE9IEdSVUJfRVJSX05PTkUpCisgICAgICAg IHsKKyAgICAgICAgICBncnViX2Vycm5vID0gR1JVQl9FUlJfTk9ORTsKKyAgICAgICAgICBj b250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAvKiBUcnkgdG8gaW5pdGlhbGl6ZSB2aWRl byBtb2RlLiAgKi8gICAgICAKKyAgICAgIHAtPnNldHVwICh3aWR0aCwgaGVpZ2h0LCBtb2Rl X3R5cGUpOworICAgICAgaWYgKGdydWJfZXJybm8gPT0gR1JVQl9FUlJfTk9ORSkKKyAgICAg ICAgeworICAgICAgICAgIC8qIFZhbGlkIG1vZGUgZm91bmQgZnJvbSBhZGFwdGVyLCBhbmQg aXQgaGFzIGJlZW4gYWN0aXZhdGVkLgorICAgICAgICAgICAgIFNwZWNpZnkgaXQgYXMgYWN0 aXZlIGFkYXB0ZXIuICAqLworICAgICAgICAgIGdydWJfdmlkZW9fYWRhcHRlcl9hY3RpdmUg PSBwOworICAgICAgICAgIHJldHVybiBHUlVCX0VSUl9OT05FOworICAgICAgICB9CisgICAg ICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBncnViX2Vycm5vID0gR1JVQl9FUlJfTk9O RTsgICAgICAgIAorICAgICAgICB9CisKKyAgICAgIC8qIE5vIHZhbGlkIG1vZGUgZm91bmQg aW4gdGhpcyBhZGFwdGVyLCBmaW5hbGl6ZSBhZGFwdGVyLiAgKi8KKyAgICAgIHAtPmZpbmkg KCk7CisgICAgICBpZiAoZ3J1Yl9lcnJubyAhPSBHUlVCX0VSUl9OT05FKQorICAgICAgICBy ZXR1cm4gZ3J1Yl9lcnJubzsKKyAgICB9CisgIAorICAvKiBXZSBjb3VsZG4ndCBmaW5kIHN1 aXRhYmxlIGFkYXB0ZXIgZm9yIHNwZWNpZmllZCBtb2RlLiAgKi8KKyAgcmV0dXJuIGdydWJf ZXJyb3IgKEdSVUJfRVJSX1VOS05PV05fREVWSUNFLCAKKyAgICAgICAgICAgICAgICAgICAg ICJDYW4ndCBsb2NhdGUgdmFsaWQgYWRhcHRlciBmb3IgbW9kZSIpOworfQorCitncnViX2Vy cl90CitncnViX3ZpZGVvX3Jlc3RvcmUgKHZvaWQpCit7CisgIGlmIChncnViX3ZpZGVvX2Fk YXB0ZXJfYWN0aXZlKQorICAgIHsKKyAgICAgIGdydWJfdmlkZW9fYWRhcHRlcl9hY3RpdmUt PmZpbmkgKCk7CisgICAgICBpZiAoZ3J1Yl9lcnJubyAhPSBHUlVCX0VSUl9OT05FKQorICAg ICAgICByZXR1cm4gZ3J1Yl9lcnJubzsKKyAgICAgIAorICAgICAgZ3J1Yl92aWRlb19hZGFw dGVyX2FjdGl2ZSA9IDA7CisgICAgfQorICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKK30KKwor Z3J1Yl9lcnJfdAorZ3J1Yl92aWRlb19nZXRfaW5mbyAoc3RydWN0IGdydWJfdmlkZW9fbW9k ZV9pbmZvICogbW9kZV9pbmZvKQoreworICBpZiAoISBncnViX3ZpZGVvX2FkYXB0ZXJfYWN0 aXZlKQorICAgIHsKKyAgICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfREVW SUNFLCAiTm8gdmlkZW8gbW9kZSBhY3RpdmF0ZWQiKTsKKyAgICB9CisgIAorICByZXR1cm4g Z3J1Yl92aWRlb19hZGFwdGVyX2FjdGl2ZS0+Z2V0X2luZm8gKG1vZGVfaW5mbyk7Cit9CisK K2dydWJfZXJyX3QKK2dydWJfdmlkZW9fc2V0X3BhbGV0dGUgKHVuc2lnbmVkIGludCBzdGFy dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3VudCwKKyAgICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBncnViX3ZpZGVvX3BhbGV0dGVfZGF0YSAqcGFs ZXR0ZV9kYXRhKQoreworICBpZiAoISBncnViX3ZpZGVvX2FkYXB0ZXJfYWN0aXZlKQorICAg IHsKKyAgICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfREVWSUNFLCAiTm8g dmlkZW8gbW9kZSBhY3RpdmF0ZWQiKTsKKyAgICB9CisgIAorICByZXR1cm4gZ3J1Yl92aWRl b19hZGFwdGVyX2FjdGl2ZS0+c2V0X3BhbGV0dGUgKHN0YXJ0LCBjb3VudCwgcGFsZXR0ZV9k YXRhKTsKK30KKworZ3J1Yl9lcnJfdAorZ3J1Yl92aWRlb19nZXRfcGFsZXR0ZSAodW5zaWdu ZWQgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNv dW50LAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGdydWJfdmlkZW9fcGFsZXR0 ZV9kYXRhICpwYWxldHRlX2RhdGEpCit7CisgIGlmICghIGdydWJfdmlkZW9fYWRhcHRlcl9h Y3RpdmUpCisgICAgeworICAgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9E RVZJQ0UsICJObyB2aWRlbyBtb2RlIGFjdGl2YXRlZCIpOworICAgIH0KKyAgCisgIHJldHVy biBncnViX3ZpZGVvX2FkYXB0ZXJfYWN0aXZlLT5nZXRfcGFsZXR0ZSAoc3RhcnQsIGNvdW50 LCBwYWxldHRlX2RhdGEpOworfQorCitncnViX2Vycl90CitncnViX3ZpZGVvX3NldF92aWV3 cG9ydCAodW5zaWduZWQgaW50IHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgaW50IHksCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHdpZHRo LAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoZWlnaHQpCit7Cisg IGlmICghIGdydWJfdmlkZW9fYWRhcHRlcl9hY3RpdmUpCisgICAgeworICAgICAgcmV0dXJu IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9ERVZJQ0UsICJObyB2aWRlbyBtb2RlIGFjdGl2 YXRlZCIpOworICAgIH0KKworICByZXR1cm4gZ3J1Yl92aWRlb19hZGFwdGVyX2FjdGl2ZS0+ c2V0X3ZpZXdwb3J0ICh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKworZ3J1Yl9lcnJfdAor Z3J1Yl92aWRlb19nZXRfdmlld3BvcnQgKHVuc2lnbmVkIGludCAqIHgsCisgICAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICogeSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBpbnQgKiB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBpbnQgKiBoZWlnaHQpCit7CisgIGlmICghIGdydWJfdmlkZW9fYWRhcHRlcl9h Y3RpdmUpCisgICAgeworICAgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9E RVZJQ0UsICJObyB2aWRlbyBtb2RlIGFjdGl2YXRlZCIpOworICAgIH0KKworICByZXR1cm4g Z3J1Yl92aWRlb19hZGFwdGVyX2FjdGl2ZS0+Z2V0X3ZpZXdwb3J0ICh4LCB5LCB3aWR0aCwg aGVpZ2h0KTsKK30KKworZ3J1Yl9jb2xvcl90CitncnViX3ZpZGVvX21hcF9jb2xvciAoZ3J1 Yl91aW50MzJfdCBjb2xvcl9uYW1lKQoreworICBpZiAoISBncnViX3ZpZGVvX2FkYXB0ZXJf YWN0aXZlKQorICAgIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICByZXR1cm4gZ3J1 Yl92aWRlb19hZGFwdGVyX2FjdGl2ZS0+bWFwX2NvbG9yIChjb2xvcl9uYW1lKTsKK30KKwor Z3J1Yl9jb2xvcl90CitncnViX3ZpZGVvX21hcF9yZ2IgKGdydWJfdWludDhfdCByZWQsCisg ICAgICAgICAgICAgICAgICAgIGdydWJfdWludDhfdCBncmVlbiwKKyAgICAgICAgICAgICAg ICAgICAgZ3J1Yl91aW50OF90IGJsdWUpCit7CisgIGlmICghIGdydWJfdmlkZW9fYWRhcHRl cl9hY3RpdmUpCisgICAgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgIHJldHVybiBn cnViX3ZpZGVvX2FkYXB0ZXJfYWN0aXZlLT5tYXBfcmdiIChyZWQsIGdyZWVuLCBibHVlKTsK K30KKworZ3J1Yl9jb2xvcl90CitncnViX3ZpZGVvX21hcF9yZ2JhIChncnViX3VpbnQ4X3Qg cmVkLAorICAgICAgICAgICAgICAgICAgICAgZ3J1Yl91aW50OF90IGdyZWVuLAorICAgICAg ICAgICAgICAgICAgICAgZ3J1Yl91aW50OF90IGJsdWUsCisgICAgICAgICAgICAgICAgICAg ICBncnViX3VpbnQ4X3QgYWxwaGEpCit7CisgIGlmICghIGdydWJfdmlkZW9fYWRhcHRlcl9h Y3RpdmUpCisgICAgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgIHJldHVybiBncnVi X3ZpZGVvX2FkYXB0ZXJfYWN0aXZlLT5tYXBfcmdiYSAocmVkLCBncmVlbiwgYmx1ZSwgYWxw aGEpOworfQorCitncnViX2Vycl90CitncnViX3ZpZGVvX2ZpbGxfcmVjdCAoZ3J1Yl9jb2xv cl90IGNvbG9yLAorICAgICAgICAgICAgICAgICAgICAgIGludCB4LAorICAgICAgICAgICAg ICAgICAgICAgIGludCB5LAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB3 aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaGVpZ2h0KQorewor ICBpZiAoISBncnViX3ZpZGVvX2FkYXB0ZXJfYWN0aXZlKQorICAgIHsKKyAgICAgIHJldHVy biBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfREVWSUNFLCAiTm8gdmlkZW8gbW9kZSBhY3Rp dmF0ZWQiKTsKKyAgICB9CisKKyAgcmV0dXJuIGdydWJfdmlkZW9fYWRhcHRlcl9hY3RpdmUt PmZpbGxfcmVjdCAoY29sb3IsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworfQorCitncnViX2Vy cl90CitncnViX3ZpZGVvX2JsaXRfZ2x5cGggKHN0cnVjdCBncnViX2ZvbnRfZ2x5cGggKiBn bHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgZ3J1Yl9jb2xvcl90IGNvbG9yLAorICAg ICAgICAgICAgICAgICAgICAgICBpbnQgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50 IHkpCit7CisgIGlmICghIGdydWJfdmlkZW9fYWRhcHRlcl9hY3RpdmUpCisgICAgeworICAg ICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9ERVZJQ0UsICJObyB2aWRlbyBt b2RlIGFjdGl2YXRlZCIpOworICAgIH0KKworICByZXR1cm4gZ3J1Yl92aWRlb19hZGFwdGVy X2FjdGl2ZS0+YmxpdF9nbHlwaCAoZ2x5cGgsIGNvbG9yLCB4LCB5KTsKK30KKworZ3J1Yl9l cnJfdAorZ3J1Yl92aWRlb19ibGl0X2JpdG1hcCAoc3RydWN0IGdydWJfdmlkZW9fYml0bWFw ICogYml0bWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsCisgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBvZmZz ZXRfeCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXRfeSwKKyAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB3aWR0aCwKKyAgICAgICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGludCBoZWlnaHQpCit7CisgIGlmICghIGdydWJfdmlkZW9fYWRh cHRlcl9hY3RpdmUpCisgICAgeworICAgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJS X0JBRF9ERVZJQ0UsICJObyB2aWRlbyBtb2RlIGFjdGl2YXRlZCIpOworICAgIH0KKworICBy ZXR1cm4gZ3J1Yl92aWRlb19hZGFwdGVyX2FjdGl2ZS0+YmxpdF9iaXRtYXAgKGJpdG1hcCwg CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwg eSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg b2Zmc2V0X3gsIG9mZnNldF95LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQpOworfQorCitncnViX2Vycl90CitncnVi X3ZpZGVvX2JsaXRfcmVuZGVyX3RhcmdldCAoc3RydWN0IGdydWJfdmlkZW9fcmVuZGVyX3Rh cmdldCAqIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0X3gsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IG9mZnNldF95LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGludCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBpbnQgaGVpZ2h0KQoreworICBpZiAoISBncnViX3ZpZGVvX2FkYXB0ZXJfYWN0 aXZlKQorICAgIHsKKyAgICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfREVW SUNFLCAiTm8gdmlkZW8gbW9kZSBhY3RpdmF0ZWQiKTsKKyAgICB9CisKKyAgcmV0dXJuIGdy dWJfdmlkZW9fYWRhcHRlcl9hY3RpdmUtPmJsaXRfcmVuZGVyX3RhcmdldCAodGFyZ2V0LCAK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgeCwgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgb2Zmc2V0X3gsIG9mZnNldF95LCAKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCk7Cit9 CisKK2dydWJfZXJyX3QKK2dydWJfdmlkZW9fc2Nyb2xsIChncnViX2NvbG9yX3QgY29sb3Is CisgICAgICAgICAgICAgICAgICAgaW50IGR4LAorICAgICAgICAgICAgICAgICAgIGludCBk eSkKK3sKKyAgaWYgKCEgZ3J1Yl92aWRlb19hZGFwdGVyX2FjdGl2ZSkKKyAgICB7CisgICAg ICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0RFVklDRSwgIk5vIHZpZGVvIG1v ZGUgYWN0aXZhdGVkIik7CisgICAgfQorCisgIHJldHVybiBncnViX3ZpZGVvX2FkYXB0ZXJf YWN0aXZlLT5zY3JvbGwgKGNvbG9yLCBkeCwgZHkpOworfQorCitncnViX2Vycl90CitncnVi X3ZpZGVvX3N3YXBfYnVmZmVycyAodm9pZCkKK3sKKyAgaWYgKCEgZ3J1Yl92aWRlb19hZGFw dGVyX2FjdGl2ZSkKKyAgICB7CisgICAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJf QkFEX0RFVklDRSwgIk5vIHZpZGVvIG1vZGUgYWN0aXZhdGVkIik7CisgICAgfQorCisgIHJl dHVybiBncnViX3ZpZGVvX2FkYXB0ZXJfYWN0aXZlLT5zd2FwX2J1ZmZlcnMgKCk7Cit9CisK K2dydWJfZXJyX3QKK2dydWJfdmlkZW9fY3JlYXRlX3JlbmRlcl90YXJnZXQgKHN0cnVjdCBn cnViX3ZpZGVvX3JlbmRlcl90YXJnZXQgKiAqIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtb2RlX3R5cGUsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgd2lkdGgsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaGVpZ2h0KQoreworICBpZiAoISBn cnViX3ZpZGVvX2FkYXB0ZXJfYWN0aXZlKQorICAgIHsKKyAgICAgIHJldHVybiBncnViX2Vy cm9yIChHUlVCX0VSUl9CQURfREVWSUNFLCAiTm8gdmlkZW8gbW9kZSBhY3RpdmF0ZWQiKTsK KyAgICB9CisKKyAgcmV0dXJuIGdydWJfdmlkZW9fYWRhcHRlcl9hY3RpdmUtPmNyZWF0ZV9y ZW5kZXJfdGFyZ2V0IChyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV90eXBlLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGhlaWdodCk7Cit9CisKK2dydWJfZXJyX3QKK2dydWJfdmlkZW9fZGVsZXRlX3JlbmRlcl90 YXJnZXQgKHN0cnVjdCBncnViX3ZpZGVvX3JlbmRlcl90YXJnZXQgKiB0YXJnZXQpCit7Cisg IGlmICghIGdydWJfdmlkZW9fYWRhcHRlcl9hY3RpdmUpCisgICAgeworICAgICAgcmV0dXJu IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9ERVZJQ0UsICJObyB2aWRlbyBtb2RlIGFjdGl2 YXRlZCIpOworICAgIH0KKworICByZXR1cm4gZ3J1Yl92aWRlb19hZGFwdGVyX2FjdGl2ZS0+ ZGVsZXRlX3JlbmRlcl90YXJnZXQgKHRhcmdldCk7Cit9CisKK2dydWJfZXJyX3QKK2dydWJf dmlkZW9fc2V0X2FjdGl2ZV9yZW5kZXJfdGFyZ2V0IChzdHJ1Y3QgZ3J1Yl92aWRlb19yZW5k ZXJfdGFyZ2V0ICogdGFyZ2V0KQoreworICBpZiAoISBncnViX3ZpZGVvX2FkYXB0ZXJfYWN0 aXZlKQorICAgIHsKKyAgICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfREVW SUNFLCAiTm8gdmlkZW8gbW9kZSBhY3RpdmF0ZWQiKTsKKyAgICB9CisKKyAgcmV0dXJuIGdy dWJfdmlkZW9fYWRhcHRlcl9hY3RpdmUtPnNldF9hY3RpdmVfcmVuZGVyX3RhcmdldCAodGFy Z2V0KTsKK30KKworc3RhdGljIGdydWJfZXJyX3QKK2dydWJfY21kX3ZpZGVvdGVzdCAoc3Ry dWN0IGdydWJfYXJnX2xpc3QgKnN0YXRlIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKyAg ICAgICAgICAgICAgICAgICAgaW50IGFyZ2MgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAor ICAgICAgICAgICAgICAgICAgICBjaGFyICoqYXJncyBfX2F0dHJpYnV0ZV9fICgodW51c2Vk KSkpCit7CisgIGlmIChncnViX3ZpZGVvX3NldHVwICgxMDI0LCAKKyAgICAgICAgICAgICAg ICAgICAgICAgIDc2OCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdSVUJfVklERU9fTU9E RV9UWVBFX0lOREVYX0NPTE9SKSAhPSBHUlVCX0VSUl9OT05FKQorICAgIHsKKyAgICAgIHJl dHVybiBncnViX2Vycm5vOworICAgIH0KKyAgCisgIGdydWJfZ2V0a2V5ICgpOworCisgIGdy dWJfdWludDMyX3QgY29sb3I7CisgIGdydWJfdWludDMyX3QgeCwgeSwgd2lkdGgsIGhlaWdo dDsKKyAgaW50IGk7CisgIHN0cnVjdCBncnViX2ZvbnRfZ2x5cGggZ2x5cGg7CisgIHN0cnVj dCBncnViX3ZpZGVvX3JlbmRlcl90YXJnZXQgKnRleHRfbGF5ZXI7CisgIGdydWJfY29sb3Jf dCBwYWxldHRlWzE2XTsKKyAgCisgIGdydWJfdmlkZW9fZ2V0X3ZpZXdwb3J0ICgmeCwgJnks ICZ3aWR0aCwgJmhlaWdodCk7CisKKyAgZ3J1Yl92aWRlb19jcmVhdGVfcmVuZGVyX3Rhcmdl dCAoJnRleHRfbGF5ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdS VUJfVklERU9fTU9ERV9UWVBFX1JHQgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8IEdSVUJfVklERU9fTU9ERV9UWVBFX0FMUEhBLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaGVpZ2h0KTsKKworICBncnViX3ZpZGVvX3NldF9hY3RpdmVfcmVuZGVyX3Rhcmdl dCAoR1JVQl9WSURFT19SRU5ERVJfVEFSR0VUX0RJU1BMQVkpOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCisKKyAgY29sb3IgPSBncnViX3ZpZGVvX21hcF9yZ2IgKDAs IDAsIDApOworICBncnViX3ZpZGVvX2ZpbGxfcmVjdCAoY29sb3IsIDAsIDAsIHdpZHRoLCBo ZWlnaHQpOworICAKKyAgY29sb3IgPSBncnViX3ZpZGVvX21hcF9yZ2IgKDI1NSwwLDApOwor ICBncnViX3ZpZGVvX2ZpbGxfcmVjdCAoY29sb3IsIDAsIDAsIDEwMCwgMTAwKTsKKyAgCisg IGNvbG9yID0gZ3J1Yl92aWRlb19tYXBfcmdiICgwLDI1NSwyNTUpOworICBncnViX3ZpZGVv X2ZpbGxfcmVjdCAoY29sb3IsIDEwMCwgMTAwLCAxMDAsIDEwMCk7CisKKyAgZ3J1Yl9mb250 X2dldF9nbHlwaCAoJyonLCAmZ2x5cGgpOyAgCisgIGdydWJfdmlkZW9fYmxpdF9nbHlwaCAo JmdseXBoLCBjb2xvciwgMjAwICwwKTsKKworICBncnViX3ZpZGVvX3NldF92aWV3cG9ydCAo eCArIDE1MCwgeSArIDE1MCwgd2lkdGggLSAxNTAqMiwgaGVpZ2h0IC0gMTUwKjIpOworICBj b2xvciA9IGdydWJfdmlkZW9fbWFwX3JnYiAoNzcsMzMsNzcpOworICBncnViX3ZpZGVvX2Zp bGxfcmVjdCAoY29sb3IsIDAsIDAsIHdpZHRoLCBoZWlnaHQpOworICAKKyAgZ3J1Yl92aWRl b19zZXRfYWN0aXZlX3JlbmRlcl90YXJnZXQgKHRleHRfbGF5ZXIpOworICAKKyAgY29sb3Ig PSBncnViX3ZpZGVvX21hcF9yZ2IgKDI1NSwyNTUsMjU1KTsKKyAgCisgIGdydWJfZm9udF9n ZXRfZ2x5cGggKCdBJywgJmdseXBoKTsgIAorICBncnViX3ZpZGVvX2JsaXRfZ2x5cGggKCZn bHlwaCwgY29sb3IsIDE2LCAxNik7CisgIGdydWJfZm9udF9nZXRfZ2x5cGggKCdCJywgJmds eXBoKTsgIAorICBncnViX3ZpZGVvX2JsaXRfZ2x5cGggKCZnbHlwaCwgY29sb3IsIDE2KjIs IDE2KTsKKworICBncnViX2ZvbnRfZ2V0X2dseXBoICgnKicsICZnbHlwaCk7ICAKKyAgCisg IGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorICAgIHsKKyAgICAgIGNvbG9yID0gZ3J1Yl92 aWRlb19tYXBfY29sb3IgKGkpOworICAgICAgcGFsZXR0ZVtpXSA9IGNvbG9yOworICAgICAg Z3J1Yl92aWRlb19ibGl0X2dseXBoICgmZ2x5cGgsIGNvbG9yLCAxNiArIGkgKiAxNiwgMzIp OworICAgIH0KKworICBncnViX3ZpZGVvX3NldF9hY3RpdmVfcmVuZGVyX3RhcmdldCAoR1JV Ql9WSURFT19SRU5ERVJfVEFSR0VUX0RJU1BMQVkpOworCisgIGZvciAoaSA9IDA7IGkgPCAy NTU7IGkrKykKKyAgICB7CisgICAgICBjb2xvciA9IGdydWJfdmlkZW9fbWFwX3JnYiAoaSwg MzMsIDc3KTsKKyAgICAgIGdydWJfdmlkZW9fZmlsbF9yZWN0IChjb2xvciwgMCwgMCwgd2lk dGgsIGhlaWdodCk7CisgICAgICBncnViX3ZpZGVvX2JsaXRfcmVuZGVyX3RhcmdldCAodGV4 dF9sYXllciwgMCwgMCwgMCwgMCwgd2lkdGgsIGhlaWdodCk7CisgICAgfQorICAKKyAgZ3J1 Yl9nZXRrZXkgKCk7CisgIAorICBncnViX3ZpZGVvX2RlbGV0ZV9yZW5kZXJfdGFyZ2V0ICh0 ZXh0X2xheWVyKTsKKyAgCisgIGdydWJfdmlkZW9fcmVzdG9yZSAoKTsKKyAgCisgIGZvciAo aSA9IDA7IGkgPCAxNjsgaSsrKQorICAgIHsKKyAgICAgIGdydWJfcHJpbnRmKCJjb2xvciAl ZDogJTA4eFxuIiwgaSwgcGFsZXR0ZVtpXSk7CisgICAgfQorICAKKyAgZ3J1Yl9lcnJubyA9 IEdSVUJfRVJSX05PTkU7CisgIHJldHVybiBncnViX2Vycm5vOworfQorCitHUlVCX01PRF9J TklUKHZpZGVvX3ZpZGVvKQoreworICBteV9tb2QgPSBtb2Q7CisKKyAgZ3J1Yl92aWRlb19h ZGFwdGVyX2FjdGl2ZSA9IDA7CisgIGdydWJfdmlkZW9fYWRhcHRlcl9saXN0ID0gMDsKKwor ICBncnViX3JlZ2lzdGVyX2NvbW1hbmQgKCJ2aWRlb3Rlc3QiLAorICAgICAgICAgICAgICAg ICAgICAgICAgIGdydWJfY21kX3ZpZGVvdGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICBHUlVCX0NPTU1BTkRfRkxBR19CT1RILAorICAgICAgICAgICAgICAgICAgICAgICAgICJ2 aWRlb3Rlc3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0IHZpZGVvIHN1YnN5 c3RlbSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgMCk7Cit9CisKK0dSVUJfTU9EX0ZJ TkkodmlkZW9fdmlkZW8pCit7CisgIGdydWJfdW5yZWdpc3Rlcl9jb21tYW5kICgidmlkZW90 ZXN0Iik7Cit9Cg== --------------070608020509020002050407--