Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.92) (envelope-from ) id 1jEBdk-0005n4-27 for pgsql-hackers@arkaria.postgresql.org; Tue, 17 Mar 2020 12:48:13 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1jEBdi-0006gJ-HM for pgsql-hackers@arkaria.postgresql.org; Tue, 17 Mar 2020 12:48:10 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1jEBdi-0006fk-3K for pgsql-hackers@lists.postgresql.org; Tue, 17 Mar 2020 12:48:10 +0000 Received: from cyclops.postgrespro.ru ([93.174.131.138] helo=mail.postgrespro.ru) by magus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1jEBde-0006VF-AZ for pgsql-hackers@postgresql.org; Tue, 17 Mar 2020 12:48:09 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id EE6A121C4B91 for ; Tue, 17 Mar 2020 15:47:59 +0300 (MSK) X-Virus-Scanned: Debian amavisd-new at postgrespro.ru X-Spam-Flag: NO X-Spam-Score: 0 X-Spam-Level: X-Spam-Status: No, score=x tagged_above=-99 required=4 WHITELISTED tests=[] autolearn=unavailable Received: from mail.postgrespro.ru (cyclops.l.postgrespro.ru [192.168.27.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id A7A8021C47E8 for ; Tue, 17 Mar 2020 15:47:54 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1584449279; bh=cagcRJ++lF8rcFqQvZkA12Em48AYqiEhjPdzGra1Gao=; h=Date:From:To:Subject:In-Reply-To:References; b=MI40a1iifCrI7A5d5Q+08YzPc4nphB1z5bCanB2oI2KiDm7gX2NXBtKWBc4lcB/Jc Y9i/DuZjUVUfbFhslh/j157XfsN5zE7Ap3V22vZwVAMA52rGeUNjXpo/rgCaEWMzwp W7LrZa3hvpwU9Y/hhx+PR28GnA3YGUypmw1IbZjY= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_5266681fc5ef265f2d82ff65f05c21f8" Content-Transfer-Encoding: 7bit Date: Tue, 17 Mar 2020 15:47:54 +0300 From: Kartyshov Ivan To: pgsql-hackers@postgresql.org Subject: Re: [HACKERS] make async slave to wait for lsn to be replayed In-Reply-To: References: <195e2d07ead315b1620f1a053313f490@postgrespro.ru> User-Agent: Roundcube Webmail/1.4.0 Message-ID: <774cef59db63a150b6127da2428cba7d@postgrespro.ru> X-Sender: i.kartyshov@postgrespro.ru List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=_5266681fc5ef265f2d82ff65f05c21f8 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed I made some improvements over old implementation WAIT FOR. Synopsis ========== WAIT FOR [ANY | SOME | ALL] event [, event ...] and event is: LSN value options TIMESTAMP value and options is: TIMEOUT delay UNTIL TIMESTAMP timestamp ALL - option used by default. P.S. Now I testing BEGIN base WAIT prototype as discussed earlier. -- Ivan Kartyshov Postgres Professional: http://www.postgrespro.com The Russian Postgres Company --=_5266681fc5ef265f2d82ff65f05c21f8 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=wait_for_v3.patch Content-Disposition: attachment; filename=wait_for_v3.patch; size=33323 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvYWxsZmlsZXMuc2dtbCBiL2RvYy9zcmMvc2dt bC9yZWYvYWxsZmlsZXMuc2dtbAppbmRleCA4ZDkxZjM1MjllLi44Njk3Zjk4MDdmIDEwMDY0NAot LS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2FsbGZpbGVzLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3Jl Zi9hbGxmaWxlcy5zZ21sCkBAIC0xODcsNiArMTg3LDcgQEAgQ29tcGxldGUgbGlzdCBvZiB1c2Fi bGUgc2dtbCBzb3VyY2UgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuCiA8IUVOVElUWSB1cGRhdGUg ICAgICAgICAgICAgU1lTVEVNICJ1cGRhdGUuc2dtbCI+CiA8IUVOVElUWSB2YWN1dW0gICAgICAg ICAgICAgU1lTVEVNICJ2YWN1dW0uc2dtbCI+CiA8IUVOVElUWSB2YWx1ZXMgICAgICAgICAgICAg U1lTVEVNICJ2YWx1ZXMuc2dtbCI+Cis8IUVOVElUWSB3YWl0ICAgICAgICAgICAgICAgU1lTVEVN ICJ3YWl0LnNnbWwiPgogCiA8IS0tIGFwcGxpY2F0aW9ucyBhbmQgdXRpbGl0aWVzIC0tPgogPCFF TlRJVFkgY2x1c3RlcmRiICAgICAgICAgIFNZU1RFTSAiY2x1c3RlcmRiLnNnbWwiPgpkaWZmIC0t Z2l0IGEvZG9jL3NyYy9zZ21sL3JlZi93YWl0LnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3dhaXQu c2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi45YTc5NTI0Nzc5Ci0t LSAvZGV2L251bGwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi93YWl0LnNnbWwKQEAgLTAsMCArMSwx MzggQEAKKzwhLS0KK2RvYy9zcmMvc2dtbC9yZWYvd2FpdGxzbi5zZ21sCitQb3N0Z3JlU1FMIGRv Y3VtZW50YXRpb24KKy0tPgorCis8cmVmZW50cnkgaWQ9InNxbC13YWl0bHNuIj4KKyA8aW5kZXh0 ZXJtIHpvbmU9InNxbC13YWl0bHNuIj4KKyAgPHByaW1hcnk+V0FJVCBGT1I8L3ByaW1hcnk+Cisg PC9pbmRleHRlcm0+CisKKyA8cmVmbWV0YT4KKyAgPHJlZmVudHJ5dGl0bGU+V0FJVCBGT1I8L3Jl ZmVudHJ5dGl0bGU+CisgIDxtYW52b2xudW0+NzwvbWFudm9sbnVtPgorICA8cmVmbWlzY2luZm8+ U1FMIC0gTGFuZ3VhZ2UgU3RhdGVtZW50czwvcmVmbWlzY2luZm8+CisgPC9yZWZtZXRhPgorCisg PHJlZm5hbWVkaXY+CisgIDxyZWZuYW1lPldBSVQgRk9SPC9yZWZuYW1lPgorICA8cmVmcHVycG9z ZT53YWl0IGZvciB0aGUgdGFyZ2V0IDxhY3JvbnltPkxTTjwvYWNyb255bT4gdG8gYmUgcmVwbGF5 ZWQ8L3JlZnB1cnBvc2U+CisgPC9yZWZuYW1lZGl2PgorCisgPHJlZnN5bm9wc2lzZGl2PgorPHN5 bm9wc2lzPgorV0FJVCBGT1IgTFNOICc8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bHNu X251bWJlcjwvcmVwbGFjZWFibGU+JworV0FJVCBGT1IgTFNOICc8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+bHNuX251bWJlcjwvcmVwbGFjZWFibGU+JyBUSU1FT1VUIDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj53YWl0X3RpbWVvdXQ8L3JlcGxhY2VhYmxlPgorV0FJVCBGT1Ig TFNOICc8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bHNuX251bWJlcjwvcmVwbGFjZWFi bGU+JyBVTlRJTCBUSU1FU1RBTVAgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPndhaXRf dGltZTwvcmVwbGFjZWFibGU+CitXQUlUIEZPUiBUSU1FU1RBTVAgPHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPndhaXRfdGltZTwvcmVwbGFjZWFibGU+CitXQUlUIEZPUiBBTEwgTFNOICc8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bHNuX251bWJlcjwvcmVwbGFjZWFibGU+JyBU SU1FT1VUIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj53YWl0X3RpbWVvdXQ8L3JlcGxh Y2VhYmxlPiwgVElNRVNUQU1QIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj53YWl0X3Rp bWU8L3JlcGxhY2VhYmxlPgorV0FJVCBGT1IgQU5ZIExTTiAnPHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPmxzbl9udW1iZXI8L3JlcGxhY2VhYmxlPicsIFRJTUVTVEFNUCA8cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+d2FpdF90aW1lPC9yZXBsYWNlYWJsZT4KKzwvc3lub3BzaXM+ CisgPC9yZWZzeW5vcHNpc2Rpdj4KKworIDxyZWZzZWN0MT4KKyAgPHRpdGxlPkRlc2NyaXB0aW9u PC90aXRsZT4KKworICA8cGFyYT4KKyAgIDxjb21tYW5kPldBSVQgRk9SPC9jb21tYW5kPiBwcm92 aWRlcyBhIHNpbXBsZQorICAgaW50ZXJwcm9jZXNzIGNvbW11bmljYXRpb24gbWVjaGFuaXNtIHRv IHdhaXQgZm9yIHRpbWVzdGFtcCBvciB0aGUgdGFyZ2V0IGxvZyBzZXF1ZW5jZQorICAgbnVtYmVy ICg8YWNyb255bT5MU048L2Fjcm9ueW0+KSBvbiBzdGFuZGJ5IGluIDxwcm9kdWN0bmFtZT5Qb3N0 Z3JlU1FMPC9wcm9kdWN0bmFtZT4KKyAgIGRhdGFiYXNlcyB3aXRoIG1hc3Rlci1zdGFuZGJ5IGFz eW5jaHJvbm91cyByZXBsaWNhdGlvbi4gV2hlbiBydW4gd2l0aCB0aGUKKyAgIDxyZXBsYWNlYWJs ZT5MU048L3JlcGxhY2VhYmxlPiBvcHRpb24sIHRoZSA8Y29tbWFuZD5XQUlUIEZPUjwvY29tbWFu ZD4gY29tbWFuZAorICAgd2FpdHMgZm9yIHRoZSBzcGVjaWZpZWQgPGFjcm9ueW0+TFNOPC9hY3Jv bnltPiB0byBiZSByZXBsYXllZC4gQnkgZGVmYXVsdCwgd2FpdAorICAgdGltZSBpcyB1bmxpbWl0 ZWQuIFdhaXRpbmcgY2FuIGJlIGludGVycnVwdGVkIHVzaW5nIDxsaXRlcmFsPkN0cmwrQzwvbGl0 ZXJhbD4sIG9yCisgICBieSBzaHV0dGluZyBkb3duIHRoZSA8bGl0ZXJhbD5wb3N0Z3JlczwvbGl0 ZXJhbD4gc2VydmVyLiBZb3UgY2FuIGFsc28gbGltaXQgdGhlIHdhaXQKKyAgIHRpbWUgdXNpbmcg dGhlIDxvcHRpb24+VElNRU9VVDwvb3B0aW9uPiBvcHRpb24uCisgIDwvcGFyYT4KKworIDwvcmVm c2VjdDE+CisKKyA8cmVmc2VjdDE+CisgIDx0aXRsZT5QYXJhbWV0ZXJzPC90aXRsZT4KKworICA8 dmFyaWFibGVsaXN0PgorICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT48cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+TFNOPC9yZXBsYWNlYWJsZT48L3Rlcm0+CisgICAgPGxpc3RpdGVt PgorICAgICA8cGFyYT4KKyAgICAgIFNwZWNpZnkgdGhlIHRhcmdldCBsb2cgc2VxdWVuY2UgbnVt YmVyIHRvIHdhaXQgZm9yLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFy bGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPlRJTUVPVVQgPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPndhaXRfdGltZW91dDwvcmVwbGFjZWFibGU+PC90ZXJt PgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBMaW1pdCB0aGUgdGltZSBpbnRl cnZhbCB0byB3YWl0IGZvciB0aGUgTFNOIHRvIGJlIHJlcGxheWVkLgorICAgICAgVGhlIHNwZWNp ZmllZCA8cmVwbGFjZWFibGU+d2FpdF90aW1lb3V0PC9yZXBsYWNlYWJsZT4gbXVzdCBiZSBhbiBp bnRlZ2VyCisgICAgICBhbmQgaXMgbWVhc3VyZWQgaW4gbWlsbGlzZWNvbmRzLgorICAgICA8L3Bh cmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVu dHJ5PgorICAgIDx0ZXJtPlVOVElMIFRJTUVTVEFNUCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+d2FpdF90aW1lPC9yZXBsYWNlYWJsZT48L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAg ICA8cGFyYT4KKyAgICAgIExpbWl0IHRoZSB0aW1lIHRvIHdhaXQgZm9yIHRoZSBMU04gdG8gYmUg cmVwbGF5ZWQuCisgICAgICBUaGUgc3BlY2lmaWVkIDxyZXBsYWNlYWJsZT53YWl0X3RpbWU8L3Jl cGxhY2VhYmxlPiBtdXN0IGJlIHRpbWVzdGFtcC4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0 ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICA8L3ZhcmlhYmxlbGlzdD4KKyA8L3JlZnNlY3Qx PgorCisgPHJlZnNlY3QxPgorICA8dGl0bGU+RXhhbXBsZXM8L3RpdGxlPgorCisgIDxwYXJhPgor ICAgUnVuIDxsaXRlcmFsPldBSVQgRk9SPC9saXRlcmFsPiBmcm9tIDxhcHBsaWNhdGlvbj5wc3Fs PC9hcHBsaWNhdGlvbj4sCisgICBsaW1pdGluZyB3YWl0IHRpbWUgdG8gMTAwMDAgbWlsbGlzZWNv bmRzOgorCis8c2NyZWVuPgorV0FJVCBGT1IgTFNOICcwLzNGMDdBNkIxJyBUSU1FT1VUIDEwMDAw OworTk9USUNFOiAgTFNOIGlzIG5vdCByZWFjaGVkLiBUcnkgdG8gaW5jcmVhc2Ugd2FpdCB0aW1l LgorTFNOIHJlYWNoZWQKKy0tLS0tLS0tLS0tLS0KKyBmCisoMSByb3cpCis8L3NjcmVlbj4KKyAg PC9wYXJhPgorCisgIDxwYXJhPgorICAgV2FpdCB1bnRpbCB0aGUgc3BlY2lmaWVkIDxhY3Jvbnlt PkxTTjwvYWNyb255bT4gaXMgcmVwbGF5ZWQ6Cis8c2NyZWVuPgorV0FJVCBGT1IgTFNOICcwLzNG MDdBNjExJzsKK0xTTiByZWFjaGVkCistLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorPC9zY3Jl ZW4+CisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIExpbWl0IDxhY3JvbnltPkxTTjwvYWNyb255 bT4gd2FpdCB0aW1lIHRvIDUwMDAwMCBtaWxsaXNlY29uZHMsIGFuZCB0aGVuIGNhbmNlbCB0aGUg Y29tbWFuZDoKKzxzY3JlZW4+CitXQUlUIEZPUiBMU04gJzAvM0YwRkY3OTEnIFRJTUVPVVQgNTAw MDAwOworXkNDYW5jZWwgcmVxdWVzdCBzZW50CitOT1RJQ0U6ICBMU04gaXMgbm90IHJlYWNoZWQu IFRyeSB0byBpbmNyZWFzZSB3YWl0IHRpbWUuCitFUlJPUjogIGNhbmNlbGluZyBzdGF0ZW1lbnQg ZHVlIHRvIHVzZXIgcmVxdWVzdAorIExTTiByZWFjaGVkCistLS0tLS0tLS0tLS0tCisgZgorKDEg cm93KQorPC9zY3JlZW4+Cis8L3BhcmE+CisgPC9yZWZzZWN0MT4KKworIDxyZWZzZWN0MT4KKyAg PHRpdGxlPkNvbXBhdGliaWxpdHk8L3RpdGxlPgorCisgIDxwYXJhPgorICAgVGhlcmUgaXMgbm8g PGNvbW1hbmQ+V0FJVCBGT1I8L2NvbW1hbmQ+IHN0YXRlbWVudCBpbiB0aGUgU1FMCisgICBzdGFu ZGFyZC4KKyAgPC9wYXJhPgorIDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5PgpkaWZmIC0tZ2l0IGEv ZG9jL3NyYy9zZ21sL3JlZmVyZW5jZS5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZmVyZW5jZS5zZ21s CmluZGV4IGNlZjA5ZGQzOGIuLjU4OGU5NmFhMTQgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9y ZWZlcmVuY2Uuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmZXJlbmNlLnNnbWwKQEAgLTIxNSw2 ICsyMTUsNyBAQAogICAgJnVwZGF0ZTsKICAgICZ2YWN1dW07CiAgICAmdmFsdWVzOworICAgJndh aXQ7CiAKICA8L3JlZmVyZW5jZT4KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0veGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCmluZGV4IDQz NjE1Njg4ODIuLmY3ZjVhNzYyMTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3hsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKQEAgLTQx LDYgKzQxLDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL3BnX2RhdGFiYXNlLmgiCiAjaW5jbHVkZSAi Y29tbWFuZHMvcHJvZ3Jlc3MuaCIKICNpbmNsdWRlICJjb21tYW5kcy90YWJsZXNwYWNlLmgiCisj aW5jbHVkZSAiY29tbWFuZHMvd2FpdC5oIgogI2luY2x1ZGUgImNvbW1vbi9jb250cm9sZGF0YV91 dGlscy5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnX3RyYWNlLmgiCkBA IC03Mjg1LDYgKzcyODYsMTUgQEAgU3RhcnR1cFhMT0codm9pZCkKIAkJCQkJYnJlYWs7CiAJCQkJ fQogCisJCQkJLyoKKwkJCQkgKiBJZiBsYXN0UmVwbGF5ZWRFbmRSZWNQdHIgd2FzIHVwZGF0ZWQs CisJCQkJICogc2V0IGxhdGNoZXMgaW4gU0hNRU0gYXJyYXkuCisJCQkJICovCisJCQkJaWYgKFhM b2dDdGwtPmxhc3RSZXBsYXllZEVuZFJlY1B0ciA+PSBHZXRNaW5XYWl0KCkpCisJCQkJeworCQkJ CQlXYWl0U2V0TGF0Y2goWExvZ0N0bC0+bGFzdFJlcGxheWVkRW5kUmVjUHRyKTsKKwkJCQl9CisK IAkJCQkvKiBFbHNlLCB0cnkgdG8gZmV0Y2ggdGhlIG5leHQgV0FMIHJlY29yZCAqLwogCQkJCXJl Y29yZCA9IFJlYWRSZWNvcmQoeGxvZ3JlYWRlciwgTE9HLCBmYWxzZSk7CiAJCQl9IHdoaWxlIChy ZWNvcmQgIT0gTlVMTCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmls ZSBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCmluZGV4IGQ0ODE1ZDNjZTYuLjliMzEw OTI2YzEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCisrKyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCkBAIC01Nyw2ICs1Nyw3IEBAIE9CSlMgPSBcCiAJ dXNlci5vIFwKIAl2YWN1dW0ubyBcCiAJdmFyaWFibGUubyBcCi0Jdmlldy5vCisJdmlldy5vIFwK Kwl3YWl0Lm8KIAogaW5jbHVkZSAkKHRvcF9zcmNkaXIpL3NyYy9iYWNrZW5kL2NvbW1vbi5tawpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvd2FpdC5jIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvd2FpdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjE3YTIw MWIzMWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy93YWl0LmMKQEAg LTAsMCArMSwzMDggQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHdhaXQuYworICoJICBJ bXBsZW1lbnRzIFdBSVQgLSBhIHV0aWxpdHkgY29tbWFuZCB0aGF0IGFsbG93cworICoJICB3YWl0 aW5nIGZvciBMU04gdG8gaGF2ZSBiZWVuIHJlcGxheWVkIG9uIHJlcGxpY2EuCisgKgorICogUG9y dGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjAsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMjAsIFJlZ2VudHMgb2YgUG9z dGdyZXNQcm8KKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9jb21tYW5k cy93YWl0LmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdy ZXMuaCIKKyNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJmbWdyLmgiCisjaW5jbHVkZSAi YWNjZXNzL3RyYW5zYW0uaCIKKyNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgorI2luY2x1ZGUgImFj Y2Vzcy94bG9nZGVmcy5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9nLmgiCisjaW5jbHVkZSAiY2F0 YWxvZy9wZ190eXBlLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvd2FpdC5oIgorI2luY2x1ZGUgImZ1 bmNhcGkuaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJzdG9yYWdlL2JhY2tl bmRpZC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCisjaW5jbHVkZSAic3RvcmFnZS9sYXRj aC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcG1zaWduYWwuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3By b2MuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zcGlu LmgiCisjaW5jbHVkZSAic3RvcmFnZS9zaW52YWxhZHQuaCIKKyNpbmNsdWRlICJ1dGlscy9idWls dGlucy5oIgorI2luY2x1ZGUgInV0aWxzL3BnX2xzbi5oIgorI2luY2x1ZGUgInV0aWxzL3RpbWVz dGFtcC5oIgorI2luY2x1ZGUgImV4ZWN1dG9yL3NwaS5oIgorI2luY2x1ZGUgInV0aWxzL2ZtZ3Jw cm90b3MuaCIKKworLyogQWRkIHRvIC8gZGVsZXRlIGZyb20gc2htZW0gYXJyYXkgKi8KK3N0YXRp YyB2b2lkIEFkZEV2ZW50KFhMb2dSZWNQdHIgdHJnX2xzbik7CitzdGF0aWMgdm9pZCBEZWxldGVF dmVudCh2b2lkKTsKKworLyogU2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmVzICovCit0eXBlZGVmIHN0 cnVjdAoreworCVhMb2dSZWNQdHIJdHJnX2xzbjsKKwkvKgorCSAqIExlZnQgc3RydWN0IEJJRFN0 YXRlIGhlcmUgZm9yIGNvbXBhdGliaWxpdHkgd2l0aAorCSAqIGEgcGxhbm5lZCBmdXR1cmUgcGF0 Y2ggdGhhdCB3aWxsIGFsbG93IHdhaXRpbmcgZm9yIFhJRHMuCisJICovCit9IEJJRFN0YXRlOwor Cit0eXBlZGVmIHN0cnVjdAoreworCWludAkJCWJhY2tlbmRfbWF4aWQ7CisJWExvZ1JlY1B0cglt aW5fbHNuOworCXNsb2NrX3QJCW11dGV4OworCUJJRFN0YXRlCWV2ZW50X2FycltGTEVYSUJMRV9B UlJBWV9NRU1CRVJdOworfSBHbG9iU3RhdGU7CisKK3N0YXRpYyB2b2xhdGlsZSBHbG9iU3RhdGUg KnN0YXRlOworCisvKiBBZGQgZXZlbnQgb2YgdGhlIGN1cnJlbnQgYmFja2VuZCB0byBzaG1lbSBh cnJheSAqLworc3RhdGljIHZvaWQKK0FkZEV2ZW50KFhMb2dSZWNQdHIgdHJnX2xzbikKK3sKKwlT cGluTG9ja0FjcXVpcmUoJnN0YXRlLT5tdXRleCk7CisJaWYgKHN0YXRlLT5iYWNrZW5kX21heGlk IDwgTXlCYWNrZW5kSWQpCisJCXN0YXRlLT5iYWNrZW5kX21heGlkID0gTXlCYWNrZW5kSWQ7CisK KwlzdGF0ZS0+ZXZlbnRfYXJyW015QmFja2VuZElkXS50cmdfbHNuID0gdHJnX2xzbjsKKworCWlm ICh0cmdfbHNuIDwgc3RhdGUtPm1pbl9sc24pCisJCXN0YXRlLT5taW5fbHNuID0gdHJnX2xzbjsK KwlTcGluTG9ja1JlbGVhc2UoJnN0YXRlLT5tdXRleCk7Cit9CisKKy8qCisgKiBEZWxldGUgZXZl bnQgb2YgdGhlIGN1cnJlbnQgYmFja2VuZCBmcm9tIHRoZSBzaGFyZWQgYXJyYXkuCisgKgorICog VE9ETzogQ29uc2lkZXIgc3RhdGUgY2xlYW51cCBvbiBiYWNrZW5kIGZhaWx1cmUuCisgKi8KK3N0 YXRpYyB2b2lkCitEZWxldGVFdmVudCh2b2lkKQoreworCWludCBpOworCVhMb2dSZWNQdHIgdHJn X2xzbiA9IHN0YXRlLT5ldmVudF9hcnJbTXlCYWNrZW5kSWRdLnRyZ19sc247CisKKwlzdGF0ZS0+ ZXZlbnRfYXJyW015QmFja2VuZElkXS50cmdfbHNuID0gSW52YWxpZFhMb2dSZWNQdHI7CisKKwlT cGluTG9ja0FjcXVpcmUoJnN0YXRlLT5tdXRleCk7CisJLyogVXBkYXRlIHN0YXRlLT5taW5fbHNu IGlmZiBpdCBpcyBuZXNzZXNhcnkgZm9yIGNob29zaW5nIG5leHQgbWluX2xzbiAqLworCWlmIChz dGF0ZS0+bWluX2xzbiA9PSB0cmdfbHNuKQorCXsKKwkJc3RhdGUtPm1pbl9sc24gPSBQR19VSU5U NjRfTUFYOworCQlmb3IgKGkgPSAyOyBpIDw9IHN0YXRlLT5iYWNrZW5kX21heGlkOyBpKyspCisJ CQlpZiAoc3RhdGUtPmV2ZW50X2FycltpXS50cmdfbHNuICE9IEludmFsaWRYTG9nUmVjUHRyICYm CisJCQkJc3RhdGUtPmV2ZW50X2FycltpXS50cmdfbHNuIDwgc3RhdGUtPm1pbl9sc24pCisJCQkJ c3RhdGUtPm1pbl9sc24gPSBzdGF0ZS0+ZXZlbnRfYXJyW2ldLnRyZ19sc247CisJfQorCisJaWYg KHN0YXRlLT5iYWNrZW5kX21heGlkID09IE15QmFja2VuZElkKQorCQlmb3IgKGkgPSAoTXlCYWNr ZW5kSWQpOyBpID49MjsgaS0tKQorCQkJaWYgKHN0YXRlLT5ldmVudF9hcnJbaV0udHJnX2xzbiAh PSBJbnZhbGlkWExvZ1JlY1B0cikKKwkJCXsKKwkJCQlzdGF0ZS0+YmFja2VuZF9tYXhpZCA9IGk7 CisJCQkJYnJlYWs7CisJCQl9CisKKwlTcGluTG9ja1JlbGVhc2UoJnN0YXRlLT5tdXRleCk7Cit9 CisKKy8qIEdldCBzaXplIG9mIHNoYXJlZCBtZW1vcnkgZm9yIEdsb2JTdGF0ZSAqLworU2l6ZQor V2FpdFNobWVtU2l6ZSh2b2lkKQoreworCXJldHVybiBvZmZzZXRvZihHbG9iU3RhdGUsIGV2ZW50 X2FycikgKyBzaXplb2YoQklEU3RhdGUpICogKE1heEJhY2tlbmRzKzEpOworfQorCisvKiBJbml0 IGFycmF5IG9mIGV2ZW50cyBpbiBzaGFyZWQgbWVtb3J5ICovCit2b2lkCitXYWl0U2htZW1Jbml0 KHZvaWQpCit7CisJYm9vbAlmb3VuZDsKKwl1aW50MzIJaTsKKworCXN0YXRlID0gKEdsb2JTdGF0 ZSAqKSBTaG1lbUluaXRTdHJ1Y3QoInBnX3dhaXRfbHNuIiwKKwkJCQkJCQkJCQkgIFdhaXRTaG1l bVNpemUoKSwKKwkJCQkJCQkJCQkgICZmb3VuZCk7CisJaWYgKCFmb3VuZCkKKwl7CisJCVNwaW5M b2NrSW5pdCgmc3RhdGUtPm11dGV4KTsKKworCQlmb3IgKGkgPSAwOyBpIDwgKE1heEJhY2tlbmRz KzEpOyBpKyspCisJCQlzdGF0ZS0+ZXZlbnRfYXJyW2ldLnRyZ19sc24gPSBJbnZhbGlkWExvZ1Jl Y1B0cjsKKworCQlzdGF0ZS0+YmFja2VuZF9tYXhpZCA9IDA7CisJCXN0YXRlLT5taW5fbHNuID0g UEdfVUlOVDY0X01BWDsKKwl9Cit9CisKKy8qIFNldCBhbGwgbGF0Y2hlcyBpbiBzaGFyZWQgbWVt b3J5IHRvIHNpZ25hbCB0aGF0IG5ldyBMU04gaGFzIGJlZW4gcmVwbGF5ZWQgKi8KK3ZvaWQKK1dh aXRTZXRMYXRjaChYTG9nUmVjUHRyIGN1cl9sc24pCit7CisJdWludDMyCQlpOworCWludCAJCWJh Y2tlbmRfbWF4aWQ7CisJUEdQUk9DCSAgICpiYWNrZW5kOworCisJU3BpbkxvY2tBY3F1aXJlKCZz dGF0ZS0+bXV0ZXgpOworCWJhY2tlbmRfbWF4aWQgPSBzdGF0ZS0+YmFja2VuZF9tYXhpZDsKKwlT cGluTG9ja1JlbGVhc2UoJnN0YXRlLT5tdXRleCk7CisKKwlmb3IgKGkgPSAyOyBpIDw9IGJhY2tl bmRfbWF4aWQ7IGkrKykKKwl7CisJCWJhY2tlbmQgPSBCYWNrZW5kSWRHZXRQcm9jKGkpOworCQlp ZiAoc3RhdGUtPmV2ZW50X2FycltpXS50cmdfbHNuICE9IDApCisJCXsKKwkJCWlmIChzdGF0ZS0+ ZXZlbnRfYXJyW2ldLnRyZ19sc24gPD0gY3VyX2xzbikKKwkJCQlTZXRMYXRjaCgmYmFja2VuZC0+ cHJvY0xhdGNoKTsKKwkJfQorCX0KK30KKworLyogR2V0IG1pbmltYWwgTFNOIHRoYXQgd2lsbCBi ZSBuZXh0ICovCitYTG9nUmVjUHRyCitHZXRNaW5XYWl0KHZvaWQpCit7CisJcmV0dXJuIHN0YXRl LT5taW5fbHNuOworfQorCisvKgorICogT24gV0FJVCB1c2UgTXlMYXRjaCB0byB3YWl0IHRpbGwg TFNOIGlzIHJlcGxheWVkLAorICogcG9zdG1hc3RlciBkaWVzIG9yIHRpbWVvdXQgaGFwcGVucy4K KyAqLwordm9pZAorV2FpdFV0aWxpdHkoWExvZ1JlY1B0ciBsc24sIGNvbnN0IGludCBkZWxheSwg RGVzdFJlY2VpdmVyICpkZXN0KQoreworCVhMb2dSZWNQdHIJCXRyZ19sc24gPSBsc247CisJWExv Z1JlY1B0cgkJY3VyX2xzbjsKKwlpbnQJCQkJbGF0Y2hfZXZlbnRzOworCXVpbnQ2NAkJCXRkZWxh eSA9IGRlbGF5OworCWxvbmcJCQlzZWNzOworCWludAkJCQltaWNyb3NlY3M7CisJVGltZXN0YW1w VHoJCXRpbWVyID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOworCVR1cE91dHB1dFN0YXRlICp0c3Rh dGU7CisJVHVwbGVEZXNjCQl0dXBkZXNjOworCWNoYXIJCSAgICp2YWx1ZSA9ICJmIjsKKworCWlm IChkZWxheSA+IDApCisJCWxhdGNoX2V2ZW50cyA9IFdMX0xBVENIX1NFVCB8IFdMX1RJTUVPVVQg fCBXTF9QT1NUTUFTVEVSX0RFQVRIOworCWVsc2UKKwkJbGF0Y2hfZXZlbnRzID0gV0xfTEFUQ0hf U0VUIHwgV0xfUE9TVE1BU1RFUl9ERUFUSDsKKworCUFkZEV2ZW50KHRyZ19sc24pOworCisJZm9y ICg7OykKKwl7CisJCWN1cl9sc24gPSBHZXRYTG9nUmVwbGF5UmVjUHRyKE5VTEwpOworCisJCS8q IElmIExTTiBoYXMgYmVlbiByZXBsYXllZCAqLworCQlpZiAodHJnX2xzbiA8PSBjdXJfbHNuKQor CQkJYnJlYWs7CisKKwkJLyogSWYgcG9zdG1hc3RlciBkaWVzLCBmaW5pc2ggaW1tZWRpYXRlbHkg Ki8KKwkJaWYgKCFQb3N0bWFzdGVySXNBbGl2ZSgpKQorCQkJYnJlYWs7CisKKwkJLyogSWYgZGVs YXkgdGltZSBpcyBvdmVyICovCisJCWlmIChsYXRjaF9ldmVudHMgJiBXTF9USU1FT1VUKQorCQl7 CisJCQlpZiAoVGltZXN0YW1wRGlmZmVyZW5jZUV4Y2VlZHModGltZXIsR2V0Q3VycmVudFRpbWVz dGFtcCgpLGRlbGF5KSkKKwkJCQlicmVhazsKKwkJCVRpbWVzdGFtcERpZmZlcmVuY2UodGltZXIs R2V0Q3VycmVudFRpbWVzdGFtcCgpLCZzZWNzLCAmbWljcm9zZWNzKTsKKwkJCXRkZWxheSA9IGRl bGF5IC0gKHNlY3MqMTAwMCArIG1pY3Jvc2Vjcy8xMDAwKTsKKwkJfQorCisJCS8qIEEgbGl0dGxl IGhhY2sgc2ltaWxhciB0byBTbmFwc2hvdFJlc2V0WG1pbiB0byB3b3JrIG91dCBvZiBzbmFwc2hv dCAqLworCQlNeVBnWGFjdC0+eG1pbiA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCQlXYWl0TGF0 Y2goTXlMYXRjaCwgbGF0Y2hfZXZlbnRzLCB0ZGVsYXksIFdBSVRfRVZFTlRfQ0xJRU5UX1JFQUQp OworCQlSZXNldExhdGNoKE15TGF0Y2gpOworCisJCS8qCisJCSAqIElmIHJlY2VpdmVkIGFuIGlu dGVycnVwdGlvbiBmcm9tIENIRUNLX0ZPUl9JTlRFUlJVUFRTLAorCQkgKiB0aGVuIGRlbGV0ZSB0 aGUgY3VycmVudCBldmVudCBmcm9tIGFycmF5LgorCQkgKi8KKwkJaWYgKEludGVycnVwdFBlbmRp bmcpCisJCXsKKwkJCURlbGV0ZUV2ZW50KCk7CisJCQlQcm9jZXNzSW50ZXJydXB0cygpOworCQl9 CisKKwl9CisKKwlEZWxldGVFdmVudCgpOworCisJaWYgKHRyZ19sc24gPiBjdXJfbHNuKQorCQll bG9nKE5PVElDRSwiTFNOIGlzIG5vdCByZWFjaGVkLiBUcnkgdG8gaW5jcmVhc2Ugd2FpdCB0aW1l LiIpOworCWVsc2UKKwkJdmFsdWUgPSAidCI7CisKKwkvKiBOZWVkIGEgdHVwbGUgZGVzY3JpcHRv ciByZXByZXNlbnRpbmcgYSBzaW5nbGUgVEVYVCBjb2x1bW4gKi8KKwl0dXBkZXNjID0gQ3JlYXRl VGVtcGxhdGVUdXBsZURlc2MoMSk7CisJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRlc2MsIChBdHRy TnVtYmVyKSAxLCAiTFNOIHJlYWNoZWQiLCBURVhUT0lELCAtMSwgMCk7CisJLyogUHJlcGFyZSBm b3IgcHJvamVjdGlvbiBvZiB0dXBsZXMgKi8KKwl0c3RhdGUgPSBiZWdpbl90dXBfb3V0cHV0X3R1 cGRlc2MoZGVzdCwgdHVwZGVzYywgJlRUU09wc01pbmltYWxUdXBsZSk7CisKKwkvKiBTZW5kIGl0 ICovCisJZG9fdGV4dF9vdXRwdXRfb25lbGluZSh0c3RhdGUsIHZhbHVlKTsKKwllbmRfdHVwX291 dHB1dCh0c3RhdGUpOworfQorCit2b2lkCitXYWl0VGltZVV0aWxpdHkoY29uc3QgaW50IGRlbGF5 KQoreworCWludAkJCQlsYXRjaF9ldmVudHM7CisKKwlpZiAoZGVsYXkgPCAwKQorCQlyZXR1cm4g OworCisJbGF0Y2hfZXZlbnRzID0gV0xfVElNRU9VVCB8IFdMX1BPU1RNQVNURVJfREVBVEg7CisK KwlNeVBnWGFjdC0+eG1pbiA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCVdhaXRMYXRjaChNeUxh dGNoLCBsYXRjaF9ldmVudHMsIGRlbGF5LCBXQUlUX0VWRU5UX0NMSUVOVF9SRUFEKTsKKwlSZXNl dExhdGNoKE15TGF0Y2gpOworfQorCisvKiBHZXQgdW5pdmVyc2FsIHRpbWUgKi8KK2Zsb2F0OAor V2FpdFRpbWVSZXNvbHZlKENvbnN0ICp0aW1lKQoreworCWludAkJCXJldDsKKwlmbG9hdDgJCXZh bDsKKworCU9pZAkJdHlwZXNbXSA9IHsgdGltZS0+Y29uc3R0eXBlIH07CisJRGF0dW0JdmFsdWVz W10gPSB7IHRpbWUtPmNvbnN0dmFsdWUgfTsKKwljaGFyCW51bGxzW10gPSB7ICIgIiB9OworCisJ RGF0dW0gcmVzdWx0OworCWJvb2wgaXNudWxsOworCisJU1BJX2Nvbm5lY3QoKTsKKworCWlmICh0 aW1lLT5jb25zdHR5cGUgPT0gMTA4MykKKwkJcmV0ID0gU1BJX2V4ZWN1dGVfd2l0aF9hcmdzKCJz ZWxlY3QgZXh0cmFjdCAoZXBvY2ggZnJvbSAoJDEgLSBub3coKTo6dGltZSkpIiwKKwkJCQkJCQkJ CTEsIHR5cGVzLCB2YWx1ZXMsIG51bGxzLCB0cnVlLCAwKTsKKwllbHNlIGlmICh0aW1lLT5jb25z dHR5cGUgPT0gMTI2NikKKwkJcmV0ID0gU1BJX2V4ZWN1dGVfd2l0aF9hcmdzKCJzZWxlY3QgZXh0 cmFjdCAoZXBvY2ggZnJvbSAodGltZXpvbmUoJ1VUQycsJDEpOjp0aW1lIC0gdGltZXpvbmUoJ1VU QycsIG5vdygpOjp0aW1ldHopOjp0aW1lKSkiLAorCQkJCQkJCQkJMSwgdHlwZXMsIHZhbHVlcywg bnVsbHMsIHRydWUsIDApOworCWVsc2UKKwkJcmV0ID0gU1BJX2V4ZWN1dGVfd2l0aF9hcmdzKCJz ZWxlY3QgZXh0cmFjdCAoZXBvY2ggZnJvbSAoJDEgLSBub3coKSkpIiwKKwkJCQkJCQkJCTEsIHR5 cGVzLCB2YWx1ZXMsIG51bGxzLCB0cnVlLCAwKTsKKworCUFzc2VydChyZXQgPj0gMCk7CisJcmVz dWx0ID0gU1BJX2dldGJpbnZhbChTUElfdHVwdGFibGUtPnZhbHNbMF0sCisJCQkJCQkgICBTUElf dHVwdGFibGUtPnR1cGRlc2MsCisJCQkJCQkgICAxLCAmaXNudWxsKTsKKworCUFzc2VydCghaXNu dWxsKTsKKwl2YWwgPSBEYXR1bUdldEZsb2F0OChyZXN1bHQpOworCisJZWxvZyhJTkZPLCAidGlt ZTogJWYiLCB2YWwpOworCisJU1BJX2ZpbmlzaCgpOworCXJldHVybiB2YWw7Cit9CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvb3V0 ZnVuY3MuYwppbmRleCBlMDg0YzNmMDY5Li5jYzhkMjBhOTFiIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9ub2Rlcy9vdXRmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMK QEAgLTI3NjAsNiArMjc2MCwxOSBAQCBfb3V0RGVmRWxlbShTdHJpbmdJbmZvIHN0ciwgY29uc3Qg RGVmRWxlbSAqbm9kZSkKIAlXUklURV9MT0NBVElPTl9GSUVMRChsb2NhdGlvbik7CiB9CiAKK3N0 YXRpYyB2b2lkCitfb3V0V2FpdFN0bXQoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFdhaXRTdG10ICpu b2RlKQoreworCVdSSVRFX05PREVfVFlQRSgiV0FJVFNUTVQiKTsKKworCVdSSVRFX1NUUklOR19G SUVMRChsc24pOworCVdSSVRFX0lOVF9GSUVMRChkZWxheSk7CisJV1JJVEVfTk9ERV9GSUVMRChl dmVudHMpOworCVdSSVRFX05PREVfRklFTEQodGltZSk7CisJV1JJVEVfRU5VTV9GSUVMRCh3YWl0 X3R5cGUsIFdhaXRUeXBlKTsKKwlXUklURV9FTlVNX0ZJRUxEKHN0cmF0ZWd5LCBXYWl0Rm9yU3Ry YXRlZ3kpOworfQorCiBzdGF0aWMgdm9pZAogX291dFRhYmxlTGlrZUNsYXVzZShTdHJpbmdJbmZv IHN0ciwgY29uc3QgVGFibGVMaWtlQ2xhdXNlICpub2RlKQogewpAQCAtNDMwNSw2ICs0MzE4LDkg QEAgb3V0Tm9kZShTdHJpbmdJbmZvIHN0ciwgY29uc3Qgdm9pZCAqb2JqKQogCQkJY2FzZSBUX1Bh cnRpdGlvblJhbmdlRGF0dW06CiAJCQkJX291dFBhcnRpdGlvblJhbmdlRGF0dW0oc3RyLCBvYmop OwogCQkJCWJyZWFrOworCQkJY2FzZSBUX1dhaXRTdG10OgorCQkJCV9vdXRXYWl0U3RtdChzdHIs IG9iaik7CisJCQkJYnJlYWs7CiAKIAkJCWRlZmF1bHQ6CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3BhcnNlci9hbmFseXplLmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvYW5hbHl6ZS5jCmluZGV4 IDY2NzY0MTI4NDIuLjQ1NDNmYTFiOWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9h bmFseXplLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2FuYWx5emUuYwpAQCAtNzgsNiArNzgs NyBAQCBzdGF0aWMgUXVlcnkgKnRyYW5zZm9ybUNyZWF0ZVRhYmxlQXNTdG10KFBhcnNlU3RhdGUg KnBzdGF0ZSwKIAkJCQkJCQkJCQkgQ3JlYXRlVGFibGVBc1N0bXQgKnN0bXQpOwogc3RhdGljIFF1 ZXJ5ICp0cmFuc2Zvcm1DYWxsU3RtdChQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkJCUNhbGxT dG10ICpzdG10KTsKK3N0YXRpYyBRdWVyeSAqdHJhbnNmb3JtV2FpdEZvclN0bXQoUGFyc2VTdGF0 ZSAqcHN0YXRlLCBXYWl0U3RtdCAqc3RtdCk7CiBzdGF0aWMgdm9pZCB0cmFuc2Zvcm1Mb2NraW5n Q2xhdXNlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgUXVlcnkgKnFyeSwKIAkJCQkJCQkJICAgTG9ja2lu Z0NsYXVzZSAqbGMsIGJvb2wgcHVzaGVkRG93bik7CiAjaWZkZWYgUkFXX0VYUFJFU1NJT05fQ09W RVJBR0VfVEVTVApAQCAtMzI2LDYgKzMyNyw5IEBAIHRyYW5zZm9ybVN0bXQoUGFyc2VTdGF0ZSAq cHN0YXRlLCBOb2RlICpwYXJzZVRyZWUpCiAJCQlyZXN1bHQgPSB0cmFuc2Zvcm1DYWxsU3RtdChw c3RhdGUsCiAJCQkJCQkJCQkgICAoQ2FsbFN0bXQgKikgcGFyc2VUcmVlKTsKIAkJCWJyZWFrOwor CQljYXNlIFRfV2FpdFN0bXQ6CisJCQlyZXN1bHQgPSB0cmFuc2Zvcm1XYWl0Rm9yU3RtdChwc3Rh dGUsIChXYWl0U3RtdCAqKSBwYXJzZVRyZWUpOworCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKIApA QCAtMjk4MSw2ICsyOTg1LDI1IEBAIGFwcGx5TG9ja2luZ0NsYXVzZShRdWVyeSAqcXJ5LCBJbmRl eCBydGluZGV4LAogCXFyeS0+cm93TWFya3MgPSBsYXBwZW5kKHFyeS0+cm93TWFya3MsIHJjKTsK IH0KIAorc3RhdGljIFF1ZXJ5ICoKK3RyYW5zZm9ybVdhaXRGb3JTdG10KFBhcnNlU3RhdGUgKnBz dGF0ZSwgV2FpdFN0bXQgKnN0bXQpCit7CisJUXVlcnkJCSAgICpyZXN1bHQ7CisJTGlzdENlbGwJ ICAgKmV2ZW50czsKKworCWZvcmVhY2goZXZlbnRzLCBzdG10LT5ldmVudHMpCisJeworCQlXYWl0 U3RtdAkgICAqZXZlbnQgPSAoV2FpdFN0bXQgKikgbGZpcnN0KGV2ZW50cyk7CisJCWV2ZW50LT50 aW1lID0gdHJhbnNmb3JtRXhwcihwc3RhdGUsIGV2ZW50LT50aW1lLCBFWFBSX0tJTkRfT1RIRVIp OworCX0KKworCXJlc3VsdCA9IG1ha2VOb2RlKFF1ZXJ5KTsKKwlyZXN1bHQtPmNvbW1hbmRUeXBl ID0gQ01EX1VUSUxJVFk7CisJcmVzdWx0LT51dGlsaXR5U3RtdCA9IChOb2RlICopIHN0bXQ7CisK KwlyZXR1cm4gcmVzdWx0OworfQorCiAvKgogICogQ292ZXJhZ2UgdGVzdGluZyBmb3IgcmF3X2V4 cHJlc3Npb25fdHJlZV93YWxrZXIoKS4KICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJz ZXIvZ3JhbS55IGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQppbmRleCA5NmU3ZmRiY2ZlLi44 YjgxNDRkMTJjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CisrKyBiL3Ny Yy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKQEAgLTI3Niw3ICsyNzYsNyBAQCBzdGF0aWMgTm9kZSAq bWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9k ZSAqcXVlcnkpOwogCQlTZWNMYWJlbFN0bXQgU2VsZWN0U3RtdCBUcmFuc2FjdGlvblN0bXQgVHJ1 bmNhdGVTdG10CiAJCVVubGlzdGVuU3RtdCBVcGRhdGVTdG10IFZhY3V1bVN0bXQKIAkJVmFyaWFi bGVSZXNldFN0bXQgVmFyaWFibGVTZXRTdG10IFZhcmlhYmxlU2hvd1N0bXQKLQkJVmlld1N0bXQg Q2hlY2tQb2ludFN0bXQgQ3JlYXRlQ29udmVyc2lvblN0bXQKKwkJVmlld1N0bXQgV2FpdFN0bXQg Q2hlY2tQb2ludFN0bXQgQ3JlYXRlQ29udmVyc2lvblN0bXQKIAkJRGVhbGxvY2F0ZVN0bXQgUHJl cGFyZVN0bXQgRXhlY3V0ZVN0bXQKIAkJRHJvcE93bmVkU3RtdCBSZWFzc2lnbk93bmVkU3RtdAog CQlBbHRlclRTQ29uZmlndXJhdGlvblN0bXQgQWx0ZXJUU0RpY3Rpb25hcnlTdG10CkBAIC00ODcs NyArNDg3LDcgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJl bG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKICV0eXBlIDxsaXN0Pglyb3cgZXhw bGljaXRfcm93IGltcGxpY2l0X3JvdyB0eXBlX2xpc3QgYXJyYXlfZXhwcl9saXN0CiAldHlwZSA8 bm9kZT4JY2FzZV9leHByIGNhc2VfYXJnIHdoZW5fY2xhdXNlIGNhc2VfZGVmYXVsdAogJXR5cGUg PGxpc3Q+CXdoZW5fY2xhdXNlX2xpc3QKLSV0eXBlIDxpdmFsPglzdWJfdHlwZSBvcHRfbWF0ZXJp YWxpemVkCisldHlwZSA8aXZhbD4Jc3ViX3R5cGUgd2FpdF9zdHJhdGVneSBvcHRfbWF0ZXJpYWxp emVkCiAldHlwZSA8dmFsdWU+CU51bWVyaWNPbmx5CiAldHlwZSA8bGlzdD4JTnVtZXJpY09ubHlf bGlzdAogJXR5cGUgPGFsaWFzPglhbGlhc19jbGF1c2Ugb3B0X2FsaWFzX2NsYXVzZQpAQCAtNTkx LDYgKzU5MSw4IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpy ZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAldHlwZSA8cGFydGJvdW5kc3Bl Yz4gUGFydGl0aW9uQm91bmRTcGVjCiAldHlwZSA8bGlzdD4JCWhhc2hfcGFydGJvdW5kCiAldHlw ZSA8ZGVmZWx0PgkJaGFzaF9wYXJ0Ym91bmRfZWxlbQorJXR5cGUgPGxpc3Q+CQl3YWl0X2xpc3QK KyV0eXBlIDxub2RlPgkJV2FpdEV2ZW50CiAKIC8qCiAgKiBOb24ta2V5d29yZCB0b2tlbiB0eXBl cy4gIFRoZXNlIGFyZSBoYXJkLXdpcmVkIGludG8gdGhlICJmbGV4IiBsZXhlci4KQEAgLTY2MCw3 ICs2NjIsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVs bmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCiAJTEFCRUwgTEFOR1VBR0UgTEFS R0VfUCBMQVNUX1AgTEFURVJBTF9QCiAJTEVBRElORyBMRUFLUFJPT0YgTEVBU1QgTEVGVCBMRVZF TCBMSUtFIExJTUlUIExJU1RFTiBMT0FEIExPQ0FMCi0JTE9DQUxUSU1FIExPQ0FMVElNRVNUQU1Q IExPQ0FUSU9OIExPQ0tfUCBMT0NLRUQgTE9HR0VECisJTE9DQUxUSU1FIExPQ0FMVElNRVNUQU1Q IExPQ0FUSU9OIExPQ0tfUCBMT0NLRUQgTE9HR0VEIExTTgogCiAJTUFQUElORyBNQVRDSCBNQVRF UklBTElaRUQgTUFYVkFMVUUgTUVUSE9EIE1JTlVURV9QIE1JTlZBTFVFIE1PREUgTU9OVEhfUCBN T1ZFCiAKQEAgLTY5MCw3ICs2OTIsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdT ZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCVNVQlND UklQVElPTiBTVUJTVFJJTkcgU1VQUE9SVCBTWU1NRVRSSUMgU1lTSUQgU1lTVEVNX1AKIAogCVRB QkxFIFRBQkxFUyBUQUJMRVNBTVBMRSBUQUJMRVNQQUNFIFRFTVAgVEVNUExBVEUgVEVNUE9SQVJZ IFRFWFRfUCBUSEVOCi0JVElFUyBUSU1FIFRJTUVTVEFNUCBUTyBUUkFJTElORyBUUkFOU0FDVElP TiBUUkFOU0ZPUk0KKwlUSUVTIFRJTUUgVElNRU9VVCBUSU1FU1RBTVAgVE8gVFJBSUxJTkcgVFJB TlNBQ1RJT04gVFJBTlNGT1JNCiAJVFJFQVQgVFJJR0dFUiBUUklNIFRSVUVfUAogCVRSVU5DQVRF IFRSVVNURUQgVFlQRV9QIFRZUEVTX1AKIApAQCAtNzAwLDcgKzcwMiw4IEBAIHN0YXRpYyBOb2Rl ICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBO b2RlICpxdWVyeSk7CiAJVkFDVVVNIFZBTElEIFZBTElEQVRFIFZBTElEQVRPUiBWQUxVRV9QIFZB TFVFUyBWQVJDSEFSIFZBUklBRElDIFZBUllJTkcKIAlWRVJCT1NFIFZFUlNJT05fUCBWSUVXIFZJ RVdTIFZPTEFUSUxFCiAKLQlXSEVOIFdIRVJFIFdISVRFU1BBQ0VfUCBXSU5ET1cgV0lUSCBXSVRI SU4gV0lUSE9VVCBXT1JLIFdSQVBQRVIgV1JJVEUKKwlXQUlUIFdIRU4gV0hFUkUgV0hJVEVTUEFD RV9QIFdJTkRPVworCVdJVEggV0lUSElOIFdJVEhPVVQgV09SSyBXUkFQUEVSIFdSSVRFCiAKIAlY TUxfUCBYTUxBVFRSSUJVVEVTIFhNTENPTkNBVCBYTUxFTEVNRU5UIFhNTEVYSVNUUyBYTUxGT1JF U1QgWE1MTkFNRVNQQUNFUwogCVhNTFBBUlNFIFhNTFBJIFhNTFJPT1QgWE1MU0VSSUFMSVpFIFhN TFRBQkxFCkBAIC05NTMsNiArOTU2LDcgQEAgc3RtdCA6CiAJCQl8IFZhcmlhYmxlU2V0U3RtdAog CQkJfCBWYXJpYWJsZVNob3dTdG10CiAJCQl8IFZpZXdTdG10CisJCQl8IFdhaXRTdG10CiAJCQl8 IC8qRU1QVFkqLwogCQkJCXsgJCQgPSBOVUxMOyB9CiAJCTsKQEAgLTE0MTI4LDYgKzE0MTMyLDgy IEBAIHhtbF9wYXNzaW5nX21lY2g6CiAJCQl8IEJZIFZBTFVFX1AKIAkJOwogCisvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioKKyAqCisgKgkJUVVFUlk6CisgKgkJCQlXQUlUIEZPUiA8ZXZlbnQ+IFssIDxl dmVudD4gLi4uXQorICoJCQkJZXZlbnQgIFtvcHRpb25dOgorICoJCQkJCUxTTiB2YWx1ZQorICoJ CQkJCVRJTUVPVVQgdmFsdWUKKyAqCQkJCQlUSU1FU1RBTVAgdGltZXN0YW1wCisgKgkJCQlvcHRp b246CisgKgkJCQkJVElNRU9VVCBkZWxheQorICoJCQkJCVVOVElMIFRJTUVTVEFNUCB0aW1lc3Rh bXAKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitXYWl0U3RtdDoKKwkJCVdBSVQgRk9SIHdh aXRfc3RyYXRlZ3kgd2FpdF9saXN0CisJCQkJeworCQkJCQlXYWl0U3RtdCAqbiA9IG1ha2VOb2Rl KFdhaXRTdG10KTsKKwkJCQkJbi0+d2FpdF90eXBlID0gV0FJVF9FVkVOVF9OT05FOworCQkJCQlu LT5zdHJhdGVneSA9ICQzOworCQkJCQluLT5ldmVudHMgPSAkNDsKKwkJCQkJJCQgPSAoTm9kZSAq KW47CisJCQkJfQorCQkJOworCit3YWl0X3N0cmF0ZWd5OgorCQkJQUxMCQkJCQl7ICQkID0gV0FJ VF9GT1JfQUxMOyB9CisJCQl8IEFOWQkJCQl7ICQkID0gV0FJVF9GT1JfQU5ZOyB9CisJCQl8IC8q IEVNUFRZICovCQl7ICQkID0gV0FJVF9GT1JfQUxMOyB9CisJCTsKKword2FpdF9saXN0OgorCQkJ V2FpdEV2ZW50CQkJCQl7ICQkID0gbGlzdF9tYWtlMSgkMSk7IH0KKwkJCXwgd2FpdF9saXN0ICcs JyBXYWl0RXZlbnQJeyAkJCA9IGxhcHBlbmQoJDEsICQzKTsgfQorCQkJfCB3YWl0X2xpc3QgV2Fp dEV2ZW50CQl7ICQkID0gbGFwcGVuZCgkMSwgJDIpOyB9CisJCTsKKworV2FpdEV2ZW50OgorCQkJ TFNOIFNjb25zdAorCQkJCXsKKwkJCQkJV2FpdFN0bXQgKm4gPSBtYWtlTm9kZShXYWl0U3RtdCk7 CisJCQkJCW4tPndhaXRfdHlwZSA9IFdBSVRfRVZFTlRfTFNOOworCQkJCQluLT5sc24gPSAkMjsK KwkJCQkJbi0+ZGVsYXkgPSAwOworCQkJCQluLT50aW1lID0gTlVMTDsKKwkJCQkJJCQgPSAoTm9k ZSAqKW47CisJCQkJfQorCisJCQl8IExTTiBTY29uc3QgVElNRU9VVCBJY29uc3QKKwkJCQkJewor CQkJCQkJV2FpdFN0bXQgKm4gPSBtYWtlTm9kZShXYWl0U3RtdCk7CisJCQkJCQluLT53YWl0X3R5 cGUgPSBXQUlUX0VWRU5UX01JWDsKKwkJCQkJCW4tPmxzbiA9ICQyOworCQkJCQkJbi0+ZGVsYXkg PSAkNDsKKwkJCQkJCW4tPnRpbWUgPSBOVUxMOworCQkJCQkJJCQgPSAoTm9kZSAqKW47CisJCQkJ CX0KKwkJCXwgTFNOIFNjb25zdCBVTlRJTCBDb25zdERhdGV0aW1lIFNjb25zdAorCQkJCQl7CisJ CQkJCQlXYWl0U3RtdCAqbiA9IG1ha2VOb2RlKFdhaXRTdG10KTsKKwkJCQkJCW4tPndhaXRfdHlw ZSA9IFdBSVRfRVZFTlRfTUlYOworCQkJCQkJbi0+bHNuID0gJDI7CisJCQkJCQluLT5kZWxheSA9 IDA7CisJCQkJCQluLT50aW1lID0gbWFrZVN0cmluZ0NvbnN0Q2FzdCgkNSwgQDUsICQ0KTsKKwkJ CQkJCSQkID0gKE5vZGUgKiluOworCQkJCQl9CisJCQl8IENvbnN0RGF0ZXRpbWUgU2NvbnN0CisJ CQkJCXsKKwkJCQkJCVdhaXRTdG10ICpuID0gbWFrZU5vZGUoV2FpdFN0bXQpOworCQkJCQkJbi0+ d2FpdF90eXBlID0gV0FJVF9FVkVOVF9USU1FOworCQkJCQkJbi0+bHNuID0gTlVMTDsKKwkJCQkJ CW4tPmRlbGF5ID0gMDsKKwkJCQkJCW4tPnRpbWUgPSBtYWtlU3RyaW5nQ29uc3RDYXN0KCQyLCBA MiwgJDEpOworCQkJCQkJJCQgPSAoTm9kZSAqKW47CisJCQkJCX0KKwkJCTsKKwogCiAvKgogICog QWdncmVnYXRlIGRlY29yYXRpb24gY2xhdXNlcwpAQCAtMTUyNzIsNiArMTUzNTIsNyBAQCB1bnJl c2VydmVkX2tleXdvcmQ6CiAJCQl8IExPQ0tfUAogCQkJfCBMT0NLRUQKIAkJCXwgTE9HR0VECisJ CQl8IExTTgogCQkJfCBNQVBQSU5HCiAJCQl8IE1BVENICiAJCQl8IE1BVEVSSUFMSVpFRApAQCAt MTUzOTQsNiArMTU0NzUsNyBAQCB1bnJlc2VydmVkX2tleXdvcmQ6CiAJCQl8IFRFTVBPUkFSWQog CQkJfCBURVhUX1AKIAkJCXwgVElFUworCQkJfCBUSU1FT1VUCiAJCQl8IFRSQU5TQUNUSU9OCiAJ CQl8IFRSQU5TRk9STQogCQkJfCBUUklHR0VSCkBAIC0xNTQyMCw2ICsxNTUwMiw3IEBAIHVucmVz ZXJ2ZWRfa2V5d29yZDoKIAkJCXwgVklFVwogCQkJfCBWSUVXUwogCQkJfCBWT0xBVElMRQorCQkJ fCBXQUlUCiAJCQl8IFdISVRFU1BBQ0VfUAogCQkJfCBXSVRISU4KIAkJCXwgV0lUSE9VVApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jIGIvc3JjL2JhY2tlbmQvc3Rv cmFnZS9pcGMvaXBjaS5jCmluZGV4IDQyN2IwZDU5Y2QuLjhjM2QxOTZhOWEgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdl L2lwYy9pcGNpLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJhY2Nlc3Mvc3VidHJhbnMu aCIKICNpbmNsdWRlICJhY2Nlc3MvdHdvcGhhc2UuaCIKICNpbmNsdWRlICJjb21tYW5kcy9hc3lu Yy5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3dhaXQuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIK ICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2F1dG92YWN1dW0uaCIK QEAgLTE0Nyw2ICsxNDgsNyBAQCBDcmVhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzKHZvaWQp CiAJCXNpemUgPSBhZGRfc2l6ZShzaXplLCBCVHJlZVNobWVtU2l6ZSgpKTsKIAkJc2l6ZSA9IGFk ZF9zaXplKHNpemUsIFN5bmNTY2FuU2htZW1TaXplKCkpOwogCQlzaXplID0gYWRkX3NpemUoc2l6 ZSwgQXN5bmNTaG1lbVNpemUoKSk7CisJCXNpemUgPSBhZGRfc2l6ZShzaXplLCBXYWl0U2htZW1T aXplKCkpOwogI2lmZGVmIEVYRUNfQkFDS0VORAogCQlzaXplID0gYWRkX3NpemUoc2l6ZSwgU2ht ZW1CYWNrZW5kQXJyYXlTaXplKCkpOwogI2VuZGlmCkBAIC0yNjQsNiArMjY2LDExIEBAIENyZWF0 ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZXModm9pZCkKIAlTeW5jU2NhblNobWVtSW5pdCgpOwog CUFzeW5jU2htZW1Jbml0KCk7CiAKKwkvKgorCSAqIEluaXQgYXJyYXkgb2YgTGF0Y2hlcyBpbiBT SE1FTSBmb3IgV2FpdAorCSAqLworCVdhaXRTaG1lbUluaXQoKTsKKwogI2lmZGVmIEVYRUNfQkFD S0VORAogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jIGIvc3Jj L2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKaW5kZXggMWI0NjBhMjYxMi4uYjNlNmRjZjQ5MiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKKysrIGIvc3JjL2JhY2tlbmQvdGNv cC91dGlsaXR5LmMKQEAgLTE1LDYgKzE1LDcgQEAKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAj aW5jbHVkZSAicG9zdGdyZXMuaCIKKyNpbmNsdWRlIDxmbG9hdC5oPgogCiAjaW5jbHVkZSAiYWNj ZXNzL2h0dXBfZGV0YWlscy5oIgogI2luY2x1ZGUgImFjY2Vzcy9yZWxvcHRpb25zLmgiCkBAIC01 Nyw2ICs1OCw3IEBACiAjaW5jbHVkZSAiY29tbWFuZHMvdXNlci5oIgogI2luY2x1ZGUgImNvbW1h bmRzL3ZhY3V1bS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3ZpZXcuaCIKKyNpbmNsdWRlICJjb21t YW5kcy93YWl0LmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGFyc2VyL3Bh cnNlX3V0aWxjbWQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2Jnd3JpdGVyLmgiCkBAIC03MCw2 ICs3Miw5IEBACiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMv cmVsLmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJleGVjdXRvci9z cGkuaCIKKyNpbmNsdWRlICJ1dGlscy9mbWdycHJvdG9zLmgiCisjaW5jbHVkZSAidXRpbHMvcGdf bHNuLmgiCiAKIC8qIEhvb2sgZm9yIHBsdWdpbnMgdG8gZ2V0IGNvbnRyb2wgaW4gUHJvY2Vzc1V0 aWxpdHkoKSAqLwogUHJvY2Vzc1V0aWxpdHlfaG9va190eXBlIFByb2Nlc3NVdGlsaXR5X2hvb2sg PSBOVUxMOwpAQCAtMjY3LDYgKzI3Miw3IEBAIENsYXNzaWZ5VXRpbGl0eUNvbW1hbmRBc1JlYWRP bmx5KE5vZGUgKnBhcnNldHJlZSkKIAkJY2FzZSBUX0xvYWRTdG10OgogCQljYXNlIFRfUHJlcGFy ZVN0bXQ6CiAJCWNhc2UgVF9Vbmxpc3RlblN0bXQ6CisJCWNhc2UgVF9XYWl0U3RtdDoKIAkJY2Fz ZSBUX1ZhcmlhYmxlU2V0U3RtdDoKIAkJCXsKIAkJCQkvKgpAQCAtMTA2MSw2ICsxMDY3LDEwNCBA QCBzdGFuZGFyZF9Qcm9jZXNzVXRpbGl0eShQbGFubmVkU3RtdCAqcHN0bXQsCiAJCQkJYnJlYWs7 CiAJCQl9CiAKKwkJY2FzZSBUX1dhaXRTdG10OgorCQkJeworCQkJCVdhaXRTdG10ICpzdG10ID0g KFdhaXRTdG10ICopIHBhcnNldHJlZTsKKwkJCQlmbG9hdDgJCQl0aW1lX3ZhbCA9IDA7CisJCQkJ ZmxvYXQ4CQkJdmFsID0gMDsKKwkJCQlMaXN0Q2VsbAkgICAqZXZlbnRzOworCQkJCVhMb2dSZWNQ dHIJCWxzbiA9IEludmFsaWRYTG9nUmVjUHRyOworCQkJCVhMb2dSZWNQdHIJCXRyZ19sc24gPSBJ bnZhbGlkWExvZ1JlY1B0cjsKKworCQkJCWlmIChzdG10LT5zdHJhdGVneSA9PSBXQUlUX0ZPUl9B TlkpCisJCQkJeworCQkJCQl0aW1lX3ZhbCA9IERCTF9NQVg7CisJCQkJCWxzbiA9IFBHX1VJTlQ2 NF9NQVg7CisJCQkJfQorCisJCQkJLyogRXh0cmFjdCBvcHRpb25zIGZyb20gdGhlIHN0YXRlbWVu dCBub2RlIHRyZWUgKi8KKwkJCQlmb3JlYWNoKGV2ZW50cywgc3RtdC0+ZXZlbnRzKQorCQkJCXsK KwkJCQkJV2FpdFN0bXQgICAgKmV2ZW50ID0gKFdhaXRTdG10ICopIGxmaXJzdChldmVudHMpOwor CisJCQkJCWlmIChldmVudC0+bHNuKQorCQkJCQl7CisJCQkJCQlpbnQzMglyZXM7CisJCQkJCQl0 cmdfbHNuID0gRGF0dW1HZXRMU04oCisJCQkJCQkJCQlEaXJlY3RGdW5jdGlvbkNhbGwxKHBnX2xz bl9pbiwKKwkJCQkJCQkJCQlDU3RyaW5nR2V0RGF0dW0oZXZlbnQtPmxzbikpKTsKKwkJCQkJCXJl cyA9IERhdHVtR2V0VUludDMyKAorCQkJCQkJCQkJRGlyZWN0RnVuY3Rpb25DYWxsMihwZ19sc25f Y21wLAorCQkJCQkJCQkJCWxzbiwgdHJnX2xzbikpOworCisJCQkJCQkvKiBOaWNlIGJlaGF2b3Vy IG9uIExTTiBmcm9tIHBhc3QgKi8KKwkJCQkJCWlmIChzdG10LT5zdHJhdGVneSA9PSBXQUlUX0ZP Ul9BTEwpCisJCQkJCQl7CisJCQkJCQkJaWYgKHJlcyA8PSAwKQorCQkJCQkJCQlsc24gPSB0cmdf bHNuOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCWlmIChyZXMgPiAwKQor CQkJCQkJCQlsc24gPSB0cmdfbHNuOworCQkJCQkJfQorCisJCQkJCQlpZiAoc3RtdC0+d2FpdF90 eXBlID09IFdBSVRfRVZFTlRfVElNRSkKKwkJCQkJCQlzdG10LT53YWl0X3R5cGUgPSBXQUlUX0VW RU5UX01JWDsKKwkJCQkJCWVsc2UgaWYgKHN0bXQtPndhaXRfdHlwZSA9PSBXQUlUX0VWRU5UX05P TkUpCisJCQkJCQkJc3RtdC0+d2FpdF90eXBlID0gV0FJVF9FVkVOVF9MU047CisKKwkJCQkJCWlm IChldmVudC0+ZGVsYXkpCisJCQkJCQl7CisJCQkJCQkJaWYgKHN0bXQtPnN0cmF0ZWd5ID09IFdB SVRfRk9SX0FOWSkKKwkJCQkJCQl7CisJCQkJCQkJCWlmIChldmVudC0+ZGVsYXkgPCB0aW1lX3Zh bCkKKwkJCQkJCQkJCXRpbWVfdmFsID0gZXZlbnQtPmRlbGF5IC8gMTAwMDsKKwkJCQkJCQl9CisJ CQkJCQkJZWxzZQorCQkJCQkJCXsKKwkJCQkJCQkJaWYgKGV2ZW50LT5kZWxheSA+PSB0aW1lX3Zh bCkKKwkJCQkJCQkJCXRpbWVfdmFsID0gZXZlbnQtPmRlbGF5IC8gMTAwMDsKKwkJCQkJCQl9CisJ CQkJCQl9CisJCQkJCX0KKworCQkJCQlpZiAoZXZlbnQtPnRpbWUpCisJCQkJCXsKKwkJCQkJCUNv bnN0ICp0aW1lID0gKENvbnN0ICopIGV2ZW50LT50aW1lOworCQkJCQkJdmFsID0gV2FpdFRpbWVS ZXNvbHZlKHRpbWUpOworCisJCQkJCQlpZiAoc3RtdC0+d2FpdF90eXBlID09IFdBSVRfRVZFTlRf TFNOKQorCQkJCQkJCXN0bXQtPndhaXRfdHlwZSA9IFdBSVRfRVZFTlRfTUlYOworCQkJCQkJZWxz ZSBpZiAoc3RtdC0+d2FpdF90eXBlID09IFdBSVRfRVZFTlRfTk9ORSkKKwkJCQkJCQlzdG10LT53 YWl0X3R5cGUgPSBXQUlUX0VWRU5UX1RJTUU7CisKKwkJCQkJCS8qIGlmIHZhbCA9PSAwID8/ICAq LworCQkJCQkJaWYgKHN0bXQtPnN0cmF0ZWd5ID09IFdBSVRfRk9SX0FMTCkKKwkJCQkJCXsKKwkJ CQkJCQlpZiAodGltZV92YWwgPD0gdmFsKQorCQkJCQkJCQl0aW1lX3ZhbCA9IHZhbDsKKwkJCQkJ CX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQlpZiAodGltZV92YWwgPiB2YWwpCisJCQkJ CQkJCXRpbWVfdmFsID0gdmFsOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQl9CisKKwkJCQkvKiBU aW1lIDw9IDAgaWZmIHRpbWUgZXZlbnQgaXMgcGFzc2VkICovCisJCQkJaWYgKHRpbWVfdmFsIDw9 IDApCisJCQkJCXRpbWVfdmFsID0gMTsKKworCQkJCWlmIChzdG10LT53YWl0X3R5cGUgPT0gV0FJ VF9FVkVOVF9USU1FKQorCQkJCQlXYWl0VGltZVV0aWxpdHkodGltZV92YWwgKiAxMDAwKTsKKwkJ CQllbHNlCisJCQkJCVdhaXRVdGlsaXR5KGxzbiwgKGludCkodGltZV92YWwgKiAxMDAwKSwgZGVz dCk7CisJCQl9CisJCQlicmVhazsKKwogCQlkZWZhdWx0OgogCQkJLyogQWxsIG90aGVyIHN0YXRl bWVudCB0eXBlcyBoYXZlIGV2ZW50IHRyaWdnZXIgc3VwcG9ydCAqLwogCQkJUHJvY2Vzc1V0aWxp dHlTbG93KHBzdGF0ZSwgcHN0bXQsIHF1ZXJ5U3RyaW5nLApAQCAtMjcxMyw2ICsyODE3LDEwIEBA IENyZWF0ZUNvbW1hbmRUYWcoTm9kZSAqcGFyc2V0cmVlKQogCQkJdGFnID0gQ01EVEFHX05PVElG WTsKIAkJCWJyZWFrOwogCisJCWNhc2UgVF9XYWl0U3RtdDoKKwkJCXRhZyA9IENNRFRBR19XQUlU OworCQkJYnJlYWs7CisKIAkJY2FzZSBUX0xpc3RlblN0bXQ6CiAJCQl0YWcgPSBDTURUQUdfTElT VEVOOwogCQkJYnJlYWs7CkBAIC0zMzQ0LDYgKzM0NTIsMTAgQEAgR2V0Q29tbWFuZExvZ0xldmVs KE5vZGUgKnBhcnNldHJlZSkKIAkJCWxldiA9IExPR1NUTVRfQUxMOwogCQkJYnJlYWs7CiAKKwkJ Y2FzZSBUX1dhaXRTdG10OgorCQkJbGV2ID0gTE9HU1RNVF9BTEw7CisJCQlicmVhazsKKwogCQlj YXNlIFRfTGlzdGVuU3RtdDoKIAkJCWxldiA9IExPR1NUTVRfQUxMOwogCQkJYnJlYWs7CmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy93YWl0LmggYi9zcmMvaW5jbHVkZS9jb21tYW5k cy93YWl0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNmFlYmY2NzQ1 OQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3dhaXQuaApAQCAtMCww ICsxLDI2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiB3YWl0LmgKKyAqCSAgcHJvdG90 eXBlcyBmb3IgY29tbWFuZHMvd2FpdC5jCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAx OTk2LTIwMTYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9u cyBDb3B5cmlnaHQgKGMpIDIwMTYsIFJlZ2VudHMgb2YgUG9zdGdyZXNQUk8KKyAqCisgKiBzcmMv aW5jbHVkZS9jb21tYW5kcy93YWl0LmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lm bmRlZiBXQUlUX0gKKyNkZWZpbmUgV0FJVF9ICisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKyNpbmNs dWRlICJ0Y29wL2Rlc3QuaCIKKworZXh0ZXJuIHZvaWQgV2FpdFV0aWxpdHkoWExvZ1JlY1B0ciBs c24sIGNvbnN0IGludCBkZWxheSwgRGVzdFJlY2VpdmVyICpkZXN0KTsKK2V4dGVybiB2b2lkIFdh aXRUaW1lVXRpbGl0eShjb25zdCBpbnQgZGVsYXkpOworZXh0ZXJuIFNpemUgV2FpdFNobWVtU2l6 ZSh2b2lkKTsKK2V4dGVybiB2b2lkIFdhaXRTaG1lbUluaXQodm9pZCk7CitleHRlcm4gdm9pZCBX YWl0U2V0TGF0Y2goWExvZ1JlY1B0ciBjdXJfbHNuKTsKK2V4dGVybiBYTG9nUmVjUHRyIEdldE1p bldhaXQodm9pZCk7CitleHRlcm4gZmxvYXQ4IFdhaXRUaW1lUmVzb2x2ZShDb25zdCAqdGltZSk7 CisKKyNlbmRpZiAgIC8qIFdBSVRfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMv bm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgKaW5kZXggYmFjZWQ3ZWVjMC4uYTNj ZmE5MmFiMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaAorKysgYi9zcmMv aW5jbHVkZS9ub2Rlcy9ub2Rlcy5oCkBAIC00ODcsNiArNDg3LDcgQEAgdHlwZWRlZiBlbnVtIE5v ZGVUYWcKIAlUX0Ryb3BSZXBsaWNhdGlvblNsb3RDbWQsCiAJVF9TdGFydFJlcGxpY2F0aW9uQ21k LAogCVRfVGltZUxpbmVIaXN0b3J5Q21kLAorCVRfV2FpdFN0bXQsCiAJVF9TUUxDbWQsCiAKIAkv KgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oIGIvc3JjL2luY2x1 ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCmluZGV4IGRhMDcwNmFkZDUuLmI3YTRmYThiY2MgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9u b2Rlcy9wYXJzZW5vZGVzLmgKQEAgLTM1NTQsNCArMzU1NCwzNCBAQCB0eXBlZGVmIHN0cnVjdCBE cm9wU3Vic2NyaXB0aW9uU3RtdAogCURyb3BCZWhhdmlvciBiZWhhdmlvcjsJCS8qIFJFU1RSSUNU IG9yIENBU0NBREUgYmVoYXZpb3IgKi8KIH0gRHJvcFN1YnNjcmlwdGlvblN0bXQ7CiAKKy8qIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCQlXYWl0IFN0YXRlbWVudAorICogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICovCisKK3R5cGVkZWYgZW51bSBXYWl0VHlwZQoreworCVdBSVRfRVZFTlRf Tk9ORSA9IDAsCisJV0FJVF9FVkVOVF9MU04sCisJV0FJVF9FVkVOVF9USU1FLAorCVdBSVRfRVZF TlRfTUlYCit9IFdhaXRUeXBlOworCit0eXBlZGVmIGVudW0gV2FpdEZvclN0cmF0ZWd5Cit7CisJ V0FJVF9GT1JfQU5ZID0gMCwKKwlXQUlUX0ZPUl9BTEwKK30gV2FpdEZvclN0cmF0ZWd5OworCit0 eXBlZGVmIHN0cnVjdCBXYWl0U3RtdAoreworCU5vZGVUYWcJCQl0eXBlOworCVdhaXRUeXBlCQl3 YWl0X3R5cGU7CisJV2FpdEZvclN0cmF0ZWd5CXN0cmF0ZWd5OworCUxpc3QJCSAgICpldmVudHM7 CQkvKiBvcHRpb24gKi8KKwljaGFyCQkgICAqbHNuOwkJLyogVGFyZ2V0IExTTiB0byB3YWl0IGZv ciAqLworCWludAkJCQlkZWxheTsJCS8qIFRpbWVvdXQgd2hlbiB3YWl0aW5nIGZvciBMU04sIGlu IG1zZWMgKi8KKwlOb2RlCQkgICAqdGltZTsJCS8qIFdhaXQgZm9yIHRpbWVzdGFtcCAqLworfSBX YWl0U3RtdDsKKwogI2VuZGlmCQkJCQkJCS8qIFBBUlNFTk9ERVNfSCAqLwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oIGIvc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5o CmluZGV4IGIxMTg0YzJkMTUuLmRkMjJlMzU4YjkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Bh cnNlci9rd2xpc3QuaAorKysgYi9zcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmgKQEAgLTI0Myw2 ICsyNDMsNyBAQCBQR19LRVlXT1JEKCJsb2NhdGlvbiIsIExPQ0FUSU9OLCBVTlJFU0VSVkVEX0tF WVdPUkQpCiBQR19LRVlXT1JEKCJsb2NrIiwgTE9DS19QLCBVTlJFU0VSVkVEX0tFWVdPUkQpCiBQ R19LRVlXT1JEKCJsb2NrZWQiLCBMT0NLRUQsIFVOUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdP UkQoImxvZ2dlZCIsIExPR0dFRCwgVU5SRVNFUlZFRF9LRVlXT1JEKQorUEdfS0VZV09SRCgibHNu IiwgTFNOLCBVTlJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJtYXBwaW5nIiwgTUFQUElO RywgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgibWF0Y2giLCBNQVRDSCwgVU5SRVNF UlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgibWF0ZXJpYWxpemVkIiwgTUFURVJJQUxJWkVELCBV TlJFU0VSVkVEX0tFWVdPUkQpCkBAIC00MDQsNiArNDA1LDcgQEAgUEdfS0VZV09SRCgidGV4dCIs IFRFWFRfUCwgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgidGhlbiIsIFRIRU4sIFJF U0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJ0aWVzIiwgVElFUywgVU5SRVNFUlZFRF9LRVlX T1JEKQogUEdfS0VZV09SRCgidGltZSIsIFRJTUUsIENPTF9OQU1FX0tFWVdPUkQpCitQR19LRVlX T1JEKCJ0aW1lb3V0IiwgVElNRU9VVCwgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgi dGltZXN0YW1wIiwgVElNRVNUQU1QLCBDT0xfTkFNRV9LRVlXT1JEKQogUEdfS0VZV09SRCgidG8i LCBUTywgUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoInRyYWlsaW5nIiwgVFJBSUxJTkcs IFJFU0VSVkVEX0tFWVdPUkQpCkBAIC00NDQsNiArNDQ2LDcgQEAgUEdfS0VZV09SRCgidmVyc2lv biIsIFZFUlNJT05fUCwgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgidmlldyIsIFZJ RVcsIFVOUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoInZpZXdzIiwgVklFV1MsIFVOUkVT RVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoInZvbGF0aWxlIiwgVk9MQVRJTEUsIFVOUkVTRVJW RURfS0VZV09SRCkKK1BHX0tFWVdPUkQoIndhaXQiLCBXQUlULCBVTlJFU0VSVkVEX0tFWVdPUkQp CiBQR19LRVlXT1JEKCJ3aGVuIiwgV0hFTiwgUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQo IndoZXJlIiwgV0hFUkUsIFJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJ3aGl0ZXNwYWNl IiwgV0hJVEVTUEFDRV9QLCBVTlJFU0VSVkVEX0tFWVdPUkQpCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS90Y29wL2NtZHRhZ2xpc3QuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvY21kdGFnbGlzdC5oCmlu ZGV4IGQyODE0NWE1MGQuLjBlMzZmMTA0OWUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3Av Y21kdGFnbGlzdC5oCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvY21kdGFnbGlzdC5oCkBAIC0yMTYs MyArMjE2LDQgQEAgUEdfQ01EVEFHKENNRFRBR19UUlVOQ0FURV9UQUJMRSwgIlRSVU5DQVRFIFRB QkxFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKIFBHX0NNRFRBRyhDTURUQUdfVU5MSVNURU4sICJV TkxJU1RFTiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCiBQR19DTURUQUcoQ01EVEFHX1VQREFURSwg IlVQREFURSIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKIFBHX0NNRFRBRyhDTURUQUdfVkFDVVVNLCAi VkFDVVVNIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfV0FJVCwgIldB SVQgRk9SIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlY292 ZXJ5L3QvMDE4X3dhaXRmb3IucGwgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzAxOF93YWl0Zm9yLnBs Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjY4MTc0MzFlOWMKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzAxOF93YWl0Zm9yLnBsCkBAIC0wLDAg KzEsNjQgQEAKKyMgQ2hlY2tzIFdBSVQgRk9SCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwor Cit1c2UgUG9zdGdyZXNOb2RlOwordXNlIFRlc3RMaWI7Cit1c2UgVGVzdDo6TW9yZSB0ZXN0cyA9 PiAxOworCisjIEluaXRpYWxpemUgbWFzdGVyIG5vZGUKK215ICRub2RlX21hc3RlciA9IGdldF9u ZXdfbm9kZSgnbWFzdGVyJyk7Ciskbm9kZV9tYXN0ZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9 PiAxKTsKKyRub2RlX21hc3Rlci0+c3RhcnQ7CisKKyMgQW5kIHNvbWUgY29udGVudAorJG5vZGVf bWFzdGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIHRhYl9pbnQgQVMg U0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAxMCkgQVMgYSIpOworCisjIFRha2UgYmFja3VwCitt eSAkYmFja3VwX25hbWUgPSAnbXlfYmFja3VwJzsKKyRub2RlX21hc3Rlci0+YmFja3VwKCRiYWNr dXBfbmFtZSk7CisKKyMgQ3JlYXRlIHN0cmVhbWluZyBzdGFuZGJ5IGZyb20gYmFja3VwCitteSAk bm9kZV9zdGFuZGJ5ID0gZ2V0X25ld19ub2RlKCdzdGFuZGJ5Jyk7CitteSAkZGVsYXkgICAgICAg ID0gNDsKKyRub2RlX3N0YW5kYnktPmluaXRfZnJvbV9iYWNrdXAoJG5vZGVfbWFzdGVyLCAkYmFj a3VwX25hbWUsCisJaGFzX3N0cmVhbWluZyA9PiAxKTsKKyRub2RlX3N0YW5kYnktPmFwcGVuZF9j b25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxcSgKK3JlY292ZXJ5X21pbl9hcHBseV9kZWxheSA9 ICcke2RlbGF5fXMnCispKTsKKyRub2RlX3N0YW5kYnktPnN0YXJ0OworCisjIE1ha2UgbmV3IGNv bnRlbnQgb24gbWFzdGVyIGFuZCBjaGVjayBpdHMgcHJlc2VuY2UgaW4gc3RhbmRieSBkZXBlbmRp bmcKKyMgb24gdGhlIGRlbGF5IGFwcGxpZWQgYWJvdmUuIEJlZm9yZSBkb2luZyB0aGUgaW5zZXJ0 aW9uLCBnZXQgdGhlCisjIGN1cnJlbnQgdGltZXN0YW1wIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGEg Y29tcGFyaXNvbiBiYXNlLiBFdmVuIG9uIHNsb3cKKyMgbWFjaGluZXMsIHRoaXMgYWxsb3dzIHRv IGhhdmUgYSBwcmVkaWN0YWJsZSBiZWhhdmlvciB3aGVuIGNvbXBhcmluZyB0aGUKKyMgZGVsYXkg YmV0d2VlbiBkYXRhIGluc2VydGlvbiBtb21lbnQgb24gbWFzdGVyIGFuZCByZXBsYXkgdGltZSBv biBzdGFuZGJ5LgorbXkgJG1hc3Rlcl9pbnNlcnRfdGltZSA9IHRpbWUoKTsKKyRub2RlX21hc3Rl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJTlRPIHRhYl9pbnQgVkFMVUVTIChn ZW5lcmF0ZV9zZXJpZXMoMTEsIDIwKSkiKTsKKworIyBOb3cgd2FpdCBmb3IgcmVwbGF5IHRvIGNv bXBsZXRlIG9uIHN0YW5kYnkuIFdlJ3JlIGRvbmUgd2FpdGluZyB3aGVuIHRoZQorIyBzdGFuZGJ5 IGhhcyByZXBsYXllZCB1cCB0byB0aGUgcHJldmlvdXNseSBzYXZlZCBtYXN0ZXIgTFNOLgorbXkg JHVudGlsX2xzbiA9CisgICRub2RlX21hc3Rlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxF Q1QgcGdfY3VycmVudF93YWxfbHNuKCkiKTsKKworJG5vZGVfbWFzdGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkiSU5TRVJUIElOVE8gdGFiX2ludCBWQUxVRVMgKGdlbmVyYXRlX3Nlcmllcygy MSwgMzApKSIpOworCisjIENoZWNrIHRoYXQgd2FpdGxzbiBpcyBhYmxlIHRvIHNldHVwIGluZmlu aXRlIHdhaXRpbmcgbG9vcCBhbmQgZXhpdAorIyBpdCB3aXRob3V0IHRpbWVvdXRzLgorJG5vZGVf c3RhbmRieS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisgICAgIldBSVQgRk9SIExTTiAnJHVudGls X2xzbiciLCAndCcpCisgIG9yIGRpZSAic3RhbmRieSBuZXZlciBjYXVnaHQgdXAiOworCisjIENo ZWNrIHRoYXQgd2FpdGxzbiBjYW4gcmV0dXJuIHJlc3VsdCBpbW1lZGlhdGVseSB3aXRoIE5PV0FJ VC4KKyRub2RlX3N0YW5kYnktPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywKKyAgICAiV0FJ VCBGT1IgTFNOICckdW50aWxfbHNuJyBUSU1FT1VUIDEiLCAndCcpCisgIG9yIGRpZSAic3RhbmRi eSBuZXZlciBjYXVnaHQgdXAiOworCisjIFRoaXMgdGVzdCBpcyBzdWNjZXNzZnVsIGlmIGFuZCBv bmx5IGlmIHRoZSBMU04gaGFzIGJlZW4gYXBwbGllZCB3aXRoIGF0IGxlYXN0CisjIHRoZSBjb25m aWd1cmVkIGFwcGx5IGRlbGF5LgorbXkgJHRpbWVfd2FpdGVkID0gdGltZSgpIC0gJG1hc3Rlcl9p bnNlcnRfdGltZTsKK29rKCR0aW1lX3dhaXRlZCA+PSAkZGVsYXksInN0YW5kYnkgYXBwbGllcyBX QUwgb25seSBhZnRlciByZXBsaWNhdGlvbiBkZWxheSIpOwo= --=_5266681fc5ef265f2d82ff65f05c21f8--