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 1jKRPV-00024C-9e for pgsql-hackers@arkaria.postgresql.org; Fri, 03 Apr 2020 18:51:22 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1jKRPT-0000ej-Ir for pgsql-hackers@arkaria.postgresql.org; Fri, 03 Apr 2020 18:51:19 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jKRPT-0000eZ-3t for pgsql-hackers@lists.postgresql.org; Fri, 03 Apr 2020 18:51:19 +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 1jKRPO-00037T-Tm for pgsql-hackers@lists.postgresql.org; Fri, 03 Apr 2020 18:51:18 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id 9D7D421C5822 for ; Fri, 3 Apr 2020 21:51:13 +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 57AD621C5818 for ; Fri, 3 Apr 2020 21:51:13 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1585939873; bh=s7aseFcMNtgOS4aaXdBB7RrpqeN+49CgXejlqXWkyxo=; h=Date:From:To:Subject:In-Reply-To:References; b=CiIL6MpvVg4/twoqnVYRZYqyq2jliWRCcMJcohc7MkUHkYTf7WpQdylXc6D/sT0OF kZUi87O3OaXgMsY1Bb89we5LCJb8f+M/Rauw6vaZ9JrHMnQp4xedU5XNN/UCys13aH yFB1Pw5a32dU1gmvfs70qO6GdplHzsRfDHuyD0k4= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_fde5c2e9db902737c11ce6731e37fec7" Content-Transfer-Encoding: 7bit Date: Fri, 03 Apr 2020 21:51:13 +0300 From: Anna Akenteva To: pgsql-hackers@lists.postgresql.org Subject: Re: [HACKERS] make async slave to wait for lsn to be replayed In-Reply-To: <69a363498b76cd079ae19c4ee93bced0@postgrespro.ru> References: <80f267591b373db5588d580fdfb432f0@postgrespro.ru> <20200306.145445.1788163547829857988.horikyota.ntt@gmail.com> <3cc883048264c2e9af022033925ff8db@postgrespro.ru> <674ad239b725a11d89c21574e44e376b@postgrespro.ru> <69a363498b76cd079ae19c4ee93bced0@postgrespro.ru> User-Agent: Roundcube Webmail/1.4.0 Message-ID: <06bfb1e542a25c3ebfc4232be4d49555@postgrespro.ru> X-Sender: a.akenteva@postgrespro.ru Organization: Postgres Professional List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=_fde5c2e9db902737c11ce6731e37fec7 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed I did some code cleanup and added tests - both for the standalone WAIT FOR statement and for WAIT FOR as a part of BEGIN. The new patch is attached. On 2020-04-03 17:29, Alexey Kondratov wrote: > On 2020-04-01 02:26, Anna Akenteva wrote: >> >> - WAIT FOR [ANY | ALL] event [, ...] >> - BEGIN [ WORK | TRANSACTION ] [ transaction_mode [, ...] ] [ WAIT FOR >> [ANY | ALL] event [, ...]] >> where event is one of: >> LSN value >> TIMEOUT number_of_milliseconds >> timestamp >> >> Now, one event cannot contain both an LSN and a TIMEOUT. >> > > In my understanding the whole idea of having TIMEOUT was to do > something like 'Do wait for this LSN to be replicated, but no longer > than TIMEOUT milliseconds'. What is the point of having plain TIMEOUT? > It seems to be equivalent to pg_sleep, doesn't it? > In the patch that I reviewed, you could do things like: WAIT FOR LSN lsn0, LSN lsn1 TIMEOUT time1, LSN lsn2 TIMEOUT time2; and such a statement was in practice equivalent to WAIT FOR LSN(max(lsn0, lsn1, lsn2)) TIMEOUT (max(time1, time2)) As you can see, even though grammatically lsn1 is grouped with time1 and lsn2 is grouped with time2, both timeouts that we specified are not connected to their respective LSN-s, and instead they kinda act like global timeouts. Therefore, I didn't see a point in keeping TIMEOUT necessarily grammatically connected to LSN. In the new syntax our statement would look like this: WAIT FOR LSN lsn0, LSN lsn1, LSN lsn2, TIMEOUT time1, TIMEOUT time2; TIMEOUT-s are not forced to be grouped with LSN-s anymore, which makes it more clear that all specified TIMEOUTs will be global and will apply to all LSN-s at once. The point of having TIMEOUT is still to let us limit the time of waiting for LSNs. It's just that with the new syntax, we can also use TIMEOUT without an LSN. You are right, such a case is equivalent to pg_sleep. One way to avoid that is to prohibit waiting for TIMEOUT without specifying an LSN. Do you think we should do that? -- Anna Akenteva Postgres Professional: The Russian Postgres Company http://www.postgrespro.com --=_fde5c2e9db902737c11ce6731e37fec7 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=begin_waitfor_v4.patch Content-Disposition: attachment; filename=begin_waitfor_v4.patch; size=47965 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvYWxsZmlsZXMuc2dtbCBiL2RvYy9zcmMvc2dt bC9yZWYvYWxsZmlsZXMuc2dtbAppbmRleCA4ZDkxZjM1MjllNi4uODY5N2Y5ODA3ZmYgMTAwNjQ0 Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvYWxsZmlsZXMuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwv cmVmL2FsbGZpbGVzLnNnbWwKQEAgLTE4Nyw2ICsxODcsNyBAQCBDb21wbGV0ZSBsaXN0IG9mIHVz YWJsZSBzZ21sIHNvdXJjZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeS4KIDwhRU5USVRZIHVwZGF0 ZSAgICAgICAgICAgICBTWVNURU0gInVwZGF0ZS5zZ21sIj4KIDwhRU5USVRZIHZhY3V1bSAgICAg ICAgICAgICBTWVNURU0gInZhY3V1bS5zZ21sIj4KIDwhRU5USVRZIHZhbHVlcyAgICAgICAgICAg ICBTWVNURU0gInZhbHVlcy5zZ21sIj4KKzwhRU5USVRZIHdhaXQgICAgICAgICAgICAgICBTWVNU RU0gIndhaXQuc2dtbCI+CiAKIDwhLS0gYXBwbGljYXRpb25zIGFuZCB1dGlsaXRpZXMgLS0+CiA8 IUVOVElUWSBjbHVzdGVyZGIgICAgICAgICAgU1lTVEVNICJjbHVzdGVyZGIuc2dtbCI+CmRpZmYg LS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2JlZ2luLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2Jl Z2luLnNnbWwKaW5kZXggYzIzYmJmYjRlNzEuLmNmZWUzYzhmMTAyIDEwMDY0NAotLS0gYS9kb2Mv c3JjL3NnbWwvcmVmL2JlZ2luLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9iZWdpbi5zZ21s CkBAIC0yMSwxMyArMjEsMjEgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAKICA8cmVmc3lu b3BzaXNkaXY+CiA8c3lub3BzaXM+Ci1CRUdJTiBbIFdPUksgfCBUUkFOU0FDVElPTiBdIFsgPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRyYW5zYWN0aW9uX21vZGU8L3JlcGxhY2VhYmxl PiBbLCAuLi5dIF0KK0JFR0lOIFsgV09SSyB8IFRSQU5TQUNUSU9OIF0gWyA8cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+dHJhbnNhY3Rpb25fbW9kZTwvcmVwbGFjZWFibGU+IFssIC4uLl0g XSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+d2FpdF9mb3JfZXZlbnQ8L3JlcGxhY2Vh YmxlPgogCiA8cGhyYXNlPndoZXJlIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50cmFu c2FjdGlvbl9tb2RlPC9yZXBsYWNlYWJsZT4gaXMgb25lIG9mOjwvcGhyYXNlPgogCiAgICAgSVNP TEFUSU9OIExFVkVMIHsgU0VSSUFMSVpBQkxFIHwgUkVQRUFUQUJMRSBSRUFEIHwgUkVBRCBDT01N SVRURUQgfCBSRUFEIFVOQ09NTUlUVEVEIH0KICAgICBSRUFEIFdSSVRFIHwgUkVBRCBPTkxZCiAg ICAgWyBOT1QgXSBERUZFUlJBQkxFCisKKzxwaHJhc2U+d2hlcmUgPHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPndhaXRfZm9yX2V2ZW50PC9yZXBsYWNlYWJsZT4gaXM6PC9waHJhc2U+Cisg ICAgV0FJVCBGT1IgW0FOWSB8IEFMTF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmV2 ZW50PC9yZXBsYWNlYWJsZT4gWywgLi4uXQorCis8cGhyYXNlPmFuZCA8cmVwbGFjZWFibGUgY2xh c3M9InBhcmFtZXRlciI+ZXZlbnQ8L3JlcGxhY2VhYmxlPiBpcyBvbmUgb2Y6PC9waHJhc2U+Cisg ICAgTFNOIGxzbl92YWx1ZQorICAgIFRJTUVPVVQgbnVtYmVyX29mX21pbGxpc2Vjb25kcworICAg IHRpbWVzdGFtcAogPC9zeW5vcHNpcz4KICA8L3JlZnN5bm9wc2lzZGl2PgogCmRpZmYgLS1naXQg YS9kb2Mvc3JjL3NnbWwvcmVmL3N0YXJ0X3RyYW5zYWN0aW9uLnNnbWwgYi9kb2Mvc3JjL3NnbWwv cmVmL3N0YXJ0X3RyYW5zYWN0aW9uLnNnbWwKaW5kZXggZDZjZDFkNDE3NzkuLjBhMmVhN2U4MGJl IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3N0YXJ0X3RyYW5zYWN0aW9uLnNnbWwKKysr IGIvZG9jL3NyYy9zZ21sL3JlZi9zdGFydF90cmFuc2FjdGlvbi5zZ21sCkBAIC0yMSwxMyArMjEs MjEgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAKICA8cmVmc3lub3BzaXNkaXY+CiA8c3lu b3BzaXM+Ci1TVEFSVCBUUkFOU0FDVElPTiBbIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVy Ij50cmFuc2FjdGlvbl9tb2RlPC9yZXBsYWNlYWJsZT4gWywgLi4uXSBdCitTVEFSVCBUUkFOU0FD VElPTiBbIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50cmFuc2FjdGlvbl9tb2RlPC9y ZXBsYWNlYWJsZT4gWywgLi4uXSBdIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj53YWl0 X2Zvcl9ldmVudDwvcmVwbGFjZWFibGU+CiAKIDxwaHJhc2U+d2hlcmUgPHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPnRyYW5zYWN0aW9uX21vZGU8L3JlcGxhY2VhYmxlPiBpcyBvbmUgb2Y6 PC9waHJhc2U+CiAKICAgICBJU09MQVRJT04gTEVWRUwgeyBTRVJJQUxJWkFCTEUgfCBSRVBFQVRB QkxFIFJFQUQgfCBSRUFEIENPTU1JVFRFRCB8IFJFQUQgVU5DT01NSVRURUQgfQogICAgIFJFQUQg V1JJVEUgfCBSRUFEIE9OTFkKICAgICBbIE5PVCBdIERFRkVSUkFCTEUKKworPHBocmFzZT53aGVy ZSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+d2FpdF9mb3JfZXZlbnQ8L3JlcGxhY2Vh YmxlPiBpczo8L3BocmFzZT4KKyAgICBXQUlUIEZPUiBbQU5ZIHwgQUxMXSA8cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+ZXZlbnQ8L3JlcGxhY2VhYmxlPiBbLCAuLi5dCisKKzxwaHJhc2U+ YW5kIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5ldmVudDwvcmVwbGFjZWFibGU+IGlz IG9uZSBvZjo8L3BocmFzZT4KKyAgICBMU04gbHNuX3ZhbHVlCisgICAgVElNRU9VVCBudW1iZXJf b2ZfbWlsbGlzZWNvbmRzCisgICAgdGltZXN0YW1wCiA8L3N5bm9wc2lzPgogIDwvcmVmc3lub3Bz aXNkaXY+CiAKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvd2FpdC5zZ21sIGIvZG9jL3Ny Yy9zZ21sL3JlZi93YWl0LnNnbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLjI2Y2FlM2FkODU5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi93YWl0 LnNnbWwKQEAgLTAsMCArMSwxNDYgQEAKKzwhLS0KK2RvYy9zcmMvc2dtbC9yZWYvd2FpdC5zZ21s CitQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KKy0tPgorCis8cmVmZW50cnkgaWQ9InNxbC13YWl0 Ij4KKyA8aW5kZXh0ZXJtIHpvbmU9InNxbC13YWl0Ij4KKyAgPHByaW1hcnk+V0FJVCBGT1I8L3By aW1hcnk+CisgPC9pbmRleHRlcm0+CisKKyA8cmVmbWV0YT4KKyAgPHJlZmVudHJ5dGl0bGU+V0FJ VCBGT1I8L3JlZmVudHJ5dGl0bGU+CisgIDxtYW52b2xudW0+NzwvbWFudm9sbnVtPgorICA8cmVm bWlzY2luZm8+U1FMIC0gTGFuZ3VhZ2UgU3RhdGVtZW50czwvcmVmbWlzY2luZm8+CisgPC9yZWZt ZXRhPgorCisgPHJlZm5hbWVkaXY+CisgIDxyZWZuYW1lPldBSVQgRk9SPC9yZWZuYW1lPgorICA8 cmVmcHVycG9zZT53YWl0IGZvciB0aGUgdGFyZ2V0IDxhY3JvbnltPkxTTjwvYWNyb255bT4gdG8g YmUgcmVwbGF5ZWQgb3IgZm9yIHNwZWNpZmllZCB0aW1lIHRvIHBhc3M8L3JlZnB1cnBvc2U+Cisg PC9yZWZuYW1lZGl2PgorCisgPHJlZnN5bm9wc2lzZGl2PgorPHN5bm9wc2lzPgorV0FJVCBGT1Ig W0FOWSB8IEFMTF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmV2ZW50PC9yZXBsYWNl YWJsZT4gWywgLi4uXQorCis8cGhyYXNlPndoZXJlIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1l dGVyIj5ldmVudDwvcmVwbGFjZWFibGU+IGlzIG9uZSBvZjo8L3BocmFzZT4KKyAgICBMU04gdmFs dWUKKyAgICBUSU1FT1VUIG51bWJlcl9vZl9taWxsaXNlY29uZHMKKyAgICB0aW1lc3RhbXAKKwor V0FJVCBGT1IgTFNOICc8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bHNuX251bWJlcjwv cmVwbGFjZWFibGU+JworV0FJVCBGT1IgTFNOICc8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRl ciI+bHNuX251bWJlcjwvcmVwbGFjZWFibGU+JyBUSU1FT1VUIDxyZXBsYWNlYWJsZSBjbGFzcz0i cGFyYW1ldGVyIj53YWl0X3RpbWVvdXQ8L3JlcGxhY2VhYmxlPgorV0FJVCBGT1IgTFNOICc8cmVw bGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bHNuX251bWJlcjwvcmVwbGFjZWFibGU+JywgVElN RVNUQU1QIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj53YWl0X3RpbWU8L3JlcGxhY2Vh YmxlPgorV0FJVCBGT1IgVElNRVNUQU1QIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj53 YWl0X3RpbWU8L3JlcGxhY2VhYmxlPgorV0FJVCBGT1IgQUxMIExTTiAnPHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPmxzbl9udW1iZXI8L3JlcGxhY2VhYmxlPicgVElNRU9VVCA8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+d2FpdF90aW1lb3V0PC9yZXBsYWNlYWJsZT4sIFRJTUVT VEFNUCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+d2FpdF90aW1lPC9yZXBsYWNlYWJs ZT4KK1dBSVQgRk9SIEFOWSBMU04gJzxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5sc25f bnVtYmVyPC9yZXBsYWNlYWJsZT4nLCBUSU1FU1RBTVAgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPndhaXRfdGltZTwvcmVwbGFjZWFibGU+Cis8L3N5bm9wc2lzPgorIDwvcmVmc3lub3Bz aXNkaXY+CisKKyA8cmVmc2VjdDE+CisgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAg PHBhcmE+CisgICA8Y29tbWFuZD5XQUlUIEZPUjwvY29tbWFuZD4gcHJvdmlkZXMgYSBzaW1wbGUg aW50ZXJwcm9jZXNzIGNvbW11bmljYXRpb24KKyAgIG1lY2hhbmlzbSB0byB3YWl0IGZvciB0aW1l c3RhbXAsIHRpbWVvdXQgb3IgdGhlIHRhcmdldCBsb2cgc2VxdWVuY2UgbnVtYmVyCisgICAoPGFj cm9ueW0+TFNOPC9hY3JvbnltPikgb24gc3RhbmRieSBpbiA8cHJvZHVjdG5hbWU+UG9zdGdyZVNR TDwvcHJvZHVjdG5hbWU+CisgICBkYXRhYmFzZXMgd2l0aCBtYXN0ZXItc3RhbmRieSBhc3luY2hy b25vdXMgcmVwbGljYXRpb24uIFdoZW4gcnVuIHdpdGggdGhlCisgICA8cmVwbGFjZWFibGU+TFNO PC9yZXBsYWNlYWJsZT4gb3B0aW9uLCB0aGUgPGNvbW1hbmQ+V0FJVCBGT1I8L2NvbW1hbmQ+Cisg ICBjb21tYW5kIHdhaXRzIGZvciB0aGUgc3BlY2lmaWVkIDxhY3JvbnltPkxTTjwvYWNyb255bT4g dG8gYmUgcmVwbGF5ZWQuCisgICBJZiBubyB0aW1lc3RhbXAgb3IgdGltZW91dCB3YXMgc3BlY2lm aWVkLCB3YWl0IHRpbWUgaXMgdW5saW1pdGVkLgorICAgV2FpdGluZyBjYW4gYmUgaW50ZXJydXB0 ZWQgdXNpbmcgPGxpdGVyYWw+Q3RybCtDPC9saXRlcmFsPiwgb3IKKyAgIGJ5IHNodXR0aW5nIGRv d24gdGhlIDxsaXRlcmFsPnBvc3RncmVzPC9saXRlcmFsPiBzZXJ2ZXIuCisgIDwvcGFyYT4KKwor IDwvcmVmc2VjdDE+CisKKyA8cmVmc2VjdDE+CisgIDx0aXRsZT5QYXJhbWV0ZXJzPC90aXRsZT4K KworICA8dmFyaWFibGVsaXN0PgorICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT48cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+TFNOPC9yZXBsYWNlYWJsZT48L3Rlcm0+CisgICAgPGxp c3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFNwZWNpZnkgdGhlIHRhcmdldCBsb2cgc2VxdWVu Y2UgbnVtYmVyIHRvIHdhaXQgZm9yLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAg IDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPlRJTUVPVVQg PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPndhaXRfdGltZW91dDwvcmVwbGFjZWFibGU+ PC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBMaW1pdCB0aGUgdGlt ZSBpbnRlcnZhbCB0byB3YWl0IGZvciB0aGUgTFNOIHRvIGJlIHJlcGxheWVkLgorICAgICAgVGhl IHNwZWNpZmllZCA8cmVwbGFjZWFibGU+d2FpdF90aW1lb3V0PC9yZXBsYWNlYWJsZT4gbXVzdCBi ZSBhbiBpbnRlZ2VyCisgICAgICBhbmQgaXMgbWVhc3VyZWQgaW4gbWlsbGlzZWNvbmRzLgorICAg ICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFy bGlzdGVudHJ5PgorICAgIDx0ZXJtPlVOVElMIFRJTUVTVEFNUCA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+d2FpdF90aW1lPC9yZXBsYWNlYWJsZT48L3Rlcm0+CisgICAgPGxpc3RpdGVt PgorICAgICA8cGFyYT4KKyAgICAgIExpbWl0IHRoZSB0aW1lIHRvIHdhaXQgZm9yIHRoZSBMU04g dG8gYmUgcmVwbGF5ZWQuCisgICAgICBUaGUgc3BlY2lmaWVkIDxyZXBsYWNlYWJsZT53YWl0X3Rp bWU8L3JlcGxhY2VhYmxlPiBtdXN0IGJlIHRpbWVzdGFtcC4KKyAgICAgPC9wYXJhPgorICAgIDwv bGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICA8L3ZhcmlhYmxlbGlzdD4KKyA8L3Jl ZnNlY3QxPgorCisgPHJlZnNlY3QxPgorICA8dGl0bGU+RXhhbXBsZXM8L3RpdGxlPgorCisgIDxw YXJhPgorICAgUnVuIDxsaXRlcmFsPldBSVQgRk9SPC9saXRlcmFsPiBmcm9tIDxhcHBsaWNhdGlv bj5wc3FsPC9hcHBsaWNhdGlvbj4sCisgICBsaW1pdGluZyB3YWl0IHRpbWUgdG8gMTAwMDAgbWls bGlzZWNvbmRzOgorCis8c2NyZWVuPgorV0FJVCBGT1IgTFNOICcwLzNGMDdBNkIxJyBUSU1FT1VU IDEwMDAwOworTk9USUNFOiAgTFNOIGlzIG5vdCByZWFjaGVkLiBUcnkgdG8gaW5jcmVhc2Ugd2Fp dCB0aW1lLgorTFNOIHJlYWNoZWQKKy0tLS0tLS0tLS0tLS0KKyBmCisoMSByb3cpCis8L3NjcmVl bj4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgV2FpdCB1bnRpbCB0aGUgc3BlY2lmaWVkIDxh Y3JvbnltPkxTTjwvYWNyb255bT4gaXMgcmVwbGF5ZWQ6Cis8c2NyZWVuPgorV0FJVCBGT1IgTFNO ICcwLzNGMDdBNjExJzsKK0xTTiByZWFjaGVkCistLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQor PC9zY3JlZW4+CisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIExpbWl0IDxhY3JvbnltPkxTTjwv YWNyb255bT4gd2FpdCB0aW1lIHRvIDUwMDAwMCBtaWxsaXNlY29uZHMsCisgICBhbmQgdGhlbiBj YW5jZWwgdGhlIGNvbW1hbmQgaWYgPGFjcm9ueW0+TFNOPC9hY3JvbnltPiB3YXMgbm90IHJlYWNo ZWQ6Cis8c2NyZWVuPgorV0FJVCBGT1IgTFNOICcwLzNGMEZGNzkxJyBUSU1FT1VUIDUwMDAwMDsK K15DQ2FuY2VsIHJlcXVlc3Qgc2VudAorTk9USUNFOiAgTFNOIGlzIG5vdCByZWFjaGVkLiBUcnkg dG8gaW5jcmVhc2Ugd2FpdCB0aW1lLgorRVJST1I6ICBjYW5jZWxpbmcgc3RhdGVtZW50IGR1ZSB0 byB1c2VyIHJlcXVlc3QKKyBMU04gcmVhY2hlZAorLS0tLS0tLS0tLS0tLQorIGYKKygxIHJvdykK Kzwvc2NyZWVuPgorPC9wYXJhPgorIDwvcmVmc2VjdDE+CisKKyA8cmVmc2VjdDE+CisgIDx0aXRs ZT5Db21wYXRpYmlsaXR5PC90aXRsZT4KKworICA8cGFyYT4KKyAgIFRoZXJlIGlzIG5vIDxjb21t YW5kPldBSVQgRk9SPC9jb21tYW5kPiBzdGF0ZW1lbnQgaW4gdGhlIFNRTAorICAgc3RhbmRhcmQu CisgIDwvcGFyYT4KKyA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KZGlmZiAtLWdpdCBhL2RvYy9z cmMvc2dtbC9yZWZlcmVuY2Uuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWZlcmVuY2Uuc2dtbAppbmRl eCBjZWYwOWRkMzhiMy4uNTg4ZTk2YWExNDMgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWZl cmVuY2Uuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmZXJlbmNlLnNnbWwKQEAgLTIxNSw2ICsy MTUsNyBAQAogICAgJnVwZGF0ZTsKICAgICZ2YWN1dW07CiAgICAmdmFsdWVzOworICAgJndhaXQ7 CiAKICA8L3JlZmVyZW5jZT4KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0veGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCmluZGV4IDk3N2Q0 NDhmNTAyLi5jMGUyYzIxNDFhOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0veGxvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwpAQCAtNDIs NiArNDIsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfZGF0YWJhc2UuaCIKICNpbmNsdWRlICJj b21tYW5kcy9wcm9ncmVzcy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlc3BhY2UuaCIKKyNp bmNsdWRlICJjb21tYW5kcy93YWl0LmgiCiAjaW5jbHVkZSAiY29tbW9uL2NvbnRyb2xkYXRhX3V0 aWxzLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdfdHJhY2UuaCIKQEAg LTczNzYsNiArNzM3NywxNSBAQCBTdGFydHVwWExPRyh2b2lkKQogCQkJCQlicmVhazsKIAkJCQl9 CiAKKwkJCQkvKgorCQkJCSAqIElmIHdlIHJlcGxheWVkIGFuIExTTiB0aGF0IHNvbWVvbmUgd2Fz IHdhaXRpbmcgZm9yLAorCQkJCSAqIHNldCBsYXRjaGVzIGluIHNoYXJlZCBtZW1vcnkgYXJyYXkg dG8gbm90aWZ5IHRoZSB3YWl0ZXIuCisJCQkJICovCisJCQkJaWYgKFhMb2dDdGwtPmxhc3RSZXBs YXllZEVuZFJlY1B0ciA+PSBHZXRNaW5XYWl0KCkpCisJCQkJeworCQkJCQlXYWl0U2V0TGF0Y2go WExvZ0N0bC0+bGFzdFJlcGxheWVkRW5kUmVjUHRyKTsKKwkJCQl9CisKIAkJCQkvKiBFbHNlLCB0 cnkgdG8gZmV0Y2ggdGhlIG5leHQgV0FMIHJlY29yZCAqLwogCQkJCXJlY29yZCA9IFJlYWRSZWNv cmQoeGxvZ3JlYWRlciwgTE9HLCBmYWxzZSk7CiAJCQl9IHdoaWxlIChyZWNvcmQgIT0gTlVMTCk7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZSBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL01ha2VmaWxlCmluZGV4IGQ0ODE1ZDNjZTY1Li45YjMxMDkyNmMxMiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvTWFrZWZpbGUKQEAgLTU3LDYgKzU3LDcgQEAgT0JKUyA9IFwKIAl1c2VyLm8gXAogCXZh Y3V1bS5vIFwKIAl2YXJpYWJsZS5vIFwKLQl2aWV3Lm8KKwl2aWV3Lm8gXAorCXdhaXQubwogCiBp bmNsdWRlICQodG9wX3NyY2Rpcikvc3JjL2JhY2tlbmQvY29tbW9uLm1rCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jb21tYW5kcy93YWl0LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy93YWl0LmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjAxYTkwYTEyYzhhCi0tLSAv ZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvd2FpdC5jCkBAIC0wLDAgKzEsNDAy IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiB3YWl0LmMKKyAqCSAgSW1wbGVtZW50cyBX QUlUIEZPUiwgd2hpY2ggYWxsb3dzIHdhaXRpbmcgZm9yIGV2ZW50cyBzdWNoIGFzCisgKgkgIHRp bWUgcGFzc2luZyBvciBMU04gaGF2aW5nIGJlZW4gcmVwbGF5ZWQgb24gcmVwbGljYS4KKyAqCisg KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2 ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAyMCwgUmVnZW50cyBv ZiBQb3N0Z3Jlc1BybworICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2Nv bW1hbmRzL3dhaXQuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlIDxm bG9hdC5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorI2luY2x1 ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgImZtZ3IuaCIKKyNpbmNsdWRlICJhY2Nlc3MvdHJhbnNh bS5oIgorI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2dkZWZz LmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2cuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUu aCIKKyNpbmNsdWRlICJjb21tYW5kcy93YWl0LmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2lu Y2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgInN0b3JhZ2UvYmFja2VuZGlkLmgiCisjaW5j bHVkZSAic3RvcmFnZS9pcGMuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCisjaW5jbHVk ZSAic3RvcmFnZS9wbXNpZ25hbC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgorI2luY2x1 ZGUgInN0b3JhZ2Uvc2htZW0uaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NwaW4uaCIKKyNpbmNsdWRl ICJzdG9yYWdlL3NpbnZhbGFkdC5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5j bHVkZSAidXRpbHMvcGdfbHNuLmgiCisjaW5jbHVkZSAidXRpbHMvdGltZXN0YW1wLmgiCisjaW5j bHVkZSAiZXhlY3V0b3Ivc3BpLmgiCisjaW5jbHVkZSAidXRpbHMvZm1ncnByb3Rvcy5oIgorCisv KiBBZGQgdG8gLyBkZWxldGUgZnJvbSBzaGFyZWQgbWVtb3J5IGFycmF5ICovCitzdGF0aWMgdm9p ZCBBZGRFdmVudChYTG9nUmVjUHRyIGxzbl90b193YWl0KTsKK3N0YXRpYyB2b2lkIERlbGV0ZUV2 ZW50KHZvaWQpOworCisvKiBTaGFyZWQgbWVtb3J5IHN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1 Y3QKK3sKKwlpbnQJCQliYWNrZW5kX21heGlkOworCVhMb2dSZWNQdHIJbWluX2xzbjsKKwlzbG9j a190CQltdXRleDsKKwlYTG9nUmVjUHRyCXdhaXRlZF9sc25bRkxFWElCTEVfQVJSQVlfTUVNQkVS XTsKK30gV2FpdFN0YXRlOworCitzdGF0aWMgdm9sYXRpbGUgV2FpdFN0YXRlICpzdGF0ZTsKKwor LyogQWRkIHRoZSBldmVudCBvZiB0aGUgY3VycmVudCBiYWNrZW5kIHRvIHRoZSBzaGFyZWQgbWVt b3J5IGFycmF5ICovCitzdGF0aWMgdm9pZAorQWRkRXZlbnQoWExvZ1JlY1B0ciBsc25fdG9fd2Fp dCkKK3sKKwlTcGluTG9ja0FjcXVpcmUoJnN0YXRlLT5tdXRleCk7CisJaWYgKHN0YXRlLT5iYWNr ZW5kX21heGlkIDwgTXlCYWNrZW5kSWQpCisJCXN0YXRlLT5iYWNrZW5kX21heGlkID0gTXlCYWNr ZW5kSWQ7CisKKwlzdGF0ZS0+d2FpdGVkX2xzbltNeUJhY2tlbmRJZF0gPSBsc25fdG9fd2FpdDsK KworCWlmIChsc25fdG9fd2FpdCA8IHN0YXRlLT5taW5fbHNuKQorCQlzdGF0ZS0+bWluX2xzbiA9 IGxzbl90b193YWl0OworCVNwaW5Mb2NrUmVsZWFzZSgmc3RhdGUtPm11dGV4KTsKK30KKworLyoK KyAqIERlbGV0ZSBldmVudCBvZiB0aGUgY3VycmVudCBiYWNrZW5kIGZyb20gdGhlIHNoYXJlZCBt ZW1vcnkgYXJyYXkuCisgKgorICogVE9ETzogQ29uc2lkZXIgc3RhdGUgY2xlYW51cCBvbiBiYWNr ZW5kIGZhaWx1cmUuCisgKi8KK3N0YXRpYyB2b2lkCitEZWxldGVFdmVudCh2b2lkKQoreworCWlu dAkJCWk7CisJWExvZ1JlY1B0cglsc25fdG9fZGVsZXRlID0gc3RhdGUtPndhaXRlZF9sc25bTXlC YWNrZW5kSWRdOworCisJc3RhdGUtPndhaXRlZF9sc25bTXlCYWNrZW5kSWRdID0gSW52YWxpZFhM b2dSZWNQdHI7CisKKwlTcGluTG9ja0FjcXVpcmUoJnN0YXRlLT5tdXRleCk7CisKKwkvKiBJZiB3 ZSBuZWVkIHRvIGNob29zZSB0aGUgbmV4dCBtaW5fbHNuLCB1cGRhdGUgc3RhdGUtPm1pbl9sc24g Ki8KKwlpZiAoc3RhdGUtPm1pbl9sc24gPT0gbHNuX3RvX2RlbGV0ZSkKKwl7CisJCXN0YXRlLT5t aW5fbHNuID0gUEdfVUlOVDY0X01BWDsKKwkJZm9yIChpID0gMjsgaSA8PSBzdGF0ZS0+YmFja2Vu ZF9tYXhpZDsgaSsrKQorCQkJaWYgKHN0YXRlLT53YWl0ZWRfbHNuW2ldICE9IEludmFsaWRYTG9n UmVjUHRyICYmCisJCQkJc3RhdGUtPndhaXRlZF9sc25baV0gPCBzdGF0ZS0+bWluX2xzbikKKwkJ CQlzdGF0ZS0+bWluX2xzbiA9IHN0YXRlLT53YWl0ZWRfbHNuW2ldOworCX0KKworCWlmIChzdGF0 ZS0+YmFja2VuZF9tYXhpZCA9PSBNeUJhY2tlbmRJZCkKKwkJZm9yIChpID0gKE15QmFja2VuZElk KTsgaSA+PSAyOyBpLS0pCisJCQlpZiAoc3RhdGUtPndhaXRlZF9sc25baV0gIT0gSW52YWxpZFhM b2dSZWNQdHIpCisJCQl7CisJCQkJc3RhdGUtPmJhY2tlbmRfbWF4aWQgPSBpOworCQkJCWJyZWFr OworCQkJfQorCisJU3BpbkxvY2tSZWxlYXNlKCZzdGF0ZS0+bXV0ZXgpOworfQorCisvKgorICog UmVwb3J0IGFtb3VudCBvZiBzaGFyZWQgbWVtb3J5IHNwYWNlIG5lZWRlZCBmb3IgV2FpdFN0YXRl CisgKi8KK1NpemUKK1dhaXRTaG1lbVNpemUodm9pZCkKK3sKKwlTaXplCQlzaXplOworCisJc2l6 ZSA9IG9mZnNldG9mKFdhaXRTdGF0ZSwgd2FpdGVkX2xzbik7CisJc2l6ZSA9IGFkZF9zaXplKHNp emUsIG11bF9zaXplKE1heEJhY2tlbmRzICsgMSwgc2l6ZW9mKFhMb2dSZWNQdHIpKSk7CisJcmV0 dXJuIHNpemU7Cit9CisKKy8qIEluaXQgYXJyYXkgb2YgZXZlbnRzIGluIHNoYXJlZCBtZW1vcnkg Ki8KK3ZvaWQKK1dhaXRTaG1lbUluaXQodm9pZCkKK3sKKwlib29sCQlmb3VuZDsKKwl1aW50MzIJ CWk7CisKKwlzdGF0ZSA9IChXYWl0U3RhdGUgKikgU2htZW1Jbml0U3RydWN0KCJwZ193YWl0X2xz biIsCisJCQkJCQkJCQkJICBXYWl0U2htZW1TaXplKCksCisJCQkJCQkJCQkJICAmZm91bmQpOwor CWlmICghZm91bmQpCisJeworCQlTcGluTG9ja0luaXQoJnN0YXRlLT5tdXRleCk7CisKKwkJZm9y IChpID0gMDsgaSA8IChNYXhCYWNrZW5kcyArIDEpOyBpKyspCisJCQlzdGF0ZS0+d2FpdGVkX2xz bltpXSA9IEludmFsaWRYTG9nUmVjUHRyOworCisJCXN0YXRlLT5iYWNrZW5kX21heGlkID0gMDsK KwkJc3RhdGUtPm1pbl9sc24gPSBQR19VSU5UNjRfTUFYOworCX0KK30KKworLyogU2V0IGFsbCBs YXRjaGVzIGluIHNoYXJlZCBtZW1vcnkgdG8gc2lnbmFsIHRoYXQgbmV3IExTTiBoYXMgYmVlbiBy ZXBsYXllZCAqLwordm9pZAorV2FpdFNldExhdGNoKFhMb2dSZWNQdHIgY3VyX2xzbikKK3sKKwl1 aW50MzIJCWk7CisJaW50IAkJYmFja2VuZF9tYXhpZDsKKwlQR1BST0MJICAgKmJhY2tlbmQ7CisK KwlTcGluTG9ja0FjcXVpcmUoJnN0YXRlLT5tdXRleCk7CisJYmFja2VuZF9tYXhpZCA9IHN0YXRl LT5iYWNrZW5kX21heGlkOworCVNwaW5Mb2NrUmVsZWFzZSgmc3RhdGUtPm11dGV4KTsKKworCWZv ciAoaSA9IDI7IGkgPD0gYmFja2VuZF9tYXhpZDsgaSsrKQorCXsKKwkJYmFja2VuZCA9IEJhY2tl bmRJZEdldFByb2MoaSk7CisJCWlmIChzdGF0ZS0+d2FpdGVkX2xzbltpXSAhPSAwKQorCQl7CisJ CQlpZiAoYmFja2VuZCAmJiBzdGF0ZS0+d2FpdGVkX2xzbltpXSA8PSBjdXJfbHNuKQorCQkJCVNl dExhdGNoKCZiYWNrZW5kLT5wcm9jTGF0Y2gpOworCQl9CisJfQorfQorCisvKiBHZXQgbWluaW1h bCBMU04gdGhhdCB3aWxsIGJlIG5leHQgKi8KK1hMb2dSZWNQdHIKK0dldE1pbldhaXQodm9pZCkK K3sKKwlyZXR1cm4gc3RhdGUtPm1pbl9sc247Cit9CisKKy8qCisgKiBPbiBXQUlUIHVzZSBNeUxh dGNoIHRvIHdhaXQgdGlsbCBMU04gaXMgcmVwbGF5ZWQsCisgKiBwb3N0bWFzdGVyIGRpZXMgb3Ig dGltZW91dCBoYXBwZW5zLgorICovCitpbnQKK1dhaXRVdGlsaXR5KFhMb2dSZWNQdHIgbHNuLCBj b25zdCBmbG9hdDggc2VjcywgRGVzdFJlY2VpdmVyICpkZXN0KQoreworCVhMb2dSZWNQdHIJY3Vy X2xzbiA9IEdldFhMb2dSZXBsYXlSZWNQdHIoTlVMTCk7CisJaW50CQkJbGF0Y2hfZXZlbnRzOwor CWZsb2F0OAkJZW5kdGltZTsKKwlUdXBPdXRwdXRTdGF0ZSAqdHN0YXRlOworCVR1cGxlRGVzYwl0 dXBkZXNjOworCWNoYXIJICAgKnZhbHVlID0gImYiOworCisJbGF0Y2hfZXZlbnRzID0gV0xfTEFU Q0hfU0VUIHwgV0xfVElNRU9VVCB8IFdMX0VYSVRfT05fUE1fREVBVEg7CisKKwlpZiAobHNuICE9 IEludmFsaWRYTG9nUmVjUHRyKQorCQlBZGRFdmVudChsc24pOworCisjZGVmaW5lIEdldE5vd0Zs b2F0KCkJKChmbG9hdDgpIEdldEN1cnJlbnRUaW1lc3RhbXAoKSAvIDEwMDAwMDAuMCkKKwllbmR0 aW1lID0gR2V0Tm93RmxvYXQoKSArIHNlY3M7CisKKwlmb3IgKDs7KQorCXsKKwkJaW50CQkJcmM7 CisJCWZsb2F0OAkJZGVsYXkgPSAwOworCQlsb25nCQlkZWxheV9tczsKKworCQlpZiAoc2VjcyA+ IDApCisJCQlkZWxheSA9IGVuZHRpbWUgLSBHZXROb3dGbG9hdCgpOworCQllbHNlIGlmIChzZWNz ID09IDApIC8qIDEgbWludXRlIHRpbWVvdXQgdG8gY2hlY2sgZm9yIEludGVydXB0cyAqLworCQkJ ZGVsYXkgPSAxMDsKKwkJZWxzZQorCQkJZGVsYXkgPSAxOworCisJCWlmIChkZWxheSA+IDAuMCkK KwkJCWRlbGF5X21zID0gKGxvbmcpIGNlaWwoZGVsYXkgKiAxMDAwLjApOworCQllbHNlCisJCQli cmVhazsKKworCQkvKgorCQkgKiBJZiByZWNlaXZlZCBhbiBpbnRlcnJ1cHRpb24gZnJvbSBDSEVD S19GT1JfSU5URVJSVVBUUywKKwkJICogdGhlbiBkZWxldGUgdGhlIGN1cnJlbnQgZXZlbnQgZnJv bSBhcnJheS4KKwkJICovCisJCWlmIChJbnRlcnJ1cHRQZW5kaW5nKQorCQl7CisJCQlpZiAobHNu ICE9IEludmFsaWRYTG9nUmVjUHRyKQorCQkJCURlbGV0ZUV2ZW50KCk7CisJCQlQcm9jZXNzSW50 ZXJydXB0cygpOworCQl9CisKKwkJaWYgKGxzbiAhPSBJbnZhbGlkWExvZ1JlY1B0ciAmJiByYyAm IFdMX0xBVENIX1NFVCkKKwkJCWN1cl9sc24gPSBHZXRYTG9nUmVwbGF5UmVjUHRyKE5VTEwpOwor CisJCS8qIElmIExTTiBoYXMgYmVlbiByZXBsYXllZCAqLworCQlpZiAobHNuICE9IEludmFsaWRY TG9nUmVjUHRyICYmIGxzbiA8PSBjdXJfbHNuKQorCQkJYnJlYWs7CisKKwkJLyogSWYgcG9zdG1h c3RlciBkaWVzLCBmaW5pc2ggaW1tZWRpYXRlbHkgKi8KKwkJaWYgKCFQb3N0bWFzdGVySXNBbGl2 ZSgpKQorCQkJYnJlYWs7CisKKwkJLyogQSBsaXR0bGUgaGFjayBzaW1pbGFyIHRvIFNuYXBzaG90 UmVzZXRYbWluIHRvIHdvcmsgb3V0IG9mIHNuYXBzaG90ICovCisJCU15UGdYYWN0LT54bWluID0g SW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJCXJjID0gV2FpdExhdGNoKE15TGF0Y2gsIGxhdGNoX2V2 ZW50cywgZGVsYXlfbXMsCisJCQkJCSAgIFdBSVRfRVZFTlRfQ0xJRU5UX1JFQUQpOworCisJCWlm IChyYyAmIFdMX0xBVENIX1NFVCkKKwkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJfQorCisJRGVs ZXRlRXZlbnQoKTsKKworCWlmIChsc24gIT0gSW52YWxpZFhMb2dSZWNQdHIgJiYgbHNuID4gY3Vy X2xzbikKKwkJZWxvZyhOT1RJQ0UsIkxTTiBpcyBub3QgcmVhY2hlZC4gVHJ5IHRvIGluY3JlYXNl IHdhaXQgdGltZS4iKTsKKwllbHNlCisJCXZhbHVlID0gInQiOworCisJLyogTmVlZCBhIHR1cGxl IGRlc2NyaXB0b3IgcmVwcmVzZW50aW5nIGEgc2luZ2xlIFRFWFQgY29sdW1uICovCisJdHVwZGVz YyA9IENyZWF0ZVRlbXBsYXRlVHVwbGVEZXNjKDEpOworCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBk ZXNjLCAoQXR0ck51bWJlcikgMSwgIkxTTiByZWFjaGVkIiwgVEVYVE9JRCwgLTEsIDApOworCS8q IFByZXBhcmUgZm9yIHByb2plY3Rpb24gb2YgdHVwbGVzICovCisJdHN0YXRlID0gYmVnaW5fdHVw X291dHB1dF90dXBkZXNjKGRlc3QsIHR1cGRlc2MsICZUVFNPcHNNaW5pbWFsVHVwbGUpOworCisJ LyogU2VuZCBpdCAqLworCWRvX3RleHRfb3V0cHV0X29uZWxpbmUodHN0YXRlLCB2YWx1ZSk7CisJ ZW5kX3R1cF9vdXRwdXQodHN0YXRlKTsKKwlyZXR1cm4gc3RyY21wKHZhbHVlLCJ0Iik7Cit9CisK K3ZvaWQKK1dhaXRUaW1lVXRpbGl0eShmbG9hdDggZGVsYXkpCit7CisJaW50CQkJbGF0Y2hfZXZl bnRzOworCisJaWYgKGRlbGF5IDw9IDApCisJCXJldHVybjsKKworCWxhdGNoX2V2ZW50cyA9IFdM X1RJTUVPVVQgfCBXTF9QT1NUTUFTVEVSX0RFQVRIOworCisJTXlQZ1hhY3QtPnhtaW4gPSBJbnZh bGlkVHJhbnNhY3Rpb25JZDsKKwlXYWl0TGF0Y2goTXlMYXRjaCwgbGF0Y2hfZXZlbnRzLCAobG9u ZykgY2VpbChkZWxheSAqIDEwMDAuMCksCisJCQkgIFdBSVRfRVZFTlRfQ0xJRU5UX1JFQUQpOwor CVJlc2V0TGF0Y2goTXlMYXRjaCk7Cit9CisKKy8qCisgKiBHZXQgdGhlIGFtb3VudCBvZiBzZWNv bmRzIGxlZnQgdGlsbCB0aGUgc3BlY2lmaWVkIHRpbWUuCisgKi8KK2Zsb2F0OAorV2FpdFRpbWVS ZXNvbHZlKENvbnN0ICp0aW1lKQoreworCWludAkJCXJldDsKKwlmbG9hdDgJCXZhbDsKKwlPaWQJ CQl0eXBlc1tdID0geyB0aW1lLT5jb25zdHR5cGUgfTsKKwlEYXR1bQkJdmFsdWVzW10gPSB7IHRp bWUtPmNvbnN0dmFsdWUgfTsKKwljaGFyCQludWxsc1tdID0geyAiICIgfTsKKwlEYXR1bQkJcmVz dWx0OworCWJvb2wJCWlzbnVsbDsKKworCVNQSV9jb25uZWN0KCk7CisKKwlpZiAodGltZS0+Y29u c3R0eXBlID09IDEwODMpCisJCXJldCA9IFNQSV9leGVjdXRlX3dpdGhfYXJncygic2VsZWN0IGV4 dHJhY3QgKGVwb2NoIGZyb20gKCQxIC0gbm93KCk6OnRpbWUpKSIsCisJCQkJCQkJCQkxLCB0eXBl cywgdmFsdWVzLCBudWxscywgdHJ1ZSwgMCk7CisJZWxzZSBpZiAodGltZS0+Y29uc3R0eXBlID09 IDEyNjYpCisJCXJldCA9IFNQSV9leGVjdXRlX3dpdGhfYXJncygic2VsZWN0IGV4dHJhY3QgKGVw b2NoIGZyb20gKHRpbWV6b25lKCdVVEMnLCQxKTo6dGltZSAtIHRpbWV6b25lKCdVVEMnLCBub3co KTo6dGltZXR6KTo6dGltZSkpIiwKKwkJCQkJCQkJCTEsIHR5cGVzLCB2YWx1ZXMsIG51bGxzLCB0 cnVlLCAwKTsKKwllbHNlCisJCXJldCA9IFNQSV9leGVjdXRlX3dpdGhfYXJncygic2VsZWN0IGV4 dHJhY3QgKGVwb2NoIGZyb20gKCQxIC0gbm93KCkpKSIsCisJCQkJCQkJCQkxLCB0eXBlcywgdmFs dWVzLCBudWxscywgdHJ1ZSwgMCk7CisKKwlBc3NlcnQocmV0ID49IDApOworCXJlc3VsdCA9IFNQ SV9nZXRiaW52YWwoU1BJX3R1cHRhYmxlLT52YWxzWzBdLAorCQkJCQkJICAgU1BJX3R1cHRhYmxl LT50dXBkZXNjLAorCQkJCQkJICAgMSwgJmlzbnVsbCk7CisKKwlBc3NlcnQoIWlzbnVsbCk7CisJ dmFsID0gRGF0dW1HZXRGbG9hdDgocmVzdWx0KTsKKworCWVsb2coSU5GTywgInRpbWU6ICVmIiwg dmFsKTsKKworCVNQSV9maW5pc2goKTsKKwlyZXR1cm4gdmFsOworfQorCisvKiBJbXBsZW1lbnRh dGlvbiBvZiBXQUlUIEZPUiAqLworaW50CitXYWl0TWFpbihXYWl0U3RtdCAqc3RtdCwgRGVzdFJl Y2VpdmVyICpkZXN0KQoreworCUxpc3RDZWxsICAgKmV2ZW50czsKKwlmbG9hdDgJCWRlbGF5ID0g MDsKKwlmbG9hdDgJCWZpbmFsX2RlbGF5ID0gMDsKKwlYTG9nUmVjUHRyCWxzbiA9IEludmFsaWRY TG9nUmVjUHRyOworCVhMb2dSZWNQdHIJZmluYWxfbHNuID0gSW52YWxpZFhMb2dSZWNQdHI7CisJ Ym9vbAkJaGFzX2xzbiA9IGZhbHNlOworCWJvb2wJCXdhaXRfZm9yZXZlciA9IHRydWU7CisJaW50 CQkJcmVzID0gMTsKKworCWlmIChzdG10LT5zdHJhdGVneSA9PSBXQUlUX0ZPUl9BTlkpCisJewor CQkvKiBQcmVwYXJlIHRvIGZpbmQgbWluaW11bSBMU04gYW5kIGRlbGF5ICovCisJCWZpbmFsX2Rl bGF5ID0gREJMX01BWDsKKwkJZmluYWxfbHNuID0gUEdfVUlOVDY0X01BWDsKKwl9CisKKwkvKiBF eHRyYWN0IG9wdGlvbnMgZnJvbSB0aGUgc3RhdGVtZW50IG5vZGUgdHJlZSAqLworCWZvcmVhY2go ZXZlbnRzLCBzdG10LT5ldmVudHMpCisJeworCQlXYWl0U3RtdCAgICpldmVudCA9IChXYWl0U3Rt dCAqKSBsZmlyc3QoZXZlbnRzKTsKKworCQkvKiBMU04gdG8gd2FpdCBmb3IgKi8KKwkJaWYgKGV2 ZW50LT5sc24pCisJCXsKKwkJCWhhc19sc24gPSB0cnVlOworCQkJbHNuID0gRGF0dW1HZXRMU04o CisJCQkJCQlEaXJlY3RGdW5jdGlvbkNhbGwxKHBnX2xzbl9pbiwKKwkJCQkJCQlDU3RyaW5nR2V0 RGF0dW0oZXZlbnQtPmxzbikpKTsKKworCQkJLyoKKwkJCSAqIFdoZW4gd2FpdGluZyBmb3IgQUxM LCBzZWxlY3QgbWF4IExTTiB0byB3YWl0IGZvci4KKwkJCSAqIFdoZW4gd2FpdGluZyBmb3IgQU5Z LCBzZWxlY3QgbWluIExTTiB0byB3YWl0IGZvci4KKwkJCSAqLworCQkJaWYgKChzdG10LT5zdHJh dGVneSA9PSBXQUlUX0ZPUl9BTEwgJiYgZmluYWxfbHNuIDw9IGxzbikgfHwKKwkJCQkoc3RtdC0+ c3RyYXRlZ3kgPT0gV0FJVF9GT1JfQU5ZICYmIGZpbmFsX2xzbiA+IGxzbikpCisJCQl7CisJCQkJ ZmluYWxfbHNuID0gbHNuOworCQkJfQorCQl9CisKKwkJLyogVGltZSBkZWxheSB0byB3YWl0IGZv ciAqLworCQlpZiAoZXZlbnQtPnRpbWUgfHwgZXZlbnQtPmRlbGF5KQorCQl7CisJCQl3YWl0X2Zv cmV2ZXIgPSBmYWxzZTsKKworCQkJaWYgKGV2ZW50LT5kZWxheSkKKwkJCQlkZWxheSA9IGV2ZW50 LT5kZWxheSAvIDEwMDAuMDsKKworCQkJaWYgKGV2ZW50LT50aW1lKQorCQkJeworCQkJCUNvbnN0 ICp0aW1lID0gKENvbnN0ICopIGV2ZW50LT50aW1lOworCQkJCWRlbGF5ID0gV2FpdFRpbWVSZXNv bHZlKHRpbWUpOworCQkJfQorCisJCQlpZiAoZGVsYXkgPCAwKQorCQkJCWRlbGF5ID0gMDsKKwor CQkJLyoKKwkJCSAqIFdoZW4gd2FpdGluZyBmb3IgQUxMLCBzZWxlY3QgbWF4IGRlbGF5IHRvIHdh aXQgZm9yLgorCQkJICogV2hlbiB3YWl0aW5nIGZvciBBTlksIHNlbGVjdCBtaW4gZGVsYXkgdG8g d2FpdCBmb3IuCisJCQkgKi8KKwkJCWlmICgoc3RtdC0+c3RyYXRlZ3kgPT0gV0FJVF9GT1JfQUxM ICYmIGZpbmFsX2RlbGF5IDw9IGRlbGF5KSB8fAorCQkJCShzdG10LT5zdHJhdGVneSA9PSBXQUlU X0ZPUl9BTlkgJiYgZmluYWxfZGVsYXkgPiBkZWxheSkpCisJCQl7CisJCQkJZmluYWxfZGVsYXkg PSBkZWxheTsKKwkJCX0KKwkJfQorCX0KKworCWlmICghaGFzX2xzbikKKwl7CisJCVdhaXRUaW1l VXRpbGl0eShmaW5hbF9kZWxheSk7CisJCXJlcyA9IDA7CisJfQorCWVsc2UKKwkJcmVzID0gV2Fp dFV0aWxpdHkoZmluYWxfbHNuLCB3YWl0X2ZvcmV2ZXIgPyAwIDogZmluYWxfZGVsYXksIGRlc3Qp OworCisJcmV0dXJuIHJlczsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1 bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCmluZGV4IGViMTY4ZmZkNmRhLi44 MzBiZGJiNmFiMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYworKysg Yi9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCkBAIC0yNzYwLDYgKzI3NjAsMTggQEAgX291 dERlZkVsZW0oU3RyaW5nSW5mbyBzdHIsIGNvbnN0IERlZkVsZW0gKm5vZGUpCiAJV1JJVEVfTE9D QVRJT05fRklFTEQobG9jYXRpb24pOwogfQogCitzdGF0aWMgdm9pZAorX291dFdhaXRTdG10KFN0 cmluZ0luZm8gc3RyLCBjb25zdCBXYWl0U3RtdCAqbm9kZSkKK3sKKwlXUklURV9OT0RFX1RZUEUo IldBSVRTVE1UIik7CisKKwlXUklURV9TVFJJTkdfRklFTEQobHNuKTsKKwlXUklURV9JTlRfRklF TEQoZGVsYXkpOworCVdSSVRFX05PREVfRklFTEQoZXZlbnRzKTsKKwlXUklURV9OT0RFX0ZJRUxE KHRpbWUpOworCVdSSVRFX0VOVU1fRklFTEQoc3RyYXRlZ3ksIFdhaXRGb3JTdHJhdGVneSk7Cit9 CisKIHN0YXRpYyB2b2lkCiBfb3V0VGFibGVMaWtlQ2xhdXNlKFN0cmluZ0luZm8gc3RyLCBjb25z dCBUYWJsZUxpa2VDbGF1c2UgKm5vZGUpCiB7CkBAIC00MzA2LDYgKzQzMTgsOSBAQCBvdXROb2Rl KFN0cmluZ0luZm8gc3RyLCBjb25zdCB2b2lkICpvYmopCiAJCQljYXNlIFRfUGFydGl0aW9uUmFu Z2VEYXR1bToKIAkJCQlfb3V0UGFydGl0aW9uUmFuZ2VEYXR1bShzdHIsIG9iaik7CiAJCQkJYnJl YWs7CisJCQljYXNlIFRfV2FpdFN0bXQ6CisJCQkJX291dFdhaXRTdG10KHN0ciwgb2JqKTsKKwkJ CQlicmVhazsKIAogCQkJZGVmYXVsdDoKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2Vy L2FuYWx5emUuYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9hbmFseXplLmMKaW5kZXggNjY3NjQxMjg0 MmIuLjA4ZTI2NDliOWRmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvYW5hbHl6ZS5j CisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9hbmFseXplLmMKQEAgLTc4LDYgKzc4LDcgQEAgc3Rh dGljIFF1ZXJ5ICp0cmFuc2Zvcm1DcmVhdGVUYWJsZUFzU3RtdChQYXJzZVN0YXRlICpwc3RhdGUs CiAJCQkJCQkJCQkJIENyZWF0ZVRhYmxlQXNTdG10ICpzdG10KTsKIHN0YXRpYyBRdWVyeSAqdHJh bnNmb3JtQ2FsbFN0bXQoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJCQlDYWxsU3RtdCAqc3Rt dCk7CitzdGF0aWMgdm9pZCB0cmFuc2Zvcm1XYWl0Rm9yU3RtdChQYXJzZVN0YXRlICpwc3RhdGUs IFdhaXRTdG10ICpzdG10KTsKIHN0YXRpYyB2b2lkIHRyYW5zZm9ybUxvY2tpbmdDbGF1c2UoUGFy c2VTdGF0ZSAqcHN0YXRlLCBRdWVyeSAqcXJ5LAogCQkJCQkJCQkgICBMb2NraW5nQ2xhdXNlICps YywgYm9vbCBwdXNoZWREb3duKTsKICNpZmRlZiBSQVdfRVhQUkVTU0lPTl9DT1ZFUkFHRV9URVNU CkBAIC0zMjYsNyArMzI3LDIwIEBAIHRyYW5zZm9ybVN0bXQoUGFyc2VTdGF0ZSAqcHN0YXRlLCBO b2RlICpwYXJzZVRyZWUpCiAJCQlyZXN1bHQgPSB0cmFuc2Zvcm1DYWxsU3RtdChwc3RhdGUsCiAJ CQkJCQkJCQkgICAoQ2FsbFN0bXQgKikgcGFyc2VUcmVlKTsKIAkJCWJyZWFrOwotCisJCWNhc2Ug VF9XYWl0U3RtdDoKKwkJCXRyYW5zZm9ybVdhaXRGb3JTdG10KHBzdGF0ZSwgKFdhaXRTdG10ICop IHBhcnNlVHJlZSk7CisJCQlyZXN1bHQgPSBtYWtlTm9kZShRdWVyeSk7CisJCQlyZXN1bHQtPmNv bW1hbmRUeXBlID0gQ01EX1VUSUxJVFk7CisJCQlyZXN1bHQtPnV0aWxpdHlTdG10ID0gKE5vZGUg KikgcGFyc2VUcmVlOworCQkJYnJlYWs7CisJCWNhc2UgVF9UcmFuc2FjdGlvblN0bXQ6CisJCQl7 CisJCQkJVHJhbnNhY3Rpb25TdG10ICpzdG10ID0gKFRyYW5zYWN0aW9uU3RtdCAqKSBwYXJzZVRy ZWU7CisJCQkJaWYgKChzdG10LT5raW5kID09IFRSQU5TX1NUTVRfQkVHSU4gfHwKKwkJCQkJCXN0 bXQtPmtpbmQgPT0gVFJBTlNfU1RNVF9TVEFSVCkgJiYgc3RtdC0+d2FpdCkKKwkJCQkJdHJhbnNm b3JtV2FpdEZvclN0bXQocHN0YXRlLCAoV2FpdFN0bXQgKikgc3RtdC0+d2FpdCk7CisJCQl9CisJ CQkvKiBubyBicmVhayBoZXJlIC0gd2Ugd2FudCB0byBmYWxsIHRocm91Z2ggdG8gdGhlIGRlZmF1 bHQgKi8KIAkJZGVmYXVsdDoKIAogCQkJLyoKQEAgLTI5ODEsNiArMjk5NSwyMyBAQCBhcHBseUxv Y2tpbmdDbGF1c2UoUXVlcnkgKnFyeSwgSW5kZXggcnRpbmRleCwKIAlxcnktPnJvd01hcmtzID0g bGFwcGVuZChxcnktPnJvd01hcmtzLCByYyk7CiB9CiAKKy8qCisgKiB0cmFuc2Zvcm1XYWl0Rm9y U3RtdCAtCisgKgl0cmFuc2Zvcm0gdGhlIFdBSVQgRk9SIGNsYXVzZSBvZiB0aGUgQkVHSU4gc3Rh dGVtZW50CisgKgl0cmFuc2Zvcm0gdGhlIFdBSVQgRk9SIHN0YXRlbWVudCAoVE9ETzogcmVtb3Zl IHRoaXMgbGluZSBpZiB3ZSBkb24ndCBrZWVwIGl0KQorICovCitzdGF0aWMgdm9pZAordHJhbnNm b3JtV2FpdEZvclN0bXQoUGFyc2VTdGF0ZSAqcHN0YXRlLCBXYWl0U3RtdCAqc3RtdCkKK3sKKwlM aXN0Q2VsbCAgICpldmVudHM7CisKKwlmb3JlYWNoKGV2ZW50cywgc3RtdC0+ZXZlbnRzKQorCXsK KwkJV2FpdFN0bXQgICAqZXZlbnQgPSAoV2FpdFN0bXQgKikgbGZpcnN0KGV2ZW50cyk7CisJCWV2 ZW50LT50aW1lID0gdHJhbnNmb3JtRXhwcihwc3RhdGUsIGV2ZW50LT50aW1lLCBFWFBSX0tJTkRf T1RIRVIpOworCX0KK30KKwogLyoKICAqIENvdmVyYWdlIHRlc3RpbmcgZm9yIHJhd19leHByZXNz aW9uX3RyZWVfd2Fsa2VyKCkuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dy YW0ueSBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKaW5kZXggZWIwYmYxMmNkOGIuLjRjZTMx NWY5NWQ5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CisrKyBiL3NyYy9i YWNrZW5kL3BhcnNlci9ncmFtLnkKQEAgLTI3Niw3ICsyNzYsNyBAQCBzdGF0aWMgTm9kZSAqbWFr ZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAq cXVlcnkpOwogCQlTZWNMYWJlbFN0bXQgU2VsZWN0U3RtdCBUcmFuc2FjdGlvblN0bXQgVHJ1bmNh dGVTdG10CiAJCVVubGlzdGVuU3RtdCBVcGRhdGVTdG10IFZhY3V1bVN0bXQKIAkJVmFyaWFibGVS ZXNldFN0bXQgVmFyaWFibGVTZXRTdG10IFZhcmlhYmxlU2hvd1N0bXQKLQkJVmlld1N0bXQgQ2hl Y2tQb2ludFN0bXQgQ3JlYXRlQ29udmVyc2lvblN0bXQKKwkJVmlld1N0bXQgV2FpdFN0bXQgQ2hl Y2tQb2ludFN0bXQgQ3JlYXRlQ29udmVyc2lvblN0bXQKIAkJRGVhbGxvY2F0ZVN0bXQgUHJlcGFy ZVN0bXQgRXhlY3V0ZVN0bXQKIAkJRHJvcE93bmVkU3RtdCBSZWFzc2lnbk93bmVkU3RtdAogCQlB bHRlclRTQ29uZmlndXJhdGlvblN0bXQgQWx0ZXJUU0RpY3Rpb25hcnlTdG10CkBAIC00ODcsNyAr NDg3LDcgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5h bWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKICV0eXBlIDxsaXN0Pglyb3cgZXhwbGlj aXRfcm93IGltcGxpY2l0X3JvdyB0eXBlX2xpc3QgYXJyYXlfZXhwcl9saXN0CiAldHlwZSA8bm9k ZT4JY2FzZV9leHByIGNhc2VfYXJnIHdoZW5fY2xhdXNlIGNhc2VfZGVmYXVsdAogJXR5cGUgPGxp c3Q+CXdoZW5fY2xhdXNlX2xpc3QKLSV0eXBlIDxpdmFsPglzdWJfdHlwZSBvcHRfbWF0ZXJpYWxp emVkCisldHlwZSA8aXZhbD4Jc3ViX3R5cGUgd2FpdF9zdHJhdGVneSBvcHRfbWF0ZXJpYWxpemVk CiAldHlwZSA8dmFsdWU+CU51bWVyaWNPbmx5CiAldHlwZSA8bGlzdD4JTnVtZXJpY09ubHlfbGlz dAogJXR5cGUgPGFsaWFzPglhbGlhc19jbGF1c2Ugb3B0X2FsaWFzX2NsYXVzZQpAQCAtNTkxLDYg KzU5MSw4IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxu YW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAldHlwZSA8cGFydGJvdW5kc3BlYz4g UGFydGl0aW9uQm91bmRTcGVjCiAldHlwZSA8bGlzdD4JCWhhc2hfcGFydGJvdW5kCiAldHlwZSA8 ZGVmZWx0PgkJaGFzaF9wYXJ0Ym91bmRfZWxlbQorJXR5cGUgPGxpc3Q+CQl3YWl0X2xpc3QKKyV0 eXBlIDxub2RlPgkJV2FpdEV2ZW50IHdhaXRfZm9yCiAKIC8qCiAgKiBOb24ta2V5d29yZCB0b2tl biB0eXBlcy4gIFRoZXNlIGFyZSBoYXJkLXdpcmVkIGludG8gdGhlICJmbGV4IiBsZXhlci4KQEAg LTY2MCw3ICs2NjIsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hh ciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCiAJTEFCRUwgTEFOR1VB R0UgTEFSR0VfUCBMQVNUX1AgTEFURVJBTF9QCiAJTEVBRElORyBMRUFLUFJPT0YgTEVBU1QgTEVG VCBMRVZFTCBMSUtFIExJTUlUIExJU1RFTiBMT0FEIExPQ0FMCi0JTE9DQUxUSU1FIExPQ0FMVElN RVNUQU1QIExPQ0FUSU9OIExPQ0tfUCBMT0NLRUQgTE9HR0VECisJTE9DQUxUSU1FIExPQ0FMVElN RVNUQU1QIExPQ0FUSU9OIExPQ0tfUCBMT0NLRUQgTE9HR0VEIExTTgogCiAJTUFQUElORyBNQVRD SCBNQVRFUklBTElaRUQgTUFYVkFMVUUgTUVUSE9EIE1JTlVURV9QIE1JTlZBTFVFIE1PREUgTU9O VEhfUCBNT1ZFCiAKQEAgLTY5MCw3ICs2OTIsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2 ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwog CVNVQlNDUklQVElPTiBTVUJTVFJJTkcgU1VQUE9SVCBTWU1NRVRSSUMgU1lTSUQgU1lTVEVNX1AK IAogCVRBQkxFIFRBQkxFUyBUQUJMRVNBTVBMRSBUQUJMRVNQQUNFIFRFTVAgVEVNUExBVEUgVEVN UE9SQVJZIFRFWFRfUCBUSEVOCi0JVElFUyBUSU1FIFRJTUVTVEFNUCBUTyBUUkFJTElORyBUUkFO U0FDVElPTiBUUkFOU0ZPUk0KKwlUSUVTIFRJTUUgVElNRU9VVCBUSU1FU1RBTVAgVE8gVFJBSUxJ TkcgVFJBTlNBQ1RJT04gVFJBTlNGT1JNCiAJVFJFQVQgVFJJR0dFUiBUUklNIFRSVUVfUAogCVRS VU5DQVRFIFRSVVNURUQgVFlQRV9QIFRZUEVTX1AKIApAQCAtNzAwLDcgKzcwMiw4IEBAIHN0YXRp YyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlh c2VzLCBOb2RlICpxdWVyeSk7CiAJVkFDVVVNIFZBTElEIFZBTElEQVRFIFZBTElEQVRPUiBWQUxV RV9QIFZBTFVFUyBWQVJDSEFSIFZBUklBRElDIFZBUllJTkcKIAlWRVJCT1NFIFZFUlNJT05fUCBW SUVXIFZJRVdTIFZPTEFUSUxFCiAKLQlXSEVOIFdIRVJFIFdISVRFU1BBQ0VfUCBXSU5ET1cgV0lU SCBXSVRISU4gV0lUSE9VVCBXT1JLIFdSQVBQRVIgV1JJVEUKKwlXQUlUIFdIRU4gV0hFUkUgV0hJ VEVTUEFDRV9QIFdJTkRPVworCVdJVEggV0lUSElOIFdJVEhPVVQgV09SSyBXUkFQUEVSIFdSSVRF CiAKIAlYTUxfUCBYTUxBVFRSSUJVVEVTIFhNTENPTkNBVCBYTUxFTEVNRU5UIFhNTEVYSVNUUyBY TUxGT1JFU1QgWE1MTkFNRVNQQUNFUwogCVhNTFBBUlNFIFhNTFBJIFhNTFJPT1QgWE1MU0VSSUFM SVpFIFhNTFRBQkxFCkBAIC05NTQsNiArOTU3LDcgQEAgc3RtdCA6CiAJCQl8IFZhcmlhYmxlU2V0 U3RtdAogCQkJfCBWYXJpYWJsZVNob3dTdG10CiAJCQl8IFZpZXdTdG10CisJCQl8IFdhaXRTdG10 CiAJCQl8IC8qRU1QVFkqLwogCQkJCXsgJCQgPSBOVUxMOyB9CiAJCTsKQEAgLTk5NDAsMTggKzk5 NDQsMjAgQEAgVHJhbnNhY3Rpb25TdG10OgogCQkJCQluLT5jaGFpbiA9ICQzOwogCQkJCQkkJCA9 IChOb2RlICopbjsKIAkJCQl9Ci0JCQl8IEJFR0lOX1Agb3B0X3RyYW5zYWN0aW9uIHRyYW5zYWN0 aW9uX21vZGVfbGlzdF9vcl9lbXB0eQorCQkJfCBCRUdJTl9QIG9wdF90cmFuc2FjdGlvbiB0cmFu c2FjdGlvbl9tb2RlX2xpc3Rfb3JfZW1wdHkgd2FpdF9mb3IKIAkJCQl7CiAJCQkJCVRyYW5zYWN0 aW9uU3RtdCAqbiA9IG1ha2VOb2RlKFRyYW5zYWN0aW9uU3RtdCk7CiAJCQkJCW4tPmtpbmQgPSBU UkFOU19TVE1UX0JFR0lOOwogCQkJCQluLT5vcHRpb25zID0gJDM7CisJCQkJCW4tPndhaXQgPSAk NDsKIAkJCQkJJCQgPSAoTm9kZSAqKW47CiAJCQkJfQotCQkJfCBTVEFSVCBUUkFOU0FDVElPTiB0 cmFuc2FjdGlvbl9tb2RlX2xpc3Rfb3JfZW1wdHkKKwkJCXwgU1RBUlQgVFJBTlNBQ1RJT04gdHJh bnNhY3Rpb25fbW9kZV9saXN0X29yX2VtcHR5IHdhaXRfZm9yCiAJCQkJewogCQkJCQlUcmFuc2Fj dGlvblN0bXQgKm4gPSBtYWtlTm9kZShUcmFuc2FjdGlvblN0bXQpOwogCQkJCQluLT5raW5kID0g VFJBTlNfU1RNVF9TVEFSVDsKIAkJCQkJbi0+b3B0aW9ucyA9ICQzOworCQkJCQluLT53YWl0ID0g JDQ7CiAJCQkJCSQkID0gKE5vZGUgKiluOwogCQkJCX0KIAkJCXwgQ09NTUlUIG9wdF90cmFuc2Fj dGlvbiBvcHRfdHJhbnNhY3Rpb25fY2hhaW4KQEAgLTE0MTU3LDYgKzE0MTYzLDc0IEBAIHhtbF9w YXNzaW5nX21lY2g6CiAJCQl8IEJZIFZBTFVFX1AKIAkJOwogCisvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioKKyAqCisgKgkJUVVFUlk6CisgKgkJCQlXQUlUIEZPUiA8ZXZlbnQ+IFssIDxldmVudD4gLi4u XQorICoJCQkJZXZlbnQgaXMgb25lIG9mOgorICoJCQkJCUxTTiB2YWx1ZQorICoJCQkJCVRJTUVP VVQgZGVsYXkKKyAqCQkJCQl0aW1lc3RhbXAKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitX YWl0U3RtdDoKKwkJCVdBSVQgRk9SIHdhaXRfc3RyYXRlZ3kgd2FpdF9saXN0CisJCQkJeworCQkJ CQlXYWl0U3RtdCAqbiA9IG1ha2VOb2RlKFdhaXRTdG10KTsKKwkJCQkJbi0+c3RyYXRlZ3kgPSAk MzsKKwkJCQkJbi0+ZXZlbnRzID0gJDQ7CisJCQkJCSQkID0gKE5vZGUgKiluOworCQkJCX0KKwkJ CTsKK3dhaXRfZm9yOgorCQkJV0FJVCBGT1Igd2FpdF9zdHJhdGVneSB3YWl0X2xpc3QKKwkJCQl7 CisJCQkJCVdhaXRTdG10ICpuID0gbWFrZU5vZGUoV2FpdFN0bXQpOworCQkJCQluLT5zdHJhdGVn eSA9ICQzOworCQkJCQluLT5ldmVudHMgPSAkNDsKKwkJCQkJJCQgPSAoTm9kZSAqKW47CisJCQkJ fQorCQkJfCAvKiBFTVBUWSAqLwkJeyAkJCA9IE5VTEw7IH07CisKK3dhaXRfc3RyYXRlZ3k6CisJ CQlBTEwJCQkJCXsgJCQgPSBXQUlUX0ZPUl9BTEw7IH0KKwkJCXwgQU5ZCQkJCXsgJCQgPSBXQUlU X0ZPUl9BTlk7IH0KKwkJCXwgLyogRU1QVFkgKi8JCXsgJCQgPSBXQUlUX0ZPUl9BTEw7IH0KKwkJ OworCit3YWl0X2xpc3Q6CisJCQlXYWl0RXZlbnQJCQkJCXsgJCQgPSBsaXN0X21ha2UxKCQxKTsg fQorCQkJfCB3YWl0X2xpc3QgJywnIFdhaXRFdmVudAl7ICQkID0gbGFwcGVuZCgkMSwgJDMpOyB9 CisJCQl8IHdhaXRfbGlzdCBXYWl0RXZlbnQJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMik7IH0KKwkJ OworCitXYWl0RXZlbnQ6CisJCQlMU04gU2NvbnN0CisJCQkJeworCQkJCQlXYWl0U3RtdCAqbiA9 IG1ha2VOb2RlKFdhaXRTdG10KTsKKwkJCQkJbi0+bHNuID0gJDI7CisJCQkJCW4tPmRlbGF5ID0g MDsKKwkJCQkJbi0+dGltZSA9IE5VTEw7CisJCQkJCSQkID0gKE5vZGUgKiluOworCQkJCX0KKwkJ CXwgVElNRU9VVCBJY29uc3QKKwkJCQl7CisJCQkJCVdhaXRTdG10ICpuID0gbWFrZU5vZGUoV2Fp dFN0bXQpOworCQkJCQluLT5sc24gPSBOVUxMOworCQkJCQluLT5kZWxheSA9ICQyOworCQkJCQlu LT50aW1lID0gTlVMTDsKKwkJCQkJJCQgPSAoTm9kZSAqKW47CisJCQkJfQorCQkJfCBDb25zdERh dGV0aW1lIFNjb25zdAorCQkJCXsKKwkJCQkJV2FpdFN0bXQgKm4gPSBtYWtlTm9kZShXYWl0U3Rt dCk7CisJCQkJCW4tPmxzbiA9IE5VTEw7CisJCQkJCW4tPmRlbGF5ID0gMDsKKwkJCQkJbi0+dGlt ZSA9IG1ha2VTdHJpbmdDb25zdENhc3QoJDIsIEAyLCAkMSk7CisJCQkJCSQkID0gKE5vZGUgKilu OworCQkJCX0KKwkJCTsKKwogCiAvKgogICogQWdncmVnYXRlIGRlY29yYXRpb24gY2xhdXNlcwpA QCAtMTUzMDEsNiArMTUzNzUsNyBAQCB1bnJlc2VydmVkX2tleXdvcmQ6CiAJCQl8IExPQ0tfUAog CQkJfCBMT0NLRUQKIAkJCXwgTE9HR0VECisJCQl8IExTTgogCQkJfCBNQVBQSU5HCiAJCQl8IE1B VENICiAJCQl8IE1BVEVSSUFMSVpFRApAQCAtMTU0MjMsNiArMTU0OTgsNyBAQCB1bnJlc2VydmVk X2tleXdvcmQ6CiAJCQl8IFRFTVBPUkFSWQogCQkJfCBURVhUX1AKIAkJCXwgVElFUworCQkJfCBU SU1FT1VUCiAJCQl8IFRSQU5TQUNUSU9OCiAJCQl8IFRSQU5TRk9STQogCQkJfCBUUklHR0VSCkBA IC0xNTQ0OSw2ICsxNTUyNSw3IEBAIHVucmVzZXJ2ZWRfa2V5d29yZDoKIAkJCXwgVklFVwogCQkJ fCBWSUVXUwogCQkJfCBWT0xBVElMRQorCQkJfCBXQUlUCiAJCQl8IFdISVRFU1BBQ0VfUAogCQkJ fCBXSVRISU4KIAkJCXwgV0lUSE9VVApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9p cGMvaXBjaS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCmluZGV4IDQyN2IwZDU5 Y2RlLi5iYjhhZjM0OTgwOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBj aS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwpAQCAtMjIsNiArMjIsNyBA QAogI2luY2x1ZGUgImFjY2Vzcy9zdWJ0cmFucy5oIgogI2luY2x1ZGUgImFjY2Vzcy90d29waGFz ZS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2FzeW5jLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvd2Fp dC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1 ZGUgInBvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5oIgpAQCAtMTQ3LDYgKzE0OCw3IEBAIENyZWF0ZVNo YXJlZE1lbW9yeUFuZFNlbWFwaG9yZXModm9pZCkKIAkJc2l6ZSA9IGFkZF9zaXplKHNpemUsIEJU cmVlU2htZW1TaXplKCkpOwogCQlzaXplID0gYWRkX3NpemUoc2l6ZSwgU3luY1NjYW5TaG1lbVNp emUoKSk7CiAJCXNpemUgPSBhZGRfc2l6ZShzaXplLCBBc3luY1NobWVtU2l6ZSgpKTsKKwkJc2l6 ZSA9IGFkZF9zaXplKHNpemUsIFdhaXRTaG1lbVNpemUoKSk7CiAjaWZkZWYgRVhFQ19CQUNLRU5E CiAJCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTaG1lbUJhY2tlbmRBcnJheVNpemUoKSk7CiAjZW5k aWYKQEAgLTI2NCw2ICsyNjYsMTEgQEAgQ3JlYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3Jlcyh2 b2lkKQogCVN5bmNTY2FuU2htZW1Jbml0KCk7CiAJQXN5bmNTaG1lbUluaXQoKTsKIAorCS8qCisJ ICogSW5pdCBhcnJheSBvZiBMYXRjaGVzIGluIHNoYXJlZCBtZW1vcnkgZm9yIFdBSVQKKwkgKi8K KwlXYWl0U2htZW1Jbml0KCk7CisKICNpZmRlZiBFWEVDX0JBQ0tFTkQKIAogCS8qCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0 eS5jCmluZGV4IGIxZjdmNmUyZDAxLi5hZDg1ZjEwNjA0MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdGNvcC91dGlsaXR5LmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKQEAgLTE1 LDYgKzE1LDcgQEAKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAjaW5jbHVkZSAicG9zdGdyZXMu aCIKKyNpbmNsdWRlIDxmbG9hdC5oPgogCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5o IgogI2luY2x1ZGUgImFjY2Vzcy9yZWxvcHRpb25zLmgiCkBAIC01Nyw2ICs1OCw3IEBACiAjaW5j bHVkZSAiY29tbWFuZHMvdXNlci5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3ZhY3V1bS5oIgogI2lu Y2x1ZGUgImNvbW1hbmRzL3ZpZXcuaCIKKyNpbmNsdWRlICJjb21tYW5kcy93YWl0LmgiCiAjaW5j bHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX3V0aWxjbWQuaCIKICNp bmNsdWRlICJwb3N0bWFzdGVyL2Jnd3JpdGVyLmgiCkBAIC03MCw2ICs3Miw5IEBACiAjaW5jbHVk ZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAjaW5jbHVkZSAi dXRpbHMvc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJleGVjdXRvci9zcGkuaCIKKyNpbmNsdWRlICJ1 dGlscy9mbWdycHJvdG9zLmgiCisjaW5jbHVkZSAidXRpbHMvcGdfbHNuLmgiCiAKIC8qIEhvb2sg Zm9yIHBsdWdpbnMgdG8gZ2V0IGNvbnRyb2wgaW4gUHJvY2Vzc1V0aWxpdHkoKSAqLwogUHJvY2Vz c1V0aWxpdHlfaG9va190eXBlIFByb2Nlc3NVdGlsaXR5X2hvb2sgPSBOVUxMOwpAQCAtMjY4LDYg KzI3Myw3IEBAIENsYXNzaWZ5VXRpbGl0eUNvbW1hbmRBc1JlYWRPbmx5KE5vZGUgKnBhcnNldHJl ZSkKIAkJY2FzZSBUX0xvYWRTdG10OgogCQljYXNlIFRfUHJlcGFyZVN0bXQ6CiAJCWNhc2UgVF9V bmxpc3RlblN0bXQ6CisJCWNhc2UgVF9XYWl0U3RtdDoKIAkJY2FzZSBUX1ZhcmlhYmxlU2V0U3Rt dDoKIAkJCXsKIAkJCQkvKgpAQCAtNTkxLDYgKzU5NywxMSBAQCBzdGFuZGFyZF9Qcm9jZXNzVXRp bGl0eShQbGFubmVkU3RtdCAqcHN0bXQsCiAJCQkJCWNhc2UgVFJBTlNfU1RNVF9TVEFSVDoKIAkJ CQkJCXsKIAkJCQkJCQlMaXN0Q2VsbCAgICpsYzsKKwkJCQkJCQlXYWl0U3RtdCAgICp3YWl0c3Rt dCA9IChXYWl0U3RtdCAqKSBzdG10LT53YWl0OworCisJCQkJCQkJLyogSWYgbmVlZGVkIHRvIFdB SVQgRk9SIHNvbWV0aGluZyBidXQgZmFpbGVkICovCisJCQkJCQkJaWYgKHN0bXQtPndhaXQgJiYg V2FpdE1haW4od2FpdHN0bXQsIGRlc3QpICE9IDApCisJCQkJCQkJCWJyZWFrOwogCiAJCQkJCQkJ QmVnaW5UcmFuc2FjdGlvbkJsb2NrKCk7CiAJCQkJCQkJZm9yZWFjaChsYywgc3RtdC0+b3B0aW9u cykKQEAgLTEwNjIsNiArMTA3MywxMyBAQCBzdGFuZGFyZF9Qcm9jZXNzVXRpbGl0eShQbGFubmVk U3RtdCAqcHN0bXQsCiAJCQkJYnJlYWs7CiAJCQl9CiAKKwkJY2FzZSBUX1dhaXRTdG10OgorCQkJ eworCQkJCVdhaXRTdG10ICAgKnN0bXQgPSAoV2FpdFN0bXQgKikgcGFyc2V0cmVlOworCQkJCVdh aXRNYWluKHN0bXQsIGRlc3QpOworCQkJCWJyZWFrOworCQkJfQorCiAJCWRlZmF1bHQ6CiAJCQkv KiBBbGwgb3RoZXIgc3RhdGVtZW50IHR5cGVzIGhhdmUgZXZlbnQgdHJpZ2dlciBzdXBwb3J0ICov CiAJCQlQcm9jZXNzVXRpbGl0eVNsb3cocHN0YXRlLCBwc3RtdCwgcXVlcnlTdHJpbmcsCkBAIC0y NzE4LDYgKzI3MzYsMTAgQEAgQ3JlYXRlQ29tbWFuZFRhZyhOb2RlICpwYXJzZXRyZWUpCiAJCQl0 YWcgPSBDTURUQUdfTk9USUZZOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBUX1dhaXRTdG10OgorCQkJ dGFnID0gQ01EVEFHX1dBSVQ7CisJCQlicmVhazsKKwogCQljYXNlIFRfTGlzdGVuU3RtdDoKIAkJ CXRhZyA9IENNRFRBR19MSVNURU47CiAJCQlicmVhazsKQEAgLTMzNTcsNiArMzM3OSwxMCBAQCBH ZXRDb21tYW5kTG9nTGV2ZWwoTm9kZSAqcGFyc2V0cmVlKQogCQkJbGV2ID0gTE9HU1RNVF9BTEw7 CiAJCQlicmVhazsKIAorCQljYXNlIFRfV2FpdFN0bXQ6CisJCQlsZXYgPSBMT0dTVE1UX0FMTDsK KwkJCWJyZWFrOworCiAJCWNhc2UgVF9MaXN0ZW5TdG10OgogCQkJbGV2ID0gTE9HU1RNVF9BTEw7 CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3dhaXQuaCBiL3Ny Yy9pbmNsdWRlL2NvbW1hbmRzL3dhaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uMTExMTViOWRhYjYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9jb21t YW5kcy93YWl0LmgKQEAgLTAsMCArMSwyNyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICog d2FpdC5oCisgKgkgIHByb3RvdHlwZXMgZm9yIGNvbW1hbmRzL3dhaXQuYworICoKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDE2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVu dCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDE2LCBSZWdlbnRzIG9mIFBvc3Rn cmVzUFJPCisgKgorICogc3JjL2luY2x1ZGUvY29tbWFuZHMvd2FpdC5oCisgKgorICotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgV0FJVF9ICisjZGVmaW5lIFdBSVRfSAorI2luY2x1ZGUg InBvc3RncmVzLmgiCisjaW5jbHVkZSAidGNvcC9kZXN0LmgiCisKK2V4dGVybiBpbnQgV2FpdFV0 aWxpdHkoWExvZ1JlY1B0ciBsc24sIGNvbnN0IGZsb2F0OCBkZWxheSwgRGVzdFJlY2VpdmVyICpk ZXN0KTsKK2V4dGVybiB2b2lkIFdhaXRUaW1lVXRpbGl0eShmbG9hdDggZGVsYXkpOworZXh0ZXJu IFNpemUgV2FpdFNobWVtU2l6ZSh2b2lkKTsKK2V4dGVybiB2b2lkIFdhaXRTaG1lbUluaXQodm9p ZCk7CitleHRlcm4gdm9pZCBXYWl0U2V0TGF0Y2goWExvZ1JlY1B0ciBjdXJfbHNuKTsKK2V4dGVy biBYTG9nUmVjUHRyIEdldE1pbldhaXQodm9pZCk7CitleHRlcm4gZmxvYXQ4IFdhaXRUaW1lUmVz b2x2ZShDb25zdCAqdGltZSk7CitleHRlcm4gaW50IFdhaXRNYWluKFdhaXRTdG10ICpzdG10LCBE ZXN0UmVjZWl2ZXIgKmRlc3QpOworCisjZW5kaWYgICAvKiBXQUlUX0ggKi8KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oCmlu ZGV4IDhhNzZhZmU4Y2NiLi4zNDhkZTc2YzVmNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9k ZXMvbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oCkBAIC00ODgsNiArNDg4 LDcgQEAgdHlwZWRlZiBlbnVtIE5vZGVUYWcKIAlUX0Ryb3BSZXBsaWNhdGlvblNsb3RDbWQsCiAJ VF9TdGFydFJlcGxpY2F0aW9uQ21kLAogCVRfVGltZUxpbmVIaXN0b3J5Q21kLAorCVRfV2FpdFN0 bXQsCiAJVF9TUUxDbWQsCiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFy c2Vub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCmluZGV4IDc3OTQzZjA2 Mzc2Li45NzFmMzQzY2Y3YSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rl cy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaApAQCAtMzA1NSw2ICszMDU1 LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgVHJhbnNhY3Rpb25TdG10CiAJY2hhcgkgICAqc2F2ZXBvaW50 X25hbWU7IC8qIGZvciBzYXZlcG9pbnQgY29tbWFuZHMgKi8KIAljaGFyCSAgICpnaWQ7CQkJLyog Zm9yIHR3by1waGFzZS1jb21taXQgcmVsYXRlZCBjb21tYW5kcyAqLwogCWJvb2wJCWNoYWluOwkJ CS8qIEFORCBDSEFJTiBvcHRpb24gKi8KKwlOb2RlCQkqd2FpdDsJCQkvKiBXQUlUIGNsYXVzZTog bGlzdCBvZiBldmVudHMgdG8gd2FpdCBmb3IgKi8KIH0gVHJhbnNhY3Rpb25TdG10OwogCiAvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zNTY0LDQgKzM1NjUsMjYgQEAgdHlwZWRlZiBzdHJ1 Y3QgRHJvcFN1YnNjcmlwdGlvblN0bXQKIAlEcm9wQmVoYXZpb3IgYmVoYXZpb3I7CQkvKiBSRVNU UklDVCBvciBDQVNDQURFIGJlaGF2aW9yICovCiB9IERyb3BTdWJzY3JpcHRpb25TdG10OwogCisv KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgkJV0FJVCBGT1IgU3RhdGVtZW50ICsgV0FJVCBG T1IgY2xhdXNlIG9mIEJFR0lOIHN0YXRlbWVudAorICoJCVRPRE86IGlmIHdlIG9ubHkgcGljayBv bmUsIHJlbW92ZSB0aGUgb3RoZXIKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCit0 eXBlZGVmIGVudW0gV2FpdEZvclN0cmF0ZWd5Cit7CisJV0FJVF9GT1JfQU5ZID0gMCwKKwlXQUlU X0ZPUl9BTEwKK30gV2FpdEZvclN0cmF0ZWd5OworCit0eXBlZGVmIHN0cnVjdCBXYWl0U3RtdAor eworCU5vZGVUYWcJCXR5cGU7CisJV2FpdEZvclN0cmF0ZWd5IHN0cmF0ZWd5OworCUxpc3QJICAg KmV2ZW50czsJCS8qIHVzZWQgYXMgYSBwb2ludGVyIHRvIHRoZSBuZXh0IFdBSVQgZXZlbnQgKi8K KwljaGFyCSAgICpsc247CQkvKiBXQUlUIEZPUiBMU04gKi8KKwlpbnQJCQlkZWxheTsJCS8qIFdB SVQgRk9SIFRJTUVPVVQgKi8KKwlOb2RlCSAgICp0aW1lOwkJLyogV0FJVCBGT1IgVElNRVNUQU1Q IG9yIFRJTUUgKi8KK30gV2FpdFN0bXQ7CisKICNlbmRpZgkJCQkJCQkvKiBQQVJTRU5PREVTX0gg Ki8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaCBiL3NyYy9pbmNsdWRl L3BhcnNlci9rd2xpc3QuaAppbmRleCBiMTE4NGMyZDE1OC4uZGQyMmUzNThiOWEgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaAorKysgYi9zcmMvaW5jbHVkZS9wYXJzZXIv a3dsaXN0LmgKQEAgLTI0Myw2ICsyNDMsNyBAQCBQR19LRVlXT1JEKCJsb2NhdGlvbiIsIExPQ0FU SU9OLCBVTlJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJsb2NrIiwgTE9DS19QLCBVTlJF U0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJsb2NrZWQiLCBMT0NLRUQsIFVOUkVTRVJWRURf S0VZV09SRCkKIFBHX0tFWVdPUkQoImxvZ2dlZCIsIExPR0dFRCwgVU5SRVNFUlZFRF9LRVlXT1JE KQorUEdfS0VZV09SRCgibHNuIiwgTFNOLCBVTlJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JE KCJtYXBwaW5nIiwgTUFQUElORywgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgibWF0 Y2giLCBNQVRDSCwgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgibWF0ZXJpYWxpemVk IiwgTUFURVJJQUxJWkVELCBVTlJFU0VSVkVEX0tFWVdPUkQpCkBAIC00MDQsNiArNDA1LDcgQEAg UEdfS0VZV09SRCgidGV4dCIsIFRFWFRfUCwgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09S RCgidGhlbiIsIFRIRU4sIFJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJ0aWVzIiwgVElF UywgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgidGltZSIsIFRJTUUsIENPTF9OQU1F X0tFWVdPUkQpCitQR19LRVlXT1JEKCJ0aW1lb3V0IiwgVElNRU9VVCwgVU5SRVNFUlZFRF9LRVlX T1JEKQogUEdfS0VZV09SRCgidGltZXN0YW1wIiwgVElNRVNUQU1QLCBDT0xfTkFNRV9LRVlXT1JE KQogUEdfS0VZV09SRCgidG8iLCBUTywgUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoInRy YWlsaW5nIiwgVFJBSUxJTkcsIFJFU0VSVkVEX0tFWVdPUkQpCkBAIC00NDQsNiArNDQ2LDcgQEAg UEdfS0VZV09SRCgidmVyc2lvbiIsIFZFUlNJT05fUCwgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdf S0VZV09SRCgidmlldyIsIFZJRVcsIFVOUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoInZp ZXdzIiwgVklFV1MsIFVOUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoInZvbGF0aWxlIiwg Vk9MQVRJTEUsIFVOUkVTRVJWRURfS0VZV09SRCkKK1BHX0tFWVdPUkQoIndhaXQiLCBXQUlULCBV TlJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJ3aGVuIiwgV0hFTiwgUkVTRVJWRURfS0VZ V09SRCkKIFBHX0tFWVdPUkQoIndoZXJlIiwgV0hFUkUsIFJFU0VSVkVEX0tFWVdPUkQpCiBQR19L RVlXT1JEKCJ3aGl0ZXNwYWNlIiwgV0hJVEVTUEFDRV9QLCBVTlJFU0VSVkVEX0tFWVdPUkQpCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL2NtZHRhZ2xpc3QuaCBiL3NyYy9pbmNsdWRlL3Rj b3AvY21kdGFnbGlzdC5oCmluZGV4IDhlZjBmNTVlNzQ4Li40MzBiYjVjNzE3MSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvdGNvcC9jbWR0YWdsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvdGNvcC9j bWR0YWdsaXN0LmgKQEAgLTIxNiwzICsyMTYsNCBAQCBQR19DTURUQUcoQ01EVEFHX1RSVU5DQVRF X1RBQkxFLCAiVFJVTkNBVEUgVEFCTEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQogUEdfQ01EVEFH KENNRFRBR19VTkxJU1RFTiwgIlVOTElTVEVOIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKIFBHX0NN RFRBRyhDTURUQUdfVVBEQVRFLCAiVVBEQVRFIiwgZmFsc2UsIGZhbHNlLCB0cnVlKQogUEdfQ01E VEFHKENNRFRBR19WQUNVVU0sICJWQUNVVU0iLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01E VEFHKENNRFRBR19XQUlULCAiV0FJVCBGT1IiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMjBfYmVnaW5fd2FpdC5wbCBiL3NyYy90ZXN0L3Jl Y292ZXJ5L3QvMDIwX2JlZ2luX3dhaXQucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjliZWM1N2VlOGY0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVjb3Zl cnkvdC8wMjBfYmVnaW5fd2FpdC5wbApAQCAtMCwwICsxLDE0NSBAQAorIyBDaGVja3MgV0FJVCBG T1IKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBQb3N0Z3Jlc05vZGU7Cit1c2Ug VGVzdExpYjsKK3VzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDg7CisKKyMgSW5pdGlhbGl6ZSBtYXN0 ZXIgbm9kZQorbXkgJG5vZGVfbWFzdGVyID0gZ2V0X25ld19ub2RlKCdtYXN0ZXInKTsKKyRub2Rl X21hc3Rlci0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+IDEpOworJG5vZGVfbWFzdGVyLT5zdGFy dDsKKworIyBBbmQgc29tZSBjb250ZW50IGFuZCB0YWtlIGEgYmFja3VwCiskbm9kZV9tYXN0ZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgd2FpdF90ZXN0IEFTIFNFTEVD VCBnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgQVMgYSIpOworbXkgJGJhY2t1cF9uYW1lID0gJ215X2Jh Y2t1cCc7Ciskbm9kZV9tYXN0ZXItPmJhY2t1cCgkYmFja3VwX25hbWUpOworCisjIENyZWF0ZSBh IHN0cmVhbWluZyBzdGFuZGJ5IHdpdGggYSAxIHNlY29uZCBkZWxheSBmcm9tIHRoZSBiYWNrdXAK K215ICRub2RlX3N0YW5kYnkgPSBnZXRfbmV3X25vZGUoJ3N0YW5kYnknKTsKK215ICRkZWxheSAg ICAgICAgPSAxOworJG5vZGVfc3RhbmRieS0+aW5pdF9mcm9tX2JhY2t1cCgkbm9kZV9tYXN0ZXIs ICRiYWNrdXBfbmFtZSwKKwloYXNfc3RyZWFtaW5nID0+IDEpOworJG5vZGVfc3RhbmRieS0+YXBw ZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsIHFxWworCXJlY292ZXJ5X21pbl9hcHBseV9kZWxh eSA9ICcke2RlbGF5fXMnCitdKTsKKyRub2RlX3N0YW5kYnktPnN0YXJ0OworCisKKworIyBNYWtl IHN1cmUgdGhhdCBXQUlUIEZPUiBMU04gd29ya3M6IGFkZCBuZXcgY29udGVudCB0byBtYXN0ZXIg YW5kIG1lbW9yaXplCisjIG1hc3RlcidzIG5ldyBMU04sIHRoZW4gd2FpdCBmb3IgbWFzdGVyJ3Mg TFNOIG9uIHN0YW5kYnkuIFByb3ZlIHRoYXQgV0FJVCBpcworIyBhYmxlIHRvIHNldHVwIGFuIGlu ZmluaXRlIHdhaXRpbmcgbG9vcCBhbmQgZXhpdCBpdCBpZiBnaXZlbiBubyB3YWl0IHRpbWVvdXQu Ciskbm9kZV9tYXN0ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB3YWl0 X3Rlc3QgVkFMVUVTIChnZW5lcmF0ZV9zZXJpZXMoMTEsIDIwKSkiKTsKK215ICRsc24xID0gJG5v ZGVfbWFzdGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBwZ19jdXJyZW50X3dhbF9s c24oKSIpOworJG5vZGVfc3RhbmRieS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJCRUdJTiBXQUlU IEZPUiBMU04gJyRsc24xJyIpOworCisjIEdldCB0aGUgY3VycmVudCBMU04gb24gc3RhbmRieSBh bmQgbWFrZSBzdXJlIGl0J3MgdGhlIHNhbWUgYXMgbWFzdGVyJ3MgTFNOCitteSAkbHNuX3N0YW5k YnkgPSAkbm9kZV9zdGFuZGJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBnX2xh c3Rfd2FsX3JlcGxheV9sc24oKSIpOworbXkgJGNvbXBhcmVfbHNucyA9ICRub2RlX3N0YW5kYnkt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGdfbHNuX2NtcCgnJGxzbl9zdGFuZGJ5 Jzo6cGdfbHNuLCAnJGxzbjEnOjpwZ19sc24pIik7CitvaygkY29tcGFyZV9sc25zIGVxIDAsICJz dGFuZGJ5IHJlYWNoZWQgdGhlIHNhbWUgTFNOIGFzIG1hc3RlciBhZnRlciBXQUlUIik7CisKKwor CisjIENoZWNrIHRoYXQgdGltZW91dHMgd29yayBvbiB0aGVpciBvd24gYW5kIGxldCB1cyB3YWl0 IGZvciBzcGVjaWZpZWQgdGltZSAoMXMpCitteSAkY3VycmVudF90aW1lID0gJG5vZGVfc3RhbmRi eS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1Qgbm93KCkiKTsKK215ICRvbmVfc2Vjb25k ID0gMTAwMDsgIyBpbiBtaWxsaXNlY29uZHMKK215ICRzdGFydF90aW1lID0gdGltZSgpOworIyBX aGlsZSB3ZSdyZSBhdCBpdCwgYWxzbyBtYWtlIHN1cmUgdGhhdCB0aGUgc3ludGF4IHdpdGggY29t bWFzIHdvcmtzIGZpbmUgYW5kCisjIHRoYXQgYnkgZGVmYXVsdCB3ZSB1c2UgV0FJVCBGT1IgQUxM IHN0cmF0ZWd5LCB3aGljaCBtZWFucyB3YWl0aW5nIGZvciBtYXggdGltZQorJG5vZGVfc3RhbmRi eS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIldBSVQgRk9SIFRJTUVPVVQgJG9uZV9zZWNvbmQs IFRJTUVTVEFNUCAnJGN1cnJlbnRfdGltZSciKTsKK215ICR0aW1lX3dhaXRlZCA9ICh0aW1lKCkg LSAkc3RhcnRfdGltZSkgKiAxMDAwOyAjIGNvbnZlcnQgdG8gbWlsbGlzZWNvbmRzCitvaygkdGlt ZV93YWl0ZWQgPj0gJG9uZV9zZWNvbmQsICJXQUlUIEZPUiBUSU1FT1VUIHdhaXRzIGZvciBlbm91 Z2ggdGltZSIpOworCisjIE5vdywgY2hlY2sgdGhhdCB0aW1lb3V0cyB3b3JrIGFzIGV4cGVjdGVk IHdoZW4gd2FpdGluZyBmb3IgTFNOCiskbm9kZV9tYXN0ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LAorCSJJTlNFUlQgSU5UTyB3YWl0X3Rlc3QgVkFMVUVTIChnZW5lcmF0ZV9zZXJpZXMoMjEsIDMw KSkiKTsKK215ICRsc24yID0gJG5vZGVfbWFzdGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNF TEVDVCBwZ19jdXJyZW50X3dhbF9sc24oKSIpOworbXkgJHJlYWNoZWRfbHNuID0gJG5vZGVfc3Rh bmRieS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkJFR0lOIFdBSVQgRk9SIExTTiAnJGxzbjIn IFRJTUVPVVQgMSIpOworb2soJHJlYWNoZWRfbHNuIGVxICJmIiwgIldBSVQgZG9lc24ndCByZWFj aCBMU04gaWYgZ2l2ZW4gdG9vIGxpdHRsZSB3YWl0IHRpbWUiKTsKKworCisjPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorIyBUT0RPOiByZW1vdmUgdGhpcyB0ZXN0IGlmIHdlIHJlbW92ZSB0aGUgc3Rh bmRhbG9uZSAiV0FJVCBGT1IiIGNvbW1hbmQKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFdl IG5lZWQgdG8gY2hlY2sgdGhhdCBXQUlUIHdvcmtzIGZpbmUgaW5zaWRlIHRyYW5zYWN0aW9ucy4g Rm9yIHRoYXQsIGxldCdzCisjIGdldCB0d28gTFNOcyB0aGF0IHdpbGwgY29ycmVzcG9uZCB0byB0 d28gZGlmZmVyZW50IG1heCB2YWx1ZXMgaW4gb3VyIHRhYmxlLgorJG5vZGVfbWFzdGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5TRVJUIElOVE8gd2FpdF90ZXN0IFZBTFVFUyAoZ2VuZXJh dGVfc2VyaWVzKDMxLCA0MCkpIik7CitteSAkbHNuMyA9ICRub2RlX21hc3Rlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJTRUxFQ1QgcGdfY3VycmVudF93YWxfbHNuKCkiKTsKKyRub2RlX21hc3Rl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJTlRPIHdhaXRfdGVzdCBWQUxVRVMg KGdlbmVyYXRlX3Nlcmllcyg0MSwgNTApKSIpOworbXkgJGxzbjQgPSAkbm9kZV9tYXN0ZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHBnX2N1cnJlbnRfd2FsX2xzbigpIik7CisKKyMg QmVmb3JlIHN0YXJ0aW5nIHRyYW5zYWN0aW9uLCB3YWl0IGZvciBMU04gd2hpY2ggZW5zdXJlcyBh IG1heCB2YWx1ZSBvZiA0MC4KKyMgSW5zaWRlIHRoZSB0cmFuc2FjdGlvbiwgd2FpdCBmb3IgTFNO IHRoYXQgZW5zdXJlcyBhIG1heCB2YWx1ZSBvZiA1MC4KKyMgRHVlIHRvIElTT0xBVElPTiBMRVZF TCBSRVBFQVRBQkxFIFJFQUQsIHdlIHNob3VsZCBOT1Qgc2VlIHRoZSBuZXcgbWF4IHZhbHVlLgor bXkgJHN0YW5kYnlfcmVzdWx0cyA9ICRub2RlX3N0YW5kYnktPnNhZmVfcHNxbCgKKwkncG9zdGdy ZXMnLCBxcVsKKwlCRUdJTiBUUkFOU0FDVElPTiBJU09MQVRJT04gTEVWRUwgUkVQRUFUQUJMRSBS RUFEIFdBSVQgRk9SIExTTiAnJGxzbjMnOworCVNFTEVDVCBtYXgoYSkgRlJPTSB3YWl0X3Rlc3Q7 CisJQkVHSU4gV0FJVCBGT1IgTFNOICckbHNuNCc7CisJU0VMRUNUIHBnX2xhc3Rfd2FsX3JlcGxh eV9sc24oKTsKKwlTRUxFQ1QgbWF4KGEpIEZST00gd2FpdF90ZXN0OworCUNPTU1JVDsKK10pOwor CisjIE1ha2Ugc3VyZSB0aGF0IHdlIGluZGVlZCByZWFjaCBtYXN0ZXIncyBsYXN0IExTTiBpbnNp ZGUgdGhlIHRyYW5zYWN0aW9uLgorIyBGb3IgdGhhdCwgY2hlY2sgdGhhdCBjYWxsaW5nIHBnX2xh c3Rfd2FsX3JlcGxheV9sc24gcmV0dXJuZWQgdGhhdCBMU04uCitteSAkbGFzdF9sc25fcmVhY2hl ZCA9ICRzdGFuZGJ5X3Jlc3VsdHMgPX4gLyRsc240LzsKK29rKCRsYXN0X2xzbl9yZWFjaGVkLCAi V0FJVCBGT1IgTFNOIHdvcmtzIGluc2lkZSBhIHRyYW5zYWN0aW9uIik7CisKKyMgQ2hlY2sgdGhh dCB0cmFuc2FjdGlvbiBkb2Vzbid0IGJyZWFrIGFuZCBzaG93IHVzIHRoZSBuZXcgbWF4IHZhbHVl IGFmdGVyIFdBSVQuCisjIEZvciB0aGF0LCBtYWtlIHN1cmUgdGhhdCB0aGUgb2xkZXIgbWF4IHZh bHVlIGlzIHJlcGVhdGVkIHR3aWNlIGluIHRoZSByZXN1bHRzLgorbXkgJGNvdW50ID0gKCkgPSAk c3RhbmRieV9yZXN1bHRzID1+IC80MC9nOworb2soJGNvdW50IGVxIDIsICJ0cmFuc2FjdGlvbiBp c29sYXRpb24gbGV2ZWwgZG9lc24ndCBnZXQgYnJva2VuIGR1ZSB0byBXQUlUIik7CisKKworCisj IEdldCBtdWx0aXBsZSBMU05zIGZvciB0ZXN0aW5nIFdBSVQgRk9SIEFOWSAvIFdBSVQgRk9SIEFM TAorJG5vZGVfbWFzdGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5TRVJUIElOVE8gd2Fp dF90ZXN0IFZBTFVFUyAoZ2VuZXJhdGVfc2VyaWVzKDUxLCA2MCkpIik7CitteSAkbHNuNSA9ICRu b2RlX21hc3Rlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcGdfY3VycmVudF93YWxf bHNuKCkiKTsKKyRub2RlX21hc3Rlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJ TlRPIHdhaXRfdGVzdCBWQUxVRVMgKGdlbmVyYXRlX3Nlcmllcyg2MSwgNzAwMDApKSIpOworbXkg JGxzbjYgPSAkbm9kZV9tYXN0ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHBnX2N1 cnJlbnRfd2FsX2xzbigpIik7Ciskbm9kZV9tYXN0ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAor CSJJTlNFUlQgSU5UTyB3YWl0X3Rlc3QgVkFMVUVTIChnZW5lcmF0ZV9zZXJpZXMoNjEsIDgwMDAw MCkpIik7CitteSAkbHNuNyA9ICRub2RlX21hc3Rlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJT RUxFQ1QgcGdfY3VycmVudF93YWxfbHNuKCkiKTsKKworIyBDaGVjayB0aGF0IFdBSVQgRk9SIEFO WSB3b3JrcyBmaW5lCiskbm9kZV9zdGFuZGJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQkVH SU4gV0FJVCBGT1IgQU5ZIExTTiAnJGxzbjUnIExTTiAnJGxzbjYnIExTTiAnJGxzbjcnIik7Cisk bHNuX3N0YW5kYnkgPSAkbm9kZV9zdGFuZGJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VM RUNUIHBnX2xhc3Rfd2FsX3JlcGxheV9sc24oKSIpOworJGNvbXBhcmVfbHNucyA9ICRub2RlX3N0 YW5kYnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGdfbHNuX2NtcCgnJGxzbl9z dGFuZGJ5Jzo6cGdfbHNuLCAnJGxzbjUnOjpwZ19sc24pIik7CitvaygkY29tcGFyZV9sc25zIGdl IDAsCisJIldBSVQgRk9SIEFOWSBtYWtlcyB1cyByZWFjaCBhdCBsZWFzdCB0aGUgbWluaW11bSBM U04gZnJvbSB0aGUgbGlzdCIpOworJGNvbXBhcmVfbHNucyA9ICRub2RlX3N0YW5kYnktPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGdfbHNuX2NtcCgnJGxzbl9zdGFuZGJ5Jzo6cGdf bHNuLCAnJGxzbjcnOjpwZ19sc24pIik7CisjIFRPRE86IENvdWxkIHRoaXMgc29tZWhvdyBmYWls IGR1ZSB0byB0aGUgbWFjaGluZSBiZWluZyB2ZXJ5IGZhc3QgYXQgYXBwbHlpbmcgTFNOPworb2so JGNvbXBhcmVfbHNucyBsdCAwLAorCSJXQUlUIEZPUiBBTlkgZGlkbid0IG1ha2UgdXMgcmVhY2gg dGhlIG1heGltdW0gTFNOIGZyb20gdGhlIGxpc3QiKTsKKworIyBDaGVjayB0aGF0IFdBSVQgRk9S IEFMTCB3b3JrcyBmaW5lCiskbm9kZV9zdGFuZGJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwki QkVHSU4gV0FJVCBGT1IgQUxMIExTTiAnJGxzbjUnLCBMU04gJyRsc242JywgTFNOICckbHNuNyci KTsKKyRsc25fc3RhbmRieSA9ICRub2RlX3N0YW5kYnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLAor CSJTRUxFQ1QgcGdfbGFzdF93YWxfcmVwbGF5X2xzbigpIik7CiskY29tcGFyZV9sc25zID0gJG5v ZGVfc3RhbmRieS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwZ19sc25fY21wKCck bHNuX3N0YW5kYnknOjpwZ19sc24sICckbHNuNyc6OnBnX2xzbikiKTsKK29rKCRjb21wYXJlX2xz bnMgZXEgMCwKKwkiV0FJVCBGT1IgQUxMIG1ha2VzIHVzIHJlYWNoIHRoZSBtYXhpbXVtIExTTiBm cm9tIHRoZSBsaXN0Iik7CisKKworCiskbm9kZV9zdGFuZGJ5LT5zdG9wOworJG5vZGVfbWFzdGVy LT5zdG9wOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMjFfd2FpdC5wbCBiL3Ny Yy90ZXN0L3JlY292ZXJ5L3QvMDIxX3dhaXQucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLmMyNzBlNzg1NzQwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVj b3ZlcnkvdC8wMjFfd2FpdC5wbApAQCAtMCwwICsxLDE0NCBAQAorIyBDaGVja3MgV0FJVCBGT1IK K3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBQb3N0Z3Jlc05vZGU7Cit1c2UgVGVz dExpYjsKK3VzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDg7CisKKyMgSW5pdGlhbGl6ZSBtYXN0ZXIg bm9kZQorbXkgJG5vZGVfbWFzdGVyID0gZ2V0X25ld19ub2RlKCdtYXN0ZXInKTsKKyRub2RlX21h c3Rlci0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+IDEpOworJG5vZGVfbWFzdGVyLT5zdGFydDsK KworIyBBbmQgc29tZSBjb250ZW50IGFuZCB0YWtlIGEgYmFja3VwCiskbm9kZV9tYXN0ZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgd2FpdF90ZXN0IEFTIFNFTEVDVCBn ZW5lcmF0ZV9zZXJpZXMoMSwxMCkgQVMgYSIpOworbXkgJGJhY2t1cF9uYW1lID0gJ215X2JhY2t1 cCc7Ciskbm9kZV9tYXN0ZXItPmJhY2t1cCgkYmFja3VwX25hbWUpOworCisjIENyZWF0ZSBhIHN0 cmVhbWluZyBzdGFuZGJ5IHdpdGggYSAxIHNlY29uZCBkZWxheSBmcm9tIHRoZSBiYWNrdXAKK215 ICRub2RlX3N0YW5kYnkgPSBnZXRfbmV3X25vZGUoJ3N0YW5kYnknKTsKK215ICRkZWxheSAgICAg ICAgPSAxOworJG5vZGVfc3RhbmRieS0+aW5pdF9mcm9tX2JhY2t1cCgkbm9kZV9tYXN0ZXIsICRi YWNrdXBfbmFtZSwKKwloYXNfc3RyZWFtaW5nID0+IDEpOworJG5vZGVfc3RhbmRieS0+YXBwZW5k X2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsIHFxWworCXJlY292ZXJ5X21pbl9hcHBseV9kZWxheSA9 ICcke2RlbGF5fXMnCitdKTsKKyRub2RlX3N0YW5kYnktPnN0YXJ0OworCisKKworIyBNYWtlIHN1 cmUgdGhhdCBXQUlUIEZPUiBMU04gd29ya3M6IGFkZCBuZXcgY29udGVudCB0byBtYXN0ZXIgYW5k IG1lbW9yaXplCisjIG1hc3RlcidzIG5ldyBMU04sIHRoZW4gd2FpdCBmb3IgbWFzdGVyJ3MgTFNO IG9uIHN0YW5kYnkuIFByb3ZlIHRoYXQgV0FJVCBpcworIyBhYmxlIHRvIHNldHVwIGFuIGluZmlu aXRlIHdhaXRpbmcgbG9vcCBhbmQgZXhpdCBpdCBpZiBnaXZlbiBubyB3YWl0IHRpbWVvdXQuCisk bm9kZV9tYXN0ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB3YWl0X3Rl c3QgVkFMVUVTIChnZW5lcmF0ZV9zZXJpZXMoMTEsIDIwKSkiKTsKK215ICRsc24xID0gJG5vZGVf bWFzdGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBwZ19jdXJyZW50X3dhbF9sc24o KSIpOworJG5vZGVfc3RhbmRieS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJXQUlUIEZPUiBMU04g JyRsc24xJyIpOworCisjIEdldCB0aGUgY3VycmVudCBMU04gb24gc3RhbmRieSBhbmQgbWFrZSBz dXJlIGl0J3MgdGhlIHNhbWUgYXMgbWFzdGVyJ3MgTFNOCitteSAkbHNuX3N0YW5kYnkgPSAkbm9k ZV9zdGFuZGJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBnX2xhc3Rfd2FsX3Jl cGxheV9sc24oKSIpOworbXkgJGNvbXBhcmVfbHNucyA9ICRub2RlX3N0YW5kYnktPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGdfbHNuX2NtcCgnJGxzbl9zdGFuZGJ5Jzo6cGdfbHNu LCAnJGxzbjEnOjpwZ19sc24pIik7CitvaygkY29tcGFyZV9sc25zIGVxIDAsICJzdGFuZGJ5IHJl YWNoZWQgdGhlIHNhbWUgTFNOIGFzIG1hc3RlciBhZnRlciBXQUlUIik7CisKKworCisjIENoZWNr IHRoYXQgdGltZW91dHMgd29yayBvbiB0aGVpciBvd24gYW5kIGxldCB1cyB3YWl0IGZvciBzcGVj aWZpZWQgdGltZSAoMXMpCitteSAkY3VycmVudF90aW1lID0gJG5vZGVfc3RhbmRieS0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJTRUxFQ1Qgbm93KCkiKTsKK215ICRvbmVfc2Vjb25kID0gMTAwMDsg IyBpbiBtaWxsaXNlY29uZHMKK215ICRzdGFydF90aW1lID0gdGltZSgpOworIyBXaGlsZSB3ZSdy ZSBhdCBpdCwgYWxzbyBtYWtlIHN1cmUgdGhhdCB0aGUgc3ludGF4IHdpdGggY29tbWFzIHdvcmtz IGZpbmUgYW5kCisjIHRoYXQgYnkgZGVmYXVsdCB3ZSB1c2UgV0FJVCBGT1IgQUxMIHN0cmF0ZWd5 LCB3aGljaCBtZWFucyB3YWl0aW5nIGZvciBtYXggdGltZQorJG5vZGVfc3RhbmRieS0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJIldBSVQgRk9SIFRJTUVPVVQgJG9uZV9zZWNvbmQsIFRJTUVTVEFN UCAnJGN1cnJlbnRfdGltZSciKTsKK215ICR0aW1lX3dhaXRlZCA9ICh0aW1lKCkgLSAkc3RhcnRf dGltZSkgKiAxMDAwOyAjIGNvbnZlcnQgdG8gbWlsbGlzZWNvbmRzCitvaygkdGltZV93YWl0ZWQg Pj0gJG9uZV9zZWNvbmQsICJXQUlUIEZPUiBUSU1FT1VUIHdhaXRzIGZvciBlbm91Z2ggdGltZSIp OworCisjIE5vdywgY2hlY2sgdGhhdCB0aW1lb3V0cyB3b3JrIGFzIGV4cGVjdGVkIHdoZW4gd2Fp dGluZyBmb3IgTFNOCiskbm9kZV9tYXN0ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNF UlQgSU5UTyB3YWl0X3Rlc3QgVkFMVUVTIChnZW5lcmF0ZV9zZXJpZXMoMjEsIDMwKSkiKTsKK215 ICRsc24yID0gJG5vZGVfbWFzdGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBwZ19j dXJyZW50X3dhbF9sc24oKSIpOworbXkgJHJlYWNoZWRfbHNuID0gJG5vZGVfc3RhbmRieS0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJIldBSVQgRk9SIExTTiAnJGxzbjInIFRJTUVPVVQgMSIpOwor b2soJHJlYWNoZWRfbHNuIGVxICJmIiwgIldBSVQgZG9lc24ndCByZWFjaCBMU04gaWYgZ2l2ZW4g dG9vIGxpdHRsZSB3YWl0IHRpbWUiKTsKKworCisKKyMgV2UgbmVlZCB0byBjaGVjayB0aGF0IFdB SVQgd29ya3MgZmluZSBpbnNpZGUgdHJhbnNhY3Rpb25zLiBGb3IgdGhhdCwgbGV0J3MKKyMgZ2V0 IHR3byBMU05zIHRoYXQgd2lsbCBjb3JyZXNwb25kIHRvIHR3byBkaWZmZXJlbnQgbWF4IHZhbHVl cyBpbiBvdXIgdGFibGUuCiskbm9kZV9tYXN0ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJ TlNFUlQgSU5UTyB3YWl0X3Rlc3QgVkFMVUVTIChnZW5lcmF0ZV9zZXJpZXMoMzEsIDQwKSkiKTsK K215ICRsc24zID0gJG5vZGVfbWFzdGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBw Z19jdXJyZW50X3dhbF9sc24oKSIpOworJG5vZGVfbWFzdGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkiSU5TRVJUIElOVE8gd2FpdF90ZXN0IFZBTFVFUyAoZ2VuZXJhdGVfc2VyaWVzKDQxLCA1 MCkpIik7CitteSAkbHNuNCA9ICRub2RlX21hc3Rlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJT RUxFQ1QgcGdfY3VycmVudF93YWxfbHNuKCkiKTsKKworIyBCZWZvcmUgc3RhcnRpbmcgdHJhbnNh Y3Rpb24sIHdhaXQgZm9yIExTTiB3aGljaCBlbnN1cmVzIGEgbWF4IHZhbHVlIG9mIDQwLgorIyBJ bnNpZGUgdGhlIHRyYW5zYWN0aW9uLCB3YWl0IGZvciBMU04gdGhhdCBlbnN1cmVzIGEgbWF4IHZh bHVlIG9mIDUwLgorIyBEdWUgdG8gSVNPTEFUSU9OIExFVkVMIFJFUEVBVEFCTEUgUkVBRCwgd2Ug c2hvdWxkIE5PVCBzZWUgdGhlIG5ldyBtYXggdmFsdWUuCitteSAkc3RhbmRieV9yZXN1bHRzID0g JG5vZGVfc3RhbmRieS0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsIHFxWworCVdBSVQgRk9SIExT TiAnJGxzbjMnOworCUJFR0lOIFRSQU5TQUNUSU9OIElTT0xBVElPTiBMRVZFTCBSRVBFQVRBQkxF IFJFQUQ7CisJU0VMRUNUIG1heChhKSBGUk9NIHdhaXRfdGVzdDsKKwlXQUlUIEZPUiBMU04gJyRs c240JzsKKwlTRUxFQ1QgcGdfbGFzdF93YWxfcmVwbGF5X2xzbigpOworCVNFTEVDVCBtYXgoYSkg RlJPTSB3YWl0X3Rlc3Q7CisJQ09NTUlUOworXSk7CisKKyMgTWFrZSBzdXJlIHRoYXQgd2UgaW5k ZWVkIHJlYWNoIG1hc3RlcidzIGxhc3QgTFNOIGluc2lkZSB0aGUgdHJhbnNhY3Rpb24uCisjIEZv ciB0aGF0LCBjaGVjayB0aGF0IGNhbGxpbmcgcGdfbGFzdF93YWxfcmVwbGF5X2xzbiByZXR1cm5l ZCB0aGF0IExTTi4KK215ICRsYXN0X2xzbl9yZWFjaGVkID0gJHN0YW5kYnlfcmVzdWx0cyA9fiAv JGxzbjQvOworb2soJGxhc3RfbHNuX3JlYWNoZWQsICJXQUlUIEZPUiBMU04gd29ya3MgaW5zaWRl IGEgdHJhbnNhY3Rpb24iKTsKKworIyBDaGVjayB0aGF0IHRyYW5zYWN0aW9uIGRvZXNuJ3QgYnJl YWsgYW5kIHNob3cgdXMgdGhlIG5ldyBtYXggdmFsdWUgYWZ0ZXIgV0FJVC4KKyMgRm9yIHRoYXQs IG1ha2Ugc3VyZSB0aGF0IHRoZSBvbGRlciBtYXggdmFsdWUgaXMgcmVwZWF0ZWQgdHdpY2UgaW4g dGhlIHJlc3VsdHMuCitteSAkY291bnQgPSAoKSA9ICRzdGFuZGJ5X3Jlc3VsdHMgPX4gLzQwL2c7 CitvaygkY291bnQgZXEgMiwgInRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCBkb2Vzbid0IGdl dCBicm9rZW4gZHVlIHRvIFdBSVQiKTsKKworCisKKyMgR2V0IG11bHRpcGxlIExTTnMgZm9yIHRl c3RpbmcgV0FJVCBGT1IgQU5ZIC8gV0FJVCBGT1IgQUxMCiskbm9kZV9tYXN0ZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB3YWl0X3Rlc3QgVkFMVUVTIChnZW5lcmF0ZV9z ZXJpZXMoNTEsIDYwKSkiKTsKK215ICRsc241ID0gJG5vZGVfbWFzdGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIlNFTEVDVCBwZ19jdXJyZW50X3dhbF9sc24oKSIpOworJG5vZGVfbWFzdGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5TRVJUIElOVE8gd2FpdF90ZXN0IFZBTFVFUyAoZ2Vu ZXJhdGVfc2VyaWVzKDYxLCA3MDAwMCkpIik7CitteSAkbHNuNiA9ICRub2RlX21hc3Rlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcGdfY3VycmVudF93YWxfbHNuKCkiKTsKKyRub2Rl X21hc3Rlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJTlRPIHdhaXRfdGVzdCBW QUxVRVMgKGdlbmVyYXRlX3Nlcmllcyg2MSwgODAwMDAwKSkiKTsKK215ICRsc243ID0gJG5vZGVf bWFzdGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBwZ19jdXJyZW50X3dhbF9sc24o KSIpOworCisjIENoZWNrIHRoYXQgV0FJVCBGT1IgQU5ZIHdvcmtzIGZpbmUKKyRub2RlX3N0YW5k YnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJXQUlUIEZPUiBBTlkgTFNOICckbHNuNScgTFNO ICckbHNuNicgTFNOICckbHNuNyciKTsKKyRsc25fc3RhbmRieSA9ICRub2RlX3N0YW5kYnktPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGdfbGFzdF93YWxfcmVwbGF5X2xzbigpIik7 CiskY29tcGFyZV9sc25zID0gJG5vZGVfc3RhbmRieS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJ IlNFTEVDVCBwZ19sc25fY21wKCckbHNuX3N0YW5kYnknOjpwZ19sc24sICckbHNuNSc6OnBnX2xz bikiKTsKK29rKCRjb21wYXJlX2xzbnMgZ2UgMCwKKwkiV0FJVCBGT1IgQU5ZIG1ha2VzIHVzIHJl YWNoIGF0IGxlYXN0IHRoZSBtaW5pbXVtIExTTiBmcm9tIHRoZSBsaXN0Iik7CiskY29tcGFyZV9s c25zID0gJG5vZGVfc3RhbmRieS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwZ19s c25fY21wKCckbHNuX3N0YW5kYnknOjpwZ19sc24sICckbHNuNyc6OnBnX2xzbikiKTsKKyMgVE9E TzogQ291bGQgdGhpcyBzb21laG93IGZhaWwgZHVlIHRvIHRoZSBtYWNoaW5lIGJlaW5nIHZlcnkg ZmFzdCBhdCBhcHBseWluZyBMU04/CitvaygkY29tcGFyZV9sc25zIGx0IDAsCisJIldBSVQgRk9S IEFOWSBkaWRuJ3QgbWFrZSB1cyByZWFjaCB0aGUgbWF4aW11bSBMU04gZnJvbSB0aGUgbGlzdCIp OworCisjIENoZWNrIHRoYXQgV0FJVCBGT1IgQUxMIHdvcmtzIGZpbmUKKyRub2RlX3N0YW5kYnkt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJXQUlUIEZPUiBBTEwgTFNOICckbHNuNScsIExTTiAn JGxzbjYnLCBMU04gJyRsc243JyIpOworJGxzbl9zdGFuZGJ5ID0gJG5vZGVfc3RhbmRieS0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwZ19sYXN0X3dhbF9yZXBsYXlfbHNuKCkiKTsK KyRjb21wYXJlX2xzbnMgPSAkbm9kZV9zdGFuZGJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwki U0VMRUNUIHBnX2xzbl9jbXAoJyRsc25fc3RhbmRieSc6OnBnX2xzbiwgJyRsc243Jzo6cGdfbHNu KSIpOworb2soJGNvbXBhcmVfbHNucyBlcSAwLAorCSJXQUlUIEZPUiBBTEwgbWFrZXMgdXMgcmVh Y2ggdGhlIG1heGltdW0gTFNOIGZyb20gdGhlIGxpc3QiKTsKKworCisKKyRub2RlX3N0YW5kYnkt PnN0b3A7Ciskbm9kZV9tYXN0ZXItPnN0b3A7Cg== --=_fde5c2e9db902737c11ce6731e37fec7--