From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matthias Kaehlcke Subject: Re: [PATCH v3 4/5] drm/rockchip: Add ROCKCHIP DW MIPI DSI controller driver Date: Tue, 28 Nov 2017 12:48:43 -0800 Message-ID: <20171128204843.GB58379@google.com> References: <1511868006-27130-1-git-send-email-nickey.yang@rock-chips.com> <1511868006-27130-5-git-send-email-nickey.yang@rock-chips.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1511868006-27130-5-git-send-email-nickey.yang@rock-chips.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Nickey Yang Cc: mark.rutland@arm.com, airlied@linux.ie, briannorris@chromium.org, hoegsberg@gmail.com, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, philippe.cornu@st.com, yannick.fertre@st.com, linux-rockchip@lists.infradead.org, robh+dt@kernel.org, zyw@rock-chips.com, xbl@rock-chips.com, hl@rock-chips.com List-Id: linux-rockchip.vger.kernel.org RWwgVHVlLCBOb3YgMjgsIDIwMTcgYXQgMDc6MjA6MDVQTSArMDgwMCBOaWNrZXkgWWFuZyBoYSBk aXQ6Cgo+IEFkZCB0aGUgUk9DS0NISVAgRFNJIGNvbnRyb2xsZXIgZHJpdmVyIHRoYXQgdXNlcyB0 aGUgU3lub3BzeXMgRGVzaWduV2FyZQo+IE1JUEkgRFNJIGhvc3QgY29udHJvbGxlciBicmlkZ2Uu Cj4gCj4gdjI6Cj4gICAgYWRkIGVycl9wbGxyZWYsIHJlbW92ZSB1bm5lY2Vzc2FyeSBlbmNvZGVy LmVuYWJsZSAmIGRpc2FibGUKPiAgICBjb3JyZWN0IHNwZWxsaW5nIG1pc3Rha2VzCj4gdjM6Cj4g ICAgY2FsbCBkd19taXBpX2RzaV91bmJpbmQoKSBpbiBkd19taXBpX2RzaV9yb2NrY2hpcF91bmJp bmQoKQo+ICAgIGZpeCB0eXBvLCB1c2Ugb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKCksCj4gICAg Y2hhbmdlIHNvbWUg4oCYYmluZCgp4oCZIGxvZ2ljIGludG8gJ3Byb2JlKCknCj4gICAgYWRkICdk ZXZfc2V0X2RydmRhdGEoKScKPiAKPiBTaWduZWQtb2ZmLWJ5OiBOaWNrZXkgWWFuZyA8bmlja2V5 LnlhbmdAcm9jay1jaGlwcy5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9L Y29uZmlnICAgICAgICAgICAgICAgIHwgICAgMiArLQo+ICBkcml2ZXJzL2dwdS9kcm0vcm9ja2No aXAvTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgIDIgKy0KPiAgZHJpdmVycy9ncHUvZHJtL3Jv Y2tjaGlwL2R3LW1pcGktZHNpLmMgICAgICAgICAgfCAxMzQ5IC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9kdy1taXBpLWRzaV9yb2NrY2hpcC5jIHwg IDc2NCArKysrKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9k cm1fZHJ2LmMgICAgIHwgICAgMiArLQo+ICBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2No aXBfZHJtX2Rydi5oICAgICB8ICAgIDIgKy0KPiAgNiBmaWxlcyBjaGFuZ2VkLCA3NjggaW5zZXJ0 aW9ucygrKSwgMTM1MyBkZWxldGlvbnMoLSkKPiAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9yb2NrY2hpcC9kdy1taXBpLWRzaS5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vcm9ja2NoaXAvZHctbWlwaS1kc2lfcm9ja2NoaXAuYwo+IAo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9y b2NrY2hpcC9LY29uZmlnCj4gaW5kZXggMGNjYzc2Mi4uOWViNDc5NSAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9y b2NrY2hpcC9LY29uZmlnCj4gQEAgLTcsNyArNyw3IEBAIGNvbmZpZyBEUk1fUk9DS0NISVAKPiAg CXNlbGVjdCBWSURFT01PREVfSEVMUEVSUwo+ICAJc2VsZWN0IERSTV9BTkFMT0dJWF9EUCBpZiBS T0NLQ0hJUF9BTkFMT0dJWF9EUAo+ICAJc2VsZWN0IERSTV9EV19IRE1JIGlmIFJPQ0tDSElQX0RX X0hETUkKPiAtCXNlbGVjdCBEUk1fTUlQSV9EU0kgaWYgUk9DS0NISVBfRFdfTUlQSV9EU0kKPiAr CXNlbGVjdCBEUk1fRFdfTUlQSV9EU0kgaWYgUk9DS0NISVBfRFdfTUlQSV9EU0kKPiAgCXNlbGVj dCBTTkRfU09DX0hETUlfQ09ERUMgaWYgUk9DS0NISVBfQ0ROX0RQICYmIFNORF9TT0MKPiAgCWhl bHAKPiAgCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEgUm9ja2NoaXAgc29jIGNo aXBzZXQuCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtlZmlsZSBi L2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtlZmlsZQo+IGluZGV4IGEzMTRlMjEuLmMwNWZl NDcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxlCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxlCj4gQEAgLTExLDcgKzExLDcgQEAg cm9ja2NoaXBkcm0tJChDT05GSUdfRFJNX0ZCREVWX0VNVUxBVElPTikgKz0gcm9ja2NoaXBfZHJt X2ZiZGV2Lm8KPiAgcm9ja2NoaXBkcm0tJChDT05GSUdfUk9DS0NISVBfQU5BTE9HSVhfRFApICs9 IGFuYWxvZ2l4X2RwLXJvY2tjaGlwLm8KPiAgcm9ja2NoaXBkcm0tJChDT05GSUdfUk9DS0NISVBf Q0ROX0RQKSArPSBjZG4tZHAtY29yZS5vIGNkbi1kcC1yZWcubwo+ICByb2NrY2hpcGRybS0kKENP TkZJR19ST0NLQ0hJUF9EV19IRE1JKSArPSBkd19oZG1pLXJvY2tjaGlwLm8KPiAtcm9ja2NoaXBk cm0tJChDT05GSUdfUk9DS0NISVBfRFdfTUlQSV9EU0kpICs9IGR3LW1pcGktZHNpLm8KPiArcm9j a2NoaXBkcm0tJChDT05GSUdfUk9DS0NISVBfRFdfTUlQSV9EU0kpICs9IGR3LW1pcGktZHNpX3Jv Y2tjaGlwLm8KPiAgcm9ja2NoaXBkcm0tJChDT05GSUdfUk9DS0NISVBfSU5OT19IRE1JKSArPSBp bm5vX2hkbWkubwo+ICByb2NrY2hpcGRybS0kKENPTkZJR19ST0NLQ0hJUF9MVkRTKSArPSByb2Nr Y2hpcF9sdmRzLm8KPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9k dy1taXBpLWRzaS5jIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2R3LW1pcGktZHNpLmMKPiBk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCBiMTU3NTViLi4wMDAwMDAwCj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2R3LW1pcGktZHNpLmMKPiArKysgL2Rldi9udWxsCj4g QEAgLTEsMTM0OSArMCwwIEBACj4gLS8qCj4gLSAqIENvcHlyaWdodCAoYykgMjAxNiwgRnV6aG91 IFJvY2tjaGlwIEVsZWN0cm9uaWNzIENvLiwgTHRkCj4gLSAqCj4gLSAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4g LSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5Cj4gLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCj4gLSAqIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCj4gLSAqLwo+IC0jaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4gLSNpbmNs dWRlIDxsaW51eC9jb21wb25lbnQuaD4KPiAtI2luY2x1ZGUgPGxpbnV4L2lvcG9sbC5oPgo+IC0j aW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiAt I2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgo+IC0jaW5jbHVkZSA8bGludXgvcG1fcnVudGlt ZS5oPgo+IC0jaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9yZXNl dC5oPgo+IC0jaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgo+IC0jaW5jbHVkZSA8ZHJtL2Ry bV9hdG9taWNfaGVscGVyLmg+Cj4gLSNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KPiAtI2luY2x1 ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KPiAtI2luY2x1ZGUgPGRybS9kcm1fbWlwaV9kc2ku aD4KPiAtI2luY2x1ZGUgPGRybS9kcm1fb2YuaD4KPiAtI2luY2x1ZGUgPGRybS9kcm1fcGFuZWwu aD4KPiAtI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gLSNpbmNsdWRlIDx2aWRlby9taXBpX2Rpc3Bs YXkuaD4KPiAtCj4gLSNpbmNsdWRlICJyb2NrY2hpcF9kcm1fZHJ2LmgiCj4gLSNpbmNsdWRlICJy b2NrY2hpcF9kcm1fdm9wLmgiCj4gLQo+IC0jZGVmaW5lIERSSVZFUl9OQU1FICAgICJkdy1taXBp LWRzaSIKPiAtCj4gLSNkZWZpbmUgUkszMjg4X0dSRl9TT0NfQ09ONgkJMHgwMjVjCj4gLSNkZWZp bmUgUkszMjg4X0RTSTBfU0VMX1ZPUF9MSVQJCUJJVCg2KQo+IC0jZGVmaW5lIFJLMzI4OF9EU0kx X1NFTF9WT1BfTElUCQlCSVQoOSkKPiAtCj4gLSNkZWZpbmUgUkszMzk5X0dSRl9TT0NfQ09OMjAJ CTB4NjI1MAo+IC0jZGVmaW5lIFJLMzM5OV9EU0kwX1NFTF9WT1BfTElUCQlCSVQoMCkKPiAtI2Rl ZmluZSBSSzMzOTlfRFNJMV9TRUxfVk9QX0xJVAkJQklUKDQpCj4gLQo+IC0vKiBkaXNhYmxlIHR1 cm5yZXF1ZXN0LCB0dXJuZGlzYWJsZSwgZm9yY2V0eHN0b3Btb2RlLCBmb3JjZXJ4bW9kZSAqLwo+ IC0jZGVmaW5lIFJLMzM5OV9HUkZfU09DX0NPTjIyCQkweDYyNTgKPiAtI2RlZmluZSBSSzMzOTlf R1JGX0RTSV9NT0RFCQkweGZmZmYwMDAwCj4gLQo+IC0jZGVmaW5lIERTSV9WRVJTSU9OCQkJMHgw MAo+IC0jZGVmaW5lIERTSV9QV1JfVVAJCQkweDA0Cj4gLSNkZWZpbmUgUkVTRVQJCQkJMAo+IC0j ZGVmaW5lIFBPV0VSVVAJCQkJQklUKDApCj4gLQo+IC0jZGVmaW5lIERTSV9DTEtNR1JfQ0ZHCQkJ MHgwOAo+IC0jZGVmaW5lIFRPX0NMS19ESVZJRFNJT04oZGl2KQkJKCgoZGl2KSAmIDB4ZmYpIDw8 IDgpCj4gLSNkZWZpbmUgVFhfRVNDX0NMS19ESVZJRFNJT04oZGl2KQkoKChkaXYpICYgMHhmZikg PDwgMCkKPiAtCj4gLSNkZWZpbmUgRFNJX0RQSV9WQ0lECQkJMHgwYwo+IC0jZGVmaW5lIERQSV9W SUQodmlkKQkJCSgoKHZpZCkgJiAweDMpIDw8IDApCj4gLQo+IC0jZGVmaW5lIERTSV9EUElfQ09M T1JfQ09ESU5HCQkweDEwCj4gLSNkZWZpbmUgRU4xOF9MT09TRUxZCQkJQklUKDgpCj4gLSNkZWZp bmUgRFBJX0NPTE9SX0NPRElOR18xNkJJVF8xCTB4MAo+IC0jZGVmaW5lIERQSV9DT0xPUl9DT0RJ TkdfMTZCSVRfMgkweDEKPiAtI2RlZmluZSBEUElfQ09MT1JfQ09ESU5HXzE2QklUXzMJMHgyCj4g LSNkZWZpbmUgRFBJX0NPTE9SX0NPRElOR18xOEJJVF8xCTB4Mwo+IC0jZGVmaW5lIERQSV9DT0xP Ul9DT0RJTkdfMThCSVRfMgkweDQKPiAtI2RlZmluZSBEUElfQ09MT1JfQ09ESU5HXzI0QklUCQkw eDUKPiAtCj4gLSNkZWZpbmUgRFNJX0RQSV9DRkdfUE9MCQkJMHgxNAo+IC0jZGVmaW5lIENPTE9S TV9BQ1RJVkVfTE9XCQlCSVQoNCkKPiAtI2RlZmluZSBTSFVURF9BQ1RJVkVfTE9XCQlCSVQoMykK PiAtI2RlZmluZSBIU1lOQ19BQ1RJVkVfTE9XCQlCSVQoMikKPiAtI2RlZmluZSBWU1lOQ19BQ1RJ VkVfTE9XCQlCSVQoMSkKPiAtI2RlZmluZSBEQVRBRU5fQUNUSVZFX0xPVwkJQklUKDApCj4gLQo+ IC0jZGVmaW5lIERTSV9EUElfTFBfQ01EX1RJTQkJMHgxOAo+IC0jZGVmaW5lIE9VVFZBQ1RfTFBD TURfVElNRShwKQkJKCgocCkgJiAweGZmKSA8PCAxNikKPiAtI2RlZmluZSBJTlZBQ1RfTFBDTURf VElNRShwKQkJKChwKSAmIDB4ZmYpCj4gLQo+IC0jZGVmaW5lIERTSV9EQklfQ0ZHCQkJMHgyMAo+ IC0jZGVmaW5lIERTSV9EQklfQ01EU0laRQkJCTB4MjgKPiAtCj4gLSNkZWZpbmUgRFNJX1BDS0hE TF9DRkcJCQkweDJjCj4gLSNkZWZpbmUgRU5fQ1JDX1JYCQkJQklUKDQpCj4gLSNkZWZpbmUgRU5f RUNDX1JYCQkJQklUKDMpCj4gLSNkZWZpbmUgRU5fQlRBCQkJCUJJVCgyKQo+IC0jZGVmaW5lIEVO X0VPVFBfUlgJCQlCSVQoMSkKPiAtI2RlZmluZSBFTl9FT1RQX1RYCQkJQklUKDApCj4gLQo+IC0j ZGVmaW5lIERTSV9NT0RFX0NGRwkJCTB4MzQKPiAtI2RlZmluZSBFTkFCTEVfVklERU9fTU9ERQkJ MAo+IC0jZGVmaW5lIEVOQUJMRV9DTURfTU9ERQkJCUJJVCgwKQo+IC0KPiAtI2RlZmluZSBEU0lf VklEX01PREVfQ0ZHCQkweDM4Cj4gLSNkZWZpbmUgRlJBTUVfQlRBX0FDSwkJCUJJVCgxNCkKPiAt I2RlZmluZSBFTkFCTEVfTE9XX1BPV0VSCQkoMHgzZiA8PCA4KQo+IC0jZGVmaW5lIEVOQUJMRV9M T1dfUE9XRVJfTUFTSwkJKDB4M2YgPDwgOCkKPiAtI2RlZmluZSBWSURfTU9ERV9UWVBFX05PTl9C VVJTVF9TWU5DX1BVTFNFUwkweDAKPiAtI2RlZmluZSBWSURfTU9ERV9UWVBFX05PTl9CVVJTVF9T WU5DX0VWRU5UUwkweDEKPiAtI2RlZmluZSBWSURfTU9ERV9UWVBFX0JVUlNUCQkJMHgyCj4gLSNk ZWZpbmUgVklEX01PREVfVFlQRV9NQVNLCQkJMHgzCj4gLQo+IC0jZGVmaW5lIERTSV9WSURfUEtU X1NJWkUJCTB4M2MKPiAtI2RlZmluZSBWSURfUEtUX1NJWkUocCkJCQkoKChwKSAmIDB4M2ZmZikg PDwgMCkKPiAtI2RlZmluZSBWSURfUEtUX01BWF9TSVpFCQkweDNmZmYKPiAtCj4gLSNkZWZpbmUg RFNJX1ZJRF9IU0FfVElNRQkJMHg0OAo+IC0jZGVmaW5lIERTSV9WSURfSEJQX1RJTUUJCTB4NGMK PiAtI2RlZmluZSBEU0lfVklEX0hMSU5FX1RJTUUJCTB4NTAKPiAtI2RlZmluZSBEU0lfVklEX1ZT QV9MSU5FUwkJMHg1NAo+IC0jZGVmaW5lIERTSV9WSURfVkJQX0xJTkVTCQkweDU4Cj4gLSNkZWZp bmUgRFNJX1ZJRF9WRlBfTElORVMJCTB4NWMKPiAtI2RlZmluZSBEU0lfVklEX1ZBQ1RJVkVfTElO RVMJCTB4NjAKPiAtI2RlZmluZSBEU0lfQ01EX01PREVfQ0ZHCQkweDY4Cj4gLSNkZWZpbmUgTUFY X1JEX1BLVF9TSVpFX0xQCQlCSVQoMjQpCj4gLSNkZWZpbmUgRENTX0xXX1RYX0xQCQkJQklUKDE5 KQo+IC0jZGVmaW5lIERDU19TUl8wUF9UWF9MUAkJCUJJVCgxOCkKPiAtI2RlZmluZSBEQ1NfU1df MVBfVFhfTFAJCQlCSVQoMTcpCj4gLSNkZWZpbmUgRENTX1NXXzBQX1RYX0xQCQkJQklUKDE2KQo+ IC0jZGVmaW5lIEdFTl9MV19UWF9MUAkJCUJJVCgxNCkKPiAtI2RlZmluZSBHRU5fU1JfMlBfVFhf TFAJCQlCSVQoMTMpCj4gLSNkZWZpbmUgR0VOX1NSXzFQX1RYX0xQCQkJQklUKDEyKQo+IC0jZGVm aW5lIEdFTl9TUl8wUF9UWF9MUAkJCUJJVCgxMSkKPiAtI2RlZmluZSBHRU5fU1dfMlBfVFhfTFAJ CQlCSVQoMTApCj4gLSNkZWZpbmUgR0VOX1NXXzFQX1RYX0xQCQkJQklUKDkpCj4gLSNkZWZpbmUg R0VOX1NXXzBQX1RYX0xQCQkJQklUKDgpCj4gLSNkZWZpbmUgRU5fQUNLX1JRU1QJCQlCSVQoMSkK PiAtI2RlZmluZSBFTl9URUFSX0ZYCQkJQklUKDApCj4gLQo+IC0jZGVmaW5lIENNRF9NT0RFX0FM TF9MUAkJCShNQVhfUkRfUEtUX1NJWkVfTFAgfCBcCj4gLQkJCQkJIERDU19MV19UWF9MUCB8IFwK PiAtCQkJCQkgRENTX1NSXzBQX1RYX0xQIHwgXAo+IC0JCQkJCSBEQ1NfU1dfMVBfVFhfTFAgfCBc Cj4gLQkJCQkJIERDU19TV18wUF9UWF9MUCB8IFwKPiAtCQkJCQkgR0VOX0xXX1RYX0xQIHwgXAo+ IC0JCQkJCSBHRU5fU1JfMlBfVFhfTFAgfCBcCj4gLQkJCQkJIEdFTl9TUl8xUF9UWF9MUCB8IFwK PiAtCQkJCQkgR0VOX1NSXzBQX1RYX0xQIHwgXAo+IC0JCQkJCSBHRU5fU1dfMlBfVFhfTFAgfCBc Cj4gLQkJCQkJIEdFTl9TV18xUF9UWF9MUCB8IFwKPiAtCQkJCQkgR0VOX1NXXzBQX1RYX0xQKQo+ IC0KPiAtI2RlZmluZSBEU0lfR0VOX0hEUgkJCTB4NmMKPiAtI2RlZmluZSBHRU5fSERBVEEoZGF0 YSkJCQkoKChkYXRhKSAmIDB4ZmZmZikgPDwgOCkKPiAtI2RlZmluZSBHRU5fSERBVEFfTUFTSwkJ CSgweGZmZmYgPDwgOCkKPiAtI2RlZmluZSBHRU5fSFRZUEUodHlwZSkJCQkoKCh0eXBlKSAmIDB4 ZmYpIDw8IDApCj4gLSNkZWZpbmUgR0VOX0hUWVBFX01BU0sJCQkweGZmCj4gLQo+IC0jZGVmaW5l IERTSV9HRU5fUExEX0RBVEEJCTB4NzAKPiAtCj4gLSNkZWZpbmUgRFNJX0NNRF9QS1RfU1RBVFVT CQkweDc0Cj4gLSNkZWZpbmUgR0VOX0NNRF9FTVBUWQkJCUJJVCgwKQo+IC0jZGVmaW5lIEdFTl9D TURfRlVMTAkJCUJJVCgxKQo+IC0jZGVmaW5lIEdFTl9QTERfV19FTVBUWQkJCUJJVCgyKQo+IC0j ZGVmaW5lIEdFTl9QTERfV19GVUxMCQkJQklUKDMpCj4gLSNkZWZpbmUgR0VOX1BMRF9SX0VNUFRZ CQkJQklUKDQpCj4gLSNkZWZpbmUgR0VOX1BMRF9SX0ZVTEwJCQlCSVQoNSkKPiAtI2RlZmluZSBH RU5fUkRfQ01EX0JVU1kJCQlCSVQoNikKPiAtCj4gLSNkZWZpbmUgRFNJX1RPX0NOVF9DRkcJCQkw eDc4Cj4gLSNkZWZpbmUgSFNUWF9UT19DTlQocCkJCQkoKChwKSAmIDB4ZmZmZikgPDwgMTYpCj4g LSNkZWZpbmUgTFBSWF9UT19DTlQocCkJCQkoKHApICYgMHhmZmZmKQo+IC0KPiAtI2RlZmluZSBE U0lfQlRBX1RPX0NOVAkJCTB4OGMKPiAtI2RlZmluZSBEU0lfTFBDTEtfQ1RSTAkJCTB4OTQKPiAt I2RlZmluZSBBVVRPX0NMS0xBTkVfQ1RSTAkJQklUKDEpCj4gLSNkZWZpbmUgUEhZX1RYUkVRVUVT VENMS0hTCQlCSVQoMCkKPiAtCj4gLSNkZWZpbmUgRFNJX1BIWV9UTVJfTFBDTEtfQ0ZHCQkweDk4 Cj4gLSNkZWZpbmUgUEhZX0NMS0hTMkxQX1RJTUUobGJjYykJCSgoKGxiY2MpICYgMHgzZmYpIDw8 IDE2KQo+IC0jZGVmaW5lIFBIWV9DTEtMUDJIU19USU1FKGxiY2MpCQkoKGxiY2MpICYgMHgzZmYp Cj4gLQo+IC0jZGVmaW5lIERTSV9QSFlfVE1SX0NGRwkJCTB4OWMKPiAtI2RlZmluZSBQSFlfSFMy TFBfVElNRShsYmNjKQkJKCgobGJjYykgJiAweGZmKSA8PCAyNCkKPiAtI2RlZmluZSBQSFlfTFAy SFNfVElNRShsYmNjKQkJKCgobGJjYykgJiAweGZmKSA8PCAxNikKPiAtI2RlZmluZSBNQVhfUkRf VElNRShsYmNjKQkJKChsYmNjKSAmIDB4N2ZmZikKPiAtCj4gLSNkZWZpbmUgRFNJX1BIWV9SU1Ra CQkJMHhhMAo+IC0jZGVmaW5lIFBIWV9ESVNGT1JDRVBMTAkJCTAKPiAtI2RlZmluZSBQSFlfRU5G T1JDRVBMTAkJCUJJVCgzKQo+IC0jZGVmaW5lIFBIWV9ESVNBQkxFQ0xLCQkJMAo+IC0jZGVmaW5l IFBIWV9FTkFCTEVDTEsJCQlCSVQoMikKPiAtI2RlZmluZSBQSFlfUlNUWgkJCTAKPiAtI2RlZmlu ZSBQSFlfVU5SU1RaCQkJQklUKDEpCj4gLSNkZWZpbmUgUEhZX1NIVVRET1dOWgkJCTAKPiAtI2Rl ZmluZSBQSFlfVU5TSFVURE9XTloJCQlCSVQoMCkKPiAtCj4gLSNkZWZpbmUgRFNJX1BIWV9JRl9D RkcJCQkweGE0Cj4gLSNkZWZpbmUgTl9MQU5FUyhuKQkJCSgoKChuKSAtIDEpICYgMHgzKSA8PCAw KQo+IC0jZGVmaW5lIFBIWV9TVE9QX1dBSVRfVElNRShjeWNsZSkJKCgoY3ljbGUpICYgMHhmZikg PDwgOCkKPiAtCj4gLSNkZWZpbmUgRFNJX1BIWV9TVEFUVVMJCQkweGIwCj4gLSNkZWZpbmUgTE9D SwkJCQlCSVQoMCkKPiAtI2RlZmluZSBTVE9QX1NUQVRFX0NMS19MQU5FCQlCSVQoMikKPiAtCj4g LSNkZWZpbmUgRFNJX1BIWV9UU1RfQ1RSTDAJCTB4YjQKPiAtI2RlZmluZSBQSFlfVEVTVENMSwkJ CUJJVCgxKQo+IC0jZGVmaW5lIFBIWV9VTlRFU1RDTEsJCQkwCj4gLSNkZWZpbmUgUEhZX1RFU1RD TFIJCQlCSVQoMCkKPiAtI2RlZmluZSBQSFlfVU5URVNUQ0xSCQkJMAo+IC0KPiAtI2RlZmluZSBE U0lfUEhZX1RTVF9DVFJMMQkJMHhiOAo+IC0jZGVmaW5lIFBIWV9URVNURU4JCQlCSVQoMTYpCj4g LSNkZWZpbmUgUEhZX1VOVEVTVEVOCQkJMAo+IC0jZGVmaW5lIFBIWV9URVNURE9VVChuKQkJCSgo KG4pICYgMHhmZikgPDwgOCkKPiAtI2RlZmluZSBQSFlfVEVTVERJTihuKQkJCSgoKG4pICYgMHhm ZikgPDwgMCkKPiAtCj4gLSNkZWZpbmUgRFNJX0lOVF9TVDAJCQkweGJjCj4gLSNkZWZpbmUgRFNJ X0lOVF9TVDEJCQkweGMwCj4gLSNkZWZpbmUgRFNJX0lOVF9NU0swCQkJMHhjNAo+IC0jZGVmaW5l IERTSV9JTlRfTVNLMQkJCTB4YzgKPiAtCj4gLSNkZWZpbmUgUEhZX1NUQVRVU19USU1FT1VUX1VT CQkxMDAwMAo+IC0jZGVmaW5lIENNRF9QS1RfU1RBVFVTX1RJTUVPVVRfVVMJMjAwMDAKPiAtCj4g LSNkZWZpbmUgQllQQVNTX1ZDT19SQU5HRQlCSVQoNykKPiAtI2RlZmluZSBWQ09fUkFOR0VfQ09O X1NFTCh2YWwpCSgoKHZhbCkgJiAweDcpIDw8IDMpCj4gLSNkZWZpbmUgVkNPX0lOX0NBUF9DT05f REVGQVVMVAkoMHgwIDw8IDEpCj4gLSNkZWZpbmUgVkNPX0lOX0NBUF9DT05fTE9XCSgweDEgPDwg MSkKPiAtI2RlZmluZSBWQ09fSU5fQ0FQX0NPTl9ISUdICSgweDIgPDwgMSkKPiAtI2RlZmluZSBS RUZfQklBU19DVVJfU0VMCUJJVCgwKQo+IC0KPiAtI2RlZmluZSBDUF9DVVJSRU5UXzNNQQkJQklU KDMpCj4gLSNkZWZpbmUgQ1BfUFJPR1JBTV9FTgkJQklUKDcpCj4gLSNkZWZpbmUgTFBGX1BST0dS QU1fRU4JCUJJVCg2KQo+IC0jZGVmaW5lIExQRl9SRVNJU1RPUlNfMjBfS09ITQkwCj4gLQo+IC0j ZGVmaW5lIEhTRlJFUVJBTkdFX1NFTCh2YWwpCSgoKHZhbCkgJiAweDNmKSA8PCAxKQo+IC0KPiAt I2RlZmluZSBJTlBVVF9ESVZJREVSKHZhbCkJKCgodmFsKSAtIDEpICYgMHg3ZikKPiAtI2RlZmlu ZSBMT1dfUFJPR1JBTV9FTgkJMAo+IC0jZGVmaW5lIEhJR0hfUFJPR1JBTV9FTgkJQklUKDcpCj4g LSNkZWZpbmUgTE9PUF9ESVZfTE9XX1NFTCh2YWwpCSgoKHZhbCkgLSAxKSAmIDB4MWYpCj4gLSNk ZWZpbmUgTE9PUF9ESVZfSElHSF9TRUwodmFsKQkoKCgodmFsKSAtIDEpID4+IDUpICYgMHgxZikK PiAtI2RlZmluZSBQTExfTE9PUF9ESVZfRU4JCUJJVCg1KQo+IC0jZGVmaW5lIFBMTF9JTlBVVF9E SVZfRU4JQklUKDQpCj4gLQo+IC0jZGVmaW5lIFBPV0VSX0NPTlRST0wJCUJJVCg2KQo+IC0jZGVm aW5lIElOVEVSTkFMX1JFR19DVVJSRU5UCUJJVCgzKQo+IC0jZGVmaW5lIEJJQVNfQkxPQ0tfT04J CUJJVCgyKQo+IC0jZGVmaW5lIEJBTkRHQVBfT04JCUJJVCgwKQo+IC0KPiAtI2RlZmluZSBURVJf UkVTSVNUT1JfSElHSAlCSVQoNykKPiAtI2RlZmluZQlURVJfUkVTSVNUT1JfTE9XCTAKPiAtI2Rl ZmluZSBMRVZFTF9TSElGVEVSU19PTglCSVQoNikKPiAtI2RlZmluZSBURVJfQ0FMX0RPTkUJCUJJ VCg1KQo+IC0jZGVmaW5lIFNFVFJEX01BWAkJKDB4NyA8PCAyKQo+IC0jZGVmaW5lIFBPV0VSX01B TkFHRQkJQklUKDEpCj4gLSNkZWZpbmUgVEVSX1JFU0lTVE9SU19PTglCSVQoMCkKPiAtCj4gLSNk ZWZpbmUgQklBU0VYVFJfU0VMKHZhbCkJKCh2YWwpICYgMHg3KQo+IC0jZGVmaW5lIEJBTkRHQVBf U0VMKHZhbCkJKCh2YWwpICYgMHg3KQo+IC0jZGVmaW5lIFRMUF9QUk9HUkFNX0VOCQlCSVQoNykK PiAtI2RlZmluZSBUSFNfUFJFX1BST0dSQU1fRU4JQklUKDcpCj4gLSNkZWZpbmUgVEhTX1pFUk9f UFJPR1JBTV9FTglCSVQoNikKPiAtCj4gLSNkZWZpbmUgRFdfTUlQSV9ORUVEU19QSFlfQ0ZHX0NM SwlCSVQoMCkKPiAtI2RlZmluZSBEV19NSVBJX05FRURTX0dSRl9DTEsJCUJJVCgxKQo+IC0KPiAt ZW51bSB7Cj4gLQlCQU5ER0FQXzk3XzA3LAo+IC0JQkFOREdBUF85OF8wNSwKPiAtCUJBTkRHQVBf OTlfMDIsCj4gLQlCQU5ER0FQXzEwMF8wMCwKPiAtCUJBTkRHQVBfOTNfMTcsCj4gLQlCQU5ER0FQ Xzk0XzE1LAo+IC0JQkFOREdBUF85NV8xMiwKPiAtCUJBTkRHQVBfOTZfMTAsCj4gLX07Cj4gLQo+ IC1lbnVtIHsKPiAtCUJJQVNFWFRSXzg3XzEsCj4gLQlCSUFTRVhUUl85MV81LAo+IC0JQklBU0VY VFJfOTVfOSwKPiAtCUJJQVNFWFRSXzEwMCwKPiAtCUJJQVNFWFRSXzEwNV85NCwKPiAtCUJJQVNF WFRSXzExMV84OCwKPiAtCUJJQVNFWFRSXzExOF84LAo+IC0JQklBU0VYVFJfMTI3XzcsCj4gLX07 Cj4gLQo+IC1zdHJ1Y3QgZHdfbWlwaV9kc2lfcGxhdF9kYXRhIHsKPiAtCXUzMiBkc2kwX2VuX2Jp dDsKPiAtCXUzMiBkc2kxX2VuX2JpdDsKPiAtCXUzMiBncmZfc3dpdGNoX3JlZzsKPiAtCXUzMiBn cmZfZHNpMF9tb2RlOwo+IC0JdTMyIGdyZl9kc2kwX21vZGVfcmVnOwo+IC0JdW5zaWduZWQgaW50 IGZsYWdzOwo+IC0JdW5zaWduZWQgaW50IG1heF9kYXRhX2xhbmVzOwo+IC19Owo+IC0KPiAtc3Ry dWN0IGR3X21pcGlfZHNpIHsKPiAtCXN0cnVjdCBkcm1fZW5jb2RlciBlbmNvZGVyOwo+IC0Jc3Ry dWN0IGRybV9jb25uZWN0b3IgY29ubmVjdG9yOwo+IC0Jc3RydWN0IG1pcGlfZHNpX2hvc3QgZHNp X2hvc3Q7Cj4gLQlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbDsKPiAtCXN0cnVjdCBkZXZpY2UgKmRl djsKPiAtCXN0cnVjdCByZWdtYXAgKmdyZl9yZWdtYXA7Cj4gLQl2b2lkIF9faW9tZW0gKmJhc2U7 Cj4gLQo+IC0Jc3RydWN0IGNsayAqZ3JmX2NsazsKPiAtCXN0cnVjdCBjbGsgKnBsbHJlZl9jbGs7 Cj4gLQlzdHJ1Y3QgY2xrICpwY2xrOwo+IC0Jc3RydWN0IGNsayAqcGh5X2NmZ19jbGs7Cj4gLQo+ IC0JaW50IGRwbXNfbW9kZTsKPiAtCXVuc2lnbmVkIGludCBsYW5lX21icHM7IC8qIHBlciBsYW5l ICovCj4gLQl1MzIgY2hhbm5lbDsKPiAtCXUzMiBsYW5lczsKPiAtCXUzMiBmb3JtYXQ7Cj4gLQl1 MTYgaW5wdXRfZGl2Owo+IC0JdTE2IGZlZWRiYWNrX2RpdjsKPiAtCXVuc2lnbmVkIGxvbmcgbW9k ZV9mbGFnczsKPiAtCj4gLQljb25zdCBzdHJ1Y3QgZHdfbWlwaV9kc2lfcGxhdF9kYXRhICpwZGF0 YTsKPiAtfTsKPiAtCj4gLWVudW0gZHdfbWlwaV9kc2lfbW9kZSB7Cj4gLQlEV19NSVBJX0RTSV9D TURfTU9ERSwKPiAtCURXX01JUElfRFNJX1ZJRF9NT0RFLAo+IC19Owo+IC0KPiAtc3RydWN0IGRw aHlfcGxsX3Rlc3RkaW5fbWFwIHsKPiAtCXVuc2lnbmVkIGludCBtYXhfbWJwczsKPiAtCXU4IHRl c3RkaW47Cj4gLX07Cj4gLQo+IC0vKiBUaGUgdGFibGUgaXMgYmFzZWQgb24gMjdNSHogRFBIWSBw bGwgcmVmZXJlbmNlIGNsb2NrLiAqLwo+IC1zdGF0aWMgY29uc3Qgc3RydWN0IGRwaHlfcGxsX3Rl c3RkaW5fbWFwIGRwdGRpbl9tYXBbXSA9IHsKPiAtCXsgIDkwLCAweDAwfSwgeyAxMDAsIDB4MTB9 LCB7IDExMCwgMHgyMH0sIHsgMTMwLCAweDAxfSwKPiAtCXsgMTQwLCAweDExfSwgeyAxNTAsIDB4 MjF9LCB7IDE3MCwgMHgwMn0sIHsgMTgwLCAweDEyfSwKPiAtCXsgMjAwLCAweDIyfSwgeyAyMjAs IDB4MDN9LCB7IDI0MCwgMHgxM30sIHsgMjUwLCAweDIzfSwKPiAtCXsgMjcwLCAweDA0fSwgeyAz MDAsIDB4MTR9LCB7IDMzMCwgMHgwNX0sIHsgMzYwLCAweDE1fSwKPiAtCXsgNDAwLCAweDI1fSwg eyA0NTAsIDB4MDZ9LCB7IDUwMCwgMHgxNn0sIHsgNTUwLCAweDA3fSwKPiAtCXsgNjAwLCAweDE3 fSwgeyA2NTAsIDB4MDh9LCB7IDcwMCwgMHgxOH0sIHsgNzUwLCAweDA5fSwKPiAtCXsgODAwLCAw eDE5fSwgeyA4NTAsIDB4Mjl9LCB7IDkwMCwgMHgzOX0sIHsgOTUwLCAweDBhfSwKPiAtCXsxMDAw LCAweDFhfSwgezEwNTAsIDB4MmF9LCB7MTEwMCwgMHgzYX0sIHsxMTUwLCAweDBifSwKPiAtCXsx MjAwLCAweDFifSwgezEyNTAsIDB4MmJ9LCB7MTMwMCwgMHgzYn0sIHsxMzUwLCAweDBjfSwKPiAt CXsxNDAwLCAweDFjfSwgezE0NTAsIDB4MmN9LCB7MTUwMCwgMHgzY30KPiAtfTsKPiAtCj4gLXN0 YXRpYyBpbnQgbWF4X21icHNfdG9fdGVzdGRpbih1bnNpZ25lZCBpbnQgbWF4X21icHMpCj4gLXsK PiAtCWludCBpOwo+IC0KPiAtCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRwdGRpbl9tYXAp OyBpKyspCj4gLQkJaWYgKGRwdGRpbl9tYXBbaV0ubWF4X21icHMgPiBtYXhfbWJwcykKPiAtCQkJ cmV0dXJuIGRwdGRpbl9tYXBbaV0udGVzdGRpbjsKPiAtCj4gLQlyZXR1cm4gLUVJTlZBTDsKPiAt fQo+IC0KPiAtLyoKPiAtICogVGhlIGNvbnRyb2xsZXIgc2hvdWxkIGdlbmVyYXRlIDIgZnJhbWVz IGJlZm9yZQo+IC0gKiBwcmVwYXJpbmcgdGhlIHBlcmlwaGVyYWwuCj4gLSAqLwo+IC1zdGF0aWMg dm9pZCBkd19taXBpX2RzaV93YWl0X2Zvcl90d29fZnJhbWVzKHN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICptb2RlKQo+IC17Cj4gLQlpbnQgcmVmcmVzaCwgdHdvX2ZyYW1lczsKPiAtCj4gLQlyZWZy ZXNoID0gZHJtX21vZGVfdnJlZnJlc2gobW9kZSk7Cj4gLQl0d29fZnJhbWVzID0gRElWX1JPVU5E X1VQKE1TRUNfUEVSX1NFQywgcmVmcmVzaCkgKiAyOwo+IC0JbXNsZWVwKHR3b19mcmFtZXMpOwo+ IC19Cj4gLQo+IC1zdGF0aWMgaW5saW5lIHN0cnVjdCBkd19taXBpX2RzaSAqaG9zdF90b19kc2ko c3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QpCj4gLXsKPiAtCXJldHVybiBjb250YWluZXJfb2Yo aG9zdCwgc3RydWN0IGR3X21pcGlfZHNpLCBkc2lfaG9zdCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBp bmxpbmUgc3RydWN0IGR3X21pcGlfZHNpICpjb25fdG9fZHNpKHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb24pCj4gLXsKPiAtCXJldHVybiBjb250YWluZXJfb2YoY29uLCBzdHJ1Y3QgZHdfbWlwaV9k c2ksIGNvbm5lY3Rvcik7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbmxpbmUgc3RydWN0IGR3X21pcGlf ZHNpICplbmNvZGVyX3RvX2RzaShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCj4gLXsKPiAt CXJldHVybiBjb250YWluZXJfb2YoZW5jb2Rlciwgc3RydWN0IGR3X21pcGlfZHNpLCBlbmNvZGVy KTsKPiAtfQo+IC0KPiAtc3RhdGljIGlubGluZSB2b2lkIGRzaV93cml0ZShzdHJ1Y3QgZHdfbWlw aV9kc2kgKmRzaSwgdTMyIHJlZywgdTMyIHZhbCkKPiAtewo+IC0Jd3JpdGVsKHZhbCwgZHNpLT5i YXNlICsgcmVnKTsKPiAtfQo+IC0KPiAtc3RhdGljIGlubGluZSB1MzIgZHNpX3JlYWQoc3RydWN0 IGR3X21pcGlfZHNpICpkc2ksIHUzMiByZWcpCj4gLXsKPiAtCXJldHVybiByZWFkbChkc2ktPmJh c2UgKyByZWcpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBkd19taXBpX2RzaV9waHlfd3JpdGUo c3RydWN0IGR3X21pcGlfZHNpICpkc2ksIHU4IHRlc3RfY29kZSwKPiAtCQkJCSAgdTggdGVzdF9k YXRhKQo+IC17Cj4gLQkvKgo+IC0JICogV2l0aCB0aGUgZmFsbGluZyBlZGdlIG9uIFRFU1RDTEss IHRoZSBURVNURElOWzc6MF0gc2lnbmFsIGNvbnRlbnQKPiAtCSAqIGlzIGxhdGNoZWQgaW50ZXJu YWxseSBhcyB0aGUgY3VycmVudCB0ZXN0IGNvZGUuIFRlc3QgZGF0YSBpcwo+IC0JICogcHJvZ3Jh bW1lZCBpbnRlcm5hbGx5IGJ5IHJpc2luZyBlZGdlIG9uIFRFU1RDTEsuCj4gLQkgKi8KPiAtCWRz aV93cml0ZShkc2ksIERTSV9QSFlfVFNUX0NUUkwwLCBQSFlfVEVTVENMSyB8IFBIWV9VTlRFU1RD TFIpOwo+IC0KPiAtCWRzaV93cml0ZShkc2ksIERTSV9QSFlfVFNUX0NUUkwxLCBQSFlfVEVTVEVO IHwgUEhZX1RFU1RET1VUKDApIHwKPiAtCQkJCQkgIFBIWV9URVNURElOKHRlc3RfY29kZSkpOwo+ IC0KPiAtCWRzaV93cml0ZShkc2ksIERTSV9QSFlfVFNUX0NUUkwwLCBQSFlfVU5URVNUQ0xLIHwg UEhZX1VOVEVTVENMUik7Cj4gLQo+IC0JZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UU1RfQ1RSTDEs IFBIWV9VTlRFU1RFTiB8IFBIWV9URVNURE9VVCgwKSB8Cj4gLQkJCQkJICBQSFlfVEVTVERJTih0 ZXN0X2RhdGEpKTsKPiAtCj4gLQlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1RTVF9DVFJMMCwgUEhZ X1RFU1RDTEsgfCBQSFlfVU5URVNUQ0xSKTsKPiAtfQo+IC0KPiAtLyoqCj4gLSAqIG5zMmJjIC0g TmFub3NlY29uZHMgdG8gYnl0ZSBjbG9jayBjeWNsZXMKPiAtICovCj4gLXN0YXRpYyBpbmxpbmUg dW5zaWduZWQgaW50IG5zMmJjKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLCBpbnQgbnMpCj4gLXsK PiAtCXJldHVybiBESVZfUk9VTkRfVVAobnMgKiBkc2ktPmxhbmVfbWJwcyAvIDgsIDEwMDApOwo+ IC19Cj4gLQo+IC0vKioKPiAtICogbnMydWkgLSBOYW5vc2Vjb25kcyB0byBVSSB0aW1lIHBlcmlv ZHMKPiAtICovCj4gLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG5zMnVpKHN0cnVjdCBkd19t aXBpX2RzaSAqZHNpLCBpbnQgbnMpCj4gLXsKPiAtCXJldHVybiBESVZfUk9VTkRfVVAobnMgKiBk c2ktPmxhbmVfbWJwcywgMTAwMCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgZHdfbWlwaV9kc2lf cGh5X2luaXQoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCj4gLXsKPiAtCWludCByZXQsIHRlc3Rk aW4sIHZjbywgdmFsOwo+IC0KPiAtCXZjbyA9IChkc2ktPmxhbmVfbWJwcyA8IDIwMCkgPyAwIDog KGRzaS0+bGFuZV9tYnBzICsgMTAwKSAvIDIwMDsKPiAtCj4gLQl0ZXN0ZGluID0gbWF4X21icHNf dG9fdGVzdGRpbihkc2ktPmxhbmVfbWJwcyk7Cj4gLQlpZiAodGVzdGRpbiA8IDApIHsKPiAtCQlE Uk1fREVWX0VSUk9SKGRzaS0+ZGV2LAo+IC0JCQkgICAgICAiZmFpbGVkIHRvIGdldCB0ZXN0ZGlu IGZvciAlZG1icHMgbGFuZSBjbG9ja1xuIiwKPiAtCQkJICAgICAgZHNpLT5sYW5lX21icHMpOwo+ IC0JCXJldHVybiB0ZXN0ZGluOwo+IC0JfQo+IC0KPiAtCS8qIFN0YXJ0IGJ5IGNsZWFyaW5nIFBI WSBzdGF0ZSAqLwo+IC0JZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UU1RfQ1RSTDAsIFBIWV9VTlRF U1RDTFIpOwo+IC0JZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UU1RfQ1RSTDAsIFBIWV9URVNUQ0xS KTsKPiAtCWRzaV93cml0ZShkc2ksIERTSV9QSFlfVFNUX0NUUkwwLCBQSFlfVU5URVNUQ0xSKTsK PiAtCj4gLQlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5waHlfY2ZnX2Nsayk7Cj4gLQlp ZiAocmV0KSB7Cj4gLQkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBlbmFibGUg cGh5X2NmZ19jbGtcbiIpOwo+IC0JCXJldHVybiByZXQ7Cj4gLQl9Cj4gLQo+IC0JZHdfbWlwaV9k c2lfcGh5X3dyaXRlKGRzaSwgMHgxMCwgQllQQVNTX1ZDT19SQU5HRSB8Cj4gLQkJCQkJIFZDT19S QU5HRV9DT05fU0VMKHZjbykgfAo+IC0JCQkJCSBWQ09fSU5fQ0FQX0NPTl9MT1cgfAo+IC0JCQkJ CSBSRUZfQklBU19DVVJfU0VMKTsKPiAtCj4gLQlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAw eDExLCBDUF9DVVJSRU5UXzNNQSk7Cj4gLQlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDEy LCBDUF9QUk9HUkFNX0VOIHwgTFBGX1BST0dSQU1fRU4gfAo+IC0JCQkJCSBMUEZfUkVTSVNUT1JT XzIwX0tPSE0pOwo+IC0KPiAtCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4NDQsIEhTRlJF UVJBTkdFX1NFTCh0ZXN0ZGluKSk7Cj4gLQo+IC0JZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwg MHgxNywgSU5QVVRfRElWSURFUihkc2ktPmlucHV0X2RpdikpOwo+IC0JZHdfbWlwaV9kc2lfcGh5 X3dyaXRlKGRzaSwgMHgxOCwgTE9PUF9ESVZfTE9XX1NFTChkc2ktPmZlZWRiYWNrX2RpdikgfAo+ IC0JCQkJCSBMT1dfUFJPR1JBTV9FTik7Cj4gLQlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAw eDE4LCBMT09QX0RJVl9ISUdIX1NFTChkc2ktPmZlZWRiYWNrX2RpdikgfAo+IC0JCQkJCSBISUdI X1BST0dSQU1fRU4pOwo+IC0JZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHgxOSwgUExMX0xP T1BfRElWX0VOIHwgUExMX0lOUFVUX0RJVl9FTik7Cj4gLQo+IC0JZHdfbWlwaV9kc2lfcGh5X3dy aXRlKGRzaSwgMHgyMiwgTE9XX1BST0dSQU1fRU4gfAo+IC0JCQkJCSBCSUFTRVhUUl9TRUwoQklB U0VYVFJfMTI3XzcpKTsKPiAtCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4MjIsIEhJR0hf UFJPR1JBTV9FTiB8Cj4gLQkJCQkJIEJBTkRHQVBfU0VMKEJBTkRHQVBfOTZfMTApKTsKPiAtCj4g LQlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDIwLCBQT1dFUl9DT05UUk9MIHwgSU5URVJO QUxfUkVHX0NVUlJFTlQgfAo+IC0JCQkJCSBCSUFTX0JMT0NLX09OIHwgQkFOREdBUF9PTik7Cj4g LQo+IC0JZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHgyMSwgVEVSX1JFU0lTVE9SX0xPVyB8 IFRFUl9DQUxfRE9ORSB8Cj4gLQkJCQkJIFNFVFJEX01BWCB8IFRFUl9SRVNJU1RPUlNfT04pOwo+ IC0JZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHgyMSwgVEVSX1JFU0lTVE9SX0hJR0ggfCBM RVZFTF9TSElGVEVSU19PTiB8Cj4gLQkJCQkJIFNFVFJEX01BWCB8IFBPV0VSX01BTkFHRSB8Cj4g LQkJCQkJIFRFUl9SRVNJU1RPUlNfT04pOwo+IC0KPiAtCWR3X21pcGlfZHNpX3BoeV93cml0ZShk c2ksIDB4NjAsIFRMUF9QUk9HUkFNX0VOIHwgbnMyYmMoZHNpLCA1MDApKTsKPiAtCWR3X21pcGlf ZHNpX3BoeV93cml0ZShkc2ksIDB4NjEsIFRIU19QUkVfUFJPR1JBTV9FTiB8IG5zMnVpKGRzaSwg NDApKTsKPiAtCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4NjIsIFRIU19aRVJPX1BST0dS QU1fRU4gfCBuczJiYyhkc2ksIDMwMCkpOwo+IC0JZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwg MHg2MywgVEhTX1BSRV9QUk9HUkFNX0VOIHwgbnMydWkoZHNpLCAxMDApKTsKPiAtCWR3X21pcGlf ZHNpX3BoeV93cml0ZShkc2ksIDB4NjQsIEJJVCg1KSB8IG5zMmJjKGRzaSwgMTAwKSk7Cj4gLQlk d19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDY1LCBCSVQoNSkgfCAobnMyYmMoZHNpLCA2MCkg KyA3KSk7Cj4gLQo+IC0JZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHg3MCwgVExQX1BST0dS QU1fRU4gfCBuczJiYyhkc2ksIDUwMCkpOwo+IC0JZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwg MHg3MSwKPiAtCQkJICAgICAgVEhTX1BSRV9QUk9HUkFNX0VOIHwgKG5zMnVpKGRzaSwgNTApICsg NSkpOwo+IC0JZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHg3MiwKPiAtCQkJICAgICAgVEhT X1pFUk9fUFJPR1JBTV9FTiB8IChuczJiYyhkc2ksIDE0MCkgKyAyKSk7Cj4gLQlkd19taXBpX2Rz aV9waHlfd3JpdGUoZHNpLCAweDczLAo+IC0JCQkgICAgICBUSFNfUFJFX1BST0dSQU1fRU4gfCAo bnMydWkoZHNpLCA2MCkgKyA4KSk7Cj4gLQlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDc0 LCBCSVQoNSkgfCBuczJiYyhkc2ksIDEwMCkpOwo+IC0KPiAtCWRzaV93cml0ZShkc2ksIERTSV9Q SFlfUlNUWiwgUEhZX0VORk9SQ0VQTEwgfCBQSFlfRU5BQkxFQ0xLIHwKPiAtCQkJCSAgICAgUEhZ X1VOUlNUWiB8IFBIWV9VTlNIVVRET1dOWik7Cj4gLQo+IC0JcmV0ID0gcmVhZGxfcG9sbF90aW1l b3V0KGRzaS0+YmFzZSArIERTSV9QSFlfU1RBVFVTLAo+IC0JCQkJIHZhbCwgdmFsICYgTE9DSywg MTAwMCwgUEhZX1NUQVRVU19USU1FT1VUX1VTKTsKPiAtCWlmIChyZXQgPCAwKSB7Cj4gLQkJRFJN X0RFVl9FUlJPUihkc2ktPmRldiwgImZhaWxlZCB0byB3YWl0IGZvciBwaHkgbG9jayBzdGF0ZVxu Iik7Cj4gLQkJZ290byBwaHlfaW5pdF9lbmQ7Cj4gLQl9Cj4gLQo+IC0JcmV0ID0gcmVhZGxfcG9s bF90aW1lb3V0KGRzaS0+YmFzZSArIERTSV9QSFlfU1RBVFVTLAo+IC0JCQkJIHZhbCwgdmFsICYg U1RPUF9TVEFURV9DTEtfTEFORSwgMTAwMCwKPiAtCQkJCSBQSFlfU1RBVFVTX1RJTUVPVVRfVVMp Owo+IC0JaWYgKHJldCA8IDApCj4gLQkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwKPiAtCQkJICAg ICAgImZhaWxlZCB0byB3YWl0IGZvciBwaHkgY2xrIGxhbmUgc3RvcCBzdGF0ZVxuIik7Cj4gLQo+ IC1waHlfaW5pdF9lbmQ6Cj4gLQljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5waHlfY2ZnX2Ns ayk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBkd19taXBpX2Rz aV9nZXRfbGFuZV9icHMoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksCj4gLQkJCQkgICAgc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCj4gLXsKPiAtCXVuc2lnbmVkIGludCBpLCBwcmU7Cj4g LQl1bnNpZ25lZCBsb25nIG1wY2xrLCBwbGxyZWYsIHRtcDsKPiAtCXVuc2lnbmVkIGludCBtID0g MSwgbiA9IDEsIHRhcmdldF9tYnBzID0gMTAwMDsKPiAtCXVuc2lnbmVkIGludCBtYXhfbWJwcyA9 IGRwdGRpbl9tYXBbQVJSQVlfU0laRShkcHRkaW5fbWFwKSAtIDFdLm1heF9tYnBzOwo+IC0JaW50 IGJwcDsKPiAtCj4gLQlicHAgPSBtaXBpX2RzaV9waXhlbF9mb3JtYXRfdG9fYnBwKGRzaS0+Zm9y bWF0KTsKPiAtCWlmIChicHAgPCAwKSB7Cj4gLQkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwKPiAt CQkJICAgICAgImZhaWxlZCB0byBnZXQgYnBwIGZvciBwaXhlbCBmb3JtYXQgJWRcbiIsCj4gLQkJ CSAgICAgIGRzaS0+Zm9ybWF0KTsKPiAtCQlyZXR1cm4gYnBwOwo+IC0JfQo+IC0KPiAtCW1wY2xr ID0gRElWX1JPVU5EX1VQKG1vZGUtPmNsb2NrLCBNU0VDX1BFUl9TRUMpOwo+IC0JaWYgKG1wY2xr KSB7Cj4gLQkJLyogdGFrZSAxIC8gMC44LCBzaW5jZSBtYnBzIG11c3QgYmlnIHRoYW4gYmFuZHdp ZHRoIG9mIFJHQiAqLwo+IC0JCXRtcCA9IG1wY2xrICogKGJwcCAvIGRzaS0+bGFuZXMpICogMTAg LyA4Owo+IC0JCWlmICh0bXAgPCBtYXhfbWJwcykKPiAtCQkJdGFyZ2V0X21icHMgPSB0bXA7Cj4g LQkJZWxzZQo+IC0JCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LAo+IC0JCQkJICAgICAgIkRQSFkg Y2xvY2sgZnJlcXVlbmN5IGlzIG91dCBvZiByYW5nZVxuIik7Cj4gLQl9Cj4gLQo+IC0JcGxscmVm ID0gRElWX1JPVU5EX1VQKGNsa19nZXRfcmF0ZShkc2ktPnBsbHJlZl9jbGspLCBVU0VDX1BFUl9T RUMpOwo+IC0JdG1wID0gcGxscmVmOwo+IC0KPiAtCS8qCj4gLQkgKiBUaGUgbGltaXRzIG9uIHRo ZSBQTEwgZGl2aXNvciBhcmU6Cj4gLQkgKgo+IC0JICoJNU1IeiA8PSAocGxscmVmIC8gbikgPD0g NDBNSHoKPiAtCSAqCj4gLQkgKiB3ZSB3YWxrIG92ZXIgdGhlc2UgdmFsdWVzIGluIGRlc2NyZWFz aW5nIG9yZGVyIHNvIHRoYXQgaWYgd2UgaGl0Cj4gLQkgKiBhbiBleGFjdCBtYXRjaCBmb3IgdGFy Z2V0X21icHMgaXQgaXMgbW9yZSBsaWtlbHkgdGhhdCAibSIgd2lsbCBiZQo+IC0JICogZXZlbi4K PiAtCSAqCj4gLQkgKiBUT0RPOiBlbnN1cmUgdGhhdCAibSIgaXMgZXZlbiBhZnRlciB0aGlzIGxv b3AuCj4gLQkgKi8KPiAtCWZvciAoaSA9IHBsbHJlZiAvIDU7IGkgPiAocGxscmVmIC8gNDApOyBp LS0pIHsKPiAtCQlwcmUgPSBwbGxyZWYgLyBpOwo+IC0JCWlmICgodG1wID4gKHRhcmdldF9tYnBz ICUgcHJlKSkgJiYgKHRhcmdldF9tYnBzIC8gcHJlIDwgNTEyKSkgewo+IC0JCQl0bXAgPSB0YXJn ZXRfbWJwcyAlIHByZTsKPiAtCQkJbiA9IGk7Cj4gLQkJCW0gPSB0YXJnZXRfbWJwcyAvIHByZTsK PiAtCQl9Cj4gLQkJaWYgKHRtcCA9PSAwKQo+IC0JCQlicmVhazsKPiAtCX0KPiAtCj4gLQlkc2kt PmxhbmVfbWJwcyA9IHBsbHJlZiAvIG4gKiBtOwo+IC0JZHNpLT5pbnB1dF9kaXYgPSBuOwo+IC0J ZHNpLT5mZWVkYmFja19kaXYgPSBtOwo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0 aWMgaW50IGR3X21pcGlfZHNpX2hvc3RfYXR0YWNoKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0 LAo+IC0JCQkJICAgc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZGV2aWNlKQo+IC17Cj4gLQlzdHJ1 Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGhvc3RfdG9fZHNpKGhvc3QpOwo+IC0KPiAtCWlmIChkZXZp Y2UtPmxhbmVzID4gZHNpLT5wZGF0YS0+bWF4X2RhdGFfbGFuZXMpIHsKPiAtCQlEUk1fREVWX0VS Uk9SKGRzaS0+ZGV2LAo+IC0JCQkgICAgICAidGhlIG51bWJlciBvZiBkYXRhIGxhbmVzKCV1KSBp cyB0b28gbWFueVxuIiwKPiAtCQkJICAgICAgZGV2aWNlLT5sYW5lcyk7Cj4gLQkJcmV0dXJuIC1F SU5WQUw7Cj4gLQl9Cj4gLQo+IC0JZHNpLT5sYW5lcyA9IGRldmljZS0+bGFuZXM7Cj4gLQlkc2kt PmNoYW5uZWwgPSBkZXZpY2UtPmNoYW5uZWw7Cj4gLQlkc2ktPmZvcm1hdCA9IGRldmljZS0+Zm9y bWF0Owo+IC0JZHNpLT5tb2RlX2ZsYWdzID0gZGV2aWNlLT5tb2RlX2ZsYWdzOwo+IC0JZHNpLT5w YW5lbCA9IG9mX2RybV9maW5kX3BhbmVsKGRldmljZS0+ZGV2Lm9mX25vZGUpOwo+IC0JaWYgKGRz aS0+cGFuZWwpCj4gLQkJcmV0dXJuIGRybV9wYW5lbF9hdHRhY2goZHNpLT5wYW5lbCwgJmRzaS0+ Y29ubmVjdG9yKTsKPiAtCj4gLQlyZXR1cm4gLUVJTlZBTDsKPiAtfQo+IC0KPiAtc3RhdGljIGlu dCBkd19taXBpX2RzaV9ob3N0X2RldGFjaChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKPiAt CQkJCSAgIHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldmljZSkKPiAtewo+IC0Jc3RydWN0IGR3 X21pcGlfZHNpICpkc2kgPSBob3N0X3RvX2RzaShob3N0KTsKPiAtCj4gLQlkcm1fcGFuZWxfZGV0 YWNoKGRzaS0+cGFuZWwpOwo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9p ZCBkd19taXBpX21lc3NhZ2VfY29uZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLAo+IC0JCQkJ ICAgY29uc3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqbXNnKQo+IC17Cj4gLQlib29sIGxwbSA9IG1z Zy0+ZmxhZ3MgJiBNSVBJX0RTSV9NU0dfVVNFX0xQTTsKPiAtCXUzMiB2YWwgPSAwOwo+IC0KPiAt CWlmIChtc2ctPmZsYWdzICYgTUlQSV9EU0lfTVNHX1JFUV9BQ0spCj4gLQkJdmFsIHw9IEVOX0FD S19SUVNUOwo+IC0JaWYgKGxwbSkKPiAtCQl2YWwgfD0gQ01EX01PREVfQUxMX0xQOwo+IC0KPiAt CWRzaV93cml0ZShkc2ksIERTSV9MUENMS19DVFJMLCBscG0gPyAwIDogUEhZX1RYUkVRVUVTVENM S0hTKTsKPiAtCWRzaV93cml0ZShkc2ksIERTSV9DTURfTU9ERV9DRkcsIHZhbCk7Cj4gLX0KPiAt Cj4gLXN0YXRpYyBpbnQgZHdfbWlwaV9kc2lfZ2VuX3BrdF9oZHJfd3JpdGUoc3RydWN0IGR3X21p cGlfZHNpICpkc2ksIHUzMiBoZHJfdmFsKQo+IC17Cj4gLQlpbnQgcmV0Owo+IC0JdTMyIHZhbCwg bWFzazsKPiAtCj4gLQlyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQoZHNpLT5iYXNlICsgRFNJX0NN RF9QS1RfU1RBVFVTLAo+IC0JCQkJIHZhbCwgISh2YWwgJiBHRU5fQ01EX0ZVTEwpLCAxMDAwLAo+ IC0JCQkJIENNRF9QS1RfU1RBVFVTX1RJTUVPVVRfVVMpOwo+IC0JaWYgKHJldCA8IDApIHsKPiAt CQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LAo+IC0JCQkgICAgICAiZmFpbGVkIHRvIGdldCBhdmFp bGFibGUgY29tbWFuZCBGSUZPXG4iKTsKPiAtCQlyZXR1cm4gcmV0Owo+IC0JfQo+IC0KPiAtCWRz aV93cml0ZShkc2ksIERTSV9HRU5fSERSLCBoZHJfdmFsKTsKPiAtCj4gLQltYXNrID0gR0VOX0NN RF9FTVBUWSB8IEdFTl9QTERfV19FTVBUWTsKPiAtCXJldCA9IHJlYWRsX3BvbGxfdGltZW91dChk c2ktPmJhc2UgKyBEU0lfQ01EX1BLVF9TVEFUVVMsCj4gLQkJCQkgdmFsLCAodmFsICYgbWFzaykg PT0gbWFzaywKPiAtCQkJCSAxMDAwLCBDTURfUEtUX1NUQVRVU19USU1FT1VUX1VTKTsKPiAtCWlm IChyZXQgPCAwKSB7Cj4gLQkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgImZhaWxlZCB0byB3cml0 ZSBjb21tYW5kIEZJRk9cbiIpOwo+IC0JCXJldHVybiByZXQ7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJu IDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgZHdfbWlwaV9kc2lfZGNzX3Nob3J0X3dyaXRlKHN0 cnVjdCBkd19taXBpX2RzaSAqZHNpLAo+IC0JCQkJICAgICAgIGNvbnN0IHN0cnVjdCBtaXBpX2Rz aV9tc2cgKm1zZykKPiAtewo+IC0JY29uc3QgdTggKnR4X2J1ZiA9IG1zZy0+dHhfYnVmOwo+IC0J dTE2IGRhdGEgPSAwOwo+IC0JdTMyIHZhbDsKPiAtCj4gLQlpZiAobXNnLT50eF9sZW4gPiAwKQo+ IC0JCWRhdGEgfD0gdHhfYnVmWzBdOwo+IC0JaWYgKG1zZy0+dHhfbGVuID4gMSkKPiAtCQlkYXRh IHw9IHR4X2J1ZlsxXSA8PCA4Owo+IC0KPiAtCWlmIChtc2ctPnR4X2xlbiA+IDIpIHsKPiAtCQlE Uk1fREVWX0VSUk9SKGRzaS0+ZGV2LAo+IC0JCQkgICAgICAidG9vIGxvbmcgdHggYnVmIGxlbmd0 aCAlenUgZm9yIHNob3J0IHdyaXRlXG4iLAo+IC0JCQkgICAgICBtc2ctPnR4X2xlbik7Cj4gLQkJ cmV0dXJuIC1FSU5WQUw7Cj4gLQl9Cj4gLQo+IC0JdmFsID0gR0VOX0hEQVRBKGRhdGEpIHwgR0VO X0hUWVBFKG1zZy0+dHlwZSk7Cj4gLQlyZXR1cm4gZHdfbWlwaV9kc2lfZ2VuX3BrdF9oZHJfd3Jp dGUoZHNpLCB2YWwpOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IGR3X21pcGlfZHNpX2Rjc19sb25n X3dyaXRlKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLAo+IC0JCQkJICAgICAgY29uc3Qgc3RydWN0 IG1pcGlfZHNpX21zZyAqbXNnKQo+IC17Cj4gLQljb25zdCB1OCAqdHhfYnVmID0gbXNnLT50eF9i dWY7Cj4gLQlpbnQgbGVuID0gbXNnLT50eF9sZW4sIHBsZF9kYXRhX2J5dGVzID0gc2l6ZW9mKHUz MiksIHJldDsKPiAtCXUzMiBoZHJfdmFsID0gR0VOX0hEQVRBKG1zZy0+dHhfbGVuKSB8IEdFTl9I VFlQRShtc2ctPnR5cGUpOwo+IC0JdTMyIHJlbWFpbmRlcjsKPiAtCXUzMiB2YWw7Cj4gLQo+IC0J aWYgKG1zZy0+dHhfbGVuIDwgMykgewo+IC0JCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsCj4gLQkJ CSAgICAgICJ3cm9uZyB0eCBidWYgbGVuZ3RoICV6dSBmb3IgbG9uZyB3cml0ZVxuIiwKPiAtCQkJ ICAgICAgbXNnLT50eF9sZW4pOwo+IC0JCXJldHVybiAtRUlOVkFMOwo+IC0JfQo+IC0KPiAtCXdo aWxlIChESVZfUk9VTkRfVVAobGVuLCBwbGRfZGF0YV9ieXRlcykpIHsKPiAtCQlpZiAobGVuIDwg cGxkX2RhdGFfYnl0ZXMpIHsKPiAtCQkJcmVtYWluZGVyID0gMDsKPiAtCQkJbWVtY3B5KCZyZW1h aW5kZXIsIHR4X2J1ZiwgbGVuKTsKPiAtCQkJZHNpX3dyaXRlKGRzaSwgRFNJX0dFTl9QTERfREFU QSwgcmVtYWluZGVyKTsKPiAtCQkJbGVuID0gMDsKPiAtCQl9IGVsc2Ugewo+IC0JCQltZW1jcHko JnJlbWFpbmRlciwgdHhfYnVmLCBwbGRfZGF0YV9ieXRlcyk7Cj4gLQkJCWRzaV93cml0ZShkc2ks IERTSV9HRU5fUExEX0RBVEEsIHJlbWFpbmRlcik7Cj4gLQkJCXR4X2J1ZiArPSBwbGRfZGF0YV9i eXRlczsKPiAtCQkJbGVuIC09IHBsZF9kYXRhX2J5dGVzOwo+IC0JCX0KPiAtCj4gLQkJcmV0ID0g cmVhZGxfcG9sbF90aW1lb3V0KGRzaS0+YmFzZSArIERTSV9DTURfUEtUX1NUQVRVUywKPiAtCQkJ CQkgdmFsLCAhKHZhbCAmIEdFTl9QTERfV19GVUxMKSwgMTAwMCwKPiAtCQkJCQkgQ01EX1BLVF9T VEFUVVNfVElNRU9VVF9VUyk7Cj4gLQkJaWYgKHJldCA8IDApIHsKPiAtCQkJRFJNX0RFVl9FUlJP Uihkc2ktPmRldiwKPiAtCQkJCSAgICAgICJmYWlsZWQgdG8gZ2V0IGF2YWlsYWJsZSB3cml0ZSBw YXlsb2FkIEZJRk9cbiIpOwo+IC0JCQlyZXR1cm4gcmV0Owo+IC0JCX0KPiAtCX0KPiAtCj4gLQly ZXR1cm4gZHdfbWlwaV9kc2lfZ2VuX3BrdF9oZHJfd3JpdGUoZHNpLCBoZHJfdmFsKTsKPiAtfQo+ IC0KPiAtc3RhdGljIHNzaXplX3QgZHdfbWlwaV9kc2lfaG9zdF90cmFuc2ZlcihzdHJ1Y3QgbWlw aV9kc2lfaG9zdCAqaG9zdCwKPiAtCQkJCQkgY29uc3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqbXNn KQo+IC17Cj4gLQlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGhvc3RfdG9fZHNpKGhvc3QpOwo+ IC0JaW50IHJldDsKPiAtCj4gLQlkd19taXBpX21lc3NhZ2VfY29uZmlnKGRzaSwgbXNnKTsKPiAt Cj4gLQlzd2l0Y2ggKG1zZy0+dHlwZSkgewo+IC0JY2FzZSBNSVBJX0RTSV9EQ1NfU0hPUlRfV1JJ VEU6Cj4gLQljYXNlIE1JUElfRFNJX0RDU19TSE9SVF9XUklURV9QQVJBTToKPiAtCWNhc2UgTUlQ SV9EU0lfU0VUX01BWElNVU1fUkVUVVJOX1BBQ0tFVF9TSVpFOgo+IC0JCXJldCA9IGR3X21pcGlf ZHNpX2Rjc19zaG9ydF93cml0ZShkc2ksIG1zZyk7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIE1JUElf RFNJX0RDU19MT05HX1dSSVRFOgo+IC0JCXJldCA9IGR3X21pcGlfZHNpX2Rjc19sb25nX3dyaXRl KGRzaSwgbXNnKTsKPiAtCQlicmVhazsKPiAtCWRlZmF1bHQ6Cj4gLQkJRFJNX0RFVl9FUlJPUihk c2ktPmRldiwgInVuc3VwcG9ydGVkIG1lc3NhZ2UgdHlwZSAweCUwMnhcbiIsCj4gLQkJCSAgICAg IG1zZy0+dHlwZSk7Cj4gLQkJcmV0ID0gLUVJTlZBTDsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gcmV0 Owo+IC19Cj4gLQo+IC1zdGF0aWMgY29uc3Qgc3RydWN0IG1pcGlfZHNpX2hvc3Rfb3BzIGR3X21p cGlfZHNpX2hvc3Rfb3BzID0gewo+IC0JLmF0dGFjaCA9IGR3X21pcGlfZHNpX2hvc3RfYXR0YWNo LAo+IC0JLmRldGFjaCA9IGR3X21pcGlfZHNpX2hvc3RfZGV0YWNoLAo+IC0JLnRyYW5zZmVyID0g ZHdfbWlwaV9kc2lfaG9zdF90cmFuc2ZlciwKPiAtfTsKPiAtCj4gLXN0YXRpYyB2b2lkIGR3X21p cGlfZHNpX3ZpZGVvX21vZGVfY29uZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQo+IC17Cj4g LQl1MzIgdmFsOwo+IC0KPiAtCXZhbCA9IEVOQUJMRV9MT1dfUE9XRVI7Cj4gLQo+IC0JaWYgKGRz aS0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU9fQlVSU1QpCj4gLQkJdmFsIHw9IFZJ RF9NT0RFX1RZUEVfQlVSU1Q7Cj4gLQllbHNlIGlmIChkc2ktPm1vZGVfZmxhZ3MgJiBNSVBJX0RT SV9NT0RFX1ZJREVPX1NZTkNfUFVMU0UpCj4gLQkJdmFsIHw9IFZJRF9NT0RFX1RZUEVfTk9OX0JV UlNUX1NZTkNfUFVMU0VTOwo+IC0JZWxzZQo+IC0JCXZhbCB8PSBWSURfTU9ERV9UWVBFX05PTl9C VVJTVF9TWU5DX0VWRU5UUzsKPiAtCj4gLQlkc2lfd3JpdGUoZHNpLCBEU0lfVklEX01PREVfQ0ZH LCB2YWwpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBkd19taXBpX2RzaV9zZXRfbW9kZShzdHJ1 Y3QgZHdfbWlwaV9kc2kgKmRzaSwKPiAtCQkJCSBlbnVtIGR3X21pcGlfZHNpX21vZGUgbW9kZSkK PiAtewo+IC0JaWYgKG1vZGUgPT0gRFdfTUlQSV9EU0lfQ01EX01PREUpIHsKPiAtCQlkc2lfd3Jp dGUoZHNpLCBEU0lfUFdSX1VQLCBSRVNFVCk7Cj4gLQkJZHNpX3dyaXRlKGRzaSwgRFNJX01PREVf Q0ZHLCBFTkFCTEVfQ01EX01PREUpOwo+IC0JCWRzaV93cml0ZShkc2ksIERTSV9QV1JfVVAsIFBP V0VSVVApOwo+IC0JfSBlbHNlIHsKPiAtCQlkc2lfd3JpdGUoZHNpLCBEU0lfUFdSX1VQLCBSRVNF VCk7Cj4gLQkJZHNpX3dyaXRlKGRzaSwgRFNJX01PREVfQ0ZHLCBFTkFCTEVfVklERU9fTU9ERSk7 Cj4gLQkJZHdfbWlwaV9kc2lfdmlkZW9fbW9kZV9jb25maWcoZHNpKTsKPiAtCQlkc2lfd3JpdGUo ZHNpLCBEU0lfTFBDTEtfQ1RSTCwgUEhZX1RYUkVRVUVTVENMS0hTKTsKPiAtCQlkc2lfd3JpdGUo ZHNpLCBEU0lfUFdSX1VQLCBQT1dFUlVQKTsKPiAtCX0KPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQg ZHdfbWlwaV9kc2lfZGlzYWJsZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKPiAtewo+IC0JZHNp X3dyaXRlKGRzaSwgRFNJX1BXUl9VUCwgUkVTRVQpOwo+IC0JZHNpX3dyaXRlKGRzaSwgRFNJX1BI WV9SU1RaLCBQSFlfUlNUWik7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2lu aXQoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCj4gLXsKPiAtCS8qCj4gLQkgKiBUaGUgbWF4aW11 bSBwZXJtaXR0ZWQgZXNjYXBlIGNsb2NrIGlzIDIwTUh6IGFuZCBpdCBpcyBkZXJpdmVkIGZyb20K PiAtCSAqIGxhbmVieXRlY2xrLCB3aGljaCBpcyBydW5uaW5nIGF0ICJsYW5lX21icHMgLyA4Ii4g IFRodXMgd2Ugd2FudDoKPiAtCSAqCj4gLQkgKiAgICAgKGxhbmVfbWJwcyA+PiAzKSAvIGVzY19j bGtfZGl2aXNpb24gPCAyMAo+IC0JICogd2hpY2ggaXM6Cj4gLQkgKiAgICAgKGxhbmVfbWJwcyA+ PiAzKSAvIDIwID4gZXNjX2Nsa19kaXZpc2lvbgo+IC0JICovCj4gLQl1MzIgZXNjX2Nsa19kaXZp c2lvbiA9IChkc2ktPmxhbmVfbWJwcyA+PiAzKSAvIDIwICsgMTsKPiAtCj4gLQlkc2lfd3JpdGUo ZHNpLCBEU0lfUFdSX1VQLCBSRVNFVCk7Cj4gLQlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1JTVFos IFBIWV9ESVNGT1JDRVBMTCB8IFBIWV9ESVNBQkxFQ0xLCj4gLQkJICB8IFBIWV9SU1RaIHwgUEhZ X1NIVVRET1dOWik7Cj4gLQlkc2lfd3JpdGUoZHNpLCBEU0lfQ0xLTUdSX0NGRywgVE9fQ0xLX0RJ VklEU0lPTigxMCkgfAo+IC0JCSAgVFhfRVNDX0NMS19ESVZJRFNJT04oZXNjX2Nsa19kaXZpc2lv bikpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBkd19taXBpX2RzaV9kcGlfY29uZmlnKHN0cnVj dCBkd19taXBpX2RzaSAqZHNpLAo+IC0JCQkJICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1v ZGUpCj4gLXsKPiAtCXUzMiB2YWwgPSAwLCBjb2xvciA9IDA7Cj4gLQo+IC0Jc3dpdGNoIChkc2kt PmZvcm1hdCkgewo+IC0JY2FzZSBNSVBJX0RTSV9GTVRfUkdCODg4Ogo+IC0JCWNvbG9yID0gRFBJ X0NPTE9SX0NPRElOR18yNEJJVDsKPiAtCQlicmVhazsKPiAtCWNhc2UgTUlQSV9EU0lfRk1UX1JH QjY2NjoKPiAtCQljb2xvciA9IERQSV9DT0xPUl9DT0RJTkdfMThCSVRfMiB8IEVOMThfTE9PU0VM WTsKPiAtCQlicmVhazsKPiAtCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2Nl9QQUNLRUQ6Cj4gLQkJ Y29sb3IgPSBEUElfQ09MT1JfQ09ESU5HXzE4QklUXzE7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIE1J UElfRFNJX0ZNVF9SR0I1NjU6Cj4gLQkJY29sb3IgPSBEUElfQ09MT1JfQ09ESU5HXzE2QklUXzE7 Cj4gLQkJYnJlYWs7Cj4gLQl9Cj4gLQo+IC0JaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxB R19OVlNZTkMpCj4gLQkJdmFsIHw9IFZTWU5DX0FDVElWRV9MT1c7Cj4gLQlpZiAobW9kZS0+Zmxh Z3MgJiBEUk1fTU9ERV9GTEFHX05IU1lOQykKPiAtCQl2YWwgfD0gSFNZTkNfQUNUSVZFX0xPVzsK PiAtCj4gLQlkc2lfd3JpdGUoZHNpLCBEU0lfRFBJX1ZDSUQsIERQSV9WSUQoZHNpLT5jaGFubmVs KSk7Cj4gLQlkc2lfd3JpdGUoZHNpLCBEU0lfRFBJX0NPTE9SX0NPRElORywgY29sb3IpOwo+IC0J ZHNpX3dyaXRlKGRzaSwgRFNJX0RQSV9DRkdfUE9MLCB2YWwpOwo+IC0JZHNpX3dyaXRlKGRzaSwg RFNJX0RQSV9MUF9DTURfVElNLCBPVVRWQUNUX0xQQ01EX1RJTUUoNCkKPiAtCQkgIHwgSU5WQUNU X0xQQ01EX1RJTUUoNCkpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBkd19taXBpX2RzaV9wYWNr ZXRfaGFuZGxlcl9jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCj4gLXsKPiAtCWRzaV93 cml0ZShkc2ksIERTSV9QQ0tIRExfQ0ZHLCBFTl9DUkNfUlggfCBFTl9FQ0NfUlggfCBFTl9CVEEp Owo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBkd19taXBpX2RzaV92aWRlb19wYWNrZXRfY29uZmln KHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLAo+IC0JCQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqbW9kZSkKPiAtewo+IC0JZHNpX3dyaXRlKGRzaSwgRFNJX1ZJRF9QS1RfU0laRSwgVklE X1BLVF9TSVpFKG1vZGUtPmhkaXNwbGF5KSk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGR3X21p cGlfZHNpX2NvbW1hbmRfbW9kZV9jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCj4gLXsK PiAtCWRzaV93cml0ZShkc2ksIERTSV9UT19DTlRfQ0ZHLCBIU1RYX1RPX0NOVCgxMDAwKSB8IExQ UlhfVE9fQ05UKDEwMDApKTsKPiAtCWRzaV93cml0ZShkc2ksIERTSV9CVEFfVE9fQ05ULCAweGQw MCk7Cj4gLQlkc2lfd3JpdGUoZHNpLCBEU0lfTU9ERV9DRkcsIEVOQUJMRV9DTURfTU9ERSk7Cj4g LX0KPiAtCj4gLS8qIEdldCBsYW5lIGJ5dGUgY2xvY2sgY3ljbGVzLiAqLwo+IC1zdGF0aWMgdTMy IGR3X21pcGlfZHNpX2dldF9oY29tcG9uZW50X2xiY2Moc3RydWN0IGR3X21pcGlfZHNpICpkc2ks Cj4gLQkJCQkJICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCj4gLQkJCQkJICAgdTMy IGhjb21wb25lbnQpCj4gLXsKPiAtCXUzMiBmcmFjLCBsYmNjOwo+IC0KPiAtCWxiY2MgPSBoY29t cG9uZW50ICogZHNpLT5sYW5lX21icHMgKiBNU0VDX1BFUl9TRUMgLyA4Owo+IC0KPiAtCWZyYWMg PSBsYmNjICUgbW9kZS0+Y2xvY2s7Cj4gLQlsYmNjID0gbGJjYyAvIG1vZGUtPmNsb2NrOwo+IC0J aWYgKGZyYWMpCj4gLQkJbGJjYysrOwo+IC0KPiAtCXJldHVybiBsYmNjOwo+IC19Cj4gLQo+IC1z dGF0aWMgdm9pZCBkd19taXBpX2RzaV9saW5lX3RpbWVyX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9k c2kgKmRzaSwKPiAtCQkJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQo+IC17Cj4g LQl1MzIgaHRvdGFsLCBoc2EsIGhicCwgbGJjYzsKPiAtCj4gLQlodG90YWwgPSBtb2RlLT5odG90 YWw7Cj4gLQloc2EgPSBtb2RlLT5oc3luY19lbmQgLSBtb2RlLT5oc3luY19zdGFydDsKPiAtCWhi cCA9IG1vZGUtPmh0b3RhbCAtIG1vZGUtPmhzeW5jX2VuZDsKPiAtCj4gLQlsYmNjID0gZHdfbWlw aV9kc2lfZ2V0X2hjb21wb25lbnRfbGJjYyhkc2ksIG1vZGUsIGh0b3RhbCk7Cj4gLQlkc2lfd3Jp dGUoZHNpLCBEU0lfVklEX0hMSU5FX1RJTUUsIGxiY2MpOwo+IC0KPiAtCWxiY2MgPSBkd19taXBp X2RzaV9nZXRfaGNvbXBvbmVudF9sYmNjKGRzaSwgbW9kZSwgaHNhKTsKPiAtCWRzaV93cml0ZShk c2ksIERTSV9WSURfSFNBX1RJTUUsIGxiY2MpOwo+IC0KPiAtCWxiY2MgPSBkd19taXBpX2RzaV9n ZXRfaGNvbXBvbmVudF9sYmNjKGRzaSwgbW9kZSwgaGJwKTsKPiAtCWRzaV93cml0ZShkc2ksIERT SV9WSURfSEJQX1RJTUUsIGxiY2MpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBkd19taXBpX2Rz aV92ZXJ0aWNhbF90aW1pbmdfY29uZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLAo+IC0JCQkJ CSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKPiAtewo+IC0JdTMyIHZhY3Rp dmUsIHZzYSwgdmZwLCB2YnA7Cj4gLQo+IC0JdmFjdGl2ZSA9IG1vZGUtPnZkaXNwbGF5Owo+IC0J dnNhID0gbW9kZS0+dnN5bmNfZW5kIC0gbW9kZS0+dnN5bmNfc3RhcnQ7Cj4gLQl2ZnAgPSBtb2Rl LT52c3luY19zdGFydCAtIG1vZGUtPnZkaXNwbGF5Owo+IC0JdmJwID0gbW9kZS0+dnRvdGFsIC0g bW9kZS0+dnN5bmNfZW5kOwo+IC0KPiAtCWRzaV93cml0ZShkc2ksIERTSV9WSURfVkFDVElWRV9M SU5FUywgdmFjdGl2ZSk7Cj4gLQlkc2lfd3JpdGUoZHNpLCBEU0lfVklEX1ZTQV9MSU5FUywgdnNh KTsKPiAtCWRzaV93cml0ZShkc2ksIERTSV9WSURfVkZQX0xJTkVTLCB2ZnApOwo+IC0JZHNpX3dy aXRlKGRzaSwgRFNJX1ZJRF9WQlBfTElORVMsIHZicCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lk IGR3X21pcGlfZHNpX2RwaHlfdGltaW5nX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkK PiAtewo+IC0JZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UTVJfQ0ZHLCBQSFlfSFMyTFBfVElNRSgw eDQwKQo+IC0JCSAgfCBQSFlfTFAySFNfVElNRSgweDQwKSB8IE1BWF9SRF9USU1FKDEwMDAwKSk7 Cj4gLQo+IC0JZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UTVJfTFBDTEtfQ0ZHLCBQSFlfQ0xLSFMy TFBfVElNRSgweDQwKQo+IC0JCSAgfCBQSFlfQ0xLTFAySFNfVElNRSgweDQwKSk7Cj4gLX0KPiAt Cj4gLXN0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2RwaHlfaW50ZXJmYWNlX2NvbmZpZyhzdHJ1Y3Qg ZHdfbWlwaV9kc2kgKmRzaSkKPiAtewo+IC0JZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9JRl9DRkcs IFBIWV9TVE9QX1dBSVRfVElNRSgweDIwKSB8Cj4gLQkJICBOX0xBTkVTKGRzaS0+bGFuZXMpKTsK PiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfY2xlYXJfZXJyKHN0cnVjdCBkd19t aXBpX2RzaSAqZHNpKQo+IC17Cj4gLQlkc2lfcmVhZChkc2ksIERTSV9JTlRfU1QwKTsKPiAtCWRz aV9yZWFkKGRzaSwgRFNJX0lOVF9TVDEpOwo+IC0JZHNpX3dyaXRlKGRzaSwgRFNJX0lOVF9NU0sw LCAwKTsKPiAtCWRzaV93cml0ZShkc2ksIERTSV9JTlRfTVNLMSwgMCk7Cj4gLX0KPiAtCj4gLXN0 YXRpYyB2b2lkIGR3X21pcGlfZHNpX2VuY29kZXJfZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIg KmVuY29kZXIpCj4gLXsKPiAtCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gZW5jb2Rlcl90b19k c2koZW5jb2Rlcik7Cj4gLQo+IC0JaWYgKGRzaS0+ZHBtc19tb2RlICE9IERSTV9NT0RFX0RQTVNf T04pCj4gLQkJcmV0dXJuOwo+IC0KPiAtCWlmIChjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5wY2xr KSkgewo+IC0JCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIHBjbGtc biIpOwo+IC0JCXJldHVybjsKPiAtCX0KPiAtCj4gLQlkcm1fcGFuZWxfZGlzYWJsZShkc2ktPnBh bmVsKTsKPiAtCj4gLQlkd19taXBpX2RzaV9zZXRfbW9kZShkc2ksIERXX01JUElfRFNJX0NNRF9N T0RFKTsKPiAtCWRybV9wYW5lbF91bnByZXBhcmUoZHNpLT5wYW5lbCk7Cj4gLQo+IC0JZHdfbWlw aV9kc2lfZGlzYWJsZShkc2kpOwo+IC0JcG1fcnVudGltZV9wdXQoZHNpLT5kZXYpOwo+IC0JY2xr X2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+cGNsayk7Cj4gLQlkc2ktPmRwbXNfbW9kZSA9IERSTV9N T0RFX0RQTVNfT0ZGOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBkd19taXBpX2RzaV9lbmNvZGVy X2VuYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCj4gLXsKPiAtCXN0cnVjdCBkd19t aXBpX2RzaSAqZHNpID0gZW5jb2Rlcl90b19kc2koZW5jb2Rlcik7Cj4gLQlzdHJ1Y3QgZHJtX2Rp c3BsYXlfbW9kZSAqbW9kZSA9ICZlbmNvZGVyLT5jcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZTsK PiAtCWNvbnN0IHN0cnVjdCBkd19taXBpX2RzaV9wbGF0X2RhdGEgKnBkYXRhID0gZHNpLT5wZGF0 YTsKPiAtCWludCBtdXggPSBkcm1fb2ZfZW5jb2Rlcl9hY3RpdmVfZW5kcG9pbnRfaWQoZHNpLT5k ZXYtPm9mX25vZGUsIGVuY29kZXIpOwo+IC0JdTMyIHZhbDsKPiAtCWludCByZXQ7Cj4gLQo+IC0J cmV0ID0gZHdfbWlwaV9kc2lfZ2V0X2xhbmVfYnBzKGRzaSwgbW9kZSk7Cj4gLQlpZiAocmV0IDwg MCkKPiAtCQlyZXR1cm47Cj4gLQo+IC0JaWYgKGRzaS0+ZHBtc19tb2RlID09IERSTV9NT0RFX0RQ TVNfT04pCj4gLQkJcmV0dXJuOwo+IC0KPiAtCWlmIChjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5w Y2xrKSkgewo+IC0JCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIHBj bGtcbiIpOwo+IC0JCXJldHVybjsKPiAtCX0KPiAtCj4gLQlwbV9ydW50aW1lX2dldF9zeW5jKGRz aS0+ZGV2KTsKPiAtCWR3X21pcGlfZHNpX2luaXQoZHNpKTsKPiAtCWR3X21pcGlfZHNpX2RwaV9j b25maWcoZHNpLCBtb2RlKTsKPiAtCWR3X21pcGlfZHNpX3BhY2tldF9oYW5kbGVyX2NvbmZpZyhk c2kpOwo+IC0JZHdfbWlwaV9kc2lfdmlkZW9fbW9kZV9jb25maWcoZHNpKTsKPiAtCWR3X21pcGlf ZHNpX3ZpZGVvX3BhY2tldF9jb25maWcoZHNpLCBtb2RlKTsKPiAtCWR3X21pcGlfZHNpX2NvbW1h bmRfbW9kZV9jb25maWcoZHNpKTsKPiAtCWR3X21pcGlfZHNpX2xpbmVfdGltZXJfY29uZmlnKGRz aSwgbW9kZSk7Cj4gLQlkd19taXBpX2RzaV92ZXJ0aWNhbF90aW1pbmdfY29uZmlnKGRzaSwgbW9k ZSk7Cj4gLQlkd19taXBpX2RzaV9kcGh5X3RpbWluZ19jb25maWcoZHNpKTsKPiAtCWR3X21pcGlf ZHNpX2RwaHlfaW50ZXJmYWNlX2NvbmZpZyhkc2kpOwo+IC0JZHdfbWlwaV9kc2lfY2xlYXJfZXJy KGRzaSk7Cj4gLQo+IC0JLyoKPiAtCSAqIEZvciB0aGUgUkszMzk5LCB0aGUgY2xrIG9mIGdyZiBt dXN0IGJlIGVuYWJsZWQgYmVmb3JlIHdyaXRpbmcgZ3JmCj4gLQkgKiByZWdpc3Rlci4gQW5kIGZv ciBSSzMyODggb3Igb3RoZXIgc29jLCB0aGlzIGdyZl9jbGsgbXVzdCBiZSBOVUxMLAo+IC0JICog dGhlIGNsa19wcmVwYXJlX2VuYWJsZSByZXR1cm4gdHJ1ZSBkaXJlY3RseS4KPiAtCSAqLwo+IC0J cmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+Z3JmX2Nsayk7Cj4gLQlpZiAocmV0KSB7Cj4g LQkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBlbmFibGUgZ3JmX2NsazogJWRc biIsIHJldCk7Cj4gLQkJcmV0dXJuOwo+IC0JfQo+IC0KPiAtCWlmIChwZGF0YS0+Z3JmX2RzaTBf bW9kZV9yZWcpCj4gLQkJcmVnbWFwX3dyaXRlKGRzaS0+Z3JmX3JlZ21hcCwgcGRhdGEtPmdyZl9k c2kwX21vZGVfcmVnLAo+IC0JCQkgICAgIHBkYXRhLT5ncmZfZHNpMF9tb2RlKTsKPiAtCj4gLQlk d19taXBpX2RzaV9waHlfaW5pdChkc2kpOwo+IC0JZHdfbWlwaV9kc2lfd2FpdF9mb3JfdHdvX2Zy YW1lcyhtb2RlKTsKPiAtCj4gLQlkd19taXBpX2RzaV9zZXRfbW9kZShkc2ksIERXX01JUElfRFNJ X0NNRF9NT0RFKTsKPiAtCWlmIChkcm1fcGFuZWxfcHJlcGFyZShkc2ktPnBhbmVsKSkKPiAtCQlE Uk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiZmFpbGVkIHRvIHByZXBhcmUgcGFuZWxcbiIpOwo+IC0K PiAtCWR3X21pcGlfZHNpX3NldF9tb2RlKGRzaSwgRFdfTUlQSV9EU0lfVklEX01PREUpOwo+IC0J ZHJtX3BhbmVsX2VuYWJsZShkc2ktPnBhbmVsKTsKPiAtCj4gLQljbGtfZGlzYWJsZV91bnByZXBh cmUoZHNpLT5wY2xrKTsKPiAtCj4gLQlpZiAobXV4KQo+IC0JCXZhbCA9IHBkYXRhLT5kc2kwX2Vu X2JpdCB8IChwZGF0YS0+ZHNpMF9lbl9iaXQgPDwgMTYpOwo+IC0JZWxzZQo+IC0JCXZhbCA9IHBk YXRhLT5kc2kwX2VuX2JpdCA8PCAxNjsKPiAtCj4gLQlyZWdtYXBfd3JpdGUoZHNpLT5ncmZfcmVn bWFwLCBwZGF0YS0+Z3JmX3N3aXRjaF9yZWcsIHZhbCk7Cj4gLQlEUk1fREVWX0RFQlVHKGRzaS0+ ZGV2LAo+IC0JCSAgICAgICJ2b3AgJXMgb3V0cHV0IHRvIGRzaTBcbiIsIChtdXgpID8gIkxJVCIg OiAiQklHIik7Cj4gLQlkc2ktPmRwbXNfbW9kZSA9IERSTV9NT0RFX0RQTVNfT047Cj4gLQo+IC0J Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+Z3JmX2Nsayk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBp bnQKPiAtZHdfbWlwaV9kc2lfZW5jb2Rlcl9hdG9taWNfY2hlY2soc3RydWN0IGRybV9lbmNvZGVy ICplbmNvZGVyLAo+IC0JCQkJIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiAt CQkJCSBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSkKPiAtewo+IC0Jc3Ry dWN0IHJvY2tjaGlwX2NydGNfc3RhdGUgKnMgPSB0b19yb2NrY2hpcF9jcnRjX3N0YXRlKGNydGNf c3RhdGUpOwo+IC0Jc3RydWN0IGR3X21pcGlfZHNpICpkc2kgPSBlbmNvZGVyX3RvX2RzaShlbmNv ZGVyKTsKPiAtCj4gLQlzd2l0Y2ggKGRzaS0+Zm9ybWF0KSB7Cj4gLQljYXNlIE1JUElfRFNJX0ZN VF9SR0I4ODg6Cj4gLQkJcy0+b3V0cHV0X21vZGUgPSBST0NLQ0hJUF9PVVRfTU9ERV9QODg4Owo+ IC0JCWJyZWFrOwo+IC0JY2FzZSBNSVBJX0RTSV9GTVRfUkdCNjY2Ogo+IC0JCXMtPm91dHB1dF9t b2RlID0gUk9DS0NISVBfT1VUX01PREVfUDY2NjsKPiAtCQlicmVhazsKPiAtCWNhc2UgTUlQSV9E U0lfRk1UX1JHQjU2NToKPiAtCQlzLT5vdXRwdXRfbW9kZSA9IFJPQ0tDSElQX09VVF9NT0RFX1A1 NjU7Cj4gLQkJYnJlYWs7Cj4gLQlkZWZhdWx0Ogo+IC0JCVdBUk5fT04oMSk7Cj4gLQkJcmV0dXJu IC1FSU5WQUw7Cj4gLQl9Cj4gLQo+IC0Jcy0+b3V0cHV0X3R5cGUgPSBEUk1fTU9ERV9DT05ORUNU T1JfRFNJOwo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcwo+IC1kd19taXBpX2RzaV9lbmNvZGVyX2hlbHBlcl9m dW5jcyA9IHsKPiAtCS5lbmFibGUgPSBkd19taXBpX2RzaV9lbmNvZGVyX2VuYWJsZSwKPiAtCS5k aXNhYmxlID0gZHdfbWlwaV9kc2lfZW5jb2Rlcl9kaXNhYmxlLAo+IC0JLmF0b21pY19jaGVjayA9 IGR3X21pcGlfZHNpX2VuY29kZXJfYXRvbWljX2NoZWNrLAo+IC19Owo+IC0KPiAtc3RhdGljIGNv bnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyBkd19taXBpX2RzaV9lbmNvZGVyX2Z1bmNzID0g ewo+IC0JLmRlc3Ryb3kgPSBkcm1fZW5jb2Rlcl9jbGVhbnVwLAo+IC19Owo+IC0KPiAtc3RhdGlj IGludCBkd19taXBpX2RzaV9jb25uZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IpCj4gLXsKPiAtCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gY29uX3RvX2Rz aShjb25uZWN0b3IpOwo+IC0KPiAtCXJldHVybiBkcm1fcGFuZWxfZ2V0X21vZGVzKGRzaS0+cGFu ZWwpOwo+IC19Cj4gLQo+IC1zdGF0aWMgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNz IGR3X21pcGlfZHNpX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7Cj4gLQkuZ2V0X21vZGVzID0g ZHdfbWlwaV9kc2lfY29ubmVjdG9yX2dldF9tb2RlcywKPiAtfTsKPiAtCj4gLXN0YXRpYyB2b2lk IGR3X21pcGlfZHNpX2RybV9jb25uZWN0b3JfZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yKQo+IC17Cj4gLQlkcm1fY29ubmVjdG9yX3VucmVnaXN0ZXIoY29ubmVjdG9yKTsK PiAtCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOwo+IC19Cj4gLQo+IC1zdGF0aWMg Y29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgZHdfbWlwaV9kc2lfYXRvbWljX2Nvbm5l Y3Rvcl9mdW5jcyA9IHsKPiAtCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVf Y29ubmVjdG9yX21vZGVzLAo+IC0JLmRlc3Ryb3kgPSBkd19taXBpX2RzaV9kcm1fY29ubmVjdG9y X2Rlc3Ryb3ksCj4gLQkucmVzZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQs Cj4gLQkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rv cl9kdXBsaWNhdGVfc3RhdGUsCj4gLQkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWlj X2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSwKPiAtfTsKPiAtCj4gLXN0YXRpYyBpbnQg ZHdfbWlwaV9kc2lfcmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSwKPiAtCQkJCXN0cnVj dCBkd19taXBpX2RzaSAqZHNpKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIg PSAmZHNpLT5lbmNvZGVyOwo+IC0Jc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9ICZk c2ktPmNvbm5lY3RvcjsKPiAtCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRzaS0+ZGV2Owo+IC0JaW50 IHJldDsKPiAtCj4gLQllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9IGRybV9vZl9maW5kX3Bvc3Np YmxlX2NydGNzKGRybSwKPiAtCQkJCQkJCSAgICAgZGV2LT5vZl9ub2RlKTsKPiAtCS8qCj4gLQkg KiBJZiB3ZSBmYWlsZWQgdG8gZmluZCB0aGUgQ1JUQyhzKSB3aGljaCB0aGlzIGVuY29kZXIgaXMK PiAtCSAqIHN1cHBvc2VkIHRvIGJlIGNvbm5lY3RlZCB0bywgaXQncyBiZWNhdXNlIHRoZSBDUlRD IGhhcwo+IC0JICogbm90IGJlZW4gcmVnaXN0ZXJlZCB5ZXQuICBEZWZlciBwcm9iaW5nLCBhbmQg aG9wZSB0aGF0Cj4gLQkgKiB0aGUgcmVxdWlyZWQgQ1JUQyBpcyBhZGRlZCBsYXRlci4KPiAtCSAq Lwo+IC0JaWYgKGVuY29kZXItPnBvc3NpYmxlX2NydGNzID09IDApCj4gLQkJcmV0dXJuIC1FUFJP QkVfREVGRVI7Cj4gLQo+IC0JZHJtX2VuY29kZXJfaGVscGVyX2FkZCgmZHNpLT5lbmNvZGVyLAo+ IC0JCQkgICAgICAgJmR3X21pcGlfZHNpX2VuY29kZXJfaGVscGVyX2Z1bmNzKTsKPiAtCXJldCA9 IGRybV9lbmNvZGVyX2luaXQoZHJtLCAmZHNpLT5lbmNvZGVyLCAmZHdfbWlwaV9kc2lfZW5jb2Rl cl9mdW5jcywKPiAtCQkJICAgICAgIERSTV9NT0RFX0VOQ09ERVJfRFNJLCBOVUxMKTsKPiAtCWlm IChyZXQpIHsKPiAtCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIGVu Y29kZXIgd2l0aCBkcm1cbiIpOwo+IC0JCXJldHVybiByZXQ7Cj4gLQl9Cj4gLQo+IC0JZHJtX2Nv bm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5lY3RvciwKPiAtCQkJCSAmZHdfbWlwaV9kc2lfY29ubmVj dG9yX2hlbHBlcl9mdW5jcyk7Cj4gLQo+IC0JZHJtX2Nvbm5lY3Rvcl9pbml0KGRybSwgJmRzaS0+ Y29ubmVjdG9yLAo+IC0JCQkgICAmZHdfbWlwaV9kc2lfYXRvbWljX2Nvbm5lY3Rvcl9mdW5jcywK PiAtCQkJICAgRFJNX01PREVfQ09OTkVDVE9SX0RTSSk7Cj4gLQo+IC0JZHJtX21vZGVfY29ubmVj dG9yX2F0dGFjaF9lbmNvZGVyKGNvbm5lY3RvciwgZW5jb2Rlcik7Cj4gLQo+IC0JcmV0dXJuIDA7 Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgcm9ja2NoaXBfbWlwaV9wYXJzZV9kdChzdHJ1Y3QgZHdf bWlwaV9kc2kgKmRzaSkKPiAtewo+IC0Jc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRzaS0+ZGV2 LT5vZl9ub2RlOwo+IC0KPiAtCWRzaS0+Z3JmX3JlZ21hcCA9IHN5c2Nvbl9yZWdtYXBfbG9va3Vw X2J5X3BoYW5kbGUobnAsICJyb2NrY2hpcCxncmYiKTsKPiAtCWlmIChJU19FUlIoZHNpLT5ncmZf cmVnbWFwKSkgewo+IC0JCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJVbmFibGUgdG8gZ2V0IHJv Y2tjaGlwLGdyZlxuIik7Cj4gLQkJcmV0dXJuIFBUUl9FUlIoZHNpLT5ncmZfcmVnbWFwKTsKPiAt CX0KPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIHN0cnVjdCBkd19taXBpX2Rz aV9wbGF0X2RhdGEgcmszMjg4X21pcGlfZHNpX2Rydl9kYXRhID0gewo+IC0JLmRzaTBfZW5fYml0 ID0gUkszMjg4X0RTSTBfU0VMX1ZPUF9MSVQsCj4gLQkuZHNpMV9lbl9iaXQgPSBSSzMyODhfRFNJ MV9TRUxfVk9QX0xJVCwKPiAtCS5ncmZfc3dpdGNoX3JlZyA9IFJLMzI4OF9HUkZfU09DX0NPTjYs Cj4gLQkubWF4X2RhdGFfbGFuZXMgPSA0LAo+IC19Owo+IC0KPiAtc3RhdGljIHN0cnVjdCBkd19t aXBpX2RzaV9wbGF0X2RhdGEgcmszMzk5X21pcGlfZHNpX2Rydl9kYXRhID0gewo+IC0JLmRzaTBf ZW5fYml0ID0gUkszMzk5X0RTSTBfU0VMX1ZPUF9MSVQsCj4gLQkuZHNpMV9lbl9iaXQgPSBSSzMz OTlfRFNJMV9TRUxfVk9QX0xJVCwKPiAtCS5ncmZfc3dpdGNoX3JlZyA9IFJLMzM5OV9HUkZfU09D X0NPTjIwLAo+IC0JLmdyZl9kc2kwX21vZGUgPSBSSzMzOTlfR1JGX0RTSV9NT0RFLAo+IC0JLmdy Zl9kc2kwX21vZGVfcmVnID0gUkszMzk5X0dSRl9TT0NfQ09OMjIsCj4gLQkuZmxhZ3MgPSBEV19N SVBJX05FRURTX1BIWV9DRkdfQ0xLIHwgRFdfTUlQSV9ORUVEU19HUkZfQ0xLLAo+IC0JLm1heF9k YXRhX2xhbmVzID0gNCwKPiAtfTsKPiAtCj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNl X2lkIGR3X21pcGlfZHNpX2R0X2lkc1tdID0gewo+IC0Jewo+IC0JIC5jb21wYXRpYmxlID0gInJv Y2tjaGlwLHJrMzI4OC1taXBpLWRzaSIsCj4gLQkgLmRhdGEgPSAmcmszMjg4X21pcGlfZHNpX2Ry dl9kYXRhLAo+IC0JfSwgewo+IC0JIC5jb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMzM5OS1taXBp LWRzaSIsCj4gLQkgLmRhdGEgPSAmcmszMzk5X21pcGlfZHNpX2Rydl9kYXRhLAo+IC0JfSwKPiAt CXsgLyogc2VudGluZWwgKi8gfQo+IC19Owo+IC1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBkd19t aXBpX2RzaV9kdF9pZHMpOwo+IC0KPiAtc3RhdGljIGludCBkd19taXBpX2RzaV9iaW5kKHN0cnVj dCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAo+IC0JCQkgICAgdm9pZCAqZGF0 YSkKPiAtewo+IC0JY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfaWQgPQo+IC0JCQlvZl9t YXRjaF9kZXZpY2UoZHdfbWlwaV9kc2lfZHRfaWRzLCBkZXYpOwo+IC0JY29uc3Qgc3RydWN0IGR3 X21pcGlfZHNpX3BsYXRfZGF0YSAqcGRhdGEgPSBvZl9pZC0+ZGF0YTsKPiAtCXN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKPiAtCXN0cnVjdCBy ZXNldF9jb250cm9sICphcGJfcnN0Owo+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRhdGE7 Cj4gLQlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaTsKPiAtCXN0cnVjdCByZXNvdXJjZSAqcmVzOwo+ IC0JaW50IHJldDsKPiAtCj4gLQlkc2kgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRzaSks IEdGUF9LRVJORUwpOwo+IC0JaWYgKCFkc2kpCj4gLQkJcmV0dXJuIC1FTk9NRU07Cj4gLQo+IC0J ZHNpLT5kZXYgPSBkZXY7Cj4gLQlkc2ktPnBkYXRhID0gcGRhdGE7Cj4gLQlkc2ktPmRwbXNfbW9k ZSA9IERSTV9NT0RFX0RQTVNfT0ZGOwo+IC0KPiAtCXJldCA9IHJvY2tjaGlwX21pcGlfcGFyc2Vf ZHQoZHNpKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIHJldDsKPiAtCj4gLQlyZXMgPSBwbGF0 Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwo+IC0JaWYgKCFyZXMp Cj4gLQkJcmV0dXJuIC1FTk9ERVY7Cj4gLQo+IC0JZHNpLT5iYXNlID0gZGV2bV9pb3JlbWFwX3Jl c291cmNlKGRldiwgcmVzKTsKPiAtCWlmIChJU19FUlIoZHNpLT5iYXNlKSkKPiAtCQlyZXR1cm4g UFRSX0VSUihkc2ktPmJhc2UpOwo+IC0KPiAtCWRzaS0+cGxscmVmX2NsayA9IGRldm1fY2xrX2dl dChkZXYsICJyZWYiKTsKPiAtCWlmIChJU19FUlIoZHNpLT5wbGxyZWZfY2xrKSkgewo+IC0JCXJl dCA9IFBUUl9FUlIoZHNpLT5wbGxyZWZfY2xrKTsKPiAtCQlEUk1fREVWX0VSUk9SKGRldiwKPiAt CQkJICAgICAgIlVuYWJsZSB0byBnZXQgcGxsIHJlZmVyZW5jZSBjbG9jazogJWRcbiIsIHJldCk7 Cj4gLQkJcmV0dXJuIHJldDsKPiAtCX0KPiAtCj4gLQlkc2ktPnBjbGsgPSBkZXZtX2Nsa19nZXQo ZGV2LCAicGNsayIpOwo+IC0JaWYgKElTX0VSUihkc2ktPnBjbGspKSB7Cj4gLQkJcmV0ID0gUFRS X0VSUihkc2ktPnBjbGspOwo+IC0JCURSTV9ERVZfRVJST1IoZGV2LCAiVW5hYmxlIHRvIGdldCBw Y2xrOiAlZFxuIiwgcmV0KTsKPiAtCQlyZXR1cm4gcmV0Owo+IC0JfQo+IC0KPiAtCS8qCj4gLQkg KiBOb3RlIHRoYXQgdGhlIHJlc2V0IHdhcyBub3QgZGVmaW5lZCBpbiB0aGUgaW5pdGlhbCBkZXZp Y2UgdHJlZSwgc28KPiAtCSAqIHdlIGhhdmUgdG8gYmUgcHJlcGFyZWQgZm9yIGl0IG5vdCBiZWlu ZyBmb3VuZC4KPiAtCSAqLwo+IC0JYXBiX3JzdCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXQoZGV2 LCAiYXBiIik7Cj4gLQlpZiAoSVNfRVJSKGFwYl9yc3QpKSB7Cj4gLQkJcmV0ID0gUFRSX0VSUihh cGJfcnN0KTsKPiAtCQlpZiAocmV0ID09IC1FTk9FTlQpIHsKPiAtCQkJYXBiX3JzdCA9IE5VTEw7 Cj4gLQkJfSBlbHNlIHsKPiAtCQkJRFJNX0RFVl9FUlJPUihkZXYsCj4gLQkJCQkgICAgICAiVW5h YmxlIHRvIGdldCByZXNldCBjb250cm9sOiAlZFxuIiwgcmV0KTsKPiAtCQkJcmV0dXJuIHJldDsK PiAtCQl9Cj4gLQl9Cj4gLQo+IC0JaWYgKGFwYl9yc3QpIHsKPiAtCQlyZXQgPSBjbGtfcHJlcGFy ZV9lbmFibGUoZHNpLT5wY2xrKTsKPiAtCQlpZiAocmV0KSB7Cj4gLQkJCURSTV9ERVZfRVJST1Io ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBwY2xrXG4iKTsKPiAtCQkJcmV0dXJuIHJldDsKPiAtCQl9 Cj4gLQo+IC0JCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KGFwYl9yc3QpOwo+IC0JCXVzbGVlcF9yYW5n ZSgxMCwgMjApOwo+IC0JCXJlc2V0X2NvbnRyb2xfZGVhc3NlcnQoYXBiX3JzdCk7Cj4gLQo+IC0J CWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPnBjbGspOwo+IC0JfQo+IC0KPiAtCWlmIChwZGF0 YS0+ZmxhZ3MgJiBEV19NSVBJX05FRURTX1BIWV9DRkdfQ0xLKSB7Cj4gLQkJZHNpLT5waHlfY2Zn X2NsayA9IGRldm1fY2xrX2dldChkZXYsICJwaHlfY2ZnIik7Cj4gLQkJaWYgKElTX0VSUihkc2kt PnBoeV9jZmdfY2xrKSkgewo+IC0JCQlyZXQgPSBQVFJfRVJSKGRzaS0+cGh5X2NmZ19jbGspOwo+ IC0JCQlEUk1fREVWX0VSUk9SKGRldiwKPiAtCQkJCSAgICAgICJVbmFibGUgdG8gZ2V0IHBoeV9j ZmdfY2xrOiAlZFxuIiwgcmV0KTsKPiAtCQkJcmV0dXJuIHJldDsKPiAtCQl9Cj4gLQl9Cj4gLQo+ IC0JaWYgKHBkYXRhLT5mbGFncyAmIERXX01JUElfTkVFRFNfR1JGX0NMSykgewo+IC0JCWRzaS0+ Z3JmX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJncmYiKTsKPiAtCQlpZiAoSVNfRVJSKGRzaS0+ Z3JmX2NsaykpIHsKPiAtCQkJcmV0ID0gUFRSX0VSUihkc2ktPmdyZl9jbGspOwo+IC0JCQlEUk1f REVWX0VSUk9SKGRldiwgIlVuYWJsZSB0byBnZXQgZ3JmX2NsazogJWRcbiIsIHJldCk7Cj4gLQkJ CXJldHVybiByZXQ7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCXJldCA9IGNsa19wcmVwYXJlX2VuYWJs ZShkc2ktPnBsbHJlZl9jbGspOwo+IC0JaWYgKHJldCkgewo+IC0JCURSTV9ERVZfRVJST1IoZGV2 LCAiRmFpbGVkIHRvIGVuYWJsZSBwbGxyZWZfY2xrXG4iKTsKPiAtCQlyZXR1cm4gcmV0Owo+IC0J fQo+IC0KPiAtCXJldCA9IGR3X21pcGlfZHNpX3JlZ2lzdGVyKGRybSwgZHNpKTsKPiAtCWlmIChy ZXQpIHsKPiAtCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBtaXBpX2Rz aTogJWRcbiIsIHJldCk7Cj4gLQkJZ290byBlcnJfcGxscmVmOwo+IC0JfQo+IC0KPiAtCXBtX3J1 bnRpbWVfZW5hYmxlKGRldik7Cj4gLQo+IC0JZHNpLT5kc2lfaG9zdC5vcHMgPSAmZHdfbWlwaV9k c2lfaG9zdF9vcHM7Cj4gLQlkc2ktPmRzaV9ob3N0LmRldiA9IGRldjsKPiAtCXJldCA9IG1pcGlf ZHNpX2hvc3RfcmVnaXN0ZXIoJmRzaS0+ZHNpX2hvc3QpOwo+IC0JaWYgKHJldCkgewo+IC0JCURS TV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIE1JUEkgaG9zdDogJWRcbiIsIHJl dCk7Cj4gLQkJZ290byBlcnJfY2xlYW51cDsKPiAtCX0KPiAtCj4gLQlpZiAoIWRzaS0+cGFuZWwp IHsKPiAtCQlyZXQgPSAtRVBST0JFX0RFRkVSOwo+IC0JCWdvdG8gZXJyX21pcGlfZHNpX2hvc3Q7 Cj4gLQl9Cj4gLQo+IC0JZGV2X3NldF9kcnZkYXRhKGRldiwgZHNpKTsKPiAtCXJldHVybiAwOwo+ IC0KPiAtZXJyX21pcGlfZHNpX2hvc3Q6Cj4gLQltaXBpX2RzaV9ob3N0X3VucmVnaXN0ZXIoJmRz aS0+ZHNpX2hvc3QpOwo+IC1lcnJfY2xlYW51cDoKPiAtCWRybV9lbmNvZGVyX2NsZWFudXAoJmRz aS0+ZW5jb2Rlcik7Cj4gLQlkcm1fY29ubmVjdG9yX2NsZWFudXAoJmRzaS0+Y29ubmVjdG9yKTsK PiAtZXJyX3BsbHJlZjoKPiAtCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPnBsbHJlZl9jbGsp Owo+IC0JcmV0dXJuIHJldDsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfdW5i aW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAo+IC0JCQkgICAg ICAgdm9pZCAqZGF0YSkKPiAtewo+IC0Jc3RydWN0IGR3X21pcGlfZHNpICpkc2kgPSBkZXZfZ2V0 X2RydmRhdGEoZGV2KTsKPiAtCj4gLQltaXBpX2RzaV9ob3N0X3VucmVnaXN0ZXIoJmRzaS0+ZHNp X2hvc3QpOwo+IC0JcG1fcnVudGltZV9kaXNhYmxlKGRldik7Cj4gLQljbGtfZGlzYWJsZV91bnBy ZXBhcmUoZHNpLT5wbGxyZWZfY2xrKTsKPiAtfQo+IC0KPiAtc3RhdGljIGNvbnN0IHN0cnVjdCBj b21wb25lbnRfb3BzIGR3X21pcGlfZHNpX29wcyA9IHsKPiAtCS5iaW5kCT0gZHdfbWlwaV9kc2lf YmluZCwKPiAtCS51bmJpbmQJPSBkd19taXBpX2RzaV91bmJpbmQsCj4gLX07Cj4gLQo+IC1zdGF0 aWMgaW50IGR3X21pcGlfZHNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4g LXsKPiAtCXJldHVybiBjb21wb25lbnRfYWRkKCZwZGV2LT5kZXYsICZkd19taXBpX2RzaV9vcHMp Owo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IGR3X21pcGlfZHNpX3JlbW92ZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQo+IC17Cj4gLQljb21wb25lbnRfZGVsKCZwZGV2LT5kZXYsICZkd19t aXBpX2RzaV9vcHMpOwo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0cnVjdCBwbGF0Zm9ybV9k cml2ZXIgZHdfbWlwaV9kc2lfZHJpdmVyID0gewo+IC0JLnByb2JlCQk9IGR3X21pcGlfZHNpX3By b2JlLAo+IC0JLnJlbW92ZQkJPSBkd19taXBpX2RzaV9yZW1vdmUsCj4gLQkuZHJpdmVyCQk9IHsK PiAtCQkub2ZfbWF0Y2hfdGFibGUgPSBkd19taXBpX2RzaV9kdF9pZHMsCj4gLQkJLm5hbWUJPSBE UklWRVJfTkFNRSwKPiAtCX0sCj4gLX07Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9y b2NrY2hpcC9kdy1taXBpLWRzaV9yb2NrY2hpcC5jIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlw L2R3LW1pcGktZHNpX3JvY2tjaGlwLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAw MDAwMDAuLmM2ODJlZDIKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3Jv Y2tjaGlwL2R3LW1pcGktZHNpX3JvY2tjaGlwLmMKPiBAQCAtMCwwICsxLDc2NCBAQAo+ICsvKgo+ ICsgKiBDb3B5cmlnaHQgKEMpIEZ1emhvdSBSb2NrY2hpcCBFbGVjdHJvbmljcyBDby5MdGQKPiAr ICogQXV0aG9yOgo+ICsgKiAgICAgIENocmlzIFpob25nIDx6eXdAcm9jay1jaGlwcy5jb20+Cj4g KyAqICAgICAgTmlja2V5IFlhbmcgPG5pY2tleS55YW5nQHJvY2stY2hpcHMuY29tPgo+ICsgKgo+ ICsgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCj4gKyAqIG1heSBiZSBjb3BpZWQsIGRp c3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCj4gKyAqCj4gKyAqIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuCj4gKyAqCj4gKyAqIExpY2Vuc2UgdGVybXM6ICBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSAoR1BMKSwgdmVyc2lvbiAyCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUg PGxpbnV4L2Nsay5oPgo+ICsjaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+Cj4gKyNpbmNsdWRlIDxs aW51eC9tYXRoNjQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ICsjaW5jbHVkZSA8 bGludXgvb2ZfZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5jbHVkZSA8 ZHJtL2RybV9taXBpX2RzaS5oPgo+ICsjaW5jbHVkZSA8ZHJtL2JyaWRnZS9kd19taXBpX2RzaS5o Pgo+ICsjaW5jbHVkZSA8dmlkZW8vbWlwaV9kaXNwbGF5Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9y ZWdtYXAuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fb2YuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21m ZC9zeXNjb24uaD4KPiArCj4gKyNpbmNsdWRlICJyb2NrY2hpcF9kcm1fZHJ2LmgiCj4gKyNpbmNs dWRlICJyb2NrY2hpcF9kcm1fdm9wLmgiCj4gKwo+ICsjZGVmaW5lIERTSV9QSFlfVFNUX0NUUkww CQkweGI0Cj4gKyNkZWZpbmUgUEhZX1RFU1RDTEsJCQlCSVQoMSkKPiArI2RlZmluZSBQSFlfVU5U RVNUQ0xLCQkJMAo+ICsjZGVmaW5lIFBIWV9URVNUQ0xSCQkJQklUKDApCj4gKyNkZWZpbmUgUEhZ X1VOVEVTVENMUgkJCTAKPiArCj4gKyNkZWZpbmUgRFNJX1BIWV9UU1RfQ1RSTDEJCTB4YjgKPiAr I2RlZmluZSBQSFlfVEVTVEVOCQkJQklUKDE2KQo+ICsjZGVmaW5lIFBIWV9VTlRFU1RFTgkJCTAK PiArI2RlZmluZSBQSFlfVEVTVERPVVQobikJCQkoKChuKSAmIDB4ZmYpIDw8IDgpCj4gKyNkZWZp bmUgUEhZX1RFU1RESU4obikJCQkoKChuKSAmIDB4ZmYpIDw8IDApCj4gKwo+ICsjZGVmaW5lIEJZ UEFTU19WQ09fUkFOR0UJQklUKDcpCj4gKyNkZWZpbmUgVkNPX1JBTkdFX0NPTl9TRUwodmFsKQko KCh2YWwpICYgMHg3KSA8PCAzKQo+ICsjZGVmaW5lIFZDT19JTl9DQVBfQ09OX0RFRkFVTFQJKDB4 MCA8PCAxKQo+ICsjZGVmaW5lIFZDT19JTl9DQVBfQ09OX0xPVwkoMHgxIDw8IDEpCj4gKyNkZWZp bmUgVkNPX0lOX0NBUF9DT05fSElHSAkoMHgyIDw8IDEpCj4gKyNkZWZpbmUgUkVGX0JJQVNfQ1VS X1NFTAlCSVQoMCkKPiArCj4gKyNkZWZpbmUgQ1BfQ1VSUkVOVF8zVUEJMHgxCj4gKyNkZWZpbmUg Q1BfQ1VSUkVOVF80XzVVQQkweDIKPiArI2RlZmluZSBDUF9DVVJSRU5UXzdfNVVBCTB4Ngo+ICsj ZGVmaW5lIENQX0NVUlJFTlRfNlVBCTB4OQo+ICsjZGVmaW5lIENQX0NVUlJFTlRfMTJVQQkweGIK PiArI2RlZmluZSBDUF9DVVJSRU5UX1NFTCh2YWwpCSgodmFsKSAmIDB4ZikKPiArI2RlZmluZSBD UF9QUk9HUkFNX0VOCQlCSVQoNykKPiArCj4gKyNkZWZpbmUgTFBGX1JFU0lTVE9SU18xNV81S09I TQkweDEKPiArI2RlZmluZSBMUEZfUkVTSVNUT1JTXzEzS09ITQkweDIKPiArI2RlZmluZSBMUEZf UkVTSVNUT1JTXzExXzVLT0hNCTB4NAo+ICsjZGVmaW5lIExQRl9SRVNJU1RPUlNfMTBfNUtPSE0J MHg4Cj4gKyNkZWZpbmUgTFBGX1JFU0lTVE9SU184S09ITQkweDEwCj4gKyNkZWZpbmUgTFBGX1BS T0dSQU1fRU4JCUJJVCg2KQo+ICsjZGVmaW5lIExQRl9SRVNJU1RPUlNfU0VMKHZhbCkJKCh2YWwp ICYgMHgzZikKPiArCj4gKyNkZWZpbmUgSFNGUkVRUkFOR0VfU0VMKHZhbCkJKCgodmFsKSAmIDB4 M2YpIDw8IDEpCj4gKwo+ICsjZGVmaW5lIElOUFVUX0RJVklERVIodmFsKQkoKCh2YWwpIC0gMSkg JiAweDdmKQo+ICsjZGVmaW5lIExPV19QUk9HUkFNX0VOCQkwCj4gKyNkZWZpbmUgSElHSF9QUk9H UkFNX0VOCQlCSVQoNykKPiArI2RlZmluZSBMT09QX0RJVl9MT1dfU0VMKHZhbCkJKCgodmFsKSAt IDEpICYgMHgxZikKPiArI2RlZmluZSBMT09QX0RJVl9ISUdIX1NFTCh2YWwpCSgoKCh2YWwpIC0g MSkgPj4gNSkgJiAweGYpCj4gKyNkZWZpbmUgUExMX0xPT1BfRElWX0VOCQlCSVQoNSkKPiArI2Rl ZmluZSBQTExfSU5QVVRfRElWX0VOCUJJVCg0KQo+ICsKPiArI2RlZmluZSBQT1dFUl9DT05UUk9M CQlCSVQoNikKPiArI2RlZmluZSBJTlRFUk5BTF9SRUdfQ1VSUkVOVAlCSVQoMykKPiArI2RlZmlu ZSBCSUFTX0JMT0NLX09OCQlCSVQoMikKPiArI2RlZmluZSBCQU5ER0FQX09OCQlCSVQoMCkKPiAr Cj4gKyNkZWZpbmUgVEVSX1JFU0lTVE9SX0hJR0gJQklUKDcpCj4gKyNkZWZpbmUJVEVSX1JFU0lT VE9SX0xPVwkwCj4gKyNkZWZpbmUgTEVWRUxfU0hJRlRFUlNfT04JQklUKDYpCj4gKyNkZWZpbmUg VEVSX0NBTF9ET05FCQlCSVQoNSkKPiArI2RlZmluZSBTRVRSRF9NQVgJCSgweDcgPDwgMikKPiAr I2RlZmluZSBQT1dFUl9NQU5BR0UJCUJJVCgxKQo+ICsjZGVmaW5lIFRFUl9SRVNJU1RPUlNfT04J QklUKDApCj4gKwo+ICsjZGVmaW5lIEJJQVNFWFRSX1NFTCh2YWwpCSgodmFsKSAmIDB4NykKPiAr I2RlZmluZSBCQU5ER0FQX1NFTCh2YWwpCSgodmFsKSAmIDB4NykKPiArI2RlZmluZSBUTFBfUFJP R1JBTV9FTgkJQklUKDcpCj4gKyNkZWZpbmUgVEhTX1BSRV9QUk9HUkFNX0VOCUJJVCg3KQo+ICsj ZGVmaW5lIFRIU19aRVJPX1BST0dSQU1fRU4JQklUKDYpCj4gKwo+ICsjZGVmaW5lIFBMTF9CSUFT X0NVUl9TRUxfQ0FQX1ZDT19DT05UUk9MCTB4MTAKPiArI2RlZmluZSBQTExfQ1BfQ09OVFJPTF9Q TExfTE9DS19CWVBBU1MJMHgxMQo+ICsjZGVmaW5lIFBMTF9MUEZfQU5EX0NQX0NPTlRST0wJMHgx Mgo+ICsjZGVmaW5lIFBMTF9JTlBVVF9ESVZJREVSX1JBVElPCTB4MTcKPiArI2RlZmluZSBQTExf TE9PUF9ESVZJREVSX1JBVElPCTB4MTgKPiArI2RlZmluZSBQTExfSU5QVVRfQU5EX0xPT1BfRElW SURFUl9SQVRJT1NfQ09OVFJPTAkweDE5Cj4gKyNkZWZpbmUgQkFOREdBUF9BTkRfQklBU19DT05U Uk9MCTB4MjAKPiArI2RlZmluZSBURVJNSU5BVElPTl9SRVNJU1RFUl9DT05UUk9MCTB4MjEKPiAr I2RlZmluZSBBRkVfQklBU19CQU5ER0FQX0FOQUxPR19QUk9HUkFNTUFCSUxJVFkJMHgyMgo+ICsj ZGVmaW5lIEhTX1JYX0NPTlRST0xfT0ZfTEFORV8wCTB4NDQKPiArI2RlZmluZSBIU19UWF9DTE9D S19MQU5FX1JFUVVFU1RfU1RBVEVfVElNRV9DT05UUk9MCTB4NjAKPiArI2RlZmluZSBIU19UWF9D TE9DS19MQU5FX1BSRVBBUkVfU1RBVEVfVElNRV9DT05UUk9MCTB4NjEKPiArI2RlZmluZSBIU19U WF9DTE9DS19MQU5FX0hTX1pFUk9fU1RBVEVfVElNRV9DT05UUk9MCTB4NjIKPiArI2RlZmluZSBI U19UWF9DTE9DS19MQU5FX1RSQUlMX1NUQVRFX1RJTUVfQ09OVFJPTAkweDYzCj4gKyNkZWZpbmUg SFNfVFhfQ0xPQ0tfTEFORV9FWElUX1NUQVRFX1RJTUVfQ09OVFJPTAkweDY0Cj4gKyNkZWZpbmUg SFNfVFhfQ0xPQ0tfTEFORV9QT1NUX1RJTUVfQ09OVFJPTAkweDY1Cj4gKyNkZWZpbmUgSFNfVFhf REFUQV9MQU5FX1JFUVVFU1RfU1RBVEVfVElNRV9DT05UUk9MCTB4NzAKPiArI2RlZmluZSBIU19U WF9EQVRBX0xBTkVfUFJFUEFSRV9TVEFURV9USU1FX0NPTlRST0wJMHg3MQo+ICsjZGVmaW5lIEhT X1RYX0RBVEFfTEFORV9IU19aRVJPX1NUQVRFX1RJTUVfQ09OVFJPTAkweDcyCj4gKyNkZWZpbmUg SFNfVFhfREFUQV9MQU5FX1RSQUlMX1NUQVRFX1RJTUVfQ09OVFJPTAkweDczCj4gKyNkZWZpbmUg SFNfVFhfREFUQV9MQU5FX0VYSVRfU1RBVEVfVElNRV9DT05UUk9MCTB4NzQKPiArCj4gKyNkZWZp bmUgRFdfTUlQSV9ORUVEU19QSFlfQ0ZHX0NMSwlCSVQoMCkKPiArI2RlZmluZSBEV19NSVBJX05F RURTX0dSRl9DTEsJCUJJVCgxKQo+ICsKPiArI2RlZmluZSBSSzMyODhfR1JGX1NPQ19DT042CQkw eDAyNWMKPiArI2RlZmluZSBSSzMyODhfRFNJMF9TRUxfVk9QX0xJVAkJQklUKDYpCj4gKyNkZWZp bmUgUkszMjg4X0RTSTFfU0VMX1ZPUF9MSVQJCUJJVCg5KQo+ICsKPiArI2RlZmluZSBSSzMzOTlf R1JGX1NPQ19DT04yMAkJMHg2MjUwCj4gKyNkZWZpbmUgUkszMzk5X0RTSTBfU0VMX1ZPUF9MSVQJ CUJJVCgwKQo+ICsjZGVmaW5lIFJLMzM5OV9EU0kxX1NFTF9WT1BfTElUCQlCSVQoNCkKPiArCj4g Ky8qIGRpc2FibGUgdHVybnJlcXVlc3QsIHR1cm5kaXNhYmxlLCBmb3JjZXR4c3RvcG1vZGUsIGZv cmNlcnhtb2RlICovCj4gKyNkZWZpbmUgUkszMzk5X0dSRl9TT0NfQ09OMjIJCTB4NjI1OAo+ICsj ZGVmaW5lIFJLMzM5OV9HUkZfRFNJX01PREUJCTB4ZmZmZjAwMDAKPiArCj4gKyNkZWZpbmUgdG9f ZHNpKG5tKQljb250YWluZXJfb2Yobm0sIHN0cnVjdCBkd19taXBpX2RzaV9yb2NrY2hpcCwgbm0p Cj4gKwo+ICtlbnVtIHsKPiArCUJBTkRHQVBfOTdfMDcsCj4gKwlCQU5ER0FQXzk4XzA1LAo+ICsJ QkFOREdBUF85OV8wMiwKPiArCUJBTkRHQVBfMTAwXzAwLAo+ICsJQkFOREdBUF85M18xNywKPiAr CUJBTkRHQVBfOTRfMTUsCj4gKwlCQU5ER0FQXzk1XzEyLAo+ICsJQkFOREdBUF85Nl8xMCwKPiAr fTsKPiArCj4gK2VudW0gewo+ICsJQklBU0VYVFJfODdfMSwKPiArCUJJQVNFWFRSXzkxXzUsCj4g KwlCSUFTRVhUUl85NV85LAo+ICsJQklBU0VYVFJfMTAwLAo+ICsJQklBU0VYVFJfMTA1Xzk0LAo+ ICsJQklBU0VYVFJfMTExXzg4LAo+ICsJQklBU0VYVFJfMTE4XzgsCj4gKwlCSUFTRVhUUl8xMjdf NywKPiArfTsKPiArCj4gK3N0cnVjdCByb2NrY2hpcF9kd19kc2lfY2hpcF9kYXRhIHsKPiArCXUz MiBkc2kwX2VuX2JpdDsKPiArCXUzMiBkc2kxX2VuX2JpdDsKPiArCXUzMiBncmZfc3dpdGNoX3Jl ZzsKPiArCXUzMiBncmZfZHNpMF9tb2RlOwo+ICsJdTMyIGdyZl9kc2kwX21vZGVfcmVnOwo+ICsJ dW5zaWduZWQgaW50IGZsYWdzOwo+ICsJdW5zaWduZWQgaW50IG1heF9kYXRhX2xhbmVzOwo+ICt9 Owo+ICsKPiArc3RydWN0IGR3X21pcGlfZHNpX3JvY2tjaGlwIHsKPiArCXN0cnVjdCBkZXZpY2Ug KmRldjsKPiArCXN0cnVjdCBkcm1fZW5jb2RlciBlbmNvZGVyOwo+ICsJdm9pZCBfX2lvbWVtICpi YXNlOwo+ICsKPiArCXN0cnVjdCByZWdtYXAgKmdyZl9yZWdtYXA7Cj4gKwlzdHJ1Y3QgY2xrICpw bGxyZWZfY2xrOwo+ICsJc3RydWN0IGNsayAqZ3JmX2NsazsKPiArCXN0cnVjdCBjbGsgKnBoeV9j ZmdfY2xrOwo+ICsKPiArCXVuc2lnbmVkIGludCBsYW5lX21icHM7IC8qIHBlciBsYW5lICovCj4g Kwl1MTYgaW5wdXRfZGl2Owo+ICsJdTE2IGZlZWRiYWNrX2RpdjsKPiArCXUzMiBmb3JtYXQ7Cj4g Kwo+ICsJc3RydWN0IGR3X21pcGlfZHNpICpkbWQ7Cj4gKwljb25zdCBzdHJ1Y3Qgcm9ja2NoaXBf ZHdfZHNpX2NoaXBfZGF0YSAqY2RhdGE7Cj4gKwlzdHJ1Y3QgZHdfbWlwaV9kc2lfcGxhdF9kYXRh IHBkYXRhOwo+ICt9Owo+ICsKPiArc3RydWN0IGRwaHlfcGxsX3BhcmFtZXRlcl9tYXAgewo+ICsJ dW5zaWduZWQgaW50IG1heF9tYnBzOwo+ICsJdTggaHNmcmVxcmFuZ2U7Cj4gKwl1OCBpY3BjdHJs Owo+ICsJdTggbHBmY3RybDsKPiArfTsKPiArCj4gKy8qIFRoZSB0YWJsZSBpcyBiYXNlZCBvbiAy N01IeiBEUEhZIHBsbCByZWZlcmVuY2UgY2xvY2suICovCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHBoeV9wbGxfcGFyYW1ldGVyX21hcCBkcHBhX21hcFtdID0gewo+ICsJeyAgODksIDB4MDAsIENQ X0NVUlJFTlRfM1VBLCBMUEZfUkVTSVNUT1JTXzEzS09ITSB9LAo+ICsJeyAgOTksIDB4MTAsIENQ X0NVUlJFTlRfM1VBLCBMUEZfUkVTSVNUT1JTXzEzS09ITSB9LAo+ICsJeyAxMDksIDB4MjAsIENQ X0NVUlJFTlRfM1VBLCBMUEZfUkVTSVNUT1JTXzEzS09ITSB9LAo+ICsJeyAxMjksIDB4MDEsIENQ X0NVUlJFTlRfM1VBLCBMUEZfUkVTSVNUT1JTXzE1XzVLT0hNIH0sCj4gKwl7IDEzOSwgMHgxMSwg Q1BfQ1VSUkVOVF8zVUEsIExQRl9SRVNJU1RPUlNfMTVfNUtPSE0gfSwKPiArCXsgMTQ5LCAweDIx LCBDUF9DVVJSRU5UXzNVQSwgTFBGX1JFU0lTVE9SU18xNV81S09ITSB9LAo+ICsJeyAxNjksIDB4 MDIsIENQX0NVUlJFTlRfNlVBLCBMUEZfUkVTSVNUT1JTXzEzS09ITSB9LAo+ICsJeyAxNzksIDB4 MTIsIENQX0NVUlJFTlRfNlVBLCBMUEZfUkVTSVNUT1JTXzEzS09ITSB9LAo+ICsJeyAxOTksIDB4 MjIsIENQX0NVUlJFTlRfNlVBLCBMUEZfUkVTSVNUT1JTXzEzS09ITSB9LAo+ICsJeyAyMTksIDB4 MDMsIENQX0NVUlJFTlRfNF81VUEsIExQRl9SRVNJU1RPUlNfMTNLT0hNIH0sCj4gKwl7IDIzOSwg MHgxMywgQ1BfQ1VSUkVOVF80XzVVQSwgTFBGX1JFU0lTVE9SU18xM0tPSE0gfSwKPiArCXsgMjQ5 LCAweDIzLCBDUF9DVVJSRU5UXzRfNVVBLCBMUEZfUkVTSVNUT1JTXzEzS09ITSB9LAo+ICsJeyAy NjksIDB4MDQsIENQX0NVUlJFTlRfNlVBLCBMUEZfUkVTSVNUT1JTXzExXzVLT0hNIH0sCj4gKwl7 IDI5OSwgMHgxNCwgQ1BfQ1VSUkVOVF82VUEsIExQRl9SRVNJU1RPUlNfMTFfNUtPSE0gfSwKPiAr CXsgMzI5LCAweDA1LCBDUF9DVVJSRU5UXzNVQSwgTFBGX1JFU0lTVE9SU18xNV81S09ITSB9LAo+ ICsJeyAzNTksIDB4MTUsIENQX0NVUlJFTlRfM1VBLCBMUEZfUkVTSVNUT1JTXzE1XzVLT0hNIH0s Cj4gKwl7IDM5OSwgMHgyNSwgQ1BfQ1VSUkVOVF8zVUEsIExQRl9SRVNJU1RPUlNfMTVfNUtPSE0g fSwKPiArCXsgNDQ5LCAweDA2LCBDUF9DVVJSRU5UXzdfNVVBLCBMUEZfUkVTSVNUT1JTXzExXzVL T0hNIH0sCj4gKwl7IDQ5OSwgMHgxNiwgQ1BfQ1VSUkVOVF83XzVVQSwgTFBGX1JFU0lTVE9SU18x MV81S09ITSB9LAo+ICsJeyA1NDksIDB4MDcsIENQX0NVUlJFTlRfN181VUEsIExQRl9SRVNJU1RP UlNfMTBfNUtPSE0gfSwKPiArCXsgNTk5LCAweDE3LCBDUF9DVVJSRU5UXzdfNVVBLCBMUEZfUkVT SVNUT1JTXzEwXzVLT0hNIH0sCj4gKwl7IDY0OSwgMHgwOCwgQ1BfQ1VSUkVOVF83XzVVQSwgTFBG X1JFU0lTVE9SU18xMV81S09ITSB9LAo+ICsJeyA2OTksIDB4MTgsIENQX0NVUlJFTlRfN181VUEs IExQRl9SRVNJU1RPUlNfMTFfNUtPSE0gfSwKPiArCXsgNzQ5LCAweDA5LCBDUF9DVVJSRU5UXzdf NVVBLCBMUEZfUkVTSVNUT1JTXzExXzVLT0hNIH0sCj4gKwl7IDc5OSwgMHgxOSwgQ1BfQ1VSUkVO VF83XzVVQSwgTFBGX1JFU0lTVE9SU18xMV81S09ITSB9LAo+ICsJeyA4NDksIDB4MjksIENQX0NV UlJFTlRfN181VUEsIExQRl9SRVNJU1RPUlNfMTFfNUtPSE0gfSwKPiArCXsgODk5LCAweDM5LCBD UF9DVVJSRU5UXzdfNVVBLCBMUEZfUkVTSVNUT1JTXzExXzVLT0hNIH0sCj4gKwl7IDk0OSwgMHgw YSwgQ1BfQ1VSUkVOVF8xMlVBLCBMUEZfUkVTSVNUT1JTXzhLT0hNIH0sCj4gKwl7IDk5OSwgMHgx YSwgQ1BfQ1VSUkVOVF8xMlVBLCBMUEZfUkVTSVNUT1JTXzhLT0hNIH0sCj4gKwl7MTA0OSwgMHgy YSwgQ1BfQ1VSUkVOVF8xMlVBLCBMUEZfUkVTSVNUT1JTXzhLT0hNIH0sCj4gKwl7MTA5OSwgMHgz YSwgQ1BfQ1VSUkVOVF8xMlVBLCBMUEZfUkVTSVNUT1JTXzhLT0hNIH0sCj4gKwl7MTE0OSwgMHgw YiwgQ1BfQ1VSUkVOVF8xMlVBLCBMUEZfUkVTSVNUT1JTXzEwXzVLT0hNIH0sCj4gKwl7MTE5OSwg MHgxYiwgQ1BfQ1VSUkVOVF8xMlVBLCBMUEZfUkVTSVNUT1JTXzEwXzVLT0hNIH0sCj4gKwl7MTI0 OSwgMHgyYiwgQ1BfQ1VSUkVOVF8xMlVBLCBMUEZfUkVTSVNUT1JTXzEwXzVLT0hNIH0sCj4gKwl7 MTI5OSwgMHgzYiwgQ1BfQ1VSUkVOVF8xMlVBLCBMUEZfUkVTSVNUT1JTXzEwXzVLT0hNIH0sCj4g Kwl7MTM0OSwgMHgwYywgQ1BfQ1VSUkVOVF8xMlVBLCBMUEZfUkVTSVNUT1JTXzEwXzVLT0hNIH0s Cj4gKwl7MTM5OSwgMHgxYywgQ1BfQ1VSUkVOVF8xMlVBLCBMUEZfUkVTSVNUT1JTXzEwXzVLT0hN IH0sCj4gKwl7MTQ0OSwgMHgyYywgQ1BfQ1VSUkVOVF8xMlVBLCBMUEZfUkVTSVNUT1JTXzEwXzVL T0hNIH0sCj4gKwl7MTUwMCwgMHgzYywgQ1BfQ1VSUkVOVF8xMlVBLCBMUEZfUkVTSVNUT1JTXzEw XzVLT0hNIH0KPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgbWF4X21icHNfdG9fcGFyYW1ldGVyKHVu c2lnbmVkIGludCBtYXhfbWJwcykKPiArewo+ICsJaW50IGk7Cj4gKwo+ICsJZm9yIChpID0gMDsg aSA8IEFSUkFZX1NJWkUoZHBwYV9tYXApOyBpKyspCj4gKwkJaWYgKGRwcGFfbWFwW2ldLm1heF9t YnBzID49IG1heF9tYnBzKQo+ICsJCQlyZXR1cm4gaTsKPiArCj4gKwlyZXR1cm4gLUVJTlZBTDsK PiArfQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkIGRzaV93cml0ZShzdHJ1Y3QgZHdfbWlwaV9k c2lfcm9ja2NoaXAgKmRzaSwgdTMyIHJlZywgdTMyIHZhbCkKPiArewo+ICsJd3JpdGVsKHZhbCwg ZHNpLT5iYXNlICsgcmVnKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB1MzIgZHNpX3JlYWQo c3RydWN0IGR3X21pcGlfZHNpX3JvY2tjaGlwICpkc2ksIHUzMiByZWcpCj4gK3sKPiArCXJldHVy biByZWFkbChkc2ktPmJhc2UgKyByZWcpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQg ZHNpX3NldChzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgKmRzaSwgdTMyIHJlZywgdTMyIG1h c2spCj4gK3sKPiArCWRzaV93cml0ZShkc2ksIHJlZywgZHNpX3JlYWQoZHNpLCByZWcpIHwgbWFz ayk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBkc2lfdXBkYXRlX2JpdHMoc3RydWN0 IGR3X21pcGlfZHNpX3JvY2tjaGlwICpkc2ksIHUzMiByZWcsCj4gKwkJCQkgICB1MzIgbWFzaywg dTMyIHZhbCkKPiArewo+ICsJZHNpX3dyaXRlKGRzaSwgcmVnLCAoZHNpX3JlYWQoZHNpLCByZWcp ICYgfm1hc2spIHwgdmFsKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfcGh5 X3dyaXRlKHN0cnVjdCBkd19taXBpX2RzaV9yb2NrY2hpcCAqZHNpLAo+ICsJCQkJICB1OCB0ZXN0 X2NvZGUsCj4gKwkJCQkgIHU4IHRlc3RfZGF0YSkKPiArewo+ICsJLyoKPiArCSAqIFdpdGggdGhl IGZhbGxpbmcgZWRnZSBvbiBURVNUQ0xLLCB0aGUgVEVTVERJTls3OjBdIHNpZ25hbCBjb250ZW50 Cj4gKwkgKiBpcyBsYXRjaGVkIGludGVybmFsbHkgYXMgdGhlIGN1cnJlbnQgdGVzdCBjb2RlLiBU ZXN0IGRhdGEgaXMKPiArCSAqIHByb2dyYW1tZWQgaW50ZXJuYWxseSBieSByaXNpbmcgZWRnZSBv biBURVNUQ0xLLgo+ICsJICovCj4gKwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1RTVF9DVFJMMCwg UEhZX1RFU1RDTEsgfCBQSFlfVU5URVNUQ0xSKTsKPiArCj4gKwlkc2lfd3JpdGUoZHNpLCBEU0lf UEhZX1RTVF9DVFJMMSwgUEhZX1RFU1RFTiB8IFBIWV9URVNURE9VVCgwKSB8Cj4gKwkJCQkJICBQ SFlfVEVTVERJTih0ZXN0X2NvZGUpKTsKPiArCj4gKwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1RT VF9DVFJMMCwgUEhZX1VOVEVTVENMSyB8IFBIWV9VTlRFU1RDTFIpOwo+ICsKPiArCWRzaV93cml0 ZShkc2ksIERTSV9QSFlfVFNUX0NUUkwxLCBQSFlfVU5URVNURU4gfCBQSFlfVEVTVERPVVQoMCkg fAo+ICsJCQkJCSAgUEhZX1RFU1RESU4odGVzdF9kYXRhKSk7Cj4gKwo+ICsJZHNpX3dyaXRlKGRz aSwgRFNJX1BIWV9UU1RfQ1RSTDAsIFBIWV9URVNUQ0xLIHwgUEhZX1VOVEVTVENMUik7Cj4gK30K PiArCj4gKy8qKgo+ICsgKiBuczJiYyAtIE5hbm9zZWNvbmRzIHRvIGJ5dGUgY2xvY2sgY3ljbGVz Cj4gKyAqLwo+ICtzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBuczJiYyhzdHJ1Y3QgZHdfbWlw aV9kc2lfcm9ja2NoaXAgKmRzaSwgaW50IG5zKQo+ICt7Cj4gKwlyZXR1cm4gRElWX1JPVU5EX1VQ KG5zICogZHNpLT5sYW5lX21icHMgLyA4LCAxMDAwKTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIG5z MnVpIC0gTmFub3NlY29uZHMgdG8gVUkgdGltZSBwZXJpb2RzCj4gKyAqLwo+ICtzdGF0aWMgaW5s aW5lIHVuc2lnbmVkIGludCBuczJ1aShzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgKmRzaSwg aW50IG5zKQo+ICt7Cj4gKwlyZXR1cm4gRElWX1JPVU5EX1VQKG5zICogZHNpLT5sYW5lX21icHMs IDEwMDApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR3X21pcGlfZHNpX3BoeV9pbml0KHZvaWQg KnByaXZfZGF0YSkKPiArewo+ICsJc3RydWN0IGR3X21pcGlfZHNpX3JvY2tjaGlwICpkc2kgPSBw cml2X2RhdGE7Cj4gKwlpbnQgcmV0LCBpLCB2Y287Cj4gKwo+ICsJdmNvID0gKGRzaS0+bGFuZV9t YnBzIDwgMjAwKSA/IDAgOiAoZHNpLT5sYW5lX21icHMgKyAxMDApIC8gMjAwOwoKUGxlYXNlIGFk ZCBhIGNsYXJpZnlpbmcgY29tbWVudCBhcyByZXF1ZXN0ZWQgYnkgU2VhbiBvbgpodHRwczovL2No cm9taXVtLXJldmlldy5nb29nbGVzb3VyY2UuY29tLyMvYy9jaHJvbWl1bW9zL3RoaXJkX3BhcnR5 L2tlcm5lbC8rLzc4MDEyMC8KCj4gKwlpID0gbWF4X21icHNfdG9fcGFyYW1ldGVyKGRzaS0+bGFu ZV9tYnBzKTsKPiArCWlmIChpIDwgMCkgewo+ICsJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsCj4g KwkJCSAgICAgICJmYWlsZWQgdG8gZ2V0IHBhcmFtZXRlciBmb3IgJWRtYnBzIGNsb2NrXG4iLAo+ ICsJCQkgICAgICBkc2ktPmxhbmVfbWJwcyk7Cj4gKwkJcmV0dXJuIGk7Cj4gKwl9Cj4gKwo+ICsJ cmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+cGh5X2NmZ19jbGspOwo+ICsJaWYgKHJldCkg ewo+ICsJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIHBoeV9jZmdf Y2xrXG4iKTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCWR3X21pcGlfZHNpX3BoeV93 cml0ZShkc2ksIFBMTF9CSUFTX0NVUl9TRUxfQ0FQX1ZDT19DT05UUk9MLAo+ICsJCQkgICAgICBC WVBBU1NfVkNPX1JBTkdFIHwKPiArCQkJICAgICAgVkNPX1JBTkdFX0NPTl9TRUwodmNvKSB8Cj4g KwkJCSAgICAgIFZDT19JTl9DQVBfQ09OX0xPVyB8Cj4gKwkJCSAgICAgIFJFRl9CSUFTX0NVUl9T RUwpOwo+ICsKPiArCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIFBMTF9DUF9DT05UUk9MX1BM TF9MT0NLX0JZUEFTUywKPiArCQkJICAgICAgQ1BfQ1VSUkVOVF9TRUwoZHBwYV9tYXBbaV0uaWNw Y3RybCkpOwo+ICsJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgUExMX0xQRl9BTkRfQ1BfQ09O VFJPTCwKPiArCQkJICAgICAgQ1BfUFJPR1JBTV9FTiB8IExQRl9QUk9HUkFNX0VOIHwKPiArCQkJ ICAgICAgTFBGX1JFU0lTVE9SU19TRUwoZHBwYV9tYXBbaV0ubHBmY3RybCkpOwo+ICsKPiArCWR3 X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIEhTX1JYX0NPTlRST0xfT0ZfTEFORV8wLAo+ICsJCQkg ICAgICBIU0ZSRVFSQU5HRV9TRUwoZHBwYV9tYXBbaV0uaHNmcmVxcmFuZ2UpKTsKPiArCj4gKwlk d19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCBQTExfSU5QVVRfRElWSURFUl9SQVRJTywKPiArCQkJ ICAgICAgSU5QVVRfRElWSURFUihkc2ktPmlucHV0X2RpdikpOwo+ICsJZHdfbWlwaV9kc2lfcGh5 X3dyaXRlKGRzaSwgUExMX0xPT1BfRElWSURFUl9SQVRJTywKPiArCQkJICAgICAgTE9PUF9ESVZf TE9XX1NFTChkc2ktPmZlZWRiYWNrX2RpdikgfAo+ICsJCQkgICAgICBMT1dfUFJPR1JBTV9FTik7 Cj4gKwkvKgo+ICsJICogV2UgbmVlZCBzZXQgUExMX0lOUFVUX0FORF9MT09QX0RJVklERVJfUkFU SU9TX0NPTlRST0wgaW1tZWRpYXRlbHkKPiArCSAqIHRvIG1ha2UgdGhlIGNvbmZpZ3VyZWQgTFNC IGVmZmVjdGl2ZSBhY2NvcmRpbmcgdG8gSVAgc2ltdWxhdGlvbgo+ICsJICogYW5kIGxhYiB0ZXN0 IHJlc3VsdHMuCj4gKwkgKiBPbmx5IGluIHRoaXMgd2F5IGNhbiB3ZSBnZXQgY29ycmVjdCBtaXBp IHBoeSBwbGwgZnJlcXVlbmN5Lgo+ICsJICovCj4gKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNp LCBQTExfSU5QVVRfQU5EX0xPT1BfRElWSURFUl9SQVRJT1NfQ09OVFJPTCwKPiArCQkJICAgICAg UExMX0xPT1BfRElWX0VOIHwgUExMX0lOUFVUX0RJVl9FTik7Cj4gKwlkd19taXBpX2RzaV9waHlf d3JpdGUoZHNpLCBQTExfTE9PUF9ESVZJREVSX1JBVElPLAo+ICsJCQkgICAgICBMT09QX0RJVl9I SUdIX1NFTChkc2ktPmZlZWRiYWNrX2RpdikgfAo+ICsJCQkgICAgICBISUdIX1BST0dSQU1fRU4p Owo+ICsJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgUExMX0lOUFVUX0FORF9MT09QX0RJVklE RVJfUkFUSU9TX0NPTlRST0wsCj4gKwkJCSAgICAgIFBMTF9MT09QX0RJVl9FTiB8IFBMTF9JTlBV VF9ESVZfRU4pOwo+ICsKPiArCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIEFGRV9CSUFTX0JB TkRHQVBfQU5BTE9HX1BST0dSQU1NQUJJTElUWSwKPiArCQkJICAgICAgTE9XX1BST0dSQU1fRU4g fCBCSUFTRVhUUl9TRUwoQklBU0VYVFJfMTI3XzcpKTsKPiArCWR3X21pcGlfZHNpX3BoeV93cml0 ZShkc2ksIEFGRV9CSUFTX0JBTkRHQVBfQU5BTE9HX1BST0dSQU1NQUJJTElUWSwKPiArCQkJICAg ICAgSElHSF9QUk9HUkFNX0VOIHwgQkFOREdBUF9TRUwoQkFOREdBUF85Nl8xMCkpOwo+ICsKPiAr CWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIEJBTkRHQVBfQU5EX0JJQVNfQ09OVFJPTCwKPiAr CQkJICAgICAgUE9XRVJfQ09OVFJPTCB8IElOVEVSTkFMX1JFR19DVVJSRU5UIHwKPiArCQkJICAg ICAgQklBU19CTE9DS19PTiB8IEJBTkRHQVBfT04pOwo+ICsKPiArCWR3X21pcGlfZHNpX3BoeV93 cml0ZShkc2ksIFRFUk1JTkFUSU9OX1JFU0lTVEVSX0NPTlRST0wsCj4gKwkJCSAgICAgIFRFUl9S RVNJU1RPUl9MT1cgfCBURVJfQ0FMX0RPTkUgfAo+ICsJCQkgICAgICBTRVRSRF9NQVggfCBURVJf UkVTSVNUT1JTX09OKTsKPiArCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIFRFUk1JTkFUSU9O X1JFU0lTVEVSX0NPTlRST0wsCj4gKwkJCSAgICAgIFRFUl9SRVNJU1RPUl9ISUdIIHwgTEVWRUxf U0hJRlRFUlNfT04gfAo+ICsJCQkgICAgICBTRVRSRF9NQVggfCBQT1dFUl9NQU5BR0UgfAo+ICsJ CQkgICAgICBURVJfUkVTSVNUT1JTX09OKTsKPiArCj4gKwlkd19taXBpX2RzaV9waHlfd3JpdGUo ZHNpLCBIU19UWF9DTE9DS19MQU5FX1JFUVVFU1RfU1RBVEVfVElNRV9DT05UUk9MLAo+ICsJCQkg ICAgICBUTFBfUFJPR1JBTV9FTiB8IG5zMmJjKGRzaSwgNTAwKSk7Cj4gKwlkd19taXBpX2RzaV9w aHlfd3JpdGUoZHNpLCBIU19UWF9DTE9DS19MQU5FX1BSRVBBUkVfU1RBVEVfVElNRV9DT05UUk9M LAo+ICsJCQkgICAgICBUSFNfUFJFX1BST0dSQU1fRU4gfCBuczJ1aShkc2ksIDQwKSk7Cj4gKwlk d19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCBIU19UWF9DTE9DS19MQU5FX0hTX1pFUk9fU1RBVEVf VElNRV9DT05UUk9MLAo+ICsJCQkgICAgICBUSFNfWkVST19QUk9HUkFNX0VOIHwgbnMyYmMoZHNp LCAzMDApKTsKPiArCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIEhTX1RYX0NMT0NLX0xBTkVf VFJBSUxfU1RBVEVfVElNRV9DT05UUk9MLAo+ICsJCQkgICAgICBUSFNfUFJFX1BST0dSQU1fRU4g fCBuczJ1aShkc2ksIDEwMCkpOwo+ICsJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgSFNfVFhf Q0xPQ0tfTEFORV9FWElUX1NUQVRFX1RJTUVfQ09OVFJPTCwKPiArCQkJICAgICAgQklUKDUpIHwg bnMyYmMoZHNpLCAxMDApKTsKPiArCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIEhTX1RYX0NM T0NLX0xBTkVfUE9TVF9USU1FX0NPTlRST0wsCj4gKwkJCSAgICAgIEJJVCg1KSB8IChuczJiYyhk c2ksIDYwKSArIDcpKTsKPiArCj4gKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCBIU19UWF9E QVRBX0xBTkVfUkVRVUVTVF9TVEFURV9USU1FX0NPTlRST0wsCj4gKwkJCSAgICAgIFRMUF9QUk9H UkFNX0VOIHwgbnMyYmMoZHNpLCA1MDApKTsKPiArCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ks IEhTX1RYX0RBVEFfTEFORV9QUkVQQVJFX1NUQVRFX1RJTUVfQ09OVFJPTCwKPiArCQkJICAgICAg VEhTX1BSRV9QUk9HUkFNX0VOIHwgKG5zMnVpKGRzaSwgNTApICsgMjApKTsKPiArCWR3X21pcGlf ZHNpX3BoeV93cml0ZShkc2ksIEhTX1RYX0RBVEFfTEFORV9IU19aRVJPX1NUQVRFX1RJTUVfQ09O VFJPTCwKPiArCQkJICAgICAgVEhTX1pFUk9fUFJPR1JBTV9FTiB8IChuczJiYyhkc2ksIDE0MCkg KyAyKSk7Cj4gKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCBIU19UWF9EQVRBX0xBTkVfVFJB SUxfU1RBVEVfVElNRV9DT05UUk9MLAo+ICsJCQkgICAgICBUSFNfUFJFX1BST0dSQU1fRU4gfCAo bnMydWkoZHNpLCA2MCkgKyA4KSk7Cj4gKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCBIU19U WF9EQVRBX0xBTkVfRVhJVF9TVEFURV9USU1FX0NPTlRST0wsCj4gKwkJCSAgICAgIEJJVCg1KSB8 IG5zMmJjKGRzaSwgMTAwKSk7Cj4gKwo+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+cGh5 X2NmZ19jbGspOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQKPiAr ZHdfbWlwaV9kc2lfZ2V0X2xhbmVfbWJwcyh2b2lkICpwcml2X2RhdGEsIHN0cnVjdCBkcm1fZGlz cGxheV9tb2RlICptb2RlLAo+ICsJCQkgIHVuc2lnbmVkIGxvbmcgbW9kZV9mbGFncywgdTMyIGxh bmVzLCB1MzIgZm9ybWF0LAo+ICsJCQkgIHVuc2lnbmVkIGludCAqbGFuZV9tYnBzKQo+ICt7Cj4g KwlzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgKmRzaSA9IHByaXZfZGF0YTsKPiArCWludCBi cHA7Cj4gKwl1bnNpZ25lZCBsb25nIG1wY2xrLCB0bXA7Cj4gKwl1bnNpZ25lZCBpbnQgdGFyZ2V0 X21icHMgPSAxMDAwOwo+ICsJdW5zaWduZWQgaW50IG1heF9tYnBzID0gZHBwYV9tYXBbQVJSQVlf U0laRShkcHBhX21hcCkgLSAxXS5tYXhfbWJwczsKPiArCXVuc2lnbmVkIGxvbmcgYmVzdF9mcmVx ID0gMDsKPiArCXVuc2lnbmVkIGxvbmcgZnZjb19taW4sIGZ2Y29fbWF4LCBmaW4sIGZvdXQ7Cj4g Kwl1bnNpZ25lZCBpbnQgbWluX3ByZWRpdiwgbWF4X3ByZWRpdjsKPiArCXVuc2lnbmVkIGludCBf cHJlZGl2LCB1bmluaXRpYWxpemVkX3ZhcihiZXN0X3ByZWRpdik7Cj4gKwl1bnNpZ25lZCBsb25n IF9mYmRpdiwgdW5pbml0aWFsaXplZF92YXIoYmVzdF9mYmRpdik7Cj4gKwl1bnNpZ25lZCBsb25n IG1pbl9kZWx0YSA9IFVMT05HX01BWDsKPiArCj4gKwlkc2ktPmZvcm1hdCA9IGZvcm1hdDsKPiAr CWJwcCA9IG1pcGlfZHNpX3BpeGVsX2Zvcm1hdF90b19icHAoZHNpLT5mb3JtYXQpOwo+ICsJaWYg KGJwcCA8IDApIHsKPiArCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LAo+ICsJCQkgICAgICAiZmFp bGVkIHRvIGdldCBicHAgZm9yIHBpeGVsIGZvcm1hdCAlZFxuIiwKPiArCQkJICAgICAgZHNpLT5m b3JtYXQpOwo+ICsJCXJldHVybiBicHA7Cj4gKwl9Cj4gKwo+ICsJbXBjbGsgPSBESVZfUk9VTkRf VVAobW9kZS0+Y2xvY2ssIE1TRUNfUEVSX1NFQyk7Cj4gKwlpZiAobXBjbGspIHsKPiArCQkvKiB0 YWtlIDEgLyAwLjgsIHNpbmNlIG1icHMgbXVzdCBiaWcgdGhhbiBiYW5kd2lkdGggb2YgUkdCICov Cj4gKwkJdG1wID0gbXBjbGsgKiAoYnBwIC8gbGFuZXMpICogMTAgLyA4Owo+ICsJCWlmICh0bXAg PCBtYXhfbWJwcykKPiArCQkJdGFyZ2V0X21icHMgPSB0bXA7Cj4gKwkJZWxzZQo+ICsJCQlEUk1f REVWX0VSUk9SKGRzaS0+ZGV2LAo+ICsJCQkJICAgICAgIkRQSFkgY2xvY2sgZnJlcXVlbmN5IGlz IG91dCBvZiByYW5nZVxuIik7Cj4gKwl9Cj4gKwo+ICsJZmluID0gY2xrX2dldF9yYXRlKGRzaS0+ cGxscmVmX2Nsayk7Cj4gKwlmb3V0ID0gdGFyZ2V0X21icHMgKiBVU0VDX1BFUl9TRUM7Cj4gKwo+ ICsJLyogY29uc3RyYWludDogNU1oeiA8PSBGcmVmIC8gTiA8PSA0ME1IeiAqLwo+ICsJbWluX3By ZWRpdiA9IERJVl9ST1VORF9VUChmaW4sIDQwICogVVNFQ19QRVJfU0VDKTsKPiArCW1heF9wcmVk aXYgPSBmaW4gLyAoNSAqIFVTRUNfUEVSX1NFQyk7Cj4gKwo+ICsJLyogY29uc3RyYWludDogODBN SHogPD0gRnZjbyA8PSAxNTAwTWh6ICovCj4gKwlmdmNvX21pbiA9IDgwICogVVNFQ19QRVJfU0VD Owo+ICsJZnZjb19tYXggPSAxNTAwICogVVNFQ19QRVJfU0VDOwo+ICsKPiArCWZvciAoX3ByZWRp diA9IG1pbl9wcmVkaXY7IF9wcmVkaXYgPD0gbWF4X3ByZWRpdjsgX3ByZWRpdisrKSB7Cj4gKwkJ dTY0IHRtcDsKPiArCQl1MzIgZGVsdGE7Cj4gKwkJLyogRnZjbyA9IEZyZWYgKiBNIC8gTiAqLwo+ ICsJCXRtcCA9ICh1NjQpZm91dCAqIF9wcmVkaXY7Cj4gKwkJZG9fZGl2KHRtcCwgZmluKTsKPiAr CQlfZmJkaXYgPSB0bXA7Cj4gKwkJLyoKPiArCQkgKiBEdWUgdG8gdGhlIHVzZSBvZiBhICJieSAy IHByZS1zY2FsZXIsIiB0aGUgcmFuZ2Ugb2YgdGhlCj4gKwkJICogZmVlZGJhY2sgbXVsdGlwbGlj YXRpb24gdmFsdWUgTSBpcyBsaW1pdGVkIHRvIGV2ZW4gZGl2aXNpb24KPiArCQkgKiBudW1iZXJz LCBhbmQgbSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiA2LCBsZXNzIHRoYW4gNTEyLgo+ICsJCSAqLwoK SXQgc2VlbXMgdGhpcyBzaG91bGQgYmUgIm5vdCBiaWdnZXIgdGhhbiA1MTIiIG9yIHNvbWV0aGlu ZyBzaW1pbGFyLgoKPiArCQlpZiAoX2ZiZGl2IDwgNiB8fCBfZmJkaXYgPiA1MTIpCj4gKwkJCWNv bnRpbnVlOwo+ICsKPiArCQlfZmJkaXYgKz0gX2ZiZGl2ICUgMjsKPiArCj4gKwkJdG1wID0gKHU2 NClfZmJkaXYgKiBmaW47Cj4gKwkJZG9fZGl2KHRtcCwgX3ByZWRpdik7CgpTaG91bGQgd2UgYmFp bCBvdXQgZWFybHkgaWYgbWluX3ByZWRpdiA9PSAwIGR1ZSB0byBzb21lIGJvZ3VzCmNvbmZpZ3Vy YXRpb24gb2YgcGxscmVmX2Nsaz8KCj4gKwkJaWYgKHRtcCA8IGZ2Y29fbWluIHx8IHRtcCA+IGZ2 Y29fbWF4KQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJZGVsdGEgPSBhYnMoZm91dCAtIHRtcCk7 Cj4gKwkJaWYgKGRlbHRhIDwgbWluX2RlbHRhKSB7Cj4gKwkJCWJlc3RfcHJlZGl2ID0gX3ByZWRp djsKPiArCQkJYmVzdF9mYmRpdiA9IF9mYmRpdjsKPiArCQkJbWluX2RlbHRhID0gZGVsdGE7Cj4g KwkJCWJlc3RfZnJlcSA9IHRtcDsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJaWYgKGJlc3RfZnJlcSkg ewo+ICsJCWRzaS0+bGFuZV9tYnBzID0gRElWX1JPVU5EX1VQKGJlc3RfZnJlcSwgVVNFQ19QRVJf U0VDKTsKPiArCQkqbGFuZV9tYnBzID0gZHNpLT5sYW5lX21icHM7Cj4gKwkJZHNpLT5pbnB1dF9k aXYgPSBiZXN0X3ByZWRpdjsKPiArCQlkc2ktPmZlZWRiYWNrX2RpdiA9IGJlc3RfZmJkaXY7Cj4g Kwl9IGVsc2Ugewo+ICsJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJDYW4gbm90IGZpbmQgYmVz dF9mcmVxIGZvciBEUEhZXG4iKTsKCnJldHVybiAtMTsKCj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7 Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHdfbWlwaV9kc2lfcGh5X29wcyBkd19t aXBpX2RzaV9yb2NrY2hpcF9waHlfb3BzID0gewo+ICsJLmluaXQgPSBkd19taXBpX2RzaV9waHlf aW5pdCwKPiArCS5nZXRfbGFuZV9tYnBzID0gZHdfbWlwaV9kc2lfZ2V0X2xhbmVfbWJwcywKPiAr fTsKPiArCj4gK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2VuY29kZXJfbW9kZV9zZXQoc3RydWN0 IGRybV9lbmNvZGVyICplbmNvZGVyLAo+ICsJCQkJCSBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZSwKPiArCQkJCQkgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkKQo+ICt7Cj4g KwlzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgKmRzaSA9IHRvX2RzaShlbmNvZGVyKTsKPiAr CWNvbnN0IHN0cnVjdCByb2NrY2hpcF9kd19kc2lfY2hpcF9kYXRhICpjZGF0YSA9IGRzaS0+Y2Rh dGE7Cj4gKwlpbnQgdmFsLCByZXQsIG11eDsKPiArCj4gKwltdXggPSBkcm1fb2ZfZW5jb2Rlcl9h Y3RpdmVfZW5kcG9pbnRfaWQoZHNpLT5kZXYtPm9mX25vZGUsCj4gKwkJCQkJCSZkc2ktPmVuY29k ZXIpOwo+ICsJaWYgKG11eCA8IDApCj4gKwkJcmV0dXJuOwo+ICsJLyoKPiArCSAqIEZvciB0aGUg UkszMzk5LCB0aGUgY2xrIG9mIGdyZiBtdXN0IGJlIGVuYWJsZWQgYmVmb3JlIHdyaXRpbmcgZ3Jm Cj4gKwkgKiByZWdpc3Rlci4gQW5kIGZvciBSSzMyODggb3Igb3RoZXIgc29jLCB0aGlzIGdyZl9j bGsgbXVzdCBiZSBOVUxMLAo+ICsJICogdGhlIGNsa19wcmVwYXJlX2VuYWJsZSByZXR1cm4gdHJ1 ZSBkaXJlY3RseS4KPiArCSAqLwo+ICsJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+Z3Jm X2Nsayk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxl ZCB0byBlbmFibGUgZ3JmX2NsazogJWRcbiIsIHJldCk7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsK PiArCXZhbCA9IGNkYXRhLT5kc2kwX2VuX2JpdCA8PCAxNjsKPiArCWlmIChtdXgpCj4gKwkJdmFs IHw9IGNkYXRhLT5kc2kwX2VuX2JpdDsKPiArCXJlZ21hcF93cml0ZShkc2ktPmdyZl9yZWdtYXAs IGNkYXRhLT5ncmZfc3dpdGNoX3JlZywgdmFsKTsKPiArCj4gKwlpZiAoY2RhdGEtPmdyZl9kc2kw X21vZGVfcmVnKQo+ICsJCXJlZ21hcF93cml0ZShkc2ktPmdyZl9yZWdtYXAsIGNkYXRhLT5ncmZf ZHNpMF9tb2RlX3JlZywKPiArCQkJICAgICBjZGF0YS0+Z3JmX2RzaTBfbW9kZSk7Cj4gKwo+ICsJ Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+Z3JmX2Nsayk7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQKPiArZHdfbWlwaV9kc2lfZW5jb2Rlcl9hdG9taWNfY2hlY2soc3RydWN0IGRybV9lbmNvZGVy ICplbmNvZGVyLAo+ICsJCQkJIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiAr CQkJCSBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSkKPiArewo+ICsJc3Ry dWN0IHJvY2tjaGlwX2NydGNfc3RhdGUgKnMgPSB0b19yb2NrY2hpcF9jcnRjX3N0YXRlKGNydGNf c3RhdGUpOwo+ICsJc3RydWN0IGR3X21pcGlfZHNpX3JvY2tjaGlwICpkc2kgPSB0b19kc2koZW5j b2Rlcik7Cj4gKwo+ICsJc3dpdGNoIChkc2ktPmZvcm1hdCkgewo+ICsJY2FzZSBNSVBJX0RTSV9G TVRfUkdCODg4Ogo+ICsJCXMtPm91dHB1dF9tb2RlID0gUk9DS0NISVBfT1VUX01PREVfUDg4ODsK PiArCQlicmVhazsKPiArCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2NjoKPiArCQlzLT5vdXRwdXRf bW9kZSA9IFJPQ0tDSElQX09VVF9NT0RFX1A2NjY7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIE1JUElf RFNJX0ZNVF9SR0I1NjU6Cj4gKwkJcy0+b3V0cHV0X21vZGUgPSBST0NLQ0hJUF9PVVRfTU9ERV9Q NTY1Owo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQlXQVJOX09OKDEpOwo+ICsJCXJldHVy biAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCXMtPm91dHB1dF90eXBlID0gRFJNX01PREVfQ09OTkVD VE9SX0RTSTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVj dCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MKPiArZHdfbWlwaV9kc2lfZW5jb2Rlcl9oZWxwZXJf ZnVuY3MgPSB7Cj4gKwkubW9kZV9zZXQgPSBkd19taXBpX2RzaV9lbmNvZGVyX21vZGVfc2V0LAo+ ICsJLmF0b21pY19jaGVjayA9IGR3X21pcGlfZHNpX2VuY29kZXJfYXRvbWljX2NoZWNrLAo+ICt9 Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyBkd19taXBpX2Rz aV9lbmNvZGVyX2Z1bmNzID0gewo+ICsJLmRlc3Ryb3kgPSBkcm1fZW5jb2Rlcl9jbGVhbnVwLAo+ ICt9Owo+ICsKPiArc3RhdGljIGludCByb2NrY2hpcF9kc2lfZHJtX2NyZWF0ZV9lbmNvZGVyKHN0 cnVjdCBkd19taXBpX2RzaV9yb2NrY2hpcCAqZHNpLAo+ICsJCQkJCSAgIHN0cnVjdCBkcm1fZGV2 aWNlICpkcm1fZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSAmZHNp LT5lbmNvZGVyOwo+ICsJaW50IHJldDsKPiArCj4gKwllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9 IGRybV9vZl9maW5kX3Bvc3NpYmxlX2NydGNzKGRybV9kZXYsCj4gKwkJCQkJCQkgICAgIGRzaS0+ ZGV2LT5vZl9ub2RlKTsKPiArCj4gKwlyZXQgPSBkcm1fZW5jb2Rlcl9pbml0KGRybV9kZXYsIGVu Y29kZXIsICZkd19taXBpX2RzaV9lbmNvZGVyX2Z1bmNzLAo+ICsJCQkgICAgICAgRFJNX01PREVf RU5DT0RFUl9EU0ksIE5VTEwpOwo+ICsJaWYgKHJldCkgewo+ICsJCURSTV9FUlJPUigiRmFpbGVk IHRvIGluaXRpYWxpemUgZW5jb2RlciB3aXRoIGRybVxuIik7Cj4gKwkJcmV0dXJuIHJldDsKPiAr CX0KPiArCj4gKwlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKGVuY29kZXIsICZkd19taXBpX2RzaV9l bmNvZGVyX2hlbHBlcl9mdW5jcyk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgZHdfbWlwaV9kc2lfcm9ja2NoaXBfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gKwkJ CQkgICAgIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKPiArCQkJCSAgICAgdm9pZCAqZGF0YSkKPiAr ewo+ICsJc3RydWN0IGR3X21pcGlfZHNpX3JvY2tjaGlwICpkc2kgPSBkZXZfZ2V0X2RydmRhdGEo ZGV2KTsKPiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZp Y2UoZGV2KTsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gZGF0YTsKPiArCWludCBy ZXQ7Cj4gKwo+ICsJZHNpLT5wZGF0YS5iYXNlID0gZHNpLT5iYXNlOwo+ICsJZHNpLT5wZGF0YS5t YXhfZGF0YV9sYW5lcyA9IGRzaS0+Y2RhdGEtPm1heF9kYXRhX2xhbmVzOwo+ICsJZHNpLT5wZGF0 YS5waHlfb3BzID0gJmR3X21pcGlfZHNpX3JvY2tjaGlwX3BoeV9vcHM7Cj4gKwlkc2ktPnBkYXRh LnByaXZfZGF0YSA9IGRzaTsKPiArCj4gKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5w bGxyZWZfY2xrKTsKPiArCWlmIChyZXQpIHsKPiArCQlEUk1fREVWX0VSUk9SKGRldiwKPiArCQkJ ICAgICAgIiVzOiBGYWlsZWQgdG8gZW5hYmxlIHBsbHJlZl9jbGtcbiIsIF9fZnVuY19fKTsKPiAr CQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldCA9IHJvY2tjaGlwX2RzaV9kcm1fY3JlYXRl X2VuY29kZXIoZHNpLCBkcm1fZGV2KTsKPiArCWlmIChyZXQpIHsKPiArCQlEUk1fRVJST1IoIkZh aWxlZCB0byBjcmVhdGUgZHJtIGVuY29kZXJcbiIpOwo+ICsJCWdvdG8gZXJyX3BsbHJlZjsKPiAr CX0KPiArCj4gKwlkc2ktPmRtZCA9IGR3X21pcGlfZHNpX2JpbmQocGRldiwgJmRzaS0+ZW5jb2Rl ciwgJmRzaS0+cGRhdGEpOwo+ICsJaWYgKElTX0VSUihkc2ktPmRtZCkpIHsKPiArCQlEUk1fRVJS T1IoIkZhaWxlZCB0byBiaW5kXG4iKTsKPiArCQlyZXQgPSBQVFJfRVJSKGRzaS0+ZG1kKTsKPiAr CQlnb3RvIGVycl9wbGxyZWY7Cj4gKwl9Cj4gKwlyZXR1cm4gMDsKPiArCj4gK2Vycl9wbGxyZWY6 Cj4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5wbGxyZWZfY2xrKTsKPiArCXJldHVybiBy ZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX3JvY2tjaGlwX3VuYmluZChz dHJ1Y3QgZGV2aWNlICpkZXYsCj4gKwkJCQkJc3RydWN0IGRldmljZSAqbWFzdGVyLAo+ICsJCQkJ CXZvaWQgKmRhdGEpCj4gK3sKPiArCXN0cnVjdCBkd19taXBpX2RzaV9yb2NrY2hpcCAqZHNpID0g ZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gKwo+ICsJZHdfbWlwaV9kc2lfdW5iaW5kKGRzaS0+ZG1k KTsKPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPnBsbHJlZl9jbGspOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9vcHMgZHdfbWlwaV9kc2lfcm9ja2NoaXBf b3BzID0gewo+ICsJLmJpbmQJPSBkd19taXBpX2RzaV9yb2NrY2hpcF9iaW5kLAo+ICsJLnVuYmlu ZAk9IGR3X21pcGlfZHNpX3JvY2tjaGlwX3VuYmluZCwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQg ZHdfbWlwaV9kc2lfcm9ja2NoaXBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikK PiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKPiArCXN0cnVjdCBkZXZp Y2Vfbm9kZSAqbnAgPSBkZXYtPm9mX25vZGU7Cj4gKwlzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2No aXAgKmRzaTsKPiArCXN0cnVjdCByZXNvdXJjZSAqcmVzOwo+ICsJY29uc3Qgc3RydWN0IHJvY2tj aGlwX2R3X2RzaV9jaGlwX2RhdGEgKmNkYXRhID0KPiArCQkJCW9mX2RldmljZV9nZXRfbWF0Y2hf ZGF0YShkZXYpOwo+ICsJaW50IHJldDsKPiArCj4gKwlkc2kgPSBkZXZtX2t6YWxsb2MoZGV2LCBz aXplb2YoKmRzaSksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFkc2kpCj4gKwkJcmV0dXJuIC1FTk9N RU07Cj4gKwo+ICsJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0Vf TUVNLCAwKTsKPiArCWlmICghcmVzKSB7Cj4gKwkJRFJNX0VSUk9SKCJVbmFibGUgdG8gZ2V0IHJl c291cmNlXG4iKTsKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCX0KPiArCj4gKwlkc2ktPmJhc2Ug PSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOwo+ICsJaWYgKElTX0VSUihkc2ktPmJh c2UpKSB7Cj4gKwkJRFJNX0VSUk9SKCJVbmFibGUgdG8gZ2V0IGRzaSByZWdpc3RlcnNcbiIpOwo+ ICsJCXJldHVybiBQVFJfRVJSKGRzaS0+YmFzZSk7Cj4gKwl9Cj4gKwo+ICsJZHNpLT5wbGxyZWZf Y2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInJlZiIpOwo+ICsJaWYgKElTX0VSUihkc2ktPnBsbHJl Zl9jbGspKSB7Cj4gKwkJcmV0ID0gUFRSX0VSUihkc2ktPnBsbHJlZl9jbGspOwo+ICsJCURSTV9E RVZfRVJST1IoZGV2LAo+ICsJCQkgICAgICAiVW5hYmxlIHRvIGdldCBwbGwgcmVmZXJlbmNlIGNs b2NrOiAlZFxuIiwgcmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCWlmIChjZGF0 YS0+ZmxhZ3MgJiBEV19NSVBJX05FRURTX1BIWV9DRkdfQ0xLKSB7Cj4gKwkJZHNpLT5waHlfY2Zn X2NsayA9IGRldm1fY2xrX2dldChkZXYsICJwaHlfY2ZnIik7Cj4gKwkJaWYgKElTX0VSUihkc2kt PnBoeV9jZmdfY2xrKSkgewo+ICsJCQlyZXQgPSBQVFJfRVJSKGRzaS0+cGh5X2NmZ19jbGspOwo+ ICsJCQlEUk1fREVWX0VSUk9SKGRldiwKPiArCQkJCSAgICAgICJVbmFibGUgdG8gZ2V0IHBoeV9j ZmdfY2xrOiAlZFxuIiwgcmV0KTsKPiArCQkJcmV0dXJuIHJldDsKPiArCQl9Cj4gKwl9Cj4gKwo+ ICsJaWYgKGNkYXRhLT5mbGFncyAmIERXX01JUElfTkVFRFNfR1JGX0NMSykgewo+ICsJCWRzaS0+ Z3JmX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJncmYiKTsKPiArCQlpZiAoSVNfRVJSKGRzaS0+ Z3JmX2NsaykpIHsKPiArCQkJcmV0ID0gUFRSX0VSUihkc2ktPmdyZl9jbGspOwo+ICsJCQlEUk1f REVWX0VSUk9SKGRldiwgIlVuYWJsZSB0byBnZXQgZ3JmX2NsazogJWRcbiIsIHJldCk7Cj4gKwkJ CXJldHVybiByZXQ7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWRzaS0+Z3JmX3JlZ21hcCA9IHN5c2Nv bl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUobnAsICJyb2NrY2hpcCxncmYiKTsKPiArCWlmIChJ U19FUlIoZHNpLT5ncmZfcmVnbWFwKSkgewo+ICsJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJV bmFibGUgdG8gZ2V0IHJvY2tjaGlwLGdyZlxuIik7Cj4gKwkJcmV0dXJuIFBUUl9FUlIoZHNpLT5n cmZfcmVnbWFwKTsKPiArCX0KPiArCj4gKwlkc2ktPmNkYXRhID0gY2RhdGE7Cj4gKwlkc2ktPmRl diA9IGRldjsKPiArCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGRzaSk7Cj4gKwo+ICsJcmV0dXJuIGNv bXBvbmVudF9hZGQoJnBkZXYtPmRldiwgJmR3X21pcGlfZHNpX3JvY2tjaGlwX29wcyk7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lfcm9ja2NoaXBfcmVtb3ZlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCWNvbXBvbmVudF9kZWwoJnBkZXYtPmRldiwgJmR3 X21pcGlfZHNpX3JvY2tjaGlwX29wcyk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0 YXRpYyBzdHJ1Y3Qgcm9ja2NoaXBfZHdfZHNpX2NoaXBfZGF0YSByazMyODhfY2hpcF9kYXRhID0g ewo+ICsJLmRzaTBfZW5fYml0ID0gUkszMjg4X0RTSTBfU0VMX1ZPUF9MSVQsCj4gKwkuZHNpMV9l bl9iaXQgPSBSSzMyODhfRFNJMV9TRUxfVk9QX0xJVCwKPiArCS5ncmZfc3dpdGNoX3JlZyA9IFJL MzI4OF9HUkZfU09DX0NPTjYsCj4gKwkubWF4X2RhdGFfbGFuZXMgPSA0LAo+ICt9Owo+ICsKPiAr c3RhdGljIHN0cnVjdCByb2NrY2hpcF9kd19kc2lfY2hpcF9kYXRhIHJrMzM5OV9jaGlwX2RhdGEg PSB7Cj4gKwkuZHNpMF9lbl9iaXQgPSBSSzMzOTlfRFNJMF9TRUxfVk9QX0xJVCwKPiArCS5kc2kx X2VuX2JpdCA9IFJLMzM5OV9EU0kxX1NFTF9WT1BfTElULAo+ICsJLmdyZl9zd2l0Y2hfcmVnID0g UkszMzk5X0dSRl9TT0NfQ09OMjAsCj4gKwkuZ3JmX2RzaTBfbW9kZSA9IFJLMzM5OV9HUkZfRFNJ X01PREUsCj4gKwkuZ3JmX2RzaTBfbW9kZV9yZWcgPSBSSzMzOTlfR1JGX1NPQ19DT04yMiwKPiAr CS5mbGFncyA9IERXX01JUElfTkVFRFNfUEhZX0NGR19DTEsgfCBEV19NSVBJX05FRURTX0dSRl9D TEssCj4gKwkubWF4X2RhdGFfbGFuZXMgPSA0LAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBvZl9kZXZpY2VfaWQgZHdfbWlwaV9kc2lfcm9ja2NoaXBfZHRfaWRzW10gPSB7Cj4gKwl7 Cj4gKwkgLmNvbXBhdGlibGUgPSAicm9ja2NoaXAscmszMjg4LW1pcGktZHNpIiwKPiArCSAuZGF0 YSA9ICZyazMyODhfY2hpcF9kYXRhLAo+ICsJfSwgewo+ICsJIC5jb21wYXRpYmxlID0gInJvY2tj aGlwLHJrMzM5OS1taXBpLWRzaSIsCj4gKwkgLmRhdGEgPSAmcmszMzk5X2NoaXBfZGF0YSwKPiAr CX0sCj4gKwl7IC8qIHNlbnRpbmVsICovIH0KPiArfTsKPiArTU9EVUxFX0RFVklDRV9UQUJMRShv ZiwgZHdfbWlwaV9kc2lfcm9ja2NoaXBfZHRfaWRzKTsKPiArCj4gK3N0cnVjdCBwbGF0Zm9ybV9k cml2ZXIgZHdfbWlwaV9kc2lfcm9ja2NoaXBfZHJpdmVyID0gewo+ICsJLnByb2JlCQk9IGR3X21p cGlfZHNpX3JvY2tjaGlwX3Byb2JlLAo+ICsJLnJlbW92ZQkJPSBkd19taXBpX2RzaV9yb2NrY2hp cF9yZW1vdmUsCj4gKwkuZHJpdmVyCQk9IHsKPiArCQkub2ZfbWF0Y2hfdGFibGUgPSBkd19taXBp X2RzaV9yb2NrY2hpcF9kdF9pZHMsCj4gKwkJLm5hbWUJPSAiZHctbWlwaS1kc2ktcm9ja2NoaXAi LAo+ICsJfSwKPiArfTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3Jv Y2tjaGlwX2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1f ZHJ2LmMKPiBpbmRleCA3NmQ2M2RlLi5kNDBjYzM5IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZHJ2LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v cm9ja2NoaXAvcm9ja2NoaXBfZHJtX2Rydi5jCj4gQEAgLTQ2Miw3ICs0NjIsNyBAQCBzdGF0aWMg aW50IF9faW5pdCByb2NrY2hpcF9kcm1faW5pdCh2b2lkKQo+ICAJQUREX1JPQ0tDSElQX1NVQl9E UklWRVIoY2RuX2RwX2RyaXZlciwgQ09ORklHX1JPQ0tDSElQX0NETl9EUCk7Cj4gIAlBRERfUk9D S0NISVBfU1VCX0RSSVZFUihkd19oZG1pX3JvY2tjaGlwX3BsdGZtX2RyaXZlciwKPiAgCQkJCUNP TkZJR19ST0NLQ0hJUF9EV19IRE1JKTsKPiAtCUFERF9ST0NLQ0hJUF9TVUJfRFJJVkVSKGR3X21p cGlfZHNpX2RyaXZlciwKPiArCUFERF9ST0NLQ0hJUF9TVUJfRFJJVkVSKGR3X21pcGlfZHNpX3Jv Y2tjaGlwX2RyaXZlciwKPiAgCQkJCUNPTkZJR19ST0NLQ0hJUF9EV19NSVBJX0RTSSk7Cj4gIAlB RERfUk9DS0NISVBfU1VCX0RSSVZFUihpbm5vX2hkbWlfZHJpdmVyLCBDT05GSUdfUk9DS0NISVBf SU5OT19IRE1JKTsKPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9y b2NrY2hpcF9kcm1fZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJt X2Rydi5oCj4gaW5kZXggNDk4ZGZiYy4uYWYyMzViMiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2Rydi5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L3JvY2tjaGlwL3JvY2tjaGlwX2RybV9kcnYuaAo+IEBAIC02Niw3ICs2Niw3IEBAIHZvaWQgcm9j a2NoaXBfZHJtX2RtYV9kZXRhY2hfZGV2aWNlKHN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2LAo+ ICAKPiAgZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgY2RuX2RwX2RyaXZlcjsKPiAgZXh0 ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZHdfaGRtaV9yb2NrY2hpcF9wbHRmbV9kcml2ZXI7 Cj4gLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGR3X21pcGlfZHNpX2RyaXZlcjsKPiAr ZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZHdfbWlwaV9kc2lfcm9ja2NoaXBfZHJpdmVy Owo+ICBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpbm5vX2hkbWlfZHJpdmVyOwo+ICBl eHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciByb2NrY2hpcF9kcF9kcml2ZXI7Cj4gIGV4dGVy biBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHJvY2tjaGlwX2x2ZHNfZHJpdmVyOwpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBs aXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754339AbdK1Usu (ORCPT ); Tue, 28 Nov 2017 15:48:50 -0500 Received: from mail-io0-f195.google.com ([209.85.223.195]:42531 "EHLO mail-io0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752463AbdK1Usq (ORCPT ); Tue, 28 Nov 2017 15:48:46 -0500 X-Google-Smtp-Source: AGs4zMbju4jZXxK6DtW2JGilAuhax0vqmwIuiWWzJ+ZBoZCRfLyCpJunxIv05ATn6gSYYPj/NH/KUw== Date: Tue, 28 Nov 2017 12:48:43 -0800 From: Matthias Kaehlcke To: Nickey Yang Cc: robh+dt@kernel.org, heiko@sntech.de, mark.rutland@arm.com, airlied@linux.ie, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, seanpaul@chromium.org, briannorris@chromium.org, hoegsberg@gmail.com, architt@codeaurora.org, philippe.cornu@st.com, yannick.fertre@st.com, hl@rock-chips.com, zyw@rock-chips.com, xbl@rock-chips.com Subject: Re: [PATCH v3 4/5] drm/rockchip: Add ROCKCHIP DW MIPI DSI controller driver Message-ID: <20171128204843.GB58379@google.com> References: <1511868006-27130-1-git-send-email-nickey.yang@rock-chips.com> <1511868006-27130-5-git-send-email-nickey.yang@rock-chips.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <1511868006-27130-5-git-send-email-nickey.yang@rock-chips.com> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org El Tue, Nov 28, 2017 at 07:20:05PM +0800 Nickey Yang ha dit: > Add the ROCKCHIP DSI controller driver that uses the Synopsys DesignWare > MIPI DSI host controller bridge. > > v2: > add err_pllref, remove unnecessary encoder.enable & disable > correct spelling mistakes > v3: > call dw_mipi_dsi_unbind() in dw_mipi_dsi_rockchip_unbind() > fix typo, use of_device_get_match_data(), > change some ‘bind()’ logic into 'probe()' > add 'dev_set_drvdata()' > > Signed-off-by: Nickey Yang > --- > drivers/gpu/drm/rockchip/Kconfig | 2 +- > drivers/gpu/drm/rockchip/Makefile | 2 +- > drivers/gpu/drm/rockchip/dw-mipi-dsi.c | 1349 ----------------------- > drivers/gpu/drm/rockchip/dw-mipi-dsi_rockchip.c | 764 +++++++++++++ > drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 2 +- > drivers/gpu/drm/rockchip/rockchip_drm_drv.h | 2 +- > 6 files changed, 768 insertions(+), 1353 deletions(-) > delete mode 100644 drivers/gpu/drm/rockchip/dw-mipi-dsi.c > create mode 100644 drivers/gpu/drm/rockchip/dw-mipi-dsi_rockchip.c > > diff --git a/drivers/gpu/drm/rockchip/Kconfig b/drivers/gpu/drm/rockchip/Kconfig > index 0ccc762..9eb4795 100644 > --- a/drivers/gpu/drm/rockchip/Kconfig > +++ b/drivers/gpu/drm/rockchip/Kconfig > @@ -7,7 +7,7 @@ config DRM_ROCKCHIP > select VIDEOMODE_HELPERS > select DRM_ANALOGIX_DP if ROCKCHIP_ANALOGIX_DP > select DRM_DW_HDMI if ROCKCHIP_DW_HDMI > - select DRM_MIPI_DSI if ROCKCHIP_DW_MIPI_DSI > + select DRM_DW_MIPI_DSI if ROCKCHIP_DW_MIPI_DSI > select SND_SOC_HDMI_CODEC if ROCKCHIP_CDN_DP && SND_SOC > help > Choose this option if you have a Rockchip soc chipset. > diff --git a/drivers/gpu/drm/rockchip/Makefile b/drivers/gpu/drm/rockchip/Makefile > index a314e21..c05fe47 100644 > --- a/drivers/gpu/drm/rockchip/Makefile > +++ b/drivers/gpu/drm/rockchip/Makefile > @@ -11,7 +11,7 @@ rockchipdrm-$(CONFIG_DRM_FBDEV_EMULATION) += rockchip_drm_fbdev.o > rockchipdrm-$(CONFIG_ROCKCHIP_ANALOGIX_DP) += analogix_dp-rockchip.o > rockchipdrm-$(CONFIG_ROCKCHIP_CDN_DP) += cdn-dp-core.o cdn-dp-reg.o > rockchipdrm-$(CONFIG_ROCKCHIP_DW_HDMI) += dw_hdmi-rockchip.o > -rockchipdrm-$(CONFIG_ROCKCHIP_DW_MIPI_DSI) += dw-mipi-dsi.o > +rockchipdrm-$(CONFIG_ROCKCHIP_DW_MIPI_DSI) += dw-mipi-dsi_rockchip.o > rockchipdrm-$(CONFIG_ROCKCHIP_INNO_HDMI) += inno_hdmi.o > rockchipdrm-$(CONFIG_ROCKCHIP_LVDS) += rockchip_lvds.o > > diff --git a/drivers/gpu/drm/rockchip/dw-mipi-dsi.c b/drivers/gpu/drm/rockchip/dw-mipi-dsi.c > deleted file mode 100644 > index b15755b..0000000 > --- a/drivers/gpu/drm/rockchip/dw-mipi-dsi.c > +++ /dev/null > @@ -1,1349 +0,0 @@ > -/* > - * Copyright (c) 2016, Fuzhou Rockchip Electronics Co., Ltd > - * > - * This program is free software; you can redistribute it and/or modify > - * it under the terms of the GNU General Public License as published by > - * the Free Software Foundation; either version 2 of the License, or > - * (at your option) any later version. > - */ > -#include > -#include > -#include > -#include > -#include > -#include > -#include > -#include > -#include > -#include > -#include > -#include > -#include > -#include > -#include > -#include > -#include > -#include