From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22296 invoked by alias); 14 May 2012 18:29:52 -0000 Received: (qmail 22212 invoked by uid 22791); 14 May 2012 18:29:26 -0000 X-SWARE-Spam-Status: No, hits=-5.2 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,TW_CF,TW_CP,TW_FN,TW_TM,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mail-yw0-f47.google.com (HELO mail-yw0-f47.google.com) (209.85.213.47) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 14 May 2012 18:29:00 +0000 Received: by yhjj56 with SMTP id j56so4993469yhj.20 for ; Mon, 14 May 2012 11:28:59 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:x-system-of-record:x-gm-message-state; bh=CoHu9ZoSUcdp15N4S+8hBaMrFp3wdpjYrmyG2gej+jU=; b=ceSTy38L3Nt99IWtVJRcZch6GljptgdujifXcLNA9zxLq+bRQyeoQRrJKxqxfe3v5S 1n6v9Xngn7tgAw5kWKym0NAEGanIOOMXXRhYQr10iKle6kycdunBf6LhKj88rq238CMs XUDwcaKr3FfmJmX3SAQw2teb3Ak1lSOJuXvmiDBLcLHC2hPzRkYmyRxpjYL3QeFVO+UB t3dbIZfPZpQQ+o/NhAdqT7Gfew3+42Oh7DQGXNX/ieTWVqw95Q4Dg0wDcvWpb9pS6oUc sU26btYAV9vg26VzYLo4lHoo4vTRAeL2BOr3MC4nQkXxk1bbV6szq1LoKr1FN7ZCvio+ mYkg== Received: by 10.60.29.39 with SMTP id g7mr13142322oeh.6.1337020139368; Mon, 14 May 2012 11:28:59 -0700 (PDT) MIME-Version: 1.0 Received: by 10.60.29.39 with SMTP id g7mr13142294oeh.6.1337020139159; Mon, 14 May 2012 11:28:59 -0700 (PDT) Received: by 10.182.147.104 with HTTP; Mon, 14 May 2012 11:28:58 -0700 (PDT) In-Reply-To: References: <20120307004630.A503DB21B6@azwildcat.mtv.corp.google.com> Date: Mon, 14 May 2012 18:29:00 -0000 Message-ID: Subject: Re: User directed Function Multiversioning via Function Overloading (issue5752064) From: Sriraman Tallam To: "H.J. Lu" Cc: Richard Guenther , Jan Hubicka , Uros Bizjak , reply@codereview.appspotmail.com, gcc-patches@gcc.gnu.org, David Li Content-Type: multipart/mixed; boundary=e89a8ff2563273bf0904c0034292 X-System-Of-Record: true X-Gm-Message-State: ALoCoQmPQqJCu5tyvdtgtnwxVH/i41radLkO2qdonCMY2NGpc7ZmjupTBKZU9GQxL8uELnb87XR6mpM7eJQJIbpzBsiPEeO2AKVEApIb3myCz5Auo8Lc7fmbGl+gpNHSLX8QHJe9+09jNQmyZlSVAB0ZwaRlpiTPcw== X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2012-05/txt/msg00945.txt.bz2 --e89a8ff2563273bf0904c0034292 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 978 Hi H.J, Attaching new patch with 2 test cases, mv2.C checks ISAs only and mv1.C checks ISAs and arches mixed. Right now, checking only arches is not needed as they are mutually exclusive, any order should be fine. Patch also available for review here: http://codereview.appspot.com/5752064 Thanks, -Sri. On Sat, May 12, 2012 at 6:37 AM, H.J. Lu wrote: > On Fri, May 11, 2012 at 7:04 PM, Sriraman Tallam wr= ote: >> Hi H.J., >> >> =A0 I have updated the patch to improve the dispatching method like we >> discussed. Each feature gets a priority now, and the dispatching is >> done in priority order. Please see i386.c for the changes. >> >> Patch also available for review here: =A0http://codereview.appspot.com/5= 752064 >> > > I think you need 3 tests: > > 1. =A0Only with ISA. > 2. =A0Only with arch > 3. =A0Mixed with ISA and arch > > since test mixed ISA and arch may hide issues with ISA only or arch only. > > -- > H.J. --e89a8ff2563273bf0904c0034292 Content-Type: text/plain; charset=US-ASCII; name="mv_fe_patch.txt" Content-Disposition: attachment; filename="mv_fe_patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h27v9k630 Content-length: 94636 SW5kZXg6IGdjYy9kb2MvdG0udGV4aQo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSBnY2MvZG9jL3RtLnRleGkJKHJldmlzaW9uIDE4NzM3MSkKKysrIGdj Yy9kb2MvdG0udGV4aQkod29ya2luZyBjb3B5KQpAQCAtMTA5OTcsNiArMTA5 OTcsMTQgQEAgVGhlIHJlc3VsdCBpcyBhbm90aGVyIHRyZWUgY29udGFpbmlu ZyBhIHNpbXBsaWZpZWQKIGNhbGwncyByZXN1bHQuICBJZiBAdmFye2lnbm9y ZX0gaXMgdHJ1ZSB0aGUgdmFsdWUgd2lsbCBiZSBpZ25vcmVkLgogQGVuZCBk ZWZ0eXBlZm4KIAorQGRlZnR5cGVmbiB7VGFyZ2V0IEhvb2t9IGludCBUQVJH RVRfRElTUEFUQ0hfVkVSU0lPTiAodHJlZSBAdmFye2Rpc3BhdGNoX2RlY2x9 LCB2b2lkICpAdmFye2ZuZGVjbHN9LCBiYXNpY19ibG9jayAqQHZhcntlbXB0 eV9iYn0pCitGb3IgbXVsdGktdmVyc2lvbmVkIGZ1bmN0aW9uLCB0aGlzIGhv b2sgc2V0cyB1cCB0aGUgZGlzcGF0Y2hlci4KK0B2YXJ7ZGlzcGF0Y2hfZGVj bH0gaXMgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGRpc3Bh dGNoIHRoZQordmVyc2lvbi4gQHZhcntmbmRlY2xzfSBhcmUgdGhlIGZ1bmN0 aW9uIGNob2ljZXMgZm9yIGRpc3BhdGNoLgorQHZhcntlbXB0eV9iYn0gaXMg YW4gYmFzaWMgYmxvY2sgaW4gQHZhcntkaXNwYXRjaF9kZWNsfSB3aGVyZSB0 aGUKK2NvZGUgdG8gZG8gdGhlIGRpc3BhdGNoIHdpbGwgYmUgYWRkZWQuCitA ZW5kIGRlZnR5cGVmbgorCiBAZGVmdHlwZWZuIHtUYXJnZXQgSG9va30ge2Nv bnN0IGNoYXIgKn0gVEFSR0VUX0lOVkFMSURfV0lUSElOX0RPTE9PUCAoY29u c3RfcnR4IEB2YXJ7aW5zbn0pCiAKIFRha2UgYW4gaW5zdHJ1Y3Rpb24gaW4g QHZhcntpbnNufSBhbmQgcmV0dXJuIE5VTEwgaWYgaXQgaXMgdmFsaWQgd2l0 aGluIGEKSW5kZXg6IGdjYy9kb2MvdG0udGV4aS5pbgo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLSBnY2MvZG9jL3RtLnRleGkuaW4JKHJldmlzaW9uIDE4 NzM3MSkKKysrIGdjYy9kb2MvdG0udGV4aS5pbgkod29ya2luZyBjb3B5KQpA QCAtMTA4NzcsNiArMTA4NzcsMTQgQEAgVGhlIHJlc3VsdCBpcyBhbm90aGVy IHRyZWUgY29udGFpbmluZyBhIHNpbXBsaWZpZWQKIGNhbGwncyByZXN1bHQu ICBJZiBAdmFye2lnbm9yZX0gaXMgdHJ1ZSB0aGUgdmFsdWUgd2lsbCBiZSBp Z25vcmVkLgogQGVuZCBkZWZ0eXBlZm4KIAorQGhvb2sgVEFSR0VUX0RJU1BB VENIX1ZFUlNJT04KK0ZvciBtdWx0aS12ZXJzaW9uZWQgZnVuY3Rpb24sIHRo aXMgaG9vayBzZXRzIHVwIHRoZSBkaXNwYXRjaGVyLgorQHZhcntkaXNwYXRj aF9kZWNsfSBpcyB0aGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHVzZWQgdG8g ZGlzcGF0Y2ggdGhlCit2ZXJzaW9uLiBAdmFye2ZuZGVjbHN9IGFyZSB0aGUg ZnVuY3Rpb24gY2hvaWNlcyBmb3IgZGlzcGF0Y2guCitAdmFye2VtcHR5X2Ji fSBpcyBhbiBiYXNpYyBibG9jayBpbiBAdmFye2Rpc3BhdGNoX2RlY2x9IHdo ZXJlIHRoZQorY29kZSB0byBkbyB0aGUgZGlzcGF0Y2ggd2lsbCBiZSBhZGRl ZC4KK0BlbmQgZGVmdHlwZWZuCisKIEBob29rIFRBUkdFVF9JTlZBTElEX1dJ VEhJTl9ET0xPT1AKIAogVGFrZSBhbiBpbnN0cnVjdGlvbiBpbiBAdmFye2lu c259IGFuZCByZXR1cm4gTlVMTCBpZiBpdCBpcyB2YWxpZCB3aXRoaW4gYQpJ bmRleDogZ2NjL3RhcmdldC5kZWYKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gZ2NjL3RhcmdldC5kZWYJKHJldmlzaW9uIDE4NzM3MSkKKysrIGdjYy90 YXJnZXQuZGVmCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQ5LDYgKzEyNDksMTUg QEAgREVGSE9PSwogIHRyZWUsICh0cmVlIGZuZGVjbCwgaW50IG5fYXJncywg dHJlZSAqYXJncCwgYm9vbCBpZ25vcmUpLAogIGhvb2tfdHJlZV90cmVlX2lu dF90cmVlcF9ib29sX251bGwpCiAKKy8qIFRhcmdldCBob29rIHRvIGdlbmVy YXRlIHRoZSBkaXNwYXRjaGluZyBjb2RlIGZvciBjYWxscyB0byBtdWx0aS12 ZXJzaW9uZWQKKyAgIGZ1bmN0aW9ucy4gIERJU1BBVENIX0RFQ0wgaXMgdGhl IGZ1bmN0aW9uIHRoYXQgd2lsbCBoYXZlIHRoZSBkaXNwYXRjaGluZworICAg bG9naWMuICBGTkRFQ0xTIGFyZSB0aGUgbGlzdCBvZiBjaG9pY2VzIGZvciBk aXNwYXRjaCBhbmQgRU1QVFlfQkIgaXMgdGhlCisgICBiYXNpYyBibG9jIGlu IERJU1BBVENIX0RFQ0wgd2hpY2ggd2lsbCBjb250YWluIHRoZSBjb2RlLiAg Ki8KK0RFRkhPT0sKKyhkaXNwYXRjaF92ZXJzaW9uLAorICIiLAorIGludCwg KHRyZWUgZGlzcGF0Y2hfZGVjbCwgdm9pZCAqZm5kZWNscywgYmFzaWNfYmxv Y2sgKmVtcHR5X2JiKSwgTlVMTCkKKwogLyogUmV0dXJucyBhIGNvZGUgZm9y IGEgdGFyZ2V0LXNwZWNpZmljIGJ1aWx0aW4gdGhhdCBpbXBsZW1lbnRzCiAg ICByZWNpcHJvY2FsIG9mIHRoZSBmdW5jdGlvbiwgb3IgTlVMTF9UUkVFIGlm IG5vdCBhdmFpbGFibGUuICAqLwogREVGSE9PSwpJbmRleDogZ2NjL3RyZWUu aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvdHJlZS5oCShyZXZp c2lvbiAxODczNzEpCisrKyBnY2MvdHJlZS5oCSh3b3JraW5nIGNvcHkpCkBA IC0zNTI4LDYgKzM1MjgsMTIgQEAgZXh0ZXJuIFZFQyh0cmVlLCBnYykgKipk ZWNsX2RlYnVnX2FyZ3NfaW5zZXJ0ICh0cmUKICNkZWZpbmUgREVDTF9GVU5D VElPTl9TUEVDSUZJQ19PUFRJTUlaQVRJT04oTk9ERSkgXAogICAgKEZVTkNU SU9OX0RFQ0xfQ0hFQ0sgKE5PREUpLT5mdW5jdGlvbl9kZWNsLmZ1bmN0aW9u X3NwZWNpZmljX29wdGltaXphdGlvbikKIAorLyogSW4gRlVOQ1RJT05fREVD TCwgdGhpcyBpcyBzZXQgaWYgdGhpcyBmdW5jdGlvbiBoYXMgb3RoZXIgdmVy c2lvbnMgZ2VuZXJhdGVkCisgICB1c2luZyAidGFyZ2V0IiBhdHRyaWJ1dGVz LiAgVGhlIGRlZmF1bHQgdmVyc2lvbiBpcyB0aGUgb25lIHdoaWNoIGRvZXMg bm90CisgICBoYXZlIGFueSAidGFyZ2V0IiBhdHRyaWJ1dGUgc2V0LiAqLwor I2RlZmluZSBERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRChOT0RFKVwKKyAgIChG VU5DVElPTl9ERUNMX0NIRUNLIChOT0RFKS0+ZnVuY3Rpb25fZGVjbC52ZXJz aW9uZWRfZnVuY3Rpb24pCisKIC8qIEZVTkNUSU9OX0RFQ0wgaW5oZXJpdHMg ZnJvbSBERUNMX05PTl9DT01NT04gYmVjYXVzZSBvZiB0aGUgdXNlIG9mIHRo ZQogICAgYXJndW1lbnRzL3Jlc3VsdC9zYXZlZF90cmVlIGZpZWxkcyBieSBm cm9udCBlbmRzLiAgIEl0IHdhcyBlaXRoZXIgaW5oZXJpdAogICAgRlVOQ1RJ T05fREVDTCBmcm9tIG5vbl9jb21tb24sIG9yIGluaGVyaXQgbm9uX2NvbW1v biBmcm9tIEZVTkNUSU9OX0RFQ0wsCkBAIC0zNTcyLDggKzM1NzgsOCBAQCBz dHJ1Y3QgR1RZKCgpKSB0cmVlX2Z1bmN0aW9uX2RlY2wgewogICB1bnNpZ25l ZCBsb29waW5nX2NvbnN0X29yX3B1cmVfZmxhZyA6IDE7CiAgIHVuc2lnbmVk IGhhc19kZWJ1Z19hcmdzX2ZsYWcgOiAxOwogICB1bnNpZ25lZCB0bV9jbG9u ZV9mbGFnIDogMTsKLQotICAvKiAxIGJpdCBsZWZ0ICovCisgIHVuc2lnbmVk IHZlcnNpb25lZF9mdW5jdGlvbiA6IDE7CisgIC8qIE5vIGJpdHMgbGVmdC4g ICovCiB9OwogCiAvKiBUaGUgc291cmNlIGxhbmd1YWdlIG9mIHRoZSB0cmFu c2xhdGlvbi11bml0LiAgKi8KSW5kZXg6IGdjYy90cmVlLXBhc3MuaAo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvdHJlZS1wYXNzLmgJKHJldmlz aW9uIDE4NzM3MSkKKysrIGdjYy90cmVlLXBhc3MuaAkod29ya2luZyBjb3B5 KQpAQCAtNDUzLDYgKzQ1Myw3IEBAIGV4dGVybiBzdHJ1Y3QgZ2ltcGxlX29w dF9wYXNzIHBhc3NfdG1fbWVtb3B0OwogZXh0ZXJuIHN0cnVjdCBnaW1wbGVf b3B0X3Bhc3MgcGFzc190bV9lZGdlczsKIGV4dGVybiBzdHJ1Y3QgZ2ltcGxl X29wdF9wYXNzIHBhc3Nfc3BsaXRfZnVuY3Rpb25zOwogZXh0ZXJuIHN0cnVj dCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19mZWVkYmFja19zcGxpdF9mdW5jdGlv bnM7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2Rpc3Bh dGNoX3ZlcnNpb25zOwogCiAvKiBJUEEgUGFzc2VzICovCiBleHRlcm4gc3Ry dWN0IHNpbXBsZV9pcGFfb3B0X3Bhc3MgcGFzc19pcGFfbG93ZXJfZW11dGxz OwpJbmRleDogZ2NjL211bHRpdmVyc2lvbi5jCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIGdjYy9tdWx0aXZlcnNpb24uYwkocmV2aXNpb24gMCkKKysr IGdjYy9tdWx0aXZlcnNpb24uYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4 MzMgQEAKKy8qIEZ1bmN0aW9uIE11bHRpdmVyc2lvbmluZy4KKyAgIENvcHly aWdodCAoQykgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K KyAgIENvbnRyaWJ1dGVkIGJ5IFNyaXJhbWFuIFRhbGxhbSAodG1zcmlyYW1A Z29vZ2xlLmNvbSkKKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitH Q0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9y IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0Mg aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgor RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgor CitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0 aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4gKi8KKworLyogSG9sZHMgdGhlIHN0YXRlIGZv ciBtdWx0aS12ZXJzaW9uZWQgZnVuY3Rpb25zIGhlcmUuIFRoZSBmcm9udC1l bmQKKyAgIHVwZGF0ZXMgdGhlIHN0YXRlIGFzIGFuZCB3aGVuIGZ1bmN0aW9u IHZlcnNpb25zIGFyZSBlbmNvdW50ZXJlZC4KKyAgIFRoaXMgaXMgdGhlbiB1 c2VkIHRvIGdlbmVyYXRlIHRoZSBkaXNwYXRjaCBjb2RlLiAgQWxzbywgdGhl CisgICBvcHRpbWl6YXRpb24gcGFzc2VzIHRvIGNsb25lIGhvdCBwYXRocyBp bnZvbHZpbmcgdmVyc2lvbmVkIGZ1bmN0aW9ucworICAgd2lsbCBiZSBkb25l IGhlcmUuCisKKyAgIEZ1bmN0aW9uIHZlcnNpb25zIGFyZSBjcmVhdGVkIGJ5 IHVzaW5nIHRoZSBzYW1lIGZ1bmN0aW9uIHNpZ25hdHVyZSBidXQKKyAgIGFs c28gdGFnZ2luZyBhdHRyaWJ1dGUgInRhcmdldCIgdG8gc3BlY2lmeSB0aGUg cGxhdGZvcm0gdHlwZSBmb3Igd2hpY2gKKyAgIHRoZSB2ZXJzaW9uIG11c3Qg YmUgZXhlY3V0ZWQuICBIZXJlIGlzIGFuIGV4YW1wbGU6CisKKyAgIGludCBm b28gKCkKKyAgIHsKKyAgICAgcHJpbnRmICgiRXhlY3V0ZSBhcyBkZWZhdWx0 Iik7CisgICAgIHJldHVybiAwOworICAgfQorCisgICBpbnQgIF9fYXR0cmli dXRlX18gKCh0YXJnZXQgKCJhcmNoPWNvcmVpNyIpKSkKKyAgIGZvbyAoKQor ICAgeworICAgICBwcmludGYgKCJFeGVjdXRlIGZvciBjb3JlaTciKTsKKyAg ICAgcmV0dXJuIDA7CisgICB9CisgICAKKyAgIGludCBtYWluICgpCisgICB7 CisgICAgIHJldHVybiBmb28gKCk7CisgICB9IAorCisgICBUaGUgY2FsbCB0 byBmb28gaW4gbWFpbiBpcyByZXBsYWNlZCB3aXRoIGEgY2FsbCB0byBhbiBJ RlVOQyBmdW5jdGlvbiB0aGF0CisgICBjb250YWlucyB0aGUgZGlzcGF0Y2gg Y29kZSB0byBjYWxsIHRoZSBjb3JyZWN0IGZ1bmN0aW9uIHZlcnNpb24gYXQK KyAgIHJ1bi10aW1lLiAgKi8KKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj aW5jbHVkZSAic3lzdGVtLmgiCisjaW5jbHVkZSAiY29yZXR5cGVzLmgiCisj aW5jbHVkZSAidG0uaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAi dHJlZS1pbmxpbmUuaCIKKyNpbmNsdWRlICJsYW5naG9va3MuaCIKKyNpbmNs dWRlICJmbGFncy5oIgorI2luY2x1ZGUgImNncmFwaC5oIgorI2luY2x1ZGUg ImRpYWdub3N0aWMuaCIKKyNpbmNsdWRlICJ0b3BsZXYuaCIKKyNpbmNsdWRl ICJ0aW1ldmFyLmgiCisjaW5jbHVkZSAicGFyYW1zLmgiCisjaW5jbHVkZSAi ZmliaGVhcC5oIgorI2luY2x1ZGUgImludGwuaCIKKyNpbmNsdWRlICJ0cmVl LXBhc3MuaCIKKyNpbmNsdWRlICJoYXNodGFiLmgiCisjaW5jbHVkZSAiY292 ZXJhZ2UuaCIKKyNpbmNsdWRlICJnZ2MuaCIKKyNpbmNsdWRlICJ0cmVlLWZs b3cuaCIKKyNpbmNsdWRlICJydGwuaCIKKyNpbmNsdWRlICJpcGEtcHJvcC5o IgorI2luY2x1ZGUgImJhc2ljLWJsb2NrLmgiCisjaW5jbHVkZSAidG9wbGV2 LmgiCisjaW5jbHVkZSAiZGJnY250LmgiCisjaW5jbHVkZSAidHJlZS1kdW1w LmgiCisjaW5jbHVkZSAib3V0cHV0LmgiCisjaW5jbHVkZSAidmVjcHJpbS5o IgorI2luY2x1ZGUgImdpbXBsZS1wcmV0dHktcHJpbnQuaCIKKyNpbmNsdWRl ICJpcGEtaW5saW5lLmgiCisjaW5jbHVkZSAidGFyZ2V0LmgiCisjaW5jbHVk ZSAibXVsdGl2ZXJzaW9uLmgiCisKK3R5cGVkZWYgdm9pZCAqIHZvaWRfcDsK KworREVGX1ZFQ19QICh2b2lkX3ApOworREVGX1ZFQ19BTExPQ19QICh2b2lk X3AsIGhlYXApOworCisvKiBFYWNoIGZ1bmN0aW9uIGRlY2wgdGhhdCBpcyBh IGZ1bmN0aW9uIHZlcnNpb24gZ2V0cyBhbiBpbnN0YW5jZSBvZiB0aGlzCisg ICBzdHJ1Y3R1cmUuICAgU2luY2UgdGhpcyBpcyBjYWxsZWQgYnkgdGhlIGZy b250LWVuZCwgZGVjbCBtZXJnaW5nIGNhbgorICAgaGFwcGVuLCB3aGVyZSBh IGRlY2wgY3JlYXRlZCBmb3IgYSBuZXcgZGVjbGFyYXRpb24gaXMgbWVyZ2Vk IHdpdGggCisgICB0aGUgb2xkLiBJbiB0aGlzIGNhc2UsIHRoZSBuZXcgZGVj bCBpcyBkZWxldGVkIGFuZCB0aGUgSVNfREVMRVRFRAorICAgZmllbGQgaXMg c2V0IGZvciB0aGUgc3RydWN0IGluc3RhbmNlIGNvcnJlc3BvbmRpbmcgdG8g dGhlIG5ldyBkZWNsLgorICAgSUZVTkNfREVDTCBpcyB0aGUgZGVjbCBvZiB0 aGUgaWZ1bmMgZnVuY3Rpb24gZm9yIGRlZmF1bHQgZGVjbHMuCisgICBJRlVO Q19SRVNPTFZFUl9ERUNMIGlzIHRoZSBkZWNsIG9mIHRoZSBkaXNwYXRjaCBm dW5jdGlvbi4gIFZFUlNJT05TCisgICBpcyBhIHZlY3RvciBjb250YWluaW5n IHRoZSBsaXN0IG9mIGZ1bmN0aW9uIHZlcnNpb25zICB0aGF0IGFyZQorICAg dGhlIGNhbmRpZGF0ZXMgZm9yIGRpc3BhdGNoLiAgKi8KKwordHlwZWRlZiBz dHJ1Y3QgdmVyc2lvbl9mdW5jdGlvbl9kIHsKKyAgdHJlZSBkZWNsOworICB0 cmVlIGlmdW5jX2RlY2w7CisgIHRyZWUgaWZ1bmNfcmVzb2x2ZXJfZGVjbDsK KyAgVkVDICh2b2lkX3AsIGhlYXApICp2ZXJzaW9uczsKKyAgYm9vbCBpc19k ZWxldGVkOworfSB2ZXJzaW9uX2Z1bmN0aW9uOworCisvKiBIYXNobWFwIGhh cyBhbiBlbnRyeSBmb3IgZXZlcnkgZnVuY3Rpb24gZGVjbCB0aGF0IGhhcyBv dGhlciBmdW5jdGlvbgorICAgdmVyc2lvbnMuICBGb3IgZnVuY3Rpb24gZGVj bHMgdGhhdCBhcmUgdGhlIGRlZmF1bHQsIGl0IGFsc28gc3RvcmVzIHRoZQor ICAgbGlzdCBvZiBhbGwgdGhlIG90aGVyIGZ1bmN0aW9uIHZlcnNpb25zLiAg RWFjaCBlbnRyeSBpcyBhIHN0cnVjdHVyZQorICAgb2YgdHlwZSB2ZXJzaW9u X2Z1bmN0aW9uX2QuICAqLworc3RhdGljIGh0YWJfdCBkZWNsX3ZlcnNpb25f aHRhYiA9IE5VTEw7CisKKy8qIEhhc2h0YWJsZSBoZWxwZXJzIGZvciBkZWNs X3ZlcnNpb25faHRhYi4gKi8KKworc3RhdGljIGhhc2h2YWxfdAorZGVjbF92 ZXJzaW9uX2h0YWJfaGFzaF9kZXNjcmlwdG9yIChjb25zdCB2b2lkICpwKQor eworICBjb25zdCB2ZXJzaW9uX2Z1bmN0aW9uICp0ID0gKGNvbnN0IHZlcnNp b25fZnVuY3Rpb24gKikgcDsKKyAgcmV0dXJuIGh0YWJfaGFzaF9wb2ludGVy ICh0LT5kZWNsKTsKK30KKworLyogSGFzaHRhYmxlIGhlbHBlciBmb3IgZGVj bF92ZXJzaW9uX2h0YWIuICovCisKK3N0YXRpYyBpbnQKK2RlY2xfdmVyc2lv bl9odGFiX2VxX2Rlc2NyaXB0b3IgKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2 b2lkICpwMikKK3sKKyAgY29uc3QgdmVyc2lvbl9mdW5jdGlvbiAqdDEgPSAo Y29uc3QgdmVyc2lvbl9mdW5jdGlvbiAqKSBwMTsKKyAgcmV0dXJuIGh0YWJf ZXFfcG9pbnRlciAoKGNvbnN0IHZvaWRfcCkgdDEtPmRlY2wsIHAyKTsKK30K KworLyogQ3JlYXRlIHRoZSBkZWNsX3ZlcnNpb25faHRhYi4gICovCitzdGF0 aWMgdm9pZAorY3JlYXRlX2RlY2xfdmVyc2lvbl9odGFiICh2b2lkKQorewor ICBpZiAoZGVjbF92ZXJzaW9uX2h0YWIgPT0gTlVMTCkKKyAgICBkZWNsX3Zl cnNpb25faHRhYiA9IGh0YWJfY3JlYXRlICgxMCwgZGVjbF92ZXJzaW9uX2h0 YWJfaGFzaF9kZXNjcmlwdG9yLAorCQkJCSAgICAgZGVjbF92ZXJzaW9uX2h0 YWJfZXFfZGVzY3JpcHRvciwgTlVMTCk7Cit9CisKKy8qIENyZWF0ZXMgYW4g aW5zdGFuY2Ugb2YgdmVyc2lvbl9mdW5jdGlvbiBmb3IgZGVjbCBERUNMLiAg Ki8KKworc3RhdGljIHZlcnNpb25fZnVuY3Rpb24qCituZXdfdmVyc2lvbl9m dW5jdGlvbiAoY29uc3QgdHJlZSBkZWNsKQoreworICB2ZXJzaW9uX2Z1bmN0 aW9uICp2OworICB2ID0gKHZlcnNpb25fZnVuY3Rpb24gKil4bWFsbG9jKHNp emVvZiAodmVyc2lvbl9mdW5jdGlvbikpOworICB2LT5kZWNsID0gZGVjbDsK KyAgdi0+aWZ1bmNfZGVjbCA9IE5VTEw7CisgIHYtPmlmdW5jX3Jlc29sdmVy X2RlY2wgPSBOVUxMOworICB2LT52ZXJzaW9ucyA9IE5VTEw7CisgIHYtPmlz X2RlbGV0ZWQgPSBmYWxzZTsKKyAgcmV0dXJuIHY7Cit9CisKKy8qIENvbXBh cmF0b3IgZnVuY3Rpb24gdG8gYmUgdXNlZCBpbiBxc29ydCByb3V0aW5lIHRv IHNvcnQgYXR0cmlidXRlCisgICBzcGVjaWZpY2F0aW9uIHN0cmluZ3MgdG8g InRhcmdldCIuICAqLworCitzdGF0aWMgaW50CithdHRyX3N0cmNtcCAoY29u c3Qgdm9pZCAqdjEsIGNvbnN0IHZvaWQgKnYyKQoreworICBjb25zdCBjaGFy ICpjMSA9ICooY2hhciAqY29uc3QqKXYxOworICBjb25zdCBjaGFyICpjMiA9 ICooY2hhciAqY29uc3QqKXYyOworICByZXR1cm4gc3RyY21wIChjMSwgYzIp OworfQorCisvKiBTVFIgaXMgdGhlIGFyZ3VtZW50IHRvIHRhcmdldCBhdHRy aWJ1dGUuICBUaGlzIGZ1bmN0aW9uIHRva2VuaXplcworICAgdGhlIGNvbW1h IHNlcGFyYXRlZCBhcmd1bWVudHMsIHNvcnRzIHRoZW0gYW5kIHJldHVybnMg YSBzdHJpbmcgd2hpY2gKKyAgIGlzIGEgdW5pcXVlIGlkZW50aWZpZXIgZm9y IHRoZSBjb21tYSBzZXBhcmF0ZWQgYXJndW1lbnRzLiAgKi8KKworc3RhdGlj IGNoYXIgKgorc29ydGVkX2F0dHJfc3RyaW5nIChjb25zdCBjaGFyICpzdHIp Cit7CisgIGNoYXIgKiphcmdzID0gTlVMTDsKKyAgY2hhciAqYXR0cl9zdHIs ICpyZXRfc3RyOworICBjaGFyICphdHRyID0gTlVMTDsKKyAgdW5zaWduZWQg aW50IGFyZ251bSA9IDE7CisgIHVuc2lnbmVkIGludCBpOworCisgIGZvciAo aSA9IDA7IGkgPCBzdHJsZW4gKHN0cik7IGkrKykKKyAgICBpZiAoc3RyW2ld ID09ICcsJykKKyAgICAgIGFyZ251bSsrOworCisgIGF0dHJfc3RyID0gKGNo YXIgKil4bWFsbG9jIChzdHJsZW4gKHN0cikgKyAxKTsKKyAgc3RyY3B5IChh dHRyX3N0ciwgc3RyKTsKKworICBmb3IgKGkgPSAwOyBpIDwgc3RybGVuIChh dHRyX3N0cik7IGkrKykKKyAgICBpZiAoYXR0cl9zdHJbaV0gPT0gJz0nKQor ICAgICAgYXR0cl9zdHJbaV0gPSAnXyc7CisKKyAgaWYgKGFyZ251bSA9PSAx KQorICAgIHJldHVybiBhdHRyX3N0cjsKKworICBhcmdzID0gKGNoYXIgKiop eG1hbGxvYyAoYXJnbnVtICogc2l6ZW9mIChjaGFyICopKTsKKworICBpID0g MDsKKyAgYXR0ciA9IHN0cnRvayAoYXR0cl9zdHIsICIsIik7CisgIHdoaWxl IChhdHRyICE9IE5VTEwpCisgICAgeworICAgICAgYXJnc1tpXSA9IGF0dHI7 CisgICAgICBpKys7CisgICAgICBhdHRyID0gc3RydG9rIChOVUxMLCAiLCIp OworICAgIH0KKworICBxc29ydCAoYXJncywgYXJnbnVtLCBzaXplb2YgKGNo YXIqKSwgYXR0cl9zdHJjbXApOworCisgIHJldF9zdHIgPSAoY2hhciAqKXht YWxsb2MgKHN0cmxlbiAoc3RyKSArIDEpOworICBzdHJjcHkgKHJldF9zdHIs IGFyZ3NbMF0pOworICBmb3IgKGkgPSAxOyBpIDwgYXJnbnVtOyBpKyspCisg ICAgeworICAgICAgc3RyY2F0IChyZXRfc3RyLCAiXyIpOworICAgICAgc3Ry Y2F0IChyZXRfc3RyLCBhcmdzW2ldKTsKKyAgICB9CisKKyAgZnJlZSAoYXJn cyk7CisgIGZyZWUgKGF0dHJfc3RyKTsKKyAgcmV0dXJuIHJldF9zdHI7Cit9 CisKKy8qIFJldHVybnMgdHJ1ZSB3aGVuIG9ubHkgb25lIG9mIERFQ0wxIGFu ZCBERUNMMiBpcyBtYXJrZWQgd2l0aCAidGFyZ2V0IgorICAgb3IgaWYgdGhl ICJ0YXJnZXQiIGF0dHJpYnV0ZSBzdHJpbmdzIG9mIERFQ0wxIGFuZCBERUNM MiBkb250IG1hdGNoLiAgKi8KKworYm9vbAoraGFzX2RpZmZlcmVudF92ZXJz aW9uX2F0dHJpYnV0ZXMgKGNvbnN0IHRyZWUgZGVjbDEsIGNvbnN0IHRyZWUg ZGVjbDIpCit7CisgIHRyZWUgYXR0cjEsIGF0dHIyOworICBjaGFyICpjMSwg KmMyOworICBib29sIHJldCA9IGZhbHNlOworCisgIGlmIChUUkVFX0NPREUg KGRlY2wxKSAhPSBGVU5DVElPTl9ERUNMCisgICAgICB8fCBUUkVFX0NPREUg KGRlY2wyKSAhPSBGVU5DVElPTl9ERUNMKQorICAgIHJldHVybiBmYWxzZTsK KworICBhdHRyMSA9IGxvb2t1cF9hdHRyaWJ1dGUgKCJ0YXJnZXQiLCBERUNM X0FUVFJJQlVURVMgKGRlY2wxKSk7CisgIGF0dHIyID0gbG9va3VwX2F0dHJp YnV0ZSAoInRhcmdldCIsIERFQ0xfQVRUUklCVVRFUyAoZGVjbDIpKTsKKwor ICBpZiAoYXR0cjEgPT0gTlVMTF9UUkVFICYmIGF0dHIyID09IE5VTExfVFJF RSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgaWYgKChhdHRyMSA9PSBOVUxM X1RSRUUgJiYgYXR0cjIgIT0gTlVMTF9UUkVFKQorICAgICAgfHwgKGF0dHIx ICE9IE5VTExfVFJFRSAmJiBhdHRyMiA9PSBOVUxMX1RSRUUpKQorICAgIHJl dHVybiB0cnVlOworCisgIGMxID0gc29ydGVkX2F0dHJfc3RyaW5nICgKKwlU UkVFX1NUUklOR19QT0lOVEVSIChUUkVFX1ZBTFVFIChUUkVFX1ZBTFVFIChh dHRyMSkpKSk7CisgIGMyID0gc29ydGVkX2F0dHJfc3RyaW5nICgKKwlUUkVF X1NUUklOR19QT0lOVEVSIChUUkVFX1ZBTFVFIChUUkVFX1ZBTFVFIChhdHRy MikpKSk7CisKKyAgaWYgKHN0cmNtcCAoYzEsIGMyKSAhPSAwKQorICAgICBy ZXQgPSB0cnVlOworCisgIGZyZWUgKGMxKTsKKyAgZnJlZSAoYzIpOworCisg IHJldHVybiByZXQ7Cit9CisKKy8qIElmIHRoaXMgZGVjbCBjb3JyZXNwb25k cyB0byBhIGZ1bmN0aW9uIGFuZCBoYXMgInRhcmdldCIgYXR0cmlidXRlLAor ICAgYXBwZW5kIHRoZSBhdHRyaWJ1dGUgc3RyaW5nIHRvIGl0cyBhc3NlbWJs ZXIgbmFtZS4gICovCisKK3N0YXRpYyB2b2lkCit2ZXJzaW9uX2Fzc2VtYmxl cl9uYW1lIChjb25zdCB0cmVlIGRlY2wpCit7CisgIHRyZWUgdmVyc2lvbl9h dHRyOworICBjb25zdCBjaGFyICpvcmlnX25hbWUsICp2ZXJzaW9uX3N0cmlu ZywgKmF0dHJfc3RyOworICBjaGFyICphc3NlbWJsZXJfbmFtZTsKKyAgdHJl ZSBhc3NlbWJsZXJfbmFtZV90cmVlOworICAKKyAgaWYgKFRSRUVfQ09ERSAo ZGVjbCkgIT0gRlVOQ1RJT05fREVDTCkKKyAgICByZXR1cm47CisKKyAgaWYg KERFQ0xfREVDTEFSRURfSU5MSU5FX1AgKGRlY2wpCisgICAgICAmJmxvb2t1 cF9hdHRyaWJ1dGUgKCJnbnVfaW5saW5lIiwKKwkJCSAgREVDTF9BVFRSSUJV VEVTIChkZWNsKSkpCisgICAgZXJyb3JfYXQgKERFQ0xfU09VUkNFX0xPQ0FU SU9OIChkZWNsKSwKKwkgICAgICAiRnVuY3Rpb24gdmVyc2lvbnMgY2Fubm90 IGJlIG1hcmtlZCBhcyBnbnVfaW5saW5lLCIKKwkgICAgICAiIGJvZGllcyBo YXZlIHRvIGJlIGdlbmVyYXRlZFxuIik7CisKKyAgaWYgKERFQ0xfVklSVFVB TF9QIChkZWNsKQorICAgICAgfHwgREVDTF9WSU5ERVggKGRlY2wpKQorICAg IGVycm9yX2F0IChERUNMX1NPVVJDRV9MT0NBVElPTiAoZGVjbCksCisJICAg ICAgIlZpcnR1YWwgZnVuY3Rpb24gdmVyc2lvbmluZyBub3Qgc3VwcG9ydGVk XG4iKTsKKworICB2ZXJzaW9uX2F0dHIgPSBsb29rdXBfYXR0cmlidXRlICgi dGFyZ2V0IiwgREVDTF9BVFRSSUJVVEVTIChkZWNsKSk7CisgIC8qIHRhcmdl dCBhdHRyaWJ1dGUgc3RyaW5nIGlzIE5VTEwgZm9yIGRlZmF1bHQgZnVuY3Rp b25zLiAgKi8KKyAgaWYgKHZlcnNpb25fYXR0ciA9PSBOVUxMX1RSRUUpCisg ICAgcmV0dXJuOworCisgIG9yaWdfbmFtZSA9IElERU5USUZJRVJfUE9JTlRF UiAoREVDTF9BU1NFTUJMRVJfTkFNRSAoZGVjbCkpOworICB2ZXJzaW9uX3N0 cmluZworICAgID0gVFJFRV9TVFJJTkdfUE9JTlRFUiAoVFJFRV9WQUxVRSAo VFJFRV9WQUxVRSAodmVyc2lvbl9hdHRyKSkpOworCisgIGF0dHJfc3RyID0g c29ydGVkX2F0dHJfc3RyaW5nICh2ZXJzaW9uX3N0cmluZyk7CisgIGFzc2Vt Ymxlcl9uYW1lID0gKGNoYXIgKikgeG1hbGxvYyAoc3RybGVuIChvcmlnX25h bWUpCisJCQkJICAgICArIHN0cmxlbiAoYXR0cl9zdHIpICsgMik7CisKKyAg c3ByaW50ZiAoYXNzZW1ibGVyX25hbWUsICIlcy4lcyIsIG9yaWdfbmFtZSwg YXR0cl9zdHIpOworICBpZiAoZHVtcF9maWxlKQorICAgIGZwcmludGYgKGR1 bXBfZmlsZSwgIkFzc2VtYmxlciBuYW1lIHNldCB0byAlcyBmb3IgZnVuY3Rp b24gdmVyc2lvbiAlc1xuIiwKKwkgICAgIGFzc2VtYmxlcl9uYW1lLCBJREVO VElGSUVSX1BPSU5URVIgKERFQ0xfTkFNRSAoZGVjbCkpKTsKKworICBhc3Nl bWJsZXJfbmFtZV90cmVlID0gZ2V0X2lkZW50aWZpZXIgKGFzc2VtYmxlcl9u YW1lKTsKKworICBTRVRfREVDTF9BU1NFTUJMRVJfTkFNRSAoZGVjbCwgYXNz ZW1ibGVyX25hbWVfdHJlZSk7CisgIFNFVF9ERUNMX1JUTCAoZGVjbCwgTlVM TCk7Cit9CisKK3ZvaWQKK21hcmtfZnVuY3Rpb25fYXNfdmVyc2lvbiAoY29u c3QgdHJlZSBkZWNsKQoreworICBpZiAoREVDTF9GVU5DVElPTl9WRVJTSU9O RUQgKGRlY2wpKQorICAgIHJldHVybjsKKyAgREVDTF9GVU5DVElPTl9WRVJT SU9ORUQgKGRlY2wpID0gMTsKKyAgdmVyc2lvbl9hc3NlbWJsZXJfbmFtZSAo ZGVjbCk7Cit9CisKKy8qIFJldHVybnMgdHJ1ZSBpZiBmdW5jdGlvbiBERUNM IGhhcyB0YXJnZXQgYXR0cmlidXRlIHNldC4gIFRoaXMgY291bGQgYmUKKyAg IGEgdmVyc2lvbi4gICovCisKK2Jvb2wKK2lzX3RhcmdldF9hdHRyaWJ1dGVf c2V0IChjb25zdCB0cmVlIGRlY2wpCit7CisgIHJldHVybiAoVFJFRV9DT0RF IChkZWNsKSA9PSBGVU5DVElPTl9ERUNMCisJICAmJiAobG9va3VwX2F0dHJp YnV0ZSAoInRhcmdldCIsIERFQ0xfQVRUUklCVVRFUyAoZGVjbCkpCisJICAg ICAgIT0gTlVMTF9UUkVFKSk7Cit9CisKKy8qIFJldHVybnMgdHJ1ZSBpZiBk ZWNsIGlzIG11bHRpLXZlcnNpb25lZCBhbmQgREVDTCBpcyB0aGUgZGVmYXVs dCBmdW5jdGlvbiwKKyAgIHRoYXQgaXMgaXQgaXMgbm90IHRhZ2dlZCB3aXRo ICJ0YXJnZXQiIGF0dHJpYnV0ZS4gICovCisKK2Jvb2wKK2lzX2RlZmF1bHRf ZnVuY3Rpb24gKGNvbnN0IHRyZWUgZGVjbCkKK3sKKyAgcmV0dXJuIChUUkVF X0NPREUgKGRlY2wpID09IEZVTkNUSU9OX0RFQ0wKKwkgICYmIERFQ0xfRlVO Q1RJT05fVkVSU0lPTkVEIChkZWNsKQorCSAgJiYgKGxvb2t1cF9hdHRyaWJ1 dGUgKCJ0YXJnZXQiLCBERUNMX0FUVFJJQlVURVMgKGRlY2wpKQorCSAgICAg ID09IE5VTExfVFJFRSkpOwkKK30KKworLyogRm9yIGZ1bmN0aW9uIGRlY2wg REVDTCwgZmluZCB0aGUgdmVyc2lvbl9mdW5jdGlvbiBzdHJ1Y3QgaW4gdGhl CisgICBkZWNsX3ZlcnNpb25faHRhYi4gICovCisKK3N0YXRpYyB2ZXJzaW9u X2Z1bmN0aW9uICoKK2ZpbmRfZnVuY3Rpb25fdmVyc2lvbiAoY29uc3QgdHJl ZSBkZWNsKQoreworICB2b2lkICpzbG90OworCisgIGlmICghREVDTF9GVU5D VElPTl9WRVJTSU9ORUQgKGRlY2wpKQorICAgIHJldHVybiBOVUxMOworCisg IGlmICghZGVjbF92ZXJzaW9uX2h0YWIpCisgICAgcmV0dXJuIE5VTEw7CisK KyAgc2xvdCA9IGh0YWJfZmluZF93aXRoX2hhc2ggKGRlY2xfdmVyc2lvbl9o dGFiLCBkZWNsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRh Yl9oYXNoX3BvaW50ZXIgKGRlY2wpKTsKKworICBpZiAoc2xvdCAhPSBOVUxM KQorICAgIHJldHVybiAodmVyc2lvbl9mdW5jdGlvbiAqKXNsb3Q7CisKKyAg cmV0dXJuIE5VTEw7Cit9CisKKy8qIFJlY29yZCBERUNMIGFzIGEgZnVuY3Rp b24gdmVyc2lvbiBieSBjcmVhdGluZyBhIHZlcnNpb25fZnVuY3Rpb24gc3Ry dWN0CisgICBmb3IgaXQgYW5kIHN0b3JpbmcgaXQgaW4gdGhlIGhhc2h0YWJs ZS4gICovCisKK3N0YXRpYyB2ZXJzaW9uX2Z1bmN0aW9uICoKK2FkZF9mdW5j dGlvbl92ZXJzaW9uIChjb25zdCB0cmVlIGRlY2wpCit7CisgIHZvaWQgKipz bG90OworICB2ZXJzaW9uX2Z1bmN0aW9uICp2OworCisgIGlmICghREVDTF9G VU5DVElPTl9WRVJTSU9ORUQgKGRlY2wpKQorICAgIHJldHVybiBOVUxMOwor CisgIGNyZWF0ZV9kZWNsX3ZlcnNpb25faHRhYiAoKTsKKworICBzbG90ID0g aHRhYl9maW5kX3Nsb3Rfd2l0aF9oYXNoIChkZWNsX3ZlcnNpb25faHRhYiwg KGNvbnN0IHZvaWRfcClkZWNsLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBodGFiX2hhc2hfcG9pbnRlciAoKGNvbnN0IHZvaWRfcClk ZWNsKSwKKwkJCQkgICBJTlNFUlQpOworCisgIGlmICgqc2xvdCAhPSBOVUxM KQorICAgIHJldHVybiAodmVyc2lvbl9mdW5jdGlvbiAqKSpzbG90OworCisg IHYgPSBuZXdfdmVyc2lvbl9mdW5jdGlvbiAoZGVjbCk7CisgICpzbG90ID0g djsKKworICByZXR1cm4gdjsKK30KKworLyogUHVzaCBWIGludG8gVkVDIG9u bHkgaWYgaXQgaXMgbm90IGFscmVhZHkgcHJlc2VudC4gIElmIGFscmVhZHkg cHJlc2VudAorICAgcmV0dXJucyBmYWxzZS4gICovCisKK3N0YXRpYyBib29s CitwdXNoX2Z1bmN0aW9uX3ZlcnNpb24gKHZlcnNpb25fZnVuY3Rpb24gKnYs IFZFQyAodm9pZF9wLCBoZWFwKSAqKnZlYykKK3sKKyAgaW50IGl4OworICB2 b2lkX3AgZWxlOyAKKyAgZm9yIChpeCA9IDA7IFZFQ19pdGVyYXRlICh2b2lk X3AsICp2ZWMsIGl4LCBlbGUpOyArK2l4KQorICAgIHsKKyAgICAgIGlmIChl bGUgPT0gKHZvaWRfcCl2KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg fQorCisgIFZFQ19zYWZlX3B1c2ggKHZvaWRfcCwgaGVhcCwgKnZlYywgKHZv aWQqKXYpOworICByZXR1cm4gdHJ1ZTsKK30KKyAKKy8qIE1hcmsgREVDTCBh cyBkZWxldGVkLiAgVGhpcyBpcyBjYWxsZWQgYnkgdGhlIGZyb250LWVuZCB3 aGVuIGEgZHVwbGljYXRlCisgICBkZWNsIGlzIG1lcmdlZCB3aXRoIHRoZSBv cmlnaW5hbCBkZWNsIGFuZCB0aGUgZHVwbGljYXRlIGRlY2wgaXMgZGVsZXRl ZC4KKyAgIFRoaXMgZnVuY3Rpb24gbWFya3MgdGhlIGR1cGxpY2F0ZV9kZWNs IGFzIGludmFsaWQuICBDYWxsZWQgYnkKKyAgIGR1cGxpY2F0ZV9kZWNscyBp biBjcC9kZWNsLmMuICAqLworCit2b2lkCittYXJrX2RlbGV0ZV9kZWNsX3Zl cnNpb24gKGNvbnN0IHRyZWUgZGVjbCkKK3sKKyAgdmVyc2lvbl9mdW5jdGlv biAqZGVjbF92OworCisgIGRlY2xfdiA9IGZpbmRfZnVuY3Rpb25fdmVyc2lv biAoZGVjbCk7CisKKyAgaWYgKGRlY2xfdiA9PSBOVUxMKQorICAgIHJldHVy bjsKKworICBkZWNsX3YtPmlzX2RlbGV0ZWQgPSB0cnVlOworCisgIGlmIChp c19kZWZhdWx0X2Z1bmN0aW9uIChkZWNsKQorICAgICAgJiYgZGVjbF92LT52 ZXJzaW9ucyAhPSBOVUxMKQorICAgIHsKKyAgICAgIFZFQ190cnVuY2F0ZSAo dm9pZF9wLCBkZWNsX3YtPnZlcnNpb25zLCAwKTsKKyAgICAgIFZFQ19mcmVl ICh2b2lkX3AsIGhlYXAsIGRlY2xfdi0+dmVyc2lvbnMpOworICAgICAgZGVj bF92LT52ZXJzaW9ucyA9IE5VTEw7CisgICAgfQorfQorCisvKiBNYXJrIERF Q0wxIGFuZCBERUNMMiB0byBiZSBmdW5jdGlvbiB2ZXJzaW9ucyBpbiB0aGUg c2FtZSBncm91cC4gIE9uZQorICAgb2YgREVDTDEgYW5kIERFQ0wyIG11c3Qg YmUgdGhlIGRlZmF1bHQsIG90aGVyd2lzZSB0aGlzIGZ1bmN0aW9uIGRvZXMK KyAgIG5vdGhpbmcuICBUaGlzIGZ1bmN0aW9uIGFnZ3JlZ2F0ZXMgdGhlIHZl cnNpb25zLiAgKi8KKworaW50Citncm91cF9mdW5jdGlvbl92ZXJzaW9ucyAo Y29uc3QgdHJlZSBkZWNsMSwgY29uc3QgdHJlZSBkZWNsMikKK3sKKyAgdHJl ZSBkZWZhdWx0X2RlY2wsIHZlcnNpb25fZGVjbDsKKyAgdmVyc2lvbl9mdW5j dGlvbiAqZGVmYXVsdF92LCAqdmVyc2lvbl92OworCisgIGdjY19hc3NlcnQg KERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChkZWNsMSkKKwkgICAgICAmJiBE RUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAoZGVjbDIpKTsKKworICAvKiBUaGUg dmVyc2lvbiBkZWNscyBhcmUgYWRkZWQgb25seSB0byB0aGUgZGVmYXVsdCBk ZWNsLiAgKi8KKyAgaWYgKCFpc19kZWZhdWx0X2Z1bmN0aW9uIChkZWNsMSkK KyAgICAgICYmICFpc19kZWZhdWx0X2Z1bmN0aW9uIChkZWNsMikpCisgICAg cmV0dXJuIDA7CisKKyAgLyogVGhpcyBjYW4gaGFwcGVuIHdpdGggZHVwbGlj YXRlIGRlY2xhcmF0aW9ucy4gIEp1c3QgaWdub3JlLiAgKi8KKyAgaWYgKGlz X2RlZmF1bHRfZnVuY3Rpb24gKGRlY2wxKQorICAgICAgJiYgaXNfZGVmYXVs dF9mdW5jdGlvbiAoZGVjbDIpKQorICAgIHJldHVybiAwOworCisgIGRlZmF1 bHRfZGVjbCA9IChpc19kZWZhdWx0X2Z1bmN0aW9uIChkZWNsMSkpID8gZGVj bDEgOiBkZWNsMjsKKyAgdmVyc2lvbl9kZWNsID0gKGRlZmF1bHRfZGVjbCA9 PSBkZWNsMSkgPyBkZWNsMiA6IGRlY2wxOworCisgIGdjY19hc3NlcnQgKGRl ZmF1bHRfZGVjbCAhPSB2ZXJzaW9uX2RlY2wpOworICBjcmVhdGVfZGVjbF92 ZXJzaW9uX2h0YWIgKCk7CisKKyAgLyogSWYgdGhlIHZlcnNpb24gZnVuY3Rp b24gaXMgZm91bmQsIGl0IGhhcyBiZWVuIGFkZGVkLiAgKi8KKyAgaWYgKGZp bmRfZnVuY3Rpb25fdmVyc2lvbiAodmVyc2lvbl9kZWNsKSkKKyAgICByZXR1 cm4gMDsKKworICBkZWZhdWx0X3YgPSBhZGRfZnVuY3Rpb25fdmVyc2lvbiAo ZGVmYXVsdF9kZWNsKTsKKyAgdmVyc2lvbl92ID0gYWRkX2Z1bmN0aW9uX3Zl cnNpb24gKHZlcnNpb25fZGVjbCk7CisKKyAgaWYgKGRlZmF1bHRfdi0+dmVy c2lvbnMgPT0gTlVMTCkKKyAgICBkZWZhdWx0X3YtPnZlcnNpb25zID0gVkVD X2FsbG9jICh2b2lkX3AsIGhlYXAsIDEpOworCisgIHB1c2hfZnVuY3Rpb25f dmVyc2lvbiAodmVyc2lvbl92LCAmZGVmYXVsdF92LT52ZXJzaW9ucyk7Cisg IHJldHVybiAwOworfQorCisvKiBNYWtlcyBhIGZ1bmN0aW9uIGF0dHJpYnV0 ZSBvZiB0aGUgZm9ybSBOQU1FKEFSR19OQU1FKSBhbmQgY2hhaW5zCisgICBp dCB0byBDSEFJTi4gICovCisKK3N0YXRpYyB0cmVlCittYWtlX2F0dHJpYnV0 ZSAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqYXJnX25hbWUsIHRy ZWUgY2hhaW4pCit7CisgIHRyZWUgYXR0cl9uYW1lOworICB0cmVlIGF0dHJf YXJnX25hbWU7CisgIHRyZWUgYXR0cl9hcmdzOworICB0cmVlIGF0dHI7CisK KyAgYXR0cl9uYW1lID0gZ2V0X2lkZW50aWZpZXIgKG5hbWUpOworICBhdHRy X2FyZ19uYW1lID0gYnVpbGRfc3RyaW5nIChzdHJsZW4gKGFyZ19uYW1lKSwg YXJnX25hbWUpOworICBhdHRyX2FyZ3MgPSB0cmVlX2NvbnMgKE5VTExfVFJF RSwgYXR0cl9hcmdfbmFtZSwgTlVMTF9UUkVFKTsKKyAgYXR0ciA9IHRyZWVf Y29ucyAoYXR0cl9uYW1lLCBhdHRyX2FyZ3MsIGNoYWluKTsKKyAgcmV0dXJu IGF0dHI7Cit9CisKKy8qIFJldHVybiBhIG5ldyBuYW1lIGJ5IGFwcGVuZGlu ZyBTVUZGSVggdG8gdGhlIERFQ0wgbmFtZS4gIElmCisgICBtYWtlX3VuaXF1 ZSBpcyB0cnVlLCBhcHBlbmQgdGhlIGZ1bGwgcGF0aCBuYW1lLiAgKi8KKwor c3RhdGljIGNoYXIgKgorbWFrZV9uYW1lICh0cmVlIGRlY2wsIGNvbnN0IGNo YXIgKnN1ZmZpeCwgYm9vbCBtYWtlX3VuaXF1ZSkKK3sKKyAgY2hhciAqZ2xv YmFsX3Zhcl9uYW1lOworICBpbnQgbmFtZV9sZW47CisgIGNvbnN0IGNoYXIg Km5hbWU7CisgIGNvbnN0IGNoYXIgKnVuaXF1ZV9uYW1lID0gTlVMTDsKKwor ICBuYW1lID0gSURFTlRJRklFUl9QT0lOVEVSIChERUNMX0FTU0VNQkxFUl9O QU1FIChkZWNsKSk7CisKKyAgLyogR2V0IGEgdW5pcXVlIG5hbWUgdGhhdCBj YW4gYmUgdXNlZCBnbG9iYWxseSB3aXRob3V0IGFueSBjaGFuY2VzCisgICAg IG9mIGNvbGxpc2lvbiBhdCBsaW5rIHRpbWUuICAqLworICBpZiAobWFrZV91 bmlxdWUpCisgICAgdW5pcXVlX25hbWUgPSBJREVOVElGSUVSX1BPSU5URVIg KGdldF9maWxlX2Z1bmN0aW9uX25hbWUgKCJcMCIpKTsKKworICBuYW1lX2xl biA9IHN0cmxlbiAobmFtZSkgKyBzdHJsZW4gKHN1ZmZpeCkgKyAyOworCisg IGlmIChtYWtlX3VuaXF1ZSkKKyAgICBuYW1lX2xlbiArPSBzdHJsZW4gKHVu aXF1ZV9uYW1lKSArIDE7CisgIGdsb2JhbF92YXJfbmFtZSA9IChjaGFyICop IHhtYWxsb2MgKG5hbWVfbGVuKTsKKworICAvKiBVc2UgJy4nIHRvIGNvbmNh dGVuYXRlIG5hbWVzIGFzIGl0IGlzIGRlbWFuZ2xlciBmcmllbmRseS4gICov CisgIGlmIChtYWtlX3VuaXF1ZSkKKyAgICAgIHNucHJpbnRmIChnbG9iYWxf dmFyX25hbWUsIG5hbWVfbGVuLCAiJXMuJXMuJXMiLCBuYW1lLAorCQl1bmlx dWVfbmFtZSwgc3VmZml4KTsKKyAgZWxzZQorICAgICAgc25wcmludGYgKGds b2JhbF92YXJfbmFtZSwgbmFtZV9sZW4sICIlcy4lcyIsIG5hbWUsIHN1ZmZp eCk7CisKKyAgcmV0dXJuIGdsb2JhbF92YXJfbmFtZTsKK30KKworLyogTWFr ZSB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gZGVjbCBmb3IgaWZ1bmMgKElGVU5D X0RFQ0wpIHRvIGRpc3BhdGNoCisgICB0aGUgdmVyc2lvbnMgb2YgbXVsdGkt dmVyc2lvbmVkIGZ1bmN0aW9uIERFRkFVTFRfREVDTC4gIENyZWF0ZSBhbmQK KyAgIGVtcHR5IGJhc2ljIGJsb2NrIGluIHRoZSByZXNvbHZlciBhbmQgc3Rv cmUgdGhlIHBvaW50ZXIgaW4KKyAgIEVNUFRZX0JCLiAgUmV0dXJuIHRoZSBk ZWNsIG9mIHRoZSByZXNvbHZlciBmdW5jdGlvbi4gICovCisKK3N0YXRpYyB0 cmVlCittYWtlX2lmdW5jX3Jlc29sdmVyX2Z1bmMgKGNvbnN0IHRyZWUgZGVm YXVsdF9kZWNsLAorCQkJICBjb25zdCB0cmVlIGlmdW5jX2RlY2wsCisJCQkg IGJhc2ljX2Jsb2NrICplbXB0eV9iYikKK3sKKyAgY2hhciAqcmVzb2x2ZXJf bmFtZTsKKyAgdHJlZSBkZWNsLCB0eXBlLCBkZWNsX25hbWUsIHQ7CisgIGJh c2ljX2Jsb2NrIG5ld19iYjsKKyAgdHJlZSBvbGRfY3VycmVudF9mdW5jdGlv bl9kZWNsOworICBib29sIG1ha2VfdW5pcXVlID0gZmFsc2U7CisKKyAgLyog SUZVTkMncyBoYXZlIHRvIGJlIGdsb2JhbGx5IHZpc2libGUuICBTbywgaWYg dGhlIGRlZmF1bHRfZGVjbCBpcworICAgICBub3QsIHRoZW4gdGhlIG5hbWUg b2YgdGhlIElGVU5DIHNob3VsZCBiZSBtYWRlIHVuaXF1ZS4gICovCisgIGlm IChUUkVFX1BVQkxJQyAoZGVmYXVsdF9kZWNsKSA9PSAwKQorICAgIG1ha2Vf dW5pcXVlID0gdHJ1ZTsKKworICAvKiBBcHBlbmQgdGhlIGZpbGVuYW1lIHRv IHRoZSByZXNvbHZlciBmdW5jdGlvbiBpZiB0aGUgdmVyc2lvbnMgYXJlCisg ICAgIG5vdCBleHRlcm5hbGx5IHZpc2libGUuICBUaGlzIGlzIGJlY2F1c2Ug dGhlIHJlc29sdmVyIGZ1bmN0aW9uIGhhcworICAgICB0byBiZSBleHRlcm5h bGx5IHZpc2libGUgZm9yIHRoZSBsb2FkZXIgdG8gZmluZCBpdC4gIFNvLCBh cHBlbmRpbmcKKyAgICAgdGhlIGZpbGVuYW1lIHdpbGwgcHJldmVudCBjb25m bGljdHMgd2l0aCBhIHJlc29sdmVyIGZ1bmN0aW9uIGZyb20KKyAgICAgYW5v dGhlciBtb2R1bGUgd2hpY2ggaXMgYmFzZWQgb24gdGhlIHNhbWUgdmVyc2lv biBuYW1lLiAgKi8KKyAgcmVzb2x2ZXJfbmFtZSA9IG1ha2VfbmFtZSAoZGVm YXVsdF9kZWNsLCAicmVzb2x2ZXIiLCBtYWtlX3VuaXF1ZSk7CisKKyAgLyog VGhlIHJlc29sdmVyIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gYSAodm9pZCAq KS4gKi8KKyAgdHlwZSA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGVfbGlzdCAocHRy X3R5cGVfbm9kZSwgTlVMTF9UUkVFKTsKKworICBkZWNsID0gYnVpbGRfZm5f ZGVjbCAocmVzb2x2ZXJfbmFtZSwgdHlwZSk7CisgIGRlY2xfbmFtZSA9IGdl dF9pZGVudGlmaWVyIChyZXNvbHZlcl9uYW1lKTsKKyAgU0VUX0RFQ0xfQVNT RU1CTEVSX05BTUUgKGRlY2wsIGRlY2xfbmFtZSk7CisKKyAgREVDTF9OQU1F IChkZWNsKSA9IGRlY2xfbmFtZTsKKyAgVFJFRV9VU0VEIChkZWNsKSA9IFRS RUVfVVNFRCAoZGVmYXVsdF9kZWNsKTsKKyAgREVDTF9BUlRJRklDSUFMIChk ZWNsKSA9IDE7CisgIERFQ0xfSUdOT1JFRF9QIChkZWNsKSA9IDA7CisgIC8q IElGVU5DIHJlc29sdmVycyBoYXZlIHRvIGJlIGV4dGVybmFsbHkgdmlzaWJs ZS4gICovCisgIFRSRUVfUFVCTElDIChkZWNsKSA9IDE7CisgIERFQ0xfVU5J TkxJTkFCTEUgKGRlY2wpID0gMTsKKworICBERUNMX0VYVEVSTkFMIChkZWNs KSA9IERFQ0xfRVhURVJOQUwgKGRlZmF1bHRfZGVjbCk7CisgIERFQ0xfRVhU RVJOQUwgKGlmdW5jX2RlY2wpID0gMDsKKworICBERUNMX0NPTlRFWFQgKGRl Y2wpID0gTlVMTF9UUkVFOworICBERUNMX0lOSVRJQUwgKGRlY2wpID0gbWFr ZV9ub2RlIChCTE9DSyk7CisgIERFQ0xfU1RBVElDX0NPTlNUUlVDVE9SIChk ZWNsKSA9IDA7CisgIFRSRUVfUkVBRE9OTFkgKGRlY2wpID0gMDsKKyAgREVD TF9QVVJFX1AgKGRlY2wpID0gMDsKKyAgREVDTF9DT01EQVQgKGRlY2wpID0g REVDTF9DT01EQVQgKGRlZmF1bHRfZGVjbCk7CisgIGlmIChERUNMX0NPTURB VF9HUk9VUCAoZGVmYXVsdF9kZWNsKSkKKyAgICB7CisgICAgICBtYWtlX2Rl Y2xfb25lX29ubHkgKGRlY2wsIERFQ0xfQ09NREFUX0dST1VQIChkZWZhdWx0 X2RlY2wpKTsKKyAgICB9CisgIC8qIEJ1aWxkIHJlc3VsdCBkZWNsIGFuZCBh ZGQgdG8gZnVuY3Rpb25fZGVjbC4gKi8KKyAgdCA9IGJ1aWxkX2RlY2wgKFVO S05PV05fTE9DQVRJT04sIFJFU1VMVF9ERUNMLCBOVUxMX1RSRUUsIHB0cl90 eXBlX25vZGUpOworICBERUNMX0FSVElGSUNJQUwgKHQpID0gMTsKKyAgREVD TF9JR05PUkVEX1AgKHQpID0gMTsKKyAgREVDTF9SRVNVTFQgKGRlY2wpID0g dDsKKworICBnaW1wbGlmeV9mdW5jdGlvbl90cmVlIChkZWNsKTsKKyAgb2xk X2N1cnJlbnRfZnVuY3Rpb25fZGVjbCA9IGN1cnJlbnRfZnVuY3Rpb25fZGVj bDsKKyAgcHVzaF9jZnVuIChERUNMX1NUUlVDVF9GVU5DVElPTiAoZGVjbCkp OworICBjdXJyZW50X2Z1bmN0aW9uX2RlY2wgPSBkZWNsOworICBpbml0X2Vt cHR5X3RyZWVfY2ZnX2Zvcl9mdW5jdGlvbiAoREVDTF9TVFJVQ1RfRlVOQ1RJ T04gKGRlY2wpKTsKKyAgY2Z1bi0+Y3Vycl9wcm9wZXJ0aWVzIHw9CisgICAg KFBST1BfZ2ltcGxlX2xjZiB8IFBST1BfZ2ltcGxlX2xlaCB8IFBST1BfY2Zn IHwgUFJPUF9yZWZlcmVuY2VkX3ZhcnMgfAorICAgICBQUk9QX3NzYSk7Cisg IG5ld19iYiA9IGNyZWF0ZV9lbXB0eV9iYiAoRU5UUllfQkxPQ0tfUFRSKTsK KyAgbWFrZV9lZGdlIChFTlRSWV9CTE9DS19QVFIsIG5ld19iYiwgRURHRV9G QUxMVEhSVSk7CisgIG1ha2VfZWRnZSAobmV3X2JiLCBFWElUX0JMT0NLX1BU UiwgMCk7CisgICplbXB0eV9iYiA9IG5ld19iYjsKKworICBjZ3JhcGhfYWRk X25ld19mdW5jdGlvbiAoZGVjbCwgdHJ1ZSk7CisgIGNncmFwaF9jYWxsX2Z1 bmN0aW9uX2luc2VydGlvbl9ob29rcyAoY2dyYXBoX2dldF9jcmVhdGVfbm9k ZSAoZGVjbCkpOworICBjZ3JhcGhfbWFya19mb3JjZV9vdXRwdXRfbm9kZSAo Y2dyYXBoX2dldF9jcmVhdGVfbm9kZSAoZGVjbCkpOworCisgIGlmIChERUNM X0NPTURBVF9HUk9VUCAoZGVmYXVsdF9kZWNsKSkKKyAgICB7CisgICAgICBn Y2NfYXNzZXJ0IChjZ3JhcGhfZ2V0X25vZGUgKGRlZmF1bHRfZGVjbCkpOwor ICAgICAgc3ltdGFiX2FkZF90b19zYW1lX2NvbWRhdF9ncm91cCAoCisJKHN5 bXRhYl9ub2RlKSBjZ3JhcGhfZ2V0X25vZGUgKGRlY2wpLAorCShzeW10YWJf bm9kZSkgY2dyYXBoX2dldF9ub2RlIChkZWZhdWx0X2RlY2wpKTsKKyAgICB9 CisKKyAgcG9wX2NmdW4gKCk7CisgIGN1cnJlbnRfZnVuY3Rpb25fZGVjbCA9 IG9sZF9jdXJyZW50X2Z1bmN0aW9uX2RlY2w7CisKKyAgZ2NjX2Fzc2VydCAo aWZ1bmNfZGVjbCAhPSBOVUxMKTsKKyAgLyogTWFyayBpZnVuY19kZWNsIGFz ICJpZnVuYyIgd2l0aCByZXNvbHZlciBhcyByZXNvbHZlcl9uYW1lLiAgKi8K KyAgREVDTF9BVFRSSUJVVEVTIChpZnVuY19kZWNsKSAKKyAgICA9IG1ha2Vf YXR0cmlidXRlICgiaWZ1bmMiLCByZXNvbHZlcl9uYW1lLCBERUNMX0FUVFJJ QlVURVMgKGlmdW5jX2RlY2wpKTsKKworICAvKiBDcmVhdGUgdGhlIGFsaWFz IGhlcmUuICAqLworICBjZ3JhcGhfY3JlYXRlX2Z1bmN0aW9uX2FsaWFzIChp ZnVuY19kZWNsLCBkZWNsKTsKKyAgcmV0dXJuIGRlY2w7Cit9CisKKy8qIE1h a2UgYW5kIGlmdW5jIGRlY2xhcmF0aW9uIGZvciB0aGUgbXVsdGktdmVyc2lv bmVkIGZ1bmN0aW9uIERFQ0wuICBDYWxscyB0bworICAgREVDTCBmdW5jdGlv biB3aWxsIGJlIHJlcGxhY2VkIHdpdGggY2FsbHMgdG8gdGhlIGlmdW5jLiAg IFJldHVybiB0aGUgZGVjbAorICAgb2YgdGhlIGlmdW5jIGNyZWF0ZWQuICAq LworCitzdGF0aWMgdHJlZQorbWFrZV9pZnVuY19mdW5jIChjb25zdCB0cmVl IGRlY2wpCit7CisgIHRyZWUgaWZ1bmNfZGVjbDsKKyAgY2hhciAqaWZ1bmNf bmFtZSwgKnJlc29sdmVyX25hbWU7CisgIHRyZWUgZm5fdHlwZSwgaWZ1bmNf dHlwZTsKKyAgYm9vbCBtYWtlX3VuaXF1ZSA9IGZhbHNlOworCisgIGlmIChU UkVFX1BVQkxJQyAoZGVjbCkgPT0gMCkKKyAgICBtYWtlX3VuaXF1ZSA9IHRy dWU7CisKKyAgaWZ1bmNfbmFtZSA9IG1ha2VfbmFtZSAoZGVjbCwgImlmdW5j IiwgbWFrZV91bmlxdWUpOworICByZXNvbHZlcl9uYW1lID0gbWFrZV9uYW1l IChkZWNsLCAicmVzb2x2ZXIiLCBtYWtlX3VuaXF1ZSk7CisgIGdjY19hc3Nl cnQgKHJlc29sdmVyX25hbWUpOworCisgIGZuX3R5cGUgPSBUUkVFX1RZUEUg KGRlY2wpOworICBpZnVuY190eXBlID0gYnVpbGRfZnVuY3Rpb25fdHlwZSAo VFJFRV9UWVBFIChmbl90eXBlKSwKKwkJCQkgICAgVFlQRV9BUkdfVFlQRVMg KGZuX3R5cGUpKTsKKyAgCisgIGlmdW5jX2RlY2wgPSBidWlsZF9mbl9kZWNs IChpZnVuY19uYW1lLCBpZnVuY190eXBlKTsKKyAgVFJFRV9VU0VEIChpZnVu Y19kZWNsKSA9IDE7CisgIERFQ0xfQ09OVEVYVCAoaWZ1bmNfZGVjbCkgPSBO VUxMX1RSRUU7CisgIERFQ0xfSU5JVElBTCAoaWZ1bmNfZGVjbCkgPSBlcnJv cl9tYXJrX25vZGU7CisgIERFQ0xfQVJUSUZJQ0lBTCAoaWZ1bmNfZGVjbCkg PSAxOworICAvKiBNYXJrIHRoaXMgaWZ1bmMgYXMgZXh0ZXJuYWwsIHRoZSBy ZXNvbHZlciB3aWxsIGZsaXAgaXQgYWdhaW4gaWYKKyAgICAgaXQgZ2V0cyBn ZW5lcmF0ZWQuICAqLworICBERUNMX0VYVEVSTkFMIChpZnVuY19kZWNsKSA9 IDE7CisgIC8qIElGVU5DcyBoYXZlIHRvIGJlIGV4dGVybmFsbHkgdmlzaWJs ZS4gICovCisgIFRSRUVfUFVCTElDIChpZnVuY19kZWNsKSA9IDE7CisKKyAg cmV0dXJuIGlmdW5jX2RlY2w7ICAKK30KKworLyogRm9yIG11bHRpLXZlcnNp b25lZCBmdW5jdGlvbiBkZWNsLCB3aGljaCBzaG91bGQgYWxzbyBiZSB0aGUg ZGVmYXVsdCwKKyAgIHJldHVybiB0aGUgZGVjbCBvZiB0aGUgaWZ1bmMgcmVz b2x2ZXIsIGNyZWF0ZSBpdCBpZiBpdCBkb2VzIG5vdAorICAgZXhpc3QuICAq LworCit0cmVlCitnZXRfaWZ1bmNfZm9yX3ZlcnNpb24gKGNvbnN0IHRyZWUg ZGVjbCkKK3sKKyAgdmVyc2lvbl9mdW5jdGlvbiAqZGVjbF92OworICBpbnQg aXg7CisgIHZvaWRfcCBlbGU7CisKKyAgLyogREVDTCBoYXMgdG8gYmUgdGhl IGRlZmF1bHQgdmVyc2lvbiwgb3RoZXJ3aXNlIGl0IGlzIG1pc3NpbmcgYW5k CisgICAgIHRoYXQgaXMgbm90IGFsbG93ZWQuICAqLworICBpZiAoIWlzX2Rl ZmF1bHRfZnVuY3Rpb24gKGRlY2wpKQorICAgIHsKKyAgICAgIGVycm9yX2F0 IChERUNMX1NPVVJDRV9MT0NBVElPTiAoZGVjbCksICJEZWZhdWx0IHZlcnNp b24gbm90IGZvdW5kIik7CisgICAgICByZXR1cm4gZGVjbDsKKyAgICB9CisK KyAgZGVjbF92ID0gZmluZF9mdW5jdGlvbl92ZXJzaW9uIChkZWNsKTsKKyAg Z2NjX2Fzc2VydCAoZGVjbF92ICE9IE5VTEwpOworICBpZiAoZGVjbF92LT5p ZnVuY19kZWNsID09IE5VTEwpCisgICAgeworICAgICAgdHJlZSBpZnVuY19k ZWNsOworICAgICAgaWZ1bmNfZGVjbCA9IG1ha2VfaWZ1bmNfZnVuYyAoZGVj bCk7CisgICAgICBkZWNsX3YtPmlmdW5jX2RlY2wgPSBpZnVuY19kZWNsOwor ICAgIH0KKworICBpZiAoY2dyYXBoX2dldF9ub2RlIChkZWNsKSkKKyAgICBj Z3JhcGhfbWFya19mb3JjZV9vdXRwdXRfbm9kZSAoY2dyYXBoX2dldF9ub2Rl IChkZWNsKSk7CisKKyAgZm9yIChpeCA9IDA7IFZFQ19pdGVyYXRlICh2b2lk X3AsIGRlY2xfdi0+dmVyc2lvbnMsIGl4LCBlbGUpOyArK2l4KQorICAgIHsK KyAgICAgIHZlcnNpb25fZnVuY3Rpb24gKnYgPSAodmVyc2lvbl9mdW5jdGlv biAqKSBlbGU7CisgICAgICAvKiBUaGlzIGNvdWxkIGJlIGEgZGVsZXRlZCB2 ZXJzaW9uLiAgSGFwcGVucyB3aXRoCisJIGR1cGxpY2F0ZSBkZWNsYXJhdGlv bnMuICovCisgICAgICBpZiAodi0+aXNfZGVsZXRlZCkKKwljb250aW51ZTsK KyAgICAgIGdjY19hc3NlcnQgKHYtPmRlY2wgIT0gTlVMTCk7CisgICAgICBp ZiAoY2dyYXBoX2dldF9ub2RlICh2LT5kZWNsKSkKKwljZ3JhcGhfbWFya19m b3JjZV9vdXRwdXRfbm9kZSAoY2dyYXBoX2dldF9ub2RlICh2LT5kZWNsKSk7 CisgICAgfQorCisgIHJldHVybiBkZWNsX3YtPmlmdW5jX2RlY2w7Cit9CisK Ky8qIEdlbmVyYXRlIHRoZSBkaXNwYXRjaGluZyBjb2RlIHRvIGRpc3BhdGNo IG11bHRpLXZlcnNpb25lZCBmdW5jdGlvbgorICAgREVDTC4gIE1ha2UgYSBu ZXcgZnVuY3Rpb24gZGVjbCBmb3IgZGlzcGF0Y2hpbmcgYW5kIGNhbGwgdGhl IHRhcmdldAorICAgaG9vayB0byBwcm9jZXNzIHRoZSAidGFyZ2V0IiBhdHRy aWJ1dGVzIGFuZCBwcm92aWRlIHRoZSBjb2RlIHRvCisgICBkaXNwYXRjaCB0 aGUgcmlnaHQgZnVuY3Rpb24gYXQgcnVuLXRpbWUuICAqLworCitzdGF0aWMg dHJlZQorbWFrZV9pZnVuY19yZXNvbHZlcl9mb3JfdmVyc2lvbiAoY29uc3Qg dHJlZSBkZWNsKQoreworICB2ZXJzaW9uX2Z1bmN0aW9uICpkZWNsX3Y7Cisg IHRyZWUgaWZ1bmNfcmVzb2x2ZXJfZGVjbCwgaWZ1bmNfZGVjbDsKKyAgYmFz aWNfYmxvY2sgZW1wdHlfYmI7CisgIGludCBpeDsKKyAgdm9pZF9wIGVsZTsK KyAgVkVDICh0cmVlLCBoZWFwKSAqZm5fdmVyX3ZlYyA9IE5VTEw7CisgIHRy ZWUgb2xkX2N1cnJlbnRfZnVuY3Rpb25fZGVjbDsKKworICBnY2NfYXNzZXJ0 IChpc19kZWZhdWx0X2Z1bmN0aW9uIChkZWNsKSk7CisKKyAgZGVjbF92ID0g ZmluZF9mdW5jdGlvbl92ZXJzaW9uIChkZWNsKTsKKyAgZ2NjX2Fzc2VydCAo ZGVjbF92ICE9IE5VTEwpOworCisgIGlmIChkZWNsX3YtPmlmdW5jX3Jlc29s dmVyX2RlY2wgIT0gTlVMTCkKKyAgICByZXR1cm4gZGVjbF92LT5pZnVuY19y ZXNvbHZlcl9kZWNsOworCisgIGlmdW5jX2RlY2wgPSBkZWNsX3YtPmlmdW5j X2RlY2w7CisKKyAgaWYgKGlmdW5jX2RlY2wgPT0gTlVMTCkKKyAgICBpZnVu Y19kZWNsID0gZGVjbF92LT5pZnVuY19kZWNsID0gbWFrZV9pZnVuY19mdW5j IChkZWNsKTsKKworICBpZnVuY19yZXNvbHZlcl9kZWNsID0gbWFrZV9pZnVu Y19yZXNvbHZlcl9mdW5jIChkZWNsLCBpZnVuY19kZWNsLAorCQkJCQkJICAm ZW1wdHlfYmIpOworCisgIG9sZF9jdXJyZW50X2Z1bmN0aW9uX2RlY2wgPSBj dXJyZW50X2Z1bmN0aW9uX2RlY2w7CisgIHB1c2hfY2Z1biAoREVDTF9TVFJV Q1RfRlVOQ1RJT04gKGlmdW5jX3Jlc29sdmVyX2RlY2wpKTsKKyAgY3VycmVu dF9mdW5jdGlvbl9kZWNsID0gaWZ1bmNfcmVzb2x2ZXJfZGVjbDsKKworICBm bl92ZXJfdmVjID0gVkVDX2FsbG9jICh0cmVlLCBoZWFwLCAyKTsKKyAgVkVD X3NhZmVfcHVzaCAodHJlZSwgaGVhcCwgZm5fdmVyX3ZlYywgZGVjbCk7CisK KyAgZm9yIChpeCA9IDA7IFZFQ19pdGVyYXRlICh2b2lkX3AsIGRlY2xfdi0+ dmVyc2lvbnMsIGl4LCBlbGUpOyArK2l4KQorICAgIHsKKyAgICAgIHZlcnNp b25fZnVuY3Rpb24gKnYgPSAodmVyc2lvbl9mdW5jdGlvbiAqKSBlbGU7Cisg ICAgICBnY2NfYXNzZXJ0ICh2LT5kZWNsICE9IE5VTEwpOworICAgICAgLyog Q2hlY2sgZm9yIHZpcnR1YWwgZnVuY3Rpb25zIGhlcmUgYWdhaW4sIGFzIGJ5 IHRoaXMgdGltZSBpdCBzaG91bGQKKwkgaGF2ZSBiZWVuIGRldGVybWluZWQg aWYgdGhpcyBmdW5jdGlvbiBuZWVkcyBhIHZ0YWJsZSBpbmRleCBvcgorCSBu b3QuICBUaGlzIGhhcHBlbnMgZm9yIG1ldGhvZHMgaW4gZGVyaXZlZCBjbGFz c2VzIHRoYXQgb3ZlcnJpZGUKKwkgdmlydHVhbCBtZXRob2RzIGluIGJhc2Ug Y2xhc3NlcyBidXQgYXJlIG5vdCBleHBsaWNpdGx5IG1hcmtlZCBhcworCSB2 aXJ0dWFsLiAgKi8KKyAgICAgIGlmIChERUNMX1ZJTkRFWCAodi0+ZGVjbCkp CisgICAgICAgIGVycm9yX2F0IChERUNMX1NPVVJDRV9MT0NBVElPTiAodi0+ ZGVjbCksCisJCSAgIlZpcnR1YWwgZnVuY3Rpb24gdmVyc2lvbmluZyBub3Qg c3VwcG9ydGVkXG4iKTsKKyAgICAgIGlmICghdi0+aXNfZGVsZXRlZCkKKwlW RUNfc2FmZV9wdXNoICh0cmVlLCBoZWFwLCBmbl92ZXJfdmVjLCB2LT5kZWNs KTsKKyAgICB9CisKKyAgZ2NjX2Fzc2VydCAodGFyZ2V0bS5kaXNwYXRjaF92 ZXJzaW9uKTsKKyAgdGFyZ2V0bS5kaXNwYXRjaF92ZXJzaW9uIChpZnVuY19y ZXNvbHZlcl9kZWNsLCBmbl92ZXJfdmVjLCAmZW1wdHlfYmIpOworICBkZWNs X3YtPmlmdW5jX3Jlc29sdmVyX2RlY2wgPSBpZnVuY19yZXNvbHZlcl9kZWNs OworCisgIHBvcF9jZnVuICgpOworICBjdXJyZW50X2Z1bmN0aW9uX2RlY2wg PSBvbGRfY3VycmVudF9mdW5jdGlvbl9kZWNsOworICByZXR1cm4gaWZ1bmNf cmVzb2x2ZXJfZGVjbDsKK30KKworLyogTWFpbiBlbnRyeSBwb2ludCB0byBw YXNzX2Rpc3BhdGNoX3ZlcnNpb25zLiBGb3IgbXVsdGktdmVyc2lvbmVkIGZ1 bmN0aW9ucywKKyAgIGdlbmVyYXRlIHRoZSBkaXNwYXRjaGluZyBjb2RlLiAg Ki8KKworc3RhdGljIHVuc2lnbmVkIGludAorZG9fZGlzcGF0Y2hfdmVyc2lv bnMgKHZvaWQpCit7CisgIC8qIEEgbmV3IHBhc3MgZm9yIGdlbmVyYXRpbmcg ZGlzcGF0Y2ggY29kZSBmb3IgbXVsdGktdmVyc2lvbmVkIGZ1bmN0aW9ucy4K KyAgICAgT3RoZXIgZm9ybXMgb2YgZGlzcGF0Y2ggY2FuIGJlIGFkZGVkIHdo ZW4gaWZ1bmMgc3VwcG9ydCBpcyBub3QgYXZhaWxhYmxlCisgICAgIGxpa2Ug anVzdCBjYWxsaW5nIHRoZSBmdW5jdGlvbiBkaXJlY3RseSBhZnRlciBjaGVj a2luZyBmb3IgdGFyZ2V0IHR5cGUuCisgICAgIEN1cnJlbnRseSwgZGlzcGF0 Y2hpbmcgaXMgZG9uZSB0aHJvdWdoIElGVU5DLiAgVGhpcyBwYXNzIHdpbGwg YmVjb21lCisgICAgIG1vcmUgbWVhbmluZ2Z1bCB3aGVuIG90aGVyIGRpc3Bh dGNoIG1lY2hhbmlzbXMgYXJlIGFkZGVkLiAgKi8KKworICAvKiBDbG9uaW5n IGEgZnVuY3Rpb24gdG8gcHJvZHVjZSBtb3JlIHZlcnNpb25zIHdpbGwgaGFw cGVuIGhlcmUgd2hlbiB0aGUKKyAgICAgdXNlciByZXF1ZXN0cyB0aGF0IHZp YSB0aGUgdGFyZ2V0IGF0dHJpYnV0ZS4gRm9yIGV4YW1wbGUsCisgICAgIGlu dCBmb28gKCkgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgoImFyY2g9Y29yZTIi KSwgKCJhcmNoPWNvcmVpNyIpKSkpOworICAgICBtZWFucyB0aGF0IHRoZSB1 c2VyIHdhbnRzIHRoZSBzYW1lIGJvZHkgb2YgZm9vIHRvIGJlIHZlcnNpb25l ZCBmb3IgY29yZTIKKyAgICAgYW5kIGNvcmVpNy4gIEluIHRoYXQgY2FzZSwg dGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNsb25lZCBkdXJpbmcgdGhpcworICAg ICBwYXNzLiAgKi8KKyAgCisgIGlmIChERUNMX0ZVTkNUSU9OX1ZFUlNJT05F RCAoY3VycmVudF9mdW5jdGlvbl9kZWNsKQorICAgICAgJiYgaXNfZGVmYXVs dF9mdW5jdGlvbiAoY3VycmVudF9mdW5jdGlvbl9kZWNsKSkKKyAgICB7Cisg ICAgICB0cmVlIGRlY2wgPSBtYWtlX2lmdW5jX3Jlc29sdmVyX2Zvcl92ZXJz aW9uIChjdXJyZW50X2Z1bmN0aW9uX2RlY2wpOworICAgICAgaWYgKGR1bXBf ZmlsZSAmJiBkZWNsKQorCWR1bXBfZnVuY3Rpb25fdG9fZmlsZSAoZGVjbCwg ZHVtcF9maWxlLCBUREZfQkxPQ0tTKTsKKyAgICB9CisgIHJldHVybiAwOwor fQorCitzdGF0aWMgIGJvb2wKK2dhdGVfZGlzcGF0Y2hfdmVyc2lvbnMgKHZv aWQpCit7CisgIHJldHVybiB0cnVlOworfQorCisvKiBBIHBhc3MgdG8gZ2Vu ZXJhdGUgdGhlIGRpc3BhdGNoIGNvZGUgdG8gZXhlY3V0ZSB0aGUgYXBwcm9w cmlhdGUgdmVyc2lvbgorICAgb2YgYSBtdWx0aS12ZXJzaW9uZWQgZnVuY3Rp b24gYXQgcnVuLXRpbWUuICAqLworCitzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNz IHBhc3NfZGlzcGF0Y2hfdmVyc2lvbnMgPQoreworIHsKKyAgR0lNUExFX1BB U1MsCisgICJkaXNwYXRjaF9tdWx0aXZlcnNpb25fZnVuY3Rpb25zIiwgICAg LyogbmFtZSAqLworICBnYXRlX2Rpc3BhdGNoX3ZlcnNpb25zLAkJLyogZ2F0 ZSAqLworICBkb19kaXNwYXRjaF92ZXJzaW9ucywJCQkvKiBleGVjdXRlICov CisgIE5VTEwsCQkJCQkvKiBzdWIgKi8KKyAgTlVMTCwJCQkJCS8qIG5leHQg Ki8KKyAgMCwJCQkJCS8qIHN0YXRpY19wYXNzX251bWJlciAqLworICBUVl9N VUxUSVZFUlNJT05fRElTUEFUQ0gsCQkvKiB0dl9pZCAqLworICBQUk9QX2Nm ZywJCQkJLyogcHJvcGVydGllc19yZXF1aXJlZCAqLworICBQUk9QX2NmZywJ CQkJLyogcHJvcGVydGllc19wcm92aWRlZCAqLworICAwLAkJCQkJLyogcHJv cGVydGllc19kZXN0cm95ZWQgKi8KKyAgMCwJCQkJCS8qIHRvZG9fZmxhZ3Nf c3RhcnQgKi8KKyAgMAkJCQkJLyogdG9kb19mbGFnc19maW5pc2ggKi8KKyB9 Cit9OwpJbmRleDogZ2NjL2NncmFwaHVuaXQuYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBnY2MvY2dyYXBodW5pdC5jCShyZXZpc2lvbiAxODczNzEp CisrKyBnY2MvY2dyYXBodW5pdC5jCSh3b3JraW5nIGNvcHkpCkBAIC00MjAs NiArNDIwLDEzIEBAIGNncmFwaF9maW5hbGl6ZV9mdW5jdGlvbiAodHJlZSBk ZWNsLCBib29sIG5lc3RlZCkKICAgICAgICYmICFERUNMX0RJU1JFR0FSRF9J TkxJTkVfTElNSVRTIChkZWNsKSkKICAgICBub2RlLT5zeW1ib2wuZm9yY2Vf b3V0cHV0ID0gMTsKIAorICAvKiBXaXRoIGZ1bmN0aW9uIHZlcnNpb25zLCBr ZWVwIGlubGluZSBmdW5jdGlvbnMgYW5kIGRvIG5vdCB3b3JyeSBhYm91dAor ICAgICBpbmxpbmUgbGltaXRzLiAgKi8KKyAgaWYgKERFQ0xfRlVOQ1RJT05f VkVSU0lPTkVEIChkZWNsKQorICAgICAgJiYgREVDTF9ERUNMQVJFRF9JTkxJ TkVfUCAoZGVjbCkKKyAgICAgICYmICFERUNMX0VYVEVSTkFMIChkZWNsKSkK KyAgICBub2RlLT5zeW1ib2wuZm9yY2Vfb3V0cHV0ID0gMTsKKwogICAvKiBX aGVuIG5vdCBvcHRpbWl6aW5nLCBhbHNvIG91dHB1dCB0aGUgc3RhdGljIGZ1 bmN0aW9ucy4gKHNlZQogICAgICBQUjI0NTYxKSwgYnV0IGRvbid0IGRvIHNv IGZvciBhbHdheXNfaW5saW5lIGZ1bmN0aW9ucywgZnVuY3Rpb25zCiAgICAg IGRlY2xhcmVkIGlubGluZSBhbmQgbmVzdGVkIGZ1bmN0aW9ucy4gIFRoZXNl IHdlcmUgb3B0aW1pemVkIG91dApJbmRleDogZ2NjL211bHRpdmVyc2lvbi5o Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy9tdWx0aXZlcnNpb24u aAkocmV2aXNpb24gMCkKKysrIGdjYy9tdWx0aXZlcnNpb24uaAkocmV2aXNp b24gMCkKQEAgLTAsMCArMSw1NSBAQAorLyogRnVuY3Rpb24gTXVsdGl2ZXJz aW9uaW5nLgorICAgQ29weXJpZ2h0IChDKSAyMDEyIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgU3JpcmFtYW4g VGFsbGFtICh0bXNyaXJhbUBnb29nbGUuY29tKQorCitUaGlzIGZpbGUgaXMg cGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIK K3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVS Q0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Zv ciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9u ZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNl ZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAqLworCisvKiBU aGlzIGlzIHRoZSBoZWFkZXIgZmlsZSB3aGljaCBwcm92aWRlcyB0aGUgZnVu Y3Rpb25zIHRvIGtlZXAgdHJhY2sKKyAgIG9mIGZ1bmN0aW9ucyB0aGF0IGFy ZSBtdWx0aS12ZXJzaW9uZWQgYW5kIHRvIGdlbmVyYXRlIHRoZSBkaXNwYXRj aAorICAgY29kZSB0byBjYWxsIHRoZSByaWdodCB2ZXJzaW9uIGF0IHJ1bi10 aW1lLiAgKi8KKworI2lmbmRlZiBHQ0NfTVVMVElWRVJTSU9OX0gKKyNkZWZp bmUgR0NDX01VTFRJVkVSSU9OX0gKKworI2luY2x1ZGUgInRyZWUuaCIKKwor LyogTWFyayBERUNMMSBhbmQgREVDTDIgYXMgZnVuY3Rpb24gdmVyc2lvbnMu ICAqLworaW50IGdyb3VwX2Z1bmN0aW9uX3ZlcnNpb25zIChjb25zdCB0cmVl IGRlY2wxLCBjb25zdCB0cmVlIGRlY2wyKTsKKworLyogTWFyayBERUNMIGFz IGRlbGV0ZWQgYW5kIG5vIGxvbmdlciBhIHZlcnNpb24uICAqLwordm9pZCBt YXJrX2RlbGV0ZV9kZWNsX3ZlcnNpb24gKGNvbnN0IHRyZWUgZGVjbCk7CisK Ky8qIFJldHVybnMgdHJ1ZSBpZiBERUNMIGlzIHRoZSBkZWZhdWx0IHZlcnNp b24gdG8gYmUgZXhlY3V0ZWQgaWYgYWxsCisgICBvdGhlciB2ZXJzaW9ucyBh cmUgaW5hcHByb3ByaWF0ZSBhdCBydW4tdGltZS4gICovCitib29sIGlzX2Rl ZmF1bHRfZnVuY3Rpb24gKGNvbnN0IHRyZWUgZGVjbCk7CisKKy8qIEdldHMg dGhlIElGVU5DIGRpc3BhdGNoZXIgZm9yIHRoaXMgbXVsdGktdmVyc2lvbmVk IGZ1bmN0aW9uIERFQ0wuIERFQ0wKKyAgIG11c3QgYmUgdGhlIGRlZmF1bHQg ZnVuY3Rpb24gaW4gdGhlIG11bHRpLXZlcnNpb25lZCBncm91cC4gICovCit0 cmVlIGdldF9pZnVuY19mb3JfdmVyc2lvbiAoY29uc3QgdHJlZSBkZWNsKTsK KworLyogUmV0dXJucyB0cnVlIHdoZW4gb25seSBvbmUgb2YgREVDTDEgYW5k IERFQ0wyIGlzIG1hcmtlZCB3aXRoICJ0YXJnZXQiCisgICBvciBpZiB0aGUg InRhcmdldCIgYXR0cmlidXRlIHN0cmluZ3Mgb2YgIERFQ0wxIGFuZCBERUNM MiBkb250IG1hdGNoLiAgKi8KK2Jvb2wgaGFzX2RpZmZlcmVudF92ZXJzaW9u X2F0dHJpYnV0ZXMgKGNvbnN0IHRyZWUgZGVjbDEsIGNvbnN0IHRyZWUgZGVj bDIpOworCisvKiBGdW5jdGlvbiBERUNMIGlzIG1hcmtlZCB0byBiZSBhIG11 bHRpLXZlcnNpb25lZCBmdW5jdGlvbi4gIElmIERFQ0wgaXMKKyAgIG5vdCB0 aGUgZGVmYXVsdCB2ZXJzaW9uLCB0aGUgYXNzZW1ibGVyIG5hbWUgb2YgREVD TCBpcyBjaGFuZ2VkIHRvIGluY2x1ZGUKKyAgIHRoZSBhdHRyaWJ1dGUgc3Ry aW5nIHRvIGtlZXAgdGhlIG5hbWUgdW5hbWJpZ3VvdXMuICAqLwordm9pZCBt YXJrX2Z1bmN0aW9uX2FzX3ZlcnNpb24gKGNvbnN0IHRyZWUgZGVjbCk7CisK Ky8qIENoZWNrIGlmIGRlY2wgaXMgRlVOQ1RJT05fREVDTCB3aXRoIHRhcmdl dCBhdHRyaWJ1dGUgc2V0LiAgKi8KK2Jvb2wgaXNfdGFyZ2V0X2F0dHJpYnV0 ZV9zZXQgKGNvbnN0IHRyZWUgZGVjbCk7CisjZW5kaWYKSW5kZXg6IGdjYy90 ZXN0c3VpdGUvZysrLmRnL212MS5DCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIGdjYy90ZXN0c3VpdGUvZysrLmRnL212MS5DCShyZXZpc2lvbiAwKQor KysgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvbXYxLkMJKHJldmlzaW9uIDApCkBA IC0wLDAgKzEsMjAyIEBACisvKiBUZXN0IGNhc2UgdG8gY2hlY2sgaWYgTXVs dGl2ZXJzaW9uaW5nIHdvcmtzLiAgKi8KKy8qIHsgZGctZG8gcnVuIHsgdGFy Z2V0IGk/ODYtKi0qIHg4Nl82NC0qLSogfSB9ICovCisvKiB7IGRnLXJlcXVp cmUtaWZ1bmMgIiIgfSAgKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1mUElD IiB9ICovCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworLyogRGVmYXVsdCB2 ZXJzaW9uLiAgKi8KK2ludCBmb28gKCk7CisvKiBUaGUgb3RoZXIgdmVyc2lv bnMgb2YgZm9vLiAgTWl4IHVwIHRoZSBvcmRlcmluZyBhbmQgCisgICBjaGVj ayBpZiB0aGUgZGlzcGF0Y2hpbmcgZG9lcyBpdCBpbiB0aGUgb3JkZXIgb2Yg cHJpb3JpdHkuICovCisvKiBDaGVjayBjb21iaW5hdGlvbiBvZiB0YXJnZXQg YXR0cmlidXRlcy4gICovCitpbnQgZm9vICgpIF9fYXR0cmlidXRlX18gKCh0 YXJnZXQoImFyY2g9Y29yZWk3LHBvcGNudCIpKSk7CisvKiBUaGUgdGFyZ2V0 IG9wZXJhbmRzIGluIHRoaXMgZGVjbGFyYXRpb24gYW5kIHRoZSBkZWZpbml0 aW9uIGFyZSByZS1vcmRlcmVkLgorICAgVGhpcyBzaG91bGQgc3RpbGwgd29y ay4gICovCitpbnQgZm9vICgpIF9fYXR0cmlidXRlX18gKCh0YXJnZXQoInNz c2UzLGF2eDIiKSkpOworCisvKiBDaGVjayBmb3IgYWxsIHRhcmdldCBhdHRy aWJ1dGVzIGZvciB3aGljaCBkaXNwYXRjaGVycyBhcmUgYXZhaWxhYmxlLiAg Ki8KKy8qIENoZWNrIGFyY2g9ICovCitpbnQgZm9vICgpIF9fYXR0cmlidXRl X18oKHRhcmdldCgiYXJjaD1jb3JlMiIpKSk7CitpbnQgZm9vICgpIF9fYXR0 cmlidXRlX18oKHRhcmdldCgiYXJjaD1jb3JlaTciKSkpOworaW50IGZvbyAo KSBfX2F0dHJpYnV0ZV9fKCh0YXJnZXQoImFyY2g9YXRvbSIpKSk7CisvKiBD aGVjayBJU0FzICAqLworaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9fKCh0YXJn ZXQoInNzZTMiKSkpOworaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9fKCh0YXJn ZXQoInNzZTIiKSkpOworaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9fKCh0YXJn ZXQoInNzZSIpKSk7CitpbnQgZm9vICgpIF9fYXR0cmlidXRlX18oKHRhcmdl dCgiYXZ4IikpKTsKK2ludCBmb28gKCkgX19hdHRyaWJ1dGVfXygodGFyZ2V0 KCJzc2U0LjIiKSkpOworaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9fKCh0YXJn ZXQoInBvcGNudCIpKSk7CitpbnQgZm9vICgpIF9fYXR0cmlidXRlX18oKHRh cmdldCgic3NlNC4xIikpKTsKK2ludCBmb28gKCkgX19hdHRyaWJ1dGVfXygo dGFyZ2V0KCJzc3NlMyIpKSk7CitpbnQgZm9vICgpIF9fYXR0cmlidXRlX18o KHRhcmdldCgibW14IikpKTsKK2ludCBmb28gKCkgX19hdHRyaWJ1dGVfXygo dGFyZ2V0KCJhdngyIikpKTsKKy8qIENoZWNrIG1vcmUgYXJjaD0uICAqLwor aW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9fKCh0YXJnZXQoImFyY2g9YW1kZmFt MTAiKSkpOworaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9fKCh0YXJnZXQoImFy Y2g9YmR2ZXIxIikpKTsKK2ludCBmb28gKCkgX19hdHRyaWJ1dGVfXygodGFy Z2V0KCJhcmNoPWJkdmVyMiIpKSk7CisKK2ludCAoKnApKCkgPSAmZm9vOwor aW50IG1haW4gKCkKK3sKKyAgaW50IHZhbCA9IGZvbyAoKTsKKyAgYXNzZXJ0 ICh2YWwgPT0gICgqcCkoKSk7CisKKyAgLyogQ2hlY2sgaW4gdGhlIGV4YWN0 IHNhbWUgb3JkZXIgaW4gd2hpY2ggdGhlIGRpc3BhdGNoaW5nCisgICAgIGlz IGV4cGVjdGVkIHRvIGhhcHBlbi4gICovCisgIGlmIChfX2J1aWx0aW5fY3B1 X2lzICgiYmR2ZXIxIikpCisgICAgYXNzZXJ0ICh2YWwgPT0gMSk7CisgIGVs c2UgaWYgKF9fYnVpbHRpbl9jcHVfaXMgKCJiZHZlcjIiKSkKKyAgICBhc3Nl cnQgKHZhbCA9PSAyKTsKKyAgZWxzZSBpZiAoX19idWlsdGluX2NwdV9zdXBw b3J0cyAoImF2eDIiKQorCSAgICYmIF9fYnVpbHRpbl9jcHVfc3VwcG9ydHMg KCJzc3NlMyIpKQorICAgIGFzc2VydCAodmFsID09IDMpOworICBlbHNlIGlm IChfX2J1aWx0aW5fY3B1X3N1cHBvcnRzICgiYXZ4MiIpKQorICAgIGFzc2Vy dCAodmFsID09IDQpOworICBlbHNlIGlmIChfX2J1aWx0aW5fY3B1X3N1cHBv cnRzICgiYXZ4IikpCisgICAgYXNzZXJ0ICh2YWwgPT0gNSk7CisgIGVsc2Ug aWYgKF9fYnVpbHRpbl9jcHVfaXMgKCJjb3JlaTciKQorCSAgICYmIF9fYnVp bHRpbl9jcHVfc3VwcG9ydHMgKCJwb3BjbnQiKSkKKyAgICBhc3NlcnQgKHZh bCA9PSA2KTsKKyAgZWxzZSBpZiAoX19idWlsdGluX2NwdV9zdXBwb3J0cyAo InBvcGNudCIpKQorICAgIGFzc2VydCAodmFsID09IDcpOworICBlbHNlIGlm IChfX2J1aWx0aW5fY3B1X2lzICgiY29yZWk3IikpCisgICAgYXNzZXJ0ICh2 YWwgPT0gOCk7CisgIGVsc2UgaWYgKF9fYnVpbHRpbl9jcHVfc3VwcG9ydHMg KCJzc2U0LjIiKSkKKyAgICBhc3NlcnQgKHZhbCA9PSA5KTsKKyAgZWxzZSBp ZiAoX19idWlsdGluX2NwdV9zdXBwb3J0cyAoInNzZTQuMSIpKQorICAgIGFz c2VydCAodmFsID09IDEwKTsKKyAgZWxzZSBpZiAoX19idWlsdGluX2NwdV9p cyAoImFtZGZhbTEwaCIpKQorICAgIGFzc2VydCAodmFsID09IDExKTsKKyAg ZWxzZSBpZiAoX19idWlsdGluX2NwdV9pcyAoImNvcmUyIikpCisgICAgYXNz ZXJ0ICh2YWwgPT0gMTIpOworICBlbHNlIGlmIChfX2J1aWx0aW5fY3B1X2lz ICgiYXRvbSIpKQorICAgIGFzc2VydCAodmFsID09IDEzKTsKKyAgZWxzZSBp ZiAoX19idWlsdGluX2NwdV9zdXBwb3J0cyAoInNzc2UzIikpCisgICAgYXNz ZXJ0ICh2YWwgPT0gMTQpOworICBlbHNlIGlmIChfX2J1aWx0aW5fY3B1X3N1 cHBvcnRzICgic3NlMyIpKQorICAgIGFzc2VydCAodmFsID09IDE1KTsKKyAg ZWxzZSBpZiAoX19idWlsdGluX2NwdV9zdXBwb3J0cyAoInNzZTIiKSkKKyAg ICBhc3NlcnQgKHZhbCA9PSAxNik7CisgIGVsc2UgaWYgKF9fYnVpbHRpbl9j cHVfc3VwcG9ydHMgKCJzc2UiKSkKKyAgICBhc3NlcnQgKHZhbCA9PSAxNyk7 CisgIGVsc2UgaWYgKF9fYnVpbHRpbl9jcHVfc3VwcG9ydHMgKCJtbXgiKSkK KyAgICBhc3NlcnQgKHZhbCA9PSAxOCk7CisgIGVsc2UKKyAgICBhc3NlcnQg KHZhbCA9PSAwKTsKKyAgCisgIHJldHVybiAwOworfQorCitpbnQgZm9vICgp Cit7CisgIHJldHVybiAwOworfQorCitpbnQgX19hdHRyaWJ1dGVfXyAoKHRh cmdldCgiYXJjaD1iZHZlcjEiKSkpCitmb28gKCkKK3sKKyAgcmV0dXJuIDE7 Cit9CisKK2ludCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJhcmNoPWJkdmVy MiIpKSkKK2ZvbyAoKQoreworICByZXR1cm4gMjsKK30KKworaW50IF9fYXR0 cmlidXRlX18gKCh0YXJnZXQoImF2eDIsc3NzZTMiKSkpCitmb28gKCkKK3sK KyAgcmV0dXJuIDM7Cit9CisKK2ludCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0 KCJhdngyIikpKQorZm9vICgpCit7CisgIHJldHVybiA0OworfQorCitpbnQg X19hdHRyaWJ1dGVfXyAoKHRhcmdldCgiYXZ4IikpKQorZm9vICgpCit7Cisg IHJldHVybiA1OworfQorCitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgi YXJjaD1jb3JlaTcscG9wY250IikpKQorZm9vICgpCit7CisgIHJldHVybiA2 OworfQorCitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgicG9wY250Iikp KQorZm9vICgpCit7CisgIHJldHVybiA3OworfQorCitpbnQgX19hdHRyaWJ1 dGVfXyAoKHRhcmdldCgiYXJjaD1jb3JlaTciKSkpCitmb28gKCkKK3sKKyAg cmV0dXJuIDg7Cit9CisKK2ludCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJz c2U0LjIiKSkpCitmb28gKCkKK3sKKyAgcmV0dXJuIDk7Cit9CisKK2ludCBf X2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJzc2U0LjEiKSkpCitmb28gKCkKK3sK KyAgcmV0dXJuIDEwOworfQorCitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdl dCgiYXJjaD1hbWRmYW0xMCIpKSkKK2ZvbyAoKQoreworICByZXR1cm4gMTE7 Cit9CisKK2ludCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJhcmNoPWNvcmUy IikpKQorZm9vICgpCit7CisgIHJldHVybiAxMjsKK30KKworaW50IF9fYXR0 cmlidXRlX18gKCh0YXJnZXQoImFyY2g9YXRvbSIpKSkKK2ZvbyAoKQorewor ICByZXR1cm4gMTM7Cit9CisKK2ludCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0 KCJzc3NlMyIpKSkKK2ZvbyAoKQoreworICByZXR1cm4gMTQ7Cit9CisKK2lu dCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJzc2UzIikpKQorZm9vICgpCit7 CisgIHJldHVybiAxNTsKK30KKworaW50IF9fYXR0cmlidXRlX18gKCh0YXJn ZXQoInNzZTIiKSkpCitmb28gKCkKK3sKKyAgcmV0dXJuIDE2OworfQorCitp bnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgic3NlIikpKQorZm9vICgpCit7 CisgIHJldHVybiAxNzsKK30KKworaW50IF9fYXR0cmlidXRlX18gKCh0YXJn ZXQoIm1teCIpKSkKK2ZvbyAoKQoreworICByZXR1cm4gMTg7Cit9CkluZGV4 OiBnY2MvdGVzdHN1aXRlL2crKy5kZy9tdjIuQwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBnY2MvdGVzdHN1aXRlL2crKy5kZy9tdjIuQwkocmV2aXNp b24gMCkKKysrIGdjYy90ZXN0c3VpdGUvZysrLmRnL212Mi5DCShyZXZpc2lv biAwKQpAQCAtMCwwICsxLDExOSBAQAorLyogVGVzdCBjYXNlIHRvIGNoZWNr IGlmIE11bHRpdmVyc2lvbmluZyBjaG9vc2VzIHRoZSBjb3JyZWN0CisgICBk aXNwYXRjaGluZyBvcmRlciB3aGVuIHZlcnNpb25zIGFyZSBmb3IgdmFyaW91 cyBJU0FzLiAgKi8KKy8qIHsgZGctZG8gcnVuIHsgdGFyZ2V0IGk/ODYtKi0q IHg4Nl82NC0qLSogfSB9ICovCisvKiB7IGRnLXJlcXVpcmUtaWZ1bmMgIiIg fSAgKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIiB9ICovCisKKyNpbmNsdWRl IDxhc3NlcnQuaD4KKworLyogRGVmYXVsdCB2ZXJzaW9uLiAgKi8KK2ludCBm b28gKCk7CisvKiBUaGUgZGlzcGF0Y2ggY2hlY2tzIHNob3VsZCBiZSBpbiB0 aGUgZXhhY3QgcmV2ZXJzZSBvcmRlciBvZiB0aGUKKyAgIGRlY2xhcmF0aW9u cyBiZWxvdy4gICovCitpbnQgZm9vICgpIF9fYXR0cmlidXRlX18gKCh0YXJn ZXQgKCJtbXgiKSkpOworaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9fICgodGFy Z2V0ICgic3NlIikpKTsKK2ludCBmb28gKCkgX19hdHRyaWJ1dGVfXyAoKHRh cmdldCAoInNzZTIiKSkpOworaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9fICgo dGFyZ2V0ICgic3NlMyIpKSk7CitpbnQgZm9vICgpIF9fYXR0cmlidXRlX18g KCh0YXJnZXQgKCJzc3NlMyIpKSk7CitpbnQgZm9vICgpIF9fYXR0cmlidXRl X18gKCh0YXJnZXQgKCJzc2U0LjEiKSkpOworaW50IGZvbyAoKSBfX2F0dHJp YnV0ZV9fICgodGFyZ2V0ICgic3NlNC4yIikpKTsKK2ludCBmb28gKCkgX19h dHRyaWJ1dGVfXyAoKHRhcmdldCAoInBvcGNudCIpKSk7CitpbnQgZm9vICgp IF9fYXR0cmlidXRlX18gKCh0YXJnZXQgKCJhdngiKSkpOworaW50IGZvbyAo KSBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0ICgiYXZ4MiIpKSk7CisKK2ludCBt YWluICgpCit7CisKKyAgaW50IHZhbCA9IGZvbyAoKTsKKworICBpZiAoX19i dWlsdGluX2NwdV9zdXBwb3J0cyAoImF2eDIiKSkKKyAgICBhc3NlcnQgKHZh bCA9PSAxKTsKKyAgZWxzZSBpZiAoX19idWlsdGluX2NwdV9zdXBwb3J0cyAo ImF2eCIpKQorICAgIGFzc2VydCAodmFsID09IDIpOworICBlbHNlIGlmIChf X2J1aWx0aW5fY3B1X3N1cHBvcnRzICgicG9wY250IikpCisgICAgYXNzZXJ0 ICh2YWwgPT0gMyk7CisgIGVsc2UgaWYgKF9fYnVpbHRpbl9jcHVfc3VwcG9y dHMgKCJzc2U0LjIiKSkKKyAgICBhc3NlcnQgKHZhbCA9PSA0KTsKKyAgZWxz ZSBpZiAoX19idWlsdGluX2NwdV9zdXBwb3J0cyAoInNzZTQuMSIpKQorICAg IGFzc2VydCAodmFsID09IDUpOworICBlbHNlIGlmIChfX2J1aWx0aW5fY3B1 X3N1cHBvcnRzICgic3NzZTMiKSkKKyAgICBhc3NlcnQgKHZhbCA9PSA2KTsK KyAgZWxzZSBpZiAoX19idWlsdGluX2NwdV9zdXBwb3J0cyAoInNzZTMiKSkK KyAgICBhc3NlcnQgKHZhbCA9PSA3KTsKKyAgZWxzZSBpZiAoX19idWlsdGlu X2NwdV9zdXBwb3J0cyAoInNzZTIiKSkKKyAgICBhc3NlcnQgKHZhbCA9PSA4 KTsKKyAgZWxzZSBpZiAoX19idWlsdGluX2NwdV9zdXBwb3J0cyAoInNzZSIp KQorICAgIGFzc2VydCAodmFsID09IDkpOworICBlbHNlIGlmIChfX2J1aWx0 aW5fY3B1X3N1cHBvcnRzICgibW14IikpCisgICAgYXNzZXJ0ICh2YWwgPT0g MTApOworICBlbHNlCisgICAgYXNzZXJ0ICh2YWwgPT0gMCk7CisKKyAgcmV0 dXJuIDA7Cit9CisKK2ludAorZm9vICgpCit7CisgIHJldHVybiAwOworfQor CitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgiYXZ4MiIpKSkKK2ZvbyAo KQoreworICByZXR1cm4gMTsKK30KKworaW50IF9fYXR0cmlidXRlX18gKCh0 YXJnZXQoImF2eCIpKSkKK2ZvbyAoKQoreworICByZXR1cm4gMjsKK30KKwor aW50IF9fYXR0cmlidXRlX18gKCh0YXJnZXQoInBvcGNudCIpKSkKK2ZvbyAo KQoreworICByZXR1cm4gMzsKK30KKworaW50IF9fYXR0cmlidXRlX18gKCh0 YXJnZXQoInNzZTQuMiIpKSkKK2ZvbyAoKQoreworICByZXR1cm4gNDsKK30K KworaW50IF9fYXR0cmlidXRlX18gKCh0YXJnZXQoInNzZTQuMSIpKSkKK2Zv byAoKQoreworICByZXR1cm4gNTsKK30KKworaW50IF9fYXR0cmlidXRlX18g KCh0YXJnZXQoInNzc2UzIikpKQorZm9vICgpCit7CisgIHJldHVybiA2Owor fQorCitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgic3NlMyIpKSkKK2Zv byAoKQoreworICByZXR1cm4gNzsKK30KKworaW50IF9fYXR0cmlidXRlX18g KCh0YXJnZXQoInNzZTIiKSkpCitmb28gKCkKK3sKKyAgcmV0dXJuIDg7Cit9 CisKK2ludCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJzc2UiKSkpCitmb28g KCkKK3sKKyAgcmV0dXJuIDk7Cit9CisKK2ludCBfX2F0dHJpYnV0ZV9fICgo dGFyZ2V0KCJtbXgiKSkpCitmb28gKCkKK3sKKyAgcmV0dXJuIDEwOworfQpJ bmRleDogZ2NjL2NwL2NsYXNzLmMKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gZ2NjL2NwL2NsYXNzLmMJKHJldmlzaW9uIDE4NzM3MSkKKysrIGdjYy9j cC9jbGFzcy5jCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBAIGFs b25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qg c2VlCiAjaW5jbHVkZSAidHJlZS1kdW1wLmgiCiAjaW5jbHVkZSAic3BsYXkt dHJlZS5oIgogI2luY2x1ZGUgInBvaW50ZXItc2V0LmgiCisjaW5jbHVkZSAi bXVsdGl2ZXJzaW9uLmgiCiAKIC8qIFRoZSBudW1iZXIgb2YgbmVzdGVkIGNs YXNzZXMgYmVpbmcgcHJvY2Vzc2VkLiAgSWYgd2UgYXJlIG5vdCBpbiB0aGUK ICAgIHNjb3BlIG9mIGFueSBjbGFzcywgdGhpcyBpcyB6ZXJvLiAgKi8KQEAg LTEwOTMsNyArMTA5NCwyMSBAQCBhZGRfbWV0aG9kICh0cmVlIHR5cGUsIHRy ZWUgbWV0aG9kLCB0cmVlIHVzaW5nX2RlYwogCSAgICAgIHx8IHNhbWVfdHlw ZV9wIChUUkVFX1RZUEUgKGZuX3R5cGUpLAogCQkJICAgICAgVFJFRV9UWVBF IChtZXRob2RfdHlwZSkpKSkKIAl7Ci0JICBpZiAodXNpbmdfZGVjbCkKKwkg IC8qIEZvciBmdW5jdGlvbiB2ZXJzaW9ucywgdGhlaXIgcGFybXMgYW5kIHR5 cGVzIG1hdGNoCisJICAgICBidXQgdGhleSBhcmUgbm90IGR1cGxpY2F0ZXMu ICBSZWNvcmQgZnVuY3Rpb24gdmVyc2lvbnMKKwkgICAgIGFzIGFuZCB3aGVu IHRoZXkgYXJlIGZvdW5kLiAgKi8KKwkgIGlmIChUUkVFX0NPREUgKGZuKSA9 PSBGVU5DVElPTl9ERUNMCisJICAgICAgJiYgVFJFRV9DT0RFIChtZXRob2Qp ID09IEZVTkNUSU9OX0RFQ0wKKwkgICAgICAmJiAoaXNfdGFyZ2V0X2F0dHJp YnV0ZV9zZXQgKGZuKQorCQkgIHx8IGlzX3RhcmdldF9hdHRyaWJ1dGVfc2V0 IChtZXRob2QpKQorCSAgICAgICYmIGhhc19kaWZmZXJlbnRfdmVyc2lvbl9h dHRyaWJ1dGVzIChmbiwgbWV0aG9kKSkKKyAJICAgIHsKKwkgICAgICBtYXJr X2Z1bmN0aW9uX2FzX3ZlcnNpb24gKGZuKTsKKwkgICAgICBtYXJrX2Z1bmN0 aW9uX2FzX3ZlcnNpb24gKG1ldGhvZCk7CisJICAgICAgZ3JvdXBfZnVuY3Rp b25fdmVyc2lvbnMgKGZuLCBtZXRob2QpOworCSAgICAgIGNvbnRpbnVlOwor CSAgICB9CisJICBlbHNlIGlmICh1c2luZ19kZWNsKQogCSAgICB7CiAJICAg ICAgaWYgKERFQ0xfQ09OVEVYVCAoZm4pID09IHR5cGUpCiAJCS8qIERlZmVy IHRvIHRoZSBsb2NhbCBmdW5jdGlvbi4gICovCkBAIC0xMTUxLDYgKzExNjYs NyBAQCBhZGRfbWV0aG9kICh0cmVlIHR5cGUsIHRyZWUgbWV0aG9kLCB0cmVl IHVzaW5nX2RlYwogICBlbHNlCiAgICAgLyogUmVwbGFjZSB0aGUgY3VycmVu dCBzbG90LiAgKi8KICAgICBWRUNfcmVwbGFjZSAodHJlZSwgbWV0aG9kX3Zl Yywgc2xvdCwgb3ZlcmxvYWQpOworCiAgIHJldHVybiB0cnVlOwogfQogCkBA IC02OTI4LDggKzY5NDQsMTEgQEAgcmVzb2x2ZV9hZGRyZXNzX29mX292ZXJs b2FkZWRfZnVuY3Rpb24gKHRyZWUgdGFyZ2UKIAkgIGlmIChERUNMX0FOVElD SVBBVEVEIChmbikpCiAJICAgIGNvbnRpbnVlOwogCi0JICAvKiBTZWUgaWYg dGhlcmUncyBhIG1hdGNoLiAgKi8KLQkgIGlmIChzYW1lX3R5cGVfcCAodGFy Z2V0X2ZuX3R5cGUsIHN0YXRpY19mbl90eXBlIChmbikpKQorCSAgLyogU2Vl IGlmIHRoZXJlJ3MgYSBtYXRjaC4gICBGb3IgZnVuY3Rpb25zIHRoYXQgYXJl IG11bHRpLXZlcnNpb25lZAorCSAgICAgbWF0Y2ggaXQgdG8gdGhlIGRlZmF1 bHQgZnVuY3Rpb24uICAqLworCSAgaWYgKHNhbWVfdHlwZV9wICh0YXJnZXRf Zm5fdHlwZSwgc3RhdGljX2ZuX3R5cGUgKGZuKSkKKwkgICAgICAmJiAoIURF Q0xfRlVOQ1RJT05fVkVSU0lPTkVEIChmbikKKwkJICB8fCBpc19kZWZhdWx0 X2Z1bmN0aW9uIChmbikpKQogCSAgICBtYXRjaGVzID0gdHJlZV9jb25zIChm biwgTlVMTF9UUkVFLCBtYXRjaGVzKTsKIAl9CiAgICAgfQpAQCAtNzA5MSw2 ICs3MTEwLDIyIEBAIHJlc29sdmVfYWRkcmVzc19vZl9vdmVybG9hZGVkX2Z1 bmN0aW9uICh0cmVlIHRhcmdlCiAgICAgICBwZXJmb3JtX29yX2RlZmVyX2Fj Y2Vzc19jaGVjayAoYWNjZXNzX3BhdGgsIGZuLCBmbik7CiAgICAgfQogCisg IC8qIElmIGEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRoYXQgaXMgbXVsdGkt dmVyc2lvbmVkIGlzIHJlcXVlc3RlZCwgdGhlCisgICAgIHBvaW50ZXIgdG8g dGhlIGRpc3BhdGNoZXIgZnVuY3Rpb24gaXMgcmV0dXJuZWQgaW5zdGVhZC4g IFRoaXMgd29ya3MKKyAgICAgd2VsbCBiZWNhdXNlIGluZGlyZWN0bHkgY2Fs bGluZyB0aGUgZnVuY3Rpb24gd2lsbCBkaXNwYXRjaCB0aGUgcmlnaHQKKyAg ICAgZnVuY3Rpb24gdmVyc2lvbiBhdCBydW4tdGltZS4gQWxzbywgdGhlIGZ1 bmN0aW9uIGFkZHJlc3MgaXMga2VwdAorICAgICB1bmlxdWUuICAqLworICBp ZiAoREVDTF9GVU5DVElPTl9WRVJTSU9ORUQgKGZuKQorICAgICAgJiYgaXNf ZGVmYXVsdF9mdW5jdGlvbiAoZm4pKQorICAgIHsKKyAgICAgIHRyZWUgaWZ1 bmNfZGVjbDsKKyAgICAgIGlmdW5jX2RlY2wgPSBnZXRfaWZ1bmNfZm9yX3Zl cnNpb24gKGZuKTsKKyAgICAgIHJldHJvZml0X2xhbmdfZGVjbCAoaWZ1bmNf ZGVjbCk7CisgICAgICBnY2NfYXNzZXJ0IChpZnVuY19kZWNsICE9IE5VTEwp OworICAgICAgbWFya191c2VkIChmbik7CisgICAgICByZXR1cm4gYnVpbGRf Zm9sZF9hZGRyX2V4cHIgKGlmdW5jX2RlY2wpOworICAgIH0KKwogICBpZiAo VFlQRV9QVFJGTl9QICh0YXJnZXRfdHlwZSkgfHwgVFlQRV9QVFJNRU1GVU5D X1AgKHRhcmdldF90eXBlKSkKICAgICByZXR1cm4gY3BfYnVpbGRfYWRkcl9l eHByIChmbiwgZmxhZ3MpOwogICBlbHNlCkluZGV4OiBnY2MvY3AvZGVjbC5j Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy9jcC9kZWNsLmMJKHJl dmlzaW9uIDE4NzM3MSkKKysrIGdjYy9jcC9kZWNsLmMJKHdvcmtpbmcgY29w eSkKQEAgLTU0LDYgKzU0LDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUg ZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKICNpbmNsdWRlICJwb2ludGVy LXNldC5oIgogI2luY2x1ZGUgInNwbGF5LXRyZWUuaCIKICNpbmNsdWRlICJw bHVnaW4uaCIKKyNpbmNsdWRlICJtdWx0aXZlcnNpb24uaCIKIAogLyogUG9z c2libGUgY2FzZXMgb2YgYmFkIHNwZWNpZmllcnMgdHlwZSB1c2VkIGJ5IGJh ZF9zcGVjaWZpZXJzLiAqLwogZW51bSBiYWRfc3BlY19wbGFjZSB7CkBAIC05 NzMsNiArOTc0LDIxIEBAIGRlY2xzX21hdGNoICh0cmVlIG5ld2RlY2wsIHRy ZWUgb2xkZGVjbCkKICAgICAgIGlmICh0MSAhPSB0MikKIAlyZXR1cm4gMDsK IAorICAgICAgLyogVGhlIGRlY2xzIGRvbnQgbWF0Y2ggaWYgdGhleSBjb3Jy ZXNwb25kIHRvIHR3byBkaWZmZXJlbnQgdmVyc2lvbnMKKwkgb2YgdGhlIHNh bWUgZnVuY3Rpb24uICAqLworICAgICAgaWYgKGNvbXBwYXJtcyAocDEsIHAy KQorCSAgJiYgc2FtZV90eXBlX3AgKFRSRUVfVFlQRSAoZjEpLCBUUkVFX1RZ UEUgKGYyKSkgCisJICAmJiBoYXNfZGlmZmVyZW50X3ZlcnNpb25fYXR0cmli dXRlcyAobmV3ZGVjbCwgb2xkZGVjbCkpCisJeworCSAgLyogT25lIG9mIHRo ZSBkZWNscyBjb3VsZCBiZSB0aGUgZGVmYXVsdCB3aXRob3V0IHRoZSAidGFy Z2V0IgorCSAgICAgYXR0cmlidXRlLiBTZXQgaXQgdG8gYmUgYSB2ZXJzaW9u ZWQgZnVuY3Rpb24gaGVyZS4gICovCisJICBtYXJrX2Z1bmN0aW9uX2FzX3Zl cnNpb24gKG5ld2RlY2wpOworCSAgbWFya19mdW5jdGlvbl9hc192ZXJzaW9u IChvbGRkZWNsKTsKKwkgIC8qIEFjY3VtdWxhdGUgYWxsIHRoZSB2ZXJzaW9u cyBvZiBhIGZ1bmN0aW9uLiAgKi8KKwkgIGdyb3VwX2Z1bmN0aW9uX3ZlcnNp b25zIChvbGRkZWNsLCBuZXdkZWNsKTsKKwkgIHJldHVybiAwOworCX0KKwog ICAgICAgaWYgKENQX0RFQ0xfQ09OVEVYVCAobmV3ZGVjbCkgIT0gQ1BfREVD TF9DT05URVhUIChvbGRkZWNsKQogCSAgJiYgISAoREVDTF9FWFRFUk5fQ19Q IChuZXdkZWNsKQogCQkmJiBERUNMX0VYVEVSTl9DX1AgKG9sZGRlY2wpKSkK QEAgLTE0OTAsNyArMTUwNiwxMSBAQCBkdXBsaWNhdGVfZGVjbHMgKHRyZWUg bmV3ZGVjbCwgdHJlZSBvbGRkZWNsLCBib29sCiAJICAgICAgZXJyb3IgKCJw cmV2aW91cyBkZWNsYXJhdGlvbiAlcSsjRCBoZXJlIiwgb2xkZGVjbCk7CiAJ ICAgICAgcmV0dXJuIE5VTExfVFJFRTsKIAkgICAgfQotCSAgZWxzZSBpZiAo Y29tcHBhcm1zIChUWVBFX0FSR19UWVBFUyAoVFJFRV9UWVBFIChuZXdkZWNs KSksCisJICAvKiBGb3IgZnVuY3Rpb24gdmVyc2lvbnMsIHBhcmFtcyBhbmQg dHlwZXMgbWF0Y2gsIGJ1dCB0aGV5CisJICAgICBhcmUgbm90IGFtYmlndW91 cy4gICovCisJICBlbHNlIGlmICgoIURFQ0xfRlVOQ1RJT05fVkVSU0lPTkVE IChuZXdkZWNsKQorCQkgICAgJiYgIURFQ0xfRlVOQ1RJT05fVkVSU0lPTkVE IChvbGRkZWNsKSkKKwkJICAgJiYgY29tcHBhcm1zIChUWVBFX0FSR19UWVBF UyAoVFJFRV9UWVBFIChuZXdkZWNsKSksCiAJCQkgICAgICBUWVBFX0FSR19U WVBFUyAoVFJFRV9UWVBFIChvbGRkZWNsKSkpKQogCSAgICB7CiAJICAgICAg ZXJyb3IgKCJuZXcgZGVjbGFyYXRpb24gJXEjRCIsIG5ld2RlY2wpOwpAQCAt MjI2Miw2ICsyMjgyLDE2IEBAIGR1cGxpY2F0ZV9kZWNscyAodHJlZSBuZXdk ZWNsLCB0cmVlIG9sZGRlY2wsIGJvb2wKICAgZWxzZSBpZiAoREVDTF9QUkVT RVJWRV9QIChuZXdkZWNsKSkKICAgICBERUNMX1BSRVNFUlZFX1AgKG9sZGRl Y2wpID0gMTsKIAorICAvKiBJZiB0aGUgb2xkZGVjbCBpcyBhIHZlcnNpb24s IHNvIGlzIHRoZSBuZXdkZWNsLiAgKi8KKyAgaWYgKFRSRUVfQ09ERSAobmV3 ZGVjbCkgPT0gRlVOQ1RJT05fREVDTAorICAgICAgJiYgREVDTF9GVU5DVElP Tl9WRVJTSU9ORUQgKG9sZGRlY2wpKQorICAgIHsKKyAgICAgIERFQ0xfRlVO Q1RJT05fVkVSU0lPTkVEIChuZXdkZWNsKSA9IDE7CisgICAgICAvKiBSZWNv cmQgdGhhdCBuZXdkZWNsIGlzIG5vdCBhIHZhbGlkIHZlcnNpb24gYW5kIGhh cworCSBiZWVuIGRlbGV0ZWQuICAqLworICAgICAgbWFya19kZWxldGVfZGVj bF92ZXJzaW9uIChuZXdkZWNsKTsKKyAgICB9CisKICAgaWYgKFRSRUVfQ09E RSAobmV3ZGVjbCkgPT0gRlVOQ1RJT05fREVDTCkKICAgICB7CiAgICAgICBp bnQgZnVuY3Rpb25fc2l6ZTsKQEAgLTM4MTAsNiArMzg0MCw3IEBAIGNwX21h a2VfZm5hbWVfZGVjbCAobG9jYXRpb25fdCBsb2MsIHRyZWUgaWQsIGludCB0 CiAJCQkgICAgPyBOVUxMIDogZm5hbWVfYXNfc3RyaW5nICh0eXBlX2RlcCkp OwogICB0cmVlIHR5cGU7CiAgIHRyZWUgaW5pdCA9IGNwX2ZuYW1lX2luaXQg KG5hbWUsICZ0eXBlKTsKKwogICB0cmVlIGRlY2wgPSBidWlsZF9kZWNsIChs b2MsIFZBUl9ERUNMLCBpZCwgdHlwZSk7CiAKICAgaWYgKG5hbWUpCkBAIC0x NDAzNiw3ICsxNDA2NywxMSBAQCBjeHhfY29tZGF0X2dyb3VwICh0cmVlIGRl Y2wpCiAJICBlbHNlCiAJICAgIGJyZWFrOwogCX0KLSAgICAgIG5hbWUgPSBE RUNMX0FTU0VNQkxFUl9OQU1FIChkZWNsKTsKKyAgICAgIGlmIChUUkVFX0NP REUgKGRlY2wpID09IEZVTkNUSU9OX0RFQ0wKKwkgICYmIERFQ0xfRlVOQ1RJ T05fVkVSU0lPTkVEIChkZWNsKSkKKwluYW1lID0gREVDTF9OQU1FIChkZWNs KTsKKyAgICAgIGVsc2UKKyAgICAgICAgbmFtZSA9IERFQ0xfQVNTRU1CTEVS X05BTUUgKGRlY2wpOwogICAgIH0KIAogICByZXR1cm4gbmFtZTsKSW5kZXg6 IGdjYy9jcC9zZW1hbnRpY3MuYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t LSBnY2MvY3Avc2VtYW50aWNzLmMJKHJldmlzaW9uIDE4NzM3MSkKKysrIGdj Yy9jcC9zZW1hbnRpY3MuYwkod29ya2luZyBjb3B5KQpAQCAtMzc4Myw4ICsz NzgzLDExIEBAIGV4cGFuZF9vcl9kZWZlcl9mbl8xICh0cmVlIGZuKQogICAg ICAgLyogSWYgdGhlIHVzZXIgd2FudHMgdXMgdG8ga2VlcCBhbGwgaW5saW5l IGZ1bmN0aW9ucywgdGhlbiBtYXJrCiAJIHRoaXMgZnVuY3Rpb24gYXMgbmVl ZGVkIHNvIHRoYXQgZmluaXNoX2ZpbGUgd2lsbCBtYWtlIHN1cmUgdG8KIAkg b3V0cHV0IGl0IGxhdGVyLiAgU2ltaWxhcmx5LCBhbGwgZGxsZXhwb3J0J2Qg ZnVuY3Rpb25zIG11c3QKLQkgYmUgZW1pdHRlZDsgdGhlcmUgbWF5IGJlIGNh bGxlcnMgaW4gb3RoZXIgRExMcy4gICovCi0gICAgICBpZiAoKGZsYWdfa2Vl cF9pbmxpbmVfZnVuY3Rpb25zCisJIGJlIGVtaXR0ZWQ7IHRoZXJlIG1heSBi ZSBjYWxsZXJzIGluIG90aGVyIERMTHMuCisJIEFsc28sIG1hcmsgdGhpcyBm dW5jdGlvbiBhcyBuZWVkZWQgaWYgaXQgaXMgbWFya2VkIGlubGluZSBidXQK KwkgaXMgYSBtdWx0aS12ZXJzaW9uZWQgZnVuY3Rpb24uICAqLworICAgICAg aWYgKCgoZmxhZ19rZWVwX2lubGluZV9mdW5jdGlvbnMKKwkgICAgfHwgREVD TF9GVU5DVElPTl9WRVJTSU9ORUQgKGZuKSkKIAkgICAmJiBERUNMX0RFQ0xB UkVEX0lOTElORV9QIChmbikKIAkgICAmJiAhREVDTF9SRUFMTFlfRVhURVJO IChmbikpCiAJICB8fCAoZmxhZ19rZWVwX2lubGluZV9kbGxleHBvcnQKSW5k ZXg6IGdjYy9jcC9kZWNsMi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t IGdjYy9jcC9kZWNsMi5jCShyZXZpc2lvbiAxODczNzEpCisrKyBnY2MvY3Av ZGVjbDIuYwkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQCBhbG9u ZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNl ZQogI2luY2x1ZGUgInNwbGF5LXRyZWUuaCIKICNpbmNsdWRlICJsYW5naG9v a3MuaCIKICNpbmNsdWRlICJjLWZhbWlseS9jLWFkYS1zcGVjLmgiCisjaW5j bHVkZSAibXVsdGl2ZXJzaW9uLmgiCiAKIGV4dGVybiBjcHBfcmVhZGVyICpw YXJzZV9pbjsKIApAQCAtNjc3LDkgKzY3OCwxMyBAQCBjaGVja19jbGFzc2Zu ICh0cmVlIGN0eXBlLCB0cmVlIGZ1bmN0aW9uLCB0cmVlIHRlbQogCSAgaWYg KGlzX3RlbXBsYXRlICE9IChUUkVFX0NPREUgKGZuZGVjbCkgPT0gVEVNUExB VEVfREVDTCkpCiAJICAgIGNvbnRpbnVlOwogCisJICAvKiBXaGlsZSBmaW5k aW5nIGEgbWF0Y2gsIHNhbWUgdHlwZXMgYW5kIHBhcmFtcyBhcmUgbm90IGVu b3VnaAorCSAgICAgaWYgdGhlIGZ1bmN0aW9uIGlzIHZlcnNpb25lZC4gIEFs c28gY2hlY2sgdmVyc2lvbiAoInRhcmdldCIpCisJICAgICBhdHRyaWJ1dGVz LiAgKi8KIAkgIGlmIChzYW1lX3R5cGVfcCAoVFJFRV9UWVBFIChUUkVFX1RZ UEUgKGZ1bmN0aW9uKSksCiAJCQkgICBUUkVFX1RZUEUgKFRSRUVfVFlQRSAo Zm5kZWNsKSkpCiAJICAgICAgJiYgY29tcHBhcm1zIChwMSwgcDIpCisJICAg ICAgJiYgIWhhc19kaWZmZXJlbnRfdmVyc2lvbl9hdHRyaWJ1dGVzIChmdW5j dGlvbiwgZm5kZWNsKQogCSAgICAgICYmICghaXNfdGVtcGxhdGUKIAkJICB8 fCBjb21wX3RlbXBsYXRlX3Bhcm1zICh0ZW1wbGF0ZV9wYXJtcywKIAkJCQkJ ICBERUNMX1RFTVBMQVRFX1BBUk1TIChmbmRlY2wpKSkKSW5kZXg6IGdjYy9j cC9jYWxsLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL2NwL2Nh bGwuYwkocmV2aXNpb24gMTg3MzcxKQorKysgZ2NjL2NwL2NhbGwuYwkod29y a2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCBhbG9uZyB3aXRoIEdDQzsg c2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQogI2luY2x1ZGUg Imxhbmdob29rcy5oIgogI2luY2x1ZGUgImMtZmFtaWx5L2Mtb2JqYy5oIgog I2luY2x1ZGUgInRpbWV2YXIuaCIKKyNpbmNsdWRlICJtdWx0aXZlcnNpb24u aCIKIAogLyogVGhlIHZhcmlvdXMga2luZHMgb2YgY29udmVyc2lvbi4gICov CiAKQEAgLTM5MDMsNiArMzkwNCwxNiBAQCBidWlsZF9uZXdfZnVuY3Rpb25f Y2FsbCAodHJlZSBmbiwgVkVDKHRyZWUsZ2MpICoqYQogICAgIHsKICAgICAg IGlmIChjb21wbGFpbiAmIHRmX2Vycm9yKQogCXsKKwkgIC8qIElmIHRoZSBj YWxsIGlzIHRvIGEgbXVsdGl2ZXJzaW9uZWQgZnVuY3Rpb24gd2l0aG91dAor CSAgICAgYSBkZWZhdWx0IHZlcnNpb24sIG92ZXJsb2FkIHJlc29sdXRpb24g d2lsbCBmYWlsLiAgKi8KKwkgIGlmIChjYW5kaWRhdGVzCisJICAgICAgJiYg VFJFRV9DT0RFIChjYW5kaWRhdGVzLT5mbikgPT0gRlVOQ1RJT05fREVDTAor CSAgICAgICYmIERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChjYW5kaWRhdGVz LT5mbikpCisJICAgIGVycm9yX2F0IChsb2NhdGlvbl9vZiAoREVDTF9OQU1F IChPVkxfQ1VSUkVOVCAoZm4pKSksCisJCSAgICAgICJDYWxsIHRvIG11bHRp dmVyc2lvbmVkIGZ1bmN0aW9uICU8JUQoJUEpJT4gd2l0aCIKKwkJICAgICAg IiBubyBkZWZhdWx0IHZlcnNpb24iLCBERUNMX05BTUUgKE9WTF9DVVJSRU5U IChmbikpLAorCQkgICAgICBidWlsZF90cmVlX2xpc3RfdmVjICgqYXJncykp OworCiAJICBpZiAoIWFueV92aWFibGVfcCAmJiBjYW5kaWRhdGVzICYmICEg Y2FuZGlkYXRlcy0+bmV4dAogCSAgICAgICYmIChUUkVFX0NPREUgKGNhbmRp ZGF0ZXMtPmZuKSA9PSBGVU5DVElPTl9ERUNMKSkKIAkgICAgcmV0dXJuIGNw X2J1aWxkX2Z1bmN0aW9uX2NhbGxfdmVjIChjYW5kaWRhdGVzLT5mbiwgYXJn cywgY29tcGxhaW4pOwpAQCAtNjgyNCw2ICs2ODM1LDE5IEBAIGJ1aWxkX292 ZXJfY2FsbCAoc3RydWN0IHpfY2FuZGlkYXRlICpjYW5kLCBpbnQgZmxhCiAg IGlmICghYWxyZWFkeV91c2VkKQogICAgIG1hcmtfdXNlZCAoZm4pOwogCisg IC8qIEZvciBhIGNhbGwgdG8gYSBtdWx0aS12ZXJzaW9uZWQgZnVuY3Rpb24s IHRoZSBjYWxsIHNob3VsZCBhY3R1YWxseSBiZSB0bworICAgICB0aGUgZGlz cGF0Y2hlci4gICovCisgIGlmIChERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAo Zm4pCisgICAgICAmJiBpc19kZWZhdWx0X2Z1bmN0aW9uIChmbikpCisgICAg eworICAgICAgdHJlZSBpZnVuY19kZWNsOworICAgICAgaWZ1bmNfZGVjbCA9 IGdldF9pZnVuY19mb3JfdmVyc2lvbiAoZm4pOworICAgICAgcmV0cm9maXRf bGFuZ19kZWNsIChpZnVuY19kZWNsKTsKKyAgICAgIGdjY19hc3NlcnQgKGlm dW5jX2RlY2wgIT0gTlVMTCk7CisgICAgICByZXR1cm4gYnVpbGRfY2FsbF9l eHByX2xvY19hcnJheSAoVU5LTk9XTl9MT0NBVElPTiwgaWZ1bmNfZGVjbCwK KwkJCQkJbmFyZ3MsIGFyZ2FycmF5KTsKKyAgICB9CisKICAgaWYgKERFQ0xf VklOREVYIChmbikgJiYgKGZsYWdzICYgTE9PS1VQX05PTlZJUlRVQUwpID09 IDApCiAgICAgewogICAgICAgdHJlZSB0OwpAQCAtODA4MSw2ICs4MTA1LDYw IEBAIGpvdXN0IChzdHJ1Y3Qgel9jYW5kaWRhdGUgKmNhbmQxLCBzdHJ1Y3Qg el9jYW5kaWRhCiAgIHNpemVfdCBpOwogICBzaXplX3QgbGVuOwogCisgIC8q IEZvciBDYW5kaWRhdGVzIG9mIGEgbXVsdGktdmVyc2lvbmVkIGZ1bmN0aW9u LCBmaXJzdCBjaGVjayBpZiB0aGUKKyAgICAgdGFyZ2V0IGZsYWdzIG9mIHRo ZSBjYWxsZXIgbWF0Y2ggYW55IG9mIHRoZSBjYW5kaWRhdGVzLiBJZiBzbywK KyAgICAgdGhlIGNhbGxlciBjYW4gZGlyZWN0bHkgY2FsbCB0aGlzIGNhbmRp ZGF0ZSBvdGhlcndpc2UgdGhlIG9uZSBtYXJrZWQKKyAgICAgZGVmYXVsdCB3 aW5zLiAgVGhpcyBpcyBiZWNhdXNlIHRoZSBkZWZhdWx0IGRlY2wgaXMgdXNl ZCBhcyBrZXkgdG8KKyAgICAgYWdncmVnYXRlIGFsbCB0aGUgb3RoZXIgdmVy c2lvbnMgcHJvdmlkZWQgZm9yIGl0IGluIG11bHRpdmVyc2lvbi5jLgorICAg ICBXaGVuIGdlbmVyYXRpbmcgdGhlIGFjdHVhbCBjYWxsLCB0aGUgYXBwcm9w cmlhdGUgZGlzcGF0Y2hlciBpcyBjcmVhdGVkCisgICAgIHRvIGNhbGwgdGhl IHJpZ2h0IGZ1bmN0aW9uIHZlcnNpb24gYXQgcnVuLXRpbWUuICAqLworCisg IGlmICgoVFJFRV9DT0RFIChjYW5kMS0+Zm4pID09IEZVTkNUSU9OX0RFQ0wK KyAgICAgICAmJiBERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAoY2FuZDEtPmZu KSkKKyAgICAgIHx8KFRSRUVfQ09ERSAoY2FuZDItPmZuKSA9PSBGVU5DVElP Tl9ERUNMCisJICYmIERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChjYW5kMi0+ Zm4pKSkKKyAgICB7CisgICAgICAvKiBCb3RoIGZ1bmN0aW9ucyBtdXN0IGJl IG1hcmtlZCB2ZXJzaW9uZWQuICAqLworICAgICAgZ2NjX2Fzc2VydCAoREVD TF9GVU5DVElPTl9WRVJTSU9ORUQgKGNhbmQxLT5mbikKKwkJICAmJiBERUNM X0ZVTkNUSU9OX1ZFUlNJT05FRCAoY2FuZDItPmZuKSk7CisKKyAgICAgIC8q IFRyeSB0byBzZWUgaWYgYSBkaXJlY3QgY2FsbCBjYW4gYmUgbWFkZSB0byBh IHZlcnNpb24uICBUaGlzIGlzCisJIHBvc3NpYmxlIGlmIHRoZSBjYWxsZXIg YW5kIGNhbGxlZSBoYXZlIHRoZSBzYW1lIHRhcmdldCBmbGFncy4KKwkgSWYg Y2FuZC0+Zm4gaXMgbWFya2VkIHdpdGggdGFyZ2V0IGF0dHJpYnV0ZXMsICBj aGVjayBpZiB0aGUKKwkgdGFyZ2V0IGFwcHJvdmVzIGlubGluaW5nIHRoaXMg aW50byB0aGUgY2FsbGVyLiAgSWYgc28sIHRoaXMgaXMKKwkgdGhlIHZlcnNp b24gd2Ugd2FudC4gICovCisKKyAgICAgIGlmIChpc190YXJnZXRfYXR0cmli dXRlX3NldCAoY2FuZDEtPmZuKQorCSAgJiYgdGFyZ2V0bS50YXJnZXRfb3B0 aW9uLmNhbl9pbmxpbmVfcCAoY3VycmVudF9mdW5jdGlvbl9kZWNsLAorCQkJ CQkJIGNhbmQxLT5mbikpCisJcmV0dXJuIDE7CisKKyAgICAgIGlmIChpc190 YXJnZXRfYXR0cmlidXRlX3NldCAoY2FuZDItPmZuKQorCSAgJiYgdGFyZ2V0 bS50YXJnZXRfb3B0aW9uLmNhbl9pbmxpbmVfcCAoY3VycmVudF9mdW5jdGlv bl9kZWNsLAorCQkJCQkJIGNhbmQyLT5mbikpCisJcmV0dXJuIC0xOworCisg ICAgICAvKiBBIGRpcmVjdCBjYWxsIHRvIGEgdmVyc2lvbiBpcyBub3QgcG9z c2libGUsIHNvIGZpbmQgdGhlIGRlZmF1bHQKKwkgZnVuY3Rpb24gYW5kIHJl dHVybiBpdC4gIFRoaXMgd2lsbCBsYXRlciBiZSBjb252ZXJ0ZWQgdG8gZGlz cGF0Y2gKKwkgdGhlIHJpZ2h0IHZlcnNpb24gYXQgcnVuIHRpbWUuICAqLwor CisgICAgICBpZiAoaXNfZGVmYXVsdF9mdW5jdGlvbiAoY2FuZDEtPmZuKSkK Kwl7CisgICAgICAgICAgbWFya191c2VkIChjYW5kMi0+Zm4pOworCSAgcmV0 dXJuIDE7CisJfQorCisgICAgICBpZiAoaXNfZGVmYXVsdF9mdW5jdGlvbiAo Y2FuZDItPmZuKSkKKwl7CisgICAgICAgICAgbWFya191c2VkIChjYW5kMS0+ Zm4pOworCSAgcmV0dXJuIC0xOworCX0KKworICAgICAgLyogSWYgYSBkZWZh dWx0IGZ1bmN0aW9uIGlzIGFic2VudCwgdGhpcyB3aWxsIG5ldmVyIGdldCBy ZXNvbHZlZCBsZWFkaW5nCisJIHRvIGFuIGFtYmlndW91cyBjYWxsIGVycm9y LiAgKi8KKyAgICAgIHJldHVybiAwOworICAgIH0KKwogICAvKiBDYW5kaWRh dGVzIHRoYXQgaW52b2x2ZSBiYWQgY29udmVyc2lvbnMgYXJlIGFsd2F5cyB3 b3JzZSB0aGFuIHRob3NlCiAgICAgIHRoYXQgZG9uJ3QuICAqLwogICBpZiAo Y2FuZDEtPnZpYWJsZSA+IGNhbmQyLT52aWFibGUpCkluZGV4OiBnY2MvdGlt ZXZhci5kZWYKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL3RpbWV2 YXIuZGVmCShyZXZpc2lvbiAxODczNzEpCisrKyBnY2MvdGltZXZhci5kZWYJ KHdvcmtpbmcgY29weSkKQEAgLTI1Myw2ICsyNTMsNyBAQCBERUZUSU1FVkFS IChUVl9UUkVFX0lGQ09NQklORSAgICAgICAgLCAidHJlZSBpZi1jbwogREVG VElNRVZBUiAoVFZfVFJFRV9VTklOSVQgICAgICAgICAgICwgInVuaW5pdCB2 YXIgYW5hbHlzaXMiKQogREVGVElNRVZBUiAoVFZfUExVR0lOX0lOSVQgICAg ICAgICAgICwgInBsdWdpbiBpbml0aWFsaXphdGlvbiIpCiBERUZUSU1FVkFS IChUVl9QTFVHSU5fUlVOICAgICAgICAgICAgLCAicGx1Z2luIGV4ZWN1dGlv biIpCitERUZUSU1FVkFSIChUVl9NVUxUSVZFUlNJT05fRElTUEFUQ0ggLCAi bXVsdGl2ZXJzaW9uIGRpc3BhdGNoIikKIAogLyogRXZlcnl0aGluZyBlbHNl IGluIHJlc3Rfb2ZfY29tcGlsYXRpb24gbm90IGluY2x1ZGVkIGFib3ZlLiAg Ki8KIERFRlRJTUVWQVIgKFRWX0VBUkxZX0xPQ0FMCSAgICAgLCAiZWFybHkg bG9jYWwgcGFzc2VzIikKSW5kZXg6IGdjYy9NYWtlZmlsZS5pbgo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0tLSBnY2MvTWFrZWZpbGUuaW4JKHJldmlzaW9u IDE4NzM3MSkKKysrIGdjYy9NYWtlZmlsZS5pbgkod29ya2luZyBjb3B5KQpA QCAtMTI5Nyw2ICsxMjk3LDcgQEAgT0JKUyA9IFwKIAltY2YubyBcCiAJbW9k ZS1zd2l0Y2hpbmcubyBcCiAJbW9kdWxvLXNjaGVkLm8gXAorCW11bHRpdmVy c2lvbi5vIFwKIAlvbWVnYS5vIFwKIAlvbXAtbG93Lm8gXAogCW9wdGFicy5v IFwKQEAgLTMwNDIsNiArMzA0MywxMSBAQCByZWUubyA6IHJlZS5jICQoQ09O RklHX0gpICQoU1lTVEVNX0gpIGNvcmV0eXBlcy5oCiAgICAkKERGX0gpICQo VElNRVZBUl9IKSB0cmVlLXBhc3MuaCAkKFJFQ09HX0gpICQoRVhQUl9IKSBc CiAgICAkKFJFR1NfSCkgJChUUkVFX0gpICQoVE1fUF9IKSBpbnNuLWNvbmZp Zy5oICQoSU5TTl9BVFRSX0gpICQoRElBR05PU1RJQ19DT1JFX0gpIFwKICAg ICQoVEFSR0VUX0gpICQoT1BUQUJTX0gpIGluc24tY29kZXMuaCBydGxob29r cy1kZWYuaCAkKFBBUkFNU19IKSAkKENHUkFQSF9IKQorbXVsdGl2ZXJzaW9u Lm8gOiBtdWx0aXZlcnNpb24uYyAkKENPTkZJR19IKSAkKFNZU1RFTV9IKSBj b3JldHlwZXMuaCAkKFRNX0gpIFwKKyAgICQoVFJFRV9IKSBsYW5naG9va3Mu aCAkKFRSRUVfSU5MSU5FX0gpICQoRkxBR1NfSCkgJChDR1JBUEhfSCkgaW50 bC5oIFwKKyAgICQoRElBR05PU1RJQ19IKSAkKEZJQkhFQVBfSCkgJChQQVJB TVNfSCkgJChUSU1FVkFSX0gpIHRyZWUtcGFzcy5oIFwKKyAgICQoSEFTSFRB Ql9IKSAkKENPVkVSQUdFX0gpICQoR0dDX0gpICQoVFJFRV9GTE9XX0gpICQo UlRMX0gpICQoSVBBX1BST1BfSCkgXAorICAgJChCQVNJQ19CTE9DS19IKSAk KFRPUExFVl9IKSAkKFRSRUVfRFVNUF9IKSBpcGEtaW5saW5lLmgKIGNwcm9w Lm8gOiBjcHJvcC5jICQoQ09ORklHX0gpICQoU1lTVEVNX0gpIGNvcmV0eXBl cy5oICQoVE1fSCkgJChSVExfSCkgXAogICAgJChSRUdTX0gpIGhhcmQtcmVn LXNldC5oICQoRkxBR1NfSCkgaW5zbi1jb25maWcuaCAkKEdHQ19IKSBcCiAg ICAkKFJFQ09HX0gpICQoRVhQUl9IKSAkKEJBU0lDX0JMT0NLX0gpICQoRlVO Q1RJT05fSCkgb3V0cHV0LmggdG9wbGV2LmggJChESUFHTk9TVElDX0NPUkVf SCkgXApJbmRleDogZ2NjL3Bhc3Nlcy5jCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIGdjYy9wYXNzZXMuYwkocmV2aXNpb24gMTg3MzcxKQorKysgZ2Nj L3Bhc3Nlcy5jCSh3b3JraW5nIGNvcHkpCkBAIC0xMjkzLDYgKzEyOTMsNyBA QCBpbml0X29wdGltaXphdGlvbl9wYXNzZXMgKHZvaWQpCiAgIE5FWFRfUEFT UyAocGFzc19idWlsZF9jZmcpOwogICBORVhUX1BBU1MgKHBhc3Nfd2Fybl9m dW5jdGlvbl9yZXR1cm4pOwogICBORVhUX1BBU1MgKHBhc3NfYnVpbGRfY2dy YXBoX2VkZ2VzKTsKKyAgTkVYVF9QQVNTIChwYXNzX2Rpc3BhdGNoX3ZlcnNp b25zKTsKICAgKnAgPSBOVUxMOwogCiAgIC8qIEludGVycHJvY2VkdXJhbCBv cHRpbWl6YXRpb24gcGFzc2VzLiAgKi8KSW5kZXg6IGdjYy9jcC9tYW5nbGUu Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvY3AvbWFuZ2xlLmMJ KHJldmlzaW9uIDE4NzM3MSkKKysrIGdjYy9jcC9tYW5nbGUuYwkod29ya2lu ZyBjb3B5KQpAQCAtMTI0NSw3ICsxMjQ1LDEyIEBAIHdyaXRlX3VucXVhbGlm aWVkX25hbWUgKGNvbnN0IHRyZWUgZGVjbCkKICAgICB7CiAgICAgICBNQU5H TEVfVFJBQ0VfVFJFRSAoImxvY2FsLXNvdXJjZS1uYW1lIiwgZGVjbCk7CiAg ICAgICB3cml0ZV9jaGFyICgnTCcpOwotICAgICAgd3JpdGVfc291cmNlX25h bWUgKERFQ0xfTkFNRSAoZGVjbCkpOworICAgICAgaWYgKFRSRUVfQ09ERSAo ZGVjbCkgPT0gRlVOQ1RJT05fREVDTAorCSAgJiYgREVDTF9GVU5DVElPTl9W RVJTSU9ORUQgKGRlY2wpCisJICAmJiBERUNMX0FTU0VNQkxFUl9OQU1FX1NF VF9QIChkZWNsKSkKKwl3cml0ZV9zb3VyY2VfbmFtZSAoREVDTF9BU1NFTUJM RVJfTkFNRSAoZGVjbCkpOworICAgICAgZWxzZQorCXdyaXRlX3NvdXJjZV9u YW1lIChERUNMX05BTUUgKGRlY2wpKTsKICAgICAgIC8qIFRoZSBkZWZhdWx0 IGRpc2NyaW1pbmF0b3IgaXMgMSwgYW5kIHRoYXQncyBhbGwgd2UgZXZlciB1 c2UsCiAJIHNvIHRoZXJlJ3Mgbm8gY29kZSB0byBvdXRwdXQgb25lIGhlcmUu ICAqLwogICAgIH0KQEAgLTEyNjAsNyArMTI2NSwxNCBAQCB3cml0ZV91bnF1 YWxpZmllZF9uYW1lIChjb25zdCB0cmVlIGRlY2wpCiAgICAgICAgICAgICAg ICAmJiBMQU1CREFfVFlQRV9QICh0eXBlKSkKICAgICAgICAgd3JpdGVfY2xv c3VyZV90eXBlX25hbWUgKHR5cGUpOwogICAgICAgZWxzZQotICAgICAgICB3 cml0ZV9zb3VyY2VfbmFtZSAoREVDTF9OQU1FIChkZWNsKSk7CisJeworCSAg aWYgKFRSRUVfQ09ERSAoZGVjbCkgPT0gRlVOQ1RJT05fREVDTAorCSAgICAg ICYmIERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChkZWNsKQorCSAgICAgICYm IERFQ0xfQVNTRU1CTEVSX05BTUVfU0VUX1AgKGRlY2wpKQorCSAgICB3cml0 ZV9zb3VyY2VfbmFtZSAoREVDTF9BU1NFTUJMRVJfTkFNRSAoZGVjbCkpOwor CSAgZWxzZQorCSAgICB3cml0ZV9zb3VyY2VfbmFtZSAoREVDTF9OQU1FIChk ZWNsKSk7CisJfQogICAgIH0KIH0KIApJbmRleDogZ2NjL2NvbmZpZy9pMzg2 L2kzODYuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvY29uZmln L2kzODYvaTM4Ni5jCShyZXZpc2lvbiAxODczNzEpCisrKyBnY2MvY29uZmln L2kzODYvaTM4Ni5jCSh3b3JraW5nIGNvcHkpCkBAIC0yNzY2NCw2ICsyNzY2 NCw0MzggQEAgaXg4Nl9pbml0X21teF9zc2VfYnVpbHRpbnMgKHZvaWQpCiAg ICAgfQogfQogCisKKy8qIFRoaXMgYWRkcyBhIGNvbmRpdGlvbiB0byB0aGUg YmFzaWNfYmxvY2sgTkVXX0JCIGluIGZ1bmN0aW9uIEZVTkNUSU9OX0RFQ0wK KyAgIHRvIHJldHVybiBhIHBvaW50ZXIgdG8gVkVSU0lPTl9ERUNMIGlmIHRo ZSBvdXRjb21lIG9mIHRoZSBleHByZXNzaW9uCisgICBmb3JtZWQgYnkgUFJF RElDQVRFX0NIQUlOIGlzIHRydWUuICBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUg Y2FsbGVkIGR1cmluZworICAgdmVyc2lvbiBkaXNwYXRjaCB0byBkZWNpZGUg d2hpY2ggZnVuY3Rpb24gdmVyc2lvbiB0byBleGVjdXRlLiAgSXQgcmV0dXJu cworICAgdGhlIGJhc2ljIGJsb2NrIGF0IHRoZSBlbmQgdG8gd2hpY2ggbW9y ZSBjb25kaXRpb25zIGNhbiBiZSBhZGRlZC4gICovCisKK3N0YXRpYyBiYXNp Y19ibG9jaworYWRkX2NvbmRpdGlvbl90b19iYiAodHJlZSBmdW5jdGlvbl9k ZWNsLCB0cmVlIHZlcnNpb25fZGVjbCwKKwkJICAgICB0cmVlIHByZWRpY2F0 ZV9jaGFpbiwgYmFzaWNfYmxvY2sgbmV3X2JiKQoreworICBnaW1wbGUgcmV0 dXJuX3N0bXQ7CisgIHRyZWUgY29udmVydF9leHByLCByZXN1bHRfdmFyOwor ICBnaW1wbGUgY29udmVydF9zdG10OworICBnaW1wbGUgY2FsbF9jb25kX3N0 bXQ7CisgIGdpbXBsZSBpZl9lbHNlX3N0bXQ7CisKKyAgYmFzaWNfYmxvY2sg YmIxLCBiYjIsIGJiMzsKKyAgZWRnZSBlMTIsIGUyMzsKKworICB0cmVlIGNv bmRfdmFyLCBhbmRfZXhwcl92YXIgPSBOVUxMX1RSRUU7CisgIGdpbXBsZV9z ZXEgZ3NlcTsKKworICB0cmVlIG9sZF9jdXJyZW50X2Z1bmN0aW9uX2RlY2w7 CisgIHRyZWUgcHJlZGljYXRlX2RlY2wsIHByZWRpY2F0ZV9hcmc7CisKKyAg b2xkX2N1cnJlbnRfZnVuY3Rpb25fZGVjbCA9IGN1cnJlbnRfZnVuY3Rpb25f ZGVjbDsKKyAgcHVzaF9jZnVuIChERUNMX1NUUlVDVF9GVU5DVElPTiAoZnVu Y3Rpb25fZGVjbCkpOworICBjdXJyZW50X2Z1bmN0aW9uX2RlY2wgPSBmdW5j dGlvbl9kZWNsOworCisgIGdjY19hc3NlcnQgKG5ld19iYiAhPSBOVUxMKTsK KyAgZ3NlcSA9IGJiX3NlcSAobmV3X2JiKTsKKworCisgIGNvbnZlcnRfZXhw ciA9IGJ1aWxkMSAoQ09OVkVSVF9FWFBSLCBwdHJfdHlwZV9ub2RlLAorCSAg ICAgCQkgYnVpbGRfZm9sZF9hZGRyX2V4cHIgKHZlcnNpb25fZGVjbCkpOwor ICByZXN1bHRfdmFyID0gY3JlYXRlX3RtcF92YXIgKHB0cl90eXBlX25vZGUs IE5VTEwpOworICBjb252ZXJ0X3N0bXQgPSBnaW1wbGVfYnVpbGRfYXNzaWdu IChyZXN1bHRfdmFyLCBjb252ZXJ0X2V4cHIpOyAKKyAgcmV0dXJuX3N0bXQg PSBnaW1wbGVfYnVpbGRfcmV0dXJuIChyZXN1bHRfdmFyKTsKKworICBpZiAo cHJlZGljYXRlX2NoYWluID09IE5VTExfVFJFRSkKKyAgICB7CisgICAgICBn aW1wbGVfc2VxX2FkZF9zdG10ICgmZ3NlcSwgY29udmVydF9zdG10KTsKKyAg ICAgIGdpbXBsZV9zZXFfYWRkX3N0bXQgKCZnc2VxLCByZXR1cm5fc3RtdCk7 CisgICAgICBzZXRfYmJfc2VxIChuZXdfYmIsIGdzZXEpOworICAgICAgZ2lt cGxlX3NldF9iYiAoY29udmVydF9zdG10LCBuZXdfYmIpOworICAgICAgZ2lt cGxlX3NldF9iYiAocmV0dXJuX3N0bXQsIG5ld19iYik7CisgICAgICBwb3Bf Y2Z1biAoKTsKKyAgICAgIGN1cnJlbnRfZnVuY3Rpb25fZGVjbCA9IG9sZF9j dXJyZW50X2Z1bmN0aW9uX2RlY2w7CisgICAgICByZXR1cm4gbmV3X2JiOwor ICAgIH0KKworICB3aGlsZSAocHJlZGljYXRlX2NoYWluICE9IE5VTEwpCisg ICAgeworICAgICAgY29uZF92YXIgPSBjcmVhdGVfdG1wX3ZhciAoaW50ZWdl cl90eXBlX25vZGUsIE5VTEwpOworICAgICAgcHJlZGljYXRlX2RlY2wgPSBU UkVFX1BVUlBPU0UgKHByZWRpY2F0ZV9jaGFpbik7CisgICAgICBwcmVkaWNh dGVfYXJnID0gVFJFRV9WQUxVRSAocHJlZGljYXRlX2NoYWluKTsKKyAgICAg IGNhbGxfY29uZF9zdG10ID0gZ2ltcGxlX2J1aWxkX2NhbGwgKHByZWRpY2F0 ZV9kZWNsLCAxLCBwcmVkaWNhdGVfYXJnKTsKKyAgICAgIGdpbXBsZV9jYWxs X3NldF9saHMgKGNhbGxfY29uZF9zdG10LCBjb25kX3Zhcik7CisKKyAgICAg IGdpbXBsZV9zZXRfYmxvY2sgKGNhbGxfY29uZF9zdG10LCBERUNMX0lOSVRJ QUwgKGZ1bmN0aW9uX2RlY2wpKTsKKyAgICAgIGdpbXBsZV9zZXRfYmIgKGNh bGxfY29uZF9zdG10LCBuZXdfYmIpOworICAgICAgZ2ltcGxlX3NlcV9hZGRf c3RtdCAoJmdzZXEsIGNhbGxfY29uZF9zdG10KTsKKworICAgICAgcHJlZGlj YXRlX2NoYWluID0gVFJFRV9DSEFJTiAocHJlZGljYXRlX2NoYWluKTsKKyAg ICAgIAorICAgICAgaWYgKGFuZF9leHByX3ZhciA9PSBOVUxMKQorICAgICAg ICBhbmRfZXhwcl92YXIgPSBjb25kX3ZhcjsKKyAgICAgIGVsc2UKKwl7CisJ ICBnaW1wbGUgYXNzaWduX3N0bXQ7CisJICAvKiBVc2UgTUlOX0VYUFIgdG8g Y2hlY2sgaWYgYW55IGludGVnZXIgaXMgemVybz8uCisJICAgICBhbmRfZXhw cl92YXIgPSBtaW5fZXhwciA8Y29uZF92YXIsIGFuZF9leHByX3Zhcj4gICov CisJICBhc3NpZ25fc3RtdCA9IGdpbXBsZV9idWlsZF9hc3NpZ24gKGFuZF9l eHByX3ZhciwKKwkJCSAgYnVpbGQyIChNSU5fRVhQUiwgaW50ZWdlcl90eXBl X25vZGUsCisJCQkJICBjb25kX3ZhciwgYW5kX2V4cHJfdmFyKSk7CisKKwkg IGdpbXBsZV9zZXRfYmxvY2sgKGFzc2lnbl9zdG10LCBERUNMX0lOSVRJQUwg KGZ1bmN0aW9uX2RlY2wpKTsKKwkgIGdpbXBsZV9zZXRfYmIgKGFzc2lnbl9z dG10LCBuZXdfYmIpOworCSAgZ2ltcGxlX3NlcV9hZGRfc3RtdCAoJmdzZXEs IGFzc2lnbl9zdG10KTsKKwl9CisgICAgfQorCisgIGlmX2Vsc2Vfc3RtdCA9 IGdpbXBsZV9idWlsZF9jb25kIChHVF9FWFBSLCBhbmRfZXhwcl92YXIsCisJ ICAJCSAgICAgICAgICAgIGludGVnZXJfemVyb19ub2RlLAorCQkJCSAgICBO VUxMX1RSRUUsIE5VTExfVFJFRSk7CisgIGdpbXBsZV9zZXRfYmxvY2sgKGlm X2Vsc2Vfc3RtdCwgREVDTF9JTklUSUFMIChmdW5jdGlvbl9kZWNsKSk7Cisg IGdpbXBsZV9zZXRfYmIgKGlmX2Vsc2Vfc3RtdCwgbmV3X2JiKTsKKyAgZ2lt cGxlX3NlcV9hZGRfc3RtdCAoJmdzZXEsIGlmX2Vsc2Vfc3RtdCk7CisKKyAg Z2ltcGxlX3NlcV9hZGRfc3RtdCAoJmdzZXEsIGNvbnZlcnRfc3RtdCk7Cisg IGdpbXBsZV9zZXFfYWRkX3N0bXQgKCZnc2VxLCByZXR1cm5fc3RtdCk7Cisg IHNldF9iYl9zZXEgKG5ld19iYiwgZ3NlcSk7CisKKyAgYmIxID0gbmV3X2Ji OworICBlMTIgPSBzcGxpdF9ibG9jayAoYmIxLCBpZl9lbHNlX3N0bXQpOwor ICBiYjIgPSBlMTItPmRlc3Q7CisgIGUxMi0+ZmxhZ3MgJj0gfkVER0VfRkFM TFRIUlU7CisgIGUxMi0+ZmxhZ3MgfD0gRURHRV9UUlVFX1ZBTFVFOworCisg IGUyMyA9IHNwbGl0X2Jsb2NrIChiYjIsIHJldHVybl9zdG10KTsKKworICBn aW1wbGVfc2V0X2JiIChjb252ZXJ0X3N0bXQsIGJiMik7CisgIGdpbXBsZV9z ZXRfYmIgKHJldHVybl9zdG10LCBiYjIpOworCisgIGJiMyA9IGUyMy0+ZGVz dDsKKyAgbWFrZV9lZGdlIChiYjEsIGJiMywgRURHRV9GQUxTRV9WQUxVRSk7 IAorCisgIHJlbW92ZV9lZGdlIChlMjMpOworICBtYWtlX2VkZ2UgKGJiMiwg RVhJVF9CTE9DS19QVFIsIDApOworCisgIHJlYnVpbGRfY2dyYXBoX2VkZ2Vz ICgpOworCisgIHBvcF9jZnVuICgpOworICBjdXJyZW50X2Z1bmN0aW9uX2Rl Y2wgPSBvbGRfY3VycmVudF9mdW5jdGlvbl9kZWNsOworCisgIHJldHVybiBi YjM7Cit9CisKKy8qIFRoaXMgcGFyc2VzIHRoZSBhdHRyaWJ1dGUgYXJndW1l bnRzIHRvIHRhcmdldCBpbiBERUNMIGFuZCBkZXRlcm1pbmVzCisgICB0aGUg cmlnaHQgYnVpbHRpbiB0byB1c2UgdG8gbWF0Y2ggdGhlIHBsYXRmb3JtIHNw ZWNpZmljYXRpb24uCisgICBGb3Igbm93LCBvbmx5IG9uZSB0YXJnZXQgYXJn dW1lbnQgKCJhcmNoPSIgb3IgIjwtbT54eHgiKSBpcyBhbGxvd2VkLiAgKi8K Kworc3RhdGljIHRyZWUgCitnZXRfYnVpbHRpbl9jb2RlX2Zvcl92ZXJzaW9u ICh0cmVlIGRlY2wsIHVuc2lnbmVkIGludCAqcHJpb3JpdHkpCit7CisgIHRy ZWUgYXR0cnM7CisgIHN0cnVjdCBjbF90YXJnZXRfb3B0aW9uIGN1cl90YXJn ZXQ7CisgIHRyZWUgdGFyZ2V0X25vZGU7CisgIHN0cnVjdCBjbF90YXJnZXRf b3B0aW9uICpuZXdfdGFyZ2V0OworICBjb25zdCBjaGFyICphcmdfc3RyID0g TlVMTDsKKyAgY29uc3QgY2hhciAqYXR0cnNfc3RyID0gTlVMTDsKKyAgY2hh ciAqdG9rX3N0ciA9IE5VTEw7CisgIGNoYXIgKnRva2VuOworCisgIC8qIFBy aW9yaXR5IG9mIGkzODYgZmVhdHVyZXMsIGdyZWF0ZXIgdmFsdWUgaXMgaGln aGVyIHByaW9yaXR5LiAgIFRoaXMgaXMKKyAgICAgdXNlZCB0byBkZWNpZGUg dGhlIG9yZGVyIGluIHdoaWNoIGZ1bmN0aW9uIGRpc3BhdGNoIG11c3QgaGFw cGVuLiAgRm9yCisgICAgIGluc3RhbmNlLCBhIHZlcnNpb24gc3BlY2lhbGl6 ZWQgZm9yIFNTRTQuMiBzaG91bGQgYmUgY2hlY2tlZCBmb3IgZGlzcGF0Y2gK KyAgICAgYmVmb3JlIGEgdmVyc2lvbiBmb3IgU1NFMywgYXMgU1NFNC4yIGlt cGxpZXMgU1NFMy4gICovCisgIGVudW0gZmVhdHVyZV9wcmlvcml0eQorICB7 CisgICAgUF9aRVJPID0gMCwKKyAgICBQX01NWCwKKyAgICBQX1NTRSwKKyAg ICBQX1NTRTIsCisgICAgUF9TU0UzLAorICAgIFBfU1NTRTMsCisgICAgUF9Q Uk9DX1NTU0UzLAorICAgIFBfU1NFNF9hLAorICAgIFBfUFJPQ19TU0U0X2Es CisgICAgUF9TU0U0XzEsCisgICAgUF9TU0U0XzIsCisgICAgUF9QUk9DX1NT RTRfMiwKKyAgICBQX1BPUENOVCwKKyAgICBQX0FWWCwKKyAgICBQX0FWWDIs CisgICAgUF9GTUEsCisgICAgUF9QUk9DX0ZNQQorICB9OworCisgIC8qIFRo ZXNlIGFyZSB0aGUgdGFyZ2V0IGF0dHJpYnV0ZSBzdHJpbmdzIGZvciB3aGlj aCBhIGRpc3BhdGNoZXIgaXMKKyAgICAgYXZhaWxhYmxlLCBmcm9tIGZvbGRf YnVpbHRpbl9jcHUuICAqLworCisgIHN0YXRpYyBzdHJ1Y3QgX2ZlYXR1cmVf bGlzdAorICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKmNvbnN0IG5hbWU7Cisg ICAgICBjb25zdCBlbnVtIGZlYXR1cmVfcHJpb3JpdHkgcHJpb3JpdHk7Cisg ICAgfQorICBjb25zdCBmZWF0dXJlX2xpc3RbXSA9CisgICAgeworICAgICAg eyJtbXgiLCBQX01NWH0sCisgICAgICB7InNzZSIsIFBfU1NFfSwKKyAgICAg IHsic3NlMiIsIFBfU1NFMn0sCisgICAgICB7InNzZTMiLCBQX1NTRTN9LAor ICAgICAgeyJzc3NlMyIsIFBfU1NTRTN9LAorICAgICAgeyJzc2U0LjEiLCBQ X1NTRTRfMX0sCisgICAgICB7InNzZTQuMiIsIFBfU1NFNF8yfSwKKyAgICAg IHsicG9wY250IiwgUF9QT1BDTlR9LAorICAgICAgeyJhdngiLCBQX0FWWH0s CisgICAgICB7ImF2eDIiLCBQX0FWWDJ9CisgICAgfTsKKworCisgIHN0YXRp YyB1bnNpZ25lZCBpbnQgTlVNX0ZFQVRVUkVTCisgICAgPSBzaXplb2YgKGZl YXR1cmVfbGlzdCkgLyBzaXplb2YgKHN0cnVjdCBfZmVhdHVyZV9saXN0KTsK KworICB1bnNpZ25lZCBpbnQgaTsKKworICB0cmVlIHByZWRpY2F0ZV9jaGFp biA9IE5VTExfVFJFRTsKKyAgdHJlZSBwcmVkaWNhdGVfZGVjbCwgcHJlZGlj YXRlX2FyZzsKKworICBhdHRycyA9IGxvb2t1cF9hdHRyaWJ1dGUgKCJ0YXJn ZXQiLCBERUNMX0FUVFJJQlVURVMgKGRlY2wpKTsKKyAgZ2NjX2Fzc2VydCAo YXR0cnMgIT0gTlVMTCk7CisKKyAgYXR0cnMgPSBUUkVFX1ZBTFVFIChUUkVF X1ZBTFVFIChhdHRycykpOworCisgIGdjY19hc3NlcnQgKFRSRUVfQ09ERSAo YXR0cnMpID09IFNUUklOR19DU1QpOworICBhdHRyc19zdHIgPSBUUkVFX1NU UklOR19QT0lOVEVSIChhdHRycyk7CisKKyAgKnByaW9yaXR5ID0gMDsKKwor ICAvKiBIYW5kbGUgYXJjaD0gaWYgc3BlY2lmaWVkLiAgRm9yIHByaW9yaXR5 LCBzZXQgaXQgdG8gYmUgMSBtb3JlIHRoYW4KKyAgICAgdGhlIGJlc3QgaW5z dHJ1Y3Rpb24gc2V0IHRoZSBwcm9jZXNzb3IgY2FuIGhhbmRsZS4gIEZvciBp bnN0YW5jZSwgaWYKKyAgICAgdGhlcmUgaXMgYSB2ZXJzaW9uIGZvciBhdG9t IGFuZCBhIHZlcnNpb24gZm9yIHNzc2UzICh0aGUgaGlnaGVzdCBJU0EKKyAg ICAgcHJpb3JpdHkgZm9yIGF0b20pLCB0aGUgYXRvbSB2ZXJzaW9uIG11c3Qg YmUgY2hlY2tlZCBmb3IgZGlzcGF0Y2gKKyAgICAgYmVmb3JlIHRoZSBzc3Nl MyB2ZXJzaW9uLiAqLworICBpZiAoc3Ryc3RyIChhdHRyc19zdHIsICJhcmNo PSIpICE9IE5VTEwpCisgICAgeworICAgICAgY2xfdGFyZ2V0X29wdGlvbl9z YXZlICgmY3VyX3RhcmdldCwgJmdsb2JhbF9vcHRpb25zKTsKKyAgICAgIHRh cmdldF9ub2RlID0gaXg4Nl92YWxpZF90YXJnZXRfYXR0cmlidXRlX3RyZWUg KGF0dHJzKTsKKyAgICAKKyAgICAgIGdjY19hc3NlcnQgKHRhcmdldF9ub2Rl KTsKKyAgICAgIG5ld190YXJnZXQgPSBUUkVFX1RBUkdFVF9PUFRJT04gKHRh cmdldF9ub2RlKTsKKyAgICAgIGdjY19hc3NlcnQgKG5ld190YXJnZXQpOwor ICAgICAgCisgICAgICBpZiAobmV3X3RhcmdldC0+YXJjaF9zcGVjaWZpZWQg JiYgbmV3X3RhcmdldC0+YXJjaCA+IDApCisJeworCSAgc3dpdGNoIChuZXdf dGFyZ2V0LT5hcmNoKQorCSAgICB7CisJICAgIGNhc2UgUFJPQ0VTU09SX0NP UkUyXzMyOgorCSAgICBjYXNlIFBST0NFU1NPUl9DT1JFMl82NDoKKwkgICAg ICBhcmdfc3RyID0gImNvcmUyIjsKKwkgICAgICAqcHJpb3JpdHkgPSBQX1BS T0NfU1NTRTM7CisJICAgICAgYnJlYWs7CisJICAgIGNhc2UgUFJPQ0VTU09S X0NPUkVJN18zMjoKKwkgICAgY2FzZSBQUk9DRVNTT1JfQ09SRUk3XzY0Ogor CSAgICAgIGFyZ19zdHIgPSAiY29yZWk3IjsKKwkgICAgICAqcHJpb3JpdHkg PSBQX1BST0NfU1NFNF8yOworCSAgICAgIGJyZWFrOworCSAgICBjYXNlIFBS T0NFU1NPUl9BVE9NOgorCSAgICAgIGFyZ19zdHIgPSAiYXRvbSI7CisJICAg ICAgKnByaW9yaXR5ID0gUF9QUk9DX1NTU0UzOworCSAgICAgIGJyZWFrOwor CSAgICBjYXNlIFBST0NFU1NPUl9BTURGQU0xMDoKKwkgICAgICBhcmdfc3Ry ID0gImFtZGZhbTEwaCI7CisJICAgICAgKnByaW9yaXR5ID0gUF9QUk9DX1NT RTRfYTsKKwkgICAgICBicmVhazsKKwkgICAgY2FzZSBQUk9DRVNTT1JfQkRW RVIxOgorCSAgICAgIGFyZ19zdHIgPSAiYmR2ZXIxIjsKKwkgICAgICAqcHJp b3JpdHkgPSBQX1BST0NfRk1BOworCSAgICAgIGJyZWFrOworCSAgICBjYXNl IFBST0NFU1NPUl9CRFZFUjI6CisJICAgICAgYXJnX3N0ciA9ICJiZHZlcjIi OworCSAgICAgICpwcmlvcml0eSA9IFBfUFJPQ19GTUE7CisJICAgICAgYnJl YWs7CisJICAgIH0gIAorCX0gICAgCisgICAgCisgICAgICBjbF90YXJnZXRf b3B0aW9uX3Jlc3RvcmUgKCZnbG9iYWxfb3B0aW9ucywgJmN1cl90YXJnZXQp OworICAgICAgaWYgKGFyZ19zdHIgPT0gTlVMTCkKKwl7CisJICBlcnJvcl9h dCAoREVDTF9TT1VSQ0VfTE9DQVRJT04gKGRlY2wpLAorCSAgICAJIk5vIGRp c3BhdGNoZXIgZm91bmQgZm9yIHRoZSB2ZXJzaW9uaW5nIGF0dHJpYnV0ZXMi KTsKKwkgIHJldHVybiBOVUxMOworCX0KKyAgICAKKyAgICAgIHByZWRpY2F0 ZV9kZWNsID0gaXg4Nl9idWlsdGlucyBbKGludCkgSVg4Nl9CVUlMVElOX0NQ VV9JU107CisgICAgICAvKiBGb3IgYSBDIHN0cmluZyBsaXRlcmFsIHRoZSBs ZW5ndGggaW5jbHVkZXMgdGhlIHRyYWlsaW5nIE5VTEwuICAqLworICAgICAg cHJlZGljYXRlX2FyZyA9IGJ1aWxkX3N0cmluZ19saXRlcmFsIChzdHJsZW4g KGFyZ19zdHIpICsgMSwgYXJnX3N0cik7CisgICAgICBwcmVkaWNhdGVfY2hh aW4gPSB0cmVlX2NvbnMgKHByZWRpY2F0ZV9kZWNsLCBwcmVkaWNhdGVfYXJn LAorCQkJCSAgIHByZWRpY2F0ZV9jaGFpbik7CisgICAgfQorCisgIC8qIFBy b2Nlc3MgZmVhdHVyZSBuYW1lLiAgKi8KKyAgdG9rX3N0ciA9ICAoY2hhciAq KSB4bWFsbG9jIChzdHJsZW4gKGF0dHJzX3N0cikgKyAxKTsKKyAgc3RyY3B5 ICh0b2tfc3RyLCBhdHRyc19zdHIpOworICB0b2tlbiA9IHN0cnRvayAodG9r X3N0ciwgIiwiKTsKKyAgcHJlZGljYXRlX2RlY2wgPSBpeDg2X2J1aWx0aW5z IFsoaW50KSBJWDg2X0JVSUxUSU5fQ1BVX1NVUFBPUlRTXTsKKworICB3aGls ZSAodG9rZW4gIT0gTlVMTCkKKyAgICB7CisgICAgICAvKiBEbyBub3QgcHJv Y2VzcyAiYXJjaD0iICAqLworICAgICAgaWYgKHN0cm5jbXAgKHRva2VuLCAi YXJjaD0iLCA1KSA9PSAwKQorCXsKKwkgIHRva2VuID0gc3RydG9rIChOVUxM LCAiLCIpOworCSAgY29udGludWU7CisJfQorICAgICAgZm9yIChpID0gMDsg aSA8IE5VTV9GRUFUVVJFUzsgKytpKQorCXsKKwkgIGlmIChzdHJjbXAgKHRv a2VuLCBmZWF0dXJlX2xpc3RbaV0ubmFtZSkgPT0gMCkKKwkgICAgeworCSAg ICAgIHByZWRpY2F0ZV9hcmcgPSBidWlsZF9zdHJpbmdfbGl0ZXJhbCAoCisJ CQkJc3RybGVuIChmZWF0dXJlX2xpc3RbaV0ubmFtZSkgKyAxLAorCQkJCWZl YXR1cmVfbGlzdFtpXS5uYW1lKTsKKwkgICAgICBwcmVkaWNhdGVfY2hhaW4g PSB0cmVlX2NvbnMgKHByZWRpY2F0ZV9kZWNsLCBwcmVkaWNhdGVfYXJnLAor CQkJCQkgICBwcmVkaWNhdGVfY2hhaW4pOworCSAgICAgIC8qIEZpbmQgdGhl IG1heGltdW0gcHJpb3JpdHkgZmVhdHVyZS4gICovCisJICAgICAgaWYgKGZl YXR1cmVfbGlzdFtpXS5wcmlvcml0eSA+ICpwcmlvcml0eSkKKwkJKnByaW9y aXR5ID0gZmVhdHVyZV9saXN0W2ldLnByaW9yaXR5OworCisJICAgICAgYnJl YWs7CisJICAgIH0KKwl9CisgICAgICBpZiAoaSA9PSBOVU1fRkVBVFVSRVMp CisJeworCSAgZXJyb3JfYXQgKERFQ0xfU09VUkNFX0xPQ0FUSU9OIChkZWNs KSwKKwkJICAgICJObyBkaXNwYXRjaGVyIGZvdW5kIGZvciAlcyIsIHRva2Vu KTsKKwkgIHJldHVybiBOVUxMOworCX0KKyAgICAgIHRva2VuID0gc3RydG9r IChOVUxMLCAiLCIpOworICAgIH0KKyAgZnJlZSAodG9rX3N0cik7CisKKyAg aWYgKHByZWRpY2F0ZV9jaGFpbiA9PSBOVUxMX1RSRUUpCisgICAgeworICAg ICAgZXJyb3JfYXQgKERFQ0xfU09VUkNFX0xPQ0FUSU9OIChkZWNsKSwKKwkg ICAgICAgICJObyBkaXNwYXRjaGVyIGZvdW5kIGZvciB0aGUgdmVyc2lvbmlu ZyBhdHRyaWJ1dGVzIDogJXMiLAorCSAgICAgICAgYXR0cnNfc3RyKTsKKyAg ICAgIHJldHVybiBOVUxMOworICAgIH0KKworICBwcmVkaWNhdGVfY2hhaW4g PSBucmV2ZXJzZSAocHJlZGljYXRlX2NoYWluKTsKKyAgcmV0dXJuIHByZWRp Y2F0ZV9jaGFpbjsgCit9CisgCitzdGF0aWMgaW50CitmZWF0dXJlX2NvbXBh cmUgKGNvbnN0IHZvaWQgKnYxLCBjb25zdCB2b2lkICp2MikKK3sKKyAgdHlw ZWRlZiBzdHJ1Y3QgX2Z1bmN0aW9uX3ZlcnNpb25faW5mbworICAgIHsKKyAg ICAgIHRyZWUgdmVyc2lvbl9kZWNsOworICAgICAgdHJlZSBwcmVkaWNhdGVf Y2hhaW47CisgICAgICB1bnNpZ25lZCBpbnQgZGlzcGF0Y2hfcHJpb3JpdHk7 CisgICAgfSBmdW5jdGlvbl92ZXJzaW9uX2luZm87CisKKyAgY29uc3QgZnVu Y3Rpb25fdmVyc2lvbl9pbmZvIGMxID0gKihjb25zdCBmdW5jdGlvbl92ZXJz aW9uX2luZm8gKil2MTsKKyAgY29uc3QgZnVuY3Rpb25fdmVyc2lvbl9pbmZv IGMyID0gKihjb25zdCBmdW5jdGlvbl92ZXJzaW9uX2luZm8gKil2MjsKKyAg cmV0dXJuIChjMi5kaXNwYXRjaF9wcmlvcml0eSAtIGMxLmRpc3BhdGNoX3By aW9yaXR5KTsKK30KKworLyogVGhpcyBpcyB0aGUgdGFyZ2V0IGhvb2sgdG8g Z2VuZXJhdGUgdGhlIGRpc3BhdGNoIGZ1bmN0aW9uIGZvcgorICAgbXVsdGkt dmVyc2lvbmVkIGZ1bmN0aW9ucy4gIERJU1BBVENIX0RFQ0wgaXMgdGhlIGZ1 bmN0aW9uIHdoaWNoIHdpbGwKKyAgIGNvbnRhaW4gdGhlIGRpc3BhdGNoIGxv Z2ljLiAgRk5ERUNMUyBhcmUgdGhlIGZ1bmN0aW9uIGNob2ljZXMgZm9yCisg ICBkaXNwYXRjaCwgYW5kIGlzIGEgdHJlZSBjaGFpbi4gIEVNUFRZX0JCIGlz IHRoZSBiYXNpYyBibG9jayBwb2ludGVyCisgICBpbiBESVNQQVRDSF9ERUNM IGluIHdoaWNoIHRoZSBkaXNwYXRjaCBjb2RlIGlzIGdlbmVyYXRlZC4gICov CisKK3N0YXRpYyBpbnQKK2l4ODZfZGlzcGF0Y2hfdmVyc2lvbiAodHJlZSBk aXNwYXRjaF9kZWNsLAorCQkgICAgICAgdm9pZCAqZm5kZWNsc19wLAorCQkg ICAgICAgYmFzaWNfYmxvY2sgKmVtcHR5X2JiKQoreworICB0cmVlIGRlZmF1 bHRfZGVjbDsKKyAgZ2ltcGxlIGlmdW5jX2NwdV9pbml0X3N0bXQ7CisgIGdp bXBsZV9zZXEgZ3NlcTsKKyAgdHJlZSBvbGRfY3VycmVudF9mdW5jdGlvbl9k ZWNsOworICBpbnQgaXg7CisgIHRyZWUgZWxlOworICBWRUMgKHRyZWUsIGhl YXApICpmbmRlY2xzOworICB1bnNpZ25lZCBpbnQgbnVtX3ZlcnNpb25zID0g MDsKKyAgdW5zaWduZWQgaW50IGFjdHVhbF92ZXJzaW9ucyA9IDA7CisgIHVu c2lnbmVkIGludCBpOworCisgIHN0cnVjdCBfZnVuY3Rpb25fdmVyc2lvbl9p bmZvCisgICAgeworICAgICAgdHJlZSB2ZXJzaW9uX2RlY2w7CisgICAgICB0 cmVlIHByZWRpY2F0ZV9jaGFpbjsKKyAgICAgIHVuc2lnbmVkIGludCBkaXNw YXRjaF9wcmlvcml0eTsKKyAgICB9KmZ1bmN0aW9uX3ZlcnNpb25faW5mbzsK KworICBnY2NfYXNzZXJ0IChkaXNwYXRjaF9kZWNsICE9IE5VTEwKKwkgICAg ICAmJiBmbmRlY2xzX3AgIT0gTlVMTAorCSAgICAgICYmIGVtcHR5X2JiICE9 IE5VTEwpOworCisgIC8qZm5kZWNsc19wIGlzIGFjdHVhbGx5IGEgdmVjdG9y LiAgKi8KKyAgZm5kZWNscyA9IChWRUMgKHRyZWUsIGhlYXApICopZm5kZWNs c19wOworCisgIC8qIEF0bGVhc3Qgb25lIG1vcmUgdmVyc2lvbiBvdGhlciB0 aGFuIHRoZSBkZWZhdWx0LiAgKi8KKyAgbnVtX3ZlcnNpb25zID0gVkVDX2xl bmd0aCAodHJlZSwgZm5kZWNscyk7CisgIGdjY19hc3NlcnQgKG51bV92ZXJz aW9ucyA+PSAyKTsKKworICBmdW5jdGlvbl92ZXJzaW9uX2luZm8gPSAoc3Ry dWN0IF9mdW5jdGlvbl92ZXJzaW9uX2luZm8gKikKKyAgICB4bWFsbG9jICgo bnVtX3ZlcnNpb25zIC0gMSkgKiBzaXplb2YgKHN0cnVjdCBfZnVuY3Rpb25f dmVyc2lvbl9pbmZvKSk7CisKKyAgLyogVGhlIGZpcnN0IHZlcnNpb24gaW4g dGhlIHZlY3RvciBpcyB0aGUgZGVmYXVsdCBkZWNsLiAgKi8KKyAgZGVmYXVs dF9kZWNsID0gVkVDX2luZGV4ICh0cmVlLCBmbmRlY2xzLCAwKTsKKworICBv bGRfY3VycmVudF9mdW5jdGlvbl9kZWNsID0gY3VycmVudF9mdW5jdGlvbl9k ZWNsOworICBwdXNoX2NmdW4gKERFQ0xfU1RSVUNUX0ZVTkNUSU9OIChkaXNw YXRjaF9kZWNsKSk7CisgIGN1cnJlbnRfZnVuY3Rpb25fZGVjbCA9IGRpc3Bh dGNoX2RlY2w7CisKKyAgZ3NlcSA9IGJiX3NlcSAoKmVtcHR5X2JiKTsKKyAg aWZ1bmNfY3B1X2luaXRfc3RtdCA9IGdpbXBsZV9idWlsZF9jYWxsX3ZlYyAo CisgICAgICAgICAgICAgICAgICAgICBpeDg2X2J1aWx0aW5zIFsoaW50KSBJ WDg2X0JVSUxUSU5fQ1BVX0lOSVRdLCBOVUxMKTsKKyAgZ2ltcGxlX3NlcV9h ZGRfc3RtdCAoJmdzZXEsIGlmdW5jX2NwdV9pbml0X3N0bXQpOworICBnaW1w bGVfc2V0X2JiIChpZnVuY19jcHVfaW5pdF9zdG10LCAqZW1wdHlfYmIpOwor ICBzZXRfYmJfc2VxICgqZW1wdHlfYmIsIGdzZXEpOworCisgIHBvcF9jZnVu ICgpOworICBjdXJyZW50X2Z1bmN0aW9uX2RlY2wgPSBvbGRfY3VycmVudF9m dW5jdGlvbl9kZWNsOworCisKKyAgZm9yIChpeCA9IDE7IFZFQ19pdGVyYXRl ICh0cmVlLCBmbmRlY2xzLCBpeCwgZWxlKTsgKytpeCkKKyAgICB7CisgICAg ICB0cmVlIHZlcnNpb25fZGVjbCA9IGVsZTsKKyAgICAgIHRyZWUgcHJlZGlj YXRlX2NoYWluID0gTlVMTF9UUkVFOworICAgICAgdW5zaWduZWQgaW50IHBy aW9yaXR5OworICAgICAgLyogR2V0IGF0dHJpYnV0ZSBzdHJpbmcsIHBhcnNl IGl0IGFuZCBmaW5kIHRoZSByaWdodCBwcmVkaWNhdGUgZGVjbC4KKyAgICAg ICAgIFRoZSBwcmVkaWNhdGUgZnVuY3Rpb24gY291bGQgYmUgYSBsZW5ndGh5 IGNvbWJpbmF0aW9uIG9mIG1hbnkKKwkgZmVhdHVyZXMsIGxpa2UgYXJjaC10 eXBlIGFuZCB2YXJpb3VzIGlzYS12YXJpYW50cy4gICovCisgICAgICBwcmVk aWNhdGVfY2hhaW4gPSBnZXRfYnVpbHRpbl9jb2RlX2Zvcl92ZXJzaW9uICh2 ZXJzaW9uX2RlY2wsICZwcmlvcml0eSk7CisKKyAgICAgIGlmIChwcmVkaWNh dGVfY2hhaW4gPT0gTlVMTF9UUkVFKQorCWNvbnRpbnVlOworCisgICAgICBh Y3R1YWxfdmVyc2lvbnMrKzsKKyAgICAgIGZ1bmN0aW9uX3ZlcnNpb25faW5m byBbaXggLSAxXS52ZXJzaW9uX2RlY2wgPSB2ZXJzaW9uX2RlY2w7CisgICAg ICBmdW5jdGlvbl92ZXJzaW9uX2luZm8gW2l4IC0gMV0ucHJlZGljYXRlX2No YWluID0gcHJlZGljYXRlX2NoYWluOworICAgICAgZnVuY3Rpb25fdmVyc2lv bl9pbmZvIFtpeCAtIDFdLmRpc3BhdGNoX3ByaW9yaXR5ID0gcHJpb3JpdHk7 CisgICAgfQorCisgIC8qIFNvcnQgdGhlIHZlcnNpb25zIGFjY29yZGluZyB0 byBkZXNjZW5kaW5nIG9yZGVyIG9mIGRpc3BhdGNoIHByaW9yaXR5LiAgVGhl CisgICAgIHByaW9yaXR5IGlzIGJhc2VkIG9uIHRoZSBJU0EuICBUaGlzIGlz IG5vdCBhIHBlcmZlY3Qgc29sdXRpb24uICBUaGVyZQorICAgICBjb3VsZCBz dGlsbCBiZSBhbWJpZ3VpdHkuICBJZiBtb3JlIHRoYW4gb25lIGZ1bmN0aW9u IHZlcnNpb24gaXMgc3VpdGFibGUKKyAgICAgdG8gZXhlY3V0ZSwgIHdoaWNo IG9uZSBzaG91bGQgYmUgZGlzcGF0Y2hlZD8gIEluIGZ1dHVyZSwgYWxsb3cg dGhlIHVzZXIKKyAgICAgdG8gc3BlY2lmeSBhIGRpc3BhdGNoICBwcmlvcml0 eSBuZXh0IHRvIHRoZSB2ZXJzaW9uLiAgKi8KKyAgcXNvcnQgKGZ1bmN0aW9u X3ZlcnNpb25faW5mbywgYWN0dWFsX3ZlcnNpb25zLAorICAgICAgICAgc2l6 ZW9mIChzdHJ1Y3QgX2Z1bmN0aW9uX3ZlcnNpb25faW5mbyksIGZlYXR1cmVf Y29tcGFyZSk7CisKKyAgZm9yICAoaSA9IDA7IGkgPCBhY3R1YWxfdmVyc2lv bnM7ICsraSkKKyAgICAqZW1wdHlfYmIgPSBhZGRfY29uZGl0aW9uX3RvX2Ji IChkaXNwYXRjaF9kZWNsLAorCQkJCSAgICAgZnVuY3Rpb25fdmVyc2lvbl9p bmZvW2ldLnZlcnNpb25fZGVjbCwKKwkJCQkgICAgIGZ1bmN0aW9uX3ZlcnNp b25faW5mb1tpXS5wcmVkaWNhdGVfY2hhaW4sCisJCQkJICAgICAqZW1wdHlf YmIpOworCisgIC8qIGRpc3BhdGNoIGRlZmF1bHQgdmVyc2lvbiBhdCB0aGUg ZW5kLiAgKi8KKyAgKmVtcHR5X2JiID0gYWRkX2NvbmRpdGlvbl90b19iYiAo ZGlzcGF0Y2hfZGVjbCwgZGVmYXVsdF9kZWNsLAorCQkJCSAgIE5VTEwsICpl bXB0eV9iYik7CisKKyAgZnJlZSAoZnVuY3Rpb25fdmVyc2lvbl9pbmZvKTsK KyAgcmV0dXJuIDA7Cit9CisKIC8qIFRoaXMgYnVpbGRzIHRoZSBwcm9jZXNz b3JfbW9kZWwgc3RydWN0IHR5cGUgZGVmaW5lZCBpbgogICAgbGliZ2NjL2Nv bmZpZy9pMzg2L2NwdWluZm8uYyAgKi8KIApAQCAtMzk1MzksNiArMzk5NzEs OSBAQCBpeDg2X21lbW1vZGVsX2NoZWNrICh1bnNpZ25lZCBIT1NUX1dJREVf SU5UIHZhbCkKICN1bmRlZiBUQVJHRVRfRk9MRF9CVUlMVElOCiAjZGVmaW5l IFRBUkdFVF9GT0xEX0JVSUxUSU4gaXg4Nl9mb2xkX2J1aWx0aW4KIAorI3Vu ZGVmIFRBUkdFVF9ESVNQQVRDSF9WRVJTSU9OCisjZGVmaW5lIFRBUkdFVF9E SVNQQVRDSF9WRVJTSU9OIGl4ODZfZGlzcGF0Y2hfdmVyc2lvbgorCiAjdW5k ZWYgVEFSR0VUX0VOVU1fVkFfTElTVF9QCiAjZGVmaW5lIFRBUkdFVF9FTlVN X1ZBX0xJU1RfUCBpeDg2X2VudW1fdmFfbGlzdAogCkluZGV4OiBnY2MvY3Av ZXJyb3IuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvY3AvZXJy b3IuYwkocmV2aXNpb24gMTg3MzcxKQorKysgZ2NjL2NwL2Vycm9yLmMJKHdv cmtpbmcgY29weSkKQEAgLTE1MzQsOCArMTUzNCwxNSBAQCBkdW1wX2V4Y2Vw dGlvbl9zcGVjICh0cmVlIHQsIGludCBmbGFncykKIHN0YXRpYyB2b2lkCiBk dW1wX2Z1bmN0aW9uX25hbWUgKHRyZWUgdCwgaW50IGZsYWdzKQogewotICB0 cmVlIG5hbWUgPSBERUNMX05BTUUgKHQpOworICB0cmVlIG5hbWU7CiAKKyAg LyogRm9yIGZ1bmN0aW9uIHZlcnNpb25zLCB1c2UgdGhlIGFzc2VtYmxlciBu YW1lIGFzIHRoZSBkZWNsIG5hbWUgaXMKKyAgICAgdGhlIHNhbWUgZm9yIGFs bCB2ZXJzaW9ucy4gICovCisgIGlmIChERUNMX0ZVTkNUSU9OX1ZFUlNJT05F RCAodCkpCisgICAgbmFtZSA9IERFQ0xfQVNTRU1CTEVSX05BTUUgKHQpOwor ICBlbHNlCisgICAgbmFtZSA9IERFQ0xfTkFNRSAodCk7CisKICAgLyogV2Ug Y2FuIGdldCBoZXJlIHdpdGggYSBkZWNsIHRoYXQgd2FzIHN5bnRoZXNpemVk IGJ5IGxhbmd1YWdlLQogICAgICBpbmRlcGVuZGVudCBtYWNoaW5lcnkgKGUu Zy4gY292ZXJhZ2UuYykgaW4gd2hpY2ggY2FzZSBpdCB3b24ndAogICAgICBo YXZlIGEgbGFuZ19zcGVjaWZpYyBzdHJ1Y3R1cmUgYXR0YWNoZWQgYW5kIERF Q0xfQ09OU1RSVUNUT1JfUAo= --e89a8ff2563273bf0904c0034292--