From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-il1-x142.google.com (mail-il1-x142.google.com [IPv6:2607:f8b0:4864:20::142]) by sourceware.org (Postfix) with ESMTPS id 15C8B3858D35 for ; Thu, 1 Oct 2020 19:50:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 15C8B3858D35 Received: by mail-il1-x142.google.com with SMTP id c5so7491497ilk.11 for ; Thu, 01 Oct 2020 12:50:39 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=is/VOhPbRO6nqgHeG7ZTB4QgW9ay1+wRSEQas5xDrlY=; b=t7M+BuGqyd5SJb+XyK7wL/24mWlQz912OzYi/jceE4xlRi93DCHm7cRFSeUb2Wglx9 psk0GwX0bGwqMG97Bl1oh2uPvo/pmZo9SFOzvW7Qa7S/DfCZMWyS50XB2Zldc6ZtI6ww nAiUvZCCOhlqV3sfuShd58y/XTX9ZIEZTYr6YrSGgeER1cOaw6hwr8jLaN6H90ny3EvV VvJp+VVO9LnxleiImWNAaofdQ+Af+OROxt8elavIzFY5xJKxrg3yR372xVLG65pVjz60 sMfObbVfpRbhpy+XNZshpu0fdKIqwYy+9sRWwmOn65iyDAZ92UF0hDz4mbOxoZQ0xsTI RQgg== X-Gm-Message-State: AOAM5331ZVtHweidMn93myXFa/Uyjr3HiMnw6affxgUw1XBUuHmrqn3C P4HTfeJqUdjiyKmkrIgMGuXwUgP4y2CQ0NFhQgbfiuiBwA8= X-Google-Smtp-Source: ABdhPJyhheHs4q908ReEMnw0PbytTCD0JSt4EAknMnW/Xv2Nfun3vlreLDzUxa4shr4rsbi59kHNTdpDNQBRhKTjUXs= X-Received: by 2002:a92:790b:: with SMTP id u11mr4081840ilc.13.1601581838496; Thu, 01 Oct 2020 12:50:38 -0700 (PDT) MIME-Version: 1.0 References: <20200918160709.949608-1-hjl.tools@gmail.com> <20200918160709.949608-2-hjl.tools@gmail.com> <87imby6obw.fsf@oldenburg2.str.redhat.com> <87y2ku574k.fsf@oldenburg2.str.redhat.com> <87lfgu56c8.fsf@oldenburg2.str.redhat.com> <87pn663qm5.fsf@oldenburg2.str.redhat.com> <87ft71yq64.fsf@oldenburg2.str.redhat.com> <87362yl4fh.fsf@oldenburg2.str.redhat.com> In-Reply-To: <87362yl4fh.fsf@oldenburg2.str.redhat.com> From: "H.J. Lu" Date: Thu, 1 Oct 2020 12:50:01 -0700 Message-ID: Subject: V4 [PATCH] x86: Initialize CPU info via IFUNC relocation [BZ 26203] To: Florian Weimer Cc: "H.J. Lu via Libc-alpha" Content-Type: multipart/mixed; boundary="00000000000090275e05b0a15443" X-Spam-Status: No, score=-3036.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, URIBL_BLACK autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 01 Oct 2020 19:50:49 -0000 --00000000000090275e05b0a15443 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Oct 1, 2020 at 1:46 AM Florian Weimer wrote: > > * H. J. Lu: > > > diff --git a/sysdeps/x86/cacheinfo.c b/sysdeps/x86/cacheinfo.c > > index dadec5d58f..65ab29123d 100644 > > --- a/sysdeps/x86/cacheinfo.c > > +++ b/sysdeps/x86/cacheinfo.c > > @@ -16,7 +16,9 @@ > > License along with the GNU C Library; if not, see > > . */ > > > > -#if IS_IN (libc) > > +/* NB: In libc.a, this file is included in libc-static.c. In libc.so, > > + this file is standalone. */ > > +#if IS_IN (libc) && (defined SHARED || defined _PRIVATE_CPU_FEATURES_H= ) > > libc-static.c should be libc-start.c, I believe. The =E2=80=9Cdefined > _PRIVATE_CPU_FEATURES_H=E2=80=9D part seems rather indirect. What exactl= y are > you trying to accomplish here? > > It looks to me as if this file should included in libc.so, but not > pulled into ld.so via the rebuild, so maybe you can add an empty > sysdeps/x86/rtld-cacheinfo.c file instead? > Here is the updated patch. I also moved files around to prepare for moving x86 processor cache info to cpu_features in ld.so to support --list-tunables. --=20 H.J. --00000000000090275e05b0a15443 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-x86-Initialize-CPU-info-via-IFUNC-relocation-BZ-2620.patch" Content-Disposition: attachment; filename="0001-x86-Initialize-CPU-info-via-IFUNC-relocation-BZ-2620.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kfr8ekxd0 RnJvbSBjNWNlYTE4NjUzMjU3YTZlZDM2NmE4Yzg5YTVkODY2MGJkMTY4ZTIwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiSC5KLiBMdSIgPGhqbC50b29sc0BnbWFpbC5jb20+CkRhdGU6 IFNhdCwgNCBKdWwgMjAyMCAwNjozNTo0OSAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIHg4NjogSW5p dGlhbGl6ZSBDUFUgaW5mbyB2aWEgSUZVTkMgcmVsb2NhdGlvbiBbQlogMjYyMDNdCgpYODYgQ1BV IGZlYXR1cmVzIGluIGxkLnNvIGFyZSBpbml0aWFsaXplZCBieSBpbml0X2NwdV9mZWF0dXJlcywg d2hpY2ggaXMKaW52b2tlZCBieSBETF9QTEFURk9STV9JTklUIGZyb20gX2RsX3N5c2RlcF9zdGFy dC4gIEJ1dCB3aGVuIGxkLnNvIGlzCmxvYWRlZCBieSBzdGF0aWMgZXhlY3V0YWJsZSwgRExfUExB VEZPUk1fSU5JVCBpcyBuZXZlciBjYWxsZWQuICBBbHNvCng4NiBjYWNoZSBpbmZvIGluIGxpYmMu byBhbmQgbGliYy5hIGlzIGluaXRpYWxpemVkIGJ5IGEgY29uc3RydWN0b3IKd2hpY2ggbWF5IGJl IGNhbGxlZCB0b28gbGF0ZS4gIFNpbmNlIHNvbWUgZmllbGRzIGluIF9ydGxkX2dsb2JhbF9ybwpp biBsZC5zbyBhcmUgaW5pdGlhbGl6ZWQgYnkgZHluYW1pYyByZWxvY2F0aW9uLCB3ZSBjYW4gYWxz byBpbml0aWFsaXplCng4NiBDUFUgZmVhdHVyZXMgaW4gX3J0bGRfZ2xvYmFsX3JvIGluIGxkLnNv IGFuZCBjYWNoZSBpbmZvIGluIGxpYmMuc28KYnkgaW5pdGlhbGl6aW5nIGR1bW15IGZ1bmN0aW9u IHBvaW50ZXJzIGluIGxkLnNvIGFuZCBsaWJjLnNvIHZpYSBJRlVOQwpyZWxvY2F0aW9uLgoKS2V5 IHBvaW50czoKCjEuIElGVU5DIGlzIGFsd2F5cyBzdXBwb3J0ZWQsIGluZGVwZW5kZW50IG9mIC0t ZW5hYmxlLW11bHRpLWFyY2ggb3IKLS1kaXNhYmxlLW11bHRpLWFyY2guICBMaW5rZXIgZ2VuZXJh dGVzIElGVU5DIHJlbG9jYXRpb25zIGZyb20gaW5wdXQKSUZVTkMgb2JqZWN0cyBhbmQgbGQuc28g cGVyZm9ybXMgSUZVTkMgcmVsb2NhdGlvbnMuCjIuIFRoZXJlIGFyZSBubyBJRlVOQyBkZXBlbmRl bmNpZXMgaW4gbGQuc28gYmVmb3JlIGR5bmFtaWMgcmVsb2NhdGlvbgpoYXZlIGJlZW4gcGVyZm9y bWVkLAozLiBUaGUgeDg2IENQVSBmZWF0dXJlcyBpbiBsZC5zbyBpcyBpbml0aWFsaXplZCBieSBE TF9QTEFURk9STV9JTklUCmluIGR5bmFtaWMgZXhlY3V0YWJsZSBhbmQgYnkgSUZVTkMgcmVsb2Nh dGlvbiBpbiBkbG9wZW4gaW4gc3RhdGljCmV4ZWN1dGFibGUuCjQuIFRoZSB4ODYgY2FjaGUgaW5m byBpbiBsaWJjLm8gaXMgaW5pdGlhbGl6ZWQgYnkgSUZVTkMgcmVsb2NhdGlvbi4KNS4gSW4gbGli Yy5hLCBib3RoIHg4NiBDUFUgZmVhdHVyZXMgYW5kIGNhY2hlIGluZm8gYXJlIGluaXRpYWxpemVk IGZyb20KQVJDSF9JTklUX0NQVV9GRUFUVVJFUywgbm90IGJ5IElGVU5DIHJlbG9jYXRpb24sIGJl Zm9yZSBfX2xpYmNfZWFybHlfaW5pdAppcyBjYWxsZWQuCgpOb3RlOiBfZGxfeDg2X2luaXRfY3B1 X2ZlYXR1cmVzIGNhbiBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UgZnJvbQpETF9QTEFURk9STV9J TklUIGFuZCBkdXJpbmcgcmVsb2NhdGlvbiBpbiBsZC5zby4KLS0tCiBzeXNkZXBzL2kzODYvZGwt bWFjaGluZS5oICAgICAgICAgIHwgICA3ICstCiBzeXNkZXBzL3g4Ni9jYWNoZWluZm8uYyAgICAg ICAgICAgIHwgODcxICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBzeXNkZXBzL3g4Ni9j YWNoZWluZm8uaCAgICAgICAgICAgIHwgNDEzICsrKysrKysrKysrKysrCiBzeXNkZXBzL3g4Ni9j cHUtZmVhdHVyZXMuYyAgICAgICAgIHwgIDEyICstCiBzeXNkZXBzL3g4Ni9kbC1jYWNoZWluZm8u aCAgICAgICAgIHwgNDc4ICsrKysrKysrKysrKysrKysKIHN5c2RlcHMveDg2L2RsLWdldC1jcHUt ZmVhdHVyZXMuYyAgfCAgMjcgKy0KIHN5c2RlcHMveDg2L2luY2x1ZGUvY3B1LWZlYXR1cmVzLmgg fCAgIDEgKwogc3lzZGVwcy94ODYvbGliYy1zdGFydC5jICAgICAgICAgICB8ICAgMSAtCiBzeXNk ZXBzL3g4Nl82NC9kbC1tYWNoaW5lLmggICAgICAgIHwgICA3ICstCiA5IGZpbGVzIGNoYW5nZWQs IDk0OSBpbnNlcnRpb25zKCspLCA4NjggZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3lzZGVwcy94ODYvY2FjaGVpbmZvLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3g4Ni9k bC1jYWNoZWluZm8uaAoKZGlmZiAtLWdpdCBhL3N5c2RlcHMvaTM4Ni9kbC1tYWNoaW5lLmggYi9z eXNkZXBzL2kzODYvZGwtbWFjaGluZS5oCmluZGV4IDBmMDgwNzllNDguLmJkYzIxZDFhM2MgMTAw NjQ0Ci0tLSBhL3N5c2RlcHMvaTM4Ni9kbC1tYWNoaW5lLmgKKysrIGIvc3lzZGVwcy9pMzg2L2Rs LW1hY2hpbmUuaApAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgPHN5c2RlcC5oPgogI2luY2x1 ZGUgPHRscy5oPgogI2luY2x1ZGUgPGRsLXRsc2Rlc2MuaD4KLSNpbmNsdWRlIDxjcHUtZmVhdHVy ZXMuYz4KIAogLyogUmV0dXJuIG5vbnplcm8gaWZmIEVMRiBoZWFkZXIgaXMgY29tcGF0aWJsZSB3 aXRoIHRoZSBydW5uaW5nIGhvc3QuICAqLwogc3RhdGljIGlubGluZSBpbnQgX19hdHRyaWJ1dGVf XyAoKHVudXNlZCkpCkBAIC0yNDgsOSArMjQ3LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fYXR0 cmlidXRlX18gKCh1bnVzZWQpKQogZGxfcGxhdGZvcm1faW5pdCAodm9pZCkKIHsKICNpZiBJU19J TiAocnRsZCkKLSAgLyogaW5pdF9jcHVfZmVhdHVyZXMgaGFzIGJlZW4gY2FsbGVkIGVhcmx5IGZy b20gX19saWJjX3N0YXJ0X21haW4gaW4KLSAgICAgc3RhdGljIGV4ZWN1dGFibGUuICAqLwotICBp bml0X2NwdV9mZWF0dXJlcyAoJkdMUk8oZGxfeDg2X2NwdV9mZWF0dXJlcykpOworICAvKiBfZGxf eDg2X2luaXRfY3B1X2ZlYXR1cmVzIGlzIGEgd3JhcHBlciBmb3IgaW5pdF9jcHVfZmVhdHVyZXMg d2hpY2gKKyAgICAgaGFzIGJlZW4gY2FsbGVkIGVhcmx5IGZyb20gX19saWJjX3N0YXJ0X21haW4g aW4gc3RhdGljIGV4ZWN1dGFibGUuICAqLworICBfZGxfeDg2X2luaXRfY3B1X2ZlYXR1cmVzICgp OwogI2Vsc2UKICAgaWYgKEdMUk8oZGxfcGxhdGZvcm0pICE9IE5VTEwgJiYgKkdMUk8oZGxfcGxh dGZvcm0pID09ICdcMCcpCiAgICAgLyogQXZvaWQgYW4gZW1wdHkgc3RyaW5nIHdoaWNoIHdvdWxk IGRpc3R1cmIgdXMuICAqLwpkaWZmIC0tZ2l0IGEvc3lzZGVwcy94ODYvY2FjaGVpbmZvLmMgYi9z eXNkZXBzL3g4Ni9jYWNoZWluZm8uYwppbmRleCBkYWRlYzVkNThmLi44ZWQ5NWNlOWRkIDEwMDY0 NAotLS0gYS9zeXNkZXBzL3g4Ni9jYWNoZWluZm8uYworKysgYi9zeXNkZXBzL3g4Ni9jYWNoZWlu Zm8uYwpAQCAtMSw0ICsxLDQgQEAKLS8qIHg4Nl82NCBjYWNoZSBpbmZvLgorLyogeDg2IGNhY2hl IGluZm8uCiAgICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIEluYy4KICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgogCkBA IC0xNiw0NzYgKzE2LDExIEBACiAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJh cnk7IGlmIG5vdCwgc2VlCiAgICA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8K IAotI2lmIElTX0lOIChsaWJjKQotCiAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8c3Rk Ym9vbC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1 ZGUgPGNwdWlkLmg+Ci0jaW5jbHVkZSA8aW5pdC1hcmNoLmg+Ci0KLXN0YXRpYyBjb25zdCBzdHJ1 Y3QgaW50ZWxfMDJfY2FjaGVfaW5mbwotewotICB1bnNpZ25lZCBjaGFyIGlkeDsKLSAgdW5zaWdu ZWQgY2hhciBhc3NvYzsKLSAgdW5zaWduZWQgY2hhciBsaW5lc2l6ZTsKLSAgdW5zaWduZWQgY2hh ciByZWxfbmFtZTsKLSAgdW5zaWduZWQgaW50IHNpemU7Ci19IGludGVsXzAyX2tub3duIFtdID0K LSAgewotI2RlZmluZSBNKHNjKSAoKHNjKSAtIF9TQ19MRVZFTDFfSUNBQ0hFX1NJWkUpCi0gICAg eyAweDA2LCAgNCwgMzIsIE0oX1NDX0xFVkVMMV9JQ0FDSEVfU0laRSksICAgIDgxOTIgfSwKLSAg ICB7IDB4MDgsICA0LCAzMiwgTShfU0NfTEVWRUwxX0lDQUNIRV9TSVpFKSwgICAxNjM4NCB9LAot ICAgIHsgMHgwOSwgIDQsIDMyLCBNKF9TQ19MRVZFTDFfSUNBQ0hFX1NJWkUpLCAgIDMyNzY4IH0s Ci0gICAgeyAweDBhLCAgMiwgMzIsIE0oX1NDX0xFVkVMMV9EQ0FDSEVfU0laRSksICAgIDgxOTIg fSwKLSAgICB7IDB4MGMsICA0LCAzMiwgTShfU0NfTEVWRUwxX0RDQUNIRV9TSVpFKSwgICAxNjM4 NCB9LAotICAgIHsgMHgwZCwgIDQsIDY0LCBNKF9TQ19MRVZFTDFfRENBQ0hFX1NJWkUpLCAgIDE2 Mzg0IH0sCi0gICAgeyAweDBlLCAgNiwgNjQsIE0oX1NDX0xFVkVMMV9EQ0FDSEVfU0laRSksICAg MjQ1NzYgfSwKLSAgICB7IDB4MjEsICA4LCA2NCwgTShfU0NfTEVWRUwyX0NBQ0hFX1NJWkUpLCAg IDI2MjE0NCB9LAotICAgIHsgMHgyMiwgIDQsIDY0LCBNKF9TQ19MRVZFTDNfQ0FDSEVfU0laRSks ICAgNTI0Mjg4IH0sCi0gICAgeyAweDIzLCAgOCwgNjQsIE0oX1NDX0xFVkVMM19DQUNIRV9TSVpF KSwgIDEwNDg1NzYgfSwKLSAgICB7IDB4MjUsICA4LCA2NCwgTShfU0NfTEVWRUwzX0NBQ0hFX1NJ WkUpLCAgMjA5NzE1MiB9LAotICAgIHsgMHgyOSwgIDgsIDY0LCBNKF9TQ19MRVZFTDNfQ0FDSEVf U0laRSksICA0MTk0MzA0IH0sCi0gICAgeyAweDJjLCAgOCwgNjQsIE0oX1NDX0xFVkVMMV9EQ0FD SEVfU0laRSksICAgMzI3NjggfSwKLSAgICB7IDB4MzAsICA4LCA2NCwgTShfU0NfTEVWRUwxX0lD QUNIRV9TSVpFKSwgICAzMjc2OCB9LAotICAgIHsgMHgzOSwgIDQsIDY0LCBNKF9TQ19MRVZFTDJf Q0FDSEVfU0laRSksICAgMTMxMDcyIH0sCi0gICAgeyAweDNhLCAgNiwgNjQsIE0oX1NDX0xFVkVM Ml9DQUNIRV9TSVpFKSwgICAxOTY2MDggfSwKLSAgICB7IDB4M2IsICAyLCA2NCwgTShfU0NfTEVW RUwyX0NBQ0hFX1NJWkUpLCAgIDEzMTA3MiB9LAotICAgIHsgMHgzYywgIDQsIDY0LCBNKF9TQ19M RVZFTDJfQ0FDSEVfU0laRSksICAgMjYyMTQ0IH0sCi0gICAgeyAweDNkLCAgNiwgNjQsIE0oX1ND X0xFVkVMMl9DQUNIRV9TSVpFKSwgICAzOTMyMTYgfSwKLSAgICB7IDB4M2UsICA0LCA2NCwgTShf U0NfTEVWRUwyX0NBQ0hFX1NJWkUpLCAgIDUyNDI4OCB9LAotICAgIHsgMHgzZiwgIDIsIDY0LCBN KF9TQ19MRVZFTDJfQ0FDSEVfU0laRSksICAgMjYyMTQ0IH0sCi0gICAgeyAweDQxLCAgNCwgMzIs IE0oX1NDX0xFVkVMMl9DQUNIRV9TSVpFKSwgICAxMzEwNzIgfSwKLSAgICB7IDB4NDIsICA0LCAz MiwgTShfU0NfTEVWRUwyX0NBQ0hFX1NJWkUpLCAgIDI2MjE0NCB9LAotICAgIHsgMHg0MywgIDQs IDMyLCBNKF9TQ19MRVZFTDJfQ0FDSEVfU0laRSksICAgNTI0Mjg4IH0sCi0gICAgeyAweDQ0LCAg NCwgMzIsIE0oX1NDX0xFVkVMMl9DQUNIRV9TSVpFKSwgIDEwNDg1NzYgfSwKLSAgICB7IDB4NDUs ICA0LCAzMiwgTShfU0NfTEVWRUwyX0NBQ0hFX1NJWkUpLCAgMjA5NzE1MiB9LAotICAgIHsgMHg0 NiwgIDQsIDY0LCBNKF9TQ19MRVZFTDNfQ0FDSEVfU0laRSksICA0MTk0MzA0IH0sCi0gICAgeyAw eDQ3LCAgOCwgNjQsIE0oX1NDX0xFVkVMM19DQUNIRV9TSVpFKSwgIDgzODg2MDggfSwKLSAgICB7 IDB4NDgsIDEyLCA2NCwgTShfU0NfTEVWRUwyX0NBQ0hFX1NJWkUpLCAgMzE0NTcyOCB9LAotICAg IHsgMHg0OSwgMTYsIDY0LCBNKF9TQ19MRVZFTDJfQ0FDSEVfU0laRSksICA0MTk0MzA0IH0sCi0g ICAgeyAweDRhLCAxMiwgNjQsIE0oX1NDX0xFVkVMM19DQUNIRV9TSVpFKSwgIDYyOTE0NTYgfSwK LSAgICB7IDB4NGIsIDE2LCA2NCwgTShfU0NfTEVWRUwzX0NBQ0hFX1NJWkUpLCAgODM4ODYwOCB9 LAotICAgIHsgMHg0YywgMTIsIDY0LCBNKF9TQ19MRVZFTDNfQ0FDSEVfU0laRSksIDEyNTgyOTEy IH0sCi0gICAgeyAweDRkLCAxNiwgNjQsIE0oX1NDX0xFVkVMM19DQUNIRV9TSVpFKSwgMTY3Nzcy MTYgfSwKLSAgICB7IDB4NGUsIDI0LCA2NCwgTShfU0NfTEVWRUwyX0NBQ0hFX1NJWkUpLCAgNjI5 MTQ1NiB9LAotICAgIHsgMHg2MCwgIDgsIDY0LCBNKF9TQ19MRVZFTDFfRENBQ0hFX1NJWkUpLCAg IDE2Mzg0IH0sCi0gICAgeyAweDY2LCAgNCwgNjQsIE0oX1NDX0xFVkVMMV9EQ0FDSEVfU0laRSks ICAgIDgxOTIgfSwKLSAgICB7IDB4NjcsICA0LCA2NCwgTShfU0NfTEVWRUwxX0RDQUNIRV9TSVpF KSwgICAxNjM4NCB9LAotICAgIHsgMHg2OCwgIDQsIDY0LCBNKF9TQ19MRVZFTDFfRENBQ0hFX1NJ WkUpLCAgIDMyNzY4IH0sCi0gICAgeyAweDc4LCAgOCwgNjQsIE0oX1NDX0xFVkVMMl9DQUNIRV9T SVpFKSwgIDEwNDg1NzYgfSwKLSAgICB7IDB4NzksICA4LCA2NCwgTShfU0NfTEVWRUwyX0NBQ0hF X1NJWkUpLCAgIDEzMTA3MiB9LAotICAgIHsgMHg3YSwgIDgsIDY0LCBNKF9TQ19MRVZFTDJfQ0FD SEVfU0laRSksICAgMjYyMTQ0IH0sCi0gICAgeyAweDdiLCAgOCwgNjQsIE0oX1NDX0xFVkVMMl9D QUNIRV9TSVpFKSwgICA1MjQyODggfSwKLSAgICB7IDB4N2MsICA4LCA2NCwgTShfU0NfTEVWRUwy X0NBQ0hFX1NJWkUpLCAgMTA0ODU3NiB9LAotICAgIHsgMHg3ZCwgIDgsIDY0LCBNKF9TQ19MRVZF TDJfQ0FDSEVfU0laRSksICAyMDk3MTUyIH0sCi0gICAgeyAweDdmLCAgMiwgNjQsIE0oX1NDX0xF VkVMMl9DQUNIRV9TSVpFKSwgICA1MjQyODggfSwKLSAgICB7IDB4ODAsICA4LCA2NCwgTShfU0Nf TEVWRUwyX0NBQ0hFX1NJWkUpLCAgIDUyNDI4OCB9LAotICAgIHsgMHg4MiwgIDgsIDMyLCBNKF9T Q19MRVZFTDJfQ0FDSEVfU0laRSksICAgMjYyMTQ0IH0sCi0gICAgeyAweDgzLCAgOCwgMzIsIE0o X1NDX0xFVkVMMl9DQUNIRV9TSVpFKSwgICA1MjQyODggfSwKLSAgICB7IDB4ODQsICA4LCAzMiwg TShfU0NfTEVWRUwyX0NBQ0hFX1NJWkUpLCAgMTA0ODU3NiB9LAotICAgIHsgMHg4NSwgIDgsIDMy LCBNKF9TQ19MRVZFTDJfQ0FDSEVfU0laRSksICAyMDk3MTUyIH0sCi0gICAgeyAweDg2LCAgNCwg NjQsIE0oX1NDX0xFVkVMMl9DQUNIRV9TSVpFKSwgICA1MjQyODggfSwKLSAgICB7IDB4ODcsICA4 LCA2NCwgTShfU0NfTEVWRUwyX0NBQ0hFX1NJWkUpLCAgMTA0ODU3NiB9LAotICAgIHsgMHhkMCwg IDQsIDY0LCBNKF9TQ19MRVZFTDNfQ0FDSEVfU0laRSksICAgNTI0Mjg4IH0sCi0gICAgeyAweGQx LCAgNCwgNjQsIE0oX1NDX0xFVkVMM19DQUNIRV9TSVpFKSwgIDEwNDg1NzYgfSwKLSAgICB7IDB4 ZDIsICA0LCA2NCwgTShfU0NfTEVWRUwzX0NBQ0hFX1NJWkUpLCAgMjA5NzE1MiB9LAotICAgIHsg MHhkNiwgIDgsIDY0LCBNKF9TQ19MRVZFTDNfQ0FDSEVfU0laRSksICAxMDQ4NTc2IH0sCi0gICAg eyAweGQ3LCAgOCwgNjQsIE0oX1NDX0xFVkVMM19DQUNIRV9TSVpFKSwgIDIwOTcxNTIgfSwKLSAg ICB7IDB4ZDgsICA4LCA2NCwgTShfU0NfTEVWRUwzX0NBQ0hFX1NJWkUpLCAgNDE5NDMwNCB9LAot ICAgIHsgMHhkYywgMTIsIDY0LCBNKF9TQ19MRVZFTDNfQ0FDSEVfU0laRSksICAyMDk3MTUyIH0s Ci0gICAgeyAweGRkLCAxMiwgNjQsIE0oX1NDX0xFVkVMM19DQUNIRV9TSVpFKSwgIDQxOTQzMDQg fSwKLSAgICB7IDB4ZGUsIDEyLCA2NCwgTShfU0NfTEVWRUwzX0NBQ0hFX1NJWkUpLCAgODM4ODYw OCB9LAotICAgIHsgMHhlMiwgMTYsIDY0LCBNKF9TQ19MRVZFTDNfQ0FDSEVfU0laRSksICAyMDk3 MTUyIH0sCi0gICAgeyAweGUzLCAxNiwgNjQsIE0oX1NDX0xFVkVMM19DQUNIRV9TSVpFKSwgIDQx OTQzMDQgfSwKLSAgICB7IDB4ZTQsIDE2LCA2NCwgTShfU0NfTEVWRUwzX0NBQ0hFX1NJWkUpLCAg ODM4ODYwOCB9LAotICAgIHsgMHhlYSwgMjQsIDY0LCBNKF9TQ19MRVZFTDNfQ0FDSEVfU0laRSks IDEyNTgyOTEyIH0sCi0gICAgeyAweGViLCAyNCwgNjQsIE0oX1NDX0xFVkVMM19DQUNIRV9TSVpF KSwgMTg4NzQzNjggfSwKLSAgICB7IDB4ZWMsIDI0LCA2NCwgTShfU0NfTEVWRUwzX0NBQ0hFX1NJ WkUpLCAyNTE2NTgyNCB9LAotICB9OwotCi0jZGVmaW5lIG5pbnRlbF8wMl9rbm93biAoc2l6ZW9m IChpbnRlbF8wMl9rbm93bikgLyBzaXplb2YgKGludGVsXzAyX2tub3duIFswXSkpCi0KLXN0YXRp YyBpbnQKLWludGVsXzAyX2tub3duX2NvbXBhcmUgKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lk ICpwMikKLXsKLSAgY29uc3Qgc3RydWN0IGludGVsXzAyX2NhY2hlX2luZm8gKmkxOwotICBjb25z dCBzdHJ1Y3QgaW50ZWxfMDJfY2FjaGVfaW5mbyAqaTI7Ci0KLSAgaTEgPSAoY29uc3Qgc3RydWN0 IGludGVsXzAyX2NhY2hlX2luZm8gKikgcDE7Ci0gIGkyID0gKGNvbnN0IHN0cnVjdCBpbnRlbF8w Ml9jYWNoZV9pbmZvICopIHAyOwotCi0gIGlmIChpMS0+aWR4ID09IGkyLT5pZHgpCi0gICAgcmV0 dXJuIDA7Ci0KLSAgcmV0dXJuIGkxLT5pZHggPCBpMi0+aWR4ID8gLTEgOiAxOwotfQotCi0KLXN0 YXRpYyBsb25nIGludAotX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkKLWludGVsX2NoZWNrX3dv cmQgKGludCBuYW1lLCB1bnNpZ25lZCBpbnQgdmFsdWUsIGJvb2wgKmhhc19sZXZlbF8yLAotCQkg IGJvb2wgKm5vX2xldmVsXzJfb3JfMywKLQkJICBjb25zdCBzdHJ1Y3QgY3B1X2ZlYXR1cmVzICpj cHVfZmVhdHVyZXMpCi17Ci0gIGlmICgodmFsdWUgJiAweDgwMDAwMDAwKSAhPSAwKQotICAgIC8q IFRoZSByZWdpc3RlciB2YWx1ZSBpcyByZXNlcnZlZC4gICovCi0gICAgcmV0dXJuIDA7Ci0KLSAg LyogRm9sZCB0aGUgbmFtZS4gIFRoZSBfU0NfIGNvbnN0YW50cyBhcmUgYWx3YXlzIGluIHRoZSBv cmRlciBTSVpFLAotICAgICBBU1NPQywgTElORVNJWkUuICAqLwotICBpbnQgZm9sZGVkX3JlbF9u YW1lID0gKE0obmFtZSkgLyAzKSAqIDM7Ci0KLSAgd2hpbGUgKHZhbHVlICE9IDApCi0gICAgewot ICAgICAgdW5zaWduZWQgaW50IGJ5dGUgPSB2YWx1ZSAmIDB4ZmY7Ci0KLSAgICAgIGlmIChieXRl ID09IDB4NDApCi0JewotCSAgKm5vX2xldmVsXzJfb3JfMyA9IHRydWU7Ci0KLQkgIGlmIChmb2xk ZWRfcmVsX25hbWUgPT0gTShfU0NfTEVWRUwzX0NBQ0hFX1NJWkUpKQotCSAgICAvKiBObyBuZWVk IHRvIGxvb2sgZnVydGhlci4gICovCi0JICAgIGJyZWFrOwotCX0KLSAgICAgIGVsc2UgaWYgKGJ5 dGUgPT0gMHhmZikKLQl7Ci0JICAvKiBDUFVJRCBsZWFmIDB4NCBjb250YWlucyBhbGwgdGhlIGlu Zm9ybWF0aW9uLiAgV2UgbmVlZCB0bwotCSAgICAgaXRlcmF0ZSBvdmVyIGl0LiAgKi8KLQkgIHVu c2lnbmVkIGludCBlYXg7Ci0JICB1bnNpZ25lZCBpbnQgZWJ4OwotCSAgdW5zaWduZWQgaW50IGVj eDsKLQkgIHVuc2lnbmVkIGludCBlZHg7Ci0KLQkgIHVuc2lnbmVkIGludCByb3VuZCA9IDA7Ci0J ICB3aGlsZSAoMSkKLQkgICAgewotCSAgICAgIF9fY3B1aWRfY291bnQgKDQsIHJvdW5kLCBlYXgs IGVieCwgZWN4LCBlZHgpOwotCi0JICAgICAgZW51bSB7IG51bGwgPSAwLCBkYXRhID0gMSwgaW5z dCA9IDIsIHVuaSA9IDMgfSB0eXBlID0gZWF4ICYgMHgxZjsKLQkgICAgICBpZiAodHlwZSA9PSBu dWxsKQotCQkvKiBUaGF0IHdhcyB0aGUgZW5kLiAgKi8KLQkJYnJlYWs7Ci0KLQkgICAgICB1bnNp Z25lZCBpbnQgbGV2ZWwgPSAoZWF4ID4+IDUpICYgMHg3OwotCi0JICAgICAgaWYgKChsZXZlbCA9 PSAxICYmIHR5cGUgPT0gZGF0YQotCQkgICAmJiBmb2xkZWRfcmVsX25hbWUgPT0gTShfU0NfTEVW RUwxX0RDQUNIRV9TSVpFKSkKLQkJICB8fCAobGV2ZWwgPT0gMSAmJiB0eXBlID09IGluc3QKLQkJ ICAgICAgJiYgZm9sZGVkX3JlbF9uYW1lID09IE0oX1NDX0xFVkVMMV9JQ0FDSEVfU0laRSkpCi0J CSAgfHwgKGxldmVsID09IDIgJiYgZm9sZGVkX3JlbF9uYW1lID09IE0oX1NDX0xFVkVMMl9DQUNI RV9TSVpFKSkKLQkJICB8fCAobGV2ZWwgPT0gMyAmJiBmb2xkZWRfcmVsX25hbWUgPT0gTShfU0Nf TEVWRUwzX0NBQ0hFX1NJWkUpKQotCQkgIHx8IChsZXZlbCA9PSA0ICYmIGZvbGRlZF9yZWxfbmFt ZSA9PSBNKF9TQ19MRVZFTDRfQ0FDSEVfU0laRSkpKQotCQl7Ci0JCSAgdW5zaWduZWQgaW50IG9m ZnNldCA9IE0obmFtZSkgLSBmb2xkZWRfcmVsX25hbWU7Ci0KLQkJICBpZiAob2Zmc2V0ID09IDAp Ci0JCSAgICAvKiBDYWNoZSBzaXplLiAgKi8KLQkJICAgIHJldHVybiAoKChlYnggPj4gMjIpICsg MSkKLQkJCSAgICAqICgoKGVieCA+PiAxMikgJiAweDNmZikgKyAxKQotCQkJICAgICogKChlYngg JiAweGZmZikgKyAxKQotCQkJICAgICogKGVjeCArIDEpKTsKLQkJICBpZiAob2Zmc2V0ID09IDEp Ci0JCSAgICByZXR1cm4gKGVieCA+PiAyMikgKyAxOwotCi0JCSAgYXNzZXJ0IChvZmZzZXQgPT0g Mik7Ci0JCSAgcmV0dXJuIChlYnggJiAweGZmZikgKyAxOwotCQl9Ci0KLQkgICAgICArK3JvdW5k OwotCSAgICB9Ci0JICAvKiBUaGVyZSBpcyBubyBvdGhlciBjYWNoZSBpbmZvcm1hdGlvbiBhbnl3 aGVyZSBlbHNlLiAgKi8KLQkgIGJyZWFrOwotCX0KLSAgICAgIGVsc2UKLQl7Ci0JICBpZiAoYnl0 ZSA9PSAweDQ5ICYmIGZvbGRlZF9yZWxfbmFtZSA9PSBNKF9TQ19MRVZFTDNfQ0FDSEVfU0laRSkp Ci0JICAgIHsKLQkgICAgICAvKiBJbnRlbCByZXVzZWQgdGhpcyB2YWx1ZS4gIEZvciBmYW1pbHkg MTUsIG1vZGVsIDYgaXQKLQkJIHNwZWNpZmllcyB0aGUgM3JkIGxldmVsIGNhY2hlLiAgT3RoZXJ3 aXNlIHRoZSAybmQKLQkJIGxldmVsIGNhY2hlLiAgKi8KLQkgICAgICB1bnNpZ25lZCBpbnQgZmFt aWx5ID0gY3B1X2ZlYXR1cmVzLT5iYXNpYy5mYW1pbHk7Ci0JICAgICAgdW5zaWduZWQgaW50IG1v ZGVsID0gY3B1X2ZlYXR1cmVzLT5iYXNpYy5tb2RlbDsKLQotCSAgICAgIGlmIChmYW1pbHkgPT0g MTUgJiYgbW9kZWwgPT0gNikKLQkJewotCQkgIC8qIFRoZSBsZXZlbCAzIGNhY2hlIGlzIGVuY29k ZWQgZm9yIHRoaXMgbW9kZWwgbGlrZQotCQkgICAgIHRoZSBsZXZlbCAyIGNhY2hlIGlzIGZvciBv dGhlciBtb2RlbHMuICBQcmV0ZW5kCi0JCSAgICAgdGhlIGNhbGxlciBhc2tlZCBmb3IgdGhlIGxl dmVsIDIgY2FjaGUuICAqLwotCQkgIG5hbWUgPSAoX1NDX0xFVkVMMl9DQUNIRV9TSVpFCi0JCQkg ICsgKG5hbWUgLSBfU0NfTEVWRUwzX0NBQ0hFX1NJWkUpKTsKLQkJICBmb2xkZWRfcmVsX25hbWUg PSBNKF9TQ19MRVZFTDJfQ0FDSEVfU0laRSk7Ci0JCX0KLQkgICAgfQotCi0JICBzdHJ1Y3QgaW50 ZWxfMDJfY2FjaGVfaW5mbyAqZm91bmQ7Ci0JICBzdHJ1Y3QgaW50ZWxfMDJfY2FjaGVfaW5mbyBz ZWFyY2g7Ci0KLQkgIHNlYXJjaC5pZHggPSBieXRlOwotCSAgZm91bmQgPSBic2VhcmNoICgmc2Vh cmNoLCBpbnRlbF8wMl9rbm93biwgbmludGVsXzAyX2tub3duLAotCQkJICAgc2l6ZW9mIChpbnRl bF8wMl9rbm93blswXSksIGludGVsXzAyX2tub3duX2NvbXBhcmUpOwotCSAgaWYgKGZvdW5kICE9 IE5VTEwpCi0JICAgIHsKLQkgICAgICBpZiAoZm91bmQtPnJlbF9uYW1lID09IGZvbGRlZF9yZWxf bmFtZSkKLQkJewotCQkgIHVuc2lnbmVkIGludCBvZmZzZXQgPSBNKG5hbWUpIC0gZm9sZGVkX3Jl bF9uYW1lOwotCi0JCSAgaWYgKG9mZnNldCA9PSAwKQotCQkgICAgLyogQ2FjaGUgc2l6ZS4gICov Ci0JCSAgICByZXR1cm4gZm91bmQtPnNpemU7Ci0JCSAgaWYgKG9mZnNldCA9PSAxKQotCQkgICAg cmV0dXJuIGZvdW5kLT5hc3NvYzsKLQotCQkgIGFzc2VydCAob2Zmc2V0ID09IDIpOwotCQkgIHJl dHVybiBmb3VuZC0+bGluZXNpemU7Ci0JCX0KLQotCSAgICAgIGlmIChmb3VuZC0+cmVsX25hbWUg PT0gTShfU0NfTEVWRUwyX0NBQ0hFX1NJWkUpKQotCQkqaGFzX2xldmVsXzIgPSB0cnVlOwotCSAg ICB9Ci0JfQotCi0gICAgICAvKiBOZXh0IGJ5dGUgZm9yIHRoZSBuZXh0IHJvdW5kLiAgKi8KLSAg ICAgIHZhbHVlID4+PSA4OwotICAgIH0KLQotICAvKiBOb3RoaW5nIGZvdW5kLiAgKi8KLSAgcmV0 dXJuIDA7Ci19Ci0KLQotc3RhdGljIGxvbmcgaW50IF9fYXR0cmlidXRlX18gKChub2lubGluZSkp Ci1oYW5kbGVfaW50ZWwgKGludCBuYW1lLCBjb25zdCBzdHJ1Y3QgY3B1X2ZlYXR1cmVzICpjcHVf ZmVhdHVyZXMpCi17Ci0gIHVuc2lnbmVkIGludCBtYXhpZHggPSBjcHVfZmVhdHVyZXMtPmJhc2lj Lm1heF9jcHVpZDsKLQotICAvKiBSZXR1cm4gLTEgZm9yIG9sZGVyIENQVXMuICAqLwotICBpZiAo bWF4aWR4IDwgMikKLSAgICByZXR1cm4gLTE7Ci0KLSAgLyogT0ssIHdlIGNhbiB1c2UgdGhlIENQ VUlEIGluc3RydWN0aW9uIHRvIGdldCBhbGwgaW5mbyBhYm91dCB0aGUKLSAgICAgY2FjaGVzLiAg Ki8KLSAgdW5zaWduZWQgaW50IGNudCA9IDA7Ci0gIHVuc2lnbmVkIGludCBtYXggPSAxOwotICBs b25nIGludCByZXN1bHQgPSAwOwotICBib29sIG5vX2xldmVsXzJfb3JfMyA9IGZhbHNlOwotICBi b29sIGhhc19sZXZlbF8yID0gZmFsc2U7Ci0KLSAgd2hpbGUgKGNudCsrIDwgbWF4KQotICAgIHsK LSAgICAgIHVuc2lnbmVkIGludCBlYXg7Ci0gICAgICB1bnNpZ25lZCBpbnQgZWJ4OwotICAgICAg dW5zaWduZWQgaW50IGVjeDsKLSAgICAgIHVuc2lnbmVkIGludCBlZHg7Ci0gICAgICBfX2NwdWlk ICgyLCBlYXgsIGVieCwgZWN4LCBlZHgpOwotCi0gICAgICAvKiBUaGUgbG93IGJ5dGUgb2YgRUFY IGluIHRoZSBmaXJzdCByb3VuZCBjb250YWluIHRoZSBudW1iZXIgb2YKLQkgcm91bmRzIHdlIGhh dmUgdG8gbWFrZS4gIEF0IGxlYXN0IG9uZSwgdGhlIG9uZSB3ZSBhcmUgYWxyZWFkeQotCSBkb2lu Zy4gICovCi0gICAgICBpZiAoY250ID09IDEpCi0JewotCSAgbWF4ID0gZWF4ICYgMHhmZjsKLQkg IGVheCAmPSAweGZmZmZmZjAwOwotCX0KLQotICAgICAgLyogUHJvY2VzcyB0aGUgaW5kaXZpZHVh bCByZWdpc3RlcnMnIHZhbHVlLiAgKi8KLSAgICAgIHJlc3VsdCA9IGludGVsX2NoZWNrX3dvcmQg KG5hbWUsIGVheCwgJmhhc19sZXZlbF8yLAotCQkJCSAmbm9fbGV2ZWxfMl9vcl8zLCBjcHVfZmVh dHVyZXMpOwotICAgICAgaWYgKHJlc3VsdCAhPSAwKQotCXJldHVybiByZXN1bHQ7Ci0KLSAgICAg IHJlc3VsdCA9IGludGVsX2NoZWNrX3dvcmQgKG5hbWUsIGVieCwgJmhhc19sZXZlbF8yLAotCQkJ CSAmbm9fbGV2ZWxfMl9vcl8zLCBjcHVfZmVhdHVyZXMpOwotICAgICAgaWYgKHJlc3VsdCAhPSAw KQotCXJldHVybiByZXN1bHQ7Ci0KLSAgICAgIHJlc3VsdCA9IGludGVsX2NoZWNrX3dvcmQgKG5h bWUsIGVjeCwgJmhhc19sZXZlbF8yLAotCQkJCSAmbm9fbGV2ZWxfMl9vcl8zLCBjcHVfZmVhdHVy ZXMpOwotICAgICAgaWYgKHJlc3VsdCAhPSAwKQotCXJldHVybiByZXN1bHQ7Ci0KLSAgICAgIHJl c3VsdCA9IGludGVsX2NoZWNrX3dvcmQgKG5hbWUsIGVkeCwgJmhhc19sZXZlbF8yLAotCQkJCSAm bm9fbGV2ZWxfMl9vcl8zLCBjcHVfZmVhdHVyZXMpOwotICAgICAgaWYgKHJlc3VsdCAhPSAwKQot CXJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gIGlmIChuYW1lID49IF9TQ19MRVZFTDJfQ0FDSEVf U0laRSAmJiBuYW1lIDw9IF9TQ19MRVZFTDNfQ0FDSEVfTElORVNJWkUKLSAgICAgICYmIG5vX2xl dmVsXzJfb3JfMykKLSAgICByZXR1cm4gLTE7Ci0KLSAgcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGlj IGxvbmcgaW50IF9fYXR0cmlidXRlX18gKChub2lubGluZSkpCi1oYW5kbGVfYW1kIChpbnQgbmFt ZSkKLXsKLSAgdW5zaWduZWQgaW50IGVheDsKLSAgdW5zaWduZWQgaW50IGVieDsKLSAgdW5zaWdu ZWQgaW50IGVjeDsKLSAgdW5zaWduZWQgaW50IGVkeDsKLSAgX19jcHVpZCAoMHg4MDAwMDAwMCwg ZWF4LCBlYngsIGVjeCwgZWR4KTsKLQotICAvKiBObyBsZXZlbCA0IGNhY2hlICh5ZXQpLiAgKi8K LSAgaWYgKG5hbWUgPiBfU0NfTEVWRUwzX0NBQ0hFX0xJTkVTSVpFKQotICAgIHJldHVybiAwOwot Ci0gIHVuc2lnbmVkIGludCBmbiA9IDB4ODAwMDAwMDUgKyAobmFtZSA+PSBfU0NfTEVWRUwyX0NB Q0hFX1NJWkUpOwotICBpZiAoZWF4IDwgZm4pCi0gICAgcmV0dXJuIDA7Ci0KLSAgX19jcHVpZCAo Zm4sIGVheCwgZWJ4LCBlY3gsIGVkeCk7Ci0KLSAgaWYgKG5hbWUgPCBfU0NfTEVWRUwxX0RDQUNI RV9TSVpFKQotICAgIHsKLSAgICAgIG5hbWUgKz0gX1NDX0xFVkVMMV9EQ0FDSEVfU0laRSAtIF9T Q19MRVZFTDFfSUNBQ0hFX1NJWkU7Ci0gICAgICBlY3ggPSBlZHg7Ci0gICAgfQotCi0gIHN3aXRj aCAobmFtZSkKLSAgICB7Ci0gICAgY2FzZSBfU0NfTEVWRUwxX0RDQUNIRV9TSVpFOgotICAgICAg cmV0dXJuIChlY3ggPj4gMTQpICYgMHgzZmMwMDsKLQotICAgIGNhc2UgX1NDX0xFVkVMMV9EQ0FD SEVfQVNTT0M6Ci0gICAgICBlY3ggPj49IDE2OwotICAgICAgaWYgKChlY3ggJiAweGZmKSA9PSAw eGZmKQotCS8qIEZ1bGx5IGFzc29jaWF0aXZlLiAgKi8KLQlyZXR1cm4gKGVjeCA8PCAyKSAmIDB4 M2ZjMDA7Ci0gICAgICByZXR1cm4gZWN4ICYgMHhmZjsKLQotICAgIGNhc2UgX1NDX0xFVkVMMV9E Q0FDSEVfTElORVNJWkU6Ci0gICAgICByZXR1cm4gZWN4ICYgMHhmZjsKLQotICAgIGNhc2UgX1ND X0xFVkVMMl9DQUNIRV9TSVpFOgotICAgICAgcmV0dXJuIChlY3ggJiAweGYwMDApID09IDAgPyAw IDogKGVjeCA+PiA2KSAmIDB4M2ZmZmMwMDsKLQotICAgIGNhc2UgX1NDX0xFVkVMMl9DQUNIRV9B U1NPQzoKLSAgICAgIHN3aXRjaCAoKGVjeCA+PiAxMikgJiAweGYpCi0JewotCWNhc2UgMDoKLQlj YXNlIDE6Ci0JY2FzZSAyOgotCWNhc2UgNDoKLQkgIHJldHVybiAoZWN4ID4+IDEyKSAmIDB4ZjsK LQljYXNlIDY6Ci0JICByZXR1cm4gODsKLQljYXNlIDg6Ci0JICByZXR1cm4gMTY7Ci0JY2FzZSAx MDoKLQkgIHJldHVybiAzMjsKLQljYXNlIDExOgotCSAgcmV0dXJuIDQ4OwotCWNhc2UgMTI6Ci0J ICByZXR1cm4gNjQ7Ci0JY2FzZSAxMzoKLQkgIHJldHVybiA5NjsKLQljYXNlIDE0OgotCSAgcmV0 dXJuIDEyODsKLQljYXNlIDE1OgotCSAgcmV0dXJuICgoZWN4ID4+IDYpICYgMHgzZmZmYzAwKSAv IChlY3ggJiAweGZmKTsKLQlkZWZhdWx0OgotCSAgcmV0dXJuIDA7Ci0JfQotICAgICAgLyogTk9U UkVBQ0hFRCAqLwotCi0gICAgY2FzZSBfU0NfTEVWRUwyX0NBQ0hFX0xJTkVTSVpFOgotICAgICAg cmV0dXJuIChlY3ggJiAweGYwMDApID09IDAgPyAwIDogZWN4ICYgMHhmZjsKLQotICAgIGNhc2Ug X1NDX0xFVkVMM19DQUNIRV9TSVpFOgotICAgICAgcmV0dXJuIChlZHggJiAweGYwMDApID09IDAg PyAwIDogKGVkeCAmIDB4M2ZmYzAwMDApIDw8IDE7Ci0KLSAgICBjYXNlIF9TQ19MRVZFTDNfQ0FD SEVfQVNTT0M6Ci0gICAgICBzd2l0Y2ggKChlZHggPj4gMTIpICYgMHhmKQotCXsKLQljYXNlIDA6 Ci0JY2FzZSAxOgotCWNhc2UgMjoKLQljYXNlIDQ6Ci0JICByZXR1cm4gKGVkeCA+PiAxMikgJiAw eGY7Ci0JY2FzZSA2OgotCSAgcmV0dXJuIDg7Ci0JY2FzZSA4OgotCSAgcmV0dXJuIDE2OwotCWNh c2UgMTA6Ci0JICByZXR1cm4gMzI7Ci0JY2FzZSAxMToKLQkgIHJldHVybiA0ODsKLQljYXNlIDEy OgotCSAgcmV0dXJuIDY0OwotCWNhc2UgMTM6Ci0JICByZXR1cm4gOTY7Ci0JY2FzZSAxNDoKLQkg IHJldHVybiAxMjg7Ci0JY2FzZSAxNToKLQkgIHJldHVybiAoKGVkeCAmIDB4M2ZmYzAwMDApIDw8 IDEpIC8gKGVkeCAmIDB4ZmYpOwotCWRlZmF1bHQ6Ci0JICByZXR1cm4gMDsKLQl9Ci0gICAgICAv KiBOT1RSRUFDSEVEICovCi0KLSAgICBjYXNlIF9TQ19MRVZFTDNfQ0FDSEVfTElORVNJWkU6Ci0g ICAgICByZXR1cm4gKGVkeCAmIDB4ZjAwMCkgPT0gMCA/IDAgOiBlZHggJiAweGZmOwotCi0gICAg ZGVmYXVsdDoKLSAgICAgIGFzc2VydCAoISAiY2Fubm90IGhhcHBlbiIpOwotICAgIH0KLSAgcmV0 dXJuIC0xOwotfQotCi0KLXN0YXRpYyBsb25nIGludCBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUp KQotaGFuZGxlX3poYW94aW4gKGludCBuYW1lKQotewotICB1bnNpZ25lZCBpbnQgZWF4OwotICB1 bnNpZ25lZCBpbnQgZWJ4OwotICB1bnNpZ25lZCBpbnQgZWN4OwotICB1bnNpZ25lZCBpbnQgZWR4 OwotCi0gIGludCBmb2xkZWRfcmVsX25hbWUgPSAoTShuYW1lKSAvIDMpICogMzsKLQotICB1bnNp Z25lZCBpbnQgcm91bmQgPSAwOwotICB3aGlsZSAoMSkKLSAgICB7Ci0gICAgICBfX2NwdWlkX2Nv dW50ICg0LCByb3VuZCwgZWF4LCBlYngsIGVjeCwgZWR4KTsKLQotICAgICAgZW51bSB7IG51bGwg PSAwLCBkYXRhID0gMSwgaW5zdCA9IDIsIHVuaSA9IDMgfSB0eXBlID0gZWF4ICYgMHgxZjsKLSAg ICAgIGlmICh0eXBlID09IG51bGwpCi0gICAgICAgIGJyZWFrOwotCi0gICAgICB1bnNpZ25lZCBp bnQgbGV2ZWwgPSAoZWF4ID4+IDUpICYgMHg3OwotCi0gICAgICBpZiAoKGxldmVsID09IDEgJiYg dHlwZSA9PSBkYXRhCi0gICAgICAgICYmIGZvbGRlZF9yZWxfbmFtZSA9PSBNKF9TQ19MRVZFTDFf RENBQ0hFX1NJWkUpKQotICAgICAgICB8fCAobGV2ZWwgPT0gMSAmJiB0eXBlID09IGluc3QKLSAg ICAgICAgICAgICYmIGZvbGRlZF9yZWxfbmFtZSA9PSBNKF9TQ19MRVZFTDFfSUNBQ0hFX1NJWkUp KQotICAgICAgICB8fCAobGV2ZWwgPT0gMiAmJiBmb2xkZWRfcmVsX25hbWUgPT0gTShfU0NfTEVW RUwyX0NBQ0hFX1NJWkUpKQotICAgICAgICB8fCAobGV2ZWwgPT0gMyAmJiBmb2xkZWRfcmVsX25h bWUgPT0gTShfU0NfTEVWRUwzX0NBQ0hFX1NJWkUpKSkKLSAgICAgICAgewotICAgICAgICAgIHVu c2lnbmVkIGludCBvZmZzZXQgPSBNKG5hbWUpIC0gZm9sZGVkX3JlbF9uYW1lOwotCi0gICAgICAg ICAgaWYgKG9mZnNldCA9PSAwKQotICAgICAgICAgICAgLyogQ2FjaGUgc2l6ZS4gICovCi0gICAg ICAgICAgICByZXR1cm4gKCgoZWJ4ID4+IDIyKSArIDEpCi0gICAgICAgICAgICAgICAgKiAoKChl YnggPj4gMTIpICYgMHgzZmYpICsgMSkKLSAgICAgICAgICAgICAgICAqICgoZWJ4ICYgMHhmZmYp ICsgMSkKLSAgICAgICAgICAgICAgICAqIChlY3ggKyAxKSk7Ci0gICAgICAgICAgaWYgKG9mZnNl dCA9PSAxKQotICAgICAgICAgICAgcmV0dXJuIChlYnggPj4gMjIpICsgMTsKLQotICAgICAgICAg IGFzc2VydCAob2Zmc2V0ID09IDIpOwotICAgICAgICAgIHJldHVybiAoZWJ4ICYgMHhmZmYpICsg MTsKLSAgICAgICAgfQotCi0gICAgICArK3JvdW5kOwotICAgIH0KLQotICAvKiBOb3RoaW5nIGZv dW5kLiAgKi8KLSAgcmV0dXJuIDA7Ci19Ci0KKyNpbmNsdWRlIDxsZHNvZGVmcy5oPgorI2luY2x1 ZGUgPGRsLWNhY2hlaW5mby5oPgogCiAvKiBHZXQgdGhlIHZhbHVlIG9mIHRoZSBzeXN0ZW0gdmFy aWFibGUgTkFNRS4gICovCiBsb25nIGludApAQCAtNTA5LDM5NSArNDQsMTcgQEAgX19jYWNoZV9z eXNjb25mIChpbnQgbmFtZSkKICAgcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBTSEFSRUQKKy8qIE5C OiBJbiBsaWJjLmEsIGNhY2hlaW5mby5oIGlzIGluY2x1ZGVkIGluIGxpYmMtc3RhcnQuYy4gIElu IGxpYmMuc28sCisgICBjYWNoZWluZm8uaCBpcyBpbmNsdWRlZCBoZXJlIGFuZCBjYWxsIGluaXRf Y2FjaGVpbmZvIGJ5IGluaXRpYWxpemluZworICAgYSBkdW1teSBmdW5jdGlvbiBwb2ludGVyIHZp YSBJRlVOQyByZWxvY2F0aW9uIGFmdGVyIENQVSBmZWF0dXJlcyBpbgorICAgbGQuc28gaGF2ZSBi ZWVuIGluaXRpYWxpemVkIGJ5IERMX1BMQVRGT1JNX0lOSVQgb3IgSUZVTkMgcmVsb2NhdGlvbi4g ICovCisjIGluY2x1ZGUgPGNhY2hlaW5mby5oPgorIyBpbmNsdWRlIDxpZnVuYy1pbml0Lmg+CiAK LS8qIERhdGEgY2FjaGUgc2l6ZSBmb3IgdXNlIGluIG1lbW9yeSBhbmQgc3RyaW5nIHJvdXRpbmVz LCB0eXBpY2FsbHkKLSAgIEwxIHNpemUsIHJvdW5kZWQgdG8gbXVsdGlwbGUgb2YgMjU2IGJ5dGVz LiAgKi8KLWxvbmcgaW50IF9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmIGF0dHJpYnV0ZV9oaWRk ZW4gPSAzMiAqIDEwMjQgLyAyOwotbG9uZyBpbnQgX194ODZfZGF0YV9jYWNoZV9zaXplIGF0dHJp YnV0ZV9oaWRkZW4gPSAzMiAqIDEwMjQ7Ci0vKiBTaW1pbGFyIHRvIF9feDg2X2RhdGFfY2FjaGVf c2l6ZV9oYWxmLCBidXQgbm90IHJvdW5kZWQuICAqLwotbG9uZyBpbnQgX194ODZfcmF3X2RhdGFf Y2FjaGVfc2l6ZV9oYWxmIGF0dHJpYnV0ZV9oaWRkZW4gPSAzMiAqIDEwMjQgLyAyOwotLyogU2lt aWxhciB0byBfX3g4Nl9kYXRhX2NhY2hlX3NpemUsIGJ1dCBub3Qgcm91bmRlZC4gICovCi1sb25n IGludCBfX3g4Nl9yYXdfZGF0YV9jYWNoZV9zaXplIGF0dHJpYnV0ZV9oaWRkZW4gPSAzMiAqIDEw MjQ7Ci0vKiBTaGFyZWQgY2FjaGUgc2l6ZSBmb3IgdXNlIGluIG1lbW9yeSBhbmQgc3RyaW5nIHJv dXRpbmVzLCB0eXBpY2FsbHkKLSAgIEwyIG9yIEwzIHNpemUsIHJvdW5kZWQgdG8gbXVsdGlwbGUg b2YgMjU2IGJ5dGVzLiAgKi8KLWxvbmcgaW50IF9feDg2X3NoYXJlZF9jYWNoZV9zaXplX2hhbGYg YXR0cmlidXRlX2hpZGRlbiA9IDEwMjQgKiAxMDI0IC8gMjsKLWxvbmcgaW50IF9feDg2X3NoYXJl ZF9jYWNoZV9zaXplIGF0dHJpYnV0ZV9oaWRkZW4gPSAxMDI0ICogMTAyNDsKLS8qIFNpbWlsYXIg dG8gX194ODZfc2hhcmVkX2NhY2hlX3NpemVfaGFsZiwgYnV0IG5vdCByb3VuZGVkLiAgKi8KLWxv bmcgaW50IF9feDg2X3Jhd19zaGFyZWRfY2FjaGVfc2l6ZV9oYWxmIGF0dHJpYnV0ZV9oaWRkZW4g PSAxMDI0ICogMTAyNCAvIDI7Ci0vKiBTaW1pbGFyIHRvIF9feDg2X3NoYXJlZF9jYWNoZV9zaXpl LCBidXQgbm90IHJvdW5kZWQuICAqLwotbG9uZyBpbnQgX194ODZfcmF3X3NoYXJlZF9jYWNoZV9z aXplIGF0dHJpYnV0ZV9oaWRkZW4gPSAxMDI0ICogMTAyNDsKLQotLyogVGhyZXNob2xkIHRvIHVz ZSBub24gdGVtcG9yYWwgc3RvcmUuICAqLwotbG9uZyBpbnQgX194ODZfc2hhcmVkX25vbl90ZW1w b3JhbF90aHJlc2hvbGQgYXR0cmlidXRlX2hpZGRlbjsKLQotLyogVGhyZXNob2xkIHRvIHVzZSBF bmhhbmNlZCBSRVAgTU9WU0IuICAqLwotbG9uZyBpbnQgX194ODZfcmVwX21vdnNiX3RocmVzaG9s ZCBhdHRyaWJ1dGVfaGlkZGVuID0gMjA0ODsKLQotLyogVGhyZXNob2xkIHRvIHVzZSBFbmhhbmNl ZCBSRVAgU1RPU0IuICAqLwotbG9uZyBpbnQgX194ODZfcmVwX3N0b3NiX3RocmVzaG9sZCBhdHRy aWJ1dGVfaGlkZGVuID0gMjA0ODsKLQotCi1zdGF0aWMgdm9pZAotZ2V0X2NvbW1vbl9jYWNoZV9p bmZvIChsb25nIGludCAqc2hhcmVkX3B0ciwgdW5zaWduZWQgaW50ICp0aHJlYWRzX3B0ciwKLSAg ICAgICAgICAgICAgICBsb25nIGludCBjb3JlKQotewotICB1bnNpZ25lZCBpbnQgZWF4OwotICB1 bnNpZ25lZCBpbnQgZWJ4OwotICB1bnNpZ25lZCBpbnQgZWN4OwotICB1bnNpZ25lZCBpbnQgZWR4 OwotCi0gIC8qIE51bWJlciBvZiBsb2dpY2FsIHByb2Nlc3NvcnMgc2hhcmluZyBMMiBjYWNoZS4g ICovCi0gIGludCB0aHJlYWRzX2wyOwotCi0gIC8qIE51bWJlciBvZiBsb2dpY2FsIHByb2Nlc3Nv cnMgc2hhcmluZyBMMyBjYWNoZS4gICovCi0gIGludCB0aHJlYWRzX2wzOwotCi0gIGNvbnN0IHN0 cnVjdCBjcHVfZmVhdHVyZXMgKmNwdV9mZWF0dXJlcyA9IF9fZ2V0X2NwdV9mZWF0dXJlcyAoKTsK LSAgaW50IG1heF9jcHVpZCA9IGNwdV9mZWF0dXJlcy0+YmFzaWMubWF4X2NwdWlkOwotICB1bnNp Z25lZCBpbnQgZmFtaWx5ID0gY3B1X2ZlYXR1cmVzLT5iYXNpYy5mYW1pbHk7Ci0gIHVuc2lnbmVk IGludCBtb2RlbCA9IGNwdV9mZWF0dXJlcy0+YmFzaWMubW9kZWw7Ci0gIGxvbmcgaW50IHNoYXJl ZCA9ICpzaGFyZWRfcHRyOwotICB1bnNpZ25lZCBpbnQgdGhyZWFkcyA9ICp0aHJlYWRzX3B0cjsK LSAgYm9vbCBpbmNsdXNpdmVfY2FjaGUgPSB0cnVlOwotICBib29sIHN1cHBvcnRfY291bnRfbWFz ayA9IHRydWU7Ci0KLSAgLyogVHJ5IEwzIGZpcnN0LiAgKi8KLSAgdW5zaWduZWQgaW50IGxldmVs ID0gMzsKLQotICBpZiAoY3B1X2ZlYXR1cmVzLT5iYXNpYy5raW5kID09IGFyY2hfa2luZF96aGFv eGluICYmIGZhbWlseSA9PSA2KQotICAgIHN1cHBvcnRfY291bnRfbWFzayA9IGZhbHNlOwotCi0g IGlmIChzaGFyZWQgPD0gMCkKLSAgICB7Ci0gICAgICAvKiBUcnkgTDIgb3RoZXJ3aXNlLiAgKi8K LSAgICAgIGxldmVsICA9IDI7Ci0gICAgICBzaGFyZWQgPSBjb3JlOwotICAgICAgdGhyZWFkc19s MiA9IDA7Ci0gICAgICB0aHJlYWRzX2wzID0gLTE7Ci0gICAgfQotICBlbHNlCi0gICAgewotICAg ICAgdGhyZWFkc19sMiA9IDA7Ci0gICAgICB0aHJlYWRzX2wzID0gMDsKLSAgICB9Ci0KLSAgLyog QSB2YWx1ZSBvZiAwIGZvciB0aGUgSFRUIGJpdCBpbmRpY2F0ZXMgdGhlcmUgaXMgb25seSBhIHNp bmdsZQotICAgICBsb2dpY2FsIHByb2Nlc3Nvci4gICovCi0gIGlmIChDUFVfRkVBVFVSRV9VU0FC TEUgKEhUVCkpCi0gICAgewotICAgICAgLyogRmlndXJlIG91dCB0aGUgbnVtYmVyIG9mIGxvZ2lj YWwgdGhyZWFkcyB0aGF0IHNoYXJlIHRoZQotICAgICAgICAgaGlnaGVzdCBjYWNoZSBsZXZlbC4g ICovCi0gICAgICBpZiAobWF4X2NwdWlkID49IDQpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnQg aSA9IDA7Ci0KLSAgICAgICAgICAvKiBRdWVyeSB1bnRpbCBjYWNoZSBsZXZlbCAyIGFuZCAzIGFy ZSBlbnVtZXJhdGVkLiAgKi8KLSAgICAgICAgICBpbnQgY2hlY2sgPSAweDEgfCAodGhyZWFkc19s MyA9PSAwKSA8PCAxOwotICAgICAgICAgIGRvCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg IF9fY3B1aWRfY291bnQgKDQsIGkrKywgZWF4LCBlYngsIGVjeCwgZWR4KTsKLQotICAgICAgICAg ICAgICAvKiBUaGVyZSBzZWVtcyB0byBiZSBhIGJ1ZyBpbiBhdCBsZWFzdCBzb21lIFBlbnRpdW0g RHMKLSAgICAgICAgICAgICAgICAgd2hpY2ggc29tZXRpbWVzIGZhaWwgdG8gaXRlcmF0ZSBhbGwg Y2FjaGUgcGFyYW1ldGVycy4KLSAgICAgICAgICAgICAgICAgRG8gbm90IGxvb3AgaW5kZWZpbml0 ZWx5IGhlcmUsIHN0b3AgaW4gdGhpcyBjYXNlIGFuZAotICAgICAgICAgICAgICAgICBhc3N1bWUg dGhlcmUgaXMgbm8gc3VjaCBpbmZvcm1hdGlvbi4gICovCi0gICAgICAgICAgICAgIGlmIChjcHVf ZmVhdHVyZXMtPmJhc2ljLmtpbmQgPT0gYXJjaF9raW5kX2ludGVsCi0gICAgICAgICAgICAgICAg ICAmJiAoZWF4ICYgMHgxZikgPT0gMCApCi0gICAgICAgICAgICAgICAgZ290byBpbnRlbF9idWdf bm9fY2FjaGVfaW5mbzsKLQotICAgICAgICAgICAgICBzd2l0Y2ggKChlYXggPj4gNSkgJiAweDcp Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAg ICAgICAgICAgIGlmICgoY2hlY2sgJiAweDEpKQotICAgICAgICAgICAgICAgICAgICAgIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEdldCBtYXhpbXVtIG51bWJlciBvZiBsb2dpY2FsIHBy b2Nlc3NvcnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJpbmcgTDIgY2FjaGUuICAq LwotICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkc19sMiA9IChlYXggPj4gMTQpICYgMHgz ZmY7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGVjayAmPSB+MHgxOwotICAgICAgICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg ICBjYXNlIDM6Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoY2hlY2sgJiAoMHgxIDw8IDEpKSkK LSAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBHZXQg bWF4aW11bSBudW1iZXIgb2YgbG9naWNhbCBwcm9jZXNzb3JzCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICBzaGFyaW5nIEwzIGNhY2hlLiAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHRo cmVhZHNfbDMgPSAoZWF4ID4+IDE0KSAmIDB4M2ZmOwotCi0gICAgICAgICAgICAgICAgICAgICAg ICAvKiBDaGVjayBpZiBMMiBhbmQgTDMgY2FjaGVzIGFyZSBpbmNsdXNpdmUuICAqLwotICAgICAg ICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlX2NhY2hlID0gKGVkeCAmIDB4MikgIT0gMDsKLSAg ICAgICAgICAgICAgICAgICAgICAgIGNoZWNrICY9IH4oMHgxIDw8IDEpOwotICAgICAgICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgfQotICAgICAgICAgIHdoaWxlIChjaGVjayk7Ci0KLSAgICAgICAgICAv KiBJZiBtYXhfY3B1aWQgPj0gMTEsIFRIUkVBRFNfTDIvVEhSRUFEU19MMyBhcmUgdGhlIG1heGlt dW0KLSAgICAgICAgICAgICBudW1iZXJzIG9mIGFkZHJlc3NhYmxlIElEcyBmb3IgbG9naWNhbCBw cm9jZXNzb3JzIHNoYXJpbmcKLSAgICAgICAgICAgICB0aGUgY2FjaGUsIGluc3RlYWQgb2YgdGhl IG1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMKLSAgICAgICAgICAgICBzaGFyaW5nIHRoZSBjYWNo ZS4gICovCi0gICAgICAgICAgaWYgKG1heF9jcHVpZCA+PSAxMSAmJiBzdXBwb3J0X2NvdW50X21h c2spCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8qIEZpbmQgdGhlIG51bWJlciBvZiBs b2dpY2FsIHByb2Nlc3NvcnMgc2hpcHBlZCBpbgotICAgICAgICAgICAgICAgICBvbmUgY29yZSBh bmQgYXBwbHkgY291bnQgbWFzay4gICovCi0gICAgICAgICAgICAgIGkgPSAwOwotCi0gICAgICAg ICAgICAgIC8qIENvdW50IFNNVCBvbmx5IGlmIHRoZXJlIGlzIEwzIGNhY2hlLiAgQWx3YXlzIGNv dW50Ci0gICAgICAgICAgICAgICAgIGNvcmUgaWYgdGhlcmUgaXMgbm8gTDMgY2FjaGUuICAqLwot ICAgICAgICAgICAgICBpbnQgY291bnQgPSAoKHRocmVhZHNfbDIgPiAwICYmIGxldmVsID09IDMp Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgodGhyZWFkc19sMyA+IDAKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8fCAodGhyZWFkc19sMiA+IDAgJiYgbGV2ZWwgPT0gMikp IDw8IDEpKTsKLQotICAgICAgICAgICAgICB3aGlsZSAoY291bnQpCi0gICAgICAgICAgICAgICAg ewotICAgICAgICAgICAgICAgICAgX19jcHVpZF9jb3VudCAoMTEsIGkrKywgZWF4LCBlYngsIGVj eCwgZWR4KTsKLQotICAgICAgICAgICAgICAgICAgaW50IHNoaXBwZWQgPSBlYnggJiAweGZmOwot ICAgICAgICAgICAgICAgICAgaW50IHR5cGUgPSBlY3ggJiAweGZmMDA7Ci0gICAgICAgICAgICAg ICAgICBpZiAoc2hpcHBlZCA9PSAwIHx8IHR5cGUgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IDB4MTAwKQotICAgICAg ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgLyogQ291bnQgU01ULiAgKi8K LSAgICAgICAgICAgICAgICAgICAgICBpZiAoKGNvdW50ICYgMHgxKSkKLSAgICAgICAgICAgICAg ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50X21hc2s7Ci0K LSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29tcHV0ZSBjb3VudCBtYXNrLiAgKi8KLSAg ICAgICAgICAgICAgICAgICAgICAgICAgYXNtICgiYnNyICUxLCAlMCIKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA6ICI9ciIgKGNvdW50X21hc2spIDogImciICh0aHJlYWRzX2wyKSk7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50X21hc2sgPSB+KC0xIDw8IChjb3VudF9t YXNrICsgMSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWRzX2wyID0gKHNoaXBw ZWQgLSAxKSAmIGNvdW50X21hc2s7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICY9 IH4weDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gMHgyMDApCi0gICAgICAgICAgICAg ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAvKiBDb3VudCBjb3JlLiAgKi8KLSAgICAg ICAgICAgICAgICAgICAgICBpZiAoKGNvdW50ICYgKDB4MSA8PCAxKSkpCi0gICAgICAgICAgICAg ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudF9tYXNrOwot ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGhyZWFkc19jb3JlCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgPSAobGV2ZWwgPT0gMiA/IHRocmVhZHNfbDIgOiB0aHJlYWRzX2wzKTsK LQotICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21wdXRlIGNvdW50IG1hc2suICAqLwot ICAgICAgICAgICAgICAgICAgICAgICAgICBhc20gKCJic3IgJTEsICUwIgotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDogIj1yIiAoY291bnRfbWFzaykgOiAiZyIgKHRocmVhZHNfY29y ZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudF9tYXNrID0gfigtMSA8PCAoY291 bnRfbWFzayArIDEpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkc19jb3JlID0g KHNoaXBwZWQgLSAxKSAmIGNvdW50X21hc2s7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGlm IChsZXZlbCA9PSAyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZHNfbDIgPSB0 aHJlYWRzX2NvcmU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0aHJlYWRzX2wzID0gdGhyZWFkc19jb3JlOwotICAgICAgICAgICAg ICAgICAgICAgICAgICBjb3VudCAmPSB+KDB4MSA8PCAxKTsKLSAgICAgICAgICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIH0KLSAgICAgICAgICBpZiAodGhyZWFkc19sMiA+IDApCi0gICAgICAgICAgICB0aHJlYWRz X2wyICs9IDE7Ci0gICAgICAgICAgaWYgKHRocmVhZHNfbDMgPiAwKQotICAgICAgICAgICAgdGhy ZWFkc19sMyArPSAxOwotICAgICAgICAgIGlmIChsZXZlbCA9PSAyKQotICAgICAgICAgICAgewot ICAgICAgICAgICAgICBpZiAodGhyZWFkc19sMikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg ICAgICAgICAgICB0aHJlYWRzID0gdGhyZWFkc19sMjsKLSAgICAgICAgICAgICAgICAgIGlmIChj cHVfZmVhdHVyZXMtPmJhc2ljLmtpbmQgPT0gYXJjaF9raW5kX2ludGVsCi0gICAgICAgICAgICAg ICAgICAgICAgJiYgdGhyZWFkcyA+IDIKLSAgICAgICAgICAgICAgICAgICAgICAmJiBmYW1pbHkg PT0gNikKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChtb2RlbCkKLSAgICAgICAgICAgICAg ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4Mzc6Ci0gICAgICAgICAg ICAgICAgICAgICAgICBjYXNlIDB4NGE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4 NGQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4NWE6Ci0gICAgICAgICAgICAgICAg ICAgICAgICBjYXNlIDB4NWQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNpbHZlcm1v bnQgaGFzIEwyIGNhY2hlIHNoYXJlZCBieSAyIGNvcmVzLiAgKi8KLSAgICAgICAgICAgICAgICAg ICAgICAgICAgdGhyZWFkcyA9IDI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmICh0aHJlYWRzX2wzKQotICAgICAgICAgICAg dGhyZWFkcyA9IHRocmVhZHNfbDM7Ci0gICAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgewot aW50ZWxfYnVnX25vX2NhY2hlX2luZm86Ci0gICAgICAgICAgLyogQXNzdW1lIHRoYXQgYWxsIGxv Z2ljYWwgdGhyZWFkcyBzaGFyZSB0aGUgaGlnaGVzdCBjYWNoZQotICAgICAgICAgICAgIGxldmVs LiAgKi8KLSAgICAgICAgICB0aHJlYWRzCi0gICAgICAgICAgICA9ICgoY3B1X2ZlYXR1cmVzLT5m ZWF0dXJlc1tDT01NT05fQ1BVSURfSU5ERVhfMV0uY3B1aWQuZWJ4Ci0gICAgICAgICAgICAgICAg Pj4gMTYpICYgMHhmZik7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBDYXAgdXNhZ2Ugb2YgaGln aGVzdCBjYWNoZSBsZXZlbCB0byB0aGUgbnVtYmVyIG9mIHN1cHBvcnRlZAotICAgICAgICAgICB0 aHJlYWRzLiAgKi8KLSAgICAgICAgaWYgKHNoYXJlZCA+IDAgJiYgdGhyZWFkcyA+IDApCi0gICAg ICAgICAgc2hhcmVkIC89IHRocmVhZHM7Ci0gICAgfQotCi0gIC8qIEFjY291bnQgZm9yIG5vbi1p bmNsdXNpdmUgTDIgYW5kIEwzIGNhY2hlcy4gICovCi0gIGlmICghaW5jbHVzaXZlX2NhY2hlKQot ICAgIHsKLSAgICAgIGlmICh0aHJlYWRzX2wyID4gMCkKLSAgICAgICAgY29yZSAvPSB0aHJlYWRz X2wyOwotICAgICAgc2hhcmVkICs9IGNvcmU7Ci0gICAgfQotCi0gICpzaGFyZWRfcHRyID0gc2hh cmVkOwotICAqdGhyZWFkc19wdHIgPSB0aHJlYWRzOwotfQotCi0KLXN0YXRpYyB2b2lkCi1fX2F0 dHJpYnV0ZV9fKChjb25zdHJ1Y3RvcikpCi1pbml0X2NhY2hlaW5mbyAodm9pZCkKLXsKLSAgLyog RmluZCBvdXQgd2hhdCBicmFuZCBvZiBwcm9jZXNzb3IuICAqLwotICB1bnNpZ25lZCBpbnQgZWJ4 OwotICB1bnNpZ25lZCBpbnQgZWN4OwotICB1bnNpZ25lZCBpbnQgZWR4OwotICBpbnQgbWF4X2Nw dWlkX2V4OwotICBsb25nIGludCBkYXRhID0gLTE7Ci0gIGxvbmcgaW50IHNoYXJlZCA9IC0xOwot ICBsb25nIGludCBjb3JlOwotICB1bnNpZ25lZCBpbnQgdGhyZWFkcyA9IDA7Ci0gIGNvbnN0IHN0 cnVjdCBjcHVfZmVhdHVyZXMgKmNwdV9mZWF0dXJlcyA9IF9fZ2V0X2NwdV9mZWF0dXJlcyAoKTsK LQotICBpZiAoY3B1X2ZlYXR1cmVzLT5iYXNpYy5raW5kID09IGFyY2hfa2luZF9pbnRlbCkKLSAg ICB7Ci0gICAgICBkYXRhID0gaGFuZGxlX2ludGVsIChfU0NfTEVWRUwxX0RDQUNIRV9TSVpFLCBj cHVfZmVhdHVyZXMpOwotICAgICAgY29yZSA9IGhhbmRsZV9pbnRlbCAoX1NDX0xFVkVMMl9DQUNI RV9TSVpFLCBjcHVfZmVhdHVyZXMpOwotICAgICAgc2hhcmVkID0gaGFuZGxlX2ludGVsIChfU0Nf TEVWRUwzX0NBQ0hFX1NJWkUsIGNwdV9mZWF0dXJlcyk7Ci0KLSAgICAgIGdldF9jb21tb25fY2Fj aGVfaW5mbyAoJnNoYXJlZCwgJnRocmVhZHMsIGNvcmUpOwotICAgIH0KLSAgZWxzZSBpZiAoY3B1 X2ZlYXR1cmVzLT5iYXNpYy5raW5kID09IGFyY2hfa2luZF96aGFveGluKQotICAgIHsKLSAgICAg IGRhdGEgPSBoYW5kbGVfemhhb3hpbiAoX1NDX0xFVkVMMV9EQ0FDSEVfU0laRSk7Ci0gICAgICBj b3JlID0gaGFuZGxlX3poYW94aW4gKF9TQ19MRVZFTDJfQ0FDSEVfU0laRSk7Ci0gICAgICBzaGFy ZWQgPSBoYW5kbGVfemhhb3hpbiAoX1NDX0xFVkVMM19DQUNIRV9TSVpFKTsKLQotICAgICAgZ2V0 X2NvbW1vbl9jYWNoZV9pbmZvICgmc2hhcmVkLCAmdGhyZWFkcywgY29yZSk7Ci0gICAgfQotICBl bHNlIGlmIChjcHVfZmVhdHVyZXMtPmJhc2ljLmtpbmQgPT0gYXJjaF9raW5kX2FtZCkKLSAgICB7 Ci0gICAgICBkYXRhICAgPSBoYW5kbGVfYW1kIChfU0NfTEVWRUwxX0RDQUNIRV9TSVpFKTsKLSAg ICAgIGxvbmcgaW50IGNvcmUgPSBoYW5kbGVfYW1kIChfU0NfTEVWRUwyX0NBQ0hFX1NJWkUpOwot ICAgICAgc2hhcmVkID0gaGFuZGxlX2FtZCAoX1NDX0xFVkVMM19DQUNIRV9TSVpFKTsKLQotICAg ICAgLyogR2V0IG1heGltdW0gZXh0ZW5kZWQgZnVuY3Rpb24uICovCi0gICAgICBfX2NwdWlkICgw eDgwMDAwMDAwLCBtYXhfY3B1aWRfZXgsIGVieCwgZWN4LCBlZHgpOwotCi0gICAgICBpZiAoc2hh cmVkIDw9IDApCi0JLyogTm8gc2hhcmVkIEwzIGNhY2hlLiAgQWxsIHdlIGhhdmUgaXMgdGhlIEwy IGNhY2hlLiAgKi8KLQlzaGFyZWQgPSBjb3JlOwotICAgICAgZWxzZQotCXsKLQkgIC8qIEZpZ3Vy ZSBvdXQgdGhlIG51bWJlciBvZiBsb2dpY2FsIHRocmVhZHMgdGhhdCBzaGFyZSBMMy4gICovCi0J ICBpZiAobWF4X2NwdWlkX2V4ID49IDB4ODAwMDAwMDgpCi0JICAgIHsKLQkgICAgICAvKiBHZXQg d2lkdGggb2YgQVBJQyBJRC4gICovCi0JICAgICAgX19jcHVpZCAoMHg4MDAwMDAwOCwgbWF4X2Nw dWlkX2V4LCBlYngsIGVjeCwgZWR4KTsKLQkgICAgICB0aHJlYWRzID0gMSA8PCAoKGVjeCA+PiAx MikgJiAweDBmKTsKLQkgICAgfQotCi0JICBpZiAodGhyZWFkcyA9PSAwKQotCSAgICB7Ci0JICAg ICAgLyogSWYgQVBJQyBJRCB3aWR0aCBpcyBub3QgYXZhaWxhYmxlLCB1c2UgbG9naWNhbAotCQkg cHJvY2Vzc29yIGNvdW50LiAgKi8KLQkgICAgICBfX2NwdWlkICgweDAwMDAwMDAxLCBtYXhfY3B1 aWRfZXgsIGVieCwgZWN4LCBlZHgpOwotCi0JICAgICAgaWYgKChlZHggJiAoMSA8PCAyOCkpICE9 IDApCi0JCXRocmVhZHMgPSAoZWJ4ID4+IDE2KSAmIDB4ZmY7Ci0JICAgIH0KLQotCSAgLyogQ2Fw IHVzYWdlIG9mIGhpZ2hlc3QgY2FjaGUgbGV2ZWwgdG8gdGhlIG51bWJlciBvZgotCSAgICAgc3Vw cG9ydGVkIHRocmVhZHMuICAqLwotCSAgaWYgKHRocmVhZHMgPiAwKQotCSAgICBzaGFyZWQgLz0g dGhyZWFkczsKLQotCSAgLyogQWNjb3VudCBmb3IgZXhjbHVzaXZlIEwyIGFuZCBMMyBjYWNoZXMu ICAqLwotCSAgc2hhcmVkICs9IGNvcmU7Ci0JfQotICAgIH0KLQotICBpZiAoY3B1X2ZlYXR1cmVz LT5kYXRhX2NhY2hlX3NpemUgIT0gMCkKLSAgICBkYXRhID0gY3B1X2ZlYXR1cmVzLT5kYXRhX2Nh Y2hlX3NpemU7Ci0KLSAgaWYgKGRhdGEgPiAwKQotICAgIHsKLSAgICAgIF9feDg2X3Jhd19kYXRh X2NhY2hlX3NpemVfaGFsZiA9IGRhdGEgLyAyOwotICAgICAgX194ODZfcmF3X2RhdGFfY2FjaGVf c2l6ZSA9IGRhdGE7Ci0gICAgICAvKiBSb3VuZCBkYXRhIGNhY2hlIHNpemUgdG8gbXVsdGlwbGUg b2YgMjU2IGJ5dGVzLiAgKi8KLSAgICAgIGRhdGEgPSBkYXRhICYgfjI1NUw7Ci0gICAgICBfX3g4 Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiA9IGRhdGEgLyAyOwotICAgICAgX194ODZfZGF0YV9jYWNo ZV9zaXplID0gZGF0YTsKLSAgICB9Ci0KLSAgaWYgKGNwdV9mZWF0dXJlcy0+c2hhcmVkX2NhY2hl X3NpemUgIT0gMCkKLSAgICBzaGFyZWQgPSBjcHVfZmVhdHVyZXMtPnNoYXJlZF9jYWNoZV9zaXpl OwotCi0gIGlmIChzaGFyZWQgPiAwKQotICAgIHsKLSAgICAgIF9feDg2X3Jhd19zaGFyZWRfY2Fj aGVfc2l6ZV9oYWxmID0gc2hhcmVkIC8gMjsKLSAgICAgIF9feDg2X3Jhd19zaGFyZWRfY2FjaGVf c2l6ZSA9IHNoYXJlZDsKLSAgICAgIC8qIFJvdW5kIHNoYXJlZCBjYWNoZSBzaXplIHRvIG11bHRp cGxlIG9mIDI1NiBieXRlcy4gICovCi0gICAgICBzaGFyZWQgPSBzaGFyZWQgJiB+MjU1TDsKLSAg ICAgIF9feDg2X3NoYXJlZF9jYWNoZV9zaXplX2hhbGYgPSBzaGFyZWQgLyAyOwotICAgICAgX194 ODZfc2hhcmVkX2NhY2hlX3NpemUgPSBzaGFyZWQ7Ci0gICAgfQotCi0gIC8qIFRoZSBkZWZhdWx0 IHNldHRpbmcgZm9yIHRoZSBub25fdGVtcG9yYWwgdGhyZXNob2xkIGlzIDMvNCBvZiBvbmUKLSAg ICAgdGhyZWFkJ3Mgc2hhcmUgb2YgdGhlIGNoaXAncyBjYWNoZS4gRm9yIG1vc3QgSW50ZWwgYW5k IEFNRCBwcm9jZXNzb3JzCi0gICAgIHdpdGggYW4gaW5pdGlhbCByZWxlYXNlIGRhdGUgYmV0d2Vl biAyMDE3IGFuZCAyMDIwLCBhIHRocmVhZCdzIHR5cGljYWwKLSAgICAgc2hhcmUgb2YgdGhlIGNh Y2hlIGlzIGZyb20gNTAwIEtCeXRlcyB0byAyIE1CeXRlcy4gVXNpbmcgdGhlIDMvNAotICAgICB0 aHJlc2hvbGQgbGVhdmVzIDEyNSBLQnl0ZXMgdG8gNTAwIEtCeXRlcyBvZiB0aGUgdGhyZWFkJ3Mg ZGF0YQotICAgICBpbiBjYWNoZSBhZnRlciBhIG1heGltdW0gdGVtcG9yYWwgY29weSwgd2hpY2gg d2lsbCBtYWludGFpbgotICAgICBpbiBjYWNoZSBhIHJlYXNvbmFibGUgcG9ydGlvbiBvZiB0aGUg dGhyZWFkJ3Mgc3RhY2sgYW5kIG90aGVyCi0gICAgIGFjdGl2ZSBkYXRhLiBJZiB0aGUgdGhyZXNo b2xkIGlzIHNldCBoaWdoZXIgdGhhbiBvbmUgdGhyZWFkJ3MKLSAgICAgc2hhcmUgb2YgdGhlIGNh Y2hlLCBpdCBoYXMgYSBzdWJzdGFudGlhbCByaXNrIG9mIG5lZ2F0aXZlbHkKLSAgICAgaW1wYWN0 aW5nIHRoZSBwZXJmb3JtYW5jZSBvZiBvdGhlciB0aHJlYWRzIHJ1bm5pbmcgb24gdGhlIGNoaXAu ICovCi0gIF9feDg2X3NoYXJlZF9ub25fdGVtcG9yYWxfdGhyZXNob2xkCi0gICAgPSAoY3B1X2Zl YXR1cmVzLT5ub25fdGVtcG9yYWxfdGhyZXNob2xkICE9IDAKLSAgICAgICA/IGNwdV9mZWF0dXJl cy0+bm9uX3RlbXBvcmFsX3RocmVzaG9sZAotICAgICAgIDogX194ODZfc2hhcmVkX2NhY2hlX3Np emUgKiAzIC8gNCk7Ci0KLSAgLyogTkI6IFRoZSBSRVAgTU9WU0IgdGhyZXNob2xkIG11c3QgYmUg Z3JlYXRlciB0aGFuIFZFQ19TSVpFICogOC4gICovCi0gIHVuc2lnbmVkIGludCBtaW5pbXVtX3Jl cF9tb3ZzYl90aHJlc2hvbGQ7Ci0gIC8qIE5COiBUaGUgZGVmYXVsdCBSRVAgTU9WU0IgdGhyZXNo b2xkIGlzIDIwNDggKiAoVkVDX1NJWkUgLyAxNikuICAqLwotICB1bnNpZ25lZCBpbnQgcmVwX21v dnNiX3RocmVzaG9sZDsKLSAgaWYgKENQVV9GRUFUVVJFX1VTQUJMRV9QIChjcHVfZmVhdHVyZXMs IEFWWDUxMkYpCi0gICAgICAmJiAhQ1BVX0ZFQVRVUkVfUFJFRkVSUkVEX1AgKGNwdV9mZWF0dXJl cywgUHJlZmVyX05vX0FWWDUxMikpCi0gICAgewotICAgICAgcmVwX21vdnNiX3RocmVzaG9sZCA9 IDIwNDggKiAoNjQgLyAxNik7Ci0gICAgICBtaW5pbXVtX3JlcF9tb3ZzYl90aHJlc2hvbGQgPSA2 NCAqIDg7Ci0gICAgfQotICBlbHNlIGlmIChDUFVfRkVBVFVSRV9QUkVGRVJSRURfUCAoY3B1X2Zl YXR1cmVzLAotCQkJCSAgICBBVlhfRmFzdF9VbmFsaWduZWRfTG9hZCkpCi0gICAgewotICAgICAg cmVwX21vdnNiX3RocmVzaG9sZCA9IDIwNDggKiAoMzIgLyAxNik7Ci0gICAgICBtaW5pbXVtX3Jl cF9tb3ZzYl90aHJlc2hvbGQgPSAzMiAqIDg7Ci0gICAgfQotICBlbHNlCi0gICAgewotICAgICAg cmVwX21vdnNiX3RocmVzaG9sZCA9IDIwNDggKiAoMTYgLyAxNik7Ci0gICAgICBtaW5pbXVtX3Jl cF9tb3ZzYl90aHJlc2hvbGQgPSAxNiAqIDg7Ci0gICAgfQotICBpZiAoY3B1X2ZlYXR1cmVzLT5y ZXBfbW92c2JfdGhyZXNob2xkID4gbWluaW11bV9yZXBfbW92c2JfdGhyZXNob2xkKQotICAgIF9f eDg2X3JlcF9tb3ZzYl90aHJlc2hvbGQgPSBjcHVfZmVhdHVyZXMtPnJlcF9tb3ZzYl90aHJlc2hv bGQ7Ci0gIGVsc2UKLSAgICBfX3g4Nl9yZXBfbW92c2JfdGhyZXNob2xkID0gcmVwX21vdnNiX3Ro cmVzaG9sZDsKLQotIyBpZiBIQVZFX1RVTkFCTEVTCi0gIF9feDg2X3JlcF9zdG9zYl90aHJlc2hv bGQgPSBjcHVfZmVhdHVyZXMtPnJlcF9zdG9zYl90aHJlc2hvbGQ7Ci0jIGVuZGlmCi19CitleHRl cm4gdm9pZCBfX3g4Nl9jYWNoZWluZm8gKHZvaWQpIGF0dHJpYnV0ZV9oaWRkZW47Citjb25zdCB2 b2lkICgqX194ODZfY2FjaGVpbmZvX3ApICh2b2lkKSBhdHRyaWJ1dGVfaGlkZGVuCisgID0gX194 ODZfY2FjaGVpbmZvOwogCitfX2lmdW5jIChfX3g4Nl9jYWNoZWluZm8sIF9feDg2X2NhY2hlaW5m bywgTlVMTCwgdm9pZCwgaW5pdF9jYWNoZWluZm8pOwogI2VuZGlmCmRpZmYgLS1naXQgYS9zeXNk ZXBzL3g4Ni9jYWNoZWluZm8uaCBiL3N5c2RlcHMveDg2L2NhY2hlaW5mby5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjdmMzQyZmRjMjMKLS0tIC9kZXYvbnVsbAorKysg Yi9zeXNkZXBzL3g4Ni9jYWNoZWluZm8uaApAQCAtMCwwICsxLDQxMyBAQAorLyogeDg2IGNhY2hl IGluZm8uCisgICBDb3B5cmlnaHQgKEMpIDIwMjAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhl IEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl bmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFy eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdO VSBDIExpYnJhcnk7IGlmIG5vdCwgc2VlCisgICA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNl cy8+LiAgKi8KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisv KiBEYXRhIGNhY2hlIHNpemUgZm9yIHVzZSBpbiBtZW1vcnkgYW5kIHN0cmluZyByb3V0aW5lcywg dHlwaWNhbGx5CisgICBMMSBzaXplLCByb3VuZGVkIHRvIG11bHRpcGxlIG9mIDI1NiBieXRlcy4g ICovCitsb25nIGludCBfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiBhdHRyaWJ1dGVfaGlkZGVu ID0gMzIgKiAxMDI0IC8gMjsKK2xvbmcgaW50IF9feDg2X2RhdGFfY2FjaGVfc2l6ZSBhdHRyaWJ1 dGVfaGlkZGVuID0gMzIgKiAxMDI0OworLyogU2ltaWxhciB0byBfX3g4Nl9kYXRhX2NhY2hlX3Np emVfaGFsZiwgYnV0IG5vdCByb3VuZGVkLiAgKi8KK2xvbmcgaW50IF9feDg2X3Jhd19kYXRhX2Nh Y2hlX3NpemVfaGFsZiBhdHRyaWJ1dGVfaGlkZGVuID0gMzIgKiAxMDI0IC8gMjsKKy8qIFNpbWls YXIgdG8gX194ODZfZGF0YV9jYWNoZV9zaXplLCBidXQgbm90IHJvdW5kZWQuICAqLworbG9uZyBp bnQgX194ODZfcmF3X2RhdGFfY2FjaGVfc2l6ZSBhdHRyaWJ1dGVfaGlkZGVuID0gMzIgKiAxMDI0 OworLyogU2hhcmVkIGNhY2hlIHNpemUgZm9yIHVzZSBpbiBtZW1vcnkgYW5kIHN0cmluZyByb3V0 aW5lcywgdHlwaWNhbGx5CisgICBMMiBvciBMMyBzaXplLCByb3VuZGVkIHRvIG11bHRpcGxlIG9m IDI1NiBieXRlcy4gICovCitsb25nIGludCBfX3g4Nl9zaGFyZWRfY2FjaGVfc2l6ZV9oYWxmIGF0 dHJpYnV0ZV9oaWRkZW4gPSAxMDI0ICogMTAyNCAvIDI7Citsb25nIGludCBfX3g4Nl9zaGFyZWRf Y2FjaGVfc2l6ZSBhdHRyaWJ1dGVfaGlkZGVuID0gMTAyNCAqIDEwMjQ7CisvKiBTaW1pbGFyIHRv IF9feDg2X3NoYXJlZF9jYWNoZV9zaXplX2hhbGYsIGJ1dCBub3Qgcm91bmRlZC4gICovCitsb25n IGludCBfX3g4Nl9yYXdfc2hhcmVkX2NhY2hlX3NpemVfaGFsZiBhdHRyaWJ1dGVfaGlkZGVuID0g MTAyNCAqIDEwMjQgLyAyOworLyogU2ltaWxhciB0byBfX3g4Nl9zaGFyZWRfY2FjaGVfc2l6ZSwg YnV0IG5vdCByb3VuZGVkLiAgKi8KK2xvbmcgaW50IF9feDg2X3Jhd19zaGFyZWRfY2FjaGVfc2l6 ZSBhdHRyaWJ1dGVfaGlkZGVuID0gMTAyNCAqIDEwMjQ7CisKKy8qIFRocmVzaG9sZCB0byB1c2Ug bm9uIHRlbXBvcmFsIHN0b3JlLiAgKi8KK2xvbmcgaW50IF9feDg2X3NoYXJlZF9ub25fdGVtcG9y YWxfdGhyZXNob2xkIGF0dHJpYnV0ZV9oaWRkZW47CisKKy8qIFRocmVzaG9sZCB0byB1c2UgRW5o YW5jZWQgUkVQIE1PVlNCLiAgKi8KK2xvbmcgaW50IF9feDg2X3JlcF9tb3ZzYl90aHJlc2hvbGQg YXR0cmlidXRlX2hpZGRlbiA9IDIwNDg7CisKKy8qIFRocmVzaG9sZCB0byB1c2UgRW5oYW5jZWQg UkVQIFNUT1NCLiAgKi8KK2xvbmcgaW50IF9feDg2X3JlcF9zdG9zYl90aHJlc2hvbGQgYXR0cmli dXRlX2hpZGRlbiA9IDIwNDg7CisKK3N0YXRpYyB2b2lkCitnZXRfY29tbW9uX2NhY2hlX2luZm8g KGxvbmcgaW50ICpzaGFyZWRfcHRyLCB1bnNpZ25lZCBpbnQgKnRocmVhZHNfcHRyLAorCQkgICAg ICAgbG9uZyBpbnQgY29yZSkKK3sKKyAgdW5zaWduZWQgaW50IGVheDsKKyAgdW5zaWduZWQgaW50 IGVieDsKKyAgdW5zaWduZWQgaW50IGVjeDsKKyAgdW5zaWduZWQgaW50IGVkeDsKKworICAvKiBO dW1iZXIgb2YgbG9naWNhbCBwcm9jZXNzb3JzIHNoYXJpbmcgTDIgY2FjaGUuICAqLworICBpbnQg dGhyZWFkc19sMjsKKworICAvKiBOdW1iZXIgb2YgbG9naWNhbCBwcm9jZXNzb3JzIHNoYXJpbmcg TDMgY2FjaGUuICAqLworICBpbnQgdGhyZWFkc19sMzsKKworICBjb25zdCBzdHJ1Y3QgY3B1X2Zl YXR1cmVzICpjcHVfZmVhdHVyZXMgPSBfX2dldF9jcHVfZmVhdHVyZXMgKCk7CisgIGludCBtYXhf Y3B1aWQgPSBjcHVfZmVhdHVyZXMtPmJhc2ljLm1heF9jcHVpZDsKKyAgdW5zaWduZWQgaW50IGZh bWlseSA9IGNwdV9mZWF0dXJlcy0+YmFzaWMuZmFtaWx5OworICB1bnNpZ25lZCBpbnQgbW9kZWwg PSBjcHVfZmVhdHVyZXMtPmJhc2ljLm1vZGVsOworICBsb25nIGludCBzaGFyZWQgPSAqc2hhcmVk X3B0cjsKKyAgdW5zaWduZWQgaW50IHRocmVhZHMgPSAqdGhyZWFkc19wdHI7CisgIGJvb2wgaW5j bHVzaXZlX2NhY2hlID0gdHJ1ZTsKKyAgYm9vbCBzdXBwb3J0X2NvdW50X21hc2sgPSB0cnVlOwor CisgIC8qIFRyeSBMMyBmaXJzdC4gICovCisgIHVuc2lnbmVkIGludCBsZXZlbCA9IDM7CisKKyAg aWYgKGNwdV9mZWF0dXJlcy0+YmFzaWMua2luZCA9PSBhcmNoX2tpbmRfemhhb3hpbiAmJiBmYW1p bHkgPT0gNikKKyAgICBzdXBwb3J0X2NvdW50X21hc2sgPSBmYWxzZTsKKworICBpZiAoc2hhcmVk IDw9IDApCisgICAgeworICAgICAgLyogVHJ5IEwyIG90aGVyd2lzZS4gICovCisgICAgICBsZXZl bCAgPSAyOworICAgICAgc2hhcmVkID0gY29yZTsKKyAgICAgIHRocmVhZHNfbDIgPSAwOworICAg ICAgdGhyZWFkc19sMyA9IC0xOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHRocmVhZHNf bDIgPSAwOworICAgICAgdGhyZWFkc19sMyA9IDA7CisgICAgfQorCisgIC8qIEEgdmFsdWUgb2Yg MCBmb3IgdGhlIEhUVCBiaXQgaW5kaWNhdGVzIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUKKyAgICAg bG9naWNhbCBwcm9jZXNzb3IuICAqLworICBpZiAoSEFTX0NQVV9GRUFUVVJFIChIVFQpKQorICAg IHsKKyAgICAgIC8qIEZpZ3VyZSBvdXQgdGhlIG51bWJlciBvZiBsb2dpY2FsIHRocmVhZHMgdGhh dCBzaGFyZSB0aGUKKyAgICAgICAgIGhpZ2hlc3QgY2FjaGUgbGV2ZWwuICAqLworICAgICAgaWYg KG1heF9jcHVpZCA+PSA0KQorICAgICAgICB7CisgICAgICAgICAgaW50IGkgPSAwOworCisgICAg ICAgICAgLyogUXVlcnkgdW50aWwgY2FjaGUgbGV2ZWwgMiBhbmQgMyBhcmUgZW51bWVyYXRlZC4g ICovCisgICAgICAgICAgaW50IGNoZWNrID0gMHgxIHwgKHRocmVhZHNfbDMgPT0gMCkgPDwgMTsK KyAgICAgICAgICBkbworICAgICAgICAgICAgeworICAgICAgICAgICAgICBfX2NwdWlkX2NvdW50 ICg0LCBpKyssIGVheCwgZWJ4LCBlY3gsIGVkeCk7CisKKyAgICAgICAgICAgICAgLyogVGhlcmUg c2VlbXMgdG8gYmUgYSBidWcgaW4gYXQgbGVhc3Qgc29tZSBQZW50aXVtIERzCisgICAgICAgICAg ICAgICAgIHdoaWNoIHNvbWV0aW1lcyBmYWlsIHRvIGl0ZXJhdGUgYWxsIGNhY2hlIHBhcmFtZXRl cnMuCisgICAgICAgICAgICAgICAgIERvIG5vdCBsb29wIGluZGVmaW5pdGVseSBoZXJlLCBzdG9w IGluIHRoaXMgY2FzZSBhbmQKKyAgICAgICAgICAgICAgICAgYXNzdW1lIHRoZXJlIGlzIG5vIHN1 Y2ggaW5mb3JtYXRpb24uICAqLworICAgICAgICAgICAgICBpZiAoY3B1X2ZlYXR1cmVzLT5iYXNp Yy5raW5kID09IGFyY2hfa2luZF9pbnRlbAorICAgICAgICAgICAgICAgICAgJiYgKGVheCAmIDB4 MWYpID09IDAgKQorICAgICAgICAgICAgICAgIGdvdG8gaW50ZWxfYnVnX25vX2NhY2hlX2luZm87 CisKKyAgICAgICAgICAgICAgc3dpdGNoICgoZWF4ID4+IDUpICYgMHg3KQorICAgICAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICBpZiAo KGNoZWNrICYgMHgxKSkKKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg ICAgICAgICAvKiBHZXQgbWF4aW11bSBudW1iZXIgb2YgbG9naWNhbCBwcm9jZXNzb3JzCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaGFyaW5nIEwyIGNhY2hlLiAgKi8KKyAgICAgICAgICAg ICAgICAgICAgICAgIHRocmVhZHNfbDIgPSAoZWF4ID4+IDE0KSAmIDB4M2ZmOworICAgICAgICAg ICAgICAgICAgICAgICAgY2hlY2sgJj0gfjB4MTsKKyAgICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAzOgorICAg ICAgICAgICAgICAgICAgICBpZiAoKGNoZWNrICYgKDB4MSA8PCAxKSkpCisgICAgICAgICAgICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogR2V0IG1heGltdW0gbnVtYmVy IG9mIGxvZ2ljYWwgcHJvY2Vzc29ycworICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmlu ZyBMMyBjYWNoZS4gICovCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWRzX2wzID0gKGVh eCA+PiAxNCkgJiAweDNmZjsKKworICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgaWYg TDIgYW5kIEwzIGNhY2hlcyBhcmUgaW5jbHVzaXZlLiAgKi8KKyAgICAgICAgICAgICAgICAgICAg ICAgIGluY2x1c2l2ZV9jYWNoZSA9IChlZHggJiAweDIpICE9IDA7CisgICAgICAgICAgICAgICAg ICAgICAgICBjaGVjayAmPSB+KDB4MSA8PCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IH0KKyAgICAgICAgICB3aGlsZSAoY2hlY2spOworCisgICAgICAgICAgLyogSWYgbWF4X2NwdWlk ID49IDExLCBUSFJFQURTX0wyL1RIUkVBRFNfTDMgYXJlIHRoZSBtYXhpbXVtCisgICAgICAgICAg ICAgbnVtYmVycyBvZiBhZGRyZXNzYWJsZSBJRHMgZm9yIGxvZ2ljYWwgcHJvY2Vzc29ycyBzaGFy aW5nCisgICAgICAgICAgICAgdGhlIGNhY2hlLCBpbnN0ZWFkIG9mIHRoZSBtYXhpbXVtIG51bWJl ciBvZiB0aHJlYWRzCisgICAgICAgICAgICAgc2hhcmluZyB0aGUgY2FjaGUuICAqLworICAgICAg ICAgIGlmIChtYXhfY3B1aWQgPj0gMTEgJiYgc3VwcG9ydF9jb3VudF9tYXNrKQorICAgICAgICAg ICAgeworICAgICAgICAgICAgICAvKiBGaW5kIHRoZSBudW1iZXIgb2YgbG9naWNhbCBwcm9jZXNz b3JzIHNoaXBwZWQgaW4KKyAgICAgICAgICAgICAgICAgb25lIGNvcmUgYW5kIGFwcGx5IGNvdW50 IG1hc2suICAqLworICAgICAgICAgICAgICBpID0gMDsKKworICAgICAgICAgICAgICAvKiBDb3Vu dCBTTVQgb25seSBpZiB0aGVyZSBpcyBMMyBjYWNoZS4gIEFsd2F5cyBjb3VudAorICAgICAgICAg ICAgICAgICBjb3JlIGlmIHRoZXJlIGlzIG5vIEwzIGNhY2hlLiAgKi8KKyAgICAgICAgICAgICAg aW50IGNvdW50ID0gKCh0aHJlYWRzX2wyID4gMCAmJiBsZXZlbCA9PSAzKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCAoKHRocmVhZHNfbDMgPiAwCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfHwgKHRocmVhZHNfbDIgPiAwICYmIGxldmVsID09IDIpKSA8PCAxKSk7CisKKyAg ICAgICAgICAgICAgd2hpbGUgKGNvdW50KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgICAgIF9fY3B1aWRfY291bnQgKDExLCBpKyssIGVheCwgZWJ4LCBlY3gsIGVkeCk7CisKKyAg ICAgICAgICAgICAgICAgIGludCBzaGlwcGVkID0gZWJ4ICYgMHhmZjsKKyAgICAgICAgICAgICAg ICAgIGludCB0eXBlID0gZWN4ICYgMHhmZjAwOworICAgICAgICAgICAgICAgICAgaWYgKHNoaXBw ZWQgPT0gMCB8fCB0eXBlID09IDApCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSAweDEwMCkKKyAgICAgICAgICAgICAgICAgICAg eworICAgICAgICAgICAgICAgICAgICAgIC8qIENvdW50IFNNVC4gICovCisgICAgICAgICAgICAg ICAgICAgICAgaWYgKChjb3VudCAmIDB4MSkpCisgICAgICAgICAgICAgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudF9tYXNrOworCisgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIENvbXB1dGUgY291bnQgbWFzay4gICovCisgICAgICAgICAgICAgICAg ICAgICAgICAgIGFzbSAoImJzciAlMSwgJTAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOiAiPXIiIChjb3VudF9tYXNrKSA6ICJnIiAodGhyZWFkc19sMikpOworICAgICAgICAgICAg ICAgICAgICAgICAgICBjb3VudF9tYXNrID0gfigtMSA8PCAoY291bnRfbWFzayArIDEpKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkc19sMiA9IChzaGlwcGVkIC0gMSkgJiBjb3Vu dF9tYXNrOworICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCAmPSB+MHgxOworICAgICAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICBlbHNlIGlmICh0eXBlID09IDB4MjAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgICAgICAgLyogQ291bnQgY29yZS4gICovCisgICAgICAgICAgICAgICAgICAg ICAgaWYgKChjb3VudCAmICgweDEgPDwgMSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnRfbWFzazsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IHRocmVhZHNfY29yZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ID0gKGxldmVsID09IDIgPyB0aHJlYWRzX2wyIDogdGhyZWFkc19sMyk7CisKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogQ29tcHV0ZSBjb3VudCBtYXNrLiAgKi8KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgYXNtICgiYnNyICUxLCAlMCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA6ICI9ciIgKGNvdW50X21hc2spIDogImciICh0aHJlYWRzX2NvcmUpKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgY291bnRfbWFzayA9IH4oLTEgPDwgKGNvdW50X21hc2sgKyAxKSk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZHNfY29yZSA9IChzaGlwcGVkIC0gMSkg JiBjb3VudF9tYXNrOworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGV2ZWwgPT0gMikK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWRzX2wyID0gdGhyZWFkc19jb3JlOwor ICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdGhyZWFkc19sMyA9IHRocmVhZHNfY29yZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg Y291bnQgJj0gfigweDEgPDwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg ICAgaWYgKHRocmVhZHNfbDIgPiAwKQorICAgICAgICAgICAgdGhyZWFkc19sMiArPSAxOworICAg ICAgICAgIGlmICh0aHJlYWRzX2wzID4gMCkKKyAgICAgICAgICAgIHRocmVhZHNfbDMgKz0gMTsK KyAgICAgICAgICBpZiAobGV2ZWwgPT0gMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg aWYgKHRocmVhZHNfbDIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgdGhy ZWFkcyA9IHRocmVhZHNfbDI7CisgICAgICAgICAgICAgICAgICBpZiAoY3B1X2ZlYXR1cmVzLT5i YXNpYy5raW5kID09IGFyY2hfa2luZF9pbnRlbAorICAgICAgICAgICAgICAgICAgICAgICYmIHRo cmVhZHMgPiAyCisgICAgICAgICAgICAgICAgICAgICAgJiYgZmFtaWx5ID09IDYpCisgICAgICAg ICAgICAgICAgICAgIHN3aXRjaCAobW9kZWwpCisgICAgICAgICAgICAgICAgICAgICAgeworICAg ICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDM3OgorICAgICAgICAgICAgICAgICAgICAgICAg Y2FzZSAweDRhOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDRkOgorICAgICAgICAg ICAgICAgICAgICAgICAgY2FzZSAweDVhOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAw eDVkOgorICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTaWx2ZXJtb250IGhhcyBMMiBjYWNo ZSBzaGFyZWQgYnkgMiBjb3Jlcy4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVh ZHMgPSAyOworICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg ICAgICAgICAgZWxzZSBpZiAodGhyZWFkc19sMykKKyAgICAgICAgICAgIHRocmVhZHMgPSB0aHJl YWRzX2wzOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKK2ludGVsX2J1Z19ub19j YWNoZV9pbmZvOgorICAgICAgICAgIC8qIEFzc3VtZSB0aGF0IGFsbCBsb2dpY2FsIHRocmVhZHMg c2hhcmUgdGhlIGhpZ2hlc3QgY2FjaGUKKyAgICAgICAgICAgICBsZXZlbC4gICovCisgICAgICAg ICAgdGhyZWFkcworICAgICAgICAgICAgPSAoKGNwdV9mZWF0dXJlcy0+ZmVhdHVyZXNbQ09NTU9O X0NQVUlEX0lOREVYXzFdLmNwdWlkLmVieAorICAgICAgICAgICAgICAgID4+IDE2KSAmIDB4ZmYp OworICAgICAgICB9CisKKyAgICAgICAgLyogQ2FwIHVzYWdlIG9mIGhpZ2hlc3QgY2FjaGUgbGV2 ZWwgdG8gdGhlIG51bWJlciBvZiBzdXBwb3J0ZWQKKyAgICAgICAgICAgdGhyZWFkcy4gICovCisg ICAgICAgIGlmIChzaGFyZWQgPiAwICYmIHRocmVhZHMgPiAwKQorICAgICAgICAgIHNoYXJlZCAv PSB0aHJlYWRzOworICAgIH0KKworICAvKiBBY2NvdW50IGZvciBub24taW5jbHVzaXZlIEwyIGFu ZCBMMyBjYWNoZXMuICAqLworICBpZiAoIWluY2x1c2l2ZV9jYWNoZSkKKyAgICB7CisgICAgICBp ZiAodGhyZWFkc19sMiA+IDApCisgICAgICAgIGNvcmUgLz0gdGhyZWFkc19sMjsKKyAgICAgIHNo YXJlZCArPSBjb3JlOworICAgIH0KKworICAqc2hhcmVkX3B0ciA9IHNoYXJlZDsKKyAgKnRocmVh ZHNfcHRyID0gdGhyZWFkczsKK30KKworc3RhdGljIHZvaWQKK2luaXRfY2FjaGVpbmZvICh2b2lk KQoreworICAvKiBGaW5kIG91dCB3aGF0IGJyYW5kIG9mIHByb2Nlc3Nvci4gICovCisgIHVuc2ln bmVkIGludCBlYng7CisgIHVuc2lnbmVkIGludCBlY3g7CisgIHVuc2lnbmVkIGludCBlZHg7Cisg IGludCBtYXhfY3B1aWRfZXg7CisgIGxvbmcgaW50IGRhdGEgPSAtMTsKKyAgbG9uZyBpbnQgc2hh cmVkID0gLTE7CisgIGxvbmcgaW50IGNvcmU7CisgIHVuc2lnbmVkIGludCB0aHJlYWRzID0gMDsK KyAgY29uc3Qgc3RydWN0IGNwdV9mZWF0dXJlcyAqY3B1X2ZlYXR1cmVzID0gX19nZXRfY3B1X2Zl YXR1cmVzICgpOworCisgIC8qIE5COiBJbiBsaWJjLnNvLCBjcHVfZmVhdHVyZXMgaXMgZGVmaW5l ZCBpbiBsZC5zbyBhbmQgaXMgaW5pdGlhbGl6ZWQKKyAgICAgYnkgRExfUExBVEZPUk1fSU5JVCBv ciBJRlVOQyByZWxvY2F0aW9uIGJlZm9yZSBpbml0X2NhY2hlaW5mbyBpcworICAgICBjYWxsZWQg YnkgSUZVTkMgcmVsb2NhdGlvbi4gIEluIGxpYmMuYSwgaW5pdF9jYWNoZWluZm8gaXMgY2FsbGVk CisgICAgIGZyb20gaW5pdF9jcHVfZmVhdHVyZXMgYnkgQVJDSF9JTklUX0NQVV9GRUFUVVJFUy4g ICovCisgIGFzc2VydCAoY3B1X2ZlYXR1cmVzLT5iYXNpYy5raW5kICE9IGFyY2hfa2luZF91bmtu b3duKTsKKworICBpZiAoY3B1X2ZlYXR1cmVzLT5iYXNpYy5raW5kID09IGFyY2hfa2luZF9pbnRl bCkKKyAgICB7CisgICAgICBkYXRhID0gaGFuZGxlX2ludGVsIChfU0NfTEVWRUwxX0RDQUNIRV9T SVpFLCBjcHVfZmVhdHVyZXMpOworICAgICAgY29yZSA9IGhhbmRsZV9pbnRlbCAoX1NDX0xFVkVM Ml9DQUNIRV9TSVpFLCBjcHVfZmVhdHVyZXMpOworICAgICAgc2hhcmVkID0gaGFuZGxlX2ludGVs IChfU0NfTEVWRUwzX0NBQ0hFX1NJWkUsIGNwdV9mZWF0dXJlcyk7CisKKyAgICAgIGdldF9jb21t b25fY2FjaGVfaW5mbyAoJnNoYXJlZCwgJnRocmVhZHMsIGNvcmUpOworICAgIH0KKyAgZWxzZSBp ZiAoY3B1X2ZlYXR1cmVzLT5iYXNpYy5raW5kID09IGFyY2hfa2luZF96aGFveGluKQorICAgIHsK KyAgICAgIGRhdGEgPSBoYW5kbGVfemhhb3hpbiAoX1NDX0xFVkVMMV9EQ0FDSEVfU0laRSk7Cisg ICAgICBjb3JlID0gaGFuZGxlX3poYW94aW4gKF9TQ19MRVZFTDJfQ0FDSEVfU0laRSk7CisgICAg ICBzaGFyZWQgPSBoYW5kbGVfemhhb3hpbiAoX1NDX0xFVkVMM19DQUNIRV9TSVpFKTsKKworICAg ICAgZ2V0X2NvbW1vbl9jYWNoZV9pbmZvICgmc2hhcmVkLCAmdGhyZWFkcywgY29yZSk7CisgICAg fQorICBlbHNlIGlmIChjcHVfZmVhdHVyZXMtPmJhc2ljLmtpbmQgPT0gYXJjaF9raW5kX2FtZCkK KyAgICB7CisgICAgICBkYXRhICAgPSBoYW5kbGVfYW1kIChfU0NfTEVWRUwxX0RDQUNIRV9TSVpF KTsKKyAgICAgIGxvbmcgaW50IGNvcmUgPSBoYW5kbGVfYW1kIChfU0NfTEVWRUwyX0NBQ0hFX1NJ WkUpOworICAgICAgc2hhcmVkID0gaGFuZGxlX2FtZCAoX1NDX0xFVkVMM19DQUNIRV9TSVpFKTsK KworICAgICAgLyogR2V0IG1heGltdW0gZXh0ZW5kZWQgZnVuY3Rpb24uICovCisgICAgICBfX2Nw dWlkICgweDgwMDAwMDAwLCBtYXhfY3B1aWRfZXgsIGVieCwgZWN4LCBlZHgpOworCisgICAgICBp ZiAoc2hhcmVkIDw9IDApCisJLyogTm8gc2hhcmVkIEwzIGNhY2hlLiAgQWxsIHdlIGhhdmUgaXMg dGhlIEwyIGNhY2hlLiAgKi8KKwlzaGFyZWQgPSBjb3JlOworICAgICAgZWxzZQorCXsKKwkgIC8q IEZpZ3VyZSBvdXQgdGhlIG51bWJlciBvZiBsb2dpY2FsIHRocmVhZHMgdGhhdCBzaGFyZSBMMy4g ICovCisJICBpZiAobWF4X2NwdWlkX2V4ID49IDB4ODAwMDAwMDgpCisJICAgIHsKKwkgICAgICAv KiBHZXQgd2lkdGggb2YgQVBJQyBJRC4gICovCisJICAgICAgX19jcHVpZCAoMHg4MDAwMDAwOCwg bWF4X2NwdWlkX2V4LCBlYngsIGVjeCwgZWR4KTsKKwkgICAgICB0aHJlYWRzID0gMSA8PCAoKGVj eCA+PiAxMikgJiAweDBmKTsKKwkgICAgfQorCisJICBpZiAodGhyZWFkcyA9PSAwKQorCSAgICB7 CisJICAgICAgLyogSWYgQVBJQyBJRCB3aWR0aCBpcyBub3QgYXZhaWxhYmxlLCB1c2UgbG9naWNh bAorCQkgcHJvY2Vzc29yIGNvdW50LiAgKi8KKwkgICAgICBfX2NwdWlkICgweDAwMDAwMDAxLCBt YXhfY3B1aWRfZXgsIGVieCwgZWN4LCBlZHgpOworCisJICAgICAgaWYgKChlZHggJiAoMSA8PCAy OCkpICE9IDApCisJCXRocmVhZHMgPSAoZWJ4ID4+IDE2KSAmIDB4ZmY7CisJICAgIH0KKworCSAg LyogQ2FwIHVzYWdlIG9mIGhpZ2hlc3QgY2FjaGUgbGV2ZWwgdG8gdGhlIG51bWJlciBvZgorCSAg ICAgc3VwcG9ydGVkIHRocmVhZHMuICAqLworCSAgaWYgKHRocmVhZHMgPiAwKQorCSAgICBzaGFy ZWQgLz0gdGhyZWFkczsKKworCSAgLyogQWNjb3VudCBmb3IgZXhjbHVzaXZlIEwyIGFuZCBMMyBj YWNoZXMuICAqLworCSAgc2hhcmVkICs9IGNvcmU7CisJfQorICAgIH0KKworICBpZiAoY3B1X2Zl YXR1cmVzLT5kYXRhX2NhY2hlX3NpemUgIT0gMCkKKyAgICBkYXRhID0gY3B1X2ZlYXR1cmVzLT5k YXRhX2NhY2hlX3NpemU7CisKKyAgaWYgKGRhdGEgPiAwKQorICAgIHsKKyAgICAgIF9feDg2X3Jh d19kYXRhX2NhY2hlX3NpemVfaGFsZiA9IGRhdGEgLyAyOworICAgICAgX194ODZfcmF3X2RhdGFf Y2FjaGVfc2l6ZSA9IGRhdGE7CisgICAgICAvKiBSb3VuZCBkYXRhIGNhY2hlIHNpemUgdG8gbXVs dGlwbGUgb2YgMjU2IGJ5dGVzLiAgKi8KKyAgICAgIGRhdGEgPSBkYXRhICYgfjI1NUw7CisgICAg ICBfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiA9IGRhdGEgLyAyOworICAgICAgX194ODZfZGF0 YV9jYWNoZV9zaXplID0gZGF0YTsKKyAgICB9CisKKyAgaWYgKGNwdV9mZWF0dXJlcy0+c2hhcmVk X2NhY2hlX3NpemUgIT0gMCkKKyAgICBzaGFyZWQgPSBjcHVfZmVhdHVyZXMtPnNoYXJlZF9jYWNo ZV9zaXplOworCisgIGlmIChzaGFyZWQgPiAwKQorICAgIHsKKyAgICAgIF9feDg2X3Jhd19zaGFy ZWRfY2FjaGVfc2l6ZV9oYWxmID0gc2hhcmVkIC8gMjsKKyAgICAgIF9feDg2X3Jhd19zaGFyZWRf Y2FjaGVfc2l6ZSA9IHNoYXJlZDsKKyAgICAgIC8qIFJvdW5kIHNoYXJlZCBjYWNoZSBzaXplIHRv IG11bHRpcGxlIG9mIDI1NiBieXRlcy4gICovCisgICAgICBzaGFyZWQgPSBzaGFyZWQgJiB+MjU1 TDsKKyAgICAgIF9feDg2X3NoYXJlZF9jYWNoZV9zaXplX2hhbGYgPSBzaGFyZWQgLyAyOworICAg ICAgX194ODZfc2hhcmVkX2NhY2hlX3NpemUgPSBzaGFyZWQ7CisgICAgfQorCisgIC8qIFRoZSBk ZWZhdWx0IHNldHRpbmcgZm9yIHRoZSBub25fdGVtcG9yYWwgdGhyZXNob2xkIGlzIDMvNCBvZiBv bmUKKyAgICAgdGhyZWFkJ3Mgc2hhcmUgb2YgdGhlIGNoaXAncyBjYWNoZS4gRm9yIG1vc3QgSW50 ZWwgYW5kIEFNRCBwcm9jZXNzb3JzCisgICAgIHdpdGggYW4gaW5pdGlhbCByZWxlYXNlIGRhdGUg YmV0d2VlbiAyMDE3IGFuZCAyMDIwLCBhIHRocmVhZCdzIHR5cGljYWwKKyAgICAgc2hhcmUgb2Yg dGhlIGNhY2hlIGlzIGZyb20gNTAwIEtCeXRlcyB0byAyIE1CeXRlcy4gVXNpbmcgdGhlIDMvNAor ICAgICB0aHJlc2hvbGQgbGVhdmVzIDEyNSBLQnl0ZXMgdG8gNTAwIEtCeXRlcyBvZiB0aGUgdGhy ZWFkJ3MgZGF0YQorICAgICBpbiBjYWNoZSBhZnRlciBhIG1heGltdW0gdGVtcG9yYWwgY29weSwg d2hpY2ggd2lsbCBtYWludGFpbgorICAgICBpbiBjYWNoZSBhIHJlYXNvbmFibGUgcG9ydGlvbiBv ZiB0aGUgdGhyZWFkJ3Mgc3RhY2sgYW5kIG90aGVyCisgICAgIGFjdGl2ZSBkYXRhLiBJZiB0aGUg dGhyZXNob2xkIGlzIHNldCBoaWdoZXIgdGhhbiBvbmUgdGhyZWFkJ3MKKyAgICAgc2hhcmUgb2Yg dGhlIGNhY2hlLCBpdCBoYXMgYSBzdWJzdGFudGlhbCByaXNrIG9mIG5lZ2F0aXZlbHkKKyAgICAg aW1wYWN0aW5nIHRoZSBwZXJmb3JtYW5jZSBvZiBvdGhlciB0aHJlYWRzIHJ1bm5pbmcgb24gdGhl IGNoaXAuICovCisgIF9feDg2X3NoYXJlZF9ub25fdGVtcG9yYWxfdGhyZXNob2xkCisgICAgPSAo Y3B1X2ZlYXR1cmVzLT5ub25fdGVtcG9yYWxfdGhyZXNob2xkICE9IDAKKyAgICAgICA/IGNwdV9m ZWF0dXJlcy0+bm9uX3RlbXBvcmFsX3RocmVzaG9sZAorICAgICAgIDogX194ODZfc2hhcmVkX2Nh Y2hlX3NpemUgKiAzIC8gNCk7CisKKyAgLyogTkI6IFRoZSBSRVAgTU9WU0IgdGhyZXNob2xkIG11 c3QgYmUgZ3JlYXRlciB0aGFuIFZFQ19TSVpFICogOC4gICovCisgIHVuc2lnbmVkIGludCBtaW5p bXVtX3JlcF9tb3ZzYl90aHJlc2hvbGQ7CisgIC8qIE5COiBUaGUgZGVmYXVsdCBSRVAgTU9WU0Ig dGhyZXNob2xkIGlzIDIwNDggKiAoVkVDX1NJWkUgLyAxNikuICAqLworICB1bnNpZ25lZCBpbnQg cmVwX21vdnNiX3RocmVzaG9sZDsKKyAgaWYgKENQVV9GRUFUVVJFX1VTQUJMRV9QIChjcHVfZmVh dHVyZXMsIEFWWDUxMkYpCisgICAgICAmJiAhQ1BVX0ZFQVRVUkVfUFJFRkVSUkVEX1AgKGNwdV9m ZWF0dXJlcywgUHJlZmVyX05vX0FWWDUxMikpCisgICAgeworICAgICAgcmVwX21vdnNiX3RocmVz aG9sZCA9IDIwNDggKiAoNjQgLyAxNik7CisgICAgICBtaW5pbXVtX3JlcF9tb3ZzYl90aHJlc2hv bGQgPSA2NCAqIDg7CisgICAgfQorICBlbHNlIGlmIChDUFVfRkVBVFVSRV9QUkVGRVJSRURfUCAo Y3B1X2ZlYXR1cmVzLAorCQkJCSAgICBBVlhfRmFzdF9VbmFsaWduZWRfTG9hZCkpCisgICAgewor ICAgICAgcmVwX21vdnNiX3RocmVzaG9sZCA9IDIwNDggKiAoMzIgLyAxNik7CisgICAgICBtaW5p bXVtX3JlcF9tb3ZzYl90aHJlc2hvbGQgPSAzMiAqIDg7CisgICAgfQorICBlbHNlCisgICAgewor ICAgICAgcmVwX21vdnNiX3RocmVzaG9sZCA9IDIwNDggKiAoMTYgLyAxNik7CisgICAgICBtaW5p bXVtX3JlcF9tb3ZzYl90aHJlc2hvbGQgPSAxNiAqIDg7CisgICAgfQorICBpZiAoY3B1X2ZlYXR1 cmVzLT5yZXBfbW92c2JfdGhyZXNob2xkID4gbWluaW11bV9yZXBfbW92c2JfdGhyZXNob2xkKQor ICAgIF9feDg2X3JlcF9tb3ZzYl90aHJlc2hvbGQgPSBjcHVfZmVhdHVyZXMtPnJlcF9tb3ZzYl90 aHJlc2hvbGQ7CisgIGVsc2UKKyAgICBfX3g4Nl9yZXBfbW92c2JfdGhyZXNob2xkID0gcmVwX21v dnNiX3RocmVzaG9sZDsKKworIyBpZiBIQVZFX1RVTkFCTEVTCisgIF9feDg2X3JlcF9zdG9zYl90 aHJlc2hvbGQgPSBjcHVfZmVhdHVyZXMtPnJlcF9zdG9zYl90aHJlc2hvbGQ7CisjIGVuZGlmCit9 CmRpZmYgLS1naXQgYS9zeXNkZXBzL3g4Ni9jcHUtZmVhdHVyZXMuYyBiL3N5c2RlcHMveDg2L2Nw dS1mZWF0dXJlcy5jCmluZGV4IDY1NTFkZjE5YzAuLmUyOWU2YzlmMTYgMTAwNjQ0Ci0tLSBhL3N5 c2RlcHMveDg2L2NwdS1mZWF0dXJlcy5jCisrKyBiL3N5c2RlcHMveDg2L2NwdS1mZWF0dXJlcy5j CkBAIC0xNyw5ICsxNywxNCBAQAogICAgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4g ICovCiAKICNpbmNsdWRlIDxjcHVpZC5oPgotI2luY2x1ZGUgPGNwdS1mZWF0dXJlcy5oPgogI2lu Y2x1ZGUgPGRsLWh3Y2FwLmg+CiAjaW5jbHVkZSA8bGliYy1wb2ludGVyLWFyaXRoLmg+CisjaWYg SVNfSU4gKGxpYmMpICYmICFkZWZpbmVkIFNIQVJFRAorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyMg aW5jbHVkZSA8dW5pc3RkLmg+CisjIGluY2x1ZGUgPGRsLWNhY2hlaW5mby5oPgorIyBpbmNsdWRl IDxjYWNoZWluZm8uaD4KKyNlbmRpZgogCiAjaWYgSEFWRV9UVU5BQkxFUwogIyBkZWZpbmUgVFVO QUJMRV9OQU1FU1BBQ0UgY3B1CkBAIC03NDYsNCArNzUxLDkgQEAgbm9fY3B1aWQ6CiAjIGVuZGlm CiAgICAgfQogI2VuZGlmCisKKyNpZm5kZWYgU0hBUkVECisgIC8qIE5COiBJbiBsaWJjLmEsIGNh bGwgaW5pdF9jYWNoZWluZm8uICAqLworICBpbml0X2NhY2hlaW5mbyAoKTsKKyNlbmRpZgogfQpk aWZmIC0tZ2l0IGEvc3lzZGVwcy94ODYvZGwtY2FjaGVpbmZvLmggYi9zeXNkZXBzL3g4Ni9kbC1j YWNoZWluZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5iMmI5MDA3 NGIwCi0tLSAvZGV2L251bGwKKysrIGIvc3lzZGVwcy94ODYvZGwtY2FjaGVpbmZvLmgKQEAgLTAs MCArMSw0NzggQEAKKy8qIEluaXRpYWxpemUgeDg2IGNhY2hlIGluZm8uCisgICBDb3B5cmlnaHQg KEMpIDIwMjAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMg cGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK KyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg ICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwg c2VlCisgICA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworc3RhdGljIGNv bnN0IHN0cnVjdCBpbnRlbF8wMl9jYWNoZV9pbmZvCit7CisgIHVuc2lnbmVkIGNoYXIgaWR4Owor ICB1bnNpZ25lZCBjaGFyIGFzc29jOworICB1bnNpZ25lZCBjaGFyIGxpbmVzaXplOworICB1bnNp Z25lZCBjaGFyIHJlbF9uYW1lOworICB1bnNpZ25lZCBpbnQgc2l6ZTsKK30gaW50ZWxfMDJfa25v d24gW10gPQorICB7CisjZGVmaW5lIE0oc2MpICgoc2MpIC0gX1NDX0xFVkVMMV9JQ0FDSEVfU0la RSkKKyAgICB7IDB4MDYsICA0LCAzMiwgTShfU0NfTEVWRUwxX0lDQUNIRV9TSVpFKSwgICAgODE5 MiB9LAorICAgIHsgMHgwOCwgIDQsIDMyLCBNKF9TQ19MRVZFTDFfSUNBQ0hFX1NJWkUpLCAgIDE2 Mzg0IH0sCisgICAgeyAweDA5LCAgNCwgMzIsIE0oX1NDX0xFVkVMMV9JQ0FDSEVfU0laRSksICAg MzI3NjggfSwKKyAgICB7IDB4MGEsICAyLCAzMiwgTShfU0NfTEVWRUwxX0RDQUNIRV9TSVpFKSwg ICAgODE5MiB9LAorICAgIHsgMHgwYywgIDQsIDMyLCBNKF9TQ19MRVZFTDFfRENBQ0hFX1NJWkUp LCAgIDE2Mzg0IH0sCisgICAgeyAweDBkLCAgNCwgNjQsIE0oX1NDX0xFVkVMMV9EQ0FDSEVfU0la RSksICAgMTYzODQgfSwKKyAgICB7IDB4MGUsICA2LCA2NCwgTShfU0NfTEVWRUwxX0RDQUNIRV9T SVpFKSwgICAyNDU3NiB9LAorICAgIHsgMHgyMSwgIDgsIDY0LCBNKF9TQ19MRVZFTDJfQ0FDSEVf U0laRSksICAgMjYyMTQ0IH0sCisgICAgeyAweDIyLCAgNCwgNjQsIE0oX1NDX0xFVkVMM19DQUNI RV9TSVpFKSwgICA1MjQyODggfSwKKyAgICB7IDB4MjMsICA4LCA2NCwgTShfU0NfTEVWRUwzX0NB Q0hFX1NJWkUpLCAgMTA0ODU3NiB9LAorICAgIHsgMHgyNSwgIDgsIDY0LCBNKF9TQ19MRVZFTDNf Q0FDSEVfU0laRSksICAyMDk3MTUyIH0sCisgICAgeyAweDI5LCAgOCwgNjQsIE0oX1NDX0xFVkVM M19DQUNIRV9TSVpFKSwgIDQxOTQzMDQgfSwKKyAgICB7IDB4MmMsICA4LCA2NCwgTShfU0NfTEVW RUwxX0RDQUNIRV9TSVpFKSwgICAzMjc2OCB9LAorICAgIHsgMHgzMCwgIDgsIDY0LCBNKF9TQ19M RVZFTDFfSUNBQ0hFX1NJWkUpLCAgIDMyNzY4IH0sCisgICAgeyAweDM5LCAgNCwgNjQsIE0oX1ND X0xFVkVMMl9DQUNIRV9TSVpFKSwgICAxMzEwNzIgfSwKKyAgICB7IDB4M2EsICA2LCA2NCwgTShf U0NfTEVWRUwyX0NBQ0hFX1NJWkUpLCAgIDE5NjYwOCB9LAorICAgIHsgMHgzYiwgIDIsIDY0LCBN KF9TQ19MRVZFTDJfQ0FDSEVfU0laRSksICAgMTMxMDcyIH0sCisgICAgeyAweDNjLCAgNCwgNjQs IE0oX1NDX0xFVkVMMl9DQUNIRV9TSVpFKSwgICAyNjIxNDQgfSwKKyAgICB7IDB4M2QsICA2LCA2 NCwgTShfU0NfTEVWRUwyX0NBQ0hFX1NJWkUpLCAgIDM5MzIxNiB9LAorICAgIHsgMHgzZSwgIDQs IDY0LCBNKF9TQ19MRVZFTDJfQ0FDSEVfU0laRSksICAgNTI0Mjg4IH0sCisgICAgeyAweDNmLCAg MiwgNjQsIE0oX1NDX0xFVkVMMl9DQUNIRV9TSVpFKSwgICAyNjIxNDQgfSwKKyAgICB7IDB4NDEs ICA0LCAzMiwgTShfU0NfTEVWRUwyX0NBQ0hFX1NJWkUpLCAgIDEzMTA3MiB9LAorICAgIHsgMHg0 MiwgIDQsIDMyLCBNKF9TQ19MRVZFTDJfQ0FDSEVfU0laRSksICAgMjYyMTQ0IH0sCisgICAgeyAw eDQzLCAgNCwgMzIsIE0oX1NDX0xFVkVMMl9DQUNIRV9TSVpFKSwgICA1MjQyODggfSwKKyAgICB7 IDB4NDQsICA0LCAzMiwgTShfU0NfTEVWRUwyX0NBQ0hFX1NJWkUpLCAgMTA0ODU3NiB9LAorICAg IHsgMHg0NSwgIDQsIDMyLCBNKF9TQ19MRVZFTDJfQ0FDSEVfU0laRSksICAyMDk3MTUyIH0sCisg ICAgeyAweDQ2LCAgNCwgNjQsIE0oX1NDX0xFVkVMM19DQUNIRV9TSVpFKSwgIDQxOTQzMDQgfSwK KyAgICB7IDB4NDcsICA4LCA2NCwgTShfU0NfTEVWRUwzX0NBQ0hFX1NJWkUpLCAgODM4ODYwOCB9 LAorICAgIHsgMHg0OCwgMTIsIDY0LCBNKF9TQ19MRVZFTDJfQ0FDSEVfU0laRSksICAzMTQ1NzI4 IH0sCisgICAgeyAweDQ5LCAxNiwgNjQsIE0oX1NDX0xFVkVMMl9DQUNIRV9TSVpFKSwgIDQxOTQz MDQgfSwKKyAgICB7IDB4NGEsIDEyLCA2NCwgTShfU0NfTEVWRUwzX0NBQ0hFX1NJWkUpLCAgNjI5 MTQ1NiB9LAorICAgIHsgMHg0YiwgMTYsIDY0LCBNKF9TQ19MRVZFTDNfQ0FDSEVfU0laRSksICA4 Mzg4NjA4IH0sCisgICAgeyAweDRjLCAxMiwgNjQsIE0oX1NDX0xFVkVMM19DQUNIRV9TSVpFKSwg MTI1ODI5MTIgfSwKKyAgICB7IDB4NGQsIDE2LCA2NCwgTShfU0NfTEVWRUwzX0NBQ0hFX1NJWkUp LCAxNjc3NzIxNiB9LAorICAgIHsgMHg0ZSwgMjQsIDY0LCBNKF9TQ19MRVZFTDJfQ0FDSEVfU0la RSksICA2MjkxNDU2IH0sCisgICAgeyAweDYwLCAgOCwgNjQsIE0oX1NDX0xFVkVMMV9EQ0FDSEVf U0laRSksICAgMTYzODQgfSwKKyAgICB7IDB4NjYsICA0LCA2NCwgTShfU0NfTEVWRUwxX0RDQUNI RV9TSVpFKSwgICAgODE5MiB9LAorICAgIHsgMHg2NywgIDQsIDY0LCBNKF9TQ19MRVZFTDFfRENB Q0hFX1NJWkUpLCAgIDE2Mzg0IH0sCisgICAgeyAweDY4LCAgNCwgNjQsIE0oX1NDX0xFVkVMMV9E Q0FDSEVfU0laRSksICAgMzI3NjggfSwKKyAgICB7IDB4NzgsICA4LCA2NCwgTShfU0NfTEVWRUwy X0NBQ0hFX1NJWkUpLCAgMTA0ODU3NiB9LAorICAgIHsgMHg3OSwgIDgsIDY0LCBNKF9TQ19MRVZF TDJfQ0FDSEVfU0laRSksICAgMTMxMDcyIH0sCisgICAgeyAweDdhLCAgOCwgNjQsIE0oX1NDX0xF VkVMMl9DQUNIRV9TSVpFKSwgICAyNjIxNDQgfSwKKyAgICB7IDB4N2IsICA4LCA2NCwgTShfU0Nf TEVWRUwyX0NBQ0hFX1NJWkUpLCAgIDUyNDI4OCB9LAorICAgIHsgMHg3YywgIDgsIDY0LCBNKF9T Q19MRVZFTDJfQ0FDSEVfU0laRSksICAxMDQ4NTc2IH0sCisgICAgeyAweDdkLCAgOCwgNjQsIE0o X1NDX0xFVkVMMl9DQUNIRV9TSVpFKSwgIDIwOTcxNTIgfSwKKyAgICB7IDB4N2YsICAyLCA2NCwg TShfU0NfTEVWRUwyX0NBQ0hFX1NJWkUpLCAgIDUyNDI4OCB9LAorICAgIHsgMHg4MCwgIDgsIDY0 LCBNKF9TQ19MRVZFTDJfQ0FDSEVfU0laRSksICAgNTI0Mjg4IH0sCisgICAgeyAweDgyLCAgOCwg MzIsIE0oX1NDX0xFVkVMMl9DQUNIRV9TSVpFKSwgICAyNjIxNDQgfSwKKyAgICB7IDB4ODMsICA4 LCAzMiwgTShfU0NfTEVWRUwyX0NBQ0hFX1NJWkUpLCAgIDUyNDI4OCB9LAorICAgIHsgMHg4NCwg IDgsIDMyLCBNKF9TQ19MRVZFTDJfQ0FDSEVfU0laRSksICAxMDQ4NTc2IH0sCisgICAgeyAweDg1 LCAgOCwgMzIsIE0oX1NDX0xFVkVMMl9DQUNIRV9TSVpFKSwgIDIwOTcxNTIgfSwKKyAgICB7IDB4 ODYsICA0LCA2NCwgTShfU0NfTEVWRUwyX0NBQ0hFX1NJWkUpLCAgIDUyNDI4OCB9LAorICAgIHsg MHg4NywgIDgsIDY0LCBNKF9TQ19MRVZFTDJfQ0FDSEVfU0laRSksICAxMDQ4NTc2IH0sCisgICAg eyAweGQwLCAgNCwgNjQsIE0oX1NDX0xFVkVMM19DQUNIRV9TSVpFKSwgICA1MjQyODggfSwKKyAg ICB7IDB4ZDEsICA0LCA2NCwgTShfU0NfTEVWRUwzX0NBQ0hFX1NJWkUpLCAgMTA0ODU3NiB9LAor ICAgIHsgMHhkMiwgIDQsIDY0LCBNKF9TQ19MRVZFTDNfQ0FDSEVfU0laRSksICAyMDk3MTUyIH0s CisgICAgeyAweGQ2LCAgOCwgNjQsIE0oX1NDX0xFVkVMM19DQUNIRV9TSVpFKSwgIDEwNDg1NzYg fSwKKyAgICB7IDB4ZDcsICA4LCA2NCwgTShfU0NfTEVWRUwzX0NBQ0hFX1NJWkUpLCAgMjA5NzE1 MiB9LAorICAgIHsgMHhkOCwgIDgsIDY0LCBNKF9TQ19MRVZFTDNfQ0FDSEVfU0laRSksICA0MTk0 MzA0IH0sCisgICAgeyAweGRjLCAxMiwgNjQsIE0oX1NDX0xFVkVMM19DQUNIRV9TSVpFKSwgIDIw OTcxNTIgfSwKKyAgICB7IDB4ZGQsIDEyLCA2NCwgTShfU0NfTEVWRUwzX0NBQ0hFX1NJWkUpLCAg NDE5NDMwNCB9LAorICAgIHsgMHhkZSwgMTIsIDY0LCBNKF9TQ19MRVZFTDNfQ0FDSEVfU0laRSks ICA4Mzg4NjA4IH0sCisgICAgeyAweGUyLCAxNiwgNjQsIE0oX1NDX0xFVkVMM19DQUNIRV9TSVpF KSwgIDIwOTcxNTIgfSwKKyAgICB7IDB4ZTMsIDE2LCA2NCwgTShfU0NfTEVWRUwzX0NBQ0hFX1NJ WkUpLCAgNDE5NDMwNCB9LAorICAgIHsgMHhlNCwgMTYsIDY0LCBNKF9TQ19MRVZFTDNfQ0FDSEVf U0laRSksICA4Mzg4NjA4IH0sCisgICAgeyAweGVhLCAyNCwgNjQsIE0oX1NDX0xFVkVMM19DQUNI RV9TSVpFKSwgMTI1ODI5MTIgfSwKKyAgICB7IDB4ZWIsIDI0LCA2NCwgTShfU0NfTEVWRUwzX0NB Q0hFX1NJWkUpLCAxODg3NDM2OCB9LAorICAgIHsgMHhlYywgMjQsIDY0LCBNKF9TQ19MRVZFTDNf Q0FDSEVfU0laRSksIDI1MTY1ODI0IH0sCisgIH07CisKKyNkZWZpbmUgbmludGVsXzAyX2tub3du IChzaXplb2YgKGludGVsXzAyX2tub3duKSAvIHNpemVvZiAoaW50ZWxfMDJfa25vd24gWzBdKSkK Kworc3RhdGljIGludAoraW50ZWxfMDJfa25vd25fY29tcGFyZSAoY29uc3Qgdm9pZCAqcDEsIGNv bnN0IHZvaWQgKnAyKQoreworICBjb25zdCBzdHJ1Y3QgaW50ZWxfMDJfY2FjaGVfaW5mbyAqaTE7 CisgIGNvbnN0IHN0cnVjdCBpbnRlbF8wMl9jYWNoZV9pbmZvICppMjsKKworICBpMSA9IChjb25z dCBzdHJ1Y3QgaW50ZWxfMDJfY2FjaGVfaW5mbyAqKSBwMTsKKyAgaTIgPSAoY29uc3Qgc3RydWN0 IGludGVsXzAyX2NhY2hlX2luZm8gKikgcDI7CisKKyAgaWYgKGkxLT5pZHggPT0gaTItPmlkeCkK KyAgICByZXR1cm4gMDsKKworICByZXR1cm4gaTEtPmlkeCA8IGkyLT5pZHggPyAtMSA6IDE7Cit9 CisKKworc3RhdGljIGxvbmcgaW50CitfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKQoraW50ZWxf Y2hlY2tfd29yZCAoaW50IG5hbWUsIHVuc2lnbmVkIGludCB2YWx1ZSwgYm9vbCAqaGFzX2xldmVs XzIsCisJCSAgYm9vbCAqbm9fbGV2ZWxfMl9vcl8zLAorCQkgIGNvbnN0IHN0cnVjdCBjcHVfZmVh dHVyZXMgKmNwdV9mZWF0dXJlcykKK3sKKyAgaWYgKCh2YWx1ZSAmIDB4ODAwMDAwMDApICE9IDAp CisgICAgLyogVGhlIHJlZ2lzdGVyIHZhbHVlIGlzIHJlc2VydmVkLiAgKi8KKyAgICByZXR1cm4g MDsKKworICAvKiBGb2xkIHRoZSBuYW1lLiAgVGhlIF9TQ18gY29uc3RhbnRzIGFyZSBhbHdheXMg aW4gdGhlIG9yZGVyIFNJWkUsCisgICAgIEFTU09DLCBMSU5FU0laRS4gICovCisgIGludCBmb2xk ZWRfcmVsX25hbWUgPSAoTShuYW1lKSAvIDMpICogMzsKKworICB3aGlsZSAodmFsdWUgIT0gMCkK KyAgICB7CisgICAgICB1bnNpZ25lZCBpbnQgYnl0ZSA9IHZhbHVlICYgMHhmZjsKKworICAgICAg aWYgKGJ5dGUgPT0gMHg0MCkKKwl7CisJICAqbm9fbGV2ZWxfMl9vcl8zID0gdHJ1ZTsKKworCSAg aWYgKGZvbGRlZF9yZWxfbmFtZSA9PSBNKF9TQ19MRVZFTDNfQ0FDSEVfU0laRSkpCisJICAgIC8q IE5vIG5lZWQgdG8gbG9vayBmdXJ0aGVyLiAgKi8KKwkgICAgYnJlYWs7CisJfQorICAgICAgZWxz ZSBpZiAoYnl0ZSA9PSAweGZmKQorCXsKKwkgIC8qIENQVUlEIGxlYWYgMHg0IGNvbnRhaW5zIGFs bCB0aGUgaW5mb3JtYXRpb24uICBXZSBuZWVkIHRvCisJICAgICBpdGVyYXRlIG92ZXIgaXQuICAq LworCSAgdW5zaWduZWQgaW50IGVheDsKKwkgIHVuc2lnbmVkIGludCBlYng7CisJICB1bnNpZ25l ZCBpbnQgZWN4OworCSAgdW5zaWduZWQgaW50IGVkeDsKKworCSAgdW5zaWduZWQgaW50IHJvdW5k ID0gMDsKKwkgIHdoaWxlICgxKQorCSAgICB7CisJICAgICAgX19jcHVpZF9jb3VudCAoNCwgcm91 bmQsIGVheCwgZWJ4LCBlY3gsIGVkeCk7CisKKwkgICAgICBlbnVtIHsgbnVsbCA9IDAsIGRhdGEg PSAxLCBpbnN0ID0gMiwgdW5pID0gMyB9IHR5cGUgPSBlYXggJiAweDFmOworCSAgICAgIGlmICh0 eXBlID09IG51bGwpCisJCS8qIFRoYXQgd2FzIHRoZSBlbmQuICAqLworCQlicmVhazsKKworCSAg ICAgIHVuc2lnbmVkIGludCBsZXZlbCA9IChlYXggPj4gNSkgJiAweDc7CisKKwkgICAgICBpZiAo KGxldmVsID09IDEgJiYgdHlwZSA9PSBkYXRhCisJCSAgICYmIGZvbGRlZF9yZWxfbmFtZSA9PSBN KF9TQ19MRVZFTDFfRENBQ0hFX1NJWkUpKQorCQkgIHx8IChsZXZlbCA9PSAxICYmIHR5cGUgPT0g aW5zdAorCQkgICAgICAmJiBmb2xkZWRfcmVsX25hbWUgPT0gTShfU0NfTEVWRUwxX0lDQUNIRV9T SVpFKSkKKwkJICB8fCAobGV2ZWwgPT0gMiAmJiBmb2xkZWRfcmVsX25hbWUgPT0gTShfU0NfTEVW RUwyX0NBQ0hFX1NJWkUpKQorCQkgIHx8IChsZXZlbCA9PSAzICYmIGZvbGRlZF9yZWxfbmFtZSA9 PSBNKF9TQ19MRVZFTDNfQ0FDSEVfU0laRSkpCisJCSAgfHwgKGxldmVsID09IDQgJiYgZm9sZGVk X3JlbF9uYW1lID09IE0oX1NDX0xFVkVMNF9DQUNIRV9TSVpFKSkpCisJCXsKKwkJICB1bnNpZ25l ZCBpbnQgb2Zmc2V0ID0gTShuYW1lKSAtIGZvbGRlZF9yZWxfbmFtZTsKKworCQkgIGlmIChvZmZz ZXQgPT0gMCkKKwkJICAgIC8qIENhY2hlIHNpemUuICAqLworCQkgICAgcmV0dXJuICgoKGVieCA+ PiAyMikgKyAxKQorCQkJICAgICogKCgoZWJ4ID4+IDEyKSAmIDB4M2ZmKSArIDEpCisJCQkgICAg KiAoKGVieCAmIDB4ZmZmKSArIDEpCisJCQkgICAgKiAoZWN4ICsgMSkpOworCQkgIGlmIChvZmZz ZXQgPT0gMSkKKwkJICAgIHJldHVybiAoZWJ4ID4+IDIyKSArIDE7CisKKwkJICBhc3NlcnQgKG9m ZnNldCA9PSAyKTsKKwkJICByZXR1cm4gKGVieCAmIDB4ZmZmKSArIDE7CisJCX0KKworCSAgICAg ICsrcm91bmQ7CisJICAgIH0KKwkgIC8qIFRoZXJlIGlzIG5vIG90aGVyIGNhY2hlIGluZm9ybWF0 aW9uIGFueXdoZXJlIGVsc2UuICAqLworCSAgYnJlYWs7CisJfQorICAgICAgZWxzZQorCXsKKwkg IGlmIChieXRlID09IDB4NDkgJiYgZm9sZGVkX3JlbF9uYW1lID09IE0oX1NDX0xFVkVMM19DQUNI RV9TSVpFKSkKKwkgICAgeworCSAgICAgIC8qIEludGVsIHJldXNlZCB0aGlzIHZhbHVlLiAgRm9y IGZhbWlseSAxNSwgbW9kZWwgNiBpdAorCQkgc3BlY2lmaWVzIHRoZSAzcmQgbGV2ZWwgY2FjaGUu ICBPdGhlcndpc2UgdGhlIDJuZAorCQkgbGV2ZWwgY2FjaGUuICAqLworCSAgICAgIHVuc2lnbmVk IGludCBmYW1pbHkgPSBjcHVfZmVhdHVyZXMtPmJhc2ljLmZhbWlseTsKKwkgICAgICB1bnNpZ25l ZCBpbnQgbW9kZWwgPSBjcHVfZmVhdHVyZXMtPmJhc2ljLm1vZGVsOworCisJICAgICAgaWYgKGZh bWlseSA9PSAxNSAmJiBtb2RlbCA9PSA2KQorCQl7CisJCSAgLyogVGhlIGxldmVsIDMgY2FjaGUg aXMgZW5jb2RlZCBmb3IgdGhpcyBtb2RlbCBsaWtlCisJCSAgICAgdGhlIGxldmVsIDIgY2FjaGUg aXMgZm9yIG90aGVyIG1vZGVscy4gIFByZXRlbmQKKwkJICAgICB0aGUgY2FsbGVyIGFza2VkIGZv ciB0aGUgbGV2ZWwgMiBjYWNoZS4gICovCisJCSAgbmFtZSA9IChfU0NfTEVWRUwyX0NBQ0hFX1NJ WkUKKwkJCSAgKyAobmFtZSAtIF9TQ19MRVZFTDNfQ0FDSEVfU0laRSkpOworCQkgIGZvbGRlZF9y ZWxfbmFtZSA9IE0oX1NDX0xFVkVMMl9DQUNIRV9TSVpFKTsKKwkJfQorCSAgICB9CisKKwkgIHN0 cnVjdCBpbnRlbF8wMl9jYWNoZV9pbmZvICpmb3VuZDsKKwkgIHN0cnVjdCBpbnRlbF8wMl9jYWNo ZV9pbmZvIHNlYXJjaDsKKworCSAgc2VhcmNoLmlkeCA9IGJ5dGU7CisJICBmb3VuZCA9IGJzZWFy Y2ggKCZzZWFyY2gsIGludGVsXzAyX2tub3duLCBuaW50ZWxfMDJfa25vd24sCisJCQkgICBzaXpl b2YgKGludGVsXzAyX2tub3duWzBdKSwgaW50ZWxfMDJfa25vd25fY29tcGFyZSk7CisJICBpZiAo Zm91bmQgIT0gTlVMTCkKKwkgICAgeworCSAgICAgIGlmIChmb3VuZC0+cmVsX25hbWUgPT0gZm9s ZGVkX3JlbF9uYW1lKQorCQl7CisJCSAgdW5zaWduZWQgaW50IG9mZnNldCA9IE0obmFtZSkgLSBm b2xkZWRfcmVsX25hbWU7CisKKwkJICBpZiAob2Zmc2V0ID09IDApCisJCSAgICAvKiBDYWNoZSBz aXplLiAgKi8KKwkJICAgIHJldHVybiBmb3VuZC0+c2l6ZTsKKwkJICBpZiAob2Zmc2V0ID09IDEp CisJCSAgICByZXR1cm4gZm91bmQtPmFzc29jOworCisJCSAgYXNzZXJ0IChvZmZzZXQgPT0gMik7 CisJCSAgcmV0dXJuIGZvdW5kLT5saW5lc2l6ZTsKKwkJfQorCisJICAgICAgaWYgKGZvdW5kLT5y ZWxfbmFtZSA9PSBNKF9TQ19MRVZFTDJfQ0FDSEVfU0laRSkpCisJCSpoYXNfbGV2ZWxfMiA9IHRy dWU7CisJICAgIH0KKwl9CisKKyAgICAgIC8qIE5leHQgYnl0ZSBmb3IgdGhlIG5leHQgcm91bmQu ICAqLworICAgICAgdmFsdWUgPj49IDg7CisgICAgfQorCisgIC8qIE5vdGhpbmcgZm91bmQuICAq LworICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgbG9uZyBpbnQgX19hdHRyaWJ1dGVfXyAoKG5v aW5saW5lKSkKK2hhbmRsZV9pbnRlbCAoaW50IG5hbWUsIGNvbnN0IHN0cnVjdCBjcHVfZmVhdHVy ZXMgKmNwdV9mZWF0dXJlcykKK3sKKyAgdW5zaWduZWQgaW50IG1heGlkeCA9IGNwdV9mZWF0dXJl cy0+YmFzaWMubWF4X2NwdWlkOworCisgIC8qIFJldHVybiAtMSBmb3Igb2xkZXIgQ1BVcy4gICov CisgIGlmIChtYXhpZHggPCAyKQorICAgIHJldHVybiAtMTsKKworICAvKiBPSywgd2UgY2FuIHVz ZSB0aGUgQ1BVSUQgaW5zdHJ1Y3Rpb24gdG8gZ2V0IGFsbCBpbmZvIGFib3V0IHRoZQorICAgICBj YWNoZXMuICAqLworICB1bnNpZ25lZCBpbnQgY250ID0gMDsKKyAgdW5zaWduZWQgaW50IG1heCA9 IDE7CisgIGxvbmcgaW50IHJlc3VsdCA9IDA7CisgIGJvb2wgbm9fbGV2ZWxfMl9vcl8zID0gZmFs c2U7CisgIGJvb2wgaGFzX2xldmVsXzIgPSBmYWxzZTsKKworICB3aGlsZSAoY250KysgPCBtYXgp CisgICAgeworICAgICAgdW5zaWduZWQgaW50IGVheDsKKyAgICAgIHVuc2lnbmVkIGludCBlYng7 CisgICAgICB1bnNpZ25lZCBpbnQgZWN4OworICAgICAgdW5zaWduZWQgaW50IGVkeDsKKyAgICAg IF9fY3B1aWQgKDIsIGVheCwgZWJ4LCBlY3gsIGVkeCk7CisKKyAgICAgIC8qIFRoZSBsb3cgYnl0 ZSBvZiBFQVggaW4gdGhlIGZpcnN0IHJvdW5kIGNvbnRhaW4gdGhlIG51bWJlciBvZgorCSByb3Vu ZHMgd2UgaGF2ZSB0byBtYWtlLiAgQXQgbGVhc3Qgb25lLCB0aGUgb25lIHdlIGFyZSBhbHJlYWR5 CisJIGRvaW5nLiAgKi8KKyAgICAgIGlmIChjbnQgPT0gMSkKKwl7CisJICBtYXggPSBlYXggJiAw eGZmOworCSAgZWF4ICY9IDB4ZmZmZmZmMDA7CisJfQorCisgICAgICAvKiBQcm9jZXNzIHRoZSBp bmRpdmlkdWFsIHJlZ2lzdGVycycgdmFsdWUuICAqLworICAgICAgcmVzdWx0ID0gaW50ZWxfY2hl Y2tfd29yZCAobmFtZSwgZWF4LCAmaGFzX2xldmVsXzIsCisJCQkJICZub19sZXZlbF8yX29yXzMs IGNwdV9mZWF0dXJlcyk7CisgICAgICBpZiAocmVzdWx0ICE9IDApCisJcmV0dXJuIHJlc3VsdDsK KworICAgICAgcmVzdWx0ID0gaW50ZWxfY2hlY2tfd29yZCAobmFtZSwgZWJ4LCAmaGFzX2xldmVs XzIsCisJCQkJICZub19sZXZlbF8yX29yXzMsIGNwdV9mZWF0dXJlcyk7CisgICAgICBpZiAocmVz dWx0ICE9IDApCisJcmV0dXJuIHJlc3VsdDsKKworICAgICAgcmVzdWx0ID0gaW50ZWxfY2hlY2tf d29yZCAobmFtZSwgZWN4LCAmaGFzX2xldmVsXzIsCisJCQkJICZub19sZXZlbF8yX29yXzMsIGNw dV9mZWF0dXJlcyk7CisgICAgICBpZiAocmVzdWx0ICE9IDApCisJcmV0dXJuIHJlc3VsdDsKKwor ICAgICAgcmVzdWx0ID0gaW50ZWxfY2hlY2tfd29yZCAobmFtZSwgZWR4LCAmaGFzX2xldmVsXzIs CisJCQkJICZub19sZXZlbF8yX29yXzMsIGNwdV9mZWF0dXJlcyk7CisgICAgICBpZiAocmVzdWx0 ICE9IDApCisJcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgaWYgKG5hbWUgPj0gX1NDX0xFVkVM Ml9DQUNIRV9TSVpFICYmIG5hbWUgPD0gX1NDX0xFVkVMM19DQUNIRV9MSU5FU0laRQorICAgICAg JiYgbm9fbGV2ZWxfMl9vcl8zKQorICAgIHJldHVybiAtMTsKKworICByZXR1cm4gMDsKK30KKwor CitzdGF0aWMgbG9uZyBpbnQgX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkKK2hhbmRsZV9hbWQg KGludCBuYW1lKQoreworICB1bnNpZ25lZCBpbnQgZWF4OworICB1bnNpZ25lZCBpbnQgZWJ4Owor ICB1bnNpZ25lZCBpbnQgZWN4OworICB1bnNpZ25lZCBpbnQgZWR4OworICBfX2NwdWlkICgweDgw MDAwMDAwLCBlYXgsIGVieCwgZWN4LCBlZHgpOworCisgIC8qIE5vIGxldmVsIDQgY2FjaGUgKHll dCkuICAqLworICBpZiAobmFtZSA+IF9TQ19MRVZFTDNfQ0FDSEVfTElORVNJWkUpCisgICAgcmV0 dXJuIDA7CisKKyAgdW5zaWduZWQgaW50IGZuID0gMHg4MDAwMDAwNSArIChuYW1lID49IF9TQ19M RVZFTDJfQ0FDSEVfU0laRSk7CisgIGlmIChlYXggPCBmbikKKyAgICByZXR1cm4gMDsKKworICBf X2NwdWlkIChmbiwgZWF4LCBlYngsIGVjeCwgZWR4KTsKKworICBpZiAobmFtZSA8IF9TQ19MRVZF TDFfRENBQ0hFX1NJWkUpCisgICAgeworICAgICAgbmFtZSArPSBfU0NfTEVWRUwxX0RDQUNIRV9T SVpFIC0gX1NDX0xFVkVMMV9JQ0FDSEVfU0laRTsKKyAgICAgIGVjeCA9IGVkeDsKKyAgICB9CisK KyAgc3dpdGNoIChuYW1lKQorICAgIHsKKyAgICBjYXNlIF9TQ19MRVZFTDFfRENBQ0hFX1NJWkU6 CisgICAgICByZXR1cm4gKGVjeCA+PiAxNCkgJiAweDNmYzAwOworCisgICAgY2FzZSBfU0NfTEVW RUwxX0RDQUNIRV9BU1NPQzoKKyAgICAgIGVjeCA+Pj0gMTY7CisgICAgICBpZiAoKGVjeCAmIDB4 ZmYpID09IDB4ZmYpCisJLyogRnVsbHkgYXNzb2NpYXRpdmUuICAqLworCXJldHVybiAoZWN4IDw8 IDIpICYgMHgzZmMwMDsKKyAgICAgIHJldHVybiBlY3ggJiAweGZmOworCisgICAgY2FzZSBfU0Nf TEVWRUwxX0RDQUNIRV9MSU5FU0laRToKKyAgICAgIHJldHVybiBlY3ggJiAweGZmOworCisgICAg Y2FzZSBfU0NfTEVWRUwyX0NBQ0hFX1NJWkU6CisgICAgICByZXR1cm4gKGVjeCAmIDB4ZjAwMCkg PT0gMCA/IDAgOiAoZWN4ID4+IDYpICYgMHgzZmZmYzAwOworCisgICAgY2FzZSBfU0NfTEVWRUwy X0NBQ0hFX0FTU09DOgorICAgICAgc3dpdGNoICgoZWN4ID4+IDEyKSAmIDB4ZikKKwl7CisJY2Fz ZSAwOgorCWNhc2UgMToKKwljYXNlIDI6CisJY2FzZSA0OgorCSAgcmV0dXJuIChlY3ggPj4gMTIp ICYgMHhmOworCWNhc2UgNjoKKwkgIHJldHVybiA4OworCWNhc2UgODoKKwkgIHJldHVybiAxNjsK KwljYXNlIDEwOgorCSAgcmV0dXJuIDMyOworCWNhc2UgMTE6CisJICByZXR1cm4gNDg7CisJY2Fz ZSAxMjoKKwkgIHJldHVybiA2NDsKKwljYXNlIDEzOgorCSAgcmV0dXJuIDk2OworCWNhc2UgMTQ6 CisJICByZXR1cm4gMTI4OworCWNhc2UgMTU6CisJICByZXR1cm4gKChlY3ggPj4gNikgJiAweDNm ZmZjMDApIC8gKGVjeCAmIDB4ZmYpOworCWRlZmF1bHQ6CisJICByZXR1cm4gMDsKKwl9CisgICAg ICAvKiBOT1RSRUFDSEVEICovCisKKyAgICBjYXNlIF9TQ19MRVZFTDJfQ0FDSEVfTElORVNJWkU6 CisgICAgICByZXR1cm4gKGVjeCAmIDB4ZjAwMCkgPT0gMCA/IDAgOiBlY3ggJiAweGZmOworCisg ICAgY2FzZSBfU0NfTEVWRUwzX0NBQ0hFX1NJWkU6CisgICAgICByZXR1cm4gKGVkeCAmIDB4ZjAw MCkgPT0gMCA/IDAgOiAoZWR4ICYgMHgzZmZjMDAwMCkgPDwgMTsKKworICAgIGNhc2UgX1NDX0xF VkVMM19DQUNIRV9BU1NPQzoKKyAgICAgIHN3aXRjaCAoKGVkeCA+PiAxMikgJiAweGYpCisJewor CWNhc2UgMDoKKwljYXNlIDE6CisJY2FzZSAyOgorCWNhc2UgNDoKKwkgIHJldHVybiAoZWR4ID4+ IDEyKSAmIDB4ZjsKKwljYXNlIDY6CisJICByZXR1cm4gODsKKwljYXNlIDg6CisJICByZXR1cm4g MTY7CisJY2FzZSAxMDoKKwkgIHJldHVybiAzMjsKKwljYXNlIDExOgorCSAgcmV0dXJuIDQ4Owor CWNhc2UgMTI6CisJICByZXR1cm4gNjQ7CisJY2FzZSAxMzoKKwkgIHJldHVybiA5NjsKKwljYXNl IDE0OgorCSAgcmV0dXJuIDEyODsKKwljYXNlIDE1OgorCSAgcmV0dXJuICgoZWR4ICYgMHgzZmZj MDAwMCkgPDwgMSkgLyAoZWR4ICYgMHhmZik7CisJZGVmYXVsdDoKKwkgIHJldHVybiAwOworCX0K KyAgICAgIC8qIE5PVFJFQUNIRUQgKi8KKworICAgIGNhc2UgX1NDX0xFVkVMM19DQUNIRV9MSU5F U0laRToKKyAgICAgIHJldHVybiAoZWR4ICYgMHhmMDAwKSA9PSAwID8gMCA6IGVkeCAmIDB4ZmY7 CisKKyAgICBkZWZhdWx0OgorICAgICAgYXNzZXJ0ICghICJjYW5ub3QgaGFwcGVuIik7CisgICAg fQorICByZXR1cm4gLTE7Cit9CisKKworc3RhdGljIGxvbmcgaW50IF9fYXR0cmlidXRlX18gKChu b2lubGluZSkpCitoYW5kbGVfemhhb3hpbiAoaW50IG5hbWUpCit7CisgIHVuc2lnbmVkIGludCBl YXg7CisgIHVuc2lnbmVkIGludCBlYng7CisgIHVuc2lnbmVkIGludCBlY3g7CisgIHVuc2lnbmVk IGludCBlZHg7CisKKyAgaW50IGZvbGRlZF9yZWxfbmFtZSA9IChNKG5hbWUpIC8gMykgKiAzOwor CisgIHVuc2lnbmVkIGludCByb3VuZCA9IDA7CisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIF9f Y3B1aWRfY291bnQgKDQsIHJvdW5kLCBlYXgsIGVieCwgZWN4LCBlZHgpOworCisgICAgICBlbnVt IHsgbnVsbCA9IDAsIGRhdGEgPSAxLCBpbnN0ID0gMiwgdW5pID0gMyB9IHR5cGUgPSBlYXggJiAw eDFmOworICAgICAgaWYgKHR5cGUgPT0gbnVsbCkKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIHVu c2lnbmVkIGludCBsZXZlbCA9IChlYXggPj4gNSkgJiAweDc7CisKKyAgICAgIGlmICgobGV2ZWwg PT0gMSAmJiB0eXBlID09IGRhdGEKKyAgICAgICAgJiYgZm9sZGVkX3JlbF9uYW1lID09IE0oX1ND X0xFVkVMMV9EQ0FDSEVfU0laRSkpCisgICAgICAgIHx8IChsZXZlbCA9PSAxICYmIHR5cGUgPT0g aW5zdAorICAgICAgICAgICAgJiYgZm9sZGVkX3JlbF9uYW1lID09IE0oX1NDX0xFVkVMMV9JQ0FD SEVfU0laRSkpCisgICAgICAgIHx8IChsZXZlbCA9PSAyICYmIGZvbGRlZF9yZWxfbmFtZSA9PSBN KF9TQ19MRVZFTDJfQ0FDSEVfU0laRSkpCisgICAgICAgIHx8IChsZXZlbCA9PSAzICYmIGZvbGRl ZF9yZWxfbmFtZSA9PSBNKF9TQ19MRVZFTDNfQ0FDSEVfU0laRSkpKQorICAgICAgICB7CisgICAg ICAgICAgdW5zaWduZWQgaW50IG9mZnNldCA9IE0obmFtZSkgLSBmb2xkZWRfcmVsX25hbWU7CisK KyAgICAgICAgICBpZiAob2Zmc2V0ID09IDApCisgICAgICAgICAgICAvKiBDYWNoZSBzaXplLiAg Ki8KKyAgICAgICAgICAgIHJldHVybiAoKChlYnggPj4gMjIpICsgMSkKKyAgICAgICAgICAgICAg ICAqICgoKGVieCA+PiAxMikgJiAweDNmZikgKyAxKQorICAgICAgICAgICAgICAgICogKChlYngg JiAweGZmZikgKyAxKQorICAgICAgICAgICAgICAgICogKGVjeCArIDEpKTsKKyAgICAgICAgICBp ZiAob2Zmc2V0ID09IDEpCisgICAgICAgICAgICByZXR1cm4gKGVieCA+PiAyMikgKyAxOworCisg ICAgICAgICAgYXNzZXJ0IChvZmZzZXQgPT0gMik7CisgICAgICAgICAgcmV0dXJuIChlYnggJiAw eGZmZikgKyAxOworICAgICAgICB9CisKKyAgICAgICsrcm91bmQ7CisgICAgfQorCisgIC8qIE5v dGhpbmcgZm91bmQuICAqLworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3N5c2RlcHMveDg2 L2RsLWdldC1jcHUtZmVhdHVyZXMuYyBiL3N5c2RlcHMveDg2L2RsLWdldC1jcHUtZmVhdHVyZXMu YwppbmRleCA1ZjllNDZiMGM2Li4zNDk0NzJkOTlmIDEwMDY0NAotLS0gYS9zeXNkZXBzL3g4Ni9k bC1nZXQtY3B1LWZlYXR1cmVzLmMKKysrIGIvc3lzZGVwcy94ODYvZGwtZ2V0LWNwdS1mZWF0dXJl cy5jCkBAIC0xLDQgKzEsNCBAQAotLyogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExp YnJhcnkuCisvKiBJbml0aWFsaXplIENQVSBmZWF0dXJlIGRhdGEgdmlhIElGVU5DIHJlbG9jYXRp b24uCiAgICBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IEluYy4KIAogICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0xOCw2ICsxOCwzMSBAQAogCiAjaW5jbHVkZSA8bGRz b2RlZnMuaD4KIAorI2lmZGVmIFNIQVJFRAorIyBpbmNsdWRlIDxjcHUtZmVhdHVyZXMuYz4KKwor LyogTkI6IE5vcm1hbGx5LCBETF9QTEFURk9STV9JTklUIGNhbGxzIGluaXRfY3B1X2ZlYXR1cmVz IHRvIGluaXRpYWxpemUKKyAgIENQVSBmZWF0dXJlcyBpbiBkeW5hbWljIGV4ZWN1dGFibGUuICBC dXQgd2hlbiBsb2FkaW5nIGxkLnNvIGluc2lkZSBvZgorICAgc3RhdGljIGV4ZWN1dGFibGUsIERM X1BMQVRGT1JNX0lOSVQgaXNuJ3QgY2FsbGVkIGFuZCBJRlVOQyByZWxvY2F0aW9uCisgICBpcyB1 c2VkIHRvIGNhbGwgaW5pdF9jcHVfZmVhdHVyZXMuICBJbiBzdGF0aWMgZXhlY3V0YWJsZSwgaXQg aXMgY2FsbGVkCisgICBvbmNlIGJ5IElGVU5DIHJlbG9jYXRpb24uICBJbiBkeW5hbWljIGV4ZWN1 dGFibGUsIGl0IGlzIGNhbGxlZCB0d2ljZQorICAgYnkgRExfUExBVEZPUk1fSU5JVCBhbmQgYnkg SUZVTkMgcmVsb2NhdGlvbi4gICovCitleHRlcm4gdm9pZCBfX3g4Nl9jcHVfZmVhdHVyZXMgKHZv aWQpIGF0dHJpYnV0ZV9oaWRkZW47Citjb25zdCB2b2lkICgqX194ODZfY3B1X2ZlYXR1cmVzX3Ap ICh2b2lkKSBhdHRyaWJ1dGVfaGlkZGVuCisgID0gX194ODZfY3B1X2ZlYXR1cmVzOworCit2b2lk CitfZGxfeDg2X2luaXRfY3B1X2ZlYXR1cmVzICh2b2lkKQoreworICBzdHJ1Y3QgY3B1X2ZlYXR1 cmVzICpjcHVfZmVhdHVyZXMgPSBfX2dldF9jcHVfZmVhdHVyZXMgKCk7CisgIGlmIChjcHVfZmVh dHVyZXMtPmJhc2ljLmtpbmQgPT0gYXJjaF9raW5kX3Vua25vd24pCisgICAgaW5pdF9jcHVfZmVh dHVyZXMgKGNwdV9mZWF0dXJlcyk7Cit9CisKK19faWZ1bmMgKF9feDg2X2NwdV9mZWF0dXJlcywg X194ODZfY3B1X2ZlYXR1cmVzLCBOVUxMLCB2b2lkLAorCSBfZGxfeDg2X2luaXRfY3B1X2ZlYXR1 cmVzKTsKKyNlbmRpZgorCiAjdW5kZWYgX194ODZfZ2V0X2NwdV9mZWF0dXJlcwogCiBjb25zdCBz dHJ1Y3QgY3B1X2ZlYXR1cmVzICoKZGlmZiAtLWdpdCBhL3N5c2RlcHMveDg2L2luY2x1ZGUvY3B1 LWZlYXR1cmVzLmggYi9zeXNkZXBzL3g4Ni9pbmNsdWRlL2NwdS1mZWF0dXJlcy5oCmluZGV4IGRj ZjI5YjZmZTguLmY2MmJlMGI5YjMgMTAwNjQ0Ci0tLSBhL3N5c2RlcHMveDg2L2luY2x1ZGUvY3B1 LWZlYXR1cmVzLmgKKysrIGIvc3lzZGVwcy94ODYvaW5jbHVkZS9jcHUtZmVhdHVyZXMuaApAQCAt MTU5LDYgKzE1OSw3IEBAIHN0cnVjdCBjcHVfZmVhdHVyZXMKIC8qIFVudXNlZCBmb3IgeDg2LiAg Ki8KICMgIGRlZmluZSBJTklUX0FSQ0goKQogIyAgZGVmaW5lIF9feDg2X2dldF9jcHVfZmVhdHVy ZXMobWF4KSAoJkdMUk8oZGxfeDg2X2NwdV9mZWF0dXJlcykpCitleHRlcm4gdm9pZCBfZGxfeDg2 X2luaXRfY3B1X2ZlYXR1cmVzICh2b2lkKSBhdHRyaWJ1dGVfaGlkZGVuOwogIyBlbmRpZgogCiAj IGlmZGVmIF9feDg2XzY0X18KZGlmZiAtLWdpdCBhL3N5c2RlcHMveDg2L2xpYmMtc3RhcnQuYyBi L3N5c2RlcHMveDg2L2xpYmMtc3RhcnQuYwppbmRleCA4NzViYjkzZTU1Li5jYTM1ZDRkYTk3IDEw MDY0NAotLS0gYS9zeXNkZXBzL3g4Ni9saWJjLXN0YXJ0LmMKKysrIGIvc3lzZGVwcy94ODYvbGli Yy1zdGFydC5jCkBAIC0yMCw3ICsyMCw2IEBACiAgICBQSUUuICAqLwogIyBpbmNsdWRlIDxzdGFy dHVwLmg+CiAjIGluY2x1ZGUgPGxkc29kZWZzLmg+Ci0jIGluY2x1ZGUgPGNwdS1mZWF0dXJlcy5o PgogIyBpbmNsdWRlIDxjcHUtZmVhdHVyZXMuYz4KIAogZXh0ZXJuIHN0cnVjdCBjcHVfZmVhdHVy ZXMgX2RsX3g4Nl9jcHVfZmVhdHVyZXM7CmRpZmYgLS1naXQgYS9zeXNkZXBzL3g4Nl82NC9kbC1t YWNoaW5lLmggYi9zeXNkZXBzL3g4Nl82NC9kbC1tYWNoaW5lLmgKaW5kZXggY2E3M2Q4ZmVmOS4u YmI5M2M3YzZhYiAxMDA2NDQKLS0tIGEvc3lzZGVwcy94ODZfNjQvZGwtbWFjaGluZS5oCisrKyBi L3N5c2RlcHMveDg2XzY0L2RsLW1hY2hpbmUuaApAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUg PHN5c2RlcC5oPgogI2luY2x1ZGUgPHRscy5oPgogI2luY2x1ZGUgPGRsLXRsc2Rlc2MuaD4KLSNp bmNsdWRlIDxjcHUtZmVhdHVyZXMuYz4KIAogLyogUmV0dXJuIG5vbnplcm8gaWZmIEVMRiBoZWFk ZXIgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBydW5uaW5nIGhvc3QuICAqLwogc3RhdGljIGlubGlu ZSBpbnQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpCkBAIC0yMjMsOSArMjIyLDkgQEAgc3RhdGlj IGlubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKQogZGxfcGxhdGZvcm1faW5pdCAo dm9pZCkKIHsKICNpZiBJU19JTiAocnRsZCkKLSAgLyogaW5pdF9jcHVfZmVhdHVyZXMgaGFzIGJl ZW4gY2FsbGVkIGVhcmx5IGZyb20gX19saWJjX3N0YXJ0X21haW4gaW4KLSAgICAgc3RhdGljIGV4 ZWN1dGFibGUuICAqLwotICBpbml0X2NwdV9mZWF0dXJlcyAoJkdMUk8oZGxfeDg2X2NwdV9mZWF0 dXJlcykpOworICAvKiBfZGxfeDg2X2luaXRfY3B1X2ZlYXR1cmVzIGlzIGEgd3JhcHBlciBmb3Ig aW5pdF9jcHVfZmVhdHVyZXMgd2hpY2gKKyAgICAgaGFzIGJlZW4gY2FsbGVkIGVhcmx5IGZyb20g X19saWJjX3N0YXJ0X21haW4gaW4gc3RhdGljIGV4ZWN1dGFibGUuICAqLworICBfZGxfeDg2X2lu aXRfY3B1X2ZlYXR1cmVzICgpOwogI2Vsc2UKICAgaWYgKEdMUk8oZGxfcGxhdGZvcm0pICE9IE5V TEwgJiYgKkdMUk8oZGxfcGxhdGZvcm0pID09ICdcMCcpCiAgICAgLyogQXZvaWQgYW4gZW1wdHkg c3RyaW5nIHdoaWNoIHdvdWxkIGRpc3R1cmIgdXMuICAqLwotLSAKMi4yNi4yCgo= --00000000000090275e05b0a15443--