Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jLuMO-0004bp-4l for pgsql-hackers@arkaria.postgresql.org; Tue, 07 Apr 2020 19:58:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1jLuML-0005kx-CT for pgsql-hackers@arkaria.postgresql.org; Tue, 07 Apr 2020 19:58:09 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jLuMK-0005kq-MG for pgsql-hackers@lists.postgresql.org; Tue, 07 Apr 2020 19:58:09 +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 1jLuMG-0007bF-6C for pgsql-hackers@lists.postgresql.org; Tue, 07 Apr 2020 19:58:07 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id D583021C595C; Tue, 7 Apr 2020 22:58:01 +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 9F34021C595A; Tue, 7 Apr 2020 22:58:01 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1586289481; bh=es7SNLmlx55r08UlkYtKh90tPJmdzRgA9euGO6ROMD8=; h=Date:From:To:Cc:Subject:In-Reply-To:References; b=HflS252LoYesxC+GBjW7Q+On5Auvbghm4C9mcyayr4mGZqdRFBrA9cjVAX4vMfSKN hXuMGOWqh04KkBvWW9A1WDMGMgBPmmUP6L9ee8NfjxtwV6Npsc9G7inET39II3c7qb eMb1q34vG40Tr5osSM00RzqcQ1g/b9PIMtQvMZuI= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_66ec4f4cec0fa72505efdf688553b422" Content-Transfer-Encoding: 7bit Date: Tue, 07 Apr 2020 22:58:01 +0300 From: Anna Akenteva To: Amit Kapila Cc: Kartyshov Ivan , PostgreSQL Hackers Subject: Re: [HACKERS] make async slave to wait for lsn to be replayed In-Reply-To: References: <80f267591b373db5588d580fdfb432f0@postgrespro.ru> <20200306.145445.1788163547829857988.horikyota.ntt@gmail.com> <3cc883048264c2e9af022033925ff8db@postgrespro.ru> <674ad239b725a11d89c21574e44e376b@postgrespro.ru> <69a363498b76cd079ae19c4ee93bced0@postgrespro.ru> <06bfb1e542a25c3ebfc4232be4d49555@postgrespro.ru> <9d112e474c311b6b4c20566314283638@postgrespro.ru> User-Agent: Roundcube Webmail/1.4.0 Message-ID: X-Sender: a.akenteva@postgrespro.ru Organization: Postgres Professional List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=_66ec4f4cec0fa72505efdf688553b422 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed On 2020-04-07 12:58, Amit Kapila wrote: > > Review comments: > 1. > +static void > +DeleteEvent(void) > I don't see how this is implemented or called to handle any errors. > > 2. > + if (InterruptPending) > + { > + DeleteEvent(); > + ProcessInterrupts(); > + } > We generally do this type of handling via CHECK_FOR_INTERRUPTS. > > 3. > +int > +WaitUtility(XLogRecPtr target_lsn, const float8 secs) > Isn't it better to have a return value as bool? > > 4. > +#define GetNowFloat() ((float8) GetCurrentTimestamp() / 1000000.0) > This same define is used elsewhere in the code as well, may be we can > define it in some central place and use it. Thank you for your review! Ivan and I have worked on the patch and tried to address your comments: 0. Now we wake up at least every 100ms to check for interrupts. 1. Now we call DeleteWaitedLSN() from ProcessInterrupts()=>LockErrorCleanup(). It seems that we can only exit the WAIT cycle improperly due to interrupts, so this should be enough (?) 2. Now we use CHECK_FOR_INTERRUPTS() instead of ProcessInterrupts() 3. Now WaitUtility() returns bool rather than int 4. Now GetNowFloat() is only defined at one place in the code What we changed additionally: - Prohibited using WAIT FOR LSN on master - Added more tests - Checked the code with pgindent and adjusted pgindent/typedefs.list - Changed min_lsn's type to pg_atomic_uint64 + fixed how we work with mutex - Code cleanup in wait.[c|h]: cleaned up #include-s, gave better names to functions, changed elog() to ereport() -- Anna Akenteva Postgres Professional: The Russian Postgres Company http://www.postgrespro.com --=_66ec4f4cec0fa72505efdf688553b422 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=begin_waitfor_v8.patch Content-Disposition: attachment; filename=begin_waitfor_v8.patch; size=29758 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvYmVnaW4uc2dtbCBiL2RvYy9zcmMvc2dtbC9y ZWYvYmVnaW4uc2dtbAppbmRleCBjMjNiYmZiNGU3MS4uMTlhMzNkN2Q4ZmIgMTAwNjQ0Ci0tLSBh L2RvYy9zcmMvc2dtbC9yZWYvYmVnaW4uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2JlZ2lu LnNnbWwKQEAgLTIxLDcgKzIxLDcgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAKICA8cmVm c3lub3BzaXNkaXY+CiA8c3lub3BzaXM+Ci1CRUdJTiBbIFdPUksgfCBUUkFOU0FDVElPTiBdIFsg PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRyYW5zYWN0aW9uX21vZGU8L3JlcGxhY2Vh YmxlPiBbLCAuLi5dIF0KK0JFR0lOIFsgV09SSyB8IFRSQU5TQUNUSU9OIF0gWyA8cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+dHJhbnNhY3Rpb25fbW9kZTwvcmVwbGFjZWFibGU+IFssIC4u Ll0gXSBbIFdBSVQgRk9SIExTTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bHNuX3Zh bHVlPC9yZXBsYWNlYWJsZT4gW1RJTUVPVVQgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi Pm51bWJlcl9vZl9taWxsaXNlY29uZHM8L3JlcGxhY2VhYmxlPiBdIF0KIAogPHBocmFzZT53aGVy ZSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+dHJhbnNhY3Rpb25fbW9kZTwvcmVwbGFj ZWFibGU+IGlzIG9uZSBvZjo8L3BocmFzZT4KIApAQCAtNjMsNiArNjMsMTcgQEAgQkVHSU4gWyBX T1JLIHwgVFJBTlNBQ1RJT04gXSBbIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50cmFu c2FjdGlvbl9tb2RlPC8KICAgIDx4cmVmIGxpbmtlbmQ9InNxbC1zZXQtdHJhbnNhY3Rpb24iLz4K ICAgIHdhcyBleGVjdXRlZC4KICAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIDxsaXRlcmFs PldBSVQgRk9SPC9saXRlcmFsPiBjbGF1c2UgYWxsb3dzIHRvIHdhaXQgZm9yIHRoZSB0YXJnZXQg bG9nCisgICBzZXF1ZW5jZSBudW1iZXIgKDxhY3JvbnltPkxTTjwvYWNyb255bT4pIHRvIGJlIHJl cGxheWVkIG9uIHN0YW5kYnkgYmVmb3JlCisgICBzdGFydGluZyB0aGUgdHJhbnNhY3Rpb24gaW4g PHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZXMKKyAgIHdpdGgg bWFzdGVyLXN0YW5kYnkgYXN5bmNocm9ub3VzIHJlcGxpY2F0aW9uLiBXYWl0IHRpbWUgY2FuIGJl IGxpbWl0ZWQgYnkKKyAgIHNwZWNpZnlpbmcgYSB0aW1lb3V0LCB3aGljaCBpcyBtZWFzdXJlZCBp biBtaWxsaXNlY29uZHMgYW5kIG11c3QgYmUgYSBwb3NpdGl2ZQorICAgaW50ZWdlci4gSWYgPGFj cm9ueW0+TFNOPC9hY3JvbnltPiB3YXMgbm90IHJlYWNoZWQgYmVmb3JlIHRpbWVvdXQsIHRyYW5z YWN0aW9uCisgICBkb2Vzbid0IGJlZ2luLiBXYWl0aW5nIGNhbiBiZSBpbnRlcnJ1cHRlZCB1c2lu ZyA8bGl0ZXJhbD5DdHJsK0M8L2xpdGVyYWw+LCBvcgorICAgYnkgc2h1dHRpbmcgZG93biB0aGUg PGxpdGVyYWw+cG9zdGdyZXM8L2xpdGVyYWw+IHNlcnZlci4KKyAgPC9wYXJhPgogIDwvcmVmc2Vj dDE+CiAKICA8cmVmc2VjdDE+CkBAIC0xNDYsNiArMTU3LDEwIEBAIEJFR0lOOwogICAgZGlmZmVy ZW50IHB1cnBvc2UgaW4gZW1iZWRkZWQgU1FMLiBZb3UgYXJlIGFkdmlzZWQgdG8gYmUgY2FyZWZ1 bAogICAgYWJvdXQgdGhlIHRyYW5zYWN0aW9uIHNlbWFudGljcyB3aGVuIHBvcnRpbmcgZGF0YWJh c2UgYXBwbGljYXRpb25zLgogICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGVyZSBpcyBubyA8 Y29tbWFuZD5XQUlUIEZPUjwvY29tbWFuZD4gY2xhdXNlIGluIHRoZSBTUUwgc3RhbmRhcmQuCisg IDwvcGFyYT4KICA8L3JlZnNlY3QxPgogCiAgPHJlZnNlY3QxPgpkaWZmIC0tZ2l0IGEvZG9jL3Ny Yy9zZ21sL3JlZi9zdGFydF90cmFuc2FjdGlvbi5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9zdGFy dF90cmFuc2FjdGlvbi5zZ21sCmluZGV4IGQ2Y2QxZDQxNzc5Li5jOWY3MGQyNzA5YSAxMDA2NDQK LS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9zdGFydF90cmFuc2FjdGlvbi5zZ21sCisrKyBiL2RvYy9z cmMvc2dtbC9yZWYvc3RhcnRfdHJhbnNhY3Rpb24uc2dtbApAQCAtMjEsNyArMjEsNyBAQCBQb3N0 Z3JlU1FMIGRvY3VtZW50YXRpb24KIAogIDxyZWZzeW5vcHNpc2Rpdj4KIDxzeW5vcHNpcz4KLVNU QVJUIFRSQU5TQUNUSU9OIFsgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRyYW5zYWN0 aW9uX21vZGU8L3JlcGxhY2VhYmxlPiBbLCAuLi5dIF0KK1NUQVJUIFRSQU5TQUNUSU9OIFsgPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRyYW5zYWN0aW9uX21vZGU8L3JlcGxhY2VhYmxl PiBbLCAuLi5dIF0gWyBXQUlUIEZPUiBMU04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi Pmxzbl92YWx1ZTwvcmVwbGFjZWFibGU+IFtUSU1FT1VUIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj5udW1iZXJfb2ZfbWlsbGlzZWNvbmRzPC9yZXBsYWNlYWJsZT4gXSBdCiAKIDxwaHJh c2U+d2hlcmUgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRyYW5zYWN0aW9uX21vZGU8 L3JlcGxhY2VhYmxlPiBpcyBvbmUgb2Y6PC9waHJhc2U+CiAKQEAgLTQwLDYgKzQwLDE3IEBAIFNU QVJUIFRSQU5TQUNUSU9OIFsgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRyYW5zYWN0 aW9uX21vZGU8L3JlcGxhY2VhYmxlCiAgICBjaGFyYWN0ZXJpc3RpY3MsIGFzIGlmIDx4cmVmIGxp bmtlbmQ9InNxbC1zZXQtdHJhbnNhY3Rpb24iLz4gd2FzIGV4ZWN1dGVkLiBUaGlzIGlzIHRoZSBz YW1lCiAgICBhcyB0aGUgPHhyZWYgbGlua2VuZD0ic3FsLWJlZ2luIi8+IGNvbW1hbmQuCiAgIDwv cGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSA8bGl0ZXJhbD5XQUlUIEZPUjwvbGl0ZXJhbD4gY2xh dXNlIGFsbG93cyB0byB3YWl0IGZvciB0aGUgdGFyZ2V0IGxvZworICAgc2VxdWVuY2UgbnVtYmVy ICg8YWNyb255bT5MU048L2Fjcm9ueW0+KSB0byBiZSByZXBsYXllZCBvbiBzdGFuZGJ5IGJlZm9y ZQorICAgc3RhcnRpbmcgdGhlIHRyYW5zYWN0aW9uIGluIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FM PC9wcm9kdWN0bmFtZT4gZGF0YWJhc2VzCisgICB3aXRoIG1hc3Rlci1zdGFuZGJ5IGFzeW5jaHJv bm91cyByZXBsaWNhdGlvbi4gV2FpdCB0aW1lIGNhbiBiZSBsaW1pdGVkIGJ5CisgICBzcGVjaWZ5 aW5nIGEgdGltZW91dCwgd2hpY2ggaXMgbWVhc3VyZWQgaW4gbWlsbGlzZWNvbmRzIGFuZCBtdXN0 IGJlIGEgcG9zaXRpdmUKKyAgIGludGVnZXIuIElmIDxhY3JvbnltPkxTTjwvYWNyb255bT4gd2Fz IG5vdCByZWFjaGVkIGJlZm9yZSB0aW1lb3V0LCB0cmFuc2FjdGlvbgorICAgZG9lc24ndCBiZWdp bi4gV2FpdGluZyBjYW4gYmUgaW50ZXJydXB0ZWQgdXNpbmcgPGxpdGVyYWw+Q3RybCtDPC9saXRl cmFsPiwgb3IKKyAgIGJ5IHNodXR0aW5nIGRvd24gdGhlIDxsaXRlcmFsPnBvc3RncmVzPC9saXRl cmFsPiBzZXJ2ZXIuCisgIDwvcGFyYT4KICA8L3JlZnNlY3QxPgogCiAgPHJlZnNlY3QxPgpAQCAt NzgsNiArODksMTAgQEAgU1RBUlQgVFJBTlNBQ1RJT04gWyA8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+dHJhbnNhY3Rpb25fbW9kZTwvcmVwbGFjZWFibGUKICAgIG9taXR0ZWQuCiAgIDwv cGFyYT4KIAorICA8cGFyYT4KKyAgIFRoZXJlIGlzIG5vIDxjb21tYW5kPldBSVQgRk9SPC9jb21t YW5kPiBjbGF1c2UgaW4gdGhlIFNRTCBzdGFuZGFyZC4KKyAgPC9wYXJhPgorCiAgIDxwYXJhPgog ICAgU2VlIGFsc28gdGhlIGNvbXBhdGliaWxpdHkgc2VjdGlvbiBvZiA8eHJlZiBsaW5rZW5kPSJz cWwtc2V0LXRyYW5zYWN0aW9uIi8+LgogICA8L3BhcmE+CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9n LmMKaW5kZXggYWJmOTU0YmEzOTIuLjRjN2ViMGNiMjE5IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v eGxvZy5jCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19kYXRhYmFzZS5o IgogI2luY2x1ZGUgImNvbW1hbmRzL3Byb2dyZXNzLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdGFi bGVzcGFjZS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3dhaXQuaCIKICNpbmNsdWRlICJjb21tb24v Y29udHJvbGRhdGFfdXRpbHMuaCIKICNpbmNsdWRlICJleGVjdXRvci9pbnN0cnVtZW50LmgiCiAj aW5jbHVkZSAibWlzY2FkbWluLmgiCkBAIC03MzMyLDYgKzczMzMsMTUgQEAgU3RhcnR1cFhMT0co dm9pZCkKIAkJCQkJYnJlYWs7CiAJCQkJfQogCisJCQkJLyoKKwkJCQkgKiBJZiB3ZSByZXBsYXll ZCBhbiBMU04gdGhhdCBzb21lb25lIHdhcyB3YWl0aW5nIGZvciwKKwkJCQkgKiBzZXQgbGF0Y2hl cyBpbiBzaGFyZWQgbWVtb3J5IGFycmF5IHRvIG5vdGlmeSB0aGUgd2FpdGVyLgorCQkJCSAqLwor CQkJCWlmIChYTG9nQ3RsLT5sYXN0UmVwbGF5ZWRFbmRSZWNQdHIgPj0gR2V0TWluV2FpdGVkTFNO KCkpCisJCQkJeworCQkJCQlXYWl0U2V0TGF0Y2goWExvZ0N0bC0+bGFzdFJlcGxheWVkRW5kUmVj UHRyKTsKKwkJCQl9CisKIAkJCQkvKiBFbHNlLCB0cnkgdG8gZmV0Y2ggdGhlIG5leHQgV0FMIHJl Y29yZCAqLwogCQkJCXJlY29yZCA9IFJlYWRSZWNvcmQoeGxvZ3JlYWRlciwgTE9HLCBmYWxzZSk7 CiAJCQl9IHdoaWxlIChyZWNvcmQgIT0gTlVMTCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9j b21tYW5kcy9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCmluZGV4IGQ0 ODE1ZDNjZTY1Li45YjMxMDkyNmMxMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv TWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUKQEAgLTU3LDYgKzU3 LDcgQEAgT0JKUyA9IFwKIAl1c2VyLm8gXAogCXZhY3V1bS5vIFwKIAl2YXJpYWJsZS5vIFwKLQl2 aWV3Lm8KKwl2aWV3Lm8gXAorCXdhaXQubwogCiBpbmNsdWRlICQodG9wX3NyY2Rpcikvc3JjL2Jh Y2tlbmQvY29tbW9uLm1rCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy93YWl0LmMg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy93YWl0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLmUxMTIzZGYzMjFlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvd2FpdC5jCkBAIC0wLDAgKzEsMjgyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq CisgKiB3YWl0LmMKKyAqCSAgSW1wbGVtZW50cyBXQUlUIEZPUiwgd2hpY2ggYWxsb3dzIHdhaXRp bmcgZm9yIGV2ZW50cyBzdWNoIGFzCisgKgkgIExTTiBoYXZpbmcgYmVlbiByZXBsYXllZCBvbiBy ZXBsaWNhLgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIwLCBQb3N0Z3Jl U1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAy MDIwLCBSZWdlbnRzIG9mIFBvc3RncmVzUHJvCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAg c3JjL2JhY2tlbmQvY29tbWFuZHMvd2FpdC5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8K KyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSAi YWNjZXNzL3hsb2cuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ2RlZnMuaCIKKyNpbmNsdWRlICJj b21tYW5kcy93YWl0LmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgIm1pc2NhZG1p bi5oIgorI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvYmFja2VuZGlkLmgi CisjaW5jbHVkZSAic3RvcmFnZS9wbXNpZ25hbC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5o IgorI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NpbnZhbGFk dC5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc3Bpbi5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5z LmgiCisjaW5jbHVkZSAidXRpbHMvcGdfbHNuLmgiCisjaW5jbHVkZSAidXRpbHMvdGltZXN0YW1w LmgiCisKKy8qIEFkZCB0byBzaGFyZWQgbWVtb3J5IGFycmF5ICovCitzdGF0aWMgdm9pZCBBZGRX YWl0ZWRMU04oWExvZ1JlY1B0ciBsc25fdG9fd2FpdCk7CisKKy8qIFNoYXJlZCBtZW1vcnkgc3Ry dWN0dXJlICovCit0eXBlZGVmIHN0cnVjdAoreworCWludAkJCWJhY2tlbmRfbWF4aWQ7CisJcGdf YXRvbWljX3VpbnQ2NCBtaW5fbHNuOyAvKiBYTG9nUmVjUHRyIG9mIG1pbmltYWwgd2FpdGVkIGZv ciBMU04gKi8KKwlzbG9ja190CQltdXRleDsKKwkvKiBMU05zIHRoYXQgZGlmZmVyZW50IGJhY2tl bmRzIGFyZSB3YWl0aW5nICovCisJWExvZ1JlY1B0cglsc25bRkxFWElCTEVfQVJSQVlfTUVNQkVS XTsKK30gV2FpdFN0YXRlOworCitzdGF0aWMgV2FpdFN0YXRlICpzdGF0ZTsKKworLyoKKyAqIEFk ZCB0aGUgd2FpdCBldmVudCBvZiB0aGUgY3VycmVudCBiYWNrZW5kIHRvIHNoYXJlZCBtZW1vcnkg YXJyYXkKKyAqLworc3RhdGljIHZvaWQKK0FkZFdhaXRlZExTTihYTG9nUmVjUHRyIGxzbl90b193 YWl0KQoreworCVNwaW5Mb2NrQWNxdWlyZSgmc3RhdGUtPm11dGV4KTsKKwlpZiAoc3RhdGUtPmJh Y2tlbmRfbWF4aWQgPCBNeUJhY2tlbmRJZCkKKwkJc3RhdGUtPmJhY2tlbmRfbWF4aWQgPSBNeUJh Y2tlbmRJZDsKKworCXN0YXRlLT5sc25bTXlCYWNrZW5kSWRdID0gbHNuX3RvX3dhaXQ7CisKKwlp ZiAobHNuX3RvX3dhaXQgPCBzdGF0ZS0+bWluX2xzbi52YWx1ZSkKKwkJc3RhdGUtPm1pbl9sc24u dmFsdWUgPSBsc25fdG9fd2FpdDsKKwlTcGluTG9ja1JlbGVhc2UoJnN0YXRlLT5tdXRleCk7Cit9 CisKKy8qCisgKiBEZWxldGUgd2FpdCBldmVudCBvZiB0aGUgY3VycmVudCBiYWNrZW5kIGZyb20g dGhlIHNoYXJlZCBtZW1vcnkgYXJyYXkuCisgKi8KK3ZvaWQKK0RlbGV0ZVdhaXRlZExTTih2b2lk KQoreworCWludAkJCWk7CisJWExvZ1JlY1B0cglsc25fdG9fZGVsZXRlOworCisJU3BpbkxvY2tB Y3F1aXJlKCZzdGF0ZS0+bXV0ZXgpOworCisJbHNuX3RvX2RlbGV0ZSA9IHN0YXRlLT5sc25bTXlC YWNrZW5kSWRdOworCXN0YXRlLT5sc25bTXlCYWNrZW5kSWRdID0gSW52YWxpZFhMb2dSZWNQdHI7 CisKKwkvKiBJZiB3ZSBhcmUgZGVsZXRpbmcgdGhlIG1pbmltYWwgTFNOLCB0aGVuIGNob29zZSB0 aGUgbmV4dCBtaW5fbHNuICovCisJaWYgKGxzbl90b19kZWxldGUgIT0gSW52YWxpZFhMb2dSZWNQ dHIgJiYKKwkJbHNuX3RvX2RlbGV0ZSA9PSBzdGF0ZS0+bWluX2xzbi52YWx1ZSkKKwl7CisJCXN0 YXRlLT5taW5fbHNuLnZhbHVlID0gUEdfVUlOVDY0X01BWDsKKwkJZm9yIChpID0gMjsgaSA8PSBz dGF0ZS0+YmFja2VuZF9tYXhpZDsgaSsrKQorCQkJaWYgKHN0YXRlLT5sc25baV0gIT0gSW52YWxp ZFhMb2dSZWNQdHIgJiYKKwkJCQlzdGF0ZS0+bHNuW2ldIDwgc3RhdGUtPm1pbl9sc24udmFsdWUp CisJCQkJc3RhdGUtPm1pbl9sc24udmFsdWUgPSBzdGF0ZS0+bHNuW2ldOworCX0KKworCS8qIElm IGRlbGV0aW5nIGZyb20gdGhlIGVuZCBvZiB0aGUgYXJyYXksIHNob3J0ZW4gdGhlIGFycmF5J3Mg dXNlZCBwYXJ0ICovCisJaWYgKHN0YXRlLT5iYWNrZW5kX21heGlkID09IE15QmFja2VuZElkKQor CQlmb3IgKGkgPSAoTXlCYWNrZW5kSWQpOyBpID49IDI7IGktLSkKKwkJCWlmIChzdGF0ZS0+bHNu W2ldICE9IEludmFsaWRYTG9nUmVjUHRyKQorCQkJeworCQkJCXN0YXRlLT5iYWNrZW5kX21heGlk ID0gaTsKKwkJCQlicmVhazsKKwkJCX0KKworCVNwaW5Mb2NrUmVsZWFzZSgmc3RhdGUtPm11dGV4 KTsKK30KKworLyoKKyAqIFJlcG9ydCBhbW91bnQgb2Ygc2hhcmVkIG1lbW9yeSBzcGFjZSBuZWVk ZWQgZm9yIFdhaXRTdGF0ZQorICovCitTaXplCitXYWl0U2htZW1TaXplKHZvaWQpCit7CisJU2l6 ZQkJc2l6ZTsKKworCXNpemUgPSBvZmZzZXRvZihXYWl0U3RhdGUsIGxzbik7CisJc2l6ZSA9IGFk ZF9zaXplKHNpemUsIG11bF9zaXplKE1heEJhY2tlbmRzICsgMSwgc2l6ZW9mKFhMb2dSZWNQdHIp KSk7CisJcmV0dXJuIHNpemU7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIGFuIGFycmF5IG9mIGV2 ZW50cyB0byB3YWl0IGZvciBpbiBzaGFyZWQgbWVtb3J5CisgKi8KK3ZvaWQKK1dhaXRTaG1lbUlu aXQodm9pZCkKK3sKKwlib29sCQlmb3VuZDsKKwl1aW50MzIJCWk7CisKKwlzdGF0ZSA9IChXYWl0 U3RhdGUgKikgU2htZW1Jbml0U3RydWN0KCJwZ193YWl0X2xzbiIsCisJCQkJCQkJCQkJICBXYWl0 U2htZW1TaXplKCksCisJCQkJCQkJCQkJICAmZm91bmQpOworCWlmICghZm91bmQpCisJeworCQlT cGluTG9ja0luaXQoJnN0YXRlLT5tdXRleCk7CisKKwkJZm9yIChpID0gMDsgaSA8IChNYXhCYWNr ZW5kcyArIDEpOyBpKyspCisJCQlzdGF0ZS0+bHNuW2ldID0gSW52YWxpZFhMb2dSZWNQdHI7CisK KwkJc3RhdGUtPmJhY2tlbmRfbWF4aWQgPSAwOworCQlzdGF0ZS0+bWluX2xzbi52YWx1ZSA9IFBH X1VJTlQ2NF9NQVg7CisJfQorfQorCisvKgorICogU2V0IGxhdGNoZXMgaW4gc2hhcmVkIG1lbW9y eSB0byBzaWduYWwgdGhhdCBuZXcgTFNOIGhhcyBiZWVuIHJlcGxheWVkCisgKi8KK3ZvaWQKK1dh aXRTZXRMYXRjaChYTG9nUmVjUHRyIGN1cl9sc24pCit7CisJdWludDMyCQlpOworCWludAkJCWJh Y2tlbmRfbWF4aWQ7CisJUEdQUk9DCSAgICpiYWNrZW5kOworCisJU3BpbkxvY2tBY3F1aXJlKCZz dGF0ZS0+bXV0ZXgpOworCWJhY2tlbmRfbWF4aWQgPSBzdGF0ZS0+YmFja2VuZF9tYXhpZDsKKwor CWZvciAoaSA9IDI7IGkgPD0gYmFja2VuZF9tYXhpZDsgaSsrKQorCXsKKwkJYmFja2VuZCA9IEJh Y2tlbmRJZEdldFByb2MoaSk7CisKKwkJaWYgKGJhY2tlbmQgJiYgc3RhdGUtPmxzbltpXSAhPSAw ICYmCisJCQlzdGF0ZS0+bHNuW2ldIDw9IGN1cl9sc24pCisJCXsKKwkJCVNldExhdGNoKCZiYWNr ZW5kLT5wcm9jTGF0Y2gpOworCQl9CisJfQorCVNwaW5Mb2NrUmVsZWFzZSgmc3RhdGUtPm11dGV4 KTsKK30KKworLyoKKyAqIEdldCBtaW5pbWFsIExTTiB0aGF0IHNvbWVvbmUgd2FpdHMgZm9yCisg Ki8KK1hMb2dSZWNQdHIKK0dldE1pbldhaXRlZExTTih2b2lkKQoreworCXJldHVybiBzdGF0ZS0+ bWluX2xzbi52YWx1ZTsKK30KKworLyoKKyAqIE9uIFdBSVQgdXNlIGEgbGF0Y2ggdG8gd2FpdCB0 aWxsIExTTiBpcyByZXBsYXllZCwKKyAqIHBvc3RtYXN0ZXIgZGllcyBvciB0aW1lb3V0IGhhcHBl bnMuIFRpbWVvdXQgaXMgc3BlY2lmaWVkIGluIG1pbGxpc2Vjb25kcy4KKyAqIFJldHVybnMgdHJ1 ZSBpZiBMU04gd2FzIHJlYWNoZWQgYW5kIGZhbHNlIG90aGVyd2lzZS4KKyAqLworYm9vbAorV2Fp dFV0aWxpdHkoWExvZ1JlY1B0ciB0YXJnZXRfbHNuLCBjb25zdCBpbnQgdGltZW91dF9tcykKK3sK KwlYTG9nUmVjUHRyCWN1cl9sc24gPSBHZXRYTG9nUmVwbGF5UmVjUHRyKE5VTEwpOworCWludAkJ CWxhdGNoX2V2ZW50czsKKwlmbG9hdDgJCWVuZHRpbWU7CisJYm9vbAkJcmVzID0gZmFsc2U7CisJ Ym9vbAkJd2FpdF9mb3JldmVyID0gKHRpbWVvdXRfbXMgPD0gMCk7CisKKwllbmR0aW1lID0gR2V0 Tm93RmxvYXQoKSArIHRpbWVvdXRfbXMgLyAxMDAwLjA7CisKKwlsYXRjaF9ldmVudHMgPSBXTF9M QVRDSF9TRVQgfCBXTF9USU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSDsKKworCS8qIENoZWNr IGlmIHdlIGFscmVhZHkgcmVhY2hlZCB0aGUgbmVlZGVkIExTTiAqLworCWlmIChjdXJfbHNuID49 IHRhcmdldF9sc24pCisJCXJldHVybiB0cnVlOworCisJQWRkV2FpdGVkTFNOKHRhcmdldF9sc24p OworCisJZm9yICg7OykKKwl7CisJCWludAkJCXJjOworCQlmbG9hdDgJCXRpbWVfbGVmdCA9IDA7 CisJCWxvbmcJCXRpbWVfbGVmdF9tcyA9IDA7CisKKwkJdGltZV9sZWZ0ID0gZW5kdGltZSAtIEdl dE5vd0Zsb2F0KCk7CisKKwkJLyogVXNlIDEwMCBtcyBhcyB0aGUgZGVmYXVsdCB0aW1lb3V0IHRv IGNoZWNrIGZvciBpbnRlcnJ1cHRzICovCisJCWlmICh3YWl0X2ZvcmV2ZXIgfHwgdGltZV9sZWZ0 IDwgMCB8fCB0aW1lX2xlZnQgPiAwLjEpCisJCQl0aW1lX2xlZnRfbXMgPSAxMDA7CisJCWVsc2UK KwkJCXRpbWVfbGVmdF9tcyA9IChsb25nKSBjZWlsKHRpbWVfbGVmdCAqIDEwMDAuMCk7CisKKwkJ LyogSWYgaW50ZXJydXB0LCBMb2NrRXJyb3JDbGVhbnVwKCkgd2lsbCBkbyBEZWxldGVXYWl0ZWRM U04oKSBmb3IgdXMgKi8KKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkvKiBJZiBwb3N0 bWFzdGVyIGRpZXMsIGZpbmlzaCBpbW1lZGlhdGVseSAqLworCQlpZiAoIVBvc3RtYXN0ZXJJc0Fs aXZlKCkpCisJCQlicmVhazsKKworCQlyYyA9IFdhaXRMYXRjaChNeUxhdGNoLCBsYXRjaF9ldmVu dHMsIHRpbWVfbGVmdF9tcywKKwkJCQkJICAgV0FJVF9FVkVOVF9DTElFTlRfUkVBRCk7CisKKwkJ UmVzZXRMYXRjaChNeUxhdGNoKTsKKworCQlpZiAocmMgJiBXTF9MQVRDSF9TRVQpCisJCQljdXJf bHNuID0gR2V0WExvZ1JlcGxheVJlY1B0cihOVUxMKTsKKworCQlpZiAocmMgJiBXTF9USU1FT1VU KQorCQl7CisJCQljdXJfbHNuID0gR2V0WExvZ1JlcGxheVJlY1B0cihOVUxMKTsKKwkJCS8qIElm IHRoZSB0aW1lIHNwZWNpZmllZCBieSB1c2VyIGhhcyBwYXNzZWQsIHN0b3Agd2FpdGluZyAqLwor CQkJdGltZV9sZWZ0ID0gZW5kdGltZSAtIEdldE5vd0Zsb2F0KCk7CisJCQlpZiAoIXdhaXRfZm9y ZXZlciAmJiB0aW1lX2xlZnQgPD0gMC4wKQorCQkJCWJyZWFrOworCQl9CisKKwkJLyogSWYgTFNO IGhhcyBiZWVuIHJlcGxheWVkICovCisJCWlmICh0YXJnZXRfbHNuIDw9IGN1cl9sc24pCisJCQli cmVhazsKKwl9CisKKwlEZWxldGVXYWl0ZWRMU04oKTsKKworCWlmIChjdXJfbHNuIDwgdGFyZ2V0 X2xzbikKKwkJZXJlcG9ydChXQVJOSU5HLAorCQkJCShlcnJjb2RlKEVSUkNPREVfTk9fQUNUSVZF X1NRTF9UUkFOU0FDVElPTiksCisJCQkJIGVycm1zZygiZGlkbid0IHN0YXJ0IHRyYW5zYWN0aW9u IGJlY2F1c2UgTFNOIHdhcyBub3QgcmVhY2hlZCIpLAorCQkJCSBlcnJoaW50KCJUcnkgdG8gaW5j cmVhc2Ugd2FpdCB0aW1lLiIpKSk7CisJZWxzZQorCQlyZXMgPSB0cnVlOworCisJcmV0dXJuIHJl czsKK30KKworLyoKKyAqIEltcGxlbWVudGF0aW9uIG9mIFdBSVQgRk9SCisgKi8KK2ludAorV2Fp dE1haW4oV2FpdENsYXVzZSAqc3RtdCwgRGVzdFJlY2VpdmVyICpkZXN0KQoreworCVR1cGxlRGVz Ywl0dXBkZXNjOworCVR1cE91dHB1dFN0YXRlICp0c3RhdGU7CisJWExvZ1JlY1B0cgl0YXJnZXRf bHNuOworCWJvb2wJCXJlcyA9IGZhbHNlOworCisJdGFyZ2V0X2xzbiA9IERhdHVtR2V0TFNOKERp cmVjdEZ1bmN0aW9uQ2FsbDEocGdfbHNuX2luLAorCQkJCQkJCQkJCQkJIENTdHJpbmdHZXREYXR1 bShzdG10LT5sc24pKSk7CisJcmVzID0gV2FpdFV0aWxpdHkodGFyZ2V0X2xzbiwgc3RtdC0+dGlt ZW91dCk7CisKKwkvKiBOZWVkIGEgdHVwbGUgZGVzY3JpcHRvciByZXByZXNlbnRpbmcgYSBzaW5n bGUgVEVYVCBjb2x1bW4gKi8KKwl0dXBkZXNjID0gQ3JlYXRlVGVtcGxhdGVUdXBsZURlc2MoMSk7 CisJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSAxLCAiTFNOIHJlYWNo ZWQiLCBURVhUT0lELCAtMSwgMCk7CisKKwkvKiBQcmVwYXJlIGZvciBwcm9qZWN0aW9uIG9mIHR1 cGxlcyAqLworCXRzdGF0ZSA9IGJlZ2luX3R1cF9vdXRwdXRfdHVwZGVzYyhkZXN0LCB0dXBkZXNj LCAmVFRTT3BzTWluaW1hbFR1cGxlKTsKKworCS8qIFNlbmQgdGhlIHJlc3VsdCAqLworCWRvX3Rl eHRfb3V0cHV0X29uZWxpbmUodHN0YXRlLCByZXMgPyAidCIgOiAiZiIpOworCWVuZF90dXBfb3V0 cHV0KHRzdGF0ZSk7CisJcmV0dXJuIHJlczsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25v ZGVzL2NvcHlmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMKaW5kZXggZjlk ODY4NTllZTcuLmIwMGM3NzJiNzFlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5 ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYwpAQCAtMzc0MSwxMCAr Mzc0MSwyMiBAQCBfY29weVRyYW5zYWN0aW9uU3RtdChjb25zdCBUcmFuc2FjdGlvblN0bXQgKmZy b20pCiAJQ09QWV9TVFJJTkdfRklFTEQoc2F2ZXBvaW50X25hbWUpOwogCUNPUFlfU1RSSU5HX0ZJ RUxEKGdpZCk7CiAJQ09QWV9TQ0FMQVJfRklFTEQoY2hhaW4pOworCUNPUFlfTk9ERV9GSUVMRCh3 YWl0KTsKIAogCXJldHVybiBuZXdub2RlOwogfQogCitzdGF0aWMgV2FpdENsYXVzZSAqCitfY29w eVdhaXRDbGF1c2UoY29uc3QgV2FpdENsYXVzZSAqZnJvbSkKK3sKKwlXYWl0Q2xhdXNlICpuZXdu b2RlID0gbWFrZU5vZGUoV2FpdENsYXVzZSk7CisKKwlDT1BZX1NUUklOR19GSUVMRChsc24pOwor CUNPUFlfU0NBTEFSX0ZJRUxEKHRpbWVvdXQpOworCisJcmV0dXJuIG5ld25vZGU7Cit9OworCiBz dGF0aWMgQ29tcG9zaXRlVHlwZVN0bXQgKgogX2NvcHlDb21wb3NpdGVUeXBlU3RtdChjb25zdCBD b21wb3NpdGVUeXBlU3RtdCAqZnJvbSkKIHsKQEAgLTUzMzIsNiArNTM0NCw5IEBAIGNvcHlPYmpl Y3RJbXBsKGNvbnN0IHZvaWQgKmZyb20pCiAJCWNhc2UgVF9UcmFuc2FjdGlvblN0bXQ6CiAJCQly ZXR2YWwgPSBfY29weVRyYW5zYWN0aW9uU3RtdChmcm9tKTsKIAkJCWJyZWFrOworCQljYXNlIFRf V2FpdENsYXVzZToKKwkJCXJldHZhbCA9IF9jb3B5V2FpdENsYXVzZShmcm9tKTsKKwkJCWJyZWFr OwogCQljYXNlIFRfQ29tcG9zaXRlVHlwZVN0bXQ6CiAJCQlyZXR2YWwgPSBfY29weUNvbXBvc2l0 ZVR5cGVTdG10KGZyb20pOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rl cy9lcXVhbGZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9lcXVhbGZ1bmNzLmMKaW5kZXggZThl NzgxODM0YTUuLmMxYjYyMmVhMzAxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9lcXVh bGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvZXF1YWxmdW5jcy5jCkBAIC0xNTM5LDYg KzE1MzksMTYgQEAgX2VxdWFsVHJhbnNhY3Rpb25TdG10KGNvbnN0IFRyYW5zYWN0aW9uU3RtdCAq YSwgY29uc3QgVHJhbnNhY3Rpb25TdG10ICpiKQogCUNPTVBBUkVfU1RSSU5HX0ZJRUxEKHNhdmVw b2ludF9uYW1lKTsKIAlDT01QQVJFX1NUUklOR19GSUVMRChnaWQpOwogCUNPTVBBUkVfU0NBTEFS X0ZJRUxEKGNoYWluKTsKKwlDT01QQVJFX05PREVfRklFTEQod2FpdCk7CisKKwlyZXR1cm4gdHJ1 ZTsKK30KKworc3RhdGljIGJvb2wKK19lcXVhbFdhaXRDbGF1c2UoY29uc3QgV2FpdENsYXVzZSAq YSwgY29uc3QgV2FpdENsYXVzZSAqYikKK3sKKwlDT01QQVJFX1NUUklOR19GSUVMRChsc24pOwor CUNPTVBBUkVfU0NBTEFSX0ZJRUxEKHRpbWVvdXQpOwogCiAJcmV0dXJuIHRydWU7CiB9CkBAIC0z Mzg5LDYgKzMzOTksOSBAQCBlcXVhbChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQogCQlj YXNlIFRfVHJhbnNhY3Rpb25TdG10OgogCQkJcmV0dmFsID0gX2VxdWFsVHJhbnNhY3Rpb25TdG10 KGEsIGIpOwogCQkJYnJlYWs7CisJCWNhc2UgVF9XYWl0Q2xhdXNlOgorCQkJcmV0dmFsID0gX2Vx dWFsV2FpdENsYXVzZShhLCBiKTsKKwkJCWJyZWFrOwogCQljYXNlIFRfQ29tcG9zaXRlVHlwZVN0 bXQ6CiAJCQlyZXR2YWwgPSBfZXF1YWxDb21wb3NpdGVUeXBlU3RtdChhLCBiKTsKIAkJCWJyZWFr OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYyBiL3NyYy9iYWNrZW5k L25vZGVzL291dGZ1bmNzLmMKaW5kZXggMzVlZDhjMGQ1MzguLjhlYjU0ZDRhYjA1IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVz L291dGZ1bmNzLmMKQEAgLTI3NzgsNiArMjc3OCwyOCBAQCBfb3V0RGVmRWxlbShTdHJpbmdJbmZv IHN0ciwgY29uc3QgRGVmRWxlbSAqbm9kZSkKIAlXUklURV9MT0NBVElPTl9GSUVMRChsb2NhdGlv bik7CiB9CiAKK3N0YXRpYyB2b2lkCitfb3V0VHJhbnNhY3Rpb25TdG10KFN0cmluZ0luZm8gc3Ry LCBjb25zdCBUcmFuc2FjdGlvblN0bXQgKm5vZGUpCit7CisJV1JJVEVfTk9ERV9UWVBFKCJUUkFO U0FDVElPTlNUTVQiKTsKKworCVdSSVRFX1NUUklOR19GSUVMRChzYXZlcG9pbnRfbmFtZSk7CisJ V1JJVEVfU1RSSU5HX0ZJRUxEKGdpZCk7CisJV1JJVEVfTk9ERV9GSUVMRChvcHRpb25zKTsKKwlX UklURV9CT09MX0ZJRUxEKGNoYWluKTsKKwlXUklURV9FTlVNX0ZJRUxEKGtpbmQsIFRyYW5zYWN0 aW9uU3RtdEtpbmQpOworCVdSSVRFX05PREVfRklFTEQod2FpdCk7Cit9CisKK3N0YXRpYyB2b2lk Citfb3V0V2FpdENsYXVzZShTdHJpbmdJbmZvIHN0ciwgY29uc3QgV2FpdENsYXVzZSAqbm9kZSkK K3sKKwlXUklURV9OT0RFX1RZUEUoIldBSVRDTEFVU0UiKTsKKworCVdSSVRFX1NUUklOR19GSUVM RChsc24pOworCVdSSVRFX1VJTlRfRklFTEQodGltZW91dCk7Cit9CisKIHN0YXRpYyB2b2lkCiBf b3V0VGFibGVMaWtlQ2xhdXNlKFN0cmluZ0luZm8gc3RyLCBjb25zdCBUYWJsZUxpa2VDbGF1c2Ug Km5vZGUpCiB7CkBAIC00MzI3LDYgKzQzNDksMTIgQEAgb3V0Tm9kZShTdHJpbmdJbmZvIHN0ciwg Y29uc3Qgdm9pZCAqb2JqKQogCQkJY2FzZSBUX1BhcnRpdGlvblJhbmdlRGF0dW06CiAJCQkJX291 dFBhcnRpdGlvblJhbmdlRGF0dW0oc3RyLCBvYmopOwogCQkJCWJyZWFrOworCQkJY2FzZSBUX1Ry YW5zYWN0aW9uU3RtdDoKKwkJCQlfb3V0VHJhbnNhY3Rpb25TdG10KHN0ciwgb2JqKTsKKwkJCQli cmVhazsKKwkJCWNhc2UgVF9XYWl0Q2xhdXNlOgorCQkJCV9vdXRXYWl0Q2xhdXNlKHN0ciwgb2Jq KTsKKwkJCQlicmVhazsKIAogCQkJZGVmYXVsdDoKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cGFyc2VyL2dyYW0ueSBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKaW5kZXggMzQ0OWMyNmJk MTEuLmEyZjQwMjg1YzZlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55Cisr KyBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKQEAgLTU5Miw2ICs1OTIsOCBAQCBzdGF0aWMg Tm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNl cywgTm9kZSAqcXVlcnkpOwogJXR5cGUgPHBhcnRib3VuZHNwZWM+IFBhcnRpdGlvbkJvdW5kU3Bl YwogJXR5cGUgPGxpc3Q+CQloYXNoX3BhcnRib3VuZAogJXR5cGUgPGRlZmVsdD4JCWhhc2hfcGFy dGJvdW5kX2VsZW0KKyV0eXBlIDxpdmFsPgkJd2FpdF90aW1lCisldHlwZSA8bm9kZT4JCXdhaXRf Zm9yCiAKIC8qCiAgKiBOb24ta2V5d29yZCB0b2tlbiB0eXBlcy4gIFRoZXNlIGFyZSBoYXJkLXdp cmVkIGludG8gdGhlICJmbGV4IiBsZXhlci4KQEAgLTY2MSw3ICs2NjMsNyBAQCBzdGF0aWMgTm9k ZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywg Tm9kZSAqcXVlcnkpOwogCiAJTEFCRUwgTEFOR1VBR0UgTEFSR0VfUCBMQVNUX1AgTEFURVJBTF9Q CiAJTEVBRElORyBMRUFLUFJPT0YgTEVBU1QgTEVGVCBMRVZFTCBMSUtFIExJTUlUIExJU1RFTiBM T0FEIExPQ0FMCi0JTE9DQUxUSU1FIExPQ0FMVElNRVNUQU1QIExPQ0FUSU9OIExPQ0tfUCBMT0NL RUQgTE9HR0VECisJTE9DQUxUSU1FIExPQ0FMVElNRVNUQU1QIExPQ0FUSU9OIExPQ0tfUCBMT0NL RUQgTE9HR0VEIExTTgogCiAJTUFQUElORyBNQVRDSCBNQVRFUklBTElaRUQgTUFYVkFMVUUgTUVU SE9EIE1JTlVURV9QIE1JTlZBTFVFIE1PREUgTU9OVEhfUCBNT1ZFCiAKQEAgLTY5Miw3ICs2OTQs NyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwg TGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCVNVQlNDUklQVElPTiBTVUJTVFJJTkcgU1VQ UE9SVCBTWU1NRVRSSUMgU1lTSUQgU1lTVEVNX1AKIAogCVRBQkxFIFRBQkxFUyBUQUJMRVNBTVBM RSBUQUJMRVNQQUNFIFRFTVAgVEVNUExBVEUgVEVNUE9SQVJZIFRFWFRfUCBUSEVOCi0JVElFUyBU SU1FIFRJTUVTVEFNUCBUTyBUUkFJTElORyBUUkFOU0FDVElPTiBUUkFOU0ZPUk0KKwlUSUVTIFRJ TUUgVElNRU9VVCBUSU1FU1RBTVAgVE8gVFJBSUxJTkcgVFJBTlNBQ1RJT04gVFJBTlNGT1JNCiAJ VFJFQVQgVFJJR0dFUiBUUklNIFRSVUVfUAogCVRSVU5DQVRFIFRSVVNURUQgVFlQRV9QIFRZUEVT X1AKIApAQCAtNzAyLDcgKzcwNCw4IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1Nl bGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAJVkFDVVVN IFZBTElEIFZBTElEQVRFIFZBTElEQVRPUiBWQUxVRV9QIFZBTFVFUyBWQVJDSEFSIFZBUklBRElD IFZBUllJTkcKIAlWRVJCT1NFIFZFUlNJT05fUCBWSUVXIFZJRVdTIFZPTEFUSUxFCiAKLQlXSEVO IFdIRVJFIFdISVRFU1BBQ0VfUCBXSU5ET1cgV0lUSCBXSVRISU4gV0lUSE9VVCBXT1JLIFdSQVBQ RVIgV1JJVEUKKwlXQUlUIFdIRU4gV0hFUkUgV0hJVEVTUEFDRV9QIFdJTkRPVworCVdJVEggV0lU SElOIFdJVEhPVVQgV09SSyBXUkFQUEVSIFdSSVRFCiAKIAlYTUxfUCBYTUxBVFRSSUJVVEVTIFhN TENPTkNBVCBYTUxFTEVNRU5UIFhNTEVYSVNUUyBYTUxGT1JFU1QgWE1MTkFNRVNQQUNFUwogCVhN TFBBUlNFIFhNTFBJIFhNTFJPT1QgWE1MU0VSSUFMSVpFIFhNTFRBQkxFCkBAIC05OTQ2LDE4ICs5 OTQ5LDIwIEBAIFRyYW5zYWN0aW9uU3RtdDoKIAkJCQkJbi0+Y2hhaW4gPSAkMzsKIAkJCQkJJCQg PSAoTm9kZSAqKW47CiAJCQkJfQotCQkJfCBCRUdJTl9QIG9wdF90cmFuc2FjdGlvbiB0cmFuc2Fj dGlvbl9tb2RlX2xpc3Rfb3JfZW1wdHkKKwkJCXwgQkVHSU5fUCBvcHRfdHJhbnNhY3Rpb24gdHJh bnNhY3Rpb25fbW9kZV9saXN0X29yX2VtcHR5IHdhaXRfZm9yCiAJCQkJewogCQkJCQlUcmFuc2Fj dGlvblN0bXQgKm4gPSBtYWtlTm9kZShUcmFuc2FjdGlvblN0bXQpOwogCQkJCQluLT5raW5kID0g VFJBTlNfU1RNVF9CRUdJTjsKIAkJCQkJbi0+b3B0aW9ucyA9ICQzOworCQkJCQluLT53YWl0ID0g JDQ7CiAJCQkJCSQkID0gKE5vZGUgKiluOwogCQkJCX0KLQkJCXwgU1RBUlQgVFJBTlNBQ1RJT04g dHJhbnNhY3Rpb25fbW9kZV9saXN0X29yX2VtcHR5CisJCQl8IFNUQVJUIFRSQU5TQUNUSU9OIHRy YW5zYWN0aW9uX21vZGVfbGlzdF9vcl9lbXB0eSB3YWl0X2ZvcgogCQkJCXsKIAkJCQkJVHJhbnNh Y3Rpb25TdG10ICpuID0gbWFrZU5vZGUoVHJhbnNhY3Rpb25TdG10KTsKIAkJCQkJbi0+a2luZCA9 IFRSQU5TX1NUTVRfU1RBUlQ7CiAJCQkJCW4tPm9wdGlvbnMgPSAkMzsKKwkJCQkJbi0+d2FpdCA9 ICQ0OwogCQkJCQkkJCA9IChOb2RlICopbjsKIAkJCQl9CiAJCQl8IENPTU1JVCBvcHRfdHJhbnNh Y3Rpb24gb3B0X3RyYW5zYWN0aW9uX2NoYWluCkBAIC0xNDE4Nyw2ICsxNDE5MiwyNSBAQCB4bWxf cGFzc2luZ19tZWNoOgogCQkJfCBCWSBWQUxVRV9QCiAJCTsKIAorLyoKKyAqIFdBSVQgRk9SIGNs YXVzZSBvZiBCRUdJTiBhbmQgU1RBUlQgVFJBTlNBQ1RJT04gc3RhdGVtZW50cworICovCit3YWl0 X2ZvcjoKKwkJCVdBSVQgRk9SIExTTiBTY29uc3Qgd2FpdF90aW1lCisJCQkJeworCQkJCQlXYWl0 Q2xhdXNlICpuID0gbWFrZU5vZGUoV2FpdENsYXVzZSk7CisJCQkJCW4tPmxzbiA9ICQ0OworCQkJ CQluLT50aW1lb3V0ID0gJDU7CisJCQkJCSQkID0gKE5vZGUgKiluOworCQkJCX0KKwkJCXwgLyog RU1QVFkgKi8JCXsgJCQgPSBOVUxMOyB9CisJCTsKKword2FpdF90aW1lOgorCQkJVElNRU9VVCBJ Y29uc3QJCXsgJCQgPSAkMjsgfQorCQkJfCAvKiBFTVBUWSAqLwkJeyAkJCA9IDA7IH0KKwkJOwor CiAKIC8qCiAgKiBBZ2dyZWdhdGUgZGVjb3JhdGlvbiBjbGF1c2VzCkBAIC0xNTMzOCw2ICsxNTM2 Miw3IEBAIHVucmVzZXJ2ZWRfa2V5d29yZDoKIAkJCXwgTE9DS19QCiAJCQl8IExPQ0tFRAogCQkJ fCBMT0dHRUQKKwkJCXwgTFNOCiAJCQl8IE1BUFBJTkcKIAkJCXwgTUFUQ0gKIAkJCXwgTUFURVJJ QUxJWkVECkBAIC0xNTQ2NSw2ICsxNTQ5MCw3IEBAIHVucmVzZXJ2ZWRfa2V5d29yZDoKIAkJCXwg VEVNUE9SQVJZCiAJCQl8IFRFWFRfUAogCQkJfCBUSUVTCisJCQl8IFRJTUVPVVQKIAkJCXwgVFJB TlNBQ1RJT04KIAkJCXwgVFJBTlNGT1JNCiAJCQl8IFRSSUdHRVIKQEAgLTE1NDkxLDYgKzE1NTE3 LDcgQEAgdW5yZXNlcnZlZF9rZXl3b3JkOgogCQkJfCBWSUVXCiAJCQl8IFZJRVdTCiAJCQl8IFZP TEFUSUxFCisJCQl8IFdBSVQKIAkJCXwgV0hJVEVTUEFDRV9QCiAJCQl8IFdJVEhJTgogCQkJfCBX SVRIT1VUCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKaW5kZXggNDI3YjBkNTljZGUuLjJkY2ZkZGU1ZjNm IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKKysrIGIvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiYWNj ZXNzL3N1YnRyYW5zLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3R3b3BoYXNlLmgiCiAjaW5jbHVkZSAi Y29tbWFuZHMvYXN5bmMuaCIKKyNpbmNsdWRlICJjb21tYW5kcy93YWl0LmgiCiAjaW5jbHVkZSAi bWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9h dXRvdmFjdXVtLmgiCkBAIC0xNDcsNiArMTQ4LDcgQEAgQ3JlYXRlU2hhcmVkTWVtb3J5QW5kU2Vt YXBob3Jlcyh2b2lkKQogCQlzaXplID0gYWRkX3NpemUoc2l6ZSwgQlRyZWVTaG1lbVNpemUoKSk7 CiAJCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTeW5jU2NhblNobWVtU2l6ZSgpKTsKIAkJc2l6ZSA9 IGFkZF9zaXplKHNpemUsIEFzeW5jU2htZW1TaXplKCkpOworCQlzaXplID0gYWRkX3NpemUoc2l6 ZSwgV2FpdFNobWVtU2l6ZSgpKTsKICNpZmRlZiBFWEVDX0JBQ0tFTkQKIAkJc2l6ZSA9IGFkZF9z aXplKHNpemUsIFNobWVtQmFja2VuZEFycmF5U2l6ZSgpKTsKICNlbmRpZgpAQCAtMjY0LDYgKzI2 NiwxMSBAQCBDcmVhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzKHZvaWQpCiAJU3luY1NjYW5T aG1lbUluaXQoKTsKIAlBc3luY1NobWVtSW5pdCgpOwogCisJLyoKKwkgKiBJbml0IGFycmF5IG9m IGV2ZW50cyBmb3IgdGhlIFdBSVQgRk9SIGNsYXVzZSBpbiBzaGFyZWQgbWVtb3J5CisJICovCisJ V2FpdFNobWVtSW5pdCgpOworCiAjaWZkZWYgRVhFQ19CQUNLRU5ECiAKIAkvKgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv bG1nci9wcm9jLmMKaW5kZXggOTkzOGNkZGI1NzAuLmE3ODg3YmQ5OGUyIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv bG1nci9wcm9jLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJhY2Nlc3MvdHJhbnNhbS5o IgogI2luY2x1ZGUgImFjY2Vzcy90d29waGFzZS5oIgogI2luY2x1ZGUgImFjY2Vzcy94YWN0Lmgi CisjaW5jbHVkZSAiY29tbWFuZHMvd2FpdC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2lu Y2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5oIgpAQCAt NzE3LDYgKzcxOCw5IEBAIExvY2tFcnJvckNsZWFudXAodm9pZCkKIAogCUFib3J0U3Ryb25nTG9j a0FjcXVpcmUoKTsKIAorCS8qIElmIEJFR0lOIFdBSVQgRk9SIExTTiB3YXMgaW50ZXJydXB0ZWQs IHRoZW4gc3RvcCB3YWl0aW5nIGZvciB0aGF0IExTTiAqLworCURlbGV0ZVdhaXRlZExTTigpOwor CiAJLyogTm90aGluZyB0byBkbyBpZiB3ZSB3ZXJlbid0IHdhaXRpbmcgZm9yIGEgbG9jayAqLwog CWlmIChsb2NrQXdhaXRlZCA9PSBOVUxMKQogCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rj b3AvdXRpbGl0eS5jIGIvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKaW5kZXggYjFmN2Y2ZTJk MDEuLjU5YzA0MWQ4NTA3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYwor KysgYi9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYwpAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1 ZGUgImNvbW1hbmRzL3VzZXIuaCIKICNpbmNsdWRlICJjb21tYW5kcy92YWN1dW0uaCIKICNpbmNs dWRlICJjb21tYW5kcy92aWV3LmgiCisjaW5jbHVkZSAiY29tbWFuZHMvd2FpdC5oIgogI2luY2x1 ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV91dGlsY21kLmgiCiAjaW5j bHVkZSAicG9zdG1hc3Rlci9iZ3dyaXRlci5oIgpAQCAtNTkxLDYgKzU5MiwxOCBAQCBzdGFuZGFy ZF9Qcm9jZXNzVXRpbGl0eShQbGFubmVkU3RtdCAqcHN0bXQsCiAJCQkJCWNhc2UgVFJBTlNfU1RN VF9TVEFSVDoKIAkJCQkJCXsKIAkJCQkJCQlMaXN0Q2VsbCAgICpsYzsKKwkJCQkJCQlXYWl0Q2xh dXNlICp3YWl0c3RtdCA9IChXYWl0Q2xhdXNlICopIHN0bXQtPndhaXQ7CisKKwkJCQkJCQkvKiBX QUlUIEZPUiBjYW5ub3QgYmUgdXNlZCBvbiBtYXN0ZXIgKi8KKwkJCQkJCQlpZiAoc3RtdC0+d2Fp dCAmJiAhUmVjb3ZlcnlJblByb2dyZXNzKCkpCisJCQkJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CQkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCQkJCQkJ CSBlcnJtc2coIldBSVQgRk9SIGNhbiBvbmx5IGJlICIKKwkJCQkJCQkJCQkJCSJ1c2VkIG9uIHN0 YW5kYnkiKSkpOworCisJCQkJCQkJLyogSWYgbmVlZGVkIHRvIFdBSVQgRk9SIHNvbWV0aGluZyBi dXQgZmFpbGVkICovCisJCQkJCQkJaWYgKHN0bXQtPndhaXQgJiYgV2FpdE1haW4od2FpdHN0bXQs IGRlc3QpID09IDApCisJCQkJCQkJCWJyZWFrOwogCiAJCQkJCQkJQmVnaW5UcmFuc2FjdGlvbkJs b2NrKCk7CiAJCQkJCQkJZm9yZWFjaChsYywgc3RtdC0+b3B0aW9ucykKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9taXNjLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbWlzYy5j CmluZGV4IGVlMzQwZmIwZjAyLi4wM2Y5OTdjYmE3MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L21pc2MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbWlzYy5jCkBAIC0z NzIsOCArMzcyLDYgQEAgcGdfc2xlZXAoUEdfRlVOQ1RJT05fQVJHUykKIAkgKiBsZXNzIHRoYW4g dGhlIHNwZWNpZmllZCB0aW1lIHdoZW4gV2FpdExhdGNoIGlzIHRlcm1pbmF0ZWQgZWFybHkgYnkg YQogCSAqIG5vbi1xdWVyeS1jYW5jZWxpbmcgc2lnbmFsIHN1Y2ggYXMgU0lHSFVQLgogCSAqLwot I2RlZmluZSBHZXROb3dGbG9hdCgpCSgoZmxvYXQ4KSBHZXRDdXJyZW50VGltZXN0YW1wKCkgLyAx MDAwMDAwLjApCi0KIAllbmR0aW1lID0gR2V0Tm93RmxvYXQoKSArIHNlY3M7CiAKIAlmb3IgKDs7 KQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvd2FpdC5oIGIvc3JjL2luY2x1ZGUv Y29tbWFuZHMvd2FpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5k MDhlZTU3NGVkMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3dhaXQu aApAQCAtMCwwICsxLDI3IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiB3YWl0LmgKKyAq CSAgcHJvdG90eXBlcyBmb3IgY29tbWFuZHMvd2FpdC5jCisgKgorICogUG9ydGlvbnMgQ29weXJp Z2h0IChjKSAxOTk2LTIwMjAsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMjAsIFJlZ2VudHMgb2YgUG9zdGdyZXNQcm8KKyAq CisgKiBzcmMvaW5jbHVkZS9jb21tYW5kcy93YWl0LmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworI2lmbmRlZiBXQUlUX0gKKyNkZWZpbmUgV0FJVF9ICisjaW5jbHVkZSAicG9zdGdyZXMu aCIKKyNpbmNsdWRlICJ0Y29wL2Rlc3QuaCIKKyNpbmNsdWRlICJub2Rlcy9wYXJzZW5vZGVzLmgi CisKK2V4dGVybiBib29sIFdhaXRVdGlsaXR5KFhMb2dSZWNQdHIgbHNuLCBjb25zdCBpbnQgdGlt ZW91dF9tcyk7CitleHRlcm4gU2l6ZSBXYWl0U2htZW1TaXplKHZvaWQpOworZXh0ZXJuIHZvaWQg V2FpdFNobWVtSW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIFdhaXRTZXRMYXRjaChYTG9nUmVjUHRy IGN1cl9sc24pOworZXh0ZXJuIFhMb2dSZWNQdHIgR2V0TWluV2FpdGVkTFNOKHZvaWQpOworZXh0 ZXJuIGludAlXYWl0TWFpbihXYWl0Q2xhdXNlICpzdG10LCBEZXN0UmVjZWl2ZXIgKmRlc3QpOwor ZXh0ZXJuIHZvaWQgRGVsZXRlV2FpdGVkTFNOKHZvaWQpOworCisjZW5kaWYJCQkJCQkJLyogV0FJ VF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oIGIvc3JjL2luY2x1 ZGUvbm9kZXMvbm9kZXMuaAppbmRleCA1MGIxYmE1MTg2My4uYzM3NjYzYTI4YmQgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvbm9k ZXMuaApAQCAtNDkyLDYgKzQ5Miw3IEBAIHR5cGVkZWYgZW51bSBOb2RlVGFnCiAJVF9TdGFydFJl cGxpY2F0aW9uQ21kLAogCVRfVGltZUxpbmVIaXN0b3J5Q21kLAogCVRfU1FMQ21kLAorCVRfV2Fp dENsYXVzZSwKIAogCS8qCiAJICogVEFHUyBGT1IgUkFORE9NIE9USEVSIFNUVUZGCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9w YXJzZW5vZGVzLmgKaW5kZXggY2Q2ZjFiZTY0MzUuLjJkMGFhZDhkZjk4IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFy c2Vub2Rlcy5oCkBAIC0xNDMwLDYgKzE0MzAsMTcgQEAgdHlwZWRlZiBzdHJ1Y3QgT25Db25mbGlj dENsYXVzZQogCWludAkJCWxvY2F0aW9uOwkJLyogdG9rZW4gbG9jYXRpb24sIG9yIC0xIGlmIHVu a25vd24gKi8KIH0gT25Db25mbGljdENsYXVzZTsKIAorLyoKKyAqIFdhaXRDbGF1c2UgLQorICoJ CXJlcHJlc2VudGF0aW9uIG9mIFdBSVQgRk9SIGNsYXVzZSBmb3IgQkVHSU4gYW5kIFNUQVJUIFRS QU5TQUNUSU9OLgorICovCit0eXBlZGVmIHN0cnVjdCBXYWl0Q2xhdXNlCit7CisJTm9kZVRhZwkJ dHlwZTsKKwljaGFyCSAgICpsc247CQkJLyogTFNOIHRvIHdhaXQgZm9yICovCisJaW50CQkJdGlt ZW91dDsJCS8qIE51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gbGltaXQgd2FpdCB0aW1lICovCit9 IFdhaXRDbGF1c2U7CisKIC8qCiAgKiBDb21tb25UYWJsZUV4cHIgLQogICoJICAgcmVwcmVzZW50 YXRpb24gb2YgV0lUSCBsaXN0IGVsZW1lbnQKQEAgLTMwNTgsNiArMzA2OSw3IEBAIHR5cGVkZWYg c3RydWN0IFRyYW5zYWN0aW9uU3RtdAogCWNoYXIJICAgKnNhdmVwb2ludF9uYW1lOyAvKiBmb3Ig c2F2ZXBvaW50IGNvbW1hbmRzICovCiAJY2hhcgkgICAqZ2lkOwkJCS8qIGZvciB0d28tcGhhc2Ut Y29tbWl0IHJlbGF0ZWQgY29tbWFuZHMgKi8KIAlib29sCQljaGFpbjsJCQkvKiBBTkQgQ0hBSU4g b3B0aW9uICovCisJTm9kZQkgICAqd2FpdDsJCQkvKiBXQUlUIEZPUiBjbGF1c2UgKi8KIH0gVHJh bnNhY3Rpb25TdG10OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmggYi9zcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmgK aW5kZXggMDhmMjJjZTIxMWQuLjZlMTg0OGZlNGNjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9w YXJzZXIva3dsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oCkBAIC0yNDMs NiArMjQzLDcgQEAgUEdfS0VZV09SRCgibG9jYXRpb24iLCBMT0NBVElPTiwgVU5SRVNFUlZFRF9L RVlXT1JEKQogUEdfS0VZV09SRCgibG9jayIsIExPQ0tfUCwgVU5SRVNFUlZFRF9LRVlXT1JEKQog UEdfS0VZV09SRCgibG9ja2VkIiwgTE9DS0VELCBVTlJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlX T1JEKCJsb2dnZWQiLCBMT0dHRUQsIFVOUkVTRVJWRURfS0VZV09SRCkKK1BHX0tFWVdPUkQoImxz biIsIExTTiwgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgibWFwcGluZyIsIE1BUFBJ TkcsIFVOUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoIm1hdGNoIiwgTUFUQ0gsIFVOUkVT RVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoIm1hdGVyaWFsaXplZCIsIE1BVEVSSUFMSVpFRCwg VU5SRVNFUlZFRF9LRVlXT1JEKQpAQCAtNDEwLDYgKzQxMSw3IEBAIFBHX0tFWVdPUkQoInRleHQi LCBURVhUX1AsIFVOUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoInRoZW4iLCBUSEVOLCBS RVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgidGllcyIsIFRJRVMsIFVOUkVTRVJWRURfS0VZ V09SRCkKIFBHX0tFWVdPUkQoInRpbWUiLCBUSU1FLCBDT0xfTkFNRV9LRVlXT1JEKQorUEdfS0VZ V09SRCgidGltZW91dCIsIFRJTUVPVVQsIFVOUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQo InRpbWVzdGFtcCIsIFRJTUVTVEFNUCwgQ09MX05BTUVfS0VZV09SRCkKIFBHX0tFWVdPUkQoInRv IiwgVE8sIFJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJ0cmFpbGluZyIsIFRSQUlMSU5H LCBSRVNFUlZFRF9LRVlXT1JEKQpAQCAtNDUwLDYgKzQ1Miw3IEBAIFBHX0tFWVdPUkQoInZlcnNp b24iLCBWRVJTSU9OX1AsIFVOUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoInZpZXciLCBW SUVXLCBVTlJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJ2aWV3cyIsIFZJRVdTLCBVTlJF U0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJ2b2xhdGlsZSIsIFZPTEFUSUxFLCBVTlJFU0VS VkVEX0tFWVdPUkQpCitQR19LRVlXT1JEKCJ3YWl0IiwgV0FJVCwgVU5SRVNFUlZFRF9LRVlXT1JE KQogUEdfS0VZV09SRCgid2hlbiIsIFdIRU4sIFJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JE KCJ3aGVyZSIsIFdIRVJFLCBSRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgid2hpdGVzcGFj ZSIsIFdISVRFU1BBQ0VfUCwgVU5SRVNFUlZFRF9LRVlXT1JEKQpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvdXRpbHMvdGltZXN0YW1wLmggYi9zcmMvaW5jbHVkZS91dGlscy90aW1lc3RhbXAuaApp bmRleCAwM2ExZGU1NjlmMC4uZWFlZWI3OWM0MTEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0 aWxzL3RpbWVzdGFtcC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3RpbWVzdGFtcC5oCkBAIC0x MDksNCArMTA5LDYgQEAgZXh0ZXJuIGludAlkYXRlMmlzb3llYXJkYXkoaW50IHllYXIsIGludCBt b24sIGludCBtZGF5KTsKIAogZXh0ZXJuIGJvb2wgVGltZXN0YW1wVGltZXN0YW1wVHpSZXF1aXJl c1Jld3JpdGUodm9pZCk7CiAKKyNkZWZpbmUgR2V0Tm93RmxvYXQoKSAoKGZsb2F0OCkgR2V0Q3Vy cmVudFRpbWVzdGFtcCgpIC8gMTAwMDAwMC4wKQorCiAjZW5kaWYJCQkJCQkJLyogVElNRVNUQU1Q X0ggKi8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDIwX2JlZ2luX3dhaXQucGwg Yi9zcmMvdGVzdC9yZWNvdmVyeS90LzAyMF9iZWdpbl93YWl0LnBsCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kYTRiZmI0ZWYzMgotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy90ZXN0L3JlY292ZXJ5L3QvMDIwX2JlZ2luX3dhaXQucGwKQEAgLTAsMCArMSw4NSBAQAorIyBD aGVja3MgV0FJVCBGT1IKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBQb3N0Z3Jl c05vZGU7Cit1c2UgVGVzdExpYjsKK3VzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDg7CisKKyMgSW5p dGlhbGl6ZSBtYXN0ZXIgbm9kZQorbXkgJG5vZGVfbWFzdGVyID0gZ2V0X25ld19ub2RlKCdtYXN0 ZXInKTsKKyRub2RlX21hc3Rlci0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+IDEpOworJG5vZGVf bWFzdGVyLT5zdGFydDsKKworIyBBbmQgc29tZSBjb250ZW50IGFuZCB0YWtlIGEgYmFja3VwCisk bm9kZV9tYXN0ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgd2FpdF90 ZXN0IEFTIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgQVMgYSIpOworbXkgJGJhY2t1cF9u YW1lID0gJ215X2JhY2t1cCc7Ciskbm9kZV9tYXN0ZXItPmJhY2t1cCgkYmFja3VwX25hbWUpOwor CisjIFVzaW5nIHRoZSBiYWNrdXAsIGNyZWF0ZSBhIHN0cmVhbWluZyBzdGFuZGJ5IHdpdGggYSAx IHNlY29uZCBkZWxheQorbXkgJG5vZGVfc3RhbmRieSA9IGdldF9uZXdfbm9kZSgnc3RhbmRieScp OworbXkgJGRlbGF5ICAgICAgICA9IDE7Ciskbm9kZV9zdGFuZGJ5LT5pbml0X2Zyb21fYmFja3Vw KCRub2RlX21hc3RlciwgJGJhY2t1cF9uYW1lLAorCWhhc19zdHJlYW1pbmcgPT4gMSk7Ciskbm9k ZV9zdGFuZGJ5LT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgcXFbCisJcmVjb3Zlcnlf bWluX2FwcGx5X2RlbGF5ID0gJyR7ZGVsYXl9cycKK10pOworJG5vZGVfc3RhbmRieS0+c3RhcnQ7 CisKKworIyBDaGVjayB0aGF0IHRpbWVvdXRzIG1ha2UgdXMgd2FpdCBmb3IgdGhlIHNwZWNpZmll ZCB0aW1lICgxcyBoZXJlKQorbXkgJGN1cnJlbnRfdGltZSA9ICRub2RlX3N0YW5kYnktPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIG5vdygpIik7CitteSAkdHdvX3NlY29uZHMgPSAyMDAw OyAjIGluIG1pbGxpc2Vjb25kcworbXkgJHN0YXJ0X3RpbWUgPSB0aW1lKCk7Ciskbm9kZV9zdGFu ZGJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQkVHSU4gV0FJVCBGT1IgTFNOICcwL0ZGRkZG RkZGJyBUSU1FT1VUICR0d29fc2Vjb25kcyIpOworbXkgJHRpbWVfd2FpdGVkID0gKHRpbWUoKSAt ICRzdGFydF90aW1lKSAqIDEwMDA7ICMgY29udmVydCB0byBtaWxsaXNlY29uZHMKK29rKCR0aW1l X3dhaXRlZCA+PSAkdHdvX3NlY29uZHMsICJXQUlUIEZPUiBUSU1FT1VUIHdhaXRzIGZvciBlbm91 Z2ggdGltZSIpOworCisKKyMgQ2hlY2sgdGhhdCB0aW1lb3V0cyBsZXQgdXMgc3RvcCB3YWl0aW5n IHJpZ2h0IGF3YXksIGJlZm9yZSByZWFjaGluZyB0YXJnZXQgTFNOCiskbm9kZV9tYXN0ZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB3YWl0X3Rlc3QgVkFMVUVTIChnZW5l cmF0ZV9zZXJpZXMoMTEsIDIwKSkiKTsKK215ICRsc24xID0gJG5vZGVfbWFzdGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBwZ19jdXJyZW50X3dhbF9sc24oKSIpOworbXkgKCRyZXQs ICRvdXQsICRlcnIpID0gJG5vZGVfc3RhbmRieS0+cHNxbCgncG9zdGdyZXMnLAorCSJCRUdJTiBX QUlUIEZPUiBMU04gJyRsc24xJyBUSU1FT1VUIDEiKTsKKworb2soJHJldCA9PSAwLCAiemVybyBy ZXR1cm4gdmFsdWUgd2hlbiBmYWlsZWQgdG8gV0FJVCBGT1IgTFNOIG9uIHN0YW5kYnkiKTsKK29r KCRlcnIgPX4gL1dBUk5JTkc6ICBkaWRuJ3Qgc3RhcnQgdHJhbnNhY3Rpb24gYmVjYXVzZSBMU04g d2FzIG5vdCByZWFjaGVkLywKKwkiY29ycmVjdCBlcnJvciBtZXNzYWdlIHdoZW4gZmFpbGVkIHRv IFdBSVQgRk9SIExTTiBvbiBzdGFuZGJ5Iik7Citvaygkb3V0IGVxICJmIiwgImlmIGdpdmVuIHRv byBsaXR0bGUgd2FpdCB0aW1lLCBXQUlUIGRvZXNuJ3QgcmVhY2ggdGFyZ2V0IExTTiIpOworCisK KyMgQ2hlY2sgdGhhdCBXQUlUIEZPUiB3b3JrcyBmaW5lIGFuZCByZWFjaGVzIHRhcmdldCBMU04g aWYgZ2l2ZW4gbm8gdGltZW91dAorCisjIEFkZCBkYXRhIG9uIG1hc3RlciwgbWVtb3JpemUgbWFz dGVyJ3MgbGFzdCBMU04KKyRub2RlX21hc3Rlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIklO U0VSVCBJTlRPIHdhaXRfdGVzdCBWQUxVRVMgKGdlbmVyYXRlX3NlcmllcygyMSwgMzApKSIpOwor bXkgJGxzbjIgPSAkbm9kZV9tYXN0ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHBn X2N1cnJlbnRfd2FsX2xzbigpIik7CisKKyMgV2FpdCBmb3IgaXQgdG8gYXBwZWFyIG9uIHJlcGxp Y2EsIG1lbW9yaXplIHJlcGxpY2EncyBsYXN0IExTTgorJG5vZGVfc3RhbmRieS0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCisJIkJFR0lOIFdBSVQgRk9SIExTTiAnJGxzbjInIik7CitteSAkcmVhY2hl ZF9sc24gPSAkbm9kZV9zdGFuZGJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBn X2xhc3Rfd2FsX3JlcGxheV9sc24oKSIpOworCisjIE1ha2Ugc3VyZSB0aGF0IG1hc3RlcidzIGFu ZCByZXBsaWNhJ3MgTFNOcyBhcmUgdGhlIHNhbWUgYWZ0ZXIgV0FJVAorbXkgJGNvbXBhcmVfbHNu cyA9ICRub2RlX3N0YW5kYnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGdfbHNu X2NtcCgnJHJlYWNoZWRfbHNuJzo6cGdfbHNuLCAnJGxzbjInOjpwZ19sc24pIik7CitvaygkY29t cGFyZV9sc25zIGVxIDAsCisJInN0YW5kYnkgcmVhY2hlZCB0aGUgc2FtZSBMU04gYXMgbWFzdGVy IGJlZm9yZSBzdGFydGluZyB0cmFuc2FjdGlvbiIpOworCisKKyMgTWFrZSBzdXJlIHRoYXQgaXQn cyBub3QgYWxsb3dlZCB0byB1c2UgV0FJVCBGT1Igb24gbWFzdGVyCisoJHJldCwgJG91dCwgJGVy cikgPSAkbm9kZV9tYXN0ZXItPnBzcWwoJ3Bvc3RncmVzJywKKwkiQkVHSU4gV0FJVCBGT1IgTFNO ICcwL0ZGRkZGRkZGJyIpOworCitvaygkcmV0ICE9IDAsICJub24temVybyByZXR1cm4gdmFsdWUg d2hlbiB0cnlpbmcgdG8gV0FJVCBGT1IgTFNOIG9uIG1hc3RlciIpOworb2soJGVyciA9fiAvRVJS T1I6ICBXQUlUIEZPUiBjYW4gb25seSBiZSB1c2VkIG9uIHN0YW5kYnkvLAorCSJjb3JyZWN0IGVy cm9yIG1lc3NhZ2Ugd2hlbiB0cnlpbmcgdG8gV0FJVCBGT1IgTFNOIG9uIG1hc3RlciIpOworb2so JG91dCBlcSAnJywgImVtcHR5IG91dHB1dCB3aGVuIHRyeWluZyB0byBXQUlUIEZPUiBMU04gb24g bWFzdGVyIik7CisKKworJG5vZGVfc3RhbmRieS0+c3RvcDsKKyRub2RlX21hc3Rlci0+c3RvcDsK ZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggMzQ2MjM1MjNhNzAuLmEyZDFiOWRlZmMyIDEw MDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMjYyMSw2ICsyNjIxLDcgQEAgV1NBQlVGCiBX U0FEQVRBCiBXU0FORVRXT1JLRVZFTlRTCiBXU0FQUk9UT0NPTF9JTkZPCitXYWl0Q2xhdXNlCiBX YWl0RXZlbnQKIFdhaXRFdmVudEFjdGl2aXR5CiBXYWl0RXZlbnRDbGllbnQKQEAgLTI2MjksNiAr MjYzMCw3IEBAIFdhaXRFdmVudElQQwogV2FpdEV2ZW50U2V0CiBXYWl0RXZlbnRUaW1lb3V0CiBX YWl0UE1SZXN1bHQKK1dhaXRTdGF0ZQogV2FsQ2xvc2VNZXRob2QKIFdhbExldmVsCiBXYWxSY3ZE YXRhCg== --=_66ec4f4cec0fa72505efdf688553b422--