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 1nckHI-0006cw-3L for pgsql-hackers@arkaria.postgresql.org; Fri, 08 Apr 2022 08:47:36 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nckHG-0006gG-Hg for pgsql-hackers@arkaria.postgresql.org; Fri, 08 Apr 2022 08:47:34 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nckHF-0006g7-LS for pgsql-hackers@lists.postgresql.org; Fri, 08 Apr 2022 08:47:34 +0000 Received: from mail-ed1-x536.google.com ([2a00:1450:4864:20::536]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nckHB-0008J0-V2 for pgsql-hackers@postgresql.org; Fri, 08 Apr 2022 08:47:32 +0000 Received: by mail-ed1-x536.google.com with SMTP id q26so9241045edc.7 for ; Fri, 08 Apr 2022 01:47:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; h=message-id:subject:from:to:cc:date:in-reply-to:references :organization:user-agent:mime-version; bh=F4V7U14tv3gFle262QXY//Npt780Q6nBnI/kNg0GLAk=; b=L8JArS0DETj8QsnxASuLf3snfZQpu8UTF6EhCmuN8aYNlcJc1YhXYJkBCXthS24a+X EfoF1b6T9HotHl+3zp6A82CP+rThzw5b718vjdPxQriESoSu3t5u2374U1zX7oLLcZa4 ANWstjQG/pGzpFGkfOFSfsYHpkCqJ4IgJxsRJ5SgaOLvZAEQTH+7oFKAplpkIUHQAAKU JXl/ZR+SKHFPy9sUo1bYvku6LNTPFxnlI6sckMWJ2E8UzRJzh6uWKkDhq0RtKT5nCdOe WV3h5oQDgbDxgWJC4k5QEKYbrE84tQVzsk82WwHyzItoHTpQIGZMHSA7AhJS+y9/B4sV hqng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:subject:from:to:cc:date:in-reply-to :references:organization:user-agent:mime-version; bh=F4V7U14tv3gFle262QXY//Npt780Q6nBnI/kNg0GLAk=; b=b4WVR0ECOmI9oq7e7jiyNMWzX9eGxWcNbizSgE1JrYGQlOlk2S8TYsZ995xr3wiVX6 UgwnpoleGqKhgyy4aMrZwsMjW3EKseGF419QCdCE3acq965AsZEsCGlcf+lMVZJU0d22 Z0ZngVrwlGzBlU4+cVGr9OjXGbG+zTe5B9MXWXVqjvrrlWohDyiEJhqX8qKUQAO530r9 yPTR7WRk7emtJdRqUixX90i73NqlYTMLhEozbR3AtJ9y4rsaWxbhNx6tOnTjnekR9CH+ RHFFFCQyLy4ki5u5o9N2HttdtNlkCkpZgr/S74xqQ3PeTwU0ypDTnGzZhgHumqkvU8hB XkKQ== X-Gm-Message-State: AOAM530BbzsQT/GyAwCq5PPlqyj4IjLHkE+0CIk8YQBI0knXPpHrseRO QKBJ/z1RaBOocSA0TdywD6m402cAiSY2wtUN2QKnZhR/K8MXWIDLPRV61F4uEhvCW2J426/Qkxo LjdzvBzkUuCLaB5Cb7no+lfRQ87+EWb4fJe/eZ8a27qUTML0VNr/o2/J20Vy8nTw3zi9UcxExAV 23egdn+JjrpO1eVDZWmn26Xr9GrDO4TxWmq7zB X-Google-Smtp-Source: ABdhPJy7XCvyGgUXrwBCuBeOkovkI8B4PoXPGzqr8O7sHzpZ4iy4Id5W1teMtoRH8rnPSiyvBgZnVQ== X-Received: by 2002:a05:6402:1c1e:b0:416:5b93:eacf with SMTP id ck30-20020a0564021c1e00b004165b93eacfmr18617330edb.302.1649407648274; Fri, 08 Apr 2022 01:47:28 -0700 (PDT) Received: from [10.80.18.143] ([145.40.212.39]) by smtp.gmail.com with ESMTPSA id z4-20020a50da04000000b0041ccfe9f0fdsm6872740edj.15.2022.04.08.01.47.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Apr 2022 01:47:27 -0700 (PDT) Message-ID: Subject: Re: API stability [was: pgsql: Fix possible recovery trouble if TRUNCATE overlaps a checkpoint.] From: Markus Wanner To: Michael Paquier , Robert Haas Cc: Tom Lane , "pgsql-hackers@postgresql.org" , Kyotaro Horiguchi Date: Fri, 08 Apr 2022 10:47:26 +0200 In-Reply-To: References: <2358496.1649168259@sss.pgh.pa.us> Organization: EDB Content-Type: multipart/mixed; boundary="=-nchv41Moyhs1YMjotwsr" User-Agent: Evolution 3.38.3-1 MIME-Version: 1.0 X-CLOUD-SEC-AV-Info: enterprisedb,google_mail,monitor X-CLOUD-SEC-AV-Sent: true X-Gm-Spam: 0 X-Gm-Phishy: 0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-nchv41Moyhs1YMjotwsr Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit On Fri, 2022-04-08 at 08:47 +0900, Michael Paquier wrote: > On Thu, Apr 07, 2022 at 11:19:15AM -0400, Robert Haas wrote: > > Here are patches for master and v14 to do things this way. > > Comments? > > Thanks for the patches.  They look correct. +1, looks good to me and addresses my specific original concern. > For ~14, I'd rather avoid > the code duplication done by GetVirtualXIDsDelayingChkptEnd() and > HaveVirtualXIDsDelayingChkpt() that could be avoided with an extra > bool argument to the existing routine.  The same kind of duplication > happens with GetVirtualXIDsDelayingChkpt() and > GetVirtualXIDsDelayingChkptEnd(). I agree with Michael, it would be nice to not duplicate the code, but use a common underlying method. A modified patch is attached. Best Regards Markus --=-nchv41Moyhs1YMjotwsr Content-Disposition: attachment; filename="0001-Rethink-the-delay-v2.patch" Content-Type: text/x-patch; name="0001-Rethink-the-delay-v2.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbTogUm9iZXJ0IEhhYXMgPHJoYWFzQHBvc3RncmVzcWwub3JnPgpEYXRlOiBUaHUsIDcgQXBy IDIwMjIgMTE6MTU6MDcgLTA0MDAKU3ViamVjdDogW1BBVENIXSBSZXRoaW5rIHRoZSBkZWxheS1j aGVja3BvaW50LWVuZCBtZWNoYW5pc20gaW4gdGhlCiBiYWNrLWJyYW5jaGVzLgoKVGhlIGJhY2st cGF0Y2ggb2YgY29tbWl0IGJiYWNlNTY5N2RmMTIzOThlODdmZmQ5ODc5MTcxYzM5ZDI3ZjViMzMg aGFkCnRoZSB1bmZvcnR1bmF0ZSBlZmZlY3Qgb2YgY2hhbmdpbmcgdGhlIGxheW91dCBvZiBQR1BS T0MgaW4gdGhlCmJhY2stYnJhbmNoZXMsIHdoaWNoIGNvdWxkIGJyZWFrIGV4dGVuc2lvbnMuIFRo aXMgaGFwcGVuZWQgYmVjYXVzZSBpdApjaGFuZ2VkIHRoZSBkZWxheUNoa3B0IGZyb20gdHlwZSBi b29sIHRvIHR5cGUgaW50LiBTbywgY2hhbmdlIGl0IGJhY2ssCmFuZCBhZGQgYSBuZXcgYm9vbCBk ZWxheUNoa3B0RW5kIGZpZWxkIGluc3RlYWQuIFRoZSBuZXcgZmllbGQgc2hvdWxkCmZhbGwgd2l0 aGluIHdoYXQgdXNlZCB0byBiZSBwYWRkaW5nIHNwYWNlIHdpdGhpbiB0aGUgc3RydWN0LCBhbmQg c28KaG9wZWZ1bGx5IHdvbid0IGNhdXNlIGFueSBleHRlbnNpb25zIHRvIGJyZWFrLgoKUGVyIHJl cG9ydCBmcm9tIE1hcmt1cyBXYW5uZXIgYW5kIGRpc2N1c3Npb24gd2l0aCBUb20gTGFuZSBhbmQg b3RoZXJzLgotLS0KIGJhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMgIHwgICA2ICst CiBiYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3b3BoYXNlLmMgICB8ICAxMyArKy0tCiBiYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3hhY3QuYyAgICAgICB8ICAgNiArLQogYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS94bG9nLmMgICAgICAgfCAgMTAgKy0tCiBiYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dp bnNlcnQuYyB8ICAgMiAKIGJhY2tlbmQvY2F0YWxvZy9zdG9yYWdlLmMgICAgICAgICAgIHwgICA2 ICstCiBiYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jICAgICB8ICAgNiArLQogYmFja2Vu ZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYyAgICAgfCAxMDAgKysrKysrKysrKysrKysrKysrKysr KysrKysrLS0tLS0tLS0tCiBpbmNsdWRlL3N0b3JhZ2UvcHJvYy5oICAgICAgICAgICAgICB8ICAz NSArLS0tLS0tLS0tLS0KIGluY2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaCAgICAgICAgIHwgICA3 ICstCiAxMCBmaWxlcyBjaGFuZ2VkLCAxMDcgaW5zZXJ0aW9ucygrKSwgODQgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYwppbmRleCA1MGQ4YmFiOWUyMS4u YjY0MzU2NGYxNmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRp eGFjdC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jCkBAIC0z MDc1LDggKzMwNzUsOCBAQCBUcnVuY2F0ZU11bHRpWGFjdChNdWx0aVhhY3RJZCBuZXdPbGRlc3RN dWx0aSwgT2lkIG5ld09sZGVzdE11bHRpREIpCiAJICogY3Jhc2gvYmFzZWJhY2t1cCwgZXZlbiB0 aG91Z2ggdGhlIHN0YXRlIG9mIHRoZSBkYXRhIGRpcmVjdG9yeSB3b3VsZAogCSAqIHJlcXVpcmUg aXQuCiAJICovCi0JQXNzZXJ0KChNeVByb2MtPmRlbGF5Q2hrcHQgJiBERUxBWV9DSEtQVF9TVEFS VCkgPT0gMCk7Ci0JTXlQcm9jLT5kZWxheUNoa3B0IHw9IERFTEFZX0NIS1BUX1NUQVJUOworCUFz c2VydCghTXlQcm9jLT5kZWxheUNoa3B0KTsKKwlNeVByb2MtPmRlbGF5Q2hrcHQgPSB0cnVlOwog CiAJLyogV0FMIGxvZyB0cnVuY2F0aW9uICovCiAJV3JpdGVNVHJ1bmNhdGVYbG9nUmVjKG5ld09s ZGVzdE11bHRpREIsCkBAIC0zMTAyLDcgKzMxMDIsNyBAQCBUcnVuY2F0ZU11bHRpWGFjdChNdWx0 aVhhY3RJZCBuZXdPbGRlc3RNdWx0aSwgT2lkIG5ld09sZGVzdE11bHRpREIpCiAJLyogVGhlbiBv ZmZzZXRzICovCiAJUGVyZm9ybU9mZnNldHNUcnVuY2F0aW9uKG9sZGVzdE11bHRpLCBuZXdPbGRl c3RNdWx0aSk7CiAKLQlNeVByb2MtPmRlbGF5Q2hrcHQgJj0gfkRFTEFZX0NIS1BUX1NUQVJUOwor CU15UHJvYy0+ZGVsYXlDaGtwdCA9IGZhbHNlOwogCiAJRU5EX0NSSVRfU0VDVElPTigpOwogCUxX TG9ja1JlbGVhc2UoTXVsdGlYYWN0VHJ1bmNhdGlvbkxvY2spOwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdvcGhhc2UuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3R3b3BoYXNlLmMKaW5kZXggZGVhM2Y0ODVmN2EuLjYzM2E2ZjE3NDdmIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90d29waGFzZS5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3R3b3BoYXNlLmMKQEAgLTQ3NCw4ICs0NzQsOSBAQCBNYXJrQXNQcmVw YXJpbmdHdXRzKEdsb2JhbFRyYW5zYWN0aW9uIGd4YWN0LCBUcmFuc2FjdGlvbklkIHhpZCwgY29u c3QgY2hhciAqZ2lkLAogCX0KIAlwcm9jLT54aWQgPSB4aWQ7CiAJQXNzZXJ0KHByb2MtPnhtaW4g PT0gSW52YWxpZFRyYW5zYWN0aW9uSWQpOwotCXByb2MtPmRlbGF5Q2hrcHQgPSAwOworCXByb2Mt PmRlbGF5Q2hrcHQgPSBmYWxzZTsKIAlwcm9jLT5zdGF0dXNGbGFncyA9IDA7CisJcHJvYy0+ZGVs YXlDaGtwdEVuZCA9IGZhbHNlOwogCXByb2MtPnBpZCA9IDA7CiAJcHJvYy0+ZGF0YWJhc2VJZCA9 IGRhdGFiYXNlaWQ7CiAJcHJvYy0+cm9sZUlkID0gb3duZXI7CkBAIC0xMTY1LDggKzExNjYsNyBA QCBFbmRQcmVwYXJlKEdsb2JhbFRyYW5zYWN0aW9uIGd4YWN0KQogCiAJU1RBUlRfQ1JJVF9TRUNU SU9OKCk7CiAKLQlBc3NlcnQoKE15UHJvYy0+ZGVsYXlDaGtwdCAmIERFTEFZX0NIS1BUX1NUQVJU KSA9PSAwKTsKLQlNeVByb2MtPmRlbGF5Q2hrcHQgfD0gREVMQVlfQ0hLUFRfU1RBUlQ7CisJTXlQ cm9jLT5kZWxheUNoa3B0ID0gdHJ1ZTsKIAogCVhMb2dCZWdpbkluc2VydCgpOwogCWZvciAocmVj b3JkID0gcmVjb3Jkcy5oZWFkOyByZWNvcmQgIT0gTlVMTDsgcmVjb3JkID0gcmVjb3JkLT5uZXh0 KQpAQCAtMTIwOSw3ICsxMjA5LDcgQEAgRW5kUHJlcGFyZShHbG9iYWxUcmFuc2FjdGlvbiBneGFj dCkKIAkgKiBjaGVja3BvaW50IHN0YXJ0aW5nIGFmdGVyIHRoaXMgd2lsbCBjZXJ0YWlubHkgc2Vl IHRoZSBneGFjdCBhcyBhCiAJICogY2FuZGlkYXRlIGZvciBmc3luY2luZy4KIAkgKi8KLQlNeVBy b2MtPmRlbGF5Q2hrcHQgJj0gfkRFTEFZX0NIS1BUX1NUQVJUOworCU15UHJvYy0+ZGVsYXlDaGtw dCA9IGZhbHNlOwogCiAJLyoKIAkgKiBSZW1lbWJlciB0aGF0IHdlIGhhdmUgdGhpcyBHbG9iYWxU cmFuc2FjdGlvbiBlbnRyeSBsb2NrZWQgZm9yIHVzLiAgSWYKQEAgLTIyNzYsOCArMjI3Niw3IEBA IFJlY29yZFRyYW5zYWN0aW9uQ29tbWl0UHJlcGFyZWQoVHJhbnNhY3Rpb25JZCB4aWQsCiAJU1RB UlRfQ1JJVF9TRUNUSU9OKCk7CiAKIAkvKiBTZWUgbm90ZXMgaW4gUmVjb3JkVHJhbnNhY3Rpb25D b21taXQgKi8KLQlBc3NlcnQoKE15UHJvYy0+ZGVsYXlDaGtwdCAmIERFTEFZX0NIS1BUX1NUQVJU KSA9PSAwKTsKLQlNeVByb2MtPmRlbGF5Q2hrcHQgfD0gREVMQVlfQ0hLUFRfU1RBUlQ7CisJTXlQ cm9jLT5kZWxheUNoa3B0ID0gdHJ1ZTsKIAogCS8qCiAJICogRW1pdCB0aGUgWExPRyBjb21taXQg cmVjb3JkLiBOb3RlIHRoYXQgd2UgbWFyayAyUEMgY29tbWl0cyBhcwpAQCAtMjMyNSw3ICsyMzI0 LDcgQEAgUmVjb3JkVHJhbnNhY3Rpb25Db21taXRQcmVwYXJlZChUcmFuc2FjdGlvbklkIHhpZCwK IAlUcmFuc2FjdGlvbklkQ29tbWl0VHJlZSh4aWQsIG5jaGlsZHJlbiwgY2hpbGRyZW4pOwogCiAJ LyogQ2hlY2twb2ludCBjYW4gcHJvY2VlZCBub3cgKi8KLQlNeVByb2MtPmRlbGF5Q2hrcHQgJj0g fkRFTEFZX0NIS1BUX1NUQVJUOworCU15UHJvYy0+ZGVsYXlDaGtwdCA9IGZhbHNlOwogCiAJRU5E X0NSSVRfU0VDVElPTigpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS94YWN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMKaW5kZXggYzVlNzI2 MTkyMWQuLmU4NTIzNjkzYzBhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS94YWN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jCkBAIC0xMzM1 LDkgKzEzMzUsOSBAQCBSZWNvcmRUcmFuc2FjdGlvbkNvbW1pdCh2b2lkKQogCQkgKiBUaGlzIG1h a2VzIGNoZWNrcG9pbnQncyBkZXRlcm1pbmF0aW9uIG9mIHdoaWNoIHhhY3RzIGFyZSBkZWxheUNo a3B0CiAJCSAqIGEgYml0IGZ1enp5LCBidXQgaXQgZG9lc24ndCBtYXR0ZXIuCiAJCSAqLwotCQlB c3NlcnQoKE15UHJvYy0+ZGVsYXlDaGtwdCAmIERFTEFZX0NIS1BUX1NUQVJUKSA9PSAwKTsKKwkJ QXNzZXJ0KCFNeVByb2MtPmRlbGF5Q2hrcHQpOwogCQlTVEFSVF9DUklUX1NFQ1RJT04oKTsKLQkJ TXlQcm9jLT5kZWxheUNoa3B0IHw9IERFTEFZX0NIS1BUX1NUQVJUOworCQlNeVByb2MtPmRlbGF5 Q2hrcHQgPSB0cnVlOwogCiAJCVNldEN1cnJlbnRUcmFuc2FjdGlvblN0b3BUaW1lc3RhbXAoKTsK IApAQCAtMTQzOCw3ICsxNDM4LDcgQEAgUmVjb3JkVHJhbnNhY3Rpb25Db21taXQodm9pZCkKIAkg Ki8KIAlpZiAobWFya1hpZENvbW1pdHRlZCkKIAl7Ci0JCU15UHJvYy0+ZGVsYXlDaGtwdCAmPSB+ REVMQVlfQ0hLUFRfU1RBUlQ7CisJCU15UHJvYy0+ZGVsYXlDaGtwdCA9IGZhbHNlOwogCQlFTkRf Q1JJVF9TRUNUSU9OKCk7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS94bG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKaW5kZXggZDg4 OWQ2OTM4N2UuLjhlZGYwZmE2NDYxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS94bG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCkBAIC05 MjI4LDI3ICs5MjI4LDI1IEBAIENyZWF0ZUNoZWNrUG9pbnQoaW50IGZsYWdzKQogCSAqIGFuZCB3 ZSB3aWxsIGNvcnJlY3RseSBmbHVzaCB0aGUgdXBkYXRlIGJlbG93LiAgU28gd2UgY2Fubm90IG1p c3MgYW55CiAJICogeGFjdHMgd2UgbmVlZCB0byB3YWl0IGZvci4KIAkgKi8KLQl2eGlkcyA9IEdl dFZpcnR1YWxYSURzRGVsYXlpbmdDaGtwdCgmbnZ4aWRzLCBERUxBWV9DSEtQVF9TVEFSVCk7CisJ dnhpZHMgPSBHZXRWaXJ0dWFsWElEc0RlbGF5aW5nQ2hrcHQoJm52eGlkcyk7CiAJaWYgKG52eGlk cyA+IDApCiAJewogCQlkbwogCQl7CiAJCQlwZ191c2xlZXAoMTAwMDBMKTsJLyogd2FpdCBmb3Ig MTAgbXNlYyAqLwotCQl9IHdoaWxlIChIYXZlVmlydHVhbFhJRHNEZWxheWluZ0Noa3B0KHZ4aWRz LCBudnhpZHMsCi0JCQkJCQkJCQkJCSAgREVMQVlfQ0hLUFRfU1RBUlQpKTsKKwkJfSB3aGlsZSAo SGF2ZVZpcnR1YWxYSURzRGVsYXlpbmdDaGtwdCh2eGlkcywgbnZ4aWRzKSk7CiAJfQogCXBmcmVl KHZ4aWRzKTsKIAogCUNoZWNrUG9pbnRHdXRzKGNoZWNrUG9pbnQucmVkbywgZmxhZ3MpOwogCi0J dnhpZHMgPSBHZXRWaXJ0dWFsWElEc0RlbGF5aW5nQ2hrcHQoJm52eGlkcywgREVMQVlfQ0hLUFRf Q09NUExFVEUpOworCXZ4aWRzID0gR2V0VmlydHVhbFhJRHNEZWxheWluZ0Noa3B0RW5kKCZudnhp ZHMpOwogCWlmIChudnhpZHMgPiAwKQogCXsKIAkJZG8KIAkJewogCQkJcGdfdXNsZWVwKDEwMDAw TCk7CS8qIHdhaXQgZm9yIDEwIG1zZWMgKi8KLQkJfSB3aGlsZSAoSGF2ZVZpcnR1YWxYSURzRGVs YXlpbmdDaGtwdCh2eGlkcywgbnZ4aWRzLAotCQkJCQkJCQkJCQkgIERFTEFZX0NIS1BUX0NPTVBM RVRFKSk7CisJCX0gd2hpbGUgKEhhdmVWaXJ0dWFsWElEc0RlbGF5aW5nQ2hrcHRFbmQodnhpZHMs IG52eGlkcykpOwogCX0KIAlwZnJlZSh2eGlkcyk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3hsb2dpbnNlcnQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2Ft L3hsb2dpbnNlcnQuYwppbmRleCAxYWY0YTkwYzQxOS4uYjE1M2ZhZDU5NGQgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dpbnNlcnQuYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS94bG9naW5zZXJ0LmMKQEAgLTkyNSw3ICs5MjUsNyBAQCBYTG9nU2F2 ZUJ1ZmZlckZvckhpbnQoQnVmZmVyIGJ1ZmZlciwgYm9vbCBidWZmZXJfc3RkKQogCS8qCiAJICog RW5zdXJlIG5vIGNoZWNrcG9pbnQgY2FuIGNoYW5nZSBvdXIgdmlldyBvZiBSZWRvUmVjUHRyLgog CSAqLwotCUFzc2VydCgoTXlQcm9jLT5kZWxheUNoa3B0ICYgREVMQVlfQ0hLUFRfU1RBUlQpICE9 IDApOworCUFzc2VydChNeVByb2MtPmRlbGF5Q2hrcHQpOwogCiAJLyoKIAkgKiBVcGRhdGUgUmVk b1JlY1B0ciBzbyB0aGF0IHdlIGNhbiBtYWtlIHRoZSByaWdodCBkZWNpc2lvbgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zdG9yYWdlLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N0 b3JhZ2UuYwppbmRleCBmYTU2ODJkY2U4MC4uYjdmYzQ5MWE2ODQgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2NhdGFsb2cvc3RvcmFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3RvcmFn ZS5jCkBAIC0zMzgsOCArMzM4LDggQEAgUmVsYXRpb25UcnVuY2F0ZShSZWxhdGlvbiByZWwsIEJs b2NrTnVtYmVyIG5ibG9ja3MpCiAJICogdGhlIGJsb2NrcyB0byBub3QgZXhpc3Qgb24gZGlzayBh dCBhbGwsIGJ1dCBub3QgZm9yIHRoZW0gdG8gaGF2ZSB0aGUKIAkgKiB3cm9uZyBjb250ZW50cy4K IAkgKi8KLQlBc3NlcnQoKE15UHJvYy0+ZGVsYXlDaGtwdCAmIERFTEFZX0NIS1BUX0NPTVBMRVRF KSA9PSAwKTsKLQlNeVByb2MtPmRlbGF5Q2hrcHQgfD0gREVMQVlfQ0hLUFRfQ09NUExFVEU7CisJ QXNzZXJ0KCFNeVByb2MtPmRlbGF5Q2hrcHRFbmQpOworCU15UHJvYy0+ZGVsYXlDaGtwdEVuZCA9 IHRydWU7CiAKIAkvKgogCSAqIFdlIFdBTC1sb2cgdGhlIHRydW5jYXRpb24gYmVmb3JlIGFjdHVh bGx5IHRydW5jYXRpbmcsIHdoaWNoIG1lYW5zCkBAIC0zODcsNyArMzg3LDcgQEAgUmVsYXRpb25U cnVuY2F0ZShSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIG5ibG9ja3MpCiAJc21ncnRydW5jYXRl KHJlbC0+cmRfc21nciwgZm9ya3MsIG5mb3JrcywgYmxvY2tzKTsKIAogCS8qIFdlJ3ZlIGRvbmUg YWxsIHRoZSBjcml0aWNhbCB3b3JrLCBzbyBjaGVja3BvaW50cyBhcmUgT0sgbm93LiAqLwotCU15 UHJvYy0+ZGVsYXlDaGtwdCAmPSB+REVMQVlfQ0hLUFRfQ09NUExFVEU7CisJTXlQcm9jLT5kZWxh eUNoa3B0RW5kID0gZmFsc2U7CiAKIAkvKgogCSAqIFVwZGF0ZSB1cHBlci1sZXZlbCBGU00gcGFn ZXMgdG8gYWNjb3VudCBmb3IgdGhlIHRydW5jYXRpb24uIFRoaXMgaXMKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9i dWZmZXIvYnVmbWdyLmMKaW5kZXggYTU1NTQ1YTE4NzUuLjQ5NTYxYWU3OTRkIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYworKysgYi9zcmMvYmFja2VuZC9z dG9yYWdlL2J1ZmZlci9idWZtZ3IuYwpAQCAtMzk0Niw4ICszOTQ2LDggQEAgTWFya0J1ZmZlckRp cnR5SGludChCdWZmZXIgYnVmZmVyLCBib29sIGJ1ZmZlcl9zdGQpCiAJCQkgKiBlc3NlbnRpYWwg dGhhdCBDcmVhdGVDaGVja3BvaW50IHdhaXRzIGZvciB2aXJ0dWFsIHRyYW5zYWN0aW9ucwogCQkJ ICogcmF0aGVyIHRoYW4gZnVsbCB0cmFuc2FjdGlvbmlkcy4KIAkJCSAqLwotCQkJQXNzZXJ0KChN eVByb2MtPmRlbGF5Q2hrcHQgJiBERUxBWV9DSEtQVF9TVEFSVCkgPT0gMCk7Ci0JCQlNeVByb2Mt PmRlbGF5Q2hrcHQgfD0gREVMQVlfQ0hLUFRfU1RBUlQ7CisJCQlBc3NlcnQoIU15UHJvYy0+ZGVs YXlDaGtwdCk7CisJCQlNeVByb2MtPmRlbGF5Q2hrcHQgPSB0cnVlOwogCQkJZGVsYXlDaGtwdCA9 IHRydWU7CiAJCQlsc24gPSBYTG9nU2F2ZUJ1ZmZlckZvckhpbnQoYnVmZmVyLCBidWZmZXJfc3Rk KTsKIAkJfQpAQCAtMzk4MSw3ICszOTgxLDcgQEAgTWFya0J1ZmZlckRpcnR5SGludChCdWZmZXIg YnVmZmVyLCBib29sIGJ1ZmZlcl9zdGQpCiAJCVVubG9ja0J1ZkhkcihidWZIZHIsIGJ1Zl9zdGF0 ZSk7CiAKIAkJaWYgKGRlbGF5Q2hrcHQpCi0JCQlNeVByb2MtPmRlbGF5Q2hrcHQgJj0gfkRFTEFZ X0NIS1BUX1NUQVJUOworCQkJTXlQcm9jLT5kZWxheUNoa3B0ID0gZmFsc2U7CiAKIAkJaWYgKGRp cnRpZWQpCiAJCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJh eS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMKaW5kZXggYWU3MWQ3NTM4 YmUuLjU0ZmQ4NjE1YWQ5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9j YXJyYXkuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYwpAQCAtMzMw LDYgKzMzMCwxMSBAQCBzdGF0aWMgdm9pZCBEaXNwbGF5WGlkQ2FjaGUodm9pZCk7CiAjZGVmaW5l IHhjX3Nsb3dfYW5zd2VyX2luYygpCQkoKHZvaWQpIDApCiAjZW5kaWYJCQkJCQkJLyogWElEQ0FD SEVfREVCVUcgKi8KIAorc3RhdGljIFZpcnR1YWxUcmFuc2FjdGlvbklkICpHZXRWaXJ0dWFsWElE c0RlbGF5aW5nQ2hrcHRHdXRzKGludCAqbnZ4aWRzLAorCQkJCQkJCQkJCQkJCQkJIGludCB0eXBl KTsKK3N0YXRpYyBib29sIEhhdmVWaXJ0dWFsWElEc0RlbGF5aW5nQ2hrcHRHdXRzKFZpcnR1YWxU cmFuc2FjdGlvbklkICp2eGlkcywKKwkJCQkJCQkJCQkJIGludCBudnhpZHMsIGludCB0eXBlKTsK KwogLyogUHJpbWl0aXZlcyBmb3IgS25vd25Bc3NpZ25lZFhpZHMgYXJyYXkgaGFuZGxpbmcgZm9y IHN0YW5kYnkgKi8KIHN0YXRpYyB2b2lkIEtub3duQXNzaWduZWRYaWRzQ29tcHJlc3MoYm9vbCBm b3JjZSk7CiBzdGF0aWMgdm9pZCBLbm93bkFzc2lnbmVkWGlkc0FkZChUcmFuc2FjdGlvbklkIGZy b21feGlkLCBUcmFuc2FjdGlvbklkIHRvX3hpZCwKQEAgLTY5MCw4ICs2OTUsOSBAQCBQcm9jQXJy YXlFbmRUcmFuc2FjdGlvbihQR1BST0MgKnByb2MsIFRyYW5zYWN0aW9uSWQgbGF0ZXN0WGlkKQog CQlwcm9jLT5seGlkID0gSW52YWxpZExvY2FsVHJhbnNhY3Rpb25JZDsKIAkJcHJvYy0+eG1pbiA9 IEludmFsaWRUcmFuc2FjdGlvbklkOwogCi0JCS8qIGJlIHN1cmUgdGhpcyBpcyBjbGVhcmVkIGlu IGFib3J0ICovCi0JCXByb2MtPmRlbGF5Q2hrcHQgPSAwOworCQkvKiBiZSBzdXJlIHRoZXNlIGFy ZSBjbGVhcmVkIGluIGFib3J0ICovCisJCXByb2MtPmRlbGF5Q2hrcHQgPSBmYWxzZTsKKwkJcHJv Yy0+ZGVsYXlDaGtwdEVuZCA9IGZhbHNlOwogCiAJCXByb2MtPnJlY292ZXJ5Q29uZmxpY3RQZW5k aW5nID0gZmFsc2U7CiAKQEAgLTczMiw4ICs3MzgsOSBAQCBQcm9jQXJyYXlFbmRUcmFuc2FjdGlv bkludGVybmFsKFBHUFJPQyAqcHJvYywgVHJhbnNhY3Rpb25JZCBsYXRlc3RYaWQpCiAJcHJvYy0+ bHhpZCA9IEludmFsaWRMb2NhbFRyYW5zYWN0aW9uSWQ7CiAJcHJvYy0+eG1pbiA9IEludmFsaWRU cmFuc2FjdGlvbklkOwogCi0JLyogYmUgc3VyZSB0aGlzIGlzIGNsZWFyZWQgaW4gYWJvcnQgKi8K LQlwcm9jLT5kZWxheUNoa3B0ID0gMDsKKwkvKiBiZSBzdXJlIHRoZXNlIGFyZSBjbGVhcmVkIGlu IGFib3J0ICovCisJcHJvYy0+ZGVsYXlDaGtwdCA9IGZhbHNlOworCXByb2MtPmRlbGF5Q2hrcHRF bmQgPSBmYWxzZTsKIAogCXByb2MtPnJlY292ZXJ5Q29uZmxpY3RQZW5kaW5nID0gZmFsc2U7CiAK QEAgLTMwNDUsMzQgKzMwNTIsMzQgQEAgR2V0T2xkZXN0U2FmZURlY29kaW5nVHJhbnNhY3Rpb25J ZChib29sIGNhdGFsb2dPbmx5KQogfQogCiAvKgotICogR2V0VmlydHVhbFhJRHNEZWxheWluZ0No a3B0IC0tIEdldCB0aGUgVlhJRHMgb2YgdHJhbnNhY3Rpb25zIHRoYXQgYXJlCi0gKiBkZWxheWlu ZyBjaGVja3BvaW50IGJlY2F1c2UgdGhleSBoYXZlIGNyaXRpY2FsIGFjdGlvbnMgaW4gcHJvZ3Jl c3MuCisgKiBHZXRWaXJ0dWFsWElEc0RlbGF5aW5nQ2hrcHRHdXRzIC0tIEdldCB0aGUgVlhJRHMg b2YgdHJhbnNhY3Rpb25zIHRoYXQgYXJlCisgKiBkZWxheWluZyB0aGUgc3RhcnQgb3IgZW5kIG9m IGEgY2hlY2twb2ludCBiZWNhdXNlIHRoZXkgaGF2ZSBjcml0aWNhbAorICogYWN0aW9ucyBpbiBw cm9ncmVzcy4KICAqCiAgKiBDb25zdHJ1Y3RzIGFuIGFycmF5IG9mIFZYSURzIG9mIHRyYW5zYWN0 aW9ucyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gY29tbWl0Ci0gKiBjcml0aWNhbCBzZWN0aW9ucywg YXMgc2hvd24gYnkgaGF2aW5nIHNwZWNpZmllZCBkZWxheUNoa3B0IGJpdHMgc2V0IGluIHRoZWly Ci0gKiBQR1BST0MuCisgKiBjcml0aWNhbCBzZWN0aW9ucywgYXMgc2hvd24gYnkgaGF2aW5nIGRl bGF5Q2hrcHQgb3IgZGVsYXlDaGtwdEVuZCBzZXQgaW4KKyAqIHRoZWlyIFBHUFJPQy4KICAqCiAg KiBSZXR1cm5zIGEgcGFsbG9jJ2QgYXJyYXkgdGhhdCBzaG91bGQgYmUgZnJlZWQgYnkgdGhlIGNh bGxlci4KICAqICpudnhpZHMgaXMgdGhlIG51bWJlciBvZiB2YWxpZCBlbnRyaWVzLgogICoKLSAq IE5vdGUgdGhhdCBiZWNhdXNlIGJhY2tlbmRzIHNldCBvciBjbGVhciBkZWxheUNoa3B0IHdpdGhv dXQgaG9sZGluZyBhbnkgbG9jaywKLSAqIHRoZSByZXN1bHQgaXMgc29tZXdoYXQgaW5kZXRlcm1p bmF0ZSwgYnV0IHdlIGRvbid0IHJlYWxseSBjYXJlLiAgRXZlbiBpbgotICogYSBtdWx0aXByb2Nl c3NvciB3aXRoIGRlbGF5ZWQgd3JpdGVzIHRvIHNoYXJlZCBtZW1vcnksIGl0IHNob3VsZCBiZSBj ZXJ0YWluCi0gKiB0aGF0IHNldHRpbmcgb2YgZGVsYXlDaGtwdCB3aWxsIHByb3BhZ2F0ZSB0byBz aGFyZWQgbWVtb3J5IHdoZW4gdGhlIGJhY2tlbmQKLSAqIHRha2VzIGEgbG9jaywgc28gd2UgY2Fu bm90IGZhaWwgdG8gc2VlIGEgdmlydHVhbCB4YWN0IGFzIGRlbGF5Q2hrcHQgaWYKLSAqIGl0J3Mg YWxyZWFkeSBpbnNlcnRlZCBpdHMgY29tbWl0IHJlY29yZC4gIFdoZXRoZXIgaXQgdGFrZXMgYSBs aXR0bGUgd2hpbGUKLSAqIGZvciBjbGVhcmluZyBvZiBkZWxheUNoa3B0IHRvIHByb3BhZ2F0ZSBp cyB1bmltcG9ydGFudCBmb3IgY29ycmVjdG5lc3MuCisgKiBOb3RlIHRoYXQgYmVjYXVzZSBiYWNr ZW5kcyBzZXQgb3IgY2xlYXIgZGVsYXlDaGtwdCBhbmQgZGVsYXlDaGtwdEVuZAorICogd2l0aG91 dCBob2xkaW5nIGFueSBsb2NrLCB0aGUgcmVzdWx0IGlzIHNvbWV3aGF0IGluZGV0ZXJtaW5hdGUs IGJ1dCB3ZQorICogZG9uJ3QgcmVhbGx5IGNhcmUuICBFdmVuIGluIGEgbXVsdGlwcm9jZXNzb3Ig d2l0aCBkZWxheWVkIHdyaXRlcyB0bworICogc2hhcmVkIG1lbW9yeSwgaXQgc2hvdWxkIGJlIGNl cnRhaW4gdGhhdCBzZXR0aW5nIG9mIGRlbGF5Q2hrcHQgd2lsbAorICogcHJvcGFnYXRlIHRvIHNo YXJlZCBtZW1vcnkgd2hlbiB0aGUgYmFja2VuZCB0YWtlcyBhIGxvY2ssIHNvIHdlIGNhbm5vdAor ICogZmFpbCB0byBzZWUgYSB2aXJ0dWFsIHhhY3QgYXMgZGVsYXlDaGtwdCBpZiBpdCdzIGFscmVh ZHkgaW5zZXJ0ZWQgaXRzCisgKiBjb21taXQgcmVjb3JkLiAgV2hldGhlciBpdCB0YWtlcyBhIGxp dHRsZSB3aGlsZSBmb3IgY2xlYXJpbmcgb2YKKyAqIGRlbGF5Q2hrcHQgdG8gcHJvcGFnYXRlIGlz IHVuaW1wb3J0YW50IGZvciBjb3JyZWN0bmVzcy4KICAqLwotVmlydHVhbFRyYW5zYWN0aW9uSWQg KgotR2V0VmlydHVhbFhJRHNEZWxheWluZ0Noa3B0KGludCAqbnZ4aWRzLCBpbnQgdHlwZSkKK3N0 YXRpYyBWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqCitHZXRWaXJ0dWFsWElEc0RlbGF5aW5nQ2hrcHRH dXRzKGludCAqbnZ4aWRzLCBpbnQgdHlwZSkKIHsKIAlWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqdnhp ZHM7CiAJUHJvY0FycmF5U3RydWN0ICphcnJheVAgPSBwcm9jQXJyYXk7CiAJaW50CQkJY291bnQg PSAwOwogCWludAkJCWluZGV4OwogCi0JQXNzZXJ0KHR5cGUgIT0gMCk7Ci0KIAkvKiBhbGxvY2F0 ZSB3aGF0J3MgY2VydGFpbmx5IGVub3VnaCByZXN1bHQgc3BhY2UgKi8KIAl2eGlkcyA9IChWaXJ0 dWFsVHJhbnNhY3Rpb25JZCAqKQogCQlwYWxsb2Moc2l6ZW9mKFZpcnR1YWxUcmFuc2FjdGlvbklk KSAqIGFycmF5UC0+bWF4UHJvY3MpOwpAQCAtMzA4NCw3ICszMDkxLDggQEAgR2V0VmlydHVhbFhJ RHNEZWxheWluZ0Noa3B0KGludCAqbnZ4aWRzLCBpbnQgdHlwZSkKIAkJaW50CQkJcGdwcm9jbm8g PSBhcnJheVAtPnBncHJvY25vc1tpbmRleF07CiAJCVBHUFJPQwkgICAqcHJvYyA9ICZhbGxQcm9j c1twZ3Byb2Nub107CiAKLQkJaWYgKChwcm9jLT5kZWxheUNoa3B0ICYgdHlwZSkgIT0gMCkKKwkJ aWYgKCgodHlwZSAmIERFTEFZX0NIS1BUX1NUQVJUKSAmJiBwcm9jLT5kZWxheUNoa3B0KSB8fAor CQkJKCh0eXBlICYgREVMQVlfQ0hLUFRfQ09NUExFVEUpICYmIHByb2MtPmRlbGF5Q2hrcHRFbmQp KQogCQl7CiAJCQlWaXJ0dWFsVHJhbnNhY3Rpb25JZCB2eGlkOwogCkBAIC0zMTAwLDYgKzMxMDgs MjYgQEAgR2V0VmlydHVhbFhJRHNEZWxheWluZ0Noa3B0KGludCAqbnZ4aWRzLCBpbnQgdHlwZSkK IAlyZXR1cm4gdnhpZHM7CiB9CiAKKy8qCisgKiBHZXRWaXJ0dWFsWElEc0RlbGF5aW5nQ2hrcHQg LSBHZXQgdGhlIFZYSURzIG9mIHRyYW5zYWN0aW9ucyB0aGF0IGFyZQorICogZGVsYXlpbmcgdGhl IHN0YXJ0IG9mIGEgY2hlY2twb2ludC4KKyAqLworVmlydHVhbFRyYW5zYWN0aW9uSWQgKgorR2V0 VmlydHVhbFhJRHNEZWxheWluZ0Noa3B0KGludCAqbnZ4aWRzKQoreworCXJldHVybiBHZXRWaXJ0 dWFsWElEc0RlbGF5aW5nQ2hrcHRHdXRzKG52eGlkcywgREVMQVlfQ0hLUFRfU1RBUlQpOworfQor CisvKgorICogR2V0VmlydHVhbFhJRHNEZWxheWluZ0Noa3B0RW5kIC0gR2V0IHRoZSBWWElEcyBv ZiB0cmFuc2FjdGlvbnMgdGhhdCBhcmUKKyAqIGRlbGF5aW5nIHRoZSBlbmQgb2YgYSBjaGVja3Bv aW50LgorICovCitWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqCitHZXRWaXJ0dWFsWElEc0RlbGF5aW5n Q2hrcHRFbmQoaW50ICpudnhpZHMpCit7CisJcmV0dXJuIEdldFZpcnR1YWxYSURzRGVsYXlpbmdD aGtwdEd1dHMobnZ4aWRzLCBERUxBWV9DSEtQVF9DT01QTEVURSk7Cit9CisKIC8qCiAgKiBIYXZl VmlydHVhbFhJRHNEZWxheWluZ0Noa3B0IC0tIEFyZSBhbnkgb2YgdGhlIHNwZWNpZmllZCBWWElE cyBkZWxheWluZz8KICAqCkBAIC0zMTA5LDE1ICszMTM3LDE0IEBAIEdldFZpcnR1YWxYSURzRGVs YXlpbmdDaGtwdChpbnQgKm52eGlkcywgaW50IHR5cGUpCiAgKiBOb3RlOiB0aGlzIGlzIE8oTl4y KSBpbiB0aGUgbnVtYmVyIG9mIHZ4YWN0cyB0aGF0IGFyZS93ZXJlIGRlbGF5aW5nLCBidXQKICAq IHRob3NlIG51bWJlcnMgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCBmb3IgaXQgbm90IHRvIGJlIGEg cHJvYmxlbS4KICAqLwotYm9vbAotSGF2ZVZpcnR1YWxYSURzRGVsYXlpbmdDaGtwdChWaXJ0dWFs VHJhbnNhY3Rpb25JZCAqdnhpZHMsIGludCBudnhpZHMsIGludCB0eXBlKQorc3RhdGljIGJvb2wK K0hhdmVWaXJ0dWFsWElEc0RlbGF5aW5nQ2hrcHRHdXRzKFZpcnR1YWxUcmFuc2FjdGlvbklkICp2 eGlkcywgaW50IG52eGlkcywKKwkJCQkJCQkJIGludCB0eXBlKQogewogCWJvb2wJCXJlc3VsdCA9 IGZhbHNlOwogCVByb2NBcnJheVN0cnVjdCAqYXJyYXlQID0gcHJvY0FycmF5OwogCWludAkJCWlu ZGV4OwogCi0JQXNzZXJ0KHR5cGUgIT0gMCk7Ci0KIAlMV0xvY2tBY3F1aXJlKFByb2NBcnJheUxv Y2ssIExXX1NIQVJFRCk7CiAKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheVAtPm51bVBy b2NzOyBpbmRleCsrKQpAQCAtMzEyOCw3ICszMTU1LDggQEAgSGF2ZVZpcnR1YWxYSURzRGVsYXlp bmdDaGtwdChWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqdnhpZHMsIGludCBudnhpZHMsIGludCB0eXBl KQogCiAJCUdFVF9WWElEX0ZST01fUEdQUk9DKHZ4aWQsICpwcm9jKTsKIAotCQlpZiAoKHByb2Mt PmRlbGF5Q2hrcHQgJiB0eXBlKSAhPSAwICYmCisJCWlmICgoKCh0eXBlICYgREVMQVlfQ0hLUFRf U1RBUlQpICYmIHByb2MtPmRlbGF5Q2hrcHQpIHx8CisJCQkgKCh0eXBlICYgREVMQVlfQ0hLUFRf Q09NUExFVEUpICYmIHByb2MtPmRlbGF5Q2hrcHRFbmQpKSAmJgogCQkJVmlydHVhbFRyYW5zYWN0 aW9uSWRJc1ZhbGlkKHZ4aWQpKQogCQl7CiAJCQlpbnQJCQlpOwpAQCAtMzE1MSw2ICszMTc5LDI4 IEBAIEhhdmVWaXJ0dWFsWElEc0RlbGF5aW5nQ2hrcHQoVmlydHVhbFRyYW5zYWN0aW9uSWQgKnZ4 aWRzLCBpbnQgbnZ4aWRzLCBpbnQgdHlwZSkKIAlyZXR1cm4gcmVzdWx0OwogfQogCisvKgorICog SGF2ZVZpcnR1YWxYSURzRGVsYXlpbmdDaGtwdCAtLSBBcmUgYW55IG9mIHRoZSBzcGVjaWZpZWQg VlhJRHMgZGVsYXlpbmcKKyAqIHRoZSBzdGFydCBvZiBhIGNoZWNrcG9pbnQ/CisgKi8KK2Jvb2wK K0hhdmVWaXJ0dWFsWElEc0RlbGF5aW5nQ2hrcHQoVmlydHVhbFRyYW5zYWN0aW9uSWQgKnZ4aWRz LCBpbnQgbnZ4aWRzKQoreworCXJldHVybiBIYXZlVmlydHVhbFhJRHNEZWxheWluZ0Noa3B0R3V0 cyh2eGlkcywgbnZ4aWRzLAorCQkJCQkJCQkJCQlERUxBWV9DSEtQVF9TVEFSVCk7Cit9CisKKy8q CisgKiBIYXZlVmlydHVhbFhJRHNEZWxheWluZ0Noa3B0RW5kIC0tIEFyZSBhbnkgb2YgdGhlIHNw ZWNpZmllZCBWWElEcyBkZWxheWluZworICogdGhlIGVuZCBvZiBhIGNoZWNrcG9pbnQ/CisgKi8K K2Jvb2wKK0hhdmVWaXJ0dWFsWElEc0RlbGF5aW5nQ2hrcHRFbmQoVmlydHVhbFRyYW5zYWN0aW9u SWQgKnZ4aWRzLCBpbnQgbnZ4aWRzKQoreworCXJldHVybiBIYXZlVmlydHVhbFhJRHNEZWxheWlu Z0Noa3B0R3V0cyh2eGlkcywgbnZ4aWRzLAorCQkJCQkJCQkJCQlERUxBWV9DSEtQVF9DT01QTEVU RSk7Cit9CisKIC8qCiAgKiBCYWNrZW5kUGlkR2V0UHJvYyAtLSBnZXQgYSBiYWNrZW5kJ3MgUEdQ Uk9DIGdpdmVuIGl0cyBQSUQKICAqCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3By b2MuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oCmluZGV4IGI3ODAxMmVjMmI2Li4xMWI1 MTRjOWFlOCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jLmgKKysrIGIvc3Jj L2luY2x1ZGUvc3RvcmFnZS9wcm9jLmgKQEAgLTg3LDM2ICs4Nyw4IEBAIHN0cnVjdCBYaWRDYWNo ZQogI2RlZmluZSBJTlZBTElEX1BHUFJPQ05PCQlQR19JTlQzMl9NQVgKIAogLyoKLSAqIEZsYWdz IGZvciBQR1BST0MuZGVsYXlDaGtwdAotICoKLSAqIFRoZXNlIGZsYWdzIGNhbiBiZSB1c2VkIHRv IGRlbGF5IHRoZSBzdGFydCBvciBjb21wbGV0aW9uIG9mIGEgY2hlY2twb2ludAotICogZm9yIHNo b3J0IHBlcmlvZHMuIEEgZmxhZyBpcyBpbiBlZmZlY3QgaWYgdGhlIGNvcnJlc3BvbmRpbmcgYml0 IGlzIHNldCBpbgotICogdGhlIFBHUFJPQyBvZiBhbnkgYmFja2VuZC4KLSAqCi0gKiBGb3Igb3Vy IHB1cnBvc2VzIGhlcmUsIGEgY2hlY2twb2ludCBoYXMgdGhyZWUgcGhhc2VzOiAoMSkgZGV0ZXJt aW5lIHRoZQotICogbG9jYXRpb24gdG8gd2hpY2ggdGhlIHJlZG8gcG9pbnRlciB3aWxsIGJlIG1v dmVkLCAoMikgd3JpdGUgYWxsIHRoZQotICogZGF0YSBkdXJhYmx5IHRvIGRpc2ssIGFuZCAoMykg V0FMLWxvZyB0aGUgY2hlY2twb2ludC4KLSAqCi0gKiBTZXR0aW5nIERFTEFZX0NIS1BUX1NUQVJU IHByZXZlbnRzIHRoZSBzeXN0ZW0gZnJvbSBtb3ZpbmcgZnJvbSBwaGFzZSAxCi0gKiB0byBwaGFz ZSAyLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHdlIGFyZSBwZXJmb3JtaW5nIGEgV0FMLWxvZ2dlZCBt b2RpZmljYXRpb24KLSAqIG9mIGRhdGEgdGhhdCB3aWxsIGJlIGZsdXNoZWQgdG8gZGlzayBpbiBw aGFzZSAyLiBCeSBzZXR0aW5nIHRoaXMgZmxhZwotICogYmVmb3JlIHdyaXRpbmcgV0FMIGFuZCBj bGVhcmluZyBpdCBhZnRlciB3ZSd2ZSBib3RoIHdyaXR0ZW4gV0FMIGFuZAotICogcGVyZm9ybWVk IHRoZSBjb3JyZXNwb25kaW5nIG1vZGlmaWNhdGlvbiwgd2UgZW5zdXJlIHRoYXQgaWYgdGhlIFdB TCByZWNvcmQKLSAqIGlzIGluc2VydGVkIHByaW9yIHRvIHRoZSBuZXcgcmVkbyBwb2ludCwgdGhl IGNvcnJlc3BvbmRpbmcgZGF0YSBjaGFuZ2VzIHdpbGwKLSAqIGFsc28gYmUgZmx1c2hlZCB0byBk aXNrIGJlZm9yZSB0aGUgY2hlY2twb2ludCBjYW4gY29tcGxldGUuIChJbiB0aGUKLSAqIGV4dHJl bWVseSBjb21tb24gY2FzZSB3aGVyZSB0aGUgZGF0YSBiZWluZyBtb2RpZmllZCBpcyBpbiBzaGFy ZWQgYnVmZmVycwotICogYW5kIHdlIGFjcXVpcmUgYW4gZXhjbHVzaXZlIGNvbnRlbnQgbG9jayBv biB0aGUgcmVsZXZhbnQgYnVmZmVycyBiZWZvcmUKLSAqIHdyaXRpbmcgV0FMLCB0aGlzIG1lY2hh bmlzbSBpcyBub3QgbmVlZGVkLCBiZWNhdXNlIHBoYXNlIDIgd2lsbCBibG9jawotICogdW50aWwg d2UgcmVsZWFzZSB0aGUgY29udGVudCBsb2NrIGFuZCB0aGVuIGZsdXNoIHRoZSBtb2RpZmllZCBk YXRhIHRvCi0gKiBkaXNrLikKLSAqCi0gKiBTZXR0aW5nIERFTEFZX0NIS1BUX0NPTVBMRVRFIHBy ZXZlbnRzIHRoZSBzeXN0ZW0gZnJvbSBtb3ZpbmcgZnJvbSBwaGFzZSAyCi0gKiB0byBwaGFzZSAz LiBUaGlzIGlzIHVzZWZ1bCBpZiB3ZSBhcmUgcGVyZm9ybWluZyBhIFdBTC1sb2dnZWQgb3BlcmF0 aW9uIHRoYXQKLSAqIG1pZ2h0IGludmFsaWRhdGUgYnVmZmVycywgc3VjaCBhcyByZWxhdGlvbiB0 cnVuY2F0aW9uLiBJbiB0aGlzIGNhc2UsIHdlIG5lZWQKLSAqIHRvIGVuc3VyZSB0aGF0IGFueSBi dWZmZXJzIHdoaWNoIHdlcmUgaW52YWxpZGF0ZWQgYW5kIHRodXMgbm90IGZsdXNoZWQgYnkKLSAq IHRoZSBjaGVja3BvaW50IGFyZSBhY3RhdWxseSBkZXN0cm95ZWQgb24gZGlzay4gUmVwbGF5IGNh biBjb3BlIHdpdGggYSBmaWxlCi0gKiBvciBibG9jayB0aGF0IGRvZXNuJ3QgZXhpc3QsIGJ1dCBu b3Qgd2l0aCBhIGJsb2NrIHRoYXQgaGFzIHRoZSB3cm9uZwotICogY29udGVudHMuCisgKiBGbGFn cyB1c2VkIG9ubHkgZm9yIHR5cGUgb2YgaW50ZXJuYWwgZnVuY3Rpb25zCisgKiBHZXRWaXJ0dWFs WElEc0RlbGF5aW5nQ2hrcHRHdXRzIGFuZCBIYXZlVmlydHVhbFhJRHNEZWxheWluZ0Noa3B0R3V0 cy4KICAqLwogI2RlZmluZSBERUxBWV9DSEtQVF9TVEFSVAkJKDE8PDApCiAjZGVmaW5lIERFTEFZ X0NIS1BUX0NPTVBMRVRFCSgxPDwxKQpAQCAtMjI2LDExICsxOTgsMTIgQEAgc3RydWN0IFBHUFJP QwogCXBnX2F0b21pY191aW50NjQgd2FpdFN0YXJ0OyAvKiB0aW1lIGF0IHdoaWNoIHdhaXQgZm9y IGxvY2sgYWNxdWlzaXRpb24KIAkJCQkJCQkJICogc3RhcnRlZCAqLwogCi0JaW50CQkJZGVsYXlD aGtwdDsJCS8qIGZvciBERUxBWV9DSEtQVF8qIGZsYWdzICovCisJYm9vbAkJZGVsYXlDaGtwdDsJ CS8qIHRydWUgaWYgdGhpcyBwcm9jIGRlbGF5cyBjaGVja3BvaW50IHN0YXJ0ICovCiAKIAl1aW50 OAkJc3RhdHVzRmxhZ3M7CS8qIHRoaXMgYmFja2VuZCdzIHN0YXR1cyBmbGFncywgc2VlIFBST0Nf KgogCQkJCQkJCQkgKiBhYm92ZS4gbWlycm9yZWQgaW4KIAkJCQkJCQkJICogUHJvY0dsb2JhbC0+ c3RhdHVzRmxhZ3NbcGd4YWN0b2ZmXSAqLworCWJvb2wJCWRlbGF5Q2hrcHRFbmQ7CS8qIHRydWUg aWYgdGhpcyBwcm9jIGRlbGF5cyBjaGVja3BvaW50IGVuZCAqLwogCiAJLyoKIAkgKiBJbmZvIHRv IGFsbG93IHVzIHRvIHdhaXQgZm9yIHN5bmNocm9ub3VzIHJlcGxpY2F0aW9uLCBpZiBuZWVkZWQu CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NhcnJheS5oIGIvc3JjL2luY2x1 ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaAppbmRleCA5M2RlMjMwYTMyOS4uZjVkN2Q0MTA5ODYgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY2FycmF5LmgKKysrIGIvc3JjL2luY2x1 ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaApAQCAtNTksOSArNTksMTIgQEAgZXh0ZXJuIFRyYW5zYWN0 aW9uSWQgR2V0T2xkZXN0QWN0aXZlVHJhbnNhY3Rpb25JZCh2b2lkKTsKIGV4dGVybiBUcmFuc2Fj dGlvbklkIEdldE9sZGVzdFNhZmVEZWNvZGluZ1RyYW5zYWN0aW9uSWQoYm9vbCBjYXRhbG9nT25s eSk7CiBleHRlcm4gdm9pZCBHZXRSZXBsaWNhdGlvbkhvcml6b25zKFRyYW5zYWN0aW9uSWQgKnNs b3RfeG1pbiwgVHJhbnNhY3Rpb25JZCAqY2F0YWxvZ194bWluKTsKIAotZXh0ZXJuIFZpcnR1YWxU cmFuc2FjdGlvbklkICpHZXRWaXJ0dWFsWElEc0RlbGF5aW5nQ2hrcHQoaW50ICpudnhpZHMsIGlu dCB0eXBlKTsKK2V4dGVybiBWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqR2V0VmlydHVhbFhJRHNEZWxh eWluZ0Noa3B0KGludCAqbnZ4aWRzKTsKK2V4dGVybiBWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqR2V0 VmlydHVhbFhJRHNEZWxheWluZ0Noa3B0RW5kKGludCAqbnZ4aWRzKTsKIGV4dGVybiBib29sIEhh dmVWaXJ0dWFsWElEc0RlbGF5aW5nQ2hrcHQoVmlydHVhbFRyYW5zYWN0aW9uSWQgKnZ4aWRzLAot CQkJCQkJCQkJCSBpbnQgbnZ4aWRzLCBpbnQgdHlwZSk7CisJCQkJCQkJCQkJIGludCBudnhpZHMp OworZXh0ZXJuIGJvb2wgSGF2ZVZpcnR1YWxYSURzRGVsYXlpbmdDaGtwdEVuZChWaXJ0dWFsVHJh bnNhY3Rpb25JZCAqdnhpZHMsCisJCQkJCQkJCQkJCWludCBudnhpZHMpOwogCiBleHRlcm4gUEdQ Uk9DICpCYWNrZW5kUGlkR2V0UHJvYyhpbnQgcGlkKTsKIGV4dGVybiBQR1BST0MgKkJhY2tlbmRQ aWRHZXRQcm9jV2l0aExvY2soaW50IHBpZCk7Cg== --=-nchv41Moyhs1YMjotwsr--