From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peter Antoine Subject: Re: [PATCH v4] drm/i915 : Added Programming of the MOCS Date: Wed, 1 Jul 2015 14:53:02 +0100 (BST) Message-ID: References: <1434554362-22384-1-git-send-email-peter.antoine@intel.com> <87ioact03d.fsf@riseup.net> <878ub13zdi.fsf@riseup.net> <874mlp3vtc.fsf@riseup.net> <87r3os2fl8.fsf@riseup.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id F228D6E185 for ; Wed, 1 Jul 2015 06:53:05 -0700 (PDT) In-Reply-To: <87r3os2fl8.fsf@riseup.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Francisco Jerez Cc: intel-gfx@lists.freedesktop.org, Jesse Barnes , Ben Widawsky List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCAxIEp1bCAyMDE1LCBGcmFuY2lzY28gSmVyZXogd3JvdGU6Cgo+IFBldGVyIEFudG9p bmUgPHBldGVyLmFudG9pbmVAaW50ZWwuY29tPiB3cml0ZXM6Cj4KPj4gT24gVHVlLCAzMCBKdW4g MjAxNSwgRnJhbmNpc2NvIEplcmV6IHdyb3RlOgo+Pgo+Pj4gRnJhbmNpc2NvIEplcmV6IDxjdXJy b2plcmV6QHJpc2V1cC5uZXQ+IHdyaXRlczoKPj4+Cj4+Pj4gUGV0ZXIgQW50b2luZSA8cGV0ZXIu YW50b2luZUBpbnRlbC5jb20+IHdyaXRlczoKPj4+Pgo+Pj4+PiBPbiBNb24sIDI5IEp1biAyMDE1 LCBQZXRlciBBbnRvaW5lIHdyb3RlOgo+Pj4+Pgo+Pj4+Pj4gT24gVGh1LCAyNSBKdW4gMjAxNSwg RnJhbmNpc2NvIEplcmV6IHdyb3RlOgo+Pj4+Pj4KPj4+Pj4+PiBQZXRlciBBbnRvaW5lIDxwZXRl ci5hbnRvaW5lQGludGVsLmNvbT4gd3JpdGVzOgo+Pj4+Pj4+Cj4+Pj4+Pj4+IFRoaXMgY2hhbmdl IGFkZHMgdGhlIHByb2dyYW1taW5nIG9mIHRoZSBNT0NTIHJlZ2lzdGVycyB0byB0aGUgZ2VuIDkr Cj4+Pj4+Pj4+IHBsYXRmb3Jtcy4gVGhpcyBjaGFuZ2Ugc2V0IHByb2dyYW1zIHRoZSBNT0NTIHJl Z2lzdGVyIHZhbHVlcyB0byBhIHNldAo+Pj4+Pj4+PiBvZiB2YWx1ZXMgdGhhdCBhcmUgZGVmaW5l ZCB0byBiZSBvcHRpbWFsLgo+Pj4+Pj4+Pgo+Pj4+Pj4+PiBJdCBjcmVhdGVzIGEgZml4ZWQgcmVn aXN0ZXIgc2V0IHRoYXQgaXMgcHJvZ3JhbW1lZCBhY3Jvc3MgdGhlIGRpZmZlcmVudAo+Pj4+Pj4+ PiBlbmdpbmVzIHNvIHRoYXQgYWxsIGVuZ2luZXMgaGF2ZSB0aGUgc2FtZSB0YWJsZS4gVGhpcyBp cyBkb25lIGFzIHRoZQo+Pj4+Pj4+PiBtYWluIFJDUyBjb250ZXh0IG9ubHkgaG9sZHMgdGhlIHJl Z2lzdGVycyBmb3IgaXRzZWxmIGFuZCB0aGUgc2hhcmVkCj4+Pj4+Pj4+IEwzIHZhbHVlcy4gQnkg dHJ5aW5nIHRvIGtlZXAgdGhlIHJlZ2lzdGVycyBjb25zaXN0ZW50IGFjcm9zcyB0aGUKPj4+Pj4+ Pj4gZGlmZmVyZW50IGVuZ2luZXMgaXQgc2hvdWxkIG1ha2UgdGhlIHByb2dyYW1taW5nIGZvciB0 aGUgcmVnaXN0ZXJzCj4+Pj4+Pj4+IGNvbnNpc3RlbnQuCj4+Pj4+Pj4+Cj4+Pj4+Pj4+IHYyOgo+ Pj4+Pj4+PiAtJ3N0YXRpYyBjb25zdCcgZm9yIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBz dHlsZSBjaGFuZ2VzLihNYXR0Cj4+Pj4+PiBUdXJuZXIpCj4+Pj4+Pj4+IHYzOgo+Pj4+Pj4+PiAt IE1ha2UgdGhlIHRhYmxlcyAic2xpZ2h0bHkiIG1vcmUgcmVhZGFibGUuIChEYW1pZW4gTGVzcGlh dSkKPj4+Pj4+Pj4gLSBVcGRhdGVkIHRhYmxlcyBmaXggcGVyZm9ybWFuY2UgcmVncmVzc2lvbi4K Pj4+Pj4+Pj4gdjQ6Cj4+Pj4+Pj4+IC0gQ29kZSBmb3JtYXR0aW5nLiAoQ2hyaXMgV2lsc29uKQo+ Pj4+Pj4+PiAtIHJlLXByaXZhdGlzZWQgbW9jcyBjb2RlLiAoRGFuaWVsIFZldHRlcikKPj4+Pj4+ Pj4KPj4+Pj4+Pj4gU2lnbmVkLW9mZi1ieTogUGV0ZXIgQW50b2luZSA8cGV0ZXIuYW50b2luZUBp bnRlbC5jb20+Cj4+Pj4+Pj4+IC0tLQo+Pj4+Pj4+PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFr ZWZpbGUgICAgIHwgICAxICsKPj4+Pj4+Pj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVn LmggICB8ICAgOSArCj4+Pj4+Pj4+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYyAg fCAgMTAgKy0KPj4+Pj4+Pj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5oICB8ICAg NCArCj4+Pj4+Pj4+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2NzLmMgfCAzNzMKPj4+ Pj4+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4+Pj4+Pj4+ICBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2NzLmggfCAgNjQgKysrKysrKwo+Pj4+Pj4+PiAgNiBm aWxlcyBjaGFuZ2VkLCA0NjAgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQo+Pj4+Pj4+PiAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vY3MuYwo+Pj4+ Pj4+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vY3Mu aAo+Pj4+Pj4+Pgo+Pj4+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFr ZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+Pj4+Pj4+PiBpbmRleCBiN2Rk ZjQ4Li5jNzgxZTE5IDEwMDY0NAo+Pj4+Pj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9N YWtlZmlsZQo+Pj4+Pj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+Pj4+ Pj4+PiBAQCAtMzUsNiArMzUsNyBAQCBpOTE1LXkgKz0gaTkxNV9jbWRfcGFyc2VyLm8gXAo+Pj4+ Pj4+PiAgCSAgaTkxNV9pcnEubyBcCj4+Pj4+Pj4+ICAJICBpOTE1X3RyYWNlX3BvaW50cy5vIFwK Pj4+Pj4+Pj4gIAkgIGludGVsX2xyYy5vIFwKPj4+Pj4+Pj4gKwkgIGludGVsX21vY3MubyBcCj4+ Pj4+Pj4+ICAJICBpbnRlbF9yaW5nYnVmZmVyLm8gXAo+Pj4+Pj4+PiAgCSAgaW50ZWxfdW5jb3Jl Lm8KPj4+Pj4+Pj4KPj4+Pj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfcmVnLmgKPj4+Pj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+Pj4+Pj4+ PiBpbmRleCA3MjEzMjI0Li4zYTQzNWI1IDEwMDY0NAo+Pj4+Pj4+PiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3JlZy5oCj4+Pj4+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfcmVnLmgKPj4+Pj4+Pj4gQEAgLTc4MjksNCArNzgyOSwxMyBAQCBlbnVtIHNrbF9kaXNw X3Bvd2VyX3dlbGxzIHsKPj4+Pj4+Pj4gICNkZWZpbmUgX1BBTEVUVEVfQSAoZGV2X3ByaXYtPmlu Zm8uZGlzcGxheV9tbWlvX29mZnNldCArIDB4YTAwMCkKPj4+Pj4+Pj4gICNkZWZpbmUgX1BBTEVU VEVfQiAoZGV2X3ByaXYtPmluZm8uZGlzcGxheV9tbWlvX29mZnNldCArIDB4YTgwMCkKPj4+Pj4+ Pj4KPj4+Pj4+Pj4gKy8qIE1PQ1MgKE1lbW9yeSBPYmplY3QgQ29udHJvbCBTdGF0ZSkgcmVnaXN0 ZXJzICovCj4+Pj4+Pj4+ICsjZGVmaW5lIEdFTjlfTE5DRkNNT0NTMAkJKDB4QjAyMCkJLyogTDMg Q2FjaGUgQ29udHJvbAo+Pj4+Pj4gYmFzZSAqLwo+Pj4+Pj4+PiArCj4+Pj4+Pj4+ICsjZGVmaW5l IEdFTjlfR0ZYX01PQ1NfMAkJKDB4YzgwMCkJLyogR3JhcGhpY3MgTU9DUyBiYXNlCj4+Pj4+PiBy ZWdpc3RlciovCj4+Pj4+Pj4+ICsjZGVmaW5lIEdFTjlfTUZYMF9NT0NTXzAJKDB4YzkwMCkJLyog TWVkaWEgMCBNT0NTIGJhc2UKPj4+Pj4+IHJlZ2lzdGVyKi8KPj4+Pj4+Pj4gKyNkZWZpbmUgR0VO OV9NRlgxX01PQ1NfMAkoMHhjQTAwKQkvKiBNZWRpYSAxIE1PQ1MgYmFzZQo+Pj4+Pj4gcmVnaXN0 ZXIqLwo+Pj4+Pj4+PiArI2RlZmluZSBHRU45X1ZFQk9YX01PQ1NfMAkoMHhjQjAwKQkvKiBWaWRl byBNT0NTIGJhc2UgcmVnaXN0ZXIqLwo+Pj4+Pj4+PiArI2RlZmluZSBHRU45X0JMVF9NT0NTXzAJ CSgweGNjMDApCS8qIEJsaXR0ZXIgTU9DUyBiYXNlCj4+Pj4+PiByZWdpc3RlciovCj4+Pj4+Pj4+ ICsKPj4+Pj4+Pj4gICNlbmRpZiAvKiBfSTkxNV9SRUdfSF8gKi8KPj4+Pj4+Pj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4+Pj4+PiBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2xyYy5jCj4+Pj4+Pj4+IGluZGV4IDlmNTQ4NWQuLjczYjkxOWQgMTAw NjQ0Cj4+Pj4+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4+Pj4+ Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4+Pj4+Pj4+IEBAIC0x MzUsNiArMTM1LDcgQEAKPj4+Pj4+Pj4gICNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+Pj4+Pj4+PiAg I2luY2x1ZGUgPGRybS9pOTE1X2RybS5oPgo+Pj4+Pj4+PiAgI2luY2x1ZGUgImk5MTVfZHJ2Lmgi Cj4+Pj4+Pj4+ICsjaW5jbHVkZSAiaW50ZWxfbW9jcy5oIgo+Pj4+Pj4+Pgo+Pj4+Pj4+PiAgI2Rl ZmluZSBHRU45X0xSX0NPTlRFWFRfUkVOREVSX1NJWkUgKDIyICogUEFHRV9TSVpFKQo+Pj4+Pj4+ PiAgI2RlZmluZSBHRU44X0xSX0NPTlRFWFRfUkVOREVSX1NJWkUgKDIwICogUEFHRV9TSVpFKQo+ Pj4+Pj4+PiBAQCAtNzk2LDcgKzc5Nyw3IEBAIHN0YXRpYyBpbnQgbG9naWNhbF9yaW5nX3ByZXBh cmUoc3RydWN0Cj4+Pj4+PiBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmLAo+Pj4+Pj4+PiAgICoK Pj4+Pj4+Pj4gICAqIFJldHVybjogbm9uLXplcm8gaWYgdGhlIHJpbmdidWZmZXIgaXMgbm90IHJl YWR5IHRvIGJlIHdyaXR0ZW4gdG8uCj4+Pj4+Pj4+ICAgKi8KPj4+Pj4+Pj4gLXN0YXRpYyBpbnQg aW50ZWxfbG9naWNhbF9yaW5nX2JlZ2luKHN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVm LAo+Pj4+Pj4+PiAraW50IGludGVsX2xvZ2ljYWxfcmluZ19iZWdpbihzdHJ1Y3QgaW50ZWxfcmlu Z2J1ZmZlciAqcmluZ2J1ZiwKPj4+Pj4+Pj4gIAkJCQkgICAgc3RydWN0IGludGVsX2NvbnRleHQg KmN0eCwgaW50Cj4+Pj4+PiBudW1fZHdvcmRzKQo+Pj4+Pj4+PiAgewo+Pj4+Pj4+PiAgCXN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcgPSByaW5nYnVmLT5yaW5nOwo+Pj4+Pj4+PiBAQCAtMTM3 OSw2ICsxMzgwLDEzIEBAIHN0YXRpYyBpbnQgZ2VuOF9pbml0X3Jjc19jb250ZXh0KHN0cnVjdAo+ Pj4+Pj4gaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+Pj4+Pj4+PiAgCWlmIChyZXQpCj4+Pj4+Pj4+ ICAJCXJldHVybiByZXQ7Cj4+Pj4+Pj4+Cj4+Pj4+Pj4+ICsJLyoKPj4+Pj4+Pj4gKwkgKiBGYWls aW5nIHRvIHByb2dyYW0gdGhlIE1PQ1MgaXMgbm9uLWZhdGFsLlRoZSBzeXN0ZW0gd2lsbCBub3QK Pj4+Pj4+Pj4gKwkgKiBydW4gYXQgcGVhayBwZXJmb3JtYW5jZS4gU28gZ2VuZXJhdGUgYSB3YXJu aW5nIGFuZCBjYXJyeSBvbi4KPj4+Pj4+Pj4gKwkgKi8KPj4+Pj4+Pj4gKwlpZiAoZ2VuOV9wcm9n cmFtX21vY3MocmluZywgY3R4KSAhPSAwKQo+Pj4+Pj4+PiArCQlEUk1fRVJST1IoIk1PQ1MgZmFp bGVkIHRvIHByb2dyYW06IGV4cGVjdCBwZXJmb3JtYW5jZQo+Pj4+Pj4gaXNzdWVzLiIpOwo+Pj4+ Pj4+PiArCj4+Pj4+Pj4+ICAJcmV0dXJuIGludGVsX2xyX2NvbnRleHRfcmVuZGVyX3N0YXRlX2lu aXQocmluZywgY3R4KTsKPj4+Pj4+Pj4gIH0KPj4+Pj4+Pj4KPj4+Pj4+Pj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5oCj4+Pj4+PiBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2xyYy5oCj4+Pj4+Pj4+IGluZGV4IDA0ZDNhNmQuLmRiYmQ2YWYgMTAwNjQ0 Cj4+Pj4+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5oCj4+Pj4+Pj4+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5oCj4+Pj4+Pj4+IEBAIC00NCw2 ICs0NCwxMCBAQCBpbnQgaW50ZWxfbG9naWNhbF9yaW5nc19pbml0KHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpOwo+Pj4+Pj4+Pgo+Pj4+Pj4+PiAgaW50IGxvZ2ljYWxfcmluZ19mbHVzaF9hbGxfY2Fj aGVzKHN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmLAo+Pj4+Pj4+PiAgCQkJCSAgc3Ry dWN0IGludGVsX2NvbnRleHQgKmN0eCk7Cj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4gK2ludCBpbnRlbF9s b2dpY2FsX3JpbmdfYmVnaW4oc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYsCj4+Pj4+ Pj4+ICsJCQkJICAgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjdHgsIGludAo+Pj4+Pj4gbnVtX2R3 b3Jkcyk7Cj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4gIC8qKgo+Pj4+Pj4+PiAgICogaW50ZWxfbG9naWNh bF9yaW5nX2FkdmFuY2UoKSAtIGFkdmFuY2UgdGhlIHJpbmdidWZmZXIgdGFpbAo+Pj4+Pj4+PiAg ICogQHJpbmdidWY6IFJpbmdidWZmZXIgdG8gYWR2YW5jZS4KPj4+Pj4+Pj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vY3MuYwo+Pj4+Pj4gYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9tb2NzLmMKPj4+Pj4+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4+Pj4+ Pj4gaW5kZXggMDAwMDAwMC4uN2MwOWU2Nwo+Pj4+Pj4+PiAtLS0gL2Rldi9udWxsCj4+Pj4+Pj4+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vY3MuYwo+Pj4+Pj4+PiBAQCAtMCww ICsxLDM3MyBAQAo+Pj4+Pj4+PiArLyoKPj4+Pj4+Pj4gKyAqIENvcHlyaWdodCAoYykgMjAxNSBJ bnRlbCBDb3Jwb3JhdGlvbgo+Pj4+Pj4+PiArICoKPj4+Pj4+Pj4gKyAqIFBlcm1pc3Npb24gaXMg aGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwo+ Pj4+Pj4gYQo+Pj4+Pj4+PiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVk IGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQo+Pj4+Pj4gIlNvZnR3YXJlIiksCj4+Pj4+Pj4+ICsg KiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcg d2l0aG91dAo+Pj4+Pj4gbGltaXRhdGlvbgo+Pj4+Pj4+PiArICogdGhlIHJpZ2h0cyB0byB1c2Us IGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsCj4+Pj4+PiBzdWJsaWNl bnNlLAo+Pj4+Pj4+PiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4+Pj4+Pj4+ICsgKiBTb2Z0d2FyZSBpcyBm dXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAq Cj4+Pj4+Pj4+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz aW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQo+Pj4+Pj4gbmV4dAo+Pj4+Pj4+PiArICogcGFyYWdy YXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRp b25zIG9mCj4+Pj4+PiB0aGUKPj4+Pj4+Pj4gKyAqIFNvZnR3YXJlLgo+Pj4+Pj4+PiArICoKPj4+ Pj4+Pj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJB TlRZIE9GIEFOWSBLSU5ELAo+Pj4+Pj4gRVhQUkVTUyBPUgo+Pj4+Pj4+PiArICogSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgo+Pj4+Pj4gTUVS Q0hBTlRBQklMSVRZLAo+Pj4+Pj4+PiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UCj4+Pj4+PiBTSEFMTAo+Pj4+Pj4+ PiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkg Q0xBSU0sIERBTUFHRVMgT1IKPj4+Pj4+IE9USEVSCj4+Pj4+Pj4+ICsgKiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKPj4+Pj4+ IEFSSVNJTkcgRlJPTSwKPj4+Pj4+Pj4gKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEgg VEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPj4+Pj4+IElOIFRIRQo+ Pj4+Pj4+PiArICogU09GVFdBUkUuCj4+Pj4+Pj4+ICsgKgo+Pj4+Pj4+PiArICogQXV0aG9yczoK Pj4+Pj4+Pj4gKyAqICAgIFBldGVyIEFudG9pbmUgPHBldGVyLmFudG9pbmVAaW50ZWwuY29tPgo+ Pj4+Pj4+PiArICovCj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4gKyNpbmNsdWRlICJpbnRlbF9tb2NzLmgi Cj4+Pj4+Pj4+ICsjaW5jbHVkZSAiaW50ZWxfbHJjLmgiCj4+Pj4+Pj4+ICsjaW5jbHVkZSAiaW50 ZWxfcmluZ2J1ZmZlci5oIgo+Pj4+Pj4+PiArCj4+Pj4+Pj4+ICsvKiBzdHJ1Y3R1cmVzIHJlcXVp cmVkICovCj4+Pj4+Pj4+ICtzdHJ1Y3QgZHJtX2k5MTVfbW9jc19lbnRyeSB7Cj4+Pj4+Pj4+ICsJ dTMyCWNvbnRyb2xfdmFsdWU7Cj4+Pj4+Pj4+ICsJdTE2CWwzY2NfdmFsdWU7Cj4+Pj4+Pj4+ICt9 Owo+Pj4+Pj4+PiArCj4+Pj4+Pj4+ICtzdHJ1Y3QgZHJtX2k5MTVfbW9jc190YWJsZSB7Cj4+Pj4+ Pj4+ICsJdTMyCQkJCQlzaXplOwo+Pj4+Pj4+PiArCWNvbnN0IHN0cnVjdCBkcm1faTkxNV9tb2Nz X2VudHJ5CSp0YWJsZTsKPj4+Pj4+Pj4gK307Cj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4gKy8qIERlZmlu ZXMgZm9yIHRoZSB0YWJsZXMgKFhYWF9NT0NTXzAgLSBYWFhfTU9DU182MykgKi8KPj4+Pj4+Pj4g KyNkZWZpbmUJTU9DU19DQUNIRUFCSUxJVFkodmFsdWUpCSh2YWx1ZSA8PCAwKQo+Pj4+Pj4+PiAr I2RlZmluZQlNT0NTX1RHVF9DQUNIRSh2YWx1ZSkJCSh2YWx1ZSA8PCAyKQo+Pj4+Pj4+PiArI2Rl ZmluZQlNT0NTX0xSVU0odmFsdWUpCQkodmFsdWUgPDwgNCkKPj4+Pj4+Pj4gKyNkZWZpbmUJTU9D U19BT00odmFsdWUpCQkJKHZhbHVlIDw8IDYpCj4+Pj4+Pj4+ICsjZGVmaW5lCU1PQ1NfTEVDQ19F U0ModmFsdWUpCQkodmFsdWUgPDwgNykKPj4+Pj4+Pj4gKyNkZWZpbmUJTU9DU19MRUNDX1NDQyh2 YWx1ZSkJCSh2YWx1ZSA8PCA4KQo+Pj4+Pj4+PiArI2RlZmluZQlNT0NfUEZNKHZhbHVlKQkJCSh2 YWx1ZSA8PCAxMSkKPj4+Pj4+Pj4gKyNkZWZpbmUJTU9DU19TQ0YodmFsdWUpCQkJKHZhbHVlIDw8 IDE0KQo+Pj4+Pj4+PiArCj4+Pj4+Pj4+ICsvKiBEZWZpbmVzIGZvciB0aGUgdGFibGVzIChMTkNG TU9DUzAgLSBMTkNGTU9DUzMxKSAtIHR3byBlbnRyaWVzIHBlciB3b3JkCj4+Pj4+PiAqLwo+Pj4+ Pj4+PiArI2RlZmluZQlNT0NTX0VTQyh2YWx1ZSkJCQkodmFsdWUgPDwgMCkKPj4+Pj4+Pj4gKyNk ZWZpbmUJTU9DU19TQ0ModmFsdWUpCQkJKHZhbHVlIDw8IDEpCj4+Pj4+Pj4+ICsjZGVmaW5lCU1P Q1NfTDNfQ0FDSEVBQklMSVRZKHZhbHVlKQkodmFsdWUgPDwgNCkKPj4+Pj4+Pj4gKwo+Pj4+Pj4+ PiArLyogSGVscGVyIGRlZmluZXMgKi8KPj4+Pj4+Pj4gKyNkZWZpbmUgR0VOOV9OVU1fTU9DU19S SU5HUwkoNSkJLyogTnVtYmVyIG9mIG1vY3MgZW5naW5lcyB0byBwcm9ncmFtCj4+Pj4+PiAqLwo+ Pj4+Pj4+PiArI2RlZmluZSBHRU45X05VTV9NT0NTX0VOVFJJRVMJKDYzKQkvKiA2MyBvdXQgb2Yg NjQgLSA2NCBpcyByc3ZyZAo+Pj4+Pj4gKi8KPj4+Pj4+Pj4gKwo+Pj4+Pj4+PiArLyogRURSQU0g Q2FjaGluZyBvcHRpb25zICovCj4+Pj4+Pj4+ICsjZGVmaW5lIEVEUkFNX1BBR0VUQUJMRQkJKDAp Cj4+Pj4+Pj4+ICsjZGVmaW5lIEVEUkFNX1VDCQkoMSkKPj4+Pj4+Pj4gKyNkZWZpbmUgRURSQU1f UkVTRVJWRUQJCSgyKQo+Pj4+Pj4+Cj4+Pj4+Pj4gQWNjb3JkaW5nIHRvIHRoZSBCU3BlYyB0aGlz IGlzIFdUIHJhdGhlciB0aGFuIHJlc2VydmVkP2EKPj4+Pj4+IEp1c3QgY2hlY2tlZCB0aGUgQnNw ZWMgYW5kIHlvdSBhcmUgY29ycmVjdCwgY2hhbmdpbmcgdGhlIHRleHQuCj4+Pj4+PiBBcyB3ZWxs IGFzIGZvciB0aGUgaXRlbXMgYmVsb3cuCj4+Pj4+IEp1c3QgdG8gYWRkIC0gSSB3YXMgbG9va2lu ZyBhdCB0aGUgd3JvbmcgZ2VuLgo+Pj4+Pj4+Cj4+Pj4+Pj4+ICsjZGVmaW5lIEVEUkFNX1dCCQko MykKPj4+Pj4+Pj4gKwo+Pj4+Pj4+PiArLyogTDMgQ2FjaGluZyBvcHRpb25zICovCj4+Pj4+Pj4+ ICsjZGVmaW5lIEwzX0RJUkVDVAkJKDApCj4+Pj4+Pj4+ICsjZGVmaW5lIEwzX1VDCQkJKDEpCj4+ Pj4+Pj4+ICsjZGVmaW5lIEwzX1JFU0VSVkVECQkoMikKPj4+Pj4+Pj4gKyNkZWZpbmUgTDNfV0IJ CQkoMykKPj4+Pj4+Pj4gKwo+Pj4+Pj4+PiArLyogdGFyZ2V0IGNhY2hlICovCj4+Pj4+Pj4+ICsj ZGVmaW5lIEVMTEMJCQkoMCkKPj4+Pj4+Pgo+Pj4+Pj4+IEJTcGVjIHNheXMgdGhhdCB0aGlzIGlz ICJVc2UgVEMvTFJVIGNvbnRyb2xzIGZyb20gcGFnZSB0YWJsZSIsIGJ1dCB1cG9uCj4+Pj4+Pj4g YSBjbG9zZXIgbG9vayBpdCBzZWVtcyBsaWtlIHRoZSBCU3BlYyBpcyB3cm9uZyBhbmQgeW91ciBw YXRjaCBpcwo+Pj4+Pj4+IGNvcnJlY3QuICBDYW4geW91IGNvbmZpcm0gdGhhdCB0aGlzIGlzIHdo YXQgeW91IGludGVuZGVkPwo+Pj4+Pj4gVGhlc2UgdmFsdWVzIGxvb2sgZ29vZCwgdGhleSBhcmUg Yml0cyAzOjIgZm9yIHRoZSBYWFhfTU9DU19OIHJlZ2lzdGVycwo+Pj4+Pj4gKGM4MDApIGFuZCBm cmllbmRzLgo+Pj4+Pj4+Cj4+Pj4+Pj4+ICsjZGVmaW5lIExMQwkJCSgxKQo+Pj4+Pj4+PiArI2Rl ZmluZSBMTENfRUxMQwkJKDIpCj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4gKy8qCj4+Pj4+Pj4+ICsgKiBN T0NTIHRhYmxlcwo+Pj4+Pj4+PiArICoKPj4+Pj4+Pj4gKyAqIFRoZXNlIGFyZSB0aGUgTU9DUyB0 YWJsZXMgdGhhdCBhcmUgcHJvZ3JhbW1lZCBhY3Jvc3MgYWxsIHRoZSByaW5ncy4KPj4+Pj4+Pj4g KyAqIFRoZSBjb250cm9sIHZhbHVlIGlzIHByb2dyYW1tZWQgdG8gYWxsIHRoZSByaW5ncyB0aGF0 IHN1cHBvcnQgdGhlCj4+Pj4+Pj4+ICsgKiBNT0NTIHJlZ2lzdGVycy4gV2hpbGUgdGhlIGwzY2Nf dmFsdWVzIGFyZSBvbmx5IHByb2dyYW1tZWQgdG8gdGhlCj4+Pj4+Pj4+ICsgKiBMTkNGQ01PQ1Mw IC0gTE5DRkNNT0NTMzIgcmVnaXN0ZXJzLgo+Pj4+Pj4+PiArICoKPj4+Pj4+Pj4gKyAqIE5PVEU6 IFRoZXNlIHRhYmxlcyBNVVNUIHN0YXJ0IHdpdGggYmVpbmcgdW5jYWNoZWQgYW5kIHRoZSBsZW5n dGggTVVTVAo+Pj4+Pj4gYmUKPj4+Pj4+Pj4gKyAqICAgICAgIGxlc3MgdGhhbiA2MyBhcyB0aGUg bGFzdCB0d28gcmVnaXN0ZXJzIGFyZSByZXNlcnZlZCBieSB0aGUKPj4+Pj4+IGhhcmR3YXJlLgo+ Pj4+Pj4+PiArICovCj4+Pj4+Pj4+ICtzdGF0aWMgc3RydWN0IGRybV9pOTE1X21vY3NfZW50cnkg c2t5bGFrZV9tb2NzX3RhYmxlW10gPSB7Cj4+Pj4+Pj4+ICsJIC8qIHsweDAwMDAwMDA5LCAweDAw MTB9ICovCj4+Pj4+Pj4+ICsJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9VQykgfCBNT0NTX1RH VF9DQUNIRShMTENfRUxMQykgfAo+Pj4+Pj4+PiArCQlNT0NTX0xSVU0oMCkgfCBNT0NTX0FPTSgw KSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8Cj4+Pj4+Pj4+ICsJCU1PQ19QRk0o MCkgfCBNT0NTX1NDRigwKSksCj4+Pj4+Pj4+ICsJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDAp IHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNfVUMpKX0sCj4+Pj4+Pj4+ICsJIC8qIHsweDAwMDAw MDNiLCAweDAwMzB9ICovCj4+Pj4+Pj4+ICsJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9XQikg fCBNT0NTX1RHVF9DQUNIRShMTENfRUxMQykgfAo+Pj4+Pj4+PiArCQlNT0NTX0xSVU0oMykgfCBN T0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8Cj4+Pj4+Pj4+ICsJ CU1PQ19QRk0oMCkgfCBNT0NTX1NDRigwKSksCj4+Pj4+Pj4+ICsJCShNT0NTX0VTQygwKSB8IE1P Q1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNfV0IpKX0sCj4+Pj4+Pj4+ICsJIC8q IHsweDAwMDAwMDM5LCAweDAwMTB9ICovCj4+Pj4+Pj4+ICsJeyhNT0NTX0NBQ0hFQUJJTElUWShF RFJBTV9VQykgfCBNT0NTX1RHVF9DQUNIRShMTENfRUxMQykgfAo+Pj4+Pj4+PiArCQlNT0NTX0xS VU0oMykgfCBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8Cj4+ Pj4+Pj4+ICsJCU1PQ19QRk0oMCkgfCBNT0NTX1NDRigwKSksCj4+Pj4+Pj4+ICsJCShNT0NTX0VT QygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNfVUMpKX0sCj4+Pj4+ Pj4+ICsJIC8qIHsweDAwMDAwMDE3LCAweDAwMzB9ICovCj4+Pj4+Pj4+ICsJeyhNT0NTX0NBQ0hF QUJJTElUWShFRFJBTV9XQikgfCBNT0NTX1RHVF9DQUNIRShMTEMpIHwKPj4+Pj4+Pj4gKwkJTU9D U19MUlVNKDEpIHwgTU9DU19BT00oMCkgfCBNT0NTX0xFQ0NfRVNDKDApIHwgTU9DU19TQ0MoMCkg fAo+Pj4+Pj4+PiArCQlNT0NfUEZNKDApIHwgTU9DU19TQ0YoMCkpLAo+Pj4+Pj4+PiArCQkoTU9D U19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKEwzX1dCKSl9LAo+ Pj4+Pj4+PiArCSAvKiB7MHgwMDAwMDAxNywgMHgwMDEwfSAqLwo+Pj4+Pj4+PiArCXsoTU9DU19D QUNIRUFCSUxJVFkoRURSQU1fV0IpIHwgTU9DU19UR1RfQ0FDSEUoTExDKSB8Cj4+Pj4+Pj4+ICsJ CU1PQ1NfTFJVTSgxKSB8IE1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0ND KDApIHwKPj4+Pj4+Pj4gKwkJTU9DX1BGTSgwKSB8IE1PQ1NfU0NGKDApKSwKPj4+Pj4+Pj4gKwkJ KE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElUWShMM19VQykp fSwKPj4+Pj4+Pj4gKwkgLyogezB4MDAwMDAwMTksIDB4MDAxMH0gKi8KPj4+Pj4+Pj4gKwl7KE1P Q1NfQ0FDSEVBQklMSVRZKEVEUkFNX1VDKSB8IE1PQ1NfVEdUX0NBQ0hFKExMQ19FTExDKSB8Cj4+ Pj4+Pj4+ICsJCU1PQ1NfTFJVTSgxKSB8IE1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8 IE1PQ1NfU0NDKDApIHwKPj4+Pj4+Pj4gKwkJTU9DX1BGTSgwKSB8IE1PQ1NfU0NGKDApKSwKPj4+ Pj4+Pj4gKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElU WShMM19VQykpfSwKPj4+Pj4+Pj4gKwkgLyogezB4MDAwMDAwMzcsIDB4MDAzMH0gKi8KPj4+Pj4+ Pj4gKwl7KE1PQ1NfQ0FDSEVBQklMSVRZKEVEUkFNX1dCKSB8IE1PQ1NfVEdUX0NBQ0hFKExMQykg fAo+Pj4+Pj4+PiArCQlNT0NTX0xSVU0oMykgfCBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0Mo MCkgfCBNT0NTX1NDQygwKSB8Cj4+Pj4+Pj4+ICsJCU1PQ19QRk0oMCkgfCBNT0NTX1NDRigwKSks Cj4+Pj4+Pj4+ICsJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFC SUxJVFkoTDNfV0IpKX0sCj4+Pj4+Pj4+ICsJIC8qIHsweDAwMDAwMDM3LCAweDAwMTB9ICovCj4+ Pj4+Pj4+ICsJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9XQikgfCBNT0NTX1RHVF9DQUNIRShM TEMpIHwKPj4+Pj4+Pj4gKwkJTU9DU19MUlVNKDMpIHwgTU9DU19BT00oMCkgfCBNT0NTX0xFQ0Nf RVNDKDApIHwgTU9DU19TQ0MoMCkgfAo+Pj4+Pj4+PiArCQlNT0NfUEZNKDApIHwgTU9DU19TQ0Yo MCkpLAo+Pj4+Pj4+PiArCQkoTU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FD SEVBQklMSVRZKEwzX1VDKSl9LAo+Pj4+Pj4+PiArCSAvKiB7MHgwMDAwMDAzYiwgMHgwMDEwfSAq Lwo+Pj4+Pj4+PiArCXsoTU9DU19DQUNIRUFCSUxJVFkoRURSQU1fV0IpIHwgTU9DU19UR1RfQ0FD SEUoTExDX0VMTEMpIHwKPj4+Pj4+Pj4gKwkJTU9DU19MUlVNKDMpIHwgTU9DU19BT00oMCkgfCBN T0NTX0xFQ0NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfAo+Pj4+Pj4+PiArCQlNT0NfUEZNKDApIHwg TU9DU19TQ0YoMCkpLAo+Pj4+Pj4+PiArCQkoTU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1P Q1NfTDNfQ0FDSEVBQklMSVRZKEwzX1VDKSl9LAo+Pj4+Pj4+PiArfTsKPj4+Pj4+Pgo+Pj4+Pj4+ IE1lc2Egd2lsbCB3YW50IGFuIGFkZGl0aW9uYWwgZW50cnkgd2l0aCBUQz1MTEMvZUxMQywgTGVD Qz1QVEUsIEwzQ0M9V0IsCj4+Pj4+Pj4gZXZlcnl0aGluZyBlbHNlIHVuc2V0LCBJJ2xsIHJlcGx5 IHdpdGggYSB1c2Vyc3BhY2UgcGF0Y2ggbWFraW5nIHVzZSBvZgo+Pj4+Pj4+IHlvdXIgY2hhbmdl IGlmIHlvdSBhZGQgc3VjaCBhbiBlbnRyeS4KPj4+Pj4gT2suIEkgdGhpbmsgd2hhdCB5b3Ugd2Fu dCBpcywgc2FtZSBhcyBlbnRyeSB0d28sIGJ1dCB1c2UgdGhlIHVuZGVybHlpbmcKPj4+Pj4gcGFn ZXRhYmxlIHNldHRpbmdzIGFuZCBub3Qgc3BlY2lmeSB0aGUgRURSQU0gc2V0dGluZ3MuIFBsZWFz ZSBjb25maXJtIGluCj4+Pj4+IHRoZSBuZXcgcGF0Y2hzZXQuCj4+Pj4KPj4+PiBZZWFoLCB0aGF0 IHNvdW5kcyBnb29kLgo+Pj4+Cj4+Pj4+Pj4KPj4+Pj4+PiBBbm90aGVyIHRoaW5nIHdvcnRoIG1l bnRpb25pbmcgaXMgdGhhdCBlbnRyaWVzIDAsIDIgYW5kIDUgc2VlbSB0byBkbyB0aGUKPj4+Pj4+ PiBzYW1lIHRoaW5nIHN1c3BpY2lvdXNseSwgdGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB0aGUgTFJV TSBmaWVsZCB3aGljaAo+Pj4+Pj4+IEFGQUlLIGRvZXNuJ3QgaGF2ZSBhbnkgZWZmZWN0IGZvciBM ZUNDPVVDLiAgSXMgbXkgdW5kZXJzdGFuZGluZyBjb3JyZWN0Pwo+Pj4+Pj4+Cj4+Pj4+PiBUaGVz ZSB0YWJsZXMgYXJlIGdlbmVyYXRlZCB2aWEgcmVxdWVzdHMgYW5kIHRoZW4gYm9pbGVkIGRvd24g dG8gdGhlIGFib3ZlLgo+Pj4+Pj4gU28gc29tZSBvZiB0aGUgZW50cmllcyBhcmUgYnkgcmVxdWVz dC4gU3dpbmdzIGFuZCByb3VuZGFib3V0cywgY2FuIHJlbW92ZQo+Pj4+Pj4gdGhlIG9uZXMgdGhh dCBsb29rIHJlZHVuZGFudCBidXQgdGhlbiB0aGUgdHVuaW5nIHRoYXQgaGFzIGJlZW4gZG9uZSB3 b250Cj4+Pj4+PiBtYXRjaC4gSSdsbCBhZGQgdGhlIG5ldyBlbnRyeSBhdCB0aGUgZW5kIG9mIHRo ZSB0YWJsZS4KPj4+Cj4+PiBBcmUgeW91IHBsYW5uaW5nIHRvIHByb3BhZ2F0ZSB0aGUgZW50cnkg eW91IGp1c3QgYWRkZWQgYmFjayB0byB0aGUKPj4+IG9yaWdpbmFsIHRhYmxlIHRoaXMgd2FzIGdl bmVyYXRlZCBmcm9tPyAgV2hhdCBhYm91dCBuZXcgZW50cmllcyB3ZSBtYXkKPj4+IG5lZWQgdG8g YWRkIGluIHRoZSBmdXR1cmU/ICBXaGF0IHNob3VsZCBiZSB0aGUgcHJvY2VzcyB0byBtYWtlIHN1 cmUgdGhhdAo+Pj4gb3VyIHRhYmxlIGFuZCB0aGUgbWFzdGVyIHRhYmxlIGRvbid0IGRpdmVyZ2Ug YW5kIGVuZCB1cCB3aXRoIGNvbmZsaWN0aW5nCj4+PiBlbnRyaWVzIHdlIGNhbm5vdCByZW1vdmUg YmVjYXVzZSBvZiBBQkkgY29tcGF0aWJpbGl0eT8gIEkgZ3Vlc3MgdGhlcmUKPj4+IHNob3VsZCBi ZSBhIGNvbW1lbnQgb24gdGhlIHRvcCB3YXJuaW5nIHRoYXQgdGhlIHRhYmxlIGlzIHBhcnQgb2Yg dGhlCj4+PiBrZXJuZWwgQUJJIGFuZCBzdXBwb3NlZCB0byBiZSBrZXB0IGluIHN5bmMgd2l0aCB5 b3VyIHRhYmxlLCBzbyBvdGhlcgo+Pj4gcGVvcGxlIGRvbid0IGNoYW5nZSBpdCB1bmtub3dpbmds eT8KPj4+Cj4+PiBUaGFua3MuCj4+IEkgYW0gdGFsa2luZyB0byB0aGUgdGVhbSB0aGF0IGhhbmRs ZXMgdGhpcyBhbmQgc2VlIGlmIHRoZXkgd2lsbCBhZGQgdGhpcwo+PiAoc28gZnV0dXJlIGdlbnMg dGhpcyBpcyBiYWtlZCBpbikgYnV0IGl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIG90aGVyIHRhYmxl cwo+PiB3aWxsIHN0YXkgaW4gc3RlcCBhcyBnZXR0aW5nIGluIGNoYW5nZXMgd2lsbCBjYXVzZSB0 b28gbXVjaCBncmllZiBnZXR0aW5nCj4+IHRoZW0gdXBzdHJlYW1lZCBhbmQgYXMgdGhlIHRhYmxl IGlzIGF1dG8tZ2VuZXJhdGVkIHdlIHdpbGwgbm90IGJlIGFibGUgdG8KPj4gZ3VhcmFudGVlIHRo ZSBvcmRlcmluZy4gSXQgd2lsbCBoYXZlIHRvIGJlIG1hbnVhbCBqb2IgZm9yIGFueW9uZSBkb2lu Zwo+PiB0aGlzLiBJdCBpcyByZXF1aXJlZCBmb3Igb3RoZXIgcGxhdGZvcm1zIGZvciB0aGUgdGFi bGVzIHRvIG1hdGNoIHRoZQo+PiB1c2Vyc3BhY2UgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGJ1 dCBvbiBMaW51eCBpdCB3aWxsIGJlIGJ5IHJlcXVlc3QgaWYKPj4gdGhlcmUgaXMgYSBwcm9ibGVt LiBXZSB3aWxsIHNlZSB3aGF0IGhhcHBlbnMuCj4+Cj4gSSB0aGluayBpdCBvbmx5IG1ha2VzIHNl bnNlIGZvciBMaW51eCB0byBtYWludGFpbiBjb21wYXRpYmlsaXR5IHdpdGgKPiBBbmRyb2lkJ3Mg dGFibGVzIGlmIHdlIGFncmVlIG9uIHNvbWUgc3RyYWlnaHRmb3J3YXJkIHByb2Nlc3MgZm9yIHVz IHRvCj4gYWxsb2NhdGUgbmV3IGVudHJpZXMgd2l0aG91dCBjYXVzaW5nIGNvbmZsaWN0cyAob3Ro ZXJ3aXNlIHBlb3BsZSBhcmUKPiBsaWtlbHkgdG8gaWdub3JlIHRoZSBpc3N1ZSBjb21wbGV0ZWx5 IGFuZCBsZXQgdGhlIHRhYmxlcyBkaXZlcmdlLCBhcyB5b3UKPiBtZW50aW9uZWQgeW91cnNlbGYp LCBhbmQgaGF2ZSBzb21lIGd1YXJhbnRlZSB0aGF0IGFueSBlbnRyaWVzIGV2ZXIKPiBjb250cmli dXRlZCBieSB5b3VyIHRlYW0gdG8gdGhlIExpbnV4IGtlcm5lbCAoYW5kIHRoZXJlZm9yZSBwYXJ0 IG9mIG91cgo+IHN0YWJsZSBBQkkpIHdpbGwgbmV2ZXIgYmUgY2hhbmdlZCBvciByZW9yZGVyZWQg aW4gdGhlIGZ1dHVyZS4KPgpJIHRoaW5rIGludGVybmFsbHkgKGFuZCBpbmZvcm1hbGx5KSB0aGF0 IHdlIGNhbm5vdCBrZWVwIHN5bmMgYmV0d2VlbiBBbmRyb2lkCmFuZCBMaW51eC4gV2UgbmVlZCB0 byBrZWVwIGNvbXBhdGliaWxpdHkgd2l0aCB1c2Vyc3BhY2UgYW5kIHRoZXJlIGlzIG5vCmd1YXJh bnRlZSBvZiBvcmRlcmluZyBhcyB0aGVzZSB0YWJsZXMgYXJlIGdlbmVyYXRlZCBhdCBydW50aW1l LiBUaGUgdGFibGVzCnRoYXQgYXJlIGluIExpbnV4IGFyZSBhIHNuYXBzaG90LiBUaGVzZSBjaGFu Z2VzIGFyZSBzdXBwb3NlZCB0byBzdGFiaWxpc2UgYXQKUFYgc28gdGhleSBkb24ndCBjaGFuZ2Ug aW4gdGhlIGZ1dHVyZSwgYnV0IGlmIGEgYnVnIG9yIGdvb2QgcGVyZm9ybWFuY2UKZW5oYW5jZW1l bnQgb2NjdXJzIEkgY2FuJ3QgaW1hZ2luZSB0aGF0IHRoZXkgd29udCBtYWtlIHRoZSBjaGFuZ2Vz LgoKPiBJIGhhdmUgdGhlIGltcHJlc3Npb24gdGhhdCBiZWNhdXNlIG9mIHlvdXIgZGV2ZWxvcG1l bnQgbW9kZWwgeW91IGhhdmUKPiBmYXIgbW9yZSBmcmVlZG9tIHRvIG1ha2UgY2hhbmdlcyBpbiB5 b3VyIGtlcm5lbCBBQkkgYWZ0ZXIgdGhlIGZhY3QgdGhhbgo+IHdlIGRvIC0tIE9UT0ggd2Ugd291 bGQgYmUgbG9ja2VkIGluIGlmIHdlIGFjY2VwdCB0byBpbXBvcnQgQW5kcm9pZCdzCj4gdGFibGVz IG5vdywgd2hhdCBicmluZ3MgbWUgdG8gdGhlIG5leHQgcXVlc3Rpb246IEhvdyB3b3VsZCB5b3Ug ZmVlbAo+IGFib3V0IHJldmVyc2luZyB0aGUgcm9sZXMgb2Ygb3VyIHRhYmxlcz8gIFRoZSB3b3Jr ZmxvdyBjb3VsZCBiZSBhcwo+IGZvbGxvd3M6ClRoZSBBbmRyb2lkIGtlcm5lbCBpcyBtb3JlIGZs ZXhpYmxlLCBpbiB3aGF0IGl0IGFjY2VwdHMsIGFuZCBzZWNvbmRseSAoYW5kCm1vcmUgaW1wb3J0 YW50bHkpIHlvdSBzaG91bGQgYmUgdXNpbmcgdGhlIHVzZXJzcGFjZSBkcml2ZXJzIGFzIHRoaXMg aXMKdGhlIEFQSSBhbmQgaXMgdHVuZWQsIHNvIGNoYW5naW5nIHRoZSB0YWJsZXMgYXJlIGxlc3Mg b2YgYSBwcm9ibGVtLgo+Cj4KPiAtIFRoZSBNT0NTIHRhYmxlcyBwYXJ0IG9mIHRoZSBMaW51eCBr ZXJuZWwgd291bGQgYmUgZGV2ZWxvcGVkIGFuZAo+ICAgZGlzY3Vzc2VkIHB1YmxpY2x5IGluIHRo aXMgbWFpbGluZyBsaXN0LCBpbmRlcGVuZGVudGx5IGZyb20geW91ciB0ZWFtCj4gICAod2hpY2gg ZG9lc24ndCBtZWFuIHRoYXQgeW91ciBjb250cmlidXRpb25zIGFuZCBmZWVkLWJhY2sgcmVnYXJk aW5nCj4gICBmdXR1cmUgY2hhbmdlcyBpbiB0aGUgTU9DUyB0YWJsZXMgd291bGRuJ3QgYmUgdmVy eSBtdWNoIHdlbGNvbWUpLgo+ClRoaXMgaXMgZmluZS4gQnV0IGJlIGF3YXJlIHRoZSBSRkMgZm9y IHRoZSBNT0NTIHdhcyBmaXJzdCBmbG9hdGVkIGluIE1hcmNoIGFuZAp0ZWFtcyB3ZXJlIGRpcmVj dGx5IGNvbnRhY3RlZCB3aGVuIHRoaXMgaGFwcGVuZWQgYW5kIG5vdCBhIGxvdCBvZiByZXNwb25z ZQp3YXMgcmVjZWl2ZWQuIE1PQ1MgYWluJ3Qgc2V4eSBhbmQgcGVvcGxlIG9ubHkgZ2V0IGludGVy ZXN0ZWQgd2hlbiB0aGV5CmZlZWwgdGhhdCB0aGV5IG1heWJlIGEgcGVyZm9ybWFuY2UgcHJvYmxl bSAtIHRoZW4gdGhleSBsb29rIHRvIGNhY2hpbmcuCgpCdXQsIEkgdGhpbmsgdGhpcyBpcyB0aGUg c2Vuc2libGUgbW9kZWwuIEZvciB0aGUgbmV3IHRhYmxlcyAobmV3IGdlbnMpIGEgZHJvcApmcm9t IHRoZSBpbnRlcm5hbCBjYWNoZSBtb2RlbHMgYXMgdGhlc2Ugd2lsbCBoYXZlIGhhZCBzb21lIGZv cm0gb2YgdHVuaW5nIGZyb20KZGlmZmVyZW50IHRlYW1zIGFuZCByZXF1aXJlbWVudHMgKE9wZW5D TCwgT3BlbkdMLCBNZWRpYSwgU2VjdXJpdHksIGV0Yy4uLikgdGhlbgp0aGVzZSBjYW4gYmUgZGlz Y3Vzc2VkIG9uIHRoZSBtYWlsaW5nIGxpc3QgYXMgcmVxdWlyZWQuCgpJIGFtIG5vdCBzdXJlIGlm IHRoYXQgaXMgYWNjZXB0YWJsZSB0byBldmVyeW9uZS4gQXMgd2UgYXJlIGdvaW5nIHRvIGhhdmUg dG8KY2Fycnkgc29tZSBwYXRjaGVzIGluIEFuZHJvaWQgYW5kIGRyb3AgYW55IHVwc3RyZWFtIE1P Q1MgY2hhbmdlcy4KCj4gLSBJZiB5b3Ugd2lzaCB5b3UgbWF5IG1haW50YWluIGNvbXBhdGliaWxp dHkgd2l0aCBMaW51eCBieSBzeW5jJ2luZwo+ICAgeW91ciB0YWJsZXMgcGVyaW9kaWNhbGx5LiAg SWYgeW91IGRvIHlvdSBtYXkgc3RpbGwgaGF2ZSB0aGUgY2hvaWNlIHRvCj4gICBicmVhayBjb21w YXRpYmlsaXR5IGluIHRoZSBmdXR1cmUgYW5kIHN0YXJ0IGZyb20gc2NyYXRjaCB3aXRoIGNsZWFu Cj4gICB0YWJsZXMgaWYgdGhpcyB0dXJucyBvdXQgdG8gYmVjb21lIGEgYnVyZGVuIGZvciB5b3Uu ICAoTm90ZSB0aGF0IHRoZQo+ICAgY29udmVyc2Ugc3RhdGVtZW50IGRvZXNuJ3Qgd29yayBpZiB0 aGUgdGFibGVzIHBhcnQgb2YgdGhlIExpbnV4Cj4gICBrZXJuZWwgd2VyZSB0byBiZSBjb25zaWRl cmVkIGRvd25zdHJlYW0sIGJlY2F1c2Ugd2UgaGF2ZSB0aGUKPiAgIHJlcXVpcmVtZW50IG9mIGtl ZXBpbmcgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBwcmV2aW91cwo+ICAgcmV2aXNpb25z IG9mIHRoZSBBQkkpLgpUaGlzIGlzIG5vdCByZWFsbHkgcG9zc2libGUuIEFzIG1lbnRpb25lZCBh Ym92ZSBvcmRlcmluZyBtYXkgY2hhbmdlLgo+Cj4gLSBJZiB5b3UgY2hvb3NlIHRvIGtlZXAgY29t cGF0aWJpbGl0eSB0aGUgcHJvY2VzcyBmb3IgeW91IHRvIGFsbG9jYXRlCj4gICBuZXcgZW50cmll cyBhdm9pZGluZyBjb25mbGljdHMgc2hvdWxkIGJlIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJk Ogo+ICAgU2VuZCBhIHBhdGNoIHRvIHRoaXMgbWFpbGluZyBsaXN0IGFuZCBvbmNlIGl0J3MgQUNL J2VkIHlvdSB3b3VsZCBoYXZlCj4gICB0aGUgZ3VhcmFudGVlIHRoYXQgdGhlIHNhbWUgaW5kZXgg d291bGRuJ3QgZXZlciBiZSByZXVzZWQgZm9yIGFueQo+ICAgb3RoZXIgcHVycG9zZSBpbiB0aGUg ZnV0dXJlLCBhbmQgeW91IGNvdWxkIHN0YXJ0IG1ha2luZyB1c2Ugb2YgaXQgaW4KPiAgIHRoZSBB bmRyb2lkIHN0YWNrIHJpZ2h0IGF3YXkuCkl0IHdvdWxkIGJlIHBvc3NpYmxlIHRvIGFsbG9jYXRl IGEgaGlnaCBudW1iZXIgc2F5IGluIHRoZSA2MCdzIGFzIHRoZSBjdXJyZW50CnRhYmxlIGlzIGdl bmVyYXRlZCBmcm9tIDI3MCsgcG9saWNpZXMgYW5kIG9ubHkgc3BpdHMgb3V0IDggb3IgOSBlbnRy aWVzLiBTbyB0aGUKY2hhbmNlIG9mIHRoZSB0YWJsZXMgZ2V0dGluZyBpbnRvIHRoZSA2MCdzIGlz IHF1aXRlIGxvdy4gVGhhdCBjb3VsZCBiZSBhbgpvcHRpb24sIGJ1dCBJIGNhbiBzZWUgdGhhdCBi ZWluZyBwb28tcG9vZWQgdXBzdHJlYW0gd2l0aCB0aGUgc2ltcGxlIHF1ZXN0aW9uCm9mIHdoeSBu b3Qgc3RhcnQgYXQgMC4KCkxpa2UgeW91LCBpdCB3b3VsZCBiZSBuaWNlIHRvbyBzZWUgd2hhdCBv dGhlcnMgdGhpbmsuCgpQZXRlci4KCj4KPiBIb3cgZG8geW91IGZlZWwgYWJvdXQgdGhpcyBwcm9w b3NhbD8gIEl0IHdvdWxkIGFsc28gYmUgbmljZSB0byBoZWFyIHRoZQo+IG9waW5pb24gb2Ygb3Ro ZXIgcGVvcGxlIGZyb20gdGhlIExpbnV4IHNpZGUuICBCZW4/ICBKZXNzZT8KPgo+PiBQZXRlci4K Pj4KPj4+Cj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2k5MTVfbW9jc19l bnRyeSBicm94dG9uX21vY3NfdGFibGVbXSA9IHsKPj4+Pj4+Pj4gKwkgLyogezB4MDAwMDAwMDEs IDB4MDAxMH0gKi8KPj4+Pj4+Pj4gKwl7KE1PQ1NfQ0FDSEVBQklMSVRZKEVEUkFNX1VDKSB8IE1P Q1NfVEdUX0NBQ0hFKEVMTEMpIHwKPj4+Pj4+Pj4gKwkJTU9DU19MUlVNKDApIHwgTU9DU19BT00o MCkgfCBNT0NTX0xFQ0NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfAo+Pj4+Pj4+PiArCQlNT0NfUEZN KDApIHwgTU9DU19TQ0YoMCkpLAo+Pj4+Pj4+PiArCQkoTU9DU19FU0MoMCkgfCBNT0NTX1NDQygw KSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKEwzX1VDKSl9LAo+Pj4+Pj4+PiArCSAvKiB7MHgwMDAw MDAwNSwgMHgwMDEwfSAqLwo+Pj4+Pj4+PiArCXsoTU9DU19DQUNIRUFCSUxJVFkoRURSQU1fVUMp IHwgTU9DU19UR1RfQ0FDSEUoTExDKSB8Cj4+Pj4+Pj4+ICsJCU1PQ1NfTFJVTSgwKSB8IE1PQ1Nf QU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwKPj4+Pj4+Pj4gKwkJTU9D X1BGTSgwKSB8IE1PQ1NfU0NGKDApKSwKPj4+Pj4+Pj4gKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19T Q0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElUWShMM19VQykpfSwKPj4+Pj4+Pj4gKwkgLyogezB4 MDAwMDAwMDUsIDB4MDAzMH0gKi8KPj4+Pj4+Pj4gKwl7KE1PQ1NfQ0FDSEVBQklMSVRZKEVEUkFN X1VDKSB8IE1PQ1NfVEdUX0NBQ0hFKExMQykgfAo+Pj4+Pj4+PiArCQlNT0NTX0xSVU0oMCkgfCBN T0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8Cj4+Pj4+Pj4+ICsJ CU1PQ19QRk0oMCkgfCBNT0NTX1NDRigwKSksCj4+Pj4+Pj4+ICsJCShNT0NTX0VTQygwKSB8IE1P Q1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNfV0IpKX0sCj4+Pj4+Pj4+ICsJIC8q IHsweDAwMDAwMDE3LCAweDAwMzB9ICovCj4+Pj4+Pj4+ICsJeyhNT0NTX0NBQ0hFQUJJTElUWShF RFJBTV9XQikgfCBNT0NTX1RHVF9DQUNIRShMTEMpIHwKPj4+Pj4+Pj4gKwkJTU9DU19MUlVNKDEp IHwgTU9DU19BT00oMCkgfCBNT0NTX0xFQ0NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfAo+Pj4+Pj4+ PiArCQlNT0NfUEZNKDApIHwgTU9DU19TQ0YoMCkpLAo+Pj4+Pj4+PiArCQkoTU9DU19FU0MoMCkg fCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKEwzX1dCKSl9LAo+Pj4+Pj4+PiAr CSAvKiB7MHgwMDAwMDAxNywgMHgwMDEwfSAqLwo+Pj4+Pj4+PiArCXsoTU9DU19DQUNIRUFCSUxJ VFkoRURSQU1fV0IpIHwgTU9DU19UR1RfQ0FDSEUoTExDKSB8Cj4+Pj4+Pj4+ICsJCU1PQ1NfTFJV TSgxKSB8IE1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwKPj4+ Pj4+Pj4gKwkJTU9DX1BGTSgwKSB8IE1PQ1NfU0NGKDApKSwKPj4+Pj4+Pj4gKwkJKE1PQ1NfRVND KDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElUWShMM19VQykpfSwKPj4+Pj4+ Pj4gKwkgLyogezB4MDAwMDAwMTksIDB4MDAxMH0gKi8KPj4+Pj4+Pj4gKwl7KE1PQ1NfQ0FDSEVB QklMSVRZKEVEUkFNX1VDKSB8IE1PQ1NfVEdUX0NBQ0hFKExMQ19FTExDKSB8Cj4+Pj4+Pj4+ICsJ CU1PQ1NfTFJVTSgxKSB8IE1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0ND KDApIHwKPj4+Pj4+Pj4gKwkJTU9DX1BGTSgwKSB8IE1PQ1NfU0NGKDApKSwKPj4+Pj4+Pj4gKwkJ KE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElUWShMM19VQykp fSwKPj4+Pj4+Pj4gKwkgLyogezB4MDAwMDAwMzcsIDB4MDAzMH0gKi8KPj4+Pj4+Pj4gKwl7KE1P Q1NfQ0FDSEVBQklMSVRZKEVEUkFNX1dCKSB8IE1PQ1NfVEdUX0NBQ0hFKExMQykgfAo+Pj4+Pj4+ PiArCQlNT0NTX0xSVU0oMykgfCBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NT X1NDQygwKSB8Cj4+Pj4+Pj4+ICsJCU1PQ19QRk0oMCkgfCBNT0NTX1NDRigwKSksCj4+Pj4+Pj4+ ICsJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNf V0IpKX0sCj4+Pj4+Pj4+ICsJIC8qIHsweDAwMDAwMDM3LCAweDAwMTB9ICovCj4+Pj4+Pj4+ICsJ eyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9XQikgfCBNT0NTX1RHVF9DQUNIRShMTEMpIHwKPj4+ Pj4+Pj4gKwkJTU9DU19MUlVNKDMpIHwgTU9DU19BT00oMCkgfCBNT0NTX0xFQ0NfRVNDKDApIHwg TU9DU19TQ0MoMCkgfAo+Pj4+Pj4+PiArCQlNT0NfUEZNKDApIHwgTU9DU19TQ0YoMCkpLAo+Pj4+ Pj4+PiArCQkoTU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZ KEwzX1VDKSl9LAo+Pj4+Pj4+PiArCSAvKiB7MHgwMDAwMDAzYiwgMHgwMDEwfSAqLwo+Pj4+Pj4+ PiArCXsoTU9DU19DQUNIRUFCSUxJVFkoRURSQU1fV0IpIHwgTU9DU19UR1RfQ0FDSEUoTExDX0VM TEMpIHwKPj4+Pj4+Pj4gKwkJTU9DU19MUlVNKDMpIHwgTU9DU19BT00oMCkgfCBNT0NTX0xFQ0Nf RVNDKDApIHwgTU9DU19TQ0MoMCkgfAo+Pj4+Pj4+PiArCQlNT0NfUEZNKDApIHwgTU9DU19TQ0Yo MCkpLAo+Pj4+Pj4+PiArCQkoTU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FD SEVBQklMSVRZKEwzX1VDKSl9LAo+Pj4+Pj4+PiArfTsKPj4+Pj4+Pj4gKwo+Pj4+Pj4+Cj4+Pj4+ Pj4gV291bGRuJ3QgaXQgYmUgYSBnb29kIGlkZWEgdG8gaGF2ZSBCWFQncyBlbnRyaWVzIG1hdGNo IFNLTCdzIGZvciBhIGdpdmVuCj4+Pj4+Pj4gaW5kZXg/ICBUaGUgVEMsIExlQ0MgYW5kIExSVU0g c2V0dGluZ3MgeW91IGRvIGhlcmUgYXJndWFibHkgZG9uJ3QgaGF2ZQo+Pj4+Pj4+IGFueSBlZmZl Y3Qgb24gQlhULCBMM0NDIGRvZXMgYnV0IGl0IGRvZXNuJ3QgbWF0Y2ggU0tMJ3Mgc2V0dGluZyBm b3IKPj4+Pj4+PiBlbnRyaWVzIDEgYW5kIDIuICBJcyB0aGVyZSBhbnkgcmVhc29uIGZvciB0aGlz Pwo+Pj4+Pj4gQXMgbWVudGlvbmVkIGFib3ZlIHRoaXMgdGFibGUgaXMgYXV0by1nZW5lcmF0ZWQg YW5kIG1hdGNoZXMgYW5vdGhlciB0dW5lZAo+Pj4+Pj4gdGFibGUsIHNpbXBseSBrZWVwaW5nIHRo ZW0gdGhlIHNhbWUgYWxsb3dzIGZvciB0aGUgdHVuaW5nIHRvIGJlIGNvbnNpc3RlbnQKPj4+Pj4+ IGFjcm9zcyBwbGF0Zm9ybXMuCj4+Pj4+Pgo+Pj4+Pj4gUGV0ZXIuCj4+Pj4+Pj4KPj4+Pj4+PiBP dGhlciB0aGFuIHRoYXQgbG9va3MgZ29vZC4KPj4+Pj4+Pgo+Pj4+Pj4+PiArLyoqCj4+Pj4+Pj4+ ICsgKiBnZXRfbW9jc19zZXR0aW5ncwo+Pj4+Pj4+PiArICoKPj4+Pj4+Pj4gKyAqIFRoaXMgZnVu Y3Rpb24gd2lsbCByZXR1cm4gdGhlIHZhbHVlcyBvZiB0aGUgTU9DUyB0YWJsZSB0aGF0IG5lZWRz IHRvCj4+Pj4+Pj4+ICsgKiBiZSBwcm9ncmFtbWVkIGZvciB0aGUgcGxhdGZvcm0uIEl0IHdpbGwg cmV0dXJuIHRoZSB2YWx1ZXMgdGhhdCBuZWVkCj4+Pj4+Pj4+ICsgKiB0byBiZSBwcm9ncmFtbWVk IGFuZCBpZiB0aGV5IG5lZWQgdG8gYmUgcHJvZ3JhbW1lZC4KPj4+Pj4+Pj4gKyAqCj4+Pj4+Pj4+ ICsgKiBJZiB0aGUgcmV0dXJuIHZhbHVlcyBpcyBmYWxzZSB0aGVuIHRoZSByZWdpc3RlcnMgZG8g bm90IG5lZWQKPj4+Pj4+IHByb2dyYW1taW5nLgo+Pj4+Pj4+PiArICovCj4+Pj4+Pj4+ICtzdGF0 aWMgYm9vbCBnZXRfbW9jc19zZXR0aW5ncyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+Pj4+Pj4+ PiArCQkJICAgICAgc3RydWN0IGRybV9pOTE1X21vY3NfdGFibGUgKnRhYmxlKSB7Cj4+Pj4+Pj4+ ICsJYm9vbAlyZXN1bHQgPSBmYWxzZTsKPj4+Pj4+Pj4gKwo+Pj4+Pj4+PiArCWlmIChJU19TS1lM QUtFKGRldikpIHsKPj4+Pj4+Pj4gKwkJdGFibGUtPnNpemUgID0gQVJSQVlfU0laRShza3lsYWtl X21vY3NfdGFibGUpOwo+Pj4+Pj4+PiArCQl0YWJsZS0+dGFibGUgPSBza3lsYWtlX21vY3NfdGFi bGU7Cj4+Pj4+Pj4+ICsJCXJlc3VsdCA9IHRydWU7Cj4+Pj4+Pj4+ICsJfSBlbHNlIGlmIChJU19C Uk9YVE9OKGRldikpIHsKPj4+Pj4+Pj4gKwkJdGFibGUtPnNpemUgID0gQVJSQVlfU0laRShicm94 dG9uX21vY3NfdGFibGUpOwo+Pj4+Pj4+PiArCQl0YWJsZS0+dGFibGUgPSBicm94dG9uX21vY3Nf dGFibGU7Cj4+Pj4+Pj4+ICsJCXJlc3VsdCA9IHRydWU7Cj4+Pj4+Pj4+ICsJfSBlbHNlIHsKPj4+ Pj4+Pj4gKwkJLyogUGxhdGZvcm0gdGhhdCBzaG91bGQgaGF2ZSBhIE1PQ1MgdGFibGUgZG9lcyBu b3QgKi8KPj4+Pj4+Pj4gKwkJV0FSTl9PTihJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA5KTsKPj4+ Pj4+Pj4gKwl9Cj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4gKwlyZXR1cm4gcmVzdWx0Owo+Pj4+Pj4+PiAr fQo+Pj4+Pj4+PiArCj4+Pj4+Pj4+ICsvKioKPj4+Pj4+Pj4gKyAqIGVtaXRfbW9jc19jb250cm9s X3RhYmxlKCkgLSBlbWl0IHRoZSBtb2NzIGNvbnRyb2wgdGFibGUKPj4+Pj4+Pj4gKyAqIEByaW5n YnVmOglEUk0gZGV2aWNlLgo+Pj4+Pj4+PiArICogQHRhYmxlOglUaGUgdmFsdWVzIHRvIHByb2dy YW0gaW50byB0aGUgY29udHJvbCByZWdzLgo+Pj4+Pj4+PiArICogQHJlZ19iYXNlOglUaGUgYmFz ZSBmb3IgdGhlIEVuZ2luZSB0aGF0IG5lZWRzIHRvIGJlIHByb2dyYW1tZWQuCj4+Pj4+Pj4+ICsg Kgo+Pj4+Pj4+PiArICogVGhpcyBmdW5jdGlvbiBzaW1wbHkgZW1pdHMgYSBNSV9MT0FEX1JFR0lT VEVSX0lNTSBjb21tYW5kIGZvciB0aGUKPj4+Pj4+Pj4gKyAqIGdpdmVuIHRhYmxlIHN0YXJ0aW5n IGF0IHRoZSBnaXZlbiBhZGRyZXNzLgo+Pj4+Pj4+PiArICoKPj4+Pj4+Pj4gKyAqIFJldHVybjog Tm90aGluZy4KPj4+Pj4+Pj4gKyAqLwo+Pj4+Pj4+PiArc3RhdGljIHZvaWQgZW1pdF9tb2NzX2Nv bnRyb2xfdGFibGUoc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYsCj4+Pj4+Pj4+ICsJ CQkJICAgIHN0cnVjdCBkcm1faTkxNV9tb2NzX3RhYmxlICp0YWJsZSwKPj4+Pj4+Pj4gKwkJCQkg ICAgdTMyIHJlZ19iYXNlKQo+Pj4+Pj4+PiArewo+Pj4+Pj4+PiArCXVuc2lnbmVkIGludCBpbmRl eDsKPj4+Pj4+Pj4gKwo+Pj4+Pj4+PiArCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYs Cj4+Pj4+Pj4+ICsJCQlNSV9MT0FEX1JFR0lTVEVSX0lNTShHRU45X05VTV9NT0NTX0VOVFJJRVMp KTsKPj4+Pj4+Pj4gKwo+Pj4+Pj4+PiArCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHRhYmxlLT5z aXplOyBpbmRleCsrKSB7Cj4+Pj4+Pj4+ICsJCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdi dWYsIHJlZ19iYXNlICsgKGluZGV4ICogNCkpOwo+Pj4+Pj4+PiArCQlpbnRlbF9sb2dpY2FsX3Jp bmdfZW1pdChyaW5nYnVmLAo+Pj4+Pj4+PiArCQkJCQl0YWJsZS0+dGFibGVbaW5kZXhdLmNvbnRy b2xfdmFsdWUpOwo+Pj4+Pj4+PiArCX0KPj4+Pj4+Pj4gKwo+Pj4+Pj4+PiArCS8qCj4+Pj4+Pj4+ ICsJICogT2ssIG5vdyBzZXQgdGhlIHVudXNlZCBlbnRyaWVzIHRvIHVuY2FjaGVkLiBUaGVzZSBl bnRyaWVzIGFyZQo+Pj4+Pj4+PiArCSAqIG9mZmljaWFsbHkgdW5kZWZpbmVkIGFuZCBubyBjb250 YWN0IGlzIGdpdmVuIGZvciB0aGUgY29udGVudHMgYW5kCj4+Pj4+Pj4+ICsJICogc2V0dGluZ3Mg aXMgZ2l2ZW4gZm9yIHRoZXNlIGVudHJpZXMuCj4+Pj4+Pj4+ICsJICoKPj4+Pj4+Pj4gKwkgKiBF bnRyeSAwIGluIHRoZSB0YWJsZSBpcyB1bmNhY2hlZCAtIHNvIHdlIGFyZSBqdXN0IHdyaXR0ZW4g dGhhdAo+Pj4+Pj4+PiArCSAqIHZhbHVlIHRvIGFsbCB0aGUgdXNlZCBlbnRyaWVzLgo+Pj4+Pj4+ PiArCSAqLwo+Pj4+Pj4+PiArCWZvciAoOyBpbmRleCA8IEdFTjlfTlVNX01PQ1NfRU5UUklFUzsg aW5kZXgrKykgewo+Pj4+Pj4+PiArCQlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCBy ZWdfYmFzZSArIChpbmRleCAqIDQpKTsKPj4+Pj4+Pj4gKwkJaW50ZWxfbG9naWNhbF9yaW5nX2Vt aXQocmluZ2J1ZiwKPj4+Pj4+IHRhYmxlLT50YWJsZVswXS5jb250cm9sX3ZhbHVlKTsKPj4+Pj4+ Pj4gKwl9Cj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4gKwlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5n YnVmLCBNSV9OT09QKTsKPj4+Pj4+Pj4gK30KPj4+Pj4+Pj4gKwo+Pj4+Pj4+PiArLyoqCj4+Pj4+ Pj4+ICsgKiBlbWl0X21vY3NfbDNjY190YWJsZSgpIC0gZW1pdCB0aGUgbW9jcyBjb250cm9sIHRh YmxlCj4+Pj4+Pj4+ICsgKiBAcmluZ2J1ZjoJRFJNIGRldmljZS4KPj4+Pj4+Pj4gKyAqIEB0YWJs ZToJVGhlIHZhbHVlcyB0byBwcm9ncmFtIGludG8gdGhlIGNvbnRyb2wgcmVncy4KPj4+Pj4+Pj4g KyAqCj4+Pj4+Pj4+ICsgKiBUaGlzIGZ1bmN0aW9uIHNpbXBseSBlbWl0cyBhIE1JX0xPQURfUkVH SVNURVJfSU1NIGNvbW1hbmQgZm9yIHRoZQo+Pj4+Pj4+PiArICogZ2l2ZW4gdGFibGUgc3RhcnRp bmcgYXQgdGhlIGdpdmVuIGFkZHJlc3MuIFRoaXMgcmVnaXN0ZXIgc2V0IGlzCj4+Pj4+PiBwcm9n cmFtbWVkCj4+Pj4+Pj4+ICsgKiBpbiBwYWlycy4KPj4+Pj4+Pj4gKyAqCj4+Pj4+Pj4+ICsgKiBS ZXR1cm46IE5vdGhpbmcuCj4+Pj4+Pj4+ICsgKi8KPj4+Pj4+Pj4gK3N0YXRpYyB2b2lkIGVtaXRf bW9jc19sM2NjX3RhYmxlKHN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmLAo+Pj4+Pj4+ PiArCQkJIHN0cnVjdCBkcm1faTkxNV9tb2NzX3RhYmxlICp0YWJsZSkgewo+Pj4+Pj4+PiArCXVu c2lnbmVkIGludCBjb3VudDsKPj4+Pj4+Pj4gKwl1bnNpZ25lZCBpbnQgaTsKPj4+Pj4+Pj4gKwl1 MzIgdmFsdWU7Cj4+Pj4+Pj4+ICsJdTMyIGZpbGxlciA9ICh0YWJsZS0+dGFibGVbMF0ubDNjY192 YWx1ZSAmIDB4ZmZmZikgfAo+Pj4+Pj4+PiArCQkJKCh0YWJsZS0+dGFibGVbMF0ubDNjY192YWx1 ZSAmIDB4ZmZmZikgPDwgMTYpOwo+Pj4+Pj4+PiArCj4+Pj4+Pj4+ICsJaW50ZWxfbG9naWNhbF9y aW5nX2VtaXQocmluZ2J1ZiwKPj4+Pj4+Pj4gKwkJCU1JX0xPQURfUkVHSVNURVJfSU1NKEdFTjlf TlVNX01PQ1NfRU5UUklFUyAvIDIpKTsKPj4+Pj4+Pj4gKwo+Pj4+Pj4+PiArCWZvciAoaSA9IDAs IGNvdW50ID0gMDsgaSA8IHRhYmxlLT5zaXplIC8gMjsgaSsrLCBjb3VudCArPSAyKSB7Cj4+Pj4+ Pj4+ICsJCXZhbHVlID0gKHRhYmxlLT50YWJsZVtjb3VudF0ubDNjY192YWx1ZSAmIDB4ZmZmZikg fAo+Pj4+Pj4+PiArCQkJKCh0YWJsZS0+dGFibGVbY291bnQgKyAxXS5sM2NjX3ZhbHVlICYgMHhm ZmZmKSA8PAo+Pj4+Pj4gMTYpOwo+Pj4+Pj4+PiArCj4+Pj4+Pj4+ICsJCWludGVsX2xvZ2ljYWxf cmluZ19lbWl0KHJpbmdidWYsIEdFTjlfTE5DRkNNT0NTMCArIChpICogNCkpOwo+Pj4+Pj4+PiAr CQlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCB2YWx1ZSk7Cj4+Pj4+Pj4+ICsJfQo+ Pj4+Pj4+PiArCj4+Pj4+Pj4+ICsJaWYgKHRhYmxlLT5zaXplICYgMHgwMSkgewo+Pj4+Pj4+PiAr CQkvKiBPZGQgdGFibGUgc2l6ZSAtIDEgbGVmdCBvdmVyICovCj4+Pj4+Pj4+ICsJCXZhbHVlID0g KHRhYmxlLT50YWJsZVtjb3VudF0ubDNjY192YWx1ZSAmIDB4ZmZmZikgfAo+Pj4+Pj4+PiArCQkJ KCh0YWJsZS0+dGFibGVbMF0ubDNjY192YWx1ZSAmIDB4ZmZmZikgPDwgMTYpOwo+Pj4+Pj4+PiAr CX0gZWxzZQo+Pj4+Pj4+PiArCQl2YWx1ZSA9IGZpbGxlcjsKPj4+Pj4+Pj4gKwo+Pj4+Pj4+PiAr CS8qCj4+Pj4+Pj4+ICsJICogTm93IHNldCB0aGUgcmVzdCBvZiB0aGUgdGFibGUgdG8gdW5jYWNo ZWQgLSB1c2UgZW50cnkgMCBhcyB0aGlzCj4+Pj4+Pj4+ICsJICogd2lsbCBiZSB1bmNhY2hlZC4g TGVhdmUgdGhlIGxhc3QgcGFpciBhcyBpbml0aWFsaXNlZCBhcyB0aGV5IGFyZQo+Pj4+Pj4+PiAr CSAqIHJlc2VydmVkIGJ5IHRoZSBoYXJkd2FyZS4KPj4+Pj4+Pj4gKwkgKi8KPj4+Pj4+Pj4gKwlm b3IgKDsgaSA8IChHRU45X05VTV9NT0NTX0VOVFJJRVMgLyAyKSAtIDE7IGkrKykgewo+Pj4+Pj4+ PiArCQlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCBHRU45X0xOQ0ZDTU9DUzAgKyAo aSAqIDQpKTsKPj4+Pj4+Pj4gKwkJaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwgdmFs dWUpOwo+Pj4+Pj4+PiArCj4+Pj4+Pj4+ICsJCXZhbHVlID0gZmlsbGVyOwo+Pj4+Pj4+PiArCX0K Pj4+Pj4+Pj4gKwo+Pj4+Pj4+PiArCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIE1J X05PT1ApOwo+Pj4+Pj4+PiArfQo+Pj4+Pj4+PiArCj4+Pj4+Pj4+ICsvKgo+Pj4+Pj4+PiArICog Z2VuOV9wcm9ncmFtX21vY3MoKSAtIHByb2dyYW0gdGhlIE1PQ1MgcmVnaXN0ZXIuCj4+Pj4+Pj4+ ICsgKgo+Pj4+Pj4+PiArICogcmluZzoJVGhlIHJpbmcgdGhhdCB0aGUgcHJvZ3JhbW1pbmcgYmF0 Y2ggd2lsbCBiZSBydW4gaW4uCj4+Pj4+Pj4+ICsgKiBjdHg6CQlUaGUgaW50ZWxfY29udGV4dCB0 byBiZSB1c2VkLgo+Pj4+Pj4+PiArICoKPj4+Pj4+Pj4gKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBl bWl0IGEgYmF0Y2ggYnVmZmVyIHdpdGggdGhlIHZhbHVlcyByZXF1aXJlZCBmb3IKPj4+Pj4+Pj4g KyAqIHByb2dyYW1taW5nIHRoZSBNT0NTIHJlZ2lzdGVyIHZhbHVlcyBmb3IgYWxsIHRoZSBjdXJy ZW50bHkgc3VwcG9ydGVkCj4+Pj4+Pj4+ICsgKiByaW5ncy4KPj4+Pj4+Pj4gKyAqCj4+Pj4+Pj4+ ICsgKiBUaGVzZSByZWdpc3RlcnMgYXJlIHBhcnRpYWxseSBzdG9yZWQgaW4gdGhlIFJDUyBjb250 ZXh0LCBzbyB0aGV5IGFyZQo+Pj4+Pj4+PiArICogZW1pdHRlZCBhdCB0aGUgc2FtZSB0aW1lIHNv IHRoYXQgd2hlbiBhIGNvbnRleHQgaXMgY3JlYXRlZCB0aGVzZQo+Pj4+Pj4gcmVnaXN0ZXJzCj4+ Pj4+Pj4+ICsgKiBhcmUgc2V0IHVwLiBUaGVzZSByZWdpc3RlcnMgaGF2ZSB0byBiZSBlbWl0dGVk IGludG8gdGhlIHN0YXJ0IG9mIHRoZQo+Pj4+Pj4+PiArICogY29udGV4dCBhcyBzZXR0aW5nIHRo ZSBFTFNQIHdpbGwgcmUtaW5pdCBzb21lIG9mIHRoZXNlIHJlZ2lzdGVycyBiYWNrCj4+Pj4+Pj4+ ICsgKiB0byB0aGUgaHcgdmFsdWVzLgo+Pj4+Pj4+PiArICoKPj4+Pj4+Pj4gKyAqIFJldHVybjog MCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgdGhlIGVycm9yIHN0YXR1cy4KPj4+Pj4+Pj4gKyAqLwo+ Pj4+Pj4+PiAraW50IGdlbjlfcHJvZ3JhbV9tb2NzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJp bmcsCj4+Pj4+Pj4+ICsJCQkgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjdHgpCj4+Pj4+Pj4+ICt7 Cj4+Pj4+Pj4+ICsJaW50IHJldCA9IDA7Cj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4gKwlzdHJ1Y3QgZHJt X2k5MTVfbW9jc190YWJsZSB0Owo+Pj4+Pj4+PiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBy aW5nLT5kZXY7Cj4+Pj4+Pj4+ICsJc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYgPSBj dHgtPmVuZ2luZVtyaW5nLT5pZF0ucmluZ2J1ZjsKPj4+Pj4+Pj4gKwo+Pj4+Pj4+PiArCWlmIChn ZXRfbW9jc19zZXR0aW5ncyhkZXYsICZ0KSkgewo+Pj4+Pj4+PiArCQl1MzIgdGFibGVfc2l6ZTsK Pj4+Pj4+Pj4gKwo+Pj4+Pj4+PiArCQkvKgo+Pj4+Pj4+PiArCQkgKiBPSy4gRm9yIGVhY2ggc3Vw cG9ydGVkIHJpbmc6Cj4+Pj4+Pj4+ICsJCSAqICBudW1iZXIgb2YgbW9jcyBlbnRyaWVzICogMiBk d29yZHMgZm9yIGVhY2ggY29udHJvbF92YWx1ZQo+Pj4+Pj4+PiArCQkgKiAgcGx1cyBudW1iZXIg b2YgbW9jcyBlbnRyaWVzIC8yIGR3b3JkcyBmb3IgbDNjYyB2YWx1ZXMuCj4+Pj4+Pj4+ICsJCSAq Cj4+Pj4+Pj4+ICsJCSAqICBQbHVzIDEgZm9yIHRoZSBsb2FkIGNvbW1hbmQgYW5kIDEgZm9yIHRo ZSBOT09QIHBlciByaW5nCj4+Pj4+Pj4+ICsJCSAqICBhbmQgdGhlIGwzY2MgcHJvZ3JhbW1pbmcu Cj4+Pj4+Pj4+ICsJCSAqLwo+Pj4+Pj4+PiArCQl0YWJsZV9zaXplID0gR0VOOV9OVU1fTU9DU19S SU5HUyAqCj4+Pj4+Pj4+ICsJCQkJKCgyICogR0VOOV9OVU1fTU9DU19FTlRSSUVTKSArIDIpICsK Pj4+Pj4+Pj4gKwkJCQlHRU45X05VTV9NT0NTX0VOVFJJRVMgKyAyOwo+Pj4+Pj4+PiArCQlyZXQg PSBpbnRlbF9sb2dpY2FsX3JpbmdfYmVnaW4ocmluZ2J1ZiwgY3R4LCB0YWJsZV9zaXplKTsKPj4+ Pj4+Pj4gKwkJaWYgKHJldCkgewo+Pj4+Pj4+PiArCQkJRFJNX0RFQlVHKCJpbnRlbF9sb2dpY2Fs X3JpbmdfYmVnaW4gZmFpbGVkICVkXG4iLAo+Pj4+Pj4gcmV0KTsKPj4+Pj4+Pj4gKwkJCXJldHVy biByZXQ7Cj4+Pj4+Pj4+ICsJCX0KPj4+Pj4+Pj4gKwo+Pj4+Pj4+PiArCQkvKiBwcm9ncmFtIHRo ZSBjb250cm9sIHJlZ2lzdGVycyAqLwo+Pj4+Pj4+PiArCQllbWl0X21vY3NfY29udHJvbF90YWJs ZShyaW5nYnVmLCAmdCwgR0VOOV9HRlhfTU9DU18wKTsKPj4+Pj4+Pj4gKwkJZW1pdF9tb2NzX2Nv bnRyb2xfdGFibGUocmluZ2J1ZiwgJnQsIEdFTjlfTUZYMF9NT0NTXzApOwo+Pj4+Pj4+PiArCQll bWl0X21vY3NfY29udHJvbF90YWJsZShyaW5nYnVmLCAmdCwgR0VOOV9NRlgxX01PQ1NfMCk7Cj4+ Pj4+Pj4+ICsJCWVtaXRfbW9jc19jb250cm9sX3RhYmxlKHJpbmdidWYsICZ0LCBHRU45X1ZFQk9Y X01PQ1NfMCk7Cj4+Pj4+Pj4+ICsJCWVtaXRfbW9jc19jb250cm9sX3RhYmxlKHJpbmdidWYsICZ0 LCBHRU45X0JMVF9NT0NTXzApOwo+Pj4+Pj4+PiArCj4+Pj4+Pj4+ICsJCS8qIG5vdyBwcm9ncmFt IHRoZSBsM2NjIHJlZ2lzdGVycyAqLwo+Pj4+Pj4+PiArCQllbWl0X21vY3NfbDNjY190YWJsZShy aW5nYnVmLCAmdCk7Cj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4gKwkJaW50ZWxfbG9naWNhbF9yaW5nX2Fk dmFuY2UocmluZ2J1Zik7Cj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4gKwkJRFJNX0RFQlVHKCJNT0NTOiBU YWJsZSBzZXQgaW4gQ29udGV4dFxuIik7Cj4+Pj4+Pj4+ICsJfSBlbHNlIHsKPj4+Pj4+Pj4gKwkJ RFJNX0RFQlVHKCJNT0NTOiBUYWJsZSBOb3Qgc3VwcG9ydGVkIG9uIHBsYXRmb3JtXG4iKTsKPj4+ Pj4+Pj4gKwl9Cj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4gKwlyZXR1cm4gcmV0Owo+Pj4+Pj4+PiArfQo+ Pj4+Pj4+PiArCj4+Pj4+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9tb2NzLmgKPj4+Pj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9jcy5oCj4+Pj4+ Pj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+Pj4+Pj4+IGluZGV4IDAwMDAwMDAuLmUyNzgwY2UK Pj4+Pj4+Pj4gLS0tIC9kZXYvbnVsbAo+Pj4+Pj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9tb2NzLmgKPj4+Pj4+Pj4gQEAgLTAsMCArMSw2NCBAQAo+Pj4+Pj4+PiArLyoKPj4+ Pj4+Pj4gKyAqIENvcHlyaWdodCAoYykgMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgo+Pj4+Pj4+PiAr ICoKPj4+Pj4+Pj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hh cmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwo+Pj4+Pj4gYQo+Pj4+Pj4+PiArICogY29weSBv ZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQo+ Pj4+Pj4gIlNvZnR3YXJlIiksCj4+Pj4+Pj4+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3 aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dAo+Pj4+Pj4gbGltaXRhdGlvbgo+ Pj4+Pj4+PiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxp c2gsIGRpc3RyaWJ1dGUsCj4+Pj4+PiBzdWJsaWNlbnNlLAo+Pj4+Pj4+PiArICogYW5kL29yIHNl bGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20g dGhlCj4+Pj4+Pj4+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3Qg dG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+Pj4+Pj4+PiArICoKPj4+Pj4+Pj4gKyAqIFRo ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNs dWRpbmcgdGhlCj4+Pj4+PiBuZXh0Cj4+Pj4+Pj4+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGlu Y2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YKPj4+Pj4+IHRo ZQo+Pj4+Pj4+PiArICogU29mdHdhcmUuCj4+Pj4+Pj4+ICsgKgo+Pj4+Pj4+PiArICogVEhFIFNP RlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQs Cj4+Pj4+PiBFWFBSRVNTIE9SCj4+Pj4+Pj4+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5P VCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCj4+Pj4+PiBNRVJDSEFOVEFCSUxJVFksCj4+ Pj4+Pj4+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklO R0VNRU5ULiAgSU4gTk8gRVZFTlQKPj4+Pj4+IFNIQUxMCj4+Pj4+Pj4+ICsgKiBUSEUgQVVUSE9S UyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP Ugo+Pj4+Pj4gT1RIRVIKPj4+Pj4+Pj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAo+Pj4+Pj4gQVJJU0lORyBGUk9NLAo+ Pj4+Pj4+PiArICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig VEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+Pj4+Pj4gSU4gVEhFCj4+Pj4+Pj4+ICsgKiBTT0ZU V0FSRS4KPj4+Pj4+Pj4gKyAqCj4+Pj4+Pj4+ICsgKiBBdXRob3JzOgo+Pj4+Pj4+PiArICogICAg UGV0ZXIgQW50b2luZSA8cGV0ZXIuYW50b2luZUBpbnRlbC5jb20+Cj4+Pj4+Pj4+ICsgKi8KPj4+ Pj4+Pj4gKwo+Pj4+Pj4+PiArI2lmbmRlZiBJTlRFTF9NT0NTX0gKPj4+Pj4+Pj4gKyNkZWZpbmUg SU5URUxfTU9DU19ICj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4gKy8qKgo+Pj4+Pj4+PiArICogRE9DOiBN ZW1vcnkgT2JqZWN0cyBDb250cm9sIFN0YXRlIChNT0NTKQo+Pj4+Pj4+PiArICoKPj4+Pj4+Pj4g KyAqIE1vdGl2YXRpb246Cj4+Pj4+Pj4+ICsgKiBJbiBwcmV2aW91cyBHZW5zIHRoZSBNT0NTIHNl dHRpbmdzIHdhcyBhIHZhbHVlIHRoYXQgd2FzIHNldCBieSB1c2VyCj4+Pj4+PiBsYW5kIGFzCj4+ Pj4+Pj4+ICsgKiBwYXJ0IG9mIHRoZSBiYXRjaC4gSW4gR2VuOSB0aGlzIGhhcyBjaGFuZ2VkIHRv IGJlIGEgc2luZ2xlIHRhYmxlIChwZXIKPj4+Pj4+IHJpbmcpCj4+Pj4+Pj4+ICsgKiB0aGF0IGFs bCBiYXRjaGVzIG5vdyByZWZlcmVuY2UgYnkgaW5kZXggaW5zdGVhZCBvZiBwcm9ncmFtbWluZyB0 aGUKPj4+Pj4+IE1PQ1MKPj4+Pj4+Pj4gKyAqIGRpcmVjdGx5Lgo+Pj4+Pj4+PiArICoKPj4+Pj4+ Pj4gKyAqIFRoZSBvbmUgd3JpbmtsZSBpbiB0aGlzIGlzIHRoYXQgb25seSBQQVJUIG9mIHRoZSBN T0NTIHRhYmxlcyBhcmUKPj4+Pj4+IGluY2x1ZGVkCj4+Pj4+Pj4+ICsgKiBpbiBjb250ZXh0IChU aGUgR0ZYX01PQ1NfMCAtIEdGWF9NT0NTXzY0IGFuZCB0aGUgTE5DRkNNT0NTMCAtCj4+Pj4+PiBM TkNGQ01PQ1MzMgo+Pj4+Pj4+PiArICogcmVnaXN0ZXJzKS4gVGhlIHJlc3QgYXJlIG5vdCAodGhl IHNldHRpbmdzIGZvciB0aGUgb3RoZXIgcmluZ3MpLgo+Pj4+Pj4+PiArICoKPj4+Pj4+Pj4gKyAq IFRoaXMgdGFibGUgbmVlZHMgdG8gYmUgc2V0IGF0IHN5c3RlbSBzdGFydC11cCBiZWNhdXNlIHRo ZSB3YXkgdGhlCj4+Pj4+PiB0YWJsZQo+Pj4+Pj4+PiArICogaW50ZXJhY3RzIHdpdGggdGhlIGNv bnRleHRzIGFuZCB0aGUgR21tTGliIGludGVyZmFjZS4KPj4+Pj4+Pj4gKyAqCj4+Pj4+Pj4+ICsg Kgo+Pj4+Pj4+PiArICogSW1wbGVtZW50YXRpb246Cj4+Pj4+Pj4+ICsgKgo+Pj4+Pj4+PiArICog VGhlIHRhYmxlIGlzIHByb2dyYW1tZWQgb24gYSBwbGF0Zm9ybSBiYXNpcyBmcm9tIGEgdGFibGUg dGhhdCBpcwo+Pj4+Pj4gZ2VuZXJhdGVkCj4+Pj4+Pj4+ICsgKiBmcm9tIHRoZSBvbmUgdGhhdCBo YXMgYmVlbiBhZ3JlZWQgYnkgdGhlIGRpZmZlcmVudCByZXNwb25zaWJsZQo+Pj4+Pj4gcGFydGll cy4gVGhpcwo+Pj4+Pj4+PiArICogdGFibGVzIChvbmUgcGVyIHN1cHBvcnRlZCBwbGF0Zm9ybSkg aXMgZGVmaW5lZCBpbiBpbnRlbF9tb2NzLmMgYW5kIGlzCj4+Pj4+Pj4+ICsgKiBwcm9ncmFtbWVk IGluIHRoZSBmaXJzdCBiYXRjaCBhZnRlciB0aGUgY29udGV4dCBpcyBsb2FkZWQgKHdpdGggdGhl Cj4+Pj4+PiBoYXJkd2FyZQo+Pj4+Pj4+PiArICogd29ya2Fyb3VuZHMpLiBUaGlzIHdpbGwgdGhl biBsZXQgdGhlIHVzdWFsIGNvbnRleHQgaGFuZGxpbmcga2VlcCB0aGUKPj4+Pj4+IE1PQ1MgaW4K Pj4+Pj4+Pj4gKyAqIHN0ZXAuCj4+Pj4+Pj4+ICsgKi8KPj4+Pj4+Pj4gKwo+Pj4+Pj4+PiArI2lu Y2x1ZGUgPGRybS9kcm1QLmg+Cj4+Pj4+Pj4+ICsjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPj4+Pj4+ Pj4gKwo+Pj4+Pj4+PiAraW50IGdlbjlfcHJvZ3JhbV9tb2NzKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKnJpbmcsCj4+Pj4+Pj4+ICsJCQlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4KTsKPj4+Pj4+ Pj4gKwo+Pj4+Pj4+PiArI2VuZGlmCj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4gLS0KPj4+Pj4+Pj4gMS45 LjEKPj4+Pj4+Pj4KPj4+Pj4+Pj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KPj4+Pj4+Pj4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+Pj4+Pj4+PiBJbnRl bC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4+Pj4+Pj4+IGh0dHA6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKPj4+Pj4+Pgo+Pj4+Pj4KPj4+Pj4+ IC0tCj4+Pj4+PiAgICBQZXRlciBBbnRvaW5lIChBbmRyb2lkIEdyYXBoaWNzIERyaXZlciBTb2Z0 d2FyZSBFbmdpbmVlcikKPj4+Pj4+ICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+Pj4+Pj4gICAgSW50ZWwgQ29y cG9yYXRpb24gKFVLKSBMaW1pdGVkCj4+Pj4+PiAgICBSZWdpc3RlcmVkIE5vLiAxMTM0OTQ1IChF bmdsYW5kKQo+Pj4+Pj4gICAgUmVnaXN0ZXJlZCBPZmZpY2U6IFBpcGVycyBXYXksIFN3aW5kb24g U04zIDFSSgo+Pj4+Pj4gICAgVkFUIE5vOiA4NjAgMjE3MyA0Nwo+Pj4+Pj4gX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPj4+Pj4+IEludGVsLWdmeCBtYWls aW5nIGxpc3QKPj4+Pj4+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPj4+Pj4+IGh0 dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKPj4+ Pj4+Cj4+Pj4+Cj4+Pj4+IC0tCj4+Pj4+ICAgICBQZXRlciBBbnRvaW5lIChBbmRyb2lkIEdyYXBo aWNzIERyaXZlciBTb2Z0d2FyZSBFbmdpbmVlcikKPj4+Pj4gICAgIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+Pj4+ PiAgICAgSW50ZWwgQ29ycG9yYXRpb24gKFVLKSBMaW1pdGVkCj4+Pj4+ICAgICBSZWdpc3RlcmVk IE5vLiAxMTM0OTQ1IChFbmdsYW5kKQo+Pj4+PiAgICAgUmVnaXN0ZXJlZCBPZmZpY2U6IFBpcGVy cyBXYXksIFN3aW5kb24gU04zIDFSSgo+Pj4+PiAgICAgVkFUIE5vOiA4NjAgMjE3MyA0Nwo+Pj4+ IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4+Pj4gSW50 ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+Pj4+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK Pj4+PiBodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwt Z2Z4Cj4+Pgo+Pgo+PiAtLQo+PiAgICAgUGV0ZXIgQW50b2luZSAoQW5kcm9pZCBHcmFwaGljcyBE cml2ZXIgU29mdHdhcmUgRW5naW5lZXIpCj4+ICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPj4gICAgIEludGVs IENvcnBvcmF0aW9uIChVSykgTGltaXRlZAo+PiAgICAgUmVnaXN0ZXJlZCBOby4gMTEzNDk0NSAo RW5nbGFuZCkKPj4gICAgIFJlZ2lzdGVyZWQgT2ZmaWNlOiBQaXBlcnMgV2F5LCBTd2luZG9uIFNO MyAxUkoKPj4gICAgIFZBVCBObzogODYwIDIxNzMgNDcKPgoKLS0KICAgIFBldGVyIEFudG9pbmUg KEFuZHJvaWQgR3JhcGhpY3MgRHJpdmVyIFNvZnR3YXJlIEVuZ2luZWVyKQogICAgLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiAgICBJbnRlbCBDb3Jwb3JhdGlvbiAoVUspIExpbWl0ZWQKICAgIFJlZ2lzdGVyZWQgTm8u IDExMzQ5NDUgKEVuZ2xhbmQpCiAgICBSZWdpc3RlcmVkIE9mZmljZTogUGlwZXJzIFdheSwgU3dp bmRvbiBTTjMgMVJKCiAgICBWQVQgTm86IDg2MCAyMTczIDQ3Cl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==