From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [RFC PATCH] drm/vc4: Add a load tracker to prevent HVS underflow errors Date: Mon, 29 Oct 2018 10:03:01 +0100 Message-ID: <20181029090301.GR21967@phenom.ffwll.local> References: <20181025100931.50fddf7e@bbrezillon> <20181025093314.GB21967@phenom.ffwll.local> <20181025114114.42caf97d@bbrezillon> <20181026133026.GM21967@phenom.ffwll.local> <20181026155748.70b9a6bd@bbrezillon> <20181026165233.7ebaf6c7@bbrezillon> <20181026151003.GY9144@intel.com> <20181029080640.GQ21967@phenom.ffwll.local> <20181029094136.1b11b427@bbrezillon> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x543.google.com (mail-ed1-x543.google.com [IPv6:2a00:1450:4864:20::543]) by gabe.freedesktop.org (Postfix) with ESMTPS id 52D1589C16 for ; Mon, 29 Oct 2018 09:03:05 +0000 (UTC) Received: by mail-ed1-x543.google.com with SMTP id z12-v6so789278edp.7 for ; Mon, 29 Oct 2018 02:03:05 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20181029094136.1b11b427@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: dri-devel , "Hollingworth, Gordon" , Eben Upton List-Id: dri-devel@lists.freedesktop.org T24gTW9uLCBPY3QgMjksIDIwMTggYXQgMDk6NDE6MzZBTSArMDEwMCwgQm9yaXMgQnJlemlsbG9u IHdyb3RlOgo+IE9uIE1vbiwgMjkgT2N0IDIwMTggMDk6MDY6NDAgKzAxMDAKPiBEYW5pZWwgVmV0 dGVyIDxkYW5pZWxAZmZ3bGwuY2g+IHdyb3RlOgo+IAo+ID4gT24gRnJpLCBPY3QgMjYsIDIwMTgg YXQgMDY6MTA6MDNQTSArMDMwMCwgVmlsbGUgU3lyasOkbMOkIHdyb3RlOgo+ID4gPiBPbiBGcmks IE9jdCAyNiwgMjAxOCBhdCAwNDo1MjozM1BNICswMjAwLCBCb3JpcyBCcmV6aWxsb24gd3JvdGU6 ICAKPiA+ID4gPiBPbiBGcmksIDI2IE9jdCAyMDE4IDE2OjI2OjAzICswMjAwCj4gPiA+ID4gRGFu aWVsIFZldHRlciA8ZGFuaWVsQGZmd2xsLmNoPiB3cm90ZToKPiA+ID4gPiAgIAo+ID4gPiA+ID4g T24gRnJpLCBPY3QgMjYsIDIwMTggYXQgMzo1NyBQTSBCb3JpcyBCcmV6aWxsb24KPiA+ID4gPiA+ IDxib3Jpcy5icmV6aWxsb25AYm9vdGxpbi5jb20+IHdyb3RlOiAgCj4gPiA+ID4gPiA+Cj4gPiA+ ID4gPiA+IE9uIEZyaSwgMjYgT2N0IDIwMTggMTU6MzA6MjYgKzAyMDAKPiA+ID4gPiA+ID4gRGFu aWVsIFZldHRlciA8ZGFuaWVsQGZmd2xsLmNoPiB3cm90ZToKPiA+ID4gPiA+ID4gICAgCj4gPiA+ ID4gPiA+ID4gT24gVGh1LCBPY3QgMjUsIDIwMTggYXQgMTE6NDE6MTRBTSArMDIwMCwgQm9yaXMg QnJlemlsbG9uIHdyb3RlOiAgICAKPiA+ID4gPiA+ID4gPiA+IE9uIFRodSwgMjUgT2N0IDIwMTgg MTE6MzM6MTQgKzAyMDAKPiA+ID4gPiA+ID4gPiA+IERhbmllbCBWZXR0ZXIgPGRhbmllbEBmZnds bC5jaD4gd3JvdGU6Cj4gPiA+ID4gPiA+ID4gPiAgICAKPiA+ID4gPiA+ID4gPiA+ID4gT24gVGh1 LCBPY3QgMjUsIDIwMTggYXQgMTA6MDk6MzFBTSArMDIwMCwgQm9yaXMgQnJlemlsbG9uIHdyb3Rl OiAgICAKPiA+ID4gPiA+ID4gPiA+ID4gPiBPbiBUdWUsIDIzIE9jdCAyMDE4IDE1OjQ0OjQzICsw MjAwCj4gPiA+ID4gPiA+ID4gPiA+ID4gRGFuaWVsIFZldHRlciA8ZGFuaWVsQGZmd2xsLmNoPiB3 cm90ZToKPiA+ID4gPiA+ID4gPiA+ID4gPiAgICAKPiA+ID4gPiA+ID4gPiA+ID4gPiA+IE9uIFR1 ZSwgT2N0IDIzLCAyMDE4IGF0IDA5OjU1OjA4QU0gKzAyMDAsIEJvcmlzIEJyZXppbGxvbiB3cm90 ZTogICAgCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IEhpIERhbmllbCwKPiA+ID4gPiA+ID4gPiA+ ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gT24gVHVlLCAxNiBPY3QgMjAxOCAxNDo1 Nzo0MyArMDIwMAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBEYW5pZWwgVmV0dGVyIDxkYW5pZWxA ZmZ3bGwuY2g+IHdyb3RlOgo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAgICAKPiA+ID4gPiA+ID4g PiA+ID4gPiA+ID4gPiBPbiBUdWUsIE9jdCAxNiwgMjAxOCBhdCAxMTo0MDo0NUFNICswMjAwLCBC b3JpcyBCcmV6aWxsb24gd3JvdGU6ICAgIAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gVGhl IEhWUyBibG9jayBpcyBzdXBwb3NlZCB0byBmaWxsIHRoZSBwaXhlbHZhbHZlIEZJRk9zIGZhc3Qg ZW5vdWdoIHRvCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBtZWV0IHRoZSByZXF1ZXN0ZWQg ZnJhbWVyYXRlLiBUaGUgcHJvYmxlbSBpcywgdGhlIEhWUyBhbmQgbWVtb3J5IGJ1cwo+ID4gPiA+ ID4gPiA+ID4gPiA+ID4gPiA+ID4gYmFuZHdpZHRocyBhcmUgbGltaXRlZCwgYW5kIGlmIHdlIGRv bid0IHRha2UgdGhlc2UgbGltaXRhdGlvbnMgaW50bwo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ ID4gYWNjb3VudCB3ZSBtaWdodCBlbmQgdXAgd2l0aCBIVlMgdW5kZXJmbG93IGVycm9ycy4KPiA+ ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBUaGlz IHBhdGNoIGlzIHRyeWluZyB0byBtb2RlbCB0aGUgcGVyLXBsYW5lIEhWUyBhbmQgbWVtb3J5IGJ1 cyBiYW5kd2lkdGgKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IGNvbnN1bXB0aW9uIGFuZCB0 YWtlIGEgZGVjaXNpb24gYXQgYXRvbWljX2NoZWNrKCkgdGltZSB3aGV0aGVyIHRoZQo+ID4gPiA+ ID4gPiA+ID4gPiA+ID4gPiA+ID4gZXN0aW1hdGVkIGxvYWQgd2lsbCBmaXQgaW4gdGhlIEhWUyBh bmQgbWVtYnVzIGJ1ZGdldC4KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ ID4gPiA+ID4gPiA+ID4gPiBOb3RlIHRoYXQgd2UgdGFrZSBhbiBleHRyYSBtYXJnaW4gb24gdGhl IG1lbW9yeSBidXMgY29uc3VtcHRpb24gdG8gbGV0Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g PiB0aGUgc3lzdGVtIHJ1biBzbW9vdGhseSB3aGVuIG90aGVyIGJsb2NrcyBhcmUgZG9pbmcgaGVh dnkgdXNlIG9mIHRoZQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gbWVtb3J5IGJ1cy4gU2Ft ZSBnb2VzIGZvciB0aGUgSFZTIGxpbWl0LCBleGNlcHQgdGhlIG1hcmdpbiBpcyBzbWFsbGVyIGlu Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiB0aGlzIGNhc2UsIHNpbmNlIHRoZSBIVlMgaXMg bm90IHVzZWQgYnkgZXh0ZXJuYWwgY29tcG9uZW50cy4KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g PiA+Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBCb3JpcyBCcmV6 aWxsb24gPGJvcmlzLmJyZXppbGxvbkBib290bGluLmNvbT4KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ ID4gPiA+IC0tLQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gVGhpcyBsb2dpYyBoYXMgYmVl biB2YWxpZGF0ZWQgdXNpbmcgYSBzaW1wbGUgc2hlbGwgc2NyaXB0IGFuZAo+ID4gPiA+ID4gPiA+ ID4gPiA+ID4gPiA+ID4gc29tZSBpbnN0cnVtZW50YXRpb24gaW4gdGhlIFZDNCBkcml2ZXI6Cj4g PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gLSBj YXB0dXJlIHVuZGVyZmxvdyBlcnJvcnMgYXQgdGhlIEhWUyBsZXZlbCBhbmQgZXhwb3NlIGEgZGVi dWdmcyBmaWxlCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAgIHJlcG9ydGluZyB0aG9zZSBl cnJvcnMKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IC0gYWRkIGRlYnVnZnMgZmlsZXMgdG8g ZXhwb3NlIHdoZW4gYXRvbWljX2NoZWNrIGZhaWxzIGJlY2F1c2Ugb2YgdGhlCj4gPiA+ID4gPiA+ ID4gPiA+ID4gPiA+ID4gPiAgIEhWUyBvciBtZW1idXMgbG9hZCBsaW1pdGF0aW9uIG9yIHdoZW4g aXQgZmFpbHMgZm9yIG90aGVyIHJlYXNvbnMKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+Cj4g PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBUaGUgYnJhbmNoIGNvbnRhaW5pbmcgdGhvc2UgbW9k aWZpY2F0aW9uIGlzIGF2YWlsYWJsZSBoZXJlIFsxXSwgYW5kIHRoZQo+ID4gPiA+ID4gPiA+ID4g PiA+ID4gPiA+ID4gc2NyaXB0ICh3aGljaCBpcyBpbnRlcm5hbGx5IHVzaW5nIG1vZGV0ZXN0KSBp cyBoZXJlIFsyXSAocGxlYXNlIG5vdGUKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IHRoYXQg SSdtIGJhZCBhdCB3cml0aW5nIHNoZWxsIHNjcmlwdHMgOi0pKS4KPiA+ID4gPiA+ID4gPiA+ID4g PiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBOb3RlIHRoYXQgdGhvc2UgbW9k aWZpY2F0aW9uIHRlbmQgdG8gb3Zlci1lc3RpbWF0ZSB0aGUgbG9hZCwgYW5kIHRodXMKPiA+ID4g PiA+ID4gPiA+ID4gPiA+ID4gPiA+IHJlamVjdCBzZXR1cHMgdGhhdCBtaWdodCBoYXZlIHByZXZp b3VzbHkgd29ya2VkLCBzbyB3ZSBtaWdodCB3YW50IHRvCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ ID4gPiBhZGp1c3QgdGhlIGxpbWl0cyB0byBhdm9pZCB0aGF0Lgo+ID4gPiA+ID4gPiA+ID4gPiA+ ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IFsxXWh0dHBzOi8vZ2l0aHViLmNv bS9iYnJlemlsbG9uL2xpbnV4L3RyZWUvdmM0L2h2cy1iYW5kd2lkdGgtZXZhbAo+ID4gPiA+ID4g PiA+ID4gPiA+ID4gPiA+ID4gWzJdaHR0cHM6Ly9naXRodWIuY29tL2JicmV6aWxsb24vdmM0LWh2 cy1iYW5kd2lkdGgtdGVzdCAgICAKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4g PiA+ID4gPiA+ID4gPiA+IEFueSBpbnRlcmVzdCBpbiB1c2luZyBpZ3QgdG8gdGVzdCB0aGlzIHN0 dWZmPyBXZSBoYXZlIGF0IGxlYXN0IGEgYnVuY2ggb2YKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g PiB0ZXN0cyBhbHJlYWR5IGluIHRoZXJlIHRoYXQgdHJ5IGFsbCBraW5kcyBvZiBwbGFuZSBzZXR1 cHMuIEFuZCB3ZSB1c2UKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiB0aG9zZSB0byBodW50IGZv ciB1bmRlcnJ1bnMgb24gaTkxNSBody4KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ ID4gPiA+ID4gPiA+ID4gPiA+IFdydCB1bmRlcnJ1biByZXBvcnRpbmc6IE9uIGk5MTUgd2UganVz dCBkdW1wIHRoZW0gaW50byBkbWVzZyBhdCB0aGUgZXJyb3IKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ ID4gPiBsZXZlbCwgdXNpbmcgRFJNX0VSUk9SLCAgICAKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4K PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gQXJlIHlvdSBtYXNraW5nIHRoZSB1bmRlcnJ1biBpbnRl cnJ1cHQgYWZ0ZXIgaXQncyBiZWVuIHJlcG9ydGVkPyBJZiB3ZQo+ID4gPiA+ID4gPiA+ID4gPiA+ ID4gPiBkb24ndCBkbyB0aGF0IG9uIFZDNCB3ZSBqdXN0IGVuZCB1cCBmbG9vZGluZyB0aGUga2Vy bmVsLWxvZyBidWZmZXIgdW50aWwKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gc29tZW9uZSBjb21l cyBhbmQgdXBkYXRlIHRoZSBjb25maWcuICAgIAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4g PiA+ID4gPiA+ID4gPiA+IFllYWggd2UgZG8gdGhhdCB0b28uIFJ1bGUgaXMgdGhhdCBhIGZ1bGwg bW9kZXNldCB3aWxsIGNsZWFyIGFueSB1bmRlcnJ1bgo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gbWFz a2luZyAoc28gdGVzdHMgbmVlZCB0byBtYWtlIHN1cmUgdGhleSBzdGFydCB3aXRoIGEgbW9kZXNl dCwgb3IgaXQnbGwgYmUKPiA+ID4gPiA+ID4gPiA+ID4gPiA+IGZvciBub3RoaW5nKS4KPiA+ID4g PiA+ID4gPiA+ID4gPiA+ICAgIAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAgICAKPiA+ID4gPiA+ ID4gPiA+ID4gPiA+ID4gPiBwbHVzIGEgdHJhY2Vwb2ludC4gU2VlIGUuZy4KPiA+ID4gPiA+ID4g PiA+ID4gPiA+ID4gPiBpbnRlbF9wY2hfZmlmb191bmRlcnJ1bl9pcnFfaGFuZGxlcigpLiBJZiB0 aGVyZSdzIGludGVyZXN0IHdlIGNvdWxkCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gcGVyaGFw cyBleHRyYWN0IHRoaXMgaW50byBzb21ldGhpbmcgY29tbW9uLCBzaW1pbGFyIHRvIHdoYXQgd2Fz IGRvbmUgd2l0aAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IGNyYyBzdXBwb3J0IGFscmVhZHku Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gICAgCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+Cj4g PiA+ID4gPiA+ID4gPiA+ID4gPiA+IEknbSBub3QgYSBiaWcgZmFuIG9mIGhhcmRjb2RlZCB0cmFj ZSBwb2ludHMgaW4gZ2VuZXJhbCAoYmVjYXVzZSBvZiB0aGUKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ ID4gd2hvbGUgIml0J3MgcGFydCBvZiB0aGUgc3RhYmxlIEFCSSIgdGhpbmcpLCBhbmQgaW4gdGhp cyBjYXNlLCBtYWtpbmcgdGhlCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IHRyYWNlcG9pbnQgZ2Vu ZXJpYyBzb3VuZHMgZXZlbiBtb3JlIHJpc2t5IHRvIG1lLiBJbmRlZWQsIGhvdyBjYW4gd2Uga25v dwo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBhYm91dCBhbGwgdGhlIEhXIHNwZWNpZmljIGJpdHMg b25lIG1pZ2h0IHdhbnQgdG8gZXhwb3NlLiBGb3IgaW5zdGFuY2UsCj4gPiA+ID4gPiA+ID4gPiA+ ID4gPiA+IEkgc2VlIHRoZSBpbnRlbCB1bmRlcnJ1biB0cmFjZXBvaW50IGV4cG9zZXMgYSBzdHJ1 Y3Qgd2l0aCBhIGZyYW1lIGFuZAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBzY2FubGluZSBmaWVs ZCwgYW5kIEFGQUlDVCwgd2UgZG9uJ3QgaGF2ZSBzdWNoIGluZm9ybWF0aW9uIGluIHRoZSBWQzQK PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gY2FzZS4KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4KPiA+ ID4gPiA+ID4gPiA+ID4gPiA+ID4gQW55IG9waW5pb24gb24gdGhhdD8gICAgCj4gPiA+ID4gPiA+ ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gSXQncyBvbmx5IGFiaSBpZiB5b3UncmUg dW5sdWNreS4gSWYgaXQncyBqdXN0IGZvciBkZWJ1Z2dpbmcgYW5kCj4gPiA+ID4gPiA+ID4gPiA+ ID4gPiB2YWxpZGF0aW9uLCB5b3UgY2FuIGNoYW5nZSBpdCBhZ2Fpbi4gVGJoLCBubyBpZGVhIHdo eSB3ZSBldmVuIGhhdmUgdGhlc2UKPiA+ID4gPiA+ID4gPiA+ID4gPiA+IHRyYWNlcG9pbnRzLCB0 aGV5J3JlIGZhaXJseSB1c2VsZXNzIGltby4gQ0kgb25seSByZWxpZXMgdXBvbiB0aGUgZG1lc2cK PiA+ID4gPiA+ID4gPiA+ID4gPiA+IG91dHB1dC4gTWF5YmUgcnVuIGdpdCBibGFtZSBhbmQgYXNr IHRoZSBvcmlnaW5hbCBhdXRob3IsIHdlIGNhbiBwcm9iYWJseQo+ID4gPiA+ID4gPiA+ID4gPiA+ ID4gdXBkYXRlIHRoZW0gdG8gc3VpdCBvdXIgbmVlZHMuICAgIAo+ID4gPiA+ID4gPiA+ID4gPiA+ Cj4gPiA+ID4gPiA+ID4gPiA+ID4gT2theSwgSSB0aGluayBJJ2xsIGdvIGZvciBhIGdlbmVyaWMg ZGVidWdmcyBlbnRyeSB0aGF0IHJldHVybnMgdHJ1ZQo+ID4gPiA+ID4gPiA+ID4gPiA+IHdoZW4g YW4gdW5kZXJydW4gZXJyb3IgaGFwcGVuZWQgc2luY2UgdGhlIGxhc3QgbW9kZXNldCwgZmFsc2Ug b3RoZXJ3aXNlLgo+ID4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiA+ID4gTmV4dCBx dWVzdGlvbiBpczogc2hvdWxkIEkgYXR0YWNoIHRoZSB1bmRlcnJ1biBzdGF0dXMgdG8gdGhlIGRy bV9kZXZpY2UKPiA+ID4gPiA+ID4gPiA+ID4gPiBvciBoYXZlIG9uZSBwZXIgQ1JUQz8gSW4gbXkg Y2FzZSwgSSBvbmx5IGNhcmUgYWJvdXQgdGhlICJoYXMgYW4KPiA+ID4gPiA+ID4gPiA+ID4gPiB1 bmRlcnJ1biBlcnJvciBvY2N1cnJlZCBvbiBhbnkgb2YgdGhlIGFjdGl2ZSBDUlRDIiBjYXNlLCBz byBJJ2Qgdm90ZSBmb3IKPiA+ID4gPiA+ID4gPiA+ID4gPiBhIHBlci1kZXZpY2UgdW5kZXJydW4g c3RhdHVzLiAgICAKPiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4gWWVhaCBwcm9i YWJseSBnb29kIGVub3VnaC4gRm9yIG91ciBDSSBhbGwgd2UgY2FyZSBhYm91dCBpcyB0aGUgd2Fy bi9lcnJvcgo+ID4gPiA+ID4gPiA+ID4gPiBsZXZlbCBkbWVzZyBvdXRwdXQuIEFueXRoaW5nIGF0 IHRoYXQgbGV2ZWwgaXMgY29uc2lkZXJlZCBhIENJIGZhaWx1cmUuICAgIAo+ID4gPiA+ID4gPiA+ ID4KPiA+ID4gPiA+ID4gPiA+IFNvIGlndCBpcyBncmVwcGluZyBkbWVzZyB0byBkZXRlY3Qgd2hl biBhbiB1bmRlcnJ1biBoYXBwZW5zPyAgICAKPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+IE5v LCBidXQgdGhlIENJIHJ1bm5lciBpcyBhbHNvIG9ic2VydmluZyBkbWVzZy4gQW55dGhpbmcgaW4g dGhlcmUgYXQKPiA+ID4gPiA+ID4gPiB3YXJuaW5nIG9yIGhpZ2hlciBsZXZlbCBpcyBjb25zaWRl cmVkIGEgZmFpbHVyZS4gICAgCj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IEVyaWMsIGRvIHlvdSBk byB0aGUgc2FtZSB3aGVuIHlvdSBsYXVuY2ggdGhlIElHVCB0ZXN0c3VpdGU/Cj4gPiA+ID4gPiA+ ICAgIAo+ID4gPiA+ID4gPiA+ICAgIAo+ID4gPiA+ID4gPiA+ID4gPiBXaGF0IGRvIHlvdSBuZWVk IHRoZSBkZWJ1Z2ZzIGZpbGUgZm9yPyAgICAKPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4g PiBJIGp1c3QgdGhvdWdodCBoYXZpbmcgYSBkZWJ1Z2ZzIGZpbGUgdG8gZXhwb3NlIHRoZSB1bmRl cnJ1biBpbmZvcm1hdGlvbgo+ID4gPiA+ID4gPiA+ID4gd291bGQgYmUgY2xlYW5lciB0aGFuIGhh dmluZyB0byBncmVwIGluIGRtZXNnIHRvIGRldGVjdCBzdWNoIGZhaWx1cmVzLiAgICAKPiA+ID4g PiA+ID4gPgo+ID4gPiA+ID4gPiA+IFRoZSBpc3N1ZSBpcyB0aGF0IHlvdSB3YW50IHRvIGRldGVj dCB1bmRlcnJ1bnMgZXZlcnl3aGVyZSwgbm90IGp1c3QgaW4gdGhlCj4gPiA+ID4gPiA+ID4gc3Bl Y2lmaWMgdGVzdHMgeW91J3JlIGNoZWNraW5nIGZvciBpdC4gQW55dGhpbmcgdGhhdCBkb2VzIGEg bW9kZXNldCBjb3VsZAo+ID4gPiA+ID4gPiA+IGNhdXNlIGFuIHVuZGVycnVuIChhdCBsZWFzdCB3 ZSd2ZSBtYW5hZ2VkIHRvIGRvIHNvIHByZXR0eSBtdWNoIGV2ZXJ5d2hlcmUKPiA+ID4gPiA+ID4g PiBvbiBpOTE1IGh3LCBpZiB5b3UgbWlzcHJvZ3JhbSBpcyBzdWZmaWNpZW50bHkpLiAgICAKPiA+ ID4gPiA+ID4KPiA+ID4gPiA+ID4gSW4gbXkgc3BlY2lmaWMgY2FzZSwgSSB3YW50IHRvIGhhdmUg dGhlIElHVCB0ZXN0IGNoZWNrIHRoZSB1bmRlcnJ1bgo+ID4gPiA+ID4gPiB2YWx1ZSB3aGlsZSB0 aGUgdGVzdCBpcyBiZWluZyBleGVjdXRlZCBzbyB0aGF0IEkga25vdyB3aGljaCBleGFjdAo+ID4g PiA+ID4gPiBjb25maWd1cmF0aW9uIHRyaWdnZXJzIHRoZSB1bmRlcnJ1biBzaXR1YXRpb24uIEF0 IGxlYXN0IHRoYXQncyBob3cgSQo+ID4gPiA+ID4gPiBkaWQgdG8gYWRqdXN0L2RlYnVnIHRoZSBI VlMgbG9hZCB0cmFja2luZyBjb2RlLiBNYXliZSBpdCdzIG5vdCByZWFsbHkgYQo+ID4gPiA+ID4g PiBwcm9ibGVtIHdoZW4gYWxsIHdlIGRvIGlzIHRyYWNraW5nIHJlZ3Jlc3Npb25zLiAgICAKPiA+ ID4gPiA+IAo+ID4gPiA+ID4gT2ssIHRoYXQgbWFrZXMgc2Vuc2UsIGFuZCBleHBsYWlucyB3aHkg eW91IHdhbnQgdGhlIG92ZXJhbGwgdW5kZXJydW4KPiA+ID4gPiA+IGNvdW50ZXIgZXhwb3NlZCBp biBkZWJ1Z2ZzLiAgCj4gPiA+ID4gCj4gPiA+ID4gSnVzdCBvbmUgdGlueSBkZXRhaWwgd2hpY2gg aXMgbm90IGV4YWN0bHkgcmVsYXRlZCB0byB0aGlzIGRpc2N1c3Npb24KPiA+ID4gPiBidXQgSSB0 aG91Z2h0IEknZCBtZW50aW9uIGl0IGhlcmU6IHVuZGVycnVuIGlzIGFjdHVhbGx5IG5vdCBhIGNv dW50ZXIsCj4gPiA+ID4gaXQncyBqdXN0IGEgYm9vbGVhbi4gSSB1c2VkIGFuIGF0b21pY190IHR5 cGUgdG8gYXZvaWQgaGF2aW5nIHRvIGFkZCBhCj4gPiA+ID4gc3BpbmxvY2sgdG8gcHJvdGVjdCB0 aGUgdmFyaWFibGUgKHRoZSB2YXJpYWJsZSBpcyBtb2RpZmllZCBmcm9tCj4gPiA+ID4gYW4gaW50 ZXJydXB0IGNvbnRleHQgYW5kIHJlYWQgZnJvbSBhIG5vbi1hdG9taWMgY29udGV4dCkuIFNvLCB0 aGUKPiA+ID4gPiBhY2NlcHRhYmxlIHZhbHVlcyBmb3IgdW5kZXJydW4gYXJlIGN1cnJlbnRseSAw IG9yIDEuIEkgY2FuIG1ha2UgaXQgYQo+ID4gPiA+IGNvdW50ZXIgaWYgcmVxdWlyZWQuICAKPiA+ ID4gCj4gPiA+IE9uZSBpZGVhIEkgaGFkIGEgd2hpbGUgYmFjayBmb3IgaTkxNSB3b3VsZCBiZSB0 byBjb3VudCB0aGUgbnVtYmVyIG9mCj4gPiA+IGZyYW1lcyB0aGF0IGhhZCBhbiB1bmRlcnJ1bi4g U28gYmFzaWNhbGx5IHNvbWV0aGluZyBsaWtlIHRoaXM6Cj4gPiA+IAo+ID4gPiB1bmRlcnJ1bl9p cnEoKSB7Cj4gPiA+IAl1bmRlcnJ1bl9mcmFtZXM9MQo+ID4gPiAJZGlzYWJsZV91bmRlcnJ1bl9p cnEoKTsKPiA+ID4gCXZibGFua19nZXQoKTsKPiA+ID4gfQo+ID4gPiB2YmxhbmtfaXJxKCkgewo+ ID4gPiAJaWYgKHVuZGVycnVuKSB7Cj4gPiA+IAkJdW5kZXJydW5fZnJhbWVzKys7Cj4gPiA+IAl9 IGVsc2UgaWYgKHVuZGVycnVuX2ZyYW1lcykgewo+ID4gPiAJCXZibGFua19wdXQoKTsKPiA+ID4g CQllbmFibGVfdW5kZXJydW5faXJxKCk7Cj4gPiA+IAkJREVCVUcoIiVkIGZyYW1lcyBoYWQgYW4g dW5kZXJydW5cbiIsIHVuZGVycnVuX2ZyYW1lcyk7Cj4gPiA+IAkJdW5kZXJydW5fZnJhbWVzPTA7 Cj4gPiA+IAl9Cj4gPiA+IH0KPiA+ID4gCj4gPiA+IFRoaXMgYXZvaWRzIGRyb3duaW5nIGluIHVu ZGVycnVuIGludGVycnVwdHMgd2hpbGUgc3RpbGwKPiA+ID4gcmVwb3J0aW5nIGF0IGxlYXN0IGhv dyBtYW55IGZyYW1lcyBoYWQgcHJvYmxlbXMuCj4gPiA+IAo+ID4gPiBCdXQgSSBoYXZlbid0IGhh ZCB0aW1lIHRvIGltcGxlbWVudCB0aGF0IHlldC4gIAo+IAo+IE1heSBJIGFzayB3aHkgeW91IG5l ZWQgdG8ga25vdyBob3cgbWFueSBmcmFtZXMgaGFkIHVuZGVycnVuIGlzc3Vlcz8KCk11Y2ggcXVp Y2tlciB0ZXN0aW5nIHdoZW4geW91J3JlIGV4cGVyaW1lbnRpbmcgYXJvdW5kIHdpdGggZS5nLiB3 YXRlcm1hcmsKc2V0dGluZ3MuIEZ1bGwgbW9kZXNldCBmb3IgcmVzZXR0aW5nIGNhbiBlYXNpbHkg dGFrZSBhIGZldyBzZWNvbmRzLiBJCnRoaW5rIHdlIGV2ZW4gaGFkIHBhdGNoZXMgdGhhdCByZXN0 b3JlZCB0aGUgaW50ZXJydXB0IGFmdGVyIDFtcyBhbHJlYWR5LAp0byBoYXZlIG1vcmUgYWNjdXJh dGUgc2FtcGxpbmcgdG8ganVkZ2Ugd2hldGhlciBhIGdpdmVuIGNoYW5nZSBtYWRlIHRoaW5ncwp3 b3JzZSBvciBiZXR0ZXIuIFdlIG1pZ2h0IGhhdmUgc29tZXdoYXQgc3RyYW5nZSBodyA6LSkKCj4g PiBUaGUgb3RoZXIgdXBzaG90IG9mIGEgY291bnRlciBpcyB0aGF0IHRoZXJlJ3Mgbm8gcHJvYmxl bSB3aXRoIHJlc2V0dGluZy4KPiA+IFVzZXJzcGFjZSBzaW1wbHkgZ3JhYnMgdGhlIGNvdW50ZXIg YmVmb3JlIGFuZCBhZnRlciB0aGUgdGVzdCBhbmQgY29tcGFyZXMuCj4gPiBJZiB5b3Ugb25seSBo YXZlIDAvMSB5b3UgbmVlZCBzb21lIHdheSB0byByZXNldCwgb3Igb3RoZXJ3aXNlIGF1dG9tYXRl ZAo+ID4gcnVubmluZyBpbiBhIENJIGZhcm0gaXNuJ3QgcG9zc2libGUuCj4gCj4gVGhlIHJlc2V0 IHdhcyBkb25lIGR1cmluZyBhdG9taWMgY29tbWl0IGluIG15IHByb3Bvc2FsLCBzbyBubyBhY3Rp b24KPiB3YXMgcmVxdWlyZWQgb24gdGhlIHVzZXIgc2lkZSBhcGFydCBmcm9tIGFwcGx5aW5nIGEg bmV3IGNvbmZpZy4KPiBBbnl3YXksIEknbGwgY2hhbmdlIHRoYXQgZm9yIGEgcmVhbCBjb3VudGVy LgoKV2Ugd2FudCB0byBtZWFzdXJlIHVuZGVycnVucyB3aGlsZSBkb2luZyBmdWxsIG1vZGVzZXRz IHRvbyAoc3BlY2lmaWNhbGx5LAp3aGVuIHNodXR0aW5nIGRvd24gdGhlIHBpcGVsaW5lKS4gQXQg bGVhc3QgZm9yIG91ciBodyB0aGlzIGhhcwpoaXN0b3JpY2FsbHkgaGVscGVkIGdyZWF0bHkgaW4g Y2F0Y2hpbmcgcHJvZ3JhbW1pbmcgc2VxdWVuY2UgaXNzdWVzLgotRGFuaWVsCi0tIApEYW5pZWwg VmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5m ZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpk cmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK