Received: by 2002:a05:7412:f589:b0:e2:908c:2ebd with SMTP id eh9csp1041787rdb; Wed, 1 Nov 2023 09:39:37 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEIC7RZt7CAH4Gc5mFE7nqzBvFD/ASmEga78CinGmFXcoS0/Tp/nFuThkUUOMqixCEaJ/5V X-Received: by 2002:a17:903:2292:b0:1cc:474a:ddeb with SMTP id b18-20020a170903229200b001cc474addebmr12374500plh.47.1698856777572; Wed, 01 Nov 2023 09:39:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698856777; cv=none; d=google.com; s=arc-20160816; b=gkZVjVbpFvaVzR4xx1AauMh+v1Zd0QPFV1VLfNocQZvPkrxJoqT9cnznUWFtz1XEwo /wfinAbBZYoDGSUSixkf2UuU8JVX235jQ1CYchvEIXv0ZZxk0gAjtZ6xM0YzR8JNcNAq L0w6lbq3yS7qTtOmaCDsR+ZTI+lO4dlE8gqwRVXzG3d2w9bWE+QPdP3ECVuaCFdldv7M 3VcFevOHz30hrU50XXFaosyB9tOtFddGcnuW55b2QH2zkU2Y9W6NBf3k//XO4JO26T+N kZ63KThuiUBvHcQGyo4CTm2efyg635xz/aHCzR3vy/wStbMKWD80r6N0ncrrHQXIMdXG BfAw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:user-agent :content-transfer-encoding:organization:references:in-reply-to:date :cc:to:from:subject:message-id:dkim-signature; bh=8PYwThB9g2MJNLQw9yT3owqV2gq6dO6XQ9tTGe7GOo0=; fh=6GQe0huvF66Jx8EQbhLsKzwJagHH6JvpLP6riXw8fjM=; b=YgDy15JKx+HmWg4zvbc5lkiDWXp5JDL5uFMp1nDfG9laf8AkZD3ACULALrzMeGNeUh mrrJcGtlyVQzqIUT5smIHEz8GqiDUFL3PMFLPZ6cW2DcANeeYLLcXCJYzayivyxhMves RIl4b0/5SVf7GnzzQqKfWDcxHgqF8qn8l4pklGpNuOBHPZiEFtre4oqVWcVpetZDg12o lGhazqyEGFYtdi69RWm6gwn5D/FkMPNpoZQmRYbImERovllaBLFG+zWQj2yvml2+smW4 g3LY9XTMzdkiRCjno27yCwMnL04pVicHnyUBEb0OfxQtNgWVlRdnCa+NlUClQNbYIcpv lxaQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=eSJDGHxi; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id t13-20020a1709028c8d00b001ca7fab771esi3195853plo.609.2023.11.01.09.39.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Nov 2023 09:39:37 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=eSJDGHxi; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id CB6C28166937; Wed, 1 Nov 2023 09:39:35 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234113AbjKAQj2 (ORCPT + 99 others); Wed, 1 Nov 2023 12:39:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38978 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233817AbjKAQjY (ORCPT ); Wed, 1 Nov 2023 12:39:24 -0400 Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.20]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 94AC7120 for ; Wed, 1 Nov 2023 09:39:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1698856753; x=1730392753; h=message-id:subject:from:to:cc:date:in-reply-to: references:content-transfer-encoding:mime-version; bh=8PYwThB9g2MJNLQw9yT3owqV2gq6dO6XQ9tTGe7GOo0=; b=eSJDGHxiYt/tm4lcNFiydK3XYBDH1mDcMbumzU4U7om4urn5g0tGpTwi oVRaa3bVZ/9B1L2Fdrc+sAiRpPmJubRiXuz2DQ2yydOCEWyKZZI2aw2s9 WMjayeIJxu+3Wcf91igjAhzNiHE0aYeNy0UqBlzAQ0j7xLNdmae4Khuen OHldDlrepP0DNdiIxMSbYoOykZvx/zhFvM8jT4fY//d1HdOW+kQlLg5xA +Ykwa2HAqnWKXIjg4B/s+yYf2c/DsrLiBFKSVqm3hoZexWM5uzwvUbOQj uBi+sAojRPDAaWwvLqnN2dhyx4mVS3k8smRWyhJ7E82VnWCJi5AJ4yL4f A==; X-IronPort-AV: E=McAfee;i="6600,9927,10881"; a="378912987" X-IronPort-AV: E=Sophos;i="6.03,268,1694761200"; d="scan'208";a="378912987" Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Nov 2023 09:38:52 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10881"; a="760985953" X-IronPort-AV: E=Sophos;i="6.03,268,1694761200"; d="scan'208";a="760985953" Received: from sbint17x-mobl.gar.corp.intel.com (HELO [10.249.254.166]) ([10.249.254.166]) by orsmga002-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Nov 2023 09:38:49 -0700 Message-ID: <25ac1a025060f7aeb5af363124c6919d7742e8cf.camel@linux.intel.com> Subject: Re: [PATCH drm-misc-next v7 4/7] drm/gpuvm: add an abstraction for a VM / BO combination From: Thomas =?ISO-8859-1?Q?Hellstr=F6m?= To: Danilo Krummrich , airlied@gmail.com, daniel@ffwll.ch, matthew.brost@intel.com, sarah.walker@imgtec.com, donald.robson@imgtec.com, boris.brezillon@collabora.com, christian.koenig@amd.com, faith@gfxstrand.net Cc: nouveau@lists.freedesktop.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Date: Wed, 01 Nov 2023 17:38:46 +0100 In-Reply-To: <6fa058a4-20d3-44b9-af58-755cfb375d75@redhat.com> References: <20231023201659.25332-1-dakr@redhat.com> <20231023201659.25332-5-dakr@redhat.com> <6fa058a4-20d3-44b9-af58-755cfb375d75@redhat.com> Organization: Intel Sweden AB, Registration Number: 556189-6027 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.46.4 (3.46.4-1.fc37) MIME-Version: 1.0 X-Spam-Status: No, score=-2.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Wed, 01 Nov 2023 09:39:35 -0700 (PDT) T24gVHVlLCAyMDIzLTEwLTMxIGF0IDE4OjM4ICswMTAwLCBEYW5pbG8gS3J1bW1yaWNoIHdyb3Rl Ogo+IE9uIDEwLzMxLzIzIDExOjMyLCBUaG9tYXMgSGVsbHN0csO2bSB3cm90ZToKPiA+IE9uIE1v biwgMjAyMy0xMC0yMyBhdCAyMjoxNiArMDIwMCwgRGFuaWxvIEtydW1tcmljaCB3cm90ZToKPiA+ ID4gQWRkIGFuIGFic3RyYWN0aW9uIGxheWVyIGJldHdlZW4gdGhlIGRybV9ncHV2YSBtYXBwaW5n cyBvZiBhCj4gPiA+IHBhcnRpY3VsYXIKPiA+ID4gZHJtX2dlbV9vYmplY3QgYW5kIHRoaXMgR0VN IG9iamVjdCBpdHNlbGYuIFRoZSBhYnN0cmFjdGlvbgo+ID4gPiByZXByZXNlbnRzCj4gPiA+IGEK PiA+ID4gY29tYmluYXRpb24gb2YgYSBkcm1fZ2VtX29iamVjdCBhbmQgZHJtX2dwdXZtLiBUaGUg ZHJtX2dlbV9vYmplY3QKPiA+ID4gaG9sZHMKPiA+ID4gYSBsaXN0IG9mIGRybV9ncHV2bV9ibyBz dHJ1Y3R1cmVzICh0aGUgc3RydWN0dXJlIHJlcHJlc2VudGluZwo+ID4gPiB0aGlzCj4gPiA+IGFi c3RyYWN0aW9uKSwgd2hpbGUgZWFjaCBkcm1fZ3B1dm1fYm8gY29udGFpbnMgbGlzdCBvZiBtYXBw aW5ncwo+ID4gPiBvZgo+ID4gPiB0aGlzCj4gPiA+IEdFTSBvYmplY3QuCj4gPiA+IAo+ID4gPiBU aGlzIGhhcyBtdWx0aXBsZSBhZHZhbnRhZ2VzOgo+ID4gPiAKPiA+ID4gMSkgV2UgY2FuIHVzZSB0 aGUgZHJtX2dwdXZtX2JvIHN0cnVjdHVyZSB0byBhdHRhY2ggaXQgdG8gdmFyaW91cwo+ID4gPiBs aXN0cwo+ID4gPiDCoMKgwqAgb2YgdGhlIGRybV9ncHV2bS4gVGhpcyBpcyB1c2VmdWwgZm9yIHRy YWNraW5nIGV4dGVybmFsIGFuZAo+ID4gPiBldmljdGVkCj4gPiA+IMKgwqDCoCBvYmplY3RzIHBl ciBWTSwgd2hpY2ggaXMgaW50cm9kdWNlZCBpbiBzdWJzZXF1ZW50IHBhdGNoZXMuCj4gPiA+IAo+ ID4gPiAyKSBGaW5kaW5nIG1hcHBpbmdzIG9mIGEgY2VydGFpbiBkcm1fZ2VtX29iamVjdCBtYXBw ZWQgaW4gYQo+ID4gPiBjZXJ0YWluCj4gPiA+IMKgwqDCoCBkcm1fZ3B1dm0gYmVjb21lcyBtdWNo IGNoZWFwZXIuCj4gPiA+IAo+ID4gPiAzKSBEcml2ZXJzIGNhbiBkZXJpdmUgYW5kIGV4dGVuZCB0 aGUgc3RydWN0dXJlIHRvIGVhc2lseQo+ID4gPiByZXByZXNlbnQKPiA+ID4gwqDCoMKgIGRyaXZl ciBzcGVjaWZpYyBzdGF0ZXMgb2YgYSBCTyBmb3IgYSBjZXJ0YWluIEdQVVZNLgo+ID4gPiAKPiA+ ID4gVGhlIGlkZWEgb2YgdGhpcyBhYnN0cmFjdGlvbiB3YXMgdGFrZW4gZnJvbSBhbWRncHUsIGhl bmNlIHRoZQo+ID4gPiBjcmVkaXQKPiA+ID4gZm9yCj4gPiA+IHRoaXMgaWRlYSBnb2VzIHRvIHRo ZSBkZXZlbG9wZXJzIG9mIGFtZGdwdS4KPiA+ID4gCj4gPiA+IENjOiBDaHJpc3RpYW4gS8O2bmln IDxjaHJpc3RpYW4ua29lbmlnQGFtZC5jb20+Cj4gPiA+IFNpZ25lZC1vZmYtYnk6IERhbmlsbyBL cnVtbXJpY2ggPGRha3JAcmVkaGF0LmNvbT4KPiA+ID4gLS0tCj4gPiA+IMKgwqBkcml2ZXJzL2dw dS9kcm0vZHJtX2dwdXZtLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwgMzM1Cj4gPiA+ICsrKysr KysrKysrKysrKysrKysrKy0tCj4gPiA+IC0tCj4gPiA+IMKgwqBkcml2ZXJzL2dwdS9kcm0vbm91 dmVhdS9ub3V2ZWF1X3V2bW0uYyB8wqAgNjQgKysrLS0KPiA+ID4gwqDCoGluY2x1ZGUvZHJtL2Ry bV9nZW0uaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgIDMyICstLQo+ID4g PiDCoMKgaW5jbHVkZS9kcm0vZHJtX2dwdXZtLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgfCAxODggKysrKysrKysrKysrKy0KPiA+ID4gwqDCoDQgZmlsZXMgY2hhbmdlZCwgNTMzIGlu c2VydGlvbnMoKyksIDg2IGRlbGV0aW9ucygtKQo+ID4gPiAKPiA+ID4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9kcm1fZ3B1dm0uYwo+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1 dm0uYwo+ID4gPiBpbmRleCBjMDMzMzI4ODM0MzIuLjdmNGY1OTE5Zjg0YyAxMDA2NDQKPiA+ID4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9ncHV2bS5jCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9kcm1fZ3B1dm0uYwo+ID4gPiBAQCAtNzAsNiArNzAsMTggQEAKPiA+ID4gwqDCoCAqICZk cm1fZ2VtX29iamVjdCwgc3VjaCBhcyB0aGUgJmRybV9nZW1fb2JqZWN0IGNvbnRhaW5pbmcgdGhl Cj4gPiA+IHJvb3QKPiA+ID4gcGFnZSB0YWJsZSwKPiA+ID4gwqDCoCAqIGJ1dCBpdCBjYW4gYWxz byBiZSBhICdkdW1teScgb2JqZWN0LCB3aGljaCBjYW4gYmUgYWxsb2NhdGVkCj4gPiA+IHdpdGgK PiA+ID4gwqDCoCAqIGRybV9ncHV2bV9yZXN2X29iamVjdF9hbGxvYygpLgo+ID4gPiArICoKPiA+ ID4gKyAqIEluIG9yZGVyIHRvIGNvbm5lY3QgYSBzdHJ1Y3QgZHJtX2dwdXZhIGl0cyBiYWNraW5n Cj4gPiA+ICZkcm1fZ2VtX29iamVjdCBlYWNoCj4gPiA+ICsgKiAmZHJtX2dlbV9vYmplY3QgbWFp bnRhaW5zIGEgbGlzdCBvZiAmZHJtX2dwdXZtX2JvIHN0cnVjdHVyZXMsCj4gPiA+IGFuZAo+ID4g PiBlYWNoCj4gPiA+ICsgKiAmZHJtX2dwdXZtX2JvIGNvbnRhaW5zIGEgbGlzdCBvZiAmZHJtX2dw dXZhIHN0cnVjdHVyZXMuCj4gPiA+ICsgKgo+ID4gPiArICogQSAmZHJtX2dwdXZtX2JvIGlzIGFu IGFic3RyYWN0aW9uIHRoYXQgcmVwcmVzZW50cyBhCj4gPiA+IGNvbWJpbmF0aW9uCj4gPiA+IG9m IGEKPiA+ID4gKyAqICZkcm1fZ3B1dm0gYW5kIGEgJmRybV9nZW1fb2JqZWN0LiBFdmVyeSBzdWNo IGNvbWJpbmF0aW9uCj4gPiA+IHNob3VsZAo+ID4gPiBiZSB1bmlxdWUuCj4gPiA+ICsgKiBUaGlz IGlzIGVuc3VyZWQgYnkgdGhlIEFQSSB0aHJvdWdoIGRybV9ncHV2bV9ib19vYnRhaW4oKSBhbmQK PiA+ID4gKyAqIGRybV9ncHV2bV9ib19vYnRhaW5fcHJlYWxsb2MoKSB3aGljaCBmaXJzdCBsb29r IGludG8gdGhlCj4gPiA+IGNvcnJlc3BvbmRpbmcKPiA+ID4gKyAqICZkcm1fZ2VtX29iamVjdCBs aXN0IG9mICZkcm1fZ3B1dm1fYm9zIGZvciBhbiBleGlzdGluZwo+ID4gPiBpbnN0YW5jZQo+ID4g PiBvZiB0aGlzCj4gPiA+ICsgKiBwYXJ0aWN1bGFyIGNvbWJpbmF0aW9uLiBJZiBub3QgZXhpc3Rl bnQgYSBuZXcgaW5zdGFuY2UgaXMKPiA+ID4gY3JlYXRlZAo+ID4gPiBhbmQgbGlua2VkCj4gPiA+ ICsgKiB0byB0aGUgJmRybV9nZW1fb2JqZWN0Lgo+ID4gPiDCoMKgICovCj4gPiA+IMKgIAo+ID4g PiDCoMKgLyoqCj4gPiA+IEBAIC0zOTUsMjEgKzQwNywyOCBAQAo+ID4gPiDCoMKgLyoqCj4gPiA+ IMKgwqAgKiBET0M6IExvY2tpbmcKPiA+ID4gwqDCoCAqCj4gPiA+IC0gKiBHZW5lcmFsbHksIHRo ZSBHUFUgVkEgbWFuYWdlciBkb2VzIG5vdCB0YWtlIGNhcmUgb2YgbG9ja2luZwo+ID4gPiBpdHNl bGYsIGl0IGlzCj4gPiA+IC0gKiB0aGUgZHJpdmVycyByZXNwb25zaWJpbGl0eSB0byB0YWtlIGNh cmUgYWJvdXQgbG9ja2luZy4KPiA+ID4gRHJpdmVycwo+ID4gPiBtaWdodCB3YW50IHRvCj4gPiA+ IC0gKiBwcm90ZWN0IHRoZSBmb2xsb3dpbmcgb3BlcmF0aW9uczogaW5zZXJ0aW5nLCByZW1vdmlu ZyBhbmQKPiA+ID4gaXRlcmF0aW5nCj4gPiA+IC0gKiAmZHJtX2dwdXZhIG9iamVjdHMgYXMgd2Vs bCBhcyBnZW5lcmF0aW5nIGFsbCBraW5kcyBvZgo+ID4gPiBvcGVyYXRpb25zLAo+ID4gPiBzdWNo IGFzCj4gPiA+IC0gKiBzcGxpdCAvIG1lcmdlIG9yIHByZWZldGNoLgo+ID4gPiAtICoKPiA+ID4g LSAqIFRoZSBHUFUgVkEgbWFuYWdlciBhbHNvIGRvZXMgbm90IHRha2UgY2FyZSBvZiB0aGUgbG9j a2luZyBvZgo+ID4gPiB0aGUKPiA+ID4gYmFja2luZwo+ID4gPiAtICogJmRybV9nZW1fb2JqZWN0 IGJ1ZmZlcnMgR1BVIFZBIGxpc3RzIGJ5IGl0c2VsZjsgZHJpdmVycyBhcmUKPiA+ID4gcmVzcG9u c2libGUgdG8KPiA+ID4gLSAqIGVuZm9yY2UgbXV0dWFsIGV4Y2x1c2lvbiB1c2luZyBlaXRoZXIg dGhlIEdFTXMgZG1hX3Jlc3YgbG9jawo+ID4gPiBvcgo+ID4gPiBhbHRlcm5hdGl2ZWx5Cj4gPiA+ IC0gKiBhIGRyaXZlciBzcGVjaWZpYyBleHRlcm5hbCBsb2NrLiBGb3IgdGhlIGxhdHRlciBzZWUg YWxzbwo+ID4gPiAtICogZHJtX2dlbV9ncHV2YV9zZXRfbG9jaygpLgo+ID4gPiAtICoKPiA+ID4g LSAqIEhvd2V2ZXIsIHRoZSBHUFUgVkEgbWFuYWdlciBjb250YWlucyBsb2NrZGVwIGNoZWNrcyB0 byBlbnN1cmUKPiA+ID4gY2FsbGVycyBvZiBpdHMKPiA+ID4gLSAqIEFQSSBob2xkIHRoZSBjb3Jy ZXNwb25kaW5nIGxvY2sgd2hlbmV2ZXIgdGhlICZkcm1fZ2VtX29iamVjdHMKPiA+ID4gR1BVCj4g PiA+IFZBIGxpc3QgaXMKPiA+ID4gLSAqIGFjY2Vzc2VkIGJ5IGZ1bmN0aW9ucyBzdWNoIGFzIGRy bV9ncHV2YV9saW5rKCkgb3IKPiA+ID4gZHJtX2dwdXZhX3VubGluaygpLgo+ID4gPiArICogSW4g dGVybXMgb2YgbWFuYWdpbmcgJmRybV9ncHV2YSBlbnRyaWVzIERSTSBHUFVWTSBkb2VzIG5vdAo+ ID4gPiB0YWtlCj4gPiA+IGNhcmUgb2YKPiA+ID4gKyAqIGxvY2tpbmcgaXRzZWxmLCBpdCBpcyB0 aGUgZHJpdmVycyByZXNwb25zaWJpbGl0eSB0byB0YWtlIGNhcmUKPiA+ID4gYWJvdXQgbG9ja2lu Zy4KPiA+ID4gKyAqIERyaXZlcnMgbWlnaHQgd2FudCB0byBwcm90ZWN0IHRoZSBmb2xsb3dpbmcg b3BlcmF0aW9uczoKPiA+ID4gaW5zZXJ0aW5nLCByZW1vdmluZwo+ID4gPiArICogYW5kIGl0ZXJh dGluZyAmZHJtX2dwdXZhIG9iamVjdHMgYXMgd2VsbCBhcyBnZW5lcmF0aW5nIGFsbAo+ID4gPiBr aW5kcwo+ID4gPiBvZgo+ID4gPiArICogb3BlcmF0aW9ucywgc3VjaCBhcyBzcGxpdCAvIG1lcmdl IG9yIHByZWZldGNoLgo+ID4gPiArICoKPiA+ID4gKyAqIERSTSBHUFVWTSBhbHNvIGRvZXMgbm90 IHRha2UgY2FyZSBvZiB0aGUgbG9ja2luZyBvZiB0aGUKPiA+ID4gYmFja2luZwo+ID4gPiArICog JmRybV9nZW1fb2JqZWN0IGJ1ZmZlcnMgR1BVIFZBIGxpc3RzIGFuZCAmZHJtX2dwdXZtX2JvCj4g PiA+IGFic3RyYWN0aW9ucyBieQo+ID4gPiArICogaXRzZWxmOyBkcml2ZXJzIGFyZSByZXNwb25z aWJsZSB0byBlbmZvcmNlIG11dHVhbCBleGNsdXNpb24KPiA+ID4gdXNpbmcKPiA+ID4gZWl0aGVy IHRoZQo+ID4gPiArICogR0VNcyBkbWFfcmVzdiBsb2NrIG9yIGFsdGVybmF0aXZlbHkgYSBkcml2 ZXIgc3BlY2lmaWMKPiA+ID4gZXh0ZXJuYWwKPiA+ID4gbG9jay4gRm9yIHRoZQo+ID4gPiArICog bGF0dGVyIHNlZSBhbHNvIGRybV9nZW1fZ3B1dmFfc2V0X2xvY2soKS4KPiA+ID4gKyAqCj4gPiA+ ICsgKiBIb3dldmVyLCBEUk0gR1BVVk0gY29udGFpbnMgbG9ja2RlcCBjaGVja3MgdG8gZW5zdXJl IGNhbGxlcnMKPiA+ID4gb2YKPiA+ID4gaXRzIEFQSSBob2xkCj4gPiA+ICsgKiB0aGUgY29ycmVz cG9uZGluZyBsb2NrIHdoZW5ldmVyIHRoZSAmZHJtX2dlbV9vYmplY3RzIEdQVSBWQQo+ID4gPiBs aXN0Cj4gPiA+IGlzIGFjY2Vzc2VkCj4gPiA+ICsgKiBieSBmdW5jdGlvbnMgc3VjaCBhcyBkcm1f Z3B1dmFfbGluaygpIG9yIGRybV9ncHV2YV91bmxpbmsoKSwKPiA+ID4gYnV0Cj4gPiA+IGFsc28K PiA+ID4gKyAqIGRybV9ncHV2bV9ib19vYnRhaW4oKSBhbmQgZHJtX2dwdXZtX2JvX3B1dCgpLgo+ ID4gPiArICoKPiA+ID4gKyAqIFRoZSBsYXR0ZXIgaXMgcmVxdWlyZWQgc2luY2Ugb24gY3JlYXRp b24gYW5kIGRlc3RydWN0aW9uIG9mIGEKPiA+ID4gJmRybV9ncHV2bV9ibwo+ID4gPiArICogdGhl ICZkcm1fZ3B1dm1fYm8gaXMgYXR0YWNoZWQgLyByZW1vdmVkIGZyb20gdGhlCj4gPiA+ICZkcm1f Z2VtX29iamVjdHMKPiA+ID4gZ3B1dmEgbGlzdC4KPiA+ID4gKyAqIFN1YnNlcXVlbnQgY2FsbHMg dG8gZHJtX2dwdXZtX2JvX29idGFpbigpIGZvciB0aGUgc2FtZQo+ID4gPiAmZHJtX2dwdXZtCj4g PiA+IGFuZAo+ID4gPiArICogJmRybV9nZW1fb2JqZWN0IG11c3QgYmUgYWJsZSB0byBvYnNlcnZl IHByZXZpb3VzIGNyZWF0aW9ucwo+ID4gPiBhbmQKPiA+ID4gZGVzdHJ1Y3Rpb25zCj4gPiA+ICsg KiBvZiAmZHJtX2dwdXZtX2JvcyBpbiBvcmRlciB0byBrZWVwIGluc3RhbmNlcyB1bmlxdWUuCj4g PiA+IMKgwqAgKi8KPiA+ID4gwqAgCj4gPiA+IMKgwqAvKioKPiA+ID4gQEAgLTQzOSw2ICs0NTgs NyBAQAo+ID4gPiDCoMKgICrCoMKgwqDCoMKgewo+ID4gPiDCoMKgICrCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dmFfb3BzICpvcHM7Cj4gPiA+IMKgwqAgKsKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2YV9vcCAqb3AKPiA+ID4gKyAqwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZtX2JvICp2bV9ibzsKPiA+ID4gwqDC oCAqCj4gPiA+IMKgwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJpdmVyX2xvY2tfdmFf c3BhY2UoKTsKPiA+ID4gwqDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBvcHMgPSBkcm1f Z3B1dm1fc21fbWFwX29wc19jcmVhdGUoZ3B1dm0sIGFkZHIsCj4gPiA+IHJhbmdlLAo+ID4gPiBA QCAtNDQ2LDYgKzQ2NiwxMCBAQAo+ID4gPiDCoMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGlmIChJU19FUlIob3BzKSkKPiA+ID4gwqDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIFBUUl9FUlIob3BzKTsKPiA+ID4gwqDCoCAqCj4gPiA+ICsg KsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdm1fYm8gPSBkcm1fZ3B1dm1fYm9fb2J0YWluKGdw dXZtLCBvYmopOwo+ID4gPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChJU19FUlIo dm1fYm8pKQo+ID4gPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXR1cm4gUFRSX0VSUih2bV9ibyk7Cj4gPiA+ICsgKgo+ID4gPiDCoMKgICrCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9mb3JfZWFjaF9vcChvcCwgb3BzKSB7Cj4gPiA+IMKg wqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1f Z3B1dmEgKnZhOwo+ID4gPiDCoMKgICoKPiA+ID4gQEAgLTQ1OCw3ICs0ODIsNyBAQAo+ID4gPiDC oMKgICoKPiA+ID4gwqDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGRyaXZlcl92bV9tYXAoKTsKPiA+ID4gwqDCoCAqwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2 YV9tYXAoZ3B1dm0sIHZhLCAmb3AtCj4gPiA+ID5tYXApOwo+ID4gPiAtICrCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX2xp bmsodmEpOwo+ID4gPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX2xpbmsodmEsIHZtX2JvKTsKPiA+ID4gwqDCoCAq Cj4gPiA+IMKgwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBicmVhazsKPiA+ID4gwqDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgY2FzZSBEUk1fR1BVVkFfT1BfUkVNQVA6IHsKPiA+ID4gQEAgLTQ4 NSwxMSArNTA5LDExIEBACj4gPiA+IMKgwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcml2ZXJfdm1fcmVtYXAoKTsKPiA+ID4gwqDC oCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGRybV9ncHV2YV9yZW1hcChwcmV2LCBuZXh0LCAmb3AtCj4gPiA+ID4gcmVtYXApOwo+ID4g PiDCoMKgICoKPiA+ID4gLSAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV91bmxpbmsodmEpOwo+ID4gPiDCoMKgICrCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYg KHByZXYpCj4gPiA+IC0gKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX2xpbmsocHJldik7Cj4g PiA+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX2xpbmsocHJldiwgdmEtCj4gPiA+ID4g dm1fYm8pOwo+ID4gPiDCoMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKG5leHQpCj4gPiA+IC0gKsKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ZHJtX2dwdXZhX2xpbmsobmV4dCk7Cj4gPiA+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZh X2xpbmsobmV4dCwgdmEtCj4gPiA+ID4gdm1fYm8pOwo+ID4gPiArICrCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX3VubGlu ayh2YSk7Cj4gPiA+IMKgwqAgKgo+ID4gPiDCoMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gPiA+IMKgwqAgKsKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiA+ID4gQEAgLTUwNSw2ICs1 MjksNyBAQAo+ID4gPiDCoMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gPiA+IMKgwqAgKsKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiA+ID4gwqDCoCAqwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqB9Cj4gPiA+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZtX2Jv X3B1dCh2bV9ibyk7Cj4gPiA+IMKgwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJpdmVy X3VubG9ja192YV9zcGFjZSgpOwo+ID4gPiDCoMKgICoKPiA+ID4gwqDCoCAqwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiA+ID4gQEAgLTUxNCw2ICs1MzksNyBAQAo+ID4gPiDC oMKgICoKPiA+ID4gwqDCoCAqwqDCoMKgwqDCoHN0cnVjdCBkcml2ZXJfY29udGV4dCB7Cj4gPiA+ IMKgwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2bSAqZ3B1dm07 Cj4gPiA+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2bV9ibyAq dm1fYm87Cj4gPiA+IMKgwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9n cHV2YSAqbmV3X3ZhOwo+ID4gPiDCoMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVj dCBkcm1fZ3B1dmEgKnByZXZfdmE7Cj4gPiA+IMKgwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgc3RydWN0IGRybV9ncHV2YSAqbmV4dF92YTsKPiA+ID4gQEAgLTUzNCw2ICs1NjAsNyBAQAo+ ID4gPiDCoMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCj4gPiA+IHU2NAo+ID4g PiBvZmZzZXQpCj4gPiA+IMKgwqAgKsKgwqDCoMKgwqB7Cj4gPiA+IMKgwqAgKsKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgc3RydWN0IGRyaXZlcl9jb250ZXh0IGN0eDsKPiA+ID4gKyAqwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZtX2JvICp2bV9ibzsKPiA+ID4gwqDC oCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZhX29wcyAqb3BzOwo+ ID4gPiDCoMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dmFfb3Ag Km9wOwo+ID4gPiDCoMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludCByZXQgPSAwOwo+ ID4gPiBAQCAtNTQzLDE2ICs1NzAsMjMgQEAKPiA+ID4gwqDCoCAqwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBjdHgubmV3X3ZhID0ga3phbGxvYyhzaXplb2YoKmN0eC5uZXdfdmEpLAo+ID4gPiBH RlBfS0VSTkVMKTsKPiA+ID4gwqDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjdHgucHJl dl92YSA9IGt6YWxsb2Moc2l6ZW9mKCpjdHgucHJldl92YSksCj4gPiA+IEdGUF9LRVJORUwpOwo+ ID4gPiDCoMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGN0eC5uZXh0X3ZhID0ga3phbGxv YyhzaXplb2YoKmN0eC5uZXh0X3ZhKSwKPiA+ID4gR0ZQX0tFUk5FTCk7Cj4gPiA+IC0gKsKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFjdHgubmV3X3ZhIHx8ICFjdHgucHJldl92YSB8fCAh Y3R4Lm5leHRfdmEpCj4gPiA+IHsKPiA+ID4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBj dHgudm1fYm8gPSBkcm1fZ3B1dm1fYm9fY3JlYXRlKGdwdXZtLCBvYmopOwo+ID4gPiArICrCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghY3R4Lm5ld192YSB8fCAhY3R4LnByZXZfdmEgfHwg IWN0eC5uZXh0X3ZhCj4gPiA+IHx8Cj4gPiA+ICF2bV9ibykgewo+ID4gPiDCoMKgICrCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSAtRU5PTUVNOwo+ID4gPiDC oMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIG91dDsK PiA+ID4gwqDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gPiA+IMKgwqAgKgo+ID4g PiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8vIFR5cGljYWxseSBwcm90ZWN0ZWQgd2l0 aCBhIGRyaXZlciBzcGVjaWZpYyBHRU0KPiA+ID4gZ3B1dmEgbG9jawo+ID4gPiArICrCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoC8vIHVzZWQgaW4gdGhlIGZlbmNlIHNpZ25hbGluZyBwYXRoIGZv cgo+ID4gPiBkcm1fZ3B1dmFfbGluaygpIGFuZAo+ID4gPiArICrCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoC8vIGRybV9ncHV2YV91bmxpbmsoKSwgaGVuY2UgcHJlLWFsbG9jYXRlLgo+ID4gPiAr ICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGN0eC52bV9ibyA9Cj4gPiA+IGRybV9ncHV2bV9i b19vYnRhaW5fcHJlYWxsb2MoY3R4LnZtX2JvKTsKPiA+ID4gKyAqCj4gPiA+IMKgwqAgKsKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJpdmVyX2xvY2tfdmFfc3BhY2UoKTsKPiA+ID4gwqDCoCAq wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBkcm1fZ3B1dm1fc21fbWFwKGdwdXZtLCAm Y3R4LCBhZGRyLCByYW5nZSwKPiA+ID4gb2JqLAo+ID4gPiBvZmZzZXQpOwo+ID4gPiDCoMKgICrC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRyaXZlcl91bmxvY2tfdmFfc3BhY2UoKTsKPiA+ID4g wqDCoCAqCj4gPiA+IMKgwqAgKsKgwqDCoMKgwqBvdXQ6Cj4gPiA+ICsgKsKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgZHJtX2dwdXZtX2JvX3B1dChjdHgudm1fYm8pOwo+ID4gPiDCoMKgICrCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGtmcmVlKGN0eC5uZXdfdmEpOwo+ID4gPiDCoMKgICrCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGtmcmVlKGN0eC5wcmV2X3ZhKTsKPiA+ID4gwqDCoCAqwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBrZnJlZShjdHgubmV4dF92YSk7Cj4gPiA+IEBAIC01NjUs NyArNTk5LDcgQEAKPiA+ID4gwqDCoCAqCj4gPiA+IMKgwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgZHJtX2dwdXZhX21hcChjdHgtPnZtLCBjdHgtPm5ld192YSwgJm9wLT5tYXApOwo+ID4g PiDCoMKgICoKPiA+ID4gLSAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfbGlu ayhjdHgtPm5ld192YSk7Cj4gPiA+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dw dXZhX2xpbmsoY3R4LT5uZXdfdmEsIGN0eC0+dm1fYm8pOwo+ID4gPiDCoMKgICoKPiA+ID4gwqDC oCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvLyBwcmV2ZW50IHRoZSBuZXcgR1BVVkEgZnJv bSBiZWluZyBmcmVlZCBpbgo+ID4gPiDCoMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8v IGRyaXZlcl9tYXBwaW5nX2NyZWF0ZSgpCj4gPiA+IEBAIC01NzcsMjIgKzYxMSwyMyBAQAo+ID4g PiDCoMKgICrCoMKgwqDCoMKgaW50IGRyaXZlcl9ncHV2YV9yZW1hcChzdHJ1Y3QgZHJtX2dwdXZh X29wICpvcCwgdm9pZAo+ID4gPiAqX19jdHgpCj4gPiA+IMKgwqAgKsKgwqDCoMKgwqB7Cj4gPiA+ IMKgwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRyaXZlcl9jb250ZXh0ICpj dHggPSBfX2N0eDsKPiA+ID4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJt X2dwdXZhICp2YSA9IG9wLT5yZW1hcC51bm1hcC0+dmE7Cj4gPiA+IMKgwqAgKgo+ID4gPiDCoMKg ICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9yZW1hcChjdHgtPnByZXZfdmEs IGN0eC0+bmV4dF92YSwgJm9wLQo+ID4gPiA+IHJlbWFwKTsKPiA+ID4gwqDCoCAqCj4gPiA+IC0g KsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX3VubGluayhvcC0+cmVtYXAudW5t YXAtPnZhKTsKPiA+ID4gLSAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBrZnJlZShvcC0+cmVt YXAudW5tYXAtPnZhKTsKPiA+ID4gLSAqCj4gPiA+IMKgwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgaWYgKG9wLT5yZW1hcC5wcmV2KSB7Cj4gPiA+IC0gKsKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9saW5rKGN0eC0+cHJldl92YSk7Cj4gPiA+ ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9s aW5rKGN0eC0+cHJldl92YSwgdmEtPnZtX2JvKTsKPiA+ID4gwqDCoCAqwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY3R4LT5wcmV2X3ZhID0gTlVMTDsKPiA+ID4gwqDC oCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gPiA+IMKgwqAgKgo+ID4gPiDCoMKgICrC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChvcC0+cmVtYXAubmV4dCkgewo+ID4gPiAtICrC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfbGluayhj dHgtPm5leHRfdmEpOwo+ID4gPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBkcm1fZ3B1dmFfbGluayhjdHgtPm5leHRfdmEsIHZhLT52bV9ibyk7Cj4gPiA+IMKg wqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGN0eC0+bmV4dF92 YSA9IE5VTEw7Cj4gPiA+IMKgwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ID4gPiDC oMKgICoKPiA+ID4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfdW5saW5r KHZhKTsKPiA+ID4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBrZnJlZSh2YSk7Cj4gPiA+ ICsgKgo+ID4gPiDCoMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ID4g PiDCoMKgICrCoMKgwqDCoMKgfQo+ID4gPiDCoMKgICoKPiA+ID4gQEAgLTc3NCw2ICs4MDksMTk0 IEBAIGRybV9ncHV2bV9kZXN0cm95KHN0cnVjdCBkcm1fZ3B1dm0gKmdwdXZtKQo+ID4gPiDCoMKg fQo+ID4gPiDCoMKgRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dwdXZtX2Rlc3Ryb3kpOwo+ID4gPiDC oCAKPiA+ID4gKy8qKgo+ID4gPiArICogZHJtX2dwdXZtX2JvX2NyZWF0ZSgpIC0gY3JlYXRlIGEg bmV3IGluc3RhbmNlIG9mIHN0cnVjdAo+ID4gPiBkcm1fZ3B1dm1fYm8KPiA+ID4gKyAqIEBncHV2 bTogVGhlICZkcm1fZ3B1dm0gdGhlIEBvYmogaXMgbWFwcGVkIGluLgo+ID4gPiArICogQG9iajog VGhlICZkcm1fZ2VtX29iamVjdCBiZWluZyBtYXBwZWQgaW4gdGhlIEBncHV2bS4KPiA+ID4gKyAq Cj4gPiA+ICsgKiBJZiBwcm92aWRlZCBieSB0aGUgZHJpdmVyLCB0aGlzIGZ1bmN0aW9uIHVzZXMg dGhlCj4gPiA+ICZkcm1fZ3B1dm1fb3BzCj4gPiA+ICsgKiB2bV9ib19hbGxvYygpIGNhbGxiYWNr IHRvIGFsbG9jYXRlLgo+ID4gPiArICoKPiA+ID4gKyAqIFJldHVybnM6IGEgcG9pbnRlciB0byB0 aGUgJmRybV9ncHV2bV9ibyBvbiBzdWNjZXNzLCBOVUxMIG9uCj4gPiAKPiA+IFN0aWxsIG5lZWRz IHMvUmV0dXJuczovUmV0dXJuOi9nCj4gPiAKPiA+ID4gZmFpbHVyZQo+ID4gPiArICovCj4gPiA+ ICtzdHJ1Y3QgZHJtX2dwdXZtX2JvICoKPiA+ID4gK2RybV9ncHV2bV9ib19jcmVhdGUoc3RydWN0 IGRybV9ncHV2bSAqZ3B1dm0sCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCj4gPiA+ICt7Cj4gPiA+ICvCoMKgwqDC oMKgwqDCoGNvbnN0IHN0cnVjdCBkcm1fZ3B1dm1fb3BzICpvcHMgPSBncHV2bS0+b3BzOwo+ID4g PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZtX2JvICp2bV9ibzsKPiA+ID4gKwo+ID4g PiArwqDCoMKgwqDCoMKgwqBpZiAob3BzICYmIG9wcy0+dm1fYm9fYWxsb2MpCj4gPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2bV9ibyA9IG9wcy0+dm1fYm9fYWxsb2MoKTsKPiA+ ID4gK8KgwqDCoMKgwqDCoMKgZWxzZQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgdm1fYm8gPSBremFsbG9jKHNpemVvZigqdm1fYm8pLCBHRlBfS0VSTkVMKTsKPiA+ID4gKwo+ ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAodW5saWtlbHkoIXZtX2JvKSkKPiA+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBOVUxMOwo+ID4gPiArCj4gPiA+ICvCoMKgwqDC oMKgwqDCoHZtX2JvLT52bSA9IGdwdXZtOwo+ID4gPiArwqDCoMKgwqDCoMKgwqB2bV9iby0+b2Jq ID0gb2JqOwo+ID4gPiArwqDCoMKgwqDCoMKgwqBkcm1fZ2VtX29iamVjdF9nZXQob2JqKTsKPiA+ ID4gKwo+ID4gPiArwqDCoMKgwqDCoMKgwqBrcmVmX2luaXQoJnZtX2JvLT5rcmVmKTsKPiA+ID4g K8KgwqDCoMKgwqDCoMKgSU5JVF9MSVNUX0hFQUQoJnZtX2JvLT5saXN0LmdwdXZhKTsKPiA+ID4g K8KgwqDCoMKgwqDCoMKgSU5JVF9MSVNUX0hFQUQoJnZtX2JvLT5saXN0LmVudHJ5LmdlbSk7Cj4g PiA+ICsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHZtX2JvOwo+ID4gPiArfQo+ID4gPiAr RVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dwdXZtX2JvX2NyZWF0ZSk7Cj4gPiA+ICsKPiA+ID4gK3N0 YXRpYyB2b2lkCj4gPiA+ICtkcm1fZ3B1dm1fYm9fZGVzdHJveShzdHJ1Y3Qga3JlZiAqa3JlZikK PiA+ID4gK3sKPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2bV9ibyAqdm1fYm8g PSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0Cj4gPiA+IGRybV9ncHV2bV9ibywKPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBrcmVmKTsKPiA+ID4gK8KgwqDC oMKgwqDCoMKgc3RydWN0IGRybV9ncHV2bSAqZ3B1dm0gPSB2bV9iby0+dm07Cj4gPiA+ICvCoMKg wqDCoMKgwqDCoGNvbnN0IHN0cnVjdCBkcm1fZ3B1dm1fb3BzICpvcHMgPSBncHV2bS0+b3BzOwo+ ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IHZtX2JvLT5v Ymo7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoGJvb2wgbG9jayA9ICFkcm1fZ3B1dm1fcmVzdl9wcm90 ZWN0ZWQoZ3B1dm0pOwo+ID4gPiArCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmICghbG9jaykKPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2bV9yZXN2X2Fzc2VydF9o ZWxkKGdwdXZtKTsKPiA+ID4gKwo+ID4gPiArwqDCoMKgwqDCoMKgwqBkcm1fZ2VtX2dwdXZhX2Fz c2VydF9sb2NrX2hlbGQob2JqKTsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgbGlzdF9kZWwoJnZtX2Jv LT5saXN0LmVudHJ5LmdlbSk7Cj4gPiA+ICsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKG9wcyAm JiBvcHMtPnZtX2JvX2ZyZWUpCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBv cHMtPnZtX2JvX2ZyZWUodm1fYm8pOwo+ID4gPiArwqDCoMKgwqDCoMKgwqBlbHNlCj4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBrZnJlZSh2bV9ibyk7Cj4gPiA+ICsKPiA+ID4g K8KgwqDCoMKgwqDCoMKgZHJtX2dlbV9vYmplY3RfcHV0KG9iaik7Cj4gPiA+ICt9Cj4gPiA+ICsK PiA+ID4gKy8qKgo+ID4gPiArICogZHJtX2dwdXZtX2JvX3B1dCgpIC0gZHJvcCBhIHN0cnVjdCBk cm1fZ3B1dm1fYm8gcmVmZXJlbmNlCj4gPiA+ICsgKiBAdm1fYm86IHRoZSAmZHJtX2dwdXZtX2Jv IHRvIHJlbGVhc2UgdGhlIHJlZmVyZW5jZSBvZgo+ID4gPiArICoKPiA+ID4gKyAqIFRoaXMgcmVs ZWFzZXMgYSByZWZlcmVuY2UgdG8gQHZtX2JvLgo+ID4gPiArICoKPiA+ID4gKyAqIElmIHRoZSBy ZWZlcmVuY2UgY291bnQgZHJvcHMgdG8gemVybywgdGhlICZncHV2bV9ibyBpcwo+ID4gPiBkZXN0 cm95ZWQsCj4gPiA+IHdoaWNoCj4gPiA+ICsgKiBpbmNsdWRlcyByZW1vdmluZyBpdCBmcm9tIHRo ZSBHRU1zIGdwdXZhIGxpc3QuIEhlbmNlLCBpZiBhCj4gPiA+IGNhbGwKPiA+ID4gdG8gdGhpcwo+ ID4gPiArICogZnVuY3Rpb24gY2FuIHBvdGVudGlhbGx5IGxldCB0aGUgcmVmZXJlbmNlIGNvdW50 IHRvIHplcm8gdGhlCj4gPiA+IGNhbGxlciBtdXN0Cj4gPiA+ICsgKiBob2xkIHRoZSBkbWEtcmVz diBvciBkcml2ZXIgc3BlY2lmaWMgR0VNIGdwdXZhIGxvY2suCj4gPiA+ICsgKi8KPiA+ID4gK3Zv aWQKPiA+ID4gK2RybV9ncHV2bV9ib19wdXQoc3RydWN0IGRybV9ncHV2bV9ibyAqdm1fYm8pCj4g PiA+ICt7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmICh2bV9ibykKPiA+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGtyZWZfcHV0KCZ2bV9iby0+a3JlZiwgZHJtX2dwdXZtX2JvX2Rl c3Ryb3kpOwo+ID4gPiArfQo+ID4gPiArRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dwdXZtX2JvX3B1 dCk7Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2dwdXZtX2JvICoKPiA+ID4gK19f ZHJtX2dwdXZtX2JvX2ZpbmQoc3RydWN0IGRybV9ncHV2bSAqZ3B1dm0sCj4gPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmop Cj4gPiA+ICt7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dm1fYm8gKnZtX2Jv Owo+ID4gPiArCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGRybV9nZW1fZ3B1dmFfYXNzZXJ0X2xvY2tf aGVsZChvYmopOwo+ID4gPiArwqDCoMKgwqDCoMKgwqBkcm1fZ2VtX2Zvcl9lYWNoX2dwdXZtX2Jv KHZtX2JvLCBvYmopCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAodm1f Ym8tPnZtID09IGdwdXZtKQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldHVybiB2bV9ibzsKPiA+ID4gKwo+ID4gPiArwqDCoMKgwqDCoMKgwqBy ZXR1cm4gTlVMTDsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArLyoqCj4gPiA+ICsgKiBkcm1fZ3B1 dm1fYm9fZmluZCgpIC0gZmluZCB0aGUgJmRybV9ncHV2bV9ibyBmb3IgdGhlIGdpdmVuCj4gPiA+ ICsgKiAmZHJtX2dwdXZtIGFuZCAmZHJtX2dlbV9vYmplY3QKPiA+ID4gKyAqIEBncHV2bTogVGhl ICZkcm1fZ3B1dm0gdGhlIEBvYmogaXMgbWFwcGVkIGluLgo+ID4gPiArICogQG9iajogVGhlICZk cm1fZ2VtX29iamVjdCBiZWluZyBtYXBwZWQgaW4gdGhlIEBncHV2bS4KPiA+ID4gKyAqCj4gPiA+ ICsgKiBGaW5kIHRoZSAmZHJtX2dwdXZtX2JvIHJlcHJlc2VudGluZyB0aGUgY29tYmluYXRpb24g b2YgdGhlCj4gPiA+IGdpdmVuCj4gPiA+ICsgKiAmZHJtX2dwdXZtIGFuZCAmZHJtX2dlbV9vYmpl Y3QuIElmIGZvdW5kLCBpbmNyZWFzZXMgdGhlCj4gPiA+IHJlZmVyZW5jZQo+ID4gPiArICogY291 bnQgb2YgdGhlICZkcm1fZ3B1dm1fYm8gYWNjb3JkaW5nbHkuCj4gPiA+ICsgKgo+ID4gPiArICog UmV0dXJuczogYSBwb2ludGVyIHRvIHRoZSAmZHJtX2dwdXZtX2JvIG9uIHN1Y2Nlc3MsIE5VTEwg b24KPiA+ID4gZmFpbHVyZQo+ID4gPiArICovCj4gPiA+ICtzdHJ1Y3QgZHJtX2dwdXZtX2JvICoK PiA+ID4gK2RybV9ncHV2bV9ib19maW5kKHN0cnVjdCBkcm1fZ3B1dm0gKmdwdXZtLAo+ID4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpv YmopCj4gPiA+ICt7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dm1fYm8gKnZt X2JvID0gX19kcm1fZ3B1dm1fYm9fZmluZChncHV2bSwKPiA+ID4gb2JqKTsKPiA+ID4gKwo+ID4g PiArwqDCoMKgwqDCoMKgwqByZXR1cm4gdm1fYm8gPyBkcm1fZ3B1dm1fYm9fZ2V0KHZtX2JvKSA6 IE5VTEw7Cj4gPiA+ICt9Cj4gPiA+ICtFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1dm1fYm9fZmlu ZCk7Cj4gPiA+ICsKPiA+ID4gKy8qKgo+ID4gPiArICogZHJtX2dwdXZtX2JvX29idGFpbigpIC0g b2J0YWlucyBhbmQgaW5zdGFuY2Ugb2YgdGhlCj4gPiA+ICZkcm1fZ3B1dm1fYm8KPiA+ID4gZm9y IHRoZQo+ID4gPiArICogZ2l2ZW4gJmRybV9ncHV2bSBhbmQgJmRybV9nZW1fb2JqZWN0Cj4gPiA+ ICsgKiBAZ3B1dm06IFRoZSAmZHJtX2dwdXZtIHRoZSBAb2JqIGlzIG1hcHBlZCBpbi4KPiA+ID4g KyAqIEBvYmo6IFRoZSAmZHJtX2dlbV9vYmplY3QgYmVpbmcgbWFwcGVkIGluIHRoZSBAZ3B1dm0u Cj4gPiA+ICsgKgo+ID4gPiArICogRmluZCB0aGUgJmRybV9ncHV2bV9ibyByZXByZXNlbnRpbmcg dGhlIGNvbWJpbmF0aW9uIG9mIHRoZQo+ID4gPiBnaXZlbgo+ID4gPiArICogJmRybV9ncHV2bSBh bmQgJmRybV9nZW1fb2JqZWN0LiBJZiBmb3VuZCwgaW5jcmVhc2VzIHRoZQo+ID4gPiByZWZlcmVu Y2UKPiA+ID4gKyAqIGNvdW50IG9mIHRoZSAmZHJtX2dwdXZtX2JvIGFjY29yZGluZ2x5LiBJZiBu b3QgZm91bmQsCj4gPiA+IGFsbG9jYXRlcyBhCj4gPiA+IG5ldwo+ID4gPiArICogJmRybV9ncHV2 bV9iby4KPiA+ID4gKyAqCj4gPiA+ICsgKiBBIG5ldyAmZHJtX2dwdXZtX2JvIGlzIGFkZGVkIHRv IHRoZSBHRU1zIGdwdXZhIGxpc3QuCj4gPiA+ICsgKgo+ID4gPiArICogUmV0dXJuczogYSBwb2lu dGVyIHRvIHRoZSAmZHJtX2dwdXZtX2JvIG9uIHN1Y2Nlc3MsIGFuCj4gPiA+IEVSUl9QVFIgb24K PiA+ID4gZmFpbHVyZQo+ID4gPiArICovCj4gPiA+ICtzdHJ1Y3QgZHJtX2dwdXZtX2JvICoKPiA+ ID4gK2RybV9ncHV2bV9ib19vYnRhaW4oc3RydWN0IGRybV9ncHV2bSAqZ3B1dm0sCj4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpvYmopCj4gPiA+ICt7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dm1fYm8g KnZtX2JvOwo+ID4gPiArCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHZtX2JvID0gZHJtX2dwdXZtX2Jv X2ZpbmQoZ3B1dm0sIG9iaik7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmICh2bV9ibykKPiA+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiB2bV9ibzsKPiA+ID4gKwo+ID4g PiArwqDCoMKgwqDCoMKgwqB2bV9ibyA9IGRybV9ncHV2bV9ib19jcmVhdGUoZ3B1dm0sIG9iaik7 Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmICghdm1fYm8pCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiA+ID4gKwo+ID4gPiArwqDC oMKgwqDCoMKgwqBkcm1fZ2VtX2dwdXZhX2Fzc2VydF9sb2NrX2hlbGQob2JqKTsKPiA+ID4gK8Kg wqDCoMKgwqDCoMKgbGlzdF9hZGRfdGFpbCgmdm1fYm8tPmxpc3QuZW50cnkuZ2VtLCAmb2JqLT5n cHV2YS5saXN0KTsKPiA+ID4gKwo+ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gdm1fYm87Cj4g PiA+ICt9Cj4gPiA+ICtFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1dm1fYm9fb2J0YWluKTsKPiA+ ID4gKwo+ID4gPiArLyoqCj4gPiA+ICsgKiBkcm1fZ3B1dm1fYm9fb2J0YWluX3ByZWFsbG9jKCkg LSBvYnRhaW5zIGFuZCBpbnN0YW5jZSBvZiB0aGUKPiA+ID4gJmRybV9ncHV2bV9ibwo+ID4gPiAr ICogZm9yIHRoZSBnaXZlbiAmZHJtX2dwdXZtIGFuZCAmZHJtX2dlbV9vYmplY3QKPiA+ID4gKyAq IEBfX3ZtX2JvOiBBIHByZS1hbGxvY2F0ZWQgc3RydWN0IGRybV9ncHV2bV9iby4KPiA+ID4gKyAq Cj4gPiA+ICsgKiBGaW5kIHRoZSAmZHJtX2dwdXZtX2JvIHJlcHJlc2VudGluZyB0aGUgY29tYmlu YXRpb24gb2YgdGhlCj4gPiA+IGdpdmVuCj4gPiA+ICsgKiAmZHJtX2dwdXZtIGFuZCAmZHJtX2dl bV9vYmplY3QuIElmIGZvdW5kLCBpbmNyZWFzZXMgdGhlCj4gPiA+IHJlZmVyZW5jZQo+ID4gPiAr ICogY291bnQgb2YgdGhlIGZvdW5kICZkcm1fZ3B1dm1fYm8gYWNjb3JkaW5nbHksIHdoaWxlIHRo ZQo+ID4gPiBAX192bV9ibwo+ID4gPiByZWZlcmVuY2UKPiA+ID4gKyAqIGNvdW50IGlzIGRlY3Jl YXNlZC4gSWYgbm90IGZvdW5kIEBfX3ZtX2JvIGlzIHJldHVybmVkIHdpdGhvdXQKPiA+ID4gZnVy dGhlcgo+ID4gPiArICogaW5jcmVhc2Ugb2YgdGhlIHJlZmVyZW5jZSBjb3VudC4KPiA+ID4gKyAq Cj4gPiA+ICsgKiBBIG5ldyAmZHJtX2dwdXZtX2JvIGlzIGFkZGVkIHRvIHRoZSBHRU1zIGdwdXZh IGxpc3QuCj4gPiA+ICsgKgo+ID4gPiArICogUmV0dXJuczogYSBwb2ludGVyIHRvIHRoZSBmb3Vu ZCAmZHJtX2dwdXZtX2JvIG9yIEBfX3ZtX2JvIGlmCj4gPiA+IG5vCj4gPiA+IGV4aXN0aW5nCj4g PiA+ICsgKiAmZHJtX2dwdXZtX2JvIHdhcyBmb3VuZAo+ID4gPiArICovCj4gPiA+ICtzdHJ1Y3Qg ZHJtX2dwdXZtX2JvICoKPiA+ID4gK2RybV9ncHV2bV9ib19vYnRhaW5fcHJlYWxsb2Moc3RydWN0 IGRybV9ncHV2bV9ibyAqX192bV9ibykKPiA+ID4gK3sKPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3Ry dWN0IGRybV9ncHV2bSAqZ3B1dm0gPSBfX3ZtX2JvLT52bTsKPiA+ID4gK8KgwqDCoMKgwqDCoMKg c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBfX3ZtX2JvLT5vYmo7Cj4gPiA+ICvCoMKgwqDC oMKgwqDCoHN0cnVjdCBkcm1fZ3B1dm1fYm8gKnZtX2JvOwo+ID4gPiArCj4gPiA+ICvCoMKgwqDC oMKgwqDCoHZtX2JvID0gZHJtX2dwdXZtX2JvX2ZpbmQoZ3B1dm0sIG9iaik7Cj4gPiA+ICvCoMKg wqDCoMKgwqDCoGlmICh2bV9ibykgewo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgZHJtX2dwdXZtX2JvX3B1dChfX3ZtX2JvKTsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldHVybiB2bV9ibzsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gPiArCj4g PiA+ICvCoMKgwqDCoMKgwqDCoGRybV9nZW1fZ3B1dmFfYXNzZXJ0X2xvY2tfaGVsZChvYmopOwo+ ID4gPiArwqDCoMKgwqDCoMKgwqBsaXN0X2FkZF90YWlsKCZfX3ZtX2JvLT5saXN0LmVudHJ5Lmdl bSwgJm9iai0KPiA+ID4gPmdwdXZhLmxpc3QpOwo+ID4gPiArCj4gPiA+ICvCoMKgwqDCoMKgwqDC oHJldHVybiBfX3ZtX2JvOwo+ID4gPiArfQo+ID4gPiArRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dw dXZtX2JvX29idGFpbl9wcmVhbGxvYyk7Cj4gPiA+ICsKPiA+ID4gwqDCoHN0YXRpYyBpbnQKPiA+ ID4gwqDCoF9fZHJtX2dwdXZhX2luc2VydChzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSwKPiA+ID4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRybV9ncHV2YSAq dmEpCj4gPiA+IEBAIC04NjQsMjQgKzEwODcsMzMgQEAgRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dw dXZhX3JlbW92ZSk7Cj4gPiA+IMKgwqAvKioKPiA+ID4gwqDCoCAqIGRybV9ncHV2YV9saW5rKCkg LSBsaW5rIGEgJmRybV9ncHV2YQo+ID4gPiDCoMKgICogQHZhOiB0aGUgJmRybV9ncHV2YSB0byBs aW5rCj4gPiA+ICsgKiBAdm1fYm86IHRoZSAmZHJtX2dwdXZtX2JvIHRvIGFkZCB0aGUgJmRybV9n cHV2YSB0bwo+ID4gPiDCoMKgICoKPiA+ID4gLSAqIFRoaXMgYWRkcyB0aGUgZ2l2ZW4gJnZhIHRv IHRoZSBHUFUgVkEgbGlzdCBvZiB0aGUKPiA+ID4gJmRybV9nZW1fb2JqZWN0Cj4gPiA+IGl0IGlz Cj4gPiA+IC0gKiBhc3NvY2lhdGVkIHdpdGguCj4gPiA+ICsgKiBUaGlzIGFkZHMgdGhlIGdpdmVu ICZ2YSB0byB0aGUgR1BVIFZBIGxpc3Qgb2YgdGhlCj4gPiA+ICZkcm1fZ3B1dm1fYm8KPiA+ID4g YW5kIHRoZQo+ID4gPiArICogJmRybV9ncHV2bV9ibyB0byB0aGUgJmRybV9nZW1fb2JqZWN0IGl0 IGlzIGFzc29jaWF0ZWQgd2l0aC4KPiA+ID4gKyAqCj4gPiA+ICsgKiBGb3IgZXZlcnkgJmRybV9n cHV2YSBlbnRyeSBhZGRlZCB0byB0aGUgJmRybV9ncHV2bV9ibyBhbgo+ID4gPiBhZGRpdGlvbmFs Cj4gPiA+ICsgKiByZWZlcmVuY2Ugb2YgdGhlIGxhdHRlciBpcyB0YWtlbi4KPiA+ID4gwqDCoCAq Cj4gPiA+IMKgwqAgKiBUaGlzIGZ1bmN0aW9uIGV4cGVjdHMgdGhlIGNhbGxlciB0byBwcm90ZWN0 IHRoZSBHRU0ncyBHUFVWQQo+ID4gPiBsaXN0Cj4gPiA+IGFnYWluc3QKPiA+ID4gLSAqIGNvbmN1 cnJlbnQgYWNjZXNzIHVzaW5nIHRoZSBHRU1zIGRtYV9yZXN2IGxvY2suCj4gPiA+ICsgKiBjb25j dXJyZW50IGFjY2VzcyB1c2luZyBlaXRoZXIgdGhlIEdFTXMgZG1hX3Jlc3YgbG9jayBvciBhCj4g PiA+IGRyaXZlcgo+ID4gPiBzcGVjaWZpYwo+ID4gPiArICogbG9jayBzZXQgdGhyb3VnaCBkcm1f Z2VtX2dwdXZhX3NldF9sb2NrKCkuCj4gPiA+IMKgwqAgKi8KPiA+ID4gwqDCoHZvaWQKPiA+ID4g LWRybV9ncHV2YV9saW5rKHN0cnVjdCBkcm1fZ3B1dmEgKnZhKQo+ID4gPiArZHJtX2dwdXZhX2xp bmsoc3RydWN0IGRybV9ncHV2YSAqdmEsIHN0cnVjdCBkcm1fZ3B1dm1fYm8gKnZtX2JvKQo+ID4g PiDCoMKgewo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9i aiA9IHZhLT5nZW0ub2JqOwo+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZtICpn cHV2bSA9IHZhLT52bTsKPiA+ID4gwqAgCj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoGlmICh1bmxp a2VseSghb2JqKSkKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy bjsKPiA+ID4gwqAgCj4gPiA+IC3CoMKgwqDCoMKgwqDCoGRybV9nZW1fZ3B1dmFfYXNzZXJ0X2xv Y2tfaGVsZChvYmopOwo+ID4gPiArwqDCoMKgwqDCoMKgwqBkcm1fV0FSTl9PTihncHV2bS0+ZHJt LCBvYmogIT0gdm1fYm8tPm9iaik7Cj4gPiA+IMKgIAo+ID4gPiAtwqDCoMKgwqDCoMKgwqBsaXN0 X2FkZF90YWlsKCZ2YS0+Z2VtLmVudHJ5LCAmb2JqLT5ncHV2YS5saXN0KTsKPiA+ID4gK8KgwqDC oMKgwqDCoMKgdmEtPnZtX2JvID0gZHJtX2dwdXZtX2JvX2dldCh2bV9ibyk7Cj4gPiA+ICsKPiA+ ID4gK8KgwqDCoMKgwqDCoMKgZHJtX2dlbV9ncHV2YV9hc3NlcnRfbG9ja19oZWxkKG9iaik7Cj4g PiA+ICvCoMKgwqDCoMKgwqDCoGxpc3RfYWRkX3RhaWwoJnZhLT5nZW0uZW50cnksICZ2bV9iby0+ bGlzdC5ncHV2YSk7Cj4gPiA+IMKgwqB9Cj4gPiA+IMKgwqBFWFBPUlRfU1lNQk9MX0dQTChkcm1f Z3B1dmFfbGluayk7Cj4gPiA+IMKgIAo+ID4gPiBAQCAtODkyLDIwICsxMTI0LDMxIEBAIEVYUE9S VF9TWU1CT0xfR1BMKGRybV9ncHV2YV9saW5rKTsKPiA+ID4gwqDCoCAqIFRoaXMgcmVtb3ZlcyB0 aGUgZ2l2ZW4gJnZhIGZyb20gdGhlIEdQVSBWQSBsaXN0IG9mIHRoZQo+ID4gPiAmZHJtX2dlbV9v YmplY3QgaXQgaXMKPiA+ID4gwqDCoCAqIGFzc29jaWF0ZWQgd2l0aC4KPiA+ID4gwqDCoCAqCj4g PiA+ICsgKiBUaGlzIHJlbW92ZXMgdGhlIGdpdmVuICZ2YSBmcm9tIHRoZSBHUFUgVkEgbGlzdCBv ZiB0aGUKPiA+ID4gJmRybV9ncHV2bV9ibyBhbmQKPiA+ID4gKyAqIHRoZSAmZHJtX2dwdXZtX2Jv IGZyb20gdGhlICZkcm1fZ2VtX29iamVjdCBpdCBpcyBhc3NvY2lhdGVkCj4gPiA+IHdpdGgKPiA+ ID4gaW4gY2FzZQo+ID4gPiArICogdGhpcyBjYWxsIHVubGlua3MgdGhlIGxhc3QgJmRybV9ncHV2 YSBmcm9tIHRoZSAmZHJtX2dwdXZtX2JvLgo+ID4gPiArICoKPiA+ID4gKyAqIEZvciBldmVyeSAm ZHJtX2dwdXZhIGVudHJ5IHJlbW92ZWQgZnJvbSB0aGUgJmRybV9ncHV2bV9ibyBhCj4gPiA+IHJl ZmVyZW5jZSBvZgo+ID4gPiArICogdGhlIGxhdHRlciBpcyBkcm9wcGVkLgo+ID4gPiArICoKPiA+ ID4gwqDCoCAqIFRoaXMgZnVuY3Rpb24gZXhwZWN0cyB0aGUgY2FsbGVyIHRvIHByb3RlY3QgdGhl IEdFTSdzIEdQVVZBCj4gPiA+IGxpc3QKPiA+ID4gYWdhaW5zdAo+ID4gPiAtICogY29uY3VycmVu dCBhY2Nlc3MgdXNpbmcgdGhlIEdFTXMgZG1hX3Jlc3YgbG9jay4KPiA+ID4gKyAqIGNvbmN1cnJl bnQgYWNjZXNzIHVzaW5nIGVpdGhlciB0aGUgR0VNcyBkbWFfcmVzdiBsb2NrIG9yIGEKPiA+ID4g ZHJpdmVyCj4gPiA+IHNwZWNpZmljCj4gPiA+ICsgKiBsb2NrIHNldCB0aHJvdWdoIGRybV9nZW1f Z3B1dmFfc2V0X2xvY2soKS4KPiA+ID4gwqDCoCAqLwo+ID4gPiDCoMKgdm9pZAo+ID4gPiDCoMKg ZHJtX2dwdXZhX3VubGluayhzdHJ1Y3QgZHJtX2dwdXZhICp2YSkKPiA+ID4gwqDCoHsKPiA+ID4g wqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSB2YS0+Z2VtLm9i ajsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2bV9ibyAqdm1fYm8gPSB2YS0+ dm1fYm87Cj4gPiA+IMKgIAo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqBpZiAodW5saWtlbHkoIW9i aikpCj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47Cj4gPiA+ IMKgIAo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ2VtX2dwdXZhX2Fzc2VydF9sb2NrX2hl bGQob2JqKTsKPiA+ID4gLQo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqBsaXN0X2RlbF9pbml0KCZ2 YS0+Z2VtLmVudHJ5KTsKPiA+ID4gKwo+ID4gPiArwqDCoMKgwqDCoMKgwqB2YS0+dm1fYm8gPSBO VUxMOwo+ID4gPiArwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dm1fYm9fcHV0KHZtX2JvKTsKPiA+ID4g wqDCoH0KPiA+ID4gwqDCoEVYUE9SVF9TWU1CT0xfR1BMKGRybV9ncHV2YV91bmxpbmspOwo+ID4g PiDCoCAKPiA+ID4gQEAgLTEwNTAsMTAgKzEyOTMsMTAgQEAgZHJtX2dwdXZhX3JlbWFwKHN0cnVj dCBkcm1fZ3B1dmEgKnByZXYsCj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBzdHJ1Y3QgZHJtX2dwdXZhICpuZXh0LAo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgc3RydWN0IGRybV9ncHV2YV9vcF9yZW1hcCAqb3ApCj4gPiA+IMKgwqB7Cj4gPiA+ IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dmEgKmN1cnIgPSBvcC0+dW5tYXAtPnZhOwo+ ID4gPiAtwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSA9IGN1cnItPnZtOwo+ ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZhICp2YSA9IG9wLT51bm1hcC0+dmE7 Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dm0gKmdwdXZtID0gdmEtPnZtOwo+ ID4gPiDCoCAKPiA+ID4gLcKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX3JlbW92ZShjdXJyKTsKPiA+ ID4gK8KgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX3JlbW92ZSh2YSk7Cj4gPiA+IMKgIAo+ID4gPiDC oMKgwqDCoMKgwqDCoMKgwqBpZiAob3AtPnByZXYpIHsKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9pbml0X2Zyb21fb3AocHJldiwgb3AtPnByZXYpOwo+ ID4gPiBAQCAtMTY5NSw5ICsxOTM4LDggQEAgZHJtX2dwdXZtX3ByZWZldGNoX29wc19jcmVhdGUo c3RydWN0Cj4gPiA+IGRybV9ncHV2bQo+ID4gPiAqZ3B1dm0sCj4gPiA+IMKgwqBFWFBPUlRfU1lN Qk9MX0dQTChkcm1fZ3B1dm1fcHJlZmV0Y2hfb3BzX2NyZWF0ZSk7Cj4gPiA+IMKgIAo+ID4gPiDC oMKgLyoqCj4gPiA+IC0gKiBkcm1fZ3B1dm1fZ2VtX3VubWFwX29wc19jcmVhdGUoKSAtIGNyZWF0 ZXMgdGhlICZkcm1fZ3B1dmFfb3BzCj4gPiA+IHRvCj4gPiA+IHVubWFwIGEgR0VNCj4gPiA+IC0g KiBAZ3B1dm06IHRoZSAmZHJtX2dwdXZtIHJlcHJlc2VudGluZyB0aGUgR1BVIFZBIHNwYWNlCj4g PiA+IC0gKiBAb2JqOiB0aGUgJmRybV9nZW1fb2JqZWN0IHRvIHVubWFwCj4gPiA+ICsgKiBkcm1f Z3B1dm1fYm9fdW5tYXBfb3BzX2NyZWF0ZSgpIC0gY3JlYXRlcyB0aGUgJmRybV9ncHV2YV9vcHMK PiA+ID4gdG8KPiA+ID4gdW5tYXAgYSBHRU0KPiA+ID4gKyAqIEB2bV9ibzogdGhlICZkcm1fZ3B1 dm1fYm8gYWJzdHJhY3Rpb24KPiA+ID4gwqDCoCAqCj4gPiA+IMKgwqAgKiBUaGlzIGZ1bmN0aW9u IGNyZWF0ZXMgYSBsaXN0IG9mIG9wZXJhdGlvbnMgdG8gcGVyZm9ybQo+ID4gPiB1bm1hcHBpbmcK PiA+ID4gZm9yIGV2ZXJ5Cj4gPiA+IMKgwqAgKiBHUFVWQSBhdHRhY2hlZCB0byBhIEdFTS4KPiA+ ID4gQEAgLTE3MTQsMTUgKzE5NTYsMTQgQEAKPiA+ID4gRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dw dXZtX3ByZWZldGNoX29wc19jcmVhdGUpOwo+ID4gPiDCoMKgICogUmV0dXJuczogYSBwb2ludGVy IHRvIHRoZSAmZHJtX2dwdXZhX29wcyBvbiBzdWNjZXNzLCBhbgo+ID4gPiBFUlJfUFRSCj4gPiA+ IG9uIGZhaWx1cmUKPiA+ID4gwqDCoCAqLwo+ID4gPiDCoMKgc3RydWN0IGRybV9ncHV2YV9vcHMg Kgo+ID4gPiAtZHJtX2dwdXZtX2dlbV91bm1hcF9vcHNfY3JlYXRlKHN0cnVjdCBkcm1fZ3B1dm0g KmdwdXZtLAo+ID4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiA+ID4gK2RybV9n cHV2bV9ib191bm1hcF9vcHNfY3JlYXRlKHN0cnVjdCBkcm1fZ3B1dm1fYm8gKnZtX2JvKQo+ID4g PiDCoMKgewo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZhX29wcyAqb3Bz Owo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZhX29wICpvcDsKPiA+ID4g wqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2YSAqdmE7Cj4gPiA+IMKgwqDCoMKgwqDC oMKgwqDCoGludCByZXQ7Cj4gPiA+IMKgIAo+ID4gPiAtwqDCoMKgwqDCoMKgwqBkcm1fZ2VtX2dw dXZhX2Fzc2VydF9sb2NrX2hlbGQob2JqKTsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgZHJtX2dlbV9n cHV2YV9hc3NlcnRfbG9ja19oZWxkKHZtX2JvLT5vYmopOwo+ID4gPiDCoCAKPiA+ID4gwqDCoMKg wqDCoMKgwqDCoMKgb3BzID0ga3phbGxvYyhzaXplb2YoKm9wcyksIEdGUF9LRVJORUwpOwo+ID4g PiDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIW9wcykKPiA+ID4gQEAgLTE3MzAsOCArMTk3MSw4IEBA IGRybV9ncHV2bV9nZW1fdW5tYXBfb3BzX2NyZWF0ZShzdHJ1Y3QKPiA+ID4gZHJtX2dwdXZtCj4g PiA+ICpncHV2bSwKPiA+ID4gwqAgCj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoElOSVRfTElTVF9I RUFEKCZvcHMtPmxpc3QpOwo+ID4gPiDCoCAKPiA+ID4gLcKgwqDCoMKgwqDCoMKgZHJtX2dlbV9m b3JfZWFjaF9ncHV2YSh2YSwgb2JqKSB7Cj4gPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBvcCA9IGdwdXZhX29wX2FsbG9jKGdwdXZtKTsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgZHJt X2dwdXZtX2JvX2Zvcl9lYWNoX3ZhKHZhLCB2bV9ibykgewo+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgb3AgPSBncHV2YV9vcF9hbGxvYyh2bV9iby0+dm0pOwo+ID4gPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFvcCkgewo+ID4gPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IC1FTk9NRU07Cj4g PiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290 byBlcnJfZnJlZV9vcHM7Cj4gPiA+IEBAIC0xNzQ1LDEwICsxOTg2LDEwIEBAIGRybV9ncHV2bV9n ZW1fdW5tYXBfb3BzX2NyZWF0ZShzdHJ1Y3QKPiA+ID4gZHJtX2dwdXZtICpncHV2bSwKPiA+ID4g wqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIG9wczsKPiA+ID4gwqAgCj4gPiA+IMKgwqBlcnJfZnJl ZV9vcHM6Cj4gPiA+IC3CoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9vcHNfZnJlZShncHV2bSwgb3Bz KTsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX29wc19mcmVlKHZtX2JvLT52bSwgb3Bz KTsKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIEVSUl9QVFIocmV0KTsKPiA+ID4gwqDC oH0KPiA+ID4gLUVYUE9SVF9TWU1CT0xfR1BMKGRybV9ncHV2bV9nZW1fdW5tYXBfb3BzX2NyZWF0 ZSk7Cj4gPiA+ICtFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1dm1fYm9fdW5tYXBfb3BzX2NyZWF0 ZSk7Cj4gPiA+IMKgIAo+ID4gPiDCoMKgLyoqCj4gPiA+IMKgwqAgKiBkcm1fZ3B1dmFfb3BzX2Zy ZWUoKSAtIGZyZWUgdGhlIGdpdmVuICZkcm1fZ3B1dmFfb3BzCj4gPiA+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3V2bW0uYwo+ID4gPiBiL2RyaXZlcnMvZ3B1 L2RybS9ub3V2ZWF1L25vdXZlYXVfdXZtbS5jCj4gPiA+IGluZGV4IGVkNDM5YmY0MDMyZi4uMWU5 NWIwYTFiMDQ3IDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2 ZWF1X3V2bW0uYwo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3V2 bW0uYwo+ID4gPiBAQCAtNjIsNiArNjIsOCBAQCBzdHJ1Y3QgYmluZF9qb2Jfb3Agewo+ID4gPiDC oMKgwqDCoMKgwqDCoMKgwqBlbnVtIHZtX2JpbmRfb3Agb3A7Cj4gPiA+IMKgwqDCoMKgwqDCoMKg wqDCoHUzMiBmbGFnczsKPiA+ID4gwqAgCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1f Z3B1dm1fYm8gKnZtX2JvOwo+ID4gPiArCj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCB7 Cj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1NjQgYWRkcjsKPiA+ID4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHU2NCByYW5nZTsKPiA+ID4gQEAgLTEx MTMsMjIgKzExMTUsMjggQEAgYmluZF92YWxpZGF0ZV9yZWdpb24oc3RydWN0IG5vdXZlYXVfam9i Cj4gPiA+ICpqb2IpCj4gPiA+IMKgwqB9Cj4gPiA+IMKgIAo+ID4gPiDCoMKgc3RhdGljIHZvaWQK PiA+ID4gLWJpbmRfbGlua19ncHV2YXMoc3RydWN0IGRybV9ncHV2YV9vcHMgKm9wcywgc3RydWN0 Cj4gPiA+IG5vdXZlYXVfdXZtYV9wcmVhbGxvYyAqbmV3KQo+ID4gPiArYmluZF9saW5rX2dwdXZh cyhzdHJ1Y3QgYmluZF9qb2Jfb3AgKmJvcCkKPiA+ID4gwqDCoHsKPiA+ID4gK8KgwqDCoMKgwqDC oMKgc3RydWN0IG5vdXZlYXVfdXZtYV9wcmVhbGxvYyAqbmV3ID0gJmJvcC0+bmV3Owo+ID4gPiAr wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZtX2JvICp2bV9ibyA9IGJvcC0+dm1fYm87Cj4g PiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dmFfb3BzICpvcHMgPSBib3AtPm9wczsK PiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2YV9vcCAqb3A7Cj4gPiA+IMKg IAo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfZm9yX2VhY2hfb3Aob3AsIG9wcykg ewo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3dpdGNoIChvcC0+b3Ap IHsKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNhc2UgRFJNX0dQVVZB X09QX01BUDoKPiA+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBkcm1fZ3B1dmFfbGluaygmbmV3LT5tYXAtPnZhKTsKPiA+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfbGluaygmbmV3LT5tYXAt PnZhLCB2bV9ibyk7Cj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgYnJlYWs7Cj4gPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBj YXNlIERSTV9HUFVWQV9PUF9SRU1BUDoKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGNhc2UgRFJNX0dQVVZBX09QX1JFTUFQOiB7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2YSAqdmEgPSBvcC0+cmVt YXAudW5tYXAtCj4gPiA+ID52YTsKPiA+ID4gKwo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChvcC0+cmVtYXAucHJldikKPiA+ID4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgZHJtX2dwdXZhX2xpbmsoJm5ldy0+cHJldi0+dmEpOwo+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFf bGluaygmbmV3LT5wcmV2LT52YSwKPiA+ID4gdmEtCj4gPiA+ID4gdm1fYm8pOwo+ID4gPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChvcC0+cmVt YXAubmV4dCkKPiA+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX2xpbmsoJm5ldy0+bmV4dC0+dmEpOwo+ID4g PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2 YV91bmxpbmsob3AtPnJlbWFwLnVubWFwLT52YSk7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9saW5r KCZuZXctPm5leHQtPnZhLAo+ID4gPiB2YS0KPiA+ID4gPiB2bV9ibyk7Cj4gPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX3VubGluayh2 YSk7Cj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgYnJlYWs7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gPiA+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjYXNlIERSTV9HUFVWQV9PUF9VTk1BUDoK PiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBk cm1fZ3B1dmFfdW5saW5rKG9wLT51bm1hcC52YSk7Cj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gPiA+IEBAIC0xMTUwLDEwICsx MTU4LDE4IEBAIG5vdXZlYXVfdXZtbV9iaW5kX2pvYl9zdWJtaXQoc3RydWN0Cj4gPiA+IG5vdXZl YXVfam9iICpqb2IpCj4gPiA+IMKgIAo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqBsaXN0X2Zvcl9l YWNoX29wKG9wLCAmYmluZF9qb2ItPm9wcykgewo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgaWYgKG9wLT5vcCA9PSBPUF9NQVApIHsKPiA+ID4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBvcC0+Z2VtLm9iaiA9IGRybV9nZW1fb2Jq ZWN0X2xvb2t1cChqb2ItCj4gPiA+ID4gZmlsZV9wcml2LAo+ID4gPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb3AtCj4gPiA+ID4g Z2VtLmhhbmRsZSk7Cj4gPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgaWYgKCFvcC0+Z2VtLm9iaikKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKPiA+ID4g Kwo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG9i aiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChqb2ItCj4gPiA+ID5maWxlX3ByaXYsCj4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9wLQo+ID4gPiA+Z2Vt LmhhbmRsZSk7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgaWYgKCEob3AtPmdlbS5vYmogPSBvYmopKQo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVO T0VOVDsKPiA+ID4gKwo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGRtYV9yZXN2X2xvY2sob2JqLT5yZXN2LCBOVUxMKTsKPiA+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBvcC0+dm1fYm8gPSBkcm1fZ3B1 dm1fYm9fb2J0YWluKCZ1dm1tLQo+ID4gPiA+YmFzZSwKPiA+ID4gb2JqKTsKPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkbWFfcmVzdl91bmxvY2so b2JqLT5yZXN2KTsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBpZiAoSVNfRVJSKG9wLT52bV9ibykpCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBQVFJfRVJS KG9wLT52bV9ibyk7Cj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4g PiA+IMKgIAo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gYmlu ZF92YWxpZGF0ZV9vcChqb2IsIG9wKTsKPiA+ID4gQEAgLTEzNjQsNyArMTM4MCw3IEBAIG5vdXZl YXVfdXZtbV9iaW5kX2pvYl9zdWJtaXQoc3RydWN0Cj4gPiA+IG5vdXZlYXVfam9iCj4gPiA+ICpq b2IpCj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjYXNlIE9QX1VOTUFQ X1NQQVJTRToKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNhc2UgT1Bf TUFQOgo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2FzZSBPUF9VTk1B UDoKPiA+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBi aW5kX2xpbmtfZ3B1dmFzKG9wLT5vcHMsICZvcC0+bmV3KTsKPiA+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBiaW5kX2xpbmtfZ3B1dmFzKG9wKTsKPiA+ ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVh azsKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRlZmF1bHQ6Cj4gPiA+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7 Cj4gPiA+IEBAIC0xNTExLDYgKzE1MjcsMTIgQEAgbm91dmVhdV91dm1tX2JpbmRfam9iX2ZyZWVf d29ya19mbihzdHJ1Y3QKPiA+ID4gd29ya19zdHJ1Y3QgKndvcmspCj4gPiA+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIUlTX0VSUl9PUl9OVUxMKG9wLT5vcHMpKQo+ID4g PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9n cHV2YV9vcHNfZnJlZSgmdXZtbS0+YmFzZSwgb3AtCj4gPiA+ID5vcHMpOwo+ID4gPiDCoCAKPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghSVNfRVJSX09SX05VTEwob3At PnZtX2JvKSkgewo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGRtYV9yZXN2X2xvY2sob2JqLT5yZXN2LCBOVUxMKTsKPiA+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dm1fYm9fcHV0KG9wLT52 bV9ibyk7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgZG1hX3Jlc3ZfdW5sb2NrKG9iai0+cmVzdik7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB9Cj4gPiA+ICsKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGlmIChvYmopCj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgZHJtX2dlbV9vYmplY3RfcHV0KG9iaik7Cj4gPiA+IMKgwqDCoMKgwqDCoMKg wqDCoH0KPiA+ID4gQEAgLTE3NzYsMTUgKzE3OTgsMTggQEAgdm9pZAo+ID4gPiDCoMKgbm91dmVh dV91dm1tX2JvX21hcF9hbGwoc3RydWN0IG5vdXZlYXVfYm8gKm52Ym8sIHN0cnVjdAo+ID4gPiBu b3V2ZWF1X21lbQo+ID4gPiAqbWVtKQo+ID4gPiDCoMKgewo+ID4gPiDCoMKgwqDCoMKgwqDCoMKg wqBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9ICZudmJvLT5iby5iYXNlOwo+ID4gPiArwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZtX2JvICp2bV9ibzsKPiA+ID4gwqDCoMKgwqDCoMKg wqDCoMKgc3RydWN0IGRybV9ncHV2YSAqdmE7Cj4gPiA+IMKgIAo+ID4gPiDCoMKgwqDCoMKgwqDC oMKgwqBkbWFfcmVzdl9hc3NlcnRfaGVsZChvYmotPnJlc3YpOwo+ID4gPiDCoCAKPiA+ID4gLcKg wqDCoMKgwqDCoMKgZHJtX2dlbV9mb3JfZWFjaF9ncHV2YSh2YSwgb2JqKSB7Cj4gPiA+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgbm91dmVhdV91dm1hICp1dm1hID0gdXZt YV9mcm9tX3ZhKHZhKTsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgZHJtX2dlbV9mb3JfZWFjaF9ncHV2 bV9ibyh2bV9ibywgb2JqKSB7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBk cm1fZ3B1dm1fYm9fZm9yX2VhY2hfdmEodmEsIHZtX2JvKSB7Cj4gPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IG5vdXZlYXVfdXZtYSAqdXZt YSA9Cj4gPiA+IHV2bWFfZnJvbV92YSh2YSk7Cj4gPiA+IMKgIAo+ID4gPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgbm91dmVhdV91dm1hX21hcCh1dm1hLCBtZW0pOwo+ID4gPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX2ludmFsaWRhdGUodmEsIGZhbHNl KTsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBu b3V2ZWF1X3V2bWFfbWFwKHV2bWEsIG1lbSk7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX2ludmFsaWRhdGUodmEsIGZhbHNlKTsK PiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiA+ID4gwqDCoMKgwqDCoMKg wqDCoMKgfQo+ID4gPiDCoMKgfQo+ID4gPiDCoCAKPiA+ID4gQEAgLTE3OTIsMTUgKzE4MTcsMTgg QEAgdm9pZAo+ID4gPiDCoMKgbm91dmVhdV91dm1tX2JvX3VubWFwX2FsbChzdHJ1Y3Qgbm91dmVh dV9ibyAqbnZibykKPiA+ID4gwqDCoHsKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRy bV9nZW1fb2JqZWN0ICpvYmogPSAmbnZiby0+Ym8uYmFzZTsKPiA+ID4gK8KgwqDCoMKgwqDCoMKg c3RydWN0IGRybV9ncHV2bV9ibyAqdm1fYm87Cj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVj dCBkcm1fZ3B1dmEgKnZhOwo+ID4gPiDCoCAKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgZG1hX3Jl c3ZfYXNzZXJ0X2hlbGQob2JqLT5yZXN2KTsKPiA+ID4gwqAgCj4gPiA+IC3CoMKgwqDCoMKgwqDC oGRybV9nZW1fZm9yX2VhY2hfZ3B1dmEodmEsIG9iaikgewo+ID4gPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgc3RydWN0IG5vdXZlYXVfdXZtYSAqdXZtYSA9IHV2bWFfZnJvbV92YSh2 YSk7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoGRybV9nZW1fZm9yX2VhY2hfZ3B1dm1fYm8odm1fYm8s IG9iaikgewo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZtX2Jv X2Zvcl9lYWNoX3ZhKHZhLCB2bV9ibykgewo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBub3V2ZWF1X3V2bWEgKnV2bWEgPQo+ID4gPiB1 dm1hX2Zyb21fdmEodmEpOwo+ID4gPiDCoCAKPiA+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoO+/ve+/ vcKgwqDCoMKgwqBub3V2ZWF1X3V2bWFfdW5tYXAodXZtYSk7Cj4gPiA+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfaW52YWxpZGF0ZSh2YSwgdHJ1ZSk7Cj4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbm91dmVhdV91dm1h X3VubWFwKHV2bWEpOwo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGRybV9ncHV2YV9pbnZhbGlkYXRlKHZhLCB0cnVlKTsKPiA+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgfQo+ID4gPiDC oMKgfQo+ID4gPiDCoCAKPiA+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9nZW0uaCBi L2luY2x1ZGUvZHJtL2RybV9nZW0uaAo+ID4gPiBpbmRleCAxNjM2NDQ4N2ZkZTkuLjM2OTUwNTQ0 N2FjZCAxMDA2NDQKPiA+ID4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2dlbS5oCj4gPiA+ICsrKyBi L2luY2x1ZGUvZHJtL2RybV9nZW0uaAo+ID4gPiBAQCAtNTgwLDcgKzU4MCw3IEBAIGludCBkcm1f Z2VtX2V2aWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdAo+ID4gPiAqb2JqKTsKPiA+ID4gwqDCoCAq IGRybV9nZW1fZ3B1dmFfaW5pdCgpIC0gaW5pdGlhbGl6ZSB0aGUgZ3B1dmEgbGlzdCBvZiBhIEdF TQo+ID4gPiBvYmplY3QKPiA+ID4gwqDCoCAqIEBvYmo6IHRoZSAmZHJtX2dlbV9vYmplY3QKPiA+ ID4gwqDCoCAqCj4gPiA+IC0gKiBUaGlzIGluaXRpYWxpemVzIHRoZSAmZHJtX2dlbV9vYmplY3Qn cyAmZHJtX2dwdXZhIGxpc3QuCj4gPiA+ICsgKiBUaGlzIGluaXRpYWxpemVzIHRoZSAmZHJtX2dl bV9vYmplY3QncyAmZHJtX2dwdXZtX2JvIGxpc3QuCj4gPiA+IMKgwqAgKgo+ID4gPiDCoMKgICog Q2FsbGluZyB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgbmVjZXNzYXJ5IGZvciBkcml2ZXJzCj4gPiA+ IGludGVuZGluZyB0bwo+ID4gPiBzdXBwb3J0IHRoZQo+ID4gPiDCoMKgICogJmRybV9kcml2ZXJf ZmVhdHVyZSBEUklWRVJfR0VNX0dQVVZBLgo+ID4gPiBAQCAtNTkzLDI4ICs1OTMsMjggQEAgc3Rh dGljIGlubGluZSB2b2lkCj4gPiA+IGRybV9nZW1fZ3B1dmFfaW5pdChzdHJ1Y3QKPiA+ID4gZHJt X2dlbV9vYmplY3QgKm9iaikKPiA+ID4gwqDCoH0KPiA+ID4gwqAgCj4gPiA+IMKgwqAvKioKPiA+ ID4gLSAqIGRybV9nZW1fZm9yX2VhY2hfZ3B1dmEoKSAtIGl0ZXJuYXRvciB0byB3YWxrIG92ZXIg YSBsaXN0IG9mCj4gPiA+IGdwdXZhcwo+ID4gPiAtICogQGVudHJ5X186ICZkcm1fZ3B1dmEgc3Ry dWN0dXJlIHRvIGFzc2lnbiB0byBpbiBlYWNoIGl0ZXJhdGlvbgo+ID4gPiBzdGVwCj4gPiA+IC0g KiBAb2JqX186IHRoZSAmZHJtX2dlbV9vYmplY3QgdGhlICZkcm1fZ3B1dmFzIHRvIHdhbGsgYXJl Cj4gPiA+IGFzc29jaWF0ZWQgd2l0aAo+ID4gPiArICogZHJtX2dlbV9mb3JfZWFjaF9ncHV2bV9i bygpIC0gaXRlcmF0b3IgdG8gd2FsayBvdmVyIGEgbGlzdCBvZgo+ID4gPiAmZHJtX2dwdXZtX2Jv Cj4gPiA+ICsgKiBAZW50cnlfXzogJmRybV9ncHV2bV9ibyBzdHJ1Y3R1cmUgdG8gYXNzaWduIHRv IGluIGVhY2gKPiA+ID4gaXRlcmF0aW9uCj4gPiA+IHN0ZXAKPiA+ID4gKyAqIEBvYmpfXzogdGhl ICZkcm1fZ2VtX29iamVjdCB0aGUgJmRybV9ncHV2bV9ibyB0byB3YWxrIGFyZQo+ID4gPiBhc3Nv Y2lhdGVkIHdpdGgKPiA+ID4gwqDCoCAqCj4gPiA+IC0gKiBUaGlzIGl0ZXJhdG9yIHdhbGtzIG92 ZXIgYWxsICZkcm1fZ3B1dmEgc3RydWN0dXJlcyBhc3NvY2lhdGVkCj4gPiA+IHdpdGggdGhlCj4g PiA+IC0gKiAmZHJtX2dwdXZhX21hbmFnZXIuCj4gPiA+ICsgKiBUaGlzIGl0ZXJhdG9yIHdhbGtz IG92ZXIgYWxsICZkcm1fZ3B1dm1fYm8gc3RydWN0dXJlcwo+ID4gPiBhc3NvY2lhdGVkCj4gPiA+ IHdpdGggdGhlCj4gPiA+ICsgKiAmZHJtX2dlbV9vYmplY3QuCj4gPiA+IMKgwqAgKi8KPiA+ID4g LSNkZWZpbmUgZHJtX2dlbV9mb3JfZWFjaF9ncHV2YShlbnRyeV9fLCBvYmpfXykgXAo+ID4gPiAt wqDCoMKgwqDCoMKgwqBsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5X18sICYob2JqX18pLT5ncHV2 YS5saXN0LAo+ID4gPiBnZW0uZW50cnkpCj4gPiA+ICsjZGVmaW5lIGRybV9nZW1fZm9yX2VhY2hf Z3B1dm1fYm8oZW50cnlfXywgb2JqX18pIFwKPiA+ID4gK8KgwqDCoMKgwqDCoMKgbGlzdF9mb3Jf ZWFjaF9lbnRyeShlbnRyeV9fLCAmKG9ial9fKS0+Z3B1dmEubGlzdCwKPiA+ID4gbGlzdC5lbnRy eS5nZW0pCj4gPiA+IMKgIAo+ID4gPiDCoMKgLyoqCj4gPiA+IC0gKiBkcm1fZ2VtX2Zvcl9lYWNo X2dwdXZhX3NhZmUoKSAtIGl0ZXJuYXRvciB0byBzYWZlbHkgd2FsayBvdmVyCj4gPiA+IGEKPiA+ ID4gbGlzdCBvZgo+ID4gPiAtICogZ3B1dmFzCj4gPiA+IC0gKiBAZW50cnlfXzogJmRybV9ncHV2 YSBzdHJ1Y3R1cmUgdG8gYXNzaWduIHRvIGluIGVhY2ggaXRlcmF0aW9uCj4gPiA+IHN0ZXAKPiA+ ID4gLSAqIEBuZXh0X186ICZuZXh0ICZkcm1fZ3B1dmEgdG8gc3RvcmUgdGhlIG5leHQgc3RlcAo+ ID4gPiAtICogQG9ial9fOiB0aGUgJmRybV9nZW1fb2JqZWN0IHRoZSAmZHJtX2dwdXZhcyB0byB3 YWxrIGFyZQo+ID4gPiBhc3NvY2lhdGVkIHdpdGgKPiA+ID4gKyAqIGRybV9nZW1fZm9yX2VhY2hf Z3B1dm1fYm9fc2FmZSgpIC0gaXRlcmF0b3IgdG8gc2FmZWx5IHdhbGsKPiA+ID4gb3ZlciBhCj4g PiA+IGxpc3Qgb2YKPiA+ID4gKyAqICZkcm1fZ3B1dm1fYm8KPiA+ID4gKyAqIEBlbnRyeV9fOiAm ZHJtX2dwdXZtX2Jvc3RydWN0dXJlIHRvIGFzc2lnbiB0byBpbiBlYWNoCj4gPiA+IGl0ZXJhdGlv bgo+ID4gPiBzdGVwCj4gPiA+ICsgKiBAbmV4dF9fOiAmbmV4dCAmZHJtX2dwdXZtX2JvIHRvIHN0 b3JlIHRoZSBuZXh0IHN0ZXAKPiA+ID4gKyAqIEBvYmpfXzogdGhlICZkcm1fZ2VtX29iamVjdCB0 aGUgJmRybV9ncHV2bV9ibyB0byB3YWxrIGFyZQo+ID4gPiBhc3NvY2lhdGVkIHdpdGgKPiA+ID4g wqDCoCAqCj4gPiA+IC0gKiBUaGlzIGl0ZXJhdG9yIHdhbGtzIG92ZXIgYWxsICZkcm1fZ3B1dmEg c3RydWN0dXJlcyBhc3NvY2lhdGVkCj4gPiA+IHdpdGggdGhlCj4gPiA+ICsgKiBUaGlzIGl0ZXJh dG9yIHdhbGtzIG92ZXIgYWxsICZkcm1fZ3B1dm1fYm8gc3RydWN0dXJlcwo+ID4gPiBhc3NvY2lh dGVkCj4gPiA+IHdpdGggdGhlCj4gPiA+IMKgwqAgKiAmZHJtX2dlbV9vYmplY3QuIEl0IGlzIGlt cGxlbWVudGVkIHdpdGgKPiA+ID4gbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKCksIGhlbmNlCj4g PiA+IMKgwqAgKiBpdCBpcyBzYXZlIGFnYWluc3QgcmVtb3ZhbCBvZiBlbGVtZW50cy4KPiA+ID4g wqDCoCAqLwo+ID4gPiAtI2RlZmluZSBkcm1fZ2VtX2Zvcl9lYWNoX2dwdXZhX3NhZmUoZW50cnlf XywgbmV4dF9fLCBvYmpfXykgXAo+ID4gPiAtwqDCoMKgwqDCoMKgwqBsaXN0X2Zvcl9lYWNoX2Vu dHJ5X3NhZmUoZW50cnlfXywgbmV4dF9fLCAmKG9ial9fKS0KPiA+ID4gPiBncHV2YS5saXN0LCBn ZW0uZW50cnkpCj4gPiA+ICsjZGVmaW5lIGRybV9nZW1fZm9yX2VhY2hfZ3B1dm1fYm9fc2FmZShl bnRyeV9fLCBuZXh0X18sIG9ial9fKSBcCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGxpc3RfZm9yX2Vh Y2hfZW50cnlfc2FmZShlbnRyeV9fLCBuZXh0X18sICYob2JqX18pLQo+ID4gPiA+IGdwdXZhLmxp c3QsIGxpc3QuZW50cnkuZ2VtKQo+ID4gPiDCoCAKPiA+ID4gwqDCoCNlbmRpZiAvKiBfX0RSTV9H RU1fSF9fICovCj4gPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZ3B1dm0uaCBiL2lu Y2x1ZGUvZHJtL2RybV9ncHV2bS5oCj4gPiA+IGluZGV4IDQ3Y2JhY2IyNDRiOS4uNDY2ZmRkNzZj NzFhIDEwMDY0NAo+ID4gPiAtLS0gYS9pbmNsdWRlL2RybS9kcm1fZ3B1dm0uaAo+ID4gPiArKysg Yi9pbmNsdWRlL2RybS9kcm1fZ3B1dm0uaAo+ID4gPiBAQCAtMjUsNiArMjUsNyBAQAo+ID4gPiDC oMKgICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgo+ID4gPiDCoMKgICovCj4gPiA+ IMKgIAo+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2RtYS1yZXN2Lmg+Cj4gPiA+IMKgwqAjaW5jbHVk ZSA8bGludXgvbGlzdC5oPgo+ID4gPiDCoMKgI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgo+ID4g PiDCoMKgI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4gPiA+IEBAIC0zMyw2ICszNCw3IEBACj4g PiA+IMKgwqAjaW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4KPiA+ID4gwqAgCj4gPiA+IMKgwqBzdHJ1 Y3QgZHJtX2dwdXZtOwo+ID4gPiArc3RydWN0IGRybV9ncHV2bV9ibzsKPiA+ID4gwqDCoHN0cnVj dCBkcm1fZ3B1dm1fb3BzOwo+ID4gPiDCoCAKPiA+ID4gwqDCoC8qKgo+ID4gPiBAQCAtNzMsNiAr NzUsMTIgQEAgc3RydWN0IGRybV9ncHV2YSB7Cj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoCAqLwo+ ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZtICp2bTsKPiA+ID4gwqAgCj4g PiA+ICvCoMKgwqDCoMKgwqDCoC8qKgo+ID4gPiArwqDCoMKgwqDCoMKgwqAgKiBAdm1fYm86IHRo ZSAmZHJtX2dwdXZtX2JvIGFic3RyYWN0aW9uIGZvciB0aGUgbWFwcGVkCj4gPiA+ICvCoMKgwqDC oMKgwqDCoCAqICZkcm1fZ2VtX29iamVjdAo+ID4gPiArwqDCoMKgwqDCoMKgwqAgKi8KPiA+ID4g K8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2bV9ibyAqdm1fYm87Cj4gPiA+ICsKPiA+ID4g wqDCoMKgwqDCoMKgwqDCoMKgLyoqCj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoCAqIEBmbGFnczog dGhlICZkcm1fZ3B1dmFfZmxhZ3MgZm9yIHRoaXMgbWFwcGluZwo+ID4gPiDCoMKgwqDCoMKgwqDC oMKgwqAgKi8KPiA+ID4gQEAgLTEwOCw3ICsxMTYsNyBAQCBzdHJ1Y3QgZHJtX2dwdXZhIHsKPiA+ ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ2VtX29iamVj dCAqb2JqOwo+ID4gPiDCoCAKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oC8qKgo+ID4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogQGVudHJ5OiB0aGUg Jmxpc3RfaGVhZCB0byBhdHRhY2ggdGhpcyBvYmplY3QKPiA+ID4gdG8gYQo+ID4gPiAmZHJtX2dl bV9vYmplY3QKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIEBlbnRyeTog dGhlICZsaXN0X2hlYWQgdG8gYXR0YWNoIHRoaXMgb2JqZWN0Cj4gPiA+IHRvIGEKPiA+ID4gJmRy bV9ncHV2bV9ibwo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICovCj4g PiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbGlzdF9oZWFkIGVu dHJ5Owo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqB9IGdlbTsKPiA+ID4gQEAgLTE0MSw3ICsxNDks NyBAQCBzdHJ1Y3QgZHJtX2dwdXZhIHsKPiA+ID4gwqDCoGludCBkcm1fZ3B1dmFfaW5zZXJ0KHN0 cnVjdCBkcm1fZ3B1dm0gKmdwdXZtLCBzdHJ1Y3QgZHJtX2dwdXZhCj4gPiA+ICp2YSk7Cj4gPiA+ IMKgwqB2b2lkIGRybV9ncHV2YV9yZW1vdmUoc3RydWN0IGRybV9ncHV2YSAqdmEpOwo+ID4gPiDC oCAKPiA+ID4gLXZvaWQgZHJtX2dwdXZhX2xpbmsoc3RydWN0IGRybV9ncHV2YSAqdmEpOwo+ID4g PiArdm9pZCBkcm1fZ3B1dmFfbGluayhzdHJ1Y3QgZHJtX2dwdXZhICp2YSwgc3RydWN0IGRybV9n cHV2bV9ibwo+ID4gPiAqdm1fYm8pOwo+ID4gPiDCoMKgdm9pZCBkcm1fZ3B1dmFfdW5saW5rKHN0 cnVjdCBkcm1fZ3B1dmEgKnZhKTsKPiA+ID4gwqAgCj4gPiA+IMKgwqBzdHJ1Y3QgZHJtX2dwdXZh ICpkcm1fZ3B1dmFfZmluZChzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSwKPiA+ID4gQEAgLTE4OCwx MCArMTk2LDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbAo+ID4gPiBkcm1fZ3B1dmFfaW52YWxpZGF0 ZWQoc3RydWN0Cj4gPiA+IGRybV9ncHV2YSAqdmEpCj4gPiA+IMKgwqAgKiBlbnVtIGRybV9ncHV2 bV9mbGFncyAtIGZsYWdzIGZvciBzdHJ1Y3QgZHJtX2dwdXZtCj4gPiA+IMKgwqAgKi8KPiA+ID4g wqDCoGVudW0gZHJtX2dwdXZtX2ZsYWdzIHsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgLyoqCj4gPiA+ ICvCoMKgwqDCoMKgwqDCoCAqIEBEUk1fR1BVVk1fUkVTVl9QUk9URUNURUQ6IEdQVVZNIGlzIHBy b3RlY3RlZAo+ID4gPiBleHRlcm5hbGx5Cj4gPiA+IGJ5IHRoZQo+ID4gPiArwqDCoMKgwqDCoMKg wqAgKiBHUFVWTSdzICZkbWFfcmVzdiBsb2NrCj4gPiA+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ID4g PiArwqDCoMKgwqDCoMKgwqBEUk1fR1BVVk1fUkVTVl9QUk9URUNURUQgPSBCSVQoMCksCj4gPiA+ ICsKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgLyoqCj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoCAq IEBEUk1fR1BVVk1fVVNFUkJJVFM6IHVzZXIgZGVmaW5lZCBiaXRzCj4gPiA+IMKgwqDCoMKgwqDC oMKgwqDCoCAqLwo+ID4gPiAtwqDCoMKgwqDCoMKgwqBEUk1fR1BVVk1fVVNFUkJJVFMgPSBCSVQo MCksCj4gPiA+ICvCoMKgwqDCoMKgwqDCoERSTV9HUFVWTV9VU0VSQklUUyA9IEJJVCgxKSwKPiA+ ID4gwqDCoH07Cj4gPiA+IMKgIAo+ID4gPiDCoMKgLyoqCj4gPiA+IEBAIC0yODAsNiArMjk0LDE5 IEBAIGJvb2wgZHJtX2dwdXZtX2ludGVydmFsX2VtcHR5KHN0cnVjdAo+ID4gPiBkcm1fZ3B1dm0K PiA+ID4gKmdwdXZtLCB1NjQgYWRkciwgdTY0IHJhbmdlKTsKPiA+ID4gwqDCoHN0cnVjdCBkcm1f Z2VtX29iamVjdCAqCj4gPiA+IMKgwqBkcm1fZ3B1dm1fcmVzdl9vYmplY3RfYWxsb2Moc3RydWN0 IGRybV9kZXZpY2UgKmRybSk7Cj4gPiA+IMKgIAo+ID4gPiArLyoqCj4gPiA+ICsgKiBkcm1fZ3B1 dm1fcmVzdl9wcm90ZWN0ZWQoKSAtIGluZGljYXRlcyB3aGV0aGVyCj4gPiA+ICZEUk1fR1BVVk1f UkVTVl9QUk9URUNURUQgaXMKPiA+ID4gKyAqIHNldAo+ID4gPiArICogQGdwdXZtOiB0aGUgJmRy bV9ncHV2bQo+ID4gPiArICoKPiA+ID4gKyAqIFJldHVybnM6IHRydWUgaWYgJkRSTV9HUFVWTV9S RVNWX1BST1RFQ1RFRCBpcyBzZXQsIGZhbHNlCj4gPiA+IG90aGVyd2lzZS4KPiA+ID4gKyAqLwo+ ID4gPiArc3RhdGljIGlubGluZSBib29sCj4gPiA+ICtkcm1fZ3B1dm1fcmVzdl9wcm90ZWN0ZWQo c3RydWN0IGRybV9ncHV2bSAqZ3B1dm0pCj4gPiA+ICt7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoHJl dHVybiBncHV2bS0+ZmxhZ3MgJiBEUk1fR1BVVk1fUkVTVl9QUk9URUNURUQ7Cj4gPiA+ICt9Cj4g PiA+ICsKPiA+ID4gwqDCoC8qKgo+ID4gPiDCoMKgICogZHJtX2dwdXZtX3Jlc3YoKSAtIHJldHVy bnMgdGhlICZkcm1fZ3B1dm0ncyAmZG1hX3Jlc3YKPiA+ID4gwqDCoCAqIEBncHV2bV9fOiB0aGUg JmRybV9ncHV2bQo+ID4gPiBAQCAtMjk4LDYgKzMyNSwxMiBAQCBkcm1fZ3B1dm1fcmVzdl9vYmpl Y3RfYWxsb2Moc3RydWN0Cj4gPiA+IGRybV9kZXZpY2UKPiA+ID4gKmRybSk7Cj4gPiA+IMKgwqAg Ki8KPiA+ID4gwqDCoCNkZWZpbmUgZHJtX2dwdXZtX3Jlc3Zfb2JqKGdwdXZtX18pICgoZ3B1dm1f XyktPnJfb2JqKQo+ID4gPiDCoCAKPiA+ID4gKyNkZWZpbmUgZHJtX2dwdXZtX3Jlc3ZfaGVsZChn cHV2bV9fKSBcCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGRtYV9yZXN2X2hlbGQoZHJtX2dwdXZtX3Jl c3YoZ3B1dm1fXykpCj4gPiA+ICsKPiA+ID4gKyNkZWZpbmUgZHJtX2dwdXZtX3Jlc3ZfYXNzZXJ0 X2hlbGQoZ3B1dm1fXykgXAo+ID4gPiArwqDCoMKgwqDCoMKgwqBkbWFfcmVzdl9hc3NlcnRfaGVs ZChkcm1fZ3B1dm1fcmVzdihncHV2bV9fKSkKPiA+ID4gKwo+ID4gPiDCoMKgI2RlZmluZSBkcm1f Z3B1dm1fcmVzdl9oZWxkKGdwdXZtX18pIFwKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgZG1hX3Jl c3ZfaGVsZChkcm1fZ3B1dm1fcmVzdihncHV2bV9fKSkKPiA+ID4gwqAgCj4gPiA+IEBAIC0zODIs NiArNDE1LDEyOCBAQCBfX2RybV9ncHV2YV9uZXh0KHN0cnVjdCBkcm1fZ3B1dmEgKnZhKQo+ID4g PiDCoMKgI2RlZmluZSBkcm1fZ3B1dm1fZm9yX2VhY2hfdmFfc2FmZSh2YV9fLCBuZXh0X18sIGdw dXZtX18pIFwKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZl KHZhX18sIG5leHRfXywgJihncHV2bV9fKS0KPiA+ID4gPnJiLmxpc3QsCj4gPiA+IHJiLmVudHJ5 KQo+ID4gPiDCoCAKPiA+ID4gKy8qKgo+ID4gPiArICogc3RydWN0IGRybV9ncHV2bV9ibyAtIHN0 cnVjdHVyZSByZXByZXNlbnRpbmcgYSAmZHJtX2dwdXZtIGFuZAo+ID4gPiArICogJmRybV9nZW1f b2JqZWN0IGNvbWJpbmF0aW9uCj4gPiA+ICsgKgo+ID4gPiArICogVGhpcyBzdHJ1Y3R1cmUgaXMg YW4gYWJzdHJhY3Rpb24gcmVwcmVzZW50aW5nIGEgJmRybV9ncHV2bQo+ID4gPiBhbmQKPiA+ID4g KyAqICZkcm1fZ2VtX29iamVjdCBjb21iaW5hdGlvbi4gSXQgc2VydmVzIGFzIGFuIGluZGlyZWN0 aW9uIHRvCj4gPiA+IGFjY2VsZXJhdGUKPiA+ID4gKyAqIGl0ZXJhdGluZyBhbGwgJmRybV9ncHV2 YXMgd2l0aGluIGEgJmRybV9ncHV2bSBiYWNrZWQgYnkgdGhlCj4gPiA+IHNhbWUKPiA+ID4gKyAq ICZkcm1fZ2VtX29iamVjdC4KPiA+ID4gKyAqCj4gPiA+ICsgKiBGdXJ0aGVybW9yZSBpdCBpcyB1 c2VkIGNhY2hlIGV2aWN0ZWQgR0VNIG9iamVjdHMgZm9yIGEKPiA+ID4gY2VydGFpbgo+ID4gPiBH UFUtVk0gdG8KPiA+ID4gKyAqIGFjY2VsZXJhdGUgdmFsaWRhdGlvbi4KPiA+ID4gKyAqCj4gPiA+ ICsgKiBUeXBpY2FsbHksIGRyaXZlcnMgd2FudCB0byBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgYSBz dHJ1Y3QKPiA+ID4gZHJtX2dwdXZtX2JvIG9uY2UKPiA+ID4gKyAqIGEgR0VNIG9iamVjdCBpcyBt YXBwZWQgZmlyc3QgaW4gYSBHUFUtVk0gYW5kIHJlbGVhc2UgdGhlCj4gPiA+IGluc3RhbmNlCj4g PiA+IG9uY2UgdGhlCj4gPiA+ICsgKiBsYXN0IG1hcHBpbmcgb2YgdGhlIEdFTSBvYmplY3QgaW4g dGhpcyBHUFUtVk0gaXMgdW5tYXBwZWQuCj4gPiA+ICsgKi8KPiA+ID4gK3N0cnVjdCBkcm1fZ3B1 dm1fYm8gewo+ID4gPiArwqDCoMKgwqDCoMKgwqAvKioKPiA+ID4gK8KgwqDCoMKgwqDCoMKgICog QHZtOiBUaGUgJmRybV9ncHV2bSB0aGUgQG9iaiBpcyBtYXBwZWQgaW4uIFRoaXMKPiA+ID4gcG9p bnRlciBpcwo+ID4gPiBub3QKPiA+ID4gK8KgwqDCoMKgwqDCoMKgICogcmVmZXJlbmNlIGNvdW50 ZWQuCj4gPiA+ICvCoMKgwqDCoMKgwqDCoCAqCj4gPiA+ICvCoMKgwqDCoMKgwqDCoCAqIEEgc3Ry dWN0IGRybV9ncHV2bV9ibyBpcyBub3QgYWxsb3dlZCB0byBvdXQtbGl2ZSBpdHMKPiA+ID4gJmRy bV9ncHV2bQo+ID4gPiArwqDCoMKgwqDCoMKgwqAgKiBjb250ZXh0LiBJbXBsaWNpdGx5LCB0aGlz IGlzIGVuc3VyZWQgYnkgdGhlIGZhY3QgdGhhdAo+ID4gPiB0aGUKPiA+ID4gZHJpdmVyIGlzCj4g PiA+ICvCoMKgwqDCoMKgwqDCoCAqIHJlc3BvbnNpYmxlIHRvIGVuc3VyZSB0aGUgVk0gZG9lc24n dCBjb250YWluIG1hcHBpbmdzCj4gPiA+IG9uY2UKPiA+ID4gaXQncwo+ID4gPiArwqDCoMKgwqDC oMKgwqAgKiBmcmVlZCwgc2luY2UgYSBzdHJ1Y3QgZHJtX2dwdXZtX2JvIHNob3VsZCBiZSBmcmVl ZAo+ID4gPiBvbmNlCj4gPiA+IHRoZSBsYXN0Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoCAqIG1hcHBp bmcgYmVpbmcgYmFja2VkIGJ5IHRoZSBjb3JyZXNwb25kaW5nIGJ1ZmZlcgo+ID4gPiBvYmplY3Qg aXMKPiA+ID4gdW5tYXBwZWQuCj4gPiA+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ID4gCj4gPiAKPiA+ IEkgZG9uJ3QgdGhpbmsgdGhlIGFib3ZlIGlzIGNvbXBsZXRlbHkgdHJ1ZS4gTGV0J3MgYXNzdW1l IGluIHRoZQo+ID4gIVJFU1ZfUFJPVEVDVEVEIGNhc2UgdGhhdCBhIHJlZmVyZW5jZSBpcyBncmFi YmVkIG9uIHRoZQo+ID4gZHJtX2dwdXZtX2JvCj4gPiBkdXJpbmcgYW4gaXRlcmF0aW9uIG92ZXIg YSBsaXN0LiBUaGVuIHVzZXItc3BhY2UgY2xvc2VzIHRoZSB2bSBhbmQKPiA+IGFsbAo+ID4gdm1h cyBhcmUgdW5saW5rZWQsIGJ1dCB0aGlzIHJlZmVyZW5jZSByZW1haW5zIGJ1dCB0aGUgdm0gcG9p bnRlcgo+ID4gYmVjb21lcyBzdGFsZS4gSW4gdGhlIFJFU1ZfUFJPVEVDVEVEIGNhc2UgdGhpcyBp cyBlbnN1cmVkIG5vdCB0bwo+ID4gaGFwcGVuCj4gPiBpZiBieSB0aGUgdm0tPnJlc3YgYmVpbmcg Z3JhYmJlZCBkdXJpbmcgdW5saW5rLCBidXQgaW4gdGhlCj4gPiAhUkVTVl9QUk9URUNURUQgY2Fz ZSwgdGhlIGFib3ZlIHdvcmRpbmcgaXNuJ3Qgc3VmZmljaWVudC4gVGhlCj4gPiBjYWxsZXIKPiA+ IG5lZWRzIHRvIGVuc3VyZSB0aGUgdm0gc3RheXMgYWxpdmUgdXNpbmcgc29tZSBzb3J0IG9mIHNp bWlsYXIgcnVsZQo+ID4gb3IKPiA+IHVzZSBrcmVmX2dldF91bmxlc3NfemVybygpIG9uIHRoZSB2 bSB1bmRlciB0aGUgc3BpbmxvY2sgaWYKPiA+IGRlcmVmZXJlbmNlZC4KPiAKPiBUaGUgbGlzdCBp cyBwYXJ0IG9mIHRoZSBHUFVWTS4gSGVuY2UsIHRoZSBjYWxsZXIgKm11c3QqIGVpdGhlcgo+IGFs cmVhZHkgaG9sZAo+IGEgcmVmZXJlbmNlIHRvIHRoZSBHUFVWTSBvciBvdGhlcndpc2UgZW5zdXJl IGl0J3Mgbm90IGZyZWVkIHdoaWxlCj4gaXRlcmF0aW5nCj4gdGhpcyBsaXN0LiBBbGwgdGhlIGRy bV9ncHV2bV9ibyBzdHJ1Y3R1cmVzIHdpdGhpbiB0aGlzIGxpc3QgY2FuJ3QKPiBoYXZlIGEKPiBw b2ludGVyIHRvIGFub3RoZXIgVk0gdGhhbiB0aGlzIG9uZSBieSBkZWZpbml0aW9uLgo+IAo+IEFu eXdheSwgSSByZWNvZ25pemUgdGhhdCB0aGlzIGlzbid0IHZlcnkgb2J2aW91cy4gSGVuY2UsIEkg dGhpbmsgd2UKPiBzaG91bGQKPiBwcm9iYWJseSByZWZlcmVuY2UgY291bnQgR1BVVk1zIGFzIHdl bGwuIEknZCB0aGluayBvZiB0aGUgc2FtZSB3YXkgd2UKPiBkbyBpdAo+IHdpdGggZHJtX2dlbV9v YmplY3RzLiBIb3dldmVyLCBJJ2QgcHJlZmVyIHRvIGludHJvZHVjZSB0aGlzIHdpdGggYQo+IHN1 YnNlcXVlbnQKPiBwYXRjaC4KCldlbGwsIEkgdGhpbmsgd2Ugc2hvdWxkIGFjdHVhbGx5IGJlIE9L IGluIG1vc3QgY2FzZXMsIGFuZCByZWZjb3VudGluZwpoZXJlIHdvdWxkIHByb2JhYmx5IHJlc3Vs dCBpbiBjaXJjdWxhciBkZXBlbmRlbmNpZXMuCgpJIHRoaW5rIHRvIGRvIHRoaXMgcHJvcGVybHkg b25lIHdvdWxkIGRvY3VtZW50IHRoYXQgdGhpcyBwb2ludGVyIGlzIG5vdApyZWZlY291bnRlZCBh bmQgdGhhdCBkZXJlZmVyZW5jaW5nIHRoYXQgcG9pbnRlciByZXF1aXJlcyBhIHN0cm9uZyB2bQpy ZWZlcmVuY2UgZnJvbSBlbHNld2hlcmUsIG9yIGhvbGRpbmcgdGhlIGJvIHJlc3YgYW5kIHZlcmlm eWluZyB0aGF0IHRoZQpncHV2bV9ibyBpcyBvbiB0aGUgZ2VtIG9iamVjdCdzIGdwdXZtX2JvIGxp c3QuCgpXZSd2ZSBoYWQgYSBsb3Qgb2YgdHJpY2t5IGxpZmV0aW1lIHByb2JsZW1zIG9mIHZtcyBh bmQgdm1hcyBpbiB0aGUgaTkxNQpkcml2ZXIgc28gdGhhdCdzIHdoeSBJIHRoaW5rIGNsZWFybHkg ZG9jdW1lbnRpbmcgdGhlIHJ1bGVzIGZvcgpkZXJlZmVyZW5jaW5nIGlzIGltcG9ydGFudC4gSW4g cGFydGljdWxhciBpZiB3ZSwgaW4gdGhlIGZ1dHVyZSBwcm92aWRlCnNvbWUgc29ydCBvZiBpdGVy YXRpb24gb3ZlciB0aGUgZ2VtIG9iamVjdCdzIGdwdnVtX2JvIGxpc3QsIGRyb3BwaW5nCnRoZSBs b2NrIHdoaWxlIGl0ZXJhdGluZywgdGhhdCB3aWxsIGJsb3cgdXAuCgovVGhvbWFzCgoKPiAKPiA+ IAo+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZtICp2bTsKPiA+ID4gKwo+ID4g PiArwqDCoMKgwqDCoMKgwqAvKioKPiA+ID4gK8KgwqDCoMKgwqDCoMKgICogQG9iajogVGhlICZk cm1fZ2VtX29iamVjdCBiZWluZyBtYXBwZWQgaW4gQHZtLiBUaGlzIGlzCj4gPiA+IGEKPiA+ID4g cmVmZXJlbmNlCj4gPiA+ICvCoMKgwqDCoMKgwqDCoCAqIGNvdW50ZWQgcG9pbnRlci4KPiA+ID4g K8KgwqDCoMKgwqDCoMKgICovCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqOwo+ID4gPiArCj4gPiA+ICvCoMKgwqDCoMKgwqDCoC8qKgo+ID4gPiArwqDCoMKg wqDCoMKgwqAgKiBAa3JlZjogVGhlIHJlZmVyZW5jZSBjb3VudCBmb3IgdGhpcyAmZHJtX2dwdXZt X2JvLgo+ID4gPiArwqDCoMKgwqDCoMKgwqAgKi8KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0 IGtyZWYga3JlZjsKPiA+ID4gKwo+ID4gPiArwqDCoMKgwqDCoMKgwqAvKioKPiA+ID4gK8KgwqDC oMKgwqDCoMKgICogQGxpc3Q6IFN0cnVjdHVyZSBjb250YWluaW5nIGFsbCAmbGlzdF9oZWFkcy4K PiA+ID4gK8KgwqDCoMKgwqDCoMKgICovCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCB7Cj4g PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKioKPiA+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAqIEBncHV2YTogVGhlIGxpc3Qgb2YgbGlua2VkICZkcm1fZ3B1 dmFzLgo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICovCj4gPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbGlzdF9oZWFkIGdwdXZhOwo+ID4gCj4g PiBTdGlsbCBtaXNzaW5nIGRvYyBvbiBob3cgdGhlIEBncHV2YSBzdGF5cyBhbGl2ZSBkdXJpbmcg aXRlcmF0aW9uCj4gPiBvdmVyCj4gPiB0aGUgbGlzdD8KPiAKPiBUaGFua3MgZm9yIHBvaW50aW5n IHRoaXMgb3V0IGFnYWluLCBJIG1pc3NlZCB0aGF0IG9uZS4KPiAKPiAtIERhbmlsbwo+IAo+ID4g Cj4gPiAKPiA+IAo+ID4gODwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gPiAKPiA+IFRoYW5rcywKPiA+IFRob21hcwo+ID4gCj4g Cgo=