From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 5/9] drm/i915: Enable i915 perf stream for Haswell OA unit Date: Wed, 4 May 2016 15:51:48 +0200 Message-ID: <20160504135148.GZ14148@phenom.ffwll.local> References: <1461162194-1424-1-git-send-email-robert@sixbynine.org> <1461162194-1424-6-git-send-email-robert@sixbynine.org> <571B4FD1.60702@free.fr> <03bed47b-28aa-e65e-3658-df0e9046eeee@linux.intel.com> <20160504122431.GX14148@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x241.google.com (mail-wm0-x241.google.com [IPv6:2a00:1450:400c:c09::241]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4659D89AB7 for ; Wed, 4 May 2016 13:51:51 +0000 (UTC) Received: by mail-wm0-x241.google.com with SMTP id w143so10373104wmw.3 for ; Wed, 04 May 2016 06:51:51 -0700 (PDT) Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Robert Bragg Cc: intel-gfx@lists.freedesktop.org, ML dri-devel , Sourab Gupta , Deepak S , Daniel Vetter List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBNYXkgMDQsIDIwMTYgYXQgMDI6MjQ6MTRQTSArMDEwMCwgUm9iZXJ0IEJyYWdnIHdy b3RlOgo+IE9uIFdlZCwgTWF5IDQsIDIwMTYgYXQgMToyNCBQTSwgRGFuaWVsIFZldHRlciA8ZGFu aWVsQGZmd2xsLmNoPiB3cm90ZToKPiAKPiA+IE9uIFdlZCwgTWF5IDA0LCAyMDE2IGF0IDEwOjQ5 OjUzQU0gKzAxMDAsIFJvYmVydCBCcmFnZyB3cm90ZToKPiA+ID4gT24gV2VkLCBNYXkgNCwgMjAx NiBhdCAxMDowOSBBTSwgTWFydGluIFBlcmVzIDwKPiA+IG1hcnRpbi5wZXJlc0BsaW51eC5pbnRl bC5jb20+Cj4gPiA+IHdyb3RlOgo+ID4gPgo+ID4gPiA+IE9uIDAzLzA1LzE2IDIzOjAzLCBSb2Jl cnQgQnJhZ2cgd3JvdGU6Cj4gPiA+ID4KPiA+ID4gPj4KPiA+ID4gPj4KPiA+ID4gPj4gT24gVHVl LCBNYXkgMywgMjAxNiBhdCA4OjM0IFBNLCBSb2JlcnQgQnJhZ2cgPHJvYmVydEBzaXhieW5pbmUu b3JnCj4gPiA+ID4+IDxtYWlsdG86cm9iZXJ0QHNpeGJ5bmluZS5vcmc+PiB3cm90ZToKPiA+ID4g Pj4KPiA+ID4gPj4gICAgIFNvcnJ5IGZvciB0aGUgZGVsYXkgcmVwbHlpbmcgdG8gdGhpcywgSSBt aXNzZWQgaXQuCj4gPiA+ID4+Cj4gPiA+ID4+ICAgICBPbiBTYXQsIEFwciAyMywgMjAxNiBhdCAx MTozNCBBTSwgTWFydGluIFBlcmVzIDwKPiA+IG1hcnRpbi5wZXJlc0BmcmVlLmZyCj4gPiA+ID4+ ICAgICA8bWFpbHRvOm1hcnRpbi5wZXJlc0BmcmVlLmZyPj4gd3JvdGU6Cj4gPiA+ID4+Cj4gPiA+ ID4+ICAgICAgICAgT24gMjAvMDQvMTYgMTc6MjMsIFJvYmVydCBCcmFnZyB3cm90ZToKPiA+ID4g Pj4KPiA+ID4gPj4gICAgICAgICAgICAgR2VuIGdyYXBoaWNzIGhhcmR3YXJlIGNhbiBiZSBzZXQg dXAgdG8gcGVyaW9kaWNhbGx5IHdyaXRlCj4gPiA+ID4+ICAgICAgICAgICAgIHNuYXBzaG90cyBv Zgo+ID4gPiA+PiAgICAgICAgICAgICBwZXJmb3JtYW5jZSBjb3VudGVycyBpbnRvIGEgY2lyY3Vs YXIgYnVmZmVyIHZpYSBpdHMKPiA+ID4gPj4gT2JzZXJ2YXRpb24KPiA+ID4gPj4gICAgICAgICAg ICAgQXJjaGl0ZWN0dXJlIGFuZCB0aGlzIHBhdGNoIGV4cG9zZXMgdGhhdCBjYXBhYmlsaXR5IHRv Cj4gPiA+ID4+ICAgICAgICAgICAgIHVzZXJzcGFjZSB2aWEgdGhlCj4gPiA+ID4+ICAgICAgICAg ICAgIGk5MTUgcGVyZiBpbnRlcmZhY2UuCj4gPiA+ID4+Cj4gPiA+ID4+ICAgICAgICAgICAgIENj OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51awo+ID4gPiA+PiAgICAgICAg ICAgICA8bWFpbHRvOmNocmlzQGNocmlzLXdpbHNvbi5jby51az4+Cj4gPiA+ID4+ICAgICAgICAg ICAgIFNpZ25lZC1vZmYtYnk6IFJvYmVydCBCcmFnZyA8cm9iZXJ0QHNpeGJ5bmluZS5vcmcKPiA+ ID4gPj4gICAgICAgICAgICAgPG1haWx0bzpyb2JlcnRAc2l4YnluaW5lLm9yZz4+Cj4gPiA+ID4+ ICAgICAgICAgICAgIFNpZ25lZC1vZmYtYnk6IFpoZW55dSBXYW5nIDx6aGVueXV3QGxpbnV4Lmlu dGVsLmNvbQo+ID4gPiA+PiAgICAgICAgICAgICA8bWFpbHRvOnpoZW55dXdAbGludXguaW50ZWwu Y29tPj4KPiA+ID4gPj4KPiA+ID4gPj4gICAgICAgICAgICAgLS0tCj4gPiA+ID4+ICAgICAgICAg ICAgICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgICAgIHwgIDU2ICstCj4g PiA+ID4+ICAgICAgICAgICAgICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4 dC5jIHwgIDI0ICstCj4gPiA+ID4+ICAgICAgICAgICAgICAgZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9wZXJmLmMgICAgICAgIHwgOTQwCj4gPiA+ID4+ICAgICAgICAgICAgICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKystCj4gPiA+ID4+ICAgICAgICAgICAgICAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9yZWcuaCAgICAgICAgIHwgMzM4Cj4gPiArKysrKysrKysrKysKPiA+ID4g Pj4gICAgICAgICAgICAgICBpbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmggICAgICAgICAgICAg fCAgNzAgKystCj4gPiA+ID4+ICAgICAgICAgICAgICAgNSBmaWxlcyBjaGFuZ2VkLCAxNDA4IGlu c2VydGlvbnMoKyksIDIwIGRlbGV0aW9ucygtKQo+ID4gPiA+Pgo+ID4gPiA+PiAgICAgICAgICAg ICArCj4gPiA+ID4+ICAgICAgICAgICAgICsKPiA+ID4gPj4gICAgICAgICAgICAgKyAgICAgICAv KiBJdCB0YWtlcyBhIGZhaXJseSBsb25nIHRpbWUgZm9yIGEgbmV3IE1VWAo+ID4gPiA+PiAgICAg ICAgICAgICBjb25maWd1cmF0aW9uIHRvCj4gPiA+ID4+ICAgICAgICAgICAgICsgICAgICAgICog YmUgYmUgYXBwbGllZCBhZnRlciB0aGVzZSByZWdpc3RlciB3cml0ZXMuIFRoaXMKPiA+ID4gPj4g ZGVsYXkKPiA+ID4gPj4gICAgICAgICAgICAgKyAgICAgICAgKiBkdXJhdGlvbiB3YXMgZGVyaXZl ZCBlbXBpcmljYWxseSBiYXNlZCBvbiB0aGUKPiA+ID4gPj4gICAgICAgICAgICAgcmVuZGVyX2Jh c2ljCj4gPiA+ID4+ICAgICAgICAgICAgICsgICAgICAgICogY29uZmlnIGJ1dCBob3BlZnVsbHkg aXQgY292ZXJzIHRoZSBtYXhpbXVtCj4gPiA+ID4+ICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24K PiA+ID4gPj4gICAgICAgICAgICAgKyAgICAgICAgKiBsYXRlbmN5Li4uCj4gPiA+ID4+ICAgICAg ICAgICAgICsgICAgICAgICovCj4gPiA+ID4+ICAgICAgICAgICAgICsgICAgICAgbWRlbGF5KDEw MCk7Cj4gPiA+ID4+Cj4gPiA+ID4+Cj4gPiA+ID4+ICAgICAgICAgV2l0aCBzdWNoIGEgSFcgYW5k IFNXIGRlc2lnbiwgaG93IGNhbiB3ZSBldmVyIGV4cG9zZSBob3BlIHRvCj4gPiBnZXQKPiA+ID4g Pj4gYW55Cj4gPiA+ID4+ICAgICAgICAga2luZCBvZiBwZXJmb3JtYW5jZSB3aGVuIHdlIGFyZSB0 cnlpbmcgdG8gbW9uaXRvciBkaWZmZXJlbnQKPiA+ID4gPj4gICAgICAgICBtZXRyaWNzIG9uIGVh Y2gKPiA+ID4gPj4gICAgICAgICBkcmF3IGNhbGw/IFRoaXMgbWF5IGJlIGFjY2VwdGFibGUgZm9y IHN5c3RlbSBtb25pdG9yaW5nLCBidXQKPiA+IGl0Cj4gPiA+ID4+ICAgICAgICAgaXMgcHJvYmxl bWF0aWMKPiA+ID4gPj4gICAgICAgICBmb3IgdGhlIEdMIGV4dGVuc2lvbnMgOnMKPiA+ID4gPj4K PiA+ID4gPj4KPiA+ID4gPj4gICAgICAgICBTaW5jZSBpdCBzZWVtcyBsaWtlIHdlIGFyZSBnb2lu ZyBmb3IgYSBwZXJmIEFQSSwgaXQgbWVhbnMgdGhhdAo+ID4gPiA+PiAgICAgICAgIGZvciBldmVy eSBjaGFuZ2UKPiA+ID4gPj4gICAgICAgICBvZiBtZXRyaWNzLCB3ZSBuZWVkIHRvIGZsdXNoIHRo ZSBjb21tYW5kcywgd2FpdCBmb3IgdGhlIEdQVSB0bwo+ID4gPiA+PiAgICAgICAgIGJlIGRvbmUs IHRoZW4KPiA+ID4gPj4gICAgICAgICBwcm9ncmFtIHRoZSBuZXcgc2V0IG9mIG1ldHJpY3Mgdmlh IGFuIElPQ1RMLCB3YWl0IDEwMCBtcywgYW5kCj4gPiA+ID4+ICAgICAgICAgdGhlbiB3ZSBtYXkK PiA+ID4gPj4gICAgICAgICByZXN1bWUgcmVuZGVyaW5nIC4uLiB1bnRpbCB0aGUgbmV4dCBjaGFu Z2UuIFdlIGFyZSB0YWxraW5nCj4gPiBhYm91dAo+ID4gPiA+PiAgICAgICAgIGEgbGF0ZW5jeSBv Zgo+ID4gPiA+PiAgICAgICAgIDYtNyBmcmFtZXMgYXQgNjAgSHogaGVyZS4uLiB0aGlzIGlzIG5v bi1uZWdsaWdlYWJsZS4uLgo+ID4gPiA+Pgo+ID4gPiA+Pgo+ID4gPiA+PiAgICAgICAgIEkgdW5k ZXJzdGFuZCB0aGF0IHdlIGhhdmUgYSB0b24gb2YgY291bnRlcnMgYW5kIHdlIG1heSBoaWRlCj4g PiA+ID4+ICAgICAgICAgbGF0ZW5jeSBieSBub3QKPiA+ID4gPj4gICAgICAgICBhbGxvd2luZyB1 c2luZyBtb3JlIHRoYW4gaGFsZiBvZiB0aGUgY291bnRlcnMgZm9yIGV2ZXJ5IGRyYXcKPiA+ID4g Pj4gICAgICAgICBjYWxsIG9yIGZyYW1lLCBidXQKPiA+ID4gPj4gICAgICAgICBldmVuIHRoZW4s IHRoaXMgMTAwbXMgZGVsYXkgaXMga2lsbGluZyB0aGlzIGFwcHJvYWNoCj4gPiBhbHRvZ2V0aGVy Lgo+ID4gPiA+Pgo+ID4gPiA+Pgo+ID4gPiA+Pgo+ID4gPiA+Pgo+ID4gPiA+PiBTbyByZXZpc2l0 aW5nIHRoaXMgdG8gZG91YmxlIGNoZWNrIGhvdyB0aGluZ3MgZmFpbCB3aXRoIG15IGxhdGVzdAo+ ID4gPiA+PiBkcml2ZXIvdGVzdHMgd2l0aG91dCB0aGUgZGVsYXksIEkgYXBwYXJlbnRseSBjYW4n dCByZXByb2R1Y2UgdGVzdAo+ID4gPiA+PiBmYWlsdXJlcyB3aXRob3V0IHRoZSBkZWxheSBhbnkg bW9yZS4uLgo+ID4gPiA+Pgo+ID4gPiA+PiBJIHRoaW5rIHRoZSBleHBsYW5hdGlvbiBpcyB0aGF0 IHNpbmNlIGZpcnN0IGFkZGluZyB0aGUgZGVsYXkgdG8gdGhlCj4gPiA+ID4+IGRyaXZlciBJIGFs c28gbWFkZSB0aGUgdGhlIGRyaXZlciBhIGJpdCBtb3JlIGNhcmVmdWwgdG8gbm90IGZvcndhcmQK PiA+ID4gPj4gc3B1cmlvdXMgcmVwb3J0cyB0aGF0IGxvb2sgaW52YWxpZCBkdWUgdG8gYSB6ZXJv ZWQgcmVwb3J0IGlkIGZpZWxkLAo+ID4gYW5kCj4gPiA+ID4+IHRoYXQgbWVjaGFuaXNtIGtlZXBz IHRoZSB1bml0IHRlc3RzIGhhcHB5LCBldmVuIHRob3VnaCB0aGVyZSBhcmUgc3RpbGwKPiA+ID4g Pj4gc29tZSBudW1iZXIgb2YgaW52YWxpZCByZXBvcnRzIGdlbmVyYXRlZCBpZiB3ZSBkb24ndCB3 YWl0Lgo+ID4gPiA+Pgo+ID4gPiA+PiBPbmUgcHJvYmxlbSB3aXRoIHNpbXBseSBoYXZpbmcgbm8g ZGVsYXkgaXMgdGhhdCB0aGUgZHJpdmVyIHByaW50cyBhbgo+ID4gPiA+PiBlcnJvciBpZiBpdCBz ZWVzIGFuIGludmFsaWQgcmVwb3J0cyBzbyBJIGdldCBhIGxvdCBvZiAnU2tpcHBpbmcKPiA+ID4g Pj4gc3B1cmlvdXMsIGludmFsaWQgT0EgcmVwb3J0JyBkbWVzZyBzcGFtLiBBbHNvIHRoaXMgd2Fz IGludGVuZGVkIG1vcmUKPiA+IGFzCj4gPiA+ID4+IGEgbGFzdCByZXNvcnQgbWVjaGFuaXNtLCBh bmQgSSB3b3VsZG4ndCBmZWVsIHRvbyBoYXBweSBhYm91dCBzcXVhc2hpbmcKPiA+ID4gPj4gdGhl IGVycm9yIG1lc3NhZ2UgYW5kIHBvdGVudGlhbGx5IHN3ZWVwaW5nIG90aGVyIGVycm9yIGNhc2Vz IHVuZGVyIHRoZQo+ID4gPiA+PiBjYXJwZXQuCj4gPiA+ID4+Cj4gPiA+ID4+IEV4cGVyaW1lbnRp bmcgdG8gc2VlIGlmIHRoZSBkZWxheSBjYW4gYXQgbGVhc3QgYmUgcmVkdWNlZCwgSSBicm91Z2h0 Cj4gPiB0aGUKPiA+ID4gPj4gZGVsYXkgdXAgaW4gbWlsbGlzZWNvbmQgaW5jcmVtZW50cyBhbmQg Zm91bmQgdGhhdCBhbHRob3VnaCBJIHN0aWxsCj4gPiBzZWUgYQo+ID4gPiA+PiBsb3Qgb2Ygc3B1 cmlvdXMgcmVwb3J0cyBvbmx5IHdhaXRpbmcgMSBvciA1IG1pbGxpc2Vjb25kcywgYXQgMTAKPiA+ ID4gPj4gbWlsbGlzZWNvbmRzIGl0cyByZWR1Y2VkIHF1aXRlIGEgYml0IGFuZCBhdCAxNSBtaWxs aXNlY29uZHMgSSBkb24ndAo+ID4gc2VlbQo+ID4gPiA+PiB0byBoYXZlIGFueSBlcnJvcnMuCj4g PiA+ID4+Cj4gPiA+ID4+IDE1IG1pbGxpc2Vjb25kcyBpcyBzdGlsbCBhIGxvbmcgdGltZSwgYnV0 IGF0IGxlYXN0IG5vdCBhcyBsb25nIGFzIDEwMC4KPiA+ID4gPj4KPiA+ID4gPgo+ID4gPiA+IE9L LCBzbyB0aGUgaXNzdWUgZG9lcyBub3QgY29tZSBmcm9tIHRoZSBIVyBhZnRlciBhbGwsIGdyZWF0 IQo+ID4gPiA+Cj4gPiA+Cj4gPiA+IEVybSwgSSdtIG5vdCBzdXJlIHRoYXQncyBhIGNvbmNsdXNp b24gd2UgY2FuIG1ha2UgaGVyZS4uLgo+ID4gPgo+ID4gPiBUaGUgdXBzaG90IGhlcmUgd2FzIHJl YWxseSBqdXN0IHJlZHVjaW5nIHRoZSBkZWxheSBmcm9tIDEwMG1zIHRvIDE1bXMuCj4gPiA+IFBy ZXZpb3VzbHkgSSBhcnJpdmVkIGF0IGEgd29ya2FibGUgZGVsYXkgYnkganVtcGluZyB0aGUgZGVs YXkgaW4gb3JkZXJzCj4gPiBvZgo+ID4gPiBtYWduaXR1ZGUgd2l0aCAxMG1zIGZhaWxpbmcsIDEw MG1zIHBhc3NpbmcgYW5kIEkgZGlkbid0IHRyeSBhbmQgcmVmaW5lIGl0Cj4gPiA+IGZ1cnRoZXIu IEhlcmUgSSd2ZSBsb29rZWQgYXQgZGVsYXlzIGJldHdlZW4gMTAgYW5kIDEwMG1zLgo+ID4gPgo+ ID4gPiBUaGUgb3RoZXIgdGhpbmcgaXMgb2JzZXJ2aW5nIHRoYXQgYmVjYXVzZSB0aGUga2VybmVs IGlzIGNoZWNraW5nIGZvcgo+ID4gPiBpbnZhbGlkIHJlcG9ydHMgKGdlbmVyYXRlZCBieSB0aGUg aGFyZHdhcmUpIGJlZm9yZSBmb3J3YXJkaW5nIHRvCj4gPiB1c2Vyc3BhY2UKPiA+ID4gdGhlIGxh Y2sgb2YgYSBkZWxheSBubyBsb25nZXIgdHJpZ2dlcnMgaS1nLXQgZmFpbHVyZXMgYmVjYXVzZSB0 aGUgaW52YWxpZAo+ID4gPiBkYXRhIHdvbid0IHJlYWNoIGktZy10IGFueSBtb3JlIC0gdGhvdWdo IHRoZSBpbnZhbGlkIHJlcG9ydHMgYXJlIHN0aWxsIGEKPiA+ID4gdGhpbmcgdG8gYXZvaWQuCj4g PiA+Cj4gPiA+Cj4gPiA+ID4gTm93LCBteSBtYWluIHF1ZXN0aW9uIGlzLCB3aHkgYXJlIHNwdXJp b3VzIGV2ZW50cyBnZW5lcmF0ZWQgd2hlbgo+ID4gY2hhbmdpbmcKPiA+ID4gPiB0aGUgTVVYJ3Mg dmFsdWU/IEkgY2FuIHVuZGVyc3RhbmQgdGhhdCB3ZSB3b3VsZCBuZWVkIHRvIGlnbm9yZSB0aGUK PiA+IHJlYWRpbmcKPiA+ID4gPiB0aGF0IGNhbWUgcmlnaHQgYWZ0ZXIgdGhlIGNoYW5nZSwgYnV0 IG90aGVyIHRoYW4gdGhpcywgIEkgYW0gYSBiaXQgYXQgYQo+ID4gPiA+IGxvc3MuCj4gPiA+ID4K PiA+ID4KPiA+ID4gVGhlIE1VWCBzZWxlY3RzIDE2IHNpZ25hbHMgdGhhdCB0aGUgT0EgdW5pdCBj YW4gdHVybiBpbnRvIDE2IHNlcGFyYXRlCj4gPiA+IGNvdW50ZXJzIGJ5IGJhc2ljYWxseSBjb3Vu dGluZyB0aGUgc2lnbmFsIGNoYW5nZXMuICh0aGVyZSdzIHNvbWUgZmFuY3kKPiA+ID4gZml4ZWQg ZnVuY3Rpb24gbG9naWMgdGhhdCBjYW4gYWZmZWN0IHRoaXMgYnV0IHRoYXQncyB0aGUgZ2VuZXJh bCBpZGVhKS4KPiA+ID4KPiA+ID4gSWYgdGhlIE1VWCBpcyBpbiB0aGUgbWlkZGxlIG9mIGJlaW5n IHJlLXByb2dyYW1tZWQgdGhlbiBzb21lIHN1YnNldCBvZgo+ID4gPiB0aG9zZSAxNiBzaWduYWxz IGFyZSBmb3Igd2hvIGtub3dzIHdoYXQuCj4gPiA+Cj4gPiA+IEFmdGVyIHByb2dyYW1taW5nIHRo ZSBNVVggd2Ugd2lsbCBnbyBvbiB0byBjb25maWd1cmUgdGhlIE9BIHVuaXQgYW5kIHRoZQo+ID4g PiB0ZXN0cyB3aWxsIGVuYWJsZSBwZXJpb2RpYyBzYW1wbGluZyB3aGljaCAoaWYgd2UgaGF2ZSBu byBkZWxheSkgd2lsbAo+ID4gc2FtcGxlCj4gPiA+IHRoZSBPQSBjb3VudGVycyB0aGF0IGFyZSBj dXJyZW50bHkgYmVpbmcgZmVkIGJ5IHVuZGVmaW5lZCBzaWduYWxzLgo+ID4gPgo+ID4gPiBTbyBh cyBmYXIgYXMgdGhhdCBnb2VzIGl0IG1ha2VzIHNlbnNlIHRvIG1lIHRvIGV4cGVjdCBiYWQgZGF0 YSBpZiB3ZQo+ID4gZG9uJ3QKPiA+ID4gd2FpdCBmb3IgdGhlIE1VWCBjb25maWcgdG8gbGFuZCBw cm9wZXJseS4gU29tZXRoaW5nIEkgZG9uJ3QgcmVhbGx5IGtub3cKPiA+IGlzCj4gPiA+IGhvdyBj b21lIHdlJ3JlIHNlZW1pbmdseSBsdWNreSB0byBoYXZlIHRoZSByZXBvcnRzIGJlIGNsZWFubHkg aW52YWxpZAo+ID4gd2l0aAo+ID4gPiBhIHplcm8gcmVwb3J0LWlkLCBpbnN0ZWFkIG9mIGp1c3Qg aGF2aW5nIGp1bmsgZGF0YSB0aGF0IHdvdWxkIGJlIGhhcmRlcgo+ID4gdG8KPiA+ID4gcmVjb2du aXNlLgo+ID4KPiA+IFllYWggdGhpcyBtZGVsYXkgc3Rvcnkgc291bmRzIHJlYWx5IHNjYXJ5LiBG ZXcgcmFuZG9tIGNvbW1lbnRzOgo+ID4gLSBtc2xlZXAgaW5zdGVhZCBvZiBtZGVsYXkgcGxlYXNl Cj4gPgo+IAo+IHl1cCB0aGlzIHdhcyBhIG1pc3Rha2UgSSdkIGZvcmdvdHRlbiB0byBmaXggaW4g dGhpcyBzZXJpZXMsIGJ1dCBpcyBmaXhlZCBpbgo+IHRoZSBsYXN0IHNlcmllcyBJIHNlbnQgYWZ0 ZXIgY2hyaXMgbm90aWNlZCB0b28uCj4gCj4gYWN0dWFsbHkgaW4gbXkgbGF0ZXN0ICh5ZXN0ZXJk YXkgYWZ0ZXIgZXhwZXJpbWVudGluZyBmdXJ0aGVyIHdpdGggdGhlIGRlbGF5Cj4gcmVxdWlyZW1l bnRzKSBJJ20gdXNpbmcgdXNsZWVwX3JhbmdlIGZvciBhIGRlbGF5IGJldHdlZW4gMTUgYW5kIDIw Cj4gbWlsbGlzZWNvbmRzIHdoaWNoIHNlZW1zIHRvIGJlIGVub3VnaC4KPiAKPiAKPiA+IC0gbm8g ZG1lc2cgbm9pc2UgYWJvdmUgZGVidWcgbGV2ZWwgZm9yIHN0dWZmIHRoYXQgd2Uga25vdyBjYW4g aGFwcGVuIC0KPiA+ICAgZG1lc2cgbm9pc2UgY291bnRzIGFzIGlndCBmYWlsdXJlcwo+ID4KPiAK PiBva2V5LiBJIGRvbid0IHRoaW5rIEkgaGF2ZSBhbnl0aGluZyBhYm92ZSBkZWJ1ZyBsZXZlbCwg dW5sZXNzIHRoaW5ncyBhcmUKPiBnb2luZyBiYWRseSB3cm9uZy4KPiAKPiBKdXN0IGRvdWJsZSBj aGVja2luZyB0aG91Z2ggaGFzIG1hZGUgbWUgdGhpbmsgdHdpY2UgYWJvdXQgYSBXQVJOX09OIGlu Cj4gZ2VuN19vYV9yZWFkIGZvciAhb2FfYnVmZmVyX2FkZHIsIHdoaWNoIHdvdWxkIGJlIGEgYmFk IHNpdHVhdGlvbiBidXQgc2hvdWxkCj4gZWl0aGVyIGJlIHJlbW92ZWQgKG5ldmVyIGV4cGVjdGVk KSwgYmUgYSBCVUdfT04gKHNpbmNlIHRoZSBjb2RlIHdvdWxkIGRlcmVmCj4gTlVMTCBhbnl3YXkp IG9yIG1vcmUgZ3JhY2VmdWxseSByZXR1cm4gYW4gZXJyb3IgaWYgc2Vlbi4KCldBUk5fT04gKyBi YWlsIG91dCwgb3IgQlVHX09OLiBTaWxlbnRseSBmaXhpbmcgdXAgd2l0aG91dCBmYWlsaW5nIGxv dWQgaW4KZG1lc2cgaXMgaW1vIHRoZSB3cm9uZyBhcHByb2FjaCBmb3Igc29tZXRoaW5nIHRoYXQg c2hvdWxkIG5ldmVyIGhhcHBlbi4KCj4gSSBjdXJyZW50bHkgaGF2ZSBzb21lIERSTV9EUklWRVJf REVCVUcgZXJyb3JzIGZvciBjYXNlcyB3aGVyZSB1c2Vyc3BhY2UKPiBtZXNzZXMgdXAgd2hhdCBw cm9wZXJ0aWVzIGl0IGdpdmVzIHRvIG9wZW4gYSBzdHJlYW0gLSBob3BlZnVsbHkgdGhhdCBzb3Vu ZAo+IG9rPyBJJ3ZlIGZvdW5kIGl0IHF1aXRlIGhlbHBmdWwgdG8gaGF2ZSBhIHJlYWRhYmxlIGVy cm9yIGZvciBvdGhlcndpc2UKPiB2YWd1ZSBFSU5WQUwgdHlwZSBlcnJvcnMuCgpZZWFoLCBhcyBs b25nIGFzIGl0J3MgZGVidWctb25seSBpdCdzIHBlcmZlY3RseSBmaW5lLiBXZSBhY3R1YWxseSB0 cnkgdG8KaGF2ZSBzdWNoIGEgbGluZSBmb3IgZWFjaCBFSU5WQUwsIHNpbmNlIGl0J3Mgc28gdXNl ZnVsIChidXQgdGhlbiB1c2Vyc3BhY2UKYWx3YXlzIGhpdHMgdGhlIG9uZSBjYXNlIHdlJ3ZlIG1p c3NlZCB0byBkb2N1bWVudCB3aXRoIGRlYnVnIG91dHB1dCEpLgoKPiBJIGhhdmUgYSBkZWJ1ZyBt ZXNzYWdlIEkgcHJpbnQgaWYgd2Ugc2VlIGFuIGludmFsaWQgSFcgcmVwb3J0LCB3aGljaAo+ICpz aG91bGRuJ3QqIGhhcHBlbiBidXQgY2FuIGhhcHBlbiAoZS5nLiBpZiB0aGUgTVVYIGRlbGF5IG9y IHRhaWwgbWFyZ2luCj4gYXJlbid0IHdlbGwgdHVuZWQpIGFuZCBpdCdzIGhlbHBmdWwgdG8gaGF2 ZSB0aGUgZmVlZGJhY2ssIGluIGNhc2Ugd2UgZW5kIHVwCj4gaW4gYSBzaXR1YXRpb24gd2hlcmUg d2Ugc2VlIHRoaXMga2luZCBvZiBtZXNzYWdlIHRvbyBmcmVxdWVudGx5IHdoaWNoIG1pZ2h0Cj4g aW5kaWNhdGUgYW4gaXNzdWUgdG8gaW52ZXN0aWdhdGUuCgpUaGF0J3MgZmluZSB0b28uCgo+ID4g LSByZWFkaW5nIDAgc291bmRzIG1vcmUgbGlrZSBiYWQgc3luY2hyb25pemF0aW9uLgo+IAo+IAo+ IEkgc3VwcG9zZSBJIGhhdmVuJ3QgdGhvcm91Z2hseSBjb25zaWRlcmVkIGlmIHdlIHNob3VsZCBy ZXR1cm4gemVybyBpbiBhbnkKPiBjYXNlICAtIG5vcm1hbGx5IHRoYXQgd291bGQgaW1wbHkgRU9G IHNvIHdlIGdldCB0byBjaG9vc2Ugd2hhdCB0aGF0IGltcGxpZXMKPiBoZXJlLiBJIGRvbid0IHRo aW5rIHRoZSBkcml2ZXIgc2hvdWxkIGV2ZXIgcmV0dXJuIDAgZnJvbSByZWFkKCkgY3VycmVudGx5 Lgo+IAo+IEEgZmV3IGNvbmNpb3VzIGNob2ljZXMgcmU6IHJlYWQoKSByZXR1cm4gdmFsdWVzIGhh dmUgYmVlbjoKPiAKPiAtIG5ldmVyIGV2ZXIgcmV0dXJuIHBhcnRpYWwgcmVjb3JkcyAob3IgcmF0 aGVyIGV2ZW4gaWYgYSBwYXJ0aWFsIHJlY29yZAo+IHdlcmUgbGl0ZXJhbGx5IGNvcGllZCBpbnRv IHRoZSB1c2Vyc3BhY2UgYnVmZmVyLCBidXQgYW4gZXJyb3Igd2VyZSBoaXQgaW4KPiB0aGUgbWlk ZGxlIG9mIGNvcHlpbmcgYSBmdWxsIHNhbXBsZSB0aGVuIHRoYXQgcmVjb3JkIHdvdWxkbid0IGJl IGFjY291bnRlZAo+IGZvciBpbiB0aGUgYnl0ZSBjb3VudCByZXR1cm5lZC4pCj4gCj4gLSBEb24n dCB0aHJvdyBhd2F5IHJlY29yZHMgc3VjY2Vzc2Z1bGx5IGNvcGllZCwgZHVlIHRvIGEgbGF0ZXIg ZXJyb3IuIFRoaXMKPiBzaW1wbGlmaWVzIGVycm9yIGhhbmRsaW5nIHBhdGhzIGludGVybmFsbHkg YW5kIHJlcG9ydGluZwo+IEVBR0FJTi9FTk9TUEMvRUZBVUxUIGVycm9ycyBhbmQgbWVhbnMgZGF0 YSBpc24ndCBsb3N0LiBUaGUgcHJlY2VkZW5jZSBmb3IKPiB3aGF0IHdlIHJldHVybiBpcyAxKSBk aWQgd2Ugc3VjY2Vzc2Z1bGx5IGNvcHkgc29tZSByZXBvcnRzPyByZXBvcnQgYnl0ZXMKPiBjb3Bp ZWQgZm9yIGNvbXBsZXRlIHJlY29yZHMuIDIpIGRpZCB3ZSBlbmNvdW50ZXIgYW4gZXJyb3I/IHJl cG9ydCB0aGF0IGlmCj4gc28uIDMpIHJldHVybiAtRUFHQUlOLiAodGhvdWdoIGZvciBhIGJsb2Nr aW5nIGZkIHRoaXMgd2lsbCBiZSBoYW5kbGVkCj4gaW50ZXJuYWxseSkuCj4gCj4gCj4gCj4gPiBI YXZlIHlvdSB0cmllZCBxdWllc2NpbmcKPiAKPiB0aGUgZW50aXJlIGdwdSAodG8gbWFrZSBzdXJl IG5vdGhpbmcgaXMgaGFwcGVuKSBhbmQgZGlzYWJsaW5nIE9BLCB0aGVuCj4gPiAgIHVwZGF0aW5n LCBhbmQgdGhlbiByZXN0YXJ0aW5nPyBBdCBsZWFzdCBvbiBhIHZlcnkgcXVpY2sgbG9vayBJIGRp ZG4ndAo+ID4gICBzcG90IHRoYXQuIFJhbmRvbSBkZWxheXMgZnJlYWsgbWUgb3V0IGEgYml0LCBi dXQgd291bGRuJ3QgYmUgc3VycHJpc2VkCj4gPiAgIGlmIHJlYWxseSBuZWVkZWQuCj4gPgo+IAo+ IEV4cGVyaW1lbnRpbmcgeWVzdGVyZGF5LCBpdCBzZWVtcyBJIGNhbiBhdCBsZWFzdCByZWR1Y2Ug dGhlIGRlbGF5IHRvIGFyb3VuZAo+IDE1bXMgKGdyYW50ZWQgdGhhdCdzIHN0aWxsIHByZXR0eSBo dWdlKSwgYW5kIGl0J3MgYWxzbyB3b3JrYWJsZSB0byBoYXZlCj4gdXNlcnNwYWNlIHNsZWVwIGZv ciB0aGlzIHRpbWUgKGRlc3BpdGUgdGhlIG1kZWxheSBJIG9yaWdpbmFsbHkgd2VudCB3aXRoKQo+ IAo+IEhhdmVuJ3QgdHJpZWQgdGhpcywgYnV0IHllYWggY291bGQgYmUgaW50ZXJlc3RpbmcgdG8g ZXhwZXJpbWVudCBpZiB0aGUgTVVYCj4gY29uZmlnIGxhbmRzIGZhc3RlciBpbiBkaWZmZXJlbnQg c2l0dWF0aW9uIHN1Y2ggYXMgd2hlbiB0aGUgSFcgaXMgaWRsZS4KCkluIGVpdGhlciBjYXNlIEkg dGhpbmsgaXQnZCBiZSBnb29kIHRvIGV4Y2Vzc2l2ZWx5IGRvY3VtZW50IHdoYXQgeW91J3ZlCmRp c2NvdmVyZWQuIE1heWJlIGV2ZW4gc3BsaXQgb3V0IHRoZSBtc2xlZXAgaW50byBhIHNlcGFyYXRl IHBhdGNoLCBzbyB0aGF0CnRoZSBjb21taXQgbWVzc2FnZSB3aXRoIGFsbCB0aGUgZGV0YWlscyBp cyBlYXN5IHRvIGZpbmQgYWdhaW4gaW4gdGhlCmZ1dHVyZS4gQmVjYXVzZSAyIG1vbnRocyBkb3du IHRoZSByb2FkIHNvbWVvbmUgd2lsbCByZWFkIHRoaXMgYW5kIGdvIHd0Zgo7LSkKCkNoZWVycywg RGFuaWVsCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3Jh dGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9pbnRlbC1nZngK