From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-Status: No, score=-4.1 required=3.0 tests=AWL,BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, SPF_HELO_PASS,SPF_PASS shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by dcvr.yhbt.net (Postfix) with ESMTPS id B29C11F55B for ; Sat, 6 Jun 2020 21:51:48 +0000 (UTC) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id D45F43851C35; Sat, 6 Jun 2020 21:51:46 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D45F43851C35 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1591480306; bh=VhMKph4Z+mrLgcLc6D1ig5fXGlXzIHwunc623aapS9U=; h=References:In-Reply-To:Date:Subject:To:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=jHevthCLvgeZCVfKwqTmkFGfByr6ElSSWIi3Rg5dT2SxLagptFYbUtnVN2N7fBzrI 4QUkwDKdEqBNEaCy0EgGVvmnntsH9C9XwzTggxWEVgID39a4W0OOFg+nebK4rrLQyM nZr8q8WoKJz8xlht0E7lYhgfRydSTkf633dYFpGA= Received: from mail-il1-x141.google.com (mail-il1-x141.google.com [IPv6:2607:f8b0:4864:20::141]) by sourceware.org (Postfix) with ESMTPS id F07533851C17 for ; Sat, 6 Jun 2020 21:51:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org F07533851C17 Received: by mail-il1-x141.google.com with SMTP id b5so13226262iln.5 for ; Sat, 06 Jun 2020 14:51:38 -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=VhMKph4Z+mrLgcLc6D1ig5fXGlXzIHwunc623aapS9U=; b=ndkhd2X+h4tEsEFEBOD0GEj/DeQX0SHYeMG5h68oQ5w5aofNB24npv9r2gH+AESQ2k je9hRS6+aG+vvrywize4W5O+HqE0hEtSH4MDiIpnC+G1q5w4sYZJwausdLbxEIZMRJPe m4x4RjjVPOPiq34xeeZH+BzVtlOe7IvfOtZTkKqZ3Gg8S7kefAR0K54QAtFcurQmCQBH RFltDX93qt33b8B9Z3r9zg/W2ZUo0uXrJ73hH7stC7lyeNXHxypfTIZ6u1xA2xm/u0se jSU8FARvkWl7wK6JOuciE5RzUj52iiERyUWcpCTo0sDKLhrVzqBvjmCeS3KkMuftKe/Y moxA== X-Gm-Message-State: AOAM5311HP71Op8dHfpUD2/jE4yAWxcQuuzkDweDDLpbgzDR6WJsmg1U vzfvzHG2+UMSZ+4yPHwbEkxJl8Ak1th6tqnk69oKwpsm X-Google-Smtp-Source: ABdhPJyR7aIX0whlkmHL0UgLgf9QlHNm/vCsoXK2Prz4gdFjHb20KADR75euRwR0pASlNMWbog5nWESA9Vk7MOD6Wjw= X-Received: by 2002:a92:d147:: with SMTP id t7mr14530485ilg.151.1591480298232; Sat, 06 Jun 2020 14:51:38 -0700 (PDT) MIME-Version: 1.0 References: <87blm2wlzk.fsf@mid.deneb.enyo.de> <20200605224550.GA1253830@gmail.com> In-Reply-To: <20200605224550.GA1253830@gmail.com> Date: Sat, 6 Jun 2020 14:51:02 -0700 Message-ID: Subject: V3 [PATCH] libc.so: Add --list-tunables support to __libc_main To: GNU C Library Content-Type: multipart/mixed; boundary="000000000000d8410d05a77161dd" 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: , From: "H.J. Lu via Libc-alpha" Reply-To: "H.J. Lu" Cc: Hushiyuan , Florian Weimer Errors-To: libc-alpha-bounces@sourceware.org Sender: "Libc-alpha" --000000000000d8410d05a77161dd Content-Type: text/plain; charset="UTF-8" On Fri, Jun 5, 2020 at 3:45 PM H.J. Lu wrote: > > On Thu, Jun 04, 2020 at 02:00:35PM -0700, H.J. Lu wrote: > > On Mon, Jun 1, 2020 at 7:08 PM Carlos O'Donell wrote: > > > > > > On Mon, Jun 1, 2020 at 6:44 PM H.J. Lu wrote: > > > > Tunables are designed to pass info from user to glibc, not the other > > > > way around. When __libc_main is called, init_cacheinfo is never > > > > called. I can call init_cacheinfo from __libc_main. But there is no > > > > interface to update min and max values from init_cacheinfo. I don't > > > > think --list-tunables will work here without changes to tunables. > > > > > > You have a dynamic threshold. > > > > > > You have to tell the user what that minimum is, otherwise they can't > > > use the tunable reliably. > > > > > > This is the first instance of a min/max that is dynamically determined. > > > > > > You must fetch the cache info ahead of the tunable initialization, that > > > is you must call init_cacheinfo before __init_tunables. > > > > > > You can initialize the tunable data dynamically like this: > > > > > > /* Dynamically set the min and max of glibc.foo.bar. */ > > > tunable_id_t id = TUNABLE_ENUM_NAME (glibc, foo, bar); > > > tunable_list[id].type.min = lowval; > > > tunable_list[id].type.max = highval; > > > > > > We do something similar for maybe_enable_malloc_check. > > > > > > Then once the tunables are parsed, and the cpu features are loaded > > > you can print the tunables, and the printed tunables will have meaningful > > > min and max values. > > > > > > If you have circular dependency, then you must process the cpu features > > > first without reading from the tunables, then allow the tunables to be > > > initialized from the system, *then* process the tunables to alter the existing > > > cpu feature settings. > > > > > > > How about this? I got > > > > Here is the updated patch, which depends on > > https://sourceware.org/pipermail/libc-alpha/2020-June/114820.html > > to add "%d" support to _dl_debug_vdprintf. I got > > $ ./elf/ld.so ./libc.so --list-tunables > glibc.elision.skip_lock_after_retries: 3 (min: -2147483648, max: 2147483647) > glibc.malloc.trim_threshold: 0x0 (min: 0x0, max: 0xffffffff) > glibc.malloc.perturb: 0 (min: 0, max: 255) > glibc.cpu.x86_shared_cache_size: 0x100000 (min: 0x0, max: 0xffffffff) > glibc.elision.tries: 3 (min: -2147483648, max: 2147483647) > glibc.elision.enable: 0 (min: 0, max: 1) > glibc.malloc.mxfast: 0x0 (min: 0x0, max: 0xffffffff) > glibc.elision.skip_lock_busy: 3 (min: -2147483648, max: 2147483647) > glibc.malloc.top_pad: 0x0 (min: 0x0, max: 0xffffffff) > glibc.cpu.x86_non_temporal_threshold: 0x600000 (min: 0x0, max: 0xffffffff) > glibc.cpu.x86_shstk: > glibc.cpu.hwcap_mask: 0x6 (min: 0x0, max: 0xffffffff) > glibc.malloc.mmap_max: 0 (min: -2147483648, max: 2147483647) > glibc.elision.skip_trylock_internal_abort: 3 (min: -2147483648, max: 2147483647) > glibc.malloc.tcache_unsorted_limit: 0x0 (min: 0x0, max: 0xffffffff) > glibc.cpu.x86_ibt: > glibc.cpu.hwcaps: > glibc.elision.skip_lock_internal_abort: 3 (min: -2147483648, max: 2147483647) > glibc.malloc.arena_max: 0x0 (min: 0x1, max: 0xffffffff) > glibc.malloc.mmap_threshold: 0x0 (min: 0x0, max: 0xffffffff) > glibc.cpu.x86_data_cache_size: 0x8000 (min: 0x0, max: 0xffffffff) > glibc.malloc.tcache_count: 0x0 (min: 0x0, max: 0xffffffff) > glibc.malloc.arena_test: 0x0 (min: 0x1, max: 0xffffffff) > glibc.pthread.mutex_spin_count: 100 (min: 0, max: 32767) > glibc.malloc.tcache_max: 0x0 (min: 0x0, max: 0xffffffff) > glibc.malloc.check: 0 (min: 0, max: 3) > $ > > Ok for master? > Here is the updated patch. To support --list-tunables, a target should add CPPFLAGS-version.c = -DLIBC_MAIN=__libc_main_body CPPFLAGS-libc-main.S = -DLIBC_MAIN=__libc_main_body and start.S should be updated to define __libc_main and call __libc_main_body: extern void __libc_main_body (int argc, char **argv) __attribute__ ((noreturn, visibility ("hidden"))); when LIBC_MAIN is defined. -- H.J. --000000000000d8410d05a77161dd Content-Type: text/x-patch; charset="US-ASCII"; name="0001-libc.so-Add-list-tunables-support-to-__libc_main.patch" Content-Disposition: attachment; filename="0001-libc.so-Add-list-tunables-support-to-__libc_main.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kb466wjb0 RnJvbSAyNTY2ODkxMDY5ZTM0YWY4Zjc2OGI0M2EzZTg4Mjc4ZDlkYjUwZDk4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiSC5KLiBMdSIgPGhqbC50b29sc0BnbWFpbC5jb20+CkRhdGU6 IE1vbiwgMSBKdW4gMjAyMCAxNDoxMTozMiAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIGxpYmMuc286 IEFkZCAtLWxpc3QtdHVuYWJsZXMgc3VwcG9ydCB0byBfX2xpYmNfbWFpbgoKUGFzcyAtLWxpc3Qt dHVuYWJsZXMgdG8gX19saWJjX21haW4gdG8gcHJpbnQgdHVuYWJsZXMgd2l0aCBtaW4gYW5kIG1h eAp2YWx1ZXMuICBUbyBzdXBwb3J0IC0tbGlzdC10dW5hYmxlcywgYSB0YXJnZXQgc2hvdWxkIGFk ZAoKQ1BQRkxBR1MtdmVyc2lvbi5jID0gLURMSUJDX01BSU49X19saWJjX21haW5fYm9keQpDUFBG TEFHUy1saWJjLW1haW4uUyA9IC1ETElCQ19NQUlOPV9fbGliY19tYWluX2JvZHkKCmFuZCBzdGFy dC5TIHNob3VsZCBiZSB1cGRhdGVkIHRvIGRlZmluZSBfX2xpYmNfbWFpbiBhbmQgY2FsbApfX2xp YmNfbWFpbl9ib2R5OgoKZXh0ZXJuIHZvaWQgX19saWJjX21haW5fYm9keSAoaW50IGFyZ2MsIGNo YXIgKiphcmd2KQogIF9fYXR0cmlidXRlX18gKChub3JldHVybiwgdmlzaWJpbGl0eSAoImhpZGRl biIpKSk7Cgp3aGVuIExJQkNfTUFJTiBpcyBkZWZpbmVkLgoKQ3VycmVudGx5IHRoaXMgb3B0aW9u IGlzIG9ubHkgZnVuY3Rpb25hbCBvbiBpMzg2IGFuZCB4ODYtNjQuCgpUd28gZnVuY3Rpb25zLCBf X3R1bmFibGVfdXBkYXRlX3ZhbCBhbmQgX190dW5hYmxlc19wcmludCwgYXJlIGFkZGVkIHRvCnVw ZGF0ZSB0dW5hYmxlIHZhbHVlcyBhbmQgcHJpbnQgdHVuYWJsZSB2YWx1ZXMuCgpYODYgcHJvY2Vz c29yIGNhY2hlIGluZm8gaXMgbW92ZWQgdG8gY3B1X2ZlYXR1cmVzIHNvIHRoYXQgaXQgaXMgYXZh aWxhYmxlCmZvciBfX3R1bmFibGVzX3ByaW50IHdpdGggLS1saXN0LXR1bmFibGVzLgotLS0KIGNz dS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMiArLQogY3N1L2xpYmMtbWFp bi5TICAgICAgICAgICAgICAgICAgICAgIHwgIDQ0ICsrCiBjc3UvdmVyc2lvbi5jICAgICAgICAg ICAgICAgICAgICAgICAgfCAgMjkgKy0KIGVsZi9WZXJzaW9ucyAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAgNiArCiBlbGYvZGwtdHVuYWJsZXMuYyAgICAgICAgICAgICAgICAgICAgfCAgODgg KystCiBlbGYvZGwtdHVuYWJsZXMuaCAgICAgICAgICAgICAgICAgICAgfCAgMTcgKwogbWFudWFs L3R1bmFibGVzLnRleGkgICAgICAgICAgICAgICAgIHwgIDMzICsKIHN5c2RlcHMvaTM4Ni9jYWNo ZWluZm8uYyAgICAgICAgICAgICB8ICAgMyAtCiBzeXNkZXBzL2kzODYvc3RhcnQuUyAgICAgICAg ICAgICAgICAgfCAgMjggKy0KIHN5c2RlcHMvbWFjaC9odXJkL2kzODYvbG9jYWxwbHQuZGF0YSB8 ICAgMSArCiBzeXNkZXBzL3g4Ni9NYWtlZmlsZSAgICAgICAgICAgICAgICAgfCAgIDQgKy0KIHN5 c2RlcHMveDg2L2NhY2hlaW5mby5jICAgICAgICAgICAgICB8IDg1MiArKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCiBzeXNkZXBzL3g4Ni9jcHUtZmVhdHVyZXMuYyAgICAgICAgICAgfCAgMTkgKy0K IHN5c2RlcHMveDg2L2NwdS1mZWF0dXJlcy5oICAgICAgICAgICB8ICAyNiArCiBzeXNkZXBzL3g4 Ni9kbC1jYWNoZWluZm8uYyAgICAgICAgICAgfCA4ODggKysrKysrKysrKysrKysrKysrKysrKysr KysrCiBzeXNkZXBzL3g4Ni9pbml0LWFyY2guaCAgICAgICAgICAgICAgfCAgIDMgKwogc3lzZGVw cy94ODZfNjQvc3RhcnQuUyAgICAgICAgICAgICAgIHwgIDM2ICstCiAxNyBmaWxlcyBjaGFuZ2Vk LCAxMjM2IGluc2VydGlvbnMoKyksIDg1MyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBjc3UvbGliYy1tYWluLlMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL2kzODYvY2FjaGVp bmZvLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3g4Ni9kbC1jYWNoZWluZm8uYwoKZGlm ZiAtLWdpdCBhL2NzdS9NYWtlZmlsZSBiL2NzdS9NYWtlZmlsZQppbmRleCA1NTVhZTI3ZGVhLi4y ZGRhOWMxODk0IDEwMDY0NAotLS0gYS9jc3UvTWFrZWZpbGUKKysrIGIvY3N1L01ha2VmaWxlCkBA IC0yNyw3ICsyNyw3IEBAIHN1YmRpciA6PSBjc3UKIGluY2x1ZGUgLi4vTWFrZWNvbmZpZwogCiBy b3V0aW5lcyA9IGluaXQtZmlyc3QgbGliYy1zdGFydCAkKGxpYmMtaW5pdCkgc3lzZGVwIHZlcnNp b24gY2hlY2tfZmRzIFwKLQkgICBsaWJjLXRscyBlbGYtaW5pdCBkc29faGFuZGxlCisJICAgbGli Yy10bHMgZWxmLWluaXQgZHNvX2hhbmRsZSBsaWJjLW1haW4KIGF1eAkgPSBlcnJubwogZWxpZGUt cm91dGluZXMub3MgPSBsaWJjLXRscwogc3RhdGljLW9ubHktcm91dGluZXMgPSBlbGYtaW5pdApA QCAtNzMsNiArNzMsMTAgQEAgZXh0cmEtb2JqcyArPSBnbW9uLXN0YXJ0Lm8KIGVuZGlmCiBpbnN0 YWxsLWxpYiArPSBTJChzdGFydC1pbnN0YWxsZWQtbmFtZSkKIGdlbmVyYXRlZCArPSBzdGFydC5v cworaWZlcSAoJChoYXZlLXR1bmFibGVzKSQoY3Jvc3MtY29tcGlsaW5nKSx5ZXNubykKK3Rlc3Rz LXNwZWNpYWwgKz0gJChvYmpwZngpbGlzdC10dW5hYmxlcy5vdXQKK2dlbmVyYXRlZCArPSBsaXN0 LXR1bmFibGVzLm91dAorZW5kaWYKIGVsc2UKIGV4dHJhLW9ianMgKz0gZ21vbi1zdGFydC5vCiBl bmRpZgpAQCAtMTkxLDMgKzE5NSw5IEBAIGlmbmVxICgkKG11bHRpZGlyKSwuKQogJChhZGRwcmVm aXggJChvYmpwZngpJChtdWx0aWRpcikvLCAkKGluc3RhbGwtbGliKSk6ICQoYWRkcHJlZml4ICQo b2JqcGZ4KSwgJChpbnN0YWxsLWxpYikpCiAJJChtYWtlLWxpbmstbXVsdGlkaXIpCiBlbmRpZgor CiskKG9ianBmeClsaXN0LXR1bmFibGVzLm91dDokKGNvbW1vbi1vYmpwZngpZWxmL2xkLnNvIFwK KyAgJChjb21tb24tb2JqcGZ4KWxpYmMuc28KKwkkKGNvbW1vbi1vYmpwZngpZWxmL2xkLnNvICQo Y29tbW9uLW9ianBmeClsaWJjLnNvIFwKKwkJLS1saXN0LXR1bmFibGVzID4gJEA7IFwKKwkkKGV2 YWx1YXRlLXRlc3QpCmRpZmYgLS1naXQgYS9jc3UvbGliYy1tYWluLlMgYi9jc3UvbGliYy1tYWlu LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMTI5Y2YyMGQ4ZQotLS0g L2Rldi9udWxsCisrKyBiL2NzdS9saWJjLW1haW4uUwpAQCAtMCwwICsxLDQ0IEBACisvKiBTdGFy dHVwIGNvZGUgZm9yIGxpYmMuc28uCisgICBDb3B5cmlnaHQgKEMpIDIwMjAgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGli cmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRo ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBJ biBhZGRpdGlvbiB0byB0aGUgcGVybWlzc2lvbnMgaW4gdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMKKyAgIExpY2Vuc2UsIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMgeW91 IHVubGltaXRlZAorICAgcGVybWlzc2lvbiB0byBsaW5rIHRoZSBjb21waWxlZCB2ZXJzaW9uIG9m IHRoaXMgZmlsZSB3aXRoIG90aGVyCisgICBwcm9ncmFtcywgYW5kIHRvIGRpc3RyaWJ1dGUgdGhv c2UgcHJvZ3JhbXMgd2l0aG91dCBhbnkgcmVzdHJpY3Rpb24KKyAgIGNvbWluZyBmcm9tIHRoZSB1 c2Ugb2YgdGhpcyBmaWxlLiAoVGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vu c2UgcmVzdHJpY3Rpb25zIGRvIGFwcGx5IGluIG90aGVyIHJlc3BlY3RzOyBmb3IgZXhhbXBsZSwg dGhleQorICAgY292ZXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBmaWxlLCBhbmQgZGlzdHJpYnV0aW9u IHdoZW4gbm90IGxpbmtlZAorICAgaW50byBhbm90aGVyIHByb2dyYW0uKQorCisgICBOb3RlIHRo YXQgcGVvcGxlIHdobyBtYWtlIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoaXMgZmlsZSBhcmUgbm90 CisgICBvYmxpZ2F0ZWQgdG8gZ3JhbnQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiBmb3IgdGhlaXIg bW9kaWZpZWQKKyAgIHZlcnNpb25zOyBpdCBpcyB0aGVpciBjaG9pY2Ugd2hldGhlciB0byBkbyBz by4gVGhlIEdOVSBMZXNzZXIKKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZ2l2ZXMgcGVybWlz c2lvbiB0byByZWxlYXNlIGEgbW9kaWZpZWQKKyAgIHZlcnNpb24gd2l0aG91dCB0aGlzIGV4Y2Vw dGlvbjsgdGhpcyBleGNlcHRpb24gYWxzbyBtYWtlcyBpdAorICAgcG9zc2libGUgdG8gcmVsZWFz ZSBhIG1vZGlmaWVkIHZlcnNpb24gd2hpY2ggY2FycmllcyBmb3J3YXJkIHRoaXMKKyAgIGV4Y2Vw dGlvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2Vy IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor ICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHNlZQorICAg PGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIFRoaXMgZmlsZSBzaG91 bGQgZGVmaW5lIF9fbGliY19tYWluIGFuZCBjYWxsIF9fbGliY19tYWluX2JvZHk6CisKKyAgICAg ZXh0ZXJuIHZvaWQgX19saWJjX21haW5fYm9keSAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorCV9f YXR0cmlidXRlX18gKChub3JldHVybiwgdmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CisgKi8KKwor I2lmZGVmIExJQkNfTUFJTgorIyBpbmNsdWRlICJzdGFydC5TIgorI2VuZGlmCmRpZmYgLS1naXQg YS9jc3UvdmVyc2lvbi5jIGIvY3N1L3ZlcnNpb24uYwppbmRleCA1N2I0OWRmZDhhLi41OGIyMTQy NDlmIDEwMDY0NAotLS0gYS9jc3UvdmVyc2lvbi5jCisrKyBiL2NzdS92ZXJzaW9uLmMKQEAgLTE5 LDYgKzE5LDE0IEBACiAjaW5jbHVkZSA8dGxzLmg+CiAjaW5jbHVkZSA8bGliYy1hYmlzLmg+CiAj aW5jbHVkZSA8Z251L2xpYmMtdmVyc2lvbi5oPgorI2lmbmRlZiBMSUJDX01BSU4KKyMgZGVmaW5l IExJQkNfTUFJTiBfX2xpYmNfbWFpbgorI2VuZGlmCisjaWYgSEFWRV9UVU5BQkxFUworIyBpbmNs dWRlIDxzdGRib29sLmg+CisjIGluY2x1ZGUgPHN0cmluZy5oPgorIyBpbmNsdWRlIDxlbGYvZGwt dHVuYWJsZXMuaD4KKyNlbmRpZgogCiBzdGF0aWMgY29uc3QgY2hhciBfX2xpYmNfcmVsZWFzZVtd ID0gUkVMRUFTRTsKIHN0YXRpYyBjb25zdCBjaGFyIF9fbGliY192ZXJzaW9uW10gPSBWRVJTSU9O OwpAQCAtNjQsMTAgKzcyLDI3IEBAIHdlYWtfYWxpYXMgKF9fZ251X2dldF9saWJjX3ZlcnNpb24s IGdudV9nZXRfbGliY192ZXJzaW9uKQogLyogVGhpcyBmdW5jdGlvbiBpcyB0aGUgZW50cnkgcG9p bnQgZm9yIHRoZSBzaGFyZWQgb2JqZWN0LgogICAgUnVubmluZyB0aGUgbGlicmFyeSBhcyBhIHBy b2dyYW0gd2lsbCBnZXQgaGVyZS4gICovCiAKLWV4dGVybiB2b2lkIF9fbGliY19tYWluICh2b2lk KSBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsKK2V4dGVybiB2b2lkIExJQkNfTUFJTiAoaW50 LCBjaGFyICoqKQorICBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4sIHZpc2liaWxpdHkgKCJoaWRk ZW4iKSkpOworCiB2b2lkCi1fX2xpYmNfbWFpbiAodm9pZCkKK0xJQkNfTUFJTiAoaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQogeworI2lmIEhBVkVfVFVOQUJMRVMKKyAgYm9vbCBzdG9wID0gZmFsc2U7 CisgIHdoaWxlIChhcmdjID4gMSkKKyAgICBpZiAoISBzdHJjbXAgKGFyZ3ZbMV0sICItLWxpc3Qt dHVuYWJsZXMiKSkKKyAgICAgIHsKKwlfX3R1bmFibGVzX3ByaW50ICgpOworCXN0b3AgPSB0cnVl OworCWFyZ2MtLTsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICBicmVhazsKKworICBpZiAoc3Rv cCkKKyAgICBfZXhpdCAoMCk7CisjZW5kaWYKICAgX19saWJjX3ByaW50X3ZlcnNpb24gKCk7CiAg IF9leGl0ICgwKTsKIH0KZGlmZiAtLWdpdCBhL2VsZi9WZXJzaW9ucyBiL2VsZi9WZXJzaW9ucwpp bmRleCBiZTg4YzQ4ZTZkLi5iZjlkN2RmZjliIDEwMDY0NAotLS0gYS9lbGYvVmVyc2lvbnMKKysr IGIvZWxmL1ZlcnNpb25zCkBAIC03Niw1ICs3NiwxMSBAQCBsZCB7CiAKICAgICAjIFNldCB2YWx1 ZSBvZiBhIHR1bmFibGUuCiAgICAgX190dW5hYmxlX2dldF92YWw7CisKKyAgICAjIFVwZGF0ZSB2 YWx1ZSBvZiBhIHR1bmFibGUuCisgICAgX190dW5hYmxlX3VwZGF0ZV92YWw7CisKKyAgICAjIFBy aW50IGFsbCB0dW5hYmxlcy4KKyAgICBfX3R1bmFibGVzX3ByaW50OwogICB9CiB9CmRpZmYgLS1n aXQgYS9lbGYvZGwtdHVuYWJsZXMuYyBiL2VsZi9kbC10dW5hYmxlcy5jCmluZGV4IDI2ZTZlMjY2 MTIuLmM5ZjExZTNiMjYgMTAwNjQ0Ci0tLSBhL2VsZi9kbC10dW5hYmxlcy5jCisrKyBiL2VsZi9k bC10dW5hYmxlcy5jCkBAIC0xMDAsMzEgKzEwMCwzOSBAQCBnZXRfbmV4dF9lbnYgKGNoYXIgKipl bnZwLCBjaGFyICoqbmFtZSwgc2l6ZV90ICpuYW1lbGVuLCBjaGFyICoqdmFsLAogICAgIH0JCQkJ CQkJCQkgICAgICBcCiB9KQogCisjZGVmaW5lIFRVTkFCTEVfVVBEQVRFX1ZBTChfX2N1ciwgX192 YWwsIF9fbWluLCBfX21heCwgX190eXBlKQkJICAgICAgXAorKHsJCQkJCQkJCQkgICAgICBcCisg IChfX2N1ciktPnR5cGUubWluID0gKF9fbWluKTsJCQkJCQkgICAgICBcCisgIChfX2N1ciktPnR5 cGUubWF4ID0gKF9fbWF4KTsJCQkJCQkgICAgICBcCisgIChfX2N1ciktPnZhbC5udW12YWwgPSAo X192YWwpOwkJCQkJICAgICAgXAorICAoX19jdXIpLT5pbml0aWFsaXplZCA9IHRydWU7CQkJCQkJ ICAgICAgXAorfSkKKwogc3RhdGljIHZvaWQKLWRvX3R1bmFibGVfdXBkYXRlX3ZhbCAodHVuYWJs ZV90ICpjdXIsIGNvbnN0IHZvaWQgKnZhbHApCitkb190dW5hYmxlX3VwZGF0ZV92YWwgKHR1bmFi bGVfdCAqY3VyLCBjb25zdCB2b2lkICp2YWxwLAorCQkgICAgICAgY29uc3Qgdm9pZCAqbWlucCwg Y29uc3Qgdm9pZCAqbWF4cCkKIHsKLSAgdWludDY0X3QgdmFsOworICB1aW50NjRfdCB2YWwsIG1p biwgbWF4OwogCiAgIGlmIChjdXItPnR5cGUudHlwZV9jb2RlICE9IFRVTkFCTEVfVFlQRV9TVFJJ TkcpCi0gICAgdmFsID0gKigoaW50NjRfdCAqKSB2YWxwKTsKKyAgICB7CisgICAgICB2YWwgPSAq KChpbnQ2NF90ICopIHZhbHApOworICAgICAgaWYgKG1pbnApCisJbWluID0gKigoaW50NjRfdCAq KSBtaW5wKTsKKyAgICAgIGlmIChtYXhwKQorCW1heCA9ICooKGludDY0X3QgKikgbWF4cCk7Cisg ICAgfQogCiAgIHN3aXRjaCAoY3VyLT50eXBlLnR5cGVfY29kZSkKICAgICB7CiAgICAgY2FzZSBU VU5BQkxFX1RZUEVfSU5UXzMyOgotCXsKLQkgIFRVTkFCTEVfU0VUX1ZBTF9JRl9WQUxJRF9SQU5H RSAoY3VyLCB2YWwsIGludDY0X3QpOwotCSAgYnJlYWs7Ci0JfQogICAgIGNhc2UgVFVOQUJMRV9U WVBFX1VJTlRfNjQ6Ci0JewotCSAgVFVOQUJMRV9TRVRfVkFMX0lGX1ZBTElEX1JBTkdFIChjdXIs IHZhbCwgdWludDY0X3QpOwotCSAgYnJlYWs7Ci0JfQogICAgIGNhc2UgVFVOQUJMRV9UWVBFX1NJ WkVfVDoKLQl7Ci0JICBUVU5BQkxFX1NFVF9WQUxfSUZfVkFMSURfUkFOR0UgKGN1ciwgdmFsLCB1 aW50NjRfdCk7Ci0JICBicmVhazsKLQl9CisgICAgICBpZiAobWlucCAmJiBtYXhwKQorCVRVTkFC TEVfVVBEQVRFX1ZBTCAoY3VyLCB2YWwsIG1pbiwgbWF4LCBpbnQ2NF90KTsKKyAgICAgIGVsc2UK KwlUVU5BQkxFX1NFVF9WQUxfSUZfVkFMSURfUkFOR0UgKGN1ciwgdmFsLCBpbnQ2NF90KTsKKyAg ICAgIGJyZWFrOwogICAgIGNhc2UgVFVOQUJMRV9UWVBFX1NUUklORzoKIAl7CiAJICBjdXItPnZh bC5zdHJ2YWwgPSB2YWxwOwpAQCAtMTUzLDcgKzE2MSw3IEBAIHR1bmFibGVfaW5pdGlhbGl6ZSAo dHVuYWJsZV90ICpjdXIsIGNvbnN0IGNoYXIgKnN0cnZhbCkKICAgICAgIGN1ci0+aW5pdGlhbGl6 ZWQgPSB0cnVlOwogICAgICAgdmFscCA9IHN0cnZhbDsKICAgICB9Ci0gIGRvX3R1bmFibGVfdXBk YXRlX3ZhbCAoY3VyLCB2YWxwKTsKKyAgZG9fdHVuYWJsZV91cGRhdGVfdmFsIChjdXIsIHZhbHAs IE5VTEwsIE5VTEwpOwogfQogCiB2b2lkCkBAIC0xNjEsOCArMTY5LDE3IEBAIF9fdHVuYWJsZV9z ZXRfdmFsICh0dW5hYmxlX2lkX3QgaWQsIHZvaWQgKnZhbHApCiB7CiAgIHR1bmFibGVfdCAqY3Vy ID0gJnR1bmFibGVfbGlzdFtpZF07CiAKLSAgZG9fdHVuYWJsZV91cGRhdGVfdmFsIChjdXIsIHZh bHApOworICBkb190dW5hYmxlX3VwZGF0ZV92YWwgKGN1ciwgdmFscCwgTlVMTCwgTlVMTCk7Cit9 CisKK3ZvaWQKK19fdHVuYWJsZV91cGRhdGVfdmFsICh0dW5hYmxlX2lkX3QgaWQsIHZvaWQgKnZh bHAsIHZvaWQgKm1pbnAsIHZvaWQgKm1heHApCit7CisgIHR1bmFibGVfdCAqY3VyID0gJnR1bmFi bGVfbGlzdFtpZF07CisKKyAgZG9fdHVuYWJsZV91cGRhdGVfdmFsIChjdXIsIHZhbHAsIG1pbnAs IG1heHApOwogfQorcnRsZF9oaWRkZW5fZGVmIChfX3R1bmFibGVfdXBkYXRlX3ZhbCkKIAogI2lm IFRVTkFCTEVTX0ZST05URU5EID09IFRVTkFCTEVTX0ZST05URU5EX3ZhbHN0cmluZwogLyogUGFy c2UgdGhlIHR1bmFibGUgc3RyaW5nIFRVTkVTVFIgYW5kIGFkanVzdCBpdCB0byBkcm9wIGFueSB0 dW5hYmxlcyB0aGF0IG1heQpAQCAtMzYxLDYgKzM3OCw0MyBAQCBfX3R1bmFibGVzX2luaXQgKGNo YXIgKiplbnZwKQogICAgIH0KIH0KIAordm9pZAorX190dW5hYmxlc19wcmludCAodm9pZCkKK3sK KyAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplb2YgKHR1bmFibGVfbGlzdCkgLyBzaXplb2YgKHR1 bmFibGVfdCk7IGkrKykKKyAgICB7CisgICAgICB0dW5hYmxlX3QgKmN1ciA9ICZ0dW5hYmxlX2xp c3RbaV07CisgICAgICBfZGxfcHJpbnRmICgiJXM6ICIsIGN1ci0+bmFtZSk7CisgICAgICBzd2l0 Y2ggKGN1ci0+dHlwZS50eXBlX2NvZGUpCisJeworCWNhc2UgVFVOQUJMRV9UWVBFX0lOVF8zMjoK KwkgIF9kbF9wcmludGYgKCIlZCAobWluOiAlZCwgbWF4OiAlZClcbiIsCisJCSAgICAgIChpbnQp IGN1ci0+dmFsLm51bXZhbCwKKwkJICAgICAgKGludCkgY3VyLT50eXBlLm1pbiwKKwkJICAgICAg KGludCkgY3VyLT50eXBlLm1heCk7CisJICBicmVhazsKKwljYXNlIFRVTkFCTEVfVFlQRV9VSU5U XzY0OgorCSAgX2RsX3ByaW50ZiAoIjB4JWx4IChtaW46IDB4JWx4LCBtYXg6IDB4JWx4KVxuIiwK KwkJICAgICAgKGxvbmcgaW50KSBjdXItPnZhbC5udW12YWwsCisJCSAgICAgIChsb25nIGludCkg Y3VyLT50eXBlLm1pbiwKKwkJICAgICAgKGxvbmcgaW50KSBjdXItPnR5cGUubWF4KTsKKwkgIGJy ZWFrOworCWNhc2UgVFVOQUJMRV9UWVBFX1NJWkVfVDoKKwkgIF9kbF9wcmludGYgKCIweCVaeCAo bWluOiAweCVaeCwgbWF4OiAweCVaeClcbiIsCisJCSAgICAgIChzaXplX3QpIGN1ci0+dmFsLm51 bXZhbCwKKwkJICAgICAgKHNpemVfdCkgY3VyLT50eXBlLm1pbiwKKwkJICAgICAgKHNpemVfdCkg Y3VyLT50eXBlLm1heCk7CisJICBicmVhazsKKwljYXNlIFRVTkFCTEVfVFlQRV9TVFJJTkc6CisJ ICBfZGxfcHJpbnRmICgiJXNcbiIsIGN1ci0+dmFsLnN0cnZhbCA/IGN1ci0+dmFsLnN0cnZhbCA6 ICIiKTsKKwkgIGJyZWFrOworCWRlZmF1bHQ6CisJICBfX2J1aWx0aW5fdW5yZWFjaGFibGUgKCk7 CisJfQorICAgIH0KK30KK3J0bGRfaGlkZGVuX2RlZiAoX190dW5hYmxlc19wcmludCkKKwogLyog U2V0IHRoZSB0dW5hYmxlIHZhbHVlLiAgVGhpcyBpcyBjYWxsZWQgYnkgdGhlIG1vZHVsZSB0aGF0 IHRoZSB0dW5hYmxlIGV4aXN0cwogICAgaW4uICovCiB2b2lkCmRpZmYgLS1naXQgYS9lbGYvZGwt dHVuYWJsZXMuaCBiL2VsZi9kbC10dW5hYmxlcy5oCmluZGV4IDk2OWU1MDMyN2IuLjU3N2M1ZDMz NjkgMTAwNjQ0Ci0tLSBhL2VsZi9kbC10dW5hYmxlcy5oCisrKyBiL2VsZi9kbC10dW5hYmxlcy5o CkBAIC02NywxMCArNjcsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgX3R1bmFibGUgdHVuYWJsZV90Owog IyBpbmNsdWRlICJkbC10dW5hYmxlLWxpc3QuaCIKIAogZXh0ZXJuIHZvaWQgX190dW5hYmxlc19p bml0IChjaGFyICoqKTsKK2V4dGVybiB2b2lkIF9fdHVuYWJsZXNfcHJpbnQgKHZvaWQpOwogZXh0 ZXJuIHZvaWQgX190dW5hYmxlX2dldF92YWwgKHR1bmFibGVfaWRfdCwgdm9pZCAqLCB0dW5hYmxl X2NhbGxiYWNrX3QpOwogZXh0ZXJuIHZvaWQgX190dW5hYmxlX3NldF92YWwgKHR1bmFibGVfaWRf dCwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIF9fdHVuYWJsZV91cGRhdGVfdmFsICh0dW5hYmxlX2lk X3QsIHZvaWQgKiwgdm9pZCAqLCB2b2lkICopOwogcnRsZF9oaWRkZW5fcHJvdG8gKF9fdHVuYWJs ZXNfaW5pdCkKK3J0bGRfaGlkZGVuX3Byb3RvIChfX3R1bmFibGVzX3ByaW50KQogcnRsZF9oaWRk ZW5fcHJvdG8gKF9fdHVuYWJsZV9nZXRfdmFsKQorcnRsZF9oaWRkZW5fcHJvdG8gKF9fdHVuYWJs ZV91cGRhdGVfdmFsKQogCiAvKiBEZWZpbmUgVFVOQUJMRV9HRVQgYW5kIFRVTkFCTEVfU0VUIGlu IHNob3J0IGZvcm0gaWYgVE9QX05BTUVTUEFDRSBhbmQKICAgIFRVTkFCTEVfTkFNRVNQQUNFIGFy ZSBkZWZpbmVkLiAgVGhpcyBpcyB1c2VmdWwgc2hvcnRoYW5kIHRvIGdldCBhbmQgc2V0CkBAIC04 MCwxMSArODQsMTYgQEAgcnRsZF9oaWRkZW5fcHJvdG8gKF9fdHVuYWJsZV9nZXRfdmFsKQogICBU VU5BQkxFX0dFVF9GVUxMIChUT1BfTkFNRVNQQUNFLCBUVU5BQkxFX05BTUVTUEFDRSwgX19pZCwg X190eXBlLCBfX2NiKQogIyBkZWZpbmUgVFVOQUJMRV9TRVQoX19pZCwgX190eXBlLCBfX3ZhbCkg XAogICBUVU5BQkxFX1NFVF9GVUxMIChUT1BfTkFNRVNQQUNFLCBUVU5BQkxFX05BTUVTUEFDRSwg X19pZCwgX190eXBlLCBfX3ZhbCkKKyMgZGVmaW5lIFRVTkFCTEVfVVBEQVRFKF9faWQsIF9fdHlw ZSwgX192YWwsIF9fbWluLCBfX21heCkgXAorICBUVU5BQkxFX1VQREFURV9GVUxMIChUT1BfTkFN RVNQQUNFLCBUVU5BQkxFX05BTUVTUEFDRSwgX19pZCwgX190eXBlLCBcCisJCSAgICAgICBfX3Zh bCwgX19taW4sIF9fbWF4KQogI2Vsc2UKICMgZGVmaW5lIFRVTkFCTEVfR0VUKF9fdG9wLCBfX25z LCBfX2lkLCBfX3R5cGUsIF9fY2IpIFwKICAgVFVOQUJMRV9HRVRfRlVMTCAoX190b3AsIF9fbnMs IF9faWQsIF9fdHlwZSwgX19jYikKICMgZGVmaW5lIFRVTkFCTEVfU0VUKF9fdG9wLCBfX25zLCBf X2lkLCBfX3R5cGUsIF9fdmFsKSBcCiAgIFRVTkFCTEVfU0VUX0ZVTEwgKF9fdG9wLCBfX25zLCBf X2lkLCBfX3R5cGUsIF9fdmFsKQorIyBkZWZpbmUgVFVOQUJMRV9VUERBVEUoX190b3AsIF9fbnMs IF9faWQsIF9fdHlwZSwgX192YWwsIF9fbWluLCBfX21heCkgXAorICBUVU5BQkxFX1VQREFURV9G VUxMIChfX3RvcCwgX19ucywgX19pZCwgX190eXBlLCBfX3ZhbCwgX19taW4sIF9fbWF4KQogI2Vu ZGlmCiAKIC8qIEdldCBhbmQgcmV0dXJuIGEgdHVuYWJsZSB2YWx1ZS4gIElmIHRoZSB0dW5hYmxl IHdhcyBzZXQgZXh0ZXJuYWxseSBhbmQgX19DQgpAQCAtMTA0LDYgKzExMywxNCBAQCBydGxkX2hp ZGRlbl9wcm90byAoX190dW5hYmxlX2dldF92YWwpCiAJCQkmIChfX3R5cGUpIHtfX3ZhbH0pOwkJ CQkgICAgICBcCiB9KQogCisvKiBVcGRhdGUgYSB0dW5hYmxlIHZhbHVlLiAgKi8KKyMgZGVmaW5l IFRVTkFCTEVfVVBEQVRFX0ZVTEwoX190b3AsIF9fbnMsIF9faWQsIF9fdHlwZSwgX192YWwsIF9f bWluLCBfX21heCkgXAorKHsJCQkJCQkJCQkgICAgICBcCisgIF9fdHVuYWJsZV91cGRhdGVfdmFs IChUVU5BQkxFX0VOVU1fTkFNRSAoX190b3AsIF9fbnMsIF9faWQpLAkJICAgICAgXAorCQkJJiAo X190eXBlKSB7X192YWx9LCAgJiAoX190eXBlKSB7X19taW59LAkgICAgICBcCisJCQkmIChfX3R5 cGUpIHtfX21heH0pOwkJCQkgICAgICBcCit9KQorCiAvKiBOYW1lc3BhY2Ugc2FuaXR5IGZvciBj YWxsYmFjayBmdW5jdGlvbnMuICBVc2UgdGhpcyBtYWNybyB0byBrZWVwIHRoZQogICAgbmFtZXNw YWNlIG9mIHRoZSBtb2R1bGVzIGNsZWFuLiAgKi8KICMgZGVmaW5lIFRVTkFCTEVfQ0FMTEJBQ0so X19uYW1lKSBfZGxfdHVuYWJsZV8gIyMgX19uYW1lCmRpZmYgLS1naXQgYS9tYW51YWwvdHVuYWJs ZXMudGV4aSBiL21hbnVhbC90dW5hYmxlcy50ZXhpCmluZGV4IGVjMThiMTA4MzQuLmNkMWJmOTAz NTkgMTAwNjQ0Ci0tLSBhL21hbnVhbC90dW5hYmxlcy50ZXhpCisrKyBiL21hbnVhbC90dW5hYmxl cy50ZXhpCkBAIC0yOCw2ICsyOCwzOSBAQCBGaW5hbGx5LCB0aGUgc2V0IG9mIHR1bmFibGVzIGF2 YWlsYWJsZSBtYXkgdmFyeSBiZXR3ZWVuIGRpc3RyaWJ1dGlvbnMgYXMKIHRoZSB0dW5hYmxlcyBm ZWF0dXJlIGFsbG93cyBkaXN0cmlidXRpb25zIHRvIGFkZCB0aGVpciBvd24gdHVuYWJsZXMgdW5k ZXIKIHRoZWlyIG93biBuYW1lc3BhY2UuCiAKK1Bhc3NpbmcgQG9wdGlvbnstLWxpc3QtdHVuYWJs ZXN9IHRvIEBzYW1we2xpYmMuc28uNn0gcHJpbnQgYWxsIHR1bmFibGVzCit3aXRoIG1pbmltdW0g YW5kIG1heGltdW0gdmFsdWVzOgorCitAZXhhbXBsZQorJCAvbGliNjQvbGliYy5zby42IC0tbGlz dC10dW5hYmxlcworZ2xpYmMuZWxpc2lvbi5za2lwX2xvY2tfYWZ0ZXJfcmV0cmllczogMyAobWlu OiAtMjE0NzQ4MzY0OCwgbWF4OiAyMTQ3NDgzNjQ3KQorZ2xpYmMubWFsbG9jLnRyaW1fdGhyZXNo b2xkOiAweDAgKG1pbjogMHgwLCBtYXg6IDB4ZmZmZmZmZmYpCitnbGliYy5tYWxsb2MucGVydHVy YjogMCAobWluOiAwLCBtYXg6IDI1NSkKK2dsaWJjLmNwdS54ODZfc2hhcmVkX2NhY2hlX3NpemU6 IDB4MTAwMDAwIChtaW46IDB4MCwgbWF4OiAweGZmZmZmZmZmKQorZ2xpYmMuZWxpc2lvbi50cmll czogMyAobWluOiAtMjE0NzQ4MzY0OCwgbWF4OiAyMTQ3NDgzNjQ3KQorZ2xpYmMuZWxpc2lvbi5l bmFibGU6IDAgKG1pbjogMCwgbWF4OiAxKQorZ2xpYmMubWFsbG9jLm14ZmFzdDogMHgwIChtaW46 IDB4MCwgbWF4OiAweGZmZmZmZmZmKQorZ2xpYmMuZWxpc2lvbi5za2lwX2xvY2tfYnVzeTogMyAo bWluOiAtMjE0NzQ4MzY0OCwgbWF4OiAyMTQ3NDgzNjQ3KQorZ2xpYmMubWFsbG9jLnRvcF9wYWQ6 IDB4MCAobWluOiAweDAsIG1heDogMHhmZmZmZmZmZikKK2dsaWJjLmNwdS54ODZfbm9uX3RlbXBv cmFsX3RocmVzaG9sZDogMHg2MDAwMDAgKG1pbjogMHgwLCBtYXg6IDB4ZmZmZmZmZmYpCitnbGli Yy5jcHUueDg2X3Noc3RrOgorZ2xpYmMuY3B1Lmh3Y2FwX21hc2s6IDB4NiAobWluOiAweDAsIG1h eDogMHhmZmZmZmZmZikKK2dsaWJjLm1hbGxvYy5tbWFwX21heDogMCAobWluOiAtMjE0NzQ4MzY0 OCwgbWF4OiAyMTQ3NDgzNjQ3KQorZ2xpYmMuZWxpc2lvbi5za2lwX3RyeWxvY2tfaW50ZXJuYWxf YWJvcnQ6IDMgKG1pbjogLTIxNDc0ODM2NDgsIG1heDogMjE0NzQ4MzY0NykKK2dsaWJjLm1hbGxv Yy50Y2FjaGVfdW5zb3J0ZWRfbGltaXQ6IDB4MCAobWluOiAweDAsIG1heDogMHhmZmZmZmZmZikK K2dsaWJjLmNwdS54ODZfaWJ0OgorZ2xpYmMuY3B1Lmh3Y2FwczoKK2dsaWJjLmVsaXNpb24uc2tp cF9sb2NrX2ludGVybmFsX2Fib3J0OiAzIChtaW46IC0yMTQ3NDgzNjQ4LCBtYXg6IDIxNDc0ODM2 NDcpCitnbGliYy5tYWxsb2MuYXJlbmFfbWF4OiAweDAgKG1pbjogMHgxLCBtYXg6IDB4ZmZmZmZm ZmYpCitnbGliYy5tYWxsb2MubW1hcF90aHJlc2hvbGQ6IDB4MCAobWluOiAweDAsIG1heDogMHhm ZmZmZmZmZikKK2dsaWJjLmNwdS54ODZfZGF0YV9jYWNoZV9zaXplOiAweDgwMDAgKG1pbjogMHgw LCBtYXg6IDB4ZmZmZmZmZmYpCitnbGliYy5tYWxsb2MudGNhY2hlX2NvdW50OiAweDAgKG1pbjog MHgwLCBtYXg6IDB4ZmZmZmZmZmYpCitnbGliYy5tYWxsb2MuYXJlbmFfdGVzdDogMHgwIChtaW46 IDB4MSwgbWF4OiAweGZmZmZmZmZmKQorZ2xpYmMucHRocmVhZC5tdXRleF9zcGluX2NvdW50OiAx MDAgKG1pbjogMCwgbWF4OiAzMjc2NykKK2dsaWJjLm1hbGxvYy50Y2FjaGVfbWF4OiAweDAgKG1p bjogMHgwLCBtYXg6IDB4ZmZmZmZmZmYpCitnbGliYy5tYWxsb2MuY2hlY2s6IDAgKG1pbjogMCwg bWF4OiAzKQorQGVuZCBleGFtcGxlCisKIEBtZW51CiAqIFR1bmFibGUgbmFtZXM6OiAgVGhlIHN0 cnVjdHVyZSBvZiBhIHR1bmFibGUgbmFtZQogKiBNZW1vcnkgQWxsb2NhdGlvbiBUdW5hYmxlczo6 ICBUdW5hYmxlcyBpbiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gc3Vic3lzdGVtCmRpZmYgLS1naXQg YS9zeXNkZXBzL2kzODYvY2FjaGVpbmZvLmMgYi9zeXNkZXBzL2kzODYvY2FjaGVpbmZvLmMKZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxNWZlMDc3OWEuLjAwMDAwMDAwMDAKLS0tIGEv c3lzZGVwcy9pMzg2L2NhY2hlaW5mby5jCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0j ZGVmaW5lIERJU0FCTEVfUFJFRkVUQ0hXCi0KLSNpbmNsdWRlIDxzeXNkZXBzL3g4Ni9jYWNoZWlu Zm8uYz4KZGlmZiAtLWdpdCBhL3N5c2RlcHMvaTM4Ni9zdGFydC5TIGIvc3lzZGVwcy9pMzg2L3N0 YXJ0LlMKaW5kZXggYzU3YjI1ZjA1NS4uNmQyZTc2ZTVjYiAxMDA2NDQKLS0tIGEvc3lzZGVwcy9p Mzg2L3N0YXJ0LlMKKysrIGIvc3lzZGVwcy9pMzg2L3N0YXJ0LlMKQEAgLTU0LDcgKzU0LDEzIEBA CiAKICNpbmNsdWRlIDxzeXNkZXAuaD4KIAotRU5UUlkgKF9zdGFydCkKKyNpZmRlZiBMSUJDX01B SU4KKyMgZGVmaW5lIFNUQVJUIF9fbGliY19tYWluCisjZWxzZQorIyBkZWZpbmUgU1RBUlQgX3N0 YXJ0CisjZW5kaWYKKworRU5UUlkgKFNUQVJUKQogCS8qIENsZWFyaW5nIGZyYW1lIHBvaW50ZXIg aXMgaW5zdWZmaWNpZW50LCB1c2UgQ0ZJLiAgKi8KIAljZmlfdW5kZWZpbmVkIChlaXApCiAJLyog Q2xlYXIgdGhlIGZyYW1lIHBvaW50ZXIuICBUaGUgQUJJIHN1Z2dlc3RzIHRoaXMgYmUgZG9uZSwg dG8gbWFyawpAQCAtNzUsNiArODEsMTEgQEAgRU5UUlkgKF9zdGFydCkKIAlwdXNobCAlZWF4CQkv KiBQdXNoIGdhcmJhZ2UgYmVjYXVzZSB3ZSBhbGxvY2F0ZQogCQkJCSAgIDI4IG1vcmUgYnl0ZXMu ICAqLwogCisjaWZkZWYgTElCQ19NQUlOCisJcHVzaGwgJWVjeAkJLyogUHVzaCBzZWNvbmQgYXJn dW1lbnQ6IGFyZ3YuICAqLworCXB1c2hsICVlc2kJCS8qIFB1c2ggZmlyc3QgYXJndW1lbnQ6IGFy Z2MuICAqLworCWNhbGwgTElCQ19NQUlOCisjZWxzZQogCS8qIFByb3ZpZGUgdGhlIGhpZ2hlc3Qg c3RhY2sgYWRkcmVzcyB0byB0aGUgdXNlciBjb2RlIChmb3Igc3RhY2tzCiAJICAgd2hpY2ggZ3Jv dyBkb3dud2FyZHMpLiAgKi8KIAlwdXNobCAlZXNwCkBAIC04Miw3ICs5Myw3IEBAIEVOVFJZIChf c3RhcnQpCiAJcHVzaGwgJWVkeAkJLyogUHVzaCBhZGRyZXNzIG9mIHRoZSBzaGFyZWQgbGlicmFy eQogCQkJCSAgIHRlcm1pbmF0aW9uIGZ1bmN0aW9uLiAgKi8KIAotI2lmZGVmIFBJQworIyBpZmRl ZiBQSUMKIAkvKiBMb2FkIFBJQyByZWdpc3Rlci4gICovCiAJY2FsbCAxZgogCWFkZGwgJF9HTE9C QUxfT0ZGU0VUX1RBQkxFXywgJWVieApAQCAtOTYsOSArMTA3LDkgQEAgRU5UUlkgKF9zdGFydCkK IAlwdXNobCAlZWN4CQkvKiBQdXNoIHNlY29uZCBhcmd1bWVudDogYXJndi4gICovCiAJcHVzaGwg JWVzaQkJLyogUHVzaCBmaXJzdCBhcmd1bWVudDogYXJnYy4gICovCiAKLSMgaWZkZWYgU0hBUkVE CisjICBpZmRlZiBTSEFSRUQKIAlwdXNobCBtYWluQEdPVCglZWJ4KQotIyBlbHNlCisjICBlbHNl CiAJLyogQXZvaWQgcmVsb2NhdGlvbiBpbiBzdGF0aWMgUElFIHNpbmNlIF9zdGFydCBpcyBjYWxs ZWQgYmVmb3JlCiAJICAgaXQgaXMgcmVsb2NhdGVkLiAgRG9uJ3QgdXNlICJsZWFsIG1haW5AR09U T0ZGKCVlYngpLCAlZWF4IgogCSAgIHNpbmNlIG1haW4gbWF5IGJlIGluIGEgc2hhcmVkIG9iamVj dC4gIExpbmtlciB3aWxsIGNvbnZlcnQKQEAgLTEwNiwxMiArMTE3LDEyIEBAIEVOVFJZIChfc3Rh cnQpCiAJICAgaWYgbWFpbiBpcyBkZWZpbmVkIGxvY2FsbHkuICAqLwogCW1vdmwgbWFpbkBHT1Qo JWVieCksICVlYXgKIAlwdXNobCAlZWF4Ci0jIGVuZGlmCisjICBlbmRpZgogCiAJLyogQ2FsbCB0 aGUgdXNlcidzIG1haW4gZnVuY3Rpb24sIGFuZCBleGl0IHdpdGggaXRzIHZhbHVlLgogCSAgIEJ1 dCBsZXQgdGhlIGxpYmMgY2FsbCBtYWluLiAgICAqLwogCWNhbGwgX19saWJjX3N0YXJ0X21haW5A UExUCi0jZWxzZQorIyBlbHNlCiAJLyogUHVzaCBhZGRyZXNzIG9mIG91ciBvd24gZW50cnkgcG9p bnRzIHRvIC5maW5pIGFuZCAuaW5pdC4gICovCiAJcHVzaGwgJF9fbGliY19jc3VfZmluaQogCXB1 c2hsICRfX2xpYmNfY3N1X2luaXQKQEAgLTEyNCw2ICsxMzUsNyBAQCBFTlRSWSAoX3N0YXJ0KQog CS8qIENhbGwgdGhlIHVzZXIncyBtYWluIGZ1bmN0aW9uLCBhbmQgZXhpdCB3aXRoIGl0cyB2YWx1 ZS4KIAkgICBCdXQgbGV0IHRoZSBsaWJjIGNhbGwgbWFpbi4gICAgKi8KIAljYWxsIF9fbGliY19z dGFydF9tYWluCisjIGVuZGlmCiAjZW5kaWYKIAogCWhsdAkJCS8qIENyYXNoIGlmIHNvbWVob3cg YGV4aXQnIGRvZXMgcmV0dXJuLiAgKi8KQEAgLTEzMiw4ICsxNDQsOSBAQCBFTlRSWSAoX3N0YXJ0 KQogMToJbW92bAkoJWVzcCksICVlYngKIAlyZXQKICNlbmRpZgotRU5EIChfc3RhcnQpCitFTkQg KFNUQVJUKQogCisjaWZuZGVmIExJQkNfTUFJTgogLyogVG8gZnVsZmlsbCB0aGUgU3lzdGVtIFYv aTM4NiBBQkkgd2UgbmVlZCB0aGlzIHN5bWJvbC4gIFl1Y2ssIGl0J3Mgc28KICAgIG1lYW5pbmds ZXNzIHNpbmNlIHdlIGRvbid0IHN1cHBvcnQgbWFjaGluZXMgPCA4MDM4Ni4gICovCiAJLnNlY3Rp b24gLnJvZGF0YQpAQCAtMTQ5LDMgKzE2Miw0IEBAIF9fZGF0YV9zdGFydDoKIAkubG9uZyAwCiAJ LndlYWsgZGF0YV9zdGFydAogCWRhdGFfc3RhcnQgPSBfX2RhdGFfc3RhcnQKKyNlbmRpZgpkaWZm IC0tZ2l0IGEvc3lzZGVwcy9tYWNoL2h1cmQvaTM4Ni9sb2NhbHBsdC5kYXRhIGIvc3lzZGVwcy9t YWNoL2h1cmQvaTM4Ni9sb2NhbHBsdC5kYXRhCmluZGV4IDU0MWMzZjMyYWUuLjlkMGM3ZTQyNTMg MTAwNjQ0Ci0tLSBhL3N5c2RlcHMvbWFjaC9odXJkL2kzODYvbG9jYWxwbHQuZGF0YQorKysgYi9z eXNkZXBzL21hY2gvaHVyZC9pMzg2L2xvY2FscGx0LmRhdGEKQEAgLTQ5LDYgKzQ5LDcgQEAgbGQu c286IF9kbF9pbml0X2ZpcnN0CiBsZC5zbzogX2RsX21jb3VudAogbGQuc286IF9fX3Rsc19nZXRf YWRkcgogbGQuc286IF9fdHVuYWJsZV9nZXRfdmFsCitsZC5zbzogX190dW5hYmxlX3VwZGF0ZV92 YWwKICMKICMgVGhlc2Ugc2hvdWxkIGlkZWFsbHkgYmUgYXZvaWRlZCwgYnV0IGlzIGN1cnJlbnRs eSBkaWZmaWN1bHQKIGxpYmMuc286IHNpZ2xvbmdqbXAgPwpkaWZmIC0tZ2l0IGEvc3lzZGVwcy94 ODYvTWFrZWZpbGUgYi9zeXNkZXBzL3g4Ni9NYWtlZmlsZQppbmRleCBiZWFiNDI2ZjY3Li5iZjY3 ZWFhYTAyIDEwMDY0NAotLS0gYS9zeXNkZXBzL3g4Ni9NYWtlZmlsZQorKysgYi9zeXNkZXBzL3g4 Ni9NYWtlZmlsZQpAQCAtMSw5ICsxLDExIEBACiBpZmVxICgkKHN1YmRpciksY3N1KQogZ2VuLWFz LWNvbnN0LWhlYWRlcnMgKz0gY3B1LWZlYXR1cmVzLW9mZnNldHMuc3ltCitDUFBGTEFHUy12ZXJz aW9uLmMgPSAtRExJQkNfTUFJTj1fX2xpYmNfbWFpbl9ib2R5CitDUFBGTEFHUy1saWJjLW1haW4u UyA9IC1ETElCQ19NQUlOPV9fbGliY19tYWluX2JvZHkKIGVuZGlmCiAKIGlmZXEgKCQoc3ViZGly KSxlbGYpCi1zeXNkZXAtZGwtcm91dGluZXMgKz0gZGwtZ2V0LWNwdS1mZWF0dXJlcworc3lzZGVw LWRsLXJvdXRpbmVzICs9IGRsLWdldC1jcHUtZmVhdHVyZXMgZGwtY2FjaGVpbmZvCiAKIHRlc3Rz ICs9IHRzdC1nZXQtY3B1LWZlYXR1cmVzIHRzdC1nZXQtY3B1LWZlYXR1cmVzLXN0YXRpYwogdGVz dHMtc3RhdGljICs9IHRzdC1nZXQtY3B1LWZlYXR1cmVzLXN0YXRpYwpkaWZmIC0tZ2l0IGEvc3lz ZGVwcy94ODYvY2FjaGVpbmZvLmMgYi9zeXNkZXBzL3g4Ni9jYWNoZWluZm8uYwppbmRleCAzMTE1 MDJkZWUzLi44YzRjN2Y5OTcyIDEwMDY0NAotLS0gYS9zeXNkZXBzL3g4Ni9jYWNoZWluZm8uYwor KysgYi9zeXNkZXBzL3g4Ni9jYWNoZWluZm8uYwpAQCAtMTgsNDk4ICsxOCw5IEBACiAKICNpZiBJ U19JTiAobGliYykKIAotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPHN0ZGJvb2wuaD4K LSNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxjcHVp ZC5oPgogI2luY2x1ZGUgPGluaXQtYXJjaC5oPgogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGludGVs XzAyX2NhY2hlX2luZm8KLXsKLSAgdW5zaWduZWQgY2hhciBpZHg7Ci0gIHVuc2lnbmVkIGNoYXIg YXNzb2M7Ci0gIHVuc2lnbmVkIGNoYXIgbGluZXNpemU7Ci0gIHVuc2lnbmVkIGNoYXIgcmVsX25h bWU7Ci0gIHVuc2lnbmVkIGludCBzaXplOwotfSBpbnRlbF8wMl9rbm93biBbXSA9Ci0gIHsKLSNk ZWZpbmUgTShzYykgKChzYykgLSBfU0NfTEVWRUwxX0lDQUNIRV9TSVpFKQotICAgIHsgMHgwNiwg IDQsIDMyLCBNKF9TQ19MRVZFTDFfSUNBQ0hFX1NJWkUpLCAgICA4MTkyIH0sCi0gICAgeyAweDA4 LCAgNCwgMzIsIE0oX1NDX0xFVkVMMV9JQ0FDSEVfU0laRSksICAgMTYzODQgfSwKLSAgICB7IDB4 MDksICA0LCAzMiwgTShfU0NfTEVWRUwxX0lDQUNIRV9TSVpFKSwgICAzMjc2OCB9LAotICAgIHsg MHgwYSwgIDIsIDMyLCBNKF9TQ19MRVZFTDFfRENBQ0hFX1NJWkUpLCAgICA4MTkyIH0sCi0gICAg eyAweDBjLCAgNCwgMzIsIE0oX1NDX0xFVkVMMV9EQ0FDSEVfU0laRSksICAgMTYzODQgfSwKLSAg ICB7IDB4MGQsICA0LCA2NCwgTShfU0NfTEVWRUwxX0RDQUNIRV9TSVpFKSwgICAxNjM4NCB9LAot ICAgIHsgMHgwZSwgIDYsIDY0LCBNKF9TQ19MRVZFTDFfRENBQ0hFX1NJWkUpLCAgIDI0NTc2IH0s Ci0gICAgeyAweDIxLCAgOCwgNjQsIE0oX1NDX0xFVkVMMl9DQUNIRV9TSVpFKSwgICAyNjIxNDQg fSwKLSAgICB7IDB4MjIsICA0LCA2NCwgTShfU0NfTEVWRUwzX0NBQ0hFX1NJWkUpLCAgIDUyNDI4 OCB9LAotICAgIHsgMHgyMywgIDgsIDY0LCBNKF9TQ19MRVZFTDNfQ0FDSEVfU0laRSksICAxMDQ4 NTc2IH0sCi0gICAgeyAweDI1LCAgOCwgNjQsIE0oX1NDX0xFVkVMM19DQUNIRV9TSVpFKSwgIDIw OTcxNTIgfSwKLSAgICB7IDB4MjksICA4LCA2NCwgTShfU0NfTEVWRUwzX0NBQ0hFX1NJWkUpLCAg NDE5NDMwNCB9LAotICAgIHsgMHgyYywgIDgsIDY0LCBNKF9TQ19MRVZFTDFfRENBQ0hFX1NJWkUp LCAgIDMyNzY4IH0sCi0gICAgeyAweDMwLCAgOCwgNjQsIE0oX1NDX0xFVkVMMV9JQ0FDSEVfU0la RSksICAgMzI3NjggfSwKLSAgICB7IDB4MzksICA0LCA2NCwgTShfU0NfTEVWRUwyX0NBQ0hFX1NJ WkUpLCAgIDEzMTA3MiB9LAotICAgIHsgMHgzYSwgIDYsIDY0LCBNKF9TQ19MRVZFTDJfQ0FDSEVf U0laRSksICAgMTk2NjA4IH0sCi0gICAgeyAweDNiLCAgMiwgNjQsIE0oX1NDX0xFVkVMMl9DQUNI RV9TSVpFKSwgICAxMzEwNzIgfSwKLSAgICB7IDB4M2MsICA0LCA2NCwgTShfU0NfTEVWRUwyX0NB Q0hFX1NJWkUpLCAgIDI2MjE0NCB9LAotICAgIHsgMHgzZCwgIDYsIDY0LCBNKF9TQ19MRVZFTDJf Q0FDSEVfU0laRSksICAgMzkzMjE2IH0sCi0gICAgeyAweDNlLCAgNCwgNjQsIE0oX1NDX0xFVkVM Ml9DQUNIRV9TSVpFKSwgICA1MjQyODggfSwKLSAgICB7IDB4M2YsICAyLCA2NCwgTShfU0NfTEVW RUwyX0NBQ0hFX1NJWkUpLCAgIDI2MjE0NCB9LAotICAgIHsgMHg0MSwgIDQsIDMyLCBNKF9TQ19M RVZFTDJfQ0FDSEVfU0laRSksICAgMTMxMDcyIH0sCi0gICAgeyAweDQyLCAgNCwgMzIsIE0oX1ND X0xFVkVMMl9DQUNIRV9TSVpFKSwgICAyNjIxNDQgfSwKLSAgICB7IDB4NDMsICA0LCAzMiwgTShf U0NfTEVWRUwyX0NBQ0hFX1NJWkUpLCAgIDUyNDI4OCB9LAotICAgIHsgMHg0NCwgIDQsIDMyLCBN KF9TQ19MRVZFTDJfQ0FDSEVfU0laRSksICAxMDQ4NTc2IH0sCi0gICAgeyAweDQ1LCAgNCwgMzIs IE0oX1NDX0xFVkVMMl9DQUNIRV9TSVpFKSwgIDIwOTcxNTIgfSwKLSAgICB7IDB4NDYsICA0LCA2 NCwgTShfU0NfTEVWRUwzX0NBQ0hFX1NJWkUpLCAgNDE5NDMwNCB9LAotICAgIHsgMHg0NywgIDgs IDY0LCBNKF9TQ19MRVZFTDNfQ0FDSEVfU0laRSksICA4Mzg4NjA4IH0sCi0gICAgeyAweDQ4LCAx MiwgNjQsIE0oX1NDX0xFVkVMMl9DQUNIRV9TSVpFKSwgIDMxNDU3MjggfSwKLSAgICB7IDB4NDks IDE2LCA2NCwgTShfU0NfTEVWRUwyX0NBQ0hFX1NJWkUpLCAgNDE5NDMwNCB9LAotICAgIHsgMHg0 YSwgMTIsIDY0LCBNKF9TQ19MRVZFTDNfQ0FDSEVfU0laRSksICA2MjkxNDU2IH0sCi0gICAgeyAw eDRiLCAxNiwgNjQsIE0oX1NDX0xFVkVMM19DQUNIRV9TSVpFKSwgIDgzODg2MDggfSwKLSAgICB7 IDB4NGMsIDEyLCA2NCwgTShfU0NfTEVWRUwzX0NBQ0hFX1NJWkUpLCAxMjU4MjkxMiB9LAotICAg IHsgMHg0ZCwgMTYsIDY0LCBNKF9TQ19MRVZFTDNfQ0FDSEVfU0laRSksIDE2Nzc3MjE2IH0sCi0g ICAgeyAweDRlLCAyNCwgNjQsIE0oX1NDX0xFVkVMMl9DQUNIRV9TSVpFKSwgIDYyOTE0NTYgfSwK LSAgICB7IDB4NjAsICA4LCA2NCwgTShfU0NfTEVWRUwxX0RDQUNIRV9TSVpFKSwgICAxNjM4NCB9 LAotICAgIHsgMHg2NiwgIDQsIDY0LCBNKF9TQ19MRVZFTDFfRENBQ0hFX1NJWkUpLCAgICA4MTky IH0sCi0gICAgeyAweDY3LCAgNCwgNjQsIE0oX1NDX0xFVkVMMV9EQ0FDSEVfU0laRSksICAgMTYz ODQgfSwKLSAgICB7IDB4NjgsICA0LCA2NCwgTShfU0NfTEVWRUwxX0RDQUNIRV9TSVpFKSwgICAz Mjc2OCB9LAotICAgIHsgMHg3OCwgIDgsIDY0LCBNKF9TQ19MRVZFTDJfQ0FDSEVfU0laRSksICAx MDQ4NTc2IH0sCi0gICAgeyAweDc5LCAgOCwgNjQsIE0oX1NDX0xFVkVMMl9DQUNIRV9TSVpFKSwg ICAxMzEwNzIgfSwKLSAgICB7IDB4N2EsICA4LCA2NCwgTShfU0NfTEVWRUwyX0NBQ0hFX1NJWkUp LCAgIDI2MjE0NCB9LAotICAgIHsgMHg3YiwgIDgsIDY0LCBNKF9TQ19MRVZFTDJfQ0FDSEVfU0la RSksICAgNTI0Mjg4IH0sCi0gICAgeyAweDdjLCAgOCwgNjQsIE0oX1NDX0xFVkVMMl9DQUNIRV9T SVpFKSwgIDEwNDg1NzYgfSwKLSAgICB7IDB4N2QsICA4LCA2NCwgTShfU0NfTEVWRUwyX0NBQ0hF X1NJWkUpLCAgMjA5NzE1MiB9LAotICAgIHsgMHg3ZiwgIDIsIDY0LCBNKF9TQ19MRVZFTDJfQ0FD SEVfU0laRSksICAgNTI0Mjg4IH0sCi0gICAgeyAweDgwLCAgOCwgNjQsIE0oX1NDX0xFVkVMMl9D QUNIRV9TSVpFKSwgICA1MjQyODggfSwKLSAgICB7IDB4ODIsICA4LCAzMiwgTShfU0NfTEVWRUwy X0NBQ0hFX1NJWkUpLCAgIDI2MjE0NCB9LAotICAgIHsgMHg4MywgIDgsIDMyLCBNKF9TQ19MRVZF TDJfQ0FDSEVfU0laRSksICAgNTI0Mjg4IH0sCi0gICAgeyAweDg0LCAgOCwgMzIsIE0oX1NDX0xF VkVMMl9DQUNIRV9TSVpFKSwgIDEwNDg1NzYgfSwKLSAgICB7IDB4ODUsICA4LCAzMiwgTShfU0Nf TEVWRUwyX0NBQ0hFX1NJWkUpLCAgMjA5NzE1MiB9LAotICAgIHsgMHg4NiwgIDQsIDY0LCBNKF9T Q19MRVZFTDJfQ0FDSEVfU0laRSksICAgNTI0Mjg4IH0sCi0gICAgeyAweDg3LCAgOCwgNjQsIE0o X1NDX0xFVkVMMl9DQUNIRV9TSVpFKSwgIDEwNDg1NzYgfSwKLSAgICB7IDB4ZDAsICA0LCA2NCwg TShfU0NfTEVWRUwzX0NBQ0hFX1NJWkUpLCAgIDUyNDI4OCB9LAotICAgIHsgMHhkMSwgIDQsIDY0 LCBNKF9TQ19MRVZFTDNfQ0FDSEVfU0laRSksICAxMDQ4NTc2IH0sCi0gICAgeyAweGQyLCAgNCwg NjQsIE0oX1NDX0xFVkVMM19DQUNIRV9TSVpFKSwgIDIwOTcxNTIgfSwKLSAgICB7IDB4ZDYsICA4 LCA2NCwgTShfU0NfTEVWRUwzX0NBQ0hFX1NJWkUpLCAgMTA0ODU3NiB9LAotICAgIHsgMHhkNywg IDgsIDY0LCBNKF9TQ19MRVZFTDNfQ0FDSEVfU0laRSksICAyMDk3MTUyIH0sCi0gICAgeyAweGQ4 LCAgOCwgNjQsIE0oX1NDX0xFVkVMM19DQUNIRV9TSVpFKSwgIDQxOTQzMDQgfSwKLSAgICB7IDB4 ZGMsIDEyLCA2NCwgTShfU0NfTEVWRUwzX0NBQ0hFX1NJWkUpLCAgMjA5NzE1MiB9LAotICAgIHsg MHhkZCwgMTIsIDY0LCBNKF9TQ19MRVZFTDNfQ0FDSEVfU0laRSksICA0MTk0MzA0IH0sCi0gICAg eyAweGRlLCAxMiwgNjQsIE0oX1NDX0xFVkVMM19DQUNIRV9TSVpFKSwgIDgzODg2MDggfSwKLSAg ICB7IDB4ZTIsIDE2LCA2NCwgTShfU0NfTEVWRUwzX0NBQ0hFX1NJWkUpLCAgMjA5NzE1MiB9LAot ICAgIHsgMHhlMywgMTYsIDY0LCBNKF9TQ19MRVZFTDNfQ0FDSEVfU0laRSksICA0MTk0MzA0IH0s Ci0gICAgeyAweGU0LCAxNiwgNjQsIE0oX1NDX0xFVkVMM19DQUNIRV9TSVpFKSwgIDgzODg2MDgg fSwKLSAgICB7IDB4ZWEsIDI0LCA2NCwgTShfU0NfTEVWRUwzX0NBQ0hFX1NJWkUpLCAxMjU4Mjkx MiB9LAotICAgIHsgMHhlYiwgMjQsIDY0LCBNKF9TQ19MRVZFTDNfQ0FDSEVfU0laRSksIDE4ODc0 MzY4IH0sCi0gICAgeyAweGVjLCAyNCwgNjQsIE0oX1NDX0xFVkVMM19DQUNIRV9TSVpFKSwgMjUx NjU4MjQgfSwKLSAgfTsKLQotI2RlZmluZSBuaW50ZWxfMDJfa25vd24gKHNpemVvZiAoaW50ZWxf MDJfa25vd24pIC8gc2l6ZW9mIChpbnRlbF8wMl9rbm93biBbMF0pKQotCi1zdGF0aWMgaW50Ci1p bnRlbF8wMl9rbm93bl9jb21wYXJlIChjb25zdCB2b2lkICpwMSwgY29uc3Qgdm9pZCAqcDIpCi17 Ci0gIGNvbnN0IHN0cnVjdCBpbnRlbF8wMl9jYWNoZV9pbmZvICppMTsKLSAgY29uc3Qgc3RydWN0 IGludGVsXzAyX2NhY2hlX2luZm8gKmkyOwotCi0gIGkxID0gKGNvbnN0IHN0cnVjdCBpbnRlbF8w Ml9jYWNoZV9pbmZvICopIHAxOwotICBpMiA9IChjb25zdCBzdHJ1Y3QgaW50ZWxfMDJfY2FjaGVf aW5mbyAqKSBwMjsKLQotICBpZiAoaTEtPmlkeCA9PSBpMi0+aWR4KQotICAgIHJldHVybiAwOwot Ci0gIHJldHVybiBpMS0+aWR4IDwgaTItPmlkeCA/IC0xIDogMTsKLX0KLQotCi1zdGF0aWMgbG9u ZyBpbnQKLV9fYXR0cmlidXRlX18gKChub2lubGluZSkpCi1pbnRlbF9jaGVja193b3JkIChpbnQg bmFtZSwgdW5zaWduZWQgaW50IHZhbHVlLCBib29sICpoYXNfbGV2ZWxfMiwKLQkJICBib29sICpu b19sZXZlbF8yX29yXzMsCi0JCSAgY29uc3Qgc3RydWN0IGNwdV9mZWF0dXJlcyAqY3B1X2ZlYXR1 cmVzKQotewotICBpZiAoKHZhbHVlICYgMHg4MDAwMDAwMCkgIT0gMCkKLSAgICAvKiBUaGUgcmVn aXN0ZXIgdmFsdWUgaXMgcmVzZXJ2ZWQuICAqLwotICAgIHJldHVybiAwOwotCi0gIC8qIEZvbGQg dGhlIG5hbWUuICBUaGUgX1NDXyBjb25zdGFudHMgYXJlIGFsd2F5cyBpbiB0aGUgb3JkZXIgU0la RSwKLSAgICAgQVNTT0MsIExJTkVTSVpFLiAgKi8KLSAgaW50IGZvbGRlZF9yZWxfbmFtZSA9IChN KG5hbWUpIC8gMykgKiAzOwotCi0gIHdoaWxlICh2YWx1ZSAhPSAwKQotICAgIHsKLSAgICAgIHVu c2lnbmVkIGludCBieXRlID0gdmFsdWUgJiAweGZmOwotCi0gICAgICBpZiAoYnl0ZSA9PSAweDQw KQotCXsKLQkgICpub19sZXZlbF8yX29yXzMgPSB0cnVlOwotCi0JICBpZiAoZm9sZGVkX3JlbF9u YW1lID09IE0oX1NDX0xFVkVMM19DQUNIRV9TSVpFKSkKLQkgICAgLyogTm8gbmVlZCB0byBsb29r IGZ1cnRoZXIuICAqLwotCSAgICBicmVhazsKLQl9Ci0gICAgICBlbHNlIGlmIChieXRlID09IDB4 ZmYpCi0JewotCSAgLyogQ1BVSUQgbGVhZiAweDQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlv bi4gIFdlIG5lZWQgdG8KLQkgICAgIGl0ZXJhdGUgb3ZlciBpdC4gICovCi0JICB1bnNpZ25lZCBp bnQgZWF4OwotCSAgdW5zaWduZWQgaW50IGVieDsKLQkgIHVuc2lnbmVkIGludCBlY3g7Ci0JICB1 bnNpZ25lZCBpbnQgZWR4OwotCi0JICB1bnNpZ25lZCBpbnQgcm91bmQgPSAwOwotCSAgd2hpbGUg KDEpCi0JICAgIHsKLQkgICAgICBfX2NwdWlkX2NvdW50ICg0LCByb3VuZCwgZWF4LCBlYngsIGVj eCwgZWR4KTsKLQotCSAgICAgIGVudW0geyBudWxsID0gMCwgZGF0YSA9IDEsIGluc3QgPSAyLCB1 bmkgPSAzIH0gdHlwZSA9IGVheCAmIDB4MWY7Ci0JICAgICAgaWYgKHR5cGUgPT0gbnVsbCkKLQkJ LyogVGhhdCB3YXMgdGhlIGVuZC4gICovCi0JCWJyZWFrOwotCi0JICAgICAgdW5zaWduZWQgaW50 IGxldmVsID0gKGVheCA+PiA1KSAmIDB4NzsKLQotCSAgICAgIGlmICgobGV2ZWwgPT0gMSAmJiB0 eXBlID09IGRhdGEKLQkJICAgJiYgZm9sZGVkX3JlbF9uYW1lID09IE0oX1NDX0xFVkVMMV9EQ0FD SEVfU0laRSkpCi0JCSAgfHwgKGxldmVsID09IDEgJiYgdHlwZSA9PSBpbnN0Ci0JCSAgICAgICYm IGZvbGRlZF9yZWxfbmFtZSA9PSBNKF9TQ19MRVZFTDFfSUNBQ0hFX1NJWkUpKQotCQkgIHx8IChs ZXZlbCA9PSAyICYmIGZvbGRlZF9yZWxfbmFtZSA9PSBNKF9TQ19MRVZFTDJfQ0FDSEVfU0laRSkp Ci0JCSAgfHwgKGxldmVsID09IDMgJiYgZm9sZGVkX3JlbF9uYW1lID09IE0oX1NDX0xFVkVMM19D QUNIRV9TSVpFKSkKLQkJICB8fCAobGV2ZWwgPT0gNCAmJiBmb2xkZWRfcmVsX25hbWUgPT0gTShf U0NfTEVWRUw0X0NBQ0hFX1NJWkUpKSkKLQkJewotCQkgIHVuc2lnbmVkIGludCBvZmZzZXQgPSBN KG5hbWUpIC0gZm9sZGVkX3JlbF9uYW1lOwotCi0JCSAgaWYgKG9mZnNldCA9PSAwKQotCQkgICAg LyogQ2FjaGUgc2l6ZS4gICovCi0JCSAgICByZXR1cm4gKCgoZWJ4ID4+IDIyKSArIDEpCi0JCQkg ICAgKiAoKChlYnggPj4gMTIpICYgMHgzZmYpICsgMSkKLQkJCSAgICAqICgoZWJ4ICYgMHhmZmYp ICsgMSkKLQkJCSAgICAqIChlY3ggKyAxKSk7Ci0JCSAgaWYgKG9mZnNldCA9PSAxKQotCQkgICAg cmV0dXJuIChlYnggPj4gMjIpICsgMTsKLQotCQkgIGFzc2VydCAob2Zmc2V0ID09IDIpOwotCQkg IHJldHVybiAoZWJ4ICYgMHhmZmYpICsgMTsKLQkJfQotCi0JICAgICAgKytyb3VuZDsKLQkgICAg fQotCSAgLyogVGhlcmUgaXMgbm8gb3RoZXIgY2FjaGUgaW5mb3JtYXRpb24gYW55d2hlcmUgZWxz ZS4gICovCi0JICBicmVhazsKLQl9Ci0gICAgICBlbHNlCi0JewotCSAgaWYgKGJ5dGUgPT0gMHg0 OSAmJiBmb2xkZWRfcmVsX25hbWUgPT0gTShfU0NfTEVWRUwzX0NBQ0hFX1NJWkUpKQotCSAgICB7 Ci0JICAgICAgLyogSW50ZWwgcmV1c2VkIHRoaXMgdmFsdWUuICBGb3IgZmFtaWx5IDE1LCBtb2Rl bCA2IGl0Ci0JCSBzcGVjaWZpZXMgdGhlIDNyZCBsZXZlbCBjYWNoZS4gIE90aGVyd2lzZSB0aGUg Mm5kCi0JCSBsZXZlbCBjYWNoZS4gICovCi0JICAgICAgdW5zaWduZWQgaW50IGZhbWlseSA9IGNw dV9mZWF0dXJlcy0+YmFzaWMuZmFtaWx5OwotCSAgICAgIHVuc2lnbmVkIGludCBtb2RlbCA9IGNw dV9mZWF0dXJlcy0+YmFzaWMubW9kZWw7Ci0KLQkgICAgICBpZiAoZmFtaWx5ID09IDE1ICYmIG1v ZGVsID09IDYpCi0JCXsKLQkJICAvKiBUaGUgbGV2ZWwgMyBjYWNoZSBpcyBlbmNvZGVkIGZvciB0 aGlzIG1vZGVsIGxpa2UKLQkJICAgICB0aGUgbGV2ZWwgMiBjYWNoZSBpcyBmb3Igb3RoZXIgbW9k ZWxzLiAgUHJldGVuZAotCQkgICAgIHRoZSBjYWxsZXIgYXNrZWQgZm9yIHRoZSBsZXZlbCAyIGNh Y2hlLiAgKi8KLQkJICBuYW1lID0gKF9TQ19MRVZFTDJfQ0FDSEVfU0laRQotCQkJICArIChuYW1l IC0gX1NDX0xFVkVMM19DQUNIRV9TSVpFKSk7Ci0JCSAgZm9sZGVkX3JlbF9uYW1lID0gTShfU0Nf TEVWRUwyX0NBQ0hFX1NJWkUpOwotCQl9Ci0JICAgIH0KLQotCSAgc3RydWN0IGludGVsXzAyX2Nh Y2hlX2luZm8gKmZvdW5kOwotCSAgc3RydWN0IGludGVsXzAyX2NhY2hlX2luZm8gc2VhcmNoOwot Ci0JICBzZWFyY2guaWR4ID0gYnl0ZTsKLQkgIGZvdW5kID0gYnNlYXJjaCAoJnNlYXJjaCwgaW50 ZWxfMDJfa25vd24sIG5pbnRlbF8wMl9rbm93biwKLQkJCSAgIHNpemVvZiAoaW50ZWxfMDJfa25v d25bMF0pLCBpbnRlbF8wMl9rbm93bl9jb21wYXJlKTsKLQkgIGlmIChmb3VuZCAhPSBOVUxMKQot CSAgICB7Ci0JICAgICAgaWYgKGZvdW5kLT5yZWxfbmFtZSA9PSBmb2xkZWRfcmVsX25hbWUpCi0J CXsKLQkJICB1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gTShuYW1lKSAtIGZvbGRlZF9yZWxfbmFtZTsK LQotCQkgIGlmIChvZmZzZXQgPT0gMCkKLQkJICAgIC8qIENhY2hlIHNpemUuICAqLwotCQkgICAg cmV0dXJuIGZvdW5kLT5zaXplOwotCQkgIGlmIChvZmZzZXQgPT0gMSkKLQkJICAgIHJldHVybiBm b3VuZC0+YXNzb2M7Ci0KLQkJICBhc3NlcnQgKG9mZnNldCA9PSAyKTsKLQkJICByZXR1cm4gZm91 bmQtPmxpbmVzaXplOwotCQl9Ci0KLQkgICAgICBpZiAoZm91bmQtPnJlbF9uYW1lID09IE0oX1ND X0xFVkVMMl9DQUNIRV9TSVpFKSkKLQkJKmhhc19sZXZlbF8yID0gdHJ1ZTsKLQkgICAgfQotCX0K LQotICAgICAgLyogTmV4dCBieXRlIGZvciB0aGUgbmV4dCByb3VuZC4gICovCi0gICAgICB2YWx1 ZSA+Pj0gODsKLSAgICB9Ci0KLSAgLyogTm90aGluZyBmb3VuZC4gICovCi0gIHJldHVybiAwOwot fQotCi0KLXN0YXRpYyBsb25nIGludCBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKQotaGFuZGxl X2ludGVsIChpbnQgbmFtZSwgY29uc3Qgc3RydWN0IGNwdV9mZWF0dXJlcyAqY3B1X2ZlYXR1cmVz KQotewotICB1bnNpZ25lZCBpbnQgbWF4aWR4ID0gY3B1X2ZlYXR1cmVzLT5iYXNpYy5tYXhfY3B1 aWQ7Ci0KLSAgLyogUmV0dXJuIC0xIGZvciBvbGRlciBDUFVzLiAgKi8KLSAgaWYgKG1heGlkeCA8 IDIpCi0gICAgcmV0dXJuIC0xOwotCi0gIC8qIE9LLCB3ZSBjYW4gdXNlIHRoZSBDUFVJRCBpbnN0 cnVjdGlvbiB0byBnZXQgYWxsIGluZm8gYWJvdXQgdGhlCi0gICAgIGNhY2hlcy4gICovCi0gIHVu c2lnbmVkIGludCBjbnQgPSAwOwotICB1bnNpZ25lZCBpbnQgbWF4ID0gMTsKLSAgbG9uZyBpbnQg cmVzdWx0ID0gMDsKLSAgYm9vbCBub19sZXZlbF8yX29yXzMgPSBmYWxzZTsKLSAgYm9vbCBoYXNf bGV2ZWxfMiA9IGZhbHNlOwotCi0gIHdoaWxlIChjbnQrKyA8IG1heCkKLSAgICB7Ci0gICAgICB1 bnNpZ25lZCBpbnQgZWF4OwotICAgICAgdW5zaWduZWQgaW50IGVieDsKLSAgICAgIHVuc2lnbmVk IGludCBlY3g7Ci0gICAgICB1bnNpZ25lZCBpbnQgZWR4OwotICAgICAgX19jcHVpZCAoMiwgZWF4 LCBlYngsIGVjeCwgZWR4KTsKLQotICAgICAgLyogVGhlIGxvdyBieXRlIG9mIEVBWCBpbiB0aGUg Zmlyc3Qgcm91bmQgY29udGFpbiB0aGUgbnVtYmVyIG9mCi0JIHJvdW5kcyB3ZSBoYXZlIHRvIG1h a2UuICBBdCBsZWFzdCBvbmUsIHRoZSBvbmUgd2UgYXJlIGFscmVhZHkKLQkgZG9pbmcuICAqLwot ICAgICAgaWYgKGNudCA9PSAxKQotCXsKLQkgIG1heCA9IGVheCAmIDB4ZmY7Ci0JICBlYXggJj0g MHhmZmZmZmYwMDsKLQl9Ci0KLSAgICAgIC8qIFByb2Nlc3MgdGhlIGluZGl2aWR1YWwgcmVnaXN0 ZXJzJyB2YWx1ZS4gICovCi0gICAgICByZXN1bHQgPSBpbnRlbF9jaGVja193b3JkIChuYW1lLCBl YXgsICZoYXNfbGV2ZWxfMiwKLQkJCQkgJm5vX2xldmVsXzJfb3JfMywgY3B1X2ZlYXR1cmVzKTsK LSAgICAgIGlmIChyZXN1bHQgIT0gMCkKLQlyZXR1cm4gcmVzdWx0OwotCi0gICAgICByZXN1bHQg PSBpbnRlbF9jaGVja193b3JkIChuYW1lLCBlYngsICZoYXNfbGV2ZWxfMiwKLQkJCQkgJm5vX2xl dmVsXzJfb3JfMywgY3B1X2ZlYXR1cmVzKTsKLSAgICAgIGlmIChyZXN1bHQgIT0gMCkKLQlyZXR1 cm4gcmVzdWx0OwotCi0gICAgICByZXN1bHQgPSBpbnRlbF9jaGVja193b3JkIChuYW1lLCBlY3gs ICZoYXNfbGV2ZWxfMiwKLQkJCQkgJm5vX2xldmVsXzJfb3JfMywgY3B1X2ZlYXR1cmVzKTsKLSAg ICAgIGlmIChyZXN1bHQgIT0gMCkKLQlyZXR1cm4gcmVzdWx0OwotCi0gICAgICByZXN1bHQgPSBp bnRlbF9jaGVja193b3JkIChuYW1lLCBlZHgsICZoYXNfbGV2ZWxfMiwKLQkJCQkgJm5vX2xldmVs XzJfb3JfMywgY3B1X2ZlYXR1cmVzKTsKLSAgICAgIGlmIChyZXN1bHQgIT0gMCkKLQlyZXR1cm4g cmVzdWx0OwotICAgIH0KLQotICBpZiAobmFtZSA+PSBfU0NfTEVWRUwyX0NBQ0hFX1NJWkUgJiYg bmFtZSA8PSBfU0NfTEVWRUwzX0NBQ0hFX0xJTkVTSVpFCi0gICAgICAmJiBub19sZXZlbF8yX29y XzMpCi0gICAgcmV0dXJuIC0xOwotCi0gIHJldHVybiAwOwotfQotCi0KLXN0YXRpYyBsb25nIGlu dCBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKQotaGFuZGxlX2FtZCAoaW50IG5hbWUpCi17Ci0g IHVuc2lnbmVkIGludCBlYXg7Ci0gIHVuc2lnbmVkIGludCBlYng7Ci0gIHVuc2lnbmVkIGludCBl Y3g7Ci0gIHVuc2lnbmVkIGludCBlZHg7Ci0gIF9fY3B1aWQgKDB4ODAwMDAwMDAsIGVheCwgZWJ4 LCBlY3gsIGVkeCk7Ci0KLSAgLyogTm8gbGV2ZWwgNCBjYWNoZSAoeWV0KS4gICovCi0gIGlmIChu YW1lID4gX1NDX0xFVkVMM19DQUNIRV9MSU5FU0laRSkKLSAgICByZXR1cm4gMDsKLQotICB1bnNp Z25lZCBpbnQgZm4gPSAweDgwMDAwMDA1ICsgKG5hbWUgPj0gX1NDX0xFVkVMMl9DQUNIRV9TSVpF KTsKLSAgaWYgKGVheCA8IGZuKQotICAgIHJldHVybiAwOwotCi0gIF9fY3B1aWQgKGZuLCBlYXgs IGVieCwgZWN4LCBlZHgpOwotCi0gIGlmIChuYW1lIDwgX1NDX0xFVkVMMV9EQ0FDSEVfU0laRSkK LSAgICB7Ci0gICAgICBuYW1lICs9IF9TQ19MRVZFTDFfRENBQ0hFX1NJWkUgLSBfU0NfTEVWRUwx X0lDQUNIRV9TSVpFOwotICAgICAgZWN4ID0gZWR4OwotICAgIH0KLQotICBzd2l0Y2ggKG5hbWUp Ci0gICAgewotICAgIGNhc2UgX1NDX0xFVkVMMV9EQ0FDSEVfU0laRToKLSAgICAgIHJldHVybiAo ZWN4ID4+IDE0KSAmIDB4M2ZjMDA7Ci0KLSAgICBjYXNlIF9TQ19MRVZFTDFfRENBQ0hFX0FTU09D OgotICAgICAgZWN4ID4+PSAxNjsKLSAgICAgIGlmICgoZWN4ICYgMHhmZikgPT0gMHhmZikKLQkv KiBGdWxseSBhc3NvY2lhdGl2ZS4gICovCi0JcmV0dXJuIChlY3ggPDwgMikgJiAweDNmYzAwOwot ICAgICAgcmV0dXJuIGVjeCAmIDB4ZmY7Ci0KLSAgICBjYXNlIF9TQ19MRVZFTDFfRENBQ0hFX0xJ TkVTSVpFOgotICAgICAgcmV0dXJuIGVjeCAmIDB4ZmY7Ci0KLSAgICBjYXNlIF9TQ19MRVZFTDJf Q0FDSEVfU0laRToKLSAgICAgIHJldHVybiAoZWN4ICYgMHhmMDAwKSA9PSAwID8gMCA6IChlY3gg Pj4gNikgJiAweDNmZmZjMDA7Ci0KLSAgICBjYXNlIF9TQ19MRVZFTDJfQ0FDSEVfQVNTT0M6Ci0g ICAgICBzd2l0Y2ggKChlY3ggPj4gMTIpICYgMHhmKQotCXsKLQljYXNlIDA6Ci0JY2FzZSAxOgot CWNhc2UgMjoKLQljYXNlIDQ6Ci0JICByZXR1cm4gKGVjeCA+PiAxMikgJiAweGY7Ci0JY2FzZSA2 OgotCSAgcmV0dXJuIDg7Ci0JY2FzZSA4OgotCSAgcmV0dXJuIDE2OwotCWNhc2UgMTA6Ci0JICBy ZXR1cm4gMzI7Ci0JY2FzZSAxMToKLQkgIHJldHVybiA0ODsKLQljYXNlIDEyOgotCSAgcmV0dXJu IDY0OwotCWNhc2UgMTM6Ci0JICByZXR1cm4gOTY7Ci0JY2FzZSAxNDoKLQkgIHJldHVybiAxMjg7 Ci0JY2FzZSAxNToKLQkgIHJldHVybiAoKGVjeCA+PiA2KSAmIDB4M2ZmZmMwMCkgLyAoZWN4ICYg MHhmZik7Ci0JZGVmYXVsdDoKLQkgIHJldHVybiAwOwotCX0KLSAgICAgIC8qIE5PVFJFQUNIRUQg Ki8KLQotICAgIGNhc2UgX1NDX0xFVkVMMl9DQUNIRV9MSU5FU0laRToKLSAgICAgIHJldHVybiAo ZWN4ICYgMHhmMDAwKSA9PSAwID8gMCA6IGVjeCAmIDB4ZmY7Ci0KLSAgICBjYXNlIF9TQ19MRVZF TDNfQ0FDSEVfU0laRToKLSAgICAgIHJldHVybiAoZWR4ICYgMHhmMDAwKSA9PSAwID8gMCA6IChl ZHggJiAweDNmZmMwMDAwKSA8PCAxOwotCi0gICAgY2FzZSBfU0NfTEVWRUwzX0NBQ0hFX0FTU09D OgotICAgICAgc3dpdGNoICgoZWR4ID4+IDEyKSAmIDB4ZikKLQl7Ci0JY2FzZSAwOgotCWNhc2Ug MToKLQljYXNlIDI6Ci0JY2FzZSA0OgotCSAgcmV0dXJuIChlZHggPj4gMTIpICYgMHhmOwotCWNh c2UgNjoKLQkgIHJldHVybiA4OwotCWNhc2UgODoKLQkgIHJldHVybiAxNjsKLQljYXNlIDEwOgot CSAgcmV0dXJuIDMyOwotCWNhc2UgMTE6Ci0JICByZXR1cm4gNDg7Ci0JY2FzZSAxMjoKLQkgIHJl dHVybiA2NDsKLQljYXNlIDEzOgotCSAgcmV0dXJuIDk2OwotCWNhc2UgMTQ6Ci0JICByZXR1cm4g MTI4OwotCWNhc2UgMTU6Ci0JICByZXR1cm4gKChlZHggJiAweDNmZmMwMDAwKSA8PCAxKSAvIChl ZHggJiAweGZmKTsKLQlkZWZhdWx0OgotCSAgcmV0dXJuIDA7Ci0JfQotICAgICAgLyogTk9UUkVB Q0hFRCAqLwotCi0gICAgY2FzZSBfU0NfTEVWRUwzX0NBQ0hFX0xJTkVTSVpFOgotICAgICAgcmV0 dXJuIChlZHggJiAweGYwMDApID09IDAgPyAwIDogZWR4ICYgMHhmZjsKLQotICAgIGRlZmF1bHQ6 Ci0gICAgICBhc3NlcnQgKCEgImNhbm5vdCBoYXBwZW4iKTsKLSAgICB9Ci0gIHJldHVybiAtMTsK LX0KLQotCi1zdGF0aWMgbG9uZyBpbnQgX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkKLWhhbmRs ZV96aGFveGluIChpbnQgbmFtZSkKLXsKLSAgdW5zaWduZWQgaW50IGVheDsKLSAgdW5zaWduZWQg aW50IGVieDsKLSAgdW5zaWduZWQgaW50IGVjeDsKLSAgdW5zaWduZWQgaW50IGVkeDsKLQotICBp bnQgZm9sZGVkX3JlbF9uYW1lID0gKE0obmFtZSkgLyAzKSAqIDM7Ci0KLSAgdW5zaWduZWQgaW50 IHJvdW5kID0gMDsKLSAgd2hpbGUgKDEpCi0gICAgewotICAgICAgX19jcHVpZF9jb3VudCAoNCwg cm91bmQsIGVheCwgZWJ4LCBlY3gsIGVkeCk7Ci0KLSAgICAgIGVudW0geyBudWxsID0gMCwgZGF0 YSA9IDEsIGluc3QgPSAyLCB1bmkgPSAzIH0gdHlwZSA9IGVheCAmIDB4MWY7Ci0gICAgICBpZiAo dHlwZSA9PSBudWxsKQotICAgICAgICBicmVhazsKLQotICAgICAgdW5zaWduZWQgaW50IGxldmVs ID0gKGVheCA+PiA1KSAmIDB4NzsKLQotICAgICAgaWYgKChsZXZlbCA9PSAxICYmIHR5cGUgPT0g ZGF0YQotICAgICAgICAmJiBmb2xkZWRfcmVsX25hbWUgPT0gTShfU0NfTEVWRUwxX0RDQUNIRV9T SVpFKSkKLSAgICAgICAgfHwgKGxldmVsID09IDEgJiYgdHlwZSA9PSBpbnN0Ci0gICAgICAgICAg ICAmJiBmb2xkZWRfcmVsX25hbWUgPT0gTShfU0NfTEVWRUwxX0lDQUNIRV9TSVpFKSkKLSAgICAg ICAgfHwgKGxldmVsID09IDIgJiYgZm9sZGVkX3JlbF9uYW1lID09IE0oX1NDX0xFVkVMMl9DQUNI RV9TSVpFKSkKLSAgICAgICAgfHwgKGxldmVsID09IDMgJiYgZm9sZGVkX3JlbF9uYW1lID09IE0o X1NDX0xFVkVMM19DQUNIRV9TSVpFKSkpCi0gICAgICAgIHsKLSAgICAgICAgICB1bnNpZ25lZCBp bnQgb2Zmc2V0ID0gTShuYW1lKSAtIGZvbGRlZF9yZWxfbmFtZTsKLQotICAgICAgICAgIGlmIChv ZmZzZXQgPT0gMCkKLSAgICAgICAgICAgIC8qIENhY2hlIHNpemUuICAqLwotICAgICAgICAgICAg cmV0dXJuICgoKGVieCA+PiAyMikgKyAxKQotICAgICAgICAgICAgICAgICogKCgoZWJ4ID4+IDEy KSAmIDB4M2ZmKSArIDEpCi0gICAgICAgICAgICAgICAgKiAoKGVieCAmIDB4ZmZmKSArIDEpCi0g ICAgICAgICAgICAgICAgKiAoZWN4ICsgMSkpOwotICAgICAgICAgIGlmIChvZmZzZXQgPT0gMSkK LSAgICAgICAgICAgIHJldHVybiAoZWJ4ID4+IDIyKSArIDE7Ci0KLSAgICAgICAgICBhc3NlcnQg KG9mZnNldCA9PSAyKTsKLSAgICAgICAgICByZXR1cm4gKGVieCAmIDB4ZmZmKSArIDE7Ci0gICAg ICAgIH0KLQotICAgICAgKytyb3VuZDsKLSAgICB9Ci0KLSAgLyogTm90aGluZyBmb3VuZC4gICov Ci0gIHJldHVybiAwOwotfQotCi0KLS8qIEdldCB0aGUgdmFsdWUgb2YgdGhlIHN5c3RlbSB2YXJp YWJsZSBOQU1FLiAgKi8KLWxvbmcgaW50Ci1hdHRyaWJ1dGVfaGlkZGVuCi1fX2NhY2hlX3N5c2Nv bmYgKGludCBuYW1lKQotewotICBjb25zdCBzdHJ1Y3QgY3B1X2ZlYXR1cmVzICpjcHVfZmVhdHVy ZXMgPSBfX2dldF9jcHVfZmVhdHVyZXMgKCk7Ci0KLSAgaWYgKGNwdV9mZWF0dXJlcy0+YmFzaWMu a2luZCA9PSBhcmNoX2tpbmRfaW50ZWwpCi0gICAgcmV0dXJuIGhhbmRsZV9pbnRlbCAobmFtZSwg Y3B1X2ZlYXR1cmVzKTsKLQotICBpZiAoY3B1X2ZlYXR1cmVzLT5iYXNpYy5raW5kID09IGFyY2hf a2luZF9hbWQpCi0gICAgcmV0dXJuIGhhbmRsZV9hbWQgKG5hbWUpOwotCi0gIGlmIChjcHVfZmVh dHVyZXMtPmJhc2ljLmtpbmQgPT0gYXJjaF9raW5kX3poYW94aW4pCi0gICAgcmV0dXJuIGhhbmRs ZV96aGFveGluIChuYW1lKTsKLQotICAvLyBYWFggRmlsbCBpbiBtb3JlIHZlbmRvcnMuCi0KLSAg LyogQ1BVIG5vdCBrbm93biwgd2UgaGF2ZSBubyBpbmZvcm1hdGlvbi4gICovCi0gIHJldHVybiAw OwotfQotCi0KIC8qIERhdGEgY2FjaGUgc2l6ZSBmb3IgdXNlIGluIG1lbW9yeSBhbmQgc3RyaW5n IHJvdXRpbmVzLCB0eXBpY2FsbHkKICAgIEwxIHNpemUsIHJvdW5kZWQgdG8gbXVsdGlwbGUgb2Yg MjU2IGJ5dGVzLiAgKi8KIGxvbmcgaW50IF9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmIGF0dHJp YnV0ZV9oaWRkZW4gPSAzMiAqIDEwMjQgLyAyOwpAQCAtNTMwLDM0OCArNDEsODUgQEAgbG9uZyBp bnQgX194ODZfcmF3X3NoYXJlZF9jYWNoZV9zaXplIGF0dHJpYnV0ZV9oaWRkZW4gPSAxMDI0ICog MTAyNDsKIC8qIFRocmVzaG9sZCB0byB1c2Ugbm9uIHRlbXBvcmFsIHN0b3JlLiAgKi8KIGxvbmcg aW50IF9feDg2X3NoYXJlZF9ub25fdGVtcG9yYWxfdGhyZXNob2xkIGF0dHJpYnV0ZV9oaWRkZW47 CiAKLSNpZm5kZWYgRElTQUJMRV9QUkVGRVRDSFcKKyNpZm5kZWYgX194ODZfNjRfXwogLyogUFJF RkVUQ0hXIHN1cHBvcnQgZmxhZyBmb3IgdXNlIGluIG1lbW9yeSBhbmQgc3RyaW5nIHJvdXRpbmVz LiAgKi8KIGludCBfX3g4Nl9wcmVmZXRjaHcgYXR0cmlidXRlX2hpZGRlbjsKICNlbmRpZgogCi0K LXN0YXRpYyB2b2lkCi1nZXRfY29tbW9uX2NhY2hlX2luZm8gKGxvbmcgaW50ICpzaGFyZWRfcHRy LCB1bnNpZ25lZCBpbnQgKnRocmVhZHNfcHRyLAotICAgICAgICAgICAgICAgIGxvbmcgaW50IGNv cmUpCisvKiBHZXQgdGhlIHZhbHVlIG9mIHRoZSBzeXN0ZW0gdmFyaWFibGUgTkFNRS4gICovCits b25nIGludAorYXR0cmlidXRlX2hpZGRlbgorX19jYWNoZV9zeXNjb25mIChpbnQgbmFtZSkKIHsK LSAgdW5zaWduZWQgaW50IGVheDsKLSAgdW5zaWduZWQgaW50IGVieDsKLSAgdW5zaWduZWQgaW50 IGVjeDsKLSAgdW5zaWduZWQgaW50IGVkeDsKLQotICAvKiBOdW1iZXIgb2YgbG9naWNhbCBwcm9j ZXNzb3JzIHNoYXJpbmcgTDIgY2FjaGUuICAqLwotICBpbnQgdGhyZWFkc19sMjsKLQotICAvKiBO dW1iZXIgb2YgbG9naWNhbCBwcm9jZXNzb3JzIHNoYXJpbmcgTDMgY2FjaGUuICAqLwotICBpbnQg dGhyZWFkc19sMzsKLQogICBjb25zdCBzdHJ1Y3QgY3B1X2ZlYXR1cmVzICpjcHVfZmVhdHVyZXMg PSBfX2dldF9jcHVfZmVhdHVyZXMgKCk7Ci0gIGludCBtYXhfY3B1aWQgPSBjcHVfZmVhdHVyZXMt PmJhc2ljLm1heF9jcHVpZDsKLSAgdW5zaWduZWQgaW50IGZhbWlseSA9IGNwdV9mZWF0dXJlcy0+ YmFzaWMuZmFtaWx5OwotICB1bnNpZ25lZCBpbnQgbW9kZWwgPSBjcHVfZmVhdHVyZXMtPmJhc2lj Lm1vZGVsOwotICBsb25nIGludCBzaGFyZWQgPSAqc2hhcmVkX3B0cjsKLSAgdW5zaWduZWQgaW50 IHRocmVhZHMgPSAqdGhyZWFkc19wdHI7Ci0gIGJvb2wgaW5jbHVzaXZlX2NhY2hlID0gdHJ1ZTsK LSAgYm9vbCBzdXBwb3J0X2NvdW50X21hc2sgPSB0cnVlOwotCi0gIC8qIFRyeSBMMyBmaXJzdC4g ICovCi0gIHVuc2lnbmVkIGludCBsZXZlbCA9IDM7Ci0KLSAgaWYgKGNwdV9mZWF0dXJlcy0+YmFz aWMua2luZCA9PSBhcmNoX2tpbmRfemhhb3hpbiAmJiBmYW1pbHkgPT0gNikKLSAgICBzdXBwb3J0 X2NvdW50X21hc2sgPSBmYWxzZTsKLQotICBpZiAoc2hhcmVkIDw9IDApCi0gICAgewotICAgICAg LyogVHJ5IEwyIG90aGVyd2lzZS4gICovCi0gICAgICBsZXZlbCAgPSAyOwotICAgICAgc2hhcmVk ID0gY29yZTsKLSAgICAgIHRocmVhZHNfbDIgPSAwOwotICAgICAgdGhyZWFkc19sMyA9IC0xOwot ICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIHRocmVhZHNfbDIgPSAwOwotICAgICAgdGhyZWFk c19sMyA9IDA7Ci0gICAgfQotCi0gIC8qIEEgdmFsdWUgb2YgMCBmb3IgdGhlIEhUVCBiaXQgaW5k aWNhdGVzIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUKLSAgICAgbG9naWNhbCBwcm9jZXNzb3IuICAq LwotICBpZiAoSEFTX0NQVV9GRUFUVVJFIChIVFQpKQorICBzd2l0Y2ggKG5hbWUpCiAgICAgewot ICAgICAgLyogRmlndXJlIG91dCB0aGUgbnVtYmVyIG9mIGxvZ2ljYWwgdGhyZWFkcyB0aGF0IHNo YXJlIHRoZQotICAgICAgICAgaGlnaGVzdCBjYWNoZSBsZXZlbC4gICovCi0gICAgICBpZiAobWF4 X2NwdWlkID49IDQpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnQgaSA9IDA7Ci0KLSAgICAgICAg ICAvKiBRdWVyeSB1bnRpbCBjYWNoZSBsZXZlbCAyIGFuZCAzIGFyZSBlbnVtZXJhdGVkLiAgKi8K LSAgICAgICAgICBpbnQgY2hlY2sgPSAweDEgfCAodGhyZWFkc19sMyA9PSAwKSA8PCAxOwotICAg ICAgICAgIGRvCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIF9fY3B1aWRfY291bnQgKDQs IGkrKywgZWF4LCBlYngsIGVjeCwgZWR4KTsKKyAgICBjYXNlIF9TQ19MRVZFTDFfSUNBQ0hFX1NJ WkU6CisgICAgICByZXR1cm4gY3B1X2ZlYXR1cmVzLT5sZXZlbDFfaWNhY2hlX3NpemU7CiAKLSAg ICAgICAgICAgICAgLyogVGhlcmUgc2VlbXMgdG8gYmUgYSBidWcgaW4gYXQgbGVhc3Qgc29tZSBQ ZW50aXVtIERzCi0gICAgICAgICAgICAgICAgIHdoaWNoIHNvbWV0aW1lcyBmYWlsIHRvIGl0ZXJh dGUgYWxsIGNhY2hlIHBhcmFtZXRlcnMuCi0gICAgICAgICAgICAgICAgIERvIG5vdCBsb29wIGlu ZGVmaW5pdGVseSBoZXJlLCBzdG9wIGluIHRoaXMgY2FzZSBhbmQKLSAgICAgICAgICAgICAgICAg YXNzdW1lIHRoZXJlIGlzIG5vIHN1Y2ggaW5mb3JtYXRpb24uICAqLwotICAgICAgICAgICAgICBp ZiAoY3B1X2ZlYXR1cmVzLT5iYXNpYy5raW5kID09IGFyY2hfa2luZF9pbnRlbAotICAgICAgICAg ICAgICAgICAgJiYgKGVheCAmIDB4MWYpID09IDAgKQotICAgICAgICAgICAgICAgIGdvdG8gaW50 ZWxfYnVnX25vX2NhY2hlX2luZm87CisgICAgY2FzZSBfU0NfTEVWRUwxX0RDQUNIRV9TSVpFOgor ICAgICAgcmV0dXJuIGNwdV9mZWF0dXJlcy0+bGV2ZWwxX2RjYWNoZV9zaXplOwogCi0gICAgICAg ICAgICAgIHN3aXRjaCAoKGVheCA+PiA1KSAmIDB4NykKLSAgICAgICAgICAgICAgICB7Ci0gICAg ICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKChjaGVjayAmIDB4 MSkpCi0gICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgLyog R2V0IG1heGltdW0gbnVtYmVyIG9mIGxvZ2ljYWwgcHJvY2Vzc29ycwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2hhcmluZyBMMiBjYWNoZS4gICovCi0gICAgICAgICAgICAgICAgICAgICAg ICB0aHJlYWRzX2wyID0gKGVheCA+PiAxNCkgJiAweDNmZjsKLSAgICAgICAgICAgICAgICAgICAg ICAgIGNoZWNrICY9IH4weDE7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgICAg ICAgICAgaWYgKChjaGVjayAmICgweDEgPDwgMSkpKQotICAgICAgICAgICAgICAgICAgICAgIHsK LSAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdldCBtYXhpbXVtIG51bWJlciBvZiBsb2dpY2Fs IHByb2Nlc3NvcnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJpbmcgTDMgY2FjaGUu ICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkc19sMyA9IChlYXggPj4gMTQpICYg MHgzZmY7CisgICAgY2FzZSBfU0NfTEVWRUwxX0RDQUNIRV9BU1NPQzoKKyAgICAgIHJldHVybiBj cHVfZmVhdHVyZXMtPmxldmVsMV9kY2FjaGVfYXNzb2M7CiAKLSAgICAgICAgICAgICAgICAgICAg ICAgIC8qIENoZWNrIGlmIEwyIGFuZCBMMyBjYWNoZXMgYXJlIGluY2x1c2l2ZS4gICovCi0gICAg ICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmVfY2FjaGUgPSAoZWR4ICYgMHgyKSAhPSAwOwot ICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sgJj0gfigweDEgPDwgMSk7Ci0gICAgICAgICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgd2hpbGUgKGNoZWNrKTsKKyAgICBjYXNlIF9T Q19MRVZFTDFfRENBQ0hFX0xJTkVTSVpFOgorICAgICAgcmV0dXJuIGNwdV9mZWF0dXJlcy0+bGV2 ZWwxX2RjYWNoZV9saW5lc2l6ZTsKIAotICAgICAgICAgIC8qIElmIG1heF9jcHVpZCA+PSAxMSwg VEhSRUFEU19MMi9USFJFQURTX0wzIGFyZSB0aGUgbWF4aW11bQotICAgICAgICAgICAgIG51bWJl cnMgb2YgYWRkcmVzc2FibGUgSURzIGZvciBsb2dpY2FsIHByb2Nlc3NvcnMgc2hhcmluZwotICAg ICAgICAgICAgIHRoZSBjYWNoZSwgaW5zdGVhZCBvZiB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGhy ZWFkcwotICAgICAgICAgICAgIHNoYXJpbmcgdGhlIGNhY2hlLiAgKi8KLSAgICAgICAgICBpZiAo bWF4X2NwdWlkID49IDExICYmIHN1cHBvcnRfY291bnRfbWFzaykKLSAgICAgICAgICAgIHsKLSAg ICAgICAgICAgICAgLyogRmluZCB0aGUgbnVtYmVyIG9mIGxvZ2ljYWwgcHJvY2Vzc29ycyBzaGlw cGVkIGluCi0gICAgICAgICAgICAgICAgIG9uZSBjb3JlIGFuZCBhcHBseSBjb3VudCBtYXNrLiAg Ki8KLSAgICAgICAgICAgICAgaSA9IDA7CisgICAgY2FzZSBfU0NfTEVWRUwyX0NBQ0hFX1NJWkU6 CisgICAgICByZXR1cm4gY3B1X2ZlYXR1cmVzLT5sZXZlbDJfY2FjaGVfc2l6ZTsKIAotICAgICAg ICAgICAgICAvKiBDb3VudCBTTVQgb25seSBpZiB0aGVyZSBpcyBMMyBjYWNoZS4gIEFsd2F5cyBj b3VudAotICAgICAgICAgICAgICAgICBjb3JlIGlmIHRoZXJlIGlzIG5vIEwzIGNhY2hlLiAgKi8K LSAgICAgICAgICAgICAgaW50IGNvdW50ID0gKCh0aHJlYWRzX2wyID4gMCAmJiBsZXZlbCA9PSAz KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKHRocmVhZHNfbDMgPiAwCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHRocmVhZHNfbDIgPiAwICYmIGxldmVsID09IDIp KSA8PCAxKSk7CisgICAgY2FzZSBfU0NfTEVWRUwyX0NBQ0hFX0FTU09DOgorICAgICAgcmV0dXJu IGNwdV9mZWF0dXJlcy0+bGV2ZWwyX2NhY2hlX2Fzc29jOwogCi0gICAgICAgICAgICAgIHdoaWxl IChjb3VudCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBfX2NwdWlkX2Nv dW50ICgxMSwgaSsrLCBlYXgsIGVieCwgZWN4LCBlZHgpOworICAgIGNhc2UgX1NDX0xFVkVMMl9D QUNIRV9MSU5FU0laRToKKyAgICAgIHJldHVybiBjcHVfZmVhdHVyZXMtPmxldmVsMl9jYWNoZV9s aW5lc2l6ZTsKIAotICAgICAgICAgICAgICAgICAgaW50IHNoaXBwZWQgPSBlYnggJiAweGZmOwot ICAgICAgICAgICAgICAgICAgaW50IHR5cGUgPSBlY3ggJiAweGZmMDA7Ci0gICAgICAgICAgICAg ICAgICBpZiAoc2hpcHBlZCA9PSAwIHx8IHR5cGUgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IDB4MTAwKQotICAgICAg ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgLyogQ291bnQgU01ULiAgKi8K LSAgICAgICAgICAgICAgICAgICAgICBpZiAoKGNvdW50ICYgMHgxKSkKLSAgICAgICAgICAgICAg ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50X21hc2s7Cisg ICAgY2FzZSBfU0NfTEVWRUwzX0NBQ0hFX1NJWkU6CisgICAgICByZXR1cm4gY3B1X2ZlYXR1cmVz LT5sZXZlbDNfY2FjaGVfc2l6ZTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21w dXRlIGNvdW50IG1hc2suICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICBhc20gKCJic3Ig JTEsICUwIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIj1yIiAoY291bnRfbWFz aykgOiAiZyIgKHRocmVhZHNfbDIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRf bWFzayA9IH4oLTEgPDwgKGNvdW50X21hc2sgKyAxKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgIHRocmVhZHNfbDIgPSAoc2hpcHBlZCAtIDEpICYgY291bnRfbWFzazsKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgY291bnQgJj0gfjB4MTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9 PSAweDIwMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIC8q IENvdW50IGNvcmUuICAqLwotICAgICAgICAgICAgICAgICAgICAgIGlmICgoY291bnQgJiAoMHgx IDw8IDEpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IGNvdW50X21hc2s7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aHJl YWRzX2NvcmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IChsZXZlbCA9PSAyID8gdGhy ZWFkc19sMiA6IHRocmVhZHNfbDMpOworICAgIGNhc2UgX1NDX0xFVkVMM19DQUNIRV9BU1NPQzoK KyAgICAgIHJldHVybiBjcHVfZmVhdHVyZXMtPmxldmVsM19jYWNoZV9hc3NvYzsKIAotICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBDb21wdXRlIGNvdW50IG1hc2suICAqLwotICAgICAgICAg ICAgICAgICAgICAgICAgICBhc20gKCJic3IgJTEsICUwIgotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDogIj1yIiAoY291bnRfbWFzaykgOiAiZyIgKHRocmVhZHNfY29yZSkpOwotICAg ICAgICAgICAgICAgICAgICAgICAgICBjb3VudF9tYXNrID0gfigtMSA8PCAoY291bnRfbWFzayAr IDEpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkc19jb3JlID0gKHNoaXBwZWQg LSAxKSAmIGNvdW50X21hc2s7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZXZlbCA9 PSAyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZHNfbDIgPSB0aHJlYWRzX2Nv cmU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0aHJlYWRzX2wzID0gdGhyZWFkc19jb3JlOwotICAgICAgICAgICAgICAgICAgICAg ICAgICBjb3VudCAmPSB+KDB4MSA8PCAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg ICAgICAgICBpZiAodGhyZWFkc19sMiA+IDApCi0gICAgICAgICAgICB0aHJlYWRzX2wyICs9IDE7 Ci0gICAgICAgICAgaWYgKHRocmVhZHNfbDMgPiAwKQotICAgICAgICAgICAgdGhyZWFkc19sMyAr PSAxOwotICAgICAgICAgIGlmIChsZXZlbCA9PSAyKQotICAgICAgICAgICAgewotICAgICAgICAg ICAgICBpZiAodGhyZWFkc19sMikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg ICB0aHJlYWRzID0gdGhyZWFkc19sMjsKLSAgICAgICAgICAgICAgICAgIGlmIChjcHVfZmVhdHVy ZXMtPmJhc2ljLmtpbmQgPT0gYXJjaF9raW5kX2ludGVsCi0gICAgICAgICAgICAgICAgICAgICAg JiYgdGhyZWFkcyA+IDIKLSAgICAgICAgICAgICAgICAgICAgICAmJiBmYW1pbHkgPT0gNikKLSAg ICAgICAgICAgICAgICAgICAgc3dpdGNoIChtb2RlbCkKLSAgICAgICAgICAgICAgICAgICAgICB7 Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4Mzc6Ci0gICAgICAgICAgICAgICAgICAg ICAgICBjYXNlIDB4NGE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4NGQ6Ci0gICAg ICAgICAgICAgICAgICAgICAgICBjYXNlIDB4NWE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBj YXNlIDB4NWQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNpbHZlcm1vbnQgaGFzIEwy IGNhY2hlIHNoYXJlZCBieSAyIGNvcmVzLiAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAg dGhyZWFkcyA9IDI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg IH0KLSAgICAgICAgICBlbHNlIGlmICh0aHJlYWRzX2wzKQotICAgICAgICAgICAgdGhyZWFkcyA9 IHRocmVhZHNfbDM7Ci0gICAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgewotaW50ZWxfYnVn X25vX2NhY2hlX2luZm86Ci0gICAgICAgICAgLyogQXNzdW1lIHRoYXQgYWxsIGxvZ2ljYWwgdGhy ZWFkcyBzaGFyZSB0aGUgaGlnaGVzdCBjYWNoZQotICAgICAgICAgICAgIGxldmVsLiAgKi8KLSAg ICAgICAgICB0aHJlYWRzCi0gICAgICAgICAgICA9ICgoY3B1X2ZlYXR1cmVzLT5jcHVpZFtDT01N T05fQ1BVSURfSU5ERVhfMV0uZWJ4Ci0gICAgICAgICAgICAgICAgPj4gMTYpICYgMHhmZik7Ci0g ICAgICAgIH0KKyAgICBjYXNlIF9TQ19MRVZFTDNfQ0FDSEVfTElORVNJWkU6CisgICAgICByZXR1 cm4gY3B1X2ZlYXR1cmVzLT5sZXZlbDNfY2FjaGVfbGluZXNpemU7CiAKLSAgICAgICAgLyogQ2Fw IHVzYWdlIG9mIGhpZ2hlc3QgY2FjaGUgbGV2ZWwgdG8gdGhlIG51bWJlciBvZiBzdXBwb3J0ZWQK LSAgICAgICAgICAgdGhyZWFkcy4gICovCi0gICAgICAgIGlmIChzaGFyZWQgPiAwICYmIHRocmVh ZHMgPiAwKQotICAgICAgICAgIHNoYXJlZCAvPSB0aHJlYWRzOwotICAgIH0KKyAgICBjYXNlIF9T Q19MRVZFTDRfQ0FDSEVfU0laRToKKyAgICAgIHJldHVybiBjcHVfZmVhdHVyZXMtPmxldmVsNF9j YWNoZV9zaXplOwogCi0gIC8qIEFjY291bnQgZm9yIG5vbi1pbmNsdXNpdmUgTDIgYW5kIEwzIGNh Y2hlcy4gICovCi0gIGlmICghaW5jbHVzaXZlX2NhY2hlKQotICAgIHsKLSAgICAgIGlmICh0aHJl YWRzX2wyID4gMCkKLSAgICAgICAgY29yZSAvPSB0aHJlYWRzX2wyOwotICAgICAgc2hhcmVkICs9 IGNvcmU7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOwogICAgIH0KLQotICAqc2hhcmVkX3B0 ciA9IHNoYXJlZDsKLSAgKnRocmVhZHNfcHRyID0gdGhyZWFkczsKKyAgcmV0dXJuIC0xOwogfQog Ci0KIHN0YXRpYyB2b2lkCiBfX2F0dHJpYnV0ZV9fKChjb25zdHJ1Y3RvcikpCiBpbml0X2NhY2hl aW5mbyAodm9pZCkKIHsKLSAgLyogRmluZCBvdXQgd2hhdCBicmFuZCBvZiBwcm9jZXNzb3IuICAq LwotICB1bnNpZ25lZCBpbnQgZWJ4OwotICB1bnNpZ25lZCBpbnQgZWN4OwotICB1bnNpZ25lZCBp bnQgZWR4OwotICBpbnQgbWF4X2NwdWlkX2V4OwotICBsb25nIGludCBkYXRhID0gLTE7Ci0gIGxv bmcgaW50IHNoYXJlZCA9IC0xOwotICBsb25nIGludCBjb3JlOwotICB1bnNpZ25lZCBpbnQgdGhy ZWFkcyA9IDA7CiAgIGNvbnN0IHN0cnVjdCBjcHVfZmVhdHVyZXMgKmNwdV9mZWF0dXJlcyA9IF9f Z2V0X2NwdV9mZWF0dXJlcyAoKTsKKyAgbG9uZyBpbnQgZGF0YSA9IGNwdV9mZWF0dXJlcy0+ZGF0 YV9jYWNoZV9zaXplOworICBfX3g4Nl9yYXdfZGF0YV9jYWNoZV9zaXplX2hhbGYgPSBkYXRhIC8g MjsKKyAgX194ODZfcmF3X2RhdGFfY2FjaGVfc2l6ZSA9IGRhdGE7CisgIC8qIFJvdW5kIGRhdGEg Y2FjaGUgc2l6ZSB0byBtdWx0aXBsZSBvZiAyNTYgYnl0ZXMuICAqLworICBkYXRhID0gZGF0YSAm IH4yNTVMOworICBfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiA9IGRhdGEgLyAyOworICBfX3g4 Nl9kYXRhX2NhY2hlX3NpemUgPSBkYXRhOworCisgIGxvbmcgaW50IHNoYXJlZCA9IGNwdV9mZWF0 dXJlcy0+c2hhcmVkX2NhY2hlX3NpemU7CisgIF9feDg2X3Jhd19zaGFyZWRfY2FjaGVfc2l6ZV9o YWxmID0gc2hhcmVkIC8gMjsKKyAgX194ODZfcmF3X3NoYXJlZF9jYWNoZV9zaXplID0gc2hhcmVk OworICAvKiBSb3VuZCBzaGFyZWQgY2FjaGUgc2l6ZSB0byBtdWx0aXBsZSBvZiAyNTYgYnl0ZXMu ICAqLworICBzaGFyZWQgPSBzaGFyZWQgJiB+MjU1TDsKKyAgX194ODZfc2hhcmVkX2NhY2hlX3Np emVfaGFsZiA9IHNoYXJlZCAvIDI7CisgIF9feDg2X3NoYXJlZF9jYWNoZV9zaXplID0gc2hhcmVk OwogCi0gIGlmIChjcHVfZmVhdHVyZXMtPmJhc2ljLmtpbmQgPT0gYXJjaF9raW5kX2ludGVsKQot ICAgIHsKLSAgICAgIGRhdGEgPSBoYW5kbGVfaW50ZWwgKF9TQ19MRVZFTDFfRENBQ0hFX1NJWkUs IGNwdV9mZWF0dXJlcyk7Ci0gICAgICBjb3JlID0gaGFuZGxlX2ludGVsIChfU0NfTEVWRUwyX0NB Q0hFX1NJWkUsIGNwdV9mZWF0dXJlcyk7Ci0gICAgICBzaGFyZWQgPSBoYW5kbGVfaW50ZWwgKF9T Q19MRVZFTDNfQ0FDSEVfU0laRSwgY3B1X2ZlYXR1cmVzKTsKLQotICAgICAgZ2V0X2NvbW1vbl9j YWNoZV9pbmZvICgmc2hhcmVkLCAmdGhyZWFkcywgY29yZSk7Ci0gICAgfQotICBlbHNlIGlmIChj cHVfZmVhdHVyZXMtPmJhc2ljLmtpbmQgPT0gYXJjaF9raW5kX3poYW94aW4pCi0gICAgewotICAg ICAgZGF0YSA9IGhhbmRsZV96aGFveGluIChfU0NfTEVWRUwxX0RDQUNIRV9TSVpFKTsKLSAgICAg IGNvcmUgPSBoYW5kbGVfemhhb3hpbiAoX1NDX0xFVkVMMl9DQUNIRV9TSVpFKTsKLSAgICAgIHNo YXJlZCA9IGhhbmRsZV96aGFveGluIChfU0NfTEVWRUwzX0NBQ0hFX1NJWkUpOwotCi0gICAgICBn ZXRfY29tbW9uX2NhY2hlX2luZm8gKCZzaGFyZWQsICZ0aHJlYWRzLCBjb3JlKTsKLSAgICB9Ci0g IGVsc2UgaWYgKGNwdV9mZWF0dXJlcy0+YmFzaWMua2luZCA9PSBhcmNoX2tpbmRfYW1kKQotICAg IHsKLSAgICAgIGRhdGEgICA9IGhhbmRsZV9hbWQgKF9TQ19MRVZFTDFfRENBQ0hFX1NJWkUpOwot ICAgICAgbG9uZyBpbnQgY29yZSA9IGhhbmRsZV9hbWQgKF9TQ19MRVZFTDJfQ0FDSEVfU0laRSk7 Ci0gICAgICBzaGFyZWQgPSBoYW5kbGVfYW1kIChfU0NfTEVWRUwzX0NBQ0hFX1NJWkUpOwotCi0g ICAgICAvKiBHZXQgbWF4aW11bSBleHRlbmRlZCBmdW5jdGlvbi4gKi8KLSAgICAgIF9fY3B1aWQg KDB4ODAwMDAwMDAsIG1heF9jcHVpZF9leCwgZWJ4LCBlY3gsIGVkeCk7Ci0KLSAgICAgIGlmIChz aGFyZWQgPD0gMCkKLQkvKiBObyBzaGFyZWQgTDMgY2FjaGUuICBBbGwgd2UgaGF2ZSBpcyB0aGUg TDIgY2FjaGUuICAqLwotCXNoYXJlZCA9IGNvcmU7Ci0gICAgICBlbHNlCi0JewotCSAgLyogRmln dXJlIG91dCB0aGUgbnVtYmVyIG9mIGxvZ2ljYWwgdGhyZWFkcyB0aGF0IHNoYXJlIEwzLiAgKi8K LQkgIGlmIChtYXhfY3B1aWRfZXggPj0gMHg4MDAwMDAwOCkKLQkgICAgewotCSAgICAgIC8qIEdl dCB3aWR0aCBvZiBBUElDIElELiAgKi8KLQkgICAgICBfX2NwdWlkICgweDgwMDAwMDA4LCBtYXhf Y3B1aWRfZXgsIGVieCwgZWN4LCBlZHgpOwotCSAgICAgIHRocmVhZHMgPSAxIDw8ICgoZWN4ID4+ IDEyKSAmIDB4MGYpOwotCSAgICB9Ci0KLQkgIGlmICh0aHJlYWRzID09IDApCi0JICAgIHsKLQkg ICAgICAvKiBJZiBBUElDIElEIHdpZHRoIGlzIG5vdCBhdmFpbGFibGUsIHVzZSBsb2dpY2FsCi0J CSBwcm9jZXNzb3IgY291bnQuICAqLwotCSAgICAgIF9fY3B1aWQgKDB4MDAwMDAwMDEsIG1heF9j cHVpZF9leCwgZWJ4LCBlY3gsIGVkeCk7Ci0KLQkgICAgICBpZiAoKGVkeCAmICgxIDw8IDI4KSkg IT0gMCkKLQkJdGhyZWFkcyA9IChlYnggPj4gMTYpICYgMHhmZjsKLQkgICAgfQotCi0JICAvKiBD YXAgdXNhZ2Ugb2YgaGlnaGVzdCBjYWNoZSBsZXZlbCB0byB0aGUgbnVtYmVyIG9mCi0JICAgICBz dXBwb3J0ZWQgdGhyZWFkcy4gICovCi0JICBpZiAodGhyZWFkcyA+IDApCi0JICAgIHNoYXJlZCAv PSB0aHJlYWRzOwotCi0JICAvKiBBY2NvdW50IGZvciBleGNsdXNpdmUgTDIgYW5kIEwzIGNhY2hl cy4gICovCi0JICBzaGFyZWQgKz0gY29yZTsKLQl9CisgIF9feDg2X3NoYXJlZF9ub25fdGVtcG9y YWxfdGhyZXNob2xkCisgICAgPSBjcHVfZmVhdHVyZXMtPm5vbl90ZW1wb3JhbF90aHJlc2hvbGQ7 CiAKLSNpZm5kZWYgRElTQUJMRV9QUkVGRVRDSFcKLSAgICAgIGlmIChtYXhfY3B1aWRfZXggPj0g MHg4MDAwMDAwMSkKLQl7Ci0JICB1bnNpZ25lZCBpbnQgZWF4OwotCSAgX19jcHVpZCAoMHg4MDAw MDAwMSwgZWF4LCBlYngsIGVjeCwgZWR4KTsKLQkgIC8qICBQUkVGRVRDSFcgICAgIHx8IDNETm93 ISAgKi8KLQkgIGlmICgoZWN4ICYgMHgxMDApIHx8IChlZHggJiAweDgwMDAwMDAwKSkKLQkgICAg X194ODZfcHJlZmV0Y2h3ID0gLTE7Ci0JfQorI2lmbmRlZiBfX3g4Nl82NF9fCisgIF9feDg2X3By ZWZldGNodyA9IGNwdV9mZWF0dXJlcy0+cHJlZmV0Y2h3OwogI2VuZGlmCi0gICAgfQotCi0gIGlm IChjcHVfZmVhdHVyZXMtPmRhdGFfY2FjaGVfc2l6ZSAhPSAwKQotICAgIGRhdGEgPSBjcHVfZmVh dHVyZXMtPmRhdGFfY2FjaGVfc2l6ZTsKLQotICBpZiAoZGF0YSA+IDApCi0gICAgewotICAgICAg X194ODZfcmF3X2RhdGFfY2FjaGVfc2l6ZV9oYWxmID0gZGF0YSAvIDI7Ci0gICAgICBfX3g4Nl9y YXdfZGF0YV9jYWNoZV9zaXplID0gZGF0YTsKLSAgICAgIC8qIFJvdW5kIGRhdGEgY2FjaGUgc2l6 ZSB0byBtdWx0aXBsZSBvZiAyNTYgYnl0ZXMuICAqLwotICAgICAgZGF0YSA9IGRhdGEgJiB+MjU1 TDsKLSAgICAgIF9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmID0gZGF0YSAvIDI7Ci0gICAgICBf X3g4Nl9kYXRhX2NhY2hlX3NpemUgPSBkYXRhOwotICAgIH0KLQotICBpZiAoY3B1X2ZlYXR1cmVz LT5zaGFyZWRfY2FjaGVfc2l6ZSAhPSAwKQotICAgIHNoYXJlZCA9IGNwdV9mZWF0dXJlcy0+c2hh cmVkX2NhY2hlX3NpemU7Ci0KLSAgaWYgKHNoYXJlZCA+IDApCi0gICAgewotICAgICAgX194ODZf cmF3X3NoYXJlZF9jYWNoZV9zaXplX2hhbGYgPSBzaGFyZWQgLyAyOwotICAgICAgX194ODZfcmF3 X3NoYXJlZF9jYWNoZV9zaXplID0gc2hhcmVkOwotICAgICAgLyogUm91bmQgc2hhcmVkIGNhY2hl IHNpemUgdG8gbXVsdGlwbGUgb2YgMjU2IGJ5dGVzLiAgKi8KLSAgICAgIHNoYXJlZCA9IHNoYXJl ZCAmIH4yNTVMOwotICAgICAgX194ODZfc2hhcmVkX2NhY2hlX3NpemVfaGFsZiA9IHNoYXJlZCAv IDI7Ci0gICAgICBfX3g4Nl9zaGFyZWRfY2FjaGVfc2l6ZSA9IHNoYXJlZDsKLSAgICB9Ci0KLSAg LyogVGhlIGxhcmdlIG1lbWNweSBtaWNybyBiZW5jaG1hcmsgaW4gZ2xpYmMgc2hvd3MgdGhhdCA2 IHRpbWVzIG9mCi0gICAgIHNoYXJlZCBjYWNoZSBzaXplIGlzIHRoZSBhcHByb3hpbWF0ZSB2YWx1 ZSBhYm92ZSB3aGljaCBub24tdGVtcG9yYWwKLSAgICAgc3RvcmUgYmVjb21lcyBmYXN0ZXIgb24g YSA4LWNvcmUgcHJvY2Vzc29yLiAgVGhpcyBpcyB0aGUgMy80IG9mIHRoZQotICAgICB0b3RhbCBz aGFyZWQgY2FjaGUgc2l6ZS4gICovCi0gIF9feDg2X3NoYXJlZF9ub25fdGVtcG9yYWxfdGhyZXNo b2xkCi0gICAgPSAoY3B1X2ZlYXR1cmVzLT5ub25fdGVtcG9yYWxfdGhyZXNob2xkICE9IDAKLSAg ICAgICA/IGNwdV9mZWF0dXJlcy0+bm9uX3RlbXBvcmFsX3RocmVzaG9sZAotICAgICAgIDogX194 ODZfc2hhcmVkX2NhY2hlX3NpemUgKiB0aHJlYWRzICogMyAvIDQpOwogfQogCiAjZW5kaWYKZGlm ZiAtLWdpdCBhL3N5c2RlcHMveDg2L2NwdS1mZWF0dXJlcy5jIGIvc3lzZGVwcy94ODYvY3B1LWZl YXR1cmVzLmMKaW5kZXggOTE2YmJmNTI0Mi4uM2QxNTk2YmQ4OSAxMDA2NDQKLS0tIGEvc3lzZGVw cy94ODYvY3B1LWZlYXR1cmVzLmMKKysrIGIvc3lzZGVwcy94ODYvY3B1LWZlYXR1cmVzLmMKQEAg LTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxjcHVpZC5oPgogI2luY2x1ZGUgPGNwdS1mZWF0dXJl cy5oPgogI2luY2x1ZGUgPGRsLWh3Y2FwLmg+CisjaW5jbHVkZSA8aW5pdC1hcmNoLmg+CiAjaW5j bHVkZSA8bGliYy1wb2ludGVyLWFyaXRoLmg+CiAKICNpZiBIQVZFX1RVTkFCTEVTCkBAIC01NjAs MjAgKzU2MSwxNCBAQCBub19jcHVpZDoKICAgY3B1X2ZlYXR1cmVzLT5iYXNpYy5tb2RlbCA9IG1v ZGVsOwogICBjcHVfZmVhdHVyZXMtPmJhc2ljLnN0ZXBwaW5nID0gc3RlcHBpbmc7CiAKKyAgX19p bml0X2NhY2hlaW5mbyAoKTsKKwogI2lmIEhBVkVfVFVOQUJMRVMKICAgVFVOQUJMRV9HRVQgKGh3 Y2FwcywgdHVuYWJsZV92YWxfdCAqLCBUVU5BQkxFX0NBTExCQUNLIChzZXRfaHdjYXBzKSk7Ci0g IGNwdV9mZWF0dXJlcy0+bm9uX3RlbXBvcmFsX3RocmVzaG9sZAotICAgID0gVFVOQUJMRV9HRVQg KHg4Nl9ub25fdGVtcG9yYWxfdGhyZXNob2xkLCBsb25nIGludCwgTlVMTCk7Ci0gIGNwdV9mZWF0 dXJlcy0+ZGF0YV9jYWNoZV9zaXplCi0gICAgPSBUVU5BQkxFX0dFVCAoeDg2X2RhdGFfY2FjaGVf c2l6ZSwgbG9uZyBpbnQsIE5VTEwpOwotICBjcHVfZmVhdHVyZXMtPnNoYXJlZF9jYWNoZV9zaXpl Ci0gICAgPSBUVU5BQkxFX0dFVCAoeDg2X3NoYXJlZF9jYWNoZV9zaXplLCBsb25nIGludCwgTlVM TCk7Ci0jZW5kaWYKLQotICAvKiBSZXVzZSBkbF9wbGF0Zm9ybSwgZGxfaHdjYXAgYW5kIGRsX2h3 Y2FwX21hc2sgZm9yIHg4Ni4gICovCi0jaWYgIUhBVkVfVFVOQUJMRVMgJiYgZGVmaW5lZCBTSEFS RUQKLSAgLyogVGhlIGdsaWJjLmNwdS5od2NhcF9tYXNrIHR1bmFibGUgaXMgaW5pdGlhbGl6ZWQg YWxyZWFkeSwgc28gbm8gbmVlZCB0byBkbwotICAgICB0aGlzLiAgKi8KKyNlbGlmIGRlZmluZWQg U0hBUkVECisgIC8qIFJldXNlIGRsX3BsYXRmb3JtLCBkbF9od2NhcCBhbmQgZGxfaHdjYXBfbWFz ayBmb3IgeDg2LiAgVGhlCisgICAgIGdsaWJjLmNwdS5od2NhcF9tYXNrIHR1bmFibGUgaXMgaW5p dGlhbGl6ZWQgYWxyZWFkeSwgc28gbm8KKyAgICAgbmVlZCB0byBkbyB0aGlzLiAgKi8KICAgR0xS TyhkbF9od2NhcF9tYXNrKSA9IEhXQ0FQX0lNUE9SVEFOVDsKICNlbmRpZgogCmRpZmYgLS1naXQg YS9zeXNkZXBzL3g4Ni9jcHUtZmVhdHVyZXMuaCBiL3N5c2RlcHMveDg2L2NwdS1mZWF0dXJlcy5o CmluZGV4IGYwNWQ1Y2UxNTguLjYzNmIyNzBlM2IgMTAwNjQ0Ci0tLSBhL3N5c2RlcHMveDg2L2Nw dS1mZWF0dXJlcy5oCisrKyBiL3N5c2RlcHMveDg2L2NwdS1mZWF0dXJlcy5oCkBAIC05MSw2ICs5 MSwzMiBAQCBzdHJ1Y3QgY3B1X2ZlYXR1cmVzCiAgIHVuc2lnbmVkIGxvbmcgaW50IHNoYXJlZF9j YWNoZV9zaXplOwogICAvKiBUaHJlc2hvbGQgdG8gdXNlIG5vbiB0ZW1wb3JhbCBzdG9yZS4gICov CiAgIHVuc2lnbmVkIGxvbmcgaW50IG5vbl90ZW1wb3JhbF90aHJlc2hvbGQ7CisgIC8qIF9TQ19M RVZFTDFfSUNBQ0hFX1NJWkUuICAqLworICB1bnNpZ25lZCBsb25nIGludCBsZXZlbDFfaWNhY2hl X3NpemU7CisgIC8qIF9TQ19MRVZFTDFfRENBQ0hFX1NJWkUuICAqLworICB1bnNpZ25lZCBsb25n IGludCBsZXZlbDFfZGNhY2hlX3NpemU7CisgIC8qIF9TQ19MRVZFTDFfRENBQ0hFX0FTU09DLiAg Ki8KKyAgdW5zaWduZWQgbG9uZyBpbnQgbGV2ZWwxX2RjYWNoZV9hc3NvYzsKKyAgLyogX1NDX0xF VkVMMV9EQ0FDSEVfTElORVNJWkUuICAqLworICB1bnNpZ25lZCBsb25nIGludCBsZXZlbDFfZGNh Y2hlX2xpbmVzaXplOworICAvKiBfU0NfTEVWRUwyX0NBQ0hFX0FTU09DLiAgKi8KKyAgdW5zaWdu ZWQgbG9uZyBpbnQgbGV2ZWwyX2NhY2hlX3NpemU7CisgIC8qIF9TQ19MRVZFTDJfRENBQ0hFX0FT U09DLiAgKi8KKyAgdW5zaWduZWQgbG9uZyBpbnQgbGV2ZWwyX2NhY2hlX2Fzc29jOworICAvKiBf U0NfTEVWRUwyX0NBQ0hFX0xJTkVTSVpFLiAgKi8KKyAgdW5zaWduZWQgbG9uZyBpbnQgbGV2ZWwy X2NhY2hlX2xpbmVzaXplOworICAvKiAvX1NDX0xFVkVMM19DQUNIRV9TSVpFLiAgKi8KKyAgdW5z aWduZWQgbG9uZyBpbnQgbGV2ZWwzX2NhY2hlX3NpemU7CisgIC8qIF9TQ19MRVZFTDNfQ0FDSEVf QVNTT0MuICAqLworICB1bnNpZ25lZCBsb25nIGludCBsZXZlbDNfY2FjaGVfYXNzb2M7CisgIC8q IF9TQ19MRVZFTDNfQ0FDSEVfTElORVNJWkUuICAqLworICB1bnNpZ25lZCBsb25nIGludCBsZXZl bDNfY2FjaGVfbGluZXNpemU7CisgIC8qIC9fU0NfTEVWRUw0X0NBQ0hFX1NJWkUuICAqLworICB1 bnNpZ25lZCBsb25nIGludCBsZXZlbDRfY2FjaGVfc2l6ZTsKKyNpZm5kZWYgX194ODZfNjRfXwor ICAvKiBQUkVGRVRDSFcgc3VwcG9ydCBmbGFnIGZvciB1c2UgaW4gbWVtb3J5IGFuZCBzdHJpbmcg cm91dGluZXMuICAqLworICB1bnNpZ25lZCBsb25nIGludCBwcmVmZXRjaHc7CisjZW5kaWYKIH07 CiAKIC8qIFVzZWQgZnJvbSBvdXRzaWRlIG9mIGdsaWJjIHRvIGdldCBhY2Nlc3MgdG8gdGhlIENQ VSBmZWF0dXJlcwpkaWZmIC0tZ2l0IGEvc3lzZGVwcy94ODYvZGwtY2FjaGVpbmZvLmMgYi9zeXNk ZXBzL3g4Ni9kbC1jYWNoZWluZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwLi43Y2Q2NDI2YTlhCi0tLSAvZGV2L251bGwKKysrIGIvc3lzZGVwcy94ODYvZGwtY2FjaGVp bmZvLmMKQEAgLTAsMCArMSw4ODggQEAKKy8qIHg4NiBjYWNoZSBpbmZvLgorICAgQ29weXJpZ2h0 IChDKSAyMDIwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlz IHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy CisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor ICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAg WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3Qs IHNlZQorICAgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRl IDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+Cisj aW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8Y3B1aWQuaD4KKyNpbmNsdWRlIDxpbml0LWFy Y2guaD4KKyNpZiBIQVZFX1RVTkFCTEVTCisjIGRlZmluZSBUVU5BQkxFX05BTUVTUEFDRSBjcHUK KyMgaW5jbHVkZSA8ZWxmL2RsLXR1bmFibGVzLmg+CisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0 cnVjdCBpbnRlbF8wMl9jYWNoZV9pbmZvCit7CisgIHVuc2lnbmVkIGNoYXIgaWR4OworICB1bnNp Z25lZCBjaGFyIGFzc29jOworICB1bnNpZ25lZCBjaGFyIGxpbmVzaXplOworICB1bnNpZ25lZCBj aGFyIHJlbF9uYW1lOworICB1bnNpZ25lZCBpbnQgc2l6ZTsKK30gaW50ZWxfMDJfa25vd24gW10g PQorICB7CisjZGVmaW5lIE0oc2MpICgoc2MpIC0gX1NDX0xFVkVMMV9JQ0FDSEVfU0laRSkKKyAg ICB7IDB4MDYsICA0LCAzMiwgTShfU0NfTEVWRUwxX0lDQUNIRV9TSVpFKSwgICAgODE5MiB9LAor ICAgIHsgMHgwOCwgIDQsIDMyLCBNKF9TQ19MRVZFTDFfSUNBQ0hFX1NJWkUpLCAgIDE2Mzg0IH0s CisgICAgeyAweDA5LCAgNCwgMzIsIE0oX1NDX0xFVkVMMV9JQ0FDSEVfU0laRSksICAgMzI3Njgg fSwKKyAgICB7IDB4MGEsICAyLCAzMiwgTShfU0NfTEVWRUwxX0RDQUNIRV9TSVpFKSwgICAgODE5 MiB9LAorICAgIHsgMHgwYywgIDQsIDMyLCBNKF9TQ19MRVZFTDFfRENBQ0hFX1NJWkUpLCAgIDE2 Mzg0IH0sCisgICAgeyAweDBkLCAgNCwgNjQsIE0oX1NDX0xFVkVMMV9EQ0FDSEVfU0laRSksICAg MTYzODQgfSwKKyAgICB7IDB4MGUsICA2LCA2NCwgTShfU0NfTEVWRUwxX0RDQUNIRV9TSVpFKSwg ICAyNDU3NiB9LAorICAgIHsgMHgyMSwgIDgsIDY0LCBNKF9TQ19MRVZFTDJfQ0FDSEVfU0laRSks ICAgMjYyMTQ0IH0sCisgICAgeyAweDIyLCAgNCwgNjQsIE0oX1NDX0xFVkVMM19DQUNIRV9TSVpF KSwgICA1MjQyODggfSwKKyAgICB7IDB4MjMsICA4LCA2NCwgTShfU0NfTEVWRUwzX0NBQ0hFX1NJ WkUpLCAgMTA0ODU3NiB9LAorICAgIHsgMHgyNSwgIDgsIDY0LCBNKF9TQ19MRVZFTDNfQ0FDSEVf U0laRSksICAyMDk3MTUyIH0sCisgICAgeyAweDI5LCAgOCwgNjQsIE0oX1NDX0xFVkVMM19DQUNI RV9TSVpFKSwgIDQxOTQzMDQgfSwKKyAgICB7IDB4MmMsICA4LCA2NCwgTShfU0NfTEVWRUwxX0RD QUNIRV9TSVpFKSwgICAzMjc2OCB9LAorICAgIHsgMHgzMCwgIDgsIDY0LCBNKF9TQ19MRVZFTDFf SUNBQ0hFX1NJWkUpLCAgIDMyNzY4IH0sCisgICAgeyAweDM5LCAgNCwgNjQsIE0oX1NDX0xFVkVM Ml9DQUNIRV9TSVpFKSwgICAxMzEwNzIgfSwKKyAgICB7IDB4M2EsICA2LCA2NCwgTShfU0NfTEVW RUwyX0NBQ0hFX1NJWkUpLCAgIDE5NjYwOCB9LAorICAgIHsgMHgzYiwgIDIsIDY0LCBNKF9TQ19M RVZFTDJfQ0FDSEVfU0laRSksICAgMTMxMDcyIH0sCisgICAgeyAweDNjLCAgNCwgNjQsIE0oX1ND X0xFVkVMMl9DQUNIRV9TSVpFKSwgICAyNjIxNDQgfSwKKyAgICB7IDB4M2QsICA2LCA2NCwgTShf U0NfTEVWRUwyX0NBQ0hFX1NJWkUpLCAgIDM5MzIxNiB9LAorICAgIHsgMHgzZSwgIDQsIDY0LCBN KF9TQ19MRVZFTDJfQ0FDSEVfU0laRSksICAgNTI0Mjg4IH0sCisgICAgeyAweDNmLCAgMiwgNjQs IE0oX1NDX0xFVkVMMl9DQUNIRV9TSVpFKSwgICAyNjIxNDQgfSwKKyAgICB7IDB4NDEsICA0LCAz MiwgTShfU0NfTEVWRUwyX0NBQ0hFX1NJWkUpLCAgIDEzMTA3MiB9LAorICAgIHsgMHg0MiwgIDQs IDMyLCBNKF9TQ19MRVZFTDJfQ0FDSEVfU0laRSksICAgMjYyMTQ0IH0sCisgICAgeyAweDQzLCAg NCwgMzIsIE0oX1NDX0xFVkVMMl9DQUNIRV9TSVpFKSwgICA1MjQyODggfSwKKyAgICB7IDB4NDQs ICA0LCAzMiwgTShfU0NfTEVWRUwyX0NBQ0hFX1NJWkUpLCAgMTA0ODU3NiB9LAorICAgIHsgMHg0 NSwgIDQsIDMyLCBNKF9TQ19MRVZFTDJfQ0FDSEVfU0laRSksICAyMDk3MTUyIH0sCisgICAgeyAw eDQ2LCAgNCwgNjQsIE0oX1NDX0xFVkVMM19DQUNIRV9TSVpFKSwgIDQxOTQzMDQgfSwKKyAgICB7 IDB4NDcsICA4LCA2NCwgTShfU0NfTEVWRUwzX0NBQ0hFX1NJWkUpLCAgODM4ODYwOCB9LAorICAg IHsgMHg0OCwgMTIsIDY0LCBNKF9TQ19MRVZFTDJfQ0FDSEVfU0laRSksICAzMTQ1NzI4IH0sCisg ICAgeyAweDQ5LCAxNiwgNjQsIE0oX1NDX0xFVkVMMl9DQUNIRV9TSVpFKSwgIDQxOTQzMDQgfSwK KyAgICB7IDB4NGEsIDEyLCA2NCwgTShfU0NfTEVWRUwzX0NBQ0hFX1NJWkUpLCAgNjI5MTQ1NiB9 LAorICAgIHsgMHg0YiwgMTYsIDY0LCBNKF9TQ19MRVZFTDNfQ0FDSEVfU0laRSksICA4Mzg4NjA4 IH0sCisgICAgeyAweDRjLCAxMiwgNjQsIE0oX1NDX0xFVkVMM19DQUNIRV9TSVpFKSwgMTI1ODI5 MTIgfSwKKyAgICB7IDB4NGQsIDE2LCA2NCwgTShfU0NfTEVWRUwzX0NBQ0hFX1NJWkUpLCAxNjc3 NzIxNiB9LAorICAgIHsgMHg0ZSwgMjQsIDY0LCBNKF9TQ19MRVZFTDJfQ0FDSEVfU0laRSksICA2 MjkxNDU2IH0sCisgICAgeyAweDYwLCAgOCwgNjQsIE0oX1NDX0xFVkVMMV9EQ0FDSEVfU0laRSks ICAgMTYzODQgfSwKKyAgICB7IDB4NjYsICA0LCA2NCwgTShfU0NfTEVWRUwxX0RDQUNIRV9TSVpF KSwgICAgODE5MiB9LAorICAgIHsgMHg2NywgIDQsIDY0LCBNKF9TQ19MRVZFTDFfRENBQ0hFX1NJ WkUpLCAgIDE2Mzg0IH0sCisgICAgeyAweDY4LCAgNCwgNjQsIE0oX1NDX0xFVkVMMV9EQ0FDSEVf U0laRSksICAgMzI3NjggfSwKKyAgICB7IDB4NzgsICA4LCA2NCwgTShfU0NfTEVWRUwyX0NBQ0hF X1NJWkUpLCAgMTA0ODU3NiB9LAorICAgIHsgMHg3OSwgIDgsIDY0LCBNKF9TQ19MRVZFTDJfQ0FD SEVfU0laRSksICAgMTMxMDcyIH0sCisgICAgeyAweDdhLCAgOCwgNjQsIE0oX1NDX0xFVkVMMl9D QUNIRV9TSVpFKSwgICAyNjIxNDQgfSwKKyAgICB7IDB4N2IsICA4LCA2NCwgTShfU0NfTEVWRUwy X0NBQ0hFX1NJWkUpLCAgIDUyNDI4OCB9LAorICAgIHsgMHg3YywgIDgsIDY0LCBNKF9TQ19MRVZF TDJfQ0FDSEVfU0laRSksICAxMDQ4NTc2IH0sCisgICAgeyAweDdkLCAgOCwgNjQsIE0oX1NDX0xF VkVMMl9DQUNIRV9TSVpFKSwgIDIwOTcxNTIgfSwKKyAgICB7IDB4N2YsICAyLCA2NCwgTShfU0Nf TEVWRUwyX0NBQ0hFX1NJWkUpLCAgIDUyNDI4OCB9LAorICAgIHsgMHg4MCwgIDgsIDY0LCBNKF9T Q19MRVZFTDJfQ0FDSEVfU0laRSksICAgNTI0Mjg4IH0sCisgICAgeyAweDgyLCAgOCwgMzIsIE0o X1NDX0xFVkVMMl9DQUNIRV9TSVpFKSwgICAyNjIxNDQgfSwKKyAgICB7IDB4ODMsICA4LCAzMiwg TShfU0NfTEVWRUwyX0NBQ0hFX1NJWkUpLCAgIDUyNDI4OCB9LAorICAgIHsgMHg4NCwgIDgsIDMy LCBNKF9TQ19MRVZFTDJfQ0FDSEVfU0laRSksICAxMDQ4NTc2IH0sCisgICAgeyAweDg1LCAgOCwg MzIsIE0oX1NDX0xFVkVMMl9DQUNIRV9TSVpFKSwgIDIwOTcxNTIgfSwKKyAgICB7IDB4ODYsICA0 LCA2NCwgTShfU0NfTEVWRUwyX0NBQ0hFX1NJWkUpLCAgIDUyNDI4OCB9LAorICAgIHsgMHg4Nywg IDgsIDY0LCBNKF9TQ19MRVZFTDJfQ0FDSEVfU0laRSksICAxMDQ4NTc2IH0sCisgICAgeyAweGQw LCAgNCwgNjQsIE0oX1NDX0xFVkVMM19DQUNIRV9TSVpFKSwgICA1MjQyODggfSwKKyAgICB7IDB4 ZDEsICA0LCA2NCwgTShfU0NfTEVWRUwzX0NBQ0hFX1NJWkUpLCAgMTA0ODU3NiB9LAorICAgIHsg MHhkMiwgIDQsIDY0LCBNKF9TQ19MRVZFTDNfQ0FDSEVfU0laRSksICAyMDk3MTUyIH0sCisgICAg eyAweGQ2LCAgOCwgNjQsIE0oX1NDX0xFVkVMM19DQUNIRV9TSVpFKSwgIDEwNDg1NzYgfSwKKyAg ICB7IDB4ZDcsICA4LCA2NCwgTShfU0NfTEVWRUwzX0NBQ0hFX1NJWkUpLCAgMjA5NzE1MiB9LAor ICAgIHsgMHhkOCwgIDgsIDY0LCBNKF9TQ19MRVZFTDNfQ0FDSEVfU0laRSksICA0MTk0MzA0IH0s CisgICAgeyAweGRjLCAxMiwgNjQsIE0oX1NDX0xFVkVMM19DQUNIRV9TSVpFKSwgIDIwOTcxNTIg fSwKKyAgICB7IDB4ZGQsIDEyLCA2NCwgTShfU0NfTEVWRUwzX0NBQ0hFX1NJWkUpLCAgNDE5NDMw NCB9LAorICAgIHsgMHhkZSwgMTIsIDY0LCBNKF9TQ19MRVZFTDNfQ0FDSEVfU0laRSksICA4Mzg4 NjA4IH0sCisgICAgeyAweGUyLCAxNiwgNjQsIE0oX1NDX0xFVkVMM19DQUNIRV9TSVpFKSwgIDIw OTcxNTIgfSwKKyAgICB7IDB4ZTMsIDE2LCA2NCwgTShfU0NfTEVWRUwzX0NBQ0hFX1NJWkUpLCAg NDE5NDMwNCB9LAorICAgIHsgMHhlNCwgMTYsIDY0LCBNKF9TQ19MRVZFTDNfQ0FDSEVfU0laRSks ICA4Mzg4NjA4IH0sCisgICAgeyAweGVhLCAyNCwgNjQsIE0oX1NDX0xFVkVMM19DQUNIRV9TSVpF KSwgMTI1ODI5MTIgfSwKKyAgICB7IDB4ZWIsIDI0LCA2NCwgTShfU0NfTEVWRUwzX0NBQ0hFX1NJ WkUpLCAxODg3NDM2OCB9LAorICAgIHsgMHhlYywgMjQsIDY0LCBNKF9TQ19MRVZFTDNfQ0FDSEVf U0laRSksIDI1MTY1ODI0IH0sCisgIH07CisKKyNkZWZpbmUgbmludGVsXzAyX2tub3duIChzaXpl b2YgKGludGVsXzAyX2tub3duKSAvIHNpemVvZiAoaW50ZWxfMDJfa25vd24gWzBdKSkKKworc3Rh dGljIGludAoraW50ZWxfMDJfa25vd25fY29tcGFyZSAoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZv aWQgKnAyKQoreworICBjb25zdCBzdHJ1Y3QgaW50ZWxfMDJfY2FjaGVfaW5mbyAqaTE7CisgIGNv bnN0IHN0cnVjdCBpbnRlbF8wMl9jYWNoZV9pbmZvICppMjsKKworICBpMSA9IChjb25zdCBzdHJ1 Y3QgaW50ZWxfMDJfY2FjaGVfaW5mbyAqKSBwMTsKKyAgaTIgPSAoY29uc3Qgc3RydWN0IGludGVs XzAyX2NhY2hlX2luZm8gKikgcDI7CisKKyAgaWYgKGkxLT5pZHggPT0gaTItPmlkeCkKKyAgICBy ZXR1cm4gMDsKKworICByZXR1cm4gaTEtPmlkeCA8IGkyLT5pZHggPyAtMSA6IDE7Cit9CisKKwor c3RhdGljIGxvbmcgaW50CitfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKQoraW50ZWxfY2hlY2tf d29yZCAoaW50IG5hbWUsIHVuc2lnbmVkIGludCB2YWx1ZSwgYm9vbCAqaGFzX2xldmVsXzIsCisJ CSAgYm9vbCAqbm9fbGV2ZWxfMl9vcl8zLAorCQkgIGNvbnN0IHN0cnVjdCBjcHVfZmVhdHVyZXMg KmNwdV9mZWF0dXJlcykKK3sKKyAgaWYgKCh2YWx1ZSAmIDB4ODAwMDAwMDApICE9IDApCisgICAg LyogVGhlIHJlZ2lzdGVyIHZhbHVlIGlzIHJlc2VydmVkLiAgKi8KKyAgICByZXR1cm4gMDsKKwor ICAvKiBGb2xkIHRoZSBuYW1lLiAgVGhlIF9TQ18gY29uc3RhbnRzIGFyZSBhbHdheXMgaW4gdGhl IG9yZGVyIFNJWkUsCisgICAgIEFTU09DLCBMSU5FU0laRS4gICovCisgIGludCBmb2xkZWRfcmVs X25hbWUgPSAoTShuYW1lKSAvIDMpICogMzsKKworICB3aGlsZSAodmFsdWUgIT0gMCkKKyAgICB7 CisgICAgICB1bnNpZ25lZCBpbnQgYnl0ZSA9IHZhbHVlICYgMHhmZjsKKworICAgICAgaWYgKGJ5 dGUgPT0gMHg0MCkKKwl7CisJICAqbm9fbGV2ZWxfMl9vcl8zID0gdHJ1ZTsKKworCSAgaWYgKGZv bGRlZF9yZWxfbmFtZSA9PSBNKF9TQ19MRVZFTDNfQ0FDSEVfU0laRSkpCisJICAgIC8qIE5vIG5l ZWQgdG8gbG9vayBmdXJ0aGVyLiAgKi8KKwkgICAgYnJlYWs7CisJfQorICAgICAgZWxzZSBpZiAo Ynl0ZSA9PSAweGZmKQorCXsKKwkgIC8qIENQVUlEIGxlYWYgMHg0IGNvbnRhaW5zIGFsbCB0aGUg aW5mb3JtYXRpb24uICBXZSBuZWVkIHRvCisJICAgICBpdGVyYXRlIG92ZXIgaXQuICAqLworCSAg dW5zaWduZWQgaW50IGVheDsKKwkgIHVuc2lnbmVkIGludCBlYng7CisJICB1bnNpZ25lZCBpbnQg ZWN4OworCSAgdW5zaWduZWQgaW50IGVkeDsKKworCSAgdW5zaWduZWQgaW50IHJvdW5kID0gMDsK KwkgIHdoaWxlICgxKQorCSAgICB7CisJICAgICAgX19jcHVpZF9jb3VudCAoNCwgcm91bmQsIGVh eCwgZWJ4LCBlY3gsIGVkeCk7CisKKwkgICAgICBlbnVtIHsgbnVsbCA9IDAsIGRhdGEgPSAxLCBp bnN0ID0gMiwgdW5pID0gMyB9IHR5cGUgPSBlYXggJiAweDFmOworCSAgICAgIGlmICh0eXBlID09 IG51bGwpCisJCS8qIFRoYXQgd2FzIHRoZSBlbmQuICAqLworCQlicmVhazsKKworCSAgICAgIHVu c2lnbmVkIGludCBsZXZlbCA9IChlYXggPj4gNSkgJiAweDc7CisKKwkgICAgICBpZiAoKGxldmVs ID09IDEgJiYgdHlwZSA9PSBkYXRhCisJCSAgICYmIGZvbGRlZF9yZWxfbmFtZSA9PSBNKF9TQ19M RVZFTDFfRENBQ0hFX1NJWkUpKQorCQkgIHx8IChsZXZlbCA9PSAxICYmIHR5cGUgPT0gaW5zdAor CQkgICAgICAmJiBmb2xkZWRfcmVsX25hbWUgPT0gTShfU0NfTEVWRUwxX0lDQUNIRV9TSVpFKSkK KwkJICB8fCAobGV2ZWwgPT0gMiAmJiBmb2xkZWRfcmVsX25hbWUgPT0gTShfU0NfTEVWRUwyX0NB Q0hFX1NJWkUpKQorCQkgIHx8IChsZXZlbCA9PSAzICYmIGZvbGRlZF9yZWxfbmFtZSA9PSBNKF9T Q19MRVZFTDNfQ0FDSEVfU0laRSkpCisJCSAgfHwgKGxldmVsID09IDQgJiYgZm9sZGVkX3JlbF9u YW1lID09IE0oX1NDX0xFVkVMNF9DQUNIRV9TSVpFKSkpCisJCXsKKwkJICB1bnNpZ25lZCBpbnQg b2Zmc2V0ID0gTShuYW1lKSAtIGZvbGRlZF9yZWxfbmFtZTsKKworCQkgIGlmIChvZmZzZXQgPT0g MCkKKwkJICAgIC8qIENhY2hlIHNpemUuICAqLworCQkgICAgcmV0dXJuICgoKGVieCA+PiAyMikg KyAxKQorCQkJICAgICogKCgoZWJ4ID4+IDEyKSAmIDB4M2ZmKSArIDEpCisJCQkgICAgKiAoKGVi eCAmIDB4ZmZmKSArIDEpCisJCQkgICAgKiAoZWN4ICsgMSkpOworCQkgIGlmIChvZmZzZXQgPT0g MSkKKwkJICAgIHJldHVybiAoZWJ4ID4+IDIyKSArIDE7CisKKwkJICBhc3NlcnQgKG9mZnNldCA9 PSAyKTsKKwkJICByZXR1cm4gKGVieCAmIDB4ZmZmKSArIDE7CisJCX0KKworCSAgICAgICsrcm91 bmQ7CisJICAgIH0KKwkgIC8qIFRoZXJlIGlzIG5vIG90aGVyIGNhY2hlIGluZm9ybWF0aW9uIGFu eXdoZXJlIGVsc2UuICAqLworCSAgYnJlYWs7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGlmIChi eXRlID09IDB4NDkgJiYgZm9sZGVkX3JlbF9uYW1lID09IE0oX1NDX0xFVkVMM19DQUNIRV9TSVpF KSkKKwkgICAgeworCSAgICAgIC8qIEludGVsIHJldXNlZCB0aGlzIHZhbHVlLiAgRm9yIGZhbWls eSAxNSwgbW9kZWwgNiBpdAorCQkgc3BlY2lmaWVzIHRoZSAzcmQgbGV2ZWwgY2FjaGUuICBPdGhl cndpc2UgdGhlIDJuZAorCQkgbGV2ZWwgY2FjaGUuICAqLworCSAgICAgIHVuc2lnbmVkIGludCBm YW1pbHkgPSBjcHVfZmVhdHVyZXMtPmJhc2ljLmZhbWlseTsKKwkgICAgICB1bnNpZ25lZCBpbnQg bW9kZWwgPSBjcHVfZmVhdHVyZXMtPmJhc2ljLm1vZGVsOworCisJICAgICAgaWYgKGZhbWlseSA9 PSAxNSAmJiBtb2RlbCA9PSA2KQorCQl7CisJCSAgLyogVGhlIGxldmVsIDMgY2FjaGUgaXMgZW5j b2RlZCBmb3IgdGhpcyBtb2RlbCBsaWtlCisJCSAgICAgdGhlIGxldmVsIDIgY2FjaGUgaXMgZm9y IG90aGVyIG1vZGVscy4gIFByZXRlbmQKKwkJICAgICB0aGUgY2FsbGVyIGFza2VkIGZvciB0aGUg bGV2ZWwgMiBjYWNoZS4gICovCisJCSAgbmFtZSA9IChfU0NfTEVWRUwyX0NBQ0hFX1NJWkUKKwkJ CSAgKyAobmFtZSAtIF9TQ19MRVZFTDNfQ0FDSEVfU0laRSkpOworCQkgIGZvbGRlZF9yZWxfbmFt ZSA9IE0oX1NDX0xFVkVMMl9DQUNIRV9TSVpFKTsKKwkJfQorCSAgICB9CisKKwkgIHN0cnVjdCBp bnRlbF8wMl9jYWNoZV9pbmZvICpmb3VuZDsKKwkgIHN0cnVjdCBpbnRlbF8wMl9jYWNoZV9pbmZv IHNlYXJjaDsKKworCSAgc2VhcmNoLmlkeCA9IGJ5dGU7CisJICBmb3VuZCA9IGJzZWFyY2ggKCZz ZWFyY2gsIGludGVsXzAyX2tub3duLCBuaW50ZWxfMDJfa25vd24sCisJCQkgICBzaXplb2YgKGlu dGVsXzAyX2tub3duWzBdKSwgaW50ZWxfMDJfa25vd25fY29tcGFyZSk7CisJICBpZiAoZm91bmQg IT0gTlVMTCkKKwkgICAgeworCSAgICAgIGlmIChmb3VuZC0+cmVsX25hbWUgPT0gZm9sZGVkX3Jl bF9uYW1lKQorCQl7CisJCSAgdW5zaWduZWQgaW50IG9mZnNldCA9IE0obmFtZSkgLSBmb2xkZWRf cmVsX25hbWU7CisKKwkJICBpZiAob2Zmc2V0ID09IDApCisJCSAgICAvKiBDYWNoZSBzaXplLiAg Ki8KKwkJICAgIHJldHVybiBmb3VuZC0+c2l6ZTsKKwkJICBpZiAob2Zmc2V0ID09IDEpCisJCSAg ICByZXR1cm4gZm91bmQtPmFzc29jOworCisJCSAgYXNzZXJ0IChvZmZzZXQgPT0gMik7CisJCSAg cmV0dXJuIGZvdW5kLT5saW5lc2l6ZTsKKwkJfQorCisJICAgICAgaWYgKGZvdW5kLT5yZWxfbmFt ZSA9PSBNKF9TQ19MRVZFTDJfQ0FDSEVfU0laRSkpCisJCSpoYXNfbGV2ZWxfMiA9IHRydWU7CisJ ICAgIH0KKwl9CisKKyAgICAgIC8qIE5leHQgYnl0ZSBmb3IgdGhlIG5leHQgcm91bmQuICAqLwor ICAgICAgdmFsdWUgPj49IDg7CisgICAgfQorCisgIC8qIE5vdGhpbmcgZm91bmQuICAqLworICBy ZXR1cm4gMDsKK30KKworCitzdGF0aWMgbG9uZyBpbnQgX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5l KSkKK2hhbmRsZV9pbnRlbCAoaW50IG5hbWUsIGNvbnN0IHN0cnVjdCBjcHVfZmVhdHVyZXMgKmNw dV9mZWF0dXJlcykKK3sKKyAgdW5zaWduZWQgaW50IG1heGlkeCA9IGNwdV9mZWF0dXJlcy0+YmFz aWMubWF4X2NwdWlkOworCisgIC8qIFJldHVybiAtMSBmb3Igb2xkZXIgQ1BVcy4gICovCisgIGlm IChtYXhpZHggPCAyKQorICAgIHJldHVybiAtMTsKKworICAvKiBPSywgd2UgY2FuIHVzZSB0aGUg Q1BVSUQgaW5zdHJ1Y3Rpb24gdG8gZ2V0IGFsbCBpbmZvIGFib3V0IHRoZQorICAgICBjYWNoZXMu ICAqLworICB1bnNpZ25lZCBpbnQgY250ID0gMDsKKyAgdW5zaWduZWQgaW50IG1heCA9IDE7Cisg IGxvbmcgaW50IHJlc3VsdCA9IDA7CisgIGJvb2wgbm9fbGV2ZWxfMl9vcl8zID0gZmFsc2U7Cisg IGJvb2wgaGFzX2xldmVsXzIgPSBmYWxzZTsKKworICB3aGlsZSAoY250KysgPCBtYXgpCisgICAg eworICAgICAgdW5zaWduZWQgaW50IGVheDsKKyAgICAgIHVuc2lnbmVkIGludCBlYng7CisgICAg ICB1bnNpZ25lZCBpbnQgZWN4OworICAgICAgdW5zaWduZWQgaW50IGVkeDsKKyAgICAgIF9fY3B1 aWQgKDIsIGVheCwgZWJ4LCBlY3gsIGVkeCk7CisKKyAgICAgIC8qIFRoZSBsb3cgYnl0ZSBvZiBF QVggaW4gdGhlIGZpcnN0IHJvdW5kIGNvbnRhaW4gdGhlIG51bWJlciBvZgorCSByb3VuZHMgd2Ug aGF2ZSB0byBtYWtlLiAgQXQgbGVhc3Qgb25lLCB0aGUgb25lIHdlIGFyZSBhbHJlYWR5CisJIGRv aW5nLiAgKi8KKyAgICAgIGlmIChjbnQgPT0gMSkKKwl7CisJICBtYXggPSBlYXggJiAweGZmOwor CSAgZWF4ICY9IDB4ZmZmZmZmMDA7CisJfQorCisgICAgICAvKiBQcm9jZXNzIHRoZSBpbmRpdmlk dWFsIHJlZ2lzdGVycycgdmFsdWUuICAqLworICAgICAgcmVzdWx0ID0gaW50ZWxfY2hlY2tfd29y ZCAobmFtZSwgZWF4LCAmaGFzX2xldmVsXzIsCisJCQkJICZub19sZXZlbF8yX29yXzMsIGNwdV9m ZWF0dXJlcyk7CisgICAgICBpZiAocmVzdWx0ICE9IDApCisJcmV0dXJuIHJlc3VsdDsKKworICAg ICAgcmVzdWx0ID0gaW50ZWxfY2hlY2tfd29yZCAobmFtZSwgZWJ4LCAmaGFzX2xldmVsXzIsCisJ CQkJICZub19sZXZlbF8yX29yXzMsIGNwdV9mZWF0dXJlcyk7CisgICAgICBpZiAocmVzdWx0ICE9 IDApCisJcmV0dXJuIHJlc3VsdDsKKworICAgICAgcmVzdWx0ID0gaW50ZWxfY2hlY2tfd29yZCAo bmFtZSwgZWN4LCAmaGFzX2xldmVsXzIsCisJCQkJICZub19sZXZlbF8yX29yXzMsIGNwdV9mZWF0 dXJlcyk7CisgICAgICBpZiAocmVzdWx0ICE9IDApCisJcmV0dXJuIHJlc3VsdDsKKworICAgICAg cmVzdWx0ID0gaW50ZWxfY2hlY2tfd29yZCAobmFtZSwgZWR4LCAmaGFzX2xldmVsXzIsCisJCQkJ ICZub19sZXZlbF8yX29yXzMsIGNwdV9mZWF0dXJlcyk7CisgICAgICBpZiAocmVzdWx0ICE9IDAp CisJcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgaWYgKG5hbWUgPj0gX1NDX0xFVkVMMl9DQUNI RV9TSVpFICYmIG5hbWUgPD0gX1NDX0xFVkVMM19DQUNIRV9MSU5FU0laRQorICAgICAgJiYgbm9f bGV2ZWxfMl9vcl8zKQorICAgIHJldHVybiAtMTsKKworICByZXR1cm4gMDsKK30KKworCitzdGF0 aWMgbG9uZyBpbnQgX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkKK2hhbmRsZV9hbWQgKGludCBu YW1lKQoreworICB1bnNpZ25lZCBpbnQgZWF4OworICB1bnNpZ25lZCBpbnQgZWJ4OworICB1bnNp Z25lZCBpbnQgZWN4OworICB1bnNpZ25lZCBpbnQgZWR4OworICBfX2NwdWlkICgweDgwMDAwMDAw LCBlYXgsIGVieCwgZWN4LCBlZHgpOworCisgIC8qIE5vIGxldmVsIDQgY2FjaGUgKHlldCkuICAq LworICBpZiAobmFtZSA+IF9TQ19MRVZFTDNfQ0FDSEVfTElORVNJWkUpCisgICAgcmV0dXJuIDA7 CisKKyAgdW5zaWduZWQgaW50IGZuID0gMHg4MDAwMDAwNSArIChuYW1lID49IF9TQ19MRVZFTDJf Q0FDSEVfU0laRSk7CisgIGlmIChlYXggPCBmbikKKyAgICByZXR1cm4gMDsKKworICBfX2NwdWlk IChmbiwgZWF4LCBlYngsIGVjeCwgZWR4KTsKKworICBpZiAobmFtZSA8IF9TQ19MRVZFTDFfRENB Q0hFX1NJWkUpCisgICAgeworICAgICAgbmFtZSArPSBfU0NfTEVWRUwxX0RDQUNIRV9TSVpFIC0g X1NDX0xFVkVMMV9JQ0FDSEVfU0laRTsKKyAgICAgIGVjeCA9IGVkeDsKKyAgICB9CisKKyAgc3dp dGNoIChuYW1lKQorICAgIHsKKyAgICBjYXNlIF9TQ19MRVZFTDFfRENBQ0hFX1NJWkU6CisgICAg ICByZXR1cm4gKGVjeCA+PiAxNCkgJiAweDNmYzAwOworCisgICAgY2FzZSBfU0NfTEVWRUwxX0RD QUNIRV9BU1NPQzoKKyAgICAgIGVjeCA+Pj0gMTY7CisgICAgICBpZiAoKGVjeCAmIDB4ZmYpID09 IDB4ZmYpCisJLyogRnVsbHkgYXNzb2NpYXRpdmUuICAqLworCXJldHVybiAoZWN4IDw8IDIpICYg MHgzZmMwMDsKKyAgICAgIHJldHVybiBlY3ggJiAweGZmOworCisgICAgY2FzZSBfU0NfTEVWRUwx X0RDQUNIRV9MSU5FU0laRToKKyAgICAgIHJldHVybiBlY3ggJiAweGZmOworCisgICAgY2FzZSBf U0NfTEVWRUwyX0NBQ0hFX1NJWkU6CisgICAgICByZXR1cm4gKGVjeCAmIDB4ZjAwMCkgPT0gMCA/ IDAgOiAoZWN4ID4+IDYpICYgMHgzZmZmYzAwOworCisgICAgY2FzZSBfU0NfTEVWRUwyX0NBQ0hF X0FTU09DOgorICAgICAgc3dpdGNoICgoZWN4ID4+IDEyKSAmIDB4ZikKKwl7CisJY2FzZSAwOgor CWNhc2UgMToKKwljYXNlIDI6CisJY2FzZSA0OgorCSAgcmV0dXJuIChlY3ggPj4gMTIpICYgMHhm OworCWNhc2UgNjoKKwkgIHJldHVybiA4OworCWNhc2UgODoKKwkgIHJldHVybiAxNjsKKwljYXNl IDEwOgorCSAgcmV0dXJuIDMyOworCWNhc2UgMTE6CisJICByZXR1cm4gNDg7CisJY2FzZSAxMjoK KwkgIHJldHVybiA2NDsKKwljYXNlIDEzOgorCSAgcmV0dXJuIDk2OworCWNhc2UgMTQ6CisJICBy ZXR1cm4gMTI4OworCWNhc2UgMTU6CisJICByZXR1cm4gKChlY3ggPj4gNikgJiAweDNmZmZjMDAp IC8gKGVjeCAmIDB4ZmYpOworCWRlZmF1bHQ6CisJICByZXR1cm4gMDsKKwl9CisgICAgICAvKiBO T1RSRUFDSEVEICovCisKKyAgICBjYXNlIF9TQ19MRVZFTDJfQ0FDSEVfTElORVNJWkU6CisgICAg ICByZXR1cm4gKGVjeCAmIDB4ZjAwMCkgPT0gMCA/IDAgOiBlY3ggJiAweGZmOworCisgICAgY2Fz ZSBfU0NfTEVWRUwzX0NBQ0hFX1NJWkU6CisgICAgICByZXR1cm4gKGVkeCAmIDB4ZjAwMCkgPT0g MCA/IDAgOiAoZWR4ICYgMHgzZmZjMDAwMCkgPDwgMTsKKworICAgIGNhc2UgX1NDX0xFVkVMM19D QUNIRV9BU1NPQzoKKyAgICAgIHN3aXRjaCAoKGVkeCA+PiAxMikgJiAweGYpCisJeworCWNhc2Ug MDoKKwljYXNlIDE6CisJY2FzZSAyOgorCWNhc2UgNDoKKwkgIHJldHVybiAoZWR4ID4+IDEyKSAm IDB4ZjsKKwljYXNlIDY6CisJICByZXR1cm4gODsKKwljYXNlIDg6CisJICByZXR1cm4gMTY7CisJ Y2FzZSAxMDoKKwkgIHJldHVybiAzMjsKKwljYXNlIDExOgorCSAgcmV0dXJuIDQ4OworCWNhc2Ug MTI6CisJICByZXR1cm4gNjQ7CisJY2FzZSAxMzoKKwkgIHJldHVybiA5NjsKKwljYXNlIDE0Ogor CSAgcmV0dXJuIDEyODsKKwljYXNlIDE1OgorCSAgcmV0dXJuICgoZWR4ICYgMHgzZmZjMDAwMCkg PDwgMSkgLyAoZWR4ICYgMHhmZik7CisJZGVmYXVsdDoKKwkgIHJldHVybiAwOworCX0KKyAgICAg IC8qIE5PVFJFQUNIRUQgKi8KKworICAgIGNhc2UgX1NDX0xFVkVMM19DQUNIRV9MSU5FU0laRToK KyAgICAgIHJldHVybiAoZWR4ICYgMHhmMDAwKSA9PSAwID8gMCA6IGVkeCAmIDB4ZmY7CisKKyAg ICBkZWZhdWx0OgorICAgICAgYXNzZXJ0ICghICJjYW5ub3QgaGFwcGVuIik7CisgICAgfQorICBy ZXR1cm4gLTE7Cit9CisKKworc3RhdGljIGxvbmcgaW50IF9fYXR0cmlidXRlX18gKChub2lubGlu ZSkpCitoYW5kbGVfemhhb3hpbiAoaW50IG5hbWUpCit7CisgIHVuc2lnbmVkIGludCBlYXg7Cisg IHVuc2lnbmVkIGludCBlYng7CisgIHVuc2lnbmVkIGludCBlY3g7CisgIHVuc2lnbmVkIGludCBl ZHg7CisKKyAgaW50IGZvbGRlZF9yZWxfbmFtZSA9IChNKG5hbWUpIC8gMykgKiAzOworCisgIHVu c2lnbmVkIGludCByb3VuZCA9IDA7CisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIF9fY3B1aWRf Y291bnQgKDQsIHJvdW5kLCBlYXgsIGVieCwgZWN4LCBlZHgpOworCisgICAgICBlbnVtIHsgbnVs bCA9IDAsIGRhdGEgPSAxLCBpbnN0ID0gMiwgdW5pID0gMyB9IHR5cGUgPSBlYXggJiAweDFmOwor ICAgICAgaWYgKHR5cGUgPT0gbnVsbCkKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIHVuc2lnbmVk IGludCBsZXZlbCA9IChlYXggPj4gNSkgJiAweDc7CisKKyAgICAgIGlmICgobGV2ZWwgPT0gMSAm JiB0eXBlID09IGRhdGEKKyAgICAgICAgJiYgZm9sZGVkX3JlbF9uYW1lID09IE0oX1NDX0xFVkVM MV9EQ0FDSEVfU0laRSkpCisgICAgICAgIHx8IChsZXZlbCA9PSAxICYmIHR5cGUgPT0gaW5zdAor ICAgICAgICAgICAgJiYgZm9sZGVkX3JlbF9uYW1lID09IE0oX1NDX0xFVkVMMV9JQ0FDSEVfU0la RSkpCisgICAgICAgIHx8IChsZXZlbCA9PSAyICYmIGZvbGRlZF9yZWxfbmFtZSA9PSBNKF9TQ19M RVZFTDJfQ0FDSEVfU0laRSkpCisgICAgICAgIHx8IChsZXZlbCA9PSAzICYmIGZvbGRlZF9yZWxf bmFtZSA9PSBNKF9TQ19MRVZFTDNfQ0FDSEVfU0laRSkpKQorICAgICAgICB7CisgICAgICAgICAg dW5zaWduZWQgaW50IG9mZnNldCA9IE0obmFtZSkgLSBmb2xkZWRfcmVsX25hbWU7CisKKyAgICAg ICAgICBpZiAob2Zmc2V0ID09IDApCisgICAgICAgICAgICAvKiBDYWNoZSBzaXplLiAgKi8KKyAg ICAgICAgICAgIHJldHVybiAoKChlYnggPj4gMjIpICsgMSkKKyAgICAgICAgICAgICAgICAqICgo KGVieCA+PiAxMikgJiAweDNmZikgKyAxKQorICAgICAgICAgICAgICAgICogKChlYnggJiAweGZm ZikgKyAxKQorICAgICAgICAgICAgICAgICogKGVjeCArIDEpKTsKKyAgICAgICAgICBpZiAob2Zm c2V0ID09IDEpCisgICAgICAgICAgICByZXR1cm4gKGVieCA+PiAyMikgKyAxOworCisgICAgICAg ICAgYXNzZXJ0IChvZmZzZXQgPT0gMik7CisgICAgICAgICAgcmV0dXJuIChlYnggJiAweGZmZikg KyAxOworICAgICAgICB9CisKKyAgICAgICsrcm91bmQ7CisgICAgfQorCisgIC8qIE5vdGhpbmcg Zm91bmQuICAqLworICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZAorZ2V0X2NvbW1vbl9j YWNoZV9pbmZvIChsb25nIGludCAqc2hhcmVkX3B0ciwgdW5zaWduZWQgaW50ICp0aHJlYWRzX3B0 ciwKKyAgICAgICAgICAgICAgICBsb25nIGludCBjb3JlKQoreworICB1bnNpZ25lZCBpbnQgZWF4 OworICB1bnNpZ25lZCBpbnQgZWJ4OworICB1bnNpZ25lZCBpbnQgZWN4OworICB1bnNpZ25lZCBp bnQgZWR4OworCisgIC8qIE51bWJlciBvZiBsb2dpY2FsIHByb2Nlc3NvcnMgc2hhcmluZyBMMiBj YWNoZS4gICovCisgIGludCB0aHJlYWRzX2wyOworCisgIC8qIE51bWJlciBvZiBsb2dpY2FsIHBy b2Nlc3NvcnMgc2hhcmluZyBMMyBjYWNoZS4gICovCisgIGludCB0aHJlYWRzX2wzOworCisgIGNv bnN0IHN0cnVjdCBjcHVfZmVhdHVyZXMgKmNwdV9mZWF0dXJlcyA9IF9fZ2V0X2NwdV9mZWF0dXJl cyAoKTsKKyAgaW50IG1heF9jcHVpZCA9IGNwdV9mZWF0dXJlcy0+YmFzaWMubWF4X2NwdWlkOwor ICB1bnNpZ25lZCBpbnQgZmFtaWx5ID0gY3B1X2ZlYXR1cmVzLT5iYXNpYy5mYW1pbHk7CisgIHVu c2lnbmVkIGludCBtb2RlbCA9IGNwdV9mZWF0dXJlcy0+YmFzaWMubW9kZWw7CisgIGxvbmcgaW50 IHNoYXJlZCA9ICpzaGFyZWRfcHRyOworICB1bnNpZ25lZCBpbnQgdGhyZWFkcyA9ICp0aHJlYWRz X3B0cjsKKyAgYm9vbCBpbmNsdXNpdmVfY2FjaGUgPSB0cnVlOworICBib29sIHN1cHBvcnRfY291 bnRfbWFzayA9IHRydWU7CisKKyAgLyogVHJ5IEwzIGZpcnN0LiAgKi8KKyAgdW5zaWduZWQgaW50 IGxldmVsID0gMzsKKworICBpZiAoY3B1X2ZlYXR1cmVzLT5iYXNpYy5raW5kID09IGFyY2hfa2lu ZF96aGFveGluICYmIGZhbWlseSA9PSA2KQorICAgIHN1cHBvcnRfY291bnRfbWFzayA9IGZhbHNl OworCisgIGlmIChzaGFyZWQgPD0gMCkKKyAgICB7CisgICAgICAvKiBUcnkgTDIgb3RoZXJ3aXNl LiAgKi8KKyAgICAgIGxldmVsICA9IDI7CisgICAgICBzaGFyZWQgPSBjb3JlOworICAgICAgdGhy ZWFkc19sMiA9IDA7CisgICAgICB0aHJlYWRzX2wzID0gLTE7CisgICAgfQorICBlbHNlCisgICAg eworICAgICAgdGhyZWFkc19sMiA9IDA7CisgICAgICB0aHJlYWRzX2wzID0gMDsKKyAgICB9CisK KyAgLyogQSB2YWx1ZSBvZiAwIGZvciB0aGUgSFRUIGJpdCBpbmRpY2F0ZXMgdGhlcmUgaXMgb25s eSBhIHNpbmdsZQorICAgICBsb2dpY2FsIHByb2Nlc3Nvci4gICovCisgIGlmIChIQVNfQ1BVX0ZF QVRVUkUgKEhUVCkpCisgICAgeworICAgICAgLyogRmlndXJlIG91dCB0aGUgbnVtYmVyIG9mIGxv Z2ljYWwgdGhyZWFkcyB0aGF0IHNoYXJlIHRoZQorICAgICAgICAgaGlnaGVzdCBjYWNoZSBsZXZl bC4gICovCisgICAgICBpZiAobWF4X2NwdWlkID49IDQpCisgICAgICAgIHsKKyAgICAgICAgICBp bnQgaSA9IDA7CisKKyAgICAgICAgICAvKiBRdWVyeSB1bnRpbCBjYWNoZSBsZXZlbCAyIGFuZCAz IGFyZSBlbnVtZXJhdGVkLiAgKi8KKyAgICAgICAgICBpbnQgY2hlY2sgPSAweDEgfCAodGhyZWFk c19sMyA9PSAwKSA8PCAxOworICAgICAgICAgIGRvCisgICAgICAgICAgICB7CisgICAgICAgICAg ICAgIF9fY3B1aWRfY291bnQgKDQsIGkrKywgZWF4LCBlYngsIGVjeCwgZWR4KTsKKworICAgICAg ICAgICAgICAvKiBUaGVyZSBzZWVtcyB0byBiZSBhIGJ1ZyBpbiBhdCBsZWFzdCBzb21lIFBlbnRp dW0gRHMKKyAgICAgICAgICAgICAgICAgd2hpY2ggc29tZXRpbWVzIGZhaWwgdG8gaXRlcmF0ZSBh bGwgY2FjaGUgcGFyYW1ldGVycy4KKyAgICAgICAgICAgICAgICAgRG8gbm90IGxvb3AgaW5kZWZp bml0ZWx5IGhlcmUsIHN0b3AgaW4gdGhpcyBjYXNlIGFuZAorICAgICAgICAgICAgICAgICBhc3N1 bWUgdGhlcmUgaXMgbm8gc3VjaCBpbmZvcm1hdGlvbi4gICovCisgICAgICAgICAgICAgIGlmIChj cHVfZmVhdHVyZXMtPmJhc2ljLmtpbmQgPT0gYXJjaF9raW5kX2ludGVsCisgICAgICAgICAgICAg ICAgICAmJiAoZWF4ICYgMHgxZikgPT0gMCApCisgICAgICAgICAgICAgICAgZ290byBpbnRlbF9i dWdfbm9fY2FjaGVfaW5mbzsKKworICAgICAgICAgICAgICBzd2l0Y2ggKChlYXggPj4gNSkgJiAw eDcpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAg ICAgICAgICAgICAgIGlmICgoY2hlY2sgJiAweDEpKQorICAgICAgICAgICAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdldCBtYXhpbXVtIG51bWJlciBvZiBsb2dpY2Fs IHByb2Nlc3NvcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJpbmcgTDIgY2FjaGUu ICAqLworICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkc19sMiA9IChlYXggPj4gMTQpICYg MHgzZmY7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGVjayAmPSB+MHgxOworICAgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg ICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgICAgIGlmICgoY2hlY2sgJiAoMHgxIDw8IDEp KSkKKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBH ZXQgbWF4aW11bSBudW1iZXIgb2YgbG9naWNhbCBwcm9jZXNzb3JzCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaGFyaW5nIEwzIGNhY2hlLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAg IHRocmVhZHNfbDMgPSAoZWF4ID4+IDE0KSAmIDB4M2ZmOworCisgICAgICAgICAgICAgICAgICAg ICAgICAvKiBDaGVjayBpZiBMMiBhbmQgTDMgY2FjaGVzIGFyZSBpbmNsdXNpdmUuICAqLworICAg ICAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlX2NhY2hlID0gKGVkeCAmIDB4MikgIT0gMDsK KyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrICY9IH4oMHgxIDw8IDEpOworICAgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIHdoaWxlIChjaGVjayk7CisKKyAgICAgICAg ICAvKiBJZiBtYXhfY3B1aWQgPj0gMTEsIFRIUkVBRFNfTDIvVEhSRUFEU19MMyBhcmUgdGhlIG1h eGltdW0KKyAgICAgICAgICAgICBudW1iZXJzIG9mIGFkZHJlc3NhYmxlIElEcyBmb3IgbG9naWNh bCBwcm9jZXNzb3JzIHNoYXJpbmcKKyAgICAgICAgICAgICB0aGUgY2FjaGUsIGluc3RlYWQgb2Yg dGhlIG1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMKKyAgICAgICAgICAgICBzaGFyaW5nIHRoZSBj YWNoZS4gICovCisgICAgICAgICAgaWYgKG1heF9jcHVpZCA+PSAxMSAmJiBzdXBwb3J0X2NvdW50 X21hc2spCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qIEZpbmQgdGhlIG51bWJlciBv ZiBsb2dpY2FsIHByb2Nlc3NvcnMgc2hpcHBlZCBpbgorICAgICAgICAgICAgICAgICBvbmUgY29y ZSBhbmQgYXBwbHkgY291bnQgbWFzay4gICovCisgICAgICAgICAgICAgIGkgPSAwOworCisgICAg ICAgICAgICAgIC8qIENvdW50IFNNVCBvbmx5IGlmIHRoZXJlIGlzIEwzIGNhY2hlLiAgQWx3YXlz IGNvdW50CisgICAgICAgICAgICAgICAgIGNvcmUgaWYgdGhlcmUgaXMgbm8gTDMgY2FjaGUuICAq LworICAgICAgICAgICAgICBpbnQgY291bnQgPSAoKHRocmVhZHNfbDIgPiAwICYmIGxldmVsID09 IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgodGhyZWFkc19sMyA+IDAKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAodGhyZWFkc19sMiA+IDAgJiYgbGV2ZWwgPT0g MikpIDw8IDEpKTsKKworICAgICAgICAgICAgICB3aGlsZSAoY291bnQpCisgICAgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgICAgX19jcHVpZF9jb3VudCAoMTEsIGkrKywgZWF4LCBlYngs IGVjeCwgZWR4KTsKKworICAgICAgICAgICAgICAgICAgaW50IHNoaXBwZWQgPSBlYnggJiAweGZm OworICAgICAgICAgICAgICAgICAgaW50IHR5cGUgPSBlY3ggJiAweGZmMDA7CisgICAgICAgICAg ICAgICAgICBpZiAoc2hpcHBlZCA9PSAwIHx8IHR5cGUgPT0gMCkKKyAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IDB4MTAwKQorICAg ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgLyogQ291bnQgU01ULiAg Ki8KKyAgICAgICAgICAgICAgICAgICAgICBpZiAoKGNvdW50ICYgMHgxKSkKKyAgICAgICAgICAg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50X21hc2s7 CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29tcHV0ZSBjb3VudCBtYXNrLiAgKi8K KyAgICAgICAgICAgICAgICAgICAgICAgICAgYXNtICgiYnNyICUxLCAlMCIKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA6ICI9ciIgKGNvdW50X21hc2spIDogImciICh0aHJlYWRzX2wy KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50X21hc2sgPSB+KC0xIDw8IChjb3Vu dF9tYXNrICsgMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWRzX2wyID0gKHNo aXBwZWQgLSAxKSAmIGNvdW50X21hc2s7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50 ICY9IH4weDE7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gMHgyMDApCisgICAgICAgICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAvKiBDb3VudCBjb3JlLiAgKi8KKyAg ICAgICAgICAgICAgICAgICAgICBpZiAoKGNvdW50ICYgKDB4MSA8PCAxKSkpCisgICAgICAgICAg ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudF9tYXNr OworICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGhyZWFkc19jb3JlCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgPSAobGV2ZWwgPT0gMiA/IHRocmVhZHNfbDIgOiB0aHJlYWRzX2wz KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21wdXRlIGNvdW50IG1hc2suICAq LworICAgICAgICAgICAgICAgICAgICAgICAgICBhc20gKCJic3IgJTEsICUwIgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDogIj1yIiAoY291bnRfbWFzaykgOiAiZyIgKHRocmVhZHNf Y29yZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudF9tYXNrID0gfigtMSA8PCAo Y291bnRfbWFzayArIDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkc19jb3Jl ID0gKHNoaXBwZWQgLSAxKSAmIGNvdW50X21hc2s7CisgICAgICAgICAgICAgICAgICAgICAgICAg IGlmIChsZXZlbCA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZHNfbDIg PSB0aHJlYWRzX2NvcmU7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0aHJlYWRzX2wzID0gdGhyZWFkc19jb3JlOworICAgICAgICAg ICAgICAgICAgICAgICAgICBjb3VudCAmPSB+KDB4MSA8PCAxKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIH0KKyAgICAgICAgICBpZiAodGhyZWFkc19sMiA+IDApCisgICAgICAgICAgICB0aHJl YWRzX2wyICs9IDE7CisgICAgICAgICAgaWYgKHRocmVhZHNfbDMgPiAwKQorICAgICAgICAgICAg dGhyZWFkc19sMyArPSAxOworICAgICAgICAgIGlmIChsZXZlbCA9PSAyKQorICAgICAgICAgICAg eworICAgICAgICAgICAgICBpZiAodGhyZWFkc19sMikKKyAgICAgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgICB0aHJlYWRzID0gdGhyZWFkc19sMjsKKyAgICAgICAgICAgICAgICAgIGlm IChjcHVfZmVhdHVyZXMtPmJhc2ljLmtpbmQgPT0gYXJjaF9raW5kX2ludGVsCisgICAgICAgICAg ICAgICAgICAgICAgJiYgdGhyZWFkcyA+IDIKKyAgICAgICAgICAgICAgICAgICAgICAmJiBmYW1p bHkgPT0gNikKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChtb2RlbCkKKyAgICAgICAgICAg ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4Mzc6CisgICAgICAg ICAgICAgICAgICAgICAgICBjYXNlIDB4NGE6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNl IDB4NGQ6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4NWE6CisgICAgICAgICAgICAg ICAgICAgICAgICBjYXNlIDB4NWQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNpbHZl cm1vbnQgaGFzIEwyIGNhY2hlIHNoYXJlZCBieSAyIGNvcmVzLiAgKi8KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgdGhyZWFkcyA9IDI7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmICh0aHJlYWRzX2wzKQorICAgICAgICAg ICAgdGhyZWFkcyA9IHRocmVhZHNfbDM7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAg eworaW50ZWxfYnVnX25vX2NhY2hlX2luZm86CisgICAgICAgICAgLyogQXNzdW1lIHRoYXQgYWxs IGxvZ2ljYWwgdGhyZWFkcyBzaGFyZSB0aGUgaGlnaGVzdCBjYWNoZQorICAgICAgICAgICAgIGxl dmVsLiAgKi8KKyAgICAgICAgICB0aHJlYWRzCisgICAgICAgICAgICA9ICgoY3B1X2ZlYXR1cmVz LT5jcHVpZFtDT01NT05fQ1BVSURfSU5ERVhfMV0uZWJ4CisgICAgICAgICAgICAgICAgPj4gMTYp ICYgMHhmZik7CisgICAgICAgIH0KKworICAgICAgICAvKiBDYXAgdXNhZ2Ugb2YgaGlnaGVzdCBj YWNoZSBsZXZlbCB0byB0aGUgbnVtYmVyIG9mIHN1cHBvcnRlZAorICAgICAgICAgICB0aHJlYWRz LiAgKi8KKyAgICAgICAgaWYgKHNoYXJlZCA+IDAgJiYgdGhyZWFkcyA+IDApCisgICAgICAgICAg c2hhcmVkIC89IHRocmVhZHM7CisgICAgfQorCisgIC8qIEFjY291bnQgZm9yIG5vbi1pbmNsdXNp dmUgTDIgYW5kIEwzIGNhY2hlcy4gICovCisgIGlmICghaW5jbHVzaXZlX2NhY2hlKQorICAgIHsK KyAgICAgIGlmICh0aHJlYWRzX2wyID4gMCkKKyAgICAgICAgY29yZSAvPSB0aHJlYWRzX2wyOwor ICAgICAgc2hhcmVkICs9IGNvcmU7CisgICAgfQorCisgICpzaGFyZWRfcHRyID0gc2hhcmVkOwor ICAqdGhyZWFkc19wdHIgPSB0aHJlYWRzOworfQorCit2b2lkCitfX2luaXRfY2FjaGVpbmZvICh2 b2lkKQoreworICAvKiBGaW5kIG91dCB3aGF0IGJyYW5kIG9mIHByb2Nlc3Nvci4gICovCisgIHVu c2lnbmVkIGludCBlYng7CisgIHVuc2lnbmVkIGludCBlY3g7CisgIHVuc2lnbmVkIGludCBlZHg7 CisgIGludCBtYXhfY3B1aWRfZXg7CisgIGxvbmcgaW50IGRhdGEgPSAtMTsKKyAgbG9uZyBpbnQg c2hhcmVkID0gLTE7CisgIGxvbmcgaW50IGNvcmU7CisgIHVuc2lnbmVkIGludCB0aHJlYWRzID0g MDsKKyAgdW5zaWduZWQgbG9uZyBpbnQgbGV2ZWwxX2ljYWNoZV9zaXplID0gLTE7CisgIHVuc2ln bmVkIGxvbmcgaW50IGxldmVsMV9kY2FjaGVfc2l6ZSA9IC0xOworICB1bnNpZ25lZCBsb25nIGlu dCBsZXZlbDFfZGNhY2hlX2Fzc29jID0gLTE7CisgIHVuc2lnbmVkIGxvbmcgaW50IGxldmVsMV9k Y2FjaGVfbGluZXNpemUgPSAtMTsKKyAgdW5zaWduZWQgbG9uZyBpbnQgbGV2ZWwyX2NhY2hlX3Np emUgPSAtMTsKKyAgdW5zaWduZWQgbG9uZyBpbnQgbGV2ZWwyX2NhY2hlX2Fzc29jID0gLTE7Cisg IHVuc2lnbmVkIGxvbmcgaW50IGxldmVsMl9jYWNoZV9saW5lc2l6ZSA9IC0xOworICB1bnNpZ25l ZCBsb25nIGludCBsZXZlbDNfY2FjaGVfc2l6ZSA9IC0xOworICB1bnNpZ25lZCBsb25nIGludCBs ZXZlbDNfY2FjaGVfYXNzb2MgPSAtMTsKKyAgdW5zaWduZWQgbG9uZyBpbnQgbGV2ZWwzX2NhY2hl X2xpbmVzaXplID0gLTE7CisgIHVuc2lnbmVkIGxvbmcgaW50IGxldmVsNF9jYWNoZV9zaXplID0g LTE7CisgIHN0cnVjdCBjcHVfZmVhdHVyZXMgKmNwdV9mZWF0dXJlcyA9IF9fZ2V0X2NwdV9mZWF0 dXJlcyAoKTsKKworICBpZiAoY3B1X2ZlYXR1cmVzLT5iYXNpYy5raW5kID09IGFyY2hfa2luZF9p bnRlbCkKKyAgICB7CisgICAgICBkYXRhID0gaGFuZGxlX2ludGVsIChfU0NfTEVWRUwxX0RDQUNI RV9TSVpFLCBjcHVfZmVhdHVyZXMpOworICAgICAgY29yZSA9IGhhbmRsZV9pbnRlbCAoX1NDX0xF VkVMMl9DQUNIRV9TSVpFLCBjcHVfZmVhdHVyZXMpOworICAgICAgc2hhcmVkID0gaGFuZGxlX2lu dGVsIChfU0NfTEVWRUwzX0NBQ0hFX1NJWkUsIGNwdV9mZWF0dXJlcyk7CisKKyAgICAgIGxldmVs MV9pY2FjaGVfc2l6ZQorCT0gaGFuZGxlX2ludGVsIChfU0NfTEVWRUwxX0lDQUNIRV9TSVpFLCBj cHVfZmVhdHVyZXMpOworICAgICAgbGV2ZWwxX2RjYWNoZV9zaXplID0gZGF0YTsKKyAgICAgIGxl dmVsMV9kY2FjaGVfYXNzb2MKKwk9IGhhbmRsZV9pbnRlbCAoX1NDX0xFVkVMMV9EQ0FDSEVfQVNT T0MsIGNwdV9mZWF0dXJlcyk7CisgICAgICBsZXZlbDFfZGNhY2hlX2xpbmVzaXplCisJPSBoYW5k bGVfaW50ZWwgKF9TQ19MRVZFTDFfRENBQ0hFX0xJTkVTSVpFLCBjcHVfZmVhdHVyZXMpOworICAg ICAgbGV2ZWwyX2NhY2hlX3NpemUgPSBjb3JlOworICAgICAgbGV2ZWwyX2NhY2hlX2Fzc29jCisJ PSBoYW5kbGVfaW50ZWwgKF9TQ19MRVZFTDJfQ0FDSEVfQVNTT0MsIGNwdV9mZWF0dXJlcyk7Cisg ICAgICBsZXZlbDJfY2FjaGVfbGluZXNpemUKKwk9IGhhbmRsZV9pbnRlbCAoX1NDX0xFVkVMMl9D QUNIRV9MSU5FU0laRSwgY3B1X2ZlYXR1cmVzKTsKKyAgICAgIGxldmVsM19jYWNoZV9zaXplID0g c2hhcmVkOworICAgICAgbGV2ZWwzX2NhY2hlX2Fzc29jCisJPSBoYW5kbGVfaW50ZWwgKF9TQ19M RVZFTDNfQ0FDSEVfQVNTT0MsIGNwdV9mZWF0dXJlcyk7CisgICAgICBsZXZlbDNfY2FjaGVfbGlu ZXNpemUKKwk9IGhhbmRsZV9pbnRlbCAoX1NDX0xFVkVMM19DQUNIRV9MSU5FU0laRSwgY3B1X2Zl YXR1cmVzKTsKKyAgICAgIGxldmVsNF9jYWNoZV9zaXplCisJPSBoYW5kbGVfaW50ZWwgKF9TQ19M RVZFTDRfQ0FDSEVfU0laRSwgY3B1X2ZlYXR1cmVzKTsKKworICAgICAgZ2V0X2NvbW1vbl9jYWNo ZV9pbmZvICgmc2hhcmVkLCAmdGhyZWFkcywgY29yZSk7CisgICAgfQorICBlbHNlIGlmIChjcHVf ZmVhdHVyZXMtPmJhc2ljLmtpbmQgPT0gYXJjaF9raW5kX3poYW94aW4pCisgICAgeworICAgICAg ZGF0YSA9IGhhbmRsZV96aGFveGluIChfU0NfTEVWRUwxX0RDQUNIRV9TSVpFKTsKKyAgICAgIGNv cmUgPSBoYW5kbGVfemhhb3hpbiAoX1NDX0xFVkVMMl9DQUNIRV9TSVpFKTsKKyAgICAgIHNoYXJl ZCA9IGhhbmRsZV96aGFveGluIChfU0NfTEVWRUwzX0NBQ0hFX1NJWkUpOworCisgICAgICBsZXZl bDFfaWNhY2hlX3NpemUgPSBoYW5kbGVfemhhb3hpbiAoX1NDX0xFVkVMMV9JQ0FDSEVfU0laRSk7 CisgICAgICBsZXZlbDFfZGNhY2hlX3NpemUgPSBkYXRhOworICAgICAgbGV2ZWwxX2RjYWNoZV9h c3NvYyA9IGhhbmRsZV96aGFveGluIChfU0NfTEVWRUwxX0RDQUNIRV9BU1NPQyk7CisgICAgICBs ZXZlbDFfZGNhY2hlX2xpbmVzaXplID0gaGFuZGxlX3poYW94aW4gKF9TQ19MRVZFTDFfRENBQ0hF X0xJTkVTSVpFKTsKKyAgICAgIGxldmVsMl9jYWNoZV9zaXplID0gY29yZTsKKyAgICAgIGxldmVs Ml9jYWNoZV9hc3NvYyA9IGhhbmRsZV96aGFveGluIChfU0NfTEVWRUwyX0NBQ0hFX0FTU09DKTsK KyAgICAgIGxldmVsMl9jYWNoZV9saW5lc2l6ZSA9IGhhbmRsZV96aGFveGluIChfU0NfTEVWRUwy X0NBQ0hFX0xJTkVTSVpFKTsKKyAgICAgIGxldmVsM19jYWNoZV9zaXplID0gc2hhcmVkOworICAg ICAgbGV2ZWwzX2NhY2hlX2Fzc29jID0gaGFuZGxlX3poYW94aW4gKF9TQ19MRVZFTDNfQ0FDSEVf QVNTT0MpOworICAgICAgbGV2ZWwzX2NhY2hlX2xpbmVzaXplID0gaGFuZGxlX3poYW94aW4gKF9T Q19MRVZFTDNfQ0FDSEVfTElORVNJWkUpOworCisgICAgICBnZXRfY29tbW9uX2NhY2hlX2luZm8g KCZzaGFyZWQsICZ0aHJlYWRzLCBjb3JlKTsKKyAgICB9CisgIGVsc2UgaWYgKGNwdV9mZWF0dXJl cy0+YmFzaWMua2luZCA9PSBhcmNoX2tpbmRfYW1kKQorICAgIHsKKyAgICAgIGRhdGEgID0gaGFu ZGxlX2FtZCAoX1NDX0xFVkVMMV9EQ0FDSEVfU0laRSk7CisgICAgICBjb3JlID0gaGFuZGxlX2Ft ZCAoX1NDX0xFVkVMMl9DQUNIRV9TSVpFKTsKKyAgICAgIHNoYXJlZCA9IGhhbmRsZV9hbWQgKF9T Q19MRVZFTDNfQ0FDSEVfU0laRSk7CisKKyAgICAgIGxldmVsMV9pY2FjaGVfc2l6ZSA9IGhhbmRs ZV9hbWQgKF9TQ19MRVZFTDFfSUNBQ0hFX1NJWkUpOworICAgICAgbGV2ZWwxX2RjYWNoZV9zaXpl ID0gZGF0YTsKKyAgICAgIGxldmVsMV9kY2FjaGVfYXNzb2MgPSBoYW5kbGVfYW1kIChfU0NfTEVW RUwxX0RDQUNIRV9BU1NPQyk7CisgICAgICBsZXZlbDFfZGNhY2hlX2xpbmVzaXplID0gaGFuZGxl X2FtZCAoX1NDX0xFVkVMMV9EQ0FDSEVfTElORVNJWkUpOworICAgICAgbGV2ZWwyX2NhY2hlX3Np emUgPSBjb3JlOworICAgICAgbGV2ZWwyX2NhY2hlX2Fzc29jID0gaGFuZGxlX2FtZCAoX1NDX0xF VkVMMl9DQUNIRV9BU1NPQyk7CisgICAgICBsZXZlbDJfY2FjaGVfbGluZXNpemUgPSBoYW5kbGVf YW1kIChfU0NfTEVWRUwyX0NBQ0hFX0xJTkVTSVpFKTsKKyAgICAgIGxldmVsM19jYWNoZV9zaXpl ID0gc2hhcmVkOworICAgICAgbGV2ZWwzX2NhY2hlX2Fzc29jID0gaGFuZGxlX2FtZCAoX1NDX0xF VkVMM19DQUNIRV9BU1NPQyk7CisgICAgICBsZXZlbDNfY2FjaGVfbGluZXNpemUgPSBoYW5kbGVf YW1kIChfU0NfTEVWRUwzX0NBQ0hFX0xJTkVTSVpFKTsKKworICAgICAgLyogR2V0IG1heGltdW0g ZXh0ZW5kZWQgZnVuY3Rpb24uICovCisgICAgICBfX2NwdWlkICgweDgwMDAwMDAwLCBtYXhfY3B1 aWRfZXgsIGVieCwgZWN4LCBlZHgpOworCisgICAgICBpZiAoc2hhcmVkIDw9IDApCisJLyogTm8g c2hhcmVkIEwzIGNhY2hlLiAgQWxsIHdlIGhhdmUgaXMgdGhlIEwyIGNhY2hlLiAgKi8KKwlzaGFy ZWQgPSBjb3JlOworICAgICAgZWxzZQorCXsKKwkgIC8qIEZpZ3VyZSBvdXQgdGhlIG51bWJlciBv ZiBsb2dpY2FsIHRocmVhZHMgdGhhdCBzaGFyZSBMMy4gICovCisJICBpZiAobWF4X2NwdWlkX2V4 ID49IDB4ODAwMDAwMDgpCisJICAgIHsKKwkgICAgICAvKiBHZXQgd2lkdGggb2YgQVBJQyBJRC4g ICovCisJICAgICAgX19jcHVpZCAoMHg4MDAwMDAwOCwgbWF4X2NwdWlkX2V4LCBlYngsIGVjeCwg ZWR4KTsKKwkgICAgICB0aHJlYWRzID0gMSA8PCAoKGVjeCA+PiAxMikgJiAweDBmKTsKKwkgICAg fQorCisJICBpZiAodGhyZWFkcyA9PSAwKQorCSAgICB7CisJICAgICAgLyogSWYgQVBJQyBJRCB3 aWR0aCBpcyBub3QgYXZhaWxhYmxlLCB1c2UgbG9naWNhbAorCQkgcHJvY2Vzc29yIGNvdW50LiAg Ki8KKwkgICAgICBfX2NwdWlkICgweDAwMDAwMDAxLCBtYXhfY3B1aWRfZXgsIGVieCwgZWN4LCBl ZHgpOworCisJICAgICAgaWYgKChlZHggJiAoMSA8PCAyOCkpICE9IDApCisJCXRocmVhZHMgPSAo ZWJ4ID4+IDE2KSAmIDB4ZmY7CisJICAgIH0KKworCSAgLyogQ2FwIHVzYWdlIG9mIGhpZ2hlc3Qg Y2FjaGUgbGV2ZWwgdG8gdGhlIG51bWJlciBvZgorCSAgICAgc3VwcG9ydGVkIHRocmVhZHMuICAq LworCSAgaWYgKHRocmVhZHMgPiAwKQorCSAgICBzaGFyZWQgLz0gdGhyZWFkczsKKworCSAgLyog QWNjb3VudCBmb3IgZXhjbHVzaXZlIEwyIGFuZCBMMyBjYWNoZXMuICAqLworCSAgc2hhcmVkICs9 IGNvcmU7CisJfQorCisjaWZuZGVmIF9feDg2XzY0X18KKyAgICAgIGlmIChtYXhfY3B1aWRfZXgg Pj0gMHg4MDAwMDAwMSkKKwl7CisJICB1bnNpZ25lZCBpbnQgZWF4OworCSAgX19jcHVpZCAoMHg4 MDAwMDAwMSwgZWF4LCBlYngsIGVjeCwgZWR4KTsKKwkgIC8qICBQUkVGRVRDSFcgICAgIHx8IDNE Tm93ISAgKi8KKwkgIGlmICgoZWN4ICYgMHgxMDApIHx8IChlZHggJiAweDgwMDAwMDAwKSkKKwkg ICAgY3B1X2ZlYXR1cmVzLT5wcmVmZXRjaHcgPSAtMTsKKwl9CisjZW5kaWYKKyAgICB9CisKKyAg Y3B1X2ZlYXR1cmVzLT5sZXZlbDFfaWNhY2hlX3NpemUgPSBsZXZlbDFfaWNhY2hlX3NpemU7Cisg IGNwdV9mZWF0dXJlcy0+bGV2ZWwxX2RjYWNoZV9zaXplID0gbGV2ZWwxX2RjYWNoZV9zaXplOwor ICBjcHVfZmVhdHVyZXMtPmxldmVsMV9kY2FjaGVfYXNzb2MgPSBsZXZlbDFfZGNhY2hlX2Fzc29j OworICBjcHVfZmVhdHVyZXMtPmxldmVsMV9kY2FjaGVfbGluZXNpemUgPSBsZXZlbDFfZGNhY2hl X2xpbmVzaXplOworICBjcHVfZmVhdHVyZXMtPmxldmVsMl9jYWNoZV9zaXplID0gbGV2ZWwyX2Nh Y2hlX3NpemU7CisgIGNwdV9mZWF0dXJlcy0+bGV2ZWwyX2NhY2hlX2Fzc29jID0gbGV2ZWwyX2Nh Y2hlX2Fzc29jOworICBjcHVfZmVhdHVyZXMtPmxldmVsMl9jYWNoZV9saW5lc2l6ZSA9IGxldmVs Ml9jYWNoZV9saW5lc2l6ZTsKKyAgY3B1X2ZlYXR1cmVzLT5sZXZlbDNfY2FjaGVfc2l6ZSA9IGxl dmVsM19jYWNoZV9zaXplOworICBjcHVfZmVhdHVyZXMtPmxldmVsM19jYWNoZV9hc3NvYyA9IGxl dmVsM19jYWNoZV9hc3NvYzsKKyAgY3B1X2ZlYXR1cmVzLT5sZXZlbDNfY2FjaGVfbGluZXNpemUg PSBsZXZlbDNfY2FjaGVfbGluZXNpemU7CisgIGNwdV9mZWF0dXJlcy0+bGV2ZWw0X2NhY2hlX3Np emUgPSBsZXZlbDRfY2FjaGVfc2l6ZTsKKworICAvKiBUaGUgbGFyZ2UgbWVtY3B5IG1pY3JvIGJl bmNobWFyayBpbiBnbGliYyBzaG93cyB0aGF0IDYgdGltZXMgb2YKKyAgICAgc2hhcmVkIGNhY2hl IHNpemUgaXMgdGhlIGFwcHJveGltYXRlIHZhbHVlIGFib3ZlIHdoaWNoIG5vbi10ZW1wb3JhbAor ICAgICBzdG9yZSBiZWNvbWVzIGZhc3RlciBvbiBhIDgtY29yZSBwcm9jZXNzb3IuICBUaGlzIGlz IHRoZSAzLzQgb2YgdGhlCisgICAgIHRvdGFsIHNoYXJlZCBjYWNoZSBzaXplLiAgKi8KKyAgdW5z aWduZWQgbG9uZyBpbnQgbm9uX3RlbXBvcmFsX3RocmVzaG9sZCA9IChzaGFyZWQgKiB0aHJlYWRz ICogMyAvIDQpOworCisjaWYgSEFWRV9UVU5BQkxFUworICBsb25nIGludCB0dW5hYmxlX3NpemU7 CisgIHR1bmFibGVfc2l6ZSA9IFRVTkFCTEVfR0VUICh4ODZfZGF0YV9jYWNoZV9zaXplLCBsb25n IGludCwgTlVMTCk7CisgIGlmICh0dW5hYmxlX3NpemUgIT0gMCkKKyAgICBkYXRhID0gdHVuYWJs ZV9zaXplOworICB0dW5hYmxlX3NpemUgPSBUVU5BQkxFX0dFVCAoeDg2X3NoYXJlZF9jYWNoZV9z aXplLCBsb25nIGludCwgTlVMTCk7CisgIGlmICh0dW5hYmxlX3NpemUgIT0gMCkKKyAgICBzaGFy ZWQgPSB0dW5hYmxlX3NpemU7CisgIHR1bmFibGVfc2l6ZSA9IFRVTkFCTEVfR0VUICh4ODZfbm9u X3RlbXBvcmFsX3RocmVzaG9sZCwgbG9uZyBpbnQsIE5VTEwpOworICBpZiAodHVuYWJsZV9zaXpl ICE9IDApCisgICAgbm9uX3RlbXBvcmFsX3RocmVzaG9sZCA9IHR1bmFibGVfc2l6ZTsKKyNlbmRp ZgorCisgIGNwdV9mZWF0dXJlcy0+ZGF0YV9jYWNoZV9zaXplID0gZGF0YTsKKyAgY3B1X2ZlYXR1 cmVzLT5zaGFyZWRfY2FjaGVfc2l6ZSA9IHNoYXJlZDsKKyAgY3B1X2ZlYXR1cmVzLT5ub25fdGVt cG9yYWxfdGhyZXNob2xkID0gbm9uX3RlbXBvcmFsX3RocmVzaG9sZDsgCisKKyNpZiBIQVZFX1RV TkFCTEVTCisgIFRVTkFCTEVfVVBEQVRFICh4ODZfZGF0YV9jYWNoZV9zaXplLCBsb25nIGludCwK KwkJICBkYXRhLCAwLCAobG9uZyBpbnQpIC0xKTsKKyAgVFVOQUJMRV9VUERBVEUgKHg4Nl9zaGFy ZWRfY2FjaGVfc2l6ZSwgbG9uZyBpbnQsCisJCSAgc2hhcmVkLCAwLCAobG9uZyBpbnQpIC0xKTsK KyAgVFVOQUJMRV9VUERBVEUgKHg4Nl9ub25fdGVtcG9yYWxfdGhyZXNob2xkLCBsb25nIGludCwK KwkJICBub25fdGVtcG9yYWxfdGhyZXNob2xkLCAwLCAobG9uZyBpbnQpIC0xKTsKKyNlbmRpZgor fQpkaWZmIC0tZ2l0IGEvc3lzZGVwcy94ODYvaW5pdC1hcmNoLmggYi9zeXNkZXBzL3g4Ni9pbml0 LWFyY2guaAppbmRleCBkNmY1OWNmOTYyLi4yNzJlZDEwOTAyIDEwMDY0NAotLS0gYS9zeXNkZXBz L3g4Ni9pbml0LWFyY2guaAorKysgYi9zeXNkZXBzL3g4Ni9pbml0LWFyY2guaApAQCAtMjMsNiAr MjMsOSBAQAogI2luY2x1ZGUgPGlmdW5jLWluaXQuaD4KICNpbmNsdWRlIDxpc2EuaD4KIAorZXh0 ZXJuIHZvaWQgX19pbml0X2NhY2hlaW5mbyAodm9pZCkKKyAgX19hdHRyaWJ1dGVfXyAoKHZpc2li aWxpdHkgKCJoaWRkZW4iKSkpOworCiAjaWZuZGVmIF9feDg2XzY0X18KIC8qIER1ZSB0byB0aGUg cmVvcmRlcmluZyBhbmQgdGhlIG90aGVyIG5pZnR5IGV4dGVuc2lvbnMgaW4gaTY4NiwgaXQgaXMK ICAgIG5vdCByZWFsbHkgZ29vZCB0byB1c2UgaGVhdmlseSBpNTg2IG9wdGltaXplZCBjb2RlIG9u IGFuIGk2ODYuICBJdCdzCmRpZmYgLS1naXQgYS9zeXNkZXBzL3g4Nl82NC9zdGFydC5TIGIvc3lz ZGVwcy94ODZfNjQvc3RhcnQuUwppbmRleCA3NDc3YjYzMmY3Li4wMTQ5NjAyN2NhIDEwMDY0NAot LS0gYS9zeXNkZXBzL3g4Nl82NC9zdGFydC5TCisrKyBiL3N5c2RlcHMveDg2XzY0L3N0YXJ0LlMK QEAgLTU1LDcgKzU1LDEzIEBACiAKICNpbmNsdWRlIDxzeXNkZXAuaD4KIAotRU5UUlkgKF9zdGFy dCkKKyNpZmRlZiBMSUJDX01BSU4KKyMgZGVmaW5lIFNUQVJUIF9fbGliY19tYWluCisjZWxzZQor IyBkZWZpbmUgU1RBUlQgX3N0YXJ0CisjZW5kaWYKKworRU5UUlkgKFNUQVJUKQogCS8qIENsZWFy aW5nIGZyYW1lIHBvaW50ZXIgaXMgaW5zdWZmaWNpZW50LCB1c2UgQ0ZJLiAgKi8KIAljZmlfdW5k ZWZpbmVkIChyaXApCiAJLyogQ2xlYXIgdGhlIGZyYW1lIHBvaW50ZXIuICBUaGUgQUJJIHN1Z2dl c3RzIHRoaXMgYmUgZG9uZSwgdG8gbWFyawpAQCAtNzYsMTYgKzgyLDI0IEBAIEVOVFJZIChfc3Rh cnQpCiAJcnRsZF9maW5pOgklcjkKIAlzdGFja19lbmQ6CXN0YWNrLgkqLwogCisjaWZkZWYgTElC Q19NQUlOCisjIGRlZmluZSBBUkdDX1JFRwlSRElfTFAKKyMgZGVmaW5lIEFSR1ZfUkVHCVJTSV9M UAorI2Vsc2UKKyMgZGVmaW5lIEFSR0NfUkVHCVJTSV9MUAorIyBkZWZpbmUgQVJHVl9SRUcJUkRY X0xQCisjZW5kaWYKKwogCW1vdiAlUkRYX0xQLCAlUjlfTFAJLyogQWRkcmVzcyBvZiB0aGUgc2hh cmVkIGxpYnJhcnkgdGVybWluYXRpb24KIAkJCQkgICBmdW5jdGlvbi4gICovCiAjaWZkZWYgX19J TFAzMl9fCi0JbW92ICglcnNwKSwgJWVzaQkvKiBTaW11bGF0ZSBwb3BwaW5nIDQtYnl0ZSBhcmd1 bWVudCBjb3VudC4gICovCisJbW92ICglcnNwKSwgJUFSR0NfUkVHCS8qIFNpbXVsYXRlIHBvcHBp bmcgNC1ieXRlIGFyZ3VtZW50IGNvdW50LiAgKi8KIAlhZGQgJDQsICVlc3AKICNlbHNlCi0JcG9w cSAlcnNpCQkvKiBQb3AgdGhlIGFyZ3VtZW50IGNvdW50LiAgKi8KKwlwb3BxICVBUkdDX1JFRwkJ LyogUG9wIHRoZSBhcmd1bWVudCBjb3VudC4gICovCiAjZW5kaWYKIAkvKiBhcmd2IHN0YXJ0cyBq dXN0IGF0IHRoZSBjdXJyZW50IHN0YWNrIHRvcC4gICovCi0JbW92ICVSU1BfTFAsICVSRFhfTFAK Kwltb3YgJVJTUF9MUCwgJUFSR1ZfUkVHCiAJLyogQWxpZ24gdGhlIHN0YWNrIHRvIGEgMTYgYnl0 ZSBib3VuZGFyeSB0byBmb2xsb3cgdGhlIEFCSS4gICovCiAJYW5kICAkfjE1LCAlUlNQX0xQCiAK QEAgLTk2LDE5ICsxMTAsMjIgQEAgRU5UUlkgKF9zdGFydCkKIAkgICB3aGljaCBncm93IGRvd253 YXJkcykuICAqLwogCXB1c2hxICVyc3AKIAotI2lmZGVmIFBJQworI2lmZGVmIExJQkNfTUFJTgor CWNhbGwgTElCQ19NQUlOCisjZWxzZQorIyBpZmRlZiBQSUMKIAkvKiBQYXNzIGFkZHJlc3Mgb2Yg b3VyIG93biBlbnRyeSBwb2ludHMgdG8gLmZpbmkgYW5kIC5pbml0LiAgKi8KIAltb3YgX19saWJj X2NzdV9maW5pQEdPVFBDUkVMKCVyaXApLCAlUjhfTFAKIAltb3YgX19saWJjX2NzdV9pbml0QEdP VFBDUkVMKCVyaXApLCAlUkNYX0xQCiAKIAltb3YgbWFpbkBHT1RQQ1JFTCglcmlwKSwgJVJESV9M UAotI2Vsc2UKKyMgZWxzZQogCS8qIFBhc3MgYWRkcmVzcyBvZiBvdXIgb3duIGVudHJ5IHBvaW50 cyB0byAuZmluaSBhbmQgLmluaXQuICAqLwogCW1vdiAkX19saWJjX2NzdV9maW5pLCAlUjhfTFAK IAltb3YgJF9fbGliY19jc3VfaW5pdCwgJVJDWF9MUAogCiAJbW92ICRtYWluLCAlUkRJX0xQCi0j ZW5kaWYKKyMgZW5kaWYKIAogCS8qIENhbGwgdGhlIHVzZXIncyBtYWluIGZ1bmN0aW9uLCBhbmQg ZXhpdCB3aXRoIGl0cyB2YWx1ZS4KIAkgICBCdXQgbGV0IHRoZSBsaWJjIGNhbGwgbWFpbi4gIFNp bmNlIF9fbGliY19zdGFydF9tYWluIGluCkBAIC0xMTgsMTAgKzEzNSwxMiBAQCBFTlRSWSAoX3N0 YXJ0KQogCSAgIDIuMjYgb3IgYWJvdmUgY2FuIGNvbnZlcnQgaW5kaXJlY3QgYnJhbmNoIGludG8g ZGlyZWN0CiAJICAgYnJhbmNoLiAgKi8KIAljYWxsICpfX2xpYmNfc3RhcnRfbWFpbkBHT1RQQ1JF TCglcmlwKQorI2VuZGlmCiAKIAlobHQJCQkvKiBDcmFzaCBpZiBzb21laG93IGBleGl0JyBkb2Vz IHJldHVybi4JICovCi1FTkQgKF9zdGFydCkKK0VORCAoU1RBUlQpCiAKKyNpZm5kZWYgTElCQ19N QUlOCiAvKiBEZWZpbmUgYSBzeW1ib2wgZm9yIHRoZSBmaXJzdCBwaWVjZSBvZiBpbml0aWFsaXpl ZCBkYXRhLiAgKi8KIAkuZGF0YQogCS5nbG9ibCBfX2RhdGFfc3RhcnQKQEAgLTEyOSwzICsxNDgs NCBAQCBfX2RhdGFfc3RhcnQ6CiAJLmxvbmcgMAogCS53ZWFrIGRhdGFfc3RhcnQKIAlkYXRhX3N0 YXJ0ID0gX19kYXRhX3N0YXJ0CisjZW5kaWYKLS0gCjIuMjYuMgoK --000000000000d8410d05a77161dd--