From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, HK_RANDOM_FROM,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id AACA2C433E1 for ; Wed, 17 Jun 2020 16:01:31 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 8BDBA214DB for ; Wed, 17 Jun 2020 16:01:31 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8BDBA214DB Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 171666E108; Wed, 17 Jun 2020 16:01:31 +0000 (UTC) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id C6E256E108 for ; Wed, 17 Jun 2020 16:01:29 +0000 (UTC) IronPort-SDR: yFrCrZ5PfIhLiCcDbb2971a71rGz/tvjQU7ckJIMlX3RJGfp8XLggv0B5QUyVi8xn0nC8KixYQ RB4LLAsX9CYg== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Jun 2020 09:01:29 -0700 IronPort-SDR: 3tAhKgDKhaacBU2i94rg9CIUY2qZJQN7TpA5+lW2Y+wb0P30MfLU8A2jPDaszriamhGuN69mNL 2Qc9ZZnWSWFA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,523,1583222400"; d="scan'208";a="421186070" Received: from aabdelhi-mobl.ger.corp.intel.com (HELO localhost.localdomain) ([10.255.197.210]) by orsmga004.jf.intel.com with ESMTP; 17 Jun 2020 09:01:26 -0700 From: Tvrtko Ursulin To: Intel-gfx@lists.freedesktop.org Date: Wed, 17 Jun 2020 17:01:11 +0100 Message-Id: <20200617160120.16555-2-tvrtko.ursulin@linux.intel.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200617160120.16555-1-tvrtko.ursulin@linux.intel.com> References: <20200617160120.16555-1-tvrtko.ursulin@linux.intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH i-g-t 01/10] gem_wsim: Rip out userspace balancing X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KCkV2YWx1YXRp b24gb2YgdXNlcnNwYWNlIGxvYWQgYmFsYW5jaW5nIG9wdGlvbnMgd2FzIGhvdyB0aGlzIHRvb2wg c3RhcnRlZApidXQgc2luY2Ugd2UgaGF2ZSBzZXR0bGVkIG9uIGRvaW5nIGl0IGluIHRoZSBrZXJu ZWwuCgpUb21vcnJvdyB3ZSB3aWxsIHdhbnQgdG8gdXBkYXRlIHRoZSB0b29sIGZvciBuZXcgZW5n aW5lIGludGVyZmFjZXMgYW5kIGFsbAp0aGlzIGxlZ2FjeSBjb2RlIHdpbGwganVzdCBiZSBhIGRp c3RyYWN0aW9uLgoKUmlwIG91dCBldmVyeXRoaW5nIG5vdCByZWxhdGVkIHRvIGV4cGxpY2l0IGxv YWQgYmFsYW5jaW5nIGltcGxlbWVudGVkIHZpYQpjb250ZXh0IGVuZ2luZSBtYXBzIGFuZCBhZGp1 c3QgdGhlIHdvcmtsb2FkcyB0byB1c2UgaXQuCgpTaWduZWQtb2ZmLWJ5OiBUdnJ0a28gVXJzdWxp biA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgotLS0KIGJlbmNobWFya3MvTWFrZWZpbGUuYW0g ICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KIGJlbmNobWFya3MvTWFrZWZpbGUuc291 cmNlcyAgICAgICAgICAgICAgICAgICB8ICAgIDYgLQogYmVuY2htYXJrcy9ld21hLmggICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICA3MSAtCiBiZW5jaG1hcmtzL2dlbV93c2ltLmMgICAg ICAgICAgICAgICAgICAgICAgICAgfCAxMzYyICstLS0tLS0tLS0tLS0tLS0tCiBiZW5jaG1hcmtz L2lsb2cyLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTA0IC0tCiBiZW5jaG1hcmtz L21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA2ICstCiBiZW5jaG1hcmtz L3dzaW0vbWVkaWEtMTA4MHAtcGxheWVyLndzaW0gICAgICAgfCAgICAyICsKIGJlbmNobWFya3Mv d3NpbS9tZWRpYV8xbjJfNDgwcC53c2ltICAgICAgICAgICB8ICAgMTIgKy0KIGJlbmNobWFya3Mv d3NpbS9tZWRpYV8xbjJfYXN5LndzaW0gICAgICAgICAgICB8ICAgIDggKy0KIGJlbmNobWFya3Mv d3NpbS9tZWRpYV8xbjNfNDgwcC53c2ltICAgICAgICAgICB8ICAgMTYgKy0KIGJlbmNobWFya3Mv d3NpbS9tZWRpYV8xbjNfYXN5LndzaW0gICAgICAgICAgICB8ICAgIDggKwogYmVuY2htYXJrcy93 c2ltL21lZGlhXzFuNF80ODBwLndzaW0gICAgICAgICAgIHwgICAyMCArLQogYmVuY2htYXJrcy93 c2ltL21lZGlhXzFuNF9hc3kud3NpbSAgICAgICAgICAgIHwgICAxMCArCiBiZW5jaG1hcmtzL3dz aW0vbWVkaWFfMW41XzQ4MHAud3NpbSAgICAgICAgICAgfCAgIDI0ICstCiBiZW5jaG1hcmtzL3dz aW0vbWVkaWFfMW41X2FzeS53c2ltICAgICAgICAgICAgfCAgIDEyICsKIGJlbmNobWFya3Mvd3Np bS9tZWRpYV9sb2FkX2JhbGFuY2VfMTdpNy53c2ltICB8ICAgMTAgKy0KIGJlbmNobWFya3Mvd3Np bS9tZWRpYV9sb2FkX2JhbGFuY2VfMTkud3NpbSAgICB8ICAgIDQgKy0KIC4uLi93c2ltL21lZGlh X2xvYWRfYmFsYW5jZV80azEydTcud3NpbSAgICAgICB8ICAgIDIgKwogLi4uL3dzaW0vbWVkaWFf bG9hZF9iYWxhbmNlX2ZoZDI2dTcud3NpbSAgICAgIHwgICAxNiArLQogYmVuY2htYXJrcy93c2lt L21lZGlhX2xvYWRfYmFsYW5jZV9oZDAxLndzaW0gIHwgICAzNCArLQogLi4uL3dzaW0vbWVkaWFf bG9hZF9iYWxhbmNlX2hkMDZtcDIud3NpbSAgICAgIHwgICAgNiArLQogYmVuY2htYXJrcy93c2lt L21lZGlhX2xvYWRfYmFsYW5jZV9oZDEyLndzaW0gIHwgICAgNiArLQogLi4uL3dzaW0vbWVkaWFf bG9hZF9iYWxhbmNlX2hkMTdpNC53c2ltICAgICAgIHwgICAgOCArLQogYmVuY2htYXJrcy93c2lt L21lZGlhX21mZTJfNDgwcC53c2ltICAgICAgICAgIHwgICAxMiArLQogYmVuY2htYXJrcy93c2lt L21lZGlhX21mZTNfNDgwcC53c2ltICAgICAgICAgIHwgICAxOCArLQogYmVuY2htYXJrcy93c2lt L21lZGlhX21mZTRfNDgwcC53c2ltICAgICAgICAgIHwgICAyNCArLQogYmVuY2htYXJrcy93c2lt L21lZGlhX25uXzEwODBwLndzaW0gICAgICAgICAgIHwgICAgNCArCiBiZW5jaG1hcmtzL3dzaW0v bWVkaWFfbm5fMTA4MHBfczEud3NpbSAgICAgICAgfCAgICA0ICstCiBiZW5jaG1hcmtzL3dzaW0v bWVkaWFfbm5fMTA4MHBfczIud3NpbSAgICAgICAgfCAgICAyICsKIGJlbmNobWFya3Mvd3NpbS9t ZWRpYV9ubl8xMDgwcF9zMy53c2ltICAgICAgICB8ICAgIDIgKwogYmVuY2htYXJrcy93c2ltL21l ZGlhX25uXzQ4MHAud3NpbSAgICAgICAgICAgIHwgICAgNCArCiBiZW5jaG1hcmtzL3dzaW0vdmNz X2JhbGFuY2VkLndzaW0gICAgICAgICAgICAgfCAgIDUyICstCiBzY3JpcHRzL21lZGlhLWJlbmNo LnBsICAgICAgICAgICAgICAgICAgICAgICAgfCAgNzM2IC0tLS0tLS0tLQogMzMgZmlsZXMgY2hh bmdlZCwgMzAwIGluc2VydGlvbnMoKyksIDIzMDcgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAx MDA2NDQgYmVuY2htYXJrcy9ld21hLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBiZW5jaG1hcmtzL2ls b2cyLmgKIGRlbGV0ZSBtb2RlIDEwMDc1NSBzY3JpcHRzL21lZGlhLWJlbmNoLnBsCgpkaWZmIC0t Z2l0IGEvYmVuY2htYXJrcy9NYWtlZmlsZS5hbSBiL2JlbmNobWFya3MvTWFrZWZpbGUuYW0KaW5k ZXggMWYwNWFkZjMxNTI3Li40NWI5MjNlYmJhZTMgMTAwNjQ0Ci0tLSBhL2JlbmNobWFya3MvTWFr ZWZpbGUuYW0KKysrIGIvYmVuY2htYXJrcy9NYWtlZmlsZS5hbQpAQCAtMjUsNCArMjUsNCBAQCBn ZW1fbGF0ZW5jeV9DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChUSFJFQURfQ0ZMQUdTKQogZ2VtX2xh dGVuY3lfTERBREQgPSAkKExEQUREKSAtbHB0aHJlYWQKIGdlbV9zeXNsYXRlbmN5X0NGTEFHUyA9 ICQoQU1fQ0ZMQUdTKSAkKFRIUkVBRF9DRkxBR1MpCiBnZW1fc3lzbGF0ZW5jeV9MREFERCA9ICQo TERBREQpIC1scHRocmVhZAotZ2VtX3dzaW1fTERBREQgPSAkKExEQUREKSAkKHRvcF9idWlsZGRp cikvbGliL2xpYmlndF9wZXJmLmxhIC1scHRocmVhZAorZ2VtX3dzaW1fTERBREQgPSAkKExEQURE KSAtbHB0aHJlYWQKZGlmZiAtLWdpdCBhL2JlbmNobWFya3MvTWFrZWZpbGUuc291cmNlcyBiL2Jl bmNobWFya3MvTWFrZWZpbGUuc291cmNlcwppbmRleCBlZTA0NWZiMzA5YWQuLmRhZTNjZGRhNGNm NyAxMDA2NDQKLS0tIGEvYmVuY2htYXJrcy9NYWtlZmlsZS5zb3VyY2VzCisrKyBiL2JlbmNobWFy a3MvTWFrZWZpbGUuc291cmNlcwpAQCAtMTksMTIgKzE5LDYgQEAgYmVuY2htYXJrc19wcm9nX2xp c3QgPQkJCVwKIAl2Z2VtX21tYXAJCQlcCiAJJChOVUxMKQogCi1nZW1fd3NpbV9TT1VSQ0VTID0g ICAgICAgICAgICAgICAgICAgICAgXAotCWdlbV93c2ltLmMgICAgICAgICAgICAgICAgICAgICAg XAotCWV3bWEuaCAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWlsb2cyLmggICAgICAgICAg ICAgICAgICAgICAgICAgXAotCSQoTlVMTCkKLQogTElCRFJNX0lOVEVMX0JFTkNITUFSS1MgPQkJ XAogCWludGVsX3VwbG9hZF9ibGl0X2xhcmdlCQlcCiAJaW50ZWxfdXBsb2FkX2JsaXRfbGFyZ2Vf Z3R0CVwKZGlmZiAtLWdpdCBhL2JlbmNobWFya3MvZXdtYS5oIGIvYmVuY2htYXJrcy9ld21hLmgK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3MTEwMDRlZDk5Mi4uMDAwMDAwMDAwMDAw Ci0tLSBhL2JlbmNobWFya3MvZXdtYS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAot I2lmbmRlZiBFV01BX0gKLSNkZWZpbmUgRVdNQV9ICi0KLSNpbmNsdWRlIDxpbG9nMi5oPgotCi0j ZGVmaW5lIEJVSUxEX0JVR19PTihleHByKQotI2RlZmluZSBCVUlMRF9CVUdfT05fTk9UX1BPV0VS X09GXzIoZXhwcikKLQotLyoKLSAqIEV4cG9uZW50aWFsbHkgd2VpZ2h0ZWQgbW92aW5nIGF2ZXJh Z2UgKEVXTUEpCi0gKgotICogVGhpcyBpbXBsZW1lbnRzIGEgZml4ZWQtcHJlY2lzaW9uIEVXTUEg YWxnb3JpdGhtLCB3aXRoIGJvdGggdGhlCi0gKiBwcmVjaXNpb24gYW5kIGZhbGwtb2ZmIGNvZWZm aWNpZW50IGRldGVybWluZWQgYXQgY29tcGlsZS10aW1lCi0gKiBhbmQgYnVpbHQgaW50byB0aGUg Z2VuZXJhdGVkIGhlbHBlciBmdW50aW9ucy4KLSAqCi0gKiBUaGUgZmlyc3QgYXJndW1lbnQgdG8g dGhlIG1hY3JvIGlzIHRoZSBuYW1lIHRoYXQgd2lsbCBiZSB1c2VkCi0gKiBmb3IgdGhlIHN0cnVj dCBhbmQgaGVscGVyIGZ1bmN0aW9ucy4KLSAqCi0gKiBUaGUgc2Vjb25kIGFyZ3VtZW50LCB0aGUg cHJlY2lzaW9uLCBleHByZXNzZXMgaG93IG1hbnkgYml0cyBhcmUKLSAqIHVzZWQgZm9yIHRoZSBm cmFjdGlvbmFsIHBhcnQgb2YgdGhlIGZpeGVkLXByZWNpc2lvbiB2YWx1ZXMuCi0gKgotICogVGhl IHRoaXJkIGFyZ3VtZW50LCB0aGUgd2VpZ2h0IHJlY2lwcm9jYWwsIGRldGVybWluZXMgaG93IHRo ZQotICogbmV3IHZhbHVlcyB3aWxsIGJlIHdlaWdoZWQgdnMuIHRoZSBvbGQgc3RhdGUsIG5ldyB2 YWx1ZXMgd2lsbAotICogZ2V0IHdlaWdodCAxL3dlaWdodF9yY3AgYW5kIG9sZCB2YWx1ZXMgMS0x L3dlaWdodF9yY3AuIE5vdGUKLSAqIHRoYXQgdGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIHBvd2Vy IG9mIHR3byBmb3IgZWZmaWNpZW5jeS4KLSAqLwotCi0jZGVmaW5lIERFQ0xBUkVfRVdNQShULCBu YW1lLCBfcHJlY2lzaW9uLCBfd2VpZ2h0X3JjcCkJCQlcCi0Jc3RydWN0IGV3bWFfIyNuYW1lIHsJ CQkJCQlcCi0JCVQgaW50ZXJuYWw7CQkJCQlcCi0JfTsJCQkJCQkJCVwKLQlzdGF0aWMgaW5saW5l IHZvaWQgZXdtYV8jI25hbWUjI19pbml0KHN0cnVjdCBld21hXyMjbmFtZSAqZSkJXAotCXsJCQkJ CQkJCVwKLQkJQlVJTERfQlVHX09OKCFfX2J1aWx0aW5fY29uc3RhbnRfcChfcHJlY2lzaW9uKSk7 CVwKLQkJQlVJTERfQlVHX09OKCFfX2J1aWx0aW5fY29uc3RhbnRfcChfd2VpZ2h0X3JjcCkpOwlc Ci0JCS8qCQkJCQkJCVwKLQkJICogRXZlbiBpZiB5b3Ugd2FudCB0byBmZWVkIGl0IGp1c3QgMC8x IHlvdSBzaG91bGQgaGF2ZQlcCi0JCSAqIHNvbWUgYml0cyBmb3IgdGhlIG5vbi1mcmFjdGlvbmFs IHBhcnQuLi4JCVwKLQkJICovCQkJCQkJCVwKLQkJQlVJTERfQlVHX09OKChfcHJlY2lzaW9uKSA+ IDMwKTsJCQlcCi0JCUJVSUxEX0JVR19PTl9OT1RfUE9XRVJfT0ZfMihfd2VpZ2h0X3JjcCk7CQlc Ci0JCWUtPmludGVybmFsID0gMDsJCQkJCVwKLQl9CQkJCQkJCQlcCi0Jc3RhdGljIGlubGluZSBU CQkJCQkJCVwKLQlld21hXyMjbmFtZSMjX3JlYWQoc3RydWN0IGV3bWFfIyNuYW1lICplKQkJCVwK LQl7CQkJCQkJCQlcCi0JCUJVSUxEX0JVR19PTighX19idWlsdGluX2NvbnN0YW50X3AoX3ByZWNp c2lvbikpOwlcCi0JCUJVSUxEX0JVR19PTighX19idWlsdGluX2NvbnN0YW50X3AoX3dlaWdodF9y Y3ApKTsJXAotCQlCVUlMRF9CVUdfT04oKF9wcmVjaXNpb24pID4gMzApOwkJCVwKLQkJQlVJTERf QlVHX09OX05PVF9QT1dFUl9PRl8yKF93ZWlnaHRfcmNwKTsJCVwKLQkJcmV0dXJuIGUtPmludGVy bmFsID4+IChfcHJlY2lzaW9uKTsJCQlcCi0JfQkJCQkJCQkJXAotCXN0YXRpYyBpbmxpbmUgdm9p ZCBld21hXyMjbmFtZSMjX2FkZChzdHJ1Y3QgZXdtYV8jI25hbWUgKmUsCVwKLQkJCQkJICAgICBU IHZhbCkJCQlcCi0JewkJCQkJCQkJXAotCQljb25zdCBUIHdlaWdodF9yY3AgPSBpbG9nMihfd2Vp Z2h0X3JjcCk7CQlcCi0JCWNvbnN0IFQgcHJlY2lzaW9uID0gX3ByZWNpc2lvbjsJCQkJXAotCQlU IGludGVybmFsID0gZS0+aW50ZXJuYWw7CQkJCVwKLQkJCQkJCQkJCVwKLQkJQlVJTERfQlVHX09O KCFfX2J1aWx0aW5fY29uc3RhbnRfcChfcHJlY2lzaW9uKSk7CVwKLQkJQlVJTERfQlVHX09OKCFf X2J1aWx0aW5fY29uc3RhbnRfcChfd2VpZ2h0X3JjcCkpOwlcCi0JCUJVSUxEX0JVR19PTigoX3By ZWNpc2lvbikgPiAzMCk7CQkJXAotCQlCVUlMRF9CVUdfT05fTk9UX1BPV0VSX09GXzIoX3dlaWdo dF9yY3ApOwkJXAotCQkJCQkJCQkJXAotCQllLT5pbnRlcm5hbCA9IGludGVybmFsID8JCQkJXAot CQkJKCgoaW50ZXJuYWwgPDwgd2VpZ2h0X3JjcCkgLSBpbnRlcm5hbCkgKwlcCi0JCQkJKHZhbCA8 PCBwcmVjaXNpb24pKSA+PiB3ZWlnaHRfcmNwIDoJXAotCQkJKHZhbCA8PCBwcmVjaXNpb24pOwkJ CQlcCi0JfQotCi0jZW5kaWYgLyogRVdNQV9IICovCmRpZmYgLS1naXQgYS9iZW5jaG1hcmtzL2dl bV93c2ltLmMgYi9iZW5jaG1hcmtzL2dlbV93c2ltLmMKaW5kZXggYWQ0ZWRiOTM2OTIwLi4wMmZl OGY1YTVlNjkgMTAwNjQ0Ci0tLSBhL2JlbmNobWFya3MvZ2VtX3dzaW0uYworKysgYi9iZW5jaG1h cmtzL2dlbV93c2ltLmMKQEAgLTU1LDcgKzU1LDYgQEAKICNpbmNsdWRlICJzd19zeW5jLmgiCiAj aW5jbHVkZSAiaTkxNS9nZW1fbW1hbi5oIgogCi0jaW5jbHVkZSAiZXdtYS5oIgogI2luY2x1ZGUg Imk5MTUvZ2VtX2VuZ2luZV90b3BvbG9neS5oIgogCiBlbnVtIGludGVsX2VuZ2luZV9pZCB7CkBA IC0xNTQsMjEgKzE1MywxMiBAQCBzdHJ1Y3Qgd19zdGVwCiAKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X2V4ZWNidWZmZXIyIGViOwogCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICpvYmo7 Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IHJlbG9jWzVdOworCXN0cnVj dCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSByZWxvY1sxXTsKIAl1bnNpZ25lZCBsb25n IGJiX3N6OwogCXVpbnQzMl90IGJiX2hhbmRsZTsKLQl1aW50MzJfdCAqc2Vxbm9fdmFsdWU7Ci0J dWludDMyX3QgKnNlcW5vX2FkZHJlc3M7Ci0JdWludDMyX3QgKnJ0MF92YWx1ZTsKLQl1aW50MzJf dCAqcnQwX2FkZHJlc3M7Ci0JdWludDMyX3QgKnJ0MV9hZGRyZXNzOwotCXVpbnQzMl90ICpsYXRj aF92YWx1ZTsKLQl1aW50MzJfdCAqbGF0Y2hfYWRkcmVzczsKIAl1aW50MzJfdCAqcmVjdXJzaXZl X2JiX3N0YXJ0OwogfTsKIAotREVDTEFSRV9FV01BKHVpbnQ2NF90LCBydCwgNCwgMikKLQogc3Ry dWN0IGN0eCB7CiAJdWludDMyX3QgaWQ7CiAJaW50IHByaW9yaXR5OwpAQCAtMTc2LDkgKzE2Niw3 IEBAIHN0cnVjdCBjdHggewogCWVudW0gaW50ZWxfZW5naW5lX2lkICplbmdpbmVfbWFwOwogCXVu c2lnbmVkIGludCBib25kX2NvdW50OwogCXN0cnVjdCBib25kICpib25kczsKLQlib29sIHRhcmdl dHNfaW5zdGFuY2U7Ci0JYm9vbCB3YW50c19iYWxhbmNlOwotCXVuc2lnbmVkIGludCBzdGF0aWNf dmNzOworCWJvb2wgbG9hZF9iYWxhbmNlOwogCXVpbnQ2NF90IHNzZXU7CiB9OwogCkBAIC0xOTQs MTMgKzE4MiwxMSBAQCBzdHJ1Y3Qgd29ya2xvYWQKIAlwdGhyZWFkX3QgdGhyZWFkOwogCWJvb2wg cnVuOwogCWJvb2wgYmFja2dyb3VuZDsKLQljb25zdCBzdHJ1Y3Qgd29ya2xvYWRfYmFsYW5jZXIg KmJhbGFuY2VyOwogCXVuc2lnbmVkIGludCByZXBlYXQ7CiAJdW5zaWduZWQgaW50IGZsYWdzOwog CWJvb2wgcHJpbnRfc3RhdHM7CiAKIAl1aW50MzJfdCBiYl9wcm5nOwotCXVpbnQzMl90IHBybmc7 CiAKIAlzdHJ1Y3QgdGltZXNwZWMgcmVwZWF0X3N0YXJ0OwogCkBAIC0yMTAsNzMgKzE5NiwyNSBA QCBzdHJ1Y3Qgd29ya2xvYWQKIAlpbnQgc3luY190aW1lbGluZTsKIAl1aW50MzJfdCBzeW5jX3Nl cW5vOwogCi0JdWludDMyX3Qgc2Vxbm9bTlVNX0VOR0lORVNdOwotCXN0cnVjdCBkcm1faTkxNV9n ZW1fZXhlY19vYmplY3QyIHN0YXR1c19vYmplY3RbMl07Ci0JdWludDMyX3QgKnN0YXR1c19wYWdl OwotCXVpbnQzMl90ICpzdGF0dXNfY3M7Ci0JdW5zaWduZWQgaW50IHZjc19ycjsKLQotCXVuc2ln bmVkIGxvbmcgcWRfc3VtW05VTV9FTkdJTkVTXTsKLQl1bnNpZ25lZCBsb25nIG5yX2JiW05VTV9F TkdJTkVTXTsKLQogCXN0cnVjdCBpZ3RfbGlzdF9oZWFkIHJlcXVlc3RzW05VTV9FTkdJTkVTXTsK IAl1bnNpZ25lZCBpbnQgbnJlcXVlc3RbTlVNX0VOR0lORVNdOwotCi0Jc3RydWN0IHdvcmtsb2Fk ICpnbG9iYWxfd3JrOwotCWNvbnN0IHN0cnVjdCB3b3JrbG9hZF9iYWxhbmNlciAqZ2xvYmFsX2Jh bGFuY2VyOwotCXB0aHJlYWRfbXV0ZXhfdCBtdXRleDsKLQotCXVuaW9uIHsKLQkJc3RydWN0IHJ0 YXZnIHsKLQkJCXN0cnVjdCBld21hX3J0IGF2Z1tOVU1fRU5HSU5FU107Ci0JCQl1aW50MzJfdCBs YXN0W05VTV9FTkdJTkVTXTsKLQkJfSBydDsKLQl9OwotCi0Jc3RydWN0IGJ1c3lfYmFsYW5jZXIg ewotCQlpbnQgZmQ7Ci0JCWJvb2wgZmlyc3Q7Ci0JCXVuc2lnbmVkIGludCBudW1fZW5naW5lczsK LQkJdW5zaWduZWQgaW50IGVuZ2luZV9tYXBbTlVNX0VOR0lORVNdOwotCQl1aW50NjRfdCB0X3By ZXY7Ci0JCXVpbnQ2NF90IHByZXZbTlVNX0VOR0lORVNdOwotCQlkb3VibGUgYnVzeVtOVU1fRU5H SU5FU107Ci0JfSBidXN5X2JhbGFuY2VyOwogfTsKIAotc3RydWN0IGludGVsX21taW9fZGF0YSBt bWlvX2RhdGE7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG5vcF9jYWxpYnJhdGlvbl91cyA9 IDEwMDA7CiBzdGF0aWMgYm9vbCBoYXNfbm9wX2NhbGlicmF0aW9uID0gZmFsc2U7CiBzdGF0aWMg Ym9vbCBzZXF1ZW50aWFsID0gdHJ1ZTsKIAogc3RhdGljIHVuc2lnbmVkIGludCBtYXN0ZXJfcHJu ZzsKIAotc3RhdGljIHVuc2lnbmVkIGludCBjb250ZXh0X3Zjc19ycjsKLQogc3RhdGljIGludCB2 ZXJib3NlID0gMTsKIHN0YXRpYyBpbnQgZmQ7CiBzdGF0aWMgc3RydWN0IGRybV9pOTE1X2dlbV9j b250ZXh0X3BhcmFtX3NzZXUgZGV2aWNlX3NzZXUgPSB7CiAJLnNsaWNlX21hc2sgPSAtMSAvKiBG b3JjZSByZWFkIG9uIGZpcnN0IHVzZS4gKi8KIH07CiAKLSNkZWZpbmUgU1dBUFZDUwkJKDE8PDAp Ci0jZGVmaW5lIFNFUU5PCQkoMTw8MSkKLSNkZWZpbmUgQkFMQU5DRQkJKDE8PDIpCi0jZGVmaW5l IFJUCQkoMTw8MykKLSNkZWZpbmUgVkNTMlJFTUFQCSgxPDw0KQotI2RlZmluZSBJTklUVkNTUlIJ KDE8PDUpCi0jZGVmaW5lIFNZTkNFRENMSUVOVFMJKDE8PDYpCi0jZGVmaW5lIEhFQVJUQkVBVAko MTw8NykKLSNkZWZpbmUgR0xPQkFMX0JBTEFOQ0UJKDE8PDgpCi0jZGVmaW5lIERFUFNZTkMJCSgx PDw5KQotI2RlZmluZSBJOTE1CQkoMTw8MTApCi0jZGVmaW5lIFNTRVUJCSgxPDwxMSkKLQotI2Rl ZmluZSBTRVFOT19JRFgoZW5naW5lKSAoKGVuZ2luZSkgKiAxNikKLSNkZWZpbmUgU0VRTk9fT0ZG U0VUKGVuZ2luZSkgKFNFUU5PX0lEWChlbmdpbmUpICogc2l6ZW9mKHVpbnQzMl90KSkKLQotI2Rl ZmluZSBSQ1NfVElNRVNUQU1QICgweDIwMDAgKyAweDM1OCkKLSNkZWZpbmUgUkVHKHgpICh2b2xh dGlsZSB1aW50MzJfdCAqKSgodm9sYXRpbGUgY2hhciAqKWlndF9nbG9iYWxfbW1pbyArIHgpCisj ZGVmaW5lIFNZTkNFRENMSUVOVFMJKDE8PDEpCisjZGVmaW5lIERFUFNZTkMJCSgxPDwyKQorI2Rl ZmluZSBTU0VVCQkoMTw8MykKIAogc3RhdGljIGNvbnN0IGNoYXIgKnJpbmdfc3RyX21hcFtOVU1f RU5HSU5FU10gPSB7CiAJW0RFRkFVTFRdID0gIkRFRkFVTFQiLApAQCAtNTc4LDI2ICs1MTYsNiBA QCBzdGF0aWMgdW5zaWduZWQgaW50IG51bV9lbmdpbmVzX2luX2NsYXNzKGVudW0gaW50ZWxfZW5n aW5lX2lkIGNsYXNzKQogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHZvaWQKLWZpbGxfZW5n aW5lc19jbGFzcyhzdHJ1Y3QgaTkxNV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKmNpLAotCQkgICBl bnVtIGludGVsX2VuZ2luZV9pZCBjbGFzcykKLXsKLQl1bnNpZ25lZCBpbnQgaSwgaiA9IDA7Ci0K LQlpZ3RfYXNzZXJ0KGNsYXNzID09IFZDUyk7Ci0KLQlxdWVyeV9lbmdpbmVzKCk7Ci0KLQlmb3Ig KGkgPSAwOyBpIDwgX19udW1fZW5naW5lczsgaSsrKSB7Ci0JCWlmIChfX2VuZ2luZXNbaV0uZW5n aW5lX2NsYXNzICE9IEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPKQotCQkJY29udGludWU7Ci0KLQkJ Y2lbal0uZW5naW5lX2NsYXNzID0gX19lbmdpbmVzW2ldLmVuZ2luZV9jbGFzczsKLQkJY2lbal0u ZW5naW5lX2luc3RhbmNlID0gX19lbmdpbmVzW2ldLmVuZ2luZV9pbnN0YW5jZTsKLQkJaisrOwot CX0KLX0KLQogc3RhdGljIHZvaWQKIGZpbGxfZW5naW5lc19pZF9jbGFzcyhlbnVtIGludGVsX2Vu Z2luZV9pZCAqbGlzdCwKIAkJICAgICAgZW51bSBpbnRlbF9lbmdpbmVfaWQgY2xhc3MpCkBAIC03 NDQsNyArNjYyLDYgQEAgcGFyc2Vfd29ya2xvYWQoc3RydWN0IHdfYXJnICphcmcsIHVuc2lnbmVk IGludCBmbGFncywgc3RydWN0IHdvcmtsb2FkICphcHBfdykKIAljaGFyICpfdG9rZW4sICp0b2tl biwgKnRjdHggPSBOVUxMLCAqdHN0YXJ0ID0gZGVzYzsKIAljaGFyICpmaWVsZCwgKmZjdHggPSBO VUxMLCAqZnN0YXJ0OwogCXN0cnVjdCB3X3N0ZXAgc3RlcCwgKnN0ZXBzID0gTlVMTDsKLQlib29s IGJjc191c2VkID0gZmFsc2U7CiAJdW5zaWduZWQgaW50IHZhbGlkOwogCWludCBpLCBqLCB0bXA7 CiAKQEAgLTk2Miw5ICs4NzksNiBAQCBwYXJzZV93b3JrbG9hZChzdHJ1Y3Qgd19hcmcgKmFyZywg dW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3Qgd29ya2xvYWQgKmFwcF93KQogCQkJdmFsaWQrKzsK IAogCQkJc3RlcC5lbmdpbmUgPSBpOwotCi0JCQlpZiAoc3RlcC5lbmdpbmUgPT0gQkNTKQotCQkJ CWJjc191c2VkID0gdHJ1ZTsKIAkJfQogCiAJCWlmICgoZmllbGQgPSBzdHJ0b2tfcihmc3RhcnQs ICIuIiwgJmZjdHgpKSkgewpAQCAtMTA4OSw5ICsxMDAzLDYgQEAgYWRkX3N0ZXA6CiAJCX0KIAl9 CiAKLQlpZiAoYmNzX3VzZWQgJiYgKGZsYWdzICYgVkNTMlJFTUFQKSAmJiB2ZXJib3NlKQotCQlw cmludGYoIkJDUyB1c2FnZSBpbiB3b3JrbG9hZCB3aXRoIFZDUzIgcmVtYXBwaW5nIGVuYWJsZWQh XG4iKTsKLQogCXJldHVybiB3cms7CiB9CiAKQEAgLTExNDcsNyArMTA1OCw3IEBAIHN0YXRpYyB1 bnNpZ25lZCBpbnQgZ2V0X2R1cmF0aW9uKHN0cnVjdCB3b3JrbG9hZCAqd3JrLCBzdHJ1Y3Qgd19z dGVwICp3KQogc3RhdGljIHN0cnVjdCBjdHggKgogX19nZXRfY3R4KHN0cnVjdCB3b3JrbG9hZCAq d3JrLCBjb25zdCBzdHJ1Y3Qgd19zdGVwICp3KQogewotCXJldHVybiAmd3JrLT5jdHhfbGlzdFt3 LT5jb250ZXh0ICogMl07CisJcmV0dXJuICZ3cmstPmN0eF9saXN0W3ctPmNvbnRleHRdOwogfQog CiBzdGF0aWMgdW5zaWduZWQgbG9uZwpAQCAtMTIxMSwxMyArMTEyMiw3IEBAIHRlcm1pbmF0ZV9i YihzdHJ1Y3Qgd19zdGVwICp3LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiAJdW5zaWduZWQgaW50IHIg PSAwOwogCXVpbnQzMl90ICpwdHIsICpjczsKIAotCWlndF9hc3NlcnQoKChmbGFncyAmIFJUKSAm JiAoZmxhZ3MgJiBTRVFOTykpIHx8ICEoZmxhZ3MgJiBSVCkpOwotCiAJYmF0Y2hfc3RhcnQgLT0g c2l6ZW9mKHVpbnQzMl90KTsgLyogYmJlbmQgKi8KLQlpZiAoZmxhZ3MgJiBTRVFOTykKLQkJYmF0 Y2hfc3RhcnQgLT0gNCAqIHNpemVvZih1aW50MzJfdCk7Ci0JaWYgKGZsYWdzICYgUlQpCi0JCWJh dGNoX3N0YXJ0IC09IDEyICogc2l6ZW9mKHVpbnQzMl90KTsKIAogCWlmICh3LT51bmJvdW5kX2R1 cmF0aW9uKQogCQliYXRjaF9zdGFydCAtPSA0ICogc2l6ZW9mKHVpbnQzMl90KTsgLyogTUlfQVJC X0NISyArIE1JX0JBVENIX0JVRkZFUl9TVEFSVCAqLwpAQCAtMTI0Miw0OSArMTE0Nyw2IEBAIHRl cm1pbmF0ZV9iYihzdHJ1Y3Qgd19zdGVwICp3LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiAJCSpjcysr ID0gMDsKIAl9CiAKLQlpZiAoZmxhZ3MgJiBTRVFOTykgewotCQl3LT5yZWxvY1tyKytdLm9mZnNl dCA9IGJhdGNoX3N0YXJ0ICsgc2l6ZW9mKHVpbnQzMl90KTsKLQkJYmF0Y2hfc3RhcnQgKz0gNCAq IHNpemVvZih1aW50MzJfdCk7Ci0KLQkJKmNzKysgPSBNSV9TVE9SRV9EV09SRF9JTU07Ci0JCXct PnNlcW5vX2FkZHJlc3MgPSBjczsKLQkJKmNzKysgPSAwOwotCQkqY3MrKyA9IDA7Ci0JCXctPnNl cW5vX3ZhbHVlID0gY3M7Ci0JCSpjcysrID0gMDsKLQl9Ci0KLQlpZiAoZmxhZ3MgJiBSVCkgewot CQl3LT5yZWxvY1tyKytdLm9mZnNldCA9IGJhdGNoX3N0YXJ0ICsgc2l6ZW9mKHVpbnQzMl90KTsK LQkJYmF0Y2hfc3RhcnQgKz0gNCAqIHNpemVvZih1aW50MzJfdCk7Ci0KLQkJKmNzKysgPSBNSV9T VE9SRV9EV09SRF9JTU07Ci0JCXctPnJ0MF9hZGRyZXNzID0gY3M7Ci0JCSpjcysrID0gMDsKLQkJ KmNzKysgPSAwOwotCQl3LT5ydDBfdmFsdWUgPSBjczsKLQkJKmNzKysgPSAwOwotCi0JCXctPnJl bG9jW3IrK10ub2Zmc2V0ID0gYmF0Y2hfc3RhcnQgKyAyICogc2l6ZW9mKHVpbnQzMl90KTsKLQkJ YmF0Y2hfc3RhcnQgKz0gNCAqIHNpemVvZih1aW50MzJfdCk7Ci0KLQkJKmNzKysgPSAweDI0IDw8 IDIzIHwgMjsgLyogTUlfU1RPUkVfUkVHX01FTSAqLwotCQkqY3MrKyA9IFJDU19USU1FU1RBTVA7 Ci0JCXctPnJ0MV9hZGRyZXNzID0gY3M7Ci0JCSpjcysrID0gMDsKLQkJKmNzKysgPSAwOwotCi0J CXctPnJlbG9jW3IrK10ub2Zmc2V0ID0gYmF0Y2hfc3RhcnQgKyBzaXplb2YodWludDMyX3QpOwot CQliYXRjaF9zdGFydCArPSA0ICogc2l6ZW9mKHVpbnQzMl90KTsKLQotCQkqY3MrKyA9IE1JX1NU T1JFX0RXT1JEX0lNTTsKLQkJdy0+bGF0Y2hfYWRkcmVzcyA9IGNzOwotCQkqY3MrKyA9IDA7Ci0J CSpjcysrID0gMDsKLQkJdy0+bGF0Y2hfdmFsdWUgPSBjczsKLQkJKmNzKysgPSAwOwotCX0KLQog CSpjcyA9IGJiZTsKIAogCXJldHVybiByOwpAQCAtMTMwNSwxMyArMTE2Nyw3IEBAIGViX3NldF9l bmdpbmUoc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiAqZWIsCiAJICAgICAgZW51bSBp bnRlbF9lbmdpbmVfaWQgZW5naW5lLAogCSAgICAgIHVuc2lnbmVkIGludCBmbGFncykKIHsKLQlp ZiAoZW5naW5lID09IFZDUzIgJiYgKGZsYWdzICYgVkNTMlJFTUFQKSkKLQkJZW5naW5lID0gQkNT OwotCi0JaWYgKChmbGFncyAmIEk5MTUpICYmIGVuZ2luZSA9PSBWQ1MpCi0JCWViLT5mbGFncyA9 IDA7Ci0JZWxzZQotCQllYi0+ZmxhZ3MgPSBlYl9lbmdpbmVfbWFwW2VuZ2luZV07CisJZWItPmZs YWdzID0gZWJfZW5naW5lX21hcFtlbmdpbmVdOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50CkBA IC0xMzI0LDcgKzExODAsNyBAQCBmaW5kX2VuZ2luZV9pbl9tYXAoc3RydWN0IGN0eCAqY3R4LCBl bnVtIGludGVsX2VuZ2luZV9pZCBlbmdpbmUpCiAJCQlyZXR1cm4gaSArIDE7CiAJfQogCi0JaWd0 X2Fzc2VydChjdHgtPndhbnRzX2JhbGFuY2UpOworCWlndF9hc3NlcnQoY3R4LT5sb2FkX2JhbGFu Y2UpOwogCXJldHVybiAwOwogfQogCkBAIC0xMzQ3LDI0ICsxMjAzLDEwIEBAIGViX3VwZGF0ZV9m bGFncyhzdHJ1Y3Qgd29ya2xvYWQgKndyaywgc3RydWN0IHdfc3RlcCAqdywKIAkJdy0+ZWIuZmxh Z3MgfD0gSTkxNV9FWEVDX0ZFTkNFX09VVDsKIH0KIAotc3RhdGljIHN0cnVjdCBkcm1faTkxNV9n ZW1fZXhlY19vYmplY3QyICoKLWdldF9zdGF0dXNfb2JqZWN0cyhzdHJ1Y3Qgd29ya2xvYWQgKndy aykKLXsKLQlpZiAod3JrLT5mbGFncyAmIEdMT0JBTF9CQUxBTkNFKQotCQlyZXR1cm4gd3JrLT5n bG9iYWxfd3JrLT5zdGF0dXNfb2JqZWN0OwotCWVsc2UKLQkJcmV0dXJuIHdyay0+c3RhdHVzX29i amVjdDsKLX0KLQogc3RhdGljIHVpbnQzMl90CiBnZXRfY3R4aWQoc3RydWN0IHdvcmtsb2FkICp3 cmssIHN0cnVjdCB3X3N0ZXAgKncpCiB7Ci0Jc3RydWN0IGN0eCAqY3R4ID0gX19nZXRfY3R4KHdy aywgdyk7Ci0KLQlpZiAoY3R4LT50YXJnZXRzX2luc3RhbmNlICYmIGN0eC0+d2FudHNfYmFsYW5j ZSAmJiB3LT5lbmdpbmUgPT0gVkNTKQotCQlyZXR1cm4gd3JrLT5jdHhfbGlzdFt3LT5jb250ZXh0 ICogMiArIDFdLmlkOwotCWVsc2UKLQkJcmV0dXJuIHdyay0+Y3R4X2xpc3Rbdy0+Y29udGV4dCAq IDJdLmlkOworCXJldHVybiB3cmstPmN0eF9saXN0W3ctPmNvbnRleHRdLmlkOwogfQogCiBzdGF0 aWMgdm9pZApAQCAtMTM3Miw3ICsxMjE0LDcgQEAgYWxsb2Nfc3RlcF9iYXRjaChzdHJ1Y3Qgd29y a2xvYWQgKndyaywgc3RydWN0IHdfc3RlcCAqdywgdW5zaWduZWQgaW50IGZsYWdzKQogewogCWVu dW0gaW50ZWxfZW5naW5lX2lkIGVuZ2luZSA9IHctPmVuZ2luZTsKIAl1bnNpZ25lZCBpbnQgaiA9 IDA7Ci0JdW5zaWduZWQgaW50IG5yX29iaiA9IDMgKyB3LT5kYXRhX2RlcHMubnI7CisJdW5zaWdu ZWQgaW50IG5yX29iaiA9IDIgKyB3LT5kYXRhX2RlcHMubnI7CiAJdW5zaWduZWQgaW50IGk7CiAK IAl3LT5vYmogPSBjYWxsb2MobnJfb2JqLCBzaXplb2YoKnctPm9iaikpOwpAQCAtMTM4MywxMSAr MTIyNSw2IEBAIGFsbG9jX3N0ZXBfYmF0Y2goc3RydWN0IHdvcmtsb2FkICp3cmssIHN0cnVjdCB3 X3N0ZXAgKncsIHVuc2lnbmVkIGludCBmbGFncykKIAlqKys7CiAJaWd0X2Fzc2VydChqIDwgbnJf b2JqKTsKIAotCWlmIChmbGFncyAmIFNFUU5PKSB7Ci0JCXctPm9ialtqKytdID0gZ2V0X3N0YXR1 c19vYmplY3RzKHdyaylbMF07Ci0JCWlndF9hc3NlcnQoaiA8IG5yX29iaik7Ci0JfQotCiAJZm9y IChpID0gMDsgaSA8IHctPmRhdGFfZGVwcy5ucjsgaSsrKSB7CiAJCWlndF9hc3NlcnQody0+ZGF0 YV9kZXBzLmxpc3RbaV0gPD0gMCk7CiAJCWlmICh3LT5kYXRhX2RlcHMubGlzdFtpXSkgewpAQCAt MTQxNCwyMSArMTI1MSwxNSBAQCBhbGxvY19zdGVwX2JhdGNoKHN0cnVjdCB3b3JrbG9hZCAqd3Jr LCBzdHJ1Y3Qgd19zdGVwICp3LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiAJdy0+b2JqW2pdLnJlbG9j YXRpb25fY291bnQgPSB0ZXJtaW5hdGVfYmIodywgZmxhZ3MpOwogCiAJaWYgKHctPm9ialtqXS5y ZWxvY2F0aW9uX2NvdW50KSB7CisJCWlndF9hc3NlcnQody0+dW5ib3VuZF9kdXJhdGlvbik7CiAJ CXctPm9ialtqXS5yZWxvY3NfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZ3LT5yZWxvYyk7Ci0JCWZv ciAoaSA9IDA7IGkgPCB3LT5vYmpbal0ucmVsb2NhdGlvbl9jb3VudDsgaSsrKQotCQkJdy0+cmVs b2NbaV0udGFyZ2V0X2hhbmRsZSA9IDE7Ci0JCWlmICh3LT51bmJvdW5kX2R1cmF0aW9uKQotCQkJ dy0+cmVsb2NbMF0udGFyZ2V0X2hhbmRsZSA9IGo7CisJCXctPnJlbG9jWzBdLnRhcmdldF9oYW5k bGUgPSBqOwogCX0KIAogCXctPmViLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKHctPm9i aik7CiAJdy0+ZWIuYnVmZmVyX2NvdW50ID0gaiArIDE7CiAJdy0+ZWIucnN2ZDEgPSBnZXRfY3R4 aWQod3JrLCB3KTsKIAotCWlmIChmbGFncyAmIFNXQVBWQ1MgJiYgZW5naW5lID09IFZDUzEpCi0J CWVuZ2luZSA9IFZDUzI7Ci0JZWxzZSBpZiAoZmxhZ3MgJiBTV0FQVkNTICYmIGVuZ2luZSA9PSBW Q1MyKQotCQllbmdpbmUgPSBWQ1MxOwogCWViX3VwZGF0ZV9mbGFncyh3cmssIHcsIGVuZ2luZSwg ZmxhZ3MpOwogI2lmZGVmIERFQlVHCiAJcHJpbnRmKCIldTogJXU6fCIsIHctPmlkeCwgdy0+ZWIu YnVmZmVyX2NvdW50KTsKQEAgLTE1MjgsNyArMTM1OSw3IEBAIHNldF9jdHhfc3NldShzdHJ1Y3Qg Y3R4ICpjdHgsIHVpbnQ2NF90IHNsaWNlX21hc2spCiAJaWYgKHNsaWNlX21hc2sgPT0gLTEpCiAJ CXNsaWNlX21hc2sgPSBkZXZpY2Vfc3NldS5zbGljZV9tYXNrOwogCi0JaWYgKGN0eC0+ZW5naW5l X21hcCAmJiBjdHgtPndhbnRzX2JhbGFuY2UpIHsKKwlpZiAoY3R4LT5lbmdpbmVfbWFwICYmIGN0 eC0+bG9hZF9iYWxhbmNlKSB7CiAJCXNzZXUuZmxhZ3MgPSBJOTE1X0NPTlRFWFRfU1NFVV9GTEFH X0VOR0lORV9JTkRFWDsKIAkJc3NldS5lbmdpbmUuZW5naW5lX2NsYXNzID0gSTkxNV9FTkdJTkVf Q0xBU1NfSU5WQUxJRDsKIAkJc3NldS5lbmdpbmUuZW5naW5lX2luc3RhbmNlID0gMDsKQEAgLTE1 NjksNDggKzE0MDAsMjAgQEAgc3RhdGljIHNpemVfdCBzaXplb2ZfZW5naW5lc19ib25kKGludCBj b3VudCkKIHN0YXRpYyBpbnQKIHByZXBhcmVfd29ya2xvYWQodW5zaWduZWQgaW50IGlkLCBzdHJ1 Y3Qgd29ya2xvYWQgKndyaywgdW5zaWduZWQgaW50IGZsYWdzKQogewotCXVuc2lnbmVkIGludCBj dHhfdmNzOworCXVpbnQzMl90IHNoYXJlX3ZtID0gMDsKIAlpbnQgbWF4X2N0eCA9IC0xOwogCXN0 cnVjdCB3X3N0ZXAgKnc7CiAJaW50IGksIGo7CiAKIAl3cmstPmlkID0gaWQ7Ci0Jd3JrLT5wcm5n ID0gcmFuZCgpOwogCXdyay0+YmJfcHJuZyA9ICh3cmstPmZsYWdzICYgU1lOQ0VEQ0xJRU5UUykg PyBtYXN0ZXJfcHJuZyA6IHJhbmQoKTsKIAl3cmstPnJ1biA9IHRydWU7CiAKLQljdHhfdmNzID0g IDA7Ci0JaWYgKGZsYWdzICYgSU5JVFZDU1JSKQotCQljdHhfdmNzID0gaWQgJiAxOwotCXdyay0+ dmNzX3JyID0gY3R4X3ZjczsKLQotCWlmIChmbGFncyAmIEdMT0JBTF9CQUxBTkNFKSB7Ci0JCWlu dCByZXQgPSBwdGhyZWFkX211dGV4X2luaXQoJndyay0+bXV0ZXgsIE5VTEwpOwotCQlpZ3RfYXNz ZXJ0KHJldCA9PSAwKTsKLQl9Ci0KLQlpZiAoZmxhZ3MgJiBTRVFOTykgewotCQlpZiAoIShmbGFn cyAmIEdMT0JBTF9CQUxBTkNFKSB8fCBpZCA9PSAwKSB7Ci0JCQl1aW50MzJfdCBoYW5kbGU7Ci0K LQkJCWhhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIDQwOTYpOwotCQkJZ2VtX3NldF9jYWNoaW5nKGZk LCBoYW5kbGUsIEk5MTVfQ0FDSElOR19DQUNIRUQpOwotCQkJd3JrLT5zdGF0dXNfb2JqZWN0WzBd LmhhbmRsZSA9IGhhbmRsZTsKLQkJCXdyay0+c3RhdHVzX3BhZ2UgPSBnZW1fbW1hcF9fY3B1KGZk LCBoYW5kbGUsIDAsIDQwOTYsCi0JCQkJCQkJIFBST1RfUkVBRCk7Ci0KLQkJCWhhbmRsZSA9IGdl bV9jcmVhdGUoZmQsIDQwOTYpOwotCQkJd3JrLT5zdGF0dXNfb2JqZWN0WzFdLmhhbmRsZSA9IGhh bmRsZTsKLQkJCXdyay0+c3RhdHVzX2NzID0gZ2VtX21tYXBfX3djKGZkLCBoYW5kbGUsCi0JCQkJ CQkgICAgICAwLCA0MDk2LCBQUk9UX1dSSVRFKTsKLQkJfQotCX0KLQogCS8qCiAJICogUHJlLXNj YW4gd29ya2xvYWQgc3RlcHMgdG8gYWxsb2NhdGUgY29udGV4dCBsaXN0IHN0b3JhZ2UuCiAJICov CiAJZm9yIChpID0gMCwgdyA9IHdyay0+c3RlcHM7IGkgPCB3cmstPm5yX3N0ZXBzOyBpKyssIHcr KykgewotCQlpbnQgY3R4ID0gdy0+Y29udGV4dCAqIDIgKyAxOyAvKiBPZGQgc2xvdHMgYXJlIHNw ZWNpYWwuICovCisJCWludCBjdHggPSB3LT5jb250ZXh0ICsgMTsKIAkJaW50IGRlbHRhOwogCiAJ CXctPndyayA9IHdyazsKQEAgLTE2MzAsMjcgKzE0MzMsMTYgQEAgcHJlcGFyZV93b3JrbG9hZCh1 bnNpZ25lZCBpbnQgaWQsIHN0cnVjdCB3b3JrbG9hZCAqd3JrLCB1bnNpZ25lZCBpbnQgZmxhZ3Mp CiAJfQogCiAJLyoKLQkgKiBJZGVudGlmeSBpZiBjb250ZXh0cyB0YXJnZXQgc3BlY2lmaWMgZW5n aW5lIGluc3RhbmNlcyBhbmQgaWYgdGhleQotCSAqIHdhbnQgdG8gYmUgYmFsYW5jZWQuCi0JICoK IAkgKiBUcmFuc2ZlciBvdmVyIGVuZ2luZSBtYXAgY29uZmlndXJhdGlvbiBmcm9tIHRoZSB3b3Jr bG9hZCBzdGVwLgogCSAqLwotCWZvciAoaiA9IDA7IGogPCB3cmstPm5yX2N0eHM7IGogKz0gMikg eworCWZvciAoaiA9IDA7IGogPCB3cmstPm5yX2N0eHM7IGorKykgewogCQlzdHJ1Y3QgY3R4ICpj dHggPSAmd3JrLT5jdHhfbGlzdFtqXTsKIAotCQlib29sIHRhcmdldHMgPSBmYWxzZTsKLQkJYm9v bCBiYWxhbmNlID0gZmFsc2U7Ci0KIAkJZm9yIChpID0gMCwgdyA9IHdyay0+c3RlcHM7IGkgPCB3 cmstPm5yX3N0ZXBzOyBpKyssIHcrKykgewotCQkJaWYgKHctPmNvbnRleHQgIT0gKGogLyAyKSkK KwkJCWlmICh3LT5jb250ZXh0ICE9IGopCiAJCQkJY29udGludWU7CiAKLQkJCWlmICh3LT50eXBl ID09IEJBVENIKSB7Ci0JCQkJaWYgKHctPmVuZ2luZSA9PSBWQ1MpCi0JCQkJCWJhbGFuY2UgPSB0 cnVlOwotCQkJCWVsc2UKLQkJCQkJdGFyZ2V0cyA9IHRydWU7Ci0JCQl9IGVsc2UgaWYgKHctPnR5 cGUgPT0gRU5HSU5FX01BUCkgeworCQkJaWYgKHctPnR5cGUgPT0gRU5HSU5FX01BUCkgewogCQkJ CWN0eC0+ZW5naW5lX21hcCA9IHctPmVuZ2luZV9tYXA7CiAJCQkJY3R4LT5lbmdpbmVfbWFwX2Nv dW50ID0gdy0+ZW5naW5lX21hcF9jb3VudDsKIAkJCX0gZWxzZSBpZiAody0+dHlwZSA9PSBMT0FE X0JBTEFOQ0UpIHsKQEAgLTE2NTgsOSArMTQ1MCw5IEBAIHByZXBhcmVfd29ya2xvYWQodW5zaWdu ZWQgaW50IGlkLCBzdHJ1Y3Qgd29ya2xvYWQgKndyaywgdW5zaWduZWQgaW50IGZsYWdzKQogCQkJ CQl3c2ltX2VycigiTG9hZCBiYWxhbmNpbmcgbmVlZHMgYW4gZW5naW5lIG1hcCFcbiIpOwogCQkJ CQlyZXR1cm4gMTsKIAkJCQl9Ci0JCQkJY3R4LT53YW50c19iYWxhbmNlID0gdy0+bG9hZF9iYWxh bmNlOworCQkJCWN0eC0+bG9hZF9iYWxhbmNlID0gdy0+bG9hZF9iYWxhbmNlOwogCQkJfSBlbHNl IGlmICh3LT50eXBlID09IEJPTkQpIHsKLQkJCQlpZiAoIWN0eC0+d2FudHNfYmFsYW5jZSkgewor CQkJCWlmICghY3R4LT5sb2FkX2JhbGFuY2UpIHsKIAkJCQkJd3NpbV9lcnIoIkVuZ2luZSBib25k cyBuZWVkIGxvYWQgYmFsYW5jaW5nIGVuZ2luZSBtYXAhXG4iKTsKIAkJCQkJcmV0dXJuIDE7CiAJ CQkJfQpAQCAtMTY3NSwxMzMgKzE0NjcsNTMgQEAgcHJlcGFyZV93b3JrbG9hZCh1bnNpZ25lZCBp bnQgaWQsIHN0cnVjdCB3b3JrbG9hZCAqd3JrLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiAJCQkJCXct PmJvbmRfbWFzdGVyOwogCQkJfQogCQl9Ci0KLQkJd3JrLT5jdHhfbGlzdFtqXS50YXJnZXRzX2lu c3RhbmNlID0gdGFyZ2V0czsKLQkJaWYgKGZsYWdzICYgSTkxNSkKLQkJCXdyay0+Y3R4X2xpc3Rb al0ud2FudHNfYmFsYW5jZSB8PSBiYWxhbmNlOwotCX0KLQotCS8qCi0JICogRW5zdXJlIFZDUyBp cyBub3QgYWxsb3dlZCB3aXRoIGVuZ2luZSBtYXAgY29udGV4dHMuCi0JICovCi0JZm9yIChqID0g MDsgaiA8IHdyay0+bnJfY3R4czsgaiArPSAyKSB7Ci0JCWZvciAoaSA9IDAsIHcgPSB3cmstPnN0 ZXBzOyBpIDwgd3JrLT5ucl9zdGVwczsgaSsrLCB3KyspIHsKLQkJCWlmICh3LT5jb250ZXh0ICE9 IChqIC8gMikpCi0JCQkJY29udGludWU7Ci0KLQkJCWlmICh3LT50eXBlICE9IEJBVENIKQotCQkJ CWNvbnRpbnVlOwotCi0JCQlpZiAod3JrLT5jdHhfbGlzdFtqXS5lbmdpbmVfbWFwICYmCi0JCQkg ICAgIXdyay0+Y3R4X2xpc3Rbal0ud2FudHNfYmFsYW5jZSAmJgotCQkJICAgICh3LT5lbmdpbmUg PT0gVkNTIHx8IHctPmVuZ2luZSA9PSBERUZBVUxUKSkgewotCQkJCXdzaW1fZXJyKCJCYXRjaGVz IHRhcmdldHRpbmcgZW5naW5lIG1hcHMgbXVzdCB1c2UgZXhwbGljaXQgZW5naW5lcyFcbiIpOwot CQkJCXJldHVybiAtMTsKLQkJCX0KLQkJfQogCX0KIAotCiAJLyoKIAkgKiBDcmVhdGUgYW5kIGNv bmZpZ3VyZSBjb250ZXh0cy4KIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgd3JrLT5ucl9jdHhzOyBp ICs9IDIpIHsKKwlmb3IgKGkgPSAwOyBpIDwgd3JrLT5ucl9jdHhzOyBpKyspIHsKKwkJc3RydWN0 IGRybV9pOTE1X2dlbV9jb250ZXh0X2NyZWF0ZV9leHRfc2V0cGFyYW0gZXh0ID0geworCQkJLmJh c2UubmFtZSA9IEk5MTVfQ09OVEVYVF9DUkVBVEVfRVhUX1NFVFBBUkFNLAorCQkJLnBhcmFtLnBh cmFtID0gSTkxNV9DT05URVhUX1BBUkFNX1ZNLAorCQl9OworCQlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X2NvbnRleHRfY3JlYXRlX2V4dCBhcmdzID0geyB9OwogCQlzdHJ1Y3QgY3R4ICpjdHggPSAmd3Jr LT5jdHhfbGlzdFtpXTsKLQkJdWludDMyX3QgY3R4X2lkLCBzaGFyZV92bSA9IDA7CisJCXVpbnQz Ml90IGN0eF9pZDsKIAotCQlpZiAoY3R4LT5pZCkKLQkJCWNvbnRpbnVlOworCQlpZ3RfYXNzZXJ0 KCFjdHgtPmlkKTsKIAotCQlpZiAoKGZsYWdzICYgSTkxNSkgfHwgY3R4LT5lbmdpbmVfbWFwKSB7 Ci0JCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfY3JlYXRlX2V4dF9zZXRwYXJhbSBleHQg PSB7Ci0JCQkJLmJhc2UubmFtZSA9IEk5MTVfQ09OVEVYVF9DUkVBVEVfRVhUX1NFVFBBUkFNLAot CQkJCS5wYXJhbS5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9WTSwKKwkJLyogRmluZCBleGlz dGluZyBjb250ZXh0IHRvIHNoYXJlIHBwZ3R0IHdpdGguICovCisJCWZvciAoaiA9IDA7ICFzaGFy ZV92bSAmJiBqIDwgd3JrLT5ucl9jdHhzOyBqKyspIHsKKwkJCXN0cnVjdCBkcm1faTkxNV9nZW1f Y29udGV4dF9wYXJhbSBwYXJhbSA9IHsKKwkJCQkucGFyYW0gPSBJOTE1X0NPTlRFWFRfUEFSQU1f Vk0sCisJCQkJLmN0eF9pZCA9IHdyay0+Y3R4X2xpc3Rbal0uaWQsCiAJCQl9OwotCQkJc3RydWN0 IGRybV9pOTE1X2dlbV9jb250ZXh0X2NyZWF0ZV9leHQgYXJncyA9IHsgfTsKLQotCQkJLyogRmlu ZCBleGlzdGluZyBjb250ZXh0IHRvIHNoYXJlIHBwZ3R0IHdpdGguICovCi0JCQlmb3IgKGogPSAw OyBqIDwgd3JrLT5ucl9jdHhzOyBqKyspIHsKLQkJCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRl eHRfcGFyYW0gcGFyYW0gPSB7Ci0JCQkJCS5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9WTSwK LQkJCQl9OwotCi0JCQkJaWYgKCF3cmstPmN0eF9saXN0W2pdLmlkKQotCQkJCQljb250aW51ZTsK IAotCQkJCXBhcmFtLmN0eF9pZCA9IHdyay0+Y3R4X2xpc3Rbal0uaWQ7Ci0KLQkJCQlnZW1fY29u dGV4dF9nZXRfcGFyYW0oZmQsICZwYXJhbSk7Ci0JCQkJaWd0X2Fzc2VydChwYXJhbS52YWx1ZSk7 Ci0KLQkJCQlzaGFyZV92bSA9IHBhcmFtLnZhbHVlOwotCi0JCQkJZXh0LnBhcmFtLnZhbHVlID0g c2hhcmVfdm07Ci0JCQkJYXJncy5mbGFncyA9Ci0JCQkJICAgIEk5MTVfQ09OVEVYVF9DUkVBVEVf RkxBR1NfVVNFX0VYVEVOU0lPTlM7Ci0JCQkJYXJncy5leHRlbnNpb25zID0gdG9fdXNlcl9wb2lu dGVyKCZleHQpOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQlpZiAoKCFjdHgtPmVuZ2luZV9tYXAg JiYgIWN0eC0+dGFyZ2V0c19pbnN0YW5jZSkgfHwKLQkJCSAgICAoY3R4LT5lbmdpbmVfbWFwICYm IGN0eC0+d2FudHNfYmFsYW5jZSkpCi0JCQkJYXJncy5mbGFncyB8PQotCQkJCSAgICAgSTkxNV9D T05URVhUX0NSRUFURV9GTEFHU19TSU5HTEVfVElNRUxJTkU7Ci0KLQkJCWRybUlvY3RsKGZkLCBE Uk1fSU9DVExfSTkxNV9HRU1fQ09OVEVYVF9DUkVBVEVfRVhULAotCQkJCSAmYXJncyk7CisJCQlp ZiAoIXBhcmFtLmN0eF9pZCkKKwkJCQljb250aW51ZTsKIAotCQkJY3R4X2lkID0gYXJncy5jdHhf aWQ7Ci0JCX0gZWxzZSB7Ci0JCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfY3JlYXRlIGFy Z3MgPSB7fTsKKwkJCWdlbV9jb250ZXh0X2dldF9wYXJhbShmZCwgJnBhcmFtKTsKKwkJCWlndF9h c3NlcnQocGFyYW0udmFsdWUpOworCQkJc2hhcmVfdm0gPSBwYXJhbS52YWx1ZTsKKwkJCWJyZWFr OworCQl9CiAKLQkJCWRybUlvY3RsKGZkLCBEUk1fSU9DVExfSTkxNV9HRU1fQ09OVEVYVF9DUkVB VEUsICZhcmdzKTsKLQkJCWN0eF9pZCA9IGFyZ3MuY3R4X2lkOworCQlpZiAoc2hhcmVfdm0pIHsK KwkJCWV4dC5wYXJhbS52YWx1ZSA9IHNoYXJlX3ZtOworCQkJYXJncy5mbGFncyA9IEk5MTVfQ09O VEVYVF9DUkVBVEVfRkxBR1NfVVNFX0VYVEVOU0lPTlM7CisJCQlhcmdzLmV4dGVuc2lvbnMgPSB0 b191c2VyX3BvaW50ZXIoJmV4dCk7CiAJCX0KIAotCQlpZ3RfYXNzZXJ0KGN0eF9pZCk7CisJCWRy bUlvY3RsKGZkLCBEUk1fSU9DVExfSTkxNV9HRU1fQ09OVEVYVF9DUkVBVEVfRVhULCAmYXJncyk7 CisJCWlndF9hc3NlcnQoYXJncy5jdHhfaWQpOworCisJCWN0eF9pZCA9IGFyZ3MuY3R4X2lkOwog CQljdHgtPmlkID0gY3R4X2lkOwogCQljdHgtPnNzZXUgPSBkZXZpY2Vfc3NldS5zbGljZV9tYXNr OwogCi0JCWlmIChmbGFncyAmIEdMT0JBTF9CQUxBTkNFKSB7Ci0JCQljdHgtPnN0YXRpY192Y3Mg PSBjb250ZXh0X3Zjc19ycjsKLQkJCWNvbnRleHRfdmNzX3JyIF49IDE7Ci0JCX0gZWxzZSB7Ci0J CQljdHgtPnN0YXRpY192Y3MgPSBjdHhfdmNzOwotCQkJY3R4X3ZjcyBePSAxOwotCQl9Ci0KIAkJ X19jb25maWd1cmVfY29udGV4dChjdHhfaWQsIHdyay0+cHJpbyk7CiAKLQkJLyoKLQkJICogRG8g d2UgbmVlZCBhIHNlcGFyYXRlIGNvbnRleHQgdG8gc2F0aXNmeSB0aGlzIHdvcmtsb2FkcyB3aGlj aAotCQkgKiBib3RoIHdhbnQgdG8gdGFyZ2V0IHNwZWNpZmljIGVuZ2luZXMgYW5kIGJlIGJhbGFu Y2VkIGJ5IGk5MTU/Ci0JCSAqLwotCQlpZiAoKGZsYWdzICYgSTkxNSkgJiYgY3R4LT53YW50c19i YWxhbmNlICYmCi0JCSAgICBjdHgtPnRhcmdldHNfaW5zdGFuY2UgJiYgIWN0eC0+ZW5naW5lX21h cCkgewotCQkJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X2NyZWF0ZV9leHRfc2V0cGFyYW0g ZXh0ID0gewotCQkJCS5iYXNlLm5hbWUgPSBJOTE1X0NPTlRFWFRfQ1JFQVRFX0VYVF9TRVRQQVJB TSwKLQkJCQkucGFyYW0ucGFyYW0gPSBJOTE1X0NPTlRFWFRfUEFSQU1fVk0sCi0JCQkJLnBhcmFt LnZhbHVlID0gc2hhcmVfdm0sCi0JCQl9OwotCQkJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0 X2NyZWF0ZV9leHQgYXJncyA9IHsKLQkJCQkuZXh0ZW5zaW9ucyA9IHRvX3VzZXJfcG9pbnRlcigm ZXh0KSwKLQkJCQkuZmxhZ3MgPQotCQkJCSAgICBJOTE1X0NPTlRFWFRfQ1JFQVRFX0ZMQUdTX1VT RV9FWFRFTlNJT05TIHwKLQkJCQkgICAgSTkxNV9DT05URVhUX0NSRUFURV9GTEFHU19TSU5HTEVf VElNRUxJTkUsCi0JCQl9OwotCi0JCQlpZ3RfYXNzZXJ0KHNoYXJlX3ZtKTsKLQotCQkJZHJtSW9j dGwoZmQsIERSTV9JT0NUTF9JOTE1X0dFTV9DT05URVhUX0NSRUFURV9FWFQsCi0JCQkJICZhcmdz KTsKLQotCQkJaWd0X2Fzc2VydChhcmdzLmN0eF9pZCk7Ci0JCQljdHhfaWQgPSBhcmdzLmN0eF9p ZDsKLQkJCXdyay0+Y3R4X2xpc3RbaSArIDFdLmlkID0gYXJncy5jdHhfaWQ7Ci0KLQkJCV9fY29u ZmlndXJlX2NvbnRleHQoY3R4X2lkLCB3cmstPnByaW8pOwotCQl9Ci0KIAkJaWYgKGN0eC0+ZW5n aW5lX21hcCkgewogCQkJc3RydWN0IGk5MTVfY29udGV4dF9wYXJhbV9lbmdpbmVzICpzZXRfZW5n aW5lcyA9CiAJCQkJYWxsb2NhMChzaXplb2ZfcGFyYW1fZW5naW5lcyhjdHgtPmVuZ2luZV9tYXBf Y291bnQgKyAxKSk7CkBAIC0xODE1LDcgKzE1MjcsNyBAQCBwcmVwYXJlX3dvcmtsb2FkKHVuc2ln bmVkIGludCBpZCwgc3RydWN0IHdvcmtsb2FkICp3cmssIHVuc2lnbmVkIGludCBmbGFncykKIAkJ CX07CiAJCQlzdHJ1Y3QgaTkxNV9jb250ZXh0X2VuZ2luZXNfYm9uZCAqbGFzdCA9IE5VTEw7CiAK LQkJCWlmIChjdHgtPndhbnRzX2JhbGFuY2UpIHsKKwkJCWlmIChjdHgtPmxvYWRfYmFsYW5jZSkg ewogCQkJCXNldF9lbmdpbmVzLT5leHRlbnNpb25zID0KIAkJCQkJdG9fdXNlcl9wb2ludGVyKGxv YWRfYmFsYW5jZSk7CiAKQEAgLTE4NjksMzQgKzE1ODEsNiBAQCBwcmVwYXJlX3dvcmtsb2FkKHVu c2lnbmVkIGludCBpZCwgc3RydWN0IHdvcmtsb2FkICp3cmssIHVuc2lnbmVkIGludCBmbGFncykK IAkJCX0KIAkJCWxvYWRfYmFsYW5jZS0+YmFzZS5uZXh0X2V4dGVuc2lvbiA9IHRvX3VzZXJfcG9p bnRlcihsYXN0KTsKIAotCQkJZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCAmcGFyYW0pOwotCQl9 IGVsc2UgaWYgKGN0eC0+d2FudHNfYmFsYW5jZSkgewotCQkJY29uc3QgdW5zaWduZWQgaW50IGNv dW50ID0gbnVtX2VuZ2luZXNfaW5fY2xhc3MoVkNTKTsKLQkJCXN0cnVjdCBpOTE1X2NvbnRleHRf ZW5naW5lc19sb2FkX2JhbGFuY2UgKmxvYWRfYmFsYW5jZSA9Ci0JCQkJYWxsb2NhMChzaXplb2Zf bG9hZF9iYWxhbmNlKGNvdW50KSk7Ci0JCQlzdHJ1Y3QgaTkxNV9jb250ZXh0X3BhcmFtX2VuZ2lu ZXMgKnNldF9lbmdpbmVzID0KLQkJCQlhbGxvY2EwKHNpemVvZl9wYXJhbV9lbmdpbmVzKGNvdW50 ICsgMSkpOwotCQkJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIHBhcmFtID0gewot CQkJCS5jdHhfaWQgPSBjdHhfaWQsCi0JCQkJLnBhcmFtID0gSTkxNV9DT05URVhUX1BBUkFNX0VO R0lORVMsCi0JCQkJLnNpemUgPSBzaXplb2ZfcGFyYW1fZW5naW5lcyhjb3VudCArIDEpLAotCQkJ CS52YWx1ZSA9IHRvX3VzZXJfcG9pbnRlcihzZXRfZW5naW5lcyksCi0JCQl9OwotCi0JCQlzZXRf ZW5naW5lcy0+ZXh0ZW5zaW9ucyA9IHRvX3VzZXJfcG9pbnRlcihsb2FkX2JhbGFuY2UpOwotCi0J CQlzZXRfZW5naW5lcy0+ZW5naW5lc1swXS5lbmdpbmVfY2xhc3MgPQotCQkJCUk5MTVfRU5HSU5F X0NMQVNTX0lOVkFMSUQ7Ci0JCQlzZXRfZW5naW5lcy0+ZW5naW5lc1swXS5lbmdpbmVfaW5zdGFu Y2UgPQotCQkJCUk5MTVfRU5HSU5FX0NMQVNTX0lOVkFMSURfTk9ORTsKLQkJCWZpbGxfZW5naW5l c19jbGFzcygmc2V0X2VuZ2luZXMtPmVuZ2luZXNbMV0sIFZDUyk7Ci0KLQkJCWxvYWRfYmFsYW5j ZS0+YmFzZS5uYW1lID0KLQkJCQlJOTE1X0NPTlRFWFRfRU5HSU5FU19FWFRfTE9BRF9CQUxBTkNF OwotCQkJbG9hZF9iYWxhbmNlLT5udW1fc2libGluZ3MgPSBjb3VudDsKLQotCQkJZmlsbF9lbmdp bmVzX2NsYXNzKCZsb2FkX2JhbGFuY2UtPmVuZ2luZXNbMF0sIFZDUyk7Ci0KIAkJCWdlbV9jb250 ZXh0X3NldF9wYXJhbShmZCwgJnBhcmFtKTsKIAkJfQogCkBAIC0xOTA0LDExICsxNTg4LDExIEBA IHByZXBhcmVfd29ya2xvYWQodW5zaWduZWQgaW50IGlkLCBzdHJ1Y3Qgd29ya2xvYWQgKndyaywg dW5zaWduZWQgaW50IGZsYWdzKQogCQkJLyogU2V0IHRvIHNsaWNlIDAgb25seSwgb25lIHNsaWNl LiAqLwogCQkJY3R4LT5zc2V1ID0gc2V0X2N0eF9zc2V1KGN0eCwgMSk7CiAJCX0KLQotCQlpZiAo c2hhcmVfdm0pCi0JCQl2bV9kZXN0cm95KGZkLCBzaGFyZV92bSk7CiAJfQogCisJaWYgKHNoYXJl X3ZtKQorCQl2bV9kZXN0cm95KGZkLCBzaGFyZV92bSk7CisKIAkvKiBSZWNvcmQgZGVmYXVsdCBw cmVlbXB0aW9uLiAqLwogCWZvciAoaSA9IDAsIHcgPSB3cmstPnN0ZXBzOyBpIDwgd3JrLT5ucl9z dGVwczsgaSsrLCB3KyspIHsKIAkJaWYgKHctPnR5cGUgPT0gQkFUQ0gpCkBAIC0xOTU0LDE2ICsx NjM4LDEwIEBAIHByZXBhcmVfd29ya2xvYWQodW5zaWduZWQgaW50IGlkLCBzdHJ1Y3Qgd29ya2xv YWQgKndyaywgdW5zaWduZWQgaW50IGZsYWdzKQogCSAqIEFsbG9jYXRlIGJhdGNoIGJ1ZmZlcnMu CiAJICovCiAJZm9yIChpID0gMCwgdyA9IHdyay0+c3RlcHM7IGkgPCB3cmstPm5yX3N0ZXBzOyBp KyssIHcrKykgewotCQl1bnNpZ25lZCBpbnQgX2ZsYWdzID0gZmxhZ3M7Ci0JCWVudW0gaW50ZWxf ZW5naW5lX2lkIGVuZ2luZSA9IHctPmVuZ2luZTsKLQogCQlpZiAody0+dHlwZSAhPSBCQVRDSCkK IAkJCWNvbnRpbnVlOwogCi0JCWlmIChlbmdpbmUgPT0gVkNTKQotCQkJX2ZsYWdzICY9IH5TV0FQ VkNTOwotCi0JCWFsbG9jX3N0ZXBfYmF0Y2god3JrLCB3LCBfZmxhZ3MpOworCQlhbGxvY19zdGVw X2JhdGNoKHdyaywgdywgZmxhZ3MpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTk4MCw2MDIgKzE2 NTgsNiBAQCBzdGF0aWMgaW50IGVsYXBzZWRfdXMoY29uc3Qgc3RydWN0IHRpbWVzcGVjICpzdGFy dCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICplbmQpCiAJcmV0dXJuIGVsYXBzZWQoc3RhcnQsIGVu ZCkgKiAxZTY7CiB9CiAKLXN0YXRpYyBlbnVtIGludGVsX2VuZ2luZV9pZCBnZXRfdmNzX2VuZ2lu ZSh1bnNpZ25lZCBpbnQgbikKLXsKLQljb25zdCBlbnVtIGludGVsX2VuZ2luZV9pZCB2Y3NfZW5n aW5lc1syXSA9IHsgVkNTMSwgVkNTMiB9OwotCi0JaWd0X2Fzc2VydChuIDwgQVJSQVlfU0laRSh2 Y3NfZW5naW5lcykpOwotCi0JcmV0dXJuIHZjc19lbmdpbmVzW25dOwotfQotCi1zdGF0aWMgdWlu dDMyX3QgbmV3X3NlcW5vKHN0cnVjdCB3b3JrbG9hZCAqd3JrLCBlbnVtIGludGVsX2VuZ2luZV9p ZCBlbmdpbmUpCi17Ci0JdWludDMyX3Qgc2Vxbm87Ci0JaW50IHJldDsKLQotCWlmICh3cmstPmZs YWdzICYgR0xPQkFMX0JBTEFOQ0UpIHsKLQkJaWd0X2Fzc2VydCh3cmstPmdsb2JhbF93cmspOwot CQl3cmsgPSB3cmstPmdsb2JhbF93cms7Ci0KLQkJcmV0ID0gcHRocmVhZF9tdXRleF9sb2NrKCZ3 cmstPm11dGV4KTsKLQkJaWd0X2Fzc2VydChyZXQgPT0gMCk7Ci0JfQotCi0Jc2Vxbm8gPSArK3dy ay0+c2Vxbm9bZW5naW5lXTsKLQotCWlmICh3cmstPmZsYWdzICYgR0xPQkFMX0JBTEFOQ0UpIHsK LQkJcmV0ID0gcHRocmVhZF9tdXRleF91bmxvY2soJndyay0+bXV0ZXgpOwotCQlpZ3RfYXNzZXJ0 KHJldCA9PSAwKTsKLQl9Ci0KLQlyZXR1cm4gc2Vxbm87Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAot Y3VycmVudF9zZXFubyhzdHJ1Y3Qgd29ya2xvYWQgKndyaywgZW51bSBpbnRlbF9lbmdpbmVfaWQg ZW5naW5lKQotewotCWlmICh3cmstPmZsYWdzICYgR0xPQkFMX0JBTEFOQ0UpCi0JCXJldHVybiB3 cmstPmdsb2JhbF93cmstPnNlcW5vW2VuZ2luZV07Ci0JZWxzZQotCQlyZXR1cm4gd3JrLT5zZXFu b1tlbmdpbmVdOwotfQotCi1zdGF0aWMgdWludDMyX3QKLXJlYWRfc3RhdHVzX3BhZ2Uoc3RydWN0 IHdvcmtsb2FkICp3cmssIHVuc2lnbmVkIGludCBpZHgpCi17Ci0JaWYgKHdyay0+ZmxhZ3MgJiBH TE9CQUxfQkFMQU5DRSkKLQkJcmV0dXJuIFJFQURfT05DRSh3cmstPmdsb2JhbF93cmstPnN0YXR1 c19wYWdlW2lkeF0pOwotCWVsc2UKLQkJcmV0dXJuIFJFQURfT05DRSh3cmstPnN0YXR1c19wYWdl W2lkeF0pOwotfQotCi1zdGF0aWMgdWludDMyX3QKLWN1cnJlbnRfZ3B1X3NlcW5vKHN0cnVjdCB3 b3JrbG9hZCAqd3JrLCBlbnVtIGludGVsX2VuZ2luZV9pZCBlbmdpbmUpCi17Ci0gICAgICAgcmV0 dXJuIHJlYWRfc3RhdHVzX3BhZ2Uod3JrLCBTRVFOT19JRFgoZW5naW5lKSk7Ci19Ci0KLXN0cnVj dCB3b3JrbG9hZF9iYWxhbmNlciB7Ci0JdW5zaWduZWQgaW50IGlkOwotCWNvbnN0IGNoYXIgKm5h bWU7Ci0JY29uc3QgY2hhciAqZGVzYzsKLQl1bnNpZ25lZCBpbnQgZmxhZ3M7Ci0JdW5zaWduZWQg aW50IG1pbl9nZW47Ci0KLQlpbnQgKCppbml0KShjb25zdCBzdHJ1Y3Qgd29ya2xvYWRfYmFsYW5j ZXIgKmJhbGFuY2VyLAotCQkgICAgc3RydWN0IHdvcmtsb2FkICp3cmspOwotCXVuc2lnbmVkIGlu dCAoKmdldF9xZCkoY29uc3Qgc3RydWN0IHdvcmtsb2FkX2JhbGFuY2VyICpiYWxhbmNlciwKLQkJ CSAgICAgICBzdHJ1Y3Qgd29ya2xvYWQgKndyaywKLQkJCSAgICAgICBlbnVtIGludGVsX2VuZ2lu ZV9pZCBlbmdpbmUpOwotCWVudW0gaW50ZWxfZW5naW5lX2lkICgqYmFsYW5jZSkoY29uc3Qgc3Ry dWN0IHdvcmtsb2FkX2JhbGFuY2VyICpiYWxhbmNlciwKLQkJCQkJc3RydWN0IHdvcmtsb2FkICp3 cmssIHN0cnVjdCB3X3N0ZXAgKncpOwotfTsKLQotc3RhdGljIGVudW0gaW50ZWxfZW5naW5lX2lk Ci1ycl9iYWxhbmNlKGNvbnN0IHN0cnVjdCB3b3JrbG9hZF9iYWxhbmNlciAqYmFsYW5jZXIsCi0J ICAgc3RydWN0IHdvcmtsb2FkICp3cmssIHN0cnVjdCB3X3N0ZXAgKncpCi17Ci0JdW5zaWduZWQg aW50IGVuZ2luZTsKLQotCWVuZ2luZSA9IGdldF92Y3NfZW5naW5lKHdyay0+dmNzX3JyKTsKLQl3 cmstPnZjc19yciBePSAxOwotCi0JcmV0dXJuIGVuZ2luZTsKLX0KLQotc3RhdGljIGVudW0gaW50 ZWxfZW5naW5lX2lkCi1yYW5kX2JhbGFuY2UoY29uc3Qgc3RydWN0IHdvcmtsb2FkX2JhbGFuY2Vy ICpiYWxhbmNlciwKLQkgICAgIHN0cnVjdCB3b3JrbG9hZCAqd3JrLCBzdHJ1Y3Qgd19zdGVwICp3 KQotewotCXJldHVybiBnZXRfdmNzX2VuZ2luZShoYXJzX3BldHJ1c2thX2Y1NF8xX3JhbmRvbSgm d3JrLT5wcm5nKSAmIDEpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50Ci1nZXRfcWRfZGVwdGgo Y29uc3Qgc3RydWN0IHdvcmtsb2FkX2JhbGFuY2VyICpiYWxhbmNlciwKLQkgICAgIHN0cnVjdCB3 b3JrbG9hZCAqd3JrLCBlbnVtIGludGVsX2VuZ2luZV9pZCBlbmdpbmUpCi17Ci0JcmV0dXJuIGN1 cnJlbnRfc2Vxbm8od3JrLCBlbmdpbmUpIC0gY3VycmVudF9ncHVfc2Vxbm8od3JrLCBlbmdpbmUp OwotfQotCi1zdGF0aWMgZW51bSBpbnRlbF9lbmdpbmVfaWQKLV9fcWRfc2VsZWN0X2VuZ2luZShz dHJ1Y3Qgd29ya2xvYWQgKndyaywgY29uc3QgdW5zaWduZWQgbG9uZyAqcWQsIGJvb2wgcmFuZG9t KQotewotCXVuc2lnbmVkIGludCBuOwotCi0JaWYgKHFkW1ZDUzFdIDwgcWRbVkNTMl0pCi0JCW4g PSAwOwotCWVsc2UgaWYgKHFkW1ZDUzFdID4gcWRbVkNTMl0pCi0JCW4gPSAxOwotCWVsc2UgaWYg KHJhbmRvbSkKLQkJbiA9IGhhcnNfcGV0cnVza2FfZjU0XzFfcmFuZG9tKCZ3cmstPnBybmcpICYg MTsKLQllbHNlCi0JCW4gPSB3cmstPnZjc19ycjsKLQl3cmstPnZjc19yciA9IG4gXiAxOwotCi0J cmV0dXJuIGdldF92Y3NfZW5naW5lKG4pOwotfQotCi1zdGF0aWMgZW51bSBpbnRlbF9lbmdpbmVf aWQKLV9fcWRfYmFsYW5jZShjb25zdCBzdHJ1Y3Qgd29ya2xvYWRfYmFsYW5jZXIgKmJhbGFuY2Vy LAotCSAgICAgc3RydWN0IHdvcmtsb2FkICp3cmssIHN0cnVjdCB3X3N0ZXAgKncsIGJvb2wgcmFu ZG9tKQotewotCWVudW0gaW50ZWxfZW5naW5lX2lkIGVuZ2luZTsKLQl1bnNpZ25lZCBsb25nIHFk W05VTV9FTkdJTkVTXTsKLQotCWlndF9hc3NlcnQody0+ZW5naW5lID09IFZDUyk7Ci0KLQlxZFtW Q1MxXSA9IGJhbGFuY2VyLT5nZXRfcWQoYmFsYW5jZXIsIHdyaywgVkNTMSk7Ci0Jd3JrLT5xZF9z dW1bVkNTMV0gKz0gcWRbVkNTMV07Ci0KLQlxZFtWQ1MyXSA9IGJhbGFuY2VyLT5nZXRfcWQoYmFs YW5jZXIsIHdyaywgVkNTMik7Ci0Jd3JrLT5xZF9zdW1bVkNTMl0gKz0gcWRbVkNTMl07Ci0KLQll bmdpbmUgPSBfX3FkX3NlbGVjdF9lbmdpbmUod3JrLCBxZCwgcmFuZG9tKTsKLQotI2lmZGVmIERF QlVHCi0JcHJpbnRmKCJxZF9iYWxhbmNlWyV1XTogMTolbGQgMjolbGQgcnI6JXUgPSAldVx0KCV1 IC0gJXUpICgldSAtICV1KVxuIiwKLQkgICAgICAgd3JrLT5pZCwgcWRbVkNTMV0sIHFkW1ZDUzJd LCB3cmstPnZjc19yciwgZW5naW5lLAotCSAgICAgICBjdXJyZW50X3NlcW5vKHdyaywgVkNTMSks IGN1cnJlbnRfZ3B1X3NlcW5vKHdyaywgVkNTMSksCi0JICAgICAgIGN1cnJlbnRfc2Vxbm8od3Jr LCBWQ1MyKSwgY3VycmVudF9ncHVfc2Vxbm8od3JrLCBWQ1MyKSk7Ci0jZW5kaWYKLQlyZXR1cm4g ZW5naW5lOwotfQotCi1zdGF0aWMgZW51bSBpbnRlbF9lbmdpbmVfaWQKLXFkX2JhbGFuY2UoY29u c3Qgc3RydWN0IHdvcmtsb2FkX2JhbGFuY2VyICpiYWxhbmNlciwKLQkgICAgIHN0cnVjdCB3b3Jr bG9hZCAqd3JrLCBzdHJ1Y3Qgd19zdGVwICp3KQotewotCXJldHVybiBfX3FkX2JhbGFuY2UoYmFs YW5jZXIsIHdyaywgdywgZmFsc2UpOwotfQotCi1zdGF0aWMgZW51bSBpbnRlbF9lbmdpbmVfaWQK LXFkcl9iYWxhbmNlKGNvbnN0IHN0cnVjdCB3b3JrbG9hZF9iYWxhbmNlciAqYmFsYW5jZXIsCi0J ICAgICBzdHJ1Y3Qgd29ya2xvYWQgKndyaywgc3RydWN0IHdfc3RlcCAqdykKLXsKLQlyZXR1cm4g X19xZF9iYWxhbmNlKGJhbGFuY2VyLCB3cmssIHcsIHRydWUpOwotfQotCi1zdGF0aWMgZW51bSBp bnRlbF9lbmdpbmVfaWQKLXFkYXZnX2JhbGFuY2UoY29uc3Qgc3RydWN0IHdvcmtsb2FkX2JhbGFu Y2VyICpiYWxhbmNlciwKLQkgICAgIHN0cnVjdCB3b3JrbG9hZCAqd3JrLCBzdHJ1Y3Qgd19zdGVw ICp3KQotewotCXVuc2lnbmVkIGxvbmcgcWRbTlVNX0VOR0lORVNdOwotCXVuc2lnbmVkIGludCBl bmdpbmU7Ci0KLQlpZ3RfYXNzZXJ0KHctPmVuZ2luZSA9PSBWQ1MpOwotCi0JZm9yIChlbmdpbmUg PSBWQ1MxOyBlbmdpbmUgPD0gVkNTMjsgZW5naW5lKyspIHsKLQkJcWRbZW5naW5lXSA9IGJhbGFu Y2VyLT5nZXRfcWQoYmFsYW5jZXIsIHdyaywgZW5naW5lKTsKLQkJd3JrLT5xZF9zdW1bZW5naW5l XSArPSBxZFtlbmdpbmVdOwotCi0JCWV3bWFfcnRfYWRkKCZ3cmstPnJ0LmF2Z1tlbmdpbmVdLCBx ZFtlbmdpbmVdKTsKLQkJcWRbZW5naW5lXSA9IGV3bWFfcnRfcmVhZCgmd3JrLT5ydC5hdmdbZW5n aW5lXSk7Ci0JfQotCi0JZW5naW5lID0gX19xZF9zZWxlY3RfZW5naW5lKHdyaywgcWQsIGZhbHNl KTsKLSNpZmRlZiBERUJVRwotCXByaW50ZigicWRhdmdfYmFsYW5jZVsldV06IDE6JWxkIDI6JWxk IHJyOiV1ID0gJXVcdCgldSAtICV1KSAoJXUgLSAldSlcbiIsCi0JICAgICAgIHdyay0+aWQsIHFk W1ZDUzFdLCBxZFtWQ1MyXSwgd3JrLT52Y3NfcnIsIGVuZ2luZSwKLQkgICAgICAgY3VycmVudF9z ZXFubyh3cmssIFZDUzEpLCBjdXJyZW50X2dwdV9zZXFubyh3cmssIFZDUzEpLAotCSAgICAgICBj dXJyZW50X3NlcW5vKHdyaywgVkNTMiksIGN1cnJlbnRfZ3B1X3NlcW5vKHdyaywgVkNTMikpOwot I2VuZGlmCi0JcmV0dXJuIGVuZ2luZTsKLX0KLQotc3RhdGljIGVudW0gaW50ZWxfZW5naW5lX2lk Ci1fX3J0X3NlbGVjdF9lbmdpbmUoc3RydWN0IHdvcmtsb2FkICp3cmssIHVuc2lnbmVkIGxvbmcg KnFkLCBib29sIHJhbmRvbSkKLXsKLQlxZFtWQ1MxXSA+Pj0gMTA7Ci0JcWRbVkNTMl0gPj49IDEw OwotCi0JcmV0dXJuIF9fcWRfc2VsZWN0X2VuZ2luZSh3cmssIHFkLCByYW5kb20pOwotfQotCi1z dHJ1Y3QgcnRfZGVwdGggewotCXVpbnQzMl90IHNlcW5vOwotCXVpbnQzMl90IHN1Ym1pdHRlZDsK LQl1aW50MzJfdCBjb21wbGV0ZWQ7Ci19OwotCi1zdGF0aWMgdm9pZCBnZXRfcnRfZGVwdGgoc3Ry dWN0IHdvcmtsb2FkICp3cmssCi0JCQkgdW5zaWduZWQgaW50IGVuZ2luZSwKLQkJCSBzdHJ1Y3Qg cnRfZGVwdGggKnJ0KQotewotCWNvbnN0IHVuc2lnbmVkIGludCBpZHggPSBTRVFOT19JRFgoZW5n aW5lKTsKLQl1aW50MzJfdCBsYXRjaDsKLQotCWRvIHsKLQkJbGF0Y2ggPSByZWFkX3N0YXR1c19w YWdlKHdyaywgaWR4ICsgMyk7Ci0JCXJ0LT5zdWJtaXR0ZWQgPSByZWFkX3N0YXR1c19wYWdlKHdy aywgaWR4ICsgMSk7Ci0JCXJ0LT5jb21wbGV0ZWQgPSByZWFkX3N0YXR1c19wYWdlKHdyaywgaWR4 ICsgMik7Ci0JCXJ0LT5zZXFubyA9IHJlYWRfc3RhdHVzX3BhZ2Uod3JrLCBpZHgpOwotCX0gd2hp bGUgKGxhdGNoICE9IHJ0LT5zZXFubyk7Ci19Ci0KLXN0YXRpYyBlbnVtIGludGVsX2VuZ2luZV9p ZAotX19ydF9iYWxhbmNlKGNvbnN0IHN0cnVjdCB3b3JrbG9hZF9iYWxhbmNlciAqYmFsYW5jZXIs Ci0JICAgICBzdHJ1Y3Qgd29ya2xvYWQgKndyaywgc3RydWN0IHdfc3RlcCAqdywgYm9vbCByYW5k b20pCi17Ci0JdW5zaWduZWQgbG9uZyBxZFtOVU1fRU5HSU5FU107Ci0JdW5zaWduZWQgaW50IGVu Z2luZTsKLQotCWlndF9hc3NlcnQody0+ZW5naW5lID09IFZDUyk7Ci0KLQkvKiBFc3RpbWF0ZSB0 aGUgInNwZWVkIiBvZiB0aGUgbW9zdCByZWNlbnQgYmF0Y2gKLQkgKiAgICAoZmluaXNoIHRpbWUg LSBzdWJtaXQgdGltZSkKLQkgKiBhbmQgdXNlIHRoYXQgYXMgYW4gYXBwcm94aW1hdGUgZm9yIHRo ZSB0b3RhbCByZW1haW5pbmcgdGltZSBmb3IKLQkgKiBhbGwgYmF0Y2hlcyBvbiB0aGF0IGVuZ2lu ZSwgcGx1cyB0aGUgdGltZSB3ZSBleHBlY3QgdGhpcyBiYXRjaCB0bwotCSAqIHRha2UuIFdlIHRy eSB0byBrZWVwIHRoZSB0b3RhbCBiYWxhbmNlZCBiZXR3ZWVuIHRoZSBlbmdpbmVzLgotCSAqLwot CWZvciAoZW5naW5lID0gVkNTMTsgZW5naW5lIDw9IFZDUzI7IGVuZ2luZSsrKSB7Ci0JCXN0cnVj dCBydF9kZXB0aCBydDsKLQotCQlnZXRfcnRfZGVwdGgod3JrLCBlbmdpbmUsICZydCk7Ci0JCXFk W2VuZ2luZV0gPSBjdXJyZW50X3NlcW5vKHdyaywgZW5naW5lKSAtIHJ0LnNlcW5vOwotCQl3cmst PnFkX3N1bVtlbmdpbmVdICs9IHFkW2VuZ2luZV07Ci0JCXFkW2VuZ2luZV0gPSAocWRbZW5naW5l XSArIDEpICogKHJ0LmNvbXBsZXRlZCAtIHJ0LnN1Ym1pdHRlZCk7Ci0jaWZkZWYgREVCVUcKLQkJ cHJpbnRmKCJydFswXSA9ICVkICglZCAtICVkKSB4ICVkICglZCAtICVkKSA9ICVsZFxuIiwKLQkJ ICAgICAgIGN1cnJlbnRfc2Vxbm8od3JrLCBlbmdpbmUpIC0gcnQuc2Vxbm8sCi0JCSAgICAgICBj dXJyZW50X3NlcW5vKHdyaywgZW5naW5lKSwgcnQuc2Vxbm8sCi0JCSAgICAgICBydC5jb21wbGV0 ZWQgLSBydC5zdWJtaXR0ZWQsCi0JCSAgICAgICBydC5jb21wbGV0ZWQsIHJ0LnN1Ym1pdHRlZCwK LQkJICAgICAgIHFkW2VuZ2luZV0pOwotI2VuZGlmCi0JfQotCi0JcmV0dXJuIF9fcnRfc2VsZWN0 X2VuZ2luZSh3cmssIHFkLCByYW5kb20pOwotfQotCi1zdGF0aWMgZW51bSBpbnRlbF9lbmdpbmVf aWQKLXJ0X2JhbGFuY2UoY29uc3Qgc3RydWN0IHdvcmtsb2FkX2JhbGFuY2VyICpiYWxhbmNlciwK LQkgICBzdHJ1Y3Qgd29ya2xvYWQgKndyaywgc3RydWN0IHdfc3RlcCAqdykKLXsKLQotCXJldHVy biBfX3J0X2JhbGFuY2UoYmFsYW5jZXIsIHdyaywgdywgZmFsc2UpOwotfQotCi1zdGF0aWMgZW51 bSBpbnRlbF9lbmdpbmVfaWQKLXJ0cl9iYWxhbmNlKGNvbnN0IHN0cnVjdCB3b3JrbG9hZF9iYWxh bmNlciAqYmFsYW5jZXIsCi0JICAgc3RydWN0IHdvcmtsb2FkICp3cmssIHN0cnVjdCB3X3N0ZXAg KncpCi17Ci0JcmV0dXJuIF9fcnRfYmFsYW5jZShiYWxhbmNlciwgd3JrLCB3LCB0cnVlKTsKLX0K LQotc3RhdGljIGVudW0gaW50ZWxfZW5naW5lX2lkCi1ydGF2Z19iYWxhbmNlKGNvbnN0IHN0cnVj dCB3b3JrbG9hZF9iYWxhbmNlciAqYmFsYW5jZXIsCi0JICAgc3RydWN0IHdvcmtsb2FkICp3cmss IHN0cnVjdCB3X3N0ZXAgKncpCi17Ci0JdW5zaWduZWQgbG9uZyBxZFtOVU1fRU5HSU5FU107Ci0J dW5zaWduZWQgaW50IGVuZ2luZTsKLQotCWlndF9hc3NlcnQody0+ZW5naW5lID09IFZDUyk7Ci0K LQkvKiBFc3RpbWF0ZSB0aGUgYXZlcmFnZSAic3BlZWQiIG9mIHRoZSBtb3N0IHJlY2VudCBiYXRj aGVzCi0JICogICAgKGZpbmlzaCB0aW1lIC0gc3VibWl0IHRpbWUpCi0JICogYW5kIHVzZSB0aGF0 IGFzIGFuIGFwcHJveGltYXRlIGZvciB0aGUgdG90YWwgcmVtYWluaW5nIHRpbWUgZm9yCi0JICog YWxsIGJhdGNoZXMgb24gdGhhdCBlbmdpbmUgcGx1cyB0aGUgdGltZSB3ZSBleHBlY3QgdG8gZXhl Y3V0ZSBpbi4KLQkgKiBXZSB0cnkgdG8ga2VlcCB0aGUgdG90YWwgcmVtYWluaW5nIGJhbGFuY2Vk IGJldHdlZW4gdGhlIGVuZ2luZXMuCi0JICovCi0JZm9yIChlbmdpbmUgPSBWQ1MxOyBlbmdpbmUg PD0gVkNTMjsgZW5naW5lKyspIHsKLQkJc3RydWN0IHJ0X2RlcHRoIHJ0OwotCi0JCWdldF9ydF9k ZXB0aCh3cmssIGVuZ2luZSwgJnJ0KTsKLQkJaWYgKHJ0LnNlcW5vICE9IHdyay0+cnQubGFzdFtl bmdpbmVdKSB7Ci0JCQlpZ3RfYXNzZXJ0KChsb25nKShydC5jb21wbGV0ZWQgLSBydC5zdWJtaXR0 ZWQpID4gMCk7Ci0JCQlld21hX3J0X2FkZCgmd3JrLT5ydC5hdmdbZW5naW5lXSwKLQkJCQkgICAg cnQuY29tcGxldGVkIC0gcnQuc3VibWl0dGVkKTsKLQkJCXdyay0+cnQubGFzdFtlbmdpbmVdID0g cnQuc2Vxbm87Ci0JCX0KLQkJcWRbZW5naW5lXSA9IGN1cnJlbnRfc2Vxbm8od3JrLCBlbmdpbmUp IC0gcnQuc2Vxbm87Ci0JCXdyay0+cWRfc3VtW2VuZ2luZV0gKz0gcWRbZW5naW5lXTsKLQkJcWRb ZW5naW5lXSA9Ci0JCQkocWRbZW5naW5lXSArIDEpICogZXdtYV9ydF9yZWFkKCZ3cmstPnJ0LmF2 Z1tlbmdpbmVdKTsKLQotI2lmZGVmIERFQlVHCi0JCXByaW50ZigicnRhdmdbJWRdID0gJWQgKCVk IC0gJWQpIHggJWxkICglZCkgPSAlbGRcbiIsCi0JCSAgICAgICBlbmdpbmUsCi0JCSAgICAgICBj dXJyZW50X3NlcW5vKHdyaywgZW5naW5lKSAtIHJ0LnNlcW5vLAotCQkgICAgICAgY3VycmVudF9z ZXFubyh3cmssIGVuZ2luZSksIHJ0LnNlcW5vLAotCQkgICAgICAgZXdtYV9ydF9yZWFkKCZ3cmst PnJ0LmF2Z1tlbmdpbmVdKSwKLQkJICAgICAgIHJ0LmNvbXBsZXRlZCAtIHJ0LnN1Ym1pdHRlZCwK LQkJICAgICAgIHFkW2VuZ2luZV0pOwotI2VuZGlmCi0JfQotCi0JcmV0dXJuIF9fcnRfc2VsZWN0 X2VuZ2luZSh3cmssIHFkLCBmYWxzZSk7Ci19Ci0KLXN0YXRpYyBlbnVtIGludGVsX2VuZ2luZV9p ZAotY29udGV4dF9iYWxhbmNlKGNvbnN0IHN0cnVjdCB3b3JrbG9hZF9iYWxhbmNlciAqYmFsYW5j ZXIsCi0JCXN0cnVjdCB3b3JrbG9hZCAqd3JrLCBzdHJ1Y3Qgd19zdGVwICp3KQotewotCXJldHVy biBnZXRfdmNzX2VuZ2luZShfX2dldF9jdHgod3JrLCB3KS0+c3RhdGljX3Zjcyk7Ci19Ci0KLXN0 YXRpYyB1bnNpZ25lZCBpbnQKLWdldF9lbmdpbmVfYnVzeShjb25zdCBzdHJ1Y3Qgd29ya2xvYWRf YmFsYW5jZXIgKmJhbGFuY2VyLAotCQlzdHJ1Y3Qgd29ya2xvYWQgKndyaywgZW51bSBpbnRlbF9l bmdpbmVfaWQgZW5naW5lKQotewotCXN0cnVjdCBidXN5X2JhbGFuY2VyICpiYiA9ICZ3cmstPmJ1 c3lfYmFsYW5jZXI7Ci0KLQlpZiAoZW5naW5lID09IFZDUzIgJiYgKHdyay0+ZmxhZ3MgJiBWQ1My UkVNQVApKQotCQllbmdpbmUgPSBCQ1M7Ci0KLQlyZXR1cm4gYmItPmJ1c3lbYmItPmVuZ2luZV9t YXBbZW5naW5lXV07Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZXRfcG11X3N0YXRzKGNvbnN0IHN0cnVj dCB3b3JrbG9hZF9iYWxhbmNlciAqYiwgc3RydWN0IHdvcmtsb2FkICp3cmspCi17Ci0Jc3RydWN0 IGJ1c3lfYmFsYW5jZXIgKmJiID0gJndyay0+YnVzeV9iYWxhbmNlcjsKLQl1aW50NjRfdCB2YWxb N107Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlpZ3RfYXNzZXJ0X2VxKHJlYWQoYmItPmZkLCB2YWws IHNpemVvZih2YWwpKSwKLQkJICAgICAgKDIgKyBiYi0+bnVtX2VuZ2luZXMpICogc2l6ZW9mKHVp bnQ2NF90KSk7Ci0KLQlpZiAoIWJiLT5maXJzdCkgewotCQlmb3IgKGkgPSAwOyBpIDwgYmItPm51 bV9lbmdpbmVzOyBpKyspIHsKLQkJCWRvdWJsZSBkOwotCi0JCQlkID0gKHZhbFsyICsgaV0gLSBi Yi0+cHJldltpXSkgKiAxMDA7Ci0JCQlkIC89IHZhbFsxXSAtIGJiLT50X3ByZXY7Ci0JCQliYi0+ YnVzeVtpXSA9IGQ7Ci0JCX0KLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgYmItPm51bV9lbmdpbmVz OyBpKyspCi0JCWJiLT5wcmV2W2ldID0gdmFsWzIgKyBpXTsKLQotCWJiLT50X3ByZXYgPSB2YWxb MV07Ci0JYmItPmZpcnN0ID0gZmFsc2U7Ci19Ci0KLXN0YXRpYyBlbnVtIGludGVsX2VuZ2luZV9p ZAotYnVzeV9hdmdfYmFsYW5jZShjb25zdCBzdHJ1Y3Qgd29ya2xvYWRfYmFsYW5jZXIgKmJhbGFu Y2VyLAotCQkgc3RydWN0IHdvcmtsb2FkICp3cmssIHN0cnVjdCB3X3N0ZXAgKncpCi17Ci0JZ2V0 X3BtdV9zdGF0cyhiYWxhbmNlciwgd3JrKTsKLQotCXJldHVybiBxZGF2Z19iYWxhbmNlKGJhbGFu Y2VyLCB3cmssIHcpOwotfQotCi1zdGF0aWMgZW51bSBpbnRlbF9lbmdpbmVfaWQKLWJ1c3lfYmFs YW5jZShjb25zdCBzdHJ1Y3Qgd29ya2xvYWRfYmFsYW5jZXIgKmJhbGFuY2VyLAotCSAgICAgc3Ry dWN0IHdvcmtsb2FkICp3cmssIHN0cnVjdCB3X3N0ZXAgKncpCi17Ci0JZ2V0X3BtdV9zdGF0cyhi YWxhbmNlciwgd3JrKTsKLQotCXJldHVybiBxZF9iYWxhbmNlKGJhbGFuY2VyLCB3cmssIHcpOwot fQotCi1zdGF0aWMgaW50Ci1idXN5X2luaXQoY29uc3Qgc3RydWN0IHdvcmtsb2FkX2JhbGFuY2Vy ICpiYWxhbmNlciwgc3RydWN0IHdvcmtsb2FkICp3cmspCi17Ci0Jc3RydWN0IGJ1c3lfYmFsYW5j ZXIgKmJiID0gJndyay0+YnVzeV9iYWxhbmNlcjsKLQlzdHJ1Y3QgZW5naW5lX2Rlc2MgewotCQl1 bnNpZ25lZCBjbGFzcywgaW5zdDsKLQkJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Ci0JfSAqZCwg ZW5naW5lc1tdID0gewotCQl7IEk5MTVfRU5HSU5FX0NMQVNTX1JFTkRFUiwgMCwgUkNTIH0sCi0J CXsgSTkxNV9FTkdJTkVfQ0xBU1NfQ09QWSwgMCwgQkNTIH0sCi0JCXsgSTkxNV9FTkdJTkVfQ0xB U1NfVklERU8sIDAsIFZDUzEgfSwKLQkJeyBJOTE1X0VOR0lORV9DTEFTU19WSURFTywgMSwgVkNT MiB9LAotCQl7IEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPX0VOSEFOQ0UsIDAsIFZFQ1MgfSwKLQkJ eyAwLCAwLCBWQ1MgfQotCX07Ci0KLQliYi0+bnVtX2VuZ2luZXMgPSAwOwotCWJiLT5maXJzdCA9 IHRydWU7Ci0JYmItPmZkID0gLTE7Ci0KLQlmb3IgKGQgPSAmZW5naW5lc1swXTsgZC0+aWQgIT0g VkNTOyBkKyspIHsKLQkJaW50IHBmZDsKLQotCQlwZmQgPSBwZXJmX2lnZnhfb3Blbl9ncm91cChJ OTE1X1BNVV9FTkdJTkVfQlVTWShkLT5jbGFzcywKLQkJCQkJCQkJZC0+aW5zdCksCi0JCQkJCSAg IGJiLT5mZCk7Ci0JCWlmIChwZmQgPCAwKSB7Ci0JCQlpZiAoZC0+aWQgIT0gVkNTMikKLQkJCQly ZXR1cm4gLSgxMCArIGJiLT5udW1fZW5naW5lcyk7Ci0JCQllbHNlCi0JCQkJY29udGludWU7Ci0J CX0KLQotCQlpZiAoYmItPm51bV9lbmdpbmVzID09IDApCi0JCQliYi0+ZmQgPSBwZmQ7Ci0KLQkJ YmItPmVuZ2luZV9tYXBbZC0+aWRdID0gYmItPm51bV9lbmdpbmVzKys7Ci0JfQotCi0JaWYgKGJi LT5udW1fZW5naW5lcyA8IDUgJiYgISh3cmstPmZsYWdzICYgVkNTMlJFTUFQKSkKLQkJcmV0dXJu IC0xOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgd29ya2xvYWRfYmFs YW5jZXIgYWxsX2JhbGFuY2Vyc1tdID0gewotCXsKLQkJLmlkID0gMCwKLQkJLm5hbWUgPSAicnIi LAotCQkuZGVzYyA9ICJTaW1wbGUgcm91bmQtcm9iaW4uIiwKLQkJLmJhbGFuY2UgPSBycl9iYWxh bmNlLAotCX0sCi0JewotCQkuaWQgPSA2LAotCQkubmFtZSA9ICJyYW5kIiwKLQkJLmRlc2MgPSAi UmFuZG9tIHNlbGVjdGlvbi4iLAotCQkuYmFsYW5jZSA9IHJhbmRfYmFsYW5jZSwKLQl9LAotCXsK LQkJLmlkID0gMSwKLQkJLm5hbWUgPSAicWQiLAotCQkuZGVzYyA9ICJRdWV1ZSBkZXB0aCBlc3Rp bWF0aW9uIHdpdGggcm91bmQtcm9iaW4gb24gZXF1YWwgZGVwdGguIiwKLQkJLmZsYWdzID0gU0VR Tk8sCi0JCS5taW5fZ2VuID0gOCwKLQkJLmdldF9xZCA9IGdldF9xZF9kZXB0aCwKLQkJLmJhbGFu Y2UgPSBxZF9iYWxhbmNlLAotCX0sCi0JewotCQkuaWQgPSA1LAotCQkubmFtZSA9ICJxZHIiLAot CQkuZGVzYyA9ICJRdWV1ZSBkZXB0aCBlc3RpbWF0aW9uIHdpdGggcmFuZG9tIHNlbGVjdGlvbiBv biBlcXVhbCBkZXB0aC4iLAotCQkuZmxhZ3MgPSBTRVFOTywKLQkJLm1pbl9nZW4gPSA4LAotCQku Z2V0X3FkID0gZ2V0X3FkX2RlcHRoLAotCQkuYmFsYW5jZSA9IHFkcl9iYWxhbmNlLAotCX0sCi0J ewotCQkuaWQgPSA3LAotCQkubmFtZSA9ICJxZGF2ZyIsCi0JCS5kZXNjID0gIkxpa2UgcWQsIGJ1 dCB1c2luZyBhbiBhdmVyYWdlIHF1ZXVlIGRlcHRoIGVzdGltYXRvci4iLAotCQkuZmxhZ3MgPSBT RVFOTywKLQkJLm1pbl9nZW4gPSA4LAotCQkuZ2V0X3FkID0gZ2V0X3FkX2RlcHRoLAotCQkuYmFs YW5jZSA9IHFkYXZnX2JhbGFuY2UsCi0JfSwKLQl7Ci0JCS5pZCA9IDIsCi0JCS5uYW1lID0gInJ0 IiwKLQkJLmRlc2MgPSAiUXVldWUgZGVwdGggcGx1cyBsYXN0IHJ1bnRpbWUgZXN0aW1hdGlvbi4i LAotCQkuZmxhZ3MgPSBTRVFOTyB8IFJULAotCQkubWluX2dlbiA9IDgsCi0JCS5nZXRfcWQgPSBn ZXRfcWRfZGVwdGgsCi0JCS5iYWxhbmNlID0gcnRfYmFsYW5jZSwKLQl9LAotCXsKLQkJLmlkID0g MywKLQkJLm5hbWUgPSAicnRyIiwKLQkJLmRlc2MgPSAiTGlrZSBydCBidXQgd2l0aCByYW5kb20g ZW5naW5lIHNlbGVjdGlvbiBvbiBlcXVhbCBkZXB0aC4iLAotCQkuZmxhZ3MgPSBTRVFOTyB8IFJU LAotCQkubWluX2dlbiA9IDgsCi0JCS5nZXRfcWQgPSBnZXRfcWRfZGVwdGgsCi0JCS5iYWxhbmNl ID0gcnRyX2JhbGFuY2UsCi0JfSwKLQl7Ci0JCS5pZCA9IDQsCi0JCS5uYW1lID0gInJ0YXZnIiwK LQkJLmRlc2MgPSAiSW1wcm92ZWQgdmVyc2lvbiBydCB0cmFja2luZyBhdmVyYWdlIGV4ZWN1dGlv biBzcGVlZCBwZXIgZW5naW5lLiIsCi0JCS5mbGFncyA9IFNFUU5PIHwgUlQsCi0JCS5taW5fZ2Vu ID0gOCwKLQkJLmdldF9xZCA9IGdldF9xZF9kZXB0aCwKLQkJLmJhbGFuY2UgPSBydGF2Z19iYWxh bmNlLAotCX0sCi0JewotCQkuaWQgPSA4LAotCQkubmFtZSA9ICJjb250ZXh0IiwKLQkJLmRlc2Mg PSAiU3RhdGljIHJvdW5kLXJvYmluIFZDUyBhc3NpZ25tZW50IGF0IGNvbnRleHQgY3JlYXRpb24u IiwKLQkJLmJhbGFuY2UgPSBjb250ZXh0X2JhbGFuY2UsCi0JfSwKLQl7Ci0JCS5pZCA9IDksCi0J CS5uYW1lID0gImJ1c3kiLAotCQkuZGVzYyA9ICJFbmdpbmUgYnVzeW5lc3MgYmFzZWQgYmFsYW5j aW5nLiIsCi0JCS5pbml0ID0gYnVzeV9pbml0LAotCQkuZ2V0X3FkID0gZ2V0X2VuZ2luZV9idXN5 LAotCQkuYmFsYW5jZSA9IGJ1c3lfYmFsYW5jZSwKLQl9LAotCXsKLQkJLmlkID0gMTAsCi0JCS5u YW1lID0gImJ1c3ktYXZnIiwKLQkJLmRlc2MgPSAiQXZlcmFnZSBlbmdpbmUgYnVzeW5lc3MgYmFz ZWQgYmFsYW5jaW5nLiIsCi0JCS5pbml0ID0gYnVzeV9pbml0LAotCQkuZ2V0X3FkID0gZ2V0X2Vu Z2luZV9idXN5LAotCQkuYmFsYW5jZSA9IGJ1c3lfYXZnX2JhbGFuY2UsCi0JfSwKLQl7Ci0JCS5p ZCA9IDExLAotCQkubmFtZSA9ICJpOTE1IiwKLQkJLmRlc2MgPSAiaTkxNSBiYWxhbmNpbmcuIiwK LQkJLmZsYWdzID0gSTkxNSwKLQl9LAotfTsKLQotc3RhdGljIHVuc2lnbmVkIGludAotZ2xvYmFs X2dldF9xZChjb25zdCBzdHJ1Y3Qgd29ya2xvYWRfYmFsYW5jZXIgKmJhbGFuY2VyLAotCSAgICAg IHN0cnVjdCB3b3JrbG9hZCAqd3JrLCBlbnVtIGludGVsX2VuZ2luZV9pZCBlbmdpbmUpCi17Ci0J aWd0X2Fzc2VydCh3cmstPmdsb2JhbF93cmspOwotCWlndF9hc3NlcnQod3JrLT5nbG9iYWxfYmFs YW5jZXIpOwotCi0JcmV0dXJuIHdyay0+Z2xvYmFsX2JhbGFuY2VyLT5nZXRfcWQod3JrLT5nbG9i YWxfYmFsYW5jZXIsCi0JCQkJCSAgICB3cmstPmdsb2JhbF93cmssIGVuZ2luZSk7Ci19Ci0KLXN0 YXRpYyBlbnVtIGludGVsX2VuZ2luZV9pZAotZ2xvYmFsX2JhbGFuY2UoY29uc3Qgc3RydWN0IHdv cmtsb2FkX2JhbGFuY2VyICpiYWxhbmNlciwKLQkgICAgICAgc3RydWN0IHdvcmtsb2FkICp3cmss IHN0cnVjdCB3X3N0ZXAgKncpCi17Ci0JZW51bSBpbnRlbF9lbmdpbmVfaWQgZW5naW5lOwotCWlu dCByZXQ7Ci0KLQlpZ3RfYXNzZXJ0KHdyay0+Z2xvYmFsX3dyayk7Ci0JaWd0X2Fzc2VydCh3cmst Pmdsb2JhbF9iYWxhbmNlcik7Ci0KLQl3cmsgPSB3cmstPmdsb2JhbF93cms7Ci0KLQlyZXQgPSBw dGhyZWFkX211dGV4X2xvY2soJndyay0+bXV0ZXgpOwotCWlndF9hc3NlcnQocmV0ID09IDApOwot Ci0JZW5naW5lID0gd3JrLT5nbG9iYWxfYmFsYW5jZXItPmJhbGFuY2Uod3JrLT5nbG9iYWxfYmFs YW5jZXIsIHdyaywgdyk7Ci0KLQlyZXQgPSBwdGhyZWFkX211dGV4X3VubG9jaygmd3JrLT5tdXRl eCk7Ci0JaWd0X2Fzc2VydChyZXQgPT0gMCk7Ci0KLQlyZXR1cm4gZW5naW5lOwotfQotCi1zdGF0 aWMgY29uc3Qgc3RydWN0IHdvcmtsb2FkX2JhbGFuY2VyIGdsb2JhbF9iYWxhbmNlciA9IHsKLQkJ LmlkID0gfjAsCi0JCS5uYW1lID0gImdsb2JhbCIsCi0JCS5kZXNjID0gIkdsb2JhbCBiYWxhbmNl ciIsCi0JCS5nZXRfcWQgPSBnbG9iYWxfZ2V0X3FkLAotCQkuYmFsYW5jZSA9IGdsb2JhbF9iYWxh bmNlLAotCX07Ci0KLXN0YXRpYyB2b2lkCi11cGRhdGVfYmJfc2Vxbm8oc3RydWN0IHdfc3RlcCAq dywgZW51bSBpbnRlbF9lbmdpbmVfaWQgZW5naW5lLCB1aW50MzJfdCBzZXFubykKLXsKLQlnZW1f c2V0X2RvbWFpbihmZCwgdy0+YmJfaGFuZGxlLAotCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX1dD LCBJOTE1X0dFTV9ET01BSU5fV0MpOwotCi0Jdy0+cmVsb2NbMF0uZGVsdGEgPSBTRVFOT19PRkZT RVQoZW5naW5lKTsKLQotCSp3LT5zZXFub192YWx1ZSA9IHNlcW5vOwotCSp3LT5zZXFub19hZGRy ZXNzID0gdy0+cmVsb2NbMF0ucHJlc3VtZWRfb2Zmc2V0ICsgdy0+cmVsb2NbMF0uZGVsdGE7Ci0K LQkvKiBJZiBub3QgdXNpbmcgTk9fUkVMT0MsIGZvcmNlIHRoZSByZWxvY2F0aW9ucyAqLwotCWlm ICghKHctPmViLmZsYWdzICYgSTkxNV9FWEVDX05PX1JFTE9DKSkKLQkJdy0+cmVsb2NbMF0ucHJl c3VtZWRfb2Zmc2V0ID0gLTE7Ci19Ci0KLXN0YXRpYyB2b2lkCi11cGRhdGVfYmJfcnQoc3RydWN0 IHdfc3RlcCAqdywgZW51bSBpbnRlbF9lbmdpbmVfaWQgZW5naW5lLCB1aW50MzJfdCBzZXFubykK LXsKLQlnZW1fc2V0X2RvbWFpbihmZCwgdy0+YmJfaGFuZGxlLAotCQkgICAgICAgSTkxNV9HRU1f RE9NQUlOX1dDLCBJOTE1X0dFTV9ET01BSU5fV0MpOwotCi0Jdy0+cmVsb2NbMV0uZGVsdGEgPSBT RVFOT19PRkZTRVQoZW5naW5lKSArIHNpemVvZih1aW50MzJfdCk7Ci0Jdy0+cmVsb2NbMl0uZGVs dGEgPSBTRVFOT19PRkZTRVQoZW5naW5lKSArIDIgKiBzaXplb2YodWludDMyX3QpOwotCXctPnJl bG9jWzNdLmRlbHRhID0gU0VRTk9fT0ZGU0VUKGVuZ2luZSkgKyAzICogc2l6ZW9mKHVpbnQzMl90 KTsKLQotCSp3LT5sYXRjaF92YWx1ZSA9IHNlcW5vOwotCSp3LT5sYXRjaF9hZGRyZXNzID0gdy0+ cmVsb2NbM10ucHJlc3VtZWRfb2Zmc2V0ICsgdy0+cmVsb2NbM10uZGVsdGE7Ci0KLQkqdy0+cnQw X3ZhbHVlID0gKlJFRyhSQ1NfVElNRVNUQU1QKTsKLQkqdy0+cnQwX2FkZHJlc3MgPSB3LT5yZWxv Y1sxXS5wcmVzdW1lZF9vZmZzZXQgKyB3LT5yZWxvY1sxXS5kZWx0YTsKLQkqdy0+cnQxX2FkZHJl c3MgPSB3LT5yZWxvY1syXS5wcmVzdW1lZF9vZmZzZXQgKyB3LT5yZWxvY1syXS5kZWx0YTsKLQot CS8qIElmIG5vdCB1c2luZyBOT19SRUxPQywgZm9yY2UgdGhlIHJlbG9jYXRpb25zICovCi0JaWYg KCEody0+ZWIuZmxhZ3MgJiBJOTE1X0VYRUNfTk9fUkVMT0MpKSB7Ci0JCXctPnJlbG9jWzFdLnBy ZXN1bWVkX29mZnNldCA9IC0xOwotCQl3LT5yZWxvY1syXS5wcmVzdW1lZF9vZmZzZXQgPSAtMTsK LQkJdy0+cmVsb2NbM10ucHJlc3VtZWRfb2Zmc2V0ID0gLTE7Ci0JfQotfQotCiBzdGF0aWMgdm9p ZAogdXBkYXRlX2JiX3N0YXJ0KHN0cnVjdCB3X3N0ZXAgKncpCiB7CkBAIC0yNjA2LDEyMyArMTY4 OCwxMyBAQCBzdGF0aWMgdm9pZCB3X3N5bmNfdG8oc3RydWN0IHdvcmtsb2FkICp3cmssIHN0cnVj dCB3X3N0ZXAgKncsIGludCB0YXJnZXQpCiAJZ2VtX3N5bmMoZmQsIHdyay0+c3RlcHNbdGFyZ2V0 XS5vYmpbMF0uaGFuZGxlKTsKIH0KIAotc3RhdGljIHVpbnQzMl90ICpnZXRfc3RhdHVzX2NzKHN0 cnVjdCB3b3JrbG9hZCAqd3JrKQotewotCXJldHVybiB3cmstPnN0YXR1c19jczsKLX0KLQotI2Rl ZmluZSBJTklUX0NMT0NLUyAweDEKLSNkZWZpbmUgSU5JVF9BTEwgKElOSVRfQ0xPQ0tTKQotc3Rh dGljIHZvaWQgaW5pdF9zdGF0dXNfcGFnZShzdHJ1Y3Qgd29ya2xvYWQgKndyaywgdW5zaWduZWQg aW50IGZsYWdzKQotewotCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSByZWxv Y1s0XSA9IHt9OwotCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICpzdGF0dXNfb2Jq ZWN0ID0KLQkJCQkJCWdldF9zdGF0dXNfb2JqZWN0cyh3cmspOwotCXN0cnVjdCBkcm1faTkxNV9n ZW1fZXhlY2J1ZmZlcjIgZWIgPSB7Ci0JCS5idWZmZXJfY291bnQgPSBBUlJBWV9TSVpFKHdyay0+ c3RhdHVzX29iamVjdCksCi0JCS5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihzdGF0dXNf b2JqZWN0KQotCX07Ci0JdWludDMyX3QgKmJhc2UgPSBnZXRfc3RhdHVzX2NzKHdyayk7Ci0KLQkv KiBXYW50IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBiYWxhbmNlciBoYXMgYSByZWFzb25hYmxlIHZp ZXcgb2YKLQkgKiB0aGUgYmFja2dyb3VuZCBidXN5bmVzcyBvZiBlYWNoIGVuZ2luZS4gVG8gZG8g dGhhdCB3ZSBvY2Nhc2lvbmFsbHkKLQkgKiBzZW5kIGEgZHVtbXkgYmF0Y2ggZG93biB0aGUgcGlw ZWxpbmUuCi0JICovCi0KLQlpZiAoIWJhc2UpCi0JCXJldHVybjsKLQotCWdlbV9zZXRfZG9tYWlu KGZkLCBzdGF0dXNfb2JqZWN0WzFdLmhhbmRsZSwKLQkJICAgICAgIEk5MTVfR0VNX0RPTUFJTl9X QywgSTkxNV9HRU1fRE9NQUlOX1dDKTsKLQotCXN0YXR1c19vYmplY3RbMV0ucmVsb2NzX3B0ciA9 IHRvX3VzZXJfcG9pbnRlcihyZWxvYyk7Ci0Jc3RhdHVzX29iamVjdFsxXS5yZWxvY2F0aW9uX2Nv dW50ID0gMjsKLQlpZiAoZmxhZ3MgJiBJTklUX0NMT0NLUykKLQkJc3RhdHVzX29iamVjdFsxXS5y ZWxvY2F0aW9uX2NvdW50ICs9IDI7Ci0KLQlmb3IgKGludCBlbmdpbmUgPSAwOyBlbmdpbmUgPCBO VU1fRU5HSU5FUzsgZW5naW5lKyspIHsKLQkJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9u X2VudHJ5ICpyID0gcmVsb2M7Ci0JCXVpbnQ2NF90IHByZXN1bWVkX29mZnNldCA9IHN0YXR1c19v YmplY3RbMF0ub2Zmc2V0OwotCQl1aW50MzJfdCBvZmZzZXQgPSBlbmdpbmUgKiAxMjg7Ci0JCXVp bnQzMl90ICpjcyA9IGJhc2UgKyBvZmZzZXQgLyBzaXplb2YoKmNzKTsKLQkJdWludDY0X3QgYWRk cjsKLQotCQlyLT5vZmZzZXQgPSBvZmZzZXQgKyBzaXplb2YodWludDMyX3QpOwotCQlyLT5kZWx0 YSA9IFNFUU5PX09GRlNFVChlbmdpbmUpOwotCQlyLT5wcmVzdW1lZF9vZmZzZXQgPSBwcmVzdW1l ZF9vZmZzZXQ7Ci0JCWFkZHIgPSBwcmVzdW1lZF9vZmZzZXQgKyByLT5kZWx0YTsKLQkJcisrOwot CQkqY3MrKyA9IE1JX1NUT1JFX0RXT1JEX0lNTTsKLQkJKmNzKysgPSBhZGRyOwotCQkqY3MrKyA9 IGFkZHIgPj4gMzI7Ci0JCSpjcysrID0gbmV3X3NlcW5vKHdyaywgZW5naW5lKTsKLQkJb2Zmc2V0 ICs9IDQgKiBzaXplb2YodWludDMyX3QpOwotCi0JCS8qIFdoZW4gd2UgYXJlIGJ1c3ksIHdlIGNh biBqdXN0IHJldXNlIHRoZSBsYXN0IHNldCBvZiB0aW1pbmdzLgotCQkgKiBJZiB3ZSBoYXZlIGJl ZW4gaWRsZSBmb3IgYSB3aGlsZSwgd2Ugd2FudCB0byByZXNhbXBsZSB0aGUKLQkJICogbGF0ZW5j eSBvbiBlYWNoIGVuZ2luZSAodG8gbWVhc3VyZSBleHRlcm5hbCBsb2FkKS4KLQkJICovCi0JCWlm IChmbGFncyAmIElOSVRfQ0xPQ0tTKSB7Ci0JCQlyLT5vZmZzZXQgPSBvZmZzZXQgKyBzaXplb2Yo dWludDMyX3QpOwotCQkJci0+ZGVsdGEgPSBTRVFOT19PRkZTRVQoZW5naW5lKSArIHNpemVvZih1 aW50MzJfdCk7Ci0JCQlyLT5wcmVzdW1lZF9vZmZzZXQgPSBwcmVzdW1lZF9vZmZzZXQ7Ci0JCQlh ZGRyID0gcHJlc3VtZWRfb2Zmc2V0ICsgci0+ZGVsdGE7Ci0JCQlyKys7Ci0JCQkqY3MrKyA9IE1J X1NUT1JFX0RXT1JEX0lNTTsKLQkJCSpjcysrID0gYWRkcjsKLQkJCSpjcysrID0gYWRkciA+PiAz MjsKLQkJCSpjcysrID0gKlJFRyhSQ1NfVElNRVNUQU1QKTsKLQkJCW9mZnNldCArPSA0ICogc2l6 ZW9mKHVpbnQzMl90KTsKLQotCQkJci0+b2Zmc2V0ID0gb2Zmc2V0ICsgMiAqIHNpemVvZih1aW50 MzJfdCk7Ci0JCQlyLT5kZWx0YSA9IFNFUU5PX09GRlNFVChlbmdpbmUpICsgMipzaXplb2YodWlu dDMyX3QpOwotCQkJci0+cHJlc3VtZWRfb2Zmc2V0ID0gcHJlc3VtZWRfb2Zmc2V0OwotCQkJYWRk ciA9IHByZXN1bWVkX29mZnNldCArIHItPmRlbHRhOwotCQkJcisrOwotCQkJKmNzKysgPSAweDI0 IDw8IDIzIHwgMjsgLyogTUlfU1RPUkVfUkVHX01FTSAqLwotCQkJKmNzKysgPSBSQ1NfVElNRVNU QU1QOwotCQkJKmNzKysgPSBhZGRyOwotCQkJKmNzKysgPSBhZGRyID4+IDMyOwotCQkJb2Zmc2V0 ICs9IDQgKiBzaXplb2YodWludDMyX3QpOwotCQl9Ci0KLQkJci0+b2Zmc2V0ID0gb2Zmc2V0ICsg c2l6ZW9mKHVpbnQzMl90KTsKLQkJci0+ZGVsdGEgPSBTRVFOT19PRkZTRVQoZW5naW5lKSArIDMq c2l6ZW9mKHVpbnQzMl90KTsKLQkJci0+cHJlc3VtZWRfb2Zmc2V0ID0gcHJlc3VtZWRfb2Zmc2V0 OwotCQlhZGRyID0gcHJlc3VtZWRfb2Zmc2V0ICsgci0+ZGVsdGE7Ci0JCXIrKzsKLQkJKmNzKysg PSBNSV9TVE9SRV9EV09SRF9JTU07Ci0JCSpjcysrID0gYWRkcjsKLQkJKmNzKysgPSBhZGRyID4+ IDMyOwotCQkqY3MrKyA9IGN1cnJlbnRfc2Vxbm8od3JrLCBlbmdpbmUpOwotCQlvZmZzZXQgKz0g NCAqIHNpemVvZih1aW50MzJfdCk7Ci0KLQkJKmNzKysgPSBNSV9CQVRDSF9CVUZGRVJfRU5EOwot Ci0JCWViX3NldF9lbmdpbmUoJmViLCBlbmdpbmUsIHdyay0+ZmxhZ3MpOwotCQllYi5mbGFncyB8 PSBJOTE1X0VYRUNfSEFORExFX0xVVDsKLQkJZWIuZmxhZ3MgfD0gSTkxNV9FWEVDX05PX1JFTE9D OwotCi0JCWViLmJhdGNoX3N0YXJ0X29mZnNldCA9IDEyOCAqIGVuZ2luZTsKLQotCQlnZW1fZXhl Y2J1ZihmZCwgJmViKTsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkCiBkb19lYihzdHJ1Y3Qgd29ya2xv YWQgKndyaywgc3RydWN0IHdfc3RlcCAqdywgZW51bSBpbnRlbF9lbmdpbmVfaWQgZW5naW5lLAog ICAgICAgdW5zaWduZWQgaW50IGZsYWdzKQogewotCXVpbnQzMl90IHNlcW5vID0gbmV3X3NlcW5v KHdyaywgZW5naW5lKTsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCWViX3VwZGF0ZV9mbGFncyh3cmss IHcsIGVuZ2luZSwgZmxhZ3MpOwotCi0JaWYgKGZsYWdzICYgU0VRTk8pCi0JCXVwZGF0ZV9iYl9z ZXFubyh3LCBlbmdpbmUsIHNlcW5vKTsKLQlpZiAoZmxhZ3MgJiBSVCkKLQkJdXBkYXRlX2JiX3J0 KHcsIGVuZ2luZSwgc2Vxbm8pOwotCiAJdXBkYXRlX2JiX3N0YXJ0KHcpOwogCiAJdy0+ZWIuYmF0 Y2hfc3RhcnRfb2Zmc2V0ID0KQEAgLTI3NTgsOSArMTczMCw4IEBAIGRvX2ViKHN0cnVjdCB3b3Jr bG9hZCAqd3JrLCBzdHJ1Y3Qgd19zdGVwICp3LCBlbnVtIGludGVsX2VuZ2luZV9pZCBlbmdpbmUs CiAJfQogfQogCi1zdGF0aWMgYm9vbCBzeW5jX2RlcHMoc3RydWN0IHdvcmtsb2FkICp3cmssIHN0 cnVjdCB3X3N0ZXAgKncpCitzdGF0aWMgdm9pZCBzeW5jX2RlcHMoc3RydWN0IHdvcmtsb2FkICp3 cmssIHN0cnVjdCB3X3N0ZXAgKncpCiB7Ci0JYm9vbCBzeW5jZWQgPSBmYWxzZTsKIAl1bnNpZ25l ZCBpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCB3LT5kYXRhX2RlcHMubnI7IGkrKykgewpAQCAt Mjc3NywxMSArMTc0OCw3IEBAIHN0YXRpYyBib29sIHN5bmNfZGVwcyhzdHJ1Y3Qgd29ya2xvYWQg Kndyaywgc3RydWN0IHdfc3RlcCAqdykKIAkJaWd0X2Fzc2VydCh3cmstPnN0ZXBzW2RlcF9pZHhd LnR5cGUgPT0gQkFUQ0gpOwogCiAJCWdlbV9zeW5jKGZkLCB3cmstPnN0ZXBzW2RlcF9pZHhdLm9i alswXS5oYW5kbGUpOwotCi0JCXN5bmNlZCA9IHRydWU7CiAJfQotCi0JcmV0dXJuIHN5bmNlZDsK IH0KIAogc3RhdGljIHZvaWQgKnJ1bl93b3JrbG9hZCh2b2lkICpkYXRhKQpAQCAtMjc4OSw3ICsx NzU2LDYgQEAgc3RhdGljIHZvaWQgKnJ1bl93b3JrbG9hZCh2b2lkICpkYXRhKQogCXN0cnVjdCB3 b3JrbG9hZCAqd3JrID0gKHN0cnVjdCB3b3JrbG9hZCAqKWRhdGE7CiAJc3RydWN0IHRpbWVzcGVj IHRfc3RhcnQsIHRfZW5kOwogCXN0cnVjdCB3X3N0ZXAgKnc7Ci0JYm9vbCBsYXN0X3N5bmMgPSBm YWxzZTsKIAlpbnQgdGhyb3R0bGUgPSAtMTsKIAlpbnQgcWRfdGhyb3R0bGUgPSAtMTsKIAlpbnQg Y291bnQ7CkBAIC0yNzk3LDcgKzE3NjMsNiBAQCBzdGF0aWMgdm9pZCAqcnVuX3dvcmtsb2FkKHZv aWQgKmRhdGEpCiAKIAljbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJnRfc3RhcnQpOwog Ci0JaW5pdF9zdGF0dXNfcGFnZSh3cmssIElOSVRfQUxMKTsKIAlmb3IgKGNvdW50ID0gMDsgd3Jr LT5ydW4gJiYgKHdyay0+YmFja2dyb3VuZCB8fCBjb3VudCA8IHdyay0+cmVwZWF0KTsKIAkgICAg IGNvdW50KyspIHsKIAkJdW5zaWduZWQgaW50IGN1cl9zZXFubyA9IHdyay0+c3luY19zZXFubzsK QEAgLTI4OTgsMjEgKzE4NjMsOCBAQCBzdGF0aWMgdm9pZCAqcnVuX3dvcmtsb2FkKHZvaWQgKmRh dGEpCiAKIAkJCWlndF9hc3NlcnQody0+dHlwZSA9PSBCQVRDSCk7CiAKLQkJCWlmICgod3JrLT5m bGFncyAmIERFUFNZTkMpICYmIGVuZ2luZSA9PSBWQ1MpCi0JCQkJbGFzdF9zeW5jID0gc3luY19k ZXBzKHdyaywgdyk7Ci0KLQkJCWlmIChsYXN0X3N5bmMgJiYgKHdyay0+ZmxhZ3MgJiBIRUFSVEJF QVQpKQotCQkJCWluaXRfc3RhdHVzX3BhZ2Uod3JrLCAwKTsKLQotCQkJbGFzdF9zeW5jID0gZmFs c2U7Ci0KLQkJCXdyay0+bnJfYmJbZW5naW5lXSsrOwotCQkJaWYgKGVuZ2luZSA9PSBWQ1MgJiYg d3JrLT5iYWxhbmNlciAmJgotCQkJICAgIHdyay0+YmFsYW5jZXItPmJhbGFuY2UpIHsKLQkJCQll bmdpbmUgPSB3cmstPmJhbGFuY2VyLT5iYWxhbmNlKHdyay0+YmFsYW5jZXIsCi0JCQkJCQkJCXdy aywgdyk7Ci0JCQkJd3JrLT5ucl9iYltlbmdpbmVdKys7Ci0JCQl9CisJCQlpZiAod3JrLT5mbGFn cyAmIERFUFNZTkMpCisJCQkJc3luY19kZXBzKHdyaywgdyk7CiAKIAkJCWlmICh0aHJvdHRsZSA+ IDApCiAJCQkJd19zeW5jX3RvKHdyaywgdywgaSAtIHRocm90dGxlKTsKQEAgLTI5MzAsMTAgKzE4 ODIsOCBAQCBzdGF0aWMgdm9pZCAqcnVuX3dvcmtsb2FkKHZvaWQgKmRhdGEpCiAJCQlpZiAoIXdy ay0+cnVuKQogCQkJCWJyZWFrOwogCi0JCQlpZiAody0+c3luYykgeworCQkJaWYgKHctPnN5bmMp CiAJCQkJZ2VtX3N5bmMoZmQsIHctPm9ialswXS5oYW5kbGUpOwotCQkJCWxhc3Rfc3luYyA9IHRy dWU7Ci0JCQl9CiAKIAkJCWlmIChxZF90aHJvdHRsZSA+IDApIHsKIAkJCQl3aGlsZSAod3JrLT5u cmVxdWVzdFtlbmdpbmVdID4gcWRfdGhyb3R0bGUpIHsKQEAgLTI5NDMsNyArMTg5Myw2IEBAIHN0 YXRpYyB2b2lkICpydW5fd29ya2xvYWQodm9pZCAqZGF0YSkKIAkJCQkJCQkJIHMsIHJxX2xpbmsp OwogCiAJCQkJCWdlbV9zeW5jKGZkLCBzLT5vYmpbMF0uaGFuZGxlKTsKLQkJCQkJbGFzdF9zeW5j ID0gdHJ1ZTsKIAogCQkJCQlzLT5yZXF1ZXN0ID0gLTE7CiAJCQkJCWlndF9saXN0X2RlbCgmcy0+ cnFfbGluayk7CkBAIC0yOTg2LDEzICsxOTM1LDYgQEAgc3RhdGljIHZvaWQgKnJ1bl93b3JrbG9h ZCh2b2lkICpkYXRhKQogCQlwcmludGYoIiVjJXU6ICUuM2ZzIGVsYXBzZWQgKCVkIGN5Y2xlcywg JS4zZiB3b3JrbG9hZHMvcykuIiwKIAkJICAgICAgIHdyay0+YmFja2dyb3VuZCA/ICcgJyA6ICcq Jywgd3JrLT5pZCwKIAkJICAgICAgIHQsIGNvdW50LCBjb3VudCAvIHQpOwotCQlpZiAod3JrLT5i YWxhbmNlcikKLQkJCXByaW50ZigiICVsdSAoJWx1ICsgJWx1KSB0b3RhbCBWQ1MgYmF0Y2hlcy4i LAotCQkJICAgICAgIHdyay0+bnJfYmJbVkNTXSwgd3JrLT5ucl9iYltWQ1MxXSwgd3JrLT5ucl9i YltWQ1MyXSk7Ci0JCWlmICh3cmstPmJhbGFuY2VyICYmIHdyay0+YmFsYW5jZXItPmdldF9xZCkK LQkJCXByaW50ZigiIEF2ZXJhZ2UgcXVldWUgZGVwdGhzICUuM2YsICUuM2YuIiwKLQkJCSAgICAg ICAoZG91YmxlKXdyay0+cWRfc3VtW1ZDUzFdIC8gd3JrLT5ucl9iYltWQ1NdLAotCQkJICAgICAg IChkb3VibGUpd3JrLT5xZF9zdW1bVkNTMl0gLyB3cmstPm5yX2JiW1ZDU10pOwogCQlwdXRjaGFy KCdcbicpOwogCX0KIApAQCAtMzExNCw4ICsyMDU2LDYgQEAgY2FsaWJyYXRlX2VuZ2luZXModm9p ZCkKIAogc3RhdGljIHZvaWQgcHJpbnRfaGVscCh2b2lkKQogewotCXVuc2lnbmVkIGludCBpOwot CiAJcHV0cygKICJVc2FnZTogZ2VtX3dzaW0gW09QVElPTlNdXG4iCiAiXG4iCkBAIC0zMTQ1LDMy ICsyMDg1LDExIEBAIHN0YXRpYyB2b2lkIHByaW50X2hlbHAodm9pZCkKICIgIC1hIDxkZXNjfHBh dGg+ICAgIEFwcGVuZCBhIHdvcmtsb2FkIHRvIGFsbCBvdGhlciB3b3JrbG9hZHMuXG4iCiAiICAt ciA8bj4gICAgICAgICAgICBIb3cgbWFueSB0aW1lcyB0byBlbWl0IHRoZSB3b3JrbG9hZC5cbiIK ICIgIC1jIDxuPiAgICAgICAgICAgIEZvcmsgTiBjbGllbnRzIGVtaXR0aW5nIHRoZSB3b3JrbG9h ZCBzaW11bHRhbmVvdXNseS5cbiIKLSIgIC14ICAgICAgICAgICAgICAgIFN3YXAgVkNTMSBhbmQg VkNTMiBlbmdpbmVzIGluIGV2ZXJ5IG90aGVyIGNsaWVudC5cbiIKLSIgIC1iIDxuPiAgICAgICAg ICAgIExvYWQgYmFsYW5jaW5nIHRvIHVzZS5cbiIKLSIgICAgICAgICAgICAgICAgICAgIEF2YWls YWJsZSBsb2FkIGJhbGFuY2VycyBhcmU6IgotCSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRShhbGxfYmFsYW5jZXJzKTsgaSsrKSB7Ci0JCWlndF9hc3NlcnQoYWxsX2JhbGFuY2Vyc1tp XS5kZXNjKTsKLQkJcHJpbnRmKAotIiAgICAgICAgICAgICAgICAgICAgICAgJXMgKCV1KTogJXNc biIsCi0JCSAgICAgICBhbGxfYmFsYW5jZXJzW2ldLm5hbWUsIGFsbF9iYWxhbmNlcnNbaV0uaWQs Ci0JCSAgICAgICBhbGxfYmFsYW5jZXJzW2ldLmRlc2MpOwotCX0KLQlwdXRzKAotIiAgICAgICAg ICAgICAgICAgICAgIEJhbGFuY2VycyBjYW4gYmUgc3BlY2lmaWVkIGVpdGhlciBhcyBuYW1lcyBv ciBhcyB0aGVpciBpZFxuIgotIiAgICAgICAgICAgICAgICAgICAgIG51bWJlciBhcyBsaXN0ZWQg YWJvdmUuXG4iCi0iICAtMiAgICAgICAgICAgICAgICAgUmVtYXAgVkNTMiB0byBCQ1MuXG4iCi0i ICAtUiAgICAgICAgICAgICAgICAgUm91bmQtcm9iaW4gaW5pdGlhbCBWQ1MgYXNzaWdubWVudCBw ZXIgY2xpZW50LlxuIgotIiAgLUggICAgICAgICAgICAgICAgIFNlbmQgaGVhcnRiZWF0IG9uIHN5 bmNocm9uaXNhdGlvbiBwb2ludHMgd2l0aCBzZXFubyBiYXNlZFxuIgotIiAgICAgICAgICAgICAg ICAgICAgIGJhbGFuY2Vycy4gR2l2ZXMgYmV0dGVyIGVuZ2luZSBidXN5bmVzcyB2aWV3IGluIHNv bWUgY2FzZXMuXG4iCi0iICAtcyAgICAgICAgICAgICAgICAgVHVybiBvbiBzbWFsbCBTU0VVIGNv bmZpZyBmb3IgdGhlIG5leHQgd29ya2xvYWQgb24gdGhlXG4iCi0iICAgICAgICAgICAgICAgICAg ICAgY29tbWFuZCBsaW5lLiBTdWJzZXF1ZW50IC1zIHN3aXRjaGVzIGl0IG9mZi5cbiIKLSIgIC1T ICAgICAgICAgICAgICAgICBTeW5jaHJvbml6ZSB0aGUgc2VxdWVuY2Ugb2YgcmFuZG9tIGJhdGNo IGR1cmF0aW9ucyBiZXR3ZWVuXG4iCi0iICAgICAgICAgICAgICAgICAgICAgY2xpZW50cy5cbiIK LSIgIC1HICAgICAgICAgICAgICAgICBHbG9iYWwgbG9hZCBiYWxhbmNpbmcgLSBhIHNpbmdsZSBs b2FkIGJhbGFuY2VyIHdpbGwgYmUgc2hhcmVkXG4iCi0iICAgICAgICAgICAgICAgICAgICAgYmV0 d2VlbiBhbGwgY2xpZW50cyBhbmQgdGhlcmUgd2lsbCBiZSBhIHNpbmdsZSBzZXFubyBkb21haW4u XG4iCi0iICAtZCAgICAgICAgICAgICAgICAgU3luYyBiZXR3ZWVuIGRhdGEgZGVwZW5kZW5jaWVz IGluIHVzZXJzcGFjZS4iCisiICAtcyAgICAgICAgICAgICAgICBUdXJuIG9uIHNtYWxsIFNTRVUg Y29uZmlnIGZvciB0aGUgbmV4dCB3b3JrbG9hZCBvbiB0aGVcbiIKKyIgICAgICAgICAgICAgICAg ICAgIGNvbW1hbmQgbGluZS4gU3Vic2VxdWVudCAtcyBzd2l0Y2hlcyBpdCBvZmYuXG4iCisiICAt UyAgICAgICAgICAgICAgICBTeW5jaHJvbml6ZSB0aGUgc2VxdWVuY2Ugb2YgcmFuZG9tIGJhdGNo IGR1cmF0aW9ucyBiZXR3ZWVuXG4iCisiICAgICAgICAgICAgICAgICAgICBjbGllbnRzLlxuIgor IiAgLWQgICAgICAgICAgICAgICAgU3luYyBiZXR3ZWVuIGRhdGEgZGVwZW5kZW5jaWVzIGluIHVz ZXJzcGFjZS4iCiAJKTsKIH0KIApAQCAtMzIxOCw2MiArMjEzNyw2IEBAIGFkZF93b3JrbG9hZF9h cmcoc3RydWN0IHdfYXJnICp3X2FyZ3MsIHVuc2lnbmVkIGludCBucl9hcmdzLCBjaGFyICp3X2Fy ZywKIAlyZXR1cm4gd19hcmdzOwogfQogCi1zdGF0aWMgaW50IGZpbmRfYmFsYW5jZXJfYnlfbmFt ZShjaGFyICpuYW1lKQotewotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFS UkFZX1NJWkUoYWxsX2JhbGFuY2Vycyk7IGkrKykgewotCQlpZiAoIXN0cmNhc2VjbXAobmFtZSwg YWxsX2JhbGFuY2Vyc1tpXS5uYW1lKSkKLQkJCXJldHVybiBhbGxfYmFsYW5jZXJzW2ldLmlkOwot CX0KLQotCXJldHVybiAtMTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCB3b3JrbG9hZF9iYWxh bmNlciAqZmluZF9iYWxhbmNlcl9ieV9pZCh1bnNpZ25lZCBpbnQgaWQpCi17Ci0JdW5zaWduZWQg aW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbGxfYmFsYW5jZXJzKTsgaSsr KSB7Ci0JCWlmIChpZCA9PSBhbGxfYmFsYW5jZXJzW2ldLmlkKQotCQkJcmV0dXJuICZhbGxfYmFs YW5jZXJzW2ldOwotCX0KLQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCBpbml0X2Ns b2Nrcyh2b2lkKQotewotCXN0cnVjdCB0aW1lc3BlYyB0X3N0YXJ0LCB0X2VuZDsKLQl1aW50MzJf dCByY3Nfc3RhcnQsIHJjc19lbmQ7Ci0JZG91YmxlIG92ZXJoZWFkLCB0OwotCi0JaWYgKHZlcmJv c2UgPD0gMSkKLQkJcmV0dXJuOwotCi0JY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZ0 X3N0YXJ0KTsKLQlmb3IgKGludCBpID0gMDsgaSA8IDEwMDsgaSsrKQotCQlyY3Nfc3RhcnQgPSAq UkVHKFJDU19USU1FU1RBTVApOwotCWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmdF9l bmQpOwotCW92ZXJoZWFkID0gMiAqIGVsYXBzZWQoJnRfc3RhcnQsICZ0X2VuZCkgLyAxMDA7Ci0K LQljbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJnRfc3RhcnQpOwotCWZvciAoaW50IGkg PSAwOyBpIDwgMTAwOyBpKyspCi0JCWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmdF9l bmQpOwotCWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmdF9lbmQpOwotCW92ZXJoZWFk ICs9IGVsYXBzZWQoJnRfc3RhcnQsICZ0X2VuZCkgLyAxMDA7Ci0KLQljbG9ja19nZXR0aW1lKENM T0NLX01PTk9UT05JQywgJnRfc3RhcnQpOwotCXJjc19zdGFydCA9ICpSRUcoUkNTX1RJTUVTVEFN UCk7Ci0JdXNsZWVwKDEwMCk7Ci0JcmNzX2VuZCA9ICpSRUcoUkNTX1RJTUVTVEFNUCk7Ci0JY2xv Y2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZ0X2VuZCk7Ci0KLQl0ID0gZWxhcHNlZCgmdF9z dGFydCwgJnRfZW5kKSAtIG92ZXJoZWFkOwotCXByaW50ZigiJWQgY3ljbGVzIGluICUuMWZ1cywg aS5lLiAxMDI0IGN5Y2xlcyB0YWtlcyAlMS5mdXNcbiIsCi0JICAgICAgIHJjc19lbmQgLSByY3Nf c3RhcnQsIDFlNip0LCAxMDI0ZTYgKiB0IC8gKHJjc19lbmQgLSByY3Nfc3RhcnQpKTsKLX0KLQog aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogCXVuc2lnbmVkIGludCByZXBlYXQg PSAxOwpAQCAtMzI4Nyw5ICsyMTUwLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQogCWNoYXIgKmFwcGVuZF93b3JrbG9hZF9hcmcgPSBOVUxMOwogCXN0cnVjdCB3X2FyZyAqd19h cmdzID0gTlVMTDsKIAl1bnNpZ25lZCBpbnQgdG9sZXJhbmNlX3BjdCA9IDE7Ci0JY29uc3Qgc3Ry dWN0IHdvcmtsb2FkX2JhbGFuY2VyICpiYWxhbmNlciA9IE5VTEw7CiAJaW50IGV4aXRjb2RlID0g RVhJVF9GQUlMVVJFOwotCWNoYXIgKmVuZHB0ciA9IE5VTEw7CiAJaW50IHByaW8gPSAwOwogCWRv dWJsZSB0OwogCWludCBpLCBjOwpAQCAtMzMwNCwxNyArMjE2NSwxMyBAQCBpbnQgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCiAJICogVGhpcyBtaW5pbWl6ZXMgdGhlIGdhcCBpbiBlbmdpbmUg dXRpbGl6YXRpb24gdHJhY2tpbmcgd2hlbiBvYnNlcnZlZAogCSAqIHZpYSBleHRlcm5hbCB0b29s cyBsaWtlIHRyYWNlLnBsLgogCSAqLwotCWZkID0gX19kcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lO VEVMKTsKKwlmZCA9IF9fZHJtX29wZW5fZHJpdmVyX3JlbmRlcihEUklWRVJfSU5URUwpOwogCWln dF9yZXF1aXJlKGZkKTsKIAotCWludGVsX3JlZ2lzdGVyX2FjY2Vzc19pbml0KCZtbWlvX2RhdGEs IGludGVsX2dldF9wY2lfZGV2aWNlKCksIGZhbHNlLCBmZCk7Ci0KLQlpbml0X2Nsb2NrcygpOwot CiAJbWFzdGVyX3BybmcgPSB0aW1lKE5VTEwpOwogCiAJd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2Ms IGFyZ3YsCi0JCQkgICAiVGhxdjJSc1NIeEdkYzpuOnI6dzpXOmE6dDpiOnA6SToiKSkgIT0gLTEp IHsKKwkJCSAgICJUaHF2c1NkYzpuOnI6dzpXOmE6dDpwOkk6IikpICE9IC0xKSB7CiAJCXN3aXRj aCAoYykgewogCQljYXNlICdXJzoKIAkJCWlmIChtYXN0ZXJfd29ya2xvYWQgPj0gMCkgewpAQCAt MzQxMyw1MiArMjI3MCwxNSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCWNh c2UgJ3YnOgogCQkJdmVyYm9zZSsrOwogCQkJYnJlYWs7Ci0JCWNhc2UgJ3gnOgotCQkJZmxhZ3Mg fD0gU1dBUFZDUzsKLQkJCWJyZWFrOwotCQljYXNlICcyJzoKLQkJCWZsYWdzIHw9IFZDUzJSRU1B UDsKLQkJCWJyZWFrOwotCQljYXNlICdSJzoKLQkJCWZsYWdzIHw9IElOSVRWQ1NSUjsKLQkJCWJy ZWFrOwogCQljYXNlICdTJzoKIAkJCWZsYWdzIHw9IFNZTkNFRENMSUVOVFM7CiAJCQlicmVhazsK IAkJY2FzZSAncyc6CiAJCQlmbGFncyBePSBTU0VVOwogCQkJYnJlYWs7Ci0JCWNhc2UgJ0gnOgot CQkJZmxhZ3MgfD0gSEVBUlRCRUFUOwotCQkJYnJlYWs7Ci0JCWNhc2UgJ0cnOgotCQkJZmxhZ3Mg fD0gR0xPQkFMX0JBTEFOQ0U7Ci0JCQlicmVhazsKIAkJY2FzZSAnZCc6CiAJCQlmbGFncyB8PSBE RVBTWU5DOwogCQkJYnJlYWs7Ci0JCWNhc2UgJ2InOgotCQkJaSA9IGZpbmRfYmFsYW5jZXJfYnlf bmFtZShvcHRhcmcpOwotCQkJaWYgKGkgPCAwKSB7Ci0JCQkJaSA9IHN0cnRvbChvcHRhcmcsICZl bmRwdHIsIDApOwotCQkJCWlmIChlbmRwdHIgJiYgKmVuZHB0cikKLQkJCQkJaSA9IC0xOwotCQkJ fQotCi0JCQlpZiAoaSA+PSAwKSB7Ci0JCQkJYmFsYW5jZXIgPSBmaW5kX2JhbGFuY2VyX2J5X2lk KGkpOwotCQkJCWlmIChiYWxhbmNlcikgewotCQkJCQlpZ3RfYXNzZXJ0KGludGVsX2dlbihpbnRl bF9nZXRfZHJtX2RldmlkKGZkKSkgPj0gYmFsYW5jZXItPm1pbl9nZW4pOwotCQkJCQlmbGFncyB8 PSBCQUxBTkNFIHwgYmFsYW5jZXItPmZsYWdzOwotCQkJCX0KLQkJCX0KLQotCQkJaWYgKCFiYWxh bmNlcikgewotCQkJCXdzaW1fZXJyKCJVbmtub3duIGJhbGFuY2luZyBtb2RlICclcychXG4iLAot CQkJCQkgb3B0YXJnKTsKLQkJCQlnb3RvIGVycjsKLQkJCX0KLQkJCWJyZWFrOwogCQljYXNlICdJ JzoKIAkJCW1hc3Rlcl9wcm5nID0gc3RydG9sKG9wdGFyZywgTlVMTCwgMCk7CiAJCQlicmVhazsK QEAgLTM0NzAsMTYgKzIyOTAsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJ CX0KIAl9CiAKLQlpZiAoKGZsYWdzICYgSEVBUlRCRUFUKSAmJiAhKGZsYWdzICYgU0VRTk8pKSB7 Ci0JCXdzaW1fZXJyKCJIZWFydGJlYXQgbmVlZHMgYSBzZXFubyBiYXNlZCBiYWxhbmNlciFcbiIp OwotCQlnb3RvIGVycjsKLQl9Ci0KLQlpZiAoKGZsYWdzICYgVkNTMlJFTUFQKSAmJiAoZmxhZ3Mg JiBJOTE1KSkgewotCQl3c2ltX2VycigiVkNTIHJlbWFwcGluZyBub3Qgc3VwcG9ydGVkIHdpdGgg aTkxNSBiYWxhbmNpbmchXG4iKTsKLQkJZ290byBlcnI7Ci0JfQotCiAJaWYgKCFoYXNfbm9wX2Nh bGlicmF0aW9uKSB7CiAJCWlmICh2ZXJib3NlID4gMSkgewogCQkJcHJpbnRmKCJDYWxpYnJhdGlu ZyBub3AgZGVsYXlzIHdpdGggJXUlJSB0b2xlcmFuY2UuLi5cbiIsCkBAIC0zNTE5LDExICsyMzI5 LDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlnb3RvIGVycjsKIAl9CiAK LQlpZiAoKGZsYWdzICYgR0xPQkFMX0JBTEFOQ0UpICYmICFiYWxhbmNlcikgewotCQl3c2ltX2Vy cigiQmFsYW5jZXIgbm90IHNwZWNpZmllZCBpbiBnbG9iYWwgYmFsYW5jaW5nIG1vZGUhXG4iKTsK LQkJZ290byBlcnI7Ci0JfQotCiAJaWYgKGFwcGVuZF93b3JrbG9hZF9hcmcpIHsKIAkJYXBwZW5k X3dvcmtsb2FkX2FyZyA9IGxvYWRfd29ya2xvYWRfZGVzY3JpcHRvcihhcHBlbmRfd29ya2xvYWRf YXJnKTsKIAkJaWYgKCFhcHBlbmRfd29ya2xvYWRfYXJnKSB7CkBAIC0zNTY2LDE5ICsyMzcxLDYg QEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlwcmludGYoIlJhbmRvbSBzZWVk IGlzICV1LlxuIiwgbWFzdGVyX3BybmcpOwogCQlwcmludF9lbmdpbmVfY2FsaWJyYXRpb25zKCk7 CiAJCXByaW50ZigiJXUgY2xpZW50JXMuXG4iLCBjbGllbnRzLCBjbGllbnRzID4gMSA/ICJzIiA6 ICIiKTsKLQkJaWYgKGZsYWdzICYgU1dBUFZDUykKLQkJCXByaW50ZigiU3dhcHBpbmcgVkNTIHJp bmdzIGJldHdlZW4gY2xpZW50cy5cbiIpOwotCQlpZiAoZmxhZ3MgJiBHTE9CQUxfQkFMQU5DRSkg ewotCQkJaWYgKGZsYWdzICYgSTkxNSkgewotCQkJCXByaW50ZigiSWdub3JpbmcgZ2xvYmFsIGJh bGFuY2luZyB3aXRoIGk5MTUhXG4iKTsKLQkJCQlmbGFncyAmPSB+R0xPQkFMX0JBTEFOQ0U7Ci0J CQl9IGVsc2UgewotCQkJCXByaW50ZigiVXNpbmcgJXMgYmFsYW5jZXIgaW4gZ2xvYmFsIG1vZGUu XG4iLAotCQkJCSAgICAgICBiYWxhbmNlci0+bmFtZSk7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoYmFs YW5jZXIpIHsKLQkJCXByaW50ZigiVXNpbmcgJXMgYmFsYW5jZXIuXG4iLCBiYWxhbmNlci0+bmFt ZSk7Ci0JCX0KIAl9CiAKIAlzcmFuZChtYXN0ZXJfcHJuZyk7CkBAIC0zNTkxLDQxICsyMzgzLDE4 IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlpZ3RfYXNzZXJ0KHcpOwogCiAJ Zm9yIChpID0gMDsgaSA8IGNsaWVudHM7IGkrKykgewotCQl1bnNpZ25lZCBpbnQgZmxhZ3NfID0g ZmxhZ3M7Ci0KIAkJd1tpXSA9IGNsb25lX3dvcmtsb2FkKHdya1tucl93X2FyZ3MgPiAxID8gaSA6 IDBdKTsKIAotCQlpZiAoZmxhZ3MgJiBTV0FQVkNTICYmIGkgJiAxKQotCQkJZmxhZ3NfICY9IH5T V0FQVkNTOwotCi0JCWlmICgoZmxhZ3MgJiBHTE9CQUxfQkFMQU5DRSkgJiYgIShmbGFncyAmIEk5 MTUpKSB7Ci0JCQl3W2ldLT5iYWxhbmNlciA9ICZnbG9iYWxfYmFsYW5jZXI7Ci0JCQl3W2ldLT5n bG9iYWxfd3JrID0gd1swXTsKLQkJCXdbaV0tPmdsb2JhbF9iYWxhbmNlciA9IGJhbGFuY2VyOwot CQl9IGVsc2UgewotCQkJd1tpXS0+YmFsYW5jZXIgPSBiYWxhbmNlcjsKLQkJfQotCiAJCXdbaV0t PmZsYWdzID0gZmxhZ3M7CiAJCXdbaV0tPnJlcGVhdCA9IHJlcGVhdDsKIAkJd1tpXS0+YmFja2dy b3VuZCA9IG1hc3Rlcl93b3JrbG9hZCA+PSAwICYmIGkgIT0gbWFzdGVyX3dvcmtsb2FkOwogCQl3 W2ldLT5wcmludF9zdGF0cyA9IHZlcmJvc2UgPiAxIHx8CiAJCQkJICAgICh2ZXJib3NlID4gMCAm JiBtYXN0ZXJfd29ya2xvYWQgPT0gaSk7CiAKLQkJaWYgKHByZXBhcmVfd29ya2xvYWQoaSwgd1tp XSwgZmxhZ3NfKSkgeworCQlpZiAocHJlcGFyZV93b3JrbG9hZChpLCB3W2ldLCBmbGFncykpIHsK IAkJCXdzaW1fZXJyKCJGYWlsZWQgdG8gcHJlcGFyZSB3b3JrbG9hZCAldSFcbiIsIGkpOwogCQkJ Z290byBlcnI7CiAJCX0KLQotCi0JCWlmIChiYWxhbmNlciAmJiBiYWxhbmNlci0+aW5pdCkgewot CQkJaW50IHJldCA9IGJhbGFuY2VyLT5pbml0KGJhbGFuY2VyLCB3W2ldKTsKLQkJCWlmIChyZXQp IHsKLQkJCQl3c2ltX2VycigiRmFpbGVkIHRvIGluaXRpYWxpemUgYmFsYW5jaW5nISAoJXU9JWQp XG4iLAotCQkJCQkgaSwgcmV0KTsKLQkJCQlnb3RvIGVycjsKLQkJCX0KLQkJfQogCX0KIAogCWNs b2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmdF9zdGFydCk7CkBAIC0zNjcwLDYgKzI0Mzks NSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiBvdXQ6CiAJZXhpdGNvZGUgPSBF WElUX1NVQ0NFU1M7CiBlcnI6Ci0JaW50ZWxfcmVnaXN0ZXJfYWNjZXNzX2ZpbmkoJm1taW9fZGF0 YSk7CiAJcmV0dXJuIGV4aXRjb2RlOwogfQpkaWZmIC0tZ2l0IGEvYmVuY2htYXJrcy9pbG9nMi5o IGIvYmVuY2htYXJrcy9pbG9nMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTZk N2MyM2UwZDEuLjAwMDAwMDAwMDAwMAotLS0gYS9iZW5jaG1hcmtzL2lsb2cyLmgKKysrIC9kZXYv bnVsbApAQCAtMSwxMDQgKzAsMCBAQAotI2lmbmRlZiBJTE9HMl9ICi0jZGVmaW5lIElMT0cyX0gK LQotI2luY2x1ZGUgPHN0ZGludC5oPgotCi1zdGF0aWMgaW5saW5lIGludCBmbHMoaW50IHgpCi17 Ci0gICAgICAgIGludCByID0gLTE7Ci0gICAgICAgIGFzbSgiYnNybCAlMSwlMCIgOiAiPXIiIChy KSA6ICJybSIgKHgpLCAiMCIgKC0xKSk7Ci0gICAgICAgIHJldHVybiByICsgMTsKLX0KLQotc3Rh dGljIGlubGluZSBpbnQgZmxzNjQoX191NjQgeCkKLXsKLSAgICAgICAgaW50IHIgPSAtMTsKLSAg ICAgICAgYXNtKCJic3JxICUxLCVxMCIgOiAiK3IiIChyKSA6ICJybSIgKHgpKTsKLSAgICAgICAg cmV0dXJuIHIgKyAxOwotfQotCi1zdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKGNvbnN0KSkK LWludCBfX2lsb2cyX3UzMih1aW50MzJfdCBuKQotewotCXJldHVybiBmbHMobikgLSAxOwotfQot Ci1zdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKGNvbnN0KSkKLWludCBfX2lsb2cyX3U2NCh1 aW50NjRfdCBuKQotewotCXJldHVybiBmbHM2NChuKSAtIDE7Ci19Ci0KLSNkZWZpbmUgaWxvZzIo bikJCQkJXAotKAkJCQkJCVwKLQlfX2J1aWx0aW5fY29uc3RhbnRfcChuKSA/ICgJCVwKLQkJKG4p IDwgMiA/IDAgOgkJCVwKLQkJKG4pICYgKDFVTEwgPDwgNjMpID8gNjMgOglcCi0JCShuKSAmICgx VUxMIDw8IDYyKSA/IDYyIDoJXAotCQkobikgJiAoMVVMTCA8PCA2MSkgPyA2MSA6CVwKLQkJKG4p ICYgKDFVTEwgPDwgNjApID8gNjAgOglcCi0JCShuKSAmICgxVUxMIDw8IDU5KSA/IDU5IDoJXAot CQkobikgJiAoMVVMTCA8PCA1OCkgPyA1OCA6CVwKLQkJKG4pICYgKDFVTEwgPDwgNTcpID8gNTcg OglcCi0JCShuKSAmICgxVUxMIDw8IDU2KSA/IDU2IDoJXAotCQkobikgJiAoMVVMTCA8PCA1NSkg PyA1NSA6CVwKLQkJKG4pICYgKDFVTEwgPDwgNTQpID8gNTQgOglcCi0JCShuKSAmICgxVUxMIDw8 IDUzKSA/IDUzIDoJXAotCQkobikgJiAoMVVMTCA8PCA1MikgPyA1MiA6CVwKLQkJKG4pICYgKDFV TEwgPDwgNTEpID8gNTEgOglcCi0JCShuKSAmICgxVUxMIDw8IDUwKSA/IDUwIDoJXAotCQkobikg JiAoMVVMTCA8PCA0OSkgPyA0OSA6CVwKLQkJKG4pICYgKDFVTEwgPDwgNDgpID8gNDggOglcCi0J CShuKSAmICgxVUxMIDw8IDQ3KSA/IDQ3IDoJXAotCQkobikgJiAoMVVMTCA8PCA0NikgPyA0NiA6 CVwKLQkJKG4pICYgKDFVTEwgPDwgNDUpID8gNDUgOglcCi0JCShuKSAmICgxVUxMIDw8IDQ0KSA/ IDQ0IDoJXAotCQkobikgJiAoMVVMTCA8PCA0MykgPyA0MyA6CVwKLQkJKG4pICYgKDFVTEwgPDwg NDIpID8gNDIgOglcCi0JCShuKSAmICgxVUxMIDw8IDQxKSA/IDQxIDoJXAotCQkobikgJiAoMVVM TCA8PCA0MCkgPyA0MCA6CVwKLQkJKG4pICYgKDFVTEwgPDwgMzkpID8gMzkgOglcCi0JCShuKSAm ICgxVUxMIDw8IDM4KSA/IDM4IDoJXAotCQkobikgJiAoMVVMTCA8PCAzNykgPyAzNyA6CVwKLQkJ KG4pICYgKDFVTEwgPDwgMzYpID8gMzYgOglcCi0JCShuKSAmICgxVUxMIDw8IDM1KSA/IDM1IDoJ XAotCQkobikgJiAoMVVMTCA8PCAzNCkgPyAzNCA6CVwKLQkJKG4pICYgKDFVTEwgPDwgMzMpID8g MzMgOglcCi0JCShuKSAmICgxVUxMIDw8IDMyKSA/IDMyIDoJXAotCQkobikgJiAoMVVMTCA8PCAz MSkgPyAzMSA6CVwKLQkJKG4pICYgKDFVTEwgPDwgMzApID8gMzAgOglcCi0JCShuKSAmICgxVUxM IDw8IDI5KSA/IDI5IDoJXAotCQkobikgJiAoMVVMTCA8PCAyOCkgPyAyOCA6CVwKLQkJKG4pICYg KDFVTEwgPDwgMjcpID8gMjcgOglcCi0JCShuKSAmICgxVUxMIDw8IDI2KSA/IDI2IDoJXAotCQko bikgJiAoMVVMTCA8PCAyNSkgPyAyNSA6CVwKLQkJKG4pICYgKDFVTEwgPDwgMjQpID8gMjQgOglc Ci0JCShuKSAmICgxVUxMIDw8IDIzKSA/IDIzIDoJXAotCQkobikgJiAoMVVMTCA8PCAyMikgPyAy MiA6CVwKLQkJKG4pICYgKDFVTEwgPDwgMjEpID8gMjEgOglcCi0JCShuKSAmICgxVUxMIDw8IDIw KSA/IDIwIDoJXAotCQkobikgJiAoMVVMTCA8PCAxOSkgPyAxOSA6CVwKLQkJKG4pICYgKDFVTEwg PDwgMTgpID8gMTggOglcCi0JCShuKSAmICgxVUxMIDw8IDE3KSA/IDE3IDoJXAotCQkobikgJiAo MVVMTCA8PCAxNikgPyAxNiA6CVwKLQkJKG4pICYgKDFVTEwgPDwgMTUpID8gMTUgOglcCi0JCShu KSAmICgxVUxMIDw8IDE0KSA/IDE0IDoJXAotCQkobikgJiAoMVVMTCA8PCAxMykgPyAxMyA6CVwK LQkJKG4pICYgKDFVTEwgPDwgMTIpID8gMTIgOglcCi0JCShuKSAmICgxVUxMIDw8IDExKSA/IDEx IDoJXAotCQkobikgJiAoMVVMTCA8PCAxMCkgPyAxMCA6CVwKLQkJKG4pICYgKDFVTEwgPDwgIDkp ID8gIDkgOglcCi0JCShuKSAmICgxVUxMIDw8ICA4KSA/ICA4IDoJXAotCQkobikgJiAoMVVMTCA8 PCAgNykgPyAgNyA6CVwKLQkJKG4pICYgKDFVTEwgPDwgIDYpID8gIDYgOglcCi0JCShuKSAmICgx VUxMIDw8ICA1KSA/ICA1IDoJXAotCQkobikgJiAoMVVMTCA8PCAgNCkgPyAgNCA6CVwKLQkJKG4p ICYgKDFVTEwgPDwgIDMpID8gIDMgOglcCi0JCShuKSAmICgxVUxMIDw8ICAyKSA/ICAyIDoJXAot CQkxICkgOgkJCQlcCi0JKHNpemVvZihuKSA8PSA0KSA/CQkJXAotCV9faWxvZzJfdTMyKG4pIDoJ CQlcCi0JX19pbG9nMl91NjQobikJCQkJXAotICkKLQotI2VuZGlmIC8qIElMT0cyX0ggKi8KZGlm ZiAtLWdpdCBhL2JlbmNobWFya3MvbWVzb24uYnVpbGQgYi9iZW5jaG1hcmtzL21lc29uLmJ1aWxk CmluZGV4IGVmOTMxOTNiNzBkZC4uYzcwZTFhYWM3OWM2IDEwMDY0NAotLS0gYS9iZW5jaG1hcmtz L21lc29uLmJ1aWxkCisrKyBiL2JlbmNobWFya3MvbWVzb24uYnVpbGQKQEAgLTExLDYgKzExLDcg QEAgYmVuY2htYXJrX3Byb2dzID0gWwogCSdnZW1fcHJ3JywKIAknZ2VtX3NldF9kb21haW4nLAog CSdnZW1fc3lzbGF0ZW5jeScsCisJJ2dlbV93c2ltJywKIAkna21zX3ZibGFuaycsCiAJJ3ByaW1l X2xvb2t1cCcsCiAJJ3ZnZW1fbW1hcCcsCkBAIC0zNCw4ICszNSwzIEBAIGZvcmVhY2ggcHJvZyA6 IGJlbmNobWFya19wcm9ncwogCQkgICBpbnN0YWxsX2RpciA6IGJlbmNobWFya3NkaXIsCiAJCSAg IGRlcGVuZGVuY2llcyA6IGlndF9kZXBzKQogZW5kZm9yZWFjaAotCi1leGVjdXRhYmxlKCdnZW1f d3NpbScsICdnZW1fd3NpbS5jJywKLQkgICBpbnN0YWxsIDogdHJ1ZSwKLQkgICBpbnN0YWxsX2Rp ciA6IGJlbmNobWFya3NkaXIsCi0JICAgZGVwZW5kZW5jaWVzIDogaWd0X2RlcHMgKyBbIGxpYl9p Z3RfcGVyZiBdKQpkaWZmIC0tZ2l0IGEvYmVuY2htYXJrcy93c2ltL21lZGlhLTEwODBwLXBsYXll ci53c2ltIGIvYmVuY2htYXJrcy93c2ltL21lZGlhLTEwODBwLXBsYXllci53c2ltCmluZGV4IGJj YmIwY2ZkMmFkMy4uYzg3ZTFhZWU0ZjVkIDEwMDY0NAotLS0gYS9iZW5jaG1hcmtzL3dzaW0vbWVk aWEtMTA4MHAtcGxheWVyLndzaW0KKysrIGIvYmVuY2htYXJrcy93c2ltL21lZGlhLTEwODBwLXBs YXllci53c2ltCkBAIC0xLDMgKzEsNSBAQAorTS4xLlZDUworQi4xCiAxLlZDUy41MDAwLTEwMDAw LjAuMAogMi5SQ1MuMTAwMC0yMDAwLi0xLjAKIFAuMy4xCmRpZmYgLS1naXQgYS9iZW5jaG1hcmtz L3dzaW0vbWVkaWFfMW4yXzQ4MHAud3NpbSBiL2JlbmNobWFya3Mvd3NpbS9tZWRpYV8xbjJfNDgw cC53c2ltCmluZGV4IDExYTRkYTZiZmFlOC4uM2NlMTVlYmMzZDcxIDEwMDY0NAotLS0gYS9iZW5j aG1hcmtzL3dzaW0vbWVkaWFfMW4yXzQ4MHAud3NpbQorKysgYi9iZW5jaG1hcmtzL3dzaW0vbWVk aWFfMW4yXzQ4MHAud3NpbQpAQCAtMSw5ICsxLDE1IEBACi0xLlZDUy4xMjAwMC0xNTAwMC4wLjAK K00uMTAuVkNTCitCLjEwCitNLjExLlZDUworQi4xMQorTS4xMi5WQ1MKK0IuMTIKKzEwLlZDUy4x MjAwMC0xNTAwMC4wLjAKIDIuUkNTLjEwMDAtMjIwMC4tMS4wCiAzLlJDUy4xMDAwLTE0MDAuLTEu MAogMy5SQ1MuMTAwMDAtMTIwMDAuMC4wCi0zLlZDUy4yNTAwLTM1MDAuLTEuMAorMTEuVkNTLjI1 MDAtMzUwMC4tMS4wCiA0LlJDUy4xMDAwLTIyMDAuLTUuMAogNS5SQ1MuMTAwMC0xNDAwLi0xLjAK IDUuUkNTLjEwMDAwLTEyMDAwLjAuMAotNS5WQ1MuMjUwMC0zNTAwLi0xLjEKKzEyLlZDUy4yNTAw LTM1MDAuLTEuMQpkaWZmIC0tZ2l0IGEvYmVuY2htYXJrcy93c2ltL21lZGlhXzFuMl9hc3kud3Np bSBiL2JlbmNobWFya3Mvd3NpbS9tZWRpYV8xbjJfYXN5LndzaW0KaW5kZXggNThjOTljYTExMjJj Li5mOTk0M2ViNjJlOGEgMTAwNjQ0Ci0tLSBhL2JlbmNobWFya3Mvd3NpbS9tZWRpYV8xbjJfYXN5 LndzaW0KKysrIGIvYmVuY2htYXJrcy93c2ltL21lZGlhXzFuMl9hc3kud3NpbQpAQCAtMSw5ICsx LDExIEBACi0xLlZDUy4xMjAwMC0xNTAwMC4wLjAKK00uMTAuVkNTCitCLjEwCisxMC5WQ1MuMTIw MDAtMTUwMDAuMC4wCiAyLlJDUy4xMDAwLTIyMDAuLTEuMAogMy5SQ1MuMTAwMC0xNDAwLi0xLjAK IDMuUkNTLjEwMDAwLTEyMDAwLjAuMAotMy5WQ1MuMjUwMC0zNTAwLi0xLjAKKzExLlZDUy4yNTAw LTM1MDAuLTEuMAogNC5SQ1MuNDAwLTgwMC4tNS4wCiA1LlJDUy41MDAtNzAwLi0xLjAKIDUuUkNT LjUwMDAtNjAwMC4wLjAKLTUuVkNTLjEyMDAtMTUwMC4tMS4xCisxMi5WQ1MuMTIwMC0xNTAwLi0x LjEKZGlmZiAtLWdpdCBhL2JlbmNobWFya3Mvd3NpbS9tZWRpYV8xbjNfNDgwcC53c2ltIGIvYmVu Y2htYXJrcy93c2ltL21lZGlhXzFuM180ODBwLndzaW0KaW5kZXggYzcyNGFiMjhhMWY0Li40ZjU4 NWZhOGE4ZTAgMTAwNjQ0Ci0tLSBhL2JlbmNobWFya3Mvd3NpbS9tZWRpYV8xbjNfNDgwcC53c2lt CisrKyBiL2JlbmNobWFya3Mvd3NpbS9tZWRpYV8xbjNfNDgwcC53c2ltCkBAIC0xLDEzICsxLDIx IEBACi0xLlZDUy4xMjAwMC0xNTAwMC4wLjAKK00uMTAuVkNTCitCLjEwCitNLjExLlZDUworQi4x MQorTS4xMi5WQ1MKK0IuMTIKK00uMTMuVkNTCitCLjEzCisxMC5WQ1MuMTIwMDAtMTUwMDAuMC4w CiAyLlJDUy4xMDAwLTIyMDAuLTEuMAogMy5SQ1MuMTAwMC0xNDAwLi0xLjAKIDMuUkNTLjEwMDAw LTEyMDAwLjAuMAotMy5WQ1MuMjUwMC0zNTAwLi0xLjAKKzExLlZDUy4yNTAwLTM1MDAuLTEuMAog NC5SQ1MuMTAwMC0yMjAwLi01LjAKIDUuUkNTLjEwMDAtMTQwMC4tMS4wCiA1LlJDUy4xMDAwMC0x MjAwMC4wLjAKLTUuVkNTLjI1MDAtMzUwMC4tMS4wCisxMi5WQ1MuMjUwMC0zNTAwLi0xLjAKIDYu UkNTLjEwMDAtMjIwMC4tOS4wCiA3LlJDUy4xMDAwLTE0MDAuLTEuMAogNy5SQ1MuMTAwMDAtMTIw MDAuMC4wCi03LlZDUy4yNTAwLTM1MDAuLTEuMQorMTMuVkNTLjI1MDAtMzUwMC4tMS4xCmRpZmYg LS1naXQgYS9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfMW4zX2FzeS53c2ltIGIvYmVuY2htYXJrcy93 c2ltL21lZGlhXzFuM19hc3kud3NpbQppbmRleCBjNzU4ODMyOGUzZjEuLmRjZTc3ODllYzFkOCAx MDA2NDQKLS0tIGEvYmVuY2htYXJrcy93c2ltL21lZGlhXzFuM19hc3kud3NpbQorKysgYi9iZW5j aG1hcmtzL3dzaW0vbWVkaWFfMW4zX2FzeS53c2ltCkBAIC0xLDMgKzEsMTEgQEAKK00uMTAuVkNT CitCLjEwCitNLjExLlZDUworQi4xMQorTS4xMi5WQ1MKK0IuMTIKK00uMTMuVkNTCitCLjEzCiAx LlZDUy4xMjAwMC0xNTAwMC4wLjAKIDIuUkNTLjEwMDAtMjIwMC4tMS4wCiAzLlJDUy4xMDAwLTE0 MDAuLTEuMApkaWZmIC0tZ2l0IGEvYmVuY2htYXJrcy93c2ltL21lZGlhXzFuNF80ODBwLndzaW0g Yi9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfMW40XzQ4MHAud3NpbQppbmRleCBlNjdmZWZjM2JmMTcu LjA2ZmE5YWRlZjVlYiAxMDA2NDQKLS0tIGEvYmVuY2htYXJrcy93c2ltL21lZGlhXzFuNF80ODBw LndzaW0KKysrIGIvYmVuY2htYXJrcy93c2ltL21lZGlhXzFuNF80ODBwLndzaW0KQEAgLTEsMTcg KzEsMjcgQEAKLTEuVkNTLjEyMDAwLTE1MDAwLjAuMAorTS4xMC5WQ1MKK0IuMTAKK00uMTEuVkNT CitCLjExCitNLjEyLlZDUworQi4xMgorTS4xMy5WQ1MKK0IuMTMKK00uMTQuVkNTCitCLjE0Cisx MC5WQ1MuMTIwMDAtMTUwMDAuMC4wCiAyLlJDUy4xMDAwLTIyMDAuLTEuMAogMy5SQ1MuMTAwMC0x NDAwLi0xLjAKIDMuUkNTLjEwMDAwLTEyMDAwLjAuMAotMy5WQ1MuMjUwMC0zNTAwLi0xLjAKKzEx LlZDUy4yNTAwLTM1MDAuLTEuMAogNC5SQ1MuMTAwMC0yMjAwLi01LjAKIDUuUkNTLjEwMDAtMTQw MC4tMS4wCiA1LlJDUy4xMDAwMC0xMjAwMC4wLjAKLTUuVkNTLjI1MDAtMzUwMC4tMS4wCisxMi5W Q1MuMjUwMC0zNTAwLi0xLjAKIDYuUkNTLjEwMDAtMjIwMC4tOS4wCiA3LlJDUy4xMDAwLTE0MDAu LTEuMAogNy5SQ1MuMTAwMDAtMTIwMDAuMC4wCi03LlZDUy4yNTAwLTM1MDAuLTEuMAorMTMuVkNT LjI1MDAtMzUwMC4tMS4wCiA4LlJDUy4xMDAwLTIyMDAuLTEzLjAKIDkuUkNTLjEwMDAtMTQwMC4t MS4wCiA5LlJDUy4xMDAwMC0xMjAwMC4wLjAKLTkuVkNTLjI1MDAtMzUwMC4tMS4xCisxNC5WQ1Mu MjUwMC0zNTAwLi0xLjEKZGlmZiAtLWdpdCBhL2JlbmNobWFya3Mvd3NpbS9tZWRpYV8xbjRfYXN5 LndzaW0gYi9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfMW40X2FzeS53c2ltCmluZGV4IGVkZTRmZDdh MjIwNS4uNmRjNmI2NTJlOTAzIDEwMDY0NAotLS0gYS9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfMW40 X2FzeS53c2ltCisrKyBiL2JlbmNobWFya3Mvd3NpbS9tZWRpYV8xbjRfYXN5LndzaW0KQEAgLTEs MyArMSwxMyBAQAorTS4xMC5WQ1MKK0IuMTAKK00uMTEuVkNTCitCLjExCitNLjEyLlZDUworQi4x MgorTS4xMy5WQ1MKK0IuMTMKK00uMTQuVkNTCitCLjE0CiAxLlZDUy4xMjAwMC0xNTAwMC4wLjAK IDIuUkNTLjEwMDAtMjIwMC4tMS4wCiAzLlJDUy4xMDAwLTE0MDAuLTEuMApkaWZmIC0tZ2l0IGEv YmVuY2htYXJrcy93c2ltL21lZGlhXzFuNV80ODBwLndzaW0gYi9iZW5jaG1hcmtzL3dzaW0vbWVk aWFfMW41XzQ4MHAud3NpbQppbmRleCA5ZTQzYjk4NDU0MzAuLjM0NjdhMzg2ODg3YSAxMDA2NDQK LS0tIGEvYmVuY2htYXJrcy93c2ltL21lZGlhXzFuNV80ODBwLndzaW0KKysrIGIvYmVuY2htYXJr cy93c2ltL21lZGlhXzFuNV80ODBwLndzaW0KQEAgLTEsMjEgKzEsMzMgQEAKLTEuVkNTLjEyMDAw LTE1MDAwLjAuMAorTS4xMC5WQ1MKK0IuMTAKK00uMTEuVkNTCitCLjExCitNLjEyLlZDUworQi4x MgorTS4xMy5WQ1MKK0IuMTMKK00uMTQuVkNTCitCLjE0CitNLjE1LlZDUworQi4xNQorMTAuVkNT LjEyMDAwLTE1MDAwLjAuMAogMi5SQ1MuMTAwMC0yMjAwLi0xLjAKIDMuUkNTLjEwMDAtMTQwMC4t MS4wCiAzLlJDUy4xMDAwMC0xMjAwMC4wLjAKLTMuVkNTLjI1MDAtMzUwMC4tMS4wCisxMS5WQ1Mu MjUwMC0zNTAwLi0xLjAKIDQuUkNTLjEwMDAtMjIwMC4tNS4wCiA1LlJDUy4xMDAwLTE0MDAuLTEu MAogNS5SQ1MuMTAwMDAtMTIwMDAuMC4wCi01LlZDUy4yNTAwLTM1MDAuLTEuMAorMTIuVkNTLjI1 MDAtMzUwMC4tMS4wCiA2LlJDUy4xMDAwLTIyMDAuLTkuMAogNy5SQ1MuMTAwMC0xNDAwLi0xLjAK IDcuUkNTLjEwMDAwLTEyMDAwLjAuMAotNy5WQ1MuMjUwMC0zNTAwLi0xLjAKKzEzLlZDUy4yNTAw LTM1MDAuLTEuMAogOC5SQ1MuMTAwMC0yMjAwLi0xMy4wCiA5LlJDUy4xMDAwLTE0MDAuLTEuMAog OS5SQ1MuMTAwMDAtMTIwMDAuMC4wCi05LlZDUy4yNTAwLTM1MDAuLTEuMAorMTQuVkNTLjI1MDAt MzUwMC4tMS4wCiAxMC5SQ1MuMTAwMC0yMjAwLi0xNy4wCiAxMS5SQ1MuMTAwMC0xNDAwLi0xLjAK IDExLlJDUy4xMDAwMC0xMjAwMC4wLjAKLTExLlZDUy4yNTAwLTM1MDAuLTEuMQorMTUuVkNTLjI1 MDAtMzUwMC4tMS4xCmRpZmYgLS1naXQgYS9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfMW41X2FzeS53 c2ltIGIvYmVuY2htYXJrcy93c2ltL21lZGlhXzFuNV9hc3kud3NpbQppbmRleCA3OGJiNGE4NmRi Y2EuLjRiMjA1NDU3YThkNCAxMDA2NDQKLS0tIGEvYmVuY2htYXJrcy93c2ltL21lZGlhXzFuNV9h c3kud3NpbQorKysgYi9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfMW41X2FzeS53c2ltCkBAIC0xLDMg KzEsMTUgQEAKK00uMTAuVkNTCitCLjEwCitNLjExLlZDUworQi4xMQorTS4xMi5WQ1MKK0IuMTIK K00uMTMuVkNTCitCLjEzCitNLjE0LlZDUworQi4xNAorTS4xNS5WQ1MKK0IuMTUKIDEuVkNTLjEy MDAwLTE1MDAwLjAuMAogMi5SQ1MuMjAwMC0zMDAwLi0xLjAKIDMuUkNTLjUwMC05MDAuLTEuMApk aWZmIC0tZ2l0IGEvYmVuY2htYXJrcy93c2ltL21lZGlhX2xvYWRfYmFsYW5jZV8xN2k3LndzaW0g Yi9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfbG9hZF9iYWxhbmNlXzE3aTcud3NpbQppbmRleCAwODMw YTMyMzFlYTkuLmJjYjFhYjJmMDRmYSAxMDA2NDQKLS0tIGEvYmVuY2htYXJrcy93c2ltL21lZGlh X2xvYWRfYmFsYW5jZV8xN2k3LndzaW0KKysrIGIvYmVuY2htYXJrcy93c2ltL21lZGlhX2xvYWRf YmFsYW5jZV8xN2k3LndzaW0KQEAgLTEsNyArMSw5IEBACitNLjEuVkNTCitCLjEKIDEuVkNTLjI4 MDAtMzIwMC4wLjEKLTEuUkNTLjkwMC0xMTAwLi0xLjAKLTEuUkNTLjM2MDAtMzgwMC4wLjAKLTEu UkNTLjkwMC0xMTAwLi0yLjAKKzIuUkNTLjkwMC0xMTAwLi0xLjAKKzIuUkNTLjM2MDAtMzgwMC4w LjAKKzIuUkNTLjkwMC0xMTAwLi0yLjAKIDEuVkNTLjIyMDAtMjQwMC4tMi4wCi0xLlJDUy40NTAw LTQ5MDAuLTEuMAorMi5SQ1MuNDUwMC00OTAwLi0xLjAKIDEuVkNTLjUwMC03MDAuLTEuMQpkaWZm IC0tZ2l0IGEvYmVuY2htYXJrcy93c2ltL21lZGlhX2xvYWRfYmFsYW5jZV8xOS53c2ltIGIvYmVu Y2htYXJrcy93c2ltL21lZGlhX2xvYWRfYmFsYW5jZV8xOS53c2ltCmluZGV4IDAzODkwNzc2ZmRh My4uODhjZDM0ZmI2ODk4IDEwMDY0NAotLS0gYS9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfbG9hZF9i YWxhbmNlXzE5LndzaW0KKysrIGIvYmVuY2htYXJrcy93c2ltL21lZGlhX2xvYWRfYmFsYW5jZV8x OS53c2ltCkBAIC0xLDMgKzEsNSBAQAorTS4xLlZDUworQi4xCiAwLlZFQ1MuMTQwMC0xNTAwLjAu MAogMC5SQ1MuMTAwMC0xNTAwLi0xLjAKIHMuLTIKQEAgLTUsNiArNyw2IEBAIHMuLTIKIDEuVkNT LjEzMDAtMTQwMC4wLjEKIDAuVkVDUy4xNDAwLTE1MDAuMC4wCiAwLlJDUy4xMDAtMzAwLi0xLjEK LTEuUkNTLjEzMDAtMTUwMC4wLjAKKzIuUkNTLjEzMDAtMTUwMC4tMy4wCiAxLlZDUy4xMDAtMzAw Li0xLjEKIDEuVkNTLjkwMC0xNDAwLjAuMQpkaWZmIC0tZ2l0IGEvYmVuY2htYXJrcy93c2ltL21l ZGlhX2xvYWRfYmFsYW5jZV80azEydTcud3NpbSBiL2JlbmNobWFya3Mvd3NpbS9tZWRpYV9sb2Fk X2JhbGFuY2VfNGsxMnU3LndzaW0KaW5kZXggZmYxMDQyNWI2YmVjLi5hNDE3YmIxOGUxMjEgMTAw NjQ0Ci0tLSBhL2JlbmNobWFya3Mvd3NpbS9tZWRpYV9sb2FkX2JhbGFuY2VfNGsxMnU3LndzaW0K KysrIGIvYmVuY2htYXJrcy93c2ltL21lZGlhX2xvYWRfYmFsYW5jZV80azEydTcud3NpbQpAQCAt MSwzICsxLDUgQEAKK00uMS5WQ1MKK0IuMQogMS5WQ1MuNDAwMC02MDAwLjAuMAogMi5SQ1MuNDAw LTgwMC4tMS4wCiAzLlJDUy4xOTAwLTIyMDAuLTEuMApkaWZmIC0tZ2l0IGEvYmVuY2htYXJrcy93 c2ltL21lZGlhX2xvYWRfYmFsYW5jZV9maGQyNnU3LndzaW0gYi9iZW5jaG1hcmtzL3dzaW0vbWVk aWFfbG9hZF9iYWxhbmNlX2ZoZDI2dTcud3NpbQppbmRleCA1NjExNGRkYzQ4YzIuLjRjODIyNWUx ZmUxMyAxMDA2NDQKLS0tIGEvYmVuY2htYXJrcy93c2ltL21lZGlhX2xvYWRfYmFsYW5jZV9maGQy NnU3LndzaW0KKysrIGIvYmVuY2htYXJrcy93c2ltL21lZGlhX2xvYWRfYmFsYW5jZV9maGQyNnU3 LndzaW0KQEAgLTEsMjUgKzEsMjcgQEAKK00uMy5WQ1MKK0IuMwogMS5WQ1MxLjEyMDAtMTgwMC4w LjAKIDEuVkNTMS4xOTAwLTIxMDAuMC4wCiAyLlJDUy4xNTAwLTIwMDAuLTEuMAotMi5WQ1MuMTQw MC0xODAwLi0xLjEKKzMuVkNTLjE0MDAtMTgwMC4tMS4xCiAxLlZDUzEuMTkwMC0yMTAwLi0xLjAK IDIuUkNTLjE1MDAtMjAwMC4tMS4wCi0yLlZDUy4xNDAwLTE4MDAuLTEuMQorMy5WQ1MuMTQwMC0x ODAwLi0xLjEKIDEuVkNTMS4xOTAwLTIxMDAuLTEuMAogMi5SQ1MuMjAwLTQwMC4tMS4wCiAyLlJD Uy4xNTAwLTIwMDAuMC4wCi0yLlZDUy4xNDAwLTE4MDAuLTEuMQorMy5WQ1MuMTQwMC0xODAwLi0x LjEKIDEuVkNTMS4xOTAwLTIxMDAuLTEuMAogMi5SQ1MuMTUwMC0yMDAwLi0xLjAKLTIuVkNTLjE0 MDAtMTgwMC4tMS4xCiszLlZDUy4xNDAwLTE4MDAuLTEuMQogMS5WQ1MxLjE5MDAtMjEwMC4tMS4w CiAyLlJDUy4yMDAtNDAwLi0xLjAKIDIuUkNTLjE1MDAtMjAwMC4wLjAKLTIuVkNTLjE0MDAtMTgw MC4tMS4xCiszLlZDUy4xNDAwLTE4MDAuLTEuMQogMS5WQ1MxLjE5MDAtMjEwMC4tMS4wCiAyLlJD Uy4xNTAwLTIwMDAuLTEuMAotMi5WQ1MuMTQwMC0xODAwLi0xLjEKKzMuVkNTLjE0MDAtMTgwMC4t MS4xCiAxLlZDUzEuMTkwMC0yMTAwLi0xLjAKIDIuUkNTLjE1MDAtMjAwMC4tMS4wCiAyLlJDUy4x NTAwLTIwMDAuMC4wCi0yLlZDUy4xNDAwLTE4MDAuLTEuMQorMy5WQ1MuMTQwMC0xODAwLi0xLjEK ZGlmZiAtLWdpdCBhL2JlbmNobWFya3Mvd3NpbS9tZWRpYV9sb2FkX2JhbGFuY2VfaGQwMS53c2lt IGIvYmVuY2htYXJrcy93c2ltL21lZGlhX2xvYWRfYmFsYW5jZV9oZDAxLndzaW0KaW5kZXggODYy OTMxNTIxYzkwLi44ZTdlOWQ5MGU0MzUgMTAwNjQ0Ci0tLSBhL2JlbmNobWFya3Mvd3NpbS9tZWRp YV9sb2FkX2JhbGFuY2VfaGQwMS53c2ltCisrKyBiL2JlbmNobWFya3Mvd3NpbS9tZWRpYV9sb2Fk X2JhbGFuY2VfaGQwMS53c2ltCkBAIC0xLDIzICsxLDI3IEBACitNLjEuVkNTCitCLjEKK00uMy5W Q1MKK0IuMwogMS5WQ1MuMTQwMC0xOTAwLjAuMAotMS5SQ1MuMTIwMC0xNjAwLi0xLjAKLTEuUkNT LjEwMDAtMTQwMC4tMS4wCi0yLlZDUy44MDAtMTAwMC4tMS4wCisyLlJDUy4xMjAwLTE2MDAuLTEu MAorMi5SQ1MuMTAwMC0xNDAwLi0xLjAKKzMuVkNTLjgwMC0xMDAwLi0xLjAKIDEuVkNTLjE0MDAt MTkwMC4tNC4wCi0xLlJDUy4xMjAwLTE2MDAuLTEuMAotMS5SQ1MuMTAwMC0xNDAwLi0xLjAKLTIu VkNTLjgwMC0xMDAwLi0xLjAKKzIuUkNTLjEyMDAtMTYwMC4tMS4wCisyLlJDUy4xMDAwLTE0MDAu LTEuMAorMy5WQ1MuODAwLTEwMDAuLTEuMAogMS5WQ1MuMTQwMC0xOTAwLi00LjAKLTEuUkNTLjEy MDAtMTYwMC4tMS4wCi0xLlJDUy4xMDAwLTE0MDAuLTEuMAotMi5WQ1MuODAwLTEwMDAuLTEuMAor Mi5SQ1MuMTIwMC0xNjAwLi0xLjAKKzIuUkNTLjEwMDAtMTQwMC4tMS4wCiszLlZDUy44MDAtMTAw MC4tMS4wCiAxLlZDUy4xNDAwLTE5MDAuLTQuMAotMS5SQ1MuMTIwMC0xNjAwLi0xLjAKLTEuUkNT LjEwMDAtMTQwMC4tMS4wCi0yLlZDUy44MDAtMTAwMC4tMS4wCisyLlJDUy4xMjAwLTE2MDAuLTEu MAorMi5SQ1MuMTAwMC0xNDAwLi0xLjAKKzMuVkNTLjgwMC0xMDAwLi0xLjAKIDEuVkNTLjE0MDAt MTkwMC4tNC4wCi0xLlJDUy4xMjAwLTE2MDAuLTEuMAotMS5SQ1MuMTAwMC0xNDAwLi0xLjAKLTIu VkNTLjgwMC0xMDAwLi0xLjAKKzIuUkNTLjEyMDAtMTYwMC4tMS4wCisyLlJDUy4xMDAwLTE0MDAu LTEuMAorMy5WQ1MuODAwLTEwMDAuLTEuMAogcy4tMTcKIHMuLTE0CiBzLi0xMQpkaWZmIC0tZ2l0 IGEvYmVuY2htYXJrcy93c2ltL21lZGlhX2xvYWRfYmFsYW5jZV9oZDA2bXAyLndzaW0gYi9iZW5j aG1hcmtzL3dzaW0vbWVkaWFfbG9hZF9iYWxhbmNlX2hkMDZtcDIud3NpbQppbmRleCAxZTFmYzAw M2M3NTUuLmNmZTk4NTAxOWE3YiAxMDA2NDQKLS0tIGEvYmVuY2htYXJrcy93c2ltL21lZGlhX2xv YWRfYmFsYW5jZV9oZDA2bXAyLndzaW0KKysrIGIvYmVuY2htYXJrcy93c2ltL21lZGlhX2xvYWRf YmFsYW5jZV9oZDA2bXAyLndzaW0KQEAgLTEsNCArMSw4IEBACitNLjEuVkNTCitCLjEKK00uNC5W Q1MKK0IuNAogMS5WQ1MuOTAwLTE3MDAuMC4wCiAyLlJDUy4xMDAtNDAwLi0xLjAKIDMuUkNTLjgw MC05MDAuLTEuMAotMy5WQ1MuMTAwLTIwMC4tMS4xCis0LlZDUy4xMDAtMjAwLi0xLjEKZGlmZiAt LWdpdCBhL2JlbmNobWFya3Mvd3NpbS9tZWRpYV9sb2FkX2JhbGFuY2VfaGQxMi53c2ltIGIvYmVu Y2htYXJrcy93c2ltL21lZGlhX2xvYWRfYmFsYW5jZV9oZDEyLndzaW0KaW5kZXggOGYzYjQxY2E1 YWI2Li42ODRlNmI1MTE3NjIgMTAwNjQ0Ci0tLSBhL2JlbmNobWFya3Mvd3NpbS9tZWRpYV9sb2Fk X2JhbGFuY2VfaGQxMi53c2ltCisrKyBiL2JlbmNobWFya3Mvd3NpbS9tZWRpYV9sb2FkX2JhbGFu Y2VfaGQxMi53c2ltCkBAIC0xLDQgKzEsOCBAQAorTS4xLlZDUworQi4xCitNLjQuVkNTCitCLjQK IDEuVkNTLjg1MC0xMzAwLjAuMAogMi5SQ1MuNTAtMjUwLi0xLjAKIDMuUkNTLjQwMC04MDAuLTEu MAotMy5WQ1MuMTAwLTIwMC4tMS4xCis0LlZDUy4xMDAtMjAwLi0xLjEKZGlmZiAtLWdpdCBhL2Jl bmNobWFya3Mvd3NpbS9tZWRpYV9sb2FkX2JhbGFuY2VfaGQxN2k0LndzaW0gYi9iZW5jaG1hcmtz L3dzaW0vbWVkaWFfbG9hZF9iYWxhbmNlX2hkMTdpNC53c2ltCmluZGV4IGI2MTk1YjYwNWJmNy4u MTQzMGYxOGRmMDMzIDEwMDY0NAotLS0gYS9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfbG9hZF9iYWxh bmNlX2hkMTdpNC53c2ltCisrKyBiL2JlbmNobWFya3Mvd3NpbS9tZWRpYV9sb2FkX2JhbGFuY2Vf aGQxN2k0LndzaW0KQEAgLTEsNyArMSwxMSBAQAorTS4xLlZDUworQi4xCitNLjMuVkNTCitCLjMK IDEuVkNTLjkwMC0xNDAwLjAuMAogMi5SQ1MuMjAwLTMwMC4tMS4wCiAyLlJDUy4xMDAwLTIwMDAu MC4wCiAyLlJDUy4xMDAwLTIwMDAuMC4wCi0yLlZDUy44MDAtMTAwMC4tMS4wCi0xLlJDUy4yODAw LTMxMDAuLTEuMAorMy5WQ1MuODAwLTEwMDAuLTEuMAorNC5SQ1MuMjgwMC0zMTAwLi0xLjAKIDEu VkNTLjgwMC0xMDAwLi0xLjEKZGlmZiAtLWdpdCBhL2JlbmNobWFya3Mvd3NpbS9tZWRpYV9tZmUy XzQ4MHAud3NpbSBiL2JlbmNobWFya3Mvd3NpbS9tZWRpYV9tZmUyXzQ4MHAud3NpbQppbmRleCAx OGJjNzU2ZjFiNTUuLjAwZWY1YzNhNzU3NCAxMDA2NDQKLS0tIGEvYmVuY2htYXJrcy93c2ltL21l ZGlhX21mZTJfNDgwcC53c2ltCisrKyBiL2JlbmNobWFya3Mvd3NpbS9tZWRpYV9tZmUyXzQ4MHAu d3NpbQpAQCAtMSwzICsxLDExIEBACitNLjEuVkNTCitCLjEKK00uNC5WQ1MKK0IuNAorTS43LlZD UworQi43CitNLjguVkNTCitCLjgKIDEuVkNTLjEyMDAwLTE1MDAwLjAuMAogMi5SQ1MuMTAwMC0y MjAwLi0xLjAKIDMuUkNTLjgwMC0xNjAwLi0xLjAKQEAgLTUsNSArMTMsNSBAQAogNS5SQ1MuMTAw MC0yMjAwLi0xLjAKIDYuUkNTLjgwMC0xNjAwLi0xLjAKIDYuUkNTLjEwMDAwLTEyMDAwLi00LjAK LTYuVkNTLjI1MDAtMzUwMC4tMS4wCi0zLlZDUy4yNTAwLTM1MDAuLTIuMQorNy5WQ1MuMjUwMC0z NTAwLi0xLjAKKzguVkNTLjI1MDAtMzUwMC4tMi4xCmRpZmYgLS1naXQgYS9iZW5jaG1hcmtzL3dz aW0vbWVkaWFfbWZlM180ODBwLndzaW0gYi9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfbWZlM180ODBw LndzaW0KaW5kZXggZTEyYTJlNmFjMjlkLi4zYWM0ZGIwZWI4ZWMgMTAwNjQ0Ci0tLSBhL2JlbmNo bWFya3Mvd3NpbS9tZWRpYV9tZmUzXzQ4MHAud3NpbQorKysgYi9iZW5jaG1hcmtzL3dzaW0vbWVk aWFfbWZlM180ODBwLndzaW0KQEAgLTEsMyArMSwxNSBAQAorTS4xLlZDUworQi4xCitNLjQuVkNT CitCLjQKK00uNy5WQ1MKK0IuNworTS4xMC5WQ1MKK0IuMTAKK00uMTEuVkNTCitCLjExCitNLjEy LlZDUworQi4xMgogMS5WQ1MuMTIwMDAtMTUwMDAuMC4wCiAyLlJDUy4xMDAwLTIyMDAuLTEuMAog My5SQ1MuODAwLTE2MDAuLTEuMApAQCAtOCw2ICsyMCw2IEBACiA4LlJDUy4xMDAwLTIyMDAuLTEu MAogOS5SQ1MuODAwLTE2MDAuLTEuMAogOS5SQ1MuMTAwMDAtMTIwMDAuLTcvLTQuMAotOS5WQ1Mu MjUwMC0zNTAwLi0xLjAKLTMuVkNTLjI1MDAtMzUwMC4tMi4wCi02LlZDUy4yNTAwLTM1MDAuLTMu MQorMTAuVkNTLjI1MDAtMzUwMC4tMS4wCisxMS5WQ1MuMjUwMC0zNTAwLi0yLjAKKzEyLlZDUy4y NTAwLTM1MDAuLTMuMQpkaWZmIC0tZ2l0IGEvYmVuY2htYXJrcy93c2ltL21lZGlhX21mZTRfNDgw cC53c2ltIGIvYmVuY2htYXJrcy93c2ltL21lZGlhX21mZTRfNDgwcC53c2ltCmluZGV4IDc1ZDRm NjdlYTRmYi4uN2Y2ODMxNTY5OTA4IDEwMDY0NAotLS0gYS9iZW5jaG1hcmtzL3dzaW0vbWVkaWFf bWZlNF80ODBwLndzaW0KKysrIGIvYmVuY2htYXJrcy93c2ltL21lZGlhX21mZTRfNDgwcC53c2lt CkBAIC0xLDMgKzEsMTkgQEAKK00uMS5WQ1MKK0IuMQorTS40LlZDUworQi40CitNLjcuVkNTCitC LjcKK00uMTAuVkNTCitCLjEwCitNLjEzLlZDUworQi4xMworTS4xNC5WQ1MKK0IuMTQKK00uMTUu VkNTCitCLjE1CitNLjE2LlZDUworQi4xNgogMS5WQ1MuMTIwMDAtMTUwMDAuMC4wCiAyLlJDUy4x MDAwLTIyMDAuLTEuMAogMy5SQ1MuODAwLTE2MDAuLTEuMApAQCAtMTEsNyArMjcsNyBAQAogMTEu UkNTLjEwMDAtMjIwMC4tMS4wCiAxMi5SQ1MuODAwLTE2MDAuLTEuMAogMTIuUkNTLjEwMDAwLTEy MDAwLi00Ly03Ly0xMC4wCi0xMi5WQ1MuMjUwMC0zNTAwLi0xLjAKLTMuVkNTLjI1MDAtMzUwMC4t Mi4wCi02LlZDUy4yNTAwLTM1MDAuLTMuMAotOS5WQ1MuMjUwMC0zNTAwLi00LjEKKzEzLlZDUy4y NTAwLTM1MDAuLTEuMAorMTQuVkNTLjI1MDAtMzUwMC4tMi4wCisxNS5WQ1MuMjUwMC0zNTAwLi0z LjAKKzE2LlZDUy4yNTAwLTM1MDAuLTQuMQpkaWZmIC0tZ2l0IGEvYmVuY2htYXJrcy93c2ltL21l ZGlhX25uXzEwODBwLndzaW0gYi9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfbm5fMTA4MHAud3NpbQpp bmRleCBmOWEzY2ExYjk5NjMuLjg4YzVjNzcyMjAyYyAxMDA2NDQKLS0tIGEvYmVuY2htYXJrcy93 c2ltL21lZGlhX25uXzEwODBwLndzaW0KKysrIGIvYmVuY2htYXJrcy93c2ltL21lZGlhX25uXzEw ODBwLndzaW0KQEAgLTEsMyArMSw3IEBACitNLjEuVkNTCitCLjEKK00uMy5WQ1MKK0IuMwogMS5W Q1MuMTMwMDAtMTcwMDAuMC4wCiAyLlJDUy4yMDAwLTQwMDAuLTEuMAogMy5SQ1MuMzAwMC01MDAw Li0xLjAKZGlmZiAtLWdpdCBhL2JlbmNobWFya3Mvd3NpbS9tZWRpYV9ubl8xMDgwcF9zMS53c2lt IGIvYmVuY2htYXJrcy93c2ltL21lZGlhX25uXzEwODBwX3MxLndzaW0KaW5kZXggNGZhNmNhNjUz MDAwLi41YjQ3ZDJhM2M3ZWMgMTAwNjQ0Ci0tLSBhL2JlbmNobWFya3Mvd3NpbS9tZWRpYV9ubl8x MDgwcF9zMS53c2ltCisrKyBiL2JlbmNobWFya3Mvd3NpbS9tZWRpYV9ubl8xMDgwcF9zMS53c2lt CkBAIC0xLDMgKzEsNSBAQAorTS40LlZDUworQi40CiBmCiAxLlZDUzEuNjUwMC04MDAwLmYtMS4w CiAxLlZDUzIuNjUwMC04MDAwLmYtMi4wCkBAIC01LDQgKzcsNCBAQCBhLi0zCiAyLlJDUy4yMDAw LTQwMDAuLTIvLTMuMAogMy5SQ1MuMzAwMC01MDAwLi0xLjAKIDMuUkNTLjIzMDAwLTI3MDAwLjAu MAotMy5WQ1MuMTYwMDAtMjAwMDAuLTEuMQorNC5WQ1MuMTYwMDAtMjAwMDAuLTEuMQpkaWZmIC0t Z2l0IGEvYmVuY2htYXJrcy93c2ltL21lZGlhX25uXzEwODBwX3MyLndzaW0gYi9iZW5jaG1hcmtz L3dzaW0vbWVkaWFfbm5fMTA4MHBfczIud3NpbQppbmRleCA2OGYwYWNkZmI4NDIuLmUzNjc4YjM5 NmI0MiAxMDA2NDQKLS0tIGEvYmVuY2htYXJrcy93c2ltL21lZGlhX25uXzEwODBwX3MyLndzaW0K KysrIGIvYmVuY2htYXJrcy93c2ltL21lZGlhX25uXzEwODBwX3MyLndzaW0KQEAgLTEsMyArMSw1 IEBACitNLjEuVkNTCitCLjEKIDEuVkNTLjEzMDAwLTE3MDAwLjAuMAogMi5SQ1MuMjAwMC00MDAw Li0xLjAKIDMuUkNTLjMwMDAtNTAwMC4tMS4wCmRpZmYgLS1naXQgYS9iZW5jaG1hcmtzL3dzaW0v bWVkaWFfbm5fMTA4MHBfczMud3NpbSBiL2JlbmNobWFya3Mvd3NpbS9tZWRpYV9ubl8xMDgwcF9z My53c2ltCmluZGV4IDEyMzY4ZGE4M2RjYS4uZWUzYjY3NWRlOWU1IDEwMDY0NAotLS0gYS9iZW5j aG1hcmtzL3dzaW0vbWVkaWFfbm5fMTA4MHBfczMud3NpbQorKysgYi9iZW5jaG1hcmtzL3dzaW0v bWVkaWFfbm5fMTA4MHBfczMud3NpbQpAQCAtMSwzICsxLDUgQEAKK00uMS5WQ1MKK0IuMQogMS5W Q1MuMTMwMDAtMTcwMDAuMC4wCiAyLlJDUy4yMDAwLTQwMDAuLTEuMAogMy5SQ1MuMzAwMC01MDAw Li0xLjAKZGlmZiAtLWdpdCBhL2JlbmNobWFya3Mvd3NpbS9tZWRpYV9ubl80ODBwLndzaW0gYi9i ZW5jaG1hcmtzL3dzaW0vbWVkaWFfbm5fNDgwcC53c2ltCmluZGV4IGFiNjRhNDU2OWQ3MS4uNzNm YzY0M2RjOWU1IDEwMDY0NAotLS0gYS9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfbm5fNDgwcC53c2lt CisrKyBiL2JlbmNobWFya3Mvd3NpbS9tZWRpYV9ubl80ODBwLndzaW0KQEAgLTEsMyArMSw3IEBA CitNLjEuVkNTCitCLjEKK00uMy5WQ1MKK0IuMwogMS5WQ1MuMTIwMDAtMTUwMDAuMC4wCiAyLlJD Uy4xMDAwLTIyMDAuLTEuMAogMy5SQ1MuMTAwMC0xNDAwLi0xLjAKZGlmZiAtLWdpdCBhL2JlbmNo bWFya3Mvd3NpbS92Y3NfYmFsYW5jZWQud3NpbSBiL2JlbmNobWFya3Mvd3NpbS92Y3NfYmFsYW5j ZWQud3NpbQppbmRleCBlODk1OGI4ZjdmNDMuLjc4ZDk1M2ZiNzU1MSAxMDA2NDQKLS0tIGEvYmVu Y2htYXJrcy93c2ltL3Zjc19iYWxhbmNlZC53c2ltCisrKyBiL2JlbmNobWFya3Mvd3NpbS92Y3Nf YmFsYW5jZWQud3NpbQpAQCAtMSwyNiArMSwyOCBAQAogcS41Ci0wLlZDUy41MDAtMjAwMC4wLjAK LTAuVkNTLjUwMC0yMDAwLjAuMAotMC5WQ1MuNTAwLTIwMDAuMC4wCi0wLlZDUy41MDAtMjAwMC4w LjAKLTAuVkNTLjUwMC0yMDAwLjAuMAotMC5WQ1MuNTAwLTIwMDAuMC4wCi0wLlZDUy41MDAtMjAw MC4wLjAKLTAuVkNTLjUwMC0yMDAwLjAuMAotMC5WQ1MuNTAwLTIwMDAuMC4wCi0wLlZDUy41MDAt MjAwMC4wLjAKLTAuVkNTLjUwMC0yMDAwLjAuMAotMC5WQ1MuNTAwLTIwMDAuMC4wCi0wLlZDUy41 MDAtMjAwMC4wLjAKLTAuVkNTLjUwMC0yMDAwLjAuMAotMC5WQ1MuNTAwLTIwMDAuMC4wCi0wLlZD Uy41MDAtMjAwMC4wLjAKLTAuVkNTLjUwMC0yMDAwLjAuMAotMC5WQ1MuNTAwLTIwMDAuMC4wCi0w LlZDUy41MDAtMjAwMC4wLjAKLTAuVkNTLjUwMC0yMDAwLjAuMAotMC5WQ1MuNTAwLTIwMDAuMC4w Ci0wLlZDUy41MDAtMjAwMC4wLjAKLTAuVkNTLjUwMC0yMDAwLjAuMAotMC5WQ1MuNTAwLTIwMDAu MC4wCi0wLlZDUy41MDAtMjAwMC4wLjAKK00uMS5WQ1MKK0IuMQorMS5WQ1MuNTAwLTIwMDAuMC4w CisxLlZDUy41MDAtMjAwMC4wLjAKKzEuVkNTLjUwMC0yMDAwLjAuMAorMS5WQ1MuNTAwLTIwMDAu MC4wCisxLlZDUy41MDAtMjAwMC4wLjAKKzEuVkNTLjUwMC0yMDAwLjAuMAorMS5WQ1MuNTAwLTIw MDAuMC4wCisxLlZDUy41MDAtMjAwMC4wLjAKKzEuVkNTLjUwMC0yMDAwLjAuMAorMS5WQ1MuNTAw LTIwMDAuMC4wCisxLlZDUy41MDAtMjAwMC4wLjAKKzEuVkNTLjUwMC0yMDAwLjAuMAorMS5WQ1Mu NTAwLTIwMDAuMC4wCisxLlZDUy41MDAtMjAwMC4wLjAKKzEuVkNTLjUwMC0yMDAwLjAuMAorMS5W Q1MuNTAwLTIwMDAuMC4wCisxLlZDUy41MDAtMjAwMC4wLjAKKzEuVkNTLjUwMC0yMDAwLjAuMAor MS5WQ1MuNTAwLTIwMDAuMC4wCisxLlZDUy41MDAtMjAwMC4wLjAKKzEuVkNTLjUwMC0yMDAwLjAu MAorMS5WQ1MuNTAwLTIwMDAuMC4wCisxLlZDUy41MDAtMjAwMC4wLjAKKzEuVkNTLjUwMC0yMDAw LjAuMAorMS5WQ1MuNTAwLTIwMDAuMC4wCmRpZmYgLS1naXQgYS9zY3JpcHRzL21lZGlhLWJlbmNo LnBsIGIvc2NyaXB0cy9tZWRpYS1iZW5jaC5wbApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5k ZXggMWNkODIwNWZmMDdjLi4wMDAwMDAwMDAwMDAKLS0tIGEvc2NyaXB0cy9tZWRpYS1iZW5jaC5w bAorKysgL2Rldi9udWxsCkBAIC0xLDczNiArMCwwIEBACi0jISAvdXNyL2Jpbi9wZXJsCi0jCi0j IENvcHlyaWdodCDCqSAyMDE3IEludGVsIENvcnBvcmF0aW9uCi0jCi0jIFBlcm1pc3Npb24gaXMg aGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBh Ci0jIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZp bGVzICh0aGUgIlNvZnR3YXJlIiksCi0jIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQg cmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSMgdGhlIHJpZ2h0cyB0 byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vu c2UsCi0jIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQg cGVyc29ucyB0byB3aG9tIHRoZQotIyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1 YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotIwotIyBUaGUgYWJvdmUgY29weXJp Z2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0 Ci0jIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFu dGlhbCBwb3J0aW9ucyBvZiB0aGUKLSMgU29mdHdhcmUuCi0jCi0jIFRIRSBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9S Ci0jIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZLAotIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB TkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSMgVEhFIEFVVEhPUlMgT1Ig Q09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RI RVIKLSMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBP UiBPVEhFUldJU0UsIEFSSVNJTkcKLSMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwotIyBJTiBUSEUgU09G VFdBUkUuCi0jCi0KLXVzZSBzdHJpY3Q7Ci11c2Ugd2FybmluZ3M7Ci11c2UgNS4wMTA7Ci0KLXVz ZSBHZXRvcHQ6OlN0ZDsKLQotY2hvbXAobXkgJGlndF9yb290ID0gYHB3ZCAtUGApOwotbXkgJHdz aW0gPSAiJGlndF9yb290L2JlbmNobWFya3MvZ2VtX3dzaW0iOwotbXkgJHdya19yb290ID0gIiRp Z3Rfcm9vdC9iZW5jaG1hcmtzL3dzaW0iOwotbXkgJHRyYWNlcGwgPSAiJGlndF9yb290L3Njcmlw dHMvdHJhY2UucGwiOwotbXkgJHRvbGVyYW5jZSA9IDAuMDE7Ci1teSAkY2xpZW50X3RhcmdldF9z ID0gMTA7Ci1teSAkaWRsZV90b2xlcmFuY2VfcGN0ID0gMi4wOwotbXkgJHZlcmJvc2UgPSAwOwot bXkgJGd0MiA9IDA7Ci1teSAkc2hvd19jbWRzID0gMDsKLW15ICRyZWFsdGltZV90YXJnZXQgPSAw OwotbXkgJHdwc190YXJnZXQgPSAwOwotbXkgJHdwc190YXJnZXRfcGFyYW0gPSAwOwotbXkgJG11 bHRpX21vZGUgPSAwOwotbXkgQG11bHRpX3dvcmtsb2FkczsKLW15ICR3X2RpcmVjdDsKLW15ICRi YWxhbmNlcjsKLW15ICRub3A7Ci1teSAlb3B0czsKLQotbXkgQGJhbGFuY2VycyA9ICggJ3JyJywg J3JhbmQnLCAncWQnLCAncWRyJywgJ3FkYXZnJywgJ3J0JywgJ3J0cicsICdydGF2ZycsCi0JCSAg J2NvbnRleHQnLCAnYnVzeScsICdidXN5LWF2ZycsICdpOTE1JyApOwotbXkgJWJhbF9za2lwX0gg PSAoICdycicgPT4gMSwgJ3JhbmQnID0+IDEsICdjb250ZXh0JyA9PiAxLCAsICdidXN5JyA9PiAx LAotCQkgICAnYnVzeS1hdmcnID0+IDEsICdpOTE1JyA9PiAxICk7Ci1teSAlYmFsX3NraXBfUiA9 ICggJ2k5MTUnID0+IDEgKTsKLW15ICViYWxfc2tpcF9HID0gKCAnaTkxNScgPT4gMSApOwotCi1t eSBAd29ya2xvYWRzID0gKAotCSdtZWRpYV9sb2FkX2JhbGFuY2VfMTdpNy53c2ltJywKLQknbWVk aWFfbG9hZF9iYWxhbmNlXzE5LndzaW0nLAotCSdtZWRpYV9sb2FkX2JhbGFuY2VfNGsxMnU3Lndz aW0nLAotCSdtZWRpYV9sb2FkX2JhbGFuY2VfZmhkMjZ1Ny53c2ltJywKLQknbWVkaWFfbG9hZF9i YWxhbmNlX2hkMDEud3NpbScsCi0JJ21lZGlhX2xvYWRfYmFsYW5jZV9oZDA2bXAyLndzaW0nLAot CSdtZWRpYV9sb2FkX2JhbGFuY2VfaGQxMi53c2ltJywKLQknbWVkaWFfbG9hZF9iYWxhbmNlX2hk MTdpNC53c2ltJywKLQknbWVkaWFfMW4yXzQ4MHAud3NpbScsCi0JJ21lZGlhXzFuM180ODBwLndz aW0nLAotCSdtZWRpYV8xbjRfNDgwcC53c2ltJywKLQknbWVkaWFfMW41XzQ4MHAud3NpbScsCi0J J21lZGlhXzFuMl9hc3kud3NpbScsCi0JJ21lZGlhXzFuM19hc3kud3NpbScsCi0JJ21lZGlhXzFu NF9hc3kud3NpbScsCi0JJ21lZGlhXzFuNV9hc3kud3NpbScsCi0JJ21lZGlhX21mZTJfNDgwcC53 c2ltJywKLQknbWVkaWFfbWZlM180ODBwLndzaW0nLAotCSdtZWRpYV9tZmU0XzQ4MHAud3NpbScs Ci0JJ21lZGlhX25uXzEwODBwLndzaW0nLAotCSdtZWRpYV9ubl80ODBwLndzaW0nLAotICAgICk7 Ci0KLXN1YiBzaG93X2NtZAotewotCW15ICgkY21kKSA9IEBfOwotCi0Jc2F5ICJcbisrKyAkY21k IiBpZiAkc2hvd19jbWRzOwotfQotCi1zdWIgY2FsaWJyYXRlX25vcAotewotCW15ICgkZGVsYXks ICRub3ApOwotCW15ICRjbWQgPSAiJHdzaW0iOwotCi0Jc2hvd19jbWQoJGNtZCk7Ci0Jb3BlbiBX U0lNLCAiJGNtZCB8IiBvciBkaWU7Ci0Jd2hpbGUgKDxXU0lNPikgewotCQljaG9tcDsKLQkJaWYg KC9Ob3AgY2FsaWJyYXRpb24gZm9yIChcZCspdXMgZGVsYXkgaXMgKFxkKykuLykgewotCQkJJGRl bGF5ID0gJDE7Ci0JCQkkbm9wID0gJDI7Ci0JCX0KLQotCX0KLQljbG9zZSBXU0lNOwotCi0JZGll IHVubGVzcyAkbm9wOwotCi0JcmV0dXJuICRub3AKLX0KLQotc3ViIGNhbl9iYWxhbmNlX3dvcmts b2FkCi17Ci0JbXkgKCR3cmspID0gQF87Ci0JbXkgJHJlcyA9IDA7Ci0KLQlvcGVuIFdSSywgIiR3 cmtfcm9vdC8kd3JrIiBvciBkaWU7Ci0Jd2hpbGUgKDxXUks+KSB7Ci0JCWNob21wOwotCQlpZiAo L1wuVkNTXC4vKSB7Ci0JCQkkcmVzID0gMTsKLQkJCWxhc3Q7Ci0JCX0KLQl9Ci0JY2xvc2UgV1JL OwotCi0JcmV0dXJuICRyZXM7Ci19Ci0KLXN1YiBhZGRfd3BzX2FyZwotewotCW15IChAYXJncykg PSBAXzsKLQlteSAkcGVyaW9kOwotCi0JcmV0dXJuIEBhcmdzIGlmICRyZWFsdGltZV90YXJnZXQg PD0gMDsKLQotCSRwZXJpb2QgPSBpbnQoMTAwMDAwMCAvICRyZWFsdGltZV90YXJnZXQpOwotCXB1 c2ggQGFyZ3MsICctYSc7Ci0JcHVzaCBAYXJncywgJ3AuJHBlcmlvZCc7Ci0KLQlyZXR1cm4gQGFy Z3M7Ci19Ci0KLXN1YiBydW5fd29ya2xvYWQKLXsKLQlteSAoQGFyZ3MpID0gQF87Ci0JbXkgKCR0 aW1lLCAkd3BzLCAkY21kKTsKLQlteSBAcmV0OwotCi0JQGFyZ3MgPSBhZGRfd3BzX2FyZyhAYXJn cyk7Ci0JcHVzaCBAYXJncywgJy0yJyBpZiAkZ3QyOwotCi0JdW5zaGlmdCBAYXJncywgJHdzaW07 Ci0JJGNtZCA9IGpvaW4gJyAnLCBAYXJnczsKLQlzaG93X2NtZCgkY21kKTsKLQotCW9wZW4gV1NJ TSwgIiRjbWQgfCIgb3IgZGllOwotCXdoaWxlICg8V1NJTT4pIHsKLQkJY2hvbXA7Ci0JCWlmICgv XihcZCtcLlxkKylzIGVsYXBzZWQgXCgoXGQrXC4/XGQrKSB3b3JrbG9hZHNcL3NcKSQvKSB7Ci0J CQkkdGltZSA9ICQxOwotCQkJJHdwcyA9ICQyOwotCQl9IGVsc2lmICgvKFxkKylcOiBcZCtcLlxk K3MgZWxhcHNlZCBcKFxkKyBjeWNsZXMsIChcZCtcLj9cZCspIHdvcmtsb2Fkc1wvc1wpLykgewot CQkJJHJldFskMV0gPSAkMjsKLQkJfQotCX0KLQljbG9zZSBXU0lNOwotCi0JcmV0dXJuICgkdGlt ZSwgJHdwcywgXEByZXQpOwotfQotCi1zdWIgZHVtcF9jbWQKLXsKLQlteSAoJGNtZCwgJGZpbGUp ID0gQF87Ci0KLQlzaG93X2NtZCgiJGNtZCA+ICRmaWxlIik7Ci0KLQlvcGVuIEZPVVQsICc+Jywg JGZpbGUgb3IgZGllOwotCW9wZW4gVElOLCAiJGNtZCB8IiBvciBkaWU7Ci0Jd2hpbGUgKDxUSU4+ KSB7Ci0JCXByaW50IEZPVVQgJF87Ci0JfQotCWNsb3NlIFRJTjsKLQljbG9zZSBGT1VUOwotfQot Ci1zdWIgdHJhY2Vfd29ya2xvYWQKLXsKLQlteSAoJHdyaywgJGIsICRyLCAkYykgPSBAXzsKLQlt eSBAYXJncyA9ICgkdHJhY2VwbCwgJy0tdHJhY2UnLCAkd3NpbSwgJy1xJywgJy1uJywgJG5vcCwg Jy1yJywgJHIsICctYycsICRjKTsKLQlteSAkbWluX2JhdGNoZXMgPSAxNiArICRyICogJGMgLyAy OwotCW15IEBza2lwX2VuZ2luZTsKLQlteSAlZW5naW5lczsKLQlteSAoJGNtZCwgJGZpbGUpOwot Ci0JcHVzaCBAYXJncywgJy0yJyBpZiAkZ3QyOwotCi0JdW5sZXNzICgkYiBlcSAnPG5vbmU+Jykg ewotCQlwdXNoIEBhcmdzLCAnLVInOwotCQlwdXNoIEBhcmdzLCBzcGxpdCAvXHMrLywgJGI7Ci0J fQotCi0JaWYgKGRlZmluZWQgJHdfZGlyZWN0KSB7Ci0JCXB1c2ggQGFyZ3MsIHNwbGl0IC9ccysv LCAkd3JrOwotCX0gZWxzZSB7Ci0JCXB1c2ggQGFyZ3MsICctdyc7Ci0JCXB1c2ggQGFyZ3MsICR3 cmtfcm9vdCAuICcvJyAuICR3cms7Ci0JfQotCi0Jc2hvd19jbWQoam9pbiAnICcsIEBhcmdzKTsK LQlpZiAoLWUgJ3BlcmYuZGF0YScpIHsKLQkJdW5saW5rICdwZXJmLmRhdGEnIG9yIGRpZTsKLQl9 Ci0Jc3lzdGVtKEBhcmdzKSA9PSAwIG9yIGRpZTsKLQotCSRjbWQgPSAicGVyZiBzY3JpcHQgfCAk dHJhY2VwbCI7Ci0Jc2hvd19jbWQoJGNtZCk7Ci0Jb3BlbiBDTUQsICIkY21kIHwiIG9yIGRpZTsK LQl3aGlsZSAoPENNRD4pIHsKLQkJY2hvbXA7Ci0JCWlmICgvUmluZyhcUyspOiAoXGQrKSBiYXRj aGVzLio/KFxkK1wuP1xkKyklIGlkbGUsLykgewotCQkJaWYgKCQyID49ICRtaW5fYmF0Y2hlcykg ewotCQkJCSRlbmdpbmVzeyQxfSA9ICQzOwotCQkJfSBlbHNlIHsKLQkJCQlwdXNoIEBza2lwX2Vu Z2luZSwgJDE7Ci0JCQl9Ci0JCX0gZWxzaWYgKC9HUFU6IChcZCtcLj9cZCspJSBpZGxlLykgewot CQkJJGVuZ2luZXN7J2dwdSd9ID0gJDE7Ci0JCX0KLQl9Ci0JY2xvc2UgQ01EOwotCi0JJHdyayA9 fiBzLyR3cmtfcm9vdC8vZzsKLQkkd3JrID1+IHMvXC53c2ltLy9nOwotCSR3cmsgPX4gcy8tdy9X L2c7Ci0JJHdyayA9fiBzL1sgLV0vXy9nOwotCSR3cmsgPX4gcy9cLy8tL2c7Ci0JJGIgPX4gcy9b IDw+XS9fL2c7Ci0JJGZpbGUgPSAiJHt3cmt9XyR7Yn1fLXIke3J9Xy1jJHtjfSI7Ci0KLQlkdW1w X2NtZCgncGVyZiBzY3JpcHQnLCAiJHtmaWxlfS50cmFjZSIpOwotCi0JJGNtZCA9ICJwZXJmIHNj cmlwdCB8ICR0cmFjZXBsIC0taHRtbCAteCBjdHhzYXZlIC1zIC1jICI7Ci0JJGNtZCAuPSBqb2lu ICcgJywgbWFwKCItaSAkXyIsIEBza2lwX2VuZ2luZSk7Ci0KLQlkdW1wX2NtZCgkY21kLCAiJHtm aWxlfS5odG1sIik7Ci0KLQlyZXR1cm4gXCVlbmdpbmVzOwotfQotCi1zdWIgY2FsaWJyYXRlX3dv cmtsb2FkCi17Ci0JbXkgKCR3cmspID0gQF87Ci0JbXkgJHRvbCA9ICR0b2xlcmFuY2U7Ci0JbXkg JGxvb3BzID0gMDsKLQlteSAkZXJyb3I7Ci0JbXkgJHI7Ci0KLQkkciA9ICRyZWFsdGltZV90YXJn ZXQgPiAwID8gJHJlYWx0aW1lX3RhcmdldCAqICRjbGllbnRfdGFyZ2V0X3MgOiAyMzsKLQlmb3Ig KDs7KSB7Ci0JCW15IEBhcmdzID0gKCctbicsICRub3AsICctcicsICRyKTsKLQkJbXkgKCR0aW1l LCAkd3BzKTsKLQotCQlpZiAoZGVmaW5lZCAkd19kaXJlY3QpIHsKLQkJCXB1c2ggQGFyZ3MsIHNw bGl0IC9ccysvLCAkd3JrOwotCQl9IGVsc2UgewotCQkJcHVzaCBAYXJncywgJy13JzsKLQkJCXB1 c2ggQGFyZ3MsICR3cmtfcm9vdCAuICcvJyAuICR3cms7Ci0JCX0KLQotCQkoJHRpbWUsICR3cHMp ID0gcnVuX3dvcmtsb2FkKEBhcmdzKTsKLQotCQkkd3BzID0gJHIgLyAkdGltZSBpZiAkd19kaXJl Y3Q7Ci0JCSRlcnJvciA9IGFicygkdGltZSAtICRjbGllbnRfdGFyZ2V0X3MpIC8gJGNsaWVudF90 YXJnZXRfczsKLQotCQlsYXN0IGlmICRlcnJvciA8PSAkdG9sOwotCi0JCSRyID0gaW50KCR3cHMg KiAkY2xpZW50X3RhcmdldF9zKTsKLQkJJGxvb3BzID0gJGxvb3BzICsgMTsKLQkJaWYgKCRsb29w cyA+PSAzKSB7Ci0JCQkkdG9sID0gJHRvbCAqICgxLjIgKyAoJHRvbCkpOwotCQkJJGxvb3BzID0g MDsKLQkJfQotCQlsYXN0IGlmICR0b2wgPiAwLjI7Ci0JfQotCi0JcmV0dXJuICgkciwgJGVycm9y KTsKLX0KLQotc3ViIGZpbmRfc2F0dXJhdGlvbl9wb2ludAotewotCW15ICgkd3JrLCAkcnIsICR2 ZXJib3NlLCBAYXJncykgPSBAXzsKLQlteSAoJGxhc3Rfd3BzLCAkYywgJHN3cHMsICR3d3BzKTsK LQlteSAkdGFyZ2V0ID0gJHJlYWx0aW1lX3RhcmdldCA+IDAgPyAkcmVhbHRpbWVfdGFyZ2V0IDog JHdwc190YXJnZXQ7Ci0JbXkgJHIgPSAkcnI7Ci0JbXkgJHdjbnQ7Ci0JbXkgJG1heGM7Ci0JbXkg JG1heCA9IDA7Ci0KLQlwdXNoIEBhcmdzLCAnLXYnIGlmICRtdWx0aV9tb2RlIGFuZCAkd19kaXJl Y3Q7Ci0KLQlpZiAoZGVmaW5lZCAkd19kaXJlY3QpIHsKLQkJcHVzaCBAYXJncywgc3BsaXQgL1xz Ky8sICR3cms7Ci0JCSR3Y250ID0gKCkgPSAkd3JrID1+IC8tW3dXXS9naTsKLQotCX0gZWxzZSB7 Ci0JCXB1c2ggQGFyZ3MsICctdyc7Ci0JCXB1c2ggQGFyZ3MsICR3cmtfcm9vdCAuICcvJyAuICR3 cms7Ci0JCSR3Y250ID0gMTsKLQl9Ci0KLQlmb3IgKCRjID0gMTsgOyAkYyA9ICRjICsgMSkgewot CQlteSAoJHRpbWUsICR3cHMpOwotCQlteSBAYXJnc18gPSAoQGFyZ3MsICgnLXInLCAkciwgJy1j JywgJGMpKTsKLQotCQkoJHRpbWUsICR3cHMsICR3d3BzKSA9IHJ1bl93b3JrbG9hZChAYXJnc18p OwotCi0JCXNheSAiICAgICAgICAkYyBjbGllbnRzIGlzICR3cHMgd3BzLiIgaWYgJHZlcmJvc2U7 Ci0KLQkJaWYgKCRjID4gMSkgewotCQkJbXkgJGRlbHRhOwotCi0JCQlpZiAoJHRhcmdldCA8PSAw KSB7Ci0JCQkJaWYgKCR3cHMgPiAkbWF4KSB7Ci0JCQkJCSRtYXggPSAkd3BzOwotCQkJCQkkbWF4 YyA9ICRjOwotCQkJCX0KLQkJCQkkZGVsdGEgPSAoJHdwcyAtICRsYXN0X3dwcykgLyAkbGFzdF93 cHM7Ci0JCQkJaWYgKCRkZWx0YSA+IDApIHsKLQkJCQkJbGFzdCBpZiAkZGVsdGEgPCAkdG9sZXJh bmNlOwotCQkJCX0gZWxzZSB7Ci0JCQkJCSRkZWx0YSA9ICgkd3BzIC0gJG1heCkgLyAkbWF4Owot CQkJCQlsYXN0IGlmIGFicygkZGVsdGEpID49ICR0b2xlcmFuY2U7Ci0JCQkJfQotCQkJfSBlbHNl IHsKLQkJCQkkZGVsdGEgPSAoJHdwcyAvICRjIC0gJHRhcmdldCkgLyAkdGFyZ2V0OwotCQkJCWxh c3QgaWYgJGRlbHRhIDwgMCBhbmQgYWJzKCRkZWx0YSkgPj0gJHRvbGVyYW5jZTsKLQkJCX0KLQkJ CSRyID0gaW50KCRyciAqICgkY2xpZW50X3RhcmdldF9zIC8gJHRpbWUpKTsKLQkJfSBlbHNpZiAo JGMgPT0gMSkgewotCQkJJHN3cHMgPSAkd3BzOwotCQkJcmV0dXJuICgkYywgJHdwcywgJHN3cHMs ICR3d3BzKSBpZiAkd2NudCA+IDEgb3IKLQkJCQkJCQkgICAkbXVsdGlfbW9kZSBvcgotCQkJCQkJ CSAgICgkd3BzX3RhcmdldF9wYXJhbSA8IDAgYW5kCi0JCQkJCQkJICAgICR3cHNfdGFyZ2V0ID09 IDApOwotCQl9Ci0KLQkJJGxhc3Rfd3BzID0gJHdwczsKLQl9Ci0KLQlpZiAoJHRhcmdldCA8PSAw KSB7Ci0JCXJldHVybiAoJG1heGMsICRtYXgsICRzd3BzLCAkd3dwcyk7Ci0JfSBlbHNlIHsKLQkJ cmV0dXJuICgkYyAtIDEsICRsYXN0X3dwcywgJHN3cHMsICR3d3BzKTsKLQl9Ci19Ci0KLWdldG9w dHMoJ2h2MnhtbjpiOlc6QjpyOnQ6aTpSOlQ6dzonLCBcJW9wdHMpOwotCi1pZiAoZGVmaW5lZCAk b3B0c3snaCd9KSB7Ci0JcHJpbnQgPDxFTkRIRUxQOwotU3VwcG9ydGVkIG9wdGlvbnM6Ci0KLSAg LWggICAgICAgICAgSGVscCB0ZXh0LgotICAtdiAgICAgICAgICBCZSB2ZXJib3NlLgotICAteCAg ICAgICAgICBTaG93IGV4dGVybmFsIGNvbW1hbmRzLgotICAtMiAgICAgICAgICBSdW4gZ2VtX3dz aW0gaW4gR1QyIG1vZGUuCi0gIC1uIG51bSAgICAgIE5vcCBjYWxpYnJhdGlvbi4KLSAgLWIgc3Ry ICAgICAgQmFsYW5jZXIgdG8gcHJlLXNlbGVjdC4KLSAgICAgICAgICAgICAgU2tpcHMgYmFsYW5j ZXIgYXV0by1zZWxlY3Rpb24uCi0gICAgICAgICAgICAgIFBhc3NlZCBzdHJhaWdodCB0aGUgZ2Vt X3dzaW0gc28gdXNlIGxpa2UgLWIgIi1iIHFkIC1SIgotICAtVyBhLGIsYyAgICBPdmVycmlkZSB0 aGUgZGVmYXVsdCBsaXN0IG9mIHdvcmtsb2Fkcy4KLSAgLUIgYSxiLGMgICAgT3ZlcnJpZGUgdGhl IGRlZmF1bHQgbGlzdCBvZiBiYWxhbmNlcnMuCi0gIC1yIHNlYyAgICAgIFRhcmdldCB3b3JrbG9h ZCBkdXJhdGlvbi4KLSAgLXQgcGN0ICAgICAgQ2FsaWJyYXRpb24gdG9sZXJhbmNlLgotICAtaSBw Y3QgICAgICBFbmdpbmUgaWRsZW5lc3MgdG9sZXJhbmNlLgotICAtUiB3cHMgICAgICBSdW4gd29y a2xvYWRzIGluIHRoZSByZWFsLXRpbWUgbW9kZSBhdCB3cHMgcmF0ZS4KLSAgLVQgd3BzICAgICAg Q2FsaWJyYXRlIHVwIHRvIHdwcy9jbGllbnQgdGFyZ2V0IGluc3RlYWQgb2YgR1BVIHNhdHVyYXRp b24uCi0gICAgICAgICAgICAgIE5lZ2F0aXZlIHZhbHVlcyBzZXQgdGhlIHRhcmdldCBiYXNlZCBv biB0aGUgc2luZ2xlIGNsaWVudAotICAgICAgICAgICAgICBwZXJmb3JtYW5jZSB3aGVyZSB0YXJn ZXQgPSBzaW5nbGUtY2xpZW50LXdwcyAvIC1OLgotICAtdyBzdHIgICAgICBQYXNzLXRocm91Z2gg dG8gZ2VtX3dzaW0uIE92ZXJyaWRlcyBub3JtYWwgd29ya2xvYWQgc2VsZWN0aW9uLgotICAtbSAg ICAgICAgICBNdWx0aS13b3JrbG9hZCBtb2RlLiBBbGwgc2VsZWN0ZWQgd29ya2xvYWRzIHdpbGwg YmUgcnVuIGluCi0gICAgICAgICAgICAgIHBhcmFsbGVsIGFuZCBvdmVyYWwgc2NvcmUgd2lsbCBi ZSByZWxhdGl2ZSB0byB3aGVuIHJ1bgotICAgICAgICAgICAgICBpbmRpdmlkdWFsbHkuCi1FTkRI RUxQCi0JZXhpdCAwOwotfQotCi0kdmVyYm9zZSA9IDEgaWYgZGVmaW5lZCAkb3B0c3sndid9Owot JGd0MiA9IDEgaWYgZGVmaW5lZCAkb3B0c3snMid9OwotJHNob3dfY21kcyA9IDEgaWYgZGVmaW5l ZCAkb3B0c3sneCd9OwotJG11bHRpX21vZGUgPSAxIGlmIGRlZmluZWQgJG9wdHN7J20nfTsKLWlm IChkZWZpbmVkICRvcHRzeydiJ30pIHsKLQlkaWUgdW5sZXNzIHN1YnN0cigkb3B0c3snYid9LCAw LCAyKSBlcSAnLWInOwotCSRiYWxhbmNlciA9ICRvcHRzeydiJ307Ci19Ci1pZiAoZGVmaW5lZCAk b3B0c3snQid9KSB7Ci0JQGJhbGFuY2VycyA9IHNwbGl0IC8sLywgJG9wdHN7J0InfTsKLX0gZWxz ZSB7Ci0JdW5zaGlmdCBAYmFsYW5jZXJzLCAnJzsKLX0KLUB3b3JrbG9hZHMgPSBzcGxpdCAvLC8s ICRvcHRzeydXJ30gaWYgZGVmaW5lZCAkb3B0c3snVyd9OwotJGNsaWVudF90YXJnZXRfcyA9ICRv cHRzeydyJ30gaWYgZGVmaW5lZCAkb3B0c3sncid9OwotJHRvbGVyYW5jZSA9ICRvcHRzeyd0J30g LyAxMDAuMCBpZiBkZWZpbmVkICRvcHRzeyd0J307Ci0kaWRsZV90b2xlcmFuY2VfcGN0ID0gJG9w dHN7J2knfSBpZiBkZWZpbmVkICRvcHRzeydpJ307Ci0kcmVhbHRpbWVfdGFyZ2V0ID0gJG9wdHN7 J1InfSBpZiBkZWZpbmVkICRvcHRzeydSJ307Ci0kd3BzX3RhcmdldCA9ICRvcHRzeydUJ30gaWYg ZGVmaW5lZCAkb3B0c3snVCd9OwotJHdwc190YXJnZXRfcGFyYW0gPSAkd3BzX3RhcmdldDsKLSR3 X2RpcmVjdCA9ICRvcHRzeyd3J30gaWYgZGVmaW5lZCAkb3B0c3sndyd9OwotCi1pZiAoJG11bHRp X21vZGUpIHsKLQlkaWUgaWYgJHdfZGlyZWN0OyAjIE5vdCBzdXBwb3J0ZWQKLQlAbXVsdGlfd29y a2xvYWRzID0gQHdvcmtsb2FkczsKLX0KLQotQHdvcmtsb2FkcyA9ICgkd19kaXJlY3QpIGlmIGRl ZmluZWQgJHdfZGlyZWN0OwotCi1zYXkgIldvcmtsb2FkczoiOwotcHJpbnQgbWFwIHsgIiAgJF9c biIgfSBAd29ya2xvYWRzOwotcHJpbnQgIkJhbGFuY2VyczogIjsKLXNheSBtYXAgeyAiJF8sIiB9 IEBiYWxhbmNlcnM7Ci1zYXkgIlRhcmdldCB3b3JrbG9hZCBkdXJhdGlvbiBpcyAke2NsaWVudF90 YXJnZXRfc31zLiI7Ci1zYXkgIkNhbGlicmF0aW9uIHRvbGVyYW5jZSBpcyAkdG9sZXJhbmNlLiI7 Ci1zYXkgIlJlYWwtdGltZSBtb2RlIGF0ICR7cmVhbHRpbWVfdGFyZ2V0fSB3cHMuIiBpZiAkcmVh bHRpbWVfdGFyZ2V0ID4gMDsKLXNheSAiV3BzIHRhcmdldCBpcyAke3dwc190YXJnZXR9IHdwcy4i IGlmICR3cHNfdGFyZ2V0ID4gMDsKLXNheSAiTXVsdGktd29ya2xvYWQgbW9kZS4iIGlmICRtdWx0 aV9tb2RlOwotJG5vcCA9ICRvcHRzeyduJ307Ci0kbm9wID0gY2FsaWJyYXRlX25vcCgpIHVubGVz cyAkbm9wOwotc2F5ICJOb3AgY2FsaWJyYXRpb24gaXMgJG5vcC4iOwotCi1nb3RvIFZFUklGWSBp ZiBkZWZpbmVkICRiYWxhbmNlcjsKLQotbXkgKCViZXN0X2JhbCwgJWJlc3RfYmlkKTsKLW15ICVy ZXN1bHRzOwotbXkgJXNjb3JlczsKLW15ICV3c2NvcmVzOwotbXkgJWNzY29yZXM7Ci1teSAlY3dz Y29yZXM7Ci1teSAlbXNjb3JlczsKLW15ICVtd3Njb3JlczsKLQotc3ViIGFkZF9wb2ludHMKLXsK LQlteSAoJHdwcywgJHNjb3JlcywgJHdzY29yZXMpID0gQF87Ci0JbXkgKCRtaW4sICRtYXgsICRz cHJlYWQpOwotCW15IEBzb3J0ZWQ7Ci0KLQlAc29ydGVkID0gc29ydCB7ICRiIDw9PiAkYSB9IHZh bHVlcyAleyR3cHN9OwotCSRtYXggPSAkc29ydGVkWzBdOwotCSRtaW4gPSAkc29ydGVkWy0xXTsK LQkkc3ByZWFkID0gJG1heCAtICRtaW47Ci0JZGllIGlmICRzcHJlYWQgPCAwOwotCi0JZm9yZWFj aCBteSAkdyAoa2V5cyAleyR3cHN9KSB7Ci0JCW15ICgkc2NvcmUsICR3c2NvcmUpOwotCi0JCXVu bGVzcyAoZXhpc3RzICRzY29yZXMtPnskd30pIHsKLQkJCSRzY29yZXMtPnskd30gPSAwOwotCQkJ JHdzY29yZXMtPnskd30gPSAwOwotCQl9Ci0KLQkJJHNjb3JlID0gJHdwcy0+eyR3fSAvICRtYXg7 Ci0JCSRzY29yZXMtPnskd30gPSAkc2NvcmVzLT57JHd9ICsgJHNjb3JlOwotCQkkd3Njb3JlID0g JHNjb3JlICogJHNwcmVhZCAvICRtYXg7Ci0JCSR3c2NvcmVzLT57JHd9ID0gJHdzY29yZXMtPnsk d30gKyAkd3Njb3JlOwotCX0KLX0KLQotbXkgQHNhdHVyYXRpb25fd29ya2xvYWRzID0gJG11bHRp X21vZGUgPyBAbXVsdGlfd29ya2xvYWRzIDogQHdvcmtsb2FkczsKLW15ICVhbGx3cHM7Ci1teSAk d2lkeCA9IDA7Ci0KLXB1c2ggQHNhdHVyYXRpb25fd29ya2xvYWRzLCAnLXcgJyAuIGpvaW4gJyAt dyAnLCBtYXAoIiR3cmtfcm9vdC8kXyIsIEB3b3JrbG9hZHMpCi0gICAgIGlmICRtdWx0aV9tb2Rl OwotCi1mb3JlYWNoIG15ICR3cmsgKEBzYXR1cmF0aW9uX3dvcmtsb2FkcykgewotCW15IEBhcmdz ID0gKCAiLW4gJG5vcCIpOwotCW15ICgkciwgJGVycm9yLCAkc2hvdWxkX2IsICRiZXN0KTsKLQlt eSAoJXdwcywgJWN3cHMsICVtd3BzKTsKLQlteSBAc29ydGVkOwotCW15ICRyYW5nZTsKLQotCSR3 X2RpcmVjdCA9ICR3cmsgaWYgJG11bHRpX21vZGUgYW5kICR3aWR4ID09ICQjc2F0dXJhdGlvbl93 b3JrbG9hZHM7Ci0KLQkkc2hvdWxkX2IgPSAxOwotCSRzaG91bGRfYiA9IGNhbl9iYWxhbmNlX3dv cmtsb2FkKCR3cmspIHVubGVzcyBkZWZpbmVkICR3X2RpcmVjdDsKLQotCXByaW50ICJcbkV2YWx1 YXRpbmcgJyR3cmsnLi4uIjsKLQotCSgkciwgJGVycm9yKSA9IGNhbGlicmF0ZV93b3JrbG9hZCgk d3JrKTsKLQlzYXkgIiAke2NsaWVudF90YXJnZXRfc31zIGlzICRyIHdvcmtsb2Fkcy4gKGVycm9y PSRlcnJvcikiOwotCi0Jc2F5ICIgIEZpbmRpbmcgc2F0dXJhdGlvbiBwb2ludHMgZm9yICckd3Jr Jy4uLiI7Ci0KLQlCQUw6IGZvcmVhY2ggbXkgJGJhbCAoQGJhbGFuY2VycykgewotCQlHQkFMOiBm b3JlYWNoIG15ICRHICgnJywgJy1HJywgJy1kJywgJy1HIC1kJykgewotCQkJZm9yZWFjaCBteSAk SCAoJycsICctSCcpIHsKLQkJCQlteSBAeGFyZ3M7Ci0JCQkJbXkgKCR3LCAkYywgJHMsICRid3dw cyk7Ci0JCQkJbXkgJGJpZDsKLQotCQkJCWlmICgkYmFsIG5lICcnKSB7Ci0JCQkJCW5leHQgR0JB TCBpZiAkRyA9fiAnLUcnIGFuZCBleGlzdHMgJGJhbF9za2lwX0d7JGJhbH07Ci0KLQkJCQkJcHVz aCBAeGFyZ3MsICItYiAkYmFsIjsKLQkJCQkJcHVzaCBAeGFyZ3MsICctUicgdW5sZXNzIGV4aXN0 cyAkYmFsX3NraXBfUnskYmFsfTsKLQkJCQkJcHVzaCBAeGFyZ3MsICRHIGlmICRHIG5lICcnOwot CQkJCQlwdXNoIEB4YXJncywgJEggaWYgJEggbmUgJyc7Ci0JCQkJCSRiaWQgPSBqb2luICcgJywg QHhhcmdzOwotCQkJCQlwcmludCAiICAgICRiYWwgYmFsYW5jZXIgKCckYmlkJyk6ICI7Ci0JCQkJ fSBlbHNlIHsKLQkJCQkJJGJpZCA9ICc8bm9uZT4nOwotCQkJCQlwcmludCAiICAgIE5vIGJhbGFu Y2luZzogIjsKLQkJCQl9Ci0KLQkJCQkkd3BzX3RhcmdldCA9IDAgaWYgJHdwc190YXJnZXRfcGFy YW0gPCAwOwotCi0JCQkJKCRjLCAkdywgJHMsICRid3dwcykgPQotCQkJCQlmaW5kX3NhdHVyYXRp b25fcG9pbnQoJHdyaywgJHIsIDAsCi0JCQkJCQkJICAgICAgKEBhcmdzLCBAeGFyZ3MpKTsKLQot CQkJCWlmICgkd3BzX3RhcmdldF9wYXJhbSA8IDApIHsKLQkJCQkJJHdwc190YXJnZXQgPSAkcyAv IC0kd3BzX3RhcmdldF9wYXJhbTsKLQotCQkJCQkoJGMsICR3LCAkcywgJGJ3d3BzKSA9Ci0JCQkJ CQlmaW5kX3NhdHVyYXRpb25fcG9pbnQoJHdyaywgJHIsCi0JCQkJCQkJCSAgICAgIDAsCi0JCQkJ CQkJCSAgICAgIChAYXJncywKLQkJCQkJCQkJICAgICAgIEB4YXJncykpOwotCQkJCX0KLQotCQkJ CWlmICgkbXVsdGlfbW9kZSBhbmQgJHdfZGlyZWN0KSB7Ci0JCQkJCW15ICR3aWR4OwotCi0JCQkJ CWRpZSB1bmxlc3Mgc2NhbGFyKEBtdWx0aV93b3JrbG9hZHMpID09Ci0JCQkJCQkgICBzY2FsYXIo QHskYnd3cHN9KTsKLQkJCQkJZGllIHVubGVzcyBzY2FsYXIoQG11bHRpX3dvcmtsb2FkcykgPT0K LQkJCQkJCSAgIHNjYWxhcihrZXlzICVhbGx3cHMpOwotCi0JCQkJCSMgVG90YWwgb2YgYWxsIHdv cmtsb2FkIHdwcyBmcm9tIHRoZQotCQkJCQkjIG1peGVkIHJ1bi4KLQkJCQkJJHcgPSAwOwotCQkJ CQlmb3JlYWNoICR3aWR4ICgwLi4kI3skYnd3cHN9KSB7Ci0JCQkJCQkkdyArPSAkYnd3cHMtPlsk d2lkeF07Ci0JCQkJCX0KLQotCQkJCQkjIFRvdGFsIG9mIGFsbCB3b3JrbG9hZCB3cHMgZnJvbSB3 aGVuCi0JCQkJCSMgcmFuIGluZGl2aWR1YWxseSB3aXRoIHRoZSBiZXN0Ci0JCQkJCSMgYmFsYW5j ZXIuCi0JCQkJCW15ICR0b3QgPSAwOwotCQkJCQlmb3JlYWNoIG15ICR3cmsgKEBtdWx0aV93b3Jr bG9hZHMpIHsKLQkJCQkJCSR0b3QgKz0gJGFsbHdwc3skd3JrfS0+eyRiZXN0X2JpZHskd3JrfX07 Ci0JCQkJCX0KLQotCQkJCQkjIE5vcm1hbGl6ZSBtaXhlZCBzdW0gd2l0aCBzdW0gb2YKLQkJCQkJ IyBpbmRpdmlkdWFsIHJ1bnMuCi0JCQkJCSR3ICo9IDEwMDsKLQkJCQkJJHcgLz0gJHRvdDsKLQot CQkJCQkjIFNlY29uZCBtZXRyaWMgaXMgYXZlcmFnZSBvZiBlYWNoCi0JCQkJCSMgd29ya2xvYWQg d3BzIG5vcm1hbGl6ZWQgYnkgdGhlaXIKLQkJCQkJIyBpbmRpdmlkdWFsIHJ1biBwZXJmb3JtYW5j ZSB3aXRoIHRoZQotCQkJCQkjIGJlc3QgYmFsYW5jZXIuCi0JCQkJCSRzID0gMDsKLQkJCQkJJHdp ZHggPSAwOwotCQkJCQlmb3JlYWNoIG15ICR3cmsgKEBtdWx0aV93b3JrbG9hZHMpIHsKLQkJCQkJ CSRzICs9IDEwMCAqICRid3dwcy0+WyR3aWR4XSAvCi0JCQkJCQkgICAgICAkYWxsd3BzeyR3cmt9 LT57JGJlc3RfYmlkeyR3cmt9fTsKLQkJCQkJCSR3aWR4Kys7Ci0JCQkJCX0KLQkJCQkJJHMgLz0g c2NhbGFyKEBtdWx0aV93b3JrbG9hZHMpOwotCi0JCQkJCXNheSBzcHJpbnRmKCdBZ2dyZWdhdGUg KG5vcm1hbGl6ZWQpICUuMmYlJTsgZmFpcm5lc3MgJS4yZiUlJywKLQkJCQkJCSAgICAkdywgJHMp OwotCQkJCX0gZWxzZSB7Ci0JCQkJCSRhbGx3cHN7JHdya30gPSBcJXdwczsKLQkJCQl9Ci0KLQkJ CQkkd3BzeyRiaWR9ID0gJHc7Ci0JCQkJJGN3cHN7JGJpZH0gPSAkczsKLQotCQkJCWlmICgkcmVh bHRpbWVfdGFyZ2V0ID4gMCB8fCAkd3BzX3RhcmdldF9wYXJhbSA+IDApIHsKLQkJCQkJJG13cHN7 JGJpZH0gPSAkdyAqICRjOwotCQkJCX0gZWxzZSB7Ci0JCQkJCSRtd3BzeyRiaWR9ID0gJHcgKyAk czsKLQkJCQl9Ci0KLQkJCQlzYXkgIiRjIGNsaWVudHMgKCR3IHdwcywgJHMgd3BzIHNpbmdsZSBj bGllbnQsIHNjb3JlPSRtd3BzeyRiaWR9KS4iCi0JCQkJICAgIHVubGVzcyAkbXVsdGlfbW9kZSBh bmQgJHdfZGlyZWN0OwotCi0JCQkJbGFzdCBCQUwgdW5sZXNzICRzaG91bGRfYjsKLQkJCQluZXh0 IEJBTCBpZiAkYmFsIGVxICcnOwotCQkJCW5leHQgR0JBTCBpZiBleGlzdHMgJGJhbF9za2lwX0h7 JGJhbH07Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkkd2lkeCsrOwotCi0JQHNvcnRlZCA9IHNvcnQgeyAk bXdwc3skYn0gPD0+ICRtd3BzeyRhfSB9IGtleXMgJW13cHM7Ci0JJGJlc3RfYmlkeyR3cmt9ID0g JHNvcnRlZFswXTsKLQlAc29ydGVkID0gc29ydCB7ICRiIDw9PiAkYSB9IHZhbHVlcyAlbXdwczsK LQkkcmFuZ2UgPSAxIC0gJHNvcnRlZFstMV0gLyAkc29ydGVkWzBdOwotCSRiZXN0X2JhbHskd3Jr fSA9ICRzb3J0ZWRbMF07Ci0KLQluZXh0IGlmICRtdWx0aV9tb2RlIGFuZCBub3QgJHdfZGlyZWN0 OwotCi0Jc2F5ICIgIEJlc3QgYmFsYW5jZXIgaXMgJyRiZXN0X2JpZHskd3JrfScgKHJhbmdlPSRy YW5nZSkuIjsKLQotCi0JJHJlc3VsdHN7JHdya30gPSBcJW13cHM7Ci0KLQlhZGRfcG9pbnRzKFwl d3BzLCBcJXNjb3JlcywgXCV3c2NvcmVzKTsKLQlhZGRfcG9pbnRzKFwlbXdwcywgXCVtc2NvcmVz LCBcJW13c2NvcmVzKTsKLQlhZGRfcG9pbnRzKFwlY3dwcywgXCVjc2NvcmVzLCBcJWN3c2NvcmVz KTsKLX0KLQotc3ViIGR1bXBfc2NvcmVib2FyZAotewotCW15ICgkbiwgJGgpID0gQF87Ci0JbXkg KCRpLCAkc3RyLCAkYmFsYW5jZXIpOwotCW15ICgkbWF4LCAkcmFuZ2UpOwotCW15IEBzb3J0ZWQ7 Ci0KLQlAc29ydGVkID0gc29ydCB7ICRiIDw9PiAkYSB9IHZhbHVlcyAleyRofTsKLQkkbWF4ID0g JHNvcnRlZFswXTsKLQkkcmFuZ2UgPSAxIC0gJHNvcnRlZFstMV0gLyAkbWF4OwotCSRzdHIgPSAi JG4gcmFuayAocmFuZ2U9JHJhbmdlKToiOwotCXNheSAiXG4kc3RyIjsKLQlzYXkgJz0nIHggbGVu Z3RoKCRzdHIpOwotCSRpID0gMTsKLQlmb3JlYWNoIG15ICR3IChzb3J0IHsgJGgtPnskYn0gPD0+ ICRoLT57JGF9IH0ga2V5cyAleyRofSkgewotCQlteSAkc2NvcmU7Ci0KLQkJJGJhbGFuY2VyID0g JHcgaWYgJGkgPT0gMTsKLQkJJHNjb3JlID0gJGgtPnskd30gLyAkbWF4OwotCi0JCXNheSAiICAk aTogJyR3JyAoJHNjb3JlKSI7Ci0KLQkJJGkgPSAkaSArIDE7Ci0JfQotCi0JcmV0dXJuICRiYWxh bmNlcjsKLX0KLQotZHVtcF9zY29yZWJvYXJkKCRtdWx0aV9tb2RlID8gJ1Rocm91Z2hwdXQnIDog J1RvdGFsIHdwcycsIFwlc2NvcmVzKTsKLWR1bXBfc2NvcmVib2FyZCgnVG90YWwgd2VpZ2h0ZWQg d3BzJywgXCV3c2NvcmVzKSB1bmxlc3MgJG11bHRpX21vZGU7Ci1kdW1wX3Njb3JlYm9hcmQoJG11 bHRpX21vZGUgPyAnRmFpcm5lc3MnIDogJ1BlciBjbGllbnQgd3BzJywgXCVjc2NvcmVzKTsKLWR1 bXBfc2NvcmVib2FyZCgnUGVyIGNsaWVudCB3ZWlnaHRlZCB3cHMnLCBcJWN3c2NvcmVzKSB1bmxl c3MgJG11bHRpX21vZGU7Ci0kYmFsYW5jZXIgPSBkdW1wX3Njb3JlYm9hcmQoJG11bHRpX21vZGUg PyAnQ29tYmluZWQnIDogJ0NvbWJpbmVkIHdwcycsIFwlbXNjb3Jlcyk7Ci0kYmFsYW5jZXIgPSBk dW1wX3Njb3JlYm9hcmQoJ0NvbWJpbmVkIHdlaWdodGVkIHdwcycsIFwlbXdzY29yZXMpIHVubGVz cyAkbXVsdGlfbW9kZTsKLQotVkVSSUZZOgotCi1teSAlcHJvYmxlbV93cms7Ci0KLWRpZSB1bmxl c3MgZGVmaW5lZCAkYmFsYW5jZXI7Ci0KLXNheSAiXG5CYWxhbmNlciBpcyAnJGJhbGFuY2VyJy4i Owotc2F5ICJJZGxlbmVzcyB0b2xlcmFuY2UgaXMgJGlkbGVfdG9sZXJhbmNlX3BjdCUuIjsKLQot aWYgKCRtdWx0aV9tb2RlKSB7Ci0JJHdfZGlyZWN0ID0gJy13ICcgLiBqb2luICcgLXcgJywgbWFw KCIkd3JrX3Jvb3QvJF8iLCBAd29ya2xvYWRzKTsKLQlAd29ya2xvYWRzID0gKCR3X2RpcmVjdCk7 Ci19Ci0KLWZvcmVhY2ggbXkgJHdyayAoQHdvcmtsb2FkcykgewotCW15IEBhcmdzID0gKCAiLW4g JG5vcCIgKTsKLQlteSAoJHIsICRlcnJvciwgJGMsICR3cHMsICRzd3BzKTsKLQlteSAkc2F0dXJh dGVkID0gMDsKLQlteSAkcmVzdWx0ID0gJ1Bhc3MnOwotCW15ICR2Y3MyID0gJGd0MiA/ICcxOjAn IDogJzI6MSc7Ci0JbXkgJXByb2JsZW07Ci0JbXkgJGVuZ2luZXM7Ci0KLQluZXh0IGlmIG5vdCBk ZWZpbmVkICR3X2RpcmVjdCBhbmQgbm90IGNhbl9iYWxhbmNlX3dvcmtsb2FkKCR3cmspOwotCi0J cHVzaCBAYXJncywgJGJhbGFuY2VyIHVubGVzcyAkYmFsYW5jZXIgZXEgJzxub25lPic7Ci0KLQlp ZiAoc2NhbGFyKGtleXMgJXJlc3VsdHMpKSB7Ci0JCSRyID0gJHJlc3VsdHN7JHdya30tPnskYmFs YW5jZXJ9IC8gJGJlc3RfYmFseyR3cmt9ICogMTAwLjA7Ci0JfSBlbHNlIHsKLQkJJHIgPSAnLS0t JzsKLQl9Ci0Jc2F5ICIgIFxuUHJvZmlsaW5nICckd3JrJyAoJHIlIG9mIGJlc3QpLi4uIjsKLQot CSgkciwgJGVycm9yKSA9IGNhbGlicmF0ZV93b3JrbG9hZCgkd3JrKTsKLQlzYXkgIiAgICAgICR7 Y2xpZW50X3RhcmdldF9zfXMgaXMgJHIgd29ya2xvYWRzLiAoZXJyb3I9JGVycm9yKSI7Ci0KLQko JGMsICR3cHMsICRzd3BzKSA9IGZpbmRfc2F0dXJhdGlvbl9wb2ludCgkd3JrLCAkciwgJHZlcmJv c2UsIEBhcmdzKTsKLQlzYXkgIiAgICAgIFNhdHVyYXRpb24gYXQgJGMgY2xpZW50cyAoJHdwcyB3 b3JrbG9hZHMvcykuIjsKLQlwdXNoIEBhcmdzLCAiLWMgJGMiOwotCi0JJGVuZ2luZXMgPSB0cmFj ZV93b3JrbG9hZCgkd3JrLCAkYmFsYW5jZXIsICRyLCAkYyk7Ci0KLQlmb3JlYWNoIG15ICRrZXkg KGtleXMgJXskZW5naW5lc30pIHsKLQkJbmV4dCBpZiAka2V5IGVxICdncHUnOwotCQkkc2F0dXJh dGVkID0gJHNhdHVyYXRlZCArIDEKLQkJCSAgICAgaWYgJGVuZ2luZXMtPnska2V5fSA8ICRpZGxl X3RvbGVyYW5jZV9wY3Q7Ci0JfQotCi0JaWYgKCRzYXR1cmF0ZWQgPT0gMCkgewotCQkjIE5vdCBh IHNpbmdsZSBzYXR1cmF0ZWQgZW5naW5lCi0JCSRyZXN1bHQgPSAnRkFJTCc7Ci0JfSBlbHNpZiAo bm90IGV4aXN0cyAkZW5naW5lcy0+eycyOjAnfSBvciBub3QgZXhpc3RzICRlbmdpbmVzLT57JHZj czJ9KSB7Ci0JCSMgVkNTMSBhbmQgVkNTMiBub3QgcHJlc2VudCBpbiBhIGJhbGFuY2luZyB3b3Jr bG9hZAotCQkkcmVzdWx0ID0gJ0ZBSUwnOwotCX0gZWxzaWYgKCRzYXR1cmF0ZWQgPT0gMSBhbmQK LQkJICgkZW5naW5lcy0+eycyOjAnfSA8ICRpZGxlX3RvbGVyYW5jZV9wY3Qgb3IKLQkJICAkZW5n aW5lcy0+eyR2Y3MyfSA8ICRpZGxlX3RvbGVyYW5jZV9wY3QpKSB7Ci0JCSMgT25seSBvbmUgVkNT IHNhdHVyYXRlZAotCQkkcmVzdWx0ID0gJ1dBUk4nOwotCX0KLQotCSRyZXN1bHQgPSAnV0FSTicg aWYgJGVuZ2luZXMtPnsnZ3B1J30gPiAkaWRsZV90b2xlcmFuY2VfcGN0OwotCi0JaWYgKCRyZXN1 bHQgbmUgJ1Bhc3MnKSB7Ci0JCSRwcm9ibGVteydjJ30gPSAkYzsKLQkJJHByb2JsZW17J3InfSA9 ICRyOwotCQkkcHJvYmxlbXsnc3RhdHMnfSA9ICRlbmdpbmVzOwotCQkkcHJvYmxlbV93cmt7JHdy a30gPSBcJXByb2JsZW07Ci0JfQotCi0JcHJpbnQgIiAgICAkcmVzdWx0IFsiOwotCXByaW50IG1h cCAiICRfOiAkZW5naW5lcy0+eyRffSUsIiwgc29ydCBrZXlzICV7JGVuZ2luZXN9OwotCXNheSAi IF0iOwotfQotCi1zYXkgIlxuUHJvYmxlbWF0aWMgd29ya2xvYWRzIHdlcmU6IiBpZiBzY2FsYXIo a2V5cyAlcHJvYmxlbV93cmspID4gMDsKLWZvcmVhY2ggbXkgJHdyayAoc29ydCBrZXlzICVwcm9i bGVtX3dyaykgewotCW15ICRwcm9ibGVtID0gJHByb2JsZW1fd3JreyR3cmt9OwotCi0JcHJpbnQg IiAgICR3cmsgLWMgJHByb2JsZW0tPnsnYyd9IC1yICRwcm9ibGVtLT57J3InfSBbIjsKLQlwcmlu dCBtYXAgIiAkXzogJHByb2JsZW0tPnsnc3RhdHMnfS0+eyRffSUsIiwKLQkgICAgICBzb3J0IGtl eXMgJXskcHJvYmxlbS0+eydzdGF0cyd9fTsKLQlzYXkgIiBdIjsKLX0KLS0gCjIuMjAuMQoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1h aWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==