Received: by 2002:a05:7412:f589:b0:e2:908c:2ebd with SMTP id eh9csp432226rdb; Tue, 31 Oct 2023 11:16:45 -0700 (PDT) X-Google-Smtp-Source: AGHT+IH0K/Vqc0MThs7npTUrQdWaAG5dDTg2lwesb17za9di6OE/iXdhYrAv34xF6i3Xk4C791pm X-Received: by 2002:a05:6a21:1a3:b0:17b:1696:e5ea with SMTP id le35-20020a056a2101a300b0017b1696e5eamr14352956pzb.14.1698776204956; Tue, 31 Oct 2023 11:16:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698776204; cv=none; d=google.com; s=arc-20160816; b=m99GeHLmKCiQwNzVVqTzri8bCCkLBeU69vC7WxUNwAiRDEXDy/btimXYq+RikPOdK7 UhzU4QxvqJkAiOoQ+4EI7LjX9vV5b3+JwDuQakRwbAboLFkhhAutbILoN8KmVYHwVseF h95/P9VrjjUFV9nu7VPxE1/BHOrokYZz+tZ14uz2kOBNoDN/6rRKggfM/cU1yNqbMdQO WSCOR2wC+PDskbn3k3/REHE29ox4AWjrGmod974sy+d3J2xs5ug6YOXaw3Mmjpb7eY1x sdlqRAOHjv6iuy7HcPCBcxHqDN/QIONLb8mpUKdnRnjzp6GdfwRNfSS6tAfUoVVIisoN RX7w== 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=xESENpeO54OIYHwtA/tWDGyJkJ1IYteXTMUW7O/EG5I=; fh=htvIroZrbKeU2x4AOko0NW3x9xa19Yggb7QfVOG/ARs=; b=F3mdrR4ZjICSB+JW/Cel7CacL0uIq+MVOYuy0vd4h57j1k6fovf65c0OVjVea2r6aH 9OxZ4sZZ+LHq2RqyfJaX57BUWY0CwINF0ulPFwMOkSu7RlqFwKgXojLpkVdIoI+mZnQo 1zFR0xk+p9KcWpwT4qnthdRE0q8xU8DWbdnEDaOIlAUlBoWQBN1dk8369TIDYpqs6aIs cQbB4fLgfqT5yozEhUibSjZopvlSMtPWw2p9tJ5MjUV1Tzy9m2kRgB197xgWb94Akn0n aKSK/IyBy9+LsKlioHQxLdoFf4tLYqHQ/xQ7dWXHkcMVmXk+iBJJXXm9+O616FUceT/X vNWQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=lc5wfd7c; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 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. [2620:137:e000::3:7]) by mx.google.com with ESMTPS id 136-20020a63018e000000b005b94634002fsi1308714pgb.582.2023.10.31.11.16.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 31 Oct 2023 11:16:44 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) client-ip=2620:137:e000::3:7; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=lc5wfd7c; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 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 A2E848092D85; Tue, 31 Oct 2023 11:16:01 -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 S236264AbjJaRFL (ORCPT + 99 others); Tue, 31 Oct 2023 13:05:11 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34244 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235838AbjJaREy (ORCPT ); Tue, 31 Oct 2023 13:04:54 -0400 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.8]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A578435A8 for ; Tue, 31 Oct 2023 09:52:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1698771131; x=1730307131; h=message-id:subject:from:to:cc:date:in-reply-to: references:content-transfer-encoding:mime-version; bh=xESENpeO54OIYHwtA/tWDGyJkJ1IYteXTMUW7O/EG5I=; b=lc5wfd7cSdDyhbGa50TSTDJ+XojW7hUFnKg/V2FwhiPI3mgfTGkAMPTU tll8KKQtBrGGR3KJYTL+r1t8uC+qHRPD0BGjsVNz13mgNo5sMyKXdqRxU 0hOR4oylcnga2JikxUP+Z0Ak5ZZGbMm3AkCwXhDBkJwXn3Nf95XgCp79X 14RTqlMQqIQm9UU3W6L3mpxZgmbad0kaCJw1uWBjI7Ntpqp61ytnMpLQl D21nmMiAizKf7HxfSStXjdLIgoW9NI2Way/DFOo0UjQktiiN2FiH2hInA r/GmhKNSmBFfBL1a2repAiZ1CUQ4CyXsb59bW60rAJ3buBONqdQu8+CDC A==; X-IronPort-AV: E=McAfee;i="6600,9927,10880"; a="1177223" X-IronPort-AV: E=Sophos;i="6.03,265,1694761200"; d="scan'208";a="1177223" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmvoesa102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Oct 2023 09:52:10 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10880"; a="851295425" X-IronPort-AV: E=Sophos;i="6.03,265,1694761200"; d="scan'208";a="851295425" Received: from olindum-mobl1.ger.corp.intel.com (HELO [10.249.254.59]) ([10.249.254.59]) by fmsmga003-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Oct 2023 09:52:06 -0700 Message-ID: <4ffda342ee97dff806cdf66766151da910c743b3.camel@linux.intel.com> Subject: Re: [PATCH drm-misc-next v7 5/7] drm/gpuvm: track/lock/validate external/evicted objects 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: dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-kernel@vger.kernel.org Date: Tue, 31 Oct 2023 17:52:05 +0100 In-Reply-To: <9db6a491-c49f-47a0-8936-9ad1cf4c29d6@redhat.com> References: <20231023201659.25332-1-dakr@redhat.com> <20231023201659.25332-6-dakr@redhat.com> <9db6a491-c49f-47a0-8936-9ad1cf4c29d6@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.5 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,SPF_HELO_NONE,SPF_NONE, T_FILL_THIS_FORM_SHORT,T_SCC_BODY_TEXT_LINE 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]); Tue, 31 Oct 2023 11:16:01 -0700 (PDT) T24gVHVlLCAyMDIzLTEwLTMxIGF0IDE3OjQxICswMTAwLCBEYW5pbG8gS3J1bW1yaWNoIHdyb3Rl Ogo+IE9uIDEwLzMxLzIzIDEyOjM0LCBUaG9tYXMgSGVsbHN0csO2bSB3cm90ZToKPiA+IE9uIE1v biwgMjAyMy0xMC0yMyBhdCAyMjoxNiArMDIwMCwgRGFuaWxvIEtydW1tcmljaCB3cm90ZToKPiA+ ID4gQ3VycmVudGx5IHRoZSBEUk0gR1BVVk0gb2ZmZXJzIGNvbW1vbiBpbmZyYXN0cnVjdHVyZSB0 byB0cmFjayBHUFUKPiA+ID4gVkEKPiA+ID4gYWxsb2NhdGlvbnMgYW5kIG1hcHBpbmdzLCBnZW5l cmljYWxseSBjb25uZWN0IEdQVSBWQSBtYXBwaW5ncyB0bwo+ID4gPiB0aGVpcgo+ID4gPiBiYWNr aW5nIGJ1ZmZlcnMgYW5kIHBlcmZvcm0gbW9yZSBjb21wbGV4IG1hcHBpbmcgb3BlcmF0aW9ucyBv bgo+ID4gPiB0aGUKPiA+ID4gR1BVIFZBCj4gPiA+IHNwYWNlLgo+ID4gPiAKPiA+ID4gSG93ZXZl ciwgdGhlcmUgYXJlIG1vcmUgZGVzaWduIHBhdHRlcm5zIGNvbW1vbmx5IHVzZWQgYnkgZHJpdmVy cywKPiA+ID4gd2hpY2gKPiA+ID4gY2FuIHBvdGVudGlhbGx5IGJlIGdlbmVyYWxpemVkIGluIG9y ZGVyIHRvIG1ha2UgdGhlIERSTSBHUFVWTQo+ID4gPiByZXByZXNlbnQKPiA+ID4gYSBiYXNpcyBm b3IgR1BVLVZNIGltcGxlbWVudGF0aW9ucy4gSW4gdGhpcyBjb250ZXh0LCB0aGlzIHBhdGNoCj4g PiA+IGFpbXMKPiA+ID4gYXQgZ2VuZXJhbGl6aW5nIHRoZSBmb2xsb3dpbmcgZWxlbWVudHMuCj4g PiA+IAo+ID4gPiAxKSBQcm92aWRlIGEgY29tbW9uIGRtYS1yZXN2IGZvciBHRU0gb2JqZWN0cyBu b3QgYmVpbmcgdXNlZAo+ID4gPiBvdXRzaWRlCj4gPiA+IG9mCj4gPiA+IMKgwqDCoCB0aGlzIEdQ VS1WTS4KPiA+ID4gCj4gPiA+IDIpIFByb3ZpZGUgdHJhY2tpbmcgb2YgZXh0ZXJuYWwgR0VNIG9i amVjdHMgKEdFTSBvYmplY3RzIHdoaWNoCj4gPiA+IGFyZQo+ID4gPiDCoMKgwqAgc2hhcmVkIHdp dGggb3RoZXIgR1BVLVZNcykuCj4gPiA+IAo+ID4gPiAzKSBQcm92aWRlIGZ1bmN0aW9ucyB0byBl ZmZpY2llbnRseSBsb2NrIGFsbCBHRU0gb2JqZWN0cyBkbWEtcmVzdgo+ID4gPiB0aGUKPiA+ID4g wqDCoMKgIEdQVS1WTSBjb250YWlucyBtYXBwaW5ncyBvZi4KPiA+ID4gCj4gPiA+IDQpIFByb3Zp ZGUgdHJhY2tpbmcgb2YgZXZpY3RlZCBHRU0gb2JqZWN0cyB0aGUgR1BVLVZNIGNvbnRhaW5zCj4g PiA+IG1hcHBpbmdzCj4gPiA+IMKgwqDCoCBvZiwgc3VjaCB0aGF0IHZhbGlkYXRpb24gb2YgZXZp Y3RlZCBHRU0gb2JqZWN0cyBpcwo+ID4gPiBhY2NlbGVyYXRlZC4KPiA+ID4gCj4gPiA+IDUpIFBy b3ZpZGUgc29tZSBjb252aW5pZW5jZSBmdW5jdGlvbnMgZm9yIGNvbW1vbiBwYXR0ZXJucy4KPiA+ ID4gCj4gPiA+IEJpZyB0aGFua3MgdG8gQm9yaXMgQnJlemlsbG9uIGZvciBoaXMgaGVscCB0byBm aWd1cmUgb3V0IGxvY2tpbmcKPiA+ID4gZm9yCj4gPiA+IGRyaXZlcnMgdXBkYXRpbmcgdGhlIEdQ VSBWQSBzcGFjZSB3aXRoaW4gdGhlIGZlbmNlIHNpZ25hbGxpbmcKPiA+ID4gcGF0aC4KPiA+ID4g Cj4gPiA+IFN1Z2dlc3RlZC1ieTogTWF0dGhldyBCcm9zdCA8bWF0dGhldy5icm9zdEBpbnRlbC5j b20+Cj4gPiA+IFNpZ25lZC1vZmYtYnk6IERhbmlsbyBLcnVtbXJpY2ggPGRha3JAcmVkaGF0LmNv bT4KPiA+IAo+ID4gVGhlIGNoZWNrcGF0Y2gucGwgd2FybmluZyBzdGlsbCBwZXJzaXN0czoKPiA+ IFdBUk5JTkc6IEVOT1RTVVBQIGlzIG5vdCBhIFNVU1Y0IGVycm9yIGNvZGUsIHByZWZlciBFT1BO T1RTVVBQCj4gPiAjNjI3OiBGSUxFOiBkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXZtLmM6MTM0NzoK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVOT1RTVVBQOwo+IAo+ IEhtLCBJIHRob3VnaHQgSSBjaGFuZ2VkIHRoaXMgb25lLiBTZWVtcyBsaWtlIGl0IHNsaXBwZWQg dGhyb3VnaC4KPiBHb25uYQo+IGZpeCB0aGF0Lgo+IAo+ID4gCj4gPiA+IC0tLQo+ID4gPiDCoMKg ZHJpdmVycy9ncHUvZHJtL2RybV9ncHV2bS5jIHwgNjMzCj4gPiA+ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwo+ID4gPiDCoMKgaW5jbHVkZS9kcm0vZHJtX2dwdXZtLmjCoMKg wqDCoCB8IDI1MCArKysrKysrKysrKysrKwo+ID4gPiDCoMKgMiBmaWxlcyBjaGFuZ2VkLCA4ODMg aW5zZXJ0aW9ucygrKQo+ID4gPiAKPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9k cm1fZ3B1dm0uYwo+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1dm0uYwo+ID4gPiBpbmRl eCA3ZjRmNTkxOWY4NGMuLjAxY2JlYjk4NzU1YSAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2RybV9ncHV2bS5jCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1dm0u Ywo+ID4gPiBAQCAtODIsNiArODIsMjEgQEAKPiA+ID4gwqDCoCAqICZkcm1fZ2VtX29iamVjdCBs aXN0IG9mICZkcm1fZ3B1dm1fYm9zIGZvciBhbiBleGlzdGluZwo+ID4gPiBpbnN0YW5jZQo+ID4g PiBvZiB0aGlzCj4gPiA+IMKgwqAgKiBwYXJ0aWN1bGFyIGNvbWJpbmF0aW9uLiBJZiBub3QgZXhp c3RlbnQgYSBuZXcgaW5zdGFuY2UgaXMKPiA+ID4gY3JlYXRlZAo+ID4gPiBhbmQgbGlua2VkCj4g PiA+IMKgwqAgKiB0byB0aGUgJmRybV9nZW1fb2JqZWN0Lgo+ID4gPiArICoKPiA+ID4gKyAqICZk cm1fZ3B1dm1fYm8gc3RydWN0dXJlcywgc2luY2UgdW5pcXVlIGZvciBhIGdpdmVuCj4gPiA+ICZk cm1fZ3B1dm0sCj4gPiA+IGFyZSBhbHNvIHVzZWQKPiA+ID4gKyAqIGFzIGVudHJ5IGZvciB0aGUg JmRybV9ncHV2bSdzIGxpc3RzIG9mIGV4dGVybmFsIGFuZCBldmljdGVkCj4gPiA+IG9iamVjdHMu IFRob3NlCj4gPiA+ICsgKiBsaXN0cyBhcmUgbWFpbnRhaW5lZCBpbiBvcmRlciB0byBhY2NlbGVy YXRlIGxvY2tpbmcgb2YgZG1hLQo+ID4gPiByZXN2Cj4gPiA+IGxvY2tzIGFuZAo+ID4gPiArICog dmFsaWRhdGlvbiBvZiBldmljdGVkIG9iamVjdHMgYm91bmQgaW4gYSAmZHJtX2dwdXZtLiBGb3IK PiA+ID4gaW5zdGFuY2UsIGFsbAo+ID4gPiArICogJmRybV9nZW1fb2JqZWN0J3MgJmRtYV9yZXN2 IG9mIGEgZ2l2ZW4gJmRybV9ncHV2bSBjYW4gYmUKPiA+ID4gbG9ja2VkCj4gPiA+IGJ5IGNhbGxp bmcKPiA+ID4gKyAqIGRybV9ncHV2bV9leGVjX2xvY2soKS4gT25jZSBsb2NrZWQgZHJpdmVycyBj YW4gY2FsbAo+ID4gPiBkcm1fZ3B1dm1fdmFsaWRhdGUoKSBpbgo+ID4gPiArICogb3JkZXIgdG8g dmFsaWRhdGUgYWxsIGV2aWN0ZWQgJmRybV9nZW1fb2JqZWN0cy4gSXQgaXMgYWxzbwo+ID4gPiBw b3NzaWJsZSB0byBsb2NrCj4gPiA+ICsgKiBhZGRpdGlvbmFsICZkcm1fZ2VtX29iamVjdHMgYnkg cHJvdmlkaW5nIHRoZSBjb3JyZXNwb25kaW5nCj4gPiA+IHBhcmFtZXRlcnMgdG8KPiA+ID4gKyAq IGRybV9ncHV2bV9leGVjX2xvY2soKSBhcyB3ZWxsIGFzIG9wZW4gY29kZSB0aGUgJmRybV9leGVj IGxvb3AKPiA+ID4gd2hpbGUgbWFraW5nCj4gPiA+ICsgKiB1c2Ugb2YgaGVscGVyIGZ1bmN0aW9u cyBzdWNoIGFzIGRybV9ncHV2bV9wcmVwYXJlX3JhbmdlKCkgb3IKPiA+ID4gKyAqIGRybV9ncHV2 bV9wcmVwYXJlX29iamVjdHMoKS4KPiA+ID4gKyAqCj4gPiA+ICsgKiBFdmVyeSBib3VuZCAmZHJt X2dlbV9vYmplY3QgaXMgdHJlYXRlZCBhcyBleHRlcm5hbCBvYmplY3QKPiA+ID4gd2hlbgo+ID4g PiBpdHMgJmRtYV9yZXN2Cj4gPiA+ICsgKiBzdHJ1Y3R1cmUgaXMgZGlmZmVyZW50IHRoYW4gdGhl ICZkcm1fZ3B1dm0ncyBjb21tb24gJmRtYV9yZXN2Cj4gPiA+IHN0cnVjdHVyZS4KPiA+ID4gwqDC oCAqLwo+ID4gPiDCoCAKPiA+ID4gwqDCoC8qKgo+ID4gPiBAQCAtNDI5LDYgKzQ0NCwyMCBAQAo+ ID4gPiDCoMKgICogU3Vic2VxdWVudCBjYWxscyB0byBkcm1fZ3B1dm1fYm9fb2J0YWluKCkgZm9y IHRoZSBzYW1lCj4gPiA+ICZkcm1fZ3B1dm0KPiA+ID4gYW5kCj4gPiA+IMKgwqAgKiAmZHJtX2dl bV9vYmplY3QgbXVzdCBiZSBhYmxlIHRvIG9ic2VydmUgcHJldmlvdXMgY3JlYXRpb25zCj4gPiA+ IGFuZAo+ID4gPiBkZXN0cnVjdGlvbnMKPiA+ID4gwqDCoCAqIG9mICZkcm1fZ3B1dm1fYm9zIGlu IG9yZGVyIHRvIGtlZXAgaW5zdGFuY2VzIHVuaXF1ZS4KPiA+ID4gKyAqCj4gPiA+ICsgKiBUaGUg JmRybV9ncHV2bSdzIGxpc3RzIGZvciBrZWVwaW5nIHRyYWNrIG9mIGV4dGVybmFsIGFuZAo+ID4g PiBldmljdGVkCj4gPiA+IG9iamVjdHMgYXJlCj4gPiA+ICsgKiBwcm90ZWN0ZWQgYWdhaW5zdCBj b25jdXJyZW50IGluc2VydGlvbiAvIHJlbW92YWwgYW5kCj4gPiA+IGl0ZXJhdGlvbgo+ID4gPiBp bnRlcm5hbGx5Lgo+ID4gPiArICoKPiA+ID4gKyAqIEhvd2V2ZXIsIGRyaXZlcnMgc3RpbGwgbmVl ZCBlbnN1cmUgdG8gcHJvdGVjdCBjb25jdXJyZW50Cj4gPiA+IGNhbGxzIHRvCj4gPiA+IGZ1bmN0 aW9ucwo+ID4gPiArICogaXRlcmF0aW5nIHRob3NlIGxpc3RzLCBuYW1lbHkgZHJtX2dwdXZtX3By ZXBhcmVfb2JqZWN0cygpIGFuZAo+ID4gPiArICogZHJtX2dwdXZtX3ZhbGlkYXRlKCkuCj4gPiA+ ICsgKgo+ID4gPiArICogQWx0ZXJuYXRpdmVseSwgZHJpdmVycyBjYW4gc2V0IHRoZSAmRFJNX0dQ VVZNX1JFU1ZfUFJPVEVDVEVECj4gPiA+IGZsYWcKPiA+ID4gdG8gaW5kaWNhdGUKPiA+ID4gKyAq IHRoYXQgdGhlIGNvcnJlc3BvbmRpbmcgJmRtYV9yZXN2IGxvY2tzIGFyZSBoZWxkIGluIG9yZGVy IHRvCj4gPiA+IHByb3RlY3QgdGhlCj4gPiA+ICsgKiBsaXN0cy4gSWYgJkRSTV9HUFVWTV9SRVNW X1BST1RFQ1RFRCBpcyBzZXQsIGludGVybmFsIGxvY2tpbmcKPiA+ID4gaXMKPiA+ID4gZGlzYWJs ZWQgYW5kCj4gPiA+ICsgKiB0aGUgY29ycmVzcG9uZGluZyBsb2NrZGVwIGNoZWNrcyBhcmUgZW5h YmxlZC4gVGhpcyBpcyBhbgo+ID4gPiBvcHRpbWl6YXRpb24gZm9yCj4gPiA+ICsgKiBkcml2ZXJz IHdoaWNoIGFyZSBjYXBhYmxlIG9mIHRha2luZyB0aGUgY29ycmVzcG9uZGluZwo+ID4gPiAmZG1h X3Jlc3YKPiA+ID4gbG9ja3MgYW5kCj4gPiA+ICsgKiBoZW5jZSBkbyBub3QgcmVxdWlyZSBpbnRl cm5hbCBsb2NraW5nLgo+ID4gPiDCoMKgICovCj4gPiA+IMKgIAo+ID4gPiDCoMKgLyoqCj4gPiA+ IEBAIC02NDEsNiArNjcwLDIwMSBAQAo+ID4gPiDCoMKgICrCoMKgwqDCoMKgfQo+ID4gPiDCoMKg ICovCj4gPiA+IMKgIAo+ID4gPiArLyoqCj4gPiA+ICsgKiBnZXRfbmV4dF92bV9ib19mcm9tX2xp c3QoKSAtIGdldCB0aGUgbmV4dCB2bV9ibyBlbGVtZW50Cj4gPiA+ICsgKiBAX19ncHV2bTogdGhl ICZkcm1fZ3B1dm0KPiA+ID4gKyAqIEBfX2xpc3RfbmFtZTogdGhlIG5hbWUgb2YgdGhlIGxpc3Qg d2UncmUgaXRlcmF0aW5nIG9uCj4gPiA+ICsgKiBAX19sb2NhbF9saXN0OiBhIHBvaW50ZXIgdG8g dGhlIGxvY2FsIGxpc3QgdXNlZCB0byBzdG9yZQo+ID4gPiBhbHJlYWR5Cj4gPiA+IGl0ZXJhdGVk IGl0ZW1zCj4gPiA+ICsgKiBAX19wcmV2X3ZtX2JvOiB0aGUgcHJldmlvdXMgZWxlbWVudCB3ZSBn b3QgZnJvbQo+ID4gPiBnZXRfbmV4dF92bV9ib19mcm9tX2xpc3QoKQo+ID4gPiArICoKPiA+ID4g KyAqIFRoaXMgaGVscGVyIGlzIGhlcmUgdG8gcHJvdmlkZSBsb2NrbGVzcyBsaXN0IGl0ZXJhdGlv bi4KPiA+ID4gTG9ja2xlc3MKPiA+ID4gYXMgaW4sIHRoZQo+ID4gPiArICogaXRlcmF0b3IgcmVs ZWFzZXMgdGhlIGxvY2sgaW1tZWRpYXRlbHkgYWZ0ZXIgcGlja2luZyB0aGUKPiA+ID4gZmlyc3QK PiA+ID4gZWxlbWVudCBmcm9tCj4gPiA+ICsgKiB0aGUgbGlzdCwgc28gbGlzdCBpbnNlcnRpb24g ZGVsZXRpb24gY2FuIGhhcHBlbiBjb25jdXJyZW50bHkuCj4gPiA+ICsgKgo+ID4gPiArICogRWxl bWVudHMgcG9wcGVkIGZyb20gdGhlIG9yaWdpbmFsIGxpc3QgYXJlIGtlcHQgaW4gYSBsb2NhbAo+ ID4gPiBsaXN0LAo+ID4gPiBzbyByZW1vdmFsCj4gPiA+ICsgKiBhbmQgaXNfZW1wdHkgY2hlY2tz IGNhbiBzdGlsbCBoYXBwZW4gd2hpbGUgd2UncmUgaXRlcmF0aW5nCj4gPiA+IHRoZQo+ID4gPiBs aXN0Lgo+ID4gPiArICovCj4gPiA+ICsjZGVmaW5lIGdldF9uZXh0X3ZtX2JvX2Zyb21fbGlzdChf X2dwdXZtLCBfX2xpc3RfbmFtZSwKPiA+ID4gX19sb2NhbF9saXN0LAo+ID4gPiBfX3ByZXZfdm1f Ym8pwqDCoMKgwqDCoFwKPiA+ID4gK8KgwqDCoMKgwqDCoMKgKHsKPiA+ID4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dm1fYm8gKl9fdm1fYm8gPQo+ID4gPiBOVUxMO8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoFwKPiA+ID4gKwo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgXAo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZt X2JvX3B1dChfX3ByZXZfdm1fYm8pOwo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgXAo+ID4gPiArCj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBcCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzcGluX2xv Y2soJihfX2dwdXZtKS0KPiA+ID4gPiBfX2xpc3RfbmFtZS5sb2NrKTvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgXAo+ID4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCEoX19ncHV2bSktCj4gPiA+ID4gX19s aXN0X25hbWUubG9jYWxfbGlzdCnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKF9fZ3B1dm0pLT5fX2xpc3RfbmFtZS5sb2NhbF9s aXN0ID0KPiA+ID4gX19sb2NhbF9saXN0O8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwK PiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVsc2UKPiA+ID4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fV0FSTl9PTigoX19ncHV2bSktCj4gPiA+ ID4gZHJtLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgXAo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKF9fZ3B1dm0pLQo+ ID4gPiA+X19saXN0X25hbWUubG9jYWxfbGlzdAo+ID4gPiAhPSBfX2xvY2FsX2xpc3QpO8KgXAo+ ID4gPiArCj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4g PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB3aGlsZSAoIWxpc3RfZW1wdHkoJihf X2dwdXZtKS0+X19saXN0X25hbWUubGlzdCkpCj4gPiA+IHvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgX192bV9ibyA9IGxpc3RfZmlyc3RfZW50cnkoJihfX2dwdXZtKS0K PiA+ID4gPiBfX2xpc3RfbmFtZS5saXN0LMKgwqDCoMKgwqDCoMKgwqBcCj4gPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QKPiA+ID4gZHJtX2dwdXZt X2JvLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiA+ICsKPiA+ID4gbGlz dC5lbnRyeS5fX2xpc3RfbmFtZSk7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGtyZWZfZ2V0 X3VubGVzc196ZXJvKCZfX3ZtX2JvLT5rcmVmKSkKPiA+ID4ge8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGlzdF9tb3ZlX3RhaWwoJihfX3Zt X2JvKS0KPiA+ID4gPiBsaXN0LmVudHJ5Ll9fbGlzdF9uYW1lLMKgwqDCoMKgwqDCoFwKPiA+ID4g Kwo+ID4gPiBfX2xvY2FsX2xpc3QpO8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoFwKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gPiA+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfSBlbHNlCj4gPiA+IHvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgXAo+ID4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsaXN0 X2RlbF9pbml0KCYoX192bV9ibyktCj4gPiA+ID4gbGlzdC5lbnRyeS5fX2xpc3RfbmFtZSk7wqDC oMKgwqDCoMKgXAo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBfX3ZtX2JvID0KPiA+ID4gTlVMTDvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgXAo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoH0KPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oFwKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiA+ID4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHNwaW5fdW5sb2NrKCYoX19ncHV2bSktCj4gPiA+ID4gX19saXN0X25hbWUu bG9jayk7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgXAo+ID4gPiArCj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBcCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBfX3ZtX2JvOwo+ ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgXAo+ID4gPiArwqDC oMKgwqDCoMKgwqB9KQo+ID4gPiArCj4gPiA+ICsvKioKPiA+ID4gKyAqIGZvcl9lYWNoX3ZtX2Jv X2luX2xpc3QoKSAtIGludGVybmFsIHZtX2JvIGxpc3QgaXRlcmF0b3IKPiA+ID4gKyAqIEBfX2dw dXZtOiB0aGUgJmRybV9ncHV2bQo+ID4gPiArICogQF9fbGlzdF9uYW1lOiB0aGUgbmFtZSBvZiB0 aGUgbGlzdCB3ZSdyZSBpdGVyYXRpbmcgb24KPiA+ID4gKyAqIEBfX2xvY2FsX2xpc3Q6IGEgcG9p bnRlciB0byB0aGUgbG9jYWwgbGlzdCB1c2VkIHRvIHN0b3JlCj4gPiA+IGFscmVhZHkKPiA+ID4g aXRlcmF0ZWQgaXRlbXMKPiA+ID4gKyAqIEBfX3ZtX2JvOiB0aGUgc3RydWN0IGRybV9ncHV2bV9i byB0byBhc3NpZ24gaW4gZWFjaCBpdGVyYXRpb24KPiA+ID4gc3RlcAo+ID4gPiArICoKPiA+ID4g KyAqIFRoaXMgaGVscGVyIGlzIGhlcmUgdG8gcHJvdmlkZSBsb2NrbGVzcyBsaXN0IGl0ZXJhdGlv bi4KPiA+ID4gTG9ja2xlc3MKPiA+ID4gYXMgaW4sIHRoZQo+ID4gPiArICogaXRlcmF0b3IgcmVs ZWFzZXMgdGhlIGxvY2sgaW1tZWRpYXRlbHkgYWZ0ZXIgcGlja2luZyB0aGUKPiA+ID4gZmlyc3QK PiA+ID4gZWxlbWVudCBmcm9tIHRoZQo+ID4gPiArICogbGlzdCwgaGVuY2UgbGlzdCBpbnNlcnRp b24gYW5kIGRlbGV0aW9uIGNhbiBoYXBwZW4KPiA+ID4gY29uY3VycmVudGx5Lgo+ID4gPiArICoK PiA+ID4gKyAqIEl0IGlzIG5vdCBhbGxvd2VkIHRvIHJlLWFzc2lnbiB0aGUgdm1fYm8gcG9pbnRl ciBmcm9tIGluc2lkZQo+ID4gPiB0aGlzCj4gPiA+IGxvb3AuCj4gPiA+ICsgKgo+ID4gPiArICog VHlwaWNhbCB1c2U6Cj4gPiA+ICsgKgo+ID4gPiArICrCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2 bV9ibyAqdm1fYm87Cj4gPiA+ICsgKsKgwqDCoMKgwqBMSVNUX0hFQUQobXlfbG9jYWxfbGlzdCk7 Cj4gPiA+ICsgKgo+ID4gPiArICrCoMKgwqDCoMKgcmV0ID0gMDsKPiA+ID4gKyAqwqDCoMKgwqDC oGZvcl9lYWNoX3ZtX2JvX2luX2xpc3QoZ3B1dm0sIDxsaXN0X25hbWU+LAo+ID4gPiAmbXlfbG9j YWxfbGlzdCwKPiA+ID4gdm1fYm8pIHsKPiA+ID4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXQgPSBkb19zb21ldGhpbmdfd2l0aF92bV9ibyguLi4sIHZtX2JvKTsKPiA+ID4gKyAqwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ID4gPiArICrCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiA+ID4gKyAqwqDCoMKgwqDCoH0KPiA+ ID4gKyAqwqDCoMKgwqDCoC8vIERyb3AgcmVmIGluIGNhc2Ugd2UgYnJlYWsgb3V0IG9mIHRoZSBs b29wLgo+ID4gPiArICrCoMKgwqDCoMKgZHJtX2dwdXZtX2JvX3B1dCh2bV9ibyk7Cj4gPiA+ICsg KsKgwqDCoMKgwqByZXN0b3JlX3ZtX2JvX2xpc3QoZ3B1dm0sIDxsaXN0X25hbWU+LCAmbXlfbG9j YWxfbGlzdCk7Cj4gPiA+ICsgKgo+ID4gPiArICoKPiA+ID4gKyAqIE9ubHkgdXNlZCBmb3IgaW50 ZXJuYWwgbGlzdCBpdGVyYXRpb25zLCBub3QgbWVhbnQgdG8gYmUKPiA+ID4gZXhwb3NlZAo+ID4g PiB0byB0aGUgb3V0c2lkZQo+ID4gPiArICogd29ybGQuCj4gPiA+ICsgKi8KPiA+ID4gKyNkZWZp bmUgZm9yX2VhY2hfdm1fYm9faW5fbGlzdChfX2dwdXZtLCBfX2xpc3RfbmFtZSwKPiA+ID4gX19s b2NhbF9saXN0LAo+ID4gPiBfX3ZtX2JvKcKgwqDCoMKgXAo+ID4gPiArwqDCoMKgwqDCoMKgwqBm b3IgKF9fdm1fYm8gPSBnZXRfbmV4dF92bV9ib19mcm9tX2xpc3QoX19ncHV2bSwKPiA+ID4gX19s aXN0X25hbWUswqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBfX2xvY2FsX2xpc3QsCj4gPiA+IE5VTEwpO8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoFwKPiA+ID4gKwo+ID4gPiBfX3ZtX2JvO8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+ID4gPiDCoMKgXAo+ID4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBfX3ZtX2JvID0gZ2V0X25leHRfdm1fYm9fZnJvbV9saXN0 KF9fZ3B1dm0sCj4gPiA+IF9fbGlzdF9uYW1lLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgX19sb2NhbF9saXN0LAo+ID4g PiBfX3ZtX2JvKSkKPiA+ID4gKwo+ID4gPiArc3RhdGljIHZvaWQKPiA+ID4gK19fcmVzdG9yZV92 bV9ib19saXN0KHN0cnVjdCBkcm1fZ3B1dm0gKmdwdXZtLCBzcGlubG9ja190ICpsb2NrLAo+ID4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGxpc3RfaGVh ZCAqbGlzdCwgc3RydWN0IGxpc3RfaGVhZAo+ID4gPiAqKmxvY2FsX2xpc3QpCj4gPiA+ICt7Cj4g PiA+ICvCoMKgwqDCoMKgwqDCoC8qIE1lcmdlIGJhY2sgdGhlIHR3byBsaXN0cywgbW92aW5nIGxv Y2FsIGxpc3QgZWxlbWVudHMKPiA+ID4gdG8KPiA+ID4gdGhlCj4gPiA+ICvCoMKgwqDCoMKgwqDC oCAqIGhlYWQgdG8gcHJlc2VydmUgcHJldmlvdXMgb3JkZXJpbmcsIGluIGNhc2UgaXQKPiA+ID4g bWF0dGVycy4KPiA+ID4gK8KgwqDCoMKgwqDCoMKgICovCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHNw aW5fbG9jayhsb2NrKTsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCpsb2NhbF9saXN0KSB7Cj4g PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsaXN0X3NwbGljZSgqbG9jYWxfbGlz dCwgbGlzdCk7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqbG9jYWxfbGlz dCA9IE5VTEw7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3Bp bl91bmxvY2sobG9jayk7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gKy8qKgo+ID4gPiArICogcmVz dG9yZV92bV9ib19saXN0KCkgLSBtb3ZlIHZtX2JvIGVsZW1lbnRzIGJhY2sgdG8gdGhlaXIKPiA+ ID4gb3JpZ2luYWwKPiA+ID4gbGlzdAo+ID4gPiArICogQF9fZ3B1dm06IHRoZSAmZHJtX2dwdXZt Cj4gPiA+ICsgKiBAX19saXN0X25hbWU6IHRoZSBuYW1lIG9mIHRoZSBsaXN0IHdlJ3JlIGl0ZXJh dGluZyBvbgo+ID4gPiArICoKPiA+ID4gKyAqIFdoZW4gd2UncmUgZG9uZSBpdGVyYXRpbmcgYSB2 bV9ibyBsaXN0LCB3ZSBzaG91bGQgY2FsbAo+ID4gPiByZXN0b3JlX3ZtX2JvX2xpc3QoKQo+ID4g PiArICogdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgc3RhdGUgYW5kIGxldCBuZXcgaXRlcmF0aW9u cyB0YWtlCj4gPiA+IHBsYWNlLgo+ID4gPiArICovCj4gPiA+ICsjZGVmaW5lIHJlc3RvcmVfdm1f Ym9fbGlzdChfX2dwdXZtLAo+ID4gPiBfX2xpc3RfbmFtZSnCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgXAo+ID4gPiArwqDCoMKgwqDCoMKgwqBfX3Jlc3RvcmVf dm1fYm9fbGlzdCgoX19ncHV2bSksICYoX19ncHV2bSktCj4gPiA+ID4gX19saXN0X25hbWUubG9j ayzCoMKgwqBcCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgJihfX2dwdXZtKS0KPiA+ID4gPiBfX2xpc3RfbmFtZS5saXN0LMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJihfX2dwdXZtKS0+X19saXN0X25hbWUubG9j YWxfbGlzdCkKPiA+ID4gKwo+ID4gPiArc3RhdGljIHZvaWQKPiA+ID4gK2NvbmRfc3Bpbl9sb2Nr KHNwaW5sb2NrX3QgKmxvY2ssIGJvb2wgY29uZCkKPiA+ID4gK3sKPiA+ID4gK8KgwqDCoMKgwqDC oMKgaWYgKGNvbmQpCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzcGluX2xv Y2sobG9jayk7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyB2b2lkCj4gPiA+ICtjb25k X3NwaW5fdW5sb2NrKHNwaW5sb2NrX3QgKmxvY2ssIGJvb2wgY29uZCkKPiA+ID4gK3sKPiA+ID4g K8KgwqDCoMKgwqDCoMKgaWYgKGNvbmQpCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBzcGluX3VubG9jayhsb2NrKTsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIHZv aWQKPiA+ID4gK19fZHJtX2dwdXZtX2JvX2xpc3RfYWRkKHN0cnVjdCBkcm1fZ3B1dm0gKmdwdXZt LCBzcGlubG9ja190Cj4gPiA+ICpsb2NrLAo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5LCBzdHJ1Y3QgbGlz dF9oZWFkCj4gPiA+ICpsaXN0KQo+ID4gPiArewo+ID4gPiArwqDCoMKgwqDCoMKgwqBjb25kX3Nw aW5fbG9jayhsb2NrLCAhIWxvY2spOwo+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAobGlzdF9lbXB0 eShlbnRyeSkpCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsaXN0X2FkZF90 YWlsKGVudHJ5LCBsaXN0KTsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgY29uZF9zcGluX3VubG9jayhs b2NrLCAhIWxvY2spOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICsvKioKPiA+ID4gKyAqIGRybV9n cHV2bV9ib19saXN0X2FkZCgpIC0gaW5zZXJ0IGEgdm1fYm8gaW50byB0aGUgZ2l2ZW4gbGlzdAo+ ID4gPiArICogQF9fdm1fYm86IHRoZSAmZHJtX2dwdXZtX2JvCj4gPiA+ICsgKiBAX19saXN0X25h bWU6IHRoZSBuYW1lIG9mIHRoZSBsaXN0IHRvIGluc2VydCBpbnRvCj4gPiA+ICsgKiBAX19sb2Nr OiB3aGV0aGVyIHRvIGxvY2sgd2l0aCB0aGUgaW50ZXJuYWwgc3BpbmxvY2sKPiA+ID4gKyAqCj4g PiA+ICsgKiBJbnNlcnRzIHRoZSBnaXZlbiBAX192bV9ibyBpbnRvIHRoZSBsaXN0IHNwZWNpZmll ZCBieQo+ID4gPiBAX19saXN0X25hbWUuCj4gPiA+ICsgKi8KPiA+ID4gKyNkZWZpbmUgZHJtX2dw dXZtX2JvX2xpc3RfYWRkKF9fdm1fYm8sIF9fbGlzdF9uYW1lLAo+ID4gPiBfX2xvY2spwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKPiA+ID4gK8KgwqDCoMKgwqDCoMKg X19kcm1fZ3B1dm1fYm9fbGlzdF9hZGQoKF9fdm1fYm8pLQo+ID4gPiA+IHZtLMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg XAo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBfX2xvY2sgPyAmKF9fdm1fYm8pLT52bS0KPiA+ID4gPiBfX2xpc3RfbmFt ZS5sb2NrIDrCoMKgwqDCoMKgXAo+ID4gPiArCj4gPiA+IE5VTEwswqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCYoX192bV9ibyktCj4gPiA+ID4gbGlzdC5lbnRyeS5fX2xpc3RfbmFtZSzCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoFwKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgJihfX3ZtX2JvKS0+dm0tPl9fbGlzdF9u YW1lLmxpc3QpCj4gPiA+ICsKPiA+ID4gK3N0YXRpYyB2b2lkCj4gPiA+ICtfX2RybV9ncHV2bV9i b19saXN0X2RlbChzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSwgc3BpbmxvY2tfdAo+ID4gPiAqbG9j aywKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgbGlzdF9oZWFkICplbnRyeSwgYm9vbCBpbml0KQo+ID4gPiArewo+ID4gPiArwqDCoMKg wqDCoMKgwqBjb25kX3NwaW5fbG9jayhsb2NrLCAhIWxvY2spOwo+ID4gPiArwqDCoMKgwqDCoMKg wqBpZiAoaW5pdCkgewo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFs aXN0X2VtcHR5KGVudHJ5KSkKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBsaXN0X2RlbF9pbml0KGVudHJ5KTsKPiA+ID4gK8KgwqDCoMKgwqDCoMKg fSBlbHNlIHsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxpc3RfZGVsKGVu dHJ5KTsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gPiArwqDCoMKgwqDCoMKgwqBjb25kX3Nw aW5fdW5sb2NrKGxvY2ssICEhbG9jayk7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gKy8qKgo+ID4g PiArICogZHJtX2dwdXZtX2JvX2xpc3RfZGVsX2luaXQoKSAtIHJlbW92ZSBhIHZtX2JvIGZyb20g dGhlIGdpdmVuCj4gPiA+IGxpc3QKPiA+ID4gKyAqIEBfX3ZtX2JvOiB0aGUgJmRybV9ncHV2bV9i bwo+ID4gPiArICogQF9fbGlzdF9uYW1lOiB0aGUgbmFtZSBvZiB0aGUgbGlzdCB0byBpbnNlcnQg aW50bwo+ID4gPiArICogQF9fbG9jazogd2hldGhlciB0byBsb2NrIHdpdGggdGhlIGludGVybmFs IHNwaW5sb2NrCj4gPiA+ICsgKgo+ID4gPiArICogUmVtb3ZlcyB0aGUgZ2l2ZW4gQF9fdm1fYm8g ZnJvbSB0aGUgbGlzdCBzcGVjaWZpZWQgYnkKPiA+ID4gQF9fbGlzdF9uYW1lLgo+ID4gPiArICov Cj4gPiA+ICsjZGVmaW5lIGRybV9ncHV2bV9ib19saXN0X2RlbF9pbml0KF9fdm1fYm8sIF9fbGlz dF9uYW1lLAo+ID4gPiBfX2xvY2spwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgXAo+ID4g PiArwqDCoMKgwqDCoMKgwqBfX2RybV9ncHV2bV9ib19saXN0X2RlbCgoX192bV9ibyktCj4gPiA+ ID4gdm0swqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBcCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoF9fbG9jayA/ICYoX192bV9ibyktPnZtLQo+ ID4gPiA+IF9fbGlzdF9uYW1lLmxvY2sgOsKgwqDCoMKgwqBcCj4gPiA+ICsKPiA+ID4gTlVMTCzC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoFwKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgJihfX3ZtX2JvKS0KPiA+ID4gPiBsaXN0LmVudHJ5Ll9f bGlzdF9uYW1lLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgXAo+ID4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0cnVlKQo+ ID4gPiArCj4gPiA+ICsvKioKPiA+ID4gKyAqIGRybV9ncHV2bV9ib19saXN0X2RlbCgpIC0gcmVt b3ZlIGEgdm1fYm8gZnJvbSB0aGUgZ2l2ZW4gbGlzdAo+ID4gPiArICogQF9fdm1fYm86IHRoZSAm ZHJtX2dwdXZtX2JvCj4gPiA+ICsgKiBAX19saXN0X25hbWU6IHRoZSBuYW1lIG9mIHRoZSBsaXN0 IHRvIGluc2VydCBpbnRvCj4gPiA+ICsgKiBAX19sb2NrOiB3aGV0aGVyIHRvIGxvY2sgd2l0aCB0 aGUgaW50ZXJuYWwgc3BpbmxvY2sKPiA+ID4gKyAqCj4gPiA+ICsgKiBSZW1vdmVzIHRoZSBnaXZl biBAX192bV9ibyBmcm9tIHRoZSBsaXN0IHNwZWNpZmllZCBieQo+ID4gPiBAX19saXN0X25hbWUu Cj4gPiA+ICsgKi8KPiA+ID4gKyNkZWZpbmUgZHJtX2dwdXZtX2JvX2xpc3RfZGVsKF9fdm1fYm8s IF9fbGlzdF9uYW1lLAo+ID4gPiBfX2xvY2spwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoFwKPiA+ID4gK8KgwqDCoMKgwqDCoMKgX19kcm1fZ3B1dm1fYm9fbGlzdF9kZWwo KF9fdm1fYm8pLQo+ID4gPiA+IHZtLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgXAo+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBfX2xvY2sgPyAm KF9fdm1fYm8pLT52bS0KPiA+ID4gPiBfX2xpc3RfbmFtZS5sb2NrIDrCoMKgwqDCoMKgXAo+ID4g PiArCj4gPiA+IE5VTEwswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCYoX192bV9ibyktCj4gPiA+ ID4gbGlzdC5lbnRyeS5fX2xpc3RfbmFtZSzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgZmFsc2UpCj4gPiA+ICsKPiA+ID4gwqDCoCNkZWZpbmUgdG9fZHJtX2dwdXZhKF9f bm9kZSnCoMKgwqBjb250YWluZXJfb2YoKF9fbm9kZSksIHN0cnVjdAo+ID4gPiBkcm1fZ3B1dmEs IHJiLm5vZGUpCj4gPiA+IMKgIAo+ID4gPiDCoMKgI2RlZmluZSBHUFVWQV9TVEFSVChub2RlKSAo KG5vZGUpLT52YS5hZGRyKQo+ID4gPiBAQCAtNzYzLDYgKzk4NywxMiBAQCBkcm1fZ3B1dm1faW5p dChzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSwKPiA+ID4gY29uc3QKPiA+ID4gY2hhciAqbmFtZSwK PiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgZ3B1dm0tPnJiLnRyZWUgPSBSQl9ST09UX0NBQ0hFRDsK PiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgSU5JVF9MSVNUX0hFQUQoJmdwdXZtLT5yYi5saXN0KTsK PiA+ID4gwqAgCj4gPiA+ICvCoMKgwqDCoMKgwqDCoElOSVRfTElTVF9IRUFEKCZncHV2bS0+ZXh0 b2JqLmxpc3QpOwo+ID4gPiArwqDCoMKgwqDCoMKgwqBzcGluX2xvY2tfaW5pdCgmZ3B1dm0tPmV4 dG9iai5sb2NrKTsKPiA+ID4gKwo+ID4gPiArwqDCoMKgwqDCoMKgwqBJTklUX0xJU1RfSEVBRCgm Z3B1dm0tPmV2aWN0Lmxpc3QpOwo+ID4gPiArwqDCoMKgwqDCoMKgwqBzcGluX2xvY2tfaW5pdCgm Z3B1dm0tPmV2aWN0LmxvY2spOwo+ID4gPiArCj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoGdwdXZt LT5uYW1lID0gbmFtZSA/IG5hbWUgOiAidW5rbm93biI7Cj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDC oGdwdXZtLT5mbGFncyA9IGZsYWdzOwo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqBncHV2bS0+b3Bz ID0gb3BzOwo+ID4gPiBAQCAtODA1LDEwICsxMDM1LDM1MiBAQCBkcm1fZ3B1dm1fZGVzdHJveShz dHJ1Y3QgZHJtX2dwdXZtCj4gPiA+ICpncHV2bSkKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgZHJt X1dBUk4oZ3B1dm0tPmRybSwgIVJCX0VNUFRZX1JPT1QoJmdwdXZtLQo+ID4gPiA+cmIudHJlZS5y Yl9yb290KSwKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiR1BVVkEg dHJlZSBpcyBub3QgZW1wdHksIHBvdGVudGlhbGx5IGxlYWtpbmcKPiA+ID4gbWVtb3J5LlxuIik7 Cj4gPiA+IMKgIAo+ID4gPiArwqDCoMKgwqDCoMKgwqBkcm1fV0FSTihncHV2bS0+ZHJtLCAhbGlz dF9lbXB0eSgmZ3B1dm0tPmV4dG9iai5saXN0KSwKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAiRXh0b2JqIGxpc3Qgc2hvdWxkIGJlIGVtcHR5LlxuIik7Cj4gPiA+ICvCoMKg wqDCoMKgwqDCoGRybV9XQVJOKGdwdXZtLT5kcm0sICFsaXN0X2VtcHR5KCZncHV2bS0+ZXZpY3Qu bGlzdCksCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIkV2aWN0IGxpc3Qg c2hvdWxkIGJlIGVtcHR5LlxuIik7Cj4gPiA+ICsKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgZHJt X2dlbV9vYmplY3RfcHV0KGdwdXZtLT5yX29iaik7Cj4gPiA+IMKgwqB9Cj4gPiA+IMKgwqBFWFBP UlRfU1lNQk9MX0dQTChkcm1fZ3B1dm1fZGVzdHJveSk7Cj4gPiA+IMKgIAo+ID4gPiArc3RhdGlj IGludAo+ID4gPiArX19kcm1fZ3B1dm1fcHJlcGFyZV9vYmplY3RzKHN0cnVjdCBkcm1fZ3B1dm0g KmdwdXZtLAo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2V4ZWMgKmV4ZWMsCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGludCBudW1fZmVu Y2VzKQo+ID4gPiArewo+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZtX2JvICp2 bV9ibzsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgTElTVF9IRUFEKGV4dG9ianMpOwo+ID4gPiArwqDC oMKgwqDCoMKgwqBpbnQgcmV0ID0gMDsKPiA+ID4gKwo+ID4gPiArwqDCoMKgwqDCoMKgwqBmb3Jf ZWFjaF92bV9ib19pbl9saXN0KGdwdXZtLCBleHRvYmosICZleHRvYmpzLCB2bV9ibykgewo+ID4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gZHJtX2V4ZWNfcHJlcGFyZV9v YmooZXhlYywgdm1fYm8tPm9iaiwKPiA+ID4gbnVtX2ZlbmNlcyk7Cj4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ID4gPiArwqDCoMKgwqDCoMKgwqB9Cj4g PiA+ICvCoMKgwqDCoMKgwqDCoC8qIERyb3AgcmVmIGluIGNhc2Ugd2UgYnJlYWsgb3V0IG9mIHRo ZSBsb29wLiAqLwo+ID4gPiArwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dm1fYm9fcHV0KHZtX2JvKTsK PiA+ID4gK8KgwqDCoMKgwqDCoMKgcmVzdG9yZV92bV9ib19saXN0KGdwdXZtLCBleHRvYmopOwo+ ID4gPiArCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gPiA+ICt9Cj4gPiA+ICsK PiA+ID4gK3N0YXRpYyBpbnQKPiA+ID4gK2RybV9ncHV2bV9wcmVwYXJlX29iamVjdHNfbG9ja2Vk KHN0cnVjdCBkcm1fZ3B1dm0gKmdwdXZtLAo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRybV9leGVjICpl eGVjLAo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgaW50IG51bV9mZW5jZXMpCj4gPiA+ICt7Cj4gPiA+ ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dm1fYm8gKnZtX2JvOwo+ID4gPiArwqDCoMKg wqDCoMKgwqBpbnQgcmV0ID0gMDsKPiA+ID4gKwo+ID4gPiArwqDCoMKgwqDCoMKgwqBkcm1fZ3B1 dm1fcmVzdl9hc3NlcnRfaGVsZChncHV2bSk7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoGxpc3RfZm9y X2VhY2hfZW50cnkodm1fYm8sICZncHV2bS0+ZXh0b2JqLmxpc3QsCj4gPiA+IGxpc3QuZW50cnku ZXh0b2JqKSB7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBkcm1f ZXhlY19wcmVwYXJlX29iaihleGVjLCB2bV9iby0+b2JqLAo+ID4gPiBudW1fZmVuY2VzKTsKPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gPiA+ICsKPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICh2bV9iby0+ZXZpY3RlZCkKPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1 dm1fYm9fbGlzdF9hZGQodm1fYm8sIGV2aWN0LAo+ID4gPiBmYWxzZSk7Cj4gPiA+ICvCoMKgwqDC oMKgwqDCoH0KPiA+ID4gKwo+ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ID4gPiAr fQo+ID4gPiArCj4gPiA+ICsvKioKPiA+ID4gKyAqIGRybV9ncHV2bV9wcmVwYXJlX29iamVjdHMo KSAtIHByZXBhcmUgYWxsIGFzc29pY2lhdGVkIEJPcwo+ID4gPiArICogQGdwdXZtOiB0aGUgJmRy bV9ncHV2bQo+ID4gPiArICogQGV4ZWM6IHRoZSAmZHJtX2V4ZWMgbG9ja2luZyBjb250ZXh0Cj4g PiA+ICsgKiBAbnVtX2ZlbmNlczogdGhlIGFtb3VudCBvZiAmZG1hX2ZlbmNlcyB0byByZXNlcnZl Cj4gPiA+ICsgKgo+ID4gPiArICogQ2FsbHMgZHJtX2V4ZWNfcHJlcGFyZV9vYmooKSBmb3IgYWxs ICZkcm1fZ2VtX29iamVjdHMgdGhlCj4gPiA+IGdpdmVuCj4gPiA+ICsgKiAmZHJtX2dwdXZtIGNv bnRhaW5zIG1hcHBpbmdzIG9mLgo+ID4gPiArICoKPiA+ID4gKyAqIFVzaW5nIHRoaXMgZnVuY3Rp b24gZGlyZWN0bHksIGl0IGlzIHRoZSBkcml2ZXJzCj4gPiA+IHJlc3BvbnNpYmlsaXR5IHRvCj4g PiA+IGNhbGwKPiA+ID4gKyAqIGRybV9leGVjX2luaXQoKSBhbmQgZHJtX2V4ZWNfZmluaSgpIGFj Y29yZGluZ2x5Lgo+ID4gPiArICoKPiA+ID4gKyAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gaXMgc2Fm ZSBhZ2FpbnN0IGNvbmN1cnJlbnQgaW5zZXJ0aW9uIGFuZAo+ID4gPiByZW1vdmFsIG9mCj4gPiA+ ICsgKiBleHRlcm5hbCBvYmplY3RzLCBob3dldmVyIGl0IGlzIG5vdCBzYWZlIGFnYWluc3QgY29u Y3VycmVudAo+ID4gPiB1c2FnZQo+ID4gPiBpdHNlbGYuCj4gPiA+ICsgKgo+ID4gPiArICogRHJp dmVycyBuZWVkIHRvIG1ha2Ugc3VyZSB0byBwcm90ZWN0IHRoaXMgY2FzZSB3aXRoIGVpdGhlciBh bgo+ID4gPiBvdXRlciBWTSBsb2NrCj4gPiA+ICsgKiBvciBieSBjYWxsaW5nIGRybV9ncHV2bV9w cmVwYXJlX3ZtKCkgYmVmb3JlIHRoaXMgZnVuY3Rpb24KPiA+ID4gd2l0aGluCj4gPiA+IHRoZQo+ ID4gPiArICogZHJtX2V4ZWNfdW50aWxfYWxsX2xvY2tlZCgpIGxvb3AsIHN1Y2ggdGhhdCB0aGUg R1BVVk0ncyBkbWEtCj4gPiA+IHJlc3YKPiA+ID4gbG9jayBlbnN1cmVzCj4gPiA+ICsgKiBtdXR1 YWwgZXhjbHVzaW9uLgo+ID4gPiArICoKPiA+ID4gKyAqIFJldHVybnM6IDAgb24gc3VjY2Vzcywg bmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgo+ID4gCj4gPiBzL1JldHVybnM6L1JldHVy bjovZwo+ID4gCj4gPiBPdGhlcndpc2UgTEdUTS4KPiAKPiBTb3VuZHMgbGlrZSB5b3Ugd2FudCB0 byBvZmZlciB5b3VyIFJCPyA6KQoKWWVzLCB3aXRoIHRoZSBhYm92ZSByZXR1cm4gdmFsdWUgZml4 LAoKUmV2aWV3ZWQtYnk6IFRob21hcyBIZWxsc3Ryw7ZtIDx0aG9tYXMuaGVsbHN0cm9tQGxpbnV4 LmludGVsLmNvbT4KClRoYW5rcywKVGhvbWFzCgoKPiAKPiA+IAo+ID4gL1Rob21hcwo+ID4gCj4g PiAKPiAKCg==