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.3 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,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 BBF85C48BE0 for ; Thu, 20 Jun 2019 00:31:35 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (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 8754D208CB for ; Thu, 20 Jun 2019 00:31:35 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="UH7OpnJG" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8754D208CB Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hdkz1-000082-LC; Thu, 20 Jun 2019 00:31:19 +0000 Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hdkyz-00007p-R5 for xen-devel@lists.xenproject.org; Thu, 20 Jun 2019 00:31:17 +0000 X-Inumbo-ID: b6cf5637-92f2-11e9-8980-bc764e045a96 Received: from mail-io1-xd2f.google.com (unknown [2607:f8b0:4864:20::d2f]) by us1-rack-dfw2.inumbo.com (Halon) with ESMTPS id b6cf5637-92f2-11e9-8980-bc764e045a96; Thu, 20 Jun 2019 00:31:16 +0000 (UTC) Received: by mail-io1-xd2f.google.com with SMTP id k20so12996ios.10 for ; Wed, 19 Jun 2019 17:31:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=xQgHrIP1YOSfpHBq5LyzHdsL+ykX+RqTUSSWyEDnICM=; b=UH7OpnJGT3Y3uabVepgE4xoY68FiMZBgusyzFGOxqu8mnrV4l5DdESA6NLCrkN6hyr gwWLKPY84b4Y1xtPl47i9t6TTYCSBRfJm0uP7p8zHUAq/ZbittDueBQcHYeHaQ1EfYsM DmfkU6Ggfadv67myFQgxAxeTWqL87KtHIxPUAemFd0Uw8qEOGlgDLxl8Ewugu9wxr6al 7qzCAzf9Nj6MsUfzeLtf7wmwmYNivpA6iR3HgkGIutHmpI/A5zLuEkDos1sAZNuewE2b 5+ElEsDNo4yuZITHKOsOrwupRg0w32tI5I0V7QSP5FzGozhcaXqgFfwldybh8nT0Scyq j1+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=xQgHrIP1YOSfpHBq5LyzHdsL+ykX+RqTUSSWyEDnICM=; b=iFJEIpmN6LZgw9ustjFv/s37bqC0A9EitXF/8Khrjya3dD7c/MNSDNuMsYWJGoxwsd WyJjccdLl7imvLUz4tgukwAKU92iAq2tt9o8HtpEh8IrLWYyL0Ef0QtgPJU3Z3NWOZnT WWeCn5RRYe/EzcpJc90EiEY3ICJObysUnpo3nDp54hmyJbzwCAG4h6POtpyEk92Njo+F 8FNaPZ4jj++iC9xAyHSpZvib5QiE8HDvN6k0ID962Nh2oae1G05ARmWJJiwsQey4asr2 ffj7Yzsb22QLxFhAsqowaqiae7CofnsyC2f+Vvd8LfpcYY67/rQQGCCdpWVzqYa11mw/ loag== X-Gm-Message-State: APjAAAWlkd4/LjehXgarv192rSiVo/xuw8O7U2Eos6fF+oX+CrbUgDH9 AHO9bgKhKnCEBGlUsldv3EN4MR3sXf8= X-Google-Smtp-Source: APXvYqzdIJlESRkNRE7tZMHqjA9jAyFt7Y9gZdgEzher7Qr2Vu0ntfKEl0g+MXstLV7MU7ntqpKIsw== X-Received: by 2002:a6b:c886:: with SMTP id y128mr15383585iof.100.1560990674945; Wed, 19 Jun 2019 17:31:14 -0700 (PDT) Received: from desktop.ice.pyrology.org (static-50-53-74-115.bvtn.or.frontiernet.net. [50.53.74.115]) by smtp.gmail.com with ESMTPSA id e188sm22579016ioa.3.2019.06.19.17.31.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 19 Jun 2019 17:31:14 -0700 (PDT) From: Christopher Clark To: xen-devel@lists.xenproject.org Date: Wed, 19 Jun 2019 17:30:45 -0700 Message-Id: <20190620003053.21993-2-christopher.w.clark@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190620003053.21993-1-christopher.w.clark@gmail.com> References: <20190620003053.21993-1-christopher.w.clark@gmail.com> Subject: [Xen-devel] [RFC 1/9] x86/guest: code movement to separate Xen detection from guest functions X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Juergen Gross , Wei Liu , Andrew Cooper , Rich Persaud , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" TW92ZSBzb21lIGxvZ2ljIGZyb206IHhlbi9hcmNoL3g4Ni9ndWVzdC94ZW4uYwppbnRvIGEgbmV3 IGZpbGU6IHhlbi9hcmNoL3g4Ni9ndWVzdC94ZW4tZ3Vlc3QuYwoKeGVuLmMgdGhlbiBjb250YWlu cyB0aGUgZnVuY3Rpb25zIGZvciBiYXNpYyBYZW4gZGV0ZWN0aW9uIGFuZAp4ZW4tZ3Vlc3QuYyBp bXBsZW1lbnRzIHRoZSBpbnRlbmRlZCBiZWhhdmlvdXIgY2hhbmdlcyB3aGVuIFhlbiBpcyBydW5u aW5nCmFzIGEgZ3Vlc3QuCgpTaW5jZSBDT05GSUdfWEVOX0dVRVNUIG11c3QgY3VycmVudGx5IGJl IGRlZmluZWQgZm9yIGFueSBvZiB0aGlzIGNvZGUgdG8KYmUgaW5jbHVkZWQsIG1ha2luZyB4ZW4t Z3Vlc3QubyBjb25kaXRpb25hbCB1cG9uIGl0IGhlcmUgd29ya3MgY29ycmVjdGx5CmFuZCBhdm9p ZHMgZnVydGhlciBjaGFuZ2UgdG8gaXQgaW4gbGF0ZXIgcGF0Y2hlcyBpbiB0aGUgc2VyaWVzLgoK Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQuCgpTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhl ciBDbGFyayA8Y2hyaXN0b3BoZXIuY2xhcmtAc3RhcmxhYi5pbz4KLS0tCiB4ZW4vYXJjaC94ODYv Z3Vlc3QvTWFrZWZpbGUgICAgfCAgIDEgKwogeGVuL2FyY2gveDg2L2d1ZXN0L3hlbi1ndWVzdC5j IHwgMzAxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogeGVuL2FyY2gveDg2L2d1 ZXN0L3hlbi5jICAgICAgIHwgMjU0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDMgZmls ZXMgY2hhbmdlZCwgMzAyIGluc2VydGlvbnMoKyksIDI1NCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBt b2RlIDEwMDY0NCB4ZW4vYXJjaC94ODYvZ3Vlc3QveGVuLWd1ZXN0LmMKCmRpZmYgLS1naXQgYS94 ZW4vYXJjaC94ODYvZ3Vlc3QvTWFrZWZpbGUgYi94ZW4vYXJjaC94ODYvZ3Vlc3QvTWFrZWZpbGUK aW5kZXggMjZmYjRiMTAwNy4uNmRkYWEzNzQ4ZiAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L2d1 ZXN0L01ha2VmaWxlCisrKyBiL3hlbi9hcmNoL3g4Ni9ndWVzdC9NYWtlZmlsZQpAQCAtMSw0ICsx LDUgQEAKIG9iai15ICs9IGh5cGVyY2FsbF9wYWdlLm8KIG9iai15ICs9IHhlbi5vCitvYmotJChD T05GSUdfWEVOX0dVRVNUKSArPSB4ZW4tZ3Vlc3QubwogCiBvYmotYmluLSQoQ09ORklHX1BWSF9H VUVTVCkgKz0gcHZoLWJvb3QuaW5pdC5vCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvZ3Vlc3Qv eGVuLWd1ZXN0LmMgYi94ZW4vYXJjaC94ODYvZ3Vlc3QveGVuLWd1ZXN0LmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNjU1OTZhYjFiMQotLS0gL2Rldi9udWxsCisrKyBi L3hlbi9hcmNoL3g4Ni9ndWVzdC94ZW4tZ3Vlc3QuYwpAQCAtMCwwICsxLDMwMSBAQAorLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKgorICogYXJjaC94ODYvZ3Vlc3QveGVuLWd1ZXN0LmMKKyAqCisgKiBT dXBwb3J0IGZvciBydW5uaW5nIGEgc2luZ2xlIFZNIHdpdGggWGVuIGFzIGEgZ3Vlc3QuCisgKgor ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgSWYgbm90LCBzZWUgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNyBD aXRyaXggU3lzdGVtcyBMdGQuCisgKi8KKyNpbmNsdWRlIDx4ZW4vZXZlbnQuaD4KKyNpbmNsdWRl IDx4ZW4vaW5pdC5oPgorI2luY2x1ZGUgPHhlbi9tbS5oPgorI2luY2x1ZGUgPHhlbi9wZm4uaD4K KyNpbmNsdWRlIDx4ZW4vcmFuZ2VzZXQuaD4KKyNpbmNsdWRlIDx4ZW4vdHlwZXMuaD4KKyNpbmNs dWRlIDx4ZW4vcHZfY29uc29sZS5oPgorCisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKyNpbmNsdWRl IDxhc20vZTgyMC5oPgorI2luY2x1ZGUgPGFzbS9ndWVzdC5oPgorI2luY2x1ZGUgPGFzbS9tc3Iu aD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKKyNpbmNsdWRlIDxwdWJsaWMvYXJjaC14 ODYvY3B1aWQuaD4KKyNpbmNsdWRlIDxwdWJsaWMvaHZtL3BhcmFtcy5oPgorCitib29sIF9fcmVh ZF9tb3N0bHkgeGVuX2d1ZXN0OworCitzdGF0aWMgc3RydWN0IHJhbmdlc2V0ICptZW07CisKK0RF RklORV9QRVJfQ1BVKHVuc2lnbmVkIGludCwgdmNwdV9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgdmNw dV9pbmZvICp2Y3B1X2luZm87CitzdGF0aWMgdW5zaWduZWQgbG9uZyB2Y3B1X2luZm9fbWFwcGVk W0JJVFNfVE9fTE9OR1MoTlJfQ1BVUyldOworREVGSU5FX1BFUl9DUFUoc3RydWN0IHZjcHVfaW5m byAqLCB2Y3B1X2luZm8pOworCitzdGF0aWMgdm9pZCBtYXBfc2hhcmVkX2luZm8odm9pZCkKK3sK KyAgICBtZm5fdCBtZm47CisgICAgc3RydWN0IHhlbl9hZGRfdG9fcGh5c21hcCB4YXRwID0gewor ICAgICAgICAuZG9taWQgPSBET01JRF9TRUxGLAorICAgICAgICAuc3BhY2UgPSBYRU5NQVBTUEFD RV9zaGFyZWRfaW5mbywKKyAgICB9OworICAgIHVuc2lnbmVkIGludCBpOworICAgIHVuc2lnbmVk IGxvbmcgcmM7CisKKyAgICBpZiAoIGh5cGVydmlzb3JfYWxsb2NfdW51c2VkX3BhZ2UoJm1mbikg KQorICAgICAgICBwYW5pYygidW5hYmxlIHRvIHJlc2VydmUgc2hhcmVkIGluZm8gbWVtb3J5IHBh Z2VcbiIpOworCisgICAgeGF0cC5ncGZuID0gbWZuX3gobWZuKTsKKyAgICByYyA9IHhlbl9oeXBl cmNhbGxfbWVtb3J5X29wKFhFTk1FTV9hZGRfdG9fcGh5c21hcCwgJnhhdHApOworICAgIGlmICgg cmMgKQorICAgICAgICBwYW5pYygiZmFpbGVkIHRvIG1hcCBzaGFyZWRfaW5mbyBwYWdlOiAlbGRc biIsIHJjKTsKKworICAgIHNldF9maXhtYXAoRklYX1hFTl9TSEFSRURfSU5GTywgbWZuX3gobWZu KSA8PCBQQUdFX1NISUZUKTsKKworICAgIC8qIE1hc2sgYWxsIHVwY2FsbHMgKi8KKyAgICBmb3Ig KCBpID0gMDsgaSA8IEFSUkFZX1NJWkUoWEVOX3NoYXJlZF9pbmZvLT5ldnRjaG5fbWFzayk7IGkr KyApCisgICAgICAgIHdyaXRlX2F0b21pYygmWEVOX3NoYXJlZF9pbmZvLT5ldnRjaG5fbWFza1tp XSwgfjB1bCk7Cit9CisKK3N0YXRpYyBpbnQgbWFwX3ZjcHVpbmZvKHZvaWQpCit7CisgICAgdW5z aWduZWQgaW50IHZjcHUgPSB0aGlzX2NwdSh2Y3B1X2lkKTsKKyAgICBzdHJ1Y3QgdmNwdV9yZWdp c3Rlcl92Y3B1X2luZm8gaW5mbzsKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoICF2Y3B1X2luZm8g KQorICAgIHsKKyAgICAgICAgdGhpc19jcHUodmNwdV9pbmZvKSA9ICZYRU5fc2hhcmVkX2luZm8t PnZjcHVfaW5mb1t2Y3B1XTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKCB0 ZXN0X2JpdCh2Y3B1LCB2Y3B1X2luZm9fbWFwcGVkKSApCisgICAgeworICAgICAgICB0aGlzX2Nw dSh2Y3B1X2luZm8pID0gJnZjcHVfaW5mb1t2Y3B1XTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg fQorCisgICAgaW5mby5tZm4gPSB2aXJ0X3RvX21mbigmdmNwdV9pbmZvW3ZjcHVdKTsKKyAgICBp bmZvLm9mZnNldCA9ICh1bnNpZ25lZCBsb25nKSZ2Y3B1X2luZm9bdmNwdV0gJiB+UEFHRV9NQVNL OworICAgIHJjID0geGVuX2h5cGVyY2FsbF92Y3B1X29wKFZDUFVPUF9yZWdpc3Rlcl92Y3B1X2lu Zm8sIHZjcHUsICZpbmZvKTsKKyAgICBpZiAoIHJjICkKKyAgICB7CisgICAgICAgIEJVR19PTih2 Y3B1ID49IFhFTl9MRUdBQ1lfTUFYX1ZDUFVTKTsKKyAgICAgICAgdGhpc19jcHUodmNwdV9pbmZv KSA9ICZYRU5fc2hhcmVkX2luZm8tPnZjcHVfaW5mb1t2Y3B1XTsKKyAgICB9CisgICAgZWxzZQor ICAgIHsKKyAgICAgICAgdGhpc19jcHUodmNwdV9pbmZvKSA9ICZ2Y3B1X2luZm9bdmNwdV07Cisg ICAgICAgIHNldF9iaXQodmNwdSwgdmNwdV9pbmZvX21hcHBlZCk7CisgICAgfQorCisgICAgcmV0 dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBzZXRfdmNwdV9pZCh2b2lkKQoreworICAgIHVpbnQz Ml90IGNwdWlkX2Jhc2UsIGVheCwgZWJ4LCBlY3gsIGVkeDsKKworICAgIGNwdWlkX2Jhc2UgPSBo eXBlcnZpc29yX2NwdWlkX2Jhc2UoKTsKKworICAgIEFTU0VSVChjcHVpZF9iYXNlKTsKKworICAg IC8qIEZldGNoIHZjcHUgaWQgZnJvbSBjcHVpZC4gKi8KKyAgICBjcHVpZChjcHVpZF9iYXNlICsg NCwgJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7CisgICAgaWYgKCBlYXggJiBYRU5fSFZNX0NQVUlE X1ZDUFVfSURfUFJFU0VOVCApCisgICAgICAgIHRoaXNfY3B1KHZjcHVfaWQpID0gZWJ4OworICAg IGVsc2UKKyAgICAgICAgdGhpc19jcHUodmNwdV9pZCkgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Cit9 CisKK3N0YXRpYyB2b2lkIF9faW5pdCBpbml0X21lbW1hcCh2b2lkKQoreworICAgIHVuc2lnbmVk IGludCBpOworCisgICAgbWVtID0gcmFuZ2VzZXRfbmV3KE5VTEwsICJob3N0IG1lbW9yeSBtYXAi LCAwKTsKKyAgICBpZiAoICFtZW0gKQorICAgICAgICBwYW5pYygiZmFpbGVkIHRvIGFsbG9jYXRl IFBGTiB1c2FnZSByYW5nZXNldFxuIik7CisKKyAgICAvKgorICAgICAqIE1hcmsgdXAgdG8gdGhl IGxhc3QgbWVtb3J5IHBhZ2UgKG9yIDRHaUIpIGFzIFJBTS4gVGhpcyBpcyBkb25lIGJlY2F1c2UK KyAgICAgKiBYZW4gZG9lc24ndCBrbm93IHRoZSBwb3NpdGlvbiBvZiBwb3NzaWJsZSBNTUlPIGhv bGVzLCBzbyBhdCBsZWFzdCB0cnkgdG8KKyAgICAgKiBhdm9pZCB0aGUga25vdyBNTUlPIGhvbGUg YmVsb3cgNEdpQi4gTm90ZSB0aGF0IHRoaXMgaXMgc3ViamVjdCB0byBmdXR1cmUKKyAgICAgKiBk aXNjdXNzaW9uIGFuZCBpbXByb3ZlbWVudHMuCisgICAgICovCisgICAgaWYgKCByYW5nZXNldF9h ZGRfcmFuZ2UobWVtLCAwLCBtYXhfdCh1bnNpZ25lZCBsb25nLCBtYXhfcGFnZSAtIDEsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQRk5fRE9XTihHQig0KSAtIDEp KSkgKQorICAgICAgICBwYW5pYygidW5hYmxlIHRvIGFkZCBSQU0gdG8gaW4tdXNlIFBGTiByYW5n ZXNldFxuIik7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IGU4MjAubnJfbWFwOyBpKysgKQorICAg IHsKKyAgICAgICAgc3RydWN0IGU4MjBlbnRyeSAqZSA9ICZlODIwLm1hcFtpXTsKKworICAgICAg ICBpZiAoIHJhbmdlc2V0X2FkZF9yYW5nZShtZW0sIFBGTl9ET1dOKGUtPmFkZHIpLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQRk5fVVAoZS0+YWRkciArIGUtPnNpemUgLSAxKSkg KQorICAgICAgICAgICAgcGFuaWMoInVuYWJsZSB0byBhZGQgcmFuZ2UgWyUjbHgsICUjbHhdIHRv IGluLXVzZSBQRk4gcmFuZ2VzZXRcbiIsCisgICAgICAgICAgICAgICAgICBQRk5fRE9XTihlLT5h ZGRyKSwgUEZOX1VQKGUtPmFkZHIgKyBlLT5zaXplIC0gMSkpOworICAgIH0KK30KKworc3RhdGlj IHZvaWQgeGVuX2V2dGNobl91cGNhbGwoc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCit7Cisg ICAgc3RydWN0IHZjcHVfaW5mbyAqdmNwdV9pbmZvID0gdGhpc19jcHUodmNwdV9pbmZvKTsKKyAg ICB1bnNpZ25lZCBsb25nIHBlbmRpbmc7CisKKyAgICB2Y3B1X2luZm8tPmV2dGNobl91cGNhbGxf cGVuZGluZyA9IDA7CisgICAgcGVuZGluZyA9IHhjaGcoJnZjcHVfaW5mby0+ZXZ0Y2huX3BlbmRp bmdfc2VsLCAwKTsKKworICAgIHdoaWxlICggcGVuZGluZyApCisgICAgeworICAgICAgICB1bnNp Z25lZCBpbnQgbDEgPSBmaW5kX2ZpcnN0X3NldF9iaXQocGVuZGluZyk7CisgICAgICAgIHVuc2ln bmVkIGxvbmcgZXZ0Y2huID0geGNoZygmWEVOX3NoYXJlZF9pbmZvLT5ldnRjaG5fcGVuZGluZ1ts MV0sIDApOworCisgICAgICAgIF9fY2xlYXJfYml0KGwxLCAmcGVuZGluZyk7CisgICAgICAgIGV2 dGNobiAmPSB+WEVOX3NoYXJlZF9pbmZvLT5ldnRjaG5fbWFza1tsMV07CisgICAgICAgIHdoaWxl ICggZXZ0Y2huICkKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IHBvcnQgPSBm aW5kX2ZpcnN0X3NldF9iaXQoZXZ0Y2huKTsKKworICAgICAgICAgICAgX19jbGVhcl9iaXQocG9y dCwgJmV2dGNobik7CisgICAgICAgICAgICBwb3J0ICs9IGwxICogQklUU19QRVJfTE9ORzsKKwor ICAgICAgICAgICAgaWYgKCBwdl9jb25zb2xlICYmIHBvcnQgPT0gcHZfY29uc29sZV9ldnRjaG4o KSApCisgICAgICAgICAgICAgICAgcHZfY29uc29sZV9yeChyZWdzKTsKKyAgICAgICAgICAgIGVs c2UgaWYgKCBwdl9zaGltICkKKyAgICAgICAgICAgICAgICBwdl9zaGltX2luamVjdF9ldnRjaG4o cG9ydCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhY2tfQVBJQ19pcnEoKTsKK30KKworc3Rh dGljIHZvaWQgaW5pdF9ldnRjaG4odm9pZCkKK3sKKyAgICBzdGF0aWMgdWludDhfdCBldnRjaG5f dXBjYWxsX3ZlY3RvcjsKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoICFldnRjaG5fdXBjYWxsX3Zl Y3RvciApCisgICAgICAgIGFsbG9jX2RpcmVjdF9hcGljX3ZlY3RvcigmZXZ0Y2huX3VwY2FsbF92 ZWN0b3IsIHhlbl9ldnRjaG5fdXBjYWxsKTsKKworICAgIEFTU0VSVChldnRjaG5fdXBjYWxsX3Zl Y3Rvcik7CisKKyAgICByYyA9IHhlbl9oeXBlcmNhbGxfc2V0X2V2dGNobl91cGNhbGxfdmVjdG9y KHRoaXNfY3B1KHZjcHVfaWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZXZ0Y2huX3VwY2FsbF92ZWN0b3IpOworICAgIGlmICggcmMgKQorICAgICAg ICBwYW5pYygiVW5hYmxlIHRvIHNldCBldnRjaG4gdXBjYWxsIHZlY3RvcjogJWRcbiIsIHJjKTsK KworICAgIC8qIFRyaWNrIHRvb2xzdGFjayB0byB0aGluayB3ZSBhcmUgZW5saWdodGVuZWQgKi8K KyAgICB7CisgICAgICAgIHN0cnVjdCB4ZW5faHZtX3BhcmFtIGEgPSB7CisgICAgICAgICAgICAu ZG9taWQgPSBET01JRF9TRUxGLAorICAgICAgICAgICAgLmluZGV4ID0gSFZNX1BBUkFNX0NBTExC QUNLX0lSUSwKKyAgICAgICAgICAgIC52YWx1ZSA9IDEsCisgICAgICAgIH07CisKKyAgICAgICAg QlVHX09OKHhlbl9oeXBlcmNhbGxfaHZtX29wKEhWTU9QX3NldF9wYXJhbSwgJmEpKTsKKyAgICB9 Cit9CisKK3ZvaWQgX19pbml0IGh5cGVydmlzb3Jfc2V0dXAodm9pZCkKK3sKKyAgICBpbml0X21l bW1hcCgpOworCisgICAgbWFwX3NoYXJlZF9pbmZvKCk7CisKKyAgICBzZXRfdmNwdV9pZCgpOwor ICAgIHZjcHVfaW5mbyA9IHh6YWxsb2NfYXJyYXkoc3RydWN0IHZjcHVfaW5mbywgbnJfY3B1X2lk cyk7CisgICAgaWYgKCBtYXBfdmNwdWluZm8oKSApCisgICAgeworICAgICAgICB4ZnJlZSh2Y3B1 X2luZm8pOworICAgICAgICB2Y3B1X2luZm8gPSBOVUxMOworICAgIH0KKyAgICBpZiAoICF2Y3B1 X2luZm8gJiYgbnJfY3B1X2lkcyA+IFhFTl9MRUdBQ1lfTUFYX1ZDUFVTICkKKyAgICB7CisgICAg ICAgIHVuc2lnbmVkIGludCBpOworCisgICAgICAgIGZvciAoIGkgPSBYRU5fTEVHQUNZX01BWF9W Q1BVUzsgaSA8IG5yX2NwdV9pZHM7IGkrKyApCisgICAgICAgICAgICBfX2NwdW1hc2tfY2xlYXJf Y3B1KGksICZjcHVfcHJlc2VudF9tYXApOworICAgICAgICBucl9jcHVfaWRzID0gWEVOX0xFR0FD WV9NQVhfVkNQVVM7CisgICAgICAgIHByaW50ayhYRU5MT0dfV0FSTklORworICAgICAgICAgICAg ICAgInVuYWJsZSB0byBtYXAgdkNQVSBpbmZvLCBsaW1pdGluZyB2Q1BVcyB0bzogJXVcbiIsCisg ICAgICAgICAgICAgICBYRU5fTEVHQUNZX01BWF9WQ1BVUyk7CisgICAgfQorCisgICAgaW5pdF9l dnRjaG4oKTsKK30KKwordm9pZCBoeXBlcnZpc29yX2FwX3NldHVwKHZvaWQpCit7CisgICAgc2V0 X3ZjcHVfaWQoKTsKKyAgICBtYXBfdmNwdWluZm8oKTsKKyAgICBpbml0X2V2dGNobigpOworfQor CitpbnQgaHlwZXJ2aXNvcl9hbGxvY191bnVzZWRfcGFnZShtZm5fdCAqbWZuKQoreworICAgIHVu c2lnbmVkIGxvbmcgbTsKKyAgICBpbnQgcmM7CisKKyAgICByYyA9IHJhbmdlc2V0X2NsYWltX3Jh bmdlKG1lbSwgMSwgJm0pOworICAgIGlmICggIXJjICkKKyAgICAgICAgKm1mbiA9IF9tZm4obSk7 CisKKyAgICByZXR1cm4gcmM7Cit9CisKK2ludCBoeXBlcnZpc29yX2ZyZWVfdW51c2VkX3BhZ2Uo bWZuX3QgbWZuKQoreworICAgIHJldHVybiByYW5nZXNldF9yZW1vdmVfcmFuZ2UobWVtLCBtZm5f eChtZm4pLCBtZm5feChtZm4pKTsKK30KKworc3RhdGljIHZvaWQgYXBfcmVzdW1lKHZvaWQgKnVu dXNlZCkKK3sKKyAgICBtYXBfdmNwdWluZm8oKTsKKyAgICBpbml0X2V2dGNobigpOworfQorCit2 b2lkIGh5cGVydmlzb3JfcmVzdW1lKHZvaWQpCit7CisgICAgLyogUmVzZXQgc2hhcmVkIGluZm8g cGFnZS4gKi8KKyAgICBtYXBfc2hhcmVkX2luZm8oKTsKKworICAgIC8qCisgICAgICogUmVzZXQg dmNwdV9pbmZvLiBKdXN0IGNsZWFuIHRoZSBtYXBwZWQgYml0bWFwIGFuZCB0cnkgdG8gbWFwIHRo ZSB2Y3B1CisgICAgICogYXJlYSBhZ2Fpbi4gT24gZmFpbHVyZSB0byBtYXAgKHdoZW4gaXQgd2Fz IHByZXZpb3VzbHkgbWFwcGVkKSBwYW5pYworICAgICAqIHNpbmNlIGl0J3MgaW1wb3NzaWJsZSB0 byBzYWZlbHkgc2h1dCBkb3duIHJ1bm5pbmcgZ3Vlc3QgdkNQVXMgaW4gb3JkZXIKKyAgICAgKiB0 byBtZWV0IHRoZSBuZXcgWEVOX0xFR0FDWV9NQVhfVkNQVVMgcmVxdWlyZW1lbnQuCisgICAgICov CisgICAgYml0bWFwX3plcm8odmNwdV9pbmZvX21hcHBlZCwgTlJfQ1BVUyk7CisgICAgaWYgKCBt YXBfdmNwdWluZm8oKSAmJiBucl9jcHVfaWRzID4gWEVOX0xFR0FDWV9NQVhfVkNQVVMgKQorICAg ICAgICBwYW5pYygidW5hYmxlIHRvIHJlbWFwIHZDUFUgaW5mbyBhbmQgdkNQVXMgPiBsZWdhY3kg bGltaXRcbiIpOworCisgICAgLyogU2V0dXAgZXZlbnQgY2hhbm5lbCB1cGNhbGwgdmVjdG9yLiAq LworICAgIGluaXRfZXZ0Y2huKCk7CisgICAgc21wX2NhbGxfZnVuY3Rpb24oYXBfcmVzdW1lLCBO VUxMLCAxKTsKKworICAgIGlmICggcHZfY29uc29sZSApCisgICAgICAgIHB2X2NvbnNvbGVfaW5p dCgpOworfQorCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTogQworICogYy1maWxl LXN0eWxlOiAiQlNEIgorICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIHRhYi13aWR0aDogNAorICog aW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL3hlbi9hcmNo L3g4Ni9ndWVzdC94ZW4uYyBiL3hlbi9hcmNoL3g4Ni9ndWVzdC94ZW4uYwppbmRleCA3YjdhNWJh ZGFiLi45MGQ0NjRiZGJkIDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvZ3Vlc3QveGVuLmMKKysr IGIveGVuL2FyY2gveDg2L2d1ZXN0L3hlbi5jCkBAIC0yMiw5ICsyMiw3IEBACiAjaW5jbHVkZSA8 eGVuL2luaXQuaD4KICNpbmNsdWRlIDx4ZW4vbW0uaD4KICNpbmNsdWRlIDx4ZW4vcGZuLmg+Ci0j aW5jbHVkZSA8eGVuL3Jhbmdlc2V0Lmg+CiAjaW5jbHVkZSA8eGVuL3R5cGVzLmg+Ci0jaW5jbHVk ZSA8eGVuL3B2X2NvbnNvbGUuaD4KIAogI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAjaW5jbHVkZSA8 YXNtL2U4MjAuaD4KQEAgLTM1LDE3ICszMyw4IEBACiAjaW5jbHVkZSA8cHVibGljL2FyY2gteDg2 L2NwdWlkLmg+CiAjaW5jbHVkZSA8cHVibGljL2h2bS9wYXJhbXMuaD4KIAotYm9vbCBfX3JlYWRf bW9zdGx5IHhlbl9ndWVzdDsKLQogc3RhdGljIF9fcmVhZF9tb3N0bHkgdWludDMyX3QgeGVuX2Nw dWlkX2Jhc2U7CiBleHRlcm4gY2hhciBoeXBlcmNhbGxfcGFnZVtdOwotc3RhdGljIHN0cnVjdCBy YW5nZXNldCAqbWVtOwotCi1ERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBpbnQsIHZjcHVfaWQpOwot Ci1zdGF0aWMgc3RydWN0IHZjcHVfaW5mbyAqdmNwdV9pbmZvOwotc3RhdGljIHVuc2lnbmVkIGxv bmcgdmNwdV9pbmZvX21hcHBlZFtCSVRTX1RPX0xPTkdTKE5SX0NQVVMpXTsKLURFRklORV9QRVJf Q1BVKHN0cnVjdCB2Y3B1X2luZm8gKiwgdmNwdV9pbmZvKTsKIAogc3RhdGljIHZvaWQgX19pbml0 IGZpbmRfeGVuX2xlYXZlcyh2b2lkKQogewpAQCAtODcsMjU0ICs3NiwxMSBAQCB2b2lkIF9faW5p dCBwcm9iZV9oeXBlcnZpc29yKHZvaWQpCiAgICAgeGVuX2d1ZXN0ID0gdHJ1ZTsKIH0KIAotc3Rh dGljIHZvaWQgbWFwX3NoYXJlZF9pbmZvKHZvaWQpCi17Ci0gICAgbWZuX3QgbWZuOwotICAgIHN0 cnVjdCB4ZW5fYWRkX3RvX3BoeXNtYXAgeGF0cCA9IHsKLSAgICAgICAgLmRvbWlkID0gRE9NSURf U0VMRiwKLSAgICAgICAgLnNwYWNlID0gWEVOTUFQU1BBQ0Vfc2hhcmVkX2luZm8sCi0gICAgfTsK LSAgICB1bnNpZ25lZCBpbnQgaTsKLSAgICB1bnNpZ25lZCBsb25nIHJjOwotCi0gICAgaWYgKCBo eXBlcnZpc29yX2FsbG9jX3VudXNlZF9wYWdlKCZtZm4pICkKLSAgICAgICAgcGFuaWMoInVuYWJs ZSB0byByZXNlcnZlIHNoYXJlZCBpbmZvIG1lbW9yeSBwYWdlXG4iKTsKLQotICAgIHhhdHAuZ3Bm biA9IG1mbl94KG1mbik7Ci0gICAgcmMgPSB4ZW5faHlwZXJjYWxsX21lbW9yeV9vcChYRU5NRU1f YWRkX3RvX3BoeXNtYXAsICZ4YXRwKTsKLSAgICBpZiAoIHJjICkKLSAgICAgICAgcGFuaWMoImZh aWxlZCB0byBtYXAgc2hhcmVkX2luZm8gcGFnZTogJWxkXG4iLCByYyk7Ci0KLSAgICBzZXRfZml4 bWFwKEZJWF9YRU5fU0hBUkVEX0lORk8sIG1mbl94KG1mbikgPDwgUEFHRV9TSElGVCk7Ci0KLSAg ICAvKiBNYXNrIGFsbCB1cGNhbGxzICovCi0gICAgZm9yICggaSA9IDA7IGkgPCBBUlJBWV9TSVpF KFhFTl9zaGFyZWRfaW5mby0+ZXZ0Y2huX21hc2spOyBpKysgKQotICAgICAgICB3cml0ZV9hdG9t aWMoJlhFTl9zaGFyZWRfaW5mby0+ZXZ0Y2huX21hc2tbaV0sIH4wdWwpOwotfQotCi1zdGF0aWMg aW50IG1hcF92Y3B1aW5mbyh2b2lkKQotewotICAgIHVuc2lnbmVkIGludCB2Y3B1ID0gdGhpc19j cHUodmNwdV9pZCk7Ci0gICAgc3RydWN0IHZjcHVfcmVnaXN0ZXJfdmNwdV9pbmZvIGluZm87Ci0g ICAgaW50IHJjOwotCi0gICAgaWYgKCAhdmNwdV9pbmZvICkKLSAgICB7Ci0gICAgICAgIHRoaXNf Y3B1KHZjcHVfaW5mbykgPSAmWEVOX3NoYXJlZF9pbmZvLT52Y3B1X2luZm9bdmNwdV07Ci0gICAg ICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGlmICggdGVzdF9iaXQodmNwdSwgdmNwdV9pbmZv X21hcHBlZCkgKQotICAgIHsKLSAgICAgICAgdGhpc19jcHUodmNwdV9pbmZvKSA9ICZ2Y3B1X2lu Zm9bdmNwdV07Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGluZm8ubWZuID0gdmly dF90b19tZm4oJnZjcHVfaW5mb1t2Y3B1XSk7Ci0gICAgaW5mby5vZmZzZXQgPSAodW5zaWduZWQg bG9uZykmdmNwdV9pbmZvW3ZjcHVdICYgflBBR0VfTUFTSzsKLSAgICByYyA9IHhlbl9oeXBlcmNh bGxfdmNwdV9vcChWQ1BVT1BfcmVnaXN0ZXJfdmNwdV9pbmZvLCB2Y3B1LCAmaW5mbyk7Ci0gICAg aWYgKCByYyApCi0gICAgewotICAgICAgICBCVUdfT04odmNwdSA+PSBYRU5fTEVHQUNZX01BWF9W Q1BVUyk7Ci0gICAgICAgIHRoaXNfY3B1KHZjcHVfaW5mbykgPSAmWEVOX3NoYXJlZF9pbmZvLT52 Y3B1X2luZm9bdmNwdV07Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHRoaXNfY3B1 KHZjcHVfaW5mbykgPSAmdmNwdV9pbmZvW3ZjcHVdOwotICAgICAgICBzZXRfYml0KHZjcHUsIHZj cHVfaW5mb19tYXBwZWQpOwotICAgIH0KLQotICAgIHJldHVybiByYzsKLX0KLQotc3RhdGljIHZv aWQgc2V0X3ZjcHVfaWQodm9pZCkKLXsKLSAgICB1aW50MzJfdCBlYXgsIGVieCwgZWN4LCBlZHg7 Ci0KLSAgICBBU1NFUlQoeGVuX2NwdWlkX2Jhc2UpOwotCi0gICAgLyogRmV0Y2ggdmNwdSBpZCBm cm9tIGNwdWlkLiAqLwotICAgIGNwdWlkKHhlbl9jcHVpZF9iYXNlICsgNCwgJmVheCwgJmVieCwg JmVjeCwgJmVkeCk7Ci0gICAgaWYgKCBlYXggJiBYRU5fSFZNX0NQVUlEX1ZDUFVfSURfUFJFU0VO VCApCi0gICAgICAgIHRoaXNfY3B1KHZjcHVfaWQpID0gZWJ4OwotICAgIGVsc2UKLSAgICAgICAg dGhpc19jcHUodmNwdV9pZCkgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci19Ci0KLXN0YXRpYyB2b2lk IF9faW5pdCBpbml0X21lbW1hcCh2b2lkKQotewotICAgIHVuc2lnbmVkIGludCBpOwotCi0gICAg bWVtID0gcmFuZ2VzZXRfbmV3KE5VTEwsICJob3N0IG1lbW9yeSBtYXAiLCAwKTsKLSAgICBpZiAo ICFtZW0gKQotICAgICAgICBwYW5pYygiZmFpbGVkIHRvIGFsbG9jYXRlIFBGTiB1c2FnZSByYW5n ZXNldFxuIik7Ci0KLSAgICAvKgotICAgICAqIE1hcmsgdXAgdG8gdGhlIGxhc3QgbWVtb3J5IHBh Z2UgKG9yIDRHaUIpIGFzIFJBTS4gVGhpcyBpcyBkb25lIGJlY2F1c2UKLSAgICAgKiBYZW4gZG9l c24ndCBrbm93IHRoZSBwb3NpdGlvbiBvZiBwb3NzaWJsZSBNTUlPIGhvbGVzLCBzbyBhdCBsZWFz dCB0cnkgdG8KLSAgICAgKiBhdm9pZCB0aGUga25vdyBNTUlPIGhvbGUgYmVsb3cgNEdpQi4gTm90 ZSB0aGF0IHRoaXMgaXMgc3ViamVjdCB0byBmdXR1cmUKLSAgICAgKiBkaXNjdXNzaW9uIGFuZCBp bXByb3ZlbWVudHMuCi0gICAgICovCi0gICAgaWYgKCByYW5nZXNldF9hZGRfcmFuZ2UobWVtLCAw LCBtYXhfdCh1bnNpZ25lZCBsb25nLCBtYXhfcGFnZSAtIDEsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQRk5fRE9XTihHQig0KSAtIDEpKSkgKQotICAgICAgICBw YW5pYygidW5hYmxlIHRvIGFkZCBSQU0gdG8gaW4tdXNlIFBGTiByYW5nZXNldFxuIik7Ci0KLSAg ICBmb3IgKCBpID0gMDsgaSA8IGU4MjAubnJfbWFwOyBpKysgKQotICAgIHsKLSAgICAgICAgc3Ry dWN0IGU4MjBlbnRyeSAqZSA9ICZlODIwLm1hcFtpXTsKLQotICAgICAgICBpZiAoIHJhbmdlc2V0 X2FkZF9yYW5nZShtZW0sIFBGTl9ET1dOKGUtPmFkZHIpLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQRk5fVVAoZS0+YWRkciArIGUtPnNpemUgLSAxKSkgKQotICAgICAgICAgICAg cGFuaWMoInVuYWJsZSB0byBhZGQgcmFuZ2UgWyUjbHgsICUjbHhdIHRvIGluLXVzZSBQRk4gcmFu Z2VzZXRcbiIsCi0gICAgICAgICAgICAgICAgICBQRk5fRE9XTihlLT5hZGRyKSwgUEZOX1VQKGUt PmFkZHIgKyBlLT5zaXplIC0gMSkpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgeGVuX2V2dGNo bl91cGNhbGwoc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCi17Ci0gICAgc3RydWN0IHZjcHVf aW5mbyAqdmNwdV9pbmZvID0gdGhpc19jcHUodmNwdV9pbmZvKTsKLSAgICB1bnNpZ25lZCBsb25n IHBlbmRpbmc7Ci0KLSAgICB2Y3B1X2luZm8tPmV2dGNobl91cGNhbGxfcGVuZGluZyA9IDA7Ci0g ICAgcGVuZGluZyA9IHhjaGcoJnZjcHVfaW5mby0+ZXZ0Y2huX3BlbmRpbmdfc2VsLCAwKTsKLQot ICAgIHdoaWxlICggcGVuZGluZyApCi0gICAgewotICAgICAgICB1bnNpZ25lZCBpbnQgbDEgPSBm aW5kX2ZpcnN0X3NldF9iaXQocGVuZGluZyk7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgZXZ0Y2hu ID0geGNoZygmWEVOX3NoYXJlZF9pbmZvLT5ldnRjaG5fcGVuZGluZ1tsMV0sIDApOwotCi0gICAg ICAgIF9fY2xlYXJfYml0KGwxLCAmcGVuZGluZyk7Ci0gICAgICAgIGV2dGNobiAmPSB+WEVOX3No YXJlZF9pbmZvLT5ldnRjaG5fbWFza1tsMV07Ci0gICAgICAgIHdoaWxlICggZXZ0Y2huICkKLSAg ICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHBvcnQgPSBmaW5kX2ZpcnN0X3NldF9i aXQoZXZ0Y2huKTsKLQotICAgICAgICAgICAgX19jbGVhcl9iaXQocG9ydCwgJmV2dGNobik7Ci0g ICAgICAgICAgICBwb3J0ICs9IGwxICogQklUU19QRVJfTE9ORzsKLQotICAgICAgICAgICAgaWYg KCBwdl9jb25zb2xlICYmIHBvcnQgPT0gcHZfY29uc29sZV9ldnRjaG4oKSApCi0gICAgICAgICAg ICAgICAgcHZfY29uc29sZV9yeChyZWdzKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCBwdl9zaGlt ICkKLSAgICAgICAgICAgICAgICBwdl9zaGltX2luamVjdF9ldnRjaG4ocG9ydCk7Ci0gICAgICAg IH0KLSAgICB9Ci0KLSAgICBhY2tfQVBJQ19pcnEoKTsKLX0KLQotc3RhdGljIHZvaWQgaW5pdF9l dnRjaG4odm9pZCkKLXsKLSAgICBzdGF0aWMgdWludDhfdCBldnRjaG5fdXBjYWxsX3ZlY3RvcjsK LSAgICBpbnQgcmM7Ci0KLSAgICBpZiAoICFldnRjaG5fdXBjYWxsX3ZlY3RvciApCi0gICAgICAg IGFsbG9jX2RpcmVjdF9hcGljX3ZlY3RvcigmZXZ0Y2huX3VwY2FsbF92ZWN0b3IsIHhlbl9ldnRj aG5fdXBjYWxsKTsKLQotICAgIEFTU0VSVChldnRjaG5fdXBjYWxsX3ZlY3Rvcik7Ci0KLSAgICBy YyA9IHhlbl9oeXBlcmNhbGxfc2V0X2V2dGNobl91cGNhbGxfdmVjdG9yKHRoaXNfY3B1KHZjcHVf aWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZ0 Y2huX3VwY2FsbF92ZWN0b3IpOwotICAgIGlmICggcmMgKQotICAgICAgICBwYW5pYygiVW5hYmxl IHRvIHNldCBldnRjaG4gdXBjYWxsIHZlY3RvcjogJWRcbiIsIHJjKTsKLQotICAgIC8qIFRyaWNr IHRvb2xzdGFjayB0byB0aGluayB3ZSBhcmUgZW5saWdodGVuZWQgKi8KLSAgICB7Ci0gICAgICAg IHN0cnVjdCB4ZW5faHZtX3BhcmFtIGEgPSB7Ci0gICAgICAgICAgICAuZG9taWQgPSBET01JRF9T RUxGLAotICAgICAgICAgICAgLmluZGV4ID0gSFZNX1BBUkFNX0NBTExCQUNLX0lSUSwKLSAgICAg ICAgICAgIC52YWx1ZSA9IDEsCi0gICAgICAgIH07Ci0KLSAgICAgICAgQlVHX09OKHhlbl9oeXBl cmNhbGxfaHZtX29wKEhWTU9QX3NldF9wYXJhbSwgJmEpKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19p bml0IGh5cGVydmlzb3Jfc2V0dXAodm9pZCkKLXsKLSAgICBpbml0X21lbW1hcCgpOwotCi0gICAg bWFwX3NoYXJlZF9pbmZvKCk7Ci0KLSAgICBzZXRfdmNwdV9pZCgpOwotICAgIHZjcHVfaW5mbyA9 IHh6YWxsb2NfYXJyYXkoc3RydWN0IHZjcHVfaW5mbywgbnJfY3B1X2lkcyk7Ci0gICAgaWYgKCBt YXBfdmNwdWluZm8oKSApCi0gICAgewotICAgICAgICB4ZnJlZSh2Y3B1X2luZm8pOwotICAgICAg ICB2Y3B1X2luZm8gPSBOVUxMOwotICAgIH0KLSAgICBpZiAoICF2Y3B1X2luZm8gJiYgbnJfY3B1 X2lkcyA+IFhFTl9MRUdBQ1lfTUFYX1ZDUFVTICkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGlu dCBpOwotCi0gICAgICAgIGZvciAoIGkgPSBYRU5fTEVHQUNZX01BWF9WQ1BVUzsgaSA8IG5yX2Nw dV9pZHM7IGkrKyApCi0gICAgICAgICAgICBfX2NwdW1hc2tfY2xlYXJfY3B1KGksICZjcHVfcHJl c2VudF9tYXApOwotICAgICAgICBucl9jcHVfaWRzID0gWEVOX0xFR0FDWV9NQVhfVkNQVVM7Ci0g ICAgICAgIHByaW50ayhYRU5MT0dfV0FSTklORwotICAgICAgICAgICAgICAgInVuYWJsZSB0byBt YXAgdkNQVSBpbmZvLCBsaW1pdGluZyB2Q1BVcyB0bzogJXVcbiIsCi0gICAgICAgICAgICAgICBY RU5fTEVHQUNZX01BWF9WQ1BVUyk7Ci0gICAgfQotCi0gICAgaW5pdF9ldnRjaG4oKTsKLX0KLQot dm9pZCBoeXBlcnZpc29yX2FwX3NldHVwKHZvaWQpCi17Ci0gICAgc2V0X3ZjcHVfaWQoKTsKLSAg ICBtYXBfdmNwdWluZm8oKTsKLSAgICBpbml0X2V2dGNobigpOwotfQotCi1pbnQgaHlwZXJ2aXNv cl9hbGxvY191bnVzZWRfcGFnZShtZm5fdCAqbWZuKQotewotICAgIHVuc2lnbmVkIGxvbmcgbTsK LSAgICBpbnQgcmM7Ci0KLSAgICByYyA9IHJhbmdlc2V0X2NsYWltX3JhbmdlKG1lbSwgMSwgJm0p OwotICAgIGlmICggIXJjICkKLSAgICAgICAgKm1mbiA9IF9tZm4obSk7Ci0KLSAgICByZXR1cm4g cmM7Ci19Ci0KLWludCBoeXBlcnZpc29yX2ZyZWVfdW51c2VkX3BhZ2UobWZuX3QgbWZuKQotewot ICAgIHJldHVybiByYW5nZXNldF9yZW1vdmVfcmFuZ2UobWVtLCBtZm5feChtZm4pLCBtZm5feCht Zm4pKTsKLX0KLQogdWludDMyX3QgaHlwZXJ2aXNvcl9jcHVpZF9iYXNlKHZvaWQpCiB7CiAgICAg cmV0dXJuIHhlbl9jcHVpZF9iYXNlOwogfQogCi1zdGF0aWMgdm9pZCBhcF9yZXN1bWUodm9pZCAq dW51c2VkKQotewotICAgIG1hcF92Y3B1aW5mbygpOwotICAgIGluaXRfZXZ0Y2huKCk7Ci19Ci0K LXZvaWQgaHlwZXJ2aXNvcl9yZXN1bWUodm9pZCkKLXsKLSAgICAvKiBSZXNldCBzaGFyZWQgaW5m byBwYWdlLiAqLwotICAgIG1hcF9zaGFyZWRfaW5mbygpOwotCi0gICAgLyoKLSAgICAgKiBSZXNl dCB2Y3B1X2luZm8uIEp1c3QgY2xlYW4gdGhlIG1hcHBlZCBiaXRtYXAgYW5kIHRyeSB0byBtYXAg dGhlIHZjcHUKLSAgICAgKiBhcmVhIGFnYWluLiBPbiBmYWlsdXJlIHRvIG1hcCAod2hlbiBpdCB3 YXMgcHJldmlvdXNseSBtYXBwZWQpIHBhbmljCi0gICAgICogc2luY2UgaXQncyBpbXBvc3NpYmxl IHRvIHNhZmVseSBzaHV0IGRvd24gcnVubmluZyBndWVzdCB2Q1BVcyBpbiBvcmRlcgotICAgICAq IHRvIG1lZXQgdGhlIG5ldyBYRU5fTEVHQUNZX01BWF9WQ1BVUyByZXF1aXJlbWVudC4KLSAgICAg Ki8KLSAgICBiaXRtYXBfemVybyh2Y3B1X2luZm9fbWFwcGVkLCBOUl9DUFVTKTsKLSAgICBpZiAo IG1hcF92Y3B1aW5mbygpICYmIG5yX2NwdV9pZHMgPiBYRU5fTEVHQUNZX01BWF9WQ1BVUyApCi0g ICAgICAgIHBhbmljKCJ1bmFibGUgdG8gcmVtYXAgdkNQVSBpbmZvIGFuZCB2Q1BVcyA+IGxlZ2Fj eSBsaW1pdFxuIik7Ci0KLSAgICAvKiBTZXR1cCBldmVudCBjaGFubmVsIHVwY2FsbCB2ZWN0b3Iu ICovCi0gICAgaW5pdF9ldnRjaG4oKTsKLSAgICBzbXBfY2FsbF9mdW5jdGlvbihhcF9yZXN1bWUs IE5VTEwsIDEpOwotCi0gICAgaWYgKCBwdl9jb25zb2xlICkKLSAgICAgICAgcHZfY29uc29sZV9p bml0KCk7Ci19Ci0KIC8qCiAgKiBMb2NhbCB2YXJpYWJsZXM6CiAgKiBtb2RlOiBDCi0tIAoyLjE3 LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4t ZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczov L2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs