From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dmta1005.nifty.com (mta-snd01002.nifty.com [106.153.227.34]) by sourceware.org (Postfix) with ESMTPS id D1FC03858436 for ; Wed, 27 Sep 2023 10:50:41 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D1FC03858436 Authentication-Results: sourceware.org; dmarc=fail (p=none dis=none) header.from=nifty.ne.jp Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=nifty.ne.jp Received: from HP-Z230 by dmta1005.nifty.com with ESMTP id <20230927105039296.ZHDT.44550.HP-Z230@nifty.com> for ; Wed, 27 Sep 2023 19:50:39 +0900 Date: Wed, 27 Sep 2023 19:50:39 +0900 From: Takashi Yano To: cygwin@cygwin.com Subject: Re: std::runtime_error on std::locale("") Message-Id: <20230927195039.e62f7482898ab5615cc1605b@nifty.ne.jp> In-Reply-To: <20230923172359.d854a5a98afbc44beaf50c78@nifty.ne.jp> References: <20230922011204.bb166498090e6cbe163349f3@nifty.ne.jp> <87o7huzos2.fsf@Otto.invalid> <20230923172359.d854a5a98afbc44beaf50c78@nifty.ne.jp> X-Mailer: Sylpheed 3.7.0 (GTK+ 2.24.30; i686-pc-mingw32) Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart=_Wed__27_Sep_2023_19_50_39_+0900_=sZ.W=81WNihN9Sy" X-Spam-Status: No, score=-10.5 required=5.0 tests=BAYES_00,GIT_PATCH_0,KAM_DMARC_STATUS,KAM_SHORT,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --Multipart=_Wed__27_Sep_2023_19_50_39_+0900_=sZ.W=81WNihN9Sy Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Hi Achim, On Sat, 23 Sep 2023 17:23:59 +0900 Takashi Yano via Cygwin wrote: > On Fri, 22 Sep 2023 08:48:45 +0200 > ASSI wrote: > > Takashi Yano via Cygwin writes: > > > I wonder why the following code throws std::runtime_error > > > even though the LC_ALL is set to valid locale other than "C". > > > This does not occur only when LC_ALL is set to "C". > > > > This functionality is currently only supported for Glibc targets in > > libstdc++. I seem to remember that I've looked into this some time ago, > > but there didn't seem to be an easy way of enabling it for Cygwin at > > that time. > > Thanks for the answer. > > It might not be an easy way, but I tried to enabling the locale > feature for libstdc++. > > Please try: > > 1) Run cygport gcc prep > 2) Remove libstdc++-v3/config/locale/generic > 3) Copy libstdc++-v3/config/locale/gnu to libstdc++-v3/config/locale/generic > 4) Apply patches attached to the working source directory. > 5) Run cygport gcc compile > > I also tried to automate above steps in gcc.cygport. > > Further, I tested and confirmed that a few test cases works as expected. > > What do you think of this idea? I have a new revised draft patch. The patch attached is against the HEAD of upstream gcc repository. However, it can be applied to 11.4.0 as well if s/c++11/c++98/g. This is not a last-minute job like last time, but a full rework. Any advice or comment would be appreciated. -- Takashi Yano --Multipart=_Wed__27_Sep_2023_19_50_39_+0900_=sZ.W=81WNihN9Sy Content-Type: text/plain; name="0001-libstdc-Implement-most-of-locale-features-for-newlib.patch" Content-Disposition: attachment; filename="0001-libstdc-Implement-most-of-locale-features-for-newlib.patch" Content-Transfer-Encoding: base64 RnJvbSAwMjY4NWJiZjc2NDNmNjJkMWE4YjM4MGI2MDQ5YzM3ZWRmZGY0MzFhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQ0KRnJvbTogVGFrYXNoaSBZYW5vIDx0YWthc2hpLnlhbm9AbmlmdHkubmUu anA+DQpEYXRlOiBTdW4sIDI0IFNlcCAyMDIzIDEzOjEzOjA4ICswOTAwDQpTdWJqZWN0OiBbUEFU Q0hdIGxpYnN0ZGMrKzogSW1wbGVtZW50IG1vc3Qgb2YgbG9jYWxlIGZlYXR1cmVzIGZvciBuZXds aWIuDQoNClByZXZpb3VzbHksIGxvY2FsZSBpbXBsZW1lbnRhdGlvbiBmb3IgbmV3bGliIHN1cHBv cnRzIG9ubHkgIkMiIGxvY2FsZS4NCldpdGggdGhpcyBwYXRjaCwgdGhlIGxvY2FsZSBpbXBsZW1l bnRhdGlvbiBmb3IgbmV3bGliIGhhcyBiZWVuIG11Y2gNCmltcHJvdmVkIHVzaW5nIG5ld2xpYiBm dW5jdGlvbmFsaXR5IGN1cnJlbnRseSBzdXBwb3J0ZWQgc28gdGhhdCBtb3N0DQpvZiBsb2NhbGUg ZmVhdHVyZXMgY2FuIGJlIHVzZWQuIFRoZSBtb3N0IG9mIHRoZSBjb2RlcyBhcmUgYmFzZWQgb24N CnRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIEdOVSBsaWJjLg0KLS0tDQogbGlic3RkYysrLXYz L01ha2VmaWxlLmluICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsNCiBsaWJzdGRjKystdjMv YWNpbmNsdWRlLm00ICAgICAgICAgICAgICAgICAgICAgfCAgMjggKy0NCiAuLi4vY29uZmlnL2xv Y2FsZS9kcmFnb25mbHkvY19sb2NhbGUuY2MgICAgICAgfCAgIDEgKw0KIC4uLi9jb25maWcvbG9j YWxlL2dlbmVyaWMvY19sb2NhbGUuY2MgICAgICAgICB8ICAgMSArDQogbGlic3RkYysrLXYzL2Nv bmZpZy9sb2NhbGUvZ251L2NfbG9jYWxlLmNjICAgIHwgICAxICsNCiAuLi4vbG9jYWxlL2llZWVf MTAwMy4xLTIwMDEvY19sb2NhbGUuY2MgICAgICAgfCAgIDIgKw0KIC4uLi9jb25maWcvbG9jYWxl L25ld2xpYi9jKytsb2NhbGVfaW50ZXJuYWwuaCB8ICA5NSArKw0KIGxpYnN0ZGMrKy12My9jb25m aWcvbG9jYWxlL25ld2xpYi9jX2xvY2FsZS5jYyB8IDM4NCArKysrKysrDQogbGlic3RkYysrLXYz L2NvbmZpZy9sb2NhbGUvbmV3bGliL2NfbG9jYWxlLmggIHwgIDgyICsrDQogLi4uL2NvbmZpZy9s b2NhbGUvbmV3bGliL2NvZGVjdnRfbWVtYmVycy5jYyAgIHwgMjg4ICsrKysrKw0KIC4uLi9jb25m aWcvbG9jYWxlL25ld2xpYi9jb2xsYXRlX21lbWJlcnMuY2MgICB8ICA3NCArKw0KIC4uLi9jb25m aWcvbG9jYWxlL25ld2xpYi9jdHlwZV9tZW1iZXJzLmNjICAgICB8ICA1OCArLQ0KIC4uLi9jb25m aWcvbG9jYWxlL25ld2xpYi9tZXNzYWdlc19tZW1iZXJzLmNjICB8IDE3MyArKysrDQogLi4uL2Nv bmZpZy9sb2NhbGUvbmV3bGliL21lc3NhZ2VzX21lbWJlcnMuaCAgIHwgMTUyICsrKw0KIC4uLi9j b25maWcvbG9jYWxlL25ld2xpYi9tb25ldGFyeV9tZW1iZXJzLmNjICB8IDk0MiArKysrKysrKysr KysrKysrKysNCiAuLi4vY29uZmlnL2xvY2FsZS9uZXdsaWIvbnVtZXJpY19tZW1iZXJzLmNjICAg fCAyODIgKysrKysrDQogLi4uL2NvbmZpZy9sb2NhbGUvbmV3bGliL3RpbWVfbWVtYmVycy5jYyAg ICAgIHwgMzc5ICsrKysrKysNCiAuLi4vY29uZmlnL2xvY2FsZS9uZXdsaWIvdGltZV9tZW1iZXJz LmggICAgICAgfCAgOTAgKysNCiBsaWJzdGRjKystdjMvY29uZmlndXJlICAgICAgICAgICAgICAg ICAgICAgICAgfCAgMjkgKy0NCiBsaWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluICAgICAgICAg ICAgICAgICAgfCAgIDMgKy0NCiBsaWJzdGRjKystdjMvc3JjL2MrKzExL2xvY2FsZV9pbml0LmNj ICAgICAgICAgfCAgIDMgKy0NCiAyMSBmaWxlcyBjaGFuZ2VkLCAzMDE2IGluc2VydGlvbnMoKyks IDUyIGRlbGV0aW9ucygtKQ0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmln L2xvY2FsZS9uZXdsaWIvYysrbG9jYWxlX2ludGVybmFsLmgNCiBjcmVhdGUgbW9kZSAxMDA2NDQg bGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGliL2NfbG9jYWxlLmNjDQogY3JlYXRlIG1v ZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25ld2xpYi9jX2xvY2FsZS5oDQog Y3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25ld2xpYi9jb2Rl Y3Z0X21lbWJlcnMuY2MNCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9s b2NhbGUvbmV3bGliL2NvbGxhdGVfbWVtYmVycy5jYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJz dGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvbWVzc2FnZXNfbWVtYmVycy5jYw0KIGNyZWF0 ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvbWVzc2FnZXNf bWVtYmVycy5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxl L25ld2xpYi9tb25ldGFyeV9tZW1iZXJzLmNjDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMr Ky12My9jb25maWcvbG9jYWxlL25ld2xpYi9udW1lcmljX21lbWJlcnMuY2MNCiBjcmVhdGUgbW9k ZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGliL3RpbWVfbWVtYmVycy5j Yw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIv dGltZV9tZW1iZXJzLmgNCg0KZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9NYWtlZmlsZS5pbiBi L2xpYnN0ZGMrKy12My9NYWtlZmlsZS5pbg0KaW5kZXggNTAwYzBkNzUyODIuLmMwNWQyMGUyNTY4 IDEwMDY0NA0KLS0tIGEvbGlic3RkYysrLXYzL01ha2VmaWxlLmluDQorKysgYi9saWJzdGRjKyst djMvTWFrZWZpbGUuaW4NCkBAIC0yNDQsNiArMjQ0LDcgQEAgRVJST1JfQ09OU1RBTlRTX1NSQ0RJ UiA9IEBFUlJPUl9DT05TVEFOVFNfU1JDRElSQA0KIEVYRUVYVCA9IEBFWEVFWFRADQogRVhUUkFf Q0ZMQUdTID0gQEVYVFJBX0NGTEFHU0ANCiBFWFRSQV9DWFhfRkxBR1MgPSBARVhUUkFfQ1hYX0ZM QUdTQA0KK0VYVFJBX0xJQlMgPSBARVhUUkFfTElCU0ANCiBGR1JFUCA9IEBGR1JFUEANCiBGT1JN QVRfRklMRSA9IEBGT1JNQVRfRklMRUANCiBGUkVFU1RBTkRJTkdfRkxBR1MgPSBARlJFRVNUQU5E SU5HX0ZMQUdTQA0KZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQgYi9saWJz dGRjKystdjMvYWNpbmNsdWRlLm00DQppbmRleCBkOGYwYmExYzNlMi4uMjAyYjNjNDc1Y2YgMTAw NjQ0DQotLS0gYS9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00DQorKysgYi9saWJzdGRjKystdjMv YWNpbmNsdWRlLm00DQpAQCAtMjgwNyw3ICsyODA3LDcgQEAgQUNfREVGVU4oW0dMSUJDWFhfRU5B QkxFX0NMT0NBTEVdLCBbDQogICAgICAgZHJhZ29uZmx5KiB8IGZyZWVic2QqKQ0KIAllbmFibGVf Y2xvY2FsZV9mbGFnPWRyYWdvbmZseQ0KIAk7Ow0KLSAgICAgIG9wZW5ic2QqKQ0KKyAgICAgIG9w ZW5ic2QqIHwgY3lnd2luKikNCiAJZW5hYmxlX2Nsb2NhbGVfZmxhZz1uZXdsaWINCiAJOzsNCiAg ICAgICAqKQ0KQEAgLTI4MTksNiArMjgxOSwxMCBAQCBBQ19ERUZVTihbR0xJQkNYWF9FTkFCTEVf Q0xPQ0FMRV0sIFsNCiAJOzsNCiAgICAgZXNhYw0KICAgZmkNCisgIGNhc2UgJHt0YXJnZXRfb3N9 IGluIGN5Z3dpbiopDQorICAgIEVYVFJBX0xJQlM9Ii1saW50bCINCisgICAgOzsNCisgIGVzYWMN CiANCiAgICMgU2FuaXR5IGNoZWNrIG1vZGVsLCBhbmQgdGVzdCBmb3Igc3BlY2lhbCBmdW5jdGlv bmFsaXR5Lg0KICAgaWYgdGVzdCAkZW5hYmxlX2Nsb2NhbGVfZmxhZyA9IGdudTsgdGhlbg0KQEAg LTI5ODQsMTggKzI5ODgsMTggQEAgQUNfREVGVU4oW0dMSUJDWFhfRU5BQkxFX0NMT0NBTEVdLCBb DQogICAgIG5ld2xpYikNCiAgICAgICBBQ19NU0dfUkVTVUxUKG5ld2xpYikNCiANCi0gICAgICBD TE9DQUxFX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmgNCi0gICAgICBDTE9DQUxF X0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYw0KLSAgICAgIENDT0RFQ1ZUX0ND PWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jb2RlY3Z0X21lbWJlcnMuY2MNCi0gICAgICBDQ09MTEFU RV9DQz1jb25maWcvbG9jYWxlL2dlbmVyaWMvY29sbGF0ZV9tZW1iZXJzLmNjDQorICAgICAgQ0xP Q0FMRV9IPWNvbmZpZy9sb2NhbGUvbmV3bGliL2NfbG9jYWxlLmgNCisgICAgICBDTE9DQUxFX0ND PWNvbmZpZy9sb2NhbGUvbmV3bGliL2NfbG9jYWxlLmNjDQorICAgICAgQ0NPREVDVlRfQ0M9Y29u ZmlnL2xvY2FsZS9uZXdsaWIvY29kZWN2dF9tZW1iZXJzLmNjDQorICAgICAgQ0NPTExBVEVfQ0M9 Y29uZmlnL2xvY2FsZS9uZXdsaWIvY29sbGF0ZV9tZW1iZXJzLmNjDQogICAgICAgQ0NUWVBFX0ND PWNvbmZpZy9sb2NhbGUvbmV3bGliL2N0eXBlX21lbWJlcnMuY2MNCi0gICAgICBDTUVTU0FHRVNf SD1jb25maWcvbG9jYWxlL2dlbmVyaWMvbWVzc2FnZXNfbWVtYmVycy5oDQotICAgICAgQ01FU1NB R0VTX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9tZXNzYWdlc19tZW1iZXJzLmNjDQotICAgICAg Q01PTkVZX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9tb25ldGFyeV9tZW1iZXJzLmNjDQotICAg ICAgQ05VTUVSSUNfQ0M9Y29uZmlnL2xvY2FsZS9nZW5lcmljL251bWVyaWNfbWVtYmVycy5jYw0K LSAgICAgIENUSU1FX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL3RpbWVfbWVtYmVycy5oDQotICAg ICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS9nZW5lcmljL3RpbWVfbWVtYmVycy5jYw0KLSAgICAg IENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL2dlbmVyaWMvYysrbG9jYWxlX2ludGVy bmFsLmgNCisgICAgICBDTUVTU0FHRVNfSD1jb25maWcvbG9jYWxlL25ld2xpYi9tZXNzYWdlc19t ZW1iZXJzLmgNCisgICAgICBDTUVTU0FHRVNfQ0M9Y29uZmlnL2xvY2FsZS9uZXdsaWIvbWVzc2Fn ZXNfbWVtYmVycy5jYw0KKyAgICAgIENNT05FWV9DQz1jb25maWcvbG9jYWxlL25ld2xpYi9tb25l dGFyeV9tZW1iZXJzLmNjDQorICAgICAgQ05VTUVSSUNfQ0M9Y29uZmlnL2xvY2FsZS9uZXdsaWIv bnVtZXJpY19tZW1iZXJzLmNjDQorICAgICAgQ1RJTUVfSD1jb25maWcvbG9jYWxlL25ld2xpYi90 aW1lX21lbWJlcnMuaA0KKyAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvbmV3bGliL3RpbWVf bWVtYmVycy5jYw0KKyAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL25ld2xp Yi9jKytsb2NhbGVfaW50ZXJuYWwuaA0KICAgICAgIDs7DQogICBlc2FjDQogDQpkaWZmIC0tZ2l0 IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZHJhZ29uZmx5L2NfbG9jYWxlLmNjIGIvbGli c3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZHJhZ29uZmx5L2NfbG9jYWxlLmNjDQppbmRleCBmMDI2 ZTE3ZDVhMC4uMGUxMDE4OGYyMjAgMTAwNjQ0DQotLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xv Y2FsZS9kcmFnb25mbHkvY19sb2NhbGUuY2MNCisrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9j YWxlL2RyYWdvbmZseS9jX2xvY2FsZS5jYw0KQEAgLTE4OCw2ICsxODgsNyBAQCBuYW1lc3BhY2Ug c3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkNCiBfR0xJQkNYWF9CRUdJTl9OQU1FU1BB Q0VfVkVSU0lPTg0KIA0KICAgY29uc3QgY2hhciogY29uc3QqIGNvbnN0IGxvY2FsZTo6X1NfY2F0 ZWdvcmllcyA9IF9fZ251X2N4eDo6Y2F0ZWdvcnlfbmFtZXM7DQorICBjb25zdCBfX3R5cGVvZihz ZXRsb2NhbGUpICpfX3NldGxvY2FsZSA9IHNldGxvY2FsZTsNCiANCiBfR0xJQkNYWF9FTkRfTkFN RVNQQUNFX1ZFUlNJT04NCiB9IC8vIG5hbWVzcGFjZQ0KZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12 My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MgYi9saWJzdGRjKystdjMvY29uZmln L2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjDQppbmRleCA4ODQ5ZDc4ZmRmYS4uMjdhMjQ2OTIx ZTYgMTAwNjQ0DQotLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9j YWxlLmNjDQorKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxl LmNjDQpAQCAtMjg0LDYgKzI4NCw3IEBAIG5hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElU WShkZWZhdWx0KQ0KIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9ODQogDQogICBjb25z dCBjaGFyKiBjb25zdCogY29uc3QgbG9jYWxlOjpfU19jYXRlZ29yaWVzID0gX19nbnVfY3h4Ojpj YXRlZ29yeV9uYW1lczsNCisgIGNvbnN0IF9fdHlwZW9mKHNldGxvY2FsZSkgKl9fc2V0bG9jYWxl ID0gc2V0bG9jYWxlOw0KIA0KIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTg0KIH0gLy8g bmFtZXNwYWNlDQpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ251L2Nf bG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ251L2NfbG9jYWxlLmNjDQpp bmRleCA1ZGRiZGUxZTZjYy4uNTUyNzFiNjE2MWIgMTAwNjQ0DQotLS0gYS9saWJzdGRjKystdjMv Y29uZmlnL2xvY2FsZS9nbnUvY19sb2NhbGUuY2MNCisrKyBiL2xpYnN0ZGMrKy12My9jb25maWcv bG9jYWxlL2dudS9jX2xvY2FsZS5jYw0KQEAgLTI4Myw2ICsyODMsNyBAQCBuYW1lc3BhY2Ugc3Rk IF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkNCiBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Vf VkVSU0lPTg0KIA0KICAgY29uc3QgY2hhciogY29uc3QqIGNvbnN0IGxvY2FsZTo6X1NfY2F0ZWdv cmllcyA9IF9fZ251X2N4eDo6Y2F0ZWdvcnlfbmFtZXM7DQorICBjb25zdCBfX3R5cGVvZihzZXRs b2NhbGUpICpfX3NldGxvY2FsZSA9IHNldGxvY2FsZTsNCiANCiBfR0xJQkNYWF9FTkRfTkFNRVNQ QUNFX1ZFUlNJT04NCiB9IC8vIG5hbWVzcGFjZQ0KZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9j b25maWcvbG9jYWxlL2llZWVfMTAwMy4xLTIwMDEvY19sb2NhbGUuY2MgYi9saWJzdGRjKystdjMv Y29uZmlnL2xvY2FsZS9pZWVlXzEwMDMuMS0yMDAxL2NfbG9jYWxlLmNjDQppbmRleCBjOTExODNl MmY4Yy4uMjg3MjM0YThjNjcgMTAwNjQ0DQotLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2Fs ZS9pZWVlXzEwMDMuMS0yMDAxL2NfbG9jYWxlLmNjDQorKysgYi9saWJzdGRjKystdjMvY29uZmln L2xvY2FsZS9pZWVlXzEwMDMuMS0yMDAxL2NfbG9jYWxlLmNjDQpAQCAtMTAzLDUgKzEwMyw3IEBA IG5hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQ0KICAgICAgIF9NX25l Z19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47DQogICAgIH0NCiAjZW5k aWYNCisNCisgIGNvbnN0IF9fdHlwZW9mKHNldGxvY2FsZSkgKl9fc2V0bG9jYWxlID0gc2V0bG9j YWxlOw0KIH0gIC8vIG5hbWVzcGFjZSBzdGQNCiANCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMv Y29uZmlnL2xvY2FsZS9uZXdsaWIvYysrbG9jYWxlX2ludGVybmFsLmggYi9saWJzdGRjKystdjMv Y29uZmlnL2xvY2FsZS9uZXdsaWIvYysrbG9jYWxlX2ludGVybmFsLmgNCm5ldyBmaWxlIG1vZGUg MTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMC4uMzUxZDQ1NjZiM2ENCi0tLSAvZGV2L251bGwNCisr KyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25ld2xpYi9jKytsb2NhbGVfaW50ZXJuYWwu aA0KQEAgLTAsMCArMSw5NSBAQA0KKy8vIExvY2FsZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBo ZWFkZXIgLSotIEMrKyAtKi0NCisNCisvLyBDb3B5cmlnaHQgKEMpIDIwMDItMjAyMyBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NCisvLw0KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo ZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUNCisvLyBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUNCisv LyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 IHRoZQ0KKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3Ig KGF0IHlvdXIgb3B0aW9uKQ0KKy8vIGFueSBsYXRlciB2ZXJzaW9uLg0KKw0KKy8vIFRoaXMgbGli cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0K Ky8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mDQorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQ0KKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuDQorDQorLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlv dSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsDQorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRo ZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbg0KKy8vIDMuMSwgYXMgcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uDQorDQorLy8gWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YW5kDQorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbTsNCisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZ SU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUNCisvLyA8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uDQorDQorLyoqIEBmaWxlIGJpdHMvYysrbG9jYWxlX2ludGVybmFs LmgNCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3Ro ZXIgbGlicmFyeSBoZWFkZXJzLg0KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0 bHkuIEBoZWFkZXJuYW1le2xvY2FsZX0NCisgKi8NCisNCisvLyBXcml0dGVuIGJ5IEpha3ViIEpl bGluZWsgPGpha3ViQHJlZGhhdC5jb20+DQorLy8gTW9kaWZpZWQgYnkgVGFrYXNoaSBZYW5vIDx0 YWthc2hpLnlhbm9AbmlmdHkubmUuanA+DQorDQorI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+ DQorI2luY2x1ZGUgPGNsb2NhbGU+DQorI2luY2x1ZGUgPGNzdGRsaWI+DQorI2luY2x1ZGUgPGNz dHJpbmc+DQorI2luY2x1ZGUgPGNzdGRkZWY+DQorI2luY2x1ZGUgPGxhbmdpbmZvLmg+DQorDQor I2luY2x1ZGUgPHZlY3Rvcj4NCisjaW5jbHVkZSA8c3RyaW5nLmg+CS8vIDo6c3RyZHVwDQorDQor I2luY2x1ZGUgPGV4dC9jb25jdXJyZW5jZS5oPg0KKw0KK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhf VklTSUJJTElUWShkZWZhdWx0KQ0KK3sNCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lP Tg0KKw0KKyAgc3RydWN0IENhdGFsb2dfaW5mbw0KKyAgew0KKyAgICBDYXRhbG9nX2luZm8obWVz c2FnZXNfYmFzZTo6Y2F0YWxvZyBfX2lkLCBjb25zdCBjaGFyKiBfX2RvbWFpbiwNCisJCSBsb2Nh bGUgX19sb2MpDQorICAgICAgOiBfTV9pZChfX2lkKSwgX01fZG9tYWluKHN0cmR1cChfX2RvbWFp bikpLCBfTV9sb2NhbGUoX19sb2MpDQorICAgIHsgfQ0KKw0KKyAgICB+Q2F0YWxvZ19pbmZvKCkN CisgICAgeyBmcmVlKF9NX2RvbWFpbik7IH0NCisNCisgICAgbWVzc2FnZXNfYmFzZTo6Y2F0YWxv ZyBfTV9pZDsNCisgICAgY2hhciogX01fZG9tYWluOw0KKyAgICBsb2NhbGUgX01fbG9jYWxlOw0K Kw0KKyAgcHJpdmF0ZToNCisgICAgQ2F0YWxvZ19pbmZvKGNvbnN0IENhdGFsb2dfaW5mbyYpOw0K Kw0KKyAgICBDYXRhbG9nX2luZm8mDQorICAgIG9wZXJhdG9yPShjb25zdCBDYXRhbG9nX2luZm8m KTsNCisgIH07DQorDQorICBjbGFzcyBDYXRhbG9ncw0KKyAgew0KKyAgcHVibGljOg0KKyAgICBD YXRhbG9ncygpIDogX01fY2F0YWxvZ19jb3VudGVyKDApIHsgfQ0KKyAgICB+Q2F0YWxvZ3MoKTsN CisNCisgICAgbWVzc2FnZXNfYmFzZTo6Y2F0YWxvZw0KKyAgICBfTV9hZGQoY29uc3QgY2hhciog X19kb21haW4sIGxvY2FsZSBfX2wpOw0KKw0KKyAgICB2b2lkDQorICAgIF9NX2VyYXNlKG1lc3Nh Z2VzX2Jhc2U6OmNhdGFsb2cgX19jKTsNCisNCisgICAgY29uc3QgQ2F0YWxvZ19pbmZvKg0KKyAg ICBfTV9nZXQobWVzc2FnZXNfYmFzZTo6Y2F0YWxvZyBfX2MpIGNvbnN0Ow0KKw0KKyAgcHJpdmF0 ZToNCisgICAgbXV0YWJsZSBfX2dudV9jeHg6Ol9fbXV0ZXggX01fbXV0ZXg7DQorICAgIG1lc3Nh Z2VzX2Jhc2U6OmNhdGFsb2cgX01fY2F0YWxvZ19jb3VudGVyOw0KKyAgICB2ZWN0b3I8Q2F0YWxv Z19pbmZvKj4gX01faW5mb3M7DQorICB9Ow0KKw0KKyAgQ2F0YWxvZ3MmDQorICBnZXRfY2F0YWxv Z3MoKTsNCisNCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04NCit9IC8vIG5hbWVzcGFj ZQ0KZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25ld2xpYi9jX2xvY2Fs ZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25ld2xpYi9jX2xvY2FsZS5jYw0KbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwLi5jNDllNTc1Mzk0Yg0KLS0tIC9k ZXYvbnVsbA0KKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGliL2NfbG9jYWxl LmNjDQpAQCAtMCwwICsxLDM4NCBAQA0KKy8vIFdyYXBwZXIgZm9yIHVuZGVybHlpbmcgQy1sYW5n dWFnZSBsb2NhbGl6YXRpb24gLSotIEMrKyAtKi0NCisNCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEt MjAyMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NCisvLw0KKy8vIFRoaXMgZmlsZSBp cyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUN CisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1 bmRlciB0aGUNCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5IHRoZQ0KKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl cnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQ0KKy8vIGFueSBsYXRlciB2ZXJzaW9uLg0KKw0K Ky8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLA0KKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorDQorLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2 ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsDQorLy8gcGVybWlzc2lvbnMgZGVz Y3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbg0KKy8v IDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uDQorDQor Ly8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYW5kDQorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4 Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsNCisvLyBzZWUgdGhlIGZpbGVzIENPUFlJ TkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUNCisvLyA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uDQorDQorLy8NCisvLyBJU08gQysrIDE0ODgy OiAyMi44ICBTdGFuZGFyZCBsb2NhbGUgY2F0ZWdvcmllcy4NCisvLw0KKw0KKy8vIFdyaXR0ZW4g YnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+DQorLy8gTW9kaWZpZWQgYnkgVGFr YXNoaSBZYW5vIDx0YWthc2hpLnlhbm9AbmlmdHkubmUuanA+DQorDQorI2RlZmluZSBfR05VX1NP VVJDRSAxDQorI2luY2x1ZGUgPGNzdGRpbz4NCisjaW5jbHVkZSA8bG9jYWxlPg0KKyNpbmNsdWRl IDxzdGRleGNlcHQ+DQorI2luY2x1ZGUgPGxpbWl0cz4NCisjaW5jbHVkZSA8YWxnb3JpdGhtPg0K KyNpbmNsdWRlIDxsYW5naW5mby5oPg0KKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5h bC5oPg0KKw0KKyNpbmNsdWRlIDxiYWNrd2FyZC9hdXRvX3B0ci5oPg0KKw0KKy8qIE5ld2xpYiBj b25zdGF0bnQgKi8NCisjZGVmaW5lIEVOQ09ESU5HX0xFTiAzMQ0KKyNkZWZpbmUgQ0FURUdPUllf TEVOIDExDQorI2RlZmluZSBOVU1fQ0FURUdPUklFUyA2DQorI2RlZmluZSB4c3RyKHMpIHN0cihz KQ0KKyNkZWZpbmUgc3RyKHMpICNzDQorI2RlZmluZSBGTVRfTE9DQUxFICIlIiB4c3RyKENBVEVH T1JZX0xFTikgIltePV09JSIgeHN0cihFTkNPRElOR19MRU4pICJbXjtdIg0KKw0KK25hbWVzcGFj ZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQ0KK3sNCitfR0xJQkNYWF9CRUdJTl9O QU1FU1BBQ0VfVkVSU0lPTg0KKw0KKyAgdGVtcGxhdGU8Pg0KKyAgICB2b2lkDQorICAgIF9fY29u dmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZmxvYXQmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUm IF9fZXJyLA0KKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKSB0aHJvdygpDQorICAgIHsN CisgICAgICBjaGFyKiBfX3Nhbml0eTsNCisgICAgICBfX3YgPSBzdHJ0b2ZfbChfX3MsICZfX3Nh bml0eSwgX19jbG9jKTsNCisNCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RT DQorICAgICAgLy8gMjMuIE51bV9nZXQgb3ZlcmZsb3cgcmVzdWx0Lg0KKyAgICAgIGlmIChfX3Nh bml0eSA9PSBfX3MgfHwgKl9fc2FuaXR5ICE9ICdcMCcpDQorCXsNCisJICBfX3YgPSAwLjBmOw0K KwkgIF9fZXJyID0gaW9zX2Jhc2U6OmZhaWxiaXQ7DQorCX0NCisgICAgICBlbHNlIGlmIChfX3Yg PT0gbnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpKQ0KKwl7DQorCSAgX192ID0gbnVt ZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKTsNCisJICBfX2VyciA9IGlvc19iYXNlOjpmYWlsYml0 Ow0KKwl9DQorICAgICAgZWxzZSBpZiAoX192ID09IC1udW1lcmljX2xpbWl0czxmbG9hdD46Omlu ZmluaXR5KCkpDQorCXsNCisJICBfX3YgPSAtbnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKTsN CisJICBfX2VyciA9IGlvc19iYXNlOjpmYWlsYml0Ow0KKwl9DQorICAgIH0NCisNCisgIHRlbXBs YXRlPD4NCisgICAgdm9pZA0KKyAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGRv dWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsDQorCQkgICBjb25zdCBfX2NfbG9j YWxlJiBfX2Nsb2MpIHRocm93KCkNCisgICAgew0KKyAgICAgIGNoYXIqIF9fc2FuaXR5Ow0KKyAg ICAgIF9fdiA9IHN0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOw0KKw0KKyAgICAgIC8v IF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMNCisgICAgICAvLyAyMy4gTnVtX2dldCBvdmVy ZmxvdyByZXN1bHQuDQorICAgICAgaWYgKF9fc2FuaXR5ID09IF9fcyB8fCAqX19zYW5pdHkgIT0g J1wwJykNCisJew0KKwkgIF9fdiA9IDAuMDsNCisJICBfX2VyciA9IGlvc19iYXNlOjpmYWlsYml0 Ow0KKwl9DQorICAgICAgZWxzZSBpZiAoX192ID09IG51bWVyaWNfbGltaXRzPGRvdWJsZT46Omlu ZmluaXR5KCkpDQorCXsNCisJICBfX3YgPSBudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKTsN CisJICBfX2VyciA9IGlvc19iYXNlOjpmYWlsYml0Ow0KKwl9DQorICAgICAgZWxzZSBpZiAoX192 ID09IC1udW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKQ0KKwl7DQorCSAgX192ID0g LW51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCgpOw0KKwkgIF9fZXJyID0gaW9zX2Jhc2U6OmZh aWxiaXQ7DQorCX0NCisgICAgfQ0KKw0KKyAgdGVtcGxhdGU8Pg0KKyAgICB2b2lkDQorICAgIF9f Y29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgbG9uZyBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6 Omlvc3RhdGUmIF9fZXJyLA0KKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKSB0aHJvdygp DQorICAgIHsNCisgICAgICBjaGFyKiBfX3Nhbml0eTsNCisgICAgICBfX3YgPSBzdHJ0b2xkX2wo X19zLCAmX19zYW5pdHksIF9fY2xvYyk7DQorDQorICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9M SUJfREVGRUNUUw0KKyAgICAgIC8vIDIzLiBOdW1fZ2V0IG92ZXJmbG93IHJlc3VsdC4NCisgICAg ICBpZiAoX19zYW5pdHkgPT0gX19zIHx8ICpfX3Nhbml0eSAhPSAnXDAnKQ0KKwl7DQorCSAgX192 ID0gMC4wbDsNCisJICBfX2VyciA9IGlvc19iYXNlOjpmYWlsYml0Ow0KKwl9DQorICAgICAgZWxz ZSBpZiAoX192ID09IG51bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPjo6aW5maW5pdHkoKSkNCisJ ew0KKwkgIF9fdiA9IG51bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPjo6bWF4KCk7DQorCSAgX19l cnIgPSBpb3NfYmFzZTo6ZmFpbGJpdDsNCisJfQ0KKyAgICAgIGVsc2UgaWYgKF9fdiA9PSAtbnVt ZXJpY19saW1pdHM8bG9uZyBkb3VibGU+OjppbmZpbml0eSgpKQ0KKwl7DQorCSAgX192ID0gLW51 bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPjo6bWF4KCk7DQorCSAgX19lcnIgPSBpb3NfYmFzZTo6 ZmFpbGJpdDsNCisJfQ0KKyAgICB9DQorDQorICB2b2lkDQorICBsb2NhbGU6OmZhY2V0OjpfU19j cmVhdGVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsDQorCQkJ CSAgICBfX2NfbG9jYWxlIF9fb2xkKQ0KKyAgew0KKyAgICBfX2Nsb2MgPSBuZXdsb2NhbGUoMSA8 PCBMQ19BTEwsIF9fcywgX19vbGQpOw0KKyAgICBpZiAoX19jbG9jKQ0KKyAgICAgIHJldHVybjsN CisNCisgICAgLyogTmV3bGliIGRvZXMgbm90IHN1cHBvcnQgbG9jYWxlIHN0cmlnIHN1Y2ggYXMN CisgICAgICAgIkxDX0NUWVBFPWVuX1VTLlVURjg7TENfTlVNRVJJQz1kZV9ERS5VVEY4Oy4uLiIg Ki8NCisgICAgY29uc3QgY2hhciAqX19wID0gX19zOw0KKyAgICBfX2Nsb2MgPSBfX29sZDsNCisg ICAgY2hhciBfX2NhdFtDQVRFR09SWV9MRU4gKyAxXSwgX19sb2NbRU5DT0RJTkdfTEVOICsgMV07 DQorICAgIHdoaWxlICgyID09IHNzY2FuZihfX3AsIEZNVF9MT0NBTEUsIF9fY2F0LCBfX2xvYykp DQorICAgICAgew0KKwlzdHJ1Y3Qge2NvbnN0IGNoYXIgKl9fY2F0OyBpbnQgX19tYXNrO30gX190 YmxbTlVNX0NBVEVHT1JJRVMgKyAxXSA9DQorCSAgew0KKwkgICAgICB7IkxDX0NUWVBFIiwgTENf Q1RZUEVfTUFTS30sDQorCSAgICAgIHsiTENfTlVNRVJJQyIsIExDX05VTUVSSUNfTUFTS30sDQor CSAgICAgIHsiTENfVElNRSIsIExDX1RJTUVfTUFTS30sDQorCSAgICAgIHsiTENfQ09MTEFURSIs IExDX0NPTExBVEVfTUFTS30sDQorCSAgICAgIHsiTENfTU9ORVRBUlkiLCBMQ19NT05FVEFSWV9N QVNLfSwNCisJICAgICAgeyJMQ19NRVNTQUdFUyIsIExDX01FU1NBR0VTX01BU0t9LA0KKwkgICAg ICB7TlVMTCwgMH0NCisJICB9Ow0KKwlmb3IgKGludCBfX2kgPSAwOyBfX3RibFtfX2ldLl9fY2F0 OyBfX2krKykNCisJICBpZiAoc3RyY21wKF9fdGJsW19faV0uX19jYXQsIF9fY2F0KSA9PSAwKQ0K KwkgICAgew0KKwkgICAgICBfX2Nsb2MgPSBuZXdsb2NhbGUoX190YmxbX19pXS5fX21hc2ssIF9f bG9jLCBfX2Nsb2MpOw0KKwkgICAgICBicmVhazsNCisJICAgIH0NCisJaWYgKCFfX2Nsb2MpDQor CSAgYnJlYWs7DQorCWlmICgoX19wID0gc3RyY2hyKF9fcCwgJzsnKSkgPT0gTlVMTCkNCisJICBi cmVhazsNCisJX19wKys7DQorICAgICAgfQ0KKyAgICBpZiAoIV9fY2xvYykNCisgICAgICB7DQor CS8vIFRoaXMgbmFtZWQgbG9jYWxlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHVuZGVybHlpbmcg T1MuDQorCV9fdGhyb3dfcnVudGltZV9lcnJvcihfX04oImxvY2FsZTo6ZmFjZXQ6Ol9TX2NyZWF0 ZV9jX2xvY2FsZSAiDQorCQkJCSAgIm5hbWUgbm90IHZhbGlkIikpOw0KKyAgICAgIH0NCisgIH0N CisNCisgIHZvaWQNCisgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Rlc3Ryb3lfY19sb2NhbGUoX19jX2xv Y2FsZSYgX19jbG9jKQ0KKyAgew0KKyAgICBpZiAoX19jbG9jICYmIF9TX2dldF9jX2xvY2FsZSgp ICE9IF9fY2xvYykNCisgICAgICBmcmVlbG9jYWxlKF9fY2xvYyk7DQorICB9DQorDQorICBfX2Nf bG9jYWxlDQorICBsb2NhbGU6OmZhY2V0OjpfU19jbG9uZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBf X2Nsb2MpIHRocm93KCkNCisgIHsgcmV0dXJuIGR1cGxvY2FsZShfX2Nsb2MpOyB9DQorDQorICBf X2NfbG9jYWxlDQorICBsb2NhbGU6OmZhY2V0OjpfU19sY19jdHlwZV9jX2xvY2FsZShfX2NfbG9j YWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zKQ0KKyAgew0KKyAgICBfX2NfbG9jYWxlIF9fZHVw ID0gZHVwbG9jYWxlKF9fY2xvYyk7DQorICAgIGlmIChfX2R1cCA9PSBfX2NfbG9jYWxlKDApKQ0K KyAgICAgIF9fdGhyb3dfcnVudGltZV9lcnJvcihfX04oImxvY2FsZTo6ZmFjZXQ6Ol9TX2xjX2N0 eXBlX2NfbG9jYWxlICINCisJCQkJImR1cGxvY2FsZSBlcnJvciIpKTsNCisgICAgX19jX2xvY2Fs ZSBfX2NoYW5nZWQgPSBuZXdsb2NhbGUoTENfQ1RZUEVfTUFTSywgX19zLCBfX2R1cCk7DQorICAg IGlmIChfX2NoYW5nZWQgPT0gX19jX2xvY2FsZSgwKSkNCisgICAgICB7DQorCS8qIE5ld2xpYiBk b2VzIG5vdCBzdXBwb3J0IGxvY2FsZSBzdHJpZyBzdWNoIGFzDQorCSAgICJMQ19DVFlQRT1lbl9V Uy5VVEY4O0xDX05VTUVSSUM9ZGVfREUuVVRGODsuLi4iICovDQorCWNvbnN0IGNoYXIgKl9fcCA9 IF9fczsNCisJY2hhciBfX2NhdFtDQVRFR09SWV9MRU4gKyAxXSwgX19sb2NbRU5DT0RJTkdfTEVO ICsgMV07DQorCXdoaWxlICgyID09IHNzY2FuZihfX3AsIEZNVF9MT0NBTEUsIF9fY2F0LCBfX2xv YykpDQorCSAgew0KKwkgICAgaWYgKHN0cmNtcCgiTENfQ1RZUEUiLCBfX2NhdCkgPT0gMCkNCisJ ICAgICAgew0KKwkJX19jaGFuZ2VkID0gbmV3bG9jYWxlKExDX0NUWVBFX01BU0ssIF9fbG9jLCBf X2R1cCk7DQorCQlicmVhazsNCisJICAgICAgfQ0KKwkgICAgaWYgKChfX3AgPSBzdHJjaHIoX19w LCAnOycpKSA9PSBOVUxMKQ0KKwkgICAgICBicmVhazsNCisJICAgIF9fcCsrOw0KKwkgIH0NCisg ICAgICB9DQorICAgIGlmIChfX2NoYW5nZWQgPT0gX19jX2xvY2FsZSgwKSkNCisgICAgICB7DQor CWZyZWVsb2NhbGUoX19kdXApOw0KKwlfX3Rocm93X3J1bnRpbWVfZXJyb3IoX19OKCJsb2NhbGU6 OmZhY2V0OjpfU19sY19jdHlwZV9jX2xvY2FsZSAiDQorCQkJCSAgIm5ld2xvY2FsZSBlcnJvciIp KTsNCisgICAgICB9DQorICAgIHJldHVybiBfX2NoYW5nZWQ7DQorICB9DQorDQorICBzdHJ1Y3Qg X0NhdGFsb2dJZENvbXANCisgIHsNCisgICAgYm9vbA0KKyAgICBvcGVyYXRvcigpKG1lc3NhZ2Vz X2Jhc2U6OmNhdGFsb2cgX19jYXQsIGNvbnN0IENhdGFsb2dfaW5mbyogX19pbmZvKSBjb25zdA0K KyAgICB7IHJldHVybiBfX2NhdCA8IF9faW5mby0+X01faWQ7IH0NCisNCisgICAgYm9vbA0KKyAg ICBvcGVyYXRvcigpKGNvbnN0IENhdGFsb2dfaW5mbyogX19pbmZvLCBtZXNzYWdlc19iYXNlOjpj YXRhbG9nIF9fY2F0KSBjb25zdA0KKyAgICB7IHJldHVybiBfX2luZm8tPl9NX2lkIDwgX19jYXQ7 IH0NCisgIH07DQorDQorICBDYXRhbG9nczo6fkNhdGFsb2dzKCkNCisgIHsNCisgICAgZm9yICh2 ZWN0b3I8Q2F0YWxvZ19pbmZvKj46Oml0ZXJhdG9yIF9faXQgPSBfTV9pbmZvcy5iZWdpbigpOw0K KwkgX19pdCAhPSBfTV9pbmZvcy5lbmQoKTsgKytfX2l0KQ0KKyAgICAgIGRlbGV0ZSAqX19pdDsN CisgIH0NCisNCisgIG1lc3NhZ2VzX2Jhc2U6OmNhdGFsb2cNCisgIENhdGFsb2dzOjpfTV9hZGQo Y29uc3QgY2hhciogX19kb21haW4sIGxvY2FsZSBfX2wpDQorICB7DQorICAgIF9fZ251X2N4eDo6 X19zY29wZWRfbG9jayBsb2NrKF9NX211dGV4KTsNCisNCisgICAgLy8gVGhlIGNvdW50ZXIgaXMg bm90IGxpa2VseSB0byByb2xsIHVubGVzcyBjYXRhbG9ncyBrZWVwIG9uIGJlaW5nDQorICAgIC8v IG9wZW5lZC9jbG9zZWQgd2hpY2ggaXMgY29uc2lkZXIgYXMgYW4gYXBwbGljYXRpb24gbWlzdGFr ZSBmb3IgdGhlDQorICAgIC8vIG1vbWVudC4NCisgICAgaWYgKF9NX2NhdGFsb2dfY291bnRlciA9 PSBudW1lcmljX2xpbWl0czxtZXNzYWdlc19iYXNlOjpjYXRhbG9nPjo6bWF4KCkpDQorICAgICAg cmV0dXJuIC0xOw0KKw0KKyAgICBhdXRvX3B0cjxDYXRhbG9nX2luZm8+IGluZm8obmV3IENhdGFs b2dfaW5mbyhfTV9jYXRhbG9nX2NvdW50ZXIrKywNCisJCQkJCQkgX19kb21haW4sIF9fbCkpOw0K Kw0KKyAgICAvLyBDaGVjayBpZiB3ZSBtYW5hZ2VkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgZG9t YWluLg0KKyAgICBpZiAoIWluZm8tPl9NX2RvbWFpbikNCisgICAgICByZXR1cm4gLTE7DQorDQor ICAgIF9NX2luZm9zLnB1c2hfYmFjayhpbmZvLmdldCgpKTsNCisgICAgcmV0dXJuIGluZm8ucmVs ZWFzZSgpLT5fTV9pZDsNCisgIH0NCisNCisgIHZvaWQNCisgIENhdGFsb2dzOjpfTV9lcmFzZSht ZXNzYWdlc19iYXNlOjpjYXRhbG9nIF9fYykNCisgIHsNCisgICAgX19nbnVfY3h4OjpfX3Njb3Bl ZF9sb2NrIGxvY2soX01fbXV0ZXgpOw0KKw0KKyAgICB2ZWN0b3I8Q2F0YWxvZ19pbmZvKj46Oml0 ZXJhdG9yIF9fcmVzID0NCisgICAgICBsb3dlcl9ib3VuZChfTV9pbmZvcy5iZWdpbigpLCBfTV9p bmZvcy5lbmQoKSwgX19jLCBfQ2F0YWxvZ0lkQ29tcCgpKTsNCisgICAgaWYgKF9fcmVzID09IF9N X2luZm9zLmVuZCgpIHx8ICgqX19yZXMpLT5fTV9pZCAhPSBfX2MpDQorICAgICAgcmV0dXJuOw0K Kw0KKyAgICBkZWxldGUgKl9fcmVzOw0KKyAgICBfTV9pbmZvcy5lcmFzZShfX3Jlcyk7DQorDQor ICAgIC8vIEp1c3QgaW4gY2FzZSBjbG9zZWQgY2F0YWxvZyB3YXMgdGhlIGxhc3Qgb3Blbi4NCisg ICAgaWYgKF9fYyA9PSBfTV9jYXRhbG9nX2NvdW50ZXIgLSAxKQ0KKyAgICAgIC0tX01fY2F0YWxv Z19jb3VudGVyOw0KKyAgfQ0KKw0KKyAgY29uc3QgQ2F0YWxvZ19pbmZvKg0KKyAgQ2F0YWxvZ3M6 Ol9NX2dldChtZXNzYWdlc19iYXNlOjpjYXRhbG9nIF9fYykgY29uc3QNCisgIHsNCisgICAgX19n bnVfY3h4OjpfX3Njb3BlZF9sb2NrIGxvY2soX01fbXV0ZXgpOw0KKw0KKyAgICB2ZWN0b3I8Q2F0 YWxvZ19pbmZvKj46OmNvbnN0X2l0ZXJhdG9yIF9fcmVzID0NCisgICAgICBsb3dlcl9ib3VuZChf TV9pbmZvcy5iZWdpbigpLCBfTV9pbmZvcy5lbmQoKSwgX19jLCBfQ2F0YWxvZ0lkQ29tcCgpKTsN CisNCisgICAgaWYgKF9fcmVzICE9IF9NX2luZm9zLmVuZCgpICYmICgqX19yZXMpLT5fTV9pZCA9 PSBfX2MpDQorICAgICAgcmV0dXJuICpfX3JlczsNCisNCisgICAgcmV0dXJuIDA7DQorICB9DQor DQorICBDYXRhbG9ncyYNCisgIGdldF9jYXRhbG9ncygpDQorICB7DQorICAgIHN0YXRpYyBDYXRh bG9ncyBfX2NhdGFsb2dzOw0KKyAgICByZXR1cm4gX19jYXRhbG9nczsNCisgIH0NCisNCitfR0xJ QkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04NCit9IC8vIG5hbWVzcGFjZQ0KKw0KK25hbWVzcGFj ZSBfX2dudV9jeHggX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQ0KK3sNCitfR0xJQkNYWF9C RUdJTl9OQU1FU1BBQ0VfVkVSU0lPTg0KKw0KKyAgY29uc3QgY2hhciogY29uc3QgY2F0ZWdvcnlf bmFtZXNbTlVNX0NBVEVHT1JJRVNdID0NCisgICAgew0KKyAgICAgICJMQ19DVFlQRSIsDQorICAg ICAgIkxDX05VTUVSSUMiLA0KKyAgICAgICJMQ19USU1FIiwNCisgICAgICAiTENfQ09MTEFURSIs DQorICAgICAgIkxDX01PTkVUQVJZIiwNCisgICAgICAiTENfTUVTU0FHRVMiLA0KKyAgICB9Ow0K Kw0KK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTg0KK30gLy8gbmFtZXNwYWNlDQorDQor c3RhdGljIGNoYXIgKg0KK19fc2V0bG9jYWxlX2Zvcl9uZXdsaWIoaW50IF9fY2F0ZWdvcnksIGNv bnN0IGNoYXIgKl9fbG9jYWxlKQ0KK3sNCisgIGNoYXIgKl9fcmV0Ow0KKyAgaWYgKChfX3JldCA9 IHNldGxvY2FsZShfX2NhdGVnb3J5LCBfX2xvY2FsZSkpID09IE5VTEwNCisgICAgICAmJiBfX2Nh dGVnb3J5ID09IExDX0FMTCkNCisgICAgew0KKyAgICAgIC8qIE5ld2xpYiBkb2VzIG5vdCBzdXBw b3J0IGxvY2FsZSBzdHJpZyBzdWNoIGFzDQorCSAiTENfQ1RZUEU9ZW5fVVMuVVRGODtMQ19OVU1F UklDPWRlX0RFLlVURjg7Li4uIiAqLw0KKyAgICAgIGNoYXIgX19idWZbTlVNX0NBVEVHT1JJRVNd W0VOQ09ESU5HX0xFTiArIDFdOw0KKyAgICAgIGNvbnN0IGNoYXIgKl9fcCA9IF9fbG9jYWxlOw0K KyAgICAgIGNoYXIgX19jYXRbQ0FURUdPUllfTEVOICsgMV0sIF9fbG9jW0VOQ09ESU5HX0xFTiAr IDFdOw0KKyAgICAgIHdoaWxlICgyID09IHNzY2FuZihfX3AsIEZNVF9MT0NBTEUsIF9fY2F0LCBf X2xvYykpDQorCXsNCisJICBjb25zdCBjaGFyICpfX3RibFtOVU1fQ0FURUdPUklFU10gPQ0KKwkg ICAgew0KKwkgICAgICAiTENfQ09MTEFURSIsDQorCSAgICAgICJMQ19DVFlQRSIsDQorCSAgICAg ICJMQ19NT05FVEFSWSIsDQorCSAgICAgICJMQ19OVU1FUklDIiwNCisJICAgICAgIkxDX1RJTUUi LA0KKwkgICAgICAiTENfTUVTU0FHRVMiDQorCSAgICB9Ow0KKwkgIGZvciAoaW50IF9faSA9IDA7 IF9faSA8IE5VTV9DQVRFR09SSUVTOyBfX2krKykNCisJICAgIGlmIChzdHJjbXAoX190YmxbX19p XSwgX19jYXQpID09IDApDQorCSAgICAgIHsNCisJCXN0cm5jcHkoX19idWZbX19pXSwgX19sb2Ms IHNpemVvZihfX2J1ZltfX2ldKSk7DQorCQlfX2J1ZltfX2ldW0VOQ09ESU5HX0xFTl0gPSAnXDAn Ow0KKwkJYnJlYWs7DQorCSAgICAgIH0NCisJICBpZiAoKF9fcCA9IHN0cmNocihfX3AsICc7Jykp ID09IE5VTEwpDQorCSAgICBicmVhazsNCisJICBfX3AgKys7DQorCX0NCisgICAgICBjaGFyIF9f bmV3bG9jWyhFTkNPRElOR19MRU4gKyAxKSAqIE5VTV9DQVRFR09SSUVTXTsNCisgICAgICBzcHJp bnRmKF9fbmV3bG9jLCAiJXMvJXMvJXMvJXMvJXMvJXMiLA0KKwkgICAgICBfX2J1ZlswXSwgX19i dWZbMV0sIF9fYnVmWzJdLCBfX2J1ZlszXSwgX19idWZbNF0sIF9fYnVmWzVdKTsNCisgICAgICBf X3JldCA9IHNldGxvY2FsZShfX2NhdGVnb3J5LCBfX25ld2xvYyk7DQorDQorICAgIH0NCisgIHJl dHVybiBfX3JldDsNCit9DQorDQorbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRl ZmF1bHQpDQorew0KK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9ODQorDQorICBjb25z dCBjaGFyKiBjb25zdCogY29uc3QgbG9jYWxlOjpfU19jYXRlZ29yaWVzID0gX19nbnVfY3h4Ojpj YXRlZ29yeV9uYW1lczsNCisgIGNvbnN0IF9fdHlwZW9mKHNldGxvY2FsZSkgKl9fc2V0bG9jYWxl ID0gX19zZXRsb2NhbGVfZm9yX25ld2xpYjsNCisNCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZF UlNJT04NCit9IC8vIG5hbWVzcGFjZQ0KKw0KKy8vIFhYWCBHTElCQ1hYX0FCSSBEZXByZWNhdGVk DQorI2lmZGVmIF9HTElCQ1hYX0xPTkdfRE9VQkxFX0NPTVBBVA0KKyNkZWZpbmUgX0dMSUJDWFhf TERCTF9DT01QQVQoZGJsLCBsZGJsKSBcDQorICBleHRlcm4gIkMiIHZvaWQgbGRibCAodm9pZCkg X19hdHRyaWJ1dGVfXyAoKGFsaWFzICgjZGJsKSkpDQorX0dMSUJDWFhfTERCTF9DT01QQVQoX1pT dDE0X19jb252ZXJ0X3RvX3ZJZEV2UEtjUlRfUlN0MTJfSW9zX0lvc3RhdGVSS1BpLCBfWlN0MTRf X2NvbnZlcnRfdG9fdkllRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUGkpOw0KKyNlbmRpZiAv LyBfR0xJQkNYWF9MT05HX0RPVUJMRV9DT01QQVQNCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMv Y29uZmlnL2xvY2FsZS9uZXdsaWIvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9j YWxlL25ld2xpYi9jX2xvY2FsZS5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAw MDAwMDAuLjQ2MjkxMDM1MjVmDQotLS0gL2Rldi9udWxsDQorKysgYi9saWJzdGRjKystdjMvY29u ZmlnL2xvY2FsZS9uZXdsaWIvY19sb2NhbGUuaA0KQEAgLTAsMCArMSw4MiBAQA0KKy8vIFdyYXBw ZXIgZm9yIHVuZGVybHlpbmcgQy1sYW5ndWFnZSBsb2NhbGl6YXRpb24gLSotIEMrKyAtKi0NCisN CisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4NCisvLw0KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5 LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUNCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUNCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKy8vIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQ0KKy8v IGFueSBsYXRlciB2ZXJzaW9uLg0KKw0KKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KKy8vIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorLy8gTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0K Ky8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorDQorLy8g VW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlv bmFsDQorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5 IEV4Y2VwdGlvbiwgdmVyc2lvbg0KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24uDQorDQorLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kDQorLy8gYSBjb3B5IG9mIHRo ZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsN CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2 ZWx5LiAgSWYgbm90LCBzZWUNCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uDQor DQorLyoqIEBmaWxlIGJpdHMvYysrbG9jYWxlLmgNCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBo ZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLg0KKyAqICBEbyBu b3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le2xvY2FsZX0NCisgKi8N CisNCisvLw0KKy8vIElTTyBDKysgMTQ4ODI6IDIyLjggIFN0YW5kYXJkIGxvY2FsZSBjYXRlZ29y aWVzLg0KKy8vDQorDQorLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0 LmNvbT4NCisvLyBNb2RpZmllZCBieSBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0BuaWZ0eS5u ZS5qcD4NCisNCisjaWZuZGVmIF9HTElCQ1hYX0NYWF9MT0NBTEVfSA0KKyNkZWZpbmUgX0dMSUJD WFhfQ1hYX0xPQ0FMRV9IIDENCisNCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyDQorDQorI2lu Y2x1ZGUgPGNsb2NhbGU+DQorDQorI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAwDQor DQorbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpDQorew0KK19HTElC Q1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9ODQorDQorICB0eXBlZGVmIGxvY2FsZV90IF9fY19s b2NhbGU7DQorDQorICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBkb3VibGUgYW5k IGxvbmcgZG91YmxlIHRvIHN0cmluZyBhbmQNCisgIC8vIHJldHVybiBsZW5ndGggb2Ygc3RyaW5n LiAgSWYgdnNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZQ0KKyAgLy8gZmFs bCBiYWNrIHRvIHRoZSB1bnNhZmUgdnNwcmludGYgd2hpY2gsIGluIGdlbmVyYWwsIGNhbiBiZSBk YW5nZXJvdXMNCisgIC8vIGFuZCBzaG91bGQgYmUgYXZvaWRlZC4NCisgIGlubGluZSBpbnQNCisg IF9fY29udmVydF9mcm9tX3YoY29uc3QgX19jX2xvY2FsZSYgX19jbG9jIF9fYXR0cmlidXRlX18g KChfX3VudXNlZF9fKSksDQorCQkgICBjaGFyKiBfX291dCwNCisJCSAgIGNvbnN0IGludCBfX3Np emUgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKSwNCisJCSAgIGNvbnN0IGNoYXIqIF9fZm10 LCAuLi4pDQorICB7DQorICAgIF9fY19sb2NhbGUgX19vbGQgPSB1c2Vsb2NhbGUoX19jbG9jKTsN CisNCisgICAgX19idWlsdGluX3ZhX2xpc3QgX19hcmdzOw0KKyAgICBfX2J1aWx0aW5fdmFfc3Rh cnQoX19hcmdzLCBfX2ZtdCk7DQorDQorI2lmIF9HTElCQ1hYX1VTRV9DOTlfU1RESU8NCisgICAg Y29uc3QgaW50IF9fcmV0ID0gX19idWlsdGluX3ZzbnByaW50ZihfX291dCwgX19zaXplLCBfX2Zt dCwgX19hcmdzKTsNCisjZWxzZQ0KKyAgICBjb25zdCBpbnQgX19yZXQgPSBfX2J1aWx0aW5fdnNw cmludGYoX19vdXQsIF9fZm10LCBfX2FyZ3MpOw0KKyNlbmRpZg0KKw0KKyAgICBfX2J1aWx0aW5f dmFfZW5kKF9fYXJncyk7DQorDQorICAgIHVzZWxvY2FsZShfX29sZCk7DQorICAgIHJldHVybiBf X3JldDsNCisgIH0NCisNCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04NCit9IC8vIG5h bWVzcGFjZQ0KKw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9j YWxlL25ld2xpYi9jb2RlY3Z0X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2Fs ZS9uZXdsaWIvY29kZWN2dF9tZW1iZXJzLmNjDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXgg MDAwMDAwMDAwMDAuLmU0ODM1NDJjZWI0DQotLS0gL2Rldi9udWxsDQorKysgYi9saWJzdGRjKyst djMvY29uZmlnL2xvY2FsZS9uZXdsaWIvY29kZWN2dF9tZW1iZXJzLmNjDQpAQCAtMCwwICsxLDI4 OCBAQA0KKy8vIHN0ZDo6Y29kZWN2dCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBuZXdsaWIgdmVy c2lvbiAtKi0gQysrIC0qLQ0KKw0KKy8vIENvcHlyaWdodCAoQykgMjAwMi0yMDIzIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgSW5jLg0KKy8vDQorLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl IEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQ0KKy8vIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQ0KKy8v IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg dGhlDQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAo YXQgeW91ciBvcHRpb24pDQorLy8gYW55IGxhdGVyIHZlcnNpb24uDQorDQorLy8gVGhpcyBsaWJy YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQor Ly8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YNCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlDQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4NCisNCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91 IGFyZSBncmFudGVkIGFkZGl0aW9uYWwNCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhl IEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uDQorLy8gMy4xLCBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4NCisNCisvLyBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh bmQNCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25n IHdpdGggdGhpcyBwcm9ncmFtOw0KKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJ TkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQ0KKy8vIDxodHRwOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4NCisNCisvLw0KKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMS41IC0g VGVtcGxhdGUgY2xhc3MgY29kZWN2dA0KKy8vDQorDQorLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBL b3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4NCisvLyBNb2RpZmllZCBieSBUYWthc2hpIFlhbm8gPHRh a2FzaGkueWFub0BuaWZ0eS5uZS5qcD4NCisNCisjaW5jbHVkZSA8bG9jYWxlPg0KKyNpbmNsdWRl IDxjc3RkbGliPiAgLy8gRm9yIE1CX0NVUl9NQVgNCisjaW5jbHVkZSA8Y2xpbWl0cz4gIC8vIEZv ciBNQl9MRU5fTUFYDQorI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+DQorDQor bmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpDQorew0KK19HTElCQ1hY X0JFR0lOX05BTUVTUEFDRV9WRVJTSU9ODQorDQorICAvLyBTcGVjaWFsaXphdGlvbnMuDQorI2lm ZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UDQorICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdA0KKyAgY29k ZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoNCisgIGRvX291dChzdGF0ZV90eXBlJiBf X3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLA0KKwkgY29uc3QgaW50ZXJuX3R5cGUq IF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsDQorCSBleHRlcm5f dHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLA0KKwkgZXh0ZXJuX3R5cGUqJiBfX3Rv X25leHQpIGNvbnN0DQorICB7DQorICAgIHJlc3VsdCBfX3JldCA9IG9rOw0KKyAgICBzdGF0ZV90 eXBlIF9fdG1wX3N0YXRlKF9fc3RhdGUpOw0KKw0KKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gdXNl bG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOw0KKw0KKyAgICAvLyB3Y3NucnRvbWJzIGlzICp2 ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOg0KKyAgICAv LyBpbiBjYXNlIHdlIGZhbGwgYmFjayB0byB3Y3J0b21iIGFuZCB0aGVuIGNvbnRpbnVlLCBpbiBh IGxvb3AuDQorICAgIC8vIE5COiB3Y3NucnRvbWJzIGlzIGEgR05VIGV4dGVuc2lvbg0KKyAgICBm b3IgKF9fZnJvbV9uZXh0ID0gX19mcm9tLCBfX3RvX25leHQgPSBfX3RvOw0KKwkgX19mcm9tX25l eHQgPCBfX2Zyb21fZW5kICYmIF9fdG9fbmV4dCA8IF9fdG9fZW5kDQorCSAmJiBfX3JldCA9PSBv azspDQorICAgICAgew0KKwljb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2NodW5rX2VuZCA9IHdt ZW1jaHIoX19mcm9tX25leHQsIEwnXDAnLA0KKwkJCQkJCSAgICAgIF9fZnJvbV9lbmQgLSBfX2Zy b21fbmV4dCk7DQorCWlmICghX19mcm9tX2NodW5rX2VuZCkNCisJICBfX2Zyb21fY2h1bmtfZW5k ID0gX19mcm9tX2VuZDsNCisNCisJX19mcm9tID0gX19mcm9tX25leHQ7DQorCWNvbnN0IHNpemVf dCBfX2NvbnYgPSB3Y3NucnRvbWJzKF9fdG9fbmV4dCwgJl9fZnJvbV9uZXh0LA0KKwkJCQkJIF9f ZnJvbV9jaHVua19lbmQgLSBfX2Zyb21fbmV4dCwNCisJCQkJCSBfX3RvX2VuZCAtIF9fdG9fbmV4 dCwgJl9fc3RhdGUpOw0KKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQ0K KwkgIHsNCisJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhl IGV4YWN0IHBsYWNlIHdlDQorCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJl Z2lubmluZyB3aXRoIGEgc2VyaWVzIG9mDQorCSAgICAvLyB3Y3J0b21iLg0KKwkgICAgZm9yICg7 IF9fZnJvbSA8IF9fZnJvbV9uZXh0OyArK19fZnJvbSkNCisJICAgICAgX190b19uZXh0ICs9IHdj cnRvbWIoX190b19uZXh0LCAqX19mcm9tLCAmX190bXBfc3RhdGUpOw0KKwkgICAgX19zdGF0ZSA9 IF9fdG1wX3N0YXRlOw0KKwkgICAgX19yZXQgPSBlcnJvcjsNCisJICB9DQorCWVsc2UgaWYgKF9f ZnJvbV9uZXh0ICYmIF9fZnJvbV9uZXh0IDwgX19mcm9tX2NodW5rX2VuZCkNCisJICB7DQorCSAg ICBfX3RvX25leHQgKz0gX19jb252Ow0KKwkgICAgX19yZXQgPSBwYXJ0aWFsOw0KKwkgIH0NCisJ ZWxzZQ0KKwkgIHsNCisJICAgIF9fZnJvbV9uZXh0ID0gX19mcm9tX2NodW5rX2VuZDsNCisJICAg IF9fdG9fbmV4dCArPSBfX2NvbnY7DQorCSAgfQ0KKw0KKwlpZiAoX19mcm9tX25leHQgPCBfX2Zy b21fZW5kICYmIF9fcmV0ID09IG9rKQ0KKwkgIHsNCisJICAgIGV4dGVybl90eXBlIF9fYnVmW01C X0xFTl9NQVhdOw0KKwkgICAgX190bXBfc3RhdGUgPSBfX3N0YXRlOw0KKwkgICAgY29uc3Qgc2l6 ZV90IF9fY29udjIgPSB3Y3J0b21iKF9fYnVmLCAqX19mcm9tX25leHQsICZfX3RtcF9zdGF0ZSk7 DQorCSAgICBpZiAoX19jb252MiA+IHN0YXRpY19jYXN0PHNpemVfdD4oX190b19lbmQgLSBfX3Rv X25leHQpKQ0KKwkgICAgICBfX3JldCA9IHBhcnRpYWw7DQorCSAgICBlbHNlDQorCSAgICAgIHsN CisJCW1lbWNweShfX3RvX25leHQsIF9fYnVmLCBfX2NvbnYyKTsNCisJCV9fc3RhdGUgPSBfX3Rt cF9zdGF0ZTsNCisJCV9fdG9fbmV4dCArPSBfX2NvbnYyOw0KKwkJKytfX2Zyb21fbmV4dDsNCisJ ICAgICAgfQ0KKwkgIH0NCisgICAgICB9DQorDQorICAgIHVzZWxvY2FsZShfX29sZCk7DQorDQor ICAgIHJldHVybiBfX3JldDsNCisgIH0NCisNCisgIGNvZGVjdnRfYmFzZTo6cmVzdWx0DQorICBj b2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46Og0KKyAgZG9faW4oc3RhdGVfdHlwZSYg X19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwNCisJY29uc3QgZXh0ZXJuX3R5cGUq IF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsDQorCWludGVybl90 eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsDQorCWludGVybl90eXBlKiYgX190b19u ZXh0KSBjb25zdA0KKyAgew0KKyAgICByZXN1bHQgX19yZXQgPSBvazsNCisgICAgc3RhdGVfdHlw ZSBfX3RtcF9zdGF0ZShfX3N0YXRlKTsNCisNCisgICAgX19jX2xvY2FsZSBfX29sZCA9IHVzZWxv Y2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsNCisNCisgICAgLy8gbWJzbnJ0b3djcyBpcyAqdmVy eSogZmFzdCBidXQgc3RvcHMgaWYgZW5jb3VudGVycyBOVUwgY2hhcmFjdGVyczoNCisgICAgLy8g aW4gY2FzZSB3ZSBzdG9yZSBhIEwnXDAnIGFuZCB0aGVuIGNvbnRpbnVlLCBpbiBhIGxvb3AuDQor ICAgIC8vIE5COiBtYnNucnRvd2NzIGlzIGEgR05VIGV4dGVuc2lvbg0KKyAgICBmb3IgKF9fZnJv bV9uZXh0ID0gX19mcm9tLCBfX3RvX25leHQgPSBfX3RvOw0KKwkgX19mcm9tX25leHQgPCBfX2Zy b21fZW5kICYmIF9fdG9fbmV4dCA8IF9fdG9fZW5kDQorCSAmJiBfX3JldCA9PSBvazspDQorICAg ICAgew0KKwljb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2NodW5rX2VuZDsNCisJX19mcm9tX2No dW5rX2VuZCA9IHN0YXRpY19jYXN0PGNvbnN0IGV4dGVybl90eXBlKj4obWVtY2hyKF9fZnJvbV9u ZXh0LCAnXDAnLA0KKwkJCQkJCQkJICBfX2Zyb21fZW5kDQorCQkJCQkJCQkgIC0gX19mcm9tX25l eHQpKTsNCisJaWYgKCFfX2Zyb21fY2h1bmtfZW5kKQ0KKwkgIF9fZnJvbV9jaHVua19lbmQgPSBf X2Zyb21fZW5kOw0KKw0KKwlfX2Zyb20gPSBfX2Zyb21fbmV4dDsNCisJc2l6ZV90IF9fY29udiA9 IG1ic25ydG93Y3MoX190b19uZXh0LCAmX19mcm9tX25leHQsDQorCQkJCSAgIF9fZnJvbV9jaHVu a19lbmQgLSBfX2Zyb21fbmV4dCwNCisJCQkJICAgX190b19lbmQgLSBfX3RvX25leHQsICZfX3N0 YXRlKTsNCisJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkNCisJICB7DQor CSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBw bGFjZSB3ZQ0KKwkgICAgLy8gaGF2ZSB0byBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcg d2l0aCBhIHNlcmllcyBvZg0KKwkgICAgLy8gbWJydG93Yy4NCisJICAgIGZvciAoOzsgKytfX3Rv X25leHQsIF9fZnJvbSArPSBfX2NvbnYpDQorCSAgICAgIHsNCisJCV9fY29udiA9IG1icnRvd2Mo X190b19uZXh0LCBfX2Zyb20sIF9fZnJvbV9lbmQgLSBfX2Zyb20sDQorCQkJCSAmX190bXBfc3Rh dGUpOw0KKwkJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKQ0KKwkJICAgIHx8 IF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSkNCisJCSAgYnJlYWs7DQorCSAgICAg IH0NCisJICAgIF9fZnJvbV9uZXh0ID0gX19mcm9tOw0KKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0 YXRlOw0KKwkgICAgX19yZXQgPSBlcnJvcjsNCisJICB9DQorCWVsc2UgaWYgKF9fZnJvbV9uZXh0 ICYmIF9fZnJvbV9uZXh0IDwgX19mcm9tX2NodW5rX2VuZCkNCisJICB7DQorCSAgICAvLyBJdCBp cyB1bmNsZWFyIHdoYXQgdG8gcmV0dXJuIGluIHRoaXMgY2FzZSAoc2VlIERSIDM4MikuDQorCSAg ICBfX3RvX25leHQgKz0gX19jb252Ow0KKwkgICAgX19yZXQgPSBwYXJ0aWFsOw0KKwkgIH0NCisJ ZWxzZQ0KKwkgIHsNCisJICAgIF9fZnJvbV9uZXh0ID0gX19mcm9tX2NodW5rX2VuZDsNCisJICAg IF9fdG9fbmV4dCArPSBfX2NvbnY7DQorCSAgfQ0KKw0KKwlpZiAoX19mcm9tX25leHQgPCBfX2Zy b21fZW5kICYmIF9fcmV0ID09IG9rKQ0KKwkgIHsNCisJICAgIGlmIChfX3RvX25leHQgPCBfX3Rv X2VuZCkNCisJICAgICAgew0KKwkJLy8gWFhYIFByb2JhYmx5IHdyb25nIGZvciBzdGF0ZWZ1bCBl bmNvZGluZ3MNCisJCV9fdG1wX3N0YXRlID0gX19zdGF0ZTsNCisJCSsrX19mcm9tX25leHQ7DQor CQkqX190b19uZXh0KysgPSBMJ1wwJzsNCisJICAgICAgfQ0KKwkgICAgZWxzZQ0KKwkgICAgICBf X3JldCA9IHBhcnRpYWw7DQorCSAgfQ0KKyAgICAgIH0NCisNCisgICAgdXNlbG9jYWxlKF9fb2xk KTsNCisNCisgICAgcmV0dXJuIF9fcmV0Ow0KKyAgfQ0KKw0KKyAgaW50DQorICBjb2RlY3Z0PHdj aGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46Og0KKyAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygp DQorICB7DQorICAgIC8vIFhYWCBUaGlzIGltcGxlbWVudGF0aW9uIGFzc3VtZXMgdGhhdCB0aGUg ZW5jb2RpbmcgaXMNCisgICAgLy8gc3RhdGVsZXNzIGFuZCBpcyBlaXRoZXIgc2luZ2xlLWJ5dGUg b3IgdmFyaWFibGUtd2lkdGguDQorICAgIGludCBfX3JldCA9IDA7DQorICAgIF9fY19sb2NhbGUg X19vbGQgPSB1c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7DQorICAgIGlmIChNQl9DVVJf TUFYID09IDEpDQorICAgICAgX19yZXQgPSAxOw0KKyAgICB1c2Vsb2NhbGUoX19vbGQpOw0KKyAg ICByZXR1cm4gX19yZXQ7DQorICB9DQorDQorICBpbnQNCisgIGNvZGVjdnQ8d2NoYXJfdCwgY2hh ciwgbWJzdGF0ZV90Pjo6DQorICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKQ0KKyAgew0K KyAgICBfX2NfbG9jYWxlIF9fb2xkID0gdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOw0K KyAgICAvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncy4NCisgICAg aW50IF9fcmV0ID0gTUJfQ1VSX01BWDsNCisgICAgdXNlbG9jYWxlKF9fb2xkKTsNCisgICAgcmV0 dXJuIF9fcmV0Ow0KKyAgfQ0KKw0KKyAgaW50DQorICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1i c3RhdGVfdD46Og0KKyAgZG9fbGVuZ3RoKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVy bl90eXBlKiBfX2Zyb20sDQorCSAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBf X21heCkgY29uc3QNCisgIHsNCisgICAgaW50IF9fcmV0ID0gMDsNCisgICAgc3RhdGVfdHlwZSBf X3RtcF9zdGF0ZShfX3N0YXRlKTsNCisNCisgICAgX19jX2xvY2FsZSBfX29sZCA9IHVzZWxvY2Fs ZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsNCisNCisgICAgLy8gbWJzbnJ0b3djcyBpcyAqdmVyeSog ZmFzdCBidXQgc3RvcHMgaWYgZW5jb3VudGVycyBOVUwgY2hhcmFjdGVyczoNCisgICAgLy8gaW4g Y2FzZSB3ZSBhZHZhbmNlIHBhc3QgaXQgYW5kIHRoZW4gY29udGludWUsIGluIGEgbG9vcC4NCisg ICAgLy8gTkI6IG1ic25ydG93Y3MgaXMgYSBHTlUgZXh0ZW5zaW9uDQorDQorICAgIC8vIEEgZHVt bXkgaW50ZXJuYWwgYnVmZmVyIGlzIG5lZWRlZCBpbiBvcmRlciBmb3IgbWJzbnJ0b2N3cyB0byBj b25zaWRlcg0KKyAgICAvLyBpdHMgZm91cnRoIHBhcmFtZXRlciAoaXQgd291bGRuJ3Qgd2l0aCBO VUxMIGFzIGZpcnN0IHBhcmFtZXRlcikuDQorICAgIHdjaGFyX3QqIF9fdG8gPSBzdGF0aWNfY2Fz dDx3Y2hhcl90Kj4oX19idWlsdGluX2FsbG9jYShzaXplb2Yod2NoYXJfdCkNCisJCQkJCQkJICAg KiBfX21heCkpOw0KKyAgICB3aGlsZSAoX19mcm9tIDwgX19lbmQgJiYgX19tYXgpDQorICAgICAg ew0KKwljb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2NodW5rX2VuZDsNCisJX19mcm9tX2NodW5r X2VuZCA9IHN0YXRpY19jYXN0PGNvbnN0IGV4dGVybl90eXBlKj4obWVtY2hyKF9fZnJvbSwgJ1ww JywNCisJCQkJCQkJCSAgX19lbmQNCisJCQkJCQkJCSAgLSBfX2Zyb20pKTsNCisJaWYgKCFfX2Zy b21fY2h1bmtfZW5kKQ0KKwkgIF9fZnJvbV9jaHVua19lbmQgPSBfX2VuZDsNCisNCisJY29uc3Qg ZXh0ZXJuX3R5cGUqIF9fdG1wX2Zyb20gPSBfX2Zyb207DQorCXNpemVfdCBfX2NvbnYgPSBtYnNu cnRvd2NzKF9fdG8sICZfX2Zyb20sDQorCQkJCSAgIF9fZnJvbV9jaHVua19lbmQgLSBfX2Zyb20s DQorCQkJCSAgIF9fbWF4LCAmX19zdGF0ZSk7DQorCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8 c2l6ZV90PigtMSkpDQorCSAgew0KKwkgICAgLy8gSW4gY2FzZSBvZiBlcnJvciwgaW4gb3JkZXIg dG8gc3RvcCBhdCB0aGUgZXhhY3QgcGxhY2Ugd2UNCisJICAgIC8vIGhhdmUgdG8gc3RhcnQgYWdh aW4gZnJvbSB0aGUgYmVnaW5uaW5nIHdpdGggYSBzZXJpZXMgb2YNCisJICAgIC8vIG1icnRvd2Mu DQorCSAgICBmb3IgKF9fZnJvbSA9IF9fdG1wX2Zyb207OyBfX2Zyb20gKz0gX19jb252KQ0KKwkg ICAgICB7DQorCQlfX2NvbnYgPSBtYnJ0b3djKDAsIF9fZnJvbSwgX19lbmQgLSBfX2Zyb20sDQor CQkJCSAmX190bXBfc3RhdGUpOw0KKwkJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+ KC0xKQ0KKwkJICAgIHx8IF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSkNCisJCSAg YnJlYWs7DQorCSAgICAgIH0NCisJICAgIF9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsNCisJICAgIF9f cmV0ICs9IF9fZnJvbSAtIF9fdG1wX2Zyb207DQorCSAgICBicmVhazsNCisJICB9DQorCWlmICgh X19mcm9tKQ0KKwkgIF9fZnJvbSA9IF9fZnJvbV9jaHVua19lbmQ7DQorDQorCV9fcmV0ICs9IF9f ZnJvbSAtIF9fdG1wX2Zyb207DQorCV9fbWF4IC09IF9fY29udjsNCisNCisJaWYgKF9fZnJvbSA8 IF9fZW5kICYmIF9fbWF4KQ0KKwkgIHsNCisJICAgIC8vIFhYWCBQcm9iYWJseSB3cm9uZyBmb3Ig c3RhdGVmdWwgZW5jb2RpbmdzDQorCSAgICBfX3RtcF9zdGF0ZSA9IF9fc3RhdGU7DQorCSAgICAr K19fZnJvbTsNCisJICAgICsrX19yZXQ7DQorCSAgICAtLV9fbWF4Ow0KKwkgIH0NCisgICAgICB9 DQorDQorICAgIHVzZWxvY2FsZShfX29sZCk7DQorDQorICAgIHJldHVybiBfX3JldDsNCisgIH0N CisjZW5kaWYNCisNCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04NCit9IC8vIG5hbWVz cGFjZQ0KZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25ld2xpYi9jb2xs YXRlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvY29sbGF0 ZV9tZW1iZXJzLmNjDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAuLjc0 YTY0NjE0M2JlDQotLS0gL2Rldi9udWxsDQorKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2Fs ZS9uZXdsaWIvY29sbGF0ZV9tZW1iZXJzLmNjDQpAQCAtMCwwICsxLDc0IEBADQorLy8gc3RkOjpj b2xsYXRlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIG5ld2xpYiB2ZXJzaW9uIC0qLSBDKysgLSot DQorDQorLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMjMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuDQorLy8NCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGli cmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlDQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlDQorLy8gdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisvLyBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikN CisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4NCisNCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisvLyBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKy8vIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUNCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKw0K Ky8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRk aXRpb25hbA0KKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGli cmFyeSBFeGNlcHRpb24sIHZlcnNpb24NCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLg0KKw0KKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZA0KKy8vIGEgY29weSBv ZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dy YW07DQorLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3Bl Y3RpdmVseS4gIElmIG5vdCwgc2VlDQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+ Lg0KKw0KKy8vDQorLy8gSVNPIEMrKyAxNDg4MjogMjIuMi40LjEuMiAgY29sbGF0ZSB2aXJ0dWFs IGZ1bmN0aW9ucw0KKy8vDQorDQorLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pA cmVkaGF0LmNvbT4NCisvLyBNb2RpZmllZCBieSBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0Bu aWZ0eS5uZS5qcD4NCisNCisjaW5jbHVkZSA8bG9jYWxlPg0KKyNpbmNsdWRlIDxiaXRzL2MrK2xv Y2FsZV9pbnRlcm5hbC5oPg0KKw0KK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShk ZWZhdWx0KQ0KK3sNCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTg0KKw0KKyAgLy8g VGhlc2UgYXJlIGJhc2ljYWxseSBleHRlbnNpb25zIHRvIGNoYXJfdHJhaXRzLCBhbmQgcGVyaGFw cyBzaG91bGQNCisgIC8vIGJlIHB1dCB0aGVyZSBpbnN0ZWFkIG9mIGhlcmUuDQorICB0ZW1wbGF0 ZTw+DQorICAgIGludA0KKyAgICBjb2xsYXRlPGNoYXI+OjpfTV9jb21wYXJlKGNvbnN0IGNoYXIq IF9fb25lLA0KKwkJCSAgICAgIGNvbnN0IGNoYXIqIF9fdHdvKSBjb25zdCB0aHJvdygpDQorICAg IHsNCisgICAgICBpbnQgX19jbXAgPSBzdHJjb2xsX2woX19vbmUsIF9fdHdvLCBfTV9jX2xvY2Fs ZV9jb2xsYXRlKTsNCisgICAgICByZXR1cm4gKF9fY21wID4+ICg4ICogc2l6ZW9mIChpbnQpIC0g MikpIHwgKF9fY21wICE9IDApOw0KKyAgICB9DQorDQorICB0ZW1wbGF0ZTw+DQorICAgIHNpemVf dA0KKyAgICBjb2xsYXRlPGNoYXI+OjpfTV90cmFuc2Zvcm0oY2hhciogX190bywgY29uc3QgY2hh ciogX19mcm9tLA0KKwkJCQlzaXplX3QgX19uKSBjb25zdCB0aHJvdygpDQorICAgIHsgcmV0dXJu IHN0cnhmcm1fbChfX3RvLCBfX2Zyb20sIF9fbiwgX01fY19sb2NhbGVfY29sbGF0ZSk7IH0NCisN CisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QNCisgIHRlbXBsYXRlPD4NCisgICAgaW50DQor ICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX2NvbXBhcmUoY29uc3Qgd2NoYXJfdCogX19vbmUsDQor CQkJCSBjb25zdCB3Y2hhcl90KiBfX3R3bykgY29uc3QgdGhyb3coKQ0KKyAgICB7DQorICAgICAg aW50IF9fY21wID0gd2NzY29sbF9sKF9fb25lLCBfX3R3bywgX01fY19sb2NhbGVfY29sbGF0ZSk7 DQorICAgICAgcmV0dXJuIChfX2NtcCA+PiAoOCAqIHNpemVvZiAoaW50KSAtIDIpKSB8IChfX2Nt cCAhPSAwKTsNCisgICAgfQ0KKw0KKyAgdGVtcGxhdGU8Pg0KKyAgICBzaXplX3QNCisgICAgY29s bGF0ZTx3Y2hhcl90Pjo6X01fdHJhbnNmb3JtKHdjaGFyX3QqIF9fdG8sIGNvbnN0IHdjaGFyX3Qq IF9fZnJvbSwNCisJCQkJICAgc2l6ZV90IF9fbikgY29uc3QgdGhyb3coKQ0KKyAgICB7IHJldHVy biB3Y3N4ZnJtX2woX190bywgX19mcm9tLCBfX24sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOyB9DQor I2VuZGlmDQorDQorX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9ODQorfSAvLyBuYW1lc3Bh Y2UNCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvY3R5cGVf bWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25ld2xpYi9jdHlwZV9tZW1i ZXJzLmNjDQppbmRleCBlZTdlN2E3OWVmZS4uNmU2MGRmZDU4MzcgMTAwNjQ0DQotLS0gYS9saWJz dGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvY3R5cGVfbWVtYmVycy5jYw0KKysrIGIvbGli c3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGliL2N0eXBlX21lbWJlcnMuY2MNCkBAIC01OCwz NyArNTgsMzcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04NCiAgICAgc3dpdGNo IChfX20pDQogICAgICAgew0KICAgICAgIGNhc2Ugc3BhY2U6DQotCV9fcmV0ID0gd2N0eXBlKCJz cGFjZSIpOw0KKwlfX3JldCA9IHdjdHlwZV9sKCJzcGFjZSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsN CiAJYnJlYWs7DQogICAgICAgY2FzZSBwcmludDoNCi0JX19yZXQgPSB3Y3R5cGUoInByaW50Iik7 DQorCV9fcmV0ID0gd2N0eXBlX2woInByaW50IiwgX01fY19sb2NhbGVfY3R5cGUpOw0KIAlicmVh azsNCiAgICAgICBjYXNlIGNudHJsOg0KLQlfX3JldCA9IHdjdHlwZSgiY250cmwiKTsNCisJX19y ZXQgPSB3Y3R5cGVfbCgiY250cmwiLCBfTV9jX2xvY2FsZV9jdHlwZSk7DQogCWJyZWFrOw0KICAg ICAgIGNhc2UgdXBwZXI6DQotCV9fcmV0ID0gd2N0eXBlKCJ1cHBlciIpOw0KKwlfX3JldCA9IHdj dHlwZV9sKCJ1cHBlciIsIF9NX2NfbG9jYWxlX2N0eXBlKTsNCiAJYnJlYWs7DQogICAgICAgY2Fz ZSBsb3dlcjoNCi0JX19yZXQgPSB3Y3R5cGUoImxvd2VyIik7DQorCV9fcmV0ID0gd2N0eXBlX2wo Imxvd2VyIiwgX01fY19sb2NhbGVfY3R5cGUpOw0KIAlicmVhazsNCiAgICAgICBjYXNlIGFscGhh Og0KLQlfX3JldCA9IHdjdHlwZSgiYWxwaGEiKTsNCisJX19yZXQgPSB3Y3R5cGVfbCgiYWxwaGEi LCBfTV9jX2xvY2FsZV9jdHlwZSk7DQogCWJyZWFrOw0KICAgICAgIGNhc2UgZGlnaXQ6DQotCV9f cmV0ID0gd2N0eXBlKCJkaWdpdCIpOw0KKwlfX3JldCA9IHdjdHlwZV9sKCJkaWdpdCIsIF9NX2Nf bG9jYWxlX2N0eXBlKTsNCiAJYnJlYWs7DQogICAgICAgY2FzZSBwdW5jdDoNCi0JX19yZXQgPSB3 Y3R5cGUoInB1bmN0Iik7DQorCV9fcmV0ID0gd2N0eXBlX2woInB1bmN0IiwgX01fY19sb2NhbGVf Y3R5cGUpOw0KIAlicmVhazsNCiAgICAgICBjYXNlIHhkaWdpdDoNCi0JX19yZXQgPSB3Y3R5cGUo InhkaWdpdCIpOw0KKwlfX3JldCA9IHdjdHlwZV9sKCJ4ZGlnaXQiLCBfTV9jX2xvY2FsZV9jdHlw ZSk7DQogCWJyZWFrOw0KICAgICAgIGNhc2UgYWxudW06DQotCV9fcmV0ID0gd2N0eXBlKCJhbG51 bSIpOw0KKwlfX3JldCA9IHdjdHlwZV9sKCJhbG51bSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsNCiAJ YnJlYWs7DQogICAgICAgY2FzZSBncmFwaDoNCi0JX19yZXQgPSB3Y3R5cGUoImdyYXBoIik7DQor CV9fcmV0ID0gd2N0eXBlX2woImdyYXBoIiwgX01fY19sb2NhbGVfY3R5cGUpOw0KIAlicmVhazsN CiAgICAgICBkZWZhdWx0Og0KIAkvLyBEaWZmZXJlbnQgZnJvbSB0aGUgZ2VuZXJpYyB2ZXJzaW9u LCB4ZGlnaXQgYW5kIHByaW50IGluDQpAQCAtMTAwLDI1ICsxMDAsMjUgQEAgX0dMSUJDWFhfQkVH SU5fTkFNRVNQQUNFX1ZFUlNJT04NCiAJLy8gZXF1YWwgdG8gX1ggb3IgX0IsIHRoZSB0d28gY2Fz ZXMgYXJlIHNwZWNpZmljYWxseSBoYW5kbGVkDQogCS8vIGhlcmUuDQogCWlmIChfX20gJiB4ZGln aXQpDQotCSAgX19yZXQgPSB3Y3R5cGUoInhkaWdpdCIpOw0KKwkgIF9fcmV0ID0gd2N0eXBlX2wo InhkaWdpdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsNCiAJZWxzZSBpZiAoX19tICYgcHJpbnQpDQot CSAgX19yZXQgPSB3Y3R5cGUoInByaW50Iik7DQorCSAgX19yZXQgPSB3Y3R5cGVfbCgicHJpbnQi LCBfTV9jX2xvY2FsZV9jdHlwZSk7DQogCWVsc2UNCiAJICBfX3JldCA9IF9fd21hc2tfdHlwZSgp Ow0KICAgICAgIH0NCiAgICAgcmV0dXJuIF9fcmV0Ow0KLSAgfTsNCisgIH0NCiANCiAgIHdjaGFy X3QNCiAgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b3VwcGVyKHdjaGFyX3QgX19jKSBjb25zdA0KLSAg eyByZXR1cm4gdG93dXBwZXIoX19jKTsgfQ0KKyAgeyByZXR1cm4gdG93dXBwZXJfbChfX2MsIF9N X2NfbG9jYWxlX2N0eXBlKTsgfQ0KIA0KICAgY29uc3Qgd2NoYXJfdCoNCiAgIGN0eXBlPHdjaGFy X3Q+Ojpkb190b3VwcGVyKHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0 DQogICB7DQogICAgIHdoaWxlIChfX2xvIDwgX19oaSkNCiAgICAgICB7DQotICAgICAgICAqX19s byA9IHRvd3VwcGVyKCpfX2xvKTsNCisJKl9fbG8gPSB0b3d1cHBlcl9sKCpfX2xvLCBfTV9jX2xv Y2FsZV9jdHlwZSk7DQogICAgICAgICArK19fbG87DQogICAgICAgfQ0KICAgICByZXR1cm4gX19o aTsNCkBAIC0xMjYsMTQgKzEyNiwxNCBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lP Tg0KIA0KICAgd2NoYXJfdA0KICAgY3R5cGU8d2NoYXJfdD46OmRvX3RvbG93ZXIod2NoYXJfdCBf X2MpIGNvbnN0DQotICB7IHJldHVybiB0b3dsb3dlcihfX2MpOyB9DQorICB7IHJldHVybiB0b3ds b3dlcl9sKF9fYywgX01fY19sb2NhbGVfY3R5cGUpOyB9DQogDQogICBjb25zdCB3Y2hhcl90Kg0K ICAgY3R5cGU8d2NoYXJfdD46OmRvX3RvbG93ZXIod2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJf dCogX19oaSkgY29uc3QNCiAgIHsNCiAgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQ0KICAgICAgIHsN Ci0gICAgICAgICpfX2xvID0gdG93bG93ZXIoKl9fbG8pOw0KKwkqX19sbyA9IHRvd2xvd2VyX2wo Kl9fbG8sIF9NX2NfbG9jYWxlX2N0eXBlKTsNCiAgICAgICAgICsrX19sbzsNCiAgICAgICB9DQog ICAgIHJldHVybiBfX2hpOw0KQEAgLTE0OCw3ICsxNDgsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1F U1BBQ0VfVkVSU0lPTg0KICAgICBjb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDc7DQogICAg IGZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytf X2JpdGN1cikNCiAgICAgICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXQ0KLQkgICYmIGlzd2N0 eXBlKF9fYywgX01fd21hc2tbX19iaXRjdXJdKSkNCisJICAmJiBpc3djdHlwZV9sKF9fYywgX01f d21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpDQogCXsNCiAJICBfX3JldCA9IHRy dWU7DQogCSAgYnJlYWs7DQpAQCAtMTY2LDcgKzE2Niw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVT UEFDRV9WRVJTSU9ODQogCWNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gNzsNCiAJbWFzayBf X20gPSAwOw0KIAlmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFz a3NpemU7ICsrX19iaXRjdXIpDQotCSAgaWYgKGlzd2N0eXBlKCpfX2xvLCBfTV93bWFza1tfX2Jp dGN1cl0pKQ0KKwkgIGlmIChpc3djdHlwZV9sKCpfX2xvLCBfTV93bWFza1tfX2JpdGN1cl0sIF9N X2NfbG9jYWxlX2N0eXBlKSkNCiAJICAgIF9fbSB8PSBfTV9iaXRbX19iaXRjdXJdOw0KIAkqX192 ZWMgPSBfX207DQogICAgICAgfQ0KQEAgLTIxNSw3ICsyMTUsOSBAQCBfR0xJQkNYWF9CRUdJTl9O QU1FU1BBQ0VfVkVSU0lPTg0KICAgew0KICAgICBpZiAoX193YyA+PSAwICYmIF9fd2MgPCAxMjgg JiYgX01fbmFycm93X29rKQ0KICAgICAgIHJldHVybiBfTV9uYXJyb3dbX193Y107DQorICAgIF9f Y19sb2NhbGUgX19vbGQgPSB1c2Vsb2NhbGUoX01fY19sb2NhbGVfY3R5cGUpOw0KICAgICBjb25z dCBpbnQgX19jID0gd2N0b2IoX193Yyk7DQorICAgIHVzZWxvY2FsZShfX29sZCk7DQogICAgIHJl dHVybiAoX19jID09IEVPRiA/IF9fZGZhdWx0IDogc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7DQog ICB9DQogDQpAQCAtMjI0LDYgKzIyNiw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJT SU9ODQogICBkb19uYXJyb3coY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19o aSwgY2hhciBfX2RmYXVsdCwNCiAJICAgIGNoYXIqIF9fZGVzdCkgY29uc3QNCiAgIHsNCisgICAg X19jX2xvY2FsZSBfX29sZCA9IHVzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7DQogICAgIGlm IChfTV9uYXJyb3dfb2spDQogICAgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQ0KIAl7DQpAQCAtMjQ1 LDEyICsyNDgsMTQgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04NCiAJICArK19f bG87DQogCSAgKytfX2Rlc3Q7DQogCX0NCisgICAgdXNlbG9jYWxlKF9fb2xkKTsNCiAgICAgcmV0 dXJuIF9faGk7DQogICB9DQogDQogICB2b2lkDQogICBjdHlwZTx3Y2hhcl90Pjo6X01faW5pdGlh bGl6ZV9jdHlwZSgpIHRocm93KCkNCiAgIHsNCisgICAgX19jX2xvY2FsZSBfX29sZCA9IHVzZWxv Y2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7DQogICAgIHdpbnRfdCBfX2k7DQogICAgIGZvciAoX19p ID0gMDsgX19pIDwgMTI4OyArK19faSkNCiAgICAgICB7DQpAQCAtMjY0LDE1ICsyNjksMTYgQEAg X0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04NCiAgICAgICBfTV9uYXJyb3dfb2sgPSB0 cnVlOw0KICAgICBlbHNlDQogICAgICAgX01fbmFycm93X29rID0gZmFsc2U7DQotICAgIGZvciAo c2l6ZV90IF9faSA9IDA7DQotCSBfX2kgPCBzaXplb2YoX01fd2lkZW4pIC8gc2l6ZW9mKHdpbnRf dCk7ICsrX19pKQ0KLSAgICAgIF9NX3dpZGVuW19faV0gPSBidG93YyhfX2kpOw0KKyAgICBmb3Ig KHNpemVfdCBfX2ogPSAwOw0KKwkgX19qIDwgc2l6ZW9mKF9NX3dpZGVuKSAvIHNpemVvZih3aW50 X3QpOyArK19faikNCisgICAgICBfTV93aWRlbltfX2pdID0gYnRvd2MoX19qKTsNCiANCi0gICAg Zm9yIChzaXplX3QgX19pID0gMDsgX19pIDw9IDc7ICsrX19pKQ0KKyAgICBmb3IgKHNpemVfdCBf X2sgPSAwOyBfX2sgPD0gNzsgKytfX2spDQogICAgICAgew0KLQlfTV9iaXRbX19pXSA9IHN0YXRp Y19jYXN0PG1hc2s+KDEgPDwgX19pKTsNCi0JX01fd21hc2tbX19pXSA9IF9NX2NvbnZlcnRfdG9f d21hc2soX01fYml0W19faV0pOw0KKwlfTV9iaXRbX19rXSA9IHN0YXRpY19jYXN0PG1hc2s+KDEg PDwgX19rKTsNCisJX01fd21hc2tbX19rXSA9IF9NX2NvbnZlcnRfdG9fd21hc2soX01fYml0W19f a10pOw0KICAgICAgIH0NCisgICAgdXNlbG9jYWxlKF9fb2xkKTsNCiAgIH0NCiAjZW5kaWYgLy8g IF9HTElCQ1hYX1VTRV9XQ0hBUl9UDQogDQpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZp Zy9sb2NhbGUvbmV3bGliL21lc3NhZ2VzX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmln L2xvY2FsZS9uZXdsaWIvbWVzc2FnZXNfbWVtYmVycy5jYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQN CmluZGV4IDAwMDAwMDAwMDAwLi41OTE5OTVmYWJhNA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvbGli c3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGliL21lc3NhZ2VzX21lbWJlcnMuY2MNCkBAIC0w LDAgKzEsMTczIEBADQorLy8gc3RkOjptZXNzYWdlcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBu ZXdsaWIgdmVyc2lvbiAtKi0gQysrIC0qLQ0KKw0KKy8vIENvcHlyaWdodCAoQykgMjAwMS0yMDIz IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLg0KKy8vDQorLy8gVGhpcyBmaWxlIGlzIHBh cnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQ0KKy8v IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVy IHRoZQ0KKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkgdGhlDQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAzLCBvciAoYXQgeW91ciBvcHRpb24pDQorLy8gYW55IGxhdGVyIHZlcnNpb24uDQorDQorLy8g VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsDQorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YNCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4NCisNCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNp b24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwNCisvLyBwZXJtaXNzaW9ucyBkZXNjcmli ZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uDQorLy8gMy4x LCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4NCisNCisvLyBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhbmQNCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0 aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOw0KKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMg YW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQ0KKy8vIDxodHRw Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4NCisNCisvLw0KKy8vIElTTyBDKysgMTQ4ODI6IDIy LjIuNy4xLjIgIG1lc3NhZ2VzIHZpcnR1YWwgZnVuY3Rpb25zDQorLy8NCisNCisvLyBXcml0dGVu IGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPg0KKy8vIE1vZGlmaWVkIGJ5IFRh a2FzaGkgWWFubyA8dGFrYXNoaS55YW5vQG5pZnR5Lm5lLmpwPg0KKw0KKyNpbmNsdWRlIDxsb2Nh bGU+DQorI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+DQorDQorI2luY2x1ZGUg PGNzdGRsaWI+CS8vIHN0ZDo6ZnJlZQ0KKyNpbmNsdWRlIDxzdHJpbmcuaD4JLy8gOjpzdHJkdXAN CisNCituYW1lc3BhY2UNCit7DQorICB1c2luZyBuYW1lc3BhY2Ugc3RkOw0KKw0KKyAgY29uc3Qg Y2hhcioNCisgIGdldF9nbGliY19tc2coX19jX2xvY2FsZSBfX2xvY2FsZV9tZXNzYWdlcyBfX2F0 dHJpYnV0ZV9fKCh1bnVzZWQpKSwNCisJCWNvbnN0IGNoYXIqIF9fbmFtZV9tZXNzYWdlcyBfX2F0 dHJpYnV0ZV9fKCh1bnVzZWQpKSwNCisJCWNvbnN0IGNoYXIqIF9fZG9tYWlubmFtZSwNCisJCWNv bnN0IGNoYXIqIF9fZGZhdWx0KQ0KKyAgew0KKyAgICBzdGQ6Ol9fY19sb2NhbGUgX19vbGQgPSB1 c2Vsb2NhbGUoX19sb2NhbGVfbWVzc2FnZXMpOw0KKyAgICBjb25zdCBjaGFyKiBfX21zZyA9IGRn ZXR0ZXh0KF9fZG9tYWlubmFtZSwgX19kZmF1bHQpOw0KKyAgICB1c2Vsb2NhbGUoX19vbGQpOw0K KyAgICByZXR1cm4gX19tc2c7DQorICB9DQorfQ0KKw0KK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhf VklTSUJJTElUWShkZWZhdWx0KQ0KK3sNCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lP Tg0KKw0KKyAgLy8gU3BlY2lhbGl6YXRpb25zLg0KKyAgdGVtcGxhdGU8Pg0KKyAgICB0eXBlbmFt ZSBtZXNzYWdlczxjaGFyPjo6Y2F0YWxvZw0KKyAgICBtZXNzYWdlczxjaGFyPjo6ZG9fb3Blbihj b25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywNCisJCQkgICAgY29uc3QgbG9jYWxlJiBfX2wp IGNvbnN0DQorICAgIHsNCisgICAgICB0eXBlZGVmIGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0 ZV90PiBfX2NvZGVjdnRfdDsNCisgICAgICBjb25zdCBfX2NvZGVjdnRfdCYgX19jb2RlY3Z0ID0g dXNlX2ZhY2V0PF9fY29kZWN2dF90PihfX2wpOw0KKw0KKyAgICAgIGJpbmRfdGV4dGRvbWFpbl9j b2Rlc2V0KF9fcy5jX3N0cigpLA0KKwkgIG5sX2xhbmdpbmZvX2woQ09ERVNFVCwgX19jb2RlY3Z0 Ll9NX2NfbG9jYWxlX2NvZGVjdnQpKTsNCisgICAgICByZXR1cm4gZ2V0X2NhdGFsb2dzKCkuX01f YWRkKF9fcy5jX3N0cigpLCBfX2wpOw0KKyAgICB9DQorDQorICB0ZW1wbGF0ZTw+DQorICAgIHZv aWQNCisgICAgbWVzc2FnZXM8Y2hhcj46OmRvX2Nsb3NlKGNhdGFsb2cgX19jKSBjb25zdA0KKyAg ICB7IGdldF9jYXRhbG9ncygpLl9NX2VyYXNlKF9fYyk7IH0NCisNCisgIHRlbXBsYXRlPD4NCisg ICAgc3RyaW5nDQorICAgIG1lc3NhZ2VzPGNoYXI+Ojpkb19nZXQoY2F0YWxvZyBfX2MsIGludCwg aW50LA0KKwkJCSAgIGNvbnN0IHN0cmluZyYgX19kZmF1bHQpIGNvbnN0DQorICAgIHsNCisgICAg ICBpZiAoX19jIDwgMCB8fCBfX2RmYXVsdC5lbXB0eSgpKQ0KKwlyZXR1cm4gX19kZmF1bHQ7DQor DQorICAgICAgY29uc3QgQ2F0YWxvZ19pbmZvKiBfX2NhdF9pbmZvID0gZ2V0X2NhdGFsb2dzKCku X01fZ2V0KF9fYyk7DQorDQorICAgICAgaWYgKCFfX2NhdF9pbmZvKQ0KKwlyZXR1cm4gX19kZmF1 bHQ7DQorDQorICAgICAgcmV0dXJuIGdldF9nbGliY19tc2coX01fY19sb2NhbGVfbWVzc2FnZXMs IF9NX25hbWVfbWVzc2FnZXMsDQorCQkJICAgX19jYXRfaW5mby0+X01fZG9tYWluLA0KKwkJCSAg IF9fZGZhdWx0LmNfc3RyKCkpOw0KKyAgICB9DQorDQorI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hB Ul9UDQorICB0ZW1wbGF0ZTw+DQorICAgIHR5cGVuYW1lIG1lc3NhZ2VzPHdjaGFyX3Q+OjpjYXRh bG9nDQorICAgIG1lc3NhZ2VzPHdjaGFyX3Q+Ojpkb19vcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxj aGFyPiYgX19zLA0KKwkJCSAgICAgICBjb25zdCBsb2NhbGUmIF9fbCkgY29uc3QNCisgICAgew0K KyAgICAgIHR5cGVkZWYgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+IF9fY29kZWN2 dF90Ow0KKyAgICAgIGNvbnN0IF9fY29kZWN2dF90JiBfX2NvZGVjdnQgPSB1c2VfZmFjZXQ8X19j b2RlY3Z0X3Q+KF9fbCk7DQorDQorICAgICAgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQoX19zLmNf c3RyKCksDQorCSAgbmxfbGFuZ2luZm9fbChDT0RFU0VULCBfX2NvZGVjdnQuX01fY19sb2NhbGVf Y29kZWN2dCkpOw0KKw0KKyAgICAgIHJldHVybiBnZXRfY2F0YWxvZ3MoKS5fTV9hZGQoX19zLmNf c3RyKCksIF9fbCk7DQorICAgIH0NCisNCisgIHRlbXBsYXRlPD4NCisgICAgdm9pZA0KKyAgICBt ZXNzYWdlczx3Y2hhcl90Pjo6ZG9fY2xvc2UoY2F0YWxvZyBfX2MpIGNvbnN0DQorICAgIHsgZ2V0 X2NhdGFsb2dzKCkuX01fZXJhc2UoX19jKTsgfQ0KKw0KKyAgdGVtcGxhdGU8Pg0KKyAgICB3c3Ry aW5nDQorICAgIG1lc3NhZ2VzPHdjaGFyX3Q+Ojpkb19nZXQoY2F0YWxvZyBfX2MsIGludCwgaW50 LA0KKwkJCSAgICAgIGNvbnN0IHdzdHJpbmcmIF9fd2RmYXVsdCkgY29uc3QNCisgICAgew0KKyAg ICAgIGlmIChfX2MgPCAwIHx8IF9fd2RmYXVsdC5lbXB0eSgpKQ0KKwlyZXR1cm4gX193ZGZhdWx0 Ow0KKw0KKyAgICAgIGNvbnN0IENhdGFsb2dfaW5mbyogX19jYXRfaW5mbyA9IGdldF9jYXRhbG9n cygpLl9NX2dldChfX2MpOw0KKw0KKyAgICAgIGlmICghX19jYXRfaW5mbykNCisJcmV0dXJuIF9f d2RmYXVsdDsNCisNCisgICAgICB0eXBlZGVmIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0 ZV90PiBfX2NvZGVjdnRfdDsNCisgICAgICBjb25zdCBfX2NvZGVjdnRfdCYgX19jb252ID0NCisJ dXNlX2ZhY2V0PF9fY29kZWN2dF90PihfX2NhdF9pbmZvLT5fTV9sb2NhbGUpOw0KKw0KKyAgICAg IGNvbnN0IGNoYXIqIF9fdHJhbnNsYXRpb247DQorICAgICAgbWJzdGF0ZV90IF9fc3RhdGU7DQor ICAgICAgX19idWlsdGluX21lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOw0K KyAgICAgIHsNCisJY29uc3Qgd2NoYXJfdCogX193ZGZhdWx0X25leHQ7DQorCXNpemVfdCBfX21i X3NpemUgPSBfX3dkZmF1bHQuc2l6ZSgpICogX19jb252Lm1heF9sZW5ndGgoKTsNCisJY2hhciog X19kZmF1bHQgPQ0KKwkgIHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVv ZihjaGFyKSAqIChfX21iX3NpemUgKyAxKSkpOw0KKwljaGFyKiBfX2RmYXVsdF9uZXh0Ow0KKwlf X2NvbnYub3V0KF9fc3RhdGUsDQorCQkgICBfX3dkZmF1bHQuZGF0YSgpLCBfX3dkZmF1bHQuZGF0 YSgpICsgX193ZGZhdWx0LnNpemUoKSwNCisJCSAgIF9fd2RmYXVsdF9uZXh0LA0KKwkJICAgX19k ZmF1bHQsIF9fZGZhdWx0ICsgX19tYl9zaXplLCBfX2RmYXVsdF9uZXh0KTsNCisNCisJLy8gTWFr ZSBzdXJlIHN0cmluZyBwYXNzZWQgdG8gZGdldHRleHQgaXMgXDAgdGVybWluYXRlZC4NCisJKl9f ZGZhdWx0X25leHQgPSAnXDAnOw0KKwlfX3RyYW5zbGF0aW9uID0gZ2V0X2dsaWJjX21zZyhfTV9j X2xvY2FsZV9tZXNzYWdlcywgX01fbmFtZV9tZXNzYWdlcywNCisJCQkJICAgICAgX19jYXRfaW5m by0+X01fZG9tYWluLCBfX2RmYXVsdCk7DQorDQorCS8vIElmIHdlIGVuZCB1cCBnZXR0aW5nIGRl ZmF1bHQgdmFsdWUgYmFjayB3ZSBjYW4gc2ltcGx5IHJldHVybiBvcmlnaW5hbA0KKwkvLyBkZWZh dWx0IHZhbHVlLg0KKwlpZiAoX190cmFuc2xhdGlvbiA9PSBfX2RmYXVsdCkNCisJICByZXR1cm4g X193ZGZhdWx0Ow0KKyAgICAgIH0NCisNCisgICAgICBfX2J1aWx0aW5fbWVtc2V0KCZfX3N0YXRl LCAwLCBzaXplb2YobWJzdGF0ZV90KSk7DQorICAgICAgc2l6ZV90IF9fc2l6ZSA9IF9fYnVpbHRp bl9zdHJsZW4oX190cmFuc2xhdGlvbik7DQorICAgICAgY29uc3QgY2hhciogX190cmFuc2xhdGlv bl9uZXh0Ow0KKyAgICAgIHdjaGFyX3QqIF9fd3RyYW5zbGF0aW9uID0NCisJc3RhdGljX2Nhc3Q8 d2NoYXJfdCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKHdjaGFyX3QpICogKF9fc2l6ZSArIDEp KSk7DQorICAgICAgd2NoYXJfdCogX193dHJhbnNsYXRpb25fbmV4dDsNCisgICAgICBfX2NvbnYu aW4oX19zdGF0ZSwgX190cmFuc2xhdGlvbiwgX190cmFuc2xhdGlvbiArIF9fc2l6ZSwNCisJCV9f dHJhbnNsYXRpb25fbmV4dCwNCisJCV9fd3RyYW5zbGF0aW9uLCBfX3d0cmFuc2xhdGlvbiArIF9f c2l6ZSwNCisJCV9fd3RyYW5zbGF0aW9uX25leHQpOw0KKyAgICAgIHJldHVybiB3c3RyaW5nKF9f d3RyYW5zbGF0aW9uLCBfX3d0cmFuc2xhdGlvbl9uZXh0KTsNCisgICAgfQ0KKyNlbmRpZg0KKw0K K19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTg0KK30gLy8gbmFtZXNwYWNlDQpkaWZmIC0t Z2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGliL21lc3NhZ2VzX21lbWJlcnMu aCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25ld2xpYi9tZXNzYWdlc19tZW1iZXJzLmgN Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMC4uZGRmYWMyMDc4OTcNCi0t LSAvZGV2L251bGwNCisrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25ld2xpYi9tZXNz YWdlc19tZW1iZXJzLmgNCkBAIC0wLDAgKzEsMTUyIEBADQorLy8gc3RkOjptZXNzYWdlcyBpbXBs ZW1lbnRhdGlvbiBkZXRhaWxzLCBuZXdsaWIgdmVyc2lvbiAtKi0gQysrIC0qLQ0KKw0KKy8vIENv cHlyaWdodCAoQykgMjAwMS0yMDIzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLg0KKy8v DQorLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlz IGxpYnJhcnkgaXMgZnJlZQ0KKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQ0KKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorLy8gRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pDQorLy8gYW55IGxh dGVyIHZlcnNpb24uDQorDQorLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCisvLyBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQorLy8gR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisNCisvLyBVbmRlciBT ZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwNCisv LyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0 aW9uLCB2ZXJzaW9uDQorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbi4NCisNCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQNCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBS dW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOw0KKy8vIHNl ZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJ ZiBub3QsIHNlZQ0KKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4NCisNCisvKiog QGZpbGUgYml0cy9tZXNzYWdlc19tZW1iZXJzLmgNCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBo ZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLg0KKyAqICBEbyBu b3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le2xvY2FsZX0NCisgKi8N CisNCisvLw0KKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNy4xLjIgIG1lc3NhZ2VzIGZ1bmN0aW9u cw0KKy8vDQorDQorLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNv bT4NCisvLyBNb2RpZmllZCBieSBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0BuaWZ0eS5uZS5q cD4NCisNCisjaW5jbHVkZSA8bGliaW50bC5oPg0KKw0KK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhf VklTSUJJTElUWShkZWZhdWx0KQ0KK3sNCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lP Tg0KKw0KKyAgLy8gTm9uLXZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4NCisgIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVD4NCisgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoc2l6ZV90IF9f cmVmcykNCisgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19nZXRf Y19sb2NhbGUoKSksDQorICAgICAgX01fbmFtZV9tZXNzYWdlcyhfU19nZXRfY19uYW1lKCkpDQor ICAgIHsgfQ0KKw0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KKyAgICBtZXNzYWdlczxf Q2hhclQ+OjptZXNzYWdlcyhfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLA0KKwkJ CSAgICAgICBzaXplX3QgX19yZWZzKQ0KKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxl X21lc3NhZ2VzKDApLCBfTV9uYW1lX21lc3NhZ2VzKDApDQorICAgIHsNCisgICAgICBpZiAoX19i dWlsdGluX3N0cmNtcChfX3MsIF9TX2dldF9jX25hbWUoKSkgIT0gMCkNCisJew0KKwkgIGNvbnN0 IHNpemVfdCBfX2xlbiA9IF9fYnVpbHRpbl9zdHJsZW4oX19zKSArIDE7DQorCSAgY2hhciogX190 bXAgPSBuZXcgY2hhcltfX2xlbl07DQorCSAgX19idWlsdGluX21lbWNweShfX3RtcCwgX19zLCBf X2xlbik7DQorCSAgX01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOw0KKwl9DQorICAgICAgZWxzZQ0K KwlfTV9uYW1lX21lc3NhZ2VzID0gX1NfZ2V0X2NfbmFtZSgpOw0KKw0KKyAgICAgIC8vIExhc3Qg dG8gYXZvaWQgbGVha2luZyBtZW1vcnkgaWYgbmV3IHRocm93cy4NCisgICAgICBfTV9jX2xvY2Fs ZV9tZXNzYWdlcyA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7DQorICAgIH0NCisNCisgIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCisgICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6 Y2F0YWxvZw0KKyAgICBtZXNzYWdlczxfQ2hhclQ+OjpvcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxj aGFyPiYgX19zLCBjb25zdCBsb2NhbGUmIF9fbG9jLA0KKwkJCSAgIGNvbnN0IGNoYXIqIF9fZGly KSBjb25zdA0KKyAgICB7DQorICAgICAgYmluZHRleHRkb21haW4oX19zLmNfc3RyKCksIF9fZGly KTsNCisgICAgICByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsNCisgICAgfQ0KKw0K KyAgLy8gVmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLg0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJUPg0KKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojp+bWVzc2FnZXMoKQ0KKyAgICB7DQorICAgICAg aWYgKF9NX25hbWVfbWVzc2FnZXMgIT0gX1NfZ2V0X2NfbmFtZSgpKQ0KKwlkZWxldGUgW10gX01f bmFtZV9tZXNzYWdlczsNCisgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21l c3NhZ2VzKTsNCisgICAgfQ0KKw0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KKyAgICB0 eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nDQorICAgIG1lc3NhZ2VzPF9DaGFyVD46 OmRvX29wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsDQorCQkJICAgICAgY29uc3Qg bG9jYWxlJikgY29uc3QNCisgICAgew0KKyAgICAgIC8vIE5vIGVycm9yIGNoZWNraW5nIGlzIGRv bmUsIGFzc3VtZSB0aGUgY2F0YWxvZyBleGlzdHMgYW5kIGNhbg0KKyAgICAgIC8vIGJlIHVzZWQu DQorICAgICAgdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7DQorICAgICAgcmV0dXJuIDA7DQorICAg IH0NCisNCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCisgICAgdm9pZA0KKyAgICBtZXNz YWdlczxfQ2hhclQ+Ojpkb19jbG9zZShjYXRhbG9nKSBjb25zdA0KKyAgICB7IH0NCisNCisgIC8v IG1lc3NhZ2VzX2J5bmFtZQ0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KKyAgICBtZXNz YWdlc19ieW5hbWU8X0NoYXJUPjo6bWVzc2FnZXNfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6 ZV90IF9fcmVmcykNCisgICAgOiBtZXNzYWdlczxfQ2hhclQ+KF9fcmVmcykNCisgICAgew0KKyAg ICAgIGlmICh0aGlzLT5fTV9uYW1lX21lc3NhZ2VzICE9IGxvY2FsZTo6ZmFjZXQ6Ol9TX2dldF9j X25hbWUoKSkNCisJew0KKwkgIGRlbGV0ZSBbXSB0aGlzLT5fTV9uYW1lX21lc3NhZ2VzOw0KKwkg IGlmIChfX2J1aWx0aW5fc3RyY21wKF9fcywgbG9jYWxlOjpmYWNldDo6X1NfZ2V0X2NfbmFtZSgp KSAhPSAwKQ0KKwkgICAgew0KKwkgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX2J1aWx0aW5f c3RybGVuKF9fcykgKyAxOw0KKwkgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW19fbGVuXTsN CisJICAgICAgX19idWlsdGluX21lbWNweShfX3RtcCwgX19zLCBfX2xlbik7DQorCSAgICAgIHRo aXMtPl9NX25hbWVfbWVzc2FnZXMgPSBfX3RtcDsNCisJICAgIH0NCisJICBlbHNlDQorCSAgICB0 aGlzLT5fTV9uYW1lX21lc3NhZ2VzID0gbG9jYWxlOjpmYWNldDo6X1NfZ2V0X2NfbmFtZSgpOw0K Kwl9DQorDQorICAgICAgaWYgKF9fYnVpbHRpbl9zdHJjbXAoX19zLCAiQyIpICE9IDANCisJICAm JiBfX2J1aWx0aW5fc3RyY21wKF9fcywgIlBPU0lYIikgIT0gMCkNCisJew0KKwkgIHRoaXMtPl9T X2Rlc3Ryb3lfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfbWVzc2FnZXMpOw0KKwkgIHRoaXMt Pl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcywgX19zKTsNCisJ fQ0KKyAgICB9DQorDQorICAgLy9TcGVjaWFsaXphdGlvbnMuDQorICB0ZW1wbGF0ZTw+DQorICAg IHR5cGVuYW1lIG1lc3NhZ2VzPGNoYXI+OjpjYXRhbG9nDQorICAgIG1lc3NhZ2VzPGNoYXI+Ojpk b19vcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYsDQorCQkJICAgIGNvbnN0IGxvY2FsZSYp IGNvbnN0Ow0KKw0KKyAgdGVtcGxhdGU8Pg0KKyAgICB2b2lkDQorICAgIG1lc3NhZ2VzPGNoYXI+ Ojpkb19jbG9zZShjYXRhbG9nKSBjb25zdDsNCisNCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFS X1QNCisgIHRlbXBsYXRlPD4NCisgICAgdHlwZW5hbWUgbWVzc2FnZXM8d2NoYXJfdD46OmNhdGFs b2cNCisgICAgbWVzc2FnZXM8d2NoYXJfdD46OmRvX29wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNo YXI+JiwNCisJCQkgICAgICAgY29uc3QgbG9jYWxlJikgY29uc3Q7DQorDQorICB0ZW1wbGF0ZTw+ DQorICAgIHZvaWQNCisgICAgbWVzc2FnZXM8d2NoYXJfdD46OmRvX2Nsb3NlKGNhdGFsb2cpIGNv bnN0Ow0KKyNlbmRpZg0KKw0KK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTg0KK30gLy8g bmFtZXNwYWNlDQpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGli L21vbmV0YXJ5X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIv bW9uZXRhcnlfbWVtYmVycy5jYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAw MDAwLi4yYmJjOTZlNzNhNA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvbGlic3RkYysrLXYzL2NvbmZp Zy9sb2NhbGUvbmV3bGliL21vbmV0YXJ5X21lbWJlcnMuY2MNCkBAIC0wLDAgKzEsOTQyIEBADQor Ly8gc3RkOjptb25leXB1bmN0IGltcGxlbWVudGF0aW9uIGRldGFpbHMsIG5ld2xpYiB2ZXJzaW9u IC0qLSBDKysgLSotDQorDQorLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMjMgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuDQorLy8NCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05V IElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlDQorLy8gc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlDQorLy8gdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUN CisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5 b3VyIG9wdGlvbikNCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4NCisNCisvLyBUaGlzIGxpYnJhcnkg aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisvLyBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZg0KKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUNCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLg0KKw0KKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJl IGdyYW50ZWQgYWRkaXRpb25hbA0KKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0ND IFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24NCisvLyAzLjEsIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLg0KKw0KKy8vIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZA0K Ky8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0 aCB0aGlzIHByb2dyYW07DQorLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5S VU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlDQorLy8gPGh0dHA6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+Lg0KKw0KKy8vDQorLy8gSVNPIEMrKyAxNDg4MjogMjIuMi42LjMuMiAgbW9u ZXlwdW5jdCB2aXJ0dWFsIGZ1bmN0aW9ucw0KKy8vDQorDQorLy8gV3JpdHRlbiBieSBCZW5qYW1p biBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4NCisvLyBNb2RpZmllZCBieSBUYWthc2hpIFlhbm8g PHRha2FzaGkueWFub0BuaWZ0eS5uZS5qcD4NCisNCisjaW5jbHVkZSA8bG9jYWxlPg0KKyNpbmNs dWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPg0KKw0KK25hbWVzcGFjZSBzdGQgX0dMSUJD WFhfVklTSUJJTElUWShkZWZhdWx0KQ0KK3sNCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVS U0lPTg0KKw0KKy8vIFRoaXMgZmlsZSBtaWdodCBiZSBjb21waWxlZCB0d2ljZSwgYnV0IHdlIG9u bHkgd2FudCB0byBkZWZpbmUgdGhlIG1lbWJlcnMNCisvLyBvZiBtb25leV9iYXNlIG9uY2UuDQor I2lmICEgX0dMSUJDWFhfVVNFX0NYWDExX0FCSQ0KKw0KKyAgLy8gQ29uc3RydWN0IGFuZCByZXR1 cm4gdmFsaWQgcGF0dGVybiBjb25zaXN0aW5nIG9mIHNvbWUgY29tYmluYXRpb24gb2Y6DQorICAv LyBzcGFjZSBub25lIHN5bWJvbCBzaWduIHZhbHVlDQorICBtb25leV9iYXNlOjpwYXR0ZXJuDQor ICBtb25leV9iYXNlOjpfU19jb25zdHJ1Y3RfcGF0dGVybihjaGFyIF9fcHJlY2VkZXMsIGNoYXIg X19zcGFjZSwNCisJCQkJICAgY2hhciBfX3Bvc24pIHRocm93KCkNCisgIHsNCisgICAgcGF0dGVy biBfX3JldDsNCisNCisgICAgLy8gVGhpcyBpbnNhbmVseSBjb21wbGljYXRlZCByb3V0aW5lIGF0 dGVtcHRzIHRvIGNvbnN0cnVjdCBhIHZhbGlkDQorICAgIC8vIHBhdHRlcm4gZm9yIHVzZSB3aXRo IG1vbnllcHVuY3QuIEEgY291cGxlIG9mIGludmFyaWFudHM6DQorDQorICAgIC8vIGlmIChfX3By ZWNlZGVzKSBzeW1ib2wgLT4gdmFsdWUNCisgICAgLy8gZWxzZSB2YWx1ZSAtPiBzeW1ib2wNCisN CisgICAgLy8gaWYgKF9fc3BhY2UpIHNwYWNlDQorICAgIC8vIGVsc2Ugbm9uZQ0KKw0KKyAgICAv LyBub25lID09IG5ldmVyIGZpcnN0DQorICAgIC8vIHNwYWNlIG5ldmVyIGZpcnN0IG9yIGxhc3QN CisNCisgICAgLy8gQW55IGVsZWdhbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMgYXJlIHdlbGNv bWUuDQorICAgIHN3aXRjaCAoX19wb3NuKQ0KKyAgICAgIHsNCisgICAgICBjYXNlIDA6DQorICAg ICAgY2FzZSAxOg0KKwkvLyAxIFRoZSBzaWduIHByZWNlZGVzIHRoZSB2YWx1ZSBhbmQgc3ltYm9s Lg0KKwlfX3JldC5maWVsZFswXSA9IHNpZ247DQorCWlmIChfX3NwYWNlKQ0KKwkgIHsNCisJICAg IC8vIFBhdHRlcm4gc3RhcnRzIHdpdGggc2lnbi4NCisJICAgIGlmIChfX3ByZWNlZGVzKQ0KKwkg ICAgICB7DQorCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsNCisJCV9fcmV0LmZpZWxkWzNdID0g dmFsdWU7DQorCSAgICAgIH0NCisJICAgIGVsc2UNCisJICAgICAgew0KKwkJX19yZXQuZmllbGRb MV0gPSB2YWx1ZTsNCisJCV9fcmV0LmZpZWxkWzNdID0gc3ltYm9sOw0KKwkgICAgICB9DQorCSAg ICBfX3JldC5maWVsZFsyXSA9IHNwYWNlOw0KKwkgIH0NCisJZWxzZQ0KKwkgIHsNCisJICAgIC8v IFBhdHRlcm4gc3RhcnRzIHdpdGggc2lnbiBhbmQgZW5kcyB3aXRoIG5vbmUuDQorCSAgICBpZiAo X19wcmVjZWRlcykNCisJICAgICAgew0KKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7DQorCQlf X3JldC5maWVsZFsyXSA9IHZhbHVlOw0KKwkgICAgICB9DQorCSAgICBlbHNlDQorCSAgICAgIHsN CisJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7DQorCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsN CisJICAgICAgfQ0KKwkgICAgX19yZXQuZmllbGRbM10gPSBub25lOw0KKwkgIH0NCisJYnJlYWs7 DQorICAgICAgY2FzZSAyOg0KKwkvLyAyIFRoZSBzaWduIGZvbGxvd3MgdGhlIHZhbHVlIGFuZCBz eW1ib2wuDQorCWlmIChfX3NwYWNlKQ0KKwkgIHsNCisJICAgIC8vIFBhdHRlcm4gZWl0aGVyIGVu ZHMgd2l0aCBzaWduLg0KKwkgICAgaWYgKF9fcHJlY2VkZXMpDQorCSAgICAgIHsNCisJCV9fcmV0 LmZpZWxkWzBdID0gc3ltYm9sOw0KKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsNCisJICAgICAg fQ0KKwkgICAgZWxzZQ0KKwkgICAgICB7DQorCQlfX3JldC5maWVsZFswXSA9IHZhbHVlOw0KKwkJ X19yZXQuZmllbGRbMl0gPSBzeW1ib2w7DQorCSAgICAgIH0NCisJICAgIF9fcmV0LmZpZWxkWzFd ID0gc3BhY2U7DQorCSAgICBfX3JldC5maWVsZFszXSA9IHNpZ247DQorCSAgfQ0KKwllbHNlDQor CSAgew0KKwkgICAgLy8gUGF0dGVybiBlbmRzIHdpdGggc2lnbiB0aGVuIG5vbmUuDQorCSAgICBp ZiAoX19wcmVjZWRlcykNCisJICAgICAgew0KKwkJX19yZXQuZmllbGRbMF0gPSBzeW1ib2w7DQor CQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOw0KKwkgICAgICB9DQorCSAgICBlbHNlDQorCSAgICAg IHsNCisJCV9fcmV0LmZpZWxkWzBdID0gdmFsdWU7DQorCQlfX3JldC5maWVsZFsxXSA9IHN5bWJv bDsNCisJICAgICAgfQ0KKwkgICAgX19yZXQuZmllbGRbMl0gPSBzaWduOw0KKwkgICAgX19yZXQu ZmllbGRbM10gPSBub25lOw0KKwkgIH0NCisJYnJlYWs7DQorICAgICAgY2FzZSAzOg0KKwkvLyAz IFRoZSBzaWduIGltbWVkaWF0ZWx5IHByZWNlZGVzIHRoZSBzeW1ib2wuDQorCWlmIChfX3ByZWNl ZGVzKQ0KKwkgIHsNCisJICAgIF9fcmV0LmZpZWxkWzBdID0gc2lnbjsNCisJICAgIF9fcmV0LmZp ZWxkWzFdID0gc3ltYm9sOw0KKwkgICAgaWYgKF9fc3BhY2UpDQorCSAgICAgIHsNCisJCV9fcmV0 LmZpZWxkWzJdID0gc3BhY2U7DQorCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOw0KKwkgICAgICB9 DQorCSAgICBlbHNlDQorCSAgICAgIHsNCisJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7DQorCQlf X3JldC5maWVsZFszXSA9IG5vbmU7DQorCSAgICAgIH0NCisJICB9DQorCWVsc2UNCisJICB7DQor CSAgICBfX3JldC5maWVsZFswXSA9IHZhbHVlOw0KKwkgICAgaWYgKF9fc3BhY2UpDQorCSAgICAg IHsNCisJCV9fcmV0LmZpZWxkWzFdID0gc3BhY2U7DQorCQlfX3JldC5maWVsZFsyXSA9IHNpZ247 DQorCQlfX3JldC5maWVsZFszXSA9IHN5bWJvbDsNCisJICAgICAgfQ0KKwkgICAgZWxzZQ0KKwkg ICAgICB7DQorCQlfX3JldC5maWVsZFsxXSA9IHNpZ247DQorCQlfX3JldC5maWVsZFsyXSA9IHN5 bWJvbDsNCisJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsNCisJICAgICAgfQ0KKwkgIH0NCisJYnJl YWs7DQorICAgICAgY2FzZSA0Og0KKwkvLyA0IFRoZSBzaWduIGltbWVkaWF0ZWx5IGZvbGxvd3Mg dGhlIHN5bWJvbC4NCisJaWYgKF9fcHJlY2VkZXMpDQorCSAgew0KKwkgICAgX19yZXQuZmllbGRb MF0gPSBzeW1ib2w7DQorCSAgICBfX3JldC5maWVsZFsxXSA9IHNpZ247DQorCSAgICBpZiAoX19z cGFjZSkNCisJICAgICAgew0KKwkJX19yZXQuZmllbGRbMl0gPSBzcGFjZTsNCisJCV9fcmV0LmZp ZWxkWzNdID0gdmFsdWU7DQorCSAgICAgIH0NCisJICAgIGVsc2UNCisJICAgICAgew0KKwkJX19y ZXQuZmllbGRbMl0gPSB2YWx1ZTsNCisJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsNCisJICAgICAg fQ0KKwkgIH0NCisJZWxzZQ0KKwkgIHsNCisJICAgIF9fcmV0LmZpZWxkWzBdID0gdmFsdWU7DQor CSAgICBpZiAoX19zcGFjZSkNCisJICAgICAgew0KKwkJX19yZXQuZmllbGRbMV0gPSBzcGFjZTsN CisJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOw0KKwkJX19yZXQuZmllbGRbM10gPSBzaWduOw0K KwkgICAgICB9DQorCSAgICBlbHNlDQorCSAgICAgIHsNCisJCV9fcmV0LmZpZWxkWzFdID0gc3lt Ym9sOw0KKwkJX19yZXQuZmllbGRbMl0gPSBzaWduOw0KKwkJX19yZXQuZmllbGRbM10gPSBub25l Ow0KKwkgICAgICB9DQorCSAgfQ0KKwlicmVhazsNCisgICAgICBkZWZhdWx0Og0KKwlfX3JldCA9 IHBhdHRlcm4oKTsNCisgICAgICB9DQorICAgIHJldHVybiBfX3JldDsNCisgIH0NCisjZW5kaWYN CisNCisgIGV4dGVybiBjaGFyIF9fbmFycm93X211bHRpYnl0ZV9jaGFycyhjb25zdCBjaGFyKiBz LCBsb2NhbGVfdCBjbG9jKTsNCisNCisgIHRlbXBsYXRlPD4NCisgICAgdm9pZA0KKyAgICBtb25l eXB1bmN0PGNoYXIsIHRydWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBf X2Nsb2MsDQorCQkJCQkJICAgICBjb25zdCBjaGFyKikNCisgICAgew0KKyAgICAgIGlmICghX01f ZGF0YSkNCisJX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8Y2hhciwgdHJ1ZT47DQor DQorICAgICAgaWYgKCFfX2Nsb2MpDQorCXsNCisJICAvLyAiQyIgbG9jYWxlDQorCSAgX01fZGF0 YS0+X01fZGVjaW1hbF9wb2ludCA9ICcuJzsNCisJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2Vw ID0gJywnOw0KKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7DQorCSAgX01fZGF0YS0+X01f Z3JvdXBpbmdfc2l6ZSA9IDA7DQorCSAgX01fZGF0YS0+X01fdXNlX2dyb3VwaW5nID0gZmFsc2U7 DQorCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSAiIjsNCisJICBfTV9kYXRhLT5fTV9jdXJy X3N5bWJvbF9zaXplID0gMDsNCisJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gIiI7DQor CSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsNCisJICBfTV9kYXRhLT5fTV9u ZWdhdGl2ZV9zaWduID0gIiI7DQorCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0g MDsNCisJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7DQorCSAgX01fZGF0YS0+X01fcG9z X2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsNCisJICBfTV9kYXRhLT5f TV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOw0KKw0KKwkgIGZv ciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpDQorCSAg ICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0gbW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXTsNCisJ fQ0KKyAgICAgIGVsc2UNCisJew0KKwkgIC8vIE5hbWVkIGxvY2FsZS4NCisJICBfTV9kYXRhLT5f TV9kZWNpbWFsX3BvaW50ID0NCisJICAgICoobmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfTU9O X0RFQ0lNQUxfUE9JTlQsIF9fY2xvYykpOw0KKwkgIGNvbnN0IGNoYXIqIHRob3VzYW5kc19zZXAg PQ0KKwkgICAgbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfTU9OX1RIT1VTQU5EU19TRVAsIF9f Y2xvYyk7DQorCSAgaWYgKHRob3VzYW5kc19zZXBbMF0gIT0gJ1wwJyAmJiB0aG91c2FuZHNfc2Vw WzFdICE9ICdcMCcpDQorCSAgICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19uYXJyb3df bXVsdGlieXRlX2NoYXJzKHRob3VzYW5kc19zZXAsDQorCQkJCQkJCQkgX19jbG9jKTsNCisJICBl bHNlDQorCSAgICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gKnRob3VzYW5kc19zZXA7DQor DQorCSAgLy8gQ2hlY2sgZm9yIE5VTEwsIHdoaWNoIGltcGxpZXMgbm8gZnJhY3Rpb25hbCBkaWdp dHMuDQorCSAgaWYgKF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPT0gJ1wwJykNCisJICAgIHsN CisJICAgICAgLy8gTGlrZSBpbiAiQyIgbG9jYWxlLg0KKwkgICAgICBfTV9kYXRhLT5fTV9mcmFj X2RpZ2l0cyA9IDA7DQorCSAgICAgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7DQor CSAgICB9DQorCSAgZWxzZQ0KKwkgICAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPQ0KKwkgICAg ICAqKG5sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0lOVF9GUkFDX0RJR0lUUywgX19jbG9jKSk7 DQorDQorCSAgY29uc3QgY2hhciogX19jZ3JvdXAgPQ0KKwkgICAgbmxfbGFuZ2luZm9fbChfTkxf TU9ORVRBUllfTU9OX0dST1VQSU5HLCBfX2Nsb2MpOw0KKwkgIGNvbnN0IGNoYXIqIF9fY3Bvc3Np Z24gPQ0KKwkgICAgbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfUE9TSVRJVkVfU0lHTiwgX19j bG9jKTsNCisJICBjb25zdCBjaGFyKiBfX2NuZWdzaWduID0NCisJICAgIG5sX2xhbmdpbmZvX2wo X05MX01PTkVUQVJZX05FR0FUSVZFX1NJR04sIF9fY2xvYyk7DQorCSAgLy8gX0ludGwgPT0gdHJ1 ZQ0KKwkgIGNvbnN0IGNoYXIqIF9fY2N1cnIgPQ0KKwkgICAgbmxfbGFuZ2luZm9fbChfTkxfTU9O RVRBUllfSU5UX0NVUlJfU1lNQk9MLCBfX2Nsb2MpOw0KKw0KKwkgIGNoYXIqIF9fZ3JvdXAgPSAw Ow0KKwkgIGNoYXIqIF9fcHMgPSAwOw0KKwkgIGNoYXIqIF9fbnMgPSAwOw0KKwkgIGNvbnN0IGNo YXIgX19ucG9zbiA9DQorCSAgICAqKG5sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0lOVF9OX1NJ R05fUE9TTiwgX19jbG9jKSk7DQorCSAgX190cnkNCisJICAgIHsNCisJICAgICAgc2l6ZV90IF9f bGVuOw0KKw0KKwkgICAgICAvLyBDaGVjayBmb3IgTlVMTCwgd2hpY2ggaW1wbGllcyBubyBncm91 cGluZy4NCisJICAgICAgaWYgKF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPT0gJ1wwJykNCisJ CXsNCisJCSAgLy8gTGlrZSBpbiAiQyIgbG9jYWxlLg0KKwkJICBfTV9kYXRhLT5fTV9ncm91cGlu ZyA9ICIiOw0KKwkJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsNCisJCSAgX01fZGF0 YS0+X01fdXNlX2dyb3VwaW5nID0gZmFsc2U7DQorCQkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19z ZXAgPSAnLCc7DQorCQl9DQorCSAgICAgIGVsc2UNCisJCXsNCisJCSAgX19sZW4gPSBzdHJsZW4o X19jZ3JvdXApOw0KKwkJICBpZiAoX19sZW4pDQorCQkgICAgew0KKwkJICAgICAgX19ncm91cCA9 IG5ldyBjaGFyW19fbGVuICsgMV07DQorCQkgICAgICBtZW1jcHkoX19ncm91cCwgX19jZ3JvdXAs IF9fbGVuICsgMSk7DQorCQkgICAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fZ3JvdXA7DQor CQkgICAgfQ0KKwkJICBlbHNlDQorCQkgICAgew0KKwkJICAgICAgX01fZGF0YS0+X01fZ3JvdXBp bmcgPSAiIjsNCisJCSAgICAgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOw0KKwkJ ICAgIH0NCisJCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IF9fbGVuOw0KKwkJfQ0KKw0K KwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2Nwb3NzaWduKTsNCisJICAgICAgaWYgKF9fbGVuKQ0K KwkJew0KKwkJICBfX3BzID0gbmV3IGNoYXJbX19sZW4gKyAxXTsNCisJCSAgbWVtY3B5KF9fcHMs IF9fY3Bvc3NpZ24sIF9fbGVuICsgMSk7DQorCQkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24g PSBfX3BzOw0KKwkJfQ0KKwkgICAgICBlbHNlDQorCQlfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWdu ID0gIiI7DQorCSAgICAgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IF9fbGVuOw0K Kw0KKwkgICAgICBpZiAoIV9fbnBvc24pDQorCQl7DQorCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZl X3NpZ24gPSAiKCkiOw0KKwkJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAyOw0K KwkJfQ0KKwkgICAgICBlbHNlDQorCQl7DQorCQkgIF9fbGVuID0gc3RybGVuKF9fY25lZ3NpZ24p Ow0KKwkJICBpZiAoX19sZW4pDQorCQkgICAgew0KKwkJICAgICAgX19ucyA9IG5ldyBjaGFyW19f bGVuICsgMV07DQorCQkgICAgICBtZW1jcHkoX19ucywgX19jbmVnc2lnbiwgX19sZW4gKyAxKTsN CisJCSAgICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX25zOw0KKwkJICAgIH0NCisJ CSAgZWxzZQ0KKwkJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiIjsNCisJCSAgX01f ZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gX19sZW47DQorCQl9DQorDQorCSAgICAgIF9f bGVuID0gc3RybGVuKF9fY2N1cnIpOw0KKwkgICAgICBpZiAoX19sZW4pDQorCQl7DQorCQkgIGNo YXIqIF9fY3VyciA9IG5ldyBjaGFyW19fbGVuICsgMV07DQorCQkgIG1lbWNweShfX2N1cnIsIF9f Y2N1cnIsIF9fbGVuICsgMSk7DQorCQkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX19jdXJy Ow0KKwkJfQ0KKwkgICAgICBlbHNlDQorCQlfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9ICIiOw0K KwkgICAgICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gX19sZW47DQorCSAgICB9DQor CSAgX19jYXRjaCguLi4pDQorCSAgICB7DQorCSAgICAgIGRlbGV0ZSBfTV9kYXRhOw0KKwkgICAg ICBfTV9kYXRhID0gMDsNCisJICAgICAgZGVsZXRlIFtdIF9fZ3JvdXA7DQorCSAgICAgIGRlbGV0 ZSBbXSBfX3BzOw0KKwkgICAgICBkZWxldGUgW10gX19uczsNCisJICAgICAgX190aHJvd19leGNl cHRpb25fYWdhaW47DQorCSAgICB9DQorDQorCSAgY2hhciBfX3BwcmVjZWRlcyA9DQorCSAgICAq KG5sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0lOVF9QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsN CisJICBjaGFyIF9fcHNwYWNlID0NCisJICAgICoobmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllf SU5UX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsNCisJICBjaGFyIF9fcHBvc24gPQ0KKwkgICAg KihubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9JTlRfUF9TSUdOX1BPU04sIF9fY2xvYykpOw0K KwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVj ZWRlcywgX19wc3BhY2UsDQorCQkJCQkJCV9fcHBvc24pOw0KKwkgIGNoYXIgX19ucHJlY2VkZXMg PQ0KKwkgICAgKihubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9JTlRfTl9DU19QUkVDRURFUywg X19jbG9jKSk7DQorCSAgY2hhciBfX25zcGFjZSA9DQorCSAgICAqKG5sX2xhbmdpbmZvX2woX05M X01PTkVUQVJZX0lOVF9OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7DQorCSAgX01fZGF0YS0+X01f bmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwN CisJCQkJCQkJX19ucG9zbik7DQorCX0NCisgICAgfQ0KKw0KKyAgdGVtcGxhdGU8Pg0KKyAgICB2 b2lkDQorICAgIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVu Y3QoX19jX2xvY2FsZSBfX2Nsb2MsDQorCQkJCQkJICAgICAgY29uc3QgY2hhciopDQorICAgIHsN CisgICAgICBpZiAoIV9NX2RhdGEpDQorCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hl PGNoYXIsIGZhbHNlPjsNCisNCisgICAgICBpZiAoIV9fY2xvYykNCisJew0KKwkgIC8vICJDIiBs b2NhbGUNCisJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOw0KKwkgIF9NX2RhdGEt Pl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7DQorCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsN CisJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsNCisJICBfTV9kYXRhLT5fTV91c2Vf Z3JvdXBpbmcgPSBmYWxzZTsNCisJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9ICIiOw0KKwkg IF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOw0KKwkgIF9NX2RhdGEtPl9NX3Bvc2l0 aXZlX3NpZ24gPSAiIjsNCisJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOw0K KwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiIjsNCisJICBfTV9kYXRhLT5fTV9uZWdh dGl2ZV9zaWduX3NpemUgPSAwOw0KKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsNCisJ ICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJu Ow0KKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3Bh dHRlcm47DQorDQorCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1Nf ZW5kOyArK19faSkNCisJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPSBtb25leV9iYXNlOjpf U19hdG9tc1tfX2ldOw0KKwl9DQorICAgICAgZWxzZQ0KKwl7DQorCSAgLy8gTmFtZWQgbG9jYWxl Lg0KKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPQ0KKwkgICAgKihubF9sYW5naW5mb19s KF9OTF9NT05FVEFSWV9NT05fREVDSU1BTF9QT0lOVCwgX19jbG9jKSk7DQorCSAgX01fZGF0YS0+ X01fdGhvdXNhbmRzX3NlcCA9DQorCSAgICAqKG5sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX01P Tl9USE9VU0FORFNfU0VQLCBfX2Nsb2MpKTsNCisNCisJICAvLyBDaGVjayBmb3IgTlVMTCwgd2hp Y2ggaW1wbGllcyBubyBmcmFjdGlvbmFsIGRpZ2l0cy4NCisJICBpZiAoX01fZGF0YS0+X01fZGVj aW1hbF9wb2ludCA9PSAnXDAnKQ0KKwkgICAgew0KKwkgICAgICAvLyBMaWtlIGluICJDIiBsb2Nh bGUuDQorCSAgICAgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsNCisJICAgICAgX01fZGF0 YS0+X01fZGVjaW1hbF9wb2ludCA9ICcuJzsNCisJICAgIH0NCisJICBlbHNlDQorCSAgICBfTV9k YXRhLT5fTV9mcmFjX2RpZ2l0cyA9DQorCSAgICAgICoobmxfbGFuZ2luZm9fbChfTkxfTU9ORVRB UllfRlJBQ19ESUdJVFMsIF9fY2xvYykpOw0KKw0KKwkgIGNvbnN0IGNoYXIqIF9fY2dyb3VwID0N CisJICAgIG5sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX01PTl9HUk9VUElORywgX19jbG9jKTsN CisJICBjb25zdCBjaGFyKiBfX2Nwb3NzaWduID0NCisJICAgIG5sX2xhbmdpbmZvX2woX05MX01P TkVUQVJZX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7DQorCSAgY29uc3QgY2hhciogX19jbmVnc2ln biA9DQorCSAgICBubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9ORUdBVElWRV9TSUdOLCBfX2Ns b2MpOw0KKwkgIC8vIF9JbnRsID09IGZhbHNlDQorCSAgY29uc3QgY2hhciogX19jY3VyciA9DQor CSAgICBubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9DVVJSRU5DWV9TWU1CT0wsIF9fY2xvYyk7 DQorDQorCSAgY2hhciogX19ncm91cCA9IDA7DQorCSAgY2hhciogX19wcyA9IDA7DQorCSAgY2hh ciogX19ucyA9IDA7DQorCSAgY29uc3QgY2hhciBfX25wb3NuID0NCisJICAgICoobmxfbGFuZ2lu Zm9fbChfTkxfTU9ORVRBUllfTl9TSUdOX1BPU04sIF9fY2xvYykpOw0KKwkgIF9fdHJ5DQorCSAg ICB7DQorCSAgICAgIHNpemVfdCBfX2xlbjsNCisNCisJICAgICAgLy8gQ2hlY2sgZm9yIE5VTEws IHdoaWNoIGltcGxpZXMgbm8gZ3JvdXBpbmcuDQorCSAgICAgIGlmIChfTV9kYXRhLT5fTV90aG91 c2FuZHNfc2VwID09ICdcMCcpDQorCQl7DQorCQkgIC8vIExpa2UgaW4gIkMiIGxvY2FsZS4NCisJ CSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsNCisJCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdf c2l6ZSA9IDA7DQorCQkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOw0KKwkJICBf TV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gJywnOw0KKwkJfQ0KKwkgICAgICBlbHNlDQorCQl7 DQorCQkgIF9fbGVuID0gc3RybGVuKF9fY2dyb3VwKTsNCisJCSAgaWYgKF9fbGVuKQ0KKwkJICAg IHsNCisJCSAgICAgIF9fZ3JvdXAgPSBuZXcgY2hhcltfX2xlbiArIDFdOw0KKwkJICAgICAgbWVt Y3B5KF9fZ3JvdXAsIF9fY2dyb3VwLCBfX2xlbiArIDEpOw0KKwkJICAgICAgX01fZGF0YS0+X01f Z3JvdXBpbmcgPSBfX2dyb3VwOw0KKwkJICAgIH0NCisJCSAgZWxzZQ0KKwkJICAgIHsNCisJCSAg ICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7DQorCQkgICAgICBfTV9kYXRhLT5fTV91c2Vf Z3JvdXBpbmcgPSBmYWxzZTsNCisJCSAgICB9DQorCQkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3Np emUgPSBfX2xlbjsNCisJCX0NCisNCisJICAgICAgX19sZW4gPSBzdHJsZW4oX19jcG9zc2lnbik7 DQorCSAgICAgIGlmIChfX2xlbikNCisJCXsNCisJCSAgX19wcyA9IG5ldyBjaGFyW19fbGVuICsg MV07DQorCQkgIG1lbWNweShfX3BzLCBfX2Nwb3NzaWduLCBfX2xlbiArIDEpOw0KKwkJICBfTV9k YXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX19wczsNCisJCX0NCisJICAgICAgZWxzZQ0KKwkJX01f ZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9ICIiOw0KKwkgICAgICBfTV9kYXRhLT5fTV9wb3NpdGl2 ZV9zaWduX3NpemUgPSBfX2xlbjsNCisNCisJICAgICAgaWYgKCFfX25wb3NuKQ0KKwkJew0KKwkJ ICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIigpIjsNCisJCSAgX01fZGF0YS0+X01fbmVn YXRpdmVfc2lnbl9zaXplID0gMjsNCisJCX0NCisJICAgICAgZWxzZQ0KKwkJew0KKwkJICBfX2xl biA9IHN0cmxlbihfX2NuZWdzaWduKTsNCisJCSAgaWYgKF9fbGVuKQ0KKwkJICAgIHsNCisJCSAg ICAgIF9fbnMgPSBuZXcgY2hhcltfX2xlbiArIDFdOw0KKwkJICAgICAgbWVtY3B5KF9fbnMsIF9f Y25lZ3NpZ24sIF9fbGVuICsgMSk7DQorCQkgICAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWdu ID0gX19uczsNCisJCSAgICB9DQorCQkgIGVsc2UNCisJCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2 ZV9zaWduID0gIiI7DQorCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IF9fbGVu Ow0KKwkJfQ0KKw0KKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NjdXJyKTsNCisJICAgICAgaWYg KF9fbGVuKQ0KKwkJew0KKwkJICBjaGFyKiBfX2N1cnIgPSBuZXcgY2hhcltfX2xlbiArIDFdOw0K KwkJICBtZW1jcHkoX19jdXJyLCBfX2NjdXJyLCBfX2xlbiArIDEpOw0KKwkJICBfTV9kYXRhLT5f TV9jdXJyX3N5bWJvbCA9IF9fY3VycjsNCisJCX0NCisJICAgICAgZWxzZQ0KKwkJX01fZGF0YS0+ X01fY3Vycl9zeW1ib2wgPSAiIjsNCisJICAgICAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6 ZSA9IF9fbGVuOw0KKwkgICAgfQ0KKwkgIF9fY2F0Y2goLi4uKQ0KKwkgICAgew0KKwkgICAgICBk ZWxldGUgX01fZGF0YTsNCisJICAgICAgX01fZGF0YSA9IDA7DQorCSAgICAgIGRlbGV0ZSBbXSBf X2dyb3VwOw0KKwkgICAgICBkZWxldGUgW10gX19wczsNCisJICAgICAgZGVsZXRlIFtdIF9fbnM7 DQorCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOw0KKwkgICAgfQ0KKw0KKwkgIGNoYXIg X19wcHJlY2VkZXMgPQ0KKwkgICAgKihubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9QX0NTX1BS RUNFREVTLCBfX2Nsb2MpKTsNCisJICBjaGFyIF9fcHNwYWNlID0NCisJICAgICoobmxfbGFuZ2lu Zm9fbChfTkxfTU9ORVRBUllfUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOw0KKwkgIGNoYXIgX19w cG9zbiA9ICoobmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfUF9TSUdOX1BPU04sIF9fY2xvYykp Ow0KKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3Bw cmVjZWRlcywgX19wc3BhY2UsDQorCQkJCQkJCV9fcHBvc24pOw0KKwkgIGNoYXIgX19ucHJlY2Vk ZXMgPQ0KKwkgICAgKihubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9OX0NTX1BSRUNFREVTLCBf X2Nsb2MpKTsNCisJICBjaGFyIF9fbnNwYWNlID0NCisJICAgICoobmxfbGFuZ2luZm9fbChfTkxf TU9ORVRBUllfTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOw0KKwkgIF9NX2RhdGEtPl9NX25lZ19m b3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsDQorCQkJ CQkJCV9fbnBvc24pOw0KKwl9DQorICAgIH0NCisNCisgIHRlbXBsYXRlPD4NCisgICAgbW9uZXlw dW5jdDxjaGFyLCB0cnVlPjo6fm1vbmV5cHVuY3QoKQ0KKyAgICB7DQorICAgICAgaWYgKF9NX2Rh dGEtPl9NX2dyb3VwaW5nX3NpemUpDQorCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9ncm91cGluZzsN CisgICAgICBpZiAoX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplKQ0KKwlkZWxldGUgW10g X01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbjsNCisgICAgICBpZiAoX01fZGF0YS0+X01fbmVnYXRp dmVfc2lnbl9zaXplDQorCSAgJiYgc3RyY21wKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24sICIo KSIpICE9IDApDQorCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduOw0KKyAgICAg IGlmIChfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplKQ0KKwlkZWxldGUgW10gX01fZGF0YS0+ X01fY3Vycl9zeW1ib2w7DQorICAgICAgZGVsZXRlIF9NX2RhdGE7DQorICAgIH0NCisNCisgIHRl bXBsYXRlPD4NCisgICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46On5tb25leXB1bmN0KCkNCisg ICAgew0KKyAgICAgIGlmIChfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplKQ0KKwlkZWxldGUgW10g X01fZGF0YS0+X01fZ3JvdXBpbmc7DQorICAgICAgaWYgKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3Np Z25fc2l6ZSkNCisJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ247DQorICAgICAg aWYgKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZQ0KKwkgICYmIHN0cmNtcChfTV9kYXRh LT5fTV9uZWdhdGl2ZV9zaWduLCAiKCkiKSAhPSAwKQ0KKwlkZWxldGUgW10gX01fZGF0YS0+X01f bmVnYXRpdmVfc2lnbjsNCisgICAgICBpZiAoX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSkN CisJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sOw0KKyAgICAgIGRlbGV0ZSBfTV9k YXRhOw0KKyAgICB9DQorDQorI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UDQorICB0ZW1wbGF0 ZTw+DQorICAgIHZvaWQNCisgICAgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPjo6X01faW5pdGlh bGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLA0KKwkJCQkJCQljb25zdCBjaGFyKikN CisgICAgew0KKyAgICAgIGlmICghX01fZGF0YSkNCisJX01fZGF0YSA9IG5ldyBfX21vbmV5cHVu Y3RfY2FjaGU8d2NoYXJfdCwgdHJ1ZT47DQorDQorICAgICAgaWYgKCFfX2Nsb2MpDQorCXsNCisJ ICAvLyAiQyIgbG9jYWxlDQorCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7DQor CSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7DQorCSAgX01fZGF0YS0+X01fZ3Jv dXBpbmcgPSAiIjsNCisJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsNCisJICBfTV9k YXRhLT5fTV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsNCisJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJv bCA9IEwiIjsNCisJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsNCisJICBfTV9k YXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOw0KKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3Np Z25fc2l6ZSA9IDA7DQorCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsNCisJICBf TV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOw0KKwkgIF9NX2RhdGEtPl9NX2ZyYWNf ZGlnaXRzID0gMDsNCisJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1Nf ZGVmYXVsdF9wYXR0ZXJuOw0KKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNl OjpfU19kZWZhdWx0X3BhdHRlcm47DQorDQorCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdp dGhvdXQgdGhlIGZhY2V0Li4uDQorCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlf YmFzZTo6X1NfZW5kOyArK19faSkNCisJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPQ0KKwkg ICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90Pihtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldKTsNCisJ fQ0KKyAgICAgIGVsc2UNCisJew0KKwkgIC8vIE5hbWVkIGxvY2FsZS4NCisJICBfX2NfbG9jYWxl IF9fb2xkID0gdXNlbG9jYWxlKF9fY2xvYyk7DQorDQorCSAgdW5pb24geyBjaGFyICpfX3M7IHdj aGFyX3QgX193OyB9IF9fdTsNCisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRB UllfV01PTl9ERUNJTUFMX1BPSU5ULCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxf cG9pbnQgPSBfX3UuX193Ow0KKw0KKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9NT05F VEFSWV9XTU9OX1RIT1VTQU5EU19TRVAsIF9fY2xvYyk7DQorCSAgX01fZGF0YS0+X01fdGhvdXNh bmRzX3NlcCA9IF9fdS5fX3c7DQorDQorCSAgLy8gQ2hlY2sgZm9yIE5VTEwsIHdoaWNoIGltcGxp ZXMgbm8gZnJhY3Rpb25hbCBkaWdpdHMuDQorCSAgaWYgKF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9p bnQgPT0gTCdcMCcpDQorCSAgICB7DQorCSAgICAgIC8vIExpa2UgaW4gIkMiIGxvY2FsZS4NCisJ ICAgICAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAwOw0KKwkgICAgICBfTV9kYXRhLT5fTV9k ZWNpbWFsX3BvaW50ID0gTCcuJzsNCisJICAgIH0NCisJICBlbHNlDQorCSAgICBfTV9kYXRhLT5f TV9mcmFjX2RpZ2l0cyA9DQorCSAgICAgICoobmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfSU5U X0ZSQUNfRElHSVRTLCBfX2Nsb2MpKTsNCisNCisJICBjb25zdCBjaGFyKiBfX2Nncm91cCA9DQor CSAgICBubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9NT05fR1JPVVBJTkcsIF9fY2xvYyk7DQor CSAgY29uc3QgY2hhciogX19jcG9zc2lnbiA9DQorCSAgICBubF9sYW5naW5mb19sKF9OTF9NT05F VEFSWV9QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOw0KKwkgIGNvbnN0IGNoYXIqIF9fY25lZ3NpZ24g PQ0KKwkgICAgbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfTkVHQVRJVkVfU0lHTiwgX19jbG9j KTsNCisJICBjb25zdCBjaGFyKiBfX2NjdXJyID0NCisJICAgIG5sX2xhbmdpbmZvX2woX05MX01P TkVUQVJZX0lOVF9DVVJSX1NZTUJPTCwgX19jbG9jKTsNCisNCisJICBjaGFyKiBfX2dyb3VwID0g MDsNCisJICB3Y2hhcl90KiBfX3djc19wcyA9IDA7DQorCSAgd2NoYXJfdCogX193Y3NfbnMgPSAw Ow0KKwkgIGNvbnN0IGNoYXIgX19ucG9zbiA9DQorCSAgICAqKG5sX2xhbmdpbmZvX2woX05MX01P TkVUQVJZX0lOVF9OX1NJR05fUE9TTiwgX19jbG9jKSk7DQorCSAgX190cnkNCisJICAgIHsNCisJ ICAgICAgc2l6ZV90IF9fbGVuOw0KKw0KKwkgICAgICAvLyBDaGVjayBmb3IgTlVMTCwgd2hpY2gg aW1wbGllcyBubyBncm91cGluZy4NCisJICAgICAgaWYgKF9NX2RhdGEtPl9NX3Rob3VzYW5kc19z ZXAgPT0gTCdcMCcpDQorCQl7DQorCQkgIC8vIExpa2UgaW4gIkMiIGxvY2FsZS4NCisJCSAgX01f ZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsNCisJCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9 IDA7DQorCQkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOw0KKwkJICBfTV9kYXRh LT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsNCisJCX0NCisJICAgICAgZWxzZQ0KKwkJew0KKwkJ ICBfX2xlbiA9IHN0cmxlbihfX2Nncm91cCk7DQorCQkgIGlmIChfX2xlbikNCisJCSAgICB7DQor CQkgICAgICBfX2dyb3VwID0gbmV3IGNoYXJbX19sZW4gKyAxXTsNCisJCSAgICAgIG1lbWNweShf X2dyb3VwLCBfX2Nncm91cCwgX19sZW4gKyAxKTsNCisJCSAgICAgIF9NX2RhdGEtPl9NX2dyb3Vw aW5nID0gX19ncm91cDsNCisJCSAgICB9DQorCQkgIGVsc2UNCisJCSAgICB7DQorCQkgICAgICBf TV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOw0KKwkJICAgICAgX01fZGF0YS0+X01fdXNlX2dyb3Vw aW5nID0gZmFsc2U7DQorCQkgICAgfQ0KKwkJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0g X19sZW47DQorCQl9DQorDQorCSAgICAgIG1ic3RhdGVfdCBfX3N0YXRlOw0KKwkgICAgICBfX2xl biA9IHN0cmxlbihfX2Nwb3NzaWduKTsNCisJICAgICAgaWYgKF9fbGVuKQ0KKwkJew0KKwkJICBt ZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsNCisJCSAgX193Y3NfcHMgPSBu ZXcgd2NoYXJfdFtfX2xlbiArIDFdOw0KKwkJICBtYnNydG93Y3MoX193Y3NfcHMsICZfX2Nwb3Nz aWduLCBfX2xlbiArIDEsICZfX3N0YXRlKTsNCisJCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2ln biA9IF9fd2NzX3BzOw0KKwkJfQ0KKwkgICAgICBlbHNlDQorCQlfTV9kYXRhLT5fTV9wb3NpdGl2 ZV9zaWduID0gTCIiOw0KKwkgICAgICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPQ0K KwkJd2NzbGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOw0KKw0KKwkgICAgICBfX2xlbiA9 IHN0cmxlbihfX2NuZWdzaWduKTsNCisJICAgICAgaWYgKCFfX25wb3NuKQ0KKwkJX01fZGF0YS0+ X01fbmVnYXRpdmVfc2lnbiA9IEwiKCkiOw0KKwkgICAgICBlbHNlIGlmIChfX2xlbikNCisJCXsN CisJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7DQorCQkgIF9fd2Nz X25zID0gbmV3IHdjaGFyX3RbX19sZW4gKyAxXTsNCisJCSAgbWJzcnRvd2NzKF9fd2NzX25zLCAm X19jbmVnc2lnbiwgX19sZW4gKyAxLCAmX19zdGF0ZSk7DQorCQkgIF9NX2RhdGEtPl9NX25lZ2F0 aXZlX3NpZ24gPSBfX3djc19uczsNCisJCX0NCisJICAgICAgZWxzZQ0KKwkJX01fZGF0YS0+X01f bmVnYXRpdmVfc2lnbiA9IEwiIjsNCisJICAgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9z aXplID0NCisJCXdjc2xlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsNCisNCisJICAgICAg Ly8gX0ludGwgPT0gdHJ1ZS4NCisJICAgICAgX19sZW4gPSBzdHJsZW4oX19jY3Vycik7DQorCSAg ICAgIGlmIChfX2xlbikNCisJCXsNCisJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJz dGF0ZV90KSk7DQorCQkgIHdjaGFyX3QqIF9fd2NzID0gbmV3IHdjaGFyX3RbX19sZW4gKyAxXTsN CisJCSAgbWJzcnRvd2NzKF9fd2NzLCAmX19jY3VyciwgX19sZW4gKyAxLCAmX19zdGF0ZSk7DQor CQkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX193Y3M7DQorCQl9DQorCSAgICAgIGVsc2UN CisJCV9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOw0KKwkgICAgICBfTV9kYXRhLT5fTV9j dXJyX3N5bWJvbF9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsNCisJICAg IH0NCisJICBfX2NhdGNoKC4uLikNCisJICAgIHsNCisJICAgICAgZGVsZXRlIF9NX2RhdGE7DQor CSAgICAgIF9NX2RhdGEgPSAwOw0KKwkgICAgICBkZWxldGUgW10gX19ncm91cDsNCisJICAgICAg ZGVsZXRlIFtdIF9fd2NzX3BzOw0KKwkgICAgICBkZWxldGUgW10gX193Y3NfbnM7DQorCSAgICAg IHVzZWxvY2FsZShfX29sZCk7DQorCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOw0KKwkg ICAgfQ0KKw0KKwkgIGNoYXIgX19wcHJlY2VkZXMgPQ0KKwkgICAgKihubF9sYW5naW5mb19sKF9O TF9NT05FVEFSWV9JTlRfUF9DU19QUkVDRURFUywgX19jbG9jKSk7DQorCSAgY2hhciBfX3BzcGFj ZSA9DQorCSAgICAqKG5sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0lOVF9QX1NFUF9CWV9TUEFD RSwgX19jbG9jKSk7DQorCSAgY2hhciBfX3Bwb3NuID0NCisJICAgICoobmxfbGFuZ2luZm9fbChf TkxfTU9ORVRBUllfSU5UX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsNCisJICBfTV9kYXRhLT5fTV9w b3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLA0K KwkJCQkJCQlfX3Bwb3NuKTsNCisJICBjaGFyIF9fbnByZWNlZGVzID0NCisJICAgICoobmxfbGFu Z2luZm9fbChfTkxfTU9ORVRBUllfSU5UX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOw0KKwkgIGNo YXIgX19uc3BhY2UgPQ0KKwkgICAgKihubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9JTlRfTl9T RVBfQllfU1BBQ0UsIF9fY2xvYykpOw0KKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19j b25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsDQorCQkJCQkJCV9fbnBvc24p Ow0KKw0KKwkgIHVzZWxvY2FsZShfX29sZCk7DQorCX0NCisgICAgfQ0KKw0KKyAgdGVtcGxhdGU8 Pg0KKyAgdm9pZA0KKyAgbW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT46Ol9NX2luaXRpYWxpemVf bW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywNCisJCQkJCQkgICAgICAgY29uc3QgY2hhciop DQorICB7DQorICAgIGlmICghX01fZGF0YSkNCisgICAgICBfTV9kYXRhID0gbmV3IF9fbW9uZXlw dW5jdF9jYWNoZTx3Y2hhcl90LCBmYWxzZT47DQorDQorICAgIGlmICghX19jbG9jKQ0KKwl7DQor CSAgLy8gIkMiIGxvY2FsZQ0KKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBMJy4nOw0K KwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywnOw0KKwkgIF9NX2RhdGEtPl9NX2dy b3VwaW5nID0gIiI7DQorCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7DQorCSAgX01f ZGF0YS0+X01fdXNlX2dyb3VwaW5nID0gZmFsc2U7DQorCSAgX01fZGF0YS0+X01fY3Vycl9zeW1i b2wgPSBMIiI7DQorCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7DQorCSAgX01f ZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsNCisJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9z aWduX3NpemUgPSAwOw0KKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7DQorCSAg X01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsNCisJICBfTV9kYXRhLT5fTV9mcmFj X2RpZ2l0cyA9IDA7DQorCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9T X2RlZmF1bHRfcGF0dGVybjsNCisJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFz ZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOw0KKw0KKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3 aXRob3V0IHRoZSBmYWNldC4uLg0KKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5 X2Jhc2U6Ol9TX2VuZDsgKytfX2kpDQorCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0NCisJ ICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4obW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXSk7DQor CX0NCisgICAgICBlbHNlDQorCXsNCisJICAvLyBOYW1lZCBsb2NhbGUuDQorCSAgX19jX2xvY2Fs ZSBfX29sZCA9IHVzZWxvY2FsZShfX2Nsb2MpOw0KKw0KKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3 Y2hhcl90ICpfX3c7IH0gX191Ow0KKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9NT05F VEFSWV9XTU9OX0RFQ0lNQUxfUE9JTlQsIF9fY2xvYyk7DQorCSAgX01fZGF0YS0+X01fZGVjaW1h bF9wb2ludCA9ICpfX3UuX193Ow0KKw0KKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9N T05FVEFSWV9XTU9OX1RIT1VTQU5EU19TRVAsIF9fY2xvYyk7DQorCSAgX01fZGF0YS0+X01fdGhv dXNhbmRzX3NlcCA9ICpfX3UuX193Ow0KKw0KKwkgIC8vIENoZWNrIGZvciBOVUxMLCB3aGljaCBp bXBsaWVzIG5vIGZyYWN0aW9uYWwgZGlnaXRzLg0KKwkgIGlmIChfTV9kYXRhLT5fTV9kZWNpbWFs X3BvaW50ID09IEwnXDAnKQ0KKwkgICAgew0KKwkgICAgICAvLyBMaWtlIGluICJDIiBsb2NhbGUu DQorCSAgICAgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsNCisJICAgICAgX01fZGF0YS0+ X01fZGVjaW1hbF9wb2ludCA9IEwnLic7DQorCSAgICB9DQorCSAgZWxzZQ0KKwkgICAgX01fZGF0 YS0+X01fZnJhY19kaWdpdHMgPQ0KKwkgICAgICAqKG5sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZ X0ZSQUNfRElHSVRTLCBfX2Nsb2MpKTsNCisNCisJICBjb25zdCBjaGFyKiBfX2Nncm91cCA9DQor CSAgICBubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9NT05fR1JPVVBJTkcsIF9fY2xvYyk7DQor CSAgY29uc3QgY2hhciogX19jcG9zc2lnbiA9DQorCSAgICBubF9sYW5naW5mb19sKF9OTF9NT05F VEFSWV9QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOw0KKwkgIGNvbnN0IGNoYXIqIF9fY25lZ3NpZ24g PQ0KKwkgICAgbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfTkVHQVRJVkVfU0lHTiwgX19jbG9j KTsNCisJICBjb25zdCBjaGFyKiBfX2NjdXJyID0NCisJICAgIG5sX2xhbmdpbmZvX2woX05MX01P TkVUQVJZX0NVUlJFTkNZX1NZTUJPTCwgX19jbG9jKTsNCisNCisJICBjaGFyKiBfX2dyb3VwID0g MDsNCisJICB3Y2hhcl90KiBfX3djc19wcyA9IDA7DQorCSAgd2NoYXJfdCogX193Y3NfbnMgPSAw Ow0KKwkgIGNvbnN0IGNoYXIgX19ucG9zbiA9DQorCSAgICAqKG5sX2xhbmdpbmZvX2woX05MX01P TkVUQVJZX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsNCisJICBfX3RyeQ0KKwkgICAgew0KKwkgICAg ICBzaXplX3QgX19sZW47DQorDQorCSAgICAgIC8vIENoZWNrIGZvciBOVUxMLCB3aGljaCBpbXBs aWVzIG5vIGdyb3VwaW5nLg0KKwkgICAgICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9 PSBMJ1wwJykNCisJCXsNCisJCSAgLy8gTGlrZSBpbiAiQyIgbG9jYWxlLg0KKwkJICBfTV9kYXRh LT5fTV9ncm91cGluZyA9ICIiOw0KKwkJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsN CisJCSAgX01fZGF0YS0+X01fdXNlX2dyb3VwaW5nID0gZmFsc2U7DQorCQkgIF9NX2RhdGEtPl9N X3Rob3VzYW5kc19zZXAgPSBMJywnOw0KKwkJfQ0KKwkgICAgICBlbHNlDQorCQl7DQorCQkgIF9f bGVuID0gc3RybGVuKF9fY2dyb3VwKTsNCisJCSAgaWYgKF9fbGVuKQ0KKwkJICAgIHsNCisJCSAg ICAgIF9fZ3JvdXAgPSBuZXcgY2hhcltfX2xlbiArIDFdOw0KKwkJICAgICAgbWVtY3B5KF9fZ3Jv dXAsIF9fY2dyb3VwLCBfX2xlbiArIDEpOw0KKwkJICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcg PSBfX2dyb3VwOw0KKwkJICAgIH0NCisJCSAgZWxzZQ0KKwkJICAgIHsNCisJCSAgICAgIF9NX2Rh dGEtPl9NX2dyb3VwaW5nID0gIiI7DQorCQkgICAgICBfTV9kYXRhLT5fTV91c2VfZ3JvdXBpbmcg PSBmYWxzZTsNCisJCSAgICB9DQorCQkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBfX2xl bjsNCisJCX0NCisNCisJICAgICAgbWJzdGF0ZV90IF9fc3RhdGU7DQorCSAgICAgIF9fbGVuID0g c3RybGVuKF9fY3Bvc3NpZ24pOw0KKwkgICAgICBpZiAoX19sZW4pDQorCQl7DQorCQkgIG1lbXNl dCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOw0KKwkJICBfX3djc19wcyA9IG5ldyB3 Y2hhcl90W19fbGVuICsgMV07DQorCQkgIG1ic3J0b3djcyhfX3djc19wcywgJl9fY3Bvc3NpZ24s IF9fbGVuICsgMSwgJl9fc3RhdGUpOw0KKwkJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0g X193Y3NfcHM7DQorCQl9DQorCSAgICAgIGVsc2UNCisJCV9NX2RhdGEtPl9NX3Bvc2l0aXZlX3Np Z24gPSBMIiI7DQorCSAgICAgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9DQorCQl3 Y3NsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7DQorDQorCSAgICAgIF9fbGVuID0gc3Ry bGVuKF9fY25lZ3NpZ24pOw0KKwkgICAgICBpZiAoIV9fbnBvc24pDQorCQlfTV9kYXRhLT5fTV9u ZWdhdGl2ZV9zaWduID0gTCIoKSI7DQorCSAgICAgIGVsc2UgaWYgKF9fbGVuKQ0KKwkJew0KKwkJ ICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsNCisJCSAgX193Y3NfbnMg PSBuZXcgd2NoYXJfdFtfX2xlbiArIDFdOw0KKwkJICBtYnNydG93Y3MoX193Y3NfbnMsICZfX2Nu ZWdzaWduLCBfX2xlbiArIDEsICZfX3N0YXRlKTsNCisJCSAgX01fZGF0YS0+X01fbmVnYXRpdmVf c2lnbiA9IF9fd2NzX25zOw0KKwkJfQ0KKwkgICAgICBlbHNlDQorCQlfTV9kYXRhLT5fTV9uZWdh dGl2ZV9zaWduID0gTCIiOw0KKwkgICAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUg PQ0KKwkJd2NzbGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOw0KKw0KKwkgICAgICAvLyBf SW50bCA9PSB0cnVlLg0KKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NjdXJyKTsNCisJICAgICAg aWYgKF9fbGVuKQ0KKwkJew0KKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRl X3QpKTsNCisJCSAgd2NoYXJfdCogX193Y3MgPSBuZXcgd2NoYXJfdFtfX2xlbiArIDFdOw0KKwkJ ICBtYnNydG93Y3MoX193Y3MsICZfX2NjdXJyLCBfX2xlbiArIDEsICZfX3N0YXRlKTsNCisJCSAg X01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX3djczsNCisJCX0NCisJICAgICAgZWxzZQ0KKwkJ X01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7DQorCSAgICAgIF9NX2RhdGEtPl9NX2N1cnJf c3ltYm9sX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOw0KKwkgICAgfQ0K KwkgIF9fY2F0Y2goLi4uKQ0KKwkgICAgew0KKwkgICAgICBkZWxldGUgX01fZGF0YTsNCisJICAg ICAgX01fZGF0YSA9IDA7DQorCSAgICAgIGRlbGV0ZSBbXSBfX2dyb3VwOw0KKwkgICAgICBkZWxl dGUgW10gX193Y3NfcHM7DQorCSAgICAgIGRlbGV0ZSBbXSBfX3djc19uczsNCisJICAgICAgdXNl bG9jYWxlKF9fb2xkKTsNCisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47DQorCSAgICB9 DQorDQorCSAgY2hhciBfX3BwcmVjZWRlcyA9DQorCSAgICAqKG5sX2xhbmdpbmZvX2woX05MX01P TkVUQVJZX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOw0KKwkgIGNoYXIgX19wc3BhY2UgPQ0KKwkg ICAgKihubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7 DQorCSAgY2hhciBfX3Bwb3NuID0NCisJICAgICoobmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllf UF9TSUdOX1BPU04sIF9fY2xvYykpOw0KKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19j b25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsDQorCQkJCQkJCV9fcHBvc24p Ow0KKwkgIGNoYXIgX19ucHJlY2VkZXMgPQ0KKwkgICAgKihubF9sYW5naW5mb19sKF9OTF9NT05F VEFSWV9OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsNCisJICBjaGFyIF9fbnNwYWNlID0NCisJICAg ICoobmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOw0K KwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVj ZWRlcywgX19uc3BhY2UsDQorCQkJCQkJCV9fbnBvc24pOw0KKw0KKwkgIHVzZWxvY2FsZShfX29s ZCk7DQorCX0NCisgICAgfQ0KKw0KKyAgdGVtcGxhdGU8Pg0KKyAgICBtb25leXB1bmN0PHdjaGFy X3QsIHRydWU+Ojp+bW9uZXlwdW5jdCgpDQorICAgIHsNCisgICAgICBpZiAoX01fZGF0YS0+X01f Z3JvdXBpbmdfc2l6ZSkNCisJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX2dyb3VwaW5nOw0KKyAgICAg IGlmIChfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUpDQorCWRlbGV0ZSBbXSBfTV9kYXRh LT5fTV9wb3NpdGl2ZV9zaWduOw0KKyAgICAgIGlmIChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWdu X3NpemUNCisJICAmJiB3Y3NjbXAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiwgTCIoKSIpICE9 IDApDQorCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduOw0KKyAgICAgIGlmIChf TV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplKQ0KKwlkZWxldGUgW10gX01fZGF0YS0+X01fY3Vy cl9zeW1ib2w7DQorICAgICAgZGVsZXRlIF9NX2RhdGE7DQorICAgIH0NCisNCisgIHRlbXBsYXRl PD4NCisgICAgbW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT46On5tb25leXB1bmN0KCkNCisgICAg ew0KKyAgICAgIGlmIChfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplKQ0KKwlkZWxldGUgW10gX01f ZGF0YS0+X01fZ3JvdXBpbmc7DQorICAgICAgaWYgKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25f c2l6ZSkNCisJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ247DQorICAgICAgaWYg KF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZQ0KKwkgICYmIHdjc2NtcChfTV9kYXRhLT5f TV9uZWdhdGl2ZV9zaWduLCBMIigpIikgIT0gMCkNCisJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX25l Z2F0aXZlX3NpZ247DQorICAgICAgaWYgKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUpDQor CWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbDsNCisgICAgICBkZWxldGUgX01fZGF0 YTsNCisgICAgfQ0KKyNlbmRpZg0KKw0KK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTg0K K30gLy8gbmFtZXNwYWNlDQpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUv bmV3bGliL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25l d2xpYi9udW1lcmljX21lbWJlcnMuY2MNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAw MDAwMDAwMC4uMjM4MDdlYTcxNzENCi0tLSAvZGV2L251bGwNCisrKyBiL2xpYnN0ZGMrKy12My9j b25maWcvbG9jYWxlL25ld2xpYi9udW1lcmljX21lbWJlcnMuY2MNCkBAIC0wLDAgKzEsMjgyIEBA DQorLy8gc3RkOjpudW1wdW5jdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBuZXdsaWIgdmVyc2lv biAtKi0gQysrIC0qLQ0KKw0KKy8vIENvcHlyaWdodCAoQykgMjAwMS0yMDIzIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgSW5jLg0KKy8vDQorLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdO VSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQ0KKy8vIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQ0KKy8vIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl DQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQg eW91ciBvcHRpb24pDQorLy8gYW55IGxhdGVyIHZlcnNpb24uDQorDQorLy8gVGhpcyBsaWJyYXJ5 IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorLy8g YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YNCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlDQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4NCisNCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFy ZSBncmFudGVkIGFkZGl0aW9uYWwNCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdD QyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uDQorLy8gMy4xLCBhcyBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4NCisNCisvLyBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQN CisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtOw0KKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcu UlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQ0KKy8vIDxodHRwOi8vd3d3LmdudS5v cmcvbGljZW5zZXMvPi4NCisNCisvLw0KKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMy4xLjIgIG51 bXB1bmN0IHZpcnR1YWwgZnVuY3Rpb25zDQorLy8NCisNCisvLyBXcml0dGVuIGJ5IEJlbmphbWlu IEtvc25payA8YmtvekByZWRoYXQuY29tPg0KKy8vIE1vZGlmaWVkIGJ5IFRha2FzaGkgWWFubyA8 dGFrYXNoaS55YW5vQG5pZnR5Lm5lLmpwPg0KKw0KKyNpbmNsdWRlIDxsb2NhbGU+DQorI2luY2x1 ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+DQorI2luY2x1ZGUgPGljb252Lmg+DQorDQor bmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpDQorew0KK19HTElCQ1hY X0JFR0lOX05BTUVTUEFDRV9WRVJTSU9ODQorDQorICBleHRlcm4gY2hhciBfX25hcnJvd19tdWx0 aWJ5dGVfY2hhcnMoY29uc3QgY2hhciogcywgbG9jYWxlX3QgY2xvYyk7DQorDQorLy8gVGhpcyBm aWxlIG1pZ2h0IGJlIGNvbXBpbGVkIHR3aWNlLCBidXQgd2Ugb25seSB3YW50IHRvIGRlZmluZSB0 aGlzIG9uY2UuDQorI2lmICEgX0dMSUJDWFhfVVNFX0NYWDExX0FCSQ0KKyAgY2hhcg0KKyAgX19u YXJyb3dfbXVsdGlieXRlX2NoYXJzKGNvbnN0IGNoYXIqIHMsIGxvY2FsZV90IGNsb2MpDQorICB7 DQorICAgIGNvbnN0IGNoYXIqIGNvZGVzZXQgPSBubF9sYW5naW5mb19sKENPREVTRVQsIGNsb2Mp Ow0KKyAgICBpZiAoIXN0cmNtcChjb2Rlc2V0LCAiVVRGLTgiKSkNCisgICAgICB7DQorCS8vIG9w dGltaXplIGZvciBzb21lIGtub3duIGNhc2VzDQorCWlmICghc3RyY21wKHMsICJcdTIwMkYiKSkg Ly8gTkFSUk9XIE5PLUJSRUFLIFNQQUNFDQorCSAgcmV0dXJuICcgJzsNCisJaWYgKCFzdHJjbXAo cywgIlx1MjAxOSIpKSAvLyBSSUdIVCBTSU5HTEUgUVVPVEFUSU9OIE1BUksNCisJICByZXR1cm4g J1wnJzsNCisJaWYgKCFzdHJjbXAocywgIlx1MDY2QyIpKSAvLyBBUkFCSUMgVEhPVVNBTkRTIFNF UEFSQVRPUg0KKwkgIHJldHVybiAnXCcnOw0KKyAgICAgIH0NCisNCisgICAgaWNvbnZfdCBjZCA9 IGljb252X29wZW4oIkFTQ0lJLy9UUkFOU0xJVCIsIGNvZGVzZXQpOw0KKyAgICBpZiAoY2QgIT0g KGljb252X3QpLTEpDQorICAgICAgew0KKwljaGFyIGMxOw0KKwlzaXplX3QgaW5ieXRlc2xlZnQg PSBzdHJsZW4ocyk7DQorCXNpemVfdCBvdXRieXRlc2xlZnQgPSAxOw0KKwljaGFyKiBpbmJ1ZiA9 IGNvbnN0X2Nhc3Q8Y2hhcio+KHMpOw0KKwljaGFyKiBvdXRidWYgPSAmYzE7DQorCXNpemVfdCBu ID0gaWNvbnYoY2QsICZpbmJ1ZiwgJmluYnl0ZXNsZWZ0LCAmb3V0YnVmLCAmb3V0Ynl0ZXNsZWZ0 KTsNCisJaWNvbnZfY2xvc2UoY2QpOw0KKwlpZiAobiAhPSAoc2l6ZV90KS0xKQ0KKwkgIHsNCisJ ICAgIGNkID0gaWNvbnZfb3Blbihjb2Rlc2V0LCAiQVNDSUkiKTsNCisJICAgIGlmIChjZCAhPSAo aWNvbnZfdCktMSkNCisJICAgICAgew0KKwkJY2hhciBjMjsNCisJCWluYnVmID0gJmMxOw0KKwkJ aW5ieXRlc2xlZnQgPSAxOw0KKwkJb3V0YnVmID0gJmMyOw0KKwkJb3V0Ynl0ZXNsZWZ0ID0gMTsN CisJCW4gPSBpY29udihjZCwgJmluYnVmLCAmaW5ieXRlc2xlZnQsICZvdXRidWYsICZvdXRieXRl c2xlZnQpOw0KKwkJaWNvbnZfY2xvc2UoY2QpOw0KKwkJaWYgKG4gIT0gKHNpemVfdCktMSkNCisJ CSAgcmV0dXJuIGMyOw0KKwkgICAgICB9DQorCSAgfQ0KKyAgICAgIH0NCisgICAgcmV0dXJuICdc MCc7DQorICB9DQorI2VuZGlmDQorDQorICB0ZW1wbGF0ZTw+DQorICAgIHZvaWQNCisgICAgbnVt cHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpDQor ICAgIHsNCisgICAgICBpZiAoIV9NX2RhdGEpDQorCV9NX2RhdGEgPSBuZXcgX19udW1wdW5jdF9j YWNoZTxjaGFyPjsNCisNCisgICAgICBpZiAoIV9fY2xvYykNCisJew0KKwkgIC8vICJDIiBsb2Nh bGUNCisJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOw0KKwkgIF9NX2RhdGEtPl9NX2dyb3Vw aW5nX3NpemUgPSAwOw0KKwkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOw0KKw0K KwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7DQorCSAgX01fZGF0YS0+X01fdGhv dXNhbmRzX3NlcCA9ICcsJzsNCisNCisJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX251 bV9iYXNlOjpfU19vZW5kOyArK19faSkNCisJICAgIF9NX2RhdGEtPl9NX2F0b21zX291dFtfX2ld ID0gX19udW1fYmFzZTo6X1NfYXRvbXNfb3V0W19faV07DQorDQorCSAgZm9yIChzaXplX3QgX19q ID0gMDsgX19qIDwgX19udW1fYmFzZTo6X1NfaWVuZDsgKytfX2opDQorCSAgICBfTV9kYXRhLT5f TV9hdG9tc19pbltfX2pdID0gX19udW1fYmFzZTo6X1NfYXRvbXNfaW5bX19qXTsNCisJfQ0KKyAg ICAgIGVsc2UNCisJew0KKwkgIC8vIE5hbWVkIGxvY2FsZS4NCisJICBjb25zdCBjaGFyKiBkZWNp bWFsX3BvaW50ID0NCisJICAgIChubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX0RFQ0lNQUxfUE9J TlRfV0MsIF9fY2xvYykpOw0KKw0KKwkgIGlmIChkZWNpbWFsX3BvaW50WzBdICE9ICdcMCcgJiYg ZGVjaW1hbF9wb2ludFsxXSAhPSAnXDAnKQ0KKwkgICAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2lu dCA9IF9fbmFycm93X211bHRpYnl0ZV9jaGFycyhkZWNpbWFsX3BvaW50LA0KKwkJCQkJCQkJIF9f Y2xvYyk7DQorCSAgZWxzZQ0KKwkgICAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICpkZWNp bWFsX3BvaW50Ow0KKw0KKwkgIGNvbnN0IGNoYXIqIHRob3VzYW5kc19zZXAgPQ0KKwkgICAgbmxf bGFuZ2luZm9fbChfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOw0KKw0KKwkg IGlmICh0aG91c2FuZHNfc2VwWzBdICE9ICdcMCcgJiYgdGhvdXNhbmRzX3NlcFsxXSAhPSAnXDAn KQ0KKwkgICAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fbmFycm93X211bHRpYnl0ZV9j aGFycyh0aG91c2FuZHNfc2VwLA0KKwkJCQkJCQkJIF9fY2xvYyk7DQorCSAgZWxzZQ0KKwkgICAg X01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICp0aG91c2FuZHNfc2VwOw0KKw0KKwkgIC8vIENo ZWNrIGZvciBOVUxMLCB3aGljaCBpbXBsaWVzIG5vIGdyb3VwaW5nLg0KKwkgIGlmIChfTV9kYXRh LT5fTV90aG91c2FuZHNfc2VwID09ICdcMCcpDQorCSAgICB7DQorCSAgICAgIC8vIExpa2UgaW4g IkMiIGxvY2FsZS4NCisJICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsNCisJICAgICAg X01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7DQorCSAgICAgIF9NX2RhdGEtPl9NX3VzZV9n cm91cGluZyA9IGZhbHNlOw0KKwkgICAgICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gJywn Ow0KKwkgICAgfQ0KKwkgIGVsc2UNCisJICAgIHsNCisJICAgICAgY29uc3QgY2hhciogX19zcmMg PSBubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX0dST1VQSU5HLCBfX2Nsb2MpOw0KKwkgICAgICBj b25zdCBzaXplX3QgX19sZW4gPSBzdHJsZW4oX19zcmMpOw0KKwkgICAgICBpZiAoX19sZW4pDQor CQl7DQorCQkgIF9fdHJ5DQorCQkgICAgew0KKwkJICAgICAgY2hhciogX19kc3QgPSBuZXcgY2hh cltfX2xlbiArIDFdOw0KKwkJICAgICAgbWVtY3B5KF9fZHN0LCBfX3NyYywgX19sZW4gKyAxKTsN CisJCSAgICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19kc3Q7DQorCQkgICAgfQ0KKwkJICBf X2NhdGNoKC4uLikNCisJCSAgICB7DQorCQkgICAgICBkZWxldGUgX01fZGF0YTsNCisJCSAgICAg IF9NX2RhdGEgPSAwOw0KKwkJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47DQorCQkgICAg fQ0KKwkJfQ0KKwkgICAgICBlbHNlDQorCQl7DQorCQkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0g IiI7DQorCQkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOw0KKwkJfQ0KKwkgICAg ICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gX19sZW47DQorCSAgICB9DQorCX0NCisNCisg ICAgICAvLyBOQjogVGhlcmUgaXMgbm8gd2F5IHRvIGV4dGFjdCB0aGlzIGluZm8gZnJvbSBwb3Np eCBsb2NhbGVzLg0KKyAgICAgIC8vIF9NX3RydWVuYW1lID0gbmxfbGFuZ2luZm9fbChZRVNTVFIs IF9fY2xvYyk7DQorICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWUgPSAidHJ1ZSI7DQorICAgICAg X01fZGF0YS0+X01fdHJ1ZW5hbWVfc2l6ZSA9IDQ7DQorICAgICAgLy8gX01fZmFsc2VuYW1lID0g bmxfbGFuZ2luZm9fbChOT1NUUiwgX19jbG9jKTsNCisgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5h bWUgPSAiZmFsc2UiOw0KKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZV9zaXplID0gNTsNCisg ICAgfQ0KKw0KKyAgdGVtcGxhdGU8Pg0KKyAgICBudW1wdW5jdDxjaGFyPjo6fm51bXB1bmN0KCkN CisgICAgew0KKyAgICAgIGlmIChfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplKQ0KKwlkZWxldGUg W10gX01fZGF0YS0+X01fZ3JvdXBpbmc7DQorICAgICAgZGVsZXRlIF9NX2RhdGE7DQorICAgIH0N CisNCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QNCisgIHRlbXBsYXRlPD4NCisgICAgdm9p ZA0KKyAgICBudW1wdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9j YWxlIF9fY2xvYykNCisgICAgew0KKyAgICAgIGlmICghX01fZGF0YSkNCisJX01fZGF0YSA9IG5l dyBfX251bXB1bmN0X2NhY2hlPHdjaGFyX3Q+Ow0KKw0KKyAgICAgIGlmICghX19jbG9jKQ0KKwl7 DQorCSAgLy8gIkMiIGxvY2FsZQ0KKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7DQorCSAg X01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7DQorCSAgX01fZGF0YS0+X01fdXNlX2dyb3Vw aW5nID0gZmFsc2U7DQorDQorCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7DQor CSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7DQorDQorCSAgLy8gVXNlIGN0eXBl Ojp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uDQorCSAgZm9yIChzaXplX3QgX19pID0g MDsgX19pIDwgX19udW1fYmFzZTo6X1Nfb2VuZDsgKytfX2kpDQorCSAgICBfTV9kYXRhLT5fTV9h dG9tc19vdXRbX19pXSA9DQorCSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KF9fbnVtX2Jhc2U6 Ol9TX2F0b21zX291dFtfX2ldKTsNCisNCisJICBmb3IgKHNpemVfdCBfX2ogPSAwOyBfX2ogPCBf X251bV9iYXNlOjpfU19pZW5kOyArK19faikNCisJICAgIF9NX2RhdGEtPl9NX2F0b21zX2luW19f al0gPQ0KKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90PihfX251bV9iYXNlOjpfU19hdG9tc19p bltfX2pdKTsNCisJfQ0KKyAgICAgIGVsc2UNCisJew0KKwkgIC8vIE5hbWVkIGxvY2FsZS4NCisJ ICAvLyBOQjogSW4gdGhlIEdOVSBtb2RlbCB3Y2hhcl90IGlzIGFsd2F5cyAzMiBiaXQgd2lkZS4N CisJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCAqX193OyB9IF9fdTsNCisJICBfX3UuX19z ID0gbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOw0K KwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAqX191Ll9fdzsNCisNCisJICBfX3UuX19z ID0gbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOw0K KwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqX191Ll9fdzsNCisNCisJICAvLyBDaGVj ayBmb3IgTlVMTCwgd2hpY2ggaW1wbGllcyBubyBncm91cGluZy4NCisJICBpZiAoX01fZGF0YS0+ X01fdGhvdXNhbmRzX3NlcCA9PSBMJ1wwJykNCisJICAgIHsNCisJICAgICAgLy8gTGlrZSBpbiAi QyIgbG9jYWxlLg0KKwkgICAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOw0KKwkgICAgICBf TV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsNCisJICAgICAgX01fZGF0YS0+X01fdXNlX2dy b3VwaW5nID0gZmFsc2U7DQorCSAgICAgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywn Ow0KKwkgICAgfQ0KKwkgIGVsc2UNCisJICAgIHsNCisJICAgICAgY29uc3QgY2hhciogX19zcmMg PSBubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX0dST1VQSU5HLCBfX2Nsb2MpOw0KKwkgICAgICBj b25zdCBzaXplX3QgX19sZW4gPSBzdHJsZW4oX19zcmMpOw0KKwkgICAgICBpZiAoX19sZW4pDQor CQl7DQorCQkgIF9fdHJ5DQorCQkgICAgew0KKwkJICAgICAgY2hhciogX19kc3QgPSBuZXcgY2hh cltfX2xlbiArIDFdOw0KKwkJICAgICAgbWVtY3B5KF9fZHN0LCBfX3NyYywgX19sZW4gKyAxKTsN CisJCSAgICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19kc3Q7DQorCQkgICAgfQ0KKwkJICBf X2NhdGNoKC4uLikNCisJCSAgICB7DQorCQkgICAgICBkZWxldGUgX01fZGF0YTsNCisJCSAgICAg IF9NX2RhdGEgPSAwOw0KKwkJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47DQorCQkgICAg fQ0KKwkJfQ0KKwkgICAgICBlbHNlDQorCQl7DQorCQkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0g IiI7DQorCQkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOw0KKwkJfQ0KKwkgICAg ICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gX19sZW47DQorCSAgICB9DQorCX0NCisNCisg ICAgICAvLyBOQjogVGhlcmUgaXMgbm8gd2F5IHRvIGV4dGFjdCB0aGlzIGluZm8gZnJvbSBwb3Np eCBsb2NhbGVzLg0KKyAgICAgIC8vIF9NX3RydWVuYW1lID0gbmxfbGFuZ2luZm9fbChZRVNTVFIs IF9fY2xvYyk7DQorICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWUgPSBMInRydWUiOw0KKyAgICAg IF9NX2RhdGEtPl9NX3RydWVuYW1lX3NpemUgPSA0Ow0KKyAgICAgIC8vIF9NX2ZhbHNlbmFtZSA9 IG5sX2xhbmdpbmZvX2woTk9TVFIsIF9fY2xvYyk7DQorICAgICAgX01fZGF0YS0+X01fZmFsc2Vu YW1lID0gTCJmYWxzZSI7DQorICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lX3NpemUgPSA1Ow0K KyAgICB9DQorDQorICB0ZW1wbGF0ZTw+DQorICAgIG51bXB1bmN0PHdjaGFyX3Q+Ojp+bnVtcHVu Y3QoKQ0KKyAgICB7DQorICAgICAgaWYgKF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUpDQorCWRl bGV0ZSBbXSBfTV9kYXRhLT5fTV9ncm91cGluZzsNCisgICAgICBkZWxldGUgX01fZGF0YTsNCisg ICAgfQ0KKyNlbmRpZg0KKw0KK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTg0KK30gLy8g bmFtZXNwYWNlDQpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGli L3RpbWVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25ld2xpYi90aW1l X21lbWJlcnMuY2MNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMC4uZmQw OWZhNTg5YmENCi0tLSAvZGV2L251bGwNCisrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxl L25ld2xpYi90aW1lX21lbWJlcnMuY2MNCkBAIC0wLDAgKzEsMzc5IEBADQorLy8gc3RkOjp0aW1l X2dldCwgc3RkOjp0aW1lX3B1dCBpbXBsZW1lbnRhdGlvbiwgbmV3bGliIHZlcnNpb24gLSotIEMr KyAtKi0NCisNCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMyBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4NCisvLw0KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMr KyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUNCisvLyBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUNCisvLyB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKy8vIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0 aW9uKQ0KKy8vIGFueSBsYXRlciB2ZXJzaW9uLg0KKw0KKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KKy8vIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQor Ly8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQ0KKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu DQorDQorLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRl ZCBhZGRpdGlvbmFsDQorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGlt ZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbg0KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uDQorDQorLy8gWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kDQorLy8gYSBj b3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbTsNCisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUg cmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUNCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uDQorDQorLy8NCisvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMS4yIC0gdGltZV9nZXQg dmlydHVhbCBmdW5jdGlvbnMNCisvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMy4yIC0gdGltZV9w dXQgdmlydHVhbCBmdW5jdGlvbnMNCisvLw0KKw0KKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29z bmlrIDxia296QHJlZGhhdC5jb20+DQorLy8gTW9kaWZpZWQgYnkgVGFrYXNoaSBZYW5vIDx0YWth c2hpLnlhbm9AbmlmdHkubmUuanA+DQorDQorI2RlZmluZSBfR05VX1NPVVJDRSAxDQorI2luY2x1 ZGUgPGxvY2FsZT4NCisjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4NCisNCitu YW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkNCit7DQorX0dMSUJDWFhf QkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04NCisNCisgIHRlbXBsYXRlPD4NCisgICAgdm9pZA0KKyAg ICBfX3RpbWVwdW5jdDxjaGFyPjo6DQorICAgIF9NX3B1dChjaGFyKiBfX3MsIHNpemVfdCBfX21h eGxlbiwgY29uc3QgY2hhciogX19mb3JtYXQsDQorCSAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdCB0 aHJvdygpDQorICAgIHsNCisgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdHJmdGltZV9sKF9f cywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLA0KKwkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0 KTsNCisgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4NCisgICAgICBp ZiAoX19sZW4gPT0gMCkNCisJX19zWzBdID0gJ1wwJzsNCisgICAgfQ0KKw0KKyAgdGVtcGxhdGU8 Pg0KKyAgICB2b2lkDQorICAgIF9fdGltZXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX3RpbWVw dW5jdChfX2NfbG9jYWxlIF9fY2xvYykNCisgICAgew0KKyAgICAgIGlmICghX01fZGF0YSkNCisJ X01fZGF0YSA9IG5ldyBfX3RpbWVwdW5jdF9jYWNoZTxjaGFyPjsNCisNCisgICAgICBpZiAoIV9f Y2xvYykNCisJew0KKwkgIC8vICJDIiBsb2NhbGUNCisJICBfTV9jX2xvY2FsZV90aW1lcHVuY3Qg PSBfU19nZXRfY19sb2NhbGUoKTsNCisNCisJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9ICIl bS8lZC8leSI7DQorCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gIiVtLyVkLyV5IjsN CisJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9ICIlSDolTTolUyI7DQorCSAgX01fZGF0YS0+ X01fdGltZV9lcmFfZm9ybWF0ID0gIiVIOiVNOiVTIjsNCisJICBfTV9kYXRhLT5fTV9kYXRlX3Rp bWVfZm9ybWF0ID0gIiI7DQorCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2VyYV9mb3JtYXQgPSAi IjsNCisJICBfTV9kYXRhLT5fTV9hbSA9ICJBTSI7DQorCSAgX01fZGF0YS0+X01fcG0gPSAiUE0i Ow0KKwkgIF9NX2RhdGEtPl9NX2FtX3BtX2Zvcm1hdCA9ICIlSTolTTolUyAlcCI7DQorDQorCSAg Ly8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4NCisJICBfTV9kYXRhLT5f TV9kYXkxID0gIlN1bmRheSI7DQorCSAgX01fZGF0YS0+X01fZGF5MiA9ICJNb25kYXkiOw0KKwkg IF9NX2RhdGEtPl9NX2RheTMgPSAiVHVlc2RheSI7DQorCSAgX01fZGF0YS0+X01fZGF5NCA9ICJX ZWRuZXNkYXkiOw0KKwkgIF9NX2RhdGEtPl9NX2RheTUgPSAiVGh1cnNkYXkiOw0KKwkgIF9NX2Rh dGEtPl9NX2RheTYgPSAiRnJpZGF5IjsNCisJICBfTV9kYXRhLT5fTV9kYXk3ID0gIlNhdHVyZGF5 IjsNCisNCisJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3Mg U3VuLg0KKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gIlN1biI7DQorCSAgX01fZGF0YS0+X01fYWRh eTIgPSAiTW9uIjsNCisJICBfTV9kYXRhLT5fTV9hZGF5MyA9ICJUdWUiOw0KKwkgIF9NX2RhdGEt Pl9NX2FkYXk0ID0gIldlZCI7DQorCSAgX01fZGF0YS0+X01fYWRheTUgPSAiVGh1IjsNCisJICBf TV9kYXRhLT5fTV9hZGF5NiA9ICJGcmkiOw0KKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gIlNhdCI7 DQorDQorCSAgLy8gTW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4NCisJ ICBfTV9kYXRhLT5fTV9tb250aDAxID0gIkphbnVhcnkiOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRo MDIgPSAiRmVicnVhcnkiOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSAiTWFyY2giOw0KKwkg IF9NX2RhdGEtPl9NX21vbnRoMDQgPSAiQXByaWwiOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUg PSAiTWF5IjsNCisJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gIkp1bmUiOw0KKwkgIF9NX2RhdGEt Pl9NX21vbnRoMDcgPSAiSnVseSI7DQorCSAgX01fZGF0YS0+X01fbW9udGgwOCA9ICJBdWd1c3Qi Ow0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSAiU2VwdGVtYmVyIjsNCisJICBfTV9kYXRhLT5f TV9tb250aDEwID0gIk9jdG9iZXIiOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSAiTm92ZW1i ZXIiOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSAiRGVjZW1iZXIiOw0KKw0KKwkgIC8vIEFi YnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4NCisJICBfTV9k YXRhLT5fTV9hbW9udGgwMSA9ICJKYW4iOw0KKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gIkZl YiI7DQorCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSAiTWFyIjsNCisJICBfTV9kYXRhLT5fTV9h bW9udGgwNCA9ICJBcHIiOw0KKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gIk1heSI7DQorCSAg X01fZGF0YS0+X01fYW1vbnRoMDYgPSAiSnVuIjsNCisJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9 ICJKdWwiOw0KKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gIkF1ZyI7DQorCSAgX01fZGF0YS0+ X01fYW1vbnRoMDkgPSAiU2VwIjsNCisJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9ICJPY3QiOw0K KwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gIk5vdiI7DQorCSAgX01fZGF0YS0+X01fYW1vbnRo MTIgPSAiRGVjIjsNCisJfQ0KKyAgICAgIGVsc2UNCisJew0KKwkgIF9NX2NfbG9jYWxlX3RpbWVw dW5jdCA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7DQorDQorCSAgX01fZGF0YS0+X01fZGF0 ZV9mb3JtYXQgPSBubF9sYW5naW5mb19sKERfRk1ULCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9N X2RhdGVfZXJhX2Zvcm1hdCA9IG5sX2xhbmdpbmZvX2woRVJBX0RfRk1ULCBfX2Nsb2MpOw0KKwkg IF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gbmxfbGFuZ2luZm9fbChUX0ZNVCwgX19jbG9jKTsN CisJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBubF9sYW5naW5mb19sKEVSQV9UX0ZN VCwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0ID0gbmxfbGFuZ2lu Zm9fbChEX1RfRk1ULCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9y bWF0ID0gbmxfbGFuZ2luZm9fbChFUkFfRF9UX0ZNVCwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5f TV9hbSA9IG5sX2xhbmdpbmZvX2woQU1fU1RSLCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX3Bt ID0gbmxfbGFuZ2luZm9fbChQTV9TVFIsIF9fY2xvYyk7DQorCSAgX01fZGF0YS0+X01fYW1fcG1f Zm9ybWF0ID0gbmxfbGFuZ2luZm9fbChUX0ZNVF9BTVBNLCBfX2Nsb2MpOw0KKw0KKwkgIC8vIERh eSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW5kYXkuDQorCSAgX01fZGF0YS0+X01fZGF5 MSA9IG5sX2xhbmdpbmZvX2woREFZXzEsIF9fY2xvYyk7DQorCSAgX01fZGF0YS0+X01fZGF5MiA9 IG5sX2xhbmdpbmZvX2woREFZXzIsIF9fY2xvYyk7DQorCSAgX01fZGF0YS0+X01fZGF5MyA9IG5s X2xhbmdpbmZvX2woREFZXzMsIF9fY2xvYyk7DQorCSAgX01fZGF0YS0+X01fZGF5NCA9IG5sX2xh bmdpbmZvX2woREFZXzQsIF9fY2xvYyk7DQorCSAgX01fZGF0YS0+X01fZGF5NSA9IG5sX2xhbmdp bmZvX2woREFZXzUsIF9fY2xvYyk7DQorCSAgX01fZGF0YS0+X01fZGF5NiA9IG5sX2xhbmdpbmZv X2woREFZXzYsIF9fY2xvYyk7DQorCSAgX01fZGF0YS0+X01fZGF5NyA9IG5sX2xhbmdpbmZvX2wo REFZXzcsIF9fY2xvYyk7DQorDQorCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGlu ZyB3aXRoICJDIidzIFN1bi4NCisJICBfTV9kYXRhLT5fTV9hZGF5MSA9IG5sX2xhbmdpbmZvX2wo QUJEQVlfMSwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9hZGF5MiA9IG5sX2xhbmdpbmZvX2wo QUJEQVlfMiwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9hZGF5MyA9IG5sX2xhbmdpbmZvX2wo QUJEQVlfMywgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9hZGF5NCA9IG5sX2xhbmdpbmZvX2wo QUJEQVlfNCwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9hZGF5NSA9IG5sX2xhbmdpbmZvX2wo QUJEQVlfNSwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9hZGF5NiA9IG5sX2xhbmdpbmZvX2wo QUJEQVlfNiwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9hZGF5NyA9IG5sX2xhbmdpbmZvX2wo QUJEQVlfNywgX19jbG9jKTsNCisNCisJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAi QyIncyBKYW51YXJ5Lg0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBubF9sYW5naW5mb19sKE1P Tl8xLCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSBubF9sYW5naW5mb19sKE1P Tl8yLCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBubF9sYW5naW5mb19sKE1P Tl8zLCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSBubF9sYW5naW5mb19sKE1P Tl80LCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSBubF9sYW5naW5mb19sKE1P Tl81LCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSBubF9sYW5naW5mb19sKE1P Tl82LCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSBubF9sYW5naW5mb19sKE1P Tl83LCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDggPSBubF9sYW5naW5mb19sKE1P Tl84LCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBubF9sYW5naW5mb19sKE1P Tl85LCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBubF9sYW5naW5mb19sKE1P Tl8xMCwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9tb250aDExID0gbmxfbGFuZ2luZm9fbChN T05fMTEsIF9fY2xvYyk7DQorCSAgX01fZGF0YS0+X01fbW9udGgxMiA9IG5sX2xhbmdpbmZvX2wo TU9OXzEyLCBfX2Nsb2MpOw0KKw0KKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFy dGluZyB3aXRoICJDIidzIEphbi4NCisJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IG5sX2xhbmdp bmZvX2woQUJNT05fMSwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9hbW9udGgwMiA9IG5sX2xh bmdpbmZvX2woQUJNT05fMiwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9IG5s X2xhbmdpbmZvX2woQUJNT05fMywgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9 IG5sX2xhbmdpbmZvX2woQUJNT05fNCwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9hbW9udGgw NSA9IG5sX2xhbmdpbmZvX2woQUJNT05fNSwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9hbW9u dGgwNiA9IG5sX2xhbmdpbmZvX2woQUJNT05fNiwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9h bW9udGgwNyA9IG5sX2xhbmdpbmZvX2woQUJNT05fNywgX19jbG9jKTsNCisJICBfTV9kYXRhLT5f TV9hbW9udGgwOCA9IG5sX2xhbmdpbmZvX2woQUJNT05fOCwgX19jbG9jKTsNCisJICBfTV9kYXRh LT5fTV9hbW9udGgwOSA9IG5sX2xhbmdpbmZvX2woQUJNT05fOSwgX19jbG9jKTsNCisJICBfTV9k YXRhLT5fTV9hbW9udGgxMCA9IG5sX2xhbmdpbmZvX2woQUJNT05fMTAsIF9fY2xvYyk7DQorCSAg X01fZGF0YS0+X01fYW1vbnRoMTEgPSBubF9sYW5naW5mb19sKEFCTU9OXzExLCBfX2Nsb2MpOw0K KwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gbmxfbGFuZ2luZm9fbChBQk1PTl8xMiwgX19jbG9j KTsNCisJfQ0KKyAgICB9DQorDQorI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UDQorICB0ZW1w bGF0ZTw+DQorICAgIHZvaWQNCisgICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Og0KKyAgICBfTV9w dXQod2NoYXJfdCogX19zLCBzaXplX3QgX19tYXhsZW4sIGNvbnN0IHdjaGFyX3QqIF9fZm9ybWF0 LA0KKwkgICBjb25zdCB0bSogX190bSkgY29uc3QgdGhyb3coKQ0KKyAgICB7DQorICAgICAgY29u c3Qgc2l6ZV90IF9fbGVuID0gd2NzZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190 bSwNCisJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7DQorICAgICAgLy8gTWFrZSBzdXJlIF9f cyBpcyBudWxsIHRlcm1pbmF0ZWQuDQorICAgICAgaWYgKF9fbGVuID09IDApDQorCV9fc1swXSA9 IEwnXDAnOw0KKyAgICB9DQorDQorICB0ZW1wbGF0ZTw+DQorICAgIHZvaWQNCisgICAgX190aW1l cHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9j KQ0KKyAgICB7DQorICAgICAgaWYgKCFfTV9kYXRhKQ0KKwlfTV9kYXRhID0gbmV3IF9fdGltZXB1 bmN0X2NhY2hlPHdjaGFyX3Q+Ow0KKw0KKyAgICAgIGlmICghX19jbG9jKQ0KKwl7DQorCSAgLy8g IkMiIGxvY2FsZQ0KKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2dldF9jX2xvY2FsZSgp Ow0KKw0KKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gTCIlbS8lZC8leSI7DQorCSAgX01f ZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gTCIlbS8lZC8leSI7DQorCSAgX01fZGF0YS0+X01f dGltZV9mb3JtYXQgPSBMIiVIOiVNOiVTIjsNCisJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3Jt YXQgPSBMIiVIOiVNOiVTIjsNCisJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0ID0gTCIi Ow0KKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gTCIiOw0KKwkgIF9NX2Rh dGEtPl9NX2FtID0gTCJBTSI7DQorCSAgX01fZGF0YS0+X01fcG0gPSBMIlBNIjsNCisJICBfTV9k YXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBMIiVJOiVNOiVTICVwIjsNCisNCisJICAvLyBEYXkgbmFt ZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5Lg0KKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBM IlN1bmRheSI7DQorCSAgX01fZGF0YS0+X01fZGF5MiA9IEwiTW9uZGF5IjsNCisJICBfTV9kYXRh LT5fTV9kYXkzID0gTCJUdWVzZGF5IjsNCisJICBfTV9kYXRhLT5fTV9kYXk0ID0gTCJXZWRuZXNk YXkiOw0KKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBMIlRodXJzZGF5IjsNCisJICBfTV9kYXRhLT5f TV9kYXk2ID0gTCJGcmlkYXkiOw0KKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBMIlNhdHVyZGF5IjsN CisNCisJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3Vu Lg0KKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gTCJTdW4iOw0KKwkgIF9NX2RhdGEtPl9NX2FkYXky ID0gTCJNb24iOw0KKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gTCJUdWUiOw0KKwkgIF9NX2RhdGEt Pl9NX2FkYXk0ID0gTCJXZWQiOw0KKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gTCJUaHUiOw0KKwkg IF9NX2RhdGEtPl9NX2FkYXk2ID0gTCJGcmkiOw0KKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gTCJT YXQiOw0KKw0KKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnku DQorCSAgX01fZGF0YS0+X01fbW9udGgwMSA9IEwiSmFudWFyeSI7DQorCSAgX01fZGF0YS0+X01f bW9udGgwMiA9IEwiRmVicnVhcnkiOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBMIk1hcmNo IjsNCisJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gTCJBcHJpbCI7DQorCSAgX01fZGF0YS0+X01f bW9udGgwNSA9IEwiTWF5IjsNCisJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gTCJKdW5lIjsNCisJ ICBfTV9kYXRhLT5fTV9tb250aDA3ID0gTCJKdWx5IjsNCisJICBfTV9kYXRhLT5fTV9tb250aDA4 ID0gTCJBdWd1c3QiOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBMIlNlcHRlbWJlciI7DQor CSAgX01fZGF0YS0+X01fbW9udGgxMCA9IEwiT2N0b2JlciI7DQorCSAgX01fZGF0YS0+X01fbW9u dGgxMSA9IEwiTm92ZW1iZXIiOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBMIkRlY2VtYmVy IjsNCisNCisJICAvLyBBYmJyZXZpYXRlZCBtb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIn cyBKYW4uDQorCSAgX01fZGF0YS0+X01fYW1vbnRoMDEgPSBMIkphbiI7DQorCSAgX01fZGF0YS0+ X01fYW1vbnRoMDIgPSBMIkZlYiI7DQorCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBMIk1hciI7 DQorCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSBMIkFwciI7DQorCSAgX01fZGF0YS0+X01fYW1v bnRoMDUgPSBMIk1heSI7DQorCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBMIkp1biI7DQorCSAg X01fZGF0YS0+X01fYW1vbnRoMDcgPSBMIkp1bCI7DQorCSAgX01fZGF0YS0+X01fYW1vbnRoMDgg PSBMIkF1ZyI7DQorCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBMIlNlcCI7DQorCSAgX01fZGF0 YS0+X01fYW1vbnRoMTAgPSBMIk9jdCI7DQorCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSBMIk5v diI7DQorCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBMIkRlYyI7DQorCX0NCisgICAgICBlbHNl DQorCXsNCisJICBfTV9jX2xvY2FsZV90aW1lcHVuY3QgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Ns b2MpOw0KKw0KKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90ICpfX3c7IH0gX191Ow0KKw0K KwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1FX1dEX0ZNVCwgX19jbG9jKTsNCisJ ICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9IF9fdS5fX3c7DQorCSAgX191Ll9fcyA9IG5sX2xh bmdpbmZvX2woX05MX1RJTUVfV0VSQV9EX0ZNVCwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9k YXRlX2VyYV9mb3JtYXQgPSBfX3UuX193Ow0KKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9O TF9USU1FX1dUX0ZNVCwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IF9f dS5fX3c7DQorCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV0VSQV9UX0ZNVCwg X19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBfX3UuX193Ow0KKwkg IF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1FX1dEX1RfRk1ULCBfX2Nsb2MpOw0KKwkg IF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBfX3UuX193Ow0KKwkgIF9fdS5fX3MgPSBu bF9sYW5naW5mb19sKF9OTF9USU1FX1dFUkFfRF9UX0ZNVCwgX19jbG9jKTsNCisJICBfTV9kYXRh LT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7DQorCSAgX191Ll9fcyA9IG5sX2xh bmdpbmZvX2woX05MX1RJTUVfV0FNX1NUUiwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9hbSA9 IF9fdS5fX3c7DQorCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV1BNX1NUUiwg X19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9wbSA9IF9fdS5fX3c7DQorCSAgX191Ll9fcyA9IG5s X2xhbmdpbmZvX2woX05MX1RJTUVfV1RfRk1UX0FNUE0sIF9fY2xvYyk7DQorCSAgX01fZGF0YS0+ X01fYW1fcG1fZm9ybWF0ID0gX191Ll9fdzsNCisNCisJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5n IHdpdGggIkMiJ3MgU3VuZGF5Lg0KKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1F X1dXRUVLREFZXzEsIF9fY2xvYyk7DQorCSAgX01fZGF0YS0+X01fZGF5MSA9IF9fdS5fX3c7DQor CSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV1dFRUtEQVlfMiwgX19jbG9jKTsN CisJICBfTV9kYXRhLT5fTV9kYXkyID0gX191Ll9fdzsNCisJICBfX3UuX19zID0gbmxfbGFuZ2lu Zm9fbChfTkxfVElNRV9XV0VFS0RBWV8zLCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX2RheTMg PSBfX3UuX193Ow0KKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1FX1dXRUVLREFZ XzQsIF9fY2xvYyk7DQorCSAgX01fZGF0YS0+X01fZGF5NCA9IF9fdS5fX3c7DQorCSAgX191Ll9f cyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV1dFRUtEQVlfNSwgX19jbG9jKTsNCisJICBfTV9k YXRhLT5fTV9kYXk1ID0gX191Ll9fdzsNCisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxf VElNRV9XV0VFS0RBWV82LCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX2RheTYgPSBfX3UuX193 Ow0KKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1FX1dXRUVLREFZXzcsIF9fY2xv Yyk7DQorCSAgX01fZGF0YS0+X01fZGF5NyA9IF9fdS5fX3c7DQorDQorCSAgLy8gQWJicmV2aWF0 ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4NCisJICBfX3UuX19zID0gbmxf bGFuZ2luZm9fbChfTkxfVElNRV9XV0RBWV8xLCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX2Fk YXkxID0gX191Ll9fdzsNCisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfVElNRV9XV0RB WV8yLCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gX191Ll9fdzsNCisJICBfX3Uu X19zID0gbmxfbGFuZ2luZm9fbChfTkxfVElNRV9XV0RBWV8zLCBfX2Nsb2MpOw0KKwkgIF9NX2Rh dGEtPl9NX2FkYXkzID0gX191Ll9fdzsNCisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxf VElNRV9XV0RBWV80LCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gX191Ll9fdzsN CisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfVElNRV9XV0RBWV81LCBfX2Nsb2MpOw0K KwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gX191Ll9fdzsNCisJICBfX3UuX19zID0gbmxfbGFuZ2lu Zm9fbChfTkxfVElNRV9XV0RBWV82LCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0g X191Ll9fdzsNCisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfVElNRV9XV0RBWV83LCBf X2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gX191Ll9fdzsNCisNCisJICAvLyBNb250 aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5Lg0KKwkgIF9fdS5fX3MgPSBubF9s YW5naW5mb19sKF9OTF9USU1FX1dNT05USF8xLCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX21v bnRoMDEgPSBfX3UuX193Ow0KKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1FX1dN T05USF8yLCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSBfX3UuX193Ow0KKwkg IF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1FX1dNT05USF8zLCBfX2Nsb2MpOw0KKwkg IF9NX2RhdGEtPl9NX21vbnRoMDMgPSBfX3UuX193Ow0KKwkgIF9fdS5fX3MgPSBubF9sYW5naW5m b19sKF9OTF9USU1FX1dNT05USF80LCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQg PSBfX3UuX193Ow0KKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1FX1dNT05USF81 LCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSBfX3UuX193Ow0KKwkgIF9fdS5f X3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1FX1dNT05USF82LCBfX2Nsb2MpOw0KKwkgIF9NX2Rh dGEtPl9NX21vbnRoMDYgPSBfX3UuX193Ow0KKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9O TF9USU1FX1dNT05USF83LCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSBfX3Uu X193Ow0KKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1FX1dNT05USF84LCBfX2Ns b2MpOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDggPSBfX3UuX193Ow0KKwkgIF9fdS5fX3MgPSBu bF9sYW5naW5mb19sKF9OTF9USU1FX1dNT05USF85LCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9N X21vbnRoMDkgPSBfX3UuX193Ow0KKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1F X1dNT05USF8xMCwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9tb250aDEwID0gX191Ll9fdzsN CisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfVElNRV9XTU9OVEhfMTEsIF9fY2xvYyk7 DQorCSAgX01fZGF0YS0+X01fbW9udGgxMSA9IF9fdS5fX3c7DQorCSAgX191Ll9fcyA9IG5sX2xh bmdpbmZvX2woX05MX1RJTUVfV01PTlRIXzEyLCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX21v bnRoMTIgPSBfX3UuX193Ow0KKw0KKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFy dGluZyB3aXRoICJDIidzIEphbi4NCisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfVElN RV9XTU9OXzEsIF9fY2xvYyk7DQorCSAgX01fZGF0YS0+X01fYW1vbnRoMDEgPSBfX3UuX193Ow0K KwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1FX1dNT05fMiwgX19jbG9jKTsNCisJ ICBfTV9kYXRhLT5fTV9hbW9udGgwMiA9IF9fdS5fX3c7DQorCSAgX191Ll9fcyA9IG5sX2xhbmdp bmZvX2woX05MX1RJTUVfV01PTl8zLCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAz ID0gX191Ll9fdzsNCisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfVElNRV9XTU9OXzQs IF9fY2xvYyk7DQorCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSBfX3UuX193Ow0KKwkgIF9fdS5f X3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1FX1dNT05fNSwgX19jbG9jKTsNCisJICBfTV9kYXRh LT5fTV9hbW9udGgwNSA9IF9fdS5fX3c7DQorCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05M X1RJTUVfV01PTl82LCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gX191Ll9f dzsNCisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfVElNRV9XTU9OXzcsIF9fY2xvYyk7 DQorCSAgX01fZGF0YS0+X01fYW1vbnRoMDcgPSBfX3UuX193Ow0KKwkgIF9fdS5fX3MgPSBubF9s YW5naW5mb19sKF9OTF9USU1FX1dNT05fOCwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9hbW9u dGgwOCA9IF9fdS5fX3c7DQorCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV01P Tl85LCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gX191Ll9fdzsNCisJICBf X3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfVElNRV9XTU9OXzEwLCBfX2Nsb2MpOw0KKwkgIF9N X2RhdGEtPl9NX2Ftb250aDEwID0gX191Ll9fdzsNCisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9f bChfTkxfVElNRV9XTU9OXzExLCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0g X191Ll9fdzsNCisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfVElNRV9XTU9OXzEyLCBf X2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gX191Ll9fdzsNCisJfQ0KKyAgICB9 DQorI2VuZGlmDQorDQorX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9ODQorfSAvLyBuYW1l c3BhY2UNCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvdGlt ZV9tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvdGltZV9tZW1i ZXJzLmgNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMC4uYjBjN2MyOWJm ZGUNCi0tLSAvZGV2L251bGwNCisrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25ld2xp Yi90aW1lX21lbWJlcnMuaA0KQEAgLTAsMCArMSw5MCBAQA0KKy8vIHN0ZDo6dGltZV9nZXQsIHN0 ZDo6dGltZV9wdXQgaW1wbGVtZW50YXRpb24sIG5ld2xpYiB2ZXJzaW9uIC0qLSBDKysgLSotDQor DQorLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMjMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuDQorLy8NCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFy eS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlDQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlDQorLy8gdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisvLyBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikNCisv LyBhbnkgbGF0ZXIgdmVyc2lvbi4NCisNCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisvLyBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKy8vIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUN CisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKw0KKy8v IFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRp b25hbA0KKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFy eSBFeGNlcHRpb24sIHZlcnNpb24NCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLg0KKw0KKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZA0KKy8vIGEgY29weSBvZiB0 aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07 DQorLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3Rp dmVseS4gIElmIG5vdCwgc2VlDQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lg0K Kw0KKy8qKiBAZmlsZSBiaXRzL3RpbWVfbWVtYmVycy5oDQorICogIFRoaXMgaXMgYW4gaW50ZXJu YWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4NCisgKiAg RG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXtsb2NhbGV9DQor ICovDQorDQorLy8NCisvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMS4yIC0gdGltZV9nZXQgZnVu Y3Rpb25zDQorLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjMuMiAtIHRpbWVfcHV0IGZ1bmN0aW9u cw0KKy8vDQorDQorLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNv bT4NCisvLyBNb2RpZmllZCBieSBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0BuaWZ0eS5uZS5q cD4NCisNCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkNCit7DQor X0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04NCisNCisgIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVD4NCisgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3Qoc2l6ZV90IF9f cmVmcykNCisgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKDApLCBfTV9jX2xvY2FsZV90aW1l cHVuY3QoMCksDQorICAgICAgX01fbmFtZV90aW1lcHVuY3QoX1NfZ2V0X2NfbmFtZSgpKQ0KKyAg ICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7IH0NCisNCisgIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVD4NCisgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jYWNoZV90 eXBlKiBfX2NhY2hlLCBzaXplX3QgX19yZWZzKQ0KKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2Rh dGEoX19jYWNoZSksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCgwKSwNCisgICAgICBfTV9uYW1lX3Rp bWVwdW5jdChfU19nZXRfY19uYW1lKCkpDQorICAgIHsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3Qo KTsgfQ0KKw0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KKyAgICBfX3RpbWVwdW5jdDxf Q2hhclQ+OjpfX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLA0K KwkJCQkgICAgIHNpemVfdCBfX3JlZnMpDQorICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YSgw KSwgX01fY19sb2NhbGVfdGltZXB1bmN0KDApLA0KKyAgICAgIF9NX25hbWVfdGltZXB1bmN0KDAp DQorICAgIHsNCisgICAgICBpZiAoX19idWlsdGluX3N0cmNtcChfX3MsIF9TX2dldF9jX25hbWUo KSkgIT0gMCkNCisJew0KKwkgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fYnVpbHRpbl9zdHJsZW4o X19zKSArIDE7DQorCSAgY2hhciogX190bXAgPSBuZXcgY2hhcltfX2xlbl07DQorCSAgX19idWls dGluX21lbWNweShfX3RtcCwgX19zLCBfX2xlbik7DQorCSAgX01fbmFtZV90aW1lcHVuY3QgPSBf X3RtcDsNCisJfQ0KKyAgICAgIGVsc2UNCisJX01fbmFtZV90aW1lcHVuY3QgPSBfU19nZXRfY19u YW1lKCk7DQorDQorICAgICAgX190cnkNCisJeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Ns b2MpOyB9DQorICAgICAgX19jYXRjaCguLi4pDQorCXsNCisJICBpZiAoX01fbmFtZV90aW1lcHVu Y3QgIT0gX1NfZ2V0X2NfbmFtZSgpKQ0KKwkgICAgZGVsZXRlIFtdIF9NX25hbWVfdGltZXB1bmN0 Ow0KKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOw0KKwl9DQorICAgIH0NCisNCisgIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVD4NCisgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6fl9fdGltZXB1 bmN0KCkNCisgICAgew0KKyAgICAgIGlmIChfTV9uYW1lX3RpbWVwdW5jdCAhPSBfU19nZXRfY19u YW1lKCkpDQorCWRlbGV0ZSBbXSBfTV9uYW1lX3RpbWVwdW5jdDsNCisgICAgICBkZWxldGUgX01f ZGF0YTsNCisgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7 DQorICAgIH0NCisNCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04NCit9IC8vIG5hbWVz cGFjZQ0KZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUgYi9saWJzdGRjKystdjMv Y29uZmlndXJlDQppbmRleCAxM2ZjMDNiMmEzZi4uNTM1NDQxY2QxODEgMTAwNzU1DQotLS0gYS9s aWJzdGRjKystdjMvY29uZmlndXJlDQorKysgYi9saWJzdGRjKystdjMvY29uZmlndXJlDQpAQCAt NzIzLDYgKzcyMyw3IEBAIENYWEZJTFQNCiBMVExJQklDT05WDQogTElCSUNPTlYNCiBPUFRfTERG TEFHUw0KK0VYVFJBX0xJQlMNCiBTRUNUSU9OX0xERkxBR1MNCiBHTElCQ1hYX0xJQlMNCiBFTkFC TEVfVlRBQkxFX1ZFUklGWV9GQUxTRQ0KQEAgLTE2NTUyLDcgKzE2NTUzLDcgQEAgZmkNCiAgICAg ICBkcmFnb25mbHkqIHwgZnJlZWJzZCopDQogCWVuYWJsZV9jbG9jYWxlX2ZsYWc9ZHJhZ29uZmx5 DQogCTs7DQotICAgICAgb3BlbmJzZCopDQorICAgICAgb3BlbmJzZCogfCBjeWd3aW4qKQ0KIAll bmFibGVfY2xvY2FsZV9mbGFnPW5ld2xpYg0KIAk7Ow0KICAgICAgICopDQpAQCAtMTY1NjQsNiAr MTY1NjUsMTAgQEAgZmkNCiAJOzsNCiAgICAgZXNhYw0KICAgZmkNCisgIGNhc2UgJHt0YXJnZXRf b3N9IGluIGN5Z3dpbiopDQorICAgIEVYVFJBX0xJQlM9Ii1saW50bCINCisgICAgOzsNCisgIGVz YWMNCiANCiAgICMgU2FuaXR5IGNoZWNrIG1vZGVsLCBhbmQgdGVzdCBmb3Igc3BlY2lhbCBmdW5j dGlvbmFsaXR5Lg0KICAgaWYgdGVzdCAkZW5hYmxlX2Nsb2NhbGVfZmxhZyA9IGdudTsgdGhlbg0K QEAgLTE2ODI0LDE4ICsxNjgyOSwxOCBAQCAkYXNfZWNobyAiSUVFRSAxMDAzLjEiID4mNjsgfQ0K ICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBu ZXdsaWIiID4mNQ0KICRhc19lY2hvICJuZXdsaWIiID4mNjsgfQ0KIA0KLSAgICAgIENMT0NBTEVf SD1jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaA0KLSAgICAgIENMT0NBTEVfQ0M9Y29u ZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjDQotICAgICAgQ0NPREVDVlRfQ0M9Y29uZmln L2xvY2FsZS9nZW5lcmljL2NvZGVjdnRfbWVtYmVycy5jYw0KLSAgICAgIENDT0xMQVRFX0NDPWNv bmZpZy9sb2NhbGUvZ2VuZXJpYy9jb2xsYXRlX21lbWJlcnMuY2MNCisgICAgICBDTE9DQUxFX0g9 Y29uZmlnL2xvY2FsZS9uZXdsaWIvY19sb2NhbGUuaA0KKyAgICAgIENMT0NBTEVfQ0M9Y29uZmln L2xvY2FsZS9uZXdsaWIvY19sb2NhbGUuY2MNCisgICAgICBDQ09ERUNWVF9DQz1jb25maWcvbG9j YWxlL25ld2xpYi9jb2RlY3Z0X21lbWJlcnMuY2MNCisgICAgICBDQ09MTEFURV9DQz1jb25maWcv bG9jYWxlL25ld2xpYi9jb2xsYXRlX21lbWJlcnMuY2MNCiAgICAgICBDQ1RZUEVfQ0M9Y29uZmln L2xvY2FsZS9uZXdsaWIvY3R5cGVfbWVtYmVycy5jYw0KLSAgICAgIENNRVNTQUdFU19IPWNvbmZp Zy9sb2NhbGUvZ2VuZXJpYy9tZXNzYWdlc19tZW1iZXJzLmgNCi0gICAgICBDTUVTU0FHRVNfQ0M9 Y29uZmlnL2xvY2FsZS9nZW5lcmljL21lc3NhZ2VzX21lbWJlcnMuY2MNCi0gICAgICBDTU9ORVlf Q0M9Y29uZmlnL2xvY2FsZS9nZW5lcmljL21vbmV0YXJ5X21lbWJlcnMuY2MNCi0gICAgICBDTlVN RVJJQ19DQz1jb25maWcvbG9jYWxlL2dlbmVyaWMvbnVtZXJpY19tZW1iZXJzLmNjDQotICAgICAg Q1RJTUVfSD1jb25maWcvbG9jYWxlL2dlbmVyaWMvdGltZV9tZW1iZXJzLmgNCi0gICAgICBDVElN RV9DQz1jb25maWcvbG9jYWxlL2dlbmVyaWMvdGltZV9tZW1iZXJzLmNjDQotICAgICAgQ0xPQ0FM RV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jKytsb2NhbGVfaW50ZXJuYWwuaA0K KyAgICAgIENNRVNTQUdFU19IPWNvbmZpZy9sb2NhbGUvbmV3bGliL21lc3NhZ2VzX21lbWJlcnMu aA0KKyAgICAgIENNRVNTQUdFU19DQz1jb25maWcvbG9jYWxlL25ld2xpYi9tZXNzYWdlc19tZW1i ZXJzLmNjDQorICAgICAgQ01PTkVZX0NDPWNvbmZpZy9sb2NhbGUvbmV3bGliL21vbmV0YXJ5X21l bWJlcnMuY2MNCisgICAgICBDTlVNRVJJQ19DQz1jb25maWcvbG9jYWxlL25ld2xpYi9udW1lcmlj X21lbWJlcnMuY2MNCisgICAgICBDVElNRV9IPWNvbmZpZy9sb2NhbGUvbmV3bGliL3RpbWVfbWVt YmVycy5oDQorICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS9uZXdsaWIvdGltZV9tZW1iZXJz LmNjDQorICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvbmV3bGliL2MrK2xv Y2FsZV9pbnRlcm5hbC5oDQogICAgICAgOzsNCiAgIGVzYWMNCiANCmRpZmYgLS1naXQgYS9saWJz dGRjKystdjMvc3JjL01ha2VmaWxlLmluIGIvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5pbg0K aW5kZXggYzVkMDFlN2JlYmEuLjIwZGFhNjJlMWQ1IDEwMDY0NA0KLS0tIGEvbGlic3RkYysrLXYz L3NyYy9NYWtlZmlsZS5pbg0KKysrIGIvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5pbg0KQEAg LTMwNyw2ICszMDcsNyBAQCBFUlJPUl9DT05TVEFOVFNfU1JDRElSID0gQEVSUk9SX0NPTlNUQU5U U19TUkNESVJADQogRVhFRVhUID0gQEVYRUVYVEANCiBFWFRSQV9DRkxBR1MgPSBARVhUUkFfQ0ZM QUdTQA0KIEVYVFJBX0NYWF9GTEFHUyA9IEBFWFRSQV9DWFhfRkxBR1NADQorRVhUUkFfTElCUyA9 IEBFWFRSQV9MSUJTQA0KIEZHUkVQID0gQEZHUkVQQA0KIEZPUk1BVF9GSUxFID0gQEZPUk1BVF9G SUxFQA0KIEZSRUVTVEFORElOR19GTEFHUyA9IEBGUkVFU1RBTkRJTkdfRkxBR1NADQpAQCAtNTYz LDcgKzU2NCw3IEBAIGxpYnN0ZGNfX19sYV9ERVBFTkRFTkNJRVMgPSBcDQogCSQodG9wX2J1aWxk ZGlyKS9zcmMvYysrMjAvbGliYysrMjBjb252ZW5pZW5jZS5sYQ0KIA0KIGxpYnN0ZGNfX19sYV9M REZMQUdTID0gXA0KLQktdmVyc2lvbi1pbmZvICQobGlidG9vbF9WRVJTSU9OKSAke3ZlcnNpb25f YXJnfSAtbG0NCisJLXZlcnNpb24taW5mbyAkKGxpYnRvb2xfVkVSU0lPTikgJHt2ZXJzaW9uX2Fy Z30gLWxtICQoRVhUUkFfTElCUykNCiANCiBsaWJzdGRjX19fbGFfTElOSyA9ICQoQ1hYTElOSykg JChsaWJzdGRjX19fbGFfTERGTEFHUykgJChsdF9ob3N0X2ZsYWdzKQ0KIEBHTElCQ1hYX0xEQkxf QUxUMTI4X0NPTVBBVF9GQUxTRUBAR0xJQkNYWF9MREJMX0NPTVBBVF9UUlVFQExUQ1hYQ09NUElM RTY0ID0gJChMVENYWENPTVBJTEUpDQpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL3NyYy9jKysx MS9sb2NhbGVfaW5pdC5jYyBiL2xpYnN0ZGMrKy12My9zcmMvYysrMTEvbG9jYWxlX2luaXQuY2MN CmluZGV4IGNmYzIyZWFmNWE0Li41ODJhODE2ZGE2NSAxMDA2NDQNCi0tLSBhL2xpYnN0ZGMrKy12 My9zcmMvYysrMTEvbG9jYWxlX2luaXQuY2MNCisrKyBiL2xpYnN0ZGMrKy12My9zcmMvYysrMTEv bG9jYWxlX2luaXQuY2MNCkBAIC0zMDAsOCArMzAwLDkgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQ QUNFX1ZFUlNJT04NCiAJX19vdGhlci5fTV9pbXBsLT5fTV9hZGRfcmVmZXJlbmNlKCk7DQogICAg ICAgX1NfZ2xvYmFsID0gX19vdGhlci5fTV9pbXBsOw0KICAgICAgIGNvbnN0IHN0cmluZyBfX290 aGVyX25hbWUgPSBfX290aGVyLm5hbWUoKTsNCisgICAgICBleHRlcm4gY29uc3QgX190eXBlb2Yo c2V0bG9jYWxlKSAqX19zZXRsb2NhbGU7DQogICAgICAgaWYgKF9fb3RoZXJfbmFtZSAhPSAiKiIp DQotCXNldGxvY2FsZShMQ19BTEwsIF9fb3RoZXJfbmFtZS5jX3N0cigpKTsNCisJX19zZXRsb2Nh bGUoTENfQUxMLCBfX290aGVyX25hbWUuY19zdHIoKSk7DQogICAgIH0NCiANCiAgICAgLy8gUmVm ZXJlbmNlIGNvdW50IHNhbml0eSBjaGVjazogb25lIHJlZmVyZW5jZSByZW1vdmVkIGZvciB0aGUN Ci0tIA0KMi4zOS4wDQoNCg== --Multipart=_Wed__27_Sep_2023_19_50_39_+0900_=sZ.W=81WNihN9Sy--