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 1oAkUz-0006eT-DB for pgsql-hackers@arkaria.postgresql.org; Mon, 11 Jul 2022 03:54:18 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oAkUx-0002Ya-KX for pgsql-hackers@arkaria.postgresql.org; Mon, 11 Jul 2022 03:54:15 +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 1oAkUx-0002YO-1q for pgsql-hackers@lists.postgresql.org; Mon, 11 Jul 2022 03:54:15 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by magus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oAkUu-00016q-0E for pgsql-hackers@postgresql.org; Mon, 11 Jul 2022 03:54:14 +0000 Received: from [192.168.28.53] (cyclops.postgrespro.ru [93.174.131.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id D513421C05AC; Mon, 11 Jul 2022 06:54:09 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1657511650; bh=5NS/gO16OcchgOMQCs3vUSs9ontrm922c064p8XYMEQ=; h=Date:Subject:To:Cc:References:From:In-Reply-To; b=nCvnQKnyxR3L2ljTWGuCTDM13XIjR+KSg2aPUW3WqW39QUxOGx2Hs/4da3p1SqUyX 0ECkTEyii3UM3VlOfkE5a32QSnN1qTL7AYHP2upVdeVJQAoPXu7vmwIdRPWbTZR15j d3iLinFyNhJtP9Z7iFU/FRWSCME1gTb57uH7qhmI= Content-Type: multipart/mixed; boundary="------------gM9fzxPyLSSC2RqWgxqd0Hu6" Message-ID: Date: Mon, 11 Jul 2022 08:54:08 +0500 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: Re: Fast COPY FROM based on batch insert Content-Language: en-US To: Ian Barwick Cc: Justin Pryzby , Zhihong Yu , Amit Langote , tanghy.fnst@fujitsu.com, Ashutosh Bapat , Pg Hackers , Tomas Vondra , Etsuro Fujita , houzj.fnst@fujitsu.com References: <20210323032322.GW4203@telsasoft.com> <20210409004956.GN6592@telsasoft.com> <45ad1b94-339b-a841-8885-67ebe6fc5bc1@postgrespro.ru> <065fde84-f688-c411-28eb-a3b9084b38b7@enterprisedb.com> <811b36f0-8888-7036-f4c5-0bfbdfad0bbf@postgrespro.ru> <17be446f-65a5-b49e-e57c-5629431e26b1@enterprisedb.com> <4ad1dcea-0eef-6ad4-8314-589dbceeebc5@enterprisedb.com> From: Andrey Lepikhov Organization: Postgres Professional In-Reply-To: <4ad1dcea-0eef-6ad4-8314-589dbceeebc5@enterprisedb.com> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------gM9fzxPyLSSC2RqWgxqd0Hu6 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 11/7/2022 04:12, Ian Barwick wrote: > On 09/07/2022 00:09, Andrey Lepikhov wrote: >> On 8/7/2022 05:12, Ian Barwick wrote: >>>      ERROR:  bind message supplies 0 parameters, but prepared >>> statement "pgsql_fdw_prep_178" requires 6 >>>      CONTEXT:  remote SQL command: INSERT INTO public.foo_part_1(t, >>> v1, v2, v3, v4, v5) VALUES ($1, $2, $3, $4, $5, $6) >>>      COPY foo, line 88160 >> Thanks, I got it. MultiInsertBuffer are created on the first non-zero >> flush of tuples into the partition and isn't deleted from the buffers >> list until the end of COPY. And on a subsequent flush in the case of >> empty buffer we catch the error. >> Your fix is correct, but I want to propose slightly different change >> (see in attachment). > > LGTM. New version (with aforementioned changes) is attached. -- regards, Andrey Lepikhov Postgres Professional --------------gM9fzxPyLSSC2RqWgxqd0Hu6 Content-Type: text/plain; charset=UTF-8; name="v4-0001-Implementation-of-a-Bulk-COPY-FROM.patch" Content-Disposition: attachment; filename="v4-0001-Implementation-of-a-Bulk-COPY-FROM.patch" Content-Transfer-Encoding: base64 RnJvbSA5NzY1NjBmMmFkNDA2YWRiYTFhYWY1OGExODhiNDQzMDI4NTVlZTEyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiQW5kcmV5IFYuIExlcGlraG92IiA8YS5sZXBpa2hv dkBwb3N0Z3Jlc3Byby5ydT4KRGF0ZTogRnJpLCA0IEp1biAyMDIxIDEzOjIxOjQzICswNTAw ClN1YmplY3Q6IFtQQVRDSF0gSW1wbGVtZW50YXRpb24gb2YgYSBCdWxrIENPUFkgRlJPTSBv cGVyYXRpb24gaW50byBmb3JlaWduCiB0YWJsZS4KCi0tLQogLi4uL3Bvc3RncmVzX2Zkdy9l eHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0ICAgIHwgIDQ1ICsrKy0KIGNvbnRyaWIvcG9zdGdy ZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsICAgICB8ICA0NyArKysrCiBzcmMvYmFja2Vu ZC9jb21tYW5kcy9jb3B5ZnJvbS5jICAgICAgICAgICAgICAgfCAyMTEgKysrKysrKystLS0t LS0tLS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jICAgICAgICAgICAgICAg fCAgNDUgKysrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jICAgICAg ICAgIHwgICA4ICsKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHlmcm9tX2ludGVybmFsLmgg ICAgICB8ICAxMCAtCiBzcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oICAgICAgICAg ICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgICAg ICAgICAgIHwgICA1ICstCiA4IGZpbGVzIGNoYW5nZWQsIDIzOCBpbnNlcnRpb25zKCspLCAx MzQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhw ZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dCBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVk L3Bvc3RncmVzX2Zkdy5vdXQKaW5kZXggNDQ0NTdmOTMwYy4uYWNlZDlhNjQyOCAxMDA2NDQK LS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dAor KysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CkBA IC04NDM1LDYgKzg0MzUsNyBAQCBkcm9wIHRhYmxlIGxvY3QyOwogLS0gPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQogLS0gdGVzdCBDT1BZIEZST00KIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2FsdGVyIHNlcnZlciBs b29wYmFjayBvcHRpb25zIChhZGQgYmF0Y2hfc2l6ZSAnMicpOwogY3JlYXRlIHRhYmxlIGxv YzIgKGYxIGludCwgZjIgdGV4dCk7CiBhbHRlciB0YWJsZSBsb2MyIHNldCAoYXV0b3ZhY3V1 bV9lbmFibGVkID0gJ2ZhbHNlJyk7CiBjcmVhdGUgZm9yZWlnbiB0YWJsZSByZW0yIChmMSBp bnQsIGYyIHRleHQpIHNlcnZlciBsb29wYmFjayBvcHRpb25zKHRhYmxlX25hbWUgJ2xvYzIn KTsKQEAgLTg0NTcsNyArODQ1OCw3IEBAIGNvcHkgcmVtMiBmcm9tIHN0ZGluOyAtLSBFUlJP UgogRVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAibG9jMiIgdmlvbGF0ZXMgY2hlY2sg Y29uc3RyYWludCAibG9jMl9mMXBvc2l0aXZlIgogREVUQUlMOiAgRmFpbGluZyByb3cgY29u dGFpbnMgKC0xLCB4eXp6eSkuCiBDT05URVhUOiAgcmVtb3RlIFNRTCBjb21tYW5kOiBJTlNF UlQgSU5UTyBwdWJsaWMubG9jMihmMSwgZjIpIFZBTFVFUyAoJDEsICQyKQotQ09QWSByZW0y LCBsaW5lIDE6ICItMQl4eXp6eSIKK0NPUFkgcmVtMiwgbGluZSAyCiBzZWxlY3QgKiBmcm9t IHJlbTI7CiAgZjEgfCBmMiAgCiAtLS0tKy0tLS0tCkBAIC04NDY4LDYgKzg0NjksMTkgQEAg c2VsZWN0ICogZnJvbSByZW0yOwogYWx0ZXIgZm9yZWlnbiB0YWJsZSByZW0yIGRyb3AgY29u c3RyYWludCByZW0yX2YxcG9zaXRpdmU7CiBhbHRlciB0YWJsZSBsb2MyIGRyb3AgY29uc3Ry YWludCBsb2MyX2YxcG9zaXRpdmU7CiBkZWxldGUgZnJvbSByZW0yOworY3JlYXRlIHRhYmxl IGZvbyAoYSBpbnQpIHBhcnRpdGlvbiBieSBsaXN0IChhKTsKK2NyZWF0ZSB0YWJsZSBmb28x IChsaWtlIGZvbyk7CitjcmVhdGUgZm9yZWlnbiB0YWJsZSBmZm9vMSBwYXJ0aXRpb24gb2Yg Zm9vIGZvciB2YWx1ZXMgaW4gKDEpCisJc2VydmVyIGxvb3BiYWNrIG9wdGlvbnMgKHRhYmxl X25hbWUgJ2ZvbzEnKTsKK2NyZWF0ZSB0YWJsZSBmb28yIChsaWtlIGZvbyk7CitjcmVhdGUg Zm9yZWlnbiB0YWJsZSBmZm9vMiBwYXJ0aXRpb24gb2YgZm9vIGZvciB2YWx1ZXMgaW4gKDIp CisJc2VydmVyIGxvb3BiYWNrIG9wdGlvbnMgKHRhYmxlX25hbWUgJ2ZvbzInKTsKK2NyZWF0 ZSBmdW5jdGlvbiBwcmludF9uZXdfcm93KCkgcmV0dXJucyB0cmlnZ2VyIGxhbmd1YWdlIHBs cGdzcWwgYXMgJCQKKwliZWdpbiByYWlzZSBub3RpY2UgJyUnLCBuZXc7IHJldHVybiBuZXc7 IGVuZDsgJCQ7CitjcmVhdGUgdHJpZ2dlciBmZm9vMV9icl90cmlnIGJlZm9yZSBpbnNlcnQg b24gZmZvbzEKKwlmb3IgZWFjaCByb3cgZXhlY3V0ZSBmdW5jdGlvbiBwcmludF9uZXdfcm93 KCk7Citjb3B5IGZvbyBmcm9tIHN0ZGluOworTk9USUNFOiAgKDEpCiAtLSBUZXN0IGxvY2Fs IHRyaWdnZXJzCiBjcmVhdGUgdHJpZ2dlciB0cmlnX3N0bXRfYmVmb3JlIGJlZm9yZSBpbnNl cnQgb24gcmVtMgogCWZvciBlYWNoIHN0YXRlbWVudCBleGVjdXRlIHByb2NlZHVyZSB0cmln Z2VyX2Z1bmMoKTsKQEAgLTg1NzYsNiArODU5MCwzNCBAQCBkcm9wIHRyaWdnZXIgcmVtMl90 cmlnX3Jvd19iZWZvcmUgb24gcmVtMjsKIGRyb3AgdHJpZ2dlciByZW0yX3RyaWdfcm93X2Fm dGVyIG9uIHJlbTI7CiBkcm9wIHRyaWdnZXIgbG9jMl90cmlnX3Jvd19iZWZvcmVfaW5zZXJ0 IG9uIGxvYzI7CiBkZWxldGUgZnJvbSByZW0yOworYWx0ZXIgdGFibGUgbG9jMiBkcm9wIGNv bHVtbiBmMTsKK2FsdGVyIHRhYmxlIGxvYzIgZHJvcCBjb2x1bW4gZjI7Citjb3B5IHJlbTIg ZnJvbSBzdGRpbjsKK0VSUk9SOiAgY29sdW1uICJmMSIgb2YgcmVsYXRpb24gImxvYzIiIGRv ZXMgbm90IGV4aXN0CitDT05URVhUOiAgcmVtb3RlIFNRTCBjb21tYW5kOiBJTlNFUlQgSU5U TyBwdWJsaWMubG9jMihmMSwgZjIpIFZBTFVFUyAoJDEsICQyKSwgKCQzLCAkNCkKK0NPUFkg cmVtMiwgbGluZSAzCithbHRlciB0YWJsZSBsb2MyIGFkZCBjb2x1bW4gZjEgaW50OworYWx0 ZXIgdGFibGUgbG9jMiBhZGQgY29sdW1uIGYyIGludDsKK3NlbGVjdCAqIGZyb20gcmVtMjsK KyBmMSB8IGYyIAorLS0tLSstLS0tCisoMCByb3dzKQorCistLSBkcm9wcGVkIGNvbHVtbnMg bG9jYWxseSBhbmQgb24gdGhlIGZvcmVpZ24gc2VydmVyCithbHRlciB0YWJsZSByZW0yIGRy b3AgY29sdW1uIGYxOworYWx0ZXIgdGFibGUgcmVtMiBkcm9wIGNvbHVtbiBmMjsKK2NvcHkg cmVtMiBmcm9tIHN0ZGluOworc2VsZWN0ICogZnJvbSByZW0yOworLS0KKygyIHJvd3MpCisK K2FsdGVyIHRhYmxlIGxvYzIgZHJvcCBjb2x1bW4gZjE7CithbHRlciB0YWJsZSBsb2MyIGRy b3AgY29sdW1uIGYyOworY29weSByZW0yIGZyb20gc3RkaW47CitzZWxlY3QgKiBmcm9tIHJl bTI7CistLQorKDQgcm93cykKKwogLS0gdGVzdCBDT1BZIEZST00gd2l0aCBmb3JlaWduIHRh YmxlIGNyZWF0ZWQgaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24KIGNyZWF0ZSB0YWJsZSBsb2Mz IChmMSBpbnQsIGYyIHRleHQpOwogYmVnaW47CkBAIC04NTkyLDYgKzg2MzQsNyBAQCBzZWxl Y3QgKiBmcm9tIHJlbTM7CiAKIGRyb3AgZm9yZWlnbiB0YWJsZSByZW0zOwogZHJvcCB0YWJs ZSBsb2MzOworYWx0ZXIgc2VydmVyIGxvb3BiYWNrIG9wdGlvbnMgKGRyb3AgYmF0Y2hfc2l6 ZSk7CiAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CiAtLSB0ZXN0IGZvciBUUlVOQ0FURQogLS0gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVz X2Zkdy5zcWwgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbApp bmRleCA5MmQxMjEyMDI3Li41YzA0N2NlOGVlIDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3Rn cmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbAorKysgYi9jb250cmliL3Bvc3RncmVzX2Zk dy9zcWwvcG9zdGdyZXNfZmR3LnNxbApAQCAtMjMzMCw2ICsyMzMwLDcgQEAgZHJvcCB0YWJs ZSBsb2N0MjsKIC0tIHRlc3QgQ09QWSBGUk9NCiAtLSA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKK2FsdGVy IHNlcnZlciBsb29wYmFjayBvcHRpb25zIChhZGQgYmF0Y2hfc2l6ZSAnMicpOwogY3JlYXRl IHRhYmxlIGxvYzIgKGYxIGludCwgZjIgdGV4dCk7CiBhbHRlciB0YWJsZSBsb2MyIHNldCAo YXV0b3ZhY3V1bV9lbmFibGVkID0gJ2ZhbHNlJyk7CiBjcmVhdGUgZm9yZWlnbiB0YWJsZSBy ZW0yIChmMSBpbnQsIGYyIHRleHQpIHNlcnZlciBsb29wYmFjayBvcHRpb25zKHRhYmxlX25h bWUgJ2xvYzInKTsKQEAgLTIzNjIsNiArMjM2MywyMyBAQCBhbHRlciB0YWJsZSBsb2MyIGRy b3AgY29uc3RyYWludCBsb2MyX2YxcG9zaXRpdmU7CiAKIGRlbGV0ZSBmcm9tIHJlbTI7CiAK K2NyZWF0ZSB0YWJsZSBmb28gKGEgaW50KSBwYXJ0aXRpb24gYnkgbGlzdCAoYSk7CitjcmVh dGUgdGFibGUgZm9vMSAobGlrZSBmb28pOworY3JlYXRlIGZvcmVpZ24gdGFibGUgZmZvbzEg cGFydGl0aW9uIG9mIGZvbyBmb3IgdmFsdWVzIGluICgxKQorCXNlcnZlciBsb29wYmFjayBv cHRpb25zICh0YWJsZV9uYW1lICdmb28xJyk7CitjcmVhdGUgdGFibGUgZm9vMiAobGlrZSBm b28pOworY3JlYXRlIGZvcmVpZ24gdGFibGUgZmZvbzIgcGFydGl0aW9uIG9mIGZvbyBmb3Ig dmFsdWVzIGluICgyKQorCXNlcnZlciBsb29wYmFjayBvcHRpb25zICh0YWJsZV9uYW1lICdm b28yJyk7CitjcmVhdGUgZnVuY3Rpb24gcHJpbnRfbmV3X3JvdygpIHJldHVybnMgdHJpZ2dl ciBsYW5ndWFnZSBwbHBnc3FsIGFzICQkCisJYmVnaW4gcmFpc2Ugbm90aWNlICclJywgbmV3 OyByZXR1cm4gbmV3OyBlbmQ7ICQkOworY3JlYXRlIHRyaWdnZXIgZmZvbzFfYnJfdHJpZyBi ZWZvcmUgaW5zZXJ0IG9uIGZmb28xCisJZm9yIGVhY2ggcm93IGV4ZWN1dGUgZnVuY3Rpb24g cHJpbnRfbmV3X3JvdygpOworCitjb3B5IGZvbyBmcm9tIHN0ZGluOworMQorMgorXC4KKwog LS0gVGVzdCBsb2NhbCB0cmlnZ2VycwogY3JlYXRlIHRyaWdnZXIgdHJpZ19zdG10X2JlZm9y ZSBiZWZvcmUgaW5zZXJ0IG9uIHJlbTIKIAlmb3IgZWFjaCBzdGF0ZW1lbnQgZXhlY3V0ZSBw cm9jZWR1cmUgdHJpZ2dlcl9mdW5jKCk7CkBAIC0yNDYyLDYgKzI0ODAsMzQgQEAgZHJvcCB0 cmlnZ2VyIGxvYzJfdHJpZ19yb3dfYmVmb3JlX2luc2VydCBvbiBsb2MyOwogCiBkZWxldGUg ZnJvbSByZW0yOwogCithbHRlciB0YWJsZSBsb2MyIGRyb3AgY29sdW1uIGYxOworYWx0ZXIg dGFibGUgbG9jMiBkcm9wIGNvbHVtbiBmMjsKK2NvcHkgcmVtMiBmcm9tIHN0ZGluOworMQlm b28KKzIJYmFyCitcLgorCithbHRlciB0YWJsZSBsb2MyIGFkZCBjb2x1bW4gZjEgaW50Owor YWx0ZXIgdGFibGUgbG9jMiBhZGQgY29sdW1uIGYyIGludDsKK3NlbGVjdCAqIGZyb20gcmVt MjsKKworLS0gZHJvcHBlZCBjb2x1bW5zIGxvY2FsbHkgYW5kIG9uIHRoZSBmb3JlaWduIHNl cnZlcgorYWx0ZXIgdGFibGUgcmVtMiBkcm9wIGNvbHVtbiBmMTsKK2FsdGVyIHRhYmxlIHJl bTIgZHJvcCBjb2x1bW4gZjI7Citjb3B5IHJlbTIgZnJvbSBzdGRpbjsKKworCitcLgorc2Vs ZWN0ICogZnJvbSByZW0yOworCithbHRlciB0YWJsZSBsb2MyIGRyb3AgY29sdW1uIGYxOwor YWx0ZXIgdGFibGUgbG9jMiBkcm9wIGNvbHVtbiBmMjsKK2NvcHkgcmVtMiBmcm9tIHN0ZGlu OworCisKK1wuCitzZWxlY3QgKiBmcm9tIHJlbTI7CisKIC0tIHRlc3QgQ09QWSBGUk9NIHdp dGggZm9yZWlnbiB0YWJsZSBjcmVhdGVkIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uCiBjcmVh dGUgdGFibGUgbG9jMyAoZjEgaW50LCBmMiB0ZXh0KTsKIGJlZ2luOwpAQCAtMjQ3NSw2ICsy NTIxLDcgQEAgY29tbWl0Owogc2VsZWN0ICogZnJvbSByZW0zOwogZHJvcCBmb3JlaWduIHRh YmxlIHJlbTM7CiBkcm9wIHRhYmxlIGxvYzM7CithbHRlciBzZXJ2ZXIgbG9vcGJhY2sgb3B0 aW9ucyAoZHJvcCBiYXRjaF9zaXplKTsKIAogLS0gPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLS0gdGVzdCBm b3IgVFJVTkNBVEUKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9t LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jCmluZGV4IGE5NzYwMDhiM2Qu LjA4ZDMyMWYxNzYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9t LmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYwpAQCAtMzIwLDE4ICsz MjAsNDQgQEAgQ29weU11bHRpSW5zZXJ0QnVmZmVyRmx1c2goQ29weU11bHRpSW5zZXJ0SW5m byAqbWlpbmZvLAogCWNzdGF0ZS0+bGluZV9idWZfdmFsaWQgPSBmYWxzZTsKIAlzYXZlX2N1 cl9saW5lbm8gPSBjc3RhdGUtPmN1cl9saW5lbm87CiAKLQkvKgotCSAqIHRhYmxlX211bHRp X2luc2VydCBtYXkgbGVhayBtZW1vcnksIHNvIHN3aXRjaCB0byBzaG9ydC1saXZlZCBtZW1v cnkKLQkgKiBjb250ZXh0IGJlZm9yZSBjYWxsaW5nIGl0LgotCSAqLwotCW9sZGNvbnRleHQg PSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oR2V0UGVyVHVwbGVNZW1vcnlDb250ZXh0KGVzdGF0 ZSkpOwotCXRhYmxlX211bHRpX2luc2VydChyZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRl c2MsCi0JCQkJCSAgIHNsb3RzLAotCQkJCQkgICBudXNlZCwKLQkJCQkJICAgbXljaWQsCi0J CQkJCSAgIHRpX29wdGlvbnMsCi0JCQkJCSAgIGJ1ZmZlci0+YmlzdGF0ZSk7Ci0JTWVtb3J5 Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9S ZWxhdGlvbkRlc2MtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX0ZPUkVJR05fVEFCTEUp CisJeworCQlpbnQgc2VudCA9IDA7CisKKwkJQXNzZXJ0KHJlc3VsdFJlbEluZm8tPnJpX0Jh dGNoU2l6ZSA+IDEgJiYKKwkJCSAgIHJlc3VsdFJlbEluZm8tPnJpX0Zkd1JvdXRpbmUtPkV4 ZWNGb3JlaWduQmF0Y2hJbnNlcnQgIT0gTlVMTCAmJgorCQkJICAgcmVzdWx0UmVsSW5mby0+ cmlfRmR3Um91dGluZS0+R2V0Rm9yZWlnbk1vZGlmeUJhdGNoU2l6ZSAhPSBOVUxMKTsKKwor CQkvKiBGbHVzaCBpbnRvIGZvcmVpZ24gdGFibGUgb3IgcGFydGl0aW9uICovCisJCXdoaWxl IChzZW50IDwgbnVzZWQpCisJCXsKKwkJCWludCBzaXplID0gKHJlc3VsdFJlbEluZm8tPnJp X0JhdGNoU2l6ZSA8IG51c2VkIC0gc2VudCkgPworCQkJCQkJcmVzdWx0UmVsSW5mby0+cmlf QmF0Y2hTaXplIDogKG51c2VkIC0gc2VudCk7CisJCQlpbnQgaW5zZXJ0ZWQgPSBzaXplOwor CisJCQlyZXN1bHRSZWxJbmZvLT5yaV9GZHdSb3V0aW5lLT5FeGVjRm9yZWlnbkJhdGNoSW5z ZXJ0KGVzdGF0ZSwKKwkJCQkJCQkJCQkJCQkJCQkgcmVzdWx0UmVsSW5mbywKKwkJCQkJCQkJ CQkJCQkJCQkgJnNsb3RzW3NlbnRdLAorCQkJCQkJCQkJCQkJCQkJCSBOVUxMLAorCQkJCQkJ CQkJCQkJCQkJCSAmaW5zZXJ0ZWQpOworCQkJc2VudCArPSBzaXplOworCQl9CisJfQorCWVs c2UKKwl7CisJCS8qCisJCSAqIHRhYmxlX211bHRpX2luc2VydCBtYXkgbGVhayBtZW1vcnks IHNvIHN3aXRjaCB0byBzaG9ydC1saXZlZCBtZW1vcnkKKwkJICogY29udGV4dCBiZWZvcmUg Y2FsbGluZyBpdC4KKwkJICovCisJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNo VG8oR2V0UGVyVHVwbGVNZW1vcnlDb250ZXh0KGVzdGF0ZSkpOworCQl0YWJsZV9tdWx0aV9p bnNlcnQocmVzdWx0UmVsSW5mby0+cmlfUmVsYXRpb25EZXNjLAorCQkJCQkJICAgc2xvdHMs CisJCQkJCQkgICBudXNlZCwKKwkJCQkJCSAgIG15Y2lkLAorCQkJCQkJICAgdGlfb3B0aW9u cywKKwkJCQkJCSAgIGJ1ZmZlci0+YmlzdGF0ZSk7CisJCU1lbW9yeUNvbnRleHRTd2l0Y2hU byhvbGRjb250ZXh0KTsKKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnVzZWQ7IGkrKykKIAl7 CkBAIC0zNDMsNiArMzY5LDggQEAgQ29weU11bHRpSW5zZXJ0QnVmZmVyRmx1c2goQ29weU11 bHRpSW5zZXJ0SW5mbyAqbWlpbmZvLAogCQl7CiAJCQlMaXN0CSAgICpyZWNoZWNrSW5kZXhl czsKIAorCQkJQXNzZXJ0KHJlc3VsdFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYy0+cmRfcmVs LT5yZWxraW5kICE9IFJFTEtJTkRfRk9SRUlHTl9UQUJMRSk7CisKIAkJCWNzdGF0ZS0+Y3Vy X2xpbmVubyA9IGJ1ZmZlci0+bGluZW5vc1tpXTsKIAkJCXJlY2hlY2tJbmRleGVzID0KIAkJ CQlFeGVjSW5zZXJ0SW5kZXhUdXBsZXMocmVzdWx0UmVsSW5mbywKQEAgLTU0MSwxMyArNTY5 LDExIEBAIENvcHlGcm9tKENvcHlGcm9tU3RhdGUgY3N0YXRlKQogCUNvbW1hbmRJZAlteWNp ZCA9IEdldEN1cnJlbnRDb21tYW5kSWQodHJ1ZSk7CiAJaW50CQkJdGlfb3B0aW9ucyA9IDA7 IC8qIHN0YXJ0IHdpdGggZGVmYXVsdCBvcHRpb25zIGZvciBpbnNlcnQgKi8KIAlCdWxrSW5z ZXJ0U3RhdGUgYmlzdGF0ZSA9IE5VTEw7Ci0JQ29weUluc2VydE1ldGhvZCBpbnNlcnRNZXRo b2Q7CiAJQ29weU11bHRpSW5zZXJ0SW5mbyBtdWx0aUluc2VydEluZm8gPSB7MH07CS8qIHBh Y2lmeSBjb21waWxlciAqLwogCWludDY0CQlwcm9jZXNzZWQgPSAwOwogCWludDY0CQlleGNs dWRlZCA9IDA7CiAJYm9vbAkJaGFzX2JlZm9yZV9pbnNlcnRfcm93X3RyaWc7CiAJYm9vbAkJ aGFzX2luc3RlYWRfaW5zZXJ0X3Jvd190cmlnOwotCWJvb2wJCWxlYWZwYXJ0X3VzZV9tdWx0 aV9pbnNlcnQgPSBmYWxzZTsKIAogCUFzc2VydChjc3RhdGUtPnJlbCk7CiAJQXNzZXJ0KGxp c3RfbGVuZ3RoKGNzdGF0ZS0+cmFuZ2VfdGFibGUpID09IDEpOwpAQCAtNjc0LDEwICs3MDAs NDMgQEAgQ29weUZyb20oQ29weUZyb21TdGF0ZSBjc3RhdGUpCiAJbXRzdGF0ZS0+cmVzdWx0 UmVsSW5mbyA9IHJlc3VsdFJlbEluZm87CiAJbXRzdGF0ZS0+cm9vdFJlc3VsdFJlbEluZm8g PSByZXN1bHRSZWxJbmZvOwogCi0JaWYgKHJlc3VsdFJlbEluZm8tPnJpX0Zkd1JvdXRpbmUg IT0gTlVMTCAmJgotCQlyZXN1bHRSZWxJbmZvLT5yaV9GZHdSb3V0aW5lLT5CZWdpbkZvcmVp Z25JbnNlcnQgIT0gTlVMTCkKLQkJcmVzdWx0UmVsSW5mby0+cmlfRmR3Um91dGluZS0+QmVn aW5Gb3JlaWduSW5zZXJ0KG10c3RhdGUsCi0JCQkJCQkJCQkJCQkJCSByZXN1bHRSZWxJbmZv KTsKKwlpZiAocmVzdWx0UmVsSW5mby0+cmlfRmR3Um91dGluZSAhPSBOVUxMKQorCXsKKwkJ aWYgKHJlc3VsdFJlbEluZm8tPnJpX0Zkd1JvdXRpbmUtPkdldEZvcmVpZ25Nb2RpZnlCYXRj aFNpemUgIT0gTlVMTCkKKwkJCXJlc3VsdFJlbEluZm8tPnJpX0JhdGNoU2l6ZSA9CisJCQkJ cmVzdWx0UmVsSW5mby0+cmlfRmR3Um91dGluZS0+R2V0Rm9yZWlnbk1vZGlmeUJhdGNoU2l6 ZShyZXN1bHRSZWxJbmZvKTsKKworCQlpZiAocmVzdWx0UmVsSW5mby0+cmlfRmR3Um91dGlu ZS0+QmVnaW5Gb3JlaWduSW5zZXJ0ICE9IE5VTEwpCisJCQlyZXN1bHRSZWxJbmZvLT5yaV9G ZHdSb3V0aW5lLT5CZWdpbkZvcmVpZ25JbnNlcnQobXRzdGF0ZSwKKwkJCQkJCQkJCQkJCQkJ CSByZXN1bHRSZWxJbmZvKTsKKwl9CisKKwlBc3NlcnQoIXRhcmdldF9yZXN1bHRSZWxJbmZv LT5yaV91c2VzTXVsdGlJbnNlcnQpOworCisJLyoKKwkgKiBJdCdzIGdlbmVyYWxseSBtb3Jl IGVmZmljaWVudCB0byBwcmVwYXJlIGEgYnVuY2ggb2YgdHVwbGVzIGZvcgorCSAqIGluc2Vy dGlvbiwgYW5kIGluc2VydCB0aGVtIGluIGJ1bGssIGZvciBleGFtcGxlLCB3aXRoIG9uZQor CSAqIHRhYmxlX211bHRpX2luc2VydCgpIGNhbGwgdGhhbiBjYWxsIHRhYmxlX3R1cGxlX2lu c2VydCgpIHNlcGFyYXRlbHkgZm9yCisJICogZXZlcnkgdHVwbGUuIEhvd2V2ZXIsIHRoZXJl IGFyZSBhIG51bWJlciBvZiByZWFzb25zIHdoeSB3ZSBtaWdodCBub3QgYmUKKwkgKiBhYmxl IHRvIGRvIHRoaXMuICBGb3IgZXhhbXBsZSwgaWYgdGhlcmUgYW55IHZvbGF0aWxlIGV4cHJl c3Npb25zIGluIHRoZQorCSAqIHRhYmxlJ3MgZGVmYXVsdCB2YWx1ZXMgb3IgaW4gdGhlIHN0 YXRlbWVudCdzIFdIRVJFIGNsYXVzZSwgd2hpY2ggbWF5CisJICogcXVlcnkgdGhlIHRhYmxl IHdlIGFyZSBpbnNlcnRpbmcgaW50bywgYnVmZmVyaW5nIHR1cGxlcyBtaWdodCBwcm9kdWNl CisJICogd3JvbmcgcmVzdWx0cy4gIEFsc28sIHRoZSByZWxhdGlvbiB3ZSBhcmUgdHJ5aW5n IHRvIGluc2VydCBpbnRvIGl0c2VsZgorCSAqIG1heSBub3QgYmUgYW1lbmFibGUgdG8gYnVm ZmVyZWQgaW5zZXJ0cy4KKwkgKgorCSAqIE5vdGU6IEZvciBwYXJ0aXRpb25zLCB0aGlzIGZs YWcgaXMgc2V0IGNvbnNpZGVyaW5nIHRoZSB0YXJnZXQgdGFibGUncworCSAqIGZsYWcgdGhh dCBpcyBiZWluZyBzZXQgaGVyZSBhbmQgcGFydGl0aW9uJ3Mgb3duIHByb3BlcnRpZXMgd2hp Y2ggYXJlCisJICogY2hlY2tlZCBieSBjYWxsaW5nIEV4ZWNNdWx0aUluc2VydEFsbG93ZWQo KS4gIEl0IGRvZXMgbm90IG1hdHRlcgorCSAqIHdoZXRoZXIgcGFydGl0aW9ucyBoYXZlIGFu eSB2b2xhdGlsZSBkZWZhdWx0IGV4cHJlc3Npb25zIGFzIHdlIHVzZSB0aGUKKwkgKiBkZWZh dWx0cyBmcm9tIHRoZSB0YXJnZXQgb2YgdGhlIENPUFkgY29tbWFuZC4KKwkgKiBBbHNvLCB0 aGUgQ09QWSBjb21tYW5kIHJlcXVpcmVzIGEgbm9uLXplcm8gaW5wdXQgbGlzdCBvZiBhdHRy aWJ1dGVzLgorCSAqIFRoZXJlZm9yZSwgdGhlIGxlbmd0aCBvZiB0aGUgYXR0cmlidXRlIGxp c3QgaXMgY2hlY2tlZCBoZXJlLgorCSAqLworCWlmICghY3N0YXRlLT52b2xhdGlsZV9kZWZl eHBycyAmJgorCQlsaXN0X2xlbmd0aChjc3RhdGUtPmF0dG51bWxpc3QpID4gMCAmJgorCQkh Y29udGFpbl92b2xhdGlsZV9mdW5jdGlvbnMoY3N0YXRlLT53aGVyZUNsYXVzZSkpCisJCXRh cmdldF9yZXN1bHRSZWxJbmZvLT5yaV91c2VzTXVsdGlJbnNlcnQgPQorCQkJCQlFeGVjTXVs dGlJbnNlcnRBbGxvd2VkKHRhcmdldF9yZXN1bHRSZWxJbmZvKTsKIAogCS8qIFByZXBhcmUg dG8gY2F0Y2ggQUZURVIgdHJpZ2dlcnMuICovCiAJQWZ0ZXJUcmlnZ2VyQmVnaW5RdWVyeSgp OwpAQCAtNzA2LDgzICs3NjUsOSBAQCBDb3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSkK IAkJY3N0YXRlLT5xdWFsZXhwciA9IEV4ZWNJbml0UXVhbChjYXN0Tm9kZShMaXN0LCBjc3Rh dGUtPndoZXJlQ2xhdXNlKSwKIAkJCQkJCQkJCQkmbXRzdGF0ZS0+cHMpOwogCi0JLyoKLQkg KiBJdCdzIGdlbmVyYWxseSBtb3JlIGVmZmljaWVudCB0byBwcmVwYXJlIGEgYnVuY2ggb2Yg dHVwbGVzIGZvcgotCSAqIGluc2VydGlvbiwgYW5kIGluc2VydCB0aGVtIGluIG9uZSB0YWJs ZV9tdWx0aV9pbnNlcnQoKSBjYWxsLCB0aGFuIGNhbGwKLQkgKiB0YWJsZV90dXBsZV9pbnNl cnQoKSBzZXBhcmF0ZWx5IGZvciBldmVyeSB0dXBsZS4gSG93ZXZlciwgdGhlcmUgYXJlIGEK LQkgKiBudW1iZXIgb2YgcmVhc29ucyB3aHkgd2UgbWlnaHQgbm90IGJlIGFibGUgdG8gZG8g dGhpcy4gIFRoZXNlIGFyZQotCSAqIGV4cGxhaW5lZCBiZWxvdy4KLQkgKi8KLQlpZiAocmVz dWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2MgIT0gTlVMTCAmJgotCQkocmVzdWx0UmVsSW5mby0+ cmlfVHJpZ0Rlc2MtPnRyaWdfaW5zZXJ0X2JlZm9yZV9yb3cgfHwKLQkJIHJlc3VsdFJlbElu Zm8tPnJpX1RyaWdEZXNjLT50cmlnX2luc2VydF9pbnN0ZWFkX3JvdykpCi0JewotCQkvKgot CQkgKiBDYW4ndCBzdXBwb3J0IG11bHRpLWluc2VydHMgd2hlbiB0aGVyZSBhcmUgYW55IEJF Rk9SRS9JTlNURUFEIE9GCi0JCSAqIHRyaWdnZXJzIG9uIHRoZSB0YWJsZS4gU3VjaCB0cmln Z2VycyBtaWdodCBxdWVyeSB0aGUgdGFibGUgd2UncmUKLQkJICogaW5zZXJ0aW5nIGludG8g YW5kIGFjdCBkaWZmZXJlbnRseSBpZiB0aGUgdHVwbGVzIHRoYXQgaGF2ZSBhbHJlYWR5Ci0J CSAqIGJlZW4gcHJvY2Vzc2VkIGFuZCBwcmVwYXJlZCBmb3IgaW5zZXJ0aW9uIGFyZSBub3Qg dGhlcmUuCi0JCSAqLwotCQlpbnNlcnRNZXRob2QgPSBDSU1fU0lOR0xFOwotCX0KLQllbHNl IGlmIChwcm91dGUgIT0gTlVMTCAmJiByZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVzYyAhPSBO VUxMICYmCi0JCQkgcmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2MtPnRyaWdfaW5zZXJ0X25l d190YWJsZSkKLQl7Ci0JCS8qCi0JCSAqIEZvciBwYXJ0aXRpb25lZCB0YWJsZXMgd2UgY2Fu J3Qgc3VwcG9ydCBtdWx0aS1pbnNlcnRzIHdoZW4gdGhlcmUKLQkJICogYXJlIGFueSBzdGF0 ZW1lbnQgbGV2ZWwgaW5zZXJ0IHRyaWdnZXJzLiBJdCBtaWdodCBiZSBwb3NzaWJsZSB0bwot CQkgKiBhbGxvdyBwYXJ0aXRpb25lZCB0YWJsZXMgd2l0aCBzdWNoIHRyaWdnZXJzIGluIHRo ZSBmdXR1cmUsIGJ1dCBmb3IKLQkJICogbm93LCBDb3B5TXVsdGlJbnNlcnRJbmZvRmx1c2gg ZXhwZWN0cyB0aGF0IGFueSBiZWZvcmUgcm93IGluc2VydAotCQkgKiBhbmQgc3RhdGVtZW50 IGxldmVsIGluc2VydCB0cmlnZ2VycyBhcmUgb24gdGhlIHNhbWUgcmVsYXRpb24uCi0JCSAq LwotCQlpbnNlcnRNZXRob2QgPSBDSU1fU0lOR0xFOwotCX0KLQllbHNlIGlmIChyZXN1bHRS ZWxJbmZvLT5yaV9GZHdSb3V0aW5lICE9IE5VTEwgfHwKLQkJCSBjc3RhdGUtPnZvbGF0aWxl X2RlZmV4cHJzKQotCXsKLQkJLyoKLQkJICogQ2FuJ3Qgc3VwcG9ydCBtdWx0aS1pbnNlcnRz IHRvIGZvcmVpZ24gdGFibGVzIG9yIGlmIHRoZXJlIGFyZSBhbnkKLQkJICogdm9sYXRpbGUg ZGVmYXVsdCBleHByZXNzaW9ucyBpbiB0aGUgdGFibGUuICBTaW1pbGFybHkgdG8gdGhlCi0J CSAqIHRyaWdnZXIgY2FzZSBhYm92ZSwgc3VjaCBleHByZXNzaW9ucyBtYXkgcXVlcnkgdGhl IHRhYmxlIHdlJ3JlCi0JCSAqIGluc2VydGluZyBpbnRvLgotCQkgKgotCQkgKiBOb3RlOiBJ dCBkb2VzIG5vdCBtYXR0ZXIgaWYgYW55IHBhcnRpdGlvbnMgaGF2ZSBhbnkgdm9sYXRpbGUK LQkJICogZGVmYXVsdCBleHByZXNzaW9ucyBhcyB3ZSB1c2UgdGhlIGRlZmF1bHRzIGZyb20g dGhlIHRhcmdldCBvZiB0aGUKLQkJICogQ09QWSBjb21tYW5kLgotCQkgKi8KLQkJaW5zZXJ0 TWV0aG9kID0gQ0lNX1NJTkdMRTsKLQl9Ci0JZWxzZSBpZiAoY29udGFpbl92b2xhdGlsZV9m dW5jdGlvbnMoY3N0YXRlLT53aGVyZUNsYXVzZSkpCi0JewotCQkvKgotCQkgKiBDYW4ndCBz dXBwb3J0IG11bHRpLWluc2VydHMgaWYgdGhlcmUgYXJlIGFueSB2b2xhdGlsZSBmdW5jdGlv bgotCQkgKiBleHByZXNzaW9ucyBpbiBXSEVSRSBjbGF1c2UuICBTaW1pbGFybHkgdG8gdGhl IHRyaWdnZXIgY2FzZSBhYm92ZSwKLQkJICogc3VjaCBleHByZXNzaW9ucyBtYXkgcXVlcnkg dGhlIHRhYmxlIHdlJ3JlIGluc2VydGluZyBpbnRvLgotCQkgKi8KLQkJaW5zZXJ0TWV0aG9k ID0gQ0lNX1NJTkdMRTsKLQl9Ci0JZWxzZQotCXsKLQkJLyoKLQkJICogRm9yIHBhcnRpdGlv bmVkIHRhYmxlcywgd2UgbWF5IHN0aWxsIGJlIGFibGUgdG8gcGVyZm9ybSBidWxrCi0JCSAq IGluc2VydHMuICBIb3dldmVyLCB0aGUgcG9zc2liaWxpdHkgb2YgdGhpcyBkZXBlbmRzIG9u IHdoaWNoIHR5cGVzCi0JCSAqIG9mIHRyaWdnZXJzIGV4aXN0IG9uIHRoZSBwYXJ0aXRpb24u ICBXZSBtdXN0IGRpc2FibGUgYnVsayBpbnNlcnRzCi0JCSAqIGlmIHRoZSBwYXJ0aXRpb24g aXMgYSBmb3JlaWduIHRhYmxlIG9yIGl0IGhhcyBhbnkgYmVmb3JlIHJvdyBpbnNlcnQKLQkJ ICogb3IgaW5zZXJ0IGluc3RlYWQgdHJpZ2dlcnMgKHNhbWUgYXMgd2UgY2hlY2tlZCBhYm92 ZSBmb3IgdGhlIHBhcmVudAotCQkgKiB0YWJsZSkuICBTaW5jZSB0aGUgcGFydGl0aW9uJ3Mg cmVzdWx0UmVsSW5mb3MgYXJlIGluaXRpYWxpemVkIG9ubHkKLQkJICogd2hlbiB3ZSBhY3R1 YWxseSBuZWVkIHRvIGluc2VydCB0aGUgZmlyc3QgdHVwbGUgaW50byB0aGVtLCB3ZSBtdXN0 Ci0JCSAqIGhhdmUgdGhlIGludGVybWVkaWF0ZSBpbnNlcnQgbWV0aG9kIG9mIENJTV9NVUxU SV9DT05ESVRJT05BTCB0bwotCQkgKiBmbGFnIHRoYXQgd2UgbXVzdCBsYXRlciBkZXRlcm1p bmUgaWYgd2UgY2FuIHVzZSBidWxrLWluc2VydHMgZm9yCi0JCSAqIHRoZSBwYXJ0aXRpb24g YmVpbmcgaW5zZXJ0ZWQgaW50by4KLQkJICovCi0JCWlmIChwcm91dGUpCi0JCQlpbnNlcnRN ZXRob2QgPSBDSU1fTVVMVElfQ09ORElUSU9OQUw7Ci0JCWVsc2UKLQkJCWluc2VydE1ldGhv ZCA9IENJTV9NVUxUSTsKLQorCWlmIChyZXN1bHRSZWxJbmZvLT5yaV91c2VzTXVsdGlJbnNl cnQpCiAJCUNvcHlNdWx0aUluc2VydEluZm9Jbml0KCZtdWx0aUluc2VydEluZm8sIHJlc3Vs dFJlbEluZm8sIGNzdGF0ZSwKIAkJCQkJCQkJZXN0YXRlLCBteWNpZCwgdGlfb3B0aW9ucyk7 Ci0JfQogCiAJLyoKIAkgKiBJZiBub3QgdXNpbmcgYmF0Y2ggbW9kZSAod2hpY2ggYWxsb2Nh dGVzIHNsb3RzIGFzIG5lZWRlZCkgc2V0IHVwIGEKQEAgLTc5MCw3ICs3NzUsNyBAQCBDb3B5 RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSkKIAkgKiBvbmUsIGV2ZW4gaWYgd2UgbWlnaHQg YmF0Y2ggaW5zZXJ0LCB0byByZWFkIHRoZSB0dXBsZSBpbiB0aGUgcm9vdAogCSAqIHBhcnRp dGlvbidzIGZvcm0uCiAJICovCi0JaWYgKGluc2VydE1ldGhvZCA9PSBDSU1fU0lOR0xFIHx8 IGluc2VydE1ldGhvZCA9PSBDSU1fTVVMVElfQ09ORElUSU9OQUwpCisJaWYgKCFyZXN1bHRS ZWxJbmZvLT5yaV91c2VzTXVsdGlJbnNlcnQgfHwgcHJvdXRlKQogCXsKIAkJc2luZ2xlc2xv dCA9IHRhYmxlX3Nsb3RfY3JlYXRlKHJlc3VsdFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYywK IAkJCQkJCQkJCSAgICZlc3RhdGUtPmVzX3R1cGxlVGFibGUpOwpAQCAtODMzLDcgKzgxOCw3 IEBAIENvcHlGcm9tKENvcHlGcm9tU3RhdGUgY3N0YXRlKQogCQlSZXNldFBlclR1cGxlRXhw ckNvbnRleHQoZXN0YXRlKTsKIAogCQkvKiBzZWxlY3Qgc2xvdCB0byAoaW5pdGlhbGx5KSBs b2FkIHJvdyBpbnRvICovCi0JCWlmIChpbnNlcnRNZXRob2QgPT0gQ0lNX1NJTkdMRSB8fCBw cm91dGUpCisJCWlmICghdGFyZ2V0X3Jlc3VsdFJlbEluZm8tPnJpX3VzZXNNdWx0aUluc2Vy dCB8fCBwcm91dGUpCiAJCXsKIAkJCW15c2xvdCA9IHNpbmdsZXNsb3Q7CiAJCQlBc3NlcnQo bXlzbG90ICE9IE5VTEwpOwpAQCAtODQxLDcgKzgyNiw2IEBAIENvcHlGcm9tKENvcHlGcm9t U3RhdGUgY3N0YXRlKQogCQllbHNlCiAJCXsKIAkJCUFzc2VydChyZXN1bHRSZWxJbmZvID09 IHRhcmdldF9yZXN1bHRSZWxJbmZvKTsKLQkJCUFzc2VydChpbnNlcnRNZXRob2QgPT0gQ0lN X01VTFRJKTsKIAogCQkJbXlzbG90ID0gQ29weU11bHRpSW5zZXJ0SW5mb05leHRGcmVlU2xv dCgmbXVsdGlJbnNlcnRJbmZvLAogCQkJCQkJCQkJCQkJCSByZXN1bHRSZWxJbmZvKTsKQEAg LTkwOCwyNCArODkyLDE0IEBAIENvcHlGcm9tKENvcHlGcm9tU3RhdGUgY3N0YXRlKQogCQkJ CWhhc19pbnN0ZWFkX2luc2VydF9yb3dfdHJpZyA9IChyZXN1bHRSZWxJbmZvLT5yaV9Ucmln RGVzYyAmJgogCQkJCQkJCQkJCQkgICByZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVzYy0+dHJp Z19pbnNlcnRfaW5zdGVhZF9yb3cpOwogCi0JCQkJLyoKLQkJCQkgKiBEaXNhYmxlIG11bHRp LWluc2VydHMgd2hlbiB0aGUgcGFydGl0aW9uIGhhcyBCRUZPUkUvSU5TVEVBRAotCQkJCSAq IE9GIHRyaWdnZXJzLCBvciBpZiB0aGUgcGFydGl0aW9uIGlzIGEgZm9yZWlnbiBwYXJ0aXRp b24uCi0JCQkJICovCi0JCQkJbGVhZnBhcnRfdXNlX211bHRpX2luc2VydCA9IGluc2VydE1l dGhvZCA9PSBDSU1fTVVMVElfQ09ORElUSU9OQUwgJiYKLQkJCQkJIWhhc19iZWZvcmVfaW5z ZXJ0X3Jvd190cmlnICYmCi0JCQkJCSFoYXNfaW5zdGVhZF9pbnNlcnRfcm93X3RyaWcgJiYK LQkJCQkJcmVzdWx0UmVsSW5mby0+cmlfRmR3Um91dGluZSA9PSBOVUxMOwotCiAJCQkJLyog U2V0IHRoZSBtdWx0aS1pbnNlcnQgYnVmZmVyIHRvIHVzZSBmb3IgdGhpcyBwYXJ0aXRpb24u ICovCi0JCQkJaWYgKGxlYWZwYXJ0X3VzZV9tdWx0aV9pbnNlcnQpCisJCQkJaWYgKHJlc3Vs dFJlbEluZm8tPnJpX3VzZXNNdWx0aUluc2VydCkKIAkJCQl7CiAJCQkJCWlmIChyZXN1bHRS ZWxJbmZvLT5yaV9Db3B5TXVsdGlJbnNlcnRCdWZmZXIgPT0gTlVMTCkKIAkJCQkJCUNvcHlN dWx0aUluc2VydEluZm9TZXR1cEJ1ZmZlcigmbXVsdGlJbnNlcnRJbmZvLAogCQkJCQkJCQkJ CQkJCSAgIHJlc3VsdFJlbEluZm8pOwogCQkJCX0KLQkJCQllbHNlIGlmIChpbnNlcnRNZXRo b2QgPT0gQ0lNX01VTFRJX0NPTkRJVElPTkFMICYmCi0JCQkJCQkgIUNvcHlNdWx0aUluc2Vy dEluZm9Jc0VtcHR5KCZtdWx0aUluc2VydEluZm8pKQorCQkJCWVsc2UgaWYgKCFDb3B5TXVs dGlJbnNlcnRJbmZvSXNFbXB0eSgmbXVsdGlJbnNlcnRJbmZvKSkKIAkJCQl7CiAJCQkJCS8q CiAJCQkJCSAqIEZsdXNoIHBlbmRpbmcgaW5zZXJ0cyBpZiB0aGlzIHBhcnRpdGlvbiBjYW4n dCB1c2UKQEAgLTk1NSw3ICs5MjksNyBAQCBDb3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0 ZSkKIAkJCSAqIHJvd3R5cGUuCiAJCQkgKi8KIAkJCW1hcCA9IHJlc3VsdFJlbEluZm8tPnJp X1Jvb3RUb1BhcnRpdGlvbk1hcDsKLQkJCWlmIChpbnNlcnRNZXRob2QgPT0gQ0lNX1NJTkdM RSB8fCAhbGVhZnBhcnRfdXNlX211bHRpX2luc2VydCkKKwkJCWlmICghcmVzdWx0UmVsSW5m by0+cmlfdXNlc011bHRpSW5zZXJ0KQogCQkJewogCQkJCS8qIG5vbiBiYXRjaCBpbnNlcnQg Ki8KIAkJCQlpZiAobWFwICE9IE5VTEwpCkBAIC05NzQsOSArOTQ4LDYgQEAgQ29weUZyb20o Q29weUZyb21TdGF0ZSBjc3RhdGUpCiAJCQkJICovCiAJCQkJVHVwbGVUYWJsZVNsb3QgKmJh dGNoc2xvdDsKIAotCQkJCS8qIG5vIG90aGVyIHBhdGggYXZhaWxhYmxlIGZvciBwYXJ0aXRp b25lZCB0YWJsZSAqLwotCQkJCUFzc2VydChpbnNlcnRNZXRob2QgPT0gQ0lNX01VTFRJX0NP TkRJVElPTkFMKTsKLQogCQkJCWJhdGNoc2xvdCA9IENvcHlNdWx0aUluc2VydEluZm9OZXh0 RnJlZVNsb3QoJm11bHRpSW5zZXJ0SW5mbywKIAkJCQkJCQkJCQkJCQkJCXJlc3VsdFJlbElu Zm8pOwogCkBAIC0xMDQ4LDcgKzEwMTksNyBAQCBDb3B5RnJvbShDb3B5RnJvbVN0YXRlIGNz dGF0ZSkKIAkJCQkJRXhlY1BhcnRpdGlvbkNoZWNrKHJlc3VsdFJlbEluZm8sIG15c2xvdCwg ZXN0YXRlLCB0cnVlKTsKIAogCQkJCS8qIFN0b3JlIHRoZSBzbG90IGluIHRoZSBtdWx0aS1p bnNlcnQgYnVmZmVyLCB3aGVuIGVuYWJsZWQuICovCi0JCQkJaWYgKGluc2VydE1ldGhvZCA9 PSBDSU1fTVVMVEkgfHwgbGVhZnBhcnRfdXNlX211bHRpX2luc2VydCkKKwkJCQlpZiAocmVz dWx0UmVsSW5mby0+cmlfdXNlc011bHRpSW5zZXJ0KQogCQkJCXsKIAkJCQkJLyoKIAkJCQkJ ICogVGhlIHNsb3QgcHJldmlvdXNseSBtaWdodCBwb2ludCBpbnRvIHRoZSBwZXItdHVwbGUK QEAgLTExMjcsMTEgKzEwOTgsOCBAQCBDb3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSkK IAl9CiAKIAkvKiBGbHVzaCBhbnkgcmVtYWluaW5nIGJ1ZmZlcmVkIHR1cGxlcyAqLwotCWlm IChpbnNlcnRNZXRob2QgIT0gQ0lNX1NJTkdMRSkKLQl7Ci0JCWlmICghQ29weU11bHRpSW5z ZXJ0SW5mb0lzRW1wdHkoJm11bHRpSW5zZXJ0SW5mbykpCi0JCQlDb3B5TXVsdGlJbnNlcnRJ bmZvRmx1c2goJm11bHRpSW5zZXJ0SW5mbywgTlVMTCk7Ci0JfQorCWlmICghQ29weU11bHRp SW5zZXJ0SW5mb0lzRW1wdHkoJm11bHRpSW5zZXJ0SW5mbykpCisJCUNvcHlNdWx0aUluc2Vy dEluZm9GbHVzaCgmbXVsdGlJbnNlcnRJbmZvLCBOVUxMKTsKIAogCS8qIERvbmUsIGNsZWFu IHVwICovCiAJZXJyb3JfY29udGV4dF9zdGFjayA9IGVycmNhbGxiYWNrLnByZXZpb3VzOwpA QCAtMTE1MiwxMiArMTEyMCwxMSBAQCBDb3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSkK IAkvKiBBbGxvdyB0aGUgRkRXIHRvIHNodXQgZG93biAqLwogCWlmICh0YXJnZXRfcmVzdWx0 UmVsSW5mby0+cmlfRmR3Um91dGluZSAhPSBOVUxMICYmCiAJCXRhcmdldF9yZXN1bHRSZWxJ bmZvLT5yaV9GZHdSb3V0aW5lLT5FbmRGb3JlaWduSW5zZXJ0ICE9IE5VTEwpCi0JCXRhcmdl dF9yZXN1bHRSZWxJbmZvLT5yaV9GZHdSb3V0aW5lLT5FbmRGb3JlaWduSW5zZXJ0KGVzdGF0 ZSwKLQkJCQkJCQkJCQkJCQkJCSAgdGFyZ2V0X3Jlc3VsdFJlbEluZm8pOworCQkJdGFyZ2V0 X3Jlc3VsdFJlbEluZm8tPnJpX0Zkd1JvdXRpbmUtPkVuZEZvcmVpZ25JbnNlcnQoZXN0YXRl LAorCQkJCQkJCQkJCQkJCQl0YXJnZXRfcmVzdWx0UmVsSW5mbyk7CiAKIAkvKiBUZWFyIGRv d24gdGhlIG11bHRpLWluc2VydCBidWZmZXIgZGF0YSAqLwotCWlmIChpbnNlcnRNZXRob2Qg IT0gQ0lNX1NJTkdMRSkKLQkJQ29weU11bHRpSW5zZXJ0SW5mb0NsZWFudXAoJm11bHRpSW5z ZXJ0SW5mbyk7CisJQ29weU11bHRpSW5zZXJ0SW5mb0NsZWFudXAoJm11bHRpSW5zZXJ0SW5m byk7CiAKIAkvKiBDbG9zZSBhbGwgdGhlIHBhcnRpdGlvbmVkIHRhYmxlcywgbGVhZiBwYXJ0 aXRpb25zLCBhbmQgdGhlaXIgaW5kaWNlcyAqLwogCWlmIChwcm91dGUpCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY01haW4uYwppbmRleCBlZjJmZDQ2MDkyLi5kYTk1ZjJlZmI3IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNNYWluLmMKQEAgLTEyNjAsOSArMTI2MCw1NCBAQCBJbml0UmVzdWx0UmVs SW5mbyhSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCXJlc3VsdFJlbEluZm8tPnJp X1BhcnRpdGlvblR1cGxlU2xvdCA9IE5VTEw7CS8qIGRpdHRvICovCiAJcmVzdWx0UmVsSW5m by0+cmlfQ2hpbGRUb1Jvb3RNYXAgPSBOVUxMOwogCXJlc3VsdFJlbEluZm8tPnJpX0NoaWxk VG9Sb290TWFwVmFsaWQgPSBmYWxzZTsKKwlyZXN1bHRSZWxJbmZvLT5yaV91c2VzTXVsdGlJ bnNlcnQgPSBmYWxzZTsKIAlyZXN1bHRSZWxJbmZvLT5yaV9Db3B5TXVsdGlJbnNlcnRCdWZm ZXIgPSBOVUxMOwogfQogCisvKgorICogRXhlY011bHRpSW5zZXJ0QWxsb3dlZAorICoJCURv ZXMgdGhpcyByZWxhdGlvbiBhbGxvdyBjYWxsZXIgdG8gdXNlIG11bHRpLWluc2VydCBtb2Rl IHdoZW4KKyAqCQlpbnNlcnRpbmcgcm93cyBpbnRvIGl0PworICovCitib29sCitFeGVjTXVs dGlJbnNlcnRBbGxvd2VkKGNvbnN0IFJlc3VsdFJlbEluZm8gKnJyaSkKK3sKKwkvKgorCSAq IENhbid0IHN1cHBvcnQgbXVsdGktaW5zZXJ0cyB3aGVuIHRoZXJlIGFyZSBhbnkgQkVGT1JF L0lOU1RFQUQgT0YKKwkgKiB0cmlnZ2VycyBvbiB0aGUgdGFibGUuIFN1Y2ggdHJpZ2dlcnMg bWlnaHQgcXVlcnkgdGhlIHRhYmxlIHdlJ3JlCisJICogaW5zZXJ0aW5nIGludG8gYW5kIGFj dCBkaWZmZXJlbnRseSBpZiB0aGUgdHVwbGVzIHRoYXQgaGF2ZSBhbHJlYWR5CisJICogYmVl biBwcm9jZXNzZWQgYW5kIHByZXBhcmVkIGZvciBpbnNlcnRpb24gYXJlIG5vdCB0aGVyZS4K KwkgKi8KKwlpZiAocnJpLT5yaV9UcmlnRGVzYyAhPSBOVUxMICYmCisJCShycmktPnJpX1Ry aWdEZXNjLT50cmlnX2luc2VydF9iZWZvcmVfcm93IHx8CisJCSBycmktPnJpX1RyaWdEZXNj LT50cmlnX2luc2VydF9pbnN0ZWFkX3JvdykpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJ ICogRm9yIHBhcnRpdGlvbmVkIHRhYmxlcyB3ZSBjYW4ndCBzdXBwb3J0IG11bHRpLWluc2Vy dHMgd2hlbiB0aGVyZSBhcmUKKwkgKiBhbnkgc3RhdGVtZW50IGxldmVsIGluc2VydCB0cmln Z2Vycy4gSXQgbWlnaHQgYmUgcG9zc2libGUgdG8gYWxsb3cKKwkgKiBwYXJ0aXRpb25lZCB0 YWJsZXMgd2l0aCBzdWNoIHRyaWdnZXJzIGluIHRoZSBmdXR1cmUsIGJ1dCBmb3Igbm93LAor CSAqIENvcHlNdWx0aUluc2VydEluZm9GbHVzaCBleHBlY3RzIHRoYXQgYW55IGJlZm9yZSBy b3cgaW5zZXJ0IGFuZAorCSAqIHN0YXRlbWVudCBsZXZlbCBpbnNlcnQgdHJpZ2dlcnMgYXJl IG9uIHRoZSBzYW1lIHJlbGF0aW9uLgorCSAqLworCWlmIChycmktPnJpX1JlbGF0aW9uRGVz Yy0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUgJiYKKwkJ cnJpLT5yaV9UcmlnRGVzYyAhPSBOVUxMICYmCisJCXJyaS0+cmlfVHJpZ0Rlc2MtPnRyaWdf aW5zZXJ0X25ld190YWJsZSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHJyaS0+cmlfRmR3 Um91dGluZSAhPSBOVUxMICYmCisJCShycmktPnJpX0Zkd1JvdXRpbmUtPkV4ZWNGb3JlaWdu QmF0Y2hJbnNlcnQgPT0gTlVMTCB8fAorCQlycmktPnJpX0JhdGNoU2l6ZSA8PSAxKSkKKwkJ LyoKKwkJICogRm9yZWlnbiB0YWJsZXMgZG9uJ3Qgc3VwcG9ydCBtdWx0aS1pbnNlcnRzLCB1 bmxlc3MgdGhlaXIgRkRXCisJCSAqIHByb3ZpZGVzIHRoZSBuZWNlc3NhcnkgYnVsayBpbnNl cnQgaW50ZXJmYWNlLgorCQkgKi8KKwkJcmV0dXJuIGZhbHNlOworCisJLyogT0ssIGNhbGxl ciBjYW4gdXNlIG11bHRpLWluc2VydCBvbiB0aGlzIHJlbGF0aW9uLiAqLworCXJldHVybiB0 cnVlOworfQorCiAvKgogICogRXhlY0dldFRyaWdnZXJSZXN1bHRSZWwKICAqCQlHZXQgYSBS ZXN1bHRSZWxJbmZvIGZvciBhIHRyaWdnZXIgdGFyZ2V0IHJlbGF0aW9uLgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jCmluZGV4IGUwM2VhMjcyOTkuLjk5MGQxZmQzMDYg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYworKysg Yi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMKQEAgLTY2OSw2ICs2Njks MTQgQEAgRXhlY0luaXRQYXJ0aXRpb25JbmZvKE1vZGlmeVRhYmxlU3RhdGUgKm10c3RhdGUs IEVTdGF0ZSAqZXN0YXRlLAogCUV4ZWNJbml0Um91dGluZ0luZm8obXRzdGF0ZSwgZXN0YXRl LCBwcm91dGUsIGRpc3BhdGNoLAogCQkJCQkJbGVhZl9wYXJ0X3JyaSwgcGFydGlkeCwgZmFs c2UpOwogCisJLyoKKwkgKiBJZiBhIHBhcnRpdGlvbidzIHJvb3QgcGFyZW50IGlzbid0IGFs bG93ZWQgdG8gdXNlIGl0LCBuZWl0aGVyIGlzIHRoZQorCSAqIHBhcnRpdGlvbi4KKwkgKi8K KwlpZiAocm9vdFJlc3VsdFJlbEluZm8tPnJpX3VzZXNNdWx0aUluc2VydCkKKwkJbGVhZl9w YXJ0X3JyaS0+cmlfdXNlc011bHRpSW5zZXJ0ID0KKwkJCUV4ZWNNdWx0aUluc2VydEFsbG93 ZWQobGVhZl9wYXJ0X3JyaSk7CisKIAkvKgogCSAqIElmIHRoZXJlIGlzIGFuIE9OIENPTkZM SUNUIGNsYXVzZSwgaW5pdGlhbGl6ZSBzdGF0ZSBmb3IgaXQuCiAJICovCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5ZnJvbV9pbnRlcm5hbC5oIGIvc3JjL2luY2x1 ZGUvY29tbWFuZHMvY29weWZyb21faW50ZXJuYWwuaAppbmRleCAzZGYxYzVhOTdjLi4xYzcz M2JiOWE0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5ZnJvbV9pbnRl cm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHlmcm9tX2ludGVybmFsLmgK QEAgLTM5LDE2ICszOSw2IEBAIHR5cGVkZWYgZW51bSBFb2xUeXBlCiAJRU9MX0NSTkwKIH0g RW9sVHlwZTsKIAotLyoKLSAqIFJlcHJlc2VudHMgdGhlIGhlYXAgaW5zZXJ0IG1ldGhvZCB0 byBiZSB1c2VkIGR1cmluZyBDT1BZIEZST00uCi0gKi8KLXR5cGVkZWYgZW51bSBDb3B5SW5z ZXJ0TWV0aG9kCi17Ci0JQ0lNX1NJTkdMRSwJCQkJCS8qIHVzZSB0YWJsZV90dXBsZV9pbnNl cnQgb3IgZmR3IHJvdXRpbmUgKi8KLQlDSU1fTVVMVEksCQkJCQkvKiBhbHdheXMgdXNlIHRh YmxlX211bHRpX2luc2VydCAqLwotCUNJTV9NVUxUSV9DT05ESVRJT05BTAkJLyogdXNlIHRh YmxlX211bHRpX2luc2VydCBvbmx5IGlmIHZhbGlkICovCi19IENvcHlJbnNlcnRNZXRob2Q7 Ci0KIC8qCiAgKiBUaGlzIHN0cnVjdCBjb250YWlucyBhbGwgdGhlIHN0YXRlIHZhcmlhYmxl cyB1c2VkIHRocm91Z2hvdXQgYSBDT1BZIEZST00KICAqIG9wZXJhdGlvbi4KZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmggYi9zcmMvaW5jbHVkZS9leGVj dXRvci9leGVjdXRvci5oCmluZGV4IGQ2OGE2YjlkMjguLmI2NDZmOTE4ODMgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKKysrIGIvc3JjL2luY2x1ZGUv ZXhlY3V0b3IvZXhlY3V0b3IuaApAQCAtMjAzLDYgKzIwMyw3IEBAIGV4dGVybiB2b2lkIElu aXRSZXN1bHRSZWxJbmZvKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCiAJCQkJCQkJ ICBJbmRleCByZXN1bHRSZWxhdGlvbkluZGV4LAogCQkJCQkJCSAgUmVzdWx0UmVsSW5mbyAq cGFydGl0aW9uX3Jvb3RfcnJpLAogCQkJCQkJCSAgaW50IGluc3RydW1lbnRfb3B0aW9ucyk7 CitleHRlcm4gYm9vbCBFeGVjTXVsdGlJbnNlcnRBbGxvd2VkKGNvbnN0IFJlc3VsdFJlbElu Zm8gKnJyaSk7CiBleHRlcm4gUmVzdWx0UmVsSW5mbyAqRXhlY0dldFRyaWdnZXJSZXN1bHRS ZWwoRVN0YXRlICplc3RhdGUsIE9pZCByZWxpZCwKIAkJCQkJCQkJCQkJICBSZXN1bHRSZWxJ bmZvICpyb290UmVsSW5mbyk7CiBleHRlcm4gTGlzdCAqRXhlY0dldEFuY2VzdG9yUmVzdWx0 UmVscyhFU3RhdGUgKmVzdGF0ZSwgUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbyk7CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRl L25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IDU3Mjg4MDEzNzkuLjgwZDk3MDk2YjggMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRl L25vZGVzL2V4ZWNub2Rlcy5oCkBAIC01NDgsNyArNTQ4LDEwIEBAIHR5cGVkZWYgc3RydWN0 IFJlc3VsdFJlbEluZm8KIAlUdXBsZUNvbnZlcnNpb25NYXAgKnJpX0NoaWxkVG9Sb290TWFw OwogCWJvb2wJCXJpX0NoaWxkVG9Sb290TWFwVmFsaWQ7CiAKLQkvKiBmb3IgdXNlIGJ5IGNv cHlmcm9tLmMgd2hlbiBwZXJmb3JtaW5nIG11bHRpLWluc2VydHMgKi8KKwkvKiBUcnVlIGlm IG9rYXkgdG8gdXNlIG11bHRpLWluc2VydCBvbiB0aGlzIHJlbGF0aW9uICovCisJYm9vbCBy aV91c2VzTXVsdGlJbnNlcnQ7CisKKwkvKiBCdWZmZXIgYWxsb2NhdGVkIHRvIHRoaXMgcmVs YXRpb24gd2hlbiB1c2luZyBtdWx0aS1pbnNlcnQgbW9kZSAqLwogCXN0cnVjdCBDb3B5TXVs dGlJbnNlcnRCdWZmZXIgKnJpX0NvcHlNdWx0aUluc2VydEJ1ZmZlcjsKIAogCS8qCi0tIAoy LjM3LjAKCg== --------------gM9fzxPyLSSC2RqWgxqd0Hu6--