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 1oB45n-0004SB-R3 for pgsql-hackers@arkaria.postgresql.org; Tue, 12 Jul 2022 00:49: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 1oB45m-0000v8-4W for pgsql-hackers@arkaria.postgresql.org; Tue, 12 Jul 2022 00:49:34 +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 1oB45l-0000uz-OZ for pgsql-hackers@lists.postgresql.org; Tue, 12 Jul 2022 00:49:33 +0000 Received: from mail-pl1-x62f.google.com ([2607:f8b0:4864:20::62f]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1oB45i-0003QH-VN for pgsql-hackers@lists.postgresql.org; Tue, 12 Jul 2022 00:49:33 +0000 Received: by mail-pl1-x62f.google.com with SMTP id q5so5865928plr.11 for ; Mon, 11 Jul 2022 17:49:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=D13AVTiXDOmNK49BwjVVYBOZDxEQSrRsVu183NnhEkE=; b=A01X9Dv8+XWLNvB+9tcU69Ea22XPD3U+JiaAyKJYxOXGFu1YrdSEJF2RokPDx6ldlx +ZTQmDpqBnsatraw5gN9oqy9bus35v4L7QcWL2DHz6dF/fRVTsOqG1unB2aAOmG2lGra GhKrgDBkqfLQGNstrLGGkEPHj9v7nwu3kFkbUsMfHb3kaod0IXydejQmtrX6yHJm7kUk vU3C80PBB6GdMDm7q1EShAKsIXlwi/ycPpUgAmPBfyPx/uRaPmwngCcthZVueKMQXrF2 4Cb5Wu3QZtw9YuocaPN6m7lgaBlJ6WcPYq86KfKQCThQ/fSRC6XPM3QmnWyZQu8zIoHO W5dg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=D13AVTiXDOmNK49BwjVVYBOZDxEQSrRsVu183NnhEkE=; b=HwI/ejv46hrbH0RZg3KkVRtcWlFyoLmVJ3BLfi57YJKi1Z6PaxmuX/o1WFZ5t1iK1G OYqyK/ulLyo4qFl9m+zyr8D5jlBbGp34qyAZe1LML81YoLTgFGKRc/E/vwXimH0/0BNG WKYlyOUC8RvZvIboVoW22bz7nyw8jK8j+x5CRUt/lKvd9mVKCziZ9Hf8PGxe92AdnelB kY2GLblQ5XgV7A+mcIWddC1ykD0zyFW3P+HfmwZUKJUxxAiJc1Vvp7L6xeIyG8RaKlwo BNJw0KTESMVzs2A+UN18YdyJGc126C5CX5XBah9RqFqIZsamf+CgIngC+MABtq/GTwRj ig8w== X-Gm-Message-State: AJIora8/jh+jEDpxiudUsUEonZ5OMW4RvTcJrdGJJyZEVIpEyfpv7Nnd U1wWTWfjVj3jMu4K8kZKd/NZg3AEtv7TcM6a/Cg= X-Google-Smtp-Source: AGRyM1tkXJ3jdwuQSUYR0RHYHTUZR6WxisCukPluusjQfraThkXdTMbJSQuhgvR00msy4C/8TXlXJsuQxvT43q/HNHM= X-Received: by 2002:a17:902:a9c9:b0:161:5b73:5ac9 with SMTP id b9-20020a170902a9c900b001615b735ac9mr21204942plr.14.1657586968949; Mon, 11 Jul 2022 17:49:28 -0700 (PDT) MIME-Version: 1.0 References: <20211008.165055.1621145185927268721.horikyota.ntt@gmail.com> <20220523.133323.444599955292141474.horikyota.ntt@gmail.com> In-Reply-To: From: Masahiko Sawada Date: Tue, 12 Jul 2022 09:48:52 +0900 Message-ID: Subject: Re: [BUG] Logical replication failure "ERROR: could not map filenode "base/13237/442428" to relation OID" with catalog modifying txns To: Amit Kapila Cc: Kyotaro Horiguchi , "Drouvot, Bertrand" , PostgreSQL Hackers , "Oh, Mike" Content-Type: multipart/mixed; boundary="000000000000782a6b05e3910a8c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000782a6b05e3910a8c Content-Type: text/plain; charset="UTF-8" On Fri, Jul 8, 2022 at 8:20 PM Masahiko Sawada wrote: > > On Fri, Jul 8, 2022 at 5:59 PM Amit Kapila wrote: > > > > On Fri, Jul 8, 2022 at 12:46 PM Masahiko Sawada wrote: > > > > > > On Fri, Jul 8, 2022 at 3:27 PM Amit Kapila wrote: > > > > > > > > > > > 1. > > > > In ReorderBufferGetCatalogChangesXacts(), isn't it better to use the > > > > list length of 'catchange_txns' to allocate xids array? If we can do > > > > so, then we will save the need to repalloc as well. > > > > > > Since ReorderBufferGetcatalogChangesXacts() collects all ongoing > > > catalog modifying transactions, the length of the array could be > > > bigger than the one taken last time. We can start with the previous > > > length but I think we cannot remove the need for repalloc. > > > > > > > It is using the list "catchange_txns" to form xid array which > > shouldn't change for the duration of > > ReorderBufferGetCatalogChangesXacts(). Then the caller frees the xid > > array after its use. Next time in > > ReorderBufferGetCatalogChangesXacts(), the fresh allocation for xid > > array happens, so not sure why repalloc would be required? > > Oops, I mistook catchange_txns for catchange->xcnt. You're right. > Starting with the length of catchange_txns should be sufficient. > I've attached an updated patch. While trying this idea, I noticed there is no API to get the length of dlist, as we discussed offlist. Alternative idea was to use List (T_XidList) but I'm not sure it's a great idea since deleting an xid from the list is O(N), we need to implement list_delete_xid, and we need to make sure allocating list node in the reorder buffer context. So in the patch, I added a variable, catchange_ntxns, to keep track of the length of the dlist. Please review it. Regards, -- Masahiko Sawada EDB: https://www.enterprisedb.com/ --000000000000782a6b05e3910a8c Content-Type: application/octet-stream; name="master-v3-0001-Add-catalog-modifying-transactions-to-logical-dec.patch" Content-Disposition: attachment; filename="master-v3-0001-Add-catalog-modifying-transactions-to-logical-dec.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l5hg7rgq0 RnJvbSAwNTJhYmIwZDc5OTE0MjgyNzEyZDgyNmE4MjJjNTQ1ZDNkZjUzMzBjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXNhaGlrbyBTYXdhZGEgPHNhd2FkYS5tc2hrQGdtYWlsLmNv bT4KRGF0ZTogV2VkLCA2IEp1bCAyMDIyIDEyOjUzOjM2ICswOTAwClN1YmplY3Q6IFtQQVRDSCB2 M10gQWRkIGNhdGFsb2cgbW9kaWZ5aW5nIHRyYW5zYWN0aW9ucyB0byBsb2dpY2FsIGRlY29kaW5n CiBzZXJpYWxpemVkIHNuYXBzaG90LgoKUHJldmlvdXNseSwgd2UgcmVsaWVkIG9uIEhFQVAyX05F V19DSUQgcmVjb3JkcyBhbmQgWEFDVF9JTlZBTElEQVRJT04KcmVjb3JkcyB0byBrbm93IGlmIHRo ZSB0cmFuc2FjdGlvbiBoYXMgbW9kaWZpZWQgdGhlIGNhdGFsb2csIGFuZCB0aGF0CmluZm9ybWF0 aW9uIGlzIG5vdCBzZXJpYWxpemVkIHRvIHNuYXBzaG90LiBUaGVyZWZvcmUsIGlmIHRoZSBsb2dp Y2FsCmRlY29kaW5nIGRlY29kZXMgb25seSB0aGUgY29tbWl0IHJlY29yZCBvZiB0aGUgdHJhbnNh Y3Rpb24gdGhhdAphY3R1YWxseSBoYXMgbW9kaWZpZWQgYSBjYXRhbG9nLCB3ZSBtaXNzZWQgYWRk aW5nIGl0cyBYSUQgdG8gdGhlCnNuYXBzaG90LiBXZSBlbmRlZCB1cCBsb29raW5nIGF0IGNhdGFs b2dzIHdpdGggdGhlIHdyb25nIHNuYXBzaG90LgoKVG8gZml4IHRoaXMgcHJvYmxlbSwgdGhpcyBj aGFuZ2UgYWRkcyB0aGUgbGlzdCBvZiB0cmFuc2FjdGlvbiBJRHMgYW5kCnN1Yi10cmFuc2FjdGlv biBJRHMsIHRoYXQgaGF2ZSBtb2RpZmllZCBjYXRhbG9ncyBhbmQgYXJlIHJ1bm5pbmcgd2hlbgpz bmFwc2hvdCBzZXJpYWxpemF0aW9uLCB0byB0aGUgc2VyaWFsaXplZCBzbmFwc2hvdC4gV2hlbiBk ZWNvZGluZyBhCkNPTU1JVCByZWNvcmQsIHdlIGNoZWNrIGJvdGggdGhlIGxpc3QgYW5kIHRoZSBS ZW9yZGVyQnVmZmVyIHRvIHNlZSBpZgppZiB0aGUgdHJhbnNhY3Rpb24gaGFzIG1vZGlmaWVkIGNh dGFsb2dzLgoKU2luY2UgdGhpcyBhZGRzIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdG8gdGhlIHNl cmlhbGl6ZWQgc25hcHNob3QsIHdlCmNhbm5vdCBiYWNrcGF0Y2ggaXQuIEZvciBiYWNrIGJyYW5j aGVzLCB3ZSB0YWtlIGFub3RoZXIgYXBwcm9hY2g7CnJlbWVtYmVyIHRoZSBsYXN0LXJ1bm5pbmct eGFjdHMgbGlzdCBvZiB0aGUgZmlyc3QgZGVjb2RlZApSVU5OSU5HX1hBQ1RTIHJlY29yZCBhbmQg Y2hlY2sgaWYgdGhlIHRyYW5zYWN0aW9uIHdob3NlIGNvbW1pdCByZWNvcmQKaGFzIFhBQ1RfWElO Rk9fSEFTX0lOVkFMUyBhbmQgd2hvc2UgWElEIGlzIGluIHRoZSBsaXN0LiBUaGlzIGRvZXNuJ3QK cmVxdWlyZSBhbnkgZmlsZSBmb3JtYXQgY2hhbmdlcyBidXQgdGhlIHRyYW5zYWN0aW9uIHdpbGwg ZW5kIHVwIGJlaW5nCmFkZGVkIHRvIHRoZSBzbmFwc2hvdCBldmVuIGlmIGl0IGhhcyBvbmx5IHJl bGNhY2hlIGludmFsaWRhdGlvbnMuCgpUaGlzIGNvbW1pdCBidW1wcyBTTkFQQlVJTERfVkVSU0lP TiBiZWNhdXNlIG9mIGNoYW5nZSBpbiBTbmFwQnVpbGQuCi0tLQogY29udHJpYi90ZXN0X2RlY29k aW5nL01ha2VmaWxlICAgICAgICAgICAgICAgIHwgICAyICstCiAuLi4vZXhwZWN0ZWQvY2F0YWxv Z19jaGFuZ2Vfc25hcHNob3Qub3V0ICAgICAgfCAgNDQgKysrKwogLi4uL3NwZWNzL2NhdGFsb2df Y2hhbmdlX3NuYXBzaG90LnNwZWMgICAgICAgIHwgIDM5ICsrKwogLi4uL3JlcGxpY2F0aW9uL2xv Z2ljYWwvcmVvcmRlcmJ1ZmZlci5jICAgICAgIHwgIDcyICsrKysrLQogc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9zbmFwYnVpbGQuYyAgIHwgMjM1ICsrKysrKysrKysrKy0tLS0tLQog c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oICAgICAgIHwgIDEyICsKIDYg ZmlsZXMgY2hhbmdlZCwgMzIwIGluc2VydGlvbnMoKyksIDg0IGRlbGV0aW9ucygtKQogY3JlYXRl IG1vZGUgMTAwNjQ0IGNvbnRyaWIvdGVzdF9kZWNvZGluZy9leHBlY3RlZC9jYXRhbG9nX2NoYW5n ZV9zbmFwc2hvdC5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3Rlc3RfZGVjb2Rpbmcv c3BlY3MvY2F0YWxvZ19jaGFuZ2Vfc25hcHNob3Quc3BlYwoKZGlmZiAtLWdpdCBhL2NvbnRyaWIv dGVzdF9kZWNvZGluZy9NYWtlZmlsZSBiL2NvbnRyaWIvdGVzdF9kZWNvZGluZy9NYWtlZmlsZQpp bmRleCBiMjIwOTA2NDc5Li5jN2NlNjAzNzA2IDEwMDY0NAotLS0gYS9jb250cmliL3Rlc3RfZGVj b2RpbmcvTWFrZWZpbGUKKysrIGIvY29udHJpYi90ZXN0X2RlY29kaW5nL01ha2VmaWxlCkBAIC04 LDcgKzgsNyBAQCBSRUdSRVNTID0gZGRsIHhhY3QgcmV3cml0ZSB0b2FzdCBwZXJtaXNzaW9ucyBk ZWNvZGluZ19pbl94YWN0IFwKIAlzcGlsbCBzbG90IHRydW5jYXRlIHN0cmVhbSBzdGF0cyB0d29w aGFzZSB0d29waGFzZV9zdHJlYW0KIElTT0xBVElPTiA9IG14YWN0IGRlbGF5ZWRfc3RhcnR1cCBv bmRpc2tfc3RhcnR1cCBjb25jdXJyZW50X2RkbF9kbWwgXAogCW9sZGVzdF94bWluIHNuYXBzaG90 X3RyYW5zZmVyIHN1YnhhY3Rfd2l0aG91dF90b3AgY29uY3VycmVudF9zdHJlYW0gXAotCXR3b3Bo YXNlX3NuYXBzaG90IHNsb3RfY3JlYXRpb25fZXJyb3IKKwl0d29waGFzZV9zbmFwc2hvdCBzbG90 X2NyZWF0aW9uX2Vycm9yIGNhdGFsb2dfY2hhbmdlX3NuYXBzaG90CiAKIFJFR1JFU1NfT1BUUyA9 IC0tdGVtcC1jb25maWcgJCh0b3Bfc3JjZGlyKS9jb250cmliL3Rlc3RfZGVjb2RpbmcvbG9naWNh bC5jb25mCiBJU09MQVRJT05fT1BUUyA9IC0tdGVtcC1jb25maWcgJCh0b3Bfc3JjZGlyKS9jb250 cmliL3Rlc3RfZGVjb2RpbmcvbG9naWNhbC5jb25mCmRpZmYgLS1naXQgYS9jb250cmliL3Rlc3Rf ZGVjb2RpbmcvZXhwZWN0ZWQvY2F0YWxvZ19jaGFuZ2Vfc25hcHNob3Qub3V0IGIvY29udHJpYi90 ZXN0X2RlY29kaW5nL2V4cGVjdGVkL2NhdGFsb2dfY2hhbmdlX3NuYXBzaG90Lm91dApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5kYzRmOWI3MDE4Ci0tLSAvZGV2L251bGwK KysrIGIvY29udHJpYi90ZXN0X2RlY29kaW5nL2V4cGVjdGVkL2NhdGFsb2dfY2hhbmdlX3NuYXBz aG90Lm91dApAQCAtMCwwICsxLDQ0IEBACitQYXJzZWQgdGVzdCBzcGVjIHdpdGggMiBzZXNzaW9u cworCitzdGFydGluZyBwZXJtdXRhdGlvbjogczBfaW5pdCBzMF9iZWdpbiBzMF9zYXZlcG9pbnQg czBfdHJ1bmNhdGUgczFfY2hlY2twb2ludCBzMV9nZXRfY2hhbmdlcyBzMF9jb21taXQgczBfYmVn aW4gczBfaW5zZXJ0IHMxX2NoZWNrcG9pbnQgczFfZ2V0X2NoYW5nZXMgczBfY29tbWl0IHMxX2dl dF9jaGFuZ2VzCitzdGVwIHMwX2luaXQ6IFNFTEVDVCAnaW5pdCcgRlJPTSBwZ19jcmVhdGVfbG9n aWNhbF9yZXBsaWNhdGlvbl9zbG90KCdpc29sYXRpb25fc2xvdCcsICd0ZXN0X2RlY29kaW5nJyk7 Cis/Y29sdW1uPworLS0tLS0tLS0KK2luaXQgICAgCisoMSByb3cpCisKK3N0ZXAgczBfYmVnaW46 IEJFR0lOOworc3RlcCBzMF9zYXZlcG9pbnQ6IFNBVkVQT0lOVCBzcDE7CitzdGVwIHMwX3RydW5j YXRlOiBUUlVOQ0FURSB0YmwxOworc3RlcCBzMV9jaGVja3BvaW50OiBDSEVDS1BPSU5UOworc3Rl cCBzMV9nZXRfY2hhbmdlczogU0VMRUNUIGRhdGEgRlJPTSBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2No YW5nZXMoJ2lzb2xhdGlvbl9zbG90JywgTlVMTCwgTlVMTCwgJ3NraXAtZW1wdHkteGFjdHMnLCAn MScsICdpbmNsdWRlLXhpZHMnLCAnMCcpOworZGF0YQorLS0tLQorKDAgcm93cykKKworc3RlcCBz MF9jb21taXQ6IENPTU1JVDsKK3N0ZXAgczBfYmVnaW46IEJFR0lOOworc3RlcCBzMF9pbnNlcnQ6 IElOU0VSVCBJTlRPIHRibDEgVkFMVUVTICgxKTsKK3N0ZXAgczFfY2hlY2twb2ludDogQ0hFQ0tQ T0lOVDsKK3N0ZXAgczFfZ2V0X2NoYW5nZXM6IFNFTEVDVCBkYXRhIEZST00gcGdfbG9naWNhbF9z bG90X2dldF9jaGFuZ2VzKCdpc29sYXRpb25fc2xvdCcsIE5VTEwsIE5VTEwsICdza2lwLWVtcHR5 LXhhY3RzJywgJzEnLCAnaW5jbHVkZS14aWRzJywgJzAnKTsKK2RhdGEgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCitCRUdJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK3RhYmxlIHB1Ymxp Yy50YmwxOiBUUlVOQ0FURTogKG5vLWZsYWdzKQorQ09NTUlUICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCisoMyByb3dzKQorCitzdGVwIHMwX2NvbW1pdDogQ09NTUlUOworc3RlcCBz MV9nZXRfY2hhbmdlczogU0VMRUNUIGRhdGEgRlJPTSBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2NoYW5n ZXMoJ2lzb2xhdGlvbl9zbG90JywgTlVMTCwgTlVMTCwgJ3NraXAtZW1wdHkteGFjdHMnLCAnMScs ICdpbmNsdWRlLXhpZHMnLCAnMCcpOworZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQkVHSU4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAordGFibGUgcHVibGljLnRi bDE6IElOU0VSVDogdmFsMVtpbnRlZ2VyXToxIHZhbDJbaW50ZWdlcl06bnVsbAorQ09NTUlUICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorKDMg cm93cykKKworP2NvbHVtbj8KKy0tLS0tLS0tCitzdG9wICAgIAorKDEgcm93KQorCmRpZmYgLS1n aXQgYS9jb250cmliL3Rlc3RfZGVjb2Rpbmcvc3BlY3MvY2F0YWxvZ19jaGFuZ2Vfc25hcHNob3Qu c3BlYyBiL2NvbnRyaWIvdGVzdF9kZWNvZGluZy9zcGVjcy9jYXRhbG9nX2NoYW5nZV9zbmFwc2hv dC5zcGVjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmJmZmQ4NTZiYmIK LS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3Rlc3RfZGVjb2Rpbmcvc3BlY3MvY2F0YWxvZ19j aGFuZ2Vfc25hcHNob3Quc3BlYwpAQCAtMCwwICsxLDM5IEBACisjIFRlc3QgdGhhdCBkZWNvZGlu ZyBvbmx5IHRoZSBjb21taXQgcmVjb3JkIG9mIHRoZSB0cmFuc2FjdGlvbiB0aGF0IGhhdmUKKyMg Y2F0YWxvZy1jaGFuZ2VkLgorc2V0dXAKK3sKKyAgICBEUk9QIFRBQkxFIElGIEVYSVNUUyB0Ymwx OworICAgIENSRUFURSBUQUJMRSB0YmwxICh2YWwxIGludGVnZXIsIHZhbDIgaW50ZWdlcik7Cit9 CisKK3RlYXJkb3duCit7CisgICAgRFJPUCBUQUJMRSB0YmwxOworICAgIFNFTEVDVCAnc3RvcCcg RlJPTSBwZ19kcm9wX3JlcGxpY2F0aW9uX3Nsb3QoJ2lzb2xhdGlvbl9zbG90Jyk7Cit9CisKK3Nl c3Npb24gInMwIgorc2V0dXAgeyBTRVQgc3luY2hyb25vdXNfY29tbWl0PW9uOyB9CitzdGVwICJz MF9pbml0IiB7IFNFTEVDVCAnaW5pdCcgRlJPTSBwZ19jcmVhdGVfbG9naWNhbF9yZXBsaWNhdGlv bl9zbG90KCdpc29sYXRpb25fc2xvdCcsICd0ZXN0X2RlY29kaW5nJyk7IH0KK3N0ZXAgInMwX2Jl Z2luIiB7IEJFR0lOOyB9CitzdGVwICJzMF9zYXZlcG9pbnQiIHsgU0FWRVBPSU5UIHNwMTsgfQor c3RlcCAiczBfdHJ1bmNhdGUiIHsgVFJVTkNBVEUgdGJsMTsgfQorc3RlcCAiczBfaW5zZXJ0IiB7 IElOU0VSVCBJTlRPIHRibDEgVkFMVUVTICgxKTsgfQorc3RlcCAiczBfY29tbWl0IiB7IENPTU1J VDsgfQorCitzZXNzaW9uICJzMSIKK3NldHVwIHsgU0VUIHN5bmNocm9ub3VzX2NvbW1pdD1vbjsg fQorc3RlcCAiczFfY2hlY2twb2ludCIgeyBDSEVDS1BPSU5UOyB9CitzdGVwICJzMV9nZXRfY2hh bmdlcyIgeyBTRUxFQ1QgZGF0YSBGUk9NIHBnX2xvZ2ljYWxfc2xvdF9nZXRfY2hhbmdlcygnaXNv bGF0aW9uX3Nsb3QnLCBOVUxMLCBOVUxMLCAnc2tpcC1lbXB0eS14YWN0cycsICcxJywgJ2luY2x1 ZGUteGlkcycsICcwJyk7IH0KKworIyBGb3IgdGhlIHRyYW5zYWN0aW9uIHRoYXQgVFJVTkNBVEVk IHRoZSB0YWJsZSB0YmwxLCB0aGUgbGFzdCBkZWNvZGluZyBkZWNvZGVzCisjIG9ubHkgaXRzIENP TU1JVCByZWNvcmQsIGJlY2F1c2UgaXQgc3RhcnRzIGZyb20gdGhlIFJVTk5JTkdfWEFDVCByZWNv cmQgZW1pdHRlZAorIyBkdXJpbmcgdGhlIGZpcnN0IGNoZWNrcG9pbnQgZXhlY3V0aW9uLiAgVGhp cyB0cmFuc2FjdGlvbiBtdXN0IGJlIG1hcmtlZCBhcworIyBjb250YWluaW5nIGNhdGFsb2cgY2hh bmdlcyB3aGlsZSBkZWNvZGluZyB0aGUgQ09NTUlUIHJlY29yZCBhbmQgdGhlIGRlY29kaW5nCisj IG9mIHRoZSBJTlNFUlQgcmVjb3JkIG11c3QgcmVhZCB0aGUgcGdfY2xhc3Mgd2l0aCB0aGUgY29y cmVjdCBoaXN0b3JpYyBzbmFwc2hvdC4KKyMKKyMgTm90ZSB0aGF0IGluIGEgY2FzZSB3aGVyZSBi Z3dyaXRlciB3cm90ZSB0aGUgWEFDVF9SVU5OSU5HIHJlY29yZCBiZXR3ZWVuICJzMF9jb21taXQi CisjIGFuZCAiczBfYmVnaW4iLCB0aGlzIGRvZXNuJ3QgaGFwcGVuIGFzIHRoZSBkZWNvZGluZyBz dGFydHMgZnJvbSB0aGUgUlVOTklOR19YQUNUCisjIHJlY29yZCB3cml0dGVuIGJ5IGJnd3JpdGVy LiAgT25lIG1pZ2h0IHRoaW5rIHdlIGNhbiBlaXRoZXIgc3RvcCB0aGUgYmd3cml0ZXIgb3IKKyMg aW5jcmVhc2UgTE9HX1NOQVBTSE9UX0lOVEVSVkFMX01TIGJ1dCBpdCdzIG5vdCBwcmFjdGljYWwg dmlhIHRlc3RzLgorcGVybXV0YXRpb24gInMwX2luaXQiICJzMF9iZWdpbiIgInMwX3NhdmVwb2lu dCIgInMwX3RydW5jYXRlIiAiczFfY2hlY2twb2ludCIgInMxX2dldF9jaGFuZ2VzIiAiczBfY29t bWl0IiAiczBfYmVnaW4iICJzMF9pbnNlcnQiICJzMV9jaGVja3BvaW50IiAiczFfZ2V0X2NoYW5n ZXMiICJzMF9jb21taXQiICJzMV9nZXRfY2hhbmdlcyIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMKaW5kZXggODhhMzdmZGU3Mi4uYjcxMTAzYzYw ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVm ZmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVy LmMKQEAgLTM0OSw2ICszNDksOCBAQCBSZW9yZGVyQnVmZmVyQWxsb2NhdGUodm9pZCkKIAlidWZm ZXItPmJ5X3R4bl9sYXN0X3hpZCA9IEludmFsaWRUcmFuc2FjdGlvbklkOwogCWJ1ZmZlci0+Ynlf dHhuX2xhc3RfdHhuID0gTlVMTDsKIAorCWJ1ZmZlci0+Y2F0Y2hhbmdlX250eG5zID0gMDsKKwog CWJ1ZmZlci0+b3V0YnVmID0gTlVMTDsKIAlidWZmZXItPm91dGJ1ZnNpemUgPSAwOwogCWJ1ZmZl ci0+c2l6ZSA9IDA7CkBAIC0zNjYsNiArMzY4LDcgQEAgUmVvcmRlckJ1ZmZlckFsbG9jYXRlKHZv aWQpCiAKIAlkbGlzdF9pbml0KCZidWZmZXItPnRvcGxldmVsX2J5X2xzbik7CiAJZGxpc3RfaW5p dCgmYnVmZmVyLT50eG5zX2J5X2Jhc2Vfc25hcHNob3RfbHNuKTsKKwlkbGlzdF9pbml0KCZidWZm ZXItPmNhdGNoYW5nZV90eG5zKTsKIAogCS8qCiAJICogRW5zdXJlIHRoZXJlJ3Mgbm8gc3RhbGUg ZGF0YSBmcm9tIHByaW9yIHVzZXMgb2YgdGhpcyBzbG90LCBpbiBjYXNlIHNvbWUKQEAgLTE1MjYs NyArMTUyOSw3IEBAIFJlb3JkZXJCdWZmZXJDbGVhbnVwVFhOKFJlb3JkZXJCdWZmZXIgKnJiLCBS ZW9yZGVyQnVmZmVyVFhOICp0eG4pCiAJfQogCiAJLyoKLQkgKiBSZW1vdmUgVFhOIGZyb20gaXRz IGNvbnRhaW5pbmcgbGlzdC4KKwkgKiBSZW1vdmUgVFhOIGZyb20gaXRzIGNvbnRhaW5pbmcgbGlz dHMuCiAJICoKIAkgKiBOb3RlOiBpZiB0eG4gaXMga25vd24gYXMgc3VieGFjdCwgd2UgYXJlIGRl bGV0aW5nIHRoZSBUWE4gZnJvbSBpdHMKIAkgKiBwYXJlbnQncyBsaXN0IG9mIGtub3duIHN1Ynhh Y3RzOyB0aGlzIGxlYXZlcyB0aGUgcGFyZW50J3MgbnN1YnhhY3RzCkBAIC0xNTM1LDYgKzE1Mzgs MTQgQEAgUmVvcmRlckJ1ZmZlckNsZWFudXBUWE4oUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJC dWZmZXJUWE4gKnR4bikKIAkgKi8KIAlkbGlzdF9kZWxldGUoJnR4bi0+bm9kZSk7CiAKKwlpZiAo cmJ0eG5faGFzX2NhdGFsb2dfY2hhbmdlcyh0eG4pKQorCXsKKwkJZGxpc3RfZGVsZXRlKCZ0eG4t PmNhdGNoYW5nZV9ub2RlKTsKKwkJcmItPmNhdGNoYW5nZV9udHhucy0tOworCisJCUFzc2VydChy Yi0+Y2F0Y2hhbmdlX250eG5zID49IDApOworCX0KKwogCS8qIG5vdyByZW1vdmUgcmVmZXJlbmNl IGZyb20gYnVmZmVyICovCiAJaGFzaF9zZWFyY2gocmItPmJ5X3R4biwKIAkJCQkodm9pZCAqKSAm dHhuLT54aWQsCkBAIC0zMjc1LDEwICszMjg2LDE2IEBAIFJlb3JkZXJCdWZmZXJYaWRTZXRDYXRh bG9nQ2hhbmdlcyhSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJCQkJCQkJ CSAgWExvZ1JlY1B0ciBsc24pCiB7CiAJUmVvcmRlckJ1ZmZlclRYTiAqdHhuOworCVJlb3JkZXJC dWZmZXJUWE4gKnRvcHR4bjsKIAogCXR4biA9IFJlb3JkZXJCdWZmZXJUWE5CeVhpZChyYiwgeGlk LCB0cnVlLCBOVUxMLCBsc24sIHRydWUpOwogCi0JdHhuLT50eG5fZmxhZ3MgfD0gUkJUWE5fSEFT X0NBVEFMT0dfQ0hBTkdFUzsKKwlpZiAoIXJidHhuX2hhc19jYXRhbG9nX2NoYW5nZXModHhuKSkK Kwl7CisJCXR4bi0+dHhuX2ZsYWdzIHw9IFJCVFhOX0hBU19DQVRBTE9HX0NIQU5HRVM7CisJCWRs aXN0X3B1c2hfdGFpbCgmcmItPmNhdGNoYW5nZV90eG5zLCAmdHhuLT5jYXRjaGFuZ2Vfbm9kZSk7 CisJCXJiLT5jYXRjaGFuZ2VfbnR4bnMrKzsKKwl9CiAKIAkvKgogCSAqIE1hcmsgdG9wLWxldmVs IHRyYW5zYWN0aW9uIGFzIGhhdmluZyBjYXRhbG9nIGNoYW5nZXMgdG9vIGlmIG9uZSBvZiBpdHMK QEAgLTMyODYsOCArMzMwMyw1NSBAQCBSZW9yZGVyQnVmZmVyWGlkU2V0Q2F0YWxvZ0NoYW5nZXMo UmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAogCSAqIGNvbnZlbmllbnRseSBj aGVjayBqdXN0IHRvcC1sZXZlbCB0cmFuc2FjdGlvbiBhbmQgZGVjaWRlIHdoZXRoZXIgdG8KIAkg KiBidWlsZCB0aGUgaGFzaCB0YWJsZSBvciBub3QuCiAJICovCi0JaWYgKHR4bi0+dG9wdHhuICE9 IE5VTEwpCi0JCXR4bi0+dG9wdHhuLT50eG5fZmxhZ3MgfD0gUkJUWE5fSEFTX0NBVEFMT0dfQ0hB TkdFUzsKKwl0b3B0eG4gPSB0eG4tPnRvcHR4bjsKKwlpZiAodG9wdHhuICE9IE5VTEwgJiYgIXJi dHhuX2hhc19jYXRhbG9nX2NoYW5nZXModG9wdHhuKSkKKwl7CisJCXRvcHR4bi0+dHhuX2ZsYWdz IHw9IFJCVFhOX0hBU19DQVRBTE9HX0NIQU5HRVM7CisJCWRsaXN0X3B1c2hfdGFpbCgmcmItPmNh dGNoYW5nZV90eG5zLCAmdG9wdHhuLT5jYXRjaGFuZ2Vfbm9kZSk7CisJCXJiLT5jYXRjaGFuZ2Vf bnR4bnMrKzsKKwl9Cit9CisKKy8qCisgKiBSZXR1cm4gcGFsbG9jJ2VkIGFycmF5IG9mIHRoZSB0 cmFuc2FjdGlvbnMgdGhhdCBoYXZlIGNoYW5nZWQgY2F0YWxvZ3MuCisgKiBUaGUgcmV0dXJuZWQg YXJyYXkgaXMgc29ydGVkIGluIHhpZENvbXBhcmF0b3Igb3JkZXIuCisgKgorICogVGhlIGNhbGxl ciBtdXN0IGZyZWUgdGhlIHJldHVybmVkIGFycmF5IHdoZW4gZG9uZSB3aXRoIGl0LgorICovCitU cmFuc2FjdGlvbklkICoKK1Jlb3JkZXJCdWZmZXJHZXRDYXRhbG9nQ2hhbmdlc1hhY3RzKFJlb3Jk ZXJCdWZmZXIgKnJiLCBzaXplX3QgKnhjbnRfcCkKK3sKKwlkbGlzdF9pdGVyIGl0ZXI7CisJVHJh bnNhY3Rpb25JZCAqeGlkcyA9IE5VTEw7CisJc2l6ZV90CXhjbnQgPSAwOworCisJLyogUXVpY2sg cmV0dXJuIGlmIHRoZSBsaXN0IGlzIGVtcHR5ICovCisJaWYgKGRsaXN0X2lzX2VtcHR5KCZyYi0+ Y2F0Y2hhbmdlX3R4bnMpKQorCXsKKwkJQXNzZXJ0KHJiLT5jYXRjaGFuZ2VfbnR4bnMgPT0gMCk7 CisKKwkJKnhjbnRfcCA9IDA7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIEluaXRpYWxpemUg WElEIGFycmF5ICovCisJeGlkcyA9IChUcmFuc2FjdGlvbklkICopIHBhbGxvYyhzaXplb2YoVHJh bnNhY3Rpb25JZCkgKiByYi0+Y2F0Y2hhbmdlX250eG5zKTsKKwlkbGlzdF9mb3JlYWNoKGl0ZXIs ICZyYi0+Y2F0Y2hhbmdlX3R4bnMpCisJeworCQlSZW9yZGVyQnVmZmVyVFhOICp0eG4gPSBkbGlz dF9jb250YWluZXIoUmVvcmRlckJ1ZmZlclRYTiwKKwkJCQkJCQkJCQkJCWNhdGNoYW5nZV9ub2Rl LAorCQkJCQkJCQkJCQkJaXRlci5jdXIpOworCisJCUFzc2VydChyYnR4bl9oYXNfY2F0YWxvZ19j aGFuZ2VzKHR4bikpOworCisJCXhpZHNbeGNudCsrXSA9IHR4bi0+eGlkOworCX0KKworCWlmICh4 Y250ID4gMCkKKwkJcXNvcnQoeGlkcywgeGNudCwgc2l6ZW9mKFRyYW5zYWN0aW9uSWQpLCB4aWRD b21wYXJhdG9yKTsKKworCSp4Y250X3AgPSB4Y250OworCXJldHVybiB4aWRzOwogfQogCiAvKgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbmFwYnVpbGQuYyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc25hcGJ1aWxkLmMKaW5kZXggNzNjMGYx NTIxNC4uZDAxNWMwNmNlZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9zbmFwYnVpbGQuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Nu YXBidWlsZC5jCkBAIC0yNDEsNiArMjQxLDMwIEBAIHN0cnVjdCBTbmFwQnVpbGQKIAkJICovCiAJ CVRyYW5zYWN0aW9uSWQgKnhpcDsKIAl9CQkJY29tbWl0dGVkOworCisJLyoKKwkgKiBBcnJheSBv ZiB0cmFuc2FjdGlvbnMgYW5kIHN1YnRyYW5zYWN0aW9ucyB0aGF0IGhhZCBtb2RpZmllZCBjYXRh bG9ncworCSAqIGFuZCB3ZXJlIHJ1bm5pbmcgd2hlbiB0aGUgc25hcHNob3Qgd2FzIHNlcmlhbGl6 ZWQuCisJICoKKwkgKiBXZSBub3JtYWxseSByZWx5IG9uIEhFQVAyX05FV19DSUQgYW5kIFhMT0df WEFDVF9JTlZBTElEQVRJT05TIHJlY29yZHMgdG8KKwkgKiBrbm93IGlmIHRoZSB0cmFuc2FjdGlv biBoYXMgY2hhbmdlZCB0aGUgY2F0YWxvZy4gQnV0IGl0IGNvdWxkIGhhcHBlbiB0aGF0CisJICog dGhlIGxvZ2ljYWwgZGVjb2RpbmcgZGVjb2RlcyBvbmx5IHRoZSBjb21taXQgcmVjb3JkIG9mIHRo ZSB0cmFuc2FjdGlvbi4KKwkgKiBUaGlzIGFycmF5IGtlZXBzIHRyYWNrIG9mIHRoZSB0cmFuc2Fj dGlvbnMgdGhhdCBoYXZlIG1vZGlmaWVkIGNhdGFsb2dzCisJICogYW5kIHdlcmUgcnVubmluZyB3 aGVuIHNlcmlhbGl6aW5nIGEgc25hcHNob3QsIGFuZCB0aGlzIGFycmF5IGlzIHVzZWQgdG8KKwkg KiBhZGQgc3VjaCB0cmFuc2FjdGlvbnMgdG8gdGhlIHNuYXBzaG90LgorCSAqCisJICogVGhpcyBh cnJheSBpcyBzZXQgb25jZSB3aGVuIHJlc3RvcmluZyB0aGUgc25hcHNob3QsIHhpZHMgYXJlIHJl bW92ZWQKKwkgKiBmcm9tIHRoZSBhcnJheSB3aGVuIGRlY29kaW5nIHhsX3J1bm5pbmdfeGFjdHMg cmVjb3JkLCBhbmQgdGhlbiBldmVudHVhbGx5CisJICogYmVjb21lcyBhbiBlbXB0eS4KKwkgKi8K KwlzdHJ1Y3QKKwl7CisJCS8qIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgKi8KKwkJc2l6ZV90CQl4 Y250OworCisJCS8qIFRoaXMgYXJyYXkgbXVzdCBiZSBzb3J0ZWQgaW4geGlkQ29tcGFyYXRvciBv cmRlciAqLworCQlUcmFuc2FjdGlvbklkICp4aXA7CisJfQkJCWNhdGNoYW5nZTsKIH07CiAKIC8q CkBAIC0yNTAsOCArMjc0LDggQEAgc3RydWN0IFNuYXBCdWlsZAogc3RhdGljIFJlc291cmNlT3du ZXIgU2F2ZWRSZXNvdXJjZU93bmVyRHVyaW5nRXhwb3J0ID0gTlVMTDsKIHN0YXRpYyBib29sIEV4 cG9ydEluUHJvZ3Jlc3MgPSBmYWxzZTsKIAotLyogLT5jb21taXR0ZWQgbWFuaXB1bGF0aW9uICov Ci1zdGF0aWMgdm9pZCBTbmFwQnVpbGRQdXJnZUNvbW1pdHRlZFR4bihTbmFwQnVpbGQgKmJ1aWxk ZXIpOworLyogLT5jb21taXR0ZWQgYW5kIC0+Y2F0Y2hhbmdlIG1hbmlwdWxhdGlvbiAqLworc3Rh dGljIHZvaWQgU25hcEJ1aWxkUHVyZ2VPbGRlclR4bihTbmFwQnVpbGQgKmJ1aWxkZXIpOwogCiAv KiBzbmFwc2hvdCBidWlsZGluZy9tYW5pcHVsYXRpb24vZGlzdHJpYnV0aW9uIGZ1bmN0aW9ucyAq Lwogc3RhdGljIFNuYXBzaG90IFNuYXBCdWlsZEJ1aWxkU25hcHNob3QoU25hcEJ1aWxkICpidWls ZGVyKTsKQEAgLTI2Miw2ICsyODYsOCBAQCBzdGF0aWMgdm9pZCBTbmFwQnVpbGRTbmFwSW5jUmVm Y291bnQoU25hcHNob3Qgc25hcCk7CiAKIHN0YXRpYyB2b2lkIFNuYXBCdWlsZERpc3RyaWJ1dGVO ZXdDYXRhbG9nU25hcHNob3QoU25hcEJ1aWxkICpidWlsZGVyLCBYTG9nUmVjUHRyIGxzbik7CiAK K3N0YXRpYyBpbmxpbmUgYm9vbCBTbmFwQnVpbGRYaWRIYXNDYXRhbG9nQ2hhbmdlcyhTbmFwQnVp bGQgKmJ1aWxkZXIsIFRyYW5zYWN0aW9uSWQgeGlkKTsKKwogLyogeGxvZyByZWFkaW5nIGhlbHBl ciBmdW5jdGlvbnMgZm9yIFNuYXBCdWlsZFByb2Nlc3NSdW5uaW5nWGFjdHMgKi8KIHN0YXRpYyBi b29sIFNuYXBCdWlsZEZpbmRTbmFwc2hvdChTbmFwQnVpbGQgKmJ1aWxkZXIsIFhMb2dSZWNQdHIg bHNuLCB4bF9ydW5uaW5nX3hhY3RzICpydW5uaW5nKTsKIHN0YXRpYyB2b2lkIFNuYXBCdWlsZFdh aXRTbmFwc2hvdCh4bF9ydW5uaW5nX3hhY3RzICpydW5uaW5nLCBUcmFuc2FjdGlvbklkIGN1dG9m Zik7CkBAIC0yNjksNiArMjk1LDcgQEAgc3RhdGljIHZvaWQgU25hcEJ1aWxkV2FpdFNuYXBzaG90 KHhsX3J1bm5pbmdfeGFjdHMgKnJ1bm5pbmcsIFRyYW5zYWN0aW9uSWQgY3V0b2YKIC8qIHNlcmlh bGl6YXRpb24gZnVuY3Rpb25zICovCiBzdGF0aWMgdm9pZCBTbmFwQnVpbGRTZXJpYWxpemUoU25h cEJ1aWxkICpidWlsZGVyLCBYTG9nUmVjUHRyIGxzbik7CiBzdGF0aWMgYm9vbCBTbmFwQnVpbGRS ZXN0b3JlKFNuYXBCdWlsZCAqYnVpbGRlciwgWExvZ1JlY1B0ciBsc24pOworc3RhdGljIHZvaWQg U25hcEJ1aWxkUmVzdG9yZUNvbnRlbnRzKGludCBmZCwgY2hhciAqZGVzdCwgU2l6ZSBzaXplLCBj b25zdCBjaGFyICpwYXRoKTsKIAogLyoKICAqIEFsbG9jYXRlIGEgbmV3IHNuYXBzaG90IGJ1aWxk ZXIuCkBAIC0zMDYsNiArMzMzLDkgQEAgQWxsb2NhdGVTbmFwc2hvdEJ1aWxkZXIoUmVvcmRlckJ1 ZmZlciAqcmVvcmRlciwKIAkJcGFsbG9jMChidWlsZGVyLT5jb21taXR0ZWQueGNudF9zcGFjZSAq IHNpemVvZihUcmFuc2FjdGlvbklkKSk7CiAJYnVpbGRlci0+Y29tbWl0dGVkLmluY2x1ZGVzX2Fs bF90cmFuc2FjdGlvbnMgPSB0cnVlOwogCisJYnVpbGRlci0+Y2F0Y2hhbmdlLnhjbnQgPSAwOwor CWJ1aWxkZXItPmNhdGNoYW5nZS54aXAgPSBOVUxMOworCiAJYnVpbGRlci0+aW5pdGlhbF94bWlu X2hvcml6b24gPSB4bWluX2hvcml6b247CiAJYnVpbGRlci0+c3RhcnRfZGVjb2RpbmdfYXQgPSBz dGFydF9sc247CiAJYnVpbGRlci0+YnVpbGRpbmdfZnVsbF9zbmFwc2hvdCA9IG5lZWRfZnVsbF9z bmFwc2hvdDsKQEAgLTg4OCwxMiArOTE4LDE1IEBAIFNuYXBCdWlsZEFkZENvbW1pdHRlZFR4bihT bmFwQnVpbGQgKmJ1aWxkZXIsIFRyYW5zYWN0aW9uSWQgeGlkKQogfQogCiAvKgotICogUmVtb3Zl IGtub3dsZWRnZSBhYm91dCB0cmFuc2FjdGlvbnMgd2UgdHJlYXQgYXMgY29tbWl0dGVkIHRoYXQg YXJlIHNtYWxsZXIKLSAqIHRoYW4gLT54bWluLiBUaG9zZSB3b24ndCBldmVyIGdldCBjaGVja2Vk IHZpYSB0aGUgLT5jb21taXR0ZWQgYXJyYXkgYnV0IHZpYQotICogdGhlIGNsb2cgbWFjaGluZXJ5 LCBzbyB3ZSBkb24ndCBuZWVkIHRvIHdhc3RlIG1lbW9yeSBvbiB0aGVtLgorICogUmVtb3ZlIGtu b3dsZWRnZSBhYm91dCB0cmFuc2FjdGlvbnMgd2UgdHJlYXQgYXMgY29tbWl0dGVkIG9yIGNvbnRh aW5pbmcgY2F0YWxvZworICogY2hhbmdlcyB0aGF0IGFyZSBzbWFsbGVyIHRoYW4gLT54bWluLiBU aG9zZSB3b24ndCBldmVyIGdldCBjaGVja2VkIHZpYQorICogdGhlIC0+Y29tbWl0dGVkIGFycmF5 IGFuZCAtPmNhdGNoYW5nZSwgcmVzcGVjdGl2ZWx5LiBUaGUgY29tbWl0dGVkIHhpZHMgd2lsbAor ICogZ2V0IGNoZWNrZWQgdmlhIHRoZSBjbG9nIG1hY2hpbmVyeS4gV2UgY2FuIGlkZWFsbHkgcmVt b3ZlIHRoZSB0cmFuc2FjdGlvbgorICogZnJvbSBjYXRjaGFuZ2UgYXJyYXkgb25jZSBpdCBpcyBm aW5pc2hlZCAoY29tbWl0dGVkL2Fib3J0ZWQpIGJ1dCB0aGF0IGNvdWxkCisgKiBiZSBjb3N0bHkg YXMgd2UgbmVlZCB0byBtYWludGFpbiB0aGUgeGlkcyBvcmRlciBpbiB0aGUgYXJyYXkuCiAgKi8K IHN0YXRpYyB2b2lkCi1TbmFwQnVpbGRQdXJnZUNvbW1pdHRlZFR4bihTbmFwQnVpbGQgKmJ1aWxk ZXIpCitTbmFwQnVpbGRQdXJnZU9sZGVyVHhuKFNuYXBCdWlsZCAqYnVpbGRlcikKIHsKIAlpbnQJ CQlvZmY7CiAJVHJhbnNhY3Rpb25JZCAqd29ya3NwYWNlOwpAQCAtOTI4LDYgKzk2MSwzNiBAQCBT bmFwQnVpbGRQdXJnZUNvbW1pdHRlZFR4bihTbmFwQnVpbGQgKmJ1aWxkZXIpCiAJYnVpbGRlci0+ Y29tbWl0dGVkLnhjbnQgPSBzdXJ2aXZpbmdfeGlkczsKIAogCXBmcmVlKHdvcmtzcGFjZSk7CisK KwkvKiBwdXJnZSB4aWRzIGluIC0+Y2F0Y2hhbmdlIGFzIHdlbGwgKi8KKwlpZiAoYnVpbGRlci0+ Y2F0Y2hhbmdlLnhjbnQgPiAwKQorCXsKKwkJLyoKKwkJICogU2luY2UgY2F0Y2hhbmdlLnhpcCBp cyBzb3J0ZWQsIHdlIGZpbmQgdGhlIGxvd2VyIGJvdW5kIG9mCisJCSAqIHhpZHMgdGhhdCBzaWxs IGFyZSBpbnRlcmVzdGluZy4KKwkJICovCisJCWZvciAob2ZmID0gMDsgb2ZmIDwgYnVpbGRlci0+ Y2F0Y2hhbmdlLnhjbnQ7IG9mZisrKQorCQl7CisJCQlpZiAoVHJhbnNhY3Rpb25JZEZvbGxvd3NP ckVxdWFscyhidWlsZGVyLT5jYXRjaGFuZ2UueGlwW29mZl0sCisJCQkJCQkJCQkJCSBidWlsZGVy LT54bWluKSkKKwkJCQlicmVhazsKKwkJfQorCisJCXN1cnZpdmluZ194aWRzID0gYnVpbGRlci0+ Y2F0Y2hhbmdlLnhjbnQgLSBvZmY7CisJCWlmIChzdXJ2aXZpbmdfeGlkcyA+IDApCisJCQltZW1t b3ZlKGJ1aWxkZXItPmNhdGNoYW5nZS54aXAsICYoYnVpbGRlci0+Y2F0Y2hhbmdlLnhpcFtvZmZd KSwKKwkJCQkJc3Vydml2aW5nX3hpZHMgKiBzaXplb2YoVHJhbnNhY3Rpb25JZCkpOworCQllbHNl CisJCXsKKwkJCS8qIGNhdGNoYW5nZSBsaXN0IGJlY29tZXMgYW4gZW1wdHkgKi8KKwkJCXBmcmVl KGJ1aWxkZXItPmNhdGNoYW5nZS54aXApOworCQkJYnVpbGRlci0+Y2F0Y2hhbmdlLnhpcCA9IE5V TEw7CisJCX0KKworCQllbG9nKERFQlVHMywgInB1cmdlZCBjYXRhbG9nIG1vZGlmeWluZyB0cmFu c2FjdGlvbnMgZnJvbSAlZCB0byAlZCIsCisJCQkgKHVpbnQzMikgYnVpbGRlci0+Y2F0Y2hhbmdl LnhjbnQsIHN1cnZpdmluZ194aWRzKTsKKwkJYnVpbGRlci0+Y2F0Y2hhbmdlLnhjbnQgPSBzdXJ2 aXZpbmdfeGlkczsKKwl9CiB9CiAKIC8qCkBAIC05ODMsNyArMTA0Niw3IEBAIFNuYXBCdWlsZENv bW1pdFR4bihTbmFwQnVpbGQgKmJ1aWxkZXIsIFhMb2dSZWNQdHIgbHNuLCBUcmFuc2FjdGlvbklk IHhpZCwKIAkJICogQWRkIHN1YnRyYW5zYWN0aW9uIHRvIGJhc2Ugc25hcHNob3QgaWYgY2F0YWxv ZyBtb2RpZnlpbmcsIHdlIGRvbid0CiAJCSAqIGRpc3Rpbmd1aXNoIHRvIHRvcGxldmVsIHRyYW5z YWN0aW9ucyB0aGVyZS4KIAkJICovCi0JCWlmIChSZW9yZGVyQnVmZmVyWGlkSGFzQ2F0YWxvZ0No YW5nZXMoYnVpbGRlci0+cmVvcmRlciwgc3VieGlkKSkKKwkJaWYgKFNuYXBCdWlsZFhpZEhhc0Nh dGFsb2dDaGFuZ2VzKGJ1aWxkZXIsIHN1YnhpZCkpCiAJCXsKIAkJCXN1Yl9uZWVkc190aW1ldHJh dmVsID0gdHJ1ZTsKIAkJCW5lZWRzX3NuYXBzaG90ID0gdHJ1ZTsKQEAgLTEwMTIsNyArMTA3NSw3 IEBAIFNuYXBCdWlsZENvbW1pdFR4bihTbmFwQnVpbGQgKmJ1aWxkZXIsIFhMb2dSZWNQdHIgbHNu LCBUcmFuc2FjdGlvbklkIHhpZCwKIAl9CiAKIAkvKiBpZiB0b3AtbGV2ZWwgbW9kaWZpZWQgY2F0 YWxvZywgaXQnbGwgbmVlZCBhIHNuYXBzaG90ICovCi0JaWYgKFJlb3JkZXJCdWZmZXJYaWRIYXND YXRhbG9nQ2hhbmdlcyhidWlsZGVyLT5yZW9yZGVyLCB4aWQpKQorCWlmIChTbmFwQnVpbGRYaWRI YXNDYXRhbG9nQ2hhbmdlcyhidWlsZGVyLCB4aWQpKQogCXsKIAkJZWxvZyhERUJVRzIsICJmb3Vu ZCB0b3AgbGV2ZWwgdHJhbnNhY3Rpb24gJXUsIHdpdGggY2F0YWxvZyBjaGFuZ2VzIiwKIAkJCSB4 aWQpOwpAQCAtMTA4OSw2ICsxMTUyLDIxIEBAIFNuYXBCdWlsZENvbW1pdFR4bihTbmFwQnVpbGQg KmJ1aWxkZXIsIFhMb2dSZWNQdHIgbHNuLCBUcmFuc2FjdGlvbklkIHhpZCwKIAl9CiB9CiAKKy8q CisgKiBDaGVjayBib3RoIHRoZSByZW9yZGVyIGJ1ZmZlciBhbmQgdGhlIHNuYXBzaG90IHRvIHNl ZSBpZiB0aGUgZ2l2ZW4KKyAqIHRyYW5zYWN0aW9uIGhhcyBtb2RpZmllZCBjYXRhbG9ncy4KKyAq Lworc3RhdGljIGlubGluZSBib29sCitTbmFwQnVpbGRYaWRIYXNDYXRhbG9nQ2hhbmdlcyhTbmFw QnVpbGQgKmJ1aWxkZXIsIFRyYW5zYWN0aW9uSWQgeGlkKQoreworCWlmIChSZW9yZGVyQnVmZmVy WGlkSGFzQ2F0YWxvZ0NoYW5nZXMoYnVpbGRlci0+cmVvcmRlciwgeGlkKSkKKwkJcmV0dXJuIHRy dWU7CisKKwkvKiBDaGVjayB0aGUgY2F0Y2hhbmdlIFhJRCBhcnJheSAqLworCXJldHVybiAoKGJ1 aWxkZXItPmNhdGNoYW5nZS54Y250ID4gMCkgJiYKKwkJCShic2VhcmNoKCZ4aWQsIGJ1aWxkZXIt PmNhdGNoYW5nZS54aXAsIGJ1aWxkZXItPmNhdGNoYW5nZS54Y250LAorCQkJCQkgc2l6ZW9mKFRy YW5zYWN0aW9uSWQpLCB4aWRDb21wYXJhdG9yKSAhPSBOVUxMKSk7Cit9CiAKIC8qIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBTbmFwc2hvdCBidWlsZGluZyBmdW5jdGlv bnMgZGVhbGluZyB3aXRoIHhsb2cgcmVjb3JkcwpAQCAtMTEzNSw3ICsxMjEzLDcgQEAgU25hcEJ1 aWxkUHJvY2Vzc1J1bm5pbmdYYWN0cyhTbmFwQnVpbGQgKmJ1aWxkZXIsIFhMb2dSZWNQdHIgbHNu LCB4bF9ydW5uaW5nX3hhY3QKIAlidWlsZGVyLT54bWluID0gcnVubmluZy0+b2xkZXN0UnVubmlu Z1hpZDsKIAogCS8qIFJlbW92ZSB0cmFuc2FjdGlvbnMgd2UgZG9uJ3QgbmVlZCB0byBrZWVwIHRy YWNrIG9mZiBhbnltb3JlICovCi0JU25hcEJ1aWxkUHVyZ2VDb21taXR0ZWRUeG4oYnVpbGRlcik7 CisJU25hcEJ1aWxkUHVyZ2VPbGRlclR4bihidWlsZGVyKTsKIAogCS8qCiAJICogQWR2YW5jZSB0 aGUgeG1pbiBsaW1pdCBmb3IgdGhlIGN1cnJlbnQgcmVwbGljYXRpb24gc2xvdCwgdG8gYWxsb3cK QEAgLTE0MzgsNiArMTUxNiw3IEBAIFNuYXBCdWlsZFdhaXRTbmFwc2hvdCh4bF9ydW5uaW5nX3hh Y3RzICpydW5uaW5nLCBUcmFuc2FjdGlvbklkIGN1dG9mZikKICAqCiAgKiBzdHJ1Y3QgU25hcEJ1 aWxkT25EaXNrOwogICogVHJhbnNhY3Rpb25JZCAqIGNvbW1pdHRlZC54Y250OyAoKm5vdCB4Y250 X3NwYWNlKikKKyAqIFRyYW5zYWN0aW9uSWQgKiBjYXRjaGFuZ2UueGNudDsKICAqCiAgKi8KIHR5 cGVkZWYgc3RydWN0IFNuYXBCdWlsZE9uRGlzawpAQCAtMTQ2Nyw3ICsxNTQ2LDcgQEAgdHlwZWRl ZiBzdHJ1Y3QgU25hcEJ1aWxkT25EaXNrCiAJb2Zmc2V0b2YoU25hcEJ1aWxkT25EaXNrLCB2ZXJz aW9uKQogCiAjZGVmaW5lIFNOQVBCVUlMRF9NQUdJQyAweDUxQTFFMDAxCi0jZGVmaW5lIFNOQVBC VUlMRF9WRVJTSU9OIDQKKyNkZWZpbmUgU05BUEJVSUxEX1ZFUlNJT04gNQogCiAvKgogICogU3Rv cmUvTG9hZCBhIHNuYXBzaG90IGZyb20gZGlzaywgZGVwZW5kaW5nIG9uIHRoZSBzbmFwc2hvdCBi dWlsZGVyJ3Mgc3RhdGUuCkBAIC0xNDkzLDYgKzE1NzIsOCBAQCBTbmFwQnVpbGRTZXJpYWxpemUo U25hcEJ1aWxkICpidWlsZGVyLCBYTG9nUmVjUHRyIGxzbikKIHsKIAlTaXplCQluZWVkZWRfbGVu Z3RoOwogCVNuYXBCdWlsZE9uRGlzayAqb25kaXNrID0gTlVMTDsKKwlUcmFuc2FjdGlvbklkCSpj YXRjaGFuZ2VfeGlwID0gTlVMTDsKKwlzaXplX3QJCWNhdGNoYW5nZV94Y250ID0gMDsKIAljaGFy CSAgICpvbmRpc2tfYzsKIAlpbnQJCQlmZDsKIAljaGFyCQl0bXBwYXRoW01BWFBHUEFUSF07CkBA IC0xNTc4LDggKzE2NTksMTIgQEAgU25hcEJ1aWxkU2VyaWFsaXplKFNuYXBCdWlsZCAqYnVpbGRl ciwgWExvZ1JlY1B0ciBsc24pCiAJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCiAJCQkJ IGVycm1zZygiY291bGQgbm90IHJlbW92ZSBmaWxlIFwiJXNcIjogJW0iLCB0bXBwYXRoKSkpOwog CisJLyogR2V0IHRoZSBjYXRhbG9nIG1vZGlmeWluZyB0cmFuc2FjdGlvbnMgdGhhdCBhcmUgeWV0 IG5vdCBjb21taXR0ZWQgKi8KKwljYXRjaGFuZ2VfeGlwID0gUmVvcmRlckJ1ZmZlckdldENhdGFs b2dDaGFuZ2VzWGFjdHMoYnVpbGRlci0+cmVvcmRlciwKKwkJCQkJCQkJCQkJCQkJJmNhdGNoYW5n ZV94Y250KTsKKwogCW5lZWRlZF9sZW5ndGggPSBzaXplb2YoU25hcEJ1aWxkT25EaXNrKSArCi0J CXNpemVvZihUcmFuc2FjdGlvbklkKSAqIGJ1aWxkZXItPmNvbW1pdHRlZC54Y250OworCQlzaXpl b2YoVHJhbnNhY3Rpb25JZCkgKiAoYnVpbGRlci0+Y29tbWl0dGVkLnhjbnQgKyBjYXRjaGFuZ2Vf eGNudCk7CiAKIAlvbmRpc2tfYyA9IE1lbW9yeUNvbnRleHRBbGxvY1plcm8oYnVpbGRlci0+Y29u dGV4dCwgbmVlZGVkX2xlbmd0aCk7CiAJb25kaXNrID0gKFNuYXBCdWlsZE9uRGlzayAqKSBvbmRp c2tfYzsKQEAgLTE1OTgsNiArMTY4Myw5IEBAIFNuYXBCdWlsZFNlcmlhbGl6ZShTbmFwQnVpbGQg KmJ1aWxkZXIsIFhMb2dSZWNQdHIgbHNuKQogCW9uZGlzay0+YnVpbGRlci5zbmFwc2hvdCA9IE5V TEw7CiAJb25kaXNrLT5idWlsZGVyLnJlb3JkZXIgPSBOVUxMOwogCW9uZGlzay0+YnVpbGRlci5j b21taXR0ZWQueGlwID0gTlVMTDsKKwlvbmRpc2stPmJ1aWxkZXIuY2F0Y2hhbmdlLnhpcCA9IE5V TEw7CisJLyogdXBkYXRlIGNhdGNoYW5nZSBvbmx5IG9uIGRpc2sgZGF0YSAqLworCW9uZGlzay0+ YnVpbGRlci5jYXRjaGFuZ2UueGNudCA9IGNhdGNoYW5nZV94Y250OwogCiAJQ09NUF9DUkMzMkMo b25kaXNrLT5jaGVja3N1bSwKIAkJCQkmb25kaXNrLT5idWlsZGVyLApAQCAtMTYwOSw2ICsxNjk3 LDEyIEBAIFNuYXBCdWlsZFNlcmlhbGl6ZShTbmFwQnVpbGQgKmJ1aWxkZXIsIFhMb2dSZWNQdHIg bHNuKQogCUNPTVBfQ1JDMzJDKG9uZGlzay0+Y2hlY2tzdW0sIG9uZGlza19jLCBzeik7CiAJb25k aXNrX2MgKz0gc3o7CiAKKwkvKiBjb3B5IGNhdGFsb2cgbW9kaWZ5aW5nIHhhY3RzICovCisJc3og PSBzaXplb2YoVHJhbnNhY3Rpb25JZCkgKiBjYXRjaGFuZ2VfeGNudDsKKwltZW1jcHkob25kaXNr X2MsIGNhdGNoYW5nZV94aXAsIHN6KTsKKwlDT01QX0NSQzMyQyhvbmRpc2stPmNoZWNrc3VtLCBv bmRpc2tfYywgc3opOworCW9uZGlza19jICs9IHN6OworCiAJRklOX0NSQzMyQyhvbmRpc2stPmNo ZWNrc3VtKTsKIAogCS8qIHdlIGhhdmUgdmFsaWQgZGF0YSBub3csIG9wZW4gdGVtcGZpbGUgYW5k IHdyaXRlIGl0IHRoZXJlICovCkBAIC0xNjk0LDYgKzE3ODgsOCBAQCBvdXQ6CiAJLyogYmUgdGlk eSAqLwogCWlmIChvbmRpc2spCiAJCXBmcmVlKG9uZGlzayk7CisJaWYgKGNhdGNoYW5nZV94aXAp CisJCXBmcmVlKGNhdGNoYW5nZV94aXApOwogfQogCiAvKgpAQCAtMTcwNyw3ICsxODAzLDYgQEAg U25hcEJ1aWxkUmVzdG9yZShTbmFwQnVpbGQgKmJ1aWxkZXIsIFhMb2dSZWNQdHIgbHNuKQogCWlu dAkJCWZkOwogCWNoYXIJCXBhdGhbTUFYUEdQQVRIXTsKIAlTaXplCQlzejsKLQlpbnQJCQlyZWFk Qnl0ZXM7CiAJcGdfY3JjMzJjCWNoZWNrc3VtOwogCiAJLyogbm8gcG9pbnQgaW4gbG9hZGluZyBh IHNuYXBzaG90IGlmIHdlJ3JlIGFscmVhZHkgdGhlcmUgKi8KQEAgLTE3MzksMjkgKzE4MzQsNyBA QCBTbmFwQnVpbGRSZXN0b3JlKFNuYXBCdWlsZCAqYnVpbGRlciwgWExvZ1JlY1B0ciBsc24pCiAK IAogCS8qIHJlYWQgc3RhdGljYWxseSBzaXplZCBwb3J0aW9uIG9mIHNuYXBzaG90ICovCi0JcGdz dGF0X3JlcG9ydF93YWl0X3N0YXJ0KFdBSVRfRVZFTlRfU05BUEJVSUxEX1JFQUQpOwotCXJlYWRC eXRlcyA9IHJlYWQoZmQsICZvbmRpc2ssIFNuYXBCdWlsZE9uRGlza0NvbnN0YW50U2l6ZSk7Ci0J cGdzdGF0X3JlcG9ydF93YWl0X2VuZCgpOwotCWlmIChyZWFkQnl0ZXMgIT0gU25hcEJ1aWxkT25E aXNrQ29uc3RhbnRTaXplKQotCXsKLQkJaW50CQkJc2F2ZV9lcnJubyA9IGVycm5vOwotCi0JCUNs b3NlVHJhbnNpZW50RmlsZShmZCk7Ci0KLQkJaWYgKHJlYWRCeXRlcyA8IDApCi0JCXsKLQkJCWVy cm5vID0gc2F2ZV9lcnJubzsKLQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCShlcnJjb2RlX2Zvcl9m aWxlX2FjY2VzcygpLAotCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgcmVhZCBmaWxlIFwiJXNcIjog JW0iLCBwYXRoKSkpOwotCQl9Ci0JCWVsc2UKLQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCShlcnJj b2RlKEVSUkNPREVfREFUQV9DT1JSVVBURUQpLAotCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgcmVh ZCBmaWxlIFwiJXNcIjogcmVhZCAlZCBvZiAlenUiLAotCQkJCQkJCXBhdGgsIHJlYWRCeXRlcywK LQkJCQkJCQkoU2l6ZSkgU25hcEJ1aWxkT25EaXNrQ29uc3RhbnRTaXplKSkpOwotCX0KKwlTbmFw QnVpbGRSZXN0b3JlQ29udGVudHMoZmQsIChjaGFyICopICZvbmRpc2ssIFNuYXBCdWlsZE9uRGlz a0NvbnN0YW50U2l6ZSwgcGF0aCk7CiAKIAlpZiAob25kaXNrLm1hZ2ljICE9IFNOQVBCVUlMRF9N QUdJQykKIAkJZXJlcG9ydChFUlJPUiwKQEAgLTE3ODEsNTcgKzE4NTQsMjEgQEAgU25hcEJ1aWxk UmVzdG9yZShTbmFwQnVpbGQgKmJ1aWxkZXIsIFhMb2dSZWNQdHIgbHNuKQogCQkJCVNuYXBCdWls ZE9uRGlza0NvbnN0YW50U2l6ZSAtIFNuYXBCdWlsZE9uRGlza05vdENoZWNrc3VtbWVkU2l6ZSk7 CiAKIAkvKiByZWFkIFNuYXBCdWlsZCAqLwotCXBnc3RhdF9yZXBvcnRfd2FpdF9zdGFydChXQUlU X0VWRU5UX1NOQVBCVUlMRF9SRUFEKTsKLQlyZWFkQnl0ZXMgPSByZWFkKGZkLCAmb25kaXNrLmJ1 aWxkZXIsIHNpemVvZihTbmFwQnVpbGQpKTsKLQlwZ3N0YXRfcmVwb3J0X3dhaXRfZW5kKCk7Ci0J aWYgKHJlYWRCeXRlcyAhPSBzaXplb2YoU25hcEJ1aWxkKSkKLQl7Ci0JCWludAkJCXNhdmVfZXJy bm8gPSBlcnJubzsKLQotCQlDbG9zZVRyYW5zaWVudEZpbGUoZmQpOwotCi0JCWlmIChyZWFkQnl0 ZXMgPCAwKQotCQl7Ci0JCQllcnJubyA9IHNhdmVfZXJybm87Ci0JCQllcmVwb3J0KEVSUk9SLAot CQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKLQkJCQkJIGVycm1zZygiY291bGQgbm90 IHJlYWQgZmlsZSBcIiVzXCI6ICVtIiwgcGF0aCkpKTsKLQkJfQotCQllbHNlCi0JCQllcmVwb3J0 KEVSUk9SLAotCQkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEFfQ09SUlVQVEVEKSwKLQkJCQkJIGVy cm1zZygiY291bGQgbm90IHJlYWQgZmlsZSBcIiVzXCI6IHJlYWQgJWQgb2YgJXp1IiwKLQkJCQkJ CQlwYXRoLCByZWFkQnl0ZXMsIHNpemVvZihTbmFwQnVpbGQpKSkpOwotCX0KKwlTbmFwQnVpbGRS ZXN0b3JlQ29udGVudHMoZmQsIChjaGFyICopICZvbmRpc2suYnVpbGRlciwgc2l6ZW9mKFNuYXBC dWlsZCksIHBhdGgpOwogCUNPTVBfQ1JDMzJDKGNoZWNrc3VtLCAmb25kaXNrLmJ1aWxkZXIsIHNp emVvZihTbmFwQnVpbGQpKTsKIAogCS8qIHJlc3RvcmUgY29tbWl0dGVkIHhhY3RzIGluZm9ybWF0 aW9uICovCiAJc3ogPSBzaXplb2YoVHJhbnNhY3Rpb25JZCkgKiBvbmRpc2suYnVpbGRlci5jb21t aXR0ZWQueGNudDsKIAlvbmRpc2suYnVpbGRlci5jb21taXR0ZWQueGlwID0gTWVtb3J5Q29udGV4 dEFsbG9jWmVybyhidWlsZGVyLT5jb250ZXh0LCBzeik7Ci0JcGdzdGF0X3JlcG9ydF93YWl0X3N0 YXJ0KFdBSVRfRVZFTlRfU05BUEJVSUxEX1JFQUQpOwotCXJlYWRCeXRlcyA9IHJlYWQoZmQsIG9u ZGlzay5idWlsZGVyLmNvbW1pdHRlZC54aXAsIHN6KTsKLQlwZ3N0YXRfcmVwb3J0X3dhaXRfZW5k KCk7Ci0JaWYgKHJlYWRCeXRlcyAhPSBzeikKLQl7Ci0JCWludAkJCXNhdmVfZXJybm8gPSBlcnJu bzsKLQotCQlDbG9zZVRyYW5zaWVudEZpbGUoZmQpOwotCi0JCWlmIChyZWFkQnl0ZXMgPCAwKQot CQl7Ci0JCQllcnJubyA9IHNhdmVfZXJybm87Ci0JCQllcmVwb3J0KEVSUk9SLAotCQkJCQkoZXJy Y29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKLQkJCQkJIGVycm1zZygiY291bGQgbm90IHJlYWQgZmls ZSBcIiVzXCI6ICVtIiwgcGF0aCkpKTsKLQkJfQotCQllbHNlCi0JCQllcmVwb3J0KEVSUk9SLAot CQkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEFfQ09SUlVQVEVEKSwKLQkJCQkJIGVycm1zZygiY291 bGQgbm90IHJlYWQgZmlsZSBcIiVzXCI6IHJlYWQgJWQgb2YgJXp1IiwKLQkJCQkJCQlwYXRoLCBy ZWFkQnl0ZXMsIHN6KSkpOwotCX0KKwlTbmFwQnVpbGRSZXN0b3JlQ29udGVudHMoZmQsIChjaGFy ICopIG9uZGlzay5idWlsZGVyLmNvbW1pdHRlZC54aXAsIHN6LCBwYXRoKTsKIAlDT01QX0NSQzMy QyhjaGVja3N1bSwgb25kaXNrLmJ1aWxkZXIuY29tbWl0dGVkLnhpcCwgc3opOwogCisJLyogcmVz dG9yZSBjYXRhbG9nIG1vZGlmeWluZyB4YWN0cyBpbmZvcm1hdGlvbiAqLworCXN6ID0gc2l6ZW9m KFRyYW5zYWN0aW9uSWQpICogb25kaXNrLmJ1aWxkZXIuY2F0Y2hhbmdlLnhjbnQ7CisJb25kaXNr LmJ1aWxkZXIuY2F0Y2hhbmdlLnhpcCA9IE1lbW9yeUNvbnRleHRBbGxvY1plcm8oYnVpbGRlci0+ Y29udGV4dCwgc3opOworCVNuYXBCdWlsZFJlc3RvcmVDb250ZW50cyhmZCwgKGNoYXIgKikgb25k aXNrLmJ1aWxkZXIuY2F0Y2hhbmdlLnhpcCwgc3osIHBhdGgpOworCUNPTVBfQ1JDMzJDKGNoZWNr c3VtLCBvbmRpc2suYnVpbGRlci5jYXRjaGFuZ2UueGlwLCBzeik7CisKIAlpZiAoQ2xvc2VUcmFu c2llbnRGaWxlKGZkKSAhPSAwKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlX2Zvcl9m aWxlX2FjY2VzcygpLApAQCAtMTg4NSw2ICsxOTIyLDE0IEBAIFNuYXBCdWlsZFJlc3RvcmUoU25h cEJ1aWxkICpidWlsZGVyLCBYTG9nUmVjUHRyIGxzbikKIAl9CiAJb25kaXNrLmJ1aWxkZXIuY29t bWl0dGVkLnhpcCA9IE5VTEw7CiAKKwkvKiBzZXQgY2F0YWxvZyBtb2RpZnlpbmcgdHJhbnNhY3Rp b25zICovCisJaWYgKGJ1aWxkZXItPmNhdGNoYW5nZS54aXApCisJCXBmcmVlKGJ1aWxkZXItPmNh dGNoYW5nZS54aXApOworCWJ1aWxkZXItPmNhdGNoYW5nZS54Y250ID0gb25kaXNrLmJ1aWxkZXIu Y2F0Y2hhbmdlLnhjbnQ7CisJYnVpbGRlci0+Y2F0Y2hhbmdlLnhpcCA9IG9uZGlzay5idWlsZGVy LmNhdGNoYW5nZS54aXA7CisKKwlvbmRpc2suYnVpbGRlci5jYXRjaGFuZ2UueGlwID0gTlVMTDsK KwogCS8qIG91ciBzbmFwc2hvdCBpcyBub3QgaW50ZXJlc3RpbmcgYW55bW9yZSwgYnVpbGQgYSBu ZXcgb25lICovCiAJaWYgKGJ1aWxkZXItPnNuYXBzaG90ICE9IE5VTEwpCiAJewpAQCAtMTkwOSw2 ICsxOTU0LDM4IEBAIHNuYXBzaG90X25vdF9pbnRlcmVzdGluZzoKIAlyZXR1cm4gZmFsc2U7CiB9 CiAKKy8qCisgKiBSZWFkIHRoZSBjb250ZW50cyBvZiB0aGUgc2VyaWFsaXplZCBzbmFwc2hvdCB0 byB0aGUgZGVzdC4KKyAqLworc3RhdGljIHZvaWQKK1NuYXBCdWlsZFJlc3RvcmVDb250ZW50cyhp bnQgZmQsIGNoYXIgKmRlc3QsIFNpemUgc2l6ZSwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpbnQJ CQlyZWFkQnl0ZXM7CisKKwlwZ3N0YXRfcmVwb3J0X3dhaXRfc3RhcnQoV0FJVF9FVkVOVF9TTkFQ QlVJTERfUkVBRCk7CisJcmVhZEJ5dGVzID0gcmVhZChmZCwgZGVzdCwgc2l6ZSk7CisJcGdzdGF0 X3JlcG9ydF93YWl0X2VuZCgpOworCWlmIChyZWFkQnl0ZXMgIT0gc2l6ZSkKKwl7CisJCWludAkJ CXNhdmVfZXJybm8gPSBlcnJubzsKKworCQlDbG9zZVRyYW5zaWVudEZpbGUoZmQpOworCisJCWlm IChyZWFkQnl0ZXMgPCAwKQorCQl7CisJCQllcnJubyA9IHNhdmVfZXJybm87CisJCQllcmVwb3J0 KEVSUk9SLAorCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkJIGVycm1zZygi Y291bGQgbm90IHJlYWQgZmlsZSBcIiVzXCI6ICVtIiwgcGF0aCkpKTsKKwkJfQorCQllbHNlCisJ CQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEFfQ09SUlVQVEVEKSwK KwkJCQkJIGVycm1zZygiY291bGQgbm90IHJlYWQgZmlsZSBcIiVzXCI6IHJlYWQgJWQgb2YgJXp1 IiwKKwkJCQkJCQlwYXRoLCByZWFkQnl0ZXMsIHNpemVvZihTbmFwQnVpbGQpKSkpOworCX0KK30K KwogLyoKICAqIFJlbW92ZSBhbGwgc2VyaWFsaXplZCBzbmFwc2hvdHMgdGhhdCBhcmUgbm90IHJl cXVpcmVkIGFueW1vcmUgYmVjYXVzZSBubwogICogc2xvdCBjYW4gbmVlZCB0aGVtLiBUaGlzIGRv ZXNuJ3QgYWN0dWFsbHkgaGF2ZSB0byBydW4gZHVyaW5nIGEgY2hlY2twb2ludCwKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCBiL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaAppbmRleCBkMTA5ZDBiYWVkLi43NDQ2OTExZGYx IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgKKysr IGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCkBAIC0zODAsNiArMzgw LDExIEBAIHR5cGVkZWYgc3RydWN0IFJlb3JkZXJCdWZmZXJUWE4KIAkgKi8KIAlkbGlzdF9ub2Rl CW5vZGU7CiAKKwkvKgorCSAqIEEgbm9kZSBpbiB0aGUgbGlzdCBvZiBjYXRhbG9nIG1vZGlmeWlu ZyB0cmFuc2FjdGlvbnMKKwkgKi8KKwlkbGlzdF9ub2RlCWNhdGNoYW5nZV9ub2RlOworCiAJLyoK IAkgKiBTaXplIG9mIHRoaXMgdHJhbnNhY3Rpb24gKGNoYW5nZXMgY3VycmVudGx5IGluIG1lbW9y eSwgaW4gYnl0ZXMpLgogCSAqLwpAQCAtNTI2LDYgKzUzMSwxMiBAQCBzdHJ1Y3QgUmVvcmRlckJ1 ZmZlcgogCSAqLwogCWRsaXN0X2hlYWQJdHhuc19ieV9iYXNlX3NuYXBzaG90X2xzbjsKIAorCS8q CisJICogVHJhbnNhY3Rpb25zIGFuZCBzdWJ0cmFuc2FjdGlvbnMgdGhhdCBoYXZlIG1vZGlmaWVk IHN5c3RlbSBjYXRhbG9ncy4KKwkgKi8KKwlkbGlzdF9oZWFkCWNhdGNoYW5nZV90eG5zOworCWlu dAkJCWNhdGNoYW5nZV9udHhuczsKKwogCS8qCiAJICogb25lLWVudHJ5IHNpemVkIGNhY2hlIGZv ciBieV90eG4uIFZlcnkgZnJlcXVlbnRseSB0aGUgc2FtZSB0eG4gZ2V0cwogCSAqIGxvb2tlZCB1 cCBvdmVyIGFuZCBvdmVyIGFnYWluLgpAQCAtNjc3LDYgKzY4OCw3IEBAIGV4dGVybiB2b2lkIFJl b3JkZXJCdWZmZXJTa2lwUHJlcGFyZShSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4 aWQpOwogZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlclByZXBhcmUoUmVvcmRlckJ1ZmZlciAqcmIs IFRyYW5zYWN0aW9uSWQgeGlkLCBjaGFyICpnaWQpOwogZXh0ZXJuIFJlb3JkZXJCdWZmZXJUWE4g KlJlb3JkZXJCdWZmZXJHZXRPbGRlc3RUWE4oUmVvcmRlckJ1ZmZlciAqKTsKIGV4dGVybiBUcmFu c2FjdGlvbklkIFJlb3JkZXJCdWZmZXJHZXRPbGRlc3RYbWluKFJlb3JkZXJCdWZmZXIgKnJiKTsK K2V4dGVybiBUcmFuc2FjdGlvbklkICpSZW9yZGVyQnVmZmVyR2V0Q2F0YWxvZ0NoYW5nZXNYYWN0 cyhSZW9yZGVyQnVmZmVyICpyYiwgc2l6ZV90ICp4Y250X3ApOwogCiBleHRlcm4gdm9pZCBSZW9y ZGVyQnVmZmVyU2V0UmVzdGFydFBvaW50KFJlb3JkZXJCdWZmZXIgKiwgWExvZ1JlY1B0ciBwdHIp OwogCi0tIAoyLjI0LjMgKEFwcGxlIEdpdC0xMjgpCgo= --000000000000782a6b05e3910a8c--