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 1uYeYJ-009CkU-0S for pgsql-hackers@arkaria.postgresql.org; Mon, 07 Jul 2025 05:38:07 +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 1uYeYE-00H7s0-Pj for pgsql-hackers@arkaria.postgresql.org; Mon, 07 Jul 2025 05:38:03 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uYeYE-00H7rr-7I for pgsql-hackers@lists.postgresql.org; Mon, 07 Jul 2025 05:38:03 +0000 Received: from meldrar.postgresql.org ([2a02:c0:301:0:ffff::31]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1uYeYB-006Aza-2B for pgsql-hackers@postgresql.org; Mon, 07 Jul 2025 05:38:02 +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=AX1zqaT2h8G+tUYlb4vTihqANVYBvUmsFoLFkzN4ong=; b=Om3nkBP0qjc6l9gCD1slgdsI3c ck8+Qg2T5BDfBeHlBsk5915UIdxc+PBUiJ8sVaZMmmwvbe1O70leh6fEBRZCTcMlZ0GrJcuL4J2WH VbInTbWp+vKWTnUBPUXdYkWpq7ic7MZHSnv9LU82Si3D+xsxlWFbNr3d8S2DDlgm9BD7CggHb84dx XDl6GFseXD/oy4SbDfQKuovRHbEkNNpTpiXuNP1nYwsn4qErBDi0SIsnjBgyow6AyMlT8jkXTDtxX mIv/q60GxZOvdj7/P2lTAnVNrP4vIzDGo3f7p4b2dFLJNTPAs6oMWXajI5RKHJlimy4MfvHT4WWiF Xp6z7iEw==; Received: from [2409:11:4120:300:3f07:532f:9f60:3323] (helo=localhost) by meldrar.postgresql.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (Exim 4.96) (envelope-from ) id 1uYeY0-005pSP-2G; Mon, 07 Jul 2025 05:37:53 +0000 Date: Mon, 07 Jul 2025 14:37:37 +0900 (JST) Message-Id: <20250707.143737.542330111731967700.ishii@postgresql.org> To: krasiyan@gmail.com, ojford@gmail.com, tgl@sss.pgh.pa.us, vik@postgresfriends.org, andrew@tao11.riddles.org.uk, david@fetter.org Cc: pgsql-hackers@postgresql.org Subject: Re: Add RESPECT/IGNORE NULLS and FROM FIRST/LAST options From: Tatsuo Ishii In-Reply-To: <20250630.142556.158881195489030489.ishii@postgresql.org> References: <20250619.152111.77843597600729081.ishii@postgresql.org> <20250625.161903.68476237519416014.ishii@postgresql.org> <20250630.142556.158881195489030489.ishii@postgresql.org> X-Mailer: Mew version 6.8 on Emacs 26.3 Mime-Version: 1.0 Content-Type: Multipart/Mixed; boundary="--Next_Part(Mon_Jul__7_14_37_37_2025_529)--" Content-Transfer-Encoding: 7bit X-Host-Lookup-Failed: Reverse DNS lookup failed for 2409:11:4120:300:3f07:532f:9f60:3323 (failed) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk ----Next_Part(Mon_Jul__7_14_37_37_2025_529)-- Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Attached is the v16 patch. In this patch I have changed row_is_in_frame() API from: static int row_is_in_frame(WindowAggState *winstate, int64 pos, TupleTableSlot *slot); to: static int row_is_in_frame(WindowObject winobj, int64 pos, TupleTableSlot *slot, bool fetch_tuple); The function is used to decide whether a row specified by pos is in a frame or not. Previously we needed to always pass "slot" parameter which is the row in question, fetched by window_gettupleslot. If IGNORE NULLS option is not passed to window functions, this is fine because they need to return the row anyway. However if IGNORE NULLS specified, we need to throw away null rows until we find the non null row requested by the caller. In reality, not in all window frames it is required to pass a row to row_is_in_frame: only when specific frame options are specified. For example RANGE or GROUP options plus CURRENT ROW frame end option. In previous patch, I explicitly checked these frame options before calling row_is_in_frame. However I dislike the way because it's a layer abstraction violation. So in this patch I added "fetch_tuple" option to row_is_in_frame so that it fetches row itself when necessary. A caller now don't need to fetch the row to pass if fetch_tuple is false. This way, not only we can avoid the layer violation problem, but performance is enhanced because tuple is fetched only when it's necessary. Note that now the first argument of row_is_in_frame has been changed from WindowAggState to WindowObject so that row_is_in_frame can call window_gettupleslot inside. Best regards, -- Tatsuo Ishii SRA OSS K.K. English: http://www.sraoss.co.jp/index_en/ Japanese:http://www.sraoss.co.jp ----Next_Part(Mon_Jul__7_14_37_37_2025_529)-- Content-Type: Application/Octet-Stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v16-0001-Add-IGNORE-NULLS-RESPECT-NULLS-option-to-Window-.patch" RnJvbSA1ODI1MDUzZDE1OWU3N2ZjNDc1YzAyMDFlZWEyN2IyMzE0NGZjZDM3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYXRzdW8gSXNoaWkgPGlzaGlpQHBvc3RncmVzcWwub3JnPgpE YXRlOiBNb24sIDcgSnVsIDIwMjUgMTQ6MTI6MTUgKzA5MDAKU3ViamVjdDogW1BBVENIIHYxNl0g QWRkIElHTk9SRSBOVUxMUy9SRVNQRUNUIE5VTExTIG9wdGlvbiB0byBXaW5kb3cKIGZ1bmN0aW9u cy4KCkFkZCBJR05PUkUgTlVMTFMvUkVTUEVDVCBOVUxMUyBvcHRpb24gdG8gbGVhZCwgbGFnLCBm aXJzdF92YWx1ZSwKbGFzdF92YWx1ZSBhbmQgbnRoX3ZhbHVlLgotLS0KIGRvYy9zcmMvc2dtbC9m dW5jLnNnbWwgICAgICAgICAgICAgICB8ICAzOCArKy0KIGRvYy9zcmMvc2dtbC9zeW50YXguc2dt bCAgICAgICAgICAgICB8ICAxMCArLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9zcWxfZmVhdHVyZXMu dHh0IHwgICAyICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlV2luZG93QWdnLmMgfCA0NTQg KysrKysrKysrKysrKysrKysrKysrKysrLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9j bGF1c2VzLmMgfCAgIDEgKwogc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueSAgICAgICAgICAgIHwg IDE5ICstCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZnVuYy5jICAgICAgfCAgIDkgKwogc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jICAgIHwgICA3ICstCiBzcmMvYmFja2VuZC91 dGlscy9hZHQvd2luZG93ZnVuY3MuYyAgfCAgMTAgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vu b2Rlcy5oICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oICAgICAg ICB8ICAxMyArCiBzcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmggICAgICAgICAgfCAgIDIgKwog c3JjL2luY2x1ZGUvd2luZG93YXBpLmggICAgICAgICAgICAgIHwgICA2ICsKIHNyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvd2luZG93Lm91dCB8IDMxMSArKysrKysrKysrKysrKysrKysKIHNyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL3dpbmRvdy5zcWwgICAgICB8IDE0NyArKysrKysrKysKIDE1IGZpbGVz IGNoYW5nZWQsIDk2OSBpbnNlcnRpb25zKCspLCA2MSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sIGIvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbAppbmRleCA4 MTBiMmI1MGYwZC4uNWYzZDllODVkNGIgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9mdW5jLnNn bWwKKysrIGIvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbApAQCAtMjM1NDMsNyArMjM1NDMsNyBAQCBT RUxFQ1QgY291bnQoKikgRlJPTSBzb21ldGFibGU7CiAgICAgICAgIDwvaW5kZXh0ZXJtPgogICAg ICAgICA8ZnVuY3Rpb24+bGFnPC9mdW5jdGlvbj4gKCA8cGFyYW1ldGVyPnZhbHVlPC9wYXJhbWV0 ZXI+IDx0eXBlPmFueWNvbXBhdGlibGU8L3R5cGU+CiAgICAgICAgICAgPG9wdGlvbmFsPiwgPHBh cmFtZXRlcj5vZmZzZXQ8L3BhcmFtZXRlcj4gPHR5cGU+aW50ZWdlcjwvdHlwZT4KLSAgICAgICAg ICA8b3B0aW9uYWw+LCA8cGFyYW1ldGVyPmRlZmF1bHQ8L3BhcmFtZXRlcj4gPHR5cGU+YW55Y29t cGF0aWJsZTwvdHlwZT4gPC9vcHRpb25hbD48L29wdGlvbmFsPiApCisgICAgICAgICAgPG9wdGlv bmFsPiwgPHBhcmFtZXRlcj5kZWZhdWx0PC9wYXJhbWV0ZXI+IDx0eXBlPmFueWNvbXBhdGlibGU8 L3R5cGU+IDwvb3B0aW9uYWw+PC9vcHRpb25hbD4gKSA8b3B0aW9uYWw+IDxwYXJhbWV0ZXI+bnVs bCB0cmVhdG1lbnQ8L3BhcmFtZXRlcj4gPC9vcHRpb25hbD4KICAgICAgICAgPHJldHVybnZhbHVl PmFueWNvbXBhdGlibGU8L3JldHVybnZhbHVlPgogICAgICAgIDwvcGFyYT4KICAgICAgICA8cGFy YT4KQEAgLTIzNTY4LDcgKzIzNTY4LDcgQEAgU0VMRUNUIGNvdW50KCopIEZST00gc29tZXRhYmxl OwogICAgICAgICA8L2luZGV4dGVybT4KICAgICAgICAgPGZ1bmN0aW9uPmxlYWQ8L2Z1bmN0aW9u PiAoIDxwYXJhbWV0ZXI+dmFsdWU8L3BhcmFtZXRlcj4gPHR5cGU+YW55Y29tcGF0aWJsZTwvdHlw ZT4KICAgICAgICAgICA8b3B0aW9uYWw+LCA8cGFyYW1ldGVyPm9mZnNldDwvcGFyYW1ldGVyPiA8 dHlwZT5pbnRlZ2VyPC90eXBlPgotICAgICAgICAgIDxvcHRpb25hbD4sIDxwYXJhbWV0ZXI+ZGVm YXVsdDwvcGFyYW1ldGVyPiA8dHlwZT5hbnljb21wYXRpYmxlPC90eXBlPiA8L29wdGlvbmFsPjwv b3B0aW9uYWw+ICkKKyAgICAgICAgICA8b3B0aW9uYWw+LCA8cGFyYW1ldGVyPmRlZmF1bHQ8L3Bh cmFtZXRlcj4gPHR5cGU+YW55Y29tcGF0aWJsZTwvdHlwZT4gPC9vcHRpb25hbD48L29wdGlvbmFs PiApIDxvcHRpb25hbD4gPHBhcmFtZXRlcj5udWxsIHRyZWF0bWVudDwvcGFyYW1ldGVyPiA8L29w dGlvbmFsPgogICAgICAgICA8cmV0dXJudmFsdWU+YW55Y29tcGF0aWJsZTwvcmV0dXJudmFsdWU+ CiAgICAgICAgPC9wYXJhPgogICAgICAgIDxwYXJhPgpAQCAtMjM1OTEsNyArMjM1OTEsNyBAQCBT RUxFQ1QgY291bnQoKikgRlJPTSBzb21ldGFibGU7CiAgICAgICAgIDxpbmRleHRlcm0+CiAgICAg ICAgICA8cHJpbWFyeT5maXJzdF92YWx1ZTwvcHJpbWFyeT4KICAgICAgICAgPC9pbmRleHRlcm0+ Ci0gICAgICAgIDxmdW5jdGlvbj5maXJzdF92YWx1ZTwvZnVuY3Rpb24+ICggPHBhcmFtZXRlcj52 YWx1ZTwvcGFyYW1ldGVyPiA8dHlwZT5hbnllbGVtZW50PC90eXBlPiApCisgICAgICAgIDxmdW5j dGlvbj5maXJzdF92YWx1ZTwvZnVuY3Rpb24+ICggPHBhcmFtZXRlcj52YWx1ZTwvcGFyYW1ldGVy PiA8dHlwZT5hbnllbGVtZW50PC90eXBlPiApIDxvcHRpb25hbD4gPHBhcmFtZXRlcj5udWxsIHRy ZWF0bWVudDwvcGFyYW1ldGVyPiA8L29wdGlvbmFsPgogICAgICAgICA8cmV0dXJudmFsdWU+YW55 ZWxlbWVudDwvcmV0dXJudmFsdWU+CiAgICAgICAgPC9wYXJhPgogICAgICAgIDxwYXJhPgpAQCAt MjM2MDUsNyArMjM2MDUsNyBAQCBTRUxFQ1QgY291bnQoKikgRlJPTSBzb21ldGFibGU7CiAgICAg ICAgIDxpbmRleHRlcm0+CiAgICAgICAgICA8cHJpbWFyeT5sYXN0X3ZhbHVlPC9wcmltYXJ5Pgog ICAgICAgICA8L2luZGV4dGVybT4KLSAgICAgICAgPGZ1bmN0aW9uPmxhc3RfdmFsdWU8L2Z1bmN0 aW9uPiAoIDxwYXJhbWV0ZXI+dmFsdWU8L3BhcmFtZXRlcj4gPHR5cGU+YW55ZWxlbWVudDwvdHlw ZT4gKQorICAgICAgICA8ZnVuY3Rpb24+bGFzdF92YWx1ZTwvZnVuY3Rpb24+ICggPHBhcmFtZXRl cj52YWx1ZTwvcGFyYW1ldGVyPiA8dHlwZT5hbnllbGVtZW50PC90eXBlPiApIDxvcHRpb25hbD4g PHBhcmFtZXRlcj5udWxsIHRyZWF0bWVudDwvcGFyYW1ldGVyPiA8L29wdGlvbmFsPgogICAgICAg ICA8cmV0dXJudmFsdWU+YW55ZWxlbWVudDwvcmV0dXJudmFsdWU+CiAgICAgICAgPC9wYXJhPgog ICAgICAgIDxwYXJhPgpAQCAtMjM2MTksNyArMjM2MTksNyBAQCBTRUxFQ1QgY291bnQoKikgRlJP TSBzb21ldGFibGU7CiAgICAgICAgIDxpbmRleHRlcm0+CiAgICAgICAgICA8cHJpbWFyeT5udGhf dmFsdWU8L3ByaW1hcnk+CiAgICAgICAgIDwvaW5kZXh0ZXJtPgotICAgICAgICA8ZnVuY3Rpb24+ bnRoX3ZhbHVlPC9mdW5jdGlvbj4gKCA8cGFyYW1ldGVyPnZhbHVlPC9wYXJhbWV0ZXI+IDx0eXBl PmFueWVsZW1lbnQ8L3R5cGU+LCA8cGFyYW1ldGVyPm48L3BhcmFtZXRlcj4gPHR5cGU+aW50ZWdl cjwvdHlwZT4gKQorICAgICAgICA8ZnVuY3Rpb24+bnRoX3ZhbHVlPC9mdW5jdGlvbj4gKCA8cGFy YW1ldGVyPnZhbHVlPC9wYXJhbWV0ZXI+IDx0eXBlPmFueWVsZW1lbnQ8L3R5cGU+LCA8cGFyYW1l dGVyPm48L3BhcmFtZXRlcj4gPHR5cGU+aW50ZWdlcjwvdHlwZT4gKSA8b3B0aW9uYWw+IDxwYXJh bWV0ZXI+bnVsbCB0cmVhdG1lbnQ8L3BhcmFtZXRlcj4gPC9vcHRpb25hbD4KICAgICAgICAgPHJl dHVybnZhbHVlPmFueWVsZW1lbnQ8L3JldHVybnZhbHVlPgogICAgICAgIDwvcGFyYT4KICAgICAg ICA8cGFyYT4KQEAgLTIzNjY4LDE4ICsyMzY2OCwyNiBAQCBTRUxFQ1QgY291bnQoKikgRlJPTSBz b21ldGFibGU7CiAgICBPdGhlciBmcmFtZSBzcGVjaWZpY2F0aW9ucyBjYW4gYmUgdXNlZCB0byBv YnRhaW4gb3RoZXIgZWZmZWN0cy4KICAgPC9wYXJhPgogCisgIDxwYXJhPgorICAgVGhlIDxsaXRl cmFsPm51bGwgdHJlYXRtZW50PC9saXRlcmFsPiBvcHRpb24gbXVzdCBiZSBvbmUgb2Y6Cis8c3lu b3BzaXM+CisgIFJFU1BFQ1QgTlVMTFMKKyAgSUdOT1JFIE5VTExTCis8L3N5bm9wc2lzPgorICAg SWYgdW5zcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGlzIDxsaXRlcmFsPlJFU1BFQ1QgTlVMTFM8L2xp dGVyYWw+IHdoaWNoIGluY2x1ZGVzIE5VTEwKKyAgIHZhbHVlcyBpbiBhbnkgcmVzdWx0IGNhbGN1 bGF0aW9uLiA8bGl0ZXJhbD5JR05PUkUgTlVMTFM8L2xpdGVyYWw+IGlnbm9yZXMgTlVMTCB2YWx1 ZXMuCisgICBUaGlzIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgZm9yIHRoZSBmb2xsb3dpbmcgZnVu Y3Rpb25zOiA8ZnVuY3Rpb24+bGFnPC9mdW5jdGlvbj4sCisgICA8ZnVuY3Rpb24+bGVhZDwvZnVu Y3Rpb24+LCA8ZnVuY3Rpb24+Zmlyc3RfdmFsdWU8L2Z1bmN0aW9uPiwgPGZ1bmN0aW9uPmxhc3Rf dmFsdWU8L2Z1bmN0aW9uPiwKKyAgIDxmdW5jdGlvbj5udGhfdmFsdWU8L2Z1bmN0aW9uPi4KKyAg PC9wYXJhPgorCiAgIDxub3RlPgogICAgPHBhcmE+Ci0gICAgVGhlIFNRTCBzdGFuZGFyZCBkZWZp bmVzIGEgPGxpdGVyYWw+UkVTUEVDVCBOVUxMUzwvbGl0ZXJhbD4gb3IKLSAgICA8bGl0ZXJhbD5J R05PUkUgTlVMTFM8L2xpdGVyYWw+IG9wdGlvbiBmb3IgPGZ1bmN0aW9uPmxlYWQ8L2Z1bmN0aW9u PiwgPGZ1bmN0aW9uPmxhZzwvZnVuY3Rpb24+LAotICAgIDxmdW5jdGlvbj5maXJzdF92YWx1ZTwv ZnVuY3Rpb24+LCA8ZnVuY3Rpb24+bGFzdF92YWx1ZTwvZnVuY3Rpb24+LCBhbmQKLSAgICA8ZnVu Y3Rpb24+bnRoX3ZhbHVlPC9mdW5jdGlvbj4uICBUaGlzIGlzIG5vdCBpbXBsZW1lbnRlZCBpbgot ICAgIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT46IHRoZSBiZWhhdmlvciBp cyBhbHdheXMgdGhlCi0gICAgc2FtZSBhcyB0aGUgc3RhbmRhcmQncyBkZWZhdWx0LCBuYW1lbHkg PGxpdGVyYWw+UkVTUEVDVCBOVUxMUzwvbGl0ZXJhbD4uCi0gICAgTGlrZXdpc2UsIHRoZSBzdGFu ZGFyZCdzIDxsaXRlcmFsPkZST00gRklSU1Q8L2xpdGVyYWw+IG9yIDxsaXRlcmFsPkZST00gTEFT VDwvbGl0ZXJhbD4KLSAgICBvcHRpb24gZm9yIDxmdW5jdGlvbj5udGhfdmFsdWU8L2Z1bmN0aW9u PiBpcyBub3QgaW1wbGVtZW50ZWQ6IG9ubHkgdGhlCi0gICAgZGVmYXVsdCA8bGl0ZXJhbD5GUk9N IEZJUlNUPC9saXRlcmFsPiBiZWhhdmlvciBpcyBzdXBwb3J0ZWQuICAoWW91IGNhbiBhY2hpZXZl Ci0gICAgdGhlIHJlc3VsdCBvZiA8bGl0ZXJhbD5GUk9NIExBU1Q8L2xpdGVyYWw+IGJ5IHJldmVy c2luZyB0aGUgPGxpdGVyYWw+T1JERVIgQlk8L2xpdGVyYWw+CisgICAgVGhlIFNRTCBzdGFuZGFy ZCBkZWZpbmVzIGEgPGxpdGVyYWw+RlJPTSBGSVJTVDwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+RlJP TSBMQVNUPC9saXRlcmFsPgorICAgIG9wdGlvbiBmb3IgPGZ1bmN0aW9uPm50aF92YWx1ZTwvZnVu Y3Rpb24+LiBUaGlzIGlzIG5vdCBpbXBsZW1lbnRlZCBpbgorICAgIDxwcm9kdWN0bmFtZT5Qb3N0 Z3JlU1FMPC9wcm9kdWN0bmFtZT46IG9ubHkgdGhlIGRlZmF1bHQgPGxpdGVyYWw+RlJPTSBGSVJT VDwvbGl0ZXJhbD4KKyAgICBiZWhhdmlvciBpcyBzdXBwb3J0ZWQuIChZb3UgY2FuIGFjaGlldmUg dGhlIHJlc3VsdCBvZiA8bGl0ZXJhbD5GUk9NIExBU1Q8L2xpdGVyYWw+IGJ5CisgICAgcmV2ZXJz aW5nIHRoZSA8bGl0ZXJhbD5PUkRFUiBCWTwvbGl0ZXJhbD4KICAgICBvcmRlcmluZy4pCiAgICA8 L3BhcmE+CiAgIDwvbm90ZT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9zeW50YXguc2dtbCBi L2RvYy9zcmMvc2dtbC9zeW50YXguc2dtbAppbmRleCA5MTYxODlhN2Q2OC4uMjM3ZDczMDZmZTgg MTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9zeW50YXguc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwv c3ludGF4LnNnbWwKQEAgLTE4MzQsOCArMTgzNCw4IEBAIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEs MTApIEFTIHMoaSk7CiAgICAgVGhlIHN5bnRheCBvZiBhIHdpbmRvdyBmdW5jdGlvbiBjYWxsIGlz IG9uZSBvZiB0aGUgZm9sbG93aW5nOgogCiA8c3lub3BzaXM+Ci08cmVwbGFjZWFibGU+ZnVuY3Rp b25fbmFtZTwvcmVwbGFjZWFibGU+ICg8b3B0aW9uYWw+PHJlcGxhY2VhYmxlPmV4cHJlc3Npb248 L3JlcGxhY2VhYmxlPiA8b3B0aW9uYWw+LCA8cmVwbGFjZWFibGU+ZXhwcmVzc2lvbjwvcmVwbGFj ZWFibGU+IC4uLiA8L29wdGlvbmFsPjwvb3B0aW9uYWw+KSBbIEZJTFRFUiAoIFdIRVJFIDxyZXBs YWNlYWJsZT5maWx0ZXJfY2xhdXNlPC9yZXBsYWNlYWJsZT4gKSBdIE9WRVIgPHJlcGxhY2VhYmxl PndpbmRvd19uYW1lPC9yZXBsYWNlYWJsZT4KLTxyZXBsYWNlYWJsZT5mdW5jdGlvbl9uYW1lPC9y ZXBsYWNlYWJsZT4gKDxvcHRpb25hbD48cmVwbGFjZWFibGU+ZXhwcmVzc2lvbjwvcmVwbGFjZWFi bGU+IDxvcHRpb25hbD4sIDxyZXBsYWNlYWJsZT5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gLi4u IDwvb3B0aW9uYWw+PC9vcHRpb25hbD4pIFsgRklMVEVSICggV0hFUkUgPHJlcGxhY2VhYmxlPmZp bHRlcl9jbGF1c2U8L3JlcGxhY2VhYmxlPiApIF0gT1ZFUiAoIDxyZXBsYWNlYWJsZSBjbGFzcz0i cGFyYW1ldGVyIj53aW5kb3dfZGVmaW5pdGlvbjwvcmVwbGFjZWFibGU+ICkKKzxyZXBsYWNlYWJs ZT5mdW5jdGlvbl9uYW1lPC9yZXBsYWNlYWJsZT4gKDxvcHRpb25hbD48cmVwbGFjZWFibGU+ZXhw cmVzc2lvbjwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4sIDxyZXBsYWNlYWJsZT5leHByZXNzaW9u PC9yZXBsYWNlYWJsZT4gLi4uIDwvb3B0aW9uYWw+PC9vcHRpb25hbD4pIDxvcHRpb25hbD5udWxs IHRyZWF0bWVudDwvb3B0aW9uYWw+IFsgRklMVEVSICggV0hFUkUgPHJlcGxhY2VhYmxlPmZpbHRl cl9jbGF1c2U8L3JlcGxhY2VhYmxlPiApIF0gT1ZFUiA8cmVwbGFjZWFibGU+d2luZG93X25hbWU8 L3JlcGxhY2VhYmxlPgorPHJlcGxhY2VhYmxlPmZ1bmN0aW9uX25hbWU8L3JlcGxhY2VhYmxlPiAo PG9wdGlvbmFsPjxyZXBsYWNlYWJsZT5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFs PiwgPHJlcGxhY2VhYmxlPmV4cHJlc3Npb248L3JlcGxhY2VhYmxlPiAuLi4gPC9vcHRpb25hbD48 L29wdGlvbmFsPikgPG9wdGlvbmFsPm51bGwgdHJlYXRtZW50PC9vcHRpb25hbD4gWyBGSUxURVIg KCBXSEVSRSA8cmVwbGFjZWFibGU+ZmlsdGVyX2NsYXVzZTwvcmVwbGFjZWFibGU+ICkgXSBPVkVS ICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPndpbmRvd19kZWZpbml0aW9uPC9yZXBs YWNlYWJsZT4gKQogPHJlcGxhY2VhYmxlPmZ1bmN0aW9uX25hbWU8L3JlcGxhY2VhYmxlPiAoICog KSBbIEZJTFRFUiAoIFdIRVJFIDxyZXBsYWNlYWJsZT5maWx0ZXJfY2xhdXNlPC9yZXBsYWNlYWJs ZT4gKSBdIE9WRVIgPHJlcGxhY2VhYmxlPndpbmRvd19uYW1lPC9yZXBsYWNlYWJsZT4KIDxyZXBs YWNlYWJsZT5mdW5jdGlvbl9uYW1lPC9yZXBsYWNlYWJsZT4gKCAqICkgWyBGSUxURVIgKCBXSEVS RSA8cmVwbGFjZWFibGU+ZmlsdGVyX2NsYXVzZTwvcmVwbGFjZWFibGU+ICkgXSBPVkVSICggPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPndpbmRvd19kZWZpbml0aW9uPC9yZXBsYWNlYWJs ZT4gKQogPC9zeW5vcHNpcz4KQEAgLTE4NzMsNyArMTg3Myw5IEBAIEVYQ0xVREUgTk8gT1RIRVJT CiAKICAgIDxwYXJhPgogICAgIEhlcmUsIDxyZXBsYWNlYWJsZT5leHByZXNzaW9uPC9yZXBsYWNl YWJsZT4gcmVwcmVzZW50cyBhbnkgdmFsdWUKLSAgICBleHByZXNzaW9uIHRoYXQgZG9lcyBub3Qg aXRzZWxmIGNvbnRhaW4gd2luZG93IGZ1bmN0aW9uIGNhbGxzLgorICAgIGV4cHJlc3Npb24gdGhh dCBkb2VzIG5vdCBpdHNlbGYgY29udGFpbiB3aW5kb3cgZnVuY3Rpb24gY2FsbHMuIFNvbWUKKyAg ICBub24tYWdncmVnYXRlIGZ1bmN0aW9ucyBhbGxvdyBhIDxsaXRlcmFsPm51bGwgdHJlYXRtZW50 PC9saXRlcmFsPiBjbGF1c2UsCisgICAgZGVzY3JpYmVkIGluIDx4cmVmIGxpbmtlbmQ9ImZ1bmN0 aW9ucy13aW5kb3ciLz4uCiAgICA8L3BhcmE+CiAKICAgIDxwYXJhPgpAQCAtMjA0OCw3ICsyMDUw LDcgQEAgRVhDTFVERSBOTyBPVEhFUlMKIAogICAgPHBhcmE+CiAgICAgVGhlIGJ1aWx0LWluIHdp bmRvdyBmdW5jdGlvbnMgYXJlIGRlc2NyaWJlZCBpbiA8eHJlZgotICAgIGxpbmtlbmQ9ImZ1bmN0 aW9ucy13aW5kb3ctdGFibGUiLz4uICBPdGhlciB3aW5kb3cgZnVuY3Rpb25zIGNhbiBiZSBhZGRl ZCBieQorICAgIGxpbmtlbmQ9ImZ1bmN0aW9ucy13aW5kb3ctdGFibGUiLz4uIE90aGVyIHdpbmRv dyBmdW5jdGlvbnMgY2FuIGJlIGFkZGVkIGJ5CiAgICAgdGhlIHVzZXIuICBBbHNvLCBhbnkgYnVp bHQtaW4gb3IgdXNlci1kZWZpbmVkIGdlbmVyYWwtcHVycG9zZSBvcgogICAgIHN0YXRpc3RpY2Fs IGFnZ3JlZ2F0ZSBjYW4gYmUgdXNlZCBhcyBhIHdpbmRvdyBmdW5jdGlvbi4gIChPcmRlcmVkLXNl dAogICAgIGFuZCBoeXBvdGhldGljYWwtc2V0IGFnZ3JlZ2F0ZXMgY2Fubm90IHByZXNlbnRseSBi ZSB1c2VkIGFzIHdpbmRvdyBmdW5jdGlvbnMuKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0 YWxvZy9zcWxfZmVhdHVyZXMudHh0IGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zcWxfZmVhdHVyZXMu dHh0CmluZGV4IGViZTg1MzM3YzI4Li4zYThhZDIwMTYwNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvY2F0YWxvZy9zcWxfZmVhdHVyZXMudHh0CisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3Fs X2ZlYXR1cmVzLnR4dApAQCAtNTE4LDcgKzUxOCw3IEBAIFQ2MTIJQWR2YW5jZWQgT0xBUCBvcGVy YXRpb25zCQkJWUVTCiBUNjEzCVNhbXBsaW5nCQkJWUVTCQogVDYxNAlOVElMRSBmdW5jdGlvbgkJ CVlFUwkKIFQ2MTUJTEVBRCBhbmQgTEFHIGZ1bmN0aW9ucwkJCVlFUwkKLVQ2MTYJTnVsbCB0cmVh dG1lbnQgb3B0aW9uIGZvciBMRUFEIGFuZCBMQUcgZnVuY3Rpb25zCQkJTk8JCitUNjE2CU51bGwg dHJlYXRtZW50IG9wdGlvbiBmb3IgTEVBRCBhbmQgTEFHIGZ1bmN0aW9ucwkJCVlFUwkKIFQ2MTcJ RklSU1RfVkFMVUUgYW5kIExBU1RfVkFMVUUgZnVuY3Rpb25zCQkJWUVTCQogVDYxOAlOVEhfVkFM VUUgZnVuY3Rpb24JCQlOTwlmdW5jdGlvbiBleGlzdHMsIGJ1dCBzb21lIG9wdGlvbnMgbWlzc2lu ZwogVDYxOQlOZXN0ZWQgd2luZG93IGZ1bmN0aW9ucwkJCU5PCQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZVdpbmRvd0FnZy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9k ZVdpbmRvd0FnZy5jCmluZGV4IDlhMWFjY2UyYjVkLi44ZGVmMDA0MjVmNiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVdpbmRvd0FnZy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVXaW5kb3dBZ2cuYwpAQCAtNjksNiArNjksOSBAQCB0eXBlZGVmIHN0cnVjdCBX aW5kb3dPYmplY3REYXRhCiAJaW50CQkJcmVhZHB0cjsJCS8qIHR1cGxlc3RvcmUgcmVhZCBwb2lu dGVyIGZvciB0aGlzIGZuICovCiAJaW50NjQJCW1hcmtwb3M7CQkvKiByb3cgdGhhdCBtYXJrcHRy IGlzIHBvc2l0aW9uZWQgb24gKi8KIAlpbnQ2NAkJc2Vla3BvczsJCS8qIHJvdyB0aGF0IHJlYWRw dHIgaXMgcG9zaXRpb25lZCBvbiAqLworCXVpbnQ4CSAgICpub3RudWxsX2luZm87CS8qIG5vdCBu dWxsIGluZm8gKi8KKwlpbnQJCQludW1fbm90bnVsbF9pbmZvOwkvKiB0cmFjayBzaXplIG9mIHRo ZSBub3RudWxsX2luZm8gYXJyYXkgKi8KKwlpbnQJCQlpZ25vcmVfbnVsbHM7CS8qIGlnbm9yZSBu dWxscyAqLwogfSBXaW5kb3dPYmplY3REYXRhOwogCiAvKgpAQCAtOTYsNiArOTksNyBAQCB0eXBl ZGVmIHN0cnVjdCBXaW5kb3dTdGF0ZVBlckZ1bmNEYXRhCiAKIAlib29sCQlwbGFpbl9hZ2c7CQkv KiBpcyBpdCBqdXN0IGEgcGxhaW4gYWdncmVnYXRlIGZ1bmN0aW9uPyAqLwogCWludAkJCWFnZ25v OwkJCS8qIGlmIHNvLCBpbmRleCBvZiBpdHMgV2luZG93U3RhdGVQZXJBZ2dEYXRhICovCisJaW50 CQkJaWdub3JlX251bGxzOwkvKiBpZ25vcmUgbnVsbHMgKi8KIAogCVdpbmRvd09iamVjdCB3aW5v Ymo7CQkvKiBvYmplY3QgdXNlZCBpbiB3aW5kb3cgZnVuY3Rpb24gQVBJICovCiB9CQkJV2luZG93 U3RhdGVQZXJGdW5jRGF0YTsKQEAgLTE4Miw4ICsxODYsOCBAQCBzdGF0aWMgdm9pZCBiZWdpbl9w YXJ0aXRpb24oV2luZG93QWdnU3RhdGUgKndpbnN0YXRlKTsKIHN0YXRpYyB2b2lkIHNwb29sX3R1 cGxlcyhXaW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGUsIGludDY0IHBvcyk7CiBzdGF0aWMgdm9pZCBy ZWxlYXNlX3BhcnRpdGlvbihXaW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGUpOwogCi1zdGF0aWMgaW50 CXJvd19pc19pbl9mcmFtZShXaW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGUsIGludDY0IHBvcywKLQkJ CQkJCQlUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CitzdGF0aWMgaW50CXJvd19pc19pbl9mcmFtZShX aW5kb3dPYmplY3Qgd2lub2JqLCBpbnQ2NCBwb3MsCisJCQkJCQkJVHVwbGVUYWJsZVNsb3QgKnNs b3QsIGJvb2wgZmV0Y2hfdHVwbGUpOwogc3RhdGljIHZvaWQgdXBkYXRlX2ZyYW1laGVhZHBvcyhX aW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGUpOwogc3RhdGljIHZvaWQgdXBkYXRlX2ZyYW1ldGFpbHBv cyhXaW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGUpOwogc3RhdGljIHZvaWQgdXBkYXRlX2dyb3VwdGFp bHBvcyhXaW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGUpOwpAQCAtMTk4LDYgKzIwMiwzMyBAQCBzdGF0 aWMgYm9vbCBhcmVfcGVlcnMoV2luZG93QWdnU3RhdGUgKndpbnN0YXRlLCBUdXBsZVRhYmxlU2xv dCAqc2xvdDEsCiBzdGF0aWMgYm9vbCB3aW5kb3dfZ2V0dHVwbGVzbG90KFdpbmRvd09iamVjdCB3 aW5vYmosIGludDY0IHBvcywKIAkJCQkJCQkJVHVwbGVUYWJsZVNsb3QgKnNsb3QpOwogCitzdGF0 aWMgRGF0dW0gaWdub3JlbnVsbHNfZ2V0ZnVuY2FyZ2luZnJhbWUoV2luZG93T2JqZWN0IHdpbm9i aiwgaW50IGFyZ25vLAorCQkJCQkJCQkJCSAgIGludCByZWxwb3MsIGludCBzZWVrdHlwZSwKKwkJ CQkJCQkJCQkgICBib29sIHNldF9tYXJrLCBib29sICppc251bGwsCisJCQkJCQkJCQkJICAgYm9v bCAqaXNvdXQpOworc3RhdGljIERhdHVtIGdldHR1cGxlX2V2YWxfcGFydGl0aW9uKFdpbmRvd09i amVjdCB3aW5vYmosIGludCBhcmdubywKKwkJCQkJCQkJCSBpbnQ2NCBhYnNfcG9zLCBib29sICpp c251bGwsIGJvb2wgKmlzb3V0KTsKK3N0YXRpYyB2b2lkIGluaXRfbm90bnVsbF9pbmZvKFdpbmRv d09iamVjdCB3aW5vYmopOworc3RhdGljIHZvaWQgZ3Jvd19ub3RudWxsX2luZm8oV2luZG93T2Jq ZWN0IHdpbm9iaiwgaW50NjQgcG9zKTsKK3N0YXRpYyB1aW50OCBnZXRfbm90bnVsbF9pbmZvKFdp bmRvd09iamVjdCB3aW5vYmosIGludDY0IHBvcyk7CitzdGF0aWMgdm9pZCBwdXRfbm90bnVsbF9p bmZvKFdpbmRvd09iamVjdCB3aW5vYmosIGludDY0IHBvcywgYm9vbCBpc251bGwpOworCisvKgor ICogTm90IG51bGwgaW5mbyBiaXQgYXJyYXkgY29uc2lzdHMgb2YgMi1iaXQgaXRlbXMKKyAqLwor I2RlZmluZQlOTl9VTktOT1dOCTB4MDAJCS8qIHZhbHVlIG5vdCBjYWxjdWxhdGVkIHlldCAqLwor I2RlZmluZQlOTl9OVUxMCQkweDAxCQkvKiBOVUxMICovCisjZGVmaW5lCU5OX05PVE5VTEwJMHgw MgkJLyogTk9UIE5VTEwgKi8KKyNkZWZpbmUJTk5fTUFTSwkJMHgwMwkJLyogbWFzayBmb3IgTk9U IE5VTEwgTUFQICovCisjZGVmaW5lIE5OX0JJVFNfUEVSX01FTUJFUgkyCS8qIG51bWJlciBvZiBi aXQgaW4gbm90IG51bGwgbWFwICovCisvKiBudW1iZXIgb2YgaXRlbXMgcGVyIHZhcmlhYmxlICov CisjZGVmaW5lIE5OX0lURU1fUEVSX1ZBUgkoQklUU19QRVJfQllURSAvIE5OX0JJVFNfUEVSX01F TUJFUikKKy8qIGNvbnZlcnQgbWFwIHBvc2l0aW9uIHRvIGJ5dGUgb2Zmc2V0ICovCisjZGVmaW5l IE5OX1BPU19UT19CWVRFUyhwb3MpCSgocG9zKSAvIE5OX0lURU1fUEVSX1ZBUikKKy8qIGJ5dGVz IG9mZnNldCB0byBtYXAgcG9zaXRpb24gKi8KKyNkZWZpbmUgTk5fQllURVNfVE9fUE9TKGJ5dGVz KQkoKGJ5dGVzKSAqIE5OX0lURU1fUEVSX1ZBUikKKy8qIGNhY3VsYXRlIHNoaWZ0IGJpdHMgKi8K KyNkZWZpbmUJTk5fU0hJRlQocG9zKQkoKHBvcykgJSBOTl9JVEVNX1BFUl9WQVIpICogTk5fQklU U19QRVJfTUVNQkVSCiAKIC8qCiAgKiBpbml0aWFsaXplX3dpbmRvd2FnZ3JlZ2F0ZQpAQCAtOTQy LDcgKzk3Myw3IEBAIGV2YWxfd2luZG93YWdncmVnYXRlcyhXaW5kb3dBZ2dTdGF0ZSAqd2luc3Rh dGUpCiAJCSAqIEV4aXQgbG9vcCBpZiBubyBtb3JlIHJvd3MgY2FuIGJlIGluIGZyYW1lLiAgU2tp cCBhZ2dyZWdhdGlvbiBpZgogCQkgKiBjdXJyZW50IHJvdyBpcyBub3QgaW4gZnJhbWUgYnV0IHRo ZXJlIG1pZ2h0IGJlIG1vcmUgaW4gdGhlIGZyYW1lLgogCQkgKi8KLQkJcmV0ID0gcm93X2lzX2lu X2ZyYW1lKHdpbnN0YXRlLCB3aW5zdGF0ZS0+YWdncmVnYXRlZHVwdG8sIGFnZ19yb3dfc2xvdCk7 CisJCXJldCA9IHJvd19pc19pbl9mcmFtZShhZ2dfd2lub2JqLCB3aW5zdGF0ZS0+YWdncmVnYXRl ZHVwdG8sIGFnZ19yb3dfc2xvdCwgZmFsc2UpOwogCQlpZiAocmV0IDwgMCkKIAkJCWJyZWFrOwog CQlpZiAocmV0ID09IDApCkBAIC0xMjYzLDYgKzEyOTQsMTEgQEAgYmVnaW5fcGFydGl0aW9uKFdp bmRvd0FnZ1N0YXRlICp3aW5zdGF0ZSkKIAogCQkJd2lub2JqLT5tYXJrcG9zID0gLTE7CiAJCQl3 aW5vYmotPnNlZWtwb3MgPSAtMTsKKworCQkJLyogcmVzZXQgbnVsbCBtYXAgKi8KKwkJCWlmIChw ZXJmdW5jc3RhdGUtPndpbm9iai0+aWdub3JlX251bGxzID09IElHTk9SRV9OVUxMUykKKwkJCQlt ZW1zZXQocGVyZnVuY3N0YXRlLT53aW5vYmotPm5vdG51bGxfaW5mbywgMCwKKwkJCQkJICAgTk5f UE9TX1RPX0JZVEVTKHBlcmZ1bmNzdGF0ZS0+d2lub2JqLT5udW1fbm90bnVsbF9pbmZvKSk7CiAJ CX0KIAl9CiAKQEAgLTE0MTIsOCArMTQ0OCw4IEBAIHJlbGVhc2VfcGFydGl0aW9uKFdpbmRvd0Fn Z1N0YXRlICp3aW5zdGF0ZSkKICAqIHRvIG91ciB3aW5kb3cgZnJhbWluZyBydWxlCiAgKgogICog VGhlIGNhbGxlciBtdXN0IGhhdmUgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQgdGhlIHJvdyBpcyBp biB0aGUgcGFydGl0aW9uCi0gKiBhbmQgZmV0Y2hlZCBpdCBpbnRvIGEgc2xvdC4gIFRoaXMgZnVu Y3Rpb24ganVzdCBlbmNhcHN1bGF0ZXMgdGhlIGZyYW1pbmcKLSAqIHJ1bGVzLgorICogYW5kIGZl dGNoZWQgaXQgaW50byBhIHNsb3QgaWYgZmV0Y2hfdHVwbGUgaXMgZmFsc2UuCisuKiBUaGlzIGZ1 bmN0aW9uIGp1c3QgZW5jYXBzdWxhdGVzIHRoZSBmcmFtaW5nIHJ1bGVzLgogICoKICAqIFJldHVy bnM6CiAgKiAtMSwgaWYgdGhlIHJvdyBpcyBvdXQgb2YgZnJhbWUgYW5kIG5vIHN1Y2NlZWRpbmcg cm93cyBjYW4gYmUgaW4gZnJhbWUKQEAgLTE0MjMsOCArMTQ1OSw5IEBAIHJlbGVhc2VfcGFydGl0 aW9uKFdpbmRvd0FnZ1N0YXRlICp3aW5zdGF0ZSkKICAqIE1heSBjbG9iYmVyIHdpbnN0YXRlLT50 ZW1wX3Nsb3RfMi4KICAqLwogc3RhdGljIGludAotcm93X2lzX2luX2ZyYW1lKFdpbmRvd0FnZ1N0 YXRlICp3aW5zdGF0ZSwgaW50NjQgcG9zLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKK3Jvd19pc19p bl9mcmFtZShXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQ2NCBwb3MsIFR1cGxlVGFibGVTbG90ICpz bG90LCBib29sIGZldGNoX3R1cGxlKQogeworCVdpbmRvd0FnZ1N0YXRlICp3aW5zdGF0ZSA9IHdp bm9iai0+d2luc3RhdGU7CiAJaW50CQkJZnJhbWVPcHRpb25zID0gd2luc3RhdGUtPmZyYW1lT3B0 aW9uczsKIAogCUFzc2VydChwb3MgPj0gMCk7CQkJLyogZWxzZSBjYWxsZXIgZXJyb3IgKi8KQEAg LTE0NTMsOSArMTQ5MCwxMyBAQCByb3dfaXNfaW5fZnJhbWUoV2luZG93QWdnU3RhdGUgKndpbnN0 YXRlLCBpbnQ2NCBwb3MsIFR1cGxlVGFibGVTbG90ICpzbG90KQogCQllbHNlIGlmIChmcmFtZU9w dGlvbnMgJiAoRlJBTUVPUFRJT05fUkFOR0UgfCBGUkFNRU9QVElPTl9HUk9VUFMpKQogCQl7CiAJ CQkvKiBmb2xsb3dpbmcgcm93IHRoYXQgaXMgbm90IHBlZXIgaXMgb3V0IG9mIGZyYW1lICovCi0J CQlpZiAocG9zID4gd2luc3RhdGUtPmN1cnJlbnRwb3MgJiYKLQkJCQkhYXJlX3BlZXJzKHdpbnN0 YXRlLCBzbG90LCB3aW5zdGF0ZS0+c3Muc3NfU2NhblR1cGxlU2xvdCkpCi0JCQkJcmV0dXJuIC0x OworCQkJaWYgKHBvcyA+IHdpbnN0YXRlLT5jdXJyZW50cG9zKQorCQkJeworCQkJCWlmIChmZXRj aF90dXBsZSkKKwkJCQkJd2luZG93X2dldHR1cGxlc2xvdCh3aW5vYmosIHBvcywgc2xvdCk7CisJ CQkJaWYgKCFhcmVfcGVlcnMod2luc3RhdGUsIHNsb3QsIHdpbnN0YXRlLT5zcy5zc19TY2FuVHVw bGVTbG90KSkKKwkJCQkJcmV0dXJuIC0xOworCQkJfQogCQl9CiAJCWVsc2UKIAkJCUFzc2VydChm YWxzZSk7CkBAIC0yNjE5LDE0ICsyNjYwLDE3IEBAIEV4ZWNJbml0V2luZG93QWdnKFdpbmRvd0Fn ZyAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJCQllbG9nKEVSUk9SLCAiV2lu ZG93RnVuYyB3aXRoIHdpbnJlZiAldSBhc3NpZ25lZCB0byBXaW5kb3dBZ2cgd2l0aCB3aW5yZWYg JXUiLAogCQkJCSB3ZnVuYy0+d2lucmVmLCBub2RlLT53aW5yZWYpOwogCi0JCS8qIExvb2sgZm9y IGEgcHJldmlvdXMgZHVwbGljYXRlIHdpbmRvdyBmdW5jdGlvbiAqLworCQkvKgorCQkgKiBMb29r IGZvciBhIHByZXZpb3VzIGR1cGxpY2F0ZSB3aW5kb3cgZnVuY3Rpb24sIHdoaWNoIG5lZWRzIHRo ZSBzYW1lCisJCSAqIGlnbm9yZV9udWxscyB2YWx1ZQorCQkgKi8KIAkJZm9yIChpID0gMDsgaSA8 PSB3ZnVuY25vOyBpKyspCiAJCXsKIAkJCWlmIChlcXVhbCh3ZnVuYywgcGVyZnVuY1tpXS53ZnVu YykgJiYKIAkJCQkhY29udGFpbl92b2xhdGlsZV9mdW5jdGlvbnMoKE5vZGUgKikgd2Z1bmMpKQog CQkJCWJyZWFrOwogCQl9Ci0JCWlmIChpIDw9IHdmdW5jbm8pCisJCWlmIChpIDw9IHdmdW5jbm8g JiYgd2Z1bmMtPmlnbm9yZV9udWxscyA9PSBwZXJmdW5jW2ldLmlnbm9yZV9udWxscykKIAkJewog CQkJLyogRm91bmQgYSBtYXRjaCB0byBhbiBleGlzdGluZyBlbnRyeSwgc28ganVzdCBtYXJrIGl0 ICovCiAJCQl3ZnVuY3N0YXRlLT53ZnVuY25vID0gaTsKQEAgLTI2NzksNiArMjcyMyw4IEBAIEV4 ZWNJbml0V2luZG93QWdnKFdpbmRvd0FnZyAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxh Z3MpCiAJCQl3aW5vYmotPmFyZ3N0YXRlcyA9IHdmdW5jc3RhdGUtPmFyZ3M7CiAJCQl3aW5vYmot PmxvY2FsbWVtID0gTlVMTDsKIAkJCXBlcmZ1bmNzdGF0ZS0+d2lub2JqID0gd2lub2JqOworCQkJ d2lub2JqLT5pZ25vcmVfbnVsbHMgPSB3ZnVuYy0+aWdub3JlX251bGxzOworCQkJaW5pdF9ub3Ru dWxsX2luZm8od2lub2JqKTsKIAogCQkJLyogSXQncyBhIHJlYWwgd2luZG93IGZ1bmN0aW9uLCBz byBzZXQgdXAgdG8gY2FsbCBpdC4gKi8KIAkJCWZtZ3JfaW5mb19jeHQod2Z1bmMtPndpbmZub2lk LCAmcGVyZnVuY3N0YXRlLT5mbGluZm8sCkBAIC0zMjE0LDEyICszMjYwLDI5MCBAQCB3aW5kb3df Z2V0dHVwbGVzbG90KFdpbmRvd09iamVjdCB3aW5vYmosIGludDY0IHBvcywgVHVwbGVUYWJsZVNs b3QgKnNsb3QpCiAJcmV0dXJuIHRydWU7CiB9CiAKKy8qCisgKiBnZXQgdHVwcGxlIGFuZCBldmFs dWF0ZSBpbiBhIHBhcnRpdGlvbgorICovCitzdGF0aWMgRGF0dW0KK2dldHR1cGxlX2V2YWxfcGFy dGl0aW9uKFdpbmRvd09iamVjdCB3aW5vYmosIGludCBhcmdubywKKwkJCQkJCWludDY0IGFic19w b3MsIGJvb2wgKmlzbnVsbCwgYm9vbCAqaXNvdXQpCit7CisJV2luZG93QWdnU3RhdGUgKndpbnN0 YXRlOworCUV4cHJDb250ZXh0ICplY29udGV4dDsKKwlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKKwor CXdpbnN0YXRlID0gd2lub2JqLT53aW5zdGF0ZTsKKwlzbG90ID0gd2luc3RhdGUtPnRlbXBfc2xv dF8xOworCWlmICghd2luZG93X2dldHR1cGxlc2xvdCh3aW5vYmosIGFic19wb3MsIHNsb3QpKQor CXsKKwkJLyogb3V0IG9mIHBhcnRpdGlvbiAqLworCQlpZiAoaXNvdXQpCisJCQkqaXNvdXQgPSB0 cnVlOworCQkqaXNudWxsID0gdHJ1ZTsKKwkJcmV0dXJuIChEYXR1bSkgMDsKKwl9CisKKwlpZiAo aXNvdXQpCisJCSppc291dCA9IGZhbHNlOworCWVjb250ZXh0ID0gd2luc3RhdGUtPnNzLnBzLnBz X0V4cHJDb250ZXh0OworCWVjb250ZXh0LT5lY3h0X291dGVydHVwbGUgPSBzbG90OworCXJldHVy biBFeGVjRXZhbEV4cHIoKEV4cHJTdGF0ZSAqKSBsaXN0X250aCh3aW5vYmotPmFyZ3N0YXRlcywg YXJnbm8pLAorCQkJCQkJZWNvbnRleHQsIGlzbnVsbCk7Cit9CisKKy8qCisgKiBpZ25vcmVudWxs c19nZXRmdW5jYXJnaW5mcmFtZQorICogRm9yIElHTk9SRSBOVUxMUywgZ2V0IHRoZSBuZXh0IG5v bm51bGwgdmFsdWUgaW4gdGhlIGZyYW1lLCBtb3ZpbmcgZm9yd2FyZAorICogb3IgYmFja3dhcmQg dW50aWwgd2UgZmluZCBhIHZhbHVlIG9yIHJlYWNoIHRoZSBmcmFtZSdzIGVuZC4KKyAqLworc3Rh dGljIERhdHVtCitpZ25vcmVudWxsc19nZXRmdW5jYXJnaW5mcmFtZShXaW5kb3dPYmplY3Qgd2lu b2JqLCBpbnQgYXJnbm8sCisJCQkJCQkJICBpbnQgcmVscG9zLCBpbnQgc2Vla3R5cGUsIGJvb2wg c2V0X21hcmssCisJCQkJCQkJICBib29sICppc251bGwsIGJvb2wgKmlzb3V0KQoreworCVdpbmRv d0FnZ1N0YXRlICp3aW5zdGF0ZTsKKwlFeHByQ29udGV4dCAqZWNvbnRleHQ7CisJVHVwbGVUYWJs ZVNsb3QgKnNsb3Q7CisJRGF0dW0JCWRhdHVtOworCWludDY0CQlhYnNfcG9zOworCWludDY0CQlt YXJrX3BvczsKKwlpbnQJCQlub3RudWxsX29mZnNldDsKKwlpbnQJCQlub3RudWxsX3JlbHBvczsK KwlpbnQJCQlmb3J3YXJkOworCisJQXNzZXJ0KFdpbmRvd09iamVjdElzVmFsaWQod2lub2JqKSk7 CisJd2luc3RhdGUgPSB3aW5vYmotPndpbnN0YXRlOworCWVjb250ZXh0ID0gd2luc3RhdGUtPnNz LnBzLnBzX0V4cHJDb250ZXh0OworCXNsb3QgPSB3aW5zdGF0ZS0+dGVtcF9zbG90XzE7CisJZGF0 dW0gPSAoRGF0dW0pIDA7CisJbm90bnVsbF9vZmZzZXQgPSAwOworCW5vdG51bGxfcmVscG9zID0g YWJzKHJlbHBvcyk7CisKKwlzd2l0Y2ggKHNlZWt0eXBlKQorCXsKKwkJY2FzZSBXSU5ET1dfU0VF S19DVVJSRU5UOgorCQkJZWxvZyhFUlJPUiwgIldJTkRPV19TRUVLX0NVUlJFTlQgaXMgbm90IHN1 cHBvcnRlZCBmb3IgV2luR2V0RnVuY0FyZ0luRnJhbWUiKTsKKwkJCWFic19wb3MgPSBtYXJrX3Bv cyA9IDA7IC8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KKwkJCWJyZWFrOworCQljYXNlIFdJTkRP V19TRUVLX0hFQUQ6CisJCQkvKiByZWplY3RpbmcgcmVscG9zIDwgMCBpcyBlYXN5IGFuZCBzaW1w bGlmaWVzIGNvZGUgYmVsb3cgKi8KKwkJCWlmIChyZWxwb3MgPCAwKQorCQkJCWdvdG8gb3V0X29m X2ZyYW1lOworCQkJdXBkYXRlX2ZyYW1laGVhZHBvcyh3aW5zdGF0ZSk7CisJCQlhYnNfcG9zID0g d2luc3RhdGUtPmZyYW1laGVhZHBvczsKKwkJCW1hcmtfcG9zID0gd2luc3RhdGUtPmZyYW1laGVh ZHBvczsKKwkJCWZvcndhcmQgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgV0lORE9XX1NFRUtfVEFJ TDoKKwkJCS8qIHJlamVjdGluZyByZWxwb3MgPiAwIGlzIGVhc3kgYW5kIHNpbXBsaWZpZXMgY29k ZSBiZWxvdyAqLworCQkJaWYgKHJlbHBvcyA+IDApCisJCQkJZ290byBvdXRfb2ZfZnJhbWU7CisJ CQl1cGRhdGVfZnJhbWV0YWlscG9zKHdpbnN0YXRlKTsKKwkJCWFic19wb3MgPSB3aW5zdGF0ZS0+ ZnJhbWV0YWlscG9zIC0gMTsKKwkJCW1hcmtfcG9zID0gMDsJCS8qIGtlZXAgY29tcGlsZXIgcXVp ZXQgKi8KKwkJCWZvcndhcmQgPSAtMTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhF UlJPUiwgInVucmVjb2duaXplZCB3aW5kb3cgc2VlayB0eXBlOiAlZCIsIHNlZWt0eXBlKTsKKwkJ CWFic19wb3MgPSBtYXJrX3BvcyA9IDA7IC8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KKwkJCWJy ZWFrOworCX0KKworCS8qCisJICogR2V0IHRoZSBuZXh0IG5vbm51bGwgdmFsdWUgaW4gdGhlIGZy YW1lLCBtb3ZpbmcgZm9yd2FyZCBvciBiYWNrd2FyZAorCSAqIHVudGlsIHdlIGZpbmQgYSB2YWx1 ZSBvciByZWFjaCB0aGUgZnJhbWUncyBlbmQuCisJICovCisJZG8KKwl7CisJCWludAkJCWluZnJh bWU7CisJCWludAkJCXY7CisKKwkJLyoKKwkJICogQ2hlY2sgYXBwYXJlbnQgb3V0IG9mIGZyYW1l IGNhc2UuICBXZSBuZWVkIHRvIGRvIHRoaXMgYmVjYXVzZSB3ZQorCQkgKiBtYXkgbm90IGNhbGwg d2luZG93X2dldHR1cGxlc2xvdCBiZWZvcmUgcm93X2lzX2luX2ZyYW1lLCB3aGljaAorCQkgKiBz dXBwb3NlcyBhYnNfcG9zIGlzIG5ldmVyIG5lZ2F0aXZlLgorCQkgKi8KKwkJaWYgKGFic19wb3Mg PCAwKQorCQkJZ290byBvdXRfb2ZfZnJhbWU7CisKKwkJLyogY2hlY2sgd2hldGhlciByb3cgaXMg aW4gZnJhbWUgKi8KKwkJaW5mcmFtZSA9IHJvd19pc19pbl9mcmFtZSh3aW5vYmosIGFic19wb3Ms IHNsb3QsIHRydWUpOworCQlpZiAoaW5mcmFtZSA9PSAtMSkKKwkJCWdvdG8gb3V0X29mX2ZyYW1l OworCQllbHNlIGlmIChpbmZyYW1lID09IDApCisJCQlnb3RvIGFkdmFuY2U7CisKKwkJaWYgKGlz b3V0KQorCQkJKmlzb3V0ID0gZmFsc2U7CisKKwkJdiA9IGdldF9ub3RudWxsX2luZm8od2lub2Jq LCBhYnNfcG9zKTsKKwkJaWYgKHYgPT0gTk5fTlVMTCkJCS8qIHRoaXMgcm93IGlzIGtub3duIHRv IGJlIE5VTEwgKi8KKwkJCWdvdG8gYWR2YW5jZTsKKworCQllbHNlIGlmICh2ID09IE5OX1VOS05P V04pCS8qIG5lZWQgdG8gY2hlY2sgTlVMTCBvciBub3QgKi8KKwkJeworCQkJaWYgKCF3aW5kb3df Z2V0dHVwbGVzbG90KHdpbm9iaiwgYWJzX3Bvcywgc2xvdCkpCisJCQkJZ290byBvdXRfb2ZfZnJh bWU7CisKKwkJCWVjb250ZXh0LT5lY3h0X291dGVydHVwbGUgPSBzbG90OworCQkJZGF0dW0gPSBF eGVjRXZhbEV4cHIoCisJCQkJCQkJCSAoRXhwclN0YXRlICopIGxpc3RfbnRoKHdpbm9iai0+YXJn c3RhdGVzLCBhcmdubyksCisJCQkJCQkJCSBlY29udGV4dCwgaXNudWxsKTsKKwkJCWlmICghKmlz bnVsbCkKKwkJCQlub3RudWxsX29mZnNldCsrOworCisJCQkvKiByZWNvcmQgdGhlIHJvdyBzdGF0 dXMgKi8KKwkJCXB1dF9ub3RudWxsX2luZm8od2lub2JqLCBhYnNfcG9zLCAqaXNudWxsKTsKKwkJ fQorCQllbHNlCQkJCQkvKiB0aGlzIHJvdyBpcyBrbm93biB0byBiZSBOT1QgTlVMTCAqLworCQl7 CisJCQlub3RudWxsX29mZnNldCsrOworCQkJaWYgKG5vdG51bGxfb2Zmc2V0ID4gbm90bnVsbF9y ZWxwb3MpCisJCQl7CisJCQkJLyogdG8gcHJlcGFyZSBleGl0aW5nIHRoaXMgbG9vcCwgZGF0dW0g bmVlZHMgdG8gYmUgc2V0ICovCisJCQkJaWYgKCF3aW5kb3dfZ2V0dHVwbGVzbG90KHdpbm9iaiwg YWJzX3Bvcywgc2xvdCkpCisJCQkJCWdvdG8gb3V0X29mX2ZyYW1lOworCisJCQkJZWNvbnRleHQt PmVjeHRfb3V0ZXJ0dXBsZSA9IHNsb3Q7CisJCQkJZGF0dW0gPSBFeGVjRXZhbEV4cHIoCisJCQkJ CQkJCQkgKEV4cHJTdGF0ZSAqKSBsaXN0X250aCh3aW5vYmotPmFyZ3N0YXRlcywgYXJnbm8pLAor CQkJCQkJCQkJIGVjb250ZXh0LCBpc251bGwpOworCQkJfQorCQl9CithZHZhbmNlOgorCQlhYnNf cG9zICs9IGZvcndhcmQ7CisJfSB3aGlsZSAobm90bnVsbF9vZmZzZXQgPD0gbm90bnVsbF9yZWxw b3MpOworCisJaWYgKHNldF9tYXJrKQorCQlXaW5TZXRNYXJrUG9zaXRpb24od2lub2JqLCBtYXJr X3Bvcyk7CisKKwlyZXR1cm4gZGF0dW07CisKK291dF9vZl9mcmFtZToKKwlpZiAoaXNvdXQpCisJ CSppc291dCA9IHRydWU7CisJKmlzbnVsbCA9IHRydWU7CisJcmV0dXJuIChEYXR1bSkgMDsKK30K KworCisvKgorICogaW5pdF9ub3RudWxsX2luZm8KKyAqIEluaXRpYWxpemUgbm9uIG51bGwgbWFw LgorICovCitzdGF0aWMgdm9pZAoraW5pdF9ub3RudWxsX2luZm8oV2luZG93T2JqZWN0IHdpbm9i aikKK3sKKyNkZWZpbmUJSU5JVF9OT1RfTlVMTF9JTkZPX05VTQkxMjggLyogaW5pdGlhbCBudW1i ZXIgb2Ygbm90bnVsbCBpbmZvIG1lbWJlcnMgKi8KKworCWlmICh3aW5vYmotPmlnbm9yZV9udWxs cyA9PSBQQVJTRVJfSUdOT1JFX05VTExTKQorCXsKKwkJU2l6ZQkJc2l6ZSA9IE5OX1BPU19UT19C WVRFUyhJTklUX05PVF9OVUxMX0lORk9fTlVNKTsKKworCQl3aW5vYmotPm5vdG51bGxfaW5mbyA9 IHBhbGxvYzAoc2l6ZSk7CisJCXdpbm9iai0+bnVtX25vdG51bGxfaW5mbyA9IElOSVRfTk9UX05V TExfSU5GT19OVU07CisJfQorfQorCisvKgorICogZ3Jvd19ub3RudWxsX2luZm8KKyAqIGV4cGFu ZCBub3RudWxsX2luZm8gaWYgbmVjZXNzYXJ5LgorICogcG9zOiBub3QgbnVsbCBpbmZvIHBvc2l0 aW9uCisqLworc3RhdGljIHZvaWQKK2dyb3dfbm90bnVsbF9pbmZvKFdpbmRvd09iamVjdCB3aW5v YmosIGludDY0IHBvcykKK3sKKwlpZiAocG9zID49IHdpbm9iai0+bnVtX25vdG51bGxfaW5mbykK Kwl7CisJCWZvciAoOzspCisJCXsKKwkJCVNpemUJCW9sZHNpemUgPSBOTl9QT1NfVE9fQllURVMo d2lub2JqLT5udW1fbm90bnVsbF9pbmZvKTsKKwkJCVNpemUJCW5ld3NpemUgPSBvbGRzaXplICog MjsKKworCQkJd2lub2JqLT5ub3RudWxsX2luZm8gPQorCQkJCXJlcGFsbG9jMCh3aW5vYmotPm5v dG51bGxfaW5mbywgb2xkc2l6ZSwgbmV3c2l6ZSk7CisJCQl3aW5vYmotPm51bV9ub3RudWxsX2lu Zm8gPSBOTl9CWVRFU19UT19QT1MobmV3c2l6ZSk7CisJCQlpZiAod2lub2JqLT5udW1fbm90bnVs bF9pbmZvID4gcG9zKQorCQkJCWJyZWFrOworCQl9CisJfQorfQorCisvKgorICogZ2V0X25vdG51 bGxfaW5mbworICogcmV0cmlldmUgYSBtYXAKKyAqIHBvczogbWFwIHBvc2l0aW9uCisgKi8KK3N0 YXRpYyB1aW50OAorZ2V0X25vdG51bGxfaW5mbyhXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQ2NCBw b3MpCit7CisJdWludDgJCW1iOworCWludDY0CQlicG9zOworCisJZ3Jvd19ub3RudWxsX2luZm8o d2lub2JqLCBwb3MpOworCWJwb3MgPSBOTl9QT1NfVE9fQllURVMocG9zKTsKKwltYiA9IHdpbm9i ai0+bm90bnVsbF9pbmZvW2Jwb3NdOworCXJldHVybiAobWIgPj4gKE5OX1NISUZUKHBvcykpKSAm IE5OX01BU0s7Cit9CisKKy8qCisgKiBwdXRfbm90bnVsbF9pbmZvCisgKiB1cGRhdGUgbWFwCisg KiBwb3M6IG1hcCBwb3NpdGlvbgorICovCitzdGF0aWMgdm9pZAorcHV0X25vdG51bGxfaW5mbyhX aW5kb3dPYmplY3Qgd2lub2JqLCBpbnQ2NCBwb3MsIGJvb2wgaXNudWxsKQoreworCXVpbnQ4CQlt YjsKKwlpbnQ2NAkJYnBvczsKKwl1aW50OAkJdmFsID0gaXNudWxsID8gTk5fTlVMTCA6IE5OX05P VE5VTEw7CisJaW50CQkJc2hpZnQ7CisKKwlncm93X25vdG51bGxfaW5mbyh3aW5vYmosIHBvcyk7 CisJYnBvcyA9IE5OX1BPU19UT19CWVRFUyhwb3MpOworCW1iID0gd2lub2JqLT5ub3RudWxsX2lu Zm9bYnBvc107CisJc2hpZnQgPSBOTl9TSElGVChwb3MpOworCW1iICY9IH4oTk5fTUFTSyA8PCBz aGlmdCk7CS8qIGNsZWFyIG1hcCAqLworCW1iIHw9ICh2YWwgPDwgc2hpZnQpOwkJLyogdXBkYXRl IG1hcCAqLworCXdpbm9iai0+bm90bnVsbF9pbmZvW2Jwb3NdID0gbWI7Cit9CiAKIC8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKgogICogQVBJIGV4cG9zZWQgdG8gd2luZG93IGZ1bmN0aW9ucwogICoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLwogCiAKKy8qCisgKiBXaW5DaGVja0FuZEluaXRpYWxpemVOdWxsVHJlYXRtZW50CisgKgkJ Q2hlY2sgbnVsbCB0cmVhdG1lbnQgY2xhdXNlIGFuZCBzZXRzIGlnbm9yZV9udWxscworICoKKyAq IFdpbmRvdyBmdW5jdGlvbnMgc2hvdWxkIGNhbGwgdGhpcyB0byBjaGVjayBpZiB0aGV5IGFyZSBi ZWluZyBjYWxsZWQgd2l0aAorICogYSBudWxsIHRyZWF0bWVudCBjbGF1c2Ugd2hlbiB0aGV5IGRv bid0IGFsbG93IGl0LCBvciB0byBzZXQgaWdub3JlX251bGxzLgorICovCit2b2lkCitXaW5DaGVj a0FuZEluaXRpYWxpemVOdWxsVHJlYXRtZW50KFdpbmRvd09iamVjdCB3aW5vYmosCisJCQkJCQkJ CSAgIGJvb2wgYWxsb3dOdWxsVHJlYXRtZW50LAorCQkJCQkJCQkgICBGdW5jdGlvbkNhbGxJbmZv IGZjaW5mbykKK3sKKwlpZiAod2lub2JqLT5pZ25vcmVfbnVsbHMgIT0gTk9fTlVMTFRSRUFUTUVO VCAmJiAhYWxsb3dOdWxsVHJlYXRtZW50KQorCXsKKwkJSGVhcFR1cGxlCXByb2N0dXA7CisJCUZv cm1fcGdfcHJvYyBwcm9jZm9ybTsKKwkJT2lkCQkJZnVuY2lkOworCisJCWZ1bmNpZCA9IGZjaW5m by0+ZmxpbmZvLT5mbl9vaWQ7CisJCXByb2N0dXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwK KwkJCQkJCQkJICBPYmplY3RJZEdldERhdHVtKGZ1bmNpZCkpOworCQlpZiAoIUhlYXBUdXBsZUlz VmFsaWQocHJvY3R1cCkpCisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Ig ZnVuY3Rpb24gJXUiLCBmdW5jaWQpOworCQlwcm9jZm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNU UlVDVChwcm9jdHVwKTsKKwkJZWxvZyhFUlJPUiwgImZ1bmN0aW9uICVzIGRvZXMgbm90IGFsbG93 IFJFU1BFQ1QvSUdOT1JFIE5VTExTIiwKKwkJCSBOYW1lU3RyKHByb2Nmb3JtLT5wcm9uYW1lKSk7 CisJfQorCWVsc2UgaWYgKHdpbm9iai0+aWdub3JlX251bGxzID09IFBBUlNFUl9JR05PUkVfTlVM TFMpCisJCXdpbm9iai0+aWdub3JlX251bGxzID0gSUdOT1JFX05VTExTOworCit9CisKIC8qCiAg KiBXaW5HZXRQYXJ0aXRpb25Mb2NhbE1lbW9yeQogICoJCUdldCB3b3JraW5nIG1lbW9yeSB0aGF0 IGxpdmVzIHRpbGwgZW5kIG9mIHBhcnRpdGlvbiBwcm9jZXNzaW5nCkBAIC0zMzc4LDIzICszNzAy LDM3IEBAIFdpbkdldEZ1bmNBcmdJblBhcnRpdGlvbihXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQg YXJnbm8sCiAJCQkJCQkgYm9vbCAqaXNudWxsLCBib29sICppc291dCkKIHsKIAlXaW5kb3dBZ2dT dGF0ZSAqd2luc3RhdGU7Ci0JRXhwckNvbnRleHQgKmVjb250ZXh0OwotCVR1cGxlVGFibGVTbG90 ICpzbG90OwotCWJvb2wJCWdvdHR1cGxlOwogCWludDY0CQlhYnNfcG9zOworCURhdHVtCQlkYXR1 bTsKKwlib29sCQludWxsX3RyZWF0bWVudCA9IGZhbHNlOworCWludAkJCW5vdG51bGxfb2Zmc2V0 OworCWludAkJCW5vdG51bGxfcmVscG9zOworCWludAkJCWZvcndhcmQ7CiAKIAlBc3NlcnQoV2lu ZG93T2JqZWN0SXNWYWxpZCh3aW5vYmopKTsKIAl3aW5zdGF0ZSA9IHdpbm9iai0+d2luc3RhdGU7 Ci0JZWNvbnRleHQgPSB3aW5zdGF0ZS0+c3MucHMucHNfRXhwckNvbnRleHQ7Ci0Jc2xvdCA9IHdp bnN0YXRlLT50ZW1wX3Nsb3RfMTsKKworCWlmICh3aW5vYmotPmlnbm9yZV9udWxscyA9PSBJR05P UkVfTlVMTFMgJiYgcmVscG9zICE9IDApCisJeworCQludWxsX3RyZWF0bWVudCA9IHRydWU7CisJ CW5vdG51bGxfb2Zmc2V0ID0gMDsKKwkJbm90bnVsbF9yZWxwb3MgPSBhYnMocmVscG9zKTsKKwkJ Zm9yd2FyZCA9IHJlbHBvcyA+IDAgPyAxIDogLTE7CisJfQogCiAJc3dpdGNoIChzZWVrdHlwZSkK IAl7CiAJCWNhc2UgV0lORE9XX1NFRUtfQ1VSUkVOVDoKLQkJCWFic19wb3MgPSB3aW5zdGF0ZS0+ Y3VycmVudHBvcyArIHJlbHBvczsKKwkJCWlmIChudWxsX3RyZWF0bWVudCkKKwkJCQlhYnNfcG9z ID0gd2luc3RhdGUtPmN1cnJlbnRwb3M7CisJCQllbHNlCisJCQkJYWJzX3BvcyA9IHdpbnN0YXRl LT5jdXJyZW50cG9zICsgcmVscG9zOwogCQkJYnJlYWs7CiAJCWNhc2UgV0lORE9XX1NFRUtfSEVB RDoKLQkJCWFic19wb3MgPSByZWxwb3M7CisJCQlpZiAobnVsbF90cmVhdG1lbnQpCisJCQkJYWJz X3BvcyA9IDA7CisJCQllbHNlCisJCQkJYWJzX3BvcyA9IHJlbHBvczsKIAkJCWJyZWFrOwogCQlj YXNlIFdJTkRPV19TRUVLX1RBSUw6CiAJCQlzcG9vbF90dXBsZXMod2luc3RhdGUsIC0xKTsKQEAg LTM0MDYsMjUgKzM3NDQsNjcgQEAgV2luR2V0RnVuY0FyZ0luUGFydGl0aW9uKFdpbmRvd09iamVj dCB3aW5vYmosIGludCBhcmdubywKIAkJCWJyZWFrOwogCX0KIAotCWdvdHR1cGxlID0gd2luZG93 X2dldHR1cGxlc2xvdCh3aW5vYmosIGFic19wb3MsIHNsb3QpOwotCi0JaWYgKCFnb3R0dXBsZSkK KwlpZiAoIW51bGxfdHJlYXRtZW50KQkJLyogSUdOT1JFIE5VTExTIGlzIG5vdCBzcGVjaWZpZWQg Ki8KIAl7Ci0JCWlmIChpc291dCkKLQkJCSppc291dCA9IHRydWU7Ci0JCSppc251bGwgPSB0cnVl OwotCQlyZXR1cm4gKERhdHVtKSAwOwotCX0KLQllbHNlCi0JewotCQlpZiAoaXNvdXQpCi0JCQkq aXNvdXQgPSBmYWxzZTsKLQkJaWYgKHNldF9tYXJrKQorCQlkYXR1bSA9IGdldHR1cGxlX2V2YWxf cGFydGl0aW9uKHdpbm9iaiwgYXJnbm8sCisJCQkJCQkJCQkJYWJzX3BvcywgaXNudWxsLCBpc291 dCk7CisJCWlmICghKmlzb3V0ICYmIHNldF9tYXJrKQogCQkJV2luU2V0TWFya1Bvc2l0aW9uKHdp bm9iaiwgYWJzX3Bvcyk7Ci0JCWVjb250ZXh0LT5lY3h0X291dGVydHVwbGUgPSBzbG90OwotCQly ZXR1cm4gRXhlY0V2YWxFeHByKChFeHByU3RhdGUgKikgbGlzdF9udGgod2lub2JqLT5hcmdzdGF0 ZXMsIGFyZ25vKSwKLQkJCQkJCQllY29udGV4dCwgaXNudWxsKTsKKwkJcmV0dXJuIGRhdHVtOwog CX0KKworCS8qCisJICogR2V0IHRoZSBuZXh0IG5vbm51bGwgdmFsdWUgaW4gdGhlIHBhcnRpdGlv biwgbW92aW5nIGZvcndhcmQgb3IgYmFja3dhcmQKKwkgKiB1bnRpbCB3ZSBmaW5kIGEgdmFsdWUg b3IgcmVhY2ggdGhlIHBhcnRpdGlvbidzIGVuZC4KKwkgKi8KKwlkbworCXsKKwkJYWJzX3BvcyAr PSBmb3J3YXJkOworCQlpZiAoYWJzX3BvcyA8IDApCisJCXsKKwkJCS8qIG91dCBvZiBwYXJ0aXRp b24gKi8KKwkJCWlmIChpc291dCkKKwkJCQkqaXNvdXQgPSB0cnVlOworCQkJKmlzbnVsbCA9IHRy dWU7CisJCQlkYXR1bSA9IDA7CisJCQlicmVhazsKKwkJfQorCisJCXN3aXRjaCAoZ2V0X25vdG51 bGxfaW5mbyh3aW5vYmosIGFic19wb3MpKQorCQl7CisJCQljYXNlIE5OX05PVE5VTEw6CS8qIHRo aXMgcm93IGlzIGtub3duIHRvIGJlIE5PVCBOVUxMICovCisJCQkJbm90bnVsbF9vZmZzZXQrKzsK KwkJCQlpZiAobm90bnVsbF9vZmZzZXQgPj0gbm90bnVsbF9yZWxwb3MpCisJCQkJeworCQkJCQkv KiBwcmVwYXJlIHRvIGV4aXQgdGhpcyBsb29wICovCisJCQkJCWRhdHVtID0gZ2V0dHVwbGVfZXZh bF9wYXJ0aXRpb24od2lub2JqLCBhcmdubywKKwkJCQkJCQkJCQkJCQlhYnNfcG9zLCBpc251bGws IGlzb3V0KTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIE5OX05VTEw6CQkvKiB0aGlzIHJv dyBpcyBrbm93biB0byBiZSBOVUxMICovCisJCQkJaWYgKGlzb3V0KQorCQkJCQkqaXNvdXQgPSBm YWxzZTsKKwkJCQkqaXNudWxsID0gdHJ1ZTsKKwkJCQlkYXR1bSA9IDA7CisJCQkJYnJlYWs7CisJ CQlkZWZhdWx0OgkJCS8qIG5lZWQgdG8gY2hlY2sgTlVMTCBvciBub3QgKi8KKwkJCQlkYXR1bSA9 IGdldHR1cGxlX2V2YWxfcGFydGl0aW9uKHdpbm9iaiwgYXJnbm8sCisJCQkJCQkJCQkJCQlhYnNf cG9zLCBpc251bGwsIGlzb3V0KTsKKwkJCQlpZiAoKmlzb3V0KQkJLyogb3V0IG9mIHBhcnRpdGlv bj8gKi8KKwkJCQkJcmV0dXJuIGRhdHVtOworCisJCQkJaWYgKCEqaXNudWxsKQorCQkJCQlub3Ru dWxsX29mZnNldCsrOworCQkJCS8qIHJlY29yZCB0aGUgcm93IHN0YXR1cyAqLworCQkJCXB1dF9u b3RudWxsX2luZm8od2lub2JqLCBhYnNfcG9zLCAqaXNudWxsKTsKKwkJCQlicmVhazsKKwkJfQor CX0gd2hpbGUgKG5vdG51bGxfb2Zmc2V0IDwgbm90bnVsbF9yZWxwb3MpOworCisJaWYgKCEqaXNv dXQgJiYgc2V0X21hcmspCisJCVdpblNldE1hcmtQb3NpdGlvbih3aW5vYmosIGFic19wb3MpOwor CisJcmV0dXJuIGRhdHVtOwogfQogCiAvKgpAQCAtMzQ3Niw2ICszODU2LDEwIEBAIFdpbkdldEZ1 bmNBcmdJbkZyYW1lKFdpbmRvd09iamVjdCB3aW5vYmosIGludCBhcmdubywKIAllY29udGV4dCA9 IHdpbnN0YXRlLT5zcy5wcy5wc19FeHByQ29udGV4dDsKIAlzbG90ID0gd2luc3RhdGUtPnRlbXBf c2xvdF8xOwogCisJaWYgKHdpbm9iai0+aWdub3JlX251bGxzID09IElHTk9SRV9OVUxMUykKKwkJ cmV0dXJuIGlnbm9yZW51bGxzX2dldGZ1bmNhcmdpbmZyYW1lKHdpbm9iaiwgYXJnbm8sIHJlbHBv cywgc2Vla3R5cGUsCisJCQkJCQkJCQkJCSBzZXRfbWFyaywgaXNudWxsLCBpc291dCk7CisKIAlz d2l0Y2ggKHNlZWt0eXBlKQogCXsKIAkJY2FzZSBXSU5ET1dfU0VFS19DVVJSRU5UOgpAQCAtMzYy NCw3ICs0MDA4LDcgQEAgV2luR2V0RnVuY0FyZ0luRnJhbWUoV2luZG93T2JqZWN0IHdpbm9iaiwg aW50IGFyZ25vLAogCQlnb3RvIG91dF9vZl9mcmFtZTsKIAogCS8qIFRoZSBjb2RlIGFib3ZlIGRv ZXMgbm90IGRldGVjdCBhbGwgb3V0LW9mLWZyYW1lIGNhc2VzLCBzbyBjaGVjayAqLwotCWlmIChy b3dfaXNfaW5fZnJhbWUod2luc3RhdGUsIGFic19wb3MsIHNsb3QpIDw9IDApCisJaWYgKHJvd19p c19pbl9mcmFtZSh3aW5vYmosIGFic19wb3MsIHNsb3QsIGZhbHNlKSA8PSAwKQogCQlnb3RvIG91 dF9vZl9mcmFtZTsKIAogCWlmIChpc291dCkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGlt aXplci91dGlsL2NsYXVzZXMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2NsYXVzZXMu YwppbmRleCBmNDUxMzFjMzRjNS4uMjc2NWQ3OTRkMjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L29wdGltaXplci91dGlsL2NsYXVzZXMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRp bC9jbGF1c2VzLmMKQEAgLTI1NzIsNiArMjU3Miw3IEBAIGV2YWxfY29uc3RfZXhwcmVzc2lvbnNf bXV0YXRvcihOb2RlICpub2RlLAogCQkJCW5ld2V4cHItPndpbnJlZiA9IGV4cHItPndpbnJlZjsK IAkJCQluZXdleHByLT53aW5zdGFyID0gZXhwci0+d2luc3RhcjsKIAkJCQluZXdleHByLT53aW5h Z2cgPSBleHByLT53aW5hZ2c7CisJCQkJbmV3ZXhwci0+aWdub3JlX251bGxzID0gZXhwci0+aWdu b3JlX251bGxzOwogCQkJCW5ld2V4cHItPmxvY2F0aW9uID0gZXhwci0+bG9jYXRpb247CiAKIAkJ CQlyZXR1cm4gKE5vZGUgKikgbmV3ZXhwcjsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNl ci9ncmFtLnkgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CmluZGV4IDcwYTBkODMyYTExLi4y N2FkZmY1ZjlkNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQorKysgYi9z cmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CkBAIC02MzEsNyArNjMxLDcgQEAgc3RhdGljIE5vZGUg Km1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5v ZGUgKnF1ZXJ5KTsKICV0eXBlIDxsaXN0Pgl3aW5kb3dfY2xhdXNlIHdpbmRvd19kZWZpbml0aW9u X2xpc3Qgb3B0X3BhcnRpdGlvbl9jbGF1c2UKICV0eXBlIDx3aW5kZWY+CXdpbmRvd19kZWZpbml0 aW9uIG92ZXJfY2xhdXNlIHdpbmRvd19zcGVjaWZpY2F0aW9uCiAJCQkJb3B0X2ZyYW1lX2NsYXVz ZSBmcmFtZV9leHRlbnQgZnJhbWVfYm91bmQKLSV0eXBlIDxpdmFsPglvcHRfd2luZG93X2V4Y2x1 c2lvbl9jbGF1c2UKKyV0eXBlIDxpdmFsPgludWxsX3RyZWF0bWVudCBvcHRfd2luZG93X2V4Y2x1 c2lvbl9jbGF1c2UKICV0eXBlIDxzdHI+CQlvcHRfZXhpc3Rpbmdfd2luZG93X25hbWUKICV0eXBl IDxib29sZWFuPiBvcHRfaWZfbm90X2V4aXN0cwogJXR5cGUgPGJvb2xlYW4+IG9wdF91bmlxdWVf bnVsbF90cmVhdG1lbnQKQEAgLTcyOSw3ICs3MjksNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vy c2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkp OwogCiAJSEFORExFUiBIQVZJTkcgSEVBREVSX1AgSE9MRCBIT1VSX1AKIAotCUlERU5USVRZX1Ag SUZfUCBJTElLRSBJTU1FRElBVEUgSU1NVVRBQkxFIElNUExJQ0lUX1AgSU1QT1JUX1AgSU5fUCBJ TkNMVURFCisJSURFTlRJVFlfUCBJRl9QIElHTk9SRV9QIElMSUtFIElNTUVESUFURSBJTU1VVEFC TEUgSU1QTElDSVRfUCBJTVBPUlRfUCBJTl9QIElOQ0xVREUKIAlJTkNMVURJTkcgSU5DUkVNRU5U IElOREVOVCBJTkRFWCBJTkRFWEVTIElOSEVSSVQgSU5IRVJJVFMgSU5JVElBTExZIElOTElORV9Q CiAJSU5ORVJfUCBJTk9VVCBJTlBVVF9QIElOU0VOU0lUSVZFIElOU0VSVCBJTlNURUFEIElOVF9Q IElOVEVHRVIKIAlJTlRFUlNFQ1QgSU5URVJWQUwgSU5UTyBJTlZPS0VSIElTIElTTlVMTCBJU09M QVRJT04KQEAgLTc2NCw3ICs3NjQsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdT ZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCiAJUkFO R0UgUkVBRCBSRUFMIFJFQVNTSUdOIFJFQ1VSU0lWRSBSRUZfUCBSRUZFUkVOQ0VTIFJFRkVSRU5D SU5HCiAJUkVGUkVTSCBSRUlOREVYIFJFTEFUSVZFX1AgUkVMRUFTRSBSRU5BTUUgUkVQRUFUQUJM RSBSRVBMQUNFIFJFUExJQ0EKLQlSRVNFVCBSRVNUQVJUIFJFU1RSSUNUIFJFVFVSTiBSRVRVUk5J TkcgUkVUVVJOUyBSRVZPS0UgUklHSFQgUk9MRSBST0xMQkFDSyBST0xMVVAKKwlSRVNFVCBSRVNQ RUNUX1AgUkVTVEFSVCBSRVNUUklDVCBSRVRVUk4gUkVUVVJOSU5HIFJFVFVSTlMgUkVWT0tFIFJJ R0hUIFJPTEUgUk9MTEJBQ0sgUk9MTFVQCiAJUk9VVElORSBST1VUSU5FUyBST1cgUk9XUyBSVUxF CiAKIAlTQVZFUE9JTlQgU0NBTEFSIFNDSEVNQSBTQ0hFTUFTIFNDUk9MTCBTRUFSQ0ggU0VDT05E X1AgU0VDVVJJVFkgU0VMRUNUCkBAIC0xNTc5Niw3ICsxNTc5Niw3IEBAIGZ1bmNfYXBwbGljYXRp b246IGZ1bmNfbmFtZSAnKCcgJyknCiAgKiAoTm90ZSB0aGF0IG1hbnkgb2YgdGhlIHNwZWNpYWwg U1FMIGZ1bmN0aW9ucyB3b3VsZG4ndCBhY3R1YWxseSBtYWtlIGFueQogICogc2Vuc2UgYXMgZnVu Y3Rpb25hbCBpbmRleCBlbnRyaWVzLCBidXQgd2UgaWdub3JlIHRoYXQgY29uc2lkZXJhdGlvbiBo ZXJlLikKICAqLwotZnVuY19leHByOiBmdW5jX2FwcGxpY2F0aW9uIHdpdGhpbl9ncm91cF9jbGF1 c2UgZmlsdGVyX2NsYXVzZSBvdmVyX2NsYXVzZQorZnVuY19leHByOiBmdW5jX2FwcGxpY2F0aW9u IHdpdGhpbl9ncm91cF9jbGF1c2UgZmlsdGVyX2NsYXVzZSBudWxsX3RyZWF0bWVudCBvdmVyX2Ns YXVzZQogCQkJCXsKIAkJCQkJRnVuY0NhbGwgICAqbiA9IChGdW5jQ2FsbCAqKSAkMTsKIApAQCAt MTU4MjksNyArMTU4MjksOCBAQCBmdW5jX2V4cHI6IGZ1bmNfYXBwbGljYXRpb24gd2l0aGluX2dy b3VwX2NsYXVzZSBmaWx0ZXJfY2xhdXNlIG92ZXJfY2xhdXNlCiAJCQkJCQluLT5hZ2dfd2l0aGlu X2dyb3VwID0gdHJ1ZTsKIAkJCQkJfQogCQkJCQluLT5hZ2dfZmlsdGVyID0gJDM7Ci0JCQkJCW4t Pm92ZXIgPSAkNDsKKwkJCQkJbi0+aWdub3JlX251bGxzID0gJDQ7CisJCQkJCW4tPm92ZXIgPSAk NTsKIAkJCQkJJCQgPSAoTm9kZSAqKSBuOwogCQkJCX0KIAkJCXwganNvbl9hZ2dyZWdhdGVfZnVu YyBmaWx0ZXJfY2xhdXNlIG92ZXJfY2xhdXNlCkBAIC0xNjQyNSw2ICsxNjQyNiwxMiBAQCBmaWx0 ZXJfY2xhdXNlOgogLyoKICAqIFdpbmRvdyBEZWZpbml0aW9ucwogICovCitudWxsX3RyZWF0bWVu dDoKKwkJCUlHTk9SRV9QIE5VTExTX1AJCQkJCQl7ICQkID0gUEFSU0VSX0lHTk9SRV9OVUxMUzsg fQorCQkJfCBSRVNQRUNUX1AgTlVMTFNfUAkJCQkJCXsgJCQgPSBQQVJTRVJfUkVTUEVDVF9OVUxM UzsgfQorCQkJfCAvKkVNUFRZKi8JCQkJCQkJCXsgJCQgPSBOT19OVUxMVFJFQVRNRU5UOyB9CisJ CTsKKwogd2luZG93X2NsYXVzZToKIAkJCVdJTkRPVyB3aW5kb3dfZGVmaW5pdGlvbl9saXN0CQkJ eyAkJCA9ICQyOyB9CiAJCQl8IC8qRU1QVFkqLwkJCQkJCQkJeyAkJCA9IE5JTDsgfQpAQCAtMTc4 NTEsNiArMTc4NTgsNyBAQCB1bnJlc2VydmVkX2tleXdvcmQ6CiAJCQl8IEhPVVJfUAogCQkJfCBJ REVOVElUWV9QCiAJCQl8IElGX1AKKwkJCXwgSUdOT1JFX1AKIAkJCXwgSU1NRURJQVRFCiAJCQl8 IElNTVVUQUJMRQogCQkJfCBJTVBMSUNJVF9QCkBAIC0xNzk2OSw2ICsxNzk3Nyw3IEBAIHVucmVz ZXJ2ZWRfa2V5d29yZDoKIAkJCXwgUkVQTEFDRQogCQkJfCBSRVBMSUNBCiAJCQl8IFJFU0VUCisJ CQl8IFJFU1BFQ1RfUAogCQkJfCBSRVNUQVJUCiAJCQl8IFJFU1RSSUNUCiAJCQl8IFJFVFVSTgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2Z1bmMuYyBiL3NyYy9iYWNrZW5k L3BhcnNlci9wYXJzZV9mdW5jLmMKaW5kZXggNTgzYmJiZjIzMmYuLjM3NzJjNTE0YjFlIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZnVuYy5jCisrKyBiL3NyYy9iYWNrZW5k L3BhcnNlci9wYXJzZV9mdW5jLmMKQEAgLTk4LDYgKzk4LDcgQEAgUGFyc2VGdW5jT3JDb2x1bW4o UGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0ICpmdW5jbmFtZSwgTGlzdCAqZmFyZ3MsCiAJYm9vbAkJ YWdnX3N0YXIgPSAoZm4gPyBmbi0+YWdnX3N0YXIgOiBmYWxzZSk7CiAJYm9vbAkJYWdnX2Rpc3Rp bmN0ID0gKGZuID8gZm4tPmFnZ19kaXN0aW5jdCA6IGZhbHNlKTsKIAlib29sCQlmdW5jX3Zhcmlh ZGljID0gKGZuID8gZm4tPmZ1bmNfdmFyaWFkaWMgOiBmYWxzZSk7CisJaW50CQkJaWdub3JlX251 bGxzID0gKGZuID8gZm4tPmlnbm9yZV9udWxscyA6IDApOwogCUNvZXJjaW9uRm9ybSBmdW5jZm9y bWF0ID0gKGZuID8gZm4tPmZ1bmNmb3JtYXQgOiBDT0VSQ0VfRVhQTElDSVRfQ0FMTCk7CiAJYm9v bAkJY291bGRfYmVfcHJvamVjdGlvbjsKIAlPaWQJCQlyZXR0eXBlOwpAQCAtNTE0LDYgKzUxNSwx MyBAQCBQYXJzZUZ1bmNPckNvbHVtbihQYXJzZVN0YXRlICpwc3RhdGUsIExpc3QgKmZ1bmNuYW1l LCBMaXN0ICpmYXJncywKIAkJCQkJCSBlcnJtc2coIiVzIGlzIG5vdCBhbiBvcmRlcmVkLXNldCBh Z2dyZWdhdGUsIHNvIGl0IGNhbm5vdCBoYXZlIFdJVEhJTiBHUk9VUCIsCiAJCQkJCQkJCU5hbWVM aXN0VG9TdHJpbmcoZnVuY25hbWUpKSwKIAkJCQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRl LCBsb2NhdGlvbikpKTsKKworCQkJLyogSXQgYWxzbyBjYW4ndCB0cmVhdCBudWxscyBhcyBhIHdp bmRvdyBmdW5jdGlvbiAqLworCQkJaWYgKGlnbm9yZV9udWxscyAhPSBOT19OVUxMVFJFQVRNRU5U KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX1dST05HX09CSkVD VF9UWVBFKSwKKwkJCQkJCSBlcnJtc2coImFnZ3JlZ2F0ZSBmdW5jdGlvbnMgZG8gbm90IGFjY2Vw dCBSRVNQRUNUL0lHTk9SRSBOVUxMUyIpLAorCQkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihwc3Rh dGUsIGxvY2F0aW9uKSkpOwogCQl9CiAJfQogCWVsc2UgaWYgKGZkcmVzdWx0ID09IEZVTkNERVRB SUxfV0lORE9XRlVOQykKQEAgLTgzNCw2ICs4NDIsNyBAQCBQYXJzZUZ1bmNPckNvbHVtbihQYXJz ZVN0YXRlICpwc3RhdGUsIExpc3QgKmZ1bmNuYW1lLCBMaXN0ICpmYXJncywKIAkJd2Z1bmMtPndp bnN0YXIgPSBhZ2dfc3RhcjsKIAkJd2Z1bmMtPndpbmFnZyA9IChmZHJlc3VsdCA9PSBGVU5DREVU QUlMX0FHR1JFR0FURSk7CiAJCXdmdW5jLT5hZ2dmaWx0ZXIgPSBhZ2dfZmlsdGVyOworCQl3ZnVu Yy0+aWdub3JlX251bGxzID0gaWdub3JlX251bGxzOwogCQl3ZnVuYy0+cnVuQ29uZGl0aW9uID0g TklMOwogCQl3ZnVuYy0+bG9jYXRpb24gPSBsb2NhdGlvbjsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1 dGlscy5jCmluZGV4IDNkNmU2YmRiZmQyLi40ZTgzN2QyYWZlYSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9y dWxldXRpbHMuYwpAQCAtMTEwOTAsNyArMTEwOTAsMTIgQEAgZ2V0X3dpbmRvd2Z1bmNfZXhwcl9o ZWxwZXIoV2luZG93RnVuYyAqd2Z1bmMsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwKIAkJZ2V0 X3J1bGVfZXhwcigoTm9kZSAqKSB3ZnVuYy0+YWdnZmlsdGVyLCBjb250ZXh0LCBmYWxzZSk7CiAJ fQogCi0JYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIpIE9WRVIgIik7CisJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZyhidWYsICIpICIpOworCisJaWYgKHdmdW5jLT5pZ25vcmVfbnVsbHMgPT0g UEFSU0VSX0lHTk9SRV9OVUxMUykKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJJR05P UkUgTlVMTFMgIik7CisKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIk9WRVIgIik7CiAK IAlpZiAoY29udGV4dC0+d2luZG93Q2xhdXNlKQogCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC93aW5kb3dmdW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3dpbmRvd2Z1 bmNzLmMKaW5kZXggYmIzNWYzYmM0YTkuLjk2OWYwMmFhNTliIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9hZHQvd2luZG93ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv d2luZG93ZnVuY3MuYwpAQCAtODYsNiArODYsNyBAQCB3aW5kb3dfcm93X251bWJlcihQR19GVU5D VElPTl9BUkdTKQogCVdpbmRvd09iamVjdCB3aW5vYmogPSBQR19XSU5ET1dfT0JKRUNUKCk7CiAJ aW50NjQJCWN1cnBvcyA9IFdpbkdldEN1cnJlbnRQb3NpdGlvbih3aW5vYmopOwogCisJV2luQ2hl Y2tBbmRJbml0aWFsaXplTnVsbFRyZWF0bWVudCh3aW5vYmosIGZhbHNlLCBmY2luZm8pOwogCVdp blNldE1hcmtQb3NpdGlvbih3aW5vYmosIGN1cnBvcyk7CiAJUEdfUkVUVVJOX0lOVDY0KGN1cnBv cyArIDEpOwogfQpAQCAtMTQxLDYgKzE0Miw3IEBAIHdpbmRvd19yYW5rKFBHX0ZVTkNUSU9OX0FS R1MpCiAJcmFua19jb250ZXh0ICpjb250ZXh0OwogCWJvb2wJCXVwOwogCisJV2luQ2hlY2tBbmRJ bml0aWFsaXplTnVsbFRyZWF0bWVudCh3aW5vYmosIGZhbHNlLCBmY2luZm8pOwogCXVwID0gcmFu a191cCh3aW5vYmopOwogCWNvbnRleHQgPSAocmFua19jb250ZXh0ICopCiAJCVdpbkdldFBhcnRp dGlvbkxvY2FsTWVtb3J5KHdpbm9iaiwgc2l6ZW9mKHJhbmtfY29udGV4dCkpOwpAQCAtMjAzLDYg KzIwNSw3IEBAIHdpbmRvd19kZW5zZV9yYW5rKFBHX0ZVTkNUSU9OX0FSR1MpCiAJcmFua19jb250 ZXh0ICpjb250ZXh0OwogCWJvb2wJCXVwOwogCisJV2luQ2hlY2tBbmRJbml0aWFsaXplTnVsbFRy ZWF0bWVudCh3aW5vYmosIGZhbHNlLCBmY2luZm8pOwogCXVwID0gcmFua191cCh3aW5vYmopOwog CWNvbnRleHQgPSAocmFua19jb250ZXh0ICopCiAJCVdpbkdldFBhcnRpdGlvbkxvY2FsTWVtb3J5 KHdpbm9iaiwgc2l6ZW9mKHJhbmtfY29udGV4dCkpOwpAQCAtMjY2LDYgKzI2OSw3IEBAIHdpbmRv d19wZXJjZW50X3JhbmsoUEdfRlVOQ1RJT05fQVJHUykKIAlpbnQ2NAkJdG90YWxyb3dzID0gV2lu R2V0UGFydGl0aW9uUm93Q291bnQod2lub2JqKTsKIAogCUFzc2VydCh0b3RhbHJvd3MgPiAwKTsK KwlXaW5DaGVja0FuZEluaXRpYWxpemVOdWxsVHJlYXRtZW50KHdpbm9iaiwgZmFsc2UsIGZjaW5m byk7CiAKIAl1cCA9IHJhbmtfdXAod2lub2JqKTsKIAljb250ZXh0ID0gKHJhbmtfY29udGV4dCAq KQpAQCAtMzM1LDYgKzMzOSw3IEBAIHdpbmRvd19jdW1lX2Rpc3QoUEdfRlVOQ1RJT05fQVJHUykK IAlpbnQ2NAkJdG90YWxyb3dzID0gV2luR2V0UGFydGl0aW9uUm93Q291bnQod2lub2JqKTsKIAog CUFzc2VydCh0b3RhbHJvd3MgPiAwKTsKKwlXaW5DaGVja0FuZEluaXRpYWxpemVOdWxsVHJlYXRt ZW50KHdpbm9iaiwgZmFsc2UsIGZjaW5mbyk7CiAKIAl1cCA9IHJhbmtfdXAod2lub2JqKTsKIAlj b250ZXh0ID0gKHJhbmtfY29udGV4dCAqKQpAQCAtNDEzLDYgKzQxOCw3IEBAIHdpbmRvd19udGls ZShQR19GVU5DVElPTl9BUkdTKQogCVdpbmRvd09iamVjdCB3aW5vYmogPSBQR19XSU5ET1dfT0JK RUNUKCk7CiAJbnRpbGVfY29udGV4dCAqY29udGV4dDsKIAorCVdpbkNoZWNrQW5kSW5pdGlhbGl6 ZU51bGxUcmVhdG1lbnQod2lub2JqLCBmYWxzZSwgZmNpbmZvKTsKIAljb250ZXh0ID0gKG50aWxl X2NvbnRleHQgKikKIAkJV2luR2V0UGFydGl0aW9uTG9jYWxNZW1vcnkod2lub2JqLCBzaXplb2Yo bnRpbGVfY29udGV4dCkpOwogCkBAIC01MzUsNiArNTQxLDcgQEAgbGVhZGxhZ19jb21tb24oRnVu Y3Rpb25DYWxsSW5mbyBmY2luZm8sCiAJYm9vbAkJaXNudWxsOwogCWJvb2wJCWlzb3V0OwogCisJ V2luQ2hlY2tBbmRJbml0aWFsaXplTnVsbFRyZWF0bWVudCh3aW5vYmosIHRydWUsIGZjaW5mbyk7 CiAJaWYgKHdpdGhvZmZzZXQpCiAJewogCQlvZmZzZXQgPSBEYXR1bUdldEludDMyKFdpbkdldEZ1 bmNBcmdDdXJyZW50KHdpbm9iaiwgMSwgJmlzbnVsbCkpOwpAQCAtNjUyLDYgKzY1OSw3IEBAIHdp bmRvd19maXJzdF92YWx1ZShQR19GVU5DVElPTl9BUkdTKQogCURhdHVtCQlyZXN1bHQ7CiAJYm9v bAkJaXNudWxsOwogCisJV2luQ2hlY2tBbmRJbml0aWFsaXplTnVsbFRyZWF0bWVudCh3aW5vYmos IHRydWUsIGZjaW5mbyk7CiAJcmVzdWx0ID0gV2luR2V0RnVuY0FyZ0luRnJhbWUod2lub2JqLCAw LAogCQkJCQkJCQkgIDAsIFdJTkRPV19TRUVLX0hFQUQsIHRydWUsCiAJCQkJCQkJCSAgJmlzbnVs bCwgTlVMTCk7CkBAIC02NzMsNiArNjgxLDcgQEAgd2luZG93X2xhc3RfdmFsdWUoUEdfRlVOQ1RJ T05fQVJHUykKIAlEYXR1bQkJcmVzdWx0OwogCWJvb2wJCWlzbnVsbDsKIAorCVdpbkNoZWNrQW5k SW5pdGlhbGl6ZU51bGxUcmVhdG1lbnQod2lub2JqLCB0cnVlLCBmY2luZm8pOwogCXJlc3VsdCA9 IFdpbkdldEZ1bmNBcmdJbkZyYW1lKHdpbm9iaiwgMCwKIAkJCQkJCQkJICAwLCBXSU5ET1dfU0VF S19UQUlMLCB0cnVlLAogCQkJCQkJCQkgICZpc251bGwsIE5VTEwpOwpAQCAtNjk2LDYgKzcwNSw3 IEBAIHdpbmRvd19udGhfdmFsdWUoUEdfRlVOQ1RJT05fQVJHUykKIAlib29sCQlpc251bGw7CiAJ aW50MzIJCW50aDsKIAorCVdpbkNoZWNrQW5kSW5pdGlhbGl6ZU51bGxUcmVhdG1lbnQod2lub2Jq LCB0cnVlLCBmY2luZm8pOwogCW50aCA9IERhdHVtR2V0SW50MzIoV2luR2V0RnVuY0FyZ0N1cnJl bnQod2lub2JqLCAxLCAmaXNudWxsKSk7CiAJaWYgKGlzbnVsbCkKIAkJUEdfUkVUVVJOX05VTEwo KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCBiL3NyYy9pbmNs dWRlL25vZGVzL3BhcnNlbm9kZXMuaAppbmRleCAyOGUyZThkYzBmZC4uNTkzM2U2NGU5YjMgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAorKysgYi9zcmMvaW5jbHVk ZS9ub2Rlcy9wYXJzZW5vZGVzLmgKQEAgLTQ1Miw2ICs0NTIsNyBAQCB0eXBlZGVmIHN0cnVjdCBG dW5jQ2FsbAogCUxpc3QJICAgKmFnZ19vcmRlcjsJCS8qIE9SREVSIEJZIChsaXN0IG9mIFNvcnRC eSkgKi8KIAlOb2RlCSAgICphZ2dfZmlsdGVyOwkJLyogRklMVEVSIGNsYXVzZSwgaWYgYW55ICov CiAJc3RydWN0IFdpbmRvd0RlZiAqb3ZlcjsJCS8qIE9WRVIgY2xhdXNlLCBpZiBhbnkgKi8KKwlp bnQJCQlpZ25vcmVfbnVsbHM7CS8qIGlnbm9yZSBudWxscyBmb3Igd2luZG93IGZ1bmN0aW9uICov CiAJYm9vbAkJYWdnX3dpdGhpbl9ncm91cDsJLyogT1JERVIgQlkgYXBwZWFyZWQgaW4gV0lUSElO IEdST1VQICovCiAJYm9vbAkJYWdnX3N0YXI7CQkvKiBhcmd1bWVudCB3YXMgcmVhbGx5ICcqJyAq LwogCWJvb2wJCWFnZ19kaXN0aW5jdDsJLyogYXJndW1lbnRzIHdlcmUgbGFiZWxlZCBESVNUSU5D VCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmggYi9zcmMvaW5j bHVkZS9ub2Rlcy9wcmltbm9kZXMuaAppbmRleCA2ZGZjYTNjYjM1Yi4uZTlkOGJmNzQxNDUgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRl L25vZGVzL3ByaW1ub2Rlcy5oCkBAIC01NzksNiArNTc5LDE3IEBAIHR5cGVkZWYgc3RydWN0IEdy b3VwaW5nRnVuYwogICogQ29sbGF0aW9uIGluZm9ybWF0aW9uIGlzIGlycmVsZXZhbnQgZm9yIHRo ZSBxdWVyeSBqdW1ibGluZywgYXMgaXMgdGhlCiAgKiBpbnRlcm5hbCBzdGF0ZSBpbmZvcm1hdGlv biBvZiB0aGUgbm9kZSBsaWtlICJ3aW5zdGFyIiBhbmQgIndpbmFnZyIuCiAgKi8KKworLyoKKyAq IE51bGwgVHJlYXRtZW50IG9wdGlvbnMuIElmIHNwZWNpZmllZCwgaW5pdGlhbGx5IHNldCB0byBQ QVJTRVJfSUdOT1JFX05VTExTCisgKiB3aGljaCBpcyB0aGVuIGNvbnZlcnRlZCB0byBJR05PUkVf TlVMTFMgaWYgdGhlIHdpbmRvdyBmdW5jdGlvbiBhbGxvd3MgdGhlCisgKiBudWxsIHRyZWF0bWVu dCBjbGF1c2UuCisgKi8KKyNkZWZpbmUgTk9fTlVMTFRSRUFUTUVOVCAwCisjZGVmaW5lIFBBUlNF Ul9JR05PUkVfTlVMTFMgMQorI2RlZmluZSBQQVJTRVJfUkVTUEVDVF9OVUxMUyAyCisjZGVmaW5l IElHTk9SRV9OVUxMUyAzCisKIHR5cGVkZWYgc3RydWN0IFdpbmRvd0Z1bmMKIHsKIAlFeHByCQl4 cHI7CkBAIC02MDIsNiArNjEzLDggQEAgdHlwZWRlZiBzdHJ1Y3QgV2luZG93RnVuYwogCWJvb2wJ CXdpbnN0YXIgcGdfbm9kZV9hdHRyKHF1ZXJ5X2p1bWJsZV9pZ25vcmUpOwogCS8qIGlzIGZ1bmN0 aW9uIGEgc2ltcGxlIGFnZ3JlZ2F0ZT8gKi8KIAlib29sCQl3aW5hZ2cgcGdfbm9kZV9hdHRyKHF1 ZXJ5X2p1bWJsZV9pZ25vcmUpOworCS8qIGlnbm9yZSBudWxscy4gT25lIG9mIHRoZSBOdWxsIFRy ZWF0bWVudCBvcHRpb25zICovCisJaW50CQkJaWdub3JlX251bGxzOwogCS8qIHRva2VuIGxvY2F0 aW9uLCBvciAtMSBpZiB1bmtub3duICovCiAJUGFyc2VMb2MJbG9jYXRpb247CiB9IFdpbmRvd0Z1 bmM7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmggYi9zcmMvaW5jbHVk ZS9wYXJzZXIva3dsaXN0LmgKaW5kZXggYTRhZjNmNzE3YTEuLjg0MTgyZWFhYWUyIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvcGFyc2Vy L2t3bGlzdC5oCkBAIC0yMDIsNiArMjAyLDcgQEAgUEdfS0VZV09SRCgiaG9sZCIsIEhPTEQsIFVO UkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImhvdXIiLCBIT1VSX1As IFVOUkVTRVJWRURfS0VZV09SRCwgQVNfTEFCRUwpCiBQR19LRVlXT1JEKCJpZGVudGl0eSIsIElE RU5USVRZX1AsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImlm IiwgSUZfUCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgiaWdu b3JlIiwgSUdOT1JFX1AsIFVOUkVTRVJWRURfS0VZV09SRCwgQVNfTEFCRUwpCiBQR19LRVlXT1JE KCJpbGlrZSIsIElMSUtFLCBUWVBFX0ZVTkNfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdf S0VZV09SRCgiaW1tZWRpYXRlIiwgSU1NRURJQVRFLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVf TEFCRUwpCiBQR19LRVlXT1JEKCJpbW11dGFibGUiLCBJTU1VVEFCTEUsIFVOUkVTRVJWRURfS0VZ V09SRCwgQkFSRV9MQUJFTCkKQEAgLTM3OCw2ICszNzksNyBAQCBQR19LRVlXT1JEKCJyZXBlYXRh YmxlIiwgUkVQRUFUQUJMRSwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZ V09SRCgicmVwbGFjZSIsIFJFUExBQ0UsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkK IFBHX0tFWVdPUkQoInJlcGxpY2EiLCBSRVBMSUNBLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVf TEFCRUwpCiBQR19LRVlXT1JEKCJyZXNldCIsIFJFU0VULCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJB UkVfTEFCRUwpCitQR19LRVlXT1JEKCJyZXNwZWN0IiwgUkVTUEVDVF9QLCBVTlJFU0VSVkVEX0tF WVdPUkQsIEFTX0xBQkVMKQogUEdfS0VZV09SRCgicmVzdGFydCIsIFJFU1RBUlQsIFVOUkVTRVJW RURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInJlc3RyaWN0IiwgUkVTVFJJQ1Qs IFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInJldHVybiIsIFJF VFVSTiwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvd2luZG93YXBpLmggYi9zcmMvaW5jbHVkZS93aW5kb3dhcGkuaAppbmRleCBjYjJlY2Ux NjZiNi4uMjBjZmQ5ZTlkZDkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3dpbmRvd2FwaS5oCisr KyBiL3NyYy9pbmNsdWRlL3dpbmRvd2FwaS5oCkBAIC0yOCw2ICsyOCw4IEBACiAjaWZuZGVmIFdJ TkRPV0FQSV9ICiAjZGVmaW5lIFdJTkRPV0FQSV9ICiAKKyNpbmNsdWRlICJmbWdyLmgiCisKIC8q IHZhbHVlcyBvZiAic2Vla3R5cGUiICovCiAjZGVmaW5lIFdJTkRPV19TRUVLX0NVUlJFTlQgMAog I2RlZmluZSBXSU5ET1dfU0VFS19IRUFEIDEKQEAgLTQxLDYgKzQzLDEwIEBAIHR5cGVkZWYgc3Ry dWN0IFdpbmRvd09iamVjdERhdGEgKldpbmRvd09iamVjdDsKICNkZWZpbmUgV2luZG93T2JqZWN0 SXNWYWxpZCh3aW5vYmopIFwKIAkoKHdpbm9iaikgIT0gTlVMTCAmJiBJc0Eod2lub2JqLCBXaW5k b3dPYmplY3REYXRhKSkKIAorZXh0ZXJuIHZvaWQgV2luQ2hlY2tBbmRJbml0aWFsaXplTnVsbFRy ZWF0bWVudChXaW5kb3dPYmplY3Qgd2lub2JqLAorCQkJCQkJCQkJCQkgICBib29sIGFsbG93TnVs bFRyZWF0bWVudCwKKwkJCQkJCQkJCQkJICAgRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8pOworCiBl eHRlcm4gdm9pZCAqV2luR2V0UGFydGl0aW9uTG9jYWxNZW1vcnkoV2luZG93T2JqZWN0IHdpbm9i aiwgU2l6ZSBzeik7CiAKIGV4dGVybiBpbnQ2NCBXaW5HZXRDdXJyZW50UG9zaXRpb24oV2luZG93 T2JqZWN0IHdpbm9iaik7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3dp bmRvdy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3dpbmRvdy5vdXQKaW5kZXggYjg2 YjY2OGY0MzMuLmY5MjlkODFiYzhhIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3dpbmRvdy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC93aW5kb3cub3V0 CkBAIC01NDUzLDMgKzU0NTMsMzE0IEBAIFNFTEVDVCAqIEZST00gcGdfdGVtcC5mKDIpOwogIHs1 fQogKDUgcm93cykKIAorLS0gSUdOT1JFIE5VTExTIHRlc3RzCitDUkVBVEUgVEVNUE9SQVJZIFRB QkxFIHBsYW5ldHMgKAorICAgIG5hbWUgdGV4dCwKKyAgICBkaXN0YW5jZSB0ZXh0LAorICAgIG9y Yml0IGludGVnZXIKKyk7CitJTlNFUlQgSU5UTyBwbGFuZXRzIFZBTFVFUworICAoJ21lcmN1cnkn LCAnY2xvc2UnLCA4OCksCisgICgndmVudXMnLCAnY2xvc2UnLCAyMjQpLAorICAoJ2VhcnRoJywg J2Nsb3NlJywgTlVMTCksCisgICgnbWFycycsICdjbG9zZScsIE5VTEwpLAorICAoJ2p1cGl0ZXIn LCAnY2xvc2UnLCA0MzMyKSwKKyAgKCdzYXR1cm4nLCAnZmFyJywgMjQ0OTEpLAorICAoJ3VyYW51 cycsICdmYXInLCBOVUxMKSwKKyAgKCduZXB0dW5lJywgJ2ZhcicsIDYwMTgyKSwKKyAgKCdwbHV0 bycsICdmYXInLCA5MDU2MCksCisgICgneHl6enknLCAnZmFyJywgTlVMTCk7CistLSB0ZXN0IHJ1 bGV1dGlscworQ1JFQVRFIFZJRVcgcGxhbmV0c192aWV3IEFTCitTRUxFQ1QgbmFtZSwKKyAgICAg ICBvcmJpdCwKKyAgICAgICBsYWcob3JiaXQpIE9WRVIgdyBBUyBsYWcsCisgICAgICAgbGFnKG9y Yml0KSBSRVNQRUNUIE5VTExTIE9WRVIgdyBBUyBsYWdfcmVzcGVjdCwKKyAgICAgICBsYWcob3Ji aXQpIElHTk9SRSBOVUxMUyBPVkVSIHcgQVMgbGFnX2lnbm9yZQorRlJPTSBwbGFuZXRzCitXSU5E T1cgdyBBUyAoT1JERVIgQlkgbmFtZSkKKzsKK05PVElDRTogIHZpZXcgInBsYW5ldHNfdmlldyIg d2lsbCBiZSBhIHRlbXBvcmFyeSB2aWV3CitTRUxFQ1QgcGdfZ2V0X3ZpZXdkZWYoJ3BsYW5ldHNf dmlldycpOworICAgICAgICAgICAgICAgICAgcGdfZ2V0X3ZpZXdkZWYgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg IFNFTEVDVCBuYW1lLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICBv cmJpdCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgbGFnKG9y Yml0KSBPVkVSIHcgQVMgbGFnLCAgICAgICAgICAgICAgICAgICArCisgICAgIGxhZyhvcmJpdCkg T1ZFUiB3IEFTIGxhZ19yZXNwZWN0LCAgICAgICAgICAgKworICAgICBsYWcob3JiaXQpIElHTk9S RSBOVUxMUyBPVkVSIHcgQVMgbGFnX2lnbm9yZSsKKyAgICBGUk9NIHBsYW5ldHMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICArCisgICBXSU5ET1cgdyBBUyAoT1JERVIgQlkgbmFtZSk7 CisoMSByb3cpCisKKy0tIGxhZworU0VMRUNUIG5hbWUsCisgICAgICAgb3JiaXQsCisgICAgICAg bGFnKG9yYml0KSBPVkVSIHcgQVMgbGFnLAorICAgICAgIGxhZyhvcmJpdCkgUkVTUEVDVCBOVUxM UyBPVkVSIHcgQVMgbGFnX3Jlc3BlY3QsCisgICAgICAgbGFnKG9yYml0KSBJR05PUkUgTlVMTFMg T1ZFUiB3IEFTIGxhZ19pZ25vcmUKK0ZST00gcGxhbmV0cworV0lORE9XIHcgQVMgKE9SREVSIEJZ IG5hbWUpCis7CisgIG5hbWUgICB8IG9yYml0IHwgIGxhZyAgfCBsYWdfcmVzcGVjdCB8IGxhZ19p Z25vcmUgCistLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tCisgZWFydGggICB8ICAgICAgIHwgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAK KyBqdXBpdGVyIHwgIDQzMzIgfCAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAgICAgIAorIG1h cnMgICAgfCAgICAgICB8ICA0MzMyIHwgICAgICAgIDQzMzIgfCAgICAgICA0MzMyCisgbWVyY3Vy eSB8ICAgIDg4IHwgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgIDQzMzIKKyBuZXB0dW5lIHwg NjAxODIgfCAgICA4OCB8ICAgICAgICAgIDg4IHwgICAgICAgICA4OAorIHBsdXRvICAgfCA5MDU2 MCB8IDYwMTgyIHwgICAgICAgNjAxODIgfCAgICAgIDYwMTgyCisgc2F0dXJuICB8IDI0NDkxIHwg OTA1NjAgfCAgICAgICA5MDU2MCB8ICAgICAgOTA1NjAKKyB1cmFudXMgIHwgICAgICAgfCAyNDQ5 MSB8ICAgICAgIDI0NDkxIHwgICAgICAyNDQ5MQorIHZlbnVzICAgfCAgIDIyNCB8ICAgICAgIHwg ICAgICAgICAgICAgfCAgICAgIDI0NDkxCisgeHl6enkgICB8ICAgICAgIHwgICAyMjQgfCAgICAg ICAgIDIyNCB8ICAgICAgICAyMjQKKygxMCByb3dzKQorCistLSBsZWFkCitTRUxFQ1QgbmFtZSwK KyAgICAgICBvcmJpdCwKKyAgICAgICBsZWFkKG9yYml0KSBPVkVSIHcgQVMgbGVhZCwKKyAgICAg ICBsZWFkKG9yYml0KSBSRVNQRUNUIE5VTExTIE9WRVIgdyBBUyBsZWFkX3Jlc3BlY3QsCisgICAg ICAgbGVhZChvcmJpdCkgSUdOT1JFIE5VTExTIE9WRVIgdyBBUyBsZWFkX2lnbm9yZQorRlJPTSBw bGFuZXRzCitXSU5ET1cgdyBBUyAoT1JERVIgQlkgbmFtZSkKKzsKKyAgbmFtZSAgIHwgb3JiaXQg fCBsZWFkICB8IGxlYWRfcmVzcGVjdCB8IGxlYWRfaWdub3JlIAorLS0tLS0tLS0tKy0tLS0tLS0r LS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tCisgZWFydGggICB8ICAgICAgIHwg IDQzMzIgfCAgICAgICAgIDQzMzIgfCAgICAgICAgNDMzMgorIGp1cGl0ZXIgfCAgNDMzMiB8ICAg ICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgODgKKyBtYXJzICAgIHwgICAgICAgfCAgICA4 OCB8ICAgICAgICAgICA4OCB8ICAgICAgICAgIDg4CisgbWVyY3VyeSB8ICAgIDg4IHwgNjAxODIg fCAgICAgICAgNjAxODIgfCAgICAgICA2MDE4MgorIG5lcHR1bmUgfCA2MDE4MiB8IDkwNTYwIHwg ICAgICAgIDkwNTYwIHwgICAgICAgOTA1NjAKKyBwbHV0byAgIHwgOTA1NjAgfCAyNDQ5MSB8ICAg ICAgICAyNDQ5MSB8ICAgICAgIDI0NDkxCisgc2F0dXJuICB8IDI0NDkxIHwgICAgICAgfCAgICAg ICAgICAgICAgfCAgICAgICAgIDIyNAorIHVyYW51cyAgfCAgICAgICB8ICAgMjI0IHwgICAgICAg ICAgMjI0IHwgICAgICAgICAyMjQKKyB2ZW51cyAgIHwgICAyMjQgfCAgICAgICB8ICAgICAgICAg ICAgICB8ICAgICAgICAgICAgCisgeHl6enkgICB8ICAgICAgIHwgICAgICAgfCAgICAgICAgICAg ICAgfCAgICAgICAgICAgIAorKDEwIHJvd3MpCisKKy0tIGZpcnN0X3ZhbHVlCitTRUxFQ1QgbmFt ZSwKKyAgICAgICBvcmJpdCwKKyAgICAgICBmaXJzdF92YWx1ZShvcmJpdCkgUkVTUEVDVCBOVUxM UyBPVkVSIHcxLAorICAgICAgIGZpcnN0X3ZhbHVlKG9yYml0KSBJR05PUkUgTlVMTFMgT1ZFUiB3 MSwKKyAgICAgICBmaXJzdF92YWx1ZShvcmJpdCkgUkVTUEVDVCBOVUxMUyBPVkVSIHcyLAorICAg ICAgIGZpcnN0X3ZhbHVlKG9yYml0KSBJR05PUkUgTlVMTFMgT1ZFUiB3MgorRlJPTSBwbGFuZXRz CitXSU5ET1cgdzEgQVMgKE9SREVSIEJZIG5hbWUgUk9XUyBCRVRXRUVOIFVOQk9VTkRFRCBQUkVD RURJTkcgQU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcpLAorICAgICAgIHcyIEFTIChPUkRFUiBCWSBu YW1lIFJPV1MgQkVUV0VFTiAyIFBSRUNFRElORyBBTkQgMiBGT0xMT1dJTkcpCis7CisgIG5hbWUg ICB8IG9yYml0IHwgZmlyc3RfdmFsdWUgfCBmaXJzdF92YWx1ZSB8IGZpcnN0X3ZhbHVlIHwgZmly c3RfdmFsdWUgCistLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tCisgZWFydGggICB8ICAgICAgIHwgICAgICAgICAg ICAgfCAgICAgICAgNDMzMiB8ICAgICAgICAgICAgIHwgICAgICAgIDQzMzIKKyBqdXBpdGVyIHwg IDQzMzIgfCAgICAgICAgICAgICB8ICAgICAgICA0MzMyIHwgICAgICAgICAgICAgfCAgICAgICAg NDMzMgorIG1hcnMgICAgfCAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAgIDQzMzIgfCAgICAg ICAgICAgICB8ICAgICAgICA0MzMyCisgbWVyY3VyeSB8ICAgIDg4IHwgICAgICAgICAgICAgfCAg ICAgICAgNDMzMiB8ICAgICAgICA0MzMyIHwgICAgICAgIDQzMzIKKyBuZXB0dW5lIHwgNjAxODIg fCAgICAgICAgICAgICB8ICAgICAgICA0MzMyIHwgICAgICAgICAgICAgfCAgICAgICAgICA4OAor IHBsdXRvICAgfCA5MDU2MCB8ICAgICAgICAgICAgIHwgICAgICAgIDQzMzIgfCAgICAgICAgICA4 OCB8ICAgICAgICAgIDg4Cisgc2F0dXJuICB8IDI0NDkxIHwgICAgICAgICAgICAgfCAgICAgICAg NDMzMiB8ICAgICAgIDYwMTgyIHwgICAgICAgNjAxODIKKyB1cmFudXMgIHwgICAgICAgfCAgICAg ICAgICAgICB8ICAgICAgICA0MzMyIHwgICAgICAgOTA1NjAgfCAgICAgICA5MDU2MAorIHZlbnVz ICAgfCAgIDIyNCB8ICAgICAgICAgICAgIHwgICAgICAgIDQzMzIgfCAgICAgICAyNDQ5MSB8ICAg ICAgIDI0NDkxCisgeHl6enkgICB8ICAgICAgIHwgICAgICAgICAgICAgfCAgICAgICAgNDMzMiB8 ICAgICAgICAgICAgIHwgICAgICAgICAyMjQKKygxMCByb3dzKQorCistLSBudGhfdmFsdWUKK1NF TEVDVCBuYW1lLAorICAgICAgIG9yYml0LAorICAgICAgIG50aF92YWx1ZShvcmJpdCwgMikgUkVT UEVDVCBOVUxMUyBPVkVSIHcxLAorICAgICAgIG50aF92YWx1ZShvcmJpdCwgMikgSUdOT1JFIE5V TExTIE9WRVIgdzEsCisgICAgICAgbnRoX3ZhbHVlKG9yYml0LCAyKSBSRVNQRUNUIE5VTExTIE9W RVIgdzIsCisgICAgICAgbnRoX3ZhbHVlKG9yYml0LCAyKSBJR05PUkUgTlVMTFMgT1ZFUiB3Mgor RlJPTSBwbGFuZXRzCitXSU5ET1cgdzEgQVMgKE9SREVSIEJZIG5hbWUgUk9XUyBCRVRXRUVOIFVO Qk9VTkRFRCBQUkVDRURJTkcgQU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcpLAorICAgICAgIHcyIEFT IChPUkRFUiBCWSBuYW1lIFJPV1MgQkVUV0VFTiAyIFBSRUNFRElORyBBTkQgMiBGT0xMT1dJTkcp Cis7CisgIG5hbWUgICB8IG9yYml0IHwgbnRoX3ZhbHVlIHwgbnRoX3ZhbHVlIHwgbnRoX3ZhbHVl IHwgbnRoX3ZhbHVlIAorLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0KKyBlYXJ0aCAgIHwgICAgICAgfCAgICAgIDQzMzIgfCAg ICAgICAgODggfCAgICAgIDQzMzIgfCAgICAgICAgICAKKyBqdXBpdGVyIHwgIDQzMzIgfCAgICAg IDQzMzIgfCAgICAgICAgODggfCAgICAgIDQzMzIgfCAgICAgICAgODgKKyBtYXJzICAgIHwgICAg ICAgfCAgICAgIDQzMzIgfCAgICAgICAgODggfCAgICAgIDQzMzIgfCAgICAgICAgODgKKyBtZXJj dXJ5IHwgICAgODggfCAgICAgIDQzMzIgfCAgICAgICAgODggfCAgICAgICAgICAgfCAgICAgICAg ODgKKyBuZXB0dW5lIHwgNjAxODIgfCAgICAgIDQzMzIgfCAgICAgICAgODggfCAgICAgICAgODgg fCAgICAgNjAxODIKKyBwbHV0byAgIHwgOTA1NjAgfCAgICAgIDQzMzIgfCAgICAgICAgODggfCAg ICAgNjAxODIgfCAgICAgNjAxODIKKyBzYXR1cm4gIHwgMjQ0OTEgfCAgICAgIDQzMzIgfCAgICAg ICAgODggfCAgICAgOTA1NjAgfCAgICAgOTA1NjAKKyB1cmFudXMgIHwgICAgICAgfCAgICAgIDQz MzIgfCAgICAgICAgODggfCAgICAgMjQ0OTEgfCAgICAgMjQ0OTEKKyB2ZW51cyAgIHwgICAyMjQg fCAgICAgIDQzMzIgfCAgICAgICAgODggfCAgICAgICAgICAgfCAgICAgICAyMjQKKyB4eXp6eSAg IHwgICAgICAgfCAgICAgIDQzMzIgfCAgICAgICAgODggfCAgICAgICAyMjQgfCAgICAgICAgICAK KygxMCByb3dzKQorCistLSBsYXN0X3ZhbHVlCitTRUxFQ1QgbmFtZSwKKyAgICAgICBvcmJpdCwK KyAgICAgICBsYXN0X3ZhbHVlKG9yYml0KSBSRVNQRUNUIE5VTExTIE9WRVIgdzEsCisgICAgICAg bGFzdF92YWx1ZShvcmJpdCkgSUdOT1JFIE5VTExTIE9WRVIgdzEsCisgICAgICAgbGFzdF92YWx1 ZShvcmJpdCkgUkVTUEVDVCBOVUxMUyBPVkVSIHcyLAorICAgICAgIGxhc3RfdmFsdWUob3JiaXQp IElHTk9SRSBOVUxMUyBPVkVSIHcyCitGUk9NIHBsYW5ldHMKK1dJTkRPVyB3MSBBUyAoT1JERVIg QlkgbmFtZSBST1dTIEJFVFdFRU4gVU5CT1VOREVEIFBSRUNFRElORyBBTkQgVU5CT1VOREVEIEZP TExPV0lORyksCisgICAgICAgdzIgQVMgKE9SREVSIEJZIG5hbWUgUk9XUyBCRVRXRUVOIDIgUFJF Q0VESU5HIEFORCAyIEZPTExPV0lORykKKzsKKyAgbmFtZSAgIHwgb3JiaXQgfCBsYXN0X3ZhbHVl IHwgbGFzdF92YWx1ZSB8IGxhc3RfdmFsdWUgfCBsYXN0X3ZhbHVlIAorLS0tLS0tLS0tKy0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tCisg ZWFydGggICB8ICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAyMjQgfCAgICAgICAgICAgIHwg ICAgICAgNDMzMgorIGp1cGl0ZXIgfCAgNDMzMiB8ICAgICAgICAgICAgfCAgICAgICAgMjI0IHwg ICAgICAgICA4OCB8ICAgICAgICAgODgKKyBtYXJzICAgIHwgICAgICAgfCAgICAgICAgICAgIHwg ICAgICAgIDIyNCB8ICAgICAgNjAxODIgfCAgICAgIDYwMTgyCisgbWVyY3VyeSB8ICAgIDg4IHwg ICAgICAgICAgICB8ICAgICAgICAyMjQgfCAgICAgIDkwNTYwIHwgICAgICA5MDU2MAorIG5lcHR1 bmUgfCA2MDE4MiB8ICAgICAgICAgICAgfCAgICAgICAgMjI0IHwgICAgICAyNDQ5MSB8ICAgICAg MjQ0OTEKKyBwbHV0byAgIHwgOTA1NjAgfCAgICAgICAgICAgIHwgICAgICAgIDIyNCB8ICAgICAg ICAgICAgfCAgICAgIDI0NDkxCisgc2F0dXJuICB8IDI0NDkxIHwgICAgICAgICAgICB8ICAgICAg ICAyMjQgfCAgICAgICAgMjI0IHwgICAgICAgIDIyNAorIHVyYW51cyAgfCAgICAgICB8ICAgICAg ICAgICAgfCAgICAgICAgMjI0IHwgICAgICAgICAgICB8ICAgICAgICAyMjQKKyB2ZW51cyAgIHwg ICAyMjQgfCAgICAgICAgICAgIHwgICAgICAgIDIyNCB8ICAgICAgICAgICAgfCAgICAgICAgMjI0 CisgeHl6enkgICB8ICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAyMjQgfCAgICAgICAgICAg IHwgICAgICAgIDIyNAorKDEwIHJvd3MpCisKKy0tIGV4Y2x1ZGUgY3VycmVudCByb3cKK1NFTEVD VCBuYW1lLAorICAgICAgIG9yYml0LAorICAgICAgIGZpcnN0X3ZhbHVlKG9yYml0KSBJR05PUkUg TlVMTFMgT1ZFUiB3LAorICAgICAgIGxhc3RfdmFsdWUob3JiaXQpIElHTk9SRSBOVUxMUyBPVkVS IHcsCisgICAgICAgbnRoX3ZhbHVlKG9yYml0LCAyKSBJR05PUkUgTlVMTFMgT1ZFUiB3LAorICAg ICAgIGxlYWQob3JiaXQsIDEpIElHTk9SRSBOVUxMUyBPVkVSIHcgQVMgbGVhZF9pZ25vcmUsCisg ICAgICAgbGFnKG9yYml0LCAxKSBJR05PUkUgTlVMTFMgT1ZFUiB3IEFTIGxhZ19pZ25vcmUKK0ZS T00gcGxhbmV0cworV0lORE9XIHcgQVMgKE9SREVSIEJZIG5hbWUgUk9XUyBCRVRXRUVOIDIgUFJF Q0VESU5HIEFORCAyIEZPTExPV0lORyBFWENMVURFIENVUlJFTlQgUk9XKQorOworICBuYW1lICAg fCBvcmJpdCB8IGZpcnN0X3ZhbHVlIHwgbGFzdF92YWx1ZSB8IG50aF92YWx1ZSB8IGxlYWRfaWdu b3JlIHwgbGFnX2lnbm9yZSAKKy0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tCisgZWFydGggICB8 ICAgICAgIHwgICAgICAgIDQzMzIgfCAgICAgICA0MzMyIHwgICAgICAgICAgIHwgICAgICAgIDQz MzIgfCAgICAgICAgICAgCisganVwaXRlciB8ICA0MzMyIHwgICAgICAgICAgODggfCAgICAgICAg IDg4IHwgICAgICAgICAgIHwgICAgICAgICAgODggfCAgICAgICAgICAgCisgbWFycyAgICB8ICAg ICAgIHwgICAgICAgIDQzMzIgfCAgICAgIDYwMTgyIHwgICAgICAgIDg4IHwgICAgICAgICAgODgg fCAgICAgICA0MzMyCisgbWVyY3VyeSB8ICAgIDg4IHwgICAgICAgIDQzMzIgfCAgICAgIDkwNTYw IHwgICAgIDYwMTgyIHwgICAgICAgNjAxODIgfCAgICAgICA0MzMyCisgbmVwdHVuZSB8IDYwMTgy IHwgICAgICAgICAgODggfCAgICAgIDI0NDkxIHwgICAgIDkwNTYwIHwgICAgICAgOTA1NjAgfCAg ICAgICAgIDg4CisgcGx1dG8gICB8IDkwNTYwIHwgICAgICAgICAgODggfCAgICAgIDI0NDkxIHwg ICAgIDYwMTgyIHwgICAgICAgMjQ0OTEgfCAgICAgIDYwMTgyCisgc2F0dXJuICB8IDI0NDkxIHwg ICAgICAgNjAxODIgfCAgICAgICAgMjI0IHwgICAgIDkwNTYwIHwgICAgICAgICAyMjQgfCAgICAg IDkwNTYwCisgdXJhbnVzICB8ICAgICAgIHwgICAgICAgOTA1NjAgfCAgICAgICAgMjI0IHwgICAg IDI0NDkxIHwgICAgICAgICAyMjQgfCAgICAgIDI0NDkxCisgdmVudXMgICB8ICAgMjI0IHwgICAg ICAgMjQ0OTEgfCAgICAgIDI0NDkxIHwgICAgICAgICAgIHwgICAgICAgICAgICAgfCAgICAgIDI0 NDkxCisgeHl6enkgICB8ICAgICAgIHwgICAgICAgICAyMjQgfCAgICAgICAgMjI0IHwgICAgICAg ICAgIHwgICAgICAgICAgICAgfCAgICAgICAgMjI0CisoMTAgcm93cykKKworLS0gdmFsaWQgYW5k IGludmFsaWQgZnVuY3Rpb25zCitTRUxFQ1Qgc3VtKG9yYml0KSBPVkVSICgpIEZST00gcGxhbmV0 czsgLS0gc3VjY2VlZHMKKyAgc3VtICAgCistLS0tLS0tLQorIDE3OTg3NworIDE3OTg3NworIDE3 OTg3NworIDE3OTg3NworIDE3OTg3NworIDE3OTg3NworIDE3OTg3NworIDE3OTg3NworIDE3OTg3 NworIDE3OTg3NworKDEwIHJvd3MpCisKK1NFTEVDVCBzdW0ob3JiaXQpIFJFU1BFQ1QgTlVMTFMg T1ZFUiAoKSBGUk9NIHBsYW5ldHM7IC0tIGZhaWxzCitFUlJPUjogIGFnZ3JlZ2F0ZSBmdW5jdGlv bnMgZG8gbm90IGFjY2VwdCBSRVNQRUNUL0lHTk9SRSBOVUxMUworTElORSAxOiBTRUxFQ1Qgc3Vt KG9yYml0KSBSRVNQRUNUIE5VTExTIE9WRVIgKCkgRlJPTSBwbGFuZXRzOworICAgICAgICAgICAg ICAgXgorU0VMRUNUIHN1bShvcmJpdCkgSUdOT1JFIE5VTExTIE9WRVIgKCkgRlJPTSBwbGFuZXRz OyAtLSBmYWlscworRVJST1I6ICBhZ2dyZWdhdGUgZnVuY3Rpb25zIGRvIG5vdCBhY2NlcHQgUkVT UEVDVC9JR05PUkUgTlVMTFMKK0xJTkUgMTogU0VMRUNUIHN1bShvcmJpdCkgSUdOT1JFIE5VTExT IE9WRVIgKCkgRlJPTSBwbGFuZXRzOworICAgICAgICAgICAgICAgXgorU0VMRUNUIHJvd19udW1i ZXIoKSBPVkVSICgpIEZST00gcGxhbmV0czsgLS0gc3VjY2VlZHMKKyByb3dfbnVtYmVyIAorLS0t LS0tLS0tLS0tCisgICAgICAgICAgMQorICAgICAgICAgIDIKKyAgICAgICAgICAzCisgICAgICAg ICAgNAorICAgICAgICAgIDUKKyAgICAgICAgICA2CisgICAgICAgICAgNworICAgICAgICAgIDgK KyAgICAgICAgICA5CisgICAgICAgICAxMAorKDEwIHJvd3MpCisKK1NFTEVDVCByb3dfbnVtYmVy KCkgUkVTUEVDVCBOVUxMUyBPVkVSICgpIEZST00gcGxhbmV0czsgLS0gZmFpbHMKK0VSUk9SOiAg ZnVuY3Rpb24gcm93X251bWJlciBkb2VzIG5vdCBhbGxvdyBSRVNQRUNUL0lHTk9SRSBOVUxMUwor U0VMRUNUIHJvd19udW1iZXIoKSBJR05PUkUgTlVMTFMgT1ZFUiAoKSBGUk9NIHBsYW5ldHM7IC0t IGZhaWxzCitFUlJPUjogIGZ1bmN0aW9uIHJvd19udW1iZXIgZG9lcyBub3QgYWxsb3cgUkVTUEVD VC9JR05PUkUgTlVMTFMKKy0tIHRlc3QgdHdvIGNvbnNlY3V0aXZlIG51bGxzCit1cGRhdGUgcGxh bmV0cyBzZXQgb3JiaXQ9bnVsbCB3aGVyZSBuYW1lPSdqdXBpdGVyJzsKK1NFTEVDVCBuYW1lLAor ICAgICAgIG9yYml0LAorICAgICAgIGZpcnN0X3ZhbHVlKG9yYml0KSBJR05PUkUgTlVMTFMgT1ZF UiB3LAorICAgICAgIGxhc3RfdmFsdWUob3JiaXQpIElHTk9SRSBOVUxMUyBPVkVSIHcsCisgICAg ICAgbnRoX3ZhbHVlKG9yYml0LCAyKSBJR05PUkUgTlVMTFMgT1ZFUiB3LAorICAgICAgIGxlYWQo b3JiaXQsIDEpIElHTk9SRSBOVUxMUyBPVkVSIHcgQVMgbGVhZF9pZ25vcmUsCisgICAgICAgbGFn KG9yYml0LCAxKSBJR05PUkUgTlVMTFMgT1ZFUiB3IEFTIGxhZ19pZ25vcmUKK0ZST00gcGxhbmV0 cworV0lORE9XIHcgQVMgKE9SREVSIEJZIG5hbWUgUk9XUyBCRVRXRUVOIDIgUFJFQ0VESU5HIEFO RCAyIEZPTExPV0lORykKKzsKKyAgbmFtZSAgIHwgb3JiaXQgfCBmaXJzdF92YWx1ZSB8IGxhc3Rf dmFsdWUgfCBudGhfdmFsdWUgfCBsZWFkX2lnbm9yZSB8IGxhZ19pZ25vcmUgCistLS0tLS0tLS0r LS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLQorIGVhcnRoICAgfCAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAg ICAgICB8ICAgICAgICAgICB8ICAgICAgICAgIDg4IHwgICAgICAgICAgIAorIGp1cGl0ZXIgfCAg ICAgICB8ICAgICAgICAgIDg4IHwgICAgICAgICA4OCB8ICAgICAgICAgICB8ICAgICAgICAgIDg4 IHwgICAgICAgICAgIAorIG1hcnMgICAgfCAgICAgICB8ICAgICAgICAgIDg4IHwgICAgICA2MDE4 MiB8ICAgICA2MDE4MiB8ICAgICAgICAgIDg4IHwgICAgICAgICAgIAorIG1lcmN1cnkgfCAgICA4 OCB8ICAgICAgICAgIDg4IHwgICAgICA5MDU2MCB8ICAgICA2MDE4MiB8ICAgICAgIDYwMTgyIHwg ICAgICAgICAgIAorIG5lcHR1bmUgfCA2MDE4MiB8ICAgICAgICAgIDg4IHwgICAgICAyNDQ5MSB8 ICAgICA2MDE4MiB8ICAgICAgIDkwNTYwIHwgICAgICAgICA4OAorIHBsdXRvICAgfCA5MDU2MCB8 ICAgICAgICAgIDg4IHwgICAgICAyNDQ5MSB8ICAgICA2MDE4MiB8ICAgICAgIDI0NDkxIHwgICAg ICA2MDE4MgorIHNhdHVybiAgfCAyNDQ5MSB8ICAgICAgIDYwMTgyIHwgICAgICAgIDIyNCB8ICAg ICA5MDU2MCB8ICAgICAgICAgMjI0IHwgICAgICA5MDU2MAorIHVyYW51cyAgfCAgICAgICB8ICAg ICAgIDkwNTYwIHwgICAgICAgIDIyNCB8ICAgICAyNDQ5MSB8ICAgICAgICAgMjI0IHwgICAgICAy NDQ5MQorIHZlbnVzICAgfCAgIDIyNCB8ICAgICAgIDI0NDkxIHwgICAgICAgIDIyNCB8ICAgICAg IDIyNCB8ICAgICAgICAgICAgIHwgICAgICAyNDQ5MQorIHh5enp5ICAgfCAgICAgICB8ICAgICAg ICAgMjI0IHwgICAgICAgIDIyNCB8ICAgICAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAgIDIy NAorKDEwIHJvd3MpCisKKy0tIHRlc3QgcGFydGl0aW9ucworU0VMRUNUIG5hbWUsCisgICAgICAg ZGlzdGFuY2UsCisgICAgICAgb3JiaXQsCisgICAgICAgZmlyc3RfdmFsdWUob3JiaXQpIElHTk9S RSBOVUxMUyBPVkVSIHcsCisgICAgICAgbGFzdF92YWx1ZShvcmJpdCkgSUdOT1JFIE5VTExTIE9W RVIgdywKKyAgICAgICBudGhfdmFsdWUob3JiaXQsIDIpIElHTk9SRSBOVUxMUyBPVkVSIHcsCisg ICAgICAgbGVhZChvcmJpdCwgMSkgSUdOT1JFIE5VTExTIE9WRVIgdyBBUyBsZWFkX2lnbm9yZSwK KyAgICAgICBsYWcob3JiaXQsIDEpIElHTk9SRSBOVUxMUyBPVkVSIHcgQVMgbGFnX2lnbm9yZQor RlJPTSBwbGFuZXRzCitXSU5ET1cgdyBBUyAoUEFSVElUSU9OIEJZIGRpc3RhbmNlIE9SREVSIEJZ IG5hbWUgUk9XUyBCRVRXRUVOIDIgUFJFQ0VESU5HIEFORCAyIEZPTExPV0lORykKKzsKKyAgbmFt ZSAgIHwgZGlzdGFuY2UgfCBvcmJpdCB8IGZpcnN0X3ZhbHVlIHwgbGFzdF92YWx1ZSB8IG50aF92 YWx1ZSB8IGxlYWRfaWdub3JlIHwgbGFnX2lnbm9yZSAKKy0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0KKyBlYXJ0aCAgIHwgY2xvc2UgICAgfCAgICAgICB8ICAgICAgICAgICAg IHwgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgIDg4IHwgICAgICAgICAgIAorIGp1 cGl0ZXIgfCBjbG9zZSAgICB8ICAgICAgIHwgICAgICAgICAgODggfCAgICAgICAgIDg4IHwgICAg ICAgICAgIHwgICAgICAgICAgODggfCAgICAgICAgICAgCisgbWFycyAgICB8IGNsb3NlICAgIHwg ICAgICAgfCAgICAgICAgICA4OCB8ICAgICAgICAyMjQgfCAgICAgICAyMjQgfCAgICAgICAgICA4 OCB8ICAgICAgICAgICAKKyBtZXJjdXJ5IHwgY2xvc2UgICAgfCAgICA4OCB8ICAgICAgICAgIDg4 IHwgICAgICAgIDIyNCB8ICAgICAgIDIyNCB8ICAgICAgICAgMjI0IHwgICAgICAgICAgIAorIHZl bnVzICAgfCBjbG9zZSAgICB8ICAgMjI0IHwgICAgICAgICAgODggfCAgICAgICAgMjI0IHwgICAg ICAgMjI0IHwgICAgICAgICAgICAgfCAgICAgICAgIDg4CisgbmVwdHVuZSB8IGZhciAgICAgIHwg NjAxODIgfCAgICAgICA2MDE4MiB8ICAgICAgMjQ0OTEgfCAgICAgOTA1NjAgfCAgICAgICA5MDU2 MCB8ICAgICAgICAgICAKKyBwbHV0byAgIHwgZmFyICAgICAgfCA5MDU2MCB8ICAgICAgIDYwMTgy IHwgICAgICAyNDQ5MSB8ICAgICA5MDU2MCB8ICAgICAgIDI0NDkxIHwgICAgICA2MDE4MgorIHNh dHVybiAgfCBmYXIgICAgICB8IDI0NDkxIHwgICAgICAgNjAxODIgfCAgICAgIDI0NDkxIHwgICAg IDkwNTYwIHwgICAgICAgICAgICAgfCAgICAgIDkwNTYwCisgdXJhbnVzICB8IGZhciAgICAgIHwg ICAgICAgfCAgICAgICA5MDU2MCB8ICAgICAgMjQ0OTEgfCAgICAgMjQ0OTEgfCAgICAgICAgICAg ICB8ICAgICAgMjQ0OTEKKyB4eXp6eSAgIHwgZmFyICAgICAgfCAgICAgICB8ICAgICAgIDI0NDkx IHwgICAgICAyNDQ5MSB8ICAgICAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAyNDQ5MQorKDEw IHJvd3MpCisKKy0tIG50aF92YWx1ZSB3aXRob3V0IG51bGxzCitTRUxFQ1QgeCwKKyAgICAgICBu dGhfdmFsdWUoeCwyKSBJR05PUkUgTlVMTFMgT1ZFUiB3CitGUk9NIGdlbmVyYXRlX3Nlcmllcygx LDUpIGcoeCkKK1dJTkRPVyB3IEFTIChPUkRFUiBCWSB4IFJPV1MgQkVUV0VFTiAyIFBSRUNFRElO RyBBTkQgMiBGT0xMT1dJTkcgRVhDTFVERSBDVVJSRU5UIFJPVyk7CisgeCB8IG50aF92YWx1ZSAK Ky0tLSstLS0tLS0tLS0tLQorIDEgfCAgICAgICAgIDMKKyAyIHwgICAgICAgICAzCisgMyB8ICAg ICAgICAgMgorIDQgfCAgICAgICAgIDMKKyA1IHwgICAgICAgICA0CisoNSByb3dzKQorCitTRUxF Q1QgeCwKKyAgICAgICBudGhfdmFsdWUoeCwyKSBJR05PUkUgTlVMTFMgT1ZFUiB3CitGUk9NIGdl bmVyYXRlX3NlcmllcygxLDUpIGcoeCkKK1dJTkRPVyB3IEFTIChPUkRFUiBCWSB4IFJPV1MgQkVU V0VFTiAyIFBSRUNFRElORyBBTkQgMiBGT0xMT1dJTkcpOworIHggfCBudGhfdmFsdWUgCistLS0r LS0tLS0tLS0tLS0KKyAxIHwgICAgICAgICAyCisgMiB8ICAgICAgICAgMgorIDMgfCAgICAgICAg IDIKKyA0IHwgICAgICAgICAzCisgNSB8ICAgICAgICAgNAorKDUgcm93cykKKworLS1jbGVhbnVw CitEUk9QIFRBQkxFIHBsYW5ldHMgQ0FTQ0FERTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8g dmlldyBwbGFuZXRzX3ZpZXcKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3dpbmRv dy5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC93aW5kb3cuc3FsCmluZGV4IDAyZjEwNWYwNzBl Li4xZjhjODY2OTQzNiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvd2luZG93LnNx bAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC93aW5kb3cuc3FsCkBAIC0xOTU4LDMgKzE5NTgs MTUwIEBAICQkIExBTkdVQUdFIFNRTCBTVEFCTEU7CiAKIEVYUExBSU4gKGNvc3RzIG9mZikgU0VM RUNUICogRlJPTSBwZ190ZW1wLmYoMik7CiBTRUxFQ1QgKiBGUk9NIHBnX3RlbXAuZigyKTsKKwor LS0gSUdOT1JFIE5VTExTIHRlc3RzCisKK0NSRUFURSBURU1QT1JBUlkgVEFCTEUgcGxhbmV0cyAo CisgICAgbmFtZSB0ZXh0LAorICAgIGRpc3RhbmNlIHRleHQsCisgICAgb3JiaXQgaW50ZWdlcgor KTsKKworSU5TRVJUIElOVE8gcGxhbmV0cyBWQUxVRVMKKyAgKCdtZXJjdXJ5JywgJ2Nsb3NlJywg ODgpLAorICAoJ3ZlbnVzJywgJ2Nsb3NlJywgMjI0KSwKKyAgKCdlYXJ0aCcsICdjbG9zZScsIE5V TEwpLAorICAoJ21hcnMnLCAnY2xvc2UnLCBOVUxMKSwKKyAgKCdqdXBpdGVyJywgJ2Nsb3NlJywg NDMzMiksCisgICgnc2F0dXJuJywgJ2ZhcicsIDI0NDkxKSwKKyAgKCd1cmFudXMnLCAnZmFyJywg TlVMTCksCisgICgnbmVwdHVuZScsICdmYXInLCA2MDE4MiksCisgICgncGx1dG8nLCAnZmFyJywg OTA1NjApLAorICAoJ3h5enp5JywgJ2ZhcicsIE5VTEwpOworCistLSB0ZXN0IHJ1bGV1dGlscwor Q1JFQVRFIFZJRVcgcGxhbmV0c192aWV3IEFTCitTRUxFQ1QgbmFtZSwKKyAgICAgICBvcmJpdCwK KyAgICAgICBsYWcob3JiaXQpIE9WRVIgdyBBUyBsYWcsCisgICAgICAgbGFnKG9yYml0KSBSRVNQ RUNUIE5VTExTIE9WRVIgdyBBUyBsYWdfcmVzcGVjdCwKKyAgICAgICBsYWcob3JiaXQpIElHTk9S RSBOVUxMUyBPVkVSIHcgQVMgbGFnX2lnbm9yZQorRlJPTSBwbGFuZXRzCitXSU5ET1cgdyBBUyAo T1JERVIgQlkgbmFtZSkKKzsKK1NFTEVDVCBwZ19nZXRfdmlld2RlZigncGxhbmV0c192aWV3Jyk7 CisKKy0tIGxhZworU0VMRUNUIG5hbWUsCisgICAgICAgb3JiaXQsCisgICAgICAgbGFnKG9yYml0 KSBPVkVSIHcgQVMgbGFnLAorICAgICAgIGxhZyhvcmJpdCkgUkVTUEVDVCBOVUxMUyBPVkVSIHcg QVMgbGFnX3Jlc3BlY3QsCisgICAgICAgbGFnKG9yYml0KSBJR05PUkUgTlVMTFMgT1ZFUiB3IEFT IGxhZ19pZ25vcmUKK0ZST00gcGxhbmV0cworV0lORE9XIHcgQVMgKE9SREVSIEJZIG5hbWUpCis7 CisKKy0tIGxlYWQKK1NFTEVDVCBuYW1lLAorICAgICAgIG9yYml0LAorICAgICAgIGxlYWQob3Ji aXQpIE9WRVIgdyBBUyBsZWFkLAorICAgICAgIGxlYWQob3JiaXQpIFJFU1BFQ1QgTlVMTFMgT1ZF UiB3IEFTIGxlYWRfcmVzcGVjdCwKKyAgICAgICBsZWFkKG9yYml0KSBJR05PUkUgTlVMTFMgT1ZF UiB3IEFTIGxlYWRfaWdub3JlCitGUk9NIHBsYW5ldHMKK1dJTkRPVyB3IEFTIChPUkRFUiBCWSBu YW1lKQorOworCistLSBmaXJzdF92YWx1ZQorU0VMRUNUIG5hbWUsCisgICAgICAgb3JiaXQsCisg ICAgICAgZmlyc3RfdmFsdWUob3JiaXQpIFJFU1BFQ1QgTlVMTFMgT1ZFUiB3MSwKKyAgICAgICBm aXJzdF92YWx1ZShvcmJpdCkgSUdOT1JFIE5VTExTIE9WRVIgdzEsCisgICAgICAgZmlyc3RfdmFs dWUob3JiaXQpIFJFU1BFQ1QgTlVMTFMgT1ZFUiB3MiwKKyAgICAgICBmaXJzdF92YWx1ZShvcmJp dCkgSUdOT1JFIE5VTExTIE9WRVIgdzIKK0ZST00gcGxhbmV0cworV0lORE9XIHcxIEFTIChPUkRF UiBCWSBuYW1lIFJPV1MgQkVUV0VFTiBVTkJPVU5ERUQgUFJFQ0VESU5HIEFORCBVTkJPVU5ERUQg Rk9MTE9XSU5HKSwKKyAgICAgICB3MiBBUyAoT1JERVIgQlkgbmFtZSBST1dTIEJFVFdFRU4gMiBQ UkVDRURJTkcgQU5EIDIgRk9MTE9XSU5HKQorOworCistLSBudGhfdmFsdWUKK1NFTEVDVCBuYW1l LAorICAgICAgIG9yYml0LAorICAgICAgIG50aF92YWx1ZShvcmJpdCwgMikgUkVTUEVDVCBOVUxM UyBPVkVSIHcxLAorICAgICAgIG50aF92YWx1ZShvcmJpdCwgMikgSUdOT1JFIE5VTExTIE9WRVIg dzEsCisgICAgICAgbnRoX3ZhbHVlKG9yYml0LCAyKSBSRVNQRUNUIE5VTExTIE9WRVIgdzIsCisg ICAgICAgbnRoX3ZhbHVlKG9yYml0LCAyKSBJR05PUkUgTlVMTFMgT1ZFUiB3MgorRlJPTSBwbGFu ZXRzCitXSU5ET1cgdzEgQVMgKE9SREVSIEJZIG5hbWUgUk9XUyBCRVRXRUVOIFVOQk9VTkRFRCBQ UkVDRURJTkcgQU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcpLAorICAgICAgIHcyIEFTIChPUkRFUiBC WSBuYW1lIFJPV1MgQkVUV0VFTiAyIFBSRUNFRElORyBBTkQgMiBGT0xMT1dJTkcpCis7CisKKy0t IGxhc3RfdmFsdWUKK1NFTEVDVCBuYW1lLAorICAgICAgIG9yYml0LAorICAgICAgIGxhc3RfdmFs dWUob3JiaXQpIFJFU1BFQ1QgTlVMTFMgT1ZFUiB3MSwKKyAgICAgICBsYXN0X3ZhbHVlKG9yYml0 KSBJR05PUkUgTlVMTFMgT1ZFUiB3MSwKKyAgICAgICBsYXN0X3ZhbHVlKG9yYml0KSBSRVNQRUNU IE5VTExTIE9WRVIgdzIsCisgICAgICAgbGFzdF92YWx1ZShvcmJpdCkgSUdOT1JFIE5VTExTIE9W RVIgdzIKK0ZST00gcGxhbmV0cworV0lORE9XIHcxIEFTIChPUkRFUiBCWSBuYW1lIFJPV1MgQkVU V0VFTiBVTkJPVU5ERUQgUFJFQ0VESU5HIEFORCBVTkJPVU5ERUQgRk9MTE9XSU5HKSwKKyAgICAg ICB3MiBBUyAoT1JERVIgQlkgbmFtZSBST1dTIEJFVFdFRU4gMiBQUkVDRURJTkcgQU5EIDIgRk9M TE9XSU5HKQorOworCistLSBleGNsdWRlIGN1cnJlbnQgcm93CitTRUxFQ1QgbmFtZSwKKyAgICAg ICBvcmJpdCwKKyAgICAgICBmaXJzdF92YWx1ZShvcmJpdCkgSUdOT1JFIE5VTExTIE9WRVIgdywK KyAgICAgICBsYXN0X3ZhbHVlKG9yYml0KSBJR05PUkUgTlVMTFMgT1ZFUiB3LAorICAgICAgIG50 aF92YWx1ZShvcmJpdCwgMikgSUdOT1JFIE5VTExTIE9WRVIgdywKKyAgICAgICBsZWFkKG9yYml0 LCAxKSBJR05PUkUgTlVMTFMgT1ZFUiB3IEFTIGxlYWRfaWdub3JlLAorICAgICAgIGxhZyhvcmJp dCwgMSkgSUdOT1JFIE5VTExTIE9WRVIgdyBBUyBsYWdfaWdub3JlCitGUk9NIHBsYW5ldHMKK1dJ TkRPVyB3IEFTIChPUkRFUiBCWSBuYW1lIFJPV1MgQkVUV0VFTiAyIFBSRUNFRElORyBBTkQgMiBG T0xMT1dJTkcgRVhDTFVERSBDVVJSRU5UIFJPVykKKzsKKworLS0gdmFsaWQgYW5kIGludmFsaWQg ZnVuY3Rpb25zCitTRUxFQ1Qgc3VtKG9yYml0KSBPVkVSICgpIEZST00gcGxhbmV0czsgLS0gc3Vj Y2VlZHMKK1NFTEVDVCBzdW0ob3JiaXQpIFJFU1BFQ1QgTlVMTFMgT1ZFUiAoKSBGUk9NIHBsYW5l dHM7IC0tIGZhaWxzCitTRUxFQ1Qgc3VtKG9yYml0KSBJR05PUkUgTlVMTFMgT1ZFUiAoKSBGUk9N IHBsYW5ldHM7IC0tIGZhaWxzCitTRUxFQ1Qgcm93X251bWJlcigpIE9WRVIgKCkgRlJPTSBwbGFu ZXRzOyAtLSBzdWNjZWVkcworU0VMRUNUIHJvd19udW1iZXIoKSBSRVNQRUNUIE5VTExTIE9WRVIg KCkgRlJPTSBwbGFuZXRzOyAtLSBmYWlscworU0VMRUNUIHJvd19udW1iZXIoKSBJR05PUkUgTlVM TFMgT1ZFUiAoKSBGUk9NIHBsYW5ldHM7IC0tIGZhaWxzCisKKy0tIHRlc3QgdHdvIGNvbnNlY3V0 aXZlIG51bGxzCit1cGRhdGUgcGxhbmV0cyBzZXQgb3JiaXQ9bnVsbCB3aGVyZSBuYW1lPSdqdXBp dGVyJzsKK1NFTEVDVCBuYW1lLAorICAgICAgIG9yYml0LAorICAgICAgIGZpcnN0X3ZhbHVlKG9y Yml0KSBJR05PUkUgTlVMTFMgT1ZFUiB3LAorICAgICAgIGxhc3RfdmFsdWUob3JiaXQpIElHTk9S RSBOVUxMUyBPVkVSIHcsCisgICAgICAgbnRoX3ZhbHVlKG9yYml0LCAyKSBJR05PUkUgTlVMTFMg T1ZFUiB3LAorICAgICAgIGxlYWQob3JiaXQsIDEpIElHTk9SRSBOVUxMUyBPVkVSIHcgQVMgbGVh ZF9pZ25vcmUsCisgICAgICAgbGFnKG9yYml0LCAxKSBJR05PUkUgTlVMTFMgT1ZFUiB3IEFTIGxh Z19pZ25vcmUKK0ZST00gcGxhbmV0cworV0lORE9XIHcgQVMgKE9SREVSIEJZIG5hbWUgUk9XUyBC RVRXRUVOIDIgUFJFQ0VESU5HIEFORCAyIEZPTExPV0lORykKKzsKKworLS0gdGVzdCBwYXJ0aXRp b25zCitTRUxFQ1QgbmFtZSwKKyAgICAgICBkaXN0YW5jZSwKKyAgICAgICBvcmJpdCwKKyAgICAg ICBmaXJzdF92YWx1ZShvcmJpdCkgSUdOT1JFIE5VTExTIE9WRVIgdywKKyAgICAgICBsYXN0X3Zh bHVlKG9yYml0KSBJR05PUkUgTlVMTFMgT1ZFUiB3LAorICAgICAgIG50aF92YWx1ZShvcmJpdCwg MikgSUdOT1JFIE5VTExTIE9WRVIgdywKKyAgICAgICBsZWFkKG9yYml0LCAxKSBJR05PUkUgTlVM TFMgT1ZFUiB3IEFTIGxlYWRfaWdub3JlLAorICAgICAgIGxhZyhvcmJpdCwgMSkgSUdOT1JFIE5V TExTIE9WRVIgdyBBUyBsYWdfaWdub3JlCitGUk9NIHBsYW5ldHMKK1dJTkRPVyB3IEFTIChQQVJU SVRJT04gQlkgZGlzdGFuY2UgT1JERVIgQlkgbmFtZSBST1dTIEJFVFdFRU4gMiBQUkVDRURJTkcg QU5EIDIgRk9MTE9XSU5HKQorOworCistLSBudGhfdmFsdWUgd2l0aG91dCBudWxscworU0VMRUNU IHgsCisgICAgICAgbnRoX3ZhbHVlKHgsMikgSUdOT1JFIE5VTExTIE9WRVIgdworRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSw1KSBnKHgpCitXSU5ET1cgdyBBUyAoT1JERVIgQlkgeCBST1dTIEJFVFdF RU4gMiBQUkVDRURJTkcgQU5EIDIgRk9MTE9XSU5HIEVYQ0xVREUgQ1VSUkVOVCBST1cpOworU0VM RUNUIHgsCisgICAgICAgbnRoX3ZhbHVlKHgsMikgSUdOT1JFIE5VTExTIE9WRVIgdworRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSw1KSBnKHgpCitXSU5ET1cgdyBBUyAoT1JERVIgQlkgeCBST1dTIEJF VFdFRU4gMiBQUkVDRURJTkcgQU5EIDIgRk9MTE9XSU5HKTsKKworLS1jbGVhbnVwCitEUk9QIFRB QkxFIHBsYW5ldHMgQ0FTQ0FERTsKLS0gCjIuMjUuMQoK ----Next_Part(Mon_Jul__7_14_37_37_2025_529)----