From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E599BC4338F for ; Tue, 27 Jul 2021 20:19:42 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 8B82760F9B for ; Tue, 27 Jul 2021 20:19:42 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 8B82760F9B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 2E8206E171; Tue, 27 Jul 2021 20:19:42 +0000 (UTC) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id 050076E171; Tue, 27 Jul 2021 20:19:40 +0000 (UTC) X-IronPort-AV: E=McAfee;i="6200,9189,10058"; a="192801502" X-IronPort-AV: E=Sophos;i="5.84,274,1620716400"; d="scan'208";a="192801502" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Jul 2021 13:19:40 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.84,274,1620716400"; d="scan'208";a="417536581" Received: from irvmail001.ir.intel.com ([10.43.11.63]) by orsmga003.jf.intel.com with ESMTP; 27 Jul 2021 13:19:38 -0700 Received: from [10.249.141.251] (mwajdecz-MOBL.ger.corp.intel.com [10.249.141.251]) by irvmail001.ir.intel.com (8.14.3/8.13.6/MailSET/Hub) with ESMTP id 16RKJbRS029171; Tue, 27 Jul 2021 21:19:37 +0100 To: "Belgaumkar, Vinay" , intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org References: <20210726190800.26762-1-vinay.belgaumkar@intel.com> <20210726190800.26762-7-vinay.belgaumkar@intel.com> <1e49627f-80a5-5283-eb6d-f06b0f024911@intel.com> From: Michal Wajdeczko Message-ID: <3358d696-04c6-a22a-a956-bfd17f2f1bae@intel.com> Date: Tue, 27 Jul 2021 22:19:37 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0 Thunderbird/78.12.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US Subject: Re: [Intel-gfx] [PATCH 06/15] drm/i915/guc/slpc: Enable SLPC and add related H2G events X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" CgpPbiAyNy4wNy4yMDIxIDIyOjAwLCBCZWxnYXVta2FyLCBWaW5heSB3cm90ZToKPiAKPiAKPiBP biA3LzI3LzIwMjEgODoxMiBBTSwgTWljaGFsIFdhamRlY3prbyB3cm90ZToKPj4KPj4KPj4gT24g MjYuMDcuMjAyMSAyMTowNywgVmluYXkgQmVsZ2F1bWthciB3cm90ZToKPj4+IEFkZCBtZXRob2Rz IGZvciBpbnRlcmFjdGluZyB3aXRoIEd1QyBmb3IgZW5hYmxpbmcgU0xQQy4gRW5hYmxlCj4+PiBT TFBDIGFmdGVyIEd1QyBzdWJtaXNzaW9uIGhhcyBiZWVuIGVzdGFibGlzaGVkLiBHdUMgbG9hZCB3 aWxsCj4+PiBmYWlsIGlmIFNMUEMgY2Fubm90IGJlIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZC4g QWRkIHZhcmlvdXMKPj4+IGhlbHBlciBtZXRob2RzIHRvIHNldC91bnNldCB0aGUgcGFyYW1ldGVy cyBmb3IgU0xQQy4gVGhleSBjYW4KPj4+IGJlIHNldCB1c2luZyBIMkcgY2FsbHMgb3IgZGlyZWN0 bHkgc2V0dGluZyBiaXRzIGluIHRoZSBzaGFyZWQKPj4+IGRhdGEgc3RydWN0dXJlLgo+Pj4KPj4+ IHYyOiBBZGRyZXNzIHNldmVyYWwgcmV2aWV3IGNvbW1lbnRzLCBhZGQgbmV3IGhlbHBlcnMgZm9y Cj4+PiBkZWNvZGluZyB0aGUgU0xQQyBtaW4vbWF4IGZyZXF1ZW5jaWVzLiBVc2UgbWFza3MgaW5z dGVhZCBvZiBoYXJkY29kZWQKPj4+IGNvbnN0YW50cy4gKE1pY2hhbCBXKQo+Pj4KPj4+IHYzOiBT cGxpdCBnbG9iYWxfc3RhdGVfdG9fc3RyaW5nIGZ1bmN0aW9uLCBhbmQgY2hlY2sgZm9yIHBvc2l0 aXZlCj4+PiBub24temVybyByZXR1cm4gdmFsdWUgZnJvbSBpbnRlbF9ndWNfc2VuZCgpIChNaWNo YWwgVykKPj4+Cj4+PiBTaWduZWQtb2ZmLWJ5OiBWaW5heSBCZWxnYXVta2FyIDx2aW5heS5iZWxn YXVta2FyQGludGVsLmNvbT4KPj4+IFNpZ25lZC1vZmYtYnk6IFN1bmRhcmVzYW4gU3VqYXJpdGhh IDxzdWphcml0aGEuc3VuZGFyZXNhbkBpbnRlbC5jb20+Cj4+PiAtLS0KPj4+IMKgIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19zbHBjLmPCoMKgIHwgMjM3ICsrKysrKysrKysr KysrKysrKwo+Pj4gwqAgLi4uL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfc2xwY190eXBl cy5oIHzCoMKgIDIgKwo+Pj4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfdWMu Y8KgwqDCoMKgwqDCoMKgwqAgfMKgwqAgOCArCj4+PiDCoCAzIGZpbGVzIGNoYW5nZWQsIDI0NyBp bnNlcnRpb25zKCspCj4+Pgo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L3VjL2ludGVsX2d1Y19zbHBjLmMKPj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50 ZWxfZ3VjX3NscGMuYwo+Pj4gaW5kZXggYmFlNGUzM2RiMGY4Li5mNTgwOGQyYWNiY2EgMTAwNjQ0 Cj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfc2xwYy5jCj4+ PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfc2xwYy5jCj4+PiBA QCAtNDUsNiArNDUsNDAgQEAgdm9pZCBpbnRlbF9ndWNfc2xwY19pbml0X2Vhcmx5KHN0cnVjdAo+ Pj4gaW50ZWxfZ3VjX3NscGMgKnNscGMpCj4+PiDCoMKgwqDCoMKgIGd1Yy0+c2xwY19zZWxlY3Rl ZCA9IF9fZ3VjX3NscGNfc2VsZWN0ZWQoZ3VjKTsKPj4+IMKgIH0KPj4+IMKgICtzdGF0aWMgdm9p ZCBzbHBjX21lbV9zZXRfcGFyYW0oc3RydWN0IHNscGNfc2hhcmVkX2RhdGEgKmRhdGEsCj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUzMiBpZCwgdTMyIHZhbHVlKQo+Pj4gK3sK Pj4+ICvCoMKgwqAgR0VNX0JVR19PTihpZCA+PSBTTFBDX01BWF9PVkVSUklERV9QQVJBTUVURVJT KTsKPj4+ICvCoMKgwqAgLyoKPj4+ICvCoMKgwqDCoCAqIFdoZW4gdGhlIGZsYWcgYml0IGlzIHNl dCwgY29ycmVzcG9uZGluZyB2YWx1ZSB3aWxsIGJlIHJlYWQKPj4+ICvCoMKgwqDCoCAqIGFuZCBh cHBsaWVkIGJ5IHNscGMuCj4+Cj4+IHMvc2xwYy9TTFBDCj4gb2suCj4gCj4+Cj4+PiArwqDCoMKg wqAgKi8KPj4+ICvCoMKgwqAgZGF0YS0+b3ZlcnJpZGVfcGFyYW1zLmJpdHNbaWQgPj4gNV0gfD0g KDEgPDwgKGlkICUgMzIpKTsKPj4+ICvCoMKgwqAgZGF0YS0+b3ZlcnJpZGVfcGFyYW1zLnZhbHVl c1tpZF0gPSB2YWx1ZTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgc2xwY19tZW1fc2V0 X2VuYWJsZWQoc3RydWN0IHNscGNfc2hhcmVkX2RhdGEgKmRhdGEsCj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHU4IGVuYWJsZV9pZCwgdTggZGlzYWJsZV9pZCkKPj4+ICt7Cj4+ PiArwqDCoMKgIC8qCj4+PiArwqDCoMKgwqAgKiBFbmFibGluZyBhIHBhcmFtIGludm9sdmVzIHNl dHRpbmcgdGhlIGVuYWJsZV9pZAo+Pj4gK8KgwqDCoMKgICogdG8gMSBhbmQgZGlzYWJsZV9pZCB0 byAwLgo+Pj4gK8KgwqDCoMKgICovCj4+PiArwqDCoMKgIHNscGNfbWVtX3NldF9wYXJhbShkYXRh LCBlbmFibGVfaWQsIDEpOwo+Pj4gK8KgwqDCoCBzbHBjX21lbV9zZXRfcGFyYW0oZGF0YSwgZGlz YWJsZV9pZCwgMCk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIHNscGNfbWVtX3NldF9k aXNhYmxlZChzdHJ1Y3Qgc2xwY19zaGFyZWRfZGF0YSAqZGF0YSwKPj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgdTggZW5hYmxlX2lkLCB1OCBkaXNhYmxlX2lkKQo+Pj4gK3sKPj4+ ICvCoMKgwqAgLyoKPj4+ICvCoMKgwqDCoCAqIERpc2FibGluZyBhIHBhcmFtIGludm9sdmVzIHNl dHRpbmcgdGhlIGVuYWJsZV9pZAo+Pj4gK8KgwqDCoMKgICogdG8gMCBhbmQgZGlzYWJsZV9pZCB0 byAxLgo+Pj4gK8KgwqDCoMKgICovCj4+PiArwqDCoMKgIHNscGNfbWVtX3NldF9wYXJhbShkYXRh LCBkaXNhYmxlX2lkLCAxKTsKPj4+ICvCoMKgwqAgc2xwY19tZW1fc2V0X3BhcmFtKGRhdGEsIGVu YWJsZV9pZCwgMCk7Cj4+PiArfQo+Pj4gKwo+Pj4gwqAgc3RhdGljIGludCBzbHBjX3NoYXJlZF9k YXRhX2luaXQoc3RydWN0IGludGVsX2d1Y19zbHBjICpzbHBjKQo+Pj4gwqAgewo+Pj4gwqDCoMKg wqDCoCBzdHJ1Y3QgaW50ZWxfZ3VjICpndWMgPSBzbHBjX3RvX2d1YyhzbHBjKTsKPj4+IEBAIC02 Myw2ICs5NywxMjkgQEAgc3RhdGljIGludCBzbHBjX3NoYXJlZF9kYXRhX2luaXQoc3RydWN0Cj4+ PiBpbnRlbF9ndWNfc2xwYyAqc2xwYykKPj4+IMKgwqDCoMKgwqAgcmV0dXJuIGVycjsKPj4+IMKg IH0KPj4+IMKgICtzdGF0aWMgdTMyIHNscGNfZ2V0X3N0YXRlKHN0cnVjdCBpbnRlbF9ndWNfc2xw YyAqc2xwYykKPj4+ICt7Cj4+PiArwqDCoMKgIHN0cnVjdCBzbHBjX3NoYXJlZF9kYXRhICpkYXRh Owo+Pj4gKwo+Pj4gK8KgwqDCoCBHRU1fQlVHX09OKCFzbHBjLT52bWEpOwo+Pj4gKwo+Pj4gK8Kg wqDCoCBkcm1fY2xmbHVzaF92aXJ0X3JhbmdlKHNscGMtPnZhZGRyLCBzaXplb2YodTMyKSk7Cj4+ PiArwqDCoMKgIGRhdGEgPSBzbHBjLT52YWRkcjsKPj4+ICsKPj4+ICvCoMKgwqAgcmV0dXJuIGRh dGEtPmhlYWRlci5nbG9iYWxfc3RhdGU7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBib29sIHNs cGNfaXNfcnVubmluZyhzdHJ1Y3QgaW50ZWxfZ3VjX3NscGMgKnNscGMpCj4+PiArewo+Pj4gK8Kg wqDCoCByZXR1cm4gKHNscGNfZ2V0X3N0YXRlKHNscGMpID09IFNMUENfR0xPQkFMX1NUQVRFX1JV Tk5JTkcpOwo+Pgo+PiBleHRyYSAoICkgbm90IG5lZWRlZAo+IAo+IG9rLgo+IAo+Pgo+Pj4gK30K Pj4+ICsKPj4+ICtzdGF0aWMgaW50IGd1Y19hY3Rpb25fc2xwY19xdWVyeShzdHJ1Y3QgaW50ZWxf Z3VjICpndWMsIHUzMiBvZmZzZXQpCj4+PiArewo+Pj4gK8KgwqDCoCB1MzIgcmVxdWVzdFtdID0g ewo+Pj4gK8KgwqDCoMKgwqDCoMKgIElOVEVMX0dVQ19BQ1RJT05fU0xQQ19SRVFVRVNULAo+Pj4g K8KgwqDCoMKgwqDCoMKgwqAgU0xQQ19FVkVOVChTTFBDX0VWRU5UX1FVRVJZX1RBU0tfU1RBVEUs IDIpLAo+Pj4gK8KgwqDCoMKgwqDCoMKgIG9mZnNldCwKPj4+ICvCoMKgwqDCoMKgwqDCoCAwLAo+ Pj4gK8KgwqDCoCB9Owo+Pj4gK8KgwqDCoCBpbnQgcmV0Owo+Pj4gKwo+Pj4gK8KgwqDCoCByZXQg PSBpbnRlbF9ndWNfc2VuZChndWMsIHJlcXVlc3QsIEFSUkFZX1NJWkUocmVxdWVzdCkpOwo+Pj4g Kwo+Pj4gK8KgwqDCoCByZXR1cm4gcmV0ID4gMCA/IC1FUFJPVE8gOiByZXQ7Cj4+PiArfQo+Pj4g Kwo+Pj4gK3N0YXRpYyBpbnQgc2xwY19xdWVyeV90YXNrX3N0YXRlKHN0cnVjdCBpbnRlbF9ndWNf c2xwYyAqc2xwYykKPj4+ICt7Cj4+PiArwqDCoMKgIHN0cnVjdCBpbnRlbF9ndWMgKmd1YyA9IHNs cGNfdG9fZ3VjKHNscGMpOwo+Pj4gK8KgwqDCoCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSA9IHNscGNfdG9faTkxNShzbHBjKTsKPj4+ICvCoMKgwqAgdTMyIHNoYXJlZF9kYXRhX2d0dF9v ZmZzZXQgPSBpbnRlbF9ndWNfZ2d0dF9vZmZzZXQoZ3VjLCBzbHBjLT52bWEpOwo+Pgo+PiBqdXN0 ICJvZmZzZXQiID8gb3IgbWF5YmUgcGFzcyBkaXJlY3RseSBpbiBjYWxsIGJlbG93ID8KPiAKPiBv ay4KPiAKPj4KPj4+ICvCoMKgwqAgaW50IHJldDsKPj4+ICsKPj4+ICvCoMKgwqAgcmV0ID0gZ3Vj X2FjdGlvbl9zbHBjX3F1ZXJ5KGd1Yywgc2hhcmVkX2RhdGFfZ3R0X29mZnNldCk7Cj4+PiArwqDC oMKgIGlmIChyZXQpCj4+PiArwqDCoMKgwqDCoMKgwqAgZHJtX2VycigmaTkxNS0+ZHJtLCAiUXVl cnkgdGFzayBzdGF0ZSBkYXRhIHJldHVybmVkICglcGUpXG4iLAo+Pgo+PiAiRmFpbGVkIHRvIHF1 ZXJ5IHRhc2sgc3RhdGUgKCVwZSlcbiIgPwo+IAo+IG9rLgo+Pgo+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBFUlJfUFRSKHJldCkpOwo+Pj4gKwo+Pj4gK8KgwqDCoCBkcm1fY2xm bHVzaF92aXJ0X3JhbmdlKHNscGMtPnZhZGRyLCBTTFBDX1BBR0VfU0laRV9CWVRFUyk7Cj4+PiAr Cj4+PiArwqDCoMKgIHJldHVybiByZXQ7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBjb25zdCBj aGFyICpzbHBjX2dsb2JhbF9zdGF0ZV90b19zdHJpbmcoZW51bQo+Pj4gc2xwY19nbG9iYWxfc3Rh dGUgc3RhdGUpCj4+PiArewo+Pj4gK8KgwqDCoCBjb25zdCBjaGFyICpzdHIgPSBOVUxMOwo+Pj4g Kwo+Pj4gK8KgwqDCoCBzd2l0Y2ggKHN0YXRlKSB7Cj4+PiArwqDCoMKgIGNhc2UgU0xQQ19HTE9C QUxfU1RBVEVfTk9UX1JVTk5JTkc6Cj4+PiArwqDCoMKgwqDCoMKgwqAgc3RyID0gIm5vdCBydW5u aW5nIjsKPj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4+ICvCoMKgwqAgY2FzZSBTTFBDX0dM T0JBTF9TVEFURV9JTklUSUFMSVpJTkc6Cj4+PiArwqDCoMKgwqDCoMKgwqAgc3RyID0gImluaXRp YWxpemluZyI7Cj4+PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+PiArwqDCoMKgIGNhc2UgU0xQ Q19HTE9CQUxfU1RBVEVfUkVTRVRUSU5HOgo+Pj4gK8KgwqDCoMKgwqDCoMKgIHN0ciA9ICJyZXNl dHRpbmciOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+Pj4gK8KgwqDCoCBjYXNlIFNMUENf R0xPQkFMX1NUQVRFX1JVTk5JTkc6Cj4+PiArwqDCoMKgwqDCoMKgwqAgc3RyID0gInJ1bm5pbmci Owo+Pj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+Pj4gK8KgwqDCoCBjYXNlIFNMUENfR0xPQkFM X1NUQVRFX1NIVVRUSU5HX0RPV046Cj4+PiArwqDCoMKgwqDCoMKgwqAgc3RyID0gInNodXR0aW5n IGRvd24iOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+Pj4gK8KgwqDCoCBjYXNlIFNMUENf R0xPQkFMX1NUQVRFX0VSUk9SOgo+Pj4gK8KgwqDCoMKgwqDCoMKgIHN0ciA9ICJlcnJvciI7Cj4+ PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+PiArwqDCoMKgIGRlZmF1bHQ6Cj4+PiArwqDCoMKg wqDCoMKgwqAgc3RyID0gInVua25vd24iOwo+Pgo+PiBuaXQ6IHlvdSBjYW4gZG8gZWFybHkgcmV0 dXJucyB0byBzaW1wbGlmeSB0aGUgY29kZQo+IG9rLgo+IAo+Pgo+Pj4gK8KgwqDCoMKgwqDCoMKg IGJyZWFrOwo+Pj4gK8KgwqDCoCB9Cj4+PiArCj4+PiArwqDCoMKgIHJldHVybiBzdHI7Cj4+PiAr fQo+Pj4gKwo+Pj4gK3N0YXRpYyBjb25zdCBjaGFyICpzbHBjX2dldF9zdGF0ZV9zdHJpbmcoc3Ry dWN0IGludGVsX2d1Y19zbHBjICpzbHBjKQo+Pj4gK3sKPj4+ICvCoMKgwqAgcmV0dXJuIHNscGNf Z2xvYmFsX3N0YXRlX3RvX3N0cmluZyhzbHBjX2dldF9zdGF0ZShzbHBjKSk7Cj4+PiArfQo+Pj4g Kwo+Pj4gK3N0YXRpYyBpbnQgZ3VjX2FjdGlvbl9zbHBjX3Jlc2V0KHN0cnVjdCBpbnRlbF9ndWMg Kmd1YywgdTMyIG9mZnNldCkKPj4+ICt7Cj4+PiArwqDCoMKgIHUzMiByZXF1ZXN0W10gPSB7Cj4+ PiArwqDCoMKgwqDCoMKgwqAgSU5URUxfR1VDX0FDVElPTl9TTFBDX1JFUVVFU1QsCj4+PiArwqDC oMKgwqDCoMKgwqAgU0xQQ19FVkVOVChTTFBDX0VWRU5UX1JFU0VULCAyKSwKPj4+ICvCoMKgwqDC oMKgwqDCoCBvZmZzZXQsCj4+PiArwqDCoMKgwqDCoMKgwqAgMCwKPj4+ICvCoMKgwqAgfTsKPj4+ ICvCoMKgwqAgaW50IHJldDsKPj4+ICsKPj4+ICvCoMKgwqAgcmV0ID0gaW50ZWxfZ3VjX3NlbmQo Z3VjLCByZXF1ZXN0LCBBUlJBWV9TSVpFKHJlcXVlc3QpKTsKPj4+ICsKPj4+ICvCoMKgwqAgcmV0 dXJuIHJldCA+IDAgPyAtRVBST1RPIDogcmV0Owo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50 IHNscGNfcmVzZXQoc3RydWN0IGludGVsX2d1Y19zbHBjICpzbHBjKQo+Pj4gK3sKPj4+ICvCoMKg wqAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBzbHBjX3RvX2k5MTUoc2xwYyk7Cj4+ PiArwqDCoMKgIHN0cnVjdCBpbnRlbF9ndWMgKmd1YyA9IHNscGNfdG9fZ3VjKHNscGMpOwo+Pj4g K8KgwqDCoCB1MzIgb2Zmc2V0ID0gaW50ZWxfZ3VjX2dndHRfb2Zmc2V0KGd1Yywgc2xwYy0+dm1h KTsKPj4+ICvCoMKgwqAgaW50IHJldDsKPj4+ICsKPj4+ICvCoMKgwqAgcmV0ID0gZ3VjX2FjdGlv bl9zbHBjX3Jlc2V0KGd1Yywgb2Zmc2V0KTsKPj4+ICsKPj4+ICvCoMKgwqAgaWYgKHVubGlrZWx5 KHJldCA8IDApKQo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+Cj4+IG5vIFNMUEMg ZXJyb3IgaGVyZSA/Cj4gCj4gYWRkZWQuCj4gCj4+Cj4+PiArCj4+PiArwqDCoMKgIGlmICghcmV0 KSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHdhaXRfZm9yKHNscGNfaXNfcnVubmluZyhzbHBj KSwgU0xQQ19SRVNFVF9USU1FT1VUX01TKSkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg ZHJtX2VycigmaTkxNS0+ZHJtLCAiU0xQQyBub3QgZW5hYmxlZCEgU3RhdGUgPSAlc1xuIiwKPj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNscGNfZ2V0X3N0YXRlX3N0cmlu ZyhzbHBjKSk7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTzsKPj4+ICvC oMKgwqDCoMKgwqDCoCB9Cj4+PiArwqDCoMKgIH0KPj4+ICsKPj4+ICvCoMKgwqAgcmV0dXJuIDA7 Cj4+PiArfQo+Pj4gKwo+Pj4gwqAgaW50IGludGVsX2d1Y19zbHBjX2luaXQoc3RydWN0IGludGVs X2d1Y19zbHBjICpzbHBjKQo+Pj4gwqAgewo+Pj4gwqDCoMKgwqDCoCBHRU1fQlVHX09OKHNscGMt PnZtYSk7Cj4+PiBAQCAtNzAsNiArMjI3LDg2IEBAIGludCBpbnRlbF9ndWNfc2xwY19pbml0KHN0 cnVjdCBpbnRlbF9ndWNfc2xwYyAqc2xwYykKPj4+IMKgwqDCoMKgwqAgcmV0dXJuIHNscGNfc2hh cmVkX2RhdGFfaW5pdChzbHBjKTsKPj4+IMKgIH0KPj4+IMKgICtzdGF0aWMgdTMyIHNscGNfZGVj b2RlX21pbl9mcmVxKHN0cnVjdCBpbnRlbF9ndWNfc2xwYyAqc2xwYykKPj4+ICt7Cj4+PiArwqDC oMKgIHN0cnVjdCBzbHBjX3NoYXJlZF9kYXRhICpkYXRhID0gc2xwYy0+dmFkZHI7Cj4+PiArCj4+ PiArwqDCoMKgIEdFTV9CVUdfT04oIXNscGMtPnZtYSk7Cj4+PiArCj4+PiArwqDCoMKgIHJldHVy bsKgwqDCoCBESVZfUk9VTkRfQ0xPU0VTVCgKPj4+ICvCoMKgwqDCoMKgwqDCoCBSRUdfRklFTERf R0VUKFNMUENfTUlOX1VOU0xJQ0VfRlJFUV9NQVNLLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZGF0YS0+dGFza19zdGF0ZV9kYXRhLmZyZXEpICoKPj4+ICvCoMKgwqDCoMKgwqDCoCBHVF9G UkVRVUVOQ1lfTVVMVElQTElFUiwgR0VOOV9GUkVRX1NDQUxFUik7Cj4+PiArfQo+Pj4gKwo+Pj4g K3N0YXRpYyB1MzIgc2xwY19kZWNvZGVfbWF4X2ZyZXEoc3RydWN0IGludGVsX2d1Y19zbHBjICpz bHBjKQo+Pj4gK3sKPj4+ICvCoMKgwqAgc3RydWN0IHNscGNfc2hhcmVkX2RhdGEgKmRhdGEgPSBz bHBjLT52YWRkcjsKPj4+ICsKPj4+ICvCoMKgwqAgR0VNX0JVR19PTighc2xwYy0+dm1hKTsKPj4+ ICsKPj4+ICvCoMKgwqAgcmV0dXJuwqDCoMKgIERJVl9ST1VORF9DTE9TRVNUKAo+Pj4gK8KgwqDC oMKgwqDCoMKgIFJFR19GSUVMRF9HRVQoU0xQQ19NQVhfVU5TTElDRV9GUkVRX01BU0ssCj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkYXRhLT50YXNrX3N0YXRlX2RhdGEuZnJlcSkgKgo+Pj4g K8KgwqDCoMKgwqDCoMKgIEdUX0ZSRVFVRU5DWV9NVUxUSVBMSUVSLCBHRU45X0ZSRVFfU0NBTEVS KTsKPj4+ICt9Cj4+PiArCj4+PiArLyoKPj4+ICsgKiBpbnRlbF9ndWNfc2xwY19lbmFibGUoKSAt IFN0YXJ0IFNMUEMKPj4+ICsgKiBAc2xwYzogcG9pbnRlciB0byBpbnRlbF9ndWNfc2xwYy4KPj4+ ICsgKgo+Pj4gKyAqIFNMUEMgaXMgZW5hYmxlZCBieSBzZXR0aW5nIHVwIHRoZSBzaGFyZWQgZGF0 YSBzdHJ1Y3R1cmUgYW5kCj4+PiArICogc2VuZGluZyByZXNldCBldmVudCB0byBHdUMgU0xQQy4g SW5pdGlhbCBkYXRhIGlzIHNldHVwIGluCj4+PiArICogaW50ZWxfZ3VjX3NscGNfaW5pdC4gSGVy ZSB3ZSBzZW5kIHRoZSByZXNldCBldmVudC4gV2UgZG8KPj4+ICsgKiBub3QgY3VycmVudGx5IG5l ZWQgYSBzbHBjX2Rpc2FibGUgc2luY2UgdGhpcyBpcyB0YWtlbiBjYXJlCj4+PiArICogb2YgYXV0 b21hdGljYWxseSB3aGVuIGEgcmVzZXQvc3VzcGVuZCBvY2N1cnMgYW5kIHRoZSBHdUMKPj4+ICsg KiBDVEIgaXMgZGVzdHJveWVkLgo+Pj4gKyAqCj4+PiArICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Ms IG5vbi16ZXJvIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPj4+ICsgKi8KPj4+ICtpbnQgaW50ZWxf Z3VjX3NscGNfZW5hYmxlKHN0cnVjdCBpbnRlbF9ndWNfc2xwYyAqc2xwYykKPj4+ICt7Cj4+PiAr wqDCoMKgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gc2xwY190b19pOTE1KHNscGMp Owo+Pj4gK8KgwqDCoCBzdHJ1Y3Qgc2xwY19zaGFyZWRfZGF0YSAqZGF0YTsKPj4+ICvCoMKgwqAg aW50IHJldDsKPj4+ICsKPj4+ICvCoMKgwqAgR0VNX0JVR19PTighc2xwYy0+dm1hKTsKPj4+ICsK Pj4+ICvCoMKgwqAgbWVtc2V0KHNscGMtPnZhZGRyLCAwLCBzaXplb2Yoc3RydWN0IHNscGNfc2hh cmVkX2RhdGEpKTsKPj4+ICsKPj4+ICvCoMKgwqAgZGF0YSA9IHNscGMtPnZhZGRyOwo+Pgo+PiB2 YWRkciBpcyAic3RydWN0IHNscGNfc2hhcmVkX2RhdGEgKiIKPj4gZG8geW91IHJlYWxseSBuZWVk ICJkYXRhIiBsb2NhbCB2YXI/Cj4+Cj4+PiArwqDCoMKgIGRhdGEtPmhlYWRlci5zaXplID0gc2l6 ZW9mKHN0cnVjdCBzbHBjX3NoYXJlZF9kYXRhKTsKPj4+ICsKPj4+ICvCoMKgwqAgLyogRW5hYmxl IG9ubHkgR1RQRVJGIHRhc2ssIGRpc2FibGUgb3RoZXJzICovCj4+PiArwqDCoMKgIHNscGNfbWVt X3NldF9lbmFibGVkKGRhdGEsIFNMUENfUEFSQU1fVEFTS19FTkFCTEVfR1RQRVJGLAo+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBTTFBDX1BBUkFNX1RBU0tfRElTQUJMRV9HVFBF UkYpOwo+Pj4gKwo+Pj4gK8KgwqDCoCBzbHBjX21lbV9zZXRfZGlzYWJsZWQoZGF0YSwgU0xQQ19Q QVJBTV9UQVNLX0VOQUJMRV9CQUxBTkNFUiwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgU0xQQ19QQVJBTV9UQVNLX0RJU0FCTEVfQkFMQU5DRVIpOwo+Pj4gKwo+Pj4gK8KgwqDC oCBzbHBjX21lbV9zZXRfZGlzYWJsZWQoZGF0YSwgU0xQQ19QQVJBTV9UQVNLX0VOQUJMRV9EQ0Ms Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFNMUENfUEFSQU1fVEFTS19ESVNB QkxFX0RDQyk7Cj4+Cj4+IGJ0dywgYWxsIHRoaXMgImRhdGEiIHJlbGF0ZWQgY2FsbHMgYXJlIGdv b2QgY2FuZGlkYXRlIGZvciBoZWxwZXIgbGlrZQo+Pgo+PiBzdGF0aWMgdm9pZCBzbHBjX3NoYXJl ZF9kYXRhX3Jlc2V0KHN0cnVjdCBzbHBjX3NoYXJlZF9kYXRhICpkYXRhKQo+PiB7IC4uLiB9Cj4g Cj4gb2suCj4gCj4+Cj4+PiArCj4+PiArwqDCoMKgIHJldCA9IHNscGNfcmVzZXQoc2xwYyk7Cj4+ PiArwqDCoMKgIGlmICh1bmxpa2VseShyZXQgPCAwKSkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIGRy bV9lcnIoJmk5MTUtPmRybSwgIlNMUEMgUmVzZXQgZXZlbnQgcmV0dXJuZWQgKCVwZSlcbiIsCj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEVSUl9QVFIocmV0KSk7Cj4+PiArwqDC oMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4+ICvCoMKgwqAgfQo+Pj4gKwo+Pj4gK8KgwqDCoCBk cm1faW5mbygmaTkxNS0+ZHJtLCAiR3VDIFNMUEM6IGVuYWJsZWRcbiIpOwo+Pj4gKwo+Pj4gK8Kg wqDCoCBzbHBjX3F1ZXJ5X3Rhc2tfc3RhdGUoc2xwYyk7Cj4+Cj4+IGFzIHRoaXMgc3RpbGwgbWF5 IGZhaWwsIG1heWJlIGl0IHNob3VsZCBiZSBiZWZvcmUgd2UgY2xhaW0gc3VjY2VzcyBhbmQKPj4g IlNMUEM6IGVuYWJsZWQiID8KPiAKPiBvay4gQWRkZWQgZXJyb3IgY2hlY2sgZm9yIHRoaXMgYXMg d2VsbC4KPiAKPj4KPj4+ICsKPj4+ICvCoMKgwqAgLyogbWluIGFuZCBtYXggZnJlcXVlbmN5IGxp bWl0cyBiZWluZyB1c2VkIGJ5IFNMUEMgKi8KPj4+ICvCoMKgwqAgZHJtX2luZm8oJmk5MTUtPmRy bSwgIlNMUEMgbWluIGZyZXE6ICV1IE1oeiwgbWF4IGlzICV1IE1oelxuIiwKPj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHNscGNfZGVjb2RlX21pbl9mcmVxKHNscGMpLAo+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgc2xwY19kZWNvZGVfbWF4X2ZyZXEoc2xwYykpOwo+Pj4gKwo+Pj4gKwo+ Pj4gK8KgwqDCoCByZXR1cm4gMDsKPj4+ICt9Cj4+PiArCj4+PiDCoCB2b2lkIGludGVsX2d1Y19z bHBjX2Zpbmkoc3RydWN0IGludGVsX2d1Y19zbHBjICpzbHBjKQo+Pj4gwqAgewo+Pj4gwqDCoMKg wqDCoCBpZiAoIXNscGMtPnZtYSkKPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC91Yy9pbnRlbF9ndWNfc2xwY190eXBlcy5oCj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L3VjL2ludGVsX2d1Y19zbHBjX3R5cGVzLmgKPj4+IGluZGV4IGVkY2Y0YzA1YmQ5Zi4uZjE0 ZjgxODIxYTUxIDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50 ZWxfZ3VjX3NscGNfdHlwZXMuaAo+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMv aW50ZWxfZ3VjX3NscGNfdHlwZXMuaAo+Pj4gQEAgLTYsNiArNiw4IEBACj4+PiDCoCAjaWZuZGVm IF9JTlRFTF9HVUNfU0xQQ19UWVBFU19IXwo+Pj4gwqAgI2RlZmluZSBfSU5URUxfR1VDX1NMUENf VFlQRVNfSF8KPj4+IMKgICsjZGVmaW5lIFNMUENfUkVTRVRfVElNRU9VVF9NUyA1Cj4+PiArCj4+ PiDCoCBzdHJ1Y3QgaW50ZWxfZ3VjX3NscGMgewo+Pj4gwqDCoMKgwqDCoCBzdHJ1Y3QgaTkxNV92 bWEgKnZtYTsKPj4+IMKgwqDCoMKgwqAgc3RydWN0IHNscGNfc2hhcmVkX2RhdGEgKnZhZGRyOwo+ Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX3VjLmMKPj4+ IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfdWMuYwo+Pj4gaW5kZXggZTZiZDk0 MDZjN2IyLi5iOThjMTRmOGMyMjkgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC91Yy9pbnRlbF91Yy5jCj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9p bnRlbF91Yy5jCj4+PiBAQCAtNTA2LDYgKzUwNiwxMiBAQCBzdGF0aWMgaW50IF9fdWNfaW5pdF9o dyhzdHJ1Y3QgaW50ZWxfdWMgKnVjKQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgInN1Ym1pc3Np b24iLAo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW5hYmxlZGRpc2FibGVkKGludGVsX3VjX3Vz ZXNfZ3VjX3N1Ym1pc3Npb24odWMpKSk7Cj4+PiDCoCArwqDCoMKgIGlmIChpbnRlbF91Y191c2Vz X2d1Y19zbHBjKHVjKSkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IGludGVsX2d1Y19zbHBj X2VuYWJsZSgmZ3VjLT5zbHBjKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocmV0KQo+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBlcnJfc3VibWlzc2lvbjsKPj4KPj4gaG1tLCBhcyB0 aGlzIG1heSBmYWlsLCBhYm92ZSBzdWNjZXNzIG1lc3NhZ2UKPj4gwqDCoMKgwqAiR3VDIHN1Ym1p c3Npb24gZW5hYmxlZCIKPj4gd2lsbCBiZSB2b2lkCj4+Cj4+IHdoYXQgeW91IGxpa2VseSBuZWVk IGlzIHRvIHNwbGl0ICJzbHBjX2VuYWJsZSIgd2l0aCBlcnJvciBtZXNzYWdlcyBvbmx5Cj4+IHRo YXQgaXMgY2FsbGVkIGJlZm9yZSB3ZSBzdGFydCByZXBvcnRpbmcgc3VjY2Vzc2VzLCBhbmQgdGhl bgo+PiAic2xwY19zdGF0dXMiIHBhcnQgd2l0aCBhbGwgZHJtX2luZm8oKSB0aGF0IGNvdWxkIGJl IHBsYWNlZCBoZXJlLgo+IAo+IFdoeT8gSXQgaXMgdG90YWxseSBwb3NzaWJsZSB0aGF0IEd1QyBz dWJtaXNzaW9uIHdvcmtzIGp1c3QgZmluZSwgYnV0Cj4gU0xQQyBlbmFibGUgZmFpbHMuIEluIHRo aXMgY2FzZSwgZXZlbiB0aG91Z2ggd2UgcHJpbnRlZCAic3VibWlzc2lvbgo+IGVuYWJsZWQiLCB3 ZSBjYW4gc3RpbGwgZmFpbCBsYXRlciB3aXRoIHNscGMgZXJyb3JzLgoKaG1tLCBpbiB0aGUgY29k ZSBhYm92ZSB0aGVyZSBpcyAiZ290byBlcnJfc3VibWlzc2lvbiIgaWYgU0xQQyBlbmFibGluZwpm YWlscywgYW5kIHRoYXQgd2lsbCBnbyB0byB0aGUgIldlJ3ZlIGZhaWxlZCB0byBsb2FkIHRoZSBm aXJtd2FyZSIKc2VjdGlvbiBiZWxvdyB0aGF0IGRpc2FibGVzIEd1QyBzdWJtaXNzaW9uIC4uLiBu byA/CgpNaWNoYWwKCj4gCj4gVGhhbmtzLAo+IFZpbmF5Lgo+Pgo+PiBNaWNoYWwKPj4KPj4+ICvC oMKgwqAgfQo+Pj4gKwo+Pj4gwqDCoMKgwqDCoCBpZiAoaW50ZWxfdWNfdXNlc19odWModWMpKSB7 Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZHJtX2luZm8oJmk5MTUtPmRybSwgIiVzIGZpcm13YXJl ICVzIHZlcnNpb24gJXUuJXUgJXM6JXNcbiIsCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGludGVsX3VjX2Z3X3R5cGVfcmVwcihJTlRFTF9VQ19GV19UWVBFX0hVQyksCj4+PiBAQCAt NTIwLDYgKzUyNiw4IEBAIHN0YXRpYyBpbnQgX191Y19pbml0X2h3KHN0cnVjdCBpbnRlbF91YyAq dWMpCj4+PiDCoMKgwqDCoMKgIC8qCj4+PiDCoMKgwqDCoMKgwqAgKiBXZSd2ZSBmYWlsZWQgdG8g bG9hZCB0aGUgZmlybXdhcmUgOigKPj4+IMKgwqDCoMKgwqDCoCAqLwo+Pj4gK2Vycl9zdWJtaXNz aW9uOgo+Pj4gK8KgwqDCoCBpbnRlbF9ndWNfc3VibWlzc2lvbl9kaXNhYmxlKGd1Yyk7Cj4+PiDC oCBlcnJfbG9nX2NhcHR1cmU6Cj4+PiDCoMKgwqDCoMKgIF9fdWNfY2FwdHVyZV9sb2FkX2Vycl9s b2codWMpOwo+Pj4gwqAgZXJyX291dDoKPj4+Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2ludGVsLWdmeAo=