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=-13.5 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 DD668C433FE for ; Wed, 9 Dec 2020 10:55:59 +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 4E0772336F for ; Wed, 9 Dec 2020 10:55:59 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4E0772336F Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ffwll.ch 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 BDB4E6E153; Wed, 9 Dec 2020 10:55:58 +0000 (UTC) Received: from mail-ot1-x334.google.com (mail-ot1-x334.google.com [IPv6:2607:f8b0:4864:20::334]) by gabe.freedesktop.org (Postfix) with ESMTPS id E17C46E153 for ; Wed, 9 Dec 2020 10:55:57 +0000 (UTC) Received: by mail-ot1-x334.google.com with SMTP id x13so901452oto.8 for ; Wed, 09 Dec 2020 02:55:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=rffZo66WJHWhdfmElefaWCxCTevBqMdKnMgMhfs30lY=; b=CEip0jYafQ3Se1ulKlzfTzv6Y3+PJ6FHqDf46NviH3SwAOMsNS6JspLUe8iAkLdOAa clBCya7hE9Dvg+jPoZ2Hm8Wa2mfQusCt8+Yi7YTOK0HUChgEIt5c0+rhN+YF3qReGkVS LK6WtnJoDSshGkpuGobNLhBrTm67pLNZ/2rwQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=rffZo66WJHWhdfmElefaWCxCTevBqMdKnMgMhfs30lY=; b=JdcwDTG6LT4+W2J56W/RAGSqdThIzZQ2Mk0V8arm2/xF6HbKkDKlVYZevkM8RPsqf6 iwOflFcH6hsBONg/zAogolKDmqO/q6/8icf5l1sqeJm2pQzUo2eNYz4RfllrwtrV3YHg S7mugNqFO65D30DnPTZm3FFO9mhFVfbzx606ekGp88rZyd/AQurwPa+g4ukz2l1BAfiA J+FhMDgI446bR0pdZys5kZiz6pkH2wWJAZy+tJOPxdYsBIrQflOHai/6USGaXqYSfPWK Yr3f6ljZPBAfycBdLGG1dVINeNXEevG5sWsaDN+hfGOSxbzuY/iXRoiyDwpKVRrplc3m XoNg== X-Gm-Message-State: AOAM5326xzaoGS0N01/oc6DPUNufrOz0j1iYcr9F0f6YAEXY6V/Fiol9 aImNk+xksZwdcn5zXFrHIOuV9AIsScFGEPaSjc5Dcg== X-Google-Smtp-Source: ABdhPJyW3W+JbNLT5GxMDOVbgdkcfx18Hh8XtFSZoTljjM4hcOfFv4bR2Mgkxp9TSPRYo9wR2cVO13JkzAsYOvZCXJA= X-Received: by 2002:a9d:23ca:: with SMTP id t68mr1199922otb.281.1607511356247; Wed, 09 Dec 2020 02:55:56 -0800 (PST) MIME-Version: 1.0 References: <20201209042144.2281-1-airlied@gmail.com> <20201209042144.2281-4-airlied@gmail.com> In-Reply-To: <20201209042144.2281-4-airlied@gmail.com> From: Daniel Vetter Date: Wed, 9 Dec 2020 11:55:44 +0100 Message-ID: To: Dave Airlie Subject: Re: [Intel-gfx] [PATCH 3/4] drm/i915: refactor pll code out into intel_clock.c 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: , Cc: intel-gfx Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" T24gV2VkLCBEZWMgOSwgMjAyMCBhdCA1OjIyIEFNIERhdmUgQWlybGllIDxhaXJsaWVkQGdtYWls LmNvbT4gd3JvdGU6Cj4KPiBGcm9tOiBEYXZlIEFpcmxpZSA8YWlybGllZEByZWRoYXQuY29tPgo+ Cj4gVGhpcyBwdWxscyBhIGxhcmdlIGNodW5rIG9mIHRoZSBwbGwgY2FsY3VsYXRpb24gY29kZSBv dXQgb2YKPiBpbnRlbF9kaXNwbGF5LmMgdG8gYSBuZXcgZmlsZS4KPgo+IE9uZSBmdW5jdGlvbiBt YWtzZSBzZW5zZSB0byBiZSBhbiBpbmxpbmUsIG90aGVyd2lzZSB0aGlzCj4gaXMgcHJldHR5IG11 Y2ggYSBzdHJhaWdodCBjb3B5IGNvdmVyLiBhbHNvIGFsbCB0aGUKPiByZW1haW5pbmcgaG9va3Mg Zm9yIGc0NSBhbmQgb2xkZXIgZW5kIHVwIHRoZSBzYW1lIG5vdy4KPgo+IEZpeGVkIG9uZSAsIGlu c3RlYWQgb2YgOyBlcnJvciBpbiBjaHZfZmluZF9iZXN0X2RwbGwuCgpNYXliZSBzcGxpdCB0aGF0 IG9uZSBvdXQ/Cgo+IFNpZ25lZC1vZmYtYnk6IERhdmUgQWlybGllIDxhaXJsaWVkQHJlZGhhdC5j b20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAgICAgICAg ICB8ICAgIDEgKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Nsb2NrLmMg ICAgfCAxMzcwICsrKysrKysrKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pbnRlbF9kaXNwbGF5LmMgIHwgMTM5MiArLS0tLS0tLS0tLS0tLS0tLQo+ICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaCAgfCAgIDEzICstCj4gIC4uLi9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfdHlwZXMuaCAgICB8ICAgIDUgKwo+ICA1IGZpbGVz IGNoYW5nZWQsIDEzOTggaW5zZXJ0aW9ucygrKSwgMTM4MyBkZWxldGlvbnMoLSkKPiAgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY2xvY2suYwo+ Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvTWFrZWZpbGUKPiBpbmRleCBmZmVjMjU3NzAyYWYuLjhiMzU3YzIxMmFlMiAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gQEAgLTE5Myw2ICsxOTMsNyBAQCBpOTE1LXkgKz0g XAo+ICAgICAgICAgZGlzcGxheS9pbnRlbF9iaW9zLm8gXAo+ICAgICAgICAgZGlzcGxheS9pbnRl bF9idy5vIFwKPiAgICAgICAgIGRpc3BsYXkvaW50ZWxfY2RjbGsubyBcCj4gKyAgICAgICBkaXNw bGF5L2ludGVsX2Nsb2NrLm8gXAoKSSdkIGNhbGwgdGhpcyBpbnRlbF9kcGxsX2xlZ2FjeS5jLCB0 byBiZSBtb3JlIGluIGxpbmUgd2l0aCB0aGUgbmV3CmdlbmVyYXRpb24gc3R1ZmYgd2hpY2ggaXMg aW4gaW50ZWxfZHBsbF9tZ3IuYyB3aGljaCBpcyB3aGVyZSBhbGwgdGhlCm5ldyBjb2RlIHNpbmNl IGhzdyBoYW5ncyBvdXQgKGV4Y2VwdCBmb3IgY2h2LCB0aGF0J3Mgc3RpbGwgZGVyaXZlZApmcm9t IHRoZSBvbGQgb25lcykuCgpBc2lkZSBmcm9tIHRoZSByZXBhaW50IGxvb2tzIHJlYXNvbmFibGUg dG8gbWUuCi1EYW5pZWwKCj4gICAgICAgICBkaXNwbGF5L2ludGVsX2NvbG9yLm8gXAo+ICAgICAg ICAgZGlzcGxheS9pbnRlbF9jb21ib19waHkubyBcCj4gICAgICAgICBkaXNwbGF5L2ludGVsX2Nv bm5lY3Rvci5vIFwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9jbG9jay5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jbG9jay5j Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjc1ODE5YzFkYTAz OQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu dGVsX2Nsb2NrLmMKPiBAQCAtMCwwICsxLDEzNzAgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IE1JVAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAyMCBJbnRlbCBDb3Jwb3JhdGlv bgo+ICsgKi8KPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ICsjaW5jbHVkZSAiaW50ZWxf ZGlzcGxheV90eXBlcy5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfZGlzcGxheS5oIgo+ICsjaW5jbHVk ZSAiaW50ZWxfbHZkcy5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfcGFuZWwuaCIKPiArCj4gK3N0YXRp YyBib29sIGludGVsX3BhbmVsX3VzZV9zc2Moc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQo+ICt7Cj4gKyAgICAgICBpZiAoZGV2X3ByaXYtPnBhcmFtcy5wYW5lbF91c2Vfc3NjID49 IDApCj4gKyAgICAgICAgICAgICAgIHJldHVybiBkZXZfcHJpdi0+cGFyYW1zLnBhbmVsX3VzZV9z c2MgIT0gMDsKPiArICAgICAgIHJldHVybiBkZXZfcHJpdi0+dmJ0Lmx2ZHNfdXNlX3NzYwo+ICsg ICAgICAgICAgICAgICAmJiAhKGRldl9wcml2LT5xdWlya3MgJiBRVUlSS19MVkRTX1NTQ19ESVNB QkxFKTsKPiArfQo+ICsKPiArc3RydWN0IGludGVsX2xpbWl0IHsKPiArICAgICAgIHN0cnVjdCB7 Cj4gKyAgICAgICAgICAgICAgIGludCBtaW4sIG1heDsKPiArICAgICAgIH0gZG90LCB2Y28sIG4s IG0sIG0xLCBtMiwgcCwgcDE7Cj4gKwo+ICsgICAgICAgc3RydWN0IHsKPiArICAgICAgICAgICAg ICAgaW50IGRvdF9saW1pdDsKPiArICAgICAgICAgICAgICAgaW50IHAyX3Nsb3csIHAyX2Zhc3Q7 Cj4gKyAgICAgICB9IHAyOwo+ICt9Owo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2xpbWl0 IGludGVsX2xpbWl0c19pOHh4X2RhYyA9IHsKPiArICAgICAgIC5kb3QgPSB7IC5taW4gPSAyNTAw MCwgLm1heCA9IDM1MDAwMCB9LAo+ICsgICAgICAgLnZjbyA9IHsgLm1pbiA9IDkwODAwMCwgLm1h eCA9IDE1MTIwMDAgfSwKPiArICAgICAgIC5uID0geyAubWluID0gMiwgLm1heCA9IDE2IH0sCj4g KyAgICAgICAubSA9IHsgLm1pbiA9IDk2LCAubWF4ID0gMTQwIH0sCj4gKyAgICAgICAubTEgPSB7 IC5taW4gPSAxOCwgLm1heCA9IDI2IH0sCj4gKyAgICAgICAubTIgPSB7IC5taW4gPSA2LCAubWF4 ID0gMTYgfSwKPiArICAgICAgIC5wID0geyAubWluID0gNCwgLm1heCA9IDEyOCB9LAo+ICsgICAg ICAgLnAxID0geyAubWluID0gMiwgLm1heCA9IDMzIH0sCj4gKyAgICAgICAucDIgPSB7IC5kb3Rf bGltaXQgPSAxNjUwMDAsCj4gKyAgICAgICAgICAgICAgIC5wMl9zbG93ID0gNCwgLnAyX2Zhc3Qg PSAyIH0sCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2xpbWl0IGludGVs X2xpbWl0c19pOHh4X2R2byA9IHsKPiArICAgICAgIC5kb3QgPSB7IC5taW4gPSAyNTAwMCwgLm1h eCA9IDM1MDAwMCB9LAo+ICsgICAgICAgLnZjbyA9IHsgLm1pbiA9IDkwODAwMCwgLm1heCA9IDE1 MTIwMDAgfSwKPiArICAgICAgIC5uID0geyAubWluID0gMiwgLm1heCA9IDE2IH0sCj4gKyAgICAg ICAubSA9IHsgLm1pbiA9IDk2LCAubWF4ID0gMTQwIH0sCj4gKyAgICAgICAubTEgPSB7IC5taW4g PSAxOCwgLm1heCA9IDI2IH0sCj4gKyAgICAgICAubTIgPSB7IC5taW4gPSA2LCAubWF4ID0gMTYg fSwKPiArICAgICAgIC5wID0geyAubWluID0gNCwgLm1heCA9IDEyOCB9LAo+ICsgICAgICAgLnAx ID0geyAubWluID0gMiwgLm1heCA9IDMzIH0sCj4gKyAgICAgICAucDIgPSB7IC5kb3RfbGltaXQg PSAxNjUwMDAsCj4gKyAgICAgICAgICAgICAgIC5wMl9zbG93ID0gNCwgLnAyX2Zhc3QgPSA0IH0s Cj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2xpbWl0IGludGVsX2xpbWl0 c19pOHh4X2x2ZHMgPSB7Cj4gKyAgICAgICAuZG90ID0geyAubWluID0gMjUwMDAsIC5tYXggPSAz NTAwMDAgfSwKPiArICAgICAgIC52Y28gPSB7IC5taW4gPSA5MDgwMDAsIC5tYXggPSAxNTEyMDAw IH0sCj4gKyAgICAgICAubiA9IHsgLm1pbiA9IDIsIC5tYXggPSAxNiB9LAo+ICsgICAgICAgLm0g PSB7IC5taW4gPSA5NiwgLm1heCA9IDE0MCB9LAo+ICsgICAgICAgLm0xID0geyAubWluID0gMTgs IC5tYXggPSAyNiB9LAo+ICsgICAgICAgLm0yID0geyAubWluID0gNiwgLm1heCA9IDE2IH0sCj4g KyAgICAgICAucCA9IHsgLm1pbiA9IDQsIC5tYXggPSAxMjggfSwKPiArICAgICAgIC5wMSA9IHsg Lm1pbiA9IDEsIC5tYXggPSA2IH0sCj4gKyAgICAgICAucDIgPSB7IC5kb3RfbGltaXQgPSAxNjUw MDAsCj4gKyAgICAgICAgICAgICAgIC5wMl9zbG93ID0gMTQsIC5wMl9mYXN0ID0gNyB9LAo+ICt9 Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCBpbnRlbF9saW1pdHNfaTl4 eF9zZHZvID0gewo+ICsgICAgICAgLmRvdCA9IHsgLm1pbiA9IDIwMDAwLCAubWF4ID0gNDAwMDAw IH0sCj4gKyAgICAgICAudmNvID0geyAubWluID0gMTQwMDAwMCwgLm1heCA9IDI4MDAwMDAgfSwK PiArICAgICAgIC5uID0geyAubWluID0gMSwgLm1heCA9IDYgfSwKPiArICAgICAgIC5tID0geyAu bWluID0gNzAsIC5tYXggPSAxMjAgfSwKPiArICAgICAgIC5tMSA9IHsgLm1pbiA9IDgsIC5tYXgg PSAxOCB9LAo+ICsgICAgICAgLm0yID0geyAubWluID0gMywgLm1heCA9IDcgfSwKPiArICAgICAg IC5wID0geyAubWluID0gNSwgLm1heCA9IDgwIH0sCj4gKyAgICAgICAucDEgPSB7IC5taW4gPSAx LCAubWF4ID0gOCB9LAo+ICsgICAgICAgLnAyID0geyAuZG90X2xpbWl0ID0gMjAwMDAwLAo+ICsg ICAgICAgICAgICAgICAucDJfc2xvdyA9IDEwLCAucDJfZmFzdCA9IDUgfSwKPiArfTsKPiArCj4g K3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgaW50ZWxfbGltaXRzX2k5eHhfbHZkcyA9 IHsKPiArICAgICAgIC5kb3QgPSB7IC5taW4gPSAyMDAwMCwgLm1heCA9IDQwMDAwMCB9LAo+ICsg ICAgICAgLnZjbyA9IHsgLm1pbiA9IDE0MDAwMDAsIC5tYXggPSAyODAwMDAwIH0sCj4gKyAgICAg ICAubiA9IHsgLm1pbiA9IDEsIC5tYXggPSA2IH0sCj4gKyAgICAgICAubSA9IHsgLm1pbiA9IDcw LCAubWF4ID0gMTIwIH0sCj4gKyAgICAgICAubTEgPSB7IC5taW4gPSA4LCAubWF4ID0gMTggfSwK PiArICAgICAgIC5tMiA9IHsgLm1pbiA9IDMsIC5tYXggPSA3IH0sCj4gKyAgICAgICAucCA9IHsg Lm1pbiA9IDcsIC5tYXggPSA5OCB9LAo+ICsgICAgICAgLnAxID0geyAubWluID0gMSwgLm1heCA9 IDggfSwKPiArICAgICAgIC5wMiA9IHsgLmRvdF9saW1pdCA9IDExMjAwMCwKPiArICAgICAgICAg ICAgICAgLnAyX3Nsb3cgPSAxNCwgLnAyX2Zhc3QgPSA3IH0sCj4gK307Cj4gKwo+ICsKPiArc3Rh dGljIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCBpbnRlbF9saW1pdHNfZzR4X3Nkdm8gPSB7Cj4g KyAgICAgICAuZG90ID0geyAubWluID0gMjUwMDAsIC5tYXggPSAyNzAwMDAgfSwKPiArICAgICAg IC52Y28gPSB7IC5taW4gPSAxNzUwMDAwLCAubWF4ID0gMzUwMDAwMH0sCj4gKyAgICAgICAubiA9 IHsgLm1pbiA9IDEsIC5tYXggPSA0IH0sCj4gKyAgICAgICAubSA9IHsgLm1pbiA9IDEwNCwgLm1h eCA9IDEzOCB9LAo+ICsgICAgICAgLm0xID0geyAubWluID0gMTcsIC5tYXggPSAyMyB9LAo+ICsg ICAgICAgLm0yID0geyAubWluID0gNSwgLm1heCA9IDExIH0sCj4gKyAgICAgICAucCA9IHsgLm1p biA9IDEwLCAubWF4ID0gMzAgfSwKPiArICAgICAgIC5wMSA9IHsgLm1pbiA9IDEsIC5tYXggPSAz fSwKPiArICAgICAgIC5wMiA9IHsgLmRvdF9saW1pdCA9IDI3MDAwMCwKPiArICAgICAgICAgICAg ICAgLnAyX3Nsb3cgPSAxMCwKPiArICAgICAgICAgICAgICAgLnAyX2Zhc3QgPSAxMAo+ICsgICAg ICAgfSwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgaW50ZWxf bGltaXRzX2c0eF9oZG1pID0gewo+ICsgICAgICAgLmRvdCA9IHsgLm1pbiA9IDIyMDAwLCAubWF4 ID0gNDAwMDAwIH0sCj4gKyAgICAgICAudmNvID0geyAubWluID0gMTc1MDAwMCwgLm1heCA9IDM1 MDAwMDB9LAo+ICsgICAgICAgLm4gPSB7IC5taW4gPSAxLCAubWF4ID0gNCB9LAo+ICsgICAgICAg Lm0gPSB7IC5taW4gPSAxMDQsIC5tYXggPSAxMzggfSwKPiArICAgICAgIC5tMSA9IHsgLm1pbiA9 IDE2LCAubWF4ID0gMjMgfSwKPiArICAgICAgIC5tMiA9IHsgLm1pbiA9IDUsIC5tYXggPSAxMSB9 LAo+ICsgICAgICAgLnAgPSB7IC5taW4gPSA1LCAubWF4ID0gODAgfSwKPiArICAgICAgIC5wMSA9 IHsgLm1pbiA9IDEsIC5tYXggPSA4fSwKPiArICAgICAgIC5wMiA9IHsgLmRvdF9saW1pdCA9IDE2 NTAwMCwKPiArICAgICAgICAgICAgICAgLnAyX3Nsb3cgPSAxMCwgLnAyX2Zhc3QgPSA1IH0sCj4g K307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2xpbWl0IGludGVsX2xpbWl0c19n NHhfc2luZ2xlX2NoYW5uZWxfbHZkcyA9IHsKPiArICAgICAgIC5kb3QgPSB7IC5taW4gPSAyMDAw MCwgLm1heCA9IDExNTAwMCB9LAo+ICsgICAgICAgLnZjbyA9IHsgLm1pbiA9IDE3NTAwMDAsIC5t YXggPSAzNTAwMDAwIH0sCj4gKyAgICAgICAubiA9IHsgLm1pbiA9IDEsIC5tYXggPSAzIH0sCj4g KyAgICAgICAubSA9IHsgLm1pbiA9IDEwNCwgLm1heCA9IDEzOCB9LAo+ICsgICAgICAgLm0xID0g eyAubWluID0gMTcsIC5tYXggPSAyMyB9LAo+ICsgICAgICAgLm0yID0geyAubWluID0gNSwgLm1h eCA9IDExIH0sCj4gKyAgICAgICAucCA9IHsgLm1pbiA9IDI4LCAubWF4ID0gMTEyIH0sCj4gKyAg ICAgICAucDEgPSB7IC5taW4gPSAyLCAubWF4ID0gOCB9LAo+ICsgICAgICAgLnAyID0geyAuZG90 X2xpbWl0ID0gMCwKPiArICAgICAgICAgICAgICAgLnAyX3Nsb3cgPSAxNCwgLnAyX2Zhc3QgPSAx NAo+ICsgICAgICAgfSwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbGlt aXQgaW50ZWxfbGltaXRzX2c0eF9kdWFsX2NoYW5uZWxfbHZkcyA9IHsKPiArICAgICAgIC5kb3Qg PSB7IC5taW4gPSA4MDAwMCwgLm1heCA9IDIyNDAwMCB9LAo+ICsgICAgICAgLnZjbyA9IHsgLm1p biA9IDE3NTAwMDAsIC5tYXggPSAzNTAwMDAwIH0sCj4gKyAgICAgICAubiA9IHsgLm1pbiA9IDEs IC5tYXggPSAzIH0sCj4gKyAgICAgICAubSA9IHsgLm1pbiA9IDEwNCwgLm1heCA9IDEzOCB9LAo+ ICsgICAgICAgLm0xID0geyAubWluID0gMTcsIC5tYXggPSAyMyB9LAo+ICsgICAgICAgLm0yID0g eyAubWluID0gNSwgLm1heCA9IDExIH0sCj4gKyAgICAgICAucCA9IHsgLm1pbiA9IDE0LCAubWF4 ID0gNDIgfSwKPiArICAgICAgIC5wMSA9IHsgLm1pbiA9IDIsIC5tYXggPSA2IH0sCj4gKyAgICAg ICAucDIgPSB7IC5kb3RfbGltaXQgPSAwLAo+ICsgICAgICAgICAgICAgICAucDJfc2xvdyA9IDcs IC5wMl9mYXN0ID0gNwo+ICsgICAgICAgfSwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgaW50ZWxfbGltaXQgcG52X2xpbWl0c19zZHZvID0gewo+ICsgICAgICAgLmRvdCA9IHsgLm1p biA9IDIwMDAwLCAubWF4ID0gNDAwMDAwfSwKPiArICAgICAgIC52Y28gPSB7IC5taW4gPSAxNzAw MDAwLCAubWF4ID0gMzUwMDAwMCB9LAo+ICsgICAgICAgLyogUGluZXZpZXcncyBOY291bnRlciBp cyBhIHJpbmcgY291bnRlciAqLwo+ICsgICAgICAgLm4gPSB7IC5taW4gPSAzLCAubWF4ID0gNiB9 LAo+ICsgICAgICAgLm0gPSB7IC5taW4gPSAyLCAubWF4ID0gMjU2IH0sCj4gKyAgICAgICAvKiBQ aW5ldmlldyBvbmx5IGhhcyBvbmUgY29tYmluZWQgbSBkaXZpZGVyLCB3aGljaCB3ZSB0cmVhdCBh cyBtMi4gKi8KPiArICAgICAgIC5tMSA9IHsgLm1pbiA9IDAsIC5tYXggPSAwIH0sCj4gKyAgICAg ICAubTIgPSB7IC5taW4gPSAwLCAubWF4ID0gMjU0IH0sCj4gKyAgICAgICAucCA9IHsgLm1pbiA9 IDUsIC5tYXggPSA4MCB9LAo+ICsgICAgICAgLnAxID0geyAubWluID0gMSwgLm1heCA9IDggfSwK PiArICAgICAgIC5wMiA9IHsgLmRvdF9saW1pdCA9IDIwMDAwMCwKPiArICAgICAgICAgICAgICAg LnAyX3Nsb3cgPSAxMCwgLnAyX2Zhc3QgPSA1IH0sCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qg c3RydWN0IGludGVsX2xpbWl0IHBudl9saW1pdHNfbHZkcyA9IHsKPiArICAgICAgIC5kb3QgPSB7 IC5taW4gPSAyMDAwMCwgLm1heCA9IDQwMDAwMCB9LAo+ICsgICAgICAgLnZjbyA9IHsgLm1pbiA9 IDE3MDAwMDAsIC5tYXggPSAzNTAwMDAwIH0sCj4gKyAgICAgICAubiA9IHsgLm1pbiA9IDMsIC5t YXggPSA2IH0sCj4gKyAgICAgICAubSA9IHsgLm1pbiA9IDIsIC5tYXggPSAyNTYgfSwKPiArICAg ICAgIC5tMSA9IHsgLm1pbiA9IDAsIC5tYXggPSAwIH0sCj4gKyAgICAgICAubTIgPSB7IC5taW4g PSAwLCAubWF4ID0gMjU0IH0sCj4gKyAgICAgICAucCA9IHsgLm1pbiA9IDcsIC5tYXggPSAxMTIg fSwKPiArICAgICAgIC5wMSA9IHsgLm1pbiA9IDEsIC5tYXggPSA4IH0sCj4gKyAgICAgICAucDIg PSB7IC5kb3RfbGltaXQgPSAxMTIwMDAsCj4gKyAgICAgICAgICAgICAgIC5wMl9zbG93ID0gMTQs IC5wMl9mYXN0ID0gMTQgfSwKPiArfTsKPiArCj4gKy8qIElyb25sYWtlIC8gU2FuZHlicmlkZ2UK PiArICoKPiArICogV2UgY2FsY3VsYXRlIGNsb2NrIHVzaW5nIChyZWdpc3Rlcl92YWx1ZSArIDIp IGZvciBOL00xL00yLCBzbyBoZXJlCj4gKyAqIHRoZSByYW5nZSB2YWx1ZSBmb3IgdGhlbSBpcyAo YWN0dWFsX3ZhbHVlIC0gMikuCj4gKyAqLwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2xp bWl0IGlsa19saW1pdHNfZGFjID0gewo+ICsgICAgICAgLmRvdCA9IHsgLm1pbiA9IDI1MDAwLCAu bWF4ID0gMzUwMDAwIH0sCj4gKyAgICAgICAudmNvID0geyAubWluID0gMTc2MDAwMCwgLm1heCA9 IDM1MTAwMDAgfSwKPiArICAgICAgIC5uID0geyAubWluID0gMSwgLm1heCA9IDUgfSwKPiArICAg ICAgIC5tID0geyAubWluID0gNzksIC5tYXggPSAxMjcgfSwKPiArICAgICAgIC5tMSA9IHsgLm1p biA9IDEyLCAubWF4ID0gMjIgfSwKPiArICAgICAgIC5tMiA9IHsgLm1pbiA9IDUsIC5tYXggPSA5 IH0sCj4gKyAgICAgICAucCA9IHsgLm1pbiA9IDUsIC5tYXggPSA4MCB9LAo+ICsgICAgICAgLnAx ID0geyAubWluID0gMSwgLm1heCA9IDggfSwKPiArICAgICAgIC5wMiA9IHsgLmRvdF9saW1pdCA9 IDIyNTAwMCwKPiArICAgICAgICAgICAgICAgLnAyX3Nsb3cgPSAxMCwgLnAyX2Zhc3QgPSA1IH0s Cj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2xpbWl0IGlsa19saW1pdHNf c2luZ2xlX2x2ZHMgPSB7Cj4gKyAgICAgICAuZG90ID0geyAubWluID0gMjUwMDAsIC5tYXggPSAz NTAwMDAgfSwKPiArICAgICAgIC52Y28gPSB7IC5taW4gPSAxNzYwMDAwLCAubWF4ID0gMzUxMDAw MCB9LAo+ICsgICAgICAgLm4gPSB7IC5taW4gPSAxLCAubWF4ID0gMyB9LAo+ICsgICAgICAgLm0g PSB7IC5taW4gPSA3OSwgLm1heCA9IDExOCB9LAo+ICsgICAgICAgLm0xID0geyAubWluID0gMTIs IC5tYXggPSAyMiB9LAo+ICsgICAgICAgLm0yID0geyAubWluID0gNSwgLm1heCA9IDkgfSwKPiAr ICAgICAgIC5wID0geyAubWluID0gMjgsIC5tYXggPSAxMTIgfSwKPiArICAgICAgIC5wMSA9IHsg Lm1pbiA9IDIsIC5tYXggPSA4IH0sCj4gKyAgICAgICAucDIgPSB7IC5kb3RfbGltaXQgPSAyMjUw MDAsCj4gKyAgICAgICAgICAgICAgIC5wMl9zbG93ID0gMTQsIC5wMl9mYXN0ID0gMTQgfSwKPiAr fTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgaWxrX2xpbWl0c19kdWFs X2x2ZHMgPSB7Cj4gKyAgICAgICAuZG90ID0geyAubWluID0gMjUwMDAsIC5tYXggPSAzNTAwMDAg fSwKPiArICAgICAgIC52Y28gPSB7IC5taW4gPSAxNzYwMDAwLCAubWF4ID0gMzUxMDAwMCB9LAo+ ICsgICAgICAgLm4gPSB7IC5taW4gPSAxLCAubWF4ID0gMyB9LAo+ICsgICAgICAgLm0gPSB7IC5t aW4gPSA3OSwgLm1heCA9IDEyNyB9LAo+ICsgICAgICAgLm0xID0geyAubWluID0gMTIsIC5tYXgg PSAyMiB9LAo+ICsgICAgICAgLm0yID0geyAubWluID0gNSwgLm1heCA9IDkgfSwKPiArICAgICAg IC5wID0geyAubWluID0gMTQsIC5tYXggPSA1NiB9LAo+ICsgICAgICAgLnAxID0geyAubWluID0g MiwgLm1heCA9IDggfSwKPiArICAgICAgIC5wMiA9IHsgLmRvdF9saW1pdCA9IDIyNTAwMCwKPiAr ICAgICAgICAgICAgICAgLnAyX3Nsb3cgPSA3LCAucDJfZmFzdCA9IDcgfSwKPiArfTsKPiArCj4g Ky8qIExWRFMgMTAwbWh6IHJlZmNsayBsaW1pdHMuICovCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg aW50ZWxfbGltaXQgaWxrX2xpbWl0c19zaW5nbGVfbHZkc18xMDBtID0gewo+ICsgICAgICAgLmRv dCA9IHsgLm1pbiA9IDI1MDAwLCAubWF4ID0gMzUwMDAwIH0sCj4gKyAgICAgICAudmNvID0geyAu bWluID0gMTc2MDAwMCwgLm1heCA9IDM1MTAwMDAgfSwKPiArICAgICAgIC5uID0geyAubWluID0g MSwgLm1heCA9IDIgfSwKPiArICAgICAgIC5tID0geyAubWluID0gNzksIC5tYXggPSAxMjYgfSwK PiArICAgICAgIC5tMSA9IHsgLm1pbiA9IDEyLCAubWF4ID0gMjIgfSwKPiArICAgICAgIC5tMiA9 IHsgLm1pbiA9IDUsIC5tYXggPSA5IH0sCj4gKyAgICAgICAucCA9IHsgLm1pbiA9IDI4LCAubWF4 ID0gMTEyIH0sCj4gKyAgICAgICAucDEgPSB7IC5taW4gPSAyLCAubWF4ID0gOCB9LAo+ICsgICAg ICAgLnAyID0geyAuZG90X2xpbWl0ID0gMjI1MDAwLAo+ICsgICAgICAgICAgICAgICAucDJfc2xv dyA9IDE0LCAucDJfZmFzdCA9IDE0IH0sCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IGludGVsX2xpbWl0IGlsa19saW1pdHNfZHVhbF9sdmRzXzEwMG0gPSB7Cj4gKyAgICAgICAuZG90 ID0geyAubWluID0gMjUwMDAsIC5tYXggPSAzNTAwMDAgfSwKPiArICAgICAgIC52Y28gPSB7IC5t aW4gPSAxNzYwMDAwLCAubWF4ID0gMzUxMDAwMCB9LAo+ICsgICAgICAgLm4gPSB7IC5taW4gPSAx LCAubWF4ID0gMyB9LAo+ICsgICAgICAgLm0gPSB7IC5taW4gPSA3OSwgLm1heCA9IDEyNiB9LAo+ ICsgICAgICAgLm0xID0geyAubWluID0gMTIsIC5tYXggPSAyMiB9LAo+ICsgICAgICAgLm0yID0g eyAubWluID0gNSwgLm1heCA9IDkgfSwKPiArICAgICAgIC5wID0geyAubWluID0gMTQsIC5tYXgg PSA0MiB9LAo+ICsgICAgICAgLnAxID0geyAubWluID0gMiwgLm1heCA9IDYgfSwKPiArICAgICAg IC5wMiA9IHsgLmRvdF9saW1pdCA9IDIyNTAwMCwKPiArICAgICAgICAgICAgICAgLnAyX3Nsb3cg PSA3LCAucDJfZmFzdCA9IDcgfSwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW50 ZWxfbGltaXQgaW50ZWxfbGltaXRzX3ZsdiA9IHsKPiArICAgICAgICAvKgo+ICsgICAgICAgICAq IFRoZXNlIGFyZSB0aGUgZGF0YSByYXRlIGxpbWl0cyAobWVhc3VyZWQgaW4gZmFzdCBjbG9ja3Mp Cj4gKyAgICAgICAgICogc2luY2UgdGhvc2UgYXJlIHRoZSBzdHJpY3Rlc3QgbGltaXRzIHdlIGhh dmUuIFRoZSBmYXN0Cj4gKyAgICAgICAgICogY2xvY2sgYW5kIGFjdHVhbCByYXRlIGxpbWl0cyBh cmUgbW9yZSByZWxheGVkLCBzbyBjaGVja2luZwo+ICsgICAgICAgICAqIHRoZW0gd291bGQgbWFr ZSBubyBkaWZmZXJlbmNlLgo+ICsgICAgICAgICAqLwo+ICsgICAgICAgLmRvdCA9IHsgLm1pbiA9 IDI1MDAwICogNSwgLm1heCA9IDI3MDAwMCAqIDUgfSwKPiArICAgICAgIC52Y28gPSB7IC5taW4g PSA0MDAwMDAwLCAubWF4ID0gNjAwMDAwMCB9LAo+ICsgICAgICAgLm4gPSB7IC5taW4gPSAxLCAu bWF4ID0gNyB9LAo+ICsgICAgICAgLm0xID0geyAubWluID0gMiwgLm1heCA9IDMgfSwKPiArICAg ICAgIC5tMiA9IHsgLm1pbiA9IDExLCAubWF4ID0gMTU2IH0sCj4gKyAgICAgICAucDEgPSB7IC5t aW4gPSAyLCAubWF4ID0gMyB9LAo+ICsgICAgICAgLnAyID0geyAucDJfc2xvdyA9IDIsIC5wMl9m YXN0ID0gMjAgfSwgLyogc2xvdz1taW4sIGZhc3Q9bWF4ICovCj4gK307Cj4gKwo+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IGludGVsX2xpbWl0IGludGVsX2xpbWl0c19jaHYgPSB7Cj4gKyAgICAgICAv Kgo+ICsgICAgICAgICogVGhlc2UgYXJlIHRoZSBkYXRhIHJhdGUgbGltaXRzIChtZWFzdXJlZCBp biBmYXN0IGNsb2NrcykKPiArICAgICAgICAqIHNpbmNlIHRob3NlIGFyZSB0aGUgc3RyaWN0ZXN0 IGxpbWl0cyB3ZSBoYXZlLiAgVGhlIGZhc3QKPiArICAgICAgICAqIGNsb2NrIGFuZCBhY3R1YWwg cmF0ZSBsaW1pdHMgYXJlIG1vcmUgcmVsYXhlZCwgc28gY2hlY2tpbmcKPiArICAgICAgICAqIHRo ZW0gd291bGQgbWFrZSBubyBkaWZmZXJlbmNlLgo+ICsgICAgICAgICovCj4gKyAgICAgICAuZG90 ID0geyAubWluID0gMjUwMDAgKiA1LCAubWF4ID0gNTQwMDAwICogNX0sCj4gKyAgICAgICAudmNv ID0geyAubWluID0gNDgwMDAwMCwgLm1heCA9IDY0ODAwMDAgfSwKPiArICAgICAgIC5uID0geyAu bWluID0gMSwgLm1heCA9IDEgfSwKPiArICAgICAgIC5tMSA9IHsgLm1pbiA9IDIsIC5tYXggPSAy IH0sCj4gKyAgICAgICAubTIgPSB7IC5taW4gPSAyNCA8PCAyMiwgLm1heCA9IDE3NSA8PCAyMiB9 LAo+ICsgICAgICAgLnAxID0geyAubWluID0gMiwgLm1heCA9IDQgfSwKPiArICAgICAgIC5wMiA9 IHsgLnAyX3Nsb3cgPSAxLCAucDJfZmFzdCA9IDE0IH0sCj4gK307Cj4gKwo+ICtzdGF0aWMgY29u c3Qgc3RydWN0IGludGVsX2xpbWl0IGludGVsX2xpbWl0c19ieHQgPSB7Cj4gKyAgICAgICAvKiBG SVhNRTogZmluZCByZWFsIGRvdCBsaW1pdHMgKi8KPiArICAgICAgIC5kb3QgPSB7IC5taW4gPSAw LCAubWF4ID0gSU5UX01BWCB9LAo+ICsgICAgICAgLnZjbyA9IHsgLm1pbiA9IDQ4MDAwMDAsIC5t YXggPSA2NzAwMDAwIH0sCj4gKyAgICAgICAubiA9IHsgLm1pbiA9IDEsIC5tYXggPSAxIH0sCj4g KyAgICAgICAubTEgPSB7IC5taW4gPSAyLCAubWF4ID0gMiB9LAo+ICsgICAgICAgLyogRklYTUU6 IGZpbmQgcmVhbCBtMiBsaW1pdHMgKi8KPiArICAgICAgIC5tMiA9IHsgLm1pbiA9IDIgPDwgMjIs IC5tYXggPSAyNTUgPDwgMjIgfSwKPiArICAgICAgIC5wMSA9IHsgLm1pbiA9IDIsIC5tYXggPSA0 IH0sCj4gKyAgICAgICAucDIgPSB7IC5wMl9zbG93ID0gMSwgLnAyX2Zhc3QgPSAyMCB9LAo+ICt9 Owo+ICsKPiArLyoKPiArICogUGxhdGZvcm0gc3BlY2lmaWMgaGVscGVycyB0byBjYWxjdWxhdGUg dGhlIHBvcnQgUExMIGxvb3BiYWNrLSAoY2xvY2subSksCj4gKyAqIGFuZCBwb3N0LWRpdmlkZXIg KGNsb2NrLnApIHZhbHVlcywgcHJlLSAoY2xvY2sudmNvKSBhbmQgcG9zdC1kaXZpZGVkIGZhc3QK PiArICogKGNsb2NrLmRvdCkgY2xvY2sgcmF0ZXMuIFRoaXMgZmFzdCBkb3QgY2xvY2sgaXMgZmVk IHRvIHRoZSBwb3J0J3MgSU8gbG9naWMuCj4gKyAqIFRoZSBoZWxwZXJzJyByZXR1cm4gdmFsdWUg aXMgdGhlIHJhdGUgb2YgdGhlIGNsb2NrIHRoYXQgaXMgZmVkIHRvIHRoZQo+ICsgKiBkaXNwbGF5 IGVuZ2luZSdzIHBpcGUgd2hpY2ggY2FuIGJlIHRoZSBhYm92ZSBmYXN0IGRvdCBjbG9jayByYXRl IG9yIGEKPiArICogZGl2aWRlZC1kb3duIHZlcnNpb24gb2YgaXQuCj4gKyAqLwo+ICsvKiBtMSBp cyByZXNlcnZlZCBhcyAwIGluIFBpbmV2aWV3LCBuIGlzIGEgcmluZyBjb3VudGVyICovCj4gK2lu dCBwbnZfY2FsY19kcGxsX3BhcmFtcyhpbnQgcmVmY2xrLCBzdHJ1Y3QgZHBsbCAqY2xvY2spCj4g K3sKPiArICAgICAgIGNsb2NrLT5tID0gY2xvY2stPm0yICsgMjsKPiArICAgICAgIGNsb2NrLT5w ID0gY2xvY2stPnAxICogY2xvY2stPnAyOwo+ICsgICAgICAgaWYgKFdBUk5fT04oY2xvY2stPm4g PT0gMCB8fCBjbG9jay0+cCA9PSAwKSkKPiArICAgICAgICAgICAgICAgcmV0dXJuIDA7Cj4gKyAg ICAgICBjbG9jay0+dmNvID0gRElWX1JPVU5EX0NMT1NFU1QocmVmY2xrICogY2xvY2stPm0sIGNs b2NrLT5uKTsKPiArICAgICAgIGNsb2NrLT5kb3QgPSBESVZfUk9VTkRfQ0xPU0VTVChjbG9jay0+ dmNvLCBjbG9jay0+cCk7Cj4gKwo+ICsgICAgICAgcmV0dXJuIGNsb2NrLT5kb3Q7Cj4gK30KPiAr Cj4gK3N0YXRpYyB1MzIgaTl4eF9kcGxsX2NvbXB1dGVfbShzdHJ1Y3QgZHBsbCAqZHBsbCkKPiAr ewo+ICsgICAgICAgcmV0dXJuIDUgKiAoZHBsbC0+bTEgKyAyKSArIChkcGxsLT5tMiArIDIpOwo+ ICt9Cj4gKwo+ICtpbnQgaTl4eF9jYWxjX2RwbGxfcGFyYW1zKGludCByZWZjbGssIHN0cnVjdCBk cGxsICpjbG9jaykKPiArewo+ICsgICAgICAgY2xvY2stPm0gPSBpOXh4X2RwbGxfY29tcHV0ZV9t KGNsb2NrKTsKPiArICAgICAgIGNsb2NrLT5wID0gY2xvY2stPnAxICogY2xvY2stPnAyOwo+ICsg ICAgICAgaWYgKFdBUk5fT04oY2xvY2stPm4gKyAyID09IDAgfHwgY2xvY2stPnAgPT0gMCkpCj4g KyAgICAgICAgICAgICAgIHJldHVybiAwOwo+ICsgICAgICAgY2xvY2stPnZjbyA9IERJVl9ST1VO RF9DTE9TRVNUKHJlZmNsayAqIGNsb2NrLT5tLCBjbG9jay0+biArIDIpOwo+ICsgICAgICAgY2xv Y2stPmRvdCA9IERJVl9ST1VORF9DTE9TRVNUKGNsb2NrLT52Y28sIGNsb2NrLT5wKTsKPiArCj4g KyAgICAgICByZXR1cm4gY2xvY2stPmRvdDsKPiArfQo+ICsKPiAraW50IHZsdl9jYWxjX2RwbGxf cGFyYW1zKGludCByZWZjbGssIHN0cnVjdCBkcGxsICpjbG9jaykKPiArewo+ICsgICAgICAgY2xv Y2stPm0gPSBjbG9jay0+bTEgKiBjbG9jay0+bTI7Cj4gKyAgICAgICBjbG9jay0+cCA9IGNsb2Nr LT5wMSAqIGNsb2NrLT5wMjsKPiArICAgICAgIGlmIChXQVJOX09OKGNsb2NrLT5uID09IDAgfHwg Y2xvY2stPnAgPT0gMCkpCj4gKyAgICAgICAgICAgICAgIHJldHVybiAwOwo+ICsgICAgICAgY2xv Y2stPnZjbyA9IERJVl9ST1VORF9DTE9TRVNUKHJlZmNsayAqIGNsb2NrLT5tLCBjbG9jay0+bik7 Cj4gKyAgICAgICBjbG9jay0+ZG90ID0gRElWX1JPVU5EX0NMT1NFU1QoY2xvY2stPnZjbywgY2xv Y2stPnApOwo+ICsKPiArICAgICAgIHJldHVybiBjbG9jay0+ZG90IC8gNTsKPiArfQo+ICsKPiAr aW50IGNodl9jYWxjX2RwbGxfcGFyYW1zKGludCByZWZjbGssIHN0cnVjdCBkcGxsICpjbG9jaykK PiArewo+ICsgICAgICAgY2xvY2stPm0gPSBjbG9jay0+bTEgKiBjbG9jay0+bTI7Cj4gKyAgICAg ICBjbG9jay0+cCA9IGNsb2NrLT5wMSAqIGNsb2NrLT5wMjsKPiArICAgICAgIGlmIChXQVJOX09O KGNsb2NrLT5uID09IDAgfHwgY2xvY2stPnAgPT0gMCkpCj4gKyAgICAgICAgICAgICAgIHJldHVy biAwOwo+ICsgICAgICAgY2xvY2stPnZjbyA9IERJVl9ST1VORF9DTE9TRVNUX1VMTChtdWxfdTMy X3UzMihyZWZjbGssIGNsb2NrLT5tKSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2xvY2stPm4gPDwgMjIpOwo+ICsgICAgICAgY2xvY2stPmRvdCA9IERJVl9S T1VORF9DTE9TRVNUKGNsb2NrLT52Y28sIGNsb2NrLT5wKTsKPiArCj4gKyAgICAgICByZXR1cm4g Y2xvY2stPmRvdCAvIDU7Cj4gK30KPiArCj4gKy8qCj4gKyAqIFJldHVybnMgd2hldGhlciB0aGUg Z2l2ZW4gc2V0IG9mIGRpdmlzb3JzIGFyZSB2YWxpZCBmb3IgYSBnaXZlbiByZWZjbGsgd2l0aAo+ ICsgKiB0aGUgZ2l2ZW4gY29ubmVjdG9ycy4KPiArICovCj4gK3N0YXRpYyBib29sIGludGVsX3Bs bF9pc192YWxpZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCAqbGltaXQsCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBkcGxsICpjbG9jaykK PiArewo+ICsgICAgICAgaWYgKGNsb2NrLT5uIDwgbGltaXQtPm4ubWluIHx8IGxpbWl0LT5uLm1h eCA8IGNsb2NrLT5uKQo+ICsgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cj4gKyAgICAgICBp ZiAoY2xvY2stPnAxIDwgbGltaXQtPnAxLm1pbiB8fCBsaW1pdC0+cDEubWF4IDwgY2xvY2stPnAx KQo+ICsgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cj4gKyAgICAgICBpZiAoY2xvY2stPm0y IDwgbGltaXQtPm0yLm1pbiB8fCBsaW1pdC0+bTIubWF4IDwgY2xvY2stPm0yKQo+ICsgICAgICAg ICAgICAgICByZXR1cm4gZmFsc2U7Cj4gKyAgICAgICBpZiAoY2xvY2stPm0xIDwgbGltaXQtPm0x Lm1pbiB8fCBsaW1pdC0+bTEubWF4IDwgY2xvY2stPm0xKQo+ICsgICAgICAgICAgICAgICByZXR1 cm4gZmFsc2U7Cj4gKwo+ICsgICAgICAgaWYgKCFJU19QSU5FVklFVyhkZXZfcHJpdikgJiYgIUlT X1ZBTExFWVZJRVcoZGV2X3ByaXYpICYmCj4gKyAgICAgICAgICAgIUlTX0NIRVJSWVZJRVcoZGV2 X3ByaXYpICYmICFJU19HRU45X0xQKGRldl9wcml2KSkKPiArICAgICAgICAgICAgICAgaWYgKGNs b2NrLT5tMSA8PSBjbG9jay0+bTIpCj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh bHNlOwo+ICsKPiArICAgICAgIGlmICghSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgJiYgIUlTX0NI RVJSWVZJRVcoZGV2X3ByaXYpICYmCj4gKyAgICAgICAgICAgIUlTX0dFTjlfTFAoZGV2X3ByaXYp KSB7Cj4gKyAgICAgICAgICAgICAgIGlmIChjbG9jay0+cCA8IGxpbWl0LT5wLm1pbiB8fCBsaW1p dC0+cC5tYXggPCBjbG9jay0+cCkKPiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs c2U7Cj4gKyAgICAgICAgICAgICAgIGlmIChjbG9jay0+bSA8IGxpbWl0LT5tLm1pbiB8fCBsaW1p dC0+bS5tYXggPCBjbG9jay0+bSkKPiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs c2U7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgaWYgKGNsb2NrLT52Y28gPCBsaW1pdC0+dmNv Lm1pbiB8fCBsaW1pdC0+dmNvLm1heCA8IGNsb2NrLT52Y28pCj4gKyAgICAgICAgICAgICAgIHJl dHVybiBmYWxzZTsKPiArICAgICAgIC8qIFhYWDogV2UgbWF5IG5lZWQgdG8gYmUgY2hlY2tpbmcg IkRvdCBjbG9jayIgZGVwZW5kaW5nIG9uIHRoZSBtdWx0aXBsaWVyLAo+ICsgICAgICAgICogY29u bmVjdG9yLCBldGMuLCByYXRoZXIgdGhhbiBqdXN0IGEgc2luZ2xlIHJhbmdlLgo+ICsgICAgICAg ICovCj4gKyAgICAgICBpZiAoY2xvY2stPmRvdCA8IGxpbWl0LT5kb3QubWluIHx8IGxpbWl0LT5k b3QubWF4IDwgY2xvY2stPmRvdCkKPiArICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+ICsK PiArICAgICAgIHJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50Cj4gK2k5eHhfc2Vs ZWN0X3AyX2Rpdihjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgKmxpbWl0LAo+ICsgICAgICAgICAg ICAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiArICAg ICAgICAgICAgICAgICAgaW50IHRhcmdldCkKPiArewo+ICsgICAgICAgc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjX3N0YXRlLT51YXBpLmNydGMtPmRldik7 Cj4gKwo+ICsgICAgICAgaWYgKGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxf T1VUUFVUX0xWRFMpKSB7Cj4gKyAgICAgICAgICAgICAgIC8qCj4gKyAgICAgICAgICAgICAgICAq IEZvciBMVkRTIGp1c3QgcmVseSBvbiBpdHMgY3VycmVudCBzZXR0aW5ncyBmb3IgZHVhbC1jaGFu bmVsLgo+ICsgICAgICAgICAgICAgICAgKiBXZSBoYXZlbid0IGZpZ3VyZWQgb3V0IGhvdyB0byBy ZWxpYWJseSBzZXQgdXAgZGlmZmVyZW50Cj4gKyAgICAgICAgICAgICAgICAqIHNpbmdsZS9kdWFs IGNoYW5uZWwgc3RhdGUsIGlmIHdlIGV2ZW4gY2FuLgo+ICsgICAgICAgICAgICAgICAgKi8KPiAr ICAgICAgICAgICAgICAgaWYgKGludGVsX2lzX2R1YWxfbGlua19sdmRzKGRldl9wcml2KSkKPiAr ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGltaXQtPnAyLnAyX2Zhc3Q7Cj4gKyAgICAg ICAgICAgICAgIGVsc2UKPiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGltaXQtPnAy LnAyX3Nsb3c7Cj4gKyAgICAgICB9IGVsc2Ugewo+ICsgICAgICAgICAgICAgICBpZiAodGFyZ2V0 IDwgbGltaXQtPnAyLmRvdF9saW1pdCkKPiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g bGltaXQtPnAyLnAyX3Nsb3c7Cj4gKyAgICAgICAgICAgICAgIGVsc2UKPiArICAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4gbGltaXQtPnAyLnAyX2Zhc3Q7Cj4gKyAgICAgICB9Cj4gK30KPiAr Cj4gKy8qCj4gKyAqIFJldHVybnMgYSBzZXQgb2YgZGl2aXNvcnMgZm9yIHRoZSBkZXNpcmVkIHRh cmdldCBjbG9jayB3aXRoIHRoZSBnaXZlbgo+ICsgKiByZWZjbGssIG9yIEZBTFNFLiAgVGhlIHJl dHVybmVkIHZhbHVlcyByZXByZXNlbnQgdGhlIGNsb2NrIGVxdWF0aW9uOgo+ICsgKiByZWZsY2sg KiAoNSAqIChtMSArIDIpICsgKG0yICsgMikpIC8gKG4gKyAyKSAvIHAxIC8gcDIuCj4gKyAqCj4g KyAqIFRhcmdldCBhbmQgcmVmZXJlbmNlIGNsb2NrcyBhcmUgc3BlY2lmaWVkIGluIGtIei4KPiAr ICoKPiArICogSWYgbWF0Y2hfY2xvY2sgaXMgcHJvdmlkZWQsIHRoZW4gYmVzdF9jbG9jayBQIGRp dmlkZXIgbXVzdCBtYXRjaCB0aGUgUAo+ICsgKiBkaXZpZGVyIGZyb20gQG1hdGNoX2Nsb2NrIHVz ZWQgZm9yIExWRFMgZG93bmNsb2NraW5nLgo+ICsgKi8KPiArc3RhdGljIGJvb2wKPiAraTl4eF9m aW5kX2Jlc3RfZHBsbChjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgKmxpbWl0LAo+ICsgICAgICAg ICAgICAgICAgICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gKyAgICAg ICAgICAgICAgICAgICBpbnQgdGFyZ2V0LCBpbnQgcmVmY2xrLCBzdHJ1Y3QgZHBsbCAqbWF0Y2hf Y2xvY2ssCj4gKyAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHBsbCAqYmVzdF9jbG9jaykKPiAr ewo+ICsgICAgICAgc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGNfc3RhdGUtPnVhcGkuY3J0 Yy0+ZGV2Owo+ICsgICAgICAgc3RydWN0IGRwbGwgY2xvY2s7Cj4gKyAgICAgICBpbnQgZXJyID0g dGFyZ2V0Owo+ICsKPiArICAgICAgIG1lbXNldChiZXN0X2Nsb2NrLCAwLCBzaXplb2YoKmJlc3Rf Y2xvY2spKTsKPiArCj4gKyAgICAgICBjbG9jay5wMiA9IGk5eHhfc2VsZWN0X3AyX2RpdihsaW1p dCwgY3J0Y19zdGF0ZSwgdGFyZ2V0KTsKPiArCj4gKyAgICAgICBmb3IgKGNsb2NrLm0xID0gbGlt aXQtPm0xLm1pbjsgY2xvY2subTEgPD0gbGltaXQtPm0xLm1heDsKPiArICAgICAgICAgICAgY2xv Y2subTErKykgewo+ICsgICAgICAgICAgICAgICBmb3IgKGNsb2NrLm0yID0gbGltaXQtPm0yLm1p bjsKPiArICAgICAgICAgICAgICAgICAgICBjbG9jay5tMiA8PSBsaW1pdC0+bTIubWF4OyBjbG9j ay5tMisrKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNsb2NrLm0yID49IGNsb2Nr Lm0xKQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAg ICAgICAgICAgICAgICAgZm9yIChjbG9jay5uID0gbGltaXQtPm4ubWluOwo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2xvY2subiA8PSBsaW1pdC0+bi5tYXg7IGNsb2NrLm4rKykgewo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjbG9jay5wMSA9IGxpbWl0LT5w MS5taW47Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrLnAx IDw9IGxpbWl0LT5wMS5tYXg7IGNsb2NrLnAxKyspIHsKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IHRoaXNfZXJyOwo+ICsKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaTl4eF9jYWxjX2RwbGxfcGFyYW1zKHJlZmNsaywgJmNsb2Nr KTsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbnRlbF9w bGxfaXNfdmFsaWQodG9faTkxNShkZXYpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdCwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNsb2Nr KSkKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250 aW51ZTsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNo X2Nsb2NrICYmCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj bG9jay5wICE9IG1hdGNoX2Nsb2NrLT5wKQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGhpc19lcnIgPSBhYnMoY2xvY2suZG90IC0gdGFyZ2V0KTsKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXNfZXJyIDwgZXJy KSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmJl c3RfY2xvY2sgPSBjbG9jazsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBlcnIgPSB0aGlzX2VycjsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQo+ICsgICAg ICAgICAgICAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgICAgfQo+ICsgICAgICAgfQo+ICsK PiArICAgICAgIHJldHVybiAoZXJyICE9IHRhcmdldCk7Cj4gK30KPiArCj4gKy8qCj4gKyAqIFJl dHVybnMgYSBzZXQgb2YgZGl2aXNvcnMgZm9yIHRoZSBkZXNpcmVkIHRhcmdldCBjbG9jayB3aXRo IHRoZSBnaXZlbgo+ICsgKiByZWZjbGssIG9yIEZBTFNFLiAgVGhlIHJldHVybmVkIHZhbHVlcyBy ZXByZXNlbnQgdGhlIGNsb2NrIGVxdWF0aW9uOgo+ICsgKiByZWZsY2sgKiAoNSAqIChtMSArIDIp ICsgKG0yICsgMikpIC8gKG4gKyAyKSAvIHAxIC8gcDIuCj4gKyAqCj4gKyAqIFRhcmdldCBhbmQg cmVmZXJlbmNlIGNsb2NrcyBhcmUgc3BlY2lmaWVkIGluIGtIei4KPiArICoKPiArICogSWYgbWF0 Y2hfY2xvY2sgaXMgcHJvdmlkZWQsIHRoZW4gYmVzdF9jbG9jayBQIGRpdmlkZXIgbXVzdCBtYXRj aCB0aGUgUAo+ICsgKiBkaXZpZGVyIGZyb20gQG1hdGNoX2Nsb2NrIHVzZWQgZm9yIExWRFMgZG93 bmNsb2NraW5nLgo+ICsgKi8KPiArc3RhdGljIGJvb2wKPiArcG52X2ZpbmRfYmVzdF9kcGxsKGNv bnN0IHN0cnVjdCBpbnRlbF9saW1pdCAqbGltaXQsCj4gKyAgICAgICAgICAgICAgICAgIHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ICsgICAgICAgICAgICAgICAgICBpbnQg dGFyZ2V0LCBpbnQgcmVmY2xrLCBzdHJ1Y3QgZHBsbCAqbWF0Y2hfY2xvY2ssCj4gKyAgICAgICAg ICAgICAgICAgIHN0cnVjdCBkcGxsICpiZXN0X2Nsb2NrKQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gY3J0Y19zdGF0ZS0+dWFwaS5jcnRjLT5kZXY7Cj4gKyAgICAgICBz dHJ1Y3QgZHBsbCBjbG9jazsKPiArICAgICAgIGludCBlcnIgPSB0YXJnZXQ7Cj4gKwo+ICsgICAg ICAgbWVtc2V0KGJlc3RfY2xvY2ssIDAsIHNpemVvZigqYmVzdF9jbG9jaykpOwo+ICsKPiArICAg ICAgIGNsb2NrLnAyID0gaTl4eF9zZWxlY3RfcDJfZGl2KGxpbWl0LCBjcnRjX3N0YXRlLCB0YXJn ZXQpOwo+ICsKPiArICAgICAgIGZvciAoY2xvY2subTEgPSBsaW1pdC0+bTEubWluOyBjbG9jay5t MSA8PSBsaW1pdC0+bTEubWF4Owo+ICsgICAgICAgICAgICBjbG9jay5tMSsrKSB7Cj4gKyAgICAg ICAgICAgICAgIGZvciAoY2xvY2subTIgPSBsaW1pdC0+bTIubWluOwo+ICsgICAgICAgICAgICAg ICAgICAgIGNsb2NrLm0yIDw9IGxpbWl0LT5tMi5tYXg7IGNsb2NrLm0yKyspIHsKPiArICAgICAg ICAgICAgICAgICAgICAgICBmb3IgKGNsb2NrLm4gPSBsaW1pdC0+bi5taW47Cj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjbG9jay5uIDw9IGxpbWl0LT5uLm1heDsgY2xvY2subisrKSB7 Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNsb2NrLnAxID0gbGltaXQt PnAxLm1pbjsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2su cDEgPD0gbGltaXQtPnAxLm1heDsgY2xvY2sucDErKykgewo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgdGhpc19lcnI7Cj4gKwo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwbnZfY2FsY19kcGxsX3BhcmFtcyhyZWZjbGssICZjbG9j ayk7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaW50ZWxf cGxsX2lzX3ZhbGlkKHRvX2k5MTUoZGV2KSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQsCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjbG9j aykpCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u dGludWU7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRj aF9jbG9jayAmJgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2xvY2sucCAhPSBtYXRjaF9jbG9jay0+cCkKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPiArCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRoaXNfZXJyID0gYWJzKGNsb2NrLmRvdCAtIHRhcmdldCk7Cj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzX2VyciA8IGVy cikgewo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpi ZXN0X2Nsb2NrID0gY2xvY2s7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZXJyID0gdGhpc19lcnI7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KPiArICAg ICAgICAgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgICAgIH0KPiArICAgICAgIH0KPiAr Cj4gKyAgICAgICByZXR1cm4gKGVyciAhPSB0YXJnZXQpOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBS ZXR1cm5zIGEgc2V0IG9mIGRpdmlzb3JzIGZvciB0aGUgZGVzaXJlZCB0YXJnZXQgY2xvY2sgd2l0 aCB0aGUgZ2l2ZW4KPiArICogcmVmY2xrLCBvciBGQUxTRS4gIFRoZSByZXR1cm5lZCB2YWx1ZXMg cmVwcmVzZW50IHRoZSBjbG9jayBlcXVhdGlvbjoKPiArICogcmVmbGNrICogKDUgKiAobTEgKyAy KSArIChtMiArIDIpKSAvIChuICsgMikgLyBwMSAvIHAyLgo+ICsgKgo+ICsgKiBUYXJnZXQgYW5k IHJlZmVyZW5jZSBjbG9ja3MgYXJlIHNwZWNpZmllZCBpbiBrSHouCj4gKyAqCj4gKyAqIElmIG1h dGNoX2Nsb2NrIGlzIHByb3ZpZGVkLCB0aGVuIGJlc3RfY2xvY2sgUCBkaXZpZGVyIG11c3QgbWF0 Y2ggdGhlIFAKPiArICogZGl2aWRlciBmcm9tIEBtYXRjaF9jbG9jayB1c2VkIGZvciBMVkRTIGRv d25jbG9ja2luZy4KPiArICovCj4gK3N0YXRpYyBib29sCj4gK2c0eF9maW5kX2Jlc3RfZHBsbChj b25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgKmxpbWl0LAo+ICsgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiArICAgICAgICAgICAgICAgICAgaW50 IHRhcmdldCwgaW50IHJlZmNsaywgc3RydWN0IGRwbGwgKm1hdGNoX2Nsb2NrLAo+ICsgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgZHBsbCAqYmVzdF9jbG9jaykKPiArewo+ICsgICAgICAgc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IGNydGNfc3RhdGUtPnVhcGkuY3J0Yy0+ZGV2Owo+ICsgICAgICAg c3RydWN0IGRwbGwgY2xvY2s7Cj4gKyAgICAgICBpbnQgbWF4X247Cj4gKyAgICAgICBib29sIGZv dW5kID0gZmFsc2U7Cj4gKyAgICAgICAvKiBhcHByb3hpbWF0ZWx5IGVxdWFscyB0YXJnZXQgKiAw LjAwNTg1ICovCj4gKyAgICAgICBpbnQgZXJyX21vc3QgPSAodGFyZ2V0ID4+IDgpICsgKHRhcmdl dCA+PiA5KTsKPiArCj4gKyAgICAgICBtZW1zZXQoYmVzdF9jbG9jaywgMCwgc2l6ZW9mKCpiZXN0 X2Nsb2NrKSk7Cj4gKwo+ICsgICAgICAgY2xvY2sucDIgPSBpOXh4X3NlbGVjdF9wMl9kaXYobGlt aXQsIGNydGNfc3RhdGUsIHRhcmdldCk7Cj4gKwo+ICsgICAgICAgbWF4X24gPSBsaW1pdC0+bi5t YXg7Cj4gKyAgICAgICAvKiBiYXNlZCBvbiBoYXJkd2FyZSByZXF1aXJlbWVudCwgcHJlZmVyIHNt YWxsZXIgbiB0byBwcmVjaXNpb24gKi8KPiArICAgICAgIGZvciAoY2xvY2subiA9IGxpbWl0LT5u Lm1pbjsgY2xvY2subiA8PSBtYXhfbjsgY2xvY2subisrKSB7Cj4gKyAgICAgICAgICAgICAgIC8q IGJhc2VkIG9uIGhhcmR3YXJlIHJlcXVpcmVtZW50LCBwcmVmZXJlIGxhcmdlciBtMSxtMiAqLwo+ ICsgICAgICAgICAgICAgICBmb3IgKGNsb2NrLm0xID0gbGltaXQtPm0xLm1heDsKPiArICAgICAg ICAgICAgICAgICAgICBjbG9jay5tMSA+PSBsaW1pdC0+bTEubWluOyBjbG9jay5tMS0tKSB7Cj4g KyAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjbG9jay5tMiA9IGxpbWl0LT5tMi5tYXg7Cj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9jay5tMiA+PSBsaW1pdC0+bTIubWluOyBj bG9jay5tMi0tKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNsb2Nr LnAxID0gbGltaXQtPnAxLm1heDsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2xvY2sucDEgPj0gbGltaXQtPnAxLm1pbjsgY2xvY2sucDEtLSkgewo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGhpc19lcnI7Cj4gKwo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpOXh4X2NhbGNfZHBsbF9wYXJhbXMocmVm Y2xrLCAmY2xvY2spOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoIWludGVsX3BsbF9pc192YWxpZCh0b19pOTE1KGRldiksCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0LAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmY2xvY2spKQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnRpbnVlOwo+ICsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGhpc19lcnIgPSBhYnMoY2xvY2suZG90IC0gdGFyZ2V0KTsKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXNfZXJyIDwgZXJyX21vc3QpIHsKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYmVzdF9jbG9j ayA9IGNsb2NrOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGVycl9tb3N0ID0gdGhpc19lcnI7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbWF4X24gPSBjbG9jay5uOwo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfQo+ICsgICAgICAgICAgICAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgICAgfQo+ ICsgICAgICAgfQo+ICsgICAgICAgcmV0dXJuIGZvdW5kOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBD aGVjayBpZiB0aGUgY2FsY3VsYXRlZCBQTEwgY29uZmlndXJhdGlvbiBpcyBtb3JlIG9wdGltYWwg Y29tcGFyZWQgdG8gdGhlCj4gKyAqIGJlc3QgY29uZmlndXJhdGlvbiBhbmQgZXJyb3IgZm91bmQg c28gZmFyLiBSZXR1cm4gdGhlIGNhbGN1bGF0ZWQgZXJyb3IuCj4gKyAqLwo+ICtzdGF0aWMgYm9v bCB2bHZfUExMX2lzX29wdGltYWwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHRhcmdldF9m cmVxLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZHBsbCAq Y2FsY3VsYXRlZF9jbG9jaywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg c3RydWN0IGRwbGwgKmJlc3RfY2xvY2ssCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGludCBiZXN0X2Vycm9yX3BwbSwKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgaW50ICplcnJvcl9wcG0pCj4gK3sKPiArICAgICAgIC8qCj4gKyAgICAg ICAgKiBGb3IgQ0hWIGlnbm9yZSB0aGUgZXJyb3IgYW5kIGNvbnNpZGVyIG9ubHkgdGhlIFAgdmFs dWUuCj4gKyAgICAgICAgKiBQcmVmZXIgYSBiaWdnZXIgUCB2YWx1ZSBiYXNlZCBvbiBIVyByZXF1 aXJlbWVudHMuCj4gKyAgICAgICAgKi8KPiArICAgICAgIGlmIChJU19DSEVSUllWSUVXKHRvX2k5 MTUoZGV2KSkpIHsKPiArICAgICAgICAgICAgICAgKmVycm9yX3BwbSA9IDA7Cj4gKwo+ICsgICAg ICAgICAgICAgICByZXR1cm4gY2FsY3VsYXRlZF9jbG9jay0+cCA+IGJlc3RfY2xvY2stPnA7Cj4g KyAgICAgICB9Cj4gKwo+ICsgICAgICAgaWYgKGRybV9XQVJOX09OX09OQ0UoZGV2LCAhdGFyZ2V0 X2ZyZXEpKQo+ICsgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cj4gKwo+ICsgICAgICAgKmVy cm9yX3BwbSA9IGRpdl91NjQoMTAwMDAwMFVMTCAqCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBhYnModGFyZ2V0X2ZyZXEgLSBjYWxjdWxhdGVkX2Nsb2NrLT5kb3QpLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2ZyZXEpOwo+ICsgICAgICAgLyoKPiArICAg ICAgICAqIFByZWZlciBhIGJldHRlciBQIHZhbHVlIG92ZXIgYSBiZXR0ZXIgKHNtYWxsZXIpIGVy cm9yIGlmIHRoZSBlcnJvcgo+ICsgICAgICAgICogaXMgc21hbGwuIEVuc3VyZSB0aGlzIHByZWZl cmVuY2UgZm9yIGZ1dHVyZSBjb25maWd1cmF0aW9ucyB0b28gYnkKPiArICAgICAgICAqIHNldHRp bmcgdGhlIGVycm9yIHRvIDAuCj4gKyAgICAgICAgKi8KPiArICAgICAgIGlmICgqZXJyb3JfcHBt IDwgMTAwICYmIGNhbGN1bGF0ZWRfY2xvY2stPnAgPiBiZXN0X2Nsb2NrLT5wKSB7Cj4gKyAgICAg ICAgICAgICAgICplcnJvcl9wcG0gPSAwOwo+ICsKPiArICAgICAgICAgICAgICAgcmV0dXJuIHRy dWU7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgcmV0dXJuICplcnJvcl9wcG0gKyAxMCA8IGJl c3RfZXJyb3JfcHBtOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBSZXR1cm5zIGEgc2V0IG9mIGRpdmlz b3JzIGZvciB0aGUgZGVzaXJlZCB0YXJnZXQgY2xvY2sgd2l0aCB0aGUgZ2l2ZW4KPiArICogcmVm Y2xrLCBvciBGQUxTRS4gIFRoZSByZXR1cm5lZCB2YWx1ZXMgcmVwcmVzZW50IHRoZSBjbG9jayBl cXVhdGlvbjoKPiArICogcmVmbGNrICogKDUgKiAobTEgKyAyKSArIChtMiArIDIpKSAvIChuICsg MikgLyBwMSAvIHAyLgo+ICsgKi8KPiArc3RhdGljIGJvb2wKPiArdmx2X2ZpbmRfYmVzdF9kcGxs KGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCAqbGltaXQsCj4gKyAgICAgICAgICAgICAgICAgIHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ICsgICAgICAgICAgICAgICAgICBp bnQgdGFyZ2V0LCBpbnQgcmVmY2xrLCBzdHJ1Y3QgZHBsbCAqbWF0Y2hfY2xvY2ssCj4gKyAgICAg ICAgICAgICAgICAgIHN0cnVjdCBkcGxsICpiZXN0X2Nsb2NrKQo+ICt7Cj4gKyAgICAgICBzdHJ1 Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+dWFwaS5jcnRj KTsKPiArICAgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKPiAr ICAgICAgIHN0cnVjdCBkcGxsIGNsb2NrOwo+ICsgICAgICAgdW5zaWduZWQgaW50IGJlc3RwcG0g PSAxMDAwMDAwOwo+ICsgICAgICAgLyogbWluIHVwZGF0ZSAxOS4yIE1IeiAqLwo+ICsgICAgICAg aW50IG1heF9uID0gbWluKGxpbWl0LT5uLm1heCwgcmVmY2xrIC8gMTkyMDApOwo+ICsgICAgICAg Ym9vbCBmb3VuZCA9IGZhbHNlOwo+ICsKPiArICAgICAgIHRhcmdldCAqPSA1OyAvKiBmYXN0IGNs b2NrICovCj4gKwo+ICsgICAgICAgbWVtc2V0KGJlc3RfY2xvY2ssIDAsIHNpemVvZigqYmVzdF9j bG9jaykpOwo+ICsKPiArICAgICAgIC8qIGJhc2VkIG9uIGhhcmR3YXJlIHJlcXVpcmVtZW50LCBw cmVmZXIgc21hbGxlciBuIHRvIHByZWNpc2lvbiAqLwo+ICsgICAgICAgZm9yIChjbG9jay5uID0g bGltaXQtPm4ubWluOyBjbG9jay5uIDw9IG1heF9uOyBjbG9jay5uKyspIHsKPiArICAgICAgICAg ICAgICAgZm9yIChjbG9jay5wMSA9IGxpbWl0LT5wMS5tYXg7IGNsb2NrLnAxID49IGxpbWl0LT5w MS5taW47IGNsb2NrLnAxLS0pIHsKPiArICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNsb2Nr LnAyID0gbGltaXQtPnAyLnAyX2Zhc3Q7IGNsb2NrLnAyID49IGxpbWl0LT5wMi5wMl9zbG93Owo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2sucDIgLT0gY2xvY2sucDIgPiAxMCA/ IDIgOiAxKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9jay5wID0gY2xv Y2sucDEgKiBjbG9jay5wMjsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJh c2VkIG9uIGhhcmR3YXJlIHJlcXVpcmVtZW50LCBwcmVmZXIgYmlnZ2VyIG0xLG0yIHZhbHVlcyAq Lwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjbG9jay5tMSA9IGxpbWl0 LT5tMS5taW47IGNsb2NrLm0xIDw9IGxpbWl0LT5tMS5tYXg7IGNsb2NrLm0xKyspIHsKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBwbTsKPiAr Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrLm0yID0gRElW X1JPVU5EX0NMT1NFU1QodGFyZ2V0ICogY2xvY2sucCAqIGNsb2NrLm4sCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cmVmY2xrICogY2xvY2subTEpOwo+ICsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdmx2X2NhbGNfZHBsbF9wYXJhbXMocmVmY2xrLCAmY2xvY2spOwo+ICsKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbnRlbF9wbGxfaXNfdmFs aWQodG9faTkxNShkZXYpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdCwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNsb2NrKSkKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPiAr Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmx2X1BMTF9p c19vcHRpbWFsKGRldiwgdGFyZ2V0LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2xvY2ssCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RfY2xv Y2ssCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJlc3RwcG0sICZwcG0pKQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKmJlc3RfY2xvY2sgPSBjbG9jazsKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVzdHBwbSA9IHBwbTsKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICAgICAgICAgICAgIH0KPiArICAgICAg ICAgICAgICAgfQo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIHJldHVybiBmb3VuZDsKPiArfQo+ ICsKPiArLyoKPiArICogUmV0dXJucyBhIHNldCBvZiBkaXZpc29ycyBmb3IgdGhlIGRlc2lyZWQg dGFyZ2V0IGNsb2NrIHdpdGggdGhlIGdpdmVuCj4gKyAqIHJlZmNsaywgb3IgRkFMU0UuICBUaGUg cmV0dXJuZWQgdmFsdWVzIHJlcHJlc2VudCB0aGUgY2xvY2sgZXF1YXRpb246Cj4gKyAqIHJlZmxj ayAqICg1ICogKG0xICsgMikgKyAobTIgKyAyKSkgLyAobiArIDIpIC8gcDEgLyBwMi4KPiArICov Cj4gK3N0YXRpYyBib29sCj4gK2Nodl9maW5kX2Jlc3RfZHBsbChjb25zdCBzdHJ1Y3QgaW50ZWxf bGltaXQgKmxpbWl0LAo+ICsgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqY3J0Y19zdGF0ZSwKPiArICAgICAgICAgICAgICAgICAgaW50IHRhcmdldCwgaW50IHJlZmNs aywgc3RydWN0IGRwbGwgKm1hdGNoX2Nsb2NrLAo+ICsgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg ZHBsbCAqYmVzdF9jbG9jaykKPiArewo+ICsgICAgICAgc3RydWN0IGludGVsX2NydGMgKmNydGMg PSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPnVhcGkuY3J0Yyk7Cj4gKyAgICAgICBzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7Cj4gKyAgICAgICB1bnNpZ25lZCBpbnQg YmVzdF9lcnJvcl9wcG07Cj4gKyAgICAgICBzdHJ1Y3QgZHBsbCBjbG9jazsKPiArICAgICAgIHU2 NCBtMjsKPiArICAgICAgIGludCBmb3VuZCA9IGZhbHNlOwo+ICsKPiArICAgICAgIG1lbXNldChi ZXN0X2Nsb2NrLCAwLCBzaXplb2YoKmJlc3RfY2xvY2spKTsKPiArICAgICAgIGJlc3RfZXJyb3Jf cHBtID0gMTAwMDAwMDsKPiArCj4gKyAgICAgICAvKgo+ICsgICAgICAgICogQmFzZWQgb24gaGFy ZHdhcmUgZG9jLCB0aGUgbiBhbHdheXMgc2V0IHRvIDEsIGFuZCBtMSBhbHdheXMKPiArICAgICAg ICAqIHNldCB0byAyLiAgSWYgcmVxdWlyZXMgdG8gc3VwcG9ydCAyMDBNaHogcmVmY2xrLCB3ZSBu ZWVkIHRvCj4gKyAgICAgICAgKiByZXZpc2l0IHRoaXMgYmVjYXVzZSBuIG1heSBub3QgMSBhbnlt b3JlLgo+ICsgICAgICAgICovCj4gKyAgICAgICBjbG9jay5uID0gMTsKPiArICAgICAgIGNsb2Nr Lm0xID0gMjsKPiArICAgICAgIHRhcmdldCAqPSA1OyAgICAvKiBmYXN0IGNsb2NrICovCj4gKwo+ ICsgICAgICAgZm9yIChjbG9jay5wMSA9IGxpbWl0LT5wMS5tYXg7IGNsb2NrLnAxID49IGxpbWl0 LT5wMS5taW47IGNsb2NrLnAxLS0pIHsKPiArICAgICAgICAgICAgICAgZm9yIChjbG9jay5wMiA9 IGxpbWl0LT5wMi5wMl9mYXN0Owo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xv Y2sucDIgPj0gbGltaXQtPnAyLnAyX3Nsb3c7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjbG9jay5wMiAtPSBjbG9jay5wMiA+IDEwID8gMiA6IDEpIHsKPiArICAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBpbnQgZXJyb3JfcHBtOwo+ICsKPiArICAgICAgICAgICAgICAg ICAgICAgICBjbG9jay5wID0gY2xvY2sucDEgKiBjbG9jay5wMjsKPiArCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgbTIgPSBESVZfUk9VTkRfQ0xPU0VTVF9VTEwobXVsX3UzMl91MzIodGFyZ2V0 LCBjbG9jay5wICogY2xvY2subikgPDwgMjIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmVmY2xrICogY2xvY2subTEpOwo+ICsKPiArICAgICAg ICAgICAgICAgICAgICAgICBpZiAobTIgPiBJTlRfTUFYL2Nsb2NrLm0xKQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4gKwo+ICsgICAgICAgICAgICAgICAgICAg ICAgIGNsb2NrLm0yID0gbTI7Cj4gKwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGNodl9jYWxj X2RwbGxfcGFyYW1zKHJlZmNsaywgJmNsb2NrKTsKPiArCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgaWYgKCFpbnRlbF9wbGxfaXNfdmFsaWQodG9faTkxNShkZXYpLCBsaW1pdCwgJmNsb2NrKSkK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsKPiArICAgICAg ICAgICAgICAgICAgICAgICBpZiAoIXZsdl9QTExfaXNfb3B0aW1hbChkZXYsIHRhcmdldCwgJmNs b2NrLCBiZXN0X2Nsb2NrLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJlc3RfZXJyb3JfcHBtLCAmZXJyb3JfcHBtKSkKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsKPiArICAgICAgICAgICAgICAgICAgICAgICAq YmVzdF9jbG9jayA9IGNsb2NrOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGJlc3RfZXJyb3Jf cHBtID0gZXJyb3JfcHBtOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsK PiArICAgICAgICAgICAgICAgfQo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIHJldHVybiBmb3Vu ZDsKPiArfQo+ICsKPiArYm9vbCBieHRfZmluZF9iZXN0X2RwbGwoc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRwbGwg KmJlc3RfY2xvY2spCj4gK3sKPiArICAgICAgIGludCByZWZjbGsgPSAxMDAwMDA7Cj4gKyAgICAg ICBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgKmxpbWl0ID0gJmludGVsX2xpbWl0c19ieHQ7Cj4g Kwo+ICsgICAgICAgcmV0dXJuIGNodl9maW5kX2Jlc3RfZHBsbChsaW1pdCwgY3J0Y19zdGF0ZSwK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3J0Y19zdGF0ZS0+cG9ydF9jbG9j aywgcmVmY2xrLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBiZXN0 X2Nsb2NrKTsKPiArfQo+ICsKPiArc3RhdGljIHUzMiBwbnZfZHBsbF9jb21wdXRlX2ZwKHN0cnVj dCBkcGxsICpkcGxsKQo+ICt7Cj4gKyAgICAgICByZXR1cm4gKDEgPDwgZHBsbC0+bikgPDwgMTYg fCBkcGxsLT5tMjsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaTl4eF91cGRhdGVfcGxsX2Rpdmlk ZXJzKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRwbGwgKnJlZHVjZWRfY2xvY2sp Cj4gK3sKPiArICAgICAgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5 MTUoY3J0Yy0+YmFzZS5kZXYpOwo+ICsgICAgICAgdTMyIGZwLCBmcDIgPSAwOwo+ICsKPiArICAg ICAgIGlmIChJU19QSU5FVklFVyhkZXZfcHJpdikpIHsKPiArICAgICAgICAgICAgICAgZnAgPSBw bnZfZHBsbF9jb21wdXRlX2ZwKCZjcnRjX3N0YXRlLT5kcGxsKTsKPiArICAgICAgICAgICAgICAg aWYgKHJlZHVjZWRfY2xvY2spCj4gKyAgICAgICAgICAgICAgICAgICAgICAgZnAyID0gcG52X2Rw bGxfY29tcHV0ZV9mcChyZWR1Y2VkX2Nsb2NrKTsKPiArICAgICAgIH0gZWxzZSB7Cj4gKyAgICAg ICAgICAgICAgIGZwID0gaTl4eF9kcGxsX2NvbXB1dGVfZnAoJmNydGNfc3RhdGUtPmRwbGwpOwo+ ICsgICAgICAgICAgICAgICBpZiAocmVkdWNlZF9jbG9jaykKPiArICAgICAgICAgICAgICAgICAg ICAgICBmcDIgPSBpOXh4X2RwbGxfY29tcHV0ZV9mcChyZWR1Y2VkX2Nsb2NrKTsKPiArICAgICAg IH0KPiArCj4gKyAgICAgICBjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlLmZwMCA9IGZwOwo+ICsK PiArICAgICAgIGlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBV VF9MVkRTKSAmJgo+ICsgICAgICAgICAgIHJlZHVjZWRfY2xvY2spIHsKPiArICAgICAgICAgICAg ICAgY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZS5mcDEgPSBmcDI7Cj4gKyAgICAgICB9IGVsc2Ug ewo+ICsgICAgICAgICAgICAgICBjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlLmZwMSA9IGZwOwo+ ICsgICAgICAgfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpOXh4X2NvbXB1dGVfZHBsbChzdHJ1 Y3QgaW50ZWxfY3J0YyAqY3J0YywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgZHBsbCAqcmVkdWNlZF9jbG9jaykKPiArewo+ICsgICAgICAgc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7Cj4g KyAgICAgICB1MzIgZHBsbDsKPiArICAgICAgIHN0cnVjdCBkcGxsICpjbG9jayA9ICZjcnRjX3N0 YXRlLT5kcGxsOwo+ICsKPiArICAgICAgIGk5eHhfdXBkYXRlX3BsbF9kaXZpZGVycyhjcnRjLCBj cnRjX3N0YXRlLCByZWR1Y2VkX2Nsb2NrKTsKPiArCj4gKyAgICAgICBkcGxsID0gRFBMTF9WR0Ff TU9ERV9ESVM7Cj4gKwo+ICsgICAgICAgaWYgKGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0 ZSwgSU5URUxfT1VUUFVUX0xWRFMpKQo+ICsgICAgICAgICAgICAgICBkcGxsIHw9IERQTExCX01P REVfTFZEUzsKPiArICAgICAgIGVsc2UKPiArICAgICAgICAgICAgICAgZHBsbCB8PSBEUExMQl9N T0RFX0RBQ19TRVJJQUw7Cj4gKwo+ICsgICAgICAgaWYgKElTX0k5NDVHKGRldl9wcml2KSB8fCBJ U19JOTQ1R00oZGV2X3ByaXYpIHx8Cj4gKyAgICAgICAgICAgSVNfRzMzKGRldl9wcml2KSB8fCBJ U19QSU5FVklFVyhkZXZfcHJpdikpIHsKPiArICAgICAgICAgICAgICAgZHBsbCB8PSAoY3J0Y19z dGF0ZS0+cGl4ZWxfbXVsdGlwbGllciAtIDEpCj4gKyAgICAgICAgICAgICAgICAgICAgICAgPDwg U0RWT19NVUxUSVBMSUVSX1NISUZUX0hJUkVTOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIGlm IChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9TRFZPKSB8fAo+ ICsgICAgICAgICAgIGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVU X0hETUkpKQo+ICsgICAgICAgICAgICAgICBkcGxsIHw9IERQTExfU0RWT19ISUdIX1NQRUVEOwo+ ICsKPiArICAgICAgIGlmIChpbnRlbF9jcnRjX2hhc19kcF9lbmNvZGVyKGNydGNfc3RhdGUpKQo+ ICsgICAgICAgICAgICAgICBkcGxsIHw9IERQTExfU0RWT19ISUdIX1NQRUVEOwo+ICsKPiArICAg ICAgIC8qIGNvbXB1dGUgYml0bWFzayBmcm9tIHAxIHZhbHVlICovCj4gKyAgICAgICBpZiAoSVNf UElORVZJRVcoZGV2X3ByaXYpKQo+ICsgICAgICAgICAgICAgICBkcGxsIHw9ICgxIDw8IChjbG9j ay0+cDEgLSAxKSkgPDwgRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9TSElGVF9QSU5FVklFVzsKPiAr ICAgICAgIGVsc2Ugewo+ICsgICAgICAgICAgICAgICBkcGxsIHw9ICgxIDw8IChjbG9jay0+cDEg LSAxKSkgPDwgRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9TSElGVDsKPiArICAgICAgICAgICAgICAg aWYgKElTX0c0WChkZXZfcHJpdikgJiYgcmVkdWNlZF9jbG9jaykKPiArICAgICAgICAgICAgICAg ICAgICAgICBkcGxsIHw9ICgxIDw8IChyZWR1Y2VkX2Nsb2NrLT5wMSAtIDEpKSA8PCBEUExMX0ZQ QTFfUDFfUE9TVF9ESVZfU0hJRlQ7Cj4gKyAgICAgICB9Cj4gKyAgICAgICBzd2l0Y2ggKGNsb2Nr LT5wMikgewo+ICsgICAgICAgY2FzZSA1Ogo+ICsgICAgICAgICAgICAgICBkcGxsIHw9IERQTExf REFDX1NFUklBTF9QMl9DTE9DS19ESVZfNTsKPiArICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAg ICAgICBjYXNlIDc6Cj4gKyAgICAgICAgICAgICAgIGRwbGwgfD0gRFBMTEJfTFZEU19QMl9DTE9D S19ESVZfNzsKPiArICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICBjYXNlIDEwOgo+ICsg ICAgICAgICAgICAgICBkcGxsIHw9IERQTExfREFDX1NFUklBTF9QMl9DTE9DS19ESVZfMTA7Cj4g KyAgICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgY2FzZSAxNDoKPiArICAgICAgICAgICAg ICAgZHBsbCB8PSBEUExMQl9MVkRTX1AyX0NMT0NLX0RJVl8xNDsKPiArICAgICAgICAgICAgICAg YnJlYWs7Cj4gKyAgICAgICB9Cj4gKyAgICAgICBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA0 KQo+ICsgICAgICAgICAgICAgICBkcGxsIHw9ICg2IDw8IFBMTF9MT0FEX1BVTFNFX1BIQVNFX1NI SUZUKTsKPiArCj4gKyAgICAgICBpZiAoY3J0Y19zdGF0ZS0+c2R2b190dl9jbG9jaykKPiArICAg ICAgICAgICAgICAgZHBsbCB8PSBQTExfUkVGX0lOUFVUX1RWQ0xLSU5CQzsKPiArICAgICAgIGVs c2UgaWYgKGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0xWRFMp ICYmCj4gKyAgICAgICAgICAgICAgICBpbnRlbF9wYW5lbF91c2Vfc3NjKGRldl9wcml2KSkKPiAr ICAgICAgICAgICAgICAgZHBsbCB8PSBQTExCX1JFRl9JTlBVVF9TUFJFQURTUEVDVFJVTUlOOwo+ ICsgICAgICAgZWxzZQo+ICsgICAgICAgICAgICAgICBkcGxsIHw9IFBMTF9SRUZfSU5QVVRfRFJF RkNMSzsKPiArCj4gKyAgICAgICBkcGxsIHw9IERQTExfVkNPX0VOQUJMRTsKPiArICAgICAgIGNy dGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUuZHBsbCA9IGRwbGw7Cj4gKwo+ICsgICAgICAgaWYgKElO VEVMX0dFTihkZXZfcHJpdikgPj0gNCkgewo+ICsgICAgICAgICAgICAgICB1MzIgZHBsbF9tZCA9 IChjcnRjX3N0YXRlLT5waXhlbF9tdWx0aXBsaWVyIC0gMSkKPiArICAgICAgICAgICAgICAgICAg ICAgICA8PCBEUExMX01EX1VESV9NVUxUSVBMSUVSX1NISUZUOwo+ICsgICAgICAgICAgICAgICBj cnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlLmRwbGxfbWQgPSBkcGxsX21kOwo+ICsgICAgICAgfQo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpOHh4X2NvbXB1dGVfZHBsbChzdHJ1Y3QgaW50ZWxfY3J0 YyAqY3J0YywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgZHBsbCAqcmVkdWNlZF9jbG9jaykKPiArewo+ICsgICAgICAgc3RydWN0IGRybV9kZXZpY2Ug KmRldiA9IGNydGMtPmJhc2UuZGV2Owo+ICsgICAgICAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gdG9faTkxNShkZXYpOwo+ICsgICAgICAgdTMyIGRwbGw7Cj4gKyAgICAgICBz dHJ1Y3QgZHBsbCAqY2xvY2sgPSAmY3J0Y19zdGF0ZS0+ZHBsbDsKPiArCj4gKyAgICAgICBpOXh4 X3VwZGF0ZV9wbGxfZGl2aWRlcnMoY3J0YywgY3J0Y19zdGF0ZSwgcmVkdWNlZF9jbG9jayk7Cj4g Kwo+ICsgICAgICAgZHBsbCA9IERQTExfVkdBX01PREVfRElTOwo+ICsKPiArICAgICAgIGlmIChp bnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9MVkRTKSkgewo+ICsg ICAgICAgICAgICAgICBkcGxsIHw9ICgxIDw8IChjbG9jay0+cDEgLSAxKSkgPDwgRFBMTF9GUEEw MV9QMV9QT1NUX0RJVl9TSElGVDsKPiArICAgICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgICAgICAg IGlmIChjbG9jay0+cDEgPT0gMikKPiArICAgICAgICAgICAgICAgICAgICAgICBkcGxsIHw9IFBM TF9QMV9ESVZJREVfQllfVFdPOwo+ICsgICAgICAgICAgICAgICBlbHNlCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgZHBsbCB8PSAoY2xvY2stPnAxIC0gMikgPDwgRFBMTF9GUEEwMV9QMV9QT1NU X0RJVl9TSElGVDsKPiArICAgICAgICAgICAgICAgaWYgKGNsb2NrLT5wMiA9PSA0KQo+ICsgICAg ICAgICAgICAgICAgICAgICAgIGRwbGwgfD0gUExMX1AyX0RJVklERV9CWV80Owo+ICsgICAgICAg fQo+ICsKPiArICAgICAgIC8qCj4gKyAgICAgICAgKiBCc3BlYzoKPiArICAgICAgICAqICJbQWxt YWRvciBFcnJhdGF9OiBGb3IgdGhlIGNvcnJlY3Qgb3BlcmF0aW9uIG9mIHRoZSBtdXhlZCBEVk8g cGlucwo+ICsgICAgICAgICogIChHREVWU0VMQi9JMkNkYXRhLCBHSVJEQlkvSTJDQ2xrKSBhbmQg KEdGUkFNRUIvRFZJX0RhdGEsCj4gKyAgICAgICAgKiAgR1RSRFlCL0RWSV9DbGspOiBCaXQgMzEg KERQTEwgVkNPIEVuYWJsZSkgYW5kIEJpdCAzMCAoMlggQ2xvY2sKPiArICAgICAgICAqICBFbmFi bGUpIG11c3QgYmUgc2V0IHRvIOKAnDHigJ0gaW4gYm90aCB0aGUgRFBMTCBBIENvbnRyb2wgUmVn aXN0ZXIKPiArICAgICAgICAqICAoMDYwMTRoLTA2MDE3aCkgYW5kIERQTEwgQiBDb250cm9sIFJl Z2lzdGVyICgwNjAxOGgtMDYwMUJoKS4iCj4gKyAgICAgICAgKgo+ICsgICAgICAgICogRm9yIHNp bXBsaWNpdHkgV2Ugc2ltcGx5IGtlZXAgYm90aCBiaXRzIGFsd2F5cyBlbmFibGVkIGluCj4gKyAg ICAgICAgKiBib3RoIERQTExTLiBUaGUgc3BlYyBzYXlzIHdlIHNob3VsZCBkaXNhYmxlIHRoZSBE Vk8gMlggY2xvY2sKPiArICAgICAgICAqIHdoZW4gbm90IG5lZWRlZCwgYnV0IHRoaXMgc2VlbXMg dG8gd29yayBmaW5lIGluIHByYWN0aWNlLgo+ICsgICAgICAgICovCj4gKyAgICAgICBpZiAoSVNf STgzMChkZXZfcHJpdikgfHwKPiArICAgICAgICAgICBpbnRlbF9jcnRjX2hhc190eXBlKGNydGNf c3RhdGUsIElOVEVMX09VVFBVVF9EVk8pKQo+ICsgICAgICAgICAgICAgICBkcGxsIHw9IERQTExf RFZPXzJYX01PREU7Cj4gKwo+ICsgICAgICAgaWYgKGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19z dGF0ZSwgSU5URUxfT1VUUFVUX0xWRFMpICYmCj4gKyAgICAgICAgICAgaW50ZWxfcGFuZWxfdXNl X3NzYyhkZXZfcHJpdikpCj4gKyAgICAgICAgICAgICAgIGRwbGwgfD0gUExMQl9SRUZfSU5QVVRf U1BSRUFEU1BFQ1RSVU1JTjsKPiArICAgICAgIGVsc2UKPiArICAgICAgICAgICAgICAgZHBsbCB8 PSBQTExfUkVGX0lOUFVUX0RSRUZDTEs7Cj4gKwo+ICsgICAgICAgZHBsbCB8PSBEUExMX1ZDT19F TkFCTEU7Cj4gKyAgICAgICBjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlLmRwbGwgPSBkcGxsOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGhzd19jcnRjX2NvbXB1dGVfY2xvY2soc3RydWN0IGludGVs X2NydGMgKmNydGMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKPiArICAgICAg IHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlID0KPiArICAgICAgICAgICAgICAgdG9f aW50ZWxfYXRvbWljX3N0YXRlKGNydGNfc3RhdGUtPnVhcGkuc3RhdGUpOwo+ICsKPiArICAgICAg IGlmICghaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfRFNJKSB8 fAo+ICsgICAgICAgICAgIElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTEpIHsKPiArICAgICAgICAg ICAgICAgc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIgPQo+ICsgICAgICAgICAgICAgICAg ICAgICAgIGludGVsX2dldF9jcnRjX25ld19lbmNvZGVyKHN0YXRlLCBjcnRjX3N0YXRlKTsKPiAr Cj4gKyAgICAgICAgICAgICAgIGlmICghaW50ZWxfcmVzZXJ2ZV9zaGFyZWRfZHBsbHMoc3RhdGUs IGNydGMsIGVuY29kZXIpKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgZHJtX2RiZ19rbXMo JmRldl9wcml2LT5kcm0sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZh aWxlZCB0byBmaW5kIFBMTCBmb3IgcGlwZSAlY1xuIiwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwaXBlX25hbWUoY3J0Yy0+cGlwZSkpOwo+ICsgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybiAtRUlOVkFMOwo+ICsgICAgICAgICAgICAgICB9Cj4gKyAgICAgICB9Cj4g Kwo+ICsgICAgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGlsa19uZWVkc19m Yl9jYl90dW5lKHN0cnVjdCBkcGxsICpkcGxsLCBpbnQgZmFjdG9yKQo+ICt7Cj4gKyAgICAgICBy ZXR1cm4gaTl4eF9kcGxsX2NvbXB1dGVfbShkcGxsKSA8IGZhY3RvciAqIGRwbGwtPm47Cj4gK30K PiArCj4gKwo+ICtzdGF0aWMgdm9pZCBpbGtfY29tcHV0ZV9kcGxsKHN0cnVjdCBpbnRlbF9jcnRj ICpjcnRjLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg ZHBsbCAqcmVkdWNlZF9jbG9jaykKPiArewo+ICsgICAgICAgc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7Cj4gKyAgICAgICB1MzIgZHBs bCwgZnAsIGZwMjsKPiArICAgICAgIGludCBmYWN0b3I7Cj4gKwo+ICsgICAgICAgLyogRW5hYmxl IGF1dG90dW5pbmcgb2YgdGhlIFBMTCBjbG9jayAoaWYgcGVybWlzc2libGUpICovCj4gKyAgICAg ICBmYWN0b3IgPSAyMTsKPiArICAgICAgIGlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3Rh dGUsIElOVEVMX09VVFBVVF9MVkRTKSkgewo+ICsgICAgICAgICAgICAgICBpZiAoKGludGVsX3Bh bmVsX3VzZV9zc2MoZGV2X3ByaXYpICYmCj4gKyAgICAgICAgICAgICAgICAgICAgZGV2X3ByaXYt PnZidC5sdmRzX3NzY19mcmVxID09IDEwMDAwMCkgfHwKPiArICAgICAgICAgICAgICAgICAgIChI QVNfUENIX0lCWChkZXZfcHJpdikgJiYKPiArICAgICAgICAgICAgICAgICAgICBpbnRlbF9pc19k dWFsX2xpbmtfbHZkcyhkZXZfcHJpdikpKQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGZhY3Rv ciA9IDI1Owo+ICsgICAgICAgfSBlbHNlIGlmIChjcnRjX3N0YXRlLT5zZHZvX3R2X2Nsb2NrKSB7 Cj4gKyAgICAgICAgICAgICAgIGZhY3RvciA9IDIwOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAg IGZwID0gaTl4eF9kcGxsX2NvbXB1dGVfZnAoJmNydGNfc3RhdGUtPmRwbGwpOwo+ICsKPiArICAg ICAgIGlmIChpbGtfbmVlZHNfZmJfY2JfdHVuZSgmY3J0Y19zdGF0ZS0+ZHBsbCwgZmFjdG9yKSkK PiArICAgICAgICAgICAgICAgZnAgfD0gRlBfQ0JfVFVORTsKPiArCj4gKyAgICAgICBpZiAocmVk dWNlZF9jbG9jaykgewo+ICsgICAgICAgICAgICAgICBmcDIgPSBpOXh4X2RwbGxfY29tcHV0ZV9m cChyZWR1Y2VkX2Nsb2NrKTsKPiArCj4gKyAgICAgICAgICAgICAgIGlmIChyZWR1Y2VkX2Nsb2Nr LT5tIDwgZmFjdG9yICogcmVkdWNlZF9jbG9jay0+bikKPiArICAgICAgICAgICAgICAgICAgICAg ICBmcDIgfD0gRlBfQ0JfVFVORTsKPiArICAgICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgICAgICAg IGZwMiA9IGZwOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIGRwbGwgPSAwOwo+ICsKPiArICAg ICAgIGlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9MVkRT KSkKPiArICAgICAgICAgICAgICAgZHBsbCB8PSBEUExMQl9NT0RFX0xWRFM7Cj4gKyAgICAgICBl bHNlCj4gKyAgICAgICAgICAgICAgIGRwbGwgfD0gRFBMTEJfTU9ERV9EQUNfU0VSSUFMOwo+ICsK PiArICAgICAgIGRwbGwgfD0gKGNydGNfc3RhdGUtPnBpeGVsX211bHRpcGxpZXIgLSAxKQo+ICsg ICAgICAgICAgICAgICA8PCBQTExfUkVGX1NEVk9fSERNSV9NVUxUSVBMSUVSX1NISUZUOwo+ICsK PiArICAgICAgIGlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBV VF9TRFZPKSB8fAo+ICsgICAgICAgICAgIGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwg SU5URUxfT1VUUFVUX0hETUkpKQo+ICsgICAgICAgICAgICAgICBkcGxsIHw9IERQTExfU0RWT19I SUdIX1NQRUVEOwo+ICsKPiArICAgICAgIGlmIChpbnRlbF9jcnRjX2hhc19kcF9lbmNvZGVyKGNy dGNfc3RhdGUpKQo+ICsgICAgICAgICAgICAgICBkcGxsIHw9IERQTExfU0RWT19ISUdIX1NQRUVE Owo+ICsKPiArICAgICAgIC8qCj4gKyAgICAgICAgKiBUaGUgaGlnaCBzcGVlZCBJTyBjbG9jayBp cyBvbmx5IHJlYWxseSByZXF1aXJlZCBmb3IKPiArICAgICAgICAqIFNEVk8vSERNSS9EUCwgYnV0 IHdlIGFsc28gZW5hYmxlIGl0IGZvciBDUlQgdG8gbWFrZSBpdAo+ICsgICAgICAgICogcG9zc2li bGUgdG8gc2hhcmUgdGhlIERQTEwgYmV0d2VlbiBDUlQgYW5kIEhETUkuIEVuYWJsaW5nCj4gKyAg ICAgICAgKiB0aGUgY2xvY2sgbmVlZGxlc3NseSBkb2VzIG5vIHJlYWwgaGFybSwgZXhjZXB0IHVz ZSB1cCBhCj4gKyAgICAgICAgKiBiaXQgb2YgcG93ZXIgcG90ZW50aWFsbHkuCj4gKyAgICAgICAg Kgo+ICsgICAgICAgICogV2UnbGwgbGltaXQgdGhpcyB0byBJVkIgd2l0aCAzIHBpcGVzLCBzaW5j ZSBpdCBoYXMgb25seSB0d28KPiArICAgICAgICAqIERQTExzIGFuZCBzbyBEUExMIHNoYXJpbmcg aXMgdGhlIG9ubHkgd2F5IHRvIGdldCB0aHJlZSBwaXBlcwo+ICsgICAgICAgICogZHJpdmluZyBQ Q0ggcG9ydHMgYXQgdGhlIHNhbWUgdGltZS4gT24gU05CIHdlIGNvdWxkIGRvIHRoaXMsCj4gKyAg ICAgICAgKiBhbmQgcG90ZW50aWFsbHkgYXZvaWQgZW5hYmxpbmcgdGhlIHNlY29uZCBEUExMLCBi dXQgaXQncyBub3QKPiArICAgICAgICAqIGNsZWFyIGlmIGl0JydzIGEgd2luIG9yIGxvc3MgcG93 ZXIgd2lzZS4gTm8gcG9pbnQgaW4gZG9pbmcKPiArICAgICAgICAqIHRoaXMgb24gSUxLIGF0IGFs bCBzaW5jZSBpdCBoYXMgYSBmaXhlZCBEUExMPC0+cGlwZSBtYXBwaW5nLgo+ICsgICAgICAgICov Cj4gKyAgICAgICBpZiAoSU5URUxfTlVNX1BJUEVTKGRldl9wcml2KSA9PSAzICYmCj4gKyAgICAg ICAgICAgaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfQU5BTE9H KSkKPiArICAgICAgICAgICAgICAgZHBsbCB8PSBEUExMX1NEVk9fSElHSF9TUEVFRDsKPiArCj4g KyAgICAgICAvKiBjb21wdXRlIGJpdG1hc2sgZnJvbSBwMSB2YWx1ZSAqLwo+ICsgICAgICAgZHBs bCB8PSAoMSA8PCAoY3J0Y19zdGF0ZS0+ZHBsbC5wMSAtIDEpKSA8PCBEUExMX0ZQQTAxX1AxX1BP U1RfRElWX1NISUZUOwo+ICsgICAgICAgLyogYWxzbyBGUEExICovCj4gKyAgICAgICBkcGxsIHw9 ICgxIDw8IChjcnRjX3N0YXRlLT5kcGxsLnAxIC0gMSkpIDw8IERQTExfRlBBMV9QMV9QT1NUX0RJ Vl9TSElGVDsKPiArCj4gKyAgICAgICBzd2l0Y2ggKGNydGNfc3RhdGUtPmRwbGwucDIpIHsKPiAr ICAgICAgIGNhc2UgNToKPiArICAgICAgICAgICAgICAgZHBsbCB8PSBEUExMX0RBQ19TRVJJQUxf UDJfQ0xPQ0tfRElWXzU7Cj4gKyAgICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgY2FzZSA3 Ogo+ICsgICAgICAgICAgICAgICBkcGxsIHw9IERQTExCX0xWRFNfUDJfQ0xPQ0tfRElWXzc7Cj4g KyAgICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgY2FzZSAxMDoKPiArICAgICAgICAgICAg ICAgZHBsbCB8PSBEUExMX0RBQ19TRVJJQUxfUDJfQ0xPQ0tfRElWXzEwOwo+ICsgICAgICAgICAg ICAgICBicmVhazsKPiArICAgICAgIGNhc2UgMTQ6Cj4gKyAgICAgICAgICAgICAgIGRwbGwgfD0g RFBMTEJfTFZEU19QMl9DTE9DS19ESVZfMTQ7Cj4gKyAgICAgICAgICAgICAgIGJyZWFrOwo+ICsg ICAgICAgfQo+ICsKPiArICAgICAgIGlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUs IElOVEVMX09VVFBVVF9MVkRTKSAmJgo+ICsgICAgICAgICAgIGludGVsX3BhbmVsX3VzZV9zc2Mo ZGV2X3ByaXYpKQo+ICsgICAgICAgICAgICAgICBkcGxsIHw9IFBMTEJfUkVGX0lOUFVUX1NQUkVB RFNQRUNUUlVNSU47Cj4gKyAgICAgICBlbHNlCj4gKyAgICAgICAgICAgICAgIGRwbGwgfD0gUExM X1JFRl9JTlBVVF9EUkVGQ0xLOwo+ICsKPiArICAgICAgIGRwbGwgfD0gRFBMTF9WQ09fRU5BQkxF Owo+ICsKPiArICAgICAgIGNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUuZHBsbCA9IGRwbGw7Cj4g KyAgICAgICBjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlLmZwMCA9IGZwOwo+ICsgICAgICAgY3J0 Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZS5mcDEgPSBmcDI7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg aWxrX2NydGNfY29tcHV0ZV9jbG9jayhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNf c3RhdGUpCj4gK3sKPiArICAgICAgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOwo+ICsgICAgICAgc3RydWN0IGludGVsX2F0b21pY19z dGF0ZSAqc3RhdGUgPQo+ICsgICAgICAgICAgICAgICB0b19pbnRlbF9hdG9taWNfc3RhdGUoY3J0 Y19zdGF0ZS0+dWFwaS5zdGF0ZSk7Cj4gKyAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQg KmxpbWl0Owo+ICsgICAgICAgaW50IHJlZmNsayA9IDEyMDAwMDsKPiArCj4gKyAgICAgICBtZW1z ZXQoJmNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUsIDAsCj4gKyAgICAgICAgICAgICAgc2l6ZW9m KGNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUpKTsKPiArCj4gKyAgICAgICAvKiBDUFUgZURQIGlz IHRoZSBvbmx5IG91dHB1dCB0aGF0IGRvZXNuJ3QgbmVlZCBhIFBDSCBQTEwgb2YgaXRzIG93bi4g Ki8KPiArICAgICAgIGlmICghY3J0Y19zdGF0ZS0+aGFzX3BjaF9lbmNvZGVyKQo+ICsgICAgICAg ICAgICAgICByZXR1cm4gMDsKPiArCj4gKyAgICAgICBpZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShj cnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfTFZEUykpIHsKPiArICAgICAgICAgICAgICAgaWYgKGlu dGVsX3BhbmVsX3VzZV9zc2MoZGV2X3ByaXYpKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAg ZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgInVzaW5nIFNTQyByZWZlcmVuY2UgY2xvY2sgb2YgJWQga0h6XG4iLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9wcml2LT52YnQubHZkc19zc2NfZnJl cSk7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmVmY2xrID0gZGV2X3ByaXYtPnZidC5sdmRz X3NzY19mcmVxOwo+ICsgICAgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgICAgICBpZiAo aW50ZWxfaXNfZHVhbF9saW5rX2x2ZHMoZGV2X3ByaXYpKSB7Cj4gKyAgICAgICAgICAgICAgICAg ICAgICAgaWYgKHJlZmNsayA9PSAxMDAwMDApCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsaW1pdCA9ICZpbGtfbGltaXRzX2R1YWxfbHZkc18xMDBtOwo+ICsgICAgICAgICAgICAg ICAgICAgICAgIGVsc2UKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0ID0g Jmlsa19saW1pdHNfZHVhbF9sdmRzOwo+ICsgICAgICAgICAgICAgICB9IGVsc2Ugewo+ICsgICAg ICAgICAgICAgICAgICAgICAgIGlmIChyZWZjbGsgPT0gMTAwMDAwKQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbGltaXQgPSAmaWxrX2xpbWl0c19zaW5nbGVfbHZkc18xMDBtOwo+ ICsgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxpbWl0ID0gJmlsa19saW1pdHNfc2luZ2xlX2x2ZHM7Cj4gKyAgICAgICAgICAgICAg IH0KPiArICAgICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgICAgICAgIGxpbWl0ID0gJmlsa19saW1p dHNfZGFjOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIGlmICghY3J0Y19zdGF0ZS0+Y2xvY2tf c2V0ICYmCj4gKyAgICAgICAgICAgIWc0eF9maW5kX2Jlc3RfZHBsbChsaW1pdCwgY3J0Y19zdGF0 ZSwgY3J0Y19zdGF0ZS0+cG9ydF9jbG9jaywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJlZmNsaywgTlVMTCwgJmNydGNfc3RhdGUtPmRwbGwpKSB7Cj4gKyAgICAgICAgICAgICAg IGRybV9lcnIoJmRldl9wcml2LT5kcm0sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIkNvdWxk bid0IGZpbmQgUExMIHNldHRpbmdzIGZvciBtb2RlIVxuIik7Cj4gKyAgICAgICAgICAgICAgIHJl dHVybiAtRUlOVkFMOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIGlsa19jb21wdXRlX2RwbGwo Y3J0YywgY3J0Y19zdGF0ZSwgTlVMTCk7Cj4gKwo+ICsgICAgICAgaWYgKCFpbnRlbF9yZXNlcnZl X3NoYXJlZF9kcGxscyhzdGF0ZSwgY3J0YywgTlVMTCkpIHsKPiArICAgICAgICAgICAgICAgZHJt X2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJm YWlsZWQgdG8gZmluZCBQTEwgZm9yIHBpcGUgJWNcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBpcGVfbmFtZShjcnRjLT5waXBlKSk7Cj4gKyAgICAgICAgICAgICAgIHJldHVybiAt RUlOVkFMOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICt2 b2lkIHZsdl9jb21wdXRlX2RwbGwoc3RydWN0IGludGVsX2NydGMgKmNydGMsCj4gKyAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZykKPiArewo+ ICsgICAgICAgcGlwZV9jb25maWctPmRwbGxfaHdfc3RhdGUuZHBsbCA9IERQTExfSU5URUdSQVRF RF9SRUZfQ0xLX1ZMViB8Cj4gKyAgICAgICAgICAgICAgIERQTExfUkVGX0NMS19FTkFCTEVfVkxW IHwgRFBMTF9WR0FfTU9ERV9ESVM7Cj4gKyAgICAgICBpZiAoY3J0Yy0+cGlwZSAhPSBQSVBFX0Ep Cj4gKyAgICAgICAgICAgICAgIHBpcGVfY29uZmlnLT5kcGxsX2h3X3N0YXRlLmRwbGwgfD0gRFBM TF9JTlRFR1JBVEVEX0NSSV9DTEtfVkxWOwo+ICsKPiArICAgICAgIC8qIERQTEwgbm90IHVzZWQg d2l0aCBEU0ksIGJ1dCBzdGlsbCBuZWVkIHRoZSByZXN0IHNldCB1cCAqLwo+ICsgICAgICAgaWYg KCFpbnRlbF9jcnRjX2hhc190eXBlKHBpcGVfY29uZmlnLCBJTlRFTF9PVVRQVVRfRFNJKSkKPiAr ICAgICAgICAgICAgICAgcGlwZV9jb25maWctPmRwbGxfaHdfc3RhdGUuZHBsbCB8PSBEUExMX1ZD T19FTkFCTEUgfAo+ICsgICAgICAgICAgICAgICAgICAgICAgIERQTExfRVhUX0JVRkZFUl9FTkFC TEVfVkxWOwo+ICsKPiArICAgICAgIHBpcGVfY29uZmlnLT5kcGxsX2h3X3N0YXRlLmRwbGxfbWQg PQo+ICsgICAgICAgICAgICAgICAocGlwZV9jb25maWctPnBpeGVsX211bHRpcGxpZXIgLSAxKSA8 PCBEUExMX01EX1VESV9NVUxUSVBMSUVSX1NISUZUOwo+ICt9Cj4gKwo+ICt2b2lkIGNodl9jb21w dXRlX2RwbGwoc3RydWN0IGludGVsX2NydGMgKmNydGMsCj4gKyAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZykKPiArewo+ICsgICAgICAgcGlw ZV9jb25maWctPmRwbGxfaHdfc3RhdGUuZHBsbCA9IERQTExfU1NDX1JFRl9DTEtfQ0hWIHwKPiAr ICAgICAgICAgICAgICAgRFBMTF9SRUZfQ0xLX0VOQUJMRV9WTFYgfCBEUExMX1ZHQV9NT0RFX0RJ UzsKPiArICAgICAgIGlmIChjcnRjLT5waXBlICE9IFBJUEVfQSkKPiArICAgICAgICAgICAgICAg cGlwZV9jb25maWctPmRwbGxfaHdfc3RhdGUuZHBsbCB8PSBEUExMX0lOVEVHUkFURURfQ1JJX0NM S19WTFY7Cj4gKwo+ICsgICAgICAgLyogRFBMTCBub3QgdXNlZCB3aXRoIERTSSwgYnV0IHN0aWxs IG5lZWQgdGhlIHJlc3Qgc2V0IHVwICovCj4gKyAgICAgICBpZiAoIWludGVsX2NydGNfaGFzX3R5 cGUocGlwZV9jb25maWcsIElOVEVMX09VVFBVVF9EU0kpKQo+ICsgICAgICAgICAgICAgICBwaXBl X2NvbmZpZy0+ZHBsbF9od19zdGF0ZS5kcGxsIHw9IERQTExfVkNPX0VOQUJMRTsKPiArCj4gKyAg ICAgICBwaXBlX2NvbmZpZy0+ZHBsbF9od19zdGF0ZS5kcGxsX21kID0KPiArICAgICAgICAgICAg ICAgKHBpcGVfY29uZmlnLT5waXhlbF9tdWx0aXBsaWVyIC0gMSkgPDwgRFBMTF9NRF9VRElfTVVM VElQTElFUl9TSElGVDsKPiArfQo+ICsKPiArc3RhdGljIGludCBjaHZfY3J0Y19jb21wdXRlX2Ns b2NrKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiArewo+ICsgICAg ICAgaW50IHJlZmNsayA9IDEwMDAwMDsKPiArICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1p dCAqbGltaXQgPSAmaW50ZWxfbGltaXRzX2NodjsKPiArICAgICAgIHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1ID0gdG9faTkxNShjcnRjX3N0YXRlLT51YXBpLmNydGMtPmRldik7Cj4gKwo+ ICsgICAgICAgbWVtc2V0KCZjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlLCAwLAo+ICsgICAgICAg ICAgICAgIHNpemVvZihjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlKSk7Cj4gKwo+ICsgICAgICAg aWYgKCFjcnRjX3N0YXRlLT5jbG9ja19zZXQgJiYKPiArICAgICAgICAgICAhY2h2X2ZpbmRfYmVz dF9kcGxsKGxpbWl0LCBjcnRjX3N0YXRlLCBjcnRjX3N0YXRlLT5wb3J0X2Nsb2NrLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmY2xrLCBOVUxMLCAmY3J0Y19zdGF0ZS0+ZHBs bCkpIHsKPiArICAgICAgICAgICAgICAgZHJtX2VycigmaTkxNS0+ZHJtLCAiQ291bGRuJ3QgZmlu ZCBQTEwgc2V0dGluZ3MgZm9yIG1vZGUhXG4iKTsKPiArICAgICAgICAgICAgICAgcmV0dXJuIC1F SU5WQUw7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgY2h2X2NvbXB1dGVfZHBsbChjcnRjLCBj cnRjX3N0YXRlKTsKPiArCj4gKyAgICAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGlu dCB2bHZfY3J0Y19jb21wdXRlX2Nsb2NrKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSkKPiArewo+ICsgICAgICAgaW50IHJlZmNsayA9IDEwMDAwMDsKPiArICAgICAgIGNv bnN0IHN0cnVjdCBpbnRlbF9saW1pdCAqbGltaXQgPSAmaW50ZWxfbGltaXRzX3ZsdjsKPiArICAg ICAgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShjcnRjX3N0YXRlLT51 YXBpLmNydGMtPmRldik7Cj4gKwo+ICsgICAgICAgbWVtc2V0KCZjcnRjX3N0YXRlLT5kcGxsX2h3 X3N0YXRlLCAwLAo+ICsgICAgICAgICAgICAgIHNpemVvZihjcnRjX3N0YXRlLT5kcGxsX2h3X3N0 YXRlKSk7Cj4gKwo+ICsgICAgICAgaWYgKCFjcnRjX3N0YXRlLT5jbG9ja19zZXQgJiYKPiArICAg ICAgICAgICAhdmx2X2ZpbmRfYmVzdF9kcGxsKGxpbWl0LCBjcnRjX3N0YXRlLCBjcnRjX3N0YXRl LT5wb3J0X2Nsb2NrLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmY2xrLCBO VUxMLCAmY3J0Y19zdGF0ZS0+ZHBsbCkpIHsKPiArICAgICAgICAgICAgICAgZHJtX2VycigmaTkx NS0+ZHJtLCAgIkNvdWxkbid0IGZpbmQgUExMIHNldHRpbmdzIGZvciBtb2RlIVxuIik7Cj4gKyAg ICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIHZs dl9jb21wdXRlX2RwbGwoY3J0YywgY3J0Y19zdGF0ZSk7Cj4gKwo+ICsgICAgICAgcmV0dXJuIDA7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZzR4X2NydGNfY29tcHV0ZV9jbG9jayhzdHJ1Y3QgaW50 ZWxfY3J0YyAqY3J0YywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4gK3sKPiArICAgICAgIHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOwo+ICsgICAg ICAgY29uc3Qgc3RydWN0IGludGVsX2xpbWl0ICpsaW1pdDsKPiArICAgICAgIGludCByZWZjbGsg PSA5NjAwMDsKPiArCj4gKyAgICAgICBtZW1zZXQoJmNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUs IDAsCj4gKyAgICAgICAgICAgICAgc2l6ZW9mKGNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUpKTsK PiArCj4gKyAgICAgICBpZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9P VVRQVVRfTFZEUykpIHsKPiArICAgICAgICAgICAgICAgaWYgKGludGVsX3BhbmVsX3VzZV9zc2Mo ZGV2X3ByaXYpKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmVmY2xrID0gZGV2X3ByaXYt PnZidC5sdmRzX3NzY19mcmVxOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGRybV9kYmdfa21z KCZkZXZfcHJpdi0+ZHJtLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1 c2luZyBTU0MgcmVmZXJlbmNlIGNsb2NrIG9mICVkIGtIelxuIiwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICByZWZjbGspOwo+ICsgICAgICAgICAgICAgICB9Cj4gKwo+ICsg ICAgICAgICAgICAgICBpZiAoaW50ZWxfaXNfZHVhbF9saW5rX2x2ZHMoZGV2X3ByaXYpKQo+ICsg ICAgICAgICAgICAgICAgICAgICAgIGxpbWl0ID0gJmludGVsX2xpbWl0c19nNHhfZHVhbF9jaGFu bmVsX2x2ZHM7Cj4gKyAgICAgICAgICAgICAgIGVsc2UKPiArICAgICAgICAgICAgICAgICAgICAg ICBsaW1pdCA9ICZpbnRlbF9saW1pdHNfZzR4X3NpbmdsZV9jaGFubmVsX2x2ZHM7Cj4gKyAgICAg ICB9IGVsc2UgaWYgKGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVU X0hETUkpIHx8Cj4gKyAgICAgICAgICAgICAgICAgIGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19z dGF0ZSwgSU5URUxfT1VUUFVUX0FOQUxPRykpIHsKPiArICAgICAgICAgICAgICAgbGltaXQgPSAm aW50ZWxfbGltaXRzX2c0eF9oZG1pOwo+ICsgICAgICAgfSBlbHNlIGlmIChpbnRlbF9jcnRjX2hh c190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9TRFZPKSkgewo+ICsgICAgICAgICAgICAg ICBsaW1pdCA9ICZpbnRlbF9saW1pdHNfZzR4X3Nkdm87Cj4gKyAgICAgICB9IGVsc2Ugewo+ICsg ICAgICAgICAgICAgICAvKiBUaGUgb3B0aW9uIGlzIGZvciBvdGhlciBvdXRwdXRzICovCj4gKyAg ICAgICAgICAgICAgIGxpbWl0ID0gJmludGVsX2xpbWl0c19pOXh4X3Nkdm87Cj4gKyAgICAgICB9 Cj4gKwo+ICsgICAgICAgaWYgKCFjcnRjX3N0YXRlLT5jbG9ja19zZXQgJiYKPiArICAgICAgICAg ICAhZzR4X2ZpbmRfYmVzdF9kcGxsKGxpbWl0LCBjcnRjX3N0YXRlLCBjcnRjX3N0YXRlLT5wb3J0 X2Nsb2NrLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmY2xrLCBOVUxMLCAm Y3J0Y19zdGF0ZS0+ZHBsbCkpIHsKPiArICAgICAgICAgICAgICAgZHJtX2VycigmZGV2X3ByaXYt PmRybSwKPiArICAgICAgICAgICAgICAgICAgICAgICAiQ291bGRuJ3QgZmluZCBQTEwgc2V0dGlu Z3MgZm9yIG1vZGUhXG4iKTsKPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gKyAg ICAgICB9Cj4gKwo+ICsgICAgICAgaTl4eF9jb21wdXRlX2RwbGwoY3J0YywgY3J0Y19zdGF0ZSwg TlVMTCk7Cj4gKwo+ICsgICAgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcG52 X2NydGNfY29tcHV0ZV9jbG9jayhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUpCj4gK3sKPiArICAgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRl djsKPiArICAgICAgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUo ZGV2KTsKPiArICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCAqbGltaXQ7Cj4gKyAgICAg ICBpbnQgcmVmY2xrID0gOTYwMDA7Cj4gKwo+ICsgICAgICAgbWVtc2V0KCZjcnRjX3N0YXRlLT5k cGxsX2h3X3N0YXRlLCAwLAo+ICsgICAgICAgICAgICAgIHNpemVvZihjcnRjX3N0YXRlLT5kcGxs X2h3X3N0YXRlKSk7Cj4gKwo+ICsgICAgICAgaWYgKGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19z dGF0ZSwgSU5URUxfT1VUUFVUX0xWRFMpKSB7Cj4gKyAgICAgICAgICAgICAgIGlmIChpbnRlbF9w YW5lbF91c2Vfc3NjKGRldl9wcml2KSkgewo+ICsgICAgICAgICAgICAgICAgICAgICAgIHJlZmNs ayA9IGRldl9wcml2LT52YnQubHZkc19zc2NfZnJlcTsKPiArICAgICAgICAgICAgICAgICAgICAg ICBkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAidXNpbmcgU1NDIHJlZmVyZW5jZSBjbG9jayBvZiAlZCBrSHpcbiIsCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmY2xrKTsKPiArICAgICAgICAgICAg ICAgfQo+ICsKPiArICAgICAgICAgICAgICAgbGltaXQgPSAmcG52X2xpbWl0c19sdmRzOwo+ICsg ICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgICAgbGltaXQgPSAmcG52X2xpbWl0c19zZHZv Owo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIGlmICghY3J0Y19zdGF0ZS0+Y2xvY2tfc2V0ICYm Cj4gKyAgICAgICAgICAgIXBudl9maW5kX2Jlc3RfZHBsbChsaW1pdCwgY3J0Y19zdGF0ZSwgY3J0 Y19zdGF0ZS0+cG9ydF9jbG9jaywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl ZmNsaywgTlVMTCwgJmNydGNfc3RhdGUtPmRwbGwpKSB7Cj4gKyAgICAgICAgICAgICAgIGRybV9l cnIoJmRldl9wcml2LT5kcm0sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIkNvdWxkbid0IGZp bmQgUExMIHNldHRpbmdzIGZvciBtb2RlIVxuIik7Cj4gKyAgICAgICAgICAgICAgIHJldHVybiAt RUlOVkFMOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIGk5eHhfY29tcHV0ZV9kcGxsKGNydGMs IGNydGNfc3RhdGUsIE5VTEwpOwo+ICsKPiArICAgICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IGk5eHhfY3J0Y19jb21wdXRlX2Nsb2NrKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRj LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUpCj4gK3sKPiArICAgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYg PSBjcnRjLT5iYXNlLmRldjsKPiArICAgICAgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IHRvX2k5MTUoZGV2KTsKPiArICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCAq bGltaXQ7Cj4gKyAgICAgICBpbnQgcmVmY2xrID0gOTYwMDA7Cj4gKwo+ICsgICAgICAgbWVtc2V0 KCZjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlLCAwLAo+ICsgICAgICAgICAgICAgIHNpemVvZihj cnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlKSk7Cj4gKwo+ICsgICAgICAgaWYgKGludGVsX2NydGNf aGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0xWRFMpKSB7Cj4gKyAgICAgICAgICAg ICAgIGlmIChpbnRlbF9wYW5lbF91c2Vfc3NjKGRldl9wcml2KSkgewo+ICsgICAgICAgICAgICAg ICAgICAgICAgIHJlZmNsayA9IGRldl9wcml2LT52YnQubHZkc19zc2NfZnJlcTsKPiArICAgICAg ICAgICAgICAgICAgICAgICBkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAidXNpbmcgU1NDIHJlZmVyZW5jZSBjbG9jayBvZiAl ZCBrSHpcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmY2xrKTsK PiArICAgICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgICAgbGltaXQgPSAmaW50ZWxf bGltaXRzX2k5eHhfbHZkczsKPiArICAgICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgICAgICAgIGxp bWl0ID0gJmludGVsX2xpbWl0c19pOXh4X3Nkdm87Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAg aWYgKCFjcnRjX3N0YXRlLT5jbG9ja19zZXQgJiYKPiArICAgICAgICAgICAhaTl4eF9maW5kX2Jl c3RfZHBsbChsaW1pdCwgY3J0Y19zdGF0ZSwgY3J0Y19zdGF0ZS0+cG9ydF9jbG9jaywKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZjbGssIE5VTEwsICZjcnRjX3N0YXRlLT5k cGxsKSkgewo+ICsgICAgICAgICAgICAgICBkcm1fZXJyKCZkZXZfcHJpdi0+ZHJtLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICJDb3VsZG4ndCBmaW5kIFBMTCBzZXR0aW5ncyBmb3IgbW9kZSFc biIpOwo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiArICAgICAgIH0KPiArCj4g KyAgICAgICBpOXh4X2NvbXB1dGVfZHBsbChjcnRjLCBjcnRjX3N0YXRlLCBOVUxMKTsKPiArCj4g KyAgICAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBpOHh4X2NydGNfY29tcHV0 ZV9jbG9jayhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQo+ICt7Cj4g KyAgICAgICBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7Cj4gKyAgICAg ICBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gKyAg ICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgKmxpbWl0Owo+ICsgICAgICAgaW50IHJlZmNs ayA9IDQ4MDAwOwo+ICsKPiArICAgICAgIG1lbXNldCgmY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0 ZSwgMCwKPiArICAgICAgICAgICAgICBzaXplb2YoY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZSkp Owo+ICsKPiArICAgICAgIGlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVM X09VVFBVVF9MVkRTKSkgewo+ICsgICAgICAgICAgICAgICBpZiAoaW50ZWxfcGFuZWxfdXNlX3Nz YyhkZXZfcHJpdikpIHsKPiArICAgICAgICAgICAgICAgICAgICAgICByZWZjbGsgPSBkZXZfcHJp di0+dmJ0Lmx2ZHNfc3NjX2ZyZXE7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgZHJtX2RiZ19r bXMoJmRldl9wcml2LT5kcm0sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg InVzaW5nIFNTQyByZWZlcmVuY2UgY2xvY2sgb2YgJWQga0h6XG4iLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJlZmNsayk7Cj4gKyAgICAgICAgICAgICAgIH0KPiArCj4g KyAgICAgICAgICAgICAgIGxpbWl0ID0gJmludGVsX2xpbWl0c19pOHh4X2x2ZHM7Cj4gKyAgICAg ICB9IGVsc2UgaWYgKGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVU X0RWTykpIHsKPiArICAgICAgICAgICAgICAgbGltaXQgPSAmaW50ZWxfbGltaXRzX2k4eHhfZHZv Owo+ICsgICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgICAgbGltaXQgPSAmaW50ZWxfbGlt aXRzX2k4eHhfZGFjOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIGlmICghY3J0Y19zdGF0ZS0+ Y2xvY2tfc2V0ICYmCj4gKyAgICAgICAgICAgIWk5eHhfZmluZF9iZXN0X2RwbGwobGltaXQsIGNy dGNfc3RhdGUsIGNydGNfc3RhdGUtPnBvcnRfY2xvY2ssCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmVmY2xrLCBOVUxMLCAmY3J0Y19zdGF0ZS0+ZHBsbCkpIHsKPiArICAgICAg ICAgICAgICAgZHJtX2VycigmZGV2X3ByaXYtPmRybSwKPiArICAgICAgICAgICAgICAgICAgICAg ICAiQ291bGRuJ3QgZmluZCBQTEwgc2V0dGluZ3MgZm9yIG1vZGUhXG4iKTsKPiArICAgICAgICAg ICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgaTh4eF9jb21w dXRlX2RwbGwoY3J0YywgY3J0Y19zdGF0ZSwgTlVMTCk7Cj4gKwo+ICsgICAgICAgcmV0dXJuIDA7 Cj4gK30KPiArCj4gK3ZvaWQKPiAraW50ZWxfaW5pdF9jbG9ja19ob29rKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ICsgICAgICAgaWYgKElOVEVMX0dFTihkZXZfcHJp dikgPj0gOSB8fCBIQVNfRERJKGRldl9wcml2KSkKPiArICAgICAgICAgICAgICAgZGV2X3ByaXYt PmRpc3BsYXkuY3J0Y19jb21wdXRlX2Nsb2NrID0gaHN3X2NydGNfY29tcHV0ZV9jbG9jazsKPiAr ICAgICAgIGVsc2UgaWYgKEhBU19QQ0hfU1BMSVQoZGV2X3ByaXYpKQo+ICsgICAgICAgICAgICAg ICBkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2NvbXB1dGVfY2xvY2sgPSBpbGtfY3J0Y19jb21wdXRl X2Nsb2NrOwo+ICsgICAgICAgZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCj4gKyAg ICAgICAgICAgICAgIGRldl9wcml2LT5kaXNwbGF5LmNydGNfY29tcHV0ZV9jbG9jayA9IGNodl9j cnRjX2NvbXB1dGVfY2xvY2s7Cj4gKyAgICAgICBlbHNlIGlmIChJU19WQUxMRVlWSUVXKGRldl9w cml2KSkKPiArICAgICAgICAgICAgICAgZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19jb21wdXRlX2Ns b2NrID0gdmx2X2NydGNfY29tcHV0ZV9jbG9jazsKPiArICAgICAgIGVsc2UgaWYgKElTX0c0WChk ZXZfcHJpdikpCj4gKyAgICAgICAgICAgICAgIGRldl9wcml2LT5kaXNwbGF5LmNydGNfY29tcHV0 ZV9jbG9jayA9IGc0eF9jcnRjX2NvbXB1dGVfY2xvY2s7Cj4gKyAgICAgICBlbHNlIGlmIChJU19Q SU5FVklFVyhkZXZfcHJpdikpCj4gKyAgICAgICAgICAgICAgIGRldl9wcml2LT5kaXNwbGF5LmNy dGNfY29tcHV0ZV9jbG9jayA9IHBudl9jcnRjX2NvbXB1dGVfY2xvY2s7Cj4gKyAgICAgICBlbHNl IGlmICghSVNfR0VOKGRldl9wcml2LCAyKSkKPiArICAgICAgICAgICAgICAgZGV2X3ByaXYtPmRp c3BsYXkuY3J0Y19jb21wdXRlX2Nsb2NrID0gaTl4eF9jcnRjX2NvbXB1dGVfY2xvY2s7Cj4gKyAg ICAgICBlbHNlCj4gKyAgICAgICAgICAgICAgIGRldl9wcml2LT5kaXNwbGF5LmNydGNfY29tcHV0 ZV9jbG9jayA9IGk4eHhfY3J0Y19jb21wdXRlX2Nsb2NrOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMKPiBpbmRleCBjNmYzMGU0ZWM1MWUuLjc4 OGIxZGVmNjFlZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu dGVsX2Rpc3BsYXkuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf ZGlzcGxheS5jCj4gQEAgLTExMywxNyArMTEzLDYgQEAgc3RhdGljIHZvaWQgaWxrX3BmaXRfZW5h YmxlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKTsKPiAgc3RhdGlj IHZvaWQgaW50ZWxfbW9kZXNldF9zZXR1cF9od19zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9t b2Rlc2V0X2FjcXVpcmVfY3R4ICpjdHgpOwo+Cj4gLXN0cnVjdCBpbnRlbF9saW1pdCB7Cj4gLSAg ICAgICBzdHJ1Y3Qgewo+IC0gICAgICAgICAgICAgICBpbnQgbWluLCBtYXg7Cj4gLSAgICAgICB9 IGRvdCwgdmNvLCBuLCBtLCBtMSwgbTIsIHAsIHAxOwo+IC0KPiAtICAgICAgIHN0cnVjdCB7Cj4g LSAgICAgICAgICAgICAgIGludCBkb3RfbGltaXQ7Cj4gLSAgICAgICAgICAgICAgIGludCBwMl9z bG93LCBwMl9mYXN0Owo+IC0gICAgICAgfSBwMjsKPiAtfTsKPiAtCj4gIC8qIHJldHVybnMgSFBM TCBmcmVxdWVuY3kgaW4ga0h6ICovCj4gIGludCB2bHZfZ2V0X2hwbGxfdmNvKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgewo+IEBAIC0xOTEsMjcxICsxODAsNiBAQCBzdGF0 aWMgdTMyIGludGVsX2ZkaV9saW5rX2ZyZXEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LAo+ICAgICAgICAgICAgICAgICByZXR1cm4gZGV2X3ByaXYtPmZkaV9wbGxfZnJlcTsKPiAg fQo+Cj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgaW50ZWxfbGltaXRzX2k4eHhf ZGFjID0gewo+IC0gICAgICAgLmRvdCA9IHsgLm1pbiA9IDI1MDAwLCAubWF4ID0gMzUwMDAwIH0s Cj4gLSAgICAgICAudmNvID0geyAubWluID0gOTA4MDAwLCAubWF4ID0gMTUxMjAwMCB9LAo+IC0g ICAgICAgLm4gPSB7IC5taW4gPSAyLCAubWF4ID0gMTYgfSwKPiAtICAgICAgIC5tID0geyAubWlu ID0gOTYsIC5tYXggPSAxNDAgfSwKPiAtICAgICAgIC5tMSA9IHsgLm1pbiA9IDE4LCAubWF4ID0g MjYgfSwKPiAtICAgICAgIC5tMiA9IHsgLm1pbiA9IDYsIC5tYXggPSAxNiB9LAo+IC0gICAgICAg LnAgPSB7IC5taW4gPSA0LCAubWF4ID0gMTI4IH0sCj4gLSAgICAgICAucDEgPSB7IC5taW4gPSAy LCAubWF4ID0gMzMgfSwKPiAtICAgICAgIC5wMiA9IHsgLmRvdF9saW1pdCA9IDE2NTAwMCwKPiAt ICAgICAgICAgICAgICAgLnAyX3Nsb3cgPSA0LCAucDJfZmFzdCA9IDIgfSwKPiAtfTsKPiAtCj4g LXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgaW50ZWxfbGltaXRzX2k4eHhfZHZvID0g ewo+IC0gICAgICAgLmRvdCA9IHsgLm1pbiA9IDI1MDAwLCAubWF4ID0gMzUwMDAwIH0sCj4gLSAg ICAgICAudmNvID0geyAubWluID0gOTA4MDAwLCAubWF4ID0gMTUxMjAwMCB9LAo+IC0gICAgICAg Lm4gPSB7IC5taW4gPSAyLCAubWF4ID0gMTYgfSwKPiAtICAgICAgIC5tID0geyAubWluID0gOTYs IC5tYXggPSAxNDAgfSwKPiAtICAgICAgIC5tMSA9IHsgLm1pbiA9IDE4LCAubWF4ID0gMjYgfSwK PiAtICAgICAgIC5tMiA9IHsgLm1pbiA9IDYsIC5tYXggPSAxNiB9LAo+IC0gICAgICAgLnAgPSB7 IC5taW4gPSA0LCAubWF4ID0gMTI4IH0sCj4gLSAgICAgICAucDEgPSB7IC5taW4gPSAyLCAubWF4 ID0gMzMgfSwKPiAtICAgICAgIC5wMiA9IHsgLmRvdF9saW1pdCA9IDE2NTAwMCwKPiAtICAgICAg ICAgICAgICAgLnAyX3Nsb3cgPSA0LCAucDJfZmFzdCA9IDQgfSwKPiAtfTsKPiAtCj4gLXN0YXRp YyBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgaW50ZWxfbGltaXRzX2k4eHhfbHZkcyA9IHsKPiAt ICAgICAgIC5kb3QgPSB7IC5taW4gPSAyNTAwMCwgLm1heCA9IDM1MDAwMCB9LAo+IC0gICAgICAg LnZjbyA9IHsgLm1pbiA9IDkwODAwMCwgLm1heCA9IDE1MTIwMDAgfSwKPiAtICAgICAgIC5uID0g eyAubWluID0gMiwgLm1heCA9IDE2IH0sCj4gLSAgICAgICAubSA9IHsgLm1pbiA9IDk2LCAubWF4 ID0gMTQwIH0sCj4gLSAgICAgICAubTEgPSB7IC5taW4gPSAxOCwgLm1heCA9IDI2IH0sCj4gLSAg ICAgICAubTIgPSB7IC5taW4gPSA2LCAubWF4ID0gMTYgfSwKPiAtICAgICAgIC5wID0geyAubWlu ID0gNCwgLm1heCA9IDEyOCB9LAo+IC0gICAgICAgLnAxID0geyAubWluID0gMSwgLm1heCA9IDYg fSwKPiAtICAgICAgIC5wMiA9IHsgLmRvdF9saW1pdCA9IDE2NTAwMCwKPiAtICAgICAgICAgICAg ICAgLnAyX3Nsb3cgPSAxNCwgLnAyX2Zhc3QgPSA3IH0sCj4gLX07Cj4gLQo+IC1zdGF0aWMgY29u c3Qgc3RydWN0IGludGVsX2xpbWl0IGludGVsX2xpbWl0c19pOXh4X3Nkdm8gPSB7Cj4gLSAgICAg ICAuZG90ID0geyAubWluID0gMjAwMDAsIC5tYXggPSA0MDAwMDAgfSwKPiAtICAgICAgIC52Y28g PSB7IC5taW4gPSAxNDAwMDAwLCAubWF4ID0gMjgwMDAwMCB9LAo+IC0gICAgICAgLm4gPSB7IC5t aW4gPSAxLCAubWF4ID0gNiB9LAo+IC0gICAgICAgLm0gPSB7IC5taW4gPSA3MCwgLm1heCA9IDEy MCB9LAo+IC0gICAgICAgLm0xID0geyAubWluID0gOCwgLm1heCA9IDE4IH0sCj4gLSAgICAgICAu bTIgPSB7IC5taW4gPSAzLCAubWF4ID0gNyB9LAo+IC0gICAgICAgLnAgPSB7IC5taW4gPSA1LCAu bWF4ID0gODAgfSwKPiAtICAgICAgIC5wMSA9IHsgLm1pbiA9IDEsIC5tYXggPSA4IH0sCj4gLSAg ICAgICAucDIgPSB7IC5kb3RfbGltaXQgPSAyMDAwMDAsCj4gLSAgICAgICAgICAgICAgIC5wMl9z bG93ID0gMTAsIC5wMl9mYXN0ID0gNSB9LAo+IC19Owo+IC0KPiAtc3RhdGljIGNvbnN0IHN0cnVj dCBpbnRlbF9saW1pdCBpbnRlbF9saW1pdHNfaTl4eF9sdmRzID0gewo+IC0gICAgICAgLmRvdCA9 IHsgLm1pbiA9IDIwMDAwLCAubWF4ID0gNDAwMDAwIH0sCj4gLSAgICAgICAudmNvID0geyAubWlu ID0gMTQwMDAwMCwgLm1heCA9IDI4MDAwMDAgfSwKPiAtICAgICAgIC5uID0geyAubWluID0gMSwg Lm1heCA9IDYgfSwKPiAtICAgICAgIC5tID0geyAubWluID0gNzAsIC5tYXggPSAxMjAgfSwKPiAt ICAgICAgIC5tMSA9IHsgLm1pbiA9IDgsIC5tYXggPSAxOCB9LAo+IC0gICAgICAgLm0yID0geyAu bWluID0gMywgLm1heCA9IDcgfSwKPiAtICAgICAgIC5wID0geyAubWluID0gNywgLm1heCA9IDk4 IH0sCj4gLSAgICAgICAucDEgPSB7IC5taW4gPSAxLCAubWF4ID0gOCB9LAo+IC0gICAgICAgLnAy ID0geyAuZG90X2xpbWl0ID0gMTEyMDAwLAo+IC0gICAgICAgICAgICAgICAucDJfc2xvdyA9IDE0 LCAucDJfZmFzdCA9IDcgfSwKPiAtfTsKPiAtCj4gLQo+IC1zdGF0aWMgY29uc3Qgc3RydWN0IGlu dGVsX2xpbWl0IGludGVsX2xpbWl0c19nNHhfc2R2byA9IHsKPiAtICAgICAgIC5kb3QgPSB7IC5t aW4gPSAyNTAwMCwgLm1heCA9IDI3MDAwMCB9LAo+IC0gICAgICAgLnZjbyA9IHsgLm1pbiA9IDE3 NTAwMDAsIC5tYXggPSAzNTAwMDAwfSwKPiAtICAgICAgIC5uID0geyAubWluID0gMSwgLm1heCA9 IDQgfSwKPiAtICAgICAgIC5tID0geyAubWluID0gMTA0LCAubWF4ID0gMTM4IH0sCj4gLSAgICAg ICAubTEgPSB7IC5taW4gPSAxNywgLm1heCA9IDIzIH0sCj4gLSAgICAgICAubTIgPSB7IC5taW4g PSA1LCAubWF4ID0gMTEgfSwKPiAtICAgICAgIC5wID0geyAubWluID0gMTAsIC5tYXggPSAzMCB9 LAo+IC0gICAgICAgLnAxID0geyAubWluID0gMSwgLm1heCA9IDN9LAo+IC0gICAgICAgLnAyID0g eyAuZG90X2xpbWl0ID0gMjcwMDAwLAo+IC0gICAgICAgICAgICAgICAucDJfc2xvdyA9IDEwLAo+ IC0gICAgICAgICAgICAgICAucDJfZmFzdCA9IDEwCj4gLSAgICAgICB9LAo+IC19Owo+IC0KPiAt c3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCBpbnRlbF9saW1pdHNfZzR4X2hkbWkgPSB7 Cj4gLSAgICAgICAuZG90ID0geyAubWluID0gMjIwMDAsIC5tYXggPSA0MDAwMDAgfSwKPiAtICAg ICAgIC52Y28gPSB7IC5taW4gPSAxNzUwMDAwLCAubWF4ID0gMzUwMDAwMH0sCj4gLSAgICAgICAu biA9IHsgLm1pbiA9IDEsIC5tYXggPSA0IH0sCj4gLSAgICAgICAubSA9IHsgLm1pbiA9IDEwNCwg Lm1heCA9IDEzOCB9LAo+IC0gICAgICAgLm0xID0geyAubWluID0gMTYsIC5tYXggPSAyMyB9LAo+ IC0gICAgICAgLm0yID0geyAubWluID0gNSwgLm1heCA9IDExIH0sCj4gLSAgICAgICAucCA9IHsg Lm1pbiA9IDUsIC5tYXggPSA4MCB9LAo+IC0gICAgICAgLnAxID0geyAubWluID0gMSwgLm1heCA9 IDh9LAo+IC0gICAgICAgLnAyID0geyAuZG90X2xpbWl0ID0gMTY1MDAwLAo+IC0gICAgICAgICAg ICAgICAucDJfc2xvdyA9IDEwLCAucDJfZmFzdCA9IDUgfSwKPiAtfTsKPiAtCj4gLXN0YXRpYyBj b25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgaW50ZWxfbGltaXRzX2c0eF9zaW5nbGVfY2hhbm5lbF9s dmRzID0gewo+IC0gICAgICAgLmRvdCA9IHsgLm1pbiA9IDIwMDAwLCAubWF4ID0gMTE1MDAwIH0s Cj4gLSAgICAgICAudmNvID0geyAubWluID0gMTc1MDAwMCwgLm1heCA9IDM1MDAwMDAgfSwKPiAt ICAgICAgIC5uID0geyAubWluID0gMSwgLm1heCA9IDMgfSwKPiAtICAgICAgIC5tID0geyAubWlu ID0gMTA0LCAubWF4ID0gMTM4IH0sCj4gLSAgICAgICAubTEgPSB7IC5taW4gPSAxNywgLm1heCA9 IDIzIH0sCj4gLSAgICAgICAubTIgPSB7IC5taW4gPSA1LCAubWF4ID0gMTEgfSwKPiAtICAgICAg IC5wID0geyAubWluID0gMjgsIC5tYXggPSAxMTIgfSwKPiAtICAgICAgIC5wMSA9IHsgLm1pbiA9 IDIsIC5tYXggPSA4IH0sCj4gLSAgICAgICAucDIgPSB7IC5kb3RfbGltaXQgPSAwLAo+IC0gICAg ICAgICAgICAgICAucDJfc2xvdyA9IDE0LCAucDJfZmFzdCA9IDE0Cj4gLSAgICAgICB9LAo+IC19 Owo+IC0KPiAtc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCBpbnRlbF9saW1pdHNfZzR4 X2R1YWxfY2hhbm5lbF9sdmRzID0gewo+IC0gICAgICAgLmRvdCA9IHsgLm1pbiA9IDgwMDAwLCAu bWF4ID0gMjI0MDAwIH0sCj4gLSAgICAgICAudmNvID0geyAubWluID0gMTc1MDAwMCwgLm1heCA9 IDM1MDAwMDAgfSwKPiAtICAgICAgIC5uID0geyAubWluID0gMSwgLm1heCA9IDMgfSwKPiAtICAg ICAgIC5tID0geyAubWluID0gMTA0LCAubWF4ID0gMTM4IH0sCj4gLSAgICAgICAubTEgPSB7IC5t aW4gPSAxNywgLm1heCA9IDIzIH0sCj4gLSAgICAgICAubTIgPSB7IC5taW4gPSA1LCAubWF4ID0g MTEgfSwKPiAtICAgICAgIC5wID0geyAubWluID0gMTQsIC5tYXggPSA0MiB9LAo+IC0gICAgICAg LnAxID0geyAubWluID0gMiwgLm1heCA9IDYgfSwKPiAtICAgICAgIC5wMiA9IHsgLmRvdF9saW1p dCA9IDAsCj4gLSAgICAgICAgICAgICAgIC5wMl9zbG93ID0gNywgLnAyX2Zhc3QgPSA3Cj4gLSAg ICAgICB9LAo+IC19Owo+IC0KPiAtc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCBwbnZf bGltaXRzX3Nkdm8gPSB7Cj4gLSAgICAgICAuZG90ID0geyAubWluID0gMjAwMDAsIC5tYXggPSA0 MDAwMDB9LAo+IC0gICAgICAgLnZjbyA9IHsgLm1pbiA9IDE3MDAwMDAsIC5tYXggPSAzNTAwMDAw IH0sCj4gLSAgICAgICAvKiBQaW5ldmlldydzIE5jb3VudGVyIGlzIGEgcmluZyBjb3VudGVyICov Cj4gLSAgICAgICAubiA9IHsgLm1pbiA9IDMsIC5tYXggPSA2IH0sCj4gLSAgICAgICAubSA9IHsg Lm1pbiA9IDIsIC5tYXggPSAyNTYgfSwKPiAtICAgICAgIC8qIFBpbmV2aWV3IG9ubHkgaGFzIG9u ZSBjb21iaW5lZCBtIGRpdmlkZXIsIHdoaWNoIHdlIHRyZWF0IGFzIG0yLiAqLwo+IC0gICAgICAg Lm0xID0geyAubWluID0gMCwgLm1heCA9IDAgfSwKPiAtICAgICAgIC5tMiA9IHsgLm1pbiA9IDAs IC5tYXggPSAyNTQgfSwKPiAtICAgICAgIC5wID0geyAubWluID0gNSwgLm1heCA9IDgwIH0sCj4g LSAgICAgICAucDEgPSB7IC5taW4gPSAxLCAubWF4ID0gOCB9LAo+IC0gICAgICAgLnAyID0geyAu ZG90X2xpbWl0ID0gMjAwMDAwLAo+IC0gICAgICAgICAgICAgICAucDJfc2xvdyA9IDEwLCAucDJf ZmFzdCA9IDUgfSwKPiAtfTsKPiAtCj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQg cG52X2xpbWl0c19sdmRzID0gewo+IC0gICAgICAgLmRvdCA9IHsgLm1pbiA9IDIwMDAwLCAubWF4 ID0gNDAwMDAwIH0sCj4gLSAgICAgICAudmNvID0geyAubWluID0gMTcwMDAwMCwgLm1heCA9IDM1 MDAwMDAgfSwKPiAtICAgICAgIC5uID0geyAubWluID0gMywgLm1heCA9IDYgfSwKPiAtICAgICAg IC5tID0geyAubWluID0gMiwgLm1heCA9IDI1NiB9LAo+IC0gICAgICAgLm0xID0geyAubWluID0g MCwgLm1heCA9IDAgfSwKPiAtICAgICAgIC5tMiA9IHsgLm1pbiA9IDAsIC5tYXggPSAyNTQgfSwK PiAtICAgICAgIC5wID0geyAubWluID0gNywgLm1heCA9IDExMiB9LAo+IC0gICAgICAgLnAxID0g eyAubWluID0gMSwgLm1heCA9IDggfSwKPiAtICAgICAgIC5wMiA9IHsgLmRvdF9saW1pdCA9IDEx MjAwMCwKPiAtICAgICAgICAgICAgICAgLnAyX3Nsb3cgPSAxNCwgLnAyX2Zhc3QgPSAxNCB9LAo+ IC19Owo+IC0KPiAtLyogSXJvbmxha2UgLyBTYW5keWJyaWRnZQo+IC0gKgo+IC0gKiBXZSBjYWxj dWxhdGUgY2xvY2sgdXNpbmcgKHJlZ2lzdGVyX3ZhbHVlICsgMikgZm9yIE4vTTEvTTIsIHNvIGhl cmUKPiAtICogdGhlIHJhbmdlIHZhbHVlIGZvciB0aGVtIGlzIChhY3R1YWxfdmFsdWUgLSAyKS4K PiAtICovCj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgaWxrX2xpbWl0c19kYWMg PSB7Cj4gLSAgICAgICAuZG90ID0geyAubWluID0gMjUwMDAsIC5tYXggPSAzNTAwMDAgfSwKPiAt ICAgICAgIC52Y28gPSB7IC5taW4gPSAxNzYwMDAwLCAubWF4ID0gMzUxMDAwMCB9LAo+IC0gICAg ICAgLm4gPSB7IC5taW4gPSAxLCAubWF4ID0gNSB9LAo+IC0gICAgICAgLm0gPSB7IC5taW4gPSA3 OSwgLm1heCA9IDEyNyB9LAo+IC0gICAgICAgLm0xID0geyAubWluID0gMTIsIC5tYXggPSAyMiB9 LAo+IC0gICAgICAgLm0yID0geyAubWluID0gNSwgLm1heCA9IDkgfSwKPiAtICAgICAgIC5wID0g eyAubWluID0gNSwgLm1heCA9IDgwIH0sCj4gLSAgICAgICAucDEgPSB7IC5taW4gPSAxLCAubWF4 ID0gOCB9LAo+IC0gICAgICAgLnAyID0geyAuZG90X2xpbWl0ID0gMjI1MDAwLAo+IC0gICAgICAg ICAgICAgICAucDJfc2xvdyA9IDEwLCAucDJfZmFzdCA9IDUgfSwKPiAtfTsKPiAtCj4gLXN0YXRp YyBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgaWxrX2xpbWl0c19zaW5nbGVfbHZkcyA9IHsKPiAt ICAgICAgIC5kb3QgPSB7IC5taW4gPSAyNTAwMCwgLm1heCA9IDM1MDAwMCB9LAo+IC0gICAgICAg LnZjbyA9IHsgLm1pbiA9IDE3NjAwMDAsIC5tYXggPSAzNTEwMDAwIH0sCj4gLSAgICAgICAubiA9 IHsgLm1pbiA9IDEsIC5tYXggPSAzIH0sCj4gLSAgICAgICAubSA9IHsgLm1pbiA9IDc5LCAubWF4 ID0gMTE4IH0sCj4gLSAgICAgICAubTEgPSB7IC5taW4gPSAxMiwgLm1heCA9IDIyIH0sCj4gLSAg ICAgICAubTIgPSB7IC5taW4gPSA1LCAubWF4ID0gOSB9LAo+IC0gICAgICAgLnAgPSB7IC5taW4g PSAyOCwgLm1heCA9IDExMiB9LAo+IC0gICAgICAgLnAxID0geyAubWluID0gMiwgLm1heCA9IDgg fSwKPiAtICAgICAgIC5wMiA9IHsgLmRvdF9saW1pdCA9IDIyNTAwMCwKPiAtICAgICAgICAgICAg ICAgLnAyX3Nsb3cgPSAxNCwgLnAyX2Zhc3QgPSAxNCB9LAo+IC19Owo+IC0KPiAtc3RhdGljIGNv bnN0IHN0cnVjdCBpbnRlbF9saW1pdCBpbGtfbGltaXRzX2R1YWxfbHZkcyA9IHsKPiAtICAgICAg IC5kb3QgPSB7IC5taW4gPSAyNTAwMCwgLm1heCA9IDM1MDAwMCB9LAo+IC0gICAgICAgLnZjbyA9 IHsgLm1pbiA9IDE3NjAwMDAsIC5tYXggPSAzNTEwMDAwIH0sCj4gLSAgICAgICAubiA9IHsgLm1p biA9IDEsIC5tYXggPSAzIH0sCj4gLSAgICAgICAubSA9IHsgLm1pbiA9IDc5LCAubWF4ID0gMTI3 IH0sCj4gLSAgICAgICAubTEgPSB7IC5taW4gPSAxMiwgLm1heCA9IDIyIH0sCj4gLSAgICAgICAu bTIgPSB7IC5taW4gPSA1LCAubWF4ID0gOSB9LAo+IC0gICAgICAgLnAgPSB7IC5taW4gPSAxNCwg Lm1heCA9IDU2IH0sCj4gLSAgICAgICAucDEgPSB7IC5taW4gPSAyLCAubWF4ID0gOCB9LAo+IC0g ICAgICAgLnAyID0geyAuZG90X2xpbWl0ID0gMjI1MDAwLAo+IC0gICAgICAgICAgICAgICAucDJf c2xvdyA9IDcsIC5wMl9mYXN0ID0gNyB9LAo+IC19Owo+IC0KPiAtLyogTFZEUyAxMDBtaHogcmVm Y2xrIGxpbWl0cy4gKi8KPiAtc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCBpbGtfbGlt aXRzX3NpbmdsZV9sdmRzXzEwMG0gPSB7Cj4gLSAgICAgICAuZG90ID0geyAubWluID0gMjUwMDAs IC5tYXggPSAzNTAwMDAgfSwKPiAtICAgICAgIC52Y28gPSB7IC5taW4gPSAxNzYwMDAwLCAubWF4 ID0gMzUxMDAwMCB9LAo+IC0gICAgICAgLm4gPSB7IC5taW4gPSAxLCAubWF4ID0gMiB9LAo+IC0g ICAgICAgLm0gPSB7IC5taW4gPSA3OSwgLm1heCA9IDEyNiB9LAo+IC0gICAgICAgLm0xID0geyAu bWluID0gMTIsIC5tYXggPSAyMiB9LAo+IC0gICAgICAgLm0yID0geyAubWluID0gNSwgLm1heCA9 IDkgfSwKPiAtICAgICAgIC5wID0geyAubWluID0gMjgsIC5tYXggPSAxMTIgfSwKPiAtICAgICAg IC5wMSA9IHsgLm1pbiA9IDIsIC5tYXggPSA4IH0sCj4gLSAgICAgICAucDIgPSB7IC5kb3RfbGlt aXQgPSAyMjUwMDAsCj4gLSAgICAgICAgICAgICAgIC5wMl9zbG93ID0gMTQsIC5wMl9mYXN0ID0g MTQgfSwKPiAtfTsKPiAtCj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgaWxrX2xp bWl0c19kdWFsX2x2ZHNfMTAwbSA9IHsKPiAtICAgICAgIC5kb3QgPSB7IC5taW4gPSAyNTAwMCwg Lm1heCA9IDM1MDAwMCB9LAo+IC0gICAgICAgLnZjbyA9IHsgLm1pbiA9IDE3NjAwMDAsIC5tYXgg PSAzNTEwMDAwIH0sCj4gLSAgICAgICAubiA9IHsgLm1pbiA9IDEsIC5tYXggPSAzIH0sCj4gLSAg ICAgICAubSA9IHsgLm1pbiA9IDc5LCAubWF4ID0gMTI2IH0sCj4gLSAgICAgICAubTEgPSB7IC5t aW4gPSAxMiwgLm1heCA9IDIyIH0sCj4gLSAgICAgICAubTIgPSB7IC5taW4gPSA1LCAubWF4ID0g OSB9LAo+IC0gICAgICAgLnAgPSB7IC5taW4gPSAxNCwgLm1heCA9IDQyIH0sCj4gLSAgICAgICAu cDEgPSB7IC5taW4gPSAyLCAubWF4ID0gNiB9LAo+IC0gICAgICAgLnAyID0geyAuZG90X2xpbWl0 ID0gMjI1MDAwLAo+IC0gICAgICAgICAgICAgICAucDJfc2xvdyA9IDcsIC5wMl9mYXN0ID0gNyB9 LAo+IC19Owo+IC0KPiAtc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCBpbnRlbF9saW1p dHNfdmx2ID0gewo+IC0gICAgICAgIC8qCj4gLSAgICAgICAgICogVGhlc2UgYXJlIHRoZSBkYXRh IHJhdGUgbGltaXRzIChtZWFzdXJlZCBpbiBmYXN0IGNsb2NrcykKPiAtICAgICAgICAgKiBzaW5j ZSB0aG9zZSBhcmUgdGhlIHN0cmljdGVzdCBsaW1pdHMgd2UgaGF2ZS4gVGhlIGZhc3QKPiAtICAg ICAgICAgKiBjbG9jayBhbmQgYWN0dWFsIHJhdGUgbGltaXRzIGFyZSBtb3JlIHJlbGF4ZWQsIHNv IGNoZWNraW5nCj4gLSAgICAgICAgICogdGhlbSB3b3VsZCBtYWtlIG5vIGRpZmZlcmVuY2UuCj4g LSAgICAgICAgICovCj4gLSAgICAgICAuZG90ID0geyAubWluID0gMjUwMDAgKiA1LCAubWF4ID0g MjcwMDAwICogNSB9LAo+IC0gICAgICAgLnZjbyA9IHsgLm1pbiA9IDQwMDAwMDAsIC5tYXggPSA2 MDAwMDAwIH0sCj4gLSAgICAgICAubiA9IHsgLm1pbiA9IDEsIC5tYXggPSA3IH0sCj4gLSAgICAg ICAubTEgPSB7IC5taW4gPSAyLCAubWF4ID0gMyB9LAo+IC0gICAgICAgLm0yID0geyAubWluID0g MTEsIC5tYXggPSAxNTYgfSwKPiAtICAgICAgIC5wMSA9IHsgLm1pbiA9IDIsIC5tYXggPSAzIH0s Cj4gLSAgICAgICAucDIgPSB7IC5wMl9zbG93ID0gMiwgLnAyX2Zhc3QgPSAyMCB9LCAvKiBzbG93 PW1pbiwgZmFzdD1tYXggKi8KPiAtfTsKPiAtCj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxf bGltaXQgaW50ZWxfbGltaXRzX2NodiA9IHsKPiAtICAgICAgIC8qCj4gLSAgICAgICAgKiBUaGVz ZSBhcmUgdGhlIGRhdGEgcmF0ZSBsaW1pdHMgKG1lYXN1cmVkIGluIGZhc3QgY2xvY2tzKQo+IC0g ICAgICAgICogc2luY2UgdGhvc2UgYXJlIHRoZSBzdHJpY3Rlc3QgbGltaXRzIHdlIGhhdmUuICBU aGUgZmFzdAo+IC0gICAgICAgICogY2xvY2sgYW5kIGFjdHVhbCByYXRlIGxpbWl0cyBhcmUgbW9y ZSByZWxheGVkLCBzbyBjaGVja2luZwo+IC0gICAgICAgICogdGhlbSB3b3VsZCBtYWtlIG5vIGRp ZmZlcmVuY2UuCj4gLSAgICAgICAgKi8KPiAtICAgICAgIC5kb3QgPSB7IC5taW4gPSAyNTAwMCAq IDUsIC5tYXggPSA1NDAwMDAgKiA1fSwKPiAtICAgICAgIC52Y28gPSB7IC5taW4gPSA0ODAwMDAw LCAubWF4ID0gNjQ4MDAwMCB9LAo+IC0gICAgICAgLm4gPSB7IC5taW4gPSAxLCAubWF4ID0gMSB9 LAo+IC0gICAgICAgLm0xID0geyAubWluID0gMiwgLm1heCA9IDIgfSwKPiAtICAgICAgIC5tMiA9 IHsgLm1pbiA9IDI0IDw8IDIyLCAubWF4ID0gMTc1IDw8IDIyIH0sCj4gLSAgICAgICAucDEgPSB7 IC5taW4gPSAyLCAubWF4ID0gNCB9LAo+IC0gICAgICAgLnAyID0geyAucDJfc2xvdyA9IDEsIC5w Ml9mYXN0ID0gMTQgfSwKPiAtfTsKPiAtCj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbGlt aXQgaW50ZWxfbGltaXRzX2J4dCA9IHsKPiAtICAgICAgIC8qIEZJWE1FOiBmaW5kIHJlYWwgZG90 IGxpbWl0cyAqLwo+IC0gICAgICAgLmRvdCA9IHsgLm1pbiA9IDAsIC5tYXggPSBJTlRfTUFYIH0s Cj4gLSAgICAgICAudmNvID0geyAubWluID0gNDgwMDAwMCwgLm1heCA9IDY3MDAwMDAgfSwKPiAt ICAgICAgIC5uID0geyAubWluID0gMSwgLm1heCA9IDEgfSwKPiAtICAgICAgIC5tMSA9IHsgLm1p biA9IDIsIC5tYXggPSAyIH0sCj4gLSAgICAgICAvKiBGSVhNRTogZmluZCByZWFsIG0yIGxpbWl0 cyAqLwo+IC0gICAgICAgLm0yID0geyAubWluID0gMiA8PCAyMiwgLm1heCA9IDI1NSA8PCAyMiB9 LAo+IC0gICAgICAgLnAxID0geyAubWluID0gMiwgLm1heCA9IDQgfSwKPiAtICAgICAgIC5wMiA9 IHsgLnAyX3Nsb3cgPSAxLCAucDJfZmFzdCA9IDIwIH0sCj4gLX07Cj4gLQo+ICAvKiBXQSBEaXNw bGF5ICMwODI3OiBHZW45OmFsbCAqLwo+ICBzdGF0aWMgdm9pZAo+ICBza2xfd2FfODI3KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBlIHBpcGUsIGJvb2wgZW5hYmxl KQo+IEBAIC01MDYsNDgyICsyMzAsNiBAQCBpc190cmFuc19wb3J0X3N5bmNfbW9kZShjb25zdCBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiAgICAgICAgICAgICAgICAgaXNf dHJhbnNfcG9ydF9zeW5jX3NsYXZlKGNydGNfc3RhdGUpOwo+ICB9Cj4KPiAtLyoKPiAtICogUGxh dGZvcm0gc3BlY2lmaWMgaGVscGVycyB0byBjYWxjdWxhdGUgdGhlIHBvcnQgUExMIGxvb3BiYWNr LSAoY2xvY2subSksCj4gLSAqIGFuZCBwb3N0LWRpdmlkZXIgKGNsb2NrLnApIHZhbHVlcywgcHJl LSAoY2xvY2sudmNvKSBhbmQgcG9zdC1kaXZpZGVkIGZhc3QKPiAtICogKGNsb2NrLmRvdCkgY2xv Y2sgcmF0ZXMuIFRoaXMgZmFzdCBkb3QgY2xvY2sgaXMgZmVkIHRvIHRoZSBwb3J0J3MgSU8gbG9n aWMuCj4gLSAqIFRoZSBoZWxwZXJzJyByZXR1cm4gdmFsdWUgaXMgdGhlIHJhdGUgb2YgdGhlIGNs b2NrIHRoYXQgaXMgZmVkIHRvIHRoZQo+IC0gKiBkaXNwbGF5IGVuZ2luZSdzIHBpcGUgd2hpY2gg Y2FuIGJlIHRoZSBhYm92ZSBmYXN0IGRvdCBjbG9jayByYXRlIG9yIGEKPiAtICogZGl2aWRlZC1k b3duIHZlcnNpb24gb2YgaXQuCj4gLSAqLwo+IC0vKiBtMSBpcyByZXNlcnZlZCBhcyAwIGluIFBp bmV2aWV3LCBuIGlzIGEgcmluZyBjb3VudGVyICovCj4gLXN0YXRpYyBpbnQgcG52X2NhbGNfZHBs bF9wYXJhbXMoaW50IHJlZmNsaywgc3RydWN0IGRwbGwgKmNsb2NrKQo+IC17Cj4gLSAgICAgICBj bG9jay0+bSA9IGNsb2NrLT5tMiArIDI7Cj4gLSAgICAgICBjbG9jay0+cCA9IGNsb2NrLT5wMSAq IGNsb2NrLT5wMjsKPiAtICAgICAgIGlmIChXQVJOX09OKGNsb2NrLT5uID09IDAgfHwgY2xvY2st PnAgPT0gMCkpCj4gLSAgICAgICAgICAgICAgIHJldHVybiAwOwo+IC0gICAgICAgY2xvY2stPnZj byA9IERJVl9ST1VORF9DTE9TRVNUKHJlZmNsayAqIGNsb2NrLT5tLCBjbG9jay0+bik7Cj4gLSAg ICAgICBjbG9jay0+ZG90ID0gRElWX1JPVU5EX0NMT1NFU1QoY2xvY2stPnZjbywgY2xvY2stPnAp Owo+IC0KPiAtICAgICAgIHJldHVybiBjbG9jay0+ZG90Owo+IC19Cj4gLQo+IC1zdGF0aWMgdTMy IGk5eHhfZHBsbF9jb21wdXRlX20oc3RydWN0IGRwbGwgKmRwbGwpCj4gLXsKPiAtICAgICAgIHJl dHVybiA1ICogKGRwbGwtPm0xICsgMikgKyAoZHBsbC0+bTIgKyAyKTsKPiAtfQo+IC0KPiAtc3Rh dGljIGludCBpOXh4X2NhbGNfZHBsbF9wYXJhbXMoaW50IHJlZmNsaywgc3RydWN0IGRwbGwgKmNs b2NrKQo+IC17Cj4gLSAgICAgICBjbG9jay0+bSA9IGk5eHhfZHBsbF9jb21wdXRlX20oY2xvY2sp Owo+IC0gICAgICAgY2xvY2stPnAgPSBjbG9jay0+cDEgKiBjbG9jay0+cDI7Cj4gLSAgICAgICBp ZiAoV0FSTl9PTihjbG9jay0+biArIDIgPT0gMCB8fCBjbG9jay0+cCA9PSAwKSkKPiAtICAgICAg ICAgICAgICAgcmV0dXJuIDA7Cj4gLSAgICAgICBjbG9jay0+dmNvID0gRElWX1JPVU5EX0NMT1NF U1QocmVmY2xrICogY2xvY2stPm0sIGNsb2NrLT5uICsgMik7Cj4gLSAgICAgICBjbG9jay0+ZG90 ID0gRElWX1JPVU5EX0NMT1NFU1QoY2xvY2stPnZjbywgY2xvY2stPnApOwo+IC0KPiAtICAgICAg IHJldHVybiBjbG9jay0+ZG90Owo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IHZsdl9jYWxjX2RwbGxf cGFyYW1zKGludCByZWZjbGssIHN0cnVjdCBkcGxsICpjbG9jaykKPiAtewo+IC0gICAgICAgY2xv Y2stPm0gPSBjbG9jay0+bTEgKiBjbG9jay0+bTI7Cj4gLSAgICAgICBjbG9jay0+cCA9IGNsb2Nr LT5wMSAqIGNsb2NrLT5wMjsKPiAtICAgICAgIGlmIChXQVJOX09OKGNsb2NrLT5uID09IDAgfHwg Y2xvY2stPnAgPT0gMCkpCj4gLSAgICAgICAgICAgICAgIHJldHVybiAwOwo+IC0gICAgICAgY2xv Y2stPnZjbyA9IERJVl9ST1VORF9DTE9TRVNUKHJlZmNsayAqIGNsb2NrLT5tLCBjbG9jay0+bik7 Cj4gLSAgICAgICBjbG9jay0+ZG90ID0gRElWX1JPVU5EX0NMT1NFU1QoY2xvY2stPnZjbywgY2xv Y2stPnApOwo+IC0KPiAtICAgICAgIHJldHVybiBjbG9jay0+ZG90IC8gNTsKPiAtfQo+IC0KPiAt aW50IGNodl9jYWxjX2RwbGxfcGFyYW1zKGludCByZWZjbGssIHN0cnVjdCBkcGxsICpjbG9jaykK PiAtewo+IC0gICAgICAgY2xvY2stPm0gPSBjbG9jay0+bTEgKiBjbG9jay0+bTI7Cj4gLSAgICAg ICBjbG9jay0+cCA9IGNsb2NrLT5wMSAqIGNsb2NrLT5wMjsKPiAtICAgICAgIGlmIChXQVJOX09O KGNsb2NrLT5uID09IDAgfHwgY2xvY2stPnAgPT0gMCkpCj4gLSAgICAgICAgICAgICAgIHJldHVy biAwOwo+IC0gICAgICAgY2xvY2stPnZjbyA9IERJVl9ST1VORF9DTE9TRVNUX1VMTChtdWxfdTMy X3UzMihyZWZjbGssIGNsb2NrLT5tKSwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2xvY2stPm4gPDwgMjIpOwo+IC0gICAgICAgY2xvY2stPmRvdCA9IERJVl9S T1VORF9DTE9TRVNUKGNsb2NrLT52Y28sIGNsb2NrLT5wKTsKPiAtCj4gLSAgICAgICByZXR1cm4g Y2xvY2stPmRvdCAvIDU7Cj4gLX0KPiAtCj4gLS8qCj4gLSAqIFJldHVybnMgd2hldGhlciB0aGUg Z2l2ZW4gc2V0IG9mIGRpdmlzb3JzIGFyZSB2YWxpZCBmb3IgYSBnaXZlbiByZWZjbGsgd2l0aAo+ IC0gKiB0aGUgZ2l2ZW4gY29ubmVjdG9ycy4KPiAtICovCj4gLXN0YXRpYyBib29sIGludGVsX3Bs bF9pc192YWxpZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCAqbGltaXQsCj4g LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBkcGxsICpjbG9jaykK PiAtewo+IC0gICAgICAgaWYgKGNsb2NrLT5uIDwgbGltaXQtPm4ubWluIHx8IGxpbWl0LT5uLm1h eCA8IGNsb2NrLT5uKQo+IC0gICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cj4gLSAgICAgICBp ZiAoY2xvY2stPnAxIDwgbGltaXQtPnAxLm1pbiB8fCBsaW1pdC0+cDEubWF4IDwgY2xvY2stPnAx KQo+IC0gICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cj4gLSAgICAgICBpZiAoY2xvY2stPm0y IDwgbGltaXQtPm0yLm1pbiB8fCBsaW1pdC0+bTIubWF4IDwgY2xvY2stPm0yKQo+IC0gICAgICAg ICAgICAgICByZXR1cm4gZmFsc2U7Cj4gLSAgICAgICBpZiAoY2xvY2stPm0xIDwgbGltaXQtPm0x Lm1pbiB8fCBsaW1pdC0+bTEubWF4IDwgY2xvY2stPm0xKQo+IC0gICAgICAgICAgICAgICByZXR1 cm4gZmFsc2U7Cj4gLQo+IC0gICAgICAgaWYgKCFJU19QSU5FVklFVyhkZXZfcHJpdikgJiYgIUlT X1ZBTExFWVZJRVcoZGV2X3ByaXYpICYmCj4gLSAgICAgICAgICAgIUlTX0NIRVJSWVZJRVcoZGV2 X3ByaXYpICYmICFJU19HRU45X0xQKGRldl9wcml2KSkKPiAtICAgICAgICAgICAgICAgaWYgKGNs b2NrLT5tMSA8PSBjbG9jay0+bTIpCj4gLSAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh bHNlOwo+IC0KPiAtICAgICAgIGlmICghSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgJiYgIUlTX0NI RVJSWVZJRVcoZGV2X3ByaXYpICYmCj4gLSAgICAgICAgICAgIUlTX0dFTjlfTFAoZGV2X3ByaXYp KSB7Cj4gLSAgICAgICAgICAgICAgIGlmIChjbG9jay0+cCA8IGxpbWl0LT5wLm1pbiB8fCBsaW1p dC0+cC5tYXggPCBjbG9jay0+cCkKPiAtICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs c2U7Cj4gLSAgICAgICAgICAgICAgIGlmIChjbG9jay0+bSA8IGxpbWl0LT5tLm1pbiB8fCBsaW1p dC0+bS5tYXggPCBjbG9jay0+bSkKPiAtICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs c2U7Cj4gLSAgICAgICB9Cj4gLQo+IC0gICAgICAgaWYgKGNsb2NrLT52Y28gPCBsaW1pdC0+dmNv Lm1pbiB8fCBsaW1pdC0+dmNvLm1heCA8IGNsb2NrLT52Y28pCj4gLSAgICAgICAgICAgICAgIHJl dHVybiBmYWxzZTsKPiAtICAgICAgIC8qIFhYWDogV2UgbWF5IG5lZWQgdG8gYmUgY2hlY2tpbmcg IkRvdCBjbG9jayIgZGVwZW5kaW5nIG9uIHRoZSBtdWx0aXBsaWVyLAo+IC0gICAgICAgICogY29u bmVjdG9yLCBldGMuLCByYXRoZXIgdGhhbiBqdXN0IGEgc2luZ2xlIHJhbmdlLgo+IC0gICAgICAg ICovCj4gLSAgICAgICBpZiAoY2xvY2stPmRvdCA8IGxpbWl0LT5kb3QubWluIHx8IGxpbWl0LT5k b3QubWF4IDwgY2xvY2stPmRvdCkKPiAtICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+IC0K PiAtICAgICAgIHJldHVybiB0cnVlOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50Cj4gLWk5eHhfc2Vs ZWN0X3AyX2Rpdihjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgKmxpbWl0LAo+IC0gICAgICAgICAg ICAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiAtICAg ICAgICAgICAgICAgICAgaW50IHRhcmdldCkKPiAtewo+IC0gICAgICAgc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjX3N0YXRlLT51YXBpLmNydGMtPmRldik7 Cj4gLQo+IC0gICAgICAgaWYgKGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxf T1VUUFVUX0xWRFMpKSB7Cj4gLSAgICAgICAgICAgICAgIC8qCj4gLSAgICAgICAgICAgICAgICAq IEZvciBMVkRTIGp1c3QgcmVseSBvbiBpdHMgY3VycmVudCBzZXR0aW5ncyBmb3IgZHVhbC1jaGFu bmVsLgo+IC0gICAgICAgICAgICAgICAgKiBXZSBoYXZlbid0IGZpZ3VyZWQgb3V0IGhvdyB0byBy ZWxpYWJseSBzZXQgdXAgZGlmZmVyZW50Cj4gLSAgICAgICAgICAgICAgICAqIHNpbmdsZS9kdWFs IGNoYW5uZWwgc3RhdGUsIGlmIHdlIGV2ZW4gY2FuLgo+IC0gICAgICAgICAgICAgICAgKi8KPiAt ICAgICAgICAgICAgICAgaWYgKGludGVsX2lzX2R1YWxfbGlua19sdmRzKGRldl9wcml2KSkKPiAt ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGltaXQtPnAyLnAyX2Zhc3Q7Cj4gLSAgICAg ICAgICAgICAgIGVsc2UKPiAtICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGltaXQtPnAy LnAyX3Nsb3c7Cj4gLSAgICAgICB9IGVsc2Ugewo+IC0gICAgICAgICAgICAgICBpZiAodGFyZ2V0 IDwgbGltaXQtPnAyLmRvdF9saW1pdCkKPiAtICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g bGltaXQtPnAyLnAyX3Nsb3c7Cj4gLSAgICAgICAgICAgICAgIGVsc2UKPiAtICAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4gbGltaXQtPnAyLnAyX2Zhc3Q7Cj4gLSAgICAgICB9Cj4gLX0KPiAt Cj4gLS8qCj4gLSAqIFJldHVybnMgYSBzZXQgb2YgZGl2aXNvcnMgZm9yIHRoZSBkZXNpcmVkIHRh cmdldCBjbG9jayB3aXRoIHRoZSBnaXZlbgo+IC0gKiByZWZjbGssIG9yIEZBTFNFLiAgVGhlIHJl dHVybmVkIHZhbHVlcyByZXByZXNlbnQgdGhlIGNsb2NrIGVxdWF0aW9uOgo+IC0gKiByZWZsY2sg KiAoNSAqIChtMSArIDIpICsgKG0yICsgMikpIC8gKG4gKyAyKSAvIHAxIC8gcDIuCj4gLSAqCj4g LSAqIFRhcmdldCBhbmQgcmVmZXJlbmNlIGNsb2NrcyBhcmUgc3BlY2lmaWVkIGluIGtIei4KPiAt ICoKPiAtICogSWYgbWF0Y2hfY2xvY2sgaXMgcHJvdmlkZWQsIHRoZW4gYmVzdF9jbG9jayBQIGRp dmlkZXIgbXVzdCBtYXRjaCB0aGUgUAo+IC0gKiBkaXZpZGVyIGZyb20gQG1hdGNoX2Nsb2NrIHVz ZWQgZm9yIExWRFMgZG93bmNsb2NraW5nLgo+IC0gKi8KPiAtc3RhdGljIGJvb2wKPiAtaTl4eF9m aW5kX2Jlc3RfZHBsbChjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgKmxpbWl0LAo+IC0gICAgICAg ICAgICAgICAgICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gLSAgICAg ICAgICAgICAgICAgICBpbnQgdGFyZ2V0LCBpbnQgcmVmY2xrLCBzdHJ1Y3QgZHBsbCAqbWF0Y2hf Y2xvY2ssCj4gLSAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHBsbCAqYmVzdF9jbG9jaykKPiAt ewo+IC0gICAgICAgc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGNfc3RhdGUtPnVhcGkuY3J0 Yy0+ZGV2Owo+IC0gICAgICAgc3RydWN0IGRwbGwgY2xvY2s7Cj4gLSAgICAgICBpbnQgZXJyID0g dGFyZ2V0Owo+IC0KPiAtICAgICAgIG1lbXNldChiZXN0X2Nsb2NrLCAwLCBzaXplb2YoKmJlc3Rf Y2xvY2spKTsKPiAtCj4gLSAgICAgICBjbG9jay5wMiA9IGk5eHhfc2VsZWN0X3AyX2RpdihsaW1p dCwgY3J0Y19zdGF0ZSwgdGFyZ2V0KTsKPiAtCj4gLSAgICAgICBmb3IgKGNsb2NrLm0xID0gbGlt aXQtPm0xLm1pbjsgY2xvY2subTEgPD0gbGltaXQtPm0xLm1heDsKPiAtICAgICAgICAgICAgY2xv Y2subTErKykgewo+IC0gICAgICAgICAgICAgICBmb3IgKGNsb2NrLm0yID0gbGltaXQtPm0yLm1p bjsKPiAtICAgICAgICAgICAgICAgICAgICBjbG9jay5tMiA8PSBsaW1pdC0+bTIubWF4OyBjbG9j ay5tMisrKSB7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNsb2NrLm0yID49IGNsb2Nr Lm0xKQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gLSAgICAgICAg ICAgICAgICAgICAgICAgZm9yIChjbG9jay5uID0gbGltaXQtPm4ubWluOwo+IC0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2xvY2subiA8PSBsaW1pdC0+bi5tYXg7IGNsb2NrLm4rKykgewo+ IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjbG9jay5wMSA9IGxpbWl0LT5w MS5taW47Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrLnAx IDw9IGxpbWl0LT5wMS5tYXg7IGNsb2NrLnAxKyspIHsKPiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IHRoaXNfZXJyOwo+IC0KPiAtICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaTl4eF9jYWxjX2RwbGxfcGFyYW1zKHJlZmNsaywgJmNsb2Nr KTsKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbnRlbF9w bGxfaXNfdmFsaWQodG9faTkxNShkZXYpLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdCwKPiAtICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNsb2Nr KSkKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250 aW51ZTsKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNo X2Nsb2NrICYmCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj bG9jay5wICE9IG1hdGNoX2Nsb2NrLT5wKQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+IC0KPiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGhpc19lcnIgPSBhYnMoY2xvY2suZG90IC0gdGFyZ2V0KTsKPiAt ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXNfZXJyIDwgZXJy KSB7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmJl c3RfY2xvY2sgPSBjbG9jazsKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBlcnIgPSB0aGlzX2VycjsKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQo+IC0gICAg ICAgICAgICAgICAgICAgICAgIH0KPiAtICAgICAgICAgICAgICAgfQo+IC0gICAgICAgfQo+IC0K PiAtICAgICAgIHJldHVybiAoZXJyICE9IHRhcmdldCk7Cj4gLX0KPiAtCj4gLS8qCj4gLSAqIFJl dHVybnMgYSBzZXQgb2YgZGl2aXNvcnMgZm9yIHRoZSBkZXNpcmVkIHRhcmdldCBjbG9jayB3aXRo IHRoZSBnaXZlbgo+IC0gKiByZWZjbGssIG9yIEZBTFNFLiAgVGhlIHJldHVybmVkIHZhbHVlcyBy ZXByZXNlbnQgdGhlIGNsb2NrIGVxdWF0aW9uOgo+IC0gKiByZWZsY2sgKiAoNSAqIChtMSArIDIp ICsgKG0yICsgMikpIC8gKG4gKyAyKSAvIHAxIC8gcDIuCj4gLSAqCj4gLSAqIFRhcmdldCBhbmQg cmVmZXJlbmNlIGNsb2NrcyBhcmUgc3BlY2lmaWVkIGluIGtIei4KPiAtICoKPiAtICogSWYgbWF0 Y2hfY2xvY2sgaXMgcHJvdmlkZWQsIHRoZW4gYmVzdF9jbG9jayBQIGRpdmlkZXIgbXVzdCBtYXRj aCB0aGUgUAo+IC0gKiBkaXZpZGVyIGZyb20gQG1hdGNoX2Nsb2NrIHVzZWQgZm9yIExWRFMgZG93 bmNsb2NraW5nLgo+IC0gKi8KPiAtc3RhdGljIGJvb2wKPiAtcG52X2ZpbmRfYmVzdF9kcGxsKGNv bnN0IHN0cnVjdCBpbnRlbF9saW1pdCAqbGltaXQsCj4gLSAgICAgICAgICAgICAgICAgIHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+IC0gICAgICAgICAgICAgICAgICBpbnQg dGFyZ2V0LCBpbnQgcmVmY2xrLCBzdHJ1Y3QgZHBsbCAqbWF0Y2hfY2xvY2ssCj4gLSAgICAgICAg ICAgICAgICAgIHN0cnVjdCBkcGxsICpiZXN0X2Nsb2NrKQo+IC17Cj4gLSAgICAgICBzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gY3J0Y19zdGF0ZS0+dWFwaS5jcnRjLT5kZXY7Cj4gLSAgICAgICBz dHJ1Y3QgZHBsbCBjbG9jazsKPiAtICAgICAgIGludCBlcnIgPSB0YXJnZXQ7Cj4gLQo+IC0gICAg ICAgbWVtc2V0KGJlc3RfY2xvY2ssIDAsIHNpemVvZigqYmVzdF9jbG9jaykpOwo+IC0KPiAtICAg ICAgIGNsb2NrLnAyID0gaTl4eF9zZWxlY3RfcDJfZGl2KGxpbWl0LCBjcnRjX3N0YXRlLCB0YXJn ZXQpOwo+IC0KPiAtICAgICAgIGZvciAoY2xvY2subTEgPSBsaW1pdC0+bTEubWluOyBjbG9jay5t MSA8PSBsaW1pdC0+bTEubWF4Owo+IC0gICAgICAgICAgICBjbG9jay5tMSsrKSB7Cj4gLSAgICAg ICAgICAgICAgIGZvciAoY2xvY2subTIgPSBsaW1pdC0+bTIubWluOwo+IC0gICAgICAgICAgICAg ICAgICAgIGNsb2NrLm0yIDw9IGxpbWl0LT5tMi5tYXg7IGNsb2NrLm0yKyspIHsKPiAtICAgICAg ICAgICAgICAgICAgICAgICBmb3IgKGNsb2NrLm4gPSBsaW1pdC0+bi5taW47Cj4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjbG9jay5uIDw9IGxpbWl0LT5uLm1heDsgY2xvY2subisrKSB7 Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNsb2NrLnAxID0gbGltaXQt PnAxLm1pbjsKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2su cDEgPD0gbGltaXQtPnAxLm1heDsgY2xvY2sucDErKykgewo+IC0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgdGhpc19lcnI7Cj4gLQo+IC0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwbnZfY2FsY19kcGxsX3BhcmFtcyhyZWZjbGssICZjbG9j ayk7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaW50ZWxf cGxsX2lzX3ZhbGlkKHRvX2k5MTUoZGV2KSwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQsCj4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjbG9j aykpCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u dGludWU7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRj aF9jbG9jayAmJgo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2xvY2sucCAhPSBtYXRjaF9jbG9jay0+cCkKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPiAtCj4gLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRoaXNfZXJyID0gYWJzKGNsb2NrLmRvdCAtIHRhcmdldCk7Cj4g LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzX2VyciA8IGVy cikgewo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpi ZXN0X2Nsb2NrID0gY2xvY2s7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZXJyID0gdGhpc19lcnI7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIH0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KPiAtICAg ICAgICAgICAgICAgICAgICAgICB9Cj4gLSAgICAgICAgICAgICAgIH0KPiAtICAgICAgIH0KPiAt Cj4gLSAgICAgICByZXR1cm4gKGVyciAhPSB0YXJnZXQpOwo+IC19Cj4gLQo+IC0vKgo+IC0gKiBS ZXR1cm5zIGEgc2V0IG9mIGRpdmlzb3JzIGZvciB0aGUgZGVzaXJlZCB0YXJnZXQgY2xvY2sgd2l0 aCB0aGUgZ2l2ZW4KPiAtICogcmVmY2xrLCBvciBGQUxTRS4gIFRoZSByZXR1cm5lZCB2YWx1ZXMg cmVwcmVzZW50IHRoZSBjbG9jayBlcXVhdGlvbjoKPiAtICogcmVmbGNrICogKDUgKiAobTEgKyAy KSArIChtMiArIDIpKSAvIChuICsgMikgLyBwMSAvIHAyLgo+IC0gKgo+IC0gKiBUYXJnZXQgYW5k IHJlZmVyZW5jZSBjbG9ja3MgYXJlIHNwZWNpZmllZCBpbiBrSHouCj4gLSAqCj4gLSAqIElmIG1h dGNoX2Nsb2NrIGlzIHByb3ZpZGVkLCB0aGVuIGJlc3RfY2xvY2sgUCBkaXZpZGVyIG11c3QgbWF0 Y2ggdGhlIFAKPiAtICogZGl2aWRlciBmcm9tIEBtYXRjaF9jbG9jayB1c2VkIGZvciBMVkRTIGRv d25jbG9ja2luZy4KPiAtICovCj4gLXN0YXRpYyBib29sCj4gLWc0eF9maW5kX2Jlc3RfZHBsbChj b25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgKmxpbWl0LAo+IC0gICAgICAgICAgICAgICAgICBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiAtICAgICAgICAgICAgICAgICAgaW50 IHRhcmdldCwgaW50IHJlZmNsaywgc3RydWN0IGRwbGwgKm1hdGNoX2Nsb2NrLAo+IC0gICAgICAg ICAgICAgICAgICBzdHJ1Y3QgZHBsbCAqYmVzdF9jbG9jaykKPiAtewo+IC0gICAgICAgc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IGNydGNfc3RhdGUtPnVhcGkuY3J0Yy0+ZGV2Owo+IC0gICAgICAg c3RydWN0IGRwbGwgY2xvY2s7Cj4gLSAgICAgICBpbnQgbWF4X247Cj4gLSAgICAgICBib29sIGZv dW5kID0gZmFsc2U7Cj4gLSAgICAgICAvKiBhcHByb3hpbWF0ZWx5IGVxdWFscyB0YXJnZXQgKiAw LjAwNTg1ICovCj4gLSAgICAgICBpbnQgZXJyX21vc3QgPSAodGFyZ2V0ID4+IDgpICsgKHRhcmdl dCA+PiA5KTsKPiAtCj4gLSAgICAgICBtZW1zZXQoYmVzdF9jbG9jaywgMCwgc2l6ZW9mKCpiZXN0 X2Nsb2NrKSk7Cj4gLQo+IC0gICAgICAgY2xvY2sucDIgPSBpOXh4X3NlbGVjdF9wMl9kaXYobGlt aXQsIGNydGNfc3RhdGUsIHRhcmdldCk7Cj4gLQo+IC0gICAgICAgbWF4X24gPSBsaW1pdC0+bi5t YXg7Cj4gLSAgICAgICAvKiBiYXNlZCBvbiBoYXJkd2FyZSByZXF1aXJlbWVudCwgcHJlZmVyIHNt YWxsZXIgbiB0byBwcmVjaXNpb24gKi8KPiAtICAgICAgIGZvciAoY2xvY2subiA9IGxpbWl0LT5u Lm1pbjsgY2xvY2subiA8PSBtYXhfbjsgY2xvY2subisrKSB7Cj4gLSAgICAgICAgICAgICAgIC8q IGJhc2VkIG9uIGhhcmR3YXJlIHJlcXVpcmVtZW50LCBwcmVmZXJlIGxhcmdlciBtMSxtMiAqLwo+ IC0gICAgICAgICAgICAgICBmb3IgKGNsb2NrLm0xID0gbGltaXQtPm0xLm1heDsKPiAtICAgICAg ICAgICAgICAgICAgICBjbG9jay5tMSA+PSBsaW1pdC0+bTEubWluOyBjbG9jay5tMS0tKSB7Cj4g LSAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjbG9jay5tMiA9IGxpbWl0LT5tMi5tYXg7Cj4g LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9jay5tMiA+PSBsaW1pdC0+bTIubWluOyBj bG9jay5tMi0tKSB7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNsb2Nr LnAxID0gbGltaXQtPnAxLm1heDsKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2xvY2sucDEgPj0gbGltaXQtPnAxLm1pbjsgY2xvY2sucDEtLSkgewo+IC0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGhpc19lcnI7Cj4gLQo+IC0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpOXh4X2NhbGNfZHBsbF9wYXJhbXMocmVm Y2xrLCAmY2xvY2spOwo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoIWludGVsX3BsbF9pc192YWxpZCh0b19pOTE1KGRldiksCj4gLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0LAo+IC0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmY2xvY2spKQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnRpbnVlOwo+IC0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGhpc19lcnIgPSBhYnMoY2xvY2suZG90IC0gdGFyZ2V0KTsKPiAtICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXNfZXJyIDwgZXJyX21vc3QpIHsKPiAt ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYmVzdF9jbG9j ayA9IGNsb2NrOwo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGVycl9tb3N0ID0gdGhpc19lcnI7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbWF4X24gPSBjbG9jay5uOwo+IC0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKPiAtICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfQo+IC0gICAgICAgICAgICAgICAgICAgICAgIH0KPiAtICAgICAgICAgICAgICAgfQo+ IC0gICAgICAgfQo+IC0gICAgICAgcmV0dXJuIGZvdW5kOwo+IC19Cj4gLQo+IC0vKgo+IC0gKiBD aGVjayBpZiB0aGUgY2FsY3VsYXRlZCBQTEwgY29uZmlndXJhdGlvbiBpcyBtb3JlIG9wdGltYWwg Y29tcGFyZWQgdG8gdGhlCj4gLSAqIGJlc3QgY29uZmlndXJhdGlvbiBhbmQgZXJyb3IgZm91bmQg c28gZmFyLiBSZXR1cm4gdGhlIGNhbGN1bGF0ZWQgZXJyb3IuCj4gLSAqLwo+IC1zdGF0aWMgYm9v bCB2bHZfUExMX2lzX29wdGltYWwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHRhcmdldF9m cmVxLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZHBsbCAq Y2FsY3VsYXRlZF9jbG9jaywKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg c3RydWN0IGRwbGwgKmJlc3RfY2xvY2ssCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGludCBiZXN0X2Vycm9yX3BwbSwKPiAtICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgaW50ICplcnJvcl9wcG0pCj4gLXsKPiAtICAgICAgIC8qCj4gLSAgICAg ICAgKiBGb3IgQ0hWIGlnbm9yZSB0aGUgZXJyb3IgYW5kIGNvbnNpZGVyIG9ubHkgdGhlIFAgdmFs dWUuCj4gLSAgICAgICAgKiBQcmVmZXIgYSBiaWdnZXIgUCB2YWx1ZSBiYXNlZCBvbiBIVyByZXF1 aXJlbWVudHMuCj4gLSAgICAgICAgKi8KPiAtICAgICAgIGlmIChJU19DSEVSUllWSUVXKHRvX2k5 MTUoZGV2KSkpIHsKPiAtICAgICAgICAgICAgICAgKmVycm9yX3BwbSA9IDA7Cj4gLQo+IC0gICAg ICAgICAgICAgICByZXR1cm4gY2FsY3VsYXRlZF9jbG9jay0+cCA+IGJlc3RfY2xvY2stPnA7Cj4g LSAgICAgICB9Cj4gLQo+IC0gICAgICAgaWYgKGRybV9XQVJOX09OX09OQ0UoZGV2LCAhdGFyZ2V0 X2ZyZXEpKQo+IC0gICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cj4gLQo+IC0gICAgICAgKmVy cm9yX3BwbSA9IGRpdl91NjQoMTAwMDAwMFVMTCAqCj4gLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBhYnModGFyZ2V0X2ZyZXEgLSBjYWxjdWxhdGVkX2Nsb2NrLT5kb3QpLAo+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2ZyZXEpOwo+IC0gICAgICAgLyoKPiAtICAg ICAgICAqIFByZWZlciBhIGJldHRlciBQIHZhbHVlIG92ZXIgYSBiZXR0ZXIgKHNtYWxsZXIpIGVy cm9yIGlmIHRoZSBlcnJvcgo+IC0gICAgICAgICogaXMgc21hbGwuIEVuc3VyZSB0aGlzIHByZWZl cmVuY2UgZm9yIGZ1dHVyZSBjb25maWd1cmF0aW9ucyB0b28gYnkKPiAtICAgICAgICAqIHNldHRp bmcgdGhlIGVycm9yIHRvIDAuCj4gLSAgICAgICAgKi8KPiAtICAgICAgIGlmICgqZXJyb3JfcHBt IDwgMTAwICYmIGNhbGN1bGF0ZWRfY2xvY2stPnAgPiBiZXN0X2Nsb2NrLT5wKSB7Cj4gLSAgICAg ICAgICAgICAgICplcnJvcl9wcG0gPSAwOwo+IC0KPiAtICAgICAgICAgICAgICAgcmV0dXJuIHRy dWU7Cj4gLSAgICAgICB9Cj4gLQo+IC0gICAgICAgcmV0dXJuICplcnJvcl9wcG0gKyAxMCA8IGJl c3RfZXJyb3JfcHBtOwo+IC19Cj4gLQo+IC0vKgo+IC0gKiBSZXR1cm5zIGEgc2V0IG9mIGRpdmlz b3JzIGZvciB0aGUgZGVzaXJlZCB0YXJnZXQgY2xvY2sgd2l0aCB0aGUgZ2l2ZW4KPiAtICogcmVm Y2xrLCBvciBGQUxTRS4gIFRoZSByZXR1cm5lZCB2YWx1ZXMgcmVwcmVzZW50IHRoZSBjbG9jayBl cXVhdGlvbjoKPiAtICogcmVmbGNrICogKDUgKiAobTEgKyAyKSArIChtMiArIDIpKSAvIChuICsg MikgLyBwMSAvIHAyLgo+IC0gKi8KPiAtc3RhdGljIGJvb2wKPiAtdmx2X2ZpbmRfYmVzdF9kcGxs KGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCAqbGltaXQsCj4gLSAgICAgICAgICAgICAgICAgIHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+IC0gICAgICAgICAgICAgICAgICBp bnQgdGFyZ2V0LCBpbnQgcmVmY2xrLCBzdHJ1Y3QgZHBsbCAqbWF0Y2hfY2xvY2ssCj4gLSAgICAg ICAgICAgICAgICAgIHN0cnVjdCBkcGxsICpiZXN0X2Nsb2NrKQo+IC17Cj4gLSAgICAgICBzdHJ1 Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+dWFwaS5jcnRj KTsKPiAtICAgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKPiAt ICAgICAgIHN0cnVjdCBkcGxsIGNsb2NrOwo+IC0gICAgICAgdW5zaWduZWQgaW50IGJlc3RwcG0g PSAxMDAwMDAwOwo+IC0gICAgICAgLyogbWluIHVwZGF0ZSAxOS4yIE1IeiAqLwo+IC0gICAgICAg aW50IG1heF9uID0gbWluKGxpbWl0LT5uLm1heCwgcmVmY2xrIC8gMTkyMDApOwo+IC0gICAgICAg Ym9vbCBmb3VuZCA9IGZhbHNlOwo+IC0KPiAtICAgICAgIHRhcmdldCAqPSA1OyAvKiBmYXN0IGNs b2NrICovCj4gLQo+IC0gICAgICAgbWVtc2V0KGJlc3RfY2xvY2ssIDAsIHNpemVvZigqYmVzdF9j bG9jaykpOwo+IC0KPiAtICAgICAgIC8qIGJhc2VkIG9uIGhhcmR3YXJlIHJlcXVpcmVtZW50LCBw cmVmZXIgc21hbGxlciBuIHRvIHByZWNpc2lvbiAqLwo+IC0gICAgICAgZm9yIChjbG9jay5uID0g bGltaXQtPm4ubWluOyBjbG9jay5uIDw9IG1heF9uOyBjbG9jay5uKyspIHsKPiAtICAgICAgICAg ICAgICAgZm9yIChjbG9jay5wMSA9IGxpbWl0LT5wMS5tYXg7IGNsb2NrLnAxID49IGxpbWl0LT5w MS5taW47IGNsb2NrLnAxLS0pIHsKPiAtICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNsb2Nr LnAyID0gbGltaXQtPnAyLnAyX2Zhc3Q7IGNsb2NrLnAyID49IGxpbWl0LT5wMi5wMl9zbG93Owo+ IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2sucDIgLT0gY2xvY2sucDIgPiAxMCA/ IDIgOiAxKSB7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9jay5wID0gY2xv Y2sucDEgKiBjbG9jay5wMjsKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJh c2VkIG9uIGhhcmR3YXJlIHJlcXVpcmVtZW50LCBwcmVmZXIgYmlnZ2VyIG0xLG0yIHZhbHVlcyAq Lwo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjbG9jay5tMSA9IGxpbWl0 LT5tMS5taW47IGNsb2NrLm0xIDw9IGxpbWl0LT5tMS5tYXg7IGNsb2NrLm0xKyspIHsKPiAtICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBwbTsKPiAt Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrLm0yID0gRElW X1JPVU5EX0NMT1NFU1QodGFyZ2V0ICogY2xvY2sucCAqIGNsb2NrLm4sCj4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cmVmY2xrICogY2xvY2subTEpOwo+IC0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdmx2X2NhbGNfZHBsbF9wYXJhbXMocmVmY2xrLCAmY2xvY2spOwo+IC0KPiAtICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbnRlbF9wbGxfaXNfdmFs aWQodG9faTkxNShkZXYpLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdCwKPiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNsb2NrKSkKPiAtICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPiAt Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmx2X1BMTF9p c19vcHRpbWFsKGRldiwgdGFyZ2V0LAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2xvY2ssCj4gLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RfY2xv Y2ssCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJlc3RwcG0sICZwcG0pKQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+IC0KPiAtICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKmJlc3RfY2xvY2sgPSBjbG9jazsKPiAtICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVzdHBwbSA9IHBwbTsKPiAtICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwo+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQo+IC0gICAgICAgICAgICAgICAgICAgICAgIH0KPiAtICAgICAg ICAgICAgICAgfQo+IC0gICAgICAgfQo+IC0KPiAtICAgICAgIHJldHVybiBmb3VuZDsKPiAtfQo+ IC0KPiAtLyoKPiAtICogUmV0dXJucyBhIHNldCBvZiBkaXZpc29ycyBmb3IgdGhlIGRlc2lyZWQg dGFyZ2V0IGNsb2NrIHdpdGggdGhlIGdpdmVuCj4gLSAqIHJlZmNsaywgb3IgRkFMU0UuICBUaGUg cmV0dXJuZWQgdmFsdWVzIHJlcHJlc2VudCB0aGUgY2xvY2sgZXF1YXRpb246Cj4gLSAqIHJlZmxj ayAqICg1ICogKG0xICsgMikgKyAobTIgKyAyKSkgLyAobiArIDIpIC8gcDEgLyBwMi4KPiAtICov Cj4gLXN0YXRpYyBib29sCj4gLWNodl9maW5kX2Jlc3RfZHBsbChjb25zdCBzdHJ1Y3QgaW50ZWxf bGltaXQgKmxpbWl0LAo+IC0gICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqY3J0Y19zdGF0ZSwKPiAtICAgICAgICAgICAgICAgICAgaW50IHRhcmdldCwgaW50IHJlZmNs aywgc3RydWN0IGRwbGwgKm1hdGNoX2Nsb2NrLAo+IC0gICAgICAgICAgICAgICAgICBzdHJ1Y3Qg ZHBsbCAqYmVzdF9jbG9jaykKPiAtewo+IC0gICAgICAgc3RydWN0IGludGVsX2NydGMgKmNydGMg PSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPnVhcGkuY3J0Yyk7Cj4gLSAgICAgICBzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7Cj4gLSAgICAgICB1bnNpZ25lZCBpbnQg YmVzdF9lcnJvcl9wcG07Cj4gLSAgICAgICBzdHJ1Y3QgZHBsbCBjbG9jazsKPiAtICAgICAgIHU2 NCBtMjsKPiAtICAgICAgIGludCBmb3VuZCA9IGZhbHNlOwo+IC0KPiAtICAgICAgIG1lbXNldChi ZXN0X2Nsb2NrLCAwLCBzaXplb2YoKmJlc3RfY2xvY2spKTsKPiAtICAgICAgIGJlc3RfZXJyb3Jf cHBtID0gMTAwMDAwMDsKPiAtCj4gLSAgICAgICAvKgo+IC0gICAgICAgICogQmFzZWQgb24gaGFy ZHdhcmUgZG9jLCB0aGUgbiBhbHdheXMgc2V0IHRvIDEsIGFuZCBtMSBhbHdheXMKPiAtICAgICAg ICAqIHNldCB0byAyLiAgSWYgcmVxdWlyZXMgdG8gc3VwcG9ydCAyMDBNaHogcmVmY2xrLCB3ZSBu ZWVkIHRvCj4gLSAgICAgICAgKiByZXZpc2l0IHRoaXMgYmVjYXVzZSBuIG1heSBub3QgMSBhbnlt b3JlLgo+IC0gICAgICAgICovCj4gLSAgICAgICBjbG9jay5uID0gMSwgY2xvY2subTEgPSAyOwo+ IC0gICAgICAgdGFyZ2V0ICo9IDU7ICAgIC8qIGZhc3QgY2xvY2sgKi8KPiAtCj4gLSAgICAgICBm b3IgKGNsb2NrLnAxID0gbGltaXQtPnAxLm1heDsgY2xvY2sucDEgPj0gbGltaXQtPnAxLm1pbjsg Y2xvY2sucDEtLSkgewo+IC0gICAgICAgICAgICAgICBmb3IgKGNsb2NrLnAyID0gbGltaXQtPnAy LnAyX2Zhc3Q7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9jay5wMiA+PSBs aW1pdC0+cDIucDJfc2xvdzsKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2Nr LnAyIC09IGNsb2NrLnAyID4gMTAgPyAyIDogMSkgewo+IC0gICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGludCBlcnJvcl9wcG07Cj4gLQo+IC0gICAgICAgICAgICAgICAgICAgICAgIGNs b2NrLnAgPSBjbG9jay5wMSAqIGNsb2NrLnAyOwo+IC0KPiAtICAgICAgICAgICAgICAgICAgICAg ICBtMiA9IERJVl9ST1VORF9DTE9TRVNUX1VMTChtdWxfdTMyX3UzMih0YXJnZXQsIGNsb2NrLnAg KiBjbG9jay5uKSA8PCAyMiwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICByZWZjbGsgKiBjbG9jay5tMSk7Cj4gLQo+IC0gICAgICAgICAgICAgICAg ICAgICAgIGlmIChtMiA+IElOVF9NQVgvY2xvY2subTEpCj4gLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb250aW51ZTsKPiAtCj4gLSAgICAgICAgICAgICAgICAgICAgICAgY2xvY2su bTIgPSBtMjsKPiAtCj4gLSAgICAgICAgICAgICAgICAgICAgICAgY2h2X2NhbGNfZHBsbF9wYXJh bXMocmVmY2xrLCAmY2xvY2spOwo+IC0KPiAtICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlu dGVsX3BsbF9pc192YWxpZCh0b19pOTE1KGRldiksIGxpbWl0LCAmY2xvY2spKQo+IC0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4gLQo+IC0gICAgICAgICAgICAgICAg ICAgICAgIGlmICghdmx2X1BMTF9pc19vcHRpbWFsKGRldiwgdGFyZ2V0LCAmY2xvY2ssIGJlc3Rf Y2xvY2ssCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YmVzdF9lcnJvcl9wcG0sICZlcnJvcl9wcG0pKQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29udGludWU7Cj4gLQo+IC0gICAgICAgICAgICAgICAgICAgICAgICpiZXN0X2Nsb2Nr ID0gY2xvY2s7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgYmVzdF9lcnJvcl9wcG0gPSBlcnJv cl9wcG07Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwo+IC0gICAgICAg ICAgICAgICB9Cj4gLSAgICAgICB9Cj4gLQo+IC0gICAgICAgcmV0dXJuIGZvdW5kOwo+IC19Cj4g LQo+IC1ib29sIGJ4dF9maW5kX2Jlc3RfZHBsbChzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSwKPiAtICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHBsbCAqYmVzdF9jbG9j aykKPiAtewo+IC0gICAgICAgaW50IHJlZmNsayA9IDEwMDAwMDsKPiAtICAgICAgIGNvbnN0IHN0 cnVjdCBpbnRlbF9saW1pdCAqbGltaXQgPSAmaW50ZWxfbGltaXRzX2J4dDsKPiAtCj4gLSAgICAg ICByZXR1cm4gY2h2X2ZpbmRfYmVzdF9kcGxsKGxpbWl0LCBjcnRjX3N0YXRlLAo+IC0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjcnRjX3N0YXRlLT5wb3J0X2Nsb2NrLCByZWZjbGss Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIGJlc3RfY2xvY2spOwo+ IC19Cj4gLQo+ICBzdGF0aWMgYm9vbCBwaXBlX3NjYW5saW5lX2lzX21vdmluZyhzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZW51bSBwaXBlIHBpcGUpCj4gIHsKPiBAQCAtNTI4NCw3ICs0NTMyLDcgQEAgc3RhdGlj IHZvaWQgaXZiX3VwZGF0ZV9mZGlfYmNfYmlmdXJjYXRpb24oY29uc3Qgc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKmNydGNfc3QKPiAgICogRmluZHMgdGhlIGVuY29kZXIgYXNzb2NpYXRlZCB3aXRo IHRoZSBnaXZlbiBDUlRDLiBUaGlzIGNhbiBvbmx5IGJlCj4gICAqIHVzZWQgd2hlbiB3ZSBrbm93 IHRoYXQgdGhlIENSVEMgaXNuJ3QgZmVlZGluZyBtdWx0aXBsZSBlbmNvZGVycyEKPiAgICovCj4g LXN0YXRpYyBzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqCj4gK3N0cnVjdCBpbnRlbF9lbmNvZGVyICoK PiAgaW50ZWxfZ2V0X2NydGNfbmV3X2VuY29kZXIoY29uc3Qgc3RydWN0IGludGVsX2F0b21pY19z dGF0ZSAqc3RhdGUsCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4gIHsKPiBAQCAtNzk2MCw0MyArNzIwOCw2IEBA IHN0YXRpYyBib29sIGludGVsX3BhbmVsX3VzZV9zc2Moc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQo+ICAgICAgICAgICAgICAgICAmJiAhKGRldl9wcml2LT5xdWlya3MgJiBRVUlS S19MVkRTX1NTQ19ESVNBQkxFKTsKPiAgfQo+Cj4gLXN0YXRpYyB1MzIgcG52X2RwbGxfY29tcHV0 ZV9mcChzdHJ1Y3QgZHBsbCAqZHBsbCkKPiAtewo+IC0gICAgICAgcmV0dXJuICgxIDw8IGRwbGwt Pm4pIDw8IDE2IHwgZHBsbC0+bTI7Cj4gLX0KPiAtCj4gLXN0YXRpYyB1MzIgaTl4eF9kcGxsX2Nv bXB1dGVfZnAoc3RydWN0IGRwbGwgKmRwbGwpCj4gLXsKPiAtICAgICAgIHJldHVybiBkcGxsLT5u IDw8IDE2IHwgZHBsbC0+bTEgPDwgOCB8IGRwbGwtPm0yOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9p ZCBpOXh4X3VwZGF0ZV9wbGxfZGl2aWRlcnMoc3RydWN0IGludGVsX2NydGMgKmNydGMsCj4gLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpjcnRjX3N0YXRlLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgZHBsbCAqcmVkdWNlZF9jbG9jaykKPiAtewo+IC0gICAgICAgc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7Cj4gLSAgICAgICB1MzIg ZnAsIGZwMiA9IDA7Cj4gLQo+IC0gICAgICAgaWYgKElTX1BJTkVWSUVXKGRldl9wcml2KSkgewo+ IC0gICAgICAgICAgICAgICBmcCA9IHBudl9kcGxsX2NvbXB1dGVfZnAoJmNydGNfc3RhdGUtPmRw bGwpOwo+IC0gICAgICAgICAgICAgICBpZiAocmVkdWNlZF9jbG9jaykKPiAtICAgICAgICAgICAg ICAgICAgICAgICBmcDIgPSBwbnZfZHBsbF9jb21wdXRlX2ZwKHJlZHVjZWRfY2xvY2spOwo+IC0g ICAgICAgfSBlbHNlIHsKPiAtICAgICAgICAgICAgICAgZnAgPSBpOXh4X2RwbGxfY29tcHV0ZV9m cCgmY3J0Y19zdGF0ZS0+ZHBsbCk7Cj4gLSAgICAgICAgICAgICAgIGlmIChyZWR1Y2VkX2Nsb2Nr KQo+IC0gICAgICAgICAgICAgICAgICAgICAgIGZwMiA9IGk5eHhfZHBsbF9jb21wdXRlX2ZwKHJl ZHVjZWRfY2xvY2spOwo+IC0gICAgICAgfQo+IC0KPiAtICAgICAgIGNydGNfc3RhdGUtPmRwbGxf aHdfc3RhdGUuZnAwID0gZnA7Cj4gLQo+IC0gICAgICAgaWYgKGludGVsX2NydGNfaGFzX3R5cGUo Y3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0xWRFMpICYmCj4gLSAgICAgICAgICAgcmVkdWNlZF9j bG9jaykgewo+IC0gICAgICAgICAgICAgICBjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlLmZwMSA9 IGZwMjsKPiAtICAgICAgIH0gZWxzZSB7Cj4gLSAgICAgICAgICAgICAgIGNydGNfc3RhdGUtPmRw bGxfaHdfc3RhdGUuZnAxID0gZnA7Cj4gLSAgICAgICB9Cj4gLX0KPiAtCj4gIHN0YXRpYyB2b2lk IHZsdl9wbGxiX3JlY2FsX29wYW1wKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwg ZW51bSBwaXBlCj4gICAgICAgICAgICAgICAgIHBpcGUpCj4gIHsKPiBAQCAtODEyMSwzOSArNzMz Miw2IEBAIHZvaWQgaW50ZWxfZHBfc2V0X21fbihjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqY3J0Y19zdGF0ZSwgZW51bSBsaW5rX21fbl9zCj4gICAgICAgICAgICAgICAgIGludGVsX2Nw dV90cmFuc2NvZGVyX3NldF9tX24oY3J0Y19zdGF0ZSwgZHBfbV9uLCBkcF9tMl9uMik7Cj4gIH0K Pgo+IC1zdGF0aWMgdm9pZCB2bHZfY29tcHV0ZV9kcGxsKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRj LAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUg KnBpcGVfY29uZmlnKQo+IC17Cj4gLSAgICAgICBwaXBlX2NvbmZpZy0+ZHBsbF9od19zdGF0ZS5k cGxsID0gRFBMTF9JTlRFR1JBVEVEX1JFRl9DTEtfVkxWIHwKPiAtICAgICAgICAgICAgICAgRFBM TF9SRUZfQ0xLX0VOQUJMRV9WTFYgfCBEUExMX1ZHQV9NT0RFX0RJUzsKPiAtICAgICAgIGlmIChj cnRjLT5waXBlICE9IFBJUEVfQSkKPiAtICAgICAgICAgICAgICAgcGlwZV9jb25maWctPmRwbGxf aHdfc3RhdGUuZHBsbCB8PSBEUExMX0lOVEVHUkFURURfQ1JJX0NMS19WTFY7Cj4gLQo+IC0gICAg ICAgLyogRFBMTCBub3QgdXNlZCB3aXRoIERTSSwgYnV0IHN0aWxsIG5lZWQgdGhlIHJlc3Qgc2V0 IHVwICovCj4gLSAgICAgICBpZiAoIWludGVsX2NydGNfaGFzX3R5cGUocGlwZV9jb25maWcsIElO VEVMX09VVFBVVF9EU0kpKQo+IC0gICAgICAgICAgICAgICBwaXBlX2NvbmZpZy0+ZHBsbF9od19z dGF0ZS5kcGxsIHw9IERQTExfVkNPX0VOQUJMRSB8Cj4gLSAgICAgICAgICAgICAgICAgICAgICAg RFBMTF9FWFRfQlVGRkVSX0VOQUJMRV9WTFY7Cj4gLQo+IC0gICAgICAgcGlwZV9jb25maWctPmRw bGxfaHdfc3RhdGUuZHBsbF9tZCA9Cj4gLSAgICAgICAgICAgICAgIChwaXBlX2NvbmZpZy0+cGl4 ZWxfbXVsdGlwbGllciAtIDEpIDw8IERQTExfTURfVURJX01VTFRJUExJRVJfU0hJRlQ7Cj4gLX0K PiAtCj4gLXN0YXRpYyB2b2lkIGNodl9jb21wdXRlX2RwbGwoc3RydWN0IGludGVsX2NydGMgKmNy dGMsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqcGlwZV9jb25maWcpCj4gLXsKPiAtICAgICAgIHBpcGVfY29uZmlnLT5kcGxsX2h3X3N0YXRl LmRwbGwgPSBEUExMX1NTQ19SRUZfQ0xLX0NIViB8Cj4gLSAgICAgICAgICAgICAgIERQTExfUkVG X0NMS19FTkFCTEVfVkxWIHwgRFBMTF9WR0FfTU9ERV9ESVM7Cj4gLSAgICAgICBpZiAoY3J0Yy0+ cGlwZSAhPSBQSVBFX0EpCj4gLSAgICAgICAgICAgICAgIHBpcGVfY29uZmlnLT5kcGxsX2h3X3N0 YXRlLmRwbGwgfD0gRFBMTF9JTlRFR1JBVEVEX0NSSV9DTEtfVkxWOwo+IC0KPiAtICAgICAgIC8q IERQTEwgbm90IHVzZWQgd2l0aCBEU0ksIGJ1dCBzdGlsbCBuZWVkIHRoZSByZXN0IHNldCB1cCAq Lwo+IC0gICAgICAgaWYgKCFpbnRlbF9jcnRjX2hhc190eXBlKHBpcGVfY29uZmlnLCBJTlRFTF9P VVRQVVRfRFNJKSkKPiAtICAgICAgICAgICAgICAgcGlwZV9jb25maWctPmRwbGxfaHdfc3RhdGUu ZHBsbCB8PSBEUExMX1ZDT19FTkFCTEU7Cj4gLQo+IC0gICAgICAgcGlwZV9jb25maWctPmRwbGxf aHdfc3RhdGUuZHBsbF9tZCA9Cj4gLSAgICAgICAgICAgICAgIChwaXBlX2NvbmZpZy0+cGl4ZWxf bXVsdGlwbGllciAtIDEpIDw8IERQTExfTURfVURJX01VTFRJUExJRVJfU0hJRlQ7Cj4gLX0KPiAt Cj4gIHN0YXRpYyB2b2lkIHZsdl9wcmVwYXJlX3BsbChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywK PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKnBpcGVfY29uZmlnKQo+ICB7Cj4gQEAgLTg0MTMsMTI4ICs3NTkxLDcgQEAgdm9pZCB2bHZf Zm9yY2VfcGxsX29mZihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlw ZSBwaXBlKQo+ICAgICAgICAgICAgICAgICB2bHZfZGlzYWJsZV9wbGwoZGV2X3ByaXYsIHBpcGUp Owo+ICB9Cj4KPiAtc3RhdGljIHZvaWQgaTl4eF9jb21wdXRlX2RwbGwoc3RydWN0IGludGVsX2Ny dGMgKmNydGMsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IGRwbGwgKnJlZHVjZWRfY2xvY2spCj4gLXsKPiAtICAgICAgIHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOwo+IC0gICAgICAgdTMy IGRwbGw7Cj4gLSAgICAgICBzdHJ1Y3QgZHBsbCAqY2xvY2sgPSAmY3J0Y19zdGF0ZS0+ZHBsbDsK PiAtCj4gLSAgICAgICBpOXh4X3VwZGF0ZV9wbGxfZGl2aWRlcnMoY3J0YywgY3J0Y19zdGF0ZSwg cmVkdWNlZF9jbG9jayk7Cj4gLQo+IC0gICAgICAgZHBsbCA9IERQTExfVkdBX01PREVfRElTOwo+ IC0KPiAtICAgICAgIGlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09V VFBVVF9MVkRTKSkKPiAtICAgICAgICAgICAgICAgZHBsbCB8PSBEUExMQl9NT0RFX0xWRFM7Cj4g LSAgICAgICBlbHNlCj4gLSAgICAgICAgICAgICAgIGRwbGwgfD0gRFBMTEJfTU9ERV9EQUNfU0VS SUFMOwo+IC0KPiAtICAgICAgIGlmIChJU19JOTQ1RyhkZXZfcHJpdikgfHwgSVNfSTk0NUdNKGRl dl9wcml2KSB8fAo+IC0gICAgICAgICAgIElTX0czMyhkZXZfcHJpdikgfHwgSVNfUElORVZJRVco ZGV2X3ByaXYpKSB7Cj4gLSAgICAgICAgICAgICAgIGRwbGwgfD0gKGNydGNfc3RhdGUtPnBpeGVs X211bHRpcGxpZXIgLSAxKQo+IC0gICAgICAgICAgICAgICAgICAgICAgIDw8IFNEVk9fTVVMVElQ TElFUl9TSElGVF9ISVJFUzsKPiAtICAgICAgIH0KPiAtCj4gLSAgICAgICBpZiAoaW50ZWxfY3J0 Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfU0RWTykgfHwKPiAtICAgICAgICAg ICBpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9IRE1JKSkKPiAt ICAgICAgICAgICAgICAgZHBsbCB8PSBEUExMX1NEVk9fSElHSF9TUEVFRDsKPiAtCj4gLSAgICAg ICBpZiAoaW50ZWxfY3J0Y19oYXNfZHBfZW5jb2RlcihjcnRjX3N0YXRlKSkKPiAtICAgICAgICAg ICAgICAgZHBsbCB8PSBEUExMX1NEVk9fSElHSF9TUEVFRDsKPiAtCj4gLSAgICAgICAvKiBjb21w dXRlIGJpdG1hc2sgZnJvbSBwMSB2YWx1ZSAqLwo+IC0gICAgICAgaWYgKElTX1BJTkVWSUVXKGRl dl9wcml2KSkKPiAtICAgICAgICAgICAgICAgZHBsbCB8PSAoMSA8PCAoY2xvY2stPnAxIC0gMSkp IDw8IERQTExfRlBBMDFfUDFfUE9TVF9ESVZfU0hJRlRfUElORVZJRVc7Cj4gLSAgICAgICBlbHNl IHsKPiAtICAgICAgICAgICAgICAgZHBsbCB8PSAoMSA8PCAoY2xvY2stPnAxIC0gMSkpIDw8IERQ TExfRlBBMDFfUDFfUE9TVF9ESVZfU0hJRlQ7Cj4gLSAgICAgICAgICAgICAgIGlmIChJU19HNFgo ZGV2X3ByaXYpICYmIHJlZHVjZWRfY2xvY2spCj4gLSAgICAgICAgICAgICAgICAgICAgICAgZHBs bCB8PSAoMSA8PCAocmVkdWNlZF9jbG9jay0+cDEgLSAxKSkgPDwgRFBMTF9GUEExX1AxX1BPU1Rf RElWX1NISUZUOwo+IC0gICAgICAgfQo+IC0gICAgICAgc3dpdGNoIChjbG9jay0+cDIpIHsKPiAt ICAgICAgIGNhc2UgNToKPiAtICAgICAgICAgICAgICAgZHBsbCB8PSBEUExMX0RBQ19TRVJJQUxf UDJfQ0xPQ0tfRElWXzU7Cj4gLSAgICAgICAgICAgICAgIGJyZWFrOwo+IC0gICAgICAgY2FzZSA3 Ogo+IC0gICAgICAgICAgICAgICBkcGxsIHw9IERQTExCX0xWRFNfUDJfQ0xPQ0tfRElWXzc7Cj4g LSAgICAgICAgICAgICAgIGJyZWFrOwo+IC0gICAgICAgY2FzZSAxMDoKPiAtICAgICAgICAgICAg ICAgZHBsbCB8PSBEUExMX0RBQ19TRVJJQUxfUDJfQ0xPQ0tfRElWXzEwOwo+IC0gICAgICAgICAg ICAgICBicmVhazsKPiAtICAgICAgIGNhc2UgMTQ6Cj4gLSAgICAgICAgICAgICAgIGRwbGwgfD0g RFBMTEJfTFZEU19QMl9DTE9DS19ESVZfMTQ7Cj4gLSAgICAgICAgICAgICAgIGJyZWFrOwo+IC0g ICAgICAgfQo+IC0gICAgICAgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNCkKPiAtICAgICAg ICAgICAgICAgZHBsbCB8PSAoNiA8PCBQTExfTE9BRF9QVUxTRV9QSEFTRV9TSElGVCk7Cj4gLQo+ IC0gICAgICAgaWYgKGNydGNfc3RhdGUtPnNkdm9fdHZfY2xvY2spCj4gLSAgICAgICAgICAgICAg IGRwbGwgfD0gUExMX1JFRl9JTlBVVF9UVkNMS0lOQkM7Cj4gLSAgICAgICBlbHNlIGlmIChpbnRl bF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9MVkRTKSAmJgo+IC0gICAg ICAgICAgICAgICAgaW50ZWxfcGFuZWxfdXNlX3NzYyhkZXZfcHJpdikpCj4gLSAgICAgICAgICAg ICAgIGRwbGwgfD0gUExMQl9SRUZfSU5QVVRfU1BSRUFEU1BFQ1RSVU1JTjsKPiAtICAgICAgIGVs c2UKPiAtICAgICAgICAgICAgICAgZHBsbCB8PSBQTExfUkVGX0lOUFVUX0RSRUZDTEs7Cj4gLQo+ IC0gICAgICAgZHBsbCB8PSBEUExMX1ZDT19FTkFCTEU7Cj4gLSAgICAgICBjcnRjX3N0YXRlLT5k cGxsX2h3X3N0YXRlLmRwbGwgPSBkcGxsOwo+IC0KPiAtICAgICAgIGlmIChJTlRFTF9HRU4oZGV2 X3ByaXYpID49IDQpIHsKPiAtICAgICAgICAgICAgICAgdTMyIGRwbGxfbWQgPSAoY3J0Y19zdGF0 ZS0+cGl4ZWxfbXVsdGlwbGllciAtIDEpCj4gLSAgICAgICAgICAgICAgICAgICAgICAgPDwgRFBM TF9NRF9VRElfTVVMVElQTElFUl9TSElGVDsKPiAtICAgICAgICAgICAgICAgY3J0Y19zdGF0ZS0+ ZHBsbF9od19zdGF0ZS5kcGxsX21kID0gZHBsbF9tZDsKPiAtICAgICAgIH0KPiAtfQo+IC0KPiAt c3RhdGljIHZvaWQgaTh4eF9jb21wdXRlX2RwbGwoc3RydWN0IGludGVsX2NydGMgKmNydGMsCj4g LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNy dGNfc3RhdGUsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRwbGwgKnJl ZHVjZWRfY2xvY2spCj4gLXsKPiAtICAgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRj LT5iYXNlLmRldjsKPiAtICAgICAgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IHRvX2k5MTUoZGV2KTsKPiAtICAgICAgIHUzMiBkcGxsOwo+IC0gICAgICAgc3RydWN0IGRwbGwg KmNsb2NrID0gJmNydGNfc3RhdGUtPmRwbGw7Cj4gLQo+IC0gICAgICAgaTl4eF91cGRhdGVfcGxs X2RpdmlkZXJzKGNydGMsIGNydGNfc3RhdGUsIHJlZHVjZWRfY2xvY2spOwo+IC0KPiAtICAgICAg IGRwbGwgPSBEUExMX1ZHQV9NT0RFX0RJUzsKPiAtCj4gLSAgICAgICBpZiAoaW50ZWxfY3J0Y19o YXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfTFZEUykpIHsKPiAtICAgICAgICAgICAg ICAgZHBsbCB8PSAoMSA8PCAoY2xvY2stPnAxIC0gMSkpIDw8IERQTExfRlBBMDFfUDFfUE9TVF9E SVZfU0hJRlQ7Cj4gLSAgICAgICB9IGVsc2Ugewo+IC0gICAgICAgICAgICAgICBpZiAoY2xvY2st PnAxID09IDIpCj4gLSAgICAgICAgICAgICAgICAgICAgICAgZHBsbCB8PSBQTExfUDFfRElWSURF X0JZX1RXTzsKPiAtICAgICAgICAgICAgICAgZWxzZQo+IC0gICAgICAgICAgICAgICAgICAgICAg IGRwbGwgfD0gKGNsb2NrLT5wMSAtIDIpIDw8IERQTExfRlBBMDFfUDFfUE9TVF9ESVZfU0hJRlQ7 Cj4gLSAgICAgICAgICAgICAgIGlmIChjbG9jay0+cDIgPT0gNCkKPiAtICAgICAgICAgICAgICAg ICAgICAgICBkcGxsIHw9IFBMTF9QMl9ESVZJREVfQllfNDsKPiAtICAgICAgIH0KPiAtCj4gLSAg ICAgICAvKgo+IC0gICAgICAgICogQnNwZWM6Cj4gLSAgICAgICAgKiAiW0FsbWFkb3IgRXJyYXRh fTogRm9yIHRoZSBjb3JyZWN0IG9wZXJhdGlvbiBvZiB0aGUgbXV4ZWQgRFZPIHBpbnMKPiAtICAg ICAgICAqICAoR0RFVlNFTEIvSTJDZGF0YSwgR0lSREJZL0kyQ0NsaykgYW5kIChHRlJBTUVCL0RW SV9EYXRhLAo+IC0gICAgICAgICogIEdUUkRZQi9EVklfQ2xrKTogQml0IDMxIChEUExMIFZDTyBF bmFibGUpIGFuZCBCaXQgMzAgKDJYIENsb2NrCj4gLSAgICAgICAgKiAgRW5hYmxlKSBtdXN0IGJl IHNldCB0byDigJwx4oCdIGluIGJvdGggdGhlIERQTEwgQSBDb250cm9sIFJlZ2lzdGVyCj4gLSAg ICAgICAgKiAgKDA2MDE0aC0wNjAxN2gpIGFuZCBEUExMIEIgQ29udHJvbCBSZWdpc3RlciAoMDYw MThoLTA2MDFCaCkuIgo+IC0gICAgICAgICoKPiAtICAgICAgICAqIEZvciBzaW1wbGljaXR5IFdl IHNpbXBseSBrZWVwIGJvdGggYml0cyBhbHdheXMgZW5hYmxlZCBpbgo+IC0gICAgICAgICogYm90 aCBEUExMUy4gVGhlIHNwZWMgc2F5cyB3ZSBzaG91bGQgZGlzYWJsZSB0aGUgRFZPIDJYIGNsb2Nr Cj4gLSAgICAgICAgKiB3aGVuIG5vdCBuZWVkZWQsIGJ1dCB0aGlzIHNlZW1zIHRvIHdvcmsgZmlu ZSBpbiBwcmFjdGljZS4KPiAtICAgICAgICAqLwo+IC0gICAgICAgaWYgKElTX0k4MzAoZGV2X3By aXYpIHx8Cj4gLSAgICAgICAgICAgaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRF TF9PVVRQVVRfRFZPKSkKPiAtICAgICAgICAgICAgICAgZHBsbCB8PSBEUExMX0RWT18yWF9NT0RF Owo+IC0KPiAtICAgICAgIGlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVM X09VVFBVVF9MVkRTKSAmJgo+IC0gICAgICAgICAgIGludGVsX3BhbmVsX3VzZV9zc2MoZGV2X3By aXYpKQo+IC0gICAgICAgICAgICAgICBkcGxsIHw9IFBMTEJfUkVGX0lOUFVUX1NQUkVBRFNQRUNU UlVNSU47Cj4gLSAgICAgICBlbHNlCj4gLSAgICAgICAgICAgICAgIGRwbGwgfD0gUExMX1JFRl9J TlBVVF9EUkVGQ0xLOwo+Cj4gLSAgICAgICBkcGxsIHw9IERQTExfVkNPX0VOQUJMRTsKPiAtICAg ICAgIGNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUuZHBsbCA9IGRwbGw7Cj4gLX0KPgo+ICBzdGF0 aWMgdm9pZCBpbnRlbF9zZXRfdHJhbnNjb2Rlcl90aW1pbmdzKGNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjcnRjX3N0YXRlKQo+ICB7Cj4gQEAgLTg3NDAsMjA3ICs3Nzk3LDYgQEAgc3Rh dGljIHZvaWQgaTl4eF9zZXRfcGlwZWNvbmYoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmNydGNfc3RhdGUpCj4gICAgICAgICBpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIFBJ UEVDT05GKGNydGMtPnBpcGUpKTsKPiAgfQo+Cj4gLXN0YXRpYyBpbnQgaTh4eF9jcnRjX2NvbXB1 dGVfY2xvY2soc3RydWN0IGludGVsX2NydGMgKmNydGMsCj4gLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiAtewo+ IC0gICAgICAgc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmJhc2UuZGV2Owo+IC0gICAg ICAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwo+IC0g ICAgICAgY29uc3Qgc3RydWN0IGludGVsX2xpbWl0ICpsaW1pdDsKPiAtICAgICAgIGludCByZWZj bGsgPSA0ODAwMDsKPiAtCj4gLSAgICAgICBtZW1zZXQoJmNydGNfc3RhdGUtPmRwbGxfaHdfc3Rh dGUsIDAsCj4gLSAgICAgICAgICAgICAgc2l6ZW9mKGNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUp KTsKPiAtCj4gLSAgICAgICBpZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRF TF9PVVRQVVRfTFZEUykpIHsKPiAtICAgICAgICAgICAgICAgaWYgKGludGVsX3BhbmVsX3VzZV9z c2MoZGV2X3ByaXYpKSB7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgcmVmY2xrID0gZGV2X3By aXYtPnZidC5sdmRzX3NzY19mcmVxOwo+IC0gICAgICAgICAgICAgICAgICAgICAgIGRybV9kYmdf a21zKCZkZXZfcHJpdi0+ZHJtLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJ1c2luZyBTU0MgcmVmZXJlbmNlIGNsb2NrIG9mICVkIGtIelxuIiwKPiAtICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByZWZjbGspOwo+IC0gICAgICAgICAgICAgICB9Cj4gLQo+ IC0gICAgICAgICAgICAgICBsaW1pdCA9ICZpbnRlbF9saW1pdHNfaTh4eF9sdmRzOwo+IC0gICAg ICAgfSBlbHNlIGlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBV VF9EVk8pKSB7Cj4gLSAgICAgICAgICAgICAgIGxpbWl0ID0gJmludGVsX2xpbWl0c19pOHh4X2R2 bzsKPiAtICAgICAgIH0gZWxzZSB7Cj4gLSAgICAgICAgICAgICAgIGxpbWl0ID0gJmludGVsX2xp bWl0c19pOHh4X2RhYzsKPiAtICAgICAgIH0KPiAtCj4gLSAgICAgICBpZiAoIWNydGNfc3RhdGUt PmNsb2NrX3NldCAmJgo+IC0gICAgICAgICAgICFpOXh4X2ZpbmRfYmVzdF9kcGxsKGxpbWl0LCBj cnRjX3N0YXRlLCBjcnRjX3N0YXRlLT5wb3J0X2Nsb2NrLAo+IC0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJlZmNsaywgTlVMTCwgJmNydGNfc3RhdGUtPmRwbGwpKSB7Cj4gLSAgICAg ICAgICAgICAgIGRybV9lcnIoJmRldl9wcml2LT5kcm0sCj4gLSAgICAgICAgICAgICAgICAgICAg ICAgIkNvdWxkbid0IGZpbmQgUExMIHNldHRpbmdzIGZvciBtb2RlIVxuIik7Cj4gLSAgICAgICAg ICAgICAgIHJldHVybiAtRUlOVkFMOwo+IC0gICAgICAgfQo+IC0KPiAtICAgICAgIGk4eHhfY29t cHV0ZV9kcGxsKGNydGMsIGNydGNfc3RhdGUsIE5VTEwpOwo+IC0KPiAtICAgICAgIHJldHVybiAw Owo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IGc0eF9jcnRjX2NvbXB1dGVfY2xvY2soc3RydWN0IGlu dGVsX2NydGMgKmNydGMsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQo+IC17Cj4gLSAgICAgICBzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKPiAtICAg ICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCAqbGltaXQ7Cj4gLSAgICAgICBpbnQgcmVmY2xr ID0gOTYwMDA7Cj4gLQo+IC0gICAgICAgbWVtc2V0KCZjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRl LCAwLAo+IC0gICAgICAgICAgICAgIHNpemVvZihjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlKSk7 Cj4gLQo+IC0gICAgICAgaWYgKGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxf T1VUUFVUX0xWRFMpKSB7Cj4gLSAgICAgICAgICAgICAgIGlmIChpbnRlbF9wYW5lbF91c2Vfc3Nj KGRldl9wcml2KSkgewo+IC0gICAgICAgICAgICAgICAgICAgICAgIHJlZmNsayA9IGRldl9wcml2 LT52YnQubHZkc19zc2NfZnJlcTsKPiAtICAgICAgICAgICAgICAgICAgICAgICBkcm1fZGJnX2tt cygmZGV2X3ByaXYtPmRybSwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi dXNpbmcgU1NDIHJlZmVyZW5jZSBjbG9jayBvZiAlZCBrSHpcbiIsCj4gLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmVmY2xrKTsKPiAtICAgICAgICAgICAgICAgfQo+IC0KPiAt ICAgICAgICAgICAgICAgaWYgKGludGVsX2lzX2R1YWxfbGlua19sdmRzKGRldl9wcml2KSkKPiAt ICAgICAgICAgICAgICAgICAgICAgICBsaW1pdCA9ICZpbnRlbF9saW1pdHNfZzR4X2R1YWxfY2hh bm5lbF9sdmRzOwo+IC0gICAgICAgICAgICAgICBlbHNlCj4gLSAgICAgICAgICAgICAgICAgICAg ICAgbGltaXQgPSAmaW50ZWxfbGltaXRzX2c0eF9zaW5nbGVfY2hhbm5lbF9sdmRzOwo+IC0gICAg ICAgfSBlbHNlIGlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBV VF9IRE1JKSB8fAo+IC0gICAgICAgICAgICAgICAgICBpbnRlbF9jcnRjX2hhc190eXBlKGNydGNf c3RhdGUsIElOVEVMX09VVFBVVF9BTkFMT0cpKSB7Cj4gLSAgICAgICAgICAgICAgIGxpbWl0ID0g JmludGVsX2xpbWl0c19nNHhfaGRtaTsKPiAtICAgICAgIH0gZWxzZSBpZiAoaW50ZWxfY3J0Y19o YXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfU0RWTykpIHsKPiAtICAgICAgICAgICAg ICAgbGltaXQgPSAmaW50ZWxfbGltaXRzX2c0eF9zZHZvOwo+IC0gICAgICAgfSBlbHNlIHsKPiAt ICAgICAgICAgICAgICAgLyogVGhlIG9wdGlvbiBpcyBmb3Igb3RoZXIgb3V0cHV0cyAqLwo+IC0g ICAgICAgICAgICAgICBsaW1pdCA9ICZpbnRlbF9saW1pdHNfaTl4eF9zZHZvOwo+IC0gICAgICAg fQo+IC0KPiAtICAgICAgIGlmICghY3J0Y19zdGF0ZS0+Y2xvY2tfc2V0ICYmCj4gLSAgICAgICAg ICAgIWc0eF9maW5kX2Jlc3RfZHBsbChsaW1pdCwgY3J0Y19zdGF0ZSwgY3J0Y19zdGF0ZS0+cG9y dF9jbG9jaywKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmNsaywgTlVMTCwg JmNydGNfc3RhdGUtPmRwbGwpKSB7Cj4gLSAgICAgICAgICAgICAgIGRybV9lcnIoJmRldl9wcml2 LT5kcm0sCj4gLSAgICAgICAgICAgICAgICAgICAgICAgIkNvdWxkbid0IGZpbmQgUExMIHNldHRp bmdzIGZvciBtb2RlIVxuIik7Cj4gLSAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+IC0g ICAgICAgfQo+IC0KPiAtICAgICAgIGk5eHhfY29tcHV0ZV9kcGxsKGNydGMsIGNydGNfc3RhdGUs IE5VTEwpOwo+IC0KPiAtICAgICAgIHJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IHBu dl9jcnRjX2NvbXB1dGVfY2xvY2soc3RydWN0IGludGVsX2NydGMgKmNydGMsCj4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0 YXRlKQo+IC17Cj4gLSAgICAgICBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5k ZXY7Cj4gLSAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1 KGRldik7Cj4gLSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgKmxpbWl0Owo+IC0gICAg ICAgaW50IHJlZmNsayA9IDk2MDAwOwo+IC0KPiAtICAgICAgIG1lbXNldCgmY3J0Y19zdGF0ZS0+ ZHBsbF9od19zdGF0ZSwgMCwKPiAtICAgICAgICAgICAgICBzaXplb2YoY3J0Y19zdGF0ZS0+ZHBs bF9od19zdGF0ZSkpOwo+IC0KPiAtICAgICAgIGlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNf c3RhdGUsIElOVEVMX09VVFBVVF9MVkRTKSkgewo+IC0gICAgICAgICAgICAgICBpZiAoaW50ZWxf cGFuZWxfdXNlX3NzYyhkZXZfcHJpdikpIHsKPiAtICAgICAgICAgICAgICAgICAgICAgICByZWZj bGsgPSBkZXZfcHJpdi0+dmJ0Lmx2ZHNfc3NjX2ZyZXE7Cj4gLSAgICAgICAgICAgICAgICAgICAg ICAgZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4gLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgInVzaW5nIFNTQyByZWZlcmVuY2UgY2xvY2sgb2YgJWQga0h6XG4iLAo+IC0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmNsayk7Cj4gLSAgICAgICAgICAg ICAgIH0KPiAtCj4gLSAgICAgICAgICAgICAgIGxpbWl0ID0gJnBudl9saW1pdHNfbHZkczsKPiAt ICAgICAgIH0gZWxzZSB7Cj4gLSAgICAgICAgICAgICAgIGxpbWl0ID0gJnBudl9saW1pdHNfc2R2 bzsKPiAtICAgICAgIH0KPiAtCj4gLSAgICAgICBpZiAoIWNydGNfc3RhdGUtPmNsb2NrX3NldCAm Jgo+IC0gICAgICAgICAgICFwbnZfZmluZF9iZXN0X2RwbGwobGltaXQsIGNydGNfc3RhdGUsIGNy dGNfc3RhdGUtPnBvcnRfY2xvY2ssCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZWZjbGssIE5VTEwsICZjcnRjX3N0YXRlLT5kcGxsKSkgewo+IC0gICAgICAgICAgICAgICBkcm1f ZXJyKCZkZXZfcHJpdi0+ZHJtLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICJDb3VsZG4ndCBm aW5kIFBMTCBzZXR0aW5ncyBmb3IgbW9kZSFcbiIpOwo+IC0gICAgICAgICAgICAgICByZXR1cm4g LUVJTlZBTDsKPiAtICAgICAgIH0KPiAtCj4gLSAgICAgICBpOXh4X2NvbXB1dGVfZHBsbChjcnRj LCBjcnRjX3N0YXRlLCBOVUxMKTsKPiAtCj4gLSAgICAgICByZXR1cm4gMDsKPiAtfQo+IC0KPiAt c3RhdGljIGludCBpOXh4X2NydGNfY29tcHV0ZV9jbG9jayhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0 YywKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlKQo+IC17Cj4gLSAgICAgICBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 ID0gY3J0Yy0+YmFzZS5kZXY7Cj4gLSAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gLSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQg KmxpbWl0Owo+IC0gICAgICAgaW50IHJlZmNsayA9IDk2MDAwOwo+IC0KPiAtICAgICAgIG1lbXNl dCgmY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZSwgMCwKPiAtICAgICAgICAgICAgICBzaXplb2Yo Y3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZSkpOwo+IC0KPiAtICAgICAgIGlmIChpbnRlbF9jcnRj X2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9MVkRTKSkgewo+IC0gICAgICAgICAg ICAgICBpZiAoaW50ZWxfcGFuZWxfdXNlX3NzYyhkZXZfcHJpdikpIHsKPiAtICAgICAgICAgICAg ICAgICAgICAgICByZWZjbGsgPSBkZXZfcHJpdi0+dmJ0Lmx2ZHNfc3NjX2ZyZXE7Cj4gLSAgICAg ICAgICAgICAgICAgICAgICAgZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgInVzaW5nIFNTQyByZWZlcmVuY2UgY2xvY2sgb2Yg JWQga0h6XG4iLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmNsayk7 Cj4gLSAgICAgICAgICAgICAgIH0KPiAtCj4gLSAgICAgICAgICAgICAgIGxpbWl0ID0gJmludGVs X2xpbWl0c19pOXh4X2x2ZHM7Cj4gLSAgICAgICB9IGVsc2Ugewo+IC0gICAgICAgICAgICAgICBs aW1pdCA9ICZpbnRlbF9saW1pdHNfaTl4eF9zZHZvOwo+IC0gICAgICAgfQo+IC0KPiAtICAgICAg IGlmICghY3J0Y19zdGF0ZS0+Y2xvY2tfc2V0ICYmCj4gLSAgICAgICAgICAgIWk5eHhfZmluZF9i ZXN0X2RwbGwobGltaXQsIGNydGNfc3RhdGUsIGNydGNfc3RhdGUtPnBvcnRfY2xvY2ssCj4gLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmY2xrLCBOVUxMLCAmY3J0Y19zdGF0ZS0+ ZHBsbCkpIHsKPiAtICAgICAgICAgICAgICAgZHJtX2VycigmZGV2X3ByaXYtPmRybSwKPiAtICAg ICAgICAgICAgICAgICAgICAgICAiQ291bGRuJ3QgZmluZCBQTEwgc2V0dGluZ3MgZm9yIG1vZGUh XG4iKTsKPiAtICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gLSAgICAgICB9Cj4gLQo+ IC0gICAgICAgaTl4eF9jb21wdXRlX2RwbGwoY3J0YywgY3J0Y19zdGF0ZSwgTlVMTCk7Cj4gLQo+ IC0gICAgICAgcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgY2h2X2NydGNfY29tcHV0 ZV9jbG9jayhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKPiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4gLXsKPiAt ICAgICAgIGludCByZWZjbGsgPSAxMDAwMDA7Cj4gLSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxf bGltaXQgKmxpbWl0ID0gJmludGVsX2xpbWl0c19jaHY7Cj4gLSAgICAgICBzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUoY3J0Y19zdGF0ZS0+dWFwaS5jcnRjLT5kZXYpOwo+ IC0KPiAtICAgICAgIG1lbXNldCgmY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZSwgMCwKPiAtICAg ICAgICAgICAgICBzaXplb2YoY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZSkpOwo+IC0KPiAtICAg ICAgIGlmICghY3J0Y19zdGF0ZS0+Y2xvY2tfc2V0ICYmCj4gLSAgICAgICAgICAgIWNodl9maW5k X2Jlc3RfZHBsbChsaW1pdCwgY3J0Y19zdGF0ZSwgY3J0Y19zdGF0ZS0+cG9ydF9jbG9jaywKPiAt ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmNsaywgTlVMTCwgJmNydGNfc3RhdGUt PmRwbGwpKSB7Cj4gLSAgICAgICAgICAgICAgIGRybV9lcnIoJmk5MTUtPmRybSwgIkNvdWxkbid0 IGZpbmQgUExMIHNldHRpbmdzIGZvciBtb2RlIVxuIik7Cj4gLSAgICAgICAgICAgICAgIHJldHVy biAtRUlOVkFMOwo+IC0gICAgICAgfQo+IC0KPiAtICAgICAgIGNodl9jb21wdXRlX2RwbGwoY3J0 YywgY3J0Y19zdGF0ZSk7Cj4gLQo+IC0gICAgICAgcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRp YyBpbnQgdmx2X2NydGNfY29tcHV0ZV9jbG9jayhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKPiAt ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmNydGNfc3RhdGUpCj4gLXsKPiAtICAgICAgIGludCByZWZjbGsgPSAxMDAwMDA7Cj4gLSAgICAg ICBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgKmxpbWl0ID0gJmludGVsX2xpbWl0c192bHY7Cj4g LSAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUoY3J0Y19zdGF0 ZS0+dWFwaS5jcnRjLT5kZXYpOwo+IC0KPiAtICAgICAgIG1lbXNldCgmY3J0Y19zdGF0ZS0+ZHBs bF9od19zdGF0ZSwgMCwKPiAtICAgICAgICAgICAgICBzaXplb2YoY3J0Y19zdGF0ZS0+ZHBsbF9o d19zdGF0ZSkpOwo+IC0KPiAtICAgICAgIGlmICghY3J0Y19zdGF0ZS0+Y2xvY2tfc2V0ICYmCj4g LSAgICAgICAgICAgIXZsdl9maW5kX2Jlc3RfZHBsbChsaW1pdCwgY3J0Y19zdGF0ZSwgY3J0Y19z dGF0ZS0+cG9ydF9jbG9jaywKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmNs aywgTlVMTCwgJmNydGNfc3RhdGUtPmRwbGwpKSB7Cj4gLSAgICAgICAgICAgICAgIGRybV9lcnIo Jmk5MTUtPmRybSwgICJDb3VsZG4ndCBmaW5kIFBMTCBzZXR0aW5ncyBmb3IgbW9kZSFcbiIpOwo+ IC0gICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiAtICAgICAgIH0KPiAtCj4gLSAgICAg ICB2bHZfY29tcHV0ZV9kcGxsKGNydGMsIGNydGNfc3RhdGUpOwo+IC0KPiAtICAgICAgIHJldHVy biAwOwo+IC19Cj4KPiAgc3RhdGljIGJvb2wgaTl4eF9oYXNfcGZpdChzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCj4gIHsKPiBAQCAtOTk1MSwxNzIgKzg4MDcsNiBAQCBpbnQgaWxr X2dldF9sYW5lc19yZXF1aXJlZChpbnQgdGFyZ2V0X2Nsb2NrLCBpbnQgbGlua19idywgaW50IGJw cCkKPiAgICAgICAgIHJldHVybiBESVZfUk9VTkRfVVAoYnBzLCBsaW5rX2J3ICogOCk7Cj4gIH0K Pgo+IC1zdGF0aWMgYm9vbCBpbGtfbmVlZHNfZmJfY2JfdHVuZShzdHJ1Y3QgZHBsbCAqZHBsbCwg aW50IGZhY3RvcikKPiAtewo+IC0gICAgICAgcmV0dXJuIGk5eHhfZHBsbF9jb21wdXRlX20oZHBs bCkgPCBmYWN0b3IgKiBkcGxsLT5uOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBpbGtfY29tcHV0 ZV9kcGxsKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAo+IC0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHBsbCAqcmVkdWNlZF9jbG9jaykKPiAtewo+IC0gICAg ICAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNl LmRldik7Cj4gLSAgICAgICB1MzIgZHBsbCwgZnAsIGZwMjsKPiAtICAgICAgIGludCBmYWN0b3I7 Cj4gLQo+IC0gICAgICAgLyogRW5hYmxlIGF1dG90dW5pbmcgb2YgdGhlIFBMTCBjbG9jayAoaWYg cGVybWlzc2libGUpICovCj4gLSAgICAgICBmYWN0b3IgPSAyMTsKPiAtICAgICAgIGlmIChpbnRl bF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9MVkRTKSkgewo+IC0gICAg ICAgICAgICAgICBpZiAoKGludGVsX3BhbmVsX3VzZV9zc2MoZGV2X3ByaXYpICYmCj4gLSAgICAg ICAgICAgICAgICAgICAgZGV2X3ByaXYtPnZidC5sdmRzX3NzY19mcmVxID09IDEwMDAwMCkgfHwK PiAtICAgICAgICAgICAgICAgICAgIChIQVNfUENIX0lCWChkZXZfcHJpdikgJiYKPiAtICAgICAg ICAgICAgICAgICAgICBpbnRlbF9pc19kdWFsX2xpbmtfbHZkcyhkZXZfcHJpdikpKQo+IC0gICAg ICAgICAgICAgICAgICAgICAgIGZhY3RvciA9IDI1Owo+IC0gICAgICAgfSBlbHNlIGlmIChjcnRj X3N0YXRlLT5zZHZvX3R2X2Nsb2NrKSB7Cj4gLSAgICAgICAgICAgICAgIGZhY3RvciA9IDIwOwo+ IC0gICAgICAgfQo+IC0KPiAtICAgICAgIGZwID0gaTl4eF9kcGxsX2NvbXB1dGVfZnAoJmNydGNf c3RhdGUtPmRwbGwpOwo+IC0KPiAtICAgICAgIGlmIChpbGtfbmVlZHNfZmJfY2JfdHVuZSgmY3J0 Y19zdGF0ZS0+ZHBsbCwgZmFjdG9yKSkKPiAtICAgICAgICAgICAgICAgZnAgfD0gRlBfQ0JfVFVO RTsKPiAtCj4gLSAgICAgICBpZiAocmVkdWNlZF9jbG9jaykgewo+IC0gICAgICAgICAgICAgICBm cDIgPSBpOXh4X2RwbGxfY29tcHV0ZV9mcChyZWR1Y2VkX2Nsb2NrKTsKPiAtCj4gLSAgICAgICAg ICAgICAgIGlmIChyZWR1Y2VkX2Nsb2NrLT5tIDwgZmFjdG9yICogcmVkdWNlZF9jbG9jay0+bikK PiAtICAgICAgICAgICAgICAgICAgICAgICBmcDIgfD0gRlBfQ0JfVFVORTsKPiAtICAgICAgIH0g ZWxzZSB7Cj4gLSAgICAgICAgICAgICAgIGZwMiA9IGZwOwo+IC0gICAgICAgfQo+IC0KPiAtICAg ICAgIGRwbGwgPSAwOwo+IC0KPiAtICAgICAgIGlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNf c3RhdGUsIElOVEVMX09VVFBVVF9MVkRTKSkKPiAtICAgICAgICAgICAgICAgZHBsbCB8PSBEUExM Ql9NT0RFX0xWRFM7Cj4gLSAgICAgICBlbHNlCj4gLSAgICAgICAgICAgICAgIGRwbGwgfD0gRFBM TEJfTU9ERV9EQUNfU0VSSUFMOwo+IC0KPiAtICAgICAgIGRwbGwgfD0gKGNydGNfc3RhdGUtPnBp eGVsX211bHRpcGxpZXIgLSAxKQo+IC0gICAgICAgICAgICAgICA8PCBQTExfUkVGX1NEVk9fSERN SV9NVUxUSVBMSUVSX1NISUZUOwo+IC0KPiAtICAgICAgIGlmIChpbnRlbF9jcnRjX2hhc190eXBl KGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9TRFZPKSB8fAo+IC0gICAgICAgICAgIGludGVsX2Ny dGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0hETUkpKQo+IC0gICAgICAgICAg ICAgICBkcGxsIHw9IERQTExfU0RWT19ISUdIX1NQRUVEOwo+IC0KPiAtICAgICAgIGlmIChpbnRl bF9jcnRjX2hhc19kcF9lbmNvZGVyKGNydGNfc3RhdGUpKQo+IC0gICAgICAgICAgICAgICBkcGxs IHw9IERQTExfU0RWT19ISUdIX1NQRUVEOwo+IC0KPiAtICAgICAgIC8qCj4gLSAgICAgICAgKiBU aGUgaGlnaCBzcGVlZCBJTyBjbG9jayBpcyBvbmx5IHJlYWxseSByZXF1aXJlZCBmb3IKPiAtICAg ICAgICAqIFNEVk8vSERNSS9EUCwgYnV0IHdlIGFsc28gZW5hYmxlIGl0IGZvciBDUlQgdG8gbWFr ZSBpdAo+IC0gICAgICAgICogcG9zc2libGUgdG8gc2hhcmUgdGhlIERQTEwgYmV0d2VlbiBDUlQg YW5kIEhETUkuIEVuYWJsaW5nCj4gLSAgICAgICAgKiB0aGUgY2xvY2sgbmVlZGxlc3NseSBkb2Vz IG5vIHJlYWwgaGFybSwgZXhjZXB0IHVzZSB1cCBhCj4gLSAgICAgICAgKiBiaXQgb2YgcG93ZXIg cG90ZW50aWFsbHkuCj4gLSAgICAgICAgKgo+IC0gICAgICAgICogV2UnbGwgbGltaXQgdGhpcyB0 byBJVkIgd2l0aCAzIHBpcGVzLCBzaW5jZSBpdCBoYXMgb25seSB0d28KPiAtICAgICAgICAqIERQ TExzIGFuZCBzbyBEUExMIHNoYXJpbmcgaXMgdGhlIG9ubHkgd2F5IHRvIGdldCB0aHJlZSBwaXBl cwo+IC0gICAgICAgICogZHJpdmluZyBQQ0ggcG9ydHMgYXQgdGhlIHNhbWUgdGltZS4gT24gU05C IHdlIGNvdWxkIGRvIHRoaXMsCj4gLSAgICAgICAgKiBhbmQgcG90ZW50aWFsbHkgYXZvaWQgZW5h YmxpbmcgdGhlIHNlY29uZCBEUExMLCBidXQgaXQncyBub3QKPiAtICAgICAgICAqIGNsZWFyIGlm IGl0JydzIGEgd2luIG9yIGxvc3MgcG93ZXIgd2lzZS4gTm8gcG9pbnQgaW4gZG9pbmcKPiAtICAg ICAgICAqIHRoaXMgb24gSUxLIGF0IGFsbCBzaW5jZSBpdCBoYXMgYSBmaXhlZCBEUExMPC0+cGlw ZSBtYXBwaW5nLgo+IC0gICAgICAgICovCj4gLSAgICAgICBpZiAoSU5URUxfTlVNX1BJUEVTKGRl dl9wcml2KSA9PSAzICYmCj4gLSAgICAgICAgICAgaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0 YXRlLCBJTlRFTF9PVVRQVVRfQU5BTE9HKSkKPiAtICAgICAgICAgICAgICAgZHBsbCB8PSBEUExM X1NEVk9fSElHSF9TUEVFRDsKPiAtCj4gLSAgICAgICAvKiBjb21wdXRlIGJpdG1hc2sgZnJvbSBw MSB2YWx1ZSAqLwo+IC0gICAgICAgZHBsbCB8PSAoMSA8PCAoY3J0Y19zdGF0ZS0+ZHBsbC5wMSAt IDEpKSA8PCBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX1NISUZUOwo+IC0gICAgICAgLyogYWxzbyBG UEExICovCj4gLSAgICAgICBkcGxsIHw9ICgxIDw8IChjcnRjX3N0YXRlLT5kcGxsLnAxIC0gMSkp IDw8IERQTExfRlBBMV9QMV9QT1NUX0RJVl9TSElGVDsKPiAtCj4gLSAgICAgICBzd2l0Y2ggKGNy dGNfc3RhdGUtPmRwbGwucDIpIHsKPiAtICAgICAgIGNhc2UgNToKPiAtICAgICAgICAgICAgICAg ZHBsbCB8PSBEUExMX0RBQ19TRVJJQUxfUDJfQ0xPQ0tfRElWXzU7Cj4gLSAgICAgICAgICAgICAg IGJyZWFrOwo+IC0gICAgICAgY2FzZSA3Ogo+IC0gICAgICAgICAgICAgICBkcGxsIHw9IERQTExC X0xWRFNfUDJfQ0xPQ0tfRElWXzc7Cj4gLSAgICAgICAgICAgICAgIGJyZWFrOwo+IC0gICAgICAg Y2FzZSAxMDoKPiAtICAgICAgICAgICAgICAgZHBsbCB8PSBEUExMX0RBQ19TRVJJQUxfUDJfQ0xP Q0tfRElWXzEwOwo+IC0gICAgICAgICAgICAgICBicmVhazsKPiAtICAgICAgIGNhc2UgMTQ6Cj4g LSAgICAgICAgICAgICAgIGRwbGwgfD0gRFBMTEJfTFZEU19QMl9DTE9DS19ESVZfMTQ7Cj4gLSAg ICAgICAgICAgICAgIGJyZWFrOwo+IC0gICAgICAgfQo+IC0KPiAtICAgICAgIGlmIChpbnRlbF9j cnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9MVkRTKSAmJgo+IC0gICAgICAg ICAgIGludGVsX3BhbmVsX3VzZV9zc2MoZGV2X3ByaXYpKQo+IC0gICAgICAgICAgICAgICBkcGxs IHw9IFBMTEJfUkVGX0lOUFVUX1NQUkVBRFNQRUNUUlVNSU47Cj4gLSAgICAgICBlbHNlCj4gLSAg ICAgICAgICAgICAgIGRwbGwgfD0gUExMX1JFRl9JTlBVVF9EUkVGQ0xLOwo+IC0KPiAtICAgICAg IGRwbGwgfD0gRFBMTF9WQ09fRU5BQkxFOwo+IC0KPiAtICAgICAgIGNydGNfc3RhdGUtPmRwbGxf aHdfc3RhdGUuZHBsbCA9IGRwbGw7Cj4gLSAgICAgICBjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRl LmZwMCA9IGZwOwo+IC0gICAgICAgY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZS5mcDEgPSBmcDI7 Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgaWxrX2NydGNfY29tcHV0ZV9jbG9jayhzdHJ1Y3QgaW50 ZWxfY3J0YyAqY3J0YywKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4gLXsKPiAtICAgICAgIHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOwo+IC0gICAg ICAgc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUgPQo+IC0gICAgICAgICAgICAgICB0 b19pbnRlbF9hdG9taWNfc3RhdGUoY3J0Y19zdGF0ZS0+dWFwaS5zdGF0ZSk7Cj4gLSAgICAgICBj b25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgKmxpbWl0Owo+IC0gICAgICAgaW50IHJlZmNsayA9IDEy MDAwMDsKPiAtCj4gLSAgICAgICBtZW1zZXQoJmNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUsIDAs Cj4gLSAgICAgICAgICAgICAgc2l6ZW9mKGNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUpKTsKPiAt Cj4gLSAgICAgICAvKiBDUFUgZURQIGlzIHRoZSBvbmx5IG91dHB1dCB0aGF0IGRvZXNuJ3QgbmVl ZCBhIFBDSCBQTEwgb2YgaXRzIG93bi4gKi8KPiAtICAgICAgIGlmICghY3J0Y19zdGF0ZS0+aGFz X3BjaF9lbmNvZGVyKQo+IC0gICAgICAgICAgICAgICByZXR1cm4gMDsKPiAtCj4gLSAgICAgICBp ZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfTFZEUykpIHsK PiAtICAgICAgICAgICAgICAgaWYgKGludGVsX3BhbmVsX3VzZV9zc2MoZGV2X3ByaXYpKSB7Cj4g LSAgICAgICAgICAgICAgICAgICAgICAgZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4gLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVzaW5nIFNTQyByZWZlcmVuY2UgY2xv Y2sgb2YgJWQga0h6XG4iLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl dl9wcml2LT52YnQubHZkc19zc2NfZnJlcSk7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgcmVm Y2xrID0gZGV2X3ByaXYtPnZidC5sdmRzX3NzY19mcmVxOwo+IC0gICAgICAgICAgICAgICB9Cj4g LQo+IC0gICAgICAgICAgICAgICBpZiAoaW50ZWxfaXNfZHVhbF9saW5rX2x2ZHMoZGV2X3ByaXYp KSB7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZmNsayA9PSAxMDAwMDApCj4gLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdCA9ICZpbGtfbGltaXRzX2R1YWxfbHZk c18xMDBtOwo+IC0gICAgICAgICAgICAgICAgICAgICAgIGVsc2UKPiAtICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGxpbWl0ID0gJmlsa19saW1pdHNfZHVhbF9sdmRzOwo+IC0gICAgICAg ICAgICAgICB9IGVsc2Ugewo+IC0gICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZjbGsgPT0g MTAwMDAwKQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQgPSAmaWxrX2xp bWl0c19zaW5nbGVfbHZkc18xMDBtOwo+IC0gICAgICAgICAgICAgICAgICAgICAgIGVsc2UKPiAt ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0ID0gJmlsa19saW1pdHNfc2luZ2xl X2x2ZHM7Cj4gLSAgICAgICAgICAgICAgIH0KPiAtICAgICAgIH0gZWxzZSB7Cj4gLSAgICAgICAg ICAgICAgIGxpbWl0ID0gJmlsa19saW1pdHNfZGFjOwo+IC0gICAgICAgfQo+IC0KPiAtICAgICAg IGlmICghY3J0Y19zdGF0ZS0+Y2xvY2tfc2V0ICYmCj4gLSAgICAgICAgICAgIWc0eF9maW5kX2Jl c3RfZHBsbChsaW1pdCwgY3J0Y19zdGF0ZSwgY3J0Y19zdGF0ZS0+cG9ydF9jbG9jaywKPiAtICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmNsaywgTlVMTCwgJmNydGNfc3RhdGUtPmRw bGwpKSB7Cj4gLSAgICAgICAgICAgICAgIGRybV9lcnIoJmRldl9wcml2LT5kcm0sCj4gLSAgICAg ICAgICAgICAgICAgICAgICAgIkNvdWxkbid0IGZpbmQgUExMIHNldHRpbmdzIGZvciBtb2RlIVxu Iik7Cj4gLSAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+IC0gICAgICAgfQo+IC0KPiAt ICAgICAgIGlsa19jb21wdXRlX2RwbGwoY3J0YywgY3J0Y19zdGF0ZSwgTlVMTCk7Cj4gLQo+IC0g ICAgICAgaWYgKCFpbnRlbF9yZXNlcnZlX3NoYXJlZF9kcGxscyhzdGF0ZSwgY3J0YywgTlVMTCkp IHsKPiAtICAgICAgICAgICAgICAgZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4gLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWQgdG8gZmluZCBQTEwgZm9yIHBpcGUgJWNcbiIs Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGVfbmFtZShjcnRjLT5waXBlKSk7Cj4g LSAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+IC0gICAgICAgfQo+IC0KPiAtICAgICAg IHJldHVybiAwOwo+IC19Cj4gLQo+ICBzdGF0aWMgdm9pZCBpbnRlbF9wY2hfdHJhbnNjb2Rlcl9n ZXRfbV9uKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAo+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IGludGVsX2xpbmtfbV9uICptX24pCj4gIHsKPiBAQCAt MTA1MjksMjkgKzkyMTksNiBAQCBzdGF0aWMgYm9vbCBpbGtfZ2V0X3BpcGVfY29uZmlnKHN0cnVj dCBpbnRlbF9jcnRjICpjcnRjLAo+ICAgICAgICAgcmV0dXJuIHJldDsKPiAgfQo+Cj4gLXN0YXRp YyBpbnQgaHN3X2NydGNfY29tcHV0ZV9jbG9jayhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKPiAt ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmNydGNfc3RhdGUpCj4gLXsKPiAtICAgICAgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOwo+IC0gICAgICAgc3RydWN0IGludGVsX2F0 b21pY19zdGF0ZSAqc3RhdGUgPQo+IC0gICAgICAgICAgICAgICB0b19pbnRlbF9hdG9taWNfc3Rh dGUoY3J0Y19zdGF0ZS0+dWFwaS5zdGF0ZSk7Cj4gLQo+IC0gICAgICAgaWYgKCFpbnRlbF9jcnRj X2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9EU0kpIHx8Cj4gLSAgICAgICAgICAg SU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSkgewo+IC0gICAgICAgICAgICAgICBzdHJ1Y3QgaW50 ZWxfZW5jb2RlciAqZW5jb2RlciA9Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgaW50ZWxfZ2V0 X2NydGNfbmV3X2VuY29kZXIoc3RhdGUsIGNydGNfc3RhdGUpOwo+IC0KPiAtICAgICAgICAgICAg ICAgaWYgKCFpbnRlbF9yZXNlcnZlX3NoYXJlZF9kcGxscyhzdGF0ZSwgY3J0YywgZW5jb2Rlcikp IHsKPiAtICAgICAgICAgICAgICAgICAgICAgICBkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwK PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkIHRvIGZpbmQgUExM IGZvciBwaXBlICVjXG4iLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBp cGVfbmFtZShjcnRjLT5waXBlKSk7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1F SU5WQUw7Cj4gLSAgICAgICAgICAgICAgIH0KPiAtICAgICAgIH0KPiAtCj4gLSAgICAgICByZXR1 cm4gMDsKPiAtfQo+IC0KPiAgc3RhdGljIHZvaWQgZGcxX2dldF9kZGlfcGxsKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwb3J0IHBvcnQsCj4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZykKPiAgewo+ IEBAIC0xNjQ4Niw2OSArMTUxNTMsMjcgQEAgdm9pZCBpbnRlbF9pbml0X2Rpc3BsYXlfaG9va3Mo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICB7Cj4gICAgICAgICBpbnRlbF9p bml0X2NkY2xrX2hvb2tzKGRldl9wcml2KTsKPgo+ICsgICAgICAgaW50ZWxfaW5pdF9jbG9ja19o b29rKGRldl9wcml2KTsKPiArCj4gICAgICAgICBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5 KSB7Cj4gICAgICAgICAgICAgICAgIGRldl9wcml2LT5kaXNwbGF5LmdldF9waXBlX2NvbmZpZyA9 IGhzd19nZXRfcGlwZV9jb25maWc7Cj4gLSAgICAgICAgICAgICAgIGRldl9wcml2LT5kaXNwbGF5 LmdldF9pbml0aWFsX3BsYW5lX2NvbmZpZyA9Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgc2ts X2dldF9pbml0aWFsX3BsYW5lX2NvbmZpZzsKPiAtICAgICAgICAgICAgICAgZGV2X3ByaXYtPmRp c3BsYXkuY3J0Y19jb21wdXRlX2Nsb2NrID0gaHN3X2NydGNfY29tcHV0ZV9jbG9jazsKPiAgICAg ICAgICAgICAgICAgZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19lbmFibGUgPSBoc3dfY3J0Y19lbmFi bGU7Cj4gICAgICAgICAgICAgICAgIGRldl9wcml2LT5kaXNwbGF5LmNydGNfZGlzYWJsZSA9IGhz d19jcnRjX2Rpc2FibGU7Cj4gICAgICAgICB9IGVsc2UgaWYgKEhBU19EREkoZGV2X3ByaXYpKSB7 Cj4gICAgICAgICAgICAgICAgIGRldl9wcml2LT5kaXNwbGF5LmdldF9waXBlX2NvbmZpZyA9IGhz d19nZXRfcGlwZV9jb25maWc7Cj4gLSAgICAgICAgICAgICAgIGRldl9wcml2LT5kaXNwbGF5Lmdl dF9pbml0aWFsX3BsYW5lX2NvbmZpZyA9Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgaTl4eF9n ZXRfaW5pdGlhbF9wbGFuZV9jb25maWc7Cj4gLSAgICAgICAgICAgICAgIGRldl9wcml2LT5kaXNw bGF5LmNydGNfY29tcHV0ZV9jbG9jayA9Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgaHN3X2Ny dGNfY29tcHV0ZV9jbG9jazsKPiAgICAgICAgICAgICAgICAgZGV2X3ByaXYtPmRpc3BsYXkuY3J0 Y19lbmFibGUgPSBoc3dfY3J0Y19lbmFibGU7Cj4gICAgICAgICAgICAgICAgIGRldl9wcml2LT5k aXNwbGF5LmNydGNfZGlzYWJsZSA9IGhzd19jcnRjX2Rpc2FibGU7Cj4gICAgICAgICB9IGVsc2Ug aWYgKEhBU19QQ0hfU1BMSVQoZGV2X3ByaXYpKSB7Cj4gICAgICAgICAgICAgICAgIGRldl9wcml2 LT5kaXNwbGF5LmdldF9waXBlX2NvbmZpZyA9IGlsa19nZXRfcGlwZV9jb25maWc7Cj4gLSAgICAg ICAgICAgICAgIGRldl9wcml2LT5kaXNwbGF5LmdldF9pbml0aWFsX3BsYW5lX2NvbmZpZyA9Cj4g LSAgICAgICAgICAgICAgICAgICAgICAgaTl4eF9nZXRfaW5pdGlhbF9wbGFuZV9jb25maWc7Cj4g LSAgICAgICAgICAgICAgIGRldl9wcml2LT5kaXNwbGF5LmNydGNfY29tcHV0ZV9jbG9jayA9Cj4g LSAgICAgICAgICAgICAgICAgICAgICAgaWxrX2NydGNfY29tcHV0ZV9jbG9jazsKPiAgICAgICAg ICAgICAgICAgZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19lbmFibGUgPSBpbGtfY3J0Y19lbmFibGU7 Cj4gICAgICAgICAgICAgICAgIGRldl9wcml2LT5kaXNwbGF5LmNydGNfZGlzYWJsZSA9IGlsa19j cnRjX2Rpc2FibGU7Cj4gLSAgICAgICB9IGVsc2UgaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYp KSB7Cj4gLSAgICAgICAgICAgICAgIGRldl9wcml2LT5kaXNwbGF5LmdldF9waXBlX2NvbmZpZyA9 IGk5eHhfZ2V0X3BpcGVfY29uZmlnOwo+IC0gICAgICAgICAgICAgICBkZXZfcHJpdi0+ZGlzcGxh eS5nZXRfaW5pdGlhbF9wbGFuZV9jb25maWcgPQo+IC0gICAgICAgICAgICAgICAgICAgICAgIGk5 eHhfZ2V0X2luaXRpYWxfcGxhbmVfY29uZmlnOwo+IC0gICAgICAgICAgICAgICBkZXZfcHJpdi0+ ZGlzcGxheS5jcnRjX2NvbXB1dGVfY2xvY2sgPSBjaHZfY3J0Y19jb21wdXRlX2Nsb2NrOwo+IC0g ICAgICAgICAgICAgICBkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2VuYWJsZSA9IHZhbGxleXZpZXdf Y3J0Y19lbmFibGU7Cj4gLSAgICAgICAgICAgICAgIGRldl9wcml2LT5kaXNwbGF5LmNydGNfZGlz YWJsZSA9IGk5eHhfY3J0Y19kaXNhYmxlOwo+IC0gICAgICAgfSBlbHNlIGlmIChJU19WQUxMRVlW SUVXKGRldl9wcml2KSkgewo+ICsgICAgICAgfSBlbHNlIGlmIChJU19DSEVSUllWSUVXKGRldl9w cml2KSB8fAo+ICsgICAgICAgICAgICAgICAgICBJU19WQUxMRVlWSUVXKGRldl9wcml2KSkgewo+ ICAgICAgICAgICAgICAgICBkZXZfcHJpdi0+ZGlzcGxheS5nZXRfcGlwZV9jb25maWcgPSBpOXh4 X2dldF9waXBlX2NvbmZpZzsKPiAtICAgICAgICAgICAgICAgZGV2X3ByaXYtPmRpc3BsYXkuZ2V0 X2luaXRpYWxfcGxhbmVfY29uZmlnID0KPiAtICAgICAgICAgICAgICAgICAgICAgICBpOXh4X2dl dF9pbml0aWFsX3BsYW5lX2NvbmZpZzsKPiAtICAgICAgICAgICAgICAgZGV2X3ByaXYtPmRpc3Bs YXkuY3J0Y19jb21wdXRlX2Nsb2NrID0gdmx2X2NydGNfY29tcHV0ZV9jbG9jazsKPiAgICAgICAg ICAgICAgICAgZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19lbmFibGUgPSB2YWxsZXl2aWV3X2NydGNf ZW5hYmxlOwo+ICAgICAgICAgICAgICAgICBkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2Rpc2FibGUg PSBpOXh4X2NydGNfZGlzYWJsZTsKPiAtICAgICAgIH0gZWxzZSBpZiAoSVNfRzRYKGRldl9wcml2 KSkgewo+IC0gICAgICAgICAgICAgICBkZXZfcHJpdi0+ZGlzcGxheS5nZXRfcGlwZV9jb25maWcg PSBpOXh4X2dldF9waXBlX2NvbmZpZzsKPiAtICAgICAgICAgICAgICAgZGV2X3ByaXYtPmRpc3Bs YXkuZ2V0X2luaXRpYWxfcGxhbmVfY29uZmlnID0KPiAtICAgICAgICAgICAgICAgICAgICAgICBp OXh4X2dldF9pbml0aWFsX3BsYW5lX2NvbmZpZzsKPiAtICAgICAgICAgICAgICAgZGV2X3ByaXYt PmRpc3BsYXkuY3J0Y19jb21wdXRlX2Nsb2NrID0gZzR4X2NydGNfY29tcHV0ZV9jbG9jazsKPiAt ICAgICAgICAgICAgICAgZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19lbmFibGUgPSBpOXh4X2NydGNf ZW5hYmxlOwo+IC0gICAgICAgICAgICAgICBkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2Rpc2FibGUg PSBpOXh4X2NydGNfZGlzYWJsZTsKPiAtICAgICAgIH0gZWxzZSBpZiAoSVNfUElORVZJRVcoZGV2 X3ByaXYpKSB7Cj4gLSAgICAgICAgICAgICAgIGRldl9wcml2LT5kaXNwbGF5LmdldF9waXBlX2Nv bmZpZyA9IGk5eHhfZ2V0X3BpcGVfY29uZmlnOwo+IC0gICAgICAgICAgICAgICBkZXZfcHJpdi0+ ZGlzcGxheS5nZXRfaW5pdGlhbF9wbGFuZV9jb25maWcgPQo+IC0gICAgICAgICAgICAgICAgICAg ICAgIGk5eHhfZ2V0X2luaXRpYWxfcGxhbmVfY29uZmlnOwo+IC0gICAgICAgICAgICAgICBkZXZf cHJpdi0+ZGlzcGxheS5jcnRjX2NvbXB1dGVfY2xvY2sgPSBwbnZfY3J0Y19jb21wdXRlX2Nsb2Nr Owo+IC0gICAgICAgICAgICAgICBkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2VuYWJsZSA9IGk5eHhf Y3J0Y19lbmFibGU7Cj4gLSAgICAgICAgICAgICAgIGRldl9wcml2LT5kaXNwbGF5LmNydGNfZGlz YWJsZSA9IGk5eHhfY3J0Y19kaXNhYmxlOwo+IC0gICAgICAgfSBlbHNlIGlmICghSVNfR0VOKGRl dl9wcml2LCAyKSkgewo+IC0gICAgICAgICAgICAgICBkZXZfcHJpdi0+ZGlzcGxheS5nZXRfcGlw ZV9jb25maWcgPSBpOXh4X2dldF9waXBlX2NvbmZpZzsKPiAtICAgICAgICAgICAgICAgZGV2X3By aXYtPmRpc3BsYXkuZ2V0X2luaXRpYWxfcGxhbmVfY29uZmlnID0KPiAtICAgICAgICAgICAgICAg ICAgICAgICBpOXh4X2dldF9pbml0aWFsX3BsYW5lX2NvbmZpZzsKPiAtICAgICAgICAgICAgICAg ZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19jb21wdXRlX2Nsb2NrID0gaTl4eF9jcnRjX2NvbXB1dGVf Y2xvY2s7Cj4gLSAgICAgICAgICAgICAgIGRldl9wcml2LT5kaXNwbGF5LmNydGNfZW5hYmxlID0g aTl4eF9jcnRjX2VuYWJsZTsKPiAtICAgICAgICAgICAgICAgZGV2X3ByaXYtPmRpc3BsYXkuY3J0 Y19kaXNhYmxlID0gaTl4eF9jcnRjX2Rpc2FibGU7Cj4gICAgICAgICB9IGVsc2Ugewo+ICAgICAg ICAgICAgICAgICBkZXZfcHJpdi0+ZGlzcGxheS5nZXRfcGlwZV9jb25maWcgPSBpOXh4X2dldF9w aXBlX2NvbmZpZzsKPiAtICAgICAgICAgICAgICAgZGV2X3ByaXYtPmRpc3BsYXkuZ2V0X2luaXRp YWxfcGxhbmVfY29uZmlnID0KPiAtICAgICAgICAgICAgICAgICAgICAgICBpOXh4X2dldF9pbml0 aWFsX3BsYW5lX2NvbmZpZzsKPiAtICAgICAgICAgICAgICAgZGV2X3ByaXYtPmRpc3BsYXkuY3J0 Y19jb21wdXRlX2Nsb2NrID0gaTh4eF9jcnRjX2NvbXB1dGVfY2xvY2s7Cj4gICAgICAgICAgICAg ICAgIGRldl9wcml2LT5kaXNwbGF5LmNydGNfZW5hYmxlID0gaTl4eF9jcnRjX2VuYWJsZTsKPiAg ICAgICAgICAgICAgICAgZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19kaXNhYmxlID0gaTl4eF9jcnRj X2Rpc2FibGU7Cj4gICAgICAgICB9Cj4gQEAgLTE2NTYyLDEwICsxNTE4NywxMyBAQCB2b2lkIGlu dGVsX2luaXRfZGlzcGxheV9ob29rcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp Cj4gICAgICAgICAgICAgICAgIGRldl9wcml2LT5kaXNwbGF5LmZkaV9saW5rX3RyYWluID0gaXZi X21hbnVhbF9mZGlfbGlua190cmFpbjsKPiAgICAgICAgIH0KPgo+IC0gICAgICAgaWYgKElOVEVM X0dFTihkZXZfcHJpdikgPj0gOSkKPiArICAgICAgIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49 IDkpIHsKPiAgICAgICAgICAgICAgICAgZGV2X3ByaXYtPmRpc3BsYXkuY29tbWl0X21vZGVzZXRf ZW5hYmxlcyA9IHNrbF9jb21taXRfbW9kZXNldF9lbmFibGVzOwo+IC0gICAgICAgZWxzZQo+ICsg ICAgICAgICAgICAgICBkZXZfcHJpdi0+ZGlzcGxheS5nZXRfaW5pdGlhbF9wbGFuZV9jb25maWcg PSBza2xfZ2V0X2luaXRpYWxfcGxhbmVfY29uZmlnOwo+ICsgICAgICAgfSBlbHNlIHsKPiAgICAg ICAgICAgICAgICAgZGV2X3ByaXYtPmRpc3BsYXkuY29tbWl0X21vZGVzZXRfZW5hYmxlcyA9IGlu dGVsX2NvbW1pdF9tb2Rlc2V0X2VuYWJsZXM7Cj4gKyAgICAgICAgICAgICAgIGRldl9wcml2LT5k aXNwbGF5LmdldF9pbml0aWFsX3BsYW5lX2NvbmZpZyA9IGk5eHhfZ2V0X2luaXRpYWxfcGxhbmVf Y29uZmlnOwo+ICsgICAgICAgfQo+Cj4gIH0KPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaW50ZWxfZGlzcGxheS5oCj4gaW5kZXggMGViYTkxZDE4ZTk2Li5mMWUzNmNjYTg2YzEg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5 LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaAo+ IEBAIC02NTMsNyArNjUzLDkgQEAgdTMyIGludGVsX3BsYW5lX2NvbXB1dGVfYWxpZ25lZF9vZmZz ZXQoaW50ICp4LCBpbnQgKnksCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IGNvbG9yX3BsYW5lKTsKPiAgaW50IGludGVsX3BsYW5lX3Bpbl9mYihzdHJ1Y3QgaW50 ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKTsKPiAgdm9pZCBpbnRlbF9wbGFuZV91bnBpbl9m YihzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKm9sZF9wbGFuZV9zdGF0ZSk7Cj4gLQo+ICtzdHJ1 Y3QgaW50ZWxfZW5jb2RlciAqCj4gK2ludGVsX2dldF9jcnRjX25ld19lbmNvZGVyKGNvbnN0IHN0 cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKTsKPiAgLyogY3Vy c29yICovCj4gIHN0cnVjdCBpbnRlbF9wbGFuZSAqCj4gIGludGVsX2N1cnNvcl9wbGFuZV9jcmVh dGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IEBAIC02NjUsNiArNjY3LDE1 IEBAIGludCBpbnRlbF9jcnRjX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LCBlbnVtIHBpcGUgcGlwZSk7Cj4gIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICppbnRlbF9jcnRj X3N0YXRlX2FsbG9jKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKTsKPiAgdm9pZCBpbnRlbF9jcnRj X3N0YXRlX3Jlc2V0KHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0Yyk7Cj4gKy8qIGNs b2NrICovCj4gK3ZvaWQgaW50ZWxfaW5pdF9jbG9ja19ob29rKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdik7Cj4gK2ludCB2bHZfY2FsY19kcGxsX3BhcmFtcyhpbnQgcmVmY2xrLCBz dHJ1Y3QgZHBsbCAqY2xvY2spOwo+ICtpbnQgcG52X2NhbGNfZHBsbF9wYXJhbXMoaW50IHJlZmNs aywgc3RydWN0IGRwbGwgKmNsb2NrKTsKPiAraW50IGk5eHhfY2FsY19kcGxsX3BhcmFtcyhpbnQg cmVmY2xrLCBzdHJ1Y3QgZHBsbCAqY2xvY2spOwo+ICt2b2lkIHZsdl9jb21wdXRlX2RwbGwoc3Ry dWN0IGludGVsX2NydGMgKmNydGMsCj4gKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpbnRl bF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZyk7Cj4gK3ZvaWQgY2h2X2NvbXB1dGVfZHBsbChzdHJ1 Y3QgaW50ZWxfY3J0YyAqY3J0YywKPiArICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGludGVs X2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKTsKPgo+ICAvKiBtb2Rlc2V0dGluZyAqLwo+ICB2b2lk IGludGVsX21vZGVzZXRfaW5pdF9odyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7Cj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90 eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVz LmgKPiBpbmRleCA1YmM1YmZiYzQ1NTEuLjgyMzA4M2IyMzFiYyAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfdHlwZXMuaAo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oCj4gQEAgLTE3 OTksNCArMTc5OSw5IEBAIHN0YXRpYyBpbmxpbmUgdTMyIGludGVsX3BsYW5lX2dndHRfb2Zmc2V0 KGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqc3RhdGUpCj4gICAgICAgICByZXR1cm4g aTkxNV9nZ3R0X29mZnNldChzdGF0ZS0+dm1hKTsKPiAgfQo+Cj4gK3N0YXRpYyBpbmxpbmUgdTMy IGk5eHhfZHBsbF9jb21wdXRlX2ZwKHN0cnVjdCBkcGxsICpkcGxsKQo+ICt7Cj4gKyAgICAgICBy ZXR1cm4gZHBsbC0+biA8PCAxNiB8IGRwbGwtPm0xIDw8IDggfCBkcGxsLT5tMjsKPiArfQo+ICsK PiAgI2VuZGlmIC8qICBfX0lOVEVMX0RJU1BMQVlfVFlQRVNfSF9fICovCj4gLS0KPiAyLjI3LjAK Pgo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gSW50 ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAoK CgotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24K aHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v aW50ZWwtZ2Z4Cg==