From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27422 invoked by alias); 12 May 2012 02:04:52 -0000 Received: (qmail 26120 invoked by uid 22791); 12 May 2012 02:04:43 -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-ob0-f175.google.com (HELO mail-ob0-f175.google.com) (209.85.214.175) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 12 May 2012 02:04:17 +0000 Received: by obhx4 with SMTP id x4so4759687obh.20 for ; Fri, 11 May 2012 19:04:16 -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=VBt79yvPI1BNfPXV75yJfl3klFWz8EqsD0q9BKxJM0g=; b=lN7ke1XutlxLGd01tiEs0MDC8ZM0nHA2TVF5KzUi9A82cCPpe5eY62DCzgs8tOQAMS FpAMY79sN7rB3eGWm1nA2/KSj6MaJyevsz4xMXqjff2gPR8HsYFmb6wU/3uUsTyT2liE rZ9YgmZ15oJ1Qg74o4VkvOaAwrCffJRj0EgFsVDKT9wP9n0jTCcIzZjm13GcxGjXq2mI iAoxUbTwzLw2siXHisGCs3YQBukuEBPzt/VnQQUTSTxuGH/v1pr0krKczt5dMFc4oBHd zI7CPjFEEZz+ix709OXTXRetL90Hynb19b4RLZdCWpYQK+4JoRcxcgT8iLDdqrW7a3tJ kP8A== Received: by 10.182.187.42 with SMTP id fp10mr287557obc.30.1336788256772; Fri, 11 May 2012 19:04:16 -0700 (PDT) MIME-Version: 1.0 Received: by 10.182.187.42 with SMTP id fp10mr287529obc.30.1336788256514; Fri, 11 May 2012 19:04:16 -0700 (PDT) Received: by 10.182.147.104 with HTTP; Fri, 11 May 2012 19:04:16 -0700 (PDT) In-Reply-To: References: <20120307004630.A503DB21B6@azwildcat.mtv.corp.google.com> Date: Sat, 12 May 2012 02:04: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=14dae93995052b611704bfcd45c4 X-System-Of-Record: true X-Gm-Message-State: ALoCoQlrG52Mu65dLkNA2b5zZlSEA7b8VFypYYxvWDrbR6Oqq9L4FImYp4ro8zTznuJ69824jJVSEuGQFeC1SZvEKpx6F4D7gSK/uVw0twwpacrXthtZiVi6KpZB98x1BANh+sS6ciQDXisOsFD7+Z6uqiWSu37dOQ== 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/msg00836.txt.bz2 --14dae93995052b611704bfcd45c4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 872 Hi H.J., 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: http://codereview.appspot.com/5752064 Thanks, -Sri. On Thu, May 10, 2012 at 10:55 AM, H.J. Lu wrote: > On Wed, May 9, 2012 at 12:01 PM, Sriraman Tallam wr= ote: >> Hi, >> >> Attached new patch with more bug fixes. I will fix the dispatching >> method to use prioirty of attributes in the next iteration. >> >> Patch also available for review here: =A0http://codereview.appspot.com/5= 752064 >> > > The patch looks OK to me. =A0Since testcase depends on the dispatching > method, =A0I'd like to see the whole patch with the updated dispatching > method. > > Thanks. > > -- > H.J. --14dae93995052b611704bfcd45c4 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_h2411i9w0 Content-length: 91114 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 IC0wLDAgKzEsMjAwIEBACisvKiBUZXN0IGNhc2UgdG8gY2hlY2sgaWYgTXVs dGl2ZXJzaW9uaW5nIHdvcmtzLiAgKi8KKy8qIHsgZGctZG8gcnVuIHsgdGFy Z2V0IGk/ODYtKi0qIHg4Nl82NC0qLSogfSB9ICovCisvKiB7IGRnLXJlcXVp cmUtaWZ1bmMgIiIgfSAgKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1mUElD IiB9ICovCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworLyogRGVmYXVsdCB2 ZXJzaW9uLiAgKi8KK2ludCBmb28gKCk7CisvKiBUaGUgb3RoZXIgdmVyc2lv bnMgb2YgZm9vLiAgTWl4IHVwIHRoZSBvcmRlcmluZyBhbmQgCisgICBjaGVj ayBpZiB0aGUgZGlzcGF0Y2hpbmcgZG9lcyBpdCBpbiB0aGUgb3JkZXIgb2Yg cHJpb3JpdHkuICovCisvKiBDaGVjayBjb21iaW5hdGlvbiBvZiB0YXJnZXQg YXR0cmlidXRlcy4gICovCitpbnQgZm9vICgpIF9fYXR0cmlidXRlX18gKCh0 YXJnZXQoImFyY2g9Y29yZWk3LHBvcGNudCIpKSk7CisvKiBUaGUgdGFyZ2V0 IG9wZXJhbmRzIGluIHRoaXMgZGVjbGFyYXRpb24gYW5kIHRoZSBkZWZpbml0 aW9uIGFyZSByZS1vcmRlcmVkLgorICAgVGhpcyBzaG91bGQgc3RpbGwgd29y ay4gICovCitpbnQgZm9vICgpIF9fYXR0cmlidXRlX18gKCh0YXJnZXQoInNz c2UzLGF2eDIiKSkpOworCisvKiBDaGVjayBmb3IgYWxsIHRhcmdldCBhdHRy aWJ1dGVzIGZvciB3aGljaCBkaXNwYXRjaGVycyBhcmUgYXZhaWxhYmxlLiAg Ki8KKy8qIENoZWNrIGFyY2g9ICovCitpbnQgZm9vICgpIF9fYXR0cmlidXRl X18oKHRhcmdldCgiYXJjaD1jb3JlMiIpKSk7CitpbnQgZm9vICgpIF9fYXR0 cmlidXRlX18oKHRhcmdldCgiYXJjaD1jb3JlaTciKSkpOworaW50IGZvbyAo KSBfX2F0dHJpYnV0ZV9fKCh0YXJnZXQoImFyY2g9YXRvbSIpKSk7CitpbnQg Zm9vICgpIF9fYXR0cmlidXRlX18oKHRhcmdldCgiYXJjaD1hbWRmYW0xMCIp KSk7CitpbnQgZm9vICgpIF9fYXR0cmlidXRlX18oKHRhcmdldCgiYXJjaD1i ZHZlcjEiKSkpOworaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9fKCh0YXJnZXQo ImFyY2g9YmR2ZXIyIikpKTsKKy8qIENoZWNrIElTQXMgICovCitpbnQgZm9v ICgpIF9fYXR0cmlidXRlX18oKHRhcmdldCgic3NlMyIpKSk7CitpbnQgZm9v ICgpIF9fYXR0cmlidXRlX18oKHRhcmdldCgic3NlMiIpKSk7CitpbnQgZm9v ICgpIF9fYXR0cmlidXRlX18oKHRhcmdldCgic3NlIikpKTsKK2ludCBmb28g KCkgX19hdHRyaWJ1dGVfXygodGFyZ2V0KCJhdngiKSkpOworaW50IGZvbyAo KSBfX2F0dHJpYnV0ZV9fKCh0YXJnZXQoInNzZTQuMiIpKSk7CitpbnQgZm9v ICgpIF9fYXR0cmlidXRlX18oKHRhcmdldCgicG9wY250IikpKTsKK2ludCBm b28gKCkgX19hdHRyaWJ1dGVfXygodGFyZ2V0KCJzc2U0LjEiKSkpOworaW50 IGZvbyAoKSBfX2F0dHJpYnV0ZV9fKCh0YXJnZXQoInNzc2UzIikpKTsKK2lu dCBmb28gKCkgX19hdHRyaWJ1dGVfXygodGFyZ2V0KCJtbXgiKSkpOworaW50 IGZvbyAoKSBfX2F0dHJpYnV0ZV9fKCh0YXJnZXQoImF2eDIiKSkpOworaW50 ICgqcCkoKSA9ICZmb287CitpbnQgbWFpbiAoKQoreworICBpbnQgdmFsID0g Zm9vICgpOworICBhc3NlcnQgKHZhbCA9PSAgKCpwKSgpKTsKKworICAvKiBD aGVjayBpbiB0aGUgZXhhY3Qgc2FtZSBvcmRlciBpbiB3aGljaCB0aGUgZGlz cGF0Y2hpbmcKKyAgICAgaXMgZXhwZWN0ZWQgdG8gaGFwcGVuLiAgKi8KKyAg aWYgKF9fYnVpbHRpbl9jcHVfaXMgKCJiZHZlcjEiKSkKKyAgICBhc3NlcnQg KHZhbCA9PSAxKTsKKyAgZWxzZSBpZiAoX19idWlsdGluX2NwdV9pcyAoImJk dmVyMiIpKQorICAgIGFzc2VydCAodmFsID09IDIpOworICBlbHNlIGlmIChf X2J1aWx0aW5fY3B1X3N1cHBvcnRzICgiYXZ4MiIpCisJICAgJiYgX19idWls dGluX2NwdV9zdXBwb3J0cyAoInNzc2UzIikpCisgICAgYXNzZXJ0ICh2YWwg PT0gMyk7CisgIGVsc2UgaWYgKF9fYnVpbHRpbl9jcHVfc3VwcG9ydHMgKCJh dngyIikpCisgICAgYXNzZXJ0ICh2YWwgPT0gNCk7CisgIGVsc2UgaWYgKF9f YnVpbHRpbl9jcHVfc3VwcG9ydHMgKCJhdngiKSkKKyAgICBhc3NlcnQgKHZh bCA9PSA1KTsKKyAgZWxzZSBpZiAoX19idWlsdGluX2NwdV9pcyAoImNvcmVp NyIpCisJICAgJiYgX19idWlsdGluX2NwdV9zdXBwb3J0cyAoInBvcGNudCIp KQorICAgIGFzc2VydCAodmFsID09IDYpOworICBlbHNlIGlmIChfX2J1aWx0 aW5fY3B1X3N1cHBvcnRzICgicG9wY250IikpCisgICAgYXNzZXJ0ICh2YWwg PT0gNyk7CisgIGVsc2UgaWYgKF9fYnVpbHRpbl9jcHVfaXMgKCJjb3JlaTci KSkKKyAgICBhc3NlcnQgKHZhbCA9PSA4KTsKKyAgZWxzZSBpZiAoX19idWls dGluX2NwdV9zdXBwb3J0cyAoInNzZTQuMiIpKQorICAgIGFzc2VydCAodmFs ID09IDkpOworICBlbHNlIGlmIChfX2J1aWx0aW5fY3B1X3N1cHBvcnRzICgi c3NlNC4xIikpCisgICAgYXNzZXJ0ICh2YWwgPT0gMTApOworICBlbHNlIGlm IChfX2J1aWx0aW5fY3B1X2lzICgiYW1kZmFtMTBoIikpCisgICAgYXNzZXJ0 ICh2YWwgPT0gMTEpOworICBlbHNlIGlmIChfX2J1aWx0aW5fY3B1X2lzICgi Y29yZTIiKSkKKyAgICBhc3NlcnQgKHZhbCA9PSAxMik7CisgIGVsc2UgaWYg KF9fYnVpbHRpbl9jcHVfaXMgKCJhdG9tIikpCisgICAgYXNzZXJ0ICh2YWwg PT0gMTMpOworICBlbHNlIGlmIChfX2J1aWx0aW5fY3B1X3N1cHBvcnRzICgi c3NzZTMiKSkKKyAgICBhc3NlcnQgKHZhbCA9PSAxNCk7CisgIGVsc2UgaWYg KF9fYnVpbHRpbl9jcHVfc3VwcG9ydHMgKCJzc2UzIikpCisgICAgYXNzZXJ0 ICh2YWwgPT0gMTUpOworICBlbHNlIGlmIChfX2J1aWx0aW5fY3B1X3N1cHBv cnRzICgic3NlMiIpKQorICAgIGFzc2VydCAodmFsID09IDE2KTsKKyAgZWxz ZSBpZiAoX19idWlsdGluX2NwdV9zdXBwb3J0cyAoInNzZSIpKQorICAgIGFz c2VydCAodmFsID09IDE3KTsKKyAgZWxzZSBpZiAoX19idWlsdGluX2NwdV9z dXBwb3J0cyAoIm1teCIpKQorICAgIGFzc2VydCAodmFsID09IDE4KTsKKyAg ZWxzZQorICAgIGFzc2VydCAodmFsID09IDApOworICAKKyAgcmV0dXJuIDA7 Cit9CisKK2ludCBmb28gKCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBf X2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJhcmNoPWJkdmVyMSIpKSkKK2ZvbyAo KQoreworICByZXR1cm4gMTsKK30KKworaW50IF9fYXR0cmlidXRlX18gKCh0 YXJnZXQoImFyY2g9YmR2ZXIyIikpKQorZm9vICgpCit7CisgIHJldHVybiAy OworfQorCitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgiYXZ4Mixzc3Nl MyIpKSkKK2ZvbyAoKQoreworICByZXR1cm4gMzsKK30KKworaW50IF9fYXR0 cmlidXRlX18gKCh0YXJnZXQoImF2eDIiKSkpCitmb28gKCkKK3sKKyAgcmV0 dXJuIDQ7Cit9CisKK2ludCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJhdngi KSkpCitmb28gKCkKK3sKKyAgcmV0dXJuIDU7Cit9CisKK2ludCBfX2F0dHJp YnV0ZV9fICgodGFyZ2V0KCJhcmNoPWNvcmVpNyxwb3BjbnQiKSkpCitmb28g KCkKK3sKKyAgcmV0dXJuIDY7Cit9CisKK2ludCBfX2F0dHJpYnV0ZV9fICgo dGFyZ2V0KCJwb3BjbnQiKSkpCitmb28gKCkKK3sKKyAgcmV0dXJuIDc7Cit9 CisKK2ludCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJhcmNoPWNvcmVpNyIp KSkKK2ZvbyAoKQoreworICByZXR1cm4gODsKK30KKworaW50IF9fYXR0cmli dXRlX18gKCh0YXJnZXQoInNzZTQuMiIpKSkKK2ZvbyAoKQoreworICByZXR1 cm4gOTsKK30KKworaW50IF9fYXR0cmlidXRlX18gKCh0YXJnZXQoInNzZTQu MSIpKSkKK2ZvbyAoKQoreworICByZXR1cm4gMTA7Cit9CisKK2ludCBfX2F0 dHJpYnV0ZV9fICgodGFyZ2V0KCJhcmNoPWFtZGZhbTEwIikpKQorZm9vICgp Cit7CisgIHJldHVybiAxMTsKK30KKworaW50IF9fYXR0cmlidXRlX18gKCh0 YXJnZXQoImFyY2g9Y29yZTIiKSkpCitmb28gKCkKK3sKKyAgcmV0dXJuIDEy OworfQorCitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgiYXJjaD1hdG9t IikpKQorZm9vICgpCit7CisgIHJldHVybiAxMzsKK30KKworaW50IF9fYXR0 cmlidXRlX18gKCh0YXJnZXQoInNzc2UzIikpKQorZm9vICgpCit7CisgIHJl dHVybiAxNDsKK30KKworaW50IF9fYXR0cmlidXRlX18gKCh0YXJnZXQoInNz ZTMiKSkpCitmb28gKCkKK3sKKyAgcmV0dXJuIDE1OworfQorCitpbnQgX19h dHRyaWJ1dGVfXyAoKHRhcmdldCgic3NlMiIpKSkKK2ZvbyAoKQoreworICBy ZXR1cm4gMTY7Cit9CisKK2ludCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJz c2UiKSkpCitmb28gKCkKK3sKKyAgcmV0dXJuIDE3OworfQorCitpbnQgX19h dHRyaWJ1dGVfXyAoKHRhcmdldCgibW14IikpKQorZm9vICgpCit7CisgIHJl dHVybiAxODsKK30KSW5kZXg6IGdjYy9jcC9jbGFzcy5jCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLS0tIGdjYy9jcC9jbGFzcy5jCShyZXZpc2lvbiAxODcz NzEpCisrKyBnY2MvY3AvY2xhc3MuYwkod29ya2luZyBjb3B5KQpAQCAtMzks NiArMzksNyBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJ TkczLiAgSWYgbm90IHNlZQogI2luY2x1ZGUgInRyZWUtZHVtcC5oIgogI2lu Y2x1ZGUgInNwbGF5LXRyZWUuaCIKICNpbmNsdWRlICJwb2ludGVyLXNldC5o IgorI2luY2x1ZGUgIm11bHRpdmVyc2lvbi5oIgogCiAvKiBUaGUgbnVtYmVy IG9mIG5lc3RlZCBjbGFzc2VzIGJlaW5nIHByb2Nlc3NlZC4gIElmIHdlIGFy ZSBub3QgaW4gdGhlCiAgICBzY29wZSBvZiBhbnkgY2xhc3MsIHRoaXMgaXMg emVyby4gICovCkBAIC0xMDkzLDcgKzEwOTQsMjEgQEAgYWRkX21ldGhvZCAo dHJlZSB0eXBlLCB0cmVlIG1ldGhvZCwgdHJlZSB1c2luZ19kZWMKIAkgICAg ICB8fCBzYW1lX3R5cGVfcCAoVFJFRV9UWVBFIChmbl90eXBlKSwKIAkJCSAg ICAgIFRSRUVfVFlQRSAobWV0aG9kX3R5cGUpKSkpCiAJewotCSAgaWYgKHVz aW5nX2RlY2wpCisJICAvKiBGb3IgZnVuY3Rpb24gdmVyc2lvbnMsIHRoZWly IHBhcm1zIGFuZCB0eXBlcyBtYXRjaAorCSAgICAgYnV0IHRoZXkgYXJlIG5v dCBkdXBsaWNhdGVzLiAgUmVjb3JkIGZ1bmN0aW9uIHZlcnNpb25zCisJICAg ICBhcyBhbmQgd2hlbiB0aGV5IGFyZSBmb3VuZC4gICovCisJICBpZiAoVFJF RV9DT0RFIChmbikgPT0gRlVOQ1RJT05fREVDTAorCSAgICAgICYmIFRSRUVf Q09ERSAobWV0aG9kKSA9PSBGVU5DVElPTl9ERUNMCisJICAgICAgJiYgKGlz X3RhcmdldF9hdHRyaWJ1dGVfc2V0IChmbikKKwkJICB8fCBpc190YXJnZXRf YXR0cmlidXRlX3NldCAobWV0aG9kKSkKKwkgICAgICAmJiBoYXNfZGlmZmVy ZW50X3ZlcnNpb25fYXR0cmlidXRlcyAoZm4sIG1ldGhvZCkpCisgCSAgICB7 CisJICAgICAgbWFya19mdW5jdGlvbl9hc192ZXJzaW9uIChmbik7CisJICAg ICAgbWFya19mdW5jdGlvbl9hc192ZXJzaW9uIChtZXRob2QpOworCSAgICAg IGdyb3VwX2Z1bmN0aW9uX3ZlcnNpb25zIChmbiwgbWV0aG9kKTsKKwkgICAg ICBjb250aW51ZTsKKwkgICAgfQorCSAgZWxzZSBpZiAodXNpbmdfZGVjbCkK IAkgICAgewogCSAgICAgIGlmIChERUNMX0NPTlRFWFQgKGZuKSA9PSB0eXBl KQogCQkvKiBEZWZlciB0byB0aGUgbG9jYWwgZnVuY3Rpb24uICAqLwpAQCAt MTE1MSw2ICsxMTY2LDcgQEAgYWRkX21ldGhvZCAodHJlZSB0eXBlLCB0cmVl IG1ldGhvZCwgdHJlZSB1c2luZ19kZWMKICAgZWxzZQogICAgIC8qIFJlcGxh Y2UgdGhlIGN1cnJlbnQgc2xvdC4gICovCiAgICAgVkVDX3JlcGxhY2UgKHRy ZWUsIG1ldGhvZF92ZWMsIHNsb3QsIG92ZXJsb2FkKTsKKwogICByZXR1cm4g dHJ1ZTsKIH0KIApAQCAtNjkyOCw4ICs2OTQ0LDExIEBAIHJlc29sdmVfYWRk cmVzc19vZl9vdmVybG9hZGVkX2Z1bmN0aW9uICh0cmVlIHRhcmdlCiAJICBp ZiAoREVDTF9BTlRJQ0lQQVRFRCAoZm4pKQogCSAgICBjb250aW51ZTsKIAot CSAgLyogU2VlIGlmIHRoZXJlJ3MgYSBtYXRjaC4gICovCi0JICBpZiAoc2Ft ZV90eXBlX3AgKHRhcmdldF9mbl90eXBlLCBzdGF0aWNfZm5fdHlwZSAoZm4p KSkKKwkgIC8qIFNlZSBpZiB0aGVyZSdzIGEgbWF0Y2guICAgRm9yIGZ1bmN0 aW9ucyB0aGF0IGFyZSBtdWx0aS12ZXJzaW9uZWQKKwkgICAgIG1hdGNoIGl0 IHRvIHRoZSBkZWZhdWx0IGZ1bmN0aW9uLiAgKi8KKwkgIGlmIChzYW1lX3R5 cGVfcCAodGFyZ2V0X2ZuX3R5cGUsIHN0YXRpY19mbl90eXBlIChmbikpCisJ ICAgICAgJiYgKCFERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAoZm4pCisJCSAg fHwgaXNfZGVmYXVsdF9mdW5jdGlvbiAoZm4pKSkKIAkgICAgbWF0Y2hlcyA9 IHRyZWVfY29ucyAoZm4sIE5VTExfVFJFRSwgbWF0Y2hlcyk7CiAJfQogICAg IH0KQEAgLTcwOTEsNiArNzExMCwyMiBAQCByZXNvbHZlX2FkZHJlc3Nfb2Zf b3ZlcmxvYWRlZF9mdW5jdGlvbiAodHJlZSB0YXJnZQogICAgICAgcGVyZm9y bV9vcl9kZWZlcl9hY2Nlc3NfY2hlY2sgKGFjY2Vzc19wYXRoLCBmbiwgZm4p OwogICAgIH0KIAorICAvKiBJZiBhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0 aGF0IGlzIG11bHRpLXZlcnNpb25lZCBpcyByZXF1ZXN0ZWQsIHRoZQorICAg ICBwb2ludGVyIHRvIHRoZSBkaXNwYXRjaGVyIGZ1bmN0aW9uIGlzIHJldHVy bmVkIGluc3RlYWQuICBUaGlzIHdvcmtzCisgICAgIHdlbGwgYmVjYXVzZSBp bmRpcmVjdGx5IGNhbGxpbmcgdGhlIGZ1bmN0aW9uIHdpbGwgZGlzcGF0Y2gg dGhlIHJpZ2h0CisgICAgIGZ1bmN0aW9uIHZlcnNpb24gYXQgcnVuLXRpbWUu IEFsc28sIHRoZSBmdW5jdGlvbiBhZGRyZXNzIGlzIGtlcHQKKyAgICAgdW5p cXVlLiAgKi8KKyAgaWYgKERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChmbikK KyAgICAgICYmIGlzX2RlZmF1bHRfZnVuY3Rpb24gKGZuKSkKKyAgICB7Cisg ICAgICB0cmVlIGlmdW5jX2RlY2w7CisgICAgICBpZnVuY19kZWNsID0gZ2V0 X2lmdW5jX2Zvcl92ZXJzaW9uIChmbik7CisgICAgICByZXRyb2ZpdF9sYW5n X2RlY2wgKGlmdW5jX2RlY2wpOworICAgICAgZ2NjX2Fzc2VydCAoaWZ1bmNf ZGVjbCAhPSBOVUxMKTsKKyAgICAgIG1hcmtfdXNlZCAoZm4pOworICAgICAg cmV0dXJuIGJ1aWxkX2ZvbGRfYWRkcl9leHByIChpZnVuY19kZWNsKTsKKyAg ICB9CisKICAgaWYgKFRZUEVfUFRSRk5fUCAodGFyZ2V0X3R5cGUpIHx8IFRZ UEVfUFRSTUVNRlVOQ19QICh0YXJnZXRfdHlwZSkpCiAgICAgcmV0dXJuIGNw X2J1aWxkX2FkZHJfZXhwciAoZm4sIGZsYWdzKTsKICAgZWxzZQpJbmRleDog Z2NjL2NwL2RlY2wuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2Mv Y3AvZGVjbC5jCShyZXZpc2lvbiAxODczNzEpCisrKyBnY2MvY3AvZGVjbC5j CSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3IEBAIGFsb25nIHdpdGgg R0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAjaW5j bHVkZSAicG9pbnRlci1zZXQuaCIKICNpbmNsdWRlICJzcGxheS10cmVlLmgi CiAjaW5jbHVkZSAicGx1Z2luLmgiCisjaW5jbHVkZSAibXVsdGl2ZXJzaW9u LmgiCiAKIC8qIFBvc3NpYmxlIGNhc2VzIG9mIGJhZCBzcGVjaWZpZXJzIHR5 cGUgdXNlZCBieSBiYWRfc3BlY2lmaWVycy4gKi8KIGVudW0gYmFkX3NwZWNf cGxhY2UgewpAQCAtOTczLDYgKzk3NCwyMSBAQCBkZWNsc19tYXRjaCAodHJl ZSBuZXdkZWNsLCB0cmVlIG9sZGRlY2wpCiAgICAgICBpZiAodDEgIT0gdDIp CiAJcmV0dXJuIDA7CiAKKyAgICAgIC8qIFRoZSBkZWNscyBkb250IG1hdGNo IGlmIHRoZXkgY29ycmVzcG9uZCB0byB0d28gZGlmZmVyZW50IHZlcnNpb25z CisJIG9mIHRoZSBzYW1lIGZ1bmN0aW9uLiAgKi8KKyAgICAgIGlmIChjb21w cGFybXMgKHAxLCBwMikKKwkgICYmIHNhbWVfdHlwZV9wIChUUkVFX1RZUEUg KGYxKSwgVFJFRV9UWVBFIChmMikpIAorCSAgJiYgaGFzX2RpZmZlcmVudF92 ZXJzaW9uX2F0dHJpYnV0ZXMgKG5ld2RlY2wsIG9sZGRlY2wpKQorCXsKKwkg IC8qIE9uZSBvZiB0aGUgZGVjbHMgY291bGQgYmUgdGhlIGRlZmF1bHQgd2l0 aG91dCB0aGUgInRhcmdldCIKKwkgICAgIGF0dHJpYnV0ZS4gU2V0IGl0IHRv IGJlIGEgdmVyc2lvbmVkIGZ1bmN0aW9uIGhlcmUuICAqLworCSAgbWFya19m dW5jdGlvbl9hc192ZXJzaW9uIChuZXdkZWNsKTsKKwkgIG1hcmtfZnVuY3Rp b25fYXNfdmVyc2lvbiAob2xkZGVjbCk7CisJICAvKiBBY2N1bXVsYXRlIGFs bCB0aGUgdmVyc2lvbnMgb2YgYSBmdW5jdGlvbi4gICovCisJICBncm91cF9m dW5jdGlvbl92ZXJzaW9ucyAob2xkZGVjbCwgbmV3ZGVjbCk7CisJICByZXR1 cm4gMDsKKwl9CisKICAgICAgIGlmIChDUF9ERUNMX0NPTlRFWFQgKG5ld2Rl Y2wpICE9IENQX0RFQ0xfQ09OVEVYVCAob2xkZGVjbCkKIAkgICYmICEgKERF Q0xfRVhURVJOX0NfUCAobmV3ZGVjbCkKIAkJJiYgREVDTF9FWFRFUk5fQ19Q IChvbGRkZWNsKSkpCkBAIC0xNDkwLDcgKzE1MDYsMTEgQEAgZHVwbGljYXRl X2RlY2xzICh0cmVlIG5ld2RlY2wsIHRyZWUgb2xkZGVjbCwgYm9vbAogCSAg ICAgIGVycm9yICgicHJldmlvdXMgZGVjbGFyYXRpb24gJXErI0QgaGVyZSIs IG9sZGRlY2wpOwogCSAgICAgIHJldHVybiBOVUxMX1RSRUU7CiAJICAgIH0K LQkgIGVsc2UgaWYgKGNvbXBwYXJtcyAoVFlQRV9BUkdfVFlQRVMgKFRSRUVf VFlQRSAobmV3ZGVjbCkpLAorCSAgLyogRm9yIGZ1bmN0aW9uIHZlcnNpb25z LCBwYXJhbXMgYW5kIHR5cGVzIG1hdGNoLCBidXQgdGhleQorCSAgICAgYXJl IG5vdCBhbWJpZ3VvdXMuICAqLworCSAgZWxzZSBpZiAoKCFERUNMX0ZVTkNU SU9OX1ZFUlNJT05FRCAobmV3ZGVjbCkKKwkJICAgICYmICFERUNMX0ZVTkNU SU9OX1ZFUlNJT05FRCAob2xkZGVjbCkpCisJCSAgICYmIGNvbXBwYXJtcyAo VFlQRV9BUkdfVFlQRVMgKFRSRUVfVFlQRSAobmV3ZGVjbCkpLAogCQkJICAg ICAgVFlQRV9BUkdfVFlQRVMgKFRSRUVfVFlQRSAob2xkZGVjbCkpKSkKIAkg ICAgewogCSAgICAgIGVycm9yICgibmV3IGRlY2xhcmF0aW9uICVxI0QiLCBu ZXdkZWNsKTsKQEAgLTIyNjIsNiArMjI4MiwxNiBAQCBkdXBsaWNhdGVfZGVj bHMgKHRyZWUgbmV3ZGVjbCwgdHJlZSBvbGRkZWNsLCBib29sCiAgIGVsc2Ug aWYgKERFQ0xfUFJFU0VSVkVfUCAobmV3ZGVjbCkpCiAgICAgREVDTF9QUkVT RVJWRV9QIChvbGRkZWNsKSA9IDE7CiAKKyAgLyogSWYgdGhlIG9sZGRlY2wg aXMgYSB2ZXJzaW9uLCBzbyBpcyB0aGUgbmV3ZGVjbC4gICovCisgIGlmIChU UkVFX0NPREUgKG5ld2RlY2wpID09IEZVTkNUSU9OX0RFQ0wKKyAgICAgICYm IERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChvbGRkZWNsKSkKKyAgICB7Cisg ICAgICBERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAobmV3ZGVjbCkgPSAxOwor ICAgICAgLyogUmVjb3JkIHRoYXQgbmV3ZGVjbCBpcyBub3QgYSB2YWxpZCB2 ZXJzaW9uIGFuZCBoYXMKKwkgYmVlbiBkZWxldGVkLiAgKi8KKyAgICAgIG1h cmtfZGVsZXRlX2RlY2xfdmVyc2lvbiAobmV3ZGVjbCk7CisgICAgfQorCiAg IGlmIChUUkVFX0NPREUgKG5ld2RlY2wpID09IEZVTkNUSU9OX0RFQ0wpCiAg ICAgewogICAgICAgaW50IGZ1bmN0aW9uX3NpemU7CkBAIC0zODEwLDYgKzM4 NDAsNyBAQCBjcF9tYWtlX2ZuYW1lX2RlY2wgKGxvY2F0aW9uX3QgbG9jLCB0 cmVlIGlkLCBpbnQgdAogCQkJICAgID8gTlVMTCA6IGZuYW1lX2FzX3N0cmlu ZyAodHlwZV9kZXApKTsKICAgdHJlZSB0eXBlOwogICB0cmVlIGluaXQgPSBj cF9mbmFtZV9pbml0IChuYW1lLCAmdHlwZSk7CisKICAgdHJlZSBkZWNsID0g YnVpbGRfZGVjbCAobG9jLCBWQVJfREVDTCwgaWQsIHR5cGUpOwogCiAgIGlm IChuYW1lKQpAQCAtMTQwMzYsNyArMTQwNjcsMTEgQEAgY3h4X2NvbWRhdF9n cm91cCAodHJlZSBkZWNsKQogCSAgZWxzZQogCSAgICBicmVhazsKIAl9Ci0g ICAgICBuYW1lID0gREVDTF9BU1NFTUJMRVJfTkFNRSAoZGVjbCk7CisgICAg ICBpZiAoVFJFRV9DT0RFIChkZWNsKSA9PSBGVU5DVElPTl9ERUNMCisJICAm JiBERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAoZGVjbCkpCisJbmFtZSA9IERF Q0xfTkFNRSAoZGVjbCk7CisgICAgICBlbHNlCisgICAgICAgIG5hbWUgPSBE RUNMX0FTU0VNQkxFUl9OQU1FIChkZWNsKTsKICAgICB9CiAKICAgcmV0dXJu IG5hbWU7CkluZGV4OiBnY2MvY3Avc2VtYW50aWNzLmMKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gZ2NjL2NwL3NlbWFudGljcy5jCShyZXZpc2lvbiAx ODczNzEpCisrKyBnY2MvY3Avc2VtYW50aWNzLmMJKHdvcmtpbmcgY29weSkK QEAgLTM3ODMsOCArMzc4MywxMSBAQCBleHBhbmRfb3JfZGVmZXJfZm5fMSAo dHJlZSBmbikKICAgICAgIC8qIElmIHRoZSB1c2VyIHdhbnRzIHVzIHRvIGtl ZXAgYWxsIGlubGluZSBmdW5jdGlvbnMsIHRoZW4gbWFyawogCSB0aGlzIGZ1 bmN0aW9uIGFzIG5lZWRlZCBzbyB0aGF0IGZpbmlzaF9maWxlIHdpbGwgbWFr ZSBzdXJlIHRvCiAJIG91dHB1dCBpdCBsYXRlci4gIFNpbWlsYXJseSwgYWxs IGRsbGV4cG9ydCdkIGZ1bmN0aW9ucyBtdXN0Ci0JIGJlIGVtaXR0ZWQ7IHRo ZXJlIG1heSBiZSBjYWxsZXJzIGluIG90aGVyIERMTHMuICAqLwotICAgICAg aWYgKChmbGFnX2tlZXBfaW5saW5lX2Z1bmN0aW9ucworCSBiZSBlbWl0dGVk OyB0aGVyZSBtYXkgYmUgY2FsbGVycyBpbiBvdGhlciBETExzLgorCSBBbHNv LCBtYXJrIHRoaXMgZnVuY3Rpb24gYXMgbmVlZGVkIGlmIGl0IGlzIG1hcmtl ZCBpbmxpbmUgYnV0CisJIGlzIGEgbXVsdGktdmVyc2lvbmVkIGZ1bmN0aW9u LiAgKi8KKyAgICAgIGlmICgoKGZsYWdfa2VlcF9pbmxpbmVfZnVuY3Rpb25z CisJICAgIHx8IERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChmbikpCiAJICAg JiYgREVDTF9ERUNMQVJFRF9JTkxJTkVfUCAoZm4pCiAJICAgJiYgIURFQ0xf UkVBTExZX0VYVEVSTiAoZm4pKQogCSAgfHwgKGZsYWdfa2VlcF9pbmxpbmVf ZGxsZXhwb3J0CkluZGV4OiBnY2MvY3AvZGVjbDIuYwo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLSBnY2MvY3AvZGVjbDIuYwkocmV2aXNpb24gMTg3Mzcx KQorKysgZ2NjL2NwL2RlY2wyLmMJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYg KzUzLDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5H My4gIElmIG5vdCBzZWUKICNpbmNsdWRlICJzcGxheS10cmVlLmgiCiAjaW5j bHVkZSAibGFuZ2hvb2tzLmgiCiAjaW5jbHVkZSAiYy1mYW1pbHkvYy1hZGEt c3BlYy5oIgorI2luY2x1ZGUgIm11bHRpdmVyc2lvbi5oIgogCiBleHRlcm4g Y3BwX3JlYWRlciAqcGFyc2VfaW47CiAKQEAgLTY3Nyw5ICs2NzgsMTMgQEAg Y2hlY2tfY2xhc3NmbiAodHJlZSBjdHlwZSwgdHJlZSBmdW5jdGlvbiwgdHJl ZSB0ZW0KIAkgIGlmIChpc190ZW1wbGF0ZSAhPSAoVFJFRV9DT0RFIChmbmRl Y2wpID09IFRFTVBMQVRFX0RFQ0wpKQogCSAgICBjb250aW51ZTsKIAorCSAg LyogV2hpbGUgZmluZGluZyBhIG1hdGNoLCBzYW1lIHR5cGVzIGFuZCBwYXJh bXMgYXJlIG5vdCBlbm91Z2gKKwkgICAgIGlmIHRoZSBmdW5jdGlvbiBpcyB2 ZXJzaW9uZWQuICBBbHNvIGNoZWNrIHZlcnNpb24gKCJ0YXJnZXQiKQorCSAg ICAgYXR0cmlidXRlcy4gICovCiAJICBpZiAoc2FtZV90eXBlX3AgKFRSRUVf VFlQRSAoVFJFRV9UWVBFIChmdW5jdGlvbikpLAogCQkJICAgVFJFRV9UWVBF IChUUkVFX1RZUEUgKGZuZGVjbCkpKQogCSAgICAgICYmIGNvbXBwYXJtcyAo cDEsIHAyKQorCSAgICAgICYmICFoYXNfZGlmZmVyZW50X3ZlcnNpb25fYXR0 cmlidXRlcyAoZnVuY3Rpb24sIGZuZGVjbCkKIAkgICAgICAmJiAoIWlzX3Rl bXBsYXRlCiAJCSAgfHwgY29tcF90ZW1wbGF0ZV9wYXJtcyAodGVtcGxhdGVf cGFybXMsCiAJCQkJCSAgREVDTF9URU1QTEFURV9QQVJNUyAoZm5kZWNsKSkp CkluZGV4OiBnY2MvY3AvY2FsbC5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIGdjYy9jcC9jYWxsLmMJKHJldmlzaW9uIDE4NzM3MSkKKysrIGdjYy9j cC9jYWxsLmMJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAgYWxv bmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBz ZWUKICNpbmNsdWRlICJsYW5naG9va3MuaCIKICNpbmNsdWRlICJjLWZhbWls eS9jLW9iamMuaCIKICNpbmNsdWRlICJ0aW1ldmFyLmgiCisjaW5jbHVkZSAi bXVsdGl2ZXJzaW9uLmgiCiAKIC8qIFRoZSB2YXJpb3VzIGtpbmRzIG9mIGNv bnZlcnNpb24uICAqLwogCkBAIC0zOTAzLDYgKzM5MDQsMTYgQEAgYnVpbGRf bmV3X2Z1bmN0aW9uX2NhbGwgKHRyZWUgZm4sIFZFQyh0cmVlLGdjKSAqKmEK ICAgICB7CiAgICAgICBpZiAoY29tcGxhaW4gJiB0Zl9lcnJvcikKIAl7CisJ ICAvKiBJZiB0aGUgY2FsbCBpcyB0byBhIG11bHRpdmVyc2lvbmVkIGZ1bmN0 aW9uIHdpdGhvdXQKKwkgICAgIGEgZGVmYXVsdCB2ZXJzaW9uLCBvdmVybG9h ZCByZXNvbHV0aW9uIHdpbGwgZmFpbC4gICovCisJICBpZiAoY2FuZGlkYXRl cworCSAgICAgICYmIFRSRUVfQ09ERSAoY2FuZGlkYXRlcy0+Zm4pID09IEZV TkNUSU9OX0RFQ0wKKwkgICAgICAmJiBERUNMX0ZVTkNUSU9OX1ZFUlNJT05F RCAoY2FuZGlkYXRlcy0+Zm4pKQorCSAgICBlcnJvcl9hdCAobG9jYXRpb25f b2YgKERFQ0xfTkFNRSAoT1ZMX0NVUlJFTlQgKGZuKSkpLAorCQkgICAgICAi Q2FsbCB0byBtdWx0aXZlcnNpb25lZCBmdW5jdGlvbiAlPCVEKCVBKSU+IHdp dGgiCisJCSAgICAgICIgbm8gZGVmYXVsdCB2ZXJzaW9uIiwgREVDTF9OQU1F IChPVkxfQ1VSUkVOVCAoZm4pKSwKKwkJICAgICAgYnVpbGRfdHJlZV9saXN0 X3ZlYyAoKmFyZ3MpKTsKKwogCSAgaWYgKCFhbnlfdmlhYmxlX3AgJiYgY2Fu ZGlkYXRlcyAmJiAhIGNhbmRpZGF0ZXMtPm5leHQKIAkgICAgICAmJiAoVFJF RV9DT0RFIChjYW5kaWRhdGVzLT5mbikgPT0gRlVOQ1RJT05fREVDTCkpCiAJ ICAgIHJldHVybiBjcF9idWlsZF9mdW5jdGlvbl9jYWxsX3ZlYyAoY2FuZGlk YXRlcy0+Zm4sIGFyZ3MsIGNvbXBsYWluKTsKQEAgLTY4MjQsNiArNjgzNSwx OSBAQCBidWlsZF9vdmVyX2NhbGwgKHN0cnVjdCB6X2NhbmRpZGF0ZSAqY2Fu ZCwgaW50IGZsYQogICBpZiAoIWFscmVhZHlfdXNlZCkKICAgICBtYXJrX3Vz ZWQgKGZuKTsKIAorICAvKiBGb3IgYSBjYWxsIHRvIGEgbXVsdGktdmVyc2lv bmVkIGZ1bmN0aW9uLCB0aGUgY2FsbCBzaG91bGQgYWN0dWFsbHkgYmUgdG8K KyAgICAgdGhlIGRpc3BhdGNoZXIuICAqLworICBpZiAoREVDTF9GVU5DVElP Tl9WRVJTSU9ORUQgKGZuKQorICAgICAgJiYgaXNfZGVmYXVsdF9mdW5jdGlv biAoZm4pKQorICAgIHsKKyAgICAgIHRyZWUgaWZ1bmNfZGVjbDsKKyAgICAg IGlmdW5jX2RlY2wgPSBnZXRfaWZ1bmNfZm9yX3ZlcnNpb24gKGZuKTsKKyAg ICAgIHJldHJvZml0X2xhbmdfZGVjbCAoaWZ1bmNfZGVjbCk7CisgICAgICBn Y2NfYXNzZXJ0IChpZnVuY19kZWNsICE9IE5VTEwpOworICAgICAgcmV0dXJu IGJ1aWxkX2NhbGxfZXhwcl9sb2NfYXJyYXkgKFVOS05PV05fTE9DQVRJT04s IGlmdW5jX2RlY2wsCisJCQkJCW5hcmdzLCBhcmdhcnJheSk7CisgICAgfQor CiAgIGlmIChERUNMX1ZJTkRFWCAoZm4pICYmIChmbGFncyAmIExPT0tVUF9O T05WSVJUVUFMKSA9PSAwKQogICAgIHsKICAgICAgIHRyZWUgdDsKQEAgLTgw ODEsNiArODEwNSw2MCBAQCBqb3VzdCAoc3RydWN0IHpfY2FuZGlkYXRlICpj YW5kMSwgc3RydWN0IHpfY2FuZGlkYQogICBzaXplX3QgaTsKICAgc2l6ZV90 IGxlbjsKIAorICAvKiBGb3IgQ2FuZGlkYXRlcyBvZiBhIG11bHRpLXZlcnNp b25lZCBmdW5jdGlvbiwgZmlyc3QgY2hlY2sgaWYgdGhlCisgICAgIHRhcmdl dCBmbGFncyBvZiB0aGUgY2FsbGVyIG1hdGNoIGFueSBvZiB0aGUgY2FuZGlk YXRlcy4gSWYgc28sCisgICAgIHRoZSBjYWxsZXIgY2FuIGRpcmVjdGx5IGNh bGwgdGhpcyBjYW5kaWRhdGUgb3RoZXJ3aXNlIHRoZSBvbmUgbWFya2VkCisg ICAgIGRlZmF1bHQgd2lucy4gIFRoaXMgaXMgYmVjYXVzZSB0aGUgZGVmYXVs dCBkZWNsIGlzIHVzZWQgYXMga2V5IHRvCisgICAgIGFnZ3JlZ2F0ZSBhbGwg dGhlIG90aGVyIHZlcnNpb25zIHByb3ZpZGVkIGZvciBpdCBpbiBtdWx0aXZl cnNpb24uYy4KKyAgICAgV2hlbiBnZW5lcmF0aW5nIHRoZSBhY3R1YWwgY2Fs bCwgdGhlIGFwcHJvcHJpYXRlIGRpc3BhdGNoZXIgaXMgY3JlYXRlZAorICAg ICB0byBjYWxsIHRoZSByaWdodCBmdW5jdGlvbiB2ZXJzaW9uIGF0IHJ1bi10 aW1lLiAgKi8KKworICBpZiAoKFRSRUVfQ09ERSAoY2FuZDEtPmZuKSA9PSBG VU5DVElPTl9ERUNMCisgICAgICAgJiYgREVDTF9GVU5DVElPTl9WRVJTSU9O RUQgKGNhbmQxLT5mbikpCisgICAgICB8fChUUkVFX0NPREUgKGNhbmQyLT5m bikgPT0gRlVOQ1RJT05fREVDTAorCSAmJiBERUNMX0ZVTkNUSU9OX1ZFUlNJ T05FRCAoY2FuZDItPmZuKSkpCisgICAgeworICAgICAgLyogQm90aCBmdW5j dGlvbnMgbXVzdCBiZSBtYXJrZWQgdmVyc2lvbmVkLiAgKi8KKyAgICAgIGdj Y19hc3NlcnQgKERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChjYW5kMS0+Zm4p CisJCSAgJiYgREVDTF9GVU5DVElPTl9WRVJTSU9ORUQgKGNhbmQyLT5mbikp OworCisgICAgICAvKiBUcnkgdG8gc2VlIGlmIGEgZGlyZWN0IGNhbGwgY2Fu IGJlIG1hZGUgdG8gYSB2ZXJzaW9uLiAgVGhpcyBpcworCSBwb3NzaWJsZSBp ZiB0aGUgY2FsbGVyIGFuZCBjYWxsZWUgaGF2ZSB0aGUgc2FtZSB0YXJnZXQg ZmxhZ3MuCisJIElmIGNhbmQtPmZuIGlzIG1hcmtlZCB3aXRoIHRhcmdldCBh dHRyaWJ1dGVzLCAgY2hlY2sgaWYgdGhlCisJIHRhcmdldCBhcHByb3ZlcyBp bmxpbmluZyB0aGlzIGludG8gdGhlIGNhbGxlci4gIElmIHNvLCB0aGlzIGlz CisJIHRoZSB2ZXJzaW9uIHdlIHdhbnQuICAqLworCisgICAgICBpZiAoaXNf dGFyZ2V0X2F0dHJpYnV0ZV9zZXQgKGNhbmQxLT5mbikKKwkgICYmIHRhcmdl dG0udGFyZ2V0X29wdGlvbi5jYW5faW5saW5lX3AgKGN1cnJlbnRfZnVuY3Rp b25fZGVjbCwKKwkJCQkJCSBjYW5kMS0+Zm4pKQorCXJldHVybiAxOworCisg ICAgICBpZiAoaXNfdGFyZ2V0X2F0dHJpYnV0ZV9zZXQgKGNhbmQyLT5mbikK KwkgICYmIHRhcmdldG0udGFyZ2V0X29wdGlvbi5jYW5faW5saW5lX3AgKGN1 cnJlbnRfZnVuY3Rpb25fZGVjbCwKKwkJCQkJCSBjYW5kMi0+Zm4pKQorCXJl dHVybiAtMTsKKworICAgICAgLyogQSBkaXJlY3QgY2FsbCB0byBhIHZlcnNp b24gaXMgbm90IHBvc3NpYmxlLCBzbyBmaW5kIHRoZSBkZWZhdWx0CisJIGZ1 bmN0aW9uIGFuZCByZXR1cm4gaXQuICBUaGlzIHdpbGwgbGF0ZXIgYmUgY29u dmVydGVkIHRvIGRpc3BhdGNoCisJIHRoZSByaWdodCB2ZXJzaW9uIGF0IHJ1 biB0aW1lLiAgKi8KKworICAgICAgaWYgKGlzX2RlZmF1bHRfZnVuY3Rpb24g KGNhbmQxLT5mbikpCisJeworICAgICAgICAgIG1hcmtfdXNlZCAoY2FuZDIt PmZuKTsKKwkgIHJldHVybiAxOworCX0KKworICAgICAgaWYgKGlzX2RlZmF1 bHRfZnVuY3Rpb24gKGNhbmQyLT5mbikpCisJeworICAgICAgICAgIG1hcmtf dXNlZCAoY2FuZDEtPmZuKTsKKwkgIHJldHVybiAtMTsKKwl9CisKKyAgICAg IC8qIElmIGEgZGVmYXVsdCBmdW5jdGlvbiBpcyBhYnNlbnQsIHRoaXMgd2ls bCBuZXZlciBnZXQgcmVzb2x2ZWQgbGVhZGluZworCSB0byBhbiBhbWJpZ3Vv dXMgY2FsbCBlcnJvci4gICovCisgICAgICByZXR1cm4gMDsKKyAgICB9CisK ICAgLyogQ2FuZGlkYXRlcyB0aGF0IGludm9sdmUgYmFkIGNvbnZlcnNpb25z IGFyZSBhbHdheXMgd29yc2UgdGhhbiB0aG9zZQogICAgICB0aGF0IGRvbid0 LiAgKi8KICAgaWYgKGNhbmQxLT52aWFibGUgPiBjYW5kMi0+dmlhYmxlKQpJ bmRleDogZ2NjL3RpbWV2YXIuZGVmCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIGdjYy90aW1ldmFyLmRlZgkocmV2aXNpb24gMTg3MzcxKQorKysgZ2Nj L3RpbWV2YXIuZGVmCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsNiArMjUzLDcg QEAgREVGVElNRVZBUiAoVFZfVFJFRV9JRkNPTUJJTkUgICAgICAgICwgInRy ZWUgaWYtY28KIERFRlRJTUVWQVIgKFRWX1RSRUVfVU5JTklUICAgICAgICAg ICAsICJ1bmluaXQgdmFyIGFuYWx5c2lzIikKIERFRlRJTUVWQVIgKFRWX1BM VUdJTl9JTklUICAgICAgICAgICAsICJwbHVnaW4gaW5pdGlhbGl6YXRpb24i KQogREVGVElNRVZBUiAoVFZfUExVR0lOX1JVTiAgICAgICAgICAgICwgInBs dWdpbiBleGVjdXRpb24iKQorREVGVElNRVZBUiAoVFZfTVVMVElWRVJTSU9O X0RJU1BBVENIICwgIm11bHRpdmVyc2lvbiBkaXNwYXRjaCIpCiAKIC8qIEV2 ZXJ5dGhpbmcgZWxzZSBpbiByZXN0X29mX2NvbXBpbGF0aW9uIG5vdCBpbmNs dWRlZCBhYm92ZS4gICovCiBERUZUSU1FVkFSIChUVl9FQVJMWV9MT0NBTAkg ICAgICwgImVhcmx5IGxvY2FsIHBhc3NlcyIpCkluZGV4OiBnY2MvTWFrZWZp bGUuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL01ha2VmaWxl LmluCShyZXZpc2lvbiAxODczNzEpCisrKyBnY2MvTWFrZWZpbGUuaW4JKHdv cmtpbmcgY29weSkKQEAgLTEyOTcsNiArMTI5Nyw3IEBAIE9CSlMgPSBcCiAJ bWNmLm8gXAogCW1vZGUtc3dpdGNoaW5nLm8gXAogCW1vZHVsby1zY2hlZC5v IFwKKwltdWx0aXZlcnNpb24ubyBcCiAJb21lZ2EubyBcCiAJb21wLWxvdy5v IFwKIAlvcHRhYnMubyBcCkBAIC0zMDQyLDYgKzMwNDMsMTEgQEAgcmVlLm8g OiByZWUuYyAkKENPTkZJR19IKSAkKFNZU1RFTV9IKSBjb3JldHlwZXMuaAog ICAgJChERl9IKSAkKFRJTUVWQVJfSCkgdHJlZS1wYXNzLmggJChSRUNPR19I KSAkKEVYUFJfSCkgXAogICAgJChSRUdTX0gpICQoVFJFRV9IKSAkKFRNX1Bf SCkgaW5zbi1jb25maWcuaCAkKElOU05fQVRUUl9IKSAkKERJQUdOT1NUSUNf Q09SRV9IKSBcCiAgICAkKFRBUkdFVF9IKSAkKE9QVEFCU19IKSBpbnNuLWNv ZGVzLmggcnRsaG9va3MtZGVmLmggJChQQVJBTVNfSCkgJChDR1JBUEhfSCkK K211bHRpdmVyc2lvbi5vIDogbXVsdGl2ZXJzaW9uLmMgJChDT05GSUdfSCkg JChTWVNURU1fSCkgY29yZXR5cGVzLmggJChUTV9IKSBcCisgICAkKFRSRUVf SCkgbGFuZ2hvb2tzLmggJChUUkVFX0lOTElORV9IKSAkKEZMQUdTX0gpICQo Q0dSQVBIX0gpIGludGwuaCBcCisgICAkKERJQUdOT1NUSUNfSCkgJChGSUJI RUFQX0gpICQoUEFSQU1TX0gpICQoVElNRVZBUl9IKSB0cmVlLXBhc3MuaCBc CisgICAkKEhBU0hUQUJfSCkgJChDT1ZFUkFHRV9IKSAkKEdHQ19IKSAkKFRS RUVfRkxPV19IKSAkKFJUTF9IKSAkKElQQV9QUk9QX0gpIFwKKyAgICQoQkFT SUNfQkxPQ0tfSCkgJChUT1BMRVZfSCkgJChUUkVFX0RVTVBfSCkgaXBhLWlu bGluZS5oCiBjcHJvcC5vIDogY3Byb3AuYyAkKENPTkZJR19IKSAkKFNZU1RF TV9IKSBjb3JldHlwZXMuaCAkKFRNX0gpICQoUlRMX0gpIFwKICAgICQoUkVH U19IKSBoYXJkLXJlZy1zZXQuaCAkKEZMQUdTX0gpIGluc24tY29uZmlnLmgg JChHR0NfSCkgXAogICAgJChSRUNPR19IKSAkKEVYUFJfSCkgJChCQVNJQ19C TE9DS19IKSAkKEZVTkNUSU9OX0gpIG91dHB1dC5oIHRvcGxldi5oICQoRElB R05PU1RJQ19DT1JFX0gpIFwKSW5kZXg6IGdjYy9wYXNzZXMuYwo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0tLSBnY2MvcGFzc2VzLmMJKHJldmlzaW9uIDE4 NzM3MSkKKysrIGdjYy9wYXNzZXMuYwkod29ya2luZyBjb3B5KQpAQCAtMTI5 Myw2ICsxMjkzLDcgQEAgaW5pdF9vcHRpbWl6YXRpb25fcGFzc2VzICh2b2lk KQogICBORVhUX1BBU1MgKHBhc3NfYnVpbGRfY2ZnKTsKICAgTkVYVF9QQVNT IChwYXNzX3dhcm5fZnVuY3Rpb25fcmV0dXJuKTsKICAgTkVYVF9QQVNTIChw YXNzX2J1aWxkX2NncmFwaF9lZGdlcyk7CisgIE5FWFRfUEFTUyAocGFzc19k aXNwYXRjaF92ZXJzaW9ucyk7CiAgICpwID0gTlVMTDsKIAogICAvKiBJbnRl cnByb2NlZHVyYWwgb3B0aW1pemF0aW9uIHBhc3Nlcy4gICovCkluZGV4OiBn Y2MvY3AvbWFuZ2xlLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2Nj L2NwL21hbmdsZS5jCShyZXZpc2lvbiAxODczNzEpCisrKyBnY2MvY3AvbWFu Z2xlLmMJKHdvcmtpbmcgY29weSkKQEAgLTEyNDUsNyArMTI0NSwxMiBAQCB3 cml0ZV91bnF1YWxpZmllZF9uYW1lIChjb25zdCB0cmVlIGRlY2wpCiAgICAg ewogICAgICAgTUFOR0xFX1RSQUNFX1RSRUUgKCJsb2NhbC1zb3VyY2UtbmFt ZSIsIGRlY2wpOwogICAgICAgd3JpdGVfY2hhciAoJ0wnKTsKLSAgICAgIHdy aXRlX3NvdXJjZV9uYW1lIChERUNMX05BTUUgKGRlY2wpKTsKKyAgICAgIGlm IChUUkVFX0NPREUgKGRlY2wpID09IEZVTkNUSU9OX0RFQ0wKKwkgICYmIERF Q0xfRlVOQ1RJT05fVkVSU0lPTkVEIChkZWNsKQorCSAgJiYgREVDTF9BU1NF TUJMRVJfTkFNRV9TRVRfUCAoZGVjbCkpCisJd3JpdGVfc291cmNlX25hbWUg KERFQ0xfQVNTRU1CTEVSX05BTUUgKGRlY2wpKTsKKyAgICAgIGVsc2UKKwl3 cml0ZV9zb3VyY2VfbmFtZSAoREVDTF9OQU1FIChkZWNsKSk7CiAgICAgICAv KiBUaGUgZGVmYXVsdCBkaXNjcmltaW5hdG9yIGlzIDEsIGFuZCB0aGF0J3Mg YWxsIHdlIGV2ZXIgdXNlLAogCSBzbyB0aGVyZSdzIG5vIGNvZGUgdG8gb3V0 cHV0IG9uZSBoZXJlLiAgKi8KICAgICB9CkBAIC0xMjYwLDcgKzEyNjUsMTQg QEAgd3JpdGVfdW5xdWFsaWZpZWRfbmFtZSAoY29uc3QgdHJlZSBkZWNsKQog ICAgICAgICAgICAgICAgJiYgTEFNQkRBX1RZUEVfUCAodHlwZSkpCiAgICAg ICAgIHdyaXRlX2Nsb3N1cmVfdHlwZV9uYW1lICh0eXBlKTsKICAgICAgIGVs c2UKLSAgICAgICAgd3JpdGVfc291cmNlX25hbWUgKERFQ0xfTkFNRSAoZGVj bCkpOworCXsKKwkgIGlmIChUUkVFX0NPREUgKGRlY2wpID09IEZVTkNUSU9O X0RFQ0wKKwkgICAgICAmJiBERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAoZGVj bCkKKwkgICAgICAmJiBERUNMX0FTU0VNQkxFUl9OQU1FX1NFVF9QIChkZWNs KSkKKwkgICAgd3JpdGVfc291cmNlX25hbWUgKERFQ0xfQVNTRU1CTEVSX05B TUUgKGRlY2wpKTsKKwkgIGVsc2UKKwkgICAgd3JpdGVfc291cmNlX25hbWUg KERFQ0xfTkFNRSAoZGVjbCkpOworCX0KICAgICB9CiB9CiAKSW5kZXg6IGdj Yy9jb25maWcvaTM4Ni9pMzg2LmMKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gZ2NjL2NvbmZpZy9pMzg2L2kzODYuYwkocmV2aXNpb24gMTg3MzcxKQor KysgZ2NjL2NvbmZpZy9pMzg2L2kzODYuYwkod29ya2luZyBjb3B5KQpAQCAt Mjc2NjQsNiArMjc2NjQsNDM4IEBAIGl4ODZfaW5pdF9tbXhfc3NlX2J1aWx0 aW5zICh2b2lkKQogICAgIH0KIH0KIAorCisvKiBUaGlzIGFkZHMgYSBjb25k aXRpb24gdG8gdGhlIGJhc2ljX2Jsb2NrIE5FV19CQiBpbiBmdW5jdGlvbiBG VU5DVElPTl9ERUNMCisgICB0byByZXR1cm4gYSBwb2ludGVyIHRvIFZFUlNJ T05fREVDTCBpZiB0aGUgb3V0Y29tZSBvZiB0aGUgZXhwcmVzc2lvbgorICAg Zm9ybWVkIGJ5IFBSRURJQ0FURV9DSEFJTiBpcyB0cnVlLiAgVGhpcyBmdW5j dGlvbiB3aWxsIGJlIGNhbGxlZCBkdXJpbmcKKyAgIHZlcnNpb24gZGlzcGF0 Y2ggdG8gZGVjaWRlIHdoaWNoIGZ1bmN0aW9uIHZlcnNpb24gdG8gZXhlY3V0 ZS4gIEl0IHJldHVybnMKKyAgIHRoZSBiYXNpYyBibG9jayBhdCB0aGUgZW5k IHRvIHdoaWNoIG1vcmUgY29uZGl0aW9ucyBjYW4gYmUgYWRkZWQuICAqLwor CitzdGF0aWMgYmFzaWNfYmxvY2sKK2FkZF9jb25kaXRpb25fdG9fYmIgKHRy ZWUgZnVuY3Rpb25fZGVjbCwgdHJlZSB2ZXJzaW9uX2RlY2wsCisJCSAgICAg dHJlZSBwcmVkaWNhdGVfY2hhaW4sIGJhc2ljX2Jsb2NrIG5ld19iYikKK3sK KyAgZ2ltcGxlIHJldHVybl9zdG10OworICB0cmVlIGNvbnZlcnRfZXhwciwg cmVzdWx0X3ZhcjsKKyAgZ2ltcGxlIGNvbnZlcnRfc3RtdDsKKyAgZ2ltcGxl IGNhbGxfY29uZF9zdG10OworICBnaW1wbGUgaWZfZWxzZV9zdG10OworCisg IGJhc2ljX2Jsb2NrIGJiMSwgYmIyLCBiYjM7CisgIGVkZ2UgZTEyLCBlMjM7 CisKKyAgdHJlZSBjb25kX3ZhciwgYW5kX2V4cHJfdmFyID0gTlVMTF9UUkVF OworICBnaW1wbGVfc2VxIGdzZXE7CisKKyAgdHJlZSBvbGRfY3VycmVudF9m dW5jdGlvbl9kZWNsOworICB0cmVlIHByZWRpY2F0ZV9kZWNsLCBwcmVkaWNh dGVfYXJnOworCisgIG9sZF9jdXJyZW50X2Z1bmN0aW9uX2RlY2wgPSBjdXJy ZW50X2Z1bmN0aW9uX2RlY2w7CisgIHB1c2hfY2Z1biAoREVDTF9TVFJVQ1Rf RlVOQ1RJT04gKGZ1bmN0aW9uX2RlY2wpKTsKKyAgY3VycmVudF9mdW5jdGlv bl9kZWNsID0gZnVuY3Rpb25fZGVjbDsKKworICBnY2NfYXNzZXJ0IChuZXdf YmIgIT0gTlVMTCk7CisgIGdzZXEgPSBiYl9zZXEgKG5ld19iYik7CisKKwor ICBjb252ZXJ0X2V4cHIgPSBidWlsZDEgKENPTlZFUlRfRVhQUiwgcHRyX3R5 cGVfbm9kZSwKKwkgICAgIAkJIGJ1aWxkX2ZvbGRfYWRkcl9leHByICh2ZXJz aW9uX2RlY2wpKTsKKyAgcmVzdWx0X3ZhciA9IGNyZWF0ZV90bXBfdmFyIChw dHJfdHlwZV9ub2RlLCBOVUxMKTsKKyAgY29udmVydF9zdG10ID0gZ2ltcGxl X2J1aWxkX2Fzc2lnbiAocmVzdWx0X3ZhciwgY29udmVydF9leHByKTsgCisg IHJldHVybl9zdG10ID0gZ2ltcGxlX2J1aWxkX3JldHVybiAocmVzdWx0X3Zh cik7CisKKyAgaWYgKHByZWRpY2F0ZV9jaGFpbiA9PSBOVUxMX1RSRUUpCisg ICAgeworICAgICAgZ2ltcGxlX3NlcV9hZGRfc3RtdCAoJmdzZXEsIGNvbnZl cnRfc3RtdCk7CisgICAgICBnaW1wbGVfc2VxX2FkZF9zdG10ICgmZ3NlcSwg cmV0dXJuX3N0bXQpOworICAgICAgc2V0X2JiX3NlcSAobmV3X2JiLCBnc2Vx KTsKKyAgICAgIGdpbXBsZV9zZXRfYmIgKGNvbnZlcnRfc3RtdCwgbmV3X2Ji KTsKKyAgICAgIGdpbXBsZV9zZXRfYmIgKHJldHVybl9zdG10LCBuZXdfYmIp OworICAgICAgcG9wX2NmdW4gKCk7CisgICAgICBjdXJyZW50X2Z1bmN0aW9u X2RlY2wgPSBvbGRfY3VycmVudF9mdW5jdGlvbl9kZWNsOworICAgICAgcmV0 dXJuIG5ld19iYjsKKyAgICB9CisKKyAgd2hpbGUgKHByZWRpY2F0ZV9jaGFp biAhPSBOVUxMKQorICAgIHsKKyAgICAgIGNvbmRfdmFyID0gY3JlYXRlX3Rt cF92YXIgKGludGVnZXJfdHlwZV9ub2RlLCBOVUxMKTsKKyAgICAgIHByZWRp Y2F0ZV9kZWNsID0gVFJFRV9QVVJQT1NFIChwcmVkaWNhdGVfY2hhaW4pOwor ICAgICAgcHJlZGljYXRlX2FyZyA9IFRSRUVfVkFMVUUgKHByZWRpY2F0ZV9j aGFpbik7CisgICAgICBjYWxsX2NvbmRfc3RtdCA9IGdpbXBsZV9idWlsZF9j YWxsIChwcmVkaWNhdGVfZGVjbCwgMSwgcHJlZGljYXRlX2FyZyk7CisgICAg ICBnaW1wbGVfY2FsbF9zZXRfbGhzIChjYWxsX2NvbmRfc3RtdCwgY29uZF92 YXIpOworCisgICAgICBnaW1wbGVfc2V0X2Jsb2NrIChjYWxsX2NvbmRfc3Rt dCwgREVDTF9JTklUSUFMIChmdW5jdGlvbl9kZWNsKSk7CisgICAgICBnaW1w bGVfc2V0X2JiIChjYWxsX2NvbmRfc3RtdCwgbmV3X2JiKTsKKyAgICAgIGdp bXBsZV9zZXFfYWRkX3N0bXQgKCZnc2VxLCBjYWxsX2NvbmRfc3RtdCk7CisK KyAgICAgIHByZWRpY2F0ZV9jaGFpbiA9IFRSRUVfQ0hBSU4gKHByZWRpY2F0 ZV9jaGFpbik7CisgICAgICAKKyAgICAgIGlmIChhbmRfZXhwcl92YXIgPT0g TlVMTCkKKyAgICAgICAgYW5kX2V4cHJfdmFyID0gY29uZF92YXI7CisgICAg ICBlbHNlCisJeworCSAgZ2ltcGxlIGFzc2lnbl9zdG10OworCSAgLyogVXNl IE1JTl9FWFBSIHRvIGNoZWNrIGlmIGFueSBpbnRlZ2VyIGlzIHplcm8/Lgor CSAgICAgYW5kX2V4cHJfdmFyID0gbWluX2V4cHIgPGNvbmRfdmFyLCBhbmRf ZXhwcl92YXI+ICAqLworCSAgYXNzaWduX3N0bXQgPSBnaW1wbGVfYnVpbGRf YXNzaWduIChhbmRfZXhwcl92YXIsCisJCQkgIGJ1aWxkMiAoTUlOX0VYUFIs IGludGVnZXJfdHlwZV9ub2RlLAorCQkJCSAgY29uZF92YXIsIGFuZF9leHBy X3ZhcikpOworCisJICBnaW1wbGVfc2V0X2Jsb2NrIChhc3NpZ25fc3RtdCwg REVDTF9JTklUSUFMIChmdW5jdGlvbl9kZWNsKSk7CisJICBnaW1wbGVfc2V0 X2JiIChhc3NpZ25fc3RtdCwgbmV3X2JiKTsKKwkgIGdpbXBsZV9zZXFfYWRk X3N0bXQgKCZnc2VxLCBhc3NpZ25fc3RtdCk7CisJfQorICAgIH0KKworICBp Zl9lbHNlX3N0bXQgPSBnaW1wbGVfYnVpbGRfY29uZCAoR1RfRVhQUiwgYW5k X2V4cHJfdmFyLAorCSAgCQkgICAgICAgICAgICBpbnRlZ2VyX3plcm9fbm9k ZSwKKwkJCQkgICAgTlVMTF9UUkVFLCBOVUxMX1RSRUUpOworICBnaW1wbGVf c2V0X2Jsb2NrIChpZl9lbHNlX3N0bXQsIERFQ0xfSU5JVElBTCAoZnVuY3Rp b25fZGVjbCkpOworICBnaW1wbGVfc2V0X2JiIChpZl9lbHNlX3N0bXQsIG5l d19iYik7CisgIGdpbXBsZV9zZXFfYWRkX3N0bXQgKCZnc2VxLCBpZl9lbHNl X3N0bXQpOworCisgIGdpbXBsZV9zZXFfYWRkX3N0bXQgKCZnc2VxLCBjb252 ZXJ0X3N0bXQpOworICBnaW1wbGVfc2VxX2FkZF9zdG10ICgmZ3NlcSwgcmV0 dXJuX3N0bXQpOworICBzZXRfYmJfc2VxIChuZXdfYmIsIGdzZXEpOworCisg IGJiMSA9IG5ld19iYjsKKyAgZTEyID0gc3BsaXRfYmxvY2sgKGJiMSwgaWZf ZWxzZV9zdG10KTsKKyAgYmIyID0gZTEyLT5kZXN0OworICBlMTItPmZsYWdz ICY9IH5FREdFX0ZBTExUSFJVOworICBlMTItPmZsYWdzIHw9IEVER0VfVFJV RV9WQUxVRTsKKworICBlMjMgPSBzcGxpdF9ibG9jayAoYmIyLCByZXR1cm5f c3RtdCk7CisKKyAgZ2ltcGxlX3NldF9iYiAoY29udmVydF9zdG10LCBiYjIp OworICBnaW1wbGVfc2V0X2JiIChyZXR1cm5fc3RtdCwgYmIyKTsKKworICBi YjMgPSBlMjMtPmRlc3Q7CisgIG1ha2VfZWRnZSAoYmIxLCBiYjMsIEVER0Vf RkFMU0VfVkFMVUUpOyAKKworICByZW1vdmVfZWRnZSAoZTIzKTsKKyAgbWFr ZV9lZGdlIChiYjIsIEVYSVRfQkxPQ0tfUFRSLCAwKTsKKworICByZWJ1aWxk X2NncmFwaF9lZGdlcyAoKTsKKworICBwb3BfY2Z1biAoKTsKKyAgY3VycmVu dF9mdW5jdGlvbl9kZWNsID0gb2xkX2N1cnJlbnRfZnVuY3Rpb25fZGVjbDsK KworICByZXR1cm4gYmIzOworfQorCisvKiBUaGlzIHBhcnNlcyB0aGUgYXR0 cmlidXRlIGFyZ3VtZW50cyB0byB0YXJnZXQgaW4gREVDTCBhbmQgZGV0ZXJt aW5lcworICAgdGhlIHJpZ2h0IGJ1aWx0aW4gdG8gdXNlIHRvIG1hdGNoIHRo ZSBwbGF0Zm9ybSBzcGVjaWZpY2F0aW9uLgorICAgRm9yIG5vdywgb25seSBv bmUgdGFyZ2V0IGFyZ3VtZW50ICgiYXJjaD0iIG9yICI8LW0+eHh4IikgaXMg YWxsb3dlZC4gICovCisKK3N0YXRpYyB0cmVlIAorZ2V0X2J1aWx0aW5fY29k ZV9mb3JfdmVyc2lvbiAodHJlZSBkZWNsLCB1bnNpZ25lZCBpbnQgKnByaW9y aXR5KQoreworICB0cmVlIGF0dHJzOworICBzdHJ1Y3QgY2xfdGFyZ2V0X29w dGlvbiBjdXJfdGFyZ2V0OworICB0cmVlIHRhcmdldF9ub2RlOworICBzdHJ1 Y3QgY2xfdGFyZ2V0X29wdGlvbiAqbmV3X3RhcmdldDsKKyAgY29uc3QgY2hh ciAqYXJnX3N0ciA9IE5VTEw7CisgIGNvbnN0IGNoYXIgKmF0dHJzX3N0ciA9 IE5VTEw7CisgIGNoYXIgKnRva19zdHIgPSBOVUxMOworICBjaGFyICp0b2tl bjsKKworICAvKiBQcmlvcml0eSBvZiBpMzg2IGZlYXR1cmVzLCBncmVhdGVy IHZhbHVlIGlzIGhpZ2hlciBwcmlvcml0eS4gICBUaGlzIGlzCisgICAgIHVz ZWQgdG8gZGVjaWRlIHRoZSBvcmRlciBpbiB3aGljaCBmdW5jdGlvbiBkaXNw YXRjaCBtdXN0IGhhcHBlbi4gIEZvcgorICAgICBpbnN0YW5jZSwgYSB2ZXJz aW9uIHNwZWNpYWxpemVkIGZvciBTU0U0LjIgc2hvdWxkIGJlIGNoZWNrZWQg Zm9yIGRpc3BhdGNoCisgICAgIGJlZm9yZSBhIHZlcnNpb24gZm9yIFNTRTMs IGFzIFNTRTQuMiBpbXBsaWVzIFNTRTMuICAqLworICBlbnVtIGZlYXR1cmVf cHJpb3JpdHkKKyAgeworICAgIFBfWkVSTyA9IDAsCisgICAgUF9NTVgsCisg ICAgUF9TU0UsCisgICAgUF9TU0UyLAorICAgIFBfU1NFMywKKyAgICBQX1NT U0UzLAorICAgIFBfUFJPQ19TU1NFMywKKyAgICBQX1NTRTRfYSwKKyAgICBQ X1BST0NfU1NFNF9hLAorICAgIFBfU1NFNF8xLAorICAgIFBfU1NFNF8yLAor ICAgIFBfUFJPQ19TU0U0XzIsCisgICAgUF9QT1BDTlQsCisgICAgUF9BVlgs CisgICAgUF9BVlgyLAorICAgIFBfRk1BLAorICAgIFBfUFJPQ19GTUEKKyAg fTsKKworICAvKiBUaGVzZSBhcmUgdGhlIHRhcmdldCBhdHRyaWJ1dGUgc3Ry aW5ncyBmb3Igd2hpY2ggYSBkaXNwYXRjaGVyIGlzCisgICAgIGF2YWlsYWJs ZSwgZnJvbSBmb2xkX2J1aWx0aW5fY3B1LiAgKi8KKworICBzdGF0aWMgc3Ry dWN0IF9mZWF0dXJlX2xpc3QKKyAgICB7CisgICAgICBjb25zdCBjaGFyICpj b25zdCBuYW1lOworICAgICAgY29uc3QgZW51bSBmZWF0dXJlX3ByaW9yaXR5 IHByaW9yaXR5OworICAgIH0KKyAgY29uc3QgZmVhdHVyZV9saXN0W10gPQor ICAgIHsKKyAgICAgIHsibW14IiwgUF9NTVh9LAorICAgICAgeyJzc2UiLCBQ X1NTRX0sCisgICAgICB7InNzZTIiLCBQX1NTRTJ9LAorICAgICAgeyJzc2Uz IiwgUF9TU0UzfSwKKyAgICAgIHsic3NzZTMiLCBQX1NTU0UzfSwKKyAgICAg IHsic3NlNC4xIiwgUF9TU0U0XzF9LAorICAgICAgeyJzc2U0LjIiLCBQX1NT RTRfMn0sCisgICAgICB7InBvcGNudCIsIFBfUE9QQ05UfSwKKyAgICAgIHsi YXZ4IiwgUF9BVlh9LAorICAgICAgeyJhdngyIiwgUF9BVlgyfQorICAgIH07 CisKKworICBzdGF0aWMgdW5zaWduZWQgaW50IE5VTV9GRUFUVVJFUworICAg ID0gc2l6ZW9mIChmZWF0dXJlX2xpc3QpIC8gc2l6ZW9mIChzdHJ1Y3QgX2Zl YXR1cmVfbGlzdCk7CisKKyAgdW5zaWduZWQgaW50IGk7CisKKyAgdHJlZSBw cmVkaWNhdGVfY2hhaW4gPSBOVUxMX1RSRUU7CisgIHRyZWUgcHJlZGljYXRl X2RlY2wsIHByZWRpY2F0ZV9hcmc7CisKKyAgYXR0cnMgPSBsb29rdXBfYXR0 cmlidXRlICgidGFyZ2V0IiwgREVDTF9BVFRSSUJVVEVTIChkZWNsKSk7Cisg IGdjY19hc3NlcnQgKGF0dHJzICE9IE5VTEwpOworCisgIGF0dHJzID0gVFJF RV9WQUxVRSAoVFJFRV9WQUxVRSAoYXR0cnMpKTsKKworICBnY2NfYXNzZXJ0 IChUUkVFX0NPREUgKGF0dHJzKSA9PSBTVFJJTkdfQ1NUKTsKKyAgYXR0cnNf c3RyID0gVFJFRV9TVFJJTkdfUE9JTlRFUiAoYXR0cnMpOworCisgICpwcmlv cml0eSA9IDA7CisKKyAgLyogSGFuZGxlIGFyY2g9IGlmIHNwZWNpZmllZC4g IEZvciBwcmlvcml0eSwgc2V0IGl0IHRvIGJlIDEgbW9yZSB0aGFuCisgICAg IHRoZSBiZXN0IGluc3RydWN0aW9uIHNldCB0aGUgcHJvY2Vzc29yIGNhbiBo YW5kbGUuICBGb3IgaW5zdGFuY2UsIGlmCisgICAgIHRoZXJlIGlzIGEgdmVy c2lvbiBmb3IgYXRvbSBhbmQgYSB2ZXJzaW9uIGZvciBzc3NlMyAodGhlIGhp Z2hlc3QgSVNBCisgICAgIHByaW9yaXR5IGZvciBhdG9tKSwgdGhlIGF0b20g dmVyc2lvbiBtdXN0IGJlIGNoZWNrZWQgZm9yIGRpc3BhdGNoCisgICAgIGJl Zm9yZSB0aGUgc3NzZTMgdmVyc2lvbi4gKi8KKyAgaWYgKHN0cnN0ciAoYXR0 cnNfc3RyLCAiYXJjaD0iKSAhPSBOVUxMKQorICAgIHsKKyAgICAgIGNsX3Rh cmdldF9vcHRpb25fc2F2ZSAoJmN1cl90YXJnZXQsICZnbG9iYWxfb3B0aW9u cyk7CisgICAgICB0YXJnZXRfbm9kZSA9IGl4ODZfdmFsaWRfdGFyZ2V0X2F0 dHJpYnV0ZV90cmVlIChhdHRycyk7CisgICAgCisgICAgICBnY2NfYXNzZXJ0 ICh0YXJnZXRfbm9kZSk7CisgICAgICBuZXdfdGFyZ2V0ID0gVFJFRV9UQVJH RVRfT1BUSU9OICh0YXJnZXRfbm9kZSk7CisgICAgICBnY2NfYXNzZXJ0IChu ZXdfdGFyZ2V0KTsKKyAgICAgIAorICAgICAgaWYgKG5ld190YXJnZXQtPmFy Y2hfc3BlY2lmaWVkICYmIG5ld190YXJnZXQtPmFyY2ggPiAwKQorCXsKKwkg IHN3aXRjaCAobmV3X3RhcmdldC0+YXJjaCkKKwkgICAgeworCSAgICBjYXNl IFBST0NFU1NPUl9DT1JFMl8zMjoKKwkgICAgY2FzZSBQUk9DRVNTT1JfQ09S RTJfNjQ6CisJICAgICAgYXJnX3N0ciA9ICJjb3JlMiI7CisJICAgICAgKnBy aW9yaXR5ID0gUF9QUk9DX1NTU0UzOworCSAgICAgIGJyZWFrOworCSAgICBj YXNlIFBST0NFU1NPUl9DT1JFSTdfMzI6CisJICAgIGNhc2UgUFJPQ0VTU09S X0NPUkVJN182NDoKKwkgICAgICBhcmdfc3RyID0gImNvcmVpNyI7CisJICAg ICAgKnByaW9yaXR5ID0gUF9QUk9DX1NTRTRfMjsKKwkgICAgICBicmVhazsK KwkgICAgY2FzZSBQUk9DRVNTT1JfQVRPTToKKwkgICAgICBhcmdfc3RyID0g ImF0b20iOworCSAgICAgICpwcmlvcml0eSA9IFBfUFJPQ19TU1NFMzsKKwkg ICAgICBicmVhazsKKwkgICAgY2FzZSBQUk9DRVNTT1JfQU1ERkFNMTA6CisJ ICAgICAgYXJnX3N0ciA9ICJhbWRmYW0xMGgiOworCSAgICAgICpwcmlvcml0 eSA9IFBfUFJPQ19TU0U0X2E7CisJICAgICAgYnJlYWs7CisJICAgIGNhc2Ug UFJPQ0VTU09SX0JEVkVSMToKKwkgICAgICBhcmdfc3RyID0gImJkdmVyMSI7 CisJICAgICAgKnByaW9yaXR5ID0gUF9QUk9DX0ZNQTsKKwkgICAgICBicmVh azsKKwkgICAgY2FzZSBQUk9DRVNTT1JfQkRWRVIyOgorCSAgICAgIGFyZ19z dHIgPSAiYmR2ZXIyIjsKKwkgICAgICAqcHJpb3JpdHkgPSBQX1BST0NfRk1B OworCSAgICAgIGJyZWFrOworCSAgICB9ICAKKwl9ICAgIAorICAgIAorICAg ICAgY2xfdGFyZ2V0X29wdGlvbl9yZXN0b3JlICgmZ2xvYmFsX29wdGlvbnMs ICZjdXJfdGFyZ2V0KTsKKyAgICAgIGlmIChhcmdfc3RyID09IE5VTEwpCisJ eworCSAgZXJyb3JfYXQgKERFQ0xfU09VUkNFX0xPQ0FUSU9OIChkZWNsKSwK KwkgICAgCSJObyBkaXNwYXRjaGVyIGZvdW5kIGZvciB0aGUgdmVyc2lvbmlu ZyBhdHRyaWJ1dGVzIik7CisJICByZXR1cm4gTlVMTDsKKwl9CisgICAgCisg ICAgICBwcmVkaWNhdGVfZGVjbCA9IGl4ODZfYnVpbHRpbnMgWyhpbnQpIElY ODZfQlVJTFRJTl9DUFVfSVNdOworICAgICAgLyogRm9yIGEgQyBzdHJpbmcg bGl0ZXJhbCB0aGUgbGVuZ3RoIGluY2x1ZGVzIHRoZSB0cmFpbGluZyBOVUxM LiAgKi8KKyAgICAgIHByZWRpY2F0ZV9hcmcgPSBidWlsZF9zdHJpbmdfbGl0 ZXJhbCAoc3RybGVuIChhcmdfc3RyKSArIDEsIGFyZ19zdHIpOworICAgICAg cHJlZGljYXRlX2NoYWluID0gdHJlZV9jb25zIChwcmVkaWNhdGVfZGVjbCwg cHJlZGljYXRlX2FyZywKKwkJCQkgICBwcmVkaWNhdGVfY2hhaW4pOworICAg IH0KKworICAvKiBQcm9jZXNzIGZlYXR1cmUgbmFtZS4gICovCisgIHRva19z dHIgPSAgKGNoYXIgKikgeG1hbGxvYyAoc3RybGVuIChhdHRyc19zdHIpICsg MSk7CisgIHN0cmNweSAodG9rX3N0ciwgYXR0cnNfc3RyKTsKKyAgdG9rZW4g PSBzdHJ0b2sgKHRva19zdHIsICIsIik7CisgIHByZWRpY2F0ZV9kZWNsID0g aXg4Nl9idWlsdGlucyBbKGludCkgSVg4Nl9CVUlMVElOX0NQVV9TVVBQT1JU U107CisKKyAgd2hpbGUgKHRva2VuICE9IE5VTEwpCisgICAgeworICAgICAg LyogRG8gbm90IHByb2Nlc3MgImFyY2g9IiAgKi8KKyAgICAgIGlmIChzdHJu Y21wICh0b2tlbiwgImFyY2g9IiwgNSkgPT0gMCkKKwl7CisJICB0b2tlbiA9 IHN0cnRvayAoTlVMTCwgIiwiKTsKKwkgIGNvbnRpbnVlOworCX0KKyAgICAg IGZvciAoaSA9IDA7IGkgPCBOVU1fRkVBVFVSRVM7ICsraSkKKwl7CisJICBp ZiAoc3RyY21wICh0b2tlbiwgZmVhdHVyZV9saXN0W2ldLm5hbWUpID09IDAp CisJICAgIHsKKwkgICAgICBwcmVkaWNhdGVfYXJnID0gYnVpbGRfc3RyaW5n X2xpdGVyYWwgKAorCQkJCXN0cmxlbiAoZmVhdHVyZV9saXN0W2ldLm5hbWUp ICsgMSwKKwkJCQlmZWF0dXJlX2xpc3RbaV0ubmFtZSk7CisJICAgICAgcHJl ZGljYXRlX2NoYWluID0gdHJlZV9jb25zIChwcmVkaWNhdGVfZGVjbCwgcHJl ZGljYXRlX2FyZywKKwkJCQkJICAgcHJlZGljYXRlX2NoYWluKTsKKwkgICAg ICAvKiBGaW5kIHRoZSBtYXhpbXVtIHByaW9yaXR5IGZlYXR1cmUuICAqLwor CSAgICAgIGlmIChmZWF0dXJlX2xpc3RbaV0ucHJpb3JpdHkgPiAqcHJpb3Jp dHkpCisJCSpwcmlvcml0eSA9IGZlYXR1cmVfbGlzdFtpXS5wcmlvcml0eTsK KworCSAgICAgIGJyZWFrOworCSAgICB9CisJfQorICAgICAgaWYgKGkgPT0g TlVNX0ZFQVRVUkVTKQorCXsKKwkgIGVycm9yX2F0IChERUNMX1NPVVJDRV9M T0NBVElPTiAoZGVjbCksCisJCSAgICAiTm8gZGlzcGF0Y2hlciBmb3VuZCBm b3IgJXMiLCB0b2tlbik7CisJICByZXR1cm4gTlVMTDsKKwl9CisgICAgICB0 b2tlbiA9IHN0cnRvayAoTlVMTCwgIiwiKTsKKyAgICB9CisgIGZyZWUgKHRv a19zdHIpOworCisgIGlmIChwcmVkaWNhdGVfY2hhaW4gPT0gTlVMTF9UUkVF KQorICAgIHsKKyAgICAgIGVycm9yX2F0IChERUNMX1NPVVJDRV9MT0NBVElP TiAoZGVjbCksCisJICAgICAgICAiTm8gZGlzcGF0Y2hlciBmb3VuZCBmb3Ig dGhlIHZlcnNpb25pbmcgYXR0cmlidXRlcyA6ICVzIiwKKwkgICAgICAgIGF0 dHJzX3N0cik7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgcHJl ZGljYXRlX2NoYWluID0gbnJldmVyc2UgKHByZWRpY2F0ZV9jaGFpbik7Cisg IHJldHVybiBwcmVkaWNhdGVfY2hhaW47IAorfQorIAorc3RhdGljIGludAor ZmVhdHVyZV9jb21wYXJlIChjb25zdCB2b2lkICp2MSwgY29uc3Qgdm9pZCAq djIpCit7CisgIHR5cGVkZWYgc3RydWN0IF9mdW5jdGlvbl92ZXJzaW9uX2lu Zm8KKyAgICB7CisgICAgICB0cmVlIHZlcnNpb25fZGVjbDsKKyAgICAgIHRy ZWUgcHJlZGljYXRlX2NoYWluOworICAgICAgdW5zaWduZWQgaW50IGRpc3Bh dGNoX3ByaW9yaXR5OworICAgIH0gZnVuY3Rpb25fdmVyc2lvbl9pbmZvOwor CisgIGNvbnN0IGZ1bmN0aW9uX3ZlcnNpb25faW5mbyBjMSA9ICooY29uc3Qg ZnVuY3Rpb25fdmVyc2lvbl9pbmZvICopdjE7CisgIGNvbnN0IGZ1bmN0aW9u X3ZlcnNpb25faW5mbyBjMiA9ICooY29uc3QgZnVuY3Rpb25fdmVyc2lvbl9p bmZvICopdjI7CisgIHJldHVybiAoYzIuZGlzcGF0Y2hfcHJpb3JpdHkgLSBj MS5kaXNwYXRjaF9wcmlvcml0eSk7Cit9CisKKy8qIFRoaXMgaXMgdGhlIHRh cmdldCBob29rIHRvIGdlbmVyYXRlIHRoZSBkaXNwYXRjaCBmdW5jdGlvbiBm b3IKKyAgIG11bHRpLXZlcnNpb25lZCBmdW5jdGlvbnMuICBESVNQQVRDSF9E RUNMIGlzIHRoZSBmdW5jdGlvbiB3aGljaCB3aWxsCisgICBjb250YWluIHRo ZSBkaXNwYXRjaCBsb2dpYy4gIEZOREVDTFMgYXJlIHRoZSBmdW5jdGlvbiBj aG9pY2VzIGZvcgorICAgZGlzcGF0Y2gsIGFuZCBpcyBhIHRyZWUgY2hhaW4u ICBFTVBUWV9CQiBpcyB0aGUgYmFzaWMgYmxvY2sgcG9pbnRlcgorICAgaW4g RElTUEFUQ0hfREVDTCBpbiB3aGljaCB0aGUgZGlzcGF0Y2ggY29kZSBpcyBn ZW5lcmF0ZWQuICAqLworCitzdGF0aWMgaW50CitpeDg2X2Rpc3BhdGNoX3Zl cnNpb24gKHRyZWUgZGlzcGF0Y2hfZGVjbCwKKwkJICAgICAgIHZvaWQgKmZu ZGVjbHNfcCwKKwkJICAgICAgIGJhc2ljX2Jsb2NrICplbXB0eV9iYikKK3sK KyAgdHJlZSBkZWZhdWx0X2RlY2w7CisgIGdpbXBsZSBpZnVuY19jcHVfaW5p dF9zdG10OworICBnaW1wbGVfc2VxIGdzZXE7CisgIHRyZWUgb2xkX2N1cnJl bnRfZnVuY3Rpb25fZGVjbDsKKyAgaW50IGl4OworICB0cmVlIGVsZTsKKyAg VkVDICh0cmVlLCBoZWFwKSAqZm5kZWNsczsKKyAgdW5zaWduZWQgaW50IG51 bV92ZXJzaW9ucyA9IDA7CisgIHVuc2lnbmVkIGludCBhY3R1YWxfdmVyc2lv bnMgPSAwOworICB1bnNpZ25lZCBpbnQgaTsKKworICBzdHJ1Y3QgX2Z1bmN0 aW9uX3ZlcnNpb25faW5mbworICAgIHsKKyAgICAgIHRyZWUgdmVyc2lvbl9k ZWNsOworICAgICAgdHJlZSBwcmVkaWNhdGVfY2hhaW47CisgICAgICB1bnNp Z25lZCBpbnQgZGlzcGF0Y2hfcHJpb3JpdHk7CisgICAgfSpmdW5jdGlvbl92 ZXJzaW9uX2luZm87CisKKyAgZ2NjX2Fzc2VydCAoZGlzcGF0Y2hfZGVjbCAh PSBOVUxMCisJICAgICAgJiYgZm5kZWNsc19wICE9IE5VTEwKKwkgICAgICAm JiBlbXB0eV9iYiAhPSBOVUxMKTsKKworICAvKmZuZGVjbHNfcCBpcyBhY3R1 YWxseSBhIHZlY3Rvci4gICovCisgIGZuZGVjbHMgPSAoVkVDICh0cmVlLCBo ZWFwKSAqKWZuZGVjbHNfcDsKKworICAvKiBBdGxlYXN0IG9uZSBtb3JlIHZl cnNpb24gb3RoZXIgdGhhbiB0aGUgZGVmYXVsdC4gICovCisgIG51bV92ZXJz aW9ucyA9IFZFQ19sZW5ndGggKHRyZWUsIGZuZGVjbHMpOworICBnY2NfYXNz ZXJ0IChudW1fdmVyc2lvbnMgPj0gMik7CisKKyAgZnVuY3Rpb25fdmVyc2lv bl9pbmZvID0gKHN0cnVjdCBfZnVuY3Rpb25fdmVyc2lvbl9pbmZvICopCisg ICAgeG1hbGxvYyAoKG51bV92ZXJzaW9ucyAtIDEpICogc2l6ZW9mIChzdHJ1 Y3QgX2Z1bmN0aW9uX3ZlcnNpb25faW5mbykpOworCisgIC8qIFRoZSBmaXJz dCB2ZXJzaW9uIGluIHRoZSB2ZWN0b3IgaXMgdGhlIGRlZmF1bHQgZGVjbC4g ICovCisgIGRlZmF1bHRfZGVjbCA9IFZFQ19pbmRleCAodHJlZSwgZm5kZWNs cywgMCk7CisKKyAgb2xkX2N1cnJlbnRfZnVuY3Rpb25fZGVjbCA9IGN1cnJl bnRfZnVuY3Rpb25fZGVjbDsKKyAgcHVzaF9jZnVuIChERUNMX1NUUlVDVF9G VU5DVElPTiAoZGlzcGF0Y2hfZGVjbCkpOworICBjdXJyZW50X2Z1bmN0aW9u X2RlY2wgPSBkaXNwYXRjaF9kZWNsOworCisgIGdzZXEgPSBiYl9zZXEgKCpl bXB0eV9iYik7CisgIGlmdW5jX2NwdV9pbml0X3N0bXQgPSBnaW1wbGVfYnVp bGRfY2FsbF92ZWMgKAorICAgICAgICAgICAgICAgICAgICAgaXg4Nl9idWls dGlucyBbKGludCkgSVg4Nl9CVUlMVElOX0NQVV9JTklUXSwgTlVMTCk7Cisg IGdpbXBsZV9zZXFfYWRkX3N0bXQgKCZnc2VxLCBpZnVuY19jcHVfaW5pdF9z dG10KTsKKyAgZ2ltcGxlX3NldF9iYiAoaWZ1bmNfY3B1X2luaXRfc3RtdCwg KmVtcHR5X2JiKTsKKyAgc2V0X2JiX3NlcSAoKmVtcHR5X2JiLCBnc2VxKTsK KworICBwb3BfY2Z1biAoKTsKKyAgY3VycmVudF9mdW5jdGlvbl9kZWNsID0g b2xkX2N1cnJlbnRfZnVuY3Rpb25fZGVjbDsKKworCisgIGZvciAoaXggPSAx OyBWRUNfaXRlcmF0ZSAodHJlZSwgZm5kZWNscywgaXgsIGVsZSk7ICsraXgp CisgICAgeworICAgICAgdHJlZSB2ZXJzaW9uX2RlY2wgPSBlbGU7CisgICAg ICB0cmVlIHByZWRpY2F0ZV9jaGFpbiA9IE5VTExfVFJFRTsKKyAgICAgIHVu c2lnbmVkIGludCBwcmlvcml0eTsKKyAgICAgIC8qIEdldCBhdHRyaWJ1dGUg c3RyaW5nLCBwYXJzZSBpdCBhbmQgZmluZCB0aGUgcmlnaHQgcHJlZGljYXRl IGRlY2wuCisgICAgICAgICBUaGUgcHJlZGljYXRlIGZ1bmN0aW9uIGNvdWxk IGJlIGEgbGVuZ3RoeSBjb21iaW5hdGlvbiBvZiBtYW55CisJIGZlYXR1cmVz LCBsaWtlIGFyY2gtdHlwZSBhbmQgdmFyaW91cyBpc2EtdmFyaWFudHMuICAq LworICAgICAgcHJlZGljYXRlX2NoYWluID0gZ2V0X2J1aWx0aW5fY29kZV9m b3JfdmVyc2lvbiAodmVyc2lvbl9kZWNsLCAmcHJpb3JpdHkpOworCisgICAg ICBpZiAocHJlZGljYXRlX2NoYWluID09IE5VTExfVFJFRSkKKwljb250aW51 ZTsKKworICAgICAgYWN0dWFsX3ZlcnNpb25zKys7CisgICAgICBmdW5jdGlv bl92ZXJzaW9uX2luZm8gW2l4IC0gMV0udmVyc2lvbl9kZWNsID0gdmVyc2lv bl9kZWNsOworICAgICAgZnVuY3Rpb25fdmVyc2lvbl9pbmZvIFtpeCAtIDFd LnByZWRpY2F0ZV9jaGFpbiA9IHByZWRpY2F0ZV9jaGFpbjsKKyAgICAgIGZ1 bmN0aW9uX3ZlcnNpb25faW5mbyBbaXggLSAxXS5kaXNwYXRjaF9wcmlvcml0 eSA9IHByaW9yaXR5OworICAgIH0KKworICAvKiBTb3J0IHRoZSB2ZXJzaW9u cyBhY2NvcmRpbmcgdG8gZGVzY2VuZGluZyBvcmRlciBvZiBkaXNwYXRjaCBw cmlvcml0eS4gIFRoZQorICAgICBwcmlvcml0eSBpcyBiYXNlZCBvbiB0aGUg SVNBLiAgVGhpcyBpcyBub3QgYSBwZXJmZWN0IHNvbHV0aW9uLiAgVGhlcmUK KyAgICAgY291bGQgc3RpbGwgYmUgYW1iaWd1aXR5LiAgSWYgbW9yZSB0aGFu IG9uZSBmdW5jdGlvbiB2ZXJzaW9uIGlzIHN1aXRhYmxlCisgICAgIHRvIGV4 ZWN1dGUsICB3aGljaCBvbmUgc2hvdWxkIGJlIGRpc3BhdGNoZWQ/ICBJbiBm dXR1cmUsIGFsbG93IHRoZSB1c2VyCisgICAgIHRvIHNwZWNpZnkgYSBkaXNw YXRjaCAgcHJpb3JpdHkgbmV4dCB0byB0aGUgdmVyc2lvbi4gICovCisgIHFz b3J0IChmdW5jdGlvbl92ZXJzaW9uX2luZm8sIGFjdHVhbF92ZXJzaW9ucywK KyAgICAgICAgIHNpemVvZiAoc3RydWN0IF9mdW5jdGlvbl92ZXJzaW9uX2lu Zm8pLCBmZWF0dXJlX2NvbXBhcmUpOworCisgIGZvciAgKGkgPSAwOyBpIDwg YWN0dWFsX3ZlcnNpb25zOyArK2kpCisgICAgKmVtcHR5X2JiID0gYWRkX2Nv bmRpdGlvbl90b19iYiAoZGlzcGF0Y2hfZGVjbCwKKwkJCQkgICAgIGZ1bmN0 aW9uX3ZlcnNpb25faW5mb1tpXS52ZXJzaW9uX2RlY2wsCisJCQkJICAgICBm dW5jdGlvbl92ZXJzaW9uX2luZm9baV0ucHJlZGljYXRlX2NoYWluLAorCQkJ CSAgICAgKmVtcHR5X2JiKTsKKworICAvKiBkaXNwYXRjaCBkZWZhdWx0IHZl cnNpb24gYXQgdGhlIGVuZC4gICovCisgICplbXB0eV9iYiA9IGFkZF9jb25k aXRpb25fdG9fYmIgKGRpc3BhdGNoX2RlY2wsIGRlZmF1bHRfZGVjbCwKKwkJ CQkgICBOVUxMLCAqZW1wdHlfYmIpOworCisgIGZyZWUgKGZ1bmN0aW9uX3Zl cnNpb25faW5mbyk7CisgIHJldHVybiAwOworfQorCiAvKiBUaGlzIGJ1aWxk cyB0aGUgcHJvY2Vzc29yX21vZGVsIHN0cnVjdCB0eXBlIGRlZmluZWQgaW4K ICAgIGxpYmdjYy9jb25maWcvaTM4Ni9jcHVpbmZvLmMgICovCiAKQEAgLTM5 NTM5LDYgKzM5OTcxLDkgQEAgaXg4Nl9tZW1tb2RlbF9jaGVjayAodW5zaWdu ZWQgSE9TVF9XSURFX0lOVCB2YWwpCiAjdW5kZWYgVEFSR0VUX0ZPTERfQlVJ TFRJTgogI2RlZmluZSBUQVJHRVRfRk9MRF9CVUlMVElOIGl4ODZfZm9sZF9i dWlsdGluCiAKKyN1bmRlZiBUQVJHRVRfRElTUEFUQ0hfVkVSU0lPTgorI2Rl ZmluZSBUQVJHRVRfRElTUEFUQ0hfVkVSU0lPTiBpeDg2X2Rpc3BhdGNoX3Zl cnNpb24KKwogI3VuZGVmIFRBUkdFVF9FTlVNX1ZBX0xJU1RfUAogI2RlZmlu ZSBUQVJHRVRfRU5VTV9WQV9MSVNUX1AgaXg4Nl9lbnVtX3ZhX2xpc3QKIApJ bmRleDogZ2NjL2NwL2Vycm9yLmMKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gZ2NjL2NwL2Vycm9yLmMJKHJldmlzaW9uIDE4NzM3MSkKKysrIGdjYy9j cC9lcnJvci5jCSh3b3JraW5nIGNvcHkpCkBAIC0xNTM0LDggKzE1MzQsMTUg QEAgZHVtcF9leGNlcHRpb25fc3BlYyAodHJlZSB0LCBpbnQgZmxhZ3MpCiBz dGF0aWMgdm9pZAogZHVtcF9mdW5jdGlvbl9uYW1lICh0cmVlIHQsIGludCBm bGFncykKIHsKLSAgdHJlZSBuYW1lID0gREVDTF9OQU1FICh0KTsKKyAgdHJl ZSBuYW1lOwogCisgIC8qIEZvciBmdW5jdGlvbiB2ZXJzaW9ucywgdXNlIHRo ZSBhc3NlbWJsZXIgbmFtZSBhcyB0aGUgZGVjbCBuYW1lIGlzCisgICAgIHRo ZSBzYW1lIGZvciBhbGwgdmVyc2lvbnMuICAqLworICBpZiAoREVDTF9GVU5D VElPTl9WRVJTSU9ORUQgKHQpKQorICAgIG5hbWUgPSBERUNMX0FTU0VNQkxF Ul9OQU1FICh0KTsKKyAgZWxzZQorICAgIG5hbWUgPSBERUNMX05BTUUgKHQp OworCiAgIC8qIFdlIGNhbiBnZXQgaGVyZSB3aXRoIGEgZGVjbCB0aGF0IHdh cyBzeW50aGVzaXplZCBieSBsYW5ndWFnZS0KICAgICAgaW5kZXBlbmRlbnQg bWFjaGluZXJ5IChlLmcuIGNvdmVyYWdlLmMpIGluIHdoaWNoIGNhc2UgaXQg d29uJ3QKICAgICAgaGF2ZSBhIGxhbmdfc3BlY2lmaWMgc3RydWN0dXJlIGF0 dGFjaGVkIGFuZCBERUNMX0NPTlNUUlVDVE9SX1AK --14dae93995052b611704bfcd45c4--