From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa2.mentor.iphmx.com (esa2.mentor.iphmx.com [68.232.141.98]) by sourceware.org (Postfix) with ESMTPS id BEF773857C6C; Mon, 13 Dec 2021 11:20:00 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org BEF773857C6C Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com IronPort-SDR: 2q6KtCeZ8p4Q+U9Ef19uqtu6uFA8yPCyW25h/5C+r2mS3iY6IRoApblzkg8Z+ojbFXD+oWS/yq XMLNXeUHdqqiSsnna8TPAg6mCVYR9I/3Yi4avyRnP6dniSk1gtsyTTm61AJwCmHMExHfjiQwnj Ne/xHFjMbS1/oo5BA6t0KIqwIr8jVC3euBDSef3wyjtzS40FPdU6jgAG7Lv2tKOzn8npyUOf/X OylD1LC5wnAILax1bRld6K3VKfUTgY3b3Y4uIgd8nOPiMDqhs0/gIz0/ieX35pSpDbdl8YTIGY srJkqFPTwFYCnMsY/GtP2IB2 X-IronPort-AV: E=Sophos;i="5.88,202,1635235200"; d="diff'?scan'208";a="69606052" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa2.mentor.iphmx.com with ESMTP; 13 Dec 2021 03:19:59 -0800 IronPort-SDR: kov+KqFmdKJHWa5eBLmESMzGyZcoWBbjJWOk8f6xWwgXBfk1UzJ7amNGQybNW857M5LL1Srs+I qLml5VmrK4vvzWhBtlzeCnwc/AOLKNVQtAaX1ivvcBv1b+cbt4QuvGbxtPcHaUNzdNLdpxXRvS rRQJ3Z/3Y9O9BHPz2zY0XDJm9JcKr4bDj4KYedX4eQjp9CFw30CqsZIlsggM6dQb5i5SwojevU 1VVFJjeOvxQzykR55yWGkFrfpnraejZBh48IVlj3skTFzHgDanmcvO9y2xUzcgsKof/ylqog+w te4= Content-Type: multipart/mixed; boundary="------------wv00tw7zmHK1MlUMf5rJddym" Message-ID: <90154e1c-21fc-c0aa-82f4-cbd3e81f826a@codesourcery.com> Date: Mon, 13 Dec 2021 12:19:50 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.3.2 Content-Language: en-US To: gcc-patches , fortran , Jakub Jelinek From: Tobias Burnus Subject: [Patch] Fortran: Handle compare in OpenMP atomic X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-11.mgc.mentorg.com (139.181.222.11) To svr-ies-mbx-01.mgc.mentorg.com (139.181.222.1) X-Spam-Status: No, score=-10.8 required=5.0 tests=BAYES_00, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, KAM_STOCKGEN, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: fortran@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Fortran mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Dec 2021 11:20:05 -0000 --------------wv00tw7zmHK1MlUMf5rJddym Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: quoted-printable Some Sunday work ... Implement the 'compare' part in trans-openmp of OpenMP 5.1's atomic changes plus a couple of bugfixes throughout. OK? Tobias ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstra=C3=9Fe 201= , 80634 M=C3=BCnchen; Gesellschaft mit beschr=C3=A4nkter Haftung; Gesch=C3= =A4ftsf=C3=BChrer: Thomas Heurung, Frank Th=C3=BCrauf; Sitz der Gesellschaf= t: M=C3=BCnchen; Registergericht M=C3=BCnchen, HRB 106955 --------------wv00tw7zmHK1MlUMf5rJddym Content-Type: text/x-patch; charset="UTF-8"; name="omp-atomic-comp.diff" Content-Disposition: attachment; filename="omp-atomic-comp.diff" Content-Transfer-Encoding: base64 Rm9ydHJhbjogSGFuZGxlIGNvbXBhcmUgaW4gT3Blbk1QIGF0b21pYwoKZ2NjL2ZvcnRyYW4v Q2hhbmdlTG9nOgoKCVBSIGZvcnRyYW4vMTAzNTc2CgkqIG9wZW5tcC5jIChpc19zY2FsYXJf aW50cmluc2ljX2V4cHIpOiBGaXggY29uZGl0aW9uLgoJKHJlc29sdmVfb21wX2F0b21pYyk6 IEZpeC91cGRhdGUgY2hlY2tzLCBhY2NlcHQgY29tcGFyZS4KCSogdHJhbnMtb3Blbm1wLmMg KGdmY190cmFuc19vbXBfYXRvbWljKTogSGFuZGxlIGNvbXBhcmUuCgpsaWJnb21wL0NoYW5n ZUxvZzoKCgkqIGxpYmdvbXAudGV4aSAoT3Blbk1QIDUuMSk6IFNldCBGb3J0cmFuIHN1cHBv cnQgZm9yIGF0b21pYyB0byAnWScuCgkqIHRlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vYXRv bWljLTE5LmY5MDogTmV3IHRlc3QuCgpnY2MvdGVzdHN1aXRlL0NoYW5nZUxvZzoKCgkqIGdm b3J0cmFuLmRnL2dvbXAvYXRvbWljLTI1LmY5MDogUmVtb3ZlIHNvcnJ5LCBmaXggKyBhZGQg Y2hlY2tzLgoJKiBnZm9ydHJhbi5kZy9nb21wL2F0b21pYy0yNi5mOTA6IExpa2V3aXNlLgoJ KiBnZm9ydHJhbi5kZy9nb21wL2F0b21pYy0yMS5mOTA6IE5ldyB0ZXN0LgoKIGdjYy9mb3J0 cmFuL29wZW5tcC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDgxICsrKy0tLQog Z2NjL2ZvcnRyYW4vdHJhbnMtb3Blbm1wLmMgICAgICAgICAgICAgICAgICAgICAgfCAyMTEg KysrKysrKysrKysrLS0tLQogZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb21wL2F0b21p Yy0yMS5mOTAgICAgfCAgOTMgKysrKysrKwogZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9n b21wL2F0b21pYy0yNS5mOTAgICAgfCAgMTggKy0KIGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4u ZGcvZ29tcC9hdG9taWMtMjYuZjkwICAgIHwgIDI2ICstCiBsaWJnb21wL2xpYmdvbXAudGV4 aSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMyArLQogbGliZ29tcC90ZXN0c3Vp dGUvbGliZ29tcC5mb3J0cmFuL2F0b21pYy0xOS5mOTAgfCAzMTMgKysrKysrKysrKysrKysr KysrKysrKysrCiA3IGZpbGVzIGNoYW5nZWQsIDY1MCBpbnNlcnRpb25zKCspLCA5NSBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9nY2MvZm9ydHJhbi9vcGVubXAuYyBiL2djYy9mb3J0 cmFuL29wZW5tcC5jCmluZGV4IDg0NmZkN2I1YzVhLi4yMDM2YmMxMzQ5ZiAxMDA2NDQKLS0t IGEvZ2NjL2ZvcnRyYW4vb3Blbm1wLmMKKysrIGIvZ2NjL2ZvcnRyYW4vb3Blbm1wLmMKQEAg LTc1NTIsMTAgKzc1NTIsMTAgQEAgaXNfc2NhbGFyX2ludHJpbnNpY19leHByIChnZmNfZXhw ciAqZXhwciwgYm9vbCBtdXN0X2JlX3ZhciwgYm9vbCBjb252X29rKQogICAgIHJldHVybiBm YWxzZTsKICAgcmV0dXJuIChleHByLT5yYW5rID09IDAKIAkgICYmICFnZmNfaXNfY29pbmRl eGVkIChleHByKQotCSAgJiYgKGV4cHItPnRzLnR5cGUgIT0gQlRfSU5URUdFUgotCSAgICAg IHx8IGV4cHItPnRzLnR5cGUgIT0gQlRfUkVBTAotCSAgICAgIHx8IGV4cHItPnRzLnR5cGUg IT0gQlRfQ09NUExFWAotCSAgICAgIHx8IGV4cHItPnRzLnR5cGUgIT0gQlRfTE9HSUNBTCkp OworCSAgJiYgKGV4cHItPnRzLnR5cGUgPT0gQlRfSU5URUdFUgorCSAgICAgIHx8IGV4cHIt PnRzLnR5cGUgPT0gQlRfUkVBTAorCSAgICAgIHx8IGV4cHItPnRzLnR5cGUgPT0gQlRfQ09N UExFWAorCSAgICAgIHx8IGV4cHItPnRzLnR5cGUgPT0gQlRfTE9HSUNBTCkpOwogfQogCiBz dGF0aWMgdm9pZApAQCAtNzU3NCwxMiArNzU3NCw5IEBAIHJlc29sdmVfb21wX2F0b21pYyAo Z2ZjX2NvZGUgKmNvZGUpCiAgIGNvZGUgPSBjb2RlLT5ibG9jay0+bmV4dDsKICAgLyogcmVz b2x2ZV9ibG9ja3MgYXNzZXJ0cyB0aGlzIGlzIGluaXRpYWxseSBFWEVDX0FTU0lHTiBvciBF WEVDX0lGCiAgICAgIElmIGl0IGNoYW5nZWQgdG8gRVhFQ19OT1AsIGFzc3VtZSBhbiBlcnJv ciBoYXMgYmVlbiBlbWl0dGVkIGFscmVhZHkuICAqLwotICBpZiAoY29kZS0+b3AgPT0gRVhF Q19OT1AgLyogRklYTUU6IHx8IChjb2RlLT5uZXh0ICYmIGNvZGUtPm5leHQtPm9wID09IEVY RUNfTk9QKSovKQorICBpZiAoY29kZS0+b3AgPT0gRVhFQ19OT1ApCiAgICAgcmV0dXJuOwog Ci0gIGlmIChjb2RlLT5vcCA9PSBFWEVDX0lGICYmIGNvZGUtPmJsb2NrLT5vcCA9PSBFWEVD X0lGKQotICAgIGNvbXBfY29uZCA9IGNvZGUtPmJsb2NrLT5leHByMTsKLQogICBpZiAoYXRv bWljX2NvZGUtPmV4dC5vbXBfY2xhdXNlcy0+Y29tcGFyZQogICAgICAgJiYgYXRvbWljX2Nv ZGUtPmV4dC5vbXBfY2xhdXNlcy0+Y2FwdHVyZSkKICAgICB7CkBAIC03NTk3LDYgKzc1OTQs NyBAQCByZXNvbHZlX29tcF9hdG9taWMgKGdmY19jb2RlICpjb2RlKQogCSAgJiYgbmV4dC0+ YmxvY2stPm9wID09IEVYRUNfSUYKIAkgICYmIG5leHQtPmJsb2NrLT5uZXh0LT5vcCA9PSBF WEVDX0FTU0lHTikKIAl7CisJICBjb21wX2NvbmQgPSBuZXh0LT5ibG9jay0+ZXhwcjE7CiAJ ICBzdG10ID0gbmV4dC0+YmxvY2stPm5leHQ7CiAJICBpZiAoc3RtdC0+bmV4dCkKIAkgICAg ewpAQCAtNzYwNCwxMSArNzYwMiwyMCBAQCByZXNvbHZlX29tcF9hdG9taWMgKGdmY19jb2Rl ICpjb2RlKQogCSAgICAgIGdvdG8gdW5leHBlY3RlZDsKIAkgICAgfQogCX0KKyAgICAgIGVs c2UgaWYgKGNhcHR1cmVfc3RtdCkKKwl7CisJICBnZmNfZXJyb3IgKCJFeHBlY3RlZCBJRiBh dCAlTCBpbiBhdG9taWMgY29tcGFyZSBjYXB0dXJlIiwKKwkJICAgICAmbmV4dC0+bG9jKTsK KwkgIHJldHVybjsKKwl9CiAgICAgICBpZiAoc3RtdCAmJiAhY2FwdHVyZV9zdG10ICYmIG5l eHQtPmJsb2NrLT5ibG9jaykKIAl7CiAJICBpZiAobmV4dC0+YmxvY2stPmJsb2NrLT5leHBy MSkKLQkgICAgZ2ZjX2Vycm9yICgiRXhwZWN0ZWQgRUxTRSBhdCAlTCBpbiBhdG9taWMgY29t cGFyZSBjYXB0dXJlIiwKLQkJICAgICAgICZuZXh0LT5ibG9jay0+YmxvY2stPmV4cHIxLT53 aGVyZSk7CisJICAgIHsKKwkgICAgICBnZmNfZXJyb3IgKCJFeHBlY3RlZCBFTFNFIGF0ICVM IGluIGF0b21pYyBjb21wYXJlIGNhcHR1cmUiLAorCQkJICZuZXh0LT5ibG9jay0+YmxvY2st PmV4cHIxLT53aGVyZSk7CisJICAgICAgcmV0dXJuOworCSAgICB9CiAJICBpZiAoIWNvZGUt PmJsb2NrLT5ibG9jay0+bmV4dAogCSAgICAgIHx8IGNvZGUtPmJsb2NrLT5ibG9jay0+bmV4 dC0+b3AgIT0gRVhFQ19BU1NJR04pCiAJICAgIHsKQEAgLTc2MjMsMTAgKzc2MzAsOCBAQCBy ZXNvbHZlX29tcF9hdG9taWMgKGdmY19jb2RlICpjb2RlKQogCSAgICAgIGdvdG8gdW5leHBl Y3RlZDsKIAkgICAgfQogCX0KLSAgICAgIGlmIChzdG10ICYmICFjYXB0dXJlX3N0bXQgJiYg Y29kZS0+b3AgPT0gRVhFQ19BU1NJR04pCi0JewotCSAgY2FwdHVyZV9zdG10ID0gY29kZTsK LQl9CisgICAgICBpZiAoc3RtdCAmJiAhY2FwdHVyZV9zdG10ICYmIG5leHQtPm5leHQtPm9w ID09IEVYRUNfQVNTSUdOKQorCWNhcHR1cmVfc3RtdCA9IG5leHQtPm5leHQ7CiAgICAgICBl bHNlIGlmICghY2FwdHVyZV9zdG10KQogCXsKIAkgIGxvYyA9ICZjb2RlLT5sb2M7CkBAIC03 NjQxLDYgKzc2NDYsNyBAQCByZXNvbHZlX29tcF9hdG9taWMgKGdmY19jb2RlICpjb2RlKQog CSAgJiYgY29kZS0+YmxvY2stPm9wID09IEVYRUNfSUYKIAkgICYmIGNvZGUtPmJsb2NrLT5u ZXh0LT5vcCA9PSBFWEVDX0FTU0lHTikKIAl7CisJICBjb21wX2NvbmQgPSBjb2RlLT5ibG9j ay0+ZXhwcjE7CiAJICBzdG10ID0gY29kZS0+YmxvY2stPm5leHQ7CiAJICBpZiAoc3RtdC0+ bmV4dCB8fCBjb2RlLT5ibG9jay0+YmxvY2spCiAJICAgIHsKQEAgLTc3MDMsOCArNzcwOSw3 IEBAIHJlc29sdmVfb21wX2F0b21pYyAoZ2ZjX2NvZGUgKmNvZGUpCiAgICAgewogICAgICAg LyogeCA9IC4uLiAqLwogICAgICAgc3RtdCA9IGNvZGU7Ci0gICAgICBpZiAoKCFhdG9taWNf Y29kZS0+ZXh0Lm9tcF9jbGF1c2VzLT5jb21wYXJlICYmIHN0bXQtPm9wICE9IEVYRUNfQVNT SUdOKQotCSAgfHwgKGF0b21pY19jb2RlLT5leHQub21wX2NsYXVzZXMtPmNvbXBhcmUgJiYg c3RtdC0+b3AgIT0gRVhFQ19JRikpCisgICAgICBpZiAoIWF0b21pY19jb2RlLT5leHQub21w X2NsYXVzZXMtPmNvbXBhcmUgJiYgc3RtdC0+b3AgIT0gRVhFQ19BU1NJR04pCiAJZ290byB1 bmV4cGVjdGVkOwogICAgICAgZ2NjX2Fzc2VydCAoIWNvZGUtPm5leHQpOwogICAgIH0KQEAg LTc3MjAsNyArNzcyNSw3IEBAIHJlc29sdmVfb21wX2F0b21pYyAoZ2ZjX2NvZGUgKmNvZGUp CiAJCSAgICAgImV4cHJlc3Npb24gYXQgJUwiLCAmY29tcF9jb25kLT53aGVyZSk7CiAJICBy ZXR1cm47CiAJfQotICAgICAgaWYgKCFpc19zY2FsYXJfaW50cmluc2ljX2V4cHIgKGNvbXBf Y29uZC0+dmFsdWUub3Aub3AxLCB0cnVlLCBmYWxzZSkpCisgICAgICBpZiAoIWlzX3NjYWxh cl9pbnRyaW5zaWNfZXhwciAoY29tcF9jb25kLT52YWx1ZS5vcC5vcDEsIHRydWUsIHRydWUp KQogCXsKIAkgIGdmY19lcnJvciAoIkV4cGVjdGVkIHNjYWxhciBpbnRyaW5zaWMgdmFyaWFi bGUgYXQgJUwgaW4gYXRvbWljICIKIAkJICAgICAiY29tcGFyaXNvbiIsICZjb21wX2NvbmQt PnZhbHVlLm9wLm9wMS0+d2hlcmUpOwpAQCAtNzc4MSwxNCArNzc4Niw2IEBAIHJlc29sdmVf b21wX2F0b21pYyAoZ2ZjX2NvZGUgKmNvZGUpCiAgICAgICBicmVhazsKICAgICB9CiAKLSAg aWYgKGF0b21pY19jb2RlLT5leHQub21wX2NsYXVzZXMtPmNvbXBhcmUKLSAgICAgICYmICFh dG9taWNfY29kZS0+ZXh0Lm9tcF9jbGF1c2VzLT5jYXB0dXJlKQotICAgIHsKLSAgICAgIGdm Y19lcnJvciAoIlNvcnJ5LCBDT01QQVJFIGNsYXVzZSBpbiBBVE9NSUMgYXQgJUwgaXMgbm90 IHlldCAiCi0JCSAic3VwcG9ydGVkIiwgJmF0b21pY19jb2RlLT5sb2MpOwotICAgICAgcmV0 dXJuOwotICAgIH0KLQogICBpZiAoYXRvbWljX2NvZGUtPmV4dC5vbXBfY2xhdXNlcy0+Y2Fw dHVyZSkKICAgICB7CiAgICAgICBpZiAoIWlzX3NjYWxhcl9pbnRyaW5zaWNfZXhwciAoY2Fw dHVyZV9zdG10LT5leHByMSwgdHJ1ZSwgZmFsc2UpKQpAQCAtNzgxOCw4ICs3ODE1LDMxIEBA IHJlc29sdmVfb21wX2F0b21pYyAoZ2ZjX2NvZGUgKmNvZGUpCiAJfQogICAgIH0KIAotICBp ZiAoYXRvbWljX2NvZGUtPmV4dC5vbXBfY2xhdXNlcy0+Y2FwdHVyZQotICAgICAgJiYgIWV4 cHJfcmVmZXJlbmNlc19zeW0gKHN0bXRfZXhwcjIsIHZhciwgTlVMTCkpCisgIGlmIChhdG9t aWNfY29kZS0+ZXh0Lm9tcF9jbGF1c2VzLT5jb21wYXJlKQorICAgIHsKKyAgICAgIGdmY19l eHByICp2YXJfZXhwcjsKKyAgICAgIGlmIChjb21wX2NvbmQtPnZhbHVlLm9wLm9wMS0+ZXhw cl90eXBlID09IEVYUFJfVkFSSUFCTEUpCisJdmFyX2V4cHIgPSBjb21wX2NvbmQtPnZhbHVl Lm9wLm9wMTsKKyAgICAgIGVsc2UKKwl2YXJfZXhwciA9IGNvbXBfY29uZC0+dmFsdWUub3Au b3AxLT52YWx1ZS5mdW5jdGlvbi5hY3R1YWwtPmV4cHI7CisgICAgICBpZiAodmFyX2V4cHIt PnN5bXRyZWUtPm4uc3ltICE9IHZhcikKKwl7CisJICBnZmNfZXJyb3IgKCJGb3IgISRPTVAg QVRPTUlDIENPTVBBUkUsIHRoZSBmaXJzdCBvcGVyYW5kIGluIGNvbXBhcmlzb24iCisJCSAg ICAgIiBhdCAlTCBtdXN0IGJlIHRoZSB2YXJpYWJsZSAlcXMgdGhhdCB0aGUgdXBkYXRlIHN0 YXRlbWVudCIKKwkJICAgICAiIHdyaXRlcyBpbnRvIGF0ICVMIiwgJnZhcl9leHByLT53aGVy ZSwgdmFyLT5uYW1lLAorCQkgICAgICZzdG10LT5leHByMS0+d2hlcmUpOworCSAgcmV0dXJu OworCX0KKyAgICAgIGlmIChzdG10X2V4cHIyLT5yYW5rICE9IDAgfHwgZXhwcl9yZWZlcmVu Y2VzX3N5bSAoc3RtdF9leHByMiwgdmFyLCBOVUxMKSkKKwl7CisJICBnZmNfZXJyb3IgKCJl eHByIGluICEkT01QIEFUT01JQyBDT01QQVJFIGFzc2lnbm1lbnQgdmFyID0gZXhwciAiCisJ CSAgICAgIm11c3QgYmUgc2NhbGFyIGFuZCBjYW5ub3QgcmVmZXJlbmNlIHZhciBhdCAlTCIs CisJCSAgICAgJnN0bXRfZXhwcjItPndoZXJlKTsKKwkgIHJldHVybjsKKwl9CisgICAgfQor ICBlbHNlIGlmIChhdG9taWNfY29kZS0+ZXh0Lm9tcF9jbGF1c2VzLT5jYXB0dXJlCisJICAg JiYgIWV4cHJfcmVmZXJlbmNlc19zeW0gKHN0bXRfZXhwcjIsIHZhciwgTlVMTCkpCiAgICAg YXRvbWljX2NvZGUtPmV4dC5vbXBfY2xhdXNlcy0+YXRvbWljX29wCiAgICAgICA9IChnZmNf b21wX2F0b21pY19vcCkgKGF0b21pY19jb2RlLT5leHQub21wX2NsYXVzZXMtPmF0b21pY19v cAogCQkJICAgICB8IEdGQ19PTVBfQVRPTUlDX1NXQVApOwpAQCAtNzgyOSw4ICs3ODQ5LDcg QEAgcmVzb2x2ZV9vbXBfYXRvbWljIChnZmNfY29kZSAqY29kZSkKICAgICAgIGdmY19pbnRy aW5zaWNfb3Agb3AgPSBzdG10X2V4cHIyLT52YWx1ZS5vcC5vcDsKICAgICAgIGdmY19pbnRy aW5zaWNfb3AgYWx0X29wID0gSU5UUklOU0lDX05PTkU7CiAKLSAgICAgIGlmIChhdG9taWNf Y29kZS0+ZXh0Lm9tcF9jbGF1c2VzLT5mYWlsICE9IE9NUF9NRU1PUkRFUl9VTlNFVAotCSAg JiYgIWF0b21pY19jb2RlLT5leHQub21wX2NsYXVzZXMtPmNvbXBhcmUpCisgICAgICBpZiAo YXRvbWljX2NvZGUtPmV4dC5vbXBfY2xhdXNlcy0+ZmFpbCAhPSBPTVBfTUVNT1JERVJfVU5T RVQpCiAJZ2ZjX2Vycm9yICgiISRPTVAgQVRPTUlDIFVQREFURSBhdCAlTCB3aXRoIEZBSUwg Y2xhdXNlIHJlcXVpcmllcyBlaXRoZXIiCiAJCSAgICIgdGhlIENPTVBBUkUgY2xhdXNlIG9y IHVzaW5nIHRoZSBpbnRyaW5zaWMgTUlOL01BWCAiCiAJCSAgICJwcm9jZWR1cmUiLCAmYXRv bWljX2NvZGUtPmxvYyk7CkBAIC04MDQyLDEwICs4MDYxLDYgQEAgcmVzb2x2ZV9vbXBfYXRv bWljIChnZmNfY29kZSAqY29kZSkKICAgZWxzZQogICAgIGdmY19lcnJvciAoIiEkT01QIEFU T01JQyBhc3NpZ25tZW50IG11c3QgaGF2ZSBhbiBvcGVyYXRvciBvciAiCiAJICAgICAgICJp bnRyaW5zaWMgb24gcmlnaHQgaGFuZCBzaWRlIGF0ICVMIiwgJnN0bXRfZXhwcjItPndoZXJl KTsKLQotICBpZiAoYXRvbWljX2NvZGUtPmV4dC5vbXBfY2xhdXNlcy0+Y29tcGFyZSkKLSAg ICBnZmNfZXJyb3IgKCJTb3JyeSwgQ09NUEFSRSBjbGF1c2UgaW4gQVRPTUlDIGF0ICVMIGlz IG5vdCB5ZXQgIgotCSAgICAgICAic3VwcG9ydGVkIiwgJmF0b21pY19jb2RlLT5sb2MpOwog ICByZXR1cm47CiAKIHVuZXhwZWN0ZWQ6CmRpZmYgLS1naXQgYS9nY2MvZm9ydHJhbi90cmFu cy1vcGVubXAuYyBiL2djYy9mb3J0cmFuL3RyYW5zLW9wZW5tcC5jCmluZGV4IGQ4MjI5YTVh YzMwLi5hYTBiMGE1YWY3MyAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vdHJhbnMtb3Blbm1w LmMKKysrIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtb3Blbm1wLmMKQEAgLTQ0ODgsMTMgKzQ0ODgs MTMgQEAgZ2ZjX3RyYW5zX29tcF9hdG9taWMgKGdmY19jb2RlICpjb2RlKQogICBnZmNfc2Ug bHNlOwogICBnZmNfc2UgcnNlOwogICBnZmNfc2UgdnNlOwotICBnZmNfZXhwciAqZXhwcjIs ICplOworICBnZmNfZXhwciAqZXhwcjEsICpleHByMiwgKmUsICpjYXB0dXJlX2V4cHIxID0g TlVMTCwgKmNhcHR1cmVfZXhwcjIgPSBOVUxMOwogICBnZmNfc3ltYm9sICp2YXI7CiAgIHN0 bXRibG9ja190IGJsb2NrOwotICB0cmVlIGxoc2FkZHIsIHR5cGUsIHJocywgeDsKKyAgdHJl ZSBsaHNhZGRyLCB0eXBlLCByaHMsIHgsIGNvbXBhcmUgPSBOVUxMX1RSRUUsIGNvbXBfdGd0 ID0gTlVMTF9UUkVFOwogICBlbnVtIHRyZWVfY29kZSBvcCA9IEVSUk9SX01BUks7CiAgIGVu dW0gdHJlZV9jb2RlIGFvcCA9IE9NUF9BVE9NSUM7Ci0gIGJvb2wgdmFyX29uX2xlZnQgPSBm YWxzZTsKKyAgYm9vbCB2YXJfb25fbGVmdCA9IGZhbHNlLCBlbHNlX2JyYW5jaCA9IGZhbHNl OwogICBlbnVtIG9tcF9tZW1vcnlfb3JkZXIgbW8sIGZhaWxfbW87CiAgIHN3aXRjaCAoYXRv bWljX2NvZGUtPmV4dC5vbXBfY2xhdXNlcy0+bWVtb3JkZXIpCiAgICAgewpAQCAtNDUxNCwx OCArNDUxNCw4NiBAQCBnZmNfdHJhbnNfb21wX2F0b21pYyAoZ2ZjX2NvZGUgKmNvZGUpCiAg ICAgY2FzZSBPTVBfTUVNT1JERVJfU0VRX0NTVDogZmFpbF9tbyA9IE9NUF9GQUlMX01FTU9S WV9PUkRFUl9TRVFfQ1NUOyBicmVhazsKICAgICBkZWZhdWx0OiBnY2NfdW5yZWFjaGFibGUg KCk7CiAgICAgfQotICAgbW8gPSAob21wX21lbW9yeV9vcmRlcikgKG1vIHwgZmFpbF9tbyk7 CisgIG1vID0gKG9tcF9tZW1vcnlfb3JkZXIpIChtbyB8IGZhaWxfbW8pOwogCiAgIGNvZGUg PSBjb2RlLT5ibG9jay0+bmV4dDsKLSAgZ2NjX2Fzc2VydCAoY29kZS0+b3AgPT0gRVhFQ19B U1NJR04pOwotICB2YXIgPSBjb2RlLT5leHByMS0+c3ltdHJlZS0+bi5zeW07CisgIGlmIChh dG9taWNfY29kZS0+ZXh0Lm9tcF9jbGF1c2VzLT5jb21wYXJlKQorICAgIHsKKyAgICAgIGdm Y19leHByICpjb21wX2V4cHI7CisgICAgICBpZiAoY29kZS0+b3AgPT0gRVhFQ19JRikKKwl7 CisJICBjb21wX2V4cHIgPSBjb2RlLT5ibG9jay0+ZXhwcjE7CisJICBnY2NfYXNzZXJ0IChj b2RlLT5ibG9jay0+bmV4dC0+b3AgPT0gRVhFQ19BU1NJR04pOworCSAgZXhwcjEgPSBjb2Rl LT5ibG9jay0+bmV4dC0+ZXhwcjE7CisJICBleHByMiA9IGNvZGUtPmJsb2NrLT5uZXh0LT5l eHByMjsKKwkgIGlmIChjb2RlLT5ibG9jay0+YmxvY2spCisJICAgIHsKKwkgICAgICBnY2Nf YXNzZXJ0IChhdG9taWNfY29kZS0+ZXh0Lm9tcF9jbGF1c2VzLT5jYXB0dXJlCisJCQkgICYm IGNvZGUtPmJsb2NrLT5ibG9jay0+bmV4dC0+b3AgPT0gRVhFQ19BU1NJR04pOworCSAgICAg IGVsc2VfYnJhbmNoID0gdHJ1ZTsKKwkgICAgICBhb3AgPSBPTVBfQVRPTUlDX0NBUFRVUkVf T0xEOworCSAgICAgIGNhcHR1cmVfZXhwcjEgPSBjb2RlLT5ibG9jay0+YmxvY2stPm5leHQt PmV4cHIxOworCSAgICAgIGNhcHR1cmVfZXhwcjIgPSBjb2RlLT5ibG9jay0+YmxvY2stPm5l eHQtPmV4cHIyOworCSAgICB9CisJICBlbHNlIGlmIChhdG9taWNfY29kZS0+ZXh0Lm9tcF9j bGF1c2VzLT5jYXB0dXJlKQorCSAgICB7CisJICAgICAgZ2NjX2Fzc2VydCAoY29kZS0+bmV4 dC0+b3AgPT0gRVhFQ19BU1NJR04pOworCSAgICAgIGFvcCA9IE9NUF9BVE9NSUNfQ0FQVFVS RV9ORVc7CisJICAgICAgY2FwdHVyZV9leHByMSA9IGNvZGUtPm5leHQtPmV4cHIxOworCSAg ICAgIGNhcHR1cmVfZXhwcjIgPSBjb2RlLT5uZXh0LT5leHByMjsKKwkgICAgfQorCX0KKyAg ICAgIGVsc2UKKwl7CisJICBnY2NfYXNzZXJ0IChhdG9taWNfY29kZS0+ZXh0Lm9tcF9jbGF1 c2VzLT5jYXB0dXJlCisJCSAgICAgICYmIGNvZGUtPm9wID09IEVYRUNfQVNTSUdOCisJCSAg ICAgICYmIGNvZGUtPm5leHQtPm9wID09IEVYRUNfSUYpOworCSAgYW9wID0gT01QX0FUT01J Q19DQVBUVVJFX09MRDsKKwkgIGNhcHR1cmVfZXhwcjEgPSBjb2RlLT5leHByMTsKKwkgIGNh cHR1cmVfZXhwcjIgPSBjb2RlLT5leHByMjsKKwkgIGV4cHIxID0gY29kZS0+bmV4dC0+Ymxv Y2stPm5leHQtPmV4cHIxOworCSAgZXhwcjIgPSBjb2RlLT5uZXh0LT5ibG9jay0+bmV4dC0+ ZXhwcjI7CisJICBjb21wX2V4cHIgPSBjb2RlLT5uZXh0LT5ibG9jay0+ZXhwcjE7CisJfQor ICAgICAgZ2ZjX2luaXRfc2UgKCZsc2UsIE5VTEwpOworICAgICAgZ2ZjX2NvbnZfZXhwciAo JmxzZSwgY29tcF9leHByLT52YWx1ZS5vcC5vcDIpOworICAgICAgZ2ZjX2FkZF9ibG9ja190 b19ibG9jayAoJmJsb2NrLCAmbHNlLnByZSk7CisgICAgICBjb21wYXJlID0gbHNlLmV4cHI7 CisgICAgICB2YXIgPSBleHByMS0+c3ltdHJlZS0+bi5zeW07CisgICAgfQorICBlbHNlCisg ICAgeworICAgICAgZ2NjX2Fzc2VydCAoY29kZS0+b3AgPT0gRVhFQ19BU1NJR04pOworICAg ICAgZXhwcjEgPSBjb2RlLT5leHByMTsKKyAgICAgIGV4cHIyID0gY29kZS0+ZXhwcjI7Cisg ICAgICBpZiAoYXRvbWljX2NvZGUtPmV4dC5vbXBfY2xhdXNlcy0+Y2FwdHVyZQorCSAgJiYg KGV4cHIyLT5leHByX3R5cGUgPT0gRVhQUl9WQVJJQUJMRQorCSAgICAgIHx8IChleHByMi0+ ZXhwcl90eXBlID09IEVYUFJfRlVOQ1RJT04KKwkJICAmJiBleHByMi0+dmFsdWUuZnVuY3Rp b24uaXN5bQorCQkgICYmIGV4cHIyLT52YWx1ZS5mdW5jdGlvbi5pc3ltLT5pZCA9PSBHRkNf SVNZTV9DT05WRVJTSU9OCisJCSAgJiYgKGV4cHIyLT52YWx1ZS5mdW5jdGlvbi5hY3R1YWwt PmV4cHItPmV4cHJfdHlwZQorCQkgICAgICA9PSBFWFBSX1ZBUklBQkxFKSkpKQorCXsKKwkg IGNhcHR1cmVfZXhwcjEgPSBleHByMTsKKwkgIGNhcHR1cmVfZXhwcjIgPSBleHByMjsKKwkg IGV4cHIxID0gY29kZS0+bmV4dC0+ZXhwcjE7CisJICBleHByMiA9IGNvZGUtPm5leHQtPmV4 cHIyOworCSAgYW9wID0gT01QX0FUT01JQ19DQVBUVVJFX09MRDsKKwl9CisgICAgICBlbHNl IGlmIChhdG9taWNfY29kZS0+ZXh0Lm9tcF9jbGF1c2VzLT5jYXB0dXJlKQorCXsKKwkgIGFv cCA9IE9NUF9BVE9NSUNfQ0FQVFVSRV9ORVc7CisJICBjYXB0dXJlX2V4cHIxID0gY29kZS0+ bmV4dC0+ZXhwcjE7CisJICBjYXB0dXJlX2V4cHIyID0gY29kZS0+bmV4dC0+ZXhwcjI7CisJ fQorICAgICAgdmFyID0gZXhwcjEtPnN5bXRyZWUtPm4uc3ltOworICAgIH0KIAogICBnZmNf aW5pdF9zZSAoJmxzZSwgTlVMTCk7CiAgIGdmY19pbml0X3NlICgmcnNlLCBOVUxMKTsKICAg Z2ZjX2luaXRfc2UgKCZ2c2UsIE5VTEwpOwogICBnZmNfc3RhcnRfYmxvY2sgKCZibG9jayk7 CiAKLSAgZXhwcjIgPSBjb2RlLT5leHByMjsKICAgaWYgKCgoYXRvbWljX2NvZGUtPmV4dC5v bXBfY2xhdXNlcy0+YXRvbWljX29wICYgR0ZDX09NUF9BVE9NSUNfTUFTSykKICAgICAgICAh PSBHRkNfT01QX0FUT01JQ19XUklURSkKICAgICAgICYmIGV4cHIyLT5leHByX3R5cGUgPT0g RVhQUl9GVU5DVElPTgpAQCAtNDUzNiw3ICs0NjA0LDcgQEAgZ2ZjX3RyYW5zX29tcF9hdG9t aWMgKGdmY19jb2RlICpjb2RlKQogICBpZiAoKGF0b21pY19jb2RlLT5leHQub21wX2NsYXVz ZXMtPmF0b21pY19vcCAmIEdGQ19PTVBfQVRPTUlDX01BU0spCiAgICAgICA9PSBHRkNfT01Q X0FUT01JQ19SRUFEKQogICAgIHsKLSAgICAgIGdmY19jb252X2V4cHIgKCZ2c2UsIGNvZGUt PmV4cHIxKTsKKyAgICAgIGdmY19jb252X2V4cHIgKCZ2c2UsIGV4cHIxKTsKICAgICAgIGdm Y19hZGRfYmxvY2tfdG9fYmxvY2sgKCZibG9jaywgJnZzZS5wcmUpOwogCiAgICAgICBnZmNf Y29udl9leHByICgmbHNlLCBleHByMik7CkBAIC00NTU0LDM2ICs0NjIyLDMyIEBAIGdmY190 cmFuc19vbXBfYXRvbWljIChnZmNfY29kZSAqY29kZSkKIAogICAgICAgcmV0dXJuIGdmY19m aW5pc2hfYmxvY2sgKCZibG9jayk7CiAgICAgfQotICBpZiAoYXRvbWljX2NvZGUtPmV4dC5v bXBfY2xhdXNlcy0+Y2FwdHVyZSkKKworICBpZiAoY2FwdHVyZV9leHByMgorICAgICAgJiYg Y2FwdHVyZV9leHByMi0+ZXhwcl90eXBlID09IEVYUFJfRlVOQ1RJT04KKyAgICAgICYmIGNh cHR1cmVfZXhwcjItPnZhbHVlLmZ1bmN0aW9uLmlzeW0KKyAgICAgICYmIGNhcHR1cmVfZXhw cjItPnZhbHVlLmZ1bmN0aW9uLmlzeW0tPmlkID09IEdGQ19JU1lNX0NPTlZFUlNJT04pCisg ICAgY2FwdHVyZV9leHByMiA9IGNhcHR1cmVfZXhwcjItPnZhbHVlLmZ1bmN0aW9uLmFjdHVh bC0+ZXhwcjsKKyAgZ2NjX2Fzc2VydCAoIWNhcHR1cmVfZXhwcjIgfHwgY2FwdHVyZV9leHBy Mi0+ZXhwcl90eXBlID09IEVYUFJfVkFSSUFCTEUpOworCisgIGlmIChhb3AgPT0gT01QX0FU T01JQ19DQVBUVVJFX09MRCkKICAgICB7Ci0gICAgICBhb3AgPSBPTVBfQVRPTUlDX0NBUFRV UkVfTkVXOwotICAgICAgaWYgKGV4cHIyLT5leHByX3R5cGUgPT0gRVhQUl9WQVJJQUJMRSkK LQl7Ci0JICBhb3AgPSBPTVBfQVRPTUlDX0NBUFRVUkVfT0xEOwotCSAgZ2ZjX2NvbnZfZXhw ciAoJnZzZSwgY29kZS0+ZXhwcjEpOwotCSAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJmJs b2NrLCAmdnNlLnByZSk7Ci0KLQkgIGdmY19jb252X2V4cHIgKCZsc2UsIGV4cHIyKTsKLQkg IGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZibG9jaywgJmxzZS5wcmUpOwotCSAgZ2ZjX2lu aXRfc2UgKCZsc2UsIE5VTEwpOwotCSAgY29kZSA9IGNvZGUtPm5leHQ7Ci0JICB2YXIgPSBj b2RlLT5leHByMS0+c3ltdHJlZS0+bi5zeW07Ci0JICBleHByMiA9IGNvZGUtPmV4cHIyOwot CSAgaWYgKGV4cHIyLT5leHByX3R5cGUgPT0gRVhQUl9GVU5DVElPTgotCSAgICAgICYmIGV4 cHIyLT52YWx1ZS5mdW5jdGlvbi5pc3ltCi0JICAgICAgJiYgZXhwcjItPnZhbHVlLmZ1bmN0 aW9uLmlzeW0tPmlkID09IEdGQ19JU1lNX0NPTlZFUlNJT04pCi0JICAgIGV4cHIyID0gZXhw cjItPnZhbHVlLmZ1bmN0aW9uLmFjdHVhbC0+ZXhwcjsKLQl9CisgICAgICBnZmNfY29udl9l eHByICgmdnNlLCBjYXB0dXJlX2V4cHIxKTsKKyAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxv Y2sgKCZibG9jaywgJnZzZS5wcmUpOworICAgICAgZ2ZjX2NvbnZfZXhwciAoJmxzZSwgY2Fw dHVyZV9leHByMik7CisgICAgICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmYmxvY2ssICZs c2UucHJlKTsKKyAgICAgIGdmY19pbml0X3NlICgmbHNlLCBOVUxMKTsKICAgICB9CiAKLSAg Z2ZjX2NvbnZfZXhwciAoJmxzZSwgY29kZS0+ZXhwcjEpOworICBnZmNfY29udl9leHByICgm bHNlLCBleHByMSk7CiAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZibG9jaywgJmxzZS5w cmUpOwogICB0eXBlID0gVFJFRV9UWVBFIChsc2UuZXhwcik7CiAgIGxoc2FkZHIgPSBnZmNf YnVpbGRfYWRkcl9leHByIChOVUxMLCBsc2UuZXhwcik7CiAKICAgaWYgKCgoYXRvbWljX2Nv ZGUtPmV4dC5vbXBfY2xhdXNlcy0+YXRvbWljX29wICYgR0ZDX09NUF9BVE9NSUNfTUFTSykK ICAgICAgICA9PSBHRkNfT01QX0FUT01JQ19XUklURSkKLSAgICAgIHx8IChhdG9taWNfY29k ZS0+ZXh0Lm9tcF9jbGF1c2VzLT5hdG9taWNfb3AgJiBHRkNfT01QX0FUT01JQ19TV0FQKSkK KyAgICAgIHx8IChhdG9taWNfY29kZS0+ZXh0Lm9tcF9jbGF1c2VzLT5hdG9taWNfb3AgJiBH RkNfT01QX0FUT01JQ19TV0FQKQorICAgICAgfHwgY29tcGFyZSkKICAgICB7CiAgICAgICBn ZmNfY29udl9leHByICgmcnNlLCBleHByMik7CiAgICAgICBnZmNfYWRkX2Jsb2NrX3RvX2Js b2NrICgmYmxvY2ssICZyc2UucHJlKTsKQEAgLTQ2NzUsNiArNDczOSwxMCBAQCBnZmNfdHJh bnNfb21wX2F0b21pYyAoZ2ZjX2NvZGUgKmNvZGUpCiAJICBnY2NfdW5yZWFjaGFibGUgKCk7 CiAJfQogICAgICAgZSA9IGV4cHIyLT52YWx1ZS5mdW5jdGlvbi5hY3R1YWwtPmV4cHI7Cisg ICAgICBpZiAoZS0+ZXhwcl90eXBlID09IEVYUFJfRlVOQ1RJT04KKwkgICYmIGUtPnZhbHVl LmZ1bmN0aW9uLmlzeW0KKwkgICYmIGUtPnZhbHVlLmZ1bmN0aW9uLmlzeW0tPmlkID09IEdG Q19JU1lNX0NPTlZFUlNJT04pCisJZSA9IGUtPnZhbHVlLmZ1bmN0aW9uLmFjdHVhbC0+ZXhw cjsKICAgICAgIGdjY19hc3NlcnQgKGUtPmV4cHJfdHlwZSA9PSBFWFBSX1ZBUklBQkxFCiAJ CSAgJiYgZS0+c3ltdHJlZSAhPSBOVUxMCiAJCSAgJiYgZS0+c3ltdHJlZS0+bi5zeW0gPT0g dmFyKTsKQEAgLTQ3MTcsMTEgKzQ3ODUsMjcgQEAgZ2ZjX3RyYW5zX29tcF9hdG9taWMgKGdm Y19jb2RlICpjb2RlKQogCQkJTlVMTF9UUkVFLCBOVUxMX1RSRUUpOwogICAgIH0KIAotICBy aHMgPSBnZmNfZXZhbHVhdGVfbm93IChyc2UuZXhwciwgJmJsb2NrKTsKKyAgaWYgKGNvbXBh cmUpCisgICAgeworICAgICAgdHJlZSB2YXIgPSBjcmVhdGVfdG1wX3Zhcl9yYXcgKFRSRUVf VFlQRSAobGhzYWRkcikpOworICAgICAgREVDTF9DT05URVhUICh2YXIpID0gY3VycmVudF9m dW5jdGlvbl9kZWNsOworICAgICAgbGhzYWRkciA9IGJ1aWxkNCAoVEFSR0VUX0VYUFIsIFRS RUVfVFlQRSAobGhzYWRkciksIHZhciwgbGhzYWRkciwgTlVMTCwKKwkJCU5VTEwpOworICAg ICAgbHNlLmV4cHIgPSBidWlsZF9mb2xkX2luZGlyZWN0X3JlZl9sb2MgKGlucHV0X2xvY2F0 aW9uLCBsaHNhZGRyKTsKKyAgICAgIGNvbXBhcmUgPSBjb252ZXJ0IChUUkVFX1RZUEUgKGxz ZS5leHByKSwgY29tcGFyZSk7CisgICAgICBjb21wYXJlID0gZm9sZF9idWlsZDJfbG9jIChp bnB1dF9sb2NhdGlvbiwgRVFfRVhQUiwgYm9vbGVhbl90eXBlX25vZGUsCisJCQkJIGxzZS5l eHByLCBjb21wYXJlKTsKKyAgICB9CisKKyAgaWYgKGV4cHIyLT5leHByX3R5cGUgPT0gRVhQ Ul9WQVJJQUJMRSB8fCBjb21wYXJlKQorICAgIHJocyA9IHJzZS5leHByOworICBlbHNlCisg ICAgcmhzID0gZ2ZjX2V2YWx1YXRlX25vdyAocnNlLmV4cHIsICZibG9jayk7CiAKICAgaWYg KCgoYXRvbWljX2NvZGUtPmV4dC5vbXBfY2xhdXNlcy0+YXRvbWljX29wICYgR0ZDX09NUF9B VE9NSUNfTUFTSykKICAgICAgICA9PSBHRkNfT01QX0FUT01JQ19XUklURSkKLSAgICAgIHx8 IChhdG9taWNfY29kZS0+ZXh0Lm9tcF9jbGF1c2VzLT5hdG9taWNfb3AgJiBHRkNfT01QX0FU T01JQ19TV0FQKSkKKyAgICAgIHx8IChhdG9taWNfY29kZS0+ZXh0Lm9tcF9jbGF1c2VzLT5h dG9taWNfb3AgJiBHRkNfT01QX0FUT01JQ19TV0FQKQorICAgICAgfHwgY29tcGFyZSkKICAg ICB4ID0gcmhzOwogICBlbHNlCiAgICAgewpAQCAtNDc0MSw2ICs0ODI1LDMwIEBAIGdmY190 cmFuc19vbXBfYXRvbWljIChnZmNfY29kZSAqY29kZSkKICAgZ2ZjX2FkZF9ibG9ja190b19i bG9jayAoJmJsb2NrLCAmbHNlLnByZSk7CiAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZi bG9jaywgJnJzZS5wcmUpOwogCisgIGlmIChhb3AgPT0gT01QX0FUT01JQ19DQVBUVVJFX05F VykKKyAgICB7CisgICAgICBnZmNfY29udl9leHByICgmdnNlLCBjYXB0dXJlX2V4cHIxKTsK KyAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZibG9jaywgJnZzZS5wcmUpOworICAg ICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJmJsb2NrLCAmbHNlLnByZSk7CisgICAgfQor CisgIGlmIChjb21wYXJlICYmIGVsc2VfYnJhbmNoKQorICAgIHsKKyAgICAgIHRyZWUgdmFy MiA9IGNyZWF0ZV90bXBfdmFyX3JhdyAoYm9vbGVhbl90eXBlX25vZGUpOworICAgICAgREVD TF9DT05URVhUICh2YXIyKSA9IGN1cnJlbnRfZnVuY3Rpb25fZGVjbDsKKyAgICAgIGNvbXBf dGd0ID0gYnVpbGQ0IChUQVJHRVRfRVhQUiwgYm9vbGVhbl90eXBlX25vZGUsIHZhcjIsCisJ CQkgYm9vbGVhbl9mYWxzZV9ub2RlLCBOVUxMLCBOVUxMKTsKKyAgICAgIGNvbXBhcmUgPSBm b2xkX2J1aWxkMl9sb2MgKGlucHV0X2xvY2F0aW9uLCBNT0RJRllfRVhQUiwgVFJFRV9UWVBF ICh2YXIyKSwKKwkJCQkgdmFyMiwgY29tcGFyZSk7CisgICAgICBUUkVFX09QRVJBTkQgKGNv bXBhcmUsIDApID0gY29tcF90Z3Q7CisgICAgICBjb21wYXJlID0gb21pdF9vbmVfb3BlcmFu ZF9sb2MgKGlucHV0X2xvY2F0aW9uLCBib29sZWFuX3R5cGVfbm9kZSwKKwkJCQkgICAgICBj b21wYXJlLCBjb21wX3RndCk7CisgICAgfQorCisgIGlmIChjb21wYXJlKQorICAgIHggPSBi dWlsZDNfbG9jIChpbnB1dF9sb2NhdGlvbiwgQ09ORF9FWFBSLCB0eXBlLCBjb21wYXJlLAor CQkgICAgY29udmVydCAodHlwZSwgeCksIGxzZS5leHByKTsKKwogICBpZiAoYW9wID09IE9N UF9BVE9NSUMpCiAgICAgewogICAgICAgeCA9IGJ1aWxkMl92IChPTVBfQVRPTUlDLCBsaHNh ZGRyLCBjb252ZXJ0ICh0eXBlLCB4KSk7CkBAIC00NzUwLDI4ICs0ODU4LDMxIEBAIGdmY190 cmFuc19vbXBfYXRvbWljIChnZmNfY29kZSAqY29kZSkKICAgICB9CiAgIGVsc2UKICAgICB7 Ci0gICAgICBpZiAoYW9wID09IE9NUF9BVE9NSUNfQ0FQVFVSRV9ORVcpCi0JewotCSAgY29k ZSA9IGNvZGUtPm5leHQ7Ci0JICBleHByMiA9IGNvZGUtPmV4cHIyOwotCSAgaWYgKGV4cHIy LT5leHByX3R5cGUgPT0gRVhQUl9GVU5DVElPTgotCSAgICAgICYmIGV4cHIyLT52YWx1ZS5m dW5jdGlvbi5pc3ltCi0JICAgICAgJiYgZXhwcjItPnZhbHVlLmZ1bmN0aW9uLmlzeW0tPmlk ID09IEdGQ19JU1lNX0NPTlZFUlNJT04pCi0JICAgIGV4cHIyID0gZXhwcjItPnZhbHVlLmZ1 bmN0aW9uLmFjdHVhbC0+ZXhwcjsKLQotCSAgZ2NjX2Fzc2VydCAoZXhwcjItPmV4cHJfdHlw ZSA9PSBFWFBSX1ZBUklBQkxFKTsKLQkgIGdmY19jb252X2V4cHIgKCZ2c2UsIGNvZGUtPmV4 cHIxKTsKLQkgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZibG9jaywgJnZzZS5wcmUpOwot Ci0JICBnZmNfaW5pdF9zZSAoJmxzZSwgTlVMTCk7Ci0JICBnZmNfY29udl9leHByICgmbHNl LCBleHByMik7Ci0JICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmYmxvY2ssICZsc2UucHJl KTsKLQl9CiAgICAgICB4ID0gYnVpbGQyIChhb3AsIHR5cGUsIGxoc2FkZHIsIGNvbnZlcnQg KHR5cGUsIHgpKTsKICAgICAgIE9NUF9BVE9NSUNfTUVNT1JZX09SREVSICh4KSA9IG1vOwog ICAgICAgT01QX0FUT01JQ19XRUFLICh4KSA9IGF0b21pY19jb2RlLT5leHQub21wX2NsYXVz ZXMtPndlYWs7Ci0gICAgICB4ID0gY29udmVydCAoVFJFRV9UWVBFICh2c2UuZXhwciksIHgp OwotICAgICAgZ2ZjX2FkZF9tb2RpZnkgKCZibG9jaywgdnNlLmV4cHIsIHgpOworICAgICAg aWYgKGNvbXBhcmUgJiYgZWxzZV9icmFuY2gpCisJeworCSAgdHJlZSB2dG1wID0gY3JlYXRl X3RtcF92YXJfcmF3IChUUkVFX1RZUEUgKHgpKTsKKwkgIERFQ0xfQ09OVEVYVCAodnRtcCkg PSBjdXJyZW50X2Z1bmN0aW9uX2RlY2w7CisJICB4ID0gZm9sZF9idWlsZDJfbG9jIChpbnB1 dF9sb2NhdGlvbiwgTU9ESUZZX0VYUFIsCisJCQkgICAgICAgVFJFRV9UWVBFICh2dG1wKSwg dnRtcCwgeCk7CisJICB2dG1wID0gYnVpbGQ0IChUQVJHRVRfRVhQUiwgVFJFRV9UWVBFICh2 dG1wKSwgdnRtcCwKKwkJCSBidWlsZF96ZXJvX2NzdCAoVFJFRV9UWVBFICh2dG1wKSksIE5V TEwsIE5VTEwpOworCSAgVFJFRV9PUEVSQU5EICh4LCAwKSA9IHZ0bXA7CisJICB0cmVlIHgy ID0gY29udmVydCAoVFJFRV9UWVBFICh2c2UuZXhwciksIHZ0bXApOworCSAgeDIgPSBmb2xk X2J1aWxkMl9sb2MgKGlucHV0X2xvY2F0aW9uLCBNT0RJRllfRVhQUiwKKwkJCSAgICAgICBU UkVFX1RZUEUgKHZzZS5leHByKSwgdnNlLmV4cHIsIHgyKTsKKwkgIHgyID0gYnVpbGQzX2xv YyAoaW5wdXRfbG9jYXRpb24sIENPTkRfRVhQUiwgdm9pZF90eXBlX25vZGUsIGNvbXBfdGd0 LAorCQkJICAgdm9pZF9ub2RlLCB4Mik7CisJICB4ID0gb21pdF9vbmVfb3BlcmFuZF9sb2Mg KGlucHV0X2xvY2F0aW9uLCBUUkVFX1RZUEUgKHgyKSwgeDIsIHgpOworCSAgZ2ZjX2FkZF9l eHByX3RvX2Jsb2NrICgmYmxvY2ssIHgpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICB4ID0g Y29udmVydCAoVFJFRV9UWVBFICh2c2UuZXhwciksIHgpOworCSAgZ2ZjX2FkZF9tb2RpZnkg KCZibG9jaywgdnNlLmV4cHIsIHgpOworCX0KICAgICB9CiAKICAgcmV0dXJuIGdmY19maW5p c2hfYmxvY2sgKCZibG9jayk7CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dmb3J0cmFu LmRnL2dvbXAvYXRvbWljLTIxLmY5MCBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29t cC9hdG9taWMtMjEuZjkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li5mZWJjZGJiYWNmYgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRy YW4uZGcvZ29tcC9hdG9taWMtMjEuZjkwCkBAIC0wLDAgKzEsOTMgQEAKKyEgeyBkZy1kbyBj b21waWxlIH0KKyEgeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1mZHVtcC10cmVlLW9yaWdp bmFsIiB9CisKK21vZHVsZSBtb2QKK2ltcGxpY2l0IG5vbmUKKworaW50ZWdlciBpLCBqLCBr LCBsLCBtLCBuCitjb250YWlucworCitzdWJyb3V0aW5lIGZvbyAoKQorICAhJG9tcCBhdG9t aWMgcmVsZWFzZQorICBpID0gaSArIDEKK2VuZAorZW5kIG1vZHVsZQorCittb2R1bGUgbTIK K3VzZSBtb2QKK2ltcGxpY2l0IG5vbmUKKyEkb21wIHJlcXVpcmVzIGF0b21pY19kZWZhdWx0 X21lbV9vcmRlciAoYWNxX3JlbCkKKworY29udGFpbnMKK3N1YnJvdXRpbmUgYmFyICgpCisg IGludGVnZXIgdgorICAhJG9tcCBhdG9taWMKKyAgaiA9IGogKyAxCisgICEkb21wIGF0b21p YyB1cGRhdGUKKyAgayA9IGsgKyAxCisgICEkb21wIGF0b21pYyByZWFkCisgIHYgPSBsCisg ICEkb21wIGF0b21pYyB3cml0ZQorICBtID0gdgorICAhJG9tcCBhdG9taWMgY2FwdHVyZQor ICBuID0gbiArIDE7IHYgPSBuCitlbmQKKworISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1 bXAtdGltZXMgIiNwcmFnbWEgb21wIGF0b21pYyByZWxlYXNlIiA1ICJvcmlnaW5hbCIgfSB9 CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAidiA9ICNwcmFnbWEgb21w IGF0b21pYyBjYXB0dXJlIGFjcV9yZWwiIDEgIm9yaWdpbmFsIiB9IH0KKyEgeyBkZy1maW5h bCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJ2ID0gI3ByYWdtYSBvbXAgYXRvbWljIHJlYWQg YWNxdWlyZSIgMSAib3JpZ2luYWwiIH0gfQorCitzdWJyb3V0aW5lIGZvb2JhcigpCisgIGlu dGVnZXIgOjogYWEsIGJiLCBjYywgZGQsIGVlLCBmZiwgZ2csIGhoLCBpaSwgamosIGtrLCBu biwgb28sIHBwLCBxcQorCisgICEkb21wIGF0b21pYyBjb21wYXJlCisgICAgaWYgKGlpID09 IGpqKSBpaSA9IGtrCisKKyEgICNwcmFnbWEgb21wIGF0b21pYyByZWxlYXNlCishICAgIFRB UkdFVF9FWFBSIDxELjQyNDEsICZpaT4gPSAqVEFSR0VUX0VYUFIgPEQuNDI0MSwgJmlpPiA9 PSBqaiBcXD8ga2sgOiAqVEFSR0VUX0VYUFIgPEQuNDI0MSwgJmlpPjsKKyEKKyEgeyBkZy1m aW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJUQVJHRVRfRVhQUiA8RC5cWzAtOVxdKywg JmlpPiA9IFxcKlRBUkdFVF9FWFBSIDxELlxbMC05XF0rLCAmaWk+ID09IGpqIFxcPyBrayA6 IFxcKlRBUkdFVF9FWFBSIDxELlxbMC05XF0rLCAmaWk+OyIgMSAib3JpZ2luYWwiIH0gfQor CisgICEkb21wIGF0b21pYyBjb21wYXJlLCBjYXB0dXJlCisgICAgaWYgKG5uID09IG9vKSB0 aGVuCisgICAgICBubiA9IHBwCisgICAgZWxzZQorICAgICAgcXEgPSBubgorICAgIGVuZGlm CisKKyEgIFRBUkdFVF9FWFBSIDxELjQyNDQsIDA+ID0gI3ByYWdtYSBvbXAgYXRvbWljIGNh cHR1cmUgYWNxX3JlbAorISAgICBUQVJHRVRfRVhQUiA8RC40MjQyLCAmbm4+ID0gTk9OX0xW QUxVRV9FWFBSIDxUQVJHRVRfRVhQUiA8RC40MjQzLCAwPiA9ICpUQVJHRVRfRVhQUiA8RC40 MjQyLCAmbm4+ID09IG9vPiA/IHBwIDogKlRBUkdFVF9FWFBSIDxELjQyNDIsICZubj47LCBp ZiAoVEFSR0VUX0VYUFIgPEQuNDI0MywgMD4pCishICAgIHsKKyEgICAgICA8PDwgVW5rbm93 biB0cmVlOiB2b2lkX2NzdCA+Pj4KKyEgICAgfQorISAgZWxzZQorISAgICB7CishICAgICAg cXEgPSBUQVJHRVRfRVhQUiA8RC40MjQ0LCAwPjsKKyEgICAgfTsKKyEKKyEgeyBkZy1maW5h bCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJUQVJHRVRfRVhQUiA8RC5cWzAtOVxdKywgMD4g PSAjcHJhZ21hIG9tcCBhdG9taWMgY2FwdHVyZSBhY3FfcmVsIiAxICJvcmlnaW5hbCIgfSB9 CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiVEFSR0VUX0VYUFIgPEQu XFswLTlcXSssICZubj4gPSBOT05fTFZBTFVFX0VYUFIgPFRBUkdFVF9FWFBSIDxELlxbMC05 XF0rLCAwPiA9IFxcKlRBUkdFVF9FWFBSIDxELlxbMC05XF0rLCAmbm4+ID09IG9vPiBcXD8g cHAgOiBcXCpUQVJHRVRfRVhQUiA8RC5cWzAtOVxdKywgJm5uPjssIGlmIFxcKFRBUkdFVF9F WFBSIDxELlxbMC05XF0rLCAwPlxcKSIgMSAib3JpZ2luYWwiIH0gfQorISB7IGRnLWZpbmFs IHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIjw8PCBVbmtub3duIHRyZWU6IHZvaWRfY3N0ID4+ PiIgMSAib3JpZ2luYWwiIH0gfQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGlt ZXMgInFxID0gVEFSR0VUX0VYUFIgPEQuXFswLTlcXSssIDA+OyIgMSAib3JpZ2luYWwiIH0g fQorCisgICEkb21wIGF0b21pYyBjYXB0dXJlIGNvbXBhcmUKKyAgICBhYSA9IGJiCisgICAg aWYgKGJiID09IGNjKSBiYiA9IGRkCisKKyEgIGFhID0gI3ByYWdtYSBvbXAgYXRvbWljIGNh cHR1cmUgYWNxX3JlbAorISAgICBUQVJHRVRfRVhQUiA8RC40MjQ1LCAmYmI+ID0gKlRBUkdF VF9FWFBSIDxELjQyNDUsICZiYj4gPT0gY2MgPyBkZCA6ICpUQVJHRVRfRVhQUiA8RC40MjQ1 LCAmYmI+OworIQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgImFhID0g I3ByYWdtYSBvbXAgYXRvbWljIGNhcHR1cmUgYWNxX3JlbCIgMSAib3JpZ2luYWwiIH0gfQor ISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIlRBUkdFVF9FWFBSIDxELlxb MC05XF0rLCAmYmI+ID0gXFwqVEFSR0VUX0VYUFIgPEQuXFswLTlcXSssICZiYj4gPT0gY2Mg XFw/IGRkIDogXFwqVEFSR0VUX0VYUFIgPEQuXFswLTlcXSssICZiYj47IiAxICJvcmlnaW5h bCIgfSB9CisKKyAgISRvbXAgYXRvbWljIGNhcHR1cmUgY29tcGFyZQorICAgIGlmIChlZSA9 PSBmZikgZWUgPSBnZworICAgIGhoID0gZWUKKworISAgaGggPSAjcHJhZ21hIG9tcCBhdG9t aWMgY2FwdHVyZSBhY3FfcmVsCishICAgIFRBUkdFVF9FWFBSIDxELjQyNDYsICZlZT4gPSAq VEFSR0VUX0VYUFIgPEQuNDI0NiwgJmVlPiA9PSBmZiA/IGdnIDogKlRBUkdFVF9FWFBSIDxE LjQyNDYsICZlZT47CishCishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAi aGggPSAjcHJhZ21hIG9tcCBhdG9taWMgY2FwdHVyZSBhY3FfcmVsIiAxICJvcmlnaW5hbCIg fSB9CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiVEFSR0VUX0VYUFIg PEQuXFswLTlcXSssICZlZT4gPSBcXCpUQVJHRVRfRVhQUiA8RC5cWzAtOVxdKywgJmVlPiA9 PSBmZiBcXD8gZ2cgOiBcXCpUQVJHRVRfRVhQUiA8RC5cWzAtOVxdKywgJmVlPjsiIDEgIm9y aWdpbmFsIiB9IH0KK2VuZAorZW5kIG1vZHVsZQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0 ZS9nZm9ydHJhbi5kZy9nb21wL2F0b21pYy0yNS5mOTAgYi9nY2MvdGVzdHN1aXRlL2dmb3J0 cmFuLmRnL2dvbXAvYXRvbWljLTI1LmY5MAppbmRleCA1OThmZjRlNTRkYi4uYTUwMWMxZjdi MDQgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29tcC9hdG9taWMt MjUuZjkwCisrKyBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29tcC9hdG9taWMtMjUu ZjkwCkBAIC0xOSwzMSArMTksMzEgQEAgc3Vicm91dGluZSBmb28gKHksIGUsIGYpCiAgIGQg PSBtYXggKGUsIGQpCiAgICEkb21wIGF0b21pYyBmYWlsKFNFUV9DU1QpCiAgIGQgPSBtaW4g KGQsIGYpCi0gICEkb21wIGF0b21pYyBzZXFfY3N0IGNvbXBhcmUgZmFpbChyZWxheGVkKSAg ISB7IGRnLWVycm9yICJTb3JyeSwgQ09NUEFSRSBjbGF1c2UgaW4gQVRPTUlDIGF0IC4xLiBp cyBub3QgeWV0IHN1cHBvcnRlZCIgfQorICAhJG9tcCBhdG9taWMgc2VxX2NzdCBjb21wYXJl IGZhaWwocmVsYXhlZCkKICAgaWYgKHggPT0gNykgeCA9IDI0Ci0gICEkb21wIGF0b21pYyBj b21wYXJlICAhIHsgZGctZXJyb3IgIlNvcnJ5LCBDT01QQVJFIGNsYXVzZSBpbiBBVE9NSUMg YXQgLjEuIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIiB9CisgICEkb21wIGF0b21pYyBjb21wYXJl CiAgIGlmICh4ID09IDcpIHggPSAyNAotICAhJG9tcCBhdG9taWMgY29tcGFyZSAgISB7IGRn LWVycm9yICJTb3JyeSwgQ09NUEFSRSBjbGF1c2UgaW4gQVRPTUlDIGF0IC4xLiBpcyBub3Qg eWV0IHN1cHBvcnRlZCIgfQorICAhJG9tcCBhdG9taWMgY29tcGFyZQogICBpZiAoeCA9PSAx MjMpIHggPSAyNTYKLSAgISRvbXAgYXRvbWljIGNvbXBhcmUgICEgeyBkZy1lcnJvciAiU29y cnksIENPTVBBUkUgY2xhdXNlIGluIEFUT01JQyBhdCAuMS4gaXMgbm90IHlldCBzdXBwb3J0 ZWQiIH0KLSAgaWYgKGxkID09IGYpICBsZCA9IGYgKyA1LjBfbXJrCi0gICEkb21wIGF0b21p YyBjb21wYXJlICAhIHsgZGctZXJyb3IgIlNvcnJ5LCBDT01QQVJFIGNsYXVzZSBpbiBBVE9N SUMgYXQgLjEuIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIiB9CisgICEkb21wIGF0b21pYyBjb21w YXJlCisgIGlmIChsZCA9PSBmKSAgbGQgPSA1LjBfbXJrCisgICEkb21wIGF0b21pYyBjb21w YXJlCiAgIGlmICh4ID09IDkpIHRoZW4KICAgICB4ID0gNQogICBlbmRpZgotICAhJG9tcCBh dG9taWMgY29tcGFyZSB1cGRhdGUgY2FwdHVyZSBzZXFfY3N0IGZhaWwoYWNxdWlyZSkgICEg eyBkZy1lcnJvciAiU29ycnksIENPTVBBUkUgY2xhdXNlIGluIEFUT01JQyBhdCAuMS4gaXMg bm90IHlldCBzdXBwb3J0ZWQiIH0KKyAgISRvbXAgYXRvbWljIGNvbXBhcmUgdXBkYXRlIGNh cHR1cmUgc2VxX2NzdCBmYWlsKGFjcXVpcmUpCiAgIGlmICh4ID09IDQyKSB0aGVuCiAgICAg eCA9IGYKICAgZWxzZQogICAgIHYgPSB4CiAgIGVuZGlmCi0gICEkb21wIGF0b21pYyBjYXB0 dXJlIGNvbXBhcmUgd2VhayAgISB7IGRnLWVycm9yICJTb3JyeSwgQ09NUEFSRSBjbGF1c2Ug aW4gQVRPTUlDIGF0IC4xLiBpcyBub3QgeWV0IHN1cHBvcnRlZCIgfQorICAhJG9tcCBhdG9t aWMgY2FwdHVyZSBjb21wYXJlIHdlYWsKICAgaWYgKHggPT0gNDIpIHRoZW4KICAgICB4ID0g ZgogICBlbHNlCiAgICAgdiA9IHgKICAgZW5kaWYKLSAgISRvbXAgYXRvbWljIGNhcHR1cmUg Y29tcGFyZSBmYWlsKHNlcV9jc3QpICAhIHsgZGctZXJyb3IgIlNvcnJ5LCBDT01QQVJFIGNs YXVzZSBpbiBBVE9NSUMgYXQgLjEuIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIiB9CisgICEkb21w IGF0b21pYyBjYXB0dXJlIGNvbXBhcmUgZmFpbChzZXFfY3N0KQogICBpZiAoZCA9PSA4LjAp IHRoZW4KICAgICBkID0gMTYuMAogICBlbHNlCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRl L2dmb3J0cmFuLmRnL2dvbXAvYXRvbWljLTI2LmY5MCBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRy YW4uZGcvZ29tcC9hdG9taWMtMjYuZjkwCmluZGV4IDVmMjFkM2I2ZjkyLi42NDQ4YmQ5Yjhi YiAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb21wL2F0b21pYy0y Ni5mOTAKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb21wL2F0b21pYy0yNi5m OTAKQEAgLTU5LDcgKzU5LDcgQEAgcmVhbCBmdW5jdGlvbiBiYXIgKHksIGUsIGYpCiAgICEk b21wIGF0b21pYyBjb21wYXJlIGZhaWwJISB7IGRnLWVycm9yICJFeHBlY3RlZCAnXFxcKCcg YWZ0ZXIgJ2ZhaWwnIiB9CiAgIGlmICh4ID09IHkpIHggPSBkCiAgICEkb21wIGF0b21pYyBj b21wYXJlIGZhaWwoCSEgeyBkZy1lcnJvciAiRXhwZWN0ZWQgU0VRX0NTVCwgQUNRVUlSRSBv ciBSRUxBWEVEIiB9Ci0gIGlmICh4ID09IHkpIHggPSBkICAgICAgICAgICAgICEgeyBkZy1l cnJvciAiU29ycnksIENPTVBBUkUgY2xhdXNlIGluIEFUT01JQyBhdCAuMS4gaXMgbm90IHll dCBzdXBwb3J0ZWQiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0KKyAgaWYgKHggPT0geSkg eCA9IGQKICAgISRvbXAgYXRvbWljIGNvbXBhcmUgZmFpbCgpCSEgeyBkZy1lcnJvciAiRXhw ZWN0ZWQgU0VRX0NTVCwgQUNRVUlSRSBvciBSRUxBWEVEIiB9CiAgIGlmICh4ID09IHkpIHgg PSBkCiAgICEkb21wIGF0b21pYyBjb21wYXJlIGZhaWwoZm9vYmFyKQkhIHsgZGctZXJyb3Ig IkV4cGVjdGVkIFNFUV9DU1QsIEFDUVVJUkUgb3IgUkVMQVhFRCIgfQpAQCAtNzIsNCArNzIs MjggQEAgcmVhbCBmdW5jdGlvbiBiYXIgKHksIGUsIGYpCiAgIGlmICh4ID09IHkpIHggPSBk CiAgIGJhciA9IHYKIGVuZAorCitzdWJyb3V0aW5lIGZvb2JhcgorICBpbXBsaWNpdCBub25l CisgIGludGVnZXIgOjogaSwgaiwgaworCisgICEkb21wIGF0b21pYyBjb21wYXJlIHdyaXRl ICAhIHsgZGctZXJyb3IgIkNPTVBBUkUgY2xhdXNlIGlzIGluY29tcGF0aWJsZSB3aXRoIFJF QUQgb3IgV1JJVEUiIH0KKyAgICBpZiAoaSA9PSAxKSBpID0gNQorCisgICEkb21wIGF0b21p YyBjb21wYXJlCisgICAgaWYgKGsgPT0gNSkgaSA9IDcgISB7IGRnLWVycm9yICJGb3IgIS5P TVAgQVRPTUlDIENPTVBBUkUsIHRoZSBmaXJzdCBvcGVyYW5kIGluIGNvbXBhcmlzb24gYXQg LjEuIG11c3QgYmUgdGhlIHZhcmlhYmxlICdpJyB0aGF0IHRoZSB1cGRhdGUgc3RhdGVtZW50 IHdyaXRlcyBpbnRvIGF0IC4yLiIgfQorCisgICEkb21wIGF0b21pYyBjb21wYXJlCisgICAg aWYgKGogPT0gaSkgaSA9IDggISB7IGRnLWVycm9yICJGb3IgIS5PTVAgQVRPTUlDIENPTVBB UkUsIHRoZSBmaXJzdCBvcGVyYW5kIGluIGNvbXBhcmlzb24gYXQgLjEuIG11c3QgYmUgdGhl IHZhcmlhYmxlICdpJyB0aGF0IHRoZSB1cGRhdGUgc3RhdGVtZW50IHdyaXRlcyBpbnRvIGF0 IC4yLiIgfQorCisgICEkb21wIGF0b21pYyBjb21wYXJlCisgICAgaWYgKGkgPT0gNSkgaSA9 IDgKKworICAhJG9tcCBhdG9taWMgY29tcGFyZQorICAgIGlmICg1ID09IGkpIGkgPSA4ICEg eyBkZy1lcnJvciAiRXhwZWN0ZWQgc2NhbGFyIGludHJpbnNpYyB2YXJpYWJsZSBhdCAuMS4g aW4gYXRvbWljIGNvbXBhcmlzb24iIH0KKworICAhJG9tcCBhdG9taWMgY29tcGFyZQorICAg IGlmIChpID09IDUpIGkgPSBpICsgOCAhIHsgZGctZXJyb3IgIjIwOiBleHByIGluICEuT01Q IEFUT01JQyBDT01QQVJFIGFzc2lnbm1lbnQgdmFyID0gZXhwciBtdXN0IGJlIHNjYWxhciBh bmQgY2Fubm90IHJlZmVyZW5jZSB2YXIiIH0KKworZW5kIHN1YnJvdXRpbmUKIGVuZCBtb2R1 bGUKZGlmZiAtLWdpdCBhL2xpYmdvbXAvbGliZ29tcC50ZXhpIGIvbGliZ29tcC9saWJnb21w LnRleGkKaW5kZXggMzNjYTJiZjRmMWMuLjMzYjllNGNhYjU1IDEwMDY0NAotLS0gYS9saWJn b21wL2xpYmdvbXAudGV4aQorKysgYi9saWJnb21wL2xpYmdvbXAudGV4aQpAQCAtMzAxLDgg KzMwMSw3IEBAIFRoZSBPcGVuTVAgNC41IHNwZWNpZmljYXRpb24gaXMgZnVsbHkgc3VwcG9y dGVkLgogQGl0ZW0gQGNvZGV7aW50ZXJvcH0gZGlyZWN0aXZlIEB0YWIgTiBAdGFiCiBAaXRl bSBAY29kZXtvbXBfaW50ZXJvcF90fSBvYmplY3Qgc3VwcG9ydCBpbiBydW50aW1lIHJvdXRp bmVzIEB0YWIgTiBAdGFiCiBAaXRlbSBAY29kZXtub3dhaXR9IGNsYXVzZSBpbiBAY29kZXt0 YXNrd2FpdH0gZGlyZWN0aXZlIEB0YWIgTiBAdGFiCi1AaXRlbSBFeHRlbnNpb25zIHRvIHRo ZSBAY29kZXthdG9taWN9IGRpcmVjdGl2ZSBAdGFiIFAKLSAgICAgIEB0YWIgQGNvZGV7Y29t cGFyZX0gdW5zdXBwb3J0ZWQgaW4gRm9ydHJhbgorQGl0ZW0gRXh0ZW5zaW9ucyB0byB0aGUg QGNvZGV7YXRvbWljfSBkaXJlY3RpdmUgQHRhYiBZIEB0YWIKIEBpdGVtIEBjb2Rle3NlcV9j c3R9IGNsYXVzZSBvbiBhIEBjb2Rle2ZsdXNofSBjb25zdHJ1Y3QgQHRhYiBZIEB0YWIKIEBp dGVtIEBjb2Rle2lub3V0c2V0fSBhcmd1bWVudCB0byB0aGUgQGNvZGV7ZGVwZW5kfSBjbGF1 c2UgQHRhYiBOIEB0YWIKIEBpdGVtIEBjb2Rle3ByaXZhdGV9IGFuZCBAY29kZXtmaXJzdHBy aXZhdGV9IGFyZ3VtZW50IHRvIEBjb2Rle2RlZmF1bHR9CmRpZmYgLS1naXQgYS9saWJnb21w L3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vYXRvbWljLTE5LmY5MCBiL2xpYmdvbXAvdGVz dHN1aXRlL2xpYmdvbXAuZm9ydHJhbi9hdG9taWMtMTkuZjkwCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lNWY2NzVmODdkOQotLS0gL2Rldi9udWxsCisrKyBi L2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi9hdG9taWMtMTkuZjkwCkBAIC0w LDAgKzEsMzEzIEBACishIHsgZGctZG8gcnVuIH0KKworbW9kdWxlIG0KKyAgaW50ZWdlciA6 OiB4ID0gNgorICBpbnRlZ2VyIDo6IHcsIHkKKyAgdGFyZ2V0IDo6IHkKKworY29udGFpbnMK KyAgZnVuY3Rpb24gZm9vICgpCisgICAgaW50ZWdlciwgcG9pbnRlciA6OiBmb28KKyAgICBp ZiAodyAvPSAwKSAmCisgICAgICBlcnJvciBzdG9wCisgICAgZm9vID0+IHkKKyAgZW5kCitl bmQgbW9kdWxlIAorCitwcm9ncmFtIG1haW4KKyAgdXNlIG0KKyAgaW1wbGljaXQgbm9uZQor ICBpbnRlZ2VyIDo6IHYsIHIKKyAgISRvbXAgYXRvbWljCisgIHggPSBtaW4gKDgsIHgpCisg ICEkb21wIGF0b21pYyByZWFkCisgIHYgPSB4CisgIGlmICh2IC89IDYpICYKKyAgICBlcnJv ciBzdG9wCisKKyAgISRvbXAgYXRvbWljIGNvbXBhcmUKKyAgaWYgKHggPT0gNikgeCA9IDcK KyAgISRvbXAgYXRvbWljIHJlYWQKKyAgdiA9IHgKKyAgaWYgKHYgLz0gNykgJgorICAgIGVy cm9yIHN0b3AKKworICAhJG9tcCBhdG9taWMKKyAgeCA9IG1pbiAoeCwgNCkKKyAgISRvbXAg YXRvbWljIHJlYWQKKyAgdiA9IHgKKyAgaWYgKHYgLz0gNCkgJgorICAgIGVycm9yIHN0b3AK KyAgISRvbXAgYXRvbWljIGNhcHR1cmUKKyAgeCA9IG1heCh4LCA4KQorICB2ID0geAorICBp ZiAodiAvPSA4KSAmCisgICAgZXJyb3Igc3RvcAorCisgICEkb21wIGF0b21pYyByZWFkCisg IHYgPSB4CisgIGlmICh4IC89IDgpICYKKyAgICBlcnJvciBzdG9wCisgICEkb21wIGF0b21p YyBjYXB0dXJlCisgIHYgPSB4CisgIHggPSBtYXggKDEyLCB4KQorICBpZiAodiAvPSA4KSAm CisgICAgZXJyb3Igc3RvcAorICAhJG9tcCBhdG9taWMgcmVhZAorICB2ID0geAorICBpZiAo diAvPSAxMikgJgorICAgIGVycm9yIHN0b3AKKyAgISRvbXAgYXRvbWljIGNhcHR1cmUKKyAg ICB2ID0geAorICAgIHggPSBtYXgoNCwgeCkKKyAgaWYgKHYgLz0gMTIpICYKKyAgICBlcnJv ciBzdG9wCisgICEkb21wIGF0b21pYyByZWFkCisgICAgdiA9IHgKKyAgaWYgKHYgLz0gMTIp ICYKKyAgICBlcnJvciBzdG9wCisgICEkb21wIGF0b21pYyBjYXB0dXJlIGNvbXBhcmUKKyAg aWYgKHggPT0gNCkgdGhlbgorICAgIHggPSA0CisgIGVsc2UKKyAgICB2ID0geAorICBlbmRp ZgorICBpZiAodiAvPSAxMikgJgorICAgIGVycm9yIHN0b3AKKyAgISRvbXAgYXRvbWljIHdy aXRlCisgIHggPSAtMzIKKyAgISRvbXAgYXRvbWljIGNhcHR1cmUgc2VxX2NzdCBmYWlsKHJl bGF4ZWQpCisgICAgeCA9IG1heCh4LCAxMl84KQorICAgIHYgPSB4CisgIGlmICh2IC89IDEy KSAmCisgICAgZXJyb3Igc3RvcAorICAhJG9tcCBhdG9taWMgcmVhZAorICB2ID0geAorICBp ZiAodiAvPSAxMikgJgorICAgIGVycm9yIHN0b3AKKyAgISRvbXAgYXRvbWljIGNvbXBhcmUK KyAgaWYgKHggPT0gMTIpIHggPSAxNgorICAhJG9tcCBhdG9taWMgcmVhZAorICB2ID0geAor ICBpZiAodiAvPSAxNikgJgorICAgIGVycm9yIHN0b3AKKyAgciA9IDU3CisgICEkb21wIGF0 b21pYyBjb21wYXJlIGNhcHR1cmUKKyAgaWYgKHggPT0gMTYpIHRoZW4KKyAgICB4ID0gciAr IDcKKyAgZWxzZQorICAgIHYgPSB4CisgIGVuZGlmCisgIGlmICh2IC89IDE2KSAmCisgICAg ZXJyb3Igc3RvcAorICAhJG9tcCBhdG9taWMgcmVhZAorICB2ID0geAorICBpZiAodiAvPSA2 NCkgJgorICAgIGVycm9yIHN0b3AKKyAgISRvbXAgYXRvbWljIGNvbXBhcmUgY2FwdHVyZQor ICB2ID0geAorICBpZiAoeCA9PSA2NCkgeCA9IDE2CisgIGlmICh2IC89IDY0KSAmCisgICAg ZXJyb3Igc3RvcAorICAhJG9tcCBhdG9taWMgcmVhZAorICB2ID0geAorICBpZiAodiAvPSAx NikgJgorICAgIGVycm9yIHN0b3AKKyAgCisgICEkb21wIGF0b21pYyBjYXB0dXJlLCB1cGRh dGUsIGNvbXBhcmUgc2VxX2NzdCBmYWlsKGFjcXVpcmUpCisgICAgdiA9IHgKKyAgICBpZiAo eCA9PSA3M184IC0gcikgeCA9IDEyXzIKKyAgaWYgKHYgLz0gMTYpICYKKyAgICBlcnJvciBz dG9wCisgICEkb21wIGF0b21pYyByZWFkCisgIHYgPSB4CisgIGlmICh2IC89IDEyKSAmCisg ICAgZXJyb3Igc3RvcAorICAhJG9tcCBhdG9taWMgdXBkYXRlLCBjb21wYXJlLCBjYXB0dXJl CisgICAgaWYgKHggPT0gNjlfMiAtIHIpIHggPSA2XzgKKyAgICB2ID0geAorICBpZiAodiAv PSA2KSAmCisgICAgZXJyb3Igc3RvcAorICAhJG9tcCBhdG9taWMgcmVhZAorICB2ID0geAor ICBpZiAodiAvPSA2KSAmCisgICAgZXJyb3Igc3RvcAorICAhJG9tcCBhdG9taWMKKyAgICB4 ID0gbWluKHgsIDgpCisgICEkb21wIGF0b21pYyByZWFkCisgIHYgPSB4CisgIGlmICh2IC89 IDYpICYKKyAgICBlcnJvciBzdG9wCisgICEkb21wIGF0b21pYyBjb21wYXJlCisgIGlmICh4 ID09IDYpIHggPSA4CisgICEkb21wIGF0b21pYyByZWFkCisgIHYgPSB4CisgIGlmICh2IC89 IDgpICYKKyAgICBlcnJvciBzdG9wCisgICEkb21wIGF0b21pYworICB4ID0gbWluKDQseCkK KyAgISRvbXAgYXRvbWljIHJlYWQKKyAgdiA9IHgKKyAgaWYgKHYgLz0gNCkgJgorICAgIGVy cm9yIHN0b3AKKyAgISRvbXAgYXRvbWljIGNhcHR1cmUKKyAgeCA9IG1heCg4XzIsIHgpCisg IHYgPSB4CisgIGlmICh2IC89IDgpICYKKyAgICBlcnJvciBzdG9wCisgICEkb21wIGF0b21p YyByZWFkCisgIHYgPSB4CisgIGlmICh2IC89IDgpICYKKyAgICBlcnJvciBzdG9wCisgICEk b21wIGF0b21pYyBjYXB0dXJlCisgIHYgPSB4CisgIHggPSBtYXgoMTJfMSwgeCkKKyAgaWYg KHYgLz0gOCkgJgorICAgIGVycm9yIHN0b3AKKyAgISRvbXAgYXRvbWljIHJlYWQKKyAgdiA9 IHgKKyAgaWYgKHYgLz0gMTIpICYKKyAgICBlcnJvciBzdG9wCisgICEkb21wIGF0b21pYyBj YXB0dXJlCisgIHYgPSB4CisgIHggPSBtYXgoeCwgNF8xKQorICBpZiAodiAvPSAxMikgJgor ICAgIGVycm9yIHN0b3AKKyAgISRvbXAgYXRvbWljIHJlYWQKKyAgdiA9IHgKKyAgaWYgKHYg Lz0gMTIpICYKKyAgICBlcnJvciBzdG9wCisgICEkb21wIGF0b21pYyB3cml0ZQorICB4ID0g LTMyCisgICEkb21wIGF0b21pYyBjYXB0dXJlICxzZXFfY3N0IGZhaWwgKCByZWxheGVkICkK KyAgeCA9IG1heCgxMF8xICsgMl84LCB4KQorICB2ID0geAorICAhJG9tcCBlbmQgYXRvbWlj CisgIGlmICh2IC89IDEyKSAmCisgICAgZXJyb3Igc3RvcAorICAhJG9tcCBhdG9taWMgcmVh ZAorICB2ID0geAorICBpZiAodiAvPSAxMikgJgorICAgIGVycm9yIHN0b3AKKyAgISRvbXAg YXRvbWljIGNvbXBhcmUKKyAgaWYgKHggPT0gMTIpIHggPSAxNgorICAhJG9tcCBhdG9taWMg cmVhZAorICB2ID0geAorICBpZiAodiAvPSAxNikgJgorICAgIGVycm9yIHN0b3AKKyAgciA9 IDU3CisgICEkb21wIGF0b21pYyBjb21wYXJlIGNhcHR1cmUKKyAgaWYgKHggPT0gMTUpIHgg PSByICsgNzsgdiA9IHgKKyAgaWYgKHYgLz0gMTYpICYKKyAgICBlcnJvciBzdG9wCisgICEk b21wIGF0b21pYyByZWFkCisgIHYgPSB4CisgIGlmICh2IC89IDE2KSAmCisgICAgZXJyb3Ig c3RvcAorICAhJG9tcCBhdG9taWMgY2FwdHVyZSwgdXBkYXRlLCBjb21wYXJlIHNlcV9jc3Qg ZmFpbChhY3F1aXJlKQorICB2ID0geDsgaWYgKHggPT0gNzNfOCAtIHIpIHggPSAxMl84Cisg ICEkb21wIGVuZCBhdG9taWMKKyAgaWYgKHYgLz0gMTYpICYKKyAgICBlcnJvciBzdG9wCisg ICEkb21wIGF0b21pYyByZWFkCisgIHYgPSB4CisgIGlmICh2IC89IDEyKSAmCisgICAgZXJy b3Igc3RvcAorICAhJG9tcCBhdG9taWMgdXBkYXRlLCBjb21wYXJlLCBjYXB0dXJlCisgIGlm ICh4ID09IDY5XzIgLSByKSB4ID0gNl8xOyB2ID0geAorICBpZiAodiAvPSA2KSAmCisgICAg ZXJyb3Igc3RvcAorICAhJG9tcCBhdG9taWMgcmVhZAorICB2ID0geAorICBpZiAodiAvPSA2 KSAmCisgICAgZXJyb3Igc3RvcAorICB2ID0gMjQKKyAgISRvbXAgYXRvbWljIGNvbXBhcmUg Y2FwdHVyZQorICBpZiAoeCA9PSAxMikgdGhlbjsgeCA9IDE2OyBlbHNlOyB2ID0geDsgZW5k aWYKKyAgaWYgKHYgLz0gNikgJgorICAgIGVycm9yIHN0b3AKKyAgdiA9IDMyCisgICEkb21w IGF0b21pYyByZWFkCisgIHYgPSB4CisgIGlmICh2IC89IDYpICYKKyAgICBlcnJvciBzdG9w CisgIHYgPSAxNDcKKyAgISRvbXAgYXRvbWljIGNhcHR1cmUgY29tcGFyZQorICBpZiAoeCA9 PSA2KSB0aGVuOyB4ID0gNTc7IGVsc2U7IHYgPSB4OyBlbmRpZgorICBpZiAodiAvPSAxNDcp ICYKKyAgICBlcnJvciBzdG9wCisgICEkb21wIGF0b21pYyByZWFkCisgIHYgPSB4CisgIGlm ICh2IC89IDU3KSAmCisgICAgZXJyb3Igc3RvcAorICAhJG9tcCBhdG9taWMgdXBkYXRlLCBj b21wYXJlLCB3ZWFrLCBzZXFfY3N0LCBmYWlsIChyZWxheGVkKQorICBpZiAoeCA9PSAxMzcp IHggPSAxNzQKKyAgISRvbXAgYXRvbWljIHJlYWQKKyAgdiA9IHgKKyAgaWYgKHYgLz0gNTcp ICYKKyAgICBlcnJvciBzdG9wCisgICEkb21wIGF0b21pYyBjb21wYXJlIGZhaWwgKHJlbGF4 ZWQpCisgIGlmICh4ID09IDU3XzIpIHggPSA2XzgKKyAgISRvbXAgYXRvbWljIHJlYWQKKyAg diA9IHgKKyAgaWYgKHYgLz0gNikgJgorICAgIGVycm9yIHN0b3AKKyAgdiA9IC01CisgICEk b21wIGF0b21pYyBjYXB0dXJlIGNvbXBhcmUKKyAgaWYgKHggPT0gMTcpIHRoZW47IHggPSAy NTsgZWxzZTsgdiA9IHg7IGVuZGlmCisgIGlmICh2IC89IDYpICYKKyAgICBlcnJvciBzdG9w CisgICEkb21wIGF0b21pYyByZWFkCisgIHYgPSB4CisgIGlmICh2IC89IDYpICYKKyAgICBl cnJvciBzdG9wCisgIHYgPSAxNQorICAhJG9tcCBhdG9taWMgY2FwdHVyZSBjb21wYXJlCisg IGlmICh4ID09IDYpIHRoZW47IHggPSAyMzsgZWxzZTsgdiA9IHg7IGVuZGlmCisgIGlmICh2 IC89IDE1KSAmCisgICAgZXJyb3Igc3RvcAorICAhJG9tcCBhdG9taWMgcmVhZAorICB2ID0g eAorICBpZiAodiAvPSAyMykgJgorICAgIGVycm9yIHN0b3AKKyAgdyA9IDEKKyAgISRvbXAg YXRvbWljIGNvbXBhcmUgY2FwdHVyZQorICAhIGlmICh4ID09IDIzKSB0aGVuOyB4ID0gNTc7 IGVsc2U7IGZvbyAoKSA9IHg7IGVuZGlmICAhIE9wZW5NUCA2CisgIGlmICh4ID09IDIzKSB0 aGVuOyB4ID0gNTc7IGVsc2U7IHkgPSB4OyBlbmRpZgorICAhJG9tcCBhdG9taWMgcmVhZAor ICB2ID0geAorICBpZiAodiAvPSA1NykgJgorICAgIGVycm9yIHN0b3AKKyAgISRvbXAgYXRv bWljIGNhcHR1cmUgdXBkYXRlIGNvbXBhcmUKKyAgISBpZiAoeCA9PSA1NykgdGhlbjsgeCA9 IDIzOyBlbHNlOyBmb28gKCkgPSB4OyBlbmRpZiAgISBPcGVuTVAgNgorICBpZiAoeCA9PSA1 NykgdGhlbjsgeCA9IDIzOyBlbHNlOyB5ID0geDsgZW5kaWYKKyAgISRvbXAgYXRvbWljIHJl YWQKKyAgdiA9IHgKKyAgaWYgKHYgLz0gMjMpICYKKyAgICBlcnJvciBzdG9wCisgIHcgPSAw CisgICEkb21wIGF0b21pYyBjb21wYXJlIGNhcHR1cmUKKyAgISBpZiAoeCA9PSAyNCkgdGhl bjsgeCA9IDU3OyBlbHNlOyBmb28gKCkgPSB4OyBlbmRpZiAgISBPcGVuTVAgNgorICBpZiAo eCA9PSAyNCkgdGhlbjsgeCA9IDU3OyBlbHNlOyB5ID0geDsgZW5kaWYKKyAgaWYgKHkgLz0g MjMpICYKKyAgICBlcnJvciBzdG9wCisgICEkb21wIGF0b21pYyByZWFkCisgIHYgPSB4Cisg IGlmICh2IC89IDIzKSAmCisgICAgZXJyb3Igc3RvcAorICB5ID0gLTUKKyAgISRvbXAgYXRv bWljIGNhcHR1cmUgdXBkYXRlIGNvbXBhcmUKKyAgICBpZiAoeCA9PSA1NykgdGhlbgorICAg ICAgeCA9IDI3CisgICAgZWxzZQorICAgICAgISBmb28gKCkgPSB4ICAhIE9wZW5NUCA2Cisg ICAgICB5ID0geAorICAgIGVuZCBpZgorICAhJG9tcCBlbmQgYXRvbWljCisgIGlmICh5IC89 IDIzKSAmCisgICAgZXJyb3Igc3RvcCAKKyAgISRvbXAgYXRvbWljIHJlYWQKKyAgdiA9IHgK KyAgaWYgKHYgLz0gMjMpICYKKyAgICBlcnJvciBzdG9wCitlbmQK --------------wv00tw7zmHK1MlUMf5rJddym--