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=-15.8 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 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 587DBC433E9 for ; Tue, 2 Feb 2021 05:56:38 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (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 CE6BA64ED3 for ; Tue, 2 Feb 2021 05:56:37 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CE6BA64ED3 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=+LO7pj0pNvBBOBycmnBUSeNBhrOgzibc0wZEzsoFVGU=; b=eQGzNENVl1VqgBoBa++pu4Xyj QxwtLirnlaWKRSOgsyAZeRRMe3PDbprG7z25YQ7jE4Bm0ySV19ALRQTjTjTKqBHVAZFTGQZ6p+smu OOSspV1+/hmaOYu/rgWDZzk57bMT8YXZkbX0zHy3uBOF4h16vXSKrjkvdGmwtyffco7b5yPjFB0Ld kFE/IZjFfJnH0kCttogg+XYBOUY6AyA1KCDSxsDZw3rrKGiygxUXa3QVSw+UlTHE4BJSQk5iRB/wy q/lfcFJp3HETs+kudAvO3sv2x/OYi7UNpfnMSQ9uh4NFRkkT9XXGG5kgg08Fx7Wb7j4L+4qLx4E8R EMGa7H9WQ==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1l6oem-0008Lk-JN; Tue, 02 Feb 2021 05:55:20 +0000 Received: from foss.arm.com ([217.140.110.172]) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1l6oei-0008KL-92 for linux-arm-kernel@lists.infradead.org; Tue, 02 Feb 2021 05:55:18 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id CEA9F14F6; Mon, 1 Feb 2021 21:55:09 -0800 (PST) Received: from [192.168.0.130] (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id EE6233F718; Mon, 1 Feb 2021 21:55:06 -0800 (PST) Subject: Re: [PATCH V3 11/14] coresight: sink: Add TRBE driver To: Suzuki K Poulose , linux-arm-kernel@lists.infradead.org, coresight@lists.linaro.org References: <1611737738-1493-1-git-send-email-anshuman.khandual@arm.com> <1611737738-1493-12-git-send-email-anshuman.khandual@arm.com> <12cdc8ca-0a69-bfba-bbcd-fb392d6ca051@arm.com> From: Anshuman Khandual Message-ID: Date: Tue, 2 Feb 2021 11:25:34 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <12cdc8ca-0a69-bfba-bbcd-fb392d6ca051@arm.com> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210202_005516_603264_571FC3B1 X-CRM114-Status: GOOD ( 37.86 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-kernel@vger.kernel.org, lcherian@marvell.com, mathieu.poirier@linaro.org, mike.leach@linaro.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Ck9uIDEvMjkvMjEgMzo1MyBQTSwgU3V6dWtpIEsgUG91bG9zZSB3cm90ZToKPiBIaSBBbnNodW1h bgo+IAo+IE9uIDEvMjcvMjEgODo1NSBBTSwgQW5zaHVtYW4gS2hhbmR1YWwgd3JvdGU6Cj4+IFRy YWNlIEJ1ZmZlciBFeHRlbnNpb24gKFRSQkUpIGltcGxlbWVudHMgYSB0cmFjZSBidWZmZXIgcGVy IENQVSB3aGljaCBpcwo+PiBhY2Nlc3NpYmxlIHZpYSB0aGUgc3lzdGVtIHJlZ2lzdGVycy4gVGhl IFRSQkUgc3VwcG9ydHMgZGlmZmVyZW50IGFkZHJlc3NpbmcKPj4gbW9kZXMgaW5jbHVkaW5nIENQ VSB2aXJ0dWFsIGFkZHJlc3MgYW5kIGJ1ZmZlciBtb2RlcyBpbmNsdWRpbmcgdGhlIGNpcmN1bGFy Cj4+IGJ1ZmZlciBtb2RlLiBUaGUgVFJCRSBidWZmZXIgaXMgYWRkcmVzc2VkIGJ5IGEgYmFzZSBw b2ludGVyIChUUkJCQVNFUl9FTDEpLAo+PiBhbiB3cml0ZSBwb2ludGVyIChUUkJQVFJfRUwxKSBh bmQgYSBsaW1pdCBwb2ludGVyIChUUkJMSU1JVFJfRUwxKS4gQnV0IHRoZQo+PiBhY2Nlc3MgdG8g dGhlIHRyYWNlIGJ1ZmZlciBjb3VsZCBiZSBwcm9oaWJpdGVkIGJ5IGEgaGlnaGVyIGV4Y2VwdGlv biBsZXZlbAo+PiAoRUwzIG9yIEVMMiksIGluZGljYXRlZCBieSBUUkJJRFJfRUwxLlAuIFRoZSBU UkJFIGNhbiBhbHNvIGdlbmVyYXRlIGEgQ1BVCj4+IHByaXZhdGUgaW50ZXJydXB0IChQUEkpIG9u IGFkZHJlc3MgdHJhbnNsYXRpb24gZXJyb3JzIGFuZCB3aGVuIHRoZSBidWZmZXIKPj4gaXMgZnVs bC4gT3ZlcmFsbCBpbXBsZW1lbnRhdGlvbiBoZXJlIGlzIGluc3BpcmVkIGZyb20gdGhlIEFybSBT UEUgZHJpdmVyLgo+Pgo+PiBDYzogTWF0aGlldSBQb2lyaWVyIDxtYXRoaWV1LnBvaXJpZXJAbGlu YXJvLm9yZz4KPj4gQ2M6IE1pa2UgTGVhY2ggPG1pa2UubGVhY2hAbGluYXJvLm9yZz4KPj4gQ2M6 IFN1enVraSBLIFBvdWxvc2UgPHN1enVraS5wb3Vsb3NlQGFybS5jb20+Cj4+IFNpZ25lZC1vZmYt Ynk6IEFuc2h1bWFuIEtoYW5kdWFsIDxhbnNodW1hbi5raGFuZHVhbEBhcm0uY29tPgo+IAo+IFRo aXMgdmVyc2lvbiBsb29rcyBmdW5jdGlvbmFsbHkgY29ycmVjdCB0byBtZS4gVGhlcmUgYXJlIHNv bWUgbWlub3IKPiBpc3N1ZXMgd2l0aCB0aGUgZGV2bV8gYWxsb2NhdGVkIG1lbW9yeSBhbmQgc29t ZSBkcml2ZXIgaGFyZGVuaW5nIGNvbW1lbnRzLgo+IEkgcmFuIHRoaXMgb24gYSBtb2RlbCBhbmQg aGF2ZSB0ZXN0ZWQgdGhpcyB3aXRoIHZhcmlvdXMgc2NlbmFyaW9zLgoKT2theS4KCj4gCj4+IC0t LQo+PiBDaGFuZ2VzIGluIFYzOgo+Pgo+PiAtIEFkZGVkIG5ldyBEVCBiaW5kaW5ncyBkb2N1bWVu dCBUUkJFLnlhbWwKPj4gLSBDaGFuZ2VkIFRSQkxJTUlUUl9UUklHX01PREVfU0hJRlQgZnJvbSAy IHRvIDMKPj4gLSBEcm9wcGVkIGlzYigpIGZyb20gdHJiZV9yZXNldF9sb2NhbCgpCj4+IC0gRHJv cHBlZCBnYXAgYmV0d2VlbiAodm9pZCAqKSBhbmQgYnVmLT50cmJlX2Jhc2UKPj4gLSBDaGFuZ2Vk ICdpbnQnIHRvICd1bnNpZ25lZCBpbnQnIGluIGlzX3RyYmVfYXZhaWxhYmxlKCkKPj4gLSBEcm9w cGVkIHVudXNlZCBmdW5jdGlvbiBzZXRfdHJiZV9ydW5uaW5nKCksIHNldF90cmJlX3ZpcnR1YWxf bW9kZSgpLAo+PiDCoMKgIHNldF90cmJlX2VuYWJsZWQoKSBhbmQgc2V0X3RyYmVfbGltaXRfcG9p bnRlcigpCj4+IC0gQ2hhbmdlZCBnZXRfdHJiZV9mbGFnX3VwZGF0ZSgpLCBpc190cmJlX3Byb2dy YW1tYWJsZSgpIGFuZAo+PiDCoMKgIGdldF90cmJlX2FkZHJlc3NfYWxpZ24oKSB0byBhY2NlcHQg VFJCSURSIHZhbHVlCj4+IC0gQ2hhbmdlZCBpc190cmJlX3J1bm5pbmcoKSwgaXNfdHJiZV9hYm9y dCgpLCBpc190cmJlX3dyYXAoKSwgaXNfdHJiZV90cmcoKSwKPj4gwqDCoCBpc190cmJlX2lycSgp LCBnZXRfdHJiZV9ic2MoKSBhbmQgZ2V0X3RyYmVfZWMoKSB0byBhY2NlcHQgVFJCU1IgdmFsdWUK Pj4gLSBEcm9wcGVkIHNuYXBzaG90IG1vZGUgY29uZGl0aW9uIGluIGFybV90cmJlX2FsbG9jX2J1 ZmZlcigpCj4+IC0gRXhpdCBhcm1fdHJiZV9pbml0KCkgd2hlbiBhcm02NF9rZXJuZWxfdW5tYXBw ZWRfYXRfZWwwKCkgaXMgZW5hYmxlZAo+PiAtIENvbXB1dGUgdHJiZV9saW1pdCBiZWZvcmUgdHJi ZV93cml0ZSB0byBnZXQgdGhlIHVwZGF0ZWQgaGFuZGxlCj4+IC0gQWRkZWQgdHJiZV9zdG9wX2Fu ZF90cnVuY2F0ZV9ldmVudCgpCj4+IC0gRHJvcHBlZCB0cmJlX2hhbmRsZV9mYXRhbCgpCj4+Cj4+ IMKgIERvY3VtZW50YXRpb24vdHJhY2UvY29yZXNpZ2h0L2NvcmVzaWdodC10cmJlLnJzdCB8wqDC oCAzOSArCj4+IMKgIGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3lzcmVnLmjCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgwqAgMSArCj4+IMKgIGRyaXZlcnMvaHd0cmFjaW5n L2NvcmVzaWdodC9LY29uZmlnwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMTEgKwo+ PiDCoCBkcml2ZXJzL2h3dHJhY2luZy9jb3Jlc2lnaHQvTWFrZWZpbGXCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgfMKgwqDCoCAxICsKPj4gwqAgZHJpdmVycy9od3RyYWNpbmcvY29yZXNpZ2h0L2Nv cmVzaWdodC10cmJlLmPCoMKgwqDCoCB8IDEwMjMgKysrKysrKysrKysrKysrKysrKysrKwo+PiDC oCBkcml2ZXJzL2h3dHJhY2luZy9jb3Jlc2lnaHQvY29yZXNpZ2h0LXRyYmUuaMKgwqDCoMKgIHzC oCAxNjAgKysrKwo+PiDCoCA2IGZpbGVzIGNoYW5nZWQsIDEyMzUgaW5zZXJ0aW9ucygrKQo+PiDC oCBjcmVhdGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi90cmFjZS9jb3Jlc2lnaHQvY29yZXNp Z2h0LXRyYmUucnN0Cj4+IMKgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2h3dHJhY2luZy9j b3Jlc2lnaHQvY29yZXNpZ2h0LXRyYmUuYwo+PiDCoCBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9od3RyYWNpbmcvY29yZXNpZ2h0L2NvcmVzaWdodC10cmJlLmgKPj4KPj4gZGlmZiAtLWdpdCBh L0RvY3VtZW50YXRpb24vdHJhY2UvY29yZXNpZ2h0L2NvcmVzaWdodC10cmJlLnJzdCBiL0RvY3Vt ZW50YXRpb24vdHJhY2UvY29yZXNpZ2h0L2NvcmVzaWdodC10cmJlLnJzdAo+PiBuZXcgZmlsZSBt b2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi4xY2JiODE5Cj4+IC0tLSAvZGV2L251bGwKPj4g KysrIGIvRG9jdW1lbnRhdGlvbi90cmFjZS9jb3Jlc2lnaHQvY29yZXNpZ2h0LXRyYmUucnN0Cj4+ IEBAIC0wLDAgKzEsMzkgQEAKPj4gKy4uIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w Cj4+ICsKPj4gKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+PiArVHJhY2UgQnVmZmVy IEV4dGVuc2lvbiAoVFJCRSkuCj4+ICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KPj4g Kwo+PiArwqDCoMKgIDpBdXRob3I6wqDCoCBBbnNodW1hbiBLaGFuZHVhbCA8YW5zaHVtYW4ua2hh bmR1YWxAYXJtLmNvbT4KPj4gK8KgwqDCoCA6RGF0ZTrCoMKgwqDCoCBOb3ZlbWJlciAyMDIwCj4+ ICsKPj4gK0hhcmR3YXJlIERlc2NyaXB0aW9uCj4+ICstLS0tLS0tLS0tLS0tLS0tLS0tLQo+PiAr Cj4+ICtUcmFjZSBCdWZmZXIgRXh0ZW5zaW9uIChUUkJFKSBpcyBhIHBlcmNwdSBoYXJkd2FyZSB3 aGljaCBjYXB0dXJlcyBpbiBzeXN0ZW0KPj4gK21lbW9yeSwgQ1BVIHRyYWNlcyBnZW5lcmF0ZWQg ZnJvbSBhIGNvcnJlc3BvbmRpbmcgcGVyY3B1IHRyYWNpbmcgdW5pdC4gVGhpcwo+PiArZ2V0cyBw bHVnZ2VkIGluIGFzIGEgY29yZXNpZ2h0IHNpbmsgZGV2aWNlIGJlY2F1c2UgdGhlIGNvcnJlc3Bv bmRpbmcgdHJhY2UKPj4gK2dlbmFyYXRvcnMgKEVURSksIGFyZSBwbHVnZ2VkIGluIGFzIHNvdXJj ZSBkZXZpY2UuCj4+ICsKPj4gK1RoZSBUUkJFIGlzIG5vdCBjb21wbGlhbnQgdG8gQ29yZVNpZ2h0 IGFyY2hpdGVjdHVyZSBzcGVjaWZpY2F0aW9ucywgYnV0IGlzCj4+ICtkcml2ZW4gdmlhIHRoZSBD b3JlU2lnaHQgZHJpdmVyIGZyYW1ld29yayB0byBzdXBwb3J0IHRoZSBFVEUgKHdoaWNoIGlzCj4+ ICtDb3JlU2lnaHQgY29tcGxpYW50KSBpbnRlZ3JhdGlvbi4KPj4gKwo+PiArU3lzZnMgZmlsZXMg YW5kIGRpcmVjdG9yaWVzCj4+ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPj4gKwo+PiAr VGhlIFRSQkUgZGV2aWNlcyBhcHBlYXIgb24gdGhlIGV4aXN0aW5nIGNvcmVzaWdodCBidXMgYWxv bmdzaWRlIHRoZSBvdGhlcgo+PiArY29yZXNpZ2h0IGRldmljZXM6Ogo+PiArCj4+ICvCoMKgwqAg PiQgbHMgL3N5cy9idXMvY29yZXNpZ2h0L2RldmljZXMKPj4gK8KgwqDCoCB0cmJlMMKgIHRyYmUx wqAgdHJiZTIgdHJiZTMKPj4gKwo+PiArVGhlIGBgdHJiZTxOPmBgIG5hbWVkIFRSQkVzIGFyZSBh c3NvY2lhdGVkIHdpdGggYSBDUFUuOjoKPj4gKwo+PiArwqDCoMKgID4kIGxzIC9zeXMvYnVzL2Nv cmVzaWdodC9kZXZpY2VzL3RyYmUwLwo+PiArwqDCoMKgwqDCoMKgwqAgYWxpZ24gZGJtCj4+ICsK Pj4gKypLZXkgZmlsZSBpdGVtcyBhcmU6LSoKPj4gK8KgwqAgKiBgYGFsaWduYGA6IFRSQkUgd3Jp dGUgcG9pbnRlciBhbGlnbm1lbnQKPj4gK8KgwqAgKiBgYGRibWBgOiBUUkJFIHVwZGF0ZXMgbWVt b3J5IHdpdGggYWNjZXNzIGFuZCBkaXJ0eSBmbGFncwo+PiArCj4+IGRpZmYgLS1naXQgYS9hcmNo L2FybTY0L2luY2x1ZGUvYXNtL3N5c3JlZy5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNy ZWcuaAo+PiBpbmRleCA4NWFlNGRiLi45ZTJlOWI3IDEwMDY0NAo+PiAtLS0gYS9hcmNoL2FybTY0 L2luY2x1ZGUvYXNtL3N5c3JlZy5oCj4+ICsrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3lz cmVnLmgKPj4gQEAgLTk3LDYgKzk3LDcgQEAKPj4gwqAgI2RlZmluZSBTRVRfUFNUQVRFX1VBTyh4 KcKgwqDCoMKgwqDCoMKgIF9fZW1pdF9pbnN0KDB4ZDUwMDQwMWYgfCBQU1RBVEVfVUFPIHwgKCgh IXgpIDw8IFBTVEFURV9JbW1fc2hpZnQpKQo+PiDCoCAjZGVmaW5lIFNFVF9QU1RBVEVfU1NCUyh4 KcKgwqDCoMKgwqDCoMKgIF9fZW1pdF9pbnN0KDB4ZDUwMDQwMWYgfCBQU1RBVEVfU1NCUyB8ICgo ISF4KSA8PCBQU1RBVEVfSW1tX3NoaWZ0KSkKPj4gwqAgI2RlZmluZSBTRVRfUFNUQVRFX1RDTyh4 KcKgwqDCoMKgwqDCoMKgIF9fZW1pdF9pbnN0KDB4ZDUwMDQwMWYgfCBQU1RBVEVfVENPIHwgKCgh IXgpIDw8IFBTVEFURV9JbW1fc2hpZnQpKQo+PiArI2RlZmluZSBUU0JfQ1NZTkPCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIF9fZW1pdF9pbnN0KDB4ZDUwMzIyNWYpCj4+IMKgIMKgICNkZWZpbmUgc2V0 X3BzdGF0ZV9wYW4oeCnCoMKgwqDCoMKgwqDCoCBhc20gdm9sYXRpbGUoU0VUX1BTVEFURV9QQU4o eCkpCj4+IMKgICNkZWZpbmUgc2V0X3BzdGF0ZV91YW8oeCnCoMKgwqDCoMKgwqDCoCBhc20gdm9s YXRpbGUoU0VUX1BTVEFURV9VQU8oeCkpCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2h3dHJhY2lu Zy9jb3Jlc2lnaHQvS2NvbmZpZyBiL2RyaXZlcnMvaHd0cmFjaW5nL2NvcmVzaWdodC9LY29uZmln Cj4+IGluZGV4IGYxNTRhZTcuLmFhNjU3YWIgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvaHd0cmFj aW5nL2NvcmVzaWdodC9LY29uZmlnCj4+ICsrKyBiL2RyaXZlcnMvaHd0cmFjaW5nL2NvcmVzaWdo dC9LY29uZmlnCj4+IEBAIC0xNjQsNiArMTY0LDE3IEBAIGNvbmZpZyBDT1JFU0lHSFRfQ1RJCj4+ IMKgwqDCoMKgwqDCoMKgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29z ZSBNIGhlcmU6IHRoZQo+PiDCoMKgwqDCoMKgwqDCoCBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY29y ZXNpZ2h0LWN0aS4KPj4gwqAgK2NvbmZpZyBDT1JFU0lHSFRfVFJCRQo+PiArwqDCoMKgIGJvb2wg IlRyYWNlIEJ1ZmZlciBFeHRlbnNpb24gKFRSQkUpIGRyaXZlciIKPj4gK8KgwqDCoCBkZXBlbmRz IG9uIEFSTTY0Cj4+ICvCoMKgwqAgaGVscAo+PiArwqDCoMKgwqDCoCBUaGlzIGRyaXZlciBwcm92 aWRlcyBzdXBwb3J0IGZvciBwZXJjcHUgVHJhY2UgQnVmZmVyIEV4dGVuc2lvbiAoVFJCRSkuCj4+ ICvCoMKgwqDCoMKgIFRSQkUgYWx3YXlzIG5lZWRzIHRvIGJlIHVzZWQgYWxvbmcgd2l0aCBpdCdz IGNvcnJlc3BvbmRpbmcgcGVyY3B1IEVURQo+PiArwqDCoMKgwqDCoCBjb21wb25lbnQuIEVURSBn ZW5lcmF0ZXMgdHJhY2UgZGF0YSB3aGljaCBpcyB0aGVuIGNhcHR1cmVkIHdpdGggVFJCRS4KPj4g K8KgwqDCoMKgwqAgVW5saWtlIHRyYWRpdGlvbmFsIHNpbmsgZGV2aWNlcywgVFJCRSBpcyBhIENQ VSBmZWF0dXJlIGFjY2Vzc2libGUgdmlhCj4+ICvCoMKgwqDCoMKgIHN5c3RlbSByZWdpc3RlcnMu IEJ1dCBpdCdzIGV4cGxpY2l0IGRlcGVuZGVuY3kgd2l0aCB0cmFjZSB1bml0IChFVEUpCj4+ICvC oMKgwqDCoMKgIHJlcXVpcmVzIGl0IHRvIGJlIHBsdWdnZWQgaW4gYXMgYSBjb3Jlc2lnaHQgc2lu ayBkZXZpY2UuCj4+ICsKPj4gwqAgY29uZmlnIENPUkVTSUdIVF9DVElfSU5URUdSQVRJT05fUkVH Uwo+PiDCoMKgwqDCoMKgIGJvb2wgIkFjY2VzcyBDVEkgQ29yZVNpZ2h0IEludGVncmF0aW9uIFJl Z2lzdGVycyIKPj4gwqDCoMKgwqDCoCBkZXBlbmRzIG9uIENPUkVTSUdIVF9DVEkKPj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvaHd0cmFjaW5nL2NvcmVzaWdodC9NYWtlZmlsZSBiL2RyaXZlcnMvaHd0 cmFjaW5nL2NvcmVzaWdodC9NYWtlZmlsZQo+PiBpbmRleCBmMjBlMzU3Li5kNjA4MTY1IDEwMDY0 NAo+PiAtLS0gYS9kcml2ZXJzL2h3dHJhY2luZy9jb3Jlc2lnaHQvTWFrZWZpbGUKPj4gKysrIGIv ZHJpdmVycy9od3RyYWNpbmcvY29yZXNpZ2h0L01ha2VmaWxlCj4+IEBAIC0yMSw1ICsyMSw2IEBA IG9iai0kKENPTkZJR19DT1JFU0lHSFRfU1RNKSArPSBjb3Jlc2lnaHQtc3RtLm8KPj4gwqAgb2Jq LSQoQ09ORklHX0NPUkVTSUdIVF9DUFVfREVCVUcpICs9IGNvcmVzaWdodC1jcHUtZGVidWcubwo+ PiDCoCBvYmotJChDT05GSUdfQ09SRVNJR0hUX0NBVFUpICs9IGNvcmVzaWdodC1jYXR1Lm8KPj4g wqAgb2JqLSQoQ09ORklHX0NPUkVTSUdIVF9DVEkpICs9IGNvcmVzaWdodC1jdGkubwo+PiArb2Jq LSQoQ09ORklHX0NPUkVTSUdIVF9UUkJFKSArPSBjb3Jlc2lnaHQtdHJiZS5vCj4+IMKgIGNvcmVz aWdodC1jdGkteSA6PSBjb3Jlc2lnaHQtY3RpLWNvcmUub8KgwqDCoCBjb3Jlc2lnaHQtY3RpLXBs YXRmb3JtLm8gXAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29yZXNpZ2h0LWN0aS1zeXNm cy5vCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2h3dHJhY2luZy9jb3Jlc2lnaHQvY29yZXNpZ2h0 LXRyYmUuYyBiL2RyaXZlcnMvaHd0cmFjaW5nL2NvcmVzaWdodC9jb3Jlc2lnaHQtdHJiZS5jCj4+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAuLjE0NjRkOGIKPj4gLS0tIC9k ZXYvbnVsbAo+PiArKysgYi9kcml2ZXJzL2h3dHJhY2luZy9jb3Jlc2lnaHQvY29yZXNpZ2h0LXRy YmUuYwo+PiBAQCAtMCwwICsxLDEwMjMgQEAKPj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wCj4+ICsvKgo+PiArICogVGhpcyBkcml2ZXIgZW5hYmxlcyBUcmFjZSBCdWZmZXIg RXh0ZW5zaW9uIChUUkJFKSBhcyBhIHBlci1jcHUgY29yZXNpZ2h0Cj4+ICsgKiBzaW5rIGRldmlj ZSBjb3VsZCB0aGVuIHBhaXIgd2l0aCBhbiBhcHByb3ByaWF0ZSBwZXItY3B1IGNvcmVzaWdodCBz b3VyY2UKPj4gKyAqIGRldmljZSAoRVRFKSB0aHVzIGdlbmVyYXRpbmcgcmVxdWlyZWQgdHJhY2Ug ZGF0YS4gVHJhY2UgY2FuIGJlIGVuYWJsZWQKPj4gKyAqIHZpYSB0aGUgcGVyZiBmcmFtZXdvcmsu Cj4+ICsgKgo+PiArICogQ29weXJpZ2h0IChDKSAyMDIwIEFSTSBMdGQuCj4+ICsgKgo+PiArICog QXV0aG9yOiBBbnNodW1hbiBLaGFuZHVhbCA8YW5zaHVtYW4ua2hhbmR1YWxAYXJtLmNvbT4KPj4g KyAqLwo+PiArI2RlZmluZSBEUlZOQU1FICJhcm1fdHJiZSIKPj4gKwo+PiArI2RlZmluZSBwcl9m bXQoZm10KSBEUlZOQU1FICI6ICIgZm10Cj4+ICsKPj4gKyNpbmNsdWRlICJjb3Jlc2lnaHQtdHJi ZS5oIgo+PiArCj4+ICsjZGVmaW5lIFBFUkZfSURYMk9GRihpZHgsIGJ1ZikgKChpZHgpICUgKChi dWYpLT5ucl9wYWdlcyA8PCBQQUdFX1NISUZUKSkKPj4gKwo+PiArLyoKPj4gKyAqIEEgcGFkZGlu ZyBwYWNrZXQgdGhhdCB3aWxsIGhlbHAgdGhlIHVzZXIgc3BhY2UgdG9vbHMKPj4gKyAqIGluIHNr aXBwaW5nIHJlbGV2YW50IHNlY3Rpb25zIGluIHRoZSBjYXB0dXJlZCB0cmFjZQo+PiArICogZGF0 YSB3aGljaCBjb3VsZCBub3QgYmUgZGVjb2RlZC4gVFJCRSBkb2Vzbid0IHN1cHBvcnQKPj4gKyAq IGZvcm1hdHRpbmcgdGhlIHRyYWNlIGRhdGEsIHVubGlrZSB0aGUgbGVnYWN5IENvcmVTaWdodAo+ PiArICogc2lua3MgYW5kIHRodXMgd2UgdXNlIEVURSB0cmFjZSBwYWNrZXRzIHRvIHBhZCB0aGUK Pj4gKyAqIHNlY3Rpb25zIG9mIHRoZSBidWZmZXIuCj4+ICsgKi8KPj4gKyNkZWZpbmUgRVRFX0lH Tk9SRV9QQUNLRVTCoMKgwqDCoMKgwqDCoMKgIDB4NzAKPj4gKwo+PiArLyoKPj4gKyAqIE1pbmlt dW0gYW1vdW50IG9mIG1lYW5pbmdmdWwgdHJhY2Ugd2lsbCBjb250YWluOgo+PiArICogQS1TeW5j LCBUcmFjZSBJbmZvLCBUcmFjZSBPbiwgQWRkcmVzcywgQXRvbS4KPj4gKyAqIFRoaXMgaXMgYWJv dXQgNDRieXRlcyBvZiBFVEUgdHJhY2UuIFRvIGJlIG9uCj4+ICsgKiB0aGUgc2FmZXIgc2lkZSwg d2UgYXNzdW1lIDY0Ynl0ZXMgaXMgdGhlIG1pbmltdW0KPj4gKyAqIHNwYWNlIHJlcXVpcmVkIGZv ciBhIG1lYW5pbmdmdWwgc2Vzc2lvbiwgYmVmb3JlCj4+ICsgKiB3ZSBoaXQgYSAiV1JBUCIgZXZl bnQuCj4+ICsgKi8KPj4gKyNkZWZpbmUgVFJCRV9UUkFDRV9NSU5fQlVGX1NJWkXCoMKgwqDCoMKg wqDCoCA2NAo+PiArCj4+ICtlbnVtIHRyYmVfZmF1bHRfYWN0aW9uIHsKPj4gK8KgwqDCoCBUUkJF X0ZBVUxUX0FDVF9XUkFQLAo+PiArwqDCoMKgIFRSQkVfRkFVTFRfQUNUX1NQVVJJT1VTLAo+PiAr wqDCoMKgIFRSQkVfRkFVTFRfQUNUX0ZBVEFMLAo+PiArfTsKPj4gKwo+PiArc3RydWN0IHRyYmVf YnVmIHsKPj4gK8KgwqDCoCB1bnNpZ25lZCBsb25nIHRyYmVfYmFzZTsKPj4gK8KgwqDCoCB1bnNp Z25lZCBsb25nIHRyYmVfbGltaXQ7Cj4+ICvCoMKgwqAgdW5zaWduZWQgbG9uZyB0cmJlX3dyaXRl Owo+PiArwqDCoMKgIGludCBucl9wYWdlczsKPj4gK8KgwqDCoCB2b2lkICoqcGFnZXM7Cj4+ICvC oMKgwqAgYm9vbCBzbmFwc2hvdDsKPj4gK8KgwqDCoCBzdHJ1Y3QgdHJiZV9jcHVkYXRhICpjcHVk YXRhOwo+PiArfTsKPj4gKwo+PiArc3RydWN0IHRyYmVfY3B1ZGF0YSB7Cj4+ICvCoMKgwqAgYm9v bCB0cmJlX2RibTsKPj4gK8KgwqDCoCB1NjQgdHJiZV9hbGlnbjsKPj4gK8KgwqDCoCBpbnQgY3B1 Owo+PiArwqDCoMKgIGVudW0gY3NfbW9kZSBtb2RlOwo+PiArwqDCoMKgIHN0cnVjdCB0cmJlX2J1 ZiAqYnVmOwo+PiArwqDCoMKgIHN0cnVjdCB0cmJlX2RydmRhdGEgKmRydmRhdGE7Cj4+ICt9Owo+ PiArCj4+ICtzdHJ1Y3QgdHJiZV9kcnZkYXRhIHsKPj4gK8KgwqDCoCBzdHJ1Y3QgdHJiZV9jcHVk YXRhIF9fcGVyY3B1ICpjcHVkYXRhOwo+PiArwqDCoMKgIHN0cnVjdCBwZXJmX291dHB1dF9oYW5k bGUgX19wZXJjcHUgKipoYW5kbGU7Cj4+ICvCoMKgwqAgc3RydWN0IGhsaXN0X25vZGUgaG90cGx1 Z19ub2RlOwo+PiArwqDCoMKgIGludCBpcnE7Cj4+ICvCoMKgwqAgY3B1bWFza190IHN1cHBvcnRl ZF9jcHVzOwo+PiArwqDCoMKgIGVudW0gY3B1aHBfc3RhdGUgdHJiZV9vbmxpbmU7Cj4+ICvCoMKg wqAgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBp bnQgdHJiZV9hbGxvY19ub2RlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKPj4gK3sKPj4gK8Kg wqDCoCBpZiAoZXZlbnQtPmNwdSA9PSAtMSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBOVU1B X05PX05PREU7Cj4+ICvCoMKgwqAgcmV0dXJuIGNwdV90b19ub2RlKGV2ZW50LT5jcHUpOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgdm9pZCB0cmJlX2RyYWluX2J1ZmZlcih2b2lkKQo+PiArewo+PiAr wqDCoMKgIGFzbShUU0JfQ1NZTkMpOwo+PiArwqDCoMKgIGRzYihuc2gpOwo+PiArfQo+PiArCj4+ ICtzdGF0aWMgdm9pZCB0cmJlX2RyYWluX2FuZF9kaXNhYmxlX2xvY2FsKHZvaWQpCj4+ICt7Cj4+ ICvCoMKgwqAgdHJiZV9kcmFpbl9idWZmZXIoKTsKPj4gK8KgwqDCoCB3cml0ZV9zeXNyZWdfcygw LCBTWVNfVFJCTElNSVRSX0VMMSk7Cj4+ICvCoMKgwqAgaXNiKCk7Cj4+ICt9Cj4+ICsKPj4gK3N0 YXRpYyB2b2lkIHRyYmVfcmVzZXRfbG9jYWwodm9pZCkKPj4gK3sKPj4gK8KgwqDCoCB0cmJlX2Ry YWluX2FuZF9kaXNhYmxlX2xvY2FsKCk7Cj4+ICvCoMKgwqAgd3JpdGVfc3lzcmVnX3MoMCwgU1lT X1RSQlBUUl9FTDEpOwo+PiArwqDCoMKgIHdyaXRlX3N5c3JlZ19zKDAsIFNZU19UUkJCQVNFUl9F TDEpOwo+PiArwqDCoMKgIHdyaXRlX3N5c3JlZ19zKDAsIFNZU19UUkJTUl9FTDEpOwo+PiArfQo+ PiArCj4+ICtzdGF0aWMgdm9pZCB0cmJlX3N0b3BfYW5kX3RydW5jYXRlX2V2ZW50KHN0cnVjdCBw ZXJmX291dHB1dF9oYW5kbGUgKmhhbmRsZSkKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgdHJiZV9i dWYgKmJ1ZiA9IGV0bV9wZXJmX3NpbmtfY29uZmlnKGhhbmRsZSk7Cj4+ICsKPj4gK8KgwqDCoCAv Kgo+PiArwqDCoMKgwqAgKiBXZSBjYW5ub3QgcHJvY2VlZCB3aXRoIHRoZSBidWZmZXIgY29sbGVj dGlvbiBhbmQgd2UKPj4gK8KgwqDCoMKgICogZG8gbm90IGhhdmUgYW55IGRhdGEgZm9yIHRoZSBj dXJyZW50IHNlc3Npb24uIFRoZQo+PiArwqDCoMKgwqAgKiBldG1fcGVyZiBkcml2ZXIgZXhwZWN0 cyB0byBjbG9zZSBvdXQgdGhlIGF1eF9idWZmZXIKPj4gK8KgwqDCoMKgICogYXQgZXZlbnRfc3Rv cCgpLiBTbyBkaXNhYmxlIHRoZSBUUkJFIGhlcmUgYW5kIGxlYXZlCj4+ICvCoMKgwqDCoCAqIHRo ZSB1cGRhdGVfYnVmZmVyKCkgdG8gcmV0dXJuIGEgMCBzaXplLgo+PiArwqDCoMKgwqAgKi8KPj4g K8KgwqDCoCB0cmJlX2RyYWluX2FuZF9kaXNhYmxlX2xvY2FsKCk7Cj4+ICvCoMKgwqAgcGVyZl9h dXhfb3V0cHV0X2ZsYWcoaGFuZGxlLCBQRVJGX0FVWF9GTEFHX1RSVU5DQVRFRCk7Cj4+ICvCoMKg wqAgKnRoaXNfY3B1X3B0cihidWYtPmNwdWRhdGEtPmRydmRhdGEtPmhhbmRsZSkgPSBOVUxMOwo+ PiArfQo+PiArCj4+ICsvKgo+PiArICogVFJCRSBCdWZmZXIgTWFuYWdlbWVudAo+PiArICoKPj4g KyAqIFRoZSBUUkJFIGJ1ZmZlciBzcGFucyBmcm9tIHRoZSBiYXNlIHBvaW50ZXIgdGlsbCB0aGUg bGltaXQgcG9pbnRlci4gV2hlbiBlbmFibGVkLAo+PiArICogaXQgc3RhcnRzIHdyaXRpbmcgdHJh Y2UgZGF0YSBmcm9tIHRoZSB3cml0ZSBwb2ludGVyIG9ud2FyZCB0aWxsIHRoZSBsaW1pdCBwb2lu dGVyLgo+PiArICogV2hlbiB0aGUgd3JpdGUgcG9pbnRlciByZWFjaGVzIHRoZSBhZGRyZXNzIGp1 c3QgYmVmb3JlIHRoZSBsaW1pdCBwb2ludGVyLCBpdCBnZXRzCj4+ICsgKiB3cmFwcGVkIGFyb3Vu ZCBhZ2FpbiB0byB0aGUgYmFzZSBwb2ludGVyLiBUaGlzIGlzIGNhbGxlZCBhIFRSQkUgd3JhcCBl dmVudCwgd2hpY2gKPj4gKyAqIGdlbmVyYXRlcyBhIG1haW50ZW5hbmNlIGludGVycnVwdCB3aGVu IG9wZXJhdGVkIGluIFdSQVAgb3IgRklMTCBtb2RlLiBUaGlzIGRyaXZlcgo+PiArICogdXNlcyBG SUxMIG1vZGUsIHdoZXJlIHRoZSBUUkJFIHN0b3BzIHRoZSB0cmFjZSBjb2xsZWN0aW9uIGF0IHdy YXAgZXZlbnQuIFRoZSBJUlEKPj4gKyAqIGhhbmRsZXIgdXBkYXRlcyB0aGUgQVVYIGJ1ZmZlciBh bmQgcmUtZW5hYmxlcyB0aGUgVFJCRSB3aXRoIHVwZGF0ZWQgV1JJVEUgYW5kCj4+ICsgKiBMSU1J VCBwb2ludGVycy4KPj4gKyAqCj4+ICsgKsKgwqDCoCBXcmFwIGFyb3VuZCB3aXRoIGFuIElSUQo+ PiArICrCoMKgwqAgLS0tLS0tIDwgLS0tLS0tIDwgLS0tLS0tLSA8IC0tLS0tIDwgLS0tLS0KPj4g KyAqwqDCoMKgIHzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8Cj4+ICsg KsKgwqDCoCAtLS0tLS0gPiAtLS0tLS0gPiAtLS0tLS0tID4gLS0tLS0gPiAtLS0tLQo+PiArICoK Pj4gKyAqwqDCoMKgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCj4+ ICsgKsKgwqDCoCB8wqDCoMKgwqDCoMKgwqAgfMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfAo+PiAr ICrCoMKgwqAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKPj4gKyAq wqDCoMKgIEJhc2UgUG9pbnRlcsKgwqDCoCBXcml0ZSBQb2ludGVywqDCoMKgwqDCoMKgwqAgTGlt aXQgUG9pbnRlcgo+PiArICoKPj4gKyAqIFRoZSBiYXNlIGFuZCBsaW1pdCBwb2ludGVycyBhbHdh eXMgbmVlZHMgdG8gYmUgUEFHRV9TSVpFIGFsaWduZWQuIEJ1dCB0aGUgd3JpdGUKPj4gKyAqIHBv aW50ZXIgY2FuIGJlIGFsaWduZWQgdG8gdGhlIGltcGxlbWVudGF0aW9uIGRlZmluZWQgVFJCRSB0 cmFjZSBidWZmZXIgYWxpZ25tZW50Cj4+ICsgKiBhcyBjYXB0dXJlZCBpbiB0cmJlX2NwdWRhdGEt PnRyYmVfYWxpZ24uCj4+ICsgKgo+PiArICoKPj4gKyAqwqDCoMKgwqDCoMKgwqAgaGVhZMKgwqDC oMKgwqDCoMKgIHRhaWzCoMKgwqDCoMKgwqDCoCB3YWtldXAKPj4gKyAqwqDCoMKgICstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0gfiB+IC0tLS0tLQo+PiArICrC oMKgwqAgfCQkJCQkJCR8IyMjIyMjIyMjIyMjIyMjI3wkJCQkJCQkJCQkJCQkJHzCoMKgwqDCoMKg wqDCoCB8Cj4+ICsgKsKgwqDCoCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tIH4gfiAtLS0tLS0KPj4gKyAqwqDCoMKgIEJhc2UgUG9pbnRlcsKgwqDCoCBXcml0 ZSBQb2ludGVywqDCoMKgwqDCoMKgwqAgTGltaXQgUG9pbnRlcgo+PiArICoKPj4gKyAqIFRoZSBw ZXJmX291dHB1dF9oYW5kbGUgaW5kaWNlcyAoaGVhZCwgdGFpbCwgd2FrZXVwKSBhcmUgbW9ub3Rv bmljYWxseSBpbmNyZWFzaW5nCj4+ICsgKiB2YWx1ZXMgd2hpY2ggdHJhY2tzIGFsbCB0aGUgZHJp dmVyIHdyaXRlcyBhbmQgdXNlciByZWFkcyBmcm9tIHRoZSBwZXJmIGF1eGlsaWFyeQo+PiArICog YnVmZmVyLiBHZW5lcmFsbHkgW2hlYWQuLnRhaWxdIGlzIHRoZSBhcmVhIHdoZXJlIHRoZSBkcml2 ZXIgY2FuIHdyaXRlIGludG8gdW5sZXNzCj4+ICsgKiB0aGUgd2FrZXVwIGlzIGJlaGluZCB0aGUg dGFpbC4gRW5hYmxlZCBUUkJFIGJ1ZmZlciBzcGFuIG5lZWRzIHRvIGJlIGFkanVzdGVkIGFuZAo+ PiArICogY29uZmlndXJlZCBkZXBlbmRpbmcgb24gdGhlIHBlcmZfb3V0cHV0X2hhbmRsZSBpbmRp Y2VzLCBzbyB0aGF0IHRoZSBkcml2ZXIgZG9lcwo+PiArICogbm90IG92ZXJyaWRlIGludG8gYXJl YXMgaW4gdGhlIHBlcmYgYXV4aWxpYXJ5IGJ1ZmZlciB3aGljaCBpcyBiZWluZyBvciB5ZXQgdG8g YmUKPj4gKyAqIGNvbnN1bWVkIGZyb20gdGhlIHVzZXIgc3BhY2UuIFRoZSBlbmFibGVkIFRSQkUg YnVmZmVyIGFyZWEgaXMgYSBtb3Zpbmcgc3Vic2V0IG9mCj4+ICsgKiB0aGUgYWxsb2NhdGVkIHBl cmYgYXV4aWxpYXJ5IGJ1ZmZlci4KPj4gKyAqLwo+PiArc3RhdGljIHZvaWQgdHJiZV9wYWRfYnVm KHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgKmhhbmRsZSwgaW50IGxlbikKPj4gK3sKPj4gK8Kg wqDCoCBzdHJ1Y3QgdHJiZV9idWYgKmJ1ZiA9IGV0bV9wZXJmX3NpbmtfY29uZmlnKGhhbmRsZSk7 Cj4+ICvCoMKgwqAgdTY0IGhlYWQgPSBQRVJGX0lEWDJPRkYoaGFuZGxlLT5oZWFkLCBidWYpOwo+ PiArCj4+ICvCoMKgwqAgbWVtc2V0KCh2b2lkICopYnVmLT50cmJlX2Jhc2UgKyBoZWFkLCBFVEVf SUdOT1JFX1BBQ0tFVCwgbGVuKTsKPj4gK8KgwqDCoCBpZiAoIWJ1Zi0+c25hcHNob3QpCj4+ICvC oMKgwqDCoMKgwqDCoCBwZXJmX2F1eF9vdXRwdXRfc2tpcChoYW5kbGUsIGxlbik7Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIHRyYmVfc25hcHNob3Rfb2Zmc2V0KHN0cnVjdCBw ZXJmX291dHB1dF9oYW5kbGUgKmhhbmRsZSkKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgdHJiZV9i dWYgKmJ1ZiA9IGV0bV9wZXJmX3NpbmtfY29uZmlnKGhhbmRsZSk7Cj4+ICsKPj4gK8KgwqDCoCAv Kgo+PiArwqDCoMKgwqAgKiBUaGUgRVRFIHRyYWNlIGhhcyBhbGlnbm1lbnQgc3luY2hyb25pemF0 aW9uIHBhY2tldHMgYWxsb3dpbmcKPj4gK8KgwqDCoMKgICogdGhlIGRlY29kZXIgdG8gcmVzZXQg aW4gY2FzZSBvZiBhbiBvdmVyZmxvdyBvciBjb3JydXB0aW9uLgo+PiArwqDCoMKgwqAgKiBTbyB3 ZSBjYW4gdXNlIHRoZSBlbnRpcmUgYnVmZmVyIGZvciB0aGUgc25hcHNob3QgbW9kZS4KPj4gK8Kg wqDCoMKgICovCj4+ICvCoMKgwqAgcmV0dXJuIGJ1Zi0+bnJfcGFnZXMgKiBQQUdFX1NJWkU7Cj4+ ICt9Cj4+ICsKPj4gKy8qCj4+ICsgKiBUUkJFIExpbWl0IENhbGN1bGF0aW9uCj4+ICsgKgo+PiAr ICogVGhlIGZvbGxvd2luZyBtYXJrZXJzIGFyZSB1c2VkIHRvIGlsbHVzdHJhdGUgdmFyaW91cyBU UkJFIGJ1ZmZlciBzaXR1YXRpb25zLgo+PiArICoKPj4gKyAqICQkJCQgLSBEYXRhIGFyZWEsIHVu Y29uc3VtZWQgY2FwdHVyZWQgdHJhY2UgZGF0YSwgbm90IHRvIGJlIG92ZXJyaWRkZW4KPj4gKyAq ICMjIyMgLSBGcmVlIGFyZWEsIGVuYWJsZWQsIHRyYWNlIHdpbGwgYmUgd3JpdHRlbgo+PiArICog JSUlJSAtIEZyZWUgYXJlYSwgZGlzYWJsZWQsIHRyYWNlIHdpbGwgbm90IGJlIHdyaXR0ZW4KPj4g KyAqID09PT0gLSBGcmVlIGFyZWEsIHBhZGRlZCB3aXRoIEVURV9JR05PUkVfUEFDS0VULCB0cmFj ZSB3aWxsIGJlIHNraXBwZWQKPj4gKyAqLwo+PiArc3RhdGljIHVuc2lnbmVkIGxvbmcgX190cmJl X25vcm1hbF9vZmZzZXQoc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSAqaGFuZGxlKQo+PiArewo+ PiArwqDCoMKgIHN0cnVjdCB0cmJlX2J1ZiAqYnVmID0gZXRtX3BlcmZfc2lua19jb25maWcoaGFu ZGxlKTsKPj4gK8KgwqDCoCBzdHJ1Y3QgdHJiZV9jcHVkYXRhICpjcHVkYXRhID0gYnVmLT5jcHVk YXRhOwo+PiArwqDCoMKgIGNvbnN0IHU2NCBidWZzaXplID0gYnVmLT5ucl9wYWdlcyAqIFBBR0Vf U0laRTsKPj4gK8KgwqDCoCB1NjQgbGltaXQgPSBidWZzaXplOwo+PiArwqDCoMKgIHU2NCBoZWFk LCB0YWlsLCB3YWtldXA7Cj4+ICsKPj4gK8KgwqDCoCBoZWFkID0gUEVSRl9JRFgyT0ZGKGhhbmRs ZS0+aGVhZCwgYnVmKTsKPj4gKwo+PiArwqDCoMKgIC8qCj4+ICvCoMKgwqDCoCAqwqDCoMKgwqDC oMKgwqAgaGVhZAo+PiArwqDCoMKgwqAgKsKgwqDCoCAtLS0tLS0tPnwKPj4gK8KgwqDCoMKgICrC oMKgwqAgfAo+PiArwqDCoMKgwqAgKsKgwqDCoCBoZWFkwqDCoMKgIFRSQkUgYWxpZ27CoMKgwqAg dGFpbAo+PiArwqDCoMKgwqAgKiArLS0tLXwtLS0tLS0tfC0tLS0tLS0tLS0tLS0tLXwtLS0tLS0t Kwo+PiArwqDCoMKgwqAgKiB8JCQkJHw9PT09PT09fCMjIyMjIyMjIyMjIyMjI3wkJCQkJCQkfAo+ PiArwqDCoMKgwqAgKiArLS0tLXwtLS0tLS0tfC0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tKwo+PiAr wqDCoMKgwqAgKiB0cmJlX2Jhc2XCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdHJiZV9i YXNlICsgbnJfcGFnZXMKPj4gK8KgwqDCoMKgICoKPj4gK8KgwqDCoMKgICogUGVyZiBhdXggYnVm ZmVyIG91dHB1dCBoZWFkIHBvc2l0aW9uIGNhbiBiZSBtaXNhbGlnbmVkIGRlcGVuZGluZyBvbgo+ PiArwqDCoMKgwqAgKiB2YXJpb3VzIGZhY3RvcnMgaW5jbHVkaW5nIHVzZXIgc3BhY2UgcmVhZHMu IEluIGNhc2UgbWlzYWxpZ25lZCwgaGVhZAo+PiArwqDCoMKgwqAgKiBuZWVkcyB0byBiZSBhbGln bmVkIGJlZm9yZSBUUkJFIGNhbiBiZSBjb25maWd1cmVkLiBQYWQgdGhlIGFsaWdubWVudAo+PiAr wqDCoMKgwqAgKiBnYXAgd2l0aCBFVEVfSUdOT1JFX1BBQ0tFVCBieXRlcyB0aGF0IHdpbGwgYmUg aWdub3JlZCBieSB1c2VyIHRvb2xzCj4+ICvCoMKgwqDCoCAqIGFuZCBza2lwIHRoaXMgc2VjdGlv biB0aHVzIGFkdmFuY2luZyB0aGUgaGVhZC4KPj4gK8KgwqDCoMKgICovCj4+ICvCoMKgwqAgaWYg KCFJU19BTElHTkVEKGhlYWQsIGNwdWRhdGEtPnRyYmVfYWxpZ24pKSB7Cj4+ICvCoMKgwqDCoMKg wqDCoCB1bnNpZ25lZCBsb25nIGRlbHRhID0gcm91bmR1cChoZWFkLCBjcHVkYXRhLT50cmJlX2Fs aWduKSAtIGhlYWQ7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGRlbHRhID0gbWluKGRlbHRhLCBo YW5kbGUtPnNpemUpOwo+PiArwqDCoMKgwqDCoMKgwqAgdHJiZV9wYWRfYnVmKGhhbmRsZSwgZGVs dGEpOwo+PiArwqDCoMKgwqDCoMKgwqAgaGVhZCA9IFBFUkZfSURYMk9GRihoYW5kbGUtPmhlYWQs IGJ1Zik7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgLyoKPj4gK8KgwqDCoMKgICrCoMKg wqAgaGVhZCA9IHRhaWwgKHNpemUgPSAwKQo+PiArwqDCoMKgwqAgKiArLS0tLXwtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKwo+PiArwqDCoMKgwqAgKiB8JCQkJHwkJCQkJCQkJCQkJCQk JCQkJCQkJCQkJCQkJCQkJCTCoMKgwqAgfAo+PiArwqDCoMKgwqAgKiArLS0tLXwtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKwo+PiArwqDCoMKgwqAgKiB0cmJlX2Jhc2XCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgdHJiZV9iYXNlICsgbnJfcGFnZXMKPj4gK8KgwqDCoMKgICoK Pj4gK8KgwqDCoMKgICogUGVyZiBhdXggYnVmZmVyIGRvZXMgbm90IGhhdmUgYW55IHNwYWNlIGZv ciB0aGUgZHJpdmVyIHRvIHdyaXRlIGludG8uCj4+ICvCoMKgwqDCoCAqIEp1c3QgY29tbXVuaWNh dGUgdHJhY2UgdHJ1bmNhdGlvbiBldmVudCB0byB0aGUgdXNlciBzcGFjZSBieSBtYXJraW5nCj4+ ICvCoMKgwqDCoCAqIGl0IHdpdGggUEVSRl9BVVhfRkxBR19UUlVOQ0FURUQuCj4+ICvCoMKgwqDC oCAqLwo+PiArwqDCoMKgIGlmICghaGFuZGxlLT5zaXplKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBw ZXJmX2F1eF9vdXRwdXRfZmxhZyhoYW5kbGUsIFBFUkZfQVVYX0ZMQUdfVFJVTkNBVEVEKTsKPj4g K8KgwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIC8q IENvbXB1dGUgdGhlIHRhaWwgYW5kIHdha2V1cCBpbmRpY2VzIG5vdyB0aGF0IHdlJ3ZlIGFsaWdu ZWQgaGVhZCAqLwo+PiArwqDCoMKgIHRhaWwgPSBQRVJGX0lEWDJPRkYoaGFuZGxlLT5oZWFkICsg aGFuZGxlLT5zaXplLCBidWYpOwo+PiArwqDCoMKgIHdha2V1cCA9IFBFUkZfSURYMk9GRihoYW5k bGUtPndha2V1cCwgYnVmKTsKPj4gKwo+PiArwqDCoMKgIC8qCj4+ICvCoMKgwqDCoCAqIExldHMg Y2FsY3VsYXRlIHRoZSBidWZmZXIgYXJlYSB3aGljaCBUUkJFIGNvdWxkIHdyaXRlIGludG8uIFRo ZXJlCj4+ICvCoMKgwqDCoCAqIGFyZSB0aHJlZSBwb3NzaWJsZSBzY2VuYXJpb3MgaGVyZS4gTGlt aXQgbmVlZHMgdG8gYmUgYWxpZ25lZCB3aXRoCj4+ICvCoMKgwqDCoCAqIFBBR0VfU0laRSBwZXIg dGhlIFRSQkUgcmVxdWlyZW1lbnQuIEFsd2F5cyBhdm9pZCBjbG9iYmVyaW5nIHRoZQo+PiArwqDC oMKgwqAgKiB1bmNvbnN1bWVkIGRhdGEuCj4+ICvCoMKgwqDCoCAqCj4+ICvCoMKgwqDCoCAqIDEp IGhlYWQgPCB0YWlsCj4+ICvCoMKgwqDCoCAqCj4+ICvCoMKgwqDCoCAqwqDCoMKgIGhlYWTCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHRhaWwKPj4gK8KgwqDCoMKgICogKy0tLS18LS0tLS0tLS0tLS0t LS0tLS0tLS0tLS18LS0tLS0tLSsKPj4gK8KgwqDCoMKgICogfCQkJCR8IyMjIyMjIyMjIyMjIyMj IyMjIyMjIyN8JCQkJCQkJHwKPj4gK8KgwqDCoMKgICogKy0tLS18LS0tLS0tLS0tLS0tLS0tLS0t LS0tLS18LS0tLS0tLSsKPj4gK8KgwqDCoMKgICogdHJiZV9iYXNlwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBsaW1pdMKgwqDCoCB0cmJlX2Jhc2UgKyBucl9wYWdlcwo+PiArwqDCoMKgwqAgKgo+PiAr wqDCoMKgwqAgKiBUUkJFIGNvdWxkIHdyaXRlIGludG8gW2hlYWQuLnRhaWxdIGFyZWEuIFVubGVz cyB0aGUgdGFpbCBpcyByaWdodCBhdAo+PiArwqDCoMKgwqAgKiB0aGUgZW5kIG9mIHRoZSBidWZm ZXIsIG5laXRoZXIgYW4gd3JhcCBhcm91bmQgbm9yIGFuIElSUSBpcyBleHBlY3RlZAo+PiArwqDC oMKgwqAgKiB3aGlsZSBiZWluZyBlbmFibGVkLgo+PiArwqDCoMKgwqAgKgo+PiArwqDCoMKgwqAg KiAyKSBoZWFkID09IHRhaWwKPj4gK8KgwqDCoMKgICoKPj4gK8KgwqDCoMKgICrCoMKgwqAgaGVh ZCA9IHRhaWwgKHNpemUgPiAwKQo+PiArwqDCoMKgwqAgKiArLS0tLXwtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKwo+PiArwqDCoMKgwqAgKiB8JSUlJXwjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjfAo+PiArwqDCoMKgwqAgKiArLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKwo+PiArwqDCoMKgwqAgKiB0cmJlX2Jhc2XCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgbGltaXQgPSB0cmJlX2Jhc2UgKyBucl9wYWdlcwo+PiArwqDCoMKgwqAgKgo+PiAr wqDCoMKgwqAgKiBUUkJFIHNob3VsZCBqdXN0IHdyaXRlIGludG8gW2hlYWQuLmJhc2UgKyBucl9w YWdlc10gYXJlYSBldmVuIHRob3VnaAo+PiArwqDCoMKgwqAgKiB0aGUgZW50aXJlIGJ1ZmZlciBp cyBlbXB0eS4gUmVhc29uIGJlaW5nLCB3aGVuIHRoZSB0cmFjZSByZWFjaGVzIHRoZQo+PiArwqDC oMKgwqAgKiBlbmQgb2YgdGhlIGJ1ZmZlciwgaXQgd2lsbCBqdXN0IHdyYXAgYXJvdW5kIHdpdGgg YW4gSVJRIGdpdmluZyBhbgo+PiArwqDCoMKgwqAgKiBvcHBvcnR1bml0eSB0byByZWNvbmZpZ3Vy ZSB0aGUgYnVmZmVyLgo+PiArwqDCoMKgwqAgKgo+PiArwqDCoMKgwqAgKiAzKSB0YWlsIDwgaGVh ZAo+PiArwqDCoMKgwqAgKgo+PiArwqDCoMKgwqAgKsKgwqDCoCB0YWlswqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBoZWFkCj4+ICvCoMKgwqDCoCAqICstLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t fC0tLS0tLS0rCj4+ICvCoMKgwqDCoCAqIHwlJSUlfCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkfCMj IyMjIyN8Cj4+ICvCoMKgwqDCoCAqICstLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0t LS0rCj4+ICvCoMKgwqDCoCAqIHRyYmVfYmFzZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBsaW1pdCA9IHRyYmVfYmFzZSArIG5yX3BhZ2VzCj4+ICvCoMKgwqDCoCAqCj4+ICvCoMKgwqDC oCAqIFRSQkUgc2hvdWxkIGp1c3Qgd3JpdGUgaW50byBbaGVhZC4uYmFzZSArIG5yX3BhZ2VzXSBh cmVhIGV2ZW4gdGhvdWdoCj4+ICvCoMKgwqDCoCAqIHRoZSBbdHJiZV9iYXNlLi50YWlsXSBpcyBh bHNvIGVtcHR5LiBSZWFzb24gYmVpbmcsIHdoZW4gdGhlIHRyYWNlCj4+ICvCoMKgwqDCoCAqIHJl YWNoZXMgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLCBpdCB3aWxsIGp1c3Qgd3JhcCBhcm91bmQgd2l0 aCBhbiBJUlEKPj4gK8KgwqDCoMKgICogZ2l2aW5nIGFuIG9wcG9ydHVuaXR5IHRvIHJlY29uZmln dXJlIHRoZSBidWZmZXIuCj4+ICvCoMKgwqDCoCAqLwo+PiArwqDCoMKgIGlmIChoZWFkIDwgdGFp bCkKPj4gK8KgwqDCoMKgwqDCoMKgIGxpbWl0ID0gcm91bmRfZG93bih0YWlsLCBQQUdFX1NJWkUp Owo+PiArCj4+ICvCoMKgwqAgLyoKPj4gK8KgwqDCoMKgICogV2FrZXVwIG1heSBiZSBhcmJpdHJh cmlseSBmYXIgaW50byB0aGUgZnV0dXJlLiBJZiBpdCdzIG5vdCBpbiB0aGUKPj4gK8KgwqDCoMKg ICogY3VycmVudCBnZW5lcmF0aW9uLCBlaXRoZXIgd2UnbGwgd3JhcCBiZWZvcmUgaGl0dGluZyBp dCwgb3IgaXQncwo+PiArwqDCoMKgwqAgKiBpbiB0aGUgcGFzdCBhbmQgaGFzIGJlZW4gaGFuZGxl ZCBhbHJlYWR5Lgo+PiArwqDCoMKgwqAgKgo+PiArwqDCoMKgwqAgKiBJZiB0aGVyZSdzIGEgd2Fr ZXVwIGJlZm9yZSB3ZSB3cmFwLCBhcnJhbmdlIHRvIGJlIHdva2VuIHVwIGJ5IHRoZQo+PiArwqDC oMKgwqAgKiBwYWdlIGJvdW5kYXJ5IGZvbGxvd2luZyBpdC4gS2VlcCB0aGUgdGFpbCBib3VuZGFy eSBpZiB0aGF0J3MgbG93ZXIuCj4+ICvCoMKgwqDCoCAqCj4+ICvCoMKgwqDCoCAqwqDCoMKgIGhl YWTCoMKgwqDCoMKgwqDCoCB3YWtldXDCoMKgwqAgdGFpbAo+PiArwqDCoMKgwqAgKiArLS0tLXwt LS0tLS0tLS0tLS0tLS18LS0tLS0tLXwtLS0tLS0tKwo+PiArwqDCoMKgwqAgKiB8JCQkJHwjIyMj IyMjIyMjIyMjIyN8JSUlJSUlJXwkJCQkJCQkfAo+PiArwqDCoMKgwqAgKiArLS0tLXwtLS0tLS0t LS0tLS0tLS18LS0tLS0tLXwtLS0tLS0tKwo+PiArwqDCoMKgwqAgKiB0cmJlX2Jhc2XCoMKgwqDC oMKgwqDCoCBsaW1pdMKgwqDCoMKgwqDCoMKgIHRyYmVfYmFzZSArIG5yX3BhZ2VzCj4+ICvCoMKg wqDCoCAqLwo+PiArwqDCoMKgIGlmIChoYW5kbGUtPndha2V1cCA8IChoYW5kbGUtPmhlYWQgKyBo YW5kbGUtPnNpemUpICYmIGhlYWQgPD0gd2FrZXVwKQo+PiArwqDCoMKgwqDCoMKgwqAgbGltaXQg PSBtaW4obGltaXQsIHJvdW5kX3VwKHdha2V1cCwgUEFHRV9TSVpFKSk7Cj4+ICsKPj4gK8KgwqDC oCAvKgo+PiArwqDCoMKgwqAgKiBUaGVyZSBhcmUgdHdvIHNpdHVhdGlvbiB3aGVuIHRoaXMgY2Fu IGhhcHBlbiBpLmUgbGltaXQgaXMgYmVmb3JlCj4+ICvCoMKgwqDCoCAqIHRoZSBoZWFkIGFuZCBo ZW5jZSBUUkJFIGNhbm5vdCBiZSBjb25maWd1cmVkLgo+PiArwqDCoMKgwqAgKgo+PiArwqDCoMKg wqAgKiAxKSBoZWFkIDwgdGFpbCAoYWxpZ25lZCBkb3duIHdpdGggUEFHRV9TSVpFKSBhbmQgYWxz byB0aGV5IGFyZSBib3RoCj4+ICvCoMKgwqDCoCAqIHdpdGhpbiB0aGUgc2FtZSBQQUdFIHNpemUg cmFuZ2UuCj4+ICvCoMKgwqDCoCAqCj4+ICvCoMKgwqDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBQQUdFX1NJWkUKPj4gK8KgwqDCoMKgICrCoMKgwqDCoMKgwqDCoCB8LS0tLS0tLS0tLS0tLS0t LS0tLS0tLXwKPj4gK8KgwqDCoMKgICoKPj4gK8KgwqDCoMKgICrCoMKgwqDCoMKgwqDCoCBsaW1p dMKgwqDCoCBoZWFkwqDCoMKgIHRhaWwKPj4gK8KgwqDCoMKgICogKy0tLS0tLS0tLS0tLXwtLS0t LS18LS0tLS0tLS18LS0tLS0tLSsKPj4gK8KgwqDCoMKgICogfCQkJCQkJCQkJCQkJCQkJCQkJCR8 PT09PT09PT18JCQkJCQkJHwKPj4gK8KgwqDCoMKgICogKy0tLS0tLS0tLS0tLXwtLS0tLS18LS0t LS0tLS18LS0tLS0tLSsKPj4gK8KgwqDCoMKgICogdHJiZV9iYXNlwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHRyYmVfYmFzZSArIG5yX3BhZ2VzCj4+ICvCoMKgwqDCoCAqCj4+ICvCoMKg wqDCoCAqIDIpIGhlYWQgPCB3YWtldXAgKGFsaWduZWQgdXAgd2l0aCBQQUdFX1NJWkUpIDwgdGFp bCBhbmQgYWxzbyBib3RoCj4+ICvCoMKgwqDCoCAqIGhlYWQgYW5kIHdha2V1cCBhcmUgd2l0aGlu IHNhbWUgUEFHRSBzaXplIHJhbmdlLgo+PiArwqDCoMKgwqAgKgo+PiArwqDCoMKgwqAgKsKgwqDC oMKgwqDCoMKgIFBBR0VfU0laRQo+PiArwqDCoMKgwqAgKsKgwqDCoCB8LS0tLS0tLS0tLS0tLS0t LS0tLS0tLXwKPj4gK8KgwqDCoMKgICoKPj4gK8KgwqDCoMKgICrCoMKgwqAgbGltaXTCoMKgwqAg aGVhZMKgwqDCoCB3YWtldXDCoCB0YWlsCj4+ICvCoMKgwqDCoCAqICstLS0tfC0tLS0tLXwtLS0t LS0tfC0tLS0tLS0tfC0tLS0tLS0rCj4+ICvCoMKgwqDCoCAqIHwkJCQkJCQkJCQkJHw9PT09PT09 fD09PT09PT09fCQkJCQkJCR8Cj4+ICvCoMKgwqDCoCAqICstLS0tfC0tLS0tLXwtLS0tLS0tfC0t LS0tLS0tfC0tLS0tLS0rCj4+ICvCoMKgwqDCoCAqIHRyYmVfYmFzZcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB0cmJlX2Jhc2UgKyBucl9wYWdlcwo+PiArwqDCoMKgwqAgKi8KPj4gK8Kg wqDCoCBpZiAobGltaXQgPiBoZWFkKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGxpbWl0Owo+ PiArCj4+ICvCoMKgwqAgdHJiZV9wYWRfYnVmKGhhbmRsZSwgaGFuZGxlLT5zaXplKTsKPj4gK8Kg wqDCoCBwZXJmX2F1eF9vdXRwdXRfZmxhZyhoYW5kbGUsIFBFUkZfQVVYX0ZMQUdfVFJVTkNBVEVE KTsKPj4gK8KgwqDCoCByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHVuc2lnbmVkIGxv bmcgdHJiZV9ub3JtYWxfb2Zmc2V0KHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgKmhhbmRsZSkK Pj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgdHJiZV9idWYgKmJ1ZiA9IHBlcmZfZ2V0X2F1eChoYW5k bGUpOwo+PiArwqDCoMKgIHU2NCBsaW1pdCA9IF9fdHJiZV9ub3JtYWxfb2Zmc2V0KGhhbmRsZSk7 Cj4+ICvCoMKgwqAgdTY0IGhlYWQgPSBQRVJGX0lEWDJPRkYoaGFuZGxlLT5oZWFkLCBidWYpOwo+ PiArCj4+ICvCoMKgwqAgLyoKPj4gK8KgwqDCoMKgICogSWYgdGhlIGhlYWQgaXMgdG9vIGNsb3Nl IHRvIHRoZSBsaW1pdCBhbmQgd2UgZG9uJ3QKPj4gK8KgwqDCoMKgICogaGF2ZSBzcGFjZSBmb3Ig YSBtZWFuaW5nZnVsIHJ1biwgd2UgcmF0aGVyIHBhZCBpdAo+PiArwqDCoMKgwqAgKiBhbmQgc3Rh cnQgZnJlc2guCj4+ICvCoMKgwqDCoCAqLwo+PiArwqDCoMKgIGlmIChsaW1pdCAmJiAobGltaXQg LSBoZWFkIDwgVFJCRV9UUkFDRV9NSU5fQlVGX1NJWkUpKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCB0 cmJlX3BhZF9idWYoaGFuZGxlLCBsaW1pdCAtIGhlYWQpOwo+PiArwqDCoMKgwqDCoMKgwqAgbGlt aXQgPSBfX3RyYmVfbm9ybWFsX29mZnNldChoYW5kbGUpOwo+PiArwqDCoMKgIH0KPj4gK8KgwqDC oCByZXR1cm4gbGltaXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNvbXB1 dGVfdHJiZV9idWZmZXJfbGltaXQoc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSAqaGFuZGxlKQo+ PiArewo+PiArwqDCoMKgIHN0cnVjdCB0cmJlX2J1ZiAqYnVmID0gZXRtX3BlcmZfc2lua19jb25m aWcoaGFuZGxlKTsKPj4gK8KgwqDCoCB1bnNpZ25lZCBsb25nIG9mZnNldDsKPj4gKwo+PiArwqDC oMKgIGlmIChidWYtPnNuYXBzaG90KQo+PiArwqDCoMKgwqDCoMKgwqAgb2Zmc2V0ID0gdHJiZV9z bmFwc2hvdF9vZmZzZXQoaGFuZGxlKTsKPj4gK8KgwqDCoCBlbHNlCj4+ICvCoMKgwqDCoMKgwqDC oCBvZmZzZXQgPSB0cmJlX25vcm1hbF9vZmZzZXQoaGFuZGxlKTsKPj4gK8KgwqDCoCByZXR1cm4g YnVmLT50cmJlX2Jhc2UgKyBvZmZzZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGNscl90 cmJlX3N0YXR1cyh2b2lkKQo+PiArewo+PiArwqDCoMKgIHU2NCB0cmJzciA9IHJlYWRfc3lzcmVn X3MoU1lTX1RSQlNSX0VMMSk7Cj4+ICsKPj4gK8KgwqDCoCBXQVJOX09OKGlzX3RyYmVfZW5hYmxl ZCgpKTsKPj4gK8KgwqDCoCB0cmJzciAmPSB+VFJCU1JfSVJROwo+PiArwqDCoMKgIHRyYnNyICY9 IH5UUkJTUl9UUkc7Cj4+ICvCoMKgwqAgdHJic3IgJj0gflRSQlNSX1dSQVA7Cj4+ICvCoMKgwqAg dHJic3IgJj0gfihUUkJTUl9FQ19NQVNLIDw8IFRSQlNSX0VDX1NISUZUKTsKPj4gK8KgwqDCoCB0 cmJzciAmPSB+KFRSQlNSX0JTQ19NQVNLIDw8IFRSQlNSX0JTQ19TSElGVCk7Cj4+ICvCoMKgwqAg dHJic3IgJj0gflRSQlNSX1NUT1A7Cj4+ICvCoMKgwqAgd3JpdGVfc3lzcmVnX3ModHJic3IsIFNZ U19UUkJTUl9FTDEpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBzZXRfdHJiZV9saW1pdF9w b2ludGVyX2VuYWJsZWQodW5zaWduZWQgbG9uZyBhZGRyKQo+PiArewo+PiArwqDCoMKgIHU2NCB0 cmJsaW1pdHIgPSByZWFkX3N5c3JlZ19zKFNZU19UUkJMSU1JVFJfRUwxKTsKPj4gKwo+PiArwqDC oMKgIFdBUk5fT04oIUlTX0FMSUdORUQoYWRkciwgKDFVTCA8PCBUUkJMSU1JVFJfTElNSVRfU0hJ RlQpKSk7Cj4+ICvCoMKgwqAgV0FSTl9PTighSVNfQUxJR05FRChhZGRyLCBQQUdFX1NJWkUpKTsK Pj4gKwo+PiArwqDCoMKgIHRyYmxpbWl0ciAmPSB+VFJCTElNSVRSX05WTTsKPj4gK8KgwqDCoCB0 cmJsaW1pdHIgJj0gfihUUkJMSU1JVFJfRklMTF9NT0RFX01BU0sgPDwgVFJCTElNSVRSX0ZJTExf TU9ERV9TSElGVCk7Cj4+ICvCoMKgwqAgdHJibGltaXRyICY9IH4oVFJCTElNSVRSX1RSSUdfTU9E RV9NQVNLIDw8IFRSQkxJTUlUUl9UUklHX01PREVfU0hJRlQpOwo+PiArwqDCoMKgIHRyYmxpbWl0 ciAmPSB+KFRSQkxJTUlUUl9MSU1JVF9NQVNLIDw8IFRSQkxJTUlUUl9MSU1JVF9TSElGVCk7Cj4+ ICsKPj4gK8KgwqDCoCAvKgo+PiArwqDCoMKgwqAgKiBGaWxsIHRyYWNlIGJ1ZmZlciBtb2RlIGlz IHVzZWQgaGVyZSB3aGlsZSBjb25maWd1cmluZyB0aGUKPj4gK8KgwqDCoMKgICogVFJCRSBmb3Ig dHJhY2UgY2FwdHVyZS4gSW4gdGhpcyBwYXJ0aWN1bGFyIG1vZGUsIHRoZSB0cmFjZQo+PiArwqDC oMKgwqAgKiBjb2xsZWN0aW9uIGlzIHN0b3BwZWQgYW5kIGEgbWFpbnRlbmFuY2UgaW50ZXJydXB0 IGlzIHJhaXNlZAo+PiArwqDCoMKgwqAgKiB3aGVuIHRoZSBjdXJyZW50IHdyaXRlIHBvaW50ZXIg d3JhcHMuIFRoaXMgcGF1c2UgaW4gdHJhY2UKPj4gK8KgwqDCoMKgICogY29sbGVjdGlvbiBnaXZl cyB0aGUgc29mdHdhcmUgYW4gb3Bwb3J0dW5pdHkgdG8gY2FwdHVyZSB0aGUKPj4gK8KgwqDCoMKg ICogdHJhY2UgZGF0YSBpbiB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIGJlZm9yZSByZWNvbmZpZ3Vy aW5nCj4+ICvCoMKgwqDCoCAqIHRoZSBUUkJFLgo+PiArwqDCoMKgwqAgKi8KPj4gK8KgwqDCoCB0 cmJsaW1pdHIgfD0gKFRSQkVfRklMTF9NT0RFX0ZJTEwgJiBUUkJMSU1JVFJfRklMTF9NT0RFX01B U0spIDw8IFRSQkxJTUlUUl9GSUxMX01PREVfU0hJRlQ7Cj4+ICsKPj4gK8KgwqDCoCAvKgo+PiAr wqDCoMKgwqAgKiBUcmlnZ2VyIG1vZGUgaXMgbm90IHVzZWQgaGVyZSB3aGlsZSBjb25maWd1cmlu ZyB0aGUgVFJCRSBmb3IKPj4gK8KgwqDCoMKgICogdGhlIHRyYWNlIGNhcHR1cmUuIEhlbmNlIGp1 c3Qga2VlcCB0aGlzIGluIHRoZSBpZ25vcmUgbW9kZS4KPj4gK8KgwqDCoMKgICovCj4+ICvCoMKg wqAgdHJibGltaXRyIHw9IChUUkJFX1RSSUdfTU9ERV9JR05PUkUgJiBUUkJMSU1JVFJfVFJJR19N T0RFX01BU0spIDw8IFRSQkxJTUlUUl9UUklHX01PREVfU0hJRlQ7Cj4+ICvCoMKgwqAgdHJibGlt aXRyIHw9IChhZGRyICYgUEFHRV9NQVNLKTsKPj4gKwo+PiArwqDCoMKgIHRyYmxpbWl0ciB8PSBU UkJMSU1JVFJfRU5BQkxFOwo+PiArwqDCoMKgIHdyaXRlX3N5c3JlZ19zKHRyYmxpbWl0ciwgU1lT X1RSQkxJTUlUUl9FTDEpOwoKPiBQZXJzb25hbGx5LCBJIHByZWZlciB0aGUgaXNiKCkgaGVyZSBy YXRoZXIgdGhhbiBhdCB0aGUgY2FsbGVyIHNpdGUsIHRvIG1ha2Ugc3VyZQo+IGl0IGlzIGFsbCBj b250YWluZWQgaGVyZSBhbmQgbW9yZSBpbXBvcnRhbnRseSB3ZSBkb24ndCBleGVjdXRlIGFueSBv dGhlciBpbnN0cnVjdGlvbgo+IGJlZm9yZSB0aGUgImlzYigpIiBhcyB0aGUgdHJhY2luZyBtYXkg YmUgZW5hYmxlZCBmb3IgdGhlIGtlcm5lbC4KClN1cmUsIHdpbGwgbW92ZSB0aGUgaXNiKCkgaGVy ZSBhbG9uZyB3aXRoIGl0cyBjb21tZW50LgoKPiAKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQg dHJiZV9lbmFibGVfaHcoc3RydWN0IHRyYmVfYnVmICpidWYpCj4+ICt7Cj4+ICvCoMKgwqAgV0FS Tl9PTihidWYtPnRyYmVfd3JpdGUgPCBidWYtPnRyYmVfYmFzZSk7ID4gK8KgwqDCoCBXQVJOX09O KGJ1Zi0+dHJiZV93cml0ZSA+PSBidWYtPnRyYmVfbGltaXQpOwo+PiArwqDCoMKgIHNldF90cmJl X2Rpc2FibGVkKCk7Cj4+ICvCoMKgwqAgaXNiKCk7Cj4+ICvCoMKgwqAgY2xyX3RyYmVfc3RhdHVz KCk7Cj4+ICvCoMKgwqAgc2V0X3RyYmVfYmFzZV9wb2ludGVyKGJ1Zi0+dHJiZV9iYXNlKTsKPj4g K8KgwqDCoCBzZXRfdHJiZV93cml0ZV9wb2ludGVyKGJ1Zi0+dHJiZV93cml0ZSk7Cj4+ICsKPj4g K8KgwqDCoCAvKgo+PiArwqDCoMKgwqAgKiBTeW5jaHJvbml6ZSBhbGwgdGhlIHJlZ2lzdGVyIHVw ZGF0ZXMKPj4gK8KgwqDCoMKgICogdGlsbCBub3cgYmVmb3JlIGVuYWJsaW5nIHRoZSBUUkJFLgo+ PiArwqDCoMKgwqAgKi8KPj4gK8KgwqDCoCBpc2IoKTsKPj4gK8KgwqDCoCBzZXRfdHJiZV9saW1p dF9wb2ludGVyX2VuYWJsZWQoYnVmLT50cmJlX2xpbWl0KTsKPj4gKwo+PiArwqDCoMKgIC8qIFN5 bmNocm9uaXplIHRoZSBUUkJFIGVuYWJsZSBldmVudCAqLwo+PiArwqDCoMKgIGlzYigpOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgdm9pZCAqYXJtX3RyYmVfYWxsb2NfYnVmZmVyKHN0cnVjdCBjb3Jl c2lnaHRfZGV2aWNlICpjc2RldiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHZvaWQgKipwYWdlcywKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQgbnJfcGFnZXMsIGJvb2wgc25hcHNob3Qp Cj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IHRyYmVfYnVmICpidWY7Cj4+ICvCoMKgwqAgc3RydWN0 IHBhZ2UgKipwZ2xpc3Q7Cj4+ICvCoMKgwqAgaW50IGk7Cj4+ICsKPj4gK8KgwqDCoCAvKgo+PiAr wqDCoMKgwqAgKiBUUkJFIExJTUlUIGFuZCBUUkJFIFdSSVRFIHBvaW50ZXJzIG11c3QgYmUgcGFn ZSBhbGlnbmVkLiBCdXQgd2l0aAo+PiArwqDCoMKgwqAgKiBqdXN0IGEgc2luZ2xlIHBhZ2UsIHRo ZXJlIGlzIG5vdCBtdWNoIHJvb20gbGVmdCB3aGlsZSB3cml0aW5nIGludG8KPj4gK8KgwqDCoMKg ICogYSBwYXJ0aWFsbHkgZmlsbGVkIFRSQkUgYnVmZmVyLiBIZW5jZSByZXN0cmljdCB0aGUgbWlu aW11bSBidWZmZXIKPj4gK8KgwqDCoMKgICogc2l6ZSBhcyB0d28gcGFnZXMuCj4+ICvCoMKgwqDC oCAqLwo+PiArwqDCoMKgIGlmIChucl9wYWdlcyA8IDIpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1 cm4gTlVMTDsKPj4gKwo+PiArwqDCoMKgIGJ1ZiA9IGt6YWxsb2Nfbm9kZShzaXplb2YoKmJ1Ziks IEdGUF9LRVJORUwsIHRyYmVfYWxsb2Nfbm9kZShldmVudCkpOwo+PiArwqDCoMKgIGlmIChJU19F UlIoYnVmKSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+PiAr Cj4+ICvCoMKgwqAgcGdsaXN0ID0ga2NhbGxvYyhucl9wYWdlcywgc2l6ZW9mKCpwZ2xpc3QpLCBH RlBfS0VSTkVMKTsKPj4gK8KgwqDCoCBpZiAoSVNfRVJSKHBnbGlzdCkpIHsKPj4gK8KgwqDCoMKg wqDCoMKgIGtmcmVlKGJ1Zik7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gRVJSX1BUUigtRU5P TUVNKTsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBmb3IgKGkgPSAwOyBpIDwgbnJfcGFn ZXM7IGkrKykKPj4gK8KgwqDCoMKgwqDCoMKgIHBnbGlzdFtpXSA9IHZpcnRfdG9fcGFnZShwYWdl c1tpXSk7Cj4+ICsKPj4gK8KgwqDCoCBidWYtPnRyYmVfYmFzZSA9ICh1bnNpZ25lZCBsb25nKSB2 bWFwKHBnbGlzdCwgbnJfcGFnZXMsIFZNX01BUCwgUEFHRV9LRVJORUwpOwo+IAo+IG1pbm9yIG5p dDogc3BhY2UgYWZ0ZXIgY2FzdGluZy4KCldpbGwgZHJvcCB0aGUgc3BhY2UuCgo+IAo+PiArwqDC oMKgIGlmIChJU19FUlIoKHZvaWQgKilidWYtPnRyYmVfYmFzZSkpIHsKPj4gK8KgwqDCoMKgwqDC oMKgIGtmcmVlKHBnbGlzdCk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBrZnJlZShidWYpOwo+PiArwqDC oMKgwqDCoMKgwqAgcmV0dXJuIEVSUl9QVFIoYnVmLT50cmJlX2Jhc2UpOwo+PiArwqDCoMKgIH0K Pj4gK8KgwqDCoCBidWYtPnRyYmVfbGltaXQgPSBidWYtPnRyYmVfYmFzZSArIG5yX3BhZ2VzICog UEFHRV9TSVpFOwo+PiArwqDCoMKgIGJ1Zi0+dHJiZV93cml0ZSA9IGJ1Zi0+dHJiZV9iYXNlOwo+ PiArwqDCoMKgIGJ1Zi0+c25hcHNob3QgPSBzbmFwc2hvdDsKPj4gK8KgwqDCoCBidWYtPm5yX3Bh Z2VzID0gbnJfcGFnZXM7Cj4+ICvCoMKgwqAgYnVmLT5wYWdlcyA9IHBhZ2VzOwo+PiArwqDCoMKg IGtmcmVlKHBnbGlzdCk7Cj4+ICvCoMKgwqAgcmV0dXJuIGJ1ZjsKPj4gK30KPj4gKwo+PiArdm9p ZCBhcm1fdHJiZV9mcmVlX2J1ZmZlcih2b2lkICpjb25maWcpCj4+ICt7Cj4+ICvCoMKgwqAgc3Ry dWN0IHRyYmVfYnVmICpidWYgPSBjb25maWc7Cj4+ICsKPj4gK8KgwqDCoCB2dW5tYXAoKHZvaWQg KilidWYtPnRyYmVfYmFzZSk7Cj4+ICvCoMKgwqAga2ZyZWUoYnVmKTsKPj4gK30KPj4gKwo+PiAr c3RhdGljIHVuc2lnbmVkIGxvbmcgYXJtX3RyYmVfdXBkYXRlX2J1ZmZlcihzdHJ1Y3QgY29yZXNp Z2h0X2RldmljZSAqY3NkZXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgKmhhbmRsZSwKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdm9pZCAqY29uZmlnKQo+ PiArewo+PiArwqDCoMKgIHN0cnVjdCB0cmJlX2RydmRhdGEgKmRydmRhdGEgPSBkZXZfZ2V0X2Ry dmRhdGEoY3NkZXYtPmRldi5wYXJlbnQpOwo+PiArwqDCoMKgIHN0cnVjdCB0cmJlX2NwdWRhdGEg KmNwdWRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoJmNzZGV2LT5kZXYpOwo+PiArwqDCoMKgIHN0cnVj dCB0cmJlX2J1ZiAqYnVmID0gY29uZmlnOwo+PiArwqDCoMKgIHVuc2lnbmVkIGxvbmcgc2l6ZSwg b2Zmc2V0Owo+PiArCj4+ICvCoMKgwqAgV0FSTl9PTihidWYtPmNwdWRhdGEgIT0gY3B1ZGF0YSk7 Cj4+ICvCoMKgwqAgV0FSTl9PTihjcHVkYXRhLT5jcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKTsK Pj4gK8KgwqDCoCBXQVJOX09OKGNwdWRhdGEtPmRydmRhdGEgIT0gZHJ2ZGF0YSk7Cj4+ICvCoMKg wqAgaWYgKGNwdWRhdGEtPm1vZGUgIT0gQ1NfTU9ERV9QRVJGKQo+PiArwqDCoMKgwqDCoMKgwqAg cmV0dXJuIC1FSU5WQUw7Cj4gCj4gUGxlYXNlIHJldHVybiAwIGhlcmUuIEFzIHdlIGFyZSBleHBl Y3RlZCB0byBwYXNzIGFuICJ1bnNpZ25lZCIgc2l6ZS4KClN1cmUsIHdpbGwgZG8uCgo+IAo+PiAr Cj4+ICvCoMKgwqAgLyoKPj4gK8KgwqDCoMKgICogSWYgdGhlIFRSQkUgd2FzIGRpc2FibGVkIGR1 ZSB0byBsYWNrIG9mIHNwYWNlIGluIHRoZSBBVVggYnVmZmVyIG9yIGEKPj4gK8KgwqDCoMKgICog c3B1cmlvdXMgZmF1bHQsIHRoZSBkcml2ZXIgbGVhdmVzIGl0IGRpc2FibGVkLCB0cnVuY2F0aW5n IHRoZSBidWZmZXIuCj4+ICvCoMKgwqDCoCAqIFNpbmNlIHRoZSBldG1fcGVyZiBkcml2ZXIgZXhw ZWN0cyB0byBjbG9zZSBvdXQgdGhlIEFVWCBidWZmZXIsIHRoZQo+PiArwqDCoMKgwqAgKiBkcml2 ZXIgc2tpcHMgaXQuIFRodXMsIGp1c3QgcGFzcyBpbiAwIHNpemUgaGVyZSB0byBpbmRpY2F0ZSB0 aGF0IHRoZQo+PiArwqDCoMKgwqAgKiBidWZmZXIgd2FzIHRydW5jYXRlZC4KPj4gK8KgwqDCoMKg ICovCj4+ICvCoMKgwqAgaWYgKCFpc190cmJlX2VuYWJsZWQoKSkKPj4gK8KgwqDCoMKgwqDCoMKg IHJldHVybiAwOwo+PiArwqDCoMKgIC8qCj4+ICvCoMKgwqDCoCAqIHBlcmYgaGFuZGxlIHN0cnVj dHVyZSBuZWVkcyB0byBiZSBzaGFyZWQgd2l0aCB0aGUgVFJCRSBJUlEgaGFuZGxlciBmb3IKPj4g K8KgwqDCoMKgICogY2FwdHVyaW5nIHRyYWNlIGRhdGEgYW5kIHJlc3RhcnRpbmcgdGhlIGhhbmRs ZS4gVGhlcmUgaXMgYSBwcm9iYWJpbGl0eQo+PiArwqDCoMKgwqAgKiBvZiBhbiB1bmRlZmluZWQg cmVmZXJlbmNlIGJhc2VkIGNyYXNoIHdoZW4gZXRtIGV2ZW50IGlzIGJlaW5nIHN0b3BwZWQKPj4g K8KgwqDCoMKgICogd2hpbGUgYSBUUkJFIElSUSBhbHNvIGdldHRpbmcgcHJvY2Vzc2VkLiBUaGlz IGhhcHBlbnMgZHVlIHRoZSByZWxlYXNlCj4+ICvCoMKgwqDCoCAqIG9mIHBlcmYgaGFuZGxlIHZp YSBwZXJmX2F1eF9vdXRwdXRfZW5kKCkgaW4gZXRtX2V2ZW50X3N0b3AoKS4gU3RvcHBpbmcKPj4g K8KgwqDCoMKgICogdGhlIFRSQkUgaGVyZSB3aWxsIGVuc3VyZSB0aGF0IG5vIElSUSBjb3VsZCBi ZSBnZW5lcmF0ZWQgd2hlbiB0aGUgcGVyZgo+PiArwqDCoMKgwqAgKiBoYW5kbGUgZ2V0cyBmcmVl ZCBpbiBldG1fZXZlbnRfc3RvcCgpLgo+PiArwqDCoMKgwqAgKi8KPj4gK8KgwqDCoCB0cmJlX2Ry YWluX2FuZF9kaXNhYmxlX2xvY2FsKCk7Cj4+ICvCoMKgwqAgb2Zmc2V0ID0gZ2V0X3RyYmVfd3Jp dGVfcG9pbnRlcigpIC0gZ2V0X3RyYmVfYmFzZV9wb2ludGVyKCk7Cj4+ICvCoMKgwqAgc2l6ZSA9 IG9mZnNldCAtIFBFUkZfSURYMk9GRihoYW5kbGUtPmhlYWQsIGJ1Zik7Cj4gCj4gSXQgbWF5IGJl IGEgZ29vZCBpZGVhIHRvIHZlcmlmeSB0aGF0IHRoZSBzaXplIGNvbXB1dGF0aW9uIGhlcmUgZG9l c24ndCBvdmVyZmxvdy4KPiBlLmcgYnJva2VuIGludGVycnVwdCBjb3VsZCBwb3RlbnRpYWxseSBs ZWF2ZSB1cyB3aXRoICJ3cml0ZSA9PSBiYXNlIi4gSSB1bmRlcnN0YW5kCj4gdGhpcyBpcyBhIGhh cmR3YXJlIGlzc3VlLCBidXQgdGhlIHNvZnR3YXJlIGNhbiBiZSByZXNpbGllbnQgdG8gbm90IHNl bmQgYm9ndXMKPiByZXN1bHRzLgoKT2theSwgd2lsbCBkbyB0aGUgbmVjZXNzYXJ5LgoKPiAKPj4g K8KgwqDCoCBpZiAoYnVmLT5zbmFwc2hvdCkKPj4gK8KgwqDCoMKgwqDCoMKgIGhhbmRsZS0+aGVh ZCArPSBzaXplOwo+PiArwqDCoMKgIHJldHVybiBzaXplOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg aW50IGFybV90cmJlX2VuYWJsZShzdHJ1Y3QgY29yZXNpZ2h0X2RldmljZSAqY3NkZXYsIHUzMiBt b2RlLCB2b2lkICpkYXRhKQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCB0cmJlX2RydmRhdGEgKmRy dmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoY3NkZXYtPmRldi5wYXJlbnQpOwo+PiArwqDCoMKgIHN0 cnVjdCB0cmJlX2NwdWRhdGEgKmNwdWRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoJmNzZGV2LT5kZXYp Owo+PiArwqDCoMKgIHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgKmhhbmRsZSA9IGRhdGE7Cj4+ ICvCoMKgwqAgc3RydWN0IHRyYmVfYnVmICpidWYgPSBldG1fcGVyZl9zaW5rX2NvbmZpZyhoYW5k bGUpOwo+PiArCj4+ICvCoMKgwqAgV0FSTl9PTihjcHVkYXRhLT5jcHUgIT0gc21wX3Byb2Nlc3Nv cl9pZCgpKTsKPj4gK8KgwqDCoCBXQVJOX09OKGNwdWRhdGEtPmRydmRhdGEgIT0gZHJ2ZGF0YSk7 Cj4+ICvCoMKgwqAgaWYgKG1vZGUgIT0gQ1NfTU9ERV9QRVJGKQo+PiArwqDCoMKgwqDCoMKgwqAg cmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gK8KgwqDCoCAqdGhpc19jcHVfcHRyKGRydmRhdGEtPmhh bmRsZSkgPSBoYW5kbGU7Cj4+ICvCoMKgwqAgY3B1ZGF0YS0+YnVmID0gYnVmOwo+PiArwqDCoMKg IGNwdWRhdGEtPm1vZGUgPSBtb2RlOwo+PiArwqDCoMKgIGJ1Zi0+Y3B1ZGF0YSA9IGNwdWRhdGE7 Cj4+ICvCoMKgwqAgYnVmLT50cmJlX2xpbWl0ID0gY29tcHV0ZV90cmJlX2J1ZmZlcl9saW1pdCho YW5kbGUpOwo+PiArwqDCoMKgIGJ1Zi0+dHJiZV93cml0ZSA9IGJ1Zi0+dHJiZV9iYXNlICsgUEVS Rl9JRFgyT0ZGKGhhbmRsZS0+aGVhZCwgYnVmKTsKPj4gK8KgwqDCoCBpZiAoYnVmLT50cmJlX2xp bWl0ID09IGJ1Zi0+dHJiZV9iYXNlKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCB0cmJlX3N0b3BfYW5k X3RydW5jYXRlX2V2ZW50KGhhbmRsZSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4g K8KgwqDCoCB9Cj4+ICvCoMKgwqAgdHJiZV9lbmFibGVfaHcoYnVmKTsKPj4gK8KgwqDCoCByZXR1 cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBhcm1fdHJiZV9kaXNhYmxlKHN0cnVjdCBj b3Jlc2lnaHRfZGV2aWNlICpjc2RldikKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgdHJiZV9kcnZk YXRhICpkcnZkYXRhID0gZGV2X2dldF9kcnZkYXRhKGNzZGV2LT5kZXYucGFyZW50KTsKPj4gK8Kg wqDCoCBzdHJ1Y3QgdHJiZV9jcHVkYXRhICpjcHVkYXRhID0gZGV2X2dldF9kcnZkYXRhKCZjc2Rl di0+ZGV2KTsKPj4gK8KgwqDCoCBzdHJ1Y3QgdHJiZV9idWYgKmJ1ZiA9IGNwdWRhdGEtPmJ1ZjsK Pj4gKwo+PiArwqDCoMKgIFdBUk5fT04oYnVmLT5jcHVkYXRhICE9IGNwdWRhdGEpOwo+PiArwqDC oMKgIFdBUk5fT04oY3B1ZGF0YS0+Y3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSk7Cj4+ICvCoMKg wqAgV0FSTl9PTihjcHVkYXRhLT5kcnZkYXRhICE9IGRydmRhdGEpOwo+PiArwqDCoMKgIGlmIChj cHVkYXRhLT5tb2RlICE9IENTX01PREVfUEVSRikKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAt RUlOVkFMOwo+PiArCj4+ICvCoMKgwqAgdHJiZV9kcmFpbl9hbmRfZGlzYWJsZV9sb2NhbCgpOwo+ PiArwqDCoMKgIGJ1Zi0+Y3B1ZGF0YSA9IE5VTEw7Cj4+ICvCoMKgwqAgY3B1ZGF0YS0+YnVmID0g TlVMTDsKPj4gK8KgwqDCoCBjcHVkYXRhLT5tb2RlID0gQ1NfTU9ERV9ESVNBQkxFRDsKPj4gK8Kg wqDCoCByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgdHJiZV9oYW5kbGVfc3B1 cmlvdXMoc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSAqaGFuZGxlKQo+PiArewo+PiArwqDCoMKg IHN0cnVjdCB0cmJlX2J1ZiAqYnVmID0gZXRtX3BlcmZfc2lua19jb25maWcoaGFuZGxlKTsKPj4g Kwo+PiArwqDCoMKgIGJ1Zi0+dHJiZV9saW1pdCA9IGNvbXB1dGVfdHJiZV9idWZmZXJfbGltaXQo aGFuZGxlKTsKPj4gK8KgwqDCoCBidWYtPnRyYmVfd3JpdGUgPSBidWYtPnRyYmVfYmFzZSArIFBF UkZfSURYMk9GRihoYW5kbGUtPmhlYWQsIGJ1Zik7Cj4+ICvCoMKgwqAgaWYgKGJ1Zi0+dHJiZV9s aW1pdCA9PSBidWYtPnRyYmVfYmFzZSkgewo+PiArwqDCoMKgwqDCoMKgwqAgdHJiZV9kcmFpbl9h bmRfZGlzYWJsZV9sb2NhbCgpOwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+PiArwqDCoMKg IH0KPj4gK8KgwqDCoCB0cmJlX2VuYWJsZV9odyhidWYpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg dm9pZCB0cmJlX2hhbmRsZV9vdmVyZmxvdyhzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5k bGUpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gaGFuZGxlLT5l dmVudDsKPj4gK8KgwqDCoCBzdHJ1Y3QgdHJiZV9idWYgKmJ1ZiA9IGV0bV9wZXJmX3NpbmtfY29u ZmlnKGhhbmRsZSk7Cj4+ICvCoMKgwqAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemU7Cj4+ICvC oMKgwqAgc3RydWN0IGV0bV9ldmVudF9kYXRhICpldmVudF9kYXRhOwo+PiArCj4+ICvCoMKgwqAg b2Zmc2V0ID0gZ2V0X3RyYmVfbGltaXRfcG9pbnRlcigpIC0gZ2V0X3RyYmVfYmFzZV9wb2ludGVy KCk7Cj4+ICvCoMKgwqAgc2l6ZSA9IG9mZnNldCAtIFBFUkZfSURYMk9GRihoYW5kbGUtPmhlYWQs IGJ1Zik7Cj4+ICvCoMKgwqAgaWYgKGJ1Zi0+c25hcHNob3QpCj4+ICvCoMKgwqDCoMKgwqDCoCBo YW5kbGUtPmhlYWQgPSBvZmZzZXQ7Cj4+ICvCoMKgwqAgcGVyZl9hdXhfb3V0cHV0X2VuZChoYW5k bGUsIHNpemUpOwo+PiArCj4+ICvCoMKgwqAgZXZlbnRfZGF0YSA9IHBlcmZfYXV4X291dHB1dF9i ZWdpbihoYW5kbGUsIGV2ZW50KTsKPj4gK8KgwqDCoCBpZiAoIWV2ZW50X2RhdGEpIHsKPiAKPiBX ZSBtYXkgYWRkIGEgY29tbWVudCBoZXJlIHRvIGV4cGxhaW4gaG93IHRoaXMgd291bGQgYmUgaGFu ZGxlZCA/IGUuZywKPiAKPiDCoMKgwqDCoMKgwqDCoCAvKgo+IMKgwqDCoMKgwqDCoMKgwqAgKiBX ZSBhcmUgdW5hYmxlIHRvIHJlc3RhcnQgdGhlIHRyYWNlIGNvbGxlY3Rpb24sCj4gwqDCoMKgwqDC oMKgwqDCoCAqIHRodXMgbGVhdmUgdGhlIFRSQkUgZGlzYWJsZWQuIFRoZSBldG0tcGVyZiBkcml2 ZXIKPiDCoMKgwqDCoMKgwqDCoMKgICogaXMgYWJsZSB0byBkZXRlY3QgdGhpcyB3aXRoIGEgZGlz Y29ubm5lY3RlZCBoYW5kbGUKPiDCoMKgwqDCoMKgwqDCoMKgICogKGhhbmRsZS0+ZXZlbnQgPSBO VUxMKS4KPiDCoMKgwqDCoMKgwqDCoMKgICovCgpTdXJlLCB3aWxsIGFkZCB0aGUgYWJvdmUuCgo+ IAo+PiArwqDCoMKgwqDCoMKgwqAgdHJiZV9kcmFpbl9hbmRfZGlzYWJsZV9sb2NhbCgpOwo+PiAr wqDCoMKgwqDCoMKgwqAgKnRoaXNfY3B1X3B0cihidWYtPmNwdWRhdGEtPmRydmRhdGEtPmhhbmRs ZSkgPSBOVUxMOwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+PiArwqDCoMKgIH0KPj4gK8Kg wqDCoCBidWYtPnRyYmVfbGltaXQgPSBjb21wdXRlX3RyYmVfYnVmZmVyX2xpbWl0KGhhbmRsZSk7 Cj4+ICvCoMKgwqAgYnVmLT50cmJlX3dyaXRlID0gYnVmLT50cmJlX2Jhc2UgKyBQRVJGX0lEWDJP RkYoaGFuZGxlLT5oZWFkLCBidWYpOwo+PiArwqDCoMKgIGlmIChidWYtPnRyYmVfbGltaXQgPT0g YnVmLT50cmJlX2Jhc2UpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIHRyYmVfc3RvcF9hbmRfdHJ1bmNh dGVfZXZlbnQoaGFuZGxlKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybjsKPj4gK8KgwqDCoCB9 Cj4+ICvCoMKgwqAgKnRoaXNfY3B1X3B0cihidWYtPmNwdWRhdGEtPmRydmRhdGEtPmhhbmRsZSkg PSBoYW5kbGU7Cj4+ICvCoMKgwqAgdHJiZV9lbmFibGVfaHcoYnVmKTsKPj4gK30KPj4gKwo+PiAr c3RhdGljIGJvb2wgaXNfcGVyZl90cmJlKHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgKmhhbmRs ZSkKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgdHJiZV9idWYgKmJ1ZiA9IGV0bV9wZXJmX3Npbmtf Y29uZmlnKGhhbmRsZSk7Cj4+ICvCoMKgwqAgc3RydWN0IHRyYmVfY3B1ZGF0YSAqY3B1ZGF0YSA9 IGJ1Zi0+Y3B1ZGF0YTsKPj4gK8KgwqDCoCBzdHJ1Y3QgdHJiZV9kcnZkYXRhICpkcnZkYXRhID0g Y3B1ZGF0YS0+ZHJ2ZGF0YTsKPj4gK8KgwqDCoCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgp Owo+PiArCj4+ICvCoMKgwqAgV0FSTl9PTihidWYtPnRyYmVfYmFzZSAhPSBnZXRfdHJiZV9iYXNl X3BvaW50ZXIoKSk7Cj4+ICvCoMKgwqAgV0FSTl9PTihidWYtPnRyYmVfbGltaXQgIT0gZ2V0X3Ry YmVfbGltaXRfcG9pbnRlcigpKTsKPj4gKwo+PiArwqDCoMKgIGlmIChjcHVkYXRhLT5tb2RlICE9 IENTX01PREVfUEVSRikKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBmYWxzZTsKPj4gKwo+PiAr wqDCoMKgIGlmIChjcHVkYXRhLT5jcHUgIT0gY3B1KQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJu IGZhbHNlOwo+PiArCj4+ICvCoMKgwqAgaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgJmRydmRh dGEtPnN1cHBvcnRlZF9jcHVzKSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBmYWxzZTsKPj4g Kwo+PiArwqDCoMKgIHJldHVybiB0cnVlOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgZW51bSB0cmJl X2ZhdWx0X2FjdGlvbiB0cmJlX2dldF9mYXVsdF9hY3Qoc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRs ZSAqaGFuZGxlKQo+PiArewo+PiArwqDCoMKgIHU2NCB0cmJzciA9IHJlYWRfc3lzcmVnX3MoU1lT X1RSQlNSX0VMMSk7Cj4+ICvCoMKgwqAgaW50IGVjID0gZ2V0X3RyYmVfZWModHJic3IpOwo+PiAr wqDCoMKgIGludCBic2MgPSBnZXRfdHJiZV9ic2ModHJic3IpOwo+PiArCj4+ICvCoMKgwqAgV0FS Tl9PTihpc190cmJlX3J1bm5pbmcodHJic3IpKTsKPj4gK8KgwqDCoCBpZiAoaXNfdHJiZV90cmco dHJic3IpIHx8IGlzX3RyYmVfYWJvcnQodHJic3IpKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJu IFRSQkVfRkFVTFRfQUNUX0ZBVEFMOwo+PiArCj4+ICvCoMKgwqAgaWYgKChlYyA9PSBUUkJFX0VD X1NUQUdFMV9BQk9SVCkgfHwgKGVjID09IFRSQkVfRUNfU1RBR0UyX0FCT1JUKSkKPj4gK8KgwqDC oMKgwqDCoMKgIHJldHVybiBUUkJFX0ZBVUxUX0FDVF9GQVRBTDsKPj4gKwo+PiArwqDCoMKgIGlm IChpc190cmJlX3dyYXAodHJic3IpICYmIChlYyA9PSBUUkJFX0VDX09USEVSUykgJiYgKGJzYyA9 PSBUUkJFX0JTQ19GSUxMRUQpKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoZ2V0X3RyYmVfd3Jp dGVfcG9pbnRlcigpID09IGdldF90cmJlX2Jhc2VfcG9pbnRlcigpKQo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCByZXR1cm4gVFJCRV9GQVVMVF9BQ1RfV1JBUDsKPj4gK8KgwqDCoCB9Cj4+ICvC oMKgwqAgcmV0dXJuIFRSQkVfRkFVTFRfQUNUX1NQVVJJT1VTOwo+PiArfQo+PiArCj4+ICtzdGF0 aWMgaXJxcmV0dXJuX3QgYXJtX3RyYmVfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2KQo+ PiArewo+PiArwqDCoMKgIHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgKipoYW5kbGVfcHRyID0g ZGV2Owo+PiArwqDCoMKgIHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgKmhhbmRsZSA9ICpoYW5k bGVfcHRyOwo+PiArwqDCoMKgIGVudW0gdHJiZV9mYXVsdF9hY3Rpb24gYWN0Owo+PiArCj4+ICvC oMKgwqAgV0FSTl9PTighaXNfdHJiZV9pcnEocmVhZF9zeXNyZWdfcyhTWVNfVFJCU1JfRUwxKSkp Owo+PiArwqDCoMKgIGNscl90cmJlX2lycSgpOwo+PiArCj4+ICvCoMKgwqAgLyoKPj4gK8KgwqDC oMKgICogRW5zdXJlIHRoZSB0cmFjZSBpcyB2aXNpYmxlIHRvIHRoZSBDUFVzIGFuZAo+PiArwqDC oMKgwqAgKiBhbnkgZXh0ZXJuYWwgYWJvcnRzIGhhdmUgYmVlbiByZXNvbHZlZC4KPj4gK8KgwqDC oMKgICovCj4+ICvCoMKgwqAgdHJiZV9kcmFpbl9idWZmZXIoKTsKPj4gK8KgwqDCoCBpc2IoKTsK Pj4gKwo+PiArwqDCoMKgIGlmICghcGVyZl9nZXRfYXV4KGhhbmRsZSkpCj4gCj4gV2UgbWF5IHdh bnQgdG8gZW5zdXJlIHRoYXQgaGFuZGxlIGlzIG5vdCBOVUxMLCB3aGljaCBjYW4gb25seSBoYXBw ZW4gaWYgdGhlCj4gaGFyZHdhcmUgaXMgbm90IGZvbGxvd2luZyB0aGUgc29mdHdhcmUuCj4gCj4g wqDCoMKgwqBpZiAoV0FSTl9PTl9PTkNFKCFoYW5kbGUpIHx8ICFwZXJmX2dldF9hdXgoaGFuZGxl KSkKCk9rYXksIHdpbGwgZG8gdGhlIGNoYW5nZS4KCj4gCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1 cm4gSVJRX05PTkU7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoIWlzX3BlcmZfdHJiZShoYW5kbGUpKQo+ PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIElSUV9OT05FOwo+PiArCj4+ICvCoMKgwqAgaXJxX3dv cmtfcnVuKCk7Cj4+ICsKPj4gK8KgwqDCoCBhY3QgPSB0cmJlX2dldF9mYXVsdF9hY3QoaGFuZGxl KTsKPj4gK8KgwqDCoCBzd2l0Y2ggKGFjdCkgewo+PiArwqDCoMKgIGNhc2UgVFJCRV9GQVVMVF9B Q1RfV1JBUDoKPj4gK8KgwqDCoMKgwqDCoMKgIHRyYmVfaGFuZGxlX292ZXJmbG93KGhhbmRsZSk7 Cj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gK8KgwqDCoCBjYXNlIFRSQkVfRkFVTFRfQUNU X1NQVVJJT1VTOgo+PiArwqDCoMKgwqDCoMKgwqAgdHJiZV9oYW5kbGVfc3B1cmlvdXMoaGFuZGxl KTsKPj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDCoMKgIGNhc2UgVFJCRV9GQVVMVF9B Q1RfRkFUQUw6Cj4+ICvCoMKgwqDCoMKgwqDCoCB0cmJlX3N0b3BfYW5kX3RydW5jYXRlX2V2ZW50 KGhhbmRsZSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gK8KgwqDCoCB9Cj4+ICvCoMKg wqAgcmV0dXJuIElSUV9IQU5ETEVEOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IGNvcmVzaWdodF9vcHNfc2luayBhcm1fdHJiZV9zaW5rX29wcyA9IHsKPj4gK8KgwqDCoCAuZW5h YmxlwqDCoMKgwqDCoMKgwqAgPSBhcm1fdHJiZV9lbmFibGUsCj4+ICvCoMKgwqAgLmRpc2FibGXC oMKgwqAgPSBhcm1fdHJiZV9kaXNhYmxlLAo+PiArwqDCoMKgIC5hbGxvY19idWZmZXLCoMKgwqAg PSBhcm1fdHJiZV9hbGxvY19idWZmZXIsCj4+ICvCoMKgwqAgLmZyZWVfYnVmZmVywqDCoMKgID0g YXJtX3RyYmVfZnJlZV9idWZmZXIsCj4+ICvCoMKgwqAgLnVwZGF0ZV9idWZmZXLCoMKgwqAgPSBh cm1fdHJiZV91cGRhdGVfYnVmZmVyLAo+PiArfTsKPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVj dCBjb3Jlc2lnaHRfb3BzIGFybV90cmJlX2NzX29wcyA9IHsKPj4gK8KgwqDCoCAuc2lua19vcHPC oMKgwqAgPSAmYXJtX3RyYmVfc2lua19vcHMsCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgc3NpemVf dCBhbGlnbl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUg KmF0dHIsIGNoYXIgKmJ1ZikKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgdHJiZV9jcHVkYXRhICpj cHVkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gc3By aW50ZihidWYsICIlbGx4XG4iLCBjcHVkYXRhLT50cmJlX2FsaWduKTsKPj4gK30KPj4gK3N0YXRp YyBERVZJQ0VfQVRUUl9STyhhbGlnbik7Cj4+ICsKPj4gK3N0YXRpYyBzc2l6ZV90IGRibV9zaG93 KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIg KmJ1ZikKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgdHJiZV9jcHVkYXRhICpjcHVkYXRhID0gZGV2 X2dldF9kcnZkYXRhKGRldik7Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gc3ByaW50ZihidWYsICIl ZFxuIiwgY3B1ZGF0YS0+dHJiZV9kYm0pOwo+PiArfQo+PiArc3RhdGljIERFVklDRV9BVFRSX1JP KGRibSk7Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphcm1fdHJiZV9hdHRyc1td ID0gewo+PiArwqDCoMKgICZkZXZfYXR0cl9hbGlnbi5hdHRyLAo+PiArwqDCoMKgICZkZXZfYXR0 cl9kYm0uYXR0ciwKPj4gK8KgwqDCoCBOVUxMLAo+PiArfTsKPj4gKwo+PiArc3RhdGljIGNvbnN0 IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYXJtX3RyYmVfZ3JvdXAgPSB7Cj4+ICvCoMKgwqAgLmF0 dHJzID0gYXJtX3RyYmVfYXR0cnMsCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IGF0dHJpYnV0ZV9ncm91cCAqYXJtX3RyYmVfZ3JvdXBzW10gPSB7Cj4+ICvCoMKgwqAgJmFybV90 cmJlX2dyb3VwLAo+PiArwqDCoMKgIE5VTEwsCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgdm9pZCBh cm1fdHJiZV9wcm9iZV9jb3Jlc2lnaHRfY3B1KHZvaWQgKmluZm8pCj4+ICt7Cj4+ICvCoMKgwqAg c3RydWN0IHRyYmVfZHJ2ZGF0YSAqZHJ2ZGF0YSA9IGluZm87Cj4+ICvCoMKgwqAgc3RydWN0IGNv cmVzaWdodF9kZXNjIGRlc2MgPSB7IDAgfTsKPj4gK8KgwqDCoCBpbnQgY3B1ID0gc21wX3Byb2Nl c3Nvcl9pZCgpOwo+PiArwqDCoMKgIHN0cnVjdCB0cmJlX2NwdWRhdGEgKmNwdWRhdGEgPSBwZXJf Y3B1X3B0cihkcnZkYXRhLT5jcHVkYXRhLCBjcHUpOwo+PiArwqDCoMKgIHN0cnVjdCBjb3Jlc2ln aHRfZGV2aWNlICp0cmJlX2NzZGV2ID0gcGVyX2NwdShjc2Rldl9zaW5rLCBjcHUpOwo+PiArwqDC oMKgIHU2NCB0cmJpZHIgPSByZWFkX3N5c3JlZ19zKFNZU19UUkJJRFJfRUwxKTsKPiAKPiBUaGlz IG11c3QgYmUgZG9uZSBvbmx5IGFmdGVyIHRoZSAiaXNfdHJiZV9hdmFpbGFibGUoKSIuIE90aGVy d2lzZQo+IHdlIGdldCBhbiBVTkRFRklORUQgaW5zdHJ1Y3Rpb24gYWJvcnQuCgpPa2F5LCB3aWxs IG1vdmUgcmVhZF9zeXNyZWdfcygpIGFmdGVyIGlzX3RyYmVfcHJvZ3JhbW1hYmxlKCkgaW5zdGVh ZC4KCj4gCj4+ICvCoMKgwqAgc3RydWN0IGRldmljZSAqZGV2Owo+PiArCj4+ICvCoMKgwqAgaWYg KFdBUk5fT04oIWNwdWRhdGEpKQo+PiArwqDCoMKgwqDCoMKgwqAgZ290byBjcHVfY2xlYXI7Cj4+ ICsKPj4gK8KgwqDCoCBpZiAodHJiZV9jc2RldikKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybjsK Pj4gKwo+PiArwqDCoMKgIGNwdWRhdGEtPmNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKPj4gK8Kg wqDCoCBjcHVkYXRhLT5kcnZkYXRhID0gZHJ2ZGF0YTsKPj4gK8KgwqDCoCBkZXYgPSAmY3B1ZGF0 YS0+ZHJ2ZGF0YS0+cGRldi0+ZGV2Owo+PiArCj4+ICvCoMKgwqAgaWYgKCFpc190cmJlX2F2YWls YWJsZSgpKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBwcl9lcnIoIlRSQkUgaXMgbm90IGltcGxlbWVu dGVkIG9uIGNwdSAlZFxuIiwgY3B1ZGF0YS0+Y3B1KTsKPj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8g Y3B1X2NsZWFyOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIGlmICghaXNfdHJiZV9wcm9n cmFtbWFibGUodHJiaWRyKSkgewo+PiArwqDCoMKgwqDCoMKgwqAgcHJfZXJyKCJUUkJFIGlzIG93 bmVkIGluIGhpZ2hlciBleGNlcHRpb24gbGV2ZWwgb24gY3B1ICVkXG4iLCBjcHVkYXRhLT5jcHUp Owo+PiArwqDCoMKgwqDCoMKgwqAgZ290byBjcHVfY2xlYXI7Cj4+ICvCoMKgwqAgfQo+PiArwqDC oMKgIGRlc2MubmFtZSA9IGRldm1fa2FzcHJpbnRmKGRldiwgR0ZQX0tFUk5FTCwgIiVzJWQiLCBE UlZOQU1FLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwo+PiArwqDCoMKgIGlmIChJU19FUlIoZGVzYy5u YW1lKSkKPj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gY3B1X2NsZWFyOwo+PiArCj4+ICvCoMKgwqAg ZGVzYy50eXBlID0gQ09SRVNJR0hUX0RFVl9UWVBFX1NJTks7Cj4+ICvCoMKgwqAgZGVzYy5zdWJ0 eXBlLnNpbmtfc3VidHlwZSA9IENPUkVTSUdIVF9ERVZfU1VCVFlQRV9TSU5LX1BFUkNQVV9TWVNN RU07Cj4+ICvCoMKgwqAgZGVzYy5vcHMgPSAmYXJtX3RyYmVfY3Nfb3BzOwo+PiArwqDCoMKgIGRl c2MucGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKGRldik7Cj4+ICvCoMKgwqAgZGVzYy5ncm91cHMg PSBhcm1fdHJiZV9ncm91cHM7Cj4+ICvCoMKgwqAgZGVzYy5kZXYgPSBkZXY7Cj4+ICvCoMKgwqAg dHJiZV9jc2RldiA9IGNvcmVzaWdodF9yZWdpc3RlcigmZGVzYyk7Cj4+ICvCoMKgwqAgaWYgKElT X0VSUih0cmJlX2NzZGV2KSkKPj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gY3B1X2NsZWFyOwo+PiAr Cj4+ICvCoMKgwqAgZGV2X3NldF9kcnZkYXRhKCZ0cmJlX2NzZGV2LT5kZXYsIGNwdWRhdGEpOwo+ PiArwqDCoMKgIGNwdWRhdGEtPnRyYmVfZGJtID0gZ2V0X3RyYmVfZmxhZ191cGRhdGUodHJiaWRy KTsKPj4gK8KgwqDCoCBjcHVkYXRhLT50cmJlX2FsaWduID0gMVVMTCA8PCBnZXRfdHJiZV9hZGRy ZXNzX2FsaWduKHRyYmlkcik7Cj4+ICvCoMKgwqAgaWYgKGNwdWRhdGEtPnRyYmVfYWxpZ24gPiBT Wl8ySykgewo+PiArwqDCoMKgwqDCoMKgwqAgcHJfZXJyKCJVbnN1cHBvcnRlZCBhbGlnbm1lbnQg b24gY3B1ICVkXG4iLCBjcHVkYXRhLT5jcHUpOwo+PiArwqDCoMKgwqDCoMKgwqAgZ290byBjcHVf Y2xlYXI7Cj4gCj4gU2hvdWxkIHdlIHVucmVnaXN0ZXIgdGhlIGNvcmVzaWdodCBkZXZpY2UgaW4g dGhpcyBjYXNlID/CoCBUaGVyZSBpcyBubyBwb2ludAo+IGluIGhhdmluZyB0aGUgZGV2aWNlIGFy b3VuZCBpZiBpdCBpcyBub3Qgc3VwcG9ydGVkLgoKT2theSwgd2lsbCBjYWxsIGNvcmVzaWdodF91 bnJlZ2lzdGVyKCkgaW4gdGhhdCBjYXNlLgoKPiAKPj4gK8KgwqDCoCB9Cj4+ICvCoMKgwqAgcGVy X2NwdShjc2Rldl9zaW5rLCBjcHUpID0gdHJiZV9jc2RldjsKPj4gK8KgwqDCoCB0cmJlX3Jlc2V0 X2xvY2FsKCk7Cj4+ICvCoMKgwqAgZW5hYmxlX3BlcmNwdV9pcnEoZHJ2ZGF0YS0+aXJxLCBJUlFf VFlQRV9OT05FKTsKPj4gK8KgwqDCoCByZXR1cm47Cj4+ICtjcHVfY2xlYXI6Cj4+ICvCoMKgwqAg Y3B1bWFza19jbGVhcl9jcHUoY3B1ZGF0YS0+Y3B1LCAmY3B1ZGF0YS0+ZHJ2ZGF0YS0+c3VwcG9y dGVkX2NwdXMpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBhcm1fdHJiZV9yZW1vdmVfY29y ZXNpZ2h0X2NwdSh2b2lkICppbmZvKQo+PiArewo+PiArwqDCoMKgIGludCBjcHUgPSBzbXBfcHJv Y2Vzc29yX2lkKCk7Cj4+ICvCoMKgwqAgc3RydWN0IHRyYmVfZHJ2ZGF0YSAqZHJ2ZGF0YSA9IGlu Zm87Cj4+ICvCoMKgwqAgc3RydWN0IHRyYmVfY3B1ZGF0YSAqY3B1ZGF0YSA9IHBlcl9jcHVfcHRy KGRydmRhdGEtPmNwdWRhdGEsIGNwdSk7Cj4+ICvCoMKgwqAgc3RydWN0IGNvcmVzaWdodF9kZXZp Y2UgKnRyYmVfY3NkZXYgPSBwZXJfY3B1KGNzZGV2X3NpbmssIGNwdSk7Cj4+ICsKPiAKPiBuaXQ6 IElzIGl0IGJldHRlciB0byB1c2UgdGhpc19jcHVfcHRyKCkgZXZlcnkgd2hlcmUgYWJvdmUvYmVs b3cgdG8gbWFrZSBpdCBleHBsaWNpdCA/Cgpjc2Rldl9zaW5rIGlzIGFscmVhZHkgYSBwZXJjcHUg cG9pbnRlci4KCj4gCj4+ICvCoMKgwqAgaWYgKHRyYmVfY3NkZXYpIHsKPj4gK8KgwqDCoMKgwqDC oMKgIGNvcmVzaWdodF91bnJlZ2lzdGVyKHRyYmVfY3NkZXYpOwo+PiArwqDCoMKgwqDCoMKgwqAg Y3B1ZGF0YS0+ZHJ2ZGF0YSA9IE5VTEw7Cj4+ICvCoMKgwqDCoMKgwqDCoCBwZXJfY3B1KGNzZGV2 X3NpbmssIGNwdSkgPSBOVUxMOwo+PiArwqDCoMKgIH0KPj4gK8KgwqDCoCBkaXNhYmxlX3BlcmNw dV9pcnEoZHJ2ZGF0YS0+aXJxKTsKPj4gK8KgwqDCoCB0cmJlX3Jlc2V0X2xvY2FsKCk7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyBpbnQgYXJtX3RyYmVfcHJvYmVfY29yZXNpZ2h0KHN0cnVjdCB0cmJl X2RydmRhdGEgKmRydmRhdGEpCj4+ICt7Cj4+ICvCoMKgwqAgZHJ2ZGF0YS0+Y3B1ZGF0YSA9IGFs bG9jX3BlcmNwdSh0eXBlb2YoKmRydmRhdGEtPmNwdWRhdGEpKTsKPj4gK8KgwqDCoCBpZiAoSVNf RVJSKGRydmRhdGEtPmNwdWRhdGEpKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIFBUUl9FUlIo ZHJ2ZGF0YS0+Y3B1ZGF0YSk7Cj4+ICsKPj4gK8KgwqDCoCBhcm1fdHJiZV9wcm9iZV9jb3Jlc2ln aHRfY3B1KGRydmRhdGEpOwo+PiArwqDCoMKgIHNtcF9jYWxsX2Z1bmN0aW9uX21hbnkoJmRydmRh dGEtPnN1cHBvcnRlZF9jcHVzLCBhcm1fdHJiZV9wcm9iZV9jb3Jlc2lnaHRfY3B1LCBkcnZkYXRh LCAxKTsKPj4gK8KgwqDCoCByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBhcm1f dHJiZV9yZW1vdmVfY29yZXNpZ2h0KHN0cnVjdCB0cmJlX2RydmRhdGEgKmRydmRhdGEpCj4+ICt7 Cj4+ICvCoMKgwqAgYXJtX3RyYmVfcmVtb3ZlX2NvcmVzaWdodF9jcHUoZHJ2ZGF0YSk7Cj4+ICvC oMKgwqAgc21wX2NhbGxfZnVuY3Rpb25fbWFueSgmZHJ2ZGF0YS0+c3VwcG9ydGVkX2NwdXMsIGFy bV90cmJlX3JlbW92ZV9jb3Jlc2lnaHRfY3B1LCBkcnZkYXRhLCAxKTsKPj4gK8KgwqDCoCBmcmVl X3BlcmNwdShkcnZkYXRhLT5jcHVkYXRhKTsKPj4gK8KgwqDCoCByZXR1cm4gMDsKPj4gK30KPj4g Kwo+PiArc3RhdGljIGludCBhcm1fdHJiZV9jcHVfc3RhcnR1cCh1bnNpZ25lZCBpbnQgY3B1LCBz dHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSkKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgdHJiZV9kcnZk YXRhICpkcnZkYXRhID0gaGxpc3RfZW50cnlfc2FmZShub2RlLCBzdHJ1Y3QgdHJiZV9kcnZkYXRh LCBob3RwbHVnX25vZGUpOwo+PiArCj4+ICvCoMKgwqAgaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1 LCAmZHJ2ZGF0YS0+c3VwcG9ydGVkX2NwdXMpKSB7Cj4gCj4gbml0OiBBZGQgYSBjb21tZW50ID8K PiAKPiDCoMKgwqDCoMKgwqDCoCAvKgo+IMKgwqDCoMKgwqDCoMKgwqAgKiBJZiB0aGlzIENQVSB3 YXMgbm90IHByb2JlZCBmb3IgVFJCRSwgaW5pdGlhbGl6ZQo+IMKgwqDCoMKgwqDCoMKgwqAgKiBp dCBub3cuCj4gwqDCoMKgwqDCoMKgwqDCoCAqLwoKU3VyZSwgd2lsbCBhZGQgdGhlIGFib3ZlLgoK PiAKPj4gK8KgwqDCoMKgwqDCoMKgIGlmICghcGVyX2NwdShjc2Rldl9zaW5rLCBjcHUpKSB7Cj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFybV90cmJlX3Byb2JlX2NvcmVzaWdodF9jcHUoZHJ2 ZGF0YSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCB9IGVsc2Ugewo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB0cmJlX3Jlc2V0X2xvY2FsKCk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVuYWJs ZV9wZXJjcHVfaXJxKGRydmRhdGEtPmlycSwgSVJRX1RZUEVfTk9ORSk7Cj4+ICvCoMKgwqDCoMKg wqDCoCB9Cj4+ICvCoMKgwqAgfQo+PiArwqDCoMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtz dGF0aWMgaW50IGFybV90cmJlX2NwdV90ZWFyZG93bih1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3Qg aGxpc3Rfbm9kZSAqbm9kZSkKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgdHJiZV9kcnZkYXRhICpk cnZkYXRhID0gaGxpc3RfZW50cnlfc2FmZShub2RlLCBzdHJ1Y3QgdHJiZV9kcnZkYXRhLCBob3Rw bHVnX25vZGUpOwo+PiArCj4+ICvCoMKgwqAgaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCAmZHJ2 ZGF0YS0+c3VwcG9ydGVkX2NwdXMpKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBkaXNhYmxlX3BlcmNw dV9pcnEoZHJ2ZGF0YS0+aXJxKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHRyYmVfcmVzZXRfbG9jYWwo KTsKPj4gK8KgwqDCoCB9Cj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRp YyBpbnQgYXJtX3RyYmVfcHJvYmVfY3B1aHAoc3RydWN0IHRyYmVfZHJ2ZGF0YSAqZHJ2ZGF0YSkK Pj4gK3sKPj4gK8KgwqDCoCBlbnVtIGNwdWhwX3N0YXRlIHRyYmVfb25saW5lOwo+PiArCj4+ICvC oMKgwqAgdHJiZV9vbmxpbmUgPSBjcHVocF9zZXR1cF9zdGF0ZV9tdWx0aShDUFVIUF9BUF9PTkxJ TkVfRFlOLCBEUlZOQU1FLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgYXJtX3RyYmVfY3B1X3N0YXJ0dXAsIGFybV90cmJlX2NwdV90ZWFyZG93bik7Cj4+ICvCoMKg wqAgaWYgKHRyYmVfb25saW5lIDwgMCkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFM Owo+PiArCj4+ICvCoMKgwqAgaWYgKGNwdWhwX3N0YXRlX2FkZF9pbnN0YW5jZSh0cmJlX29ubGlu ZSwgJmRydmRhdGEtPmhvdHBsdWdfbm9kZSkpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJ TlZBTDsKPj4gKwo+PiArwqDCoMKgIGRydmRhdGEtPnRyYmVfb25saW5lID0gdHJiZV9vbmxpbmU7 Cj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGFybV90cmJl X3JlbW92ZV9jcHVocChzdHJ1Y3QgdHJiZV9kcnZkYXRhICpkcnZkYXRhKQo+PiArewo+PiArwqDC oMKgIGNwdWhwX3JlbW92ZV9tdWx0aV9zdGF0ZShkcnZkYXRhLT50cmJlX29ubGluZSk7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyBpbnQgYXJtX3RyYmVfcHJvYmVfaXJxKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVj dCB0cmJlX2RydmRhdGEgKmRydmRhdGEpCj4+ICt7Cj4+ICvCoMKgwqAgZHJ2ZGF0YS0+aXJxID0g cGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKPj4gK8KgwqDCoCBpZiAoIWRydmRhdGEtPmlycSkg ewo+PiArwqDCoMKgwqDCoMKgwqAgcHJfZXJyKCJJUlEgbm90IGZvdW5kIGZvciB0aGUgcGxhdGZv cm0gZGV2aWNlXG4iKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5YSU87Cj4+ICvCoMKg wqAgfQo+PiArCj4+ICvCoMKgwqAgaWYgKCFpcnFfaXNfcGVyY3B1KGRydmRhdGEtPmlycSkpIHsK Pj4gK8KgwqDCoMKgwqDCoMKgIHByX2VycigiSVJRIGlzIG5vdCBhIFBQSVxuIik7Cj4+ICvCoMKg wqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBp ZiAoaXJxX2dldF9wZXJjcHVfZGV2aWRfcGFydGl0aW9uKGRydmRhdGEtPmlycSwgJmRydmRhdGEt PnN1cHBvcnRlZF9jcHVzKSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+PiAr Cj4+ICvCoMKgwqAgZHJ2ZGF0YS0+aGFuZGxlID0gYWxsb2NfcGVyY3B1KHR5cGVvZigqZHJ2ZGF0 YS0+aGFuZGxlKSk7Cj4+ICvCoMKgwqAgaWYgKCFkcnZkYXRhLT5oYW5kbGUpCj4+ICvCoMKgwqDC oMKgwqDCoCByZXR1cm4gLUVOT01FTTsKPj4gKwo+PiArwqDCoMKgIGlmIChyZXF1ZXN0X3BlcmNw dV9pcnEoZHJ2ZGF0YS0+aXJxLCBhcm1fdHJiZV9pcnFfaGFuZGxlciwgRFJWTkFNRSwgZHJ2ZGF0 YS0+aGFuZGxlKSkgewo+PiArwqDCoMKgwqDCoMKgwqAgZnJlZV9wZXJjcHUoZHJ2ZGF0YS0+aGFu ZGxlKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+PiArwqDCoMKgIH0KPj4g K8KgwqDCoCByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgYXJtX3RyYmVfcmVt b3ZlX2lycShzdHJ1Y3QgdHJiZV9kcnZkYXRhICpkcnZkYXRhKQo+PiArewo+PiArwqDCoMKgIGZy ZWVfcGVyY3B1X2lycShkcnZkYXRhLT5pcnEsIGRydmRhdGEtPmhhbmRsZSk7Cj4+ICvCoMKgwqAg ZnJlZV9wZXJjcHUoZHJ2ZGF0YS0+aGFuZGxlKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBh cm1fdHJiZV9kZXZpY2VfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPj4gK3sK Pj4gK8KgwqDCoCBzdHJ1Y3QgY29yZXNpZ2h0X3BsYXRmb3JtX2RhdGEgKnBkYXRhOwo+PiArwqDC oMKgIHN0cnVjdCB0cmJlX2RydmRhdGEgKmRydmRhdGE7Cj4+ICvCoMKgwqAgc3RydWN0IGRldmlj ZSAqZGV2ID0gJnBkZXYtPmRldjsKPj4gK8KgwqDCoCBpbnQgcmV0Owo+PiArCj4+ICvCoMKgwqAg ZHJ2ZGF0YSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZHJ2ZGF0YSksIEdGUF9LRVJORUwp Owo+PiArwqDCoMKgIGlmIChJU19FUlIoZHJ2ZGF0YSkpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1 cm4gLUVOT01FTTsKPj4gKwo+PiArwqDCoMKgIHBkYXRhID0gY29yZXNpZ2h0X2dldF9wbGF0Zm9y bV9kYXRhKGRldik7Cj4gCj4gTm90IHN1cmUgaWYgdGhpcyBpcyBuZWNlc3NhcnkuIFdlIGRvbid0 IGhhdmUgYW55IENvcmVTaWdodCBzcGVjaWZpYwo+IGRhdGEgaW4gdGhlIGJpbmRpbmdzLgoKV2l0 aG91dCBkZXNjLnBkYXRhIHdoaWNoIGlzIGRldl9nZXRfcGxhdGRhdGEoZGV2KSwgY29yZXNpZ2h0 X3JlZ2lzdGVyKCkKanVzdCBmYWlscy4gRG8geW91IHNlZSBhbnkgb3RoZXIgYWx0ZXJuYXRpdmUg Zm9yIGRlc2MucGRhdGEgaW5zdGVhZCA/CgpbICAgIDEuNDY1MjIxXSBwYyA6IGNvcmVzaWdodF9y ZWdpc3RlcisweDFmMC8weDMzOApbICAgIDEuNDY1MzgzXSBsciA6IGNvcmVzaWdodF9yZWdpc3Rl cisweDE0NC8weDMzOApbICAgIDEuNDY1NDgzXSBzcCA6IGZmZmY4MDAwMTAwM2JhODAKWyAgICAx LjQ2NTU4M10geDI5OiBmZmZmODAwMDEwMDNiYTgwIHgyODogZmZmZjAwMDgwMDI4NmMxMCAKWyAg ICAxLjQ2NTcxMl0geDI3OiAwMDAwMDAwMDAwMDAwMDAyIHgyNjogZmZmZjAwMDg3ZjdkNmU4OCAK WyAgICAxLjQ2NTg4M10geDI1OiAwMDAwMDAwMDAwMDAwMDIwIHgyNDogZmZmZjAwMDgwMjE2OGI4 MCAKWyAgICAxLjQ2NTk4M10geDIzOiBmZmZmODAwMDExYmQ5OWMwIHgyMjogZmZmZjgwMDAxMWU2 ZjAwMCAKWyAgICAxLjQ2NjE4M10geDIxOiAwMDAwMDAwMDAwMDAwMDAwIHgyMDogZmZmZjgwMDAx MDAzYmIyOCAKWyAgICAxLjQ2NjI4Nl0geDE5OiBmZmZmMDAwODAyMTdiNDAwIHgxODogZmZmZmZm ZmZmZmZmZmZmZiAKWyAgICAxLjQ2NjQ4M10geDE3OiAwMDAwMDAwMDAwMDAwMGMwIHgxNjogZmZm ZmZjMDAyMDA4NWU0MCAKWyAgICAxLjQ2NjYxM10geDE1OiBmZmZmODAwMDExYmQ5OTQ4IHgxNDog ZmZmZjAwMDgwMjEzMWExYyAKWyAgICAxLjQ2Njc4M10geDEzOiBmZmZmMDAwODAyMTMxMjdkIHgx MjogMDAwMDAwMDAwMDAwMDAwMCAKWyAgICAxLjQ2Njg4M10geDExOiAwMTAxMDEwMTAxMDEwMTAx IHgxMDogN2Y3ZjdmN2Y3ZjdmN2Y3ZiAKWyAgICAxLjQ2NzA4M10geDkgOiA2ODYyNjA3MTczNzY2 NzJlIHg4IDogN2Y3ZjdmN2Y3ZjdmN2Y3ZiAKWyAgICAxLjQ2NzIwNl0geDcgOiA3MjcxNjQ3NTY4 NzE2MmZmIHg2IDogODAwMDAwMDAwMDAwMDAwMCAKWyAgICAxLjQ2NzM4M10geDUgOiBmZmZmMDAw ODAwMDkwMDAwIHg0IDogZmZmZjAwMDgwMDA5MDAwMCAKWyAgICAxLjQ2NzUxNF0geDMgOiAwMDAw MDAwMDAwMDAwMDAwIHgyIDogMDAwMDAwMDAwMDAwMDAwMCAKWyAgICAxLjQ2NzU5Nl0geDEgOiAw MDAwMDAwMDAwMDAwMDAxIHgwIDogMDAwMDAwMDAwMDAwMDAwMCAKWyAgICAxLjQ2Nzc4M10gQ2Fs bCB0cmFjZToKWyAgICAxLjQ2Nzg4M10gIGNvcmVzaWdodF9yZWdpc3RlcisweDFmMC8weDMzOApb ICAgIDEuNDY4MDA2XSAgYXJtX3RyYmVfcHJvYmVfY29yZXNpZ2h0X2NwdSsweDE0NC8weDIzOApb ICAgIDEuNDY4MDg4XSAgYXJtX3RyYmVfZGV2aWNlX3Byb2JlKzB4ZDAvMHgyMDAKWyAgICAxLjQ2 ODI4M10gIHBsYXRmb3JtX3Byb2JlKzB4NjgvMHhlMApbICAgIDEuNDY4MzgzXSAgcmVhbGx5X3By b2JlKzB4MTE4LzB4M2UwClsgICAgMS40Njg1MDhdICBkcml2ZXJfcHJvYmVfZGV2aWNlKzB4NWMv MHhjMApbICAgIDEuNDY4NTgzXSAgZGV2aWNlX2RyaXZlcl9hdHRhY2grMHg3NC8weDgwClsgICAg MS40Njg2ODNdICBfX2RyaXZlcl9hdHRhY2grMHg4Yy8weGQ4ClsgICAgMS40Njg4MjVdICBidXNf Zm9yX2VhY2hfZGV2KzB4N2MvMHhkOApbICAgIDEuNDY4OTA3XSAgZHJpdmVyX2F0dGFjaCsweDI0 LzB4MzAKWyAgICAxLjQ2OTA3MV0gIGJ1c19hZGRfZHJpdmVyKzB4MTU0LzB4MjAwClsgICAgMS40 NjkxODNdICBkcml2ZXJfcmVnaXN0ZXIrMHg2NC8weDEyMApbICAgIDEuNDY5MjkwXSAgX19wbGF0 Zm9ybV9kcml2ZXJfcmVnaXN0ZXIrMHgyOC8weDM4ClsgICAgMS40NjkzOTldICBhcm1fdHJiZV9p bml0KzB4NTgvMHg4OApbICAgIDEuNDY5NTYyXSAgZG9fb25lX2luaXRjYWxsKzB4NjAvMHgxZDgK WyAgICAxLjQ2OTY0NF0gIGtlcm5lbF9pbml0X2ZyZWVhYmxlKzB4MWY0LzB4MjRjClsgICAgMS40 Njk3ODNdICBrZXJuZWxfaW5pdCsweDE0LzB4MTE4ClsgICAgMS40Njk4OTBdICByZXRfZnJvbV9m b3JrKzB4MTAvMHgzMApbICAgIDEuNDY5OTgzXSBDb2RlOiAxN2ZmZmY5OCA5MjgwMDE3MyAxN2Zm ZmZlZiBmOTQwMDI2MiAoYjk0MDA0NDApIApbICAgIDEuNDcwMTgzXSAtLS1bIGVuZCB0cmFjZSAy MGYwOTZjNWVhMTk0MTE0IF0tLS0KWyAgICAxLjQ3MDMwMF0gS2VybmVsIHBhbmljIC0gbm90IHN5 bmNpbmc6IEF0dGVtcHRlZCB0byBraWxsIGluaXQhIGV4aXRjb2RlPTB4MDAKCj4gCj4+ICvCoMKg wqAgaWYgKElTX0VSUihwZGF0YSkpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIGtmcmVlKGRydmRhdGEp Owo+IAo+IFRoaXMgaXMgbm90IHJlcXVpcmVkLiBUaGUgY2xlYW51cCBzaG91bGQgYXV0b21hdGlj YWxseSBmcmVlIHRoaXMgdXAuCj4gSW4gZmFjdCB0aGlzIHdpbGwgYmUgcHJvYmxlbWF0aWMgYW5k IHdpbGwgY2F1c2UgZG91YmxlIGZyZWUuCgpPa2F5LgoKPiAKPj4gK8KgwqDCoMKgwqDCoMKgIHJl dHVybiAtRU5PTUVNOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIGRldl9zZXRfZHJ2ZGF0 YShkZXYsIGRydmRhdGEpOwo+PiArwqDCoMKgIGRldi0+cGxhdGZvcm1fZGF0YSA9IHBkYXRhOwo+ PiArwqDCoMKgIGRydmRhdGEtPnBkZXYgPSBwZGV2Owo+PiArwqDCoMKgIHJldCA9IGFybV90cmJl X3Byb2JlX2lycShwZGV2LCBkcnZkYXRhKTsKPj4gK8KgwqDCoCBpZiAocmV0KQo+PiArwqDCoMKg wqDCoMKgwqAgZ290byBpcnFfZmFpbGVkOwo+PiArCj4+ICvCoMKgwqAgcmV0ID0gYXJtX3RyYmVf cHJvYmVfY29yZXNpZ2h0KGRydmRhdGEpOwo+PiArwqDCoMKgIGlmIChyZXQpCj4+ICvCoMKgwqDC oMKgwqDCoCBnb3RvIHByb2JlX2ZhaWxlZDsKPj4gKwo+PiArwqDCoMKgIHJldCA9IGFybV90cmJl X3Byb2JlX2NwdWhwKGRydmRhdGEpOwo+PiArwqDCoMKgIGlmIChyZXQpCj4+ICvCoMKgwqDCoMKg wqDCoCBnb3RvIGNwdWhwX2ZhaWxlZDsKPj4gKwo+PiArwqDCoMKgIHJldHVybiAwOwo+PiArY3B1 aHBfZmFpbGVkOgo+PiArwqDCoMKgIGFybV90cmJlX3JlbW92ZV9jb3Jlc2lnaHQoZHJ2ZGF0YSk7 Cj4+ICtwcm9iZV9mYWlsZWQ6Cj4+ICvCoMKgwqAgYXJtX3RyYmVfcmVtb3ZlX2lycShkcnZkYXRh KTsKPj4gK2lycV9mYWlsZWQ6Cj4+ICvCoMKgwqAga2ZyZWUocGRhdGEpOwo+PiArwqDCoMKgIGtm cmVlKGRydmRhdGEpOwo+IAo+IE5vbmUgb2YgdGhlc2UgImtmcmVlIiBpcyBuZWVkZWQuIEl0IHdp bGwgYmUgYXV0b21hdGljYWxseSBmcmVlZAo+IHdoZW4gdGhlIHByb2JlIGZhaWxzLgoKV2lsbCBk cm9wIHRoZXNlIGtmcmVlKCkuCgo+IAo+PiArwqDCoMKgIHJldHVybiByZXQ7Cj4+ICt9Cj4+ICsK Pj4gK3N0YXRpYyBpbnQgYXJtX3RyYmVfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2KQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBjb3Jlc2lnaHRfcGxhdGZvcm1fZGF0 YSAqcGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKCZwZGV2LT5kZXYpOwo+PiArwqDCoMKgIHN0cnVj dCB0cmJlX2RydmRhdGEgKmRydmRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKPj4g Kwo+PiArwqDCoMKgIGFybV90cmJlX3JlbW92ZV9jb3Jlc2lnaHQoZHJ2ZGF0YSk7Cj4+ICvCoMKg wqAgYXJtX3RyYmVfcmVtb3ZlX2NwdWhwKGRydmRhdGEpOwo+PiArwqDCoMKgIGFybV90cmJlX3Jl bW92ZV9pcnEoZHJ2ZGF0YSk7Cj4gCj4+ICvCoMKgwqAga2ZyZWUocGRhdGEpOwo+PiArwqDCoMKg IGtmcmVlKGRydmRhdGEpOwo+IAo+IFNhbWUgYXMgYWJvdmUuCgpXaWxsIGRyb3AgdGhlc2Uga2Zy ZWUoKS4KCj4gCj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBjb25z dCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGFybV90cmJlX29mX21hdGNoW10gPSB7Cj4+ICvCoMKgwqAg eyAuY29tcGF0aWJsZSA9ICJhcm0sdHJhY2UtYnVmZmVyLWV4dGVuc2lvbiJ9LAo+PiArwqDCoMKg IHt9LAo+PiArfTsKPj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGFybV90cmJlX29mX21hdGNo KTsKPj4gKwo+PiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXJtX3RyYmVfZHJpdmVy ID0gewo+PiArwqDCoMKgIC5kcml2ZXLCoMKgwqAgPSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCAubmFt ZSA9IERSVk5BTUUsCj4+ICvCoMKgwqDCoMKgwqDCoCAub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRj aF9wdHIoYXJtX3RyYmVfb2ZfbWF0Y2gpLAo+PiArwqDCoMKgwqDCoMKgwqAgLnN1cHByZXNzX2Jp bmRfYXR0cnMgPSB0cnVlLAo+PiArwqDCoMKgIH0sCj4+ICvCoMKgwqAgLnByb2JlwqDCoMKgID0g YXJtX3RyYmVfZGV2aWNlX3Byb2JlLAo+PiArwqDCoMKgIC5yZW1vdmXCoMKgwqAgPSBhcm1fdHJi ZV9kZXZpY2VfcmVtb3ZlLAo+PiArfTsKPj4gKwo+PiArc3RhdGljIGludCBfX2luaXQgYXJtX3Ry YmVfaW5pdCh2b2lkKQo+PiArewo+PiArwqDCoMKgIGludCByZXQ7Cj4+ICsKPj4gK8KgwqDCoCBp ZiAoYXJtNjRfa2VybmVsX3VubWFwcGVkX2F0X2VsMCgpKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBw cl9lcnIoIlRSQkUgd291bGRuJ3Qgd29yayBpZiBrZXJuZWwgZ2V0cyB1bm1hcHBlZCBhdCBFTDBc biIpOwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FT1BOT1RTVVBQOwo+PiArwqDCoMKgIH0K Pj4gKwo+PiArwqDCoMKgIHJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXJtX3RyYmVf ZHJpdmVyKTsKPj4gK8KgwqDCoCBpZiAoIXJldCkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAw Owo+PiArCj4+ICvCoMKgwqAgcHJfZXJyKCJFcnJvciByZWdpc3RlcmluZyAlcyBwbGF0Zm9ybSBk cml2ZXJcbiIsIERSVk5BTUUpOwo+PiArwqDCoMKgIHJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4g K3N0YXRpYyB2b2lkIF9fZXhpdCBhcm1fdHJiZV9leGl0KHZvaWQpCj4+ICt7Cj4+ICvCoMKgwqAg cGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmFybV90cmJlX2RyaXZlcik7Cj4+ICt9Cj4+ICtt b2R1bGVfaW5pdChhcm1fdHJiZV9pbml0KTsKPj4gK21vZHVsZV9leGl0KGFybV90cmJlX2V4aXQp Owo+PiArCj4+ICtNT0RVTEVfQVVUSE9SKCJBbnNodW1hbiBLaGFuZHVhbCA8YW5zaHVtYW4ua2hh bmR1YWxAYXJtLmNvbT4iKTsKPj4gK01PRFVMRV9ERVNDUklQVElPTigiQXJtIFRyYWNlIEJ1ZmZl ciBFeHRlbnNpb24gKFRSQkUpIGRyaXZlciIpOwo+PiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIp Owo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9od3RyYWNpbmcvY29yZXNpZ2h0L2NvcmVzaWdodC10 cmJlLmggYi9kcml2ZXJzL2h3dHJhY2luZy9jb3Jlc2lnaHQvY29yZXNpZ2h0LXRyYmUuaAo+PiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi40MzMwOGJjCj4+IC0tLSAvZGV2 L251bGwKPj4gKysrIGIvZHJpdmVycy9od3RyYWNpbmcvY29yZXNpZ2h0L2NvcmVzaWdodC10cmJl LmgKPj4gQEAgLTAsMCArMSwxNjAgQEAKPj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wICovCj4+ICsvKgo+PiArICogVGhpcyBjb250YWlucyBhbGwgcmVxdWlyZWQgaGFyZHdh cmUgcmVsYXRlZCBoZWxwZXIgZnVuY3Rpb25zIGZvcgo+PiArICogVHJhY2UgQnVmZmVyIEV4dGVu c2lvbiAoVFJCRSkgZHJpdmVyIGluIHRoZSBjb3Jlc2lnaHQgZnJhbWV3b3JrLgo+PiArICoKPj4g KyAqIENvcHlyaWdodCAoQykgMjAyMCBBUk0gTHRkLgo+PiArICoKPj4gKyAqIEF1dGhvcjogQW5z aHVtYW4gS2hhbmR1YWwgPGFuc2h1bWFuLmtoYW5kdWFsQGFybS5jb20+Cj4+ICsgKi8KPj4gKyNp bmNsdWRlIDxsaW51eC9jb3Jlc2lnaHQuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4K Pj4gKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4K Pj4gKyNpbmNsdWRlIDxsaW51eC9vZi5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2Rl dmljZS5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgo+PiArCj4+ICsjaW5jbHVkZSAiY29y ZXNpZ2h0LWV0bS1wZXJmLmgiCj4+ICsKPj4gK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgY29yZXNp Z2h0X2RldmljZSAqLCBjc2Rldl9zaW5rKTsKPiAKPiBUaGlzIGJlbG9uZ3MgdG8gY29yZXNpZ2h0 LXByaXYuaC4KCk9rYXksIHdpbGwgbW92ZS4KCj4gCj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgYm9v bCBpc190cmJlX2F2YWlsYWJsZSh2b2lkKQo+PiArewo+PiArwqDCoMKgIHU2NCBhYTY0ZGZyMCA9 IHJlYWRfc3lzcmVnX3MoU1lTX0lEX0FBNjRERlIwX0VMMSk7Cj4+ICvCoMKgwqAgdW5zaWduZWQg aW50IHRyYmUgPSBjcHVpZF9mZWF0dXJlX2V4dHJhY3RfdW5zaWduZWRfZmllbGQoYWE2NGRmcjAs IElEX0FBNjRERlIwX1RSQkVfU0hJRlQpOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIHRyYmUgPj0g MGIwMDAxOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW5saW5lIGJvb2wgaXNfdHJiZV9lbmFibGVk KHZvaWQpCj4+ICt7Cj4+ICvCoMKgwqAgdTY0IHRyYmxpbWl0ciA9IHJlYWRfc3lzcmVnX3MoU1lT X1RSQkxJTUlUUl9FTDEpOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIHRyYmxpbWl0ciAmIFRSQkxJ TUlUUl9FTkFCTEU7Cj4+ICt9Cj4+ICsKPj4gKyNkZWZpbmUgVFJCRV9FQ19PVEhFUlPCoMKgwqDC oMKgwqDCoCAwCj4+ICsjZGVmaW5lIFRSQkVfRUNfU1RBR0UxX0FCT1JUwqDCoMKgIDM2Cj4+ICsj ZGVmaW5lIFRSQkVfRUNfU1RBR0UyX0FCT1JUwqDCoMKgIDM3Cj4+ICsKPj4gK3N0YXRpYyBpbmxp bmUgaW50IGdldF90cmJlX2VjKHU2NCB0cmJzcikKPj4gK3sKPj4gK8KgwqDCoCByZXR1cm4gKHRy YnNyID4+IFRSQlNSX0VDX1NISUZUKSAmIFRSQlNSX0VDX01BU0s7Cj4+ICt9Cj4+ICsKPj4gKyNk ZWZpbmUgVFJCRV9CU0NfTk9UX1NUT1BQRUTCoMKgwqAgMAo+PiArI2RlZmluZcKgwqDCoCBUUkJF X0JTQ19GSUxMRUTCoMKgwqDCoMKgwqDCoCAxCj4gCj4gbml0OiBVc2Ugc3BhY2UgaW5zdGVhZCBv ZiBUQUIgaGVyZS4KClN1cmUsIHdpbGwgY2hhbmdlLgoKPiAKPj4gKyNkZWZpbmUgVFJCRV9CU0Nf VFJJR0dFUkVEwqDCoMKgIDIKPj4gKwo+PiArc3RhdGljIGlubGluZSBpbnQgZ2V0X3RyYmVfYnNj KHU2NCB0cmJzcikKPj4gK3sKPj4gK8KgwqDCoCByZXR1cm4gKHRyYnNyID4+IFRSQlNSX0JTQ19T SElGVCkgJiBUUkJTUl9CU0NfTUFTSzsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlubGluZSB2b2lk IGNscl90cmJlX2lycSh2b2lkKQo+PiArewo+PiArwqDCoMKgIHU2NCB0cmJzciA9IHJlYWRfc3lz cmVnX3MoU1lTX1RSQlNSX0VMMSk7Cj4+ICsKPj4gK8KgwqDCoCB0cmJzciAmPSB+VFJCU1JfSVJR Owo+PiArwqDCoMKgIHdyaXRlX3N5c3JlZ19zKHRyYnNyLCBTWVNfVFJCU1JfRUwxKTsKPj4gK30K Pj4gKwo+PiArc3RhdGljIGlubGluZSBib29sIGlzX3RyYmVfaXJxKHU2NCB0cmJzcikKPj4gK3sK Pj4gK8KgwqDCoCByZXR1cm4gdHJic3IgJiBUUkJTUl9JUlE7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRp YyBpbmxpbmUgYm9vbCBpc190cmJlX3RyZyh1NjQgdHJic3IpCj4+ICt7Cj4+ICvCoMKgwqAgcmV0 dXJuIHRyYnNyICYgVFJCU1JfVFJHOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW5saW5lIGJvb2wg aXNfdHJiZV93cmFwKHU2NCB0cmJzcikKPj4gK3sKPj4gK8KgwqDCoCByZXR1cm4gdHJic3IgJiBU UkJTUl9XUkFQOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW5saW5lIGJvb2wgaXNfdHJiZV9hYm9y dCh1NjQgdHJic3IpCj4+ICt7Cj4+ICvCoMKgwqAgcmV0dXJuIHRyYnNyICYgVFJCU1JfQUJPUlQ7 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBpc190cmJlX3J1bm5pbmcodTY0IHRy YnNyKQo+PiArewo+PiArwqDCoMKgIHJldHVybiAhKHRyYnNyICYgVFJCU1JfU1RPUCk7Cj4+ICt9 Cj4+ICsKPj4gKyNkZWZpbmUgVFJCRV9UUklHX01PREVfU1RPUMKgwqDCoMKgwqDCoMKgIDAKPj4g KyNkZWZpbmUgVFJCRV9UUklHX01PREVfSVJRwqDCoMKgwqDCoMKgwqAgMQo+PiArI2RlZmluZSBU UkJFX1RSSUdfTU9ERV9JR05PUkXCoMKgwqDCoMKgwqDCoCAzCj4+ICsKPj4gKyNkZWZpbmUgVFJC RV9GSUxMX01PREVfRklMTMKgwqDCoMKgwqDCoMKgIDAKPj4gKyNkZWZpbmUgVFJCRV9GSUxMX01P REVfV1JBUMKgwqDCoMKgwqDCoMKgIDEKPj4gKyNkZWZpbmUgVFJCRV9GSUxMX01PREVfQ0lSQ1VM QVJfQlVGRkVSwqDCoMKgIDMKPj4gKwo+PiArc3RhdGljIGlubGluZSB2b2lkIHNldF90cmJlX2Rp c2FibGVkKHZvaWQpCj4+ICt7Cj4+ICvCoMKgwqAgdTY0IHRyYmxpbWl0ciA9IHJlYWRfc3lzcmVn X3MoU1lTX1RSQkxJTUlUUl9FTDEpOwo+PiArCj4+ICvCoMKgwqAgdHJibGltaXRyICY9IH5UUkJM SU1JVFJfRU5BQkxFOwo+PiArwqDCoMKgIHdyaXRlX3N5c3JlZ19zKHRyYmxpbWl0ciwgU1lTX1RS QkxJTUlUUl9FTDEpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW5saW5lIGJvb2wgZ2V0X3RyYmVf ZmxhZ191cGRhdGUodTY0IHRyYmlkcikKPj4gK3sKPj4gK8KgwqDCoCByZXR1cm4gdHJiaWRyICYg VFJCSURSX0ZMQUc7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBpc190cmJlX3By b2dyYW1tYWJsZSh1NjQgdHJiaWRyKQo+PiArewo+PiArwqDCoMKgIHJldHVybiAhKHRyYmlkciAm IFRSQklEUl9QUk9HKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlubGluZSBpbnQgZ2V0X3RyYmVf YWRkcmVzc19hbGlnbih1NjQgdHJiaWRyKQo+PiArewo+PiArwqDCoMKgIHJldHVybiAodHJiaWRy ID4+IFRSQklEUl9BTElHTl9TSElGVCkgJiBUUkJJRFJfQUxJR05fTUFTSzsKPj4gK30KPj4gKwo+ PiArc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF90cmJlX3dyaXRlX3BvaW50ZXIodm9p ZCkKPj4gK3sKPj4gK8KgwqDCoCB1NjQgdHJicHRyID0gcmVhZF9zeXNyZWdfcyhTWVNfVFJCUFRS X0VMMSk7Cj4+ICvCoMKgwqAgdW5zaWduZWQgbG9uZyBhZGRyID0gKHRyYnB0ciA+PiBUUkJQVFJf UFRSX1NISUZUKSAmIFRSQlBUUl9QVFJfTUFTSzsKPiAKPiBZb3UgZG9uJ3QgbmVlZCB0aGlzIHNo aWZ0aW5nIGFuZCBtYXNraW5nLiB0cmJwdHJfZWwxIGlzIGEgd2hvbGUgNjRiaXQgcmVnaXN0ZXIK Ck9rYXksIHdpbGwgYWxzbyBkcm9wIFRSQlBUUl9QVFJfU0hJRlQgYW5kIFRSQlBUUl9QVFJfTUFT SyBmcm9tIGhlcmUuCgo+IAo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIGFkZHI7Cj4+ICt9Cj4+ICsK Pj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdHJiZV93cml0ZV9wb2ludGVyKHVuc2lnbmVkIGxv bmcgYWRkcikKPj4gK3sKPj4gK8KgwqDCoCBXQVJOX09OKGlzX3RyYmVfZW5hYmxlZCgpKTsKPj4g K8KgwqDCoCBhZGRyID0gKGFkZHIgPj4gVFJCUFRSX1BUUl9TSElGVCkgJiBUUkJQVFJfUFRSX01B U0s7Cj4gCj4gU2FtZSBhcyBhYm92ZS4KPiAKPj4gK8KgwqDCoCB3cml0ZV9zeXNyZWdfcyhhZGRy LCBTWVNfVFJCUFRSX0VMMSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQg bG9uZyBnZXRfdHJiZV9saW1pdF9wb2ludGVyKHZvaWQpCj4+ICt7Cj4+ICvCoMKgwqAgdTY0IHRy YmxpbWl0ciA9IHJlYWRfc3lzcmVnX3MoU1lTX1RSQkxJTUlUUl9FTDEpOwo+PiArwqDCoMKgIHVu c2lnbmVkIGxvbmcgbGltaXQgPSAodHJibGltaXRyID4+IFRSQkxJTUlUUl9MSU1JVF9TSElGVCkg JiBUUkJMSU1JVFJfTElNSVRfTUFTSzsKPj4gK8KgwqDCoCB1bnNpZ25lZCBsb25nIGFkZHIgPSBs aW1pdCA8PCBUUkJMSU1JVFJfTElNSVRfU0hJRlQ7Cj4+ICsKPj4gK8KgwqDCoCBXQVJOX09OKCFJ U19BTElHTkVEKGFkZHIsIFBBR0VfU0laRSkpOwo+PiArwqDCoMKgIHJldHVybiBhZGRyOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X3RyYmVfYmFzZV9wb2lu dGVyKHZvaWQpCj4+ICt7Cj4+ICvCoMKgwqAgdTY0IHRyYmJhc2VyID0gcmVhZF9zeXNyZWdfcyhT WVNfVFJCQkFTRVJfRUwxKTsKPiAKPiAKPj4gK8KgwqDCoCB1bnNpZ25lZCBsb25nIGFkZHIgPSAo dHJiYmFzZXIgPj4gVFJCQkFTRVJfQkFTRV9TSElGVCkgJiBUUkJCQVNFUl9CQVNFX01BU0s7Cj4+ ICsKPj4gK8KgwqDCoCBhZGRyID0gYWRkciA8PCBUUkJCQVNFUl9CQVNFX1NISUZUOwo+IAo+IG5p dDogQ291bGQgd2UgaW5zdGVhZCBkbyA6Cj4gCj4gwqDCoMKgwqBhZGRyID0gdHJiYmFzZXIgJiAo VFJCQkFTRVJfQkFTRV9NQVNLIDw8IFRSQkJBU0VSX0JBU0VfU0hJRlQpOyA/CgpPa2F5LCB3aWxs IGNoYW5nZS4KCj4gCj4+ICvCoMKgwqAgV0FSTl9PTighSVNfQUxJR05FRChhZGRyLCBQQUdFX1NJ WkUpKTsKPj4gK8KgwqDCoCByZXR1cm4gYWRkcjsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlubGlu ZSB2b2lkIHNldF90cmJlX2Jhc2VfcG9pbnRlcih1bnNpZ25lZCBsb25nIGFkZHIpCj4+ICt7Cj4+ ICvCoMKgwqAgV0FSTl9PTihpc190cmJlX2VuYWJsZWQoKSk7Cj4+ICvCoMKgwqAgV0FSTl9PTigh SVNfQUxJR05FRChhZGRyLCAoMVVMIDw8IFRSQkxJTUlUUl9MSU1JVF9TSElGVCkpKTsKPiAKPiBU UkJCQVNFUl9CQVNFX1NISUZUID8KClJpZ2h0LCB3aWxsIHJlcGxhY2UuCgotIEFuc2h1bWFuCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0t a2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcK aHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2Vy bmVsCg==