Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qFCT9-0005Md-6O for pgsql-hackers@arkaria.postgresql.org; Fri, 30 Jun 2023 11:39:19 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1qFCS9-0005eM-3Z for pgsql-hackers@arkaria.postgresql.org; Fri, 30 Jun 2023 11:38:17 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qFCS8-0005eC-Lq for pgsql-hackers@lists.postgresql.org; Fri, 30 Jun 2023 11:38:16 +0000 Received: from mail-wr1-x42a.google.com ([2a00:1450:4864:20::42a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1qFCS3-001Lw1-RY for pgsql-hackers@lists.postgresql.org; Fri, 30 Jun 2023 11:38:15 +0000 Received: by mail-wr1-x42a.google.com with SMTP id ffacd0b85a97d-313e23d0a28so2123064f8f.3 for ; Fri, 30 Jun 2023 04:38:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1688125088; x=1690717088; h=in-reply-to:content-language:references:cc:to:from:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=mCF+6vF9rlCd18A1DMEc2g5rLE8HVyDvbNPenhCA3ZQ=; b=dVSRC+qWYzQNlz24eDeW/IuMmsgDwQ/Ff7dRbG6v4cqKQbf5SupqZMUNsYy0kZBIQ8 wE3NwQkhXUWgpOMwMmHmcZJ+WftL4Dtt5l3ULbVUWp12iQbvFFywskjEfmo3tu8eikLH qIXLy/VFKa82mYXJ9B+ytESItE6b9Pc7a15ipckpiwiEB1DyJ/E4a5sPgiSWv1jrqnms zfbWQ0IVUuT7aH9Q3+Jf5VlU5slhbQhpBK0V1hPoocmM7vN5Y34fk0ElV/MRfa0ndLGb vIz/VE+yNIa8tlFQwvAQ3O8uff0fQUqOW7inIEPRjl8pAuJmkEhL6xbw9H4meMNNw8eB dBKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1688125088; x=1690717088; h=in-reply-to:content-language:references:cc:to:from:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=mCF+6vF9rlCd18A1DMEc2g5rLE8HVyDvbNPenhCA3ZQ=; b=ImtIFO7wcSUNcgsPhU1WlB6et+KhblJQabTGLAXIcimlj63BQwL7RO4QtJ9SV+W5fr wwRBUKcizaSX8tImCp+ljEFVepPwJkLx1wGL+zSaPt1Fp+8hL8IFS+wsvvv2VKyTI4GU BrOwMBLQHkiB9zwUFkRNgfzAc5uyCB4z4sEauoMV0hlu5TQ1SIGx4JlQc3mWgRdsNO4F /diWVqnpa6TMd6pyM+ZK0pNuPFun+m7evTDLnZaoNZKFhibXVYFH+LzW9+ZNk5fD2Q1R oyvTJ3pJ0POTNiYEwYc09dwgYN3QbIm8LyRMMEPF/ZYqMC5Z9i+o86qY5sInA4A0hZl9 tyNg== X-Gm-Message-State: ABy/qLZxg9qYuDhk6uPBiwT+v3OWYprz21tLstQMzBkQmyYWTKC5AeXX nCEx3sxhVJgfyMm0opnUcEn9Kw== X-Google-Smtp-Source: APBJJlGGjtmMvOK2WrQAGbi6bR7nvQUMcOZKlVu7vFofYT6dUuOmwUFs1QgPBqdW5WPINBw/DYhytg== X-Received: by 2002:a5d:4482:0:b0:313:df08:7b82 with SMTP id j2-20020a5d4482000000b00313df087b82mr2272083wrq.12.1688125087974; Fri, 30 Jun 2023 04:38:07 -0700 (PDT) Received: from [10.137.0.17] (static-84-42-175-93.bb.vodafone.cz. [84.42.175.93]) by smtp.gmail.com with ESMTPSA id j8-20020adfff88000000b0031412b685d2sm4605489wrr.32.2023.06.30.04.38.06 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 30 Jun 2023 04:38:07 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------x5RTrJ63Memb50O0rYXYtKa5" Message-ID: <3cd40425-965a-5ce1-1af3-d51971c44b93@enterprisedb.com> Date: Fri, 30 Jun 2023 13:38:06 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.12.0 Subject: Re: index prefetching From: Tomas Vondra To: Andres Freund Cc: PostgreSQL Hackers , Georgios References: <20230609000600.syqy447e6metnvyj@awork3.anarazel.de> <20230610203456.5gancfekm4pj4pbs@awork3.anarazel.de> <6030d836-e8b7-e7b9-2cbb-144309679d03@enterprisedb.com> <8c86c3a6-074e-6c88-3e7e-9452b6a37b9b@enterprisedb.com> Content-Language: en-US In-Reply-To: <8c86c3a6-074e-6c88-3e7e-9452b6a37b9b@enterprisedb.com> 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. --------------x5RTrJ63Memb50O0rYXYtKa5 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi, attached is a v4 of the patch, with a fairly major shift in the approach. Until now the patch very much relied on the AM to provide information which blocks to prefetch next (based on the current leaf index page). This seemed like a natural approach when I started working on the PoC, but over time I ran into various drawbacks: * a lot of the logic is at the AM level * can't prefetch across the index page boundary (have to wait until the next index leaf page is read by the indexscan) * doesn't work for distance searches (gist/spgist), After thinking about this, I decided to ditch this whole idea of exchanging prefetch information through an API, and make the prefetching almost entirely in the indexam code. The new patch maintains a queue of TIDs (read from index_getnext_tid), with up to effective_io_concurrency entries - calling getnext_slot() adds a TID at the queue tail, issues a prefetch for the block, and then returns TID from the queue head. Maintaining the queue is up to index_getnext_slot() - it can't be done in index_getnext_tid(), because then it'd affect IOS (and prefetching heap would mostly defeat the whole point of IOS). And we can't do that above index_getnext_slot() because that already fetched the heap page. I still think prefetching for IOS is doable (and desirable), in mostly the same way - except that we'd need to maintain the queue from some other place, as IOS doesn't do index_getnext_slot(). FWIW there's also the "index-only filters without IOS" patch [1] which switches even regular index scans to index_getnext_tid(), so maybe relying on index_getnext_slot() is a lost cause anyway. Anyway, this has the nice consequence that it makes AM code entirely oblivious of prefetching - there's no need to API, we just get TIDs as before, and the prefetching magic happens after that. Thus it also works for searches ordered by distance (gist/spgist). The patch got much smaller (about 40kB, down from 80kB), which is nice. I ran the benchmarks [2] with this v4 patch, and the results for the "point" queries are almost exactly the same as for v3. The SAOP part is still running - I'll add those results in a day or two, but I expect similar outcome as for point queries. regards [1] https://commitfest.postgresql.org/43/4352/ [2] https://github.com/tvondra/index-prefetch-tests-2/ -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company --------------x5RTrJ63Memb50O0rYXYtKa5 Content-Type: text/x-patch; charset=UTF-8; name="index-prefetch-v4.patch" Content-Disposition: attachment; filename="index-prefetch-v4.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RnZXQuYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RnZXQuYwppbmRleCBlMmM5YjVmMDY5Yy4uOTA0NWM2 ZWI3YWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RnZXQuYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0Z2V0LmMKQEAgLTY3OCw3ICs2Nzgs NiBAQCBnaXN0Z2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp cikKIAkJCQkJc2Nhbi0+eHNfaGl0dXAgPSBzby0+cGFnZURhdGFbc28tPmN1clBhZ2VEYXRh XS5yZWNvbnR1cDsKIAogCQkJCXNvLT5jdXJQYWdlRGF0YSsrOwotCiAJCQkJcmV0dXJuIHRy dWU7CiAJCQl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBh bV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5j CmluZGV4IDA3NTViZTgzOTAxLi5mMDQxMmRhOTRhZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAi c3RvcmFnZS9zbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRl ICJ1dGlscy9yZWwuaCIKKyNpbmNsdWRlICJ1dGlscy9zcGNjYWNoZS5oIgogCiBzdGF0aWMg dm9pZCByZWZvcm1fYW5kX3Jld3JpdGVfdHVwbGUoSGVhcFR1cGxlIHR1cGxlLAogCQkJCQkJ CQkJIFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE5ld0hlYXAsCkBAIC03NTEsNiArNzUy LDkgQEAgaGVhcGFtX3JlbGF0aW9uX2NvcHlfZm9yX2NsdXN0ZXIoUmVsYXRpb24gT2xkSGVh cCwgUmVsYXRpb24gTmV3SGVhcCwKIAkJCVBST0dSRVNTX0NMVVNURVJfSU5ERVhfUkVMSUQK IAkJfTsKIAkJaW50NjQJCWNpX3ZhbFsyXTsKKwkJaW50CQkJcHJlZmV0Y2hfdGFyZ2V0Owor CisJCXByZWZldGNoX3RhcmdldCA9IGdldF90YWJsZXNwYWNlX2lvX2NvbmN1cnJlbmN5KE9s ZEhlYXAtPnJkX3JlbC0+cmVsdGFibGVzcGFjZSk7CiAKIAkJLyogU2V0IHBoYXNlIGFuZCBP SURPbGRJbmRleCB0byBjb2x1bW5zICovCiAJCWNpX3ZhbFswXSA9IFBST0dSRVNTX0NMVVNU RVJfUEhBU0VfSU5ERVhfU0NBTl9IRUFQOwpAQCAtNzU5LDcgKzc2Myw4IEBAIGhlYXBhbV9y ZWxhdGlvbl9jb3B5X2Zvcl9jbHVzdGVyKFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE5l d0hlYXAsCiAKIAkJdGFibGVTY2FuID0gTlVMTDsKIAkJaGVhcFNjYW4gPSBOVUxMOwotCQlp bmRleFNjYW4gPSBpbmRleF9iZWdpbnNjYW4oT2xkSGVhcCwgT2xkSW5kZXgsIFNuYXBzaG90 QW55LCAwLCAwKTsKKwkJaW5kZXhTY2FuID0gaW5kZXhfYmVnaW5zY2FuKE9sZEhlYXAsIE9s ZEluZGV4LCBTbmFwc2hvdEFueSwgMCwgMCwKKwkJCQkJCQkJCXByZWZldGNoX3RhcmdldCwg cHJlZmV0Y2hfdGFyZ2V0KTsKIAkJaW5kZXhfcmVzY2FuKGluZGV4U2NhbiwgTlVMTCwgMCwg TlVMTCwgMCk7CiAJfQogCWVsc2UKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9p bmRleC9nZW5hbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKaW5kZXgg NzIyOTI3YWViYWIuLjI2NGViZTFkOGU1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvaW5kZXgvZ2VuYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0u YwpAQCAtMTI2LDYgKzEyNiw5IEBAIFJlbGF0aW9uR2V0SW5kZXhTY2FuKFJlbGF0aW9uIGlu ZGV4UmVsYXRpb24sIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAlzY2FuLT54c19oaXR1 cCA9IE5VTEw7CiAJc2Nhbi0+eHNfaGl0dXBkZXNjID0gTlVMTDsKIAorCS8qIHNldCBpbiBl YWNoIEFNIHdoZW4gYXBwbGljYWJsZSAqLworCXNjYW4tPnhzX3ByZWZldGNoID0gTlVMTDsK KwogCXJldHVybiBzY2FuOwogfQogCkBAIC00NDAsOCArNDQzLDkgQEAgc3lzdGFibGVfYmVn aW5zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQllbG9nKEVSUk9SLCAiY29sdW1u IGlzIG5vdCBpbiBpbmRleCIpOwogCQl9CiAKKwkJLyogbm8gaW5kZXggcHJlZmV0Y2ggZm9y IHN5c3RlbSBjYXRhbG9ncyAqLwogCQlzeXNzY2FuLT5pc2NhbiA9IGluZGV4X2JlZ2luc2Nh bihoZWFwUmVsYXRpb24sIGlyZWwsCi0JCQkJCQkJCQkJIHNuYXBzaG90LCBua2V5cywgMCk7 CisJCQkJCQkJCQkJIHNuYXBzaG90LCBua2V5cywgMCwgMCwgMCk7CiAJCWluZGV4X3Jlc2Nh bihzeXNzY2FuLT5pc2Nhbiwga2V5LCBua2V5cywgTlVMTCwgMCk7CiAJCXN5c3NjYW4tPnNj YW4gPSBOVUxMOwogCX0KQEAgLTY5Niw4ICs3MDAsOSBAQCBzeXN0YWJsZV9iZWdpbnNjYW5f b3JkZXJlZChSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQllbG9nKEVSUk9SLCAiY29sdW1u IGlzIG5vdCBpbiBpbmRleCIpOwogCX0KIAorCS8qIG5vIGluZGV4IHByZWZldGNoIGZvciBz eXN0ZW0gY2F0YWxvZ3MgKi8KIAlzeXNzY2FuLT5pc2NhbiA9IGluZGV4X2JlZ2luc2Nhbiho ZWFwUmVsYXRpb24sIGluZGV4UmVsYXRpb24sCi0JCQkJCQkJCQkgc25hcHNob3QsIG5rZXlz LCAwKTsKKwkJCQkJCQkJCSBzbmFwc2hvdCwgbmtleXMsIDAsIDAsIDApOwogCWluZGV4X3Jl c2NhbihzeXNzY2FuLT5pc2Nhbiwga2V5LCBua2V5cywgTlVMTCwgMCk7CiAJc3lzc2Nhbi0+ c2NhbiA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9p bmRleGFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCmluZGV4IGIy NWIwM2Y3YWJjLi4zNzIyODc0OTQ4ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L2luZGV4L2luZGV4YW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhh bS5jCkBAIC01NCwxMSArNTQsMTMgQEAKICNpbmNsdWRlICJjYXRhbG9nL3BnX2FtcHJvYy5o IgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2Rl ZnJlbS5oIgorI2luY2x1ZGUgImNvbW1vbi9oYXNoZm4uaCIKICNpbmNsdWRlICJub2Rlcy9t YWtlZnVuY3MuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1 Zm1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv cHJlZGljYXRlLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAi dXRpbHMvcnVsZXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgogI2luY2x1 ZGUgInV0aWxzL3N5c2NhY2hlLmgiCkBAIC0xMDYsNyArMTA4LDEwIEBAIGRvIHsgXAogCiBz dGF0aWMgSW5kZXhTY2FuRGVzYyBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwoUmVsYXRpb24g aW5kZXhSZWxhdGlvbiwKIAkJCQkJCQkJCQkJICBpbnQgbmtleXMsIGludCBub3JkZXJieXMs IFNuYXBzaG90IHNuYXBzaG90LAotCQkJCQkJCQkJCQkgIFBhcmFsbGVsSW5kZXhTY2FuRGVz YyBwc2NhbiwgYm9vbCB0ZW1wX3NuYXApOworCQkJCQkJCQkJCQkgIFBhcmFsbGVsSW5kZXhT Y2FuRGVzYyBwc2NhbiwgYm9vbCB0ZW1wX3NuYXAsCisJCQkJCQkJCQkJCSAgaW50IHByZWZl dGNoX3RhcmdldCwgaW50IHByZWZldGNoX3Jlc2V0KTsKKworc3RhdGljIHZvaWQgaW5kZXhf cHJlZmV0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJdGVtUG9pbnRlciB0aWQpOwogCiAKIC8q IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KQEAgLTIwMCwxOCArMjA1LDM2IEBAIGluZGV4X2luc2VydChSZWxhdGlv biBpbmRleFJlbGF0aW9uLAogICogaW5kZXhfYmVnaW5zY2FuIC0gc3RhcnQgYSBzY2FuIG9m IGFuIGluZGV4IHdpdGggYW1nZXR0dXBsZQogICoKICAqIENhbGxlciBtdXN0IGJlIGhvbGRp bmcgc3VpdGFibGUgbG9ja3Mgb24gdGhlIGhlYXAgYW5kIHRoZSBpbmRleC4KKyAqCisgKiBw cmVmZXRjaF90YXJnZXQgZGV0ZXJtaW5lcyBpZiBwcmVmZXRjaGluZyBpcyByZXF1ZXN0ZWQg Zm9yIHRoaXMgaW5kZXggc2Nhbi4KKyAqIFdlIG5lZWQgdG8gYmUgYWJsZSB0byBkaXNhYmxl IHRoaXMgZm9yIHR3byByZWFzb25zLiBGaXJzdGx5LCB3ZSBkb24ndCB3YW50CisgKiB0byBk byBwcmVmZXRjaGluZyBmb3IgSU9TICh3aGVyZSB3ZSBob3BlIG1vc3Qgb2YgdGhlIGhlYXAg cGFnZXMgd29uJ3QgYmUKKyAqIHJlYWxseSBuZWVkZWQuIFNlY29uZGx5LCB3ZSBtdXN0IHBy ZXZlbnQgaW5maW5pdGUgbG9vcCB3aGVuIGRldGVybWluaW5nCisgKiBwcmVmZXRjaCB2YWx1 ZSBmb3IgdGhlIHRhYmxlc3BhY2UgLSB0aGUgZ2V0X3RhYmxlc3BhY2VfaW9fY29uY3VycmVu Y3koKQorICogZG9lcyBhbiBpbmRleCBzY2FuIGludGVybmFsbHksIHdoaWNoIHdvdWxkIHJl c3VsdCBpbiBpbmZpbml0ZSBsb29wLiBTbyB3ZQorICogc2ltcGx5IGRpc2FibGUgcHJlZmV0 Y2hpbmcgaW4gc3lzdGFibGVfYmVnaW5zY2FuKCkuCisgKgorICogWFhYIE1heWJlIHdlIHNo b3VsZCBkbyBwcmVmZXRjaGluZyBldmVuIGZvciBjYXRhbG9ncywgYnV0IHRoZW4gZGlzYWJs ZSBpdAorICogd2hlbiBhY2Nlc3NpbmcgVGFibGVTcGFjZVJlbGF0aW9uSWQuIFdlIHN0aWxs IG5lZWQgdGhlIGFiaWxpdHkgdG8gZGlzYWJsZQorICogdGhpcyBhbmQgY2F0YWxvZ3MgYXJl IGV4cGVjdGVkIHRvIGJlIHRpbnksIHNvIHByZWZldGNoaW5nIGlzIHVubGlrZWx5IHRvCisg KiBtYWtlIGEgZGlmZmVyZW5jZS4KKyAqCisgKiBYWFggVGhlIHNlY29uZCByZWFzb24gZG9l c24ndCByZWFsbHkgYXBwbHkgYWZ0ZXIgZWZmZWN0aXZlX2lvX2NvbmN1cnJlbmN5CisgKiBs b29rdXAgbW92ZWQgdG8gY2FsbGVyIG9mIGluZGV4X2JlZ2luc2Nhbi4KICAqLwogSW5kZXhT Y2FuRGVzYwogaW5kZXhfYmVnaW5zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQlS ZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogCQkJCVNuYXBzaG90IHNuYXBzaG90LAotCQkJCWlu dCBua2V5cywgaW50IG5vcmRlcmJ5cykKKwkJCQlpbnQgbmtleXMsIGludCBub3JkZXJieXMs CisJCQkJaW50IHByZWZldGNoX3RhcmdldCwgaW50IHByZWZldGNoX3Jlc2V0KQogewogCUlu ZGV4U2NhbkRlc2Mgc2NhbjsKIAogCUFzc2VydChzbmFwc2hvdCAhPSBJbnZhbGlkU25hcHNo b3QpOwogCi0Jc2NhbiA9IGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChpbmRleFJlbGF0aW9u LCBua2V5cywgbm9yZGVyYnlzLCBzbmFwc2hvdCwgTlVMTCwgZmFsc2UpOworCXNjYW4gPSBp bmRleF9iZWdpbnNjYW5faW50ZXJuYWwoaW5kZXhSZWxhdGlvbiwgbmtleXMsIG5vcmRlcmJ5 cywgc25hcHNob3QsIE5VTEwsIGZhbHNlLAorCQkJCQkJCQkJcHJlZmV0Y2hfdGFyZ2V0LCBw cmVmZXRjaF9yZXNldCk7CiAKIAkvKgogCSAqIFNhdmUgYWRkaXRpb25hbCBwYXJhbWV0ZXJz IGludG8gdGhlIHNjYW5kZXNjLiAgRXZlcnl0aGluZyBlbHNlIHdhcyBzZXQKQEAgLTI0MSw3 ICsyNjQsOCBAQCBpbmRleF9iZWdpbnNjYW5fYml0bWFwKFJlbGF0aW9uIGluZGV4UmVsYXRp b24sCiAKIAlBc3NlcnQoc25hcHNob3QgIT0gSW52YWxpZFNuYXBzaG90KTsKIAotCXNjYW4g PSBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwoaW5kZXhSZWxhdGlvbiwgbmtleXMsIDAsIHNu YXBzaG90LCBOVUxMLCBmYWxzZSk7CisJc2NhbiA9IGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5h bChpbmRleFJlbGF0aW9uLCBua2V5cywgMCwgc25hcHNob3QsIE5VTEwsIGZhbHNlLAorCQkJ CQkJCQkJMCwgMCk7IC8qIG5vIHByZWZldGNoICovCiAKIAkvKgogCSAqIFNhdmUgYWRkaXRp b25hbCBwYXJhbWV0ZXJzIGludG8gdGhlIHNjYW5kZXNjLiAgRXZlcnl0aGluZyBlbHNlIHdh cyBzZXQKQEAgLTI1OCw3ICsyODIsOCBAQCBpbmRleF9iZWdpbnNjYW5fYml0bWFwKFJlbGF0 aW9uIGluZGV4UmVsYXRpb24sCiBzdGF0aWMgSW5kZXhTY2FuRGVzYwogaW5kZXhfYmVnaW5z Y2FuX2ludGVybmFsKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiAJCQkJCQkgaW50IG5rZXlz LCBpbnQgbm9yZGVyYnlzLCBTbmFwc2hvdCBzbmFwc2hvdCwKLQkJCQkJCSBQYXJhbGxlbElu ZGV4U2NhbkRlc2MgcHNjYW4sIGJvb2wgdGVtcF9zbmFwKQorCQkJCQkJIFBhcmFsbGVsSW5k ZXhTY2FuRGVzYyBwc2NhbiwgYm9vbCB0ZW1wX3NuYXAsCisJCQkJCQkgaW50IHByZWZldGNo X3RhcmdldCwgaW50IHByZWZldGNoX3Jlc2V0KQogewogCUluZGV4U2NhbkRlc2Mgc2NhbjsK IApAQCAtMjc2LDEyICszMDEsMjcgQEAgaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKFJlbGF0 aW9uIGluZGV4UmVsYXRpb24sCiAJLyoKIAkgKiBUZWxsIHRoZSBBTSB0byBvcGVuIGEgc2Nh bi4KIAkgKi8KLQlzY2FuID0gaW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtYmVnaW5zY2Fu KGluZGV4UmVsYXRpb24sIG5rZXlzLAotCQkJCQkJCQkJCQkJbm9yZGVyYnlzKTsKKwlzY2Fu ID0gaW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtYmVnaW5zY2FuKGluZGV4UmVsYXRpb24s IG5rZXlzLCBub3JkZXJieXMpOwogCS8qIEluaXRpYWxpemUgaW5mb3JtYXRpb24gZm9yIHBh cmFsbGVsIHNjYW4uICovCiAJc2Nhbi0+cGFyYWxsZWxfc2NhbiA9IHBzY2FuOwogCXNjYW4t PnhzX3RlbXBfc25hcCA9IHRlbXBfc25hcDsKIAorCS8qIHdpdGggcHJlZmV0Y2hpbmcgZW5h YmxlZCwgaW5pdGlhbGl6ZSB0aGUgbmVjZXNzYXJ5IHN0YXRlICovCisJaWYgKHByZWZldGNo X3RhcmdldCA+IDApCisJeworCQlJbmRleFByZWZldGNoIHByZWZldGNoZXIgPSBwYWxsb2Mw KHNpemVvZihJbmRleFByZWZldGNoRGF0YSkpOworCisJCXByZWZldGNoZXItPnF1ZXVlSW5k ZXggPSAwOworCQlwcmVmZXRjaGVyLT5xdWV1ZVN0YXJ0ID0gMDsKKwkJcHJlZmV0Y2hlci0+ cXVldWVFbmQgPSAwOworCisJCXByZWZldGNoZXItPnByZWZldGNoVGFyZ2V0ID0gMDsKKwkJ cHJlZmV0Y2hlci0+cHJlZmV0Y2hNYXhUYXJnZXQgPSBwcmVmZXRjaF90YXJnZXQ7CisJCXBy ZWZldGNoZXItPnByZWZldGNoUmVzZXQgPSBwcmVmZXRjaF9yZXNldDsKKworCQlzY2FuLT54 c19wcmVmZXRjaCA9IHByZWZldGNoZXI7CisJfQorCiAJcmV0dXJuIHNjYW47CiB9CiAKQEAg LTMxNyw2ICszNTcsMjAgQEAgaW5kZXhfcmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAog CXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXJlc2NhbihzY2FuLCBrZXlzLCBu a2V5cywKIAkJCQkJCQkJCQkJb3JkZXJieXMsIG5vcmRlcmJ5cyk7CisKKwkvKiBJZiB3ZSdy ZSBwcmVmZXRjaGluZyBmb3IgdGhpcyBpbmRleCwgbWF5YmUgcmVzZXQgc29tZSBvZiB0aGUg c3RhdGUuICovCisJaWYgKHNjYW4tPnhzX3ByZWZldGNoICE9IE5VTEwpCisJeworCQlJbmRl eFByZWZldGNoIHByZWZldGNoZXIgPSBzY2FuLT54c19wcmVmZXRjaDsKKworCQlwcmVmZXRj aGVyLT5xdWV1ZVN0YXJ0ID0gMDsKKwkJcHJlZmV0Y2hlci0+cXVldWVFbmQgPSAwOworCQlw cmVmZXRjaGVyLT5xdWV1ZUluZGV4ID0gMDsKKwkJcHJlZmV0Y2hlci0+cHJlZmV0Y2hEb25l ID0gZmFsc2U7CisJCisJCXByZWZldGNoZXItPnByZWZldGNoVGFyZ2V0ID0gTWluKHByZWZl dGNoZXItPnByZWZldGNoVGFyZ2V0LAorCQkJCQkJCQkJCSBwcmVmZXRjaGVyLT5wcmVmZXRj aFJlc2V0KTsKKwl9CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KQEAgLTM0NSw2ICszOTks MTcgQEAgaW5kZXhfZW5kc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiAJaWYgKHNjYW4tPnhz X3RlbXBfc25hcCkKIAkJVW5yZWdpc3RlclNuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KTsK IAorCS8qIElmIHByZWZldGNoaW5nIGVuYWJsZWQsIGxvZyBwcmVmZXRjaCBzdGF0cy4gKi8K KwlpZiAoc2Nhbi0+eHNfcHJlZmV0Y2gpCisJeworCQlJbmRleFByZWZldGNoIHByZWZldGNo ID0gc2Nhbi0+eHNfcHJlZmV0Y2g7CisKKwkJZWxvZyhMT0csICJpbmRleCBwcmVmZXRjaCBz dGF0czogcmVxdWVzdHMgJWx1IHByZWZldGNoZXMgJWx1ICglZikgc2tpcCBjYWNoZWQgJWx1 IHNlcXVlbnRpYWwgJWx1IiwKKwkJCSBwcmVmZXRjaC0+Y291bnRBbGwsIHByZWZldGNoLT5j b3VudFByZWZldGNoLAorCQkJIHByZWZldGNoLT5jb3VudFByZWZldGNoICogMTAwLjAgLyBw cmVmZXRjaC0+Y291bnRBbGwsCisJCQkgcHJlZmV0Y2gtPmNvdW50U2tpcENhY2hlZCwgcHJl ZmV0Y2gtPmNvdW50U2tpcFNlcXVlbnRpYWwpOworCX0KKwogCS8qIFJlbGVhc2UgdGhlIHNj YW4gZGF0YSBzdHJ1Y3R1cmUgaXRzZWxmICovCiAJSW5kZXhTY2FuRW5kKHNjYW4pOwogfQpA QCAtNDg3LDEwICs1NTIsMTMgQEAgaW5kZXhfcGFyYWxsZWxyZXNjYW4oSW5kZXhTY2FuRGVz YyBzY2FuKQogICogaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsIC0gam9pbiBwYXJhbGxlbCBp bmRleCBzY2FuCiAgKgogICogQ2FsbGVyIG11c3QgYmUgaG9sZGluZyBzdWl0YWJsZSBsb2Nr cyBvbiB0aGUgaGVhcCBhbmQgdGhlIGluZGV4LgorICoKKyAqIFhYWCBTZWUgaW5kZXhfYmVn aW5zY2FuKCkgZm9yIG1vcmUgY29tbWVudHMgb24gcHJlZmV0Y2hfdGFyZ2V0LgogICovCiBJ bmRleFNjYW5EZXNjCiBpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwoUmVsYXRpb24gaGVhcHJl bCwgUmVsYXRpb24gaW5kZXhyZWwsIGludCBua2V5cywKLQkJCQkJCSBpbnQgbm9yZGVyYnlz LCBQYXJhbGxlbEluZGV4U2NhbkRlc2MgcHNjYW4pCisJCQkJCQkgaW50IG5vcmRlcmJ5cywg UGFyYWxsZWxJbmRleFNjYW5EZXNjIHBzY2FuLAorCQkJCQkJIGludCBwcmVmZXRjaF90YXJn ZXQsIGludCBwcmVmZXRjaF9yZXNldCkKIHsKIAlTbmFwc2hvdAlzbmFwc2hvdDsKIAlJbmRl eFNjYW5EZXNjIHNjYW47CkBAIC00OTksNyArNTY3LDcgQEAgaW5kZXhfYmVnaW5zY2FuX3Bh cmFsbGVsKFJlbGF0aW9uIGhlYXByZWwsIFJlbGF0aW9uIGluZGV4cmVsLCBpbnQgbmtleXMs CiAJc25hcHNob3QgPSBSZXN0b3JlU25hcHNob3QocHNjYW4tPnBzX3NuYXBzaG90X2RhdGEp OwogCVJlZ2lzdGVyU25hcHNob3Qoc25hcHNob3QpOwogCXNjYW4gPSBpbmRleF9iZWdpbnNj YW5faW50ZXJuYWwoaW5kZXhyZWwsIG5rZXlzLCBub3JkZXJieXMsIHNuYXBzaG90LAotCQkJ CQkJCQkJcHNjYW4sIHRydWUpOworCQkJCQkJCQkJcHNjYW4sIHRydWUsIHByZWZldGNoX3Rh cmdldCwgcHJlZmV0Y2hfcmVzZXQpOwogCiAJLyoKIAkgKiBTYXZlIGFkZGl0aW9uYWwgcGFy YW1ldGVycyBpbnRvIHRoZSBzY2FuZGVzYy4gIEV2ZXJ5dGhpbmcgZWxzZSB3YXMgc2V0CkBA IC02MjMsMjAgKzY5MSw3NCBAQCBpbmRleF9mZXRjaF9oZWFwKEluZGV4U2NhbkRlc2Mgc2Nh biwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCiBib29sCiBpbmRleF9nZXRuZXh0X3Nsb3QoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwgVHVwbGVUYWJsZVNs b3QgKnNsb3QpCiB7CisJSW5kZXhQcmVmZXRjaAlwcmVmZXRjaCA9IHNjYW4tPnhzX3ByZWZl dGNoOworCiAJZm9yICg7OykKIAl7CisJCS8qIHdpdGggcHJlZmV0Y2hpbmcgZW5hYmxlZCwg YWNjdW11bGF0ZSBlbm91Z2ggVElEcyBpbnRvIHRoZSBwcmVmZXRjaCAqLworCQlpZiAoUFJF RkVUQ0hfQUNUSVZFKHByZWZldGNoKSkKKwkJeworCQkJLyogCisJCQkgKiBpbmNyZW1lbnRh bGx5IHJhbXAgdXAgcHJlZmV0Y2ggZGlzdGFuY2UKKwkJCSAqCisJCQkgKiBYWFggSW50ZW50 aW9uYWxseSBkb25lIGFzIGZpcnN0LCBzbyB0aGF0IHdpdGggcHJlZmV0Y2hpbmcgdGhlcmUn cworCQkJICogYWx3YXlzIGF0IGxlYXN0IG9uZSBpdGVtIGluIHRoZSBxdWV1ZS4KKwkJCSAq LworCQkJcHJlZmV0Y2gtPnByZWZldGNoVGFyZ2V0ID0gTWluKHByZWZldGNoLT5wcmVmZXRj aFRhcmdldCArIDEsCisJCQkJCQkJCQkJcHJlZmV0Y2gtPnByZWZldGNoTWF4VGFyZ2V0KTsK KworCQkJLyoKKwkJCSAqIGdldCBtb3JlIFRJRCB3aGlsZSB0aGVyZSBpcyBlbXB0eSBzcGFj ZSBpbiB0aGUgcXVldWUgKGNvbnNpZGVyaW5nCisJCQkgKiBjdXJyZW50IHByZWZldGNoIHRh cmdldAorCQkJICovCisJCQl3aGlsZSAoIVBSRUZFVENIX0ZVTEwocHJlZmV0Y2gpKQorCQkJ eworCQkJCUl0ZW1Qb2ludGVyIHRpZDsKKworCQkJCS8qIFRpbWUgdG8gZmV0Y2ggdGhlIG5l eHQgVElEIGZyb20gdGhlIGluZGV4ICovCisJCQkJdGlkID0gaW5kZXhfZ2V0bmV4dF90aWQo c2NhbiwgZGlyZWN0aW9uKTsKKworCQkJCS8qIElmIHdlJ3JlIG91dCBvZiBpbmRleCBlbnRy aWVzLCB3ZSdyZSBkb25lICovCisJCQkJaWYgKHRpZCA9PSBOVUxMKQorCQkJCXsKKwkJCQkJ cHJlZmV0Y2gtPnByZWZldGNoRG9uZSA9IHRydWU7CisJCQkJCWJyZWFrOworCQkJCX0KKwor CQkJCUFzc2VydChJdGVtUG9pbnRlckVxdWFscyh0aWQsICZzY2FuLT54c19oZWFwdGlkKSk7 CisKKwkJCQlwcmVmZXRjaC0+cXVldWVJdGVtc1tQUkVGRVRDSF9RVUVVRV9JTkRFWChwcmVm ZXRjaC0+cXVldWVFbmQpXSA9ICp0aWQ7CisJCQkJcHJlZmV0Y2gtPnF1ZXVlRW5kKys7CisK KwkJCQlpbmRleF9wcmVmZXRjaChzY2FuLCB0aWQpOworCQkJfQorCQl9CisKIAkJaWYgKCFz Y2FuLT54c19oZWFwX2NvbnRpbnVlKQogCQl7Ci0JCQlJdGVtUG9pbnRlciB0aWQ7CisJCQlp ZiAoUFJFRkVUQ0hfRU5BQkxFRChwcmVmZXRjaCkpCisJCQl7CisJCQkJLyogcHJlZmV0Y2hp bmcgZW5hYmxlZCwgYnV0IHJlYWNoZWQgdGhlIGVuZCBhbmQgcXVldWUgZW1wdHkgKi8KKwkJ CQlpZiAoUFJFRkVUQ0hfRE9ORShwcmVmZXRjaCkpCisJCQkJCWJyZWFrOworCisJCQkJc2Nh bi0+eHNfaGVhcHRpZCA9IHByZWZldGNoLT5xdWV1ZUl0ZW1zW1BSRUZFVENIX1FVRVVFX0lO REVYKHByZWZldGNoLT5xdWV1ZUluZGV4KV07CisJCQkJcHJlZmV0Y2gtPnF1ZXVlSW5kZXgr KzsKKwkJCX0KKwkJCWVsc2UJLyogbm90IHByZWZldGNoaW5nLCBqdXN0IGRvIHRoZSByZWd1 bGFyIHdvcmsgICovCisJCQl7CisJCQkJSXRlbVBvaW50ZXIgdGlkOwogCi0JCQkvKiBUaW1l IHRvIGZldGNoIHRoZSBuZXh0IFRJRCBmcm9tIHRoZSBpbmRleCAqLwotCQkJdGlkID0gaW5k ZXhfZ2V0bmV4dF90aWQoc2NhbiwgZGlyZWN0aW9uKTsKKwkJCQkvKiBUaW1lIHRvIGZldGNo IHRoZSBuZXh0IFRJRCBmcm9tIHRoZSBpbmRleCAqLworCQkJCXRpZCA9IGluZGV4X2dldG5l eHRfdGlkKHNjYW4sIGRpcmVjdGlvbik7CiAKLQkJCS8qIElmIHdlJ3JlIG91dCBvZiBpbmRl eCBlbnRyaWVzLCB3ZSdyZSBkb25lICovCi0JCQlpZiAodGlkID09IE5VTEwpCi0JCQkJYnJl YWs7CisJCQkJLyogSWYgd2UncmUgb3V0IG9mIGluZGV4IGVudHJpZXMsIHdlJ3JlIGRvbmUg Ki8KKwkJCQlpZiAodGlkID09IE5VTEwpCisJCQkJCWJyZWFrOworCisJCQkJQXNzZXJ0KEl0 ZW1Qb2ludGVyRXF1YWxzKHRpZCwgJnNjYW4tPnhzX2hlYXB0aWQpKTsKKwkJCX0KIAotCQkJ QXNzZXJ0KEl0ZW1Qb2ludGVyRXF1YWxzKHRpZCwgJnNjYW4tPnhzX2hlYXB0aWQpKTsKIAkJ fQogCiAJCS8qCkBAIC05ODgsMyArMTExMCwyNTggQEAgaW5kZXhfb3BjbGFzc19vcHRpb25z KFJlbGF0aW9uIGluZHJlbCwgQXR0ck51bWJlciBhdHRudW0sIERhdHVtIGF0dG9wdGlvbnMs CiAKIAlyZXR1cm4gYnVpbGRfbG9jYWxfcmVsb3B0aW9ucygmcmVsb3B0cywgYXR0b3B0aW9u cywgdmFsaWRhdGUpOwogfQorCisvKgorICogQWRkIHRoZSBibG9jayB0byB0aGUgdGlueSB0 b3AtbGV2ZWwgcXVldWUgKExSVSksIGFuZCBjaGVjayBpZiB0aGUgYmxvY2sKKyAqIGlzIGlu IGEgc2VxdWVudGlhbCBwYXR0ZXJuLgorICovCitzdGF0aWMgYm9vbAoraW5kZXhfcHJlZmV0 Y2hfaXNfc2VxdWVudGlhbChJbmRleFByZWZldGNoIHByZWZldGNoLCBCbG9ja051bWJlciBi bG9jaykKK3sKKwlpbnQJCWlkeDsKKworCS8qIElmIHRoZSBxdWV1ZSBpcyBlbXB0eSwganVz dCBzdG9yZSB0aGUgYmxvY2sgYW5kIHdlJ3JlIGRvbmUuICovCisJaWYgKHByZWZldGNoLT5i bG9ja0luZGV4ID09IDApCisJeworCQlwcmVmZXRjaC0+YmxvY2tJdGVtc1tQUkVGRVRDSF9C TE9DS19JTkRFWChwcmVmZXRjaC0+YmxvY2tJbmRleCldID0gYmxvY2s7CisJCXByZWZldGNo LT5ibG9ja0luZGV4Kys7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKgorCSAqIE90aGVy d2lzZSwgY2hlY2sgaWYgaXQncyB0aGUgc2FtZSBhcyB0aGUgaW1tZWRpYXRlbHkgcHJlY2Vk aW5nIGJsb2NrICh3ZQorCSAqIGRvbid0IHdhbnQgdG8gcHJlZmV0Y2ggdGhlIHNhbWUgYmxv Y2sgb3ZlciBhbmQgb3Zlci4pCisJICovCisJaWYgKHByZWZldGNoLT5ibG9ja0l0ZW1zW1BS RUZFVENIX0JMT0NLX0lOREVYKHByZWZldGNoLT5ibG9ja0luZGV4IC0gMSldID09IGJsb2Nr KQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qIE5vdCB0aGUgc2FtZSBibG9jaywgc28gYWRkIGl0 IHRvIHRoZSBxdWV1ZS4gKi8KKwlwcmVmZXRjaC0+YmxvY2tJdGVtc1tQUkVGRVRDSF9CTE9D S19JTkRFWChwcmVmZXRjaC0+YmxvY2tJbmRleCldID0gYmxvY2s7CisJcHJlZmV0Y2gtPmJs b2NrSW5kZXgrKzsKKworCS8qIGNoZWNrIHNlcXVlbnRpYWwgcGF0dGVyIGEgY291cGxlIHJl cXVlc3RzIGJhY2sgKi8KKwlmb3IgKGludCBpID0gMTsgaSA8IFBSRUZFVENIX1NFUV9QQVRU RVJOX0JMT0NLUzsgaSsrKQorCXsKKwkJLyogbm90IGVub3VnaCByZXF1ZXN0cyB0byBjb25m aXJtIGEgc2VxdWVudGlhbCBwYXR0ZXJuICovCisJCWlmIChwcmVmZXRjaC0+YmxvY2tJbmRl eCA8IGkpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJLyoKKwkJICogaW5kZXggb2YgdGhlIGFs cmVhZHkgcmVxdWVzdGVkIGJ1ZmZlciAoLTEgYmVjYXVzZSB3ZSBhbHJlYWR5CisJCSAqIGlu Y3JlbWVudGVkIHRoZSBpbmRleCB3aGVuIGFkZGluZyB0aGUgYmxvY2sgdG8gdGhlIHF1ZXVl KQorCQkgKi8KKwkJaWR4ID0gUFJFRkVUQ0hfQkxPQ0tfSU5ERVgocHJlZmV0Y2gtPmJsb2Nr SW5kZXggLSBpIC0gMSk7CisKKwkJLyogICovCisJCWlmIChwcmVmZXRjaC0+YmxvY2tJdGVt c1tpZHhdICE9IChibG9jayAtIGkpKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVy biB0cnVlOworfQorCisvKgorICogaW5kZXhfcHJlZmV0Y2hfYWRkX2NhY2hlCisgKgkJQWRk IGEgYmxvY2sgdG8gdGhlIGNhY2hlLCByZXR1cm4gdHJ1ZSBpZiBpdCB3YXMgcmVjZW50bHkg cHJlZmV0Y2hlZC4KKyAqCisgKiBXaGVuIGNoZWNraW5nIGEgYmxvY2ssIHdlIG5lZWQgdG8g Y2hlY2sgaWYgaXQgd2FzIHJlY2VudGx5IHByZWZldGNoZWQsCisgKiB3aGVyZSByZWNlbnRs eSBtZWFucyB3aXRoaW4gUFJFRkVUQ0hfQ0FDSEVfU0laRSByZXF1ZXN0cy4gVGhpcyBjaGVj aworICogbmVlZHMgdG8gYmUgdmVyeSBjaGVhcCwgZXZlbiB3aXRoIGZhaXJseSBsYXJnZSBj YWNoZXMgKGh1bmRyZWRzIG9mCisgKiBlbnRyaWVzKS4gVGhlIGNhY2hlIGRvZXMgbm90IG5l ZWQgdG8gYmUgcGVyZmVjdCwgd2UgY2FuIGFjY2VwdCBmYWxzZQorICogcG9zaXRpdmVzL25l Z2F0aXZlcywgYXMgbG9uZyBhcyB0aGUgcmF0ZSBpcyByZWFzb25hYmx5IGxvdy4gV2UgYWxz bworICogbmVlZCB0byBleHBpcmUgZW50cmllcywgc28gdGhhdCBvbmx5ICJyZWNlbnQiIHJl cXVlc3RzIGFyZSByZW1lbWJlcmVkLgorICoKKyAqIEEgcXVldWUgd291bGQgYWxsb3cgZXhw aXJpbmcgdGhlIHJlcXVlc3RzLCBidXQgY2hlY2tpbmcgaWYgYSBibG9jayB3YXMKKyAqIHBy ZWZldGNoZWQgd291bGQgYmUgZXhwZW5zaXZlIChsaW5lYXIgc2VhcmNoIGZvciBsb25nZXIg cXVldWVzKS4gQW5vdGhlcgorICogb3B0aW9uIHdvdWxkIGJlIGEgaGFzaCB0YWJsZSwgYnV0 IHRoYXQgaGFzIGlzc3VlcyB3aXRoIGV4cGlyaW5nIGVudHJpZXMKKyAqIGNoZWFwbHkgKHdo aWNoIHVzdWFsbHkgZGVncmFkZXMgdGhlIGhhc2ggdGFibGUpLgorICoKKyAqIFNvIHdlIHVz ZSBhIGNhY2hlIHRoYXQgaXMgb3JnYW5pemVkIGFzIG11bHRpcGxlIHNtYWxsIExSVSBjYWNo ZXMuIEVhY2gKKyAqIGJsb2NrIGlzIG1hcHBlZCB0byBhIHBhcnRpY3VsYXIgTFJVIGJ5IGhh c2hpbmcgKHNvIGl0J3MgYSBiaXQgbGlrZSBhCisgKiBoYXNoIHRhYmxlKSwgYW5kIGVhY2gg TFJVIGlzIHRpbnkgKGUuZy4gOCBlbnRyaWVzKS4gVGhlIExSVSBvbmx5IGtlZXBzCisgKiB0 aGUgbW9zdCByZWNlbnQgcmVxdWVzdHMgKGZvciB0aGF0IHBhcnRpY3VsYXIgTFJVKS4KKyAq CisgKiBUaGlzIGFsbG93cyBxdWljayBzZWFyY2hlcyBhbmQgZXhwaXJhdGlvbiwgd2l0aCBm YWxzZSBuZWdhdGl2ZXMgKHdoZW4KKyAqIGEgcGFydGljdWxhciBMUlUgaGFzIHRvbyBtYW55 IGNvbGxpc2lvbnMpLgorICoKKyAqIEZvciBleGFtcGxlLCBpbWFnaW5lIDEyOCBMUlUgY2Fj aGVzLCBlYWNoIHdpdGggOCBlbnRyaWVzIC0gdGhhdCdzIDEwMjQKKyAqIHByZWZldGNoIHJl cXVlc3QgaW4gdG90YWwuCisgKgorICogVGhlIHJlY2VuY3kgaXMgZGV0ZXJtaW5lZCB1c2lu ZyBhIHByZWZldGNoIGNvdW50ZXIsIGluY3JlbWVudGVkIGV2ZXJ5CisgKiB0aW1lIHdlIGVu ZCB1cCBwcmVmZXRjaGluZyBhIGJsb2NrLiBUaGUgY291bnRlciBpcyB1aW50NjQsIHNvIGl0 IHNob3VsZAorICogbm90IHdyYXAgKDEyNSB6ZWJpYnl0ZXMsIHdvdWxkIHRha2UgfjQgbWls bGlvbiB5ZWFycyBhdCAxR0IvcykuCisgKgorICogVG8gY2hlY2sgaWYgYSBibG9jayB3YXMg cHJlZmV0Y2hlZCByZWNlbnRseSwgd2UgY2FsY3VsYXRlIGhhc2goYmxvY2spLAorICogYW5k IHRoZW4gbGluZWFybHkgc2VhcmNoIGlmIHRoZSB0aW55IExSVSBoYXMgZW50cnkgZm9yIHRo ZSBzYW1lIGJsb2NrCisgKiBhbmQgcmVxdWVzdCBsZXNzIHRoYW4gUFJFRkVUQ0hfQ0FDSEVf U0laRSBhZ28uCisgKgorICogQXQgdGhlIHNhbWUgdGltZSwgd2UgZWl0aGVyIHVwZGF0ZSB0 aGUgZW50cnkgKGZvciB0aGUgc2FtZSBibG9jaykgaWYKKyAqIGZvdW5kLCBvciByZXBsYWNl IHRoZSBvbGRlc3QvZW1wdHkgZW50cnkuCisgKgorICogSWYgdGhlIGJsb2NrIHdhcyBub3Qg cmVjZW50bHkgcHJlZmV0Y2hlZCAoaS5lLiB3ZSB3YW50IHRvIHByZWZldGNoIGl0KSwKKyAq IHdlIGluY3JlbWVudCB0aGUgY291bnRlci4KKyAqLworc3RhdGljIGJvb2wKK2luZGV4X3By ZWZldGNoX2FkZF9jYWNoZShJbmRleFByZWZldGNoIHByZWZldGNoLCBCbG9ja051bWJlciBi bG9jaykKK3sKKwlQcmVmZXRjaENhY2hlRW50cnkgKmVudHJ5OworCisJLyogY2FsY3VsYXRl IHdoaWNoIExSVSB0byB1c2UgKi8KKwlpbnQJCQlscnUgPSBoYXNoX3VpbnQzMihibG9jaykg JSBQUkVGRVRDSF9MUlVfQ09VTlQ7CisKKwkvKiBlbnRyeSB0byAobWF5YmUpIHVzZSBmb3Ig dGhpcyBibG9jayByZXF1ZXN0ICovCisJdWludDY0CQlvbGRlc3RSZXF1ZXN0ID0gUEdfVUlO VDY0X01BWDsKKwlpbnQJCQlvbGRlc3RJbmRleCA9IC0xOworCisJLyoKKwkgKiBGaXJzdCBh ZGQgdGhlIGJsb2NrIHRvIHRoZSAodGlueSkgdG9wLWxldmVsIExSVSBjYWNoZSBhbmQgc2Vl IGlmIGl0J3MKKwkgKiBwYXJ0IG9mIGEgc2VxdWVudGlhbCBwYXR0ZXJuLiBJbiB0aGlzIGNh c2Ugd2UganVzdCBpZ25vcmUgdGhlIGJsb2NrCisJICogYW5kIGRvbid0IHByZWZldGNoIGl0 IC0gd2UgZXhwZWN0IHJlYWQtYWhlYWQgdG8gZG8gYSBiZXR0ZXIgam9iLgorCSAqCisJICog WFhYIE1heWJlIHdlIHNob3VsZCBzdGlsbCBhZGQgdGhlIGJsb2NrIHRvIHRoZSBsYXRlciBj YWNoZSwgaW4gY2FzZQorCSAqIHdlIGhhcHBlbiB0byBhY2Nlc3MgaXQgbGF0ZXI/IFRoYXQg bWlnaHQgaGVscCBpZiB3ZSBmaXJzdCBzY2FuIGEgbG90CisJICogb2YgdGhlIHRhYmxlIHNl cXVlbnRpYWxseSwgYW5kIHRoZW4gcmFuZG9tbHkuIE5vdCBzdXJlIHRoYXQncyB2ZXJ5CisJ ICogbGlrZWx5IHdpdGggaW5kZXggYWNjZXNzLCB0aG91Z2guCisJICovCisJaWYgKGluZGV4 X3ByZWZldGNoX2lzX3NlcXVlbnRpYWwocHJlZmV0Y2gsIGJsb2NrKSkKKwl7CisJCXByZWZl dGNoLT5jb3VudFNraXBTZXF1ZW50aWFsKys7CisJCXJldHVybiB0cnVlOworCX0KKworCS8q IHNlZSBpZiB3ZSBhbHJlYWR5IGhhdmUgcHJlZmV0Y2hlZCB0aGlzIGJsb2NrIChsaW5lYXIg c2VhcmNoIG9mIExSVSkgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IFBSRUZFVENIX0xSVV9T SVpFOyBpKyspCisJeworCQllbnRyeSA9ICZwcmVmZXRjaC0+cHJlZmV0Y2hDYWNoZVtscnUg KiBQUkVGRVRDSF9MUlVfU0laRSArIGldOworCisJCS8qIElzIHRoaXMgdGhlIG9sZGVzdCBw cmVmZXRjaCByZXF1ZXN0IGluIHRoaXMgTFJVPyAqLworCQlpZiAoZW50cnktPnJlcXVlc3Qg PCBvbGRlc3RSZXF1ZXN0KQorCQl7CisJCQlvbGRlc3RSZXF1ZXN0ID0gZW50cnktPnJlcXVl c3Q7CisJCQlvbGRlc3RJbmRleCA9IGk7CisJCX0KKworCQkvKiBSZXF1ZXN0IG51bWJlcnMg YXJlIHBvc2l0aXZlLCBzbyAwIG1lYW5zICJ1bnVzZWQiLiAqLworCQlpZiAoZW50cnktPnJl cXVlc3QgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCS8qIElzIHRoaXMgZW50cnkgZm9yIHRo ZSBzYW1lIGJsb2NrIGFzIHRoZSBjdXJyZW50IHJlcXVlc3Q/ICovCisJCWlmIChlbnRyeS0+ YmxvY2sgPT0gYmxvY2spCisJCXsKKwkJCWJvb2wJcHJlZmV0Y2hlZDsKKworCQkJLyoKKwkJ CSAqIElzIHRoZSBvbGQgcmVxdWVzdCBzdWZmaWNpZW50bHkgcmVjZW50PyBJZiB5ZXMsIHdl IHRyZWF0IHRoZQorCQkJICogYmxvY2sgYXMgYWxyZWFkeSBwcmVmZXRjaGVkLgorCQkJICoK KwkJCSAqIFhYWCBXZSBkbyBhZGQgdGhlIGNhY2hlIHNpemUgdG8gdGhlIHJlcXVlc3QgaW4g b3JkZXIgbm90IHRvCisJCQkgKiBoYXZlIGlzc3VlcyB3aXRoIHVpbnQ2NCB1bmRlcmZsb3dz LgorCQkJICovCisJCQlwcmVmZXRjaGVkID0gKGVudHJ5LT5yZXF1ZXN0ICsgUFJFRkVUQ0hf Q0FDSEVfU0laRSA+PSBwcmVmZXRjaC0+cHJlZmV0Y2hSZXFOdW1iZXIpOworCisJCQkvKiBV cGRhdGUgdGhlIHJlcXVlc3QgbnVtYmVyLiAqLworCQkJZW50cnktPnJlcXVlc3QgPSArK3By ZWZldGNoLT5wcmVmZXRjaFJlcU51bWJlcjsKKworCQkJcHJlZmV0Y2gtPmNvdW50U2tpcENh Y2hlZCArPSAocHJlZmV0Y2hlZCkgPyAxIDogMDsKKworCQkJcmV0dXJuIHByZWZldGNoZWQ7 CisJCX0KKwl9CisKKwkvKgorCSAqIFdlIGRpZG4ndCBmaW5kIHRoZSBibG9jayBpbiB0aGUg TFJVLCBzbyBzdG9yZSBpdCBlaXRoZXIgaW4gYW4gZW1wdHkKKwkgKiBlbnRyeSwgb3IgaW4g dGhlICJvbGRlc3QiIHByZWZldGNoIHJlcXVlc3QgaW4gdGhpcyBMUlUuCisJICovCisJQXNz ZXJ0KChvbGRlc3RJbmRleCA+PSAwKSAmJiAob2xkZXN0SW5kZXggPCBQUkVGRVRDSF9MUlVf U0laRSkpOworCisJZW50cnkgPSAmcHJlZmV0Y2gtPnByZWZldGNoQ2FjaGVbbHJ1ICogUFJF RkVUQ0hfTFJVX1NJWkUgKyBvbGRlc3RJbmRleF07CisKKwllbnRyeS0+YmxvY2sgPSBibG9j azsKKwllbnRyeS0+cmVxdWVzdCA9ICsrcHJlZmV0Y2gtPnByZWZldGNoUmVxTnVtYmVyOwor CisJLyogbm90IGluIHRoZSBwcmVmZXRjaCBjYWNoZSAqLworCXJldHVybiBmYWxzZTsKK30K KworLyoKKyAqIERvIHByZWZldGNoaW5nLCBhbmQgZ3JhZHVhbGx5IGluY3JlYXNlIHRoZSBw cmVmZXRjaCBkaXN0YW5jZS4KKyAqCisgKiBYWFggVGhpcyBpcyBsaW1pdGVkIHRvIGEgc2lu Z2xlIGluZGV4IHBhZ2UgKGJlY2F1c2UgdGhhdCdzIHdoZXJlIHdlIGdldAorICogY3VyclBv cy5pdGVtcyBmcm9tKS4gQnV0IGluZGV4IHR1cGxlcyBhcmUgdHlwaWNhbGx5IHZlcnkgc21h bGwsIHNvIHRoZXJlCisgKiBzaG91bGQgYmUgcXVpdGUgYSBiaXQgb2Ygc3R1ZmYgdG8gcHJl ZmV0Y2ggKGVzcGVjaWFsbHkgd2l0aCBkZWR1cGxpY2F0ZWQKKyAqIGluZGV4ZXMsIGV0Yy4p LiBEb2VzIG5vdCBzZWVtIHdvcnRoIHJld29ya2luZyB0aGUgaW5kZXggYWNjZXNzIHRvIGFs bG93CisgKiBtb3JlIGFnZ3Jlc3NpdmUgcHJlZmV0Y2hpbmcsIGl0J3MgYmVzdCBlZmZvcnQu CisgKgorICogWFhYIFNvbWUgaWRlYXMgaG93IHRvIGF1dG8tdHVuZSB0aGUgcHJlZmV0Y2hp bmcsIHNvIHRoYXQgdW5uZWNlc3NhcnkKKyAqIHByZWZldGNoaW5nIGRvZXMgbm90IGNhdXNl IHNpZ25pZmljYW50IHJlZ3Jlc3Npb25zIChlLmcuIGZvciBuZXN0bG9vcAorICogd2l0aCBp bm5lciBpbmRleCBzY2FuKS4gV2UgY291bGQgdHJhY2sgbnVtYmVyIG9mIGluZGV4IHBhZ2Vz IHZpc2l0ZWQKKyAqIGFuZCBpbmRleCB0dXBsZXMgcmV0dXJuZWQsIHRvIGNhbGN1bGF0ZSBh dmcgdHVwbGVzIC8gcGFnZSwgYW5kIHRoZW4KKyAqIHVzZSB0aGF0IHRvIGxpbWl0IHByZWZl dGNoaW5nIGFmdGVyIHN3aXRjaGluZyB0byBhIG5ldyBwYWdlIChpbnN0ZWFkCisgKiBvZiBq dXN0IHVzaW5nIHByZWZldGNoTWF4VGFyZ2V0LCB3aGljaCBjYW4gZ2V0IG11Y2ggbGFyZ2Vy KS4KKyAqCisgKiBYWFggT2J2aW91c2x5LCBhbm90aGVyIG9wdGlvbiBpcyB0byB1c2UgdGhl IHBsYW5uZXIgZXN0aW1hdGVzIC0gd2Uga25vdworICogaG93IG1hbnkgcm93cyB3ZSdyZSBl eHBlY3RlZCB0byBmZXRjaCAob24gYXZlcmFnZSwgYXNzdW1pbmcgdGhlIGVzdGltYXRlcwor ICogYXJlIHJlYXNvbmFibHkgYWNjdXJhdGUpLCBzbyB3aHkgbm90IHRvIHVzZSB0aGF0LiBB bmQgbWF5YmUgY29tYmluZSBpdAorICogd2l0aCB0aGUgYXV0by10dW5pbmcgYmFzZWQgb24g cnVudGltZSBzdGF0aXN0aWNzLCBkZXNjcmliZWQgYWJvdmUuCisgKgorICogWFhYIFRoZSBw cmVmZXRjaGluZyBtYXkgaW50ZXJmZXJlIHdpdGggdGhlIHBhdGNoIGFsbG93aW5nIHVzIHRv IGV2YWx1YXRlCisgKiBjb25kaXRpb25zIG9uIHRoZSBpbmRleCB0dXBsZSwgaW4gd2hpY2gg Y2FzZSB3ZSBtYXkgbm90IG5lZWQgdGhlIGhlYXAKKyAqIHR1cGxlLiBNYXliZSBpZiB0aGVy ZSdzIHN1Y2ggZmlsdGVyLCB3ZSBzaG91bGQgcHJlZmV0Y2ggb25seSBwYWdlcyB0aGF0Cisg KiBhcmUgbm90IGFsbC12aXNpYmxlIChhbmQgdGhlIHNhbWUgaWRlYSB3b3VsZCBhbHNvIHdv cmsgZm9yIElPUyksIGJ1dAorICogaXQgYWxzbyBtYWtlcyB0aGUgaW5kZXhpbmcgYSBiaXQg ImF3YXJlIiBvZiB0aGUgdmlzaWJpbGl0eSBzdHVmZiAod2hpY2gKKyAqIHNlZW1zIGEgYml0 IHdyb25nKS4gQWxzbywgbWF5YmUgd2Ugc2hvdWxkIGNvbnNpZGVyIHRoZSBmaWx0ZXIgc2Vs ZWN0aXZpdHkKKyAqIChpZiB0aGUgaW5kZXgtb25seSBmaWx0ZXIgaXMgZXhwZWN0ZWQgdG8g ZWxpbWluYXRlIG9ubHkgZmV3IHJvd3MsIHRoZW4KKyAqIHRoZSB2bSBjaGVjayBpcyBwb2lu dGxlc3MpLiBNYXliZSB0aGlzIGNvdWxkL3Nob3VsZCBiZSBhdXRvLXR1bmluZyB0b28sCisg KiBpLmUuIHdlIGNvdWxkIHRyYWNrIGhvdyBtYW55IGhlYXAgdHVwbGVzIHdlcmUgbmVlZGVk IGFmdGVyIGFsbCwgYW5kIHRoZW4KKyAqIHdlIHdvdWxkIGNvbnNpZGVyIHRoaXMgd2hlbiBk ZWNpZGluZyB3aGV0aGVyIHRvIHByZWZldGNoIGFsbC12aXNpYmxlCisgKiBwYWdlcyBvciBu b3QgKG1hdHRlcnMgb25seSBmb3IgcmVndWxhciBpbmRleCBzY2Fucywgbm90IElPUykuCisg KgorICogWFhYIE1heWJlIHdlIGNvdWxkL3Nob3VsZCBhbHNvIHByZWZldGNoIHRoZSBuZXh0 IGluZGV4IGJsb2NrLCBlLmcuIHN0b3JlZAorICogaW4gQlRTY2FuUG9zRGF0YS5uZXh0UGFn ZS4KKyAqLworc3RhdGljIHZvaWQKK2luZGV4X3ByZWZldGNoKEluZGV4U2NhbkRlc2Mgc2Nh biwgSXRlbVBvaW50ZXIgdGlkKQoreworCUluZGV4UHJlZmV0Y2gJcHJlZmV0Y2ggPSBzY2Fu LT54c19wcmVmZXRjaDsKKwlCbG9ja051bWJlcglibG9jazsKKworCS8qCisJICogTm8gaGVh cCByZWxhdGlvbiBtZWFucyBiaXRtYXAgaW5kZXggc2Nhbiwgd2hpY2ggZG9lcyBwcmVmZXRj aGluZyBhdAorCSAqIHRoZSBiaXRtYXAgaGVhcCBzY2FuLCBzbyBubyBwcmVmZXRjaCBoZXJl ICh3ZSBjYW4ndCBkbyBpdCBhbnl3YXksCisJICogd2l0aG91dCB0aGUgaGVhcCkKKwkgKgor CSAqIFhYWCBCdXQgaW4gdGhpcyBjYXNlIHdlIHNob3VsZCBoYXZlIHByZWZldGNoTWF4VGFy Z2V0PTAsIGJlY2F1c2UgaW4KKwkgKiBpbmRleF9iZWJpbnNjYW5fYml0bWFwKCkgd2UgZGlz YWJsZSBwcmVmZXRjaGluZy4gU28gbWF5YmUgd2Ugc2hvdWxkCisJICoganVzdCBjaGVjayB0 aGF0LgorCSAqLworCWlmICghcHJlZmV0Y2gpCisJCXJldHVybjsKKworCS8qIHdhcyBpdCBp bml0aWFsaXplZCBjb3JyZWN0bHk/ICovCisJLy8gQXNzZXJ0KHByZWZldGNoLT5wcmVmZXRj aEluZGV4ICE9IC0xKTsKKworCS8qCisJICogSWYgd2UgZ290IGhlcmUsIHByZWZldGNoaW5n IGlzIGVuYWJsZWQgYW5kIGl0J3MgYSBub2RlIHRoYXQgc3VwcG9ydHMKKwkgKiBwcmVmZXRj aGluZyAoaS5lLiBpdCBjYW4ndCBiZSBhIGJpdG1hcCBpbmRleCBzY2FuKS4KKwkgKi8KKwlB c3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uKTsKKworCXByZWZldGNoLT5jb3VudEFsbCsrOwor CisJYmxvY2sgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCk7CisKKwkvKgorCSAq IERvIG5vdCBwcmVmZXRjaCB0aGUgc2FtZSBibG9jayBvdmVyIGFuZCBvdmVyIGFnYWluLAor CSAqCisJICogVGhpcyBoYXBwZW5zIGUuZy4gZm9yIGNsdXN0ZXJlZCBvciBuYXR1cmFsbHkg Y29ycmVsYXRlZCBpbmRleGVzCisJICogKGZrZXkgdG8gYSBzZXF1ZW5jZSBJRCkuIEl0J3Mg bm90IGV4cGVuc2l2ZSAodGhlIGJsb2NrIGlzIGluIHBhZ2UKKwkgKiBjYWNoZSBhbHJlYWR5 LCBzbyBubyBJL08pLCBidXQgaXQncyBub3QgZnJlZSBlaXRoZXIuCisJICovCisJaWYgKCFp bmRleF9wcmVmZXRjaF9hZGRfY2FjaGUocHJlZmV0Y2gsIGJsb2NrKSkKKwl7CisJCXByZWZl dGNoLT5jb3VudFByZWZldGNoKys7CisKKwkJUHJlZmV0Y2hCdWZmZXIoc2Nhbi0+aGVhcFJl bGF0aW9uLCBNQUlOX0ZPUktOVU0sIGJsb2NrKTsKKwkJcGdCdWZmZXJVc2FnZS5ibGtzX3By ZWZldGNoZXMrKzsKKwl9Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9l eHBsYWluLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKaW5kZXggMTVmOWJk ZGNkZjMuLjBlNDFmZmE4ZmMwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9l eHBsYWluLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCkBAIC0zNTU4 LDYgKzM1NTgsNyBAQCBzaG93X2J1ZmZlcl91c2FnZShFeHBsYWluU3RhdGUgKmVzLCBjb25z dCBCdWZmZXJVc2FnZSAqdXNhZ2UsIGJvb2wgcGxhbm5pbmcpCiAJCQkJCQkJCSAgIUlOU1RS X1RJTUVfSVNfWkVSTyh1c2FnZS0+YmxrX3dyaXRlX3RpbWUpKTsKIAkJYm9vbAkJaGFzX3Rl bXBfdGltaW5nID0gKCFJTlNUUl9USU1FX0lTX1pFUk8odXNhZ2UtPnRlbXBfYmxrX3JlYWRf dGltZSkgfHwKIAkJCQkJCQkJCSAgICFJTlNUUl9USU1FX0lTX1pFUk8odXNhZ2UtPnRlbXBf YmxrX3dyaXRlX3RpbWUpKTsKKwkJYm9vbAkJaGFzX3ByZWZldGNoZXMgPSAodXNhZ2UtPmJs a3NfcHJlZmV0Y2hlcyA+IDApOwogCQlib29sCQlzaG93X3BsYW5uaW5nID0gKHBsYW5uaW5n ICYmIChoYXNfc2hhcmVkIHx8CiAJCQkJCQkJCQkJCQkgIGhhc19sb2NhbCB8fCBoYXNfdGVt cCB8fCBoYXNfdGltaW5nIHx8CiAJCQkJCQkJCQkJCQkgIGhhc190ZW1wX3RpbWluZykpOwpA QCAtMzY1NSw2ICszNjU2LDIzIEBAIHNob3dfYnVmZmVyX3VzYWdlKEV4cGxhaW5TdGF0ZSAq ZXMsIGNvbnN0IEJ1ZmZlclVzYWdlICp1c2FnZSwgYm9vbCBwbGFubmluZykKIAkJCWFwcGVu ZFN0cmluZ0luZm9DaGFyKGVzLT5zdHIsICdcbicpOwogCQl9CiAKKwkJLyogQXMgYWJvdmUs IHNob3cgb25seSBwb3NpdGl2ZSBjb3VudGVyIHZhbHVlcy4gKi8KKwkJaWYgKGhhc19wcmVm ZXRjaGVzKQorCQl7CisJCQlFeHBsYWluSW5kZW50VGV4dChlcyk7CisJCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKGVzLT5zdHIsICJQcmVmZXRjaGVzOiIpOworCisJCQlpZiAodXNhZ2Ut PmJsa3NfcHJlZmV0Y2hlcyA+IDApCisJCQkJYXBwZW5kU3RyaW5nSW5mbyhlcy0+c3RyLCAi IGJsb2Nrcz0lbGxkIiwKKwkJCQkJCQkJIChsb25nIGxvbmcpIHVzYWdlLT5ibGtzX3ByZWZl dGNoZXMpOworCisJCQlpZiAodXNhZ2UtPmJsa3NfcHJlZmV0Y2hfcm91bmRzID4gMCkKKwkJ CQlhcHBlbmRTdHJpbmdJbmZvKGVzLT5zdHIsICIgcm91bmRzPSVsbGQiLAorCQkJCQkJCQkg KGxvbmcgbG9uZykgdXNhZ2UtPmJsa3NfcHJlZmV0Y2hfcm91bmRzKTsKKworCQkJYXBwZW5k U3RyaW5nSW5mb0NoYXIoZXMtPnN0ciwgJ1xuJyk7CisJCX0KKwogCQlpZiAoc2hvd19wbGFu bmluZykKIAkJCWVzLT5pbmRlbnQtLTsKIAl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjSW5kZXhpbmcuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRl eGluZy5jCmluZGV4IDFkODJiNjRiODk3Li5lNWNlMWRiYzk1MyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY0luZGV4aW5nLmMKQEAgLTc2NSwxMSArNzY1LDE1IEBAIGNoZWNrX2V4Y2x1 c2lvbl9vcl91bmlxdWVfY29uc3RyYWludChSZWxhdGlvbiBoZWFwLCBSZWxhdGlvbiBpbmRl eCwKIAkvKgogCSAqIE1heSBoYXZlIHRvIHJlc3RhcnQgc2NhbiBmcm9tIHRoaXMgcG9pbnQg aWYgYSBwb3RlbnRpYWwgY29uZmxpY3QgaXMKIAkgKiBmb3VuZC4KKwkgKgorCSAqIFhYWCBT aG91bGQgdGhpcyBkbyBpbmRleCBwcmVmZXRjaD8gUHJvYmFibHkgbm90IHdvcnRoIGl0IGZv ciB1bmlxdWUKKwkgKiBjb25zdHJhaW50cywgSSBndWVzcz8gT3RoZXJ3aXNlIHdlIHNob3Vs ZCBjYWxjdWxhdGUgcHJlZmV0Y2hfdGFyZ2V0CisJICoganVzdCBsaWtlIGluIG5vZGVJbmRl eHNjYW4gZXRjLgogCSAqLwogcmV0cnk6CiAJY29uZmxpY3QgPSBmYWxzZTsKIAlmb3VuZF9z ZWxmID0gZmFsc2U7Ci0JaW5kZXhfc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwLCBpbmRl eCwgJkRpcnR5U25hcHNob3QsIGluZG5rZXlhdHRzLCAwKTsKKwlpbmRleF9zY2FuID0gaW5k ZXhfYmVnaW5zY2FuKGhlYXAsIGluZGV4LCAmRGlydHlTbmFwc2hvdCwgaW5kbmtleWF0dHMs IDAsIDAsIDApOwogCWluZGV4X3Jlc2NhbihpbmRleF9zY2FuLCBzY2Fua2V5cywgaW5kbmtl eWF0dHMsIE5VTEwsIDApOwogCiAJd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChpbmRleF9z Y2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgZXhpc3Rpbmdfc2xvdCkpCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCmluZGV4IDlkZDcxNjg0NjE1Li5hOTk3YWFj ODI4ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9u LmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKQEAgLTE1 Nyw4ICsxNTcsMTMgQEAgUmVsYXRpb25GaW5kUmVwbFR1cGxlQnlJbmRleChSZWxhdGlvbiBy ZWwsIE9pZCBpZHhvaWQsCiAJLyogQnVpbGQgc2NhbiBrZXkuICovCiAJc2tleV9hdHRvZmYg PSBidWlsZF9yZXBsaW5kZXhfc2Nhbl9rZXkoc2tleSwgcmVsLCBpZHhyZWwsIHNlYXJjaHNs b3QpOwogCi0JLyogU3RhcnQgYW4gaW5kZXggc2Nhbi4gKi8KLQlzY2FuID0gaW5kZXhfYmVn aW5zY2FuKHJlbCwgaWR4cmVsLCAmc25hcCwgc2tleV9hdHRvZmYsIDApOworCS8qIFN0YXJ0 IGFuIGluZGV4IHNjYW4uCisJICoKKwkgKiBYWFggU2hvdWxkIHRoaXMgZG8gaW5kZXggcHJl ZmV0Y2hpbmc/IFdlJ3JlIGxvb2tpbmcgZm9yIGEgc2luZ2xlIHR1cGxlLAorCSAqIHByb2Jh Ymx5IHVzaW5nIGEgUEsgLyBVTklRVUUgaW5kZXgsIHNvIGRvZXMgbm90IHNlZW0gd29ydGgg aXQuIElmIHdlCisJICogcmVjb25zaWRlciB0aGlzLCBjYWxjbGF0ZSBwcmVmZXRjaF90YXJn ZXQgbGlrZSBpbiBub2RlSW5kZXhzY2FuLgorCSAqLworCXNjYW4gPSBpbmRleF9iZWdpbnNj YW4ocmVsLCBpZHhyZWwsICZzbmFwLCBza2V5X2F0dG9mZiwgMCwgMCwgMCk7CiAKIHJldHJ5 OgogCWZvdW5kID0gZmFsc2U7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9p bnN0cnVtZW50LmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9pbnN0cnVtZW50LmMKaW5kZXgg ZWU3OGE1NzQ5ZDIuLjQzNGJlNTlmY2EwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVj dXRvci9pbnN0cnVtZW50LmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvaW5zdHJ1bWVu dC5jCkBAIC0yMzUsNiArMjM1LDggQEAgQnVmZmVyVXNhZ2VBZGQoQnVmZmVyVXNhZ2UgKmRz dCwgY29uc3QgQnVmZmVyVXNhZ2UgKmFkZCkKIAlkc3QtPmxvY2FsX2Jsa3Nfd3JpdHRlbiAr PSBhZGQtPmxvY2FsX2Jsa3Nfd3JpdHRlbjsKIAlkc3QtPnRlbXBfYmxrc19yZWFkICs9IGFk ZC0+dGVtcF9ibGtzX3JlYWQ7CiAJZHN0LT50ZW1wX2Jsa3Nfd3JpdHRlbiArPSBhZGQtPnRl bXBfYmxrc193cml0dGVuOworCWRzdC0+Ymxrc19wcmVmZXRjaF9yb3VuZHMgKz0gYWRkLT5i bGtzX3ByZWZldGNoX3JvdW5kczsKKwlkc3QtPmJsa3NfcHJlZmV0Y2hlcyArPSBhZGQtPmJs a3NfcHJlZmV0Y2hlczsKIAlJTlNUUl9USU1FX0FERChkc3QtPmJsa19yZWFkX3RpbWUsIGFk ZC0+YmxrX3JlYWRfdGltZSk7CiAJSU5TVFJfVElNRV9BREQoZHN0LT5ibGtfd3JpdGVfdGlt ZSwgYWRkLT5ibGtfd3JpdGVfdGltZSk7CiAJSU5TVFJfVElNRV9BREQoZHN0LT50ZW1wX2Js a19yZWFkX3RpbWUsIGFkZC0+dGVtcF9ibGtfcmVhZF90aW1lKTsKQEAgLTI1Nyw2ICsyNTks OCBAQCBCdWZmZXJVc2FnZUFjY3VtRGlmZihCdWZmZXJVc2FnZSAqZHN0LAogCWRzdC0+bG9j YWxfYmxrc193cml0dGVuICs9IGFkZC0+bG9jYWxfYmxrc193cml0dGVuIC0gc3ViLT5sb2Nh bF9ibGtzX3dyaXR0ZW47CiAJZHN0LT50ZW1wX2Jsa3NfcmVhZCArPSBhZGQtPnRlbXBfYmxr c19yZWFkIC0gc3ViLT50ZW1wX2Jsa3NfcmVhZDsKIAlkc3QtPnRlbXBfYmxrc193cml0dGVu ICs9IGFkZC0+dGVtcF9ibGtzX3dyaXR0ZW4gLSBzdWItPnRlbXBfYmxrc193cml0dGVuOwor CWRzdC0+Ymxrc19wcmVmZXRjaGVzICs9IGFkZC0+Ymxrc19wcmVmZXRjaGVzIC0gc3ViLT5i bGtzX3ByZWZldGNoZXM7CisJZHN0LT5ibGtzX3ByZWZldGNoX3JvdW5kcyArPSBhZGQtPmJs a3NfcHJlZmV0Y2hfcm91bmRzIC0gc3ViLT5ibGtzX3ByZWZldGNoX3JvdW5kczsKIAlJTlNU Ul9USU1FX0FDQ1VNX0RJRkYoZHN0LT5ibGtfcmVhZF90aW1lLAogCQkJCQkJICBhZGQtPmJs a19yZWFkX3RpbWUsIHN1Yi0+YmxrX3JlYWRfdGltZSk7CiAJSU5TVFJfVElNRV9BQ0NVTV9E SUZGKGRzdC0+YmxrX3dyaXRlX3RpbWUsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUlu ZGV4b25seXNjYW4uYwppbmRleCAwYjQzYTliOTY5OS4uM2VjYjg0NzBkNDcgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKKysrIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwpAQCAtODcsMTIgKzg3LDIw IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQkgKiBXZSBy ZWFjaCBoZXJlIGlmIHRoZSBpbmRleCBvbmx5IHNjYW4gaXMgbm90IHBhcmFsbGVsLCBvciBp ZiB3ZSdyZQogCQkgKiBzZXJpYWxseSBleGVjdXRpbmcgYW4gaW5kZXggb25seSBzY2FuIHRo YXQgd2FzIHBsYW5uZWQgdG8gYmUKIAkJICogcGFyYWxsZWwuCisJCSAqCisJCSAqIFhYWCBN YXliZSB3ZSBzaG91bGQgZW5hYmxlIHByZWZldGNoaW5nLCBidXQgcHJlZmV0Y2ggb25seSBw YWdlcyB0aGF0CisJCSAqIGFyZSBub3QgYWxsLXZpc2libGUgKGJ1dCBjaGVja2luZyB0aGF0 IGZyb20gdGhlIGluZGV4IGNvZGUgc2VlbXMgbGlrZQorCQkgKiBhIHZpb2xhdGlvbiBvZiBs YXllcmluZyBldGMpLgorCQkgKgorCQkgKiBYWFggVGhpcyBtaWdodCBsZWFkIHRvIElPUyBi ZWluZyBzbG93ZXIgdGhhbiBwbGFpbiBpbmRleCBzY2FuLCBpZiB0aGUKKwkJICogdGFibGUg aGFzIGEgbG90IG9mIHBhZ2VzIHRoYXQgbmVlZCByZWNoZWNrLgogCQkgKi8KIAkJc2NhbmRl c2MgPSBpbmRleF9iZWdpbnNjYW4obm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAogCQkJ CQkJCQkgICBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywKIAkJCQkJCQkJICAgZXN0YXRlLT5l c19zbmFwc2hvdCwKIAkJCQkJCQkJICAgbm9kZS0+aW9zc19OdW1TY2FuS2V5cywKLQkJCQkJ CQkJICAgbm9kZS0+aW9zc19OdW1PcmRlckJ5S2V5cyk7CisJCQkJCQkJCSAgIG5vZGUtPmlv c3NfTnVtT3JkZXJCeUtleXMsCisJCQkJCQkJCSAgIDAsIDApOwkvKiBubyBpbmRleCBwcmVm ZXRjaCBmb3IgSU9TICovCiAKIAkJbm9kZS0+aW9zc19TY2FuRGVzYyA9IHNjYW5kZXNjOwog CkBAIC02NzQsNyArNjgyLDggQEAgRXhlY0luZGV4T25seVNjYW5Jbml0aWFsaXplRFNNKElu ZGV4T25seVNjYW5TdGF0ZSAqbm9kZSwKIAkJCQkJCQkJIG5vZGUtPmlvc3NfUmVsYXRpb25E ZXNjLAogCQkJCQkJCQkgbm9kZS0+aW9zc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJIG5vZGUt Pmlvc3NfTnVtT3JkZXJCeUtleXMsCi0JCQkJCQkJCSBwaXNjYW4pOworCQkJCQkJCQkgcGlz Y2FuLAorCQkJCQkJCQkgMCwgMCk7CS8qIG5vIGluZGV4IHByZWZldGNoIGZvciBJT1MgKi8K IAlub2RlLT5pb3NzX1NjYW5EZXNjLT54c193YW50X2l0dXAgPSB0cnVlOwogCW5vZGUtPmlv c3NfVk1CdWZmZXIgPSBJbnZhbGlkQnVmZmVyOwogCkBAIC03MTksNyArNzI4LDggQEAgRXhl Y0luZGV4T25seVNjYW5Jbml0aWFsaXplV29ya2VyKEluZGV4T25seVNjYW5TdGF0ZSAqbm9k ZSwKIAkJCQkJCQkJIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjLAogCQkJCQkJCQkgbm9kZS0+ aW9zc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJIG5vZGUtPmlvc3NfTnVtT3JkZXJCeUtleXMs Ci0JCQkJCQkJCSBwaXNjYW4pOworCQkJCQkJCQkgcGlzY2FuLAorCQkJCQkJCQkgMCwgMCk7 CS8qIG5vIGluZGV4IHByZWZldGNoIGZvciBJT1MgKi8KIAlub2RlLT5pb3NzX1NjYW5EZXNj LT54c193YW50X2l0dXAgPSB0cnVlOwogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJ bmRleHNjYW4uYwppbmRleCA0NTQwYzc3ODFkMi4uNzFhZTZhNDdjZTUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYworKysgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRl ICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2lu Y2x1ZGUgInV0aWxzL3JlbC5oIgorI2luY2x1ZGUgInV0aWxzL3NwY2NhY2hlLmgiCiAKIC8q CiAgKiBXaGVuIGFuIG9yZGVyaW5nIG9wZXJhdG9yIGlzIHVzZWQsIHR1cGxlcyBmZXRjaGVk IGZyb20gdGhlIGluZGV4IHRoYXQKQEAgLTg1LDYgKzg2LDcgQEAgSW5kZXhOZXh0KEluZGV4 U2NhblN0YXRlICpub2RlKQogCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uOwogCUluZGV4U2Nh bkRlc2Mgc2NhbmRlc2M7CiAJVHVwbGVUYWJsZVNsb3QgKnNsb3Q7CisJUmVsYXRpb24gaGVh cFJlbCA9IG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbjsKIAogCS8qCiAJICogZXh0cmFj dCBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZnJvbSBpbmRleCBzY2FuIG5vZGUKQEAgLTEwMyw2 ICsxMDUsMjIgQEAgSW5kZXhOZXh0KEluZGV4U2NhblN0YXRlICpub2RlKQogCiAJaWYgKHNj YW5kZXNjID09IE5VTEwpCiAJeworCQlpbnQJcHJlZmV0Y2hfdGFyZ2V0OworCQlpbnQJcHJl ZmV0Y2hfcmVzZXQ7CisKKwkJLyoKKwkJICogRGV0ZXJtaW5lIG51bWJlciBvZiBoZWFwIHBh Z2VzIHRvIHByZWZldGNoIGZvciB0aGlzIGluZGV4LiBUaGlzIGlzCisJCSAqIGVzc2VudGlh bGx5IGp1c3QgZWZmZWN0aXZlX2lvX2NvbmN1cnJlbmN5IGZvciB0aGUgdGFibGUgKG9yIHRo ZQorCQkgKiB0YWJsZXNwYWNlIGl0J3MgaW4pLgorCQkgKgorCQkgKiBYWFggU2hvdWxkIHRo aXMgYWxzbyBsb29rIGF0IHBsYW4ucGxhbl9yb3dzIGFuZCBtYXliZSBjYXAgdGhlIHRhcmdl dAorCQkgKiB0byB0aGF0PyBQb2ludGxlc3MgdG8gcHJlZmV0Y2ggbW9yZSB0aGFuIHdlIGV4 cGVjdCB0byB1c2UuIE9yIG1heWJlCisJCSAqIGp1c3QgcmVzZXQgdG8gdGhhdCB2YWx1ZSBk dXJpbmcgcHJlZmV0Y2hpbmcsIGFmdGVyIHJlYWRpbmcgdGhlIG5leHQKKwkJICogaW5kZXgg cGFnZSAob3IgcmF0aGVyIGFmdGVyIHJlc2Nhbik/CisJCSAqLworCQlwcmVmZXRjaF90YXJn ZXQgPSBnZXRfdGFibGVzcGFjZV9pb19jb25jdXJyZW5jeShoZWFwUmVsLT5yZF9yZWwtPnJl bHRhYmxlc3BhY2UpOworCQlwcmVmZXRjaF9yZXNldCA9IE1pbihwcmVmZXRjaF90YXJnZXQs IG5vZGUtPnNzLnBzLnBsYW4tPnBsYW5fcm93cyk7CisKIAkJLyoKIAkJICogV2UgcmVhY2gg aGVyZSBpZiB0aGUgaW5kZXggc2NhbiBpcyBub3QgcGFyYWxsZWwsIG9yIGlmIHdlJ3JlCiAJ CSAqIHNlcmlhbGx5IGV4ZWN1dGluZyBhbiBpbmRleCBzY2FuIHRoYXQgd2FzIHBsYW5uZWQg dG8gYmUgcGFyYWxsZWwuCkBAIC0xMTEsNyArMTI5LDkgQEAgSW5kZXhOZXh0KEluZGV4U2Nh blN0YXRlICpub2RlKQogCQkJCQkJCQkgICBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAogCQkJ CQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAogCQkJCQkJCQkgICBub2RlLT5pc3NfTnVt U2NhbktleXMsCi0JCQkJCQkJCSAgIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cyk7CisJCQkJ CQkJCSAgIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cywKKwkJCQkJCQkJICAgcHJlZmV0Y2hf dGFyZ2V0LAorCQkJCQkJCQkgICBwcmVmZXRjaF9yZXNldCk7CiAKIAkJbm9kZS0+aXNzX1Nj YW5EZXNjID0gc2NhbmRlc2M7CiAKQEAgLTE5OCw2ICsyMTgsMjMgQEAgSW5kZXhOZXh0V2l0 aFJlb3JkZXIoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAKIAlpZiAoc2NhbmRlc2MgPT0gTlVM TCkKIAl7CisJCVJlbGF0aW9uIGhlYXBSZWwgPSBub2RlLT5zcy5zc19jdXJyZW50UmVsYXRp b247CisJCWludAlwcmVmZXRjaF90YXJnZXQ7CisJCWludAlwcmVmZXRjaF9yZXNldDsKKwor CQkvKgorCQkgKiBEZXRlcm1pbmUgbnVtYmVyIG9mIGhlYXAgcGFnZXMgdG8gcHJlZmV0Y2gg Zm9yIHRoaXMgaW5kZXguIFRoaXMgaXMKKwkJICogZXNzZW50aWFsbHkganVzdCBlZmZlY3Rp dmVfaW9fY29uY3VycmVuY3kgZm9yIHRoZSB0YWJsZSAob3IgdGhlCisJCSAqIHRhYmxlc3Bh Y2UgaXQncyBpbikuCisJCSAqCisJCSAqIFhYWCBTaG91bGQgdGhpcyBhbHNvIGxvb2sgYXQg cGxhbi5wbGFuX3Jvd3MgYW5kIG1heWJlIGNhcCB0aGUgdGFyZ2V0CisJCSAqIHRvIHRoYXQ/ IFBvaW50bGVzcyB0byBwcmVmZXRjaCBtb3JlIHRoYW4gd2UgZXhwZWN0IHRvIHVzZS4gT3Ig bWF5YmUKKwkJICoganVzdCByZXNldCB0byB0aGF0IHZhbHVlIGR1cmluZyBwcmVmZXRjaGlu ZywgYWZ0ZXIgcmVhZGluZyB0aGUgbmV4dAorCQkgKiBpbmRleCBwYWdlIChvciByYXRoZXIg YWZ0ZXIgcmVzY2FuKT8KKwkJICovCisJCXByZWZldGNoX3RhcmdldCA9IGdldF90YWJsZXNw YWNlX2lvX2NvbmN1cnJlbmN5KGhlYXBSZWwtPnJkX3JlbC0+cmVsdGFibGVzcGFjZSk7CisJ CXByZWZldGNoX3Jlc2V0ID0gTWluKHByZWZldGNoX3RhcmdldCwgbm9kZS0+c3MucHMucGxh bi0+cGxhbl9yb3dzKTsKKwogCQkvKgogCQkgKiBXZSByZWFjaCBoZXJlIGlmIHRoZSBpbmRl eCBzY2FuIGlzIG5vdCBwYXJhbGxlbCwgb3IgaWYgd2UncmUKIAkJICogc2VyaWFsbHkgZXhl Y3V0aW5nIGFuIGluZGV4IHNjYW4gdGhhdCB3YXMgcGxhbm5lZCB0byBiZSBwYXJhbGxlbC4K QEAgLTIwNiw3ICsyNDMsOSBAQCBJbmRleE5leHRXaXRoUmVvcmRlcihJbmRleFNjYW5TdGF0 ZSAqbm9kZSkKIAkJCQkJCQkJICAgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywKIAkJCQkJCQkJ ICAgZXN0YXRlLT5lc19zbmFwc2hvdCwKIAkJCQkJCQkJICAgbm9kZS0+aXNzX051bVNjYW5L ZXlzLAotCQkJCQkJCQkgICBub2RlLT5pc3NfTnVtT3JkZXJCeUtleXMpOworCQkJCQkJCQkg ICBub2RlLT5pc3NfTnVtT3JkZXJCeUtleXMsCisJCQkJCQkJCSAgIHByZWZldGNoX3Rhcmdl dCwKKwkJCQkJCQkJICAgcHJlZmV0Y2hfcmVzZXQpOwogCiAJCW5vZGUtPmlzc19TY2FuRGVz YyA9IHNjYW5kZXNjOwogCkBAIC0xNjc4LDYgKzE3MTcsMjEgQEAgRXhlY0luZGV4U2Nhbklu aXRpYWxpemVEU00oSW5kZXhTY2FuU3RhdGUgKm5vZGUsCiB7CiAJRVN0YXRlCSAgICplc3Rh dGUgPSBub2RlLT5zcy5wcy5zdGF0ZTsKIAlQYXJhbGxlbEluZGV4U2NhbkRlc2MgcGlzY2Fu OworCVJlbGF0aW9uCWhlYXBSZWw7CisJaW50CQkJcHJlZmV0Y2hfdGFyZ2V0OworCWludAkJ CXByZWZldGNoX3Jlc2V0OworCisJLyoKKwkgKiBEZXRlcm1pbmUgbnVtYmVyIG9mIGhlYXAg cGFnZXMgdG8gcHJlZmV0Y2ggZm9yIHRoaXMgaW5kZXguIFRoaXMgaXMKKwkgKiBlc3NlbnRp YWxseSBqdXN0IGVmZmVjdGl2ZV9pb19jb25jdXJyZW5jeSBmb3IgdGhlIHRhYmxlIChvciB0 aGUKKwkgKiB0YWJsZXNwYWNlIGl0J3MgaW4pLgorCSAqCisJICogWFhYIE1heWJlIHJlZHVj ZSB0aGUgdmFsdWUgd2l0aCBwYXJhbGxlbCB3b3JrZXJzPworCSAqLworCWhlYXBSZWwgPSBu b2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb247CisKKwlwcmVmZXRjaF90YXJnZXQgPSBnZXRf dGFibGVzcGFjZV9pb19jb25jdXJyZW5jeShoZWFwUmVsLT5yZF9yZWwtPnJlbHRhYmxlc3Bh Y2UpOworCXByZWZldGNoX3Jlc2V0ID0gTWluKHByZWZldGNoX3RhcmdldCwgbm9kZS0+c3Mu cHMucGxhbi0+cGxhbl9yb3dzKTsKIAogCXBpc2NhbiA9IHNobV90b2NfYWxsb2NhdGUocGN4 dC0+dG9jLCBub2RlLT5pc3NfUHNjYW5MZW4pOwogCWluZGV4X3BhcmFsbGVsc2Nhbl9pbml0 aWFsaXplKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKQEAgLTE2OTAsNyArMTc0NCw5 IEBAIEV4ZWNJbmRleFNjYW5Jbml0aWFsaXplRFNNKEluZGV4U2NhblN0YXRlICpub2RlLAog CQkJCQkJCQkgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywKIAkJCQkJCQkJIG5vZGUtPmlzc19O dW1TY2FuS2V5cywKIAkJCQkJCQkJIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cywKLQkJCQkJ CQkJIHBpc2Nhbik7CisJCQkJCQkJCSBwaXNjYW4sCisJCQkJCQkJCSBwcmVmZXRjaF90YXJn ZXQsCisJCQkJCQkJCSBwcmVmZXRjaF9yZXNldCk7CiAKIAkvKgogCSAqIElmIG5vIHJ1bi10 aW1lIGtleXMgdG8gY2FsY3VsYXRlIG9yIHRoZXkgYXJlIHJlYWR5LCBnbyBhaGVhZCBhbmQg cGFzcwpAQCAtMTcyNiw2ICsxNzgyLDE0IEBAIEV4ZWNJbmRleFNjYW5Jbml0aWFsaXplV29y a2VyKEluZGV4U2NhblN0YXRlICpub2RlLAogCQkJCQkJCSAgUGFyYWxsZWxXb3JrZXJDb250 ZXh0ICpwd2N4dCkKIHsKIAlQYXJhbGxlbEluZGV4U2NhbkRlc2MgcGlzY2FuOworCVJlbGF0 aW9uCWhlYXBSZWw7CisJaW50CQkJcHJlZmV0Y2hfdGFyZ2V0OworCWludAkJCXByZWZldGNo X3Jlc2V0OworCisJaGVhcFJlbCA9IG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbjsKKwor CXByZWZldGNoX3RhcmdldCA9IGdldF90YWJsZXNwYWNlX2lvX2NvbmN1cnJlbmN5KGhlYXBS ZWwtPnJkX3JlbC0+cmVsdGFibGVzcGFjZSk7CisJcHJlZmV0Y2hfcmVzZXQgPSBNaW4ocHJl ZmV0Y2hfdGFyZ2V0LCBub2RlLT5zcy5wcy5wbGFuLT5wbGFuX3Jvd3MpOwogCiAJcGlzY2Fu ID0gc2htX3RvY19sb29rdXAocHdjeHQtPnRvYywgbm9kZS0+c3MucHMucGxhbi0+cGxhbl9u b2RlX2lkLCBmYWxzZSk7CiAJbm9kZS0+aXNzX1NjYW5EZXNjID0KQEAgLTE3MzMsNyArMTc5 Nyw5IEBAIEV4ZWNJbmRleFNjYW5Jbml0aWFsaXplV29ya2VyKEluZGV4U2NhblN0YXRlICpu b2RlLAogCQkJCQkJCQkgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywKIAkJCQkJCQkJIG5vZGUt Pmlzc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cywK LQkJCQkJCQkJIHBpc2Nhbik7CisJCQkJCQkJCSBwaXNjYW4sCisJCQkJCQkJCSBwcmVmZXRj aF90YXJnZXQsCisJCQkJCQkJCSBwcmVmZXRjaF9yZXNldCk7CiAKIAkvKgogCSAqIElmIG5v IHJ1bi10aW1lIGtleXMgdG8gY2FsY3VsYXRlIG9yIHRoZXkgYXJlIHJlYWR5LCBnbyBhaGVh ZCBhbmQgcGFzcwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2Vu ZGVyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYwppbmRleCBkM2Ex MzZiNmY1NS4uYzcyNDg4NzdmNmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL3dhbHNlbmRlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRl ci5jCkBAIC0xMTMxLDYgKzExMzEsOCBAQCBDcmVhdGVSZXBsaWNhdGlvblNsb3QoQ3JlYXRl UmVwbGljYXRpb25TbG90Q21kICpjbWQpCiAJCQluZWVkX2Z1bGxfc25hcHNob3QgPSB0cnVl OwogCQl9CiAKKwkJZWxvZyhMT0csICJzbG90ID0gJXMgIG5lZWRfZnVsbF9zbmFwc2hvdCA9 ICVkIiwgY21kLT5zbG90bmFtZSwgbmVlZF9mdWxsX3NuYXBzaG90KTsKKwogCQljdHggPSBD cmVhdGVJbml0RGVjb2RpbmdDb250ZXh0KGNtZC0+cGx1Z2luLCBOSUwsIG5lZWRfZnVsbF9z bmFwc2hvdCwKIAkJCQkJCQkJCQlJbnZhbGlkWExvZ1JlY1B0ciwKIAkJCQkJCQkJCQlYTF9S T1VUSU5FKC5wYWdlX3JlYWQgPSBsb2dpY2FsX3JlYWRfeGxvZ19wYWdlLApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGls cy9hZHQvc2VsZnVuY3MuYwppbmRleCBjNGZjZDAwNzZlYS4uMGIwMmI2MjY1ZDAgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCisrKyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCkBAIC02MjE4LDcgKzYyMTgsNyBAQCBnZXRfYWN0 dWFsX3ZhcmlhYmxlX2VuZHBvaW50KFJlbGF0aW9uIGhlYXBSZWwsCiAKIAlpbmRleF9zY2Fu ID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWwsIGluZGV4UmVsLAogCQkJCQkJCQkgJlNuYXBz aG90Tm9uVmFjdXVtYWJsZSwKLQkJCQkJCQkJIDEsIDApOworCQkJCQkJCQkgMSwgMCwgMCwg MCk7CS8qIFhYWCBtYXliZSBkbyBwcmVmZXRjaD8gKi8KIAkvKiBTZXQgaXQgdXAgZm9yIGlu ZGV4LW9ubHkgc2NhbiAqLwogCWluZGV4X3NjYW4tPnhzX3dhbnRfaXR1cCA9IHRydWU7CiAJ aW5kZXhfcmVzY2FuKGluZGV4X3NjYW4sIHNjYW5rZXlzLCAxLCBOVUxMLCAwKTsKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNz L2dlbmFtLmgKaW5kZXggYTMwODc5NTY2NTQuLmYzZWZmZmM0YTg0IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2Vu YW0uaApAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9zZGlyLmgiCiAjaW5j bHVkZSAiYWNjZXNzL3NrZXkuaCIKICNpbmNsdWRlICJub2Rlcy90aWRiaXRtYXAuaCIKKyNp bmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG9ja2RlZnMu aCIKICNpbmNsdWRlICJ1dGlscy9yZWxjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBz aG90LmgiCkBAIC0xNTIsNyArMTUzLDkgQEAgZXh0ZXJuIGJvb2wgaW5kZXhfaW5zZXJ0KFJl bGF0aW9uIGluZGV4UmVsYXRpb24sCiBleHRlcm4gSW5kZXhTY2FuRGVzYyBpbmRleF9iZWdp bnNjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCQkJCQkJIFJlbGF0aW9uIGluZGV4 UmVsYXRpb24sCiAJCQkJCQkJCQkgU25hcHNob3Qgc25hcHNob3QsCi0JCQkJCQkJCQkgaW50 IG5rZXlzLCBpbnQgbm9yZGVyYnlzKTsKKwkJCQkJCQkJCSBpbnQgbmtleXMsIGludCBub3Jk ZXJieXMsCisJCQkJCQkJCQkgaW50IHByZWZldGNoX3RhcmdldCwKKwkJCQkJCQkJCSBpbnQg cHJlZmV0Y2hfcmVzZXQpOwogZXh0ZXJuIEluZGV4U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2Fu X2JpdG1hcChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogCQkJCQkJCQkJCQlTbmFwc2hvdCBz bmFwc2hvdCwKIAkJCQkJCQkJCQkJaW50IG5rZXlzKTsKQEAgLTE2OSw3ICsxNzIsOSBAQCBl eHRlcm4gdm9pZCBpbmRleF9wYXJhbGxlbHNjYW5faW5pdGlhbGl6ZShSZWxhdGlvbiBoZWFw UmVsYXRpb24sCiBleHRlcm4gdm9pZCBpbmRleF9wYXJhbGxlbHJlc2NhbihJbmRleFNjYW5E ZXNjIHNjYW4pOwogZXh0ZXJuIEluZGV4U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2FuX3BhcmFs bGVsKFJlbGF0aW9uIGhlYXByZWwsCiAJCQkJCQkJCQkJCSAgUmVsYXRpb24gaW5kZXhyZWws IGludCBua2V5cywgaW50IG5vcmRlcmJ5cywKLQkJCQkJCQkJCQkJICBQYXJhbGxlbEluZGV4 U2NhbkRlc2MgcHNjYW4pOworCQkJCQkJCQkJCQkgIFBhcmFsbGVsSW5kZXhTY2FuRGVzYyBw c2NhbiwKKwkJCQkJCQkJCQkJICBpbnQgcHJlZmV0Y2hfdGFyZ2V0LAorCQkJCQkJCQkJCQkg IGludCBwcmVmZXRjaF9yZXNldCk7CiBleHRlcm4gSXRlbVBvaW50ZXIgaW5kZXhfZ2V0bmV4 dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGly ZWN0aW9uKTsKIHN0cnVjdCBUdXBsZVRhYmxlU2xvdDsKQEAgLTIzMCw0ICsyMzUsMTA4IEBA IGV4dGVybiBIZWFwVHVwbGUgc3lzdGFibGVfZ2V0bmV4dF9vcmRlcmVkKFN5c1NjYW5EZXNj IHN5c3NjYW4sCiAJCQkJCQkJCQkJICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7CiBleHRl cm4gdm9pZCBzeXN0YWJsZV9lbmRzY2FuX29yZGVyZWQoU3lzU2NhbkRlc2Mgc3lzc2Nhbik7 CiAKKy8qCisgKiBYWFggbm90IHN1cmUgaXQncyB0aGUgcmlnaHQgcGxhY2UgdG8gZGVmaW5l IHRoZXNlIGNhbGxiYWNrcyBldGMuCisgKi8KK3R5cGVkZWYgdm9pZCAoKnByZWZldGNoZXJf Z2V0cmFuZ2VfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW5kZXNjLAorCQkJCQkJCQkJ CQkgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkgIGludCAqc3RhcnQs IGludCAqZW5kLAorCQkJCQkJCQkJCQkgIGJvb2wgKnJlc2V0KTsKKwordHlwZWRlZiBCbG9j a051bWJlciAoKnByZWZldGNoZXJfZ2V0YmxvY2tfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNj IHNjYW5kZXNjLAorCQkJCQkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJ CQkJCQkJCQkJCQkgaW50IGluZGV4KTsKKworLyoKKyAqIENhY2hlIG9mIHJlY2VudGx5IHBy ZWZldGNoZWQgYmxvY2tzLCBvcmdhbml6ZWQgYXMgYSBoYXNoIHRhYmxlIG9mCisgKiBzbWFs bCBMUlUgY2FjaGVzLiBEb2Vzbid0IG5lZWQgdG8gYmUgcGVyZmVjdGx5IGFjY3VyYXRlLCBi dXQgd2UKKyAqIGFpbSB0byBtYWtlIGZhbHNlIHBvc2l0aXZlcy9uZWdhdGl2ZXMgcmVhc29u YWJseSBsb3cuCisgKi8KK3R5cGVkZWYgc3RydWN0IFByZWZldGNoQ2FjaGVFbnRyeSB7CisJ QmxvY2tOdW1iZXIJCWJsb2NrOworCXVpbnQ2NAkJCXJlcXVlc3Q7Cit9IFByZWZldGNoQ2Fj aGVFbnRyeTsKKworLyoKKyAqIFNpemUgb2YgdGhlIGNhY2hlIG9mIHJlY2VudGx5IHByZWZl dGNoZWQgYmxvY2tzIC0gc2hvdWxkbid0IGJlIHRvbworICogc21hbGwgb3IgdG9vIGxhcmdl LiAxMDI0IHNlZW1zIGFib3V0IHJpZ2h0LCBpdCBjb3ZlcnMgfjhNQiBvZiBkYXRhLgorICog SXQncyBzb21ld2hhdCBhcmJpdHJhcnksIHRoZXJlJ3Mgbm8gcGFydGljdWxhciBmb3JtdWxh IHNheWluZyBpdAorICogc2hvdWxkIG5vdCBiZSBoaWdoZXIvbG93ZXIuCisgKgorICogVGhl IGNhY2hlIGlzIHN0cnVjdHVyZWQgYXMgYW4gYXJyYXkgb2Ygc21hbGwgTFJVIGNhY2hlcywg c28gdGhlIHRvdGFsCisgKiBzaXplIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgTFJVIHNp emUuIFRoZSBMUlUgc2hvdWxkIGJlIHRpbnkgdG8KKyAqIGtlZXAgbGluZWFyIHNlYXJjaCBj aGVhcCBlbm91Z2guCisgKgorICogWFhYIE1heWJlIHdlIGNvdWxkIGNvbnNpZGVyIGVmZmVj dGl2ZV9jYWNoZV9zaXplIG9yIHNvbWV0aGluZz8KKyAqLworI2RlZmluZQkJUFJFRkVUQ0hf TFJVX1NJWkUJCTgKKyNkZWZpbmUJCVBSRUZFVENIX0xSVV9DT1VOVAkJMTI4CisjZGVmaW5l CQlQUkVGRVRDSF9DQUNIRV9TSVpFCQkoUFJFRkVUQ0hfTFJVX1NJWkUgKiBQUkVGRVRDSF9M UlVfQ09VTlQpCisKKy8qCisgKiBVc2VkIHRvIGRldGVjdCBzZXF1ZW50aWFsIHBhdHRlcm5z IChhbmQgZGlzYWJsZSBwcmVmZXRjaGluZykuCisgKi8KKyNkZWZpbmUJCVBSRUZFVENIX1FV RVVFX0hJU1RPUlkJCQk4CisjZGVmaW5lCQlQUkVGRVRDSF9TRVFfUEFUVEVSTl9CTE9DS1MJ CTQKKworCit0eXBlZGVmIHN0cnVjdCBJbmRleFByZWZldGNoRGF0YQoreworCS8qCisJICog WFhYIFdlIG5lZWQgdG8gZGlzYWJsZSB0aGlzIGluIHNvbWUgY2FzZXMgKGUuZy4gd2hlbiB1 c2luZyBpbmRleC1vbmx5CisJICogc2NhbnMsIHdlIGRvbid0IHdhbnQgdG8gcHJlZmV0Y2gg cGFnZXMpLiBPciBtYXliZSB3ZSBzaG91bGQgcHJlZmV0Y2gKKwkgKiBvbmx5IHBhZ2VzIHRo YXQgYXJlIG5vdCBhbGwtdmlzaWJsZSwgdGhhdCdkIGJlIGV2ZW4gYmV0dGVyLgorCSAqLwor CWludAkJCXByZWZldGNoVGFyZ2V0OwkvKiBob3cgZmFyIHdlIHNob3VsZCBiZSBwcmVmZXRj aGluZyAqLworCWludAkJCXByZWZldGNoTWF4VGFyZ2V0OwkvKiBtYXhpbXVtIHByZWZldGNo aW5nIGRpc3RhbmNlICovCisJaW50CQkJcHJlZmV0Y2hSZXNldDsJLyogcmVzZXQgdG8gdGhp cyBkaXN0YW5jZSBvbiByZXNjYW4gKi8KKwlib29sCQlwcmVmZXRjaERvbmU7CS8qIGRpZCB3 ZSBnZXQgYWxsIFRJRHMgZnJvbSB0aGUgaW5kZXg/ICovCisKKwkvKiBydW50aW1lIHN0YXRp c3RpY3MgKi8KKwl1aW50NjQJCWNvdW50QWxsOwkJLyogYWxsIHByZWZldGNoIHJlcXVlc3Rz ICovCisJdWludDY0CQljb3VudFByZWZldGNoOwkvKiBhY3R1YWwgcHJlZmV0Y2hlcyAqLwor CXVpbnQ2NAkJY291bnRTa2lwU2VxdWVudGlhbDsKKwl1aW50NjQJCWNvdW50U2tpcENhY2hl ZDsKKworCS8qCisJICogUXVldWUgb2YgVElEcyB0byBwcmVmZXRjaC4KKwkgKgorCSAqIFhY WCBTaXppbmcgZm9yIE1BWF9JT19DT05DVVJSRU5DWSBtYXkgYmUgb3ZlcmtpbGwsIGJ1dCBp dCBzZWVtcyBzaW1wbGVyCisJICogdGhhbiBkeW5hbWljYWxseSBhZGp1c3RpbmcgZm9yIGN1 c3RvbSB2YWx1ZXMuCisJICovCisJSXRlbVBvaW50ZXJEYXRhCXF1ZXVlSXRlbXNbTUFYX0lP X0NPTkNVUlJFTkNZXTsKKwl1aW50NjQJCQlxdWV1ZUluZGV4OwkvKiBuZXh0IFRJRCB0byBw cmVmZXRjaCAqLworCXVpbnQ2NAkJCXF1ZXVlU3RhcnQ7CS8qIGZpcnN0IHZhbGlkIFRJRCBp biBxdWV1ZSAqLworCXVpbnQ2NAkJCXF1ZXVlRW5kOwkvKiBmaXJzdCBpbnZhbGlkIChlbXB0 eSkgVElEIGluIHF1ZXVlICovCisKKwkvKgorCSAqIEEgY291cGxlIG9mIGxhc3QgcHJlZmV0 Y2hlZCBibG9ja3MsIHVzZWQgdG8gY2hlY2sgZm9yIGNlcnRhaW4gYWNjZXNzCisJICogcGF0 dGVybiBhbmQgc2tpcCBwcmVmZXRjaGluZyAtIGUuZy4gZm9yIHNlcXVlbnRpYWwgYWNjZXNz KS4KKwkgKgorCSAqIFhYWCBTZXBhcmF0ZSBmcm9tIHRoZSBtYWluIHF1ZXVlLCBiZWNhdXNl IHdlIG9ubHkgd2FudCB0byBjb21wYXJlIHRoZQorCSAqIGJsb2NrIG51bWJlcnMsIG5vdCB0 aGUgd2hvbGUgVElELiBJbiBzZXF1ZW50aWFsIGFjY2VzcyBpdCdzIGxpa2VseSB3ZQorCSAq IHJlYWQgbWFueSBpdGVtcyBmcm9tIGVhY2ggcGFnZSwgYW5kIHdlIGRvbid0IHdhbnQgdG8g Y2hlY2sgbWFueSBpdGVtcworCSAqIChhcyB0aGF0IGlzIG11Y2ggbW9yZSBleHBlbnNpdmUp LgorCSAqLworCUJsb2NrTnVtYmVyCQlibG9ja0l0ZW1zW1BSRUZFVENIX1FVRVVFX0hJU1RP UlldOworCXVpbnQ2NAkJCWJsb2NrSW5kZXg7CS8qIGluZGV4IGluIHRoZSBibG9jayAocG9p bnRzIHRvIHRoZSBmaXJzdAorCQkJCQkJCQkgKiBlbXB0eSBlbnRyeSkqLworCisJLyoKKwkg KiBDYWNoZSBvZiByZWNlbnRseSBwcmVmZXRjaGVkIGJsb2Nrcywgb3JnYW5pemVkIGFzIGEg aGFzaCB0YWJsZSBvZgorCSAqIHNtYWxsIExSVSBjYWNoZXMuCisJICovCisJdWludDY0CQkJ CXByZWZldGNoUmVxTnVtYmVyOworCVByZWZldGNoQ2FjaGVFbnRyeQlwcmVmZXRjaENhY2hl W1BSRUZFVENIX0NBQ0hFX1NJWkVdOworCit9IEluZGV4UHJlZmV0Y2hEYXRhOworCisjZGVm aW5lIFBSRUZFVENIX1FVRVVFX0lOREVYKGEpCSgoYSkgJSAoTUFYX0lPX0NPTkNVUlJFTkNZ KSkKKyNkZWZpbmUgUFJFRkVUQ0hfUVVFVUVfRU1QVFkocCkJKChwKS0+cXVldWVFbmQgPT0g KHApLT5xdWV1ZUluZGV4KQorI2RlZmluZSBQUkVGRVRDSF9FTkFCTEVEKHApCQkoKHApICYm ICgocCktPnByZWZldGNoTWF4VGFyZ2V0ID4gMCkpCisjZGVmaW5lIFBSRUZFVENIX0ZVTEwo cCkJCSgocCktPnF1ZXVlRW5kIC0gKHApLT5xdWV1ZUluZGV4ID09IChwKS0+cHJlZmV0Y2hU YXJnZXQpCisjZGVmaW5lIFBSRUZFVENIX0RPTkUocCkJCSgocCkgJiYgKChwKS0+cHJlZmV0 Y2hEb25lICYmIFBSRUZFVENIX1FVRVVFX0VNUFRZKHApKSkKKyNkZWZpbmUgUFJFRkVUQ0hf QUNUSVZFKHApCQkoUFJFRkVUQ0hfRU5BQkxFRChwKSAmJiAhKHApLT5wcmVmZXRjaERvbmUp CisjZGVmaW5lIFBSRUZFVENIX0JMT0NLX0lOREVYKHYpCSgodikgJSBQUkVGRVRDSF9RVUVV RV9ISVNUT1JZKQorCiAjZW5kaWYJCQkJCQkJLyogR0VOQU1fSCAqLwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxz Y2FuLmgKaW5kZXggZDAzMzYwZWFjMDQuLmMxMTlmZTU5N2Q4IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxz Y2FuLmgKQEAgLTEwNiw2ICsxMDYsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhGZXRjaFRh YmxlRGF0YQogCVJlbGF0aW9uCXJlbDsKIH0gSW5kZXhGZXRjaFRhYmxlRGF0YTsKIAorLyoK KyAqIEZvcndhcmQgZGVjbGFyYXRpb24sIGRlZmluZWQgaW4gZ2VuYW0uaC4KKyAqLwordHlw ZWRlZiBzdHJ1Y3QgSW5kZXhQcmVmZXRjaERhdGEgSW5kZXhQcmVmZXRjaERhdGE7Cit0eXBl ZGVmIHN0cnVjdCBJbmRleFByZWZldGNoRGF0YSAqSW5kZXhQcmVmZXRjaDsKKwogLyoKICAq IFdlIHVzZSB0aGUgc2FtZSBJbmRleFNjYW5EZXNjRGF0YSBzdHJ1Y3R1cmUgZm9yIGJvdGgg YW1nZXR0dXBsZS1iYXNlZAogICogYW5kIGFtZ2V0Yml0bWFwLWJhc2VkIGluZGV4IHNjYW5z LiAgU29tZSBmaWVsZHMgYXJlIG9ubHkgcmVsZXZhbnQgaW4KQEAgLTE2Miw2ICsxNjgsOSBA QCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YQogCWJvb2wJICAgKnhzX29yZGVy YnludWxsczsKIAlib29sCQl4c19yZWNoZWNrb3JkZXJieTsKIAorCS8qIHByZWZldGNoaW5n IHN0YXRlIChvciBOVUxMIGlmIGRpc2FibGVkKSAqLworCUluZGV4UHJlZmV0Y2hEYXRhICp4 c19wcmVmZXRjaDsKKwogCS8qIHBhcmFsbGVsIGluZGV4IHNjYW4gaW5mb3JtYXRpb24sIGlu IHNoYXJlZCBtZW1vcnkgKi8KIAlzdHJ1Y3QgUGFyYWxsZWxJbmRleFNjYW5EZXNjRGF0YSAq cGFyYWxsZWxfc2NhbjsKIH0JCQlJbmRleFNjYW5EZXNjRGF0YTsKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2V4ZWN1dG9yL2luc3RydW1lbnQuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9y L2luc3RydW1lbnQuaAppbmRleCA4N2U1ZTIxODNiZC4uOTdkZDNjMmM0MjEgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2luc3RydW1lbnQuaAorKysgYi9zcmMvaW5jbHVk ZS9leGVjdXRvci9pbnN0cnVtZW50LmgKQEAgLTMzLDYgKzMzLDggQEAgdHlwZWRlZiBzdHJ1 Y3QgQnVmZmVyVXNhZ2UKIAlpbnQ2NAkJbG9jYWxfYmxrc193cml0dGVuOyAvKiAjIG9mIGxv Y2FsIGRpc2sgYmxvY2tzIHdyaXR0ZW4gKi8KIAlpbnQ2NAkJdGVtcF9ibGtzX3JlYWQ7IC8q ICMgb2YgdGVtcCBibG9ja3MgcmVhZCAqLwogCWludDY0CQl0ZW1wX2Jsa3Nfd3JpdHRlbjsJ LyogIyBvZiB0ZW1wIGJsb2NrcyB3cml0dGVuICovCisJaW50NjQJCWJsa3NfcHJlZmV0Y2hf cm91bmRzOwkvKiAjIG9mIHByZWZldGNoIHJvdW5kcyAqLworCWludDY0CQlibGtzX3ByZWZl dGNoZXM7CS8qICMgb2YgYnVmZmVycyBwcmVmZXRjaGVkICovCiAJaW5zdHJfdGltZQlibGtf cmVhZF90aW1lOwkvKiB0aW1lIHNwZW50IHJlYWRpbmcgYmxvY2tzICovCiAJaW5zdHJfdGlt ZQlibGtfd3JpdGVfdGltZTsgLyogdGltZSBzcGVudCB3cml0aW5nIGJsb2NrcyAqLwogCWlu c3RyX3RpbWUJdGVtcF9ibGtfcmVhZF90aW1lOyAvKiB0aW1lIHNwZW50IHJlYWRpbmcgdGVt cCBibG9ja3MgKi8K --------------x5RTrJ63Memb50O0rYXYtKa5--