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 1j9xyU-0002Pz-E5 for pgsql-hackers@arkaria.postgresql.org; Thu, 05 Mar 2020 21:24:11 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1j9xyT-0002n4-7T for pgsql-hackers@arkaria.postgresql.org; Thu, 05 Mar 2020 21:24:09 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1j9xyS-0002mx-FR for pgsql-hackers@lists.postgresql.org; Thu, 05 Mar 2020 21:24:08 +0000 Received: from cyclops.postgrespro.ru ([93.174.131.138] helo=mail.postgrespro.ru) by makus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1j9xyO-0002vP-18 for pgsql-hackers@postgresql.org; Thu, 05 Mar 2020 21:24:07 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id 22E9F21C1FC1; Fri, 6 Mar 2020 00:24:02 +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 E942421C1FC0; Fri, 6 Mar 2020 00:24:01 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1583443441; bh=MQLBfJQAIEYRaVhDFyc45BzWqItBsACspJ9OXLErtbU=; h=Date:From:To:Cc:Subject; b=U9DCvCZ3rqHOTkEr4Nlw7uDv+W+zh3j+zwnpDa3+wz0Y/Vsvm1CX6P4kIvIpkDrnA VeuIZMUsrz5Pgop2hDrxiIoj1VLURAaTgmxGDAnzsHn0k/sya78HUuvi5Mi+aKnUBc UBK2DogX1h5g1FbtmnXZHvMboWszIWwukO5KUbvo= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_a08a4b5fc97a699791a401d6f28c985f" Content-Transfer-Encoding: 8bit Date: Fri, 06 Mar 2020 00:24:01 +0300 From: Kartyshov Ivan To: Simon Riggs Cc: PostgreSQL-development Subject: Re: [HACKERS] make async slave to wait for lsn to be replayed User-Agent: Roundcube Webmail/1.4.0 Message-ID: <80f267591b373db5588d580fdfb432f0@postgrespro.ru> X-Sender: i.kartyshov@postgrespro.ru List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=_a08a4b5fc97a699791a401d6f28c985f Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed On 2018-03-06 14:50, Simon Riggs wrote: > On 6 March 2018 at 11:24, Dmitry Ivanov > wrote: >>> In PG11, I propose the following command, sticking mostly to Ants' >>> syntax, and allowing to wait for multiple events before it returns. >>> It >>> doesn't hold snapshot and will not get cancelled by Hot Standby. >>> >>> WAIT FOR event [, event ...] options >>> >>> event is >>> LSN value >>> TIMESTAMP value >>> >>> options >>> TIMEOUT delay >>> UNTIL TIMESTAMP timestamp >>> (we have both, so people don't need to do math, they can use >>> whichever >>> they have) >> >> >> I have a (possibly) dumb question: if we have specified several >> events, >> should WAIT finish if only one of them triggered? It's not immediately >> obvious if we're waiting for ALL of them to trigger, or just one will >> suffice (ANY). IMO the syntax could be extended to something like: >> >> WAIT FOR [ANY | ALL] event [, event ...] options, >> >> with ANY being the default variant. > > +1 Here I made new patch of feature, discussed above. WAIT FOR - wait statement to pause beneath statements ========== Synopsis ========== WAIT FOR [ANY | SOME | ALL] event [, event ...] options and event is: LSN value TIMESTAMP value and options is: TIMEOUT delay UNTIL TIMESTAMP timestamp Description ========== WAIT FOR - make to wait statements (that are beneath) on sleep until event happens (Don’t process new queries until an event happens). How to use it ========== WAIT FOR LSN ‘LSN’ [, timeout in ms]; #Wait until LSN 0/303EC60 will be replayed, or 10 second passed. WAIT FOR ANY LSN ‘0/303EC60’, TIMEOUT 10000; #Or same without timeout. WAIT FOR LSN ‘0/303EC60’; #Or wait for some timestamp. WAIT FOR TIMESTAMP '2020-01-02 17:20:19.028161+03'; #Wait until ALL events occur: LSN to be replayed and timestamp passed. WAIT FOR ALL LSN ‘0/303EC60’, TIMESTAMP '2020-01-28 11:10:39.021341+03'; Notice: WAIT FOR will release on PostmasterDeath or Interruption events if they come earlier then LSN or timeout. Testing the implementation ====================== The implementation was tested with src/test/recovery/t/018_waitfor.pl -- Ivan Kartyshov Postgres Professional: http://www.postgrespro.com The Russian Postgres Company --=_a08a4b5fc97a699791a401d6f28c985f Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=wait_for_v1.patch Content-Disposition: attachment; filename=wait_for_v1.patch; size=28977 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvYWxsZmlsZXMuc2dtbCBiL2RvYy9zcmMvc2dt bC9yZWYvYWxsZmlsZXMuc2dtbAppbmRleCA4ZDkxZjM1MjllNi4uMWEyYmM3ZGZhOTMgMTAwNjQ0 Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvYWxsZmlsZXMuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwv cmVmL2FsbGZpbGVzLnNnbWwKQEAgLTE4Nyw2ICsxODcsNyBAQCBDb21wbGV0ZSBsaXN0IG9mIHVz YWJsZSBzZ21sIHNvdXJjZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeS4KIDwhRU5USVRZIHVwZGF0 ZSAgICAgICAgICAgICBTWVNURU0gInVwZGF0ZS5zZ21sIj4KIDwhRU5USVRZIHZhY3V1bSAgICAg ICAgICAgICBTWVNURU0gInZhY3V1bS5zZ21sIj4KIDwhRU5USVRZIHZhbHVlcyAgICAgICAgICAg ICBTWVNURU0gInZhbHVlcy5zZ21sIj4KKzwhRU5USVRZIHdhaXRmb3IgICAgICAgICAgICBTWVNU RU0gIndhaXRmb3Iuc2dtbCI+CiAKIDwhLS0gYXBwbGljYXRpb25zIGFuZCB1dGlsaXRpZXMgLS0+ CiA8IUVOVElUWSBjbHVzdGVyZGIgICAgICAgICAgU1lTVEVNICJjbHVzdGVyZGIuc2dtbCI+CmRp ZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3dhaXRmb3Iuc2dtbCBiL2RvYy9zcmMvc2dtbC9y ZWYvd2FpdGZvci5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44 ZmEyZGRiNDQ5MgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvd2FpdGZvci5z Z21sCkBAIC0wLDAgKzEsMTM2IEBACis8IS0tCitkb2Mvc3JjL3NnbWwvcmVmL3dhaXRsc24uc2dt bAorUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCistLT4KKworPHJlZmVudHJ5IGlkPSJzcWwtd2Fp dGxzbiI+CisgPGluZGV4dGVybSB6b25lPSJzcWwtd2FpdGxzbiI+CisgIDxwcmltYXJ5PldBSVQg Rk9SPC9wcmltYXJ5PgorIDwvaW5kZXh0ZXJtPgorCisgPHJlZm1ldGE+CisgIDxyZWZlbnRyeXRp dGxlPldBSVQgRk9SPC9yZWZlbnRyeXRpdGxlPgorICA8bWFudm9sbnVtPjc8L21hbnZvbG51bT4K KyAgPHJlZm1pc2NpbmZvPlNRTCAtIExhbmd1YWdlIFN0YXRlbWVudHM8L3JlZm1pc2NpbmZvPgor IDwvcmVmbWV0YT4KKworIDxyZWZuYW1lZGl2PgorICA8cmVmbmFtZT5XQUlUIEZPUjwvcmVmbmFt ZT4KKyAgPHJlZnB1cnBvc2U+d2FpdCBmb3IgdGhlIHRhcmdldCA8YWNyb255bT5MU048L2Fjcm9u eW0+IHRvIGJlIHJlcGxheWVkPC9yZWZwdXJwb3NlPgorIDwvcmVmbmFtZWRpdj4KKworIDxyZWZz eW5vcHNpc2Rpdj4KKzxzeW5vcHNpcz4KK1dBSVQgRk9SIExTTiAnPHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPmxzbl9udW1iZXI8L3JlcGxhY2VhYmxlPicgCitXQUlUIEZPUiBMU04gJzxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5sc25fbnVtYmVyPC9yZXBsYWNlYWJsZT4nIFRJ TUVPVVQgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPndhaXRfdGltZW91dDwvcmVwbGFj ZWFibGU+CitXQUlUIEZPUiBMU04gJzxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5sc25f bnVtYmVyPC9yZXBsYWNlYWJsZT4nIFVOVElMIFRJTUVTVEFNUCA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+d2FpdF90aW1lPC9yZXBsYWNlYWJsZT4KK1dBSVQgRk9SIFRJTUVTVEFNUCA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+d2FpdF90aW1lPC9yZXBsYWNlYWJsZT4gCis8 L3N5bm9wc2lzPgorIDwvcmVmc3lub3BzaXNkaXY+CisKKyA8cmVmc2VjdDE+CisgIDx0aXRsZT5E ZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgPHBhcmE+CisgICA8Y29tbWFuZD5XQUlUIEZPUjwvY29t bWFuZD4gcHJvdmlkZXMgYSBzaW1wbGUKKyAgIGludGVycHJvY2VzcyBjb21tdW5pY2F0aW9uIG1l Y2hhbmlzbSB0byB3YWl0IGZvciB0aW1lc3RhbXAgb3IgdGhlIHRhcmdldCBsb2cgc2VxdWVuY2UK KyAgIG51bWJlciAoPGFjcm9ueW0+TFNOPC9hY3JvbnltPikgb24gc3RhbmRieSBpbiA8cHJvZHVj dG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+CisgICBkYXRhYmFzZXMgd2l0aCBtYXN0ZXIt c3RhbmRieSBhc3luY2hyb25vdXMgcmVwbGljYXRpb24uIFdoZW4gcnVuIHdpdGggdGhlCisgICA8 cmVwbGFjZWFibGU+TFNOPC9yZXBsYWNlYWJsZT4gb3B0aW9uLCB0aGUgPGNvbW1hbmQ+V0FJVCBG T1I8L2NvbW1hbmQ+IGNvbW1hbmQKKyAgIHdhaXRzIGZvciB0aGUgc3BlY2lmaWVkIDxhY3Jvbnlt PkxTTjwvYWNyb255bT4gdG8gYmUgcmVwbGF5ZWQuIEJ5IGRlZmF1bHQsIHdhaXQKKyAgIHRpbWUg aXMgdW5saW1pdGVkLiBXYWl0aW5nIGNhbiBiZSBpbnRlcnJ1cHRlZCB1c2luZyA8bGl0ZXJhbD5D dHJsK0M8L2xpdGVyYWw+LCBvcgorICAgYnkgc2h1dHRpbmcgZG93biB0aGUgPGxpdGVyYWw+cG9z dGdyZXM8L2xpdGVyYWw+IHNlcnZlci4gWW91IGNhbiBhbHNvIGxpbWl0IHRoZSB3YWl0CisgICB0 aW1lIHVzaW5nIHRoZSA8b3B0aW9uPlRJTUVPVVQ8L29wdGlvbj4gb3B0aW9uLgorICA8L3BhcmE+ CisKKyA8L3JlZnNlY3QxPgorCisgPHJlZnNlY3QxPgorICA8dGl0bGU+UGFyYW1ldGVyczwvdGl0 bGU+CisKKyAgPHZhcmlhYmxlbGlzdD4KKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+PHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPkxTTjwvcmVwbGFjZWFibGU+PC90ZXJtPgorICAg IDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBTcGVjaWZ5IHRoZSB0YXJnZXQgbG9nIHNl cXVlbmNlIG51bWJlciB0byB3YWl0IGZvci4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+ CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT5USU1F T1VUIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj53YWl0X3RpbWVvdXQ8L3JlcGxhY2Vh YmxlPjwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgTGltaXQgdGhl IHRpbWUgaW50ZXJ2YWwgdG8gd2FpdCBmb3IgdGhlIExTTiB0byBiZSByZXBsYXllZC4KKyAgICAg IFRoZSBzcGVjaWZpZWQgPHJlcGxhY2VhYmxlPndhaXRfdGltZW91dDwvcmVwbGFjZWFibGU+IG11 c3QgYmUgYW4gaW50ZWdlcgorICAgICAgYW5kIGlzIG1lYXN1cmVkIGluIG1pbGxpc2Vjb25kcy4K KyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAg PHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT5VTlRJTCBUSU1FU1RBTVAgPHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPndhaXRfdGltZTwvcmVwbGFjZWFibGU+PC90ZXJtPgorICAgIDxsaXN0 aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBMaW1pdCB0aGUgdGltZSB0byB3YWl0IGZvciB0aGUg TFNOIHRvIGJlIHJlcGxheWVkLgorICAgICAgVGhlIHNwZWNpZmllZCA8cmVwbGFjZWFibGU+d2Fp dF90aW1lPC9yZXBsYWNlYWJsZT4gbXVzdCBiZSB0aW1lc3RhbXAuCisgICAgIDwvcGFyYT4KKyAg ICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgPC92YXJpYWJsZWxpc3Q+Cisg PC9yZWZzZWN0MT4KKworIDxyZWZzZWN0MT4KKyAgPHRpdGxlPkV4YW1wbGVzPC90aXRsZT4KKwor ICA8cGFyYT4KKyAgIFJ1biA8bGl0ZXJhbD5XQUlUIEZPUjwvbGl0ZXJhbD4gZnJvbSA8YXBwbGlj YXRpb24+cHNxbDwvYXBwbGljYXRpb24+LAorICAgbGltaXRpbmcgd2FpdCB0aW1lIHRvIDEwMDAw IG1pbGxpc2Vjb25kczoKKworPHNjcmVlbj4KK1dBSVQgRk9SIExTTiAnMC8zRjA3QTZCMScgVElN RU9VVCAxMDAwMDsKK05PVElDRTogIExTTiBpcyBub3QgcmVhY2hlZC4gVHJ5IHRvIGluY3JlYXNl IHdhaXQgdGltZS4KK0xTTiByZWFjaGVkCistLS0tLS0tLS0tLS0tCisgZgorKDEgcm93KQorPC9z Y3JlZW4+CisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFdhaXQgdW50aWwgdGhlIHNwZWNpZmll ZCA8YWNyb255bT5MU048L2Fjcm9ueW0+IGlzIHJlcGxheWVkOgorPHNjcmVlbj4KK1dBSVQgRk9S IExTTiAnMC8zRjA3QTYxMSc7CitMU04gcmVhY2hlZAorLS0tLS0tLS0tLS0tLQorIHQKKygxIHJv dykKKzwvc2NyZWVuPgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBMaW1pdCA8YWNyb255bT5M U048L2Fjcm9ueW0+IHdhaXQgdGltZSB0byA1MDAwMDAgbWlsbGlzZWNvbmRzLCBhbmQgdGhlbiBj YW5jZWwgdGhlIGNvbW1hbmQ6Cis8c2NyZWVuPgorV0FJVCBGT1IgTFNOICcwLzNGMEZGNzkxJyBU SU1FT1VUIDUwMDAwMDsKK15DQ2FuY2VsIHJlcXVlc3Qgc2VudAorTk9USUNFOiAgTFNOIGlzIG5v dCByZWFjaGVkLiBUcnkgdG8gaW5jcmVhc2Ugd2FpdCB0aW1lLgorRVJST1I6ICBjYW5jZWxpbmcg c3RhdGVtZW50IGR1ZSB0byB1c2VyIHJlcXVlc3QKKyBMU04gcmVhY2hlZAorLS0tLS0tLS0tLS0t LQorIGYKKygxIHJvdykKKzwvc2NyZWVuPgorPC9wYXJhPgorIDwvcmVmc2VjdDE+CisKKyA8cmVm c2VjdDE+CisgIDx0aXRsZT5Db21wYXRpYmlsaXR5PC90aXRsZT4KKworICA8cGFyYT4KKyAgIFRo ZXJlIGlzIG5vIDxjb21tYW5kPldBSVQgRk9SPC9jb21tYW5kPiBzdGF0ZW1lbnQgaW4gdGhlIFNR TAorICAgc3RhbmRhcmQuCisgIDwvcGFyYT4KKyA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KZGlm ZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWZlcmVuY2Uuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWZl cmVuY2Uuc2dtbAppbmRleCBjZWYwOWRkMzhiMy4uYmZlNjJlZTM1MTYgMTAwNjQ0Ci0tLSBhL2Rv Yy9zcmMvc2dtbC9yZWZlcmVuY2Uuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmZXJlbmNlLnNn bWwKQEAgLTIxNSw2ICsyMTUsNyBAQAogICAgJnVwZGF0ZTsKICAgICZ2YWN1dW07CiAgICAmdmFs dWVzOworICAgJndhaXRmb3I7CiAKICA8L3JlZmVyZW5jZT4KIApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v eGxvZy5jCmluZGV4IDYzYWIwYWI2YzJlLi4yMjYzZTkzMGFjNiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3hsb2cuYwpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29udHJv bC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfZGF0YWJhc2UuaCIKICNpbmNsdWRlICJjb21tYW5k cy90YWJsZXNwYWNlLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvd2FpdC5oIgogI2luY2x1ZGUgImNv bW1vbi9jb250cm9sZGF0YV91dGlscy5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1 ZGUgInBnc3RhdC5oIgpAQCAtNzI0NSw2ICs3MjQ2LDE1IEBAIFN0YXJ0dXBYTE9HKHZvaWQpCiAJ CQkJCWJyZWFrOwogCQkJCX0KIAorCQkJCS8qCisJCQkJICogQWZ0ZXIgdXBkYXRlIGxhc3RSZXBs YXllZEVuZFJlY1B0ciBzZXQgTGF0Y2hlcyBpbiBTSE1FTSBhcnJheQorCQkJCSAqLworCQkJCWlm IChYTG9nQ3RsLT5sYXN0UmVwbGF5ZWRFbmRSZWNQdHIgPj0gR2V0TWluV2FpdCgpKQorCQkJCXsK KworCQkJCQlXYWl0U2V0TGF0Y2goWExvZ0N0bC0+bGFzdFJlcGxheWVkRW5kUmVjUHRyKTsKKwkJ CQl9CisKIAkJCQkvKiBFbHNlLCB0cnkgdG8gZmV0Y2ggdGhlIG5leHQgV0FMIHJlY29yZCAqLwog CQkJCXJlY29yZCA9IFJlYWRSZWNvcmQoeGxvZ3JlYWRlciwgSW52YWxpZFhMb2dSZWNQdHIsIExP RywgZmFsc2UpOwogCQkJfSB3aGlsZSAocmVjb3JkICE9IE5VTEwpOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmls ZQppbmRleCBkNjQ2Mjg1NjZkMy4uYmE0MmU0OTRhYTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCkBA IC0yMCw2ICsyMCw2IEBAIE9CSlMgPSBhbWNtZHMubyBhZ2dyZWdhdGVjbWRzLm8gYWx0ZXIubyBh bmFseXplLm8gYXN5bmMubyBjbHVzdGVyLm8gY29tbWVudC5vIFwKIAlwb2xpY3kubyBwb3J0YWxj bWRzLm8gcHJlcGFyZS5vIHByb2NsYW5nLm8gcHVibGljYXRpb25jbWRzLm8gXAogCXNjaGVtYWNt ZHMubyBzZWNsYWJlbC5vIHNlcXVlbmNlLm8gc3RhdHNjbWRzLm8gc3Vic2NyaXB0aW9uY21kcy5v IFwKIAl0YWJsZWNtZHMubyB0YWJsZXNwYWNlLm8gdHJpZ2dlci5vIHRzZWFyY2hjbWRzLm8gdHlw ZWNtZHMubyB1c2VyLm8gXAotCXZhY3V1bS5vIHZhcmlhYmxlLm8gdmlldy5vCisJdmFjdXVtLm8g dmFyaWFibGUubyB2aWV3Lm8gd2FpdC5vCiAKIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9zcmMvYmFj a2VuZC9jb21tb24ubWsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3dhaXQuYyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3dhaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uYmNlZmZlYjYwMGMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9j b21tYW5kcy93YWl0LmMKQEAgLTAsMCArMSwyNjUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoK KyAqIHdhaXQuYworICoJICB3YWl0IHN0YXRtZW50OiB3YWl0CisgKgorICogUG9ydGlvbnMgQ29w eXJpZ2h0IChjKSAxOTk2LTIwMTksIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTksIFJlZ2VudHMgb2YgUG9zdGdyZXNQcm8K KyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9jb21tYW5kcy93YWl0LmMK KyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICogV2FpdCBmb3IgTFNOIGJlZW4gcmVwbGF5ZWQgb24gcmVwbGljYQorICotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisjaW5jbHVkZSAicGdzdGF0LmgiCisj aW5jbHVkZSAiZm1nci5oIgorI2luY2x1ZGUgImFjY2Vzcy90cmFuc2FtLmgiCisjaW5jbHVkZSAi YWNjZXNzL3hhY3QuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ2RlZnMuaCIKKyNpbmNsdWRlICJh Y2Nlc3MveGxvZy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgorI2luY2x1ZGUgImNv bW1hbmRzL3dhaXQuaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAibWlzY2FkbWlu LmgiCisjaW5jbHVkZSAic3RvcmFnZS9iYWNrZW5kaWQuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2lw Yy5oIgorI2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKKyNpbmNsdWRlICJzdG9yYWdlL3Btc2ln bmFsLmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zaG1l bS5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc3Bpbi5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc2ludmFs YWR0LmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9wZ19s c24uaCIKKyNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKKworLyogQWRkL2RlbGV0ZSB0byBz aG1lbSBhcnJheSAqLworc3RhdGljIHZvaWQgQWRkRXZlbnQoWExvZ1JlY1B0ciB0cmdfbHNuKTsK K3N0YXRpYyB2b2lkIERlbGV0ZUV2ZW50KHZvaWQpOworCisvKiBTaGFyZWQgbWVtb3J5IHN0cnVj dHVyZXMgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJWExvZ1JlY1B0cgl0cmdfbHNuOworCS8qIExl ZnQgaGVyZSBzdHJ1Y3QgQklEU3RhdGUgZm9yIGZ1dHVyZSBjb21wYXRpYmlsaXR5ICovCit9IEJJ RFN0YXRlOworCit0eXBlZGVmIHN0cnVjdAoreworCWludAkJCWJhY2tlbmRfbWF4aWQ7CisJWExv Z1JlY1B0cgltaW5fbHNuOworCXNsb2NrX3QJCW11dGV4OworCUJJRFN0YXRlCWV2ZW50X2FycltG TEVYSUJMRV9BUlJBWV9NRU1CRVJdOworfSBHbG9iU3RhdGU7CisKK3N0YXRpYyB2b2xhdGlsZSBH bG9iU3RhdGUgKnN0YXRlOworCisvKiBBZGQgZXZlbnQgZm9yIGN1cnJlbnQgYmFja2VuZCB0byBz aG1lbSBhcnJheSAqLworc3RhdGljIHZvaWQKK0FkZEV2ZW50KFhMb2dSZWNQdHIgdHJnX2xzbikK K3sKKwlTcGluTG9ja0FjcXVpcmUoJnN0YXRlLT5tdXRleCk7CisJaWYgKHN0YXRlLT5iYWNrZW5k X21heGlkIDwgTXlCYWNrZW5kSWQpCisJCXN0YXRlLT5iYWNrZW5kX21heGlkID0gTXlCYWNrZW5k SWQ7CisKKwlzdGF0ZS0+ZXZlbnRfYXJyW015QmFja2VuZElkXS50cmdfbHNuID0gdHJnX2xzbjsK KworCWlmICh0cmdfbHNuIDwgc3RhdGUtPm1pbl9sc24pCisJCXN0YXRlLT5taW5fbHNuID0gdHJn X2xzbjsKKwlTcGluTG9ja1JlbGVhc2UoJnN0YXRlLT5tdXRleCk7Cit9CisKKy8qCisgKiBEZWxl dGUgZXZlbnQgZm9yIGN1cnJlbnQgYmFja2VuZCB0byBzaGFyZWQgYXJyYXkuCisgKgorICogVE9E TzogQ29uc2lkZXIgc3RhdGUgY2xlYW51cCBvbiBiYWNrZW5kIGZhaWx1cmUuCisgKi8KK3N0YXRp YyB2b2lkCitEZWxldGVFdmVudCh2b2lkKQoreworCWludCBpOworCVhMb2dSZWNQdHIgdHJnX2xz biA9IHN0YXRlLT5ldmVudF9hcnJbTXlCYWNrZW5kSWRdLnRyZ19sc247CisKKwlzdGF0ZS0+ZXZl bnRfYXJyW015QmFja2VuZElkXS50cmdfbHNuID0gSW52YWxpZFhMb2dSZWNQdHI7CisKKwlTcGlu TG9ja0FjcXVpcmUoJnN0YXRlLT5tdXRleCk7CisJLyogVXBkYXRlIHN0YXRlLT5taW5fbHNuIGlm ZiBpdCBpcyBuZXNzZXNhcnkgY2hvb3NpbmcgbmV4dCBtaW5fbHNuICovCisJaWYgKHN0YXRlLT5t aW5fbHNuID09IHRyZ19sc24pCisJeworCQlzdGF0ZS0+bWluX2xzbiA9IFBHX1VJTlQ2NF9NQVg7 CisJCWZvciAoaSA9IDI7IGkgPD0gc3RhdGUtPmJhY2tlbmRfbWF4aWQ7IGkrKykKKwkJCWlmIChz dGF0ZS0+ZXZlbnRfYXJyW2ldLnRyZ19sc24gIT0gSW52YWxpZFhMb2dSZWNQdHIgJiYKKwkJCQlz dGF0ZS0+ZXZlbnRfYXJyW2ldLnRyZ19sc24gPCBzdGF0ZS0+bWluX2xzbikKKwkJCQlzdGF0ZS0+ bWluX2xzbiA9IHN0YXRlLT5ldmVudF9hcnJbaV0udHJnX2xzbjsKKwl9CisKKwlpZiAoc3RhdGUt PmJhY2tlbmRfbWF4aWQgPT0gTXlCYWNrZW5kSWQpCisJCWZvciAoaSA9IChNeUJhY2tlbmRJZCk7 IGkgPj0yOyBpLS0pCisJCQlpZiAoc3RhdGUtPmV2ZW50X2FycltpXS50cmdfbHNuICE9IEludmFs aWRYTG9nUmVjUHRyKQorCQkJeworCQkJCXN0YXRlLT5iYWNrZW5kX21heGlkID0gaTsKKwkJCQli cmVhazsKKwkJCX0KKworCVNwaW5Mb2NrUmVsZWFzZSgmc3RhdGUtPm11dGV4KTsKK30KKworLyog R2V0IHNpemUgb2Ygc2hhcmVkIG1lbW9yeSBmb3IgR2xvYlN0YXRlICovCitTaXplCitXYWl0U2ht ZW1TaXplKHZvaWQpCit7CisJcmV0dXJuIG9mZnNldG9mKEdsb2JTdGF0ZSwgZXZlbnRfYXJyKSAr IHNpemVvZihCSURTdGF0ZSkgKiAoTWF4QmFja2VuZHMrMSk7Cit9CisKKy8qIEluaXQgYXJyYXkg b2YgZXZlbnRzIGluIHNoYXJlZCBtZW1vcnkgKi8KK3ZvaWQKK1dhaXRTaG1lbUluaXQodm9pZCkK K3sKKwlib29sCWZvdW5kOworCXVpbnQzMglpOworCisJc3RhdGUgPSAoR2xvYlN0YXRlICopIFNo bWVtSW5pdFN0cnVjdCgicGdfd2FpdF9sc24iLAorCQkJCQkJCQkJCSAgV2FpdFNobWVtU2l6ZSgp LAorCQkJCQkJCQkJCSAgJmZvdW5kKTsKKwlpZiAoIWZvdW5kKQorCXsKKwkJU3BpbkxvY2tJbml0 KCZzdGF0ZS0+bXV0ZXgpOworCisJCWZvciAoaSA9IDA7IGkgPCAoTWF4QmFja2VuZHMrMSk7IGkr KykKKwkJCXN0YXRlLT5ldmVudF9hcnJbaV0udHJnX2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOwor CisJCXN0YXRlLT5iYWNrZW5kX21heGlkID0gMDsKKwkJc3RhdGUtPm1pbl9sc24gPSBQR19VSU5U NjRfTUFYOworCX0KK30KKworLyogU2V0IGFsbCBMYXRjaGVzIGluIHNoYXJlZCBtZW1vcnkgY2F1 c2UgbmV3IExTTiBiZWluZyByZXBsYXllZCAqLwordm9pZAorV2FpdFNldExhdGNoKFhMb2dSZWNQ dHIgY3VyX2xzbikKK3sKKwl1aW50MzIJCWk7CisJaW50IAkJYmFja2VuZF9tYXhpZDsKKwlQR1BS T0MJICAgKmJhY2tlbmQ7CisKKwlTcGluTG9ja0FjcXVpcmUoJnN0YXRlLT5tdXRleCk7CisJYmFj a2VuZF9tYXhpZCA9IHN0YXRlLT5iYWNrZW5kX21heGlkOworCVNwaW5Mb2NrUmVsZWFzZSgmc3Rh dGUtPm11dGV4KTsKKworCWZvciAoaSA9IDI7IGkgPD0gYmFja2VuZF9tYXhpZDsgaSsrKQorCXsK KwkJYmFja2VuZCA9IEJhY2tlbmRJZEdldFByb2MoaSk7CisJCWlmIChzdGF0ZS0+ZXZlbnRfYXJy W2ldLnRyZ19sc24gIT0gMCkKKwkJeworCQkJaWYgKHN0YXRlLT5ldmVudF9hcnJbaV0udHJnX2xz biA8PSBjdXJfbHNuKQorCQkJCVNldExhdGNoKCZiYWNrZW5kLT5wcm9jTGF0Y2gpOworCQl9CisJ fQorfQorCisvKiBHZXQgbWluaW1hbCBMU04gdGhhdCB3aWxsIGJlIG5leHQgKi8KK1hMb2dSZWNQ dHIKK0dldE1pbldhaXQodm9pZCkKK3sKKwlyZXR1cm4gc3RhdGUtPm1pbl9sc247Cit9CisKKy8q CisgKiBPbiBXQUlUIG93biBNeUxhdGNoIGFuZCB3YWl0IHRpbGwgTFNOIGlzIHJlcGxheWVkLCBQ b3N0bWFzdGVyIGRlYXRoIGludGVycnVwdGlvbgorICogb3IgdGltZW91dC4KKyAqLwordm9pZAor V2FpdFV0aWxpdHkoY29uc3QgY2hhciAqbHNuLCBjb25zdCBpbnQgZGVsYXksIERlc3RSZWNlaXZl ciAqZGVzdCkKK3sKKwlYTG9nUmVjUHRyCQl0cmdfbHNuID0gRGF0dW1HZXRMU04oRGlyZWN0RnVu Y3Rpb25DYWxsMShwZ19sc25faW4sIENTdHJpbmdHZXREYXR1bShsc24pKSk7CisJWExvZ1JlY1B0 cgkJY3VyX2xzbjsKKwlpbnQJCQkJbGF0Y2hfZXZlbnRzOworCXVpbnQ2NAkJCXRkZWxheSA9IGRl bGF5OworCWxvbmcJCQlzZWNzOworCWludAkJCQltaWNyb3NlY3M7CisJVGltZXN0YW1wVHoJCXRp bWVyID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOworCVR1cE91dHB1dFN0YXRlICp0c3RhdGU7CisJ VHVwbGVEZXNjCQl0dXBkZXNjOworCWNoYXIJCSAgICp2YWx1ZSA9ICJmIjsKKworCWlmIChkZWxh eSA+IDApCisJCWxhdGNoX2V2ZW50cyA9IFdMX0xBVENIX1NFVCB8IFdMX1RJTUVPVVQgfCBXTF9Q T1NUTUFTVEVSX0RFQVRIOworCWVsc2UKKwkJbGF0Y2hfZXZlbnRzID0gV0xfTEFUQ0hfU0VUIHwg V0xfUE9TVE1BU1RFUl9ERUFUSDsKKworCUFkZEV2ZW50KHRyZ19sc24pOworCisJZm9yICg7OykK Kwl7CisJCWN1cl9sc24gPSBHZXRYTG9nUmVwbGF5UmVjUHRyKE5VTEwpOworCisJCS8qIElmIExT TiBoYXMgYmVlbiBSZXBsYXllZCAqLworCQlpZiAodHJnX2xzbiA8PSBjdXJfbHNuKQorCQkJYnJl YWs7CisKKwkJLyogSWYgdGhlIHBvc3RtYXN0ZXIgZGllcywgZmluaXNoIGltbWVkaWF0ZWx5ICov CisJCWlmICghUG9zdG1hc3RlcklzQWxpdmUoKSkKKwkJCWJyZWFrOworCisJCS8qIElmIGRlbGF5 IHRpbWUgaXMgb3ZlciAqLworCQlpZiAobGF0Y2hfZXZlbnRzICYgV0xfVElNRU9VVCkKKwkJewor CQkJaWYgKFRpbWVzdGFtcERpZmZlcmVuY2VFeGNlZWRzKHRpbWVyLEdldEN1cnJlbnRUaW1lc3Rh bXAoKSxkZWxheSkpCisJCQkJYnJlYWs7CisJCQlUaW1lc3RhbXBEaWZmZXJlbmNlKHRpbWVyLEdl dEN1cnJlbnRUaW1lc3RhbXAoKSwmc2VjcywgJm1pY3Jvc2Vjcyk7CisJCQl0ZGVsYXkgPSBkZWxh eSAtIChzZWNzKjEwMDAgKyBtaWNyb3NlY3MvMTAwMCk7CisJCX0KKworCQkvKiBMaXR0bGUgaGFj ayBiZWhhdmlvdXIgbGlrZSBTbmFwc2hvdFJlc2V0WG1pbiB0byB3b3JrIG91dG9mZiBzbmFwc2hv dCovCisJCU15UGdYYWN0LT54bWluID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJCVdhaXRMYXRj aChNeUxhdGNoLCBsYXRjaF9ldmVudHMsIHRkZWxheSwgV0FJVF9FVkVOVF9DTElFTlRfUkVBRCk7 CisJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisKKwkJLyogQ0hFQ0tfRk9SX0lOVEVSUlVQVFMgaWYg dGhleSBjb21lIHRoZW4gRGVsZXRlIGN1cnJlbnQgZXZlbnQgZnJvbSBhcnJheSAqLworCQlpZiAo SW50ZXJydXB0UGVuZGluZykKKwkJeworCQkJRGVsZXRlRXZlbnQoKTsKKwkJCVByb2Nlc3NJbnRl cnJ1cHRzKCk7CisJCX0KKworCX0KKworCURlbGV0ZUV2ZW50KCk7CisKKwlpZiAodHJnX2xzbiA+ IGN1cl9sc24pCisJCWVsb2coTk9USUNFLCJMU04gaXMgbm90IHJlYWNoZWQuIFRyeSB0byBpbmNy ZWFzZSB3YWl0IHRpbWUuIik7CisJZWxzZQorCQl2YWx1ZSA9ICJ0IjsKKworCS8qIE5lZWQgYSB0 dXBsZSBkZXNjcmlwdG9yIHJlcHJlc2VudGluZyBhIHNpbmdsZSBURVhUIGNvbHVtbiAqLworCXR1 cGRlc2MgPSBDcmVhdGVUZW1wbGF0ZVR1cGxlRGVzYygxKTsKKwlUdXBsZURlc2NJbml0RW50cnko dHVwZGVzYywgKEF0dHJOdW1iZXIpIDEsICJMU04gcmVhY2hlZCIsIFRFWFRPSUQsIC0xLCAwKTsK KwkvKiBQcmVwYXJlIGZvciBwcm9qZWN0aW9uIG9mIHR1cGxlcyAqLworCXRzdGF0ZSA9IGJlZ2lu X3R1cF9vdXRwdXRfdHVwZGVzYyhkZXN0LCB0dXBkZXNjLCAmVFRTT3BzTWluaW1hbFR1cGxlKTsK KworCS8qIFNlbmQgaXQgKi8KKwlkb190ZXh0X291dHB1dF9vbmVsaW5lKHRzdGF0ZSwgdmFsdWUp OworCWVuZF90dXBfb3V0cHV0KHRzdGF0ZSk7Cit9CisKK3ZvaWQKK1dhaXRUaW1lVXRpbGl0eShj b25zdCBpbnQgZGVsYXkpCit7CisJaW50CQkJCWxhdGNoX2V2ZW50czsKKworCWlmIChkZWxheSA8 IDApCisJCXJldHVybiA7CisKKwlsYXRjaF9ldmVudHMgPSBXTF9USU1FT1VUIHwgV0xfUE9TVE1B U1RFUl9ERUFUSDsKKworCU15UGdYYWN0LT54bWluID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJ V2FpdExhdGNoKE15TGF0Y2gsIGxhdGNoX2V2ZW50cywgZGVsYXksIFdBSVRfRVZFTlRfQ0xJRU5U X1JFQUQpOworCVJlc2V0TGF0Y2goTXlMYXRjaCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9wYXJzZXIvYW5hbHl6ZS5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2FuYWx5emUuYwppbmRleCBl Y2Q2YThiYWU3ZC4uNWNjZjE0ZWFkNDYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9h bmFseXplLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2FuYWx5emUuYwpAQCAtNzgsNiArNzgs NyBAQCBzdGF0aWMgUXVlcnkgKnRyYW5zZm9ybUNyZWF0ZVRhYmxlQXNTdG10KFBhcnNlU3RhdGUg KnBzdGF0ZSwKIAkJCQkJCQkJCQkgQ3JlYXRlVGFibGVBc1N0bXQgKnN0bXQpOwogc3RhdGljIFF1 ZXJ5ICp0cmFuc2Zvcm1DYWxsU3RtdChQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkJCUNhbGxT dG10ICpzdG10KTsKK3N0YXRpYyBRdWVyeSAqdHJhbnNmb3JtV2FpdEZvclN0bXQoUGFyc2VTdGF0 ZSAqcHN0YXRlLCBXYWl0U3RtdCAqc3RtdCk7CiBzdGF0aWMgdm9pZCB0cmFuc2Zvcm1Mb2NraW5n Q2xhdXNlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgUXVlcnkgKnFyeSwKIAkJCQkJCQkJICAgTG9ja2lu Z0NsYXVzZSAqbGMsIGJvb2wgcHVzaGVkRG93bik7CiAjaWZkZWYgUkFXX0VYUFJFU1NJT05fQ09W RVJBR0VfVEVTVApAQCAtMzI2LDYgKzMyNyw5IEBAIHRyYW5zZm9ybVN0bXQoUGFyc2VTdGF0ZSAq cHN0YXRlLCBOb2RlICpwYXJzZVRyZWUpCiAJCQlyZXN1bHQgPSB0cmFuc2Zvcm1DYWxsU3RtdChw c3RhdGUsCiAJCQkJCQkJCQkgICAoQ2FsbFN0bXQgKikgcGFyc2VUcmVlKTsKIAkJCWJyZWFrOwor CQljYXNlIFRfV2FpdFN0bXQ6CisJCQlyZXN1bHQgPSB0cmFuc2Zvcm1XYWl0Rm9yU3RtdChwc3Rh dGUsIChXYWl0U3RtdCAqKSBwYXJzZVRyZWUpOworCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKIApA QCAtMjk4MSw2ICsyOTg1LDIwIEBAIGFwcGx5TG9ja2luZ0NsYXVzZShRdWVyeSAqcXJ5LCBJbmRl eCBydGluZGV4LAogCXFyeS0+cm93TWFya3MgPSBsYXBwZW5kKHFyeS0+cm93TWFya3MsIHJjKTsK IH0KIAorc3RhdGljIFF1ZXJ5ICoKK3RyYW5zZm9ybVdhaXRGb3JTdG10KFBhcnNlU3RhdGUgKnBz dGF0ZSwgV2FpdFN0bXQgKnN0bXQpCit7CisJUXVlcnkgKnJlc3VsdDsKKworCXN0bXQtPnRpbWUg PSB0cmFuc2Zvcm1FeHByKHBzdGF0ZSwgc3RtdC0+dGltZSwgRVhQUl9LSU5EX09USEVSKTsKKwor CXJlc3VsdCA9IG1ha2VOb2RlKFF1ZXJ5KTsKKwlyZXN1bHQtPmNvbW1hbmRUeXBlID0gQ01EX1VU SUxJVFk7CisJcmVzdWx0LT51dGlsaXR5U3RtdCA9IChOb2RlICopIHN0bXQ7CisKKwlyZXR1cm4g cmVzdWx0OworfQorCiAvKgogICogQ292ZXJhZ2UgdGVzdGluZyBmb3IgcmF3X2V4cHJlc3Npb25f dHJlZV93YWxrZXIoKS4KICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55 IGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQppbmRleCAyMDhiNGExZjI4YS4uZDEzZTIyZmVh ODYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKKysrIGIvc3JjL2JhY2tl bmQvcGFyc2VyL2dyYW0ueQpAQCAtMjc2LDcgKzI3Niw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVj dXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVy eSk7CiAJCVNlY0xhYmVsU3RtdCBTZWxlY3RTdG10IFRyYW5zYWN0aW9uU3RtdCBUcnVuY2F0ZVN0 bXQKIAkJVW5saXN0ZW5TdG10IFVwZGF0ZVN0bXQgVmFjdXVtU3RtdAogCQlWYXJpYWJsZVJlc2V0 U3RtdCBWYXJpYWJsZVNldFN0bXQgVmFyaWFibGVTaG93U3RtdAotCQlWaWV3U3RtdCBDaGVja1Bv aW50U3RtdCBDcmVhdGVDb252ZXJzaW9uU3RtdAorCQlWaWV3U3RtdCBXYWl0U3RtdCBDaGVja1Bv aW50U3RtdCBDcmVhdGVDb252ZXJzaW9uU3RtdAogCQlEZWFsbG9jYXRlU3RtdCBQcmVwYXJlU3Rt dCBFeGVjdXRlU3RtdAogCQlEcm9wT3duZWRTdG10IFJlYXNzaWduT3duZWRTdG10CiAJCUFsdGVy VFNDb25maWd1cmF0aW9uU3RtdCBBbHRlclRTRGljdGlvbmFyeVN0bXQKQEAgLTQ4NSw3ICs0ODUs NyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwg TGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogJXR5cGUgPGxpc3Q+CXJvdyBleHBsaWNpdF9y b3cgaW1wbGljaXRfcm93IHR5cGVfbGlzdCBhcnJheV9leHByX2xpc3QKICV0eXBlIDxub2RlPglj YXNlX2V4cHIgY2FzZV9hcmcgd2hlbl9jbGF1c2UgY2FzZV9kZWZhdWx0CiAldHlwZSA8bGlzdD4J d2hlbl9jbGF1c2VfbGlzdAotJXR5cGUgPGl2YWw+CXN1Yl90eXBlIG9wdF9tYXRlcmlhbGl6ZWQK KyV0eXBlIDxpdmFsPglzdWJfdHlwZSB3YWl0X3N0cmF0ZWd5IG9wdF9tYXRlcmlhbGl6ZWQKICV0 eXBlIDx2YWx1ZT4JTnVtZXJpY09ubHkKICV0eXBlIDxsaXN0PglOdW1lcmljT25seV9saXN0CiAl dHlwZSA8YWxpYXM+CWFsaWFzX2NsYXVzZSBvcHRfYWxpYXNfY2xhdXNlCkBAIC02NTUsNyArNjU1 LDcgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUs IExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAogCUxBQkVMIExBTkdVQUdFIExBUkdFX1Ag TEFTVF9QIExBVEVSQUxfUAogCUxFQURJTkcgTEVBS1BST09GIExFQVNUIExFRlQgTEVWRUwgTElL RSBMSU1JVCBMSVNURU4gTE9BRCBMT0NBTAotCUxPQ0FMVElNRSBMT0NBTFRJTUVTVEFNUCBMT0NB VElPTiBMT0NLX1AgTE9DS0VEIExPR0dFRAorCUxPQ0FMVElNRSBMT0NBTFRJTUVTVEFNUCBMT0NB VElPTiBMT0NLX1AgTE9DS0VEIExPR0dFRCBMU04KIAogCU1BUFBJTkcgTUFUQ0ggTUFURVJJQUxJ WkVEIE1BWFZBTFVFIE1FVEhPRCBNSU5VVEVfUCBNSU5WQUxVRSBNT0RFIE1PTlRIX1AgTU9WRQog CkBAIC02ODUsNyArNjg1LDcgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0 KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAlTVUJTQ1JJUFRJ T04gU1VCU1RSSU5HIFNVUFBPUlQgU1lNTUVUUklDIFNZU0lEIFNZU1RFTV9QCiAKIAlUQUJMRSBU QUJMRVMgVEFCTEVTQU1QTEUgVEFCTEVTUEFDRSBURU1QIFRFTVBMQVRFIFRFTVBPUkFSWSBURVhU X1AgVEhFTgotCVRJRVMgVElNRSBUSU1FU1RBTVAgVE8gVFJBSUxJTkcgVFJBTlNBQ1RJT04gVFJB TlNGT1JNCisJVElFUyBUSU1FIFRJTUVPVVQgVElNRVNUQU1QIFRPIFRSQUlMSU5HIFRSQU5TQUNU SU9OIFRSQU5TRk9STQogCVRSRUFUIFRSSUdHRVIgVFJJTSBUUlVFX1AKIAlUUlVOQ0FURSBUUlVT VEVEIFRZUEVfUCBUWVBFU19QCiAKQEAgLTY5NSw3ICs2OTUsOCBAQCBzdGF0aWMgTm9kZSAqbWFr ZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAq cXVlcnkpOwogCVZBQ1VVTSBWQUxJRCBWQUxJREFURSBWQUxJREFUT1IgVkFMVUVfUCBWQUxVRVMg VkFSQ0hBUiBWQVJJQURJQyBWQVJZSU5HCiAJVkVSQk9TRSBWRVJTSU9OX1AgVklFVyBWSUVXUyBW T0xBVElMRQogCi0JV0hFTiBXSEVSRSBXSElURVNQQUNFX1AgV0lORE9XIFdJVEggV0lUSElOIFdJ VEhPVVQgV09SSyBXUkFQUEVSIFdSSVRFCisJV0FJVCBXSEVOIFdIRVJFIFdISVRFU1BBQ0VfUCBX SU5ET1cKKwlXSVRIIFdJVEhJTiBXSVRIT1VUIFdPUksgV1JBUFBFUiBXUklURQogCiAJWE1MX1Ag WE1MQVRUUklCVVRFUyBYTUxDT05DQVQgWE1MRUxFTUVOVCBYTUxFWElTVFMgWE1MRk9SRVNUIFhN TE5BTUVTUEFDRVMKIAlYTUxQQVJTRSBYTUxQSSBYTUxST09UIFhNTFNFUklBTElaRSBYTUxUQUJM RQpAQCAtOTQ3LDYgKzk0OCw3IEBAIHN0bXQgOgogCQkJfCBWYXJpYWJsZVNldFN0bXQKIAkJCXwg VmFyaWFibGVTaG93U3RtdAogCQkJfCBWaWV3U3RtdAorCQkJfCBXYWl0U3RtdAogCQkJfCAvKkVN UFRZKi8KIAkJCQl7ICQkID0gTlVMTDsgfQogCQk7CkBAIC0xNDAxMCw2ICsxNDAxMiw4OCBAQCB4 bWxfcGFzc2luZ19tZWNoOgogCQkJfCBCWSBWQUxVRV9QCiAJCTsKIAorLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqCisgKgorICoJCVFVRVJZOgorICoJCQkJV0FJVCBGT1IgPGV2ZW50PiBbLCA8ZXZlbnQ+ IC4uLl0gW29wdGlvbl0KKyAqCQkJCWV2ZW50OgorICoJCQkJCUxTTiB2YWx1ZQorICoJCQkJCVRJ TUVPVVQgdmFsdWUKKyAqCQkJCQlUSU1FU1RBTVAgdGltZXN0YW1wCisgKgkJCQlvcHRpb246Cisg KgkJCQkJVElNRU9VVCBkZWxheQorICoJCQkJCVVOVElMIFRJTUVTVEFNUCB0aW1lc3RhbXAKKyAq CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCisKK1dhaXRTdG10OgorCQkJV0FJVCBGT1Igd2FpdF9z dHJhdGVneSBMU04gU2NvbnN0CisJCQkJeworCQkJCQlXYWl0U3RtdCAqbiA9IG1ha2VOb2RlKFdh aXRTdG10KTsKKwkJCQkJbi0+a2luZCA9IFdBSVRfRk9SX0xTTjsKKwkJCQkJbi0+bHNuID0gJDU7 CisJCQkJCW4tPmRlbGF5ID0gMDsKKwkJCQkJbi0+dGltZSA9IDA7CisJCQkJCSQkID0gKE5vZGUg KiluOworCQkJCX0KKwkJCXwgV0FJVCBGT1IgIHdhaXRfc3RyYXRlZ3kgTFNOIFNjb25zdCBUSU1F T1VUIEljb25zdAorCQkJCXsKKwkJCQkJV2FpdFN0bXQgKm4gPSBtYWtlTm9kZShXYWl0U3RtdCk7 CisJCQkJCW4tPmtpbmQgPSBXQUlUX0ZPUl9NSVg7CisJCQkJCW4tPmxzbiA9ICQ1OworCQkJCQlu LT5kZWxheSA9ICQ3OworCQkJCQluLT50aW1lID0gMDsKKwkJCQkJJCQgPSAoTm9kZSAqKW47CisJ CQkJfQorCQkJfCBXQUlUIEZPUiAgd2FpdF9zdHJhdGVneSBMU04gU2NvbnN0IFVOVElMIENvbnN0 RGF0ZXRpbWUgU2NvbnN0CisJCQkJeworCQkJCQlXYWl0U3RtdCAqbiA9IG1ha2VOb2RlKFdhaXRT dG10KTsKKwkJCQkJbi0+a2luZCA9IFdBSVRfRk9SX01JWDsKKwkJCQkJbi0+bHNuID0gJDU7CisJ CQkJCW4tPmRlbGF5ID0gMDsKKwkJCQkJbi0+dGltZSA9IG1ha2VTdHJpbmdDb25zdENhc3QoJDgs IEA4LCAkNyk7CisJCQkJCSQkID0gKE5vZGUgKiluOworCQkJCX0KKwkJCXwgV0FJVCBGT1Igd2Fp dF9zdHJhdGVneSBDb25zdERhdGV0aW1lIFNjb25zdAorCQkJCXsKKwkJCQkJV2FpdFN0bXQgKm4g PSBtYWtlTm9kZShXYWl0U3RtdCk7CisJCQkJCW4tPmtpbmQgPSBXQUlUX0ZPUl9USU1FOworCQkJ CQluLT5sc24gPSBOVUxMOworCQkJCQluLT5kZWxheSA9IDA7CisJCQkJCW4tPnRpbWUgPSBtYWtl U3RyaW5nQ29uc3RDYXN0KCQ1LCBANSwgJDQpOworCQkJCQkkJCA9IChOb2RlICopbjsKKwkJCQl9 CisJCTsKKword2FpdF9zdHJhdGVneToKKwkJCUFMTAkJCQkJeyAkJCA9IFdBSVRfRk9SX0FMTDsg fQorCQkJfCBBTlkJCQkJeyAkJCA9IFdBSVRfRk9SX0FOWTsgfQorCQkJfCBTT01FCQkJCXsgJCQg PSBXQUlUX0ZPUl9BTlk7IH0KKwkJCXwgLyogRU1QVFkgKi8JCXsgJCQgPSBXQUlUX0ZPUl9BTlk7 IH0KKwkJOworLyoKK1dhaXRFdmVudDoKKwkJCUxTTiBTY29uc3QgV2FpdE9wdGlvbgorCQkJCXsK KwkJCQkJVHlwZU5hbWUgKnQgPSBtYWtlVHlwZU5hbWVGcm9tTmFtZUxpc3QoInBnX2xzbiIpOwor CQkJCQl0LT5sb2NhdGlvbiA9IEAxOworCQkJCQkkJCA9IG1ha2VTdHJpbmdDb25zdENhc3QoJDIs IEAyLCB0KTsKKwkJCQl9CisJCQl8IFdhaXRPcHRpb24KKwkJCQl7CisJCQkJCSQkID0gJDE7CisJ CQkJfQorCQk7CisKK1dhaXRPcHRpb246CisJCQlDb25zdERhdGV0aW1lIFNjb25zdAorCQkJCXsK KwkJCQkkJCA9IG1ha2VTdHJpbmdDb25zdENhc3QoJDIsIEAyLCAkMSk7CisJCQkJfQorCQkJfAor CQkJCXsgJCQgLSBOSUw7IH0KKwkJOworKi8KIAogLyoKICAqIEFnZ3JlZ2F0ZSBkZWNvcmF0aW9u IGNsYXVzZXMKQEAgLTE1MTUzLDYgKzE1MjM3LDcgQEAgdW5yZXNlcnZlZF9rZXl3b3JkOgogCQkJ fCBMT0NLX1AKIAkJCXwgTE9DS0VECiAJCQl8IExPR0dFRAorCQkJfCBMU04KIAkJCXwgTUFQUElO RwogCQkJfCBNQVRDSAogCQkJfCBNQVRFUklBTElaRUQKQEAgLTE1Mjc1LDYgKzE1MzYwLDcgQEAg dW5yZXNlcnZlZF9rZXl3b3JkOgogCQkJfCBURU1QT1JBUlkKIAkJCXwgVEVYVF9QCiAJCQl8IFRJ RVMKKwkJCXwgVElNRU9VVAogCQkJfCBUUkFOU0FDVElPTgogCQkJfCBUUkFOU0ZPUk0KIAkJCXwg VFJJR0dFUgpAQCAtMTUzMDAsNiArMTUzODYsNyBAQCB1bnJlc2VydmVkX2tleXdvcmQ6CiAJCQl8 IFZJRVcKIAkJCXwgVklFV1MKIAkJCXwgVk9MQVRJTEUKKwkJCXwgV0FJVAogCQkJfCBXSElURVNQ QUNFX1AKIAkJCXwgV0lUSElOCiAJCQl8IFdJVEhPVVQKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3N0b3JhZ2UvaXBjL2lwY2kuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwppbmRl eCBkN2Q3MzM1MzBmZi4uMDU4NzY2MzRkMjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvaXBjL2lwY2kuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKQEAgLTIy LDYgKzIyLDcgQEAKICNpbmNsdWRlICJhY2Nlc3Mvc3VidHJhbnMuaCIKICNpbmNsdWRlICJhY2Nl c3MvdHdvcGhhc2UuaCIKICNpbmNsdWRlICJjb21tYW5kcy9hc3luYy5oIgorI2luY2x1ZGUgImNv bW1hbmRzL3dhaXQuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQu aCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2F1dG92YWN1dW0uaCIKQEAgLTE0Nyw2ICsxNDgsNyBA QCBDcmVhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzKGludCBwb3J0KQogCQlzaXplID0gYWRk X3NpemUoc2l6ZSwgQlRyZWVTaG1lbVNpemUoKSk7CiAJCXNpemUgPSBhZGRfc2l6ZShzaXplLCBT eW5jU2NhblNobWVtU2l6ZSgpKTsKIAkJc2l6ZSA9IGFkZF9zaXplKHNpemUsIEFzeW5jU2htZW1T aXplKCkpOworCQlzaXplID0gYWRkX3NpemUoc2l6ZSwgV2FpdFNobWVtU2l6ZSgpKTsKICNpZmRl ZiBFWEVDX0JBQ0tFTkQKIAkJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFNobWVtQmFja2VuZEFycmF5 U2l6ZSgpKTsKICNlbmRpZgpAQCAtMjY0LDYgKzI2NiwxMSBAQCBDcmVhdGVTaGFyZWRNZW1vcnlB bmRTZW1hcGhvcmVzKGludCBwb3J0KQogCVN5bmNTY2FuU2htZW1Jbml0KCk7CiAJQXN5bmNTaG1l bUluaXQoKTsKIAorCS8qCisJICogSW5pdCBhcnJheSBvZiBMYXRjaGVzIGluIFNITUVNIGZvciBX YWl0CisJICovCisJV2FpdFNobWVtSW5pdCgpOworCiAjaWZkZWYgRVhFQ19CQUNLRU5ECiAKIAkv KgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMgYi9zcmMvYmFja2VuZC90 Y29wL3V0aWxpdHkuYwppbmRleCAwNWVjN2YzYWM2MS4uYTFlMDdjMmM4ZjAgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0 eS5jCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSAiY29tbWFuZHMvdXNlci5oIgogI2luY2x1 ZGUgImNvbW1hbmRzL3ZhY3V1bS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3ZpZXcuaCIKKyNpbmNs dWRlICJjb21tYW5kcy93YWl0LmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAi cGFyc2VyL3BhcnNlX3V0aWxjbWQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2Jnd3JpdGVyLmgi CkBAIC03MCw2ICs3MSw3IEBACiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVk ZSAidXRpbHMvc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKKyNpbmNsdWRlICJl eGVjdXRvci9zcGkuaCIKIAogCiAvKiBIb29rIGZvciBwbHVnaW5zIHRvIGdldCBjb250cm9sIGlu IFByb2Nlc3NVdGlsaXR5KCkgKi8KQEAgLTkyMiw2ICs5MjQsNjEgQEAgc3RhbmRhcmRfUHJvY2Vz c1V0aWxpdHkoUGxhbm5lZFN0bXQgKnBzdG10LAogCQkJCWJyZWFrOwogCQkJfQogCisJCWNhc2Ug VF9XYWl0U3RtdDoKKwkJCXsKKwkJCQlXYWl0U3RtdCAqc3RtdCA9IChXYWl0U3RtdCAqKSBwYXJz ZXRyZWU7CisJCQkJZmxvYXQ4IHRpbWVfdmFsOworCisJCQkJaWYgKHN0bXQtPnRpbWUpCisJCQkJ eworCQkJCQlDb25zdCAqdGltZSA9IChDb25zdCAqKSBzdG10LT50aW1lOworCQkJCQlpbnQgcmV0 OworCisJCQkJCU9pZAkJdHlwZXNbXSA9IHsgdGltZS0+Y29uc3R0eXBlIH07CisJCQkJCURhdHVt CXZhbHVlc1tdID0geyB0aW1lLT5jb25zdHZhbHVlIH07CisJCQkJCWNoYXIJbnVsbHNbXSA9IHsg IiAiIH07CisKKwkJCQkJRGF0dW0gcmVzdWx0OworCQkJCQlib29sIGlzbnVsbDsKKworCQkJCQlT UElfY29ubmVjdCgpOworCisJCQkJCWlmICh0aW1lLT5jb25zdHR5cGUgPT0gMTA4MykKKwkJCQkJ CXJldCA9IFNQSV9leGVjdXRlX3dpdGhfYXJncygic2VsZWN0IGV4dHJhY3QgKGVwb2NoIGZyb20g KCQxIC0gbm93KCk6OnRpbWUpKSIsCisJCQkJCQkJCQkJCQkJMSwgdHlwZXMsIHZhbHVlcywgbnVs bHMsIHRydWUsIDApOworCQkJCQllbHNlIGlmICh0aW1lLT5jb25zdHR5cGUgPT0gMTI2NikKKwkJ CQkJCXJldCA9IFNQSV9leGVjdXRlX3dpdGhfYXJncygic2VsZWN0IGV4dHJhY3QgKGVwb2NoIGZy b20gKHRpbWV6b25lKCdVVEMnLCQxKTo6dGltZSAtIHRpbWV6b25lKCdVVEMnLCBub3coKTo6dGlt ZXR6KTo6dGltZSkpIiwKKwkJCQkJCQkJCQkJCQkxLCB0eXBlcywgdmFsdWVzLCBudWxscywgdHJ1 ZSwgMCk7CisJCQkJCWVsc2UKKwkJCQkJCXJldCA9IFNQSV9leGVjdXRlX3dpdGhfYXJncygic2Vs ZWN0IGV4dHJhY3QgKGVwb2NoIGZyb20gKCQxIC0gbm93KCkpKSIsCisJCQkJCQkJCQkJCQkJMSwg dHlwZXMsIHZhbHVlcywgbnVsbHMsIHRydWUsIDApOworCisJCQkJCUFzc2VydChyZXQgPj0gMCk7 CisJCQkJCXJlc3VsdCA9IFNQSV9nZXRiaW52YWwoU1BJX3R1cHRhYmxlLT52YWxzWzBdLAorCQkJ CQkJCQkJCSAgIFNQSV90dXB0YWJsZS0+dHVwZGVzYywKKwkJCQkJCQkJCQkgICAxLCAmaXNudWxs KTsKKworCQkJCQlBc3NlcnQoIWlzbnVsbCk7CisJCQkJCXRpbWVfdmFsID0gRGF0dW1HZXRGbG9h dDgocmVzdWx0KTsKKworCQkJCQllbG9nKElORk8sICJ0aW1lOiAlZiIsIHRpbWVfdmFsKTsKKwor CQkJCQlTUElfZmluaXNoKCk7CisJCQkJfQorCisJCQkJaWYgKHRpbWVfdmFsIDw9IDApCisJCQkJ CXRpbWVfdmFsID0gMDsKKworCQkJCWlmICghc3RtdC0+ZGVsYXkpCisJCQkJCXN0bXQtPmRlbGF5 ID0gKGludCkodGltZV92YWwgKiAxMDAwKTsKKworCQkJCWlmIChzdG10LT5raW5kID09IFdBSVRf Rk9SX1RJTUUpCisJCQkJCVdhaXRUaW1lVXRpbGl0eSh0aW1lX3ZhbCAqIDEwMDApOworCQkJCWVs c2UKKwkJCQkJV2FpdFV0aWxpdHkoc3RtdC0+bHNuLCBzdG10LT5kZWxheSwgZGVzdCk7CisJCQl9 CisJCQlicmVhazsKKwogCQlkZWZhdWx0OgogCQkJLyogQWxsIG90aGVyIHN0YXRlbWVudCB0eXBl cyBoYXZlIGV2ZW50IHRyaWdnZXIgc3VwcG9ydCAqLwogCQkJUHJvY2Vzc1V0aWxpdHlTbG93KHBz dGF0ZSwgcHN0bXQsIHF1ZXJ5U3RyaW5nLApAQCAtMjU2Nyw2ICsyNjI0LDEwIEBAIENyZWF0ZUNv bW1hbmRUYWcoTm9kZSAqcGFyc2V0cmVlKQogCQkJdGFnID0gIk5PVElGWSI7CiAJCQlicmVhazsK IAorCQljYXNlIFRfV2FpdFN0bXQ6CisJCQl0YWcgPSAiV0FJVCI7CisJCQlicmVhazsKKwogCQlj YXNlIFRfTGlzdGVuU3RtdDoKIAkJCXRhZyA9ICJMSVNURU4iOwogCQkJYnJlYWs7CkBAIC0zMTk0 LDYgKzMyNTUsMTAgQEAgR2V0Q29tbWFuZExvZ0xldmVsKE5vZGUgKnBhcnNldHJlZSkKIAkJCWxl diA9IExPR1NUTVRfQUxMOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBUX1dhaXRTdG10OgorCQkJbGV2 ID0gTE9HU1RNVF9BTEw7CisJCQlicmVhazsKKwogCQljYXNlIFRfTGlzdGVuU3RtdDoKIAkJCWxl diA9IExPR1NUTVRfQUxMOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21t YW5kcy93YWl0LmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy93YWl0LmgKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjgxNWFhYTJmOTJmCi0tLSAvZGV2L251bGwKKysrIGIv c3JjL2luY2x1ZGUvY29tbWFuZHMvd2FpdC5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICoKKyAqIHdhaXQuaAorICoJICB3YWl0IG5vdGlmaWNhdGlvbjogd2FpdAorICoK KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDE2LCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDE2LCBSZWdlbnRz IG9mIFBvc3RncmVzUFJPCisgKgorICogc3JjL2luY2x1ZGUvY29tbWFuZHMvd2FpdC5oCisgKgor ICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgV0FJVF9ICisjZGVmaW5lIFdBSVRfSAor I2luY2x1ZGUgInBvc3RncmVzLmgiCisjaW5jbHVkZSAidGNvcC9kZXN0LmgiCisKK2V4dGVybiB2 b2lkIFdhaXRVdGlsaXR5KGNvbnN0IGNoYXIgKmxzbiwgY29uc3QgaW50IGRlbGF5LCBEZXN0UmVj ZWl2ZXIgKmRlc3QpOworZXh0ZXJuIHZvaWQgV2FpdFRpbWVVdGlsaXR5KGNvbnN0IGludCBkZWxh eSk7CitleHRlcm4gU2l6ZSBXYWl0U2htZW1TaXplKHZvaWQpOworZXh0ZXJuIHZvaWQgV2FpdFNo bWVtSW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIFdhaXRTZXRMYXRjaChYTG9nUmVjUHRyIGN1cl9s c24pOworZXh0ZXJuIFhMb2dSZWNQdHIgR2V0TWluV2FpdCh2b2lkKTsKKworI2VuZGlmICAgLyog V0FJVF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oIGIvc3JjL2lu Y2x1ZGUvbm9kZXMvbm9kZXMuaAppbmRleCA0ZTJmYjM5MTA1Yi4uZWY5NGVhZjUwYmYgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMv bm9kZXMuaApAQCAtNDg2LDYgKzQ4Niw3IEBAIHR5cGVkZWYgZW51bSBOb2RlVGFnCiAJVF9Ecm9w UmVwbGljYXRpb25TbG90Q21kLAogCVRfU3RhcnRSZXBsaWNhdGlvbkNtZCwKIAlUX1RpbWVMaW5l SGlzdG9yeUNtZCwKKwlUX1dhaXRTdG10LAogCVRfU1FMQ21kLAogCiAJLyoKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNl bm9kZXMuaAppbmRleCBkNmI5NDNjODk4Yy4uNGM1OGJmMzczN2EgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5v ZGVzLmgKQEAgLTM1MjEsNCArMzUyMSwzMiBAQCB0eXBlZGVmIHN0cnVjdCBEcm9wU3Vic2NyaXB0 aW9uU3RtdAogCURyb3BCZWhhdmlvciBiZWhhdmlvcjsJCS8qIFJFU1RSSUNUIG9yIENBU0NBREUg YmVoYXZpb3IgKi8KIH0gRHJvcFN1YnNjcmlwdGlvblN0bXQ7CiAKKy8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqCQlXYWl0IFN0YXRlbWVudAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICovCisKK3R5cGVkZWYgZW51bSBXYWl0Rm9yVHlwZQoreworCVdBSVRfRk9SX0xTTiA9IDAsCisJ V0FJVF9GT1JfVElNRSwKKwlXQUlUX0ZPUl9NSVgKK30gV2FpdEZvclR5cGU7CisKK3R5cGVkZWYg ZW51bSBXYWl0Rm9yU3RyYXRlZ3kKK3sKKwlXQUlUX0ZPUl9BTlkgPSAwLAorCVdBSVRfRk9SX0FM TAorfSBXYWl0Rm9yU3RyYXRlZ3k7CisKK3R5cGVkZWYgc3RydWN0IFdhaXRTdG10Cit7CisJTm9k ZVRhZwkJCXR5cGU7CisJV2FpdEZvclR5cGUJCWtpbmQ7CisJV2FpdEZvclN0cmF0ZWd5CXN0cmF0 ZWd5OworCWNoYXIJCSAgICpsc247CQkvKiBUYXJhZ2V0IExTTiB0byB3YWl0IGZvciAqLworCWlu dAkJCQlkZWxheTsJCS8qIERlbGF5IHRvIHdhaXQgZm9yIExTTiAqLworCU5vZGUJCSAgICp0aW1l OwkJLyogV2FpdCBmb3IgdGltZXN0YW1wICovCit9IFdhaXRTdG10OworCiAjZW5kaWYJCQkJCQkJ LyogUEFSU0VOT0RFU19IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0 LmggYi9zcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmgKaW5kZXggMDBhY2U4NDI1ZTIuLjUxZDAx ZTEwZjU2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmgKKysrIGIvc3Jj L2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oCkBAIC0yNDIsNiArMjQyLDcgQEAgUEdfS0VZV09SRCgi bG9jYXRpb24iLCBMT0NBVElPTiwgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgibG9j ayIsIExPQ0tfUCwgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgibG9ja2VkIiwgTE9D S0VELCBVTlJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJsb2dnZWQiLCBMT0dHRUQsIFVO UkVTRVJWRURfS0VZV09SRCkKK1BHX0tFWVdPUkQoImxzbiIsIExTTiwgVU5SRVNFUlZFRF9LRVlX T1JEKQogUEdfS0VZV09SRCgibWFwcGluZyIsIE1BUFBJTkcsIFVOUkVTRVJWRURfS0VZV09SRCkK IFBHX0tFWVdPUkQoIm1hdGNoIiwgTUFUQ0gsIFVOUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdP UkQoIm1hdGVyaWFsaXplZCIsIE1BVEVSSUFMSVpFRCwgVU5SRVNFUlZFRF9LRVlXT1JEKQpAQCAt NDAzLDYgKzQwNCw3IEBAIFBHX0tFWVdPUkQoInRleHQiLCBURVhUX1AsIFVOUkVTRVJWRURfS0VZ V09SRCkKIFBHX0tFWVdPUkQoInRoZW4iLCBUSEVOLCBSRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZ V09SRCgidGllcyIsIFRJRVMsIFVOUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoInRpbWUi LCBUSU1FLCBDT0xfTkFNRV9LRVlXT1JEKQorUEdfS0VZV09SRCgidGltZW91dCIsIFRJTUVPVVQs IFVOUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoInRpbWVzdGFtcCIsIFRJTUVTVEFNUCwg Q09MX05BTUVfS0VZV09SRCkKIFBHX0tFWVdPUkQoInRvIiwgVE8sIFJFU0VSVkVEX0tFWVdPUkQp CiBQR19LRVlXT1JEKCJ0cmFpbGluZyIsIFRSQUlMSU5HLCBSRVNFUlZFRF9LRVlXT1JEKQpAQCAt NDQyLDYgKzQ0NCw3IEBAIFBHX0tFWVdPUkQoInZlcnNpb24iLCBWRVJTSU9OX1AsIFVOUkVTRVJW RURfS0VZV09SRCkKIFBHX0tFWVdPUkQoInZpZXciLCBWSUVXLCBVTlJFU0VSVkVEX0tFWVdPUkQp CiBQR19LRVlXT1JEKCJ2aWV3cyIsIFZJRVdTLCBVTlJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlX T1JEKCJ2b2xhdGlsZSIsIFZPTEFUSUxFLCBVTlJFU0VSVkVEX0tFWVdPUkQpCitQR19LRVlXT1JE KCJ3YWl0IiwgV0FJVCwgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgid2hlbiIsIFdI RU4sIFJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJ3aGVyZSIsIFdIRVJFLCBSRVNFUlZF RF9LRVlXT1JEKQogUEdfS0VZV09SRCgid2hpdGVzcGFjZSIsIFdISVRFU1BBQ0VfUCwgVU5SRVNF UlZFRF9LRVlXT1JEKQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMThfd2FpdGZv ci5wbCBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDE4X3dhaXRmb3IucGwKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjY4MTc0MzFlOWM4Ci0tLSAvZGV2L251bGwKKysrIGIv c3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMThfd2FpdGZvci5wbApAQCAtMCwwICsxLDY0IEBACisjIENo ZWNrcyBXQUlUIEZPUgordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKwordXNlIFBvc3RncmVz Tm9kZTsKK3VzZSBUZXN0TGliOwordXNlIFRlc3Q6Ok1vcmUgdGVzdHMgPT4gMTsKKworIyBJbml0 aWFsaXplIG1hc3RlciBub2RlCitteSAkbm9kZV9tYXN0ZXIgPSBnZXRfbmV3X25vZGUoJ21hc3Rl cicpOworJG5vZGVfbWFzdGVyLT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gMSk7Ciskbm9kZV9t YXN0ZXItPnN0YXJ0OworCisjIEFuZCBzb21lIGNvbnRlbnQKKyRub2RlX21hc3Rlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSB0YWJfaW50IEFTIFNFTEVDVCBnZW5lcmF0 ZV9zZXJpZXMoMSwgMTApIEFTIGEiKTsKKworIyBUYWtlIGJhY2t1cAorbXkgJGJhY2t1cF9uYW1l ID0gJ215X2JhY2t1cCc7Ciskbm9kZV9tYXN0ZXItPmJhY2t1cCgkYmFja3VwX25hbWUpOworCisj IENyZWF0ZSBzdHJlYW1pbmcgc3RhbmRieSBmcm9tIGJhY2t1cAorbXkgJG5vZGVfc3RhbmRieSA9 IGdldF9uZXdfbm9kZSgnc3RhbmRieScpOworbXkgJGRlbGF5ICAgICAgICA9IDQ7Ciskbm9kZV9z dGFuZGJ5LT5pbml0X2Zyb21fYmFja3VwKCRub2RlX21hc3RlciwgJGJhY2t1cF9uYW1lLAorCWhh c19zdHJlYW1pbmcgPT4gMSk7Ciskbm9kZV9zdGFuZGJ5LT5hcHBlbmRfY29uZigKKwkncG9zdGdy ZXNxbC5jb25mJywgcXEoCityZWNvdmVyeV9taW5fYXBwbHlfZGVsYXkgPSAnJHtkZWxheX1zJwor KSk7Ciskbm9kZV9zdGFuZGJ5LT5zdGFydDsKKworIyBNYWtlIG5ldyBjb250ZW50IG9uIG1hc3Rl ciBhbmQgY2hlY2sgaXRzIHByZXNlbmNlIGluIHN0YW5kYnkgZGVwZW5kaW5nCisjIG9uIHRoZSBk ZWxheSBhcHBsaWVkIGFib3ZlLiBCZWZvcmUgZG9pbmcgdGhlIGluc2VydGlvbiwgZ2V0IHRoZQor IyBjdXJyZW50IHRpbWVzdGFtcCB0aGF0IHdpbGwgYmUgdXNlZCBhcyBhIGNvbXBhcmlzb24gYmFz ZS4gRXZlbiBvbiBzbG93CisjIG1hY2hpbmVzLCB0aGlzIGFsbG93cyB0byBoYXZlIGEgcHJlZGlj dGFibGUgYmVoYXZpb3Igd2hlbiBjb21wYXJpbmcgdGhlCisjIGRlbGF5IGJldHdlZW4gZGF0YSBp bnNlcnRpb24gbW9tZW50IG9uIG1hc3RlciBhbmQgcmVwbGF5IHRpbWUgb24gc3RhbmRieS4KK215 ICRtYXN0ZXJfaW5zZXJ0X3RpbWUgPSB0aW1lKCk7Ciskbm9kZV9tYXN0ZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB0YWJfaW50IFZBTFVFUyAoZ2VuZXJhdGVfc2VyaWVz KDExLCAyMCkpIik7CisKKyMgTm93IHdhaXQgZm9yIHJlcGxheSB0byBjb21wbGV0ZSBvbiBzdGFu ZGJ5LiBXZSdyZSBkb25lIHdhaXRpbmcgd2hlbiB0aGUKKyMgc3RhbmRieSBoYXMgcmVwbGF5ZWQg dXAgdG8gdGhlIHByZXZpb3VzbHkgc2F2ZWQgbWFzdGVyIExTTi4KK215ICR1bnRpbF9sc24gPQor ICAkbm9kZV9tYXN0ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHBnX2N1cnJlbnRf d2FsX2xzbigpIik7CisKKyRub2RlX21hc3Rlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIklO U0VSVCBJTlRPIHRhYl9pbnQgVkFMVUVTIChnZW5lcmF0ZV9zZXJpZXMoMjEsIDMwKSkiKTsKKwor IyBDaGVjayB0aGF0IHdhaXRsc24gaXMgYWJsZSB0byBzZXR1cCBpbmZpbml0ZSB3YWl0aW5nIGxv b3AgYW5kIGV4aXQKKyMgaXQgd2l0aG91dCB0aW1lb3V0cy4KKyRub2RlX3N0YW5kYnktPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorICAgICJXQUlUIEZPUiBMU04gJyR1bnRpbF9sc24nIiwgJ3QnKQor ICBvciBkaWUgInN0YW5kYnkgbmV2ZXIgY2F1Z2h0IHVwIjsKKworIyBDaGVjayB0aGF0IHdhaXRs c24gY2FuIHJldHVybiByZXN1bHQgaW1tZWRpYXRlbHkgd2l0aCBOT1dBSVQuCiskbm9kZV9zdGFu ZGJ5LT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisgICAgIldBSVQgRk9SIExTTiAnJHVu dGlsX2xzbicgVElNRU9VVCAxIiwgJ3QnKQorICBvciBkaWUgInN0YW5kYnkgbmV2ZXIgY2F1Z2h0 IHVwIjsKKworIyBUaGlzIHRlc3QgaXMgc3VjY2Vzc2Z1bCBpZiBhbmQgb25seSBpZiB0aGUgTFNO IGhhcyBiZWVuIGFwcGxpZWQgd2l0aCBhdCBsZWFzdAorIyB0aGUgY29uZmlndXJlZCBhcHBseSBk ZWxheS4KK215ICR0aW1lX3dhaXRlZCA9IHRpbWUoKSAtICRtYXN0ZXJfaW5zZXJ0X3RpbWU7Citv aygkdGltZV93YWl0ZWQgPj0gJGRlbGF5LCJzdGFuZGJ5IGFwcGxpZXMgV0FMIG9ubHkgYWZ0ZXIg cmVwbGljYXRpb24gZGVsYXkiKTsK --=_a08a4b5fc97a699791a401d6f28c985f--