Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1unCYS-0045z5-D5 for pgsql-hackers@arkaria.postgresql.org; Sat, 16 Aug 2025 08:46:26 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1unCYR-004cvl-QK for pgsql-hackers@arkaria.postgresql.org; Sat, 16 Aug 2025 08:46:24 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1unCYQ-004cvd-RF for pgsql-hackers@lists.postgresql.org; Sat, 16 Aug 2025 08:46:24 +0000 Received: from meldrar.postgresql.org ([2a02:c0:301:0:ffff::31]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1unCYN-0007ag-2W for pgsql-hackers@postgresql.org; Sat, 16 Aug 2025 08:46:22 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=postgresql.org; s=20171124; h=Content-Transfer-Encoding:Content-Type: Mime-Version:References:In-Reply-To:From:Subject:Cc:To:Message-Id:Date:Sender :Reply-To:Content-ID:Content-Description; bh=W2Y+EnBnpuwFQC1085BfzPVaoo1maQwG88g2KfqlVjg=; b=2Np1pwHHBJgafLcnV6qOglo82k +I/nUXlKfFtPJWvrd3RbIoqB37YfRCkpTQzSV1JwbZfgiSbjaebOz3KDab4ghOxRI3SbKFAVoJcRK jWijkVrJSxM2hm2SZoxPwIBqBMRHoebIAss+FeXQiw4L4AcrY6pAH5Eu6L9mzf6kF8+MtdjOWkIIG J8wjvQVUY32vq+c6DDabgCqQ9BrBoEWK6+3pNeYdwmDafGbqnNM1+G7tecCpoF/IBun6chyepkGan bQrxq0DS4SelCM4tGU9ssNbe9W0Hi6armrA+aeBiNFJbHImt+TyrP+se1enXFql705/kdc727djPJ TqHpaR7w==; Received: from [2409:11:4120:300:e9d9:7a97:900e:ca26] (helo=localhost) by meldrar.postgresql.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (Exim 4.96) (envelope-from ) id 1unCY8-000GH0-0Z; Sat, 16 Aug 2025 08:46:12 +0000 Date: Sat, 16 Aug 2025 17:45:52 +0900 (JST) Message-Id: <20250816.174552.1094782787078410357.ishii@postgresql.org> To: david.g.johnston@gmail.com, vik@postgresfriends.org, jacob.champion@enterprisedb.com, er@xs4all.nl, peter@eisentraut.org Cc: pgsql-hackers@postgresql.org Subject: Re: Row pattern recognition From: Tatsuo Ishii In-Reply-To: <20250506.095351.1825428116352052974.ishii@postgresql.org> References: <20250313.215129.1972424540409491296.ishii@postgresql.org> <20250423.085533.2100770238433359673.ishii@postgresql.org> <20250506.095351.1825428116352052974.ishii@postgresql.org> X-Mailer: Mew version 6.8 on Emacs 26.3 Mime-Version: 1.0 Content-Type: Multipart/Mixed; boundary="--Next_Part(Sat_Aug_16_17_45_52_2025_123)--" Content-Transfer-Encoding: 7bit X-Host-Lookup-Failed: Reverse DNS lookup failed for 2409:11:4120:300:e9d9:7a97:900e:ca26 (failed) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk ----Next_Part(Sat_Aug_16_17_45_52_2025_123)-- Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Attached are the v32 patches for Row pattern recognition. Recent changes to doc/src/sgml/func.sgml required v31 to be rebased. Other than that, nothing has been changed. Best regards, -- Tatsuo Ishii SRA OSS K.K. English: http://www.sraoss.co.jp/index_en/ Japanese:http://www.sraoss.co.jp ----Next_Part(Sat_Aug_16_17_45_52_2025_123)-- Content-Type: Application/Octet-Stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v32-0001-Row-pattern-recognition-patch-for-raw-parser.patch" RnJvbSA0ZjkzMThjNmFiYzE2ZjczNjAzOWRmZWM5YzdkM2ZiY2VkZmY5NDBiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYXRzdW8gSXNoaWkgPGlzaGlpQHBvc3RncmVzcWwub3JnPgpE YXRlOiBTYXQsIDE2IEF1ZyAyMDI1IDE3OjMzOjMyICswOTAwClN1YmplY3Q6IFtQQVRDSCB2MzIg MS85XSBSb3cgcGF0dGVybiByZWNvZ25pdGlvbiBwYXRjaCBmb3IgcmF3IHBhcnNlci4KCi0tLQog c3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueSAgICAgICB8IDEyMiArKysrKysrKysrKysrKysrKysr KysrKysrKystLS0tLQogc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oICB8ICA0NyArKysr KysrKysrKysKIHNyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaCAgICAgfCAgIDUgKysKIHNyYy9p bmNsdWRlL3BhcnNlci9wYXJzZV9ub2RlLmggfCAgIDEgKwogNCBmaWxlcyBjaGFuZ2VkLCAxNTkg aW5zZXJ0aW9ucygrKSwgMTYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cGFyc2VyL2dyYW0ueSBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKaW5kZXggZGI0MzAzNGI5 ZGIuLmEyNjhlNGFjMDc4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55Cisr KyBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKQEAgLTY3MSw2ICs2NzEsMTMgQEAgc3RhdGlj IE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFz ZXMsIE5vZGUgKnF1ZXJ5KTsKIAkJCQlqc29uX29iamVjdF9jb25zdHJ1Y3Rvcl9udWxsX2NsYXVz ZV9vcHQKIAkJCQlqc29uX2FycmF5X2NvbnN0cnVjdG9yX251bGxfY2xhdXNlX29wdAogCisldHlw ZSA8dGFyZ2V0Pglyb3dfcGF0dGVybl9kZWZpbml0aW9uCisldHlwZSA8bm9kZT4Jb3B0X3Jvd19w YXR0ZXJuX2NvbW1vbl9zeW50YXgKKwkJCQlyb3dfcGF0dGVybl90ZXJtCisldHlwZSA8bGlzdD4J cm93X3BhdHRlcm5fZGVmaW5pdGlvbl9saXN0CisJCQkJcm93X3BhdHRlcm4KKyV0eXBlIDxpdmFs PglvcHRfcm93X3BhdHRlcm5fc2tpcF90bworJXR5cGUgPGJvb2xlYW4+CW9wdF9yb3dfcGF0dGVy bl9pbml0aWFsX29yX3NlZWsKIAogLyoKICAqIE5vbi1rZXl3b3JkIHRva2VuIHR5cGVzLiAgVGhl c2UgYXJlIGhhcmQtd2lyZWQgaW50byB0aGUgImZsZXgiIGxleGVyLgpAQCAtNzE0LDcgKzcyMSw3 IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBM aXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAJQ1VSUkVOVF9USU1FIENVUlJFTlRfVElNRVNU QU1QIENVUlJFTlRfVVNFUiBDVVJTT1IgQ1lDTEUKIAogCURBVEFfUCBEQVRBQkFTRSBEQVlfUCBE RUFMTE9DQVRFIERFQyBERUNJTUFMX1AgREVDTEFSRSBERUZBVUxUIERFRkFVTFRTCi0JREVGRVJS QUJMRSBERUZFUlJFRCBERUZJTkVSIERFTEVURV9QIERFTElNSVRFUiBERUxJTUlURVJTIERFUEVO RFMgREVQVEggREVTQworCURFRkVSUkFCTEUgREVGRVJSRUQgREVGSU5FIERFRklORVIgREVMRVRF X1AgREVMSU1JVEVSIERFTElNSVRFUlMgREVQRU5EUyBERVBUSCBERVNDCiAJREVUQUNIIERJQ1RJ T05BUlkgRElTQUJMRV9QIERJU0NBUkQgRElTVElOQ1QgRE8gRE9DVU1FTlRfUCBET01BSU5fUAog CURPVUJMRV9QIERST1AKIApAQCAtNzMwLDcgKzczNyw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVj dXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVy eSk7CiAJSEFORExFUiBIQVZJTkcgSEVBREVSX1AgSE9MRCBIT1VSX1AKIAogCUlERU5USVRZX1Ag SUZfUCBJTElLRSBJTU1FRElBVEUgSU1NVVRBQkxFIElNUExJQ0lUX1AgSU1QT1JUX1AgSU5fUCBJ TkNMVURFCi0JSU5DTFVESU5HIElOQ1JFTUVOVCBJTkRFTlQgSU5ERVggSU5ERVhFUyBJTkhFUklU IElOSEVSSVRTIElOSVRJQUxMWSBJTkxJTkVfUAorCUlOQ0xVRElORyBJTkNSRU1FTlQgSU5ERU5U IElOREVYIElOREVYRVMgSU5IRVJJVCBJTkhFUklUUyBJTklUSUFMIElOSVRJQUxMWSBJTkxJTkVf UAogCUlOTkVSX1AgSU5PVVQgSU5QVVRfUCBJTlNFTlNJVElWRSBJTlNFUlQgSU5TVEVBRCBJTlRf UCBJTlRFR0VSCiAJSU5URVJTRUNUIElOVEVSVkFMIElOVE8gSU5WT0tFUiBJUyBJU05VTEwgSVNP TEFUSU9OCiAKQEAgLTc1NSw4ICs3NjIsOCBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZp ZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCU9S REVSIE9SRElOQUxJVFkgT1RIRVJTIE9VVF9QIE9VVEVSX1AKIAlPVkVSIE9WRVJMQVBTIE9WRVJM QVkgT1ZFUlJJRElORyBPV05FRCBPV05FUgogCi0JUEFSQUxMRUwgUEFSQU1FVEVSIFBBUlNFUiBQ QVJUSUFMIFBBUlRJVElPTiBQQVNTSU5HIFBBU1NXT1JEIFBBVEgKLQlQRVJJT0QgUExBQ0lORyBQ TEFOIFBMQU5TIFBPTElDWQorCVBBUkFMTEVMIFBBUkFNRVRFUiBQQVJTRVIgUEFSVElBTCBQQVJU SVRJT04gUEFTU0lORyBQQVNTV09SRCBQQVNUCisJUEFUSCBQQVRURVJOX1AgUEVSSU9EIFBMQUNJ TkcgUExBTiBQTEFOUyBQT0xJQ1kKIAlQT1NJVElPTiBQUkVDRURJTkcgUFJFQ0lTSU9OIFBSRVNF UlZFIFBSRVBBUkUgUFJFUEFSRUQgUFJJTUFSWQogCVBSSU9SIFBSSVZJTEVHRVMgUFJPQ0VEVVJB TCBQUk9DRURVUkUgUFJPQ0VEVVJFUyBQUk9HUkFNIFBVQkxJQ0FUSU9OCiAKQEAgLTc2Nyw3ICs3 NzQsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFt ZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCVJFU0VUIFJFU1RBUlQgUkVTVFJJQ1Qg UkVUVVJOIFJFVFVSTklORyBSRVRVUk5TIFJFVk9LRSBSSUdIVCBST0xFIFJPTExCQUNLIFJPTExV UAogCVJPVVRJTkUgUk9VVElORVMgUk9XIFJPV1MgUlVMRQogCi0JU0FWRVBPSU5UIFNDQUxBUiBT Q0hFTUEgU0NIRU1BUyBTQ1JPTEwgU0VBUkNIIFNFQ09ORF9QIFNFQ1VSSVRZIFNFTEVDVAorCVNB VkVQT0lOVCBTQ0FMQVIgU0NIRU1BIFNDSEVNQVMgU0NST0xMIFNFQVJDSCBTRUNPTkRfUCBTRUNV UklUWSBTRUVLIFNFTEVDVAogCVNFUVVFTkNFIFNFUVVFTkNFUwogCVNFUklBTElaQUJMRSBTRVJW RVIgU0VTU0lPTiBTRVNTSU9OX1VTRVIgU0VUIFNFVFMgU0VUT0YgU0hBUkUgU0hPVwogCVNJTUlM QVIgU0lNUExFIFNLSVAgU01BTExJTlQgU05BUFNIT1QgU09NRSBTT1VSQ0UgU1FMX1AgU1RBQkxF IFNUQU5EQUxPTkVfUApAQCAtODUwLDggKzg1Nyw4IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJz aXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7 CiAgKiByZWZlcmVuY2UgcG9pbnQgZm9yIGEgcHJlY2VkZW5jZSBsZXZlbCB0aGF0IHdlIGNhbiBh c3NpZ24gdG8gb3RoZXIKICAqIGtleXdvcmRzIHRoYXQgbGFjayBhIG5hdHVyYWwgcHJlY2VkZW5j ZSBsZXZlbC4KICAqCi0gKiBXZSBuZWVkIHRvIGRvIHRoaXMgZm9yIFBBUlRJVElPTiwgUkFOR0Us IFJPV1MsIGFuZCBHUk9VUFMgdG8gc3VwcG9ydAotICogb3B0X2V4aXN0aW5nX3dpbmRvd19uYW1l IChzZWUgY29tbWVudCB0aGVyZSkuCisgKiBXZSBuZWVkIHRvIGRvIHRoaXMgZm9yIFBBUlRJVElP TiwgUkFOR0UsIFJPV1MsIEdST1VQUywgQUZURVIsIElOSVRJQUwsCisgKiBTRUVLLCBQQVRURVJO X1AgdG8gc3VwcG9ydCBvcHRfZXhpc3Rpbmdfd2luZG93X25hbWUgKHNlZSBjb21tZW50IHRoZXJl KS4KICAqCiAgKiBUaGUgZnJhbWVfYm91bmQgcHJvZHVjdGlvbnMgVU5CT1VOREVEIFBSRUNFRElO RyBhbmQgVU5CT1VOREVEIEZPTExPV0lORwogICogYXJlIGV2ZW4gbWVzc2llcjogc2luY2UgVU5C T1VOREVEIGlzIGFuIHVucmVzZXJ2ZWQga2V5d29yZCAocGVyIHNwZWMhKSwKQEAgLTg4MSw2ICs4 ODgsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFt ZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogJW5vbmFzc29jCVVOQk9VTkRFRCBORVNU RUQgLyogaWRlYWxseSB3b3VsZCBoYXZlIHNhbWUgcHJlY2VkZW5jZSBhcyBJREVOVCAqLwogJW5v bmFzc29jCUlERU5UIFBBUlRJVElPTiBSQU5HRSBST1dTIEdST1VQUyBQUkVDRURJTkcgRk9MTE9X SU5HIENVQkUgUk9MTFVQCiAJCQlTRVQgS0VZUyBPQkpFQ1RfUCBTQ0FMQVIgVkFMVUVfUCBXSVRI IFdJVEhPVVQgUEFUSAorCQkJQUZURVIgSU5JVElBTCBTRUVLIFBBVFRFUk5fUAogJWxlZnQJCU9w IE9QRVJBVE9SCQkvKiBtdWx0aS1jaGFyYWN0ZXIgb3BzIGFuZCB1c2VyLWRlZmluZWQgb3BlcmF0 b3JzICovCiAlbGVmdAkJJysnICctJwogJWxlZnQJCScqJyAnLycgJyUnCkBAIC0xNjQ2Miw3ICsx NjQ3MCw4IEBAIG92ZXJfY2xhdXNlOiBPVkVSIHdpbmRvd19zcGVjaWZpY2F0aW9uCiAJCTsKIAog d2luZG93X3NwZWNpZmljYXRpb246ICcoJyBvcHRfZXhpc3Rpbmdfd2luZG93X25hbWUgb3B0X3Bh cnRpdGlvbl9jbGF1c2UKLQkJCQkJCW9wdF9zb3J0X2NsYXVzZSBvcHRfZnJhbWVfY2xhdXNlICcp JworCQkJCQkJb3B0X3NvcnRfY2xhdXNlIG9wdF9mcmFtZV9jbGF1c2UKKwkJCQkJCW9wdF9yb3df cGF0dGVybl9jb21tb25fc3ludGF4ICcpJwogCQkJCXsKIAkJCQkJV2luZG93RGVmICAqbiA9IG1h a2VOb2RlKFdpbmRvd0RlZik7CiAKQEAgLTE2NDc0LDIwICsxNjQ4MywyMSBAQCB3aW5kb3dfc3Bl Y2lmaWNhdGlvbjogJygnIG9wdF9leGlzdGluZ193aW5kb3dfbmFtZSBvcHRfcGFydGl0aW9uX2Ns YXVzZQogCQkJCQluLT5mcmFtZU9wdGlvbnMgPSAkNS0+ZnJhbWVPcHRpb25zOwogCQkJCQluLT5z dGFydE9mZnNldCA9ICQ1LT5zdGFydE9mZnNldDsKIAkJCQkJbi0+ZW5kT2Zmc2V0ID0gJDUtPmVu ZE9mZnNldDsKKwkJCQkJbi0+cnBDb21tb25TeW50YXggPSAoUlBDb21tb25TeW50YXggKikkNjsK IAkJCQkJbi0+bG9jYXRpb24gPSBAMTsKIAkJCQkJJCQgPSBuOwogCQkJCX0KIAkJOwogCiAvKgot ICogSWYgd2Ugc2VlIFBBUlRJVElPTiwgUkFOR0UsIFJPV1Mgb3IgR1JPVVBTIGFzIHRoZSBmaXJz dCB0b2tlbiBhZnRlciB0aGUgJygnCi0gKiBvZiBhIHdpbmRvd19zcGVjaWZpY2F0aW9uLCB3ZSB3 YW50IHRoZSBhc3N1bXB0aW9uIHRvIGJlIHRoYXQgdGhlcmUgaXMKLSAqIG5vIGV4aXN0aW5nX3dp bmRvd19uYW1lOyBidXQgdGhvc2Uga2V5d29yZHMgYXJlIHVucmVzZXJ2ZWQgYW5kIHNvIGNvdWxk Ci0gKiBiZSBDb2xJZHMuICBXZSBmaXggdGhpcyBieSBtYWtpbmcgdGhlbSBoYXZlIHRoZSBzYW1l IHByZWNlZGVuY2UgYXMgSURFTlQKLSAqIGFuZCBnaXZpbmcgdGhlIGVtcHR5IHByb2R1Y3Rpb24g aGVyZSBhIHNsaWdodGx5IGhpZ2hlciBwcmVjZWRlbmNlLCBzbwotICogdGhhdCB0aGUgc2hpZnQv cmVkdWNlIGNvbmZsaWN0IGlzIHJlc29sdmVkIGluIGZhdm9yIG9mIHJlZHVjaW5nIHRoZSBydWxl LgotICogVGhlc2Uga2V5d29yZHMgYXJlIHRodXMgcHJlY2x1ZGVkIGZyb20gYmVpbmcgYW4gZXhp c3Rpbmdfd2luZG93X25hbWUgYnV0Ci0gKiBhcmUgbm90IHJlc2VydmVkIGZvciBhbnkgb3RoZXIg cHVycG9zZS4KKyAqIElmIHdlIHNlZSBQQVJUSVRJT04sIFJBTkdFLCBST1dTLCBHUk9VUFMsIEFG VEVSLCBJTklUSUFMLCBTRUVLIG9yIFBBVFRFUk5fUAorICogYXMgdGhlIGZpcnN0IHRva2VuIGFm dGVyIHRoZSAnKCcgb2YgYSB3aW5kb3dfc3BlY2lmaWNhdGlvbiwgd2Ugd2FudCB0aGUKKyAqIGFz c3VtcHRpb24gdG8gYmUgdGhhdCB0aGVyZSBpcyBubyBleGlzdGluZ193aW5kb3dfbmFtZTsgYnV0 IHRob3NlIGtleXdvcmRzCisgKiBhcmUgdW5yZXNlcnZlZCBhbmQgc28gY291bGQgYmUgQ29sSWRz LiAgV2UgZml4IHRoaXMgYnkgbWFraW5nIHRoZW0gaGF2ZSB0aGUKKyAqIHNhbWUgcHJlY2VkZW5j ZSBhcyBJREVOVCBhbmQgZ2l2aW5nIHRoZSBlbXB0eSBwcm9kdWN0aW9uIGhlcmUgYSBzbGlnaHRs eQorICogaGlnaGVyIHByZWNlZGVuY2UsIHNvIHRoYXQgdGhlIHNoaWZ0L3JlZHVjZSBjb25mbGlj dCBpcyByZXNvbHZlZCBpbiBmYXZvcgorICogb2YgcmVkdWNpbmcgdGhlIHJ1bGUuICBUaGVzZSBr ZXl3b3JkcyBhcmUgdGh1cyBwcmVjbHVkZWQgZnJvbSBiZWluZyBhbgorICogZXhpc3Rpbmdfd2lu ZG93X25hbWUgYnV0IGFyZSBub3QgcmVzZXJ2ZWQgZm9yIGFueSBvdGhlciBwdXJwb3NlLgogICov CiBvcHRfZXhpc3Rpbmdfd2luZG93X25hbWU6IENvbElkCQkJCQkJeyAkJCA9ICQxOyB9CiAJCQl8 IC8qRU1QVFkqLwkJCQklcHJlYyBPcAkJeyAkJCA9IE5VTEw7IH0KQEAgLTE2NjU2LDYgKzE2NjY2 LDc2IEBAIG9wdF93aW5kb3dfZXhjbHVzaW9uX2NsYXVzZToKIAkJCXwgLypFTVBUWSovCQkJCXsg JCQgPSAwOyB9CiAJCTsKIAorb3B0X3Jvd19wYXR0ZXJuX2NvbW1vbl9zeW50YXg6CitvcHRfcm93 X3BhdHRlcm5fc2tpcF90byBvcHRfcm93X3BhdHRlcm5faW5pdGlhbF9vcl9zZWVrCisJCQkJUEFU VEVSTl9QICcoJyByb3dfcGF0dGVybiAnKScKKwkJCQlERUZJTkUgcm93X3BhdHRlcm5fZGVmaW5p dGlvbl9saXN0CisJCQl7CisJCQkJUlBDb21tb25TeW50YXggKm4gPSBtYWtlTm9kZShSUENvbW1v blN5bnRheCk7CisJCQkJbi0+cnBTa2lwVG8gPSAkMTsKKwkJCQluLT5pbml0aWFsID0gJDI7CisJ CQkJbi0+cnBQYXR0ZXJucyA9ICQ1OworCQkJCW4tPnJwRGVmcyA9ICQ4OworCQkJCSQkID0gKE5v ZGUgKikgbjsKKwkJCX0KKwkJCXwgLypFTVBUWSovCQl7ICQkID0gTlVMTDsgfQorCQk7CisKK29w dF9yb3dfcGF0dGVybl9za2lwX3RvOgorCQkJQUZURVIgTUFUQ0ggU0tJUCBUTyBORVhUIFJPVwor CQkJCXsKKwkJCQkJJCQgPSBTVF9ORVhUX1JPVzsKKwkJCQl9CisJCQl8IEFGVEVSIE1BVENIIFNL SVAgUEFTVCBMQVNUX1AgUk9XCisJCQkJeworCQkJCQkkJCA9IFNUX1BBU1RfTEFTVF9ST1c7CisJ CQkJfQorCQkJfCAvKkVNUFRZKi8KKwkJCQl7CisJCQkJCSQkID0gU1RfUEFTVF9MQVNUX1JPVzsK KwkJCQl9CisJCTsKKworb3B0X3Jvd19wYXR0ZXJuX2luaXRpYWxfb3Jfc2VlazoKKwkJCUlOSVRJ QUwJCXsgJCQgPSB0cnVlOyB9CisJCQl8IFNFRUsKKwkJCQl7CisJCQkJCWVyZXBvcnQoRVJST1Is CisJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCQkJ CSBlcnJtc2coIlNFRUsgaXMgbm90IHN1cHBvcnRlZCIpLAorCQkJCQkJCSBlcnJoaW50KCJVc2Ug SU5JVElBTCBpbnN0ZWFkLiIpLAorCQkJCQkJCSBwYXJzZXJfZXJycG9zaXRpb24oQDEpKSk7CisJ CQkJfQorCQkJfCAvKkVNUFRZKi8JCXsgJCQgPSB0cnVlOyB9CisJCTsKKworcm93X3BhdHRlcm46 CisJCQlyb3dfcGF0dGVybl90ZXJtCQkJCQl7ICQkID0gbGlzdF9tYWtlMSgkMSk7IH0KKwkJCXwg cm93X3BhdHRlcm4gcm93X3BhdHRlcm5fdGVybQkJeyAkJCA9IGxhcHBlbmQoJDEsICQyKTsgfQor CQk7CisKK3Jvd19wYXR0ZXJuX3Rlcm06CisJCQlDb2xJZAl7ICQkID0gKE5vZGUgKikgbWFrZVNp bXBsZUFfRXhwcihBRVhQUl9PUCwgIiIsIChOb2RlICopbWFrZVN0cmluZygkMSksIE5VTEwsIEAx KTsgfQorCQkJfCBDb2xJZCAnKicJeyAkJCA9IChOb2RlICopIG1ha2VTaW1wbGVBX0V4cHIoQUVY UFJfT1AsICIqIiwgKE5vZGUgKiltYWtlU3RyaW5nKCQxKSwgTlVMTCwgQDEpOyB9CisJCQl8IENv bElkICcrJwl7ICQkID0gKE5vZGUgKikgbWFrZVNpbXBsZUFfRXhwcihBRVhQUl9PUCwgIisiLCAo Tm9kZSAqKW1ha2VTdHJpbmcoJDEpLCBOVUxMLCBAMSk7IH0KKwkJCXwgQ29sSWQgJz8nCXsgJCQg PSAoTm9kZSAqKSBtYWtlU2ltcGxlQV9FeHByKEFFWFBSX09QLCAiPyIsIChOb2RlICopbWFrZVN0 cmluZygkMSksIE5VTEwsIEAxKTsgfQorCQk7CisKK3Jvd19wYXR0ZXJuX2RlZmluaXRpb25fbGlz dDoKKwkJCXJvd19wYXR0ZXJuX2RlZmluaXRpb24JCQkJCQkJCQkJeyAkJCA9IGxpc3RfbWFrZTEo JDEpOyB9CisJCQl8IHJvd19wYXR0ZXJuX2RlZmluaXRpb25fbGlzdCAnLCcgcm93X3BhdHRlcm5f ZGVmaW5pdGlvbgl7ICQkID0gbGFwcGVuZCgkMSwgJDMpOyB9CisJCTsKKworcm93X3BhdHRlcm5f ZGVmaW5pdGlvbjoKKwkJCUNvbElkIEFTIGFfZXhwcgorCQkJCXsKKwkJCQkJJCQgPSBtYWtlTm9k ZShSZXNUYXJnZXQpOworCQkJCQkkJC0+bmFtZSA9ICQxOworCQkJCQkkJC0+aW5kaXJlY3Rpb24g PSBOSUw7CisJCQkJCSQkLT52YWwgPSAoTm9kZSAqKSAkMzsKKwkJCQkJJCQtPmxvY2F0aW9uID0g QDE7CisJCQkJfQorCQk7CiAKIC8qCiAgKiBTdXBwb3J0aW5nIG5vbnRlcm1pbmFscyBmb3IgZXhw cmVzc2lvbnMuCkBAIC0xNzg1OCw2ICsxNzkzOCw3IEBAIHVucmVzZXJ2ZWRfa2V5d29yZDoKIAkJ CXwgSU5ERVhFUwogCQkJfCBJTkhFUklUCiAJCQl8IElOSEVSSVRTCisJCQl8IElOSVRJQUwKIAkJ CXwgSU5MSU5FX1AKIAkJCXwgSU5QVVRfUAogCQkJfCBJTlNFTlNJVElWRQpAQCAtMTc5MzEsNyAr MTgwMTIsOSBAQCB1bnJlc2VydmVkX2tleXdvcmQ6CiAJCQl8IFBBUlRJVElPTgogCQkJfCBQQVNT SU5HCiAJCQl8IFBBU1NXT1JECisJCQl8IFBBU1QKIAkJCXwgUEFUSAorCQkJfCBQQVRURVJOX1AK IAkJCXwgUEVSSU9ECiAJCQl8IFBMQU4KIAkJCXwgUExBTlMKQEAgLTE3OTg0LDYgKzE4MDY3LDcg QEAgdW5yZXNlcnZlZF9rZXl3b3JkOgogCQkJfCBTRUFSQ0gKIAkJCXwgU0VDT05EX1AKIAkJCXwg U0VDVVJJVFkKKwkJCXwgU0VFSwogCQkJfCBTRVFVRU5DRQogCQkJfCBTRVFVRU5DRVMKIAkJCXwg U0VSSUFMSVpBQkxFCkBAIC0xODIwNiw2ICsxODI5MCw3IEBAIHJlc2VydmVkX2tleXdvcmQ6CiAJ CQl8IENVUlJFTlRfVVNFUgogCQkJfCBERUZBVUxUCiAJCQl8IERFRkVSUkFCTEUKKwkJCXwgREVG SU5FCiAJCQl8IERFU0MKIAkJCXwgRElTVElOQ1QKIAkJCXwgRE8KQEAgLTE4MzY5LDYgKzE4NDU0 LDcgQEAgYmFyZV9sYWJlbF9rZXl3b3JkOgogCQkJfCBERUZBVUxUUwogCQkJfCBERUZFUlJBQkxF CiAJCQl8IERFRkVSUkVECisJCQl8IERFRklORQogCQkJfCBERUZJTkVSCiAJCQl8IERFTEVURV9Q CiAJCQl8IERFTElNSVRFUgpAQCAtMTg0NDcsNiArMTg1MzMsNyBAQCBiYXJlX2xhYmVsX2tleXdv cmQ6CiAJCQl8IElOREVYRVMKIAkJCXwgSU5IRVJJVAogCQkJfCBJTkhFUklUUworCQkJfCBJTklU SUFMCiAJCQl8IElOSVRJQUxMWQogCQkJfCBJTkxJTkVfUAogCQkJfCBJTk5FUl9QCkBAIC0xODU1 OCw3ICsxODY0NSw5IEBAIGJhcmVfbGFiZWxfa2V5d29yZDoKIAkJCXwgUEFSVElUSU9OCiAJCQl8 IFBBU1NJTkcKIAkJCXwgUEFTU1dPUkQKKwkJCXwgUEFTVAogCQkJfCBQQVRICisJCQl8IFBBVFRF Uk5fUAogCQkJfCBQRVJJT0QKIAkJCXwgUExBQ0lORwogCQkJfCBQTEFOCkBAIC0xODYxNyw2ICsx ODcwNiw3IEBAIGJhcmVfbGFiZWxfa2V5d29yZDoKIAkJCXwgU0NST0xMCiAJCQl8IFNFQVJDSAog CQkJfCBTRUNVUklUWQorCQkJfCBTRUVLCiAJCQl8IFNFTEVDVAogCQkJfCBTRVFVRU5DRQogCQkJ fCBTRVFVRU5DRVMKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCBi L3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAppbmRleCA4NmEyMzZiZDU4Yi4uMDMwODI5 ZjM4NmIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAorKysgYi9z cmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKQEAgLTU3Niw2ICs1NzYsMzEgQEAgdHlwZWRl ZiBzdHJ1Y3QgU29ydEJ5CiAJUGFyc2VMb2MJbG9jYXRpb247CQkvKiBvcGVyYXRvciBsb2NhdGlv biwgb3IgLTEgaWYgbm9uZS91bmtub3duICovCiB9IFNvcnRCeTsKIAorLyoKKyAqIEFGVEVSIE1B VENIIHJvdyBwYXR0ZXJuIHNraXAgdG8gdHlwZXMgaW4gcm93IHBhdHRlcm4gY29tbW9uIHN5bnRh eAorICovCit0eXBlZGVmIGVudW0gUlBTa2lwVG8KK3sKKwlTVF9OT05FLAkJCQkJLyogQUZURVIg TUFUQ0ggb21pdHRlZCAqLworCVNUX05FWFRfUk9XLAkJCQkvKiBTS0lQIFRPIE5FWFQgUk9XICov CisJU1RfUEFTVF9MQVNUX1JPVywJCQkvKiBTS0lQIFRPIFBBU1QgTEFTVCBST1cgKi8KK30gUlBT a2lwVG87CisKKy8qCisgKiBSb3dQYXR0ZXJuQ29tbW9uU3ludGF4IC0gcmF3IHJlcHJlc2VudGF0 aW9uIG9mIHJvdyBwYXR0ZXJuIGNvbW1vbiBzeW50YXgKKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0 IFJQQ29tbW9uU3ludGF4Cit7CisJTm9kZVRhZwkJdHlwZTsKKwlSUFNraXBUbwlycFNraXBUbzsJ CS8qIFJvdyBQYXR0ZXJuIEFGVEVSIE1BVENIIFNLSVAgdHlwZSAqLworCWJvb2wJCWluaXRpYWw7 CQkvKiB0cnVlIGlmIDxyb3cgcGF0dGVybiBpbml0aWFsIG9yIHNlZWs+IGlzCisJCQkJCQkJCSAq IGluaXRpYWwgKi8KKwlMaXN0CSAgICpycFBhdHRlcm5zOwkJLyogUEFUVEVSTiB2YXJpYWJsZXMg KGxpc3Qgb2YgQV9FeHByKSAqLworCUxpc3QJICAgKnJwRGVmczsJCQkvKiByb3cgcGF0dGVybiBk ZWZpbml0aW9ucyBjbGF1c2UgKGxpc3Qgb2YKKwkJCQkJCQkJICogUmVzVGFyZ2V0KSAqLworfSBS UENvbW1vblN5bnRheDsKKwogLyoKICAqIFdpbmRvd0RlZiAtIHJhdyByZXByZXNlbnRhdGlvbiBv ZiBXSU5ET1cgYW5kIE9WRVIgY2xhdXNlcwogICoKQEAgLTU5MSw2ICs2MTYsNyBAQCB0eXBlZGVm IHN0cnVjdCBXaW5kb3dEZWYKIAljaGFyCSAgICpyZWZuYW1lOwkJLyogcmVmZXJlbmNlZCB3aW5k b3cgbmFtZSwgaWYgYW55ICovCiAJTGlzdAkgICAqcGFydGl0aW9uQ2xhdXNlOwkvKiBQQVJUSVRJ T04gQlkgZXhwcmVzc2lvbiBsaXN0ICovCiAJTGlzdAkgICAqb3JkZXJDbGF1c2U7CS8qIE9SREVS IEJZIChsaXN0IG9mIFNvcnRCeSkgKi8KKwlSUENvbW1vblN5bnRheCAqcnBDb21tb25TeW50YXg7 IC8qIHJvdyBwYXR0ZXJuIGNvbW1vbiBzeW50YXggKi8KIAlpbnQJCQlmcmFtZU9wdGlvbnM7CS8q IGZyYW1lX2NsYXVzZSBvcHRpb25zLCBzZWUgYmVsb3cgKi8KIAlOb2RlCSAgICpzdGFydE9mZnNl dDsJLyogZXhwcmVzc2lvbiBmb3Igc3RhcnRpbmcgYm91bmQsIGlmIGFueSAqLwogCU5vZGUJICAg KmVuZE9mZnNldDsJCS8qIGV4cHJlc3Npb24gZm9yIGVuZGluZyBib3VuZCwgaWYgYW55ICovCkBA IC0xNTU5LDYgKzE1ODUsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgR3JvdXBpbmdTZXQKICAqIHRoZSBv cmRlckNsYXVzZSBtaWdodCBvciBtaWdodCBub3QgYmUgY29waWVkIChzZWUgY29waWVkT3JkZXIp OyB0aGUgZnJhbWluZwogICogb3B0aW9ucyBhcmUgbmV2ZXIgY29waWVkLCBwZXIgc3BlYy4KICAq CisgKiAiZGVmaW5lQ2xhdXNlIiBpcyBSb3cgUGF0dGVybiBSZWNvZ25pdGlvbiBERUZJTkUgY2xh dXNlIChsaXN0IG9mCisgKiBUYXJnZXRFbnRyeSkuIFRhcmdldEVudHJ5LnJlc25hbWUgcmVwcmVz ZW50cyByb3cgcGF0dGVybiBkZWZpbml0aW9uCisgKiB2YXJpYWJsZSBuYW1lLiAicGF0dGVyblZh cmlhYmxlIiBhbmQgInBhdHRlcm5SZWdleHAiIHJlcHJlc2VudHMgUEFUVEVSTgorICogY2xhdXNl LgorICoKICAqIFRoZSBpbmZvcm1hdGlvbiByZWxldmFudCBmb3IgdGhlIHF1ZXJ5IGp1bWJsaW5n IGlzIHRoZSBwYXJ0aXRpb24gY2xhdXNlCiAgKiB0eXBlIGFuZCBpdHMgYm91bmRzLgogICovCkBA IC0xNTg4LDYgKzE2MTksMjIgQEAgdHlwZWRlZiBzdHJ1Y3QgV2luZG93Q2xhdXNlCiAJSW5kZXgJ CXdpbnJlZjsJCQkvKiBJRCByZWZlcmVuY2VkIGJ5IHdpbmRvdyBmdW5jdGlvbnMgKi8KIAkvKiBk aWQgd2UgY29weSBvcmRlckNsYXVzZSBmcm9tIHJlZm5hbWU/ICovCiAJYm9vbAkJY29waWVkT3Jk ZXIgcGdfbm9kZV9hdHRyKHF1ZXJ5X2p1bWJsZV9pZ25vcmUpOworCS8qIFJvdyBQYXR0ZXJuIEFG VEVSIE1BQ0ggU0tJUCBjbGF1c2UgKi8KKwlSUFNraXBUbwlycFNraXBUbzsJCS8qIFJvdyBQYXR0 ZXJuIFNraXAgVG8gdHlwZSAqLworCWJvb2wJCWluaXRpYWw7CQkvKiB0cnVlIGlmIDxyb3cgcGF0 dGVybiBpbml0aWFsIG9yIHNlZWs+IGlzCisJCQkJCQkJCSAqIGluaXRpYWwgKi8KKwkvKiBSb3cg UGF0dGVybiBERUZJTkUgY2xhdXNlIChsaXN0IG9mIFRhcmdldEVudHJ5KSAqLworCUxpc3QJICAg KmRlZmluZUNsYXVzZTsKKwkvKiBSb3cgUGF0dGVybiBERUZJTkUgdmFyaWFibGUgaW5pdGlhbCBu YW1lcyAobGlzdCBvZiBTdHJpbmcpICovCisJTGlzdAkgICAqZGVmaW5lSW5pdGlhbDsKKwkvKiBS b3cgUGF0dGVybiBQQVRURVJOIHZhcmlhYmxlIG5hbWUgKGxpc3Qgb2YgU3RyaW5nKSAqLworCUxp c3QJICAgKnBhdHRlcm5WYXJpYWJsZTsKKworCS8qCisJICogUm93IFBhdHRlcm4gUEFUVEVSTiBy ZWd1bGFyIGV4cHJlc3Npb24gcXVhbnRpZmllciAoJysnIG9yICcnLiBsaXN0IG9mCisJICogU3Ry aW5nKQorCSAqLworCUxpc3QJICAgKnBhdHRlcm5SZWdleHA7CiB9IFdpbmRvd0NsYXVzZTsKIAog LyoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaCBiL3NyYy9pbmNsdWRl L3BhcnNlci9rd2xpc3QuaAppbmRleCBhNGFmM2Y3MTdhMS4uNjg5MTFkOGU4MzUgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaAorKysgYi9zcmMvaW5jbHVkZS9wYXJzZXIv a3dsaXN0LmgKQEAgLTEyOSw2ICsxMjksNyBAQCBQR19LRVlXT1JEKCJkZWZhdWx0IiwgREVGQVVM VCwgUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImRlZmF1bHRzIiwg REVGQVVMVFMsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImRl ZmVycmFibGUiLCBERUZFUlJBQkxFLCBSRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdf S0VZV09SRCgiZGVmZXJyZWQiLCBERUZFUlJFRCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xB QkVMKQorUEdfS0VZV09SRCgiZGVmaW5lIiwgREVGSU5FLCBSRVNFUlZFRF9LRVlXT1JELCBCQVJF X0xBQkVMKQogUEdfS0VZV09SRCgiZGVmaW5lciIsIERFRklORVIsIFVOUkVTRVJWRURfS0VZV09S RCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImRlbGV0ZSIsIERFTEVURV9QLCBVTlJFU0VSVkVE X0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJkZWxpbWl0ZXIiLCBERUxJTUlURVIs IFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKQEAgLTIxNiw2ICsyMTcsNyBAQCBQR19L RVlXT1JEKCJpbmRleCIsIElOREVYLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQ R19LRVlXT1JEKCJpbmRleGVzIiwgSU5ERVhFUywgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xB QkVMKQogUEdfS0VZV09SRCgiaW5oZXJpdCIsIElOSEVSSVQsIFVOUkVTRVJWRURfS0VZV09SRCwg QkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImluaGVyaXRzIiwgSU5IRVJJVFMsIFVOUkVTRVJWRURf S0VZV09SRCwgQkFSRV9MQUJFTCkKK1BHX0tFWVdPUkQoImluaXRpYWwiLCBJTklUSUFMLCBVTlJF U0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJpbml0aWFsbHkiLCBJTklU SUFMTFksIFJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJpbmxpbmUi LCBJTkxJTkVfUCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgi aW5uZXIiLCBJTk5FUl9QLCBUWVBFX0ZVTkNfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQpAQCAt MzM5LDcgKzM0MSw5IEBAIFBHX0tFWVdPUkQoInBhcnRpYWwiLCBQQVJUSUFMLCBVTlJFU0VSVkVE X0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJwYXJ0aXRpb24iLCBQQVJUSVRJT04s IFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInBhc3NpbmciLCBQ QVNTSU5HLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJwYXNz d29yZCIsIFBBU1NXT1JELCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCitQR19LRVlX T1JEKCJwYXN0IiwgUEFTVCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZ V09SRCgicGF0aCIsIFBBVEgsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKK1BHX0tF WVdPUkQoInBhdHRlcm4iLCBQQVRURVJOX1AsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJF TCkKIFBHX0tFWVdPUkQoInBlcmlvZCIsIFBFUklPRCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJF X0xBQkVMKQogUEdfS0VZV09SRCgicGxhY2luZyIsIFBMQUNJTkcsIFJFU0VSVkVEX0tFWVdPUkQs IEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJwbGFuIiwgUExBTiwgVU5SRVNFUlZFRF9LRVlXT1JE LCBCQVJFX0xBQkVMKQpAQCAtNDAxLDYgKzQwNSw3IEBAIFBHX0tFWVdPUkQoInNjcm9sbCIsIFND Uk9MTCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgic2VhcmNo IiwgU0VBUkNILCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJz ZWNvbmQiLCBTRUNPTkRfUCwgVU5SRVNFUlZFRF9LRVlXT1JELCBBU19MQUJFTCkKIFBHX0tFWVdP UkQoInNlY3VyaXR5IiwgU0VDVVJJVFksIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkK K1BHX0tFWVdPUkQoInNlZWsiLCBTRUVLLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwp CiBQR19LRVlXT1JEKCJzZWxlY3QiLCBTRUxFQ1QsIFJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFC RUwpCiBQR19LRVlXT1JEKCJzZXF1ZW5jZSIsIFNFUVVFTkNFLCBVTlJFU0VSVkVEX0tFWVdPUkQs IEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJzZXF1ZW5jZXMiLCBTRVFVRU5DRVMsIFVOUkVTRVJW RURfS0VZV09SRCwgQkFSRV9MQUJFTCkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3BhcnNlci9w YXJzZV9ub2RlLmggYi9zcmMvaW5jbHVkZS9wYXJzZXIvcGFyc2Vfbm9kZS5oCmluZGV4IGY3ZDA3 Yzg0NTQyLi5kMjg2YThiNzc4MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcGFyc2VyL3BhcnNl X25vZGUuaAorKysgYi9zcmMvaW5jbHVkZS9wYXJzZXIvcGFyc2Vfbm9kZS5oCkBAIC01MSw2ICs1 MSw3IEBAIHR5cGVkZWYgZW51bSBQYXJzZUV4cHJLaW5kCiAJRVhQUl9LSU5EX1dJTkRPV19GUkFN RV9SQU5HRSwJLyogd2luZG93IGZyYW1lIGNsYXVzZSB3aXRoIFJBTkdFICovCiAJRVhQUl9LSU5E X1dJTkRPV19GUkFNRV9ST1dTLAkvKiB3aW5kb3cgZnJhbWUgY2xhdXNlIHdpdGggUk9XUyAqLwog CUVYUFJfS0lORF9XSU5ET1dfRlJBTUVfR1JPVVBTLAkvKiB3aW5kb3cgZnJhbWUgY2xhdXNlIHdp dGggR1JPVVBTICovCisJRVhQUl9LSU5EX1JQUl9ERUZJTkUsCQkvKiBERUZJTkUgKi8KIAlFWFBS X0tJTkRfU0VMRUNUX1RBUkdFVCwJLyogU0VMRUNUIHRhcmdldCBsaXN0IGl0ZW0gKi8KIAlFWFBS X0tJTkRfSU5TRVJUX1RBUkdFVCwJLyogSU5TRVJUIHRhcmdldCBsaXN0IGl0ZW0gKi8KIAlFWFBS X0tJTkRfVVBEQVRFX1NPVVJDRSwJLyogVVBEQVRFIGFzc2lnbm1lbnQgc291cmNlIGl0ZW0gKi8K LS0gCjIuMjUuMQoK ----Next_Part(Sat_Aug_16_17_45_52_2025_123)-- Content-Type: Application/Octet-Stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v32-0002-Row-pattern-recognition-patch-parse-analysis.patch" RnJvbSAzNmY5MTA1YzFmNGQ3MTQ4MzljYjA4ZGIyMGY0ZWI1MDRkMWI2ZGI1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYXRzdW8gSXNoaWkgPGlzaGlpQHBvc3RncmVzcWwub3JnPgpE YXRlOiBTYXQsIDE2IEF1ZyAyMDI1IDE3OjMzOjMyICswOTAwClN1YmplY3Q6IFtQQVRDSCB2MzIg Mi85XSBSb3cgcGF0dGVybiByZWNvZ25pdGlvbiBwYXRjaCAocGFyc2UvYW5hbHlzaXMpLgoKLS0t CiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfYWdnLmMgICAgfCAgIDcgKwogc3JjL2JhY2tlbmQv cGFyc2VyL3BhcnNlX2NsYXVzZS5jIHwgMjcwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr LQogc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYyAgIHwgICA2ICsKIHNyYy9iYWNrZW5k L3BhcnNlci9wYXJzZV9mdW5jLmMgICB8ICAgMyArCiA0IGZpbGVzIGNoYW5nZWQsIDI4NSBpbnNl cnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2Vy L3BhcnNlX2FnZy5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2FnZy5jCmluZGV4IDBhYzg5 NjZlMzBmLi42NjM4YTcwMDU1YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNl X2FnZy5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9hZ2cuYwpAQCAtNTgwLDYgKzU4 MCwxMCBAQCBjaGVja19hZ2dsZXZlbHNfYW5kX2NvbnN0cmFpbnRzKFBhcnNlU3RhdGUgKnBzdGF0 ZSwgTm9kZSAqZXhwcikKIAkJCWVycmtpbmQgPSB0cnVlOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBF WFBSX0tJTkRfUlBSX0RFRklORToKKwkJCWVycmtpbmQgPSB0cnVlOworCQkJYnJlYWs7CisKIAkJ CS8qCiAJCQkgKiBUaGVyZSBpcyBpbnRlbnRpb25hbGx5IG5vIGRlZmF1bHQ6IGNhc2UgaGVyZSwg c28gdGhhdCB0aGUKIAkJCSAqIGNvbXBpbGVyIHdpbGwgd2FybiBpZiB3ZSBhZGQgYSBuZXcgUGFy c2VFeHByS2luZCB3aXRob3V0CkBAIC05NzAsNiArOTc0LDkgQEAgdHJhbnNmb3JtV2luZG93RnVu Y0NhbGwoUGFyc2VTdGF0ZSAqcHN0YXRlLCBXaW5kb3dGdW5jICp3ZnVuYywKIAkJY2FzZSBFWFBS X0tJTkRfQ1lDTEVfTUFSSzoKIAkJCWVycmtpbmQgPSB0cnVlOwogCQkJYnJlYWs7CisJCWNhc2Ug RVhQUl9LSU5EX1JQUl9ERUZJTkU6CisJCQllcnJraW5kID0gdHJ1ZTsKKwkJCWJyZWFrOwogCiAJ CQkvKgogCQkJICogVGhlcmUgaXMgaW50ZW50aW9uYWxseSBubyBkZWZhdWx0OiBjYXNlIGhlcmUs IHNvIHRoYXQgdGhlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfY2xhdXNl LmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfY2xhdXNlLmMKaW5kZXggOWYyMGE3MGNlMTMu LmE5NGZlNWYzZjU3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfY2xhdXNl LmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2NsYXVzZS5jCkBAIC05Niw3ICs5Niwx MiBAQCBzdGF0aWMgV2luZG93Q2xhdXNlICpmaW5kV2luZG93Q2xhdXNlKExpc3QgKndjbGlzdCwg Y29uc3QgY2hhciAqbmFtZSk7CiBzdGF0aWMgTm9kZSAqdHJhbnNmb3JtRnJhbWVPZmZzZXQoUGFy c2VTdGF0ZSAqcHN0YXRlLCBpbnQgZnJhbWVPcHRpb25zLAogCQkJCQkJCQkgIE9pZCByYW5nZW9w ZmFtaWx5LCBPaWQgcmFuZ2VvcGNpbnR5cGUsIE9pZCAqaW5SYW5nZUZ1bmMsCiAJCQkJCQkJCSAg Tm9kZSAqY2xhdXNlKTsKLQorc3RhdGljIHZvaWQgdHJhbnNmb3JtUlBSKFBhcnNlU3RhdGUgKnBz dGF0ZSwgV2luZG93Q2xhdXNlICp3YywgV2luZG93RGVmICp3aW5kZWYsCisJCQkJCQkgTGlzdCAq KnRhcmdldGxpc3QpOworc3RhdGljIExpc3QgKnRyYW5zZm9ybURlZmluZUNsYXVzZShQYXJzZVN0 YXRlICpwc3RhdGUsIFdpbmRvd0NsYXVzZSAqd2MsIFdpbmRvd0RlZiAqd2luZGVmLAorCQkJCQkJ CQkgICBMaXN0ICoqdGFyZ2V0bGlzdCk7CitzdGF0aWMgdm9pZCB0cmFuc2Zvcm1QYXR0ZXJuQ2xh dXNlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgV2luZG93Q2xhdXNlICp3YywKKwkJCQkJCQkJICAgV2lu ZG93RGVmICp3aW5kZWYpOwogCiAvKgogICogdHJhbnNmb3JtRnJvbUNsYXVzZSAtCkBAIC0yOTU2 LDYgKzI5NjEsMTAgQEAgdHJhbnNmb3JtV2luZG93RGVmaW5pdGlvbnMoUGFyc2VTdGF0ZSAqcHN0 YXRlLAogCQkJCQkJCQkJCQkgcmFuZ2VvcGZhbWlseSwgcmFuZ2VvcGNpbnR5cGUsCiAJCQkJCQkJ CQkJCSAmd2MtPmVuZEluUmFuZ2VGdW5jLAogCQkJCQkJCQkJCQkgd2luZGVmLT5lbmRPZmZzZXQp OworCisJCS8qIFByb2Nlc3MgUm93IFBhdHRlcm4gUmVjb2duaXRpb24gcmVsYXRlZCBjbGF1c2Vz ICovCisJCXRyYW5zZm9ybVJQUihwc3RhdGUsIHdjLCB3aW5kZWYsIHRhcmdldGxpc3QpOworCiAJ CXdjLT53aW5yZWYgPSB3aW5yZWY7CiAKIAkJcmVzdWx0ID0gbGFwcGVuZChyZXN1bHQsIHdjKTsK QEAgLTM4MjMsMyArMzgzMiwyNjIgQEAgdHJhbnNmb3JtRnJhbWVPZmZzZXQoUGFyc2VTdGF0ZSAq cHN0YXRlLCBpbnQgZnJhbWVPcHRpb25zLAogCiAJcmV0dXJuIG5vZGU7CiB9CisKKy8qCisgKiB0 cmFuc2Zvcm1SUFIKKyAqCQlQcm9jZXNzIFJvdyBQYXR0ZXJuIFJlY29nbml0aW9uIHJlbGF0ZWQg Y2xhdXNlcworICovCitzdGF0aWMgdm9pZAordHJhbnNmb3JtUlBSKFBhcnNlU3RhdGUgKnBzdGF0 ZSwgV2luZG93Q2xhdXNlICp3YywgV2luZG93RGVmICp3aW5kZWYsCisJCQkgTGlzdCAqKnRhcmdl dGxpc3QpCit7CisJLyoKKwkgKiBXaW5kb3cgZGVmaW5pdGlvbiBleGlzdHM/CisJICovCisJaWYg KHdpbmRlZiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFJvdyBQYXR0ZXJuIENvbW1v biBTeW50YXggY2xhdXNlIGV4aXN0cz8KKwkgKi8KKwlpZiAod2luZGVmLT5ycENvbW1vblN5bnRh eCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKiBDaGVjayBGcmFtZSBvcHRpb24uIEZyYW1lIG11 c3Qgc3RhcnQgYXQgY3VycmVudCByb3cgKi8KKwlpZiAoKHdjLT5mcmFtZU9wdGlvbnMgJiBGUkFN RU9QVElPTl9TVEFSVF9DVVJSRU5UX1JPVykgPT0gMCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQko ZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJIGVycm1zZygiRlJBTUUgbXVzdCBz dGFydCBhdCBjdXJyZW50IHJvdyB3aGVuIHJvdyBwYXR0dGVybiByZWNvZ25pdGlvbiBpcyB1c2Vk IikpKTsKKworCS8qIFRyYW5zZm9ybSBBRlRFUiBNQUNIIFNLSVAgVE8gY2xhdXNlICovCisJd2Mt PnJwU2tpcFRvID0gd2luZGVmLT5ycENvbW1vblN5bnRheC0+cnBTa2lwVG87CisKKwkvKiBUcmFu c2Zvcm0gU0VFSyBvciBJTklUSUFMIGNsYXVzZSAqLworCXdjLT5pbml0aWFsID0gd2luZGVmLT5y cENvbW1vblN5bnRheC0+aW5pdGlhbDsKKworCS8qIFRyYW5zZm9ybSBERUZJTkUgY2xhdXNlIGlu dG8gbGlzdCBvZiBUYXJnZXRFbnRyeSdzICovCisJd2MtPmRlZmluZUNsYXVzZSA9IHRyYW5zZm9y bURlZmluZUNsYXVzZShwc3RhdGUsIHdjLCB3aW5kZWYsIHRhcmdldGxpc3QpOworCisJLyogQ2hl Y2sgUEFUVEVSTiBjbGF1c2UgYW5kIGNvcHkgdG8gcGF0dGVybkNsYXVzZSAqLworCXRyYW5zZm9y bVBhdHRlcm5DbGF1c2UocHN0YXRlLCB3Yywgd2luZGVmKTsKK30KKworLyoKKyAqIHRyYW5zZm9y bURlZmluZUNsYXVzZQorICoJCVByb2Nlc3MgREVGSU5FIGNsYXVzZSBhbmQgdHJhbnNmb3JtIFJl c1RhcmdldCBpbnRvIGxpc3Qgb2YKKyAqCQlUYXJnZXRFbnRyeS4KKyAqCisgKiBYWFggd2Ugb25s eSBzdXBwb3J0IGNvbHVtbiByZWZlcmVuY2UgaW4gcm93IHBhdHRlcm4gZGVmaW5pdGlvbiBzZWFy Y2gKKyAqIGNvbmRpdGlvbiwgZS5nLiAicHJpY2UiLiA8cm93IHBhdHRlcm4gZGVmaW5pdGlvbiB2 YXJpYWJsZSBuYW1lPi48Y29sdW1uCisgKiByZWZlcmVuY2U+IGlzIG5vdCBzdXBwb3J0ZWQsIGUu Zy4gIkEucHJpY2UiLgorICovCitzdGF0aWMgTGlzdCAqCit0cmFuc2Zvcm1EZWZpbmVDbGF1c2Uo UGFyc2VTdGF0ZSAqcHN0YXRlLCBXaW5kb3dDbGF1c2UgKndjLCBXaW5kb3dEZWYgKndpbmRlZiwK KwkJCQkJICBMaXN0ICoqdGFyZ2V0bGlzdCkKK3sKKwkvKiBERUZJTkUgdmFyaWFibGUgbmFtZSBp bml0aWFscyAqLworCXN0YXRpYyBjaGFyICpkZWZpbmVWYXJpYWJsZUluaXRpYWxzID0gImFiY2Rl ZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjsKKworCUxpc3RDZWxsICAgKmxjLAorCQkJICAgKmw7CisJ UmVzVGFyZ2V0ICAqcmVzdGFyZ2V0LAorCQkJICAgKnI7CisJTGlzdAkgICAqcmVzdGFyZ2V0czsK KwlMaXN0CSAgICpkZWZpbmVDbGF1c2U7CisJY2hhcgkgICAqbmFtZTsKKwlpbnQJCQlpbml0aWFs TGVuOworCWludAkJCWk7CisKKwkvKgorCSAqIElmIFJvdyBEZWZpbml0aW9uIENvbW1vbiBTeW50 YXggZXhpc3RzLCBERUZJTkUgY2xhdXNlIG11c3QgZXhpc3QuICh0aGUKKwkgKiByYXcgcGFyc2Vy IHNob3VsZCBoYXZlIGFscmVhZHkgY2hlY2tlZCBpdC4pCisJICovCisJQXNzZXJ0KHdpbmRlZi0+ cnBDb21tb25TeW50YXgtPnJwRGVmcyAhPSBOVUxMKTsKKworCS8qCisJICogQ2hlY2sgYW5kIGFk ZCAiQSBBUyBBIElTIFRSVUUiIGlmIHBhdHRlcm4gdmFyaWFibGUgaXMgbWlzc2luZyBpbiBERUZJ TkUKKwkgKiBwZXIgdGhlIFNRTCBzdGFuZGFyZC4KKwkgKi8KKwlyZXN0YXJnZXRzID0gTklMOwor CWZvcmVhY2gobGMsIHdpbmRlZi0+cnBDb21tb25TeW50YXgtPnJwUGF0dGVybnMpCisJeworCQlB X0V4cHIJICAgKmE7CisJCWJvb2wJCWZvdW5kID0gZmFsc2U7CisKKwkJaWYgKCFJc0EobGZpcnN0 KGxjKSwgQV9FeHByKSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCWVycm1zZygibm9kZSB0eXBl IGlzIG5vdCBBX0V4cHIiKSk7CisKKwkJYSA9IChBX0V4cHIgKikgbGZpcnN0KGxjKTsKKwkJbmFt ZSA9IHN0clZhbChhLT5sZXhwcik7CisKKwkJZm9yZWFjaChsLCB3aW5kZWYtPnJwQ29tbW9uU3lu dGF4LT5ycERlZnMpCisJCXsKKwkJCXJlc3RhcmdldCA9IChSZXNUYXJnZXQgKikgbGZpcnN0KGwp OworCisJCQlpZiAoIXN0cmNtcChyZXN0YXJnZXQtPm5hbWUsIG5hbWUpKQorCQkJeworCQkJCWZv dW5kID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmICghZm91bmQpCisJCXsK KwkJCS8qCisJCQkgKiAibmFtZSIgaXMgbWlzc2luZy4gU28gY3JlYXRlICJuYW1lIEFTIG5hbWUg SVMgVFJVRSIgUmVzVGFyZ2V0CisJCQkgKiBub2RlIGFuZCBhZGQgaXQgdG8gdGhlIHRlbXBvcmFy eSBsaXN0LgorCQkJICovCisJCQlBX0NvbnN0ICAgICpuOworCisJCQlyZXN0YXJnZXQgPSBtYWtl Tm9kZShSZXNUYXJnZXQpOworCQkJbiA9IG1ha2VOb2RlKEFfQ29uc3QpOworCQkJbi0+dmFsLmJv b2x2YWwudHlwZSA9IFRfQm9vbGVhbjsKKwkJCW4tPnZhbC5ib29sdmFsLmJvb2x2YWwgPSB0cnVl OworCQkJbi0+bG9jYXRpb24gPSAtMTsKKwkJCXJlc3RhcmdldC0+bmFtZSA9IHBzdHJkdXAobmFt ZSk7CisJCQlyZXN0YXJnZXQtPmluZGlyZWN0aW9uID0gTklMOworCQkJcmVzdGFyZ2V0LT52YWwg PSAoTm9kZSAqKSBuOworCQkJcmVzdGFyZ2V0LT5sb2NhdGlvbiA9IC0xOworCQkJcmVzdGFyZ2V0 cyA9IGxhcHBlbmQoKExpc3QgKikgcmVzdGFyZ2V0cywgcmVzdGFyZ2V0KTsKKwkJfQorCX0KKwor CWlmIChsaXN0X2xlbmd0aChyZXN0YXJnZXRzKSA+PSAxKQorCXsKKwkJLyogYWRkIG1pc3Npbmcg REVGSU5FcyAqLworCQl3aW5kZWYtPnJwQ29tbW9uU3ludGF4LT5ycERlZnMgPQorCQkJbGlzdF9j b25jYXQod2luZGVmLT5ycENvbW1vblN5bnRheC0+cnBEZWZzLCByZXN0YXJnZXRzKTsKKwkJbGlz dF9mcmVlKHJlc3RhcmdldHMpOworCX0KKworCS8qCisJICogQ2hlY2sgZm9yIGR1cGxpY2F0ZSBy b3cgcGF0dGVybiBkZWZpbml0aW9uIHZhcmlhYmxlcy4gIFRoZSBzdGFuZGFyZAorCSAqIHJlcXVp cmVzIHRoYXQgbm8gdHdvIHJvdyBwYXR0ZXJuIGRlZmluaXRpb24gdmFyaWFibGUgbmFtZXMgc2hh bGwgYmUKKwkgKiBlcXVpdmFsZW50LgorCSAqLworCXJlc3RhcmdldHMgPSBOSUw7CisJZm9yZWFj aChsYywgd2luZGVmLT5ycENvbW1vblN5bnRheC0+cnBEZWZzKQorCXsKKwkJcmVzdGFyZ2V0ID0g KFJlc1RhcmdldCAqKSBsZmlyc3QobGMpOworCQluYW1lID0gcmVzdGFyZ2V0LT5uYW1lOworCisJ CS8qCisJCSAqIEFkZCBERUZJTkUgZXhwcmVzc2lvbiAoUmVzdGFyZ2V0LT52YWwpIHRvIHRoZSB0 YXJnZXRsaXN0IGFzIGEKKwkJICogVGFyZ2V0RW50cnkgaWYgaXQgZG9lcyBub3QgZXhpc3QgeWV0 LiBQbGFubmVyIHdpbGwgYWRkIHRoZSBjb2x1bW4KKwkJICogcmVmIHZhciBub2RlIHRvIHRoZSBv dXRlciBwbGFuJ3MgdGFyZ2V0IGxpc3QgbGF0ZXIgb24uIFRoaXMgbWFrZXMKKwkJICogREVGSU5F IGV4cHJlc3Npb24gY291bGQgYWNjZXNzIHRoZSBvdXRlciB0dXBsZSB3aGlsZSBldmFsdWF0aW5n CisJCSAqIFBBVFRFUk4uCisJCSAqCisJCSAqIFhYWDogYWRkaW5nIHdob2xlIGV4cHJlc3Npb25z IG9mIERFRklORSB0byB0aGUgcGxhbi50YXJnZXRsaXN0IGlzCisJCSAqIG5vdCBzbyBnb29kLCBi ZWNhdXNlIGl0J3Mgbm90IG5lY2Vzc2FyeSB0byBldmFsdXRlIHRoZSBleHByZXNzaW9uCisJCSAq IGluIHRoZSB0YXJnZXQgbGlzdCB3aGlsZSBydW5uaW5nIHRoZSBwbGFuLiBXZSBzaG91bGQgZXh0 cmFjdCB0aGUKKwkJICogdmFyIG5vZGVzIG9ubHkgdGhlbiBhZGQgdGhlbSB0byB0aGUgcGxhbi50 YXJnZXRsaXN0LgorCQkgKi8KKwkJZmluZFRhcmdldGxpc3RFbnRyeVNRTDk5KHBzdGF0ZSwgKE5v ZGUgKikgcmVzdGFyZ2V0LT52YWwsCisJCQkJCQkJCSB0YXJnZXRsaXN0LCBFWFBSX0tJTkRfUlBS X0RFRklORSk7CisKKwkJLyoKKwkJICogTWFrZSBzdXJlIHRoYXQgdGhlIHJvdyBwYXR0ZXJuIGRl ZmluaXRpb24gc2VhcmNoIGNvbmRpdGlvbiBpcyBhCisJCSAqIGJvb2xlYW4gZXhwcmVzc2lvbi4K KwkJICovCisJCXRyYW5zZm9ybVdoZXJlQ2xhdXNlKHBzdGF0ZSwgcmVzdGFyZ2V0LT52YWwsCisJ CQkJCQkJIEVYUFJfS0lORF9SUFJfREVGSU5FLCAiREVGSU5FIik7CisKKwkJZm9yZWFjaChsLCBy ZXN0YXJnZXRzKQorCQl7CisJCQljaGFyCSAgICpuOworCisJCQlyID0gKFJlc1RhcmdldCAqKSBs Zmlyc3QobCk7CisJCQluID0gci0+bmFtZTsKKworCQkJaWYgKCFzdHJjbXAobiwgbmFtZSkpCisJ CQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwK KwkJCQkJCSBlcnJtc2coInJvdyBwYXR0ZXJuIGRlZmluaXRpb24gdmFyaWFibGUgbmFtZSBcIiVz XCIgYXBwZWFycyBtb3JlIHRoYW4gb25jZSBpbiBERUZJTkUgY2xhdXNlIiwKKwkJCQkJCQkJbmFt ZSksCisJCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgZXhwckxvY2F0aW9uKChOb2Rl ICopIHIpKSkpOworCQl9CisJCXJlc3RhcmdldHMgPSBsYXBwZW5kKHJlc3RhcmdldHMsIHJlc3Rh cmdldCk7CisJfQorCWxpc3RfZnJlZShyZXN0YXJnZXRzKTsKKworCS8qCisJICogQ3JlYXRlIGxp c3Qgb2Ygcm93IHBhdHRlcm4gREVGSU5FIHZhcmlhYmxlIG5hbWUncyBpbml0aWFsLiBXZSBhc3Np Z24KKwkgKiBbYS16XSB0byB0aGVtICh1cCB0byAyNiB2YXJpYWJsZSBuYW1lcyBhcmUgYWxsb3dl ZCkuCisJICovCisJcmVzdGFyZ2V0cyA9IE5JTDsKKwlpID0gMDsKKwlpbml0aWFsTGVuID0gc3Ry bGVuKGRlZmluZVZhcmlhYmxlSW5pdGlhbHMpOworCisJZm9yZWFjaChsYywgd2luZGVmLT5ycENv bW1vblN5bnRheC0+cnBEZWZzKQorCXsKKwkJY2hhcgkJaW5pdGlhbFsyXTsKKworCQlyZXN0YXJn ZXQgPSAoUmVzVGFyZ2V0ICopIGxmaXJzdChsYyk7CisJCW5hbWUgPSByZXN0YXJnZXQtPm5hbWU7 CisKKwkJaWYgKGkgPj0gaW5pdGlhbExlbikKKwkJeworCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJ KGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCQkgZXJybXNnKCJudW1iZXIgb2Yg cm93IHBhdHRlcm4gZGVmaW5pdGlvbiB2YXJpYWJsZSBuYW1lcyBleGNlZWRzICVkIiwKKwkJCQkJ CQlpbml0aWFsTGVuKSwKKwkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsCisJCQkJCQkJ CQkJZXhwckxvY2F0aW9uKChOb2RlICopIHJlc3RhcmdldCkpKSk7CisJCX0KKwkJaW5pdGlhbFsw XSA9IGRlZmluZVZhcmlhYmxlSW5pdGlhbHNbaSsrXTsKKwkJaW5pdGlhbFsxXSA9ICdcMCc7CisJ CXdjLT5kZWZpbmVJbml0aWFsID0gbGFwcGVuZCh3Yy0+ZGVmaW5lSW5pdGlhbCwKKwkJCQkJCQkJ CW1ha2VTdHJpbmcocHN0cmR1cChpbml0aWFsKSkpOworCX0KKworCWRlZmluZUNsYXVzZSA9IHRy YW5zZm9ybVRhcmdldExpc3QocHN0YXRlLCB3aW5kZWYtPnJwQ29tbW9uU3ludGF4LT5ycERlZnMs CisJCQkJCQkJCQkgICBFWFBSX0tJTkRfUlBSX0RFRklORSk7CisKKwkvKiBtYXJrIGNvbHVtbiBv cmlnaW5zICovCisJbWFya1RhcmdldExpc3RPcmlnaW5zKHBzdGF0ZSwgZGVmaW5lQ2xhdXNlKTsK KworCS8qIG1hcmsgYWxsIG5vZGVzIGluIHRoZSBERUZJTkUgY2xhdXNlIHRyZWUgd2l0aCBjb2xs YXRpb24gaW5mb3JtYXRpb24gKi8KKwlhc3NpZ25fZXhwcl9jb2xsYXRpb25zKHBzdGF0ZSwgKE5v ZGUgKikgZGVmaW5lQ2xhdXNlKTsKKworCXJldHVybiBkZWZpbmVDbGF1c2U7Cit9CisKKy8qCisg KiB0cmFuc2Zvcm1QYXR0ZXJuQ2xhdXNlCisgKgkJUHJvY2VzcyBQQVRURVJOIGNsYXVzZSBhbmQg cmV0dXJuIFBBVFRFUk4gY2xhdXNlIGluIHRoZSByYXcgcGFyc2UgdHJlZQorICovCitzdGF0aWMg dm9pZAordHJhbnNmb3JtUGF0dGVybkNsYXVzZShQYXJzZVN0YXRlICpwc3RhdGUsIFdpbmRvd0Ns YXVzZSAqd2MsCisJCQkJCSAgIFdpbmRvd0RlZiAqd2luZGVmKQoreworCUxpc3RDZWxsICAgKmxj OworCisJLyoKKwkgKiBSb3cgUGF0dGVybiBDb21tb24gU3ludGF4IGNsYXVzZSBleGlzdHM/CisJ ICovCisJaWYgKHdpbmRlZi0+cnBDb21tb25TeW50YXggPT0gTlVMTCkKKwkJcmV0dXJuOworCisJ d2MtPnBhdHRlcm5WYXJpYWJsZSA9IE5JTDsKKwl3Yy0+cGF0dGVyblJlZ2V4cCA9IE5JTDsKKwlm b3JlYWNoKGxjLCB3aW5kZWYtPnJwQ29tbW9uU3ludGF4LT5ycFBhdHRlcm5zKQorCXsKKwkJQV9F eHByCSAgICphOworCQljaGFyCSAgICpuYW1lOworCQljaGFyCSAgICpyZWdleHA7CisKKwkJaWYg KCFJc0EobGZpcnN0KGxjKSwgQV9FeHByKSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCWVycm1z Zygibm9kZSB0eXBlIGlzIG5vdCBBX0V4cHIiKSk7CisKKwkJYSA9IChBX0V4cHIgKikgbGZpcnN0 KGxjKTsKKwkJbmFtZSA9IHN0clZhbChhLT5sZXhwcik7CisKKwkJd2MtPnBhdHRlcm5WYXJpYWJs ZSA9IGxhcHBlbmQod2MtPnBhdHRlcm5WYXJpYWJsZSwgbWFrZVN0cmluZyhwc3RyZHVwKG5hbWUp KSk7CisJCXJlZ2V4cCA9IHN0clZhbChsZmlyc3QobGlzdF9oZWFkKGEtPm5hbWUpKSk7CisKKwkJ d2MtPnBhdHRlcm5SZWdleHAgPSBsYXBwZW5kKHdjLT5wYXR0ZXJuUmVnZXhwLCBtYWtlU3RyaW5n KHBzdHJkdXAocmVnZXhwKSkpOworCX0KK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNl ci9wYXJzZV9leHByLmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCmluZGV4IGQ2 NjI3NjgwMWM2Li4yZWQ3NDM3ZmM0NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3Bh cnNlX2V4cHIuYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCkBAIC01NzUs NiArNTc1LDcgQEAgdHJhbnNmb3JtQ29sdW1uUmVmKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ29sdW1u UmVmICpjcmVmKQogCQljYXNlIEVYUFJfS0lORF9DT1BZX1dIRVJFOgogCQljYXNlIEVYUFJfS0lO RF9HRU5FUkFURURfQ09MVU1OOgogCQljYXNlIEVYUFJfS0lORF9DWUNMRV9NQVJLOgorCQljYXNl IEVYUFJfS0lORF9SUFJfREVGSU5FOgogCQkJLyogb2theSAqLwogCQkJYnJlYWs7CiAKQEAgLTE4 NjAsNiArMTg2MSw5IEBAIHRyYW5zZm9ybVN1YkxpbmsoUGFyc2VTdGF0ZSAqcHN0YXRlLCBTdWJM aW5rICpzdWJsaW5rKQogCQljYXNlIEVYUFJfS0lORF9HRU5FUkFURURfQ09MVU1OOgogCQkJZXJy ID0gXygiY2Fubm90IHVzZSBzdWJxdWVyeSBpbiBjb2x1bW4gZ2VuZXJhdGlvbiBleHByZXNzaW9u Iik7CiAJCQlicmVhazsKKwkJY2FzZSBFWFBSX0tJTkRfUlBSX0RFRklORToKKwkJCWVyciA9IF8o ImNhbm5vdCB1c2Ugc3VicXVlcnkgaW4gREVGSU5FIGV4cHJlc3Npb24iKTsKKwkJCWJyZWFrOwog CiAJCQkvKgogCQkJICogVGhlcmUgaXMgaW50ZW50aW9uYWxseSBubyBkZWZhdWx0OiBjYXNlIGhl cmUsIHNvIHRoYXQgdGhlCkBAIC0zMjE5LDYgKzMyMjMsOCBAQCBQYXJzZUV4cHJLaW5kTmFtZShQ YXJzZUV4cHJLaW5kIGV4cHJLaW5kKQogCQkJcmV0dXJuICJHRU5FUkFURUQgQVMiOwogCQljYXNl IEVYUFJfS0lORF9DWUNMRV9NQVJLOgogCQkJcmV0dXJuICJDWUNMRSI7CisJCWNhc2UgRVhQUl9L SU5EX1JQUl9ERUZJTkU6CisJCQlyZXR1cm4gIkRFRklORSI7CiAKIAkJCS8qCiAJCQkgKiBUaGVy ZSBpcyBpbnRlbnRpb25hbGx5IG5vIGRlZmF1bHQ6IGNhc2UgaGVyZSwgc28gdGhhdCB0aGUKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9mdW5jLmMgYi9zcmMvYmFja2VuZC9w YXJzZXIvcGFyc2VfZnVuYy5jCmluZGV4IDU4M2JiYmYyMzJmLi4xYTAwOTI3MjFiMCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2Z1bmMuYworKysgYi9zcmMvYmFja2VuZC9w YXJzZXIvcGFyc2VfZnVuYy5jCkBAIC0yNjU4LDYgKzI2NTgsOSBAQCBjaGVja19zcmZfY2FsbF9w bGFjZW1lbnQoUGFyc2VTdGF0ZSAqcHN0YXRlLCBOb2RlICpsYXN0X3NyZiwgaW50IGxvY2F0aW9u KQogCQljYXNlIEVYUFJfS0lORF9DWUNMRV9NQVJLOgogCQkJZXJya2luZCA9IHRydWU7CiAJCQli cmVhazsKKwkJY2FzZSBFWFBSX0tJTkRfUlBSX0RFRklORToKKwkJCWVycmtpbmQgPSB0cnVlOwor CQkJYnJlYWs7CiAKIAkJCS8qCiAJCQkgKiBUaGVyZSBpcyBpbnRlbnRpb25hbGx5IG5vIGRlZmF1 bHQ6IGNhc2UgaGVyZSwgc28gdGhhdCB0aGUKLS0gCjIuMjUuMQoK ----Next_Part(Sat_Aug_16_17_45_52_2025_123)-- Content-Type: Application/Octet-Stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v32-0003-Row-pattern-recognition-patch-rewriter.patch" RnJvbSA1NGU0NDY0YzQ5OTU4Mzk4ZjVjZWFiZDcwZGFiMGE4MjNlMzNjNTYzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYXRzdW8gSXNoaWkgPGlzaGlpQHBvc3RncmVzcWwub3JnPgpE YXRlOiBTYXQsIDE2IEF1ZyAyMDI1IDE3OjMzOjMyICswOTAwClN1YmplY3Q6IFtQQVRDSCB2MzIg My85XSBSb3cgcGF0dGVybiByZWNvZ25pdGlvbiBwYXRjaCAocmV3cml0ZXIpLgoKLS0tCiBzcmMv YmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMgfCAxMTIgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMTEyIGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvcnVsZXV0aWxzLmMKaW5kZXggM2Q2ZTZiZGJmZDIuLjkwMmNkNTc3YzI3IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3J1bGV1dGlscy5jCkBAIC00MzgsNiArNDM4LDEwIEBAIHN0YXRpYyB2b2lkIGdldF9y dWxlX2dyb3VwaW5nc2V0KEdyb3VwaW5nU2V0ICpnc2V0LCBMaXN0ICp0YXJnZXRsaXN0LAogCQkJ CQkJCQkgYm9vbCBvbWl0X3BhcmVucywgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KTsKIHN0YXRp YyB2b2lkIGdldF9ydWxlX29yZGVyYnkoTGlzdCAqb3JkZXJMaXN0LCBMaXN0ICp0YXJnZXRMaXN0 LAogCQkJCQkJCSBib29sIGZvcmNlX2NvbG5vLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpOwor c3RhdGljIHZvaWQgZ2V0X3J1bGVfcGF0dGVybihMaXN0ICpwYXR0ZXJuVmFyaWFibGUsIExpc3Qg KnBhdHRlcm5SZWdleHAsCisJCQkJCQkJIGJvb2wgZm9yY2VfY29sbm8sIGRlcGFyc2VfY29udGV4 dCAqY29udGV4dCk7CitzdGF0aWMgdm9pZCBnZXRfcnVsZV9kZWZpbmUoTGlzdCAqZGVmaW5lQ2xh dXNlLCBMaXN0ICpwYXR0ZXJuVmFyaWFibGVzLAorCQkJCQkJCWJvb2wgZm9yY2VfY29sbm8sIGRl cGFyc2VfY29udGV4dCAqY29udGV4dCk7CiBzdGF0aWMgdm9pZCBnZXRfcnVsZV93aW5kb3djbGF1 c2UoUXVlcnkgKnF1ZXJ5LCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpOwogc3RhdGljIHZvaWQg Z2V0X3J1bGVfd2luZG93c3BlYyhXaW5kb3dDbGF1c2UgKndjLCBMaXN0ICp0YXJnZXRMaXN0LAog CQkJCQkJCQlkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpOwpAQCAtNjczOSw2ICs2NzQzLDY3IEBA IGdldF9ydWxlX29yZGVyYnkoTGlzdCAqb3JkZXJMaXN0LCBMaXN0ICp0YXJnZXRMaXN0LAogCX0K IH0KIAorLyoKKyAqIERpc3BsYXkgYSBQQVRURVJOIGNsYXVzZS4KKyAqLworc3RhdGljIHZvaWQK K2dldF9ydWxlX3BhdHRlcm4oTGlzdCAqcGF0dGVyblZhcmlhYmxlLCBMaXN0ICpwYXR0ZXJuUmVn ZXhwLAorCQkJCSBib29sIGZvcmNlX2NvbG5vLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpCit7 CisJU3RyaW5nSW5mbwlidWYgPSBjb250ZXh0LT5idWY7CisJY29uc3QgY2hhciAqc2VwOworCUxp c3RDZWxsICAgKmxjX3ZhciwKKwkJCSAgICpsY19yZWcgPSBsaXN0X2hlYWQocGF0dGVyblJlZ2V4 cCk7CisKKwlzZXAgPSAiIjsKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcoJyk7CisJZm9y ZWFjaChsY192YXIsIHBhdHRlcm5WYXJpYWJsZSkKKwl7CisJCWNoYXIJICAgKnZhcmlhYmxlID0g c3RyVmFsKChTdHJpbmcgKikgbGZpcnN0KGxjX3ZhcikpOworCQljaGFyCSAgICpyZWdleHAgPSBO VUxMOworCisJCWlmIChsY19yZWcgIT0gTlVMTCkKKwkJeworCQkJcmVnZXhwID0gc3RyVmFsKChT dHJpbmcgKikgbGZpcnN0KGxjX3JlZykpOworCisJCQlsY19yZWcgPSBsbmV4dChwYXR0ZXJuUmVn ZXhwLCBsY19yZWcpOworCQl9CisKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyVzIiwgc2Vw LCB2YXJpYWJsZSk7CisJCWlmIChyZWdleHAgIT1OVUxMKQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZyhidWYsIHJlZ2V4cCk7CisKKwkJc2VwID0gIiAiOworCX0KKwlhcHBlbmRTdHJpbmdJbmZv Q2hhcihidWYsICcpJyk7Cit9CisKKy8qCisgKiBEaXNwbGF5IGEgREVGSU5FIGNsYXVzZS4KKyAq Lworc3RhdGljIHZvaWQKK2dldF9ydWxlX2RlZmluZShMaXN0ICpkZWZpbmVDbGF1c2UsIExpc3Qg KnBhdHRlcm5WYXJpYWJsZXMsCisJCQkJYm9vbCBmb3JjZV9jb2xubywgZGVwYXJzZV9jb250ZXh0 ICpjb250ZXh0KQoreworCVN0cmluZ0luZm8JYnVmID0gY29udGV4dC0+YnVmOworCWNvbnN0IGNo YXIgKnNlcDsKKwlMaXN0Q2VsbCAgICpsY192YXIsCisJCQkgICAqbGNfZGVmOworCisJc2VwID0g IiAgIjsKKwlBc3NlcnQobGlzdF9sZW5ndGgocGF0dGVyblZhcmlhYmxlcykgPT0gbGlzdF9sZW5n dGgoZGVmaW5lQ2xhdXNlKSk7CisKKwlmb3Jib3RoKGxjX3ZhciwgcGF0dGVyblZhcmlhYmxlcywg bGNfZGVmLCBkZWZpbmVDbGF1c2UpCisJeworCQljaGFyCSAgICp2YXJOYW1lID0gc3RyVmFsKGxm aXJzdChsY192YXIpKTsKKwkJVGFyZ2V0RW50cnkgKnRlID0gKFRhcmdldEVudHJ5ICopIGxmaXJz dChsY19kZWYpOworCisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMlcyBBUyAiLCBzZXAsIHZh ck5hbWUpOworCQlnZXRfcnVsZV9leHByKChOb2RlICopIHRlLT5leHByLCBjb250ZXh0LCBmYWxz ZSk7CisJCXNlcCA9ICIsXG4gICI7CisJfQorfQorCiAvKgogICogRGlzcGxheSBhIFdJTkRPVyBj bGF1c2UuCiAgKgpAQCAtNjgxOSw2ICs2ODg0LDcgQEAgZ2V0X3J1bGVfd2luZG93c3BlYyhXaW5k b3dDbGF1c2UgKndjLCBMaXN0ICp0YXJnZXRMaXN0LAogCQlnZXRfcnVsZV9vcmRlcmJ5KHdjLT5v cmRlckNsYXVzZSwgdGFyZ2V0TGlzdCwgZmFsc2UsIGNvbnRleHQpOwogCQluZWVkc3BhY2UgPSB0 cnVlOwogCX0KKwogCS8qIGZyYW1pbmcgY2xhdXNlIGlzIG5ldmVyIGluaGVyaXRlZCwgc28gcHJp bnQgdW5sZXNzIGl0J3MgZGVmYXVsdCAqLwogCWlmICh3Yy0+ZnJhbWVPcHRpb25zICYgRlJBTUVP UFRJT05fTk9OREVGQVVMVCkKIAl7CkBAIC02ODI3LDcgKzY4OTMsNTMgQEAgZ2V0X3J1bGVfd2lu ZG93c3BlYyhXaW5kb3dDbGF1c2UgKndjLCBMaXN0ICp0YXJnZXRMaXN0LAogCQlnZXRfd2luZG93 X2ZyYW1lX29wdGlvbnMod2MtPmZyYW1lT3B0aW9ucywKIAkJCQkJCQkJIHdjLT5zdGFydE9mZnNl dCwgd2MtPmVuZE9mZnNldCwKIAkJCQkJCQkJIGNvbnRleHQpOworCQluZWVkc3BhY2UgPSB0cnVl OwogCX0KKworCS8qIFJQUiAqLworCWlmICh3Yy0+cnBTa2lwVG8gPT0gU1RfTkVYVF9ST1cpCisJ eworCQlpZiAobmVlZHNwYWNlKQorCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnICcpOwor CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwKKwkJCQkJCQkgICAiXG4gIEFGVEVSIE1BVENI IFNLSVAgVE8gTkVYVCBST1cgIik7CisJCW5lZWRzcGFjZSA9IHRydWU7CisJfQorCWVsc2UgaWYg KHdjLT5ycFNraXBUbyA9PSBTVF9QQVNUX0xBU1RfUk9XKQorCXsKKwkJaWYgKG5lZWRzcGFjZSkK KwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJyAnKTsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZyhidWYsCisJCQkJCQkJICAgIlxuICBBRlRFUiBNQVRDSCBTS0lQIFBBU1QgTEFTVCBST1cg Iik7CisJCW5lZWRzcGFjZSA9IHRydWU7CisJfQorCWlmICh3Yy0+aW5pdGlhbCkKKwl7CisJCWlm IChuZWVkc3BhY2UpCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcgJyk7CisJCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiXG4gIElOSVRJQUwiKTsKKwkJbmVlZHNwYWNlID0gdHJ1 ZTsKKwl9CisJaWYgKHdjLT5wYXR0ZXJuVmFyaWFibGUpCisJeworCQlpZiAobmVlZHNwYWNlKQor CQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnICcpOworCQlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKGJ1ZiwgIlxuICBQQVRURVJOICIpOworCQlnZXRfcnVsZV9wYXR0ZXJuKHdjLT5wYXR0ZXJu VmFyaWFibGUsIHdjLT5wYXR0ZXJuUmVnZXhwLAorCQkJCQkJIGZhbHNlLCBjb250ZXh0KTsKKwkJ bmVlZHNwYWNlID0gdHJ1ZTsKKwl9CisKKwlpZiAod2MtPmRlZmluZUNsYXVzZSkKKwl7CisJCWlm IChuZWVkc3BhY2UpCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcgJyk7CisJCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiXG4gIERFRklORVxuIik7CisJCWdldF9ydWxlX2RlZmlu ZSh3Yy0+ZGVmaW5lQ2xhdXNlLCB3Yy0+cGF0dGVyblZhcmlhYmxlLAorCQkJCQkJZmFsc2UsIGNv bnRleHQpOworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcgJyk7CisJfQorCiAJYXBwZW5k U3RyaW5nSW5mb0NoYXIoYnVmLCAnKScpOwogfQogCi0tIAoyLjI1LjEKCg== ----Next_Part(Sat_Aug_16_17_45_52_2025_123)-- Content-Type: Application/Octet-Stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v32-0004-Row-pattern-recognition-patch-planner.patch" RnJvbSAzMWM2OTIwOTBmZjA2MzFhN2E0OTNjMjExYzEzOWU4YzcxY2VhNDdiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYXRzdW8gSXNoaWkgPGlzaGlpQHBvc3RncmVzcWwub3JnPgpE YXRlOiBTYXQsIDE2IEF1ZyAyMDI1IDE3OjMzOjMyICswOTAwClN1YmplY3Q6IFtQQVRDSCB2MzIg NC85XSBSb3cgcGF0dGVybiByZWNvZ25pdGlvbiBwYXRjaCAocGxhbm5lcikuCgotLS0KIHNyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYyAgIHwgMTggKysrKysrKysrKysrKy0t CiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgICAgICB8ICAzICsrKwogc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jICAgICAgfCAyNyArKysrKysrKysrKysr KysrKysrKysrLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcGpvaW50cmVlLmMgfCAg OSArKysrKysrKwogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggICAgICAgICAgICAgfCAx OSArKysrKysrKysrKysrKysrCiA1IGZpbGVzIGNoYW5nZWQsIDczIGluc2VydGlvbnMoKyksIDMg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3Jl YXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCmluZGV4 IDlmZDVjMzFlZGYyLi5mMzJhNjIzMWIyYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2Ny ZWF0ZXBsYW4uYwpAQCAtMjkxLDcgKzI5MSw5IEBAIHN0YXRpYyBNZW1vaXplICptYWtlX21lbW9p emUoUGxhbiAqbGVmdHRyZWUsIE9pZCAqaGFzaG9wZXJhdG9ycywKIHN0YXRpYyBXaW5kb3dBZ2cg Km1ha2Vfd2luZG93YWdnKExpc3QgKnRsaXN0LCBXaW5kb3dDbGF1c2UgKndjLAogCQkJCQkJCQkg aW50IHBhcnROdW1Db2xzLCBBdHRyTnVtYmVyICpwYXJ0Q29sSWR4LCBPaWQgKnBhcnRPcGVyYXRv cnMsIE9pZCAqcGFydENvbGxhdGlvbnMsCiAJCQkJCQkJCSBpbnQgb3JkTnVtQ29scywgQXR0ck51 bWJlciAqb3JkQ29sSWR4LCBPaWQgKm9yZE9wZXJhdG9ycywgT2lkICpvcmRDb2xsYXRpb25zLAot CQkJCQkJCQkgTGlzdCAqcnVuQ29uZGl0aW9uLCBMaXN0ICpxdWFsLCBib29sIHRvcFdpbmRvdywK KwkJCQkJCQkJIExpc3QgKnJ1bkNvbmRpdGlvbiwgUlBTa2lwVG8gcnBTa2lwVG8sIExpc3QgKnBh dHRlcm5WYXJpYWJsZSwKKwkJCQkJCQkJIExpc3QgKnBhdHRlcm5SZWdleHAsIExpc3QgKmRlZmlu ZUNsYXVzZSwgTGlzdCAqZGVmaW5lSW5pdGlhbCwKKwkJCQkJCQkJIExpc3QgKnF1YWwsIGJvb2wg dG9wV2luZG93LAogCQkJCQkJCQkgUGxhbiAqbGVmdHRyZWUpOwogc3RhdGljIEdyb3VwICptYWtl X2dyb3VwKExpc3QgKnRsaXN0LCBMaXN0ICpxdWFsLCBpbnQgbnVtR3JvdXBDb2xzLAogCQkJCQkJ IEF0dHJOdW1iZXIgKmdycENvbElkeCwgT2lkICpncnBPcGVyYXRvcnMsIE9pZCAqZ3JwQ29sbGF0 aW9ucywKQEAgLTI3NDQsNiArMjc0NiwxMSBAQCBjcmVhdGVfd2luZG93YWdnX3BsYW4oUGxhbm5l ckluZm8gKnJvb3QsIFdpbmRvd0FnZ1BhdGggKmJlc3RfcGF0aCkKIAkJCQkJCSAgb3JkT3BlcmF0 b3JzLAogCQkJCQkJICBvcmRDb2xsYXRpb25zLAogCQkJCQkJICBiZXN0X3BhdGgtPnJ1bkNvbmRp dGlvbiwKKwkJCQkJCSAgd2MtPnJwU2tpcFRvLAorCQkJCQkJICB3Yy0+cGF0dGVyblZhcmlhYmxl LAorCQkJCQkJICB3Yy0+cGF0dGVyblJlZ2V4cCwKKwkJCQkJCSAgd2MtPmRlZmluZUNsYXVzZSwK KwkJCQkJCSAgd2MtPmRlZmluZUluaXRpYWwsCiAJCQkJCQkgIGJlc3RfcGF0aC0+cXVhbCwKIAkJ CQkJCSAgYmVzdF9wYXRoLT50b3B3aW5kb3csCiAJCQkJCQkgIHN1YnBsYW4pOwpAQCAtNjgxOCw3 ICs2ODI1LDkgQEAgc3RhdGljIFdpbmRvd0FnZyAqCiBtYWtlX3dpbmRvd2FnZyhMaXN0ICp0bGlz dCwgV2luZG93Q2xhdXNlICp3YywKIAkJCSAgIGludCBwYXJ0TnVtQ29scywgQXR0ck51bWJlciAq cGFydENvbElkeCwgT2lkICpwYXJ0T3BlcmF0b3JzLCBPaWQgKnBhcnRDb2xsYXRpb25zLAogCQkJ ICAgaW50IG9yZE51bUNvbHMsIEF0dHJOdW1iZXIgKm9yZENvbElkeCwgT2lkICpvcmRPcGVyYXRv cnMsIE9pZCAqb3JkQ29sbGF0aW9ucywKLQkJCSAgIExpc3QgKnJ1bkNvbmRpdGlvbiwgTGlzdCAq cXVhbCwgYm9vbCB0b3BXaW5kb3csIFBsYW4gKmxlZnR0cmVlKQorCQkJICAgTGlzdCAqcnVuQ29u ZGl0aW9uLCBSUFNraXBUbyBycFNraXBUbywgTGlzdCAqcGF0dGVyblZhcmlhYmxlLAorCQkJICAg TGlzdCAqcGF0dGVyblJlZ2V4cCwgTGlzdCAqZGVmaW5lQ2xhdXNlLCBMaXN0ICpkZWZpbmVJbml0 aWFsLAorCQkJICAgTGlzdCAqcXVhbCwgYm9vbCB0b3BXaW5kb3csIFBsYW4gKmxlZnR0cmVlKQog ewogCVdpbmRvd0FnZyAgKm5vZGUgPSBtYWtlTm9kZShXaW5kb3dBZ2cpOwogCVBsYW4JICAgKnBs YW4gPSAmbm9kZS0+cGxhbjsKQEAgLTY4NDUsNiArNjg1NCwxMSBAQCBtYWtlX3dpbmRvd2FnZyhM aXN0ICp0bGlzdCwgV2luZG93Q2xhdXNlICp3YywKIAlub2RlLT5pblJhbmdlQXNjID0gd2MtPmlu UmFuZ2VBc2M7CiAJbm9kZS0+aW5SYW5nZU51bGxzRmlyc3QgPSB3Yy0+aW5SYW5nZU51bGxzRmly c3Q7CiAJbm9kZS0+dG9wV2luZG93ID0gdG9wV2luZG93OworCW5vZGUtPnJwU2tpcFRvID0gcnBT a2lwVG87CisJbm9kZS0+cGF0dGVyblZhcmlhYmxlID0gcGF0dGVyblZhcmlhYmxlOworCW5vZGUt PnBhdHRlcm5SZWdleHAgPSBwYXR0ZXJuUmVnZXhwOworCW5vZGUtPmRlZmluZUNsYXVzZSA9IGRl ZmluZUNsYXVzZTsKKwlub2RlLT5kZWZpbmVJbml0aWFsID0gZGVmaW5lSW5pdGlhbDsKIAogCXBs YW4tPnRhcmdldGxpc3QgPSB0bGlzdDsKIAlwbGFuLT5sZWZ0dHJlZSA9IGxlZnR0cmVlOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IDBkNWE2OTJlNWZkLi4zNmNhMTRhZDg4 NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCisrKyBi L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAtOTIzLDYgKzkyMyw5IEBA IHN1YnF1ZXJ5X3BsYW5uZXIoUGxhbm5lckdsb2JhbCAqZ2xvYiwgUXVlcnkgKnBhcnNlLCBQbGFu bmVySW5mbyAqcGFyZW50X3Jvb3QsCiAJCQkJCQkJCQkJCQlFWFBSS0lORF9MSU1JVCk7CiAJCXdj LT5lbmRPZmZzZXQgPSBwcmVwcm9jZXNzX2V4cHJlc3Npb24ocm9vdCwgd2MtPmVuZE9mZnNldCwK IAkJCQkJCQkJCQkJICBFWFBSS0lORF9MSU1JVCk7CisJCXdjLT5kZWZpbmVDbGF1c2UgPSAoTGlz dCAqKSBwcmVwcm9jZXNzX2V4cHJlc3Npb24ocm9vdCwKKwkJCQkJCQkJCQkJCQkJICAoTm9kZSAq KSB3Yy0+ZGVmaW5lQ2xhdXNlLAorCQkJCQkJCQkJCQkJCQkgIEVYUFJLSU5EX1RBUkdFVCk7CiAJ fQogCiAJcGFyc2UtPmxpbWl0T2Zmc2V0ID0gcHJlcHJvY2Vzc19leHByZXNzaW9uKHJvb3QsIHBh cnNlLT5saW1pdE9mZnNldCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L3NldHJlZnMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYwppbmRleCA4 NDZlNDQxODZjMy4uYTIzYjk0NDA5NWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wbGFuL3NldHJlZnMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZz LmMKQEAgLTIxMSw3ICsyMTEsNiBAQCBzdGF0aWMgTGlzdCAqc2V0X3dpbmRvd2FnZ19ydW5jb25k aXRpb25fcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJCSAgIExpc3Qg KnJ1bmNvbmRpdGlvbiwKIAkJCQkJCQkJCQkJCSAgIFBsYW4gKnBsYW4pOwogCi0KIC8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgogICoKICAqCQlTVUJQTEFOIFJFRkVSRU5DRVMKQEAgLTI1NTEsNiArMjU1 MCwzMiBAQCBzZXRfdXBwZXJfcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwgUGxhbiAqcGxh biwgaW50IHJ0b2Zmc2V0KQogCQkJCQkgICBOUk1fRVFVQUwsCiAJCQkJCSAgIE5VTV9FWEVDX1FV QUwocGxhbikpOwogCisJLyoKKwkgKiBNb2RpZmllcyBhbiBleHByZXNzaW9uIHRyZWUgaW4gZWFj aCBERUZJTkUgY2xhdXNlIHNvIHRoYXQgYWxsIFZhcgorCSAqIG5vZGVzJ3MgdmFybm8gcmVmZXJz IHRvIE9VVEVSX1ZBUi4KKwkgKi8KKwlpZiAoSXNBKHBsYW4sIFdpbmRvd0FnZykpCisJeworCQlX aW5kb3dBZ2cgICp3cGxhbiA9IChXaW5kb3dBZ2cgKikgcGxhbjsKKworCQlpZiAod3BsYW4tPmRl ZmluZUNsYXVzZSAhPSBOSUwpCisJCXsKKwkJCWZvcmVhY2gobCwgd3BsYW4tPmRlZmluZUNsYXVz ZSkKKwkJCXsKKwkJCQlUYXJnZXRFbnRyeSAqdGxlID0gKFRhcmdldEVudHJ5ICopIGxmaXJzdChs KTsKKworCQkJCXRsZS0+ZXhwciA9IChFeHByICopCisJCQkJCWZpeF91cHBlcl9leHByKHJvb3Qs CisJCQkJCQkJCSAgIChOb2RlICopIHRsZS0+ZXhwciwKKwkJCQkJCQkJICAgc3VicGxhbl9pdGxp c3QsCisJCQkJCQkJCSAgIE9VVEVSX1ZBUiwKKwkJCQkJCQkJICAgcnRvZmZzZXQsCisJCQkJCQkJ CSAgIE5STV9FUVVBTCwKKwkJCQkJCQkJICAgTlVNX0VYRUNfUVVBTChwbGFuKSk7CisJCQl9CisJ CX0KKwl9CisKIAlwZnJlZShzdWJwbGFuX2l0bGlzdCk7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wcmVwL3ByZXBqb2ludHJlZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3ByZXAvcHJlcGpvaW50cmVlLmMKaW5kZXggMzVlOGQzYzE4M2IuLjdlZjE0ZDBkNjM5IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwam9pbnRyZWUuYworKysg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwam9pbnRyZWUuYwpAQCAtMjUwNiw2ICsy NTA2LDE1IEBAIHBlcmZvcm1fcHVsbHVwX3JlcGxhY2VfdmFycyhQbGFubmVySW5mbyAqcm9vdCwK IAlwYXJzZS0+cmV0dXJuaW5nTGlzdCA9IChMaXN0ICopCiAJCXB1bGx1cF9yZXBsYWNlX3ZhcnMo KE5vZGUgKikgcGFyc2UtPnJldHVybmluZ0xpc3QsIHJ2Y29udGV4dCk7CiAKKwlmb3JlYWNoKGxj LCBwYXJzZS0+d2luZG93Q2xhdXNlKQorCXsKKwkJV2luZG93Q2xhdXNlICp3YyA9IGxmaXJzdF9u b2RlKFdpbmRvd0NsYXVzZSwgbGMpOworCisJCWlmICh3Yy0+ZGVmaW5lQ2xhdXNlICE9IE5JTCkK KwkJCXdjLT5kZWZpbmVDbGF1c2UgPSAoTGlzdCAqKQorCQkJCXB1bGx1cF9yZXBsYWNlX3ZhcnMo KE5vZGUgKikgd2MtPmRlZmluZUNsYXVzZSwgcnZjb250ZXh0KTsKKwl9CisKIAlpZiAocGFyc2Ut Pm9uQ29uZmxpY3QpCiAJewogCQlwYXJzZS0+b25Db25mbGljdC0+b25Db25mbGljdFNldCA9IChM aXN0ICopCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCBiL3NyYy9p bmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCmluZGV4IDI5ZDc3MzJkNmEwLi4yNDIyMDk4ZWNkYiAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKKysrIGIvc3JjL2luY2x1 ZGUvbm9kZXMvcGxhbm5vZGVzLmgKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJsaWIvc3Ry aW5naW5mby5oIgogI2luY2x1ZGUgIm5vZGVzL2JpdG1hcHNldC5oIgogI2luY2x1ZGUgIm5vZGVz L2xvY2tvcHRpb25zLmgiCisjaW5jbHVkZSAibm9kZXMvcGFyc2Vub2Rlcy5oIgogI2luY2x1ZGUg Im5vZGVzL3ByaW1ub2Rlcy5oIgogCiAKQEAgLTEyNjQsNiArMTI2NSwyNCBAQCB0eXBlZGVmIHN0 cnVjdCBXaW5kb3dBZ2cKIAkvKiBudWxscyBzb3J0IGZpcnN0IGZvciBpbl9yYW5nZSB0ZXN0cz8g Ki8KIAlib29sCQlpblJhbmdlTnVsbHNGaXJzdDsKIAorCS8qIFJvdyBQYXR0ZXJuIFJlY29nbml0 aW9uIEFGVEVSIE1BQ0ggU0tJUCBjbGF1c2UgKi8KKwlSUFNraXBUbwlycFNraXBUbzsJCS8qIFJv dyBQYXR0ZXJuIFNraXAgVG8gdHlwZSAqLworCisJLyogUm93IFBhdHRlcm4gUEFUVEVSTiB2YXJp YWJsZSBuYW1lIChsaXN0IG9mIFN0cmluZykgKi8KKwlMaXN0CSAgICpwYXR0ZXJuVmFyaWFibGU7 CisKKwkvKgorCSAqIFJvdyBQYXR0ZXJuIFJQQVRURVJOIHJlZ3VsYXIgZXhwcmVzc2lvbiBxdWFu dGlmaWVyICgnKycgb3IgJycuIGxpc3Qgb2YKKwkgKiBTdHJpbmcpCisJICovCisJTGlzdAkgICAq cGF0dGVyblJlZ2V4cDsKKworCS8qIFJvdyBQYXR0ZXJuIERFRklORSBjbGF1c2UgKGxpc3Qgb2Yg VGFyZ2V0RW50cnkpICovCisJTGlzdAkgICAqZGVmaW5lQ2xhdXNlOworCisJLyogUm93IFBhdHRl cm4gREVGSU5FIHZhcmlhYmxlIGluaXRpYWwgbmFtZXMgKGxpc3Qgb2YgU3RyaW5nKSAqLworCUxp c3QJICAgKmRlZmluZUluaXRpYWw7CisKIAkvKgogCSAqIGZhbHNlIGZvciBhbGwgYXBhcnQgZnJv bSB0aGUgV2luZG93QWdnIHRoYXQncyBjbG9zZXN0IHRvIHRoZSByb290IG9mCiAJICogdGhlIHBs YW4KLS0gCjIuMjUuMQoK ----Next_Part(Sat_Aug_16_17_45_52_2025_123)-- Content-Type: Application/Octet-Stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v32-0005-Row-pattern-recognition-patch-executor.patch" RnJvbSA4ZTJkZDU2ZTFkODVhNzU4ZjBjZDVkYzM4ZWNiYTkzNmMxOGVhMmZiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYXRzdW8gSXNoaWkgPGlzaGlpQHBvc3RncmVzcWwub3JnPgpE YXRlOiBTYXQsIDE2IEF1ZyAyMDI1IDE3OjMzOjMyICswOTAwClN1YmplY3Q6IFtQQVRDSCB2MzIg NS85XSBSb3cgcGF0dGVybiByZWNvZ25pdGlvbiBwYXRjaCAoZXhlY3V0b3IpLgoKLS0tCiBzcmMv YmFja2VuZC9leGVjdXRvci9ub2RlV2luZG93QWdnLmMgfCAxODM1ICsrKysrKysrKysrKysrKysr KysrKysrKystCiBzcmMvYmFja2VuZC91dGlscy9hZHQvd2luZG93ZnVuY3MuYyAgfCAgIDM0ICst CiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgfCAgICA2ICsKIHNyYy9pbmNs dWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAgICB8ICAgNTggKwogNCBmaWxlcyBjaGFuZ2VkLCAx OTIyIGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVXaW5kb3dBZ2cuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVX aW5kb3dBZ2cuYwppbmRleCA5YTFhY2NlMmI1ZC4uMDBkNGM1YzM5MTAgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVXaW5kb3dBZ2cuYworKysgYi9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlV2luZG93QWdnLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJhY2Nlc3Mv aHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9vYmplY3RhY2Nlc3MuaCIKICNpbmNs dWRlICJjYXRhbG9nL3BnX2FnZ3JlZ2F0ZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0 aW9uX2QuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3Byb2MuaCIKICNpbmNsdWRlICJleGVjdXRv ci9leGVjdXRvci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVXaW5kb3dBZ2cuaCIKQEAgLTQ1 LDkgKzQ2LDExIEBACiAjaW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5oIgogI2luY2x1ZGUg InBhcnNlci9wYXJzZV9hZ2cuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfY29lcmNlLmgiCisj aW5jbHVkZSAicmVnZXgvcmVnZXguaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRl ICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2RhdHVtLmgiCisjaW5jbHVkZSAi dXRpbHMvZm1ncm9pZHMuaCIKICNpbmNsdWRlICJ1dGlscy9leHBhbmRlZGRhdHVtLmgiCiAjaW5j bHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKQEAg LTE1OSw2ICsxNjIsMzMgQEAgdHlwZWRlZiBzdHJ1Y3QgV2luZG93U3RhdGVQZXJBZ2dEYXRhCiAJ Ym9vbAkJcmVzdGFydDsJCS8qIG5lZWQgdG8gcmVzdGFydCB0aGlzIGFnZyBpbiB0aGlzIGN5Y2xl PyAqLwogfSBXaW5kb3dTdGF0ZVBlckFnZ0RhdGE7CiAKKy8qCisgKiBTZXQgb2YgU3RyaW5nSW5m by4gVXNlZCBpbiBSUFIuCisgKi8KKyNkZWZpbmUJU1RSU0VUX0ZST1pFTgkJKDEgPDwgMCkJLyog c3RyaW5nIGlzIGZyb3plbiAqLworI2RlZmluZQlTVFJTRVRfRElTQ0FSREVECSgxIDw8IDEpCS8q IHN0cmluZyBpcyBzY2hlZHVsZWQgdG8gYmUgZGlzY2FyZGVkICovCisjZGVmaW5lCVNUUlNFVF9N QVRDSEVECQkoMSA8PCAyKQkvKiBzdHJpbmcgaXMgY29uZmlybWVkIHRvIGJlIG1hdGNoZWQKKwkJ CQkJCQkJCQkgKiB3aXRoIHBhdHRlcm4gKi8KKwordHlwZWRlZiBzdHJ1Y3QgU3RyaW5nU2V0Cit7 CisJU3RyaW5nSW5mbyAqc3RyX3NldDsKKwlTaXplCQlzZXRfc2l6ZTsJCS8qIGN1cnJlbnQgYXJy YXkgYWxsb2NhdGlvbiBzaXplIGluIG51bWJlciBvZgorCQkJCQkJCQkgKiBpdGVtcyAqLworCWlu dAkJCXNldF9pbmRleDsJCS8qIGN1cnJlbnQgdXNlZCBzaXplICovCisJaW50CQkgICAqaW5mbzsJ CQkvKiBhbiBhcnJheSBvZiBpbmZvcm1hdGlvbiBiaXQgcGVyIFN0cmluZ0luZm8uCisJCQkJCQkJ CSAqIHNlZSBhYm92ZSAqLworfSBTdHJpbmdTZXQ7CisKKy8qCisgKiBTdHJ1Y3R1cmUgdXNlZCBi eSBjaGVja19ycHJfbmF2aWdhdGlvbigpIGFuZCBycHJfbmF2aWdhdGlvbl93YWxrZXIoKS4KKyAq LwordHlwZWRlZiBzdHJ1Y3QgTmF2aWdhdGlvbkluZm8KK3sKKwlib29sCQlpc19wcmV2OwkJLyog dHJ1ZSBpZiBQUkVWICovCisJaW50CQkJbnVtX3ZhcnM7CQkvKiBudW1iZXIgb2YgdmFyIG5vZGVz ICovCit9IE5hdmlnYXRpb25JbmZvOworCiBzdGF0aWMgdm9pZCBpbml0aWFsaXplX3dpbmRvd2Fn Z3JlZ2F0ZShXaW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGUsCiAJCQkJCQkJCQkgICBXaW5kb3dTdGF0 ZVBlckZ1bmMgcGVyZnVuY3N0YXRlLAogCQkJCQkJCQkJICAgV2luZG93U3RhdGVQZXJBZ2cgcGVy YWdnc3RhdGUpOwpAQCAtMTg0LDYgKzIxNCw3IEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VfcGFydGl0 aW9uKFdpbmRvd0FnZ1N0YXRlICp3aW5zdGF0ZSk7CiAKIHN0YXRpYyBpbnQJcm93X2lzX2luX2Zy YW1lKFdpbmRvd0FnZ1N0YXRlICp3aW5zdGF0ZSwgaW50NjQgcG9zLAogCQkJCQkJCVR1cGxlVGFi bGVTbG90ICpzbG90KTsKKwogc3RhdGljIHZvaWQgdXBkYXRlX2ZyYW1laGVhZHBvcyhXaW5kb3dB Z2dTdGF0ZSAqd2luc3RhdGUpOwogc3RhdGljIHZvaWQgdXBkYXRlX2ZyYW1ldGFpbHBvcyhXaW5k b3dBZ2dTdGF0ZSAqd2luc3RhdGUpOwogc3RhdGljIHZvaWQgdXBkYXRlX2dyb3VwdGFpbHBvcyhX aW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGUpOwpAQCAtMTk1LDkgKzIyNiw2MCBAQCBzdGF0aWMgRGF0 dW0gR2V0QWdnSW5pdFZhbChEYXR1bSB0ZXh0SW5pdFZhbCwgT2lkIHRyYW5zdHlwZSk7CiAKIHN0 YXRpYyBib29sIGFyZV9wZWVycyhXaW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGUsIFR1cGxlVGFibGVT bG90ICpzbG90MSwKIAkJCQkJICBUdXBsZVRhYmxlU2xvdCAqc2xvdDIpOworCitzdGF0aWMgaW50 CVdpbkdldFNsb3RJbkZyYW1lKFdpbmRvd09iamVjdCB3aW5vYmosIFR1cGxlVGFibGVTbG90ICpz bG90LAorCQkJCQkJCSAgaW50IHJlbHBvcywgaW50IHNlZWt0eXBlLCBib29sIHNldF9tYXJrLAor CQkJCQkJCSAgYm9vbCAqaXNudWxsLCBib29sICppc291dCk7CiBzdGF0aWMgYm9vbCB3aW5kb3df Z2V0dHVwbGVzbG90KFdpbmRvd09iamVjdCB3aW5vYmosIGludDY0IHBvcywKIAkJCQkJCQkJVHVw bGVUYWJsZVNsb3QgKnNsb3QpOwogCitzdGF0aWMgdm9pZCBhdHRub19tYXAoTm9kZSAqbm9kZSk7 CitzdGF0aWMgYm9vbCBhdHRub19tYXBfd2Fsa2VyKE5vZGUgKm5vZGUsIHZvaWQgKmNvbnRleHQp Oworc3RhdGljIGludAlyb3dfaXNfaW5fcmVkdWNlZF9mcmFtZShXaW5kb3dPYmplY3Qgd2lub2Jq LCBpbnQ2NCBwb3MpOworc3RhdGljIGJvb2wgcnByX2lzX2RlZmluZWQoV2luZG93QWdnU3RhdGUg KndpbnN0YXRlKTsKKworc3RhdGljIHZvaWQgY3JlYXRlX3JlZHVjZWRfZnJhbWVfbWFwKFdpbmRv d0FnZ1N0YXRlICp3aW5zdGF0ZSk7CitzdGF0aWMgaW50CWdldF9yZWR1Y2VkX2ZyYW1lX21hcChX aW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGUsIGludDY0IHBvcyk7CitzdGF0aWMgdm9pZCByZWdpc3Rl cl9yZWR1Y2VkX2ZyYW1lX21hcChXaW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGUsIGludDY0IHBvcywK KwkJCQkJCQkJCSAgIGludCB2YWwpOworc3RhdGljIHZvaWQgY2xlYXJfcmVkdWNlZF9mcmFtZV9t YXAoV2luZG93QWdnU3RhdGUgKndpbnN0YXRlKTsKK3N0YXRpYyB2b2lkIHVwZGF0ZV9yZWR1Y2Vk X2ZyYW1lKFdpbmRvd09iamVjdCB3aW5vYmosIGludDY0IHBvcyk7CisKK3N0YXRpYyBpbnQ2NCBl dmFsdWF0ZV9wYXR0ZXJuKFdpbmRvd09iamVjdCB3aW5vYmosIGludDY0IGN1cnJlbnRfcG9zLAor CQkJCQkJCSAgY2hhciAqdm5hbWUsIFN0cmluZ0luZm8gZW5jb2RlZF9zdHIsIGJvb2wgKnJlc3Vs dCk7CisKK3N0YXRpYyBib29sIGdldF9zbG90cyhXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQ2NCBj dXJyZW50X3Bvcyk7CisKK3N0YXRpYyBpbnQJc2VhcmNoX3N0cl9zZXQoV2luZG93QWdnU3RhdGUg KndpbnN0YXRlLAorCQkJCQkJICAgU3RyaW5nU2V0ICppbnB1dF9zdHJfc2V0KTsKK3N0YXRpYyBT dHJpbmdTZXQgKmdlbmVyYXRlX3BhdHRlcm5zKFN0cmluZ1NldCAqaW5wdXRfc3RyX3NldCwKKwkJ CQkJCQkJCWNoYXIgKnBhdHRlcm4sIFZhcmlhYmxlUG9zICp2YXJpYWJsZV9wb3MsCisJCQkJCQkJ CQljaGFyIHRhaWxfcGF0dGVybl9pbml0aWFsKTsKK3N0YXRpYyBpbnQJYWRkX3BhdHRlcm4oU3Ry aW5nSW5mbyBvbGQsIGludCBvbGRfaW5mbywgU3RyaW5nU2V0ICpuZXdfc3RyX3NldCwKKwkJCQkJ CWNoYXIgYywgY2hhciAqcGF0dGVybiwgY2hhciB0YWlsX3BhdHRlcm5faW5pdGlhbCwKKwkJCQkJ CWludCByZXN1bHRsZW4pOworc3RhdGljIGludAlmcmVlemVfcGF0dGVybihTdHJpbmdJbmZvIG9s ZCwgaW50IG9sZF9pbmZvLAorCQkJCQkJICAgU3RyaW5nU2V0ICpuZXdfc3RyX3NldCwKKwkJCQkJ CSAgIGNoYXIgKnBhdHRlcm4sIGludCByZXN1bHRsZW4pOworc3RhdGljIGNoYXIgcGF0dGVybl9p bml0aWFsKFdpbmRvd0FnZ1N0YXRlICp3aW5zdGF0ZSwgY2hhciAqdm5hbWUpOworc3RhdGljIGlu dAlkb19wYXR0ZXJuX21hdGNoKGNoYXIgKnBhdHRlcm4sIGNoYXIgKmVuY29kZWRfc3RyLCBpbnQg bGVuKTsKKworc3RhdGljIFN0cmluZ1NldCAqc3RyaW5nX3NldF9pbml0KHZvaWQpOworc3RhdGlj IHZvaWQgc3RyaW5nX3NldF9hZGQoU3RyaW5nU2V0ICpzdHJpbmdfc2V0LCBTdHJpbmdJbmZvIHN0 ciwgaW50IGluZm8pOworc3RhdGljIFN0cmluZ0luZm8gc3RyaW5nX3NldF9nZXQoU3RyaW5nU2V0 ICpzdHJpbmdfc2V0LCBpbnQgaW5kZXgsIGludCAqZmxhZyk7CitzdGF0aWMgaW50CXN0cmluZ19z ZXRfZ2V0X3NpemUoU3RyaW5nU2V0ICpzdHJpbmdfc2V0KTsKK3N0YXRpYyB2b2lkIHN0cmluZ19z ZXRfZGlzY2FyZChTdHJpbmdTZXQgKnN0cmluZ19zZXQpOworc3RhdGljIFZhcmlhYmxlUG9zICp2 YXJpYWJsZV9wb3NfaW5pdCh2b2lkKTsKK3N0YXRpYyB2b2lkIHZhcmlhYmxlX3Bvc19yZWdpc3Rl cihWYXJpYWJsZVBvcyAqdmFyaWFibGVfcG9zLCBjaGFyIGluaXRpYWwsCisJCQkJCQkJCSAgaW50 IHBvcyk7CitzdGF0aWMgYm9vbCB2YXJpYWJsZV9wb3NfY29tcGFyZShWYXJpYWJsZVBvcyAqdmFy aWFibGVfcG9zLAorCQkJCQkJCQkgY2hhciBpbml0aWFsMSwgY2hhciBpbml0aWFsMik7CitzdGF0 aWMgaW50CXZhcmlhYmxlX3Bvc19mZXRjaChWYXJpYWJsZVBvcyAqdmFyaWFibGVfcG9zLCBjaGFy IGluaXRpYWwsCisJCQkJCQkJICAgaW50IGluZGV4KTsKK3N0YXRpYyBWYXJpYWJsZVBvcyAqdmFy aWFibGVfcG9zX2J1aWxkKFdpbmRvd0FnZ1N0YXRlICp3aW5zdGF0ZSk7CisKK3N0YXRpYyB2b2lk IGNoZWNrX3Jwcl9uYXZpZ2F0aW9uKE5vZGUgKm5vZGUsIGJvb2wgaXNfcHJldik7CitzdGF0aWMg Ym9vbCBycHJfbmF2aWdhdGlvbl93YWxrZXIoTm9kZSAqbm9kZSwgdm9pZCAqY29udGV4dCk7CiAK IC8qCiAgKiBpbml0aWFsaXplX3dpbmRvd2FnZ3JlZ2F0ZQpAQCAtNzc0LDEwICs4NTYsMTIgQEAg ZXZhbF93aW5kb3dhZ2dyZWdhdGVzKFdpbmRvd0FnZ1N0YXRlICp3aW5zdGF0ZSkKIAkgKgkgICB0 cmFuc2l0aW9uIGZ1bmN0aW9uLCBvcgogCSAqCSAtIHdlIGhhdmUgYW4gRVhDTFVTSU9OIGNsYXVz ZSwgb3IKIAkgKgkgLSBpZiB0aGUgbmV3IGZyYW1lIGRvZXNuJ3Qgb3ZlcmxhcCB0aGUgb2xkIG9u ZQorCSAqICAgLSBpZiBSUFIgaXMgZW5hYmxlZAogCSAqCiAJICogTm90ZSB0aGF0IHdlIGRvbid0 IHN0cmljdGx5IG5lZWQgdG8gcmVzdGFydCBpbiB0aGUgbGFzdCBjYXNlLCBidXQgaWYKIAkgKiB3 ZSdyZSBnb2luZyB0byByZW1vdmUgYWxsIHJvd3MgZnJvbSB0aGUgYWdncmVnYXRpb24gYW55d2F5 LCBhIHJlc3RhcnQKIAkgKiBzdXJlbHkgaXMgZmFzdGVyLgorCSAqICAgICB3ZSByZXN0YXJ0IGFn Z3JlZ2F0aW9uIHRvby4KIAkgKi0tLS0tLS0tLS0KIAkgKi8KIAludW1hZ2dzX3Jlc3RhcnQgPSAw OwpAQCAtNzg4LDcgKzg3Miw4IEBAIGV2YWxfd2luZG93YWdncmVnYXRlcyhXaW5kb3dBZ2dTdGF0 ZSAqd2luc3RhdGUpCiAJCQkod2luc3RhdGUtPmFnZ3JlZ2F0ZWRiYXNlICE9IHdpbnN0YXRlLT5m cmFtZWhlYWRwb3MgJiYKIAkJCSAhT2lkSXNWYWxpZChwZXJhZ2dzdGF0ZS0+aW52dHJhbnNmbl9v aWQpKSB8fAogCQkJKHdpbnN0YXRlLT5mcmFtZU9wdGlvbnMgJiBGUkFNRU9QVElPTl9FWENMVVNJ T04pIHx8Ci0JCQl3aW5zdGF0ZS0+YWdncmVnYXRlZHVwdG8gPD0gd2luc3RhdGUtPmZyYW1laGVh ZHBvcykKKwkJCXdpbnN0YXRlLT5hZ2dyZWdhdGVkdXB0byA8PSB3aW5zdGF0ZS0+ZnJhbWVoZWFk cG9zIHx8CisJCQlycHJfaXNfZGVmaW5lZCh3aW5zdGF0ZSkpCiAJCXsKIAkJCXBlcmFnZ3N0YXRl LT5yZXN0YXJ0ID0gdHJ1ZTsKIAkJCW51bWFnZ3NfcmVzdGFydCsrOwpAQCAtODYyLDcgKzk0Nywy MiBAQCBldmFsX3dpbmRvd2FnZ3JlZ2F0ZXMoV2luZG93QWdnU3RhdGUgKndpbnN0YXRlKQogCSAq IGhlYWQsIHNvIHRoYXQgdHVwbGVzdG9yZSBjYW4gZGlzY2FyZCB1bm5lY2Vzc2FyeSByb3dzLgog CSAqLwogCWlmIChhZ2dfd2lub2JqLT5tYXJrcHRyID49IDApCi0JCVdpblNldE1hcmtQb3NpdGlv bihhZ2dfd2lub2JqLCB3aW5zdGF0ZS0+ZnJhbWVoZWFkcG9zKTsKKwl7CisJCWludDY0CQltYXJr cG9zID0gd2luc3RhdGUtPmZyYW1laGVhZHBvczsKKworCQlpZiAocnByX2lzX2RlZmluZWQod2lu c3RhdGUpKQorCQl7CisJCQkvKgorCQkJICogSWYgUlBSIGlzIHVzZWQsIGl0IGlzIHBvc3NpYmxl IFBSRVYgd2FudHMgdG8gbG9vayBhdCB0aGUKKwkJCSAqIHByZXZpb3VzIHJvdy4gIFNvIHRoZSBt YXJrIHBvcyBzaG91bGQgYmUgZnJhbWVoZWFkcG9zIC0gMQorCQkJICogdW5sZXNzIGl0IGlzIGJl bG93IDAuCisJCQkgKi8KKwkJCW1hcmtwb3MgLT0gMTsKKwkJCWlmIChtYXJrcG9zIDwgMCkKKwkJ CQltYXJrcG9zID0gMDsKKwkJfQorCQlXaW5TZXRNYXJrUG9zaXRpb24oYWdnX3dpbm9iaiwgbWFy a3Bvcyk7CisJfQogCiAJLyoKIAkgKiBOb3cgcmVzdGFydCB0aGUgYWdncmVnYXRlcyB0aGF0IHJl cXVpcmUgaXQuCkBAIC05MTcsNiArMTAxNywxNCBAQCBldmFsX3dpbmRvd2FnZ3JlZ2F0ZXMoV2lu ZG93QWdnU3RhdGUgKndpbnN0YXRlKQogCXsKIAkJd2luc3RhdGUtPmFnZ3JlZ2F0ZWR1cHRvID0g d2luc3RhdGUtPmZyYW1laGVhZHBvczsKIAkJRXhlY0NsZWFyVHVwbGUoYWdnX3Jvd19zbG90KTsK KworCQkvKgorCQkgKiBJZiBSUFIgaXMgZGVmaW5lZCwgd2UgZG8gbm90IHVzZSBhZ2dyZWdhdGVk dXB0b19ub25yZXN0YXJ0ZWQuICBUbworCQkgKiBhdm9pZCBhc3NlcnRpb24gZmFpbHVyZSBiZWxv dywgd2UgcmVzZXQgYWdncmVnYXRlZHVwdG9fbm9ucmVzdGFydGVkCisJCSAqIHRvIGZyYW1laGVh ZHBvcy4KKwkJICovCisJCWlmIChycHJfaXNfZGVmaW5lZCh3aW5zdGF0ZSkpCisJCQlhZ2dyZWdh dGVkdXB0b19ub25yZXN0YXJ0ZWQgPSB3aW5zdGF0ZS0+ZnJhbWVoZWFkcG9zOwogCX0KIAogCS8q CkBAIC05MzAsNiArMTAzOCwxMiBAQCBldmFsX3dpbmRvd2FnZ3JlZ2F0ZXMoV2luZG93QWdnU3Rh dGUgKndpbnN0YXRlKQogCXsKIAkJaW50CQkJcmV0OwogCisjaWZkZWYgUlBSX0RFQlVHCisJCWVs b2coREVCVUcxLCAiPT09PT0gbG9vcCBpbiBmcmFtZSBzdGFydHM6IGFnZ3JlZ2F0ZWR1cHRvOiAi IElOVDY0X0ZPUk1BVCAiIGFnZ3JlZ2F0ZWRiYXNlOiAiIElOVDY0X0ZPUk1BVCwKKwkJCSB3aW5z dGF0ZS0+YWdncmVnYXRlZHVwdG8sCisJCQkgd2luc3RhdGUtPmFnZ3JlZ2F0ZWRiYXNlKTsKKyNl bmRpZgorCiAJCS8qIEZldGNoIG5leHQgcm93IGlmIHdlIGRpZG4ndCBhbHJlYWR5ICovCiAJCWlm IChUdXBJc051bGwoYWdnX3Jvd19zbG90KSkKIAkJewpAQCAtOTQ1LDkgKzEwNTksNTMgQEAgZXZh bF93aW5kb3dhZ2dyZWdhdGVzKFdpbmRvd0FnZ1N0YXRlICp3aW5zdGF0ZSkKIAkJcmV0ID0gcm93 X2lzX2luX2ZyYW1lKHdpbnN0YXRlLCB3aW5zdGF0ZS0+YWdncmVnYXRlZHVwdG8sIGFnZ19yb3df c2xvdCk7CiAJCWlmIChyZXQgPCAwKQogCQkJYnJlYWs7CisKIAkJaWYgKHJldCA9PSAwKQogCQkJ Z290byBuZXh0X3R1cGxlOwogCisJCWlmIChycHJfaXNfZGVmaW5lZCh3aW5zdGF0ZSkpCisJCXsK KyNpZmRlZiBSUFJfREVCVUcKKwkJCWVsb2coREVCVUcxLCAicmVkdWNlZF9mcmFtZV9tYXA6ICVk IGFnZ3JlZ2F0ZWR1cHRvOiAiIElOVDY0X0ZPUk1BVCAiIGFnZ3JlZ2F0ZWRiYXNlOiAiIElOVDY0 X0ZPUk1BVCwKKwkJCQkgZ2V0X3JlZHVjZWRfZnJhbWVfbWFwKHdpbnN0YXRlLAorCQkJCQkJCQkJ ICAgd2luc3RhdGUtPmFnZ3JlZ2F0ZWR1cHRvKSwKKwkJCQkgd2luc3RhdGUtPmFnZ3JlZ2F0ZWR1 cHRvLAorCQkJCSB3aW5zdGF0ZS0+YWdncmVnYXRlZGJhc2UpOworI2VuZGlmCisKKwkJCS8qCisJ CQkgKiBJZiB0aGUgcm93IHN0YXR1cyBhdCBjdXJyZW50cG9zIGlzIGFscmVhZHkgZGVjaWRlZCBh bmQgY3VycmVudAorCQkJICogcm93IHN0YXR1cyBpcyBub3QgZGVjaWRlZCB5ZXQsIGl0IG1lYW5z IHdlIHBhc3NlZCB0aGUgbGFzdAorCQkJICogcmVkdWNlZCBmcmFtZS4gVGltZSB0byBicmVhayB0 aGUgbG9vcC4KKwkJCSAqLworCQkJaWYgKGdldF9yZWR1Y2VkX2ZyYW1lX21hcCh3aW5zdGF0ZSwg d2luc3RhdGUtPmN1cnJlbnRwb3MpCisJCQkJIT0gUkZfTk9UX0RFVEVSTUlORUQgJiYKKwkJCQln ZXRfcmVkdWNlZF9mcmFtZV9tYXAod2luc3RhdGUsIHdpbnN0YXRlLT5hZ2dyZWdhdGVkdXB0bykK KwkJCQk9PSBSRl9OT1RfREVURVJNSU5FRCkKKwkJCQlicmVhazsKKworCQkJLyoKKwkJCSAqIE90 aGVyd2lzZSB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgcmVkdWNlZCBmcmFtZS4KKwkJCSAqLwor CQkJcmV0ID0gcm93X2lzX2luX3JlZHVjZWRfZnJhbWUod2luc3RhdGUtPmFnZ193aW5vYmosCisJ CQkJCQkJCQkJICB3aW5zdGF0ZS0+YWdncmVnYXRlZHVwdG8pOworCQkJaWYgKHJldCA9PSAtMSkJ CS8qIHVubWF0Y2hlZCByb3cgKi8KKwkJCQlicmVhazsKKworCQkJLyoKKwkJCSAqIENoZWNrIGlm IGN1cnJlbnQgcm93IG5lZWRzIHRvIGJlIHNraXBwZWQgZHVlIHRvIG5vIG1hdGNoLgorCQkJICov CisJCQlpZiAoZ2V0X3JlZHVjZWRfZnJhbWVfbWFwKHdpbnN0YXRlLAorCQkJCQkJCQkJICB3aW5z dGF0ZS0+YWdncmVnYXRlZHVwdG8pID09IFJGX1NLSVBQRUQgJiYKKwkJCQl3aW5zdGF0ZS0+YWdn cmVnYXRlZHVwdG8gPT0gd2luc3RhdGUtPmFnZ3JlZ2F0ZWRiYXNlKQorCQkJeworI2lmZGVmIFJQ Ul9ERUJVRworCQkJCWVsb2coREVCVUcxLCAic2tpcCBjdXJyZW50IHJvdyBmb3IgYWdncmVnYXRp b24iKTsKKyNlbmRpZgorCQkJCWJyZWFrOworCQkJfQorCQl9CisKIAkJLyogU2V0IHR1cGxlIGNv bnRleHQgZm9yIGV2YWx1YXRpb24gb2YgYWdncmVnYXRlIGFyZ3VtZW50cyAqLwogCQl3aW5zdGF0 ZS0+dG1wY29udGV4dC0+ZWN4dF9vdXRlcnR1cGxlID0gYWdnX3Jvd19zbG90OwogCkBAIC05NzYs NiArMTEzNCw3IEBAIG5leHRfdHVwbGU6CiAJCUV4ZWNDbGVhclR1cGxlKGFnZ19yb3dfc2xvdCk7 CiAJfQogCisKIAkvKiBUaGUgZnJhbWUncyBlbmQgaXMgbm90IHN1cHBvc2VkIHRvIG1vdmUgYmFj a3dhcmRzLCBldmVyICovCiAJQXNzZXJ0KGFnZ3JlZ2F0ZWR1cHRvX25vbnJlc3RhcnRlZCA8PSB3 aW5zdGF0ZS0+YWdncmVnYXRlZHVwdG8pOwogCkBAIC0xMTk5LDYgKzEzNTgsNyBAQCBiZWdpbl9w YXJ0aXRpb24oV2luZG93QWdnU3RhdGUgKndpbnN0YXRlKQogCXdpbnN0YXRlLT5mcmFtZWhlYWRf dmFsaWQgPSBmYWxzZTsKIAl3aW5zdGF0ZS0+ZnJhbWV0YWlsX3ZhbGlkID0gZmFsc2U7CiAJd2lu c3RhdGUtPmdyb3VwdGFpbF92YWxpZCA9IGZhbHNlOworCWNyZWF0ZV9yZWR1Y2VkX2ZyYW1lX21h cCh3aW5zdGF0ZSk7CiAJd2luc3RhdGUtPnNwb29sZWRfcm93cyA9IDA7CiAJd2luc3RhdGUtPmN1 cnJlbnRwb3MgPSAwOwogCXdpbnN0YXRlLT5mcmFtZWhlYWRwb3MgPSAwOwpAQCAtMjE3MCw2ICsy MzMwLDExIEBAIEV4ZWNXaW5kb3dBZ2coUGxhblN0YXRlICpwc3RhdGUpCiAKIAlDSEVDS19GT1Jf SU5URVJSVVBUUygpOwogCisjaWZkZWYgUlBSX0RFQlVHCisJZWxvZyhERUJVRzEsICJFeGVjV2lu ZG93QWdnIGNhbGxlZC4gcG9zOiAiIElOVDY0X0ZPUk1BVCwKKwkJIHdpbnN0YXRlLT5jdXJyZW50 cG9zKTsKKyNlbmRpZgorCiAJaWYgKHdpbnN0YXRlLT5zdGF0dXMgPT0gV0lORE9XQUdHX0RPTkUp CiAJCXJldHVybiBOVUxMOwogCkBAIC0yMjc4LDYgKzI0NDMsMTcgQEAgRXhlY1dpbmRvd0FnZyhQ bGFuU3RhdGUgKnBzdGF0ZSkKIAkJLyogZG9uJ3QgZXZhbHVhdGUgdGhlIHdpbmRvdyBmdW5jdGlv bnMgd2hlbiB3ZSdyZSBpbiBwYXNzLXRocm91Z2ggbW9kZSAqLwogCQlpZiAod2luc3RhdGUtPnN0 YXR1cyA9PSBXSU5ET1dBR0dfUlVOKQogCQl7CisJCQkvKgorCQkJICogSWYgUlBSIGlzIGRlZmlu ZWQgYW5kIHNraXAgbW9kZSBpcyBuZXh0IHJvdywgd2UgbmVlZCB0byBjbGVhcgorCQkJICogZXhp c3RpbmcgcmVkdWNlZCBmcmFtZSBpbmZvIHNvIHRoYXQgd2UgbmV3bHkgY2FsY3VsYXRlIHRoZSBp bmZvCisJCQkgKiBzdGFydGluZyBmcm9tIGN1cnJlbnQgcm93LgorCQkJICovCisJCQlpZiAocnBy X2lzX2RlZmluZWQod2luc3RhdGUpKQorCQkJeworCQkJCWlmICh3aW5zdGF0ZS0+cnBTa2lwVG8g PT0gU1RfTkVYVF9ST1cpCisJCQkJCWNsZWFyX3JlZHVjZWRfZnJhbWVfbWFwKHdpbnN0YXRlKTsK KwkJCX0KKwogCQkJLyoKIAkJCSAqIEV2YWx1YXRlIHRydWUgd2luZG93IGZ1bmN0aW9ucwogCQkJ ICovCkBAIC0yNDQ0LDYgKzI2MjAsOSBAQCBFeGVjSW5pdFdpbmRvd0FnZyhXaW5kb3dBZ2cgKm5v ZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCVR1cGxlRGVzYwlzY2FuRGVzYzsKIAlM aXN0Q2VsbCAgICpsOwogCisJVGFyZ2V0RW50cnkgKnRlOworCUV4cHIJICAgKmV4cHI7CisKIAkv KiBjaGVjayBmb3IgdW5zdXBwb3J0ZWQgZmxhZ3MgKi8KIAlBc3NlcnQoIShlZmxhZ3MgJiAoRVhF Q19GTEFHX0JBQ0tXQVJEIHwgRVhFQ19GTEFHX01BUkspKSk7CiAKQEAgLTI1NDIsNiArMjcyMSwx NiBAQCBFeGVjSW5pdFdpbmRvd0FnZyhXaW5kb3dBZ2cgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBp bnQgZWZsYWdzKQogCXdpbnN0YXRlLT50ZW1wX3Nsb3RfMiA9IEV4ZWNJbml0RXh0cmFUdXBsZVNs b3QoZXN0YXRlLCBzY2FuRGVzYywKIAkJCQkJCQkJCQkJCSAgICZUVFNPcHNNaW5pbWFsVHVwbGUp OwogCisJd2luc3RhdGUtPnByZXZfc2xvdCA9IEV4ZWNJbml0RXh0cmFUdXBsZVNsb3QoZXN0YXRl LCBzY2FuRGVzYywKKwkJCQkJCQkJCQkJCSAmVFRTT3BzTWluaW1hbFR1cGxlKTsKKworCXdpbnN0 YXRlLT5uZXh0X3Nsb3QgPSBFeGVjSW5pdEV4dHJhVHVwbGVTbG90KGVzdGF0ZSwgc2NhbkRlc2Ms CisJCQkJCQkJCQkJCQkgJlRUU09wc01pbmltYWxUdXBsZSk7CisKKwl3aW5zdGF0ZS0+bnVsbF9z bG90ID0gRXhlY0luaXRFeHRyYVR1cGxlU2xvdChlc3RhdGUsIHNjYW5EZXNjLAorCQkJCQkJCQkJ CQkJICZUVFNPcHNNaW5pbWFsVHVwbGUpOworCXdpbnN0YXRlLT5udWxsX3Nsb3QgPSBFeGVjU3Rv cmVBbGxOdWxsVHVwbGUod2luc3RhdGUtPm51bGxfc2xvdCk7CisKIAkvKgogCSAqIGNyZWF0ZSBm cmFtZSBoZWFkIGFuZCB0YWlsIHNsb3RzIG9ubHkgaWYgbmVlZGVkIChtdXN0IGNyZWF0ZSBzbG90 cyBpbgogCSAqIGV4YWN0bHkgdGhlIHNhbWUgY2FzZXMgdGhhdCB1cGRhdGVfZnJhbWVoZWFkcG9z IGFuZCB1cGRhdGVfZnJhbWV0YWlscG9zCkBAIC0yNzIzLDYgKzI5MTIsNDkgQEAgRXhlY0luaXRX aW5kb3dBZ2coV2luZG93QWdnICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAl3 aW5zdGF0ZS0+aW5SYW5nZUFzYyA9IG5vZGUtPmluUmFuZ2VBc2M7CiAJd2luc3RhdGUtPmluUmFu Z2VOdWxsc0ZpcnN0ID0gbm9kZS0+aW5SYW5nZU51bGxzRmlyc3Q7CiAKKwkvKiBTZXQgdXAgU0tJ UCBUTyB0eXBlICovCisJd2luc3RhdGUtPnJwU2tpcFRvID0gbm9kZS0+cnBTa2lwVG87CisJLyog U2V0IHVwIHJvdyBwYXR0ZXJuIHJlY29nbml0aW9uIFBBVFRFUk4gY2xhdXNlICovCisJd2luc3Rh dGUtPnBhdHRlcm5WYXJpYWJsZUxpc3QgPSBub2RlLT5wYXR0ZXJuVmFyaWFibGU7CisJd2luc3Rh dGUtPnBhdHRlcm5SZWdleHBMaXN0ID0gbm9kZS0+cGF0dGVyblJlZ2V4cDsKKworCS8qIFNldCB1 cCByb3cgcGF0dGVybiByZWNvZ25pdGlvbiBERUZJTkUgY2xhdXNlICovCisJd2luc3RhdGUtPmRl ZmluZUluaXRpYWwgPSBub2RlLT5kZWZpbmVJbml0aWFsOworCXdpbnN0YXRlLT5kZWZpbmVWYXJp YWJsZUxpc3QgPSBOSUw7CisJd2luc3RhdGUtPmRlZmluZUNsYXVzZUxpc3QgPSBOSUw7CisJaWYg KG5vZGUtPmRlZmluZUNsYXVzZSAhPSBOSUwpCisJeworCQkvKgorCQkgKiBUd2VhayBhcmcgdmFy IG9mIFBSRVYvTkVYVCBzbyB0aGF0IGl0IHJlZmVycyB0byBzY2FuL2lubmVyIHNsb3QuCisJCSAq LworCQlmb3JlYWNoKGwsIG5vZGUtPmRlZmluZUNsYXVzZSkKKwkJeworCQkJY2hhcgkgICAqbmFt ZTsKKwkJCUV4cHJTdGF0ZSAgKmV4cHM7CisKKwkJCXRlID0gbGZpcnN0KGwpOworCQkJbmFtZSA9 IHRlLT5yZXNuYW1lOworCQkJZXhwciA9IHRlLT5leHByOworCisjaWZkZWYgUlBSX0RFQlVHCisJ CQllbG9nKERFQlVHMSwgImRlZmluZVZhcmlhYmxlIG5hbWU6ICVzIiwgbmFtZSk7CisjZW5kaWYK KwkJCXdpbnN0YXRlLT5kZWZpbmVWYXJpYWJsZUxpc3QgPQorCQkJCWxhcHBlbmQod2luc3RhdGUt PmRlZmluZVZhcmlhYmxlTGlzdCwKKwkJCQkJCW1ha2VTdHJpbmcocHN0cmR1cChuYW1lKSkpOwor CQkJYXR0bm9fbWFwKChOb2RlICopIGV4cHIpOworCQkJZXhwcyA9IEV4ZWNJbml0RXhwcihleHBy LCAoUGxhblN0YXRlICopIHdpbnN0YXRlKTsKKwkJCXdpbnN0YXRlLT5kZWZpbmVDbGF1c2VMaXN0 ID0KKwkJCQlsYXBwZW5kKHdpbnN0YXRlLT5kZWZpbmVDbGF1c2VMaXN0LCBleHBzKTsKKwkJfQor CX0KKworCS8qCisJICogQnVpbGQgdmFyaWFibGVfcG9zCisJICovCisJaWYgKHdpbnN0YXRlLT5k ZWZpbmVJbml0aWFsKQorCQl3aW5zdGF0ZS0+dmFyaWFibGVfcG9zID0gdmFyaWFibGVfcG9zX2J1 aWxkKHdpbnN0YXRlKTsKKwogCXdpbnN0YXRlLT5hbGxfZmlyc3QgPSB0cnVlOwogCXdpbnN0YXRl LT5wYXJ0aXRpb25fc3Bvb2xlZCA9IGZhbHNlOwogCXdpbnN0YXRlLT5tb3JlX3BhcnRpdGlvbnMg PSBmYWxzZTsKQEAgLTI3MzEsNiArMjk2MywxMTEgQEAgRXhlY0luaXRXaW5kb3dBZ2coV2luZG93 QWdnICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAlyZXR1cm4gd2luc3RhdGU7 CiB9CiAKKy8qCisgKiBSZXdyaXRlIHZhcm5vIG9mIFZhciBub2RlcyB0aGF0IGFyZSB0aGUgYXJn dW1lbnQgb2YgUFJFVi9ORVQgc28gdGhhdCB0aGV5CisgKiBzZWUgc2NhbiB0dXBsZSAoUFJFVikg b3IgaW5uZXIgdHVwbGUgKE5FWFQpLiAgQWxzbyB3ZSBjaGVjayB0aGUgYXJndW1lbnRzCisgKiBv ZiBQUkVWL05FWFQgaW5jbHVkZSBhdCBsZWFzdCAxIGNvbHVtbiByZWZlcmVuY2UuIFRoaXMgaXMg cmVxdWlyZWQgYnkgdGhlCisgKiBTUUwgc3RhbmRhcmQuCisgKi8KK3N0YXRpYyB2b2lkCithdHRu b19tYXAoTm9kZSAqbm9kZSkKK3sKKwkodm9pZCkgZXhwcmVzc2lvbl90cmVlX3dhbGtlcihub2Rl LCBhdHRub19tYXBfd2Fsa2VyLCBOVUxMKTsKK30KKworc3RhdGljIGJvb2wKK2F0dG5vX21hcF93 YWxrZXIoTm9kZSAqbm9kZSwgdm9pZCAqY29udGV4dCkKK3sKKwlGdW5jRXhwciAgICpmdW5jOwor CWludAkJCW5hcmdzOworCWJvb2wJCWlzX3ByZXY7CisKKwlpZiAobm9kZSA9PSBOVUxMKQorCQly ZXR1cm4gZmFsc2U7CisKKwlpZiAoSXNBKG5vZGUsIEZ1bmNFeHByKSkKKwl7CisJCWZ1bmMgPSAo RnVuY0V4cHIgKikgbm9kZTsKKworCQlpZiAoZnVuYy0+ZnVuY2lkID09IEZfUFJFViB8fCBmdW5j LT5mdW5jaWQgPT0gRl9ORVhUKQorCQl7CisJCQkvKgorCQkJICogVGhlIFNRTCBzdGFuZGFyZCBh bGxvd3MgdG8gaGF2ZSB0d28gbW9yZSBhcmd1bWVudHMgZm9ybSBvZgorCQkJICogUFJFVi9ORVhU LiAgQnV0IGN1cnJlbnRseSB3ZSBhbGxvdyBvbmx5IDEgYXJndW1lbnQgZm9ybS4KKwkJCSAqLwor CQkJbmFyZ3MgPSBsaXN0X2xlbmd0aChmdW5jLT5hcmdzKTsKKwkJCWlmIChsaXN0X2xlbmd0aChm dW5jLT5hcmdzKSAhPSAxKQorCQkJCWVsb2coRVJST1IsICJQUkVWL05FWFQgbXVzdCBoYXZlIDEg YXJndW1lbnQgYnV0IGZ1bmN0aW9uICVkIGhhcyAlZCBhcmdzIiwKKwkJCQkJIGZ1bmMtPmZ1bmNp ZCwgbmFyZ3MpOworCisJCQkvKgorCQkJICogQ2hlY2sgZXhwciBvZiBQUkVWL05FWFQgYXJ1Z3Vt ZW50cyBhbmQgcmVwbGFjZSB2YXJuby4KKwkJCSAqLworCQkJaXNfcHJldiA9IChmdW5jLT5mdW5j aWQgPT0gRl9QUkVWKSA/IHRydWUgOiBmYWxzZTsKKwkJCWNoZWNrX3Jwcl9uYXZpZ2F0aW9uKG5v ZGUsIGlzX3ByZXYpOworCQl9CisJfQorCXJldHVybiBleHByZXNzaW9uX3RyZWVfd2Fsa2VyKG5v ZGUsIGF0dG5vX21hcF93YWxrZXIsIE5VTEwpOworfQorCisvKgorICogUmV3cml0ZSB2YXJubyBv ZiBWYXIgb2YgUlBSIG5hdmlnYXRpb24gb3BlcmF0aW9ucyAoUFJFVi9ORVhUKS4KKyAqIElmIGlz X3ByZXYgaXMgdHJ1ZSwgd2UgdGFrZSBjYXJlIFBSRVYsIG90aGVyd2lzZSBORVhULgorICovCitz dGF0aWMgdm9pZAorY2hlY2tfcnByX25hdmlnYXRpb24oTm9kZSAqbm9kZSwgYm9vbCBpc19wcmV2 KQoreworCU5hdmlnYXRpb25JbmZvIGNvbnRleHQ7CisKKwljb250ZXh0LmlzX3ByZXYgPSBpc19w cmV2OworCWNvbnRleHQubnVtX3ZhcnMgPSAwOworCSh2b2lkKSBleHByZXNzaW9uX3RyZWVfd2Fs a2VyKG5vZGUsIHJwcl9uYXZpZ2F0aW9uX3dhbGtlciwgJmNvbnRleHQpOworCWlmIChjb250ZXh0 Lm51bV92YXJzIDwgMSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJtc2coInJvdyBwYXR0ZXJu IG5hdmlnYXRpb24gb3BlcmF0aW9uJ3MgYXJndW1lbnQgbXVzdCBpbmNsdWRlIGF0IGxlYXN0IG9u ZSBjb2x1bW4gcmVmZXJlbmNlIikpOworfQorCitzdGF0aWMgYm9vbAorcnByX25hdmlnYXRpb25f d2Fsa2VyKE5vZGUgKm5vZGUsIHZvaWQgKmNvbnRleHQpCit7CisJTmF2aWdhdGlvbkluZm8gKm5h diA9IChOYXZpZ2F0aW9uSW5mbyAqKSBjb250ZXh0OworCisJaWYgKG5vZGUgPT0gTlVMTCkKKwkJ cmV0dXJuIGZhbHNlOworCisJc3dpdGNoIChub2RlVGFnKG5vZGUpKQorCXsKKwkJY2FzZSBUX1Zh cjoKKwkJCXsKKwkJCQlWYXIJCSAgICp2YXIgPSAoVmFyICopIG5vZGU7CisKKwkJCQluYXYtPm51 bV92YXJzKys7CisKKwkJCQlpZiAobmF2LT5pc19wcmV2KQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJ ICogUmV3cml0ZSB2YXJubyBmcm9tIE9VVEVSX1ZBUiB0byByZWd1bGFyIHZhciBubyBzbyB0aGF0 CisJCQkJCSAqIHRoZSB2YXIgcmVmZXJlbmNlcyBzY2FuIHR1cGxlLgorCQkJCQkgKi8KKwkJCQkJ dmFyLT52YXJubyA9IHZhci0+dmFybm9zeW47CisJCQkJfQorCQkJCWVsc2UKKwkJCQkJdmFyLT52 YXJubyA9IElOTkVSX1ZBUjsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRfQ29uc3Q6CisJCWNh c2UgVF9GdW5jRXhwcjoKKwkJY2FzZSBUX09wRXhwcjoKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6 CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJtc2coInJvdyBwYXR0ZXJuIG5hdmlnYXRpb24g b3BlcmF0aW9uJ3MgYXJndW1lbnQgaW5jbHVkZXMgdW5zdXBwb3J0ZWQgZXhwcmVzc2lvbiIpKTsK Kwl9CisJcmV0dXJuIGV4cHJlc3Npb25fdHJlZV93YWxrZXIobm9kZSwgcnByX25hdmlnYXRpb25f d2Fsa2VyLCBjb250ZXh0KTsKK30KKworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLQogICogRXhlY0Vu ZFdpbmRvd0FnZwogICogLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI3ODgsNiArMzEyNSw4IEBAIEV4 ZWNSZVNjYW5XaW5kb3dBZ2coV2luZG93QWdnU3RhdGUgKm5vZGUpCiAJRXhlY0NsZWFyVHVwbGUo bm9kZS0+YWdnX3Jvd19zbG90KTsKIAlFeGVjQ2xlYXJUdXBsZShub2RlLT50ZW1wX3Nsb3RfMSk7 CiAJRXhlY0NsZWFyVHVwbGUobm9kZS0+dGVtcF9zbG90XzIpOworCUV4ZWNDbGVhclR1cGxlKG5v ZGUtPnByZXZfc2xvdCk7CisJRXhlY0NsZWFyVHVwbGUobm9kZS0+bmV4dF9zbG90KTsKIAlpZiAo bm9kZS0+ZnJhbWVoZWFkX3Nsb3QpCiAJCUV4ZWNDbGVhclR1cGxlKG5vZGUtPmZyYW1laGVhZF9z bG90KTsKIAlpZiAobm9kZS0+ZnJhbWV0YWlsX3Nsb3QpCkBAIC0zMTQ4LDcgKzM0ODcsOCBAQCB3 aW5kb3dfZ2V0dHVwbGVzbG90KFdpbmRvd09iamVjdCB3aW5vYmosIGludDY0IHBvcywgVHVwbGVU YWJsZVNsb3QgKnNsb3QpCiAJCXJldHVybiBmYWxzZTsKIAogCWlmIChwb3MgPCB3aW5vYmotPm1h cmtwb3MpCi0JCWVsb2coRVJST1IsICJjYW5ub3QgZmV0Y2ggcm93IGJlZm9yZSBXaW5kb3dPYmpl Y3QncyBtYXJrIHBvc2l0aW9uIik7CisJCWVsb2coRVJST1IsICJjYW5ub3QgZmV0Y2ggcm93OiAi IElOVDY0X0ZPUk1BVCAiIGJlZm9yZSBXaW5kb3dPYmplY3QncyBtYXJrIHBvc2l0aW9uOiAiIElO VDY0X0ZPUk1BVCwKKwkJCSBwb3MsIHdpbm9iai0+bWFya3Bvcyk7CiAKIAlvbGRjb250ZXh0ID0g TWVtb3J5Q29udGV4dFN3aXRjaFRvKHdpbnN0YXRlLT5zcy5wcy5wc19FeHByQ29udGV4dC0+ZWN4 dF9wZXJfcXVlcnlfbWVtb3J5KTsKIApAQCAtMzQ2OCwxNCArMzgwOCw1NCBAQCBXaW5HZXRGdW5j QXJnSW5GcmFtZShXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQgYXJnbm8sCiAJV2luZG93QWdnU3Rh dGUgKndpbnN0YXRlOwogCUV4cHJDb250ZXh0ICplY29udGV4dDsKIAlUdXBsZVRhYmxlU2xvdCAq c2xvdDsKLQlpbnQ2NAkJYWJzX3BvczsKLQlpbnQ2NAkJbWFya19wb3M7CiAKIAlBc3NlcnQoV2lu ZG93T2JqZWN0SXNWYWxpZCh3aW5vYmopKTsKIAl3aW5zdGF0ZSA9IHdpbm9iai0+d2luc3RhdGU7 CiAJZWNvbnRleHQgPSB3aW5zdGF0ZS0+c3MucHMucHNfRXhwckNvbnRleHQ7CiAJc2xvdCA9IHdp bnN0YXRlLT50ZW1wX3Nsb3RfMTsKIAorCWlmIChXaW5HZXRTbG90SW5GcmFtZSh3aW5vYmosIHNs b3QsCisJCQkJCQkgIHJlbHBvcywgc2Vla3R5cGUsIHNldF9tYXJrLAorCQkJCQkJICBpc251bGws IGlzb3V0KSA9PSAwKQorCXsKKwkJZWNvbnRleHQtPmVjeHRfb3V0ZXJ0dXBsZSA9IHNsb3Q7CisJ CXJldHVybiBFeGVjRXZhbEV4cHIoKEV4cHJTdGF0ZSAqKSBsaXN0X250aCh3aW5vYmotPmFyZ3N0 YXRlcywgYXJnbm8pLAorCQkJCQkJCWVjb250ZXh0LCBpc251bGwpOworCX0KKworCWlmIChpc291 dCkKKwkJKmlzb3V0ID0gdHJ1ZTsKKwkqaXNudWxsID0gdHJ1ZTsKKwlyZXR1cm4gKERhdHVtKSAw OworfQorCisvKgorICogV2luR2V0U2xvdEluRnJhbWUKKyAqIHNsb3Q6IFR1cGxlVGFibGVTbG90 IHRvIHN0b3JlIHRoZSByZXN1bHQKKyAqIHJlbHBvczogc2lnbmVkIHJvd2NvdW50IG9mZnNldCBm cm9tIHRoZSBzZWVrIHBvc2l0aW9uCisgKiBzZWVrdHlwZTogV0lORE9XX1NFRUtfSEVBRCBvciBX SU5ET1dfU0VFS19UQUlMCisgKiBzZXRfbWFyazogSWYgdGhlIHJvdyBpcyBmb3VuZC9pbiBmcmFt ZSBhbmQgc2V0X21hcmsgaXMgdHJ1ZSwgdGhlIG1hcmsgaXMKKyAqCQltb3ZlZCB0byB0aGUgcm93 IGFzIGEgc2lkZS1lZmZlY3QuCisgKiBpc251bGw6IG91dHB1dCBhcmd1bWVudCwgcmVjZWl2ZXMg aXNudWxsIHN0YXR1cyBvZiByZXN1bHQKKyAqIGlzb3V0OiBvdXRwdXQgYXJndW1lbnQsIHNldCB0 byBpbmRpY2F0ZSB3aGV0aGVyIHRhcmdldCByb3cgcG9zaXRpb24KKyAqCQlpcyBvdXQgb2YgZnJh bWUgKGNhbiBwYXNzIE5VTEwgaWYgY2FsbGVyIGRvZXNuJ3QgY2FyZSBhYm91dCB0aGlzKQorICoK KyAqIFJldHVybnMgMCBpZiB3ZSBzdWNjZXNzZnVsbHQgZ290IHRoZSBzbG90LiBmYWxzZSBpZiBv dXQgb2YgZnJhbWUuCisgKiAoYWxzbyBpc291dCBpcyBzZXQpCisgKi8KK3N0YXRpYyBpbnQKK1dp bkdldFNsb3RJbkZyYW1lKFdpbmRvd09iamVjdCB3aW5vYmosIFR1cGxlVGFibGVTbG90ICpzbG90 LAorCQkJCSAgaW50IHJlbHBvcywgaW50IHNlZWt0eXBlLCBib29sIHNldF9tYXJrLAorCQkJCSAg Ym9vbCAqaXNudWxsLCBib29sICppc291dCkKK3sKKwlXaW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGU7 CisJaW50NjQJCWFic19wb3M7CisJaW50NjQJCW1hcmtfcG9zOworCWludAkJCW51bV9yZWR1Y2Vk X2ZyYW1lOworCisJQXNzZXJ0KFdpbmRvd09iamVjdElzVmFsaWQod2lub2JqKSk7CisJd2luc3Rh dGUgPSB3aW5vYmotPndpbnN0YXRlOworCiAJc3dpdGNoIChzZWVrdHlwZSkKIAl7CiAJCWNhc2Ug V0lORE9XX1NFRUtfQ1VSUkVOVDoKQEAgLTM1NDIsMTEgKzM5MjIsMjUgQEAgV2luR2V0RnVuY0Fy Z0luRnJhbWUoV2luZG93T2JqZWN0IHdpbm9iaiwgaW50IGFyZ25vLAogCQkJCQkJIHdpbnN0YXRl LT5mcmFtZU9wdGlvbnMpOwogCQkJCQlicmVhazsKIAkJCX0KKwkJCW51bV9yZWR1Y2VkX2ZyYW1l ID0gcm93X2lzX2luX3JlZHVjZWRfZnJhbWUod2lub2JqLAorCQkJCQkJCQkJCQkJCQl3aW5zdGF0 ZS0+ZnJhbWVoZWFkcG9zKTsKKwkJCWlmIChudW1fcmVkdWNlZF9mcmFtZSA8IDApCisJCQkJZ290 byBvdXRfb2ZfZnJhbWU7CisJCQllbHNlIGlmIChudW1fcmVkdWNlZF9mcmFtZSA+IDApCisJCQkJ aWYgKHJlbHBvcyA+PSBudW1fcmVkdWNlZF9mcmFtZSkKKwkJCQkJZ290byBvdXRfb2ZfZnJhbWU7 CiAJCQlicmVhazsKIAkJY2FzZSBXSU5ET1dfU0VFS19UQUlMOgogCQkJLyogcmVqZWN0aW5nIHJl bHBvcyA+IDAgaXMgZWFzeSBhbmQgc2ltcGxpZmllcyBjb2RlIGJlbG93ICovCiAJCQlpZiAocmVs cG9zID4gMCkKIAkJCQlnb3RvIG91dF9vZl9mcmFtZTsKKworCQkJLyoKKwkJCSAqIFJQUiBjYXJl cyBhYm91dCBmcmFtZSBoZWFkIHBvcy4gTmVlZCB0byBjYWxsCisJCQkgKiB1cGRhdGVfZnJhbWVo ZWFkcG9zCisJCQkgKi8KKwkJCXVwZGF0ZV9mcmFtZWhlYWRwb3Mod2luc3RhdGUpOworCiAJCQl1 cGRhdGVfZnJhbWV0YWlscG9zKHdpbnN0YXRlKTsKIAkJCWFic19wb3MgPSB3aW5zdGF0ZS0+ZnJh bWV0YWlscG9zIC0gMSArIHJlbHBvczsKIApAQCAtMzYxMyw2ICs0MDA3LDE0IEBAIFdpbkdldEZ1 bmNBcmdJbkZyYW1lKFdpbmRvd09iamVjdCB3aW5vYmosIGludCBhcmdubywKIAkJCQkJbWFya19w b3MgPSAwOwkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCiAJCQkJCWJyZWFrOwogCQkJfQorCisJ CQludW1fcmVkdWNlZF9mcmFtZSA9IHJvd19pc19pbl9yZWR1Y2VkX2ZyYW1lKHdpbm9iaiwKKwkJ CQkJCQkJCQkJCQkJd2luc3RhdGUtPmZyYW1laGVhZHBvcyArIHJlbHBvcyk7CisJCQlpZiAobnVt X3JlZHVjZWRfZnJhbWUgPCAwKQorCQkJCWdvdG8gb3V0X29mX2ZyYW1lOworCQkJZWxzZSBpZiAo bnVtX3JlZHVjZWRfZnJhbWUgPiAwKQorCQkJCWFic19wb3MgPSB3aW5zdGF0ZS0+ZnJhbWVoZWFk cG9zICsgcmVscG9zICsKKwkJCQkJbnVtX3JlZHVjZWRfZnJhbWUgLSAxOwogCQkJYnJlYWs7CiAJ CWRlZmF1bHQ6CiAJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIHdpbmRvdyBzZWVrIHR5cGU6 ICVkIiwgc2Vla3R5cGUpOwpAQCAtMzYzMSwxNSArNDAzMywxMyBAQCBXaW5HZXRGdW5jQXJnSW5G cmFtZShXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQgYXJnbm8sCiAJCSppc291dCA9IGZhbHNlOwog CWlmIChzZXRfbWFyaykKIAkJV2luU2V0TWFya1Bvc2l0aW9uKHdpbm9iaiwgbWFya19wb3MpOwot CWVjb250ZXh0LT5lY3h0X291dGVydHVwbGUgPSBzbG90OwotCXJldHVybiBFeGVjRXZhbEV4cHIo KEV4cHJTdGF0ZSAqKSBsaXN0X250aCh3aW5vYmotPmFyZ3N0YXRlcywgYXJnbm8pLAotCQkJCQkJ ZWNvbnRleHQsIGlzbnVsbCk7CisJcmV0dXJuIDA7CiAKIG91dF9vZl9mcmFtZToKIAlpZiAoaXNv dXQpCiAJCSppc291dCA9IHRydWU7CiAJKmlzbnVsbCA9IHRydWU7Ci0JcmV0dXJuIChEYXR1bSkg MDsKKwlyZXR1cm4gLTE7CiB9CiAKIC8qCkBAIC0zNjcwLDMgKzQwNzAsMTQyMCBAQCBXaW5HZXRG dW5jQXJnQ3VycmVudChXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQgYXJnbm8sIGJvb2wgKmlzbnVs bCkKIAlyZXR1cm4gRXhlY0V2YWxFeHByKChFeHByU3RhdGUgKikgbGlzdF9udGgod2lub2JqLT5h cmdzdGF0ZXMsIGFyZ25vKSwKIAkJCQkJCWVjb250ZXh0LCBpc251bGwpOwogfQorCisvKgorICog cnByX2lzX2RlZmluZWQKKyAqIHJldHVybiB0cnVlIGlmIFJvdyBwYXR0ZXJuIHJlY29nbml0aW9u IGlzIGRlZmluZWQuCisgKi8KK3N0YXRpYworYm9vbAorcnByX2lzX2RlZmluZWQoV2luZG93QWdn U3RhdGUgKndpbnN0YXRlKQoreworCXJldHVybiB3aW5zdGF0ZS0+cGF0dGVyblZhcmlhYmxlTGlz dCAhPSBOSUw7Cit9CisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLQorICogcm93X2lzX2luX3Jl ZHVjZWRfZnJhbWUKKyAqIERldGVybWluZSB3aGV0aGVyIGEgcm93IGlzIGluIHRoZSBjdXJyZW50 IHJvdydzIHJlZHVjZWQgd2luZG93IGZyYW1lCisgKiBhY2NvcmRpbmcgdG8gcm93IHBhdHRlcm4g bWF0Y2hpbmcKKyAqCisgKiBUaGUgcm93IG11c3QgaGFzIGJlZW4gYWxyZWFkeSBkZXRlcm1pbmVk IHRoYXQgaXQgaXMgaW4gYSBmdWxsIHdpbmRvdyBmcmFtZQorICogYW5kIGZldGNoZWQgaXQgaW50 byBzbG90LgorICoKKyAqIFJldHVybnM6CisgKiA9IDAsIFJQUiBpcyBub3QgZGVmaW5lZC4KKyAq ID4wLCBpZiB0aGUgcm93IGlzIHRoZSBmaXJzdCBpbiB0aGUgcmVkdWNlZCBmcmFtZS4gUmV0dXJu IHRoZSBudW1iZXIgb2Ygcm93cworICogaW4gdGhlIHJlZHVjZWQgZnJhbWUuCisgKiAtMSwgaWYg dGhlIHJvdyBpcyB1bm1hdGNoZWQgcm93CisgKiAtMiwgaWYgdGhlIHJvdyBpcyBpbiB0aGUgcmVk dWNlZCBmcmFtZSBidXQgbmVlZGVkIHRvIGJlIHNraXBwZWQgYmVjYXVzZSBvZgorICogQUZURVIg TUFUQ0ggU0tJUCBQQVNUIExBU1QgUk9XCisgKiAtLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0 aWMKK2ludAorcm93X2lzX2luX3JlZHVjZWRfZnJhbWUoV2luZG93T2JqZWN0IHdpbm9iaiwgaW50 NjQgcG9zKQoreworCVdpbmRvd0FnZ1N0YXRlICp3aW5zdGF0ZSA9IHdpbm9iai0+d2luc3RhdGU7 CisJaW50CQkJc3RhdGU7CisJaW50CQkJcnRuOworCisJaWYgKCFycHJfaXNfZGVmaW5lZCh3aW5z dGF0ZSkpCisJeworCQkvKgorCQkgKiBSUFIgaXMgbm90IGRlZmluZWQuIEFzc3VtZSB0aGF0IHdl IGFyZSBhbHdheXMgaW4gdGhlIHRoZSByZWR1Y2VkCisJCSAqIHdpbmRvdyBmcmFtZS4KKwkJICov CisJCXJ0biA9IDA7CisjaWZkZWYgUlBSX0RFQlVHCisJCWVsb2coREVCVUcxLCAicm93X2lzX2lu X3JlZHVjZWRfZnJhbWUgcmV0dXJucyAlZDogcG9zOiAiIElOVDY0X0ZPUk1BVCwKKwkJCSBydG4s IHBvcyk7CisjZW5kaWYKKwkJcmV0dXJuIHJ0bjsKKwl9CisKKwlzdGF0ZSA9IGdldF9yZWR1Y2Vk X2ZyYW1lX21hcCh3aW5zdGF0ZSwgcG9zKTsKKworCWlmIChzdGF0ZSA9PSBSRl9OT1RfREVURVJN SU5FRCkKKwl7CisJCXVwZGF0ZV9mcmFtZWhlYWRwb3Mod2luc3RhdGUpOworCQl1cGRhdGVfcmVk dWNlZF9mcmFtZSh3aW5vYmosIHBvcyk7CisJfQorCisJc3RhdGUgPSBnZXRfcmVkdWNlZF9mcmFt ZV9tYXAod2luc3RhdGUsIHBvcyk7CisKKwlzd2l0Y2ggKHN0YXRlKQorCXsKKwkJCWludDY0CQlp OworCQkJaW50CQkJbnVtX3JlZHVjZWRfcm93czsKKworCQljYXNlIFJGX0ZSQU1FX0hFQUQ6CisJ CQludW1fcmVkdWNlZF9yb3dzID0gMTsKKwkJCWZvciAoaSA9IHBvcyArIDE7CisJCQkJIGdldF9y ZWR1Y2VkX2ZyYW1lX21hcCh3aW5zdGF0ZSwgaSkgPT0gUkZfU0tJUFBFRDsgaSsrKQorCQkJCW51 bV9yZWR1Y2VkX3Jvd3MrKzsKKwkJCXJ0biA9IG51bV9yZWR1Y2VkX3Jvd3M7CisJCQlicmVhazsK KworCQljYXNlIFJGX1NLSVBQRUQ6CisJCQlydG4gPSAtMjsKKwkJCWJyZWFrOworCisJCWNhc2Ug UkZfVU5NQVRDSEVEOgorCQkJcnRuID0gLTE7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJ ZWxvZyhFUlJPUiwgIlVucmVjb2duaXplZCBzdGF0ZTogJWQgYXQ6ICIgSU5UNjRfRk9STUFULAor CQkJCSBzdGF0ZSwgcG9zKTsKKwkJCWJyZWFrOworCX0KKworI2lmZGVmIFJQUl9ERUJVRworCWVs b2coREVCVUcxLCAicm93X2lzX2luX3JlZHVjZWRfZnJhbWUgcmV0dXJucyAlZDogcG9zOiAiIElO VDY0X0ZPUk1BVCwKKwkJIHJ0biwgcG9zKTsKKyNlbmRpZgorCXJldHVybiBydG47Cit9CisKKyNk ZWZpbmUgUkVEVUNFRF9GUkFNRV9NQVBfSU5JVF9TSVpFCTEwMjRMCisKKy8qCisgKiBjcmVhdGVf cmVkdWNlZF9mcmFtZV9tYXAKKyAqIENyZWF0ZSByZWR1Y2VkIGZyYW1lIG1hcAorICovCitzdGF0 aWMKK3ZvaWQKK2NyZWF0ZV9yZWR1Y2VkX2ZyYW1lX21hcChXaW5kb3dBZ2dTdGF0ZSAqd2luc3Rh dGUpCit7CisJd2luc3RhdGUtPnJlZHVjZWRfZnJhbWVfbWFwID0KKwkJTWVtb3J5Q29udGV4dEFs bG9jKHdpbnN0YXRlLT5wYXJ0Y29udGV4dCwKKwkJCQkJCSAgIFJFRFVDRURfRlJBTUVfTUFQX0lO SVRfU0laRSk7CisJd2luc3RhdGUtPmFsbG9jX3N6ID0gUkVEVUNFRF9GUkFNRV9NQVBfSU5JVF9T SVpFOworCWNsZWFyX3JlZHVjZWRfZnJhbWVfbWFwKHdpbnN0YXRlKTsKK30KKworLyoKKyAqIGNs ZWFyX3JlZHVjZWRfZnJhbWVfbWFwCisgKiBDbGVhciByZWR1Y2VkIGZyYW1lIG1hcAorICovCitz dGF0aWMKK3ZvaWQKK2NsZWFyX3JlZHVjZWRfZnJhbWVfbWFwKFdpbmRvd0FnZ1N0YXRlICp3aW5z dGF0ZSkKK3sKKwlBc3NlcnQod2luc3RhdGUtPnJlZHVjZWRfZnJhbWVfbWFwICE9IE5VTEwpOwor CU1lbVNldCh3aW5zdGF0ZS0+cmVkdWNlZF9mcmFtZV9tYXAsIFJGX05PVF9ERVRFUk1JTkVELAor CQkgICB3aW5zdGF0ZS0+YWxsb2Nfc3opOworfQorCisvKgorICogZ2V0X3JlZHVjZWRfZnJhbWVf bWFwCisgKiBHZXQgcmVkdWNlZCBmcmFtZSBtYXAgc3BlY2lmaWVkIGJ5IHBvcworICovCitzdGF0 aWMKK2ludAorZ2V0X3JlZHVjZWRfZnJhbWVfbWFwKFdpbmRvd0FnZ1N0YXRlICp3aW5zdGF0ZSwg aW50NjQgcG9zKQoreworCUFzc2VydCh3aW5zdGF0ZS0+cmVkdWNlZF9mcmFtZV9tYXAgIT0gTlVM TCk7CisJQXNzZXJ0KHBvcyA+PSAwKTsKKworCS8qCisJICogSWYgcG9zIGlzIG5vdCBpbiB0aGUg cmVkdWNlZCBmcmFtZSBtYXAsIGl0IG1lYW5zIHRoYXQgYW55IGluZm8KKwkgKiByZWdhcmRpbmcg dGhlIHBvcyBoYXMgbm90IGJlZW4gcmVnaXN0ZXJlZCB5ZXQuIFNvIHdlIHJldHVybgorCSAqIFJG X05PVF9ERVRFUk1JTkVELgorCSAqLworCWlmIChwb3MgPj0gd2luc3RhdGUtPmFsbG9jX3N6KQor CQlyZXR1cm4gUkZfTk9UX0RFVEVSTUlORUQ7CisKKwlyZXR1cm4gd2luc3RhdGUtPnJlZHVjZWRf ZnJhbWVfbWFwW3Bvc107Cit9CisKKy8qCisgKiByZWdpc3Rlcl9yZWR1Y2VkX2ZyYW1lX21hcAor ICogQWRkL3JlcGxhY2UgcmVkdWNlZCBmcmFtZSBtYXAgbWVtYmVyIGF0IHBvcy4KKyAqIElmIHRo ZXJlJ3Mgbm8gZW5vdWdoIHNwYWNlLCBleHBhbmQgdGhlIG1hcC4KKyAqLworc3RhdGljCit2b2lk CityZWdpc3Rlcl9yZWR1Y2VkX2ZyYW1lX21hcChXaW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGUsIGlu dDY0IHBvcywgaW50IHZhbCkKK3sKKwlpbnQ2NAkJcmVhbGxvY19zejsKKworCUFzc2VydCh3aW5z dGF0ZS0+cmVkdWNlZF9mcmFtZV9tYXAgIT0gTlVMTCk7CisKKwlpZiAocG9zIDwgMCkKKwkJZWxv ZyhFUlJPUiwgIndyb25nIHBvczogIiBJTlQ2NF9GT1JNQVQsIHBvcyk7CisKKwlpZiAocG9zID4g d2luc3RhdGUtPmFsbG9jX3N6IC0gMSkKKwl7CisJCXJlYWxsb2Nfc3ogPSB3aW5zdGF0ZS0+YWxs b2Nfc3ogKiAyOworCisJCXdpbnN0YXRlLT5yZWR1Y2VkX2ZyYW1lX21hcCA9CisJCQlyZXBhbGxv Yyh3aW5zdGF0ZS0+cmVkdWNlZF9mcmFtZV9tYXAsIHJlYWxsb2Nfc3opOworCisJCU1lbVNldCh3 aW5zdGF0ZS0+cmVkdWNlZF9mcmFtZV9tYXAgKyB3aW5zdGF0ZS0+YWxsb2Nfc3osCisJCQkgICBS Rl9OT1RfREVURVJNSU5FRCwgcmVhbGxvY19zeiAtIHdpbnN0YXRlLT5hbGxvY19zeik7CisKKwkJ d2luc3RhdGUtPmFsbG9jX3N6ID0gcmVhbGxvY19zejsKKwl9CisKKwl3aW5zdGF0ZS0+cmVkdWNl ZF9mcmFtZV9tYXBbcG9zXSA9IHZhbDsKK30KKworLyoKKyAqIHVwZGF0ZV9yZWR1Y2VkX2ZyYW1l CisgKgkJVXBkYXRlIHJlZHVjZWQgZnJhbWUgaW5mby4KKyAqLworc3RhdGljCit2b2lkCit1cGRh dGVfcmVkdWNlZF9mcmFtZShXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQ2NCBwb3MpCit7CisJV2lu ZG93QWdnU3RhdGUgKndpbnN0YXRlID0gd2lub2JqLT53aW5zdGF0ZTsKKwlMaXN0Q2VsbCAgICps YzEsCisJCQkgICAqbGMyOworCWJvb2wJCWV4cHJlc3Npb25fcmVzdWx0OworCWludAkJCW51bV9t YXRjaGVkX3Jvd3M7CisJaW50NjQJCW9yaWdpbmFsX3BvczsKKwlib29sCQlhbnltYXRjaDsKKwlT dHJpbmdJbmZvCWVuY29kZWRfc3RyOworCVN0cmluZ1NldCAgKnN0cl9zZXQ7CisJYm9vbAkJZ3Jl ZWR5ID0gZmFsc2U7CisJaW50NjQJCXJlc3VsdF9wb3MsIGk7CisJaW50CQkJaW5pdF9zaXplOwor CisJLyoKKwkgKiBTZXQgb2YgcGF0dGVybiB2YXJpYWJsZXMgZXZhbHVhdGVkIHRvIHRydWUuIEVh Y2ggY2hhcmFjdGVyIGNvcnJlc3BvbmRzCisJICogdG8gcGF0dGVybiB2YXJpYWJsZS4gRXhhbXBs ZTogc3RyX3NldFswXSA9ICJBQiI7IHN0cl9zZXRbMV0gPSAiQUMiOyBJbgorCSAqIHRoaXMgY2Fz ZSBhdCByb3cgMCBBIGFuZCBCIGFyZSB0cnVlLCBhbmQgQSBhbmQgQyBhcmUgdHJ1ZSBpbiByb3cg MS4KKwkgKi8KKworCS8qIGluaXRpYWxpemUgcGF0dGVybiB2YXJpYWJsZXMgc2V0ICovCisJc3Ry X3NldCA9IHN0cmluZ19zZXRfaW5pdCgpOworCisJLyogc2F2ZSBvcmlnaW5hbCBwb3MgKi8KKwlv cmlnaW5hbF9wb3MgPSBwb3M7CisKKwkvKgorCSAqIENhbGN1bGF0ZSBpbml0aWFsIG1lbW9yeSBh bGxvY2F0aW9uIHNpemUgZnJvbSB0aGUgbnVtYmVyIG9mIHBhdHRlcm4KKwkgKiB2YXJpYWJsZXMs CisJICovCisJaW5pdF9zaXplID0gc2l6ZW9mKGNoYXIpICogbGlzdF9sZW5ndGgod2luc3RhdGUt PnBhdHRlcm5WYXJpYWJsZUxpc3QpICsgMTsKKworCS8qCisJICogQ2hlY2sgaWYgdGhlIHBhdHRl cm4gZG9lcyBub3QgaW5jbHVkZSBhbnkgZ3JlZWR5IHF1YW50aWZpZXIuIElmIGl0IGRvZXMKKwkg KiBub3QsIHdlIGNhbiBqdXN0IGFwcGx5IHRoZSBwYXR0ZXJuIHRvIGVhY2ggcm93LiBJZiBpdCBz dWNjZWVkcywgd2UgYXJlCisJICogZG9uZS4KKwkgKi8KKwlmb3JlYWNoKGxjMSwgd2luc3RhdGUt PnBhdHRlcm5SZWdleHBMaXN0KQorCXsKKwkJY2hhcgkgICAqcXVhbnRpZmllciA9IHN0clZhbChs Zmlyc3QobGMxKSk7CisKKwkJaWYgKCpxdWFudGlmaWVyID09ICcrJyB8fCAqcXVhbnRpZmllciA9 PSAnKicpCisJCXsKKwkJCWdyZWVkeSA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8q CisJICogTm9uIGdyZWVkeSBjYXNlCisJICovCisJaWYgKCFncmVlZHkpCisJeworCQludW1fbWF0 Y2hlZF9yb3dzID0gMDsKKwkJZW5jb2RlZF9zdHIgPSBtYWtlU3RyaW5nSW5mb0V4dChpbml0X3Np emUpOworCisJCWZvcmVhY2gobGMxLCB3aW5zdGF0ZS0+cGF0dGVyblZhcmlhYmxlTGlzdCkKKwkJ eworCQkJY2hhcgkgICAqdm5hbWUgPSBzdHJWYWwobGZpcnN0KGxjMSkpOworI2lmZGVmIFJQUl9E RUJVRworCQkJZWxvZyhERUJVRzEsICJwb3M6ICIgSU5UNjRfRk9STUFUICIgcGF0dGVybiB2bmFt ZTogJXMiLAorCQkJCSBwb3MsIHZuYW1lKTsKKyNlbmRpZgorCQkJZXhwcmVzc2lvbl9yZXN1bHQg PSBmYWxzZTsKKworCQkJLyogZXZhbHVhdGUgcm93IHBhdHRlcm4gYWdhaW5zdCBjdXJyZW50IHJv dyAqLworCQkJcmVzdWx0X3BvcyA9IGV2YWx1YXRlX3BhdHRlcm4od2lub2JqLCBwb3MsIHZuYW1l LAorCQkJCQkJCQkJCSAgZW5jb2RlZF9zdHIsICZleHByZXNzaW9uX3Jlc3VsdCk7CisJCQlpZiAo IWV4cHJlc3Npb25fcmVzdWx0IHx8IHJlc3VsdF9wb3MgPCAwKQorCQkJeworI2lmZGVmIFJQUl9E RUJVRworCQkJCWVsb2coREVCVUcxLCAiZXhwcmVzc2lvbiByZXN1bHQgaXMgZmFsc2Ugb3Igb3V0 IG9mIGZyYW1lIik7CisjZW5kaWYKKwkJCQlyZWdpc3Rlcl9yZWR1Y2VkX2ZyYW1lX21hcCh3aW5z dGF0ZSwgb3JpZ2luYWxfcG9zLAorCQkJCQkJCQkJCSAgIFJGX1VOTUFUQ0hFRCk7CisJCQkJZGVz dHJveVN0cmluZ0luZm8oZW5jb2RlZF9zdHIpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCS8qIG1v dmUgdG8gbmV4dCByb3cgKi8KKwkJCXBvcysrOworCQkJbnVtX21hdGNoZWRfcm93cysrOworCQl9 CisJCWRlc3Ryb3lTdHJpbmdJbmZvKGVuY29kZWRfc3RyKTsKKyNpZmRlZiBSUFJfREVCVUcKKwkJ ZWxvZyhERUJVRzEsICJwYXR0ZXJuIG1hdGNoZWQiKTsKKyNlbmRpZgorCQlyZWdpc3Rlcl9yZWR1 Y2VkX2ZyYW1lX21hcCh3aW5zdGF0ZSwgb3JpZ2luYWxfcG9zLCBSRl9GUkFNRV9IRUFEKTsKKwor CQlmb3IgKGkgPSBvcmlnaW5hbF9wb3MgKyAxOyBpIDwgb3JpZ2luYWxfcG9zICsgbnVtX21hdGNo ZWRfcm93czsgaSsrKQorCQl7CisJCQlyZWdpc3Rlcl9yZWR1Y2VkX2ZyYW1lX21hcCh3aW5zdGF0 ZSwgaSwgUkZfU0tJUFBFRCk7CisJCX0KKwkJcmV0dXJuOworCX0KKworCS8qCisJICogR3JlZWR5 IHF1YW50aWZpZXJzIGluY2x1ZGVkLiBMb29wIG92ZXIgdW50aWwgbm9uZSBvZiBwYXR0ZXJuIG1h dGNoZXMgb3IKKwkgKiBlbmNvdW50ZXJzIGVuZCBvZiBmcmFtZS4KKwkgKi8KKwlmb3IgKDs7KQor CXsKKwkJcmVzdWx0X3BvcyA9IC0xOworCisJCS8qCisJCSAqIExvb3Agb3ZlciBlYWNoIFBBVFRF Uk4gdmFyaWFibGUuCisJCSAqLworCQlhbnltYXRjaCA9IGZhbHNlOworCisJCWVuY29kZWRfc3Ry ID0gbWFrZVN0cmluZ0luZm9FeHQoaW5pdF9zaXplKTsKKworCQlmb3Jib3RoKGxjMSwgd2luc3Rh dGUtPnBhdHRlcm5WYXJpYWJsZUxpc3QsIGxjMiwKKwkJCQl3aW5zdGF0ZS0+cGF0dGVyblJlZ2V4 cExpc3QpCisJCXsKKwkJCWNoYXIJICAgKnZuYW1lID0gc3RyVmFsKGxmaXJzdChsYzEpKTsKKyNp ZmRlZiBSUFJfREVCVUcKKwkJCWNoYXIJICAgKnF1YW50aWZpZXIgPSBzdHJWYWwobGZpcnN0KGxj MikpOworCisJCQllbG9nKERFQlVHMSwgInBvczogIiBJTlQ2NF9GT1JNQVQgIiBwYXR0ZXJuIHZu YW1lOiAlcyBxdWFudGlmaWVyOiAlcyIsCisJCQkJIHBvcywgdm5hbWUsIHF1YW50aWZpZXIpOwor I2VuZGlmCisJCQlleHByZXNzaW9uX3Jlc3VsdCA9IGZhbHNlOworCisJCQkvKiBldmFsdWF0ZSBy b3cgcGF0dGVybiBhZ2FpbnN0IGN1cnJlbnQgcm93ICovCisJCQlyZXN1bHRfcG9zID0gZXZhbHVh dGVfcGF0dGVybih3aW5vYmosIHBvcywgdm5hbWUsCisJCQkJCQkJCQkJICBlbmNvZGVkX3N0ciwg JmV4cHJlc3Npb25fcmVzdWx0KTsKKwkJCWlmIChleHByZXNzaW9uX3Jlc3VsdCkKKwkJCXsKKyNp ZmRlZiBSUFJfREVCVUcKKwkJCQllbG9nKERFQlVHMSwgImV4cHJlc3Npb24gcmVzdWx0IGlzIHRy dWUiKTsKKyNlbmRpZgorCQkJCWFueW1hdGNoID0gdHJ1ZTsKKwkJCX0KKworCQkJLyoKKwkJCSAq IElmIG91dCBvZiBmcmFtZSwgd2UgYXJlIGRvbmUuCisJCQkgKi8KKwkJCWlmIChyZXN1bHRfcG9z IDwgMCkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmICghYW55bWF0Y2gpCisJCXsKKwkJCS8qIG5v bmUgb2YgcGF0dGVybnMgbWF0Y2hlZC4gKi8KKwkJCWJyZWFrOworCQl9CisKKwkJc3RyaW5nX3Nl dF9hZGQoc3RyX3NldCwgZW5jb2RlZF9zdHIsIDApOworCisjaWZkZWYgUlBSX0RFQlVHCisJCWVs b2coREVCVUcxLCAicG9zOiAiIElOVDY0X0ZPUk1BVCAiIGVuY29kZWRfc3RyOiAlcyIsCisJCQkg ZW5jb2RlZF9zdHItPmRhdGEpOworI2VuZGlmCisKKwkJLyogbW92ZSB0byBuZXh0IHJvdyAqLwor CQlwb3MrKzsKKworCQlpZiAocmVzdWx0X3BvcyA8IDApCisJCXsKKwkJCS8qIG91dCBvZiBmcmFt ZSAqLworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoc3RyaW5nX3NldF9nZXRfc2l6ZShzdHJf c2V0KSA9PSAwKQorCXsKKwkJLyogbm8gbWF0Y2ggZm91bmQgaW4gdGhlIGZpcnN0IHJvdyAqLwor CQlyZWdpc3Rlcl9yZWR1Y2VkX2ZyYW1lX21hcCh3aW5zdGF0ZSwgb3JpZ2luYWxfcG9zLCBSRl9V Tk1BVENIRUQpOworCQlkZXN0cm95U3RyaW5nSW5mbyhlbmNvZGVkX3N0cik7CisJCXJldHVybjsK Kwl9CisKKyNpZmRlZiBSUFJfREVCVUcKKwllbG9nKERFQlVHMiwgInBvczogIiBJTlQ2NF9GT1JN QVQgIiBlbmNvZGVkX3N0cjogJXMiLAorCQkgcG9zLCBlbmNvZGVkX3N0ci0+ZGF0YSk7CisjZW5k aWYKKworCS8qIGxvb2sgZm9yIG1hdGNoaW5nIHBhdHRlcm4gdmFyaWFibGUgc2VxdWVuY2UgKi8K KyNpZmRlZiBSUFJfREVCVUcKKwllbG9nKERFQlVHMSwgInNlYXJjaF9zdHJfc2V0IHN0YXJ0ZWQi KTsKKyNlbmRpZgorCW51bV9tYXRjaGVkX3Jvd3MgPSBzZWFyY2hfc3RyX3NldCh3aW5zdGF0ZSwg c3RyX3NldCk7CisKKyNpZmRlZiBSUFJfREVCVUcKKwllbG9nKERFQlVHMSwgInNlYXJjaF9zdHJf c2V0IHJldHVybnM6ICVkIiwgbnVtX21hdGNoZWRfcm93cyk7CisjZW5kaWYKKwlzdHJpbmdfc2V0 X2Rpc2NhcmQoc3RyX3NldCk7CisKKwkvKgorCSAqIFdlIGFyZSBhdCB0aGUgZmlyc3Qgcm93IGlu IHRoZSByZWR1Y2VkIGZyYW1lLiAgU2F2ZSB0aGUgbnVtYmVyIG9mCisJICogbWF0Y2hlZCByb3dz IGFzIHRoZSBudW1iZXIgb2Ygcm93cyBpbiB0aGUgcmVkdWNlZCBmcmFtZS4KKwkgKi8KKwlpZiAo bnVtX21hdGNoZWRfcm93cyA8PSAwKQorCXsKKwkJLyogbm8gbWF0Y2ggKi8KKwkJcmVnaXN0ZXJf cmVkdWNlZF9mcmFtZV9tYXAod2luc3RhdGUsIG9yaWdpbmFsX3BvcywgUkZfVU5NQVRDSEVEKTsK Kwl9CisJZWxzZQorCXsKKwkJcmVnaXN0ZXJfcmVkdWNlZF9mcmFtZV9tYXAod2luc3RhdGUsIG9y aWdpbmFsX3BvcywgUkZfRlJBTUVfSEVBRCk7CisKKwkJZm9yIChpID0gb3JpZ2luYWxfcG9zICsg MTsgaSA8IG9yaWdpbmFsX3BvcyArIG51bV9tYXRjaGVkX3Jvd3M7IGkrKykKKwkJeworCQkJcmVn aXN0ZXJfcmVkdWNlZF9mcmFtZV9tYXAod2luc3RhdGUsIGksIFJGX1NLSVBQRUQpOworCQl9CisJ fQorCisJcmV0dXJuOworfQorCisvKgorICogc2VhcmNoX3N0cl9zZXQKKyAqCisgKiBQZXJmb3Jt IHBhdHRlcm4gbWF0Y2hpbmcgdXNpbmcgInBhdHRlcm4iIGFnYWluc3QgaW5wdXRfc3RyX3NldC4g cGF0dGVybiBpcworICogYSByZWd1bGFyIGV4cHJlc3Npb24gc3RyaW5nIGRlcml2ZWQgZnJvbSBQ QVRURVJOIGNsYXVzZS4gTm90ZSB0aGF0IHRoZQorICogcmVndWxhciBleHByZXNzaW9uIHN0cmlu ZyBpcyBwcmVmaXhlZCBieSAnXicgYW5kIGZvbGxvd2VkIGJ5IGluaXRpYWxzCisgKiByZXByZXNl bnRlZCBpbiBhIHNhbWUgd2F5IGFzIHN0cl9zZXQuIHN0cl9zZXQgaXMgYSBzZXQgb2YgU3RyaW5n SW5mby4gRWFjaAorICogU3RyaW5nSW5mbyBoYXMgYSBzdHJpbmcgY29tcHJpc2luZyBpbml0aWFs cyBvZiBwYXR0ZXJuIHZhcmlhYmxlIHN0cmluZ3MKKyAqIGJlaW5nIHRydWUgaW4gYSByb3cuIFRo ZSBpbml0aWFscyBhcmUgb25lIG9mIFthLXpdLCBwYXJhbGxlbCB0byB0aGUgb3JkZXIKKyAqIG9m IHZhcmlhYmxlIG5hbWVzIGluIERFRklORSBjbGF1c2UuIFN1cHBvc2UgREVGSU5FIGhhcyB2YXJp YWJsZXMgU1RBUlQsIFVQCisgKiBhbmQgRE9XTi4gSWYgUEFUVEVSTiBoYXMgU1RBUlQsIFVQKyBh bmQgRE9XTiwgdGhlbiB0aGUgaW5pdGlhbHMgaW4gUEFUVEVSTgorICogd2lsbCBiZSAnYScsICdi JyBhbmQgJ2MnLiBUaGUgInBhdHRlcm4iIHdpbGwgYmUgIl5hYitjIi4KKyAqCisgKiB2YXJpYWJs ZV9wb3MgaXMgYW4gYXJyYXkgcmVwcmVzZW50aW5nIHRoZSBvcmRlciBvZiBwYXR0ZXJuIHZhcmlh YmxlIHN0cmluZworICogaW5pdGlhbHMgaW4gUEFUVEVSTiBjbGF1c2UuICBGb3IgZXhhbXBsZSBp bml0aWFsICdhJyBwb3Rpb24gaXMgaW4KKyAqIHZhcmlhYmxlX3Bvc1swXS5wb3NbMF0gPSAwLiBO b3RlIHRoYXQgaWYgdGhlIHBhdHRlcm4gaXMgIlNUQVJUIFVQIERPV04gVVAiCisgKiAoVVAgYXBw ZWFycyB0d2ljZSksIHRoZW4gIlVQIiAoaW5pdGlhbCBpcyAnYicpIGhhcyB0d28gcG9zaXRpb24g MSBhbmQKKyAqIDMuIFRodXMgdmFyaWFibGVfcG9zIGZvciBiIGlzIHZhcmlhYmxlX3Bvc1sxXS5w b3NbMF0gPSAxIGFuZAorICogdmFyaWFibGVfcG9zWzFdLnBvc1sxXSA9IDMuCisgKgorICogUmV0 dXJucyB0aGUgbG9uZ2VzdCBudW1iZXIgb2YgdGhlIG1hdGNoaW5nIHJvd3MgKGdyZWVkeSBtYXRj aGluZykgaWYKKyAqIHF1YXRpZmllciAnKycgb3IgJyonIGlzIGluY2x1ZGVkIGluICJwYXR0ZXJu Ii4KKyAqLworc3RhdGljCitpbnQKK3NlYXJjaF9zdHJfc2V0KFdpbmRvd0FnZ1N0YXRlICp3aW5z dGF0ZSwgU3RyaW5nU2V0ICppbnB1dF9zdHJfc2V0KQoreworCWNoYXIJICAgKnBhdHRlcm47CQkv KiBzZWFyY2ggcmVnZXhwIHBhdHRlcm4gKi8KKwlWYXJpYWJsZVBvcyAqdmFyaWFibGVfcG9zOwor CWludAkJCXNldF9zaXplOwkJLyogbnVtYmVyIG9mIHJvd3MgaW4gdGhlIHNldCAqLworCWludAkJ CXJlc3VsdGxlbjsKKwlpbnQJCQlpbmRleDsKKwlTdHJpbmdTZXQgICpuZXdfc3RyX3NldDsKKwlp bnQJCQluZXdfc3RyX3NpemU7CisJaW50CQkJbGVuOworCWludAkJCWluZm87CisJY2hhcgkJdGFp bF9wYXR0ZXJuX2luaXRpYWw7CisKKwkvKgorCSAqIFNldCBsYXN0IGluaXRpYWwgY2hhciB0byB0 YWlsX3BhdHRlcm5faW5pdGlhbCBpZiB3ZSBjYW4gYXBwbHkgInRhaWwKKwkgKiBwYXR0ZXJuIGlu aXRpYWwgb3B0aW1pemF0aW9uIi4gIElmIHRoZSBsYXN0IHJlZ2V4cCBjb21wb25lbnQgaW4gcGF0 dGVybgorCSAqIGlzIHdpdGggJysnIHF1YXRpZmllciwgc2V0IHRoZSBpbml0aWFsIHRvIHRhaWxf cGF0dGVybl9pbml0aWFsLiAgRm9yCisJICogZXhhbXBsZSBpZiBwYXR0ZXJuID0gImFiKyIsIHRh aWxfcGF0dGVybl9pbml0aWFsIHdpbGwgYmUgJ2InLgorCSAqIE90aGVyd2lzZSwgdGFpbF9wYXR0 ZXJuX2luaXRpYWwgaXMgJ1wwJy4KKwkgKi8KKwlwYXR0ZXJuID0gd2luc3RhdGUtPnBhdHRlcm5f c3RyLT5kYXRhOworCWlmIChwYXR0ZXJuW3N0cmxlbihwYXR0ZXJuKSAtIDFdID09ICcrJykKKwkJ dGFpbF9wYXR0ZXJuX2luaXRpYWwgPSBwYXR0ZXJuW3N0cmxlbihwYXR0ZXJuKSAtIDJdOworCWVs c2UKKwkJdGFpbF9wYXR0ZXJuX2luaXRpYWwgPSAnXDAnOworCisJLyoKKwkgKiBHZW5lcmF0ZSBh bGwgcG9zc2libGUgcGF0dGVybiB2YXJpYWJsZSBuYW1lIGluaXRpYWxzIGFzIGEgc2V0IG9mCisJ ICogU3RyaW5nSW5mbyBuYW1lZCAibmV3X3N0cl9zZXQiLiAgRm9yIGV4YW1wbGUsIGlmIHdlIGhh dmUgdHdvIHJvd3MKKwkgKiBoYXZpbmcgImFiIiAocm93IDApIGFuZCAiYWMiIChyb3cgMSkgaW4g dGhlIGlucHV0IHN0cl9zZXQsIG5ld19zdHJfc2V0CisJICogd2lsbCBoYXZlIHNldCBvZiBTdHJp bmdJbmZvICJhYSIsICJhYyIsICJiYSIgYW5kICJiYyIgaW4gdGhlIGVuZC4KKwkgKi8KKwl2YXJp YWJsZV9wb3MgPSB3aW5zdGF0ZS0+dmFyaWFibGVfcG9zOworCW5ld19zdHJfc2V0ID0gZ2VuZXJh dGVfcGF0dGVybnMoaW5wdXRfc3RyX3NldCwgcGF0dGVybiwgdmFyaWFibGVfcG9zLAorCQkJCQkJ CQkJdGFpbF9wYXR0ZXJuX2luaXRpYWwpOworCisJLyoKKwkgKiBQZXJmb3JtIHBhdHRlcm4gbWF0 Y2hpbmcgdG8gZmluZCBvdXQgdGhlIGxvbmdlc3QgbWF0Y2guCisJICovCisJbmV3X3N0cl9zaXpl ID0gc3RyaW5nX3NldF9nZXRfc2l6ZShuZXdfc3RyX3NldCk7CisJbGVuID0gMDsKKwlyZXN1bHRs ZW4gPSAwOworCXNldF9zaXplID0gc3RyaW5nX3NldF9nZXRfc2l6ZShpbnB1dF9zdHJfc2V0KTsK KworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IG5ld19zdHJfc2l6ZTsgaW5kZXgrKykKKwl7CisJ CVN0cmluZ0luZm8JczsKKworCQlzID0gc3RyaW5nX3NldF9nZXQobmV3X3N0cl9zZXQsIGluZGV4 LCAmaW5mbyk7CisJCWlmIChzID09IE5VTEwpCisJCQljb250aW51ZTsJCQkvKiBubyBkYXRhICov CisKKwkJLyoKKwkJICogSWYgdGhlIHN0cmluZyBpcyBzY2hlZHVsZWQgdG8gYmUgZGlzY2FyZGVk LCB3ZSBqdXN0IGRpc3JlZ2FyZCBpdC4KKwkJICovCisJCWlmIChpbmZvICYgU1RSU0VUX0RJU0NB UkRFRCkKKwkJCWNvbnRpbnVlOworCisJCWxlbiA9IGRvX3BhdHRlcm5fbWF0Y2gocGF0dGVybiwg cy0+ZGF0YSwgcy0+bGVuKTsKKwkJaWYgKGxlbiA+IHJlc3VsdGxlbikKKwkJeworCQkJLyogcmVt ZW1iZXIgdGhlIGxvbmdlc3QgbWF0Y2ggKi8KKwkJCXJlc3VsdGxlbiA9IGxlbjsKKworCQkJLyoK KwkJCSAqIElmIHRoZSBzaXplIG9mIHJlc3VsdCBzZXQgaXMgZXF1YWwgdG8gdGhlIG51bWJlciBv ZiByb3dzIGluIHRoZQorCQkJICogc2V0LCB3ZSBhcmUgZG9uZSBiZWNhdXNlIGl0J3Mgbm90IHBv c3NpYmxlIHRoYXQgdGhlIG51bWJlciBvZgorCQkJICogbWF0Y2hpbmcgcm93cyBleGNlZWRzIHRo ZSBudW1iZXIgb2Ygcm93cyBpbiB0aGUgc2V0LgorCQkJICovCisJCQlpZiAocmVzdWx0bGVuID49 IHNldF9zaXplKQorCQkJCWJyZWFrOworCQl9CisJfQorCisJLyogd2Ugbm8gbG9uZ2VyIG5lZWQg bmV3IHN0cmluZyBzZXQgKi8KKwlzdHJpbmdfc2V0X2Rpc2NhcmQobmV3X3N0cl9zZXQpOworCisJ cmV0dXJuIHJlc3VsdGxlbjsKK30KKworLyoKKyAqIGdlbmVyYXRlX3BhdHRlcm5zCisgKgorICog R2VuZXJhdGUgYWxsIHBvc3NpYmxlIHBhdHRlcm4gdmFyaWFibGUgbmFtZSBpbml0aWFscyBpbiAn aW5wdXRfc3RyX3NldCcgYXMKKyAqIGEgc2V0IG9mIFN0cmluZ0luZm8gYW5kIHJldHVybiBpdC4g IEZvciBleGFtcGxlLCBpZiB3ZSBoYXZlIHR3byByb3dzIGhhdmluZworICogImFiIiAocm93IDAp IGFuZCAiYWMiIChyb3cgMSkgaW4gJ2lucHV0IHN0cl9zZXQnLCByZXR1cm5lZCBTdHJpbmdTZXQg d2lsbAorICogaGF2ZSBzZXQgb2YgU3RyaW5nSW5mbyAiYWEiLCAiYWMiLCAiYmEiIGFuZCAiYmMi IGluIHRoZSBlbmQuCisgKiAndmFyaWFibGVfcG9zJyBhbmQgJ3RhaWxfcGF0dGVybl9pbml0aWFs JyBhcmUgdXNlZCBmb3IgcHJ1bmluZworICogb3B0aW1pemF0aW9uLgorICovCitzdGF0aWMKK1N0 cmluZ1NldCAqCitnZW5lcmF0ZV9wYXR0ZXJucyhTdHJpbmdTZXQgKmlucHV0X3N0cl9zZXQsIGNo YXIgKnBhdHRlcm4sCisJCQkJICBWYXJpYWJsZVBvcyAqdmFyaWFibGVfcG9zLCBjaGFyIHRhaWxf cGF0dGVybl9pbml0aWFsKQoreworCVN0cmluZ1NldCAgKm9sZF9zdHJfc2V0LAorCQkJICAgKm5l d19zdHJfc2V0OworCWludAkJCWluZGV4OworCWludAkJCXNldF9zaXplOworCWludAkJCW9sZF9z ZXRfc2l6ZTsKKwlpbnQJCQlpbmZvOworCWludAkJCXJlc3VsdGxlbjsKKwlTdHJpbmdJbmZvCXN0 cjsKKwlpbnQJCQlpOworCWNoYXIJICAgKnA7CisKKwluZXdfc3RyX3NldCA9IHN0cmluZ19zZXRf aW5pdCgpOworCXNldF9zaXplID0gc3RyaW5nX3NldF9nZXRfc2l6ZShpbnB1dF9zdHJfc2V0KTsK KwlpZiAoc2V0X3NpemUgPT0gMCkJCQkvKiBpZiB0aGVyZSdzIG5vIHJvdyBpbiBpbnB1dCwgcmV0 dXJuIGVtcHR5CisJCQkJCQkJCSAqIHNldCAqLworCQlyZXR1cm4gbmV3X3N0cl9zZXQ7CisKKwly ZXN1bHRsZW4gPSAwOworCisJLyoKKwkgKiBHZW5lcmF0ZSBpbml0aWFsIG5ld19zdHJpbmdfc2V0 IGZvciBpbnB1dCByb3cgMC4KKwkgKi8KKwlzdHIgPSBzdHJpbmdfc2V0X2dldChpbnB1dF9zdHJf c2V0LCAwLCAmaW5mbyk7CisJcCA9IHN0ci0+ZGF0YTsKKworCS8qCisJICogTG9vcCBvdmVyIGVh Y2ggbmV3IHBhdHRlcm4gdmFyaWFibGUgY2hhci4KKwkgKi8KKwl3aGlsZSAoKnApCisJeworCQlT dHJpbmdJbmZvCW5ldyA9IG1ha2VTdHJpbmdJbmZvKCk7CisKKwkJLyogYWRkIHBhdHRlcm4gdmFy aWFibGUgY2hhciAqLworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihuZXcsICpwKTsKKwkJLyogYWRk IG5ldyBvbmUgdG8gc3RyaW5nIHNldCAqLworCQlzdHJpbmdfc2V0X2FkZChuZXdfc3RyX3NldCwg bmV3LCAwKTsKKwkJcCsrOwkJCQkJLyogbmV4dCBwYXR0ZXJuIHZhcmlhYmxlICovCisJfQorCisJ LyoKKwkgKiBHZW5lcmF0ZSBuZXdfc3RyaW5nX3NldCBmb3IgZWFjaCBpbnB1dCByb3cuCisJICov CisJZm9yIChpbmRleCA9IDE7IGluZGV4IDwgc2V0X3NpemU7IGluZGV4KyspCisJeworCQkvKiBw cmV2aW91cyBuZXcgc3RyIHNldCBub3cgYmVjb21lcyBvbGQgc3RyIHNldCAqLworCQlvbGRfc3Ry X3NldCA9IG5ld19zdHJfc2V0OworCQluZXdfc3RyX3NldCA9IHN0cmluZ19zZXRfaW5pdCgpOwkv KiBjcmVhdGUgbmV3IHN0cmluZyBzZXQgKi8KKwkJLyogcGljayB1cCBpbnB1dCBzdHJpbmcgKi8K KwkJc3RyID0gc3RyaW5nX3NldF9nZXQoaW5wdXRfc3RyX3NldCwgaW5kZXgsICZpbmZvKTsKKwkJ b2xkX3NldF9zaXplID0gc3RyaW5nX3NldF9nZXRfc2l6ZShvbGRfc3RyX3NldCk7CisKKwkJLyoK KwkJICogTG9vcCBvdmVyIGVhY2ggcm93IGluIHRoZSBwcmV2aW91cyByZXN1bHQgc2V0LgorCQkg Ki8KKwkJZm9yIChpID0gMDsgaSA8IG9sZF9zZXRfc2l6ZTsgaSsrKQorCQl7CisJCQljaGFyCQls YXN0X29sZF9jaGFyOworCQkJaW50CQkJb2xkX3N0cl9sZW47CisJCQlpbnQJCQlvbGRfaW5mbzsK KwkJCVN0cmluZ0luZm8Jb2xkOworCisJCQlvbGQgPSBzdHJpbmdfc2V0X2dldChvbGRfc3RyX3Nl dCwgaSwgJm9sZF9pbmZvKTsKKwkJCXAgPSBvbGQtPmRhdGE7CisJCQlvbGRfc3RyX2xlbiA9IG9s ZC0+bGVuOworCQkJaWYgKG9sZF9zdHJfbGVuID4gMCkKKwkJCQlsYXN0X29sZF9jaGFyID0gcFtv bGRfc3RyX2xlbiAtIDFdOworCQkJZWxzZQorCQkJCWxhc3Rfb2xkX2NoYXIgPSAnXDAnOworCisJ CQkvKiBDYW4gdGhpcyBvbGQgc2V0IGJlIGRpc2NhcmRlZD8gKi8KKwkJCWlmIChvbGRfaW5mbyAm IFNUUlNFVF9ESVNDQVJERUQpCisJCQkJY29udGludWU7CQkvKiBkaXNjYXJkIHRoZSBvbGQgc3Ry aW5nICovCisKKwkJCS8qIElzIHRoaXMgb2xkIHNldCBmcm96ZW4/ICovCisJCQllbHNlIGlmIChv bGRfaW5mbyAmIFNUUlNFVF9GUk9aRU4pCisJCQl7CisJCQkJLyogaWYgc2hvcnRlciBtYXRjaC4g d2UgY2FuIGRpc2NhcmQgaXQgKi8KKwkJCQlpZiAob2xkX3N0cl9sZW4gPCByZXN1bHRsZW4pCisJ CQkJCWNvbnRpbnVlOwkvKiBkaXNjYXJkIHRoZSBzaG9ydGVyIHN0cmluZyAqLworCisJCQkJLyog bW92ZSB0aGUgb2xkIHNldCB0byBuZXdfc3RyX3NldCAqLworCQkJCXN0cmluZ19zZXRfYWRkKG5l d19zdHJfc2V0LCBvbGQsIG9sZF9pbmZvKTsKKwkJCQlvbGRfc3RyX3NldC0+c3RyX3NldFtpXSA9 IE5VTEw7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qCisJCQkgKiBsb29wIG92ZXIgZWFj aCBwYXR0ZXJuIHZhcmlhYmxlIGluaXRpYWwgY2hhciBpbiB0aGUgaW5wdXQgc2V0LgorCQkJICov CisJCQlmb3IgKHAgPSBzdHItPmRhdGE7ICpwOyBwKyspCisJCQl7CisJCQkJLyoKKwkJCQkgKiBP cHRpbWl6YXRpb24uICBDaGVjayBpZiB0aGUgcm93J3MgcGF0dGVybiB2YXJpYWJsZSBpbml0aWFs CisJCQkJICogY2hhcmFjdGVyIHBvc2l0aW9uIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0 aGUgb2xkCisJCQkJICogc2V0J3MgbGFzdCBwYXR0ZXJuIHZhcmlhYmxlIGluaXRpYWwgY2hhcmFj dGVyIHBvc2l0aW9uLiBGb3IKKwkJCQkgKiBleGFtcGxlLCBpZiB0aGUgb2xkIHNldCdzIGxhc3Qg cGF0dGVybiB2YXJpYWJsZSBpbml0aWFscworCQkJCSAqIGFyZSAiYWIiLCB0aGVuIHRoZSBuZXcg cGF0dGVybiB2YXJpYWJsZSBpbml0aWFsIGNhbiBiZSAiYiIKKwkJCQkgKiBvciAiYyIgYnV0IGNh biBub3QgYmUgImEiLCBpZiB0aGUgaW5pdGlhbHMgaW4gUEFUVEVSTiBpcworCQkJCSAqIHNvbWV0 aGluZyBsaWtlICJhIGIgYyIgb3IgImEgYisgYysiIGV0Yy4gIFRoaXMgb3B0aW1pemF0aW9uCisJ CQkJICogaXMgcG9zc2libGUgd2hlbiB3ZSBvbmx5IGFsbG93ICIrIiBxdWFudGlmaWVyLgorCQkJ CSAqLworCQkJCWlmICh2YXJpYWJsZV9wb3NfY29tcGFyZSh2YXJpYWJsZV9wb3MsIGxhc3Rfb2xk X2NoYXIsICpwKSkKKworCQkJCQkvKgorCQkJCQkgKiBTYXRpc2ZpZWQgdGhlIGNvbmRpdGlvbi4g QWRkIG5ldyBwYXR0ZXJuIGNoYXIgdG8KKwkJCQkJICogbmV3X3N0cl9zZXQgaWYgaXQgbG9va3Mg Z29vZC4KKwkJCQkJICovCisJCQkJCXJlc3VsdGxlbiA9IGFkZF9wYXR0ZXJuKG9sZCwgb2xkX2lu Zm8sIG5ld19zdHJfc2V0LCAqcCwKKwkJCQkJCQkJCQkJcGF0dGVybiwgdGFpbF9wYXR0ZXJuX2lu aXRpYWwsIHJlc3VsdGxlbik7CisJCQkJZWxzZQorCisJCQkJCS8qCisJCQkJCSAqIFRoZSBvbGRf c3RyIGRpZCBub3Qgc2F0aXNmeSB0aGUgY29uZGl0aW9uIGFuZCBpdCBjYW5ub3QKKwkJCQkJICog YmUgZXh0ZW5kZWQgZnVydGhlci4gIkZyZWV6ZSIgaXQuCisJCQkJCSAqLworCQkJCQlyZXN1bHRs ZW4gPSBmcmVlemVfcGF0dGVybihvbGQsIG9sZF9pbmZvLAorCQkJCQkJCQkJCQkgICBuZXdfc3Ry X3NldCwgcGF0dGVybiwgcmVzdWx0bGVuKTsKKwkJCX0KKwkJfQorCQkvKiB3ZSBubyBsb25nZXIg bmVlZCBvbGQgc3RyaW5nIHNldCAqLworCQlzdHJpbmdfc2V0X2Rpc2NhcmQob2xkX3N0cl9zZXQp OworCX0KKwlyZXR1cm4gbmV3X3N0cl9zZXQ7Cit9CisKKy8qCisgKiBhZGRfcGF0dGVybgorICoK KyAqIE1ha2UgYSBjb3B5IG9mICdvbGQnIChhbG9uZyB3aXRoICdvbGRfaW5mbycgZmxhZykgYW5k IGFkZCBuZXcgcGF0dGVybiBjaGFyCisgKiAnYycgdG8gaXQuIFRoZW4gYWRkIGl0IHRvICduZXdf c3RyX3NldCcuICdwYXR0ZXJuJyBhbmQKKyAqICd0YWlsX3BhdHRlcm5faW5pdGlhbCcgaXMgY2hl Y2tlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgY29weSBpcyB3b3J0aCB0bworICogYWRkIHRv IG5ld19zdHJfc2V0IG9yIG5vdC4gIFRoZSBtYXRjaCBsZW5ndGggKHBvc3NpYmx5IGxvbmdlciB0 aGFuCisgKiAncmVzdWx0bGVuJykgaXMgcmV0dXJuZWQuCisgKi8KK3N0YXRpYworaW50CithZGRf cGF0dGVybihTdHJpbmdJbmZvIG9sZCwgaW50IG9sZF9pbmZvLCBTdHJpbmdTZXQgKm5ld19zdHJf c2V0LCBjaGFyIGMsCisJCQljaGFyICpwYXR0ZXJuLCBjaGFyIHRhaWxfcGF0dGVybl9pbml0aWFs LCBpbnQgcmVzdWx0bGVuKQoreworCVN0cmluZ0luZm8JbmV3OworCWludAkJCWluZm87CisJaW50 CQkJbGVuOworCisJLyoKKwkgKiBOZXcgY2hhciBpbiB0aGUgaW5wdXQgcm93IHNhdGlzZmllcyB0 aGUgY29uZGl0aW9uIGFib3ZlLgorCSAqLworCW5ldyA9IG1ha2VTdHJpbmdJbmZvRXh0KG9sZC0+ bGVuICsgMSk7CQkvKiBjb3B5IHNvdXJjZSBzdHJpbmcgKi8KKwlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKG5ldywgb2xkLT5kYXRhKTsKKworCS8qIGFkZCBwYXR0ZXJuIHZhcmlhYmxlIGNoYXIgKi8K KwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihuZXcsIGMpOworCisJLyoKKwkgKiBBZGhvYyBvcHRpbWl6 YXRpb24uIElmIHRoZSBmaXJzdCBsZXR0ZXIgaW4gdGhlIGlucHV0IHN0cmluZyBpcyBpbiB0aGUK KwkgKiBoZWFkIGFuZCBzZWNvbmQgcG9zaXRpb24gYW5kIHRoZXJlJ3Mgbm8gYXNzb2NpYXRlZCBx dWF0aWZpZXIgJysnLCB0aGVuCisJICogd2UgY2FuIGRpY2FyZCB0aGUgaW5wdXQgYmVjYXVzZSB0 aGVyZSdzIG5vIGNoYW5jZSB0byBleHBhbmQgdGhlIHN0cmluZworCSAqIGZ1cnRoZXIuCisJICoK KwkgKiBGb3IgZXhhbXBsZSwgcGF0dGVybiAiYWJjIiBjYW5ub3QgbWF0Y2ggImFhIi4KKwkgKi8K KwlpZiAocGF0dGVyblsxXSA9PSBuZXctPmRhdGFbMF0gJiYKKwkJcGF0dGVyblsxXSA9PSBuZXct PmRhdGFbMV0gJiYKKwkJcGF0dGVyblsyXSAhPSAnKycgJiYKKwkJcGF0dGVyblsxXSAhPSBwYXR0 ZXJuWzJdKQorCXsKKwkJZGVzdHJveVN0cmluZ0luZm8obmV3KTsKKwkJcmV0dXJuIHJlc3VsdGxl bjsKKwl9CisKKwlpbmZvID0gb2xkX2luZm87CisKKwkvKgorCSAqIENoZWNrIGlmIHdlIGNhbiBh cHBseSAidGFpbCBwYXR0ZXJuIGluaXRpYWwgb3B0aW1pemF0aW9uIi4gIElmIHRoZSBsYXN0CisJ ICogcmVnZXhwIGNvbXBvbmVudCBpbiBwYXR0ZXJuIGhhcyAnKycgcXVhbnRpZmllciwgdGhlIGNv bXBvbmVudCBpcyBzZXQgdG8KKwkgKiB0aGUgbGFzdCBwYXR0ZXJuIGluaXRpYWwuICBGb3IgZXhh bXBsZSBpZiBwYXR0ZXJuIGlzICJhYisiLAorCSAqIHRhaWxfcGF0dGVybl9pbml0aWFsIHdpbGwg YmVjb21lICdiJy4gT3RoZXJ3aXNlLCB0YWlsX3BhdHRlcm5faW5pdGlhbAorCSAqIGlzICdcMCcu IElmIHRoZSB0YWlsIHBhdHRlcm4gaW5pdGlhbCBvcHRpbWl6YXRpb24gaXMgcG9zc2libGUsIHdl IGRvCisJICogbm90IG5lZWQgdG8gYXBwbHkgcmVndWxhciBleHByZXNzaW9uIG1hdGNoIGFnYWlu LiAgU3VwcG9zZSB3ZSBoYXZlIHRoZQorCSAqIHByZXZpb3VzIHN0cmluZyBlbmRlZCB3aXRoICJi IiBhbmQgdGhlIGl0IHdhcyBjb25maXJtZWQgdGhlIHJlZ3VsYXIKKwkgKiBleHByZXNzaW9uIG1h dGNoLCB0aGVuIGNoYXIgJ2InIGNhbiBiZSBhZGRlZCB0byB0aGUgc3RyaW5nIHdpdGhvdXQKKwkg KiBhcHBseWluZyB0aGUgcmVndWxhciBleHByZXNzaW9uIG1hdGNoIGFnYWluLgorCSAqLworCWlm IChjID09IHRhaWxfcGF0dGVybl9pbml0aWFsKQkvKiB0YWlsIHBhdHRlcm4gaW5pdGlhbCBvcHRp bWl6YXRpb24KKwkJCQkJCQkJCSAqIHBvc3NpYmxlPyAqLworCXsKKwkJLyoKKwkJICogSXMgYWxy ZWFkeSBjb25maXJtZWQgdG8gYmUgbWF0Y2hlZCB3aXRoIHBhdHRlcm4/CisJCSAqLworCQlpZiAo KGluZm8gJiBTVFJTRVRfTUFUQ0hFRCkgPT0gMCkKKwkJeworCQkJLyogbm90IGNvbmZpcm1lZCB5 ZXQgKi8KKwkJCWxlbiA9IGRvX3BhdHRlcm5fbWF0Y2gocGF0dGVybiwgbmV3LT5kYXRhLCBuZXct Pmxlbik7CisJCQlpZiAobGVuID4gMCkKKwkJCQlpbmZvID0gU1RSU0VUX01BVENIRUQ7CS8qIHNl dCBhbHJlYWR5IGNvbmZpcm1lZCBmbGFnICovCisJCX0KKwkJZWxzZQorCisJCQkvKgorCQkJICog YWxyZWFkeSBjb25maXJtZWQuIFVzZSB0aGUgc3RyaW5nIGxlbmd0aCBhcyB0aGUgbWF0Y2hpbmcg bGVuZ3RoCisJCQkgKi8KKwkJCWxlbiA9IG5ldy0+bGVuOworCisJCS8qIHVwZGF0ZSB0aGUgbG9u Z2VzdCBtYXRjaCBsZW5ndGggaWYgbmVlZGVkICovCisJCWlmIChsZW4gPiByZXN1bHRsZW4pCisJ CQlyZXN1bHRsZW4gPSBsZW47CisJfQorCisJLyogYWRkIG5ldyBTdHJpbmdJbmZvIHRvIHRoZSBz dHJpbmcgc2V0ICovCisJc3RyaW5nX3NldF9hZGQobmV3X3N0cl9zZXQsIG5ldywgaW5mbyk7CisK KwlyZXR1cm4gcmVzdWx0bGVuOworfQorCisvKgorICogZnJlZXplX3BhdHRlcm4KKyAqCisgKiAi RnJlZXplIiAnb2xkJyAoYWxvbmcgd2l0aCAnb2xkX2luZm8nIGZsYWcpIGFuZCBhZGQgaXQgdG8K KyAqICduZXdfc3RyX3NldCcuIEZyb3plbiBzdHJpbmcgaXMga25vd24gdG8gbm90IGJlIGV4cGFu ZGVkIGZ1cnRoZXIuIFRoZSBmcm96ZW4KKyAqIHN0cmluZyBpcyBjaGVjayBpZiBpdCBzYXRpc2Zp ZXMgJ3BhdHRlcm4nLiAgSWYgaXQgZG9lcyBub3QsICJkaXNjYXJkZWQiCisgKiBtYXJrIGlzIGFk ZGVkLiBUaGUgZGlzY2FyZGVkIG1hcmsgaXMgYWxzbyBhZGRlZCBpZiB0aGUgbWF0Y2ggbGVuZ3Ro IGlzCisgKiBzaG9ydGVyIHRoYW4gdGhlIGN1cnJlbnQgbG9uZ2VzdCBtYXRjaCBsZW5ndGguIFRo ZSBtYXRjaCBsZW5ndGggKHBvc3NpYmx5CisgKiBsb25nZXIgdGhhbiAncmVzdWx0bGVuJykgaXMg cmV0dXJuZWQuCisgKi8KK3N0YXRpYworaW50CitmcmVlemVfcGF0dGVybihTdHJpbmdJbmZvIG9s ZCwgaW50IG9sZF9pbmZvLCBTdHJpbmdTZXQgKm5ld19zdHJfc2V0LAorCQkJICAgY2hhciAqcGF0 dGVybiwgaW50IHJlc3VsdGxlbikKK3sKKwlpbnQJCQlsZW47CisJU3RyaW5nSW5mbwluZXc7CisJ aW50CQkJbmV3X3N0cl9zaXplOworCWludAkJCW5ld19pbmRleDsKKworCS8qCisJICogV2UgYXJl IGZyZWV6aW5nIHRoaXMgcGF0dGVybiBzdHJpbmcuICBJZiB0aGUgcGF0dGVybiBzdHJpbmcgbGVu Z3RoIGlzCisJICogc2hvcnRlciB0aGFuIHRoZSBjdXJyZW50IGxvbmdlc3Qgc3RyaW5nIGxlbmd0 aCwgd2UgZG9uJ3QgbmVlZCB0byBrZWVwCisJICogaXQuCisJICovCisJaWYgKG9sZC0+bGVuIDwg cmVzdWx0bGVuKQorCQlyZXR1cm4gcmVzdWx0bGVuOworCisJaWYgKG9sZF9pbmZvICYgU1RSU0VU X01BVENIRUQpCisJCS8qIHdlIGRvbid0IG5lZWQgdG8gYXBwbHkgcGF0dGVybiBtYXRjaCBhZ2Fp biAqLworCQlsZW4gPSBvbGQtPmxlbjsKKwllbHNlCisJeworCQkvKiBhcHBseSBwYXR0ZXJuIG1h dGNoICovCisJCWxlbiA9IGRvX3BhdHRlcm5fbWF0Y2gocGF0dGVybiwgb2xkLT5kYXRhLCBvbGQt Pmxlbik7CisJCWlmIChsZW4gPD0gMCkKKwkJeworCQkJLyogbm8gbWF0Y2guIHdlIGNhbiBkaXNj YXJkIGl0ICovCisJCQlyZXR1cm4gcmVzdWx0bGVuOworCQl9CisJfQorCWlmIChsZW4gPCByZXN1 bHRsZW4pCisJeworCQkvKiBzaG9ydGVyIG1hdGNoLiB3ZSBjYW4gZGlzY2FyZCBpdCAqLworCQly ZXR1cm4gcmVzdWx0bGVuOworCX0KKworCS8qCisJICogTWF0Y2ggbGVuZ3RoIGlzIHRoZSBsb25n ZXN0IHNvIGZhcgorCSAqLworCXJlc3VsdGxlbiA9IGxlbjsJCQkvKiByZW1lbWJlciB0aGUgbG9u Z2VzdCBtYXRjaCAqLworCisJLyogZnJlZXplIHRoZSBwYXR0ZXJuIHN0cmluZyAqLworCW5ldyA9 IG1ha2VTdHJpbmdJbmZvKCk7CisJZW5sYXJnZVN0cmluZ0luZm8obmV3LCBvbGQtPmxlbiArIDEp OworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcobmV3LCBvbGQtPmRhdGEpOworCS8qIHNldCBmcm96 ZW4gbWFyayAqLworCXN0cmluZ19zZXRfYWRkKG5ld19zdHJfc2V0LCBuZXcsIFNUUlNFVF9GUk9a RU4pOworCisJLyoKKwkgKiBTZWFyY2ggbmV3X3N0cl9zZXQgdG8gZmluZCBvdXQgZnJvemVuIGVu dHJpZXMgdGhhdCBoYXZlIHNob3J0ZXIgbWF0Y2gKKwkgKiBsZW5ndGguIE1hcmsgdGhlbSBhcyAi ZGlzY2FyZCIgc28gdGhhdCB0aGV5IGFyZSBkaXNjYXJkZWQgaW4gdGhlIG5leHQKKwkgKiByb3Vu ZC4KKwkgKi8KKwluZXdfc3RyX3NpemUgPQorCQlzdHJpbmdfc2V0X2dldF9zaXplKG5ld19zdHJf c2V0KSAtIDE7CisKKwkvKiBsb29wIG92ZXIgbmV3X3N0cl9zZXQgKi8KKwlmb3IgKG5ld19pbmRl eCA9IDA7IG5ld19pbmRleCA8IG5ld19zdHJfc2l6ZTsgbmV3X2luZGV4KyspCisJeworCQlpbnQJ CQlpbmZvOworCisJCW5ldyA9IHN0cmluZ19zZXRfZ2V0KG5ld19zdHJfc2V0LCBuZXdfaW5kZXgs ICZpbmZvKTsKKworCQkvKgorCQkgKiBJZiB0aGlzIGlzIGZyb3plbiBhbmQgaXMgbm90IGxvbmdl ciB0aGFuIHRoZSBjdXJyZW50IGxvbmdlc3QgbWF0Y2gKKwkJICogbGVuZ3RoLCB3ZSBkb24ndCBu ZWVkIHRvIGtlZXAgdGhpcy4KKwkJICovCisJCWlmIChpbmZvICYgU1RSU0VUX0ZST1pFTiAmJiBu ZXctPmxlbiA8IHJlc3VsdGxlbikKKwkJeworCQkJLyoKKwkJCSAqIG1hcmsgdGhpcyBzZXQgdG8g ZGlzY2FyZCBpbiB0aGUgbmV4dCByb3VuZAorCQkJICovCisJCQlpbmZvIHw9IFNUUlNFVF9ESVND QVJERUQ7CisJCQluZXdfc3RyX3NldC0+aW5mb1tuZXdfaW5kZXhdID0gaW5mbzsKKwkJfQorCX0K KwlyZXR1cm4gcmVzdWx0bGVuOworfQorCisvKgorICogZG9fcGF0dGVybl9tYXRjaAorICoKKyAq IFBlcmZvcm0gcGF0dGVybiBtYXRjaCB1c2luZyAncGF0dGVybicgYWdhaW5zdCAnZW5jb2RlZF9z dHInIHdob3NlIGxlbmd0aCBpcworICogJ2xlbicgYnl0ZXMgKHdpdGhvdXQgbnVsbCB0ZXJtaW5h dGUpLiAgUmV0dXJucyBtYXRjaGluZyBudW1iZXIgb2Ygcm93cyBpZgorICogbWF0Y2hpbmcgaXMg c3VjY2VlZGVkLiAgT3RoZXJ3aXNlIHJldHVybnMgMC4KKyAqLworc3RhdGljCitpbnQKK2RvX3Bh dHRlcm5fbWF0Y2goY2hhciAqcGF0dGVybiwgY2hhciAqZW5jb2RlZF9zdHIsIGludCBsZW4pCit7 CisJc3RhdGljIHJlZ2V4X3QgKnJlZ2NhY2hlID0gTlVMTDsKKwlzdGF0aWMgcmVnZXhfdCBwcmVn OworCXN0YXRpYyBjaGFyIHBhdGJ1ZlsxMDI0XTsJLyogbW9zdCByZWNlbnQgJ3BhdHRlcm4nIGlz IGNhY2hlZCBoZXJlICovCisJaW50CQkJcGxlbjsKKwlpbnQJCQljZmxhZ3MgPSBSRUdfRVhURU5E RUQ7CisJc2l6ZV90CQlubWF0Y2ggPSAxOworCWludAkJCWVmbGFncyA9IDA7CisJcmVnbWF0Y2hf dAlwbWF0Y2hbMV07CisJaW50CQkJc3RzOworCXBnX3djaGFyICAgKmRhdGE7CisJaW50CQkJZGF0 YV9sZW47CisKKwkvKgorCSAqIENvbXBpbGUgcmVnZXhwIGlmIGNhY2hlIGRvZXMgbm90IGV4aXN0 IG9yIGV4aXN0aW5nIGNhY2hlIGlzIG5vdCBzYW1lIGFzCisJICogInBhdHRlcm4iLgorCSAqLwor CWlmIChzdHJjbXAocGF0YnVmLCBwYXR0ZXJuKSkKKwl7CisJCS8qCisJCSAqIFRoZSBjb21waWxl ZCByZSBtdXN0IGxpdmUgaW4gdG9wIG1lbW9yeSBjb250ZXh0IGJlY2F1c2UgcGF0YnVmIGlzCisJ CSAqIHN0YXRpYyBkYXRhLgorCQkgKi8KKwkJTWVtb3J5Q29udGV4dCBvbGRDb250ZXh0ID0gTWVt b3J5Q29udGV4dFN3aXRjaFRvKFRvcE1lbW9yeUNvbnRleHQpOworCisJCWlmIChyZWdjYWNoZSAh PSBOVUxMKQorCQkJcGdfcmVnZnJlZShyZWdjYWNoZSk7CS8qIGZyZWUgcHJldmlvdXMgcmUgKi8K KworCQkvKiB3ZSBuZWVkIHRvIGNvbnZlcnQgdG8gY2hhciB0byBwZ193Y2hhciAqLworCQlwbGVu ID0gc3RybGVuKHBhdHRlcm4pOworCQlkYXRhID0gKHBnX3djaGFyICopIHBhbGxvYygocGxlbiAr IDEpICogc2l6ZW9mKHBnX3djaGFyKSk7CisJCWRhdGFfbGVuID0gcGdfbWIyd2NoYXJfd2l0aF9s ZW4ocGF0dGVybiwgZGF0YSwgcGxlbik7CisJCS8qIGNvbXBpbGUgcmUgKi8KKwkJc3RzID0gcGdf cmVnY29tcCgmcHJlZywgLyogY29tcGlsZWQgcmUgKi8KKwkJCQkJCSBkYXRhLAkvKiB0YXJnZXQg cGF0dGVybiAqLworCQkJCQkJIGRhdGFfbGVuLAkvKiBsZW5ndGggb2YgcGF0dGVybiAqLworCQkJ CQkJIGNmbGFncywJLyogY29tcGlsZSBvcHRpb24gKi8KKwkJCQkJCSBDX0NPTExBVElPTl9PSUQJ LyogY29sbGF0aW9uICovCisJCQkpOworCQlwZnJlZShkYXRhKTsKKworCQlNZW1vcnlDb250ZXh0 U3dpdGNoVG8ob2xkQ29udGV4dCk7CisKKwkJaWYgKHN0cyAhPSBSRUdfT0tBWSkKKwkJeworCQkJ LyogcmUgZGlkbid0IGNvbXBpbGUgKG5vIG5lZWQgZm9yIHBnX3JlZ2ZyZWUsIGlmIHNvKSAqLwor CQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1JFR1VMQVJf RVhQUkVTU0lPTiksCisJCQkJCSBlcnJtc2coImludmFsaWQgcmVndWxhciBleHByZXNzaW9uOiAl cyIsIHBhdHRlcm4pKSk7CisJCX0KKworCQkvKiBzYXZlIGNhY2hlICovCisJCXJlZ2NhY2hlID0g JnByZWc7CisJCXN0cm5jcHkocGF0YnVmLCBwYXR0ZXJuLCBzaXplb2YocGF0YnVmKSk7CisJfQor CisJZGF0YSA9IChwZ193Y2hhciAqKSBwYWxsb2MoKGxlbiArIDEpICogc2l6ZW9mKHBnX3djaGFy KSk7CisJZGF0YV9sZW4gPSBwZ19tYjJ3Y2hhcl93aXRoX2xlbihlbmNvZGVkX3N0ciwgZGF0YSwg bGVuKTsKKworCS8qIGV4ZWN1dGUgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaCAqLworCXN0 cyA9IHBnX3JlZ2V4ZWMoCisJCQkJCSAmcHJlZywJCS8qIGNvbXBpbGVkIHJlICovCisJCQkJCSBk YXRhLAkJLyogdGFyZ2V0IHN0cmluZyAqLworCQkJCQkgZGF0YV9sZW4sCS8qIGxlbmd0aCBvZiBl bmNvZGVkX3N0ciAqLworCQkJCQkgMCwJCQkvKiBzZWFyY2ggc3RhcnQgKi8KKwkJCQkJIE5VTEws CQkvKiBybSBkZXRhaWxzICovCisJCQkJCSBubWF0Y2gsCS8qIG51bWJlciBvZiBtYXRjaCBzdWIg cmUgKi8KKwkJCQkJIHBtYXRjaCwJLyogbWF0Y2ggcmVzdWx0IGRldGFpbHMgKi8KKwkJCQkJIGVm bGFncyk7CisKKwlwZnJlZShkYXRhKTsKKworCWlmIChzdHMgIT0gUkVHX09LQVkpCisJeworCQlp ZiAoc3RzICE9IFJFR19OT01BVENIKQorCQl7CisJCQljaGFyCQllcnJNc2dbMTAwXTsKKworCQkJ cGdfcmVnZXJyb3Ioc3RzLCAmcHJlZywgZXJyTXNnLCBzaXplb2YoZXJyTXNnKSk7CisJCQllcmVw b3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUkVHVUxBUl9FWFBSRVNT SU9OKSwKKwkJCQkJIGVycm1zZygicmVndWxhciBleHByZXNzaW9uIGZhaWxlZDogJXMiLCBlcnJN c2cpKSk7CisJCX0KKwkJcmV0dXJuIDA7CQkJCS8qIGRvZXMgbm90IG1hdGNoICovCisJfQorCisJ bGVuID0gcG1hdGNoWzBdLnJtX2VvOwkJLyogcmV0dXJuIG1hdGNoIGxlbmd0aCAqLworCXJldHVy biBsZW47CisKK30KKworLyoKKyAqIGV2YWx1YXRlX3BhdHRlcm4KKyAqCisgKiBFdmFsdWF0ZSBl eHByZXNzaW9uIGFzc29jaWF0ZWQgd2l0aCBQQVRURVJOIHZhcmlhYmxlIHZuYW1lLiAgY3VycmVu dF9wb3MgaXMKKyAqIHJlbGF0aXZlIHJvdyBwb3NpdGlvbiBpbiBhIGZyYW1lIChzdGFydGluZyBm cm9tIDApLiBJZiB2bmFtZSBpcyBldmFsdWF0ZWQKKyAqIHRvIHRydWUsIGluaXRpYWwgbGV0dGVy cyBhc3NvY2lhdGVkIHdpdGggdm5hbWUgaXMgYXBwZW5kZWQgdG8KKyAqIGVuY29kZV9zdHIuIHJl c3VsdCBpcyBvdXQgcGFyYW1hdGVyIHJlcHJlc2VudGluZyB0aGUgZXhwcmVzc2lvbiBldmFsdWF0 aW9uCisgKiByZXN1bHQgaXMgdHJ1ZSBvZiBmYWxzZS4KKyAqLS0tLS0tLS0tCisgKiBSZXR1cm4g dmFsdWVzIGFyZToKKyAqID49MDogdGhlIGxhc3QgbWF0Y2ggYWJzb2x1dGUgcm93IHBvc2l0aW9u CisgKiBvdGhlcndpc2Ugb3V0IG9mIGZyYW1lLgorICotLS0tLS0tLS0KKyAqLworc3RhdGljCitp bnQ2NAorZXZhbHVhdGVfcGF0dGVybihXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQ2NCBjdXJyZW50 X3BvcywKKwkJCQkgY2hhciAqdm5hbWUsIFN0cmluZ0luZm8gZW5jb2RlZF9zdHIsIGJvb2wgKnJl c3VsdCkKK3sKKwlXaW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGUgPSB3aW5vYmotPndpbnN0YXRlOwor CUV4cHJDb250ZXh0ICplY29udGV4dCA9IHdpbnN0YXRlLT5zcy5wcy5wc19FeHByQ29udGV4dDsK KwlMaXN0Q2VsbCAgICpsYzEsCisJCQkgICAqbGMyLAorCQkJICAgKmxjMzsKKwlFeHByU3RhdGUg ICpwYXQ7CisJRGF0dW0JCWV2YWxfcmVzdWx0OworCWJvb2wJCW91dF9vZl9mcmFtZSA9IGZhbHNl OworCWJvb2wJCWlzbnVsbDsKKwlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKKworCWZvcnRocmVlKGxj MSwgd2luc3RhdGUtPmRlZmluZVZhcmlhYmxlTGlzdCwKKwkJCSBsYzIsIHdpbnN0YXRlLT5kZWZp bmVDbGF1c2VMaXN0LAorCQkJIGxjMywgd2luc3RhdGUtPmRlZmluZUluaXRpYWwpCisJeworCQlj aGFyCQlpbml0aWFsOwkvKiBpbml0aWFsIGxldHRlciBhc3NvY2lhdGVkIHdpdGggdm5hbWUgKi8K KwkJY2hhcgkgICAqbmFtZSA9IHN0clZhbChsZmlyc3QobGMxKSk7CisKKwkJaWYgKHN0cmNtcCh2 bmFtZSwgbmFtZSkpCisJCQljb250aW51ZTsKKworCQlpbml0aWFsID0gKihzdHJWYWwobGZpcnN0 KGxjMykpKTsKKworCQkvKiBzZXQgZXhwcmVzc2lvbiB0byBldmFsdWF0ZSAqLworCQlwYXQgPSBs Zmlyc3QobGMyKTsKKworCQkvKiBnZXQgY3VycmVudCwgcHJldmlvdXMgYW5kIG5leHQgdHVwbGVz ICovCisJCWlmICghZ2V0X3Nsb3RzKHdpbm9iaiwgY3VycmVudF9wb3MpKQorCQl7CisJCQlvdXRf b2ZfZnJhbWUgPSB0cnVlOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogZXZhbHVhdGUgdGhlIGV4 cHJlc3Npb24gKi8KKwkJCWV2YWxfcmVzdWx0ID0gRXhlY0V2YWxFeHByKHBhdCwgZWNvbnRleHQs ICZpc251bGwpOworCQkJaWYgKGlzbnVsbCkKKwkJCXsKKwkJCQkvKiBleHByZXNzaW9uIGlzIE5V TEwgKi8KKyNpZmRlZiBSUFJfREVCVUcKKwkJCQllbG9nKERFQlVHMSwgImV4cHJlc3Npb24gZm9y ICVzIGlzIE5VTEwgYXQgcm93OiAiIElOVDY0X0ZPUk1BVCwKKwkJCQkJIHZuYW1lLCBjdXJyZW50 X3Bvcyk7CisjZW5kaWYKKwkJCQkqcmVzdWx0ID0gZmFsc2U7CisJCQl9CisJCQllbHNlCisJCQl7 CisJCQkJaWYgKCFEYXR1bUdldEJvb2woZXZhbF9yZXN1bHQpKQorCQkJCXsKKwkJCQkJLyogZXhw cmVzc2lvbiBpcyBmYWxzZSAqLworI2lmZGVmIFJQUl9ERUJVRworCQkJCQllbG9nKERFQlVHMSwg ImV4cHJlc3Npb24gZm9yICVzIGlzIGZhbHNlIGF0IHJvdzogIiBJTlQ2NF9GT1JNQVQsCisJCQkJ CQkgdm5hbWUsIGN1cnJlbnRfcG9zKTsKKyNlbmRpZgorCQkJCQkqcmVzdWx0ID0gZmFsc2U7CisJ CQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCS8qIGV4cHJlc3Npb24gaXMgdHJ1ZSAqLworI2lm ZGVmIFJQUl9ERUJVRworCQkJCQllbG9nKERFQlVHMSwgImV4cHJlc3Npb24gZm9yICVzIGlzIHRy dWUgYXQgcm93OiAiIElOVDY0X0ZPUk1BVCwKKwkJCQkJCSB2bmFtZSwgY3VycmVudF9wb3MpOwor I2VuZGlmCisJCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGVuY29kZWRfc3RyLCBpbml0aWFsKTsK KwkJCQkJKnJlc3VsdCA9IHRydWU7CisJCQkJfQorCQkJfQorCisJCQlzbG90ID0gd2luc3RhdGUt PnRlbXBfc2xvdF8xOworCQkJaWYgKHNsb3QgIT0gd2luc3RhdGUtPm51bGxfc2xvdCkKKwkJCQlF eGVjQ2xlYXJUdXBsZShzbG90KTsKKwkJCXNsb3QgPSB3aW5zdGF0ZS0+cHJldl9zbG90OworCQkJ aWYgKHNsb3QgIT0gd2luc3RhdGUtPm51bGxfc2xvdCkKKwkJCQlFeGVjQ2xlYXJUdXBsZShzbG90 KTsKKwkJCXNsb3QgPSB3aW5zdGF0ZS0+bmV4dF9zbG90OworCQkJaWYgKHNsb3QgIT0gd2luc3Rh dGUtPm51bGxfc2xvdCkKKwkJCQlFeGVjQ2xlYXJUdXBsZShzbG90KTsKKworCQkJYnJlYWs7CisJ CX0KKworCQlpZiAob3V0X29mX2ZyYW1lKQorCQl7CisJCQkqcmVzdWx0ID0gZmFsc2U7CisJCQly ZXR1cm4gLTE7CisJCX0KKwl9CisJcmV0dXJuIGN1cnJlbnRfcG9zOworfQorCisvKgorICogZ2V0 X3Nsb3RzCisgKgorICogR2V0IGN1cnJlbnQsIHByZXZpb3VzIGFuZCBuZXh0IHR1cGxlcy4KKyAq IFJldHVybnMgZmFsc2UgaWYgY3VycmVudCByb3cgaXMgb3V0IG9mIHBhcnRpdGlvbi9mdWxsIGZy YW1lLgorICovCitzdGF0aWMKK2Jvb2wKK2dldF9zbG90cyhXaW5kb3dPYmplY3Qgd2lub2JqLCBp bnQ2NCBjdXJyZW50X3BvcykKK3sKKwlXaW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGUgPSB3aW5vYmot PndpbnN0YXRlOworCVR1cGxlVGFibGVTbG90ICpzbG90OworCWludAkJCXJldDsKKwlFeHByQ29u dGV4dCAqZWNvbnRleHQ7CisKKwllY29udGV4dCA9IHdpbnN0YXRlLT5zcy5wcy5wc19FeHByQ29u dGV4dDsKKworCS8qIHNldCB1cCBjdXJyZW50IHJvdyB0dXBsZSBzbG90ICovCisJc2xvdCA9IHdp bnN0YXRlLT50ZW1wX3Nsb3RfMTsKKwlpZiAoIXdpbmRvd19nZXR0dXBsZXNsb3Qod2lub2JqLCBj dXJyZW50X3Bvcywgc2xvdCkpCisJeworI2lmZGVmIFJQUl9ERUJVRworCQllbG9nKERFQlVHMSwg ImN1cnJlbnQgcm93IGlzIG91dCBvZiBwYXJ0aXRpb24gYXQ6IiBJTlQ2NF9GT1JNQVQsCisJCQkg Y3VycmVudF9wb3MpOworI2VuZGlmCisJCXJldHVybiBmYWxzZTsKKwl9CisJcmV0ID0gcm93X2lz X2luX2ZyYW1lKHdpbnN0YXRlLCBjdXJyZW50X3Bvcywgc2xvdCk7CisJaWYgKHJldCA8PSAwKQor CXsKKyNpZmRlZiBSUFJfREVCVUcKKwkJZWxvZyhERUJVRzEsICJjdXJyZW50IHJvdyBpcyBvdXQg b2YgZnJhbWUgYXQ6ICIgSU5UNjRfRk9STUFULAorCQkJIGN1cnJlbnRfcG9zKTsKKyNlbmRpZgor CQlFeGVjQ2xlYXJUdXBsZShzbG90KTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwllY29udGV4dC0+ ZWN4dF9vdXRlcnR1cGxlID0gc2xvdDsKKworCS8qIGZvciBQUkVWICovCisJaWYgKGN1cnJlbnRf cG9zID4gMCkKKwl7CisJCXNsb3QgPSB3aW5zdGF0ZS0+cHJldl9zbG90OworCQlpZiAoIXdpbmRv d19nZXR0dXBsZXNsb3Qod2lub2JqLCBjdXJyZW50X3BvcyAtIDEsIHNsb3QpKQorCQl7CisjaWZk ZWYgUlBSX0RFQlVHCisJCQllbG9nKERFQlVHMSwgInByZXZpb3VzIHJvdyBpcyBvdXQgb2YgcGFy dGl0aW9uIGF0OiAiIElOVDY0X0ZPUk1BVCwKKwkJCQkgY3VycmVudF9wb3MgLSAxKTsKKyNlbmRp ZgorCQkJZWNvbnRleHQtPmVjeHRfc2NhbnR1cGxlID0gd2luc3RhdGUtPm51bGxfc2xvdDsKKwkJ fQorCQllbHNlCisJCXsKKwkJCXJldCA9IHJvd19pc19pbl9mcmFtZSh3aW5zdGF0ZSwgY3VycmVu dF9wb3MgLSAxLCBzbG90KTsKKwkJCWlmIChyZXQgPD0gMCkKKwkJCXsKKyNpZmRlZiBSUFJfREVC VUcKKwkJCQllbG9nKERFQlVHMSwgInByZXZpb3VzIHJvdyBpcyBvdXQgb2YgZnJhbWUgYXQ6ICIg SU5UNjRfRk9STUFULAorCQkJCQkgY3VycmVudF9wb3MgLSAxKTsKKyNlbmRpZgorCQkJCUV4ZWND bGVhclR1cGxlKHNsb3QpOworCQkJCWVjb250ZXh0LT5lY3h0X3NjYW50dXBsZSA9IHdpbnN0YXRl LT5udWxsX3Nsb3Q7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJZWNvbnRleHQtPmVjeHRfc2Nh bnR1cGxlID0gc2xvdDsKKwkJCX0KKwkJfQorCX0KKwllbHNlCisJCWVjb250ZXh0LT5lY3h0X3Nj YW50dXBsZSA9IHdpbnN0YXRlLT5udWxsX3Nsb3Q7CisKKwkvKiBmb3IgTkVYVCAqLworCXNsb3Qg PSB3aW5zdGF0ZS0+bmV4dF9zbG90OworCWlmICghd2luZG93X2dldHR1cGxlc2xvdCh3aW5vYmos IGN1cnJlbnRfcG9zICsgMSwgc2xvdCkpCisJeworI2lmZGVmIFJQUl9ERUJVRworCQllbG9nKERF QlVHMSwgIm5leHQgcm93IGlzIG91dCBvZiBwYXJ0aXRvbiBhdDogIiBJTlQ2NF9GT1JNQVQsCisJ CQkgY3VycmVudF9wb3MgKyAxKTsKKyNlbmRpZgorCQllY29udGV4dC0+ZWN4dF9pbm5lcnR1cGxl ID0gd2luc3RhdGUtPm51bGxfc2xvdDsKKwl9CisJZWxzZQorCXsKKwkJcmV0ID0gcm93X2lzX2lu X2ZyYW1lKHdpbnN0YXRlLCBjdXJyZW50X3BvcyArIDEsIHNsb3QpOworCQlpZiAocmV0IDw9IDAp CisJCXsKKyNpZmRlZiBSUFJfREVCVUcKKwkJCWVsb2coREVCVUcxLCAibmV4dCByb3cgaXMgb3V0 IG9mIGZyYW1lIGF0OiAiIElOVDY0X0ZPUk1BVCwKKwkJCQkgY3VycmVudF9wb3MgKyAxKTsKKyNl bmRpZgorCQkJRXhlY0NsZWFyVHVwbGUoc2xvdCk7CisJCQllY29udGV4dC0+ZWN4dF9pbm5lcnR1 cGxlID0gd2luc3RhdGUtPm51bGxfc2xvdDsKKwkJfQorCQllbHNlCisJCQllY29udGV4dC0+ZWN4 dF9pbm5lcnR1cGxlID0gc2xvdDsKKwl9CisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBwYXR0 ZXJuX2luaXRpYWwKKyAqCisgKiBSZXR1cm4gcGF0dGVybiB2YXJpYWJsZSBpbml0aWFsIGNoYXJh Y3RlcgorICogbWF0Y2hpbmcgd2l0aCBwYXR0ZXJuIHZhcmlhYmxlIG5hbWUgdm5hbWUuCisgKiBJ ZiBub3QgZm91bmQsIHJldHVybiAwLgorICovCitzdGF0aWMKK2NoYXIKK3BhdHRlcm5faW5pdGlh bChXaW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGUsIGNoYXIgKnZuYW1lKQoreworCWNoYXIJCWluaXRp YWw7CisJY2hhcgkgICAqbmFtZTsKKwlMaXN0Q2VsbCAgICpsYzEsCisJCQkgICAqbGMyOworCisJ Zm9yYm90aChsYzEsIHdpbnN0YXRlLT5kZWZpbmVWYXJpYWJsZUxpc3QsCisJCQlsYzIsIHdpbnN0 YXRlLT5kZWZpbmVJbml0aWFsKQorCXsKKwkJbmFtZSA9IHN0clZhbChsZmlyc3QobGMxKSk7IC8q IERFRklORSB2YXJpYWJsZSBuYW1lICovCisJCWluaXRpYWwgPSAqKHN0clZhbChsZmlyc3QobGMy KSkpOwkvKiBERUZJTkUgdmFyaWFibGUgaW5pdGlhbCAqLworCisKKwkJaWYgKCFzdHJjbXAobmFt ZSwgdm5hbWUpKQorCQkJcmV0dXJuIGluaXRpYWw7CQkvKiBmb3VuZCAqLworCX0KKwlyZXR1cm4g MDsKK30KKworLyoKKyAqIHN0cmluZ19zZXRfaW5pdAorICoKKyAqIENyZWF0ZSBkeW5hbWljIHNl dCBvZiBTdHJpbmdJbmZvLgorICovCitzdGF0aWMKK1N0cmluZ1NldCAqCitzdHJpbmdfc2V0X2lu aXQodm9pZCkKK3sKKy8qIEluaXRpYWwgYWxsb2NhdGlvbiBzaXplIG9mIHN0cl9zZXQgKi8KKyNk ZWZpbmUgU1RSSU5HX1NFVF9BTExPQ19TSVpFCTEwMjQKKworCVN0cmluZ1NldCAgKnN0cmluZ19z ZXQ7CisJU2l6ZQkJc2V0X3NpemU7CisKKwlzdHJpbmdfc2V0ID0gcGFsbG9jMChzaXplb2YoU3Ry aW5nU2V0KSk7CisJc3RyaW5nX3NldC0+c2V0X2luZGV4ID0gMDsKKwlzZXRfc2l6ZSA9IFNUUklO R19TRVRfQUxMT0NfU0laRTsKKwlzdHJpbmdfc2V0LT5zdHJfc2V0ID0gcGFsbG9jKHNldF9zaXpl ICogc2l6ZW9mKFN0cmluZ0luZm8pKTsKKwlzdHJpbmdfc2V0LT5pbmZvID0gcGFsbG9jMChzZXRf c2l6ZSAqIHNpemVvZihpbnQpKTsKKwlzdHJpbmdfc2V0LT5zZXRfc2l6ZSA9IHNldF9zaXplOwor CisJcmV0dXJuIHN0cmluZ19zZXQ7Cit9CisKKy8qCisgKiBzdHJpbmdfc2V0X2FkZAorICoKKyAq IEFkZCBTdHJpbmdJbmZvIHN0ciB0byBTdHJpbmdTZXQgc3RyaW5nX3NldC4KKyAqLworc3RhdGlj Cit2b2lkCitzdHJpbmdfc2V0X2FkZChTdHJpbmdTZXQgKnN0cmluZ19zZXQsIFN0cmluZ0luZm8g c3RyLCBpbnQgaW5mbykKK3sKKwlTaXplCQlzZXRfc2l6ZTsKKwlTaXplCQlvbGRfc2V0X3NpemU7 CisKKwlzZXRfc2l6ZSA9IHN0cmluZ19zZXQtPnNldF9zaXplOworCWlmIChzdHJpbmdfc2V0LT5z ZXRfaW5kZXggPj0gc2V0X3NpemUpCisJeworCQlvbGRfc2V0X3NpemUgPSBzZXRfc2l6ZTsKKwkJ c2V0X3NpemUgKj0gMjsKKwkJc3RyaW5nX3NldC0+c3RyX3NldCA9IHJlcGFsbG9jKHN0cmluZ19z ZXQtPnN0cl9zZXQsCisJCQkJCQkJCQkgICBzZXRfc2l6ZSAqIHNpemVvZihTdHJpbmdJbmZvKSk7 CisJCXN0cmluZ19zZXQtPmluZm8gPSByZXBhbGxvYzAoc3RyaW5nX3NldC0+aW5mbywKKwkJCQkJ CQkJCSBvbGRfc2V0X3NpemUgKiBzaXplb2YoaW50KSwKKwkJCQkJCQkJCSBzZXRfc2l6ZSAqIHNp emVvZihpbnQpKTsKKwkJc3RyaW5nX3NldC0+c2V0X3NpemUgPSBzZXRfc2l6ZTsKKwl9CisKKwlz dHJpbmdfc2V0LT5pbmZvW3N0cmluZ19zZXQtPnNldF9pbmRleF0gPSBpbmZvOworCXN0cmluZ19z ZXQtPnN0cl9zZXRbc3RyaW5nX3NldC0+c2V0X2luZGV4KytdID0gc3RyOworCisJcmV0dXJuOwor fQorCisvKgorICogc3RyaW5nX3NldF9nZXQKKyAqCisgKiBSZXR1cm5zIFN0cmluZ0luZm8gc3Bl Y2lmaWVkIGJ5IGluZGV4LgorICogSWYgdGhlcmUncyBubyBkYXRhIHlldCwgcmV0dXJucyBOVUxM LgorICovCitzdGF0aWMKK1N0cmluZ0luZm8KK3N0cmluZ19zZXRfZ2V0KFN0cmluZ1NldCAqc3Ry aW5nX3NldCwgaW50IGluZGV4LCBpbnQgKmluZm8pCit7CisJKmluZm8gPSAwOworCisJLyogbm8g ZGF0YT8gKi8KKwlpZiAoaW5kZXggPT0gMCAmJiBzdHJpbmdfc2V0LT5zZXRfaW5kZXggPT0gMCkK KwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHN0cmluZ19zZXQt PnNldF9pbmRleCkKKwkJZWxvZyhFUlJPUiwgImludmFsaWQgaW5kZXg6ICVkIiwgaW5kZXgpOwor CisJKmluZm8gPSBzdHJpbmdfc2V0LT5pbmZvW2luZGV4XTsKKworCXJldHVybiBzdHJpbmdfc2V0 LT5zdHJfc2V0W2luZGV4XTsKK30KKworLyoKKyAqIHN0cmluZ19zZXRfZ2V0X3NpemUKKyAqCisg KiBSZXR1cm5zIHRoZSBzaXplIG9mIFN0cmluZ1NldC4KKyAqLworc3RhdGljCitpbnQKK3N0cmlu Z19zZXRfZ2V0X3NpemUoU3RyaW5nU2V0ICpzdHJpbmdfc2V0KQoreworCXJldHVybiBzdHJpbmdf c2V0LT5zZXRfaW5kZXg7Cit9CisKKy8qCisgKiBzdHJpbmdfc2V0X2Rpc2NhcmQKKyAqIERpc2Nh cmQgU3RyaW5nU2V0LgorICogQWxsIG1lbW9yeSBpbmNsdWRpbmcgU3RyaW5nU2V0IGl0c2VsZiBp cyBmcmVlZC4KKyAqLworc3RhdGljCit2b2lkCitzdHJpbmdfc2V0X2Rpc2NhcmQoU3RyaW5nU2V0 ICpzdHJpbmdfc2V0KQoreworCWludAkJCWk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3RyaW5nX3Nl dC0+c2V0X2luZGV4OyBpKyspCisJeworCQlTdHJpbmdJbmZvCXN0ciA9IHN0cmluZ19zZXQtPnN0 cl9zZXRbaV07CisKKwkJaWYgKHN0cikKKwkJCWRlc3Ryb3lTdHJpbmdJbmZvKHN0cik7CisJfQor CXBmcmVlKHN0cmluZ19zZXQtPmluZm8pOworCXBmcmVlKHN0cmluZ19zZXQtPnN0cl9zZXQpOwor CXBmcmVlKHN0cmluZ19zZXQpOworfQorCisvKgorICogdmFyaWFibGVfcG9zX2luaXQKKyAqCisg KiBDcmVhdGUgYW5kIGluaXRpYWxpemUgdmFyaWFibGUgcG9zdGlvbiBzdHJ1Y3R1cmUKKyAqLwor c3RhdGljCitWYXJpYWJsZVBvcyAqCit2YXJpYWJsZV9wb3NfaW5pdCh2b2lkKQoreworCVZhcmlh YmxlUG9zICp2YXJpYWJsZV9wb3M7CisKKwl2YXJpYWJsZV9wb3MgPSBwYWxsb2Moc2l6ZW9mKFZh cmlhYmxlUG9zKSAqIE5VTV9BTFBIQUJFVFMpOworCU1lbVNldCh2YXJpYWJsZV9wb3MsIC0xLCBz aXplb2YoVmFyaWFibGVQb3MpICogTlVNX0FMUEhBQkVUUyk7CisJcmV0dXJuIHZhcmlhYmxlX3Bv czsKK30KKworLyoKKyAqIHZhcmlhYmxlX3Bvc19yZWdpc3RlcgorICoKKyAqIFJlZ2lzdGVyIHBh dHRlcm4gdmFyaWFibGUgd2hvc2UgaW5pdGlhbCBpcyBpbml0aWFsIGludG8gcG9zdGlvbiBpbmRl eC4KKyAqIHBvcyBpcyBwb3NpdGlvbiBvZiBpbml0aWFsLgorICogSWYgcG9zIGlzIGFscmVhZHkg cmVnaXN0ZXJlZCwgcmVnaXN0ZXIgaXQgYXQgbmV4dCBlbXB0eSBzbG90LgorICovCitzdGF0aWMK K3ZvaWQKK3ZhcmlhYmxlX3Bvc19yZWdpc3RlcihWYXJpYWJsZVBvcyAqdmFyaWFibGVfcG9zLCBj aGFyIGluaXRpYWwsIGludCBwb3MpCit7CisJaW50CQkJaW5kZXggPSBpbml0aWFsIC0gJ2EnOwor CWludAkJCXNsb3Q7CisJaW50CQkJaTsKKworCWlmIChwb3MgPCAwIHx8IHBvcyA+IE5VTV9BTFBI QUJFVFMpCisJCWVsb2coRVJST1IsICJpbml0aWFsIGlzIG5vdCB2YWxpZCBjaGFyOiAlYyIsIGlu aXRpYWwpOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9BTFBIQUJFVFM7IGkrKykKKwl7CisJCXNs b3QgPSB2YXJpYWJsZV9wb3NbaW5kZXhdLnBvc1tpXTsKKwkJaWYgKHNsb3QgPCAwKQorCQl7CisJ CQkvKiBlbXB0eSBzbG90IGZvdW5kICovCisJCQl2YXJpYWJsZV9wb3NbaW5kZXhdLnBvc1tpXSA9 IHBvczsKKwkJCXJldHVybjsKKwkJfQorCX0KKwllbG9nKEVSUk9SLCAibm8gZW1wdHkgc2xvdCBm b3IgaW5pdGlhbDogJWMiLCBpbml0aWFsKTsKK30KKworLyoKKyAqIHZhcmlhYmxlX3Bvc19jb21w YXJlCisgKgorICogUmV0dXJucyB0cnVlIGlmIGluaXRpYWwxIGNhbiBiZSBmb2xsb3dlZCBieSBp bml0aWFsMgorICovCitzdGF0aWMKK2Jvb2wKK3ZhcmlhYmxlX3Bvc19jb21wYXJlKFZhcmlhYmxl UG9zICp2YXJpYWJsZV9wb3MsIGNoYXIgaW5pdGlhbDEsIGNoYXIgaW5pdGlhbDIpCit7CisJaW50 CQkJaW5kZXgxLAorCQkJCWluZGV4MjsKKwlpbnQJCQlwb3MxLAorCQkJCXBvczI7CisKKwlmb3Ig KGluZGV4MSA9IDA7OyBpbmRleDErKykKKwl7CisJCXBvczEgPSB2YXJpYWJsZV9wb3NfZmV0Y2go dmFyaWFibGVfcG9zLCBpbml0aWFsMSwgaW5kZXgxKTsKKwkJaWYgKHBvczEgPCAwKQorCQkJYnJl YWs7CisKKwkJZm9yIChpbmRleDIgPSAwOzsgaW5kZXgyKyspCisJCXsKKwkJCXBvczIgPSB2YXJp YWJsZV9wb3NfZmV0Y2godmFyaWFibGVfcG9zLCBpbml0aWFsMiwgaW5kZXgyKTsKKwkJCWlmIChw b3MyIDwgMCkKKwkJCQlicmVhazsKKwkJCWlmIChwb3MxIDw9IHBvczIpCisJCQkJcmV0dXJuIHRy dWU7CisJCX0KKwl9CisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogdmFyaWFibGVfcG9zX2Zl dGNoCisgKgorICogRmV0Y2ggcG9zaXRpb24gb2YgcGF0dGVybiB2YXJpYWJsZSB3aG9zZSBpbml0 aWFsIGlzIGluaXRpYWwsIGFuZCB3aG9zZSBpbmRleAorICogaXMgaW5kZXguIElmIG5vIHBvc3Rp b24gd2FzIHJlZ2lzdGVyZWQgYnkgaW5pdGlhbCwgaW5kZXgsIHJldHVybnMgLTEuCisgKi8KK3N0 YXRpYworaW50Cit2YXJpYWJsZV9wb3NfZmV0Y2goVmFyaWFibGVQb3MgKnZhcmlhYmxlX3Bvcywg Y2hhciBpbml0aWFsLCBpbnQgaW5kZXgpCit7CisJaW50CQkJcG9zID0gaW5pdGlhbCAtICdhJzsK KworCWlmIChwb3MgPCAwIHx8IHBvcyA+IE5VTV9BTFBIQUJFVFMpCisJCWVsb2coRVJST1IsICJp bml0aWFsIGlzIG5vdCB2YWxpZCBjaGFyOiAlYyIsIGluaXRpYWwpOworCisJaWYgKGluZGV4IDwg MCB8fCBpbmRleCA+IE5VTV9BTFBIQUJFVFMpCisJCWVsb2coRVJST1IsICJpbmRleCBpcyBub3Qg dmFsaWQ6ICVkIiwgaW5kZXgpOworCisJcmV0dXJuIHZhcmlhYmxlX3Bvc1twb3NdLnBvc1tpbmRl eF07Cit9CisKKy8qCisgKiB2YXJpYWJsZV9wb3NfYnVpbGQKKyAqCisgKiBCdWlsZCBWYXJpYWJs ZVBvcyBzdHJ1Y3R1cmUgYW5kIHJldHVybiBpdC4KKyAqLworc3RhdGljCitWYXJpYWJsZVBvcyAq Cit2YXJpYWJsZV9wb3NfYnVpbGQoV2luZG93QWdnU3RhdGUgKndpbnN0YXRlKQoreworCVZhcmlh YmxlUG9zICp2YXJpYWJsZV9wb3M7CisJU3RyaW5nSW5mbwlwYXR0ZXJuX3N0cjsKKwlpbnQJCQlp bml0aWFsX2luZGV4ID0gMDsKKwlMaXN0Q2VsbCAgICpsYzEsCisJCQkgICAqbGMyOworCisJdmFy aWFibGVfcG9zID0gd2luc3RhdGUtPnZhcmlhYmxlX3BvcyA9IHZhcmlhYmxlX3Bvc19pbml0KCk7 CisJcGF0dGVybl9zdHIgPSB3aW5zdGF0ZS0+cGF0dGVybl9zdHIgPSBtYWtlU3RyaW5nSW5mbygp OworCWFwcGVuZFN0cmluZ0luZm9DaGFyKHBhdHRlcm5fc3RyLCAnXicpOworCisJZm9yYm90aChs YzEsIHdpbnN0YXRlLT5wYXR0ZXJuVmFyaWFibGVMaXN0LAorCQkJbGMyLCB3aW5zdGF0ZS0+cGF0 dGVyblJlZ2V4cExpc3QpCisJeworCQljaGFyCSAgICp2bmFtZSA9IHN0clZhbChsZmlyc3QobGMx KSk7CisJCWNoYXIJICAgKnF1YW50aWZpZXIgPSBzdHJWYWwobGZpcnN0KGxjMikpOworCQljaGFy CQlpbml0aWFsOworCisJCWluaXRpYWwgPSBwYXR0ZXJuX2luaXRpYWwod2luc3RhdGUsIHZuYW1l KTsKKwkJQXNzZXJ0KGluaXRpYWwgIT0gMCk7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKHBhdHRl cm5fc3RyLCBpbml0aWFsKTsKKwkJaWYgKHF1YW50aWZpZXJbMF0pCisJCQlhcHBlbmRTdHJpbmdJ bmZvQ2hhcihwYXR0ZXJuX3N0ciwgcXVhbnRpZmllclswXSk7CisKKwkJLyoKKwkJICogUmVnaXN0 ZXIgdGhlIGluaXRpYWwgYXQgaW5pdGlhbF9pbmRleC4gSWYgdGhlIGluaXRpYWwgYXBwZWFycyBt b3JlCisJCSAqIHRoYW4gb25jZSwgYWxsIG9mIGl0J3MgaW5pdGlhbF9pbmRleCB3aWxsIGJlIHJl Y29yZGVkLiBUaGlzIGNvdWxkCisJCSAqIGhhcHBlbiBpZiBhIHBhdHRlcm4gdmFyaWFibGUgYXBw ZWFycyBpbiB0aGUgUEFUVEVSTiBjbGF1c2UgbW9yZQorCQkgKiB0aGFuIG9uY2UgbGlrZSAiVVAg RE9XTiBVUCIgIlVQIFVQIFVQIi4KKwkJICovCisJCXZhcmlhYmxlX3Bvc19yZWdpc3Rlcih2YXJp YWJsZV9wb3MsIGluaXRpYWwsIGluaXRpYWxfaW5kZXgpOworCisJCWluaXRpYWxfaW5kZXgrKzsK Kwl9CisKKwlyZXR1cm4gdmFyaWFibGVfcG9zOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3dpbmRvd2Z1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvd2luZG93ZnVu Y3MuYwppbmRleCBiYjM1ZjNiYzRhOS4uNDMyZDZjMWIwYTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC93aW5kb3dmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC93 aW5kb3dmdW5jcy5jCkBAIC0zNywxMSArMzcsMTkgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlpbnQ2NAkJ cmVtYWluZGVyOwkJLyogKHRvdGFsIHJvd3MpICUgKGJ1Y2tldCBudW0pICovCiB9IG50aWxlX2Nv bnRleHQ7CiAKKy8qCisgKiBycHIgcHJvY2VzcyBpbmZvcm1hdGlvbi4KKyAqIFVzZWQgZm9yIEFG VEVSIE1BVENIIFNLSVAgUEFTVCBMQVNUIFJPVworICovCit0eXBlZGVmIHN0cnVjdCBTa2lwQ29u dGV4dAoreworCWludDY0CQlwb3M7CQkJLyogbGFzdCByb3cgYWJzb2x1dGUgcG9zaXRpb24gKi8K K30gU2tpcENvbnRleHQ7CisKIHN0YXRpYyBib29sIHJhbmtfdXAoV2luZG93T2JqZWN0IHdpbm9i aik7CiBzdGF0aWMgRGF0dW0gbGVhZGxhZ19jb21tb24oRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8s CiAJCQkJCQkJYm9vbCBmb3J3YXJkLCBib29sIHdpdGhvZmZzZXQsIGJvb2wgd2l0aGRlZmF1bHQp OwogCi0KIC8qCiAgKiB1dGlsaXR5IHJvdXRpbmUgZm9yICpfcmFuayBmdW5jdGlvbnMuCiAgKi8K QEAgLTY3NCw3ICs2ODIsNyBAQCB3aW5kb3dfbGFzdF92YWx1ZShQR19GVU5DVElPTl9BUkdTKQog CWJvb2wJCWlzbnVsbDsKIAogCXJlc3VsdCA9IFdpbkdldEZ1bmNBcmdJbkZyYW1lKHdpbm9iaiwg MCwKLQkJCQkJCQkJICAwLCBXSU5ET1dfU0VFS19UQUlMLCB0cnVlLAorCQkJCQkJCQkgIDAsIFdJ TkRPV19TRUVLX1RBSUwsIGZhbHNlLAogCQkJCQkJCQkgICZpc251bGwsIE5VTEwpOwogCWlmIChp c251bGwpCiAJCVBHX1JFVFVSTl9OVUxMKCk7CkBAIC03MTQsMyArNzIyLDI1IEBAIHdpbmRvd19u dGhfdmFsdWUoUEdfRlVOQ1RJT05fQVJHUykKIAogCVBHX1JFVFVSTl9EQVRVTShyZXN1bHQpOwog fQorCisvKgorICogcHJldgorICogRHVtbXkgZnVuY3Rpb24gdG8gaW52b2tlIFJQUidzIG5hdmln YXRpb24gb3BlcmF0b3IgIlBSRVYiLgorICogVGhpcyBpcyAqbm90KiBhIHdpbmRvdyBmdW5jdGlv bi4KKyAqLworRGF0dW0KK3dpbmRvd19wcmV2KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJUEdfUkVU VVJOX0RBVFVNKFBHX0dFVEFSR19EQVRVTSgwKSk7Cit9CisKKy8qCisgKiBuZXh0CisgKiBEdW1t eSBmdW5jdGlvbiB0byBpbnZva2UgUlBSJ3MgbmF2aWdhdGlvbiBvcGVyYXRpb24gIk5FWFQiLgor ICogVGhpcyBpcyAqbm90KiBhIHdpbmRvdyBmdW5jdGlvbi4KKyAqLworRGF0dW0KK3dpbmRvd19u ZXh0KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJUEdfUkVUVVJOX0RBVFVNKFBHX0dFVEFSR19EQVRV TSgwKSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIv c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCAxMThkNmRhMWFjZS4uMzE4NGRh ZjY4NjAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIv c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtMTA4MTcsNiArMTA4MTcsMTIgQEAK IHsgb2lkID0+ICczMTE0JywgZGVzY3IgPT4gJ2ZldGNoIHRoZSBOdGggcm93IHZhbHVlJywKICAg cHJvbmFtZSA9PiAnbnRoX3ZhbHVlJywgcHJva2luZCA9PiAndycsIHByb3JldHR5cGUgPT4gJ2Fu eWVsZW1lbnQnLAogICBwcm9hcmd0eXBlcyA9PiAnYW55ZWxlbWVudCBpbnQ0JywgcHJvc3JjID0+ ICd3aW5kb3dfbnRoX3ZhbHVlJyB9LAoreyBvaWQgPT4gJzgxMjYnLCBkZXNjciA9PiAncHJldmlv dXMgdmFsdWUnLAorICBwcm9uYW1lID0+ICdwcmV2JywgcHJvdm9sYXRpbGUgPT4gJ3MnLCBwcm9y ZXR0eXBlID0+ICdhbnllbGVtZW50JywKKyAgcHJvYXJndHlwZXMgPT4gJ2FueWVsZW1lbnQnLCBw cm9zcmMgPT4gJ3dpbmRvd19wcmV2JyB9LAoreyBvaWQgPT4gJzgxMjcnLCBkZXNjciA9PiAnbmV4 dCB2YWx1ZScsCisgIHByb25hbWUgPT4gJ25leHQnLCBwcm92b2xhdGlsZSA9PiAncycsIHByb3Jl dHR5cGUgPT4gJ2FueWVsZW1lbnQnLAorICBwcm9hcmd0eXBlcyA9PiAnYW55ZWxlbWVudCcsIHBy b3NyYyA9PiAnd2luZG93X25leHQnIH0sCiAKICMgZnVuY3Rpb25zIGZvciByYW5nZSB0eXBlcwog eyBvaWQgPT4gJzM4MzInLCBkZXNjciA9PiAnSS9PJywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXgg ZTEwN2Q2ZTVmODEuLjM1NDY3MjAxYjliIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9l eGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtMjYyNCw2 ICsyNjI0LDM3IEBAIHR5cGVkZWYgZW51bSBXaW5kb3dBZ2dTdGF0dXMKIAkJCQkJCQkJCSAqIHR1 cGxlcyBkdXJpbmcgc3Bvb2wgKi8KIH0gV2luZG93QWdnU3RhdHVzOwogCisjZGVmaW5lCVJGX05P VF9ERVRFUk1JTkVECTAKKyNkZWZpbmUJUkZfRlJBTUVfSEVBRAkJMQorI2RlZmluZQlSRl9TS0lQ UEVECQkJMgorI2RlZmluZQlSRl9VTk1BVENIRUQJCTMKKworLyoKKyAqIEFsbG93ZWQgUEFUVEVS TiB2YXJpYWJsZXMgcG9zaXRpb25zLgorICogVXNlZCBpbiBSUFIuCisgKgorICogcG9zIHJlcHJl c2VudHMgdGhlIHBhdHRlcm4gdmFyaWFibGUgZGVmaW5lZCBvcmRlciBpbiBERUZJTkUgY2FsdWFz ZS4gIEZvcgorICogZXhhbXBsZS4gIkRFRklORSBTVEFSVC4uLiwgVVAuLi4sIERPV04gLi4uIiBh bmQgIlBBVFRFUk4gU1RBUlQgVVAgRE9XTiBVUCIKKyAqIHdpbGwgY3JlYXRlOgorICogVmFyaWFi bGVQb3NbMF0ucG9zWzBdID0gMDsJCVNUQVJUCisgKiBWYXJpYWJsZVBvc1sxXS5wb3NbMF0gPSAx OwkJVVAKKyAqIFZhcmlhYmxlUG9zWzFdLnBvc1sxXSA9IDM7CQlVUAorICogVmFyaWFibGVQb3Nb Ml0ucG9zWzBdID0gMjsJCURPV04KKyAqCisgKiBOb3RlIHRoYXQgVVAgaGFzIHR3byBwb3MgYmVj YXVzZSBVUCBhcHBlYXJzIGluIFBBVFRFUk4gdHdpY2UuCisgKgorICogQnkgdXNpbmcgdGhpcyBz dHJ1Y3J0dXJlLCB3ZSBjYW4ga25vdyB3aGljaCBwYXR0ZXJuIHZhcmlhYmxlIGNhbiBiZSBmb2xs b3dlZAorICogYnkgd2hpY2ggcGF0dGVybiB2YXJpYWJsZShzKS4gRm9yIGV4YW1wbGUsIFNUQVJU IGNhbiBiZSBmb2xsb3dlZCBieSBVUCBhbmQKKyAqIERPV04gc2luY2UgU1RBUlQncyBwb3MgaXMg MCwgYW5kIFVQJ3MgcG9zIGlzIDEgb3IgMywgRE9XTidzIHBvcyBpcyAyLgorICogRE9XTiBjYW4g YmUgZm9sbG93ZWQgYnkgVVAgc2luY2UgVVAncyBwb3MgaXMgZWl0aGVyIDEgb3IgMy4KKyAqCisg Ki8KKyNkZWZpbmUgTlVNX0FMUEhBQkVUUwkyNgkJLyogd2UgYWxsb3cgW2Etel0gdmFyaWFibGUg aW5pdGlhbHMgKi8KK3R5cGVkZWYgc3RydWN0IFZhcmlhYmxlUG9zCit7CisJaW50CQkJcG9zW05V TV9BTFBIQUJFVFNdOyAvKiBwb3N0aW9ucyBpbiBQQVRURVJOICovCit9IFZhcmlhYmxlUG9zOwor CiB0eXBlZGVmIHN0cnVjdCBXaW5kb3dBZ2dTdGF0ZQogewogCVNjYW5TdGF0ZQlzczsJCQkJLyog aXRzIGZpcnN0IGZpZWxkIGlzIE5vZGVUYWcgKi8KQEAgLTI2ODMsNiArMjcxNCwyMSBAQCB0eXBl ZGVmIHN0cnVjdCBXaW5kb3dBZ2dTdGF0ZQogCWludDY0CQlncm91cGhlYWRwb3M7CS8qIGN1cnJl bnQgcm93J3MgcGVlciBncm91cCBoZWFkIHBvc2l0aW9uICovCiAJaW50NjQJCWdyb3VwdGFpbHBv czsJLyogIiAiICIgIiB0YWlsIHBvc2l0aW9uIChncm91cCBlbmQrMSkgKi8KIAorCS8qIHRoZXNl IGZpZWxkcyBhcmUgdXNlZCBpbiBSb3cgcGF0dGVybiByZWNvZ25pdGlvbjogKi8KKwlSUFNraXBU bwlycFNraXBUbzsJCS8qIFJvdyBQYXR0ZXJuIFNraXAgVG8gdHlwZSAqLworCUxpc3QJICAgKnBh dHRlcm5WYXJpYWJsZUxpc3Q7CS8qIGxpc3Qgb2Ygcm93IHBhdHRlcm4gdmFyaWFibGVzIG5hbWVz CisJCQkJCQkJCQkJICogKGxpc3Qgb2YgU3RyaW5nKSAqLworCUxpc3QJICAgKnBhdHRlcm5SZWdl eHBMaXN0OwkvKiBsaXN0IG9mIHJvdyBwYXR0ZXJuIHJlZ3VsYXIgZXhwcmVzc2lvbnMKKwkJCQkJ CQkJCSAqICgnKycgb3IgJycuIGxpc3Qgb2YgU3RyaW5nKSAqLworCUxpc3QJICAgKmRlZmluZVZh cmlhYmxlTGlzdDsgLyogbGlzdCBvZiByb3cgcGF0dGVybiBkZWZpbml0aW9uCisJCQkJCQkJCQkg KiB2YXJpYWJsZXMgKGxpc3Qgb2YgU3RyaW5nKSAqLworCUxpc3QJICAgKmRlZmluZUNsYXVzZUxp c3Q7CS8qIGV4cHJlc3Npb24gZm9yIHJvdyBwYXR0ZXJuIGRlZmluaXRpb24KKwkJCQkJCQkJCSAq IHNlYXJjaCBjb25kaXRpb25zIEV4cHJTdGF0ZSBsaXN0ICovCisJTGlzdAkgICAqZGVmaW5lSW5p dGlhbDsJLyogbGlzdCBvZiByb3cgcGF0dGVybiBkZWZpbml0aW9uIHZhcmlhYmxlCisJCQkJCQkJ CSAqIGluaXRpYWxzIChsaXN0IG9mIFN0cmluZykgKi8KKwlWYXJpYWJsZVBvcyAqdmFyaWFibGVf cG9zOwkvKiBsaXN0IG9mIHBhdHRlcm4gdmFyaWFibGUgcG9zaXRpb25zICovCisJU3RyaW5nSW5m bwlwYXR0ZXJuX3N0cjsJLyogUEFUVEVSTiBpbml0aWFscyAqLworCiAJTWVtb3J5Q29udGV4dCBw YXJ0Y29udGV4dDsJLyogY29udGV4dCBmb3IgcGFydGl0aW9uLWxpZmVzcGFuIGRhdGEgKi8KIAlN ZW1vcnlDb250ZXh0IGFnZ2NvbnRleHQ7CS8qIHNoYXJlZCBjb250ZXh0IGZvciBhZ2dyZWdhdGUg d29ya2luZyBkYXRhICovCiAJTWVtb3J5Q29udGV4dCBjdXJhZ2djb250ZXh0OwkvKiBjdXJyZW50 IGFnZ3JlZ2F0ZSdzIHdvcmtpbmcgZGF0YSAqLwpAQCAtMjcxMCw2ICsyNzU2LDE4IEBAIHR5cGVk ZWYgc3RydWN0IFdpbmRvd0FnZ1N0YXRlCiAJVHVwbGVUYWJsZVNsb3QgKmFnZ19yb3dfc2xvdDsK IAlUdXBsZVRhYmxlU2xvdCAqdGVtcF9zbG90XzE7CiAJVHVwbGVUYWJsZVNsb3QgKnRlbXBfc2xv dF8yOworCisJLyogdGVtcG9yYXJ5IHNsb3RzIGZvciBSUFIgKi8KKwlUdXBsZVRhYmxlU2xvdCAq cHJldl9zbG90OwkvKiBQUkVWIHJvdyBuYXZpZ2F0aW9uIG9wZXJhdG9yICovCisJVHVwbGVUYWJs ZVNsb3QgKm5leHRfc2xvdDsJLyogTkVYVCByb3cgbmF2aWdhdGlvbiBvcGVyYXRvciAqLworCVR1 cGxlVGFibGVTbG90ICpudWxsX3Nsb3Q7CS8qIGFsbCBOVUxMIHNsb3QgKi8KKworCS8qCisJICog RWFjaCBieXRlIGNvcnJlc3BvbmRzIHRvIGEgcm93IHBvc2l0aW9uZWQgYXQgYWJzb2x1dGUgaXRz IHBvcyBpbgorCSAqIHBhcnRpdGlvbi4gIFNlZSBhYm92ZSBkZWZpbml0aW9uIGZvciBSRl8qCisJ ICovCisJY2hhcgkgICAqcmVkdWNlZF9mcmFtZV9tYXA7CisJaW50NjQJCWFsbG9jX3N6OwkJLyog c2l6ZSBvZiB0aGUgbWFwICovCiB9IFdpbmRvd0FnZ1N0YXRlOwogCiAvKiAtLS0tLS0tLS0tLS0t LS0tCi0tIAoyLjI1LjEKCg== ----Next_Part(Sat_Aug_16_17_45_52_2025_123)-- Content-Type: Application/Octet-Stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v32-0006-Row-pattern-recognition-patch-docs.patch" RnJvbSA5NDkzOTUzNWUyMWQzNjkyYTg1YTg0YzQ2NjNkZDRiODkwZDE1ZmI5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYXRzdW8gSXNoaWkgPGlzaGlpQHBvc3RncmVzcWwub3JnPgpE YXRlOiBTYXQsIDE2IEF1ZyAyMDI1IDE3OjMzOjMzICswOTAwClN1YmplY3Q6IFtQQVRDSCB2MzIg Ni85XSBSb3cgcGF0dGVybiByZWNvZ25pdGlvbiBwYXRjaCAoZG9jcykuCgotLS0KIGRvYy9zcmMv c2dtbC9hZHZhbmNlZC5zZ21sICAgICAgICAgfCA4MSArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKIGRvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtd2luZG93LnNnbWwgfCA1MyArKysrKysrKysr KysrKysrKysrCiBkb2Mvc3JjL3NnbWwvcmVmL3NlbGVjdC5zZ21sICAgICAgIHwgNDkgKysrKysr KysrKysrKysrKy0tCiAzIGZpbGVzIGNoYW5nZWQsIDE4MCBpbnNlcnRpb25zKCspLCAzIGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9hZHZhbmNlZC5zZ21sIGIvZG9jL3Ny Yy9zZ21sL2FkdmFuY2VkLnNnbWwKaW5kZXggZTE1YTMzMjNkZmIuLjUxNmNlMjg1ODNkIDEwMDY0 NAotLS0gYS9kb2Mvc3JjL3NnbWwvYWR2YW5jZWQuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvYWR2 YW5jZWQuc2dtbApAQCAtNTQwLDYgKzU0MCw4NyBAQCBXSEVSRSBwb3MgJmx0OyAzOwogICAgIHR3 byByb3dzIGZvciBlYWNoIGRlcGFydG1lbnQpLgogICAgPC9wYXJhPgogCisgICA8cGFyYT4KKyAg ICBSb3cgcGF0dGVybiBjb21tb24gc3ludGF4IGNhbiBiZSB1c2VkIHRvIHBlcmZvcm0gcm93IHBh dHRlcm4gcmVjb2duaXRpb24KKyAgICBpbiBhIHF1ZXJ5LiBUaGUgcm93IHBhdHRlcm4gY29tbW9u IHN5bnRheCBpbmNsdWRlcyB0d28gc3ViCisgICAgY2xhdXNlczogPGxpdGVyYWw+REVGSU5FPC9s aXRlcmFsPgorICAgIGFuZCA8bGl0ZXJhbD5QQVRURVJOPC9saXRlcmFsPi4gPGxpdGVyYWw+REVG SU5FPC9saXRlcmFsPiBkZWZpbmVzCisgICAgZGVmaW5pdGlvbiB2YXJpYWJsZXMgYWxvbmcgd2l0 aCBhbiBleHByZXNzaW9uLiBUaGUgZXhwcmVzc2lvbiBtdXN0IGJlIGEKKyAgICBsb2dpY2FsIGV4 cHJlc3Npb24sIHdoaWNoIG1lYW5zIGl0IG11c3QKKyAgICByZXR1cm4gPGxpdGVyYWw+VFJVRTwv bGl0ZXJhbD4sIDxsaXRlcmFsPkZBTFNFPC9saXRlcmFsPgorICAgIG9yIDxsaXRlcmFsPk5VTEw8 L2xpdGVyYWw+LiBUaGUgZXhwcmVzc2lvbiBtYXkgY29tcHJpc2UgY29sdW1uIHJlZmVyZW5jZXMK KyAgICBhbmQgZnVuY3Rpb25zLiBXaW5kb3cgZnVuY3Rpb25zLCBhZ2dyZWdhdGUgZnVuY3Rpb25z IGFuZCBzdWJxdWVyaWVzIGFyZQorICAgIG5vdCBhbGxvd2VkLiBBbiBleGFtcGxlIG9mIDxsaXRl cmFsPkRFRklORTwvbGl0ZXJhbD4gaXMgYXMgZm9sbG93cy4KKworPHByb2dyYW1saXN0aW5nPgor REVGSU5FCisgTE9XUFJJQ0UgQVMgcHJpY2UgJmx0Oz0gMTAwLAorIFVQIEFTIHByaWNlICZndDsg UFJFVihwcmljZSksCisgRE9XTiBBUyBwcmljZSAmbHQ7IFBSRVYocHJpY2UpCis8L3Byb2dyYW1s aXN0aW5nPgorCisgICAgTm90ZSB0aGF0IDxmdW5jdGlvbj5QUkVWPC9mdW5jdGlvbj4gcmV0dXJu cyB0aGUgcHJpY2UgY29sdW1uIGluIHRoZQorICAgIHByZXZpb3VzIHJvdyBpZiBpdCdzIGNhbGxl ZCBpbiBhIGNvbnRleHQgb2Ygcm93IHBhdHRlcm4gcmVjb2duaXRpb24uIFRodXMKKyAgICBpbiB0 aGUgc2Vjb25kIGxpbmUgdGhlIGRlZmluaXRpb24gdmFyaWFibGUgIlVQIiBpcyA8bGl0ZXJhbD5U UlVFPC9saXRlcmFsPgorICAgIHdoZW4gdGhlIHByaWNlIGNvbHVtbiBpbiB0aGUgY3VycmVudCBy b3cgaXMgZ3JlYXRlciB0aGFuIHRoZSBwcmljZSBjb2x1bW4KKyAgICBpbiB0aGUgcHJldmlvdXMg cm93LiBMaWtld2lzZSwgIkRPV04iIGlzIDxsaXRlcmFsPlRSVUU8L2xpdGVyYWw+IHdoZW4gdGhl CisgICAgcHJpY2UgY29sdW1uIGluIHRoZSBjdXJyZW50IHJvdyBpcyBsb3dlciB0aGFuIHRoZSBw cmljZSBjb2x1bW4gaW4gdGhlCisgICAgcHJldmlvdXMgcm93LgorICAgPC9wYXJhPgorICAgPHBh cmE+CisgICAgT25jZSA8bGl0ZXJhbD5ERUZJTkU8L2xpdGVyYWw+IGV4aXN0cywgPGxpdGVyYWw+ UEFUVEVSTjwvbGl0ZXJhbD4gY2FuIGJlCisgICAgdXNlZC4gPGxpdGVyYWw+UEFUVEVSTjwvbGl0 ZXJhbD4gZGVmaW5lcyBhIHNlcXVlbmNlIG9mIHJvd3MgdGhhdCBzYXRpc2ZpZXMKKyAgICBjb25k aXRpb25zIGRlZmluZWQgaW4gdGhlIDxsaXRlcmFsPkRFRklORTwvbGl0ZXJhbD4gY2xhdXNlLiAg Rm9yIGV4YW1wbGUKKyAgICBmb2xsb3dpbmcgPGxpdGVyYWw+UEFUVEVSTjwvbGl0ZXJhbD4gZGVm aW5lcyBhIHNlcXVlbmNlIG9mIHJvd3Mgc3RhcnRpbmcKKyAgICB3aXRoIHRoZSBhIHJvdyBzYXRp c2Z5aW5nICJMT1dQUklDRSIsIHRoZW4gb25lIG9yIG1vcmUgcm93cyBzYXRpc2Z5aW5nCisgICAg IlVQIiBhbmQgZmluYWxseSBvbmUgb3IgbW9yZSByb3dzIHNhdGlzZnlpbmcgIkRPV04iLiBOb3Rl IHRoYXQgIisiIG1lYW5zCisgICAgb25lIG9yIG1vcmUgbWF0Y2hlcy4gQWxzbyB5b3UgY2FuIHVz ZSAiKiIsIHdoaWNoIG1lYW5zIHplcm8gb3IgbW9yZQorICAgIG1hdGNoZXMuIElmIGEgc2VxdWVu Y2Ugb2Ygcm93cyB3aGljaCBzYXRpc2ZpZXMgdGhlIFBBVFRFUk4gaXMgZm91bmQsIGluCisgICAg dGhlIHN0YXJ0aW5nIHJvdyBhbGwgY29sdW1ucyBvciBmdW5jdGlvbnMgYXJlIHNob3duIGluIHRo ZSB0YXJnZXQKKyAgICBsaXN0LiBOb3RlIHRoYXQgYWdncmVnYXRpb25zIG9ubHkgbG9vayBpbnRv IHRoZSBtYXRjaGVkIHJvd3MsIHJhdGhlciB0aGFuCisgICAgdGhlIHdob2xlIGZyYW1lLiBPbiB0 aGUgc2Vjb25kIG9yIHN1YnNlcXVlbnQgcm93cyBhbGwgd2luZG93IGZ1bmN0aW9ucyBhcmUKKyAg ICBzaG93biBhcyBOVUxMLiBBZ2dyZWdhdGVzIGFyZSBOVUxMIG9yIDAgZGVwZW5kaW5nIG9uIGl0 cyBhZ2dyZWdhdGlvbgorICAgIGRlZmluaXRpb24uIEEgY291bnQoKSBhZ2dyZWdhdGUgc2hvd3Mg MC4gRm9yIHJvd3MgdGhhdCBkbyBub3QgbWF0Y2ggb24gdGhlCisgICAgUEFUVEVSTiwgY29sdW1u cyBhcmUgc2hvd24gQVMgTlVMTCB0b28uIEV4YW1wbGUgb2YKKyAgICBhIDxsaXRlcmFsPlNFTEVD VDwvbGl0ZXJhbD4gdXNpbmcgdGhlIDxsaXRlcmFsPkRFRklORTwvbGl0ZXJhbD4KKyAgICBhbmQg PGxpdGVyYWw+UEFUVEVSTjwvbGl0ZXJhbD4gY2xhdXNlIGlzIGFzIGZvbGxvd3MuCisKKzxwcm9n cmFtbGlzdGluZz4KK1NFTEVDVCBjb21wYW55LCB0ZGF0ZSwgcHJpY2UsCisgZmlyc3RfdmFsdWUo cHJpY2UpIE9WRVIgdywKKyBtYXgocHJpY2UpIE9WRVIgdywKKyBjb3VudChwcmljZSkgT1ZFUiB3 CitGUk9NIHN0b2NrCisgV0lORE9XIHcgQVMgKAorIFBBUlRJVElPTiBCWSBjb21wYW55CisgT1JE RVIgQlkgdGRhdGUKKyBST1dTIEJFVFdFRU4gQ1VSUkVOVCBST1cgQU5EIFVOQk9VTkRFRCBGT0xM T1dJTkcKKyBBRlRFUiBNQVRDSCBTS0lQIFBBU1QgTEFTVCBST1cKKyBJTklUSUFMCisgUEFUVEVS TiAoTE9XUFJJQ0UgVVArIERPV04rKQorIERFRklORQorICBMT1dQUklDRSBBUyBwcmljZSAmbHQ7 PSAxMDAsCisgIFVQIEFTIHByaWNlICZndDsgUFJFVihwcmljZSksCisgIERPV04gQVMgcHJpY2Ug Jmx0OyBQUkVWKHByaWNlKQorKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+Cis8c2NyZWVuPgorIGNvbXBh bnkgIHwgICB0ZGF0ZSAgICB8IHByaWNlIHwgZmlyc3RfdmFsdWUgfCBtYXggfCBjb3VudCAKKy0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0t CisgY29tcGFueTEgfCAyMDIzLTA3LTAxIHwgICAxMDAgfCAgICAgICAgIDEwMCB8IDIwMCB8ICAg ICA0CisgY29tcGFueTEgfCAyMDIzLTA3LTAyIHwgICAyMDAgfCAgICAgICAgICAgICB8ICAgICB8 ICAgICAwCisgY29tcGFueTEgfCAyMDIzLTA3LTAzIHwgICAxNTAgfCAgICAgICAgICAgICB8ICAg ICB8ICAgICAwCisgY29tcGFueTEgfCAyMDIzLTA3LTA0IHwgICAxNDAgfCAgICAgICAgICAgICB8 ICAgICB8ICAgICAwCisgY29tcGFueTEgfCAyMDIzLTA3LTA1IHwgICAxNTAgfCAgICAgICAgICAg ICB8ICAgICB8ICAgICAwCisgY29tcGFueTEgfCAyMDIzLTA3LTA2IHwgICAgOTAgfCAgICAgICAg ICA5MCB8IDEzMCB8ICAgICA0CisgY29tcGFueTEgfCAyMDIzLTA3LTA3IHwgICAxMTAgfCAgICAg ICAgICAgICB8ICAgICB8ICAgICAwCisgY29tcGFueTEgfCAyMDIzLTA3LTA4IHwgICAxMzAgfCAg ICAgICAgICAgICB8ICAgICB8ICAgICAwCisgY29tcGFueTEgfCAyMDIzLTA3LTA5IHwgICAxMjAg fCAgICAgICAgICAgICB8ICAgICB8ICAgICAwCisgY29tcGFueTEgfCAyMDIzLTA3LTEwIHwgICAx MzAgfCAgICAgICAgICAgICB8ICAgICB8ICAgICAwCisoMTAgcm93cykKKzwvc2NyZWVuPgorICAg PC9wYXJhPgorCiAgICA8cGFyYT4KICAgICBXaGVuIGEgcXVlcnkgaW52b2x2ZXMgbXVsdGlwbGUg d2luZG93IGZ1bmN0aW9ucywgaXQgaXMgcG9zc2libGUgdG8gd3JpdGUKICAgICBvdXQgZWFjaCBv bmUgd2l0aCBhIHNlcGFyYXRlIDxsaXRlcmFsPk9WRVI8L2xpdGVyYWw+IGNsYXVzZSwgYnV0IHRo aXMgaXMKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtd2luZG93LnNnbWwgYi9k b2Mvc3JjL3NnbWwvZnVuYy9mdW5jLXdpbmRvdy5zZ21sCmluZGV4IGNjZTAxNjViOTUyLi5jOWFm YjRmY2I4OCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy13aW5kb3cuc2dtbAor KysgYi9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLXdpbmRvdy5zZ21sCkBAIC0yNjUsNiArMjY1LDU5 IEBACiAgICBPdGhlciBmcmFtZSBzcGVjaWZpY2F0aW9ucyBjYW4gYmUgdXNlZCB0byBvYnRhaW4g b3RoZXIgZWZmZWN0cy4KICAgPC9wYXJhPgogCisgIDxwYXJhPgorICAgUm93IHBhdHRlcm4gcmVj b2duaXRpb24gbmF2aWdhdGlvbiBmdW5jdGlvbnMgYXJlIGxpc3RlZCBpbgorICAgPHhyZWYgbGlu a2VuZD0iZnVuY3Rpb25zLXJwci1uYXZpZ2F0aW9uLXRhYmxlIi8+LiAgVGhlc2UgZnVuY3Rpb25z CisgICBjYW4gYmUgdXNlZCB0byBkZXNjcmliZSBERUZJTkUgY2xhdXNlIG9mIFJvdyBwYXR0ZXJu IHJlY29nbml0aW9uLgorICA8L3BhcmE+CisKKyAgIDx0YWJsZSBpZD0iZnVuY3Rpb25zLXJwci1u YXZpZ2F0aW9uLXRhYmxlIj4KKyAgICA8dGl0bGU+Um93IFBhdHRlcm4gTmF2aWdhdGlvbiBGdW5j dGlvbnM8L3RpdGxlPgorICAgIDx0Z3JvdXAgY29scz0iMSI+CisgICAgIDx0aGVhZD4KKyAgICAg IDxyb3c+CisgICAgICAgPGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9 ImZ1bmNfc2lnbmF0dXJlIj4KKyAgICAgICAgRnVuY3Rpb24KKyAgICAgICA8L3BhcmE+CisgICAg ICAgPHBhcmE+CisgICAgICAgIERlc2NyaXB0aW9uCisgICAgICAgPC9wYXJhPjwvZW50cnk+Cisg ICAgICA8L3Jvdz4KKyAgICAgPC90aGVhZD4KKworICAgICA8dGJvZHk+CisgICAgICA8cm93Pgor ICAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5jX3Np Z25hdHVyZSI+CisgICAgICAgIDxpbmRleHRlcm0+CisgICAgICAgICA8cHJpbWFyeT5wcmV2PC9w cmltYXJ5PgorICAgICAgICA8L2luZGV4dGVybT4KKyAgICAgICAgPGZ1bmN0aW9uPnByZXY8L2Z1 bmN0aW9uPiAoIDxwYXJhbWV0ZXI+dmFsdWU8L3BhcmFtZXRlcj4gPHR5cGU+YW55ZWxlbWVudDwv dHlwZT4gKQorICAgICAgICA8cmV0dXJudmFsdWU+YW55ZWxlbWVudDwvcmV0dXJudmFsdWU+Cisg ICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBSZXR1cm5zIHRoZSBjb2x1bW4g dmFsdWUgYXQgdGhlIHByZXZpb3VzIHJvdzsKKyAgICAgICAgcmV0dXJucyBOVUxMIGlmIHRoZXJl IGlzIG5vIHByZXZpb3VzIHJvdyBpbiB0aGUgd2luZG93IGZyYW1lLgorICAgICAgIDwvcGFyYT48 L2VudHJ5PgorICAgICAgPC9yb3c+CisKKyAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5IHJvbGU9 ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4KKyAgICAgICAg PGluZGV4dGVybT4KKyAgICAgICAgIDxwcmltYXJ5Pm5leHQ8L3ByaW1hcnk+CisgICAgICAgIDwv aW5kZXh0ZXJtPgorICAgICAgICA8ZnVuY3Rpb24+bmV4dDwvZnVuY3Rpb24+ICggPHBhcmFtZXRl cj52YWx1ZTwvcGFyYW1ldGVyPiA8dHlwZT5hbnllbGVtZW50PC90eXBlPiApCisgICAgICAgIDxy ZXR1cm52YWx1ZT5hbnllbGVtZW50PC9yZXR1cm52YWx1ZT4KKyAgICAgICA8L3BhcmE+CisgICAg ICAgPHBhcmE+CisgICAgICAgIFJldHVybnMgdGhlIGNvbHVtbiB2YWx1ZSBhdCB0aGUgbmV4dCBy b3c7CisgICAgICAgIHJldHVybnMgTlVMTCBpZiB0aGVyZSBpcyBubyBuZXh0IHJvdyBpbiB0aGUg d2luZG93IGZyYW1lLgorICAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICAgPC9yb3c+CisKKyAg ICAgPC90Ym9keT4KKyAgICA8L3Rncm91cD4KKyAgIDwvdGFibGU+CisKICAgPG5vdGU+CiAgICA8 cGFyYT4KICAgICBUaGUgU1FMIHN0YW5kYXJkIGRlZmluZXMgYSA8bGl0ZXJhbD5SRVNQRUNUIE5V TExTPC9saXRlcmFsPiBvcgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9zZWxlY3Quc2dt bCBiL2RvYy9zcmMvc2dtbC9yZWYvc2VsZWN0LnNnbWwKaW5kZXggZDcwODllYWMwYmUuLjU4MzNk YzcwYjQzIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3NlbGVjdC5zZ21sCisrKyBiL2Rv Yy9zcmMvc2dtbC9yZWYvc2VsZWN0LnNnbWwKQEAgLTkyNyw2ICs5MjcsNyBAQCBXSU5ET1cgPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPndpbmRvd19uYW1lPC9yZXBsYWNlYWJsZT4gQVMg KCA8cmVwbGFjZWFibAogWyBQQVJUSVRJT04gQlkgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPmV4cHJlc3Npb248L3JlcGxhY2VhYmxlPiBbLCAuLi5dIF0KIFsgT1JERVIgQlkgPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmV4cHJlc3Npb248L3JlcGxhY2VhYmxlPiBbIEFTQyB8 IERFU0MgfCBVU0lORyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+b3BlcmF0b3I8L3Jl cGxhY2VhYmxlPiBdIFsgTlVMTFMgeyBGSVJTVCB8IExBU1QgfSBdIFssIC4uLl0gXQogWyA8cmVw bGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZnJhbWVfY2xhdXNlPC9yZXBsYWNlYWJsZT4gXQor WyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cm93X3BhdHRlcm5fY29tbW9uX3N5bnRh eDwvcmVwbGFjZWFibGU+IF0KIDwvc3lub3BzaXM+CiAgICA8L3BhcmE+CiAKQEAgLTk2OSw4ICs5 NzAsOCBAQCBXSU5ET1cgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPndpbmRvd19uYW1l PC9yZXBsYWNlYWJsZT4gQVMgKCA8cmVwbGFjZWFibAogICAgIFRoZSA8cmVwbGFjZWFibGUgY2xh c3M9InBhcmFtZXRlciI+ZnJhbWVfY2xhdXNlPC9yZXBsYWNlYWJsZT4gY2FuIGJlIG9uZSBvZgog CiA8c3lub3BzaXM+Ci17IFJBTkdFIHwgUk9XUyB8IEdST1VQUyB9IDxyZXBsYWNlYWJsZT5mcmFt ZV9zdGFydDwvcmVwbGFjZWFibGU+IFsgPHJlcGxhY2VhYmxlPmZyYW1lX2V4Y2x1c2lvbjwvcmVw bGFjZWFibGU+IF0KLXsgUkFOR0UgfCBST1dTIHwgR1JPVVBTIH0gQkVUV0VFTiA8cmVwbGFjZWFi bGU+ZnJhbWVfc3RhcnQ8L3JlcGxhY2VhYmxlPiBBTkQgPHJlcGxhY2VhYmxlPmZyYW1lX2VuZDwv cmVwbGFjZWFibGU+IFsgPHJlcGxhY2VhYmxlPmZyYW1lX2V4Y2x1c2lvbjwvcmVwbGFjZWFibGU+ IF0KK3sgUkFOR0UgfCBST1dTIHwgR1JPVVBTIH0gPHJlcGxhY2VhYmxlPmZyYW1lX3N0YXJ0PC9y ZXBsYWNlYWJsZT4gWyA8cmVwbGFjZWFibGU+ZnJhbWVfZXhjbHVzaW9uPC9yZXBsYWNlYWJsZT4g XSBbcm93X3BhdHRlcm5fY29tbW9uX3N5bnRheF0KK3sgUkFOR0UgfCBST1dTIHwgR1JPVVBTIH0g QkVUV0VFTiA8cmVwbGFjZWFibGU+ZnJhbWVfc3RhcnQ8L3JlcGxhY2VhYmxlPiBBTkQgPHJlcGxh Y2VhYmxlPmZyYW1lX2VuZDwvcmVwbGFjZWFibGU+IFsgPHJlcGxhY2VhYmxlPmZyYW1lX2V4Y2x1 c2lvbjwvcmVwbGFjZWFibGU+IF0gW3Jvd19wYXR0ZXJuX2NvbW1vbl9zeW50YXhdCiA8L3N5bm9w c2lzPgogCiAgICAgd2hlcmUgPHJlcGxhY2VhYmxlPmZyYW1lX3N0YXJ0PC9yZXBsYWNlYWJsZT4K QEAgLTEwNzcsOSArMTA3OCw1MSBAQCBFWENMVURFIE5PIE9USEVSUwogICAgIGEgZ2l2ZW4gcGVl ciBncm91cCB3aWxsIGJlIGluIHRoZSBmcmFtZSBvciBleGNsdWRlZCBmcm9tIGl0LgogICAgPC9w YXJhPgogCisgICA8cGFyYT4KKyAgICBUaGUKKyAgICBvcHRpb25hbCA8cmVwbGFjZWFibGUgY2xh c3M9InBhcmFtZXRlciI+cm93X3BhdHRlcm5fY29tbW9uX3N5bnRheDwvcmVwbGFjZWFibGU+Cisg ICAgZGVmaW5lcyB0aGUgPGZpcnN0dGVybT5yb3cgcGF0dGVybiByZWNvZ25pdGlvbiBjb25kaXRp b248L2ZpcnN0dGVybT4gZm9yCisgICAgdGhpcworICAgIHdpbmRvdy4gPHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPnJvd19wYXR0ZXJuX2NvbW1vbl9zeW50YXg8L3JlcGxhY2VhYmxlPgor ICAgIGluY2x1ZGVzIGZvbGxvd2luZyBzdWJjbGF1c2VzLgorCis8c3lub3BzaXM+CitbIEFGVEVS IE1BVENIIFNLSVAgUEFTVCBMQVNUIFJPVyB8IEFGVEVSIE1BVENIIFNLSVAgVE8gTkVYVCBST1cg XQorUEFUVEVSTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGF0dGVybl92YXJpYWJs ZV9uYW1lPC9yZXBsYWNlYWJsZT5bK10gWywgLi4uXQorREVGSU5FIDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj5kZWZpbml0aW9uX3ZhcmlibGVfbmFtZTwvcmVwbGFjZWFibGU+IEFTIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gWywg Li4uXQorPC9zeW5vcHNpcz4KKyAgICA8bGl0ZXJhbD5BRlRFUiBNQVRDSCBTS0lQIFBBU1QgTEFT VCBST1c8L2xpdGVyYWw+IG9yIDxsaXRlcmFsPkFGVEVSIE1BVENICisgICAgU0tJUCBUTyBORVhU IFJPVzwvbGl0ZXJhbD4gY29udHJvbHMgaG93IHRvIHByb2NlZWQgdG8gbmV4dCByb3cgcG9zaXRp b24KKyAgICBhZnRlciBhIG1hdGNoIGZvdW5kLiBXaXRoIDxsaXRlcmFsPkFGVEVSIE1BVENIIFNL SVAgUEFTVCBMQVNUCisgICAgUk9XPC9saXRlcmFsPiAodGhlIGRlZmF1bHQpIG5leHQgcm93IHBv c2l0aW9uIGlzIG5leHQgdG8gdGhlIGxhc3Qgcm93IG9mCisgICAgcHJldmlvdXMgbWF0Y2guIE9u IHRoZSBvdGhlciBoYW5kLCB3aXRoIDxsaXRlcmFsPkFGVEVSIE1BVENIIFNLSVAgVE8gTkVYVAor ICAgIFJPVzwvbGl0ZXJhbD4gbmV4dCByb3cgcG9zaXRpb24gaXMgYWx3YXlzIG5leHQgdG8gdGhl IGxhc3Qgcm93IG9mIHByZXZpb3VzCisgICAgbWF0Y2guIDxsaXRlcmFsPkRFRklORTwvbGl0ZXJh bD4gZGVmaW5lcyBkZWZpbml0aW9uIHZhcmlhYmxlcyBhbG9uZyB3aXRoIGEKKyAgICBib29sZWFu IGV4cHJlc3Npb24uIDxsaXRlcmFsPlBBVFRFUk48L2xpdGVyYWw+IGRlZmluZXMgYSBzZXF1ZW5j ZSBvZiByb3dzCisgICAgdGhhdCBzYXRpc2ZpZXMgY2VydGFpbiBjb25kaXRpb25zIHVzaW5nIHZh cmlhYmxlcyBkZWZpbmVkCisgICAgaW4gPGxpdGVyYWw+REVGSU5FPC9saXRlcmFsPiBjbGF1c2Uu IElmIHRoZSB2YXJpYWJsZSBpcyBub3QgZGVmaW5lZCBpbgorICAgIHRoZSA8bGl0ZXJhbD5ERUZJ TkU8L2xpdGVyYWw+IGNsYXVzZSwgaXQgaXMgaW1wbGljaXRseSBhc3N1bWVkIGZvbGxvd2luZwor ICAgIGlzIGRlZmluZWQgaW4gdGhlIDxsaXRlcmFsPkRFRklORTwvbGl0ZXJhbD4gY2xhdXNlLgor Cis8c3lub3BzaXM+Cis8bGl0ZXJhbD52YXJpYWJsZV9uYW1lPC9saXRlcmFsPiBBUyBUUlVFCis8 L3N5bm9wc2lzPgorCisgICAgTm90ZSB0aGF0IHRoZSBtYXhpbXUgbnVtYmVyIG9mIHZhcmlhYmxl cyBkZWZpbmVkCisgICAgaW4gPGxpdGVyYWw+REVGSU5FPC9saXRlcmFsPiBjbGF1c2UgaXMgMjYu CisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIFRoZSBTUUwgc3RhbmRhcmQgZGVmaW5lcyBt b3JlIHN1YmNsYXVzZXM6IDxsaXRlcmFsPk1FQVNVUkVTPC9saXRlcmFsPgorICAgIGFuZCA8bGl0 ZXJhbD5TVUJTRVQ8L2xpdGVyYWw+LiBUaGV5IGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZAor ICAgIGluIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4uIEFsc28gaW4gdGhl IHN0YW5kYXJkIHRoZXJlIGFyZQorICAgIG1vcmUgdmFyaWF0aW9ucyBpbiA8bGl0ZXJhbD5BRlRF UiBNQVRDSDwvbGl0ZXJhbD4gY2xhdXNlLgorICAgPC9wYXJhPgorCiAgICA8cGFyYT4KICAgICBU aGUgcHVycG9zZSBvZiBhIDxsaXRlcmFsPldJTkRPVzwvbGl0ZXJhbD4gY2xhdXNlIGlzIHRvIHNw ZWNpZnkgdGhlCi0gICAgYmVoYXZpb3Igb2YgPGZpcnN0dGVybT53aW5kb3cgZnVuY3Rpb25zPC9m aXJzdHRlcm0+IGFwcGVhcmluZyBpbiB0aGUgcXVlcnkncworICAgIGJlaGF2aW9yIG9mIDxmaXJz dHRlcm0+d2luZG93IGZ1bmN0aW9uczwvZmlyc3R0ZXJtPiBhcHBlYXJpbmcgaW4gdGhlCisgICAg cXVlcnkncwogICAgIDxsaW5rIGxpbmtlbmQ9InNxbC1zZWxlY3QtbGlzdCI+PGNvbW1hbmQ+U0VM RUNUPC9jb21tYW5kPiBsaXN0PC9saW5rPiBvcgogICAgIDxsaW5rIGxpbmtlbmQ9InNxbC1vcmRl cmJ5Ij48bGl0ZXJhbD5PUkRFUiBCWTwvbGl0ZXJhbD48L2xpbms+IGNsYXVzZS4KICAgICBUaGVz ZSBmdW5jdGlvbnMKLS0gCjIuMjUuMQoK ----Next_Part(Sat_Aug_16_17_45_52_2025_123)-- Content-Type: Application/Octet-Stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v32-0007-Row-pattern-recognition-patch-tests.patch" RnJvbSBjZmQyY2I5ZmMwOGVkNjhhNzdiZmE4NzI3ZDRjYTk1OTE2NDVhNDJhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYXRzdW8gSXNoaWkgPGlzaGlpQHBvc3RncmVzcWwub3JnPgpE YXRlOiBTYXQsIDE2IEF1ZyAyMDI1IDE3OjMzOjMzICswOTAwClN1YmplY3Q6IFtQQVRDSCB2MzIg Ny85XSBSb3cgcGF0dGVybiByZWNvZ25pdGlvbiBwYXRjaCAodGVzdHMpLgoKLS0tCiBzcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3Jwci5vdXQgIHwgOTc5ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlIHwgICAyICstCiBzcmMv dGVzdC9yZWdyZXNzL3NxbC9ycHIuc3FsICAgICAgIHwgNDg2ICsrKysrKysrKysrKysrCiAzIGZp bGVzIGNoYW5nZWQsIDE0NjYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnByLm91dAogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Jwci5zcWwKCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3Jwci5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Jw ci5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjU5Y2ZlZDE4MGU3 Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ycHIub3V0CkBA IC0wLDAgKzEsOTc5IEBACistLQorLS0gVGVzdCBmb3Igcm93IHBhdHRlcm4gZGVmaW5pdGlvbiBj bGF1c2UKKy0tCitDUkVBVEUgVEVNUCBUQUJMRSBzdG9jayAoCisgICAgICAgY29tcGFueSBURVhU LAorICAgICAgIHRkYXRlIERBVEUsCisgICAgICAgcHJpY2UgSU5URUdFUgorKTsKK0lOU0VSVCBJ TlRPIHN0b2NrIFZBTFVFUyAoJ2NvbXBhbnkxJywgJzIwMjMtMDctMDEnLCAxMDApOworSU5TRVJU IElOVE8gc3RvY2sgVkFMVUVTICgnY29tcGFueTEnLCAnMjAyMy0wNy0wMicsIDIwMCk7CitJTlNF UlQgSU5UTyBzdG9jayBWQUxVRVMgKCdjb21wYW55MScsICcyMDIzLTA3LTAzJywgMTUwKTsKK0lO U0VSVCBJTlRPIHN0b2NrIFZBTFVFUyAoJ2NvbXBhbnkxJywgJzIwMjMtMDctMDQnLCAxNDApOwor SU5TRVJUIElOVE8gc3RvY2sgVkFMVUVTICgnY29tcGFueTEnLCAnMjAyMy0wNy0wNScsIDE1MCk7 CitJTlNFUlQgSU5UTyBzdG9jayBWQUxVRVMgKCdjb21wYW55MScsICcyMDIzLTA3LTA2JywgOTAp OworSU5TRVJUIElOVE8gc3RvY2sgVkFMVUVTICgnY29tcGFueTEnLCAnMjAyMy0wNy0wNycsIDEx MCk7CitJTlNFUlQgSU5UTyBzdG9jayBWQUxVRVMgKCdjb21wYW55MScsICcyMDIzLTA3LTA4Jywg MTMwKTsKK0lOU0VSVCBJTlRPIHN0b2NrIFZBTFVFUyAoJ2NvbXBhbnkxJywgJzIwMjMtMDctMDkn LCAxMjApOworSU5TRVJUIElOVE8gc3RvY2sgVkFMVUVTICgnY29tcGFueTEnLCAnMjAyMy0wNy0x MCcsIDEzMCk7CitJTlNFUlQgSU5UTyBzdG9jayBWQUxVRVMgKCdjb21wYW55MicsICcyMDIzLTA3 LTAxJywgNTApOworSU5TRVJUIElOVE8gc3RvY2sgVkFMVUVTICgnY29tcGFueTInLCAnMjAyMy0w Ny0wMicsIDIwMDApOworSU5TRVJUIElOVE8gc3RvY2sgVkFMVUVTICgnY29tcGFueTInLCAnMjAy My0wNy0wMycsIDE1MDApOworSU5TRVJUIElOVE8gc3RvY2sgVkFMVUVTICgnY29tcGFueTInLCAn MjAyMy0wNy0wNCcsIDE0MDApOworSU5TRVJUIElOVE8gc3RvY2sgVkFMVUVTICgnY29tcGFueTIn LCAnMjAyMy0wNy0wNScsIDE1MDApOworSU5TRVJUIElOVE8gc3RvY2sgVkFMVUVTICgnY29tcGFu eTInLCAnMjAyMy0wNy0wNicsIDYwKTsKK0lOU0VSVCBJTlRPIHN0b2NrIFZBTFVFUyAoJ2NvbXBh bnkyJywgJzIwMjMtMDctMDcnLCAxMTAwKTsKK0lOU0VSVCBJTlRPIHN0b2NrIFZBTFVFUyAoJ2Nv bXBhbnkyJywgJzIwMjMtMDctMDgnLCAxMzAwKTsKK0lOU0VSVCBJTlRPIHN0b2NrIFZBTFVFUyAo J2NvbXBhbnkyJywgJzIwMjMtMDctMDknLCAxMjAwKTsKK0lOU0VSVCBJTlRPIHN0b2NrIFZBTFVF UyAoJ2NvbXBhbnkyJywgJzIwMjMtMDctMTAnLCAxMzAwKTsKK1NFTEVDVCAqIEZST00gc3RvY2s7 CisgY29tcGFueSAgfCAgIHRkYXRlICAgIHwgcHJpY2UgCistLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tCisgY29tcGFueTEgfCAwNy0wMS0yMDIzIHwgICAxMDAKKyBjb21wYW55MSB8IDA3 LTAyLTIwMjMgfCAgIDIwMAorIGNvbXBhbnkxIHwgMDctMDMtMjAyMyB8ICAgMTUwCisgY29tcGFu eTEgfCAwNy0wNC0yMDIzIHwgICAxNDAKKyBjb21wYW55MSB8IDA3LTA1LTIwMjMgfCAgIDE1MAor IGNvbXBhbnkxIHwgMDctMDYtMjAyMyB8ICAgIDkwCisgY29tcGFueTEgfCAwNy0wNy0yMDIzIHwg ICAxMTAKKyBjb21wYW55MSB8IDA3LTA4LTIwMjMgfCAgIDEzMAorIGNvbXBhbnkxIHwgMDctMDkt MjAyMyB8ICAgMTIwCisgY29tcGFueTEgfCAwNy0xMC0yMDIzIHwgICAxMzAKKyBjb21wYW55MiB8 IDA3LTAxLTIwMjMgfCAgICA1MAorIGNvbXBhbnkyIHwgMDctMDItMjAyMyB8ICAyMDAwCisgY29t cGFueTIgfCAwNy0wMy0yMDIzIHwgIDE1MDAKKyBjb21wYW55MiB8IDA3LTA0LTIwMjMgfCAgMTQw MAorIGNvbXBhbnkyIHwgMDctMDUtMjAyMyB8ICAxNTAwCisgY29tcGFueTIgfCAwNy0wNi0yMDIz IHwgICAgNjAKKyBjb21wYW55MiB8IDA3LTA3LTIwMjMgfCAgMTEwMAorIGNvbXBhbnkyIHwgMDct MDgtMjAyMyB8ICAxMzAwCisgY29tcGFueTIgfCAwNy0wOS0yMDIzIHwgIDEyMDAKKyBjb21wYW55 MiB8IDA3LTEwLTIwMjMgfCAgMTMwMAorKDIwIHJvd3MpCisKKy0tIGJhc2ljIHRlc3QgdXNpbmcg UFJFVgorU0VMRUNUIGNvbXBhbnksIHRkYXRlLCBwcmljZSwgZmlyc3RfdmFsdWUocHJpY2UpIE9W RVIgdywgbGFzdF92YWx1ZShwcmljZSkgT1ZFUiB3LAorIG50aF92YWx1ZSh0ZGF0ZSwgMikgT1ZF UiB3IEFTIG50aF9zZWNvbmQKKyBGUk9NIHN0b2NrCisgV0lORE9XIHcgQVMgKAorIFBBUlRJVElP TiBCWSBjb21wYW55CisgUk9XUyBCRVRXRUVOIENVUlJFTlQgUk9XIEFORCBVTkJPVU5ERUQgRk9M TE9XSU5HCisgSU5JVElBTAorIFBBVFRFUk4gKFNUQVJUIFVQKyBET1dOKykKKyBERUZJTkUKKyAg U1RBUlQgQVMgVFJVRSwKKyAgVVAgQVMgcHJpY2UgPiBQUkVWKHByaWNlKSwKKyAgRE9XTiBBUyBw cmljZSA8IFBSRVYocHJpY2UpCispOworIGNvbXBhbnkgIHwgICB0ZGF0ZSAgICB8IHByaWNlIHwg Zmlyc3RfdmFsdWUgfCBsYXN0X3ZhbHVlIHwgbnRoX3NlY29uZCAKKy0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tCisg Y29tcGFueTEgfCAwNy0wMS0yMDIzIHwgICAxMDAgfCAgICAgICAgIDEwMCB8ICAgICAgICAxNDAg fCAwNy0wMi0yMDIzCisgY29tcGFueTEgfCAwNy0wMi0yMDIzIHwgICAyMDAgfCAgICAgICAgICAg ICB8ICAgICAgICAgICAgfCAKKyBjb21wYW55MSB8IDA3LTAzLTIwMjMgfCAgIDE1MCB8ICAgICAg ICAgICAgIHwgICAgICAgICAgICB8IAorIGNvbXBhbnkxIHwgMDctMDQtMjAyMyB8ICAgMTQwIHwg ICAgICAgICAgICAgfCAgICAgICAgICAgIHwgCisgY29tcGFueTEgfCAwNy0wNS0yMDIzIHwgICAx NTAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAKKyBjb21wYW55MSB8IDA3LTA2LTIwMjMg fCAgICA5MCB8ICAgICAgICAgIDkwIHwgICAgICAgIDEyMCB8IDA3LTA3LTIwMjMKKyBjb21wYW55 MSB8IDA3LTA3LTIwMjMgfCAgIDExMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8IAorIGNv bXBhbnkxIHwgMDctMDgtMjAyMyB8ICAgMTMwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwg CisgY29tcGFueTEgfCAwNy0wOS0yMDIzIHwgICAxMjAgfCAgICAgICAgICAgICB8ICAgICAgICAg ICAgfCAKKyBjb21wYW55MSB8IDA3LTEwLTIwMjMgfCAgIDEzMCB8ICAgICAgICAgICAgIHwgICAg ICAgICAgICB8IAorIGNvbXBhbnkyIHwgMDctMDEtMjAyMyB8ICAgIDUwIHwgICAgICAgICAgNTAg fCAgICAgICAxNDAwIHwgMDctMDItMjAyMworIGNvbXBhbnkyIHwgMDctMDItMjAyMyB8ICAyMDAw IHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgCisgY29tcGFueTIgfCAwNy0wMy0yMDIzIHwg IDE1MDAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAKKyBjb21wYW55MiB8IDA3LTA0LTIw MjMgfCAgMTQwMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8IAorIGNvbXBhbnkyIHwgMDct MDUtMjAyMyB8ICAxNTAwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgCisgY29tcGFueTIg fCAwNy0wNi0yMDIzIHwgICAgNjAgfCAgICAgICAgICA2MCB8ICAgICAgIDEyMDAgfCAwNy0wNy0y MDIzCisgY29tcGFueTIgfCAwNy0wNy0yMDIzIHwgIDExMDAgfCAgICAgICAgICAgICB8ICAgICAg ICAgICAgfCAKKyBjb21wYW55MiB8IDA3LTA4LTIwMjMgfCAgMTMwMCB8ICAgICAgICAgICAgIHwg ICAgICAgICAgICB8IAorIGNvbXBhbnkyIHwgMDctMDktMjAyMyB8ICAxMjAwIHwgICAgICAgICAg ICAgfCAgICAgICAgICAgIHwgCisgY29tcGFueTIgfCAwNy0xMC0yMDIzIHwgIDEzMDAgfCAgICAg ICAgICAgICB8ICAgICAgICAgICAgfCAKKygyMCByb3dzKQorCistLSBiYXNpYyB0ZXN0IHVzaW5n IFBSRVYuIFVQIGFwcGVhcnMgdHdpY2UKK1NFTEVDVCBjb21wYW55LCB0ZGF0ZSwgcHJpY2UsIGZp cnN0X3ZhbHVlKHByaWNlKSBPVkVSIHcsIGxhc3RfdmFsdWUocHJpY2UpIE9WRVIgdywKKyBudGhf dmFsdWUodGRhdGUsIDIpIE9WRVIgdyBBUyBudGhfc2Vjb25kCisgRlJPTSBzdG9jaworIFdJTkRP VyB3IEFTICgKKyBQQVJUSVRJT04gQlkgY29tcGFueQorIFJPV1MgQkVUV0VFTiBDVVJSRU5UIFJP VyBBTkQgVU5CT1VOREVEIEZPTExPV0lORworIElOSVRJQUwKKyBQQVRURVJOIChTVEFSVCBVUCsg RE9XTisgVVArKQorIERFRklORQorICBTVEFSVCBBUyBUUlVFLAorICBVUCBBUyBwcmljZSA+IFBS RVYocHJpY2UpLAorICBET1dOIEFTIHByaWNlIDwgUFJFVihwcmljZSkKKyk7CisgY29tcGFueSAg fCAgIHRkYXRlICAgIHwgcHJpY2UgfCBmaXJzdF92YWx1ZSB8IGxhc3RfdmFsdWUgfCBudGhfc2Vj b25kIAorLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0KKyBjb21wYW55MSB8IDA3LTAxLTIwMjMgfCAgIDEwMCB8ICAg ICAgICAgMTAwIHwgICAgICAgIDE1MCB8IDA3LTAyLTIwMjMKKyBjb21wYW55MSB8IDA3LTAyLTIw MjMgfCAgIDIwMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8IAorIGNvbXBhbnkxIHwgMDct MDMtMjAyMyB8ICAgMTUwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgCisgY29tcGFueTEg fCAwNy0wNC0yMDIzIHwgICAxNDAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAKKyBjb21w YW55MSB8IDA3LTA1LTIwMjMgfCAgIDE1MCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8IAor IGNvbXBhbnkxIHwgMDctMDYtMjAyMyB8ICAgIDkwIHwgICAgICAgICAgOTAgfCAgICAgICAgMTMw IHwgMDctMDctMjAyMworIGNvbXBhbnkxIHwgMDctMDctMjAyMyB8ICAgMTEwIHwgICAgICAgICAg ICAgfCAgICAgICAgICAgIHwgCisgY29tcGFueTEgfCAwNy0wOC0yMDIzIHwgICAxMzAgfCAgICAg ICAgICAgICB8ICAgICAgICAgICAgfCAKKyBjb21wYW55MSB8IDA3LTA5LTIwMjMgfCAgIDEyMCB8 ICAgICAgICAgICAgIHwgICAgICAgICAgICB8IAorIGNvbXBhbnkxIHwgMDctMTAtMjAyMyB8ICAg MTMwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgCisgY29tcGFueTIgfCAwNy0wMS0yMDIz IHwgICAgNTAgfCAgICAgICAgICA1MCB8ICAgICAgIDE1MDAgfCAwNy0wMi0yMDIzCisgY29tcGFu eTIgfCAwNy0wMi0yMDIzIHwgIDIwMDAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAKKyBj b21wYW55MiB8IDA3LTAzLTIwMjMgfCAgMTUwMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8 IAorIGNvbXBhbnkyIHwgMDctMDQtMjAyMyB8ICAxNDAwIHwgICAgICAgICAgICAgfCAgICAgICAg ICAgIHwgCisgY29tcGFueTIgfCAwNy0wNS0yMDIzIHwgIDE1MDAgfCAgICAgICAgICAgICB8ICAg ICAgICAgICAgfCAKKyBjb21wYW55MiB8IDA3LTA2LTIwMjMgfCAgICA2MCB8ICAgICAgICAgIDYw IHwgICAgICAgMTMwMCB8IDA3LTA3LTIwMjMKKyBjb21wYW55MiB8IDA3LTA3LTIwMjMgfCAgMTEw MCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8IAorIGNvbXBhbnkyIHwgMDctMDgtMjAyMyB8 ICAxMzAwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgCisgY29tcGFueTIgfCAwNy0wOS0y MDIzIHwgIDEyMDAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAKKyBjb21wYW55MiB8IDA3 LTEwLTIwMjMgfCAgMTMwMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8IAorKDIwIHJvd3Mp CisKKy0tIGJhc2ljIHRlc3QgdXNpbmcgUFJFVi4gVXNlICcqJworU0VMRUNUIGNvbXBhbnksIHRk YXRlLCBwcmljZSwgZmlyc3RfdmFsdWUocHJpY2UpIE9WRVIgdywgbGFzdF92YWx1ZShwcmljZSkg T1ZFUiB3LAorIG50aF92YWx1ZSh0ZGF0ZSwgMikgT1ZFUiB3IEFTIG50aF9zZWNvbmQKKyBGUk9N IHN0b2NrCisgV0lORE9XIHcgQVMgKAorIFBBUlRJVElPTiBCWSBjb21wYW55CisgUk9XUyBCRVRX RUVOIENVUlJFTlQgUk9XIEFORCBVTkJPVU5ERUQgRk9MTE9XSU5HCisgSU5JVElBTAorIFBBVFRF Uk4gKFNUQVJUIFVQKiBET1dOKykKKyBERUZJTkUKKyAgU1RBUlQgQVMgVFJVRSwKKyAgVVAgQVMg cHJpY2UgPiBQUkVWKHByaWNlKSwKKyAgRE9XTiBBUyBwcmljZSA8IFBSRVYocHJpY2UpCispOwor IGNvbXBhbnkgIHwgICB0ZGF0ZSAgICB8IHByaWNlIHwgZmlyc3RfdmFsdWUgfCBsYXN0X3ZhbHVl IHwgbnRoX3NlY29uZCAKKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tCisgY29tcGFueTEgfCAwNy0wMS0yMDIzIHwg ICAxMDAgfCAgICAgICAgIDEwMCB8ICAgICAgICAxNDAgfCAwNy0wMi0yMDIzCisgY29tcGFueTEg fCAwNy0wMi0yMDIzIHwgICAyMDAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAKKyBjb21w YW55MSB8IDA3LTAzLTIwMjMgfCAgIDE1MCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8IAor IGNvbXBhbnkxIHwgMDctMDQtMjAyMyB8ICAgMTQwIHwgICAgICAgICAgICAgfCAgICAgICAgICAg IHwgCisgY29tcGFueTEgfCAwNy0wNS0yMDIzIHwgICAxNTAgfCAgICAgICAgIDE1MCB8ICAgICAg ICAgOTAgfCAwNy0wNi0yMDIzCisgY29tcGFueTEgfCAwNy0wNi0yMDIzIHwgICAgOTAgfCAgICAg ICAgICAgICB8ICAgICAgICAgICAgfCAKKyBjb21wYW55MSB8IDA3LTA3LTIwMjMgfCAgIDExMCB8 ICAgICAgICAgMTEwIHwgICAgICAgIDEyMCB8IDA3LTA4LTIwMjMKKyBjb21wYW55MSB8IDA3LTA4 LTIwMjMgfCAgIDEzMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8IAorIGNvbXBhbnkxIHwg MDctMDktMjAyMyB8ICAgMTIwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgCisgY29tcGFu eTEgfCAwNy0xMC0yMDIzIHwgICAxMzAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAKKyBj b21wYW55MiB8IDA3LTAxLTIwMjMgfCAgICA1MCB8ICAgICAgICAgIDUwIHwgICAgICAgMTQwMCB8 IDA3LTAyLTIwMjMKKyBjb21wYW55MiB8IDA3LTAyLTIwMjMgfCAgMjAwMCB8ICAgICAgICAgICAg IHwgICAgICAgICAgICB8IAorIGNvbXBhbnkyIHwgMDctMDMtMjAyMyB8ICAxNTAwIHwgICAgICAg ICAgICAgfCAgICAgICAgICAgIHwgCisgY29tcGFueTIgfCAwNy0wNC0yMDIzIHwgIDE0MDAgfCAg ICAgICAgICAgICB8ICAgICAgICAgICAgfCAKKyBjb21wYW55MiB8IDA3LTA1LTIwMjMgfCAgMTUw MCB8ICAgICAgICAxNTAwIHwgICAgICAgICA2MCB8IDA3LTA2LTIwMjMKKyBjb21wYW55MiB8IDA3 LTA2LTIwMjMgfCAgICA2MCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8IAorIGNvbXBhbnky IHwgMDctMDctMjAyMyB8ICAxMTAwIHwgICAgICAgIDExMDAgfCAgICAgICAxMjAwIHwgMDctMDgt MjAyMworIGNvbXBhbnkyIHwgMDctMDgtMjAyMyB8ICAxMzAwIHwgICAgICAgICAgICAgfCAgICAg ICAgICAgIHwgCisgY29tcGFueTIgfCAwNy0wOS0yMDIzIHwgIDEyMDAgfCAgICAgICAgICAgICB8 ICAgICAgICAgICAgfCAKKyBjb21wYW55MiB8IDA3LTEwLTIwMjMgfCAgMTMwMCB8ICAgICAgICAg ICAgIHwgICAgICAgICAgICB8IAorKDIwIHJvd3MpCisKKy0tIGJhc2ljIHRlc3Qgd2l0aCBub25l IGdyZWVkeSBwYXR0ZXJuCitTRUxFQ1QgY29tcGFueSwgdGRhdGUsIHByaWNlLCBjb3VudCgqKSBP VkVSIHcKKyBGUk9NIHN0b2NrCisgV0lORE9XIHcgQVMgKAorIFBBUlRJVElPTiBCWSBjb21wYW55 CisgUk9XUyBCRVRXRUVOIENVUlJFTlQgUk9XIEFORCBVTkJPVU5ERUQgRk9MTE9XSU5HCisgSU5J VElBTAorIFBBVFRFUk4gKEEgQSBBKQorIERFRklORQorICBBIEFTIHByaWNlID49IDE0MCBBTkQg cHJpY2UgPD0gMTUwCispOworIGNvbXBhbnkgIHwgICB0ZGF0ZSAgICB8IHByaWNlIHwgY291bnQg CistLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0KKyBjb21wYW55MSB8IDA3 LTAxLTIwMjMgfCAgIDEwMCB8ICAgICAwCisgY29tcGFueTEgfCAwNy0wMi0yMDIzIHwgICAyMDAg fCAgICAgMAorIGNvbXBhbnkxIHwgMDctMDMtMjAyMyB8ICAgMTUwIHwgICAgIDMKKyBjb21wYW55 MSB8IDA3LTA0LTIwMjMgfCAgIDE0MCB8ICAgICAwCisgY29tcGFueTEgfCAwNy0wNS0yMDIzIHwg ICAxNTAgfCAgICAgMAorIGNvbXBhbnkxIHwgMDctMDYtMjAyMyB8ICAgIDkwIHwgICAgIDAKKyBj b21wYW55MSB8IDA3LTA3LTIwMjMgfCAgIDExMCB8ICAgICAwCisgY29tcGFueTEgfCAwNy0wOC0y MDIzIHwgICAxMzAgfCAgICAgMAorIGNvbXBhbnkxIHwgMDctMDktMjAyMyB8ICAgMTIwIHwgICAg IDAKKyBjb21wYW55MSB8IDA3LTEwLTIwMjMgfCAgIDEzMCB8ICAgICAwCisgY29tcGFueTIgfCAw Ny0wMS0yMDIzIHwgICAgNTAgfCAgICAgMAorIGNvbXBhbnkyIHwgMDctMDItMjAyMyB8ICAyMDAw IHwgICAgIDAKKyBjb21wYW55MiB8IDA3LTAzLTIwMjMgfCAgMTUwMCB8ICAgICAwCisgY29tcGFu eTIgfCAwNy0wNC0yMDIzIHwgIDE0MDAgfCAgICAgMAorIGNvbXBhbnkyIHwgMDctMDUtMjAyMyB8 ICAxNTAwIHwgICAgIDAKKyBjb21wYW55MiB8IDA3LTA2LTIwMjMgfCAgICA2MCB8ICAgICAwCisg Y29tcGFueTIgfCAwNy0wNy0yMDIzIHwgIDExMDAgfCAgICAgMAorIGNvbXBhbnkyIHwgMDctMDgt MjAyMyB8ICAxMzAwIHwgICAgIDAKKyBjb21wYW55MiB8IDA3LTA5LTIwMjMgfCAgMTIwMCB8ICAg ICAwCisgY29tcGFueTIgfCAwNy0xMC0yMDIzIHwgIDEzMDAgfCAgICAgMAorKDIwIHJvd3MpCisK Ky0tIGxhc3RfdmFsdWUoKSBzaG91bGQgcmVtYWluIGNvbnNpc3RlbnQKK1NFTEVDVCBjb21wYW55 LCB0ZGF0ZSwgcHJpY2UsIGxhc3RfdmFsdWUocHJpY2UpIE9WRVIgdworIEZST00gc3RvY2sKKyBX SU5ET1cgdyBBUyAoCisgUEFSVElUSU9OIEJZIGNvbXBhbnkKKyBPUkRFUiBCWSB0ZGF0ZQorIFJP V1MgQkVUV0VFTiBDVVJSRU5UIFJPVyBBTkQgVU5CT1VOREVEIEZPTExPV0lORworIElOSVRJQUwK KyBQQVRURVJOIChTVEFSVCBVUCsgRE9XTispCisgREVGSU5FCisgIFNUQVJUIEFTIFRSVUUsCisg IFVQIEFTIHByaWNlID4gUFJFVihwcmljZSksCisgIERPV04gQVMgcHJpY2UgPCBQUkVWKHByaWNl KQorKTsKKyBjb21wYW55ICB8ICAgdGRhdGUgICAgfCBwcmljZSB8IGxhc3RfdmFsdWUgCistLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLQorIGNvbXBhbnkxIHwgMDct MDEtMjAyMyB8ICAgMTAwIHwgICAgICAgIDE0MAorIGNvbXBhbnkxIHwgMDctMDItMjAyMyB8ICAg MjAwIHwgICAgICAgICAgIAorIGNvbXBhbnkxIHwgMDctMDMtMjAyMyB8ICAgMTUwIHwgICAgICAg ICAgIAorIGNvbXBhbnkxIHwgMDctMDQtMjAyMyB8ICAgMTQwIHwgICAgICAgICAgIAorIGNvbXBh bnkxIHwgMDctMDUtMjAyMyB8ICAgMTUwIHwgICAgICAgICAgIAorIGNvbXBhbnkxIHwgMDctMDYt MjAyMyB8ICAgIDkwIHwgICAgICAgIDEyMAorIGNvbXBhbnkxIHwgMDctMDctMjAyMyB8ICAgMTEw IHwgICAgICAgICAgIAorIGNvbXBhbnkxIHwgMDctMDgtMjAyMyB8ICAgMTMwIHwgICAgICAgICAg IAorIGNvbXBhbnkxIHwgMDctMDktMjAyMyB8ICAgMTIwIHwgICAgICAgICAgIAorIGNvbXBhbnkx IHwgMDctMTAtMjAyMyB8ICAgMTMwIHwgICAgICAgICAgIAorIGNvbXBhbnkyIHwgMDctMDEtMjAy MyB8ICAgIDUwIHwgICAgICAgMTQwMAorIGNvbXBhbnkyIHwgMDctMDItMjAyMyB8ICAyMDAwIHwg ICAgICAgICAgIAorIGNvbXBhbnkyIHwgMDctMDMtMjAyMyB8ICAxNTAwIHwgICAgICAgICAgIAor IGNvbXBhbnkyIHwgMDctMDQtMjAyMyB8ICAxNDAwIHwgICAgICAgICAgIAorIGNvbXBhbnkyIHwg MDctMDUtMjAyMyB8ICAxNTAwIHwgICAgICAgICAgIAorIGNvbXBhbnkyIHwgMDctMDYtMjAyMyB8 ICAgIDYwIHwgICAgICAgMTIwMAorIGNvbXBhbnkyIHwgMDctMDctMjAyMyB8ICAxMTAwIHwgICAg ICAgICAgIAorIGNvbXBhbnkyIHwgMDctMDgtMjAyMyB8ICAxMzAwIHwgICAgICAgICAgIAorIGNv bXBhbnkyIHwgMDctMDktMjAyMyB8ICAxMjAwIHwgICAgICAgICAgIAorIGNvbXBhbnkyIHwgMDct MTAtMjAyMyB8ICAxMzAwIHwgICAgICAgICAgIAorKDIwIHJvd3MpCisKKy0tIG9taXQgIlNUQVJU IiBpbiBERUZJTkUgYnV0IGl0IGlzIG9rIGJlY2F1c2UgIlNUQVJUIEFTIFRSVUUiIGlzCistLSBp bXBsaWNpdGx5IGRlZmluZWQuIHBlciBzcGVjLgorU0VMRUNUIGNvbXBhbnksIHRkYXRlLCBwcmlj ZSwgZmlyc3RfdmFsdWUocHJpY2UpIE9WRVIgdywgbGFzdF92YWx1ZShwcmljZSkgT1ZFUiB3LAor IG50aF92YWx1ZSh0ZGF0ZSwgMikgT1ZFUiB3IEFTIG50aF9zZWNvbmQKKyBGUk9NIHN0b2NrCisg V0lORE9XIHcgQVMgKAorIFBBUlRJVElPTiBCWSBjb21wYW55CisgUk9XUyBCRVRXRUVOIENVUlJF TlQgUk9XIEFORCBVTkJPVU5ERUQgRk9MTE9XSU5HCisgSU5JVElBTAorIFBBVFRFUk4gKFNUQVJU IFVQKyBET1dOKykKKyBERUZJTkUKKyAgVVAgQVMgcHJpY2UgPiBQUkVWKHByaWNlKSwKKyAgRE9X TiBBUyBwcmljZSA8IFBSRVYocHJpY2UpCispOworIGNvbXBhbnkgIHwgICB0ZGF0ZSAgICB8IHBy aWNlIHwgZmlyc3RfdmFsdWUgfCBsYXN0X3ZhbHVlIHwgbnRoX3NlY29uZCAKKy0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tCisgY29tcGFueTEgfCAwNy0wMS0yMDIzIHwgICAxMDAgfCAgICAgICAgIDEwMCB8ICAgICAg ICAxNDAgfCAwNy0wMi0yMDIzCisgY29tcGFueTEgfCAwNy0wMi0yMDIzIHwgICAyMDAgfCAgICAg ICAgICAgICB8ICAgICAgICAgICAgfCAKKyBjb21wYW55MSB8IDA3LTAzLTIwMjMgfCAgIDE1MCB8 ICAgICAgICAgICAgIHwgICAgICAgICAgICB8IAorIGNvbXBhbnkxIHwgMDctMDQtMjAyMyB8ICAg MTQwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgCisgY29tcGFueTEgfCAwNy0wNS0yMDIz IHwgICAxNTAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAKKyBjb21wYW55MSB8IDA3LTA2 LTIwMjMgfCAgICA5MCB8ICAgICAgICAgIDkwIHwgICAgICAgIDEyMCB8IDA3LTA3LTIwMjMKKyBj b21wYW55MSB8IDA3LTA3LTIwMjMgfCAgIDExMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8 IAorIGNvbXBhbnkxIHwgMDctMDgtMjAyMyB8ICAgMTMwIHwgICAgICAgICAgICAgfCAgICAgICAg ICAgIHwgCisgY29tcGFueTEgfCAwNy0wOS0yMDIzIHwgICAxMjAgfCAgICAgICAgICAgICB8ICAg ICAgICAgICAgfCAKKyBjb21wYW55MSB8IDA3LTEwLTIwMjMgfCAgIDEzMCB8ICAgICAgICAgICAg IHwgICAgICAgICAgICB8IAorIGNvbXBhbnkyIHwgMDctMDEtMjAyMyB8ICAgIDUwIHwgICAgICAg ICAgNTAgfCAgICAgICAxNDAwIHwgMDctMDItMjAyMworIGNvbXBhbnkyIHwgMDctMDItMjAyMyB8 ICAyMDAwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgCisgY29tcGFueTIgfCAwNy0wMy0y MDIzIHwgIDE1MDAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAKKyBjb21wYW55MiB8IDA3 LTA0LTIwMjMgfCAgMTQwMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8IAorIGNvbXBhbnky IHwgMDctMDUtMjAyMyB8ICAxNTAwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgCisgY29t cGFueTIgfCAwNy0wNi0yMDIzIHwgICAgNjAgfCAgICAgICAgICA2MCB8ICAgICAgIDEyMDAgfCAw Ny0wNy0yMDIzCisgY29tcGFueTIgfCAwNy0wNy0yMDIzIHwgIDExMDAgfCAgICAgICAgICAgICB8 ICAgICAgICAgICAgfCAKKyBjb21wYW55MiB8IDA3LTA4LTIwMjMgfCAgMTMwMCB8ICAgICAgICAg ICAgIHwgICAgICAgICAgICB8IAorIGNvbXBhbnkyIHwgMDctMDktMjAyMyB8ICAxMjAwIHwgICAg ICAgICAgICAgfCAgICAgICAgICAgIHwgCisgY29tcGFueTIgfCAwNy0xMC0yMDIzIHwgIDEzMDAg fCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAKKygyMCByb3dzKQorCistLSB0aGUgZmlyc3Qg cm93IHN0YXJ0IHdpdGggbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDEwMAorU0VMRUNUIGNvbXBhbnks IHRkYXRlLCBwcmljZSwgZmlyc3RfdmFsdWUocHJpY2UpIE9WRVIgdywgbGFzdF92YWx1ZShwcmlj ZSkgT1ZFUiB3CisgRlJPTSBzdG9jaworIFdJTkRPVyB3IEFTICgKKyBQQVJUSVRJT04gQlkgY29t cGFueQorIFJPV1MgQkVUV0VFTiBDVVJSRU5UIFJPVyBBTkQgVU5CT1VOREVEIEZPTExPV0lORwor IElOSVRJQUwKKyBQQVRURVJOIChMT1dQUklDRSBVUCsgRE9XTispCisgREVGSU5FCisgIExPV1BS SUNFIEFTIHByaWNlIDw9IDEwMCwKKyAgVVAgQVMgcHJpY2UgPiBQUkVWKHByaWNlKSwKKyAgRE9X TiBBUyBwcmljZSA8IFBSRVYocHJpY2UpCispOworIGNvbXBhbnkgIHwgICB0ZGF0ZSAgICB8IHBy aWNlIHwgZmlyc3RfdmFsdWUgfCBsYXN0X3ZhbHVlIAorLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQorIGNvbXBhbnkxIHwgMDctMDEtMjAy MyB8ICAgMTAwIHwgICAgICAgICAxMDAgfCAgICAgICAgMTQwCisgY29tcGFueTEgfCAwNy0wMi0y MDIzIHwgICAyMDAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAKKyBjb21wYW55MSB8IDA3LTAz LTIwMjMgfCAgIDE1MCB8ICAgICAgICAgICAgIHwgICAgICAgICAgIAorIGNvbXBhbnkxIHwgMDct MDQtMjAyMyB8ICAgMTQwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgCisgY29tcGFueTEgfCAw Ny0wNS0yMDIzIHwgICAxNTAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAKKyBjb21wYW55MSB8 IDA3LTA2LTIwMjMgfCAgICA5MCB8ICAgICAgICAgIDkwIHwgICAgICAgIDEyMAorIGNvbXBhbnkx IHwgMDctMDctMjAyMyB8ICAgMTEwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgCisgY29tcGFu eTEgfCAwNy0wOC0yMDIzIHwgICAxMzAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAKKyBjb21w YW55MSB8IDA3LTA5LTIwMjMgfCAgIDEyMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgIAorIGNv bXBhbnkxIHwgMDctMTAtMjAyMyB8ICAgMTMwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgCisg Y29tcGFueTIgfCAwNy0wMS0yMDIzIHwgICAgNTAgfCAgICAgICAgICA1MCB8ICAgICAgIDE0MDAK KyBjb21wYW55MiB8IDA3LTAyLTIwMjMgfCAgMjAwMCB8ICAgICAgICAgICAgIHwgICAgICAgICAg IAorIGNvbXBhbnkyIHwgMDctMDMtMjAyMyB8ICAxNTAwIHwgICAgICAgICAgICAgfCAgICAgICAg ICAgCisgY29tcGFueTIgfCAwNy0wNC0yMDIzIHwgIDE0MDAgfCAgICAgICAgICAgICB8ICAgICAg ICAgICAKKyBjb21wYW55MiB8IDA3LTA1LTIwMjMgfCAgMTUwMCB8ICAgICAgICAgICAgIHwgICAg ICAgICAgIAorIGNvbXBhbnkyIHwgMDctMDYtMjAyMyB8ICAgIDYwIHwgICAgICAgICAgNjAgfCAg ICAgICAxMjAwCisgY29tcGFueTIgfCAwNy0wNy0yMDIzIHwgIDExMDAgfCAgICAgICAgICAgICB8 ICAgICAgICAgICAKKyBjb21wYW55MiB8IDA3LTA4LTIwMjMgfCAgMTMwMCB8ICAgICAgICAgICAg IHwgICAgICAgICAgIAorIGNvbXBhbnkyIHwgMDctMDktMjAyMyB8ICAxMjAwIHwgICAgICAgICAg ICAgfCAgICAgICAgICAgCisgY29tcGFueTIgfCAwNy0xMC0yMDIzIHwgIDEzMDAgfCAgICAgICAg ICAgICB8ICAgICAgICAgICAKKygyMCByb3dzKQorCistLSBzZWNvbmQgcm93IHJhaXNlcyAxMjAl CitTRUxFQ1QgY29tcGFueSwgdGRhdGUsIHByaWNlLCBmaXJzdF92YWx1ZShwcmljZSkgT1ZFUiB3 LCBsYXN0X3ZhbHVlKHByaWNlKSBPVkVSIHcKKyBGUk9NIHN0b2NrCisgV0lORE9XIHcgQVMgKAor IFBBUlRJVElPTiBCWSBjb21wYW55CisgUk9XUyBCRVRXRUVOIENVUlJFTlQgUk9XIEFORCBVTkJP VU5ERUQgRk9MTE9XSU5HCisgSU5JVElBTAorIFBBVFRFUk4gKExPV1BSSUNFIFVQKyBET1dOKykK KyBERUZJTkUKKyAgTE9XUFJJQ0UgQVMgcHJpY2UgPD0gMTAwLAorICBVUCBBUyBwcmljZSA+IFBS RVYocHJpY2UpICogMS4yLAorICBET1dOIEFTIHByaWNlIDwgUFJFVihwcmljZSkKKyk7CisgY29t cGFueSAgfCAgIHRkYXRlICAgIHwgcHJpY2UgfCBmaXJzdF92YWx1ZSB8IGxhc3RfdmFsdWUgCist LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t CisgY29tcGFueTEgfCAwNy0wMS0yMDIzIHwgICAxMDAgfCAgICAgICAgIDEwMCB8ICAgICAgICAx NDAKKyBjb21wYW55MSB8IDA3LTAyLTIwMjMgfCAgIDIwMCB8ICAgICAgICAgICAgIHwgICAgICAg ICAgIAorIGNvbXBhbnkxIHwgMDctMDMtMjAyMyB8ICAgMTUwIHwgICAgICAgICAgICAgfCAgICAg ICAgICAgCisgY29tcGFueTEgfCAwNy0wNC0yMDIzIHwgICAxNDAgfCAgICAgICAgICAgICB8ICAg ICAgICAgICAKKyBjb21wYW55MSB8IDA3LTA1LTIwMjMgfCAgIDE1MCB8ICAgICAgICAgICAgIHwg ICAgICAgICAgIAorIGNvbXBhbnkxIHwgMDctMDYtMjAyMyB8ICAgIDkwIHwgICAgICAgICAgICAg fCAgICAgICAgICAgCisgY29tcGFueTEgfCAwNy0wNy0yMDIzIHwgICAxMTAgfCAgICAgICAgICAg ICB8ICAgICAgICAgICAKKyBjb21wYW55MSB8IDA3LTA4LTIwMjMgfCAgIDEzMCB8ICAgICAgICAg ICAgIHwgICAgICAgICAgIAorIGNvbXBhbnkxIHwgMDctMDktMjAyMyB8ICAgMTIwIHwgICAgICAg ICAgICAgfCAgICAgICAgICAgCisgY29tcGFueTEgfCAwNy0xMC0yMDIzIHwgICAxMzAgfCAgICAg ICAgICAgICB8ICAgICAgICAgICAKKyBjb21wYW55MiB8IDA3LTAxLTIwMjMgfCAgICA1MCB8ICAg ICAgICAgIDUwIHwgICAgICAgMTQwMAorIGNvbXBhbnkyIHwgMDctMDItMjAyMyB8ICAyMDAwIHwg ICAgICAgICAgICAgfCAgICAgICAgICAgCisgY29tcGFueTIgfCAwNy0wMy0yMDIzIHwgIDE1MDAg fCAgICAgICAgICAgICB8ICAgICAgICAgICAKKyBjb21wYW55MiB8IDA3LTA0LTIwMjMgfCAgMTQw MCB8ICAgICAgICAgICAgIHwgICAgICAgICAgIAorIGNvbXBhbnkyIHwgMDctMDUtMjAyMyB8ICAx NTAwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgCisgY29tcGFueTIgfCAwNy0wNi0yMDIzIHwg ICAgNjAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAKKyBjb21wYW55MiB8IDA3LTA3LTIwMjMg fCAgMTEwMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgIAorIGNvbXBhbnkyIHwgMDctMDgtMjAy MyB8ICAxMzAwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgCisgY29tcGFueTIgfCAwNy0wOS0y MDIzIHwgIDEyMDAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAKKyBjb21wYW55MiB8IDA3LTEw LTIwMjMgfCAgMTMwMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgIAorKDIwIHJvd3MpCisKKy0t IHVzaW5nIE5FWFQKK1NFTEVDVCBjb21wYW55LCB0ZGF0ZSwgcHJpY2UsIGZpcnN0X3ZhbHVlKHBy aWNlKSBPVkVSIHcsIGxhc3RfdmFsdWUocHJpY2UpIE9WRVIgdworIEZST00gc3RvY2sKKyBXSU5E T1cgdyBBUyAoCisgUEFSVElUSU9OIEJZIGNvbXBhbnkKKyBST1dTIEJFVFdFRU4gQ1VSUkVOVCBS T1cgQU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcKKyBJTklUSUFMCisgUEFUVEVSTiAoU1RBUlQgVVBE T1dOKQorIERFRklORQorICBTVEFSVCBBUyBUUlVFLAorICBVUERPV04gQVMgcHJpY2UgPiBQUkVW KHByaWNlKSBBTkQgcHJpY2UgPiBORVhUKHByaWNlKQorKTsKKyBjb21wYW55ICB8ICAgdGRhdGUg ICAgfCBwcmljZSB8IGZpcnN0X3ZhbHVlIHwgbGFzdF92YWx1ZSAKKy0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0KKyBjb21wYW55MSB8IDA3 LTAxLTIwMjMgfCAgIDEwMCB8ICAgICAgICAgMTAwIHwgICAgICAgIDIwMAorIGNvbXBhbnkxIHwg MDctMDItMjAyMyB8ICAgMjAwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgCisgY29tcGFueTEg fCAwNy0wMy0yMDIzIHwgICAxNTAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAKKyBjb21wYW55 MSB8IDA3LTA0LTIwMjMgfCAgIDE0MCB8ICAgICAgICAgMTQwIHwgICAgICAgIDE1MAorIGNvbXBh bnkxIHwgMDctMDUtMjAyMyB8ICAgMTUwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgCisgY29t cGFueTEgfCAwNy0wNi0yMDIzIHwgICAgOTAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAKKyBj b21wYW55MSB8IDA3LTA3LTIwMjMgfCAgIDExMCB8ICAgICAgICAgMTEwIHwgICAgICAgIDEzMAor IGNvbXBhbnkxIHwgMDctMDgtMjAyMyB8ICAgMTMwIHwgICAgICAgICAgICAgfCAgICAgICAgICAg CisgY29tcGFueTEgfCAwNy0wOS0yMDIzIHwgICAxMjAgfCAgICAgICAgICAgICB8ICAgICAgICAg ICAKKyBjb21wYW55MSB8IDA3LTEwLTIwMjMgfCAgIDEzMCB8ICAgICAgICAgICAgIHwgICAgICAg ICAgIAorIGNvbXBhbnkyIHwgMDctMDEtMjAyMyB8ICAgIDUwIHwgICAgICAgICAgNTAgfCAgICAg ICAyMDAwCisgY29tcGFueTIgfCAwNy0wMi0yMDIzIHwgIDIwMDAgfCAgICAgICAgICAgICB8ICAg ICAgICAgICAKKyBjb21wYW55MiB8IDA3LTAzLTIwMjMgfCAgMTUwMCB8ICAgICAgICAgICAgIHwg ICAgICAgICAgIAorIGNvbXBhbnkyIHwgMDctMDQtMjAyMyB8ICAxNDAwIHwgICAgICAgIDE0MDAg fCAgICAgICAxNTAwCisgY29tcGFueTIgfCAwNy0wNS0yMDIzIHwgIDE1MDAgfCAgICAgICAgICAg ICB8ICAgICAgICAgICAKKyBjb21wYW55MiB8IDA3LTA2LTIwMjMgfCAgICA2MCB8ICAgICAgICAg ICAgIHwgICAgICAgICAgIAorIGNvbXBhbnkyIHwgMDctMDctMjAyMyB8ICAxMTAwIHwgICAgICAg IDExMDAgfCAgICAgICAxMzAwCisgY29tcGFueTIgfCAwNy0wOC0yMDIzIHwgIDEzMDAgfCAgICAg ICAgICAgICB8ICAgICAgICAgICAKKyBjb21wYW55MiB8IDA3LTA5LTIwMjMgfCAgMTIwMCB8ICAg ICAgICAgICAgIHwgICAgICAgICAgIAorIGNvbXBhbnkyIHwgMDctMTAtMjAyMyB8ICAxMzAwIHwg ICAgICAgICAgICAgfCAgICAgICAgICAgCisoMjAgcm93cykKKworLS0gdXNpbmcgQUZURVIgTUFU Q0ggU0tJUCBUTyBORVhUIFJPVworU0VMRUNUIGNvbXBhbnksIHRkYXRlLCBwcmljZSwgZmlyc3Rf dmFsdWUocHJpY2UpIE9WRVIgdywgbGFzdF92YWx1ZShwcmljZSkgT1ZFUiB3CisgRlJPTSBzdG9j aworIFdJTkRPVyB3IEFTICgKKyBQQVJUSVRJT04gQlkgY29tcGFueQorIFJPV1MgQkVUV0VFTiBD VVJSRU5UIFJPVyBBTkQgVU5CT1VOREVEIEZPTExPV0lORworIEFGVEVSIE1BVENIIFNLSVAgVE8g TkVYVCBST1cKKyBJTklUSUFMCisgUEFUVEVSTiAoU1RBUlQgVVBET1dOKQorIERFRklORQorICBT VEFSVCBBUyBUUlVFLAorICBVUERPV04gQVMgcHJpY2UgPiBQUkVWKHByaWNlKSBBTkQgcHJpY2Ug PiBORVhUKHByaWNlKQorKTsKKyBjb21wYW55ICB8ICAgdGRhdGUgICAgfCBwcmljZSB8IGZpcnN0 X3ZhbHVlIHwgbGFzdF92YWx1ZSAKKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0KKyBjb21wYW55MSB8IDA3LTAxLTIwMjMgfCAgIDEwMCB8 ICAgICAgICAgMTAwIHwgICAgICAgIDIwMAorIGNvbXBhbnkxIHwgMDctMDItMjAyMyB8ICAgMjAw IHwgICAgICAgICAgICAgfCAgICAgICAgICAgCisgY29tcGFueTEgfCAwNy0wMy0yMDIzIHwgICAx NTAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAKKyBjb21wYW55MSB8IDA3LTA0LTIwMjMgfCAg IDE0MCB8ICAgICAgICAgMTQwIHwgICAgICAgIDE1MAorIGNvbXBhbnkxIHwgMDctMDUtMjAyMyB8 ICAgMTUwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgCisgY29tcGFueTEgfCAwNy0wNi0yMDIz IHwgICAgOTAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAKKyBjb21wYW55MSB8IDA3LTA3LTIw MjMgfCAgIDExMCB8ICAgICAgICAgMTEwIHwgICAgICAgIDEzMAorIGNvbXBhbnkxIHwgMDctMDgt MjAyMyB8ICAgMTMwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgCisgY29tcGFueTEgfCAwNy0w OS0yMDIzIHwgICAxMjAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAKKyBjb21wYW55MSB8IDA3 LTEwLTIwMjMgfCAgIDEzMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgIAorIGNvbXBhbnkyIHwg MDctMDEtMjAyMyB8ICAgIDUwIHwgICAgICAgICAgNTAgfCAgICAgICAyMDAwCisgY29tcGFueTIg fCAwNy0wMi0yMDIzIHwgIDIwMDAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAKKyBjb21wYW55 MiB8IDA3LTAzLTIwMjMgfCAgMTUwMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgIAorIGNvbXBh bnkyIHwgMDctMDQtMjAyMyB8ICAxNDAwIHwgICAgICAgIDE0MDAgfCAgICAgICAxNTAwCisgY29t cGFueTIgfCAwNy0wNS0yMDIzIHwgIDE1MDAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAKKyBj b21wYW55MiB8IDA3LTA2LTIwMjMgfCAgICA2MCB8ICAgICAgICAgICAgIHwgICAgICAgICAgIAor IGNvbXBhbnkyIHwgMDctMDctMjAyMyB8ICAxMTAwIHwgICAgICAgIDExMDAgfCAgICAgICAxMzAw CisgY29tcGFueTIgfCAwNy0wOC0yMDIzIHwgIDEzMDAgfCAgICAgICAgICAgICB8ICAgICAgICAg ICAKKyBjb21wYW55MiB8IDA3LTA5LTIwMjMgfCAgMTIwMCB8ICAgICAgICAgICAgIHwgICAgICAg ICAgIAorIGNvbXBhbnkyIHwgMDctMTAtMjAyMyB8ICAxMzAwIHwgICAgICAgICAgICAgfCAgICAg ICAgICAgCisoMjAgcm93cykKKworLS0gbWF0Y2ggZXZlcnl0aGluZworU0VMRUNUIGNvbXBhbnks IHRkYXRlLCBwcmljZSwgZmlyc3RfdmFsdWUocHJpY2UpIE9WRVIgdywgbGFzdF92YWx1ZShwcmlj ZSkgT1ZFUiB3CisgRlJPTSBzdG9jaworIFdJTkRPVyB3IEFTICgKKyBQQVJUSVRJT04gQlkgY29t cGFueQorIE9SREVSIEJZIHRkYXRlCisgUk9XUyBCRVRXRUVOIENVUlJFTlQgUk9XIEFORCBVTkJP VU5ERUQgRk9MTE9XSU5HCisgQUZURVIgTUFUQ0ggU0tJUCBQQVNUIExBU1QgUk9XCisgSU5JVElB TAorIFBBVFRFUk4gKEErKQorIERFRklORQorICBBIEFTIFRSVUUKKyk7CisgY29tcGFueSAgfCAg IHRkYXRlICAgIHwgcHJpY2UgfCBmaXJzdF92YWx1ZSB8IGxhc3RfdmFsdWUgCistLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tCisgY29tcGFu eTEgfCAwNy0wMS0yMDIzIHwgICAxMDAgfCAgICAgICAgIDEwMCB8ICAgICAgICAxMzAKKyBjb21w YW55MSB8IDA3LTAyLTIwMjMgfCAgIDIwMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgIAorIGNv bXBhbnkxIHwgMDctMDMtMjAyMyB8ICAgMTUwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgCisg Y29tcGFueTEgfCAwNy0wNC0yMDIzIHwgICAxNDAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAK KyBjb21wYW55MSB8IDA3LTA1LTIwMjMgfCAgIDE1MCB8ICAgICAgICAgICAgIHwgICAgICAgICAg IAorIGNvbXBhbnkxIHwgMDctMDYtMjAyMyB8ICAgIDkwIHwgICAgICAgICAgICAgfCAgICAgICAg ICAgCisgY29tcGFueTEgfCAwNy0wNy0yMDIzIHwgICAxMTAgfCAgICAgICAgICAgICB8ICAgICAg ICAgICAKKyBjb21wYW55MSB8IDA3LTA4LTIwMjMgfCAgIDEzMCB8ICAgICAgICAgICAgIHwgICAg ICAgICAgIAorIGNvbXBhbnkxIHwgMDctMDktMjAyMyB8ICAgMTIwIHwgICAgICAgICAgICAgfCAg ICAgICAgICAgCisgY29tcGFueTEgfCAwNy0xMC0yMDIzIHwgICAxMzAgfCAgICAgICAgICAgICB8 ICAgICAgICAgICAKKyBjb21wYW55MiB8IDA3LTAxLTIwMjMgfCAgICA1MCB8ICAgICAgICAgIDUw IHwgICAgICAgMTMwMAorIGNvbXBhbnkyIHwgMDctMDItMjAyMyB8ICAyMDAwIHwgICAgICAgICAg ICAgfCAgICAgICAgICAgCisgY29tcGFueTIgfCAwNy0wMy0yMDIzIHwgIDE1MDAgfCAgICAgICAg ICAgICB8ICAgICAgICAgICAKKyBjb21wYW55MiB8IDA3LTA0LTIwMjMgfCAgMTQwMCB8ICAgICAg ICAgICAgIHwgICAgICAgICAgIAorIGNvbXBhbnkyIHwgMDctMDUtMjAyMyB8ICAxNTAwIHwgICAg ICAgICAgICAgfCAgICAgICAgICAgCisgY29tcGFueTIgfCAwNy0wNi0yMDIzIHwgICAgNjAgfCAg ICAgICAgICAgICB8ICAgICAgICAgICAKKyBjb21wYW55MiB8IDA3LTA3LTIwMjMgfCAgMTEwMCB8 ICAgICAgICAgICAgIHwgICAgICAgICAgIAorIGNvbXBhbnkyIHwgMDctMDgtMjAyMyB8ICAxMzAw IHwgICAgICAgICAgICAgfCAgICAgICAgICAgCisgY29tcGFueTIgfCAwNy0wOS0yMDIzIHwgIDEy MDAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAKKyBjb21wYW55MiB8IDA3LTEwLTIwMjMgfCAg MTMwMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgIAorKDIwIHJvd3MpCisKKy0tIGJhY2t0cmFj a2luZyB3aXRoIHJlY2xhc3NpZmljYXRpb24gb2Ygcm93cworLS0gdXNpbmcgQUZURVIgTUFUQ0gg U0tJUCBQQVNUIExBU1QgUk9XCitTRUxFQ1QgY29tcGFueSwgdGRhdGUsIHByaWNlLCBmaXJzdF92 YWx1ZSh0ZGF0ZSkgT1ZFUiB3LCBsYXN0X3ZhbHVlKHRkYXRlKSBPVkVSIHcKKyBGUk9NIHN0b2Nr CisgV0lORE9XIHcgQVMgKAorIFBBUlRJVElPTiBCWSBjb21wYW55CisgT1JERVIgQlkgdGRhdGUK KyBST1dTIEJFVFdFRU4gQ1VSUkVOVCBST1cgQU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcKKyBBRlRF UiBNQVRDSCBTS0lQIFBBU1QgTEFTVCBST1cKKyBJTklUSUFMCisgUEFUVEVSTiAoQSsgQispCisg REVGSU5FCisgIEEgQVMgcHJpY2UgPiAxMDAsCisgIEIgQVMgcHJpY2UgPiAxMDAKKyk7CisgY29t cGFueSAgfCAgIHRkYXRlICAgIHwgcHJpY2UgfCBmaXJzdF92YWx1ZSB8IGxhc3RfdmFsdWUgCist LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t CisgY29tcGFueTEgfCAwNy0wMS0yMDIzIHwgICAxMDAgfCAgICAgICAgICAgICB8IAorIGNvbXBh bnkxIHwgMDctMDItMjAyMyB8ICAgMjAwIHwgMDctMDItMjAyMyAgfCAwNy0wNS0yMDIzCisgY29t cGFueTEgfCAwNy0wMy0yMDIzIHwgICAxNTAgfCAgICAgICAgICAgICB8IAorIGNvbXBhbnkxIHwg MDctMDQtMjAyMyB8ICAgMTQwIHwgICAgICAgICAgICAgfCAKKyBjb21wYW55MSB8IDA3LTA1LTIw MjMgfCAgIDE1MCB8ICAgICAgICAgICAgIHwgCisgY29tcGFueTEgfCAwNy0wNi0yMDIzIHwgICAg OTAgfCAgICAgICAgICAgICB8IAorIGNvbXBhbnkxIHwgMDctMDctMjAyMyB8ICAgMTEwIHwgMDct MDctMjAyMyAgfCAwNy0xMC0yMDIzCisgY29tcGFueTEgfCAwNy0wOC0yMDIzIHwgICAxMzAgfCAg ICAgICAgICAgICB8IAorIGNvbXBhbnkxIHwgMDctMDktMjAyMyB8ICAgMTIwIHwgICAgICAgICAg ICAgfCAKKyBjb21wYW55MSB8IDA3LTEwLTIwMjMgfCAgIDEzMCB8ICAgICAgICAgICAgIHwgCisg Y29tcGFueTIgfCAwNy0wMS0yMDIzIHwgICAgNTAgfCAgICAgICAgICAgICB8IAorIGNvbXBhbnky IHwgMDctMDItMjAyMyB8ICAyMDAwIHwgMDctMDItMjAyMyAgfCAwNy0wNS0yMDIzCisgY29tcGFu eTIgfCAwNy0wMy0yMDIzIHwgIDE1MDAgfCAgICAgICAgICAgICB8IAorIGNvbXBhbnkyIHwgMDct MDQtMjAyMyB8ICAxNDAwIHwgICAgICAgICAgICAgfCAKKyBjb21wYW55MiB8IDA3LTA1LTIwMjMg fCAgMTUwMCB8ICAgICAgICAgICAgIHwgCisgY29tcGFueTIgfCAwNy0wNi0yMDIzIHwgICAgNjAg fCAgICAgICAgICAgICB8IAorIGNvbXBhbnkyIHwgMDctMDctMjAyMyB8ICAxMTAwIHwgMDctMDct MjAyMyAgfCAwNy0xMC0yMDIzCisgY29tcGFueTIgfCAwNy0wOC0yMDIzIHwgIDEzMDAgfCAgICAg ICAgICAgICB8IAorIGNvbXBhbnkyIHwgMDctMDktMjAyMyB8ICAxMjAwIHwgICAgICAgICAgICAg fCAKKyBjb21wYW55MiB8IDA3LTEwLTIwMjMgfCAgMTMwMCB8ICAgICAgICAgICAgIHwgCisoMjAg cm93cykKKworLS0gYmFja3RyYWNraW5nIHdpdGggcmVjbGFzc2lmaWNhdGlvbiBvZiByb3dzCist LSB1c2luZyBBRlRFUiBNQVRDSCBTS0lQIFRPIE5FWFQgUk9XCitTRUxFQ1QgY29tcGFueSwgdGRh dGUsIHByaWNlLCBmaXJzdF92YWx1ZSh0ZGF0ZSkgT1ZFUiB3LCBsYXN0X3ZhbHVlKHRkYXRlKSBP VkVSIHcKKyBGUk9NIHN0b2NrCisgV0lORE9XIHcgQVMgKAorIFBBUlRJVElPTiBCWSBjb21wYW55 CisgT1JERVIgQlkgdGRhdGUKKyBST1dTIEJFVFdFRU4gQ1VSUkVOVCBST1cgQU5EIFVOQk9VTkRF RCBGT0xMT1dJTkcKKyBBRlRFUiBNQVRDSCBTS0lQIFRPIE5FWFQgUk9XCisgSU5JVElBTAorIFBB VFRFUk4gKEErIEIrKQorIERFRklORQorICBBIEFTIHByaWNlID4gMTAwLAorICBCIEFTIHByaWNl ID4gMTAwCispOworIGNvbXBhbnkgIHwgICB0ZGF0ZSAgICB8IHByaWNlIHwgZmlyc3RfdmFsdWUg fCBsYXN0X3ZhbHVlIAorLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLQorIGNvbXBhbnkxIHwgMDctMDEtMjAyMyB8ICAgMTAwIHwgICAgICAg ICAgICAgfCAKKyBjb21wYW55MSB8IDA3LTAyLTIwMjMgfCAgIDIwMCB8IDA3LTAyLTIwMjMgIHwg MDctMDUtMjAyMworIGNvbXBhbnkxIHwgMDctMDMtMjAyMyB8ICAgMTUwIHwgMDctMDMtMjAyMyAg fCAwNy0wNS0yMDIzCisgY29tcGFueTEgfCAwNy0wNC0yMDIzIHwgICAxNDAgfCAwNy0wNC0yMDIz ICB8IDA3LTA1LTIwMjMKKyBjb21wYW55MSB8IDA3LTA1LTIwMjMgfCAgIDE1MCB8ICAgICAgICAg ICAgIHwgCisgY29tcGFueTEgfCAwNy0wNi0yMDIzIHwgICAgOTAgfCAgICAgICAgICAgICB8IAor IGNvbXBhbnkxIHwgMDctMDctMjAyMyB8ICAgMTEwIHwgMDctMDctMjAyMyAgfCAwNy0xMC0yMDIz CisgY29tcGFueTEgfCAwNy0wOC0yMDIzIHwgICAxMzAgfCAwNy0wOC0yMDIzICB8IDA3LTEwLTIw MjMKKyBjb21wYW55MSB8IDA3LTA5LTIwMjMgfCAgIDEyMCB8IDA3LTA5LTIwMjMgIHwgMDctMTAt MjAyMworIGNvbXBhbnkxIHwgMDctMTAtMjAyMyB8ICAgMTMwIHwgICAgICAgICAgICAgfCAKKyBj b21wYW55MiB8IDA3LTAxLTIwMjMgfCAgICA1MCB8ICAgICAgICAgICAgIHwgCisgY29tcGFueTIg fCAwNy0wMi0yMDIzIHwgIDIwMDAgfCAwNy0wMi0yMDIzICB8IDA3LTA1LTIwMjMKKyBjb21wYW55 MiB8IDA3LTAzLTIwMjMgfCAgMTUwMCB8IDA3LTAzLTIwMjMgIHwgMDctMDUtMjAyMworIGNvbXBh bnkyIHwgMDctMDQtMjAyMyB8ICAxNDAwIHwgMDctMDQtMjAyMyAgfCAwNy0wNS0yMDIzCisgY29t cGFueTIgfCAwNy0wNS0yMDIzIHwgIDE1MDAgfCAgICAgICAgICAgICB8IAorIGNvbXBhbnkyIHwg MDctMDYtMjAyMyB8ICAgIDYwIHwgICAgICAgICAgICAgfCAKKyBjb21wYW55MiB8IDA3LTA3LTIw MjMgfCAgMTEwMCB8IDA3LTA3LTIwMjMgIHwgMDctMTAtMjAyMworIGNvbXBhbnkyIHwgMDctMDgt MjAyMyB8ICAxMzAwIHwgMDctMDgtMjAyMyAgfCAwNy0xMC0yMDIzCisgY29tcGFueTIgfCAwNy0w OS0yMDIzIHwgIDEyMDAgfCAwNy0wOS0yMDIzICB8IDA3LTEwLTIwMjMKKyBjb21wYW55MiB8IDA3 LTEwLTIwMjMgfCAgMTMwMCB8ICAgICAgICAgICAgIHwgCisoMjAgcm93cykKKworLS0gUk9XUyBC RVRXRUVOIENVUlJFTlQgUk9XIEFORCBvZmZzZXQgRk9MTE9XSU5HCitTRUxFQ1QgY29tcGFueSwg dGRhdGUsIHByaWNlLCBmaXJzdF92YWx1ZSh0ZGF0ZSkgT1ZFUiB3LCBsYXN0X3ZhbHVlKHRkYXRl KSBPVkVSIHcsCisgY291bnQoKikgT1ZFUiB3CisgRlJPTSBzdG9jaworIFdJTkRPVyB3IEFTICgK KyBQQVJUSVRJT04gQlkgY29tcGFueQorIE9SREVSIEJZIHRkYXRlCisgUk9XUyBCRVRXRUVOIENV UlJFTlQgUk9XIEFORCAyIEZPTExPV0lORworIEFGVEVSIE1BVENIIFNLSVAgUEFTVCBMQVNUIFJP VworIFBBVFRFUk4gKFNUQVJUIFVQKyBET1dOKykKKyBERUZJTkUKKyAgU1RBUlQgQVMgVFJVRSwK KyAgVVAgQVMgcHJpY2UgPiBQUkVWKHByaWNlKSwKKyAgRE9XTiBBUyBwcmljZSA8IFBSRVYocHJp Y2UpCispOworIGNvbXBhbnkgIHwgICB0ZGF0ZSAgICB8IHByaWNlIHwgZmlyc3RfdmFsdWUgfCBs YXN0X3ZhbHVlIHwgY291bnQgCistLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0KKyBjb21wYW55MSB8IDA3LTAxLTIwMjMgfCAg IDEwMCB8IDA3LTAxLTIwMjMgIHwgMDctMDMtMjAyMyB8ICAgICAzCisgY29tcGFueTEgfCAwNy0w Mi0yMDIzIHwgICAyMDAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgMAorIGNvbXBh bnkxIHwgMDctMDMtMjAyMyB8ICAgMTUwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAg IDAKKyBjb21wYW55MSB8IDA3LTA0LTIwMjMgfCAgIDE0MCB8IDA3LTA0LTIwMjMgIHwgMDctMDYt MjAyMyB8ICAgICAzCisgY29tcGFueTEgfCAwNy0wNS0yMDIzIHwgICAxNTAgfCAgICAgICAgICAg ICB8ICAgICAgICAgICAgfCAgICAgMAorIGNvbXBhbnkxIHwgMDctMDYtMjAyMyB8ICAgIDkwIHwg ICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgIDAKKyBjb21wYW55MSB8IDA3LTA3LTIwMjMg fCAgIDExMCB8IDA3LTA3LTIwMjMgIHwgMDctMDktMjAyMyB8ICAgICAzCisgY29tcGFueTEgfCAw Ny0wOC0yMDIzIHwgICAxMzAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgMAorIGNv bXBhbnkxIHwgMDctMDktMjAyMyB8ICAgMTIwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwg ICAgIDAKKyBjb21wYW55MSB8IDA3LTEwLTIwMjMgfCAgIDEzMCB8ICAgICAgICAgICAgIHwgICAg ICAgICAgICB8ICAgICAwCisgY29tcGFueTIgfCAwNy0wMS0yMDIzIHwgICAgNTAgfCAwNy0wMS0y MDIzICB8IDA3LTAzLTIwMjMgfCAgICAgMworIGNvbXBhbnkyIHwgMDctMDItMjAyMyB8ICAyMDAw IHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgIDAKKyBjb21wYW55MiB8IDA3LTAzLTIw MjMgfCAgMTUwMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAwCisgY29tcGFueTIg fCAwNy0wNC0yMDIzIHwgIDE0MDAgfCAwNy0wNC0yMDIzICB8IDA3LTA2LTIwMjMgfCAgICAgMwor IGNvbXBhbnkyIHwgMDctMDUtMjAyMyB8ICAxNTAwIHwgICAgICAgICAgICAgfCAgICAgICAgICAg IHwgICAgIDAKKyBjb21wYW55MiB8IDA3LTA2LTIwMjMgfCAgICA2MCB8ICAgICAgICAgICAgIHwg ICAgICAgICAgICB8ICAgICAwCisgY29tcGFueTIgfCAwNy0wNy0yMDIzIHwgIDExMDAgfCAwNy0w Ny0yMDIzICB8IDA3LTA5LTIwMjMgfCAgICAgMworIGNvbXBhbnkyIHwgMDctMDgtMjAyMyB8ICAx MzAwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgIDAKKyBjb21wYW55MiB8IDA3LTA5 LTIwMjMgfCAgMTIwMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAwCisgY29tcGFu eTIgfCAwNy0xMC0yMDIzIHwgIDEzMDAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAg MAorKDIwIHJvd3MpCisKKy0tCistLSBBZ2dyZWdhdGVzCistLQorLS0gdXNpbmcgQUZURVIgTUFU Q0ggU0tJUCBQQVNUIExBU1QgUk9XCitTRUxFQ1QgY29tcGFueSwgdGRhdGUsIHByaWNlLAorIGZp cnN0X3ZhbHVlKHByaWNlKSBPVkVSIHcsCisgbGFzdF92YWx1ZShwcmljZSkgT1ZFUiB3LAorIG1h eChwcmljZSkgT1ZFUiB3LAorIG1pbihwcmljZSkgT1ZFUiB3LAorIHN1bShwcmljZSkgT1ZFUiB3 LAorIGF2ZyhwcmljZSkgT1ZFUiB3LAorIGNvdW50KHByaWNlKSBPVkVSIHcKK0ZST00gc3RvY2sK K1dJTkRPVyB3IEFTICgKK1BBUlRJVElPTiBCWSBjb21wYW55CitST1dTIEJFVFdFRU4gQ1VSUkVO VCBST1cgQU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcKK0FGVEVSIE1BVENIIFNLSVAgUEFTVCBMQVNU IFJPVworSU5JVElBTAorUEFUVEVSTiAoU1RBUlQgVVArIERPV04rKQorREVGSU5FCitTVEFSVCBB UyBUUlVFLAorVVAgQVMgcHJpY2UgPiBQUkVWKHByaWNlKSwKK0RPV04gQVMgcHJpY2UgPCBQUkVW KHByaWNlKQorKTsKKyBjb21wYW55ICB8ICAgdGRhdGUgICAgfCBwcmljZSB8IGZpcnN0X3ZhbHVl IHwgbGFzdF92YWx1ZSB8IG1heCAgfCBtaW4gfCBzdW0gIHwgICAgICAgICAgYXZnICAgICAgICAg IHwgY291bnQgCistLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLQorIGNvbXBhbnkxIHwgMDctMDEtMjAyMyB8ICAgMTAwIHwgICAgICAgICAxMDAgfCAg ICAgICAgMTQwIHwgIDIwMCB8IDEwMCB8ICA1OTAgfCAgMTQ3LjUwMDAwMDAwMDAwMDAwMDAgfCAg ICAgNAorIGNvbXBhbnkxIHwgMDctMDItMjAyMyB8ICAgMjAwIHwgICAgICAgICAgICAgfCAgICAg ICAgICAgIHwgICAgICB8ICAgICB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAg MAorIGNvbXBhbnkxIHwgMDctMDMtMjAyMyB8ICAgMTUwIHwgICAgICAgICAgICAgfCAgICAgICAg ICAgIHwgICAgICB8ICAgICB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgMAor IGNvbXBhbnkxIHwgMDctMDQtMjAyMyB8ICAgMTQwIHwgICAgICAgICAgICAgfCAgICAgICAgICAg IHwgICAgICB8ICAgICB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgMAorIGNv bXBhbnkxIHwgMDctMDUtMjAyMyB8ICAgMTUwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwg ICAgICB8ICAgICB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgMAorIGNvbXBh bnkxIHwgMDctMDYtMjAyMyB8ICAgIDkwIHwgICAgICAgICAgOTAgfCAgICAgICAgMTIwIHwgIDEz MCB8ICA5MCB8ICA0NTAgfCAgMTEyLjUwMDAwMDAwMDAwMDAwMDAgfCAgICAgNAorIGNvbXBhbnkx IHwgMDctMDctMjAyMyB8ICAgMTEwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICB8 ICAgICB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgMAorIGNvbXBhbnkxIHwg MDctMDgtMjAyMyB8ICAgMTMwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICB8ICAg ICB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgMAorIGNvbXBhbnkxIHwgMDct MDktMjAyMyB8ICAgMTIwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICB8ICAgICB8 ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgMAorIGNvbXBhbnkxIHwgMDctMTAt MjAyMyB8ICAgMTMwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICB8ICAgICB8ICAg ICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgMAorIGNvbXBhbnkyIHwgMDctMDEtMjAy MyB8ICAgIDUwIHwgICAgICAgICAgNTAgfCAgICAgICAxNDAwIHwgMjAwMCB8ICA1MCB8IDQ5NTAg fCAxMjM3LjUwMDAwMDAwMDAwMDAwMDAgfCAgICAgNAorIGNvbXBhbnkyIHwgMDctMDItMjAyMyB8 ICAyMDAwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICB8ICAgICB8ICAgICAgfCAg ICAgICAgICAgICAgICAgICAgICAgfCAgICAgMAorIGNvbXBhbnkyIHwgMDctMDMtMjAyMyB8ICAx NTAwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICB8ICAgICB8ICAgICAgfCAgICAg ICAgICAgICAgICAgICAgICAgfCAgICAgMAorIGNvbXBhbnkyIHwgMDctMDQtMjAyMyB8ICAxNDAw IHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICB8ICAgICB8ICAgICAgfCAgICAgICAg ICAgICAgICAgICAgICAgfCAgICAgMAorIGNvbXBhbnkyIHwgMDctMDUtMjAyMyB8ICAxNTAwIHwg ICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICB8ICAgICB8ICAgICAgfCAgICAgICAgICAg ICAgICAgICAgICAgfCAgICAgMAorIGNvbXBhbnkyIHwgMDctMDYtMjAyMyB8ICAgIDYwIHwgICAg ICAgICAgNjAgfCAgICAgICAxMjAwIHwgMTMwMCB8ICA2MCB8IDM2NjAgfCAgOTE1LjAwMDAwMDAw MDAwMDAwMDAgfCAgICAgNAorIGNvbXBhbnkyIHwgMDctMDctMjAyMyB8ICAxMTAwIHwgICAgICAg ICAgICAgfCAgICAgICAgICAgIHwgICAgICB8ICAgICB8ICAgICAgfCAgICAgICAgICAgICAgICAg ICAgICAgfCAgICAgMAorIGNvbXBhbnkyIHwgMDctMDgtMjAyMyB8ICAxMzAwIHwgICAgICAgICAg ICAgfCAgICAgICAgICAgIHwgICAgICB8ICAgICB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAg ICAgfCAgICAgMAorIGNvbXBhbnkyIHwgMDctMDktMjAyMyB8ICAxMjAwIHwgICAgICAgICAgICAg fCAgICAgICAgICAgIHwgICAgICB8ICAgICB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAg fCAgICAgMAorIGNvbXBhbnkyIHwgMDctMTAtMjAyMyB8ICAxMzAwIHwgICAgICAgICAgICAgfCAg ICAgICAgICAgIHwgICAgICB8ICAgICB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAg ICAgMAorKDIwIHJvd3MpCisKKy0tIHVzaW5nIEFGVEVSIE1BVENIIFNLSVAgVE8gTkVYVCBST1cK K1NFTEVDVCBjb21wYW55LCB0ZGF0ZSwgcHJpY2UsCisgZmlyc3RfdmFsdWUocHJpY2UpIE9WRVIg dywKKyBsYXN0X3ZhbHVlKHByaWNlKSBPVkVSIHcsCisgbWF4KHByaWNlKSBPVkVSIHcsCisgbWlu KHByaWNlKSBPVkVSIHcsCisgc3VtKHByaWNlKSBPVkVSIHcsCisgYXZnKHByaWNlKSBPVkVSIHcs CisgY291bnQocHJpY2UpIE9WRVIgdworRlJPTSBzdG9jaworV0lORE9XIHcgQVMgKAorUEFSVElU SU9OIEJZIGNvbXBhbnkKK1JPV1MgQkVUV0VFTiBDVVJSRU5UIFJPVyBBTkQgVU5CT1VOREVEIEZP TExPV0lORworQUZURVIgTUFUQ0ggU0tJUCBUTyBORVhUIFJPVworSU5JVElBTAorUEFUVEVSTiAo U1RBUlQgVVArIERPV04rKQorREVGSU5FCitTVEFSVCBBUyBUUlVFLAorVVAgQVMgcHJpY2UgPiBQ UkVWKHByaWNlKSwKK0RPV04gQVMgcHJpY2UgPCBQUkVWKHByaWNlKQorKTsKKyBjb21wYW55ICB8 ICAgdGRhdGUgICAgfCBwcmljZSB8IGZpcnN0X3ZhbHVlIHwgbGFzdF92YWx1ZSB8IG1heCAgfCBt aW4gIHwgc3VtICB8ICAgICAgICAgIGF2ZyAgICAgICAgICB8IGNvdW50IAorLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0rLS0t LS0tKy0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tCisgY29tcGFueTEgfCAw Ny0wMS0yMDIzIHwgICAxMDAgfCAgICAgICAgIDEwMCB8ICAgICAgICAxNDAgfCAgMjAwIHwgIDEw MCB8ICA1OTAgfCAgMTQ3LjUwMDAwMDAwMDAwMDAwMDAgfCAgICAgNAorIGNvbXBhbnkxIHwgMDct MDItMjAyMyB8ICAgMjAwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICB8ICAgICAg fCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIDAKKyBjb21wYW55MSB8IDA3LTAz LTIwMjMgfCAgIDE1MCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgfCAgICAgIHwg ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAwCisgY29tcGFueTEgfCAwNy0wNC0y MDIzIHwgICAxNDAgfCAgICAgICAgIDE0MCB8ICAgICAgICAgOTAgfCAgMTUwIHwgICA5MCB8ICAz ODAgfCAgMTI2LjY2NjY2NjY2NjY2NjY2NjcgfCAgICAgMworIGNvbXBhbnkxIHwgMDctMDUtMjAy MyB8ICAgMTUwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICB8ICAgICAgfCAgICAg IHwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIDAKKyBjb21wYW55MSB8IDA3LTA2LTIwMjMg fCAgICA5MCB8ICAgICAgICAgIDkwIHwgICAgICAgIDEyMCB8ICAxMzAgfCAgIDkwIHwgIDQ1MCB8 ICAxMTIuNTAwMDAwMDAwMDAwMDAwMCB8ICAgICA0CisgY29tcGFueTEgfCAwNy0wNy0yMDIzIHwg ICAxMTAgfCAgICAgICAgIDExMCB8ICAgICAgICAxMjAgfCAgMTMwIHwgIDExMCB8ICAzNjAgfCAg MTIwLjAwMDAwMDAwMDAwMDAwMDAgfCAgICAgMworIGNvbXBhbnkxIHwgMDctMDgtMjAyMyB8ICAg MTMwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICB8ICAgICAgfCAgICAgIHwgICAg ICAgICAgICAgICAgICAgICAgIHwgICAgIDAKKyBjb21wYW55MSB8IDA3LTA5LTIwMjMgfCAgIDEy MCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgfCAgICAgIHwgICAgICB8ICAgICAg ICAgICAgICAgICAgICAgICB8ICAgICAwCisgY29tcGFueTEgfCAwNy0xMC0yMDIzIHwgICAxMzAg fCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgIHwgICAgICB8ICAgICAgfCAgICAgICAg ICAgICAgICAgICAgICAgfCAgICAgMAorIGNvbXBhbnkyIHwgMDctMDEtMjAyMyB8ICAgIDUwIHwg ICAgICAgICAgNTAgfCAgICAgICAxNDAwIHwgMjAwMCB8ICAgNTAgfCA0OTUwIHwgMTIzNy41MDAw MDAwMDAwMDAwMDAwIHwgICAgIDQKKyBjb21wYW55MiB8IDA3LTAyLTIwMjMgfCAgMjAwMCB8ICAg ICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgfCAgICAgIHwgICAgICB8ICAgICAgICAgICAg ICAgICAgICAgICB8ICAgICAwCisgY29tcGFueTIgfCAwNy0wMy0yMDIzIHwgIDE1MDAgfCAgICAg ICAgICAgICB8ICAgICAgICAgICAgfCAgICAgIHwgICAgICB8ICAgICAgfCAgICAgICAgICAgICAg ICAgICAgICAgfCAgICAgMAorIGNvbXBhbnkyIHwgMDctMDQtMjAyMyB8ICAxNDAwIHwgICAgICAg IDE0MDAgfCAgICAgICAgIDYwIHwgMTUwMCB8ICAgNjAgfCAyOTYwIHwgIDk4Ni42NjY2NjY2NjY2 NjY2NjY3IHwgICAgIDMKKyBjb21wYW55MiB8IDA3LTA1LTIwMjMgfCAgMTUwMCB8ICAgICAgICAg ICAgIHwgICAgICAgICAgICB8ICAgICAgfCAgICAgIHwgICAgICB8ICAgICAgICAgICAgICAgICAg ICAgICB8ICAgICAwCisgY29tcGFueTIgfCAwNy0wNi0yMDIzIHwgICAgNjAgfCAgICAgICAgICA2 MCB8ICAgICAgIDEyMDAgfCAxMzAwIHwgICA2MCB8IDM2NjAgfCAgOTE1LjAwMDAwMDAwMDAwMDAw MDAgfCAgICAgNAorIGNvbXBhbnkyIHwgMDctMDctMjAyMyB8ICAxMTAwIHwgICAgICAgIDExMDAg fCAgICAgICAxMjAwIHwgMTMwMCB8IDExMDAgfCAzNjAwIHwgMTIwMC4wMDAwMDAwMDAwMDAwMDAw IHwgICAgIDMKKyBjb21wYW55MiB8IDA3LTA4LTIwMjMgfCAgMTMwMCB8ICAgICAgICAgICAgIHwg ICAgICAgICAgICB8ICAgICAgfCAgICAgIHwgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8 ICAgICAwCisgY29tcGFueTIgfCAwNy0wOS0yMDIzIHwgIDEyMDAgfCAgICAgICAgICAgICB8ICAg ICAgICAgICAgfCAgICAgIHwgICAgICB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAg ICAgMAorIGNvbXBhbnkyIHwgMDctMTAtMjAyMyB8ICAxMzAwIHwgICAgICAgICAgICAgfCAgICAg ICAgICAgIHwgICAgICB8ICAgICAgfCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwgICAg IDAKKygyMCByb3dzKQorCistLSBKT0lOIGNhc2UKK0NSRUFURSBURU1QIFRBQkxFIHQxIChpIGlu dCwgdjEgaW50KTsKK0NSRUFURSBURU1QIFRBQkxFIHQyIChqIGludCwgdjIgaW50KTsKK0lOU0VS VCBJTlRPIHQxIFZBTFVFUygxLDEwKTsKK0lOU0VSVCBJTlRPIHQxIFZBTFVFUygxLDExKTsKK0lO U0VSVCBJTlRPIHQxIFZBTFVFUygxLDEyKTsKK0lOU0VSVCBJTlRPIHQyIFZBTFVFUygyLDEwKTsK K0lOU0VSVCBJTlRPIHQyIFZBTFVFUygyLDExKTsKK0lOU0VSVCBJTlRPIHQyIFZBTFVFUygyLDEy KTsKK1NFTEVDVCAqIEZST00gdDEsIHQyIFdIRVJFIHQxLnYxIDw9IDExIEFORCB0Mi52MiA8PSAx MTsKKyBpIHwgdjEgfCBqIHwgdjIgCistLS0rLS0tLSstLS0rLS0tLQorIDEgfCAxMCB8IDIgfCAx MAorIDEgfCAxMCB8IDIgfCAxMQorIDEgfCAxMSB8IDIgfCAxMAorIDEgfCAxMSB8IDIgfCAxMQor KDQgcm93cykKKworU0VMRUNUICosIGNvdW50KCopIE9WRVIgdyBGUk9NIHQxLCB0MgorV0lORE9X IHcgQVMgKAorIFBBUlRJVElPTiBCWSB0MS5pCisgUk9XUyBCRVRXRUVOIENVUlJFTlQgUk9XIEFO RCBVTkJPVU5ERUQgRk9MTE9XSU5HCisgSU5JVElBTAorIFBBVFRFUk4gKEEpCisgREVGSU5FCisg QSBBUyB2MSA8PSAxMSBBTkQgdjIgPD0gMTEKKyk7CisgaSB8IHYxIHwgaiB8IHYyIHwgY291bnQg CistLS0rLS0tLSstLS0rLS0tLSstLS0tLS0tCisgMSB8IDEwIHwgMiB8IDEwIHwgICAgIDEKKyAx IHwgMTAgfCAyIHwgMTEgfCAgICAgMQorIDEgfCAxMCB8IDIgfCAxMiB8ICAgICAwCisgMSB8IDEx IHwgMiB8IDEwIHwgICAgIDEKKyAxIHwgMTEgfCAyIHwgMTEgfCAgICAgMQorIDEgfCAxMSB8IDIg fCAxMiB8ICAgICAwCisgMSB8IDEyIHwgMiB8IDEwIHwgICAgIDAKKyAxIHwgMTIgfCAyIHwgMTEg fCAgICAgMAorIDEgfCAxMiB8IDIgfCAxMiB8ICAgICAwCisoOSByb3dzKQorCistLSBXSVRIIGNh c2UKK1dJVEggd3N0b2NrIEFTICgKKyAgU0VMRUNUICogRlJPTSBzdG9jayBXSEVSRSB0ZGF0ZSA8 ICcyMDIzLTA3LTA4JworKQorU0VMRUNUIHRkYXRlLCBwcmljZSwKK2ZpcnN0X3ZhbHVlKHRkYXRl KSBPVkVSIHcsCitjb3VudCgqKSBPVkVSIHcKKyBGUk9NIHdzdG9jaworIFdJTkRPVyB3IEFTICgK KyBQQVJUSVRJT04gQlkgY29tcGFueQorIE9SREVSIEJZIHRkYXRlCisgUk9XUyBCRVRXRUVOIENV UlJFTlQgUk9XIEFORCBVTkJPVU5ERUQgRk9MTE9XSU5HCisgSU5JVElBTAorIFBBVFRFUk4gKFNU QVJUIFVQKyBET1dOKykKKyBERUZJTkUKKyAgU1RBUlQgQVMgVFJVRSwKKyAgVVAgQVMgcHJpY2Ug PiBQUkVWKHByaWNlKSwKKyAgRE9XTiBBUyBwcmljZSA8IFBSRVYocHJpY2UpCispOworICAgdGRh dGUgICAgfCBwcmljZSB8IGZpcnN0X3ZhbHVlIHwgY291bnQgCistLS0tLS0tLS0tLS0rLS0tLS0t LSstLS0tLS0tLS0tLS0tKy0tLS0tLS0KKyAwNy0wMS0yMDIzIHwgICAxMDAgfCAwNy0wMS0yMDIz ICB8ICAgICA0CisgMDctMDItMjAyMyB8ICAgMjAwIHwgICAgICAgICAgICAgfCAgICAgMAorIDA3 LTAzLTIwMjMgfCAgIDE1MCB8ICAgICAgICAgICAgIHwgICAgIDAKKyAwNy0wNC0yMDIzIHwgICAx NDAgfCAgICAgICAgICAgICB8ICAgICAwCisgMDctMDUtMjAyMyB8ICAgMTUwIHwgICAgICAgICAg ICAgfCAgICAgMAorIDA3LTA2LTIwMjMgfCAgICA5MCB8ICAgICAgICAgICAgIHwgICAgIDAKKyAw Ny0wNy0yMDIzIHwgICAxMTAgfCAgICAgICAgICAgICB8ICAgICAwCisgMDctMDEtMjAyMyB8ICAg IDUwIHwgMDctMDEtMjAyMyAgfCAgICAgNAorIDA3LTAyLTIwMjMgfCAgMjAwMCB8ICAgICAgICAg ICAgIHwgICAgIDAKKyAwNy0wMy0yMDIzIHwgIDE1MDAgfCAgICAgICAgICAgICB8ICAgICAwCisg MDctMDQtMjAyMyB8ICAxNDAwIHwgICAgICAgICAgICAgfCAgICAgMAorIDA3LTA1LTIwMjMgfCAg MTUwMCB8ICAgICAgICAgICAgIHwgICAgIDAKKyAwNy0wNi0yMDIzIHwgICAgNjAgfCAgICAgICAg ICAgICB8ICAgICAwCisgMDctMDctMjAyMyB8ICAxMTAwIHwgICAgICAgICAgICAgfCAgICAgMAor KDE0IHJvd3MpCisKKy0tIFBSRVYgaGFzIG11bHRpcGxlIGNvbHVtbiByZWZlcmVuY2UKK0NSRUFU RSBURU1QIFRBQkxFIHJwcjEgKGlkIElOVEVHRVIsIGkgU0VSSUFMLCBqIElOVEVHRVIpOworSU5T RVJUIElOVE8gcnByMShpZCwgaikgU0VMRUNUIDEsIGcqMiBGUk9NIGdlbmVyYXRlX3Nlcmllcygx LCAxMCkgQVMgZzsKK1NFTEVDVCBpZCwgaSwgaiwgY291bnQoKikgT1ZFUiB3CisgRlJPTSBycHIx CisgV0lORE9XIHcgQVMgKAorIFBBUlRJVElPTiBCWSBpZAorIE9SREVSIEJZIGkKKyBST1dTIEJF VFdFRU4gQ1VSUkVOVCBST1cgQU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcKKyBBRlRFUiBNQVRDSCBT S0lQIFBBU1QgTEFTVCBST1cKKyBJTklUSUFMCisgUEFUVEVSTiAoU1RBUlQgQ09ORCspCisgREVG SU5FCisgIFNUQVJUIEFTIFRSVUUsCisgIENPTkQgQVMgUFJFVihpICsgaiArIDEpIDwgMTAKKyk7 CisgaWQgfCBpICB8IGogIHwgY291bnQgCistLS0tKy0tLS0rLS0tLSstLS0tLS0tCisgIDEgfCAg MSB8ICAyIHwgICAgIDMKKyAgMSB8ICAyIHwgIDQgfCAgICAgMAorICAxIHwgIDMgfCAgNiB8ICAg ICAwCisgIDEgfCAgNCB8ICA4IHwgICAgIDAKKyAgMSB8ICA1IHwgMTAgfCAgICAgMAorICAxIHwg IDYgfCAxMiB8ICAgICAwCisgIDEgfCAgNyB8IDE0IHwgICAgIDAKKyAgMSB8ICA4IHwgMTYgfCAg ICAgMAorICAxIHwgIDkgfCAxOCB8ICAgICAwCisgIDEgfCAxMCB8IDIwIHwgICAgIDAKKygxMCBy b3dzKQorCistLSBTbW9rZSB0ZXN0IGZvciBsYXJnZXIgcGFydGl0aW9ucy4KK1dJVEggcyBBUyAo CisgU0VMRUNUIHYsIGNvdW50KCopIE9WRVIgdyBBUyBjCisgRlJPTSAoU0VMRUNUIGdlbmVyYXRl X3NlcmllcygxLCA1MDAwKSB2KQorIFdJTkRPVyB3IEFTICgKKyAgUk9XUyBCRVRXRUVOIENVUlJF TlQgUk9XIEFORCBVTkJPVU5ERUQgRk9MTE9XSU5HCisgIEFGVEVSIE1BVENIIFNLSVAgUEFTVCBM QVNUIFJPVworICBJTklUSUFMCisgIFBBVFRFUk4gKCByKyApCisgIERFRklORSByIEFTIFRSVUUK KyApCispCistLSBTaG91bGQgYmUgZXhhY3RseSBvbmUgbG9uZyBtYXRjaCBhY3Jvc3MgYWxsIHJv d3MuCitTRUxFQ1QgKiBGUk9NIHMgV0hFUkUgYyA+IDA7CisgdiB8ICBjICAgCistLS0rLS0tLS0t CisgMSB8IDUwMDAKKygxIHJvdykKKworV0lUSCBzIEFTICgKKyBTRUxFQ1QgdiwgY291bnQoKikg T1ZFUiB3IEFTIGMKKyBGUk9NIChTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDUwMDApIHYpCisg V0lORE9XIHcgQVMgKAorICBST1dTIEJFVFdFRU4gQ1VSUkVOVCBST1cgQU5EIFVOQk9VTkRFRCBG T0xMT1dJTkcKKyAgQUZURVIgTUFUQ0ggU0tJUCBQQVNUIExBU1QgUk9XCisgIElOSVRJQUwKKyAg UEFUVEVSTiAoIHIgKQorICBERUZJTkUgciBBUyBUUlVFCisgKQorKQorLS0gRXZlcnkgcm93IHNo b3VsZCBiZSBpdHMgb3duIG1hdGNoLgorU0VMRUNUIGNvdW50KCopIEZST00gcyBXSEVSRSBjID4g MDsKKyBjb3VudCAKKy0tLS0tLS0KKyAgNTAwMAorKDEgcm93KQorCistLSBWaWV3IGFuZCBwZ19n ZXRfdmlld2RlZiB0ZXN0cy4KK0NSRUFURSBURU1QIFZJRVcgdl93aW5kb3cgQVMKK1NFTEVDVCBj b21wYW55LCB0ZGF0ZSwgcHJpY2UsIGZpcnN0X3ZhbHVlKHByaWNlKSBPVkVSIHcsIGxhc3RfdmFs dWUocHJpY2UpIE9WRVIgdywKKyBudGhfdmFsdWUodGRhdGUsIDIpIE9WRVIgdyBBUyBudGhfc2Vj b25kCisgRlJPTSBzdG9jaworIFdJTkRPVyB3IEFTICgKKyBQQVJUSVRJT04gQlkgY29tcGFueQor IFJPV1MgQkVUV0VFTiBDVVJSRU5UIFJPVyBBTkQgVU5CT1VOREVEIEZPTExPV0lORworIElOSVRJ QUwKKyBQQVRURVJOIChTVEFSVCBVUCsgRE9XTispCisgREVGSU5FCisgIFNUQVJUIEFTIFRSVUUs CisgIFVQIEFTIHByaWNlID4gUFJFVihwcmljZSksCisgIERPV04gQVMgcHJpY2UgPCBQUkVWKHBy aWNlKQorKTsKK1NFTEVDVCAqIEZST00gdl93aW5kb3c7CisgY29tcGFueSAgfCAgIHRkYXRlICAg IHwgcHJpY2UgfCBmaXJzdF92YWx1ZSB8IGxhc3RfdmFsdWUgfCBudGhfc2Vjb25kIAorLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0KKyBjb21wYW55MSB8IDA3LTAxLTIwMjMgfCAgIDEwMCB8ICAgICAgICAgMTAwIHwg ICAgICAgIDE0MCB8IDA3LTAyLTIwMjMKKyBjb21wYW55MSB8IDA3LTAyLTIwMjMgfCAgIDIwMCB8 ICAgICAgICAgICAgIHwgICAgICAgICAgICB8IAorIGNvbXBhbnkxIHwgMDctMDMtMjAyMyB8ICAg MTUwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgCisgY29tcGFueTEgfCAwNy0wNC0yMDIz IHwgICAxNDAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAKKyBjb21wYW55MSB8IDA3LTA1 LTIwMjMgfCAgIDE1MCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8IAorIGNvbXBhbnkxIHwg MDctMDYtMjAyMyB8ICAgIDkwIHwgICAgICAgICAgOTAgfCAgICAgICAgMTIwIHwgMDctMDctMjAy MworIGNvbXBhbnkxIHwgMDctMDctMjAyMyB8ICAgMTEwIHwgICAgICAgICAgICAgfCAgICAgICAg ICAgIHwgCisgY29tcGFueTEgfCAwNy0wOC0yMDIzIHwgICAxMzAgfCAgICAgICAgICAgICB8ICAg ICAgICAgICAgfCAKKyBjb21wYW55MSB8IDA3LTA5LTIwMjMgfCAgIDEyMCB8ICAgICAgICAgICAg IHwgICAgICAgICAgICB8IAorIGNvbXBhbnkxIHwgMDctMTAtMjAyMyB8ICAgMTMwIHwgICAgICAg ICAgICAgfCAgICAgICAgICAgIHwgCisgY29tcGFueTIgfCAwNy0wMS0yMDIzIHwgICAgNTAgfCAg ICAgICAgICA1MCB8ICAgICAgIDE0MDAgfCAwNy0wMi0yMDIzCisgY29tcGFueTIgfCAwNy0wMi0y MDIzIHwgIDIwMDAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAKKyBjb21wYW55MiB8IDA3 LTAzLTIwMjMgfCAgMTUwMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8IAorIGNvbXBhbnky IHwgMDctMDQtMjAyMyB8ICAxNDAwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgCisgY29t cGFueTIgfCAwNy0wNS0yMDIzIHwgIDE1MDAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAK KyBjb21wYW55MiB8IDA3LTA2LTIwMjMgfCAgICA2MCB8ICAgICAgICAgIDYwIHwgICAgICAgMTIw MCB8IDA3LTA3LTIwMjMKKyBjb21wYW55MiB8IDA3LTA3LTIwMjMgfCAgMTEwMCB8ICAgICAgICAg ICAgIHwgICAgICAgICAgICB8IAorIGNvbXBhbnkyIHwgMDctMDgtMjAyMyB8ICAxMzAwIHwgICAg ICAgICAgICAgfCAgICAgICAgICAgIHwgCisgY29tcGFueTIgfCAwNy0wOS0yMDIzIHwgIDEyMDAg fCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAKKyBjb21wYW55MiB8IDA3LTEwLTIwMjMgfCAg MTMwMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8IAorKDIwIHJvd3MpCisKK1NFTEVDVCBw Z19nZXRfdmlld2RlZigndl93aW5kb3cnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBnX2dldF92aWV3ZGVmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFNFTEVDVCBjb21wYW55LCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICsKKyAgICAgdGRhdGUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICBwcmljZSwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICArCisgICAgIGZpcnN0X3ZhbHVlKHByaWNlKSBPVkVSIHcgQVMgZmlyc3Rf dmFsdWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgbGFz dF92YWx1ZShwcmljZSkgT1ZFUiB3IEFTIGxhc3RfdmFsdWUsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKworICAgICBudGhfdmFsdWUodGRhdGUsIDIpIE9WRVIgdyBB UyBudGhfc2Vjb25kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisg ICAgRlJPTSBzdG9jayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgIFdJTkRPVyB3IEFTIChQQVJUSVRJT04g QlkgY29tcGFueSBST1dTIEJFVFdFRU4gQ1VSUkVOVCBST1cgQU5EIFVOQk9VTkRFRCBGT0xMT1dJ TkcgKworICAgQUZURVIgTUFUQ0ggU0tJUCBQQVNUIExBU1QgUk9XICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICBJTklUSUFMICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICsKKyAgIFBBVFRFUk4gKHN0YXJ0IHVwKyBkb3duKykgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgREVGSU5FICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICArCisgICBzdGFydCBBUyB0cnVlLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgIHVw IEFTIChwcmljZSA+IHByZXYocHJpY2UpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKworICAgZG93biBBUyAocHJpY2UgPCBwcmV2KHByaWNl KSkgKTsKKygxIHJvdykKKworLS0KKy0tIEVycm9yIGNhc2VzCistLQorLS0gcm93IHBhdHRlcm4g ZGVmaW5pdGlvbiB2YXJpYWJsZSBuYW1lIG11c3Qgbm90IGFwcGVhciBtb3JlIHRoYW4gb25jZQor U0VMRUNUIGNvbXBhbnksIHRkYXRlLCBwcmljZSwgZmlyc3RfdmFsdWUocHJpY2UpIE9WRVIgdywg bGFzdF92YWx1ZShwcmljZSkgT1ZFUiB3CisgRlJPTSBzdG9jaworIFdJTkRPVyB3IEFTICgKKyBQ QVJUSVRJT04gQlkgY29tcGFueQorIE9SREVSIEJZIHRkYXRlCisgUk9XUyBCRVRXRUVOIENVUlJF TlQgUk9XIEFORCBVTkJPVU5ERUQgRk9MTE9XSU5HCisgSU5JVElBTAorIFBBVFRFUk4gKFNUQVJU IFVQKyBET1dOKykKKyBERUZJTkUKKyAgU1RBUlQgQVMgVFJVRSwKKyAgVVAgQVMgcHJpY2UgPiBQ UkVWKHByaWNlKSwKKyAgRE9XTiBBUyBwcmljZSA8IFBSRVYocHJpY2UpLAorICBVUCBBUyBwcmlj ZSA+IFBSRVYocHJpY2UpCispOworRVJST1I6ICByb3cgcGF0dGVybiBkZWZpbml0aW9uIHZhcmlh YmxlIG5hbWUgInVwIiBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlIGluIERFRklORSBjbGF1c2UKK0xJ TkUgMTE6ICAgVVAgQVMgcHJpY2UgPiBQUkVWKHByaWNlKSwKKyAgICAgICAgICAgXgorLS0gc3Vi cXVlcmllcyBpbiBERUZJTkUgY2xhdXNlIGFyZSBub3Qgc3VwcG9ydGVkCitTRUxFQ1QgY29tcGFu eSwgdGRhdGUsIHByaWNlLCBmaXJzdF92YWx1ZShwcmljZSkgT1ZFUiB3LCBsYXN0X3ZhbHVlKHBy aWNlKSBPVkVSIHcKKyBGUk9NIHN0b2NrCisgV0lORE9XIHcgQVMgKAorIFBBUlRJVElPTiBCWSBj b21wYW55CisgT1JERVIgQlkgdGRhdGUKKyBST1dTIEJFVFdFRU4gQ1VSUkVOVCBST1cgQU5EIFVO Qk9VTkRFRCBGT0xMT1dJTkcKKyBJTklUSUFMCisgUEFUVEVSTiAoU1RBUlQgTE9XUFJJQ0UpCisg REVGSU5FCisgIFNUQVJUIEFTIFRSVUUsCisgIExPV1BSSUNFIEFTIHByaWNlIDwgKFNFTEVDVCAx MDApCispOworRVJST1I6ICBjYW5ub3QgdXNlIHN1YnF1ZXJ5IGluIERFRklORSBleHByZXNzaW9u CitMSU5FIDExOiAgIExPV1BSSUNFIEFTIHByaWNlIDwgKFNFTEVDVCAxMDApCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXgorLS0gYWdncmVnYXRlcyBpbiBERUZJTkUgY2xhdXNlIGFy ZSBub3Qgc3VwcG9ydGVkCitTRUxFQ1QgY29tcGFueSwgdGRhdGUsIHByaWNlLCBmaXJzdF92YWx1 ZShwcmljZSkgT1ZFUiB3LCBsYXN0X3ZhbHVlKHByaWNlKSBPVkVSIHcKKyBGUk9NIHN0b2NrCisg V0lORE9XIHcgQVMgKAorIFBBUlRJVElPTiBCWSBjb21wYW55CisgT1JERVIgQlkgdGRhdGUKKyBS T1dTIEJFVFdFRU4gQ1VSUkVOVCBST1cgQU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcKKyBJTklUSUFM CisgUEFUVEVSTiAoU1RBUlQgTE9XUFJJQ0UpCisgREVGSU5FCisgIFNUQVJUIEFTIFRSVUUsCisg IExPV1BSSUNFIEFTIHByaWNlIDwgY291bnQoKikKKyk7CitFUlJPUjogIGFnZ3JlZ2F0ZSBmdW5j dGlvbnMgYXJlIG5vdCBhbGxvd2VkIGluIERFRklORQorTElORSAxMTogICBMT1dQUklDRSBBUyBw cmljZSA8IGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorLS0gRlJB TUUgbXVzdCBzdGFydCBhdCBjdXJyZW50IHJvdyB3aGVuIHJvdyBwYXR0dGVybiByZWNvZ25pdGlv biBpcyB1c2VkCitTRUxFQ1QgY29tcGFueSwgdGRhdGUsIHByaWNlLCBmaXJzdF92YWx1ZShwcmlj ZSkgT1ZFUiB3LCBsYXN0X3ZhbHVlKHByaWNlKSBPVkVSIHcKKyBGUk9NIHN0b2NrCisgV0lORE9X IHcgQVMgKAorIFBBUlRJVElPTiBCWSBjb21wYW55CisgT1JERVIgQlkgdGRhdGUKKyBST1dTIEJF VFdFRU4gVU5CT1VOREVEIFBSRUNFRElORyBBTkQgVU5CT1VOREVEIEZPTExPV0lORworIElOSVRJ QUwKKyBQQVRURVJOIChTVEFSVCBVUCsgRE9XTispCisgREVGSU5FCisgIFNUQVJUIEFTIFRSVUUs CisgIFVQIEFTIHByaWNlID4gUFJFVihwcmljZSksCisgIERPV04gQVMgcHJpY2UgPCBQUkVWKHBy aWNlKQorKTsKK0VSUk9SOiAgRlJBTUUgbXVzdCBzdGFydCBhdCBjdXJyZW50IHJvdyB3aGVuIHJv dyBwYXR0dGVybiByZWNvZ25pdGlvbiBpcyB1c2VkCistLSBTRUVLIGlzIG5vdCBzdXBwb3J0ZWQK K1NFTEVDVCBjb21wYW55LCB0ZGF0ZSwgcHJpY2UsIGZpcnN0X3ZhbHVlKHByaWNlKSBPVkVSIHcs IGxhc3RfdmFsdWUocHJpY2UpIE9WRVIgdworIEZST00gc3RvY2sKKyBXSU5ET1cgdyBBUyAoCisg UEFSVElUSU9OIEJZIGNvbXBhbnkKKyBPUkRFUiBCWSB0ZGF0ZQorIFJPV1MgQkVUV0VFTiBDVVJS RU5UIFJPVyBBTkQgVU5CT1VOREVEIEZPTExPV0lORworIEFGVEVSIE1BVENIIFNLSVAgVE8gTkVY VCBST1cKKyBTRUVLCisgUEFUVEVSTiAoU1RBUlQgVVArIERPV04rKQorIERFRklORQorICBTVEFS VCBBUyBUUlVFLAorICBVUCBBUyBwcmljZSA+IFBSRVYocHJpY2UpLAorICBET1dOIEFTIHByaWNl IDwgUFJFVihwcmljZSkKKyk7CitFUlJPUjogIFNFRUsgaXMgbm90IHN1cHBvcnRlZAorTElORSA4 OiAgU0VFSworICAgICAgICAgXgorSElOVDogIFVzZSBJTklUSUFMIGluc3RlYWQuCistLSBQUkVW J3MgYXJndW1lbnQgbXVzdCBoYXZlIGF0IGxlYXN0IDEgY29sdW1uIHJlZmVyZW5jZQorU0VMRUNU IGNvbXBhbnksIHRkYXRlLCBwcmljZSwgZmlyc3RfdmFsdWUocHJpY2UpIE9WRVIgdywgbGFzdF92 YWx1ZShwcmljZSkgT1ZFUiB3CisgRlJPTSBzdG9jaworIFdJTkRPVyB3IEFTICgKKyBQQVJUSVRJ T04gQlkgY29tcGFueQorIE9SREVSIEJZIHRkYXRlCisgUk9XUyBCRVRXRUVOIENVUlJFTlQgUk9X IEFORCBVTkJPVU5ERUQgRk9MTE9XSU5HCisgQUZURVIgTUFUQ0ggU0tJUCBUTyBORVhUIFJPVwor IElOSVRJQUwKKyBQQVRURVJOIChTVEFSVCBVUCsgRE9XTispCisgREVGSU5FCisgIFNUQVJUIEFT IFRSVUUsCisgIFVQIEFTIHByaWNlID4gUFJFVigxKSwKKyAgRE9XTiBBUyBwcmljZSA8IFBSRVYo MSkKKyk7CitFUlJPUjogIHJvdyBwYXR0ZXJuIG5hdmlnYXRpb24gb3BlcmF0aW9uJ3MgYXJndW1l bnQgbXVzdCBpbmNsdWRlIGF0IGxlYXN0IG9uZSBjb2x1bW4gcmVmZXJlbmNlCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlIGIvc3JjL3Rlc3QvcmVncmVzcy9w YXJhbGxlbF9zY2hlZHVsZQppbmRleCBmYmZmYzY3YWU2MC4uODA1MTk4MGFiNDMgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKKysrIGIvc3JjL3Rlc3QvcmVn cmVzcy9wYXJhbGxlbF9zY2hlZHVsZQpAQCAtMTAyLDcgKzEwMiw3IEBAIHRlc3Q6IHB1YmxpY2F0 aW9uIHN1YnNjcmlwdGlvbgogIyBBbm90aGVyIGdyb3VwIG9mIHBhcmFsbGVsIHRlc3RzCiAjIHNl bGVjdF92aWV3cyBkZXBlbmRzIG9uIGNyZWF0ZV92aWV3CiAjIC0tLS0tLS0tLS0KLXRlc3Q6IHNl bGVjdF92aWV3cyBwb3J0YWxzX3AyIGZvcmVpZ25fa2V5IGNsdXN0ZXIgZGVwZW5kZW5jeSBndWMg Yml0bWFwb3BzIGNvbWJvY2lkIHRzZWFyY2ggdHNkaWN0cyBmb3JlaWduX2RhdGEgd2luZG93IHht bG1hcCBmdW5jdGlvbmFsX2RlcHMgYWR2aXNvcnlfbG9jayBpbmRpcmVjdF90b2FzdCBlcXVpdmNs YXNzCit0ZXN0OiBzZWxlY3Rfdmlld3MgcG9ydGFsc19wMiBmb3JlaWduX2tleSBjbHVzdGVyIGRl cGVuZGVuY3kgZ3VjIGJpdG1hcG9wcyBjb21ib2NpZCB0c2VhcmNoIHRzZGljdHMgZm9yZWlnbl9k YXRhIHdpbmRvdyB4bWxtYXAgZnVuY3Rpb25hbF9kZXBzIGFkdmlzb3J5X2xvY2sgaW5kaXJlY3Rf dG9hc3QgZXF1aXZjbGFzcyBycHIKIAogIyAtLS0tLS0tLS0tCiAjIEFub3RoZXIgZ3JvdXAgb2Yg cGFyYWxsZWwgdGVzdHMgKEpTT04gcmVsYXRlZCkKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL3Jwci5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9ycHIuc3FsCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40N2U2NzMzNDk5NAotLS0gL2Rldi9udWxsCisr KyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Jwci5zcWwKQEAgLTAsMCArMSw0ODYgQEAKKy0tCist LSBUZXN0IGZvciByb3cgcGF0dGVybiBkZWZpbml0aW9uIGNsYXVzZQorLS0KKworQ1JFQVRFIFRF TVAgVEFCTEUgc3RvY2sgKAorICAgICAgIGNvbXBhbnkgVEVYVCwKKyAgICAgICB0ZGF0ZSBEQVRF LAorICAgICAgIHByaWNlIElOVEVHRVIKKyk7CitJTlNFUlQgSU5UTyBzdG9jayBWQUxVRVMgKCdj b21wYW55MScsICcyMDIzLTA3LTAxJywgMTAwKTsKK0lOU0VSVCBJTlRPIHN0b2NrIFZBTFVFUyAo J2NvbXBhbnkxJywgJzIwMjMtMDctMDInLCAyMDApOworSU5TRVJUIElOVE8gc3RvY2sgVkFMVUVT ICgnY29tcGFueTEnLCAnMjAyMy0wNy0wMycsIDE1MCk7CitJTlNFUlQgSU5UTyBzdG9jayBWQUxV RVMgKCdjb21wYW55MScsICcyMDIzLTA3LTA0JywgMTQwKTsKK0lOU0VSVCBJTlRPIHN0b2NrIFZB TFVFUyAoJ2NvbXBhbnkxJywgJzIwMjMtMDctMDUnLCAxNTApOworSU5TRVJUIElOVE8gc3RvY2sg VkFMVUVTICgnY29tcGFueTEnLCAnMjAyMy0wNy0wNicsIDkwKTsKK0lOU0VSVCBJTlRPIHN0b2Nr IFZBTFVFUyAoJ2NvbXBhbnkxJywgJzIwMjMtMDctMDcnLCAxMTApOworSU5TRVJUIElOVE8gc3Rv Y2sgVkFMVUVTICgnY29tcGFueTEnLCAnMjAyMy0wNy0wOCcsIDEzMCk7CitJTlNFUlQgSU5UTyBz dG9jayBWQUxVRVMgKCdjb21wYW55MScsICcyMDIzLTA3LTA5JywgMTIwKTsKK0lOU0VSVCBJTlRP IHN0b2NrIFZBTFVFUyAoJ2NvbXBhbnkxJywgJzIwMjMtMDctMTAnLCAxMzApOworSU5TRVJUIElO VE8gc3RvY2sgVkFMVUVTICgnY29tcGFueTInLCAnMjAyMy0wNy0wMScsIDUwKTsKK0lOU0VSVCBJ TlRPIHN0b2NrIFZBTFVFUyAoJ2NvbXBhbnkyJywgJzIwMjMtMDctMDInLCAyMDAwKTsKK0lOU0VS VCBJTlRPIHN0b2NrIFZBTFVFUyAoJ2NvbXBhbnkyJywgJzIwMjMtMDctMDMnLCAxNTAwKTsKK0lO U0VSVCBJTlRPIHN0b2NrIFZBTFVFUyAoJ2NvbXBhbnkyJywgJzIwMjMtMDctMDQnLCAxNDAwKTsK K0lOU0VSVCBJTlRPIHN0b2NrIFZBTFVFUyAoJ2NvbXBhbnkyJywgJzIwMjMtMDctMDUnLCAxNTAw KTsKK0lOU0VSVCBJTlRPIHN0b2NrIFZBTFVFUyAoJ2NvbXBhbnkyJywgJzIwMjMtMDctMDYnLCA2 MCk7CitJTlNFUlQgSU5UTyBzdG9jayBWQUxVRVMgKCdjb21wYW55MicsICcyMDIzLTA3LTA3Jywg MTEwMCk7CitJTlNFUlQgSU5UTyBzdG9jayBWQUxVRVMgKCdjb21wYW55MicsICcyMDIzLTA3LTA4 JywgMTMwMCk7CitJTlNFUlQgSU5UTyBzdG9jayBWQUxVRVMgKCdjb21wYW55MicsICcyMDIzLTA3 LTA5JywgMTIwMCk7CitJTlNFUlQgSU5UTyBzdG9jayBWQUxVRVMgKCdjb21wYW55MicsICcyMDIz LTA3LTEwJywgMTMwMCk7CisKK1NFTEVDVCAqIEZST00gc3RvY2s7CisKKy0tIGJhc2ljIHRlc3Qg dXNpbmcgUFJFVgorU0VMRUNUIGNvbXBhbnksIHRkYXRlLCBwcmljZSwgZmlyc3RfdmFsdWUocHJp Y2UpIE9WRVIgdywgbGFzdF92YWx1ZShwcmljZSkgT1ZFUiB3LAorIG50aF92YWx1ZSh0ZGF0ZSwg MikgT1ZFUiB3IEFTIG50aF9zZWNvbmQKKyBGUk9NIHN0b2NrCisgV0lORE9XIHcgQVMgKAorIFBB UlRJVElPTiBCWSBjb21wYW55CisgUk9XUyBCRVRXRUVOIENVUlJFTlQgUk9XIEFORCBVTkJPVU5E RUQgRk9MTE9XSU5HCisgSU5JVElBTAorIFBBVFRFUk4gKFNUQVJUIFVQKyBET1dOKykKKyBERUZJ TkUKKyAgU1RBUlQgQVMgVFJVRSwKKyAgVVAgQVMgcHJpY2UgPiBQUkVWKHByaWNlKSwKKyAgRE9X TiBBUyBwcmljZSA8IFBSRVYocHJpY2UpCispOworCistLSBiYXNpYyB0ZXN0IHVzaW5nIFBSRVYu IFVQIGFwcGVhcnMgdHdpY2UKK1NFTEVDVCBjb21wYW55LCB0ZGF0ZSwgcHJpY2UsIGZpcnN0X3Zh bHVlKHByaWNlKSBPVkVSIHcsIGxhc3RfdmFsdWUocHJpY2UpIE9WRVIgdywKKyBudGhfdmFsdWUo dGRhdGUsIDIpIE9WRVIgdyBBUyBudGhfc2Vjb25kCisgRlJPTSBzdG9jaworIFdJTkRPVyB3IEFT ICgKKyBQQVJUSVRJT04gQlkgY29tcGFueQorIFJPV1MgQkVUV0VFTiBDVVJSRU5UIFJPVyBBTkQg VU5CT1VOREVEIEZPTExPV0lORworIElOSVRJQUwKKyBQQVRURVJOIChTVEFSVCBVUCsgRE9XTisg VVArKQorIERFRklORQorICBTVEFSVCBBUyBUUlVFLAorICBVUCBBUyBwcmljZSA+IFBSRVYocHJp Y2UpLAorICBET1dOIEFTIHByaWNlIDwgUFJFVihwcmljZSkKKyk7CisKKy0tIGJhc2ljIHRlc3Qg dXNpbmcgUFJFVi4gVXNlICcqJworU0VMRUNUIGNvbXBhbnksIHRkYXRlLCBwcmljZSwgZmlyc3Rf dmFsdWUocHJpY2UpIE9WRVIgdywgbGFzdF92YWx1ZShwcmljZSkgT1ZFUiB3LAorIG50aF92YWx1 ZSh0ZGF0ZSwgMikgT1ZFUiB3IEFTIG50aF9zZWNvbmQKKyBGUk9NIHN0b2NrCisgV0lORE9XIHcg QVMgKAorIFBBUlRJVElPTiBCWSBjb21wYW55CisgUk9XUyBCRVRXRUVOIENVUlJFTlQgUk9XIEFO RCBVTkJPVU5ERUQgRk9MTE9XSU5HCisgSU5JVElBTAorIFBBVFRFUk4gKFNUQVJUIFVQKiBET1dO KykKKyBERUZJTkUKKyAgU1RBUlQgQVMgVFJVRSwKKyAgVVAgQVMgcHJpY2UgPiBQUkVWKHByaWNl KSwKKyAgRE9XTiBBUyBwcmljZSA8IFBSRVYocHJpY2UpCispOworCistLSBiYXNpYyB0ZXN0IHdp dGggbm9uZSBncmVlZHkgcGF0dGVybgorU0VMRUNUIGNvbXBhbnksIHRkYXRlLCBwcmljZSwgY291 bnQoKikgT1ZFUiB3CisgRlJPTSBzdG9jaworIFdJTkRPVyB3IEFTICgKKyBQQVJUSVRJT04gQlkg Y29tcGFueQorIFJPV1MgQkVUV0VFTiBDVVJSRU5UIFJPVyBBTkQgVU5CT1VOREVEIEZPTExPV0lO RworIElOSVRJQUwKKyBQQVRURVJOIChBIEEgQSkKKyBERUZJTkUKKyAgQSBBUyBwcmljZSA+PSAx NDAgQU5EIHByaWNlIDw9IDE1MAorKTsKKworLS0gbGFzdF92YWx1ZSgpIHNob3VsZCByZW1haW4g Y29uc2lzdGVudAorU0VMRUNUIGNvbXBhbnksIHRkYXRlLCBwcmljZSwgbGFzdF92YWx1ZShwcmlj ZSkgT1ZFUiB3CisgRlJPTSBzdG9jaworIFdJTkRPVyB3IEFTICgKKyBQQVJUSVRJT04gQlkgY29t cGFueQorIE9SREVSIEJZIHRkYXRlCisgUk9XUyBCRVRXRUVOIENVUlJFTlQgUk9XIEFORCBVTkJP VU5ERUQgRk9MTE9XSU5HCisgSU5JVElBTAorIFBBVFRFUk4gKFNUQVJUIFVQKyBET1dOKykKKyBE RUZJTkUKKyAgU1RBUlQgQVMgVFJVRSwKKyAgVVAgQVMgcHJpY2UgPiBQUkVWKHByaWNlKSwKKyAg RE9XTiBBUyBwcmljZSA8IFBSRVYocHJpY2UpCispOworCistLSBvbWl0ICJTVEFSVCIgaW4gREVG SU5FIGJ1dCBpdCBpcyBvayBiZWNhdXNlICJTVEFSVCBBUyBUUlVFIiBpcworLS0gaW1wbGljaXRs eSBkZWZpbmVkLiBwZXIgc3BlYy4KK1NFTEVDVCBjb21wYW55LCB0ZGF0ZSwgcHJpY2UsIGZpcnN0 X3ZhbHVlKHByaWNlKSBPVkVSIHcsIGxhc3RfdmFsdWUocHJpY2UpIE9WRVIgdywKKyBudGhfdmFs dWUodGRhdGUsIDIpIE9WRVIgdyBBUyBudGhfc2Vjb25kCisgRlJPTSBzdG9jaworIFdJTkRPVyB3 IEFTICgKKyBQQVJUSVRJT04gQlkgY29tcGFueQorIFJPV1MgQkVUV0VFTiBDVVJSRU5UIFJPVyBB TkQgVU5CT1VOREVEIEZPTExPV0lORworIElOSVRJQUwKKyBQQVRURVJOIChTVEFSVCBVUCsgRE9X TispCisgREVGSU5FCisgIFVQIEFTIHByaWNlID4gUFJFVihwcmljZSksCisgIERPV04gQVMgcHJp Y2UgPCBQUkVWKHByaWNlKQorKTsKKworLS0gdGhlIGZpcnN0IHJvdyBzdGFydCB3aXRoIGxlc3Mg dGhhbiBvciBlcXVhbCB0byAxMDAKK1NFTEVDVCBjb21wYW55LCB0ZGF0ZSwgcHJpY2UsIGZpcnN0 X3ZhbHVlKHByaWNlKSBPVkVSIHcsIGxhc3RfdmFsdWUocHJpY2UpIE9WRVIgdworIEZST00gc3Rv Y2sKKyBXSU5ET1cgdyBBUyAoCisgUEFSVElUSU9OIEJZIGNvbXBhbnkKKyBST1dTIEJFVFdFRU4g Q1VSUkVOVCBST1cgQU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcKKyBJTklUSUFMCisgUEFUVEVSTiAo TE9XUFJJQ0UgVVArIERPV04rKQorIERFRklORQorICBMT1dQUklDRSBBUyBwcmljZSA8PSAxMDAs CisgIFVQIEFTIHByaWNlID4gUFJFVihwcmljZSksCisgIERPV04gQVMgcHJpY2UgPCBQUkVWKHBy aWNlKQorKTsKKworLS0gc2Vjb25kIHJvdyByYWlzZXMgMTIwJQorU0VMRUNUIGNvbXBhbnksIHRk YXRlLCBwcmljZSwgZmlyc3RfdmFsdWUocHJpY2UpIE9WRVIgdywgbGFzdF92YWx1ZShwcmljZSkg T1ZFUiB3CisgRlJPTSBzdG9jaworIFdJTkRPVyB3IEFTICgKKyBQQVJUSVRJT04gQlkgY29tcGFu eQorIFJPV1MgQkVUV0VFTiBDVVJSRU5UIFJPVyBBTkQgVU5CT1VOREVEIEZPTExPV0lORworIElO SVRJQUwKKyBQQVRURVJOIChMT1dQUklDRSBVUCsgRE9XTispCisgREVGSU5FCisgIExPV1BSSUNF IEFTIHByaWNlIDw9IDEwMCwKKyAgVVAgQVMgcHJpY2UgPiBQUkVWKHByaWNlKSAqIDEuMiwKKyAg RE9XTiBBUyBwcmljZSA8IFBSRVYocHJpY2UpCispOworCistLSB1c2luZyBORVhUCitTRUxFQ1Qg Y29tcGFueSwgdGRhdGUsIHByaWNlLCBmaXJzdF92YWx1ZShwcmljZSkgT1ZFUiB3LCBsYXN0X3Zh bHVlKHByaWNlKSBPVkVSIHcKKyBGUk9NIHN0b2NrCisgV0lORE9XIHcgQVMgKAorIFBBUlRJVElP TiBCWSBjb21wYW55CisgUk9XUyBCRVRXRUVOIENVUlJFTlQgUk9XIEFORCBVTkJPVU5ERUQgRk9M TE9XSU5HCisgSU5JVElBTAorIFBBVFRFUk4gKFNUQVJUIFVQRE9XTikKKyBERUZJTkUKKyAgU1RB UlQgQVMgVFJVRSwKKyAgVVBET1dOIEFTIHByaWNlID4gUFJFVihwcmljZSkgQU5EIHByaWNlID4g TkVYVChwcmljZSkKKyk7CisKKy0tIHVzaW5nIEFGVEVSIE1BVENIIFNLSVAgVE8gTkVYVCBST1cK K1NFTEVDVCBjb21wYW55LCB0ZGF0ZSwgcHJpY2UsIGZpcnN0X3ZhbHVlKHByaWNlKSBPVkVSIHcs IGxhc3RfdmFsdWUocHJpY2UpIE9WRVIgdworIEZST00gc3RvY2sKKyBXSU5ET1cgdyBBUyAoCisg UEFSVElUSU9OIEJZIGNvbXBhbnkKKyBST1dTIEJFVFdFRU4gQ1VSUkVOVCBST1cgQU5EIFVOQk9V TkRFRCBGT0xMT1dJTkcKKyBBRlRFUiBNQVRDSCBTS0lQIFRPIE5FWFQgUk9XCisgSU5JVElBTAor IFBBVFRFUk4gKFNUQVJUIFVQRE9XTikKKyBERUZJTkUKKyAgU1RBUlQgQVMgVFJVRSwKKyAgVVBE T1dOIEFTIHByaWNlID4gUFJFVihwcmljZSkgQU5EIHByaWNlID4gTkVYVChwcmljZSkKKyk7CisK Ky0tIG1hdGNoIGV2ZXJ5dGhpbmcKKworU0VMRUNUIGNvbXBhbnksIHRkYXRlLCBwcmljZSwgZmly c3RfdmFsdWUocHJpY2UpIE9WRVIgdywgbGFzdF92YWx1ZShwcmljZSkgT1ZFUiB3CisgRlJPTSBz dG9jaworIFdJTkRPVyB3IEFTICgKKyBQQVJUSVRJT04gQlkgY29tcGFueQorIE9SREVSIEJZIHRk YXRlCisgUk9XUyBCRVRXRUVOIENVUlJFTlQgUk9XIEFORCBVTkJPVU5ERUQgRk9MTE9XSU5HCisg QUZURVIgTUFUQ0ggU0tJUCBQQVNUIExBU1QgUk9XCisgSU5JVElBTAorIFBBVFRFUk4gKEErKQor IERFRklORQorICBBIEFTIFRSVUUKKyk7CisKKy0tIGJhY2t0cmFja2luZyB3aXRoIHJlY2xhc3Np ZmljYXRpb24gb2Ygcm93cworLS0gdXNpbmcgQUZURVIgTUFUQ0ggU0tJUCBQQVNUIExBU1QgUk9X CitTRUxFQ1QgY29tcGFueSwgdGRhdGUsIHByaWNlLCBmaXJzdF92YWx1ZSh0ZGF0ZSkgT1ZFUiB3 LCBsYXN0X3ZhbHVlKHRkYXRlKSBPVkVSIHcKKyBGUk9NIHN0b2NrCisgV0lORE9XIHcgQVMgKAor IFBBUlRJVElPTiBCWSBjb21wYW55CisgT1JERVIgQlkgdGRhdGUKKyBST1dTIEJFVFdFRU4gQ1VS UkVOVCBST1cgQU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcKKyBBRlRFUiBNQVRDSCBTS0lQIFBBU1Qg TEFTVCBST1cKKyBJTklUSUFMCisgUEFUVEVSTiAoQSsgQispCisgREVGSU5FCisgIEEgQVMgcHJp Y2UgPiAxMDAsCisgIEIgQVMgcHJpY2UgPiAxMDAKKyk7CisKKy0tIGJhY2t0cmFja2luZyB3aXRo IHJlY2xhc3NpZmljYXRpb24gb2Ygcm93cworLS0gdXNpbmcgQUZURVIgTUFUQ0ggU0tJUCBUTyBO RVhUIFJPVworU0VMRUNUIGNvbXBhbnksIHRkYXRlLCBwcmljZSwgZmlyc3RfdmFsdWUodGRhdGUp IE9WRVIgdywgbGFzdF92YWx1ZSh0ZGF0ZSkgT1ZFUiB3CisgRlJPTSBzdG9jaworIFdJTkRPVyB3 IEFTICgKKyBQQVJUSVRJT04gQlkgY29tcGFueQorIE9SREVSIEJZIHRkYXRlCisgUk9XUyBCRVRX RUVOIENVUlJFTlQgUk9XIEFORCBVTkJPVU5ERUQgRk9MTE9XSU5HCisgQUZURVIgTUFUQ0ggU0tJ UCBUTyBORVhUIFJPVworIElOSVRJQUwKKyBQQVRURVJOIChBKyBCKykKKyBERUZJTkUKKyAgQSBB UyBwcmljZSA+IDEwMCwKKyAgQiBBUyBwcmljZSA+IDEwMAorKTsKKworLS0gUk9XUyBCRVRXRUVO IENVUlJFTlQgUk9XIEFORCBvZmZzZXQgRk9MTE9XSU5HCitTRUxFQ1QgY29tcGFueSwgdGRhdGUs IHByaWNlLCBmaXJzdF92YWx1ZSh0ZGF0ZSkgT1ZFUiB3LCBsYXN0X3ZhbHVlKHRkYXRlKSBPVkVS IHcsCisgY291bnQoKikgT1ZFUiB3CisgRlJPTSBzdG9jaworIFdJTkRPVyB3IEFTICgKKyBQQVJU SVRJT04gQlkgY29tcGFueQorIE9SREVSIEJZIHRkYXRlCisgUk9XUyBCRVRXRUVOIENVUlJFTlQg Uk9XIEFORCAyIEZPTExPV0lORworIEFGVEVSIE1BVENIIFNLSVAgUEFTVCBMQVNUIFJPVworIFBB VFRFUk4gKFNUQVJUIFVQKyBET1dOKykKKyBERUZJTkUKKyAgU1RBUlQgQVMgVFJVRSwKKyAgVVAg QVMgcHJpY2UgPiBQUkVWKHByaWNlKSwKKyAgRE9XTiBBUyBwcmljZSA8IFBSRVYocHJpY2UpCisp OworCistLQorLS0gQWdncmVnYXRlcworLS0KKworLS0gdXNpbmcgQUZURVIgTUFUQ0ggU0tJUCBQ QVNUIExBU1QgUk9XCitTRUxFQ1QgY29tcGFueSwgdGRhdGUsIHByaWNlLAorIGZpcnN0X3ZhbHVl KHByaWNlKSBPVkVSIHcsCisgbGFzdF92YWx1ZShwcmljZSkgT1ZFUiB3LAorIG1heChwcmljZSkg T1ZFUiB3LAorIG1pbihwcmljZSkgT1ZFUiB3LAorIHN1bShwcmljZSkgT1ZFUiB3LAorIGF2Zyhw cmljZSkgT1ZFUiB3LAorIGNvdW50KHByaWNlKSBPVkVSIHcKK0ZST00gc3RvY2sKK1dJTkRPVyB3 IEFTICgKK1BBUlRJVElPTiBCWSBjb21wYW55CitST1dTIEJFVFdFRU4gQ1VSUkVOVCBST1cgQU5E IFVOQk9VTkRFRCBGT0xMT1dJTkcKK0FGVEVSIE1BVENIIFNLSVAgUEFTVCBMQVNUIFJPVworSU5J VElBTAorUEFUVEVSTiAoU1RBUlQgVVArIERPV04rKQorREVGSU5FCitTVEFSVCBBUyBUUlVFLAor VVAgQVMgcHJpY2UgPiBQUkVWKHByaWNlKSwKK0RPV04gQVMgcHJpY2UgPCBQUkVWKHByaWNlKQor KTsKKworLS0gdXNpbmcgQUZURVIgTUFUQ0ggU0tJUCBUTyBORVhUIFJPVworU0VMRUNUIGNvbXBh bnksIHRkYXRlLCBwcmljZSwKKyBmaXJzdF92YWx1ZShwcmljZSkgT1ZFUiB3LAorIGxhc3RfdmFs dWUocHJpY2UpIE9WRVIgdywKKyBtYXgocHJpY2UpIE9WRVIgdywKKyBtaW4ocHJpY2UpIE9WRVIg dywKKyBzdW0ocHJpY2UpIE9WRVIgdywKKyBhdmcocHJpY2UpIE9WRVIgdywKKyBjb3VudChwcmlj ZSkgT1ZFUiB3CitGUk9NIHN0b2NrCitXSU5ET1cgdyBBUyAoCitQQVJUSVRJT04gQlkgY29tcGFu eQorUk9XUyBCRVRXRUVOIENVUlJFTlQgUk9XIEFORCBVTkJPVU5ERUQgRk9MTE9XSU5HCitBRlRF UiBNQVRDSCBTS0lQIFRPIE5FWFQgUk9XCitJTklUSUFMCitQQVRURVJOIChTVEFSVCBVUCsgRE9X TispCitERUZJTkUKK1NUQVJUIEFTIFRSVUUsCitVUCBBUyBwcmljZSA+IFBSRVYocHJpY2UpLAor RE9XTiBBUyBwcmljZSA8IFBSRVYocHJpY2UpCispOworCistLSBKT0lOIGNhc2UKK0NSRUFURSBU RU1QIFRBQkxFIHQxIChpIGludCwgdjEgaW50KTsKK0NSRUFURSBURU1QIFRBQkxFIHQyIChqIGlu dCwgdjIgaW50KTsKK0lOU0VSVCBJTlRPIHQxIFZBTFVFUygxLDEwKTsKK0lOU0VSVCBJTlRPIHQx IFZBTFVFUygxLDExKTsKK0lOU0VSVCBJTlRPIHQxIFZBTFVFUygxLDEyKTsKK0lOU0VSVCBJTlRP IHQyIFZBTFVFUygyLDEwKTsKK0lOU0VSVCBJTlRPIHQyIFZBTFVFUygyLDExKTsKK0lOU0VSVCBJ TlRPIHQyIFZBTFVFUygyLDEyKTsKKworU0VMRUNUICogRlJPTSB0MSwgdDIgV0hFUkUgdDEudjEg PD0gMTEgQU5EIHQyLnYyIDw9IDExOworCitTRUxFQ1QgKiwgY291bnQoKikgT1ZFUiB3IEZST00g dDEsIHQyCitXSU5ET1cgdyBBUyAoCisgUEFSVElUSU9OIEJZIHQxLmkKKyBST1dTIEJFVFdFRU4g Q1VSUkVOVCBST1cgQU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcKKyBJTklUSUFMCisgUEFUVEVSTiAo QSkKKyBERUZJTkUKKyBBIEFTIHYxIDw9IDExIEFORCB2MiA8PSAxMQorKTsKKworLS0gV0lUSCBj YXNlCitXSVRIIHdzdG9jayBBUyAoCisgIFNFTEVDVCAqIEZST00gc3RvY2sgV0hFUkUgdGRhdGUg PCAnMjAyMy0wNy0wOCcKKykKK1NFTEVDVCB0ZGF0ZSwgcHJpY2UsCitmaXJzdF92YWx1ZSh0ZGF0 ZSkgT1ZFUiB3LAorY291bnQoKikgT1ZFUiB3CisgRlJPTSB3c3RvY2sKKyBXSU5ET1cgdyBBUyAo CisgUEFSVElUSU9OIEJZIGNvbXBhbnkKKyBPUkRFUiBCWSB0ZGF0ZQorIFJPV1MgQkVUV0VFTiBD VVJSRU5UIFJPVyBBTkQgVU5CT1VOREVEIEZPTExPV0lORworIElOSVRJQUwKKyBQQVRURVJOIChT VEFSVCBVUCsgRE9XTispCisgREVGSU5FCisgIFNUQVJUIEFTIFRSVUUsCisgIFVQIEFTIHByaWNl ID4gUFJFVihwcmljZSksCisgIERPV04gQVMgcHJpY2UgPCBQUkVWKHByaWNlKQorKTsKKworLS0g UFJFViBoYXMgbXVsdGlwbGUgY29sdW1uIHJlZmVyZW5jZQorQ1JFQVRFIFRFTVAgVEFCTEUgcnBy MSAoaWQgSU5URUdFUiwgaSBTRVJJQUwsIGogSU5URUdFUik7CitJTlNFUlQgSU5UTyBycHIxKGlk LCBqKSBTRUxFQ1QgMSwgZyoyIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwKSBBUyBnOworU0VM RUNUIGlkLCBpLCBqLCBjb3VudCgqKSBPVkVSIHcKKyBGUk9NIHJwcjEKKyBXSU5ET1cgdyBBUyAo CisgUEFSVElUSU9OIEJZIGlkCisgT1JERVIgQlkgaQorIFJPV1MgQkVUV0VFTiBDVVJSRU5UIFJP VyBBTkQgVU5CT1VOREVEIEZPTExPV0lORworIEFGVEVSIE1BVENIIFNLSVAgUEFTVCBMQVNUIFJP VworIElOSVRJQUwKKyBQQVRURVJOIChTVEFSVCBDT05EKykKKyBERUZJTkUKKyAgU1RBUlQgQVMg VFJVRSwKKyAgQ09ORCBBUyBQUkVWKGkgKyBqICsgMSkgPCAxMAorKTsKKworLS0gU21va2UgdGVz dCBmb3IgbGFyZ2VyIHBhcnRpdGlvbnMuCitXSVRIIHMgQVMgKAorIFNFTEVDVCB2LCBjb3VudCgq KSBPVkVSIHcgQVMgYworIEZST00gKFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMSwgNTAwMCkgdikK KyBXSU5ET1cgdyBBUyAoCisgIFJPV1MgQkVUV0VFTiBDVVJSRU5UIFJPVyBBTkQgVU5CT1VOREVE IEZPTExPV0lORworICBBRlRFUiBNQVRDSCBTS0lQIFBBU1QgTEFTVCBST1cKKyAgSU5JVElBTAor ICBQQVRURVJOICggcisgKQorICBERUZJTkUgciBBUyBUUlVFCisgKQorKQorLS0gU2hvdWxkIGJl IGV4YWN0bHkgb25lIGxvbmcgbWF0Y2ggYWNyb3NzIGFsbCByb3dzLgorU0VMRUNUICogRlJPTSBz IFdIRVJFIGMgPiAwOworCitXSVRIIHMgQVMgKAorIFNFTEVDVCB2LCBjb3VudCgqKSBPVkVSIHcg QVMgYworIEZST00gKFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMSwgNTAwMCkgdikKKyBXSU5ET1cg dyBBUyAoCisgIFJPV1MgQkVUV0VFTiBDVVJSRU5UIFJPVyBBTkQgVU5CT1VOREVEIEZPTExPV0lO RworICBBRlRFUiBNQVRDSCBTS0lQIFBBU1QgTEFTVCBST1cKKyAgSU5JVElBTAorICBQQVRURVJO ICggciApCisgIERFRklORSByIEFTIFRSVUUKKyApCispCistLSBFdmVyeSByb3cgc2hvdWxkIGJl IGl0cyBvd24gbWF0Y2guCitTRUxFQ1QgY291bnQoKikgRlJPTSBzIFdIRVJFIGMgPiAwOworCist LSBWaWV3IGFuZCBwZ19nZXRfdmlld2RlZiB0ZXN0cy4KK0NSRUFURSBURU1QIFZJRVcgdl93aW5k b3cgQVMKK1NFTEVDVCBjb21wYW55LCB0ZGF0ZSwgcHJpY2UsIGZpcnN0X3ZhbHVlKHByaWNlKSBP VkVSIHcsIGxhc3RfdmFsdWUocHJpY2UpIE9WRVIgdywKKyBudGhfdmFsdWUodGRhdGUsIDIpIE9W RVIgdyBBUyBudGhfc2Vjb25kCisgRlJPTSBzdG9jaworIFdJTkRPVyB3IEFTICgKKyBQQVJUSVRJ T04gQlkgY29tcGFueQorIFJPV1MgQkVUV0VFTiBDVVJSRU5UIFJPVyBBTkQgVU5CT1VOREVEIEZP TExPV0lORworIElOSVRJQUwKKyBQQVRURVJOIChTVEFSVCBVUCsgRE9XTispCisgREVGSU5FCisg IFNUQVJUIEFTIFRSVUUsCisgIFVQIEFTIHByaWNlID4gUFJFVihwcmljZSksCisgIERPV04gQVMg cHJpY2UgPCBQUkVWKHByaWNlKQorKTsKKworU0VMRUNUICogRlJPTSB2X3dpbmRvdzsKK1NFTEVD VCBwZ19nZXRfdmlld2RlZigndl93aW5kb3cnKTsKKworLS0KKy0tIEVycm9yIGNhc2VzCistLQor CistLSByb3cgcGF0dGVybiBkZWZpbml0aW9uIHZhcmlhYmxlIG5hbWUgbXVzdCBub3QgYXBwZWFy IG1vcmUgdGhhbiBvbmNlCitTRUxFQ1QgY29tcGFueSwgdGRhdGUsIHByaWNlLCBmaXJzdF92YWx1 ZShwcmljZSkgT1ZFUiB3LCBsYXN0X3ZhbHVlKHByaWNlKSBPVkVSIHcKKyBGUk9NIHN0b2NrCisg V0lORE9XIHcgQVMgKAorIFBBUlRJVElPTiBCWSBjb21wYW55CisgT1JERVIgQlkgdGRhdGUKKyBS T1dTIEJFVFdFRU4gQ1VSUkVOVCBST1cgQU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcKKyBJTklUSUFM CisgUEFUVEVSTiAoU1RBUlQgVVArIERPV04rKQorIERFRklORQorICBTVEFSVCBBUyBUUlVFLAor ICBVUCBBUyBwcmljZSA+IFBSRVYocHJpY2UpLAorICBET1dOIEFTIHByaWNlIDwgUFJFVihwcmlj ZSksCisgIFVQIEFTIHByaWNlID4gUFJFVihwcmljZSkKKyk7CisKKy0tIHN1YnF1ZXJpZXMgaW4g REVGSU5FIGNsYXVzZSBhcmUgbm90IHN1cHBvcnRlZAorU0VMRUNUIGNvbXBhbnksIHRkYXRlLCBw cmljZSwgZmlyc3RfdmFsdWUocHJpY2UpIE9WRVIgdywgbGFzdF92YWx1ZShwcmljZSkgT1ZFUiB3 CisgRlJPTSBzdG9jaworIFdJTkRPVyB3IEFTICgKKyBQQVJUSVRJT04gQlkgY29tcGFueQorIE9S REVSIEJZIHRkYXRlCisgUk9XUyBCRVRXRUVOIENVUlJFTlQgUk9XIEFORCBVTkJPVU5ERUQgRk9M TE9XSU5HCisgSU5JVElBTAorIFBBVFRFUk4gKFNUQVJUIExPV1BSSUNFKQorIERFRklORQorICBT VEFSVCBBUyBUUlVFLAorICBMT1dQUklDRSBBUyBwcmljZSA8IChTRUxFQ1QgMTAwKQorKTsKKwor LS0gYWdncmVnYXRlcyBpbiBERUZJTkUgY2xhdXNlIGFyZSBub3Qgc3VwcG9ydGVkCitTRUxFQ1Qg Y29tcGFueSwgdGRhdGUsIHByaWNlLCBmaXJzdF92YWx1ZShwcmljZSkgT1ZFUiB3LCBsYXN0X3Zh bHVlKHByaWNlKSBPVkVSIHcKKyBGUk9NIHN0b2NrCisgV0lORE9XIHcgQVMgKAorIFBBUlRJVElP TiBCWSBjb21wYW55CisgT1JERVIgQlkgdGRhdGUKKyBST1dTIEJFVFdFRU4gQ1VSUkVOVCBST1cg QU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcKKyBJTklUSUFMCisgUEFUVEVSTiAoU1RBUlQgTE9XUFJJ Q0UpCisgREVGSU5FCisgIFNUQVJUIEFTIFRSVUUsCisgIExPV1BSSUNFIEFTIHByaWNlIDwgY291 bnQoKikKKyk7CisKKy0tIEZSQU1FIG11c3Qgc3RhcnQgYXQgY3VycmVudCByb3cgd2hlbiByb3cg cGF0dHRlcm4gcmVjb2duaXRpb24gaXMgdXNlZAorU0VMRUNUIGNvbXBhbnksIHRkYXRlLCBwcmlj ZSwgZmlyc3RfdmFsdWUocHJpY2UpIE9WRVIgdywgbGFzdF92YWx1ZShwcmljZSkgT1ZFUiB3Cisg RlJPTSBzdG9jaworIFdJTkRPVyB3IEFTICgKKyBQQVJUSVRJT04gQlkgY29tcGFueQorIE9SREVS IEJZIHRkYXRlCisgUk9XUyBCRVRXRUVOIFVOQk9VTkRFRCBQUkVDRURJTkcgQU5EIFVOQk9VTkRF RCBGT0xMT1dJTkcKKyBJTklUSUFMCisgUEFUVEVSTiAoU1RBUlQgVVArIERPV04rKQorIERFRklO RQorICBTVEFSVCBBUyBUUlVFLAorICBVUCBBUyBwcmljZSA+IFBSRVYocHJpY2UpLAorICBET1dO IEFTIHByaWNlIDwgUFJFVihwcmljZSkKKyk7CisKKy0tIFNFRUsgaXMgbm90IHN1cHBvcnRlZAor U0VMRUNUIGNvbXBhbnksIHRkYXRlLCBwcmljZSwgZmlyc3RfdmFsdWUocHJpY2UpIE9WRVIgdywg bGFzdF92YWx1ZShwcmljZSkgT1ZFUiB3CisgRlJPTSBzdG9jaworIFdJTkRPVyB3IEFTICgKKyBQ QVJUSVRJT04gQlkgY29tcGFueQorIE9SREVSIEJZIHRkYXRlCisgUk9XUyBCRVRXRUVOIENVUlJF TlQgUk9XIEFORCBVTkJPVU5ERUQgRk9MTE9XSU5HCisgQUZURVIgTUFUQ0ggU0tJUCBUTyBORVhU IFJPVworIFNFRUsKKyBQQVRURVJOIChTVEFSVCBVUCsgRE9XTispCisgREVGSU5FCisgIFNUQVJU IEFTIFRSVUUsCisgIFVQIEFTIHByaWNlID4gUFJFVihwcmljZSksCisgIERPV04gQVMgcHJpY2Ug PCBQUkVWKHByaWNlKQorKTsKKworLS0gUFJFVidzIGFyZ3VtZW50IG11c3QgaGF2ZSBhdCBsZWFz dCAxIGNvbHVtbiByZWZlcmVuY2UKK1NFTEVDVCBjb21wYW55LCB0ZGF0ZSwgcHJpY2UsIGZpcnN0 X3ZhbHVlKHByaWNlKSBPVkVSIHcsIGxhc3RfdmFsdWUocHJpY2UpIE9WRVIgdworIEZST00gc3Rv Y2sKKyBXSU5ET1cgdyBBUyAoCisgUEFSVElUSU9OIEJZIGNvbXBhbnkKKyBPUkRFUiBCWSB0ZGF0 ZQorIFJPV1MgQkVUV0VFTiBDVVJSRU5UIFJPVyBBTkQgVU5CT1VOREVEIEZPTExPV0lORworIEFG VEVSIE1BVENIIFNLSVAgVE8gTkVYVCBST1cKKyBJTklUSUFMCisgUEFUVEVSTiAoU1RBUlQgVVAr IERPV04rKQorIERFRklORQorICBTVEFSVCBBUyBUUlVFLAorICBVUCBBUyBwcmljZSA+IFBSRVYo MSksCisgIERPV04gQVMgcHJpY2UgPCBQUkVWKDEpCispOwotLSAKMi4yNS4xCgo= ----Next_Part(Sat_Aug_16_17_45_52_2025_123)-- Content-Type: Application/Octet-Stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v32-0008-Row-pattern-recognition-patch-typedefs.list.patch" RnJvbSA0YjhkYWMyMGNmYjExMjgxMWJmYmVkNjZhZjdkNDBhM2U1MWVkNjc4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYXRzdW8gSXNoaWkgPGlzaGlpQHBvc3RncmVzcWwub3JnPgpE YXRlOiBTYXQsIDE2IEF1ZyAyMDI1IDE3OjMzOjMzICswOTAwClN1YmplY3Q6IFtQQVRDSCB2MzIg OC85XSBSb3cgcGF0dGVybiByZWNvZ25pdGlvbiBwYXRjaCAodHlwZWRlZnMubGlzdCkuCgotLS0K IHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IHwgNiArKysrKysKIDEgZmlsZSBjaGFu Z2VkLCA2IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IGU2ZjJl OTNiMmQ2Li42MmMxYTA2NTYzYSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTE3NDQs NiArMTc0NCw3IEBAIE5hbWVkTFdMb2NrVHJhbmNoZVJlcXVlc3QKIE5hbWVkVHVwbGVzdG9yZVNj YW4KIE5hbWVkVHVwbGVzdG9yZVNjYW5TdGF0ZQogTmFtZXNwYWNlSW5mbworTmF2aWdhdGlvbklu Zm8KIE5lc3RMb29wCiBOZXN0TG9vcFBhcmFtCiBOZXN0TG9vcFN0YXRlCkBAIC0yNDA2LDYgKzI0 MDcsOCBAQCBSSV9Db21wYXJlS2V5CiBSSV9Db25zdHJhaW50SW5mbwogUklfUXVlcnlIYXNoRW50 cnkKIFJJX1F1ZXJ5S2V5CitSUENvbW1vblN5bnRheAorUlBTa2lwVG8KIFJURUtpbmQKIFJURVBl cm1pc3Npb25JbmZvCiBSV0NvbmZsaWN0CkBAIC0yNzc3LDYgKzI3ODAsNyBAQCBTaW1wbGVTdHJp bmdMaXN0CiBTaW1wbGVTdHJpbmdMaXN0Q2VsbAogU2luZ2xlQm91bmRTb3J0SXRlbQogU2l6ZQor U2tpcENvbnRleHQKIFNraXBQYWdlcwogU2tpcFN1cHBvcnQKIFNraXBTdXBwb3J0SW5jRGVjCkBA IC0yODcxLDYgKzI4NzUsNyBAQCBTdHJlYW1TdG9wUmVhc29uCiBTdHJpbmcKIFN0cmluZ0luZm8K IFN0cmluZ0luZm9EYXRhCitTdHJpbmdTZXQKIFN0cmlwbnVsbFN0YXRlCiBTdWJMaW5rCiBTdWJM aW5rVHlwZQpAQCAtMzIwNyw2ICszMjEyLDcgQEAgVmFyU3RyaW5nCiBWYXJTdHJpbmdTb3J0U3Vw cG9ydAogVmFyaWFibGUKIFZhcmlhYmxlQXNzaWduSG9vaworVmFyaWFibGVQb3MKIFZhcmlhYmxl U2V0S2luZAogVmFyaWFibGVTZXRTdG10CiBWYXJpYWJsZVNob3dTdG10Ci0tIAoyLjI1LjEKCg== ----Next_Part(Sat_Aug_16_17_45_52_2025_123)-- Content-Type: Application/Octet-Stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v32-0009-Allow-to-print-raw-parse-tree.patch" RnJvbSA0Y2RlOGJjOTM4ZTIxYjJkNjc4ZmExYzVjYWU4MTQ5MzhiMzk5Mzc1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYXRzdW8gSXNoaWkgPGlzaGlpQHBvc3RncmVzcWwub3JnPgpE YXRlOiBTYXQsIDE2IEF1ZyAyMDI1IDE3OjMzOjMzICswOTAwClN1YmplY3Q6IFtQQVRDSCB2MzIg OS85XSBBbGxvdyB0byBwcmludCByYXcgcGFyc2UgdHJlZS4KCi0tLQogc3JjL2JhY2tlbmQvdGNv cC9wb3N0Z3Jlcy5jIHwgNCArKysrCiAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jIGIvc3JjL2JhY2tlbmQvdGNv cC9wb3N0Z3Jlcy5jCmluZGV4IDBjZWNkNDY0OTAyLi5hYzQ0ZDEzMDMyZSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdy ZXMuYwpAQCAtNjQ3LDYgKzY0NywxMCBAQCBwZ19wYXJzZV9xdWVyeShjb25zdCBjaGFyICpxdWVy eV9zdHJpbmcpCiAKICNlbmRpZgkJCQkJCQkvKiBERUJVR19OT0RFX1RFU1RTX0VOQUJMRUQgKi8K IAorCWlmIChEZWJ1Z19wcmludF9wYXJzZSkKKwkJZWxvZ19ub2RlX2Rpc3BsYXkoTE9HLCAicmF3 IHBhcnNlIHRyZWUiLCByYXdfcGFyc2V0cmVlX2xpc3QsCisJCQkJCQkgIERlYnVnX3ByZXR0eV9w cmludCk7CisKIAlUUkFDRV9QT1NUR1JFU1FMX1FVRVJZX1BBUlNFX0RPTkUocXVlcnlfc3RyaW5n KTsKIAogCXJldHVybiByYXdfcGFyc2V0cmVlX2xpc3Q7Ci0tIAoyLjI1LjEKCg== ----Next_Part(Sat_Aug_16_17_45_52_2025_123)----