From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [RFC PATCH] drm/vc4: Add a load tracker to prevent HVS underflow errors Date: Fri, 26 Oct 2018 18:10:03 +0300 Message-ID: <20181026151003.GY9144@intel.com> References: <20181016125743.GZ31561@phenom.ffwll.local> <20181023095508.21a9cabd@bbrezillon> <20181023134443.GQ324@phenom.ffwll.local> <20181025100931.50fddf7e@bbrezillon> <20181025093314.GB21967@phenom.ffwll.local> <20181025114114.42caf97d@bbrezillon> <20181026133026.GM21967@phenom.ffwll.local> <20181026155748.70b9a6bd@bbrezillon> <20181026165233.7ebaf6c7@bbrezillon> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id B6B796E4AB for ; Fri, 26 Oct 2018 15:10:07 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20181026165233.7ebaf6c7@bbrezillon> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Boris Brezillon Cc: "Hollingworth, Gordon" , dri-devel , Eben Upton List-Id: dri-devel@lists.freedesktop.org T24gRnJpLCBPY3QgMjYsIDIwMTggYXQgMDQ6NTI6MzNQTSArMDIwMCwgQm9yaXMgQnJlemlsbG9u IHdyb3RlOgo+IE9uIEZyaSwgMjYgT2N0IDIwMTggMTY6MjY6MDMgKzAyMDAKPiBEYW5pZWwgVmV0 dGVyIDxkYW5pZWxAZmZ3bGwuY2g+IHdyb3RlOgo+IAo+ID4gT24gRnJpLCBPY3QgMjYsIDIwMTgg YXQgMzo1NyBQTSBCb3JpcyBCcmV6aWxsb24KPiA+IDxib3Jpcy5icmV6aWxsb25AYm9vdGxpbi5j b20+IHdyb3RlOgo+ID4gPgo+ID4gPiBPbiBGcmksIDI2IE9jdCAyMDE4IDE1OjMwOjI2ICswMjAw Cj4gPiA+IERhbmllbCBWZXR0ZXIgPGRhbmllbEBmZndsbC5jaD4gd3JvdGU6Cj4gPiA+ICAKPiA+ ID4gPiBPbiBUaHUsIE9jdCAyNSwgMjAxOCBhdCAxMTo0MToxNEFNICswMjAwLCBCb3JpcyBCcmV6 aWxsb24gd3JvdGU6ICAKPiA+ID4gPiA+IE9uIFRodSwgMjUgT2N0IDIwMTggMTE6MzM6MTQgKzAy MDAKPiA+ID4gPiA+IERhbmllbCBWZXR0ZXIgPGRhbmllbEBmZndsbC5jaD4gd3JvdGU6Cj4gPiA+ ID4gPiAgCj4gPiA+ID4gPiA+IE9uIFRodSwgT2N0IDI1LCAyMDE4IGF0IDEwOjA5OjMxQU0gKzAy MDAsIEJvcmlzIEJyZXppbGxvbiB3cm90ZTogIAo+ID4gPiA+ID4gPiA+IE9uIFR1ZSwgMjMgT2N0 IDIwMTggMTU6NDQ6NDMgKzAyMDAKPiA+ID4gPiA+ID4gPiBEYW5pZWwgVmV0dGVyIDxkYW5pZWxA ZmZ3bGwuY2g+IHdyb3RlOgo+ID4gPiA+ID4gPiA+ICAKPiA+ID4gPiA+ID4gPiA+IE9uIFR1ZSwg T2N0IDIzLCAyMDE4IGF0IDA5OjU1OjA4QU0gKzAyMDAsIEJvcmlzIEJyZXppbGxvbiB3cm90ZTog IAo+ID4gPiA+ID4gPiA+ID4gPiBIaSBEYW5pZWwsCj4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4g PiA+ID4gPiA+IE9uIFR1ZSwgMTYgT2N0IDIwMTggMTQ6NTc6NDMgKzAyMDAKPiA+ID4gPiA+ID4g PiA+ID4gRGFuaWVsIFZldHRlciA8ZGFuaWVsQGZmd2xsLmNoPiB3cm90ZToKPiA+ID4gPiA+ID4g PiA+ID4gIAo+ID4gPiA+ID4gPiA+ID4gPiA+IE9uIFR1ZSwgT2N0IDE2LCAyMDE4IGF0IDExOjQw OjQ1QU0gKzAyMDAsIEJvcmlzIEJyZXppbGxvbiB3cm90ZTogIAo+ID4gPiA+ID4gPiA+ID4gPiA+ ID4gVGhlIEhWUyBibG9jayBpcyBzdXBwb3NlZCB0byBmaWxsIHRoZSBwaXhlbHZhbHZlIEZJRk9z IGZhc3QgZW5vdWdoIHRvCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBtZWV0IHRoZSByZXF1ZXN0ZWQg ZnJhbWVyYXRlLiBUaGUgcHJvYmxlbSBpcywgdGhlIEhWUyBhbmQgbWVtb3J5IGJ1cwo+ID4gPiA+ ID4gPiA+ID4gPiA+ID4gYmFuZHdpZHRocyBhcmUgbGltaXRlZCwgYW5kIGlmIHdlIGRvbid0IHRh a2UgdGhlc2UgbGltaXRhdGlvbnMgaW50bwo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gYWNjb3VudCB3 ZSBtaWdodCBlbmQgdXAgd2l0aCBIVlMgdW5kZXJmbG93IGVycm9ycy4KPiA+ID4gPiA+ID4gPiA+ ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBUaGlzIHBhdGNoIGlzIHRyeWluZyB0byBtb2Rl bCB0aGUgcGVyLXBsYW5lIEhWUyBhbmQgbWVtb3J5IGJ1cyBiYW5kd2lkdGgKPiA+ID4gPiA+ID4g PiA+ID4gPiA+IGNvbnN1bXB0aW9uIGFuZCB0YWtlIGEgZGVjaXNpb24gYXQgYXRvbWljX2NoZWNr KCkgdGltZSB3aGV0aGVyIHRoZQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gZXN0aW1hdGVkIGxvYWQg d2lsbCBmaXQgaW4gdGhlIEhWUyBhbmQgbWVtYnVzIGJ1ZGdldC4KPiA+ID4gPiA+ID4gPiA+ID4g PiA+Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBOb3RlIHRoYXQgd2UgdGFrZSBhbiBleHRyYSBtYXJn aW4gb24gdGhlIG1lbW9yeSBidXMgY29uc3VtcHRpb24gdG8gbGV0Cj4gPiA+ID4gPiA+ID4gPiA+ ID4gPiB0aGUgc3lzdGVtIHJ1biBzbW9vdGhseSB3aGVuIG90aGVyIGJsb2NrcyBhcmUgZG9pbmcg aGVhdnkgdXNlIG9mIHRoZQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gbWVtb3J5IGJ1cy4gU2FtZSBn b2VzIGZvciB0aGUgSFZTIGxpbWl0LCBleGNlcHQgdGhlIG1hcmdpbiBpcyBzbWFsbGVyIGluCj4g PiA+ID4gPiA+ID4gPiA+ID4gPiB0aGlzIGNhc2UsIHNpbmNlIHRoZSBIVlMgaXMgbm90IHVzZWQg YnkgZXh0ZXJuYWwgY29tcG9uZW50cy4KPiA+ID4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ ID4gPiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBCb3JpcyBCcmV6aWxsb24gPGJvcmlzLmJyZXppbGxv bkBib290bGluLmNvbT4KPiA+ID4gPiA+ID4gPiA+ID4gPiA+IC0tLQo+ID4gPiA+ID4gPiA+ID4g PiA+ID4gVGhpcyBsb2dpYyBoYXMgYmVlbiB2YWxpZGF0ZWQgdXNpbmcgYSBzaW1wbGUgc2hlbGwg c2NyaXB0IGFuZAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gc29tZSBpbnN0cnVtZW50YXRpb24gaW4g dGhlIFZDNCBkcml2ZXI6Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4gPiA+ ID4gLSBjYXB0dXJlIHVuZGVyZmxvdyBlcnJvcnMgYXQgdGhlIEhWUyBsZXZlbCBhbmQgZXhwb3Nl IGEgZGVidWdmcyBmaWxlCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiAgIHJlcG9ydGluZyB0aG9zZSBl cnJvcnMKPiA+ID4gPiA+ID4gPiA+ID4gPiA+IC0gYWRkIGRlYnVnZnMgZmlsZXMgdG8gZXhwb3Nl IHdoZW4gYXRvbWljX2NoZWNrIGZhaWxzIGJlY2F1c2Ugb2YgdGhlCj4gPiA+ID4gPiA+ID4gPiA+ ID4gPiAgIEhWUyBvciBtZW1idXMgbG9hZCBsaW1pdGF0aW9uIG9yIHdoZW4gaXQgZmFpbHMgZm9y IG90aGVyIHJlYXNvbnMKPiA+ID4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiA+ID4g PiBUaGUgYnJhbmNoIGNvbnRhaW5pbmcgdGhvc2UgbW9kaWZpY2F0aW9uIGlzIGF2YWlsYWJsZSBo ZXJlIFsxXSwgYW5kIHRoZQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gc2NyaXB0ICh3aGljaCBpcyBp bnRlcm5hbGx5IHVzaW5nIG1vZGV0ZXN0KSBpcyBoZXJlIFsyXSAocGxlYXNlIG5vdGUKPiA+ID4g PiA+ID4gPiA+ID4gPiA+IHRoYXQgSSdtIGJhZCBhdCB3cml0aW5nIHNoZWxsIHNjcmlwdHMgOi0p KS4KPiA+ID4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBOb3RlIHRoYXQg dGhvc2UgbW9kaWZpY2F0aW9uIHRlbmQgdG8gb3Zlci1lc3RpbWF0ZSB0aGUgbG9hZCwgYW5kIHRo dXMKPiA+ID4gPiA+ID4gPiA+ID4gPiA+IHJlamVjdCBzZXR1cHMgdGhhdCBtaWdodCBoYXZlIHBy ZXZpb3VzbHkgd29ya2VkLCBzbyB3ZSBtaWdodCB3YW50IHRvCj4gPiA+ID4gPiA+ID4gPiA+ID4g PiBhZGp1c3QgdGhlIGxpbWl0cyB0byBhdm9pZCB0aGF0Lgo+ID4gPiA+ID4gPiA+ID4gPiA+ID4K PiA+ID4gPiA+ID4gPiA+ID4gPiA+IFsxXWh0dHBzOi8vZ2l0aHViLmNvbS9iYnJlemlsbG9uL2xp bnV4L3RyZWUvdmM0L2h2cy1iYW5kd2lkdGgtZXZhbAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gWzJd aHR0cHM6Ly9naXRodWIuY29tL2JicmV6aWxsb24vdmM0LWh2cy1iYW5kd2lkdGgtdGVzdCAgCj4g PiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4gPiBBbnkgaW50ZXJlc3QgaW4gdXNp bmcgaWd0IHRvIHRlc3QgdGhpcyBzdHVmZj8gV2UgaGF2ZSBhdCBsZWFzdCBhIGJ1bmNoIG9mCj4g PiA+ID4gPiA+ID4gPiA+ID4gdGVzdHMgYWxyZWFkeSBpbiB0aGVyZSB0aGF0IHRyeSBhbGwga2lu ZHMgb2YgcGxhbmUgc2V0dXBzLiBBbmQgd2UgdXNlCj4gPiA+ID4gPiA+ID4gPiA+ID4gdGhvc2Ug dG8gaHVudCBmb3IgdW5kZXJydW5zIG9uIGk5MTUgaHcuCj4gPiA+ID4gPiA+ID4gPiA+ID4KPiA+ ID4gPiA+ID4gPiA+ID4gPiBXcnQgdW5kZXJydW4gcmVwb3J0aW5nOiBPbiBpOTE1IHdlIGp1c3Qg ZHVtcCB0aGVtIGludG8gZG1lc2cgYXQgdGhlIGVycm9yCj4gPiA+ID4gPiA+ID4gPiA+ID4gbGV2 ZWwsIHVzaW5nIERSTV9FUlJPUiwgIAo+ID4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4g PiBBcmUgeW91IG1hc2tpbmcgdGhlIHVuZGVycnVuIGludGVycnVwdCBhZnRlciBpdCdzIGJlZW4g cmVwb3J0ZWQ/IElmIHdlCj4gPiA+ID4gPiA+ID4gPiA+IGRvbid0IGRvIHRoYXQgb24gVkM0IHdl IGp1c3QgZW5kIHVwIGZsb29kaW5nIHRoZSBrZXJuZWwtbG9nIGJ1ZmZlciB1bnRpbAo+ID4gPiA+ ID4gPiA+ID4gPiBzb21lb25lIGNvbWVzIGFuZCB1cGRhdGUgdGhlIGNvbmZpZy4gIAo+ID4gPiA+ ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+IFllYWggd2UgZG8gdGhhdCB0b28uIFJ1bGUgaXMgdGhh dCBhIGZ1bGwgbW9kZXNldCB3aWxsIGNsZWFyIGFueSB1bmRlcnJ1bgo+ID4gPiA+ID4gPiA+ID4g bWFza2luZyAoc28gdGVzdHMgbmVlZCB0byBtYWtlIHN1cmUgdGhleSBzdGFydCB3aXRoIGEgbW9k ZXNldCwgb3IgaXQnbGwgYmUKPiA+ID4gPiA+ID4gPiA+IGZvciBub3RoaW5nKS4KPiA+ID4gPiA+ ID4gPiA+ICAKPiA+ID4gPiA+ID4gPiA+ID4gIAo+ID4gPiA+ID4gPiA+ID4gPiA+IHBsdXMgYSB0 cmFjZXBvaW50LiBTZWUgZS5nLgo+ID4gPiA+ID4gPiA+ID4gPiA+IGludGVsX3BjaF9maWZvX3Vu ZGVycnVuX2lycV9oYW5kbGVyKCkuIElmIHRoZXJlJ3MgaW50ZXJlc3Qgd2UgY291bGQKPiA+ID4g PiA+ID4gPiA+ID4gPiBwZXJoYXBzIGV4dHJhY3QgdGhpcyBpbnRvIHNvbWV0aGluZyBjb21tb24s IHNpbWlsYXIgdG8gd2hhdCB3YXMgZG9uZSB3aXRoCj4gPiA+ID4gPiA+ID4gPiA+ID4gY3JjIHN1 cHBvcnQgYWxyZWFkeS4KPiA+ID4gPiA+ID4gPiA+ID4gPiAgCj4gPiA+ID4gPiA+ID4gPiA+Cj4g PiA+ID4gPiA+ID4gPiA+IEknbSBub3QgYSBiaWcgZmFuIG9mIGhhcmRjb2RlZCB0cmFjZSBwb2lu dHMgaW4gZ2VuZXJhbCAoYmVjYXVzZSBvZiB0aGUKPiA+ID4gPiA+ID4gPiA+ID4gd2hvbGUgIml0 J3MgcGFydCBvZiB0aGUgc3RhYmxlIEFCSSIgdGhpbmcpLCBhbmQgaW4gdGhpcyBjYXNlLCBtYWtp bmcgdGhlCj4gPiA+ID4gPiA+ID4gPiA+IHRyYWNlcG9pbnQgZ2VuZXJpYyBzb3VuZHMgZXZlbiBt b3JlIHJpc2t5IHRvIG1lLiBJbmRlZWQsIGhvdyBjYW4gd2Uga25vdwo+ID4gPiA+ID4gPiA+ID4g PiBhYm91dCBhbGwgdGhlIEhXIHNwZWNpZmljIGJpdHMgb25lIG1pZ2h0IHdhbnQgdG8gZXhwb3Nl LiBGb3IgaW5zdGFuY2UsCj4gPiA+ID4gPiA+ID4gPiA+IEkgc2VlIHRoZSBpbnRlbCB1bmRlcnJ1 biB0cmFjZXBvaW50IGV4cG9zZXMgYSBzdHJ1Y3Qgd2l0aCBhIGZyYW1lIGFuZAo+ID4gPiA+ID4g PiA+ID4gPiBzY2FubGluZSBmaWVsZCwgYW5kIEFGQUlDVCwgd2UgZG9uJ3QgaGF2ZSBzdWNoIGlu Zm9ybWF0aW9uIGluIHRoZSBWQzQKPiA+ID4gPiA+ID4gPiA+ID4gY2FzZS4KPiA+ID4gPiA+ID4g PiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4gQW55IG9waW5pb24gb24gdGhhdD8gIAo+ID4gPiA+ID4g PiA+ID4KPiA+ID4gPiA+ID4gPiA+IEl0J3Mgb25seSBhYmkgaWYgeW91J3JlIHVubHVja3kuIElm IGl0J3MganVzdCBmb3IgZGVidWdnaW5nIGFuZAo+ID4gPiA+ID4gPiA+ID4gdmFsaWRhdGlvbiwg eW91IGNhbiBjaGFuZ2UgaXQgYWdhaW4uIFRiaCwgbm8gaWRlYSB3aHkgd2UgZXZlbiBoYXZlIHRo ZXNlCj4gPiA+ID4gPiA+ID4gPiB0cmFjZXBvaW50cywgdGhleSdyZSBmYWlybHkgdXNlbGVzcyBp bW8uIENJIG9ubHkgcmVsaWVzIHVwb24gdGhlIGRtZXNnCj4gPiA+ID4gPiA+ID4gPiBvdXRwdXQu IE1heWJlIHJ1biBnaXQgYmxhbWUgYW5kIGFzayB0aGUgb3JpZ2luYWwgYXV0aG9yLCB3ZSBjYW4g cHJvYmFibHkKPiA+ID4gPiA+ID4gPiA+IHVwZGF0ZSB0aGVtIHRvIHN1aXQgb3VyIG5lZWRzLiAg Cj4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiBPa2F5LCBJIHRoaW5rIEknbGwgZ28gZm9yIGEg Z2VuZXJpYyBkZWJ1Z2ZzIGVudHJ5IHRoYXQgcmV0dXJucyB0cnVlCj4gPiA+ID4gPiA+ID4gd2hl biBhbiB1bmRlcnJ1biBlcnJvciBoYXBwZW5lZCBzaW5jZSB0aGUgbGFzdCBtb2Rlc2V0LCBmYWxz ZSBvdGhlcndpc2UuCj4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiBOZXh0IHF1ZXN0aW9uIGlz OiBzaG91bGQgSSBhdHRhY2ggdGhlIHVuZGVycnVuIHN0YXR1cyB0byB0aGUgZHJtX2RldmljZQo+ ID4gPiA+ID4gPiA+IG9yIGhhdmUgb25lIHBlciBDUlRDPyBJbiBteSBjYXNlLCBJIG9ubHkgY2Fy ZSBhYm91dCB0aGUgImhhcyBhbgo+ID4gPiA+ID4gPiA+IHVuZGVycnVuIGVycm9yIG9jY3VycmVk IG9uIGFueSBvZiB0aGUgYWN0aXZlIENSVEMiIGNhc2UsIHNvIEknZCB2b3RlIGZvcgo+ID4gPiA+ ID4gPiA+IGEgcGVyLWRldmljZSB1bmRlcnJ1biBzdGF0dXMuICAKPiA+ID4gPiA+ID4KPiA+ID4g PiA+ID4gWWVhaCBwcm9iYWJseSBnb29kIGVub3VnaC4gRm9yIG91ciBDSSBhbGwgd2UgY2FyZSBh Ym91dCBpcyB0aGUgd2Fybi9lcnJvcgo+ID4gPiA+ID4gPiBsZXZlbCBkbWVzZyBvdXRwdXQuIEFu eXRoaW5nIGF0IHRoYXQgbGV2ZWwgaXMgY29uc2lkZXJlZCBhIENJIGZhaWx1cmUuICAKPiA+ID4g PiA+Cj4gPiA+ID4gPiBTbyBpZ3QgaXMgZ3JlcHBpbmcgZG1lc2cgdG8gZGV0ZWN0IHdoZW4gYW4g dW5kZXJydW4gaGFwcGVucz8gIAo+ID4gPiA+Cj4gPiA+ID4gTm8sIGJ1dCB0aGUgQ0kgcnVubmVy IGlzIGFsc28gb2JzZXJ2aW5nIGRtZXNnLiBBbnl0aGluZyBpbiB0aGVyZSBhdAo+ID4gPiA+IHdh cm5pbmcgb3IgaGlnaGVyIGxldmVsIGlzIGNvbnNpZGVyZWQgYSBmYWlsdXJlLiAgCj4gPiA+Cj4g PiA+IEVyaWMsIGRvIHlvdSBkbyB0aGUgc2FtZSB3aGVuIHlvdSBsYXVuY2ggdGhlIElHVCB0ZXN0 c3VpdGU/Cj4gPiA+ICAKPiA+ID4gPiAgCj4gPiA+ID4gPiA+IFdoYXQgZG8geW91IG5lZWQgdGhl IGRlYnVnZnMgZmlsZSBmb3I/ICAKPiA+ID4gPiA+Cj4gPiA+ID4gPiBJIGp1c3QgdGhvdWdodCBo YXZpbmcgYSBkZWJ1Z2ZzIGZpbGUgdG8gZXhwb3NlIHRoZSB1bmRlcnJ1biBpbmZvcm1hdGlvbgo+ ID4gPiA+ID4gd291bGQgYmUgY2xlYW5lciB0aGFuIGhhdmluZyB0byBncmVwIGluIGRtZXNnIHRv IGRldGVjdCBzdWNoIGZhaWx1cmVzLiAgCj4gPiA+ID4KPiA+ID4gPiBUaGUgaXNzdWUgaXMgdGhh dCB5b3Ugd2FudCB0byBkZXRlY3QgdW5kZXJydW5zIGV2ZXJ5d2hlcmUsIG5vdCBqdXN0IGluIHRo ZQo+ID4gPiA+IHNwZWNpZmljIHRlc3RzIHlvdSdyZSBjaGVja2luZyBmb3IgaXQuIEFueXRoaW5n IHRoYXQgZG9lcyBhIG1vZGVzZXQgY291bGQKPiA+ID4gPiBjYXVzZSBhbiB1bmRlcnJ1biAoYXQg bGVhc3Qgd2UndmUgbWFuYWdlZCB0byBkbyBzbyBwcmV0dHkgbXVjaCBldmVyeXdoZXJlCj4gPiA+ ID4gb24gaTkxNSBodywgaWYgeW91IG1pc3Byb2dyYW0gaXMgc3VmZmljaWVudGx5KS4gIAo+ID4g Pgo+ID4gPiBJbiBteSBzcGVjaWZpYyBjYXNlLCBJIHdhbnQgdG8gaGF2ZSB0aGUgSUdUIHRlc3Qg Y2hlY2sgdGhlIHVuZGVycnVuCj4gPiA+IHZhbHVlIHdoaWxlIHRoZSB0ZXN0IGlzIGJlaW5nIGV4 ZWN1dGVkIHNvIHRoYXQgSSBrbm93IHdoaWNoIGV4YWN0Cj4gPiA+IGNvbmZpZ3VyYXRpb24gdHJp Z2dlcnMgdGhlIHVuZGVycnVuIHNpdHVhdGlvbi4gQXQgbGVhc3QgdGhhdCdzIGhvdyBJCj4gPiA+ IGRpZCB0byBhZGp1c3QvZGVidWcgdGhlIEhWUyBsb2FkIHRyYWNraW5nIGNvZGUuIE1heWJlIGl0 J3Mgbm90IHJlYWxseSBhCj4gPiA+IHByb2JsZW0gd2hlbiBhbGwgd2UgZG8gaXMgdHJhY2tpbmcg cmVncmVzc2lvbnMuICAKPiA+IAo+ID4gT2ssIHRoYXQgbWFrZXMgc2Vuc2UsIGFuZCBleHBsYWlu cyB3aHkgeW91IHdhbnQgdGhlIG92ZXJhbGwgdW5kZXJydW4KPiA+IGNvdW50ZXIgZXhwb3NlZCBp biBkZWJ1Z2ZzLgo+IAo+IEp1c3Qgb25lIHRpbnkgZGV0YWlsIHdoaWNoIGlzIG5vdCBleGFjdGx5 IHJlbGF0ZWQgdG8gdGhpcyBkaXNjdXNzaW9uCj4gYnV0IEkgdGhvdWdodCBJJ2QgbWVudGlvbiBp dCBoZXJlOiB1bmRlcnJ1biBpcyBhY3R1YWxseSBub3QgYSBjb3VudGVyLAo+IGl0J3MganVzdCBh IGJvb2xlYW4uIEkgdXNlZCBhbiBhdG9taWNfdCB0eXBlIHRvIGF2b2lkIGhhdmluZyB0byBhZGQg YQo+IHNwaW5sb2NrIHRvIHByb3RlY3QgdGhlIHZhcmlhYmxlICh0aGUgdmFyaWFibGUgaXMgbW9k aWZpZWQgZnJvbQo+IGFuIGludGVycnVwdCBjb250ZXh0IGFuZCByZWFkIGZyb20gYSBub24tYXRv bWljIGNvbnRleHQpLiBTbywgdGhlCj4gYWNjZXB0YWJsZSB2YWx1ZXMgZm9yIHVuZGVycnVuIGFy ZSBjdXJyZW50bHkgMCBvciAxLiBJIGNhbiBtYWtlIGl0IGEKPiBjb3VudGVyIGlmIHJlcXVpcmVk LgoKT25lIGlkZWEgSSBoYWQgYSB3aGlsZSBiYWNrIGZvciBpOTE1IHdvdWxkIGJlIHRvIGNvdW50 IHRoZSBudW1iZXIgb2YKZnJhbWVzIHRoYXQgaGFkIGFuIHVuZGVycnVuLiBTbyBiYXNpY2FsbHkg c29tZXRoaW5nIGxpa2UgdGhpczoKCnVuZGVycnVuX2lycSgpIHsKCXVuZGVycnVuX2ZyYW1lcz0x CglkaXNhYmxlX3VuZGVycnVuX2lycSgpOwoJdmJsYW5rX2dldCgpOwp9CnZibGFua19pcnEoKSB7 CglpZiAodW5kZXJydW4pIHsKCQl1bmRlcnJ1bl9mcmFtZXMrKzsKCX0gZWxzZSBpZiAodW5kZXJy dW5fZnJhbWVzKSB7CgkJdmJsYW5rX3B1dCgpOwoJCWVuYWJsZV91bmRlcnJ1bl9pcnEoKTsKCQlE RUJVRygiJWQgZnJhbWVzIGhhZCBhbiB1bmRlcnJ1blxuIiwgdW5kZXJydW5fZnJhbWVzKTsKCQl1 bmRlcnJ1bl9mcmFtZXM9MDsKCX0KfQoKVGhpcyBhdm9pZHMgZHJvd25pbmcgaW4gdW5kZXJydW4g aW50ZXJydXB0cyB3aGlsZSBzdGlsbApyZXBvcnRpbmcgYXQgbGVhc3QgaG93IG1hbnkgZnJhbWVz IGhhZCBwcm9ibGVtcy4KCkJ1dCBJIGhhdmVuJ3QgaGFkIHRpbWUgdG8gaW1wbGVtZW50IHRoYXQg eWV0LgoKLS0gClZpbGxlIFN5cmrDpGzDpApJbnRlbApfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9kcmktZGV2ZWwK