From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Vivi, Rodrigo" Subject: Re: [PATCH 3/4] drm/i915: opt-out CPU and WC mmaps from FBC Date: Wed, 23 Mar 2016 16:04:37 +0000 Message-ID: <1458749080.27320.119.camel@intel.com> References: <1458588418-31129-1-git-send-email-paulo.r.zanoni@intel.com> <1458588418-31129-5-git-send-email-paulo.r.zanoni@intel.com> <20160322112949.GC28483@phenom.ffwll.local> <1458683279.2189.32.camel@intel.com> <20160323085320.GI28483@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id B23E86E3EE for ; Wed, 23 Mar 2016 16:04:43 +0000 (UTC) In-Reply-To: <20160323085320.GI28483@phenom.ffwll.local> Content-Language: en-US Content-ID: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "daniel@ffwll.ch" , "Zanoni, Paulo R" Cc: "daniel.vetter@ffwll.ch" , "intel-gfx@lists.freedesktop.org" List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCAyMDE2LTAzLTIzIGF0IDA5OjUzICswMTAwLCBEYW5pZWwgVmV0dGVyIHdyb3RlOg0K PiBPbiBUdWUsIE1hciAyMiwgMjAxNiBhdCAwOTo0ODowMFBNICswMDAwLCBaYW5vbmksIFBhdWxv IFIgd3JvdGU6DQo+ID4gRW0gVGVyLCAyMDE2LTAzLTIyIMOgcyAxMjoyOSArMDEwMCwgRGFuaWVs IFZldHRlciBlc2NyZXZldToNCj4gPiA+IE9uIE1vbiwgTWFyIDIxLCAyMDE2IGF0IDA0OjI2OjU3 UE0gLTAzMDAsIFBhdWxvIFphbm9uaSB3cm90ZToNCj4gPiA+ID4gDQo+ID4gPiA+IEZCQyBhbmQg dGhlIGZyb250YnVmZmVyIHRyYWNraW5nIGluZnJhc3RydWN0dXJlIHdlcmUgZGVzaWduZWQNCj4g PiA+ID4gYXNzdW1pbmcNCj4gPiA+ID4gdGhhdCB1c2VyIHNwYWNlIGFwcGxpY2F0aW9ucyB3b3Vs ZCBmb2xsb3cgYSBzcGVjaWZpYyBzZXQgb2YNCj4gPiA+ID4gcnVsZXMNCj4gPiA+ID4gcmVnYXJk aW5nIGZyb250YnVmZmVyIG1hbmFnZW1lbnQgYW5kIG1tYXBwaW5nLiBJIHJlY2VudGx5DQo+ID4g PiA+IGRpc2NvdmVyZWQNCj4gPiA+ID4gdGhhdCBjdXJyZW50IHVzZXIgc3BhY2UgaXMgbm90IGV4 YWN0bHkgZm9sbG93aW5nIHRoZXNlIHJ1bGVzOg0KPiA+ID4gPiBteQ0KPiA+ID4gPiBpbnZlc3Rp Z2F0aW9uIGxlZCBtZSB0byB0aGUgY29uY2x1c2lvbiB0aGF0IHRoZSBnZW5lcmljIGJhY2tlbmQN Cj4gPiA+ID4gZnJvbQ0KPiA+ID4gPiBTTkEgLSB1c2VkIGJ5IFNLTCBhbmQgdGhlIG90aGVyIG5l dyBwbGF0Zm9ybXMgd2l0aG91dCBhDQo+ID4gPiA+IHNwZWNpZmljDQo+ID4gPiA+IGJhY2tlbmQg LSBpcyBub3QgaXNzdWluZyBzd19maW5pc2gvZGlydHlfZmIgSU9DVExzIHdoZW4gdXNpbmcNCj4g PiA+ID4gdGhlDQo+ID4gPiA+IENQVQ0KPiA+ID4gPiBhbmQgV0MgbW1hcHMuIEkgZGlzY292ZXJl ZCB0aGlzIHdoZW4gcnVubmluZyBsaWdodGRtOiBJIHdvdWxkDQo+ID4gPiA+IHR5cGUNCj4gPiA+ ID4gdGhlDQo+ID4gPiA+IHBhc3N3b3JkIGFuZCBub3RoaW5nIHdvdWxkIGFwcGVhciBvbiB0aGUg c2NyZWVuIHVubGVzcyBJIG1vdmVkDQo+ID4gPiA+IHRoZQ0KPiA+ID4gPiBtb3VzZSBvdmVyIHRo ZSBwbGFjZSB3aGVyZSB0aGUgbGV0dGVycyB3ZXJlIHN1cHBvc2VkIHRvIGFwcGVhci4NCj4gPiA+ ID4gDQo+ID4gPiA+IFNpbmNlIHdlIGNhbid0IGRldGVjdCB3aGV0aGVyIHRoZSBjdXJyZW50IERS TSBtYXN0ZXIgaXMgYSB3ZWxsLQ0KPiA+ID4gPiBiZWhhdmVkDQo+ID4gPiA+IGFwcGxpY2F0aW9u IG9yIG5vdCwgbGV0J3MgdXNlIHRoZSBzbGVkZ2VoYW1tZXIgYXBwcm9hY2ggYW5kDQo+ID4gPiA+ IGFzc3VtZQ0KPiA+ID4gPiB0aGF0IGV2ZXJ5IHVzZXIgc3BhY2UgY2xpZW50IG9uIGV2ZXJ5IGdl biBpcyBiYWQgYnkgZGlzYWJsaW5nDQo+ID4gPiA+IEZCQw0KPiA+ID4gPiB3aGVuDQo+ID4gPiA+ IHRoZSBmcm9udGJ1ZmZlciBpcyBDUFUvV0MgbW1hcHBlZC4gIFRoaXMgd2lsbCBhbGxvdyB1cyB0 bw0KPiA+ID4gPiBlbmFibGUNCj4gPiA+ID4gRkJDDQo+ID4gPiA+IG9uIFNLTCwgbW92aW5nIGl0 cyBGQkMtcmVsYXRlZCBwb3dlciBzYXZpbmdzIGZyb20gImFsd2F5cyAwJSINCj4gPiA+ID4gdG8g Ij4NCj4gPiA+ID4gMCUNCj4gPiA+ID4gaW4gc29tZSBjYXNlcyIuDQo+ID4gPiA+IA0KPiA+ID4g PiBUaGVyZSdzIGFsc28gc29tZSBhZGRpdGlvbmFsIGNvZGUgdG8gZGlzYWJsZSB0aGUgd29ya2Fy b3VuZCBmb3INCj4gPiA+ID4gZnJvbnRidWZmZXJzIHRoYXQgZXZlciByZWNlaXZlZCBhIHN3X2Zp bmlzaCBvciBkaXJ0eV9mYiBJT0NUTCwNCj4gPiA+ID4gc2luY2UNCj4gPiA+ID4gdGhlIGN1cnJl bnQgYmFkIHVzZXIgc3BhY2UgbmV2ZXIgaXNzdWVzIHRob3NlIGNhbGxzLiBUaGlzDQo+ID4gPiA+ IHNob3VsZA0KPiA+ID4gPiBoZWxwDQo+ID4gPiA+IGZvciBzb21lIHNwZWNpZmljIGNhc2VzIGFu ZCBvdXIgSUdUIHRlc3RzLCBidXQgd29uJ3QgYmUgZW5vdWdoDQo+ID4gPiA+IGZvcg0KPiA+ID4g PiBhDQo+ID4gPiA+IG5ldyB4Zjg2LXZpZGVvLWludGVsIHVzaW5nIFRlYXJGcmVlLg0KPiA+ID4g PiANCj4gPiA+ID4gTm90aWNlIHRoYXQgd2UgbWF5IG5lZWQgYW4gZXF1aXZhbGVudCBjb21taXQg Zm9yIFBTUiB0b28uIFdlDQo+ID4gPiA+IGFsc28NCj4gPiA+ID4gbmVlZA0KPiA+ID4gPiB0byBp bnZlc3RpZ2F0ZSB3aGV0aGVyIFBTUiBuZWVkcyB0byBiZSBkaXNhYmxlZCBvbiBHVFQgbW1hcHM6 DQo+ID4gPiA+IGlmDQo+ID4gPiA+IHRoYXQncyB0aGUgY2FzZSwgd2UnbGwgaGF2ZSBwcm9ibGVt cyBzaW5jZSB3ZSBzZWVtIHRvIGFsd2F5cw0KPiA+ID4gPiBoYXZlDQo+ID4gPiA+IEdUVA0KPiA+ ID4gPiBtbWFwcyBvbiBvdXIgY3VycmVudCB1c2VyIHNwYWNlLCBzbyB3ZSB3b3VsZCBlbmQgdXAg a2VlcGluZyBQU1INCj4gPiA+ID4gZGlzYWJsZWQgZm9yZXZlci4NCj4gPiA+ID4gDQo+ID4gPiA+ IHYyOg0KPiA+ID4gPiAgIC0gUmVuYW1lIHNvbWUgdGhpbmdzLg0KPiA+ID4gPiAgIC0gRGlzYWJs ZSB0aGUgV0Egb24gc3dfZmluaXNoL2RpcnR5X2ZiIChEYW5pZWwpLg0KPiA+ID4gPiAgIC0gRml4 IE5VTEwgb2JqIGNoZWNraW5nLg0KPiA+ID4gPiAgIC0gUmVzdHJpYyB0byBHZW4gOS4NCj4gPiA+ ID4gDQo+ID4gPiA+IENjOiBSb2RyaWdvIFZpdmkgPHJvZHJpZ28udml2aUBpbnRlbC5jb20+DQo+ ID4gPiA+IENjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xsLmNoPg0KPiA+ID4g PiBDYzogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+DQo+ID4gPiA+IFNp Z25lZC1vZmYtYnk6IFBhdWxvIFphbm9uaSA8cGF1bG8uci56YW5vbmlAaW50ZWwuY29tPg0KPiA+ ID4gPiAtLS0NCj4gPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAg ICAgfCAgOSArKysrKysrKysNCj4gPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt LmMgICAgICAgICAgfCAxOSArKysrKysrKysrKy0tLS0tDQo+ID4gPiA+IC0tDQo+ID4gPiA+ICBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgICAgIHwgIDEgKw0KPiA+ID4gPiAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggICAgICAgICB8ICAzICsrKw0KPiA+ID4g PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmJjLmMgICAgICAgICB8IDMzDQo+ID4gPiA+ ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ID4gPiA+ICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9mcm9udGJ1ZmZlci5jIHwgMzENCj4gPiA+ID4gKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrDQo+ID4gPiA+ICA2IGZpbGVzIGNoYW5nZWQsIDg5IGluc2VydGlvbnMo KyksIDcgZGVsZXRpb25zKC0pDQo+ID4gPiA+IA0KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaA0KPiA+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmgNCj4gPiA+ID4gaW5kZXggZWZjYTUzNC4uNDVlMzFkMiAxMDA2NDQNCj4gPiA+ ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaA0KPiA+ID4gPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oDQo+ID4gPiA+IEBAIC04NzMsNiArODczLDEz IEBAIGVudW0gZmJfb3Bfb3JpZ2luIHsNCj4gPiA+ID4gIAlPUklHSU5fRElSVFlGQiwNCj4gPiA+ ID4gIH07DQo+ID4gPiA+ICANCj4gPiA+ID4gK2VudW0gZmJfbW1hcF93YV9mbGFncyB7DQo+ID4g PiA+ICsJRkJfTU1BUF9XQV9DUFUgPQkxIDw8IDAsDQo+ID4gPiA+ICsJRkJfTU1BUF9XQV9HVFQg PQkxIDw8IDEsDQo+ID4gPiA+ICsJRkJfTU1BUF9XQV9ESVNBQkxFID0gCTEgPDwgMiwNCj4gPiA+ ID4gKwlGQl9NTUFQX1dBX0ZMQUdfQ09VTlQgPQkzLA0KPiA+ID4gPiArfTsNCj4gPiA+ID4gKw0K PiA+IA0KPiA+IEknbGwgZG8gdGhlIGNoYW5nZSB0byBtYWNyb3MgeW91L0phbmkgbWVudGlvbmVk IGluIHRoZSBvdGhlcg0KPiA+IGVtYWlscy4NCj4gPiANCj4gPiA+ID4gIHN0cnVjdCBpbnRlbF9m YmMgew0KPiA+ID4gPiAgCS8qIFRoaXMgaXMgYWx3YXlzIHRoZSBpbm5lciBsb2NrIHdoZW4gb3Zl cmxhcHBpbmcgd2l0aA0KPiA+ID4gPiBzdHJ1Y3RfbXV0ZXggYW5kDQo+ID4gPiA+ICAJICogaXQn cyB0aGUgb3V0ZXIgbG9jayB3aGVuIG92ZXJsYXBwaW5nIHdpdGgNCj4gPiA+ID4gc3RvbGVuX2xv Y2suDQo+ID4gPiA+ICovDQo+ID4gPiA+IEBAIC05MTAsNiArOTE3LDcgQEAgc3RydWN0IGludGVs X2ZiYyB7DQo+ID4gPiA+ICAJCQl1bnNpZ25lZCBpbnQgc3RyaWRlOw0KPiA+ID4gPiAgCQkJaW50 IGZlbmNlX3JlZzsNCj4gPiA+ID4gIAkJCXVuc2lnbmVkIGludCB0aWxpbmdfbW9kZTsNCj4gPiA+ ID4gKwkJCXVuc2lnbmVkIGludCBtbWFwX3dhX2ZsYWdzOw0KPiA+ID4gPiAgCQl9IGZiOw0KPiA+ ID4gPiAgCX0gc3RhdGVfY2FjaGU7DQo+ID4gPiA+ICANCj4gPiA+ID4gQEAgLTIxNDMsNiArMjE1 MSw3IEBAIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0IHsNCj4gPiA+ID4gIAl1bnNpZ25lZCBp bnQgY2FjaGVfZGlydHk6MTsNCj4gPiA+ID4gIA0KPiA+ID4gPiAgCXVuc2lnbmVkIGludCBmcm9u dGJ1ZmZlcl9iaXRzOklOVEVMX0ZST05UQlVGRkVSX0JJVFM7DQo+ID4gPiA+ICsJdW5zaWduZWQg aW50IGZiX21tYXBfd2FfZmxhZ3M6RkJfTU1BUF9XQV9GTEFHX0NPVU5UOw0KPiA+ID4gPiAgDQo+ ID4gPiA+ICAJdW5zaWduZWQgaW50IHBpbl9kaXNwbGF5Ow0KPiA+ID4gPiAgDQo+ID4gPiA+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jDQo+ID4gPiA+IGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYw0KPiA+ID4gPiBpbmRleCA4NTg4YzgzLi5kNDRm MjdlIDEwMDY0NA0KPiA+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5j DQo+ID4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMNCj4gPiA+ID4g QEAgLTE2OTIsNiArMTY5Miw4IEBAIGk5MTVfZ2VtX3N3X2ZpbmlzaF9pb2N0bChzdHJ1Y3QNCj4g PiA+ID4gZHJtX2RldmljZQ0KPiA+ID4gPiAqZGV2LCB2b2lkICpkYXRhLA0KPiA+ID4gPiAgCQln b3RvIHVubG9jazsNCj4gPiA+ID4gIAl9DQo+ID4gPiA+ICANCj4gPiA+ID4gKwlpbnRlbF9mYl9v YmpfbW1hcF93YShvYmosIEZCX01NQVBfV0FfRElTQUJMRSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4g IAkvKiBQaW5uZWQgYnVmZmVycyBtYXkgYmUgc2Nhbm91dCwgc28gZmx1c2ggdGhlIGNhY2hlDQo+ ID4gPiA+ICovDQo+ID4gPiA+ICAJaWYgKG9iai0+cGluX2Rpc3BsYXkpDQo+ID4gPiA+ICAJCWk5 MTVfZ2VtX29iamVjdF9mbHVzaF9jcHVfd3JpdGVfZG9tYWluKG9iaik7DQo+ID4gPiA+IEBAIC0x NzI0LDcgKzE3MjYsNyBAQCBpOTE1X2dlbV9tbWFwX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlDQo+ ID4gPiA+ICpkZXYsDQo+ID4gPiA+IHZvaWQgKmRhdGEsDQo+ID4gPiA+ICAJCSAgICBzdHJ1Y3Qg ZHJtX2ZpbGUgKmZpbGUpDQo+ID4gPiA+ICB7DQo+ID4gPiA+ICAJc3RydWN0IGRybV9pOTE1X2dl bV9tbWFwICphcmdzID0gZGF0YTsNCj4gPiA+ID4gLQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9i ajsNCj4gPiA+ID4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOw0KPiA+ID4gPiAg CXVuc2lnbmVkIGxvbmcgYWRkcjsNCj4gPiA+ID4gIA0KPiA+ID4gPiAgCWlmIChhcmdzLT5mbGFn cyAmIH4oSTkxNV9NTUFQX1dDKSkNCj4gPiA+ID4gQEAgLTE3MzMsMTkgKzE3MzUsMTkgQEAgaTkx NV9nZW1fbW1hcF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZQ0KPiA+ID4gPiAqZGV2LA0KPiA+ID4g PiB2b2lkICpkYXRhLA0KPiA+ID4gPiAgCWlmIChhcmdzLT5mbGFncyAmIEk5MTVfTU1BUF9XQyAm JiAhY3B1X2hhc19wYXQpDQo+ID4gPiA+ICAJCXJldHVybiAtRU5PREVWOw0KPiA+ID4gPiAgDQo+ ID4gPiA+IC0Jb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZSwgYXJncy0+aGFu ZGxlKTsNCj4gPiA+ID4gLQlpZiAob2JqID09IE5VTEwpDQo+ID4gPiA+ICsJb2JqID0gdG9faW50 ZWxfYm8oZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZSwNCj4gPiA+ID4gYXJncy0NCj4g PiA+ID4gPiBoYW5kbGUpKTsNCj4gPiA+ID4gKwlpZiAoJm9iai0+YmFzZSA9PSBOVUxMKQ0KPiA+ ID4gPiAgCQlyZXR1cm4gLUVOT0VOVDsNCj4gPiA+ID4gIA0KPiA+ID4gPiAgCS8qIHByaW1lIG9i amVjdHMgaGF2ZSBubyBiYWNraW5nIGZpbHAgdG8gR0VNIG1tYXANCj4gPiA+ID4gIAkgKiBwYWdl cyBmcm9tLg0KPiA+ID4gPiAgCSAqLw0KPiA+ID4gPiAtCWlmICghb2JqLT5maWxwKSB7DQo+ID4g PiA+IC0JCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKG9iaik7DQo+ID4gPiA+ ICsJaWYgKCFvYmotPmJhc2UuZmlscCkgew0KPiA+ID4gPiArCQlkcm1fZ2VtX29iamVjdF91bnJl ZmVyZW5jZV91bmxvY2tlZCgmb2JqDQo+ID4gPiA+IC0+YmFzZSk7DQo+ID4gPiA+ICAJCXJldHVy biAtRUlOVkFMOw0KPiA+ID4gPiAgCX0NCj4gPiA+ID4gIA0KPiA+ID4gPiAtCWFkZHIgPSB2bV9t bWFwKG9iai0+ZmlscCwgMCwgYXJncy0+c2l6ZSwNCj4gPiA+ID4gKwlhZGRyID0gdm1fbW1hcChv YmotPmJhc2UuZmlscCwgMCwgYXJncy0+c2l6ZSwNCj4gPiA+ID4gIAkJICAgICAgIFBST1RfUkVB RCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsDQo+ID4gPiA+ICAJCSAgICAgICBhcmdzLT5vZmZz ZXQpOw0KPiA+ID4gPiAgCWlmIChhcmdzLT5mbGFncyAmIEk5MTVfTU1BUF9XQykgew0KPiA+ID4g PiBAQCAtMTc2MSwxMCArMTc2MywxMiBAQCBpOTE1X2dlbV9tbWFwX2lvY3RsKHN0cnVjdCBkcm1f ZGV2aWNlDQo+ID4gPiA+ICpkZXYsDQo+ID4gPiA+IHZvaWQgKmRhdGEsDQo+ID4gPiA+ICAJCQlh ZGRyID0gLUVOT01FTTsNCj4gPiA+ID4gIAkJdXBfd3JpdGUoJm1tLT5tbWFwX3NlbSk7DQo+ID4g PiA+ICAJfQ0KPiA+ID4gPiAtCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKG9i aik7DQo+ID4gPiA+ICsJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJm9iai0+ YmFzZSk7DQo+ID4gPiA+ICAJaWYgKElTX0VSUigodm9pZCAqKWFkZHIpKQ0KPiA+ID4gPiAgCQly ZXR1cm4gYWRkcjsNCj4gPiA+ID4gIA0KPiA+ID4gPiArCWludGVsX2ZiX29ial9tbWFwX3dhKG9i aiwgRkJfTU1BUF9XQV9DUFUpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICAJYXJncy0+YWRkcl9wdHIg PSAodWludDY0X3QpIGFkZHI7DQo+ID4gPiA+ICANCj4gPiA+ID4gIAlyZXR1cm4gMDsNCj4gPiA+ ID4gQEAgLTIwOTksNiArMjEwMyw3IEBAIGk5MTVfZ2VtX21tYXBfZ3R0KHN0cnVjdCBkcm1fZmls ZSAqZmlsZSwNCj4gPiA+ID4gIAkJZ290byBvdXQ7DQo+ID4gPiA+ICANCj4gPiA+ID4gIAkqb2Zm c2V0ID0gZHJtX3ZtYV9ub2RlX29mZnNldF9hZGRyKCZvYmoNCj4gPiA+ID4gLT5iYXNlLnZtYV9u b2RlKTsNCj4gPiA+ID4gKwlpbnRlbF9mYl9vYmpfbW1hcF93YShvYmosIEZCX01NQVBfV0FfR1RU KTsNCj4gPiA+ID4gIA0KPiA+ID4gPiAgb3V0Og0KPiA+ID4gPiAgCWRybV9nZW1fb2JqZWN0X3Vu cmVmZXJlbmNlKCZvYmotPmJhc2UpOw0KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jDQo+ID4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZGlzcGxheS5jDQo+ID4gPiA+IGluZGV4IDI4ZWFkNjYuLjZlN2FhOWUgMTAwNjQ0DQo+ ID4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYw0KPiA+ID4g PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMNCj4gPiA+ID4gQEAg LTE0NzA1LDYgKzE0NzA1LDcgQEAgc3RhdGljIGludA0KPiA+ID4gPiBpbnRlbF91c2VyX2ZyYW1l YnVmZmVyX2RpcnR5KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLA0KPiA+ID4gPiAgCXN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBpbnRlbF9mYi0+b2JqOw0KPiA+ID4gPiAgDQo+ ID4gPiA+ICAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOw0KPiA+ID4gPiArCWludGVs X2ZiX29ial9tbWFwX3dhKG9iaiwgRkJfTU1BUF9XQV9ESVNBQkxFKTsNCj4gPiA+ID4gIAlpbnRl bF9mYl9vYmpfZmx1c2gob2JqLCBmYWxzZSwgT1JJR0lOX0RJUlRZRkIpOw0KPiA+ID4gPiAgCW11 dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOw0KPiA+ID4gPiAgDQo+ID4gPiA+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaA0KPiA+ID4gPiBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oDQo+ID4gPiA+IGluZGV4IGJhNDUyNDUuLmJiZWE3 YzQgMTAwNjQ0DQo+ID4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5o DQo+ID4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oDQo+ID4gPiA+ IEBAIC0xMDgyLDYgKzEwODIsNyBAQCB2b2lkDQo+ID4gPiA+IGludGVsX2Zyb250YnVmZmVyX2Zs aXBfY29tcGxldGUoc3RydWN0DQo+ID4gPiA+IGRybV9kZXZpY2UgKmRldiwNCj4gPiA+ID4gIAkJ CQkgICAgIHVuc2lnbmVkDQo+ID4gPiA+IGZyb250YnVmZmVyX2JpdHMpOw0KPiA+ID4gPiAgdm9p ZCBpbnRlbF9mcm9udGJ1ZmZlcl9mbGlwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsDQo+ID4gPiA+ ICAJCQkgICAgdW5zaWduZWQgZnJvbnRidWZmZXJfYml0cyk7DQo+ID4gPiA+ICt2b2lkIGludGVs X2ZiX29ial9tbWFwX3dhKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosDQo+ID4gPiA+ IHVuc2lnbmVkIGludCBmbGFncyk7DQo+ID4gPiA+ICB1bnNpZ25lZCBpbnQgaW50ZWxfZmJfYWxp Z25faGVpZ2h0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsDQo+ID4gPiA+ICAJCQkJICAgdW5zaWdu ZWQgaW50IGhlaWdodCwNCj4gPiA+ID4gIAkJCQkgICB1aW50MzJfdCBwaXhlbF9mb3JtYXQsDQo+ ID4gPiA+IEBAIC0xMzcxLDYgKzEzNzIsOCBAQCB2b2lkIGludGVsX2ZiY19pbnZhbGlkYXRlKHN0 cnVjdA0KPiA+ID4gPiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwNCj4gPiA+ID4gIAkJCSAg ZW51bSBmYl9vcF9vcmlnaW4gb3JpZ2luKTsNCj4gPiA+ID4gIHZvaWQgaW50ZWxfZmJjX2ZsdXNo KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwNCj4gPiA+ID4gIAkJICAgICB1bnNp Z25lZCBpbnQgZnJvbnRidWZmZXJfYml0cywgZW51bQ0KPiA+ID4gPiBmYl9vcF9vcmlnaW4gb3Jp Z2luKTsNCj4gPiA+ID4gK3ZvaWQgaW50ZWxfZmJjX21tYXBfd2Eoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LA0KPiA+ID4gPiArCQkgICAgICAgdW5zaWduZWQgaW50IGZyb250YnVm ZmVyX2JpdHMsIHVuc2lnbmVkDQo+ID4gPiA+IGludA0KPiA+ID4gPiBmbGFncyk7DQo+ID4gPiA+ ICB2b2lkIGludGVsX2ZiY19jbGVhbnVwX2NmYihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpOw0KPiA+ID4gPiAgDQo+ID4gPiA+ICAvKiBpbnRlbF9oZG1pLmMgKi8NCj4gPiA+ID4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiYy5jDQo+ID4gPiA+IGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmJjLmMNCj4gPiA+ID4gaW5kZXggNzEwMTg4MC4u NzE4YWMzOCAxMDA2NDQNCj4gPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZmJjLmMNCj4gPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmJjLmMNCj4g PiA+ID4gQEAgLTc0NSw2ICs3NDUsMTQgQEAgc3RhdGljIHZvaWQNCj4gPiA+ID4gaW50ZWxfZmJj X3VwZGF0ZV9zdGF0ZV9jYWNoZShzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykNCj4gPiA+ID4gIAlj YWNoZS0+ZmIuc3RyaWRlID0gZmItPnBpdGNoZXNbMF07DQo+ID4gPiA+ICAJY2FjaGUtPmZiLmZl bmNlX3JlZyA9IG9iai0+ZmVuY2VfcmVnOw0KPiA+ID4gPiAgCWNhY2hlLT5mYi50aWxpbmdfbW9k ZSA9IG9iai0+dGlsaW5nX21vZGU7DQo+ID4gPiA+ICsJY2FjaGUtPmZiLm1tYXBfd2FfZmxhZ3Mg PSBvYmotPmZiX21tYXBfd2FfZmxhZ3M7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4g K3N0YXRpYyBib29sIG5lZWRfbW1hcF9kaXNhYmxlX3dvcmthcm91bmQoc3RydWN0IGludGVsX2Zi Yw0KPiA+ID4gPiAqZmJjKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArCXVuc2lnbmVkIGludCBmbGFn cyA9IGZiYw0KPiA+ID4gPiAtPnN0YXRlX2NhY2hlLmZiLm1tYXBfd2FfZmxhZ3M7DQo+ID4gPiA+ ICsNCj4gPiA+ID4gKwlyZXR1cm4gKGZsYWdzICYgRkJfTU1BUF9XQV9DUFUpICYmICEoZmxhZ3Mg Jg0KPiA+ID4gPiBGQl9NTUFQX1dBX0RJU0FCTEUpOw0KPiA+ID4gPiAgfQ0KPiA+ID4gPiAgDQo+ ID4gPiA+ICBzdGF0aWMgYm9vbCBpbnRlbF9mYmNfY2FuX2FjdGl2YXRlKHN0cnVjdCBpbnRlbF9j cnRjICpjcnRjKQ0KPiA+ID4gPiBAQCAtODE2LDYgKzgyNCwxMSBAQCBzdGF0aWMgYm9vbCBpbnRl bF9mYmNfY2FuX2FjdGl2YXRlKHN0cnVjdA0KPiA+ID4gPiBpbnRlbF9jcnRjICpjcnRjKQ0KPiA+ ID4gPiAgCQlyZXR1cm4gZmFsc2U7DQo+ID4gPiA+ICAJfQ0KPiA+ID4gPiAgDQo+ID4gPiA+ICsJ aWYgKG5lZWRfbW1hcF9kaXNhYmxlX3dvcmthcm91bmQoZmJjKSkgew0KPiA+ID4gPiArCQlmYmMt Pm5vX2ZiY19yZWFzb24gPSAiRkIgaXMgQ1BVIG9yIFdDDQo+ID4gPiA+IG1tYXBwZWQiOw0KPiA+ ID4gPiArCQlyZXR1cm4gZmFsc2U7DQo+ID4gPiA+ICsJfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICAJ cmV0dXJuIHRydWU7DQo+ID4gPiA+ICB9DQo+ID4gPiA+ICANCj4gPiA+ID4gQEAgLTEwMDgsNiAr MTAyMSwyNiBAQCBvdXQ6DQo+ID4gPiA+ICAJbXV0ZXhfdW5sb2NrKCZmYmMtPmxvY2spOw0KPiA+ ID4gPiAgfQ0KPiA+ID4gPiAgDQo+ID4gPiA+ICt2b2lkIGludGVsX2ZiY19tbWFwX3dhKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwNCj4gPiA+ID4gKwkJICAgICAgIHVuc2lnbmVk IGludCBmcm9udGJ1ZmZlcl9iaXRzLCB1bnNpZ25lZA0KPiA+ID4gPiBpbnQNCj4gPiA+ID4gZmxh Z3MpDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsJc3RydWN0IGludGVsX2ZiYyAqZmJjID0gJmRldl9w cml2LT5mYmM7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlpZiAoIWZiY19zdXBwb3J0ZWQoZGV2X3By aXYpKQ0KPiA+ID4gPiArCQlyZXR1cm47DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwltdXRleF9sb2Nr KCZmYmMtPmxvY2spOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJaWYgKGZiYy0+ZW5hYmxlZCAmJg0K PiA+ID4gPiArCSAgICAoaW50ZWxfZmJjX2dldF9mcm9udGJ1ZmZlcl9iaXQoZmJjKSAmDQo+ID4g PiA+IGZyb250YnVmZmVyX2JpdHMpKSB7DQo+ID4gPiA+ICsJCWZiYy0+c3RhdGVfY2FjaGUuZmIu bW1hcF93YV9mbGFncyA9IGZsYWdzOw0KPiA+ID4gPiArCQlpZiAobmVlZF9tbWFwX2Rpc2FibGVf d29ya2Fyb3VuZChmYmMpKQ0KPiA+ID4gPiArCQkJaW50ZWxfZmJjX2RlYWN0aXZhdGUoZGV2X3By aXYpOw0KPiA+ID4gPiArCX0NCj4gPiA+ID4gKw0KPiA+ID4gPiArCW11dGV4X3VubG9jaygmZmJj LT5sb2NrKTsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiAgLyoqDQo+ID4gPiA+ICAg KiBpbnRlbF9mYmNfY2hvb3NlX2NydGMgLSBzZWxlY3QgYSBDUlRDIHRvIGVuYWJsZSBGQkMgb24N Cj4gPiA+ID4gICAqIEBkZXZfcHJpdjogaTkxNSBkZXZpY2UgaW5zdGFuY2UNCj4gPiA+ID4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Zyb250YnVmZmVyLmMNCj4gPiA+ ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mcm9udGJ1ZmZlci5jDQo+ID4gPiA+IGlu ZGV4IGFjODUzNTcuLjhkOWIzMjcgMTAwNjQ0DQo+ID4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2Zyb250YnVmZmVyLmMNCj4gPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZnJvbnRidWZmZXIuYw0KPiA+ID4gPiBAQCAtMjQxLDMgKzI0MSwzNCBAQCB2 b2lkIGludGVsX2Zyb250YnVmZmVyX2ZsaXAoc3RydWN0DQo+ID4gPiA+IGRybV9kZXZpY2UNCj4g PiA+ID4gKmRldiwNCj4gPiA+ID4gIA0KPiA+ID4gPiAgCWludGVsX2Zyb250YnVmZmVyX2ZsdXNo KGRldiwgZnJvbnRidWZmZXJfYml0cywNCj4gPiA+ID4gT1JJR0lOX0ZMSVApOw0KPiA+ID4gPiAg fQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAqIGludGVsX2ZiX29ial9tbWFw X3dhIC0gbm90aWZpZXMgYWJvdXQgb2JqZWN0cyBiZWluZyBtbWFwcGVkDQo+ID4gPiA+ICsgKiBA b2JqOiBHRU0gb2JqZWN0IGJlaW5nIG1tYXBwZWQNCj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKiBU aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIHdoZW5ldmVyIGFuIG9iamVjdCBnZXRzIG1tYXBwZWQu DQo+ID4gPiA+IE5vdA0KPiA+ID4gPiBldmVyeSB1c2VyDQo+ID4gPiA+ICsgKiBzcGFjZSBhcHBs aWNhdGlvbiBmb2xsb3dzIHRoZSBwcm90b2NvbCBhc3N1bWVkIGJ5IHRoZQ0KPiA+ID4gPiBmcm9u dGJ1ZmZlciB0cmFja2luZw0KPiA+ID4gPiArICogc3Vic3lzdGVtIHdoZW4gaXQgd2FzIGNyZWF0 ZWQsIHNvIHRoaXMgbW1hcCBub3RpZnkgY2FsbGJhY2sNCj4gPiA+ID4gY2FuDQo+ID4gPiA+IGJl IHVzZWQgdG8NCj4gPiA+ID4gKyAqIGNvbXBsZXRlbHkgZGlzYWJsZSBmcm9udGJ1ZmZlciBmZWF0 dXJlcyBzdWNoIGFzIEZCQyBhbmQNCj4gPiA+ID4gUFNSLg0KPiA+ID4gPiBFdmVuIGlmIGF0IHNv bWUNCj4gPiA+ID4gKyAqIHBvaW50IHdlIGZpeCBldmVyIHVzZXIgc3BhY2UgYXBwbGljYXRpb24s IHRoZXJlJ3Mgc3RpbGwgdGhlDQo+ID4gPiA+IHBvc3NpYmlsaXR5IHRoYXQNCj4gPiA+ID4gKyAq IHRoZSB1c2VyIG1heSBoYXZlIGEgbmV3IEtlcm5lbCB3aXRoIHRoZSBvbGQgdXNlciBzcGFjZS4N Cj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKiBBbHNvIG5vdGljZSB0aGF0IHRoZXJlJ3Mgbm8gbXVu bWFwIEFQSSBiZWNhdXNlIHVzZXIgc3BhY2UNCj4gPiA+ID4gY2FsbHMNCj4gPiA+ID4gbXVubWFw KCkNCj4gPiA+ID4gKyAqIGRpcmVjdGx5LiBFdmVuIGlmIHdlIGhhZCwgaXQgcHJvYmFibHkgd291 bGRuJ3QgaGVscCBzaW5jZQ0KPiA+ID4gPiBtdW5tYXAoKSBjYWxscyBhcmUNCj4gPiA+ID4gKyAq IG5vdCBjb21tb24uDQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4gK3ZvaWQgaW50ZWxfZmJfb2JqX21t YXBfd2Eoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwNCj4gPiA+ID4gdW5zaWduZWQg aW50IGZsYWdzKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IG9iai0+YmFzZS5kZXYtDQo+ID4gPiA+ID4gZGV2X3ByaXZhdGU7DQo+ID4g PiA+ICsNCj4gPiA+ID4gKwlpZiAoIUlTX0dFTjkoZGV2X3ByaXYpKQ0KPiA+ID4gUGxlYXNlIG9u bHkgSVNfU0tZTEFLRSwgSSBkb24ndCB3YW50IHRvIGV4dGVuZCB0aGlzIHRvIGVpdGhlciBieHQN Cj4gPiA+IG9yDQo+ID4gPiBrYmwsDQo+ID4gPiBhbmQgYm90aCBhcmUgc3RpbGwgdW5kZXIgcHJl bGltX2h3X3N1cHBvcnQgYW5kIG5vdCB5ZXQgc2hpcHBpbmcsDQo+ID4gPiBpLmUuDQo+ID4gPiB3 ZQ0KPiA+ID4gY2FuIGJyZWFrIHRoZW0gOy0pDQo+ID4gDQo+ID4gTW1ta2F5Lg0KDQpJIHZvdGUg Zm9yIElOVEVMX0lORk8oZGV2KS0+Z2VuIDwgOS4uLiAgU2luY2Ugd2Ugb25seSBoYXZlIHRoZSBw cm9wZXINCmFwaSBpbiB1c2UgZm9yIGdlbjggYW5kIG9sZGVyLi4uDQoNCg0KPiA+IA0KPiA+ID4g DQo+ID4gPiBXcnQgdGhlIGltcGxlbWVudGF0aW9uOiBJIHRoaW5rIGl0IHdvdWxkIGJlIGdyZWF0 IHRvIGdldCBQU1Igb24NCj4gPiA+IGJvYXJkDQo+ID4gPiB0bw0KPiA+ID4gYXZvaWQgZHVwbGlj YXRpbmcgdGhlIGxvZ2ljLg0KPiA+IA0KPiA+IFRoZSBnb2FsIG9mIHRoaXMgcGF0Y2ggZ29pbmcg dGhyb3VnaCBpbnRlbF9mcm9udGJ1ZmZlci5jIGluc3RlYWQgb2YNCj4gPiBkaXJlY3RseSB0byBp bnRlbF9mYmMuYyBpcyBleGFjdGx5IHRvIGFsbG93IGZvciBQU1IgdG8gZG8gc29tZXRoaW5nDQo+ ID4gc2ltaWxhci4NCj4gPiANCj4gPiANCj4gPiA+ICBPbmUgb3B0aW9uIHRoYXQgbWlnaHQgd291 bGQgYmUgdG8gY3JlYXRlIGFuDQo+ID4gPiBpbnZsaWRhdGUgb24gc2tsIHdpdGggT1JJR0lOX01N QVBfV0EsIGFuZCBhcyBsb25nIGFzIHRoYXQncyBpbg0KPiA+ID4gZWZmZWN0DQo+ID4gPiAodW50 aWwgdGhlIGZpcnN0IHN3X2ZpbmlzaCBvciBkaXJ0eV9mYikgdGhlIGZyb250YnVmZmVyIHRyYWNr aW5nDQo+ID4gPiBjb2RlDQo+ID4gPiBpdHNlbGYgd291bGQgZmlsdGVyIGFsbCBmbHVzaGVzLg0K PiA+IA0KPiA+IFRoYXQncyBhbiBub24tdHJpdmlhbCBkaXN0b3J0aW9uIG9mIHRoZSB0cml2aWFs IGludmFsaWRhdGUvZmx1c2gNCj4gPiBBUEkuIEkNCj4gPiBwcmVmZXIgaGF2aW5nIGEgc3BlY2lh bCBjb2RlcGF0aCBmb3IgdGhpcyBzcGVjaWFsIGNhc2UgaW5zdGVhZCBvZg0KPiA+IGFkZGluZyBz ZWNvbmQgbWVhbmluZ3MgdG8gZmx1c2gvaW52YWxpZGF0ZS4NCj4gPiANCj4gPiBCZXNpZGVzLCBl dmVuIHdpdGggdGhlIGludmFsaWRhdGUvZmx1c2ggQVBJIGJlaW5nIHNpbXBsZSwgbG9vayBhdA0K PiA+IGhvdw0KPiA+IG1hbnkgdGltZXMgd2UgYWxyZWFkeSB0d2Vha2VkL2Jyb2tlL2ZpeGVkIHRo b3NlIGZ1bmN0aW9ucywgYm90aCBmb3INCj4gPiBQU1INCj4gPiBhbmQgRkJDLg0KPiANCj4gSG0g Z29vZCBwb2ludC4gSXQgd291bGQgaW5kZWVkIG5vdCBuZWF0bHkgZml0IGludG8gdGhlIGV4aXN0 aW5nDQo+IGludmFsaWRhdGUvZmx1c2ggc2NoZW1lICh3aGljaCBhc3N1bWVzIHRoYXQgdGhlcmUn cyBvbmx5IGV2ZXIgb25lDQo+IHRoaW5nDQo+IHRoYXQgY2FuIGFjY2VzcyBhIGJ1ZmZlciwgbm90 IGEgcGVybWFuZW50IG1tYXAgdGhhdCBjYW4gYWx3YXlzIGJlDQo+IHVzZWQpLg0KPiBBZ3JlZWQg dGhhdCBoYXZpbmcgYSBzcGVjaWFsIGNhc2UgbWFrZXMgc2Vuc2UuDQoNCkhtLi4uLiBJIGJlbGll dmUgSSBsaWtlIHRoZSBPUklHSU5fTU1BUF9XQSBpZGVhIG1vcmUuDQoNCkknbSBhZnJhaWQgdGhh dCBJJ20gYWxyZWFkeSBjaGFuZ2luZyB0aGUgb3JpZ2luYWwgaW52YWxpZGF0ZS9mbHVzaCBBUEkN CmhlcmUgb24gbXkgc2lkZSBmb3IgUFNSIG9uIFZMVi4gSSdtIHBsYW5pbmcgdG8gaW50cm9kdWNl IHRoZQ0KT1JJR0lOX1ZCTEFOSyB0byBiZSBhYmxlIHRvIHRyaWdnZXIgcHNyIGV4aXQgb24gdmJs YW5rIHdhaXRzIGluIHZsdi4uLg0KYW5kIG9ubHkgZmx1c2ggdGhvc2UgYml0cyB3aGVuIHdlIGhh dmUgbm8gdmJsYW5rIHdhaXRpbmcuDQoNCkFub3RoZXIgdG90YWwgZGlmZmVyZW50IHdheSB3b3Vs ZCBiZSB0byBhZGQgYSBydW50aW1lIHBzciBkb21haW5zIHdpdGgNCnZibGFuayBkb21haW4sIGJ1 dCBpdCB3b3VsZCBiZSBkaWZmaWN1bHQgdG8gc3luYyB0aGUgcHNyIGJ1c3kgYml0cy4uLg0Kc28g UFNSIHdvdWxkIG5lZWQgdG8gY29udHJvbCB0aGUgb3JpZ2luLg0KDQpTbywgdGhlIHNhbWUgZGlz dG9ydGlvbiAodXBkYXRlPykgb2YgdGhlIGZyb250YnVmZmVyIHRyYWNraW5nIGJpdHMNCmNvdWxk IGJlIHVzZWQgZm9yIHRoaXMgY2FzZSBoZXJlIHNvIEkgYmVsaWV2ZSB0aGUgYW1vdW50IG9mIHBl cmlvZA0KcG93ZXIgc2F2aW5ncyBmZWF0dXJlIGtlZXBzIGRpc2FibGVkIHdvdWxkIGJlIHJlZHVj ZWQsIGltcHJvdmluZyB0aGUNCnBvd2VyIHNhdmluZ3MuDQoNCj4gDQo+ID4gPiAgZmJjIGNvdWxk IHRoZW4gdXNlIE9SSUdJTl9NTUFQX1dBDQo+ID4gPiBpbnZhbGlkYXRlIHRvIHBlcm1hbmVudGx5 IGRpc2FibGUgKHdlbGwsIG5vdCByZS1lbmFibGUgYWZ0ZXINCj4gPiA+IGZsaXApDQo+ID4gPiB1 bnRpbA0KPiA+ID4gaXQgc2VlcyBhIGZsdXNoLiBBbmQgUFNSIHdvdWxkIEp1c3QgV29yayAoSSBo b3BlKS4NCj4gPiANCj4gPiBJIHRoaW5rIGFueSBQU1IgZml4ZXMgcmVsYXRlZCB0byB0aGlzIHNo b3VsZCBiZSBzZXBhcmF0ZSBwYXRjaGVzLiBJDQo+ID4gaGF2ZSB0byBjb25mZXNzIEkndmUganVz dCBiZWVuIHN0dWR5aW5nIHRoZSBGQkMgcGFydCBvZiB0aGUNCj4gPiBwcm9ibGVtLCBzbw0KPiA+ IEkgd2FzIHdhaXRpbmcgZm9yIFJvZHJpZ28ncyBvcGluaW9ucyBoZXJlIGJlZm9yZSBhbnkgY29u Y2x1c2lvbnMuDQo+ID4gQW55d2F5LCB3ZSBjYW4gYWx3YXlzIGNoYW5nZSB0aGlzIGNvZGUgKGlu IHRoaXMgcGF0Y2ggb3IgbGF0ZXIpIHRvDQo+ID4gYmV0dGVyIHN1aXQgUFNSLg0KDQpJIGJlbGll dmUgZm9yIFBTUiBpcyBleGFjdGx5IHRoZSBzYW1lIGhlcmUuLi4gSSB3YXMgd2FpdGluZyB5b3Vy DQpjb25jbHVzaW9uIHNvIEkgY291bGQgcmVwbGljYXRlIHRoYXQgZm9yIFBTUiBzb21laG93Lg0K DQo+IA0KPiBJJ2QgbGlrZSB0byBhdCBsZWFzdCBoYXZlIGFuIGFjayBmcm9tIFJyb2RpZ28sIGV2 ZW4gYmV0dGVyIGlmIGhlIGNhbg0KPiBoYWNrDQo+IHVwIHNvbWV0aGluZyBxdWlja2x5LiBCdXQg eWVhaCBpdCdzIGNvZGUsIHdlIGNhbiBjaGFuZ2UgaXQgYWdhaW4gOy0pDQoNCkkgcHJlZmVyIHRo ZSBzb2x1dGlvbiBvbiB0aGUgZnJvbnRidWZmZXIgdHJhY2tpbmcgc2luY2UgdGhpcyBpcyBub3Qg YW4NCmZiYyBpc3N1ZSBvbmx5LCBidXQgSSBkb24ndCB3YW50IHRvIGJsb2NrIGhlcmUuIEkgYWdy ZWUgaXQgd2UgY2FuDQphbHdheXMgY2hhbmdlIGl0Lg0KDQpBY2tlZC1ieTogUm9kcmlnbyBWaXZp IDxyb2RyaWdvLnZpdmlAaW50ZWwuY29tPg0KDQoNCj4gLURhbmllbApfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0Cklu dGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK