From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Zhang, Jerry (Junwei)" Subject: Re: [PATCH 046/100] drm/amdgpu: Add GMC 9.0 support Date: Thu, 23 Mar 2017 10:54:46 +0800 Message-ID: <58D338F6.1090607@amd.com> References: <1490041835-11255-1-git-send-email-alexander.deucher@amd.com> <1490041835-11255-32-git-send-email-alexander.deucher@amd.com> <58D33609.3060304@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: Alex Deucher Cc: Alex Deucher , amd-gfx list , Alex Xie T24gMDMvMjMvMjAxNyAxMDo1MyBBTSwgQWxleCBEZXVjaGVyIHdyb3RlOgo+IE9uIFdlZCwgTWFy IDIyLCAyMDE3IGF0IDEwOjQyIFBNLCBaaGFuZywgSmVycnkgKEp1bndlaSkKPiA8SmVycnkuWmhh bmdAYW1kLmNvbT4gd3JvdGU6Cj4+IEhpIEFsZXgsCj4+Cj4+IEkgcmVtZW1iZXIgd2UgaGFkIGEg cGF0Y2ggdG8gcmVtb3ZlIHRoZSBGQiBsb2NhdGlvbiBwcm9ncmFtbWluZyBpbgo+PiBnbWMvdm1o dWIuCj4+IEkgc2F3IGl0J3Mgbm90IGluIGdtYyB2OSBpbiB0aGlzIHBhdGNoLCBidXQgcHJlLWdt Y3Y5IHN0aWxsIHByb2dyYW0gRkIKPj4gcmVnaXN0ZXIuCj4+Cj4+IElzIHRoYXQgYW55IG1pc3Np bmcgZm9yIHN5bmMgaGVyZT8KPj4gT3IgaXQncyBvbmx5IHN1cHBvcnRlZCBmb3IgZ21jIHY5IG5v dy4KPgo+IEkgbmV2ZXIgbGFuZGVkIHRoZSBwYXRjaGVzIGZvciBvbGRlciBhc2ljcyBiZWNhdXNl IEkgY291bGRuJ3QgZ2V0IHZjZQo+IHRvIHdvcmsgcHJvcGVybHkgd2l0aCBkYWwgZGlzYWJsZWQg d2l0aG91dCByZXByb2dyYW1taW5nIHRoZSBmYgo+IGxvY2F0aW9uLgoKVGhhbmtzLCBnb3QgdGhl IGxhdGVzdCBpbmZvLgoKSmVycnkKCj4KPiBBbGV4Cj4KPgo+Pgo+PiBKZXJyeQo+Pgo+PiBPbiAw My8yMS8yMDE3IDA0OjI5IEFNLCBBbGV4IERldWNoZXIgd3JvdGU6Cj4+Pgo+Pj4gRnJvbTogQWxl eCBYaWUgPEFsZXhCaW4uWGllQGFtZC5jb20+Cj4+Pgo+Pj4gT24gU09DLTE1IHBhcnRzLCB0aGUg R01DIChHcmFwaGljcyBNZW1vcnkgQ29udHJvbGxlcikgY29uc2lzdHMKPj4+IG9mIHR3byBodWJz OiBHRlggKGdyYXBoaWNzIGFuZCBjb21wdXRlKSBhbmQgTU0gKHNkbWEsIHV2ZCwgdmNlKS4KPj4+ Cj4+PiBTaWduZWQtb2ZmLWJ5OiBBbGV4IFhpZSA8QWxleEJpbi5YaWVAYW1kLmNvbT4KPj4+IFJl dmlld2VkLWJ5OiBBbGV4IERldWNoZXIgPGFsZXhhbmRlci5kZXVjaGVyQGFtZC5jb20+Cj4+PiBT aWduZWQtb2ZmLWJ5OiBBbGV4IERldWNoZXIgPGFsZXhhbmRlci5kZXVjaGVyQGFtZC5jb20+Cj4+ PiAtLS0KPj4+ICAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlICAgICAgfCAg IDYgKy0KPj4+ICAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdS5oICAgICAgfCAg MzAgKysKPj4+ICAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jICAgfCAg MjggKy0KPj4+ICAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeGh1Yl92MV8wLmMgfCA0 NDcgKysrKysrKysrKysrKysrKysKPj4+ICAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dm eGh1Yl92MV8wLmggfCAgMzUgKysKPj4+ICAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dt Y192OV8wLmMgICAgfCA4MjYKPj4+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4+ ICAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dtY192OV8wLmggICAgfCAgMzAgKysKPj4+ ICAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L21taHViX3YxXzAuYyAgfCA1ODUgKysrKysr KysrKysrKysrKysrKysrKwo+Pj4gICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvbW1odWJf djFfMC5oICB8ICAzNSArKwo+Pj4gICAgZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FtZF9z aGFyZWQuaCB8ICAgMiArCj4+PiAgICAxMCBmaWxlcyBjaGFuZ2VkLCAyMDE2IGluc2VydGlvbnMo KyksIDggZGVsZXRpb25zKC0pCj4+PiAgICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvZ2Z4aHViX3YxXzAuYwo+Pj4gICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeGh1Yl92MV8wLmgKPj4+ICAgIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nbWNfdjlfMC5jCj4+PiAgICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZ21jX3Y5XzAuaAo+Pj4g ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L21taHViX3Yx XzAuYwo+Pj4gICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1 L21taHViX3YxXzAuaAo+Pj4KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9NYWtlZmlsZQo+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9NYWtlZmlsZQo+ Pj4gaW5kZXggNjk4MjNlOC4uYjUwNDZmZCAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L01ha2VmaWxlCj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9NYWtlZmlsZQo+Pj4gQEAgLTQ1LDcgKzQ1LDggQEAgYW1kZ3B1LXkgKz0gXAo+Pj4gICAgIyBh ZGQgR01DIGJsb2NrCj4+PiAgICBhbWRncHUteSArPSBcCj4+PiAgICAgICAgICBnbWNfdjdfMC5v IFwKPj4+IC0gICAgICAgZ21jX3Y4XzAubwo+Pj4gKyAgICAgICBnbWNfdjhfMC5vIFwKPj4+ICsg ICAgICAgZ2Z4aHViX3YxXzAubyBtbWh1Yl92MV8wLm8gZ21jX3Y5XzAubwo+Pj4KPj4+ICAgICMg YWRkIElIIGJsb2NrCj4+PiAgICBhbWRncHUteSArPSBcCj4+PiBAQCAtNzQsNyArNzUsOCBAQCBh bWRncHUteSArPSBcCj4+PiAgICAjIGFkZCBhc3luYyBETUEgYmxvY2sKPj4+ICAgIGFtZGdwdS15 ICs9IFwKPj4+ICAgICAgICAgIHNkbWFfdjJfNC5vIFwKPj4+IC0gICAgICAgc2RtYV92M18wLm8K Pj4+ICsgICAgICAgc2RtYV92M18wLm8gXAo+Pj4gKyAgICAgICBzZG1hX3Y0XzAubwo+Pj4KPj4+ ICAgICMgYWRkIFVWRCBibG9jawo+Pj4gICAgYW1kZ3B1LXkgKz0gXAo+Pj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdS5oCj4+PiBiL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdS5oCj4+PiBpbmRleCBhYWRlZDhkLi5kNzI1N2I2IDEwMDY0NAo+ Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1LmgKPj4+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdS5oCj4+PiBAQCAtMTIzLDYgKzEyMywxMSBA QCBleHRlcm4gaW50IGFtZGdwdV9wYXJhbV9idWZfcGVyX3NlOwo+Pj4gICAgLyogbWF4IG51bWJl ciBvZiBJUCBpbnN0YW5jZXMgKi8KPj4+ICAgICNkZWZpbmUgQU1ER1BVX01BWF9TRE1BX0lOU1RB TkNFUyAgICAgICAgICAgICAyCj4+Pgo+Pj4gKy8qIG1heCBudW1iZXIgb2YgVk1IVUIgKi8KPj4+ ICsjZGVmaW5lIEFNREdQVV9NQVhfVk1IVUJTICAgICAgICAgICAgICAgICAgICAgIDIKPj4+ICsj ZGVmaW5lIEFNREdQVV9NTUhVQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKPj4+ICsjZGVm aW5lIEFNREdQVV9HRlhIVUIgICAgICAgICAgICAgICAgICAgICAgICAgIDEKPj4+ICsKPj4+ICAg IC8qIGhhcmRjb2RlIHRoYXQgbGltaXQgZm9yIG5vdyAqLwo+Pj4gICAgI2RlZmluZSBBTURHUFVf VkFfUkVTRVJWRURfU0laRSAgICAgICAgICAgICAgICAgICAgICAgKDggPDwgMjApCj4+Pgo+Pj4g QEAgLTMxMCw2ICszMTUsMTIgQEAgc3RydWN0IGFtZGdwdV9nYXJ0X2Z1bmNzIHsKPj4+ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZmxhZ3MpOwo+Pj4gICAg fTsKPj4+Cj4+PiArLyogcHJvdmlkZWQgYnkgdGhlIG1jIGJsb2NrICovCj4+PiArc3RydWN0IGFt ZGdwdV9tY19mdW5jcyB7Cj4+PiArICAgICAgIC8qIGFkanVzdCBtYyBhZGRyIGluIGZiIGZvciBB UFUgY2FzZSAqLwo+Pj4gKyAgICAgICB1NjQgKCphZGp1c3RfbWNfYWRkcikoc3RydWN0IGFtZGdw dV9kZXZpY2UgKmFkZXYsIHU2NCBhZGRyKTsKPj4+ICt9Owo+Pj4gKwo+Pj4gICAgLyogcHJvdmlk ZWQgYnkgdGhlIGloIGJsb2NrICovCj4+PiAgICBzdHJ1Y3QgYW1kZ3B1X2loX2Z1bmNzIHsKPj4+ ICAgICAgICAgIC8qIHJpbmcgcmVhZC93cml0ZSBwdHIgaGFuZGxpbmcsIGNhbGxlZCBmcm9tIGlu dGVycnVwdCBjb250ZXh0ICovCj4+PiBAQCAtNTU5LDYgKzU3MCwyMSBAQCBpbnQgYW1kZ3B1X2dh cnRfYmluZChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPj4+IHVpbnQ2NF90IG9mZnNldCwK Pj4+ICAgIGludCBhbWRncHVfdHRtX3JlY292ZXJfZ2FydChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq YWRldik7Cj4+Pgo+Pj4gICAgLyoKPj4+ICsgKiBWTUhVQiBzdHJ1Y3R1cmVzLCBmdW5jdGlvbnMg JiBoZWxwZXJzCj4+PiArICovCj4+PiArc3RydWN0IGFtZGdwdV92bWh1YiB7Cj4+PiArICAgICAg IHVpbnQzMl90ICAgICAgICBjdHgwX3B0Yl9hZGRyX2xvMzI7Cj4+PiArICAgICAgIHVpbnQzMl90 ICAgICAgICBjdHgwX3B0Yl9hZGRyX2hpMzI7Cj4+PiArICAgICAgIHVpbnQzMl90ICAgICAgICB2 bV9pbnZfZW5nMF9yZXE7Cj4+PiArICAgICAgIHVpbnQzMl90ICAgICAgICB2bV9pbnZfZW5nMF9h Y2s7Cj4+PiArICAgICAgIHVpbnQzMl90ICAgICAgICB2bV9jb250ZXh0MF9jbnRsOwo+Pj4gKyAg ICAgICB1aW50MzJfdCAgICAgICAgdm1fbDJfcHJvX2ZhdWx0X3N0YXR1czsKPj4+ICsgICAgICAg dWludDMyX3QgICAgICAgIHZtX2wyX3Byb19mYXVsdF9jbnRsOwo+Pj4gKyAgICAgICB1aW50MzJf dCAgICAgICAgKCpnZXRfaW52YWxpZGF0ZV9yZXEpKHVuc2lnbmVkIGludCB2bV9pZCk7Cj4+PiAr ICAgICAgIHVpbnQzMl90ICAgICAgICAoKmdldF92bV9wcm90ZWN0aW9uX2JpdHMpKHZvaWQpOwo+ Pj4gK307Cj4+PiArCj4+PiArLyoKPj4+ICAgICAqIEdQVSBNQyBzdHJ1Y3R1cmVzLCBmdW5jdGlv bnMgJiBoZWxwZXJzCj4+PiAgICAgKi8KPj4+ICAgIHN0cnVjdCBhbWRncHVfbWMgewo+Pj4gQEAg LTU5MSw2ICs2MTcsOSBAQCBzdHJ1Y3QgYW1kZ3B1X21jIHsKPj4+ICAgICAgICAgIHU2NCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRfYXBlcnR1cmVfZW5kOwo+Pj4g ICAgICAgICAgdTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXZhdGVf YXBlcnR1cmVfc3RhcnQ7Cj4+PiAgICAgICAgICB1NjQgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcHJpdmF0ZV9hcGVydHVyZV9lbmQ7Cj4+PiArICAgICAgIC8qIHByb3RlY3Rz IGNvbmN1cnJlbnQgaW52YWxpZGF0aW9uICovCj4+PiArICAgICAgIHNwaW5sb2NrX3QgICAgICAg ICAgICAgIGludmFsaWRhdGVfbG9jazsKPj4+ICsgICAgICAgY29uc3Qgc3RydWN0IGFtZGdwdV9t Y19mdW5jcyAqbWNfZnVuY3M7Cj4+PiAgICB9Owo+Pj4KPj4+ICAgIC8qCj4+PiBAQCAtMTQ3OSw2 ICsxNTA4LDcgQEAgc3RydWN0IGFtZGdwdV9kZXZpY2Ugewo+Pj4gICAgICAgICAgc3RydWN0IGFt ZGdwdV9nYXJ0ICAgICAgICAgICAgICBnYXJ0Owo+Pj4gICAgICAgICAgc3RydWN0IGFtZGdwdV9k dW1teV9wYWdlICAgICAgICBkdW1teV9wYWdlOwo+Pj4gICAgICAgICAgc3RydWN0IGFtZGdwdV92 bV9tYW5hZ2VyICAgICAgICB2bV9tYW5hZ2VyOwo+Pj4gKyAgICAgICBzdHJ1Y3QgYW1kZ3B1X3Zt aHViICAgICAgICAgICAgIHZtaHViW0FNREdQVV9NQVhfVk1IVUJTXTsKPj4+Cj4+PiAgICAgICAg ICAvKiBtZW1vcnkgbWFuYWdlbWVudCAqLwo+Pj4gICAgICAgICAgc3RydWN0IGFtZGdwdV9tbWFu ICAgICAgICAgICAgICBtbWFuOwo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV92bS5jCj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdw dV92bS5jCj4+PiBpbmRleCBkZjYxNWQ3Li40N2E4MDgwIDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtLmMKPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jCj4+PiBAQCAtMzc1LDYgKzM3NSwxNiBAQCBzdGF0aWMg Ym9vbCBhbWRncHVfdm1fcmluZ19oYXNfY29tcHV0ZV92bV9idWcoc3RydWN0Cj4+PiBhbWRncHVf cmluZyAqcmluZykKPj4+ICAgICAgICAgIHJldHVybiBmYWxzZTsKPj4+ICAgIH0KPj4+Cj4+PiAr c3RhdGljIHU2NCBhbWRncHVfdm1fYWRqdXN0X21jX2FkZHIoc3RydWN0IGFtZGdwdV9kZXZpY2Ug KmFkZXYsIHU2NAo+Pj4gbWNfYWRkcikKPj4+ICt7Cj4+PiArICAgICAgIHU2NCBhZGRyID0gbWNf YWRkcjsKPj4+ICsKPj4+ICsgICAgICAgaWYgKGFkZXYtPm1jLm1jX2Z1bmNzICYmIGFkZXYtPm1j Lm1jX2Z1bmNzLT5hZGp1c3RfbWNfYWRkcikKPj4+ICsgICAgICAgICAgICAgICBhZGRyID0gYWRl di0+bWMubWNfZnVuY3MtPmFkanVzdF9tY19hZGRyKGFkZXYsIGFkZHIpOwo+Pj4gKwo+Pj4gKyAg ICAgICByZXR1cm4gYWRkcjsKPj4+ICt9Cj4+PiArCj4+PiAgICAvKioKPj4+ICAgICAqIGFtZGdw dV92bV9mbHVzaCAtIGhhcmR3YXJlIGZsdXNoIHRoZSB2bQo+Pj4gICAgICoKPj4+IEBAIC00MDUs OSArNDE1LDEwIEBAIGludCBhbWRncHVfdm1fZmx1c2goc3RydWN0IGFtZGdwdV9yaW5nICpyaW5n LCBzdHJ1Y3QKPj4+IGFtZGdwdV9qb2IgKmpvYikKPj4+ICAgICAgICAgIGlmIChyaW5nLT5mdW5j cy0+ZW1pdF92bV9mbHVzaCAmJiAoam9iLT52bV9uZWVkc19mbHVzaCB8fAo+Pj4gICAgICAgICAg ICAgIGFtZGdwdV92bV9pc19ncHVfcmVzZXQoYWRldiwgaWQpKSkgewo+Pj4gICAgICAgICAgICAg ICAgICBzdHJ1Y3QgZmVuY2UgKmZlbmNlOwo+Pj4gKyAgICAgICAgICAgICAgIHU2NCBwZF9hZGRy ID0gYW1kZ3B1X3ZtX2FkanVzdF9tY19hZGRyKGFkZXYsCj4+PiBqb2ItPnZtX3BkX2FkZHIpOwo+ Pj4KPj4+IC0gICAgICAgICAgICAgICB0cmFjZV9hbWRncHVfdm1fZmx1c2goam9iLT52bV9wZF9h ZGRyLCByaW5nLT5pZHgsCj4+PiBqb2ItPnZtX2lkKTsKPj4+IC0gICAgICAgICAgICAgICBhbWRn cHVfcmluZ19lbWl0X3ZtX2ZsdXNoKHJpbmcsIGpvYi0+dm1faWQsCj4+PiBqb2ItPnZtX3BkX2Fk ZHIpOwo+Pj4gKyAgICAgICAgICAgICAgIHRyYWNlX2FtZGdwdV92bV9mbHVzaChwZF9hZGRyLCBy aW5nLT5pZHgsIGpvYi0+dm1faWQpOwo+Pj4gKyAgICAgICAgICAgICAgIGFtZGdwdV9yaW5nX2Vt aXRfdm1fZmx1c2gocmluZywgam9iLT52bV9pZCwgcGRfYWRkcik7Cj4+Pgo+Pj4gICAgICAgICAg ICAgICAgICByID0gYW1kZ3B1X2ZlbmNlX2VtaXQocmluZywgJmZlbmNlKTsKPj4+ICAgICAgICAg ICAgICAgICAgaWYgKHIpCj4+PiBAQCAtNjQzLDE1ICs2NTQsMTggQEAgaW50IGFtZGdwdV92bV91 cGRhdGVfcGFnZV9kaXJlY3Rvcnkoc3RydWN0Cj4+PiBhbWRncHVfZGV2aWNlICphZGV2LAo+Pj4g ICAgICAgICAgICAgICAgICAgICAgKGNvdW50ID09IEFNREdQVV9WTV9NQVhfVVBEQVRFX1NJWkUp KSB7Cj4+Pgo+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCkgewo+Pj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBwdF9hZGRyID0KPj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbWRncHVfdm1fYWRqdXN0X21jX2Fk ZHIoYWRldiwKPj4+IGxhc3RfcHQpOwo+Pj4gKwo+Pj4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKHNoYWRvdykKPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYW1kZ3B1X3ZtX2RvX3NldF9wdGVzKCZwYXJhbXMsCj4+PiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X3No YWRvdywKPj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbGFzdF9wdCwKPj4+IGNvdW50LAo+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdF9hZGRyLAo+Pj4g Y291bnQsCj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbmNyLAo+Pj4KPj4+IEFNREdQVV9QVEVfVkFMSUQpOwo+Pj4KPj4+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFtZGdwdV92bV9kb19zZXRfcHRlcygm cGFyYW1zLCBsYXN0X3BkZSwKPj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGxhc3RfcHQsIGNvdW50LAo+Pj4gaW5jciwKPj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0X2FkZHIsIGNv dW50LAo+Pj4gaW5jciwKPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBBTURHUFVfUFRFX1ZBTElEKTsKPj4+ICAgICAgICAgICAgICAgICAg ICAgICAgICB9Cj4+Pgo+Pj4gQEAgLTY2NSwxMSArNjc5LDEzIEBAIGludCBhbWRncHVfdm1fdXBk YXRlX3BhZ2VfZGlyZWN0b3J5KHN0cnVjdAo+Pj4gYW1kZ3B1X2RldmljZSAqYWRldiwKPj4+ICAg ICAgICAgIH0KPj4+Cj4+PiAgICAgICAgICBpZiAoY291bnQpIHsKPj4+ICsgICAgICAgICAgICAg ICB1aW50NjRfdCBwdF9hZGRyID0gYW1kZ3B1X3ZtX2FkanVzdF9tY19hZGRyKGFkZXYsCj4+PiBs YXN0X3B0KTsKPj4+ICsKPj4+ICAgICAgICAgICAgICAgICAgaWYgKHZtLT5wYWdlX2RpcmVjdG9y eS0+c2hhZG93KQo+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgYW1kZ3B1X3ZtX2RvX3NldF9w dGVzKCZwYXJhbXMsIGxhc3Rfc2hhZG93LAo+Pj4gbGFzdF9wdCwKPj4+ICsgICAgICAgICAgICAg ICAgICAgICAgIGFtZGdwdV92bV9kb19zZXRfcHRlcygmcGFyYW1zLCBsYXN0X3NoYWRvdywKPj4+ IHB0X2FkZHIsCj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvdW50LCBpbmNyLAo+Pj4gQU1ER1BVX1BURV9WQUxJRCk7Cj4+Pgo+Pj4gLSAgICAgICAg ICAgICAgIGFtZGdwdV92bV9kb19zZXRfcHRlcygmcGFyYW1zLCBsYXN0X3BkZSwgbGFzdF9wdCwK Pj4+ICsgICAgICAgICAgICAgICBhbWRncHVfdm1fZG9fc2V0X3B0ZXMoJnBhcmFtcywgbGFzdF9w ZGUsIHB0X2FkZHIsCj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b3VudCwgaW5jciwgQU1ER1BVX1BURV9WQUxJRCk7Cj4+PiAgICAgICAgICB9Cj4+Pgo+Pj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeGh1Yl92MV8wLmMKPj4+IGIv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZ2Z4aHViX3YxXzAuYwo+Pj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPj4+IGluZGV4IDAwMDAwMDAuLjFmZjAxOWMKPj4+IC0tLSAvZGV2L251bGwKPj4+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeGh1Yl92MV8wLmMKPj4+IEBAIC0w LDAgKzEsNDQ3IEBACj4+PiArLyoKPj4+ICsgKiBDb3B5cmlnaHQgMjAxNiBBZHZhbmNlZCBNaWNy byBEZXZpY2VzLCBJbmMuCj4+PiArICoKPj4+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFu dGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKPj4+IGEKPj4+ICsg KiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl cyAodGhlCj4+PiAiU29mdHdhcmUiKSwKPj4+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3 aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dAo+Pj4gbGltaXRhdGlvbgo+Pj4g KyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0 cmlidXRlLAo+Pj4gc3VibGljZW5zZSwKPj4+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhl IFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPj4+ICsgKiBTb2Z0 d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25k aXRpb25zOgo+Pj4gKyAqCj4+PiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRo aXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKPj4+IGluY2x1ZGVkIGluCj4+PiArICogYWxs IGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCj4+PiArICoK Pj4+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5U WSBPRiBBTlkgS0lORCwKPj4+IEVYUFJFU1MgT1IKPj4+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcg QlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCj4+PiBNRVJDSEFOVEFCSUxJVFks Cj4+PiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF TUVOVC4gIElOIE5PIEVWRU5UCj4+PiBTSEFMTAo+Pj4gKyAqIFRIRSBDT1BZUklHSFQgSE9MREVS KFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUwo+Pj4gT1IK Pj4+ICsgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU LCBUT1JUIE9SIE9USEVSV0lTRSwKPj4+ICsgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKPj4+ICsgKiBPVEhFUiBE RUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCj4+PiArICoKPj4+ICsgKi8KPj4+ICsjaW5jbHVkZSAi YW1kZ3B1LmgiCj4+PiArI2luY2x1ZGUgImdmeGh1Yl92MV8wLmgiCj4+PiArCj4+PiArI2luY2x1 ZGUgInZlZ2ExMC9zb2MxNWlwLmgiCj4+PiArI2luY2x1ZGUgInZlZ2ExMC9HQy9nY185XzBfb2Zm c2V0LmgiCj4+PiArI2luY2x1ZGUgInZlZ2ExMC9HQy9nY185XzBfc2hfbWFzay5oIgo+Pj4gKyNp bmNsdWRlICJ2ZWdhMTAvR0MvZ2NfOV8wX2RlZmF1bHQuaCIKPj4+ICsjaW5jbHVkZSAidmVnYTEw L3ZlZ2ExMF9lbnVtLmgiCj4+PiArCj4+PiArI2luY2x1ZGUgInNvYzE1X2NvbW1vbi5oIgo+Pj4g Kwo+Pj4gK2ludCBnZnhodWJfdjFfMF9nYXJ0X2VuYWJsZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq YWRldikKPj4+ICt7Cj4+PiArICAgICAgIHUzMiB0bXA7Cj4+PiArICAgICAgIHU2NCB2YWx1ZTsK Pj4+ICsgICAgICAgdTMyIGk7Cj4+PiArCj4+PiArICAgICAgIC8qIFByb2dyYW0gTUMuICovCj4+ PiArICAgICAgIC8qIFVwZGF0ZSBjb25maWd1cmF0aW9uICovCj4+PiArICAgICAgIFdSRUczMihT T0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbU1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9MT1dfQUREUiks Cj4+PiArICAgICAgICAgICAgICAgYWRldi0+bWMudnJhbV9zdGFydCA+PiAxOCk7Cj4+PiArICAg ICAgIFdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbU1DX1ZNX1NZU1RFTV9BUEVSVFVS RV9ISUdIX0FERFIpLAo+Pj4gKyAgICAgICAgICAgICAgIGFkZXYtPm1jLnZyYW1fZW5kID4+IDE4 KTsKPj4+ICsKPj4+ICsgICAgICAgdmFsdWUgPSBhZGV2LT52cmFtX3NjcmF0Y2guZ3B1X2FkZHIg LSBhZGV2LT5tYy52cmFtX3N0YXJ0Cj4+PiArICAgICAgICAgICAgICAgKyBhZGV2LT52bV9tYW5h Z2VyLnZyYW1fYmFzZV9vZmZzZXQ7Cj4+PiArICAgICAgIFdSRUczMihTT0MxNV9SRUdfT0ZGU0VU KEdDLCAwLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtbU1DX1ZNX1NZU1RF TV9BUEVSVFVSRV9ERUZBVUxUX0FERFJfTFNCKSwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHUzMikodmFsdWUgPj4gMTIpKTsKPj4+ICsgICAgICAgV1JFRzMyKFNPQzE1X1JF R19PRkZTRVQoR0MsIDAsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1tTUNf Vk1fU1lTVEVNX0FQRVJUVVJFX0RFRkFVTFRfQUREUl9NU0IpLAo+Pj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAodTMyKSh2YWx1ZSA+PiA0NCkpOwo+Pj4gKwo+Pj4gKyAgICAgICAv KiBEaXNhYmxlIEFHUC4gKi8KPj4+ICsgICAgICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0Ms IDAsIG1tTUNfVk1fQUdQX0JBU0UpLCAwKTsKPj4+ICsgICAgICAgV1JFRzMyKFNPQzE1X1JFR19P RkZTRVQoR0MsIDAsIG1tTUNfVk1fQUdQX1RPUCksIDApOwo+Pj4gKyAgICAgICBXUkVHMzIoU09D MTVfUkVHX09GRlNFVChHQywgMCwgbW1NQ19WTV9BR1BfQk9UKSwgMHhGRkZGRkZGRik7Cj4+PiAr Cj4+PiArICAgICAgIC8qIEdBUlQgRW5hYmxlLiAqLwo+Pj4gKwo+Pj4gKyAgICAgICAvKiBTZXR1 cCBUTEIgY29udHJvbCAqLwo+Pj4gKyAgICAgICB0bXAgPSBSUkVHMzIoU09DMTVfUkVHX09GRlNF VChHQywgMCwgbW1NQ19WTV9NWF9MMV9UTEJfQ05UTCkpOwo+Pj4gKyAgICAgICB0bXAgPSBSRUdf U0VUX0ZJRUxEKHRtcCwgTUNfVk1fTVhfTDFfVExCX0NOVEwsIEVOQUJMRV9MMV9UTEIsIDEpOwo+ Pj4gKyAgICAgICB0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwKPj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTUNfVk1fTVhfTDFfVExCX0NOVEwsCj4+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFNZU1RFTV9BQ0NFU1NfTU9ERSwKPj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMyk7Cj4+PiArICAgICAgIHRtcCA9IFJFR19TRVRfRklFTEQodG1wLAo+ Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQ19WTV9NWF9MMV9UTEJfQ05UTCwK Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5BQkxFX0FEVkFOQ0VEX0RSSVZF Ul9NT0RFTCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSk7Cj4+PiArICAg ICAgIHRtcCA9IFJFR19TRVRfRklFTEQodG1wLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBNQ19WTV9NWF9MMV9UTEJfQ05UTCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgU1lTVEVNX0FQRVJUVVJFX1VOTUFQUEVEX0FDQ0VTUywKPj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMCk7Cj4+PiArICAgICAgIHRtcCA9IFJFR19TRVRfRklFTEQo dG1wLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQ19WTV9NWF9MMV9UTEJf Q05UTCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUNPX0JJVFMsCj4+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOwo+Pj4gKyAgICAgICB0bXAgPSBSRUdf U0VUX0ZJRUxEKHRtcCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUNfVk1f TVhfTDFfVExCX0NOVEwsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UWVBF LAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVFlQRV9VQyk7LyogWFhYIGZv ciBlbXVsYXRpb24uICovCj4+PiArICAgICAgIHRtcCA9IFJFR19TRVRfRklFTEQodG1wLAo+Pj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQ19WTV9NWF9MMV9UTEJfQ05UTCwKPj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVRDX0VOLAo+Pj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAxKTsKPj4+ICsgICAgICAgV1JFRzMyKFNPQzE1X1JFR19PRkZT RVQoR0MsIDAsIG1tTUNfVk1fTVhfTDFfVExCX0NOVEwpLCB0bXApOwo+Pj4gKwo+Pj4gKyAgICAg ICAvKiBTZXR1cCBMMiBjYWNoZSAqLwo+Pj4gKyAgICAgICB0bXAgPSBSUkVHMzIoU09DMTVfUkVH X09GRlNFVChHQywgMCwgbW1WTV9MMl9DTlRMKSk7Cj4+PiArICAgICAgIHRtcCA9IFJFR19TRVRf RklFTEQodG1wLCBWTV9MMl9DTlRMLCBFTkFCTEVfTDJfQ0FDSEUsIDEpOwo+Pj4gKyAgICAgICB0 bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVk1fTDJfQ05UTCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5BQkxF X0wyX0ZSQUdNRU5UX1BST0NFU1NJTkcsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDApOwo+Pj4gKyAgICAgICB0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwKPj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVk1fTDJfQ05UTCwKPj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTDJfUERFMF9DQUNIRV9UQUdfR0VORVJBVElPTl9NT0RFLAo+Pj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsvKiBYWFggZm9yIGVtdWxhdGlvbiwgUmVm ZXIgdG8gY2xvc2VkCj4+PiBzb3VyY2UgY29kZS4qLwo+Pj4gKyAgICAgICB0bXAgPSBSRUdfU0VU X0ZJRUxEKHRtcCwgVk1fTDJfQ05UTCwgUERFX0ZBVUxUX0NMQVNTSUZJQ0FUSU9OLCAxKTsKPj4+ ICsgICAgICAgdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsCj4+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZNX0wyX0NOVEwsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIENPTlRFWFQxX0lERU5USVRZX0FDQ0VTU19NT0RFLAo+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAxKTsKPj4+ICsgICAgICAgdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsCj4+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZNX0wyX0NOVEwsCj4+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIElERU5USVRZX01PREVfRlJBR01FTlRfU0laRSwKPj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7Cj4+PiArICAgICAgIFdSRUczMihT T0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbVZNX0wyX0NOVEwpLCB0bXApOwo+Pj4gKwo+Pj4gKyAg ICAgICB0bXAgPSBSUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1WTV9MMl9DTlRMMikp Owo+Pj4gKyAgICAgICB0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgVk1fTDJfQ05UTDIsIElOVkFM SURBVEVfQUxMX0wxX1RMQlMsIDEpOwo+Pj4gKyAgICAgICB0bXAgPSBSRUdfU0VUX0ZJRUxEKHRt cCwgVk1fTDJfQ05UTDIsIElOVkFMSURBVEVfTDJfQ0FDSEUsIDEpOwo+Pj4gKyAgICAgICBXUkVH MzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1WTV9MMl9DTlRMMiksIHRtcCk7Cj4+PiArCj4+ PiArICAgICAgIHRtcCA9IG1tVk1fTDJfQ05UTDNfREVGQVVMVDsKPj4+ICsgICAgICAgV1JFRzMy KFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tVk1fTDJfQ05UTDMpLCB0bXApOwo+Pj4gKwo+Pj4g KyAgICAgICB0bXAgPSBSUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1WTV9MMl9DTlRM NCkpOwo+Pj4gKyAgICAgICB0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwKPj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICBWTV9MMl9DTlRMNCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICBWTUNfVEFQX1BERV9SRVFVRVNUX1BIWVNJQ0FMLAo+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIDApOwo+Pj4gKyAgICAgICB0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwKPj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICBWTV9MMl9DTlRMNCwKPj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICBWTUNfVEFQX1BURV9SRVFVRVNUX1BIWVNJQ0FMLAo+Pj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIDApOwo+Pj4gKyAgICAgICBXUkVHMzIoU09DMTVfUkVHX09GRlNF VChHQywgMCwgbW1WTV9MMl9DTlRMNCksIHRtcCk7Cj4+PiArCj4+PiArICAgICAgIC8qIHNldHVw IGNvbnRleHQwICovCj4+PiArICAgICAgIFdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLAo+ Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtbVZNX0NPTlRFWFQwX1BBR0VfVEFC TEVfU1RBUlRfQUREUl9MTzMyKSwKPj4+ICsgICAgICAgICAgICAgICAodTMyKShhZGV2LT5tYy5n dHRfc3RhcnQgPj4gMTIpKTsKPj4+ICsgICAgICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0Ms IDAsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1tVk1fQ09OVEVYVDBfUEFH RV9UQUJMRV9TVEFSVF9BRERSX0hJMzIpLAo+Pj4gKyAgICAgICAgICAgICAgICh1MzIpKGFkZXYt Pm1jLmd0dF9zdGFydCA+PiA0NCkpOwo+Pj4gKwo+Pj4gKyAgICAgICBXUkVHMzIoU09DMTVfUkVH X09GRlNFVChHQywgMCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW1WTV9D T05URVhUMF9QQUdFX1RBQkxFX0VORF9BRERSX0xPMzIpLAo+Pj4gKyAgICAgICAgICAgICAgICh1 MzIpKGFkZXYtPm1jLmd0dF9lbmQgPj4gMTIpKTsKPj4+ICsgICAgICAgV1JFRzMyKFNPQzE1X1JF R19PRkZTRVQoR0MsIDAsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1tVk1f Q09OVEVYVDBfUEFHRV9UQUJMRV9FTkRfQUREUl9ISTMyKSwKPj4+ICsgICAgICAgICAgICAgICAo dTMyKShhZGV2LT5tYy5ndHRfZW5kID4+IDQ0KSk7Cj4+PiArCj4+PiArICAgICAgIEJVR19PTihh ZGV2LT5nYXJ0LnRhYmxlX2FkZHIgJiAofjB4MDAwMEZGRkZGRkZGRjAwMFVMTCkpOwo+Pj4gKyAg ICAgICB2YWx1ZSA9IGFkZXYtPmdhcnQudGFibGVfYWRkciAtIGFkZXYtPm1jLnZyYW1fc3RhcnQK Pj4+ICsgICAgICAgICAgICAgICArIGFkZXYtPnZtX21hbmFnZXIudnJhbV9iYXNlX29mZnNldDsK Pj4+ICsgICAgICAgdmFsdWUgJj0gMHgwMDAwRkZGRkZGRkZGMDAwVUxMOwo+Pj4gKyAgICAgICB2 YWx1ZSB8PSAweDE7IC8qdmFsaWQgYml0Ki8KPj4+ICsKPj4+ICsgICAgICAgV1JFRzMyKFNPQzE1 X1JFR19PRkZTRVQoR0MsIDAsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1t Vk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9CQVNFX0FERFJfTE8zMiksCj4+PiArICAgICAgICAgICAg ICAgKHUzMil2YWx1ZSk7Cj4+PiArICAgICAgIFdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAw LAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtbVZNX0NPTlRFWFQwX1BBR0Vf VEFCTEVfQkFTRV9BRERSX0hJMzIpLAo+Pj4gKyAgICAgICAgICAgICAgICh1MzIpKHZhbHVlID4+ IDMyKSk7Cj4+PiArCj4+PiArICAgICAgIFdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLAo+ Pj4gKwo+Pj4gbW1WTV9MMl9QUk9URUNUSU9OX0ZBVUxUX0RFRkFVTFRfQUREUl9MTzMyKSwKPj4+ ICsgICAgICAgICAgICAgICAodTMyKShhZGV2LT5kdW1teV9wYWdlLmFkZHIgPj4gMTIpKTsKPj4+ ICsgICAgICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsCj4+PiArCj4+PiBtbVZNX0wy X1BST1RFQ1RJT05fRkFVTFRfREVGQVVMVF9BRERSX0hJMzIpLAo+Pj4gKyAgICAgICAgICAgICAg ICh1MzIpKGFkZXYtPmR1bW15X3BhZ2UuYWRkciA+PiA0NCkpOwo+Pj4gKwo+Pj4gKyAgICAgICB0 bXAgPSBSUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwKPj4+IG1tVk1fTDJfUFJPVEVDVElP Tl9GQVVMVF9DTlRMMikpOwo+Pj4gKyAgICAgICB0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgVk1f TDJfUFJPVEVDVElPTl9GQVVMVF9DTlRMMiwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICBBQ1RJVkVfUEFHRV9NSUdSQVRJT05fUFRFX1JFQURfUkVUUlksCj4+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgMSk7Cj4+PiArICAgICAgIFdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdD LCAwLCBtbVZNX0wyX1BST1RFQ1RJT05fRkFVTFRfQ05UTDIpLAo+Pj4gdG1wKTsKPj4+ICsKPj4+ ICsgICAgICAgdG1wID0gUlJFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tVk1fQ09OVEVY VDBfQ05UTCkpOwo+Pj4gKyAgICAgICB0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgVk1fQ09OVEVY VDBfQ05UTCwgRU5BQkxFX0NPTlRFWFQsIDEpOwo+Pj4gKyAgICAgICB0bXAgPSBSRUdfU0VUX0ZJ RUxEKHRtcCwgVk1fQ09OVEVYVDBfQ05UTCwgUEFHRV9UQUJMRV9ERVBUSCwgMCk7Cj4+PiArICAg ICAgIFdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbVZNX0NPTlRFWFQwX0NOVEwpLCB0 bXApOwo+Pj4gKwo+Pj4gKyAgICAgICAvKiBEaXNhYmxlIGlkZW50aXR5IGFwZXJ0dXJlLiovCj4+ PiArICAgICAgIFdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLAo+Pj4gKyAgICAgICAgICAg ICAgIG1tVk1fTDJfQ09OVEVYVDFfSURFTlRJVFlfQVBFUlRVUkVfTE9XX0FERFJfTE8zMiksCj4+ PiAwWEZGRkZGRkZGKTsKPj4+ICsgICAgICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAs Cj4+PiArICAgICAgICAgICAgICAgbW1WTV9MMl9DT05URVhUMV9JREVOVElUWV9BUEVSVFVSRV9M T1dfQUREUl9ISTMyKSwKPj4+IDB4MDAwMDAwMEYpOwo+Pj4gKwo+Pj4gKyAgICAgICBXUkVHMzIo U09DMTVfUkVHX09GRlNFVChHQywgMCwKPj4+ICsgICAgICAgICAgICAgICBtbVZNX0wyX0NPTlRF WFQxX0lERU5USVRZX0FQRVJUVVJFX0hJR0hfQUREUl9MTzMyKSwgMCk7Cj4+PiArICAgICAgIFdS RUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLAo+Pj4gKyAgICAgICAgICAgICAgIG1tVk1fTDJf Q09OVEVYVDFfSURFTlRJVFlfQVBFUlRVUkVfSElHSF9BRERSX0hJMzIpLCAwKTsKPj4+ICsKPj4+ ICsgICAgICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsCj4+PiArICAgICAgICAgICAg ICAgbW1WTV9MMl9DT05URVhUX0lERU5USVRZX1BIWVNJQ0FMX09GRlNFVF9MTzMyKSwgMCk7Cj4+ PiArICAgICAgIFdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLAo+Pj4gKyAgICAgICAgICAg ICAgIG1tVk1fTDJfQ09OVEVYVF9JREVOVElUWV9QSFlTSUNBTF9PRkZTRVRfSEkzMiksIDApOwo+ Pj4gKwo+Pj4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDw9IDE0OyBpKyspIHsKPj4+ICsgICAgICAg ICAgICAgICB0bXAgPSBSUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1WTV9DT05URVhU MV9DTlRMKSArCj4+PiBpKTsKPj4+ICsgICAgICAgICAgICAgICB0bXAgPSBSRUdfU0VUX0ZJRUxE KHRtcCwgVk1fQ09OVEVYVDFfQ05UTCwgRU5BQkxFX0NPTlRFWFQsCj4+PiAxKTsKPj4+ICsgICAg ICAgICAgICAgICB0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgVk1fQ09OVEVYVDFfQ05UTCwKPj4+ IFBBR0VfVEFCTEVfREVQVEgsIDEpOwo+Pj4gKyAgICAgICAgICAgICAgIHRtcCA9IFJFR19TRVRf RklFTEQodG1wLCBWTV9DT05URVhUMV9DTlRMLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBSQU5HRV9QUk9URUNUSU9OX0ZBVUxUX0VOQUJMRV9ERUZBVUxULCAxKTsKPj4+ICsg ICAgICAgICAgICAgICB0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgVk1fQ09OVEVYVDFfQ05UTCwK Pj4+ICsKPj4+IERVTU1ZX1BBR0VfUFJPVEVDVElPTl9GQVVMVF9FTkFCTEVfREVGQVVMVCwgMSk7 Cj4+PiArICAgICAgICAgICAgICAgdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIFZNX0NPTlRFWFQx X0NOVEwsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBERTBfUFJPVEVDVElP Tl9GQVVMVF9FTkFCTEVfREVGQVVMVCwgMSk7Cj4+PiArICAgICAgICAgICAgICAgdG1wID0gUkVH X1NFVF9GSUVMRCh0bXAsIFZNX0NPTlRFWFQxX0NOVEwsCj4+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZBTElEX1BST1RFQ1RJT05fRkFVTFRfRU5BQkxFX0RFRkFVTFQsIDEpOwo+ Pj4gKyAgICAgICAgICAgICAgIHRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBWTV9DT05URVhUMV9D TlRMLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFEX1BST1RFQ1RJT05f RkFVTFRfRU5BQkxFX0RFRkFVTFQsIDEpOwo+Pj4gKyAgICAgICAgICAgICAgIHRtcCA9IFJFR19T RVRfRklFTEQodG1wLCBWTV9DT05URVhUMV9DTlRMLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBXUklURV9QUk9URUNUSU9OX0ZBVUxUX0VOQUJMRV9ERUZBVUxULCAxKTsKPj4+ ICsgICAgICAgICAgICAgICB0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgVk1fQ09OVEVYVDFfQ05U TCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhFQ1VURV9QUk9URUNUSU9O X0ZBVUxUX0VOQUJMRV9ERUZBVUxULAo+Pj4gMSk7Cj4+PiArICAgICAgICAgICAgICAgdG1wID0g UkVHX1NFVF9GSUVMRCh0bXAsIFZNX0NPTlRFWFQxX0NOVEwsCj4+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFBBR0VfVEFCTEVfQkxPQ0tfU0laRSwKPj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGFtZGdwdV92bV9ibG9ja19zaXplIC0gOSk7Cj4+PiArICAg ICAgICAgICAgICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tVk1fQ09OVEVYVDFf Q05UTCkgKyBpLAo+Pj4gdG1wKTsKPj4+ICsgICAgICAgICAgICAgICBXUkVHMzIoU09DMTVfUkVH X09GRlNFVChHQywgMCwKPj4+IG1tVk1fQ09OVEVYVDFfUEFHRV9UQUJMRV9TVEFSVF9BRERSX0xP MzIpICsgaSoyLCAwKTsKPj4+ICsgICAgICAgICAgICAgICBXUkVHMzIoU09DMTVfUkVHX09GRlNF VChHQywgMCwKPj4+IG1tVk1fQ09OVEVYVDFfUEFHRV9UQUJMRV9TVEFSVF9BRERSX0hJMzIpICsg aSoyLCAwKTsKPj4+ICsgICAgICAgICAgICAgICBXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywg MCwKPj4+IG1tVk1fQ09OVEVYVDFfUEFHRV9UQUJMRV9FTkRfQUREUl9MTzMyKSArIGkqMiwKPj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRldi0+dm1fbWFuYWdlci5tYXhfcGZu IC0gMSk7Cj4+PiArICAgICAgICAgICAgICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAs Cj4+PiBtbVZNX0NPTlRFWFQxX1BBR0VfVEFCTEVfRU5EX0FERFJfSEkzMikgKyBpKjIsIDApOwo+ Pj4gKyAgICAgICB9Cj4+PiArCj4+PiArCj4+PiArICAgICAgIHJldHVybiAwOwo+Pj4gK30KPj4+ ICsKPj4+ICt2b2lkIGdmeGh1Yl92MV8wX2dhcnRfZGlzYWJsZShzdHJ1Y3QgYW1kZ3B1X2Rldmlj ZSAqYWRldikKPj4+ICt7Cj4+PiArICAgICAgIHUzMiB0bXA7Cj4+PiArICAgICAgIHUzMiBpOwo+ Pj4gKwo+Pj4gKyAgICAgICAvKiBEaXNhYmxlIGFsbCB0YWJsZXMgKi8KPj4+ICsgICAgICAgZm9y IChpID0gMDsgaSA8IDE2OyBpKyspCj4+PiArICAgICAgICAgICAgICAgV1JFRzMyKFNPQzE1X1JF R19PRkZTRVQoR0MsIDAsIG1tVk1fQ09OVEVYVDBfQ05UTCkgKyBpLAo+Pj4gMCk7Cj4+PiArCj4+ PiArICAgICAgIC8qIFNldHVwIFRMQiBjb250cm9sICovCj4+PiArICAgICAgIHRtcCA9IFJSRUcz MihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbU1DX1ZNX01YX0wxX1RMQl9DTlRMKSk7Cj4+PiAr ICAgICAgIHRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBNQ19WTV9NWF9MMV9UTEJfQ05UTCwgRU5B QkxFX0wxX1RMQiwgMCk7Cj4+PiArICAgICAgIHRtcCA9IFJFR19TRVRfRklFTEQodG1wLAo+Pj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQ19WTV9NWF9MMV9UTEJfQ05UTCwKPj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5BQkxFX0FEVkFOQ0VEX0RSSVZFUl9N T0RFTCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7Cj4+PiArICAgICAg IFdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbU1DX1ZNX01YX0wxX1RMQl9DTlRMKSwg dG1wKTsKPj4+ICsKPj4+ICsgICAgICAgLyogU2V0dXAgTDIgY2FjaGUgKi8KPj4+ICsgICAgICAg dG1wID0gUlJFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tVk1fTDJfQ05UTCkpOwo+Pj4g KyAgICAgICB0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgVk1fTDJfQ05UTCwgRU5BQkxFX0wyX0NB Q0hFLCAwKTsKPj4+ICsgICAgICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tVk1f TDJfQ05UTCksIHRtcCk7Cj4+PiArICAgICAgIFdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAw LCBtbVZNX0wyX0NOVEwzKSwgMCk7Cj4+PiArfQo+Pj4gKwo+Pj4gKy8qKgo+Pj4gKyAqIGdmeGh1 Yl92MV8wX3NldF9mYXVsdF9lbmFibGVfZGVmYXVsdCAtIHVwZGF0ZSBHQVJUL1ZNIGZhdWx0IGhh bmRsaW5nCj4+PiArICoKPj4+ICsgKiBAYWRldjogYW1kZ3B1X2RldmljZSBwb2ludGVyCj4+PiAr ICogQHZhbHVlOiB0cnVlIHJlZGlyZWN0cyBWTSBmYXVsdHMgdG8gdGhlIGRlZmF1bHQgcGFnZQo+ Pj4gKyAqLwo+Pj4gK3ZvaWQgZ2Z4aHViX3YxXzBfc2V0X2ZhdWx0X2VuYWJsZV9kZWZhdWx0KHN0 cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYm9vbCB2YWx1ZSkKPj4+ICt7Cj4+PiArICAgICAgIHUzMiB0bXA7Cj4+ PiArICAgICAgIHRtcCA9IFJSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLAo+Pj4gbW1WTV9M Ml9QUk9URUNUSU9OX0ZBVUxUX0NOVEwpKTsKPj4+ICsgICAgICAgdG1wID0gUkVHX1NFVF9GSUVM RCh0bXAsIFZNX0wyX1BST1RFQ1RJT05fRkFVTFRfQ05UTCwKPj4+ICsgICAgICAgICAgICAgICAg ICAgICAgIFJBTkdFX1BST1RFQ1RJT05fRkFVTFRfRU5BQkxFX0RFRkFVTFQsIHZhbHVlKTsKPj4+ ICsgICAgICAgdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIFZNX0wyX1BST1RFQ1RJT05fRkFVTFRf Q05UTCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgIFBERTBfUFJPVEVDVElPTl9GQVVMVF9F TkFCTEVfREVGQVVMVCwgdmFsdWUpOwo+Pj4gKyAgICAgICB0bXAgPSBSRUdfU0VUX0ZJRUxEKHRt cCwgVk1fTDJfUFJPVEVDVElPTl9GQVVMVF9DTlRMLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAg ICAgUERFMV9QUk9URUNUSU9OX0ZBVUxUX0VOQUJMRV9ERUZBVUxULCB2YWx1ZSk7Cj4+PiArICAg ICAgIHRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBWTV9MMl9QUk9URUNUSU9OX0ZBVUxUX0NOVEws Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICBQREUyX1BST1RFQ1RJT05fRkFVTFRfRU5BQkxF X0RFRkFVTFQsIHZhbHVlKTsKPj4+ICsgICAgICAgdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsCj4+ PiArICAgICAgICAgICAgICAgICAgICAgICBWTV9MMl9QUk9URUNUSU9OX0ZBVUxUX0NOVEwsCj4+ PiArICAgICAgICAgICAgICAgICAgICAgICBUUkFOU0xBVEVfRlVSVEhFUl9QUk9URUNUSU9OX0ZB VUxUX0VOQUJMRV9ERUZBVUxULAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUpOwo+ Pj4gKyAgICAgICB0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgVk1fTDJfUFJPVEVDVElPTl9GQVVM VF9DTlRMLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgTkFDS19QUk9URUNUSU9OX0ZBVUxU X0VOQUJMRV9ERUZBVUxULCB2YWx1ZSk7Cj4+PiArICAgICAgIHRtcCA9IFJFR19TRVRfRklFTEQo dG1wLCBWTV9MMl9QUk9URUNUSU9OX0ZBVUxUX0NOVEwsCj4+PiArICAgICAgICAgICAgICAgICAg ICAgICBEVU1NWV9QQUdFX1BST1RFQ1RJT05fRkFVTFRfRU5BQkxFX0RFRkFVTFQsCj4+PiB2YWx1 ZSk7Cj4+PiArICAgICAgIHRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBWTV9MMl9QUk9URUNUSU9O X0ZBVUxUX0NOVEwsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICBWQUxJRF9QUk9URUNUSU9O X0ZBVUxUX0VOQUJMRV9ERUZBVUxULCB2YWx1ZSk7Cj4+PiArICAgICAgIHRtcCA9IFJFR19TRVRf RklFTEQodG1wLCBWTV9MMl9QUk9URUNUSU9OX0ZBVUxUX0NOVEwsCj4+PiArICAgICAgICAgICAg ICAgICAgICAgICBSRUFEX1BST1RFQ1RJT05fRkFVTFRfRU5BQkxFX0RFRkFVTFQsIHZhbHVlKTsK Pj4+ICsgICAgICAgdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIFZNX0wyX1BST1RFQ1RJT05fRkFV TFRfQ05UTCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgIFdSSVRFX1BST1RFQ1RJT05fRkFV TFRfRU5BQkxFX0RFRkFVTFQsIHZhbHVlKTsKPj4+ICsgICAgICAgdG1wID0gUkVHX1NFVF9GSUVM RCh0bXAsIFZNX0wyX1BST1RFQ1RJT05fRkFVTFRfQ05UTCwKPj4+ICsgICAgICAgICAgICAgICAg ICAgICAgIEVYRUNVVEVfUFJPVEVDVElPTl9GQVVMVF9FTkFCTEVfREVGQVVMVCwgdmFsdWUpOwo+ Pj4gKyAgICAgICBXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1WTV9MMl9QUk9URUNU SU9OX0ZBVUxUX0NOVEwpLAo+Pj4gdG1wKTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHVpbnQz Ml90IGdmeGh1Yl92MV8wX2dldF9pbnZhbGlkYXRlX3JlcSh1bnNpZ25lZCBpbnQgdm1faWQpCj4+ PiArewo+Pj4gKyAgICAgICB1MzIgcmVxID0gMDsKPj4+ICsKPj4+ICsgICAgICAgLyogaW52YWxp ZGF0ZSB1c2luZyBsZWdhY3kgbW9kZSBvbiB2bV9pZCovCj4+PiArICAgICAgIHJlcSA9IFJFR19T RVRfRklFTEQocmVxLCBWTV9JTlZBTElEQVRFX0VORzBfUkVRLAo+Pj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIFBFUl9WTUlEX0lOVkFMSURBVEVfUkVRLCAxIDw8IHZtX2lkKTsKPj4+ICsg ICAgICAgcmVxID0gUkVHX1NFVF9GSUVMRChyZXEsIFZNX0lOVkFMSURBVEVfRU5HMF9SRVEsIEZM VVNIX1RZUEUsIDApOwo+Pj4gKyAgICAgICByZXEgPSBSRUdfU0VUX0ZJRUxEKHJlcSwgVk1fSU5W QUxJREFURV9FTkcwX1JFUSwKPj4+IElOVkFMSURBVEVfTDJfUFRFUywgMSk7Cj4+PiArICAgICAg IHJlcSA9IFJFR19TRVRfRklFTEQocmVxLCBWTV9JTlZBTElEQVRFX0VORzBfUkVRLAo+Pj4gSU5W QUxJREFURV9MMl9QREUwLCAxKTsKPj4+ICsgICAgICAgcmVxID0gUkVHX1NFVF9GSUVMRChyZXEs IFZNX0lOVkFMSURBVEVfRU5HMF9SRVEsCj4+PiBJTlZBTElEQVRFX0wyX1BERTEsIDEpOwo+Pj4g KyAgICAgICByZXEgPSBSRUdfU0VUX0ZJRUxEKHJlcSwgVk1fSU5WQUxJREFURV9FTkcwX1JFUSwK Pj4+IElOVkFMSURBVEVfTDJfUERFMiwgMSk7Cj4+PiArICAgICAgIHJlcSA9IFJFR19TRVRfRklF TEQocmVxLCBWTV9JTlZBTElEQVRFX0VORzBfUkVRLAo+Pj4gSU5WQUxJREFURV9MMV9QVEVTLCAx KTsKPj4+ICsgICAgICAgcmVxID0gUkVHX1NFVF9GSUVMRChyZXEsIFZNX0lOVkFMSURBVEVfRU5H MF9SRVEsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0xFQVJfUFJPVEVDVElPTl9G QVVMVF9TVEFUVVNfQUREUiwgMCk7Cj4+PiArCj4+PiArICAgICAgIHJldHVybiByZXE7Cj4+PiAr fQo+Pj4gKwo+Pj4gK3N0YXRpYyB1aW50MzJfdCBnZnhodWJfdjFfMF9nZXRfdm1fcHJvdGVjdGlv bl9iaXRzKHZvaWQpCj4+PiArewo+Pj4gKyAgICAgICByZXR1cm4KPj4+IChWTV9DT05URVhUMV9D TlRMX19SQU5HRV9QUk9URUNUSU9OX0ZBVUxUX0VOQUJMRV9JTlRFUlJVUFRfTUFTSyB8Cj4+PiAr Cj4+PiBWTV9DT05URVhUMV9DTlRMX19EVU1NWV9QQUdFX1BST1RFQ1RJT05fRkFVTFRfRU5BQkxF X0lOVEVSUlVQVF9NQVNLIHwKPj4+ICsKPj4+IFZNX0NPTlRFWFQxX0NOVExfX1BERTBfUFJPVEVD VElPTl9GQVVMVF9FTkFCTEVfSU5URVJSVVBUX01BU0sgfAo+Pj4gKwo+Pj4gVk1fQ09OVEVYVDFf Q05UTF9fVkFMSURfUFJPVEVDVElPTl9GQVVMVF9FTkFCTEVfSU5URVJSVVBUX01BU0sgfAo+Pj4g Kwo+Pj4gVk1fQ09OVEVYVDFfQ05UTF9fUkVBRF9QUk9URUNUSU9OX0ZBVUxUX0VOQUJMRV9JTlRF UlJVUFRfTUFTSyB8Cj4+PiArCj4+PiBWTV9DT05URVhUMV9DTlRMX19XUklURV9QUk9URUNUSU9O X0ZBVUxUX0VOQUJMRV9JTlRFUlJVUFRfTUFTSyB8Cj4+PiArCj4+PiBWTV9DT05URVhUMV9DTlRM X19FWEVDVVRFX1BST1RFQ1RJT05fRkFVTFRfRU5BQkxFX0lOVEVSUlVQVF9NQVNLKTsKPj4+ICt9 Cj4+PiArCj4+PiArc3RhdGljIGludCBnZnhodWJfdjFfMF9lYXJseV9pbml0KHZvaWQgKmhhbmRs ZSkKPj4+ICt7Cj4+PiArICAgICAgIHJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMg aW50IGdmeGh1Yl92MV8wX2xhdGVfaW5pdCh2b2lkICpoYW5kbGUpCj4+PiArewo+Pj4gKyAgICAg ICByZXR1cm4gMDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCBnZnhodWJfdjFfMF9zd19p bml0KHZvaWQgKmhhbmRsZSkKPj4+ICt7Cj4+PiArICAgICAgIHN0cnVjdCBhbWRncHVfZGV2aWNl ICphZGV2ID0gKHN0cnVjdCBhbWRncHVfZGV2aWNlICopaGFuZGxlOwo+Pj4gKyAgICAgICBzdHJ1 Y3QgYW1kZ3B1X3ZtaHViICpodWIgPSAmYWRldi0+dm1odWJbQU1ER1BVX0dGWEhVQl07Cj4+PiAr Cj4+PiArICAgICAgIGh1Yi0+Y3R4MF9wdGJfYWRkcl9sbzMyID0KPj4+ICsgICAgICAgICAgICAg ICBTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbW1WTV9DT05URVhUMF9QQUdFX1RBQkxFX0JBU0VfQUREUl9MTzMyKTsKPj4+ICsgICAg ICAgaHViLT5jdHgwX3B0Yl9hZGRyX2hpMzIgPQo+Pj4gKyAgICAgICAgICAgICAgIFNPQzE1X1JF R19PRkZTRVQoR0MsIDAsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtbVZN X0NPTlRFWFQwX1BBR0VfVEFCTEVfQkFTRV9BRERSX0hJMzIpOwo+Pj4gKyAgICAgICBodWItPnZt X2ludl9lbmcwX3JlcSA9Cj4+PiArICAgICAgICAgICAgICAgU09DMTVfUkVHX09GRlNFVChHQywg MCwgbW1WTV9JTlZBTElEQVRFX0VORzBfUkVRKTsKPj4+ICsgICAgICAgaHViLT52bV9pbnZfZW5n MF9hY2sgPQo+Pj4gKyAgICAgICAgICAgICAgIFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tVk1f SU5WQUxJREFURV9FTkcwX0FDSyk7Cj4+PiArICAgICAgIGh1Yi0+dm1fY29udGV4dDBfY250bCA9 Cj4+PiArICAgICAgICAgICAgICAgU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1WTV9DT05URVhU MF9DTlRMKTsKPj4+ICsgICAgICAgaHViLT52bV9sMl9wcm9fZmF1bHRfc3RhdHVzID0KPj4+ICsg ICAgICAgICAgICAgICBTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbVZNX0wyX1BST1RFQ1RJT05f RkFVTFRfU1RBVFVTKTsKPj4+ICsgICAgICAgaHViLT52bV9sMl9wcm9fZmF1bHRfY250bCA9Cj4+ PiArICAgICAgICAgICAgICAgU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1WTV9MMl9QUk9URUNU SU9OX0ZBVUxUX0NOVEwpOwo+Pj4gKwo+Pj4gKyAgICAgICBodWItPmdldF9pbnZhbGlkYXRlX3Jl cSA9IGdmeGh1Yl92MV8wX2dldF9pbnZhbGlkYXRlX3JlcTsKPj4+ICsgICAgICAgaHViLT5nZXRf dm1fcHJvdGVjdGlvbl9iaXRzID0gZ2Z4aHViX3YxXzBfZ2V0X3ZtX3Byb3RlY3Rpb25fYml0czsK Pj4+ICsKPj4+ICsgICAgICAgcmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQg Z2Z4aHViX3YxXzBfc3dfZmluaSh2b2lkICpoYW5kbGUpCj4+PiArewo+Pj4gKyAgICAgICByZXR1 cm4gMDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCBnZnhodWJfdjFfMF9od19pbml0KHZv aWQgKmhhbmRsZSkKPj4+ICt7Cj4+PiArICAgICAgIHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 ID0gKHN0cnVjdCBhbWRncHVfZGV2aWNlICopaGFuZGxlOwo+Pj4gKyAgICAgICB1bnNpZ25lZCBp Owo+Pj4gKwo+Pj4gKyAgICAgICBmb3IgKGkgPSAwIDsgaSA8IDE4OyArK2kpIHsKPj4+ICsgICAg ICAgICAgICAgICBXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwKPj4+ICsKPj4+IG1tVk1f SU5WQUxJREFURV9FTkcwX0FERFJfUkFOR0VfTE8zMikgKwo+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICAyICogaSwgMHhmZmZmZmZmZik7Cj4+PiArICAgICAgICAgICAgICAgV1JFRzMyKFNPQzE1 X1JFR19PRkZTRVQoR0MsIDAsCj4+PiArCj4+PiBtbVZNX0lOVkFMSURBVEVfRU5HMF9BRERSX1JB TkdFX0hJMzIpICsKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgMiAqIGksIDB4MWYpOwo+Pj4g KyAgICAgICB9Cj4+PiArCj4+PiArICAgICAgIHJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICtz dGF0aWMgaW50IGdmeGh1Yl92MV8wX2h3X2Zpbmkodm9pZCAqaGFuZGxlKQo+Pj4gK3sKPj4+ICsg ICAgICAgcmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgZ2Z4aHViX3YxXzBf c3VzcGVuZCh2b2lkICpoYW5kbGUpCj4+PiArewo+Pj4gKyAgICAgICByZXR1cm4gMDsKPj4+ICt9 Cj4+PiArCj4+PiArc3RhdGljIGludCBnZnhodWJfdjFfMF9yZXN1bWUodm9pZCAqaGFuZGxlKQo+ Pj4gK3sKPj4+ICsgICAgICAgcmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBib29s IGdmeGh1Yl92MV8wX2lzX2lkbGUodm9pZCAqaGFuZGxlKQo+Pj4gK3sKPj4+ICsgICAgICAgcmV0 dXJuIHRydWU7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgZ2Z4aHViX3YxXzBfd2FpdF9m b3JfaWRsZSh2b2lkICpoYW5kbGUpCj4+PiArewo+Pj4gKyAgICAgICByZXR1cm4gMDsKPj4+ICt9 Cj4+PiArCj4+PiArc3RhdGljIGludCBnZnhodWJfdjFfMF9zb2Z0X3Jlc2V0KHZvaWQgKmhhbmRs ZSkKPj4+ICt7Cj4+PiArICAgICAgIHJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMg aW50IGdmeGh1Yl92MV8wX3NldF9jbG9ja2dhdGluZ19zdGF0ZSh2b2lkICpoYW5kbGUsCj4+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIGFtZF9jbG9ja2dh dGluZ19zdGF0ZQo+Pj4gc3RhdGUpCj4+PiArewo+Pj4gKyAgICAgICByZXR1cm4gMDsKPj4+ICt9 Cj4+PiArCj4+PiArc3RhdGljIGludCBnZnhodWJfdjFfMF9zZXRfcG93ZXJnYXRpbmdfc3RhdGUo dm9pZCAqaGFuZGxlLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZW51bSBhbWRfcG93ZXJnYXRpbmdfc3RhdGUKPj4+IHN0YXRlKQo+Pj4gK3sKPj4+ICsgICAg ICAgcmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4gK2NvbnN0IHN0cnVjdCBhbWRfaXBfZnVuY3Mg Z2Z4aHViX3YxXzBfaXBfZnVuY3MgPSB7Cj4+PiArICAgICAgIC5uYW1lID0gImdmeGh1Yl92MV8w IiwKPj4+ICsgICAgICAgLmVhcmx5X2luaXQgPSBnZnhodWJfdjFfMF9lYXJseV9pbml0LAo+Pj4g KyAgICAgICAubGF0ZV9pbml0ID0gZ2Z4aHViX3YxXzBfbGF0ZV9pbml0LAo+Pj4gKyAgICAgICAu c3dfaW5pdCA9IGdmeGh1Yl92MV8wX3N3X2luaXQsCj4+PiArICAgICAgIC5zd19maW5pID0gZ2Z4 aHViX3YxXzBfc3dfZmluaSwKPj4+ICsgICAgICAgLmh3X2luaXQgPSBnZnhodWJfdjFfMF9od19p bml0LAo+Pj4gKyAgICAgICAuaHdfZmluaSA9IGdmeGh1Yl92MV8wX2h3X2ZpbmksCj4+PiArICAg ICAgIC5zdXNwZW5kID0gZ2Z4aHViX3YxXzBfc3VzcGVuZCwKPj4+ICsgICAgICAgLnJlc3VtZSA9 IGdmeGh1Yl92MV8wX3Jlc3VtZSwKPj4+ICsgICAgICAgLmlzX2lkbGUgPSBnZnhodWJfdjFfMF9p c19pZGxlLAo+Pj4gKyAgICAgICAud2FpdF9mb3JfaWRsZSA9IGdmeGh1Yl92MV8wX3dhaXRfZm9y X2lkbGUsCj4+PiArICAgICAgIC5zb2Z0X3Jlc2V0ID0gZ2Z4aHViX3YxXzBfc29mdF9yZXNldCwK Pj4+ICsgICAgICAgLnNldF9jbG9ja2dhdGluZ19zdGF0ZSA9IGdmeGh1Yl92MV8wX3NldF9jbG9j a2dhdGluZ19zdGF0ZSwKPj4+ICsgICAgICAgLnNldF9wb3dlcmdhdGluZ19zdGF0ZSA9IGdmeGh1 Yl92MV8wX3NldF9wb3dlcmdhdGluZ19zdGF0ZSwKPj4+ICt9Owo+Pj4gKwo+Pj4gK2NvbnN0IHN0 cnVjdCBhbWRncHVfaXBfYmxvY2tfdmVyc2lvbiBnZnhodWJfdjFfMF9pcF9ibG9jayA9Cj4+PiAr ewo+Pj4gKyAgICAgICAudHlwZSA9IEFNRF9JUF9CTE9DS19UWVBFX0dGWEhVQiwKPj4+ICsgICAg ICAgLm1ham9yID0gMSwKPj4+ICsgICAgICAgLm1pbm9yID0gMCwKPj4+ICsgICAgICAgLnJldiA9 IDAsCj4+PiArICAgICAgIC5mdW5jcyA9ICZnZnhodWJfdjFfMF9pcF9mdW5jcywKPj4+ICt9Owo+ Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeGh1Yl92MV8wLmgK Pj4+IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZ2Z4aHViX3YxXzAuaAo+Pj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQKPj4+IGluZGV4IDAwMDAwMDAuLjUxMjlhOGYKPj4+IC0tLSAvZGV2L251 bGwKPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeGh1Yl92MV8wLmgKPj4+ IEBAIC0wLDAgKzEsMzUgQEAKPj4+ICsvKgo+Pj4gKyAqIENvcHlyaWdodCAyMDE2IEFkdmFuY2Vk IE1pY3JvIERldmljZXMsIEluYy4KPj4+ICsgKgo+Pj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5 IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwo+Pj4gYQo+ Pj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9u IGZpbGVzICh0aGUKPj4+ICJTb2Z0d2FyZSIpLAo+Pj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3 YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0Cj4+PiBsaW1pdGF0aW9u Cj4+PiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gs IGRpc3RyaWJ1dGUsCj4+PiBzdWJsaWNlbnNlLAo+Pj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBv ZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+Pj4gKyAq IFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnM6Cj4+PiArICoKPj4+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBh bmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQo+Pj4gaW5jbHVkZWQgaW4KPj4+ICsg KiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KPj4+ ICsgKgo+Pj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdB UlJBTlRZIE9GIEFOWSBLSU5ELAo+Pj4gRVhQUkVTUyBPUgo+Pj4gKyAqIElNUExJRUQsIElOQ0xV RElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKPj4+IE1FUkNIQU5UQUJJ TElUWSwKPj4+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5G UklOR0VNRU5ULiAgSU4gTk8gRVZFTlQKPj4+IFNIQUxMCj4+PiArICogVEhFIENPUFlSSUdIVCBI T0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTCj4+ PiBPUgo+Pj4gKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAo+Pj4gKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9S IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgo+Pj4gKyAqIE9U SEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KPj4+ICsgKgo+Pj4gKyAqLwo+Pj4gKwo+Pj4g KyNpZm5kZWYgX19HRlhIVUJfVjFfMF9IX18KPj4+ICsjZGVmaW5lIF9fR0ZYSFVCX1YxXzBfSF9f Cj4+PiArCj4+PiAraW50IGdmeGh1Yl92MV8wX2dhcnRfZW5hYmxlKHN0cnVjdCBhbWRncHVfZGV2 aWNlICphZGV2KTsKPj4+ICt2b2lkIGdmeGh1Yl92MV8wX2dhcnRfZGlzYWJsZShzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqYWRldik7Cj4+PiArdm9pZCBnZnhodWJfdjFfMF9zZXRfZmF1bHRfZW5hYmxl X2RlZmF1bHQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHZhbHVlKTsKPj4+ICsKPj4+ICtleHRlcm4g Y29uc3Qgc3RydWN0IGFtZF9pcF9mdW5jcyBnZnhodWJfdjFfMF9pcF9mdW5jczsKPj4+ICtleHRl cm4gY29uc3Qgc3RydWN0IGFtZGdwdV9pcF9ibG9ja192ZXJzaW9uIGdmeGh1Yl92MV8wX2lwX2Js b2NrOwo+Pj4gKwo+Pj4gKyNlbmRpZgo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2dtY192OV8wLmMKPj4+IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZ21j X3Y5XzAuYwo+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4+IGluZGV4IDAwMDAwMDAuLjVjZjBm YzMKPj4+IC0tLSAvZGV2L251bGwKPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1 L2dtY192OV8wLmMKPj4+IEBAIC0wLDAgKzEsODI2IEBACj4+PiArLyoKPj4+ICsgKiBDb3B5cmln aHQgMjAxNiBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCj4+PiArICoKPj4+ICsgKiBQZXJt aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBv YnRhaW5pbmcKPj4+IGEKPj4+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0 ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCj4+PiAiU29mdHdhcmUiKSwKPj4+ICsgKiB0byBk ZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91 dAo+Pj4gbGltaXRhdGlvbgo+Pj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnks IG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLAo+Pj4gc3VibGljZW5zZSwKPj4+ICsgKiBhbmQv b3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8g d2hvbSB0aGUKPj4+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3Qg dG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+Pj4gKyAqCj4+PiArICogVGhlIGFib3ZlIGNv cHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKPj4+IGlu Y2x1ZGVkIGluCj4+PiArICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0 aGUgU29mdHdhcmUuCj4+PiArICoKPj4+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT IElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKPj4+IEVYUFJFU1MgT1IKPj4+ICsg KiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G Cj4+PiBNRVJDSEFOVEFCSUxJVFksCj4+PiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UCj4+PiBTSEFMTAo+Pj4gKyAq IFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBD TEFJTSwgREFNQUdFUwo+Pj4gT1IKPj4+ICsgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g QU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKPj4+ICsgKiBBUklTSU5H IEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV U0UgT1IKPj4+ICsgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCj4+PiArICoKPj4+ ICsgKi8KPj4+ICsjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KPj4+ICsjaW5jbHVkZSAiYW1k Z3B1LmgiCj4+PiArI2luY2x1ZGUgImdtY192OV8wLmgiCj4+PiArCj4+PiArI2luY2x1ZGUgInZl Z2ExMC9zb2MxNWlwLmgiCj4+PiArI2luY2x1ZGUgInZlZ2ExMC9IRFAvaGRwXzRfMF9vZmZzZXQu aCIKPj4+ICsjaW5jbHVkZSAidmVnYTEwL0hEUC9oZHBfNF8wX3NoX21hc2suaCIKPj4+ICsjaW5j bHVkZSAidmVnYTEwL0dDL2djXzlfMF9zaF9tYXNrLmgiCj4+PiArI2luY2x1ZGUgInZlZ2ExMC92 ZWdhMTBfZW51bS5oIgo+Pj4gKwo+Pj4gKyNpbmNsdWRlICJzb2MxNV9jb21tb24uaCIKPj4+ICsK Pj4+ICsjaW5jbHVkZSAibmJpb192Nl8xLmgiCj4+PiArI2luY2x1ZGUgImdmeGh1Yl92MV8wLmgi Cj4+PiArI2luY2x1ZGUgIm1taHViX3YxXzAuaCIKPj4+ICsKPj4+ICsjZGVmaW5lIG1tREZfQ1Nf QU9OMF9EcmFtQmFzZUFkZHJlc3MwCj4+PiAweDAwNDQKPj4+ICsjZGVmaW5lIG1tREZfQ1NfQU9O MF9EcmFtQmFzZUFkZHJlc3MwX0JBU0VfSURYCj4+PiAwCj4+PiArLy9ERl9DU19BT04wX0RyYW1C YXNlQWRkcmVzczAKPj4+ICsjZGVmaW5lIERGX0NTX0FPTjBfRHJhbUJhc2VBZGRyZXNzMF9fQWRk clJuZ1ZhbF9fU0hJRlQKPj4+IDB4MAo+Pj4gKyNkZWZpbmUgREZfQ1NfQU9OMF9EcmFtQmFzZUFk ZHJlc3MwX19MZ2N5TW1pb0hvbGVFbl9fU0hJRlQKPj4+IDB4MQo+Pj4gKyNkZWZpbmUgREZfQ1Nf QU9OMF9EcmFtQmFzZUFkZHJlc3MwX19JbnRMdk51bUNoYW5fX1NISUZUCj4+PiAweDQKPj4+ICsj ZGVmaW5lIERGX0NTX0FPTjBfRHJhbUJhc2VBZGRyZXNzMF9fSW50THZBZGRyU2VsX19TSElGVAo+ Pj4gMHg4Cj4+PiArI2RlZmluZSBERl9DU19BT04wX0RyYW1CYXNlQWRkcmVzczBfX0RyYW1CYXNl QWRkcl9fU0hJRlQKPj4+IDB4Ywo+Pj4gKyNkZWZpbmUgREZfQ1NfQU9OMF9EcmFtQmFzZUFkZHJl c3MwX19BZGRyUm5nVmFsX01BU0sKPj4+IDB4MDAwMDAwMDFMCj4+PiArI2RlZmluZSBERl9DU19B T04wX0RyYW1CYXNlQWRkcmVzczBfX0xnY3lNbWlvSG9sZUVuX01BU0sKPj4+IDB4MDAwMDAwMDJM Cj4+PiArI2RlZmluZSBERl9DU19BT04wX0RyYW1CYXNlQWRkcmVzczBfX0ludEx2TnVtQ2hhbl9N QVNLCj4+PiAweDAwMDAwMEYwTAo+Pj4gKyNkZWZpbmUgREZfQ1NfQU9OMF9EcmFtQmFzZUFkZHJl c3MwX19JbnRMdkFkZHJTZWxfTUFTSwo+Pj4gMHgwMDAwMDcwMEwKPj4+ICsjZGVmaW5lIERGX0NT X0FPTjBfRHJhbUJhc2VBZGRyZXNzMF9fRHJhbUJhc2VBZGRyX01BU0sKPj4+IDB4RkZGRkYwMDBM Cj4+PiArCj4+PiArLyogWFhYIE1vdmUgdGhpcyBtYWNybyB0byBWRUdBMTAgaGVhZGVyIGZpbGUs IHdoaWNoIGlzIGxpa2UgdmlkLmggZm9yCj4+PiBWSS4qLwo+Pj4gKyNkZWZpbmUgQU1ER1BVX05V TV9PRl9WTUlEUyAgICAgICAgICAgICAgICAgICAgOAo+Pj4gKwo+Pj4gK3N0YXRpYyBjb25zdCB1 MzIgZ29sZGVuX3NldHRpbmdzX3ZlZ2ExMF9oZHBbXSA9Cj4+PiArewo+Pj4gKyAgICAgICAweGY2 NCwgMHgwZmZmZmZmZiwgMHgwMDAwMDAwMCwKPj4+ICsgICAgICAgMHhmNjUsIDB4MGZmZmZmZmYs IDB4MDAwMDAwMDAsCj4+PiArICAgICAgIDB4ZjY2LCAweDBmZmZmZmZmLCAweDAwMDAwMDAwLAo+ Pj4gKyAgICAgICAweGY2NywgMHgwZmZmZmZmZiwgMHgwMDAwMDAwMCwKPj4+ICsgICAgICAgMHhm NjgsIDB4MGZmZmZmZmYsIDB4MDAwMDAwMDAsCj4+PiArICAgICAgIDB4ZjZhLCAweDBmZmZmZmZm LCAweDAwMDAwMDAwLAo+Pj4gKyAgICAgICAweGY2YiwgMHgwZmZmZmZmZiwgMHgwMDAwMDAwMCwK Pj4+ICsgICAgICAgMHhmNmMsIDB4MGZmZmZmZmYsIDB4MDAwMDAwMDAsCj4+PiArICAgICAgIDB4 ZjZkLCAweDBmZmZmZmZmLCAweDAwMDAwMDAwLAo+Pj4gKyAgICAgICAweGY2ZSwgMHgwZmZmZmZm ZiwgMHgwMDAwMDAwMCwKPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgZ21jX3Y5XzBfdm1f ZmF1bHRfaW50ZXJydXB0X3N0YXRlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+Pj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhbWRncHVfaXJxX3Ny YyAqc3JjLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIHR5cGUsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51 bSBhbWRncHVfaW50ZXJydXB0X3N0YXRlIHN0YXRlKQo+Pj4gK3sKPj4+ICsgICAgICAgc3RydWN0 IGFtZGdwdV92bWh1YiAqaHViOwo+Pj4gKyAgICAgICB1MzIgdG1wLCByZWcsIGJpdHMsIGk7Cj4+ PiArCj4+PiArICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKPj4+ICsgICAgICAgY2FzZSBBTURHUFVf SVJRX1NUQVRFX0RJU0FCTEU6Cj4+PiArICAgICAgICAgICAgICAgLyogTU0gSFVCICovCj4+PiAr ICAgICAgICAgICAgICAgaHViID0gJmFkZXYtPnZtaHViW0FNREdQVV9NTUhVQl07Cj4+PiArICAg ICAgICAgICAgICAgYml0cyA9IGh1Yi0+Z2V0X3ZtX3Byb3RlY3Rpb25fYml0cygpOwo+Pj4gKyAg ICAgICAgICAgICAgIGZvciAoaSA9IDA7IGk8IDE2OyBpKyspIHsKPj4+ICsgICAgICAgICAgICAg ICAgICAgICAgIHJlZyA9IGh1Yi0+dm1fY29udGV4dDBfY250bCArIGk7Cj4+PiArICAgICAgICAg ICAgICAgICAgICAgICB0bXAgPSBSUkVHMzIocmVnKTsKPj4+ICsgICAgICAgICAgICAgICAgICAg ICAgIHRtcCAmPSB+Yml0czsKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgIFdSRUczMihyZWcs IHRtcCk7Cj4+PiArICAgICAgICAgICAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICAgIC8q IEdGWCBIVUIgKi8KPj4+ICsgICAgICAgICAgICAgICBodWIgPSAmYWRldi0+dm1odWJbQU1ER1BV X0dGWEhVQl07Cj4+PiArICAgICAgICAgICAgICAgYml0cyA9IGh1Yi0+Z2V0X3ZtX3Byb3RlY3Rp b25fYml0cygpOwo+Pj4gKyAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7 Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICByZWcgPSBodWItPnZtX2NvbnRleHQwX2NudGwg KyBpOwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gUlJFRzMyKHJlZyk7Cj4+PiAr ICAgICAgICAgICAgICAgICAgICAgICB0bXAgJj0gfmJpdHM7Cj4+PiArICAgICAgICAgICAgICAg ICAgICAgICBXUkVHMzIocmVnLCB0bXApOwo+Pj4gKyAgICAgICAgICAgICAgIH0KPj4+ICsgICAg ICAgICAgICAgICBicmVhazsKPj4+ICsgICAgICAgY2FzZSBBTURHUFVfSVJRX1NUQVRFX0VOQUJM RToKPj4+ICsgICAgICAgICAgICAgICAvKiBNTSBIVUIgKi8KPj4+ICsgICAgICAgICAgICAgICBo dWIgPSAmYWRldi0+dm1odWJbQU1ER1BVX01NSFVCXTsKPj4+ICsgICAgICAgICAgICAgICBiaXRz ID0gaHViLT5nZXRfdm1fcHJvdGVjdGlvbl9iaXRzKCk7Cj4+PiArICAgICAgICAgICAgICAgZm9y IChpID0gMDsgaTwgMTY7IGkrKykgewo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmVnID0g aHViLT52bV9jb250ZXh0MF9jbnRsICsgaTsKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgIHRt cCA9IFJSRUczMihyZWcpOwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgdG1wIHw9IGJpdHM7 Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICBXUkVHMzIocmVnLCB0bXApOwo+Pj4gKyAgICAg ICAgICAgICAgIH0KPj4+ICsKPj4+ICsgICAgICAgICAgICAgICAvKiBHRlggSFVCICovCj4+PiAr ICAgICAgICAgICAgICAgaHViID0gJmFkZXYtPnZtaHViW0FNREdQVV9HRlhIVUJdOwo+Pj4gKyAg ICAgICAgICAgICAgIGJpdHMgPSBodWItPmdldF92bV9wcm90ZWN0aW9uX2JpdHMoKTsKPj4+ICsg ICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewo+Pj4gKyAgICAgICAgICAg ICAgICAgICAgICAgcmVnID0gaHViLT52bV9jb250ZXh0MF9jbnRsICsgaTsKPj4+ICsgICAgICAg ICAgICAgICAgICAgICAgIHRtcCA9IFJSRUczMihyZWcpOwo+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICAgdG1wIHw9IGJpdHM7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICBXUkVHMzIocmVn LCB0bXApOwo+Pj4gKyAgICAgICAgICAgICAgIH0KPj4+ICsgICAgICAgICAgICAgICBicmVhazsK Pj4+ICsgICAgICAgZGVmYXVsdDoKPj4+ICsgICAgICAgICAgICAgICBicmVhazsKPj4+ICsgICAg ICAgfQo+Pj4gKwo+Pj4gKyAgICAgICByZXR1cm4gMDsKPj4+ICsgICAgICAgcmV0dXJuIDA7Cj4+ PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgZ21jX3Y5XzBfcHJvY2Vzc19pbnRlcnJ1cHQoc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBhbWRncHVfaXJxX3NyYyAqc291cmNlLAo+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgYW1kZ3B1X2l2X2VudHJ5ICplbnRyeSkKPj4+ICt7Cj4+PiAr ICAgICAgIHN0cnVjdCBhbWRncHVfdm1odWIgKmdmeGh1YiA9ICZhZGV2LT52bWh1YltBTURHUFVf R0ZYSFVCXTsKPj4+ICsgICAgICAgc3RydWN0IGFtZGdwdV92bWh1YiAqbW1odWIgPSAmYWRldi0+ dm1odWJbQU1ER1BVX01NSFVCXTsKPj4+ICsgICAgICAgdWludDMyX3Qgc3RhdHVzOwo+Pj4gKyAg ICAgICB1NjQgYWRkcjsKPj4+ICsKPj4+ICsgICAgICAgYWRkciA9ICh1NjQpZW50cnktPnNyY19k YXRhWzBdIDw8IDEyOwo+Pj4gKyAgICAgICBhZGRyIHw9ICgodTY0KWVudHJ5LT5zcmNfZGF0YVsx XSAmIDB4ZikgPDwgNDQ7Cj4+PiArCj4+PiArICAgICAgIGlmIChlbnRyeS0+dm1faWRfc3JjKSB7 Cj4+PiArICAgICAgICAgICAgICAgc3RhdHVzID0gUlJFRzMyKG1taHViLT52bV9sMl9wcm9fZmF1 bHRfc3RhdHVzKTsKPj4+ICsgICAgICAgICAgICAgICBXUkVHMzJfUChtbWh1Yi0+dm1fbDJfcHJv X2ZhdWx0X2NudGwsIDEsIH4xKTsKPj4+ICsgICAgICAgfSBlbHNlIHsKPj4+ICsgICAgICAgICAg ICAgICBzdGF0dXMgPSBSUkVHMzIoZ2Z4aHViLT52bV9sMl9wcm9fZmF1bHRfc3RhdHVzKTsKPj4+ ICsgICAgICAgICAgICAgICBXUkVHMzJfUChnZnhodWItPnZtX2wyX3Byb19mYXVsdF9jbnRsLCAx LCB+MSk7Cj4+PiArICAgICAgIH0KPj4+ICsKPj4+ICsgICAgICAgRFJNX0VSUk9SKCJbJXNdVk1D IHBhZ2UgZmF1bHQgKHNyY19pZDoldSByaW5nOiV1IHZtX2lkOiV1Cj4+PiBwYXNfaWQ6JXUpICIK Pj4+ICsgICAgICAgICAgICAgICAgICJhdCBwYWdlIDB4JTAxNmxseCBmcm9tICVkXG4iCj4+PiAr ICAgICAgICAgICAgICAgICAiVk1fTDJfUFJPVEVDVElPTl9GQVVMVF9TVEFUVVM6MHglMDhYXG4i LAo+Pj4gKyAgICAgICAgICAgICAgICAgZW50cnktPnZtX2lkX3NyYyA/ICJtbWh1YiIgOiAiZ2Z4 aHViIiwKPj4+ICsgICAgICAgICAgICAgICAgIGVudHJ5LT5zcmNfaWQsIGVudHJ5LT5yaW5nX2lk LCBlbnRyeS0+dm1faWQsCj4+PiBlbnRyeS0+cGFzX2lkLAo+Pj4gKyAgICAgICAgICAgICAgICAg YWRkciwgZW50cnktPmNsaWVudF9pZCwgc3RhdHVzKTsKPj4+ICsKPj4+ICsgICAgICAgcmV0dXJu IDA7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYW1kZ3B1X2lycV9zcmNf ZnVuY3MgZ21jX3Y5XzBfaXJxX2Z1bmNzID0gewo+Pj4gKyAgICAgICAuc2V0ID0gZ21jX3Y5XzBf dm1fZmF1bHRfaW50ZXJydXB0X3N0YXRlLAo+Pj4gKyAgICAgICAucHJvY2VzcyA9IGdtY192OV8w X3Byb2Nlc3NfaW50ZXJydXB0LAo+Pj4gK307Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgZ21jX3Y5 XzBfc2V0X2lycV9mdW5jcyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPj4+ICt7Cj4+PiAr ICAgICAgIGFkZXYtPm1jLnZtX2ZhdWx0Lm51bV90eXBlcyA9IDE7Cj4+PiArICAgICAgIGFkZXYt Pm1jLnZtX2ZhdWx0LmZ1bmNzID0gJmdtY192OV8wX2lycV9mdW5jczsKPj4+ICt9Cj4+PiArCj4+ PiArLyoKPj4+ICsgKiBHQVJUCj4+PiArICogVk1JRCAwIGlzIHRoZSBwaHlzaWNhbCBHUFUgYWRk cmVzc2VzIGFzIHVzZWQgYnkgdGhlIGtlcm5lbC4KPj4+ICsgKiBWTUlEcyAxLTE1IGFyZSB1c2Vk IGZvciB1c2Vyc3BhY2UgY2xpZW50cyBhbmQgYXJlIGhhbmRsZWQKPj4+ICsgKiBieSB0aGUgYW1k Z3B1IHZtL2hzYSBjb2RlLgo+Pj4gKyAqLwo+Pj4gKwo+Pj4gKy8qKgo+Pj4gKyAqIGdtY192OV8w X2dhcnRfZmx1c2hfZ3B1X3RsYiAtIGdhcnQgdGxiIGZsdXNoIGNhbGxiYWNrCj4+PiArICoKPj4+ ICsgKiBAYWRldjogYW1kZ3B1X2RldmljZSBwb2ludGVyCj4+PiArICogQHZtaWQ6IHZtIGluc3Rh bmNlIHRvIGZsdXNoCj4+PiArICoKPj4+ICsgKiBGbHVzaCB0aGUgVExCIGZvciB0aGUgcmVxdWVz dGVkIHBhZ2UgdGFibGUuCj4+PiArICovCj4+PiArc3RhdGljIHZvaWQgZ21jX3Y5XzBfZ2FydF9m bHVzaF9ncHVfdGxiKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+Pj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHZtaWQpCj4+PiArewo+Pj4gKyAg ICAgICAvKiBVc2UgcmVnaXN0ZXIgMTcgZm9yIEdBUlQgKi8KPj4+ICsgICAgICAgY29uc3QgdW5z aWduZWQgZW5nID0gMTc7Cj4+PiArICAgICAgIHVuc2lnbmVkIGksIGo7Cj4+PiArCj4+PiArICAg ICAgIC8qIGZsdXNoIGhkcCBjYWNoZSAqLwo+Pj4gKyAgICAgICBuYmlvX3Y2XzFfaGRwX2ZsdXNo KGFkZXYpOwo+Pj4gKwo+Pj4gKyAgICAgICBzcGluX2xvY2soJmFkZXYtPm1jLmludmFsaWRhdGVf bG9jayk7Cj4+PiArCj4+PiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBBTURHUFVfTUFYX1ZNSFVC UzsgKytpKSB7Cj4+PiArICAgICAgICAgICAgICAgc3RydWN0IGFtZGdwdV92bWh1YiAqaHViID0g JmFkZXYtPnZtaHViW2ldOwo+Pj4gKyAgICAgICAgICAgICAgIHUzMiB0bXAgPSBodWItPmdldF9p bnZhbGlkYXRlX3JlcSh2bWlkKTsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgICBXUkVHMzIoaHVi LT52bV9pbnZfZW5nMF9yZXEgKyBlbmcsIHRtcCk7Cj4+PiArCj4+PiArICAgICAgICAgICAgICAg LyogQnVzeSB3YWl0IGZvciBBQ0suKi8KPj4+ICsgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBq IDwgMTAwOyBqKyspIHsKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IFJSRUczMiho dWItPnZtX2ludl9lbmcwX2FjayArIGVuZyk7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICB0 bXAgJj0gMSA8PCB2bWlkOwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcCkKPj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4+PiArICAgICAgICAgICAg ICAgICAgICAgICBjcHVfcmVsYXgoKTsKPj4+ICsgICAgICAgICAgICAgICB9Cj4+PiArICAgICAg ICAgICAgICAgaWYgKGogPCAxMDApCj4+PiArICAgICAgICAgICAgICAgICAgICAgICBjb250aW51 ZTsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgICAvKiBXYWl0IGZvciBBQ0sgd2l0aCBhIGRlbGF5 LiovCj4+PiArICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGFkZXYtPnVzZWNfdGltZW91 dDsgaisrKSB7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBSUkVHMzIoaHViLT52 bV9pbnZfZW5nMF9hY2sgKyBlbmcpOwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgdG1wICY9 IDEgPDwgdm1pZDsKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXApCj4+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICAgdWRlbGF5KDEpOwo+Pj4gKyAgICAgICAgICAgICAgIH0KPj4+ICsgICAgICAgICAgICAg ICBpZiAoaiA8IGFkZXYtPnVzZWNfdGltZW91dCkKPj4+ICsgICAgICAgICAgICAgICAgICAgICAg IGNvbnRpbnVlOwo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICAgIERSTV9FUlJPUigiVGltZW91dCB3 YWl0aW5nIGZvciBWTSBmbHVzaCBBQ0shXG4iKTsKPj4+ICsgICAgICAgfQo+Pj4gKwo+Pj4gKyAg ICAgICBzcGluX3VubG9jaygmYWRldi0+bWMuaW52YWxpZGF0ZV9sb2NrKTsKPj4+ICt9Cj4+PiAr Cj4+PiArLyoqCj4+PiArICogZ21jX3Y5XzBfZ2FydF9zZXRfcHRlX3BkZSAtIHVwZGF0ZSB0aGUg cGFnZSB0YWJsZXMgdXNpbmcgTU1JTwo+Pj4gKyAqCj4+PiArICogQGFkZXY6IGFtZGdwdV9kZXZp Y2UgcG9pbnRlcgo+Pj4gKyAqIEBjcHVfcHRfYWRkcjogY3B1IGFkZHJlc3Mgb2YgdGhlIHBhZ2Ug dGFibGUKPj4+ICsgKiBAZ3B1X3BhZ2VfaWR4OiBlbnRyeSBpbiB0aGUgcGFnZSB0YWJsZSB0byB1 cGRhdGUKPj4+ICsgKiBAYWRkcjogZHN0IGFkZHIgdG8gd3JpdGUgaW50byBwdGUvcGRlCj4+PiAr ICogQGZsYWdzOiBhY2Nlc3MgZmxhZ3MKPj4+ICsgKgo+Pj4gKyAqIFVwZGF0ZSB0aGUgcGFnZSB0 YWJsZXMgdXNpbmcgdGhlIENQVS4KPj4+ICsgKi8KPj4+ICtzdGF0aWMgaW50IGdtY192OV8wX2dh cnRfc2V0X3B0ZV9wZGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY3B1X3B0X2FkZHIsCj4+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZ3B1X3BhZ2VfaWR4 LAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGFk ZHIsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3Qg ZmxhZ3MpCj4+PiArewo+Pj4gKyAgICAgICB2b2lkIF9faW9tZW0gKnB0ciA9ICh2b2lkICopY3B1 X3B0X2FkZHI7Cj4+PiArICAgICAgIHVpbnQ2NF90IHZhbHVlOwo+Pj4gKwo+Pj4gKyAgICAgICAv Kgo+Pj4gKyAgICAgICAgKiBQVEUgZm9ybWF0IG9uIFZFR0EgMTA6Cj4+PiArICAgICAgICAqIDYz OjU5IHJlc2VydmVkCj4+PiArICAgICAgICAqIDU4OjU3IG10eXBlCj4+PiArICAgICAgICAqIDU2 IEYKPj4+ICsgICAgICAgICogNTUgTAo+Pj4gKyAgICAgICAgKiA1NCBQCj4+PiArICAgICAgICAq IDUzIFNXCj4+PiArICAgICAgICAqIDUyIFQKPj4+ICsgICAgICAgICogNTA6NDggcmVzZXJ2ZWQK Pj4+ICsgICAgICAgICogNDc6MTIgNGsgcGh5c2ljYWwgcGFnZSBiYXNlIGFkZHJlc3MKPj4+ICsg ICAgICAgICogMTE6NyBmcmFnbWVudAo+Pj4gKyAgICAgICAgKiA2IHdyaXRlCj4+PiArICAgICAg ICAqIDUgcmVhZAo+Pj4gKyAgICAgICAgKiA0IGV4ZQo+Pj4gKyAgICAgICAgKiAzIFoKPj4+ICsg ICAgICAgICogMiBzbm9vcGVkCj4+PiArICAgICAgICAqIDEgc3lzdGVtCj4+PiArICAgICAgICAq IDAgdmFsaWQKPj4+ICsgICAgICAgICoKPj4+ICsgICAgICAgICogUERFIGZvcm1hdCBvbiBWRUdB IDEwOgo+Pj4gKyAgICAgICAgKiA2Mzo1OSBibG9jayBmcmFnbWVudCBzaXplCj4+PiArICAgICAg ICAqIDU4OjU1IHJlc2VydmVkCj4+PiArICAgICAgICAqIDU0IFAKPj4+ICsgICAgICAgICogNTM6 NDggcmVzZXJ2ZWQKPj4+ICsgICAgICAgICogNDc6NiBwaHlzaWNhbCBiYXNlIGFkZHJlc3Mgb2Yg UEQgb3IgUFRFCj4+PiArICAgICAgICAqIDU6MyByZXNlcnZlZAo+Pj4gKyAgICAgICAgKiAyIEMK Pj4+ICsgICAgICAgICogMSBzeXN0ZW0KPj4+ICsgICAgICAgICogMCB2YWxpZAo+Pj4gKyAgICAg ICAgKi8KPj4+ICsKPj4+ICsgICAgICAgLyoKPj4+ICsgICAgICAgICogVGhlIGZvbGxvd2luZyBp cyBmb3IgUFRFIG9ubHkuIEdBUlQgZG9lcyBub3QgaGF2ZSBQREVzLgo+Pj4gKyAgICAgICAqLwo+ Pj4gKyAgICAgICB2YWx1ZSA9IGFkZHIgJiAweDAwMDBGRkZGRkZGRkYwMDBVTEw7Cj4+PiArICAg ICAgIHZhbHVlIHw9IGZsYWdzOwo+Pj4gKyAgICAgICB3cml0ZXEodmFsdWUsIHB0ciArIChncHVf cGFnZV9pZHggKiA4KSk7Cj4+PiArICAgICAgIHJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICtz dGF0aWMgdWludDY0X3QgZ21jX3Y5XzBfZ2V0X3ZtX3B0ZV9mbGFncyhzdHJ1Y3QgYW1kZ3B1X2Rl dmljZSAqYWRldiwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVpbnQzMl90IGZsYWdzKQo+Pj4gKwo+Pj4gK3sKPj4+ICsgICAgICAgdWludDY0X3Qg cHRlX2ZsYWcgPSAwOwo+Pj4gKwo+Pj4gKyAgICAgICBpZiAoZmxhZ3MgJiBBTURHUFVfVk1fUEFH RV9FWEVDVVRBQkxFKQo+Pj4gKyAgICAgICAgICAgICAgIHB0ZV9mbGFnIHw9IEFNREdQVV9QVEVf RVhFQ1VUQUJMRTsKPj4+ICsgICAgICAgaWYgKGZsYWdzICYgQU1ER1BVX1ZNX1BBR0VfUkVBREFC TEUpCj4+PiArICAgICAgICAgICAgICAgcHRlX2ZsYWcgfD0gQU1ER1BVX1BURV9SRUFEQUJMRTsK Pj4+ICsgICAgICAgaWYgKGZsYWdzICYgQU1ER1BVX1ZNX1BBR0VfV1JJVEVBQkxFKQo+Pj4gKyAg ICAgICAgICAgICAgIHB0ZV9mbGFnIHw9IEFNREdQVV9QVEVfV1JJVEVBQkxFOwo+Pj4gKwo+Pj4g KyAgICAgICBzd2l0Y2ggKGZsYWdzICYgQU1ER1BVX1ZNX01UWVBFX01BU0spIHsKPj4+ICsgICAg ICAgY2FzZSBBTURHUFVfVk1fTVRZUEVfREVGQVVMVDoKPj4+ICsgICAgICAgICAgICAgICBwdGVf ZmxhZyB8PSBBTURHUFVfUFRFX01UWVBFKE1UWVBFX05DKTsKPj4+ICsgICAgICAgICAgICAgICBi cmVhazsKPj4+ICsgICAgICAgY2FzZSBBTURHUFVfVk1fTVRZUEVfTkM6Cj4+PiArICAgICAgICAg ICAgICAgcHRlX2ZsYWcgfD0gQU1ER1BVX1BURV9NVFlQRShNVFlQRV9OQyk7Cj4+PiArICAgICAg ICAgICAgICAgYnJlYWs7Cj4+PiArICAgICAgIGNhc2UgQU1ER1BVX1ZNX01UWVBFX1dDOgo+Pj4g KyAgICAgICAgICAgICAgIHB0ZV9mbGFnIHw9IEFNREdQVV9QVEVfTVRZUEUoTVRZUEVfV0MpOwo+ Pj4gKyAgICAgICAgICAgICAgIGJyZWFrOwo+Pj4gKyAgICAgICBjYXNlIEFNREdQVV9WTV9NVFlQ RV9DQzoKPj4+ICsgICAgICAgICAgICAgICBwdGVfZmxhZyB8PSBBTURHUFVfUFRFX01UWVBFKE1U WVBFX0NDKTsKPj4+ICsgICAgICAgICAgICAgICBicmVhazsKPj4+ICsgICAgICAgY2FzZSBBTURH UFVfVk1fTVRZUEVfVUM6Cj4+PiArICAgICAgICAgICAgICAgcHRlX2ZsYWcgfD0gQU1ER1BVX1BU RV9NVFlQRShNVFlQRV9VQyk7Cj4+PiArICAgICAgICAgICAgICAgYnJlYWs7Cj4+PiArICAgICAg IGRlZmF1bHQ6Cj4+PiArICAgICAgICAgICAgICAgcHRlX2ZsYWcgfD0gQU1ER1BVX1BURV9NVFlQ RShNVFlQRV9OQyk7Cj4+PiArICAgICAgICAgICAgICAgYnJlYWs7Cj4+PiArICAgICAgIH0KPj4+ ICsKPj4+ICsgICAgICAgaWYgKGZsYWdzICYgQU1ER1BVX1ZNX1BBR0VfUFJUKQo+Pj4gKyAgICAg ICAgICAgICAgIHB0ZV9mbGFnIHw9IEFNREdQVV9QVEVfUFJUOwo+Pj4gKwo+Pj4gKyAgICAgICBy ZXR1cm4gcHRlX2ZsYWc7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYW1k Z3B1X2dhcnRfZnVuY3MgZ21jX3Y5XzBfZ2FydF9mdW5jcyA9IHsKPj4+ICsgICAgICAgLmZsdXNo X2dwdV90bGIgPSBnbWNfdjlfMF9nYXJ0X2ZsdXNoX2dwdV90bGIsCj4+PiArICAgICAgIC5zZXRf cHRlX3BkZSA9IGdtY192OV8wX2dhcnRfc2V0X3B0ZV9wZGUsCj4+PiArICAgICAgIC5nZXRfdm1f cHRlX2ZsYWdzID0gZ21jX3Y5XzBfZ2V0X3ZtX3B0ZV9mbGFncwo+Pj4gK307Cj4+PiArCj4+PiAr c3RhdGljIHZvaWQgZ21jX3Y5XzBfc2V0X2dhcnRfZnVuY3Moc3RydWN0IGFtZGdwdV9kZXZpY2Ug KmFkZXYpCj4+PiArewo+Pj4gKyAgICAgICBpZiAoYWRldi0+Z2FydC5nYXJ0X2Z1bmNzID09IE5V TEwpCj4+PiArICAgICAgICAgICAgICAgYWRldi0+Z2FydC5nYXJ0X2Z1bmNzID0gJmdtY192OV8w X2dhcnRfZnVuY3M7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB1NjQgZ21jX3Y5XzBfYWRqdXN0 X21jX2FkZHIoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIHU2NAo+Pj4gbWNfYWRkcikKPj4+ ICt7Cj4+PiArICAgICAgIHJldHVybiBhZGV2LT52bV9tYW5hZ2VyLnZyYW1fYmFzZV9vZmZzZXQg KyBtY19hZGRyIC0KPj4+IGFkZXYtPm1jLnZyYW1fc3RhcnQ7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgYW1kZ3B1X21jX2Z1bmNzIGdtY192OV8wX21jX2Z1bmNzID0gewo+ Pj4gKyAgICAgICAuYWRqdXN0X21jX2FkZHIgPSBnbWNfdjlfMF9hZGp1c3RfbWNfYWRkciwKPj4+ ICt9Owo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIGdtY192OV8wX3NldF9tY19mdW5jcyhzdHJ1Y3Qg YW1kZ3B1X2RldmljZSAqYWRldikKPj4+ICt7Cj4+PiArICAgICAgIGFkZXYtPm1jLm1jX2Z1bmNz ID0gJmdtY192OV8wX21jX2Z1bmNzOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IGdtY192 OV8wX2Vhcmx5X2luaXQodm9pZCAqaGFuZGxlKQo+Pj4gK3sKPj4+ICsgICAgICAgc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7Cj4+PiAr Cj4+PiArICAgICAgIGdtY192OV8wX3NldF9nYXJ0X2Z1bmNzKGFkZXYpOwo+Pj4gKyAgICAgICBn bWNfdjlfMF9zZXRfbWNfZnVuY3MoYWRldik7Cj4+PiArICAgICAgIGdtY192OV8wX3NldF9pcnFf ZnVuY3MoYWRldik7Cj4+PiArCj4+PiArICAgICAgIHJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ ICtzdGF0aWMgaW50IGdtY192OV8wX2xhdGVfaW5pdCh2b2lkICpoYW5kbGUpCj4+PiArewo+Pj4g KyAgICAgICBzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2Rldmlj ZSAqKWhhbmRsZTsKPj4+ICsgICAgICAgcmV0dXJuIGFtZGdwdV9pcnFfZ2V0KGFkZXYsICZhZGV2 LT5tYy52bV9mYXVsdCwgMCk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIGdtY192OV8w X3ZyYW1fZ3R0X2xvY2F0aW9uKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+Pj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhbWRncHVfbWMgKm1jKQo+ Pj4gK3sKPj4+ICsgICAgICAgdTY0IGJhc2UgPSBtbWh1Yl92MV8wX2dldF9mYl9sb2NhdGlvbihh ZGV2KTsKPj4+ICsgICAgICAgYW1kZ3B1X3ZyYW1fbG9jYXRpb24oYWRldiwgJmFkZXYtPm1jLCBi YXNlKTsKPj4+ICsgICAgICAgYWRldi0+bWMuZ3R0X2Jhc2VfYWxpZ24gPSAwOwo+Pj4gKyAgICAg ICBhbWRncHVfZ3R0X2xvY2F0aW9uKGFkZXYsIG1jKTsKPj4+ICt9Cj4+PiArCj4+PiArLyoqCj4+ PiArICogZ21jX3Y5XzBfbWNfaW5pdCAtIGluaXRpYWxpemUgdGhlIG1lbW9yeSBjb250cm9sbGVy IGRyaXZlciBwYXJhbXMKPj4+ICsgKgo+Pj4gKyAqIEBhZGV2OiBhbWRncHVfZGV2aWNlIHBvaW50 ZXIKPj4+ICsgKgo+Pj4gKyAqIExvb2sgdXAgdGhlIGFtb3VudCBvZiB2cmFtLCB2cmFtIHdpZHRo LCBhbmQgZGVjaWRlIGhvdyB0byBwbGFjZQo+Pj4gKyAqIHZyYW0gYW5kIGdhcnQgd2l0aGluIHRo ZSBHUFUncyBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLgo+Pj4gKyAqIFJldHVybnMgMCBmb3Igc3Vj Y2Vzcy4KPj4+ICsgKi8KPj4+ICtzdGF0aWMgaW50IGdtY192OV8wX21jX2luaXQoc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYpCj4+PiArewo+Pj4gKyAgICAgICB1MzIgdG1wOwo+Pj4gKyAgICAg ICBpbnQgY2hhbnNpemUsIG51bWNoYW47Cj4+PiArCj4+PiArICAgICAgIC8qIGhibSBtZW1vcnkg Y2hhbm5lbCBzaXplICovCj4+PiArICAgICAgIGNoYW5zaXplID0gMTI4Owo+Pj4gKwo+Pj4gKyAg ICAgICB0bXAgPSBSUkVHMzIoU09DMTVfUkVHX09GRlNFVChERiwgMCwKPj4+IG1tREZfQ1NfQU9O MF9EcmFtQmFzZUFkZHJlc3MwKSk7Cj4+PiArICAgICAgIHRtcCAmPSBERl9DU19BT04wX0RyYW1C YXNlQWRkcmVzczBfX0ludEx2TnVtQ2hhbl9NQVNLOwo+Pj4gKyAgICAgICB0bXAgPj49IERGX0NT X0FPTjBfRHJhbUJhc2VBZGRyZXNzMF9fSW50THZOdW1DaGFuX19TSElGVDsKPj4+ICsgICAgICAg c3dpdGNoICh0bXApIHsKPj4+ICsgICAgICAgY2FzZSAwOgo+Pj4gKyAgICAgICBkZWZhdWx0Ogo+ Pj4gKyAgICAgICAgICAgICAgIG51bWNoYW4gPSAxOwo+Pj4gKyAgICAgICAgICAgICAgIGJyZWFr Owo+Pj4gKyAgICAgICBjYXNlIDE6Cj4+PiArICAgICAgICAgICAgICAgbnVtY2hhbiA9IDI7Cj4+ PiArICAgICAgICAgICAgICAgYnJlYWs7Cj4+PiArICAgICAgIGNhc2UgMjoKPj4+ICsgICAgICAg ICAgICAgICBudW1jaGFuID0gMDsKPj4+ICsgICAgICAgICAgICAgICBicmVhazsKPj4+ICsgICAg ICAgY2FzZSAzOgo+Pj4gKyAgICAgICAgICAgICAgIG51bWNoYW4gPSA0Owo+Pj4gKyAgICAgICAg ICAgICAgIGJyZWFrOwo+Pj4gKyAgICAgICBjYXNlIDQ6Cj4+PiArICAgICAgICAgICAgICAgbnVt Y2hhbiA9IDA7Cj4+PiArICAgICAgICAgICAgICAgYnJlYWs7Cj4+PiArICAgICAgIGNhc2UgNToK Pj4+ICsgICAgICAgICAgICAgICBudW1jaGFuID0gODsKPj4+ICsgICAgICAgICAgICAgICBicmVh azsKPj4+ICsgICAgICAgY2FzZSA2Ogo+Pj4gKyAgICAgICAgICAgICAgIG51bWNoYW4gPSAwOwo+ Pj4gKyAgICAgICAgICAgICAgIGJyZWFrOwo+Pj4gKyAgICAgICBjYXNlIDc6Cj4+PiArICAgICAg ICAgICAgICAgbnVtY2hhbiA9IDE2Owo+Pj4gKyAgICAgICAgICAgICAgIGJyZWFrOwo+Pj4gKyAg ICAgICBjYXNlIDg6Cj4+PiArICAgICAgICAgICAgICAgbnVtY2hhbiA9IDI7Cj4+PiArICAgICAg ICAgICAgICAgYnJlYWs7Cj4+PiArICAgICAgIH0KPj4+ICsgICAgICAgYWRldi0+bWMudnJhbV93 aWR0aCA9IG51bWNoYW4gKiBjaGFuc2l6ZTsKPj4+ICsKPj4+ICsgICAgICAgLyogQ291bGQgYXBl ciBzaXplIHJlcG9ydCAwID8gKi8KPj4+ICsgICAgICAgYWRldi0+bWMuYXBlcl9iYXNlID0gcGNp X3Jlc291cmNlX3N0YXJ0KGFkZXYtPnBkZXYsIDApOwo+Pj4gKyAgICAgICBhZGV2LT5tYy5hcGVy X3NpemUgPSBwY2lfcmVzb3VyY2VfbGVuKGFkZXYtPnBkZXYsIDApOwo+Pj4gKyAgICAgICAvKiBz aXplIGluIE1CIG9uIHNpICovCj4+PiArICAgICAgIGFkZXYtPm1jLm1jX3ZyYW1fc2l6ZSA9Cj4+ PiArICAgICAgICAgICAgICAgbmJpb192Nl8xX2dldF9tZW1zaXplKGFkZXYpICogMTAyNFVMTCAq IDEwMjRVTEw7Cj4+PiArICAgICAgIGFkZXYtPm1jLnJlYWxfdnJhbV9zaXplID0gYWRldi0+bWMu bWNfdnJhbV9zaXplOwo+Pj4gKyAgICAgICBhZGV2LT5tYy52aXNpYmxlX3ZyYW1fc2l6ZSA9IGFk ZXYtPm1jLmFwZXJfc2l6ZTsKPj4+ICsKPj4+ICsgICAgICAgLyogSW4gY2FzZSB0aGUgUENJIEJB UiBpcyBsYXJnZXIgdGhhbiB0aGUgYWN0dWFsIGFtb3VudCBvZiB2cmFtICovCj4+PiArICAgICAg IGlmIChhZGV2LT5tYy52aXNpYmxlX3ZyYW1fc2l6ZSA+IGFkZXYtPm1jLnJlYWxfdnJhbV9zaXpl KQo+Pj4gKyAgICAgICAgICAgICAgIGFkZXYtPm1jLnZpc2libGVfdnJhbV9zaXplID0gYWRldi0+ bWMucmVhbF92cmFtX3NpemU7Cj4+PiArCj4+PiArICAgICAgIC8qIHVubGVzcyB0aGUgdXNlciBo YWQgb3ZlcnJpZGRlbiBpdCwgc2V0IHRoZSBnYXJ0Cj4+PiArICAgICAgICAqIHNpemUgZXF1YWwg dG8gdGhlIDEwMjQgb3IgdnJhbSwgd2hpY2hldmVyIGlzIGxhcmdlci4KPj4+ICsgICAgICAgICov Cj4+PiArICAgICAgIGlmIChhbWRncHVfZ2FydF9zaXplID09IC0xKQo+Pj4gKyAgICAgICAgICAg ICAgIGFkZXYtPm1jLmd0dF9zaXplID0gbWF4KCgxMDI0VUxMIDw8IDIwKSwKPj4+IGFkZXYtPm1j Lm1jX3ZyYW1fc2l6ZSk7Cj4+PiArICAgICAgIGVsc2UKPj4+ICsgICAgICAgICAgICAgICBhZGV2 LT5tYy5ndHRfc2l6ZSA9ICh1aW50NjRfdClhbWRncHVfZ2FydF9zaXplIDw8IDIwOwo+Pj4gKwo+ Pj4gKyAgICAgICBnbWNfdjlfMF92cmFtX2d0dF9sb2NhdGlvbihhZGV2LCAmYWRldi0+bWMpOwo+ Pj4gKwo+Pj4gKyAgICAgICByZXR1cm4gMDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCBn bWNfdjlfMF9nYXJ0X2luaXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+PiArewo+Pj4g KyAgICAgICBpbnQgcjsKPj4+ICsKPj4+ICsgICAgICAgaWYgKGFkZXYtPmdhcnQucm9iaikgewo+ Pj4gKyAgICAgICAgICAgICAgIFdBUk4oMSwgIlZFR0ExMCBQQ0lFIEdBUlQgYWxyZWFkeSBpbml0 aWFsaXplZFxuIik7Cj4+PiArICAgICAgICAgICAgICAgcmV0dXJuIDA7Cj4+PiArICAgICAgIH0K Pj4+ICsgICAgICAgLyogSW5pdGlhbGl6ZSBjb21tb24gZ2FydCBzdHJ1Y3R1cmUgKi8KPj4+ICsg ICAgICAgciA9IGFtZGdwdV9nYXJ0X2luaXQoYWRldik7Cj4+PiArICAgICAgIGlmIChyKQo+Pj4g KyAgICAgICAgICAgICAgIHJldHVybiByOwo+Pj4gKyAgICAgICBhZGV2LT5nYXJ0LnRhYmxlX3Np emUgPSBhZGV2LT5nYXJ0Lm51bV9ncHVfcGFnZXMgKiA4Owo+Pj4gKyAgICAgICBhZGV2LT5nYXJ0 LmdhcnRfcHRlX2ZsYWdzID0gQU1ER1BVX1BURV9NVFlQRShNVFlQRV9VQykgfAo+Pj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQU1ER1BVX1BURV9FWEVDVVRBQkxFOwo+Pj4gKyAg ICAgICByZXR1cm4gYW1kZ3B1X2dhcnRfdGFibGVfdnJhbV9hbGxvYyhhZGV2KTsKPj4+ICt9Cj4+ PiArCj4+PiArLyoKPj4+ICsgKiB2bQo+Pj4gKyAqIFZNSUQgMCBpcyB0aGUgcGh5c2ljYWwgR1BV IGFkZHJlc3NlcyBhcyB1c2VkIGJ5IHRoZSBrZXJuZWwuCj4+PiArICogVk1JRHMgMS0xNSBhcmUg dXNlZCBmb3IgdXNlcnNwYWNlIGNsaWVudHMgYW5kIGFyZSBoYW5kbGVkCj4+PiArICogYnkgdGhl IGFtZGdwdSB2bS9oc2EgY29kZS4KPj4+ICsgKi8KPj4+ICsvKioKPj4+ICsgKiBnbWNfdjlfMF92 bV9pbml0IC0gdm0gaW5pdCBjYWxsYmFjawo+Pj4gKyAqCj4+PiArICogQGFkZXY6IGFtZGdwdV9k ZXZpY2UgcG9pbnRlcgo+Pj4gKyAqCj4+PiArICogSW5pdHMgdmVnYTEwIHNwZWNpZmljIHZtIHBh cmFtZXRlcnMgKG51bWJlciBvZiBWTXMsIGJhc2Ugb2YgdnJhbSBmb3IKPj4+ICsgKiBWTUlEcyAx LTE1KSAodmVnYTEwKS4KPj4+ICsgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MuCj4+PiArICovCj4+ PiArc3RhdGljIGludCBnbWNfdjlfMF92bV9pbml0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 KQo+Pj4gK3sKPj4+ICsgICAgICAgLyoKPj4+ICsgICAgICAgICogbnVtYmVyIG9mIFZNcwo+Pj4g KyAgICAgICAgKiBWTUlEIDAgaXMgcmVzZXJ2ZWQgZm9yIFN5c3RlbQo+Pj4gKyAgICAgICAgKiBh bWRncHUgZ3JhcGhpY3MvY29tcHV0ZSB3aWxsIHVzZSBWTUlEcyAxLTcKPj4+ICsgICAgICAgICog YW1ka2ZkIHdpbGwgdXNlIFZNSURzIDgtMTUKPj4+ICsgICAgICAgICovCj4+PiArICAgICAgIGFk ZXYtPnZtX21hbmFnZXIubnVtX2lkcyA9IEFNREdQVV9OVU1fT0ZfVk1JRFM7Cj4+PiArICAgICAg IGFtZGdwdV92bV9tYW5hZ2VyX2luaXQoYWRldik7Cj4+PiArCj4+PiArICAgICAgIC8qIGJhc2Ug b2Zmc2V0IG9mIHZyYW0gcGFnZXMgKi8KPj4+ICsgICAgICAgLypYWFggVGhpcyB2YWx1ZSBpcyBu b3QgemVybyBmb3IgQVBVKi8KPj4+ICsgICAgICAgYWRldi0+dm1fbWFuYWdlci52cmFtX2Jhc2Vf b2Zmc2V0ID0gMDsKPj4+ICsKPj4+ICsgICAgICAgcmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4g Ky8qKgo+Pj4gKyAqIGdtY192OV8wX3ZtX2ZpbmkgLSB2bSBmaW5pIGNhbGxiYWNrCj4+PiArICoK Pj4+ICsgKiBAYWRldjogYW1kZ3B1X2RldmljZSBwb2ludGVyCj4+PiArICoKPj4+ICsgKiBUZWFy IGRvd24gYW55IGFzaWMgc3BlY2lmaWMgVk0gc2V0dXAuCj4+PiArICovCj4+PiArc3RhdGljIHZv aWQgZ21jX3Y5XzBfdm1fZmluaShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPj4+ICt7Cj4+ PiArICAgICAgIHJldHVybjsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCBnbWNfdjlfMF9z d19pbml0KHZvaWQgKmhhbmRsZSkKPj4+ICt7Cj4+PiArICAgICAgIGludCByOwo+Pj4gKyAgICAg ICBpbnQgZG1hX2JpdHM7Cj4+PiArICAgICAgIHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0g KHN0cnVjdCBhbWRncHVfZGV2aWNlICopaGFuZGxlOwo+Pj4gKwo+Pj4gKyAgICAgICBzcGluX2xv Y2tfaW5pdCgmYWRldi0+bWMuaW52YWxpZGF0ZV9sb2NrKTsKPj4+ICsKPj4+ICsgICAgICAgaWYg KGFkZXYtPmZsYWdzICYgQU1EX0lTX0FQVSkgewo+Pj4gKyAgICAgICAgICAgICAgIGFkZXYtPm1j LnZyYW1fdHlwZSA9IEFNREdQVV9WUkFNX1RZUEVfVU5LTk9XTjsKPj4+ICsgICAgICAgfSBlbHNl IHsKPj4+ICsgICAgICAgICAgICAgICAvKiBYWFggRG9uJ3Qga25vdyBob3cgdG8gZ2V0IFZSQU0g dHlwZSB5ZXQuICovCj4+PiArICAgICAgICAgICAgICAgYWRldi0+bWMudnJhbV90eXBlID0gQU1E R1BVX1ZSQU1fVFlQRV9IQk07Cj4+PiArICAgICAgIH0KPj4+ICsKPj4+ICsgICAgICAgLyogVGhp cyBpbnRlcnJ1cHQgaXMgVk1DIHBhZ2UgZmF1bHQuKi8KPj4+ICsgICAgICAgciA9IGFtZGdwdV9p cnFfYWRkX2lkKGFkZXYsIEFNREdQVV9JSF9DTElFTlRJRF9WTUMsIDAsCj4+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZhZGV2LT5tYy52bV9mYXVsdCk7Cj4+PiArCj4+PiArICAg ICAgIGlmIChyKQo+Pj4gKyAgICAgICAgICAgICAgIHJldHVybiByOwo+Pj4gKwo+Pj4gKyAgICAg ICAvKiBBZGp1c3QgVk0gc2l6ZSBoZXJlLgo+Pj4gKyAgICAgICAgKiBDdXJyZW50bHkgZGVmYXVs dCB0byA2NEdCICgoMTYgPDwgMjApIDRrIHBhZ2VzKS4KPj4+ICsgICAgICAgICogTWF4IEdQVVZN IHNpemUgaXMgNDggYml0cy4KPj4+ICsgICAgICAgICovCj4+PiArICAgICAgIGFkZXYtPnZtX21h bmFnZXIubWF4X3BmbiA9IGFtZGdwdV92bV9zaXplIDw8IDE4Owo+Pj4gKwo+Pj4gKyAgICAgICAv KiBTZXQgdGhlIGludGVybmFsIE1DIGFkZHJlc3MgbWFzawo+Pj4gKyAgICAgICAgKiBUaGlzIGlz IHRoZSBtYXggYWRkcmVzcyBvZiB0aGUgR1BVJ3MKPj4+ICsgICAgICAgICogaW50ZXJuYWwgYWRk cmVzcyBzcGFjZS4KPj4+ICsgICAgICAgICovCj4+PiArICAgICAgIGFkZXYtPm1jLm1jX21hc2sg PSAweGZmZmZmZmZmZmZmZlVMTDsgLyogNDggYml0IE1DICovCj4+PiArCj4+PiArICAgICAgIC8q IHNldCBETUEgbWFzayArIG5lZWRfZG1hMzIgZmxhZ3MuCj4+PiArICAgICAgICAqIFBDSUUgLSBj YW4gaGFuZGxlIDQ0LWJpdHMuCj4+PiArICAgICAgICAqIElHUCAtIGNhbiBoYW5kbGUgNDQtYml0 cwo+Pj4gKyAgICAgICAgKiBQQ0kgLSBkbWEzMiBmb3IgbGVnYWN5IHBjaSBnYXJ0LCA0NCBiaXRz IG9uIHZlZ2ExMAo+Pj4gKyAgICAgICAgKi8KPj4+ICsgICAgICAgYWRldi0+bmVlZF9kbWEzMiA9 IGZhbHNlOwo+Pj4gKyAgICAgICBkbWFfYml0cyA9IGFkZXYtPm5lZWRfZG1hMzIgPyAzMiA6IDQ0 Owo+Pj4gKyAgICAgICByID0gcGNpX3NldF9kbWFfbWFzayhhZGV2LT5wZGV2LCBETUFfQklUX01B U0soZG1hX2JpdHMpKTsKPj4+ICsgICAgICAgaWYgKHIpIHsKPj4+ICsgICAgICAgICAgICAgICBh ZGV2LT5uZWVkX2RtYTMyID0gdHJ1ZTsKPj4+ICsgICAgICAgICAgICAgICBkbWFfYml0cyA9IDMy Owo+Pj4gKyAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgImFtZGdwdTogTm8gc3Vp dGFibGUgRE1BCj4+PiBhdmFpbGFibGUuXG4iKTsKPj4+ICsgICAgICAgfQo+Pj4gKyAgICAgICBy ID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKGFkZXYtPnBkZXYsCj4+PiBETUFfQklUX01B U0soZG1hX2JpdHMpKTsKPj4+ICsgICAgICAgaWYgKHIpIHsKPj4+ICsgICAgICAgICAgICAgICBw Y2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2soYWRldi0+cGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7 Cj4+PiArICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiYW1kZ3B1OiBObyBjb2hl cmVudCBETUEKPj4+IGF2YWlsYWJsZS5cbiIpOwo+Pj4gKyAgICAgICB9Cj4+PiArCj4+PiArICAg ICAgIHIgPSBnbWNfdjlfMF9tY19pbml0KGFkZXYpOwo+Pj4gKyAgICAgICBpZiAocikKPj4+ICsg ICAgICAgICAgICAgICByZXR1cm4gcjsKPj4+ICsKPj4+ICsgICAgICAgLyogTWVtb3J5IG1hbmFn ZXIgKi8KPj4+ICsgICAgICAgciA9IGFtZGdwdV9ib19pbml0KGFkZXYpOwo+Pj4gKyAgICAgICBp ZiAocikKPj4+ICsgICAgICAgICAgICAgICByZXR1cm4gcjsKPj4+ICsKPj4+ICsgICAgICAgciA9 IGdtY192OV8wX2dhcnRfaW5pdChhZGV2KTsKPj4+ICsgICAgICAgaWYgKHIpCj4+PiArICAgICAg ICAgICAgICAgcmV0dXJuIHI7Cj4+PiArCj4+PiArICAgICAgIGlmICghYWRldi0+dm1fbWFuYWdl ci5lbmFibGVkKSB7Cj4+PiArICAgICAgICAgICAgICAgciA9IGdtY192OV8wX3ZtX2luaXQoYWRl dik7Cj4+PiArICAgICAgICAgICAgICAgaWYgKHIpIHsKPj4+ICsgICAgICAgICAgICAgICAgICAg ICAgIGRldl9lcnIoYWRldi0+ZGV2LCAidm0gbWFuYWdlciBpbml0aWFsaXphdGlvbgo+Pj4gZmFp bGVkICglZCkuXG4iLCByKTsKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByOwo+ Pj4gKyAgICAgICAgICAgICAgIH0KPj4+ICsgICAgICAgICAgICAgICBhZGV2LT52bV9tYW5hZ2Vy LmVuYWJsZWQgPSB0cnVlOwo+Pj4gKyAgICAgICB9Cj4+PiArICAgICAgIHJldHVybiByOwo+Pj4g K30KPj4+ICsKPj4+ICsvKioKPj4+ICsgKiBnbWNfdjhfMF9nYXJ0X2ZpbmkgLSB2bSBmaW5pIGNh bGxiYWNrCj4+PiArICoKPj4+ICsgKiBAYWRldjogYW1kZ3B1X2RldmljZSBwb2ludGVyCj4+PiAr ICoKPj4+ICsgKiBUZWFycyBkb3duIHRoZSBkcml2ZXIgR0FSVC9WTSBzZXR1cCAoQ0lLKS4KPj4+ ICsgKi8KPj4+ICtzdGF0aWMgdm9pZCBnbWNfdjlfMF9nYXJ0X2Zpbmkoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYpCj4+PiArewo+Pj4gKyAgICAgICBhbWRncHVfZ2FydF90YWJsZV92cmFtX2Zy ZWUoYWRldik7Cj4+PiArICAgICAgIGFtZGdwdV9nYXJ0X2ZpbmkoYWRldik7Cj4+PiArfQo+Pj4g Kwo+Pj4gK3N0YXRpYyBpbnQgZ21jX3Y5XzBfc3dfZmluaSh2b2lkICpoYW5kbGUpCj4+PiArewo+ Pj4gKyAgICAgICBzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2Rl dmljZSAqKWhhbmRsZTsKPj4+ICsKPj4+ICsgICAgICAgaWYgKGFkZXYtPnZtX21hbmFnZXIuZW5h YmxlZCkgewo+Pj4gKyAgICAgICAgICAgICAgIGFtZGdwdV92bV9tYW5hZ2VyX2ZpbmkoYWRldik7 Cj4+PiArICAgICAgICAgICAgICAgZ21jX3Y5XzBfdm1fZmluaShhZGV2KTsKPj4+ICsgICAgICAg ICAgICAgICBhZGV2LT52bV9tYW5hZ2VyLmVuYWJsZWQgPSBmYWxzZTsKPj4+ICsgICAgICAgfQo+ Pj4gKyAgICAgICBnbWNfdjlfMF9nYXJ0X2ZpbmkoYWRldik7Cj4+PiArICAgICAgIGFtZGdwdV9n ZW1fZm9yY2VfcmVsZWFzZShhZGV2KTsKPj4+ICsgICAgICAgYW1kZ3B1X2JvX2ZpbmkoYWRldik7 Cj4+PiArCj4+PiArICAgICAgIHJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9p ZCBnbWNfdjlfMF9pbml0X2dvbGRlbl9yZWdpc3RlcnMoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYpCj4+PiArewo+Pj4gKyAgICAgICBzd2l0Y2ggKGFkZXYtPmFzaWNfdHlwZSkgewo+Pj4gKyAg ICAgICBjYXNlIENISVBfVkVHQTEwOgo+Pj4gKyAgICAgICAgICAgICAgIGJyZWFrOwo+Pj4gKyAg ICAgICBkZWZhdWx0Ogo+Pj4gKyAgICAgICAgICAgICAgIGJyZWFrOwo+Pj4gKyAgICAgICB9Cj4+ PiArfQo+Pj4gKwo+Pj4gKy8qKgo+Pj4gKyAqIGdtY192OV8wX2dhcnRfZW5hYmxlIC0gZ2FydCBl bmFibGUKPj4+ICsgKgo+Pj4gKyAqIEBhZGV2OiBhbWRncHVfZGV2aWNlIHBvaW50ZXIKPj4+ICsg Ki8KPj4+ICtzdGF0aWMgaW50IGdtY192OV8wX2dhcnRfZW5hYmxlKHN0cnVjdCBhbWRncHVfZGV2 aWNlICphZGV2KQo+Pj4gK3sKPj4+ICsgICAgICAgaW50IHI7Cj4+PiArICAgICAgIGJvb2wgdmFs dWU7Cj4+PiArICAgICAgIHUzMiB0bXA7Cj4+PiArCj4+PiArICAgICAgIGFtZGdwdV9wcm9ncmFt X3JlZ2lzdGVyX3NlcXVlbmNlKGFkZXYsCj4+PiArICAgICAgICAgICAgICAgZ29sZGVuX3NldHRp bmdzX3ZlZ2ExMF9oZHAsCj4+PiArICAgICAgICAgICAgICAgKGNvbnN0IHUzMilBUlJBWV9TSVpF KGdvbGRlbl9zZXR0aW5nc192ZWdhMTBfaGRwKSk7Cj4+PiArCj4+PiArICAgICAgIGlmIChhZGV2 LT5nYXJ0LnJvYmogPT0gTlVMTCkgewo+Pj4gKyAgICAgICAgICAgICAgIGRldl9lcnIoYWRldi0+ ZGV2LCAiTm8gVlJBTSBvYmplY3QgZm9yIFBDSUUgR0FSVC5cbiIpOwo+Pj4gKyAgICAgICAgICAg ICAgIHJldHVybiAtRUlOVkFMOwo+Pj4gKyAgICAgICB9Cj4+PiArICAgICAgIHIgPSBhbWRncHVf Z2FydF90YWJsZV92cmFtX3BpbihhZGV2KTsKPj4+ICsgICAgICAgaWYgKHIpCj4+PiArICAgICAg ICAgICAgICAgcmV0dXJuIHI7Cj4+PiArCj4+PiArICAgICAgIC8qIEFmdGVyIEhEUCBpcyBpbml0 aWFsaXplZCwgZmx1c2ggSERQLiovCj4+PiArICAgICAgIG5iaW9fdjZfMV9oZHBfZmx1c2goYWRl dik7Cj4+PiArCj4+PiArICAgICAgIHIgPSBnZnhodWJfdjFfMF9nYXJ0X2VuYWJsZShhZGV2KTsK Pj4+ICsgICAgICAgaWYgKHIpCj4+PiArICAgICAgICAgICAgICAgcmV0dXJuIHI7Cj4+PiArCj4+ PiArICAgICAgIHIgPSBtbWh1Yl92MV8wX2dhcnRfZW5hYmxlKGFkZXYpOwo+Pj4gKyAgICAgICBp ZiAocikKPj4+ICsgICAgICAgICAgICAgICByZXR1cm4gcjsKPj4+ICsKPj4+ICsgICAgICAgdG1w ID0gUlJFRzMyKFNPQzE1X1JFR19PRkZTRVQoSERQLCAwLCBtbUhEUF9NSVNDX0NOVEwpKTsKPj4+ ICsgICAgICAgdG1wIHw9IEhEUF9NSVNDX0NOVExfX0ZMVVNIX0lOVkFMSURBVEVfQ0FDSEVfTUFT SzsKPj4+ICsgICAgICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoSERQLCAwLCBtbUhEUF9NSVND X0NOVEwpLCB0bXApOwo+Pj4gKwo+Pj4gKyAgICAgICB0bXAgPSBSUkVHMzIoU09DMTVfUkVHX09G RlNFVChIRFAsIDAsIG1tSERQX0hPU1RfUEFUSF9DTlRMKSk7Cj4+PiArICAgICAgIFdSRUczMihT T0MxNV9SRUdfT0ZGU0VUKEhEUCwgMCwgbW1IRFBfSE9TVF9QQVRIX0NOVEwpLCB0bXApOwo+Pj4g Kwo+Pj4gKwo+Pj4gKyAgICAgICBpZiAoYW1kZ3B1X3ZtX2ZhdWx0X3N0b3AgPT0gQU1ER1BVX1ZN X0ZBVUxUX1NUT1BfQUxXQVlTKQo+Pj4gKyAgICAgICAgICAgICAgIHZhbHVlID0gZmFsc2U7Cj4+ PiArICAgICAgIGVsc2UKPj4+ICsgICAgICAgICAgICAgICB2YWx1ZSA9IHRydWU7Cj4+PiArCj4+ PiArICAgICAgIGdmeGh1Yl92MV8wX3NldF9mYXVsdF9lbmFibGVfZGVmYXVsdChhZGV2LCB2YWx1 ZSk7Cj4+PiArICAgICAgIG1taHViX3YxXzBfc2V0X2ZhdWx0X2VuYWJsZV9kZWZhdWx0KGFkZXYs IHZhbHVlKTsKPj4+ICsKPj4+ICsgICAgICAgZ21jX3Y5XzBfZ2FydF9mbHVzaF9ncHVfdGxiKGFk ZXYsIDApOwo+Pj4gKwo+Pj4gKyAgICAgICBEUk1fSU5GTygiUENJRSBHQVJUIG9mICV1TSBlbmFi bGVkICh0YWJsZSBhdCAweCUwMTZsbFgpLlxuIiwKPj4+ICsgICAgICAgICAgICAgICAgKHVuc2ln bmVkKShhZGV2LT5tYy5ndHRfc2l6ZSA+PiAyMCksCj4+PiArICAgICAgICAgICAgICAgICh1bnNp Z25lZCBsb25nIGxvbmcpYWRldi0+Z2FydC50YWJsZV9hZGRyKTsKPj4+ICsgICAgICAgYWRldi0+ Z2FydC5yZWFkeSA9IHRydWU7Cj4+PiArICAgICAgIHJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ ICtzdGF0aWMgaW50IGdtY192OV8wX2h3X2luaXQodm9pZCAqaGFuZGxlKQo+Pj4gK3sKPj4+ICsg ICAgICAgaW50IHI7Cj4+PiArICAgICAgIHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gKHN0 cnVjdCBhbWRncHVfZGV2aWNlICopaGFuZGxlOwo+Pj4gKwo+Pj4gKyAgICAgICAvKiBUaGUgc2Vx dWVuY2Ugb2YgdGhlc2UgdHdvIGZ1bmN0aW9uIGNhbGxzIG1hdHRlcnMuKi8KPj4+ICsgICAgICAg Z21jX3Y5XzBfaW5pdF9nb2xkZW5fcmVnaXN0ZXJzKGFkZXYpOwo+Pj4gKwo+Pj4gKyAgICAgICBy ID0gZ21jX3Y5XzBfZ2FydF9lbmFibGUoYWRldik7Cj4+PiArCj4+PiArICAgICAgIHJldHVybiBy Owo+Pj4gK30KPj4+ICsKPj4+ICsvKioKPj4+ICsgKiBnbWNfdjlfMF9nYXJ0X2Rpc2FibGUgLSBn YXJ0IGRpc2FibGUKPj4+ICsgKgo+Pj4gKyAqIEBhZGV2OiBhbWRncHVfZGV2aWNlIHBvaW50ZXIK Pj4+ICsgKgo+Pj4gKyAqIFRoaXMgZGlzYWJsZXMgYWxsIFZNIHBhZ2UgdGFibGUuCj4+PiArICov Cj4+PiArc3RhdGljIHZvaWQgZ21jX3Y5XzBfZ2FydF9kaXNhYmxlKHN0cnVjdCBhbWRncHVfZGV2 aWNlICphZGV2KQo+Pj4gK3sKPj4+ICsgICAgICAgZ2Z4aHViX3YxXzBfZ2FydF9kaXNhYmxlKGFk ZXYpOwo+Pj4gKyAgICAgICBtbWh1Yl92MV8wX2dhcnRfZGlzYWJsZShhZGV2KTsKPj4+ICsgICAg ICAgYW1kZ3B1X2dhcnRfdGFibGVfdnJhbV91bnBpbihhZGV2KTsKPj4+ICt9Cj4+PiArCj4+PiAr c3RhdGljIGludCBnbWNfdjlfMF9od19maW5pKHZvaWQgKmhhbmRsZSkKPj4+ICt7Cj4+PiArICAg ICAgIHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gKHN0cnVjdCBhbWRncHVfZGV2aWNlICop aGFuZGxlOwo+Pj4gKwo+Pj4gKyAgICAgICBhbWRncHVfaXJxX3B1dChhZGV2LCAmYWRldi0+bWMu dm1fZmF1bHQsIDApOwo+Pj4gKyAgICAgICBnbWNfdjlfMF9nYXJ0X2Rpc2FibGUoYWRldik7Cj4+ PiArCj4+PiArICAgICAgIHJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IGdt Y192OV8wX3N1c3BlbmQodm9pZCAqaGFuZGxlKQo+Pj4gK3sKPj4+ICsgICAgICAgc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7Cj4+PiAr Cj4+PiArICAgICAgIGlmIChhZGV2LT52bV9tYW5hZ2VyLmVuYWJsZWQpIHsKPj4+ICsgICAgICAg ICAgICAgICBnbWNfdjlfMF92bV9maW5pKGFkZXYpOwo+Pj4gKyAgICAgICAgICAgICAgIGFkZXYt PnZtX21hbmFnZXIuZW5hYmxlZCA9IGZhbHNlOwo+Pj4gKyAgICAgICB9Cj4+PiArICAgICAgIGdt Y192OV8wX2h3X2ZpbmkoYWRldik7Cj4+PiArCj4+PiArICAgICAgIHJldHVybiAwOwo+Pj4gK30K Pj4+ICsKPj4+ICtzdGF0aWMgaW50IGdtY192OV8wX3Jlc3VtZSh2b2lkICpoYW5kbGUpCj4+PiAr ewo+Pj4gKyAgICAgICBpbnQgcjsKPj4+ICsgICAgICAgc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7Cj4+PiArCj4+PiArICAgICAgIHIg PSBnbWNfdjlfMF9od19pbml0KGFkZXYpOwo+Pj4gKyAgICAgICBpZiAocikKPj4+ICsgICAgICAg ICAgICAgICByZXR1cm4gcjsKPj4+ICsKPj4+ICsgICAgICAgaWYgKCFhZGV2LT52bV9tYW5hZ2Vy LmVuYWJsZWQpIHsKPj4+ICsgICAgICAgICAgICAgICByID0gZ21jX3Y5XzBfdm1faW5pdChhZGV2 KTsKPj4+ICsgICAgICAgICAgICAgICBpZiAocikgewo+Pj4gKyAgICAgICAgICAgICAgICAgICAg ICAgZGV2X2VycihhZGV2LT5kZXYsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJ2bSBtYW5hZ2VyIGluaXRpYWxpemF0aW9uIGZhaWxlZAo+Pj4gKCVkKS5cbiIsIHIpOwo+Pj4g KyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHI7Cj4+PiArICAgICAgICAgICAgICAgfQo+ Pj4gKyAgICAgICAgICAgICAgIGFkZXYtPnZtX21hbmFnZXIuZW5hYmxlZCA9IHRydWU7Cj4+PiAr ICAgICAgIH0KPj4+ICsKPj4+ICsgICAgICAgcmV0dXJuIHI7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0 YXRpYyBib29sIGdtY192OV8wX2lzX2lkbGUodm9pZCAqaGFuZGxlKQo+Pj4gK3sKPj4+ICsgICAg ICAgLyogTUMgaXMgYWx3YXlzIHJlYWR5IGluIEdNQyB2OS4qLwo+Pj4gKyAgICAgICByZXR1cm4g dHJ1ZTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCBnbWNfdjlfMF93YWl0X2Zvcl9pZGxl KHZvaWQgKmhhbmRsZSkKPj4+ICt7Cj4+PiArICAgICAgIC8qIFRoZXJlIGlzIG5vIG5lZWQgdG8g d2FpdCBmb3IgTUMgaWRsZSBpbiBHTUMgdjkuKi8KPj4+ICsgICAgICAgcmV0dXJuIDA7Cj4+PiAr fQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgZ21jX3Y5XzBfc29mdF9yZXNldCh2b2lkICpoYW5kbGUp Cj4+PiArewo+Pj4gKyAgICAgICAvKiBYWFggZm9yIGVtdWxhdGlvbi4qLwo+Pj4gKyAgICAgICBy ZXR1cm4gMDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCBnbWNfdjlfMF9zZXRfY2xvY2tn YXRpbmdfc3RhdGUodm9pZCAqaGFuZGxlLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGVudW0gYW1kX2Nsb2NrZ2F0aW5nX3N0YXRlIHN0YXRlKQo+Pj4gK3sKPj4+ ICsgICAgICAgcmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgZ21jX3Y5XzBf c2V0X3Bvd2VyZ2F0aW5nX3N0YXRlKHZvaWQgKmhhbmRsZSwKPj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBlbnVtIGFtZF9wb3dlcmdhdGluZ19zdGF0ZSBzdGF0ZSkK Pj4+ICt7Cj4+PiArICAgICAgIHJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICtjb25zdCBzdHJ1 Y3QgYW1kX2lwX2Z1bmNzIGdtY192OV8wX2lwX2Z1bmNzID0gewo+Pj4gKyAgICAgICAubmFtZSA9 ICJnbWNfdjlfMCIsCj4+PiArICAgICAgIC5lYXJseV9pbml0ID0gZ21jX3Y5XzBfZWFybHlfaW5p dCwKPj4+ICsgICAgICAgLmxhdGVfaW5pdCA9IGdtY192OV8wX2xhdGVfaW5pdCwKPj4+ICsgICAg ICAgLnN3X2luaXQgPSBnbWNfdjlfMF9zd19pbml0LAo+Pj4gKyAgICAgICAuc3dfZmluaSA9IGdt Y192OV8wX3N3X2ZpbmksCj4+PiArICAgICAgIC5od19pbml0ID0gZ21jX3Y5XzBfaHdfaW5pdCwK Pj4+ICsgICAgICAgLmh3X2ZpbmkgPSBnbWNfdjlfMF9od19maW5pLAo+Pj4gKyAgICAgICAuc3Vz cGVuZCA9IGdtY192OV8wX3N1c3BlbmQsCj4+PiArICAgICAgIC5yZXN1bWUgPSBnbWNfdjlfMF9y ZXN1bWUsCj4+PiArICAgICAgIC5pc19pZGxlID0gZ21jX3Y5XzBfaXNfaWRsZSwKPj4+ICsgICAg ICAgLndhaXRfZm9yX2lkbGUgPSBnbWNfdjlfMF93YWl0X2Zvcl9pZGxlLAo+Pj4gKyAgICAgICAu c29mdF9yZXNldCA9IGdtY192OV8wX3NvZnRfcmVzZXQsCj4+PiArICAgICAgIC5zZXRfY2xvY2tn YXRpbmdfc3RhdGUgPSBnbWNfdjlfMF9zZXRfY2xvY2tnYXRpbmdfc3RhdGUsCj4+PiArICAgICAg IC5zZXRfcG93ZXJnYXRpbmdfc3RhdGUgPSBnbWNfdjlfMF9zZXRfcG93ZXJnYXRpbmdfc3RhdGUs Cj4+PiArfTsKPj4+ICsKPj4+ICtjb25zdCBzdHJ1Y3QgYW1kZ3B1X2lwX2Jsb2NrX3ZlcnNpb24g Z21jX3Y5XzBfaXBfYmxvY2sgPQo+Pj4gK3sKPj4+ICsgICAgICAgLnR5cGUgPSBBTURfSVBfQkxP Q0tfVFlQRV9HTUMsCj4+PiArICAgICAgIC5tYWpvciA9IDksCj4+PiArICAgICAgIC5taW5vciA9 IDAsCj4+PiArICAgICAgIC5yZXYgPSAwLAo+Pj4gKyAgICAgICAuZnVuY3MgPSAmZ21jX3Y5XzBf aXBfZnVuY3MsCj4+PiArfTsKPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9nbWNfdjlfMC5oCj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dtY192OV8w LmgKPj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+PiBpbmRleCAwMDAwMDAwLi5iMDMwY2E1Cj4+ PiAtLS0gL2Rldi9udWxsCj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nbWNf djlfMC5oCj4+PiBAQCAtMCwwICsxLDMwIEBACj4+PiArLyoKPj4+ICsgKiBDb3B5cmlnaHQgMjAx NiBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCj4+PiArICoKPj4+ICsgKiBQZXJtaXNzaW9u IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p bmcKPj4+IGEKPj4+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9j dW1lbnRhdGlvbiBmaWxlcyAodGhlCj4+PiAiU29mdHdhcmUiKSwKPj4+ICsgKiB0byBkZWFsIGlu IHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dAo+Pj4g bGltaXRhdGlvbgo+Pj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdl LCBwdWJsaXNoLCBkaXN0cmlidXRlLAo+Pj4gc3VibGljZW5zZSwKPj4+ICsgKiBhbmQvb3Igc2Vs bCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0 aGUKPj4+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhl IGZvbGxvd2luZyBjb25kaXRpb25zOgo+Pj4gKyAqCj4+PiArICogVGhlIGFib3ZlIGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKPj4+IGluY2x1ZGVk IGluCj4+PiArICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29m dHdhcmUuCj4+PiArICoKPj4+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKPj4+IEVYUFJFU1MgT1IKPj4+ICsgKiBJTVBM SUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCj4+PiBN RVJDSEFOVEFCSUxJVFksCj4+PiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug QU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UCj4+PiBTSEFMTAo+Pj4gKyAqIFRIRSBD T1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwg REFNQUdFUwo+Pj4gT1IKPj4+ICsgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNU SU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKPj4+ICsgKiBBUklTSU5HIEZST00s IE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IK Pj4+ICsgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCj4+PiArICoKPj4+ICsgKi8K Pj4+ICsKPj4+ICsjaWZuZGVmIF9fR01DX1Y5XzBfSF9fCj4+PiArI2RlZmluZSBfX0dNQ19WOV8w X0hfXwo+Pj4gKwo+Pj4gK2V4dGVybiBjb25zdCBzdHJ1Y3QgYW1kX2lwX2Z1bmNzIGdtY192OV8w X2lwX2Z1bmNzOwo+Pj4gK2V4dGVybiBjb25zdCBzdHJ1Y3QgYW1kZ3B1X2lwX2Jsb2NrX3ZlcnNp b24gZ21jX3Y5XzBfaXBfYmxvY2s7Cj4+PiArCj4+PiArI2VuZGlmCj4+PiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvbW1odWJfdjFfMC5jCj4+PiBiL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L21taHViX3YxXzAuYwo+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4+ IGluZGV4IDAwMDAwMDAuLmIxZTBlNmIKPj4+IC0tLSAvZGV2L251bGwKPj4+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L21taHViX3YxXzAuYwo+Pj4gQEAgLTAsMCArMSw1ODUgQEAK Pj4+ICsvKgo+Pj4gKyAqIENvcHlyaWdodCAyMDE2IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIElu Yy4KPj4+ICsgKgo+Pj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2Yg Y2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwo+Pj4gYQo+Pj4gKyAqIGNvcHkgb2YgdGhp cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKPj4+ICJT b2Z0d2FyZSIpLAo+Pj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJp Y3Rpb24sIGluY2x1ZGluZyB3aXRob3V0Cj4+PiBsaW1pdGF0aW9uCj4+PiArICogdGhlIHJpZ2h0 cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsCj4+PiBz dWJsaWNlbnNlLAo+Pj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+Pj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5p c2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4+PiAr ICoKPj4+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9u IG5vdGljZSBzaGFsbCBiZQo+Pj4gaW5jbHVkZWQgaW4KPj4+ICsgKiBhbGwgY29waWVzIG9yIHN1 YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KPj4+ICsgKgo+Pj4gKyAqIFRIRSBT T0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E LAo+Pj4gRVhQUkVTUyBPUgo+Pj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU RUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKPj4+IE1FUkNIQU5UQUJJTElUWSwKPj4+ICsgKiBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8g RVZFTlQKPj4+IFNIQUxMCj4+PiArICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9S KFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTCj4+PiBPUgo+Pj4gKyAqIE9USEVS IExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RI RVJXSVNFLAo+Pj4gKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgo+Pj4gKyAqIE9USEVSIERFQUxJTkdTIElOIFRI RSBTT0ZUV0FSRS4KPj4+ICsgKgo+Pj4gKyAqLwo+Pj4gKyNpbmNsdWRlICJhbWRncHUuaCIKPj4+ ICsjaW5jbHVkZSAibW1odWJfdjFfMC5oIgo+Pj4gKwo+Pj4gKyNpbmNsdWRlICJ2ZWdhMTAvc29j MTVpcC5oIgo+Pj4gKyNpbmNsdWRlICJ2ZWdhMTAvTU1IVUIvbW1odWJfMV8wX29mZnNldC5oIgo+ Pj4gKyNpbmNsdWRlICJ2ZWdhMTAvTU1IVUIvbW1odWJfMV8wX3NoX21hc2suaCIKPj4+ICsjaW5j bHVkZSAidmVnYTEwL01NSFVCL21taHViXzFfMF9kZWZhdWx0LmgiCj4+PiArI2luY2x1ZGUgInZl Z2ExMC9BVEhVQi9hdGh1Yl8xXzBfb2Zmc2V0LmgiCj4+PiArI2luY2x1ZGUgInZlZ2ExMC9BVEhV Qi9hdGh1Yl8xXzBfc2hfbWFzay5oIgo+Pj4gKyNpbmNsdWRlICJ2ZWdhMTAvQVRIVUIvYXRodWJf MV8wX2RlZmF1bHQuaCIKPj4+ICsjaW5jbHVkZSAidmVnYTEwL3ZlZ2ExMF9lbnVtLmgiCj4+PiAr Cj4+PiArI2luY2x1ZGUgInNvYzE1X2NvbW1vbi5oIgo+Pj4gKwo+Pj4gK3U2NCBtbWh1Yl92MV8w X2dldF9mYl9sb2NhdGlvbihzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPj4+ICt7Cj4+PiAr ICAgICAgIHU2NCBiYXNlID0gUlJFRzMyKFNPQzE1X1JFR19PRkZTRVQoTU1IVUIsIDAsCj4+PiBt bU1DX1ZNX0ZCX0xPQ0FUSU9OX0JBU0UpKTsKPj4+ICsKPj4+ICsgICAgICAgYmFzZSAmPSBNQ19W TV9GQl9MT0NBVElPTl9CQVNFX19GQl9CQVNFX01BU0s7Cj4+PiArICAgICAgIGJhc2UgPDw9IDI0 Owo+Pj4gKwo+Pj4gKyAgICAgICByZXR1cm4gYmFzZTsKPj4+ICt9Cj4+PiArCj4+PiAraW50IG1t aHViX3YxXzBfZ2FydF9lbmFibGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+PiArewo+ Pj4gKyAgICAgICB1MzIgdG1wOwo+Pj4gKyAgICAgICB1NjQgdmFsdWU7Cj4+PiArICAgICAgIHVp bnQ2NF90IGFkZHI7Cj4+PiArICAgICAgIHUzMiBpOwo+Pj4gKwo+Pj4gKyAgICAgICAvKiBQcm9n cmFtIE1DLiAqLwo+Pj4gKyAgICAgICAvKiBVcGRhdGUgY29uZmlndXJhdGlvbiAqLwpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwphbWQtZ2Z4IG1haWxpbmcg bGlzdAphbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngK