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.96) (envelope-from ) id 1vvvYM-00AcMu-07 for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Feb 2026 10:58:38 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vvvYK-002Z43-29 for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Feb 2026 10:58:36 +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.96) (envelope-from ) id 1vvvYK-002Z3o-04 for pgsql-hackers@lists.postgresql.org; Fri, 27 Feb 2026 10:58:36 +0000 Received: from lahtoruutu.iki.fi ([185.185.170.37]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1vvvYF-00000001TYf-1gmq for pgsql-hackers@lists.postgresql.org; Fri, 27 Feb 2026 10:58:35 +0000 Received: from [10.0.2.15] (unknown [130.41.207.13]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange x25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4fMlg26n2sz49Q1P; Fri, 27 Feb 2026 12:58:22 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1772189903; 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=q4H1VQPqPqbTIfmobY/630LyNBY7dkT1wNKHwKxxkmk=; b=JTT/wiAQvC1ozeBEZ3Ctj4H1BOMj7Bd/Q46wAsEcyEoDhDJvZs4I3tmzTK6lBJ3U4kJQzo k/D0EerIH/O8W2nJp1r9CIsQr6shfkarEgm/a0eiMIQQLvvmaNJerGki+cF2sLnuUbtsjZ f5xgDDAlLGC141W2TxXYJMFNtrbOo34cBoUkdD8dr5KYVb8S7OyqOYDkZRwGReF7AY81Ds xa1aSLL+EBQixt4PIbrs5axhlbWWZgJwLdOV48TKXsTq/l2XiYC2+8uENd/ioBivk8zZNX 2I7V1PZhobH4fgzHvOs8c9vTySZYBAWMIJUSZEaeQcpcfw4bt81kZ35zWL0TqA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1772189903; 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=q4H1VQPqPqbTIfmobY/630LyNBY7dkT1wNKHwKxxkmk=; b=MhnJipGHmq280GShv3uWcXdSn7D/dYU4gJYvU++/JgX4cpMaDYVg8Wck78P7qPBBnizPOY hWgGr/Y/rl3I+eUvoKsg3zbf/FUd3+VU6xW3tYfugnJNwjO9mlxwXmT7ZXMdckxwOj+ntS 5PuTy+gxc4V6OZTW2836tADddb1LkcjQG5TVpRYkOibCM2skPwS26tVGxQWY0L7fB2fsIP 8EluJjU+C8/aEor4c73oV5T8i5oplJzayA3sOvAohIygiBeYBHGFBmVvXZYcbTpH+9GXUP SFrxPttL4oTvEzxLV7mRGIEZdHqslf/v3kzqOktRn/jxKsQDPzVBVZ05hNtcDA== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi ARC-Seal: i=1; a=rsa-sha256; d=iki.fi; s=lahtoruutu; cv=none; t=1772189903; b=DEmiZDO/4ONXJ7DggyL8OCH/UjW2aRQi+d34xVEfUUWbqsPb3CSW3DUBHmPsR5MK22TTVf nr+YDRyVW7rzkoW1OOJBdOr7P/Ueerf9yeIXevqw+LW/xbz2mcbqyxKY4S9sa+QFBreSYo hlbxx2krXNh14hvbSlW1Qv6AgnJ7cgqUBwOKQG7hceTqkFbBY/Oo8cBZApZ3cU9X1heg8S tuSkmz8Y+bnQV3O/keYLNwqyI9cItg7y0MUN/hl5dxLwdEO5SZSMhPAq22h2sNI+DdhBUu 0ysZKTg6ItJm/q272Dt9aBoEkjSNiOWaQ0yje+nZctYJOvEVKQN2nz6eyNuJDA== Content-Type: multipart/mixed; boundary="------------6enF0G9WDst0S9MWoqAKHn5W" Message-ID: <366b6f95-613d-4ef8-82e4-bb2fd06d9c4d@iki.fi> Date: Fri, 27 Feb 2026 12:58:21 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Fix bug in multixact Oldest*MXactId initialization and access To: Yura Sokolov , Sami Imseih Cc: "pgsql-hackers@lists.postgresql.org" , Andres Freund , Chao Li References: <7acc94b0-ea82-4657-b1b0-77842cb7a60c@postgrespro.ru> <93F0BD0A-0B8B-4592-9D4B-53F405A86F6A@gmail.com> <3d7a2207-0e61-4d95-bc00-e5248956a32b@postgrespro.ru> Content-Language: en-US From: Heikki Linnakangas In-Reply-To: <3d7a2207-0e61-4d95-bc00-e5248956a32b@postgrespro.ru> 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. --------------6enF0G9WDst0S9MWoqAKHn5W Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 27/02/2026 07:00, Yura Sokolov wrote: > 26.02.2026 23:44, Sami Imseih пишет: >>> (Sorry, I've used Google Translate to write this sentence). >>> >>> When you write assert, you protect yourself from shooting your leg far in >>> the future. Believe me. >> >> The issue to me seems that we a few code paths that rely on the >> total proc calculation in several places, and changing one and >> forgetting to change another is what broke things. > > If there were asserts, then tests would have failed. > Period. > > There would no the bug. There would no this discussion. > If only array bounds were checked with asserts. Yeah, more asserts == good, usually. Here's my version of this. It's the same basic idea, some minor changes: - Instead of the MaxChildren, TotalProcs, TotalXactProcs variables, I added FIRST_PREPARED_XACT_PROC_NUMBER. Rationale: The variables still required you to know the layout of the PGPROCs, i.e. you still had to know that aux processes come after regular backends and dummy pgprocs after aux processes. An FIRST_PREPARED_XACT_PROC_NUMBER is more explicit in the places where it's needed. I have been thinking of adding variables like that anyway, because the current calculations with MaxBackends et al. are just so confusing. So I'm vaguely in favor of doing something like that in the future. But I think FIRST_PREPARED_XACT_PROC_NUMBER is more clear for this patch, and those variable names as done here (MaxBackends, MaxChildren, Totalprocs and TotalXactProcs) were still super confusing. - I added a slightly different the set of Getter/Setter functions: MyOldestMemberMXactIdSlot(), PreparedXactOldestMemberMXactIdSlot(ProcNumber), and MyOldestVisibleMXactIdSlot(). I think this is slightly less error-prone, making it harder to pass proc number to wrong function (although the assertions would catch such misuses pretty quick anyway). And these functions return a pointer to the slot, so we don't need separate getter and setter functions. That's a matter of taste, having a little less code looks nicer to me. What do you think? I've been pondering what kind of issues this bug could cause. Because the OldestVisibleMXactId array is allocated just after the OldestMemberMXactId array, you don't get a buffer overflow, but a prepared xact can overwrite a backend's value in the OldestVisibleMXactId array. That can surely cause trouble later, but not sure what exactly, and it seems pretty hard to write a repro script for it. - Heikki --------------6enF0G9WDst0S9MWoqAKHn5W Content-Type: text/x-patch; charset=UTF-8; name="0001-Fix-multixacts-OldestMemberMXactId-and-OldestVisible.patch" Content-Disposition: attachment; filename*0="0001-Fix-multixacts-OldestMemberMXactId-and-OldestVisible.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAxYmMyYjU1ODcxMGFhYjJlZTJjOTRjMzE5YjI3NTg3OTA3Y2MzNjk1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IEZyaSwgMjcgRmViIDIwMjYgMTI6MzA6MjQgKzAyMDAK U3ViamVjdDogW1BBVENIIDEvMV0gRml4IG11bHRpeGFjdHMgT2xkZXN0TWVtYmVyTVhhY3RJ ZCBhbmQKIE9sZGVzdFZpc2libGVNWGFjdElkIHVzYWdlCgpEdWUgdG8gWzFdLCBPbGRlc3RN ZW1iZXJNWGFjdElkIGlzIG5vIGxvbmdlciBhY2Nlc3NlZCBieSBzeW50aGV0aWMKZHVtbXlC YWNrZW5kSWQsIGJ1dCByYXRoZXIgd2l0aCBwZ3Byb2Nuby4gUHJvY3MgZm9yIHByZXBhcmVk IHhhY3RzIGFyZQpwbGFjZWQgYWZ0ZXIgYXV4aWxpYXJ5IHByb2NzLCB0aGVyZWZvcmUgY2Fs Y3VsYXRpb24gZm9yIE1heE9sZGVzdFNsb3QKYmVjYW1lIGludmFsaWQuCgpPbiB0aGUgb3Ro ZXIgaGFuZCwgT2xkZXN0VmlzaWJsZU1YYWN0SWQgaXMgdXNlZCBvbmx5IGZvciByZWFsIGJh Y2tlbmRzLAphbmQgc28gbmV2ZXIgYWNjZXNzZWQgYXQgaW5kZXggZ3JlYXRlciB0aGFuIE1h eEJhY2tlbmRzLgoKTGV0cyBzZXBhcmF0ZSBzaXplIGNhbGN1bGF0aW9uIGZvciBhcnJheXMg YW5kIHVzZSBjb252ZXJ0ZWQgaW5kZXggdG8Kc3RvcmUgb2xkZXN0IG1lbWJlciBteGFjdCBm b3IgcHJlcGFyZWQgdHJhbnNhY3Rpb25zLgoKWzFdIGFiMzU1ZTNhODhkZTc0NSAiUmVkZWZp bmUgYmFja2VuZCBJRCB0byBiZSBhbiBpbmRleCBpbnRvIHRoZSBwcm9jIGFycmF5IgoKQXV0 aG9yOiBZdXJhIFNva29sb3YgPHkuc29rb2xvdkBwb3N0Z3Jlc3Byby5ydT4KRGlzY3Vzc2lv bjogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC83YWNjOTRiMC1lYTgy LTQ2NTctYjFiMC03Nzg0MmNiN2E2MGNAcG9zdGdyZXNwcm8ucnUKLS0tCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYyB8IDEwNiArKysrKysrKysrKysrKysrKy0t LS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90d29waGFzZS5jICB8ICAgNyAr LQogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYyAgICAgICAgfCAgIDQgKy0KIHNy Yy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oICAgICAgICAgICAgIHwgICAxICsKIDQgZmlsZXMg Y2hhbmdlZCwgNzkgaW5zZXJ0aW9ucygrKSwgMzkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYwppbmRleCA5MGVjODdkOWRkNi4uYmM0NWVk YjRjNDcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFj dC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jCkBAIC0x NjIsMTAgKzE2Miw2IEBAIHR5cGVkZWYgc3RydWN0IE11bHRpWGFjdFN0YXRlRGF0YQogCSAq IGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgTXVsdGlYYWN0U3RhdGVEYXRhIHN0cnVjdC4g RWFjaCBpcyBpbmRleGVkIGJ5CiAJICogUHJvY051bWJlci4KIAkgKgotCSAqIEluIGJvdGgg YXJyYXlzLCB0aGVyZSdzIGEgc2xvdCBmb3IgYWxsIG5vcm1hbCBiYWNrZW5kcwotCSAqICgw Li5NYXhCYWNrZW5kcy0xKSBmb2xsb3dlZCBieSBhIHNsb3QgZm9yIG1heF9wcmVwYXJlZF94 YWN0cyBwcmVwYXJlZAotCSAqIHRyYW5zYWN0aW9ucy4KLQkgKgogCSAqIE9sZGVzdE1lbWJl ck1YYWN0SWRba10gaXMgdGhlIG9sZGVzdCBNdWx0aVhhY3RJZCBlYWNoIGJhY2tlbmQncyBj dXJyZW50CiAJICogdHJhbnNhY3Rpb24ocykgY291bGQgcG9zc2libHkgYmUgYSBtZW1iZXIg b2YsIG9yIEludmFsaWRNdWx0aVhhY3RJZAogCSAqIHdoZW4gdGhlIGJhY2tlbmQgaGFzIG5v IGxpdmUgdHJhbnNhY3Rpb24gdGhhdCBjb3VsZCBwb3NzaWJseSBiZSBhCkBAIC0xNzYsNiAr MTcyLDEwIEBAIHR5cGVkZWYgc3RydWN0IE11bHRpWGFjdFN0YXRlRGF0YQogCSAqIG1lbWJl ciBvZiBhIE11bHRpWGFjdCwgYW5kIHRoYXQgTXVsdGlYYWN0IHdvdWxkIGhhdmUgdG8gYmUg Y3JlYXRlZAogCSAqIGR1cmluZyBvciBhZnRlciB0aGUgbG9jayBhY3F1aXNpdGlvbi4pCiAJ ICoKKwkgKiBJbiB0aGUgT2xkZXN0TWVtYmVyTVhhY3RJZCBhcnJheSwgdGhlcmUncyBhIHNs b3QgZm9yIGFsbCBub3JtYWwKKwkgKiBiYWNrZW5kcyAoMC4uTWF4QmFja2VuZHMtMSkgZm9s bG93ZWQgYnkgYSBzbG90IGZvciBtYXhfcHJlcGFyZWRfeGFjdHMKKwkgKiBwcmVwYXJlZCB0 cmFuc2FjdGlvbnMuCisJICoKIAkgKiBPbGRlc3RWaXNpYmxlTVhhY3RJZFtrXSBpcyB0aGUg b2xkZXN0IE11bHRpWGFjdElkIGVhY2ggYmFja2VuZCdzCiAJICogY3VycmVudCB0cmFuc2Fj dGlvbihzKSB0aGluayBpcyBwb3RlbnRpYWxseSBsaXZlLCBvciBJbnZhbGlkTXVsdGlYYWN0 SWQKIAkgKiB3aGVuIG5vdCBpbiBhIHRyYW5zYWN0aW9uIG9yIG5vdCBpbiBhIHRyYW5zYWN0 aW9uIHRoYXQncyBwYWlkIGFueQpAQCAtMTg3LDYgKzE4Nyw5IEBAIHR5cGVkZWYgc3RydWN0 IE11bHRpWGFjdFN0YXRlRGF0YQogCSAqIHRoYW4gaXRzIG93biBPbGRlc3RWaXNpYmxlTVhh Y3RJZFtdIHNldHRpbmc7IHRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UKIAkgKiB0aGUgcmVs ZXZhbnQgU0xSVSBkYXRhIGNhbiBiZSBjb25jdXJyZW50bHkgdHJ1bmNhdGVkIGF3YXkuCiAJ ICoKKwkgKiBJbiB0aGUgT2xkZXN0VmlzaWJsZU1YYWN0SWQgYXJyYXksIHRoZXJlJ3MgYSBz bG90IGZvciBhbGwgbm9ybWFsCisJICogYmFja2VuZHMgKDAuLk1heEJhY2tlbmRzLTEpIG9u bHkuIE5vIHNsb3RzIGZvciBwcmVwYXJlZCB0cmFuc2FjdGlvbnMuCisJICoKIAkgKiBUaGUg b2xkZXN0IHZhbGlkIHZhbHVlIGFtb25nIGFsbCBvZiB0aGUgT2xkZXN0TWVtYmVyTVhhY3RJ ZFtdIGFuZAogCSAqIE9sZGVzdFZpc2libGVNWGFjdElkW10gZW50cmllcyBpcyBjb25zaWRl cmVkIGJ5IHZhY3V1bSBhcyB0aGUgZWFybGllc3QKIAkgKiBwb3NzaWJsZSB2YWx1ZSBzdGls bCBoYXZpbmcgYW55IGxpdmUgbWVtYmVyIHRyYW5zYWN0aW9uIC0tIE9sZGVzdE14YWN0LgpA QCAtMjA4LDkgKzIxMSwxMCBAQCB0eXBlZGVmIHN0cnVjdCBNdWx0aVhhY3RTdGF0ZURhdGEK IH0gTXVsdGlYYWN0U3RhdGVEYXRhOwogCiAvKgotICogU2l6ZSBvZiBPbGRlc3RNZW1iZXJN WGFjdElkIGFuZCBPbGRlc3RWaXNpYmxlTVhhY3RJZCBhcnJheXMuCisgKiBTaXplcyBvZiBP bGRlc3RNZW1iZXJNWGFjdElkIGFuZCBPbGRlc3RWaXNpYmxlTVhhY3RJZCBhcnJheXMuCiAg Ki8KLSNkZWZpbmUgTWF4T2xkZXN0U2xvdAkoTWF4QmFja2VuZHMgKyBtYXhfcHJlcGFyZWRf eGFjdHMpCisjZGVmaW5lIE51bU1lbWJlclNsb3RzCQkoTWF4QmFja2VuZHMgKyBtYXhfcHJl cGFyZWRfeGFjdHMpCisjZGVmaW5lIE51bVZpc2libGVTbG90cwkJTWF4QmFja2VuZHMKIAog LyogUG9pbnRlcnMgdG8gdGhlIHN0YXRlIGRhdGEgaW4gc2hhcmVkIG1lbW9yeSAqLwogc3Rh dGljIE11bHRpWGFjdFN0YXRlRGF0YSAqTXVsdGlYYWN0U3RhdGU7CkBAIC0yMTgsNiArMjIy LDI4IEBAIHN0YXRpYyBNdWx0aVhhY3RJZCAqT2xkZXN0TWVtYmVyTVhhY3RJZDsKIHN0YXRp YyBNdWx0aVhhY3RJZCAqT2xkZXN0VmlzaWJsZU1YYWN0SWQ7CiAKIAorc3RhdGljIGlubGlu ZSBNdWx0aVhhY3RJZCAqCitNeU9sZGVzdE1lbWJlck1YYWN0SWRTbG90KHZvaWQpCit7CisJ QXNzZXJ0KE15UHJvY051bWJlciA+PSAwICYmIE15UHJvY051bWJlciA8IE1heEJhY2tlbmRz KTsKKwlyZXR1cm4gJk9sZGVzdE1lbWJlck1YYWN0SWRbTXlQcm9jTnVtYmVyXTsKK30KKwor c3RhdGljIGlubGluZSBNdWx0aVhhY3RJZCAqCitQcmVwYXJlZFhhY3RPbGRlc3RNZW1iZXJN WGFjdElkU2xvdChQcm9jTnVtYmVyIHByb2NubykKK3sKKwlBc3NlcnQocHJvY25vID49IEZJ UlNUX1BSRVBBUkVEX1hBQ1RfUFJPQ19OVU1CRVIpOworCUFzc2VydChwcm9jbm8gLSBGSVJT VF9QUkVQQVJFRF9YQUNUX1BST0NfTlVNQkVSIDwgTnVtTWVtYmVyU2xvdHMpOworCXJldHVy biAmT2xkZXN0TWVtYmVyTVhhY3RJZFtwcm9jbm8gLSBGSVJTVF9QUkVQQVJFRF9YQUNUX1BS T0NfTlVNQkVSXTsKK30KKworc3RhdGljIGlubGluZSBNdWx0aVhhY3RJZCAqCitNeU9sZGVz dFZpc2libGVNWGFjdElkU2xvdCh2b2lkKQoreworCUFzc2VydChNeVByb2NOdW1iZXIgPj0g MCAmJiBNeVByb2NOdW1iZXIgPCBOdW1WaXNpYmxlU2xvdHMpOworCXJldHVybiAmT2xkZXN0 VmlzaWJsZU1YYWN0SWRbTXlQcm9jTnVtYmVyXTsKK30KKwogLyoKICAqIERlZmluaXRpb25z IGZvciB0aGUgYmFja2VuZC1sb2NhbCBNdWx0aVhhY3RJZCBjYWNoZS4KICAqCkBAIC0zMDgs NyArMzM0LDcgQEAgTXVsdGlYYWN0SWRDcmVhdGUoVHJhbnNhY3Rpb25JZCB4aWQxLCBNdWx0 aVhhY3RTdGF0dXMgc3RhdHVzMSwKIAlBc3NlcnQoIVRyYW5zYWN0aW9uSWRFcXVhbHMoeGlk MSwgeGlkMikgfHwgKHN0YXR1czEgIT0gc3RhdHVzMikpOwogCiAJLyogTXVsdGlYYWN0SWRT ZXRPbGRlc3RNZW1iZXIoKSBtdXN0IGhhdmUgYmVlbiBjYWxsZWQgYWxyZWFkeS4gKi8KLQlB c3NlcnQoTXVsdGlYYWN0SWRJc1ZhbGlkKE9sZGVzdE1lbWJlck1YYWN0SWRbTXlQcm9jTnVt YmVyXSkpOworCUFzc2VydChNdWx0aVhhY3RJZElzVmFsaWQoKk15T2xkZXN0TWVtYmVyTVhh Y3RJZFNsb3QoKSkpOwogCiAJLyoKIAkgKiBOb3RlOiB1bmxpa2UgTXVsdGlYYWN0SWRFeHBh bmQsIHdlIGRvbid0IGJvdGhlciB0byBjaGVjayB0aGF0IGJvdGggWElEcwpAQCAtMzYyLDcg KzM4OCw3IEBAIE11bHRpWGFjdElkRXhwYW5kKE11bHRpWGFjdElkIG11bHRpLCBUcmFuc2Fj dGlvbklkIHhpZCwgTXVsdGlYYWN0U3RhdHVzIHN0YXR1cykKIAlBc3NlcnQoVHJhbnNhY3Rp b25JZElzVmFsaWQoeGlkKSk7CiAKIAkvKiBNdWx0aVhhY3RJZFNldE9sZGVzdE1lbWJlcigp IG11c3QgaGF2ZSBiZWVuIGNhbGxlZCBhbHJlYWR5LiAqLwotCUFzc2VydChNdWx0aVhhY3RJ ZElzVmFsaWQoT2xkZXN0TWVtYmVyTVhhY3RJZFtNeVByb2NOdW1iZXJdKSk7CisJQXNzZXJ0 KE11bHRpWGFjdElkSXNWYWxpZCgqTXlPbGRlc3RNZW1iZXJNWGFjdElkU2xvdCgpKSk7CiAK IAlkZWJ1Z19lbG9nNShERUJVRzIsICJFeHBhbmQ6IHJlY2VpdmVkIG11bHRpICV1LCB4aWQg JXUgc3RhdHVzICVzIiwKIAkJCQltdWx0aSwgeGlkLCBteHN0YXR1c190b19zdHJpbmcoc3Rh dHVzKSk7CkBAIC01MzYsNyArNTYyLDcgQEAgTXVsdGlYYWN0SWRJc1J1bm5pbmcoTXVsdGlY YWN0SWQgbXVsdGksIGJvb2wgaXNMb2NrT25seSkKIHZvaWQKIE11bHRpWGFjdElkU2V0T2xk ZXN0TWVtYmVyKHZvaWQpCiB7Ci0JaWYgKCFNdWx0aVhhY3RJZElzVmFsaWQoT2xkZXN0TWVt YmVyTVhhY3RJZFtNeVByb2NOdW1iZXJdKSkKKwlpZiAoIU11bHRpWGFjdElkSXNWYWxpZCgq TXlPbGRlc3RNZW1iZXJNWGFjdElkU2xvdCgpKSkKIAl7CiAJCU11bHRpWGFjdElkIG5leHRN WGFjdDsKIApAQCAtNTU4LDcgKzU4NCw3IEBAIE11bHRpWGFjdElkU2V0T2xkZXN0TWVtYmVy KHZvaWQpCiAKIAkJbmV4dE1YYWN0ID0gTXVsdGlYYWN0U3RhdGUtPm5leHRNWGFjdDsKIAot CQlPbGRlc3RNZW1iZXJNWGFjdElkW015UHJvY051bWJlcl0gPSBuZXh0TVhhY3Q7CisJCSpN eU9sZGVzdE1lbWJlck1YYWN0SWRTbG90KCkgPSBuZXh0TVhhY3Q7CiAKIAkJTFdMb2NrUmVs ZWFzZShNdWx0aVhhY3RHZW5Mb2NrKTsKIApAQCAtNTg2LDcgKzYxMiw3IEBAIE11bHRpWGFj dElkU2V0T2xkZXN0TWVtYmVyKHZvaWQpCiBzdGF0aWMgdm9pZAogTXVsdGlYYWN0SWRTZXRP bGRlc3RWaXNpYmxlKHZvaWQpCiB7Ci0JaWYgKCFNdWx0aVhhY3RJZElzVmFsaWQoT2xkZXN0 VmlzaWJsZU1YYWN0SWRbTXlQcm9jTnVtYmVyXSkpCisJaWYgKCFNdWx0aVhhY3RJZElzVmFs aWQoKk15T2xkZXN0VmlzaWJsZU1YYWN0SWRTbG90KCkpKQogCXsKIAkJTXVsdGlYYWN0SWQg b2xkZXN0TVhhY3Q7CiAJCWludAkJCWk7CkBAIC01OTQsNyArNjIwLDcgQEAgTXVsdGlYYWN0 SWRTZXRPbGRlc3RWaXNpYmxlKHZvaWQpCiAJCUxXTG9ja0FjcXVpcmUoTXVsdGlYYWN0R2Vu TG9jaywgTFdfRVhDTFVTSVZFKTsKIAogCQlvbGRlc3RNWGFjdCA9IE11bHRpWGFjdFN0YXRl LT5uZXh0TVhhY3Q7Ci0JCWZvciAoaSA9IDA7IGkgPCBNYXhPbGRlc3RTbG90OyBpKyspCisJ CWZvciAoaSA9IDA7IGkgPCBOdW1NZW1iZXJTbG90czsgaSsrKQogCQl7CiAJCQlNdWx0aVhh Y3RJZCB0aGlzb2xkZXN0ID0gT2xkZXN0TWVtYmVyTVhhY3RJZFtpXTsKIApAQCAtNjAzLDcg KzYyOSw3IEBAIE11bHRpWGFjdElkU2V0T2xkZXN0VmlzaWJsZSh2b2lkKQogCQkJCW9sZGVz dE1YYWN0ID0gdGhpc29sZGVzdDsKIAkJfQogCi0JCU9sZGVzdFZpc2libGVNWGFjdElkW015 UHJvY051bWJlcl0gPSBvbGRlc3RNWGFjdDsKKwkJKk15T2xkZXN0VmlzaWJsZU1YYWN0SWRT bG90KCkgPSBvbGRlc3RNWGFjdDsKIAogCQlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdEdlbkxv Y2spOwogCkBAIC0xMTUyLDcgKzExNzgsNyBAQCBHZXRNdWx0aVhhY3RJZE1lbWJlcnMoTXVs dGlYYWN0SWQgbXVsdGksIE11bHRpWGFjdE1lbWJlciAqKm1lbWJlcnMsCiAJICogbXVsdGku ICBJdCBjYW5ub3QgcG9zc2libHkgc3RpbGwgYmUgcnVubmluZy4KIAkgKi8KIAlpZiAoaXNM b2NrT25seSAmJgotCQlNdWx0aVhhY3RJZFByZWNlZGVzKG11bHRpLCBPbGRlc3RWaXNpYmxl TVhhY3RJZFtNeVByb2NOdW1iZXJdKSkKKwkJTXVsdGlYYWN0SWRQcmVjZWRlcyhtdWx0aSwg Kk15T2xkZXN0VmlzaWJsZU1YYWN0SWRTbG90KCkpKQogCXsKIAkJZGVidWdfZWxvZzIoREVC VUcyLCAiR2V0TWVtYmVyczogYSBsb2NrZXItb25seSBtdWx0aSBpcyB0b28gb2xkIik7CiAJ CSptZW1iZXJzID0gTlVMTDsKQEAgLTE1NzQsOCArMTYwMCw4IEBAIEF0RU9YYWN0X011bHRp WGFjdCh2b2lkKQogCSAqIFdlIGFzc3VtZSB0aGF0IHN0b3JpbmcgYSBNdWx0aVhhY3RJZCBp cyBhdG9taWMgYW5kIHNvIHdlIG5lZWQgbm90IHRha2UKIAkgKiBNdWx0aVhhY3RHZW5Mb2Nr IHRvIGRvIHRoaXMuCiAJICovCi0JT2xkZXN0TWVtYmVyTVhhY3RJZFtNeVByb2NOdW1iZXJd ID0gSW52YWxpZE11bHRpWGFjdElkOwotCU9sZGVzdFZpc2libGVNWGFjdElkW015UHJvY051 bWJlcl0gPSBJbnZhbGlkTXVsdGlYYWN0SWQ7CisJKk15T2xkZXN0TWVtYmVyTVhhY3RJZFNs b3QoKSA9IEludmFsaWRNdWx0aVhhY3RJZDsKKwkqTXlPbGRlc3RWaXNpYmxlTVhhY3RJZFNs b3QoKSA9IEludmFsaWRNdWx0aVhhY3RJZDsKIAogCS8qCiAJICogRGlzY2FyZCB0aGUgbG9j YWwgTXVsdGlYYWN0SWQgY2FjaGUuICBTaW5jZSBNWGFjdENvbnRleHQgd2FzIGNyZWF0ZWQg YXMKQEAgLTE1OTUsNyArMTYyMSw3IEBAIEF0RU9YYWN0X011bHRpWGFjdCh2b2lkKQogdm9p ZAogQXRQcmVwYXJlX011bHRpWGFjdCh2b2lkKQogewotCU11bHRpWGFjdElkIG15T2xkZXN0 TWVtYmVyID0gT2xkZXN0TWVtYmVyTVhhY3RJZFtNeVByb2NOdW1iZXJdOworCU11bHRpWGFj dElkIG15T2xkZXN0TWVtYmVyID0gKk15T2xkZXN0TWVtYmVyTVhhY3RJZFNsb3QoKTsKIAog CWlmIChNdWx0aVhhY3RJZElzVmFsaWQobXlPbGRlc3RNZW1iZXIpKQogCQlSZWdpc3RlclR3 b1BoYXNlUmVjb3JkKFRXT1BIQVNFX1JNX01VTFRJWEFDVF9JRCwgMCwKQEAgLTE2MTUsNyAr MTY0MSw3IEBAIFBvc3RQcmVwYXJlX011bHRpWGFjdChGdWxsVHJhbnNhY3Rpb25JZCBmeGlk KQogCSAqIFRyYW5zZmVyIG91ciBPbGRlc3RNZW1iZXJNWGFjdElkIHZhbHVlIHRvIHRoZSBz bG90IHJlc2VydmVkIGZvciB0aGUKIAkgKiBwcmVwYXJlZCB0cmFuc2FjdGlvbi4KIAkgKi8K LQlteU9sZGVzdE1lbWJlciA9IE9sZGVzdE1lbWJlck1YYWN0SWRbTXlQcm9jTnVtYmVyXTsK KwlteU9sZGVzdE1lbWJlciA9ICpNeU9sZGVzdE1lbWJlck1YYWN0SWRTbG90KCk7CiAJaWYg KE11bHRpWGFjdElkSXNWYWxpZChteU9sZGVzdE1lbWJlcikpCiAJewogCQlQcm9jTnVtYmVy CWR1bW15UHJvY051bWJlciA9IFR3b1BoYXNlR2V0RHVtbXlQcm9jTnVtYmVyKGZ4aWQsIGZh bHNlKTsKQEAgLTE2MjgsOCArMTY1NCw4IEBAIFBvc3RQcmVwYXJlX011bHRpWGFjdChGdWxs VHJhbnNhY3Rpb25JZCBmeGlkKQogCQkgKi8KIAkJTFdMb2NrQWNxdWlyZShNdWx0aVhhY3RH ZW5Mb2NrLCBMV19FWENMVVNJVkUpOwogCi0JCU9sZGVzdE1lbWJlck1YYWN0SWRbZHVtbXlQ cm9jTnVtYmVyXSA9IG15T2xkZXN0TWVtYmVyOwotCQlPbGRlc3RNZW1iZXJNWGFjdElkW015 UHJvY051bWJlcl0gPSBJbnZhbGlkTXVsdGlYYWN0SWQ7CisJCSpQcmVwYXJlZFhhY3RPbGRl c3RNZW1iZXJNWGFjdElkU2xvdChkdW1teVByb2NOdW1iZXIpID0gbXlPbGRlc3RNZW1iZXI7 CisJCSpNeU9sZGVzdE1lbWJlck1YYWN0SWRTbG90KCkgPSBJbnZhbGlkTXVsdGlYYWN0SWQ7 CiAKIAkJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RHZW5Mb2NrKTsKIAl9CkBAIC0xNjQyLDcg KzE2NjgsNyBAQCBQb3N0UHJlcGFyZV9NdWx0aVhhY3QoRnVsbFRyYW5zYWN0aW9uSWQgZnhp ZCkKIAkgKiBXZSBhc3N1bWUgdGhhdCBzdG9yaW5nIGEgTXVsdGlYYWN0SWQgaXMgYXRvbWlj IGFuZCBzbyB3ZSBuZWVkIG5vdCB0YWtlCiAJICogTXVsdGlYYWN0R2VuTG9jayB0byBkbyB0 aGlzLgogCSAqLwotCU9sZGVzdFZpc2libGVNWGFjdElkW015UHJvY051bWJlcl0gPSBJbnZh bGlkTXVsdGlYYWN0SWQ7CisJKk15T2xkZXN0VmlzaWJsZU1YYWN0SWRTbG90KCkgPSBJbnZh bGlkTXVsdGlYYWN0SWQ7CiAKIAkvKgogCSAqIERpc2NhcmQgdGhlIGxvY2FsIE11bHRpWGFj dElkIGNhY2hlIGxpa2UgaW4gQXRFT1hhY3RfTXVsdGlYYWN0LgpAQCAtMTY2OSw3ICsxNjk1 LDcgQEAgbXVsdGl4YWN0X3R3b3BoYXNlX3JlY292ZXIoRnVsbFRyYW5zYWN0aW9uSWQgZnhp ZCwgdWludDE2IGluZm8sCiAJQXNzZXJ0KGxlbiA9PSBzaXplb2YoTXVsdGlYYWN0SWQpKTsK IAlvbGRlc3RNZW1iZXIgPSAqKChNdWx0aVhhY3RJZCAqKSByZWNkYXRhKTsKIAotCU9sZGVz dE1lbWJlck1YYWN0SWRbZHVtbXlQcm9jTnVtYmVyXSA9IG9sZGVzdE1lbWJlcjsKKwkqUHJl cGFyZWRYYWN0T2xkZXN0TWVtYmVyTVhhY3RJZFNsb3QoZHVtbXlQcm9jTnVtYmVyKSA9IG9s ZGVzdE1lbWJlcjsKIH0KIAogLyoKQEAgLTE2ODQsNyArMTcxMCw3IEBAIG11bHRpeGFjdF90 d29waGFzZV9wb3N0Y29tbWl0KEZ1bGxUcmFuc2FjdGlvbklkIGZ4aWQsIHVpbnQxNiBpbmZv LAogCiAJQXNzZXJ0KGxlbiA9PSBzaXplb2YoTXVsdGlYYWN0SWQpKTsKIAotCU9sZGVzdE1l bWJlck1YYWN0SWRbZHVtbXlQcm9jTnVtYmVyXSA9IEludmFsaWRNdWx0aVhhY3RJZDsKKwkq UHJlcGFyZWRYYWN0T2xkZXN0TWVtYmVyTVhhY3RJZFNsb3QoZHVtbXlQcm9jTnVtYmVyKSA9 IEludmFsaWRNdWx0aVhhY3RJZDsKIH0KIAogLyoKQEAgLTE3MDMsMTcgKzE3MjksMjUgQEAg bXVsdGl4YWN0X3R3b3BoYXNlX3Bvc3RhYm9ydChGdWxsVHJhbnNhY3Rpb25JZCBmeGlkLCB1 aW50MTYgaW5mbywKICAqIHRodXMgZG91YmxlIG1lbW9yeS4gIEFsc28sIHJlc2VydmUgc3Bh Y2UgZm9yIHRoZSBzaGFyZWQgTXVsdGlYYWN0U3RhdGUKICAqIHN0cnVjdCBhbmQgdGhlIHBl ci1iYWNrZW5kIE11bHRpWGFjdElkIGFycmF5cyAodHdvIG9mIHRob3NlLCB0b28pLgogICov CitzdGF0aWMgU2l6ZQorTXVsdGlYYWN0U2hhcmVkU3RhdGVTaG1lbVNpemUoKQoreworCVNp emUJCXNpemU7CisKKwlzaXplID0gb2Zmc2V0b2YoTXVsdGlYYWN0U3RhdGVEYXRhLCBwZXJC YWNrZW5kWGFjdElkcyk7CisJc2l6ZSA9IGFkZF9zaXplKHNpemUsCisJCQkJCW11bF9zaXpl KHNpemVvZihNdWx0aVhhY3RJZCksIE51bU1lbWJlclNsb3RzKSk7CisJc2l6ZSA9IGFkZF9z aXplKHNpemUsCisJCQkJCW11bF9zaXplKHNpemVvZihNdWx0aVhhY3RJZCksIE51bVZpc2li bGVTbG90cykpOworCXJldHVybiBzaXplOworfQorCiBTaXplCiBNdWx0aVhhY3RTaG1lbVNp emUodm9pZCkKIHsKIAlTaXplCQlzaXplOwogCi0JLyogV2UgbmVlZCAyKk1heE9sZGVzdFNs b3QgcGVyQmFja2VuZFhhY3RJZHNbXSBlbnRyaWVzICovCi0jZGVmaW5lIFNIQVJFRF9NVUxU SVhBQ1RfU1RBVEVfU0laRSBcCi0JYWRkX3NpemUob2Zmc2V0b2YoTXVsdGlYYWN0U3RhdGVE YXRhLCBwZXJCYWNrZW5kWGFjdElkcyksIFwKLQkJCSBtdWxfc2l6ZShzaXplb2YoTXVsdGlY YWN0SWQpICogMiwgTWF4T2xkZXN0U2xvdCkpCi0KLQlzaXplID0gU0hBUkVEX01VTFRJWEFD VF9TVEFURV9TSVpFOworCXNpemUgPSBNdWx0aVhhY3RTaGFyZWRTdGF0ZVNobWVtU2l6ZSgp OwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTaW1wbGVMcnVTaG1lbVNpemUobXVsdGl4YWN0 X29mZnNldF9idWZmZXJzLCAwKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFNpbXBsZUxy dVNobWVtU2l6ZShtdWx0aXhhY3RfbWVtYmVyX2J1ZmZlcnMsIDApKTsKIApAQCAtMTc0Nywx NCArMTc4MSwxNCBAQCBNdWx0aVhhY3RTaG1lbUluaXQodm9pZCkKIAogCS8qIEluaXRpYWxp emUgb3VyIHNoYXJlZCBzdGF0ZSBzdHJ1Y3QgKi8KIAlNdWx0aVhhY3RTdGF0ZSA9IFNobWVt SW5pdFN0cnVjdCgiU2hhcmVkIE11bHRpWGFjdCBTdGF0ZSIsCi0JCQkJCQkJCQkgU0hBUkVE X01VTFRJWEFDVF9TVEFURV9TSVpFLAorCQkJCQkJCQkJIE11bHRpWGFjdFNoYXJlZFN0YXRl U2htZW1TaXplKCksCiAJCQkJCQkJCQkgJmZvdW5kKTsKIAlpZiAoIUlzVW5kZXJQb3N0bWFz dGVyKQogCXsKIAkJQXNzZXJ0KCFmb3VuZCk7CiAKIAkJLyogTWFrZSBzdXJlIHdlIHplcm8g b3V0IHRoZSBwZXItYmFja2VuZCBzdGF0ZSAqLwotCQlNZW1TZXQoTXVsdGlYYWN0U3RhdGUs IDAsIFNIQVJFRF9NVUxUSVhBQ1RfU1RBVEVfU0laRSk7CisJCU1lbVNldChNdWx0aVhhY3RT dGF0ZSwgMCwgTXVsdGlYYWN0U2hhcmVkU3RhdGVTaG1lbVNpemUoKSk7CiAJfQogCWVsc2UK IAkJQXNzZXJ0KGZvdW5kKTsKQEAgLTE3NjMsNyArMTc5Nyw3IEBAIE11bHRpWGFjdFNobWVt SW5pdCh2b2lkKQogCSAqIFNldCB1cCBhcnJheSBwb2ludGVycy4KIAkgKi8KIAlPbGRlc3RN ZW1iZXJNWGFjdElkID0gTXVsdGlYYWN0U3RhdGUtPnBlckJhY2tlbmRYYWN0SWRzOwotCU9s ZGVzdFZpc2libGVNWGFjdElkID0gT2xkZXN0TWVtYmVyTVhhY3RJZCArIE1heE9sZGVzdFNs b3Q7CisJT2xkZXN0VmlzaWJsZU1YYWN0SWQgPSBPbGRlc3RNZW1iZXJNWGFjdElkICsgTnVt TWVtYmVyU2xvdHM7CiB9CiAKIC8qCkBAIC0yMzAzLDcgKzIzMzcsNiBAQCBNdWx0aVhhY3RJ ZAogR2V0T2xkZXN0TXVsdGlYYWN0SWQodm9pZCkKIHsKIAlNdWx0aVhhY3RJZCBvbGRlc3RN WGFjdDsKLQlpbnQJCQlpOwogCiAJLyoKIAkgKiBUaGlzIGlzIHRoZSBvbGRlc3QgdmFsaWQg dmFsdWUgYW1vbmcgYWxsIHRoZSBPbGRlc3RNZW1iZXJNWGFjdElkW10gYW5kCkBAIC0yMzEx LDcgKzIzNDQsNyBAQCBHZXRPbGRlc3RNdWx0aVhhY3RJZCh2b2lkKQogCSAqLwogCUxXTG9j a0FjcXVpcmUoTXVsdGlYYWN0R2VuTG9jaywgTFdfU0hBUkVEKTsKIAlvbGRlc3RNWGFjdCA9 IE11bHRpWGFjdFN0YXRlLT5uZXh0TVhhY3Q7Ci0JZm9yIChpID0gMDsgaSA8IE1heE9sZGVz dFNsb3Q7IGkrKykKKwlmb3IgKGludCBpID0gMDsgaSA8IE51bU1lbWJlclNsb3RzOyBpKysp CiAJewogCQlNdWx0aVhhY3RJZCB0aGlzb2xkZXN0OwogCkBAIC0yMzE5LDYgKzIzNTIsMTEg QEAgR2V0T2xkZXN0TXVsdGlYYWN0SWQodm9pZCkKIAkJaWYgKE11bHRpWGFjdElkSXNWYWxp ZCh0aGlzb2xkZXN0KSAmJgogCQkJTXVsdGlYYWN0SWRQcmVjZWRlcyh0aGlzb2xkZXN0LCBv bGRlc3RNWGFjdCkpCiAJCQlvbGRlc3RNWGFjdCA9IHRoaXNvbGRlc3Q7CisJfQorCWZvciAo aW50IGkgPSAwOyBpIDwgTnVtVmlzaWJsZVNsb3RzOyBpKyspCisJeworCQlNdWx0aVhhY3RJ ZCB0aGlzb2xkZXN0OworCiAJCXRoaXNvbGRlc3QgPSBPbGRlc3RWaXNpYmxlTVhhY3RJZFtp XTsKIAkJaWYgKE11bHRpWGFjdElkSXNWYWxpZCh0aGlzb2xkZXN0KSAmJgogCQkJTXVsdGlY YWN0SWRQcmVjZWRlcyh0aGlzb2xkZXN0LCBvbGRlc3RNWGFjdCkpCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90d29waGFzZS5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0vdHdvcGhhc2UuYwppbmRleCBlNDM0MGI1OTY0MC4uNWY2NWZhN2I4MGYg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3b3BoYXNlLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdvcGhhc2UuYwpAQCAtOTAwLDkgKzkw MCwxMCBAQCBUd29QaGFzZUdldFhpZEJ5VmlydHVhbFhJRChWaXJ0dWFsVHJhbnNhY3Rpb25J ZCB2eGlkLAogICoJCUdldCB0aGUgZHVtbXkgcHJvYyBudW1iZXIgZm9yIHByZXBhcmVkIHRy YW5zYWN0aW9uCiAgKgogICogRHVtbXkgcHJvYyBudW1iZXJzIGFyZSBzaW1pbGFyIHRvIHBy b2MgbnVtYmVycyBvZiByZWFsIGJhY2tlbmRzLiAgVGhleQotICogc3RhcnQgYXQgTWF4QmFj a2VuZHMsIGFuZCBhcmUgdW5pcXVlIGFjcm9zcyBhbGwgY3VycmVudGx5IGFjdGl2ZSByZWFs Ci0gKiBiYWNrZW5kcyBhbmQgcHJlcGFyZWQgdHJhbnNhY3Rpb25zLiAgSWYgbG9ja19oZWxk IGlzIHNldCB0byB0cnVlLAotICogVHdvUGhhc2VTdGF0ZUxvY2sgd2lsbCBub3QgYmUgdGFr ZW4sIHNvIHRoZSBjYWxsZXIgaGFkIGJldHRlciBob2xkIGl0LgorICogc3RhcnQgYXQgRklS U1RfUFJFUEFSRURfWEFDVF9QUk9DX05VTUJFUiwgYW5kIGFyZSB1bmlxdWUgYWNyb3NzIGFs bAorICogY3VycmVudGx5IGFjdGl2ZSByZWFsIGJhY2tlbmRzIGFuZCBwcmVwYXJlZCB0cmFu c2FjdGlvbnMuICBJZiBsb2NrX2hlbGQgaXMKKyAqIHNldCB0byB0cnVlLCBUd29QaGFzZVN0 YXRlTG9jayB3aWxsIG5vdCBiZSB0YWtlbiwgc28gdGhlIGNhbGxlciBoYWQgYmV0dGVyCisg KiBob2xkIGl0LgogICovCiBQcm9jTnVtYmVyCiBUd29QaGFzZUdldER1bW15UHJvY051bWJl cihGdWxsVHJhbnNhY3Rpb25JZCBmeGlkLCBib29sIGxvY2tfaGVsZCkKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdl L2xtZ3IvcHJvYy5jCmluZGV4IDc3MWIwMDZiNTIyLi5jY2Y5ZGUwZTY3YyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYworKysgYi9zcmMvYmFja2VuZC9z dG9yYWdlL2xtZ3IvcHJvYy5jCkBAIC0zMDQsNyArMzA0LDcgQEAgSW5pdFByb2NHbG9iYWwo dm9pZCkKIAkJICogZHVtbXkgUEdQUk9DcyBkb24ndCBuZWVkIHRoZXNlIHRob3VnaCAtIHRo ZXkncmUgbmV2ZXIgYXNzb2NpYXRlZAogCQkgKiB3aXRoIGEgcmVhbCBwcm9jZXNzCiAJCSAq LwotCQlpZiAoaSA8IE1heEJhY2tlbmRzICsgTlVNX0FVWElMSUFSWV9QUk9DUykKKwkJaWYg KGkgPCBGSVJTVF9QUkVQQVJFRF9YQUNUX1BST0NfTlVNQkVSKQogCQl7CiAJCQlwcm9jLT5z ZW0gPSBQR1NlbWFwaG9yZUNyZWF0ZSgpOwogCQkJSW5pdFNoYXJlZExhdGNoKCYocHJvYy0+ cHJvY0xhdGNoKSk7CkBAIC0zNjksNyArMzY5LDcgQEAgSW5pdFByb2NHbG9iYWwodm9pZCkK IAkgKiBwcm9jZXNzZXMgYW5kIHByZXBhcmVkIHRyYW5zYWN0aW9ucy4KIAkgKi8KIAlBdXhp bGlhcnlQcm9jcyA9ICZwcm9jc1tNYXhCYWNrZW5kc107Ci0JUHJlcGFyZWRYYWN0UHJvY3Mg PSAmcHJvY3NbTWF4QmFja2VuZHMgKyBOVU1fQVVYSUxJQVJZX1BST0NTXTsKKwlQcmVwYXJl ZFhhY3RQcm9jcyA9ICZwcm9jc1tGSVJTVF9QUkVQQVJFRF9YQUNUX1BST0NfTlVNQkVSXTsK IH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oIGIvc3Jj L2luY2x1ZGUvc3RvcmFnZS9wcm9jLmgKaW5kZXggYThkMmU3ZGIxYTEuLjNmODk0NTBjMjE2 IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2MuaAorKysgYi9zcmMvaW5j bHVkZS9zdG9yYWdlL3Byb2MuaApAQCAtNTMyLDYgKzUzMiw3IEBAIGV4dGVybiBQR0RMTElN UE9SVCBQR1BST0MgKlByZXBhcmVkWGFjdFByb2NzOwogI2RlZmluZSBNQVhfSU9fV09SS0VS UyAgICAgICAgICAzMgogI2RlZmluZSBOVU1fQVVYSUxJQVJZX1BST0NTCQkoNiArIE1BWF9J T19XT1JLRVJTKQogCisjZGVmaW5lIEZJUlNUX1BSRVBBUkVEX1hBQ1RfUFJPQ19OVU1CRVIJ KE1heEJhY2tlbmRzICsgTlVNX0FVWElMSUFSWV9QUk9DUykKIAogLyogY29uZmlndXJhYmxl IG9wdGlvbnMgKi8KIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgRGVhZGxvY2tUaW1lb3V0Owot LSAKMi40Ny4zCgo= --------------6enF0G9WDst0S9MWoqAKHn5W--