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 1lYLtC-0005M6-Qw for pgsql-hackers@arkaria.postgresql.org; Mon, 19 Apr 2021 04:52:03 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1lYLt9-0007gq-SZ for pgsql-hackers@arkaria.postgresql.org; Mon, 19 Apr 2021 04:51:59 +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 1lYLt9-0007gQ-EN for pgsql-hackers@lists.postgresql.org; Mon, 19 Apr 2021 04:51:59 +0000 Received: from mail-pf1-x42f.google.com ([2607:f8b0:4864:20::42f]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1lYLsz-0000gG-SZ for pgsql-hackers@postgresql.org; Mon, 19 Apr 2021 04:51:56 +0000 Received: by mail-pf1-x42f.google.com with SMTP id w6so7824776pfc.8 for ; Sun, 18 Apr 2021 21:51:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=bDOXFQ/thpD1zfUpBfiUipdkAEg/yjbHBUZKNMjPPWU=; b=fL6xZRkTcTj5LMcM1EbJ7p08x8ryhcr4o9yPZftaxOePes/oi6pUF7TYOLFq8oxp8Q SOdifjQsp1MtoNkKI5GiXfymzd2u9NlxJREKwRCnP3yK1NwQYqWghNcSujj/HW4I0Vhq MIAkT0D2Xsp6nosUoMz5O7510jaExNgMc5sia75p/3J4EOEs22ZzrTUGzQNwxYzlirsr L3QMFcnRjPOS665ABM88rt07/j65RGBMj7Y+wfaNJkneZU0qRTv+vCDRyHTvGEvCy3jS z7MrTGx+6qw6tGwT3CDoH25r/Ul8L7MX+pz+/BmnLiDdx+80WvcL9j4ZjbHQNf2RYjGd XALA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=bDOXFQ/thpD1zfUpBfiUipdkAEg/yjbHBUZKNMjPPWU=; b=Mpr5Mel0D8EntZxZhoXxh6+stT9Ek6OtlXg1odGqrGSoy7mQaBXMGd2JfAXJNBze/u kqpqQ1j0704UVmmIiZhm5HF2lLsOYuVAa2lRDccIrBGhGC66TJXSS3ToTp90MN3APFJ5 H+Wech4wrOvywwFjwz/1CFcUOJSVGKxqikxgXGpXuRtfYJuTkKkuP/oxlM9vfmk9v2TL auqOa6gau34TOKZEmq5pQcU591QhlCq/inMPPx00/A9zAdUNxW4BKb4DG7Wc2zSr7efL eyOZILo3GCOzgmfLKUKuyZ4wDqSfHcon0jI+8RYm35doaWcJVtDDNhr2MyiNqqGW3bXK 6ZuQ== X-Gm-Message-State: AOAM530syyNFRVhOzPs7LMU7liI16WNtWXZLEHTRXy43YThlHF9BdC53 4aw1tW9HTg40Lvdnh6XNtgDAXLZEFsl1cM522yY= X-Google-Smtp-Source: ABdhPJx3Aw0iVxrKDhEsCEq6dbOkDVmeIig9fR9wcGsadpcNqeI85qUePPnHma5+vLKEpEfjuWae3itKtmlzjAvlylU= X-Received: by 2002:a05:6a00:16d0:b029:249:adf8:6fb8 with SMTP id l16-20020a056a0016d0b0290249adf86fb8mr17932809pfc.58.1618807907775; Sun, 18 Apr 2021 21:51:47 -0700 (PDT) MIME-Version: 1.0 References: <20201217050522.GU30237@telsasoft.com> <20201217204442.GX30237@telsasoft.com> <20201218175439.GA30237@telsasoft.com> <20201221074725.GF30237@telsasoft.com> <20201225023958.GW30237@telsasoft.com> <96eaa813-4ad6-e80a-04a4-cc8082d356dd@swarm64.com> <508af801-6356-d36b-1867-011ac6df8f55@swarm64.com> In-Reply-To: From: Bharath Rupireddy Date: Mon, 19 Apr 2021 10:21:36 +0530 Message-ID: Subject: Re: New Table Access Methods for Multi and Single Inserts To: Dilip Kumar Cc: Luc Vlaming , Justin Pryzby , PostgreSQL-development , Andres Freund , Paul Guo , Jeff Davis Content-Type: multipart/mixed; boundary="0000000000004d842705c04c1689" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000004d842705c04c1689 Content-Type: text/plain; charset="UTF-8" On Mon, Apr 5, 2021 at 9:49 AM Bharath Rupireddy wrote: > > On Wed, Mar 10, 2021 at 10:21 AM Bharath Rupireddy > wrote: > > Attaching the v4 patch set. Please review it further. > > Attaching v5 patch set after rebasing onto the latest master. Another rebase due to conflicts in 0003. Attaching v6 for review. With Regards, Bharath Rupireddy. EnterpriseDB: http://www.enterprisedb.com --0000000000004d842705c04c1689 Content-Type: application/x-patch; name="v6-0001-New-Table-AMs-for-Multi-and-Single-Inserts.patch" Content-Disposition: attachment; filename="v6-0001-New-Table-AMs-for-Multi-and-Single-Inserts.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kno3talx0 RnJvbSA2NTE4MjEyNTgzZTI0YjAxNzM3NTUxMjcwMWQ5ZmVmYTZkZTIwZTQyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlA ZW50ZXJwcmlzZWRiLmNvbT4KRGF0ZTogV2VkLCAxMCBNYXIgMjAyMSAwOTo1Mzo0OCArMDUzMApT dWJqZWN0OiBbUEFUQ0ggdjYgMS8zXSBOZXcgVGFibGUgQU1zIGZvciBNdWx0aSBhbmQgU2luZ2xl IEluc2VydHMKClRoaXMgcGF0Y2ggaW50cm9kdWNlcyBuZXcgdGFibGUgYWNjZXNzIG1ldGhvZHMg Zm9yIG11bHRpIGFuZApzaW5nbGUgaW5zZXJ0cy4gQWxzbyBpbXBsZW1lbnRzL3JlYXJyYW5nZXMg dGhlIG91dHNpZGUgY29kZSBmb3IKaGVhcCBhbSBpbnRvIHRoZXNlIG5ldyBBUElzLgoKTWFpbiBk ZXNpZ24gZ29hbCBvZiB0aGVzZSBuZXcgQVBJcyBpcyB0byBnaXZlIGZsZXhpYmlsaXR5IHRvCnRh YmxlYW0gZGV2ZWxvcGVycyBpbiBpbXBsZW1lbnRpbmcgbXVsdGkgaW5zZXJ0IGxvZ2ljIGRlcGVu ZGVudCBvbgp0aGUgdW5kZXJseWluZyBzdG9yYWdlIGVuZ2luZS4gQ3VycmVudGx5LCBmb3IgYWxs IHRoZSB1bmRlcmx5aW5nCnN0b3JhZ2UgZW5naW5lcywgd2UgZm9sbG93IHRoZSBzYW1lIG11bHRp IGluc2VydCBsb2dpYyBzdWNoIGFzIHdoZW4KYW5kIGhvdyB0byBmbHVzaCB0aGUgYnVmZmVyZWQg dHVwbGVzLCB0dXBsZSBzaXplIGNhbGN1bGF0aW9uLCBhbmQKdGhpcyBsb2dpYyBkb2Vzbid0IHRh a2UgaW50byBhY2NvdW50IHRoZSB1bmRlcmx5aW5nIHN0b3JhZ2UgZW5naW5lCmNhcGFiaWxpdGll cy4KCldlIGNhbiBhbHNvIGF2b2lkIGR1cGxpY2F0aW5nIG11bHRpIGluc2VydCBjb2RlIChmb3Ig ZXhpc3RpbmcgQ09QWSwKYW5kIHVwY29taW5nIENUQVMsIENSRUFURS9SRUZSRVNIIE1BVCBWSUVX IGFuZCBJTlNFUlQgU0VMRUNUcykuIFdlCmNhbiBhbHNvIG1vdmUgYnVsayBpbnNlcnQgc3RhdGUg YWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGluc2lkZQp0aGVzZSBBUElzLgotLS0KIHNyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jICAgICAgICAgfCAyMTIgKysrKysrKysrKysrKysr KysrKysrKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgfCAgIDUg Kwogc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYyAgICB8ICAgNyArCiBzcmMv YmFja2VuZC9leGVjdXRvci9leGVjVHVwbGVzLmMgICAgICAgIHwgIDgzICsrKysrKysrLQogc3Jj L2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAgICAgICB8ICA0OSArKysrKy0KIHNyYy9p bmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggICAgICAgICAgICAgfCAgODcgKysrKysrKysrKwogc3Jj L2luY2x1ZGUvZXhlY3V0b3IvdHVwdGFibGUuaCAgICAgICAgICB8ICAgMSArCiA3IGZpbGVzIGNo YW5nZWQsIDQzOCBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtLmMKaW5kZXggM2I0MzVjMTA3ZC4uZDhiZmUxN2YyMiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtLmMKQEAgLTY3LDYgKzY3LDcgQEAKICNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgogI2lu Y2x1ZGUgInV0aWxzL2ludmFsLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisjaW5j bHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9yZWxjYWNoZS5oIgogI2lu Y2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKICNpbmNsdWRlICJ1dGlscy9zcGNjYWNoZS5oIgpAQCAt MjY2OSw2ICsyNjcwLDIxNyBAQCBoZWFwX211bHRpX2luc2VydChSZWxhdGlvbiByZWxhdGlvbiwg VHVwbGVUYWJsZVNsb3QgKipzbG90cywgaW50IG50dXBsZXMsCiAJcGdzdGF0X2NvdW50X2hlYXBf aW5zZXJ0KHJlbGF0aW9uLCBudHVwbGVzKTsKIH0KIAorLyoKKyAqIGhlYXBfaW5zZXJ0X2JlZ2lu IC0gYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgVGFibGVJbnNlcnRTdGF0ZQorICoKKyAqIEZvciBz aW5nbGUgaW5zZXJ0czoKKyAqICAxKSBTcGVjaWZ5IGlzX211bHRpIGFzIGZhbHNlLCB0aGVuIG11 bHRpIGluc2VydCBzdGF0ZSB3aWxsIGJlIE5VTEwuCisgKgorICogRm9yIG11bHRpIGluc2VydHM6 CisgKiAgMSkgU3BlY2lmeSBpc19tdWx0aSBhcyB0cnVlLCB0aGVuIG11bHRpIGluc2VydCBzdGF0 ZSB3aWxsIGJlIGFsbG9jYXRlZCBhbmQKKyAqIAkgICBpbml0aWFsaXplZC4KKyAqCisgKiAgT3Ro ZXIgaW5wdXQgcGFyYW1ldGVycyBpLmUuIHJlbGF0aW9uLCBjb21tYW5kIGlkLCBvcHRpb25zIGFy ZSBjb21tb24gZm9yCisgKiAgYm90aCBzaW5nbGUgYW5kIG11bHRpIGluc2VydHMuCisgKi8KK1Rh YmxlSW5zZXJ0U3RhdGUqCitoZWFwX2luc2VydF9iZWdpbihSZWxhdGlvbiByZWwsIENvbW1hbmRJ ZCBjaWQsIGludCBvcHRpb25zLCBib29sIGlzX211bHRpKQoreworCVRhYmxlSW5zZXJ0U3RhdGUg KnN0YXRlOworCisJc3RhdGUgPSBwYWxsb2Moc2l6ZW9mKFRhYmxlSW5zZXJ0U3RhdGUpKTsKKwlz dGF0ZS0+cmVsID0gcmVsOworCXN0YXRlLT5jaWQgPSBjaWQ7CisJc3RhdGUtPm9wdGlvbnMgPSBv cHRpb25zOworCS8qIEJlbG93IHBhcmFtZXRlcnMgYXJlIG5vdCB1c2VkIGZvciBzaW5nbGUgaW5z ZXJ0cy4gKi8KKwlzdGF0ZS0+bWlfc2xvdHMgPSBOVUxMOworCXN0YXRlLT5taXN0YXRlID0gTlVM TDsKKwlzdGF0ZS0+bWlfY3VyX3Nsb3RzID0gMDsKKwlzdGF0ZS0+Zmx1c2hlZCA9IGZhbHNlOwor CisJaWYgKGlzX211bHRpKQorCXsKKwkJSGVhcE11bHRpSW5zZXJ0U3RhdGUgKm1pc3RhdGU7CisK KwkJbWlzdGF0ZSA9IHBhbGxvYyhzaXplb2YoSGVhcE11bHRpSW5zZXJ0U3RhdGUpKTsKKwkJc3Rh dGUtPm1pX3Nsb3RzID0KKwkJCQlwYWxsb2MwKHNpemVvZihUdXBsZVRhYmxlU2xvdCAqKSAqIE1B WF9CVUZGRVJFRF9UVVBMRVMpOworCQltaXN0YXRlLT5tYXhfc2xvdHMgPSBNQVhfQlVGRkVSRURf VFVQTEVTOworCQltaXN0YXRlLT5tYXhfc2l6ZSA9IE1BWF9CVUZGRVJFRF9CWVRFUzsKKwkJbWlz dGF0ZS0+Y3VyX3NpemUgPSAwOworCQkvKgorCQkgKiBDcmVhdGUgYSB0ZW1wb3JhcnkgbWVtb3J5 IGNvbnRleHQgc28gdGhhdCB3ZSBjYW4gcmVzZXQgb25jZSBwZXIKKwkJICogbXVsdGkgaW5zZXJ0 IGJhdGNoLgorCQkgKi8KKwkJbWlzdGF0ZS0+Y29udGV4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0 ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCQkJCSAiaGVhcF9tdWx0aV9pbnNlcnQi LAorCQkJCQkJCQkJCQkJIEFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCQlzdGF0ZS0+bWlzdGF0 ZSA9IG1pc3RhdGU7CisJfQorCisJcmV0dXJuIHN0YXRlOworfQorCisvKgorICogaGVhcF9pbnNl cnRfdjIgLSBpbnNlcnQgc2luZ2xlIHR1cGxlIGludG8gYSBoZWFwCisgKgorICogSW5zZXJ0IHR1 cGxlIGZyb20gc2xvdCBpbnRvIHRhYmxlLiBUaGlzIGlzIGxpa2UgaGVhcF9pbnNlcnQoKSwgdGhl IG9ubHkKKyAqIGRpZmZlcmVuY2UgaXMgdGhhdCB0aGUgcGFyYW1ldGVycyBmb3IgaW5zZXJ0aW9u IGFyZSBpbnNpZGUgdGFibGUgaW5zZXJ0CisgKiBzdGF0ZSBzdHJ1Y3R1cmUuCisgKi8KK3ZvaWQK K2hlYXBfaW5zZXJ0X3YyKFRhYmxlSW5zZXJ0U3RhdGUgKnN0YXRlLCBUdXBsZVRhYmxlU2xvdCAq c2xvdCkKK3sKKwlib29sCQlzaG91bGRGcmVlID0gdHJ1ZTsKKwlIZWFwVHVwbGUJdHVwbGUgPSBF eGVjRmV0Y2hTbG90SGVhcFR1cGxlKHNsb3QsIHRydWUsICZzaG91bGRGcmVlKTsKKworCUFzc2Vy dChzdGF0ZSk7CisKKwkvKiBVcGRhdGUgdHVwbGUgd2l0aCB0YWJsZSBvaWQgKi8KKwlzbG90LT50 dHNfdGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHN0YXRlLT5yZWwpOworCXR1cGxlLT50X3Rh YmxlT2lkID0gc2xvdC0+dHRzX3RhYmxlT2lkOworCisJLyogUGVyZm9ybSBpbnNlcnRpb24sIGFu ZCBjb3B5IHRoZSByZXN1bHRpbmcgSXRlbVBvaW50ZXIgKi8KKwloZWFwX2luc2VydChzdGF0ZS0+ cmVsLCB0dXBsZSwgc3RhdGUtPmNpZCwgc3RhdGUtPm9wdGlvbnMsIHN0YXRlLT5iaXN0YXRlKTsK KwlJdGVtUG9pbnRlckNvcHkoJnR1cGxlLT50X3NlbGYsICZzbG90LT50dHNfdGlkKTsKKworCWlm IChzaG91bGRGcmVlKQorCQlwZnJlZSh0dXBsZSk7Cit9CisKKy8qCisgKiBoZWFwX211bHRpX2lu c2VydF92MiAtIGluc2VydCBtdWx0aXBsZSB0dXBsZXMgaW50byBhIGhlYXAKKyAqCisgKiBDb21w dXRlIHNpemUgb2YgdHVwbGUuIFNlZSBpZiB0aGUgYnVmZmVyZWQgc2xvdHMgY2FuIGhvbGQgdGhl IHR1cGxlLiBJZiB5ZXMsCisgKiBzdG9yZSBpdCBpbiB0aGUgYnVmZmVycywgb3RoZXJ3aXNlIGZs dXNoIGkuZS4gaW5zZXJ0IHRoZSBzbyBmYXIgYnVmZmVyZWQKKyAqIHR1cGxlcyBpbnRvIGhlYXAu CisgKgorICogRmx1c2ggY2FuIGhhcHBlbjoKKyAqICAxKSBlaXRoZXIgaWYgYWxsIHRoZSBidWZm ZXJlZCBzbG90cyBhcmUgZmlsbGVkIHVwCisgKiAgMikgb3IgaWYgdG90YWwgdHVwbGUgc2l6ZSBv ZiB0aGUgY3VycmVudGx5IGJ1ZmZlcmVkIHNsb3RzIGFyZSA+PSBtYXhfc2l6ZQorICovCit2b2lk CitoZWFwX211bHRpX2luc2VydF92MihUYWJsZUluc2VydFN0YXRlICpzdGF0ZSwgVHVwbGVUYWJs ZVNsb3QgKnNsb3QpCit7CisJVHVwbGVUYWJsZVNsb3QgICpiYXRjaHNsb3Q7CisJSGVhcE11bHRp SW5zZXJ0U3RhdGUgKm1pc3RhdGU7CisJU2l6ZSBzejsKKworCUFzc2VydChzdGF0ZSk7CisKKwlt aXN0YXRlID0gKEhlYXBNdWx0aUluc2VydFN0YXRlICopc3RhdGUtPm1pc3RhdGU7CisKKwlBc3Nl cnQobWlzdGF0ZSAmJiBzdGF0ZS0+bWlfc2xvdHMpOworCisJLyogUmVzZXQgZmx1c2ggc3RhdGUg aWYgcHJldmlvdXNseSBzZXQuICovCisJaWYgKHN0YXRlLT5mbHVzaGVkKQorCXsKKwkJc3RhdGUt Pm1pX2N1cl9zbG90cyA9IDA7CisJCXN0YXRlLT5mbHVzaGVkID0gZmFsc2U7CisJfQorCisJQXNz ZXJ0KHN0YXRlLT5taV9jdXJfc2xvdHMgPCBtaXN0YXRlLT5tYXhfc2xvdHMpOworCisJaWYgKHN0 YXRlLT5taV9zbG90c1tzdGF0ZS0+bWlfY3VyX3Nsb3RzXSA9PSBOVUxMKQorCQlzdGF0ZS0+bWlf c2xvdHNbc3RhdGUtPm1pX2N1cl9zbG90c10gPQorCQkJCQkJCQkJdGFibGVfc2xvdF9jcmVhdGUo c3RhdGUtPnJlbCwgTlVMTCk7CisKKwliYXRjaHNsb3QgPSBzdGF0ZS0+bWlfc2xvdHNbc3RhdGUt Pm1pX2N1cl9zbG90c107CisKKwlFeGVjQ2xlYXJUdXBsZShiYXRjaHNsb3QpOworCUV4ZWNDb3B5 U2xvdChiYXRjaHNsb3QsIHNsb3QpOworCisJLyoKKwkgKiBDYWxjdWxhdGUgdHVwbGUgc2l6ZSBh ZnRlciBvcmlnaW5hbCBzbG90IGlzIGNvcGllZCwgYmVjYXVzZSB0aGUgY29waWVkCisJICogc2xv dCB0eXBlIGFuZCB0dXBsZSBzaXplIG1heSBjaGFuZ2UuCisJICovCisJc3ogPSBHZXRUdXBsZVNp emUoYmF0Y2hzbG90LCBtaXN0YXRlLT5tYXhfc2l6ZSk7CisKKwlBc3NlcnQoc3ogPiAwKTsKKwor CXN0YXRlLT5taV9jdXJfc2xvdHMrKzsKKwltaXN0YXRlLT5jdXJfc2l6ZSArPSBzejsKKworCWlm IChzdGF0ZS0+bWlfY3VyX3Nsb3RzID49IG1pc3RhdGUtPm1heF9zbG90cyB8fAorCQltaXN0YXRl LT5jdXJfc2l6ZSA+PSBtaXN0YXRlLT5tYXhfc2l6ZSkKKwkJaGVhcF9tdWx0aV9pbnNlcnRfZmx1 c2goc3RhdGUpOworfQorCisvKgorICogaGVhcF9tdWx0aV9pbnNlcnRfZmx1c2ggLSBmbHVzaCBi dWZmZXJlZCB0dXBsZXMsIGlmIGFueSwgaW50byBhIGhlYXAKKyAqCisgKiBGbHVzaCB0aGUgYnVm ZmVyZWQgdHVwbGVzLCBpbmRpY2F0ZSBjYWxsZXIgdGhhdCBmbHVzaGluZyBoYXBwZW5lZCBhbmQg cmVzZXQKKyAqIHBhcmFtZXRlcnMuCisgKi8KK3ZvaWQKK2hlYXBfbXVsdGlfaW5zZXJ0X2ZsdXNo KFRhYmxlSW5zZXJ0U3RhdGUgKnN0YXRlKQoreworCUhlYXBNdWx0aUluc2VydFN0YXRlICptaXN0 YXRlOworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKworCUFzc2VydChzdGF0ZSk7CisKKwlt aXN0YXRlID0gKEhlYXBNdWx0aUluc2VydFN0YXRlICopc3RhdGUtPm1pc3RhdGU7CisKKwlBc3Nl cnQobWlzdGF0ZSAmJiBzdGF0ZS0+bWlfc2xvdHMgJiYgc3RhdGUtPm1pX2N1cl9zbG90cyA+PSAw ICYmCisJCSAgIG1pc3RhdGUtPmNvbnRleHQpOworCisJaWYgKHN0YXRlLT5mbHVzaGVkKQorCXsK KwkJc3RhdGUtPm1pX2N1cl9zbG90cyA9IDA7CisJCXN0YXRlLT5mbHVzaGVkID0gZmFsc2U7CisJ CXJldHVybjsKKwl9CisKKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKG1pc3Rh dGUtPmNvbnRleHQpOworCWhlYXBfbXVsdGlfaW5zZXJ0KHN0YXRlLT5yZWwsIHN0YXRlLT5taV9z bG90cywgc3RhdGUtPm1pX2N1cl9zbG90cywKKwkJCQkJICBzdGF0ZS0+Y2lkLCBzdGF0ZS0+b3B0 aW9ucywgc3RhdGUtPmJpc3RhdGUpOworCU1lbW9yeUNvbnRleHRSZXNldChtaXN0YXRlLT5jb250 ZXh0KTsKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisKKwlzdGF0ZS0+Zmx1 c2hlZCA9IHRydWU7CisJbWlzdGF0ZS0+Y3VyX3NpemUgPSAwOworfQorCisvKgorICogaGVhcF9p bnNlcnRfZW5kIC0gY2xlYW4gdXAgVGFibGVJbnNlcnRTdGF0ZQorICoKKyAqIEZvciBtdWx0aSBp bnNlcnRzLCBlbnN1cmUgdG8gZmx1c2ggYWxsIHRoZSByZW1haW5pbmcgYnVmZmVycyB3aXRoCisg KiBoZWFwX211bHRpX2luc2VydF9mbHVzaCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgor ICoKKyAqIEluIHRoaXMgZnVuY3Rpb24sIGJ1ZmZlcmVkIHNsb3RzIGFyZSBkcm9wcGVkLCBzaG9y dC1saXZlZCBtZW1vcnkgY29udGV4dCBpcworICogZGVsZXRlZCwgbWlzdGF0ZSBhbmQgVGFibGVJ bnNlcnRTdGF0ZSBhcmUgZnJlZWQgdXAuCisgKi8KK3ZvaWQKK2hlYXBfaW5zZXJ0X2VuZChUYWJs ZUluc2VydFN0YXRlICpzdGF0ZSkKK3sKKwlIZWFwTXVsdGlJbnNlcnRTdGF0ZSAqbWlzdGF0ZTsK KwlpbnQgaTsKKworCUFzc2VydChzdGF0ZSk7CisKKwltaXN0YXRlID0gKEhlYXBNdWx0aUluc2Vy dFN0YXRlICopc3RhdGUtPm1pc3RhdGU7CisKKwlpZiAoIW1pc3RhdGUpCisJeworCQlwZnJlZShz dGF0ZSk7CisJCXJldHVybjsKKwl9CisKKwlBc3NlcnQoc3RhdGUtPm1pX3Nsb3RzICYmICBtaXN0 YXRlLT5jb250ZXh0KTsKKworCS8qIEVuc3VyZSB0aGF0IHRoZSBidWZmZXJzIGhhdmUgYmVlbiBm bHVzaGVkIGJlZm9yZS4gKi8KKwlBc3NlcnQoc3RhdGUtPm1pX2N1cl9zbG90cyA9PSAwIHx8IHN0 YXRlLT5mbHVzaGVkKTsKKworCWZvciAoaSA9IDA7IGkgPCBtaXN0YXRlLT5tYXhfc2xvdHMgJiYg c3RhdGUtPm1pX3Nsb3RzW2ldICE9IE5VTEw7IGkrKykKKwkJRXhlY0Ryb3BTaW5nbGVUdXBsZVRh YmxlU2xvdChzdGF0ZS0+bWlfc2xvdHNbaV0pOworCisJTWVtb3J5Q29udGV4dERlbGV0ZShtaXN0 YXRlLT5jb250ZXh0KTsKKwlwZnJlZShtaXN0YXRlKTsKKwlwZnJlZShzdGF0ZS0+bWlfc2xvdHMp OworCXBmcmVlKHN0YXRlKTsKK30KKwogLyoKICAqCXNpbXBsZV9oZWFwX2luc2VydCAtIGluc2Vy dCBhIHR1cGxlCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFt X2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5k ZXggYmQ1ZmFmMGMxZi4uNjU1ZGU4ZTZiNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFw YW1faGFuZGxlci5jCkBAIC0yNTU4LDYgKzI1NTgsMTEgQEAgc3RhdGljIGNvbnN0IFRhYmxlQW1S b3V0aW5lIGhlYXBhbV9tZXRob2RzID0gewogCS50dXBsZV9pbnNlcnRfc3BlY3VsYXRpdmUgPSBo ZWFwYW1fdHVwbGVfaW5zZXJ0X3NwZWN1bGF0aXZlLAogCS50dXBsZV9jb21wbGV0ZV9zcGVjdWxh dGl2ZSA9IGhlYXBhbV90dXBsZV9jb21wbGV0ZV9zcGVjdWxhdGl2ZSwKIAkubXVsdGlfaW5zZXJ0 ID0gaGVhcF9tdWx0aV9pbnNlcnQsCisJLnR1cGxlX2luc2VydF9iZWdpbiA9IGhlYXBfaW5zZXJ0 X2JlZ2luLAorCS50dXBsZV9pbnNlcnRfdjIgPSBoZWFwX2luc2VydF92MiwKKwkubXVsdGlfaW5z ZXJ0X3YyID0gaGVhcF9tdWx0aV9pbnNlcnRfdjIsCisJLm11bHRpX2luc2VydF9mbHVzaCA9IGhl YXBfbXVsdGlfaW5zZXJ0X2ZsdXNoLAorCS50dXBsZV9pbnNlcnRfZW5kID0gaGVhcF9pbnNlcnRf ZW5kLAogCS50dXBsZV9kZWxldGUgPSBoZWFwYW1fdHVwbGVfZGVsZXRlLAogCS50dXBsZV91cGRh dGUgPSBoZWFwYW1fdHVwbGVfdXBkYXRlLAogCS50dXBsZV9sb2NrID0gaGVhcGFtX3R1cGxlX2xv Y2ssCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYwppbmRleCAzMjVlY2RjMTIyLi45 NWYxZjliNmEwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFw aS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMKQEAgLTc4LDYg Kzc4LDEzIEBAIEdldFRhYmxlQW1Sb3V0aW5lKE9pZCBhbWhhbmRsZXIpCiAJQXNzZXJ0KHJvdXRp bmUtPnR1cGxlX2NvbXBsZXRlX3NwZWN1bGF0aXZlICE9IE5VTEwpOwogCiAJQXNzZXJ0KHJvdXRp bmUtPm11bHRpX2luc2VydCAhPSBOVUxMKTsKKworCUFzc2VydChyb3V0aW5lLT50dXBsZV9pbnNl cnRfYmVnaW4gIT0gTlVMTCk7CisJQXNzZXJ0KHJvdXRpbmUtPnR1cGxlX2luc2VydF92MiAhPSBO VUxMKTsKKwlBc3NlcnQocm91dGluZS0+bXVsdGlfaW5zZXJ0X3YyICE9IE5VTEwpOworCUFzc2Vy dChyb3V0aW5lLT5tdWx0aV9pbnNlcnRfZmx1c2ggIT0gTlVMTCk7CisJQXNzZXJ0KHJvdXRpbmUt PnR1cGxlX2luc2VydF9lbmQgIT0gTlVMTCk7CisKIAlBc3NlcnQocm91dGluZS0+dHVwbGVfZGVs ZXRlICE9IE5VTEwpOwogCUFzc2VydChyb3V0aW5lLT50dXBsZV91cGRhdGUgIT0gTlVMTCk7CiAJ QXNzZXJ0KHJvdXRpbmUtPnR1cGxlX2xvY2sgIT0gTlVMTCk7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjVHVwbGVzLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjVHVw bGVzLmMKaW5kZXggNzNjMzVkZjljOS4uNzlhZTIyNDU1YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY1R1cGxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNU dXBsZXMuYwpAQCAtMTU5LDcgKzE1OSwxMSBAQCB0dHNfdmlydHVhbF9tYXRlcmlhbGl6ZShUdXBs ZVRhYmxlU2xvdCAqc2xvdCkKIAlpZiAoVFRTX1NIT1VMREZSRUUoc2xvdCkpCiAJCXJldHVybjsK IAotCS8qIGNvbXB1dGUgc2l6ZSBvZiBtZW1vcnkgcmVxdWlyZWQgKi8KKwkvKgorCSAqIENvbXB1 dGUgc2l6ZSBvZiBtZW1vcnkgcmVxdWlyZWQuIFRoaXMgc2l6ZSBjYWxjdWxhdGlvbiBjb2RlIGlz IGFsc28gdXNlZAorCSAqIGluIEdldFR1cGxlU2l6ZSgpLCBoZW5jZSBlbnN1cmUgdG8gaGF2ZSB0 aGUgc2FtZSBjaGFuZ2VzIG9yIGZpeGVzIGhlcmUKKwkgKiBhbmQgYWxzbyB0aGVyZS4KKwkgKi8K IAlmb3IgKGludCBuYXR0ID0gMDsgbmF0dCA8IGRlc2MtPm5hdHRzOyBuYXR0KyspCiAJewogCQlG b3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NBdHRyKGRlc2MsIG5hdHQpOwpAQCAtMTIz OSw2ICsxMjQzLDgzIEBAIEV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3QoVHVwbGVUYWJsZVNs b3QgKnNsb3QpCiAJcGZyZWUoc2xvdCk7CiB9CiAKKy8qCisgKiBHZXRUdXBsZVNpemUgLSBDb21w dXRlIHRoZSB0dXBsZSBzaXplIGdpdmVuIGEgdGFibGUgc2xvdC4KKyAqCisgKiBGb3IgaGVhcCB0 dXBsZSwgYnVmZmVyIHR1cGxlIGFuZCBtaW5pbWFsIHR1cGxlIHNsb3QgdHlwZXMgcmV0dXJuIHRo ZSBhY3R1YWwKKyAqIHR1cGxlIHNpemUgdGhhdCBleGlzdHMuIEZvciB2aXJ0dWFsIHR1cGxlLCB0 aGUgc2l6ZSBpcyBjYWxjdWxhdGVkIGFzIHRoZQorICogc2xvdCBkb2VzIG5vdCBoYXZlIHRoZSB0 dXBsZSBzaXplLiBJZiB0aGUgY29tcHV0ZWQgc2l6ZSBleGNlZWRzIHRoZSBnaXZlbgorICogbWF4 c2l6ZSBmb3IgdGhlIHZpcnR1YWwgdHVwbGUsIHRoaXMgZnVuY3Rpb24gZXhpdHMsIG5vdCBpbnZl c3RpbmcgdGltZSBpbgorICogZnVydGhlciB1bm5lY2Vzc2FyeSBjYWxjdWxhdGlvbi4KKyAqCisg KiBJbXBvcnRhbnQgTm90ZXM6CisgKiAxKSBTaXplIGNhbGN1bGF0aW9uIGNvZGUgZm9yIHZpcnR1 YWwgc2xvdHMgaXMgYmVpbmcgdXNlZCBmcm9tCisgKiAJICB0dHNfdmlydHVhbF9tYXRlcmlhbGl6 ZSgpLCBoZW5jZSBlbnN1cmUgdG8gaGF2ZSB0aGUgc2FtZSBjaGFuZ2VzIG9yIGZpeGVzCisgKiAJ ICBoZXJlIGFuZCBhbHNvIHRoZXJlLgorICogMikgQ3VycmVudGx5LCBHZXRUdXBsZVNpemUoKSBo YW5kbGVzIHRoZSBleGlzdGluZyBoZWFwLCBidWZmZXIsIG1pbmltYWwgYW5kCisgKiAJICB2aXJ0 dWFsIHNsb3RzLiBFbnN1cmUgdG8gYWRkIHJlbGF0ZWQgY29kZSBpbiBjYXNlIGFueSBuZXcgc2xv dCB0eXBlIGlzCisgKiAgICBpbnRyb2R1Y2VkLgorICovCitpbmxpbmUgU2l6ZQorR2V0VHVwbGVT aXplKFR1cGxlVGFibGVTbG90ICpzbG90LCBTaXplIG1heHNpemUpCit7CisJU2l6ZSBzeiA9IDA7 CisJSGVhcFR1cGxlIHR1cGxlID0gTlVMTDsKKworCWlmIChUVFNfSVNfSEVBUFRVUExFKHNsb3Qp KQorCQl0dXBsZSA9ICgoSGVhcFR1cGxlVGFibGVTbG90ICopIHNsb3QpLT50dXBsZTsKKwllbHNl IGlmKFRUU19JU19CVUZGRVJUVVBMRShzbG90KSkKKwkJdHVwbGUgPSAoKEJ1ZmZlckhlYXBUdXBs ZVRhYmxlU2xvdCAqKSBzbG90KS0+YmFzZS50dXBsZTsKKwllbHNlIGlmKFRUU19JU19NSU5JTUFM VFVQTEUoc2xvdCkpCisJCXR1cGxlID0gKChNaW5pbWFsVHVwbGVUYWJsZVNsb3QgKikgc2xvdCkt PnR1cGxlOworCWVsc2UgaWYoVFRTX0lTX1ZJUlRVQUwoc2xvdCkpCisJeworCQkvKgorCQkgKiBT aXplIGNhbGN1bGF0aW9uIGNvZGUgYmVpbmcgdXNlZCBoZXJlIGlzIGZyb20KKwkJICogdHRzX3Zp cnR1YWxfbWF0ZXJpYWxpemUoKSwgZW5zdXJlIHRvIGhhdmUgdGhlIHNhbWUgY2hhbmdlcyBvciBm aXhlcworCQkgKiBoZXJlIGFuZCBhbHNvIHRoZXJlLgorCQkgKi8KKwkJVHVwbGVEZXNjCWRlc2Mg PSBzbG90LT50dHNfdHVwbGVEZXNjcmlwdG9yOworCisJCWZvciAoaW50IG5hdHQgPSAwOyBuYXR0 IDwgZGVzYy0+bmF0dHM7IG5hdHQrKykKKwkJeworCQkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ID0g VHVwbGVEZXNjQXR0cihkZXNjLCBuYXR0KTsKKwkJCURhdHVtCQl2YWw7CisKKwkJCWlmIChhdHQt PmF0dGJ5dmFsKQorCQkJCXN6ICs9IGF0dC0+YXR0bGVuOworCisJCQlpZiAoc2xvdC0+dHRzX2lz bnVsbFtuYXR0XSkKKwkJCQljb250aW51ZTsKKworCQkJdmFsID0gc2xvdC0+dHRzX3ZhbHVlc1tu YXR0XTsKKworCQkJaWYgKGF0dC0+YXR0bGVuID09IC0xICYmCisJCQkJVkFSQVRUX0lTX0VYVEVS TkFMX0VYUEFOREVEKERhdHVtR2V0UG9pbnRlcih2YWwpKSkKKwkJCXsKKwkJCQlzeiA9IGF0dF9h bGlnbl9ub21pbmFsKHN6LCBhdHQtPmF0dGFsaWduKTsKKwkJCQlzeiArPSBFT0hfZ2V0X2ZsYXRf c2l6ZShEYXR1bUdldEVPSFAodmFsKSk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJc3ogPSBh dHRfYWxpZ25fbm9taW5hbChzeiwgYXR0LT5hdHRhbGlnbik7CisJCQkJc3ogPSBhdHRfYWRkbGVu Z3RoX2RhdHVtKHN6LCBhdHQtPmF0dGxlbiwgdmFsKTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIFdl IGFyZSBub3QgaW50ZXJlc3RlZCBpbiBwcm9jZWVkaW5nIGZ1cnRoZXIgaWYgdGhlIGNvbXB1dGVk IHNpemUKKwkJCSAqIGNyb3NzZXMgbWF4c2l6ZSBsaW1pdCB0aGF0IHdlIGFyZSBsb29raW5nIGZv ci4KKwkJCSAqLworCQkJaWYgKG1heHNpemUgIT0gMCAmJiBzeiA+PSBtYXhzaXplKQorCQkJCWJy ZWFrOworCQl9CisJfQorCisJaWYgKHR1cGxlICE9IE5VTEwgJiYgIVRUU19JU19WSVJUVUFMKHNs b3QpKQorCQlzeiA9IHR1cGxlLT50X2xlbjsKKworCXJldHVybiBzejsKK30KIAogLyogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogICoJCQkJICB0dXBsZSB0YWJsZSBzbG90IGFjY2Vzc29yIGZ1bmN0aW9ucwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBh bS5oCmluZGV4IGJjMDkzNmJjMmQuLmRhNzRhYjA3MmQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKQEAgLTM2 LDExICszNiwyNiBAQAogI2RlZmluZSBIRUFQX0lOU0VSVF9OT19MT0dJQ0FMCVRBQkxFX0lOU0VS VF9OT19MT0dJQ0FMCiAjZGVmaW5lIEhFQVBfSU5TRVJUX1NQRUNVTEFUSVZFIDB4MDAxMAogCi10 eXBlZGVmIHN0cnVjdCBCdWxrSW5zZXJ0U3RhdGVEYXRhICpCdWxrSW5zZXJ0U3RhdGU7CiBzdHJ1 Y3QgVHVwbGVUYWJsZVNsb3Q7CiAKICNkZWZpbmUgTWF4TG9ja1R1cGxlTW9kZQlMb2NrVHVwbGVF eGNsdXNpdmUKIAorLyoKKyAqIE5vIG1vcmUgdGhhbiB0aGlzIG1hbnkgdHVwbGVzIHBlciBzaW5n bGUgbXVsdGkgaW5zZXJ0IGJhdGNoCisgKgorICogQ2F1dGlvbjogRG9uJ3QgbWFrZSB0aGlzIHRv byBiaWcsIGFzIHdlIGNvdWxkIGVuZCB1cCB3aXRoIHRoaXMgbWFueSB0dXBsZXMKKyAqIHN0b3Jl ZCBpbiBtdWx0aSBpbnNlcnQgYnVmZmVyLiBJbmNyZWFzaW5nIHRoaXMgY2FuIGNhdXNlIHF1YWRy YXRpYyBncm93dGggaW4KKyAqIG1lbW9yeSByZXF1aXJlbWVudHMgZHVyaW5nIGNvcGllcyBpbnRv IHBhcnRpdGlvbmVkIHRhYmxlcyB3aXRoIGEgbGFyZ2UKKyAqIG51bWJlciBvZiBwYXJ0aXRpb25z LgorICovCisjZGVmaW5lIE1BWF9CVUZGRVJFRF9UVVBMRVMJCTEwMDAKKworLyoKKyAqIEZsdXNo IG11bHRpIGluc2VydCBidWZmZXJzIGlmIHRoZXJlIGFyZSA+PSB0aGlzIG1hbnkgYnl0ZXMsIGFz IGNvdW50ZWQgYnkKKyAqIHRoZSBzaXplIG9mIHRoZSB0dXBsZXMgYnVmZmVyZWQuCisgKi8KKyNk ZWZpbmUgTUFYX0JVRkZFUkVEX0JZVEVTCQk2NTUzNQorCiAvKgogICogRGVzY3JpcHRvciBmb3Ig aGVhcCB0YWJsZSBzY2Fucy4KICAqLwpAQCAtOTMsNiArMTA4LDI1IEBAIHR5cGVkZWYgZW51bQog CUhFQVBUVVBMRV9ERUxFVEVfSU5fUFJPR1JFU1MJLyogZGVsZXRpbmcgeGFjdCBpcyBzdGlsbCBp biBwcm9ncmVzcyAqLwogfSBIVFNWX1Jlc3VsdDsKIAorLyogSG9sZHMgbXVsdGkgaW5zZXJ0IHN0 YXRlIGZvciBoZWFwIGFjY2VzcyBtZXRob2QuKi8KK3R5cGVkZWYgc3RydWN0IEhlYXBNdWx0aUlu c2VydFN0YXRlCit7CisJLyogU3dpdGNoIHRvIHNob3J0LWxpdmVkIG1lbW9yeSBjb250ZXh0IGJl Zm9yZSBmbHVzaGluZy4gKi8KKwlNZW1vcnlDb250ZXh0ICAgICAgIGNvbnRleHQ7CisJLyogTWF4 aW11bSBudW1iZXIgb2Ygc2xvdHMgdGhhdCBjYW4gYmUgYnVmZmVyZWQuICovCisJaW50MzIgICAg ICAgICAgICAgICBtYXhfc2xvdHM7CisJLyoKKwkgKiBNYXhpbXVtIHNpemUgKGluIGJ5dGVzKSBv ZiBhbGwgdGhlIHR1cGxlcyB0aGF0IGEgc2luZ2xlIGJhdGNoIG9mCisJICogYnVmZmVyZWQgc2xv dHMgY2FuIGhvbGQuCisJICovCisJaW50NjQgICAgICAgICAgICAgICBtYXhfc2l6ZTsKKwkvKgor CSAqIFRvdGFsIHR1cGxlIHNpemUgKGluIGJ5dGVzKSBvZiB0aGUgc2xvdHMgdGhhdCBhcmUgY3Vy cmVudGx5IGJ1ZmZlcmVkLgorCSAqIEZsdXNoIHRoZSBidWZmZXJlZCBzbG90cyB3aGVuIGN1cl9z aXplID49IG1heF9zaXplLgorCSAqLworCWludDY0ICAgICAgICAgICAgICAgY3VyX3NpemU7Cit9 IEhlYXBNdWx0aUluc2VydFN0YXRlOworCiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKgkJZnVuY3Rp b24gcHJvdG90eXBlcyBmb3IgaGVhcCBhY2Nlc3MgbWV0aG9kCiAgKgpAQCAtMTM0LDE1ICsxNjgs MjAgQEAgZXh0ZXJuIGJvb2wgaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcihJdGVtUG9pbnRlciB0aWQs IFJlbGF0aW9uIHJlbGF0aW9uLAogCiBleHRlcm4gdm9pZCBoZWFwX2dldF9sYXRlc3RfdGlkKFRh YmxlU2NhbkRlc2Mgc2NhbiwgSXRlbVBvaW50ZXIgdGlkKTsKIAotZXh0ZXJuIEJ1bGtJbnNlcnRT dGF0ZSBHZXRCdWxrSW5zZXJ0U3RhdGUodm9pZCk7Ci1leHRlcm4gdm9pZCBGcmVlQnVsa0luc2Vy dFN0YXRlKEJ1bGtJbnNlcnRTdGF0ZSk7Ci1leHRlcm4gdm9pZCBSZWxlYXNlQnVsa0luc2VydFN0 YXRlUGluKEJ1bGtJbnNlcnRTdGF0ZSBiaXN0YXRlKTsKLQogZXh0ZXJuIHZvaWQgaGVhcF9pbnNl cnQoUmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSB0dXAsIENvbW1hbmRJZCBjaWQsCiAJCQkJ CQlpbnQgb3B0aW9ucywgQnVsa0luc2VydFN0YXRlIGJpc3RhdGUpOwogZXh0ZXJuIHZvaWQgaGVh cF9tdWx0aV9pbnNlcnQoUmVsYXRpb24gcmVsYXRpb24sIHN0cnVjdCBUdXBsZVRhYmxlU2xvdCAq KnNsb3RzLAogCQkJCQkJCSAgaW50IG50dXBsZXMsIENvbW1hbmRJZCBjaWQsIGludCBvcHRpb25z LAogCQkJCQkJCSAgQnVsa0luc2VydFN0YXRlIGJpc3RhdGUpOworCitleHRlcm4gVGFibGVJbnNl cnRTdGF0ZSogaGVhcF9pbnNlcnRfYmVnaW4oUmVsYXRpb24gcmVsLCBDb21tYW5kSWQgY2lkLAor CQkJCQkJCQkJCSAgIGludCBvcHRpb25zLCBib29sIGlzX211bHRpKTsKK2V4dGVybiB2b2lkIGhl YXBfaW5zZXJ0X3YyKFRhYmxlSW5zZXJ0U3RhdGUgKnN0YXRlLCBUdXBsZVRhYmxlU2xvdCAqc2xv dCk7CitleHRlcm4gdm9pZCBoZWFwX211bHRpX2luc2VydF92MihUYWJsZUluc2VydFN0YXRlICpz dGF0ZSwKKwkJCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90KTsKK2V4dGVybiB2b2lkIGhlYXBf bXVsdGlfaW5zZXJ0X2ZsdXNoKFRhYmxlSW5zZXJ0U3RhdGUgKnN0YXRlKTsKK2V4dGVybiB2b2lk IGhlYXBfaW5zZXJ0X2VuZChUYWJsZUluc2VydFN0YXRlICpzdGF0ZSk7CisKIGV4dGVybiBUTV9S ZXN1bHQgaGVhcF9kZWxldGUoUmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Qb2ludGVyIHRpZCwKIAkJ CQkJCQkgQ29tbWFuZElkIGNpZCwgU25hcHNob3QgY3Jvc3NjaGVjaywgYm9vbCB3YWl0LAogCQkJ CQkJCSBzdHJ1Y3QgVE1fRmFpbHVyZURhdGEgKnRtZmQsIGJvb2wgY2hhbmdpbmdQYXJ0KTsKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggYi9zcmMvaW5jbHVkZS9hY2Nl c3MvdGFibGVhbS5oCmluZGV4IDQxNGI2YjRkNTcuLjJhMTQ3MGE3YjYgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxl YW0uaApAQCAtMjI5LDYgKzIyOSwzMiBAQCB0eXBlZGVmIHN0cnVjdCBUTV9JbmRleERlbGV0ZU9w CiAJVE1fSW5kZXhTdGF0dXMgKnN0YXR1czsKIH0gVE1fSW5kZXhEZWxldGVPcDsKIAorLyogSG9s ZHMgdGFibGUgaW5zZXJ0IHN0YXRlLiAqLwordHlwZWRlZiBzdHJ1Y3QgVGFibGVJbnNlcnRTdGF0 ZQoreworCVJlbGF0aW9uCXJlbDsKKwkvKiBCdWxrIGluc2VydCBzdGF0ZSBpZiByZXF1ZXN0ZWQs IG90aGVyd2lzZSBOVUxMLiAqLworCXN0cnVjdCBCdWxrSW5zZXJ0U3RhdGVEYXRhCSpiaXN0YXRl OworCUNvbW1hbmRJZAljaWQ7CisJaW50CW9wdGlvbnM7CisJLyogQmVsb3cgbWVtYmVycyBhcmUg b25seSB1c2VkIGZvciBtdWx0aSBpbnNlcnRzLiAqLworCS8qIEFycmF5IG9mIGJ1ZmZlcmVkIHNs b3RzLiAqLworCVR1cGxlVGFibGVTbG90CSoqbWlfc2xvdHM7CisJLyogTnVtYmVyIG9mIHNsb3Rz IHRoYXQgYXJlIGN1cnJlbnRseSBidWZmZXJlZC4gKi8KKwlpbnQzMgltaV9jdXJfc2xvdHM7CisJ LyoKKwkgKiBBY2Nlc3MgbWV0aG9kIHNwZWNpZmljIGluZm9ybWF0aW9uIHN1Y2ggYXMgcGFyYW1l dGVycyB0aGF0IGFyZSBuZWVkZWQKKwkgKiBmb3IgYnVmZmVyaW5nIGFuZCBmbHVzaGluZyBkZWNp c2lvbnMgY2FuIGdvIGhlcmUuCisJICovCisJdm9pZAkqbWlzdGF0ZTsKKwkvKgorCSAqIFRoaXMg cGFyYW1ldGVyIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgYnVmZmVyZWQgc2xvdHMgaGF2 ZSBiZWVuCisJICogZmx1c2hlZCB0byBhIHRhYmxlLiBVc2VkIGJ5IGNhbGxlcnMgb2YgbXVsdGkg aW5zZXJ0IEFQSSBmb3IgaW5zZXJ0aW5nCisJICogaW50byBpbmRleGVzIG9yIGV4ZWN1dGluZyBh ZnRlciByb3cgdHJpZ2dlcnMsIGlmIGFueS4KKwkgKi8KKwlib29sCWZsdXNoZWQ7Cit9VGFibGVJ bnNlcnRTdGF0ZTsKKwogLyogIm9wdGlvbnMiIGZsYWcgYml0cyBmb3IgdGFibGVfdHVwbGVfaW5z ZXJ0ICovCiAvKiBUQUJMRV9JTlNFUlRfU0tJUF9XQUwgd2FzIDB4MDAwMTsgUmVsYXRpb25OZWVk c1dBTCgpIG5vdyBnb3Zlcm5zICovCiAjZGVmaW5lIFRBQkxFX0lOU0VSVF9TS0lQX0ZTTQkJMHgw MDAyCkBAIC01MDQsNiArNTMwLDE3IEBAIHR5cGVkZWYgc3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJ dm9pZAkJKCptdWx0aV9pbnNlcnQpIChSZWxhdGlvbiByZWwsIFR1cGxlVGFibGVTbG90ICoqc2xv dHMsIGludCBuc2xvdHMsCiAJCQkJCQkJCSBDb21tYW5kSWQgY2lkLCBpbnQgb3B0aW9ucywgc3Ry dWN0IEJ1bGtJbnNlcnRTdGF0ZURhdGEgKmJpc3RhdGUpOwogCisJVGFibGVJbnNlcnRTdGF0ZSog KCp0dXBsZV9pbnNlcnRfYmVnaW4pIChSZWxhdGlvbiByZWwsIENvbW1hbmRJZCBjaWQsCisJCQkJ CQkJCQkJCSBpbnQgb3B0aW9ucywgYm9vbCBpc19tdWx0aSk7CisKKwl2b2lkICgqdHVwbGVfaW5z ZXJ0X3YyKSAoVGFibGVJbnNlcnRTdGF0ZSAqc3RhdGUsIFR1cGxlVGFibGVTbG90ICpzbG90KTsK KworCXZvaWQgKCptdWx0aV9pbnNlcnRfdjIpIChUYWJsZUluc2VydFN0YXRlICpzdGF0ZSwgVHVw bGVUYWJsZVNsb3QgKnNsb3QpOworCisJdm9pZCAoKm11bHRpX2luc2VydF9mbHVzaCkgKFRhYmxl SW5zZXJ0U3RhdGUgKnN0YXRlKTsKKworCXZvaWQgKCp0dXBsZV9pbnNlcnRfZW5kKSAoVGFibGVJ bnNlcnRTdGF0ZSAqc3RhdGUpOworCiAJLyogc2VlIHRhYmxlX3R1cGxlX2RlbGV0ZSgpIGZvciBy ZWZlcmVuY2UgYWJvdXQgcGFyYW1ldGVycyAqLwogCVRNX1Jlc3VsdAkoKnR1cGxlX2RlbGV0ZSkg KFJlbGF0aW9uIHJlbCwKIAkJCQkJCQkJIEl0ZW1Qb2ludGVyIHRpZCwKQEAgLTg1MSw2ICs4ODgs OCBAQCB0eXBlZGVmIHN0cnVjdCBUYWJsZUFtUm91dGluZQogfSBUYWJsZUFtUm91dGluZTsKIAog Cit0eXBlZGVmIHN0cnVjdCBCdWxrSW5zZXJ0U3RhdGVEYXRhICpCdWxrSW5zZXJ0U3RhdGU7CisK IC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFNsb3QgZnVuY3Rpb25zLgogICogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQpAQCAtODY5LDYgKzkwOCwxMCBAQCBleHRlcm4gY29uc3QgVHVwbGVUYWJsZVNs b3RPcHMgKnRhYmxlX3Nsb3RfY2FsbGJhY2tzKFJlbGF0aW9uIHJlbCk7CiAgKi8KIGV4dGVybiBU dXBsZVRhYmxlU2xvdCAqdGFibGVfc2xvdF9jcmVhdGUoUmVsYXRpb24gcmVsLCBMaXN0ICoqcmVn bGlzdCk7CiAKKy8qIEJ1bGsgaW5zZXJ0IHN0YXRlIGZ1bmN0aW9ucy4gKi8KK2V4dGVybiBCdWxr SW5zZXJ0U3RhdGUgR2V0QnVsa0luc2VydFN0YXRlKHZvaWQpOworZXh0ZXJuIHZvaWQgRnJlZUJ1 bGtJbnNlcnRTdGF0ZShCdWxrSW5zZXJ0U3RhdGUpOworZXh0ZXJuIHZvaWQgUmVsZWFzZUJ1bGtJ bnNlcnRTdGF0ZVBpbihCdWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZSk7CiAKIC8qIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KICAqIFRhYmxlIHNjYW4gZnVuY3Rpb25zLgpAQCAtMTQzMCw2ICsxNDczLDUwIEBA IHRhYmxlX211bHRpX2luc2VydChSZWxhdGlvbiByZWwsIFR1cGxlVGFibGVTbG90ICoqc2xvdHMs IGludCBuc2xvdHMsCiAJCQkJCQkJCSAgY2lkLCBvcHRpb25zLCBiaXN0YXRlKTsKIH0KIAorc3Rh dGljIGlubGluZSBUYWJsZUluc2VydFN0YXRlKgordGFibGVfaW5zZXJ0X2JlZ2luKFJlbGF0aW9u IHJlbCwgQ29tbWFuZElkIGNpZCwgaW50IG9wdGlvbnMsCisJCQkJICAgYm9vbCBhbGxvY19iaXN0 YXRlLCBib29sIGlzX211bHRpKQoreworCVRhYmxlSW5zZXJ0U3RhdGUgKnN0YXRlID0gcmVsLT5y ZF90YWJsZWFtLT50dXBsZV9pbnNlcnRfYmVnaW4ocmVsLCBjaWQsCisJCQkJCQkJCQkJb3B0aW9u cywgaXNfbXVsdGkpOworCisJLyogQWxsb2NhdGUgYnVsayBpbnNlcnQgc3RhdGUgaGVyZSwgc2lu Y2UgaXQncyBBTSBpbmRlcGVuZGVudC4gKi8KKwlpZiAoYWxsb2NfYmlzdGF0ZSkKKwkJc3RhdGUt PmJpc3RhdGUgPSBHZXRCdWxrSW5zZXJ0U3RhdGUoKTsKKwllbHNlCisJCXN0YXRlLT5iaXN0YXRl ID0gTlVMTDsKKworCXJldHVybiBzdGF0ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit0YWJs ZV90dXBsZV9pbnNlcnRfdjIoVGFibGVJbnNlcnRTdGF0ZSAqc3RhdGUsIFR1cGxlVGFibGVTbG90 ICpzbG90KQoreworCXN0YXRlLT5yZWwtPnJkX3RhYmxlYW0tPnR1cGxlX2luc2VydF92MihzdGF0 ZSwgc2xvdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordGFibGVfbXVsdGlfaW5zZXJ0X3Yy KFRhYmxlSW5zZXJ0U3RhdGUgKnN0YXRlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlzdGF0 ZS0+cmVsLT5yZF90YWJsZWFtLT5tdWx0aV9pbnNlcnRfdjIoc3RhdGUsIHNsb3QpOworfQorCitz dGF0aWMgaW5saW5lIHZvaWQKK3RhYmxlX211bHRpX2luc2VydF9mbHVzaChUYWJsZUluc2VydFN0 YXRlICpzdGF0ZSkKK3sKKwlzdGF0ZS0+cmVsLT5yZF90YWJsZWFtLT5tdWx0aV9pbnNlcnRfZmx1 c2goc3RhdGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3RhYmxlX2luc2VydF9lbmQoVGFi bGVJbnNlcnRTdGF0ZSAqc3RhdGUpCit7CisJLyogRGVhbGxvY2F0ZSBidWxrIGluc2VydCBzdGF0 ZSBoZXJlLCBzaW5jZSBpdCdzIEFNIGluZGVwZW5kZW50LiAqLworCWlmIChzdGF0ZS0+YmlzdGF0 ZSkKKwkJRnJlZUJ1bGtJbnNlcnRTdGF0ZShzdGF0ZS0+YmlzdGF0ZSk7CisKKwlzdGF0ZS0+cmVs LT5yZF90YWJsZWFtLT50dXBsZV9pbnNlcnRfZW5kKHN0YXRlKTsKK30KKwogLyoKICAqIERlbGV0 ZSBhIHR1cGxlLgogICoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL3R1cHRhYmxl LmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci90dXB0YWJsZS5oCmluZGV4IDY3OWU1N2ZiZGQuLjFm NTk2MTQxODMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL3R1cHRhYmxlLmgKKysr IGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvdHVwdGFibGUuaApAQCAtMzMwLDYgKzMzMCw3IEBAIGV4 dGVybiB2b2lkIHNsb3RfZ2V0bWlzc2luZ2F0dHJzKFR1cGxlVGFibGVTbG90ICpzbG90LCBpbnQg c3RhcnRBdHROdW0sCiAJCQkJCQkJCSBpbnQgbGFzdEF0dE51bSk7CiBleHRlcm4gdm9pZCBzbG90 X2dldHNvbWVhdHRyc19pbnQoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIGludCBhdHRudW0pOwogCitl eHRlcm4gU2l6ZSBHZXRUdXBsZVNpemUoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIFNpemUgbWF4c2l6 ZSk7CiAKICNpZm5kZWYgRlJPTlRFTkQKIAotLSAKMi4yNS4xCgo= --0000000000004d842705c04c1689 Content-Type: application/x-patch; name="v6-0002-CTAS-and-REFRESH-Mat-View-With-New-Multi-Insert-T.patch" Content-Disposition: attachment; filename="v6-0002-CTAS-and-REFRESH-Mat-View-With-New-Multi-Insert-T.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kno3tg0t1 RnJvbSBkOWRlOTIyODFkN2I1YzQ0YTZhMTU5OTRhOWExMTA1MjE0OWM5OTgxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlA ZW50ZXJwcmlzZWRiLmNvbT4KRGF0ZTogV2VkLCAxMCBNYXIgMjAyMSAwOTo1NDo1OSArMDUzMApT dWJqZWN0OiBbUEFUQ0ggdjYgMi8zXSBDVEFTIGFuZCBSRUZSRVNIIE1hdCBWaWV3IFdpdGggTmV3 IE11bHRpIEluc2VydCBUYWJsZSBBTQoKVGhpcyBwYXRjaCBhZGRzIG5ldyBtdWx0aSBpbnNlcnQg dGFibGUgYWNjZXNzIG1ldGhvZHMgdG8KQ1JFQVRFIFRBQkxFIEFTLCBDUkVBVEUgTUFURVJJQUxJ WkVEIFZJRVcgYW5kIFJFRlJFU0ggTUFURVJJQUxJWkVEClZJRVcuCi0tLQogc3JjL2JhY2tlbmQv Y29tbWFuZHMvY3JlYXRlYXMuYyB8IDQ5ICsrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0t LQogc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jICB8IDM1ICsrKysrKysrKysrKy0tLS0t LS0tLS0tCiAyIGZpbGVzIGNoYW5nZWQsIDQzIGluc2VydGlvbnMoKyksIDQxIGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCmluZGV4IGRjZTg4MjAxMmUuLjM2YWQwZWY2OTggMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKKysrIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvY3JlYXRlYXMuYwpAQCAtNTgsOSArNTgsNyBAQCB0eXBlZGVmIHN0cnVjdAog CS8qIFRoZXNlIGZpZWxkcyBhcmUgZmlsbGVkIGJ5IGludG9yZWxfc3RhcnR1cDogKi8KIAlSZWxh dGlvbglyZWw7CQkJLyogcmVsYXRpb24gdG8gd3JpdGUgdG8gKi8KIAlPYmplY3RBZGRyZXNzIHJl bGFkZHI7CQkvKiBhZGRyZXNzIG9mIHJlbCwgZm9yIEV4ZWNDcmVhdGVUYWJsZUFzICovCi0JQ29t bWFuZElkCW91dHB1dF9jaWQ7CQkvKiBjbWluIHRvIGluc2VydCBpbiBvdXRwdXQgdHVwbGVzICov Ci0JaW50CQkJdGlfb3B0aW9uczsJCS8qIHRhYmxlX3R1cGxlX2luc2VydCBwZXJmb3JtYW5jZSBv cHRpb25zICovCi0JQnVsa0luc2VydFN0YXRlIGJpc3RhdGU7CS8qIGJ1bGsgaW5zZXJ0IHN0YXRl ICovCisJVGFibGVJbnNlcnRTdGF0ZSAqaXN0YXRlOwkvKiBpbnNlcnQgc3RhdGUgKi8KIH0gRFJf aW50b3JlbDsKIAogLyogdXRpbGl0eSBmdW5jdGlvbnMgZm9yIENUQVMgZGVmaW5pdGlvbiBjcmVh dGlvbiAqLwpAQCAtNTQ2LDIyICs1NDQsMjYgQEAgaW50b3JlbF9zdGFydHVwKERlc3RSZWNlaXZl ciAqc2VsZiwgaW50IG9wZXJhdGlvbiwgVHVwbGVEZXNjIHR5cGVpbmZvKQogCWlmIChpc19tYXR2 aWV3ICYmICFpbnRvLT5za2lwRGF0YSkKIAkJU2V0TWF0Vmlld1BvcHVsYXRlZFN0YXRlKGludG9S ZWxhdGlvbkRlc2MsIHRydWUpOwogCi0JLyoKLQkgKiBGaWxsIHByaXZhdGUgZmllbGRzIG9mIG15 U3RhdGUgZm9yIHVzZSBieSBsYXRlciByb3V0aW5lcwotCSAqLwotCW15U3RhdGUtPnJlbCA9IGlu dG9SZWxhdGlvbkRlc2M7Ci0JbXlTdGF0ZS0+cmVsYWRkciA9IGludG9SZWxhdGlvbkFkZHI7Ci0J bXlTdGF0ZS0+b3V0cHV0X2NpZCA9IEdldEN1cnJlbnRDb21tYW5kSWQodHJ1ZSk7Ci0JbXlTdGF0 ZS0+dGlfb3B0aW9ucyA9IFRBQkxFX0lOU0VSVF9TS0lQX0ZTTTsKLQogCS8qCiAJICogSWYgV0lU SCBOTyBEQVRBIGlzIHNwZWNpZmllZCwgdGhlcmUgaXMgbm8gbmVlZCB0byBzZXQgdXAgdGhlIHN0 YXRlIGZvcgotCSAqIGJ1bGsgaW5zZXJ0cyBhcyB0aGVyZSBhcmUgbm8gdHVwbGVzIHRvIGluc2Vy dC4KKwkgKiBidWxrIGluc2VydHMgYW5kIG11bHRpIGluc2VydHMgYXMgdGhlcmUgYXJlIG5vIHR1 cGxlcyB0byBpbnNlcnQuCiAJICovCiAJaWYgKCFpbnRvLT5za2lwRGF0YSkKLQkJbXlTdGF0ZS0+ YmlzdGF0ZSA9IEdldEJ1bGtJbnNlcnRTdGF0ZSgpOworCXsKKwkJbXlTdGF0ZS0+aXN0YXRlID0g dGFibGVfaW5zZXJ0X2JlZ2luKGludG9SZWxhdGlvbkRlc2MsCisJCQkJCQkJCQkJCSBHZXRDdXJy ZW50Q29tbWFuZElkKHRydWUpLAorCQkJCQkJCQkJCQkgVEFCTEVfSU5TRVJUX1NLSVBfRlNNLAor CQkJCQkJCQkJCQkgdHJ1ZSwKKwkJCQkJCQkJCQkJIHRydWUpOworCX0KIAllbHNlCi0JCW15U3Rh dGUtPmJpc3RhdGUgPSBOVUxMOworCQlteVN0YXRlLT5pc3RhdGUgPSBOVUxMOworCisJLyoKKwkg KiBGaWxsIHByaXZhdGUgZmllbGRzIG9mIG15U3RhdGUgZm9yIHVzZSBieSBsYXRlciByb3V0aW5l cworCSAqLworCW15U3RhdGUtPnJlbCA9IGludG9SZWxhdGlvbkRlc2M7CisJbXlTdGF0ZS0+cmVs YWRkciA9IGludG9SZWxhdGlvbkFkZHI7CiAKIAkvKgogCSAqIFZhbGlkIHNtZ3JfdGFyZ2Jsb2Nr IGltcGxpZXMgc29tZXRoaW5nIGFscmVhZHkgd3JvdGUgdG8gdGhlIHJlbGF0aW9uLgpAQCAtNTg5 LDExICs1OTEsNyBAQCBpbnRvcmVsX3JlY2VpdmUoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIERlc3RS ZWNlaXZlciAqc2VsZikKIAkJICogd291bGQgbm90IGJlIGNoZWFwIGVpdGhlci4gVGhpcyBhbHNv IGRvZXNuJ3QgYWxsb3cgYWNjZXNzaW5nIHBlci1BTQogCQkgKiBkYXRhIChzYXkgYSB0dXBsZSdz IHhtaW4pLCBidXQgc2luY2Ugd2UgZG9uJ3QgZG8gdGhhdCBoZXJlLi4uCiAJCSAqLwotCQl0YWJs ZV90dXBsZV9pbnNlcnQobXlTdGF0ZS0+cmVsLAotCQkJCQkJICAgc2xvdCwKLQkJCQkJCSAgIG15 U3RhdGUtPm91dHB1dF9jaWQsCi0JCQkJCQkgICBteVN0YXRlLT50aV9vcHRpb25zLAotCQkJCQkJ ICAgbXlTdGF0ZS0+YmlzdGF0ZSk7CisJCXRhYmxlX211bHRpX2luc2VydF92MihteVN0YXRlLT5p c3RhdGUsIHNsb3QpOwogCX0KIAogCS8qIFdlIGtub3cgdGhpcyBpcyBhIG5ld2x5IGNyZWF0ZWQg cmVsYXRpb24sIHNvIHRoZXJlIGFyZSBubyBpbmRleGVzICovCkBAIC02MDgsMTIgKzYwNiwxNyBA QCBzdGF0aWMgdm9pZAogaW50b3JlbF9zaHV0ZG93bihEZXN0UmVjZWl2ZXIgKnNlbGYpCiB7CiAJ RFJfaW50b3JlbCAqbXlTdGF0ZSA9IChEUl9pbnRvcmVsICopIHNlbGY7Ci0JSW50b0NsYXVzZSAq aW50byA9IG15U3RhdGUtPmludG87CisJaW50IHRpX29wdGlvbnM7CiAKLQlpZiAoIWludG8tPnNr aXBEYXRhKQorCWlmICghbXlTdGF0ZS0+aW50by0+c2tpcERhdGEpCiAJewotCQlGcmVlQnVsa0lu c2VydFN0YXRlKG15U3RhdGUtPmJpc3RhdGUpOwotCQl0YWJsZV9maW5pc2hfYnVsa19pbnNlcnQo bXlTdGF0ZS0+cmVsLCBteVN0YXRlLT50aV9vcHRpb25zKTsKKwkJdGlfb3B0aW9ucyA9IG15U3Rh dGUtPmlzdGF0ZS0+b3B0aW9uczsKKworCQl0YWJsZV9tdWx0aV9pbnNlcnRfZmx1c2gobXlTdGF0 ZS0+aXN0YXRlKTsKKworCQl0YWJsZV9pbnNlcnRfZW5kKG15U3RhdGUtPmlzdGF0ZSk7CisKKwkJ dGFibGVfZmluaXNoX2J1bGtfaW5zZXJ0KG15U3RhdGUtPnJlbCwgdGlfb3B0aW9ucyk7CiAJfQog CiAJLyogY2xvc2UgcmVsLCBidXQga2VlcCBsb2NrIHVudGlsIGNvbW1pdCAqLwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv bWF0dmlldy5jCmluZGV4IGM1YzI1Y2UxMWQuLjljNmI1Zjg1MjUgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2 aWV3LmMKQEAgLTUyLDEwICs1Miw3IEBAIHR5cGVkZWYgc3RydWN0CiAJRGVzdFJlY2VpdmVyIHB1 YjsJCQkvKiBwdWJsaWNseS1rbm93biBmdW5jdGlvbiBwb2ludGVycyAqLwogCU9pZAkJCXRyYW5z aWVudG9pZDsJLyogT0lEIG9mIG5ldyBoZWFwIGludG8gd2hpY2ggdG8gc3RvcmUgKi8KIAkvKiBU aGVzZSBmaWVsZHMgYXJlIGZpbGxlZCBieSB0cmFuc2llbnRyZWxfc3RhcnR1cDogKi8KLQlSZWxh dGlvbgl0cmFuc2llbnRyZWw7CS8qIHJlbGF0aW9uIHRvIHdyaXRlIHRvICovCi0JQ29tbWFuZElk CW91dHB1dF9jaWQ7CQkvKiBjbWluIHRvIGluc2VydCBpbiBvdXRwdXQgdHVwbGVzICovCi0JaW50 CQkJdGlfb3B0aW9uczsJCS8qIHRhYmxlX3R1cGxlX2luc2VydCBwZXJmb3JtYW5jZSBvcHRpb25z ICovCi0JQnVsa0luc2VydFN0YXRlIGJpc3RhdGU7CS8qIGJ1bGsgaW5zZXJ0IHN0YXRlICovCisJ VGFibGVJbnNlcnRTdGF0ZSAqaXN0YXRlOwkvKiBpbnNlcnQgc3RhdGUgKi8KIH0gRFJfdHJhbnNp ZW50cmVsOwogCiBzdGF0aWMgaW50CW1hdHZpZXdfbWFpbnRlbmFuY2VfZGVwdGggPSAwOwpAQCAt NDY2LDEwICs0NjMsMTEgQEAgdHJhbnNpZW50cmVsX3N0YXJ0dXAoRGVzdFJlY2VpdmVyICpzZWxm LCBpbnQgb3BlcmF0aW9uLCBUdXBsZURlc2MgdHlwZWluZm8pCiAJLyoKIAkgKiBGaWxsIHByaXZh dGUgZmllbGRzIG9mIG15U3RhdGUgZm9yIHVzZSBieSBsYXRlciByb3V0aW5lcwogCSAqLwotCW15 U3RhdGUtPnRyYW5zaWVudHJlbCA9IHRyYW5zaWVudHJlbDsKLQlteVN0YXRlLT5vdXRwdXRfY2lk ID0gR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKTsKLQlteVN0YXRlLT50aV9vcHRpb25zID0gVEFC TEVfSU5TRVJUX1NLSVBfRlNNIHwgVEFCTEVfSU5TRVJUX0ZST1pFTjsKLQlteVN0YXRlLT5iaXN0 YXRlID0gR2V0QnVsa0luc2VydFN0YXRlKCk7CisJbXlTdGF0ZS0+aXN0YXRlID0gdGFibGVfaW5z ZXJ0X2JlZ2luKHRyYW5zaWVudHJlbCwKKwkJCQkJCQkJCQkgR2V0Q3VycmVudENvbW1hbmRJZCh0 cnVlKSwKKwkJCQkJCQkJCQkgVEFCTEVfSU5TRVJUX1NLSVBfRlNNIHwgVEFCTEVfSU5TRVJUX0ZS T1pFTiwKKwkJCQkJCQkJCQkgdHJ1ZSwKKwkJCQkJCQkJCQkgdHJ1ZSk7CiAKIAkvKgogCSAqIFZh bGlkIHNtZ3JfdGFyZ2Jsb2NrIGltcGxpZXMgc29tZXRoaW5nIGFscmVhZHkgd3JvdGUgdG8gdGhl IHJlbGF0aW9uLgpAQCAtNDk0LDEyICs0OTIsNyBAQCB0cmFuc2llbnRyZWxfcmVjZWl2ZShUdXBs ZVRhYmxlU2xvdCAqc2xvdCwgRGVzdFJlY2VpdmVyICpzZWxmKQogCSAqIGNoZWFwIGVpdGhlci4g VGhpcyBhbHNvIGRvZXNuJ3QgYWxsb3cgYWNjZXNzaW5nIHBlci1BTSBkYXRhIChzYXkgYQogCSAq IHR1cGxlJ3MgeG1pbiksIGJ1dCBzaW5jZSB3ZSBkb24ndCBkbyB0aGF0IGhlcmUuLi4KIAkgKi8K LQotCXRhYmxlX3R1cGxlX2luc2VydChteVN0YXRlLT50cmFuc2llbnRyZWwsCi0JCQkJCSAgIHNs b3QsCi0JCQkJCSAgIG15U3RhdGUtPm91dHB1dF9jaWQsCi0JCQkJCSAgIG15U3RhdGUtPnRpX29w dGlvbnMsCi0JCQkJCSAgIG15U3RhdGUtPmJpc3RhdGUpOworCXRhYmxlX211bHRpX2luc2VydF92 MihteVN0YXRlLT5pc3RhdGUsIHNsb3QpOwogCiAJLyogV2Uga25vdyB0aGlzIGlzIGEgbmV3bHkg Y3JlYXRlZCByZWxhdGlvbiwgc28gdGhlcmUgYXJlIG5vIGluZGV4ZXMgKi8KIApAQCAtNTEzLDE0 ICs1MDYsMjAgQEAgc3RhdGljIHZvaWQKIHRyYW5zaWVudHJlbF9zaHV0ZG93bihEZXN0UmVjZWl2 ZXIgKnNlbGYpCiB7CiAJRFJfdHJhbnNpZW50cmVsICpteVN0YXRlID0gKERSX3RyYW5zaWVudHJl bCAqKSBzZWxmOworCWludCB0aV9vcHRpb25zOworCVJlbGF0aW9uIHRyYW5zaWVudHJlbDsKKwor CXRpX29wdGlvbnMgPSBteVN0YXRlLT5pc3RhdGUtPm9wdGlvbnM7CisJdHJhbnNpZW50cmVsID0g bXlTdGF0ZS0+aXN0YXRlLT5yZWw7CisKKwl0YWJsZV9tdWx0aV9pbnNlcnRfZmx1c2gobXlTdGF0 ZS0+aXN0YXRlKTsKIAotCUZyZWVCdWxrSW5zZXJ0U3RhdGUobXlTdGF0ZS0+YmlzdGF0ZSk7CisJ dGFibGVfaW5zZXJ0X2VuZChteVN0YXRlLT5pc3RhdGUpOwogCi0JdGFibGVfZmluaXNoX2J1bGtf aW5zZXJ0KG15U3RhdGUtPnRyYW5zaWVudHJlbCwgbXlTdGF0ZS0+dGlfb3B0aW9ucyk7CisJdGFi bGVfZmluaXNoX2J1bGtfaW5zZXJ0KHRyYW5zaWVudHJlbCwgdGlfb3B0aW9ucyk7CiAKIAkvKiBj bG9zZSB0cmFuc2llbnRyZWwsIGJ1dCBrZWVwIGxvY2sgdW50aWwgY29tbWl0ICovCi0JdGFibGVf Y2xvc2UobXlTdGF0ZS0+dHJhbnNpZW50cmVsLCBOb0xvY2spOwotCW15U3RhdGUtPnRyYW5zaWVu dHJlbCA9IE5VTEw7CisJdGFibGVfY2xvc2UodHJhbnNpZW50cmVsLCBOb0xvY2spOwogfQogCiAv KgotLSAKMi4yNS4xCgo= --0000000000004d842705c04c1689 Content-Type: application/x-patch; name="v6-0003-COPY-With-New-Multi-and-Single-Insert-Table-AM.patch" Content-Disposition: attachment; filename="v6-0003-COPY-With-New-Multi-and-Single-Insert-Table-AM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kno3tieh2 RnJvbSAyNjc0MDUyN2Y2NTBmNmVkYjcwZTU4MGQ0NmE0Yjg2MTI0ZGE3NGU1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlA ZW50ZXJwcmlzZWRiLmNvbT4KRGF0ZTogTW9uLCAxOSBBcHIgMjAyMSAxMDowMjozMSArMDUzMApT dWJqZWN0OiBbUEFUQ0ggdjYgMy8zXSBDT1BZIFdpdGggTmV3IE11bHRpIGFuZCBTaW5nbGUgSW5z ZXJ0IFRhYmxlIEFNCgpUaGlzIHBhdGNoIGFkZHMgbmV3IHNpbmdsZSBhbmQgbXVsdGkgaW5zZXJ0 IHRhYmxlIGFjY2VzcyBtZXRob2QgdG8KQ09QWSBjb2RlLgotLS0KIHNyYy9iYWNrZW5kL2NvbW1h bmRzL2NvcHlmcm9tLmMgfCA0NjQgKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEg ZmlsZSBjaGFuZ2VkLCAxNDQgaW5zZXJ0aW9ucygrKSwgMzIwIGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9jb3B5ZnJvbS5jCmluZGV4IDQwYTU0YWQwYmQuLjAxMTc0MTM5NDMgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvY29weWZyb20uYwpAQCAtNTMsNTQgKzUzLDE3IEBACiAjaW5jbHVkZSAidXRpbHMvcmVsLmgi CiAjaW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgogCi0vKgotICogTm8gbW9yZSB0aGFuIHRoaXMg bWFueSB0dXBsZXMgcGVyIENvcHlNdWx0aUluc2VydEJ1ZmZlcgotICoKLSAqIENhdXRpb246IERv bid0IG1ha2UgdGhpcyB0b28gYmlnLCBhcyB3ZSBjb3VsZCBlbmQgdXAgd2l0aCB0aGlzIG1hbnkK LSAqIENvcHlNdWx0aUluc2VydEJ1ZmZlciBpdGVtcyBzdG9yZWQgaW4gQ29weU11bHRpSW5zZXJ0 SW5mbydzCi0gKiBtdWx0aUluc2VydEJ1ZmZlcnMgbGlzdC4gIEluY3JlYXNpbmcgdGhpcyBjYW4g Y2F1c2UgcXVhZHJhdGljIGdyb3d0aCBpbgotICogbWVtb3J5IHJlcXVpcmVtZW50cyBkdXJpbmcg Y29waWVzIGludG8gcGFydGl0aW9uZWQgdGFibGVzIHdpdGggYSBsYXJnZQotICogbnVtYmVyIG9m IHBhcnRpdGlvbnMuCi0gKi8KLSNkZWZpbmUgTUFYX0JVRkZFUkVEX1RVUExFUwkJMTAwMAotCi0v KgotICogRmx1c2ggYnVmZmVycyBpZiB0aGVyZSBhcmUgPj0gdGhpcyBtYW55IGJ5dGVzLCBhcyBj b3VudGVkIGJ5IHRoZSBpbnB1dAotICogc2l6ZSwgb2YgdHVwbGVzIHN0b3JlZC4KLSAqLwotI2Rl ZmluZSBNQVhfQlVGRkVSRURfQllURVMJCTY1NTM1Ci0KIC8qIFRyaW0gdGhlIGxpc3Qgb2YgYnVm ZmVycyBiYWNrIGRvd24gdG8gdGhpcyBudW1iZXIgYWZ0ZXIgZmx1c2hpbmcgKi8KICNkZWZpbmUg TUFYX1BBUlRJVElPTl9CVUZGRVJTCTMyCiAKIC8qIFN0b3JlcyBtdWx0aS1pbnNlcnQgZGF0YSBy ZWxhdGVkIHRvIGEgc2luZ2xlIHJlbGF0aW9uIGluIENvcHlGcm9tLiAqLwogdHlwZWRlZiBzdHJ1 Y3QgQ29weU11bHRpSW5zZXJ0QnVmZmVyCiB7Ci0JVHVwbGVUYWJsZVNsb3QgKnNsb3RzW01BWF9C VUZGRVJFRF9UVVBMRVNdOyAvKiBBcnJheSB0byBzdG9yZSB0dXBsZXMgKi8KLQlSZXN1bHRSZWxJ bmZvICpyZXN1bHRSZWxJbmZvOwkvKiBSZXN1bHRSZWxJbmZvIGZvciAncmVsaWQnICovCi0JQnVs a0luc2VydFN0YXRlIGJpc3RhdGU7CS8qIEJ1bGtJbnNlcnRTdGF0ZSBmb3IgdGhpcyByZWwgKi8K LQlpbnQJCQludXNlZDsJCQkvKiBudW1iZXIgb2YgJ3Nsb3RzJyBjb250YWluaW5nIHR1cGxlcyAq LwotCXVpbnQ2NAkJbGluZW5vc1tNQVhfQlVGRkVSRURfVFVQTEVTXTsJLyogTGluZSAjIG9mIHR1 cGxlIGluIGNvcHkKLQkJCQkJCQkJCQkJCSAqIHN0cmVhbSAqLworCVRhYmxlSW5zZXJ0U3RhdGUg KmlzdGF0ZTsKKwkvKiBMaW5lICMgb2YgdHVwbGUgaW4gY29weSBzdHJlYW0uICovCisJdWludDY0 ICAgICAgICAgIGxpbmVub3NbTUFYX0JVRkZFUkVEX1RVUExFU107CiB9IENvcHlNdWx0aUluc2Vy dEJ1ZmZlcjsKIAotLyoKLSAqIFN0b3JlcyBvbmUgb3IgbWFueSBDb3B5TXVsdGlJbnNlcnRCdWZm ZXJzIGFuZCBkZXRhaWxzIGFib3V0IHRoZSBzaXplIGFuZAotICogbnVtYmVyIG9mIHR1cGxlcyB3 aGljaCBhcmUgc3RvcmVkIGluIHRoZW0uICBUaGlzIGFsbG93cyBtdWx0aXBsZSBidWZmZXJzIHRv Ci0gKiBleGlzdCBhdCBvbmNlIHdoZW4gQ09QWWluZyBpbnRvIGEgcGFydGl0aW9uZWQgdGFibGUu Ci0gKi8KLXR5cGVkZWYgc3RydWN0IENvcHlNdWx0aUluc2VydEluZm8KLXsKLQlMaXN0CSAgICpt dWx0aUluc2VydEJ1ZmZlcnM7IC8qIExpc3Qgb2YgdHJhY2tlZCBDb3B5TXVsdGlJbnNlcnRCdWZm ZXJzICovCi0JaW50CQkJYnVmZmVyZWRUdXBsZXM7IC8qIG51bWJlciBvZiB0dXBsZXMgYnVmZmVy ZWQgb3ZlciBhbGwgYnVmZmVycyAqLwotCWludAkJCWJ1ZmZlcmVkQnl0ZXM7CS8qIG51bWJlciBv ZiBieXRlcyBmcm9tIGFsbCBidWZmZXJlZCB0dXBsZXMgKi8KLQlDb3B5RnJvbVN0YXRlIGNzdGF0 ZTsJCS8qIENvcHkgc3RhdGUgZm9yIHRoaXMgQ29weU11bHRpSW5zZXJ0SW5mbyAqLwotCUVTdGF0 ZQkgICAqZXN0YXRlOwkJCS8qIEV4ZWN1dG9yIHN0YXRlIHVzZWQgZm9yIENPUFkgKi8KLQlDb21t YW5kSWQJbXljaWQ7CQkJLyogQ29tbWFuZCBJZCB1c2VkIGZvciBDT1BZICovCi0JaW50CQkJdGlf b3B0aW9uczsJCS8qIHRhYmxlIGluc2VydCBvcHRpb25zICovCi19IENvcHlNdWx0aUluc2VydElu Zm87Ci0KLQogLyogbm9uLWV4cG9ydCBmdW5jdGlvbiBwcm90b3R5cGVzICovCiBzdGF0aWMgY2hh ciAqbGltaXRfcHJpbnRvdXRfbGVuZ3RoKGNvbnN0IGNoYXIgKnN0cik7CiAKQEAgLTIwNywxMDgg KzE3MCwzMyBAQCBsaW1pdF9wcmludG91dF9sZW5ndGgoY29uc3QgY2hhciAqc3RyKQogCXJldHVy biByZXM7CiB9CiAKLS8qCi0gKiBBbGxvY2F0ZSBtZW1vcnkgYW5kIGluaXRpYWxpemUgYSBuZXcg Q29weU11bHRpSW5zZXJ0QnVmZmVyIGZvciB0aGlzCi0gKiBSZXN1bHRSZWxJbmZvLgotICovCi1z dGF0aWMgQ29weU11bHRpSW5zZXJ0QnVmZmVyICoKLUNvcHlNdWx0aUluc2VydEJ1ZmZlckluaXQo UmVzdWx0UmVsSW5mbyAqcnJpKQotewotCUNvcHlNdWx0aUluc2VydEJ1ZmZlciAqYnVmZmVyOwot Ci0JYnVmZmVyID0gKENvcHlNdWx0aUluc2VydEJ1ZmZlciAqKSBwYWxsb2Moc2l6ZW9mKENvcHlN dWx0aUluc2VydEJ1ZmZlcikpOwotCW1lbXNldChidWZmZXItPnNsb3RzLCAwLCBzaXplb2YoVHVw bGVUYWJsZVNsb3QgKikgKiBNQVhfQlVGRkVSRURfVFVQTEVTKTsKLQlidWZmZXItPnJlc3VsdFJl bEluZm8gPSBycmk7Ci0JYnVmZmVyLT5iaXN0YXRlID0gR2V0QnVsa0luc2VydFN0YXRlKCk7Ci0J YnVmZmVyLT5udXNlZCA9IDA7Ci0KLQlyZXR1cm4gYnVmZmVyOwotfQotCi0vKgotICogTWFrZSBh IG5ldyBidWZmZXIgZm9yIHRoaXMgUmVzdWx0UmVsSW5mby4KLSAqLwotc3RhdGljIGlubGluZSB2 b2lkCi1Db3B5TXVsdGlJbnNlcnRJbmZvU2V0dXBCdWZmZXIoQ29weU11bHRpSW5zZXJ0SW5mbyAq bWlpbmZvLAotCQkJCQkJCSAgIFJlc3VsdFJlbEluZm8gKnJyaSkKK3N0YXRpYyB2b2lkCitJbml0 Q29weU11bHRpSW5zZXJ0QnVmZmVySW5mbyhMaXN0ICoqbWlycmksIFJlc3VsdFJlbEluZm8gKnJy aSwKKwkJCQkJCQkgICBDb21tYW5kSWQgbXljaWQsIGludCB0aV9vcHRpb25zKQogewogCUNvcHlN dWx0aUluc2VydEJ1ZmZlciAqYnVmZmVyOwogCi0JYnVmZmVyID0gQ29weU11bHRpSW5zZXJ0QnVm ZmVySW5pdChycmkpOwotCisJYnVmZmVyID0gKENvcHlNdWx0aUluc2VydEJ1ZmZlciAqKSBwYWxs b2MwKHNpemVvZihDb3B5TXVsdGlJbnNlcnRCdWZmZXIpKTsKKwlidWZmZXItPmlzdGF0ZSA9IHRh YmxlX2luc2VydF9iZWdpbihycmktPnJpX1JlbGF0aW9uRGVzYywgbXljaWQsCisJCQkJCQkJCQkJ dGlfb3B0aW9ucywgdHJ1ZSwgdHJ1ZSk7CiAJLyogU2V0dXAgYmFjay1saW5rIHNvIHdlIGNhbiBl YXNpbHkgZmluZCB0aGlzIGJ1ZmZlciBhZ2FpbiAqLwogCXJyaS0+cmlfQ29weU11bHRpSW5zZXJ0 QnVmZmVyID0gYnVmZmVyOwotCS8qIFJlY29yZCB0aGF0IHdlJ3JlIHRyYWNraW5nIHRoaXMgYnVm ZmVyICovCi0JbWlpbmZvLT5tdWx0aUluc2VydEJ1ZmZlcnMgPSBsYXBwZW5kKG1paW5mby0+bXVs dGlJbnNlcnRCdWZmZXJzLCBidWZmZXIpOworCSptaXJyaSA9IGxhcHBlbmQoKm1pcnJpLCBycmkp OwogfQogCiAvKgotICogSW5pdGlhbGl6ZSBhbiBhbHJlYWR5IGFsbG9jYXRlZCBDb3B5TXVsdGlJ bnNlcnRJbmZvLgotICoKLSAqIElmIHJyaSBpcyBhIG5vbi1wYXJ0aXRpb25lZCB0YWJsZSB0aGVu IGEgQ29weU11bHRpSW5zZXJ0QnVmZmVyIGlzIHNldCB1cAotICogZm9yIHRoYXQgdGFibGUuCisg KiBSdW4gQUZURVIgUk9XIElOU0VSVCB0cmlnZ2VycyBvciBpbnNlcnQgaW50byBpbmRleGVzLCBp ZiBhbnksIGFmdGVyIGJ1ZmZlcmVkCisgKiB0dXBsZXMgYXJlIGZsdXNoZWQgdG8gdGFibGUuCiAg Ki8KIHN0YXRpYyB2b2lkCi1Db3B5TXVsdGlJbnNlcnRJbmZvSW5pdChDb3B5TXVsdGlJbnNlcnRJ bmZvICptaWluZm8sIFJlc3VsdFJlbEluZm8gKnJyaSwKLQkJCQkJCUNvcHlGcm9tU3RhdGUgY3N0 YXRlLCBFU3RhdGUgKmVzdGF0ZSwgQ29tbWFuZElkIG15Y2lkLAotCQkJCQkJaW50IHRpX29wdGlv bnMpCitIYW5kbGVBZnRlclJvd0V2ZW50cyhSZXN1bHRSZWxJbmZvICpycmksIEVTdGF0ZSAqZXN0 YXRlLCBDb3B5RnJvbVN0YXRlIGNzdGF0ZSwKKwkJCQkJIGludDMyIGN1cl9zbG90cykKIHsKLQlt aWluZm8tPm11bHRpSW5zZXJ0QnVmZmVycyA9IE5JTDsKLQltaWluZm8tPmJ1ZmZlcmVkVHVwbGVz ID0gMDsKLQltaWluZm8tPmJ1ZmZlcmVkQnl0ZXMgPSAwOwotCW1paW5mby0+Y3N0YXRlID0gY3N0 YXRlOwotCW1paW5mby0+ZXN0YXRlID0gZXN0YXRlOwotCW1paW5mby0+bXljaWQgPSBteWNpZDsK LQltaWluZm8tPnRpX29wdGlvbnMgPSB0aV9vcHRpb25zOwotCi0JLyoKLQkgKiBPbmx5IHNldHVw IHRoZSBidWZmZXIgd2hlbiBub3QgZGVhbGluZyB3aXRoIGEgcGFydGl0aW9uZWQgdGFibGUuCi0J ICogQnVmZmVycyBmb3IgcGFydGl0aW9uZWQgdGFibGVzIHdpbGwganVzdCBiZSBzZXR1cCB3aGVu IHdlIG5lZWQgdG8gc2VuZAotCSAqIHR1cGxlcyB0aGVpciB3YXkgZm9yIHRoZSBmaXJzdCB0aW1l LgotCSAqLwotCWlmIChycmktPnJpX1JlbGF0aW9uRGVzYy0+cmRfcmVsLT5yZWxraW5kICE9IFJF TEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCi0JCUNvcHlNdWx0aUluc2VydEluZm9TZXR1cEJ1ZmZl cihtaWluZm8sIHJyaSk7Ci19Ci0KLS8qCi0gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGJ1ZmZlcnMg YXJlIGZ1bGwKLSAqLwotc3RhdGljIGlubGluZSBib29sCi1Db3B5TXVsdGlJbnNlcnRJbmZvSXNG dWxsKENvcHlNdWx0aUluc2VydEluZm8gKm1paW5mbykKLXsKLQlpZiAobWlpbmZvLT5idWZmZXJl ZFR1cGxlcyA+PSBNQVhfQlVGRkVSRURfVFVQTEVTIHx8Ci0JCW1paW5mby0+YnVmZmVyZWRCeXRl cyA+PSBNQVhfQlVGRkVSRURfQllURVMpCi0JCXJldHVybiB0cnVlOwotCXJldHVybiBmYWxzZTsK LX0KLQotLyoKLSAqIFJldHVybnMgdHJ1ZSBpZiB3ZSBoYXZlIG5vIGJ1ZmZlcmVkIHR1cGxlcwot ICovCi1zdGF0aWMgaW5saW5lIGJvb2wKLUNvcHlNdWx0aUluc2VydEluZm9Jc0VtcHR5KENvcHlN dWx0aUluc2VydEluZm8gKm1paW5mbykKLXsKLQlyZXR1cm4gbWlpbmZvLT5idWZmZXJlZFR1cGxl cyA9PSAwOwotfQotCi0vKgotICogV3JpdGUgdGhlIHR1cGxlcyBzdG9yZWQgaW4gJ2J1ZmZlcicg b3V0IHRvIHRoZSB0YWJsZS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1Db3B5TXVsdGlJbnNl cnRCdWZmZXJGbHVzaChDb3B5TXVsdGlJbnNlcnRJbmZvICptaWluZm8sCi0JCQkJCQkgICBDb3B5 TXVsdGlJbnNlcnRCdWZmZXIgKmJ1ZmZlcikKLXsKLQlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7 Ci0JaW50CQkJaTsKLQl1aW50NjQJCXNhdmVfY3VyX2xpbmVubzsKLQlDb3B5RnJvbVN0YXRlIGNz dGF0ZSA9IG1paW5mby0+Y3N0YXRlOwotCUVTdGF0ZQkgICAqZXN0YXRlID0gbWlpbmZvLT5lc3Rh dGU7Ci0JQ29tbWFuZElkCW15Y2lkID0gbWlpbmZvLT5teWNpZDsKLQlpbnQJCQl0aV9vcHRpb25z ID0gbWlpbmZvLT50aV9vcHRpb25zOwotCWJvb2wJCWxpbmVfYnVmX3ZhbGlkID0gY3N0YXRlLT5s aW5lX2J1Zl92YWxpZDsKLQlpbnQJCQludXNlZCA9IGJ1ZmZlci0+bnVzZWQ7Ci0JUmVzdWx0UmVs SW5mbyAqcmVzdWx0UmVsSW5mbyA9IGJ1ZmZlci0+cmVzdWx0UmVsSW5mbzsKLQlUdXBsZVRhYmxl U2xvdCAqKnNsb3RzID0gYnVmZmVyLT5zbG90czsKKwlpbnQgaTsKKwlDb3B5TXVsdGlJbnNlcnRC dWZmZXIgKmJ1ZmZlciA9IHJyaS0+cmlfQ29weU11bHRpSW5zZXJ0QnVmZmVyOworCVRhYmxlSW5z ZXJ0U3RhdGUgKmlzdGF0ZSA9IGJ1ZmZlci0+aXN0YXRlOworCXVpbnQ2NCAgc2F2ZV9jdXJfbGlu ZW5vOworCWJvb2wgICAgbGluZV9idWZfdmFsaWQgPSBjc3RhdGUtPmxpbmVfYnVmX3ZhbGlkOwog CiAJLyoKIAkgKiBQcmludCBlcnJvciBjb250ZXh0IGluZm9ybWF0aW9uIGNvcnJlY3RseSwgaWYg b25lIG9mIHRoZSBvcGVyYXRpb25zCkBAIC0zMTcsMzYgKzIwNSwyNyBAQCBDb3B5TXVsdGlJbnNl cnRCdWZmZXJGbHVzaChDb3B5TXVsdGlJbnNlcnRJbmZvICptaWluZm8sCiAJY3N0YXRlLT5saW5l X2J1Zl92YWxpZCA9IGZhbHNlOwogCXNhdmVfY3VyX2xpbmVubyA9IGNzdGF0ZS0+Y3VyX2xpbmVu bzsKIAotCS8qCi0JICogdGFibGVfbXVsdGlfaW5zZXJ0IG1heSBsZWFrIG1lbW9yeSwgc28gc3dp dGNoIHRvIHNob3J0LWxpdmVkIG1lbW9yeQotCSAqIGNvbnRleHQgYmVmb3JlIGNhbGxpbmcgaXQu Ci0JICovCi0Jb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhHZXRQZXJUdXBsZU1l bW9yeUNvbnRleHQoZXN0YXRlKSk7Ci0JdGFibGVfbXVsdGlfaW5zZXJ0KHJlc3VsdFJlbEluZm8t PnJpX1JlbGF0aW9uRGVzYywKLQkJCQkJICAgc2xvdHMsCi0JCQkJCSAgIG51c2VkLAotCQkJCQkg ICBteWNpZCwKLQkJCQkJICAgdGlfb3B0aW9ucywKLQkJCQkJICAgYnVmZmVyLT5iaXN0YXRlKTsK LQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwg bnVzZWQ7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgY3VyX3Nsb3RzOyBpKyspCiAJewogCQkvKgog CQkgKiBJZiB0aGVyZSBhcmUgYW55IGluZGV4ZXMsIHVwZGF0ZSB0aGVtIGZvciBhbGwgdGhlIGlu c2VydGVkIHR1cGxlcywKIAkJICogYW5kIHJ1biBBRlRFUiBST1cgSU5TRVJUIHRyaWdnZXJzLgog CQkgKi8KLQkJaWYgKHJlc3VsdFJlbEluZm8tPnJpX051bUluZGljZXMgPiAwKQorCQlpZiAocnJp LT5yaV9OdW1JbmRpY2VzID4gMCkKIAkJewogCQkJTGlzdAkgICAqcmVjaGVja0luZGV4ZXM7CiAK IAkJCWNzdGF0ZS0+Y3VyX2xpbmVubyA9IGJ1ZmZlci0+bGluZW5vc1tpXTsKLQkJCXJlY2hlY2tJ bmRleGVzID0KLQkJCQlFeGVjSW5zZXJ0SW5kZXhUdXBsZXMocmVzdWx0UmVsSW5mbywKLQkJCQkJ CQkJCSAgYnVmZmVyLT5zbG90c1tpXSwgZXN0YXRlLCBmYWxzZSwgZmFsc2UsCi0JCQkJCQkJCQkg IE5VTEwsIE5JTCk7Ci0JCQlFeGVjQVJJbnNlcnRUcmlnZ2Vycyhlc3RhdGUsIHJlc3VsdFJlbElu Zm8sCi0JCQkJCQkJCSBzbG90c1tpXSwgcmVjaGVja0luZGV4ZXMsCisKKwkJCXJlY2hlY2tJbmRl eGVzID0gRXhlY0luc2VydEluZGV4VHVwbGVzKHJyaSwKKwkJCQkJCQkJCQkJCSAgIGlzdGF0ZS0+ bWlfc2xvdHNbaV0sIGVzdGF0ZSwKKwkJCQkJCQkJCQkJCSAgIGZhbHNlLAorCQkJCQkJCQkJCQkJ ICAgZmFsc2UsCisJCQkJCQkJCQkJCQkgICBOVUxMLAorCQkJCQkJCQkJCQkJICAgTlVMTCk7CisK KwkJCUV4ZWNBUkluc2VydFRyaWdnZXJzKGVzdGF0ZSwgcnJpLAorCQkJCQkJCQkgaXN0YXRlLT5t aV9zbG90c1tpXSwgcmVjaGVja0luZGV4ZXMsCiAJCQkJCQkJCSBjc3RhdGUtPnRyYW5zaXRpb25f Y2FwdHVyZSk7CiAJCQlsaXN0X2ZyZWUocmVjaGVja0luZGV4ZXMpOwogCQl9CkBAIC0zNTUsNzkg KzIzNCw2OSBAQCBDb3B5TXVsdGlJbnNlcnRCdWZmZXJGbHVzaChDb3B5TXVsdGlJbnNlcnRJbmZv ICptaWluZm8sCiAJCSAqIFRoZXJlJ3Mgbm8gaW5kZXhlcywgYnV0IHNlZSBpZiB3ZSBuZWVkIHRv IHJ1biBBRlRFUiBST1cgSU5TRVJUCiAJCSAqIHRyaWdnZXJzIGFueXdheS4KIAkJICovCi0JCWVs c2UgaWYgKHJlc3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjICE9IE5VTEwgJiYKLQkJCQkgKHJlc3Vs dFJlbEluZm8tPnJpX1RyaWdEZXNjLT50cmlnX2luc2VydF9hZnRlcl9yb3cgfHwKLQkJCQkgIHJl c3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjLT50cmlnX2luc2VydF9uZXdfdGFibGUpKQorCQllbHNl IGlmIChycmktPnJpX1RyaWdEZXNjICE9IE5VTEwgJiYKKwkJCQkgKHJyaS0+cmlfVHJpZ0Rlc2Mt PnRyaWdfaW5zZXJ0X2FmdGVyX3JvdyB8fAorCQkJCSBycmktPnJpX1RyaWdEZXNjLT50cmlnX2lu c2VydF9uZXdfdGFibGUpKQogCQl7CiAJCQljc3RhdGUtPmN1cl9saW5lbm8gPSBidWZmZXItPmxp bmVub3NbaV07Ci0JCQlFeGVjQVJJbnNlcnRUcmlnZ2Vycyhlc3RhdGUsIHJlc3VsdFJlbEluZm8s Ci0JCQkJCQkJCSBzbG90c1tpXSwgTklMLCBjc3RhdGUtPnRyYW5zaXRpb25fY2FwdHVyZSk7CisJ CQlFeGVjQVJJbnNlcnRUcmlnZ2Vycyhlc3RhdGUsCisJCQkJCQkJCSBycmksCisJCQkJCQkJCSBp c3RhdGUtPm1pX3Nsb3RzW2ldLAorCQkJCQkJCQkgTlVMTCwKKwkJCQkJCQkJIGNzdGF0ZS0+dHJh bnNpdGlvbl9jYXB0dXJlKTsKIAkJfQotCi0JCUV4ZWNDbGVhclR1cGxlKHNsb3RzW2ldKTsKIAl9 CiAKLQkvKiBNYXJrIHRoYXQgYWxsIHNsb3RzIGFyZSBmcmVlICovCi0JYnVmZmVyLT5udXNlZCA9 IDA7Ci0KIAkvKiByZXNldCBjdXJfbGluZW5vIGFuZCBsaW5lX2J1Zl92YWxpZCB0byB3aGF0IHRo ZXkgd2VyZSAqLwogCWNzdGF0ZS0+bGluZV9idWZfdmFsaWQgPSBsaW5lX2J1Zl92YWxpZDsKIAlj c3RhdGUtPmN1cl9saW5lbm8gPSBzYXZlX2N1cl9saW5lbm87CiB9CiAKIC8qCi0gKiBEcm9wIHVz ZWQgc2xvdHMgYW5kIGZyZWUgbWVtYmVyIGZvciB0aGlzIGJ1ZmZlci4KLSAqCi0gKiBUaGUgYnVm ZmVyIG11c3QgYmUgZmx1c2hlZCBiZWZvcmUgY2xlYW51cC4KKyAqIFN0b3JlIHR1cGxlIGZyb20g dGhlIGluY29taW5nIHNsb3QgaW50byBidWZmZXJlZCBzbG90cy4KICAqLwotc3RhdGljIGlubGlu ZSB2b2lkCi1Db3B5TXVsdGlJbnNlcnRCdWZmZXJDbGVhbnVwKENvcHlNdWx0aUluc2VydEluZm8g Km1paW5mbywKLQkJCQkJCQkgQ29weU11bHRpSW5zZXJ0QnVmZmVyICpidWZmZXIpCitzdGF0aWMg dm9pZAorQ29weU11bHRpSW5zZXJ0QnVmZmVyVHVwbGUoUmVzdWx0UmVsSW5mbyAqcnJpLCBUdXBs ZVRhYmxlU2xvdCAqc2xvdCwKKwkJCQkJCSAgIENvcHlGcm9tU3RhdGUgY3N0YXRlLCBFU3RhdGUg KmVzdGF0ZSkKIHsKLQlpbnQJCQlpOwotCi0JLyogRW5zdXJlIGJ1ZmZlciB3YXMgZmx1c2hlZCAq LwotCUFzc2VydChidWZmZXItPm51c2VkID09IDApOwotCi0JLyogUmVtb3ZlIGJhY2stbGluayB0 byBvdXJzZWxmICovCi0JYnVmZmVyLT5yZXN1bHRSZWxJbmZvLT5yaV9Db3B5TXVsdGlJbnNlcnRC dWZmZXIgPSBOVUxMOwotCi0JRnJlZUJ1bGtJbnNlcnRTdGF0ZShidWZmZXItPmJpc3RhdGUpOwor CUNvcHlNdWx0aUluc2VydEJ1ZmZlciAqYnVmZmVyID0gcnJpLT5yaV9Db3B5TXVsdGlJbnNlcnRC dWZmZXI7CisJVGFibGVJbnNlcnRTdGF0ZSAqaXN0YXRlID0gYnVmZmVyLT5pc3RhdGU7CiAKLQkv KiBTaW5jZSB3ZSBvbmx5IGNyZWF0ZSBzbG90cyBvbiBkZW1hbmQsIGp1c3QgZHJvcCB0aGUgbm9u LW51bGwgb25lcy4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0JVRkZFUkVEX1RVUExFUyAmJiBi dWZmZXItPnNsb3RzW2ldICE9IE5VTEw7IGkrKykKLQkJRXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxl U2xvdChidWZmZXItPnNsb3RzW2ldKTsKKwl0YWJsZV9tdWx0aV9pbnNlcnRfdjIoYnVmZmVyLT5p c3RhdGUsIHNsb3QpOwogCi0JdGFibGVfZmluaXNoX2J1bGtfaW5zZXJ0KGJ1ZmZlci0+cmVzdWx0 UmVsSW5mby0+cmlfUmVsYXRpb25EZXNjLAotCQkJCQkJCSBtaWluZm8tPnRpX29wdGlvbnMpOwor CWJ1ZmZlci0+bGluZW5vc1tpc3RhdGUtPm1pX2N1cl9zbG90cyAtIDFdID0gY3N0YXRlLT5jdXJf bGluZW5vOwogCi0JcGZyZWUoYnVmZmVyKTsKKwlpZiAoaXN0YXRlLT5mbHVzaGVkKQorCQlIYW5k bGVBZnRlclJvd0V2ZW50cyhycmksIGVzdGF0ZSwgY3N0YXRlLCBpc3RhdGUtPm1pX2N1cl9zbG90 cyk7CiB9CiAKIC8qCi0gKiBXcml0ZSBvdXQgYWxsIHN0b3JlZCB0dXBsZXMgaW4gYWxsIGJ1ZmZl cnMgb3V0IHRvIHRoZSB0YWJsZXMuCi0gKgotICogT25jZSBmbHVzaGVkIHdlIGFsc28gdHJpbSB0 aGUgdHJhY2tlZCBidWZmZXJzIGxpc3QgZG93biB0byBzaXplIGJ5IHJlbW92aW5nCi0gKiB0aGUg YnVmZmVycyBjcmVhdGVkIGVhcmxpZXN0IGZpcnN0LgotICoKLSAqIENhbGxlcnMgc2hvdWxkIHBh c3MgJ2N1cnJfcnJpJyBhcyB0aGUgUmVzdWx0UmVsSW5mbyB0aGF0J3MgY3VycmVudGx5IGJlaW5n Ci0gKiB1c2VkLiAgV2hlbiBjbGVhbmluZyB1cCBvbGQgYnVmZmVycyB3ZSdsbCBuZXZlciByZW1v dmUgdGhlIG9uZSBmb3IKLSAqICdjdXJyX3JyaScuCisgKiBGbHVzaCB0dXBsZXMgaW50byB0YWJs ZSBmcm9tIHRoZSBidWZmZXJlZCBzbG90cy4KICAqLwotc3RhdGljIGlubGluZSB2b2lkCi1Db3B5 TXVsdGlJbnNlcnRJbmZvRmx1c2goQ29weU11bHRpSW5zZXJ0SW5mbyAqbWlpbmZvLCBSZXN1bHRS ZWxJbmZvICpjdXJyX3JyaSkKK3N0YXRpYyB2b2lkCitDb3B5TXVsaXRJbnNlcnRGbHVzaEJ1ZmZl cnMoTGlzdCAqKm1pcnJpLCBSZXN1bHRSZWxJbmZvICpjdXJyX3JyaSwKKwkJCQkJCQlDb3B5RnJv bVN0YXRlIGNzdGF0ZSwgRVN0YXRlICplc3RhdGUpCiB7CiAJTGlzdENlbGwgICAqbGM7CisJUmVz dWx0UmVsSW5mbyAqcnJpOworCUNvcHlNdWx0aUluc2VydEJ1ZmZlciAqYnVmZmVyOworCVRhYmxl SW5zZXJ0U3RhdGUgKmlzdGF0ZTsKIAotCWZvcmVhY2gobGMsIG1paW5mby0+bXVsdGlJbnNlcnRC dWZmZXJzKQorCWZvcmVhY2gobGMsICptaXJyaSkKIAl7Ci0JCUNvcHlNdWx0aUluc2VydEJ1ZmZl ciAqYnVmZmVyID0gKENvcHlNdWx0aUluc2VydEJ1ZmZlciAqKSBsZmlyc3QobGMpOworCQlycmkg PSBsZmlyc3QobGMpOworCQlidWZmZXIgPSBycmktPnJpX0NvcHlNdWx0aUluc2VydEJ1ZmZlcjsK KwkJaXN0YXRlID0gYnVmZmVyLT5pc3RhdGU7CisKKwkJdGFibGVfbXVsdGlfaW5zZXJ0X2ZsdXNo KGlzdGF0ZSk7CiAKLQkJQ29weU11bHRpSW5zZXJ0QnVmZmVyRmx1c2gobWlpbmZvLCBidWZmZXIp OworCQlpZiAoaXN0YXRlLT5mbHVzaGVkKQorCQkJSGFuZGxlQWZ0ZXJSb3dFdmVudHMocnJpLCBl c3RhdGUsIGNzdGF0ZSwgaXN0YXRlLT5taV9jdXJfc2xvdHMpOwogCX0KIAotCW1paW5mby0+YnVm ZmVyZWRUdXBsZXMgPSAwOwotCW1paW5mby0+YnVmZmVyZWRCeXRlcyA9IDA7CisJcnJpID0gTlVM TDsKKwlidWZmZXIgPSBOVUxMOworCWlzdGF0ZSA9IE5VTEw7CiAKIAkvKgogCSAqIFRyaW0gdGhl IGxpc3Qgb2YgdHJhY2tlZCBidWZmZXJzIGRvd24gaWYgaXQgZXhjZWVkcyB0aGUgbGltaXQuICBI ZXJlIHdlCkBAIC00MzUsODcgKzMwNCw1OSBAQCBDb3B5TXVsdGlJbnNlcnRJbmZvRmx1c2goQ29w eU11bHRpSW5zZXJ0SW5mbyAqbWlpbmZvLCBSZXN1bHRSZWxJbmZvICpjdXJyX3JyaSkKIAkgKiBs aWtlbHkgdGhhdCB0aGVzZSBvbGRlciBvbmVzIHdpbGwgYmUgbmVlZGVkIHRoYW4gdGhlIG9uZXMg dGhhdCB3ZXJlCiAJICoganVzdCBjcmVhdGVkLgogCSAqLwotCXdoaWxlIChsaXN0X2xlbmd0aCht aWluZm8tPm11bHRpSW5zZXJ0QnVmZmVycykgPiBNQVhfUEFSVElUSU9OX0JVRkZFUlMpCisJd2hp bGUgKGxpc3RfbGVuZ3RoKCptaXJyaSkgPiBNQVhfUEFSVElUSU9OX0JVRkZFUlMpCiAJewotCQlD b3B5TXVsdGlJbnNlcnRCdWZmZXIgKmJ1ZmZlcjsKKwkJaW50IHRpX29wdGlvbnM7CiAKLQkJYnVm ZmVyID0gKENvcHlNdWx0aUluc2VydEJ1ZmZlciAqKSBsaW5pdGlhbChtaWluZm8tPm11bHRpSW5z ZXJ0QnVmZmVycyk7CisJCXJyaSA9IChSZXN1bHRSZWxJbmZvICopIGxpbml0aWFsKCptaXJyaSk7 CiAKIAkJLyoKIAkJICogV2UgbmV2ZXIgd2FudCB0byByZW1vdmUgdGhlIGJ1ZmZlciB0aGF0J3Mg Y3VycmVudGx5IGJlaW5nIHVzZWQsIHNvCiAJCSAqIGlmIHdlIGhhcHBlbiB0byBmaW5kIHRoYXQg dGhlbiBtb3ZlIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuCiAJCSAqLwotCQlpZiAoYnVmZmVy LT5yZXN1bHRSZWxJbmZvID09IGN1cnJfcnJpKQorCQlpZiAocnJpID09IGN1cnJfcnJpKQogCQl7 Ci0JCQltaWluZm8tPm11bHRpSW5zZXJ0QnVmZmVycyA9IGxpc3RfZGVsZXRlX2ZpcnN0KG1paW5m by0+bXVsdGlJbnNlcnRCdWZmZXJzKTsKLQkJCW1paW5mby0+bXVsdGlJbnNlcnRCdWZmZXJzID0g bGFwcGVuZChtaWluZm8tPm11bHRpSW5zZXJ0QnVmZmVycywgYnVmZmVyKTsKLQkJCWJ1ZmZlciA9 IChDb3B5TXVsdGlJbnNlcnRCdWZmZXIgKikgbGluaXRpYWwobWlpbmZvLT5tdWx0aUluc2VydEJ1 ZmZlcnMpOworCQkJKm1pcnJpID0gbGlzdF9kZWxldGVfZmlyc3QoKm1pcnJpKTsKKwkJCSptaXJy aSA9IGxhcHBlbmQoKm1pcnJpLCBycmkpOworCQkJcnJpID0gKFJlc3VsdFJlbEluZm8gKikgbGlu aXRpYWwoKm1pcnJpKTsKIAkJfQogCi0JCUNvcHlNdWx0aUluc2VydEJ1ZmZlckNsZWFudXAobWlp bmZvLCBidWZmZXIpOwotCQltaWluZm8tPm11bHRpSW5zZXJ0QnVmZmVycyA9IGxpc3RfZGVsZXRl X2ZpcnN0KG1paW5mby0+bXVsdGlJbnNlcnRCdWZmZXJzKTsKLQl9Ci19Ci0KLS8qCi0gKiBDbGVh bnVwIGFsbG9jYXRlZCBidWZmZXJzIGFuZCBmcmVlIG1lbW9yeQotICovCi1zdGF0aWMgaW5saW5l IHZvaWQKLUNvcHlNdWx0aUluc2VydEluZm9DbGVhbnVwKENvcHlNdWx0aUluc2VydEluZm8gKm1p aW5mbykKLXsKLQlMaXN0Q2VsbCAgICpsYzsKKwkJYnVmZmVyID0gcnJpLT5yaV9Db3B5TXVsdGlJ bnNlcnRCdWZmZXI7CisJCWlzdGF0ZSA9IGJ1ZmZlci0+aXN0YXRlOworCQl0aV9vcHRpb25zID0g aXN0YXRlLT5vcHRpb25zOwogCi0JZm9yZWFjaChsYywgbWlpbmZvLT5tdWx0aUluc2VydEJ1ZmZl cnMpCi0JCUNvcHlNdWx0aUluc2VydEJ1ZmZlckNsZWFudXAobWlpbmZvLCBsZmlyc3QobGMpKTsK KwkJdGFibGVfaW5zZXJ0X2VuZChpc3RhdGUpOworCQl0YWJsZV9maW5pc2hfYnVsa19pbnNlcnQo cnJpLT5yaV9SZWxhdGlvbkRlc2MsIHRpX29wdGlvbnMpOwogCi0JbGlzdF9mcmVlKG1paW5mby0+ bXVsdGlJbnNlcnRCdWZmZXJzKTsKKwkJKm1pcnJpID0gbGlzdF9kZWxldGVfZmlyc3QoKm1pcnJp KTsKKwl9CiB9CiAKIC8qCi0gKiBHZXQgdGhlIG5leHQgVHVwbGVUYWJsZVNsb3QgdGhhdCB0aGUg bmV4dCB0dXBsZSBzaG91bGQgYmUgc3RvcmVkIGluLgotICoKLSAqIENhbGxlcnMgbXVzdCBlbnN1 cmUgdGhhdCB0aGUgYnVmZmVyIGlzIG5vdCBmdWxsLgotICoKLSAqIE5vdGU6ICdtaWluZm8nIGlz IHVudXNlZCBidXQgaGFzIGJlZW4gaW5jbHVkZWQgZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlCi0g KiBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBhcmVhLgorICogRHJvcCB0aGUgYnVmZmVyZWQgc2xv dHMuCiAgKi8KLXN0YXRpYyBpbmxpbmUgVHVwbGVUYWJsZVNsb3QgKgotQ29weU11bHRpSW5zZXJ0 SW5mb05leHRGcmVlU2xvdChDb3B5TXVsdGlJbnNlcnRJbmZvICptaWluZm8sCi0JCQkJCQkJCVJl c3VsdFJlbEluZm8gKnJyaSkKK3N0YXRpYyB2b2lkCitDb3B5TXVsaXRJbnNlcnREcm9wQnVmZmVy cyhMaXN0ICptaXJyaSkKIHsKLQlDb3B5TXVsdGlJbnNlcnRCdWZmZXIgKmJ1ZmZlciA9IHJyaS0+ cmlfQ29weU11bHRpSW5zZXJ0QnVmZmVyOwotCWludAkJCW51c2VkID0gYnVmZmVyLT5udXNlZDsK LQotCUFzc2VydChidWZmZXIgIT0gTlVMTCk7Ci0JQXNzZXJ0KG51c2VkIDwgTUFYX0JVRkZFUkVE X1RVUExFUyk7CisJTGlzdENlbGwgICAqbGM7CiAKLQlpZiAoYnVmZmVyLT5zbG90c1tudXNlZF0g PT0gTlVMTCkKLQkJYnVmZmVyLT5zbG90c1tudXNlZF0gPSB0YWJsZV9zbG90X2NyZWF0ZShycmkt PnJpX1JlbGF0aW9uRGVzYywgTlVMTCk7Ci0JcmV0dXJuIGJ1ZmZlci0+c2xvdHNbbnVzZWRdOwot fQorCWZvcmVhY2gobGMsIG1pcnJpKQorCXsKKwkJaW50IHRpX29wdGlvbnM7CisJCVJlc3VsdFJl bEluZm8gKnJyaSA9IGxmaXJzdChsYyk7CisJCUNvcHlNdWx0aUluc2VydEJ1ZmZlciAqYnVmZmVy ID0gcnJpLT5yaV9Db3B5TXVsdGlJbnNlcnRCdWZmZXI7CisJCVRhYmxlSW5zZXJ0U3RhdGUgKmlz dGF0ZSA9IGJ1ZmZlci0+aXN0YXRlOwogCi0vKgotICogUmVjb3JkIHRoZSBwcmV2aW91c2x5IHJl c2VydmVkIFR1cGxlVGFibGVTbG90IHRoYXQgd2FzIHJlc2VydmVkIGJ5Ci0gKiBDb3B5TXVsdGlJ bnNlcnRJbmZvTmV4dEZyZWVTbG90IGFzIGJlaW5nIGNvbnN1bWVkLgotICovCi1zdGF0aWMgaW5s aW5lIHZvaWQKLUNvcHlNdWx0aUluc2VydEluZm9TdG9yZShDb3B5TXVsdGlJbnNlcnRJbmZvICpt aWluZm8sIFJlc3VsdFJlbEluZm8gKnJyaSwKLQkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCwg aW50IHR1cGxlbiwgdWludDY0IGxpbmVubykKLXsKLQlDb3B5TXVsdGlJbnNlcnRCdWZmZXIgKmJ1 ZmZlciA9IHJyaS0+cmlfQ29weU11bHRpSW5zZXJ0QnVmZmVyOworCQl0aV9vcHRpb25zID0gaXN0 YXRlLT5vcHRpb25zOwogCi0JQXNzZXJ0KGJ1ZmZlciAhPSBOVUxMKTsKLQlBc3NlcnQoc2xvdCA9 PSBidWZmZXItPnNsb3RzW2J1ZmZlci0+bnVzZWRdKTsKKwkJdGFibGVfaW5zZXJ0X2VuZChpc3Rh dGUpOwogCi0JLyogU3RvcmUgdGhlIGxpbmUgbnVtYmVyIHNvIHdlIGNhbiBwcm9wZXJseSByZXBv cnQgYW55IGVycm9ycyBsYXRlciAqLwotCWJ1ZmZlci0+bGluZW5vc1tidWZmZXItPm51c2VkXSA9 IGxpbmVubzsKKwkJdGFibGVfZmluaXNoX2J1bGtfaW5zZXJ0KHJyaS0+cmlfUmVsYXRpb25EZXNj LCB0aV9vcHRpb25zKTsKIAotCS8qIFJlY29yZCB0aGlzIHNsb3QgYXMgYmVpbmcgdXNlZCAqLwot CWJ1ZmZlci0+bnVzZWQrKzsKKwkJcGZyZWUoYnVmZmVyKTsKKwl9CiAKLQkvKiBVcGRhdGUgaG93 IG1hbnkgdHVwbGVzIGFyZSBzdG9yZWQgYW5kIHRoZWlyIHNpemUgKi8KLQltaWluZm8tPmJ1ZmZl cmVkVHVwbGVzKys7Ci0JbWlpbmZvLT5idWZmZXJlZEJ5dGVzICs9IHR1cGxlbjsKKwlsaXN0X2Zy ZWUobWlycmkpOwogfQogCiAvKgpAQCAtNTMwLDIxICszNzEsMjEgQEAgQ29weUZyb20oQ29weUZy b21TdGF0ZSBjc3RhdGUpCiAJRVN0YXRlCSAgICplc3RhdGUgPSBDcmVhdGVFeGVjdXRvclN0YXRl KCk7IC8qIGZvciBFeGVjQ29uc3RyYWludHMoKSAqLwogCU1vZGlmeVRhYmxlU3RhdGUgKm10c3Rh dGU7CiAJRXhwckNvbnRleHQgKmVjb250ZXh0OwotCVR1cGxlVGFibGVTbG90ICpzaW5nbGVzbG90 ID0gTlVMTDsKKwlUdXBsZVRhYmxlU2xvdCAqc2xvdCA9IE5VTEw7CiAJTWVtb3J5Q29udGV4dCBv bGRjb250ZXh0ID0gQ3VycmVudE1lbW9yeUNvbnRleHQ7CiAKIAlQYXJ0aXRpb25UdXBsZVJvdXRp bmcgKnByb3V0ZSA9IE5VTEw7CiAJRXJyb3JDb250ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2s7CiAJ Q29tbWFuZElkCW15Y2lkID0gR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKTsKIAlpbnQJCQl0aV9v cHRpb25zID0gMDsgLyogc3RhcnQgd2l0aCBkZWZhdWx0IG9wdGlvbnMgZm9yIGluc2VydCAqLwot CUJ1bGtJbnNlcnRTdGF0ZSBiaXN0YXRlID0gTlVMTDsKIAlDb3B5SW5zZXJ0TWV0aG9kIGluc2Vy dE1ldGhvZDsKLQlDb3B5TXVsdGlJbnNlcnRJbmZvIG11bHRpSW5zZXJ0SW5mbyA9IHswfTsJLyog cGFjaWZ5IGNvbXBpbGVyICovCiAJaW50NjQJCXByb2Nlc3NlZCA9IDA7CiAJaW50NjQJCWV4Y2x1 ZGVkID0gMDsKIAlib29sCQloYXNfYmVmb3JlX2luc2VydF9yb3dfdHJpZzsKIAlib29sCQloYXNf aW5zdGVhZF9pbnNlcnRfcm93X3RyaWc7CiAJYm9vbAkJbGVhZnBhcnRfdXNlX211bHRpX2luc2Vy dCA9IGZhbHNlOworCUxpc3QgICAgICAgKm11bHRpX2luc2VydF9ycmlzID0gTlVMTDsKKwlUYWJs ZUluc2VydFN0YXRlICppc3RhdGUgPSBOVUxMOwogCiAJQXNzZXJ0KGNzdGF0ZS0+cmVsKTsKIAlB c3NlcnQobGlzdF9sZW5ndGgoY3N0YXRlLT5yYW5nZV90YWJsZSkgPT0gMSk7CkBAIC03MjksNyAr NTcwLDcgQEAgQ29weUZyb20oQ29weUZyb21TdGF0ZSBjc3RhdGUpCiAJCSAqIEZvciBwYXJ0aXRp b25lZCB0YWJsZXMgd2UgY2FuJ3Qgc3VwcG9ydCBtdWx0aS1pbnNlcnRzIHdoZW4gdGhlcmUKIAkJ ICogYXJlIGFueSBzdGF0ZW1lbnQgbGV2ZWwgaW5zZXJ0IHRyaWdnZXJzLiBJdCBtaWdodCBiZSBw b3NzaWJsZSB0bwogCQkgKiBhbGxvdyBwYXJ0aXRpb25lZCB0YWJsZXMgd2l0aCBzdWNoIHRyaWdn ZXJzIGluIHRoZSBmdXR1cmUsIGJ1dCBmb3IKLQkJICogbm93LCBDb3B5TXVsdGlJbnNlcnRJbmZv Rmx1c2ggZXhwZWN0cyB0aGF0IGFueSBiZWZvcmUgcm93IGluc2VydAorCQkgKiBub3csIENvcHlN dWxpdEluc2VydEZsdXNoQnVmZmVycyBleHBlY3RzIHRoYXQgYW55IGJlZm9yZSByb3cgaW5zZXJ0 CiAJCSAqIGFuZCBzdGF0ZW1lbnQgbGV2ZWwgaW5zZXJ0IHRyaWdnZXJzIGFyZSBvbiB0aGUgc2Ft ZSByZWxhdGlvbi4KIAkJICovCiAJCWluc2VydE1ldGhvZCA9IENJTV9TSU5HTEU7CkBAIC03Nzcs MjIgKzYxOCwyMiBAQCBDb3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSkKIAkJZWxzZQogCQkJ aW5zZXJ0TWV0aG9kID0gQ0lNX01VTFRJOwogCi0JCUNvcHlNdWx0aUluc2VydEluZm9Jbml0KCZt dWx0aUluc2VydEluZm8sIHJlc3VsdFJlbEluZm8sIGNzdGF0ZSwKLQkJCQkJCQkJZXN0YXRlLCBt eWNpZCwgdGlfb3B0aW9ucyk7CisJCS8qCisJCSogT25seSBzZXR1cCB0aGUgYnVmZmVyIHdoZW4g bm90IGRlYWxpbmcgd2l0aCBhIHBhcnRpdGlvbmVkIHRhYmxlLgorCQkqIEJ1ZmZlcnMgZm9yIHBh cnRpdGlvbmVkIHRhYmxlcyB3aWxsIGp1c3QgYmUgc2V0dXAgd2hlbiB3ZSBuZWVkIHRvCisJCSog c2VuZCB0dXBsZXMgdGhlaXIgd2F5IGZvciB0aGUgZmlyc3QgdGltZS4KKwkJKi8KKwkJaWYgKCFw cm91dGUpCisJCQlJbml0Q29weU11bHRpSW5zZXJ0QnVmZmVySW5mbygmbXVsdGlfaW5zZXJ0X3Jy aXMsIHJlc3VsdFJlbEluZm8sCisJCQkJCQkJCQkJICBteWNpZCwgdGlfb3B0aW9ucyk7CiAJfQog CiAJLyoKLQkgKiBJZiBub3QgdXNpbmcgYmF0Y2ggbW9kZSAod2hpY2ggYWxsb2NhdGVzIHNsb3Rz IGFzIG5lZWRlZCkgc2V0IHVwIGEKLQkgKiB0dXBsZSBzbG90IHRvby4gV2hlbiBpbnNlcnRpbmcg aW50byBhIHBhcnRpdGlvbmVkIHRhYmxlLCB3ZSBhbHNvIG5lZWQKLQkgKiBvbmUsIGV2ZW4gaWYg d2UgbWlnaHQgYmF0Y2ggaW5zZXJ0LCB0byByZWFkIHRoZSB0dXBsZSBpbiB0aGUgcm9vdAotCSAq IHBhcnRpdGlvbidzIGZvcm0uCisJICogU2V0IHVwIGEgdHVwbGUgc2xvdCB0byB3aGljaCB0aGUg aW5wdXQgZGF0YSBmcm9tIGNvcHkgc3RyZWFtIGlzIHJlYWQKKwkgKiBpbnRvIGFuZCB1c2VkIGZv ciBpbnNlcnRzIGludG8gdGFibGUuCiAJICovCi0JaWYgKGluc2VydE1ldGhvZCA9PSBDSU1fU0lO R0xFIHx8IGluc2VydE1ldGhvZCA9PSBDSU1fTVVMVElfQ09ORElUSU9OQUwpCi0JewotCQlzaW5n bGVzbG90ID0gdGFibGVfc2xvdF9jcmVhdGUocmVzdWx0UmVsSW5mby0+cmlfUmVsYXRpb25EZXNj LAotCQkJCQkJCQkJICAgJmVzdGF0ZS0+ZXNfdHVwbGVUYWJsZSk7Ci0JCWJpc3RhdGUgPSBHZXRC dWxrSW5zZXJ0U3RhdGUoKTsKLQl9CisJc2xvdCA9IHRhYmxlX3Nsb3RfY3JlYXRlKHJlc3VsdFJl bEluZm8tPnJpX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkgJmVzdGF0ZS0+ZXNfdHVwbGVUYWJsZSk7 CiAKIAloYXNfYmVmb3JlX2luc2VydF9yb3dfdHJpZyA9IChyZXN1bHRSZWxJbmZvLT5yaV9Ucmln RGVzYyAmJgogCQkJCQkJCQkgIHJlc3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjLT50cmlnX2luc2Vy dF9iZWZvcmVfcm93KTsKQEAgLTgzMCwxOSArNjcxLDggQEAgQ29weUZyb20oQ29weUZyb21TdGF0 ZSBjc3RhdGUpCiAJCVJlc2V0UGVyVHVwbGVFeHByQ29udGV4dChlc3RhdGUpOwogCiAJCS8qIHNl bGVjdCBzbG90IHRvIChpbml0aWFsbHkpIGxvYWQgcm93IGludG8gKi8KLQkJaWYgKGluc2VydE1l dGhvZCA9PSBDSU1fU0lOR0xFIHx8IHByb3V0ZSkKLQkJewotCQkJbXlzbG90ID0gc2luZ2xlc2xv dDsKLQkJCUFzc2VydChteXNsb3QgIT0gTlVMTCk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlBc3Nl cnQocmVzdWx0UmVsSW5mbyA9PSB0YXJnZXRfcmVzdWx0UmVsSW5mbyk7Ci0JCQlBc3NlcnQoaW5z ZXJ0TWV0aG9kID09IENJTV9NVUxUSSk7Ci0KLQkJCW15c2xvdCA9IENvcHlNdWx0aUluc2VydElu Zm9OZXh0RnJlZVNsb3QoJm11bHRpSW5zZXJ0SW5mbywKLQkJCQkJCQkJCQkJCQkgcmVzdWx0UmVs SW5mbyk7Ci0JCX0KKwkJbXlzbG90ID0gc2xvdDsKKwkJQXNzZXJ0KG15c2xvdCAhPSBOVUxMKTsK IAogCQkvKgogCQkgKiBTd2l0Y2ggdG8gcGVyLXR1cGxlIGNvbnRleHQgYmVmb3JlIGNhbGxpbmcg TmV4dENvcHlGcm9tLCB3aGljaCBkb2VzCkBAIC05MTgsMjEgKzc0OCwyMiBAQCBDb3B5RnJvbShD b3B5RnJvbVN0YXRlIGNzdGF0ZSkKIAkJCQlpZiAobGVhZnBhcnRfdXNlX211bHRpX2luc2VydCkK IAkJCQl7CiAJCQkJCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9Db3B5TXVsdGlJbnNlcnRCdWZmZXIg PT0gTlVMTCkKLQkJCQkJCUNvcHlNdWx0aUluc2VydEluZm9TZXR1cEJ1ZmZlcigmbXVsdGlJbnNl cnRJbmZvLAotCQkJCQkJCQkJCQkJCSAgIHJlc3VsdFJlbEluZm8pOworCQkJCQkJSW5pdENvcHlN dWx0aUluc2VydEJ1ZmZlckluZm8oJm11bHRpX2luc2VydF9ycmlzLAorCQkJCQkJCQkJCQkJCSAg cmVzdWx0UmVsSW5mbywgbXljaWQsCisJCQkJCQkJCQkJCQkJICB0aV9vcHRpb25zKTsKIAkJCQl9 Ci0JCQkJZWxzZSBpZiAoaW5zZXJ0TWV0aG9kID09IENJTV9NVUxUSV9DT05ESVRJT05BTCAmJgot CQkJCQkJICFDb3B5TXVsdGlJbnNlcnRJbmZvSXNFbXB0eSgmbXVsdGlJbnNlcnRJbmZvKSkKKwkJ CQllbHNlIGlmIChpbnNlcnRNZXRob2QgPT0gQ0lNX01VTFRJX0NPTkRJVElPTkFMKQogCQkJCXsK IAkJCQkJLyoKIAkJCQkJICogRmx1c2ggcGVuZGluZyBpbnNlcnRzIGlmIHRoaXMgcGFydGl0aW9u IGNhbid0IHVzZQogCQkJCQkgKiBiYXRjaGluZywgc28gcm93cyBhcmUgdmlzaWJsZSB0byB0cmln Z2VycyBldGMuCiAJCQkJCSAqLwotCQkJCQlDb3B5TXVsdGlJbnNlcnRJbmZvRmx1c2goJm11bHRp SW5zZXJ0SW5mbywgcmVzdWx0UmVsSW5mbyk7CisJCQkJCUNvcHlNdWxpdEluc2VydEZsdXNoQnVm ZmVycygmbXVsdGlfaW5zZXJ0X3JyaXMsCisJCQkJCQkJCQkJCQlyZXN1bHRSZWxJbmZvLCBjc3Rh dGUsIGVzdGF0ZSk7CiAJCQkJfQogCi0JCQkJaWYgKGJpc3RhdGUgIT0gTlVMTCkKLQkJCQkJUmVs ZWFzZUJ1bGtJbnNlcnRTdGF0ZVBpbihiaXN0YXRlKTsKKwkJCQlpZiAoaXN0YXRlICYmIGlzdGF0 ZS0+YmlzdGF0ZSkKKwkJCQkJUmVsZWFzZUJ1bGtJbnNlcnRTdGF0ZVBpbihpc3RhdGUtPmJpc3Rh dGUpOwogCQkJCXByZXZSZXN1bHRSZWxJbmZvID0gcmVzdWx0UmVsSW5mbzsKIAkJCX0KIApAQCAt OTc0LDggKzgwNSw4IEBAIENvcHlGcm9tKENvcHlGcm9tU3RhdGUgY3N0YXRlKQogCQkJCS8qIG5v IG90aGVyIHBhdGggYXZhaWxhYmxlIGZvciBwYXJ0aXRpb25lZCB0YWJsZSAqLwogCQkJCUFzc2Vy dChpbnNlcnRNZXRob2QgPT0gQ0lNX01VTFRJX0NPTkRJVElPTkFMKTsKIAotCQkJCWJhdGNoc2xv dCA9IENvcHlNdWx0aUluc2VydEluZm9OZXh0RnJlZVNsb3QoJm11bHRpSW5zZXJ0SW5mbywKLQkJ CQkJCQkJCQkJCQkJCXJlc3VsdFJlbEluZm8pOworCQkJCWJhdGNoc2xvdCA9IHRhYmxlX3Nsb3Rf Y3JlYXRlKHJlc3VsdFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJCQkJICAmZXN0 YXRlLT5lc190dXBsZVRhYmxlKTsKIAogCQkJCWlmIChtYXAgIT0gTlVMTCkKIAkJCQkJbXlzbG90 ID0gZXhlY3V0ZV9hdHRyX21hcF9zbG90KG1hcC0+YXR0ck1hcCwgbXlzbG90LApAQCAtMTA0Nywy NCArODc4LDkgQEAgQ29weUZyb20oQ29weUZyb21TdGF0ZSBjc3RhdGUpCiAJCQkJLyogU3RvcmUg dGhlIHNsb3QgaW4gdGhlIG11bHRpLWluc2VydCBidWZmZXIsIHdoZW4gZW5hYmxlZC4gKi8KIAkJ CQlpZiAoaW5zZXJ0TWV0aG9kID09IENJTV9NVUxUSSB8fCBsZWFmcGFydF91c2VfbXVsdGlfaW5z ZXJ0KQogCQkJCXsKLQkJCQkJLyoKLQkJCQkJICogVGhlIHNsb3QgcHJldmlvdXNseSBtaWdodCBw b2ludCBpbnRvIHRoZSBwZXItdHVwbGUKLQkJCQkJICogY29udGV4dC4gRm9yIGJhdGNoaW5nIGl0 IG5lZWRzIHRvIGJlIGxvbmdlciBsaXZlZC4KLQkJCQkJICovCi0JCQkJCUV4ZWNNYXRlcmlhbGl6 ZVNsb3QobXlzbG90KTsKLQogCQkJCQkvKiBBZGQgdGhpcyB0dXBsZSB0byB0aGUgdHVwbGUgYnVm ZmVyICovCi0JCQkJCUNvcHlNdWx0aUluc2VydEluZm9TdG9yZSgmbXVsdGlJbnNlcnRJbmZvLAot CQkJCQkJCQkJCQkgcmVzdWx0UmVsSW5mbywgbXlzbG90LAotCQkJCQkJCQkJCQkgY3N0YXRlLT5s aW5lX2J1Zi5sZW4sCi0JCQkJCQkJCQkJCSBjc3RhdGUtPmN1cl9saW5lbm8pOwotCi0JCQkJCS8q Ci0JCQkJCSAqIElmIGVub3VnaCBpbnNlcnRzIGhhdmUgcXVldWVkIHVwLCB0aGVuIGZsdXNoIGFs bAotCQkJCQkgKiBidWZmZXJzIG91dCB0byB0aGVpciB0YWJsZXMuCi0JCQkJCSAqLwotCQkJCQlp ZiAoQ29weU11bHRpSW5zZXJ0SW5mb0lzRnVsbCgmbXVsdGlJbnNlcnRJbmZvKSkKLQkJCQkJCUNv cHlNdWx0aUluc2VydEluZm9GbHVzaCgmbXVsdGlJbnNlcnRJbmZvLCByZXN1bHRSZWxJbmZvKTsK KwkJCQkJQ29weU11bHRpSW5zZXJ0QnVmZmVyVHVwbGUocmVzdWx0UmVsSW5mbywgbXlzbG90LCBj c3RhdGUsCisJCQkJCQkJCQkJCSAgIGVzdGF0ZSk7CiAJCQkJfQogCQkJCWVsc2UKIAkJCQl7CkBA IC0xMDkwLDkgKzkwNiwxOSBAQCBDb3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSkKIAkJCQkJ fQogCQkJCQllbHNlCiAJCQkJCXsKKwkJCQkJCWlmICghaXN0YXRlKQorCQkJCQkJeworCQkJCQkJ CWlzdGF0ZSA9IHRhYmxlX2luc2VydF9iZWdpbihyZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRl c2MsCisJCQkJCQkJCQkJCQkJCW15Y2lkLAorCQkJCQkJCQkJCQkJCQl0aV9vcHRpb25zLAorCQkJ CQkJCQkJCQkJCQl0cnVlLAorCQkJCQkJCQkJCQkJCQlmYWxzZSk7CisJCQkJCQl9CisKKwkJCQkJ CWlzdGF0ZS0+cmVsID0gcmVzdWx0UmVsSW5mby0+cmlfUmVsYXRpb25EZXNjOworCiAJCQkJCQkv KiBPSywgc3RvcmUgdGhlIHR1cGxlIGFuZCBjcmVhdGUgaW5kZXggZW50cmllcyBmb3IgaXQgKi8K LQkJCQkJCXRhYmxlX3R1cGxlX2luc2VydChyZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2Ms Ci0JCQkJCQkJCQkJICAgbXlzbG90LCBteWNpZCwgdGlfb3B0aW9ucywgYmlzdGF0ZSk7CisJCQkJ CQl0YWJsZV90dXBsZV9pbnNlcnRfdjIoaXN0YXRlLCBteXNsb3QpOwogCiAJCQkJCQlpZiAocmVz dWx0UmVsSW5mby0+cmlfTnVtSW5kaWNlcyA+IDApCiAJCQkJCQkJcmVjaGVja0luZGV4ZXMgPSBF eGVjSW5zZXJ0SW5kZXhUdXBsZXMocmVzdWx0UmVsSW5mbywKQEAgLTExMjUsMTYgKzk1MSwxNCBA QCBDb3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSkKIAogCS8qIEZsdXNoIGFueSByZW1haW5p bmcgYnVmZmVyZWQgdHVwbGVzICovCiAJaWYgKGluc2VydE1ldGhvZCAhPSBDSU1fU0lOR0xFKQot CXsKLQkJaWYgKCFDb3B5TXVsdGlJbnNlcnRJbmZvSXNFbXB0eSgmbXVsdGlJbnNlcnRJbmZvKSkK LQkJCUNvcHlNdWx0aUluc2VydEluZm9GbHVzaCgmbXVsdGlJbnNlcnRJbmZvLCBOVUxMKTsKLQl9 CisJCUNvcHlNdWxpdEluc2VydEZsdXNoQnVmZmVycygmbXVsdGlfaW5zZXJ0X3JyaXMsIHJlc3Vs dFJlbEluZm8sCisJCQkJCQkJCQljc3RhdGUsIGVzdGF0ZSk7CiAKIAkvKiBEb25lLCBjbGVhbiB1 cCAqLwogCWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsKIAotCWlm IChiaXN0YXRlICE9IE5VTEwpCi0JCUZyZWVCdWxrSW5zZXJ0U3RhdGUoYmlzdGF0ZSk7CisJaWYg KGlzdGF0ZSkKKwkJdGFibGVfaW5zZXJ0X2VuZChpc3RhdGUpOwogCiAJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZGNvbnRleHQpOwogCkBAIC0xMTU0LDcgKzk3OCw3IEBAIENvcHlGcm9tKENvcHlG cm9tU3RhdGUgY3N0YXRlKQogCiAJLyogVGVhciBkb3duIHRoZSBtdWx0aS1pbnNlcnQgYnVmZmVy IGRhdGEgKi8KIAlpZiAoaW5zZXJ0TWV0aG9kICE9IENJTV9TSU5HTEUpCi0JCUNvcHlNdWx0aUlu c2VydEluZm9DbGVhbnVwKCZtdWx0aUluc2VydEluZm8pOworCQlDb3B5TXVsaXRJbnNlcnREcm9w QnVmZmVycyhtdWx0aV9pbnNlcnRfcnJpcyk7CiAKIAkvKiBDbG9zZSBhbGwgdGhlIHBhcnRpdGlv bmVkIHRhYmxlcywgbGVhZiBwYXJ0aXRpb25zLCBhbmQgdGhlaXIgaW5kaWNlcyAqLwogCWlmIChw cm91dGUpCi0tIAoyLjI1LjEKCg== --0000000000004d842705c04c1689--