Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1t8jn9-005ifZ-0l for pgsql-hackers@arkaria.postgresql.org; Wed, 06 Nov 2024 17:26:03 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1t8jn6-007mfV-2S for pgsql-hackers@arkaria.postgresql.org; Wed, 06 Nov 2024 17:26:00 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1t8jn4-007mfM-Fc for pgsql-hackers@lists.postgresql.org; Wed, 06 Nov 2024 17:26:00 +0000 Received: from relay5-d.mail.gandi.net ([2001:4b98:dc4:8::225]) by makus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1t8jmt-000VBA-Hx for pgsql-hackers@lists.postgresql.org; Wed, 06 Nov 2024 17:25:57 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id 4AD311C0006; Wed, 6 Nov 2024 17:25:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vondra.me; s=gm1; t=1730913944; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=XnNDsmTJCZFpDtV3OY/qBUKCNsEt4YLAYN8XntaDphU=; b=PsC2xgDyKwxmYrI85keHExn1/hHavNxVxNvsrhX14S+HTqjfVYzdeEkFYWQJCyR8Rm7lSr xSdmbZqIHLxTLD/lsJxDM2divZUVPbuKwp7qSx+a5Aq3yhN3l5Wc+xIqwHb2ZVXaTteSKO 6K/f8YVhjyDKlUmto4c/bTxOfPqFzS8v6vWx2NK04adhqBaYQgfcuEpxSNdBkiCLhtzFL7 BXEuCfxMrXXkbvuQg/qdU8IMQxTTzhRr4HF5bkSw459xoMVjmwgP/HuC+2pddbV1N1FjTh IqM4NWSakesfqMC0kW+F34/i63W9JcU7P/VH8nh5bzWCXuOSy3BcGEq2OL4jRQ== Content-Type: multipart/mixed; boundary="------------4qyQcmdBaK2FloOMEeBLhmx6" Message-ID: <8b58ae08-9ed7-43aa-92b0-1976ea6385ed@vondra.me> Date: Wed, 6 Nov 2024 18:25:41 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: index prefetching From: Tomas Vondra To: Peter Geoghegan Cc: Andres Freund , Melanie Plageman , Robert Haas , PostgreSQL Hackers , Georgios , Thomas Munro , Konstantin Knizhnik , Dilip Kumar References: <4f5f16ef-df1e-4e09-9b3f-2e0961ab5117@enterprisedb.com> <4736207c-8ea6-40cb-ac52-41af00b58bbc@enterprisedb.com> <20240215201337.7amzw3hpvng7wphb@awork3.anarazel.de> <48d3ff87-a435-488f-b803-258dab6485d6@enterprisedb.com> <6761860c-c66e-400a-b45f-aa741f548771@vondra.me> Content-Language: en-US In-Reply-To: X-GND-Sasl: tomas@vondra.me List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------4qyQcmdBaK2FloOMEeBLhmx6 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi, Attached is an updated version of this patch series. The first couple parts (adding batching + updating built-in index AMs) remain the same, the new part is 0007 which switches index scans to read stream API. We tried to use read stream API for index prefetching before, and it didn't seem to be a good fit with that design of the patch. It wasn't clear what to do about kill tuples, the index AM and read stream had no way to communicate, etc. I speculated that with the batching concept it might work better, and I think that turned out to be the case. The batching is still the core idea, giving the index AM enough control to make kill tuples work (by not generating batches spanning multiple leaf pages, or doing something smarter). And the read stream leverages that too - the next_block callback returns items from the current batch, and the stream is reset between batches. This is the same prefetch restriction as with the explicit prefetching (done using posix_fadvise), except that the prefetching is done by the read stream. As I said before, I think this is an acceptable restriction for v1. It can be relaxed in the future if needed, allowing either cross-leaf batches and/or multiple in-flight batches. But the patch is complex enough, and even this simpler patch gives significant benefit. The main open questions are about how to structure the patch - in which order to introduce the changes. Right now the patch adds batching, and then bases the read stream on that. The batching part now includes explicit prefetching, which is later removed by 0007. That's mostly to allow comparisons with the read stream, because that's interesting. Ultimately the explicit prefetch should be removed, and it'd be just basic batching + read stream. But then in which order we should introduce the parts? Now the batching is introduced first, followed by read stream. But I can imagine doing it the other way too - introducing read stream, and then batching. Of course, without batching the read stream can't do any prefetching (for index scans). It'd only simply read the heap pages 1 by 1, just like now. Only with the batching part it'd be able to prefetch. I don't see either of those options as obviously superior, but maybe there are good reasons to pick one? Opinions? A related question is whether all index scans should use ther read stream API, or whether there should be a fallback to "regular" read through ReadBuffer. Right now the read stream is an optional field in IndexFetchHeapData, initialized only for index AMs supporting batching, with a couple exceptions for cases where we don't expect batching (and prefetch) to be very effective (e.g. for systables). All built-in AMs do support batching, but my plan was to keep the optional, and I can't predict if all index AMs can do batching (easily or even at all). I've thought maybe we could simulate batching for those AMs by simply treating individual items (returned by amgettuple) as tiny single-item batches, and just do everything through the read stream. But the annoying consequence is that we'd have to reset the stream after every item, because there's no way to "pause" the stream once it runs out of the current batch. I haven't measured how expensive that is, maybe not much, but it seems a bit inconvenient. I wonder if there's a more natural / convenient way to handle this, when we really can't look further ahead than at the very next item. If this "single-item" batch idea is not usable, that means we can't introduce read stream first. We have to introduce batching first, and only then do the read stream change. Opinions? I hope this wasn't too confusing :-( regards -- Tomas Vondra --------------4qyQcmdBaK2FloOMEeBLhmx6 Content-Type: text/x-patch; charset=UTF-8; name="v20241106-0001-WIP-index-batching-prefetching.patch" Content-Disposition: attachment; filename="v20241106-0001-WIP-index-batching-prefetching.patch" Content-Transfer-Encoding: base64 RnJvbSAwODYwZGU2ODcyYjdlMzlmNWE5NDBjN2QwMDhlMGMxMTNmMDgzYmIxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogTW9uLCAzMCBTZXAgMjAyNCAyMjo0ODoxMiArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjQxMTA2IDEvN10gV0lQOiBpbmRleCBiYXRjaGluZyAvIHByZWZldGNoaW5nCgpBbGxv d3MgdGhlIGluZGV4IEFNIHRvIHByb3ZpZGUgaXRlbXMgKFRJRHMgYW5kIHR1cGxlcykgaW4g YmF0Y2hlcywgd2hpY2gKaXMgdGhlbiB1c2VkIHRvIGltcGxlbWVudCBwcmVmZXRjaGluZyBv ZiBoZWFwIHR1cGxlcyBpbiBpbmRleCBzY2FucwooaW5jbHVkaW5nIGluZGV4LW9ubHkgc2Nh bnMpLiBUaGlzIGlzIHNpbWlsYXIgdG8gcHJlZmV0Y2hpbmcgYWxyZWFkeQpkb25lIGluIGJp dG1hcCBzY2FucywgYW5kIGNhbiByZXN1bHQgaW4gc2lnbmlmaWNhbnQgc3BlZWR1cHMuCgpU aGUgaW5kZXggQU0gbWF5IGltcGxlbWVudCBhbiBvcHRpb25hbCAiYW1nZXRiYXRjaCIgY2Fs bGJhY2ssIHJldHVybmluZwphIGJhdGNoIG9mIGl0ZW1zLiBUaGUgaW5kZXhhbS5jIGNvZGUg dGhlbiBoYW5kbGVzIHRoaXMgdHJhbnNwYXJlbnRseQp0aHJvdWdoIHRoZSBleGlzdGluZyAi Z2V0bmV4dCIgaW50ZXJmYWNlLgoKSXQgaXMgdXAgdG8gdGhlIGluZGV4IEFNIHRvIHJldHVy biBvbmx5IGJhdGNoZXMgdGhhdCBpdCBjYW4gaGFuZGxlCmludGVybmFsbHkuIEZvciBleGFt cGxlLCBtb3N0IG9mIHRoZSBsYXRlciBwYXRjaGVzIGFkZGluZyBzdXBwb3J0IGZvcgpiYXRj aGluZyB0byByZWxldmFudCBpbmRleCBBTXMgKGJ0cmVlLCBoYXNoLCBnaXN0LCBzcC1naXN0 KSByZXN0cmljdCB0aGUKYmF0Y2hlcyB0byBhIHNpbmdsZSBsZWFmIHBhZ2UuIFRoaXMgbWFr ZXMgaW1wbGVtZW50YXRpb24gb2YgYmF0Y2hpbmcKbXVjaCBzaW1wbGVyLCB3aXRoIG9ubHkg bWluaW1hbCBjaGFuZ2VzIHRvIHRoZSBpbmRleCBBTXMsIGJ1dCBpdCdzIG5vdCBhCmhhcmQg cmVxdWlyZW1lbnQuIFRoZSBpbmRleCBBTSBjYW4gcHJvZHVjZSBiYXRjaGVzIHNwYW5uaW5n IGFyYml0cmFyeQpudW1iZXIgb2YgbGVhZiBwYWdlcy4gVGhpcyBpcyBsZWZ0IGFzIGEgcG9z c2libGUgZnV0dXJlIGltcHJvdmVtZW50LgoKTW9zdCBvZiB0aGUgYmF0Y2hpbmcvcHJlZmV0 Y2hpbmcgbG9naWMgaGFwcGVucyBpbiBpbmRleGFtLmMuIFRoaXMgbWVhbnMKdGhlIGV4ZWN1 dG9yIGNvZGUgY2FuIGNvbnRpbnVlIHRvIGNhbGwgdGhlIGludGVyZmFjZSBqdXN0IGxpa2Ug YmVmb3JlLgoKVGhlIG9ubHkgInZpb2xhdGlvbiIgaGFwcGVucyBpbiBpbmRleC1vbmx5IHNj YW5zLCB3aGljaCBuZWVkIHRvIGNoZWNrCnRoZSB2aXNpYmlsaXR5IG1hcCBib3RoIHdoZW4g dGhlIHByZWZldGNoaW5nIHBhZ2VzICh3ZSBkb24ndCB3YW50IHRvCnByZWZldGNoIHBhZ2Vz IHRoYXQgYXJlIHVubmVjZXNzYXJ5KSBhbmQgbGF0ZXIgd2hlbiByZWFkaW5nIHRoZSBkYXRh LgpGb3IgY2FjaGVkIGRhdGEgdGhlIHZpc2liaWxpdHkgbWFwIGNoZWNrcyBjYW4gYmUgZmFp cmx5IGV4cGVuc2l2ZSwgc28KaXQncyBkZXNpcmFibGUgdG8ga2VlcCBhbmQgcmV1c2UgdGhl IHJlc3VsdCBvZiB0aGUgZmlyc3QgY2hlY2suCgpBdCB0aGUgbW9tZW50LCB0aGUgcHJlZmV0 Y2hpbmcgZG9lcyBub3QgaGFuZGxlIG1hcmsvcmVzdG9yZSBwbGFucy4gVGhpcwppcyBkb2Fi bGUsIGJ1dCByZXF1aXJlcyBhZGRpdGlvbmFsIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHRo ZSBiYXRjaGluZwphbmQgaW5kZXggQU0gY29kZSBpbiB0aGUgIm9wcG9zaXRlIGRpcmVjdGlv biIuCgpUaGlzIHBhdGNoIGRvZXMgbm90IGFjdHVhbGx5IGFkZCBiYXRjaGluZyB0byBhbnkg b2YgdGhlIGluZGV4IEFNcywgaXQncwpqdXN0IHRoZSBjb21tb24gaW5mcmFzdHJ1Y3R1cmUu CgpUT0RPIEFkZCB0aGUgbmV3IGluZGV4IEFNIGNhbGxiYWNrIHRvIHNnbWwgZG9jcy4KLS0t CiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jICAgICAgfCAgIDcg Ky0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jICAgICAgICAgICAgICB8ICAy MyArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyAgICAgICAgICAgIHwg ODA4ICsrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4 aW5nLmMgICAgICAgICAgIHwgICA3ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVw bGljYXRpb24uYyAgICAgICAgfCAgIDkgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJ bmRleG9ubHlzY2FuLmMgICAgICB8IDEwNiArKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25v ZGVJbmRleHNjYW4uYyAgICAgICAgICB8ICAzNiArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3NlbGZ1bmNzLmMgICAgICAgICAgICAgIHwgICA3ICstCiBzcmMvYmFja2VuZC91dGlscy9t aXNjL2d1Y190YWJsZXMuYyAgICAgICAgICAgfCAgMTAgKwogc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIHwgICAxICsKIHNyYy9pbmNsdWRlL2FjY2Vz cy9hbWFwaS5oICAgICAgICAgICAgICAgICAgICB8ICAgNSArCiBzcmMvaW5jbHVkZS9hY2Nl c3MvZ2VuYW0uaCAgICAgICAgICAgICAgICAgICAgfCAgMTQgKy0KIHNyYy9pbmNsdWRlL2Fj Y2Vzcy9yZWxzY2FuLmggICAgICAgICAgICAgICAgICB8ICA2NCArKwogc3JjL2luY2x1ZGUv bm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgICAgICAgIHwgICA3ICsKIHNyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0ICAgICAgICB8ICAgMyArLQogc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgICAyICsKIDE2IGZpbGVz IGNoYW5nZWQsIDEwODQgaW5zZXJ0aW9ucygrKSwgMjUgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5kZXggYThkOTVlMGYxYzEu LjNmY2VhZTc1OWQyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFw YW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5k bGVyLmMKQEAgLTc0OSw3ICs3NDksMTIgQEAgaGVhcGFtX3JlbGF0aW9uX2NvcHlfZm9yX2Ns dXN0ZXIoUmVsYXRpb24gT2xkSGVhcCwgUmVsYXRpb24gTmV3SGVhcCwKIAogCQl0YWJsZVNj YW4gPSBOVUxMOwogCQloZWFwU2NhbiA9IE5VTEw7Ci0JCWluZGV4U2NhbiA9IGluZGV4X2Jl Z2luc2NhbihPbGRIZWFwLCBPbGRJbmRleCwgU25hcHNob3RBbnksIDAsIDApOworCisJCS8q CisJCSAqIFhYWCBNYXliZSBlbmFibGUgYmF0Y2hpbmcvcHJlZmV0Y2ggZm9yIGNsdXN0ZXJp bmcuIFNlZW1zIGxpa2UgaXQKKwkJICogbWlnaHQgYmUgYSBwcmV0dHkgc3Vic3RhbnRpYWwg d2luLgorCQkgKi8KKwkJaW5kZXhTY2FuID0gaW5kZXhfYmVnaW5zY2FuKE9sZEhlYXAsIE9s ZEluZGV4LCBTbmFwc2hvdEFueSwgMCwgMCwgZmFsc2UpOwogCQlpbmRleF9yZXNjYW4oaW5k ZXhTY2FuLCBOVUxMLCAwLCBOVUxMLCAwKTsKIAl9CiAJZWxzZQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5k ZXgvZ2VuYW0uYwppbmRleCA2MGM2MTAzOWQ2Ni4uM2E5ZDJkNDgzZDcgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9pbmRleC9nZW5hbS5jCkBAIC00NDUsOCArNDQ1LDE4IEBAIHN5c3RhYmxlX2JlZ2lu c2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJZWxvZyhFUlJPUiwgImNvbHVtbiBp cyBub3QgaW4gaW5kZXgiKTsKIAkJfQogCisJCS8qCisJCSAqIE5vIGJhdGNoaW5nL3ByZWZl dGNoIGZvciBjYXRhbG9ncy4gV2UgZG9uJ3QgZXhwZWN0IHRoYXQgdG8gaGVscAorCQkgKiB2 ZXJ5IG11Y2gsIGJlY2F1c2Ugd2UgdXN1YWxseSBuZWVkIGp1c3Qgb25lIHJvdywgYW5kIGV2 ZW4gaWYgd2UKKwkJICogbmVlZCBtdWx0aXBsZSByb3dzLCB0aGV5IHRlbmQgdG8gYmUgY29s b2NhdGVkIGluIGhlYXAuCisJCSAqCisJCSAqIFhYWCBNYXliZSB3ZSBjb3VsZCBkbyB0aGF0 LCB0aGUgcHJlZmV0Y2hpbmcgb25seSByYW1wcyB1cCBvdmVyCisJCSAqIHRpbWUuIEJ1dCB0 aGVuIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBpbmZpbml0ZSByZWN1cnNpb24gd2hl bgorCQkgKiBsb29raW5nIHVwIGVmZmVjdGl2ZV9pb19jb25jdXJyZW5jeSBmb3IgYSB0YWJs ZXNwYWNlIGluIHRoZQorCQkgKiBjYXRhbG9nLgorCQkgKi8KIAkJc3lzc2Nhbi0+aXNjYW4g PSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbGF0aW9uLCBpcmVsLAotCQkJCQkJCQkJCSBzbmFw c2hvdCwgbmtleXMsIDApOworCQkJCQkJCQkJCSBzbmFwc2hvdCwgbmtleXMsIDAsIGZhbHNl KTsKIAkJaW5kZXhfcmVzY2FuKHN5c3NjYW4tPmlzY2FuLCBpZHhrZXksIG5rZXlzLCBOVUxM LCAwKTsKIAkJc3lzc2Nhbi0+c2NhbiA9IE5VTEw7CiAJfQpAQCAtNzA4LDggKzcxOCwxNyBA QCBzeXN0YWJsZV9iZWdpbnNjYW5fb3JkZXJlZChSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJ CQllbG9nKEVSUk9SLCAiY29sdW1uIGlzIG5vdCBpbiBpbmRleCIpOwogCX0KIAorCS8qCisJ ICogTm8gYmF0Y2hpbmcvcHJlZmV0Y2ggZm9yIGNhdGFsb2dzLiBXZSBkb24ndCBleHBlY3Qg dGhhdCB0byBoZWxwIHZlcnkKKwkgKiBtdWNoLCBiZWNhdXNlIHdlIHVzdWFsbHkgbmVlZCBq dXN0IG9uZSByb3csIGFuZCBldmVuIGlmIHdlIG5lZWQKKwkgKiBtdWx0aXBsZSByb3dzLCB0 aGV5IHRlbmQgdG8gYmUgY29sb2NhdGVkIGluIGhlYXAuCisJICoKKwkgKiBYWFggTWF5YmUg d2UgY291bGQgZG8gdGhhdCwgdGhlIHByZWZldGNoaW5nIG9ubHkgcmFtcHMgdXAgb3ZlciB0 aW1lLgorCSAqIEJ1dCB0aGVuIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBpbmZpbml0 ZSByZWN1cnNpb24gd2hlbiBsb29raW5nIHVwCisJICogZWZmZWN0aXZlX2lvX2NvbmN1cnJl bmN5IGZvciBhIHRhYmxlc3BhY2UgaW4gdGhlIGNhdGFsb2cuCisJICovCiAJc3lzc2Nhbi0+ aXNjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbGF0aW9uLCBpbmRleFJlbGF0aW9uLAot CQkJCQkJCQkJIHNuYXBzaG90LCBua2V5cywgMCk7CisJCQkJCQkJCQkgc25hcHNob3QsIG5r ZXlzLCAwLCBmYWxzZSk7CiAJaW5kZXhfcmVzY2FuKHN5c3NjYW4tPmlzY2FuLCBpZHhrZXks IG5rZXlzLCBOVUxMLCAwKTsKIAlzeXNzY2FuLT5zY2FuID0gTlVMTDsKIApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9pbmRleC9pbmRleGFtLmMKaW5kZXggMTg1OWJlNjE0YzAuLjI4NDlhYjk3Y2RmIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKQEAgLTMzLDYgKzMzLDcgQEAKICAq CQlpbmRleF9jYW5fcmV0dXJuCS0gZG9lcyBpbmRleCBzdXBwb3J0IGluZGV4LW9ubHkgc2Nh bnM/CiAgKgkJaW5kZXhfZ2V0cHJvY2lkIC0gZ2V0IGEgc3VwcG9ydCBwcm9jZWR1cmUgT0lE CiAgKgkJaW5kZXhfZ2V0cHJvY2luZm8gLSBnZXQgYSBzdXBwb3J0IHByb2NlZHVyZSdzIGxv b2t1cCBpbmZvCisgKgkJaW5kZXhfYmF0Y2hfYWRkCQktIGFkZCBhbiBpdGVtIChUSUQsIGl0 dXApIHRvIHRoZSBiYXRjaAogICoKICAqIE5PVEVTCiAgKgkJVGhpcyBmaWxlIGNvbnRhaW5z IHRoZSBpbmRleF8gcm91dGluZXMgd2hpY2ggdXNlZApAQCAtNTQsMTAgKzU1LDE0IEBACiAj aW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgog I2luY2x1ZGUgInV0aWxzL3J1bGV1dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3Iu aCIKKyNpbmNsdWRlICJ1dGlscy9zcGNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2Nh Y2hlLmgiCiAKKy8qIGVuYWJsZSByZWFkaW5nIGJhdGNoZXMgLyBwcmVmZXRjaGluZyBvZiBU SURzIGZyb20gdGhlIGluZGV4ICovCitib29sCQllbmFibGVfaW5kZXhzY2FuX2JhdGNoaW5n ID0gZmFsc2U7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCQkJCQltYWNyb3MgdXNlZCBpbiBpbmRl eF8gcm91dGluZXMKQEAgLTEwOSw2ICsxMTQsMTUgQEAgc3RhdGljIEluZGV4U2NhbkRlc2Mg aW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiAJCQkJ CQkJCQkJCSAgUGFyYWxsZWxJbmRleFNjYW5EZXNjIHBzY2FuLCBib29sIHRlbXBfc25hcCk7 CiBzdGF0aWMgaW5saW5lIHZvaWQgdmFsaWRhdGVfcmVsYXRpb25fa2luZChSZWxhdGlvbiBy KTsKIAorLyogaW5kZXggYmF0Y2hpbmcgKi8KK3N0YXRpYyB2b2lkIGluZGV4X2JhdGNoX2lu aXQoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK3N0YXRpYyB2b2lkIGluZGV4X2JhdGNoX3Jlc2V0 KEluZGV4U2NhbkRlc2Mgc2Nhbik7CitzdGF0aWMgYm9vbCBpbmRleF9iYXRjaF9nZXRuZXh0 KEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24p Oworc3RhdGljIEl0ZW1Qb2ludGVyIGluZGV4X2JhdGNoX2dldG5leHRfdGlkKEluZGV4U2Nh bkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7Citz dGF0aWMgdm9pZCBpbmRleF9iYXRjaF9wcmVmZXRjaChJbmRleFNjYW5EZXNjIHNjYW4sCisJ CQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7CiAKIC8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAq CQkJCSAgIGluZGV4XyBpbnRlcmZhY2UgZnVuY3Rpb25zCkBAIC0yNTYsNyArMjcwLDggQEAg SW5kZXhTY2FuRGVzYwogaW5kZXhfYmVnaW5zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwK IAkJCQlSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogCQkJCVNuYXBzaG90IHNuYXBzaG90LAot CQkJCWludCBua2V5cywgaW50IG5vcmRlcmJ5cykKKwkJCQlpbnQgbmtleXMsIGludCBub3Jk ZXJieXMsCisJCQkJYm9vbCBlbmFibGVfYmF0Y2hpbmcpCiB7CiAJSW5kZXhTY2FuRGVzYyBz Y2FuOwogCkBAIC0yNzQsNiArMjg5LDI0IEBAIGluZGV4X2JlZ2luc2NhbihSZWxhdGlvbiBo ZWFwUmVsYXRpb24sCiAJLyogcHJlcGFyZSB0byBmZXRjaCBpbmRleCBtYXRjaGVzIGZyb20g dGFibGUgKi8KIAlzY2FuLT54c19oZWFwZmV0Y2ggPSB0YWJsZV9pbmRleF9mZXRjaF9iZWdp bihoZWFwUmVsYXRpb24pOwogCisJLyoKKwkgKiBJZiBleHBsaWNpdGx5IHJlcXVlc3RlZCBh bmQgc3VwcG9ydGVkIGJ5IGJvdGggdGhlIGluZGV4IEFNIGFuZCB0aGUKKwkgKiBwbGFuLCBp bml0aWFsaXplIGJhdGNoaW5nIGluZm8uCisJICoKKwkgKiBYWFggV2UgZG8gdGhpcyBhZnRl ciBhbWJlZ2luc2NhbigpLCB3aGljaCBtZWFucyB0aGUgQU0gY2FuJ3QgaW5pdCB0aGUKKwkg KiBwcml2YXRlIGRhdGEgaW4gdGhlcmUgKGl0IGRvZXNuJ3QgZXZlbiBrbm93IGlmIGJhdGNo aW5nIHdpbGwgYmUgdXNlZCBhdAorCSAqIHRoYXQgcG9pbnQpLgorCSAqCisJICogWFhYIE1h eWJlIHdlIHNob3VsZCBoYXZlIGEgc2VwYXJhdGUgImFtY2FuYmF0Y2giIGNhbGwsIHRvIGxl dCB0aGUgQU0KKwkgKiBkZWNpZGUgaWYgYmF0Y2hpbmcgaXMgc3VwcG9ydGVkIGRlcGVuZGlu ZyBvbiB0aGUgc2NhbiBkZXRhaWxzLgorCSAqLworCWlmICgoaW5kZXhSZWxhdGlvbi0+cmRf aW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCkgJiYKKwkJZW5hYmxlX2JhdGNoaW5nICYmCisJ CWVuYWJsZV9pbmRleHNjYW5fYmF0Y2hpbmcpCisJeworCQlpbmRleF9iYXRjaF9pbml0KHNj YW4pOworCX0KKwogCXJldHVybiBzY2FuOwogfQogCkBAIC0zMzMsNiArMzY2LDEyIEBAIGlu ZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogCXNjYW4t PnBhcmFsbGVsX3NjYW4gPSBwc2NhbjsKIAlzY2FuLT54c190ZW1wX3NuYXAgPSB0ZW1wX3Nu YXA7CiAKKwkvKgorCSAqIE5vIGJhdGNoaW5nIGJ5IGRlZmF1bHQsIHNvIHNldCBpdCB0byBO VUxMLiBXaWxsIGJlIGluaXRpYWxpemVkIGxhdGVyIGlmCisJICogYmF0Y2hpbmcgaXMgcmVx dWVzdGVkIGFuZCBBTSBzdXBwb3J0cyBpdC4KKwkgKi8KKwlzY2FuLT54c19iYXRjaCA9IE5V TEw7CisKIAlyZXR1cm4gc2NhbjsKIH0KIApAQCAtMzY4LDYgKzQwNywxOCBAQCBpbmRleF9y ZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLAogCiAJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRf aW5kYW0tPmFtcmVzY2FuKHNjYW4sIGtleXMsIG5rZXlzLAogCQkJCQkJCQkJCQlvcmRlcmJ5 cywgbm9yZGVyYnlzKTsKKworCS8qCisJICogUmVzZXQgdGhlIGJhdGNoLCB0byBtYWtlIGl0 IGxvb2sgZW1wdHkuCisJICoKKwkgKiBEb25lIGFmdGVyIHRoZSBhbXJlc2NhbigpIGNhbGws IGluIGNhc2UgdGhlIEFNIG5lZWRzIHNvbWUgb2YgdGhlIGJhdGNoCisJICogaW5mbyAoZS5n LiB0byBwcm9wZXJseSB0cmFuc2ZlciB0aGUga2lsbGVkIHR1cGxlcykuCisJICoKKwkgKiBY WFggVGhpcyBpcyBhIGJpdCBtaXNsZWFkaW5nLCBiZWNhdXNlIGluZGV4X2JhdGNoX3Jlc2V0 IGRvZXMgbm90IHJlc2V0CisJICogdGhlIGtpbGxlZCB0dXBsZXMuIFNvIGlmIHRoYXQncyB0 aGUgb25seSBqdXN0aWZpY2F0aW9uLCB3ZSBjb3VsZCBoYXZlCisJICogZG9uZSBpdCBiZWZv cmUgdGhlIGNhbGwuCisJICovCisJaW5kZXhfYmF0Y2hfcmVzZXQoc2Nhbik7CiB9CiAKIC8q IC0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ0NCw2ICs0OTUsMTggQEAgaW5kZXhfcmVzdHJwb3Mo SW5kZXhTY2FuRGVzYyBzY2FuKQogCXNjYW4tPnhzX2hlYXBfY29udGludWUgPSBmYWxzZTsK IAogCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXJlc3RycG9zKHNjYW4pOwor CisJLyoKKwkgKiBSZXNldCB0aGUgYmF0Y2gsIHRvIG1ha2UgaXQgbG9vayBlbXB0eS4KKwkg KgorCSAqIERvbmUgYWZ0ZXIgdGhlIGFtcmVzY2FuKCkgY2FsbCwgaW4gY2FzZSB0aGUgQU0g bmVlZHMgc29tZSBvZiB0aGUgYmF0Y2gKKwkgKiBpbmZvIChlLmcuIHRvIHByb3Blcmx5IHRy YW5zZmVyIHRoZSBraWxsZWQgdHVwbGVzKS4KKwkgKgorCSAqIFhYWCBUaGlzIGlzIGEgYml0 IG1pc2xlYWRpbmcsIGJlY2F1c2UgaW5kZXhfYmF0Y2hfcmVzZXQgZG9lcyBub3QgcmVzZXQK KwkgKiB0aGUga2lsbGVkIHR1cGxlcy4gU28gaWYgdGhhdCdzIHRoZSBvbmx5IGp1c3RpZmlj YXRpb24sIHdlIGNvdWxkIGhhdmUKKwkgKiBkb25lIGl0IGJlZm9yZSB0aGUgY2FsbC4KKwkg Ki8KKwlpbmRleF9iYXRjaF9yZXNldChzY2FuKTsKIH0KIAogLyoKQEAgLTUzOSw3ICs2MDIs OCBAQCBpbmRleF9wYXJhbGxlbHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiAgKi8KIElu ZGV4U2NhbkRlc2MKIGluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChSZWxhdGlvbiBoZWFwcmVs LCBSZWxhdGlvbiBpbmRleHJlbCwgaW50IG5rZXlzLAotCQkJCQkJIGludCBub3JkZXJieXMs IFBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwc2NhbikKKwkJCQkJCSBpbnQgbm9yZGVyYnlzLCBQ YXJhbGxlbEluZGV4U2NhbkRlc2MgcHNjYW4sCisJCQkJCQkgYm9vbCBlbmFibGVfYmF0Y2hp bmcpCiB7CiAJU25hcHNob3QJc25hcHNob3Q7CiAJSW5kZXhTY2FuRGVzYyBzY2FuOwpAQCAt NTYyLDYgKzYyNiwyNCBAQCBpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwoUmVsYXRpb24gaGVh cHJlbCwgUmVsYXRpb24gaW5kZXhyZWwsIGludCBua2V5cywKIAkvKiBwcmVwYXJlIHRvIGZl dGNoIGluZGV4IG1hdGNoZXMgZnJvbSB0YWJsZSAqLwogCXNjYW4tPnhzX2hlYXBmZXRjaCA9 IHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKGhlYXByZWwpOwogCisJLyoKKwkgKiBJZiBleHBs aWNpdGx5IHJlcXVlc3RlZCBhbmQgc3VwcG9ydGVkIGJ5IGJvdGggdGhlIGluZGV4IEFNIGFu ZCB0aGUKKwkgKiBwbGFuLCBpbml0aWFsaXplIGJhdGNoaW5nIGluZm8uCisJICoKKwkgKiBY WFggV2UgZG8gdGhpcyBhZnRlciBhbWJlZ2luc2NhbigpLCB3aGljaCBtZWFucyB0aGUgQU0g Y2FuJ3QgaW5pdCB0aGUKKwkgKiBwcml2YXRlIGRhdGEgaW4gdGhlcmUgKGl0IGRvZXNuJ3Qg ZXZlbiBrbm93IGlmIGJhdGNoaW5nIHdpbGwgYmUgdXNlZCBhdAorCSAqIHRoYXQgcG9pbnQp LgorCSAqCisJICogWFhYIE1heWJlIHdlIHNob3VsZCBoYXZlIGEgc2VwYXJhdGUgImFtY2Fu YmF0Y2giIGNhbGwsIHRvIGxldCB0aGUgQU0KKwkgKiBkZWNpZGUgaWYgYmF0Y2hpbmcgaXMg c3VwcG9ydGVkIGRlcGVuZGluZyBvbiB0aGUgc2NhbiBkZXRhaWxzLgorCSAqLworCWlmICgo aW5kZXhyZWwtPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwpICYmCisJCWVuYWJsZV9i YXRjaGluZyAmJgorCQllbmFibGVfaW5kZXhzY2FuX2JhdGNoaW5nKQorCXsKKwkJaW5kZXhf YmF0Y2hfaW5pdChzY2FuKTsKKwl9CisKIAlyZXR1cm4gc2NhbjsKIH0KIApAQCAtNTgzLDYg KzY2NSw1MyBAQCBpbmRleF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyZWN0aW9uKQogCS8qIFhYWDogd2Ugc2hvdWxkIGFzc2VydCB0aGF0IGEg c25hcHNob3QgaXMgcHVzaGVkIG9yIHJlZ2lzdGVyZWQgKi8KIAlBc3NlcnQoVHJhbnNhY3Rp b25JZElzVmFsaWQoUmVjZW50WG1pbikpOwogCisJLyoKKwkgKiBXaGVuIHVzaW5nIGJhdGNo aW5nICh3aGljaCBtYXkgYmUgZGlzYWJsZWQgZm9yIHZhcmlvdXMgcmVhc29ucyAoZS5nLgor CSAqIHRocm91Z2ggYSBHVUMsIHRoZSBpbmRleCBBTSBub3Qgc3VwcG9ydGluZyBpdCkgZG8g dGhlIG9sZCBhcHByb2FjaC4KKwkgKgorCSAqIFhYWCBNYXliZSB3ZSBzaG91bGQgZW5hYmxl IGJhdGNoaW5nIGJhc2VkIG9uIHRoZSBwbGFuIHRvbywgc28gdGhhdCB3ZQorCSAqIGRvbid0 IGRvIGJhdGNoaW5nIHdoZW4gaXQncyBwcm9iYWJseSB1c2VsZXNzIChlLmcuIHNlbWlqb2lu cyBvciBxdWVyaWVzCisJICogd2l0aCBMSU1JVCAxIGV0Yy4pLiBCdXQgbWF5YmUgdGhlIGFw cHJvYWNoIHdpdGggc2xvdyByYW1wLXVwIChzdGFydGluZworCSAqIHdpdGggc21hbGwgYmF0 Y2hlcykgd2lsbCBoYW5kbGUgdGhhdCB3ZWxsIGVub3VnaC4KKwkgKgorCSAqIFhYWCBQZXJo YXBzIGl0J2QgYmUgcG9zc2libGUgdG8gZG8gYm90aCBpbiBpbmRleF9nZXRuZXh0X3Nsb3Qo KSwgaS5lLgorCSAqIGNhbGwgZWl0aGVyIHRoZSBvcmlnaW5hbCBjb2RlIHdpdGhvdXQgYmF0 Y2hpbmcsIG9yIHRoZSBuZXcgYmF0Y2hpbmcKKwkgKiBjb2RlIGlmIHN1cHBvcnRlZC9lbmFi bGVkLiBJdCdzIG5vdCBncmVhdCB0byBoYXZlIGR1cGxpY2F0ZWQgY29kZS4KKwkgKi8KKwlp ZiAoc2Nhbi0+eHNfYmF0Y2ggIT0gTlVMTCkKKwl7CitiYXRjaF9sb2FkZWQ6CisJCS8qIFRy eSBnZXR0aW5nIGEgVElEIGZyb20gdGhlIGN1cnJlbnQgYmF0Y2ggKGlmIHdlIGhhdmUgb25l KS4gKi8KKwkJd2hpbGUgKGluZGV4X2JhdGNoX2dldG5leHRfdGlkKHNjYW4sIGRpcmVjdGlv bikgIT0gTlVMTCkKKwkJeworCQkJLyoKKwkJCSAqIFdlJ3ZlIHN1Y2Nlc3NmdWxseSBsb2Fk ZWQgYSBUSUQgZnJvbSB0aGUgYmF0Y2gsIHNvIGlzc3VlCisJCQkgKiBwcmVmZXRjaGVzIGZv ciBmdXR1cmUgVElEcyBpZiBuZWVkZWQuCisJCQkgKi8KKwkJCWluZGV4X2JhdGNoX3ByZWZl dGNoKHNjYW4sIGRpcmVjdGlvbik7CisKKwkJCXJldHVybiAmc2Nhbi0+eHNfaGVhcHRpZDsK KwkJfQorCisJCS8qCisJCSAqIFdlIGVpdGhlciBkb24ndCBoYXZlIGFueSBiYXRjaCB5ZXQs IG9yIHdlJ3ZlIGFscmVhZHkgcHJvY2Vzc2VkCisJCSAqIGFsbCBpdGVtcyBmcm9tIHRoZSBj dXJyZW50IGJhdGNoLiBUcnkgbG9hZGluZyB0aGUgbmV4dCBvbmUuCisJCSAqCisJCSAqIElm IHdlIHN1Y2NlZWQsIGlzc3VlIHByZWZldGNoZXMgKHVzaW5nIHRoZSBjdXJyZW50IHByZWZl dGNoCisJCSAqIGRpc3RhbmNlIHdpdGhvdXQgcmFtcCB1cCksIGFuZCB0aGVuIGdvIGJhY2sg dG8gcmV0dXJuaW5nIHRoZQorCQkgKiBUSURzIGZyb20gdGhlIGJhdGNoLgorCQkgKgorCQkg KiBYWFggTWF5YmUgZG8gdGhpcyBhcyBhIHNpbXBsZSB3aGlsZS9mb3IgbG9vcCB3aXRob3V0 IHRoZSBnb3RvLgorCQkgKi8KKwkJaWYgKGluZGV4X2JhdGNoX2dldG5leHQoc2NhbiwgZGly ZWN0aW9uKSkKKwkJeworCQkJaW5kZXhfYmF0Y2hfcHJlZmV0Y2goc2NhbiwgZGlyZWN0aW9u KTsKKwkJCWdvdG8gYmF0Y2hfbG9hZGVkOworCQl9CisKKwkJcmV0dXJuIE5VTEw7CisJfQor CiAJLyoKIAkgKiBUaGUgQU0ncyBhbWdldHR1cGxlIHByb2MgZmluZHMgdGhlIG5leHQgaW5k ZXggZW50cnkgbWF0Y2hpbmcgdGhlIHNjYW4KIAkgKiBrZXlzLCBhbmQgcHV0cyB0aGUgVElE IGludG8gc2Nhbi0+eHNfaGVhcHRpZC4gIEl0IHNob3VsZCBhbHNvIHNldApAQCAtNjUxLDcg Kzc4MCwxOSBAQCBpbmRleF9mZXRjaF9oZWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVHVwbGVU YWJsZVNsb3QgKnNsb3QpCiAJICogUmVsYXRpb25HZXRJbmRleFNjYW4oKS4KIAkgKi8KIAlp ZiAoIXNjYW4tPnhhY3RTdGFydGVkSW5SZWNvdmVyeSkKLQkJc2Nhbi0+a2lsbF9wcmlvcl90 dXBsZSA9IGFsbF9kZWFkOworCXsKKwkJaWYgKHNjYW4tPnhzX2JhdGNoID09IE5VTEwpCisJ CXsKKwkJCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBhbGxfZGVhZDsKKwkJfQorCQllbHNl IGlmIChhbGxfZGVhZCkKKwkJeworCQkJLyogYmF0Y2ggY2FzZSAtIHJlY29yZCB0aGUga2ls bGVkIHR1cGxlIGluIHRoZSBiYXRjaCAqLworCQkJaWYgKHNjYW4tPnhzX2JhdGNoLT5uS2ls bGVkSXRlbXMgPCBzY2FuLT54c19iYXRjaC0+bWF4U2l6ZSkKKwkJCQlzY2FuLT54c19iYXRj aC0+a2lsbGVkSXRlbXNbc2Nhbi0+eHNfYmF0Y2gtPm5LaWxsZWRJdGVtcysrXQorCQkJCQk9 IHNjYW4tPnhzX2JhdGNoLT5jdXJySW5kZXg7CisJCX0KKwl9CiAKIAlyZXR1cm4gZm91bmQ7 CiB9CkBAIC0xMDM5LDMgKzExODAsNjY0IEBAIGluZGV4X29wY2xhc3Nfb3B0aW9ucyhSZWxh dGlvbiBpbmRyZWwsIEF0dHJOdW1iZXIgYXR0bnVtLCBEYXR1bSBhdHRvcHRpb25zLAogCiAJ cmV0dXJuIGJ1aWxkX2xvY2FsX3JlbG9wdGlvbnMoJnJlbG9wdHMsIGF0dG9wdGlvbnMsIHZh bGlkYXRlKTsKIH0KKworLyoKKyAqIElOREVYIEJBVENISU5HIEFORCBQUkVGRVRDSElORwor ICoKKyAqIEFsbG93cyByZWFkaW5nIGNodW5rcyBvZiBpdGVtcyBmcm9tIGFuIGluZGV4LCBp bnN0ZWFkIG9mIHJlYWRpbmcgdGhlbQorICogb25lIGJ5IG9uZS4gVGhpcyByZWR1Y2VzIHRo ZSBvdmVyaGVhZCBvZiBhY2Nlc3NpbmcgaW5kZXggcGFnZXMsIGFuZAorICogYWxzbyBhbGxv d3MgYWN0aW5nIG9uICJmdXR1cmUiIFRJRHMgLSBlLmcuIHdlIGNhbiBwcmVmZXRjaCBoZWFw IHBhZ2VzCisgKiB0aGF0IHdpbGwgYmUgbmVlZGVkLCBldGMuCisgKgorICoKKyAqIGluZGV4 IEFNIGNvbnRyYWN0CisgKiAtLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFRvIHN1cHBvcnQg YmF0Y2hpbmcsIHRoZSBpbmRleCBBTSBuZWVkcyB0byBpbXBsZW1lbnQgYW4gb3B0aW9uYWwg Y2FsbGJhY2sKKyAqIGFtZ2V0YmF0Y2goKSB3aGljaCBsb2FkcyBkYXRhIGludG8gdGhlIGJh dGNoIChpbiB0aGUgc2NhbiBkZXNjcmlwdG9yKS4KKyAqCisgKiBUaGUgaW5kZXggQU0gYWxz byBuZWVkcyB0byBlbnN1cmUgaXQgY2FuIHBlcmZvcm0gYWxsIG9wdGltaXphdGlvbnMgZm9y CisgKiBhbGwgVElEcyBpbiB0aGUgY3VycmVudCBiYXRjaC4gQSBnb29kIGV4YW1wbGUgb2Yg aXMgdGhlIGtpbGxfcHJpb3JfdHVwbGUKKyAqIG9wdGltaXphdGlvbiAtIHdpdGggYmF0Y2hp bmcsIHRoZSBpbmRleCBBTSBtYXkgcmVjZWl2ZSB0aGUgaW5mb3JtYXRpb24KKyAqIHdoaWNo IHR1cGxlcyBhcmUgdG8gYmUga2lsbGVkIHdpdGggYSBkZWxheSAtIHdoZW4gbG9hZGluZyB0 aGUgbmV4dAorICogYmF0Y2gsIHdoZW4gZW5kaW5nL3Jlc3RhcnRpbmcgdGhlIHNjYW4sIGV0 Yy4gVGhlIEFNIG5lZWRzIHRvIGVuc3VyZSBpdAorICogY2FuIHN0aWxsIHByb2Nlc3Mgc3Vj aCBpbmZvcm1hdGlvbiwgdG8ga2VlcCB0aGUgb3B0aW1pemF0aW9uIGVmZmVjdGl2ZS4KKyAq CisgKiBUaGUgQU0gbWF5IGFsc28gbmVlZCB0byBrZWVwIHBpbnMgcmVxdWlyZWQgYnkgdGhl IHdob2xlIGJhdGNoIChub3QganVzdAorICogdGhlIGxhc3QgdHVwbGUpLCBldGMuCisgKgor ICogV2hhdCB0aGlzIG1lYW5zL3JlcXVpcmVzIGlzIHZlcnkgZGVwZW5kZW50IG9uIHRoZSBp bmRleCBBTSwgb2YgY291cnNlLgorICogRm9yIEItVHJlZSAoYW5kIG1vc3Qgb3RoZXIgaW5k ZXggQU1zKSwgYmF0Y2hlcyBzcGFubmluZyBtdWx0aXBsZSBsZWFmCisgKiBwYWdlcyB3b3Vs ZCBiZSBwcm9ibGVtYXRpYy4gU3VjaCBiYXRjaGVzIHdvdWxkIHdvcmsgZm9yIGJhc2ljIGlu ZGV4CisgKiBzY2FucywgYnV0IHRoZSBraWxsX3ByaW9yX3R1cGxlIHdvdWxkIGJlIGFuIGlz c3VlIC0gdGhlIEFNcyBrZWVwIG9ubHkKKyAqIGEgc2luZ2xlIGxlYWYgcGlubmVkLiBXZSdk IGVpdGhlciBuZWVkIHRvIGtlZXAgbXVsdGlwbGUgcGlucywgb3IgYWxsb3cKKyAqIHJlYWRp bmcgb2xkZXIgbGVhZiBwYWdlcyBwYWdlcyAod2hpY2ggbWlnaHQgaGF2ZSBiZWVuIG1vZGlm aWVkKS4gSW5kZXgKKyAqIG9ubHktc2NhbnMgaXMgY2hhbGxlbmdpbmcgdG9vIC0gd2Uga2Vl cCBJbmRleFR1cGxlIHBvaW50ZXJzIGludG8gdGhlCisgKiBsZWFmIHBhZ2VzLCB3aGljaCBy ZXF1aXJlcyBrZWVwaW5nIHRob3NlIHBpbnMgdG9vLgorICoKKyAqIFRvIHNvbHZlIHRoaXMs IHdlIGdpdmUgdGhlIEFNIHNvbWUgY29udHJvbCBvdmVyIGJhdGNoIGJvdW5kYXJpZXMuIEl0 IGlzCisgKiB1cCB0byB0aGUgaW5kZXggQU0gdG8gcGljayB3aGljaCByYW5nZSBvZiBpbmRl eCBpdGVtcyB0byBsb2FkIGludG8gdGhlCisgKiBiYXRjaCwgYW5kIGhvdyB0byBlbnN1cmUg YWxsIHRoZSBvcHRpbWl6YXRpb25zIGFyZSBwb3NzaWJsZSwga2VlcCBwaW5zLAorICogYW5k IHNvIG9uLiBUaGUgaW5kZXggQU0gbWF5IHVzZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYmF0 Y2ggKGluIHRoZQorICogc2NhbiBkZXNjcmlwdG9yLCBtYWludGFpbmVkIGJ5IGluZGV4YW0u YyBjb2RlKSwgYW5kIG1heSBhbHNvIGtlZXAgc29tZQorICogcHJpdmF0ZSBpbmZvcm1hdGlv biAoaW4gdGhlIGV4aXN0aW5nICJvcGFxdWUiIHNjYW4gZmllbGQpLgorICoKKyAqIEZvciBt b3N0IGluZGV4IEFNcyB0aGUgZWFzaWVzdCB3YXkgaXMgdG8gbm90IGxvYWQgYmF0Y2hlcyBz cGFubmluZworICogbXVsdGlwbGUgbGVhZiBwYWdlcy4gVGhpcyBtYXkgaW1wYWN0IHRoZSBl ZmZpY2llbmN5LCBlc3BlY2lhbGx5IGZvcgorICogaW5kZXhlcyB3aXRoIHdpZGUgaW5kZXgg dHVwbGVzLCBhcyBpdCBtZWFucyBiYXRjaGVzIGNsb3NlIHRvIHRoZSBlbmQKKyAqIG9mIHRo ZSBsZWFmIHBhZ2UgbWF5IGJlIHNtYWxsZXIuCisgKgorICogTm90ZTogVGhlcmUgYWxyZWFk eSBpcyBhIHBpcGVsaW5lIGJyZWFrIGZvciBwcmVmZXRjaGluZyAtIGFzIHdlIGFyZQorICog Z2V0dGluZyBjbG9zZXIgdG8gdGhlIGVuZCBvZiBhIGJhdGNoLCB3ZSBjYW4ndCBwcmVmZXRj aCBmdXJ0aGVyIHRoYW4KKyAqIHRoYXQsIGFuZCB0aGUgZWZmZWN0aXZlIHByZWZldGNoIGRp c3RhbmNlIGRyb3BzIHRvIDAuCisgKgorICogVGhlIGFsdGVybmF0aXZlIHdvdWxkIGJlIHRv IG1ha2UgdGhlIGluZGV4IEFNcyBtb3JlIGNvbXBsZXgsIHRvIGtlZXAKKyAqIG1vcmUgbGVh ZiBwYWdlcyBwaW5uZWQsIGV0Yy4gVGhlIGN1cnJlbnQgbW9kZWwgZG9lcyBub3QgcHJvaGli aXQgdGhlCisgKiBpbmRleCBBTXMgZnJvbSBpbXBsZW1lbnRpbmcgdGhhdCAtIGl0J3MgZW50 aXJlbHkgcG9zc2libGUgdG8ga2VlcCB0aGUKKyAqIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24g aW4gdGhlICJvcGFxdWUiIHN0cnVjdHVyZSAoc2F5LCBsaXN0IG9mIHBpbm5lZAorICogcGFn ZXMsIGFuZCBvdGhlciBuZWNlc3NhcnkgZGV0YWlscykuCisgKgorICogQnV0IHRoYXQgZG9l cyBub3Qgc2VlbSBsaWtlIGEgZ29vZCB0cmFkZSBvZmYsIGFzIGl0J3Mgc3ViamVjdCB0bwor ICogImRpbWluaXNoaW5nIHJldHVybnMiIC0gd2Ugc2VlIHNpZ25pZmljYW50IGdhaW5zIGlu aXRpYWxseSAod2l0aCBldmVuCisgKiBzbWFsbCBiYXRjaGVzIC8gcHJlZmV0Y2ggZGlzdGFu Y2UpLCBhbmQgYXMgdGhlIGJhdGNoIGdyb3dzIHRoZSBnYWlucworICogZ2V0IHNtYWxsZXIg YW5kIHNtYWxsZXIuIEl0IGRvZXMgbm90IHNlZW0gd29ydGggdGhlIGNvbXBsZXhpdHkgb2YK KyAqIHBpbm5pbmcgbW9yZSBwYWdlcyBldGMuIGF0IGxlYXN0IGZvciB0aGUgZmlyc3QgdmVy c2lvbi4KKyAqCisgKiBUbyBkZWFsIHdpdGggdGhlICJwcmVmZXRjaCBwaXBlbGluZSBicmVh ayIsIHRoYXQgY291bGQgYmUgYWRkcmVzc2VkIGJ5CisgKiBhbGxvd2luZyBtdWx0aXBsZSBp bi1mbGlndCBiYXRjaGVzIC0gZS5nLiB3aXRoIHByZWZldGNoIGRpc3RhbmNlIDY0CisgKiB3 ZSBtaWdodCBoYXZlIHRocmVlIGJhdGNoZXMgb2YgMzIgaXRlbXMgZWFjaCwgdG8gcHJlZmV0 Y2ggZmFyIGFoZWFkLgorICogQnV0IHRoYXQncyBub3Qgd2hhdCB0aGlzIHBhdGNoIGRvZXMg eWV0LgorICoKKyAqCisgKiBiYXRjaCA9IHNsaWRpbmcgd2luZG93CisgKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKgorICogQSBnb29kIHdheSB0byB2aXN1YWxpemUgYSBiYXRjaCBp cyBhIHNsaWRpbmcgd2luZG93IG92ZXIgdGhlIGFycmF5CisgKiBvZiBpdGVtcyBvbiBhIGxl YWYgcGFnZS4gSW4gdGhlIHNpbXBsZXN0IGV4YW1wbGUgKGZvcndhcmQgc2NhbiB3aXRoIG5v CisgKiBjaGFuZ2VzIG9mIGRpcmVjdGlvbiksIHdlIHNsaWNlIHRoZSBhcnJheSBpbnRvIHNt YWxsZXIgY2h1bmtzLCBhbmQKKyAqIHRoZW4gcHJvY2VzcyBlYWNoIG9mIHRob3NlIGNodW5r cy4KKyAqCisgKiBUaGUgYmF0Y2ggc2l6ZSBpcyBhZGFwdGl2ZSAtIGl0IHN0YXJ0cyBzbWFs bCAob25seSA4IGVsZW1lbnRzKSBhbmQKKyAqIGluY3JlYXNlcyBhcyB3ZSByZWFkIG1vcmUg YmF0Y2hlcyAodXAgdG8gNjQgZWxlbWVudHMpLiBXZSBkb24ndCB3YW50CisgKiB0byByZWdy ZXNzIGNhc2VzIHRoYXQgb25seSBuZWVkIGEgc2luZ2xlIGl0ZW0gKGUuZy4gTElNSVQgMSBx dWVyaWVzKSwKKyAqIGFuZCBsb2FkaW5nL2NvcHlpbmcgYSBsb3Qgb2YgZGF0YSBtaWdodCBj YXVzZSB0aGF0LiBTbyB3ZSBzdGFydCBzbWFsbAorICogYW5kIGluY3JlYXNlIHRoZSBzaXpl IC0gdGhhdCBzdGlsbCBpbXByb3ZlcyBjYXNlcyByZWFkaW5nIGEgbG90IG9mCisgKiBkYXRh IGZyb20gdGhlIGluZGV4LCB3aXRob3V0IGh1cnRpbmcgc21hbGwgcXVlcmllcy4KKyAqCisg KiBOb3RlOiBUaGlzIGdyYWR1YWwgcmFtcCB1cCBpcyBmb3IgYmF0Y2ggc2l6ZSwgaW5kZXBl bmRlbnQgb2Ygd2hhdCB3ZQorICogZG8gZm9yIHByZWZldGNoLiBUaGUgcHJlZmV0Y2ggZGlz dGFuY2UgaXMgZ3JhZHVhbGx5IGluY3JlYXNlZCB0b28sIGJ1dAorICogaXQncyBpbmRlcGVu ZGVudCAvIG9ydGhvZ29uYWwgdG8gdGhlIGJhdGNoIHNpemUuIFRoZSBiYXRjaCBzaXplIGxp bWl0cworICogaG93IGZhciBhaGVhZCB3ZSBjYW4gcHJlZmV0Y2gsIG9mIGNvdXJzZS4KKyAq CisgKiBOb3RlOiBUaGUgY3VycmVudCBsaW1pdHMgb24gYmF0Y2ggc2l6ZSAoaW5pdGlhbCA4 LCBtYXhpbXVtIDY0KSBhcmUKKyAqIHF1aXRlIGFyYml0cmFyeSwgaXQganVzdCBzZWVtZWQg dGhvc2UgdmFsdWVzIGFyZSBzYW5lLiBXZSBjb3VsZCBhZGp1c3QKKyAqIHRoZSBpbml0aWFs IHNpemUsIGJ1dCBJIGRvbid0IHRoaW5rIGl0J2QgbWFrZSBhIGZ1bmRhbWVudGFsIGRpZmZl cmVuY2UuCisgKiBHcm93aW5nIHRoZSBiYXRjaGVzIGZhc3Rlci9zbG93ZXIgaGFzIGJpZ2dl ciBpbXBhY3QuCisgKgorICogVGhlIG1heGltdW0gYmF0Y2ggc2l6ZSBkb2VzIG5vdCBtYXR0 ZXIgbXVjaCAtIGl0J3MgdHJ1ZSBhIGJ0cmVlIGluZGV4IGNhbgorICogaGF2ZSB1cCB0byB+ MTMwMCBpdGVtcyBwZXIgOEsgbGVhZiBwYWdlLCBidXQgaW4gbW9zdCBjYXNlcyB0aGUgYWN0 dWFsCisgKiBudW1iZXIgaXMgbG93ZXIsIHBlcmhhcHMgfjMwMC4gVGhhdCdzIG5vdCB0aGF0 IGZhciBmcm9tIDY0LgorICoKKyAqIEVhY2ggYmF0Y2ggaGFzIGEgZmlyc3RJbmRleC9sYXN0 SW5kZXggdG8gdHJhY2sgd2hpY2ggcGFydCBvZiB0aGUgbGVhZgorICogcGFnZSBpdCBjdXJy ZW50bHkgcmVwcmVzZW50cy4KKyAqCisgKgorICoga2lsbF9wcmlvcl90dXBsZXMKKyAqIC0t LS0tLS0tLS0tLS0tLS0tCisgKgorICogSWYgd2UgZGVjaWRlIGEgdHVwbGUgY2FuIGJlIGtp bGxlZCwgdGhlIGJhdGNoIGl0ZW0gaXMgbWFya2VkIGFjY29yZGluZ2x5LAorICogYW5kIHRo ZSBmbGFnIGlzIHJlc2V0IHRvIGZhbHNlIChzbyB0aGF0IHRoZSBpbmRleCBBTSBkb2VzIG5v dCBkbyBzb21ldGhpbmcKKyAqIHNpbGx5IHRvIGEgcmFuZG9tIHR1cGxlIGl0IHRoaW5rcyBp cyAiY3VycmVudCIpLgorICoKKyAqIFRoZW4gdGhlIG5leHQgdGltZSB0aGUgQU0gZGVjaWRl cyBpdCdzIHRpbWUgdG8ga2lsbCB0dXBsZXMsIHRoZSBBTSBuZWVkcworICogdG8gbG9vayBh dCB0aGUgYmF0Y2ggYW5kIGNvbnNpZGVyIHRoZSB0dXBsZXMgbWFya2VkIHRvIGJlIGtpbGxl ZC4gQi1UcmVlCisgKiBzaW1wbHkgYWRkcyB0aG9zZSBUSURzIHRvIHRoZSByZWd1bGFyICJr aWxsSXRlbXMiIGFycmF5LgorICoKKyAqCisgKiBtYXJrL3Jlc3RvcmUKKyAqIC0tLS0tLS0t LS0tLQorICoKKyAqIFdpdGggYmF0Y2hpbmcsIHRoZSBpbmRleCBBTSBkb2VzIG5vdCBrbm93 IHRoZSB0aGUgImN1cnJlbnQiIHBvc2l0aW9uIG9uCisgKiB0aGUgbGVhZiBwYWdlIC0gd2Ug ZG9uJ3QgcHJvcGFnYXRlIHRoaXMgdG8gdGhlIGluZGV4IEFNIHdoaWxlIHdhbGtpbmcKKyAq IGl0ZW1zIGluIHRoZSBiYXRjaC4gVG8gbWFrZSBhbW1hcmtwb3MoKSB3b3JrLCB0aGUgaW5k ZXggQU0gaGFzIHRvIGNoZWNrCisgKiB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgYmF0 Y2gsIGFuZCB0cmFuc2xhdGUgaXQgdG8gdGhlIHByb3BlciBwYWdlCisgKiBwb3NpdGlvbiwg dXNpbmcgdGhlIHByaXZhdGUgaW5mb3JtYXRpb24gKGFib3V0IGl0ZW1zIGluIHRoZSBiYXRj aCkuCisgKgorICogWFhYIFRoaXMgbmVlZHMgbW9yZSB3b3JrLCBJIGRvbid0IHF1aXRlIGxp a2UgaG93IHRoZSB0d28gbGF5ZXJzIGludGVyYWN0LAorICogaXQgc2VlbXMgcXVpdGUgd3Jv bmcgdG8gbG9vayBhdCB0aGUgYmF0Y2ggaW5mbyBkaXJlY3RseS4KKyAqLworCisvKgorICog Q29tcHJlaGVuc2l2ZSBjaGVjayBvZiB2YXJpb3VzIGludmFyaWFudHMgb24gdGhlIGluZGV4 IGJhdGNoLiBNYWtlcyBzdXJlCisgKiB0aGUgaW5kZXhlcyBhcmUgc2V0IGFzIGV4cGVjdGVk LCB0aGUgYnVmZmVyIHNpemUgaXMgd2l0aGluIGxpbWl0cywgYW5kCisgKiBzbyBvbi4KKyAq Lworc3RhdGljIHZvaWQKK0Fzc2VydENoZWNrQmF0Y2hJbmZvKEluZGV4U2NhbkRlc2Mgc2Nh bikKK3sKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJLyogYWxsIHRoZSBhcnJheXMg bmVlZCB0byBiZSBhbGxvY2F0ZWQgKi8KKwlBc3NlcnQoKHNjYW4tPnhzX2JhdGNoLT5oZWFw dGlkcyAhPSBOVUxMKSAmJgorCQkgICAoc2Nhbi0+eHNfYmF0Y2gtPmtpbGxlZEl0ZW1zICE9 IE5VTEwpICYmCisJCSAgIChzY2FuLT54c19iYXRjaC0+cHJpdmF0ZURhdGEgIT0gTlVMTCkp OworCisJLyogaWYgSW5kZXhUdXBsZXMgZXhwZWN0ZWQsIHNob3VsZCBiZSBhbGxvY2F0ZWQg dG9vICovCisJQXNzZXJ0KCEoc2Nhbi0+eHNfd2FudF9pdHVwICYmIChzY2FuLT54c19iYXRj aC0+aXR1cHMgPT0gTlVMTCkpKTsKKworCS8qIFZhcmlvdXMgY2hlY2sgb24gYmF0Y2ggc2l6 ZXMgKi8KKwlBc3NlcnQoKHNjYW4tPnhzX2JhdGNoLT5pbml0U2l6ZSA+PSAwKSAmJgorCQkg ICAoc2Nhbi0+eHNfYmF0Y2gtPmluaXRTaXplIDw9IHNjYW4tPnhzX2JhdGNoLT5jdXJyU2l6 ZSkgJiYKKwkJICAgKHNjYW4tPnhzX2JhdGNoLT5jdXJyU2l6ZSA8PSBzY2FuLT54c19iYXRj aC0+bWF4U2l6ZSkgJiYKKwkJICAgKHNjYW4tPnhzX2JhdGNoLT5tYXhTaXplIDw9IDEwMjQp KTsJLyogYXJiaXRyYXJ5IGxpbWl0ICovCisKKwkvKiBJcyB0aGUgbnVtYmVyIG9mIGluIHRo ZSBiYXRjaCBUSURzIGluIGEgdmFsaWQgcmFuZ2U/ICovCisJQXNzZXJ0KChzY2FuLT54c19i YXRjaC0+bmhlYXB0aWRzID49IDApICYmCisJCSAgIChzY2FuLT54c19iYXRjaC0+bmhlYXB0 aWRzIDw9IHNjYW4tPnhzX2JhdGNoLT5tYXhTaXplKSk7CisKKwkvKgorCSAqIFRoZSBjdXJy ZW50IGl0ZW0gbXVzdCBiZSBiZXR3ZWVuIC0xIGFuZCBuaGVhcHRpZHMuIFRob3NlIHR3byBl eHRyZW1lCisJICogdmFsdWVzIGFyZSBzdGFydGluZyBwb2ludHMgZm9yIGZvcndhcmQvYmFj a3dhcmQgc2NhbnMuCisJICovCisJQXNzZXJ0KChzY2FuLT54c19iYXRjaC0+Y3VyckluZGV4 ID49IC0xKSAmJgorCQkgICAoc2Nhbi0+eHNfYmF0Y2gtPmN1cnJJbmRleCA8PSBzY2FuLT54 c19iYXRjaC0+bmhlYXB0aWRzKSk7CisKKwkvKiBjaGVjayBwcmVmZXRjaCBkYXRhICovCisJ QXNzZXJ0KChzY2FuLT54c19iYXRjaC0+cHJlZmV0Y2hUYXJnZXQgPj0gMCkgJiYKKwkJICAg KHNjYW4tPnhzX2JhdGNoLT5wcmVmZXRjaFRhcmdldCA8PSBzY2FuLT54c19iYXRjaC0+cHJl ZmV0Y2hNYXhpbXVtKSk7CisKKwlBc3NlcnQoKHNjYW4tPnhzX2JhdGNoLT5wcmVmZXRjaElu ZGV4ID49IC0xKSAmJgorCQkgICAoc2Nhbi0+eHNfYmF0Y2gtPnByZWZldGNoSW5kZXggPD0g c2Nhbi0+eHNfYmF0Y2gtPm5oZWFwdGlkcykpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBz Y2FuLT54c19iYXRjaC0+bmhlYXB0aWRzOyBpKyspCisJCUFzc2VydChJdGVtUG9pbnRlcklz VmFsaWQoJnNjYW4tPnhzX2JhdGNoLT5oZWFwdGlkc1tpXSkpOworI2VuZGlmCit9CisKKy8q IElzIHRoZSBiYXRjaCBmdWxsIChUSURzIHVwIHRvIGNhcGFjaXR5KT8gKi8KKyNkZWZpbmUJ SU5ERVhfQkFUQ0hfSVNfRlVMTChzY2FuKQlcCisJKChzY2FuKS0+eHNfYmF0Y2gtPm5oZWFw dGlkcyA9PSAoc2NhbiktPnhzX2JhdGNoLT5jdXJyU2l6ZSkKKworLyogSXMgdGhlIGJhdGNo IGVtcHR5IChubyBUSURzKT8gKi8KKyNkZWZpbmUJSU5ERVhfQkFUQ0hfSVNfRU1QVFkoc2Nh bikJXAorCSgoc2NhbiktPnhzX2JhdGNoLT5uaGVhcHRpZHMgPT0gMCkKKworLyoKKyAqIERp ZCB3ZSBwcm9jZXNzIGFsbCBpdGVtcz8gRm9yIGZvcndhcmQgc2NhbiBpdCBtZWFucyB0aGUg aW5kZXggcG9pbnRzIHRvIHRoZQorICogbGFzdCBpdGVtLCBmb3IgYmFja3dhcmQgc2NhbnMg aXQgaGFzIHRvIHBvaW50IHRvIHRoZSBmaXJzdCBvbmUuCisgKgorICogVGhpcyBkb2VzIG5v dCBjb3ZlciBlbXB0eSBiYXRjaGVzIHByb3Blcmx5LCBiZWNhdXNlIG9mIGJhY2t3YXJkIHNj YW5zLgorICovCisjZGVmaW5lCUlOREVYX0JBVENIX0lTX1BST0NFU1NFRChzY2FuLCBkaXJl Y3Rpb24pCVwKKwkoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pID8gXAorCQko KHNjYW4pLT54c19iYXRjaC0+bmhlYXB0aWRzID09ICgoc2NhbiktPnhzX2JhdGNoLT5jdXJy SW5kZXggKyAxKSkgOiBcCisJCSgoc2NhbiktPnhzX2JhdGNoLT5jdXJySW5kZXggPT0gMCkp CisKKy8qIERvZXMgdGhlIGJhdGNoIGl0ZW1zIGluIHRoZSByZXF1ZXN0ZWQgZGlyZWN0aW9u PyAqLworI2RlZmluZSBJTkRFWF9CQVRDSF9IQVNfSVRFTVMoc2NhbiwgZGlyZWN0aW9uKSBc CisJKCFJTkRFWF9CQVRDSF9JU19FTVBUWShzY2FuKSAmJiAhSU5ERVhfQkFUQ0hfSVNfUFJP Q0VTU0VEKHNjYW4sIGRpcmVjdGlvbikpCisKKworLyogLS0tLS0tLS0tLS0tLS0tLQorICoJ CWluZGV4X2JhdGNoX2dldG5leHQgLSBnZXQgdGhlIG5leHQgYmF0Y2ggb2YgVElEcyBmcm9t IGEgc2NhbgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB3ZSBtYW5hZ2VkIHRvIHJlYWQgYXQg bGVhc3Qgc29tZSBUSURzIGludG8gdGhlIGJhdGNoLAorICogb3IgZmFsc2UgaWYgdGhlcmUg YXJlIG5vIG1vcmUgVElEcyBpbiB0aGUgc2Nhbi4gVGhlIHhzX2hlYXB0aWRzIGFuZAorICog eHNfbmhlYXB0aWRzIGZpZWxkcyBjb250YWluIHRoZSBUSURTIGFuZCB0aGUgbnVtYmVyIG9m IGVsZW1lbnRzLgorICoKKyAqIFhYWCBUaGlzIG9ubHkgbG9hZHMgdGhlIFRJRHMgYW5kIHJl c2V0cyB0aGUgdmFyaW91cyBiYXRjaCBmaWVsZHMgdG8KKyAqIGZyZXNoIHN0YXRlLiBJdCBk b2VzIG5vdCBzZXQgeHNfaGVhcHRpZC94c19pdHVwL3hzX2hpdHVwLCB0aGF0J3MgdGhlCisg KiByZXNwb25zaWJpbGl0eSBvZiB0aGUgZm9sbG93aW5nIGluZGV4X2JhdGNoX2dldG5leHRf dGlkKCkgY2FsbHMuCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyBib29sCitp bmRleF9iYXRjaF9nZXRuZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXJlY3Rpb24pCit7CisJYm9vbAkJZm91bmQ7CisKKwlTQ0FOX0NIRUNLUzsKKwlDSEVDS19T Q0FOX1BST0NFRFVSRShhbWdldGJhdGNoKTsKKworCS8qIFhYWDogd2Ugc2hvdWxkIGFzc2Vy dCB0aGF0IGEgc25hcHNob3QgaXMgcHVzaGVkIG9yIHJlZ2lzdGVyZWQgKi8KKwlBc3NlcnQo VHJhbnNhY3Rpb25JZElzVmFsaWQoUmVjZW50WG1pbikpOworCisJLyogY29tcHJlaGVuc2l2 ZSBjaGVja3Mgb2YgYmF0Y2hpbmcgaW5mbyAqLworCUFzc2VydENoZWNrQmF0Y2hJbmZvKHNj YW4pOworCisJLyoKKwkgKiBXZSBuZXZlciByZWFkIGEgbmV3IGJhdGNoIGJlZm9yZSB3ZSBy dW4gb3V0IG9mIGl0ZW1zIGluIHRoZSBjdXJyZW50CisJICogb25lLiBUaGUgY3VycmVudCBi YXRjaCBoYXMgdG8gYmUgZWl0aGVyIGVtcHR5IG9yIHdlIHJhbiBvdXQgb2YgaXRlbXMKKwkg KiAoaW4gdGhlIGdpdmVuIGRpcmVjdGlvbikuCisJICovCisJQXNzZXJ0KCFJTkRFWF9CQVRD SF9IQVNfSVRFTVMoc2NhbiwgZGlyZWN0aW9uKSk7CisKKwkvKgorCSAqIFJlc2V0IHRoZSBj dXJyZW50L3ByZWZldGNoIHBvc2l0aW9ucyBpbiB0aGUgYmF0Y2guCisJICoKKwkgKiBYWFgg RG9uZSBiZWZvcmUgY2FsbGluZyBhbWdldGJhdGNoKCksIHNvIHRoYXQgaXQgc2VlcyB0aGUg aW5kZXggYXMKKwkgKiBpbnZhbGlkLCBiYXRjaCBhcyBlbXB0eSwgYW5kIGNhbiBhZGQgaXRl bXMuCisJICoKKwkgKiBYWFggSW50ZW50aW9uYWxseSBkb2VzIG5vdCByZXNldCB0aGUgbmhl YXB0aWRzLCBiZWNhdXNlIHRoZSBBTSBkb2VzCisJICogcmVseSBvbiB0aGF0IHdoZW4gcHJv Y2Vzc2luZyBraWxsZWQgdHVwbGVzLiBNYXliZSBzdG9yZSB0aGUga2lsbGVkCisJICogdHVw bGVzIGRpZmZlcmVudGx5PworCSAqLworCXNjYW4tPnhzX2JhdGNoLT5jdXJySW5kZXggPSAt MTsKKwlzY2FuLT54c19iYXRjaC0+cHJlZmV0Y2hJbmRleCA9IDA7CisJc2Nhbi0+eHNfYmF0 Y2gtPm5oZWFwdGlkcyA9IDA7CisKKwkvKgorCSAqIFJlc2V0IHRoZSBtZW1vcnkgY29udGV4 dCB3aXRoIGFsbCBwZXItYmF0Y2ggZGF0YSwgYWxsb2NhdGVkIGJ5IHRoZSBBTS4KKwkgKiBU aGlzIG1pZ2h0IGJlIHR1cGxlcywgb3IgYW55dGhpbmcgZWxzZSB0aGUgQU0gbmVlZHMuCisJ ICoKKwkgKiBYWFggTWFrZSBzdXJlIHRvIHJlc2V0IHRoZSB0dXBsZXMsIGJlY2F1c2UgdGhl IEFNIG1heSBkbyBzb21ldGhpbmcgd2l0aAorCSAqIHRoZW0gbGF0ZXIgKGUuZy4gcmVsZWFz ZSB0aGVtLCBhcyBnZXROZXh0TmVhcmVzdCBpbiBnaXN0KSwgYnV0IHdlIG1heQorCSAqIHJl bGVhc2UgdGhlbSBieSB0aGUgTWVtb3J5Q29udGV4dFJlc2V0KCkgY2FsbC4KKwkgKgorCSAq IFRoaXMgbWlnaHQgYnJlYWsgdGhlIEFNIGlmIGl0IHJlbGllcyBvbiB0aGVtIHBvaW50aW5n IHRvIHRoZSBsYXN0CisJICogdHVwbGUsIGJ1dCBhdCBsZWFzdCBpdCBoYXMgdGhlIGNoYW5j ZSB0byBkbyB0aGUgcmlnaHQgdGhpbmcgYnkgY2hlY2tpbmcKKwkgKiBpZiB0aGUgcG9pbnRl ciBpcyBOVUxMLgorCSAqLworCXNjYW4tPnhzX2l0dXAgPSBOVUxMOworCXNjYW4tPnhzX2hp dHVwID0gTlVMTDsKKworCU1lbW9yeUNvbnRleHRSZXNldChzY2FuLT54c19iYXRjaC0+Y3R4 KTsKKworCS8qCisJICogVGhlIEFNJ3MgYW1nZXRiYXRjaCBwcm9jIGxvYWRzIGEgY2h1bmsg b2YgVElEcyBtYXRjaGluZyB0aGUgc2NhbiBrZXlzLAorCSAqIGFuZCBwdXRzIHRoZSBUSURz IGludG8gc2Nhbi0+eHNfYmF0Y2gtPmhlYXB0aWRzLiAgSXQgc2hvdWxkIGFsc28gc2V0CisJ ICogc2Nhbi0+eHNfcmVjaGVjayBhbmQgcG9zc2libHkKKwkgKiBzY2FuLT54c19iYXRjaC0+ aXR1cHMvc2Nhbi0+eHNfYmF0Y2gtPmhpdHVwcywgdGhvdWdoIHdlIHBheSBubworCSAqIGF0 dGVudGlvbiB0byB0aG9zZSBmaWVsZHMgaGVyZS4KKwkgKgorCSAqIEZJWE1FIEF0IHRoZSBt b21lbnQgdGhpcyBkb2VzIG5vdGhpbmcgd2l0aCBoaXR1cC4gTmVlZHMgdG8gYmUgZml4ZWQ/ CisJICovCisJZm91bmQgPSBzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXRi YXRjaChzY2FuLCBkaXJlY3Rpb24pOworCisJLyogUmVzZXQga2lsbCBmbGFnIGltbWVkaWF0 ZWx5IGZvciBzYWZldHkgKi8KKwlzY2FuLT5raWxsX3ByaW9yX3R1cGxlID0gZmFsc2U7CisJ c2Nhbi0+eHNfaGVhcF9jb250aW51ZSA9IGZhbHNlOworCisJLyogSWYgd2UncmUgb3V0IG9m IGluZGV4IGVudHJpZXMsIHdlJ3JlIGRvbmUgKi8KKwlpZiAoIWZvdW5kKQorCXsKKwkJLyog cmVsZWFzZSByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGZyb20gdGFibGUgYWNjZXNz ZXMgKi8KKwkJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKKwkJCXRhYmxlX2luZGV4X2ZldGNo X3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CisKKwkJcmV0dXJuIGZhbHNlOworCX0KKwor CS8qIFdlIHNob3VsZCBoYXZlIGEgbm9uLWVtcHR5IGJhdGNoIHdpdGggaXRlbXMuICovCisJ QXNzZXJ0KElOREVYX0JBVENIX0hBU19JVEVNUyhzY2FuLCBkaXJlY3Rpb24pKTsKKworCXBn c3RhdF9jb3VudF9pbmRleF90dXBsZXMoc2Nhbi0+aW5kZXhSZWxhdGlvbiwgc2Nhbi0+eHNf YmF0Y2gtPm5oZWFwdGlkcyk7CisKKwkvKgorCSAqIFNldCB0aGUgcHJlZmV0Y2ggaW5kZXgg dG8gdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGxvYWRlZCBiYXRjaCAod2UgZXhwZWN0CisJICog dGhlIGluZGV4IEFNIHRvIHNldCB0aGF0KS4KKwkgKgorCSAqIEZJWE1FIE1heWJlIHNldCB0 aGUgY3VyckluZGV4IGhlcmUsIG5vdCBpbiB0aGUgaW5kZXggQU0uIEl0IHNlZW1zIG11Y2gK KwkgKiBtb3JlIGxpa2UgaW5kZXhhbS5jIHJlc3BvbnNpYmlsaXR5IHJhdGhlciB0aGFuIHNv bWV0aGluZyBldmVyeSBpbmRleCBBTQorCSAqIHNob3VsZCBiZSBkb2luZyAoaW4gX2J0X2Zp cnN0X2JhdGNoIGV0Yy4pLgorCSAqCisJICogRklYTUUgSXQncyBhIGJpdCB1bmNsZWFyIHdo byAoaW5kZXhhbS5jIG9yIHRoZSBpbmRleCBBTSkgaXMgcmVzcG9uc2libGUKKwkgKiBmb3Ig c2V0dGluZyB3aGljaCBmaWVsZHMuIFRoaXMgbmVlZHMgY2xhcmlmaWNhdGlvbi4KKwkgKi8K KwlzY2FuLT54c19iYXRjaC0+cHJlZmV0Y2hJbmRleCA9IHNjYW4tPnhzX2JhdGNoLT5jdXJy SW5kZXg7CisKKwkvKgorCSAqIFRyeSB0byBpbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgYmF0 Y2guIEludGVudGlvbmFsbHkgZG9uZSBhZnRlciB0aGUgQU0KKwkgKiBjYWxsLCBzbyB0aGF0 IHRoZSBuZXcgdmFsdWUgYXBwbGllcyB0byB0aGUgbmV4dCBiYXRjaC4gT3RoZXJ3aXNlIHdl CisJICogd291bGQgYWx3YXlzIHNraXAgdGhlIGluaXRpYWwgYmF0Y2ggc2l6ZS4KKwkgKi8K KwlzY2FuLT54c19iYXRjaC0+Y3VyclNpemUgPSBNaW4oc2Nhbi0+eHNfYmF0Y2gtPmN1cnJT aXplICsgMSwKKwkJCQkJCQkJICAgc2Nhbi0+eHNfYmF0Y2gtPm1heFNpemUpOworCisJLyog Y29tcHJlaGVuc2l2ZSBjaGVja3Mgb2YgYmF0Y2hpbmcgaW5mbyAqLworCUFzc2VydENoZWNr QmF0Y2hJbmZvKHNjYW4pOworCisJLyogUmV0dXJuIHRoZSBiYXRjaCBvZiBUSURzIHdlIGZv dW5kLiAqLworCXJldHVybiB0cnVlOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkJ aW5kZXhfZ2V0bmV4dF9iYXRjaF90aWQgLSBnZXQgdGhlIG5leHQgVElEIGZyb20gdGhlIGN1 cnJlbnQgYmF0Y2gKKyAqCisgKiBTYW1lIGNhbGxpbmcgY29udmVudGlvbiBhcyBpbmRleF9n ZXRuZXh0X3RpZCgpLCBleGNlcHQgdGhhdCBOVUxMIG1lYW5zCisgKiBubyBtb3JlIGl0ZW1z IGluIHRoZSBjdXJyZW50IGJhdGNoLCB0aGVyZSBtYXkgYmUgbW9yZSBiYXRjaGVzLgorICoK KyAqIFhYWCBUaGlzIG9ubHkgc2V0cyB4c19oZWFwdGlkIGFuZCB4c19pdHVwIChpZiByZXF1 ZXN0ZWQpLiBOb3Qgc3VyZSBpZgorICogd2UgbmVlZCB0byBkbyBzb21ldGhpbmcgd2l0aCB4 c19oaXR1cC4KKyAqCisgKiBGSVhNRSBTaG91bGQgdGhpcyBzZXQgeHNfaGl0dXA/CisgKiAt LS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyBJdGVtUG9pbnRlcgoraW5kZXhfYmF0Y2hf Z2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlv bikKK3sKKwkvKiBjb21wcmVoZW5zaXZlIGNoZWNrcyBvZiBiYXRjaGluZyBpbmZvICovCisJ QXNzZXJ0Q2hlY2tCYXRjaEluZm8oc2Nhbik7CisKKwkvKgorCSAqIEJhaWwgb3V0IGlmIGhl IGJhdGNoIGRvZXMgbm90IGhhdmUgbW9yZSBpdGVtcyBpbiB0aGUgcmVxdWVzdGVkIGRpcmVj dGlvCisJICogKGVpdGhlciBlbXB0eSBvciBldmVydGhpbmcgcHJvY2Vzc2VkKS4KKwkgKi8K KwlpZiAoIUlOREVYX0JBVENIX0hBU19JVEVNUyhzY2FuLCBkaXJlY3Rpb24pKQorCQlyZXR1 cm4gTlVMTDsKKworCS8qCisJICogQWR2YW5jZSB0byB0aGUgbmV4dCBiYXRjaCBpdGVtIC0g d2Uga25vdyBpdCdzIG5vdCBlbXB0eSBhbmQgdGhlcmUgYXJlCisJICogaXRlbXMgdG8gcHJv Y2Vzcywgc28gdGhpcyBpcyB2YWxpZC4KKwkgKi8KKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9y d2FyZChkaXJlY3Rpb24pKQorCQlzY2FuLT54c19iYXRjaC0+Y3VyckluZGV4Kys7CisJZWxz ZQorCQlzY2FuLT54c19iYXRjaC0+Y3VyckluZGV4LS07CisKKwkvKgorCSAqIE5leHQgVElE IGZyb20gdGhlIGJhdGNoLCBvcHRpb25hbGx5IGFsc28gdGhlIEluZGV4VHVwbGUvSGVhcFR1 cGxlLgorCSAqCisJICogWFhYIE5vdCBzdXJlIGhvdyB0byBkZWNpZGUgd2hpY2ggb2YgdGhl IHR1cGxlcyB0byBzZXQsIHNlZW1zIGVhc2llciB0bworCSAqIGp1c3Qgc2V0IGJvdGgsIG9u ZSBvZiB0aGVtIHdpbGwgYmUgTlVMTC4KKwkgKgorCSAqIFhYWCBEbyB3ZSBuZWVkIHRvIHJl c2V0IHRoZSBpdHVwcy9odHVwcyBhcnJheSBiZXR3ZWVuIGJhdGNoZXM/IERvZXNuJ3QKKwkg KiBzZWVtIG5lY2Vzc2FyeSwgYnV0IG1heWJlIHdlIGNvdWxkIGdldCBib2d1cyBkYXRhPwor CSAqLworCXNjYW4tPnhzX2hlYXB0aWQgPSBzY2FuLT54c19iYXRjaC0+aGVhcHRpZHNbc2Nh bi0+eHNfYmF0Y2gtPmN1cnJJbmRleF07CisJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwl7 CisJCXNjYW4tPnhzX2l0dXAgPSBzY2FuLT54c19iYXRjaC0+aXR1cHNbc2Nhbi0+eHNfYmF0 Y2gtPmN1cnJJbmRleF07CisJCXNjYW4tPnhzX2hpdHVwID0gc2Nhbi0+eHNfYmF0Y2gtPmh0 dXBzW3NjYW4tPnhzX2JhdGNoLT5jdXJySW5kZXhdOworCX0KKworCXNjYW4tPnhzX3JlY2hl Y2sgPSBzY2FuLT54c19iYXRjaC0+cmVjaGVja1tzY2FuLT54c19iYXRjaC0+Y3VyckluZGV4 XTsKKworCS8qCisJICogSWYgdGhlcmUgYXJlIG9yZGVyLWJ5IGNsYXVzZXMsIHBvaW50IHRv IHRoZSBhcHByb3ByaWF0ZSBjaHVuayBpbiB0aGUKKwkgKiBhcnJheXMuCisJICovCisJaWYg KHNjYW4tPm51bWJlck9mT3JkZXJCeXMgPiAwKQorCXsKKwkJaW50CQkJaWR4ID0gc2Nhbi0+ bnVtYmVyT2ZPcmRlckJ5cyAqIHNjYW4tPnhzX2JhdGNoLT5jdXJySW5kZXg7CisKKwkJc2Nh bi0+eHNfb3JkZXJieXZhbHMgPSAmc2Nhbi0+eHNfYmF0Y2gtPm9yZGVyYnl2YWxzW2lkeF07 CisJCXNjYW4tPnhzX29yZGVyYnludWxscyA9ICZzY2FuLT54c19iYXRjaC0+b3JkZXJieW51 bGxzW2lkeF07CisJfQorCisJLyogY29tcHJlaGVuc2l2ZSBjaGVja3Mgb2YgYmF0Y2hpbmcg aW5mbyAqLworCUFzc2VydENoZWNrQmF0Y2hJbmZvKHNjYW4pOworCisJcmV0dXJuICZzY2Fu LT54c19oZWFwdGlkOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkJaW5kZXhfYmF0 Y2hfcHJlZmV0Y2ggLSBwcmVmZXRjaCBwYWdlcyBmb3IgVElEcyBpbiBjdXJyZW50IGJhdGNo CisgKgorICogVGhlIHByZWZldGNoIGRpc3RhbmNlIGlzIGluY3JlYXNlZCBncmFkdWFsbHks IHNpbWlsYXIgdG8gd2hhdCB3ZSBkbyBmb3IKKyAqIGJpdG1hcCBoZWFwIHNjYW5zLiBXZSBz dGFydCBmcm9tIGRpc3RhbmNlIDAgKG5vIHByZWZldGNoKSwgYW5kIHRoZW4gaW4gZWFjaAor ICogaXRlcmF0aW9uIGluY3JlbWVudCB0aGUgZGlzdGFuY2UgdXAgdG8gcHJlZmV0Y2hNYXhp bXVtLgorICoKKyAqIFRoZSBwcmVmZXRjaCBkaXN0YW5jZSBpcyByZXNldCAodG8gMCkgb25s eSBvbiByZXNjYW5zLCBub3QgYmV0d2VlbiBiYXRjaGVzLgorICoKKyAqIEl0J3MgcG9zc2li bGUgdG8gcHJvdmlkZSBhbiBpbmRleF9wcmVmZXRjaF9jYWxsYmFjayBjYWxsYmFjaywgdG8g YWZmZWN0CisgKiB3aGljaCBpdGVtcyBuZWVkIHRvIGJlIHByZWZldGNoZWQuIFdpdGggcHJl ZmV0Y2hfY2FsbGJhY2s9TlVMTCwgYWxsCisgKiBpdGVtcyBhcmUgcHJlZmV0Y2hlZC4gV2l0 aCB0aGUgY2FsbGJhY2sgcHJvdmlkZWQsIHRoZSBpdGVtIGlzIHByZWZldGNoZWQKKyAqIGlm ZiB0aGUgY2FsbGJhY2sgYW5kIHJldHVybnMgdHJ1ZS4KKyAqCisgKiBUaGUgImFyZyIgYXJn dW1lbnQgaXMgdXNlZCB0byBwYXNzIGEgc3RhdGUgZm9yIHRoZSBwbGFuIG5vZGUgaW52b2tp bmcgdGhlCisgKiBmdW5jdGlvbiwgYW5kIGlzIHRoZW4gcGFzc2VkIHRvIHRoZSBjYWxsYmFj ay4gVGhpcyBtZWFucyB0aGUgY2FsbGJhY2sgaXMKKyAqIHNwZWNpZmljIHRvIHRoZSBwbGFu IHN0YXRlLgorICoKKyAqIFhYWCB0aGUgcHJlZmV0Y2hNYXhpbXVtIGRlcGVuZHMgb24gZWZm ZWN0aXZlX2lvX2NvbmN1cnJlbmN5LCBhbmQgYWxzbyBvbgorICogdGFibGVzcGFjZSBvcHRp b25zLgorICoKKyAqIFhYWCBGb3IgYWNjZXNzZXMgdGhhdCBjaGFuZ2Ugc2NhbiBkaXJlY3Rp b24sIHdlIG1heSBkbyBhIGxvdCBvZiB1bm5lY2Vzc2FyeQorICogcHJlZmV0Y2hpbmcgKGJl Y2F1c2Ugd2Ugd2lsbCByZS1pc3N1ZSBwcmVmZXRjaGVzIGZvciB3aGF0IHdlIHJlY2VudGx5 IHJlYWQpLgorICogSSdtIG5vdCBzdXJlIGlmIHRoZXJlJ3MgYSBzaW1wbGUgd2F5IHRvIHRy YWNrIHdoYXQgd2FzIGFscmVhZHkgcHJlZmV0Y2hlZC4KKyAqIE1heWJlIHdlIGNvdWxkIGNv dW50IGhvdyBmYXIgd2UgZ290IChpbiB0aGUgZm9yd2FyZCBkaXJlY3Rpb24pLCBrZWVwIHRo YXQKKyAqIGFzIGEgd2F0ZXJtYXJrLCBhbmQgbmV2ZXIgcHJlZmV0Y2ggYWdhaW4gYmVsb3cg aXQuCisgKgorICogWFhYIE1heWJlIHdyYXAgdGhpcyBpbiBpZmRlZiBVU0VfUFJFRkVUQ0g/ CisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyB2b2lkCitpbmRleF9iYXRjaF9w cmVmZXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQor eworCWludAkJCXByZWZldGNoU3RhcnQsCisJCQkJcHJlZmV0Y2hFbmQ7CisKKwlJbmRleFBy ZWZldGNoQ2FsbGJhY2sJcHJlZmV0Y2hfY2FsbGJhY2sgPSBzY2FuLT54c19iYXRjaC0+cHJl ZmV0Y2hDYWxsYmFjazsKKwl2b2lkICphcmcgPSBzY2FuLT54c19iYXRjaC0+cHJlZmV0Y2hB cmd1bWVudDsKKworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikpCisJ eworCQkvKiBXaGVyZSBzaG91bGQgd2Ugc3RhcnQgdG8gcHJlZmV0Y2g/ICovCisJCXByZWZl dGNoU3RhcnQgPSBNYXgoc2Nhbi0+eHNfYmF0Y2gtPmN1cnJJbmRleCwKKwkJCQkJCQlzY2Fu LT54c19iYXRjaC0+cHJlZmV0Y2hJbmRleCk7CisKKwkJLyoKKwkJICogV2hlcmUgc2hvdWxk IHdlIHN0b3AgcHJlZmV0Y2hpbmc/IHRoaXMgaXMgdGhlIGZpcnN0IGl0ZW0gdGhhdCB3ZSBk bworCQkgKiBOT1QgcHJlZmV0Y2gsIGkuZS4gaXQgY2FuIGJlIHRoZSBmaXJzdCBpdGVtIGFm dGVyIHRoZSBiYXRjaC4KKwkJICovCisJCXByZWZldGNoRW5kID0gTWluKChzY2FuLT54c19i YXRjaC0+Y3VyckluZGV4ICsgMSkgKyBzY2FuLT54c19iYXRjaC0+cHJlZmV0Y2hUYXJnZXQs CisJCQkJCQkgIHNjYW4tPnhzX2JhdGNoLT5uaGVhcHRpZHMpOworCisJCS8qIEZJWE1FIHNo b3VsZCBjYWxjdWxhdGUgaW4gYSB3YXkgdG8gbWFrZSB0aGlzIHVubmVjZXNzYXJ5ICovCisJ CXByZWZldGNoU3RhcnQgPSBNYXgoTWluKHByZWZldGNoU3RhcnQsIHNjYW4tPnhzX2JhdGNo LT5uaGVhcHRpZHMgLSAxKSwgMCk7CisJCXByZWZldGNoRW5kID0gTWF4KE1pbihwcmVmZXRj aEVuZCwgc2Nhbi0+eHNfYmF0Y2gtPm5oZWFwdGlkcyAtIDEpLCAwKTsKKworCQkvKiByZW1l bWJlciBob3cgZmFyIHdlIHByZWZldGNoZWQgLyB3aGVyZSB0byBzdGFydCB0aGUgbmV4dCBw cmVmZXRjaCAqLworCQlzY2FuLT54c19iYXRjaC0+cHJlZmV0Y2hJbmRleCA9IHByZWZldGNo RW5kOworCX0KKwllbHNlCisJeworCQkvKiBXaGVyZSBzaG91bGQgd2Ugc3RhcnQgdG8gcHJl ZmV0Y2g/ICovCisJCXByZWZldGNoRW5kID0gTWluKHNjYW4tPnhzX2JhdGNoLT5jdXJySW5k ZXgsCisJCQkJCQkgIHNjYW4tPnhzX2JhdGNoLT5wcmVmZXRjaEluZGV4KTsKKworCQkvKgor CQkgKiBXaGVyZSBzaG91bGQgd2Ugc3RvcCBwcmVmZXRjaGluZz8gdGhpcyBpcyB0aGUgZmly c3QgaXRlbSB0aGF0IHdlIGRvCisJCSAqIE5PVCBwcmVmZXRjaCwgaS5lLiBpdCBjYW4gYmUg dGhlIGZpcnN0IGl0ZW0gYWZ0ZXIgdGhlIGJhdGNoLgorCQkgKi8KKwkJcHJlZmV0Y2hTdGFy dCA9IE1heCgoc2Nhbi0+eHNfYmF0Y2gtPmN1cnJJbmRleCAtIDEpIC0gc2Nhbi0+eHNfYmF0 Y2gtPnByZWZldGNoVGFyZ2V0LAorCQkJCQkJCS0xKTsKKworCQkvKiBGSVhNRSBzaG91bGQg Y2FsY3VsYXRlIGluIGEgd2F5IHRvIG1ha2UgdGhpcyB1bm5lY2Vzc2FyeSAqLworCQlwcmVm ZXRjaFN0YXJ0ID0gTWF4KE1pbihwcmVmZXRjaFN0YXJ0LCBzY2FuLT54c19iYXRjaC0+bmhl YXB0aWRzIC0gMSksIDApOworCQlwcmVmZXRjaEVuZCA9IE1heChNaW4ocHJlZmV0Y2hFbmQs IHNjYW4tPnhzX2JhdGNoLT5uaGVhcHRpZHMgLSAxKSwgMCk7CisKKwkJLyogcmVtZW1iZXIg aG93IGZhciB3ZSBwcmVmZXRjaGVkIC8gd2hlcmUgdG8gc3RhcnQgdGhlIG5leHQgcHJlZmV0 Y2ggKi8KKwkJc2Nhbi0+eHNfYmF0Y2gtPnByZWZldGNoSW5kZXggPSBwcmVmZXRjaFN0YXJ0 OworCX0KKworCS8qCisJICogSXQncyBwb3NzaWJsZSB3ZSBnZXQgaW52ZXJ0ZWQgcHJlZmV0 Y2ggcmFuZ2UgYWZ0ZXIgYSByZXN0cnBvcygpIGNhbGwsCisJICogYmVjYXVzZSB3ZSBpbnRl bnRpb25hbGx5IGRvbid0IHJlc2V0IHRoZSBwcmVmZXRjaEluZGV4IC0gd2UgZG9uJ3Qgd2Fu dAorCSAqIHRvIHByZWZldGNoIHBhZ2VzIG92ZXIgYW5kIG92ZXIgaW4gdGhpcyBjYXNlLiBX ZSdsbCBkbyBub3RoaW5nIGluIHRoYXQKKwkgKiBjYXNlLCBleGNlcHQgZm9yIHRoZSBBc3Nl cnRDaGVja0JhdGNoSW5mbygpLgorCSAqCisJICogRklYTUUgSSBzdXNwZWN0IHRoaXMgYWN0 dWFsbHkgZG9lcyBub3Qgd29yayBjb3JyZWN0bHkgaWYgd2UgY2hhbmdlIHRoZQorCSAqIGRp cmVjdGlvbiwgYmVjYXVzZSB0aGUgcHJlZmV0Y2hJbmRleCB3aWxsIGZsaXAgYmV0d2VlbiB0 d28gZXh0cmVtZXMKKwkgKiB0aGFua3MgdG8gdGhlIE1pbi9NYXguCisJICovCisKKwkvKgor CSAqIEluY3JlYXNlIHRoZSBwcmVmZXRjaCBkaXN0YW5jZSwgYnV0IG5vdCBiZXlvbmQgcHJl ZmV0Y2hNYXhpbXVtLiBXZQorCSAqIGludGVudGlvbmFsbHkgZG8gdGhpcyBhZnRlciBjYWxj dWxhdGluZyBzdGFydC9lbmQsIHNvIHRoYXQgd2Ugc3RhcnQKKwkgKiBhY3R1YWxseSBwcmVm ZXRjaGluZyBvbmx5IGFmdGVyIHRoZSBmaXJzdCBpdGVtLgorCSAqLworCXNjYW4tPnhzX2Jh dGNoLT5wcmVmZXRjaFRhcmdldCA9IE1pbihzY2FuLT54c19iYXRjaC0+cHJlZmV0Y2hUYXJn ZXQgKyAxLAorCQkJCQkJCQkJCSBzY2FuLT54c19iYXRjaC0+cHJlZmV0Y2hNYXhpbXVtKTsK KworCS8qIGNvbXByZWhlbnNpdmUgY2hlY2tzIG9mIGJhdGNoaW5nIGluZm8gKi8KKwlBc3Nl cnRDaGVja0JhdGNoSW5mbyhzY2FuKTsKKworCS8qIGZpbmFsbHksIGRvIHRoZSBhY3R1YWwg cHJlZmV0Y2hpbmcgKi8KKwlmb3IgKGludCBpID0gcHJlZmV0Y2hTdGFydDsgaSA8IHByZWZl dGNoRW5kOyBpKyspCisJeworCQkvKiBza2lwIGJsb2NrIGlmIHRoZSBwcm92aWRlZCBjYWxs YmFjayBzYXlzIHNvICovCisJCWlmIChwcmVmZXRjaF9jYWxsYmFjayAmJiAhcHJlZmV0Y2hf Y2FsbGJhY2soc2NhbiwgYXJnLCBpKSkKKwkJCWNvbnRpbnVlOworCisJCVByZWZldGNoQnVm ZmVyKHNjYW4tPmhlYXBSZWxhdGlvbiwgTUFJTl9GT1JLTlVNLAorCQkJCQkgICBJdGVtUG9p bnRlckdldEJsb2NrTnVtYmVyKCZzY2FuLT54c19iYXRjaC0+aGVhcHRpZHNbaV0pKTsKKwl9 Cit9CisKKy8qCisgKiBpbmRleF9iYXRjaF9pbml0CisgKgkJSW5pdGlhbGl6ZSB2YXJpb3Vz IGZpZWxkcyAvIGFycmF5cyBuZWVkZWQgYnkgYmF0Y2hpbmcuCisgKgorICogRklYTUUgVGhp cyBpcyBhIGJpdCBhZC1ob2MgaG9kZ2UgcG9kZ2UsIGR1ZSB0byBob3cgSSB3YXMgYWRkaW5n IG1vcmUgYW5kCisgKiBtb3JlIHBpZWNlcy4gU29tZSBvZiB0aGUgZmllbGRzIG1heSBiZSBu b3QgcXVpdGUgbmVjZXNzYXJ5LCBuZWVkcyBjbGVhbnVwLgorICovCitzdGF0aWMgdm9pZAor aW5kZXhfYmF0Y2hfaW5pdChJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJLyogaW5pdCBiYXRj aGluZyBpbmZvLCBidXQgb25seSBpZiBiYXRjaCBzdXBwb3J0ZWQgKi8KKwlBc3NlcnQoc2Nh bi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7CisKKwlz Y2FuLT54c19iYXRjaCA9IHBhbGxvYzAoc2l6ZW9mKEluZGV4U2NhbkJhdGNoRGF0YSkpOwor CisJLyoKKwkgKiBTZXQgc29tZSByZWFzb25hYmxlIGJhdGNoIHNpemUgZGVmYXVsdHMuCisJ ICoKKwkgKiBYWFggTWF5YmUgc2hvdWxkIGRlcGVuZCBvbiBwcmVmZXRjaCBkaXN0YW5jZSwg b3Igc29tZXRoaW5nIGxpa2UgdGhhdD8KKwkgKiBUaGUgaW5pdFNpemUgd2lsbCBhZmZlY3Qg aG93IGZhciBhaGVhZCB3ZSBjYW4gcHJlZmV0Y2guCisJICovCisJc2Nhbi0+eHNfYmF0Y2gt Pm1heFNpemUgPSA2NDsKKwlzY2FuLT54c19iYXRjaC0+aW5pdFNpemUgPSA4OworCXNjYW4t PnhzX2JhdGNoLT5jdXJyU2l6ZSA9IHNjYW4tPnhzX2JhdGNoLT5pbml0U2l6ZTsKKworCS8q IGluaXRpYWxpemUgcHJlZmV0Y2hpbmcgaW5mbyAqLworCXNjYW4tPnhzX2JhdGNoLT5wcmVm ZXRjaE1heGltdW0gPQorCQlnZXRfdGFibGVzcGFjZV9pb19jb25jdXJyZW5jeShzY2FuLT5o ZWFwUmVsYXRpb24tPnJkX3JlbC0+cmVsdGFibGVzcGFjZSk7CisJc2Nhbi0+eHNfYmF0Y2gt PnByZWZldGNoVGFyZ2V0ID0gMDsKKwlzY2FuLT54c19iYXRjaC0+cHJlZmV0Y2hJbmRleCA9 IDA7CisKKwkvKiAqLworCXNjYW4tPnhzX2JhdGNoLT5jdXJySW5kZXggPSAtMTsKKworCS8q IFByZWFsbG9jYXRlIHRoZSBsYXJnZXN0IGFsbG93ZWQgYXJyYXkgb2YgVElEcy4gKi8KKwlz Y2FuLT54c19iYXRjaC0+bmhlYXB0aWRzID0gMDsKKwlzY2FuLT54c19iYXRjaC0+aGVhcHRp ZHMgPSBwYWxsb2MwKHNpemVvZihJdGVtUG9pbnRlckRhdGEpICogc2Nhbi0+eHNfYmF0Y2gt Pm1heFNpemUpOworCisJLyoKKwkgKiBYWFggV2UgY2FuJ3QgY2hlY2sgc2Nhbi0+eHNfd2Fu dF9pdHVwLCBiZWNhdXNlIHRoYXQncyBzZXQgb25seSBhZnRlcgorCSAqIHRoZSBzY2FuIGlz IGluaXRpYWxpemVkIChhbmQgd2UgaW5pdGlhbGl6ZSBpbiBiZWdpbnNjYW4pLiBNYXliZSB3 ZQorCSAqIGNvdWxkIChvciBzaG91bGQpIGFsbG9jYXRlIGxhemlseS4KKwkgKi8KKwlzY2Fu LT54c19iYXRjaC0+aXR1cHMgPSBwYWxsb2Moc2l6ZW9mKEluZGV4VHVwbGUpICogc2Nhbi0+ eHNfYmF0Y2gtPm1heFNpemUpOworCXNjYW4tPnhzX2JhdGNoLT5odHVwcyA9IHBhbGxvYyhz aXplb2YoSGVhcFR1cGxlKSAqIHNjYW4tPnhzX2JhdGNoLT5tYXhTaXplKTsKKworCXNjYW4t PnhzX2JhdGNoLT5yZWNoZWNrID0gcGFsbG9jKHNpemVvZihib29sKSAqIHNjYW4tPnhzX2Jh dGNoLT5tYXhTaXplKTsKKworCS8qCisJICogWFhYIE1heWJlIHVzZSBhIG1vcmUgY29tcGFj dCBiaXRtYXA/IFdlIG5lZWQganVzdCBvbmUgYml0IHBlciBlbGVtZW50LAorCSAqIG5vdCBh IGJvb2wuIFRoaXMgaXMgZWFzaWVyIC8gbW9yZSBjb252ZW5pZW50IHRvIG1hbmlwdWxhdGUs IHRob3VnaC4KKwkgKgorCSAqIFhYWCBNYXliZSBzaG91bGQgYWxsb3cgbW9yZSBpdGVtcyB0 aGFudCB0aGUgbWF4IGJhdGNoIHNpemU/CisJICovCisJc2Nhbi0+eHNfYmF0Y2gtPm5LaWxs ZWRJdGVtcyA9IDA7CisJc2Nhbi0+eHNfYmF0Y2gtPmtpbGxlZEl0ZW1zID0gKGludCAqKSBw YWxsb2MwKHNpemVvZihpbnQpICogc2Nhbi0+eHNfYmF0Y2gtPm1heFNpemUpOworCisJLyoK KwkgKiBYWFggTWF5YmUgYWxsb2NhdGUgb25seSB3aGVuIGFjdHVhbGx5IG5lZWRlZD8gQWxz bywgc2hvdWxkbid0IHdlIGhhdmUgYQorCSAqIG1lbW9yeSBjb250ZXh0IGZvciB0aGUgcHJp dmF0ZSBkYXRhPworCSAqLworCXNjYW4tPnhzX2JhdGNoLT5wcml2YXRlRGF0YSA9IChEYXR1 bSAqKSBwYWxsb2MwKHNpemVvZihEYXR1bSkgKiBzY2FuLT54c19iYXRjaC0+bWF4U2l6ZSk7 CisKKwlpZiAoc2Nhbi0+bnVtYmVyT2ZPcmRlckJ5cyA+IDApCisJeworCQlpbnQJCQljbnQg PSAoc2Nhbi0+eHNfYmF0Y2gtPm1heFNpemUgKiBzY2FuLT5udW1iZXJPZk9yZGVyQnlzKTsK KworCQlzY2FuLT54c19iYXRjaC0+b3JkZXJieXZhbHMgPSAoRGF0dW0gKikgcGFsbG9jMChz aXplb2YoRGF0dW0pICogY250KTsKKwkJc2Nhbi0+eHNfYmF0Y2gtPm9yZGVyYnludWxscyA9 IChib29sICopIHBhbGxvYzAoc2l6ZW9mKERhdHVtKSAqIGNudCk7CisJfQorCWVsc2UKKwl7 CisJCXNjYW4tPnhzX2JhdGNoLT5vcmRlcmJ5dmFscyA9IE5VTEw7CisJCXNjYW4tPnhzX2Jh dGNoLT5vcmRlcmJ5bnVsbHMgPSBOVUxMOworCX0KKworCXNjYW4tPnhzX2JhdGNoLT5jdHgg PSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJ CQkJCQkiaW5kZXhzY2FuIGJhdGNoIGNvbnRleHQiLAorCQkJCQkJCQkJCQkJQUxMT0NTRVRf REVGQVVMVF9TSVpFUyk7CisKKwkvKiBjb21wcmVoZW5zaXZlIGNoZWNrcyAqLworCUFzc2Vy dENoZWNrQmF0Y2hJbmZvKHNjYW4pOworfQorCisvKgorICogaW5kZXhfYmF0Y2hfcmVzZXQK KyAqCQlSZXNldCB0aGUgYmF0Y2ggYmVmb3JlIHJlYWRpbmcgdGhlIG5leHQgY2h1bmsgb2Yg ZGF0YS4KKyAqCisgKiBGSVhNRSBBbm90aGVyIGJpdCBpbiBuZWVkIG9mIGNsZWFudXAuIFRo ZSBjdXJySW5kZXggZGVmYXVsdCAoLTEpIGlzIG5vdCBxdWl0ZQorICogY29ycmVjdCwgYmVj YXVzZSBmb3IgYmFja3dhcmRzIHNjYW5zIGlzIHdyb25nLgorICovCitzdGF0aWMgdm9pZAor aW5kZXhfYmF0Y2hfcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCS8qIGJhaWwgb3V0 IGlmIGJhdGNoaW5nIG5vdCBlbmFibGVkICovCisJaWYgKCFzY2FuLT54c19iYXRjaCkKKwkJ cmV0dXJuOworCisJc2Nhbi0+eHNfYmF0Y2gtPm5oZWFwdGlkcyA9IDA7CisJc2Nhbi0+eHNf YmF0Y2gtPnByZWZldGNoSW5kZXggPSAwOworCXNjYW4tPnhzX2JhdGNoLT5jdXJySW5kZXgg PSAtMTsKK30KKworLyoKKyAqIGluZGV4X2JhdGNoX2FkZAorICoJCUFkZCBhbiBpdGVtIHRv IHRoZSBiYXRjaC4KKyAqCisgKiBUaGUgaXRlbSBpcyBhbHdheXMgYSBUSUQsIGFuZCB0aGVu IGFsc28gSW5kZXhUdXBsZSBpZiByZXF1ZXN0ZWQgKGZvciBJT1MpLgorICogSXRlbXMgYXJl IGFsd2F5cyBhZGRlZCBmcm9tIHRoZSBiZWdpbm5pbmcgKGluZGV4IDApLgorICoKKyAqIFJl dHVybnMgdHJ1ZSB3aGVuIGFkZGluZyB0aGUgaXRlbSB3YXMgc3VjY2Vzc2Z1bCwgb3IgZmFs c2Ugd2hlbiB0aGUgYmF0Y2gKKyAqIGlzIGZ1bGwgKGFuZCB0aGUgaXRlbSBzaG91bGQgYmUg YWRkZWQgdG8gdGhlIG5leHQgYmF0Y2gpLgorICovCitib29sCitpbmRleF9iYXRjaF9hZGQo SW5kZXhTY2FuRGVzYyBzY2FuLCBJdGVtUG9pbnRlckRhdGEgdGlkLCBib29sIHJlY2hlY2ss CisJCQkJSW5kZXhUdXBsZSBpdHVwLCBIZWFwVHVwbGUgaHR1cCkKK3sKKwkvKiBjb21wcmVo ZW5zaXZlIGNoZWNrcyBvbiB0aGUgYmF0Y2ggaW5mbyAqLworCUFzc2VydENoZWNrQmF0Y2hJ bmZvKHNjYW4pOworCisJLyogZG9uJ3QgYWRkIFRJRHMgYmV5b25kIHRoZSBjdXJyZW50IGJh dGNoIHNpemUgKi8KKwlpZiAoSU5ERVhfQkFUQ0hfSVNfRlVMTChzY2FuKSkKKwkJcmV0dXJu IGZhbHNlOworCisJLyoKKwkgKiBUaGVyZSBtdXN0IGJlIHNwYWNlIGZvciBhdCBsZWFzdCBv bmUgZW50cnkuCisJICoKKwkgKiBYWFggU2VlbXMgcmVkdW5kYW50IHdpdGggdGhlIGVhcmxp ZXIgSU5ERVhfQkFUQ0hfSVNfRlVMTCBjaGVjay4KKwkgKi8KKwlBc3NlcnQoc2Nhbi0+eHNf YmF0Y2gtPm5oZWFwdGlkcyA8IHNjYW4tPnhzX2JhdGNoLT5jdXJyU2l6ZSk7CisJQXNzZXJ0 KHNjYW4tPnhzX2JhdGNoLT5uaGVhcHRpZHMgPj0gMCk7CisKKwlzY2FuLT54c19iYXRjaC0+ aGVhcHRpZHNbc2Nhbi0+eHNfYmF0Y2gtPm5oZWFwdGlkc10gPSB0aWQ7CisJc2Nhbi0+eHNf YmF0Y2gtPnByaXZhdGVEYXRhW3NjYW4tPnhzX2JhdGNoLT5uaGVhcHRpZHNdID0gKERhdHVt KSAwOworCisJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwl7CisJCXNjYW4tPnhzX2JhdGNo LT5pdHVwc1tzY2FuLT54c19iYXRjaC0+bmhlYXB0aWRzXSA9IGl0dXA7CisJCXNjYW4tPnhz X2JhdGNoLT5odHVwc1tzY2FuLT54c19iYXRjaC0+bmhlYXB0aWRzXSA9IGh0dXA7CisJfQor CisJc2Nhbi0+eHNfYmF0Y2gtPnJlY2hlY2tbc2Nhbi0+eHNfYmF0Y2gtPm5oZWFwdGlkc10g PSByZWNoZWNrOworCisJaWYgKHNjYW4tPm51bWJlck9mT3JkZXJCeXMgPiAwKQorCXsKKwkJ aW50CQkJaWR4ID0gc2Nhbi0+eHNfYmF0Y2gtPm5oZWFwdGlkcyAqIHNjYW4tPm51bWJlck9m T3JkZXJCeXM7CisKKwkJbWVtY3B5KCZzY2FuLT54c19iYXRjaC0+b3JkZXJieXZhbHNbaWR4 XSwgc2Nhbi0+eHNfb3JkZXJieXZhbHMsIHNpemVvZihEYXR1bSkgKiBzY2FuLT5udW1iZXJP Zk9yZGVyQnlzKTsKKwkJbWVtY3B5KCZzY2FuLT54c19iYXRjaC0+b3JkZXJieW51bGxzW2lk eF0sIHNjYW4tPnhzX29yZGVyYnludWxscywgc2l6ZW9mKGJvb2wpICogc2Nhbi0+bnVtYmVy T2ZPcmRlckJ5cyk7CisJfQorCisJc2Nhbi0+eHNfYmF0Y2gtPm5oZWFwdGlkcysrOworCisJ LyogY29tcHJlaGVuc2l2ZSBjaGVja3Mgb24gdGhlIGJhdGNoIGluZm8gKi8KKwlBc3NlcnRD aGVja0JhdGNoSW5mbyhzY2FuKTsKKworCXJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMgYi9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjSW5kZXhpbmcuYwppbmRleCBmOWEyZmFjNzllNC4uNzQyYTk2M2JjMjkgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCisrKyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCkBAIC04MDksNyArODA5LDEyIEBA IGNoZWNrX2V4Y2x1c2lvbl9vcl91bmlxdWVfY29uc3RyYWludChSZWxhdGlvbiBoZWFwLCBS ZWxhdGlvbiBpbmRleCwKIHJldHJ5OgogCWNvbmZsaWN0ID0gZmFsc2U7CiAJZm91bmRfc2Vs ZiA9IGZhbHNlOwotCWluZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcCwgaW5kZXgs ICZEaXJ0eVNuYXBzaG90LCBpbmRua2V5YXR0cywgMCk7CisKKwkvKgorCSAqIFhYWCBEb2Vz IG5vdCBzZWVtIHVzZWZ1bCB0byBkbyBwcmVmZXRjaGluZyBmb3IgY2hlY2tzIG9mIGNvbnN0 cmFpbnRzLgorCSAqIFdlIHdvdWxkIHByb2JhYmx5IG5lZWQganVzdCB0aGUgZmlyc3QgaXRl bSBhbnl3YXkuCisJICovCisJaW5kZXhfc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwLCBp bmRleCwgJkRpcnR5U25hcHNob3QsIGluZG5rZXlhdHRzLCAwLCBmYWxzZSk7CiAJaW5kZXhf cmVzY2FuKGluZGV4X3NjYW4sIHNjYW5rZXlzLCBpbmRua2V5YXR0cywgTlVMTCwgMCk7CiAK IAl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KGluZGV4X3NjYW4sIEZvcndhcmRTY2FuRGly ZWN0aW9uLCBleGlzdGluZ19zbG90KSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNSZXBsaWNhdGlvbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxp Y2F0aW9uLmMKaW5kZXggNTQwMjVjOWYxNTAuLjZiZTM3NDQzNjFkIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYworKysgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYwpAQCAtMjQ0LDggKzI0NCwxMyBAQCBSZWxh dGlvbkZpbmRSZXBsVHVwbGVCeUluZGV4KFJlbGF0aW9uIHJlbCwgT2lkIGlkeG9pZCwKIAkv KiBCdWlsZCBzY2FuIGtleS4gKi8KIAlza2V5X2F0dG9mZiA9IGJ1aWxkX3JlcGxpbmRleF9z Y2FuX2tleShza2V5LCByZWwsIGlkeHJlbCwgc2VhcmNoc2xvdCk7CiAKLQkvKiBTdGFydCBh biBpbmRleCBzY2FuLiAqLwotCXNjYW4gPSBpbmRleF9iZWdpbnNjYW4ocmVsLCBpZHhyZWws ICZzbmFwLCBza2V5X2F0dG9mZiwgMCk7CisJLyoKKwkgKiBTdGFydCBhbiBpbmRleCBzY2Fu LgorCSAqCisJICogWFhYIE5vIHByZWZldGNoaW5nIGZvciByZXBsaWNhdGlvbiBpZGVudGl0 eS4gV2UgZXhwZWN0IHRvIGZpbmQganVzdCBvbmUKKwkgKiByb3csIHNvIHByZWZldGNoaW5n IGlzIHBvaW50bGVzcy4KKwkgKi8KKwlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKHJlbCwgaWR4 cmVsLCAmc25hcCwgc2tleV9hdHRvZmYsIDAsIGZhbHNlKTsKIAogcmV0cnk6CiAJZm91bmQg PSBmYWxzZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9u bHlzY2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCmlu ZGV4IDYxMmM2NzM4OTUwLi5jMDMwYzBkZjZmZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlSW5kZXhvbmx5c2Nhbi5jCkBAIC00OSw3ICs0OSwxMiBAQAogc3RhdGljIFR1cGxl VGFibGVTbG90ICpJbmRleE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSk7CiBz dGF0aWMgdm9pZCBTdG9yZUluZGV4VHVwbGUoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlLCBU dXBsZVRhYmxlU2xvdCAqc2xvdCwKIAkJCQkJCQlJbmRleFR1cGxlIGl0dXAsIFR1cGxlRGVz YyBpdHVwZGVzYyk7CitzdGF0aWMgYm9vbCBpb3NfcHJlZmV0Y2hfYmxvY2soSW5kZXhTY2Fu RGVzYyBzY2FuLCB2b2lkICpkYXRhLCBpbnQgaW5kZXgpOwogCisvKiB2YWx1ZXMgc3RvcmVk IGluIGlvc19wcmVmZXRjaF9ibG9jayBpbiB0aGUgYmF0Y2ggY2FjaGUgKi8KKyNkZWZpbmUJ CUlPU19VTktOT1dOX1ZJU0lCSUxJVFkJCTAJLyogWFhYIGRlZmF1bHQgdmFsdWUgKi8KKyNk ZWZpbmUJCUlPU19BTExfVklTSUJMRQkJCQkxCisjZGVmaW5lCQlJT1NfTk9UX0FMTF9WSVNJ QkxFCQkJMgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJSW5kZXhPbmx5TmV4dApAQCAtOTMsMTUg Kzk4LDIyIEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQkJ CQkJCQkgICBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywKIAkJCQkJCQkJICAgZXN0YXRlLT5l c19zbmFwc2hvdCwKIAkJCQkJCQkJICAgbm9kZS0+aW9zc19OdW1TY2FuS2V5cywKLQkJCQkJ CQkJICAgbm9kZS0+aW9zc19OdW1PcmRlckJ5S2V5cyk7CisJCQkJCQkJCSAgIG5vZGUtPmlv c3NfTnVtT3JkZXJCeUtleXMsCisJCQkJCQkJCSAgIG5vZGUtPmlvc3NfQ2FuQmF0Y2gpOwog CiAJCW5vZGUtPmlvc3NfU2NhbkRlc2MgPSBzY2FuZGVzYzsKIAotCiAJCS8qIFNldCBpdCB1 cCBmb3IgaW5kZXgtb25seSBzY2FuICovCiAJCW5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dh bnRfaXR1cCA9IHRydWU7CiAJCW5vZGUtPmlvc3NfVk1CdWZmZXIgPSBJbnZhbGlkQnVmZmVy OwogCisJCS8qIEFsc28gc2V0IHRoZSBwcmVmZXRjaCBjYWxsYmFjayBpbmZvLCBpZiBiYWNo aW5nIGVuYWJsZWQuICovCisJCWlmIChzY2FuZGVzYy0+eHNfYmF0Y2ggIT0gTlVMTCkKKwkJ eworCQkJc2NhbmRlc2MtPnhzX2JhdGNoLT5wcmVmZXRjaENhbGxiYWNrID0gaW9zX3ByZWZl dGNoX2Jsb2NrOworCQkJc2NhbmRlc2MtPnhzX2JhdGNoLT5wcmVmZXRjaEFyZ3VtZW50ID0g KHZvaWQgKikgbm9kZTsKKwkJfQorCiAJCS8qCiAJCSAqIElmIG5vIHJ1bi10aW1lIGtleXMg dG8gY2FsY3VsYXRlIG9yIHRoZXkgYXJlIHJlYWR5LCBnbyBhaGVhZCBhbmQKIAkJICogcGFz cyB0aGUgc2NhbmtleXMgdG8gdGhlIGluZGV4IEFNLgpAQCAtMTE5LDEwICsxMzEsMzggQEAg SW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJICovCiAJd2hpbGUg KCh0aWQgPSBpbmRleF9nZXRuZXh0X3RpZChzY2FuZGVzYywgZGlyZWN0aW9uKSkgIT0gTlVM TCkKIAl7CisJCWJvb2wJCWFsbF92aXNpYmxlOwogCQlib29sCQl0dXBsZV9mcm9tX2hlYXAg PSBmYWxzZTsKIAogCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCisJCS8qICovCisJCWlm IChzY2FuZGVzYy0+eHNfYmF0Y2ggPT0gTlVMTCkKKwkJeworCQkJYWxsX3Zpc2libGUgPSBW TV9BTExfVklTSUJMRShzY2FuZGVzYy0+aGVhcFJlbGF0aW9uLAorCQkJCQkJICBJdGVtUG9p bnRlckdldEJsb2NrTnVtYmVyKHRpZCksCisJCQkJCQkgICZub2RlLT5pb3NzX1ZNQnVmZmVy KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIElzIHRoZSBpbmRleCBvZiB0aGUgY3VycmVu dCBpdGVtIHZhbGlkIGZvciB0aGUgYmF0Y2g/ICovCisJCQlBc3NlcnQoKHNjYW5kZXNjLT54 c19iYXRjaC0+Y3VyckluZGV4ID49IDApICYmCisJCQkJICAgKHNjYW5kZXNjLT54c19iYXRj aC0+Y3VyckluZGV4IDwgc2NhbmRlc2MtPnhzX2JhdGNoLT5uaGVhcHRpZHMpKTsKKworCQkJ LyoKKwkJCSAqIFJldXNlIHRoZSBwcmV2aW91c2x5IGRldGVybWluZWQgcGFnZSB2aXNpYmls aXR5IGluZm8sIG9yCisJCQkgKiBjYWxjdWxhdGUgaXQgbm93LiBJZiB3ZSBkZWNpZGVkIG5v dCB0byBwcmVmZXRjaCB0aGUgYmxvY2ssIHRoZQorCQkJICogcGFnZSBoYXMgdG8gYmUgYWxs LXZpc2libGUuCisJCQkgKgorCQkJICogWFhYIEl0J3MgYSBiaXIgd2VpcmQgd2UgdXNlIHRo ZSB2aXNpYmlsaXR5IHRvIGRlY2lkZSBpZiB3ZQorCQkJICogc2hvdWxkIHNraXAgcHJlZmV0 Y2hpbmcgdGhlIGJsb2NrLCBhbmQgdGhlbiBkZWR1Y2UgdGhlCisJCQkgKiB2aXNpYmlsaXR5 IGZyb20gdGhhdC4gTWF5YmUgd2UgY291bGQvc2hvdWxkIGhhdmUgYSBtb3JlIGRpcmVjdAor CQkJICogd2F5PworCQkJICovCisJCQlhbGxfdmlzaWJsZSA9ICFpb3NfcHJlZmV0Y2hfYmxv Y2soc2NhbmRlc2MsIG5vZGUsCisJCQkJCQkJCQkJCSAgc2NhbmRlc2MtPnhzX2JhdGNoLT5j dXJySW5kZXgpOworCQl9CisKIAkJLyoKIAkJICogV2UgY2FuIHNraXAgdGhlIGhlYXAgZmV0 Y2ggaWYgdGhlIFRJRCByZWZlcmVuY2VzIGEgaGVhcCBwYWdlIG9uCiAJCSAqIHdoaWNoIGFs bCB0dXBsZXMgYXJlIGtub3duIHZpc2libGUgdG8gZXZlcnlib2R5LiAgSW4gYW55IGNhc2Us CkBAIC0xNTcsMTYgKzE5NywxNCBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0 ZSAqbm9kZSkKIAkJICogSXQncyB3b3J0aCBnb2luZyB0aHJvdWdoIHRoaXMgY29tcGxleGl0 eSB0byBhdm9pZCBuZWVkaW5nIHRvIGxvY2sKIAkJICogdGhlIFZNIGJ1ZmZlciwgd2hpY2gg Y291bGQgY2F1c2Ugc2lnbmlmaWNhbnQgY29udGVudGlvbi4KIAkJICovCi0JCWlmICghVk1f QUxMX1ZJU0lCTEUoc2NhbmRlc2MtPmhlYXBSZWxhdGlvbiwKLQkJCQkJCQlJdGVtUG9pbnRl ckdldEJsb2NrTnVtYmVyKHRpZCksCi0JCQkJCQkJJm5vZGUtPmlvc3NfVk1CdWZmZXIpKQor CQlpZiAoIWFsbF92aXNpYmxlKQogCQl7CiAJCQkvKgogCQkJICogUmF0cywgd2UgaGF2ZSB0 byB2aXNpdCB0aGUgaGVhcCB0byBjaGVjayB2aXNpYmlsaXR5LgogCQkJICovCiAJCQlJbnN0 ckNvdW50VHVwbGVzMihub2RlLCAxKTsKIAkJCWlmICghaW5kZXhfZmV0Y2hfaGVhcChzY2Fu ZGVzYywgbm9kZS0+aW9zc19UYWJsZVNsb3QpKQotCQkJCWNvbnRpbnVlOwkJLyogbm8gdmlz aWJsZSB0dXBsZSwgdHJ5IG5leHQgaW5kZXggZW50cnkgKi8KKwkJCQljb250aW51ZTsJLyog bm8gdmlzaWJsZSB0dXBsZSwgdHJ5IG5leHQgaW5kZXggZW50cnkgKi8KIAogCQkJRXhlY0Ns ZWFyVHVwbGUobm9kZS0+aW9zc19UYWJsZVNsb3QpOwogCkBAIC01NzQsNiArNjEyLDE2IEBA IEV4ZWNJbml0SW5kZXhPbmx5U2NhbihJbmRleE9ubHlTY2FuICpub2RlLCBFU3RhdGUgKmVz dGF0ZSwgaW50IGVmbGFncykKIAlpbmRleHN0YXRlLT5yZWNoZWNrcXVhbCA9CiAJCUV4ZWNJ bml0UXVhbChub2RlLT5yZWNoZWNrcXVhbCwgKFBsYW5TdGF0ZSAqKSBpbmRleHN0YXRlKTsK IAorCS8qCisJICogQ2FuJ3QgZG8gYmF0Y2hpbmcgKGFuZCB0aHVzIHByZWZldGNoaW5nKSB3 aGVuIHRoZSBwbGFuIHJlcXVpcmVzIG1hcmsKKwkgKiBhbmQgcmVzdG9yZS4gVGhlcmUncyBh biBpc3N1ZSB3aXRoIHRyYW5zbGF0aW5nIHRoZSBtYXJrL3Jlc3RvcmUKKwkgKiBwb3NpdGlv bnMgYmV0d2VlbiB0aGUgYmF0Y2ggaW4gc2NhbiBkZXNjcmlwdG9yIGFuZCB0aGUgb3JpZ2lu YWwKKwkgKiBwb3NpdGlvbiByZWNvZ25pemVkIGluIHRoZSBpbmRleCBBTS4KKwkgKgorCSAq IFhYWCBIb3BlZnVsbHkganVzdCBhIHRlbXBvcmFyeSBsaW1pdGF0aW9uPworCSAqLworCWlu ZGV4c3RhdGUtPmlvc3NfQ2FuQmF0Y2ggPSAhKGVmbGFncyAmIEVYRUNfRkxBR19NQVJLKTsK KwogCS8qCiAJICogSWYgd2UgYXJlIGp1c3QgZG9pbmcgRVhQTEFJTiAoaWUsIGFyZW4ndCBn b2luZyB0byBydW4gdGhlIHBsYW4pLCBzdG9wCiAJICogaGVyZS4gIFRoaXMgYWxsb3dzIGFu IGluZGV4LWFkdmlzb3IgcGx1Z2luIHRvIEVYUExBSU4gYSBwbGFuIGNvbnRhaW5pbmcKQEAg LTczNSwxMiArNzgzLDIwIEBAIEV4ZWNJbmRleE9ubHlTY2FuSW5pdGlhbGl6ZURTTShJbmRl eE9ubHlTY2FuU3RhdGUgKm5vZGUsCiAJCQkJCQkJCSAgZXN0YXRlLT5lc19zbmFwc2hvdCwK IAkJCQkJCQkJICBwaXNjYW4pOwogCXNobV90b2NfaW5zZXJ0KHBjeHQtPnRvYywgbm9kZS0+ c3MucHMucGxhbi0+cGxhbl9ub2RlX2lkLCBwaXNjYW4pOworCisJLyoKKwkgKiBYWFggZG8g d2UgYWN0dWFsbHkgd2FudCBwcmVmZXRjaGluZyBmb3IgcGFyYWxsZWwgaW5kZXggc2NhbnM/ IE1heWJlCisJICogbm90LCBidXQgdGhlbiB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRv IGNhbGwgaW5kZXhfYmF0Y2hfZ2V0bmV4dF90aWQKKwkgKiAod2hpY2ggbm93IGNhbiBoYXBw ZW4sIGJlY2F1c2Ugd2UnbGwgY2FsbCBJbmRleE9ubHlOZXh0IGV2ZW4gZm9yCisJICogcGFy YWxsZWwgcGxhbnMpLgorCSAqLwogCW5vZGUtPmlvc3NfU2NhbkRlc2MgPQogCQlpbmRleF9i ZWdpbnNjYW5fcGFyYWxsZWwobm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAogCQkJCQkJ CQkgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsCiAJCQkJCQkJCSBub2RlLT5pb3NzX051bVNj YW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aW9zc19OdW1PcmRlckJ5S2V5cywKLQkJCQkJCQkJ IHBpc2Nhbik7CisJCQkJCQkJCSBwaXNjYW4sCisJCQkJCQkJCSBub2RlLT5pb3NzX0NhbkJh dGNoKTsKIAlub2RlLT5pb3NzX1NjYW5EZXNjLT54c193YW50X2l0dXAgPSB0cnVlOwogCW5v ZGUtPmlvc3NfVk1CdWZmZXIgPSBJbnZhbGlkQnVmZmVyOwogCkBAIC03ODAsMTIgKzgzNiwx NSBAQCBFeGVjSW5kZXhPbmx5U2NhbkluaXRpYWxpemVXb3JrZXIoSW5kZXhPbmx5U2NhblN0 YXRlICpub2RlLAogCVBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwaXNjYW47CiAKIAlwaXNjYW4g PSBzaG1fdG9jX2xvb2t1cChwd2N4dC0+dG9jLCBub2RlLT5zcy5wcy5wbGFuLT5wbGFuX25v ZGVfaWQsIGZhbHNlKTsKKworCS8qIFhYWCBkbyB3ZSBhY3R1YWxseSB3YW50IHByZWZldGNo aW5nIGZvciBwYXJhbGxlbCBpbmRleCBzY2Fucz8gKi8KIAlub2RlLT5pb3NzX1NjYW5EZXNj ID0KIAkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxh dGlvbiwKIAkJCQkJCQkJIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjLAogCQkJCQkJCQkgbm9k ZS0+aW9zc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJIG5vZGUtPmlvc3NfTnVtT3JkZXJCeUtl eXMsCi0JCQkJCQkJCSBwaXNjYW4pOworCQkJCQkJCQkgcGlzY2FuLAorCQkJCQkJCQkgbm9k ZS0+aW9zc19DYW5CYXRjaCk7CiAJbm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVw ID0gdHJ1ZTsKIAogCS8qCkBAIC03OTcsMyArODU2LDM0IEBAIEV4ZWNJbmRleE9ubHlTY2Fu SW5pdGlhbGl6ZVdvcmtlcihJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUsCiAJCQkJCSBub2Rl LT5pb3NzX1NjYW5LZXlzLCBub2RlLT5pb3NzX051bVNjYW5LZXlzLAogCQkJCQkgbm9kZS0+ aW9zc19PcmRlckJ5S2V5cywgbm9kZS0+aW9zc19OdW1PcmRlckJ5S2V5cyk7CiB9CisKKy8q CisgKiBpb3NfcHJlZmV0Y2hfYmxvY2sKKyAqCQlDYWxsYmFjayB0byBvbmx5IHByZWZldGNo IGJsb2NrcyB0aGF0IGFyZSBub3QgYWxsLXZpc2libGUuCisgKgorICogV2UgZG9uJ3Qgd2Fu dCB0byBpbnNwZWN0IHRoZSB2aXNpYmlsaXR5IG1hcCByZXBlYXRlZGx5LCBzbyB0aGUgcmVz dWx0IG9mCisgKiBWTV9BTExfVklTSUJMRSBpcyBzdG9yZWQgaW4gdGhlIGJhdGNoIHByaXZh dGUgZGF0YS4gVGhlIHZhbHVlcyBhcmUgc2V0CisgKiB0byAwIGJ5IGRlZmF1bHQsIHNvIHdl IHVzZSB0d28gY29uc3RhbnRzIHRvIHJlbWVtYmVyIGlmIGFsbC12aXNpYmxlIG9yCisgKiBu b3QgYWxsLXZpc2libGUuCisgKi8KK3N0YXRpYyBib29sCitpb3NfcHJlZmV0Y2hfYmxvY2so SW5kZXhTY2FuRGVzYyBzY2FuLCB2b2lkICphcmcsIGludCBpbmRleCkKK3sKKwlJbmRleE9u bHlTY2FuU3RhdGUgKm5vZGUgPSAoSW5kZXhPbmx5U2NhblN0YXRlICopIGFyZzsKKworCWlm IChzY2FuLT54c19iYXRjaC0+cHJpdmF0ZURhdGFbaW5kZXhdID09IElPU19VTktOT1dOX1ZJ U0lCSUxJVFkpCisJeworCQlib29sCQlhbGxfdmlzaWJsZTsKKwkJSXRlbVBvaW50ZXIgdGlk ID0gJnNjYW4tPnhzX2JhdGNoLT5oZWFwdGlkc1tpbmRleF07CisKKwkJYWxsX3Zpc2libGUg PSBWTV9BTExfVklTSUJMRShzY2FuLT5oZWFwUmVsYXRpb24sCisJCQkJCQkJCQkgSXRlbVBv aW50ZXJHZXRCbG9ja051bWJlcih0aWQpLAorCQkJCQkJCQkJICZub2RlLT5pb3NzX1ZNQnVm ZmVyKTsKKworCQlzY2FuLT54c19iYXRjaC0+cHJpdmF0ZURhdGFbaW5kZXhdCisJCQk9IGFs bF92aXNpYmxlID8gSU9TX0FMTF9WSVNJQkxFIDogSU9TX05PVF9BTExfVklTSUJMRTsKKwl9 CisKKwkvKiBwcmVmZXRjaCBvbmx5IGJsb2NrcyB0aGF0IGFyZSBub3QgYWxsLXZpc2libGUg Ki8KKwlyZXR1cm4gKHNjYW4tPnhzX2JhdGNoLT5wcml2YXRlRGF0YVtpbmRleF0gPT0gSU9T X05PVF9BTExfVklTSUJMRSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlSW5kZXhzY2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2Fu LmMKaW5kZXggODAwMGZlZmY0YzkuLjhiYmQzNjA2NTY2IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZUluZGV4c2Nhbi5jCkBAIC0xMTAsNyArMTEwLDggQEAgSW5kZXhOZXh0KEluZGV4 U2NhblN0YXRlICpub2RlKQogCQkJCQkJCQkgICBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAog CQkJCQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAogCQkJCQkJCQkgICBub2RlLT5pc3Nf TnVtU2NhbktleXMsCi0JCQkJCQkJCSAgIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cyk7CisJ CQkJCQkJCSAgIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cywKKwkJCQkJCQkJICAgbm9kZS0+ aXNzX0NhbkJhdGNoKTsKIAogCQlub2RlLT5pc3NfU2NhbkRlc2MgPSBzY2FuZGVzYzsKIApA QCAtMjAwLDEyICsyMDEsMTUgQEAgSW5kZXhOZXh0V2l0aFJlb3JkZXIoSW5kZXhTY2FuU3Rh dGUgKm5vZGUpCiAJCS8qCiAJCSAqIFdlIHJlYWNoIGhlcmUgaWYgdGhlIGluZGV4IHNjYW4g aXMgbm90IHBhcmFsbGVsLCBvciBpZiB3ZSdyZQogCQkgKiBzZXJpYWxseSBleGVjdXRpbmcg YW4gaW5kZXggc2NhbiB0aGF0IHdhcyBwbGFubmVkIHRvIGJlIHBhcmFsbGVsLgorCQkgKgor CQkgKiBYWFggU2hvdWxkIHdlIHVzZSBiYXRjaGluZyBoZXJlPyBBbmQgY2FuIHdlIHdpdGgg cmVvcmRlcmluZz8KIAkJICovCiAJCXNjYW5kZXNjID0gaW5kZXhfYmVnaW5zY2FuKG5vZGUt PnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKIAkJCQkJCQkJICAgbm9kZS0+aXNzX1JlbGF0aW9u RGVzYywKIAkJCQkJCQkJICAgZXN0YXRlLT5lc19zbmFwc2hvdCwKIAkJCQkJCQkJICAgbm9k ZS0+aXNzX051bVNjYW5LZXlzLAotCQkJCQkJCQkgICBub2RlLT5pc3NfTnVtT3JkZXJCeUtl eXMpOworCQkJCQkJCQkgICBub2RlLT5pc3NfTnVtT3JkZXJCeUtleXMsCisJCQkJCQkJCSAg IGZhbHNlKTsKIAogCQlub2RlLT5pc3NfU2NhbkRlc2MgPSBzY2FuZGVzYzsKIApAQCAtOTQy LDYgKzk0NiwyMCBAQCBFeGVjSW5pdEluZGV4U2NhbihJbmRleFNjYW4gKm5vZGUsIEVTdGF0 ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCWluZGV4c3RhdGUtPmluZGV4b3JkZXJieW9yaWcg PQogCQlFeGVjSW5pdEV4cHJMaXN0KG5vZGUtPmluZGV4b3JkZXJieW9yaWcsIChQbGFuU3Rh dGUgKikgaW5kZXhzdGF0ZSk7CiAKKwkvKgorCSAqIENhbid0IGRvIGJhdGNoaW5nIChhbmQg dGh1cyBwcmVmZXRjaGluZykgd2hlbiB0aGUgcGxhbiByZXF1aXJlcyBtYXJrCisJICogYW5k IHJlc3RvcmUuIFRoZXJlJ3MgYW4gaXNzdWUgd2l0aCB0cmFuc2xhdGluZyB0aGUgbWFyay9y ZXN0b3JlCisJICogcG9zaXRpb25zIGJldHdlZW4gdGhlIGJhdGNoIGluIHNjYW4gZGVzY3Jp cHRvciBhbmQgdGhlIG9yaWdpbmFsCisJICogcG9zaXRpb24gcmVjb2duaXplZCBpbiB0aGUg aW5kZXggQU0uCisJICoKKwkgKiBYWFggSG9wZWZ1bGx5IGp1c3QgYSB0ZW1wb3JhcnkgbGlt aXRhdGlvbj8KKwkgKgorCSAqIFhYWCBNYXliZSB0aGlzIHNob3VsZCBjaGVjayBpZiB0aGUg aW5kZXggQU0gc3VwcG9ydHMgYmF0Y2hpbmcsIG9yIGV2ZW4KKwkgKiBjYWxsIHNvbWV0aGlu ZyBsaWtlICJhbWNhbmJhdGNoIiAoZG9lcyBub3QgZXhpc3QgeWV0KS4gT3IgY2hlY2sgdGhl CisJICogZW5hYmxlX2luZGV4c2Nhbl9iYXRjaGluZyBHVUM/IE5vdyB3ZSBjaGVjayB0aGUg R1VDIGluIGluZGV4X2JlZ2luc2Nhbi4KKwkgKi8KKwlpbmRleHN0YXRlLT5pc3NfQ2FuQmF0 Y2ggPSAhKGVmbGFncyAmIEVYRUNfRkxBR19NQVJLKTsKKwogCS8qCiAJICogSWYgd2UgYXJl IGp1c3QgZG9pbmcgRVhQTEFJTiAoaWUsIGFyZW4ndCBnb2luZyB0byBydW4gdGhlIHBsYW4p LCBzdG9wCiAJICogaGVyZS4gIFRoaXMgYWxsb3dzIGFuIGluZGV4LWFkdmlzb3IgcGx1Z2lu IHRvIEVYUExBSU4gYSBwbGFuIGNvbnRhaW5pbmcKQEAgLTE2NzAsMTIgKzE2ODgsMTcgQEAg RXhlY0luZGV4U2NhbkluaXRpYWxpemVEU00oSW5kZXhTY2FuU3RhdGUgKm5vZGUsCiAJCQkJ CQkJCSAgZXN0YXRlLT5lc19zbmFwc2hvdCwKIAkJCQkJCQkJICBwaXNjYW4pOwogCXNobV90 b2NfaW5zZXJ0KHBjeHQtPnRvYywgbm9kZS0+c3MucHMucGxhbi0+cGxhbl9ub2RlX2lkLCBw aXNjYW4pOworCisJLyoKKwkgKiBYWFggZG8gd2UgYWN0dWFsbHkgd2FudCBwcmVmZXRjaGlu ZyBmb3IgcGFyYWxsZWwgaW5kZXggc2NhbnM/CisJICovCiAJbm9kZS0+aXNzX1NjYW5EZXNj ID0KIAkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxh dGlvbiwKIAkJCQkJCQkJIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsCiAJCQkJCQkJCSBub2Rl LT5pc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSBub2RlLT5pc3NfTnVtT3JkZXJCeUtleXMs Ci0JCQkJCQkJCSBwaXNjYW4pOworCQkJCQkJCQkgcGlzY2FuLAorCQkJCQkJCQkgbm9kZS0+ aXNzX0NhbkJhdGNoKTsKIAogCS8qCiAJICogSWYgbm8gcnVuLXRpbWUga2V5cyB0byBjYWxj dWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFuZCBwYXNzCkBAIC0xNzEzLDEy ICsxNzM2LDE3IEBAIEV4ZWNJbmRleFNjYW5Jbml0aWFsaXplV29ya2VyKEluZGV4U2NhblN0 YXRlICpub2RlLAogCVBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwaXNjYW47CiAKIAlwaXNjYW4g PSBzaG1fdG9jX2xvb2t1cChwd2N4dC0+dG9jLCBub2RlLT5zcy5wcy5wbGFuLT5wbGFuX25v ZGVfaWQsIGZhbHNlKTsKKworCS8qCisJICogWFhYIGRvIHdlIGFjdHVhbGx5IHdhbnQgcHJl ZmV0Y2hpbmcgZm9yIHBhcmFsbGVsIGluZGV4IHNjYW5zPworCSAqLwogCW5vZGUtPmlzc19T Y2FuRGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5zcy5zc19jdXJy ZW50UmVsYXRpb24sCiAJCQkJCQkJCSBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAogCQkJCQkJ CQkgbm9kZS0+aXNzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aXNzX051bU9yZGVy QnlLZXlzLAotCQkJCQkJCQkgcGlzY2FuKTsKKwkJCQkJCQkJIHBpc2NhbiwKKwkJCQkJCQkJ IG5vZGUtPmlzc19DYW5CYXRjaCk7CiAKIAkvKgogCSAqIElmIG5vIHJ1bi10aW1lIGtleXMg dG8gY2FsY3VsYXRlIG9yIHRoZXkgYXJlIHJlYWR5LCBnbyBhaGVhZCBhbmQgcGFzcwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMgYi9zcmMvYmFja2Vu ZC91dGlscy9hZHQvc2VsZnVuY3MuYwppbmRleCAwOGZhNjc3NGQ5Yy4uMDJlYTBlZWExNDkg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCisrKyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCkBAIC02MzQzLDkgKzYzNDMsMTQgQEAg Z2V0X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludChSZWxhdGlvbiBoZWFwUmVsLAogCUluaXRO b25WYWN1dW1hYmxlU25hcHNob3QoU25hcHNob3ROb25WYWN1dW1hYmxlLAogCQkJCQkJCSAg R2xvYmFsVmlzVGVzdEZvcihoZWFwUmVsKSk7CiAKKwkvKgorCSAqIFhYWCBJJ20gbm90IHN1 cmUgYWJvdXQgYmF0Y2hpbmcvcHJlZmV0Y2hpbmcgaGVyZS4gSW4gbW9zdCBjYXNlcyB3ZQor CSAqIGV4cGVjdCB0byBmaW5kIHRoZSBlbmRwb2ludHMgaW1tZWRpYXRlbHksIGJ1dCBzb21l dGltZXMgd2UgaGF2ZSBhIGxvdAorCSAqIG9mIGRlYWQgdHVwbGVzIC0gYW5kIHRoZW4gcHJl ZmV0Y2hpbmcgbWlnaHQgaGVscC4KKwkgKi8KIAlpbmRleF9zY2FuID0gaW5kZXhfYmVnaW5z Y2FuKGhlYXBSZWwsIGluZGV4UmVsLAogCQkJCQkJCQkgJlNuYXBzaG90Tm9uVmFjdXVtYWJs ZSwKLQkJCQkJCQkJIDEsIDApOworCQkJCQkJCQkgMSwgMCwgZmFsc2UpOwogCS8qIFNldCBp dCB1cCBmb3IgaW5kZXgtb25seSBzY2FuICovCiAJaW5kZXhfc2Nhbi0+eHNfd2FudF9pdHVw ID0gdHJ1ZTsKIAlpbmRleF9yZXNjYW4oaW5kZXhfc2Nhbiwgc2NhbmtleXMsIDEsIE5VTEws IDApOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMg Yi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwppbmRleCA4YTY3ZjAxMjAw Yy4uOTY4MDY4NzI2MTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3Vj X3RhYmxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCkBA IC03ODksNiArNzg5LDE2IEBAIHN0cnVjdCBjb25maWdfYm9vbCBDb25maWd1cmVOYW1lc0Jv b2xbXSA9CiAJCXRydWUsCiAJCU5VTEwsIE5VTEwsIE5VTEwKIAl9LAorCXsKKwkJeyJlbmFi bGVfaW5kZXhzY2FuX2JhdGNoaW5nIiwgUEdDX1VTRVJTRVQsIFFVRVJZX1RVTklOR19NRVRI T0QsCisJCQlnZXR0ZXh0X25vb3AoIkVuYWJsZXMgdGhlIHBsYW5uZXIncyB1c2Ugb2YgaW5k ZXgtc2NhbiBiYXRjaGluZy4iKSwKKwkJCU5VTEwsCisJCQlHVUNfRVhQTEFJTgorCQl9LAor CQkmZW5hYmxlX2luZGV4c2Nhbl9iYXRjaGluZywKKwkJdHJ1ZSwKKwkJTlVMTCwgTlVMTCwg TlVMTAorCX0sCiAJewogCQl7ImVuYWJsZV9pbmRleG9ubHlzY2FuIiwgUEdDX1VTRVJTRVQs IFFVRVJZX1RVTklOR19NRVRIT0QsCiAJCQlnZXR0ZXh0X25vb3AoIkVuYWJsZXMgdGhlIHBs YW5uZXIncyB1c2Ugb2YgaW5kZXgtb25seS1zY2FuIHBsYW5zLiIpLApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCmluZGV4IDM5YTNhYzIz MTI3Li4yMGExYWY0N2RiMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9w b3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9z dGdyZXNxbC5jb25mLnNhbXBsZQpAQCAtMzk5LDYgKzM5OSw3IEBACiAjZW5hYmxlX2hhc2hq b2luID0gb24KICNlbmFibGVfaW5jcmVtZW50YWxfc29ydCA9IG9uCiAjZW5hYmxlX2luZGV4 c2NhbiA9IG9uCisjZW5hYmxlX2luZGV4c2Nhbl9iYXRjaGluZyA9IG9uCiAjZW5hYmxlX2lu ZGV4b25seXNjYW4gPSBvbgogI2VuYWJsZV9tYXRlcmlhbCA9IG9uCiAjZW5hYmxlX21lbW9p emUgPSBvbgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmggYi9zcmMv aW5jbHVkZS9hY2Nlc3MvYW1hcGkuaAppbmRleCBjNTFkZTc0MmVhMC4uOTY2YTI1ZDliYTMg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCisrKyBiL3NyYy9pbmNs dWRlL2FjY2Vzcy9hbWFwaS5oCkBAIC0xODQsNiArMTg0LDEwIEBAIHR5cGVkZWYgdm9pZCAo KmFtcmVzY2FuX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogdHlwZWRlZiBib29s ICgqYW1nZXR0dXBsZV9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJ CSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7CiAKKy8qIG5leHQgYmF0Y2ggb2YgdmFsaWQg dHVwbGVzICovCit0eXBlZGVmIGJvb2wgKCphbWdldGJhdGNoX2Z1bmN0aW9uKSAoSW5kZXhT Y2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKTsKKwog LyogZmV0Y2ggYWxsIHZhbGlkIHR1cGxlcyAqLwogdHlwZWRlZiBpbnQ2NCAoKmFtZ2V0Yml0 bWFwX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJICAgVElEQml0 bWFwICp0Ym0pOwpAQCAtMjg4LDYgKzI5Miw3IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4QW1S b3V0aW5lCiAJYW1iZWdpbnNjYW5fZnVuY3Rpb24gYW1iZWdpbnNjYW47CiAJYW1yZXNjYW5f ZnVuY3Rpb24gYW1yZXNjYW47CiAJYW1nZXR0dXBsZV9mdW5jdGlvbiBhbWdldHR1cGxlOyAv KiBjYW4gYmUgTlVMTCAqLworCWFtZ2V0YmF0Y2hfZnVuY3Rpb24gYW1nZXRiYXRjaDsgLyog Y2FuIGJlIE5VTEwgKi8KIAlhbWdldGJpdG1hcF9mdW5jdGlvbiBhbWdldGJpdG1hcDsJLyog Y2FuIGJlIE5VTEwgKi8KIAlhbWVuZHNjYW5fZnVuY3Rpb24gYW1lbmRzY2FuOwogCWFtbWFy a3Bvc19mdW5jdGlvbiBhbW1hcmtwb3M7CS8qIGNhbiBiZSBOVUxMICovCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5h bS5oCmluZGV4IGMyNWY1ZDExYjUzLi4xZDlhMDg2OGE5YiAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL2dlbmFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgK QEAgLTE0LDYgKzE0LDcgQEAKICNpZm5kZWYgR0VOQU1fSAogI2RlZmluZSBHRU5BTV9ICiAK KyNpbmNsdWRlICJhY2Nlc3MvaXR1cC5oIgogI2luY2x1ZGUgImFjY2Vzcy9zZGlyLmgiCiAj aW5jbHVkZSAiYWNjZXNzL3NrZXkuaCIKICNpbmNsdWRlICJub2Rlcy90aWRiaXRtYXAuaCIK QEAgLTg4LDYgKzg5LDcgQEAgdHlwZWRlZiBib29sICgqSW5kZXhCdWxrRGVsZXRlQ2FsbGJh Y2spIChJdGVtUG9pbnRlciBpdGVtcHRyLCB2b2lkICpzdGF0ZSk7CiAKIC8qIHN0cnVjdCBk ZWZpbml0aW9ucyBhcHBlYXIgaW4gcmVsc2Nhbi5oICovCiB0eXBlZGVmIHN0cnVjdCBJbmRl eFNjYW5EZXNjRGF0YSAqSW5kZXhTY2FuRGVzYzsKK3R5cGVkZWYgc3RydWN0IEluZGV4U2Nh bkJhdGNoRGF0YSAqSW5kZXhTY2FuQmF0Y2g7CiB0eXBlZGVmIHN0cnVjdCBTeXNTY2FuRGVz Y0RhdGEgKlN5c1NjYW5EZXNjOwogCiB0eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEluZGV4U2Nh bkRlc2NEYXRhICpQYXJhbGxlbEluZGV4U2NhbkRlc2M7CkBAIC0xMzIsNiArMTM0LDggQEAg dHlwZWRlZiBzdHJ1Y3QgSW5kZXhPcmRlckJ5RGlzdGFuY2UKICAqIGdlbmVyYWxpemVkIGlu ZGV4XyBpbnRlcmZhY2Ugcm91dGluZXMgKGluIGluZGV4YW0uYykKICAqLwogCitleHRlcm4g UEdETExJTVBPUlQgYm9vbCBlbmFibGVfaW5kZXhzY2FuX2JhdGNoaW5nOworCiAvKgogICog SW5kZXhTY2FuSXNWYWxpZAogICoJCVRydWUgaWZmIHRoZSBpbmRleCBzY2FuIGlzIHZhbGlk LgpAQCAtMTU1LDcgKzE1OSw4IEBAIGV4dGVybiB2b2lkIGluZGV4X2luc2VydF9jbGVhbnVw KFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiBleHRlcm4gSW5kZXhTY2FuRGVzYyBpbmRleF9i ZWdpbnNjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCQkJCQkJIFJlbGF0aW9uIGlu ZGV4UmVsYXRpb24sCiAJCQkJCQkJCQkgU25hcHNob3Qgc25hcHNob3QsCi0JCQkJCQkJCQkg aW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKTsKKwkJCQkJCQkJCSBpbnQgbmtleXMsIGludCBu b3JkZXJieXMsCisJCQkJCQkJCQkgYm9vbCBlbmFibGVfYmF0Y2hpbmcpOwogZXh0ZXJuIElu ZGV4U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2FuX2JpdG1hcChSZWxhdGlvbiBpbmRleFJlbGF0 aW9uLAogCQkJCQkJCQkJCQlTbmFwc2hvdCBzbmFwc2hvdCwKIAkJCQkJCQkJCQkJaW50IG5r ZXlzKTsKQEAgLTE3Myw3ICsxNzgsOCBAQCBleHRlcm4gdm9pZCBpbmRleF9wYXJhbGxlbHNj YW5faW5pdGlhbGl6ZShSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiBleHRlcm4gdm9pZCBpbmRl eF9wYXJhbGxlbHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIEluZGV4U2Nh bkRlc2MgaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJlbGF0aW9uIGhlYXByZWwsCiAJCQkJ CQkJCQkJCSAgUmVsYXRpb24gaW5kZXhyZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cywK LQkJCQkJCQkJCQkJICBQYXJhbGxlbEluZGV4U2NhbkRlc2MgcHNjYW4pOworCQkJCQkJCQkJ CQkgIFBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwc2NhbiwKKwkJCQkJCQkJCQkJICBib29sIGVu YWJsZV9iYXRjaGluZyk7CiBleHRlcm4gSXRlbVBvaW50ZXIgaW5kZXhfZ2V0bmV4dF90aWQo SW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9u KTsKIHN0cnVjdCBUdXBsZVRhYmxlU2xvdDsKQEAgLTE4Miw2ICsxODgsMTAgQEAgZXh0ZXJu IGJvb2wgaW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXJlY3Rpb24sCiAJCQkJCQkJICAgc3RydWN0IFR1cGxlVGFibGVTbG90ICpzbG90 KTsKIGV4dGVybiBpbnQ2NCBpbmRleF9nZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBU SURCaXRtYXAgKmJpdG1hcCk7CiAKKy8qIGluZGV4IGJhdGNoaW5nL3ByZWZldGNoaW5nICov CitleHRlcm4gYm9vbCBpbmRleF9iYXRjaF9hZGQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJdGVt UG9pbnRlckRhdGEgdGlkLCBib29sIHJlY2hlY2ssCisJCQkJCQkJSW5kZXhUdXBsZSBpdHVw LCBIZWFwVHVwbGUgaHR1cCk7CisKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKmlu ZGV4X2J1bGtfZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywKIAkJCQkJCQkJCQkJCUlu ZGV4QnVsa0RlbGV0ZVJlc3VsdCAqaXN0YXQsCiAJCQkJCQkJCQkJCQlJbmRleEJ1bGtEZWxl dGVDYWxsYmFjayBjYWxsYmFjaywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9y ZWxzY2FuLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCmluZGV4IGUxODg0YWNm NDkzLi44ZmQyZGE4NTE0ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNj YW4uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCkBAIC0xMjksNiArMTI5 LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YQogCVJlbGF0aW9uCXJl bDsKIH0gSW5kZXhGZXRjaFRhYmxlRGF0YTsKIAorLyogRm9yd2FyZCBkZWNsYXJhdGlvbiwg dGhlIHByZWZldGNoIGNhbGxiYWNrIG5lZWRzIEluZGV4U2NhbkRlc2NEYXRhLiAqLwordHlw ZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuQmF0Y2hEYXRhIEluZGV4U2NhbkJhdGNoRGF0YTsKKwog LyoKICAqIFdlIHVzZSB0aGUgc2FtZSBJbmRleFNjYW5EZXNjRGF0YSBzdHJ1Y3R1cmUgZm9y IGJvdGggYW1nZXR0dXBsZS1iYXNlZAogICogYW5kIGFtZ2V0Yml0bWFwLWJhc2VkIGluZGV4 IHNjYW5zLiAgU29tZSBmaWVsZHMgYXJlIG9ubHkgcmVsZXZhbnQgaW4KQEAgLTE3NCw2ICsx NzcsOSBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YQogCiAJYm9vbAkJeHNf cmVjaGVjazsJCS8qIFQgbWVhbnMgc2NhbiBrZXlzIG11c3QgYmUgcmVjaGVja2VkICovCiAK KwkvKiBJbmZvcm1hdGlvbiB1c2VkIGJ5IGJhdGNoZWQgaW5kZXggc2NhbnMuICovCisJSW5k ZXhTY2FuQmF0Y2hEYXRhICp4c19iYXRjaDsKKwogCS8qCiAJICogV2hlbiBmZXRjaGluZyB3 aXRoIGFuIG9yZGVyaW5nIG9wZXJhdG9yLCB0aGUgdmFsdWVzIG9mIHRoZSBPUkRFUiBCWQog CSAqIGV4cHJlc3Npb25zIG9mIHRoZSBsYXN0IHJldHVybmVkIHR1cGxlLCBhY2NvcmRpbmcg dG8gdGhlIGluZGV4LiAgSWYKQEAgLTE4OSw2ICsxOTUsNjQgQEAgdHlwZWRlZiBzdHJ1Y3Qg SW5kZXhTY2FuRGVzY0RhdGEKIAlzdHJ1Y3QgUGFyYWxsZWxJbmRleFNjYW5EZXNjRGF0YSAq cGFyYWxsZWxfc2NhbjsKIH0JCQlJbmRleFNjYW5EZXNjRGF0YTsKIAorLyoKKyAqIFR5cGVk ZWYgZm9yIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiBhbiBpdGVtIGluIGlu ZGV4IHNjYW4gc2hvdWxkCisgKiBiZSBwcmVmZXRjaGVkLgorICovCit0eXBlZGVmIGJvb2wg KCpJbmRleFByZWZldGNoQ2FsbGJhY2spIChJbmRleFNjYW5EZXNjRGF0YSAqc2NhbiwKKwkJ CQkJCQkJCSAgIHZvaWQgKmFyZywgaW50IGluZGV4KTsKKworLyoKKyAqIERhdGEgYWJvdXQg dGhlIGN1cnJlbnQgVElEIGJhdGNoIHJldHVybmVkIGJ5IHRoZSBpbmRleCBBTS4KKyAqCisg KiBYWFggTWF5YmUgdGhpcyBzaG91bGQgYmUgYSBzZXBhcmF0ZSBzdHJ1Y3QgaW5zdGVhZCwg YW5kIHRoZSBzY2FuCisgKiBkZXNjcmlwdG9yIHdvdWxkIGhhdmUgb25seSBhIHBvaW50ZXIs IGluaXRpYWxpemVkIG9ubHkgd2hlbiB0aGUKKyAqIGJhdGNoaW5nIGlzIGFjdHVhbGx5IHVz ZWQ/CisgKgorICogWFhYIEl0J3Mgbm90IHF1aXRlIGNsZWFyIHdoaWNoIHBhcnQgb2YgdGhp cyBpcyBtYW5hZ2VkIGJ5IGluZGV4YW0gYW5kCisgKiB3aGF0J3MgdXAgdG8gdGhlIGFjdHVh bCBpbmRleCBBTSBpbXBsZW1lbnRhdGlvbi4gTmVlZHMgc29tZSBjbGVhcmVyCisgKiBib3Vu ZGFyaWVzLgorICoKKyAqIFhYWCBTaG91bGQgd2UgaGF2ZSBhIHBvaW50ZXIgZm9yIG9wdGlv bmFsIHN0YXRlIG1hbmFnZWQgYnkgdGhlIEFNPyBTb21lCisgKiBjdXN0b20gQU1zIG1heSBu ZWVkIG1vcmUgcGVyLWJhdGNoIGluZm9ybWF0aW9uLCBub3QganVzdCB0aGUgZmllbGRzIHdl CisgKiBoYXZlIGhlcmUuCisgKi8KK3R5cGVkZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoRGF0 YQoreworCS8qIGJhdGNoIHNpemUgLSBtYXhpbXVtLCBpbml0aWFsLCBjdXJyZW50ICh3aXRo IHJhbXAgdXApICovCisJaW50CQkJbWF4U2l6ZTsKKwlpbnQJCQlpbml0U2l6ZTsKKwlpbnQJ CQljdXJyU2l6ZTsKKworCS8qIG1lbW9yeSBjb250ZXh0IGZvciBwZXItYmF0Y2ggZGF0YSAq LworCU1lbW9yeUNvbnRleHQgY3R4OworCisJLyogYmF0Y2ggcHJlZmV0Y2hpbmcgKi8KKwlp bnQJCQlwcmVmZXRjaFRhcmdldDsgLyogY3VycmVudCBwcmVmZXRjaCBkaXN0YW5jZSAqLwor CWludAkJCXByZWZldGNoTWF4aW11bTsJLyogbWF4aW11bSBwcmVmZXRjaCBkaXN0YW5jZSAq LworCWludAkJCXByZWZldGNoSW5kZXg7CS8qIG5leHQgaXRlbSB0byBwcmVmZXRjaCAqLwor CisJSW5kZXhQcmVmZXRjaENhbGxiYWNrCXByZWZldGNoQ2FsbGJhY2s7CisJdm9pZAkJCQkg ICAqcHJlZmV0Y2hBcmd1bWVudDsKKworCS8qIGJhdGNoIGNvbnRlbnRzIChUSURzLCBpbmRl eCB0dXBsZXMsIGtpbGwgYml0bWFwLCAuLi4pICovCisJaW50CQkJY3VyckluZGV4OwkJLyog aW5kZXggb2YgdGhlIGN1cnJlbnQgaXRlbSAqLworCWludAkJCW5oZWFwdGlkczsJCS8qIG51 bWJlciBvZiBUSURzIGluIHRoZSBiYXRjaCAqLworCUl0ZW1Qb2ludGVyRGF0YSAqaGVhcHRp ZHM7CS8qIFRJRHMgaW4gdGhlIGJhdGNoICovCisJSW5kZXhUdXBsZSAqaXR1cHM7CQkJLyog SW5kZXhUdXBsZXMsIGlmIHJlcXVlc3RlZCAqLworCUhlYXBUdXBsZSAgKmh0dXBzOwkJCS8q IEhlYXBUdXBsZXMsIGlmIHJlcXVlc3RlZCAqLworCWJvb2wJICAgKnJlY2hlY2s7CQkvKiBy ZWNoZWNrIGZsYWdzICovCisJRGF0dW0JICAgKnByaXZhdGVEYXRhOwkvKiBwcml2YXRlIGRh dGEgZm9yIGJhdGNoICovCisKKwkvKiB4c19vcmRlcmJ5dmFscyAvIHhzX29yZGVyYnludWxs cyAqLworCURhdHVtCSAgICpvcmRlcmJ5dmFsczsKKwlib29sCSAgICpvcmRlcmJ5bnVsbHM7 CisKKwkvKiBsaXN0IG9mIGtpbGxlZCBpdGVtcyAqLworCWludAkJCW5LaWxsZWRJdGVtczsJ LyogbnVtYmVyIG9mIGtpbGxlZEl0ZW1zIGVsZW1lbnRzICovCisJaW50CQkgICAqa2lsbGVk SXRlbXM7CS8qIGxpc3Qgb2YgaW5kZXhlcyB0byBraWxsICovCit9IEluZGV4U2NhbkJhdGNo RGF0YTsKKwogLyogR2VuZXJpYyBzdHJ1Y3R1cmUgZm9yIHBhcmFsbGVsIHNjYW5zICovCiB0 eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEluZGV4U2NhbkRlc2NEYXRhCiB7CmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4 ZWNub2Rlcy5oCmluZGV4IDE4MmE2OTU2YmIwLi5lODVmMDNjZDBjMSAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMv ZXhlY25vZGVzLmgKQEAgLTE2NTQsNiArMTY1NCw3IEBAIHR5cGVkZWYgc3RydWN0CiAgKgkJ T3JkZXJCeVR5cEJ5VmFscyAgIGlzIHRoZSBkYXRhdHlwZSBvZiBvcmRlciBieSBleHByZXNz aW9uIHBhc3MtYnktdmFsdWU/CiAgKgkJT3JkZXJCeVR5cExlbnMJICAgdHlwbGVucyBvZiB0 aGUgZGF0YXR5cGVzIG9mIG9yZGVyIGJ5IGV4cHJlc3Npb25zCiAgKgkJUHNjYW5MZW4JCSAg IHNpemUgb2YgcGFyYWxsZWwgaW5kZXggc2NhbiBkZXNjcmlwdG9yCisgKgkJQ2FuQmF0Y2gJ CSAgIGJhdGNoaW5nIChhbmQgcHJlZmV0Y2hpbmcpIGVuYWJsZWQKICAqIC0tLS0tLS0tLS0t LS0tLS0KICAqLwogdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuU3RhdGUKQEAgLTE2ODEsNiAr MTY4MiwxMCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5TdGF0ZQogCWJvb2wJICAgKmlz c19PcmRlckJ5VHlwQnlWYWxzOwogCWludDE2CSAgICppc3NfT3JkZXJCeVR5cExlbnM7CiAJ U2l6ZQkJaXNzX1BzY2FuTGVuOworCisJLyogYmF0Y2hpbmcvcHJlZmV0Y2hpbmcgZW5hYmxl ZD8gKi8KKwlib29sCQlpc3NfQ2FuQmF0Y2g7CisKIH0gSW5kZXhTY2FuU3RhdGU7CiAKIC8q IC0tLS0tLS0tLS0tLS0tLS0KQEAgLTE3MDIsNiArMTcwNyw3IEBAIHR5cGVkZWYgc3RydWN0 IEluZGV4U2NhblN0YXRlCiAgKgkJUHNjYW5MZW4JCSAgIHNpemUgb2YgcGFyYWxsZWwgaW5k ZXgtb25seSBzY2FuIGRlc2NyaXB0b3IKICAqCQlOYW1lQ1N0cmluZ0F0dE51bXMgYXR0bnVt cyBvZiBuYW1lIHR5cGVkIGNvbHVtbnMgdG8gcGFkIHRvIE5BTUVEQVRBTEVOCiAgKgkJTmFt ZUNTdHJpbmdDb3VudCAgIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgTmFtZUNTdHJpbmdB dHROdW1zIGFycmF5CisgKgkJQ2FuQmF0Y2gJCSAgIGJhdGNoaW5nIChhbmQgcHJlZmV0Y2hp bmcpIGVuYWJsZWQKICAqIC0tLS0tLS0tLS0tLS0tLS0KICAqLwogdHlwZWRlZiBzdHJ1Y3Qg SW5kZXhPbmx5U2NhblN0YXRlCkBAIC0xNzIzLDYgKzE3MjksNyBAQCB0eXBlZGVmIHN0cnVj dCBJbmRleE9ubHlTY2FuU3RhdGUKIAlTaXplCQlpb3NzX1BzY2FuTGVuOwogCUF0dHJOdW1i ZXIgKmlvc3NfTmFtZUNTdHJpbmdBdHROdW1zOwogCWludAkJCWlvc3NfTmFtZUNTdHJpbmdD b3VudDsKKwlib29sCQlpb3NzX0NhbkJhdGNoOwogfSBJbmRleE9ubHlTY2FuU3RhdGU7CiAK IC8qIC0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvc3lzdmlld3Mub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3 cy5vdXQKaW5kZXggZmFkN2ZjM2E3ZTAuLjE0YjM4ZWQ0ZDQ2IDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dAorKysgYi9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dApAQCAtMTU3LDYgKzE1Nyw3IEBAIHNlbGVjdCBu YW1lLCBzZXR0aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtlICdlbmFibGUl JzsKICBlbmFibGVfaW5jcmVtZW50YWxfc29ydCAgICAgICAgfCBvbgogIGVuYWJsZV9pbmRl eG9ubHlzY2FuICAgICAgICAgICB8IG9uCiAgZW5hYmxlX2luZGV4c2NhbiAgICAgICAgICAg ICAgIHwgb24KKyBlbmFibGVfaW5kZXhzY2FuX2JhdGNoaW5nICAgICAgfCBvbgogIGVuYWJs ZV9tYXRlcmlhbCAgICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX21lbW9pemUgICAgICAg ICAgICAgICAgIHwgb24KICBlbmFibGVfbWVyZ2Vqb2luICAgICAgICAgICAgICAgfCBvbgpA QCAtMTcwLDcgKzE3MSw3IEBAIHNlbGVjdCBuYW1lLCBzZXR0aW5nIGZyb20gcGdfc2V0dGlu Z3Mgd2hlcmUgbmFtZSBsaWtlICdlbmFibGUlJzsKICBlbmFibGVfc2Vxc2NhbiAgICAgICAg ICAgICAgICAgfCBvbgogIGVuYWJsZV9zb3J0ICAgICAgICAgICAgICAgICAgICB8IG9uCiAg ZW5hYmxlX3RpZHNjYW4gICAgICAgICAgICAgICAgIHwgb24KLSgyMiByb3dzKQorKDIzIHJv d3MpCiAKIC0tIFRoZXJlIGFyZSBhbHdheXMgd2FpdCBldmVudCBkZXNjcmlwdGlvbnMgZm9y IHZhcmlvdXMgdHlwZXMuICBJbmplY3Rpb25Qb2ludAogLS0gbWF5IGJlIHByZXNlbnQgb3Ig YWJzZW50LCBkZXBlbmRpbmcgb24gaGlzdG9yeSBzaW5jZSBsYXN0IHBvc3RtYXN0ZXIgc3Rh cnQuCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDE4NDdiYmZhOTVjLi42Mzc4 ZTE4MjIzOCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QK KysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTEyMjAsNiArMTIy MCw3IEBAIEluZGV4T3JkZXJCeURpc3RhbmNlCiBJbmRleFBhdGgKIEluZGV4UnVudGltZUtl eUluZm8KIEluZGV4U2NhbgorSW5kZXhTY2FuQmF0Y2hEYXRhCiBJbmRleFNjYW5EZXNjCiBJ bmRleFNjYW5TdGF0ZQogSW5kZXhTdGF0ZUZsYWdzQWN0aW9uCkBAIC0zMjg2LDYgKzMyODcs NyBAQCBhbWVuZHNjYW5fZnVuY3Rpb24KIGFtZXN0aW1hdGVwYXJhbGxlbHNjYW5fZnVuY3Rp b24KIGFtZ2V0Yml0bWFwX2Z1bmN0aW9uCiBhbWdldHR1cGxlX2Z1bmN0aW9uCithbWdldGJh dGNoX2Z1bmN0aW9uCiBhbWluaXRwYXJhbGxlbHNjYW5fZnVuY3Rpb24KIGFtaW5zZXJ0X2Z1 bmN0aW9uCiBhbWluc2VydGNsZWFudXBfZnVuY3Rpb24KLS0gCjIuNDcuMAoK --------------4qyQcmdBaK2FloOMEeBLhmx6 Content-Type: text/x-patch; charset=UTF-8; name="v20241106-0002-WIP-batching-for-nbtree-indexes.patch" Content-Disposition: attachment; filename="v20241106-0002-WIP-batching-for-nbtree-indexes.patch" Content-Transfer-Encoding: base64 RnJvbSA0NDc0YTA1OGM3YTFkNjViMjZjOWQ0NTAwNjU2Nzg4MjNlNzNjZThlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogTW9uLCAzMCBTZXAgMjAyNCAyMjo0ODozOSArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjQxMTA2IDIvN10gV0lQOiBiYXRjaGluZyBmb3IgbmJ0cmVlIGluZGV4ZXMKCkFkZHMg YmF0Y2hpbmcvcHJlZmV0Y2hpbmcgZm9yIGJ0cmVlIGluZGV4ZXMuIFJldHVybnMgb25seSBi YXRjaGVzIGZyb20gYQpzaW5nbGUgbGVhZiBwYWdlLiBEb2VzIG5vdCBzdXBwb3J0IG1hcmsv cmVzdG9yZSB5ZXQuCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYyAg ICB8ICA2NSArKysrKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMg fCAyODAgKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL2FjY2Vzcy9u YnRyZWUuaCAgICAgICAgICAgfCAgMTUgKysKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0ICAgICAgfCAgIDEgKwogNCBmaWxlcyBjaGFuZ2VkLCAzNjEgaW5zZXJ0aW9ucygr KQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCmluZGV4IDI5MTliMTI2MzlkLi5i YmFhM2RmMmEwYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRy ZWUuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCkBAIC0xNDEs NiArMTQxLDcgQEAgYnRoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0aW5lLT5h bWJlZ2luc2NhbiA9IGJ0YmVnaW5zY2FuOwogCWFtcm91dGluZS0+YW1yZXNjYW4gPSBidHJl c2NhbjsKIAlhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgPSBidGdldHR1cGxlOworCWFtcm91dGlu ZS0+YW1nZXRiYXRjaCA9IGJ0Z2V0YmF0Y2g7CiAJYW1yb3V0aW5lLT5hbWdldGJpdG1hcCA9 IGJ0Z2V0Yml0bWFwOwogCWFtcm91dGluZS0+YW1lbmRzY2FuID0gYnRlbmRzY2FuOwogCWFt cm91dGluZS0+YW1tYXJrcG9zID0gYnRtYXJrcG9zOwpAQCAtMjU5LDYgKzI2MCw1MyBAQCBi dGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJcmV0 dXJuIHJlczsKIH0KIAorLyoKKyAqCWJ0Z2V0YmF0Y2goKSAtLSBHZXQgdGhlIG5leHQgYmF0 Y2ggb2YgdHVwbGVzIGluIHRoZSBzY2FuLgorICoKKyAqIFhYWCBQcmV0dHkgbXVjaCBsaWtl IGJ0Z2V0dHVwbGUoKSwgYnV0IGZvciBiYXRjaGVzIG9mIHR1cGxlcy4KKyAqLworYm9vbAor YnRnZXRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQorewor CUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlib29s CQlyZXM7CisKKwkvKiBidHJlZSBpbmRleGVzIGFyZSBuZXZlciBsb3NzeSAqLworCXNjYW4t PnhzX3JlY2hlY2sgPSBmYWxzZTsKKworCS8qIEVhY2ggbG9vcCBpdGVyYXRpb24gcGVyZm9y bXMgYW5vdGhlciBwcmltaXRpdmUgaW5kZXggc2NhbiAqLworCWRvCisJeworCQkvKgorCQkg KiBJZiB3ZSd2ZSBhbHJlYWR5IGluaXRpYWxpemVkIHRoaXMgc2Nhbiwgd2UgY2FuIGp1c3Qg YWR2YW5jZSBpdCBpbgorCQkgKiB0aGUgYXBwcm9wcmlhdGUgZGlyZWN0aW9uLiAgSWYgd2Ug aGF2ZW4ndCBkb25lIHNvIHlldCwgd2UgY2FsbAorCQkgKiBfYnRfZmlyc3QoKSB0byBnZXQg dGhlIGZpcnN0IGl0ZW0gaW4gdGhlIHNjYW4uCisJCSAqLworCQlpZiAoIUJUU2NhblBvc0lz VmFsaWQoc28tPmN1cnJQb3MpKQorCQkJcmVzID0gX2J0X2ZpcnN0X2JhdGNoKHNjYW4sIGRp cik7CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIENoZWNrIHRvIHNlZSBpZiB3ZSBzaG91 bGQga2lsbCB0dXBsZXMgZnJvbSB0aGUgcHJldmlvdXMgYmF0Y2guCisJCQkgKi8KKwkJCV9i dF9raWxsX2JhdGNoKHNjYW4pOworCisJCQkvKgorCQkJICogTm93IGNvbnRpbnVlIHRoZSBz Y2FuLgorCQkJICovCisJCQlyZXMgPSBfYnRfbmV4dF9iYXRjaChzY2FuLCBkaXIpOworCQl9 CisKKwkJLyogSWYgd2UgaGF2ZSBhIHR1cGxlLCByZXR1cm4gaXQgLi4uICovCisJCWlmIChy ZXMpCisJCQlicmVhazsKKworCQkvKiAuLi4gb3RoZXJ3aXNlIHNlZSBpZiB3ZSBuZWVkIGFu b3RoZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gKi8KKwl9IHdoaWxlIChzby0+bnVtQXJyYXlL ZXlzICYmIF9idF9zdGFydF9wcmltX3NjYW4oc2NhbiwgZGlyKSk7CisKKwlyZXR1cm4gcmVz OworfQorCiAvKgogICogYnRnZXRiaXRtYXAoKSAtLSBnZXRzIGFsbCBtYXRjaGluZyB0dXBs ZXMsIGFuZCBhZGRzIHRoZW0gdG8gYSBiaXRtYXAKICAqLwpAQCAtMzM5LDYgKzM4NywxMCBA QCBidGJlZ2luc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykK IAlzby0+a2lsbGVkSXRlbXMgPSBOVUxMOwkJLyogdW50aWwgbmVlZGVkICovCiAJc28tPm51 bUtpbGxlZCA9IDA7CiAKKwkvKiBiYXRjaCByYW5nZSwgaW5pdGlhbGx5IGVtcHR5ICovCisJ c28tPmJhdGNoLmZpcnN0SW5kZXggPSAtMTsKKwlzby0+YmF0Y2gubGFzdEluZGV4ID0gLTE7 CisKIAkvKgogCSAqIFdlIGRvbid0IGtub3cgeWV0IHdoZXRoZXIgdGhlIHNjYW4gd2lsbCBi ZSBpbmRleC1vbmx5LCBzbyB3ZSBkbyBub3QKIAkgKiBhbGxvY2F0ZSB0aGUgdHVwbGUgd29y a3NwYWNlIGFycmF5cyB1bnRpbCBidHJlc2Nhbi4gIEhvd2V2ZXIsIHdlIHNldCB1cApAQCAt MzY1LDYgKzQxNyw5IEBAIGJ0cmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBz Y2Fua2V5LCBpbnQgbnNjYW5rZXlzLAogCS8qIHdlIGFyZW4ndCBob2xkaW5nIGFueSByZWFk IGxvY2tzLCBidXQgZ290dGEgZHJvcCB0aGUgcGlucyAqLwogCWlmIChCVFNjYW5Qb3NJc1Zh bGlkKHNvLT5jdXJyUG9zKSkKIAl7CisJCS8qIFRyYW5zZmVyIGtpbGxlZCBpdGVtcyBmcm9t IHRoZSBiYXRjaCB0byB0aGUgcmVndWxhciBhcnJheS4gKi8KKwkJX2J0X2tpbGxfYmF0Y2go c2Nhbik7CisKIAkJLyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGgg YW55IGtpbGxlZCBpdGVtcyAqLwogCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCiAJCQlfYnRf a2lsbGl0ZW1zKHNjYW4pOwpAQCAtNDA4LDYgKzQ2MywxMCBAQCBidHJlc2NhbihJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAkJbWVtY3B5 KHNjYW4tPmtleURhdGEsIHNjYW5rZXksIHNjYW4tPm51bWJlck9mS2V5cyAqIHNpemVvZihT Y2FuS2V5RGF0YSkpOwogCXNvLT5udW1iZXJPZktleXMgPSAwOwkJLyogdW50aWwgX2J0X3By ZXByb2Nlc3Nfa2V5cyBzZXRzIGl0ICovCiAJc28tPm51bUFycmF5S2V5cyA9IDA7CQkvKiBk aXR0byAqLworCisJLyogUmVzZXQgdGhlIGJhdGNoIChldmVuIGlmIG5vdCBiYXRjaGVkIHNj YW4pICovCisJc28tPmJhdGNoLmZpcnN0SW5kZXggPSAtMTsKKwlzby0+YmF0Y2gubGFzdElu ZGV4ID0gLTE7CiB9CiAKIC8qCkBAIC00MjEsNiArNDgwLDkgQEAgYnRlbmRzY2FuKEluZGV4 U2NhbkRlc2Mgc2NhbikKIAkvKiB3ZSBhcmVuJ3QgaG9sZGluZyBhbnkgcmVhZCBsb2Nrcywg YnV0IGdvdHRhIGRyb3AgdGhlIHBpbnMgKi8KIAlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+ Y3VyclBvcykpCiAJeworCQkvKiBUcmFuc2ZlciBraWxsZWQgaXRlbXMgZnJvbSB0aGUgYmF0 Y2ggdG8gdGhlIHJlZ3VsYXIgYXJyYXkuICovCisJCV9idF9raWxsX2JhdGNoKHNjYW4pOwor CiAJCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxs ZWQgaXRlbXMgKi8KIAkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQogCQkJX2J0X2tpbGxpdGVt cyhzY2FuKTsKQEAgLTUwMSw2ICs1NjMsOSBAQCBidHJlc3RycG9zKEluZGV4U2NhbkRlc2Mg c2NhbikKIAkJICovCiAJCWlmIChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKIAkJ eworCQkJLyogVHJhbnNmZXIga2lsbGVkIGl0ZW1zIGZyb20gdGhlIGJhdGNoIHRvIHRoZSBy ZWd1bGFyIGFycmF5LiAqLworCQkJX2J0X2tpbGxfYmF0Y2goc2Nhbik7CisKIAkJCS8qIEJl Zm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMg Ki8KIAkJCWlmIChzby0+bnVtS2lsbGVkID4gMCkKIAkJCQlfYnRfa2lsbGl0ZW1zKHNjYW4p OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMKaW5kZXggMTYwOGRkNDlk NTcuLjkzMWVkYWIwNTUwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idHNlYXJjaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNo LmMKQEAgLTE1MDQsNiArMTUwNCwyODMgQEAgX2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpcikKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorCitzdGF0aWMgdm9p ZAorQXNzZXJ0Q2hlY2tCVEJhdGNoSW5mbyhCVFNjYW5PcGFxdWUgc28pCit7CisjaWZkZWYg VVNFX0FTU0VSVF9DSEVDS0lORworCS8qIHNob3VsZCBiZSB2YWxpZCBpdGVtcyAod2l0aCBy ZXNwZWN0IHRvIHRoZSBjdXJyZW50IGxlYWYgcGFnZSkgKi8KKwlBc3NlcnQoc28tPmN1cnJQ b3MuZmlyc3RJdGVtIDw9IHNvLT5iYXRjaC5maXJzdEluZGV4KTsKKwlBc3NlcnQoc28tPmJh dGNoLmZpcnN0SW5kZXggPD0gc28tPmJhdGNoLmxhc3RJbmRleCk7CisJQXNzZXJ0KHNvLT5i YXRjaC5sYXN0SW5kZXggPD0gc28tPmN1cnJQb3MubGFzdEl0ZW0pOworI2VuZGlmCit9CisK Ky8qCisgKiBfYnRfY29weV9iYXRjaAorICoJCUNvcHkgYSBzZWN0aW9uIG9mIHRoZSBsZWFm IHBhZ2UgaW50byB0aGUgYmF0Y2guCisgKi8KK3N0YXRpYyB2b2lkCitfYnRfY29weV9iYXRj aChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBCVFNjYW5PcGFxdWUg c28sCisJCQkgICBpbnQgc3RhcnQsIGludCBlbmQpCit7CisJLyoKKwkgKiBXZSdyZSByZWFk aW5nIHRoZSBmaXJzdCBiYXRjaCwgYW5kIHRoZXJlIHNob3VsZCBhbHdheXMgYmUgYXQgbGVh c3Qgb25lCisJICogaXRlbSAob3RoZXJ3aXNlIF9idF9maXJzdCB3b3VsZCByZXR1cm4gZmFs c2UpLiBTbyB3ZSBzaG91bGQgbmV2ZXIgZ2V0CisJICogaW50byBzaXR1YXRpb24gd2l0aCBl bXB0eSBzdGFydC9lbmQgcmFuZ2UuIEluIHRoZSB3b3JzdCBjYXNlLCB0aGVyZSBpcworCSAq IGp1c3QgYSBzaW5nbGUgaXRlbSwgaW4gd2hpY2ggY2FzZSAoc3RhcnQgPT0gZW5kKS4KKwkg Ki8KKwlBc3NlcnQoc3RhcnQgPD0gZW5kKTsKKworCS8qIFRoZSByYW5nZSBvZiBpdGVtcyBz aG91bGQgZml0IGludG8gdGhlIGN1cnJlbnQgYmF0Y2ggc2l6ZS4gKi8KKwlBc3NlcnQoKGVu ZCAtIHN0YXJ0ICsgMSkgPD0gc2Nhbi0+eHNfYmF0Y2gtPmN1cnJTaXplKTsKKworCXNvLT5i YXRjaC5maXJzdEluZGV4ID0gc3RhcnQ7CisJc28tPmJhdGNoLmxhc3RJbmRleCA9IGVuZDsK KworCUFzc2VydENoZWNrQlRCYXRjaEluZm8oc28pOworCisJLyoKKwkgKiBXYWxrIHRocm91 Z2ggdGhlIHJhbmdlIG9mIGluZGV4IHR1cGxlcywgY29weSB0aGVtIGludG8gdGhlIGJhdGNo LiBJZgorCSAqIHJlcXVlc3RlZCwgc2V0IHRoZSBpbmRleCB0dXBsZSB0b28uCisJICoKKwkg KiBXZSBkb24ndCBrbm93IGlmIHRoZSBiYXRjaCBpcyBmdWxsIGFscmVhZHkgLSB3ZSBqdXN0 IHRyeSB0byBhZGQgaXQsIGFuZAorCSAqIGJhaWwgb3V0IGlmIGl0IGZhaWxzLgorCSAqCisJ ICogRklYTUUgVGhpcyBzZWVtcyB3cm9uZywgYWN0dWFsbHkuIFdlIHVzZSBjdXJyU2l6ZSB3 aGVuIGNhbGN1bGF0aW5nIHRoZQorCSAqIHN0YXJ0L2VuZCByYW5nZSwgc28gdGhlIGFkZCBz aG91bGQgYWx3YXlzIHN1Y2NlZWQuCisJICovCisJd2hpbGUgKHN0YXJ0IDw9IGVuZCkKKwl7 CisJCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW3N0YXJ0 XTsKKwkJSW5kZXhUdXBsZQlpdHVwID0gTlVMTDsKKworCQlpZiAoc2Nhbi0+eHNfd2FudF9p dHVwKQorCQkJaXR1cCA9IChJbmRleFR1cGxlKSAoc28tPmN1cnJUdXBsZXMgKyBjdXJySXRl bS0+dHVwbGVPZmZzZXQpOworCisJCS8qIHRyeSB0byBhZGQgaXQgdG8gYmF0Y2gsIGlmIHRo ZXJlJ3Mgc3BhY2UgKi8KKwkJaWYgKCFpbmRleF9iYXRjaF9hZGQoc2NhbiwgY3Vyckl0ZW0t PmhlYXBUaWQsIHNjYW4tPnhzX3JlY2hlY2ssIGl0dXAsIE5VTEwpKQorCQkJYnJlYWs7CisK KwkJc3RhcnQrKzsKKwl9CisKKwkvKgorCSAqIHNldCB0aGUgc3RhcnRpbmcgcG9pbnQKKwkg KgorCSAqIFhYWCBtaWdodCBiZSBiZXR0ZXIgZG9uZSBpbiBpbmRleGFtLmMKKwkgKi8KKwlp ZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQorCQlzY2FuLT54c19iYXRjaC0+Y3Vy ckluZGV4ID0gLTE7CisJZWxzZQorCQlzY2FuLT54c19iYXRjaC0+Y3VyckluZGV4ID0gc2Nh bi0+eHNfYmF0Y2gtPm5oZWFwdGlkczsKKworCS8qIHNob3VsZG4ndCBiZSBwb3NzaWJsZSB0 byBlbmQgaGVyZSB3aXRoIGFuIGVtcHR5IGJhdGNoICovCisJQXNzZXJ0KHNjYW4tPnhzX2Jh dGNoLT5uaGVhcHRpZHMgPiAwKTsKK30KKworLyoKKyAqCV9idF9maXJzdF9iYXRjaCgpIC0t IEZpbmQgdGhlIGZpcnN0IGJhdGNoIGluIGEgc2Nhbi4KKyAqCisgKiBBIGJhdGNoIHZhcmlh bnQgb2YgX2J0X2ZpcnN0KCkuIE1vc3Qgb2YgdGhlIGNvbW1lbnRzIGZvciB0aGF0IGZ1bmN0 aW9uCisgKiBhcHBseSBoZXJlIHRvby4KKyAqCisgKiBYWFggVGhpcyBvbmx5IHBvcHVsYXRl cyB0aGUgYmF0Y2gsIGl0IGRvZXMgbm90IHNldCBhbnkgb3RoZXIgZmllbGRzIGxpa2UKKyAq IHNjYW4tPnhzX2hlYXB0aWQgb3Igc2Nhbi0+eHNfaXR1cC4gVGhhdCBoYXBwZW5zIGluIGdl dG5leHRfdGlkKCkgY2FsbHMuCisgKgorICogWFhYIEknbSBub3Qgc3VyZSBpdCB3b3JrcyB0 byBtaXggYmF0Y2hlZCBhbmQgbm9uLWJhdGNoZXMgY2FsbHMsIGUuZy4gZ2V0CisgKiBhIFRJ RCBhbmQgdGhlbiBhIGJhdGNoIG9mIFRJRHMuIEl0IHByb2JhYmx5IHNob3VsZCB3b3JrIGFz IGxvbmcgYXMgd2UKKyAqIHVwZGF0ZSBpdGVtSW5kZXggY29ycmVjdGx5LCBidXQgd2UgbmVl ZCB0byBiZSBjYXJlZnVsIGFib3V0IGtpbGxlZCBpdGVtcworICogKHJpZ2h0IG5vdyB0aGUg dHdvIHBsYWNlcyB1c2UgZGlmZmVyZW50IHdheXMgdG8gY29tbXVuaWNhdGUgd2hpY2ggaXRl bXMKKyAqIHNob3VsZCBiZSBraWxsZWQpLgorICovCitib29sCitfYnRfZmlyc3RfYmF0Y2go SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKK3sKKwlCVFNjYW5PcGFx dWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisKKwlBc3NlcnQoc2Nhbi0+ eHNfYmF0Y2gtPm5oZWFwdGlkcyA9PSAwKTsKKworCS8qCisJICogTWFyayB0aGUgYmF0Y2gg YXMgZW1wdHkuCisJICoKKwkgKiBUaGlzIG1pZ2h0IHNlZW1zIGEgYml0IHN0cmFuZ2UsIGJl Y2F1c2Ugc3VyZWx5IHRoZSBiYXRjaCBzaG91bGQgYmUKKwkgKiBlbXB0eSBiZWZvcmUgcmVh ZGluZyB0aGUgZmlyc3QgYmF0Y2ggKHdlIHJlc2V0IHRob3NlIGluZGV4ZXMgYm90aCBpbgor CSAqIGJ0YmVnaW5zY2FuIGFuZCBidHJlc2NhbikuIFNvIHdoeSBub3QgYW4gYXNzZXJ0PyBX ZSBjYW4gZ2V0IGhlcmUgaW4KKwkgKiBkaWZmZXJlbnQgd2F5cyB0b28gLSBub3QganVzdCBh ZnRlciBiZWdpbnNjYW4vcmVzY2FuLCBidXQgYWxzbyB3aGVuCisJICogaXRlcmF0aW5nIG92 ZXIgU2NhbGFyQXJyYXlPcHMgLSBpbiB3aGljaCBjYXNlIHdlJ2xsIHNlZSB0aGUgbGFzdCBi YXRjaAorCSAqIG9mIHRoZSBwcmVjZWRpbmcgc2Nhbi4KKwkgKi8KKwlzby0+YmF0Y2guZmly c3RJbmRleCA9IC0xOworCXNvLT5iYXRjaC5sYXN0SW5kZXggPSAtMTsKKworCS8qIHdlIGhh dmVuJ3QgdmlzaXRlZCBhbnkgbGVhZiBwYWdlcyB5ZXQsIHNvIHByb2NlZWQgdG8gcmVhZGlu ZyBvbmUgKi8KKwlpZiAoX2J0X2ZpcnN0KHNjYW4sIGRpcikpCisJeworCQkvKiByYW5nZSBv ZiB0aGUgbGVhZiB0byBjb3B5IGludG8gdGhlIGJhdGNoICovCisJCWludAkJCXN0YXJ0LAor CQkJCQllbmQ7CisKKwkJLyogZGV0ZXJtaW5lIHdoaWNoIHBhcnQgb2YgdGhlIGxlYWYgcGFn ZSB0byBleHRyYWN0ICovCisJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJ CXsKKwkJCXN0YXJ0ID0gc28tPmN1cnJQb3MuZmlyc3RJdGVtOworCQkJZW5kID0gTWluKHN0 YXJ0ICsgKHNjYW4tPnhzX2JhdGNoLT5jdXJyU2l6ZSAtIDEpLCBzby0+Y3VyclBvcy5sYXN0 SXRlbSk7CisJCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSAoZW5kICsgMSk7CisJCX0KKwkJ ZWxzZQorCQl7CisJCQllbmQgPSBzby0+Y3VyclBvcy5sYXN0SXRlbTsKKwkJCXN0YXJ0ID0g TWF4KGVuZCAtIChzY2FuLT54c19iYXRjaC0+Y3VyclNpemUgLSAxKSwKKwkJCQkJCXNvLT5j dXJyUG9zLmZpcnN0SXRlbSk7CisJCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSAoc3RhcnQg LSAxKTsKKwkJfQorCisJCS8qCisJCSAqIENvcHkgdGhlIHNlbGVjdGVkIHJhbmdlIG9mIGl0 ZW1zIGludG8gdGhlIGJhdGNoLCBzZXQgdGhlIGJhdGNoCisJCSAqIGN1cnJlbnQgaW5kZXgg cHJvcGVybHkgKGJlZm9yZSBmaXJzdCAvIGFmdGVyIGxhc3QgaXRlbSwgZGVwZW5kaW5nCisJ CSAqIG9uIHNjYW4gZGlyZWN0aW9uLgorCQkgKi8KKwkJX2J0X2NvcHlfYmF0Y2goc2Nhbiwg ZGlyLCBzbywgc3RhcnQsIGVuZCk7CisKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJu IGZhbHNlOworfQorCisvKgorICoJX2J0X25leHRfYmF0Y2goKSAtLSBHZXQgdGhlIG5leHQg YmF0Y2ggb2YgaXRlbXMgaW4gYSBzY2FuLgorICoKKyAqIEEgYmF0Y2ggdmFyaWFudCBvZiBf YnRfbmV4dCgpLiBNb3N0IG9mIHRoZSBjb21tZW50cyBmb3IgdGhhdCBmdW5jdGlvbgorICog YXBwbHkgaGVyZSB0b28uCisgKgorICogV2Ugc2hvdWxkIG9ubHkgZ2V0IGhlcmUgb25seSB3 aGVuIHRoZSBjdXJyZW50IGJhdGNoIGhhcyBubyBtb3JlIGl0ZW1zCisgKiBpbiB0aGUgZ2l2 ZW4gZGlyZWN0aW9uLiBXZSBkb24ndCBnZXQgaGVyZSB3aXRoIGVtcHR5IGJhdGNoZXMsIHRo YXQncworICogaGFuZGxlZCBieSBfYnRfZmlzdF9iYXRjaCgpLgorICoKKyAqIFhYWCBTZWUg YWxzbyB0aGUgY29tbWVudHMgYXQgX2J0X2ZpcnN0X2JhdGNoKCkgYWJvdXQgcmV0dXJuaW5n IGEgc2luZ2xlCisgKiBiYXRjaCBmb3IgdGhlIHBhZ2UsIGV0Yy4KKyAqLworYm9vbAorX2J0 X25leHRfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKK3sK KwlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisKKwlp bnQJCQlzdGFydCwKKwkJCQllbmQ7CisKKwlBc3NlcnQoc2Nhbi0+eHNfYmF0Y2gtPm5oZWFw dGlkcyA9PSAwKTsKKworCUFzc2VydENoZWNrQlRCYXRjaEluZm8oc28pOworCisJLyoKKwkg KiBDaGVjayBpZiB3ZSBzdGlsbCBoYXZlIHNvbWUgaXRlbXMgb24gdGhlIGN1cnJlbnQgbGVh ZiBwYWdlLiBJZiB5ZXMsCisJICogbG9hZCB0aGVtIGludG8gYSBiYXRjaCBhbmQgcmV0dXJu LgorCSAqCisJICogWFhYIHRyeSBjb21iaW5pbmcgdGhhdCB3aXRoIHRoZSBuZXh0IGJsb2Nr LCB0aGUgaW5uZXIgd2hpbGUgbG9vcCBpcworCSAqIGV4YWN0bHkgdGhlIHNhbWUuCisJICov CisJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKKwl7CisJCXN0YXJ0ID0gc28t PmJhdGNoLmxhc3RJbmRleCArIDE7CisJCWVuZCA9IE1pbihzdGFydCArIChzY2FuLT54c19i YXRjaC0+Y3VyclNpemUgLSAxKSwgc28tPmN1cnJQb3MubGFzdEl0ZW0pOworCQlzby0+Y3Vy clBvcy5pdGVtSW5kZXggPSAoZW5kICsgMSk7CisJfQorCWVsc2UKKwl7CisJCWVuZCA9IHNv LT5iYXRjaC5maXJzdEluZGV4IC0gMTsKKwkJc3RhcnQgPSBNYXgoZW5kIC0gKHNjYW4tPnhz X2JhdGNoLT5jdXJyU2l6ZSAtIDEpLAorCQkJCQlzby0+Y3VyclBvcy5maXJzdEl0ZW0pOwor CQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSAoc3RhcnQgLSAxKTsKKwl9CisKKwkvKgorCSAq IFdlIGhhdmUgbW9yZSBpdGVtcyBvbiB0aGUgY3VycmVudCBsZWFmIHBhZ2UuCisJICovCisJ aWYgKHN0YXJ0IDw9IGVuZCkKKwl7CisJCV9idF9jb3B5X2JhdGNoKHNjYW4sIGRpciwgc28s IHN0YXJ0LCBlbmQpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKgorCSAqIFdlJ3ZlIGNv bnN1bWVkIGFsbCBpdGVtcyBmcm9tIHRoZSBjdXJyZW50IGxlYWYgcGFnZSwgc28gdHJ5IHJl YWRpbmcgdGhlCisJICogbmV4dCBvbmUsIGFuZCBwcm9jZXNzIGl0LgorCSAqLworCWlmIChf YnRfbmV4dChzY2FuLCBkaXIpKQorCXsKKwkJLyoKKwkJICogQ2hlY2sgaWYgd2Ugc3RpbGwg aGF2ZSBzb21lIGl0ZW1zIG9uIHRoZSBjdXJyZW50IGxlYWYgcGFnZS4gSWYgeWVzLAorCQkg KiBsb2FkIHRoZW0gaW50byBhIGJhdGNoIGFuZCByZXR1cm4uCisJCSAqCisJCSAqIFhYWCB0 cnkgY29tYmluaW5nIHRoYXQgd2l0aCB0aGUgbmV4dCBibG9jaywgdGhlIGlubmVyIHdoaWxl IGxvb3AgaXMKKwkJICogZXhhY3RseSB0aGUgc2FtZS4KKwkJICovCisJCWlmIChTY2FuRGly ZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJCXsKKwkJCXN0YXJ0ID0gc28tPmN1cnJQb3MuZmly c3RJdGVtOworCQkJZW5kID0gTWluKHN0YXJ0ICsgKHNjYW4tPnhzX2JhdGNoLT5jdXJyU2l6 ZSAtIDEpLCBzby0+Y3VyclBvcy5sYXN0SXRlbSk7CisJCQlzby0+Y3VyclBvcy5pdGVtSW5k ZXggPSAoZW5kICsgMSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQllbmQgPSBzby0+Y3VyclBv cy5sYXN0SXRlbTsKKwkJCXN0YXJ0ID0gTWF4KGVuZCAtIChzY2FuLT54c19iYXRjaC0+Y3Vy clNpemUgLSAxKSwKKwkJCQkJCXNvLT5jdXJyUG9zLmZpcnN0SXRlbSk7CisJCQlzby0+Y3Vy clBvcy5pdGVtSW5kZXggPSAoc3RhcnQgLSAxKTsKKwkJfQorCisJCV9idF9jb3B5X2JhdGNo KHNjYW4sIGRpciwgc28sIHN0YXJ0LCBlbmQpOworCisJCXJldHVybiB0cnVlOworCX0KKwor CXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqCV9idF9raWxsX2JhdGNoKCkgLS0gcmVtZW1i ZXIgdGhlIGl0ZW1zLXRvLWJlLWtpbGxlZCBmcm9tIHRoZSBjdXJyZW50IGJhdGNoCisgKgor ICogV2Ugc2ltcGx5IHRyYW5zbGF0ZSB0aGUgYml0bWFwIGludG8gdGhlICJyZWd1bGFyIiBr aWxsZWRJdGVtcyBhcnJheSwgYW5kIGxldAorICogdGhhdCB0byBkcml2ZSB3aGljaCBpdGVt cyBhcmUga2lsbGVkLgorICovCit2b2lkCitfYnRfa2lsbF9iYXRjaChJbmRleFNjYW5EZXNj IHNjYW4pCit7CisJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3Bh cXVlOworCisJLyogYmFpbCBvdXQgaWYgYmF0Y2hpbmcgbm90IGVuYWJsZWQgKi8KKwlpZiAo IXNjYW4tPnhzX2JhdGNoKQorCQlyZXR1cm47CisKKwlmb3IgKGludCBpID0gMDsgaSA8IHNj YW4tPnhzX2JhdGNoLT5uS2lsbGVkSXRlbXM7IGkrKykKKwl7CisJCWludAkJCWluZGV4ID0g KHNvLT5iYXRjaC5maXJzdEluZGV4ICsgc2Nhbi0+eHNfYmF0Y2gtPmtpbGxlZEl0ZW1zW2ld KTsKKworCQkvKiBtYWtlIHN1cmUgd2UgaGF2ZSBhIHZhbGlkIGluZGV4IChpbiB0aGUgY3Vy cmVudCBsZWFmIHBhZ2UpICovCisJCUFzc2VydCgoc28tPmJhdGNoLmZpcnN0SW5kZXggPD0g aW5kZXgpICYmCisJCQkgICAoaW5kZXggPD0gc28tPmJhdGNoLmxhc3RJbmRleCkpOworCisJ CS8qCisJCSAqIFllcywgcmVtZW1iZXIgaXQgZm9yIGxhdGVyLiAoV2UnbGwgZGVhbCB3aXRo IGFsbCBzdWNoIHR1cGxlcyBhdAorCQkgKiBvbmNlIHJpZ2h0IGJlZm9yZSBsZWF2aW5nIHRo ZSBpbmRleCBwYWdlLikgIFRoZSB0ZXN0IGZvciBudW1LaWxsZWQKKwkJICogb3ZlcnJ1biBp cyBub3QganVzdCBwYXJhbm9pYTogaWYgdGhlIGNhbGxlciByZXZlcnNlcyBkaXJlY3Rpb24g aW4KKwkJICogdGhlIGluZGV4c2NhbiB0aGVuIHRoZSBzYW1lIGl0ZW0gbWlnaHQgZ2V0IGVu dGVyZWQgbXVsdGlwbGUgdGltZXMuCisJCSAqIEl0J3Mgbm90IHdvcnRoIHRyeWluZyB0byBv cHRpbWl6ZSB0aGF0LCBzbyB3ZSBkb24ndCBkZXRlY3QgaXQsIGJ1dAorCQkgKiBpbnN0ZWFk IGp1c3QgZm9yZ2V0IGFueSBleGNlc3MgZW50cmllcy4KKwkJICovCisJCWlmIChzby0+a2ls bGVkSXRlbXMgPT0gTlVMTCkKKwkJCXNvLT5raWxsZWRJdGVtcyA9IChpbnQgKikKKwkJCQlw YWxsb2MoTWF4VElEc1BlckJUcmVlUGFnZSAqIHNpemVvZihpbnQpKTsKKwkJaWYgKHNvLT5u dW1LaWxsZWQgPCBNYXhUSURzUGVyQlRyZWVQYWdlKQorCQkJc28tPmtpbGxlZEl0ZW1zW3Nv LT5udW1LaWxsZWQrK10gPSBpbmRleDsKKwl9CisKKwkvKiBub3cgcmVzZXQgdGhlIG51bWJl ciBvZiBraWxsZWQgaXRlbXMgKi8KKwlzY2FuLT54c19iYXRjaC0+bktpbGxlZEl0ZW1zID0g MDsKK30KKwogLyoKICAqCV9idF9yZWFkcGFnZSgpIC0tIExvYWQgZGF0YSBmcm9tIGN1cnJl bnQgaW5kZXggcGFnZSBpbnRvIHNvLT5jdXJyUG9zCiAgKgpAQCAtMjAyOCw2ICsyMzA1LDkg QEAgX2J0X3N0ZXBwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp CiAKIAlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwogCisJLyogVHJh bnNmZXIga2lsbGVkIGl0ZW1zIGZyb20gdGhlIGJhdGNoIHRvIHRoZSByZWd1bGFyIGFycmF5 LiAqLworCV9idF9raWxsX2JhdGNoKHNjYW4pOworCiAJLyogQmVmb3JlIGxlYXZpbmcgY3Vy cmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAqLwogCWlmIChzby0+bnVt S2lsbGVkID4gMCkKIAkJX2J0X2tpbGxpdGVtcyhzY2FuKTsKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2FjY2Vzcy9uYnRyZWUuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaApp bmRleCAxMjNmYmE2MjRkYi4uMDE2NDQ3MDljYjggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2FjY2Vzcy9uYnRyZWUuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKQEAg LTEwMjgsNiArMTAyOCwxNCBAQCB0eXBlZGVmIHN0cnVjdCBCVEFycmF5S2V5SW5mbwogCURh dHVtCSAgICplbGVtX3ZhbHVlczsJLyogYXJyYXkgb2YgbnVtX2VsZW1zIERhdHVtcyAqLwog fSBCVEFycmF5S2V5SW5mbzsKIAorLyogSW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQg YmF0Y2ggKGluIGJhdGNoZWQgaW5kZXggc2NhbnMpICovCit0eXBlZGVmIHN0cnVjdCBCVEJh dGNoSW5mbworeworCS8qIEN1cnJlbnQgcmFuZ2Ugb2YgaXRlbXMgaW4gYSBiYXRjaCAoaWYg dXNlZCkuICovCisJaW50CQkJZmlyc3RJbmRleDsKKwlpbnQJCQlsYXN0SW5kZXg7Cit9IEJU QmF0Y2hJbmZvOworCiB0eXBlZGVmIHN0cnVjdCBCVFNjYW5PcGFxdWVEYXRhCiB7CiAJLyog dGhlc2UgZmllbGRzIGFyZSBzZXQgYnkgX2J0X3ByZXByb2Nlc3Nfa2V5cygpOiAqLwpAQCAt MTA0OCw2ICsxMDU2LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuT3BhcXVlRGF0YQogCWlu dAkJICAgKmtpbGxlZEl0ZW1zOwkvKiBjdXJyUG9zLml0ZW1zIGluZGV4ZXMgb2Yga2lsbGVk IGl0ZW1zICovCiAJaW50CQkJbnVtS2lsbGVkOwkJLyogbnVtYmVyIG9mIGN1cnJlbnRseSBz dG9yZWQgaXRlbXMgKi8KIAorCS8qIGluZm8gYWJvdXQgY3VycmVudCBiYXRjaCAqLworCUJU QmF0Y2hJbmZvIGJhdGNoOworCiAJLyoKIAkgKiBJZiB3ZSBhcmUgZG9pbmcgYW4gaW5kZXgt b25seSBzY2FuLCB0aGVzZSBhcmUgdGhlIHR1cGxlIHN0b3JhZ2UKIAkgKiB3b3Jrc3BhY2Vz IGZvciB0aGUgY3VyclBvcyBhbmQgbWFya1BvcyByZXNwZWN0aXZlbHkuICBFYWNoIGlzIG9m IHNpemUKQEAgLTExNjIsNiArMTE3Myw3IEBAIGV4dGVybiBJbmRleFNjYW5EZXNjIGJ0YmVn aW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKTsKIGV4dGVy biBTaXplIGJ0ZXN0aW1hdGVwYXJhbGxlbHNjYW4oaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlz KTsKIGV4dGVybiB2b2lkIGJ0aW5pdHBhcmFsbGVsc2Nhbih2b2lkICp0YXJnZXQpOwogZXh0 ZXJuIGJvb2wgYnRnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyKTsKK2V4dGVybiBib29sIGJ0Z2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcik7CiBleHRlcm4gaW50NjQgYnRnZXRiaXRtYXAoSW5kZXhTY2FuRGVz YyBzY2FuLCBUSURCaXRtYXAgKnRibSk7CiBleHRlcm4gdm9pZCBidHJlc2NhbihJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAkJCQkJIFNj YW5LZXkgb3JkZXJieXMsIGludCBub3JkZXJieXMpOwpAQCAtMTI2OSw2ICsxMjgxLDkgQEAg ZXh0ZXJuIE9mZnNldE51bWJlciBfYnRfYmluc3JjaF9pbnNlcnQoUmVsYXRpb24gcmVsLCBC VEluc2VydFN0YXRlIGluc2VydHN0YXRlKTsKIGV4dGVybiBpbnQzMiBfYnRfY29tcGFyZShS ZWxhdGlvbiByZWwsIEJUU2Nhbkluc2VydCBrZXksIFBhZ2UgcGFnZSwgT2Zmc2V0TnVtYmVy IG9mZm51bSk7CiBleHRlcm4gYm9vbCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcik7CiBleHRlcm4gYm9vbCBfYnRfbmV4dChJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBib29sIF9idF9maXJzdF9iYXRj aChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBib29s IF9idF9uZXh0X2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp OworZXh0ZXJuIHZvaWQgX2J0X2tpbGxfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4 dGVybiBCdWZmZXIgX2J0X2dldF9lbmRwb2ludChSZWxhdGlvbiByZWwsIHVpbnQzMiBsZXZl bCwgYm9vbCByaWdodG1vc3QpOwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApp bmRleCA2Mzc4ZTE4MjIzOC4uZDg2NTgyZGI0NTQgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0CkBAIC0xODgsNiArMTg4LDcgQEAgQk9PTAogQk9PTEVBTgogQk9YCiBCVEFycmF5 S2V5SW5mbworQlRCYXRjaEluZm8KIEJUQnVpbGRTdGF0ZQogQlRDeWNsZUlkCiBCVERlZHVw SW50ZXJ2YWwKLS0gCjIuNDcuMAoK --------------4qyQcmdBaK2FloOMEeBLhmx6 Content-Type: text/x-patch; charset=UTF-8; name="v20241106-0003-PoC-support-for-mark-restore-for-nbtree.patch" Content-Disposition: attachment; filename*0="v20241106-0003-PoC-support-for-mark-restore-for-nbtree.patch" Content-Transfer-Encoding: base64 RnJvbSA0YTBmNDFjMDI5ZjdhZDI1YzFmMGJjODMwYWFhNGFhZDUyMGQxMGMzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogTW9uLCAzMCBTZXAgMjAyNCAyMjo0ODo0NiArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjQxMTA2IDMvN10gUG9DOiBzdXBwb3J0IGZvciBtYXJrL3Jlc3RvcmUgZm9yIG5idHJl ZQoKQWRkcyBzdXBwb3J0IGZvciBiYXRjaGluZyBmb3IgbWFyay9yZXN0b3JlIHdpdGggYnRy ZWUgaW5kZXhlcywgd2hpY2gKbWFrZXMgcHJlZmV0Y2hpbmcgd29yayB3aXRoIG1lcmdlam9p bnMsIGZvciBleGFtcGxlLgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFt LmMgICAgICAgfCAgNDAgKysrKy0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 cmVlLmMgICAgICAgfCAxMTEgKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMgfCAgMTEgKy0tCiBzcmMvYmFja2VuZC9leGVj dXRvci9ub2RlSW5kZXhzY2FuLmMgICAgIHwgIDExICstLQogc3JjL2luY2x1ZGUvYWNjZXNz L25idHJlZS5oICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvcmVs c2Nhbi5oICAgICAgICAgICAgIHwgICA2ICsrCiA3IGZpbGVzIGNoYW5nZWQsIDE1MiBpbnNl cnRpb25zKCspLCAzMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaW5kZXgvaW5kZXhhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4 YW0uYwppbmRleCAyODQ5YWI5N2NkZi4uYjExNzg1M2Y4ZDAgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2luZGV4L2luZGV4YW0uYwpAQCAtNDk3LDE2ICs0OTcsOSBAQCBpbmRleF9yZXN0cnBvcyhJ bmRleFNjYW5EZXNjIHNjYW4pCiAJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFt cmVzdHJwb3Moc2Nhbik7CiAKIAkvKgotCSAqIFJlc2V0IHRoZSBiYXRjaCwgdG8gbWFrZSBp dCBsb29rIGVtcHR5LgotCSAqCi0JICogRG9uZSBhZnRlciB0aGUgYW1yZXNjYW4oKSBjYWxs LCBpbiBjYXNlIHRoZSBBTSBuZWVkcyBzb21lIG9mIHRoZSBiYXRjaAotCSAqIGluZm8gKGUu Zy4gdG8gcHJvcGVybHkgdHJhbnNmZXIgdGhlIGtpbGxlZCB0dXBsZXMpLgotCSAqCi0JICog WFhYIFRoaXMgaXMgYSBiaXQgbWlzbGVhZGluZywgYmVjYXVzZSBpbmRleF9iYXRjaF9yZXNl dCBkb2VzIG5vdCByZXNldAotCSAqIHRoZSBraWxsZWQgdHVwbGVzLiBTbyBpZiB0aGF0J3Mg dGhlIG9ubHkganVzdGlmaWNhdGlvbiwgd2UgY291bGQgaGF2ZQotCSAqIGRvbmUgaXQgYmVm b3JlIHRoZSBjYWxsLgorCSAqIERvbid0IHJlc2V0IHRoZSBiYXRjaCBoZXJlIC0gYW1yZXN0 cnBvcyBzaG91bGQgaGF2ZSBoYXMgYWxyZWFkeSBsb2FkZWQKKwkgKiB0aGUgbmV3IGJhdGNo LCBzbyBkb24ndCB0aHJvdyB0aGF0IGF3YXkuCiAJICovCi0JaW5kZXhfYmF0Y2hfcmVzZXQo c2Nhbik7CiB9CiAKIC8qCkBAIC0xMjk5LDEyICsxMjkyLDkgQEAgaW5kZXhfb3BjbGFzc19v cHRpb25zKFJlbGF0aW9uIGluZHJlbCwgQXR0ck51bWJlciBhdHRudW0sIERhdHVtIGF0dG9w dGlvbnMsCiAgKgogICogV2l0aCBiYXRjaGluZywgdGhlIGluZGV4IEFNIGRvZXMgbm90IGtu b3cgdGhlIHRoZSAiY3VycmVudCIgcG9zaXRpb24gb24KICAqIHRoZSBsZWFmIHBhZ2UgLSB3 ZSBkb24ndCBwcm9wYWdhdGUgdGhpcyB0byB0aGUgaW5kZXggQU0gd2hpbGUgd2Fsa2luZwot ICogaXRlbXMgaW4gdGhlIGJhdGNoLiBUbyBtYWtlIGFtbWFya3BvcygpIHdvcmssIHRoZSBp bmRleCBBTSBoYXMgdG8gY2hlY2sKKyAqIGl0ZW1zIGluIHRoZSBiYXRjaC4gVG8gbWFrZSBh bW1hcmtwb3MoKSB3b3JrLCB0aGUgaW5kZXggQU0gY2FuIGNoZWNrCiAgKiB0aGUgY3VycmVu dCBwb3NpdGlvbiBpbiB0aGUgYmF0Y2gsIGFuZCB0cmFuc2xhdGUgaXQgdG8gdGhlIHByb3Bl ciBwYWdlCiAgKiBwb3NpdGlvbiwgdXNpbmcgdGhlIHByaXZhdGUgaW5mb3JtYXRpb24gKGFi b3V0IGl0ZW1zIGluIHRoZSBiYXRjaCkuCi0gKgotICogWFhYIFRoaXMgbmVlZHMgbW9yZSB3 b3JrLCBJIGRvbid0IHF1aXRlIGxpa2UgaG93IHRoZSB0d28gbGF5ZXJzIGludGVyYWN0LAot ICogaXQgc2VlbXMgcXVpdGUgd3JvbmcgdG8gbG9vayBhdCB0aGUgYmF0Y2ggaW5mbyBkaXJl Y3RseS4KICAqLwogCiAvKgpAQCAtMTM3Miw5ICsxMzYyLDE3IEBAIEFzc2VydENoZWNrQmF0 Y2hJbmZvKEluZGV4U2NhbkRlc2Mgc2NhbikKIAkJKChzY2FuKS0+eHNfYmF0Y2gtPm5oZWFw dGlkcyA9PSAoKHNjYW4pLT54c19iYXRjaC0+Y3VyckluZGV4ICsgMSkpIDogXAogCQkoKHNj YW4pLT54c19iYXRjaC0+Y3VyckluZGV4ID09IDApKQogCi0vKiBEb2VzIHRoZSBiYXRjaCBp dGVtcyBpbiB0aGUgcmVxdWVzdGVkIGRpcmVjdGlvbj8gKi8KKy8qCisgKiBEb2VzIHRoZSBi YXRjaCBpdGVtcyBpbiB0aGUgcmVxdWVzdGVkIGRpcmVjdGlvbj8gVGhlIGJhdGNoIG11c3Qg YmUgbm9uLWVtcHR5CisgKiBhbmQgd2Ugc2hvdWxkIG5vdCBoYXZlIHJlYWNoZWQgdGhlIGVu ZCBvZiB0aGUgYmF0Y2ggKGluIHRoZSBkaXJlY3Rpb24pLgorICogQWxzbywgaWYgd2UganVz dCByZXN0b3JlZCB0aGUgcG9zaXRpb24gYWZ0ZXIgbWFyay9yZXN0b3JlLCB0aGVyZSBzaG91 bGQgYmUKKyAqIGF0IGxlYXN0IG9uZSBpdGVtIHRvIHByb2Nlc3MgKHdlIHdvbid0IGFkdmFu Y2UgIG9uIHRoZSBuZXh0IGNhbGwpLgorICoKKyAqIFhYWCBUaGlzIGlzIGEgYml0IGNvbmZ1 c2luZyAvIHVnbHksIHByb2JhYmx5IHNob3VsZCByZXRoaW5rIGhvdyB3ZSB0cmFjaworICog ZW1wdHkgYmF0Y2hlcywgYW5kIGhvdyB3ZSBoYW5kbGUgbm90IGFkdmFuY2luZyBhZnRlciBh IHJlc3RvcmUuCisgKi8KICNkZWZpbmUgSU5ERVhfQkFUQ0hfSEFTX0lURU1TKHNjYW4sIGRp cmVjdGlvbikgXAotCSghSU5ERVhfQkFUQ0hfSVNfRU1QVFkoc2NhbikgJiYgIUlOREVYX0JB VENIX0lTX1BST0NFU1NFRChzY2FuLCBkaXJlY3Rpb24pKQorCSghSU5ERVhfQkFUQ0hfSVNf RU1QVFkoc2NhbikgJiYgKCFJTkRFWF9CQVRDSF9JU19QUk9DRVNTRUQoc2NhbiwgZGlyZWN0 aW9uKSB8fCBzY2FuLT54c19iYXRjaC0+cmVzdG9yZWQpKQogCiAKIC8qIC0tLS0tLS0tLS0t LS0tLS0KQEAgLTE1MjcsOCArMTUyNSwxNyBAQCBpbmRleF9iYXRjaF9nZXRuZXh0X3RpZChJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQogCS8qCiAJICog QWR2YW5jZSB0byB0aGUgbmV4dCBiYXRjaCBpdGVtIC0gd2Uga25vdyBpdCdzIG5vdCBlbXB0 eSBhbmQgdGhlcmUgYXJlCiAJICogaXRlbXMgdG8gcHJvY2Vzcywgc28gdGhpcyBpcyB2YWxp ZC4KKwkgKgorCSAqIEhvd2V2ZXIsIGRvbid0IGFkdmFuY2UgaWYgdGhpcyBpcyB0aGUgZmly c3QgZ2V0bmV4dF90aWQoKSBjYWxsIGFmdGVyCisJICogYW1yZXN0cnBvcygpLiBUaGF0IHNl dHMgdGhlIHBvc2l0aW9uIG9uIHRoZSBjb3JyZWN0IGl0ZW0sIGFuZCBhZHZhbmNpbmcKKwkg KiBoZXJlIHdvdWxkIHNraXAgaXQuCisJICoKKwkgKiBYWFggVGhlICJyZXN0b3JlZCIgZmxh ZyBpcyBhIGJpdCB3ZWlyZC4gQ2FuIHdlIGRvIHRoaXMgd2l0aG91dCBpdD8gTWF5CisJICog bmVlZCB0byByZXRoaW5rIHdoZW4vaG93IHdlIGFkdmFuY2UgdGhlIGJhdGNoIGluZGV4LiBO b3Qgc3VyZS4KIAkgKi8KLQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24p KQorCWlmIChzY2FuLT54c19iYXRjaC0+cmVzdG9yZWQpCisJCXNjYW4tPnhzX2JhdGNoLT5y ZXN0b3JlZCA9IGZhbHNlOworCWVsc2UgaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGly ZWN0aW9uKSkKIAkJc2Nhbi0+eHNfYmF0Y2gtPmN1cnJJbmRleCsrOwogCWVsc2UKIAkJc2Nh bi0+eHNfYmF0Y2gtPmN1cnJJbmRleC0tOwpAQCAtMTc4NCw2ICsxNzkxLDcgQEAgaW5kZXhf YmF0Y2hfcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuKQogCXNjYW4tPnhzX2JhdGNoLT5uaGVh cHRpZHMgPSAwOwogCXNjYW4tPnhzX2JhdGNoLT5wcmVmZXRjaEluZGV4ID0gMDsKIAlzY2Fu LT54c19iYXRjaC0+Y3VyckluZGV4ID0gLTE7CisJc2Nhbi0+eHNfYmF0Y2gtPnJlc3RvcmVk ID0gZmFsc2U7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL25idHJlZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYwppbmRl eCBiYmFhM2RmMmEwYy4uZGIwZTIyZTBjZTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0cmVlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9u YnRyZWUuYwpAQCAtNTE5LDYgKzUxOSwyNSBAQCBidG1hcmtwb3MoSW5kZXhTY2FuRGVzYyBz Y2FuKQogCS8qIFRoZXJlIG1heSBiZSBhbiBvbGQgbWFyayB3aXRoIGEgcGluIChidXQgbm8g bG9jaykuICovCiAJQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+bWFya1Bvcyk7CiAKKwkv KgorCSAqIFdpdGggYmF0Y2hlZCBzY2Fucywgd2UgZG9uJ3QgbWFpbnRhaW4gdGhlIGl0ZW1J bmRleCB3aGVuIHByb2Nlc3NpbmcgdGhlCisJICogYmF0Y2gsIHNvIHdlIG5lZWQgdG8gY2Fs Y3VsYXRlIHRoZSBjdXJyZW50IHZhbHVlLgorCSAqCisJICogRklYTUUgSSBkb24ndCBsaWtl IHRoYXQgdGhpcyByZXF1aXJlcyBrbm93bGVkZ2Ugb2YgYmF0Y2hpbmcgZGV0YWlscywKKwkg KiBJJ2QgdmVyeSBtdWNoIHByZWZlciB0aG9zZSB0byByZW1haW4gaXNvbGF0ZWQgaW4gaW5k ZXhhbS5jLiBUaGUgYmVzdAorCSAqIGlkZWEgSSBoYXZlIGlzIGEgZnVuY3Rpb24gdGhhdCBy ZXR1cm5zIHRoZSBiYXRjaCBpbmRleCwgc29tZXRoaW5nIGxpa2UKKwkgKiBpbmRleF9iYXRj aF9nZXRfaW5kZXgoKS4gVGhhdCdzIGNsb3NlIHRvIGhvdyBvdGhlciBwbGFjZXMgaW4gQU1z IHRhbGsKKwkgKiB0byBpbmRleGFtLmMgKGUuZy4gd2hlbiBzZXR0aW5nIGRpc3RhbmNlcyAv IG9yZGVyYnkgaW4gc3BnaXN0KS4KKwkgKi8KKwlpZiAoc2Nhbi0+eHNfYmF0Y2gpCisJewor CQkvKiB0aGUgaW5kZXggc2hvdWxkIGJlIHZhbGlkIGluIHRoZSBiYXRjaCAqLworCQlBc3Nl cnQoc2Nhbi0+eHNfYmF0Y2gtPmN1cnJJbmRleCA+PSAwKTsKKwkJQXNzZXJ0KHNjYW4tPnhz X2JhdGNoLT5jdXJySW5kZXggPCBzY2FuLT54c19iYXRjaC0+bmhlYXB0aWRzKTsKKworCQlz by0+Y3VyclBvcy5pdGVtSW5kZXggPSBzby0+YmF0Y2guZmlyc3RJbmRleCArIHNjYW4tPnhz X2JhdGNoLT5jdXJySW5kZXg7CisJfQorCiAJLyoKIAkgKiBKdXN0IHJlY29yZCB0aGUgY3Vy cmVudCBpdGVtSW5kZXguICBJZiB3ZSBsYXRlciBzdGVwIHRvIG5leHQgcGFnZQogCSAqIGJl Zm9yZSByZWxlYXNpbmcgdGhlIG1hcmtlZCBwb3NpdGlvbiwgX2J0X3N0ZXBwYWdlIG1ha2Vz IGEgZnVsbCBjb3B5IG9mCkBAIC01NTIsNiArNTcxLDU5IEBAIGJ0cmVzdHJwb3MoSW5kZXhT Y2FuRGVzYyBzY2FuKQogCQkgKiBhY2N1cmF0ZS4KIAkJICovCiAJCXNvLT5jdXJyUG9zLml0 ZW1JbmRleCA9IHNvLT5tYXJrSXRlbUluZGV4OworCisJCS8qCisJCSAqIFdlJ3JlIHJlc3Rv cmluZyB0byBhIGRpZmZlcmVudCBwb3NpdGlvbiBvbiB0aGUgc2FtZSBwYWdlLCBidXQgdGhl CisJCSAqIHdyb25nIGJhdGNoIG1heSBiZSBsb2FkZWQuIENoZWNrIGlmIHRoZSBjdXJyZW50 IGJhdGNoIGluY2x1ZGVzCisJCSAqIGl0ZW1JbmRleCwgYW5kIGxvYWQgdGhlIGNvcnJlY3Qg YmF0Y2ggaWYgbm90LiBXZSBkb24ndCBrbm93IGluCisJCSAqIHdoaWNoIGRpcmVjdGlvbiB0 aGUgc2NhbiB3aWxsIG1vdmUsIHNvIHdlIHRyeSB0byBwdXQgdGhlIGN1cnJlbnQKKwkJICog aW5kZXggaW4gdGhlIG1pZGRsZSBvZiBhIGJhdGNoLiBGb3IgaW5kZXhlcyBjbG9zZSB0byB0 aGUgZW5kIG9mIHRoZQorCQkgKiBwYWdlIHdlIG1heSBsb2FkIGZld2VyIGl0ZW1zLCBidXQg dGhhdCBzZWVtcyBhY2NlcHRhYmxlLgorCQkgKgorCQkgKiBUaGVuIHVwZGF0ZSB0aGUgaW5k ZXggb2YgdGhlIGN1cnJlbnQgaXRlbSwgZXZlbiBpZiB3ZSBhbHJlYWR5IGhhdmUKKwkJICog dGhlIGNvcnJlY3QgYmF0Y2ggbG9hZGVkLgorCQkgKgorCQkgKiBGSVhNRSBTaW1pbGFyIHRv IGJ0bWFya3BvcygpIC0gSSBkb24ndCBsaWtlIGhvdyB0aGlzIGxlYWtzIGRldGFpbHMKKwkJ ICogdGhhdCBzaG91bGQgYmUgc3BlY2lmaWMgdG8gaW5kZXhhbS5jLiBUaGUgInJlc3RvcmVk IiBmbGFnIGlzIHdlaXJkCisJCSAqIHRvbyAtIGJ1dCBldmVuIGlmIHdlIG5lZWQgaXQsIHdl IGNvdWxkIHNldCBpdCBpbiBpbmRleGFtLmMsIHJpZ2h0PworCQkgKi8KKwkJaWYgKHNjYW4t PnhzX2JhdGNoICE9IE5VTEwpCisJCXsKKwkJCWlmICgoc28tPmN1cnJQb3MuaXRlbUluZGV4 IDwgc28tPmJhdGNoLmZpcnN0SW5kZXgpIHx8CisJCQkJKHNvLT5jdXJyUG9zLml0ZW1JbmRl eCA+IHNvLT5iYXRjaC5sYXN0SW5kZXgpKQorCQkJeworCQkJCWludAkJCXN0YXJ0ID0gTWF4 KHNvLT5jdXJyUG9zLmZpcnN0SXRlbSwKKwkJCQkJCQkJCQlzby0+Y3VyclBvcy5pdGVtSW5k ZXggLSAoc2Nhbi0+eHNfYmF0Y2gtPmN1cnJTaXplIC8gMikpOworCQkJCWludAkJCWVuZCA9 IE1pbihzby0+Y3VyclBvcy5sYXN0SXRlbSwKKwkJCQkJCQkJCSAgc3RhcnQgKyAoc2Nhbi0+ eHNfYmF0Y2gtPmN1cnJTaXplIC0gMSkpOworCisJCQkJQXNzZXJ0KHN0YXJ0IDw9IGVuZCk7 CisJCQkJQXNzZXJ0KChlbmQgLSBzdGFydCArIDEpIDw9IHNjYW4tPnhzX2JhdGNoLT5jdXJy U2l6ZSk7CisKKwkJCQkvKiBtYWtlIGl0IGxvb2sgZW1wdHkgKi8KKwkJCQlzY2FuLT54c19i YXRjaC0+bmhlYXB0aWRzID0gMDsKKwkJCQlzY2FuLT54c19iYXRjaC0+cHJlZmV0Y2hJbmRl eCA9IC0xOworCisJCQkJLyoKKwkJCQkgKiBYWFggdGhlIHNjYW4gZGlyZWN0aW9uIGlzIGJv Z3VzIC8gbm90IGltcG9ydGFudC4gSXQgYWZmZWN0cworCQkJCSAqIG9ubHkgaG93IHdlIGFk dmFuY2UgdGhlIGN1cnJJbmRleCwgYnV0IHdlJ2xsIG92ZXJyaWRlIHRoYXQKKwkJCQkgKiBh bnl3YXkgdG8gcG9pbnQgYXQgdGhlICJjb3JyZWN0IiBlbnRyeS4KKwkJCQkgKi8KKwkJCQlf YnRfY29weV9iYXRjaChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgc28sIHN0YXJ0LCBl bmQpOworCQkJfQorCisJCQkvKgorCQkJICogU2V0IHRoZSBiYXRjaCBpbmRleCB0byB0aGUg ImNvcnJlY3QiIHBvc2l0aW9uIGluIHRoZSBiYXRjaCwKKwkJCSAqIGV2ZW4gaWYgd2UgaGF2 ZW4ndCByZS1sb2FkZWQgaXQgZnJvbSB0aGUgcGFnZS4gQWxzbyByZW1lbWJlciB3ZQorCQkJ ICoganVzdCBkaWQgdGhpcywgc28gdGhhdCB0aGUgbmV4dCBjYWxsIHRvCisJCQkgKiBpbmRl eF9iYXRjaF9nZXRuZXh0X3RpZCgpIGRvZXMgbm90IGFkdmFuY2UgaXQgYWdhaW4uCisJCQkg KgorCQkJICogWFhYIFRoaXMgaXMgYSBiaXQgd2VpcmQuIFRoZXJlIHNob3VsZCBiZSBhIHdh eSB0byBub3QgbmVlZCB0aGUKKwkJCSAqICJyZXN0b3JlZCIgZmxhZyBJIHRoaW5rLgorCQkJ ICovCisJCQlzY2FuLT54c19iYXRjaC0+Y3VyckluZGV4ID0gKHNvLT5jdXJyUG9zLml0ZW1J bmRleCAtIHNvLT5iYXRjaC5maXJzdEluZGV4KTsKKwkJCXNjYW4tPnhzX2JhdGNoLT5yZXN0 b3JlZCA9IHRydWU7CisJCX0KIAl9CiAJZWxzZQogCXsKQEAgLTU4OSw2ICs2NjEsNDUgQEAg YnRyZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJCQkJX2J0X3N0YXJ0X2FycmF5X2tl eXMoc2Nhbiwgc28tPmN1cnJQb3MuZGlyKTsKIAkJCQlzby0+bmVlZFByaW1TY2FuID0gZmFs c2U7CiAJCQl9CisKKwkJCS8qCisJCQkgKiBXaXRoIGJhdGNoZWQgc2NhbnMsIHdlIGtub3cg dGhlIGN1cnJlbnQgYmF0Y2ggaXMgZGVmaW5pdGVseQorCQkJICogd3JvbmcgKHdlJ3ZlIG1v dmVkIHRvIGEgZGlmZmVyZW50IGxlYWYgcGFnZSkuIFNvIGVtcHR5IHRoZQorCQkJICogYmF0 Y2gsIGFuZCBsb2FkIHRoZSByaWdodCBwYXJ0IG9mIHRoZSBwYWdlLgorCQkJICoKKwkJCSAq IFNpbWlsYXJseSB0byB0aGUgYmxvY2sgYWJvdmUsIHdlIHBsYWNlIHRoZSBjdXJyZW50IGlu ZGV4IGluIHRoZQorCQkJICogbWlkZGxlIG9mIHRoZSBiYXRjaCAoaWYgcG9zc2libGUpLiBB bmQgdGhlbiB3ZSB1cGRhdGUgdGhlIGluZGV4CisJCQkgKiB0byBwb2ludCBhdCB0aGUgY29y cmVjdCBiYXRjaCBpdGVtLgorCQkJICovCisJCQlpZiAoc2Nhbi0+eHNfYmF0Y2ggIT0gTlVM TCkKKwkJCXsKKwkJCQlpbnQJCQlzdGFydCA9IE1heChzby0+Y3VyclBvcy5maXJzdEl0ZW0s CisJCQkJCQkJCQkJc28tPmN1cnJQb3MuaXRlbUluZGV4IC0gKHNjYW4tPnhzX2JhdGNoLT5j dXJyU2l6ZSAvIDIpKTsKKwkJCQlpbnQJCQllbmQgPSBNaW4oc28tPmN1cnJQb3MubGFzdEl0 ZW0sCisJCQkJCQkJCQkgIHN0YXJ0ICsgKHNjYW4tPnhzX2JhdGNoLT5jdXJyU2l6ZSAtIDEp KTsKKworCQkJCUFzc2VydChzdGFydCA8PSBlbmQpOworCQkJCUFzc2VydCgoZW5kIC0gc3Rh cnQgKyAxKSA8PSBzY2FuLT54c19iYXRjaC0+Y3VyclNpemUpOworCisJCQkJLyogbWFrZSBp dCBsb29rIGVtcHR5ICovCisJCQkJc2Nhbi0+eHNfYmF0Y2gtPm5oZWFwdGlkcyA9IDA7CisJ CQkJc2Nhbi0+eHNfYmF0Y2gtPnByZWZldGNoSW5kZXggPSAtMTsKKworCQkJCS8qIFhYWCB0 aGUgc2NhbiBkaXJlY3Rpb24gaXMgYm9ndXMgKi8KKwkJCQlfYnRfY29weV9iYXRjaChzY2Fu LCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgc28sIHN0YXJ0LCBlbmQpOworCisJCQkJLyoKKwkJ CQkgKiBTZXQgdGhlIGJhdGNoIGluZGV4IHRvIHRoZSAiY29ycmVjdCIgcG9zaXRpb24gaW4g dGhlIGJhdGNoLAorCQkJCSAqIGV2ZW4gaWYgd2UgaGF2ZW4ndCByZS1sb2FkZWQgaXQgZnJv bSB0aGUgcGFnZS4gQWxzbworCQkJCSAqIHJlbWVtYmVyIHdlIGp1c3QgZGlkIHRoaXMsIHNv IHRoYXQgdGhlIG5leHQgY2FsbCB0bworCQkJCSAqIGluZGV4X2JhdGNoX2dldG5leHRfdGlk KCkgZG9lcyBub3QgYWR2YW5jZSBpdCBhZ2Fpbi4KKwkJCQkgKgorCQkJCSAqIFhYWCBUaGlz IGlzIGEgYml0IHdlaXJkLiBUaGVyZSBzaG91bGQgYmUgYSB3YXkgdG8gbm90IG5lZWQKKwkJ CQkgKiB0aGUgInJlc3RvcmVkIiBmbGFnIEkgdGhpbmsuCisJCQkJICovCisJCQkJc2Nhbi0+ eHNfYmF0Y2gtPmN1cnJJbmRleCA9IChzby0+Y3VyclBvcy5pdGVtSW5kZXggLSBzby0+YmF0 Y2guZmlyc3RJbmRleCk7CisJCQkJc2Nhbi0+eHNfYmF0Y2gtPnJlc3RvcmVkID0gdHJ1ZTsK KwkJCX0KIAkJfQogCQllbHNlCiAJCQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9z KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jCmluZGV4IDkzMWVkYWIw NTUwLi4yMjE4MWJmMDI3YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnRzZWFyY2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJj aC5jCkBAIC0xNTIwLDcgKzE1MjAsNyBAQCBBc3NlcnRDaGVja0JUQmF0Y2hJbmZvKEJUU2Nh bk9wYXF1ZSBzbykKICAqIF9idF9jb3B5X2JhdGNoCiAgKgkJQ29weSBhIHNlY3Rpb24gb2Yg dGhlIGxlYWYgcGFnZSBpbnRvIHRoZSBiYXRjaC4KICAqLwotc3RhdGljIHZvaWQKK3ZvaWQK IF9idF9jb3B5X2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIs IEJUU2Nhbk9wYXF1ZSBzbywKIAkJCSAgIGludCBzdGFydCwgaW50IGVuZCkKIHsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMgYi9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCmluZGV4IGMwMzBjMGRmNmZl Li44ZTU1ZmZjYTE5NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUlu ZGV4b25seXNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5 c2Nhbi5jCkBAIC02MTMsMTQgKzYxMywxMyBAQCBFeGVjSW5pdEluZGV4T25seVNjYW4oSW5k ZXhPbmx5U2NhbiAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJCUV4ZWNJ bml0UXVhbChub2RlLT5yZWNoZWNrcXVhbCwgKFBsYW5TdGF0ZSAqKSBpbmRleHN0YXRlKTsK IAogCS8qCi0JICogQ2FuJ3QgZG8gYmF0Y2hpbmcgKGFuZCB0aHVzIHByZWZldGNoaW5nKSB3 aGVuIHRoZSBwbGFuIHJlcXVpcmVzIG1hcmsKLQkgKiBhbmQgcmVzdG9yZS4gVGhlcmUncyBh biBpc3N1ZSB3aXRoIHRyYW5zbGF0aW5nIHRoZSBtYXJrL3Jlc3RvcmUKLQkgKiBwb3NpdGlv bnMgYmV0d2VlbiB0aGUgYmF0Y2ggaW4gc2NhbiBkZXNjcmlwdG9yIGFuZCB0aGUgb3JpZ2lu YWwKLQkgKiBwb3NpdGlvbiByZWNvZ25pemVkIGluIHRoZSBpbmRleCBBTS4KKwkgKiBBbGwg aW5kZXggc2NhbnMgY2FuIGRvIGJhdGNoaW5nLgogCSAqCi0JICogWFhYIEhvcGVmdWxseSBq dXN0IGEgdGVtcG9yYXJ5IGxpbWl0YXRpb24/CisJICogWFhYIE1heWJlIHRoaXMgc2hvdWxk IGNoZWNrIGlmIHRoZSBpbmRleCBBTSBzdXBwb3J0cyBiYXRjaGluZywgb3IgZXZlbgorCSAq IGNhbGwgc29tZXRoaW5nIGxpa2UgImFtY2FuYmF0Y2giIChkb2VzIG5vdCBleGlzdCB5ZXQp LiBPciBjaGVjayB0aGUKKwkgKiBlbmFibGVfaW5kZXhzY2FuX2JhdGNoaW5nIEdVQz8KIAkg Ki8KLQlpbmRleHN0YXRlLT5pb3NzX0NhbkJhdGNoID0gIShlZmxhZ3MgJiBFWEVDX0ZMQUdf TUFSSyk7CisJaW5kZXhzdGF0ZS0+aW9zc19DYW5CYXRjaCA9IHRydWU7CiAKIAkvKgogCSAq IElmIHdlIGFyZSBqdXN0IGRvaW5nIEVYUExBSU4gKGllLCBhcmVuJ3QgZ29pbmcgdG8gcnVu IHRoZSBwbGFuKSwgc3RvcApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9k ZUluZGV4c2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCmlu ZGV4IDhiYmQzNjA2NTY2Li4wYTZkZDg0MDAxMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25v ZGVJbmRleHNjYW4uYwpAQCAtOTQ3LDE4ICs5NDcsMTMgQEAgRXhlY0luaXRJbmRleFNjYW4o SW5kZXhTY2FuICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJRXhlY0lu aXRFeHByTGlzdChub2RlLT5pbmRleG9yZGVyYnlvcmlnLCAoUGxhblN0YXRlICopIGluZGV4 c3RhdGUpOwogCiAJLyoKLQkgKiBDYW4ndCBkbyBiYXRjaGluZyAoYW5kIHRodXMgcHJlZmV0 Y2hpbmcpIHdoZW4gdGhlIHBsYW4gcmVxdWlyZXMgbWFyawotCSAqIGFuZCByZXN0b3JlLiBU aGVyZSdzIGFuIGlzc3VlIHdpdGggdHJhbnNsYXRpbmcgdGhlIG1hcmsvcmVzdG9yZQotCSAq IHBvc2l0aW9ucyBiZXR3ZWVuIHRoZSBiYXRjaCBpbiBzY2FuIGRlc2NyaXB0b3IgYW5kIHRo ZSBvcmlnaW5hbAotCSAqIHBvc2l0aW9uIHJlY29nbml6ZWQgaW4gdGhlIGluZGV4IEFNLgot CSAqCi0JICogWFhYIEhvcGVmdWxseSBqdXN0IGEgdGVtcG9yYXJ5IGxpbWl0YXRpb24/CisJ ICogQWxsIGluZGV4IHNjYW5zIGNhbiBkbyBiYXRjaGluZy4KIAkgKgogCSAqIFhYWCBNYXli ZSB0aGlzIHNob3VsZCBjaGVjayBpZiB0aGUgaW5kZXggQU0gc3VwcG9ydHMgYmF0Y2hpbmcs IG9yIGV2ZW4KIAkgKiBjYWxsIHNvbWV0aGluZyBsaWtlICJhbWNhbmJhdGNoIiAoZG9lcyBu b3QgZXhpc3QgeWV0KS4gT3IgY2hlY2sgdGhlCi0JICogZW5hYmxlX2luZGV4c2Nhbl9iYXRj aGluZyBHVUM/IE5vdyB3ZSBjaGVjayB0aGUgR1VDIGluIGluZGV4X2JlZ2luc2Nhbi4KKwkg KiBlbmFibGVfaW5kZXhzY2FuX2JhdGNoaW5nIEdVQz8KIAkgKi8KLQlpbmRleHN0YXRlLT5p c3NfQ2FuQmF0Y2ggPSAhKGVmbGFncyAmIEVYRUNfRkxBR19NQVJLKTsKKwlpbmRleHN0YXRl LT5pc3NfQ2FuQmF0Y2ggPSB0cnVlOwogCiAJLyoKIAkgKiBJZiB3ZSBhcmUganVzdCBkb2lu ZyBFWFBMQUlOIChpZSwgYXJlbid0IGdvaW5nIHRvIHJ1biB0aGUgcGxhbiksIHN0b3AKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaCBiL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9uYnRyZWUuaAppbmRleCAwMTY0NDcwOWNiOC4uNDcxNGE3MjM4YzEgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nl c3MvbmJ0cmVlLmgKQEAgLTEyODUsNiArMTI4NSw4IEBAIGV4dGVybiBib29sIF9idF9maXJz dF9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKIGV4dGVy biBib29sIF9idF9uZXh0X2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXIpOwogZXh0ZXJuIHZvaWQgX2J0X2tpbGxfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2Fu KTsKIGV4dGVybiBCdWZmZXIgX2J0X2dldF9lbmRwb2ludChSZWxhdGlvbiByZWwsIHVpbnQz MiBsZXZlbCwgYm9vbCByaWdodG1vc3QpOworZXh0ZXJuIHZvaWQgX2J0X2NvcHlfYmF0Y2go SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgQlRTY2FuT3BhcXVlIHNv LAorCQkJCQkJICAgaW50IHN0YXJ0LCBpbnQgZW5kKTsKIAogLyoKICAqIHByb3RvdHlwZXMg Zm9yIGZ1bmN0aW9ucyBpbiBuYnR1dGlscy5jCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9h Y2Nlc3MvcmVsc2Nhbi5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAppbmRleCA4 ZmQyZGE4NTE0ZC4uMzNkMmI2YTYyMjMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vz cy9yZWxzY2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaApAQCAtMjI3 LDYgKzIyNywxMiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5CYXRjaERhdGEKIAkvKiBt ZW1vcnkgY29udGV4dCBmb3IgcGVyLWJhdGNoIGRhdGEgKi8KIAlNZW1vcnlDb250ZXh0IGN0 eDsKIAorCS8qCisJICogV2FzIHRoaXMgYmF0Y2gganVzdCByZXN0b3JlZCBieSByZXN0cnBv cz8gaWYgeWVzLCB3ZSBkb24ndCBhZHZhbmNlIG9uCisJICogdGhlIGZpcnN0IGl0ZXJhdGlv bi4KKwkgKi8KKwlib29sCQlyZXN0b3JlZDsKKwogCS8qIGJhdGNoIHByZWZldGNoaW5nICov CiAJaW50CQkJcHJlZmV0Y2hUYXJnZXQ7IC8qIGN1cnJlbnQgcHJlZmV0Y2ggZGlzdGFuY2Ug Ki8KIAlpbnQJCQlwcmVmZXRjaE1heGltdW07CS8qIG1heGltdW0gcHJlZmV0Y2ggZGlzdGFu Y2UgKi8KLS0gCjIuNDcuMAoK --------------4qyQcmdBaK2FloOMEeBLhmx6 Content-Type: text/x-patch; charset=UTF-8; name="v20241106-0004-WIP-batching-for-hash-indexes.patch" Content-Disposition: attachment; filename="v20241106-0004-WIP-batching-for-hash-indexes.patch" Content-Transfer-Encoding: base64 RnJvbSA4YTE3YmQ4NTMzZmEzYTc1MjZkZTJmYmUyNTY4YzlmZDBiZjMwODI5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogTW9uLCAzMCBTZXAgMjAyNCAyMjo0ODo1MiArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjQxMTA2IDQvN10gV0lQOiBiYXRjaGluZyBmb3IgaGFzaCBpbmRleGVzCgotLS0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyAgICAgICB8ICA0MyArKysrCiBzcmMvYmFj a2VuZC9hY2Nlc3MvaGFzaC9oYXNoc2VhcmNoLmMgfCAyODMgKysrKysrKysrKysrKysrKysr KysrKysrKysrCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGFzaC5oICAgICAgICAgICAgfCAgMTcg KysKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICB8ICAgMSArCiA0IGZp bGVzIGNoYW5nZWQsIDM0NCBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL2hhc2gvaGFzaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5j CmluZGV4IDVjZTM2MDkzOTQzLi5kOTA0NTQ4MTQ4ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL2hhc2gvaGFzaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hh c2guYwpAQCAtOTgsNiArOTgsNyBAQCBoYXNoaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQog CWFtcm91dGluZS0+YW1iZWdpbnNjYW4gPSBoYXNoYmVnaW5zY2FuOwogCWFtcm91dGluZS0+ YW1yZXNjYW4gPSBoYXNocmVzY2FuOwogCWFtcm91dGluZS0+YW1nZXR0dXBsZSA9IGhhc2hn ZXR0dXBsZTsKKwlhbXJvdXRpbmUtPmFtZ2V0YmF0Y2ggPSBoYXNoZ2V0YmF0Y2g7CiAJYW1y b3V0aW5lLT5hbWdldGJpdG1hcCA9IGhhc2hnZXRiaXRtYXA7CiAJYW1yb3V0aW5lLT5hbWVu ZHNjYW4gPSBoYXNoZW5kc2NhbjsKIAlhbXJvdXRpbmUtPmFtbWFya3BvcyA9IE5VTEw7CkBA IC0zMjksNiArMzMwLDQyIEBAIGhhc2hnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyKQogfQogCiAKKy8qCisgKgloYXNoZ2V0YmF0Y2goKSAtLSBHZXQg dGhlIG5leHQgYmF0Y2ggb2YgdHVwbGVzIGluIHRoZSBzY2FuLgorICovCitib29sCitoYXNo Z2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKK3sKKwlI YXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCWJv b2wJCXJlczsKKworCS8qIEhhc2ggaW5kZXhlcyBhcmUgYWx3YXlzIGxvc3N5IHNpbmNlIHdl IHN0b3JlIG9ubHkgdGhlIGhhc2ggY29kZSAqLworCXNjYW4tPnhzX3JlY2hlY2sgPSB0cnVl OworCisJLyoKKwkgKiBJZiB3ZSd2ZSBhbHJlYWR5IGluaXRpYWxpemVkIHRoaXMgc2Nhbiwg d2UgY2FuIGp1c3QgYWR2YW5jZSBpdCBpbiB0aGUKKwkgKiBhcHByb3ByaWF0ZSBkaXJlY3Rp b24uICBJZiB3ZSBoYXZlbid0IGRvbmUgc28geWV0LCB3ZSBjYWxsIGEgcm91dGluZSB0bwor CSAqIGdldCB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgc2Nhbi4KKwkgKi8KKwlpZiAoIUhhc2hT Y2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCisJCXJlcyA9IF9oYXNoX2ZpcnN0X2JhdGNo KHNjYW4sIGRpcik7CisJZWxzZQorCXsKKwkJLyoKKwkJICogQ2hlY2sgdG8gc2VlIGlmIHdl IHNob3VsZCBraWxsIHR1cGxlcyBmcm9tIHRoZSBwcmV2aW91cyBiYXRjaC4KKwkJICovCisJ CV9oYXNoX2tpbGxfYmF0Y2goc2Nhbik7CisKKwkJLyoKKwkJICogTm93IGNvbnRpbnVlIHRo ZSBzY2FuLgorCQkgKi8KKwkJcmVzID0gX2hhc2hfbmV4dF9iYXRjaChzY2FuLCBkaXIpOwor CX0KKworCXJldHVybiByZXM7Cit9CisKKwogLyoKICAqCWhhc2hnZXRiaXRtYXAoKSAtLSBn ZXQgYWxsIHR1cGxlcyBhdCBvbmNlCiAgKi8KQEAgLTQwMyw2ICs0NDAsOSBAQCBoYXNocmVz Y2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlz LAogCiAJaWYgKEhhc2hTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCiAJeworCQkvKiBU cmFuc2ZlciBraWxsZWQgaXRlbXMgZnJvbSB0aGUgYmF0Y2ggdG8gdGhlIHJlZ3VsYXIgYXJy YXkuICovCisJCV9oYXNoX2tpbGxfYmF0Y2goc2Nhbik7CisKIAkJLyogQmVmb3JlIGxlYXZp bmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAqLwogCQlpZiAo c28tPm51bUtpbGxlZCA+IDApCiAJCQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4pOwpAQCAtNDMy LDYgKzQ3Miw5IEBAIGhhc2hlbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKIAogCWlmIChI YXNoU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQogCXsKKwkJLyogVHJhbnNmZXIga2ls bGVkIGl0ZW1zIGZyb20gdGhlIGJhdGNoIHRvIHRoZSByZWd1bGFyIGFycmF5LiAqLworCQlf aGFzaF9raWxsX2JhdGNoKHNjYW4pOworCiAJCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQg cGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KIAkJaWYgKHNvLT5udW1LaWxs ZWQgPiAwKQogCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9o YXNoL2hhc2hzZWFyY2guYwppbmRleCAwZDk5ZDZhYmM4Ni4uYzExYWU4NDdhM2IgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2guYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoc2VhcmNoLmMKQEAgLTY0LDYgKzY0LDkgQEAgX2hh c2hfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCXsKIAkJ aWYgKCsrc28tPmN1cnJQb3MuaXRlbUluZGV4ID4gc28tPmN1cnJQb3MubGFzdEl0ZW0pCiAJ CXsKKwkJCS8qIFRyYW5zZmVyIGtpbGxlZCBpdGVtcyBmcm9tIHRoZSBiYXRjaCB0byB0aGUg cmVndWxhciBhcnJheS4gKi8KKwkJCV9oYXNoX2tpbGxfYmF0Y2goc2Nhbik7CisKIAkJCWlm IChzby0+bnVtS2lsbGVkID4gMCkKIAkJCQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4pOwogCkBA IC04Miw2ICs4NSw5IEBAIF9oYXNoX25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcikKIAl7CiAJCWlmICgtLXNvLT5jdXJyUG9zLml0ZW1JbmRleCA8IHNvLT5j dXJyUG9zLmZpcnN0SXRlbSkKIAkJeworCQkJLyogVHJhbnNmZXIga2lsbGVkIGl0ZW1zIGZy b20gdGhlIGJhdGNoIHRvIHRoZSByZWd1bGFyIGFycmF5LiAqLworCQkJX2hhc2hfa2lsbF9i YXRjaChzY2FuKTsKKwogCQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQogCQkJCV9oYXNoX2tp bGxfaXRlbXMoc2Nhbik7CiAKQEAgLTQ3Niw2ICs0ODIsOSBAQCBfaGFzaF9yZWFkcGFnZShJ bmRleFNjYW5EZXNjIHNjYW4sIEJ1ZmZlciAqYnVmUCwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJ CQlpZiAoaXRlbUluZGV4ICE9IDApCiAJCQkJYnJlYWs7CiAKKwkJCS8qIFRyYW5zZmVyIGtp bGxlZCBpdGVtcyBmcm9tIHRoZSBiYXRjaCB0byB0aGUgcmVndWxhciBhcnJheS4gKi8KKwkJ CV9oYXNoX2tpbGxfYmF0Y2goc2Nhbik7CisKIAkJCS8qCiAJCQkgKiBDb3VsZCBub3QgZmlu ZCBhbnkgbWF0Y2hpbmcgdHVwbGVzIGluIHRoZSBjdXJyZW50IHBhZ2UsIG1vdmUgdG8KIAkJ CSAqIHRoZSBuZXh0IHBhZ2UuIEJlZm9yZSBsZWF2aW5nIHRoZSBjdXJyZW50IHBhZ2UsIGRl YWwgd2l0aCBhbnkKQEAgLTUzNSw2ICs1NDQsOSBAQCBfaGFzaF9yZWFkcGFnZShJbmRleFNj YW5EZXNjIHNjYW4sIEJ1ZmZlciAqYnVmUCwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCQlpZiAo aXRlbUluZGV4ICE9IE1heEluZGV4VHVwbGVzUGVyUGFnZSkKIAkJCQlicmVhazsKIAorCQkJ LyogVHJhbnNmZXIga2lsbGVkIGl0ZW1zIGZyb20gdGhlIGJhdGNoIHRvIHRoZSByZWd1bGFy IGFycmF5LiAqLworCQkJX2hhc2hfa2lsbF9iYXRjaChzY2FuKTsKKwogCQkJLyoKIAkJCSAq IENvdWxkIG5vdCBmaW5kIGFueSBtYXRjaGluZyB0dXBsZXMgaW4gdGhlIGN1cnJlbnQgcGFn ZSwgbW92ZSB0bwogCQkJICogdGhlIHByZXZpb3VzIHBhZ2UuIEJlZm9yZSBsZWF2aW5nIHRo ZSBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aApAQCAtNzEzLDMgKzcyNSwyNzQgQEAgX2hhc2hf c2F2ZWl0ZW0oSGFzaFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCiAJY3Vyckl0ZW0t PmhlYXBUaWQgPSBpdHVwLT50X3RpZDsKIAljdXJySXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZu dW07CiB9CisKK3N0YXRpYyB2b2lkCitBc3NlcnRDaGVja0hhc2hCYXRjaEluZm8oSGFzaFNj YW5PcGFxdWUgc28pCit7CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCS8qIHNob3Vs ZCBiZSB2YWxpZCBpdGVtcyAod2l0aCByZXNwZWN0IHRvIHRoZSBjdXJyZW50IGxlYWYgcGFn ZSkgKi8KKwlBc3NlcnQoc28tPmN1cnJQb3MuZmlyc3RJdGVtIDw9IHNvLT5iYXRjaC5maXJz dEluZGV4KTsKKwlBc3NlcnQoc28tPmJhdGNoLmZpcnN0SW5kZXggPD0gc28tPmJhdGNoLmxh c3RJbmRleCk7CisJQXNzZXJ0KHNvLT5iYXRjaC5sYXN0SW5kZXggPD0gc28tPmN1cnJQb3Mu bGFzdEl0ZW0pOworI2VuZGlmCit9CisKKy8qCisgKglfaGFzaF9maXJzdF9iYXRjaCgpIC0t IEZpbmQgdGhlIGZpcnN0IGJhdGNoIGluIGEgc2Nhbi4KKyAqCisgKiBBIGJhdGNoIHZhcmlh bnQgb2YgX2hhc2hfZmlyc3QoKS4gTW9zdCBvZiB0aGUgY29tbWVudHMgZm9yIHRoYXQgZnVu Y3Rpb24KKyAqIGFwcGx5IGhlcmUgdG9vLgorICoKKyAqIFhYWCBUaGlzIG9ubHkgcG9wdWxh dGVzIHRoZSBiYXRjaCwgaXQgZG9lcyBub3Qgc2V0IGFueSBvdGhlciBmaWVsZHMgbGlrZQor ICogc2Nhbi0+eHNfaGVhcHRpZCBvciBzY2FuLT54c19pdHVwLiBUaGF0IGhhcHBlbnMgaW4g Z2V0bmV4dF90aWQoKSBjYWxscy4KKyAqCisgKiBYWFggSSdtIG5vdCBzdXJlIGl0IHdvcmtz IHRvIG1peCBiYXRjaGVkIGFuZCBub24tYmF0Y2hlcyBjYWxscywgZS5nLiBnZXQKKyAqIGEg VElEIGFuZCB0aGVuIGEgYmF0Y2ggb2YgVElEcy4gSXQgcHJvYmFibHkgc2hvdWxkIHdvcmsg YXMgbG9uZyBhcyB3ZQorICogdXBkYXRlIGl0ZW1JbmRleCBjb3JyZWN0bHksIGJ1dCB3ZSBu ZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQga2lsbGVkIGl0ZW1zCisgKiAocmlnaHQgbm93IHRo ZSB0d28gcGxhY2VzIHVzZSBkaWZmZXJlbnQgd2F5cyB0byBjb21tdW5pY2F0ZSB3aGljaCBp dGVtcworICogc2hvdWxkIGJlIGtpbGxlZCkuCisgKi8KK2Jvb2wKK19oYXNoX2ZpcnN0X2Jh dGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCit7CisJSGFzaFNj YW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKworCUFzc2Vy dChzY2FuLT54c19iYXRjaC0+bmhlYXB0aWRzID09IDApOworCisJLyoKKwkgKiBNYXJrIHRo ZSBiYXRjaCBhcyBlbXB0eS4KKwkgKgorCSAqIFRoaXMgbWlnaHQgc2VlbXMgYSBiaXQgc3Ry YW5nZSwgYmVjYXVzZSBzdXJlbHkgdGhlIGJhdGNoIHNob3VsZCBiZQorCSAqIGVtcHR5IGJl Zm9yZSByZWFkaW5nIHRoZSBmaXJzdCBiYXRjaC4gU28gd2h5IG5vdCBhbiBhc3NlcnQ/IEJ1 dCB3ZSBjYW4KKwkgKiBnZXQgaGVyZSBpbiBkaWZmZXJlbnQgd2F5cyAtIG5vdCBqdXN0IGFm dGVyIGJlZ2luc2Nhbi9yZXNjYW4sIGJ1dCBhbHNvCisJICogd2hlbiBpdGVyYXRpbmcgb3Zl ciBTY2FsYXJBcnJheU9wcyAtIGluIHdoaWNoIGNhc2Ugd2UnbGwgc2VlIHRoZSBsYXN0CisJ ICogYmF0Y2ggb2YgdGhlIHByZWNlZGluZyBzY2FuLgorCSAqLworCXNvLT5iYXRjaC5maXJz dEluZGV4ID0gLTE7CisJc28tPmJhdGNoLmxhc3RJbmRleCA9IC0xOworCisJLyogd2UgaGF2 ZW4ndCB2aXNpdGVkIGFueSBsZWFmIHBhZ2VzIHlldCwgc28gcHJvY2VlZCB0byByZWFkaW5n IG9uZSAqLworCWlmIChfaGFzaF9maXJzdChzY2FuLCBkaXIpKQorCXsKKwkJLyogcmFuZ2Ug b2YgdGhlIGxlYWYgdG8gY29weSBpbnRvIHRoZSBiYXRjaCAqLworCQlpbnQJCQlzdGFydCwK KwkJCQkJZW5kOworCisJCS8qIGRldGVybWluZSB3aGljaCBwYXJ0IG9mIHRoZSBsZWFmIHBh Z2UgdG8gZXh0cmFjdCAqLworCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQor CQl7CisJCQlzdGFydCA9IHNvLT5jdXJyUG9zLmZpcnN0SXRlbTsKKwkJCWVuZCA9IE1pbihz dGFydCArIChzY2FuLT54c19iYXRjaC0+Y3VyclNpemUgLSAxKSwgc28tPmN1cnJQb3MubGFz dEl0ZW0pOworCQkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gKGVuZCArIDEpOworCQl9CisJ CWVsc2UKKwkJeworCQkJZW5kID0gc28tPmN1cnJQb3MubGFzdEl0ZW07CisJCQlzdGFydCA9 IE1heChlbmQgLSAoc2Nhbi0+eHNfYmF0Y2gtPmN1cnJTaXplIC0gMSksCisJCQkJCQlzby0+ Y3VyclBvcy5maXJzdEl0ZW0pOworCQkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gKHN0YXJ0 IC0gMSk7CisJCX0KKworCQkvKgorCQkgKiBDb3B5IHRoZSBzZWxlY3RlZCByYW5nZSBvZiBp dGVtcyBpbnRvIHRoZSBiYXRjaCwgc2V0IHRoZSBiYXRjaAorCQkgKiBjdXJyZW50IGluZGV4 IHByb3Blcmx5IChiZWZvcmUgZmlyc3QgLyBhZnRlciBsYXN0IGl0ZW0sIGRlcGVuZGluZwor CQkgKiBvbiBzY2FuIGRpcmVjdGlvbi4KKwkJICovCisJCV9oYXNoX2NvcHlfYmF0Y2goc2Nh biwgZGlyLCBzbywgc3RhcnQsIGVuZCk7CisKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0 dXJuIGZhbHNlOworfQorCisvKgorICoJX2hhc2hfbmV4dF9iYXRjaCgpIC0tIEdldCB0aGUg bmV4dCBiYXRjaCBvZiBpdGVtcyBpbiBhIHNjYW4uCisgKgorICogQSBiYXRjaCB2YXJpYW50 IG9mIF9oYXNoX25leHQoKS4gTW9zdCBvZiB0aGUgY29tbWVudHMgZm9yIHRoYXQgZnVuY3Rp b24KKyAqIGFwcGx5IGhlcmUgdG9vLgorICoKKyAqIFdlIHNob3VsZCBvbmx5IGdldCBoZXJl IG9ubHkgd2hlbiB0aGUgY3VycmVudCBiYXRjaCBoYXMgbm8gbW9yZSBpdGVtcworICogaW4g dGhlIGdpdmVuIGRpcmVjdGlvbi4gV2UgZG9uJ3QgZ2V0IGhlcmUgd2l0aCBlbXB0eSBiYXRj aGVzLCB0aGF0J3MKKyAqIGhhbmRsZWQgYnkgX2hhc2hfZmlzdF9iYXRjaCgpLgorICoKKyAq IFhYWCBTZWUgYWxzbyB0aGUgY29tbWVudHMgYXQgX2hhc2hfZmlyc3RfYmF0Y2goKSBhYm91 dCByZXR1cm5pbmcgYSBzaW5nbGUKKyAqIGJhdGNoIGZvciB0aGUgcGFnZSwgZXRjLgorICoK KyAqIEZJWE1FIFRoZXJlJ3MgYSBsb3Qgb2YgcmVkdW5kYW50IChhbG1vc3QgdGhlIHNhbWUp IGNvZGUgaGVyZSAtIGhhbmRsaW5nCisgKiB0aGUgY3VycmVudCBhbmQgbmV3IGxlYWYgcGFn ZSBpcyB2ZXJ5IHNpbWlsYXIsIGFuZCBpdCdzIGFsc28gc2ltaWxhciB0bworICogX2hhc2hf Zmlyc3RfYmF0Y2goKS4gV2Ugc2hvdWxkIHRyeSB0byByZWR1Y2UgdGhpcyBhIGJpdC4KKyAq LworYm9vbAorX2hhc2hfbmV4dF9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyKQoreworCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBz Y2FuLT5vcGFxdWU7CisKKwlpbnQJCQlzdGFydCwKKwkJCQllbmQ7CisKKwlBc3NlcnQoc2Nh bi0+eHNfYmF0Y2gtPm5oZWFwdGlkcyA9PSAwKTsKKworCUFzc2VydENoZWNrSGFzaEJhdGNo SW5mbyhzbyk7CisKKwkvKgorCSAqIENoZWNrIGlmIHdlIHN0aWxsIGhhdmUgc29tZSBpdGVt cyBvbiB0aGUgY3VycmVudCBsZWFmIHBhZ2UuIElmIHllcywKKwkgKiBsb2FkIHRoZW0gaW50 byBhIGJhdGNoIGFuZCByZXR1cm4uCisJICoKKwkgKiBYWFggdHJ5IGNvbWJpbmluZyB0aGF0 IHdpdGggdGhlIG5leHQgYmxvY2ssIHRoZSBpbm5lciB3aGlsZSBsb29wIGlzCisJICogZXhh Y3RseSB0aGUgc2FtZS4KKwkgKi8KKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIp KQorCXsKKwkJc3RhcnQgPSBzby0+YmF0Y2gubGFzdEluZGV4ICsgMTsKKwkJZW5kID0gTWlu KHN0YXJ0ICsgKHNjYW4tPnhzX2JhdGNoLT5jdXJyU2l6ZSAtIDEpLCBzby0+Y3VyclBvcy5s YXN0SXRlbSk7CisJCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IChlbmQgKyAxKTsKKwl9CisJ ZWxzZQorCXsKKwkJZW5kID0gc28tPmJhdGNoLmZpcnN0SW5kZXggLSAxOworCQlzdGFydCA9 IE1heChlbmQgLSAoc2Nhbi0+eHNfYmF0Y2gtPmN1cnJTaXplIC0gMSksCisJCQkJCXNvLT5j dXJyUG9zLmZpcnN0SXRlbSk7CisJCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IChzdGFydCAt IDEpOworCX0KKworCS8qCisJICogV2UgaGF2ZSBtb3JlIGl0ZW1zIG9uIHRoZSBjdXJyZW50 IGxlYWYgcGFnZS4KKwkgKi8KKwlpZiAoc3RhcnQgPD0gZW5kKQorCXsKKwkJX2hhc2hfY29w eV9iYXRjaChzY2FuLCBkaXIsIHNvLCBzdGFydCwgZW5kKTsKKwkJcmV0dXJuIHRydWU7CisJ fQorCisJLyoKKwkgKiBXZSd2ZSBjb25zdW1lZCBhbGwgaXRlbXMgZnJvbSB0aGUgY3VycmVu dCBsZWFmIHBhZ2UsIHNvIHRyeSByZWFkaW5nIHRoZQorCSAqIG5leHQgb25lLCBhbmQgcHJv Y2VzcyBpdC4KKwkgKi8KKwlpZiAoX2hhc2hfbmV4dChzY2FuLCBkaXIpKQorCXsKKwkJLyoK KwkJICogQ2hlY2sgaWYgd2Ugc3RpbGwgaGF2ZSBzb21lIGl0ZW1zIG9uIHRoZSBjdXJyZW50 IGxlYWYgcGFnZS4gSWYgeWVzLAorCQkgKiBsb2FkIHRoZW0gaW50byBhIGJhdGNoIGFuZCBy ZXR1cm4uCisJCSAqCisJCSAqIFhYWCB0cnkgY29tYmluaW5nIHRoYXQgd2l0aCB0aGUgbmV4 dCBibG9jaywgdGhlIGlubmVyIHdoaWxlIGxvb3AgaXMKKwkJICogZXhhY3RseSB0aGUgc2Ft ZS4KKwkJICovCisJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJCXsKKwkJ CXN0YXJ0ID0gc28tPmN1cnJQb3MuZmlyc3RJdGVtOworCQkJZW5kID0gTWluKHN0YXJ0ICsg KHNjYW4tPnhzX2JhdGNoLT5jdXJyU2l6ZSAtIDEpLCBzby0+Y3VyclBvcy5sYXN0SXRlbSk7 CisJCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSAoZW5kICsgMSk7CisJCX0KKwkJZWxzZQor CQl7CisJCQllbmQgPSBzby0+Y3VyclBvcy5sYXN0SXRlbTsKKwkJCXN0YXJ0ID0gTWF4KGVu ZCAtIChzY2FuLT54c19iYXRjaC0+Y3VyclNpemUgLSAxKSwKKwkJCQkJCXNvLT5jdXJyUG9z LmZpcnN0SXRlbSk7CisJCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSAoc3RhcnQgLSAxKTsK KwkJfQorCisJCV9oYXNoX2NvcHlfYmF0Y2goc2NhbiwgZGlyLCBzbywgc3RhcnQsIGVuZCk7 CisKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICoJ X2hhc2hfa2lsbF9iYXRjaCgpIC0tIHJlbWVtYmVyIHRoZSBpdGVtcy10by1iZS1raWxsZWQg ZnJvbSB0aGUgY3VycmVudCBiYXRjaAorICoKKyAqIFdlIHNpbXBseSB0cmFuc2xhdGUgdGhl IGJpdG1hcCBpbnRvIHRoZSAicmVndWxhciIga2lsbGVkSXRlbXMgYXJyYXksIGFuZCBsZXQK KyAqIHRoYXQgdG8gZHJpdmUgd2hpY2ggaXRlbXMgYXJlIGtpbGxlZC4KKyAqLwordm9pZAor X2hhc2hfa2lsbF9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJSGFzaFNjYW5PcGFx dWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKworCS8qIGJhaWwgb3V0 IGlmIGJhdGNoaW5nIG5vdCBlbmFibGVkICovCisJaWYgKCFzY2FuLT54c19iYXRjaCkKKwkJ cmV0dXJuOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBzY2FuLT54c19iYXRjaC0+bktpbGxl ZEl0ZW1zOyBpKyspCisJeworCQlpbnQJCQlpbmRleCA9IChzby0+YmF0Y2guZmlyc3RJbmRl eCArIHNjYW4tPnhzX2JhdGNoLT5raWxsZWRJdGVtc1tpXSk7CisKKwkJLyogbWFrZSBzdXJl IHdlIGhhdmUgYSB2YWxpZCBpbmRleCAoaW4gdGhlIGN1cnJlbnQgbGVhZiBwYWdlKSAqLwor CQlBc3NlcnQoKHNvLT5iYXRjaC5maXJzdEluZGV4IDw9IGluZGV4KSAmJgorCQkJICAgKGlu ZGV4IDw9IHNvLT5iYXRjaC5sYXN0SW5kZXgpKTsKKworCQkvKgorCQkgKiBZZXMsIHJlbWVt YmVyIGl0IGZvciBsYXRlci4gKFdlJ2xsIGRlYWwgd2l0aCBhbGwgc3VjaCB0dXBsZXMgYXQK KwkJICogb25jZSByaWdodCBiZWZvcmUgbGVhdmluZyB0aGUgaW5kZXggcGFnZS4pICBUaGUg dGVzdCBmb3IgbnVtS2lsbGVkCisJCSAqIG92ZXJydW4gaXMgbm90IGp1c3QgcGFyYW5vaWE6 IGlmIHRoZSBjYWxsZXIgcmV2ZXJzZXMgZGlyZWN0aW9uIGluCisJCSAqIHRoZSBpbmRleHNj YW4gdGhlbiB0aGUgc2FtZSBpdGVtIG1pZ2h0IGdldCBlbnRlcmVkIG11bHRpcGxlIHRpbWVz LgorCQkgKiBJdCdzIG5vdCB3b3J0aCB0cnlpbmcgdG8gb3B0aW1pemUgdGhhdCwgc28gd2Ug ZG9uJ3QgZGV0ZWN0IGl0LCBidXQKKwkJICogaW5zdGVhZCBqdXN0IGZvcmdldCBhbnkgZXhj ZXNzIGVudHJpZXMuCisJCSAqLworCQlpZiAoc28tPmtpbGxlZEl0ZW1zID09IE5VTEwpCisJ CQlzby0+a2lsbGVkSXRlbXMgPSAoaW50ICopCisJCQkJcGFsbG9jKE1heEluZGV4VHVwbGVz UGVyUGFnZSAqIHNpemVvZihpbnQpKTsKKwkJaWYgKHNvLT5udW1LaWxsZWQgPCBNYXhJbmRl eFR1cGxlc1BlclBhZ2UpCisJCQlzby0+a2lsbGVkSXRlbXNbc28tPm51bUtpbGxlZCsrXSA9 IGluZGV4OworCX0KKworCS8qIG5vdyByZXNldCB0aGUgbnVtYmVyIG9mIGtpbGxlZCBpdGVt cyAqLworCXNjYW4tPnhzX2JhdGNoLT5uS2lsbGVkSXRlbXMgPSAwOworfQorCit2b2lkCitf aGFzaF9jb3B5X2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIs IEhhc2hTY2FuT3BhcXVlIHNvLAorCQkJCSBpbnQgc3RhcnQsIGludCBlbmQpCit7CisJLyoK KwkgKiBXZSdyZSByZWFkaW5nIHRoZSBmaXJzdCBiYXRjaCwgYW5kIHRoZXJlIHNob3VsZCBh bHdheXMgYmUgYXQgbGVhc3Qgb25lCisJICogaXRlbSAob3RoZXJ3aXNlIF9idF9maXJzdCB3 b3VsZCByZXR1cm4gZmFsc2UpLiBTbyB3ZSBzaG91bGQgbmV2ZXIgZ2V0CisJICogaW50byBz aXR1YXRpb24gd2l0aCBlbXB0eSBzdGFydC9lbmQgcmFuZ2UuIEluIHRoZSB3b3JzdCBjYXNl LCB0aGVyZSBpcworCSAqIGp1c3QgYSBzaW5nbGUgaXRlbSwgaW4gd2hpY2ggY2FzZSAoc3Rh cnQgPT0gZW5kKS4KKwkgKi8KKwlBc3NlcnQoc3RhcnQgPD0gZW5kKTsKKworCS8qIFRoZSBy YW5nZSBvZiBpdGVtcyBzaG91bGQgZml0IGludG8gdGhlIGN1cnJlbnQgYmF0Y2ggc2l6ZS4g Ki8KKwlBc3NlcnQoKGVuZCAtIHN0YXJ0ICsgMSkgPD0gc2Nhbi0+eHNfYmF0Y2gtPmN1cnJT aXplKTsKKworCXNvLT5iYXRjaC5maXJzdEluZGV4ID0gc3RhcnQ7CisJc28tPmJhdGNoLmxh c3RJbmRleCA9IGVuZDsKKworCUFzc2VydENoZWNrSGFzaEJhdGNoSW5mbyhzbyk7CisKKwkv KgorCSAqIFdhbGsgdGhyb3VnaCB0aGUgcmFuZ2Ugb2YgaW5kZXggdHVwbGVzLCBjb3B5IHRo ZW0gaW50byB0aGUgYmF0Y2guIElmCisJICogcmVxdWVzdGVkLCBzZXQgdGhlIGluZGV4IHR1 cGxlIHRvby4KKwkgKgorCSAqIFdlIGRvbid0IGtub3cgaWYgdGhlIGJhdGNoIGlzIGZ1bGwg YWxyZWFkeSAtIHdlIGp1c3QgdHJ5IHRvIGFkZCBpdCwgYW5kCisJICogYmFpbCBvdXQgaWYg aXQgZmFpbHMuCisJICoKKwkgKiBGSVhNRSBUaGlzIHNlZW1zIHdyb25nLCBhY3R1YWxseS4g V2UgdXNlIGN1cnJTaXplIHdoZW4gY2FsY3VsYXRpbmcgdGhlCisJICogc3RhcnQvZW5kIHJh bmdlLCBzbyB0aGUgYWRkIHNob3VsZCBhbHdheXMgc3VjY2VlZC4KKwkgKi8KKwl3aGlsZSAo c3RhcnQgPD0gZW5kKQorCXsKKwkJSGFzaFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+ Y3VyclBvcy5pdGVtc1tzdGFydF07CisKKwkJLyogdHJ5IHRvIGFkZCBpdCB0byBiYXRjaCwg aWYgdGhlcmUncyBzcGFjZSAqLworCQlpZiAoIWluZGV4X2JhdGNoX2FkZChzY2FuLCBjdXJy SXRlbS0+aGVhcFRpZCwgZmFsc2UsIE5VTEwsIE5VTEwpKQorCQkJYnJlYWs7CisKKwkJc3Rh cnQrKzsKKwl9CisKKwkvKgorCSAqIHNldCB0aGUgc3RhcnRpbmcgcG9pbnQKKwkgKgorCSAq IFhYWCBtaWdodCBiZSBiZXR0ZXIgZG9uZSBpbiBpbmRleGFtLmMKKwkgKi8KKwlpZiAoU2Nh bkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQorCQlzY2FuLT54c19iYXRjaC0+Y3VyckluZGV4 ID0gLTE7CisJZWxzZQorCQlzY2FuLT54c19iYXRjaC0+Y3VyckluZGV4ID0gc2Nhbi0+eHNf YmF0Y2gtPm5oZWFwdGlkczsKKworCS8qIHNob3VsZG4ndCBiZSBwb3NzaWJsZSB0byBlbmQg aGVyZSB3aXRoIGFuIGVtcHR5IGJhdGNoICovCisJQXNzZXJ0KHNjYW4tPnhzX2JhdGNoLT5u aGVhcHRpZHMgPiAwKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oYXNo LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGFzaC5oCmluZGV4IDljN2Q4MTUyNWI0Li5iNzEw MTIxZjBlZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2guaAorKysgYi9z cmMvaW5jbHVkZS9hY2Nlc3MvaGFzaC5oCkBAIC0xNTIsNiArMTUyLDE0IEBAIHR5cGVkZWYg c3RydWN0IEhhc2hTY2FuUG9zRGF0YQogCQkoc2NhbnBvcykuaXRlbUluZGV4ID0gMDsgXAog CX0gd2hpbGUgKDApCiAKKy8qIEluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGJhdGNo IChpbiBiYXRjaGVkIGluZGV4IHNjYW5zKSAqLwordHlwZWRlZiBzdHJ1Y3QgSGFzaEJhdGNo SW5mbworeworCS8qIEN1cnJlbnQgcmFuZ2Ugb2YgaXRlbXMgaW4gYSBiYXRjaCAoaWYgdXNl ZCkuICovCisJaW50CQkJZmlyc3RJbmRleDsKKwlpbnQJCQlsYXN0SW5kZXg7Cit9IEhhc2hC YXRjaEluZm87CisKIC8qCiAgKglIYXNoU2Nhbk9wYXF1ZURhdGEgaXMgcHJpdmF0ZSBzdGF0 ZSBmb3IgYSBoYXNoIGluZGV4IHNjYW4uCiAgKi8KQEAgLTE4Miw2ICsxOTAsOSBAQCB0eXBl ZGVmIHN0cnVjdCBIYXNoU2Nhbk9wYXF1ZURhdGEKIAlpbnQJCSAgICpraWxsZWRJdGVtczsJ LyogY3VyclBvcy5pdGVtcyBpbmRleGVzIG9mIGtpbGxlZCBpdGVtcyAqLwogCWludAkJCW51 bUtpbGxlZDsJCS8qIG51bWJlciBvZiBjdXJyZW50bHkgc3RvcmVkIGl0ZW1zICovCiAKKwkv KiBpbmZvIGFib3V0IGN1cnJlbnQgYmF0Y2ggKi8KKwlIYXNoQmF0Y2hJbmZvIGJhdGNoOwor CiAJLyoKIAkgKiBJZGVudGlmeSBhbGwgdGhlIG1hdGNoaW5nIGl0ZW1zIG9uIGEgcGFnZSBh bmQgc2F2ZSB0aGVtIGluCiAJICogSGFzaFNjYW5Qb3NEYXRhCkBAIC0zNjksNiArMzgwLDcg QEAgZXh0ZXJuIGJvb2wgaGFzaGluc2VydChSZWxhdGlvbiByZWwsIERhdHVtICp2YWx1ZXMs IGJvb2wgKmlzbnVsbCwKIAkJCQkJICAgYm9vbCBpbmRleFVuY2hhbmdlZCwKIAkJCQkJICAg c3RydWN0IEluZGV4SW5mbyAqaW5kZXhJbmZvKTsKIGV4dGVybiBib29sIGhhc2hnZXR0dXBs ZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBib29s IGhhc2hnZXRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsK IGV4dGVybiBpbnQ2NCBoYXNoZ2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0 bWFwICp0Ym0pOwogZXh0ZXJuIEluZGV4U2NhbkRlc2MgaGFzaGJlZ2luc2NhbihSZWxhdGlv biByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cyk7CiBleHRlcm4gdm9pZCBoYXNocmVz Y2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlz LApAQCAtNDQ0LDYgKzQ1NiwxMSBAQCBleHRlcm4gdm9pZCBfaGFzaF9maW5pc2hfc3BsaXQo UmVsYXRpb24gcmVsLCBCdWZmZXIgbWV0YWJ1ZiwgQnVmZmVyIG9idWYsCiAvKiBoYXNoc2Vh cmNoLmMgKi8KIGV4dGVybiBib29sIF9oYXNoX25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcik7CiBleHRlcm4gYm9vbCBfaGFzaF9maXJzdChJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBib29sIF9oYXNoX25leHRf YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CitleHRlcm4g Ym9vbCBfaGFzaF9maXJzdF9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyKTsKK2V4dGVybiB2b2lkIF9oYXNoX2NvcHlfYmF0Y2goSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJCQkgSGFzaFNjYW5PcGFxdWUgc28sIGlu dCBzdGFydCwgaW50IGVuZCk7CitleHRlcm4gdm9pZCBfaGFzaF9raWxsX2JhdGNoKEluZGV4 U2NhbkRlc2Mgc2Nhbik7CiAKIC8qIGhhc2hzb3J0LmMgKi8KIHR5cGVkZWYgc3RydWN0IEhT cG9vbCBIU3Bvb2w7CS8qIG9wYXF1ZSBzdHJ1Y3QgaW4gaGFzaHNvcnQuYyAqLwpkaWZmIC0t Z2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBkODY1ODJkYjQ1NC4uYjllNDY1ZWRhYzAgMTAw NjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xMTE4LDYgKzExMTgsNyBAQCBIYXNo CiBIYXNoQWdnQmF0Y2gKIEhhc2hBZ2dTcGlsbAogSGFzaEFsbG9jRnVuYworSGFzaEJhdGNo SW5mbwogSGFzaEJ1aWxkU3RhdGUKIEhhc2hDb21wYXJlRnVuYwogSGFzaENvcHlGdW5jCi0t IAoyLjQ3LjAKCg== --------------4qyQcmdBaK2FloOMEeBLhmx6 Content-Type: text/x-patch; charset=UTF-8; name="v20241106-0005-WIP-batching-for-gist-indexes.patch" Content-Disposition: attachment; filename="v20241106-0005-WIP-batching-for-gist-indexes.patch" Content-Transfer-Encoding: base64 RnJvbSBkYjFjYjkxZjk1NTNkNzY2OTcwNjVmMGIwOWUxNmIzOWViOWYxNWMzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogTW9uLCAzMCBTZXAgMjAyNCAyMjo0ODo1NyArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjQxMTA2IDUvN10gV0lQOiBiYXRjaGluZyBmb3IgZ2lzdCBpbmRleGVzCgotLS0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYyAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9h Y2Nlc3MvZ2lzdC9naXN0Z2V0LmMgfCAyOTUgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCiBzcmMvaW5jbHVkZS9hY2Nlc3MvZ2lzdF9wcml2YXRlLmggfCAgMTYgKysKIHNyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICB8ICAgMSArCiA0IGZpbGVzIGNoYW5nZWQs IDMxMyBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dp c3QvZ2lzdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jCmluZGV4IDNhZTkx M2UwMjMwLi4wN2JjZjAzYzQyMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dp c3QvZ2lzdC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYwpAQCAtMTAw LDYgKzEwMCw3IEBAIGdpc3RoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0aW5l LT5hbWJlZ2luc2NhbiA9IGdpc3RiZWdpbnNjYW47CiAJYW1yb3V0aW5lLT5hbXJlc2NhbiA9 IGdpc3RyZXNjYW47CiAJYW1yb3V0aW5lLT5hbWdldHR1cGxlID0gZ2lzdGdldHR1cGxlOwor CWFtcm91dGluZS0+YW1nZXRiYXRjaCA9IGdpc3RnZXRiYXRjaDsKIAlhbXJvdXRpbmUtPmFt Z2V0Yml0bWFwID0gZ2lzdGdldGJpdG1hcDsKIAlhbXJvdXRpbmUtPmFtZW5kc2NhbiA9IGdp c3RlbmRzY2FuOwogCWFtcm91dGluZS0+YW1tYXJrcG9zID0gTlVMTDsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RnZXQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9naXN0L2dpc3RnZXQuYwppbmRleCBiMzViOGE5NzU3Ny4uNzBlMzJmMTkzNjYgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RnZXQuYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvZ2lzdC9naXN0Z2V0LmMKQEAgLTI1LDYgKzI1LDEwIEBACiAjaW5jbHVk ZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKIAorc3RhdGlj IHZvaWQgX2dpc3Rfa2lsbF9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4pOworc3RhdGljIHZv aWQgX2dpc3RfY29weV9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEdJU1RTY2FuT3BhcXVl IHNvLAorCQkJCQkJCSBpbnQgc3RhcnQsIGludCBlbmQpOworCiAvKgogICogZ2lzdGtpbGxp dGVtcygpIC0tIHNldCBMUF9ERUFEIHN0YXRlIGZvciBpdGVtcyBhbiBpbmRleHNjYW4gY2Fs bGVyIGhhcwogICogdG9sZCB1cyB3ZXJlIGtpbGxlZC4KQEAgLTcwOSw2ICs3MTMsMTQgQEAg Z2lzdGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJ CQl7CiAJCQkJR0lTVFNlYXJjaEl0ZW0gKml0ZW07CiAKKwkJCQkvKgorCQkJCSAqIFhYWCBQ cm9iYWJseSBub3QgbmVlZGVkLCB3ZSBjYW4ndCBtaXggZ2V0dHVwbGUgYW5kCisJCQkJICog Z2V0YmF0Y2gsIHNvIHdlIHNob3VsZCBub3QgZ2V0IGFueSBraWxsZWQgdHVwbGVzIGZvciBh CisJCQkJICogYmF0Y2guIE1heWJlIHJlcGxhY2UgdGhpcyB3aXRoIGFuIGFzc2VydCB0aGF0 IGJhdGNoIGhhcyBubworCQkJCSAqIGtpbGxlZCBpdGVtcz8gT3Igc2ltcGx5IHRoYXQgKHhz X2JhdGNoID09IE5VTEwpPworCQkJCSAqLworCQkJCV9naXN0X2tpbGxfYmF0Y2goc2Nhbik7 CisKIAkJCQlpZiAoKHNvLT5jdXJCbGtubyAhPSBJbnZhbGlkQmxvY2tOdW1iZXIpICYmIChz by0+bnVtS2lsbGVkID4gMCkpCiAJCQkJCWdpc3RraWxsaXRlbXMoc2Nhbik7CiAKQEAgLTcz Niw2ICs3NDgsMTY0IEBAIGdpc3RnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyKQogCX0KIH0KIAorLyoKKyAqIGdpc3RnZXRiYXRjaCgpIC0tIEdldCB0 aGUgbmV4dCBiYXRjaCBvZiB0dXBsZXMgaW4gdGhlIHNjYW4KKyAqLworYm9vbAorZ2lzdGdl dGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCit7CisJR0lT VFNjYW5PcGFxdWUgc28gPSAoR0lTVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKworCWlm IChkaXIgIT0gRm9yd2FyZFNjYW5EaXJlY3Rpb24pCisJCWVsb2coRVJST1IsICJHaVNUIG9u bHkgc3VwcG9ydHMgZm9yd2FyZCBzY2FuIGRpcmVjdGlvbiIpOworCisJaWYgKCFzby0+cXVh bF9vaykKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHNvLT5maXJzdENhbGwpCisJeworCQkv KiBCZWdpbiB0aGUgc2NhbiBieSBwcm9jZXNzaW5nIHRoZSByb290IHBhZ2UgKi8KKwkJR0lT VFNlYXJjaEl0ZW0gZmFrZUl0ZW07CisKKwkJcGdzdGF0X2NvdW50X2luZGV4X3NjYW4oc2Nh bi0+aW5kZXhSZWxhdGlvbik7CisKKwkJc28tPmZpcnN0Q2FsbCA9IGZhbHNlOworCQlzby0+ Y3VyUGFnZURhdGEgPSBzby0+blBhZ2VEYXRhID0gMDsKKwkJc2Nhbi0+eHNfaGl0dXAgPSBO VUxMOworCQlpZiAoc28tPnBhZ2VEYXRhQ3h0KQorCQkJTWVtb3J5Q29udGV4dFJlc2V0KHNv LT5wYWdlRGF0YUN4dCk7CisKKwkJZmFrZUl0ZW0uYmxrbm8gPSBHSVNUX1JPT1RfQkxLTk87 CisJCW1lbXNldCgmZmFrZUl0ZW0uZGF0YS5wYXJlbnRsc24sIDAsIHNpemVvZihHaXN0TlNO KSk7CisJCWdpc3RTY2FuUGFnZShzY2FuLCAmZmFrZUl0ZW0sIE5VTEwsIE5VTEwsIE5VTEwp OworCisJCS8qCisJCSAqIE1hcmsgdGhlIGJhdGNoIGFzIGVtcHR5LgorCQkgKgorCQkgKiBY WFggSXMgdGhpcyBuZWNlc3NhcnkgLyB0aGUgcmlnaHQgcGxhY2UgdG8gZG8gdGhpcz8gTWF5 YmUgaXQgc2hvdWxkCisJCSAqIGJlIGRvbmUgaW4gYmVnaW5zY2FuL3Jlc2Nhbj8gVGhlIG9u ZSBwcm9ibGVtIHdpdGggdGhhdCBpcyB3ZSBvbmx5CisJCSAqIGluaXRpYWxpemUgdGhlIGJh dGNoIGFmdGVyLCBzbyB0aG9zZSBwbGFjZXMgZG9uJ3Qga25vdyBpZiBiYXRjaGluZworCQkg KiBpcyB0byBiZSB1c2VkLgorCQkgKi8KKwkJc28tPmJhdGNoLmZpcnN0SW5kZXggPSAtMTsK KwkJc28tPmJhdGNoLmxhc3RJbmRleCA9IC0xOworCX0KKworCS8qCisJICogV2l0aCBvcmRl ci1ieSBjbGF1c2VzLCB3ZSBzaW1wbHkgZ2V0IGVub3VnaCBuZWFyZXN0IGl0ZW1zIHRvIGZp bGwgdGhlCisJICogYmF0Y2guIEdJU1QgZG9lcyBub3QgaGFuZGxlIGtpbGxlZCBpdGVtcyBp biB0aGlzIGNhc2UgZm9yIG5vbi1iYXRjaGVkCisJICogc2NhbnMsIHNvIHdlIGRvbid0IGRv IHRoYXQgaGVyZSBlaXRoZXIuIFRoZSBvbmx5IGlzc3VlIGlzIHRoYXQgdGhlIGhlYXAKKwkg KiB0dXBsZSByZXR1cm5lZCBpbiB4c19oaXR1cCBpcyBmcmVlZCBvbiB0aGUgbmV4dCBnZXRO ZXh0TmVhcmVzdCgpIGNhbGwsCisJICogc28gd2UgbWFrZSBhIGNvcHkgaW4gdGhlIGJhdGNo IG1lbW9yeSBjb250ZXh0LgorCSAqCisJICogRm9yIHNjYW5zIHdpdGhvdXQgb3JkZXItYnkg Y2xhdXNlcywgd2Ugc2ltcGx5IGNvcHkgYSBiYXRjaCBvZiBpdGVtcworCSAqIGZyb20gdGhl IG5leHQgbGVhZiBwYWdlLCBhbmQgcHJvY2VlZCB0byB0aGUgbmV4dCBwYWdlIHdoZW4gbmVl ZGVkLgorCSAqLworCWlmIChzY2FuLT5udW1iZXJPZk9yZGVyQnlzID4gMCkKKwl7CisJCWlu dAkJCW5pdGVtcyA9IDA7CisKKwkJLyogTXVzdCBmZXRjaCB0dXBsZXMgaW4gc3RyaWN0IGRp c3RhbmNlIG9yZGVyICovCisJCXdoaWxlIChuaXRlbXMgPCBzY2FuLT54c19iYXRjaC0+Y3Vy clNpemUpCisJCXsKKwkJCUhlYXBUdXBsZQlodHVwOworCQkJTWVtb3J5Q29udGV4dCBvbGRj dHg7CisKKwkJCWlmICghZ2V0TmV4dE5lYXJlc3Qoc2NhbikpCisJCQkJYnJlYWs7CisKKwkJ CS8qCisJCQkgKiBXZSBuZWVkIHRvIGNvcHkgdGhlIHR1cGxlIGludG8gdGhlIGJhdGNoIGNv bnRleHQsIGFzIGl0IG1heSBnbworCQkJICogYXdheSBvbiB0aGUgbmV4dCBnZXROZXh0TmVh cmVzdCBjYWxsLiBGcmVlIHRoZSBvcmlnaW5hbCB0dXBsZSwKKwkJCSAqIG90aGVyd2lzZSB3 ZSdkIGxlYWsgdGhlIGxhc3QgdHVwbGUgaW4gYSBiYXRjaC4KKwkJCSAqLworCQkJb2xkY3R4 ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHNjYW4tPnhzX2JhdGNoLT5jdHgpOworCQkJaHR1 cCA9IGhlYXBfY29weXR1cGxlKHNjYW4tPnhzX2hpdHVwKTsKKworCQkJcGZyZWUoc2Nhbi0+ eHNfaGl0dXApOworCQkJc2Nhbi0+eHNfaGl0dXAgPSBOVUxMOworCisJCQlNZW1vcnlDb250 ZXh0U3dpdGNoVG8ob2xkY3R4KTsKKworCQkJaW5kZXhfYmF0Y2hfYWRkKHNjYW4sIHNjYW4t PnhzX2hlYXB0aWQsIHNjYW4tPnhzX3JlY2hlY2ssIE5VTEwsIGh0dXApOworCisJCQluaXRl bXMrKzsKKwkJfQorCisJCS8qIGRpZCB3ZSBmaW5kIG1vcmUgdHVwbGVzPyAqLworCQlyZXR1 cm4gKHNjYW4tPnhzX2JhdGNoLT5uaGVhcHRpZHMgPiAwKTsKKwl9CisJZWxzZQorCXsKKwkJ LyogRmV0Y2ggdGhlIG5leHQgYmF0Y2ggb2YgdHVwbGVzICovCisJCWZvciAoOzspCisJCXsK KwkJCWludAkJCXN0YXJ0LAorCQkJCQkJZW5kOworCisJCQkvKiBmb3J3YXJkIGRpcmVjdGlv bnMgb25seSwgZWFzeSB0byBjYWxjdWxhdGUgbmV4dCBiYXRjaCAqLworCQkJc3RhcnQgPSBz by0+YmF0Y2gubGFzdEluZGV4ICsgMTsKKwkJCWVuZCA9IE1pbihzdGFydCArIChzY2FuLT54 c19iYXRjaC0+Y3VyclNpemUgLSAxKSwKKwkJCQkJICBzby0+blBhZ2VEYXRhIC0gMSk7CS8q IGluZGV4IG9mIGxhc3QgaXRlbSAqLworCQkJc28tPmN1clBhZ2VEYXRhID0gKGVuZCArIDEp OworCisJCQkvKiBpZiB3ZSBmb3VuZCBtb3JlIGl0ZW1zIG9uIHRoZSBjdXJyZW50IHBhZ2Us IHdlJ3JlIGRvbmUgKi8KKwkJCWlmIChzdGFydCA8PSBlbmQpCisJCQl7CisJCQkJX2dpc3Rf Y29weV9iYXRjaChzY2FuLCBzbywgc3RhcnQsIGVuZCk7CisJCQkJcmV0dXJuIHRydWU7CisJ CQl9CisKKwkJCS8qIGZpbmQgYW5kIHByb2Nlc3MgdGhlIG5leHQgaW5kZXggcGFnZSAqLwor CQkJZG8KKwkJCXsKKwkJCQlHSVNUU2VhcmNoSXRlbSAqaXRlbTsKKworCQkJCV9naXN0X2tp bGxfYmF0Y2goc2Nhbik7CisKKwkJCQlpZiAoKHNvLT5jdXJCbGtubyAhPSBJbnZhbGlkQmxv Y2tOdW1iZXIpICYmIChzby0+bnVtS2lsbGVkID4gMCkpCisJCQkJCWdpc3RraWxsaXRlbXMo c2Nhbik7CisKKwkJCQlpdGVtID0gZ2V0TmV4dEdJU1RTZWFyY2hJdGVtKHNvKTsKKworCQkJ CWlmICghaXRlbSkKKwkJCQkJcmV0dXJuIGZhbHNlOworCisJCQkJQ0hFQ0tfRk9SX0lOVEVS UlVQVFMoKTsKKworCQkJCS8qIHNhdmUgY3VycmVudCBpdGVtIEJsb2NrTnVtYmVyIGZvciBu ZXh0IGdpc3RraWxsaXRlbXMoKSBjYWxsICovCisJCQkJc28tPmN1ckJsa25vID0gaXRlbS0+ Ymxrbm87CisKKwkJCQkvKgorCQkJCSAqIFdoaWxlIHNjYW5uaW5nIGEgbGVhZiBwYWdlLCBJ dGVtUG9pbnRlcnMgb2YgbWF0Y2hpbmcgaGVhcAorCQkJCSAqIHR1cGxlcyBhcmUgc3RvcmVk IGluIHNvLT5wYWdlRGF0YS4gIElmIHRoZXJlIGFyZSBhbnkgb24KKwkJCQkgKiB0aGlzIHBh Z2UsIHdlIGZhbGwgb3V0IG9mIHRoZSBpbm5lciAiZG8iIGFuZCBsb29wIGFyb3VuZCB0bwor CQkJCSAqIHJldHVybiB0aGVtLgorCQkJCSAqLworCQkJCWdpc3RTY2FuUGFnZShzY2FuLCBp dGVtLCBpdGVtLT5kaXN0YW5jZXMsIE5VTEwsIE5VTEwpOworCisJCQkJLyoKKwkJCQkgKiBJ ZiB3ZSBmb3VuZCBhbnkgaXRlbXMgb24gdGhlIHBhZ2UsIGNvcHkgdGhlbSBpbnRvIGEgYmF0 Y2gKKwkJCQkgKiBhbmQgd2UncmUgZG9uZS4KKwkJCQkgKi8KKworCQkJCS8qIGZvcndhcmQg ZGlyZWN0aW9uIG9ubHksIHNvIGdldCB0aGUgZmlyc3QgY2h1bmsgb2YgaXRlbXMgKi8KKwkJ CQlzdGFydCA9IDA7CisJCQkJZW5kID0gTWluKHN0YXJ0ICsgKHNjYW4tPnhzX2JhdGNoLT5j dXJyU2l6ZSAtIDEpLAorCQkJCQkJICBzby0+blBhZ2VEYXRhIC0gMSk7CS8qIGluZGV4IG9m IGxhc3QgaXRlbSAqLworCisJCQkJaWYgKHN0YXJ0IDw9IGVuZCkKKwkJCQl7CisJCQkJCV9n aXN0X2NvcHlfYmF0Y2goc2Nhbiwgc28sIHN0YXJ0LCBlbmQpOworCQkJCQlyZXR1cm4gdHJ1 ZTsKKwkJCQl9CisKKwkJCQlwZnJlZShpdGVtKTsKKwkJCX0gd2hpbGUgKHNvLT5uUGFnZURh dGEgPT0gMCk7CisJCX0KKwl9Cit9CisKIC8qCiAgKiBnaXN0Z2V0Yml0bWFwKCkgLS0gR2V0 IGEgYml0bWFwIG9mIGFsbCBoZWFwIHR1cGxlIGxvY2F0aW9ucwogICovCkBAIC03OTksMyAr OTY5LDEyOCBAQCBnaXN0Y2FucmV0dXJuKFJlbGF0aW9uIGluZGV4LCBpbnQgYXR0bm8pCiAJ ZWxzZQogCQlyZXR1cm4gZmFsc2U7CiB9CisKK3N0YXRpYyB2b2lkCitBc3NlcnRDaGVja0dJ U1RCYXRjaEluZm8oR0lTVFNjYW5PcGFxdWUgc28pCit7CisjaWZkZWYgVVNFX0FTU0VSVF9D SEVDS0lORworCS8qIHNob3VsZCBiZSB2YWxpZCBpdGVtcyAod2l0aCByZXNwZWN0IHRvIHRo ZSBjdXJyZW50IGxlYWYgcGFnZSkgKi8KKwlBc3NlcnQoMCA8PSBzby0+YmF0Y2guZmlyc3RJ bmRleCk7CisJQXNzZXJ0KHNvLT5iYXRjaC5maXJzdEluZGV4IDw9IHNvLT5iYXRjaC5sYXN0 SW5kZXgpOworCUFzc2VydChzby0+YmF0Y2gubGFzdEluZGV4IDw9IHNvLT5uUGFnZURhdGEp OworI2VuZGlmCit9CisKKy8qCisgKglfZ2lzdF9raWxsX2JhdGNoKCkgLS0gcmVtZW1iZXIg dGhlIGl0ZW1zLXRvLWJlLWtpbGxlZCBmcm9tIHRoZSBjdXJyZW50IGJhdGNoCisgKgorICog V2Ugc2ltcGx5IHRyYW5zbGF0ZSB0aGUgYml0bWFwIGludG8gdGhlICJyZWd1bGFyIiBraWxs ZWRJdGVtcyBhcnJheSwgYW5kIGxldAorICogdGhhdCB0byBkcml2ZSB3aGljaCBpdGVtcyBh cmUga2lsbGVkLgorICovCitzdGF0aWMgdm9pZAorX2dpc3Rfa2lsbF9iYXRjaChJbmRleFNj YW5EZXNjIHNjYW4pCit7CisJR0lTVFNjYW5PcGFxdWUgc28gPSAoR0lTVFNjYW5PcGFxdWUp IHNjYW4tPm9wYXF1ZTsKKworCS8qIGJhaWwgb3V0IGlmIGJhdGNoaW5nIG5vdCBlbmFibGVk ICovCisJaWYgKCFzY2FuLT54c19iYXRjaCkKKwkJcmV0dXJuOworCisJZm9yIChpbnQgaSA9 IDA7IGkgPCBzY2FuLT54c19iYXRjaC0+bktpbGxlZEl0ZW1zOyBpKyspCisJeworCQlpbnQJ CQlpbmRleCA9IChzby0+YmF0Y2guZmlyc3RJbmRleCArIHNjYW4tPnhzX2JhdGNoLT5raWxs ZWRJdGVtc1tpXSk7CisKKwkJLyogbWFrZSBzdXJlIHdlIGhhdmUgYSB2YWxpZCBpbmRleCAo aW4gdGhlIGN1cnJlbnQgbGVhZiBwYWdlKSAqLworCQlBc3NlcnQoKHNvLT5iYXRjaC5maXJz dEluZGV4IDw9IGluZGV4KSAmJgorCQkJICAgKGluZGV4IDw9IHNvLT5iYXRjaC5sYXN0SW5k ZXgpKTsKKworCQkvKgorCQkgKiBZZXMsIHJlbWVtYmVyIGl0IGZvciBsYXRlci4gKFdlJ2xs IGRlYWwgd2l0aCBhbGwgc3VjaCB0dXBsZXMgYXQKKwkJICogb25jZSByaWdodCBiZWZvcmUg bGVhdmluZyB0aGUgaW5kZXggcGFnZS4pICBUaGUgdGVzdCBmb3IgbnVtS2lsbGVkCisJCSAq IG92ZXJydW4gaXMgbm90IGp1c3QgcGFyYW5vaWE6IGlmIHRoZSBjYWxsZXIgcmV2ZXJzZXMg ZGlyZWN0aW9uIGluCisJCSAqIHRoZSBpbmRleHNjYW4gdGhlbiB0aGUgc2FtZSBpdGVtIG1p Z2h0IGdldCBlbnRlcmVkIG11bHRpcGxlIHRpbWVzLgorCQkgKiBJdCdzIG5vdCB3b3J0aCB0 cnlpbmcgdG8gb3B0aW1pemUgdGhhdCwgc28gd2UgZG9uJ3QgZGV0ZWN0IGl0LCBidXQKKwkJ ICogaW5zdGVhZCBqdXN0IGZvcmdldCBhbnkgZXhjZXNzIGVudHJpZXMuCisJCSAqLworCQlp ZiAoc28tPmtpbGxlZEl0ZW1zID09IE5VTEwpCisJCXsKKwkJCU1lbW9yeUNvbnRleHQgb2xk Q3h0ID0KKwkJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8oc28tPmdpc3RzdGF0ZS0+c2NhbkN4 dCk7CisKKwkJCXNvLT5raWxsZWRJdGVtcyA9CisJCQkJKE9mZnNldE51bWJlciAqKSBwYWxs b2MoTWF4SW5kZXhUdXBsZXNQZXJQYWdlCisJCQkJCQkJCQkJKiBzaXplb2YoT2Zmc2V0TnVt YmVyKSk7CisKKwkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRDeHQpOworCQl9CisJCWlm IChzby0+bnVtS2lsbGVkIDwgTWF4SW5kZXhUdXBsZXNQZXJQYWdlKQorCQkJc28tPmtpbGxl ZEl0ZW1zW3NvLT5udW1LaWxsZWQrK10gPSBpbmRleDsKKwl9CisKKwkvKiBub3cgcmVzZXQg dGhlIG51bWJlciBvZiBraWxsZWQgaXRlbXMgKi8KKwlzY2FuLT54c19iYXRjaC0+bktpbGxl ZEl0ZW1zID0gMDsKK30KKworLyoKKyAqIEZJWE1FIERvZXMgdGhpcyBuZWVkIHRvIHdvcnJ5 IGFib3V0IHJlY2hlY2svcmVjaGVja0Rpc3RhbmNlcyBmbGFncyBpbgorICogR0lTVFNjYW5P cGFxdWU/IFByb2JhYmx5IHllcy4KKyAqCisgKiBGSVhNRSBEZWZpbml0ZWx5IHNob3VsZCBy ZXR1cm4gcmVjb250dXAgZm9yIElPUywgYnV0IHRoYXQgbmVlZHMgY2hhbmdlcworICogdG8g aW5kZXhfYmF0Y2hfYWRkLgorICovCitzdGF0aWMgdm9pZAorX2dpc3RfY29weV9iYXRjaChJ bmRleFNjYW5EZXNjIHNjYW4sIEdJU1RTY2FuT3BhcXVlIHNvLAorCQkJCSBpbnQgc3RhcnQs IGludCBlbmQpCit7CisJLyoKKwkgKiBXZSdyZSByZWFkaW5nIHRoZSBmaXJzdCBiYXRjaCwg YW5kIHRoZXJlIHNob3VsZCBhbHdheXMgYmUgYXQgbGVhc3Qgb25lCisJICogaXRlbSAob3Ro ZXJ3aXNlIF9idF9maXJzdCB3b3VsZCByZXR1cm4gZmFsc2UpLiBTbyB3ZSBzaG91bGQgbmV2 ZXIgZ2V0CisJICogaW50byBzaXR1YXRpb24gd2l0aCBlbXB0eSBzdGFydC9lbmQgcmFuZ2Uu IEluIHRoZSB3b3JzdCBjYXNlLCB0aGVyZSBpcworCSAqIGp1c3QgYSBzaW5nbGUgaXRlbSwg aW4gd2hpY2ggY2FzZSAoc3RhcnQgPT0gZW5kKS4KKwkgKi8KKwlBc3NlcnQoc3RhcnQgPD0g ZW5kKTsKKworCS8qIFRoZSByYW5nZSBvZiBpdGVtcyBzaG91bGQgZml0IGludG8gdGhlIGN1 cnJlbnQgYmF0Y2ggc2l6ZS4gKi8KKwlBc3NlcnQoKGVuZCAtIHN0YXJ0ICsgMSkgPD0gc2Nh bi0+eHNfYmF0Y2gtPmN1cnJTaXplKTsKKworCXNvLT5iYXRjaC5maXJzdEluZGV4ID0gc3Rh cnQ7CisJc28tPmJhdGNoLmxhc3RJbmRleCA9IGVuZDsKKworCUFzc2VydENoZWNrR0lTVEJh dGNoSW5mbyhzbyk7CisKKwkvKgorCSAqIFdhbGsgdGhyb3VnaCB0aGUgcmFuZ2Ugb2YgaW5k ZXggdHVwbGVzLCBjb3B5IHRoZW0gaW50byB0aGUgYmF0Y2guIElmCisJICogcmVxdWVzdGVk LCBzZXQgdGhlIGluZGV4IHR1cGxlIHRvby4KKwkgKgorCSAqIFdlIGRvbid0IGtub3cgaWYg dGhlIGJhdGNoIGlzIGZ1bGwgYWxyZWFkeSAtIHdlIGp1c3QgdHJ5IHRvIGFkZCBpdCwgYW5k CisJICogYmFpbCBvdXQgaWYgaXQgZmFpbHMuCisJICoKKwkgKiBGSVhNRSBUaGlzIHNlZW1z IHdyb25nLCBhY3R1YWxseS4gV2UgdXNlIGN1cnJTaXplIHdoZW4gY2FsY3VsYXRpbmcgdGhl CisJICogc3RhcnQvZW5kIHJhbmdlLCBzbyB0aGUgYWRkIHNob3VsZCBhbHdheXMgc3VjY2Vl ZC4KKwkgKi8KKwl3aGlsZSAoc3RhcnQgPD0gZW5kKQorCXsKKwkJR0lTVFNlYXJjaEhlYXBJ dGVtICppdGVtID0gJnNvLT5wYWdlRGF0YVtzdGFydF07CisKKwkJSGVhcFR1cGxlCWh0dXAg PSBOVUxMOworCisJCWlmIChzY2FuLT54c193YW50X2l0dXApCisJCQlodHVwID0gaXRlbS0+ cmVjb250dXA7CisKKwkJLyogdHJ5IHRvIGFkZCBpdCB0byBiYXRjaCwgaWYgdGhlcmUncyBz cGFjZSAqLworCQlpZiAoIWluZGV4X2JhdGNoX2FkZChzY2FuLCBpdGVtLT5oZWFwUHRyLCBp dGVtLT5yZWNoZWNrLCBOVUxMLCBodHVwKSkKKwkJCWJyZWFrOworCisJCXN0YXJ0Kys7CisJ fQorCisJLyoKKwkgKiBzZXQgdGhlIHN0YXJ0aW5nIHBvaW50CisJICoKKwkgKiBYWFggbWln aHQgYmUgYmV0dGVyIGRvbmUgaW4gaW5kZXhhbS5jCisJICovCisJc2Nhbi0+eHNfYmF0Y2gt PmN1cnJJbmRleCA9IC0xOworCisJLyogc2hvdWxkbid0IGJlIHBvc3NpYmxlIHRvIGVuZCBo ZXJlIHdpdGggYW4gZW1wdHkgYmF0Y2ggKi8KKwlBc3NlcnQoc2Nhbi0+eHNfYmF0Y2gtPm5o ZWFwdGlkcyA+IDApOworfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dpc3Rf cHJpdmF0ZS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dpc3RfcHJpdmF0ZS5oCmluZGV4IDdi ODc0OWM4ZGIwLi4yZjY1MzM1NGRhMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNz L2dpc3RfcHJpdmF0ZS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9naXN0X3ByaXZhdGUu aApAQCAtMTQ4LDYgKzE0OCwxOSBAQCB0eXBlZGVmIHN0cnVjdCBHSVNUU2VhcmNoSXRlbQog CShvZmZzZXRvZihHSVNUU2VhcmNoSXRlbSwgZGlzdGFuY2VzKSArIFwKIAkgc2l6ZW9mKElu ZGV4T3JkZXJCeURpc3RhbmNlKSAqIChuX2Rpc3RhbmNlcykpCiAKKy8qCisgKiBJbmZvcm1h dGlvbiBhYm91dCB0aGUgY3VycmVudCBiYXRjaCAoaW4gYmF0Y2hlZCBpbmRleCBzY2FucykK KyAqCisgKiBYWFggUHJvYmFibHkgbm90IG5lZWRlZCwgYXMgc3BnaXN0IHN1cHBvcnRzIGp1 c3QgZm9yd2FyZCBzY2Fucywgc28gd2UKKyAqIGNvdWxkIHNpbXBseSB0aGUgaVB0ciAobm8g cHJvYmxlbSBhZnRlciBjaGFuZ2Ugb2Ygc2NhbiBkaXJlY3Rpb24pLgorICovCit0eXBlZGVm IHN0cnVjdCBHSVNUQmF0Y2hJbmZvCit7CisJLyogQ3VycmVudCByYW5nZSBvZiBpdGVtcyBp biBhIGJhdGNoIChpZiB1c2VkKS4gKi8KKwlpbnQJCQlmaXJzdEluZGV4OworCWludAkJCWxh c3RJbmRleDsKK30gR0lTVEJhdGNoSW5mbzsKKwogLyoKICAqIEdJU1RTY2FuT3BhcXVlRGF0 YTogcHJpdmF0ZSBzdGF0ZSBmb3IgYSBzY2FuIG9mIGEgR2lTVCBpbmRleAogICovCkBAIC0x NzYsNiArMTg5LDggQEAgdHlwZWRlZiBzdHJ1Y3QgR0lTVFNjYW5PcGFxdWVEYXRhCiAJT2Zm c2V0TnVtYmVyIGN1clBhZ2VEYXRhOwkvKiBuZXh0IGl0ZW0gdG8gcmV0dXJuICovCiAJTWVt b3J5Q29udGV4dCBwYWdlRGF0YUN4dDsJLyogY29udGV4dCBob2xkaW5nIHRoZSBmZXRjaGVk IHR1cGxlcywgZm9yCiAJCQkJCQkJCSAqIGluZGV4LW9ubHkgc2NhbnMgKi8KKworCUdJU1RC YXRjaEluZm8gYmF0Y2g7CQkvKiBiYXRjaCBsb2FkZWQgZnJvbSB0aGUgaW5kZXggKi8KIH0g R0lTVFNjYW5PcGFxdWVEYXRhOwogCiB0eXBlZGVmIEdJU1RTY2FuT3BhcXVlRGF0YSAqR0lT VFNjYW5PcGFxdWU7CkBAIC00NjEsNiArNDc2LDcgQEAgZXh0ZXJuIFhMb2dSZWNQdHIgZ2lz dFhMb2dBc3NpZ25MU04odm9pZCk7CiAKIC8qIGdpc3RnZXQuYyAqLwogZXh0ZXJuIGJvb2wg Z2lzdGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwor ZXh0ZXJuIGJvb2wgZ2lzdGdldGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXIpOwogZXh0ZXJuIGludDY0IGdpc3RnZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBz Y2FuLCBUSURCaXRtYXAgKnRibSk7CiBleHRlcm4gYm9vbCBnaXN0Y2FucmV0dXJuKFJlbGF0 aW9uIGluZGV4LCBpbnQgYXR0bm8pOwogCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0Cmlu ZGV4IGI5ZTQ2NWVkYWMwLi44ZjcyMDExYWQxZSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QKQEAgLTk2OCw2ICs5NjgsNyBAQCBHQlRfTlVNS0VZX1IKIEdCVF9WQVJLRVkKIEdC VF9WQVJLRVlfUgogR0VORVJBTF9OQU1FCitHSVNUQmF0Y2hJbmZvCiBHSVNUQnVpbGRCdWZm ZXJzCiBHSVNUQnVpbGRTdGF0ZQogR0lTVERlbGV0ZWRQYWdlQ29udGVudHMKLS0gCjIuNDcu MAoK --------------4qyQcmdBaK2FloOMEeBLhmx6 Content-Type: text/x-patch; charset=UTF-8; name="v20241106-0006-WIP-batching-for-sp-gist-indexes.patch" Content-Disposition: attachment; filename="v20241106-0006-WIP-batching-for-sp-gist-indexes.patch" Content-Transfer-Encoding: base64 RnJvbSA3NDRlNjY2MmUyMTIyZDJjZDgwMDFjMTE3OThiNWI3ZDE4YjQwM2JkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogTW9uLCAzMCBTZXAgMjAyNCAyMjo0OTowNCArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjQxMTA2IDYvN10gV0lQOiBiYXRjaGluZyBmb3Igc3AtZ2lzdCBpbmRleGVzCgotLS0K IHNyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3Bnc2Nhbi5jICB8IDE0MiArKysrKysrKysr KysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMu YyB8ICAgMSArCiBzcmMvaW5jbHVkZS9hY2Nlc3Mvc3BnaXN0LmggICAgICAgICAgfCAgIDEg Kwogc3JjL2luY2x1ZGUvYWNjZXNzL3NwZ2lzdF9wcml2YXRlLmggIHwgIDE1ICsrKwogc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgIHwgICAxICsKIDUgZmlsZXMgY2hh bmdlZCwgMTYwIGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3Mvc3BnaXN0L3NwZ3NjYW4uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3Bnc2Nh bi5jCmluZGV4IDMwMTc4NjE4NTlmLi40Yjk2ODUyYzI4YyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGdzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3NwZ2lzdC9zcGdzY2FuLmMKQEAgLTEwNzcsNiArMTA3NywxNDggQEAgc3BnZ2V0dHVwbGUo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAlyZXR1cm4gZmFsc2U7 CiB9CiAKK3N0YXRpYyB2b2lkCitBc3NlcnRDaGVja1NwR2lzdEJhdGNoSW5mbyhTcEdpc3RT Y2FuT3BhcXVlIHNvKQoreworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwkvKiBzaG91 bGQgYmUgdmFsaWQgaXRlbXMgKHdpdGggcmVzcGVjdCB0byB0aGUgY3VycmVudCBsZWFmIHBh Z2UpICovCisJQXNzZXJ0KDAgPD0gc28tPmJhdGNoLmZpcnN0SW5kZXgpOworCUFzc2VydChz by0+YmF0Y2guZmlyc3RJbmRleCA8PSBzby0+YmF0Y2gubGFzdEluZGV4KTsKKwlBc3NlcnQo c28tPmJhdGNoLmxhc3RJbmRleCA8PSBzby0+blB0cnMpOworI2VuZGlmCit9CisKKy8qCisg KiBGSVhNRSBEb2VzIHRoaXMgbmVlZCB0byB3b3JyeSBhYm91dCByZWNoZWNrL3JlY2hlY2tE aXN0YW5jZXMgZmxhZ3MgaW4KKyAqIEdJU1RTY2FuT3BhcXVlPyBQcm9iYWJseSB5ZXMuCisg KgorICogRklYTUUgRGVmaW5pdGVseSBzaG91bGQgcmV0dXJuIHJlY29udHVwIGZvciBJT1Ms IGJ1dCB0aGF0IG5lZWRzIGNoYW5nZXMKKyAqIHRvIGluZGV4X2JhdGNoX2FkZC4KKyAqLwor c3RhdGljIHZvaWQKK19zcGdpc3RfY29weV9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIFNw R2lzdFNjYW5PcGFxdWUgc28sCisJCQkJICAgaW50IHN0YXJ0LCBpbnQgZW5kKQoreworCS8q CisJICogV2UncmUgcmVhZGluZyB0aGUgZmlyc3QgYmF0Y2gsIGFuZCB0aGVyZSBzaG91bGQg YWx3YXlzIGJlIGF0IGxlYXN0IG9uZQorCSAqIGl0ZW0gKG90aGVyd2lzZSBfYnRfZmlyc3Qg d291bGQgcmV0dXJuIGZhbHNlKS4gU28gd2Ugc2hvdWxkIG5ldmVyIGdldAorCSAqIGludG8g c2l0dWF0aW9uIHdpdGggZW1wdHkgc3RhcnQvZW5kIHJhbmdlLiBJbiB0aGUgd29yc3QgY2Fz ZSwgdGhlcmUgaXMKKwkgKiBqdXN0IGEgc2luZ2xlIGl0ZW0sIGluIHdoaWNoIGNhc2UgKHN0 YXJ0ID09IGVuZCkuCisJICovCisJQXNzZXJ0KHN0YXJ0IDw9IGVuZCk7CisKKwkvKiBUaGUg cmFuZ2Ugb2YgaXRlbXMgc2hvdWxkIGZpdCBpbnRvIHRoZSBjdXJyZW50IGJhdGNoIHNpemUu ICovCisJQXNzZXJ0KChlbmQgLSBzdGFydCArIDEpIDw9IHNjYW4tPnhzX2JhdGNoLT5jdXJy U2l6ZSk7CisKKwlzby0+YmF0Y2guZmlyc3RJbmRleCA9IHN0YXJ0OworCXNvLT5iYXRjaC5s YXN0SW5kZXggPSBlbmQ7CisKKwlBc3NlcnRDaGVja1NwR2lzdEJhdGNoSW5mbyhzbyk7CisK KwkvKgorCSAqIFdhbGsgdGhyb3VnaCB0aGUgcmFuZ2Ugb2YgaW5kZXggdHVwbGVzLCBjb3B5 IHRoZW0gaW50byB0aGUgYmF0Y2guIElmCisJICogcmVxdWVzdGVkLCBzZXQgdGhlIGluZGV4 IHR1cGxlIHRvby4KKwkgKgorCSAqIFdlIGRvbid0IGtub3cgaWYgdGhlIGJhdGNoIGlzIGZ1 bGwgYWxyZWFkeSAtIHdlIGp1c3QgdHJ5IHRvIGFkZCBpdCwgYW5kCisJICogYmFpbCBvdXQg aWYgaXQgZmFpbHMuCisJICoKKwkgKiBGSVhNRSBUaGlzIHNlZW1zIHdyb25nLCBhY3R1YWxs eS4gV2UgdXNlIGN1cnJTaXplIHdoZW4gY2FsY3VsYXRpbmcgdGhlCisJICogc3RhcnQvZW5k IHJhbmdlLCBzbyB0aGUgYWRkIHNob3VsZCBhbHdheXMgc3VjY2VlZC4KKwkgKi8KKwl3aGls ZSAoc3RhcnQgPD0gZW5kKQorCXsKKwkJYm9vbAkJcmVjaGVjayA9IHNvLT5yZWNoZWNrW3N0 YXJ0XTsKKwkJSGVhcFR1cGxlCWh0dXAgPSBOVUxMOworCisJCWlmIChzby0+d2FudF9pdHVw KQorCQkJaHR1cCA9IHNvLT5yZWNvblR1cHNbc3RhcnRdOworCisJCWlmIChzby0+bnVtYmVy T2ZPcmRlckJ5cyA+IDApCisJCQlpbmRleF9zdG9yZV9mbG9hdDhfb3JkZXJieV9kaXN0YW5j ZXMoc2Nhbiwgc28tPm9yZGVyQnlUeXBlcywKKwkJCQkJCQkJCQkJCSBzby0+ZGlzdGFuY2Vz W3NvLT5pUHRyXSwKKwkJCQkJCQkJCQkJCSBzby0+cmVjaGVja0Rpc3RhbmNlc1tzby0+aVB0 cl0pOworCisJCS8qIHRyeSB0byBhZGQgaXQgdG8gYmF0Y2gsIGlmIHRoZXJlJ3Mgc3BhY2Ug Ki8KKwkJaWYgKCFpbmRleF9iYXRjaF9hZGQoc2Nhbiwgc28tPmhlYXBQdHJzW3N0YXJ0XSwg cmVjaGVjaywgTlVMTCwgaHR1cCkpCisJCQlicmVhazsKKworCQlzdGFydCsrOworCX0KKwor CS8qCisJICogc2V0IHRoZSBzdGFydGluZyBwb2ludAorCSAqCisJICogWFhYIG1pZ2h0IGJl IGJldHRlciBkb25lIGluIGluZGV4YW0uYworCSAqLworCXNjYW4tPnhzX2JhdGNoLT5jdXJy SW5kZXggPSAtMTsKKworCS8qIHNob3VsZG4ndCBiZSBwb3NzaWJsZSB0byBlbmQgaGVyZSB3 aXRoIGFuIGVtcHR5IGJhdGNoICovCisJQXNzZXJ0KHNjYW4tPnhzX2JhdGNoLT5uaGVhcHRp ZHMgPiAwKTsKK30KKworCitib29sCitzcGdnZXRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyKQoreworCVNwR2lzdFNjYW5PcGFxdWUgc28gPSAoU3BHaXN0 U2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCisJaWYgKGRpciAhPSBGb3J3YXJkU2NhbkRp cmVjdGlvbikKKwkJZWxvZyhFUlJPUiwgIlNQLUdpU1Qgb25seSBzdXBwb3J0cyBmb3J3YXJk IHNjYW4gZGlyZWN0aW9uIik7CisKKwkvKiBDb3B5IHdhbnRfaXR1cCB0byAqc28gc28gd2Ug ZG9uJ3QgbmVlZCB0byBwYXNzIGl0IGFyb3VuZCBzZXBhcmF0ZWx5ICovCisJc28tPndhbnRf aXR1cCA9IHNjYW4tPnhzX3dhbnRfaXR1cDsKKworCWZvciAoOzspCisJeworCQlpbnQJCQlz dGFydCwKKwkJCQkJZW5kOworCisJCS8qIGZvcndhcmQgZGlyZWN0aW9ucyBvbmx5LCBlYXN5 IHRvIGNhbGN1bGF0ZSBuZXh0IGJhdGNoICovCisJCXN0YXJ0ID0gc28tPmJhdGNoLmxhc3RJ bmRleCArIDE7CisJCWVuZCA9IE1pbihzdGFydCArIChzY2FuLT54c19iYXRjaC0+Y3VyclNp emUgLSAxKSwKKwkJCQkgIHNvLT5uUHRycyAtIDEpOwkvKiBpbmRleCBvZiBsYXN0IGl0ZW0g Ki8KKwkJc28tPmlQdHIgPSAoZW5kICsgMSk7CisKKwkJLyogaWYgd2UgZm91bmQgbW9yZSBp dGVtcyBvbiB0aGUgY3VycmVudCBwYWdlLCB3ZSdyZSBkb25lICovCisJCWlmIChzdGFydCA8 PSBlbmQpCisJCXsKKwkJCV9zcGdpc3RfY29weV9iYXRjaChzY2FuLCBzbywgc3RhcnQsIGVu ZCk7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCisJCWlmIChzby0+bnVtYmVyT2ZPcmRlckJ5 cyA+IDApCisJCXsKKwkJCS8qIE11c3QgcGZyZWUgZGlzdGFuY2VzIHRvIGF2b2lkIG1lbW9y eSBsZWFrICovCisJCQlpbnQJCQlpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgc28tPm5QdHJz OyBpKyspCisJCQkJaWYgKHNvLT5kaXN0YW5jZXNbaV0pCisJCQkJCXBmcmVlKHNvLT5kaXN0 YW5jZXNbaV0pOworCQl9CisKKwkJaWYgKHNvLT53YW50X2l0dXApCisJCXsKKwkJCS8qIE11 c3QgcGZyZWUgcmVjb25zdHJ1Y3RlZCB0dXBsZXMgdG8gYXZvaWQgbWVtb3J5IGxlYWsgKi8K KwkJCWludAkJCWk7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBzby0+blB0cnM7IGkrKykKKwkJ CQlwZnJlZShzby0+cmVjb25UdXBzW2ldKTsKKwkJfQorCQlzby0+aVB0ciA9IHNvLT5uUHRy cyA9IDA7CisKKwkJc3BnV2FsayhzY2FuLT5pbmRleFJlbGF0aW9uLCBzbywgZmFsc2UsIHN0 b3JlR2V0dHVwbGUpOworCisJCWlmIChzby0+blB0cnMgPT0gMCkKKwkJCWJyZWFrOwkJCQkv KiBtdXN0IGhhdmUgY29tcGxldGVkIHNjYW4gKi8KKworCQkvKiByZXNldCBiZWZvcmUgbG9h ZGluZyBkYXRhIGZyb20gYmF0Y2ggKi8KKwkJc28tPmJhdGNoLmZpcnN0SW5kZXggPSAtMTsK KwkJc28tPmJhdGNoLmxhc3RJbmRleCA9IC0xOworCX0KKworCXJldHVybiBmYWxzZTsKK30K KwogYm9vbAogc3BnY2FucmV0dXJuKFJlbGF0aW9uIGluZGV4LCBpbnQgYXR0bm8pCiB7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKaW5kZXggNzJiNzY2MTk3MWYuLjI1 YjM2M2QzODBkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0 aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCkBAIC04 NSw2ICs4NSw3IEBAIHNwZ2hhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUt PmFtYmVnaW5zY2FuID0gc3BnYmVnaW5zY2FuOwogCWFtcm91dGluZS0+YW1yZXNjYW4gPSBz cGdyZXNjYW47CiAJYW1yb3V0aW5lLT5hbWdldHR1cGxlID0gc3BnZ2V0dHVwbGU7CisJYW1y b3V0aW5lLT5hbWdldGJhdGNoID0gc3BnZ2V0YmF0Y2g7CiAJYW1yb3V0aW5lLT5hbWdldGJp dG1hcCA9IHNwZ2dldGJpdG1hcDsKIAlhbXJvdXRpbmUtPmFtZW5kc2NhbiA9IHNwZ2VuZHNj YW47CiAJYW1yb3V0aW5lLT5hbW1hcmtwb3MgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL3NwZ2lzdC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3NwZ2lzdC5oCmlu ZGV4IGQ2YTQ5NTMxMjAwLi5mODc5ODQzYjNiYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv YWNjZXNzL3NwZ2lzdC5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9zcGdpc3QuaApAQCAt MjA5LDYgKzIwOSw3IEBAIGV4dGVybiB2b2lkIHNwZ3Jlc2NhbihJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAkJCQkJICBTY2FuS2V5IG9y ZGVyYnlzLCBpbnQgbm9yZGVyYnlzKTsKIGV4dGVybiBpbnQ2NCBzcGdnZXRiaXRtYXAoSW5k ZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKnRibSk7CiBleHRlcm4gYm9vbCBzcGdnZXR0 dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBi b29sIHNwZ2dldGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp OwogZXh0ZXJuIGJvb2wgc3BnY2FucmV0dXJuKFJlbGF0aW9uIGluZGV4LCBpbnQgYXR0bm8p OwogCiAvKiBzcGd2YWN1dW0uYyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNz L3NwZ2lzdF9wcml2YXRlLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvc3BnaXN0X3ByaXZhdGUu aAppbmRleCBlN2NiZTEwYTg5Yi4uMTVhNWU3N2M1ZDMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2FjY2Vzcy9zcGdpc3RfcHJpdmF0ZS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9z cGdpc3RfcHJpdmF0ZS5oCkBAIC0xODMsNiArMTgzLDE5IEBAIHR5cGVkZWYgc3RydWN0IFNw R2lzdFNlYXJjaEl0ZW0KICNkZWZpbmUgU2l6ZU9mU3BHaXN0U2VhcmNoSXRlbShuX2Rpc3Rh bmNlcykgXAogCShvZmZzZXRvZihTcEdpc3RTZWFyY2hJdGVtLCBkaXN0YW5jZXMpICsgc2l6 ZW9mKGRvdWJsZSkgKiAobl9kaXN0YW5jZXMpKQogCisvKgorICogSW5mb3JtYXRpb24gYWJv dXQgdGhlIGN1cnJlbnQgYmF0Y2ggKGluIGJhdGNoZWQgaW5kZXggc2NhbnMpCisgKgorICog WFhYIFByb2JhYmx5IG5vdCBuZWVkZWQsIGFzIHNwZ2lzdCBzdXBwb3J0cyBqdXN0IGZvcndh cmQgc2NhbnMsIHNvIHdlCisgKiBjb3VsZCBzaW1wbHkgdGhlIGlQdHIgKG5vIHByb2JsZW0g YWZ0ZXIgY2hhbmdlIG9mIHNjYW4gZGlyZWN0aW9uKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qg U3BHaXN0QmF0Y2hJbmZvCit7CisJLyogQ3VycmVudCByYW5nZSBvZiBpdGVtcyBpbiBhIGJh dGNoIChpZiB1c2VkKS4gKi8KKwlpbnQJCQlmaXJzdEluZGV4OworCWludAkJCWxhc3RJbmRl eDsKK30gU3BHaXN0QmF0Y2hJbmZvOworCiAvKgogICogUHJpdmF0ZSBzdGF0ZSBvZiBhbiBp bmRleCBzY2FuCiAgKi8KQEAgLTIzNSw2ICsyNDgsOCBAQCB0eXBlZGVmIHN0cnVjdCBTcEdp c3RTY2FuT3BhcXVlRGF0YQogCS8qIGRpc3RhbmNlcyAoZm9yIHJlY2hlY2spICovCiAJSW5k ZXhPcmRlckJ5RGlzdGFuY2UgKmRpc3RhbmNlc1tNYXhJbmRleFR1cGxlc1BlclBhZ2VdOwog CisJU3BHaXN0QmF0Y2hJbmZvIGJhdGNoOwkJLyogYmF0Y2ggbG9hZGVkIGZyb20gdGhlIGlu ZGV4ICovCisKIAkvKgogCSAqIE5vdGU6IHVzaW5nIE1heEluZGV4VHVwbGVzUGVyUGFnZSBh Ym92ZSBpcyBhIGJpdCBob2tleSBzaW5jZQogCSAqIFNwR2lzdExlYWZUdXBsZXMgYXJlbid0 IGV4YWN0bHkgSW5kZXhUdXBsZXM7IGhvd2V2ZXIsIHRoZXkgYXJlIGxhcmdlciwKZGlmZiAt LWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggOGY3MjAxMWFkMWUuLmI3MjEyY2MxNTRlIDEw MDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMjcwNCw2ICsyNzA0LDcgQEAgU29y dFN1cHBvcnREYXRhCiBTb3J0VHVwbGUKIFNvcnRUdXBsZUNvbXBhcmF0b3IKIFNvcnRlZFBv aW50CitTcEdpc3RCYXRjaEluZm8KIFNwR2lzdEJ1aWxkU3RhdGUKIFNwR2lzdENhY2hlCiBT cEdpc3REZWFkVHVwbGUKLS0gCjIuNDcuMAoK --------------4qyQcmdBaK2FloOMEeBLhmx6 Content-Type: text/x-patch; charset=UTF-8; name="v20241106-0007-WIP-stream-read-API.patch" Content-Disposition: attachment; filename="v20241106-0007-WIP-stream-read-API.patch" Content-Transfer-Encoding: base64 RnJvbSBmZDU1N2Y5ZDY4YjU3MDcwZjdhYjAxY2VlOGU2MDk2MGQzMDlhODJmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogV2VkLCAzMCBPY3QgMjAyNCAyMjo0MToxNCArMDEwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjQxMTA2IDcvN10gV0lQOiBzdHJlYW0gcmVhZCBBUEkKCi0tLQogc3JjL2JhY2tlbmQv YWNjZXNzL2dpc3QvZ2lzdGdldC5jICAgICAgICB8ICAgNyAtCiBzcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNoc2VhcmNoLmMgICAgIHwgIDEwIC0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbV9oYW5kbGVyLmMgfCAgMzIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9pbmRleGFtLmMgICAgICAgfCA3MTQgKysrKysrKysrKysrKysrLS0tLS0tLS0KIHNyYy9i YWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgICAgICAgfCAgMTggKy0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMgICAgfCAgMTAgLQogc3JjL2JhY2tlbmQv YWNjZXNzL3NwZ2lzdC9zcGdzY2FuLmMgICAgICB8ICAgNyAtCiBzcmMvYmFja2VuZC9hY2Nl c3MvdGFibGUvdGFibGVhbS5jICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9jb21tYW5k cy9jb25zdHJhaW50LmMgICAgICAgIHwgICAzICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9u b2RlSW5kZXhvbmx5c2Nhbi5jIHwgICA4ICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0u aCAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgg ICAgICAgICAgICAgfCAgMzIgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggICAg ICAgICAgICAgfCAgIDcgKy0KIDEzIGZpbGVzIGNoYW5nZWQsIDU0MiBpbnNlcnRpb25zKCsp LCAzMDkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dp c3QvZ2lzdGdldC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdGdldC5jCmluZGV4 IDcwZTMyZjE5MzY2Li4wMTVlMDk1NGFmNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2dpc3QvZ2lzdGdldC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3Rn ZXQuYwpAQCAtMTA4NCwxMyArMTA4NCw2IEBAIF9naXN0X2NvcHlfYmF0Y2goSW5kZXhTY2Fu RGVzYyBzY2FuLCBHSVNUU2Nhbk9wYXF1ZSBzbywKIAkJc3RhcnQrKzsKIAl9CiAKLQkvKgot CSAqIHNldCB0aGUgc3RhcnRpbmcgcG9pbnQKLQkgKgotCSAqIFhYWCBtaWdodCBiZSBiZXR0 ZXIgZG9uZSBpbiBpbmRleGFtLmMKLQkgKi8KLQlzY2FuLT54c19iYXRjaC0+Y3VyckluZGV4 ID0gLTE7Ci0KIAkvKiBzaG91bGRuJ3QgYmUgcG9zc2libGUgdG8gZW5kIGhlcmUgd2l0aCBh biBlbXB0eSBiYXRjaCAqLwogCUFzc2VydChzY2FuLT54c19iYXRjaC0+bmhlYXB0aWRzID4g MCk7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoc2VhcmNo LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoc2VhcmNoLmMKaW5kZXggYzExYWU4 NDdhM2IuLjUxODI0NTc0NzVkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFz aC9oYXNoc2VhcmNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNlYXJj aC5jCkBAIC05ODMsMTYgKzk4Myw2IEBAIF9oYXNoX2NvcHlfYmF0Y2goSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgSGFzaFNjYW5PcGFxdWUgc28sCiAJCXN0YXJ0 Kys7CiAJfQogCi0JLyoKLQkgKiBzZXQgdGhlIHN0YXJ0aW5nIHBvaW50Ci0JICoKLQkgKiBY WFggbWlnaHQgYmUgYmV0dGVyIGRvbmUgaW4gaW5kZXhhbS5jCi0JICovCi0JaWYgKFNjYW5E aXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKLQkJc2Nhbi0+eHNfYmF0Y2gtPmN1cnJJbmRleCA9 IC0xOwotCWVsc2UKLQkJc2Nhbi0+eHNfYmF0Y2gtPmN1cnJJbmRleCA9IHNjYW4tPnhzX2Jh dGNoLT5uaGVhcHRpZHM7Ci0KIAkvKiBzaG91bGRuJ3QgYmUgcG9zc2libGUgdG8gZW5kIGhl cmUgd2l0aCBhbiBlbXB0eSBiYXRjaCAqLwogCUFzc2VydChzY2FuLT54c19iYXRjaC0+bmhl YXB0aWRzID4gMCk7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRs ZXIuYwppbmRleCAzZmNlYWU3NTlkMi4uYjkwYzc5OWU0NTcgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAtNzUsMTEgKzc1LDEyIEBAIGhlYXBh bV9zbG90X2NhbGxiYWNrcyhSZWxhdGlvbiByZWxhdGlvbikKICAqLwogCiBzdGF0aWMgSW5k ZXhGZXRjaFRhYmxlRGF0YSAqCi1oZWFwYW1faW5kZXhfZmV0Y2hfYmVnaW4oUmVsYXRpb24g cmVsKQoraGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luKFJlbGF0aW9uIHJlbCwgUmVhZFN0cmVh bSAqcnMpCiB7CiAJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IHBhbGxvYzAoc2l6ZW9m KEluZGV4RmV0Y2hIZWFwRGF0YSkpOwogCiAJaHNjYW4tPnhzX2Jhc2UucmVsID0gcmVsOwor CWhzY2FuLT54c19iYXNlLnJzID0gcnM7CiAJaHNjYW4tPnhzX2NidWYgPSBJbnZhbGlkQnVm ZmVyOwogCiAJcmV0dXJuICZoc2Nhbi0+eHNfYmFzZTsKQEAgLTEyNiwxNSArMTI3LDM4IEBA IGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAq c2NhbiwKIAkJLyogU3dpdGNoIHRvIGNvcnJlY3QgYnVmZmVyIGlmIHdlIGRvbid0IGhhdmUg aXQgYWxyZWFkeSAqLwogCQlCdWZmZXIJCXByZXZfYnVmID0gaHNjYW4tPnhzX2NidWY7CiAK LQkJaHNjYW4tPnhzX2NidWYgPSBSZWxlYXNlQW5kUmVhZEJ1ZmZlcihoc2Nhbi0+eHNfY2J1 ZiwKLQkJCQkJCQkJCQkJICBoc2Nhbi0+eHNfYmFzZS5yZWwsCi0JCQkJCQkJCQkJCSAgSXRl bVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpKTsKKwkJLyoKKwkJICogWFhYIGl0J3MgYSBi aXQgd2VpcmQganVzdCByZWFkIGJ1ZmZlcnMsIGV4cGVjdGluZyB0aGVtIHRvIG1hdGNoCisJ CSAqIHRoZSBUSUQgd2UndmUgcHV0IGludG8gdGhlIHF1ZXVlIGVhcmxpZXIgZnJvbSB0aGUg Y2FsbGJhY2suCisJCSAqLworCQlpZiAoc2Nhbi0+cnMpCisJCQloc2Nhbi0+eHNfY2J1ZiA9 IHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKHNjYW4tPnJzLCBOVUxMKTsKKwkJZWxzZQorCQkJ aHNjYW4tPnhzX2NidWYgPSBSZWxlYXNlQW5kUmVhZEJ1ZmZlcihoc2Nhbi0+eHNfY2J1ZiwK KwkJCQkJCQkJCQkJCSAgaHNjYW4tPnhzX2Jhc2UucmVsLAorCQkJCQkJCQkJCQkJICBJdGVt UG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCkpOworCisJCS8vZWxvZyhXQVJOSU5HLCAiQnVm ZmVyR2V0QmxvY2tOdW1iZXIoaHNjYW4tPnhzX2NidWYpID0gJXUiLCBCdWZmZXJHZXRCbG9j a051bWJlcihoc2Nhbi0+eHNfY2J1ZikpOworCQkvL2Vsb2coV0FSTklORywgIkl0ZW1Qb2lu dGVyR2V0QmxvY2tOdW1iZXIodGlkKSA9ICV1IiwgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJl cih0aWQpKTsKKworCQkvKiBjcm9zc2NoZWNrOiBEaWQgd2UgZ2V0IHRoZSBleHBlY3RlZCBi bG9jayBudW1iZXI/ICovCisJCUFzc2VydChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c19jYnVm KSk7CisJCUFzc2VydChCdWZmZXJHZXRCbG9ja051bWJlcihoc2Nhbi0+eHNfY2J1ZikgPT0g SXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpKTsKIAogCQkvKgogCQkgKiBQcnVuZSBw YWdlLCBidXQgb25seSBpZiB3ZSB3ZXJlbid0IGFscmVhZHkgb24gdGhpcyBwYWdlCiAJCSAq LwogCQlpZiAocHJldl9idWYgIT0gaHNjYW4tPnhzX2NidWYpCisJCXsKIAkJCWhlYXBfcGFn ZV9wcnVuZV9vcHQoaHNjYW4tPnhzX2Jhc2UucmVsLCBoc2Nhbi0+eHNfY2J1Zik7CisJCX0K KworCQkvKiBGSVhNRSBub3Qgc3VyZSB0aGlzIGlzIHJlYWxseSBuZWVkZWQsIG9yIG1heWJl IHRoaXMgaXMgbm90IHRoZQorCQkgKiByaWdodCBwbGFjZSB0byBkbyB0aGlzICovCisJCWlm IChzY2FuLT5ycyAmJiAocHJldl9idWYgIT0gSW52YWxpZEJ1ZmZlcikpCisJCXsKKwkJCVJl bGVhc2VCdWZmZXIocHJldl9idWYpOworCQl9CiAJfQogCiAJLyogT2J0YWluIHNoYXJlLWxv Y2sgb24gdGhlIGJ1ZmZlciBzbyB3ZSBjYW4gZXhhbWluZSB2aXNpYmlsaXR5ICovCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwppbmRleCBiMTE3ODUzZjhkMC4uMGE1YThhNDFh YmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwpAQCAtNTUsNiArNTUsNyBA QAogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2lu Y2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRlLmgiCisjaW5jbHVkZSAic3RvcmFnZS9yZWFkX3N0 cmVhbS5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMv cnVsZXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgpAQCAtMTIxLDggKzEy Miw0OCBAQCBzdGF0aWMgYm9vbCBpbmRleF9iYXRjaF9nZXRuZXh0KEluZGV4U2NhbkRlc2Mg c2NhbiwKIAkJCQkJCQkJU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pOwogc3RhdGljIEl0ZW1Q b2ludGVyIGluZGV4X2JhdGNoX2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJ CQkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7Ci1zdGF0aWMgdm9pZCBpbmRl eF9iYXRjaF9wcmVmZXRjaChJbmRleFNjYW5EZXNjIHNjYW4sCi0JCQkJCQkJCSBTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbik7CisKK3N0YXRpYyBCbG9ja051bWJlciBpbmRleF9zY2FuX3N0 cmVhbV9yZWFkX25leHQoUmVhZFN0cmVhbSAqc3RyZWFtLAorCQkJCQkJCQkJCQkgICB2b2lk ICpjYWxsYmFja19wcml2YXRlX2RhdGEsCisJCQkJCQkJCQkJCSAgIHZvaWQgKnBlcl9idWZm ZXJfZGF0YSk7CisKKworLyogSXMgdGhlIGJhdGNoIGZ1bGwgKFRJRHMgdXAgdG8gY2FwYWNp dHkpPyAqLworI2RlZmluZQlJTkRFWF9CQVRDSF9JU19GVUxMKHNjYW4pCVwKKwkoKHNjYW4p LT54c19iYXRjaC0+bmhlYXB0aWRzID09IChzY2FuKS0+eHNfYmF0Y2gtPmN1cnJTaXplKQor CisvKiBJcyB0aGUgYmF0Y2ggZW1wdHkgKG5vIFRJRHMpPyAqLworI2RlZmluZQlJTkRFWF9C QVRDSF9JU19FTVBUWShzY2FuKQlcCisJKChzY2FuKS0+eHNfYmF0Y2gtPm5oZWFwdGlkcyA9 PSAwKQorCisvKgorICogRGlkIHdlIHByb2Nlc3MgYWxsIGl0ZW1zPyBPciBjYW4gd2UgbW92 ZSB0byB0aGUgbmV4dCBpdGVtIGluIHRoZSByZXF1ZXN0ZWQKKyAqIGRpcmVjdGlvbj8gRm9y IGZvcndhcmQgc2NhbiB0aGlzIG1lYW5zIHRoZSBpbmRleCBwb2ludHMgdG8gdGhlIGxhc3Qg aXRlbSwKKyAqIGZvciBiYWNrd2FyZCBzY2FucyBpdCBoYXMgdG8gcG9pbnQgdG8gdGhlIGZp cnN0IG9uZS4KKyAqCisgKiBUaGlzIGRvZXMgbm90IGNvdmVyIGVtcHR5IGJhdGNoZXMgcHJv cGVybHksIGJlY2F1c2Ugb2YgYmFja3dhcmQgc2NhbnMuCisgKi8KKyNkZWZpbmUJSU5ERVhf QkFUQ0hfSVNfUFJPQ0VTU0VEKHNjYW4sIHBvcywgZGlyZWN0aW9uKQlcCisJKFNjYW5EaXJl Y3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSA/IFwKKwkJKChzY2FuKS0+eHNfYmF0Y2gtPm5o ZWFwdGlkcyA9PSAocG9zKS0+aW5kZXgpIDogXAorCQkoKHBvcyktPmluZGV4ID09IC0xKSkK KworLyoKKyAqIERvZXMgdGhlIGJhdGNoIGhhdmUgaXRlbXMgaW4gdGhlIHJlcXVlc3RlZCBk aXJlY3Rpb24/IFRoZSBiYXRjaCBtdXN0IGJlCisgKiBub24tZW1wdHksIGFuZCB3ZSBzaG91 bGQgbm90IGhhdmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBiYXRjaCAoaW4gdGhlCisgKiBk aXJlY3Rpb24pLgorICoKKyAqIEhvd2V2ZXIsIGlmIHdlIGp1c3QgcmVzdG9yZWQgdGhlIHBv c2l0aW9uIGFmdGVyIG1hcmsvcmVzdG9yZSwgdGhlcmUgc2hvdWxkCisgKiBiZSBhdCBsZWFz dCBvbmUgaXRlbSB0byBwcm9jZXNzIChhcyB3ZSB3b24ndCBhZHZhbmNlIG9uIHRoZSBuZXh0 IGNhbGwpLgorICoKKyAqIFhYWCBUaGlzIGlzIGEgYml0IGNvbmZ1c2luZyAvIHVnbHksIHBy b2JhYmx5IHNob3VsZCByZXRoaW5rIGhvdyB3ZSB0cmFjaworICogZW1wdHkgYmF0Y2hlcywg YW5kIGhvdyB3ZSBoYW5kbGUgbm90IGFkdmFuY2luZyBhZnRlciBhIHJlc3RvcmUuCisgKi8K KyNkZWZpbmUgSU5ERVhfQkFUQ0hfSEFTX0lURU1TKHNjYW4sIHBvcywgZGlyZWN0aW9uKSBc CisJKCFJTkRFWF9CQVRDSF9JU19FTVBUWShzY2FuKSAmJiBcCisJCSghSU5ERVhfQkFUQ0hf SVNfUFJPQ0VTU0VEKChzY2FuKSwgKHBvcyksIChkaXJlY3Rpb24pKSB8fCBcCisJCShwb3Mp LT5yZXN0b3JlZCkpCisKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoJCQkJICAgaW5kZXhfIGludGVy ZmFjZSBmdW5jdGlvbnMKQEAgLTI3Myw2ICszMTQsNyBAQCBpbmRleF9iZWdpbnNjYW4oUmVs YXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCWludCBua2V5cywgaW50IG5vcmRlcmJ5cywKIAkJ CQlib29sIGVuYWJsZV9iYXRjaGluZykKIHsKKwlSZWFkU3RyZWFtICAgKnJzID0gTlVMTDsK IAlJbmRleFNjYW5EZXNjIHNjYW47CiAKIAlBc3NlcnQoc25hcHNob3QgIT0gSW52YWxpZFNu YXBzaG90KTsKQEAgLTI4Niw5ICszMjgsNiBAQCBpbmRleF9iZWdpbnNjYW4oUmVsYXRpb24g aGVhcFJlbGF0aW9uLAogCXNjYW4tPmhlYXBSZWxhdGlvbiA9IGhlYXBSZWxhdGlvbjsKIAlz Y2FuLT54c19zbmFwc2hvdCA9IHNuYXBzaG90OwogCi0JLyogcHJlcGFyZSB0byBmZXRjaCBp bmRleCBtYXRjaGVzIGZyb20gdGFibGUgKi8KLQlzY2FuLT54c19oZWFwZmV0Y2ggPSB0YWJs ZV9pbmRleF9mZXRjaF9iZWdpbihoZWFwUmVsYXRpb24pOwotCiAJLyoKIAkgKiBJZiBleHBs aWNpdGx5IHJlcXVlc3RlZCBhbmQgc3VwcG9ydGVkIGJ5IGJvdGggdGhlIGluZGV4IEFNIGFu ZCB0aGUKIAkgKiBwbGFuLCBpbml0aWFsaXplIGJhdGNoaW5nIGluZm8uCkBAIC0yOTksMTQg KzMzOCwzMSBAQCBpbmRleF9iZWdpbnNjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCSAq CiAJICogWFhYIE1heWJlIHdlIHNob3VsZCBoYXZlIGEgc2VwYXJhdGUgImFtY2FuYmF0Y2gi IGNhbGwsIHRvIGxldCB0aGUgQU0KIAkgKiBkZWNpZGUgaWYgYmF0Y2hpbmcgaXMgc3VwcG9y dGVkIGRlcGVuZGluZyBvbiB0aGUgc2NhbiBkZXRhaWxzLgorCSAqCisJICogWFhYIERvIHRo aXMgYmVmb3JlIGluaXRpYWxpemluZyB4c19oZWFwZmV0Y2guIFdlIG9ubHkgdXNlIHN0cmVh bSByZWFkCisJICogQVBJIHdpdGggYmF0Y2hpbmcgZW5hYmxlZCAoc28gbm90IHdpdGggc3lz dGFibGUgc2NhbnMpLiBCdXQgbWF5YmUgd2UKKwkgKiBzaG91bGQgY2hhbmdlIHRoYXQsIGFu ZCBqdXN0IHVzZSBkaWZmZXJlbnQgY2FsbGJhY2tzIChvciBzb21ldGhpbmcKKwkgKiBsaWtl IHRoYXQpPwogCSAqLwogCWlmICgoaW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0 Y2ggIT0gTlVMTCkgJiYKIAkJZW5hYmxlX2JhdGNoaW5nICYmCiAJCWVuYWJsZV9pbmRleHNj YW5fYmF0Y2hpbmcpCiAJewogCQlpbmRleF9iYXRjaF9pbml0KHNjYW4pOworCisJCS8qIGlu aXRpYWxpemUgc3RyZWFtICovCisJCXJzID0gcmVhZF9zdHJlYW1fYmVnaW5fcmVsYXRpb24o UkVBRF9TVFJFQU1fREVGQVVMVCwKKwkJCQkJCQkJCQlOVUxMLAorCQkJCQkJCQkJCWhlYXBS ZWxhdGlvbiwKKwkJCQkJCQkJCQlNQUlOX0ZPUktOVU0sCisJCQkJCQkJCQkJaW5kZXhfc2Nh bl9zdHJlYW1fcmVhZF9uZXh0LAorCQkJCQkJCQkJCXNjYW4sCisJCQkJCQkJCQkJMCk7CiAJ fQogCisJLyogcHJlcGFyZSB0byBmZXRjaCBpbmRleCBtYXRjaGVzIGZyb20gdGFibGUgKi8K KwlzY2FuLT54c19oZWFwZmV0Y2ggPSB0YWJsZV9pbmRleF9mZXRjaF9iZWdpbihoZWFwUmVs YXRpb24sIHJzKTsKKwogCXJldHVybiBzY2FuOwogfQogCkBAIC00MDAsNyArNDU2LDEyIEBA IGluZGV4X3Jlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sCiAKIAkvKiBSZWxlYXNlIHJlc291 cmNlcyAobGlrZSBidWZmZXIgcGlucykgZnJvbSB0YWJsZSBhY2Nlc3NlcyAqLwogCWlmIChz Y2FuLT54c19oZWFwZmV0Y2gpCisJeworCQlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoLT5ycykK KwkJCXJlYWRfc3RyZWFtX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaC0+cnMpOworCiAJCXRh YmxlX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CisJfQogCiAJc2Nh bi0+a2lsbF9wcmlvcl90dXBsZSA9IGZhbHNlOyAvKiBmb3Igc2FmZXR5ICovCiAJc2Nhbi0+ eHNfaGVhcF9jb250aW51ZSA9IGZhbHNlOwpAQCAtNDI0LDYgKzQ4NSw4IEBAIGluZGV4X3Jl c2NhbihJbmRleFNjYW5EZXNjIHNjYW4sCiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKgkJaW5k ZXhfZW5kc2NhbiAtIGVuZCBhIHNjYW4KICAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBG SVhNRSBzaG91bGQgYWxzbyByZWxlYXNlIHRoZSBpbmRleCBiYXRjaD8KICAqLwogdm9pZAog aW5kZXhfZW5kc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCkBAIC00MzQsNiArNDk3LDExIEBA IGluZGV4X2VuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogCS8qIFJlbGVhc2UgcmVzb3Vy Y2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBmcm9tIHRhYmxlIGFjY2Vzc2VzICovCiAJaWYgKHNj YW4tPnhzX2hlYXBmZXRjaCkKIAl7CisJCWlmIChzY2FuLT54c19oZWFwZmV0Y2gtPnJzKQor CQl7CisJCQlyZWFkX3N0cmVhbV9lbmQoc2Nhbi0+eHNfaGVhcGZldGNoLT5ycyk7CisJCX0K KwogCQl0YWJsZV9pbmRleF9mZXRjaF9lbmQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKIAkJc2Nh bi0+eHNfaGVhcGZldGNoID0gTlVMTDsKIAl9CkBAIC00ODksMTYgKzU1NywzNSBAQCBpbmRl eF9yZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAKIAkvKiByZWxlYXNlIHJlc291cmNl cyAobGlrZSBidWZmZXIgcGlucykgZnJvbSB0YWJsZSBhY2Nlc3NlcyAqLwogCWlmIChzY2Fu LT54c19oZWFwZmV0Y2gpCisJeworCQlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoLT5ycykKKwkJ CXJlYWRfc3RyZWFtX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaC0+cnMpOworCiAJCXRhYmxl X2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CisJfQogCiAJc2Nhbi0+ a2lsbF9wcmlvcl90dXBsZSA9IGZhbHNlOyAvKiBmb3Igc2FmZXR5ICovCiAJc2Nhbi0+eHNf aGVhcF9jb250aW51ZSA9IGZhbHNlOwogCisJLyoKKwkgKiBSZXNldCB0aGUgY3VycmVudC9w cmVmZXRjaCBwb3NpdGlvbnMgaW4gdGhlIGJhdGNoLgorCSAqCisJICogWFhYIERvbmUgYmVm b3JlIGNhbGxpbmcgYW1nZXRiYXRjaCgpLCBzbyB0aGF0IGl0IHNlZXMgdGhlIGluZGV4ZXMg YXMKKwkgKiBpbnZhbGlkLCBiYXRjaCBhcyBlbXB0eSwgYW5kIGNhbiBhZGQgaXRlbXMuCisJ ICoKKwkgKiBYWFggVGhpcyBpcyBhIGJpdCB3ZWlyZC9mcmFnaWxlLgorCSAqLworCXNjYW4t PnhzX2JhdGNoLT5yZWFkUG9zLmluZGV4ID0gLTE7CisJc2Nhbi0+eHNfYmF0Y2gtPnN0cmVh bVBvcy5pbmRleCA9IC0xOworCisJLyogWFhYIGRvbid0IHJlc2V0IG5oZWFwdGlkcyBoZXJl LCBpdCBjb25mdXNlZCBhbXJlc3RycG9zICh3aGljaCBzZWVtcworCSAqIGEgYml0IHdlaXJk LCBpdCBzaG91bGRuJ3QgYmUgdGhlIGNhc2UgSSB0aGluaykgKi8KKwogCXNjYW4tPmluZGV4 UmVsYXRpb24tPnJkX2luZGFtLT5hbXJlc3RycG9zKHNjYW4pOwogCiAJLyoKIAkgKiBEb24n dCByZXNldCB0aGUgYmF0Y2ggaGVyZSAtIGFtcmVzdHJwb3Mgc2hvdWxkIGhhdmUgaGFzIGFs cmVhZHkgbG9hZGVkCi0JICogdGhlIG5ldyBiYXRjaCwgc28gZG9uJ3QgdGhyb3cgdGhhdCBh d2F5LgorCSAqIHRoZSBuZXcgYmF0Y2ggYW5kIHNldCB0aGUgY3Vyci9wcmVmZXRjaCBpbmRl eGVzLCBzbyBkb24ndCB0aHJvdyB0aGF0IGF3YXkuCiAJICovCiB9CiAKQEAgLTU4MSw3ICs2 NjgsMTIgQEAgaW5kZXhfcGFyYWxsZWxyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogCVND QU5fQ0hFQ0tTOwogCiAJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKKwl7CisJCWlmIChzY2Fu LT54c19oZWFwZmV0Y2gtPnJzKQorCQkJcmVhZF9zdHJlYW1fcmVzZXQoc2Nhbi0+eHNfaGVh cGZldGNoLT5ycyk7CisKIAkJdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbi0+eHNfaGVh cGZldGNoKTsKKwl9CiAKIAkvKiBhbXBhcmFsbGVscmVzY2FuIGlzIG9wdGlvbmFsOyBhc3N1 bWUgbm8tb3AgaWYgbm90IHByb3ZpZGVkIGJ5IEFNICovCiAJaWYgKHNjYW4tPmluZGV4UmVs YXRpb24tPnJkX2luZGFtLT5hbXBhcmFsbGVscmVzY2FuICE9IE5VTEwpCkBAIC02MDAsNiAr NjkyLDcgQEAgaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJlbGF0aW9uIGhlYXByZWwsIFJl bGF0aW9uIGluZGV4cmVsLCBpbnQgbmtleXMsCiB7CiAJU25hcHNob3QJc25hcHNob3Q7CiAJ SW5kZXhTY2FuRGVzYyBzY2FuOworCVJlYWRTdHJlYW0gICAqcnMgPSBOVUxMOwogCiAJQXNz ZXJ0KFJlbEZpbGVMb2NhdG9yRXF1YWxzKGhlYXByZWwtPnJkX2xvY2F0b3IsIHBzY2FuLT5w c19sb2NhdG9yKSk7CiAJQXNzZXJ0KFJlbEZpbGVMb2NhdG9yRXF1YWxzKGluZGV4cmVsLT5y ZF9sb2NhdG9yLCBwc2Nhbi0+cHNfaW5kZXhsb2NhdG9yKSk7CkBAIC02MTYsOSArNzA5LDYg QEAgaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJlbGF0aW9uIGhlYXByZWwsIFJlbGF0aW9u IGluZGV4cmVsLCBpbnQgbmtleXMsCiAJc2Nhbi0+aGVhcFJlbGF0aW9uID0gaGVhcHJlbDsK IAlzY2FuLT54c19zbmFwc2hvdCA9IHNuYXBzaG90OwogCi0JLyogcHJlcGFyZSB0byBmZXRj aCBpbmRleCBtYXRjaGVzIGZyb20gdGFibGUgKi8KLQlzY2FuLT54c19oZWFwZmV0Y2ggPSB0 YWJsZV9pbmRleF9mZXRjaF9iZWdpbihoZWFwcmVsKTsKLQogCS8qCiAJICogSWYgZXhwbGlj aXRseSByZXF1ZXN0ZWQgYW5kIHN1cHBvcnRlZCBieSBib3RoIHRoZSBpbmRleCBBTSBhbmQg dGhlCiAJICogcGxhbiwgaW5pdGlhbGl6ZSBiYXRjaGluZyBpbmZvLgpAQCAtNjM1LDggKzcy NSwyMCBAQCBpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwoUmVsYXRpb24gaGVhcHJlbCwgUmVs YXRpb24gaW5kZXhyZWwsIGludCBua2V5cywKIAkJZW5hYmxlX2luZGV4c2Nhbl9iYXRjaGlu ZykKIAl7CiAJCWluZGV4X2JhdGNoX2luaXQoc2Nhbik7CisKKwkJLyogaW5pdGlhbGl6ZSBz dHJlYW0gKi8KKwkJcnMgPSByZWFkX3N0cmVhbV9iZWdpbl9yZWxhdGlvbihSRUFEX1NUUkVB TV9ERUZBVUxULAorCQkJCQkJCQkJCU5VTEwsCisJCQkJCQkJCQkJaGVhcHJlbCwKKwkJCQkJ CQkJCQlNQUlOX0ZPUktOVU0sCisJCQkJCQkJCQkJaW5kZXhfc2Nhbl9zdHJlYW1fcmVhZF9u ZXh0LAorCQkJCQkJCQkJCXNjYW4sCisJCQkJCQkJCQkJMCk7CiAJfQogCisJLyogcHJlcGFy ZSB0byBmZXRjaCBpbmRleCBtYXRjaGVzIGZyb20gdGFibGUgKi8KKwlzY2FuLT54c19oZWFw ZmV0Y2ggPSB0YWJsZV9pbmRleF9mZXRjaF9iZWdpbihoZWFwcmVsLCBycyk7CisKIAlyZXR1 cm4gc2NhbjsKIH0KIApAQCAtNjc2LDMxICs3NzgsMTYgQEAgaW5kZXhfZ2V0bmV4dF90aWQo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIGJhdGNoX2xv YWRlZDoKIAkJLyogVHJ5IGdldHRpbmcgYSBUSUQgZnJvbSB0aGUgY3VycmVudCBiYXRjaCAo aWYgd2UgaGF2ZSBvbmUpLiAqLwogCQl3aGlsZSAoaW5kZXhfYmF0Y2hfZ2V0bmV4dF90aWQo c2NhbiwgZGlyZWN0aW9uKSAhPSBOVUxMKQotCQl7Ci0JCQkvKgotCQkJICogV2UndmUgc3Vj Y2Vzc2Z1bGx5IGxvYWRlZCBhIFRJRCBmcm9tIHRoZSBiYXRjaCwgc28gaXNzdWUKLQkJCSAq IHByZWZldGNoZXMgZm9yIGZ1dHVyZSBUSURzIGlmIG5lZWRlZC4KLQkJCSAqLwotCQkJaW5k ZXhfYmF0Y2hfcHJlZmV0Y2goc2NhbiwgZGlyZWN0aW9uKTsKLQogCQkJcmV0dXJuICZzY2Fu LT54c19oZWFwdGlkOwotCQl9CiAKIAkJLyoKIAkJICogV2UgZWl0aGVyIGRvbid0IGhhdmUg YW55IGJhdGNoIHlldCwgb3Igd2UndmUgYWxyZWFkeSBwcm9jZXNzZWQKIAkJICogYWxsIGl0 ZW1zIGZyb20gdGhlIGN1cnJlbnQgYmF0Y2guIFRyeSBsb2FkaW5nIHRoZSBuZXh0IG9uZS4K IAkJICoKLQkJICogSWYgd2Ugc3VjY2VlZCwgaXNzdWUgcHJlZmV0Y2hlcyAodXNpbmcgdGhl IGN1cnJlbnQgcHJlZmV0Y2gKLQkJICogZGlzdGFuY2Ugd2l0aG91dCByYW1wIHVwKSwgYW5k IHRoZW4gZ28gYmFjayB0byByZXR1cm5pbmcgdGhlCi0JCSAqIFRJRHMgZnJvbSB0aGUgYmF0 Y2guCi0JCSAqCiAJCSAqIFhYWCBNYXliZSBkbyB0aGlzIGFzIGEgc2ltcGxlIHdoaWxlL2Zv ciBsb29wIHdpdGhvdXQgdGhlIGdvdG8uCiAJCSAqLwogCQlpZiAoaW5kZXhfYmF0Y2hfZ2V0 bmV4dChzY2FuLCBkaXJlY3Rpb24pKQotCQl7Ci0JCQlpbmRleF9iYXRjaF9wcmVmZXRjaChz Y2FuLCBkaXJlY3Rpb24pOwogCQkJZ290byBiYXRjaF9sb2FkZWQ7Ci0JCX0KIAogCQlyZXR1 cm4gTlVMTDsKIAl9CkBAIC03MjIsNyArODA5LDEyIEBAIGJhdGNoX2xvYWRlZDoKIAl7CiAJ CS8qIHJlbGVhc2UgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBmcm9tIHRhYmxlIGFj Y2Vzc2VzICovCiAJCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCisJCXsKKwkJCWlmIChzY2Fu LT54c19oZWFwZmV0Y2gtPnJzKQorCQkJCXJlYWRfc3RyZWFtX3Jlc2V0KHNjYW4tPnhzX2hl YXBmZXRjaC0+cnMpOworCiAJCQl0YWJsZV9pbmRleF9mZXRjaF9yZXNldChzY2FuLT54c19o ZWFwZmV0Y2gpOworCQl9CiAKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtNzgzLDcgKzg3NSw3 IEBAIGluZGV4X2ZldGNoX2hlYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUdXBsZVRhYmxlU2xv dCAqc2xvdCkKIAkJCS8qIGJhdGNoIGNhc2UgLSByZWNvcmQgdGhlIGtpbGxlZCB0dXBsZSBp biB0aGUgYmF0Y2ggKi8KIAkJCWlmIChzY2FuLT54c19iYXRjaC0+bktpbGxlZEl0ZW1zIDwg c2Nhbi0+eHNfYmF0Y2gtPm1heFNpemUpCiAJCQkJc2Nhbi0+eHNfYmF0Y2gtPmtpbGxlZEl0 ZW1zW3NjYW4tPnhzX2JhdGNoLT5uS2lsbGVkSXRlbXMrK10KLQkJCQkJPSBzY2FuLT54c19i YXRjaC0+Y3VyckluZGV4OworCQkJCQk9IHNjYW4tPnhzX2JhdGNoLT5yZWFkUG9zLmluZGV4 OwogCQl9CiAJfQogCkBAIC0xMzI4LDk4ICsxNDIwLDI1MiBAQCBBc3NlcnRDaGVja0JhdGNo SW5mbyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJICogVGhlIGN1cnJlbnQgaXRlbSBtdXN0IGJl IGJldHdlZW4gLTEgYW5kIG5oZWFwdGlkcy4gVGhvc2UgdHdvIGV4dHJlbWUKIAkgKiB2YWx1 ZXMgYXJlIHN0YXJ0aW5nIHBvaW50cyBmb3IgZm9yd2FyZC9iYWNrd2FyZCBzY2Fucy4KIAkg Ki8KLQlBc3NlcnQoKHNjYW4tPnhzX2JhdGNoLT5jdXJySW5kZXggPj0gLTEpICYmCi0JCSAg IChzY2FuLT54c19iYXRjaC0+Y3VyckluZGV4IDw9IHNjYW4tPnhzX2JhdGNoLT5uaGVhcHRp ZHMpKTsKLQotCS8qIGNoZWNrIHByZWZldGNoIGRhdGEgKi8KLQlBc3NlcnQoKHNjYW4tPnhz X2JhdGNoLT5wcmVmZXRjaFRhcmdldCA+PSAwKSAmJgotCQkgICAoc2Nhbi0+eHNfYmF0Y2gt PnByZWZldGNoVGFyZ2V0IDw9IHNjYW4tPnhzX2JhdGNoLT5wcmVmZXRjaE1heGltdW0pKTsK KwlBc3NlcnQoKHNjYW4tPnhzX2JhdGNoLT5yZWFkUG9zLmluZGV4ID49IC0xKSAmJgorCQkg ICAoc2Nhbi0+eHNfYmF0Y2gtPnJlYWRQb3MuaW5kZXggPD0gc2Nhbi0+eHNfYmF0Y2gtPm5o ZWFwdGlkcykpOwogCi0JQXNzZXJ0KChzY2FuLT54c19iYXRjaC0+cHJlZmV0Y2hJbmRleCA+ PSAtMSkgJiYKLQkJICAgKHNjYW4tPnhzX2JhdGNoLT5wcmVmZXRjaEluZGV4IDw9IHNjYW4t PnhzX2JhdGNoLT5uaGVhcHRpZHMpKTsKKwlBc3NlcnQoKHNjYW4tPnhzX2JhdGNoLT5zdHJl YW1Qb3MuaW5kZXggPj0gLTEpICYmCisJCSAgIChzY2FuLT54c19iYXRjaC0+c3RyZWFtUG9z LmluZGV4IDw9IHNjYW4tPnhzX2JhdGNoLT5uaGVhcHRpZHMpKTsKIAogCWZvciAoaW50IGkg PSAwOyBpIDwgc2Nhbi0+eHNfYmF0Y2gtPm5oZWFwdGlkczsgaSsrKQogCQlBc3NlcnQoSXRl bVBvaW50ZXJJc1ZhbGlkKCZzY2FuLT54c19iYXRjaC0+aGVhcHRpZHNbaV0pKTsKICNlbmRp ZgogfQogCi0vKiBJcyB0aGUgYmF0Y2ggZnVsbCAoVElEcyB1cCB0byBjYXBhY2l0eSk/ICov Ci0jZGVmaW5lCUlOREVYX0JBVENIX0lTX0ZVTEwoc2NhbikJXAotCSgoc2NhbiktPnhzX2Jh dGNoLT5uaGVhcHRpZHMgPT0gKHNjYW4pLT54c19iYXRjaC0+Y3VyclNpemUpCisvKgorICog aW5kZXhfYmF0Y2hfcG9zX2FkdmFuY2UKKyAqCQlBZHZhbmNlIHRoZSBwb3NpdGlvbiB0byB0 aGUgbmV4dCBpdGVtLCBkZXBlbmRpbmcgb24gc2NhbiBkaXJlY3Rpb24uCisgKgorICogWFhY IFdlIGV4cGVjdCB0byBvbmx5IGRvIHRoaXMgd2hlbiB0aGUgYWR2YW5jZSBpcyBwb3NzaWJs ZS92YWxpZC4KKyAqCisgKiBYWFggV291bGQgYmUgbmljZSB0byBoYXZlIGFuIGFzc2VydCB0 aGF0IHRoZSBmaW5hbCBwb3NpdGlvbiBpcyB2YWxpZCwKKyAqIGJ1dCB0aGF0IHJlcXVpcmVz IGtub3dpbmcgbmhlYXB0aWRzLgorICovCitzdGF0aWMgaW50CitpbmRleF9iYXRjaF9wb3Nf YWR2YW5jZShJbmRleFNjYW5CYXRjaFBvcyAqcG9zLCBTY2FuRGlyZWN0aW9uIGRpcikKK3sK KwlpZiAocG9zLT5yZXN0b3JlZCkKKwl7CisJCXBvcy0+cmVzdG9yZWQgPSBmYWxzZTsKKwkJ cmV0dXJuIHBvcy0+aW5kZXg7CisJfQogCi0vKiBJcyB0aGUgYmF0Y2ggZW1wdHkgKG5vIFRJ RHMpPyAqLwotI2RlZmluZQlJTkRFWF9CQVRDSF9JU19FTVBUWShzY2FuKQlcCi0JKChzY2Fu KS0+eHNfYmF0Y2gtPm5oZWFwdGlkcyA9PSAwKQorCS8qCisJICogV2UgdXBkYXRlIHRoZSBp bmRleCAiYmVmb3JlIiB0byBtb3ZlIHRvIHRoZSBuZXh0IGl0ZW0sIGJlY2F1c2UgdGhhdAor CSAqIG1ha2VzIHNjYW4gZGlyZWN0aW9uIGNoYW5nZXMgc2ltcGxlciB0byBoYW5kbGUgKHdl IGRvbid0IG5lZWQgdG8gdW5kbworCSAqIHRoZSBsYXN0IHVwZGF0ZSkuCisJICovCisJaWYg KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKKwkJcmV0dXJuICsrcG9zLT5pbmRleDsK KwllbHNlCisJCXJldHVybiAtLXBvcy0+aW5kZXg7Cit9CiAKIC8qCi0gKiBEaWQgd2UgcHJv Y2VzcyBhbGwgaXRlbXM/IEZvciBmb3J3YXJkIHNjYW4gaXQgbWVhbnMgdGhlIGluZGV4IHBv aW50cyB0byB0aGUKLSAqIGxhc3QgaXRlbSwgZm9yIGJhY2t3YXJkIHNjYW5zIGl0IGhhcyB0 byBwb2ludCB0byB0aGUgZmlyc3Qgb25lLgorICogaW5kZXhfYmF0Y2hfcG9zX3Jlc2V0Cisg KgkJUmVzZXQgdGhlIHBvc2l0aW9uIHRvIHRoZSBpbmRleCwgbWF5YmUgZGlzYWJsZSB1cGRh dGUgb24gZmlyc3QgYWR2YW5jZS4KICAqCi0gKiBUaGlzIGRvZXMgbm90IGNvdmVyIGVtcHR5 IGJhdGNoZXMgcHJvcGVybHksIGJlY2F1c2Ugb2YgYmFja3dhcmQgc2NhbnMuCisgKiBJbmRl eCBzcGVjaWZpZXMgdGhlIGl0ZW0gaW5kZXguIFRoZSAncmVzdG9yZWQnIGZsYWcgbWF5IGJl IHVzZWQgdG8gZGlzYWJsZQorICogdXBkYXRpbmcgdGhlIGluZGV4IG9uIHRoZSBmaXJzdCBh ZHZhbmNlLiBUaGlzIGlzIG5lZWRlZCBhZnRlciBtYXJrL3Jlc3RvcmUsCisgKiBiZWNhdXNl IHdlIHJlc3RvcmUgdG8gdGhlIGl0ZW0gd2UncmUgZXhwZWN0ZWQgdG8gcmV0dXJuIG5leHQs IHNvIHdlIG11c3QKKyAqIG5vdCBza2lwIGl0LgorICoKKyAqIFhYWCBXb3VsZCBiZSBuaWNl IHRvIGhhdmUgYW4gYXNzZXJ0IHRoYXQgdGhlIGZpbmFsIHBvc2l0aW9uIGlzIHZhbGlkLAor ICogYnV0IHRoYXQgcmVxdWlyZXMga25vd2luZyBuaGVhcHRpZHMuCiAgKi8KLSNkZWZpbmUJ SU5ERVhfQkFUQ0hfSVNfUFJPQ0VTU0VEKHNjYW4sIGRpcmVjdGlvbikJXAotCShTY2FuRGly ZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikgPyBcCi0JCSgoc2NhbiktPnhzX2JhdGNoLT5u aGVhcHRpZHMgPT0gKChzY2FuKS0+eHNfYmF0Y2gtPmN1cnJJbmRleCArIDEpKSA6IFwKLQkJ KChzY2FuKS0+eHNfYmF0Y2gtPmN1cnJJbmRleCA9PSAwKSkKK3N0YXRpYyB2b2lkCitpbmRl eF9iYXRjaF9wb3NfcmVzZXQoSW5kZXhTY2FuQmF0Y2hQb3MgKnBvcywgaW50IGluZGV4LCBi b29sIHJlc3RvcmVkKQoreworCXBvcy0+aW5kZXggPSBpbmRleDsKKwlwb3MtPnJlc3RvcmVk ID0gcmVzdG9yZWQ7Cit9CiAKIC8qCi0gKiBEb2VzIHRoZSBiYXRjaCBpdGVtcyBpbiB0aGUg cmVxdWVzdGVkIGRpcmVjdGlvbj8gVGhlIGJhdGNoIG11c3QgYmUgbm9uLWVtcHR5Ci0gKiBh bmQgd2Ugc2hvdWxkIG5vdCBoYXZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgYmF0Y2ggKGlu IHRoZSBkaXJlY3Rpb24pLgotICogQWxzbywgaWYgd2UganVzdCByZXN0b3JlZCB0aGUgcG9z aXRpb24gYWZ0ZXIgbWFyay9yZXN0b3JlLCB0aGVyZSBzaG91bGQgYmUKLSAqIGF0IGxlYXN0 IG9uZSBpdGVtIHRvIHByb2Nlc3MgKHdlIHdvbid0IGFkdmFuY2UgIG9uIHRoZSBuZXh0IGNh bGwpLgorICogaW5kZXhfYmF0Y2hfcmVzZXRfcG9zaXRpb25zCisgKgkJUmVzZXQgYm90aCBi YWNoIHBvc2l0aW9ucyAtIGJvdGggdGhlIHByb2Nlc3NpbmcgYW5kIHN0cmVhbQogICoKLSAq IFhYWCBUaGlzIGlzIGEgYml0IGNvbmZ1c2luZyAvIHVnbHksIHByb2JhYmx5IHNob3VsZCBy ZXRoaW5rIGhvdyB3ZSB0cmFjawotICogZW1wdHkgYmF0Y2hlcywgYW5kIGhvdyB3ZSBoYW5k bGUgbm90IGFkdmFuY2luZyBhZnRlciBhIHJlc3RvcmUuCisgKiBYWFggV291bGQgYmUgbmlj ZSB0byBjaGVjayB0aGUgc3RyZWFtIHBvc2l0aW9uIGlzIGFsd2F5cyAiYWhlYWQiIG9mIHRo ZQorICogcmVhZCBwb3NpdGlvbi4gVGhhdCByZXF1aXJlcyBrbm93aW5nIHRoZSBkaXJlY3Rp b24uCisgKi8KK3ZvaWQKK2luZGV4X2JhdGNoX3Jlc2V0X3Bvc2l0aW9ucyhJbmRleFNjYW5E ZXNjIHNjYW4sIGludCBpbmRleCwgYm9vbCByZXN0b3JlZCkKK3sKKwlpbmRleF9iYXRjaF9w b3NfcmVzZXQoJnNjYW4tPnhzX2JhdGNoLT5yZWFkUG9zLCBpbmRleCwgcmVzdG9yZWQpOwor CWluZGV4X2JhdGNoX3Bvc19yZXNldCgmc2Nhbi0+eHNfYmF0Y2gtPnN0cmVhbVBvcywgaW5k ZXgsIHJlc3RvcmVkKTsKK30KKworLyoKKyAqIGluZGV4X2JhdGNoX3Jlc2V0X2luZGV4ZXMK KyAqCQlyZXNldCBiYXRjaCBpbmRleGVzIChyZWFkL3N0cmVhbSkgZm9yIGEgZ2l2ZW4gc2Nh biBkaXJlY3Rpb24KKyAqCisgKiBBZnRlciBsb2FkaW5nIGEgbmV3IGJhdGNoLCB3ZSBuZWVk IHRvIHNldCBib3RoIGluZGV4ZXMsIHNvIHRoYXQgd2UKKyAqIGFkdmFuY2UgdG8gdGhlIGZp cnN0IGl0ZW0gb24gdGhlIG5leHQgY2FsbC4gVGhpcyBkZXBlbmRzIG9uIHRoZSBzY2FuCisg KiBkaXJlY3Rpb24gLSBmb3IgZm9yd2FyZCBzY2FucyB3ZSB3YW50IHRvIHByb2NlZWQgdG8g dGhlIGZpcnN0IGl0ZW0KKyAqICh3aXRoIGluZGV4IDApLCBzbyB3ZSBzZXQgLTEuIEZvciBi YWNrd2FyZCBzY2FucyB3ZSB3YW50IHRvIHByb2NlZWQKKyAqIHRvIHRoZSBsYXN0IGl0ZW0g KHdpdGggaW5kZXggKG5oZWFwdGlkcy0xKSksIHNvIHdlIHNldCBuaGVhcHRpZHMuCisgKgor ICogWFhYIEl0J3MgbGVnYWwgdG8gY2FsbCBsdGhpcyB3aXRoIHJlc2V0SW5kZXhlcz1mYWxz ZSwgYnV0IGluIHRoYXQgY2FzZQorICogdGhlIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4KICAq LwotI2RlZmluZSBJTkRFWF9CQVRDSF9IQVNfSVRFTVMoc2NhbiwgZGlyZWN0aW9uKSBcCi0J KCFJTkRFWF9CQVRDSF9JU19FTVBUWShzY2FuKSAmJiAoIUlOREVYX0JBVENIX0lTX1BST0NF U1NFRChzY2FuLCBkaXJlY3Rpb24pIHx8IHNjYW4tPnhzX2JhdGNoLT5yZXN0b3JlZCkpCitz dGF0aWMgdm9pZAoraW5kZXhfYmF0Y2hfcmVzZXRfaW5kZXhlcyhJbmRleFNjYW5EZXNjIHNj YW4pCit7CisJLyogYmFpbCBvdXQgaWYgbm8gaW5kZXggbmVlZGVkICovCisJaWYgKCFzY2Fu LT54c19iYXRjaC0+cmVzZXRJbmRleGVzKQorCQlyZXR1cm47CiAKKwkvKgorCSAqIFJlc2V0 IHRoZSByZWFkIHN0cmVhbSB0b28sIGlmIHdlIGhhdmUgb25lLgorCSAqCisJICogWFhYIE5v dCBzdXJlIGlmIHRoaXMgaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGRvIHRoaXMuIEl0IGRvZXMg bm90IGh1cnQsCisJICogd2UgcmVhbGx5IHdhbnQgdG8gc3RhcnQgd2l0aCBhIG5ldyBzdHJl YW0uIEJ1dCBtYXliZSBpdCdkIGJlIG1vcmUKKwkgKiBsb2dpY2FsIHRvIHJlc2V0IHRoZSBz dHJlYW0gZnJvbSB0aGUgY2FsbGVyLCBub3QgZnJvbSBoZXJlLgorCSAqLworCWlmIChzY2Fu LT54c19oZWFwZmV0Y2gpCisJeworCQlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoLT5ycykKKwkJ CXJlYWRfc3RyZWFtX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaC0+cnMpOworCX0KIAotLyog LS0tLS0tLS0tLS0tLS0tLQotICoJCWluZGV4X2JhdGNoX2dldG5leHQgLSBnZXQgdGhlIG5l eHQgYmF0Y2ggb2YgVElEcyBmcm9tIGEgc2NhbgorCS8qIHNldCBpbmRleGVzIGludG8gInN0 YXJ0aW5nIiBwb3NpdGlvbiBkZXBlbmRpbmcgb24gc2NhbiBkaXJlY3Rpb24gKi8KKwlpZiAo U2NhbkRpcmVjdGlvbklzRm9yd2FyZChzY2FuLT54c19iYXRjaC0+ZGlyKSkKKwl7CisJCWlu ZGV4X2JhdGNoX3Bvc19yZXNldCgmc2Nhbi0+eHNfYmF0Y2gtPnJlYWRQb3MsIC0xLCBmYWxz ZSk7CisJCWluZGV4X2JhdGNoX3Bvc19yZXNldCgmc2Nhbi0+eHNfYmF0Y2gtPnN0cmVhbVBv cywgLTEsIGZhbHNlKTsKKwl9CisJZWxzZQorCXsKKwkJaW5kZXhfYmF0Y2hfcG9zX3Jlc2V0 KCZzY2FuLT54c19iYXRjaC0+cmVhZFBvcywKKwkJCQkJCQkgIHNjYW4tPnhzX2JhdGNoLT5u aGVhcHRpZHMsIGZhbHNlKTsKKwkJaW5kZXhfYmF0Y2hfcG9zX3Jlc2V0KCZzY2FuLT54c19i YXRjaC0+c3RyZWFtUG9zLAorCQkJCQkJCSAgc2Nhbi0+eHNfYmF0Y2gtPm5oZWFwdGlkcywg ZmFsc2UpOworCX0KKworCXNjYW4tPnhzX2JhdGNoLT5yZXNldEluZGV4ZXMgPSBmYWxzZTsK K30KKworLyoKKyAqIGluZGV4X3NjYW5fc3RyZWFtX3JlYWRfbmV4dAorICoJCXJldHVybiB0 aGUgbmV4dCBibG9jayB0byBwYXNzIHRvIHRoZSByZWFkIHN0cmVhbQogICoKLSAqIFJldHVy bnMgdHJ1ZSBpZiB3ZSBtYW5hZ2VkIHRvIHJlYWQgYXQgbGVhc3Qgc29tZSBUSURzIGludG8g dGhlIGJhdGNoLAotICogb3IgZmFsc2UgaWYgdGhlcmUgYXJlIG5vIG1vcmUgVElEcyBpbiB0 aGUgc2Nhbi4gVGhlIHhzX2hlYXB0aWRzIGFuZAotICogeHNfbmhlYXB0aWRzIGZpZWxkcyBj b250YWluIHRoZSBUSURTIGFuZCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzLgorICogVGhpcyBh c3N1bWVzIHRoZSAiY3VycmVudCIgc2NhbiBkaXJlY3Rpb24sIHJlcXVlc3RlZCBieSB0aGUg Y2FsbGVyLiBJZgorICogdGhhdCBjaGFuZ2VzIGJlZm9yZSBjb25zdW1pbmcgYWxsIGJ1ZmZl cnMsIHdlJ2xsIHJlc2V0IHRoZSBzdHJlYW0gYW5kCisgKiBzdGFydCBmcm9tIHNjcmF0Y2gu IFdoaWNoIG1heSBzZWVtIGluZWZmaWNpZW50LCBidXQgaXQncyBubyB3b3JzZSB0aGFuCisg KiB3aGF0IHdlIGRvIG5vdywgYW5kIGl0J3Mgbm90IGEgdmVyeSBjb21tb24gY2FzZS4KICAq Ci0gKiBYWFggVGhpcyBvbmx5IGxvYWRzIHRoZSBUSURzIGFuZCByZXNldHMgdGhlIHZhcmlv dXMgYmF0Y2ggZmllbGRzIHRvCi0gKiBmcmVzaCBzdGF0ZS4gSXQgZG9lcyBub3Qgc2V0IHhz X2hlYXB0aWQveHNfaXR1cC94c19oaXR1cCwgdGhhdCdzIHRoZQotICogcmVzcG9uc2liaWxp dHkgb2YgdGhlIGZvbGxvd2luZyBpbmRleF9iYXRjaF9nZXRuZXh0X3RpZCgpIGNhbGxzLgot ICogLS0tLS0tLS0tLS0tLS0tLQorICogVGhlIHNjYW4gZGlyZWN0aW9uIGNoYW5nZSBpcyBj aGVja2VkIC8gaGFuZGxlZCBlbHNld2hlcmUuCiAgKi8KLXN0YXRpYyBib29sCi1pbmRleF9i YXRjaF9nZXRuZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rp b24pCitzdGF0aWMgQmxvY2tOdW1iZXIKK2luZGV4X3NjYW5fc3RyZWFtX3JlYWRfbmV4dChS ZWFkU3RyZWFtICpzdHJlYW0sCisJCQkJCQkJdm9pZCAqY2FsbGJhY2tfcHJpdmF0ZV9kYXRh LAorCQkJCQkJCXZvaWQgKnBlcl9idWZmZXJfZGF0YSkKIHsKLQlib29sCQlmb3VuZDsKKwlp bnQJCQkJaW5kZXg7CisJSW5kZXhTY2FuRGVzYwlzY2FuID0gKEluZGV4U2NhbkRlc2MpIGNh bGxiYWNrX3ByaXZhdGVfZGF0YTsKIAotCVNDQU5fQ0hFQ0tTOwotCUNIRUNLX1NDQU5fUFJP Q0VEVVJFKGFtZ2V0YmF0Y2gpOworCS8qCisJICogWFhYIFdoYXQgc2hvdWxkIHdlIGRvIHdp dGhvdXQgYmF0Y2hpbmc/IEN1cnJlbnRseSB3ZSBzaG91bGQgbm90IGdldAorCSAqIGhlcmUg d2l0aG91dCBiYXRjaGluZywgYmVjYXVzZSB3ZSBmYWxsIGJhY2sgdG8gdGhlIHJlZ3VsYXIg YnVmZmVyCisJICogcmVhZHMgKHdpdGhvdXQgc3RyZWFtIHJlYWQgQVBJKSBpbiB0aGF0IGNh c2UuIEJ1dCBpcyB0aGF0IHdoYXQgd2UKKwkgKiB3YW50IHRvIGRvIGluIHRoZSBmdXR1cmU/ CisJICoKKwkgKiBNYXliZSB0aGUgcmlnaHQgc29sdXRpb24gd291bGQgYmUgdG8ganVzdCB1 c2UgcmVhZCBzdHJlYW0gQVBJLCBidXQKKwkgKiBvbmx5IHJlYWQgdGhlIG9uZSBibG9jayBh aGVhZCwgYmVjYXVzZSB3ZSBjYW4ndCBrbm93IG1vcmUgdGhhbiB0aGF0LgorCSAqLworCUFz c2VydChzY2FuLT54c19iYXRjaCk7CiAKLQkvKiBYWFg6IHdlIHNob3VsZCBhc3NlcnQgdGhh dCBhIHNuYXBzaG90IGlzIHB1c2hlZCBvciByZWdpc3RlcmVkICovCi0JQXNzZXJ0KFRyYW5z YWN0aW9uSWRJc1ZhbGlkKFJlY2VudFhtaW4pKTsKKwlpZiAoIXNjYW4tPnhzX2JhdGNoKQkv KiBjYW4ndCBoYXBwZW4gcmlnaHQgbm93ICovCisJCWVsb2coRVJST1IsICJpbmRleF9zY2Fu X3N0cmVhbV9yZWFkX25leHQgY2FsbGVsZCB3aXRob3V0IGJhdGNoaW5nIik7CiAKLQkvKiBj b21wcmVoZW5zaXZlIGNoZWNrcyBvZiBiYXRjaGluZyBpbmZvICovCi0JQXNzZXJ0Q2hlY2tC YXRjaEluZm8oc2Nhbik7CisJLyoKKwkgKiBXZSBzaG91bGRuJ3QgZXZlciBnZXQgaGVyZSB3 aXRoIGFuIGVtcHR5IGJhdGNoLiBJbiB0aGF0IGNhc2Ugd2UgYmFpbAorCSAqIG91dCBhZnRl ciBpbmRleF9iYXRjaF9nZXRuZXh0KCksIGlmIGl0IGZpbmRzIG5vdGhpbmcuCisJICovCisJ QXNzZXJ0KCFJTkRFWF9CQVRDSF9JU19FTVBUWShzY2FuKSk7CiAKIAkvKgotCSAqIFdlIG5l dmVyIHJlYWQgYSBuZXcgYmF0Y2ggYmVmb3JlIHdlIHJ1biBvdXQgb2YgaXRlbXMgaW4gdGhl IGN1cnJlbnQKLQkgKiBvbmUuIFRoZSBjdXJyZW50IGJhdGNoIGhhcyB0byBiZSBlaXRoZXIg ZW1wdHkgb3Igd2UgcmFuIG91dCBvZiBpdGVtcwotCSAqIChpbiB0aGUgZ2l2ZW4gZGlyZWN0 aW9uKS4KKwkgKiBJdCBzaG91bGRuJ3QgYmUgcG9zc2libGUgdG8gaGF2ZSBib3RoIHRoZSBy ZXNldEluZGV4ZXMgYW5kIHJlc3RvcmVkCisJICogZmxhZ3Mgc2V0IGF0IHRoZSBzYW1lIHRp bWUuCisJICoKKwkgKiBYWFggQWRkIHRoaXMgY2hlY2sgdG8gQXNzZXJ0Q2hlY2tCYXRjaElu Zm8oKS4KIAkgKi8KLQlBc3NlcnQoIUlOREVYX0JBVENIX0hBU19JVEVNUyhzY2FuLCBkaXJl Y3Rpb24pKTsKKwlBc3NlcnQoIShzY2FuLT54c19iYXRjaC0+cmVzZXRJbmRleGVzICYmIHNj YW4tPnhzX2JhdGNoLT5yZWFkUG9zLnJlc3RvcmVkKSk7CiAKKwkvKgorCSAqIE1heWJlIHJl c2V0IGluZGV4ZXMsIGlmIHJlcXVlc3RlZC4KKwkgKgorCSAqIFhYWCBTaG91bGRuJ3QgdGhp cyBoYXBwZW4gcmlnaHQgYWZ0ZXIgbG9hZGluZyB0aGUgbmV4dCBiYXRjaCwgb3IgYWZ0ZXIK KwkgKiBjaGVja2luZyB0aGUgc2NhbiBkaXJlY3Rpb24/IFRoZW4gd2Ugc2hvdWxkIG5vdCBu ZWVkIHRvIGNhcmUgYWJvdXQKKwkgKiByZXNldEluZGV4ZXMgaGVyZS4KKwkgKi8KKwlpbmRl eF9iYXRjaF9yZXNldF9pbmRleGVzKHNjYW4pOworCisJLyoKKwkgKiBGaW5kIHRoZSBuZXh0 IGJsb2NrIHRvIHBhc3MgdG8gdGhlIHJlYWQgc3RyZWFtLiBXaXRoIHRoZSBjYWxsYmFjayB3 ZQorCSAqIG1heSBlbmQgdXAgc2tpcHBpbmcgc29tZSBvZiB0aGUgaXRlbXMsIHNvIGRvIGEg bG9vcCB1bnRpbCB3ZSBmaW5kIG9uZQorCSAqIG9yIHVudGlsIHdlIHJ1biBvdXQgb2YgaXRl bXMuCisJICoKKwkgKiBYWFggSXQncyBhIGJpdCB1bmZvcnR1bmF0ZSB0aGF0IHdlIG1heSBu ZWVkIHRvIHZpc2l0IG1hbnkgaXRlbXMgKGlmCisJICogdGhlIGNhbGxiYWNrIHJldHVybnMg ZmFsc2UgZm9yIG1hbnkgYmVmb3JlKSwgYXMgdGhhdCBtYXkgYmUgZXhwZW5zaXZlLgorCSAq IEZvciBleGFtcGxlIGZvciBJT1Mgd2UgbmVlZCB0byBjaGVjayB0aGUgdmlzaWJpbGl0eSBt YXAsIHdoaWNoIGlzIG5vdAorCSAqIGZyZWUgKGFsdGhvdWdoIG5vdCB0b28gZXhwZW5zaXZl IGVpdGhlcikuIEJ1dCB0aGF0J3Mgb25lIG9mIHRoZSByZXNvbnMKKwkgKiB3aHkgd2UgZ3Jv dyB0aGUgYmF0Y2ggc2l6ZSBncmFkdWFsbHkuCisJICoKKwkgKiBYWFggRG8gdGhlIHdoaWxl IGxvb3AgYmFzZWQgb24gImhhcyBpdGVtcyIsIHNvIHRoYXQgd2UgY2FuIGRvCisJICogQXNz ZXJ0Q2hlY2tWYWxpZEl0ZW0oKSBvbiB0aGUgcmVzdWx0LgorCSAqLworCXdoaWxlICh0cnVl KQorCXsKKwkJLyogQWR2YW5jZSB0aGUgc3RyZWFtIGluZGV4IGFzIG5lZWRlZC4gKi8KKwkJ aW5kZXggPSBpbmRleF9iYXRjaF9wb3NfYWR2YW5jZSgmc2Nhbi0+eHNfYmF0Y2gtPnN0cmVh bVBvcywKKwkJCQkJCQkJCQlzY2FuLT54c19iYXRjaC0+ZGlyKTsKKworCQkvKiBEaWQgd2Ug cnVuIG91dCBvZiBpdGVtcyBpbiB0aGUgY3VycmVudCBiYXRjaD8gKi8KKwkJaWYgKChpbmRl eCA8IDApIHx8IChpbmRleCA+PSBzY2FuLT54c19iYXRjaC0+bmhlYXB0aWRzKSkKKwkJCXJl dHVybiBJbnZhbGlkQmxvY2tOdW1iZXI7CisKKwkJLyoKKwkJICogSWYgZGVmaW5lZCwgaW52 b2tlIHRoZSBwcmVmZXRjaCBjYWxsYmFjayB0byBkZXRlcm1pbmUgaWYgd2Ugc2hvdWxkCisJ CSAqIGFjdHVhbGx5IHBhc3MgdGhpcyBibG9jayB0byB0aGUgcmVhZCBzdHJlYW0gKGUuZy4g dG8gcHJlZmV0Y2gpLgorCQkgKiBGb3IgZXhhbXBsZSBpbmRleC1vbmx5IHNjYW5zIHVzZSB0 aGlzIHRvIHNraXAgYWxsLXZpc2libGUgcGFnZXMuCisJCSAqLworCQlpZiAoc2Nhbi0+eHNf YmF0Y2gtPnByZWZldGNoQ2FsbGJhY2sgJiYKKwkJCSFzY2FuLT54c19iYXRjaC0+cHJlZmV0 Y2hDYWxsYmFjayhzY2FuLAorCQkJCQkJCQkJCQkgIHNjYW4tPnhzX2JhdGNoLT5wcmVmZXRj aEFyZ3VtZW50LAorCQkJCQkJCQkJCQkgIGluZGV4KSkKKwkJeworCQkJLyoKKwkJCSAqIFdl IGRvbid0IG5lZWQgdG8gcHJlZmV0Y2ggdGhpcyBpdGVtLCBidXQgd2UgbmVlZCB0byByZXR1 cm4KKwkJCSAqIHNvbWV0aGluZyB2YWxpZCAob3RoZXJ3aXNlIHRoZSBzdHJlYW0gd2lsbCB0 aGluayB3ZSdyZSBhdAorCQkJICogdGhlIGVuZCkuIFNvIHdlIGtlZXAgbG9va2luZyBmb3Ig dGhlIG5leHQgaXRlbSBpbiB0aGUgYmF0Y2guCisJCQkgKi8KKwkJCWNvbnRpbnVlOworCQl9 CisKKwkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBGSVhNRSBNYXliZSB3ZSBzaG91bGQgc3Rv cmUgdGhlIFRJRCBpbnRvIHRoZSBwZXJfYnVmZmVyX2RhdGEsIHNvIHRoYXQKKwkgKiB3ZSBj YW4gY3Jvc3MgY2hlY2sgd2UgZ290IHRoZSByaWdodCBidWZmZXIgbGF0ZXI/IEl0IHNlZW1z IHF1aXRlCisJICogZnJhZ2lsZSBhbmQgZWFzeSB0byBicmVhayB0aGUgZXhhY3Qgc2VxdWVu Y2UgaW4gc29tZSB3YXkuIFdlIGNvdWxkCisJICogcmV0dXJuIGEgZGlmZmVyZW50IGJsb2Nr IHdoaWNoIGhhcHBlbnMgdG8gaGF2ZSB0aGUgcmlnaHQgaXRlbSBJRHMuCisJICovCisKKwly ZXR1cm4gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcigmc2Nhbi0+eHNfYmF0Y2gtPmhlYXB0 aWRzW2luZGV4XSk7Cit9CisKKy8qIFhYWCBpc24ndCB0aGlzIHByZXR0eSBtdWNoIHRoZSBz YW1lIGFzIGluZGV4X2JhdGNoX3Jlc2V0PyAqLworc3RhdGljIHZvaWQKK2luZGV4X2JhdGNo X2VtcHR5KEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKIAkvKgogCSAqIFJlc2V0IHRoZSBjdXJy ZW50L3ByZWZldGNoIHBvc2l0aW9ucyBpbiB0aGUgYmF0Y2guCiAJICoKIAkgKiBYWFggRG9u ZSBiZWZvcmUgY2FsbGluZyBhbWdldGJhdGNoKCksIHNvIHRoYXQgaXQgc2VlcyB0aGUgaW5k ZXggYXMKIAkgKiBpbnZhbGlkLCBiYXRjaCBhcyBlbXB0eSwgYW5kIGNhbiBhZGQgaXRlbXMu Ci0JICoKLQkgKiBYWFggSW50ZW50aW9uYWxseSBkb2VzIG5vdCByZXNldCB0aGUgbmhlYXB0 aWRzLCBiZWNhdXNlIHRoZSBBTSBkb2VzCi0JICogcmVseSBvbiB0aGF0IHdoZW4gcHJvY2Vz c2luZyBraWxsZWQgdHVwbGVzLiBNYXliZSBzdG9yZSB0aGUga2lsbGVkCi0JICogdHVwbGVz IGRpZmZlcmVudGx5PwogCSAqLwotCXNjYW4tPnhzX2JhdGNoLT5jdXJySW5kZXggPSAtMTsK LQlzY2FuLT54c19iYXRjaC0+cHJlZmV0Y2hJbmRleCA9IDA7CisJc2Nhbi0+eHNfYmF0Y2gt PnJlYWRQb3MuaW5kZXggPSAtMTsKKwlzY2FuLT54c19iYXRjaC0+c3RyZWFtUG9zLmluZGV4 ID0gLTE7CiAJc2Nhbi0+eHNfYmF0Y2gtPm5oZWFwdGlkcyA9IDA7CiAKIAkvKgpAQCAtMTQz OCw2ICsxNjg0LDQ5IEBAIGluZGV4X2JhdGNoX2dldG5leHQoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAlzY2FuLT54c19oaXR1cCA9IE5VTEw7CiAK IAlNZW1vcnlDb250ZXh0UmVzZXQoc2Nhbi0+eHNfYmF0Y2gtPmN0eCk7Cit9CisKKy8qIC0t LS0tLS0tLS0tLS0tLS0KKyAqCQlpbmRleF9iYXRjaF9nZXRuZXh0IC0gZ2V0IHRoZSBuZXh0 IGJhdGNoIG9mIFRJRHMgZnJvbSBhIHNjYW4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgd2Ug bWFuYWdlZCB0byByZWFkIGF0IGxlYXN0IHNvbWUgVElEcyBpbnRvIHRoZSBiYXRjaCwKKyAq IG9yIGZhbHNlIGlmIHRoZXJlIGFyZSBubyBtb3JlIFRJRHMgaW4gdGhlIHNjYW4uIFRoZSB4 c19oZWFwdGlkcyBhbmQKKyAqIHhzX25oZWFwdGlkcyBmaWVsZHMgY29udGFpbiB0aGUgVElE UyBhbmQgdGhlIG51bWJlciBvZiBlbGVtZW50cy4KKyAqCisgKiBYWFggVGhpcyBvbmx5IGxv YWRzIHRoZSBUSURzIGFuZCByZXNldHMgdGhlIHZhcmlvdXMgYmF0Y2ggZmllbGRzIHRvCisg KiBmcmVzaCBzdGF0ZS4gSXQgZG9lcyBub3Qgc2V0IHhzX2hlYXB0aWQveHNfaXR1cC94c19o aXR1cCwgdGhhdCdzIHRoZQorICogcmVzcG9uc2liaWxpdHkgb2YgdGhlIGZvbGxvd2luZyBp bmRleF9iYXRjaF9nZXRuZXh0X3RpZCgpIGNhbGxzLgorICogLS0tLS0tLS0tLS0tLS0tLQor ICovCitzdGF0aWMgYm9vbAoraW5kZXhfYmF0Y2hfZ2V0bmV4dChJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCWJvb2wJCWZvdW5kOworCisJU0NB Tl9DSEVDS1M7CisJQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1nZXRiYXRjaCk7CisKKwkvKiBY WFg6IHdlIHNob3VsZCBhc3NlcnQgdGhhdCBhIHNuYXBzaG90IGlzIHB1c2hlZCBvciByZWdp c3RlcmVkICovCisJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKFJlY2VudFhtaW4pKTsK KworCS8qIGNvbXByZWhlbnNpdmUgY2hlY2tzIG9mIGJhdGNoaW5nIGluZm8gKi8KKwlBc3Nl cnRDaGVja0JhdGNoSW5mbyhzY2FuKTsKKworCS8qCisJICogV2UgbmV2ZXIgcmVhZCBhIG5l dyBiYXRjaCBiZWZvcmUgd2UgcnVuIG91dCBvZiBpdGVtcyBpbiB0aGUgY3VycmVudAorCSAq IG9uZS4gVGhlIGN1cnJlbnQgYmF0Y2ggaGFzIHRvIGJlIGVpdGhlciBlbXB0eSBvciB3ZSBy YW4gb3V0IG9mIGl0ZW1zCisJICogKGluIHRoZSBnaXZlbiBkaXJlY3Rpb24pLgorCSAqCisJ ICogWFhYIFdlIG1heSBhYmFuZG9uIGEgYmF0Y2ggYmVjYXVzZSBvZiBhIHJlc2NhbiwgYnV0 IHRoYXQgY291bnRzIGFzCisJICogYSBuZXcgc2NhbiAoYW5kIHdlIHJlc2V0IHRoZSBiYXRj aCBhbnl3YXkpLgorCSAqLworCUFzc2VydCghSU5ERVhfQkFUQ0hfSEFTX0lURU1TKHNjYW4s ICZzY2FuLT54c19iYXRjaC0+cmVhZFBvcywgZGlyZWN0aW9uKSk7CisKKwkvKgorCSAqIFJl c2V0IHRoZSBiYXRjaCBpbmZvIGVtcHR5IHN0YXRlLCBiZWZvcmUgY2FsbGluZyBhbWdldGJh dGNoKCksIHNvIHRoYXQKKwkgKiB0aGUgaW5kZXggQU0gc2VlcyBpdCBhcyByZWFkeSBmb3Ig bmV3IGRhdGEuCisJICovCisJaW5kZXhfYmF0Y2hfZW1wdHkoc2Nhbik7CiAKIAkvKgogCSAq IFRoZSBBTSdzIGFtZ2V0YmF0Y2ggcHJvYyBsb2FkcyBhIGNodW5rIG9mIFRJRHMgbWF0Y2hp bmcgdGhlIHNjYW4ga2V5cywKQEAgLTE0NTQsMzMgKzE3NDMsNDQgQEAgaW5kZXhfYmF0Y2hf Z2V0bmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQog CXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBmYWxzZTsKIAlzY2FuLT54c19oZWFwX2NvbnRp bnVlID0gZmFsc2U7CiAKLQkvKiBJZiB3ZSdyZSBvdXQgb2YgaW5kZXggZW50cmllcywgd2Un cmUgZG9uZSAqLworCS8qCisJICogSWYgd2UncmUgb3V0IG9mIGluZGV4IGVudHJpZXMsIHdl J3JlIGRvbmUKKwkgKgorCSAqIFhYWCBJcyB0aGlzIHRoZSByaWdodCBwbGFjZSB0byByZWxl YXNlIHJlc291cmNlcyB1bnJlbGF0ZWQgdG8gdGhlCisJICogYmF0Y2hpbmc/IE1heWJlIHRo YXQgc2hvdWxkIGhhcHBlbiBzb21ldGltZSBoaWdoZXIgLyBpbiB0aGUgY2FsbGVyPworCSAq LwogCWlmICghZm91bmQpCiAJewogCQkvKiByZWxlYXNlIHJlc291cmNlcyAobGlrZSBidWZm ZXIgcGlucykgZnJvbSB0YWJsZSBhY2Nlc3NlcyAqLwogCQlpZiAoc2Nhbi0+eHNfaGVhcGZl dGNoKQorCQl7CisJCQlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoLT5ycykKKwkJCQlyZWFkX3N0 cmVhbV9yZXNldChzY2FuLT54c19oZWFwZmV0Y2gtPnJzKTsKKwogCQkJdGFibGVfaW5kZXhf ZmV0Y2hfcmVzZXQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKKwkJfQogCiAJCXJldHVybiBmYWxz ZTsKIAl9CiAKKwkvKiByZXNldCBwb3NpdGlvbnMgKi8KKwlpZiAoU2NhbkRpcmVjdGlvbklz Rm9yd2FyZChkaXJlY3Rpb24pKQorCQlpbmRleF9iYXRjaF9yZXNldF9wb3NpdGlvbnMoc2Nh biwgLTEsIGZhbHNlKTsKKwllbHNlCisJCWluZGV4X2JhdGNoX3Jlc2V0X3Bvc2l0aW9ucyhz Y2FuLCBzY2FuLT54c19iYXRjaC0+bmhlYXB0aWRzLCBmYWxzZSk7CisKIAkvKiBXZSBzaG91 bGQgaGF2ZSBhIG5vbi1lbXB0eSBiYXRjaCB3aXRoIGl0ZW1zLiAqLwotCUFzc2VydChJTkRF WF9CQVRDSF9IQVNfSVRFTVMoc2NhbiwgZGlyZWN0aW9uKSk7CisJQXNzZXJ0KElOREVYX0JB VENIX0hBU19JVEVNUyhzY2FuLCAmc2Nhbi0+eHNfYmF0Y2gtPnJlYWRQb3MsIGRpcmVjdGlv bikpOwogCiAJcGdzdGF0X2NvdW50X2luZGV4X3R1cGxlcyhzY2FuLT5pbmRleFJlbGF0aW9u LCBzY2FuLT54c19iYXRjaC0+bmhlYXB0aWRzKTsKIAogCS8qCi0JICogU2V0IHRoZSBwcmVm ZXRjaCBpbmRleCB0byB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbG9hZGVkIGJhdGNoICh3ZSBl eHBlY3QKLQkgKiB0aGUgaW5kZXggQU0gdG8gc2V0IHRoYXQpLgotCSAqCi0JICogRklYTUUg TWF5YmUgc2V0IHRoZSBjdXJySW5kZXggaGVyZSwgbm90IGluIHRoZSBpbmRleCBBTS4gSXQg c2VlbXMgbXVjaAotCSAqIG1vcmUgbGlrZSBpbmRleGFtLmMgcmVzcG9uc2liaWxpdHkgcmF0 aGVyIHRoYW4gc29tZXRoaW5nIGV2ZXJ5IGluZGV4IEFNCi0JICogc2hvdWxkIGJlIGRvaW5n IChpbiBfYnRfZmlyc3RfYmF0Y2ggZXRjLikuCisJICogUmVtZW1iZXIgdGhlIGRpcmVjdGlv bi4KIAkgKgotCSAqIEZJWE1FIEl0J3MgYSBiaXQgdW5jbGVhciB3aG8gKGluZGV4YW0uYyBv ciB0aGUgaW5kZXggQU0pIGlzIHJlc3BvbnNpYmxlCi0JICogZm9yIHNldHRpbmcgd2hpY2gg ZmllbGRzLiBUaGlzIG5lZWRzIGNsYXJpZmljYXRpb24uCisJICogRklYTUUgYWxzbyBjaGVj ayBpdCBsYXRlciwgaXQgbWF5IGhhcHBlbiB0byBjaGFuZ2UgZm9yIGVhY2ggY2FsbAogCSAq LwotCXNjYW4tPnhzX2JhdGNoLT5wcmVmZXRjaEluZGV4ID0gc2Nhbi0+eHNfYmF0Y2gtPmN1 cnJJbmRleDsKKwlzY2FuLT54c19iYXRjaC0+ZGlyID0gZGlyZWN0aW9uOworCXNjYW4tPnhz X2JhdGNoLT5yZXNldEluZGV4ZXMgPSB0cnVlOwogCiAJLyoKIAkgKiBUcnkgdG8gaW5jcmVh c2UgdGhlIHNpemUgb2YgdGhlIGJhdGNoLiBJbnRlbnRpb25hbGx5IGRvbmUgYWZ0ZXIgdGhl IEFNCkBAIC0xNDkzLDYgKzE3OTMsMjMgQEAgaW5kZXhfYmF0Y2hfZ2V0bmV4dChJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQogCS8qIGNvbXByZWhlbnNp dmUgY2hlY2tzIG9mIGJhdGNoaW5nIGluZm8gKi8KIAlBc3NlcnRDaGVja0JhdGNoSW5mbyhz Y2FuKTsKIAorCS8qIHJlc2V0IHRoZSByZWFkIHN0cmVhbSBzbyB0aGF0IHdlIHJlYWQgdGhl IG5leHQgYmF0Y2ggKi8KKwlyZWFkX3N0cmVhbV9yZXNldChzY2FuLT54c19oZWFwZmV0Y2gt PnJzKTsKKworCS8qCisJICogUmVsZWFzZSByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMp IGZyb20gdGFibGUgYWNjZXNzZXMKKwkgKgorCSAqIFhYWCBOb3Qgc3VyZSB0aGlzIGlzIG5l ZWRlZCwgSSBtaWdodCBoYXZlIGFkZGVkIGl0IHdoaWxlIGNoYXNpbmcKKwkgKiBzb21lIHJl c291cmNlIGxlYWtzLgorCSAqLworCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCisJeworCQlp ZiAoc2Nhbi0+eHNfaGVhcGZldGNoLT5ycykKKwkJCXJlYWRfc3RyZWFtX3Jlc2V0KHNjYW4t PnhzX2hlYXBmZXRjaC0+cnMpOworCisJCXRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4t PnhzX2hlYXBmZXRjaCk7CisJfQorCiAJLyogUmV0dXJuIHRoZSBiYXRjaCBvZiBUSURzIHdl IGZvdW5kLiAqLwogCXJldHVybiB0cnVlOwogfQpAQCAtMTUxMiwzMyArMTgyOSw1MCBAQCBp bmRleF9iYXRjaF9nZXRuZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXJlY3Rpb24pCiBzdGF0aWMgSXRlbVBvaW50ZXIKIGluZGV4X2JhdGNoX2dldG5leHRfdGlk KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CisJaW50 CQlpbmRleDsKKworCS8qIHNob3VsZG4ndCBnZXQgaGVyZSB3aXRob3V0IGJhdGNoaW5nICov CisJQXNzZXJ0KHNjYW4tPnhzX2JhdGNoKTsKKwogCS8qIGNvbXByZWhlbnNpdmUgY2hlY2tz IG9mIGJhdGNoaW5nIGluZm8gKi8KIAlBc3NlcnRDaGVja0JhdGNoSW5mbyhzY2FuKTsKIAot CS8qCi0JICogQmFpbCBvdXQgaWYgaGUgYmF0Y2ggZG9lcyBub3QgaGF2ZSBtb3JlIGl0ZW1z IGluIHRoZSByZXF1ZXN0ZWQgZGlyZWN0aW8KLQkgKiAoZWl0aGVyIGVtcHR5IG9yIGV2ZXJ0 aGluZyBwcm9jZXNzZWQpLgotCSAqLwotCWlmICghSU5ERVhfQkFUQ0hfSEFTX0lURU1TKHNj YW4sIGRpcmVjdGlvbikpCi0JCXJldHVybiBOVUxMOworCS8qIFdlIHNob3VsZCBoYXZlIGhh bmRsZWQgY2hhbmdlIG9mIHNjYW4gZGlyZWN0aW9uIHNvbWV0aW1lIGVhcmxpZXIuICovCisJ aWYgKHNjYW4tPnhzX2JhdGNoLT5kaXIgIT0gZGlyZWN0aW9uKQorCXsKKwkJc2Nhbi0+eHNf YmF0Y2gtPmRpciA9IGRpcmVjdGlvbjsKKwkJc2Nhbi0+eHNfYmF0Y2gtPnN0cmVhbVBvcy5p bmRleCA9IHNjYW4tPnhzX2JhdGNoLT5yZWFkUG9zLmluZGV4OworCisJCWlmIChzY2FuLT54 c19oZWFwZmV0Y2gpCisJCXsKKwkJCWlmIChzY2FuLT54c19oZWFwZmV0Y2gtPnJzKQorCQkJ CXJlYWRfc3RyZWFtX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaC0+cnMpOworCQl9CisJfQor CisJLyogcmVzZXQgaW5kZXhlcyBpZiBuZWVkZWQgKi8KKwlpbmRleF9iYXRjaF9yZXNldF9p bmRleGVzKHNjYW4pOworCisJQXNzZXJ0KHNjYW4tPnhzX2JhdGNoLT5kaXIgPT0gZGlyZWN0 aW9uKTsKIAogCS8qCi0JICogQWR2YW5jZSB0byB0aGUgbmV4dCBiYXRjaCBpdGVtIC0gd2Ug a25vdyBpdCdzIG5vdCBlbXB0eSBhbmQgdGhlcmUgYXJlCi0JICogaXRlbXMgdG8gcHJvY2Vz cywgc28gdGhpcyBpcyB2YWxpZC4KKwkgKiBEb24ndCBjb250aW51ZS9hZHZhbmNlIGluZGV4 ZXMsIGlmIHRoZSBiYXRjaCBpcyBlbXB0eSwgb3RoZXJ3aXNlCisJICogd2UnZCBhZHZhbmNl IHRvIGJvZ3VzIGluZGV4IHZhbHVlcyBlLmcuIGFmdGVyIGNoYW5naW5nIHRoZSBzY2FuCisJ ICogZGlyZWN0aW9uLgogCSAqCi0JICogSG93ZXZlciwgZG9uJ3QgYWR2YW5jZSBpZiB0aGlz IGlzIHRoZSBmaXJzdCBnZXRuZXh0X3RpZCgpIGNhbGwgYWZ0ZXIKLQkgKiBhbXJlc3RycG9z KCkuIFRoYXQgc2V0cyB0aGUgcG9zaXRpb24gb24gdGhlIGNvcnJlY3QgaXRlbSwgYW5kIGFk dmFuY2luZwotCSAqIGhlcmUgd291bGQgc2tpcCBpdC4KLQkgKgotCSAqIFhYWCBUaGUgInJl c3RvcmVkIiBmbGFnIGlzIGEgYml0IHdlaXJkLiBDYW4gd2UgZG8gdGhpcyB3aXRob3V0IGl0 PyBNYXkKLQkgKiBuZWVkIHRvIHJldGhpbmsgd2hlbi9ob3cgd2UgYWR2YW5jZSB0aGUgYmF0 Y2ggaW5kZXguIE5vdCBzdXJlLgorCSAqIEZJWE1FIE5vdCBzdXJlIHRoaXMgaXMgdGhlIHJp Z2h0IHBsYWNlIHRvIGRvIHRoaXMgZGVjaXNpb24uIEl0IHNlZW1zCisJICogd2VpcmQgd2Ug cmVzZXQgdGhlIGRpcmVjdGlvbiBmaXJzdCwgZXRjLiBhbmQgb25seSB0aGVuIHJlYWxpemUg dGhlCisJICogYmF0Y2ggaXMgYWN0dWFsbHkgZW1wdHkuCiAJICovCi0JaWYgKHNjYW4tPnhz X2JhdGNoLT5yZXN0b3JlZCkKLQkJc2Nhbi0+eHNfYmF0Y2gtPnJlc3RvcmVkID0gZmFsc2U7 Ci0JZWxzZSBpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQotCQlzY2Fu LT54c19iYXRjaC0+Y3VyckluZGV4Kys7Ci0JZWxzZQotCQlzY2FuLT54c19iYXRjaC0+Y3Vy ckluZGV4LS07CisJaWYgKHNjYW4tPnhzX2JhdGNoLT5uaGVhcHRpZHMgPT0gMCkKKwkJcmV0 dXJuIE5VTEw7CisKKwkvKiBBZHZhbmNlIHRoZSBpbmRleCB0byB0aGUgaXRlbSB3ZSBuZWVk IHRvIGluIHRoZSBuZXh0IHJvdW5kLiAqLworCWluZGV4ID0gaW5kZXhfYmF0Y2hfcG9zX2Fk dmFuY2UoJnNjYW4tPnhzX2JhdGNoLT5yZWFkUG9zLCBkaXJlY3Rpb24pOworCisJLyogRGlk IHdlIHJ1biBvdXQgb2YgaXRlbXMgaW4gdGhlIGN1cnJlbnQgYmF0Y2g/ICovCisJaWYgKChp bmRleCA8IDApIHx8IChpbmRleCA+PSBzY2FuLT54c19iYXRjaC0+bmhlYXB0aWRzKSkKKwkJ cmV0dXJuIE5VTEw7CiAKIAkvKgogCSAqIE5leHQgVElEIGZyb20gdGhlIGJhdGNoLCBvcHRp b25hbGx5IGFsc28gdGhlIEluZGV4VHVwbGUvSGVhcFR1cGxlLgpAQCAtMTU0OSwxNCArMTg4 MywxNCBAQCBpbmRleF9iYXRjaF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyZWN0aW9uKQogCSAqIFhYWCBEbyB3ZSBuZWVkIHRvIHJlc2V0IHRo ZSBpdHVwcy9odHVwcyBhcnJheSBiZXR3ZWVuIGJhdGNoZXM/IERvZXNuJ3QKIAkgKiBzZWVt IG5lY2Vzc2FyeSwgYnV0IG1heWJlIHdlIGNvdWxkIGdldCBib2d1cyBkYXRhPwogCSAqLwot CXNjYW4tPnhzX2hlYXB0aWQgPSBzY2FuLT54c19iYXRjaC0+aGVhcHRpZHNbc2Nhbi0+eHNf YmF0Y2gtPmN1cnJJbmRleF07CisJc2Nhbi0+eHNfaGVhcHRpZCA9IHNjYW4tPnhzX2JhdGNo LT5oZWFwdGlkc1tpbmRleF07CiAJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKIAl7Ci0JCXNj YW4tPnhzX2l0dXAgPSBzY2FuLT54c19iYXRjaC0+aXR1cHNbc2Nhbi0+eHNfYmF0Y2gtPmN1 cnJJbmRleF07Ci0JCXNjYW4tPnhzX2hpdHVwID0gc2Nhbi0+eHNfYmF0Y2gtPmh0dXBzW3Nj YW4tPnhzX2JhdGNoLT5jdXJySW5kZXhdOworCQlzY2FuLT54c19pdHVwID0gc2Nhbi0+eHNf YmF0Y2gtPml0dXBzW2luZGV4XTsKKwkJc2Nhbi0+eHNfaGl0dXAgPSBzY2FuLT54c19iYXRj aC0+aHR1cHNbaW5kZXhdOwogCX0KIAotCXNjYW4tPnhzX3JlY2hlY2sgPSBzY2FuLT54c19i YXRjaC0+cmVjaGVja1tzY2FuLT54c19iYXRjaC0+Y3VyckluZGV4XTsKKwlzY2FuLT54c19y ZWNoZWNrID0gc2Nhbi0+eHNfYmF0Y2gtPnJlY2hlY2tbaW5kZXhdOwogCiAJLyoKIAkgKiBJ ZiB0aGVyZSBhcmUgb3JkZXItYnkgY2xhdXNlcywgcG9pbnQgdG8gdGhlIGFwcHJvcHJpYXRl IGNodW5rIGluIHRoZQpAQCAtMTU2NCw3ICsxODk4LDcgQEAgaW5kZXhfYmF0Y2hfZ2V0bmV4 dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAkg Ki8KIAlpZiAoc2Nhbi0+bnVtYmVyT2ZPcmRlckJ5cyA+IDApCiAJewotCQlpbnQJCQlpZHgg PSBzY2FuLT5udW1iZXJPZk9yZGVyQnlzICogc2Nhbi0+eHNfYmF0Y2gtPmN1cnJJbmRleDsK KwkJaW50CQkJaWR4ID0gc2Nhbi0+bnVtYmVyT2ZPcmRlckJ5cyAqIGluZGV4OwogCiAJCXNj YW4tPnhzX29yZGVyYnl2YWxzID0gJnNjYW4tPnhzX2JhdGNoLT5vcmRlcmJ5dmFsc1tpZHhd OwogCQlzY2FuLT54c19vcmRlcmJ5bnVsbHMgPSAmc2Nhbi0+eHNfYmF0Y2gtPm9yZGVyYnlu dWxsc1tpZHhdOwpAQCAtMTU3NiwxMjAgKzE5MTAsNiBAQCBpbmRleF9iYXRjaF9nZXRuZXh0 X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQogCXJl dHVybiAmc2Nhbi0+eHNfaGVhcHRpZDsKIH0KIAotLyogLS0tLS0tLS0tLS0tLS0tLQotICoJ CWluZGV4X2JhdGNoX3ByZWZldGNoIC0gcHJlZmV0Y2ggcGFnZXMgZm9yIFRJRHMgaW4gY3Vy cmVudCBiYXRjaAotICoKLSAqIFRoZSBwcmVmZXRjaCBkaXN0YW5jZSBpcyBpbmNyZWFzZWQg Z3JhZHVhbGx5LCBzaW1pbGFyIHRvIHdoYXQgd2UgZG8gZm9yCi0gKiBiaXRtYXAgaGVhcCBz Y2Fucy4gV2Ugc3RhcnQgZnJvbSBkaXN0YW5jZSAwIChubyBwcmVmZXRjaCksIGFuZCB0aGVu IGluIGVhY2gKLSAqIGl0ZXJhdGlvbiBpbmNyZW1lbnQgdGhlIGRpc3RhbmNlIHVwIHRvIHBy ZWZldGNoTWF4aW11bS4KLSAqCi0gKiBUaGUgcHJlZmV0Y2ggZGlzdGFuY2UgaXMgcmVzZXQg KHRvIDApIG9ubHkgb24gcmVzY2Fucywgbm90IGJldHdlZW4gYmF0Y2hlcy4KLSAqCi0gKiBJ dCdzIHBvc3NpYmxlIHRvIHByb3ZpZGUgYW4gaW5kZXhfcHJlZmV0Y2hfY2FsbGJhY2sgY2Fs bGJhY2ssIHRvIGFmZmVjdAotICogd2hpY2ggaXRlbXMgbmVlZCB0byBiZSBwcmVmZXRjaGVk LiBXaXRoIHByZWZldGNoX2NhbGxiYWNrPU5VTEwsIGFsbAotICogaXRlbXMgYXJlIHByZWZl dGNoZWQuIFdpdGggdGhlIGNhbGxiYWNrIHByb3ZpZGVkLCB0aGUgaXRlbSBpcyBwcmVmZXRj aGVkCi0gKiBpZmYgdGhlIGNhbGxiYWNrIGFuZCByZXR1cm5zIHRydWUuCi0gKgotICogVGhl ICJhcmciIGFyZ3VtZW50IGlzIHVzZWQgdG8gcGFzcyBhIHN0YXRlIGZvciB0aGUgcGxhbiBu b2RlIGludm9raW5nIHRoZQotICogZnVuY3Rpb24sIGFuZCBpcyB0aGVuIHBhc3NlZCB0byB0 aGUgY2FsbGJhY2suIFRoaXMgbWVhbnMgdGhlIGNhbGxiYWNrIGlzCi0gKiBzcGVjaWZpYyB0 byB0aGUgcGxhbiBzdGF0ZS4KLSAqCi0gKiBYWFggdGhlIHByZWZldGNoTWF4aW11bSBkZXBl bmRzIG9uIGVmZmVjdGl2ZV9pb19jb25jdXJyZW5jeSwgYW5kIGFsc28gb24KLSAqIHRhYmxl c3BhY2Ugb3B0aW9ucy4KLSAqCi0gKiBYWFggRm9yIGFjY2Vzc2VzIHRoYXQgY2hhbmdlIHNj YW4gZGlyZWN0aW9uLCB3ZSBtYXkgZG8gYSBsb3Qgb2YgdW5uZWNlc3NhcnkKLSAqIHByZWZl dGNoaW5nIChiZWNhdXNlIHdlIHdpbGwgcmUtaXNzdWUgcHJlZmV0Y2hlcyBmb3Igd2hhdCB3 ZSByZWNlbnRseSByZWFkKS4KLSAqIEknbSBub3Qgc3VyZSBpZiB0aGVyZSdzIGEgc2ltcGxl IHdheSB0byB0cmFjayB3aGF0IHdhcyBhbHJlYWR5IHByZWZldGNoZWQuCi0gKiBNYXliZSB3 ZSBjb3VsZCBjb3VudCBob3cgZmFyIHdlIGdvdCAoaW4gdGhlIGZvcndhcmQgZGlyZWN0aW9u KSwga2VlcCB0aGF0Ci0gKiBhcyBhIHdhdGVybWFyaywgYW5kIG5ldmVyIHByZWZldGNoIGFn YWluIGJlbG93IGl0LgotICoKLSAqIFhYWCBNYXliZSB3cmFwIHRoaXMgaW4gaWZkZWYgVVNF X1BSRUZFVENIPwotICogLS0tLS0tLS0tLS0tLS0tLQotICovCi1zdGF0aWMgdm9pZAotaW5k ZXhfYmF0Y2hfcHJlZmV0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp cmVjdGlvbikKLXsKLQlpbnQJCQlwcmVmZXRjaFN0YXJ0LAotCQkJCXByZWZldGNoRW5kOwot Ci0JSW5kZXhQcmVmZXRjaENhbGxiYWNrCXByZWZldGNoX2NhbGxiYWNrID0gc2Nhbi0+eHNf YmF0Y2gtPnByZWZldGNoQ2FsbGJhY2s7Ci0Jdm9pZCAqYXJnID0gc2Nhbi0+eHNfYmF0Y2gt PnByZWZldGNoQXJndW1lbnQ7Ci0KLQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJl Y3Rpb24pKQotCXsKLQkJLyogV2hlcmUgc2hvdWxkIHdlIHN0YXJ0IHRvIHByZWZldGNoPyAq LwotCQlwcmVmZXRjaFN0YXJ0ID0gTWF4KHNjYW4tPnhzX2JhdGNoLT5jdXJySW5kZXgsCi0J CQkJCQkJc2Nhbi0+eHNfYmF0Y2gtPnByZWZldGNoSW5kZXgpOwotCi0JCS8qCi0JCSAqIFdo ZXJlIHNob3VsZCB3ZSBzdG9wIHByZWZldGNoaW5nPyB0aGlzIGlzIHRoZSBmaXJzdCBpdGVt IHRoYXQgd2UgZG8KLQkJICogTk9UIHByZWZldGNoLCBpLmUuIGl0IGNhbiBiZSB0aGUgZmly c3QgaXRlbSBhZnRlciB0aGUgYmF0Y2guCi0JCSAqLwotCQlwcmVmZXRjaEVuZCA9IE1pbigo c2Nhbi0+eHNfYmF0Y2gtPmN1cnJJbmRleCArIDEpICsgc2Nhbi0+eHNfYmF0Y2gtPnByZWZl dGNoVGFyZ2V0LAotCQkJCQkJICBzY2FuLT54c19iYXRjaC0+bmhlYXB0aWRzKTsKLQotCQkv KiBGSVhNRSBzaG91bGQgY2FsY3VsYXRlIGluIGEgd2F5IHRvIG1ha2UgdGhpcyB1bm5lY2Vz c2FyeSAqLwotCQlwcmVmZXRjaFN0YXJ0ID0gTWF4KE1pbihwcmVmZXRjaFN0YXJ0LCBzY2Fu LT54c19iYXRjaC0+bmhlYXB0aWRzIC0gMSksIDApOwotCQlwcmVmZXRjaEVuZCA9IE1heChN aW4ocHJlZmV0Y2hFbmQsIHNjYW4tPnhzX2JhdGNoLT5uaGVhcHRpZHMgLSAxKSwgMCk7Ci0K LQkJLyogcmVtZW1iZXIgaG93IGZhciB3ZSBwcmVmZXRjaGVkIC8gd2hlcmUgdG8gc3RhcnQg dGhlIG5leHQgcHJlZmV0Y2ggKi8KLQkJc2Nhbi0+eHNfYmF0Y2gtPnByZWZldGNoSW5kZXgg PSBwcmVmZXRjaEVuZDsKLQl9Ci0JZWxzZQotCXsKLQkJLyogV2hlcmUgc2hvdWxkIHdlIHN0 YXJ0IHRvIHByZWZldGNoPyAqLwotCQlwcmVmZXRjaEVuZCA9IE1pbihzY2FuLT54c19iYXRj aC0+Y3VyckluZGV4LAotCQkJCQkJICBzY2FuLT54c19iYXRjaC0+cHJlZmV0Y2hJbmRleCk7 Ci0KLQkJLyoKLQkJICogV2hlcmUgc2hvdWxkIHdlIHN0b3AgcHJlZmV0Y2hpbmc/IHRoaXMg aXMgdGhlIGZpcnN0IGl0ZW0gdGhhdCB3ZSBkbwotCQkgKiBOT1QgcHJlZmV0Y2gsIGkuZS4g aXQgY2FuIGJlIHRoZSBmaXJzdCBpdGVtIGFmdGVyIHRoZSBiYXRjaC4KLQkJICovCi0JCXBy ZWZldGNoU3RhcnQgPSBNYXgoKHNjYW4tPnhzX2JhdGNoLT5jdXJySW5kZXggLSAxKSAtIHNj YW4tPnhzX2JhdGNoLT5wcmVmZXRjaFRhcmdldCwKLQkJCQkJCQktMSk7Ci0KLQkJLyogRklY TUUgc2hvdWxkIGNhbGN1bGF0ZSBpbiBhIHdheSB0byBtYWtlIHRoaXMgdW5uZWNlc3Nhcnkg Ki8KLQkJcHJlZmV0Y2hTdGFydCA9IE1heChNaW4ocHJlZmV0Y2hTdGFydCwgc2Nhbi0+eHNf YmF0Y2gtPm5oZWFwdGlkcyAtIDEpLCAwKTsKLQkJcHJlZmV0Y2hFbmQgPSBNYXgoTWluKHBy ZWZldGNoRW5kLCBzY2FuLT54c19iYXRjaC0+bmhlYXB0aWRzIC0gMSksIDApOwotCi0JCS8q IHJlbWVtYmVyIGhvdyBmYXIgd2UgcHJlZmV0Y2hlZCAvIHdoZXJlIHRvIHN0YXJ0IHRoZSBu ZXh0IHByZWZldGNoICovCi0JCXNjYW4tPnhzX2JhdGNoLT5wcmVmZXRjaEluZGV4ID0gcHJl ZmV0Y2hTdGFydDsKLQl9Ci0KLQkvKgotCSAqIEl0J3MgcG9zc2libGUgd2UgZ2V0IGludmVy dGVkIHByZWZldGNoIHJhbmdlIGFmdGVyIGEgcmVzdHJwb3MoKSBjYWxsLAotCSAqIGJlY2F1 c2Ugd2UgaW50ZW50aW9uYWxseSBkb24ndCByZXNldCB0aGUgcHJlZmV0Y2hJbmRleCAtIHdl IGRvbid0IHdhbnQKLQkgKiB0byBwcmVmZXRjaCBwYWdlcyBvdmVyIGFuZCBvdmVyIGluIHRo aXMgY2FzZS4gV2UnbGwgZG8gbm90aGluZyBpbiB0aGF0Ci0JICogY2FzZSwgZXhjZXB0IGZv ciB0aGUgQXNzZXJ0Q2hlY2tCYXRjaEluZm8oKS4KLQkgKgotCSAqIEZJWE1FIEkgc3VzcGVj dCB0aGlzIGFjdHVhbGx5IGRvZXMgbm90IHdvcmsgY29ycmVjdGx5IGlmIHdlIGNoYW5nZSB0 aGUKLQkgKiBkaXJlY3Rpb24sIGJlY2F1c2UgdGhlIHByZWZldGNoSW5kZXggd2lsbCBmbGlw IGJldHdlZW4gdHdvIGV4dHJlbWVzCi0JICogdGhhbmtzIHRvIHRoZSBNaW4vTWF4LgotCSAq LwotCi0JLyoKLQkgKiBJbmNyZWFzZSB0aGUgcHJlZmV0Y2ggZGlzdGFuY2UsIGJ1dCBub3Qg YmV5b25kIHByZWZldGNoTWF4aW11bS4gV2UKLQkgKiBpbnRlbnRpb25hbGx5IGRvIHRoaXMg YWZ0ZXIgY2FsY3VsYXRpbmcgc3RhcnQvZW5kLCBzbyB0aGF0IHdlIHN0YXJ0Ci0JICogYWN0 dWFsbHkgcHJlZmV0Y2hpbmcgb25seSBhZnRlciB0aGUgZmlyc3QgaXRlbS4KLQkgKi8KLQlz Y2FuLT54c19iYXRjaC0+cHJlZmV0Y2hUYXJnZXQgPSBNaW4oc2Nhbi0+eHNfYmF0Y2gtPnBy ZWZldGNoVGFyZ2V0ICsgMSwKLQkJCQkJCQkJCQkgc2Nhbi0+eHNfYmF0Y2gtPnByZWZldGNo TWF4aW11bSk7Ci0KLQkvKiBjb21wcmVoZW5zaXZlIGNoZWNrcyBvZiBiYXRjaGluZyBpbmZv ICovCi0JQXNzZXJ0Q2hlY2tCYXRjaEluZm8oc2Nhbik7Ci0KLQkvKiBmaW5hbGx5LCBkbyB0 aGUgYWN0dWFsIHByZWZldGNoaW5nICovCi0JZm9yIChpbnQgaSA9IHByZWZldGNoU3RhcnQ7 IGkgPCBwcmVmZXRjaEVuZDsgaSsrKQotCXsKLQkJLyogc2tpcCBibG9jayBpZiB0aGUgcHJv dmlkZWQgY2FsbGJhY2sgc2F5cyBzbyAqLwotCQlpZiAocHJlZmV0Y2hfY2FsbGJhY2sgJiYg IXByZWZldGNoX2NhbGxiYWNrKHNjYW4sIGFyZywgaSkpCi0JCQljb250aW51ZTsKLQotCQlQ cmVmZXRjaEJ1ZmZlcihzY2FuLT5oZWFwUmVsYXRpb24sIE1BSU5fRk9SS05VTSwKLQkJCQkJ ICAgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcigmc2Nhbi0+eHNfYmF0Y2gtPmhlYXB0aWRz W2ldKSk7Ci0JfQotfQotCiAvKgogICogaW5kZXhfYmF0Y2hfaW5pdAogICoJCUluaXRpYWxp emUgdmFyaW91cyBmaWVsZHMgLyBhcnJheXMgbmVlZGVkIGJ5IGJhdGNoaW5nLgpAQCAtMTcx NSwxNCArMTkzNSwyMSBAQCBpbmRleF9iYXRjaF9pbml0KEluZGV4U2NhbkRlc2Mgc2NhbikK IAlzY2FuLT54c19iYXRjaC0+aW5pdFNpemUgPSA4OwogCXNjYW4tPnhzX2JhdGNoLT5jdXJy U2l6ZSA9IHNjYW4tPnhzX2JhdGNoLT5pbml0U2l6ZTsKIAotCS8qIGluaXRpYWxpemUgcHJl ZmV0Y2hpbmcgaW5mbyAqLwotCXNjYW4tPnhzX2JhdGNoLT5wcmVmZXRjaE1heGltdW0gPQot CQlnZXRfdGFibGVzcGFjZV9pb19jb25jdXJyZW5jeShzY2FuLT5oZWFwUmVsYXRpb24tPnJk X3JlbC0+cmVsdGFibGVzcGFjZSk7Ci0Jc2Nhbi0+eHNfYmF0Y2gtPnByZWZldGNoVGFyZ2V0 ID0gMDsKLQlzY2FuLT54c19iYXRjaC0+cHJlZmV0Y2hJbmRleCA9IDA7CisJLyogaW5pdGlh bGl6ZSBwcmVmZXRjaGluZyBpbmZvIHRvIHNvbWUgYm9ndXMgdmFsdWVzICovCisJaW5kZXhf YmF0Y2hfcG9zX3Jlc2V0KCZzY2FuLT54c19iYXRjaC0+cmVhZFBvcywgLTEsIGZhbHNlKTsK KwlpbmRleF9iYXRjaF9wb3NfcmVzZXQoJnNjYW4tPnhzX2JhdGNoLT5zdHJlYW1Qb3MsIC0x LCBmYWxzZSk7CiAKLQkvKiAqLwotCXNjYW4tPnhzX2JhdGNoLT5jdXJySW5kZXggPSAtMTsK KwkvKgorCSAqIE1ha2Ugc3VyZSB0byByZXNldCBwcmVmZXRjaC9jdXJyZW50IGluZGV4ZXMg YmVmb3JlIHVzaW5nIHRoZW0gbGF0ZXIuCisJICogV2UgY2FuJ3QgZG8gdGhhdCBub3cgYmVj YXVzZSB3ZSBkb24ndCBrbm93IHRoZSBkaXJlY3Rpb24uCisJICovCisJc2Nhbi0+eHNfYmF0 Y2gtPnJlc2V0SW5kZXhlcyA9IHRydWU7CisKKwkvKgorCSAqIEZJWE1FIHNldCBsYXRlciwg d2hlbiB3ZSBhY3R1YWxseSBrbm93IGl0LiBPciBzaGFsbCB3ZSBhc3N1bWUgbW9zdAorCSAq IHNjYW5zIGFyZSAob3IgYXQgbGVzdCBzdGFydCkgZm9yd2FyZD8KKwkgKi8KKwlzY2FuLT54 c19iYXRjaC0+ZGlyID0gRm9yd2FyZFNjYW5EaXJlY3Rpb247CiAKIAkvKiBQcmVhbGxvY2F0 ZSB0aGUgbGFyZ2VzdCBhbGxvd2VkIGFycmF5IG9mIFRJRHMuICovCiAJc2Nhbi0+eHNfYmF0 Y2gtPm5oZWFwdGlkcyA9IDA7CkBAIC0xNzgwLDYgKzIwMDcsOSBAQCBpbmRleF9iYXRjaF9p bml0KEluZGV4U2NhbkRlc2Mgc2NhbikKICAqCiAgKiBGSVhNRSBBbm90aGVyIGJpdCBpbiBu ZWVkIG9mIGNsZWFudXAuIFRoZSBjdXJySW5kZXggZGVmYXVsdCAoLTEpIGlzIG5vdCBxdWl0 ZQogICogY29ycmVjdCwgYmVjYXVzZSBmb3IgYmFja3dhcmRzIHNjYW5zIGlzIHdyb25nLgor ICoKKyAqIFhYWCBJc24ndCB0aGlzIHRoZSBzYW1lIGFzIGluZGV4X2JhdGNoX2VtcHR5Pwor ICogWFhYIFNob3VsZCB0aGlzIHJlc2V0IHRoZSBiYXRjaCBtZW1vcnkgY29udGV4dCwgeHNf aXR1cCwgeHNfaGl0dXAsIGV0Yz8KICAqLwogc3RhdGljIHZvaWQKIGluZGV4X2JhdGNoX3Jl c2V0KEluZGV4U2NhbkRlc2Mgc2NhbikKQEAgLTE3ODksOSArMjAxOSw5IEBAIGluZGV4X2Jh dGNoX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbikKIAkJcmV0dXJuOwogCiAJc2Nhbi0+eHNf YmF0Y2gtPm5oZWFwdGlkcyA9IDA7Ci0Jc2Nhbi0+eHNfYmF0Y2gtPnByZWZldGNoSW5kZXgg PSAwOwotCXNjYW4tPnhzX2JhdGNoLT5jdXJySW5kZXggPSAtMTsKLQlzY2FuLT54c19iYXRj aC0+cmVzdG9yZWQgPSBmYWxzZTsKKwlpbmRleF9iYXRjaF9wb3NfcmVzZXQoJnNjYW4tPnhz X2JhdGNoLT5yZWFkUG9zLCAtMSwgZmFsc2UpOworCWluZGV4X2JhdGNoX3Bvc19yZXNldCgm c2Nhbi0+eHNfYmF0Y2gtPnN0cmVhbVBvcywgLTEsIGZhbHNlKTsKKwlzY2FuLT54c19iYXRj aC0+cmVzZXRJbmRleGVzID0gdHJ1ZTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idHJlZS5jCmluZGV4IGRiMGUyMmUwY2UyLi43MDgyZTdiZDM4MSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL25idHJlZS5jCkBAIC01MzIsMTAgKzUzMiwxMCBAQCBidG1hcmtwb3Mo SW5kZXhTY2FuRGVzYyBzY2FuKQogCWlmIChzY2FuLT54c19iYXRjaCkKIAl7CiAJCS8qIHRo ZSBpbmRleCBzaG91bGQgYmUgdmFsaWQgaW4gdGhlIGJhdGNoICovCi0JCUFzc2VydChzY2Fu LT54c19iYXRjaC0+Y3VyckluZGV4ID49IDApOwotCQlBc3NlcnQoc2Nhbi0+eHNfYmF0Y2gt PmN1cnJJbmRleCA8IHNjYW4tPnhzX2JhdGNoLT5uaGVhcHRpZHMpOworCQlBc3NlcnQoc2Nh bi0+eHNfYmF0Y2gtPnJlYWRQb3MuaW5kZXggPj0gMCk7CisJCUFzc2VydChzY2FuLT54c19i YXRjaC0+cmVhZFBvcy5pbmRleCA8IHNjYW4tPnhzX2JhdGNoLT5uaGVhcHRpZHMpOwogCi0J CXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IHNvLT5iYXRjaC5maXJzdEluZGV4ICsgc2Nhbi0+ eHNfYmF0Y2gtPmN1cnJJbmRleDsKKwkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gc28tPmJh dGNoLmZpcnN0SW5kZXggKyBzY2FuLT54c19iYXRjaC0+cmVhZFBvcy5pbmRleDsKIAl9CiAK IAkvKgpAQCAtNjAyLDcgKzYwMiw2IEBAIGJ0cmVzdHJwb3MoSW5kZXhTY2FuRGVzYyBzY2Fu KQogCiAJCQkJLyogbWFrZSBpdCBsb29rIGVtcHR5ICovCiAJCQkJc2Nhbi0+eHNfYmF0Y2gt Pm5oZWFwdGlkcyA9IDA7Ci0JCQkJc2Nhbi0+eHNfYmF0Y2gtPnByZWZldGNoSW5kZXggPSAt MTsKIAogCQkJCS8qCiAJCQkJICogWFhYIHRoZSBzY2FuIGRpcmVjdGlvbiBpcyBib2d1cyAv IG5vdCBpbXBvcnRhbnQuIEl0IGFmZmVjdHMKQEAgLTYyMSw4ICs2MjAsOSBAQCBidHJlc3Ry cG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAkJCSAqIFhYWCBUaGlzIGlzIGEgYml0IHdlaXJk LiBUaGVyZSBzaG91bGQgYmUgYSB3YXkgdG8gbm90IG5lZWQgdGhlCiAJCQkgKiAicmVzdG9y ZWQiIGZsYWcgSSB0aGluay4KIAkJCSAqLwotCQkJc2Nhbi0+eHNfYmF0Y2gtPmN1cnJJbmRl eCA9IChzby0+Y3VyclBvcy5pdGVtSW5kZXggLSBzby0+YmF0Y2guZmlyc3RJbmRleCk7Ci0J CQlzY2FuLT54c19iYXRjaC0+cmVzdG9yZWQgPSB0cnVlOworCQkJaW5kZXhfYmF0Y2hfcmVz ZXRfcG9zaXRpb25zKHNjYW4sCisJCQkJCQkJCQkJKHNvLT5jdXJyUG9zLml0ZW1JbmRleCAt IHNvLT5iYXRjaC5maXJzdEluZGV4KSwKKwkJCQkJCQkJCQl0cnVlKTsKIAkJfQogCX0KIAll bHNlCkBAIC02ODMsNyArNjgzLDYgQEAgYnRyZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4p CiAKIAkJCQkvKiBtYWtlIGl0IGxvb2sgZW1wdHkgKi8KIAkJCQlzY2FuLT54c19iYXRjaC0+ bmhlYXB0aWRzID0gMDsKLQkJCQlzY2FuLT54c19iYXRjaC0+cHJlZmV0Y2hJbmRleCA9IC0x OwogCiAJCQkJLyogWFhYIHRoZSBzY2FuIGRpcmVjdGlvbiBpcyBib2d1cyAqLwogCQkJCV9i dF9jb3B5X2JhdGNoKHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzbywgc3RhcnQsIGVu ZCk7CkBAIC02OTcsOCArNjk2LDkgQEAgYnRyZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4p CiAJCQkJICogWFhYIFRoaXMgaXMgYSBiaXQgd2VpcmQuIFRoZXJlIHNob3VsZCBiZSBhIHdh eSB0byBub3QgbmVlZAogCQkJCSAqIHRoZSAicmVzdG9yZWQiIGZsYWcgSSB0aGluay4KIAkJ CQkgKi8KLQkJCQlzY2FuLT54c19iYXRjaC0+Y3VyckluZGV4ID0gKHNvLT5jdXJyUG9zLml0 ZW1JbmRleCAtIHNvLT5iYXRjaC5maXJzdEluZGV4KTsKLQkJCQlzY2FuLT54c19iYXRjaC0+ cmVzdG9yZWQgPSB0cnVlOworCQkJCWluZGV4X2JhdGNoX3Jlc2V0X3Bvc2l0aW9ucyhzY2Fu LAorCQkJCQkJCQkJCQkoc28tPmN1cnJQb3MuaXRlbUluZGV4IC0gc28tPmJhdGNoLmZpcnN0 SW5kZXgpLAorCQkJCQkJCQkJCQl0cnVlKTsKIAkJCX0KIAkJfQogCQllbHNlCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYwppbmRleCAyMjE4MWJmMDI3Yi4uMWFlMTY0 YTk0YjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNo LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYwpAQCAtMTU2 NSwxNiArMTU2NSw2IEBAIF9idF9jb3B5X2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXIsIEJUU2Nhbk9wYXF1ZSBzbywKIAkJc3RhcnQrKzsKIAl9CiAKLQkv KgotCSAqIHNldCB0aGUgc3RhcnRpbmcgcG9pbnQKLQkgKgotCSAqIFhYWCBtaWdodCBiZSBi ZXR0ZXIgZG9uZSBpbiBpbmRleGFtLmMKLQkgKi8KLQlpZiAoU2NhbkRpcmVjdGlvbklzRm9y d2FyZChkaXIpKQotCQlzY2FuLT54c19iYXRjaC0+Y3VyckluZGV4ID0gLTE7Ci0JZWxzZQot CQlzY2FuLT54c19iYXRjaC0+Y3VyckluZGV4ID0gc2Nhbi0+eHNfYmF0Y2gtPm5oZWFwdGlk czsKLQogCS8qIHNob3VsZG4ndCBiZSBwb3NzaWJsZSB0byBlbmQgaGVyZSB3aXRoIGFuIGVt cHR5IGJhdGNoICovCiAJQXNzZXJ0KHNjYW4tPnhzX2JhdGNoLT5uaGVhcHRpZHMgPiAwKTsK IH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3Bnc2Nhbi5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGdzY2FuLmMKaW5kZXggNGI5Njg1MmMyOGMu LjA1ZmYyMjg1ODMwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3Nw Z3NjYW4uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3NjYW4uYwpAQCAt MTE0NSwxMyArMTE0NSw2IEBAIF9zcGdpc3RfY29weV9iYXRjaChJbmRleFNjYW5EZXNjIHNj YW4sIFNwR2lzdFNjYW5PcGFxdWUgc28sCiAJCXN0YXJ0Kys7CiAJfQogCi0JLyoKLQkgKiBz ZXQgdGhlIHN0YXJ0aW5nIHBvaW50Ci0JICoKLQkgKiBYWFggbWlnaHQgYmUgYmV0dGVyIGRv bmUgaW4gaW5kZXhhbS5jCi0JICovCi0Jc2Nhbi0+eHNfYmF0Y2gtPmN1cnJJbmRleCA9IC0x OwotCiAJLyogc2hvdWxkbid0IGJlIHBvc3NpYmxlIHRvIGVuZCBoZXJlIHdpdGggYW4gZW1w dHkgYmF0Y2ggKi8KIAlBc3NlcnQoc2Nhbi0+eHNfYmF0Y2gtPm5oZWFwdGlkcyA+IDApOwog fQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMKaW5kZXggYmQ4NzE1YjY3OTcuLmZm YzZjZGU3OWQ2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVh bS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMKQEAgLTIxNiw3 ICsyMTYsNyBAQCB0YWJsZV9pbmRleF9mZXRjaF90dXBsZV9jaGVjayhSZWxhdGlvbiByZWws CiAJYm9vbAkJZm91bmQ7CiAKIAlzbG90ID0gdGFibGVfc2xvdF9jcmVhdGUocmVsLCBOVUxM KTsKLQlzY2FuID0gdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4ocmVsKTsKKwlzY2FuID0gdGFi bGVfaW5kZXhfZmV0Y2hfYmVnaW4ocmVsLCBOVUxMKTsKIAlmb3VuZCA9IHRhYmxlX2luZGV4 X2ZldGNoX3R1cGxlKHNjYW4sIHRpZCwgc25hcHNob3QsIHNsb3QsICZjYWxsX2FnYWluLAog CQkJCQkJCQkJYWxsX2RlYWQpOwogCXRhYmxlX2luZGV4X2ZldGNoX2VuZChzY2FuKTsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbnN0cmFpbnQuYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2NvbnN0cmFpbnQuYwppbmRleCBmN2RjNDJmNzQ1Mi4uMTFiMWY3MjBj MmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbnN0cmFpbnQuYworKysg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb25zdHJhaW50LmMKQEAgLTEwNiw3ICsxMDYsOCBA QCB1bmlxdWVfa2V5X3JlY2hlY2soUEdfRlVOQ1RJT05fQVJHUykKIAkgKi8KIAl0bXB0aWQg PSBjaGVja3RpZDsKIAl7Ci0JCUluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4gPSB0YWJsZV9p bmRleF9mZXRjaF9iZWdpbih0cmlnZGF0YS0+dGdfcmVsYXRpb24pOworCQlJbmRleEZldGNo VGFibGVEYXRhICpzY2FuID0gdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4odHJpZ2RhdGEtPnRn X3JlbGF0aW9uLAorCQkJCQkJCQkJCQkJCQkJTlVMTCk7CiAJCWJvb2wJCWNhbGxfYWdhaW4g PSBmYWxzZTsKIAogCQlpZiAoIXRhYmxlX2luZGV4X2ZldGNoX3R1cGxlKHNjYW4sICZ0bXB0 aWQsIFNuYXBzaG90U2VsZiwgc2xvdCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVJbmRleG9ubHlzY2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5k ZXhvbmx5c2Nhbi5jCmluZGV4IDhlNTVmZmNhMTk3Li42NWQxNmI5ODFlYiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYworKysgYi9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCkBAIC0xNDUsOSArMTQ1LDEw IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQl9CiAJCWVs c2UKIAkJeworCQkJaW50CWxhc3RJbmRleCA9IHNjYW5kZXNjLT54c19iYXRjaC0+cmVhZFBv cy5pbmRleDsKKwogCQkJLyogSXMgdGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGl0ZW0gdmFs aWQgZm9yIHRoZSBiYXRjaD8gKi8KLQkJCUFzc2VydCgoc2NhbmRlc2MtPnhzX2JhdGNoLT5j dXJySW5kZXggPj0gMCkgJiYKLQkJCQkgICAoc2NhbmRlc2MtPnhzX2JhdGNoLT5jdXJySW5k ZXggPCBzY2FuZGVzYy0+eHNfYmF0Y2gtPm5oZWFwdGlkcykpOworCQkJQXNzZXJ0KChsYXN0 SW5kZXggPj0gMCkgJiYgKGxhc3RJbmRleCA8IHNjYW5kZXNjLT54c19iYXRjaC0+bmhlYXB0 aWRzKSk7CiAKIAkJCS8qCiAJCQkgKiBSZXVzZSB0aGUgcHJldmlvdXNseSBkZXRlcm1pbmVk IHBhZ2UgdmlzaWJpbGl0eSBpbmZvLCBvcgpAQCAtMTU5LDggKzE2MCw3IEBAIEluZGV4T25s eU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQkJICogdmlzaWJpbGl0eSBmcm9t IHRoYXQuIE1heWJlIHdlIGNvdWxkL3Nob3VsZCBoYXZlIGEgbW9yZSBkaXJlY3QKIAkJCSAq IHdheT8KIAkJCSAqLwotCQkJYWxsX3Zpc2libGUgPSAhaW9zX3ByZWZldGNoX2Jsb2NrKHNj YW5kZXNjLCBub2RlLAotCQkJCQkJCQkJCQkgIHNjYW5kZXNjLT54c19iYXRjaC0+Y3Vycklu ZGV4KTsKKwkJCWFsbF92aXNpYmxlID0gIWlvc19wcmVmZXRjaF9ibG9jayhzY2FuZGVzYywg bm9kZSwgbGFzdEluZGV4KTsKIAkJfQogCiAJCS8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvZ2VuYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oCmluZGV4IDFk OWEwODY4YTliLi42N2U3MGEwODFiOSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNz L2dlbmFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKQEAgLTE5MSw2ICsx OTEsNyBAQCBleHRlcm4gaW50NjQgaW5kZXhfZ2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2Nh biwgVElEQml0bWFwICpiaXRtYXApOwogLyogaW5kZXggYmF0Y2hpbmcvcHJlZmV0Y2hpbmcg Ki8KIGV4dGVybiBib29sIGluZGV4X2JhdGNoX2FkZChJbmRleFNjYW5EZXNjIHNjYW4sIEl0 ZW1Qb2ludGVyRGF0YSB0aWQsIGJvb2wgcmVjaGVjaywKIAkJCQkJCQlJbmRleFR1cGxlIGl0 dXAsIEhlYXBUdXBsZSBodHVwKTsKK2V4dGVybiB2b2lkIGluZGV4X2JhdGNoX3Jlc2V0X3Bv c2l0aW9ucyhJbmRleFNjYW5EZXNjIHNjYW4sIGludCBpbmRleCwgYm9vbCByZXN0b3JlZCk7 CiAKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKmluZGV4X2J1bGtfZGVsZXRlKElu ZGV4VmFjdXVtSW5mbyAqaW5mbywKIAkJCQkJCQkJCQkJCUluZGV4QnVsa0RlbGV0ZVJlc3Vs dCAqaXN0YXQsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oIGIv c3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAppbmRleCAzM2QyYjZhNjIyMy4uZGM1NDcw ODMzYzkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKKysrIGIv c3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaApAQCAtMTYsOCArMTYsMTAgQEAKIAogI2lu Y2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKICNpbmNsdWRlICJhY2Nlc3MvaXR1cC5o IgorI2luY2x1ZGUgImFjY2Vzcy9zZGlyLmgiCiAjaW5jbHVkZSAicG9ydC9hdG9taWNzLmgi CiAjaW5jbHVkZSAic3RvcmFnZS9idWYuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3JlYWRfc3Ry ZWFtLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9yZWxmaWxlbG9jYXRvci5oIgogI2luY2x1ZGUg InN0b3JhZ2Uvc3Bpbi5oIgogI2luY2x1ZGUgInV0aWxzL3JlbGNhY2hlLmgiCkBAIC0xMjcs NiArMTI5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFyYWxsZWxCbG9ja1RhYmxlU2Nhbldvcmtl ckRhdGEgKlBhcmFsbGVsQmxvY2tUYWJsZVNjYW5Xb3JrZXI7CiB0eXBlZGVmIHN0cnVjdCBJ bmRleEZldGNoVGFibGVEYXRhCiB7CiAJUmVsYXRpb24JcmVsOworCVJlYWRTdHJlYW0gKnJz OwogfSBJbmRleEZldGNoVGFibGVEYXRhOwogCiAvKiBGb3J3YXJkIGRlY2xhcmF0aW9uLCB0 aGUgcHJlZmV0Y2ggY2FsbGJhY2sgbmVlZHMgSW5kZXhTY2FuRGVzY0RhdGEuICovCkBAIC0y MDIsNiArMjA1LDEyIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiB0eXBl ZGVmIGJvb2wgKCpJbmRleFByZWZldGNoQ2FsbGJhY2spIChJbmRleFNjYW5EZXNjRGF0YSAq c2NhbiwKIAkJCQkJCQkJCSAgIHZvaWQgKmFyZywgaW50IGluZGV4KTsKIAordHlwZWRlZiBz dHJ1Y3QgSW5kZXhTY2FuQmF0Y2hQb3MgeworCWludAkJaW5kZXg7CQkJLyogaW5kZXggaW50 byB0aGUgYmF0Y2ggaXRlbXMgKi8KKwlib29sCXJlc3RvcmVkOwkJLyogV2FzIHRoaXMgcmVz dG9yZWQgYnkgcmVzdHJwb3M/IElmIHllcywgZG9uJ3QKKwkJCQkJCQkgKiBhZHZhbmNlIG9u IHRoZSBmaXJzdCBhY2Nlc3MuICovCit9IEluZGV4U2NhbkJhdGNoUG9zOworCiAvKgogICog RGF0YSBhYm91dCB0aGUgY3VycmVudCBUSUQgYmF0Y2ggcmV0dXJuZWQgYnkgdGhlIGluZGV4 IEFNLgogICoKQEAgLTIyNywyMiArMjM2LDE5IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2Nh bkJhdGNoRGF0YQogCS8qIG1lbW9yeSBjb250ZXh0IGZvciBwZXItYmF0Y2ggZGF0YSAqLwog CU1lbW9yeUNvbnRleHQgY3R4OwogCi0JLyoKLQkgKiBXYXMgdGhpcyBiYXRjaCBqdXN0IHJl c3RvcmVkIGJ5IHJlc3RycG9zPyBpZiB5ZXMsIHdlIGRvbid0IGFkdmFuY2Ugb24KLQkgKiB0 aGUgZmlyc3QgaXRlcmF0aW9uLgotCSAqLwotCWJvb2wJCXJlc3RvcmVkOwotCi0JLyogYmF0 Y2ggcHJlZmV0Y2hpbmcgKi8KLQlpbnQJCQlwcmVmZXRjaFRhcmdldDsgLyogY3VycmVudCBw cmVmZXRjaCBkaXN0YW5jZSAqLwotCWludAkJCXByZWZldGNoTWF4aW11bTsJLyogbWF4aW11 bSBwcmVmZXRjaCBkaXN0YW5jZSAqLwotCWludAkJCXByZWZldGNoSW5kZXg7CS8qIG5leHQg aXRlbSB0byBwcmVmZXRjaCAqLworCS8qIG1vc3QgcmVjZW50IGRpcmVjdGlvbiBvZiB0aGUg c2NhbiAqLworCVNjYW5EaXJlY3Rpb24gZGlyOwogCiAJSW5kZXhQcmVmZXRjaENhbGxiYWNr CXByZWZldGNoQ2FsbGJhY2s7CiAJdm9pZAkJCQkgICAqcHJlZmV0Y2hBcmd1bWVudDsKIAor CS8qCisJICogV2FzIHRoaXMgYmF0Y2gganVzdCByZXN0b3JlZCBieSByZXN0cnBvcz8gSWYg eWVzLCB3ZSBkb24ndCBhZHZhbmNlIG9uCisJICogdGhlIGZpcnN0IGl0ZXJhdGlvbi4KKwkg Ki8KKwlib29sCQlyZXNldEluZGV4ZXM7CisKIAkvKiBiYXRjaCBjb250ZW50cyAoVElEcywg aW5kZXggdHVwbGVzLCBraWxsIGJpdG1hcCwgLi4uKSAqLwotCWludAkJCWN1cnJJbmRleDsJ CS8qIGluZGV4IG9mIHRoZSBjdXJyZW50IGl0ZW0gKi8KIAlpbnQJCQluaGVhcHRpZHM7CQkv KiBudW1iZXIgb2YgVElEcyBpbiB0aGUgYmF0Y2ggKi8KIAlJdGVtUG9pbnRlckRhdGEgKmhl YXB0aWRzOwkvKiBUSURzIGluIHRoZSBiYXRjaCAqLwogCUluZGV4VHVwbGUgKml0dXBzOwkJ CS8qIEluZGV4VHVwbGVzLCBpZiByZXF1ZXN0ZWQgKi8KQEAgLTI1MCw2ICsyNTYsMTAgQEAg dHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuQmF0Y2hEYXRhCiAJYm9vbAkgICAqcmVjaGVjazsJ CS8qIHJlY2hlY2sgZmxhZ3MgKi8KIAlEYXR1bQkgICAqcHJpdmF0ZURhdGE7CS8qIHByaXZh dGUgZGF0YSBmb3IgYmF0Y2ggKi8KIAorCS8qIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGJh dGNoICovCisJSW5kZXhTY2FuQmF0Y2hQb3MJcmVhZFBvczsJLyogdXNlZCBieSBleGVjdXRv ciAqLworCUluZGV4U2NhbkJhdGNoUG9zCXN0cmVhbVBvczsJLyogdXNlZCBieSByZWFkIHN0 cmVhbSAqLworCiAJLyogeHNfb3JkZXJieXZhbHMgLyB4c19vcmRlcmJ5bnVsbHMgKi8KIAlE YXR1bQkgICAqb3JkZXJieXZhbHM7CiAJYm9vbAkgICAqb3JkZXJieW51bGxzOwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vz cy90YWJsZWFtLmgKaW5kZXggYWRiNDc4YTkzY2EuLjJhODk2MGI0MDA1IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vz cy90YWJsZWFtLmgKQEAgLTQyMCw3ICs0MjAsOCBAQCB0eXBlZGVmIHN0cnVjdCBUYWJsZUFt Um91dGluZQogCSAqCiAJICogVHVwbGVzIGZvciBhbiBpbmRleCBzY2FuIGNhbiB0aGVuIGJl IGZldGNoZWQgdmlhIGluZGV4X2ZldGNoX3R1cGxlLgogCSAqLwotCXN0cnVjdCBJbmRleEZl dGNoVGFibGVEYXRhICooKmluZGV4X2ZldGNoX2JlZ2luKSAoUmVsYXRpb24gcmVsKTsKKwlz dHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqKCppbmRleF9mZXRjaF9iZWdpbikgKFJlbGF0 aW9uIHJlbCwKKwkJCQkJCQkJCQkJCQkgIFJlYWRTdHJlYW0gKnJzKTsKIAogCS8qCiAJICog UmVzZXQgaW5kZXggZmV0Y2guIFR5cGljYWxseSB0aGlzIHdpbGwgcmVsZWFzZSBjcm9zcyBp bmRleCBmZXRjaApAQCAtMTE5OCw5ICsxMTk5LDkgQEAgdGFibGVfcGFyYWxsZWxzY2FuX3Jl aW5pdGlhbGl6ZShSZWxhdGlvbiByZWwsIFBhcmFsbGVsVGFibGVTY2FuRGVzYyBwc2NhbikK ICAqIFR1cGxlcyBmb3IgYW4gaW5kZXggc2NhbiBjYW4gdGhlbiBiZSBmZXRjaGVkIHZpYSB0 YWJsZV9pbmRleF9mZXRjaF90dXBsZSgpLgogICovCiBzdGF0aWMgaW5saW5lIEluZGV4RmV0 Y2hUYWJsZURhdGEgKgotdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4oUmVsYXRpb24gcmVsKQor dGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4oUmVsYXRpb24gcmVsLCBSZWFkU3RyZWFtICpycykK IHsKLQlyZXR1cm4gcmVsLT5yZF90YWJsZWFtLT5pbmRleF9mZXRjaF9iZWdpbihyZWwpOwor CXJldHVybiByZWwtPnJkX3RhYmxlYW0tPmluZGV4X2ZldGNoX2JlZ2luKHJlbCwgcnMpOwog fQogCiAvKgotLSAKMi40Ny4wCgo= --------------4qyQcmdBaK2FloOMEeBLhmx6--