From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peter Hurley Subject: Re: [Intel-gfx] [PATCH] drm/vblank: Fixup and document timestamp update/read barriers Date: Tue, 05 May 2015 11:57:42 -0400 Message-ID: <5548E876.4010706@hurleysoftware.com> References: <1429082222-20820-1-git-send-email-daniel.vetter@ffwll.ch> <552E60D4.3070307@hurleysoftware.com> <20150415173153.GA6092@phenom.ffwll.local> <552FAB7F.4040707@hurleysoftware.com> <20150416130323.GG5082@phenom.ffwll.local> <5546FB02.4010508@gmail.com> <5548D568.3050109@hurleysoftware.com> <20150505154206.GB30184@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-qc0-f169.google.com (mail-qc0-f169.google.com [209.85.216.169]) by gabe.freedesktop.org (Postfix) with ESMTP id 24EE76E4E8 for ; Tue, 5 May 2015 08:57:47 -0700 (PDT) Received: by qctx5 with SMTP id x5so5591706qct.0 for ; Tue, 05 May 2015 08:57:46 -0700 (PDT) In-Reply-To: <20150505154206.GB30184@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter Cc: Daniel Vetter , =?UTF-8?B?TWljaGVsIETDpG56ZXI=?= , DRI Development , Daniel Vetter , Intel Graphics Development List-Id: dri-devel@lists.freedesktop.org T24gMDUvMDUvMjAxNSAxMTo0MiBBTSwgRGFuaWVsIFZldHRlciB3cm90ZToKPiBPbiBUdWUsIE1h eSAwNSwgMjAxNSBhdCAxMDozNjoyNEFNIC0wNDAwLCBQZXRlciBIdXJsZXkgd3JvdGU6Cj4+IE9u IDA1LzA0LzIwMTUgMTI6NTIgQU0sIE1hcmlvIEtsZWluZXIgd3JvdGU6Cj4+PiBPbiAwNC8xNi8y MDE1IDAzOjAzIFBNLCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+Pj4+IE9uIFRodSwgQXByIDE2LCAy MDE1IGF0IDA4OjMwOjU1QU0gLTA0MDAsIFBldGVyIEh1cmxleSB3cm90ZToKPj4+Pj4gT24gMDQv MTUvMjAxNSAwMTozMSBQTSwgRGFuaWVsIFZldHRlciB3cm90ZToKPj4+Pj4+IE9uIFdlZCwgQXBy IDE1LCAyMDE1IGF0IDA5OjAwOjA0QU0gLTA0MDAsIFBldGVyIEh1cmxleSB3cm90ZToKPj4+Pj4+ PiBIaSBEYW5pZWwsCj4+Pj4+Pj4KPj4+Pj4+PiBPbiAwNC8xNS8yMDE1IDAzOjE3IEFNLCBEYW5p ZWwgVmV0dGVyIHdyb3RlOgo+Pj4+Pj4+PiBUaGlzIHdhcyBhIGJpdCB0b28gbXVjaCBjYXJnby1j dWx0ZWQsIHNvIGxldHMgbWFrZSBpdCBzb2xpZDoKPj4+Pj4+Pj4gLSB2YmxhbmstPmNvdW50IGRv ZXNuJ3QgbmVlZCB0byBiZSBhbiBhdG9taWMsIHdyaXRlcyBhcmUgYWx3YXlzIGRvbmUKPj4+Pj4+ Pj4gICAgdW5kZXIgdGhlIHByb3RlY3Rpb24gb2YgZGV2LT52YmxhbmtfdGltZV9sb2NrLiBTd2l0 Y2ggdG8gYW4gdW5zaWduZWQKPj4+Pj4+Pj4gICAgbG9uZyBpbnN0ZWFkIGFuZCB1cGRhdGUgY29t bWVudHMuIE5vdGUgdGhhdCBhdG9taWNfcmVhZCBpcyBqdXN0IGEKPj4+Pj4+Pj4gICAgbm9ybWFs IHJlYWQgb2YgYSB2b2xhdGlsZSB2YXJpYWJsZSwgc28gbm8gbmVlZCB0byBhdWRpdCBhbGwgdGhl Cj4+Pj4+Pj4+ICAgIHJlYWQtc2lkZSBhY2Nlc3Mgc3BlY2lmaWNhbGx5Lgo+Pj4+Pj4+Pgo+Pj4+ Pj4+PiAtIFRoZSBiYXJyaWVycyBmb3IgdGhlIHZibGFuayBjb3VudGVyIHNlcWxvY2sgd2VyZW4n dCBjb21wbGV0ZTogVGhlCj4+Pj4+Pj4+ICAgIHJlYWQtc2lkZSB3YXMgbWlzc2luZyB0aGUgZmly c3QgYmFycmllciBiZXR3ZWVuIHRoZSBjb3VudGVyIHJlYWQgYW5kCj4+Pj4+Pj4+ICAgIHRoZSB0 aW1lc3RhbXAgcmVhZCwgaXQgb25seSBoYWQgYSBiYXJyaWVyIGJldHdlZW4gdGhlIHRzIGFuZCB0 aGUKPj4+Pj4+Pj4gICAgY291bnRlciByZWFkLiBXZSBuZWVkIGJvdGguCj4+Pj4+Pj4+Cj4+Pj4+ Pj4+IC0gQmFycmllcnMgd2VyZW4ndCBwcm9wZXJseSBkb2N1bWVudGVkLiBTaW5jZSBiYXJyaWVy cyBvbmx5IHdvcmsgaWYKPj4+Pj4+Pj4gICAgeW91IGhhdmUgdGhlbSBvbiBib3RocyBzaWRlcyBv ZiB0aGUgdHJhbnNhY3Rpb24gaXQncyBwcnVkZW50IHRvCj4+Pj4+Pj4+ICAgIHJlZmVyZW5jZSB3 aGVyZSB0aGUgb3RoZXIgc2lkZSBpcy4gVG8gYXZvaWQgZHVwbGljYXRpbmcgdGhlCj4+Pj4+Pj4+ ICAgIHdyaXRlLXNpZGUgY29tbWVudCAzIHRpbWVzIGV4dHJhY3QgYSBsaXR0bGUgc3RvcmVfdmJs YW5rKCkgaGVscGVyLgo+Pj4+Pj4+PiAgICBJbiB0aGF0IGhlbHBlciBhbHNvIGFzc2VydCB0aGF0 IHdlIGRvIGluZGVlZCBob2xkCj4+Pj4+Pj4+ICAgIGRldi0+dmJsYW5rX3RpbWVfbG9jaywgc2lu Y2UgaW4gc29tZSBjYXNlcyB0aGUgbG9jayBpcyBhY3F1aXJlZCBhCj4+Pj4+Pj4+ICAgIGZldyBm dW5jdGlvbnMgdXAgaW4gdGhlIGNhbGxjaGFpbi4KPj4+Pj4+Pj4KPj4+Pj4+Pj4gU3BvdHRlZCB3 aGlsZSByZXZpZXdpbmcgYSBwYXRjaCBmcm9tIENocmlzIFdpbHNvbiB0byBhZGQgYSBmYXN0cGF0 aCB0bwo+Pj4+Pj4+PiB0aGUgdmJsYW5rX3dhaXQgaW9jdGwuCj4+Pj4+Pj4+Cj4+Pj4+Pj4+IENj OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPj4+Pj4+Pj4gQ2M6IE1h cmlvIEtsZWluZXIgPG1hcmlvLmtsZWluZXIuZGVAZ21haWwuY29tPgo+Pj4+Pj4+PiBDYzogVmls bGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KPj4+Pj4+Pj4gQ2M6 IE1pY2hlbCBEw6RuemVyIDxtaWNoZWxAZGFlbnplci5uZXQ+Cj4+Pj4+Pj4+IFNpZ25lZC1vZmYt Ynk6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAaW50ZWwuY29tPgo+Pj4+Pj4+PiAtLS0K Pj4+Pj4+Pj4gICBkcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jIHwgOTIgKysrKysrKysrKysrKysr KysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPj4+Pj4+Pj4gICBpbmNsdWRlL2RybS9k cm1QLmggICAgICAgIHwgIDggKysrLS0KPj4+Pj4+Pj4gICAyIGZpbGVzIGNoYW5nZWQsIDU0IGlu c2VydGlvbnMoKyksIDQ2IGRlbGV0aW9ucygtKQo+Pj4+Pj4+Pgo+Pj4+Pj4+PiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMK Pj4+Pj4+Pj4gaW5kZXggYzhhMzQ0NzY1NzBhLi4yM2JmYmM2MWE0OTQgMTAwNjQ0Cj4+Pj4+Pj4+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMKPj4+Pj4+Pj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2RybV9pcnEuYwo+Pj4+Pj4+PiBAQCAtNzQsNiArNzQsMzMgQEAgbW9kdWxlX3BhcmFt X25hbWVkKHZibGFua29mZmRlbGF5LCBkcm1fdmJsYW5rX29mZmRlbGF5LCBpbnQsIDA2MDApOwo+ Pj4+Pj4+PiAgIG1vZHVsZV9wYXJhbV9uYW1lZCh0aW1lc3RhbXBfcHJlY2lzaW9uX3VzZWMsIGRy bV90aW1lc3RhbXBfcHJlY2lzaW9uLCBpbnQsIDA2MDApOwo+Pj4+Pj4+PiAgIG1vZHVsZV9wYXJh bV9uYW1lZCh0aW1lc3RhbXBfbW9ub3RvbmljLCBkcm1fdGltZXN0YW1wX21vbm90b25pYywgaW50 LCAwNjAwKTsKPj4+Pj4+Pj4KPj4+Pj4+Pj4gK3N0YXRpYyB2b2lkIHN0b3JlX3ZibGFuayhzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YywKPj4+Pj4+Pj4gKyAgICAgICAgICAgICB1bnNp Z25lZCB2YmxhbmtfY291bnRfaW5jLAo+Pj4+Pj4+PiArICAgICAgICAgICAgIHN0cnVjdCB0aW1l dmFsICp0X3ZibGFuaykKPj4+Pj4+Pj4gK3sKPj4+Pj4+Pj4gKyAgICBzdHJ1Y3QgZHJtX3ZibGFu a19jcnRjICp2YmxhbmsgPSAmZGV2LT52YmxhbmtbY3J0Y107Cj4+Pj4+Pj4+ICsgICAgdTMyIHRz bG90Owo+Pj4+Pj4+PiArCj4+Pj4+Pj4+ICsgICAgYXNzZXJ0X3NwaW5fbG9ja2VkKCZkZXYtPnZi bGFua190aW1lX2xvY2spOwo+Pj4+Pj4+PiArCj4+Pj4+Pj4+ICsgICAgaWYgKHRfdmJsYW5rKSB7 Cj4+Pj4+Pj4+ICsgICAgICAgIHRzbG90ID0gdmJsYW5rLT5jb3VudCArIHZibGFua19jb3VudF9p bmM7Cj4+Pj4+Pj4+ICsgICAgICAgIHZibGFua3RpbWVzdGFtcChkZXYsIGNydGMsIHRzbG90KSA9 ICp0X3ZibGFuazsKPj4+Pj4+Pj4gKyAgICB9Cj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4gKyAgICAvKgo+ Pj4+Pj4+PiArICAgICAqIHZibGFuayB0aW1lc3RhbXAgdXBkYXRlcyBhcmUgcHJvdGVjdGVkIG9u IHRoZSB3cml0ZSBzaWRlIHdpdGgKPj4+Pj4+Pj4gKyAgICAgKiB2YmxhbmtfdGltZV9sb2NrLCBi dXQgb24gdGhlIHJlYWQgc2lkZSBkb25lIGxvY2tsZXNzbHkgdXNpbmcgYQo+Pj4+Pj4+PiArICAg ICAqIHNlcXVlbmNlLWxvY2sgb24gdGhlIHZibGFuayBjb3VudGVyLiBFbnN1cmUgY29ycmVjdCBv cmRlcmluZyB1c2luZwo+Pj4+Pj4+PiArICAgICAqIG1lbW9yeSBiYXJycmllcnMuIFdlIG5lZWQg dGhlIGJhcnJpZXIgYm90aCBiZWZvcmUgYW5kIGFsc28gYWZ0ZXIgdGhlCj4+Pj4+Pj4+ICsgICAg ICogY291bnRlciB1cGRhdGUgdG8gc3luY2hyb25pemUgd2l0aCB0aGUgbmV4dCB0aW1lc3RhbXAg d3JpdGUuCj4+Pj4+Pj4+ICsgICAgICogVGhlIHJlYWQtc2lkZSBiYXJyaWVycyBmb3IgdGhpcyBh cmUgaW4gZHJtX3ZibGFua19jb3VudF9hbmRfdGltZS4KPj4+Pj4+Pj4gKyAgICAgKi8KPj4+Pj4+ Pj4gKyAgICBzbXBfd21iKCk7Cj4+Pj4+Pj4+ICsgICAgdmJsYW5rLT5jb3VudCArPSB2Ymxhbmtf Y291bnRfaW5jOwo+Pj4+Pj4+PiArICAgIHNtcF93bWIoKTsKPj4+Pj4+Pgo+Pj4+Pj4+IFRoZSBj b21tZW50IGFuZCB0aGUgY29kZSBhcmUgZWFjaCBzZWxmLWNvbnRyYWRpY3RvcnkuCj4+Pj4+Pj4K Pj4+Pj4+PiBJZiB2YmxhbmstPmNvdW50IHdyaXRlcyBhcmUgYWx3YXlzIHByb3RlY3RlZCBieSB2 YmxhbmtfdGltZV9sb2NrIChzb21ldGhpbmcgSQo+Pj4+Pj4+IGRpZCBub3QgdmVyaWZ5IGJ1dCB0 aGF0IHRoZSBjb21tZW50IGFib3ZlIGFzc2VydHMpLCB0aGVuIHRoZSB0cmFpbGluZyB3cml0ZQo+ Pj4+Pj4+IGJhcnJpZXIgaXMgbm90IHJlcXVpcmVkIChhbmQgdGhlIGFzc2VydGlvbiB0aGF0IGl0 IGlzIGluIHRoZSBjb21tZW50IGlzIGluY29ycmVjdCkuCj4+Pj4+Pj4KPj4+Pj4+PiBBIHNwaW4g dW5sb2NrIG9wZXJhdGlvbiBpcyBhbHdheXMgYSB3cml0ZSBiYXJyaWVyLgo+Pj4+Pj4KPj4+Pj4+ IEhtIHllYWguIE90b2ggdG8gbWUgdGhhdCdzIGJvcmRlcmluZyBvbiAiY29kZSB0b28gY2xldmVy IGZvciBteSBvd24gZ29vZCIuCj4+Pj4+PiBUaGF0IHRoZSBzcGlubG9jayBpcyBoZWxkIEkgY2Fu IGFzc3VyZS4gVGhhdCBubyBvbmUgZ29lcyBhcm91bmQgYW5kIGRvZXMKPj4+Pj4+IG11bHRpcGxl IHZibGFuayB1cGRhdGVzIChiZWNhdXNlIHNvbWVob3cgdGhhdCBjb2RlIHJhY2VkIHdpdGggdGhl IGh3Cj4+Pj4+PiBpdHNlbGYpIEkgY2FuJ3QgZWFzaWx5IGFzc3VyZSB3aXRoIGEgc2ltcGxlIGFz c2VydCBvciBzb21ldGhpbmcgc2ltaWxhci4KPj4+Pj4+IEl0J3Mgbm90IHRoZSBjYXNlIHJpZ2h0 IG5vdywgYnV0IHRoYXQgY2FuIGNoYW5nZXMuCj4+Pj4+Cj4+Pj4+IFRoZSBhbGdvcml0aG0gd291 bGQgYmUgYnJva2VuIGlmIG11bHRpcGxlIHVwZGF0ZXMgZm9yIHRoZSBzYW1lIHZibGFuawo+Pj4+ PiBjb3VudCB3ZXJlIGFsbG93ZWQ7IHRoYXQncyB3aHkgaXQgY2hlY2tzIHRvIHNlZSBpZiB0aGUg dmJsYW5rIGNvdW50IGhhcwo+Pj4+PiBub3QgYWR2YW5jZWQgYmVmb3JlIHN0b3JpbmcgYSBuZXcg dGltZXN0YW1wLgo+Pj4+Pgo+Pj4+PiBPdGhlcndpc2UsIHRoZSByZWFkIHNpZGUgd291bGQgbm90 IGJlIGFibGUgdG8gZGV0ZXJtaW5lIHRoYXQgdGhlCj4+Pj4+IHRpbWVzdGFtcCBpcyB2YWxpZCBi eSBkb3VibGUtY2hlY2tpbmcgdGhhdCB0aGUgdmJsYW5rIGNvdW50IGhhcyBub3QKPj4+Pj4gY2hh bmdlZC4KPj4+Pj4KPj4+Pj4gQW5kIGJlc2lkZXMsIGV2ZW4gaWYgdGhlIGNvZGUgbG9vcGVkIHdp dGhvdXQgZHJvcHBpbmcgdGhlIHNwaW5sb2NrLAo+Pj4+PiB0aGUgY29ycmVjdCB3cml0ZSBvcmRl ciB3b3VsZCBzdGlsbCBiZSBvYnNlcnZlZCBiZWNhdXNlIGl0IHdvdWxkIHN0aWxsCj4+Pj4+IGJl IGV4ZWN1dGluZyBvbiB0aGUgc2FtZSBjcHUuCj4+Pj4+Cj4+Pj4+IE15IG9iamVjdGlvbiB0byB0 aGUgd3JpdGUgbWVtb3J5IGJhcnJpZXIgaXMgbm90IGFib3V0IG9wdGltaXphdGlvbjsKPj4+Pj4g aXQncyBhYm91dCBjb3JyZWN0IGNvZGUuCj4+Pj4KPj4+PiBXZWxsIGRpZmY9MCBpcyBub3QgYWxs b3dlZCwgSSBndWVzcyBJIGNvdWxkIGVuZm9yY2UgdGhpcyB3aXRoIHNvbWUKPj4+PiBXQVJOX09O LiBBbmQgSSBzdGlsbCB0aGluayBteSBwb2ludCBvZiBub24tbG9jYWwgY29ycmVjdG5lc3MgaXMg c29saWQuCj4+Pj4gV2l0aCB0aGUgc21wX3dtYigpIHJlbW92ZWQgdGhlIGZvbGxvd2luZyBzdGls bCB3b3JrcyBjb3JyZWN0bHk6Cj4+Pj4KPj4+PiBzcGluX2xvY2sodmJsYW5rX3RpbWVfbG9jayk7 Cj4+Pj4gc3RvcmVfdmJsYW5rKGRldiwgY3J0YywgMSwgdHMxKTsKPj4+PiBzcGluX3VubG9jayh2 YmxhbmtfdGltZV9sb2NrKTsKPj4+Pgo+Pj4+IHNwaW5fbG9jayh2YmxhbmtfdGltZV9sb2NrKTsK Pj4+PiBzdG9yZV92YmxhbmsoZGV2LCBjcnRjLCAxLCB0czIpOwo+Pj4+IHNwaW5fdW5sb2NrKHZi bGFua190aW1lX2xvY2spOwo+Pj4+Cj4+Pj4gQnV0IHdpdGggdGhlIHNtcF93bWIoKTsgcmVtb3Zl ZCB0aGUgZm9sbG93aW5nIHdvdWxkIGJlIGJyb2tlbjoKPj4+Pgo+Pj4+IHNwaW5fbG9jayh2Ymxh bmtfdGltZV9sb2NrKTsKPj4+PiBzdG9yZV92YmxhbmsoZGV2LCBjcnRjLCAxLCB0czEpOwo+Pj4+ IHN0b3JlX3ZibGFuayhkZXYsIGNydGMsIDEsIHRzMik7Cj4+Pj4gc3Bpbl91bmxvY2sodmJsYW5r X3RpbWVfbG9jayk7Cj4+Pj4KPj4+PiBiZWNhdXNlIHRoZSBjb21waWxlci9jcHUgaXMgZnJlZSB0 byByZW9yZGVyIHRoZSBzdG9yZSBmb3IgdmJsYW5rLT5jb3VudAo+Pj4+IF9haGVhZF8gb2YgdGhl IHN0b3JlIGZvciB0aGUgdGltZXN0YW1wLiBBbmQgdGhhdCB3b3VsZCB0cmljayByZWFkZXJzIGlu dG8KPj4+PiBiZWxpZXZpbmcgdGhhdCB0aGV5IGhhdmUgYSB2YWxpZCB0aW1lc3RhbXAgd2hlbiB0 aGV5IHBvdGVudGlhbGx5IHJhY2VkLgo+Pj4+Cj4+Pj4gTm93IHlvdSdyZSBjb3JyZWN0IHRoYXQg cmlnaHQgbm93IHRoZXJlJ3Mgbm8gc3VjaCB0aGluZyBnb2luZyBvbiwgYW5kIGl0J3MKPj4+PiB1 bmxpa2VseSB0byBoYXBwZW4gKGdpdmVuIHRoZSBuYXR1cmUgb2YgdmJsYW5rIHVwZGF0ZXMpLiBC dXQgbXkgcG9pbnQgaXMKPj4+PiB0aGF0IGlmIHdlIG9wdGltaXplIHRoaXMgdGhlbiB0aGUgY29y cmVjdG5lc3MgY2FuJ3QgYmUgcHJvdmVuIGxvY2FsbHkKPj4+PiBhbnltb3JlIGJ5IGp1c3QgbG9v a2luZyBhdCBzdG9yZV92YmxhbmssIGJ1dCBpbnN0ZWFkIHlvdSBtdXN0IGF1ZGl0IGFsbAo+Pj4+ IHRoZSBjYWxsZXJzLiBBbmQgbGVha2luZyBsb2NraW5nL2JhcnJpZXJzIGxpa2UgdGhhdCBpcyB0 b28gZnJhZ2lsZSBkZXNpZ24KPj4+PiBmb3IgbXkgdGFzdGUuCj4+Pj4KPj4+PiBCdXQgeW91IGlu c2lzdCB0aGF0IG15IGFwcHJvYWNoIGlzIGJyb2tlbiBzb21laG93IGFuZCBkcm9wcGluZyB0aGUg c21wX3dtYgo+Pj4+IGlzIG5lZWRlZCBmb3IgY29ycmVjdG5lc3MuIEkgZG9uJ3Qgc2VlIGhvdyB0 aGF0J3MgdGhlIGNhc2UgYXQgYWxsLgo+Pgo+PiBEYW5pZWwsCj4+Cj4+IEkndmUgYmVlbiByZWFs bHkgYnVzeSB0aGlzIGxhc3Qgd2VlazsgbXkgYXBvbG9naWVzIGZvciBub3QgcmVwbHlpbmcgcHJv bXB0bHkuCj4+Cj4+PiBGd2l3LCBpIHNwZW50IHNvbWUgdGltZSByZWVkdWNhdGluZyBteXNlbGYg YWJvdXQgbWVtb3J5IGJhcnJpZXJzICh0aGFua3MgZm9yIHlvdXIgZXhwbGFuYXRpb25zKSBhbmQg dGhpbmtpbmcgYWJvdXQgdGhpcywgYW5kIHRoZSBsYXN0IHZlcnNpb24gb2YgeW91ciBwYXRjaCBs b29rcyBnb29kIHRvIG1lLiBJdCBhbHNvIG1ha2VzIHNlbnNlIHRvIG1lIHRvIGxlYXZlIHRoYXQg bGFzdCBzbWJfd21iKCkgaW4gcGxhY2UgdG8gbWFrZSBmdXR1cmUgdXNlIG9mIHRoZSBoZWxwZXIg cm9idXN0IC0gZm9yIG5vbi1sb2NhbCBjb3JyZWN0bmVzcywgdG8gYXZvaWQgaGF2aW5nIHRvIGF1 ZGl0IGFsbCBmdXR1cmUgY2FsbGVycyBvZiB0aGF0IGhlbHBlci4KPj4KPj4gTXkgY29uY2VybiB3 cnQgdG8gdW5uZWNlc3NhcnkgYmFycmllcnMgaW4gdGhpcyBhbGdvcml0aG0gaXMgdGhhdCB0aGUg dHJhaWxpbmcKPj4gYmFycmllciBub3cgYXBwZWFycyBtYW5kYXRvcnksIHdoZW4gaW4gZmFjdCBp dCBpcyBub3QuCj4+Cj4+IE1vcmVvdmVyLCB0aGlzIGFsZ29yaXRobSBpcywgaW4gZ2VuZXJhbCwg ZnJhZ2lsZSBhbmQgbm90IGRlc2lnbmVkIHRvIGhhbmRsZQo+PiByYW5kb20gb3IgcG9vcmx5LXJl c2VhcmNoZWQgY2hhbmdlcy4KPiAKPiBMZXNzIGZyYWdpbGl0eSBpcyBleGFjdGx5IHdoeSBJIHdh bnQgdGhhdCBzdXJwbHVzIGJhcnJpZXIuIEJ1dCBJJ3ZlIHJ1bgo+IG91dCBvZiBuZXcgaWRlYXMg Zm9yIGhvdyB0byBleHBsYWluIHRoYXQgLi4uCj4gCj4+IEZvciBleGFtcGxlLCBpZiBvbmx5IHRo ZSByZWFkIGFuZCBzdG9yZSBvcGVyYXRpb25zIGFyZSBjb25zaWRlcmVkLCBpdCdzIG9idmlvdXNs eQo+PiB1bnNhZmUsIHNpbmNlIGEgcmVhZCBtYXkgdW53aXR0aW5nbHkgcmV0cmlldmUgYW4gc3Rv cmUgaW4gcHJvZ3Jlc3MuCj4+Cj4+Cj4+IENQVSAwICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8IENQVSAxCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8Cj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdmJsYW5rLT5jb3VudCA9PSAw ICovCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cj4+IGRybV92 YmxhbmtfY291bnRfYW5kX3RpbWUoKSAgICAgICAgICAgICB8IHN0b3JlX3ZibGFuayguLiwgaW5j ID0gMiwgLi4uKQo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAo+ PiAgIGN1cl92YmxhbmsgPD0gTE9BRCB2YmxhbmstPmNvdW50ICAgICAgfAo+PiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHRzbG90ID0gdmJsYW5rLT5jb3VudCAr IDIKPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAvKiB0c2xv dCA9PSAyICovCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg U1RPUkUgdmJsYW5rdGltZVswXQo+IAo+IFRoaXMgbGluZSBoZXJlIGlzIHdyb25nLCBpdCBzaG91 bGQgYmUgIlNUT1JFIHZibGFua3RpbWVbMl0iCj4gCj4gVGhlICJTVE9SRSB2Ymxhbmt0aW1lWzBd IiBoYXBwZW5lZCB3YXkgZWFybGllciwgYmVmb3JlIDIgc21wX3dtYiBhbmQgdGhlCj4gcHJldmlv dXMgdXBkYXRpbmcgb2YgdmJsYW5rLT5jb3VudC4KCiZ2Ymxhbmt0aW1lWzBdID09ICZ2Ymxhbmt0 aW1lWzJdCgpUaGF0J3Mgd2h5IEkga2VlcCB0cnlpbmcgdG8gZXhwbGFpbiB5b3UgYWN0dWFsbHkg aGF2ZSB0byBsb29rIGF0IGFuZAp1bmRlcnN0YW5kIHRoZSBhbGdvcml0aG0gYmVmb3JlIGJsaW5k bHkgYXNzdW1pbmcgbG9jYWwgYmVoYXZpb3IgaXMKc3VmZmljaWVudC4KCj4gSSdtIGFsc28gc29t ZXdoYXQgY29uZnVzZWQgYWJvdXQgaG93IHlvdSB0byBhIGxpbmUgYWNyb3NzIGJvdGggY3B1cyBm b3IKPiBiYXJyaWVycyBiZWNhdXNlIGJhcnJpZXJzIG9ubHkgaGF2ZSBjcHUtbG9jYWwgZWZmZWN0 cyAod2hpY2ggaXMgd2h5IHdlCj4gYWx3YXlzIG5lZWQgYSBiYXJyaWVyIG9uIGJvdGggZW5kcyBv ZiBhIHRyYW5zYWN0aW9uKS4KPiAKPiBJbiBzaG9ydCBJIHN0aWxsIGRvbid0IGZvbGxvdyB3aGF0 J3Mgd3JvbmcuCj4gLURhbmllbAo+IAo+PiAgIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAt IC0gLSAtIC0gLSAtIHNtcF93bWIoKSAtIC0gLSAtIC0gLSAtIC0gLSAtCj4+ICAgLyogY3VyX3Zi bGFuayA9PSAwICovICAgICAgICAgICAgICAgICB8Cj4+ICAgbG9jYWwgPD0gTE9BRCB2Ymxhbmt0 aW1lWzBdICAgICAgICAgICB8Cj4+ICAgc21wX3JtYiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAt IC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gCj4+ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8Cj4+ICAqIGNwdSBoYXMgbG9hZGVkIHRoZSB3cm9u ZyB0aW1lc3RhbXAgKiB8Cj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8Cj4+ICAgbG9jYWwgPD0gTE9BRCB2YmxhbmstPmNvdW50ICAgICAgICAgICB8Cj4+ICAgY3Vy X3ZibGFuayA9PSBsb2NhbD8gICAgICAgICAgICAgICAgICB8Cj4+ICAgeWVzIC0gZXhpdCBsb29w ICAgICAgICAgICAgICAgICAgICAgICB8Cj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8ICAgdmJsYW5rLT5jb3VudCArPSAyCj4+ICAgLSAtIC0gLSAtIC0gLSAtIC0g LSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gc21wX3dtYigpIC0gLSAtIC0gLSAtIC0gLSAtIC0KPj4K Pj4gUmVnYXJkcywKPj4gUGV0ZXIgSHVybGV5Cj4+Cj4+Cj4+PiBJIGFsc28gdGVzdGVkIHlvdXIg cGF0Y2ggKyBhIHNsaWdodGx5IG1vZGlmaWVkIHZlcnNpb24gb2YgQ2hyaXMgdmJsYW5rIGRlbGF5 ZWQgZGlzYWJsZSAvIGluc3RhbnQgcXVlcnkgcGF0Y2hlcyArIG15IGZpeGVzIHVzaW5nIG15IG93 biBzdHJlc3MgdGVzdHMgYW5kIGhhcmR3YXJlIHRpbWluZyB0ZXN0IGVxdWlwbWVudCBvbiBib3Ro IGludGVsIGFuZCBub3V2ZWF1LCBhbmQgZXZlcnl0aGluZyBzZWVtcyB0byB3b3JrIGZpbmUuCj4+ Pgo+Pj4gU28gaSdtIGFsbCBmb3IgaW5jbHVkaW5nIHRoaXMgcGF0Y2ggYW5kIGl0IGhhcyBteQo+ Pj4KPj4+IFJldmlld2VkLWFuZC10ZXN0ZWQtYnk6IE1hcmlvIEtsZWluZXIgPG1hcmlvLmtsZWlu ZXIuZGVAZ21haWwuY29tPgo+Pj4KPj4+IEkganVzdCBzZW50IG91dCBhbiB1cGRhdGVkIHZlcnNp b24gb2YgbXkgcGF0Y2hlcywgc28gdGhleSBkb24ndCBjb25mbGljdCB3aXRoIHRoaXMgb25lIGFu ZCBhbHNvIGZpeCBhIGNvbXBpbGUgZmFpbHVyZSBvZiBkcm0vcXhsIHdpdGggeW91cnMuCj4+Pgo+ Pj4gVGhhbmtzLAo+Pj4gLW1hcmlvCj4+Cj4gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2RyaS1kZXZlbAo=