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 1nEbC1-0006Qm-Cm for pgsql-hackers@arkaria.postgresql.org; Mon, 31 Jan 2022 18:14:22 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nEbC0-0001Yd-3f for pgsql-hackers@arkaria.postgresql.org; Mon, 31 Jan 2022 18:14:20 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nEbBz-0001YT-HH for pgsql-hackers@lists.postgresql.org; Mon, 31 Jan 2022 18:14:19 +0000 Received: from mxout4.routing.net ([2a03:2900:1:a::9]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nEbBv-0007bB-5x for pgsql-hackers@postgresql.org; Mon, 31 Jan 2022 18:14:18 +0000 Received: from mxbox4.masterlogin.de (unknown [192.168.10.79]) by mxout4.routing.net (Postfix) with ESMTP id 5617B100669; Mon, 31 Jan 2022 18:14:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mailerdienst.de; s=20200217; t=1643652851; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=kk4GBdxGUCARpqX71aEVuR27CBK1rzpodF8RkxUGWvY=; b=JEOvbKcni5/TM8no1W0tyvUavfr+tJbjSJiMjRSPTJzH/K9g1kLVhCgfqZcPkA39hrL6MB 1HV7KuMHJBScP24tUjE3JQsgWEgaevVRm836sE/HxSx+7V3xV9RWfoH4Ws9f4MVZ3f6hUY Jv8AXgW+KhHIx/Ke3ugmqTdrmtVpU2o= Received: from remote.index.de (i68970D96.versanet.de [104.151.13.150]) by mxbox4.masterlogin.de (Postfix) with ESMTPSA id D677380842; Mon, 31 Jan 2022 18:14:10 +0000 (UTC) Received: from acedia.index-gruppe.local (192.168.54.121) by invidia.index-gruppe.local (192.168.54.140) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.21; Mon, 31 Jan 2022 19:14:10 +0100 Received: from acedia.index-gruppe.local ([::1]) by acedia.index-gruppe.local ([fe80::651c:f2d9:e6f9:7444%13]) with mapi id 15.01.2308.021; Mon, 31 Jan 2022 19:14:10 +0100 From: Arne Roland To: Amit Langote CC: Zhihong Yu , Alvaro Herrera , Julien Rouhaud , pgsql-hackers Subject: Re: missing indexes in indexlist with partitioned tables Thread-Topic: missing indexes in indexlist with partitioned tables Thread-Index: AQHXsJoeXw6ojQG4NkOLdiX4KUBdD6vkTOpcgIAWJQCAA2SO7oAAbRh////16wCAADDYxYAAo/oAgABsDQCAAiIn7oAADRXl///25gCAAD4kxoAIQqeAgAnMh4A= Date: Mon, 31 Jan 2022 18:14:10 +0000 Message-ID: <71191ef79d7a4892b99a62970f10771d@index.de> References: <20220118065750.v5zigpuisljc6jmk@jrouhaud> <202201181324.idvthmrhbtf5@alvherre.pgsql>, In-Reply-To: Accept-Language: en-US, de-DE Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-originating-ip: [10.255.1.33] Content-Type: multipart/mixed; boundary="_004_71191ef79d7a4892b99a62970f10771dindexde_" MIME-Version: 1.0 X-Mail-ID: 70565b26-1a7c-40a5-bf87-151ca3030500 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_004_71191ef79d7a4892b99a62970f10771dindexde_ Content-Type: multipart/alternative; boundary="_000_71191ef79d7a4892b99a62970f10771dindexde_" --_000_71191ef79d7a4892b99a62970f10771dindexde_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hi! From: Amit Langote Sent: Tuesday, January 25, 2022 09:04 Subject: Re: missing indexes in indexlist with partitioned tables > [...] > "partindexlist" really made me think about a list of "partial indexes" > for some reason. I think maybe "partedindexlist" is what you are > looking for; "parted" is commonly used as short for "partitioned" when > naming variables. > > The comment only mentions "further pruning" as to what partitioned > indexes are to be remembered in RelOptInfo, but it's not clear what > that means. It may help to be more specific. Thanks for the feedback! I've changed that. The current version is attached= . > Finally, I don't understand why we need a separate field to store > indexes found in partitioned base relations. AFAICS, nothing but the > sites you are interested in (relation_has_unique_index_for() and > rel_supports_distinctness()) would ever bother to look at a > partitioned base relation's indexlist. Do you think putting them into > in indexlist might break something? I have thought about that before. AFAICT there is nothing in core, which br= eaks. However I am not sure, I want to mix those two kinds of index nodes. = First of all the structure is different, partedIndexes don't have physical = attributes after all. This is technical implementation detail relating to t= he current promise, that entries of the indexlist are indexes we can use. A= nd by use, I mean use for statistics or the executor. I'm more concerned about future changes regarding the order and optimizatio= n of processing harder here. The order in which we do things in the planner= is a bit messy, and I wouldn't mind seeing details about that change. Look= ing at the current wacky order in the optimizer, I'm not convinced, that no= thing will want to have a look at the indexlist, before partitioned tables = are unpacked. Since it would be easy to introduce this new variable later, wouldn't mind = adding it to the indexlist directly for now. But changing the underlying pr= omise of what it contains, seems noteworthy and more intrusive to me. > > Side note: I personally think the name inhparent is mildly confusing, s= ince it's not really about inheritance. I don't have a significantly better= idea though. > > Partitioned tables are "inheritance parent", so share the same code as > what traditional inheritance parents have always used for planning. I recall that manual partitioning via inheritance, that was cumbersome. Tho= ugh that minor historical detail was not, what I was referring to. There ar= e a lot of other cases, that cause us to set inhparent. IIRC we use this fl= ag in some ddl commands, which have nothing to do with inheritance. It esse= ntially is used as a variant to skip the indexlist creation. If such hacks = weren't there, we could simply check for the relkind and indisunique. Regards Arne --_000_71191ef79d7a4892b99a62970f10771dindexde_ Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
Hi!

From: Amit Langote <amitlangote09@gmail.com>
Sent: Tuesday, January 25, 2022 09:04
Subject: Re: missing indexes in indexlist with partitioned tables
>  [...]
> "partindexlist" really made me think about a list of "p= artial indexes"
> for some reason.  I think maybe "partedindexlist" is wh= at you are
> looking for; "parted" is commonly used as short for "pa= rtitioned" when
> naming variables.
>
> The comment only mentions "further pruning" as to what parti= tioned
> indexes are to be remembered in RelOptInfo, but it's not clear what > that means.  It may help to be more specific.

Thanks for the feedback! I've changed that. The current version is attached= .

> Finally, I don't understand why we need a separate field to store
> indexes found in partitioned base relations.  AFAICS, nothing but= the
> sites you are interested in (relation_has_unique_index_for() and
> rel_supports_distinctness()) would ever bother to look at a
> partitioned base relation's indexlist.  Do you think putting them= into
> in indexlist might break something?

I have thought about that before. AFAICT there is nothing in core, which br= eaks. However I am not sure, I want to mix those two kinds of index nodes. = First of all the structure is different, partedIndexes don't have physical = attributes after all. This is technical implementation detail relating to the current promise, that entries of the= indexlist are indexes we can use. And by use, I mean use for statistics or= the executor.
I'm more concerned about future changes regarding the order and optimizatio= n of processing harder here. The order in which we do things in the planner= is a bit messy, and I wouldn't mind seeing details about that change. Look= ing at the current wacky order in the optimizer, I'm not convinced, that nothing will want to have a look at= the indexlist, before partitioned tables are unpacked.

Since it would be easy to introduce this new variable later, wouldn't mind = adding it to the indexlist directly for now. But changing the underlying pr= omise of what it contains, seems noteworthy and more intrusive to me.

> > Side note: I personally think the name inhparent is mildly confus= ing, since it's not really about inheritance. I don't have a significantly = better idea though.
>
> Partitioned tables are "inheritance parent", so share the sa= me code as
> what traditional inheritance parents have always used for planning.
I recall that manual partitioning via inheritance, that was cumbersome. Tho= ugh that minor historical detail was not, what I was referring to. There ar= e a lot of other cases, that cause us to set inhparent. IIRC we use this fl= ag in some ddl commands, which have nothing to do with inheritance. It essentially is used as a variant to ski= p the indexlist creation. If such hacks weren't there, we could simply chec= k for the relkind and indisunique.

Regards
Arne

--_000_71191ef79d7a4892b99a62970f10771dindexde_-- --_004_71191ef79d7a4892b99a62970f10771dindexde_ Content-Type: text/x-patch; name="0005-partIndexlistClean.patch" Content-Description: 0005-partIndexlistClean.patch Content-Disposition: attachment; filename="0005-partIndexlistClean.patch"; size=19870; creation-date="Mon, 31 Jan 2022 14:01:16 GMT"; modification-date="Mon, 31 Jan 2022 14:01:16 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCmluZGV4IDBlZjcwYWQ3ZjEuLjUyMjUw NzZkZjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMK KysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYwpAQCAtMzUwNCw3ICsz NTA0LDcgQEAgcmVsYXRpb25faGFzX3VuaXF1ZV9pbmRleF9mb3IoUGxhbm5lckluZm8gKnJvb3Qs IFJlbE9wdEluZm8gKnJlbCwKIAlBc3NlcnQobGlzdF9sZW5ndGgoZXhwcmxpc3QpID09IGxpc3Rf bGVuZ3RoKG9wcmxpc3QpKTsKIAogCS8qIFNob3J0LWNpcmN1aXQgaWYgbm8gaW5kZXhlcy4uLiAq LwotCWlmIChyZWwtPmluZGV4bGlzdCA9PSBOSUwpCisJaWYgKHJlbC0+aW5kZXhsaXN0ID09IE5J TCAmJiByZWwtPnBhcnRlZEluZGV4bGlzdCA9PSBOSUwpCiAJCXJldHVybiBmYWxzZTsKIAogCS8q CkBAIC0zNTQ5LDcgKzM1NDksNyBAQCByZWxhdGlvbl9oYXNfdW5pcXVlX2luZGV4X2ZvcihQbGFu bmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQlyZXR1cm4gZmFsc2U7CiAKIAkvKiBF eGFtaW5lIGVhY2ggaW5kZXggb2YgdGhlIHJlbGF0aW9uIC4uLiAqLwotCWZvcmVhY2goaWMsIHJl bC0+aW5kZXhsaXN0KQorCWZvcmVhY2goaWMsIGxpc3RfY29uY2F0KHJlbC0+aW5kZXhsaXN0LCBy ZWwtPnBhcnRlZEluZGV4bGlzdCkpCiAJewogCQlJbmRleE9wdEluZm8gKmluZCA9IChJbmRleE9w dEluZm8gKikgbGZpcnN0KGljKTsKIAkJaW50CQkJYzsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL2FuYWx5emVqb2lucy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bs YW4vYW5hbHl6ZWpvaW5zLmMKaW5kZXggMzM3ZjQ3MGQ1OC4uMTZjZTQ0M2VjOSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vYW5hbHl6ZWpvaW5zLmMKKysrIGIvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BsYW4vYW5hbHl6ZWpvaW5zLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNp bmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCisjaW5j bHVkZSAibm9kZXMvbm9kZXMuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvY2xhdXNlcy5oIgogI2lu Y2x1ZGUgIm9wdGltaXplci9qb2luaW5mby5oIgogI2luY2x1ZGUgIm9wdGltaXplci9vcHRpbWl6 ZXIuaCIKQEAgLTU5OCw3ICs1OTksNyBAQCByZWxfc3VwcG9ydHNfZGlzdGluY3RuZXNzKFBsYW5u ZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwpCiAJCSAqLwogCQlMaXN0Q2VsbCAgICpsYzsK IAotCQlmb3JlYWNoKGxjLCByZWwtPmluZGV4bGlzdCkKKwkJZm9yZWFjaChsYywgbGlzdF9jb25j YXQocmVsLT5pbmRleGxpc3QsIHJlbC0+cGFydGVkSW5kZXhsaXN0KSkKIAkJewogCQkJSW5kZXhP cHRJbmZvICppbmQgPSAoSW5kZXhPcHRJbmZvICopIGxmaXJzdChsYyk7CiAKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYyBiL3NyYy9iYWNrZW5kL29wdGlt aXplci91dGlsL3BsYW5jYXQuYwppbmRleCBhNTAwMmFkODk1Li4yNDUxYjJhZTc5IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKKysrIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCkBAIC0xMTYsOCArMTE2LDggQEAgZ2V0X3JlbGF0 aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsIE9pZCByZWxhdGlvbk9iamVjdElkLCBib29sIGlu aHBhcmVudCwKIHsKIAlJbmRleAkJdmFybm8gPSByZWwtPnJlbGlkOwogCVJlbGF0aW9uCXJlbGF0 aW9uOwotCWJvb2wJCWhhc2luZGV4OwogCUxpc3QJICAgKmluZGV4aW5mb3MgPSBOSUw7CisJTGlz dAkgICAqcGFydGVkSW5kZXhpbmZvcyA9IE5JTDsKIAogCS8qCiAJICogV2UgbmVlZCBub3QgbG9j ayB0aGUgcmVsYXRpb24gc2luY2UgaXQgd2FzIGFscmVhZHkgbG9ja2VkLCBlaXRoZXIgYnkKQEAg LTE1NCwxNyArMTU0LDggQEAgZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsIE9p ZCByZWxhdGlvbk9iamVjdElkLCBib29sIGluaHBhcmVudCwKIAkvKiBSZXRyaWV2ZSB0aGUgcGFy YWxsZWxfd29ya2VycyByZWxvcHRpb24sIG9yIC0xIGlmIG5vdCBzZXQuICovCiAJcmVsLT5yZWxf cGFyYWxsZWxfd29ya2VycyA9IFJlbGF0aW9uR2V0UGFyYWxsZWxXb3JrZXJzKHJlbGF0aW9uLCAt MSk7CiAKLQkvKgotCSAqIE1ha2UgbGlzdCBvZiBpbmRleGVzLiAgSWdub3JlIGluZGV4ZXMgb24g c3lzdGVtIGNhdGFsb2dzIGlmIHRvbGQgdG8uCi0JICogRG9uJ3QgYm90aGVyIHdpdGggaW5kZXhl cyBmb3IgYW4gaW5oZXJpdGFuY2UgcGFyZW50LCBlaXRoZXIuCi0JICovCi0JaWYgKGluaHBhcmVu dCB8fAotCQkoSWdub3JlU3lzdGVtSW5kZXhlcyAmJiBJc1N5c3RlbVJlbGF0aW9uKHJlbGF0aW9u KSkpCi0JCWhhc2luZGV4ID0gZmFsc2U7Ci0JZWxzZQotCQloYXNpbmRleCA9IHJlbGF0aW9uLT5y ZF9yZWwtPnJlbGhhc2luZGV4OwotCi0JaWYgKGhhc2luZGV4KQorCS8qIE1ha2UgbGlzdCBvZiBp bmRleGVzLiBJZ25vcmUgaW5kZXhlcyBvbiBzeXN0ZW0gY2F0YWxvZ3MgaWYgdG9sZCB0by4gKi8K KwlpZiAoIShJZ25vcmVTeXN0ZW1JbmRleGVzICYmIElzU3lzdGVtUmVsYXRpb24ocmVsYXRpb24p KSAmJiByZWxhdGlvbi0+cmRfcmVsLT5yZWxoYXNpbmRleCkKIAl7CiAJCUxpc3QJICAgKmluZGV4 b2lkbGlzdDsKIAkJTE9DS01PREUJbG1vZGU7CkBAIC0yMTMsMTAgKzIwNCwxMyBAQCBnZXRfcmVs YXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwgT2lkIHJlbGF0aW9uT2JqZWN0SWQsIGJvb2wg aW5ocGFyZW50LAogCQkJfQogCiAJCQkvKgotCQkJICogSWdub3JlIHBhcnRpdGlvbmVkIGluZGV4 ZXMsIHNpbmNlIHRoZXkgYXJlIG5vdCB1c2FibGUgZm9yCi0JCQkgKiBxdWVyaWVzLgorCQkJICog RG9uJ3QgYWRkIHBhcnRpdGlvbmVkIGluZGV4ZXMgdG8gdGhlIGluZGV4bGlzdCwgc2luY2UgdGhl eSBhcmUKKwkJCSAqIG5vdCB1c2FibGUgYnkgdGhlIGV4ZWN1dG9yLiBJZiB0aGV5IGFyZSB1bmlx dWUgYWRkIHRoZW0gdG8gdGhlCisJCQkgKiBwYXJ0ZWRJbmRleGxpc3QgaW5zdGVhZCwgdG8gdXNl IGZvciBmdXJ0aGVyIHBydW5pbmcuIFRoYXQgaXMKKwkJCSAqIHJlbGV2YW50IGZvciB0aGUgam9p biBwcnVuaW5nLCBpZiB0aGUgb3V0ZXIgcmVsYXRpb24gaXMgcGFydGl0aW9uZWQuCisJCQkgKiBJ ZiB0aGV5IGFyZW4ndCB0aGF0IGVpdGhlciwgc2ltcGx5IHNraXAgdGhlbS4KIAkJCSAqLwotCQkJ aWYgKGluZGV4UmVsYXRpb24tPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVE X0lOREVYKQorCQkJaWYgKGluaHBhcmVudCAmJiAoIWluZGV4LT5pbmRpc3VuaXF1ZSB8fCBpbmRl eFJlbGF0aW9uLT5yZF9yZWwtPnJlbGtpbmQgIT0gUkVMS0lORF9QQVJUSVRJT05FRF9JTkRFWCkp CiAJCQl7CiAJCQkJaW5kZXhfY2xvc2UoaW5kZXhSZWxhdGlvbiwgTm9Mb2NrKTsKIAkJCQljb250 aW51ZTsKQEAgLTI2NCw3ICsyNTgsNDAgQEAgZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8g KnJvb3QsIE9pZCByZWxhdGlvbk9iamVjdElkLCBib29sIGluaHBhcmVudCwKIAkJCQlpbmZvLT5p bmRleGNvbGxhdGlvbnNbaV0gPSBpbmRleFJlbGF0aW9uLT5yZF9pbmRjb2xsYXRpb25baV07CiAJ CQl9CiAKLQkJCWluZm8tPnJlbGFtID0gaW5kZXhSZWxhdGlvbi0+cmRfcmVsLT5yZWxhbTsKKwkJ CS8qCisJCQkgKiBGZXRjaCB0aGUgaW5kZXggZXhwcmVzc2lvbnMgYW5kIHByZWRpY2F0ZSwgaWYg YW55LiAgV2UgbXVzdAorCQkJICogbW9kaWZ5IHRoZSBjb3BpZXMgd2Ugb2J0YWluIGZyb20gdGhl IHJlbGNhY2hlIHRvIGhhdmUgdGhlCisJCQkgKiBjb3JyZWN0IHZhcm5vIGZvciB0aGUgcGFyZW50 IHJlbGF0aW9uLCBzbyB0aGF0IHRoZXkgbWF0Y2ggdXAKKwkJCSAqIGNvcnJlY3RseSBhZ2FpbnN0 IHF1YWwgY2xhdXNlcy4KKwkJCSAqLworCQkJaW5mby0+aW5kZXhwcnMgPSBSZWxhdGlvbkdldElu ZGV4RXhwcmVzc2lvbnMoaW5kZXhSZWxhdGlvbik7CisJCQlpbmZvLT5pbmRwcmVkID0gUmVsYXRp b25HZXRJbmRleFByZWRpY2F0ZShpbmRleFJlbGF0aW9uKTsKKwkJCWlmIChpbmZvLT5pbmRleHBy cyAmJiB2YXJubyAhPSAxKQorCQkJCUNoYW5nZVZhck5vZGVzKChOb2RlICopIGluZm8tPmluZGV4 cHJzLCAxLCB2YXJubywgMCk7CisJCQlpZiAoaW5mby0+aW5kcHJlZCAmJiB2YXJubyAhPSAxKQor CQkJCUNoYW5nZVZhck5vZGVzKChOb2RlICopIGluZm8tPmluZHByZWQsIDEsIHZhcm5vLCAwKTsK KworCQkJaW5mby0+dW5pcXVlID0gaW5kZXgtPmluZGlzdW5pcXVlOworCQkJaW5mby0+aW1tZWRp YXRlID0gaW5kZXgtPmluZGltbWVkaWF0ZTsKKworCQkJLyoKKwkJCSAqIERvbid0IGFkZCBwYXJ0 aXRpb25lZCBpbmRleGVzIHRvIHRoZSBpbmRleGxpc3QsIGFkZCB0aGVtIHRvIHRoZQorCQkJICog cGFydGVkSW5kZXhsaXN0IGluc3RlYWQsIHNpbmNlIHRoZXkgYXJlIG5vdCB1c2FibGUgYnkgdGhl CisJCQkgKiBleGVjdXRvci4KKwkJCSAqLworCQkJaWYgKGluZGV4UmVsYXRpb24tPnJkX3JlbC0+ cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX0lOREVYKQorCQkJeworCQkJCWluZGV4X2Ns b3NlKGluZGV4UmVsYXRpb24sIE5vTG9jayk7CisJCQkJcGFydGVkSW5kZXhpbmZvcyA9IGxhcHBl bmQocGFydGVkSW5kZXhpbmZvcywgaW5mbyk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlu Zm8tPmh5cG90aGV0aWNhbCA9IGZhbHNlOworCQkJaW5mby0+aW5kcmVzdHJpY3RpbmZvID0gTklM OwkvKiBzZXQgbGF0ZXIsIGluIGluZHhwYXRoLmMgKi8KKwkJCWluZm8tPnByZWRPSyA9IGZhbHNl OwkvKiBzZXQgbGF0ZXIsIGluIGluZHhwYXRoLmMgKi8KKworCQkJLyogQnVpbGQgdGFyZ2V0bGlz dCB1c2luZyB0aGUgY29tcGxldGVkIGluZGV4cHJzIGRhdGEgKi8KKwkJCWluZm8tPmluZGV4dGxp c3QgPSBidWlsZF9pbmRleF90bGlzdChyb290LCBpbmZvLCByZWxhdGlvbik7CiAKIAkJCS8qIFdl IGNvcHkganVzdCB0aGUgZmllbGRzIHdlIG5lZWQsIG5vdCBhbGwgb2YgcmRfaW5kYW0gKi8KIAkJ CWFtcm91dGluZSA9IGluZGV4UmVsYXRpb24tPnJkX2luZGFtOwpAQCAtMjg0LDYgKzMxMSw4IEBA IGdldF9yZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290LCBPaWQgcmVsYXRpb25PYmplY3RJ ZCwgYm9vbCBpbmhwYXJlbnQsCiAJCQkvKiBGZXRjaCBpbmRleCBvcGNsYXNzIG9wdGlvbnMgKi8K IAkJCWluZm8tPm9wY2xhc3NvcHRpb25zID0gUmVsYXRpb25HZXRJbmRleEF0dE9wdGlvbnMoaW5k ZXhSZWxhdGlvbiwgdHJ1ZSk7CiAKKwkJCWluZm8tPnJlbGFtID0gaW5kZXhSZWxhdGlvbi0+cmRf cmVsLT5yZWxhbTsKKwogCQkJLyoKIAkJCSAqIEZldGNoIHRoZSBvcmRlcmluZyBpbmZvcm1hdGlv biBmb3IgdGhlIGluZGV4LCBpZiBhbnkuCiAJCQkgKi8KQEAgLTM3MCwyOCArMzk5LDYgQEAgZ2V0 X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsIE9pZCByZWxhdGlvbk9iamVjdElkLCBi b29sIGluaHBhcmVudCwKIAkJCQlpbmZvLT5udWxsc19maXJzdCA9IE5VTEw7CiAJCQl9CiAKLQkJ CS8qCi0JCQkgKiBGZXRjaCB0aGUgaW5kZXggZXhwcmVzc2lvbnMgYW5kIHByZWRpY2F0ZSwgaWYg YW55LiAgV2UgbXVzdAotCQkJICogbW9kaWZ5IHRoZSBjb3BpZXMgd2Ugb2J0YWluIGZyb20gdGhl IHJlbGNhY2hlIHRvIGhhdmUgdGhlCi0JCQkgKiBjb3JyZWN0IHZhcm5vIGZvciB0aGUgcGFyZW50 IHJlbGF0aW9uLCBzbyB0aGF0IHRoZXkgbWF0Y2ggdXAKLQkJCSAqIGNvcnJlY3RseSBhZ2FpbnN0 IHF1YWwgY2xhdXNlcy4KLQkJCSAqLwotCQkJaW5mby0+aW5kZXhwcnMgPSBSZWxhdGlvbkdldElu ZGV4RXhwcmVzc2lvbnMoaW5kZXhSZWxhdGlvbik7Ci0JCQlpbmZvLT5pbmRwcmVkID0gUmVsYXRp b25HZXRJbmRleFByZWRpY2F0ZShpbmRleFJlbGF0aW9uKTsKLQkJCWlmIChpbmZvLT5pbmRleHBy cyAmJiB2YXJubyAhPSAxKQotCQkJCUNoYW5nZVZhck5vZGVzKChOb2RlICopIGluZm8tPmluZGV4 cHJzLCAxLCB2YXJubywgMCk7Ci0JCQlpZiAoaW5mby0+aW5kcHJlZCAmJiB2YXJubyAhPSAxKQot CQkJCUNoYW5nZVZhck5vZGVzKChOb2RlICopIGluZm8tPmluZHByZWQsIDEsIHZhcm5vLCAwKTsK LQotCQkJLyogQnVpbGQgdGFyZ2V0bGlzdCB1c2luZyB0aGUgY29tcGxldGVkIGluZGV4cHJzIGRh dGEgKi8KLQkJCWluZm8tPmluZGV4dGxpc3QgPSBidWlsZF9pbmRleF90bGlzdChyb290LCBpbmZv LCByZWxhdGlvbik7Ci0KLQkJCWluZm8tPmluZHJlc3RyaWN0aW5mbyA9IE5JTDsJLyogc2V0IGxh dGVyLCBpbiBpbmR4cGF0aC5jICovCi0JCQlpbmZvLT5wcmVkT0sgPSBmYWxzZTsJLyogc2V0IGxh dGVyLCBpbiBpbmR4cGF0aC5jICovCi0JCQlpbmZvLT51bmlxdWUgPSBpbmRleC0+aW5kaXN1bmlx dWU7Ci0JCQlpbmZvLT5pbW1lZGlhdGUgPSBpbmRleC0+aW5kaW1tZWRpYXRlOwotCQkJaW5mby0+ aHlwb3RoZXRpY2FsID0gZmFsc2U7Ci0KIAkJCS8qCiAJCQkgKiBFc3RpbWF0ZSB0aGUgaW5kZXgg c2l6ZS4gIElmIGl0J3Mgbm90IGEgcGFydGlhbCBpbmRleCwgd2UgbG9jawogCQkJICogdGhlIG51 bWJlci1vZi10dXBsZXMgZXN0aW1hdGUgdG8gZXF1YWwgdGhlIHBhcmVudCB0YWJsZTsgaWYgaXQK QEAgLTQ0MSw2ICs0NDgsNyBAQCBnZXRfcmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwg T2lkIHJlbGF0aW9uT2JqZWN0SWQsIGJvb2wgaW5ocGFyZW50LAogCX0KIAogCXJlbC0+aW5kZXhs aXN0ID0gaW5kZXhpbmZvczsKKwlyZWwtPnBhcnRlZEluZGV4bGlzdCA9IHBhcnRlZEluZGV4aW5m b3M7CiAKIAlyZWwtPnN0YXRsaXN0ID0gZ2V0X3JlbGF0aW9uX3N0YXRpc3RpY3MocmVsLCByZWxh dGlvbik7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oIGIvc3Jj L2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggMWYzODQ1YjNmZS4uOGE0NmUwY2E3MCAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1 ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTMzNCwxMSArMzM0LDExIEBAIHN0cnVjdCBQbGFubmVy SW5mbwogCiAJTWVtb3J5Q29udGV4dCBwbGFubmVyX2N4dDsJLyogY29udGV4dCBob2xkaW5nIFBs YW5uZXJJbmZvICovCiAKLQlDYXJkaW5hbGl0eQl0b3RhbF90YWJsZV9wYWdlczsJLyogIyBvZiBw YWdlcyBpbiBhbGwgbm9uLWR1bW15IHRhYmxlcyBvZgorCUNhcmRpbmFsaXR5IHRvdGFsX3RhYmxl X3BhZ2VzOwkvKiAjIG9mIHBhZ2VzIGluIGFsbCBub24tZHVtbXkgdGFibGVzIG9mCiAJCQkJCQkJ CQkgKiBxdWVyeSAqLwogCi0JU2VsZWN0aXZpdHkJdHVwbGVfZnJhY3Rpb247IC8qIHR1cGxlX2Zy YWN0aW9uIHBhc3NlZCB0byBxdWVyeV9wbGFubmVyICovCi0JQ2FyZGluYWxpdHkJbGltaXRfdHVw bGVzOwkvKiBsaW1pdF90dXBsZXMgcGFzc2VkIHRvIHF1ZXJ5X3BsYW5uZXIgKi8KKwlTZWxlY3Rp dml0eSB0dXBsZV9mcmFjdGlvbjsgLyogdHVwbGVfZnJhY3Rpb24gcGFzc2VkIHRvIHF1ZXJ5X3Bs YW5uZXIgKi8KKwlDYXJkaW5hbGl0eSBsaW1pdF90dXBsZXM7CS8qIGxpbWl0X3R1cGxlcyBwYXNz ZWQgdG8gcXVlcnlfcGxhbm5lciAqLwogCiAJSW5kZXgJCXF1YWxfc2VjdXJpdHlfbGV2ZWw7CS8q IG1pbmltdW0gc2VjdXJpdHlfbGV2ZWwgZm9yIHF1YWxzICovCiAJLyogTm90ZTogcXVhbF9zZWN1 cml0eV9sZXZlbCBpcyB6ZXJvIGlmIHRoZXJlIGFyZSBubyBzZWN1cml0eVF1YWxzICovCkBAIC02 ODEsNyArNjgxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVsT3B0SW5mbwogCVJlbGlkcwkJcmVsaWRz OwkJCS8qIHNldCBvZiBiYXNlIHJlbGlkcyAocmFuZ2V0YWJsZSBpbmRleGVzKSAqLwogCiAJLyog c2l6ZSBlc3RpbWF0ZXMgZ2VuZXJhdGVkIGJ5IHBsYW5uZXIgKi8KLQlDYXJkaW5hbGl0eQlyb3dz OwkJCS8qIGVzdGltYXRlZCBudW1iZXIgb2YgcmVzdWx0IHR1cGxlcyAqLworCUNhcmRpbmFsaXR5 IHJvd3M7CQkJLyogZXN0aW1hdGVkIG51bWJlciBvZiByZXN1bHQgdHVwbGVzICovCiAKIAkvKiBw ZXItcmVsYXRpb24gcGxhbm5lciBjb250cm9sIGZsYWdzICovCiAJYm9vbAkJY29uc2lkZXJfc3Rh cnR1cDsJLyoga2VlcCBjaGVhcC1zdGFydHVwLWNvc3QgcGF0aHM/ICovCkBAIC03MTYsOSArNzE2 LDEwIEBAIHR5cGVkZWYgc3RydWN0IFJlbE9wdEluZm8KIAlMaXN0CSAgICpsYXRlcmFsX3ZhcnM7 CS8qIExBVEVSQUwgVmFycyBhbmQgUEhWcyByZWZlcmVuY2VkIGJ5IHJlbCAqLwogCVJlbGlkcwkJ bGF0ZXJhbF9yZWZlcmVuY2VyczsJLyogcmVscyB0aGF0IHJlZmVyZW5jZSBtZSBsYXRlcmFsbHkg Ki8KIAlMaXN0CSAgICppbmRleGxpc3Q7CQkvKiBsaXN0IG9mIEluZGV4T3B0SW5mbyAqLworCUxp c3QJICAgKnBhcnRlZEluZGV4bGlzdDsJLyogbGlzdCBvZiBJbmRleE9wdEluZm8gKi8KIAlMaXN0 CSAgICpzdGF0bGlzdDsJCS8qIGxpc3Qgb2YgU3RhdGlzdGljRXh0SW5mbyAqLwogCUJsb2NrTnVt YmVyIHBhZ2VzOwkJCS8qIHNpemUgZXN0aW1hdGVzIGRlcml2ZWQgZnJvbSBwZ19jbGFzcyAqLwot CUNhcmRpbmFsaXR5CXR1cGxlczsKKwlDYXJkaW5hbGl0eSB0dXBsZXM7CiAJZG91YmxlCQlhbGx2 aXNmcmFjOwogCUJpdG1hcHNldCAgKmVjbGFzc19pbmRleGVzOyAvKiBJbmRleGVzIGluIFBsYW5u ZXJJbmZvJ3MgZXFfY2xhc3NlcyBsaXN0IG9mCiAJCQkJCQkJCSAqIEVDcyB0aGF0IG1lbnRpb24g dGhpcyByZWwgKi8KQEAgLTg0MSw3ICs4NDIsNyBAQCBzdHJ1Y3QgSW5kZXhPcHRJbmZvCiAKIAkv KiBpbmRleC1zaXplIHN0YXRpc3RpY3MgKGZyb20gcGdfY2xhc3MgYW5kIGVsc2V3aGVyZSkgKi8K IAlCbG9ja051bWJlciBwYWdlczsJCQkvKiBudW1iZXIgb2YgZGlzayBwYWdlcyBpbiBpbmRleCAq LwotCUNhcmRpbmFsaXR5CXR1cGxlczsJCQkvKiBudW1iZXIgb2YgaW5kZXggdHVwbGVzIGluIGlu ZGV4ICovCisJQ2FyZGluYWxpdHkgdHVwbGVzOwkJCS8qIG51bWJlciBvZiBpbmRleCB0dXBsZXMg aW4gaW5kZXggKi8KIAlpbnQJCQl0cmVlX2hlaWdodDsJLyogaW5kZXggdHJlZSBoZWlnaHQsIG9y IC0xIGlmIHVua25vd24gKi8KIAogCS8qIGluZGV4IGRlc2NyaXB0b3IgaW5mb3JtYXRpb24gKi8K QEAgLTExNDAsNyArMTE0MSw3IEBAIHR5cGVkZWYgc3RydWN0IFBhcmFtUGF0aEluZm8KIAlOb2Rl VGFnCQl0eXBlOwogCiAJUmVsaWRzCQlwcGlfcmVxX291dGVyOwkvKiByZWxzIHN1cHBseWluZyBw YXJhbWV0ZXJzIHVzZWQgYnkgcGF0aCAqLwotCUNhcmRpbmFsaXR5CXBwaV9yb3dzOwkJLyogZXN0 aW1hdGVkIG51bWJlciBvZiByZXN1bHQgdHVwbGVzICovCisJQ2FyZGluYWxpdHkgcHBpX3Jvd3M7 CQkvKiBlc3RpbWF0ZWQgbnVtYmVyIG9mIHJlc3VsdCB0dXBsZXMgKi8KIAlMaXN0CSAgICpwcGlf Y2xhdXNlczsJLyogam9pbiBjbGF1c2VzIGF2YWlsYWJsZSBmcm9tIG91dGVyIHJlbHMgKi8KIH0g UGFyYW1QYXRoSW5mbzsKIApAQCAtMTE5MCw3ICsxMTkxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUGF0 aAogCWludAkJCXBhcmFsbGVsX3dvcmtlcnM7CS8qIGRlc2lyZWQgIyBvZiB3b3JrZXJzOyAwID0g bm90IHBhcmFsbGVsICovCiAKIAkvKiBlc3RpbWF0ZWQgc2l6ZS9jb3N0cyBmb3IgcGF0aCAoc2Vl IGNvc3RzaXplLmMgZm9yIG1vcmUgaW5mbykgKi8KLQlDYXJkaW5hbGl0eQlyb3dzOwkJCS8qIGVz dGltYXRlZCBudW1iZXIgb2YgcmVzdWx0IHR1cGxlcyAqLworCUNhcmRpbmFsaXR5IHJvd3M7CQkJ LyogZXN0aW1hdGVkIG51bWJlciBvZiByZXN1bHQgdHVwbGVzICovCiAJQ29zdAkJc3RhcnR1cF9j b3N0OwkvKiBjb3N0IGV4cGVuZGVkIGJlZm9yZSBmZXRjaGluZyBhbnkgdHVwbGVzICovCiAJQ29z dAkJdG90YWxfY29zdDsJCS8qIHRvdGFsIGNvc3QgKGFzc3VtaW5nIGFsbCB0dXBsZXMgZmV0Y2hl ZCkgKi8KIApAQCAtMTQ1Myw3ICsxNDU0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQXBwZW5kUGF0aAog CUxpc3QJICAgKnN1YnBhdGhzOwkJLyogbGlzdCBvZiBjb21wb25lbnQgUGF0aHMgKi8KIAkvKiBJ bmRleCBvZiBmaXJzdCBwYXJ0aWFsIHBhdGggaW4gc3VicGF0aHM7IGxpc3RfbGVuZ3RoKHN1YnBh dGhzKSBpZiBub25lICovCiAJaW50CQkJZmlyc3RfcGFydGlhbF9wYXRoOwotCUNhcmRpbmFsaXR5 CWxpbWl0X3R1cGxlczsJLyogaGFyZCBsaW1pdCBvbiBvdXRwdXQgdHVwbGVzLCBvciAtMSAqLwor CUNhcmRpbmFsaXR5IGxpbWl0X3R1cGxlczsJLyogaGFyZCBsaW1pdCBvbiBvdXRwdXQgdHVwbGVz LCBvciAtMSAqLwogfSBBcHBlbmRQYXRoOwogCiAjZGVmaW5lIElTX0RVTU1ZX0FQUEVORChwKSBc CkBAIC0xNDc1LDcgKzE0NzYsNyBAQCB0eXBlZGVmIHN0cnVjdCBNZXJnZUFwcGVuZFBhdGgKIHsK IAlQYXRoCQlwYXRoOwogCUxpc3QJICAgKnN1YnBhdGhzOwkJLyogbGlzdCBvZiBjb21wb25lbnQg UGF0aHMgKi8KLQlDYXJkaW5hbGl0eQlsaW1pdF90dXBsZXM7CS8qIGhhcmQgbGltaXQgb24gb3V0 cHV0IHR1cGxlcywgb3IgLTEgKi8KKwlDYXJkaW5hbGl0eSBsaW1pdF90dXBsZXM7CS8qIGhhcmQg bGltaXQgb24gb3V0cHV0IHR1cGxlcywgb3IgLTEgKi8KIH0gTWVyZ2VBcHBlbmRQYXRoOwogCiAv KgpAQCAtMTc3Myw3ICsxNzc0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQWdnUGF0aAogCVBhdGgJICAg KnN1YnBhdGg7CQkvKiBwYXRoIHJlcHJlc2VudGluZyBpbnB1dCBzb3VyY2UgKi8KIAlBZ2dTdHJh dGVneSBhZ2dzdHJhdGVneTsJLyogYmFzaWMgc3RyYXRlZ3ksIHNlZSBub2Rlcy5oICovCiAJQWdn U3BsaXQJYWdnc3BsaXQ7CQkvKiBhZ2ctc3BsaXR0aW5nIG1vZGUsIHNlZSBub2Rlcy5oICovCi0J Q2FyZGluYWxpdHkJbnVtR3JvdXBzOwkJLyogZXN0aW1hdGVkIG51bWJlciBvZiBncm91cHMgaW4g aW5wdXQgKi8KKwlDYXJkaW5hbGl0eSBudW1Hcm91cHM7CQkvKiBlc3RpbWF0ZWQgbnVtYmVyIG9m IGdyb3VwcyBpbiBpbnB1dCAqLwogCXVpbnQ2NAkJdHJhbnNpdGlvblNwYWNlOwkvKiBmb3IgcGFz cy1ieS1yZWYgdHJhbnNpdGlvbiBkYXRhICovCiAJTGlzdAkgICAqZ3JvdXBDbGF1c2U7CS8qIGEg bGlzdCBvZiBTb3J0R3JvdXBDbGF1c2UncyAqLwogCUxpc3QJICAgKnF1YWw7CQkJLyogcXVhbHMg KEhBVklORyBxdWFscyksIGlmIGFueSAqLwpAQCAtMTc4Nyw3ICsxNzg4LDcgQEAgdHlwZWRlZiBz dHJ1Y3QgR3JvdXBpbmdTZXREYXRhCiB7CiAJTm9kZVRhZwkJdHlwZTsKIAlMaXN0CSAgICpzZXQ7 CQkJLyogZ3JvdXBpbmcgc2V0IGFzIGxpc3Qgb2Ygc29ydGdyb3VwcmVmcyAqLwotCUNhcmRpbmFs aXR5CW51bUdyb3VwczsJCS8qIGVzdC4gbnVtYmVyIG9mIHJlc3VsdCBncm91cHMgKi8KKwlDYXJk aW5hbGl0eSBudW1Hcm91cHM7CQkvKiBlc3QuIG51bWJlciBvZiByZXN1bHQgZ3JvdXBzICovCiB9 IEdyb3VwaW5nU2V0RGF0YTsKIAogdHlwZWRlZiBzdHJ1Y3QgUm9sbHVwRGF0YQpAQCAtMTc5Niw3 ICsxNzk3LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUm9sbHVwRGF0YQogCUxpc3QJICAgKmdyb3VwQ2xh dXNlOwkvKiBhcHBsaWNhYmxlIHN1YnNldCBvZiBwYXJzZS0+Z3JvdXBDbGF1c2UgKi8KIAlMaXN0 CSAgICpnc2V0czsJCQkvKiBsaXN0cyBvZiBpbnRlZ2VyIGluZGV4ZXMgaW50byBncm91cENsYXVz ZSAqLwogCUxpc3QJICAgKmdzZXRzX2RhdGE7CQkvKiBsaXN0IG9mIEdyb3VwaW5nU2V0RGF0YSAq LwotCUNhcmRpbmFsaXR5CW51bUdyb3VwczsJCS8qIGVzdC4gbnVtYmVyIG9mIHJlc3VsdCBncm91 cHMgKi8KKwlDYXJkaW5hbGl0eSBudW1Hcm91cHM7CQkvKiBlc3QuIG51bWJlciBvZiByZXN1bHQg Z3JvdXBzICovCiAJYm9vbAkJaGFzaGFibGU7CQkvKiBjYW4gYmUgaGFzaGVkICovCiAJYm9vbAkJ aXNfaGFzaGVkOwkJLyogdG8gYmUgaW1wbGVtZW50ZWQgYXMgYSBoYXNoYWdnICovCiB9IFJvbGx1 cERhdGE7CkBAIC0xODQ3LDcgKzE4NDgsNyBAQCB0eXBlZGVmIHN0cnVjdCBTZXRPcFBhdGgKIAlM aXN0CSAgICpkaXN0aW5jdExpc3Q7CS8qIFNvcnRHcm91cENsYXVzZXMgaWRlbnRpZnlpbmcgdGFy Z2V0IGNvbHMgKi8KIAlBdHRyTnVtYmVyCWZsYWdDb2xJZHg7CQkvKiB3aGVyZSBpcyB0aGUgZmxh ZyBjb2x1bW4sIGlmIGFueSAqLwogCWludAkJCWZpcnN0RmxhZzsJCS8qIGZsYWcgdmFsdWUgZm9y IGZpcnN0IGlucHV0IHJlbGF0aW9uICovCi0JQ2FyZGluYWxpdHkJbnVtR3JvdXBzOwkJLyogZXN0 aW1hdGVkIG51bWJlciBvZiBncm91cHMgaW4gaW5wdXQgKi8KKwlDYXJkaW5hbGl0eSBudW1Hcm91 cHM7CQkvKiBlc3RpbWF0ZWQgbnVtYmVyIG9mIGdyb3VwcyBpbiBpbnB1dCAqLwogfSBTZXRPcFBh dGg7CiAKIC8qCkBAIC0xODYwLDcgKzE4NjEsNyBAQCB0eXBlZGVmIHN0cnVjdCBSZWN1cnNpdmVV bmlvblBhdGgKIAlQYXRoCSAgICpyaWdodHBhdGg7CiAJTGlzdAkgICAqZGlzdGluY3RMaXN0Owkv KiBTb3J0R3JvdXBDbGF1c2VzIGlkZW50aWZ5aW5nIHRhcmdldCBjb2xzICovCiAJaW50CQkJd3RQ YXJhbTsJCS8qIElEIG9mIFBhcmFtIHJlcHJlc2VudGluZyB3b3JrIHRhYmxlICovCi0JQ2FyZGlu YWxpdHkJbnVtR3JvdXBzOwkJLyogZXN0aW1hdGVkIG51bWJlciBvZiBncm91cHMgaW4gaW5wdXQg Ki8KKwlDYXJkaW5hbGl0eSBudW1Hcm91cHM7CQkvKiBlc3RpbWF0ZWQgbnVtYmVyIG9mIGdyb3Vw cyBpbiBpbnB1dCAqLwogfSBSZWN1cnNpdmVVbmlvblBhdGg7CiAKIC8qCkBAIC0yNjE2LDcgKzI2 MTcsNyBAQCB0eXBlZGVmIHN0cnVjdAogdHlwZWRlZiBzdHJ1Y3QKIHsKIAlib29sCQlsaW1pdF9u ZWVkZWQ7Ci0JQ2FyZGluYWxpdHkJbGltaXRfdHVwbGVzOworCUNhcmRpbmFsaXR5IGxpbWl0X3R1 cGxlczsKIAlpbnQ2NAkJY291bnRfZXN0OwogCWludDY0CQlvZmZzZXRfZXN0OwogfSBGaW5hbFBh dGhFeHRyYURhdGE7CkBAIC0yNjQ3LDE1ICsyNjQ4LDE1IEBAIHR5cGVkZWYgc3RydWN0IEpvaW5D b3N0V29ya3NwYWNlCiAJQ29zdAkJaW5uZXJfcmVzY2FuX3J1bl9jb3N0OwogCiAJLyogcHJpdmF0 ZSBmb3IgY29zdF9tZXJnZWpvaW4gY29kZSAqLwotCUNhcmRpbmFsaXR5CW91dGVyX3Jvd3M7Ci0J Q2FyZGluYWxpdHkJaW5uZXJfcm93czsKLQlDYXJkaW5hbGl0eQlvdXRlcl9za2lwX3Jvd3M7Ci0J Q2FyZGluYWxpdHkJaW5uZXJfc2tpcF9yb3dzOworCUNhcmRpbmFsaXR5IG91dGVyX3Jvd3M7CisJ Q2FyZGluYWxpdHkgaW5uZXJfcm93czsKKwlDYXJkaW5hbGl0eSBvdXRlcl9za2lwX3Jvd3M7CisJ Q2FyZGluYWxpdHkgaW5uZXJfc2tpcF9yb3dzOwogCiAJLyogcHJpdmF0ZSBmb3IgY29zdF9oYXNo am9pbiBjb2RlICovCiAJaW50CQkJbnVtYnVja2V0czsKIAlpbnQJCQludW1iYXRjaGVzOwotCUNh cmRpbmFsaXR5CWlubmVyX3Jvd3NfdG90YWw7CisJQ2FyZGluYWxpdHkgaW5uZXJfcm93c190b3Rh bDsKIH0gSm9pbkNvc3RXb3Jrc3BhY2U7CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9qb2luLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvcGFydGl0aW9uX2pvaW4ub3V0CmluZGV4IGJiNWI3YzQ3YTQuLjU2MmJhZDY1NDQgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX2pvaW4ub3V0CisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX2pvaW4ub3V0CkBAIC00ODY2LDE0 ICs0ODY2LDQyIEBAIFNFTEVDVCB0MS4qLCB0Mi4qIEZST00gYWxwaGEgdDEgSU5ORVIgSk9JTiBi ZXRhIHQyIE9OICh0MS5hID0gdDIuYSBBTkQgdDEuYiA9IHQyCiBDUkVBVEUgVEFCTEUgZnJhY3Rf dCAoaWQgQklHSU5ULCBQUklNQVJZIEtFWSAoaWQpKSBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsK IENSRUFURSBUQUJMRSBmcmFjdF90MCBQQVJUSVRJT04gT0YgZnJhY3RfdCBGT1IgVkFMVUVTIEZS T00gKCcwJykgVE8gKCcxMDAwJyk7CiBDUkVBVEUgVEFCTEUgZnJhY3RfdDEgUEFSVElUSU9OIE9G IGZyYWN0X3QgRk9SIFZBTFVFUyBGUk9NICgnMTAwMCcpIFRPICgnMjAwMCcpOworQ1JFQVRFIFRB QkxFIGZyYWN0X3ggKGlkIEJJR0lOVCwgUFJJTUFSWSBLRVkgKGlkKSkgUEFSVElUSU9OIEJZIFJB TkdFIChpZCk7CitDUkVBVEUgVEFCTEUgZnJhY3RfeDAgUEFSVElUSU9OIE9GIGZyYWN0X3ggRk9S IFZBTFVFUyBGUk9NICgnMCcpIFRPICgnMTAwMCcpOworQ1JFQVRFIFRBQkxFIGZyYWN0X3gxIFBB UlRJVElPTiBPRiBmcmFjdF94IEZPUiBWQUxVRVMgRlJPTSAoJzEwMDAnKSBUTyAoJzIwMDAnKTsK IC0tIGluc2VydCBkYXRhCiBJTlNFUlQgSU5UTyBmcmFjdF90IChpZCkgKFNFTEVDVCBnZW5lcmF0 ZV9zZXJpZXMoMCwgMTk5OSkpOwogQU5BTFlaRSBmcmFjdF90OwotLS0gdmVyaWZ5IHBsYW47IG5l c3RlZCBpbmRleCBvbmx5IHNjYW5zCitJTlNFUlQgSU5UTyBmcmFjdF94IChpZCkgKFNFTEVDVCBn ZW5lcmF0ZV9zZXJpZXMoMCwgMTk5OSkpOworQU5BTFlaRSBmcmFjdF94OworU0VUIG1heF9wYXJh bGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworU0VUIGVuYWJsZV9wYXJ0aXRpb253aXNlX2pv aW4gPSBvbjsKKy0tIHZlcmlmeSBwYXJ0aXRpb24gcHJ1bmluZwogU0VUIG1heF9wYXJhbGxlbF93 b3JrZXJzX3Blcl9nYXRoZXIgPSAwOwogU0VUIGVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW4gPSBv bjsKIEVYUExBSU4gKENPU1RTIE9GRikKLVNFTEVDVCAqIEZST00gZnJhY3RfdCB4IExFRlQgSk9J TiBmcmFjdF90IHkgVVNJTkcgKGlkKSBPUkRFUiBCWSBpZCBBU0MgTElNSVQgMTA7CitTRUxFQ1Qg eC5pZCBGUk9NIGZyYWN0X3ggeCBMRUZUIEpPSU4gZnJhY3RfdCB5IFVTSU5HIChpZCkgT1JERVIg QlkgaWQgQVNDIExJTUlUIDEwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTGltaXQKKyAgIC0+ICBB cHBlbmQKKyAgICAgICAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgZnJhY3RfeDBfcGtleSBv biBmcmFjdF94MCB4XzEKKyAgICAgICAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgZnJhY3Rf eDFfcGtleSBvbiBmcmFjdF94MSB4XzIKKyg0IHJvd3MpCisKK0VYUExBSU4gKENPU1RTIE9GRikK K1NFTEVDVCB4LmlkIEZST00gZnJhY3RfeCB4IExFRlQgSk9JTiBmcmFjdF90IHkgVVNJTkcgKGlk KSBPUkRFUiBCWSBpZCBBU0MgTElNSVQgMTA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBMaW1pdAor ICAgLT4gIEFwcGVuZAorICAgICAgICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBmcmFjdF94 MF9wa2V5IG9uIGZyYWN0X3gwIHhfMQorICAgICAgICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2lu ZyBmcmFjdF94MV9wa2V5IG9uIGZyYWN0X3gxIHhfMgorKDQgcm93cykKKworLS0gdmVyaWZ5IHBs YW47IG5lc3RlZCBpbmRleCBvbmx5IHNjYW5zCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1Qg eC5pZCwgeS5pZCBGUk9NIGZyYWN0X3ggeCBMRUZUIEpPSU4gZnJhY3RfdCB5IFVTSU5HIChpZCkg T1JERVIgQlkgeC5pZCBBU0MgTElNSVQgMTA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KICBMaW1pdApAQCAtNDg4MSwzMiArNDkwOSwzMyBAQCBTRUxFQ1QgKiBGUk9NIGZyYWN0X3Qg eCBMRUZUIEpPSU4gZnJhY3RfdCB5IFVTSU5HIChpZCkgT1JERVIgQlkgaWQgQVNDIExJTUlUIDEw OwogICAgICAgICAgU29ydCBLZXk6IHguaWQKICAgICAgICAgIC0+ICBNZXJnZSBMZWZ0IEpvaW4K ICAgICAgICAgICAgICAgIE1lcmdlIENvbmQ6ICh4XzEuaWQgPSB5XzEuaWQpCi0gICAgICAgICAg ICAgICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIGZyYWN0X3QwX3BrZXkgb24gZnJhY3RfdDAg eF8xCisgICAgICAgICAgICAgICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIGZyYWN0X3gwX3Br ZXkgb24gZnJhY3RfeDAgeF8xCiAgICAgICAgICAgICAgICAtPiAgSW5kZXggT25seSBTY2FuIHVz aW5nIGZyYWN0X3QwX3BrZXkgb24gZnJhY3RfdDAgeV8xCiAgICAgICAgICAtPiAgTWVyZ2UgTGVm dCBKb2luCiAgICAgICAgICAgICAgICBNZXJnZSBDb25kOiAoeF8yLmlkID0geV8yLmlkKQotICAg ICAgICAgICAgICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBmcmFjdF90MV9wa2V5IG9uIGZy YWN0X3QxIHhfMgorICAgICAgICAgICAgICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBmcmFj dF94MV9wa2V5IG9uIGZyYWN0X3gxIHhfMgogICAgICAgICAgICAgICAgLT4gIEluZGV4IE9ubHkg U2NhbiB1c2luZyBmcmFjdF90MV9wa2V5IG9uIGZyYWN0X3QxIHlfMgogKDExIHJvd3MpCiAKIEVY UExBSU4gKENPU1RTIE9GRikKLVNFTEVDVCAqIEZST00gZnJhY3RfdCB4IExFRlQgSk9JTiBmcmFj dF90IHkgVVNJTkcgKGlkKSBPUkRFUiBCWSBpZCBERVNDIExJTUlUIDEwOworU0VMRUNUIHguaWQs IHkuaWQgRlJPTSBmcmFjdF94IHggTEVGVCBKT0lOIGZyYWN0X3QgeSBVU0lORyAoaWQpIE9SREVS IEJZIHguaWQgREVTQyBMSU1JVCAxMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQogIExpbWl0CiAgICAtPiAgTWVyZ2UgQXBwZW5kCiAgICAgICAgICBT b3J0IEtleTogeC5pZCBERVNDCiAgICAgICAgICAtPiAgTmVzdGVkIExvb3AgTGVmdCBKb2luCi0g ICAgICAgICAgICAgICAtPiAgSW5kZXggT25seSBTY2FuIEJhY2t3YXJkIHVzaW5nIGZyYWN0X3Qw X3BrZXkgb24gZnJhY3RfdDAgeF8xCisgICAgICAgICAgICAgICAtPiAgSW5kZXggT25seSBTY2Fu IEJhY2t3YXJkIHVzaW5nIGZyYWN0X3gwX3BrZXkgb24gZnJhY3RfeDAgeF8xCiAgICAgICAgICAg ICAgICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIGZyYWN0X3QwX3BrZXkgb24gZnJhY3RfdDAg eV8xCiAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSB4XzEuaWQpCiAgICAg ICAgICAtPiAgTmVzdGVkIExvb3AgTGVmdCBKb2luCi0gICAgICAgICAgICAgICAtPiAgSW5kZXgg T25seSBTY2FuIEJhY2t3YXJkIHVzaW5nIGZyYWN0X3QxX3BrZXkgb24gZnJhY3RfdDEgeF8yCisg ICAgICAgICAgICAgICAtPiAgSW5kZXggT25seSBTY2FuIEJhY2t3YXJkIHVzaW5nIGZyYWN0X3gx X3BrZXkgb24gZnJhY3RfeDEgeF8yCiAgICAgICAgICAgICAgICAtPiAgSW5kZXggT25seSBTY2Fu IHVzaW5nIGZyYWN0X3QxX3BrZXkgb24gZnJhY3RfdDEgeV8yCiAgICAgICAgICAgICAgICAgICAg ICBJbmRleCBDb25kOiAoaWQgPSB4XzIuaWQpCiAoMTEgcm93cykKIAogLS0gY2xlYW51cAogRFJP UCBUQUJMRSBmcmFjdF90OworRFJPUCBUQUJMRSBmcmFjdF94OwogUkVTRVQgbWF4X3BhcmFsbGVs X3dvcmtlcnNfcGVyX2dhdGhlcjsKIFJFU0VUIGVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW47CmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wYXJ0aXRpb25fam9pbi5zcWwgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC9wYXJ0aXRpb25fam9pbi5zcWwKaW5kZXggNjdmNTA2MzYxZi4uMzll MjM5MTFkMCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGFydGl0aW9uX2pvaW4u c3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRpdGlvbl9qb2luLnNxbApAQCAtMTE0 OCwyMiArMTE0OCwzOCBAQCBDUkVBVEUgVEFCTEUgZnJhY3RfdCAoaWQgQklHSU5ULCBQUklNQVJZ IEtFWSAoaWQpKSBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKIENSRUFURSBUQUJMRSBmcmFjdF90 MCBQQVJUSVRJT04gT0YgZnJhY3RfdCBGT1IgVkFMVUVTIEZST00gKCcwJykgVE8gKCcxMDAwJyk7 CiBDUkVBVEUgVEFCTEUgZnJhY3RfdDEgUEFSVElUSU9OIE9GIGZyYWN0X3QgRk9SIFZBTFVFUyBG Uk9NICgnMTAwMCcpIFRPICgnMjAwMCcpOwogCitDUkVBVEUgVEFCTEUgZnJhY3RfeCAoaWQgQklH SU5ULCBQUklNQVJZIEtFWSAoaWQpKSBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBU QUJMRSBmcmFjdF94MCBQQVJUSVRJT04gT0YgZnJhY3RfeCBGT1IgVkFMVUVTIEZST00gKCcwJykg VE8gKCcxMDAwJyk7CitDUkVBVEUgVEFCTEUgZnJhY3RfeDEgUEFSVElUSU9OIE9GIGZyYWN0X3gg Rk9SIFZBTFVFUyBGUk9NICgnMTAwMCcpIFRPICgnMjAwMCcpOwogLS0gaW5zZXJ0IGRhdGEKIElO U0VSVCBJTlRPIGZyYWN0X3QgKGlkKSAoU0VMRUNUIGdlbmVyYXRlX3NlcmllcygwLCAxOTk5KSk7 CiBBTkFMWVpFIGZyYWN0X3Q7CitJTlNFUlQgSU5UTyBmcmFjdF94IChpZCkgKFNFTEVDVCBnZW5l cmF0ZV9zZXJpZXMoMCwgMTk5OSkpOworQU5BTFlaRSBmcmFjdF94OwogCi0tLSB2ZXJpZnkgcGxh bjsgbmVzdGVkIGluZGV4IG9ubHkgc2NhbnMKIFNFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJf Z2F0aGVyID0gMDsKIFNFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9qb2luID0gb247CiAKKy0tIHZl cmlmeSBwYXJ0aXRpb24gcHJ1bmluZworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRo ZXIgPSAwOworU0VUIGVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW4gPSBvbjsKKworRVhQTEFJTiAo Q09TVFMgT0ZGKQorU0VMRUNUIHguaWQgRlJPTSBmcmFjdF94IHggTEVGVCBKT0lOIGZyYWN0X3Qg eSBVU0lORyAoaWQpIE9SREVSIEJZIGlkIEFTQyBMSU1JVCAxMDsKKworRVhQTEFJTiAoQ09TVFMg T0ZGKQorU0VMRUNUIHguaWQgRlJPTSBmcmFjdF94IHggTEVGVCBKT0lOIGZyYWN0X3QgeSBVU0lO RyAoaWQpIE9SREVSIEJZIGlkIEFTQyBMSU1JVCAxMDsKKworLS0gdmVyaWZ5IHBsYW47IG5lc3Rl ZCBpbmRleCBvbmx5IHNjYW5zCiBFWFBMQUlOIChDT1NUUyBPRkYpCi1TRUxFQ1QgKiBGUk9NIGZy YWN0X3QgeCBMRUZUIEpPSU4gZnJhY3RfdCB5IFVTSU5HIChpZCkgT1JERVIgQlkgaWQgQVNDIExJ TUlUIDEwOworU0VMRUNUIHguaWQsIHkuaWQgRlJPTSBmcmFjdF94IHggTEVGVCBKT0lOIGZyYWN0 X3QgeSBVU0lORyAoaWQpIE9SREVSIEJZIHguaWQgQVNDIExJTUlUIDEwOwogCiBFWFBMQUlOIChD T1NUUyBPRkYpCi1TRUxFQ1QgKiBGUk9NIGZyYWN0X3QgeCBMRUZUIEpPSU4gZnJhY3RfdCB5IFVT SU5HIChpZCkgT1JERVIgQlkgaWQgREVTQyBMSU1JVCAxMDsKK1NFTEVDVCB4LmlkLCB5LmlkIEZS T00gZnJhY3RfeCB4IExFRlQgSk9JTiBmcmFjdF90IHkgVVNJTkcgKGlkKSBPUkRFUiBCWSB4Lmlk IERFU0MgTElNSVQgMTA7CiAKIC0tIGNsZWFudXAKIERST1AgVEFCTEUgZnJhY3RfdDsKK0RST1Ag VEFCTEUgZnJhY3RfeDsKIAogUkVTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlcjsK IFJFU0VUIGVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW47Cg== --_004_71191ef79d7a4892b99a62970f10771dindexde_--