From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Tvrtko Ursulin Date: Tue, 13 Nov 2018 14:36:27 +0000 Message-Id: <20181113143629.28101-3-tvrtko.ursulin@linux.intel.com> In-Reply-To: <20181113143629.28101-1-tvrtko.ursulin@linux.intel.com> References: <20181113143629.28101-1-tvrtko.ursulin@linux.intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t 2/4] tests/gem_ctx_sseu: Dynamic (sub)slice programming tests List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org Cc: Intel-gfx@lists.freedesktop.org, Tvrtko Ursulin List-ID: RnJvbTogTGlvbmVsIExhbmR3ZXJsaW4gPGxpb25lbC5nLmxhbmR3ZXJsaW5AaW50ZWwuY29tPgoK VmVyaWZ5IHRoYXQgdGhlIHBlci1jb250ZXh0IGR5bmFtaWMgU1NFVSB1QVBJIHdvcmtzIGFzIGV4 cGVjdGVkLgoKVG8gYWNoaWV2ZSB0aGF0LCBpbiB0aGUgYWJzZW5jZSBvZiBhIGJldHRlciBtZWNo YW1pc20sIHdlIHJlYWQgdGhlIHZhbHVlCm9mIFBXUl9DTEtfU1RBVEUgcmVnaXN0ZXIsIG9yIHVz ZSBNSV9TRVRfUFJFRElDQVRFIG9uIHBsYXRmb3JtcyBiZWZvcmUKQ2Fubm9ubGFrZS4KClRoaXMg cmVnaXN0ZXIgaXMgd3JpdHRlbiB0byBieSB0aGUgR1BVIG9uIGNvbnRleHQgcmVzdG9yZSBzbyB0 aGlzIHdheQp3ZSB2ZXJpZnkgaTkxNSBpcyBjb3JyZWN0bHkgdXBkYXRpbmcgdGhlIGNvbnRleHQg aW1hZ2UgaW4gYWxsCmNpcmN1bXN0YW5jZXMuCgp2MjogQWRkIHN1YnNsaWNlIHRlc3RzIChMaW9u ZWwpCiAgICBVc2UgTUlfU0VUX1BSRURJQ0FURSBmb3IgZnVydGhlciB2ZXJpZmljYXRpb24gd2hl biBhdmFpbGFibGUgKExpb25lbCkKCnYzOiBSZW5hbWUgdG8gZ2VtX2N0eF9ycGNzIChMaW9uZWwp Cgp2NDogVXBkYXRlIGtlcm5lbCBBUEkgKExpb25lbCkKICAgIEFkZCAwIHZhbHVlIHRlc3QgKExp b25lbCkKICAgIEV4ZXJjaXNlIGludmFsaWQgdmFsdWVzIChMaW9uZWwpCgp2NTogQWRkIHBlcmYg dGVzdHMgKExpb25lbCkKCnY2OiBBZGQgbmV3IHN5c2ZzIGVudHJ5IHRlc3RzIChMaW9uZWwpCgp2 NzogVGVzdCByc3ZkIGZpZWxkcwogICAgVXBkYXRlIGZvciBrZXJuZWwgc2VyaWVzIGNoYW5nZXMK CnY4OiBEcm9wIHRlc3Rfbm9fc3NldV9zdXBwb3J0KCkgdGVzdCAoS2VsdmluKQogICAgRHJvcCBk cm1faW50ZWxfKigpIGFwaXMgKENocmlzKQoKdjk6IGJ5IENocmlzOgogICAgRHJvcCBhbGwgZG9f aW9jdGwvZG9faW9jdGxfZXJyKCkKICAgIFVzZSBnZW1fY29udGV4dF9bZ3NdZXRfcGFyYW0oKQog ICAgVXNlIGdlbV9yZWFkKCkgaW5zdGVhZCBvZiBtYXBwaW5nIG1lbW9yeQogICAgYnkgTGlvbmVs OgogICAgVGVzdCBkeW5hbWljIHNzZXUgb24vb2ZmIG1vcmUKClR2cnRrbyBVcnN1bGluOgoKdjEw OgogKiBWYXJpb3VzIHN0eWxlIHR3ZWFrcyBhbmQgcmVmYWN0b3JpbmdzLgogKiBOZXcgdGVzdCBj b3ZlcmFnZS4KCnYxMToKICogQ2hhbmdlIHBsYXRmb3JtIHN1cHBvcnQgdG8ganVzdCBHZW4xMS4K ICogU2ltcGxpZnkgYXZhaWxhYmlsaXR5IHRlc3QuIChDaHJpcyBXaWxzb24pCiAqIE1vcmUgaW52 YWxpZCBwb2ludGVyIHRlc3RzLiAoQ2hyaXMgV2lsc29uKQoKdjEyOgogKiBGaXggTUFQX0ZJWEVE IHVzZSAoZG9oISkuCiAqIEZpeCBnZXQvc2V0IGNvcHkmcGFzdGUgZXJyb3JzLgogKiBEcm9wIHN1 cHBvcnRlZCBwbGF0Zm9ybSB0ZXN0LiAoQ2hyaXMgV2lsc29uKQogKiBBZGQgbW1hcF9fZ3R0IHRl c3QuIChDaHJpcyBXaWxzb24pCgp2MTM6CiAqIENvbW1pdCBtZXNzYWdlIHR3ZWFrcy4KICogQWRk ZWQgcmVzZXQvaGFuZy9zdXNwZW5kIHRlc3RzLiAoQ2hyaXMgV2lsc29uKQogKiBBc3NlcnQgc3Bp bm5lciBpcyBidXN5LiAoQ2hyaXMgV2lsc29uKQogKiBSZW1vdmUgc29tZSBtb3JlIEFCSSBhc3N1 bXB0aW9ucy4gKENocmlzIFdpbHNvbikKCnYxNDoKICogVXNlIGRlZmF1bHQgcmVzdW1lIHRpbWUu IChDaHJpcyBXaWxzb24pCiAqIFRyaWdnZXIgaGFuZyBhZnRlciBycGNzIHJlYWQgYmF0Y2ggaGFz IGJlZW4gc3VibWl0dGVkLiAoQ2hyaXMgV2lsc29uKQoKdjE1OgogKiBBZGp1c3QgZm9yIHVBUEkg cmVzdHJpY3Rpb25zLgoKdjE2OgogKiBCdWlsZCBzeXN0ZW0gY2hhbmdlcy4KClNpZ25lZC1vZmYt Ynk6IExpb25lbCBMYW5kd2VybGluIDxsaW9uZWwuZy5sYW5kd2VybGluQGludGVsLmNvbT4KU2ln bmVkLW9mZi1ieTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KUmV2 aWV3ZWQtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPiAjIHYxNAot LS0KIHRlc3RzL01ha2VmaWxlLmFtICAgICAgICAgIHwgICAgMSArCiB0ZXN0cy9NYWtlZmlsZS5z b3VyY2VzICAgICB8ICAgIDMgKwogdGVzdHMvaTkxNS9nZW1fY3R4X3BhcmFtLmMgfCAgICA0ICst CiB0ZXN0cy9pOTE1L2dlbV9jdHhfc3NldS5jICB8IDExOTAgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCiB0ZXN0cy9tZXNvbi5idWlsZCAgICAgICAgICB8ICAgIDggKwogNSBm aWxlcyBjaGFuZ2VkLCAxMjA1IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBt b2RlIDEwMDY0NCB0ZXN0cy9pOTE1L2dlbV9jdHhfc3NldS5jCgpkaWZmIC0tZ2l0IGEvdGVzdHMv TWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQppbmRleCAzZDFjZTBiYzFhZjguLjc5MzMz YWM3ZGIyNiAxMDA2NDQKLS0tIGEvdGVzdHMvTWFrZWZpbGUuYW0KKysrIGIvdGVzdHMvTWFrZWZp bGUuYW0KQEAgLTEwOSw2ICsxMDksNyBAQCBnZW1fY2xvc2VfcmFjZV9DRkxBR1MgPSAkKEFNX0NG TEFHUykgJChUSFJFQURfQ0ZMQUdTKQogZ2VtX2Nsb3NlX3JhY2VfTERBREQgPSAkKExEQUREKSAt bHB0aHJlYWQKIGdlbV9jdHhfdGhyYXNoX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAkKFRIUkVBRF9D RkxBR1MpCiBnZW1fY3R4X3RocmFzaF9MREFERCA9ICQoTERBREQpIC1scHRocmVhZAorZ2VtX2N0 eF9zc2V1X0xEQUREID0gJChMREFERCkgJCh0b3BfYnVpbGRkaXIpL2xpYi9saWJpZ3RfcGVyZi5s YQogZ2VtX2V4ZWNfcGFyYWxsZWxfQ0ZMQUdTID0gJChBTV9DRkxBR1MpICQoVEhSRUFEX0NGTEFH UykKIGdlbV9leGVjX3BhcmFsbGVsX0xEQUREID0gJChMREFERCkgLWxwdGhyZWFkCiBnZW1fZmVu Y2VfdGhyYXNoX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAkKFRIUkVBRF9DRkxBR1MpCmRpZmYgLS1n aXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwppbmRl eCBjOTEwMjEwYjk5MmYuLmZkOTliYzE1ZGE2NyAxMDA2NDQKLS0tIGEvdGVzdHMvTWFrZWZpbGUu c291cmNlcworKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCkBAIC0xNTksNiArMTU5LDkgQEAg Z2VtX2N0eF9pc29sYXRpb25fU09VUkNFUyA9IGk5MTUvZ2VtX2N0eF9pc29sYXRpb24uYwogVEVT VFNfcHJvZ3MgKz0gZ2VtX2N0eF9wYXJhbQogZ2VtX2N0eF9wYXJhbV9TT1VSQ0VTID0gaTkxNS9n ZW1fY3R4X3BhcmFtLmMKIAorVEVTVFNfcHJvZ3MgKz0gZ2VtX2N0eF9zc2V1CitnZW1fY3R4X3Nz ZXVfU09VUkNFUyA9IGk5MTUvZ2VtX2N0eF9zc2V1LmMKKwogVEVTVFNfcHJvZ3MgKz0gZ2VtX2N0 eF9zd2l0Y2gKIGdlbV9jdHhfc3dpdGNoX1NPVVJDRVMgPSBpOTE1L2dlbV9jdHhfc3dpdGNoLmMK IApkaWZmIC0tZ2l0IGEvdGVzdHMvaTkxNS9nZW1fY3R4X3BhcmFtLmMgYi90ZXN0cy9pOTE1L2dl bV9jdHhfcGFyYW0uYwppbmRleCBjNDZmZDcwOWIwZDcuLmFmMWFmZWFhMmYyZiAxMDA2NDQKLS0t IGEvdGVzdHMvaTkxNS9nZW1fY3R4X3BhcmFtLmMKKysrIGIvdGVzdHMvaTkxNS9nZW1fY3R4X3Bh cmFtLmMKQEAgLTI5NCwxMSArMjk0LDEzIEBAIGlndF9tYWluCiAJCQlzZXRfcHJpb3JpdHkoZmQp OwogCX0KIAorCS8qIEk5MTVfQ09OVEVYVF9QQVJBTV9TU0VVIHRlc3RzIGFyZSBsb2NhdGVkIGlu IGdlbV9jdHhfc3NldS5jICovCisKIAkvKiBOT1RFOiBUaGlzIHRlc3RjYXNlIGludGVudGlvbmFs bHkgdGVzdHMgZm9yIHRoZSBuZXh0IGZyZWUgcGFyYW1ldGVyCiAJICogdG8gY2F0Y2ggQUJJIGV4 dGVuc2lvbnMuIERvbid0ICJmaXgiIHRoaXMgdGVzdGNhc2Ugd2l0aG91dCBhZGRpbmcgYWxsCiAJ ICogdGhlIHRlc3RzIGZvciB0aGUgbmV3IHBhcmFtIGZpcnN0LgogCSAqLwotCWFyZy5wYXJhbSA9 IEk5MTVfQ09OVEVYVF9QQVJBTV9QUklPUklUWSArIDE7CisJYXJnLnBhcmFtID0gSTkxNV9DT05U RVhUX1BBUkFNX1NTRVUgKyAxOwogCiAJaWd0X3N1YnRlc3QoImludmFsaWQtcGFyYW0tZ2V0Iikg ewogCQlhcmcuY3R4X2lkID0gY3R4OwpkaWZmIC0tZ2l0IGEvdGVzdHMvaTkxNS9nZW1fY3R4X3Nz ZXUuYyBiL3Rlc3RzL2k5MTUvZ2VtX2N0eF9zc2V1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwLi44ODlmNzA2NDMzOTIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9p OTE1L2dlbV9jdHhfc3NldS5jCkBAIC0wLDAgKzEsMTE5MCBAQAorLyoKKyAqIENvcHlyaWdodCDC qSAyMDE3LTIwMTggSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICog Y29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMg KHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVz dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8g dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNl LAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1 YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5l eHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJz dGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FS RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBS RVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFV VEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFH RVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB Q1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisg KiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIExpb25lbCBMYW5kd2Vy bGluIDxsaW9uZWwuZy5sYW5kd2VybGluQGludGVsLmNvbT4KKyAqCisgKi8KKworI2luY2x1ZGUg ImlndC5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVk ZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNp bmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHRpbWUuaD4K KyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisKKyNpbmNsdWRl ICJpZ3RfZHVtbXlsb2FkLmgiCisjaW5jbHVkZSAiaWd0X3BlcmYuaCIKKyNpbmNsdWRlICJpZ3Rf c3lzZnMuaCIKKyNpbmNsdWRlICJpb2N0bF93cmFwcGVycy5oIgorCitJR1RfVEVTVF9ERVNDUklQ VElPTigiVGVzdCBjb250ZXh0IHJlbmRlciBwb3dlcmdhdGluZyBwcm9ncmFtbWluZy4iKTsKKwor I2RlZmluZSBNSV9TVE9SRV9SRUdJU1RFUl9NRU0gKDB4MjQgPDwgMjMpCisKKyNkZWZpbmUgTUlf U0VUX1BSRURJQ0FURSAgICAgICgweDEgPDwgMjMpCisjZGVmaW5lICBNSV9TRVRfUFJFRElDQVRF X05PT1BfTkVWRVIgICAgICAgICAoMCkKKyNkZWZpbmUgIE1JX1NFVF9QUkVESUNBVEVfTk9PUF9S RVNVTFQyX0NMRUFSICgxKQorI2RlZmluZSAgTUlfU0VUX1BSRURJQ0FURV9OT09QX1JFU1VMVDJf U0VUICAgKDIpCisjZGVmaW5lICBNSV9TRVRfUFJFRElDQVRFX05PT1BfUkVTVUxUX0NMRUFSICAo MykKKyNkZWZpbmUgIE1JX1NFVF9QUkVESUNBVEVfTk9PUF9SRVNVTFRfU0VUICAgICg0KQorI2Rl ZmluZSAgTUlfU0VUX1BSRURJQ0FURV8xX1NMSUNFUyAgICAgICAgICAgKDUpCisjZGVmaW5lICBN SV9TRVRfUFJFRElDQVRFXzJfU0xJQ0VTICAgICAgICAgICAoNikKKyNkZWZpbmUgIE1JX1NFVF9Q UkVESUNBVEVfM19TTElDRVMgICAgICAgICAgICg3KQorCisjZGVmaW5lIEdFTjhfUl9QV1JfQ0xL X1NUQVRFCQkweDIwQzgKKyNkZWZpbmUgICBHRU44X1JQQ1NfRU5BQkxFCQkoMSA8PCAzMSkKKyNk ZWZpbmUgICBHRU44X1JQQ1NfU19DTlRfRU5BQkxFCSgxIDw8IDE4KQorI2RlZmluZSAgIEdFTjhf UlBDU19TX0NOVF9TSElGVAkJMTUKKyNkZWZpbmUgICBHRU44X1JQQ1NfU19DTlRfTUFTSwkJKDB4 NyA8PCBHRU44X1JQQ1NfU19DTlRfU0hJRlQpCisjZGVmaW5lICAgR0VOMTFfUlBDU19TX0NOVF9T SElGVAkxMgorI2RlZmluZSAgIEdFTjExX1JQQ1NfU19DTlRfTUFTSwkJKDB4M2YgPDwgR0VOMTFf UlBDU19TX0NOVF9TSElGVCkKKyNkZWZpbmUgICBHRU44X1JQQ1NfU1NfQ05UX0VOQUJMRQkoMSA8 PCAxMSkKKyNkZWZpbmUgICBHRU44X1JQQ1NfU1NfQ05UX1NISUZUCTgKKyNkZWZpbmUgICBHRU44 X1JQQ1NfU1NfQ05UX01BU0sJCSgweDcgPDwgR0VOOF9SUENTX1NTX0NOVF9TSElGVCkKKyNkZWZp bmUgICBHRU44X1JQQ1NfRVVfTUFYX1NISUZUCTQKKyNkZWZpbmUgICBHRU44X1JQQ1NfRVVfTUFY X01BU0sJCSgweGYgPDwgR0VOOF9SUENTX0VVX01BWF9TSElGVCkKKyNkZWZpbmUgICBHRU44X1JQ Q1NfRVVfTUlOX1NISUZUCTAKKyNkZWZpbmUgICBHRU44X1JQQ1NfRVVfTUlOX01BU0sJCSgweGYg PDwgR0VOOF9SUENTX0VVX01JTl9TSElGVCkKKworI2RlZmluZSBSQ1NfVElNRVNUQU1QICgweDIw MDAgKyAweDM1OCkKKworc3RhdGljIHVuc2lnbmVkIGludCBfX2ludGVsX2dlbl9fLCBfX2ludGVs X2RldmlkX187CitzdGF0aWMgdWludDY0X3QgX19zbGljZV9tYXNrX18sIF9fc3Vic2xpY2VfbWFz a19fOworc3RhdGljIHVuc2lnbmVkIGludCBfX3NsaWNlX2NvdW50X18sIF9fc3Vic2xpY2VfY291 bnRfXzsKKworc3RhdGljIHVpbnQ2NF90IG1hc2tfbWludXNfb25lKHVpbnQ2NF90IG1hc2spCit7 CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgKHNpemVvZihtYXNrKSAqIDgg LSAxKTsgaSsrKSB7CisJCWlmICgoMVVMTCA8PCBpKSAmIG1hc2spCisJCQlyZXR1cm4gbWFzayAm IH4oMVVMTCA8PCBpKTsKKwl9CisKKwlpZ3RfYXNzZXJ0KDApOworCXJldHVybiAwOworfQorCitz dGF0aWMgdWludDY0X3QgbWFza19wbHVzX29uZSh1aW50NjRfdCBtYXNrKQoreworCXVuc2lnbmVk IGludCBpOworCisJZm9yIChpID0gMDsgaSA8IChzaXplb2YobWFzaykgKiA4IC0gMSk7IGkrKykg eworCQlpZiAoKCgxVUxMIDw8IGkpICYgbWFzaykgPT0gMCkKKwkJCXJldHVybiBtYXNrIHwgKDFV TEwgPDwgaSk7CisJfQorCisJaWd0X2Fzc2VydCgwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IHVpbnQ2NF90IG1hc2tfbWludXModWludDY0X3QgbWFzaywgaW50IG4pCit7CisJdW5zaWduZWQg aW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQltYXNrID0gbWFza19taW51c19v bmUobWFzayk7CisKKwlyZXR1cm4gbWFzazsKK30KKworc3RhdGljIHVpbnQ2NF90IG1hc2tfcGx1 cyh1aW50NjRfdCBtYXNrLCBpbnQgbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9 IDA7IGkgPCBuOyBpKyspCisJCW1hc2sgPSBtYXNrX3BsdXNfb25lKG1hc2spOworCisJcmV0dXJu IG1hc2s7Cit9CisKK3N0YXRpYyB1aW50MzJfdCAqCitmaWxsX3JlbG9jYXRpb24odWludDMyX3Qg KmJhdGNoLAorCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKnJlbG9jLAor CQl1aW50MzJfdCBnZW1faGFuZGxlLCB1aW50MzJfdCBkZWx0YSwgLyogaW4gYnl0ZXMgKi8KKwkJ dWludDMyX3Qgb2Zmc2V0LCAvKiBpbiBkd29yZHMgKi8KKwkJdWludDMyX3QgcmVhZF9kb21haW5z LCB1aW50MzJfdCB3cml0ZV9kb21haW5zKQoreworCXJlbG9jLT50YXJnZXRfaGFuZGxlID0gZ2Vt X2hhbmRsZTsKKwlyZWxvYy0+ZGVsdGEgPSBkZWx0YTsKKwlyZWxvYy0+b2Zmc2V0ID0gb2Zmc2V0 ICogc2l6ZW9mKHVpbnQzMl90KTsKKwlyZWxvYy0+cHJlc3VtZWRfb2Zmc2V0ID0gMDsKKwlyZWxv Yy0+cmVhZF9kb21haW5zID0gcmVhZF9kb21haW5zOworCXJlbG9jLT53cml0ZV9kb21haW4gPSB3 cml0ZV9kb21haW5zOworCisJKmJhdGNoKysgPSBkZWx0YTsKKwkqYmF0Y2grKyA9IDA7CisKKwly ZXR1cm4gYmF0Y2g7Cit9CisKKworc3RhdGljIHVpbnQzMl90CityZWFkX3JwY3NfcmVnKGludCBm ZCwgdWludDMyX3QgY3R4LCB1aW50MzJfdCBleHBlY3RlZF9zbGljZXMsIGlndF9zcGluX3QgKnNw aW4pCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmID0geyB9Owor CXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSByZWxvY3NbMl07CisJc3RydWN0 IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqWzJdOworCXVpbnQzMl90ICpiYXRjaCwgKmIs IGRhdGFbMl07CisJdW5zaWduZWQgaW50IG5fcmVsb2NzID0gMDsKKwl1aW50MzJfdCBycGNzOwor CisJbWVtc2V0KG9iaiwgMCwgc2l6ZW9mKG9iaikpOworCW9ialswXS5oYW5kbGUgPSBnZW1fY3Jl YXRlKGZkLCA0MDk2KTsKKwlvYmpbMV0uaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgNDA5Nik7CisK KwliYXRjaCA9IGIgPQorCSAgICAgIGdlbV9tbWFwX19jcHUoZmQsIG9ialsxXS5oYW5kbGUsIDAs IDQwOTYsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOworCisJaWYgKGV4cGVjdGVkX3NsaWNlcyAh PSAwICYmIF9faW50ZWxfZ2VuX18gPCAxMCkKKwkJKmIrKyA9IE1JX1NFVF9QUkVESUNBVEUgfCAo MSAtIDEpIHwKKwkJICAgICAgIChNSV9TRVRfUFJFRElDQVRFXzFfU0xJQ0VTICsgZXhwZWN0ZWRf c2xpY2VzIC0gMSk7CisKKwkqYisrID0gTUlfU1RPUkVfUkVHSVNURVJfTUVNIHwgKDQgLSAyKTsK KwkqYisrID0gUkNTX1RJTUVTVEFNUDsKKwliID0gZmlsbF9yZWxvY2F0aW9uKGIsICZyZWxvY3Nb bl9yZWxvY3MrK10sIG9ialswXS5oYW5kbGUsCisJCQkgICAgMCwgYiAtIGJhdGNoLAorCQkJICAg IEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIsIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIpOworCisJKmIr KyA9IE1JX1NUT1JFX1JFR0lTVEVSX01FTSB8ICg0IC0gMik7CisJKmIrKyA9IEdFTjhfUl9QV1Jf Q0xLX1NUQVRFOworCWIgPSBmaWxsX3JlbG9jYXRpb24oYiwgJnJlbG9jc1tuX3JlbG9jcysrXSwg b2JqWzBdLmhhbmRsZSwKKwkJCSAgICA0LCBiIC0gYmF0Y2gsCisJCQkgICAgSTkxNV9HRU1fRE9N QUlOX1JFTkRFUiwgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUik7CisKKwlpZiAoZXhwZWN0ZWRfc2xp Y2VzICE9IDAgJiYgX19pbnRlbF9nZW5fXyA8IDEwKQorCQkqYisrID0gTUlfU0VUX1BSRURJQ0FU RSB8ICgxIC0gMSkgfCBNSV9TRVRfUFJFRElDQVRFX05PT1BfTkVWRVI7CisKKwkqYisrID0gTUlf QkFUQ0hfQlVGRkVSX0VORDsKKworCWdlbV9tdW5tYXAoYmF0Y2gsIDQwOTYpOworCisJb2JqWzFd LnJlbG9jYXRpb25fY291bnQgPSBuX3JlbG9jczsKKwlvYmpbMV0ucmVsb2NzX3B0ciA9IHRvX3Vz ZXJfcG9pbnRlcihyZWxvY3MpOworCisJZXhlY2J1Zi5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9p bnRlcihvYmopOworCWV4ZWNidWYuYnVmZmVyX2NvdW50ID0gQVJSQVlfU0laRShvYmopOworCWk5 MTVfZXhlY2J1ZmZlcjJfc2V0X2NvbnRleHRfaWQoZXhlY2J1ZiwgY3R4KTsKKworCWdlbV9leGVj YnVmKGZkLCAmZXhlY2J1Zik7CisKKwlpZiAoc3BpbikgeworCQlpZ3RfYXNzZXJ0KGdlbV9ib19i dXN5KGZkLCBzcGluLT5oYW5kbGUpKTsKKwkJaWd0X3NwaW5fYmF0Y2hfZW5kKHNwaW4pOworCX0K KworCWdlbV9yZWFkKGZkLCBvYmpbMF0uaGFuZGxlLCAwLCBkYXRhLCBzaXplb2YoZGF0YSkpOwor CisJcnBjcyA9IGRhdGFbMV07CisKKwlpZ3RfZGVidWcoInJjc190aW1lc3RhbXA9MHgleCBycGNz PTB4JXhcbiIsIGRhdGFbMF0sIGRhdGFbMV0pOworCisJZ2VtX2Nsb3NlKGZkLCBvYmpbMF0uaGFu ZGxlKTsKKwlnZW1fY2xvc2UoZmQsIG9ialsxXS5oYW5kbGUpOworCisJcmV0dXJuIHJwY3M7Cit9 CisKK3R5cGVkZWYgdWludDMyX3QgKCpyZWFkX3NsaWNlX2NvdW50X2YpKGludCBmZCwgdWludDMy X3QgY3R4LCB1aW50MzJfdCBleHBlY3RlZCwKKwkJCQkgICAgICAgaWd0X3NwaW5fdCAqc3Bpbik7 CisKK3N0YXRpYyByZWFkX3NsaWNlX2NvdW50X2YgX19yZWFkX3NsaWNlX2NvdW50OworCitzdGF0 aWMgdWludDMyX3QKK3JlYWRfc2xpY2VfY291bnQoaW50IGZkLCB1aW50MzJfdCBjdHgsIHVpbnQz Ml90IGV4cGVjdGVkX3NsaWNlX2NvdW50KQoreworCXJldHVybiBfX3JlYWRfc2xpY2VfY291bnQo ZmQsIGN0eCwgZXhwZWN0ZWRfc2xpY2VfY291bnQsIE5VTEwpOworfQorCitzdGF0aWMgdWludDMy X3QKK2dlbjhfcmVhZF9zbGljZV9jb3VudChpbnQgZmQsIHVpbnQzMl90IGN0eCwgdWludDMyX3Qg ZXhwZWN0ZWRfc2xpY2VfY291bnQsCisJCSAgICAgIGlndF9zcGluX3QgKnNwaW4pCit7CisJcmV0 dXJuIChyZWFkX3JwY3NfcmVnKGZkLCBjdHgsIGV4cGVjdGVkX3NsaWNlX2NvdW50LCBzcGluKSAm CisJCUdFTjhfUlBDU19TX0NOVF9NQVNLKSA+PiBHRU44X1JQQ1NfU19DTlRfU0hJRlQ7Cit9CisK K3N0YXRpYyB1aW50MzJfdAorZ2VuMTFfcmVhZF9zbGljZV9jb3VudChpbnQgZmQsIHVpbnQzMl90 IGN0eCwgdWludDMyX3QgZXhwZWN0ZWRfc2xpY2VfY291bnQsCisJCSAgICAgICBpZ3Rfc3Bpbl90 ICpzcGluKQoreworCXJldHVybiAocmVhZF9ycGNzX3JlZyhmZCwgY3R4LCBleHBlY3RlZF9zbGlj ZV9jb3VudCwgc3BpbikgJgorCQlHRU4xMV9SUENTX1NfQ05UX01BU0spID4+IEdFTjExX1JQQ1Nf U19DTlRfU0hJRlQ7Cit9CisKK3N0YXRpYyB1aW50MzJfdAorcmVhZF9zdWJzbGljZV9jb3VudChp bnQgZmQsIHVpbnQzMl90IGN0eCkKK3sKKwlyZXR1cm4gKHJlYWRfcnBjc19yZWcoZmQsIGN0eCwg MCwgTlVMTCkgJiBHRU44X1JQQ1NfU1NfQ05UX01BU0spID4+CisJICAgICAgIEdFTjhfUlBDU19T U19DTlRfU0hJRlQ7Cit9CisKK3N0YXRpYyBib29sCitrZXJuZWxfaGFzX3Blcl9jb250ZXh0X3Nz ZXVfc3VwcG9ydChpbnQgZmQpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFt X3NzZXUgc3NldSA9IHsgfTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gYXJn ID0KKwkJeworCQkgIC5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9TU0VVLAorCQkgIC5zaXpl ID0gc2l6ZW9mKHNzZXUpLAorCQkgIC52YWx1ZSA9IHRvX3VzZXJfcG9pbnRlcigmc3NldSksCisJ CX07CisJaW50IHJldDsKKworCWlmIChfX2dlbV9jb250ZXh0X2dldF9wYXJhbShmZCwgJmFyZykp CisJCXJldHVybiBmYWxzZTsKKworCWFyZy52YWx1ZSA9IHRvX3VzZXJfcG9pbnRlcigmc3NldSk7 CisKKwlyZXQgPSBfX2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyk7CisKKwlpZ3RfYXNz ZXJ0KHJldCA9PSAwIHx8IHJldCA9PSAtRU5PREVWIHx8IHJldCA9PSAtRUlOVkFMKTsKKworCXJl dHVybiByZXQgPT0gMDsKK30KKworc3RhdGljIHZvaWQKK2NvbnRleHRfZ2V0X3NzZXVfbWFza3Mo aW50IGZkLCB1aW50MzJfdCBjdHgsCisJCSAgICAgICB1aW50NjRfdCAqc2xpY2VfbWFzaywKKwkJ ICAgICAgIHVpbnQ2NF90ICpzdWJzbGljZV9tYXNrKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1f Y29udGV4dF9wYXJhbV9zc2V1IHNzZXUgPSB7IH07CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250 ZXh0X3BhcmFtIGFyZyA9CisJCXsgLnBhcmFtID0gSTkxNV9DT05URVhUX1BBUkFNX1NTRVUsCisJ CSAgLmN0eF9pZCA9IGN0eCwKKwkJICAuc2l6ZSA9IHNpemVvZihzc2V1KSwKKwkJICAudmFsdWUg PSB0b191c2VyX3BvaW50ZXIoJnNzZXUpIH07CisKKwlnZW1fY29udGV4dF9nZXRfcGFyYW0oZmQs ICZhcmcpOworCisJaWYgKHNsaWNlX21hc2spCisJCSpzbGljZV9tYXNrID0gc3NldS5zbGljZV9t YXNrOworCisJaWYgKHN1YnNsaWNlX21hc2spCisJCSpzdWJzbGljZV9tYXNrID0gc3NldS5zdWJz bGljZV9tYXNrOworfQorCitzdGF0aWMgdm9pZAorY29udGV4dF9zZXRfc2xpY2VfbWFzayhpbnQg ZmQsIHVpbnQzMl90IGN0eCwgdWludDY0X3Qgc2xpY2VfbWFzaykKK3sKKwlzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX2NvbnRleHRfcGFyYW1fc3NldSBzc2V1ID0geyB9OworCXN0cnVjdCBkcm1faTkxNV9n ZW1fY29udGV4dF9wYXJhbSBhcmcgPQorCQl7IC5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9T U0VVLAorCQkgIC5jdHhfaWQgPSBjdHgsCisJCSAgLnNpemUgPSBzaXplb2Yoc3NldSksCisJCSAg LnZhbHVlID0gdG9fdXNlcl9wb2ludGVyKCZzc2V1KSB9OworCisJZ2VtX2NvbnRleHRfZ2V0X3Bh cmFtKGZkLCAmYXJnKTsKKwlzc2V1LnNsaWNlX21hc2sgPSBzbGljZV9tYXNrOworCWdlbV9jb250 ZXh0X3NldF9wYXJhbShmZCwgJmFyZyk7Cit9CisKK3N0YXRpYyB2b2lkCitjb250ZXh0X3NldF9z dWJzbGljZV9tYXNrKGludCBmZCwgdWludDMyX3QgY3R4LCB1aW50NjRfdCBzdWJzbGljZV9tYXNr KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbV9zc2V1IHNzZXUgPSB7IH07 CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIGFyZyA9CisJCXsgLnBhcmFtID0g STkxNV9DT05URVhUX1BBUkFNX1NTRVUsCisJCSAgLmN0eF9pZCA9IGN0eCwKKwkJICAuc2l6ZSA9 IHNpemVvZihzc2V1KSwKKwkJICAudmFsdWUgPSB0b191c2VyX3BvaW50ZXIoJnNzZXUpIH07CisK KwlnZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZhcmcpOworCXNzZXUuc3Vic2xpY2VfbWFzayA9 IHN1YnNsaWNlX21hc2s7CisJZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCAmYXJnKTsKK30KKwor LyoKKyAqIFZlcmlmeSB0aGF0IHdlIGNhbiBwcm9ncmFtIHRoZSBzbGljZSBjb3VudC4KKyAqLwor c3RhdGljIHZvaWQKK3Rlc3Rfc2xpY2VfcGcoaW50IGZkLCB1aW50MzJfdCBwZ19zbGljZV9jb3Vu dCkKK3sKKwl1aW50NjRfdCBwZ19zbGljZV9tYXNrID0gbWFza19taW51cyhfX3NsaWNlX21hc2tf XywgcGdfc2xpY2VfY291bnQpOworCXVuc2lnbmVkIGludCBzbGljZV9jb3VudCA9IF9fc2xpY2Vf Y291bnRfXyAtIHBnX3NsaWNlX2NvdW50OworCXVpbnQ2NF90IHNsaWNlX21hc2s7CisJdWludDMy X3QgY3R4OworCisJaWd0X2Fzc2VydF9lcShzbGljZV9jb3VudCwgX19idWlsdGluX3BvcGNvdW50 KHBnX3NsaWNlX21hc2spKTsKKworCWlndF9za2lwX29uKF9faW50ZWxfZ2VuX18gPT0gMTEgJiYK KwkJICAgIChzbGljZV9jb3VudCAhPSAxICYmIHNsaWNlX2NvdW50ICE9IF9fc2xpY2VfY291bnRf XykpOworCisJY3R4ID0gZ2VtX2NvbnRleHRfY3JlYXRlKGZkKTsKKwljb250ZXh0X3NldF9zbGlj ZV9tYXNrKGZkLCBjdHgsIHBnX3NsaWNlX21hc2spOworCWNvbnRleHRfZ2V0X3NzZXVfbWFza3Mo ZmQsIGN0eCwgJnNsaWNlX21hc2ssIE5VTEwpOworCWlndF9hc3NlcnRfZXEocGdfc2xpY2VfbWFz aywgc2xpY2VfbWFzayk7CisKKwkvKgorCSAqIFRlc3QgZmFsc2UgcG9zaXRpdmVzIHdpdGggcHJl ZGljYXRlcyAob25seSBhdmFpbGFibGUgb24KKwkgKiBiZWZvcmUgR2VuMTApLgorCSAqLworCWlm IChfX2ludGVsX2dlbl9fIDwgMTApCisJCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChm ZCwgY3R4LCBfX3NsaWNlX2NvdW50X18pLCAwKTsKKworCWlndF9hc3NlcnRfZXEocmVhZF9zbGlj ZV9jb3VudChmZCwgY3R4LCAwKSwgc2xpY2VfY291bnQpOworCisJZ2VtX2NvbnRleHRfZGVzdHJv eShmZCwgY3R4KTsKK30KKworLyoKKyAqIFZlcmlmeSB0aGF0IHdlIGNhbiBwcm9ncmFtIHRoZSBz dWJzbGljZSBjb3VudC4KKyAqLworc3RhdGljIHZvaWQKK3Rlc3Rfc3Vic2xpY2VfcGcoaW50IGZk LCBpbnQgcGdfc3Vic2xpY2VfY291bnQpCit7CisJdWludDY0X3QgcGdfc3Vic2xpY2VfbWFzayA9 CisJCW1hc2tfbWludXMoX19zdWJzbGljZV9tYXNrX18sIHBnX3N1YnNsaWNlX2NvdW50KTsKKwl1 bnNpZ25lZCBpbnQgc3Vic2xpY2VfY291bnQgPSBfX3N1YnNsaWNlX2NvdW50X18gLSBwZ19zdWJz bGljZV9jb3VudDsKKwl1aW50NjRfdCBzdWJzbGljZV9tYXNrOworCXVpbnQzMl90IGN0eDsKKwor CWlndF9hc3NlcnRfZXEoc3Vic2xpY2VfY291bnQsIF9fYnVpbHRpbl9wb3Bjb3VudChwZ19zdWJz bGljZV9tYXNrKSk7CisKKwlpZ3Rfc2tpcF9vbihfX2ludGVsX2dlbl9fID09IDExICYmCisJCSAg ICAoc3Vic2xpY2VfY291bnQgIT0gX19zdWJzbGljZV9jb3VudF9fICYmCisJCSAgICAgc3Vic2xp Y2VfY291bnQgIT0gKF9fc3Vic2xpY2VfY291bnRfXyAvIDIpKSk7CisKKwljdHggPSBnZW1fY29u dGV4dF9jcmVhdGUoZmQpOworCWNvbnRleHRfc2V0X3N1YnNsaWNlX21hc2soZmQsIGN0eCwgcGdf c3Vic2xpY2VfbWFzayk7CisJY29udGV4dF9nZXRfc3NldV9tYXNrcyhmZCwgY3R4LCBOVUxMLCAm c3Vic2xpY2VfbWFzayk7CisJaWd0X2Fzc2VydF9lcShwZ19zdWJzbGljZV9tYXNrLCBzdWJzbGlj ZV9tYXNrKTsKKworCWlndF9hc3NlcnRfZXEocmVhZF9zdWJzbGljZV9jb3VudChmZCwgY3R4KSwg c3Vic2xpY2VfY291bnQpOworCisJZ2VtX2NvbnRleHRfZGVzdHJveShmZCwgY3R4KTsKK30KKwor c3RhdGljIGJvb2wgaGFzX2VuZ2luZShpbnQgZmQsIHVuc2lnbmVkIGludCBjbGFzcywgdW5zaWdu ZWQgaW50IGluc3RhbmNlKQoreworCWludCBwbXUgPSBwZXJmX2k5MTVfb3BlbihJOTE1X1BNVV9F TkdJTkVfQlVTWShjbGFzcywgaW5zdGFuY2UpKTsKKworCWlmIChwbXUgPj0gMCkKKwkJY2xvc2Uo cG11KTsKKworCXJldHVybiBwbXUgPj0gMDsKK30KKworLyoKKyAqIFZlcmlmeSB0aGF0IGludmFs aWQgZW5naW5lcyBhcmUgcmVqZWN0ZWQgYW5kIHZhbGlkIG9uZXMgYXJlIGFjY2VwdGVkLgorICov CitzdGF0aWMgdm9pZCB0ZXN0X2VuZ2luZXMoaW50IGZkKQoreworCXN0cnVjdCBkcm1faTkxNV9n ZW1fY29udGV4dF9wYXJhbV9zc2V1IHNzZXUgPSB7IH07CisJc3RydWN0IGRybV9pOTE1X2dlbV9j b250ZXh0X3BhcmFtIGFyZyA9CisJCXsgLnBhcmFtID0gSTkxNV9DT05URVhUX1BBUkFNX1NTRVUs CisJCSAgLmN0eF9pZCA9IGdlbV9jb250ZXh0X2NyZWF0ZShmZCksCisJCSAgLnNpemUgPSBzaXpl b2Yoc3NldSksCisJCSAgLnZhbHVlID0gdG9fdXNlcl9wb2ludGVyKCZzc2V1KSB9OworCXVuc2ln bmVkIGludCBjbGFzcywgaW5zdGFuY2U7CisJaW50IGxhc3Rfd2l0aF9lbmdpbmVzOworCisJLyog Z2V0X3BhcmFtICovCisKKwlzc2V1Lmluc3RhbmNlID0gLTE7IC8qIEFzc3VtZWQgaW52YWxpZC4g Ki8KKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfZ2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVJ TlZBTCk7CisKKwlzc2V1LmNsYXNzID0gSTkxNV9FTkdJTkVfQ0xBU1NfSU5WQUxJRDsgLyogQm90 aCBpbnZhbGlkLiAqLworCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9nZXRfcGFyYW0oZmQs ICZhcmcpLCAtRUlOVkFMKTsKKworCXNzZXUuaW5zdGFuY2UgPSAwOyAvKiBDbGFzcyBpbnZhbGlk LiAqLworCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZhcmcpLCAt RUlOVkFMKTsKKwlzc2V1LmNsYXNzID0gSTkxNV9FTkdJTkVfQ0xBU1NfUkVOREVSOworCisJbGFz dF93aXRoX2VuZ2luZXMgPSAtMTsKKwlmb3IgKGNsYXNzID0gMDsgY2xhc3MgPCB+MDsgY2xhc3Mr KykgeworCQlmb3IgKGluc3RhbmNlID0gMDsgaW5zdGFuY2UgPCB+MDsgaW5zdGFuY2UrKykgewor CQkJaW50IHJldDsKKworCQkJc3NldS5jbGFzcyA9IGNsYXNzOworCQkJc3NldS5pbnN0YW5jZSA9 IGluc3RhbmNlOworCisJCQlyZXQgPSBfX2dlbV9jb250ZXh0X2dldF9wYXJhbShmZCwgJmFyZyk7 CisKKwkJCWlmIChoYXNfZW5naW5lKGZkLCBjbGFzcywgaW5zdGFuY2UpKSB7CisJCQkJaWd0X2Fz c2VydF9lcShyZXQsIDApOworCQkJCWxhc3Rfd2l0aF9lbmdpbmVzID0gY2xhc3M7CisJCQl9IGVs c2UgeworCQkJCWlndF9hc3NlcnRfZXEocmV0LCAtRUlOVkFMKTsKKwkJCQlpZiAoaW5zdGFuY2Ug PiA4KSAvKiBTa2lwIG92ZXIgc29tZSBpbnN0YW5jZSBob2xlcy4gKi8KKwkJCQkJYnJlYWs7CisJ CQl9CisJCX0KKworCQlpZiAoY2xhc3MgLSBsYXN0X3dpdGhfZW5naW5lcyA+IDgpIC8qIFNraXAg b3ZlciBzb21lIGNsYXNzIGhvbGVzLiAqLworCQkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBHZXQg c29tZSBwcm9wZXIgdmFsdWVzIGJlZm9yZSB0cnlpbmcgdG8gcmVwcm9ncmFtIHRoZW0gb250bwor CSAqIGFuIGludmFsaWQgZW5naW5lLgorCSAqLworCXNzZXUuY2xhc3MgPSAwOworCXNzZXUuaW5z dGFuY2UgPSAwOworCWdlbV9jb250ZXh0X2dldF9wYXJhbShmZCwgJmFyZyk7CisKKwkvKiBzZXRf cGFyYW0gKi8KKworCXNzZXUuaW5zdGFuY2UgPSAtMTsgLyogQXNzdW1lZCBpbnZhbGlkLiAqLwor CWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRUlOVkFM KTsKKworCXNzZXUuY2xhc3MgPSBJOTE1X0VOR0lORV9DTEFTU19JTlZBTElEOyAvKiBCb3RoIGlu dmFsaWQuICovCisJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFy ZyksIC1FSU5WQUwpOworCisJc3NldS5pbnN0YW5jZSA9IDA7IC8qIENsYXNzIGludmFsaWQuICov CisJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyksIC1FSU5W QUwpOworCisJbGFzdF93aXRoX2VuZ2luZXMgPSAtMTsKKwlmb3IgKGNsYXNzID0gMDsgY2xhc3Mg PCB+MDsgY2xhc3MrKykgeworCQlmb3IgKGluc3RhbmNlID0gMDsgaW5zdGFuY2UgPCB+MDsgaW5z dGFuY2UrKykgeworCQkJaW50IHJldDsKKworCQkJc3NldS5jbGFzcyA9IGNsYXNzOworCQkJc3Nl dS5pbnN0YW5jZSA9IGluc3RhbmNlOworCisJCQlyZXQgPSBfX2dlbV9jb250ZXh0X3NldF9wYXJh bShmZCwgJmFyZyk7CisKKwkJCWlmIChoYXNfZW5naW5lKGZkLCBjbGFzcywgaW5zdGFuY2UpKSB7 CisJCQkJaWd0X2Fzc2VydChyZXQgPT0gMCB8fCByZXQgPT0gLUVOT0RFVik7CisJCQkJbGFzdF93 aXRoX2VuZ2luZXMgPSBjbGFzczsKKwkJCX0gZWxzZSB7CisJCQkJaWd0X2Fzc2VydF9lcShyZXQs IC1FSU5WQUwpOworCQkJCWlmIChpbnN0YW5jZSA+IDgpIC8qIFNraXAgb3ZlciBzb21lIGluc3Rh bmNlIGhvbGVzLiAqLworCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChjbGFzcyAtIGxh c3Rfd2l0aF9lbmdpbmVzID4gOCkgLyogU2tpcCBvdmVyIHNvbWUgY2xhc3MgaG9sZXMuICovCisJ CQlicmVhazsKKwl9CisKKwlnZW1fY29udGV4dF9kZXN0cm95KGZkLCBhcmcuY3R4X2lkKTsKK30K KworLyoKKyAqIFZlcmlmeSB0aGF0IGludmFsaWQgYXJndW1lbnRzIGFyZSByZWplY3RlZC4KKyAq Lworc3RhdGljIHZvaWQKK3Rlc3RfaW52YWxpZF9hcmdzKGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gYXJnID0KKwkJeyAucGFyYW0gPSBJOTE1X0NPTlRFWFRf UEFSQU1fU1NFVSwKKwkJICAuY3R4X2lkID0gZ2VtX2NvbnRleHRfY3JlYXRlKGZkKSwKKwkJfTsK KwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW1fc3NldSBzc2V1ID0geyB9OworCXVu c2lnbmVkIGNoYXIgKnBhZ2VbMl07CisJdW5zaWduZWQgY2hhciAqYWRkcjsKKwl1bnNpZ25lZCBp bnQgc3o7CisKKwkvKiBnZXQgcGFyYW0gKi8KKworCS8qIEludmFsaWQgc2l6ZS4gKi8KKwlhcmcu c2l6ZSA9IDE7CisJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X2dldF9wYXJhbShmZCwgJmFy ZyksIC1FSU5WQUwpOworCisJLyogUXVlcnkgc2l6ZS4gKi8KKwlhcmcuc2l6ZSA9IDA7CisJaWd0 X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X2dldF9wYXJhbShmZCwgJmFyZyksIDApOworCXN6ID0g YXJnLnNpemU7CisKKwkvKiBCYWQgcG9pbnRlcnMuICovCisJaWd0X2Fzc2VydF9lcShfX2dlbV9j b250ZXh0X2dldF9wYXJhbShmZCwgJmFyZyksIC1FRkFVTFQpOworCWFyZy52YWx1ZSA9IC0xOwor CWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZhcmcpLCAtRUZBVUxU KTsKKwlhcmcudmFsdWUgPSAxOworCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9nZXRfcGFy YW0oZmQsICZhcmcpLCAtRUZBVUxUKTsKKworCS8qIFVubWFwcGVkLiAqLworCXBhZ2VbMF0gPSBt bWFwKDAsIDQwOTYsIFBST1RfV1JJVEUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAwKTsK KwlpZ3RfYXNzZXJ0KHBhZ2VbMF0gIT0gTUFQX0ZBSUxFRCk7CisJbWVtc2V0KHBhZ2VbMF0sIDAs IHNpemVvZihzc2V1KSk7CisJbXVubWFwKHBhZ2VbMF0sIDQwOTYpOworCWFyZy52YWx1ZSA9IHRv X3VzZXJfcG9pbnRlcihwYWdlWzBdKTsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfZ2V0 X3BhcmFtKGZkLCAmYXJnKSwgLUVGQVVMVCk7CisKKwkvKiBTdHJhZGRsZSBpbnRvIHVubWFwcGVk IGFyZWEuICovCisJcGFnZVswXSA9IG1tYXAoMCwgODE5MiwgUFJPVF9XUklURSwgTUFQX1BSSVZB VEUgfCBNQVBfQU5PTiwgLTEsIDApOworCWlndF9hc3NlcnQocGFnZVswXSAhPSBNQVBfRkFJTEVE KTsKKwltdW5tYXAocGFnZVswXSwgODE5Mik7CisJcGFnZVswXSA9IG1tYXAocGFnZVswXSwgNDA5 NiwKKwkJICAgICAgIFBST1RfV1JJVEUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04gfCBNQVBfRklY RUQsIC0xLCAwKTsKKwlpZ3RfYXNzZXJ0KHBhZ2VbMF0gIT0gTUFQX0ZBSUxFRCk7CisJbWVtc2V0 KHBhZ2VbMF0sIDAsIHNpemVvZihzc2V1KSk7CisJcGFnZVsxXSA9IG1tYXAoKHZvaWQgKikoKHVu c2lnbmVkIGxvbmcpcGFnZVswXSArIDQwOTYpLCA0MDk2LAorCQkgICAgICAgUFJPVF9XUklURSwg TUFQX1BSSVZBVEUgfCBNQVBfQU5PTiB8IE1BUF9GSVhFRCwgLTEsIDApOworCWlndF9hc3NlcnQo cGFnZVsxXSAhPSBNQVBfRkFJTEVEKTsKKwltZW1zZXQocGFnZVsxXSwgMCwgc2l6ZW9mKHNzZXUp KTsKKwltdW5tYXAocGFnZVsxXSwgNDA5Nik7CisJYXJnLnZhbHVlID0gdG9fdXNlcl9wb2ludGVy KHBhZ2VbMV0pIC0KKwkJICAgIHNpemVvZihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFy YW1fc3NldSkgKyA0OworCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9nZXRfcGFyYW0oZmQs ICZhcmcpLCAtRUZBVUxUKTsKKwltdW5tYXAocGFnZVswXSwgNDA5Nik7CisKKwkvKiBTdHJhZGRs ZSBpbnRvIHJlYWQtb25seSBhcmVhLiAqLworCXBhZ2VbMF0gPSBtbWFwKDAsIDgxOTIsIFBST1Rf V1JJVEUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKKwlpZ3RfYXNzZXJ0KHBhZ2Vb MF0gIT0gTUFQX0ZBSUxFRCk7CisJbXVubWFwKHBhZ2VbMF0sIDgxOTIpOworCXBhZ2VbMF0gPSBt bWFwKHBhZ2VbMF0sIDQwOTYsCisJCSAgICAgICBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSB8IE1B UF9BTk9OIHwgTUFQX0ZJWEVELCAtMSwgMCk7CisJaWd0X2Fzc2VydChwYWdlWzBdICE9IE1BUF9G QUlMRUQpOworCW1lbXNldChwYWdlWzBdLCAwLCBzaXplb2Yoc3NldSkpOworCXBhZ2VbMV0gPSBt bWFwKCh2b2lkICopKCh1bnNpZ25lZCBsb25nKXBhZ2VbMF0gKyA0MDk2KSwgNDA5NiwKKwkJICAg ICAgIFBST1RfV1JJVEUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04gfCBNQVBfRklYRUQsIC0xLCAw KTsKKwlpZ3RfYXNzZXJ0KHBhZ2VbMV0gIT0gTUFQX0ZBSUxFRCk7CisJbWVtc2V0KHBhZ2VbMV0s IDAsIHNpemVvZihzc2V1KSk7CisJaWd0X2Fzc2VydChtcHJvdGVjdChwYWdlWzFdLCA0MDk2LCBQ Uk9UX1JFQUQpID09IDApOworCWFyZy52YWx1ZSA9IHRvX3VzZXJfcG9pbnRlcihwYWdlWzFdIC0g c2l6ZW9mKHNzZXUpICsgNCk7CisJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X2dldF9wYXJh bShmZCwgJmFyZyksIC1FRkFVTFQpOworCW11bm1hcChwYWdlWzBdLCA0MDk2KTsKKwltdW5tYXAo cGFnZVsxXSwgNDA5Nik7CisKKwkvKiBzZXQgcGFyYW0gKi8KKworCS8qIEludmFsaWQgc2l6ZXMu ICovCisJYXJnLnNpemUgPSAxOworCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFy YW0oZmQsICZhcmcpLCAtRUlOVkFMKTsKKworCWFyZy5zaXplID0gMDsKKwlpZ3RfYXNzZXJ0X2Vx KF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVJTlZBTCk7CisJYXJnLnNpemUg PSBzejsKKworCS8qIEJhZCBwb2ludGVycy4gKi8KKwlhcmcudmFsdWUgPSAwOworCWlndF9hc3Nl cnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRUZBVUxUKTsKKwlhcmcu dmFsdWUgPSAtMTsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCAm YXJnKSwgLUVGQVVMVCk7CisJYXJnLnZhbHVlID0gMTsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2Nv bnRleHRfc2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVGQVVMVCk7CisKKwkvKiBHZXQgdmFsaWQgU1NF VS4gKi8KKwlhcmcudmFsdWUgPSB0b191c2VyX3BvaW50ZXIoJnNzZXUpOworCWlndF9hc3NlcnRf ZXEoX19nZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZhcmcpLCAwKTsKKworCS8qIFVubWFwcGVk LiAqLworCXBhZ2VbMF0gPSBtbWFwKDAsIDQwOTYsIFBST1RfV1JJVEUsIE1BUF9QUklWQVRFIHwg TUFQX0FOT04sIC0xLCAwKTsKKwlpZ3RfYXNzZXJ0KHBhZ2VbMF0gIT0gTUFQX0ZBSUxFRCk7CisJ bWVtY3B5KHBhZ2VbMF0sICZzc2V1LCBzaXplb2Yoc3NldSkpOworCW11bm1hcChwYWdlWzBdLCA0 MDk2KTsKKwlhcmcudmFsdWUgPSB0b191c2VyX3BvaW50ZXIocGFnZVswXSk7CisJaWd0X2Fzc2Vy dF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyksIC1FRkFVTFQpOworCisJLyog U3RyYWRkbGUgaW50byB1bm1hcHBlZCBhcmVhLiAqLworCXBhZ2VbMF0gPSBtbWFwKDAsIDgxOTIs IFBST1RfV1JJVEUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKKwlpZ3RfYXNzZXJ0 KHBhZ2VbMF0gIT0gTUFQX0ZBSUxFRCk7CisJbXVubWFwKHBhZ2VbMF0sIDgxOTIpOworCXBhZ2Vb MF0gPSBtbWFwKHBhZ2VbMF0sIDQwOTYsCisJCSAgICAgICBQUk9UX1dSSVRFLCBNQVBfUFJJVkFU RSB8IE1BUF9BTk9OIHwgTUFQX0ZJWEVELCAtMSwgMCk7CisJaWd0X2Fzc2VydChwYWdlWzBdICE9 IE1BUF9GQUlMRUQpOworCXBhZ2VbMV0gPSBtbWFwKCh2b2lkICopKCh1bnNpZ25lZCBsb25nKXBh Z2VbMF0gKyA0MDk2KSwgNDA5NiwKKwkJICAgICAgIFBST1RfV1JJVEUsIE1BUF9QUklWQVRFIHwg TUFQX0FOT04gfCBNQVBfRklYRUQsIC0xLCAwKTsKKwlpZ3RfYXNzZXJ0KHBhZ2VbMV0gIT0gTUFQ X0ZBSUxFRCk7CisJYWRkciA9IHBhZ2VbMV0gLSBzaXplb2Yoc3NldSkgKyA0OworCW1lbWNweShh ZGRyLCAmc3NldSwgc2l6ZW9mKHNzZXUpKTsKKwltdW5tYXAocGFnZVsxXSwgNDA5Nik7CisJYXJn LnZhbHVlID0gdG9fdXNlcl9wb2ludGVyKGFkZHIpOworCWlndF9hc3NlcnRfZXEoX19nZW1fY29u dGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRUZBVUxUKTsKKwltdW5tYXAocGFnZVswXSwgNDA5 Nik7CisKKwlnZW1fY29udGV4dF9kZXN0cm95KGZkLCBhcmcuY3R4X2lkKTsKK30KKworLyoKKyAq IFZlcmlmeSB0aGF0IGdndHQgbWFwcGVkIGFyZWEgY2FuIGJlIHVzZWQgYXMgdGhlIHNzZXUgcG9p bnRlci4KKyAqLworc3RhdGljIHZvaWQKK3Rlc3RfZ2d0dF9hcmdzKGludCBmZCkKK3sKKwlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW1fc3NldSAqc3NldTsKKwlzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX2NvbnRleHRfcGFyYW0gYXJnID0KKwkJeyAucGFyYW0gPSBJOTE1X0NPTlRFWFRfUEFS QU1fU1NFVSwKKwkJICAuY3R4X2lkID0gZ2VtX2NvbnRleHRfY3JlYXRlKGZkKSwKKwkJICAuc2l6 ZSA9IHNpemVvZigqc3NldSksCisJCX07CisJdWludDMyX3QgYm87CisKKwlibyA9IGdlbV9jcmVh dGUoZmQsIDQwOTYpOworCWFyZy52YWx1ZSA9IHRvX3VzZXJfcG9pbnRlcihnZW1fbW1hcF9fZ3R0 KGZkLCBibywgNDA5NiwKKwkJCQkJCSAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkpOworCisJaWd0 X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X2dldF9wYXJhbShmZCwgJmFyZyksIDApOworCWlndF9h c3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAwKTsKKworCW11bm1h cCgodm9pZCAqKWFyZy52YWx1ZSwgNDA5Nik7CisJZ2VtX2Nsb3NlKGZkLCBibyk7CisJZ2VtX2Nv bnRleHRfZGVzdHJveShmZCwgYXJnLmN0eF9pZCk7Cit9CisKKy8qCisgKiBWZXJpZnkgdGhhdCBp bnZhbGlkIFNTRVUgdmFsdWVzIGFyZSByZWplY3RlZC4KKyAqLworc3RhdGljIHZvaWQKK3Rlc3Rf aW52YWxpZF9zc2V1KGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFy YW1fc3NldSBkZXZpY2Vfc3NldSA9IHsgfTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRf cGFyYW1fc3NldSBzc2V1ID0geyB9OworCXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJh bSBhcmcgPQorCQl7IC5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9TU0VVLAorCQkgIC5jdHhf aWQgPSBnZW1fY29udGV4dF9jcmVhdGUoZmQpLAorCQkgIC5zaXplID0gc2l6ZW9mKHNzZXUpLAor CQl9OworCXVuc2lnbmVkIGludCBpOworCisJLyogRmV0Y2ggdGhlIGRldmljZSBkZWZhdWx0cy4g Ki8KKwlhcmcudmFsdWUgPSB0b191c2VyX3BvaW50ZXIoJmRldmljZV9zc2V1KTsKKwlnZW1fY29u dGV4dF9nZXRfcGFyYW0oZmQsICZhcmcpOworCisJYXJnLnZhbHVlID0gdG9fdXNlcl9wb2ludGVy KCZzc2V1KTsKKworCS8qIFRyeSBhbGwgc2xpY2UgbWFza3Mga25vd24gdG8gYmUgaW52YWxpZC4g Ki8KKwlzc2V1ID0gZGV2aWNlX3NzZXU7CisJZm9yIChpID0gMTsgaSA8PSAoOCAtIF9fc2xpY2Vf Y291bnRfXyk7IGkrKykgeworCQlzc2V1LnNsaWNlX21hc2sgPSBtYXNrX3BsdXMoX19zbGljZV9t YXNrX18sIGkpOworCQlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCAm YXJnKSwgLUVJTlZBTCk7CisJfQorCisJLyogMCBzbGljZXMuICovCisJc3NldS5zbGljZV9tYXNr ID0gMDsKKwlpZ3RfYXNzZXJ0X2VxKC1FSU5WQUwsIF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZk LCAmYXJnKSk7CisKKwkvKiBUcnkgYWxsIHN1YnNsaWNlIG1hc2tzIGtub3duIHRvIGJlIGludmFs aWQuICovCisJc3NldSA9IGRldmljZV9zc2V1OworCWZvciAoaSA9IDE7IGkgPD0gKDggLSBfX3N1 YnNsaWNlX2NvdW50X18pOyBpKyspIHsKKwkJc3NldS5zdWJzbGljZV9tYXNrID0gbWFza19wbHVz KF9fc3Vic2xpY2VfbWFza19fLCBpKTsKKwkJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3Nl dF9wYXJhbShmZCwgJmFyZyksIC1FSU5WQUwpOworCX0KKworCS8qIDAgc3Vic2xpY2VzLiAqLwor CXNzZXUuc3Vic2xpY2VfbWFzayA9IDA7CisJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3Nl dF9wYXJhbShmZCwgJmFyZyksIC1FSU5WQUwpOworCisJLyogVHJ5IG51bWJlciBvZiBFVXMgc3Vw ZXJpb3IgdG8gdGhlIG1heCBhdmFpbGFibGUuICovCisJc3NldSA9IGRldmljZV9zc2V1OworCXNz ZXUubWluX2V1c19wZXJfc3Vic2xpY2UgPSBkZXZpY2Vfc3NldS5tYXhfZXVzX3Blcl9zdWJzbGlj ZSArIDE7CisJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyks IC1FSU5WQUwpOworCisJc3NldSA9IGRldmljZV9zc2V1OworCXNzZXUubWF4X2V1c19wZXJfc3Vi c2xpY2UgPSBkZXZpY2Vfc3NldS5tYXhfZXVzX3Blcl9zdWJzbGljZSArIDE7CisJaWd0X2Fzc2Vy dF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyksIC1FSU5WQUwpOworCisJLyog VHJ5IHRvIHByb2dyYW0gMCBtYXggRVVzLiAqLworCXNzZXUgPSBkZXZpY2Vfc3NldTsKKwlzc2V1 Lm1heF9ldXNfcGVyX3N1YnNsaWNlID0gMDsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRf c2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVJTlZBTCk7CisKKwkvKiBNaW4gPiBtYXggKi8KKwlzc2V1 ID0gZGV2aWNlX3NzZXU7CisJc3NldS5taW5fZXVzX3Blcl9zdWJzbGljZSA9IHNzZXUubWF4X2V1 c19wZXJfc3Vic2xpY2U7CisJc3NldS5tYXhfZXVzX3Blcl9zdWJzbGljZSA9IDE7CisJaWd0X2Fz c2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyksIC1FSU5WQUwpOworCisJ aWYgKF9faW50ZWxfZ2VuX18gIT0gMTEpCisJCWdvdG8gb3V0OworCisJLyogU3Vic2V0IG9mIHN1 YnNsaWNlcyBidXQgc2xpY2UgbWFzayBncmVhdGVyIHRoYW4gb25lLiAqLworCWlmIChfX3NsaWNl X2NvdW50X18gPiAxKSB7CisJCXNzZXUgPSBkZXZpY2Vfc3NldTsKKwkJc3NldS5zdWJzbGljZV9t YXNrID0gbWFza19taW51c19vbmUoc3NldS5zdWJzbGljZV9tYXNrKTsKKwkJaWd0X2Fzc2VydF9l cShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyksIC1FSU5WQUwpOworCX0KKworCS8q IE9kZCBzdWJzbGljZXMgYWJvdmUgZm91ci4gKi8KKwlzc2V1ID0gZGV2aWNlX3NzZXU7CisJc3Nl dS5zbGljZV9tYXNrID0gMHgxOworCXNzZXUuc3Vic2xpY2VfbWFzayA9IG1hc2tfbWludXNfb25l KHNzZXUuc3Vic2xpY2VfbWFzayk7CisJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9w YXJhbShmZCwgJmFyZyksIC1FSU5WQUwpOworCisJLyogTW9yZSB0aGFuIGhhbGYgc3Vic2xpY2Vz IHdpdGggb25lIHNsaWNlLiAqLworCXNzZXUgPSBkZXZpY2Vfc3NldTsKKwlzc2V1LnNsaWNlX21h c2sgPSAweDE7CisJc3NldS5zdWJzbGljZV9tYXNrID0gbWFza19taW51cyhzc2V1LnN1YnNsaWNl X21hc2ssCisJCQkJCV9fc3Vic2xpY2VfY291bnRfXyAvIDIgLSAxKTsKKwlpZ3RfYXNzZXJ0X2Vx KF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVJTlZBTCk7CisKKwkvKiBWTUUg Ki8KKworCS8qIFNsaWNlIGNvdW50IGJldHdlZW4gb25lIGFuZCBtYXguICovCisJaWYgKF9fc2xp Y2VfY291bnRfXyA+IDIpIHsKKwkJc3NldSA9IGRldmljZV9zc2V1OworCQlzc2V1LnNsaWNlX21h c2sgPSBtYXNrX21pbnVzX29uZShzc2V1LnNsaWNlX21hc2spOworCQlpZ3RfYXNzZXJ0X2VxKF9f Z2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVJTlZBTCk7CisJfQorCisJLyogTGVz cyB0aGFuIGhhbGYgc3Vic2xpY2VzIHdpdGggb25lIHNsaWNlLiAqLworCXNzZXUgPSBkZXZpY2Vf c3NldTsKKwlzc2V1LnNsaWNlX21hc2sgPSAweDE7CisJc3NldS5zdWJzbGljZV9tYXNrID0gbWFz a19taW51cyhzc2V1LnN1YnNsaWNlX21hc2ssCisJCQkJCV9fc3Vic2xpY2VfY291bnRfXyAvIDIg KyAxKTsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCAmYXJnKSwg LUVJTlZBTCk7CisKK291dDoKKwlnZW1fY29udGV4dF9kZXN0cm95KGZkLCBhcmcuY3R4X2lkKTsK K30KKworLyogVmVyaWZ5IHRoYXQgdGhlIGtlcm5lbCByZXR1cm5zIGEgY29ycmVjdCBlcnJvciB2 YWx1ZSBvbiBHZW4gPCA4LiAqLworc3RhdGljIHZvaWQKK2luaXRfY29udGV4dHMoaW50IGZkLCB1 aW50MzJfdCAqY3R4LCB1bnNpZ25lZCBpbnQgbnVtLAorCSAgICAgIHVpbnQ2NF90IG1hc2swLCB1 aW50NjRfdCBtYXNrMSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlndF9hc3NlcnRfZXEobnVt LCAyKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykKKwkJY3R4W2ldID0gZ2VtX2NvbnRl eHRfY3JlYXRlKGZkKTsKKworCWNvbnRleHRfc2V0X3NsaWNlX21hc2soZmQsIGN0eFswXSwgbWFz azApOworCWNvbnRleHRfc2V0X3NsaWNlX21hc2soZmQsIGN0eFsxXSwgbWFzazEpOworfQorCitz dGF0aWMgdm9pZAorZGVmX3NzZXUoc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtX3Nz ZXUgKnNzZXUsCisJIHN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbV9zc2V1ICpkZWYp Cit7CisJbWVtY3B5KHNzZXUsIGRlZiwgc2l6ZW9mKCpzc2V1KSk7Cit9CisKK3N0YXRpYyB2b2lk CitwZ19zc2V1KHN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbV9zc2V1ICpzc2V1LAor CSBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW1fc3NldSAqZGVmKQoreworCXVuc2ln bmVkIGludCBzczsKKworCW1lbWNweShzc2V1LCBkZWYsIHNpemVvZigqc3NldSkpOworCisJc3Mg PSBfX2J1aWx0aW5fcG9wY291bnQoZGVmLT5zdWJzbGljZV9tYXNrKTsKKworCS8qIEdlbjExIFZN RSBmcmllbmRseSBjb25maWd1cmF0aW9uLiAqLworCXNzZXUtPnNsaWNlX21hc2sgPSAxOworCXNz ZXUtPnN1YnNsaWNlX21hc2sgPSB+KH4wIDw8IChzcyAvIDIpKTsKK30KKworc3RhdGljIHZvaWQK K29hX3NzZXUoc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtX3NzZXUgKnNzZXUsCisJ IHN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbV9zc2V1ICpkZWYpCit7CisJaWYgKF9f aW50ZWxfZ2VuX18gPT0gMTEpCisJCXBnX3NzZXUoc3NldSwgZGVmKTsKKwllbHNlCisJCWRlZl9z c2V1KHNzZXUsIGRlZik7Cit9CisKK3N0YXRpYyB2b2lkCitnZXRfZGV2aWNlX3NzZXUoaW50IGZk LCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW1fc3NldSAqc3NldSkKK3sKKwlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gYXJnID0KKwkJeyAucGFyYW0gPSBJOTE1X0NP TlRFWFRfUEFSQU1fU1NFVSwKKwkJICAuc2l6ZSA9IHNpemVvZigqc3NldSksCisJCSAgLnZhbHVl ID0gdG9fdXNlcl9wb2ludGVyKHNzZXUpIH07CisKKwltZW1zZXQoc3NldSwgMCwgc2l6ZW9mKCpz c2V1KSk7CisJZ2VtX2NvbnRleHRfZ2V0X3BhcmFtKGZkLCAmYXJnKTsKK30KKworLyoKKyAqIFZl cmlmeSB0aGF0IHBvd2VyZ2F0aW5nIHNldHRpbmdzIGFyZSBwdXQgb24gaG9sZCB3aGlsZSBpOTE1 L3BlcmYgaXMKKyAqIGFjdGl2ZS4KKyAqLworc3RhdGljIHZvaWQKK3Rlc3RfcGVyZl9vYShpbnQg ZmQpCit7CisJdWludDY0X3QgcHJvcGVydGllc1tdID0geworCQkvKiBJbmNsdWRlIE9BIHJlcG9y dHMgaW4gc2FtcGxlcyAqLworCQlEUk1fSTkxNV9QRVJGX1BST1BfU0FNUExFX09BLCB0cnVlLAor CisJCS8qIE9BIHVuaXQgY29uZmlndXJhdGlvbiAqLworCQlEUk1fSTkxNV9QRVJGX1BST1BfT0Ff TUVUUklDU19TRVQsIDEsIC8qIHRlc3QgbWV0cmljICovCisJCURSTV9JOTE1X1BFUkZfUFJPUF9P QV9GT1JNQVQsIEk5MTVfT0FfRk9STUFUX0EzMnU0MF9BNHUzMl9COF9DOCwKKwkJRFJNX0k5MTVf UEVSRl9QUk9QX09BX0VYUE9ORU5ULCAyMCwKKwl9OworCXN0cnVjdCBkcm1faTkxNV9wZXJmX29w ZW5fcGFyYW0gcGFyYW0gPSB7CisJCS5mbGFncyA9IEk5MTVfUEVSRl9GTEFHX0ZEX0NMT0VYRUMg fAorCQlJOTE1X1BFUkZfRkxBR19GRF9OT05CTE9DSywKKwkJLm51bV9wcm9wZXJ0aWVzID0gQVJS QVlfU0laRShwcm9wZXJ0aWVzKSAvIDIsCisJCS5wcm9wZXJ0aWVzX3B0ciA9IHRvX3VzZXJfcG9p bnRlcihwcm9wZXJ0aWVzKSwKKwl9OworCXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJh bV9zc2V1IGRldmljZV9zc2V1LCBfcGdfc3NldSwgX29hX3NzZXU7CisJdW5zaWduZWQgaW50IHBn X3NsaWNlX2NvdW50LCBvYV9zbGljZV9jb3VudDsKKwl1aW50MzJfdCBjdHhbMl07CisJdW5zaWdu ZWQgaW50IGk7CisJaW50IHBlcmZfZmQ7CisKKwlnZXRfZGV2aWNlX3NzZXUoZmQsICZkZXZpY2Vf c3NldSk7CisJcGdfc3NldSgmX3BnX3NzZXUsICZkZXZpY2Vfc3NldSk7CisJb2Ffc3NldSgmX29h X3NzZXUsICZkZXZpY2Vfc3NldSk7CisJcGdfc2xpY2VfY291bnQgPSBfX2J1aWx0aW5fcG9wY291 bnQoX3BnX3NzZXUuc2xpY2VfbWFzayk7CisJb2Ffc2xpY2VfY291bnQgPSBfX2J1aWx0aW5fcG9w Y291bnQoX29hX3NzZXUuc2xpY2VfbWFzayk7CisKKwlpbml0X2NvbnRleHRzKGZkLCBjdHgsIEFS UkFZX1NJWkUoY3R4KSwKKwkJICAgICAgZGV2aWNlX3NzZXUuc2xpY2VfbWFzaywgX3BnX3NzZXUu c2xpY2VfbWFzayk7CisKKwkvKgorCSAqIFRlc3QgZmFsc2UgcG9zaXRpdmVzIHdpdGggcHJlZGlj YXRlcyAob25seSBhdmFpbGFibGUgb24KKwkgKiBiZWZvcmUgR2VuMTApLgorCSAqLworCWlmIChf X2ludGVsX2dlbl9fIDwgMTApCisJCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwg Y3R4WzFdLCBfX3NsaWNlX2NvdW50X18pLAorCQkJICAgICAgMCk7CisKKwlpZ3RfYXNzZXJ0X2Vx KHJlYWRfc2xpY2VfY291bnQoZmQsIGN0eFswXSwgMCksIF9fc2xpY2VfY291bnRfXyk7CisJaWd0 X2Fzc2VydF9lcShyZWFkX3NsaWNlX2NvdW50KGZkLCBjdHhbMV0sIDApLCBwZ19zbGljZV9jb3Vu dCk7CisKKwkvKgorCSAqIE5vdyBvcGVuIGk5MTUvcGVyZiBhbmQgdmVyaWZ5IHRoYXQgYWxsIGNv bnRleHRzIGhhdmUgYmVlbgorCSAqIHJlY29uZmlndXJlZCB0byB0aGUgZGV2aWNlJ3MgZGVmYXVs dC4KKwkgKi8KKwlwZXJmX2ZkID0gaWd0X2lvY3RsKGZkLCBEUk1fSU9DVExfSTkxNV9QRVJGX09Q RU4sICZwYXJhbSk7CisJaWd0X2Fzc2VydF9mZChwZXJmX2ZkKTsKKworCWlmIChfX2ludGVsX2dl bl9fIDwgMTApCisJCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4WzFdLCBw Z19zbGljZV9jb3VudCksIDApOworCisJaWd0X2Fzc2VydF9lcShyZWFkX3NsaWNlX2NvdW50KGZk LCBjdHhbMF0sIDApLCBvYV9zbGljZV9jb3VudCk7CisJaWd0X2Fzc2VydF9lcShyZWFkX3NsaWNl X2NvdW50KGZkLCBjdHhbMV0sIDApLCBvYV9zbGljZV9jb3VudCk7CisJaWYgKF9faW50ZWxfZ2Vu X18gPT0gMTEpIHsKKwkJaWd0X2Fzc2VydF9lcShyZWFkX3N1YnNsaWNlX2NvdW50KGZkLCBjdHhb MF0pLAorCQkJICAgICAgX19zdWJzbGljZV9jb3VudF9fIC8gMik7CisJCWlndF9hc3NlcnRfZXEo cmVhZF9zdWJzbGljZV9jb3VudChmZCwgY3R4WzFdKSwKKwkJCSAgICAgIF9fc3Vic2xpY2VfY291 bnRfXyAvIDIpOworCX0KKworCWNsb3NlKHBlcmZfZmQpOworCisJLyoKKwkgKiBBZnRlciBjbG9z aW5nIHRoZSBwZXJmIHN0cmVhbSwgY29uZmlndXJhdGlvbnMgc2hvdWxkIGJlCisJICogYmFjayB0 byB0aGUgcHJvZ3JhbW1lZCB2YWx1ZXMuCisJICovCisJaWYgKF9faW50ZWxfZ2VuX18gPCAxMCkK KwkJaWd0X2Fzc2VydF9lcShyZWFkX3NsaWNlX2NvdW50KGZkLCBjdHhbMV0sIF9fc2xpY2VfY291 bnRfXyksIDApOworCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4WzBdLCAw KSwgX19zbGljZV9jb3VudF9fKTsKKwlpZ3RfYXNzZXJ0X2VxKHJlYWRfc2xpY2VfY291bnQoZmQs IGN0eFsxXSwgMCksIHBnX3NsaWNlX2NvdW50KTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKGN0eCk7IGkrKykKKwkJZ2VtX2NvbnRleHRfZGVzdHJveShmZCwgY3R4W2ldKTsKKworCS8q CisJICogT3BlbiBpOTE1L3BlcmYgZmlyc3QgYW5kIHZlcmlmeSB0aGF0IGFsbCBjb250ZXh0cyBj cmVhdGVkCisJICogYWZ0ZXJ3YXJkIGFyZSBjb25maWd1cmVkIHRvIHRoZSBkZXZpY2UncyBkZWZh dWx0LgorCSAqLworCXBlcmZfZmQgPSBpZ3RfaW9jdGwoZmQsIERSTV9JT0NUTF9JOTE1X1BFUkZf T1BFTiwgJnBhcmFtKTsKKwlpZ3RfYXNzZXJ0X2ZkKHBlcmZfZmQpOworCisJaW5pdF9jb250ZXh0 cyhmZCwgY3R4LCBBUlJBWV9TSVpFKGN0eCksCisJCSAgICAgIGRldmljZV9zc2V1LnNsaWNlX21h c2ssIF9wZ19zc2V1LnNsaWNlX21hc2spOworCisJLyoKKwkgKiBDaGVjayB0aGUgZGV2aWNlJ3Mg ZGVmYXVsdCB2YWx1ZXMsIGRlc3BpdGUgc2V0dGluZworCSAqIG90aGVyd2lzZS4KKwkgKi8KKwlp ZiAoX19pbnRlbF9nZW5fXyA8IDEwKQorCQlpZ3RfYXNzZXJ0X2VxKHJlYWRfc2xpY2VfY291bnQo ZmQsIGN0eFsxXSwgcGdfc2xpY2VfY291bnQpLCAwKTsKKworCWlndF9hc3NlcnRfZXEocmVhZF9z bGljZV9jb3VudChmZCwgY3R4WzBdLCAwKSwgb2Ffc2xpY2VfY291bnQpOworCWlndF9hc3NlcnRf ZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4WzFdLCAwKSwgb2Ffc2xpY2VfY291bnQpOworCWlm IChfX2ludGVsX2dlbl9fID09IDExKSB7CisJCWlndF9hc3NlcnRfZXEocmVhZF9zdWJzbGljZV9j b3VudChmZCwgY3R4WzBdKSwKKwkJCSAgICAgIF9fc3Vic2xpY2VfY291bnRfXyAvIDIpOworCQlp Z3RfYXNzZXJ0X2VxKHJlYWRfc3Vic2xpY2VfY291bnQoZmQsIGN0eFsxXSksCisJCQkgICAgICBf X3N1YnNsaWNlX2NvdW50X18gLyAyKTsKKwl9CisKKwljbG9zZShwZXJmX2ZkKTsKKworCS8qCisJ ICogQWZ0ZXIgY2xvc2luZyB0aGUgcGVyZiBzdHJlYW0sIGNvbmZpZ3VyYXRpb25zIHNob3VsZCBi ZQorCSAqIGJhY2sgdG8gdGhlIHByb2dyYW1tZWQgdmFsdWVzLgorCSAqLworCWlmIChfX2ludGVs X2dlbl9fIDwgMTApCisJCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4WzFd LCBfX3NsaWNlX2NvdW50X18pLAorCQkJICAgICAgMCk7CisKKwlpZ3RfYXNzZXJ0X2VxKHJlYWRf c2xpY2VfY291bnQoZmQsIGN0eFswXSwgMCksIF9fc2xpY2VfY291bnRfXyk7CisJaWd0X2Fzc2Vy dF9lcShyZWFkX3NsaWNlX2NvdW50KGZkLCBjdHhbMV0sIDApLCBwZ19zbGljZV9jb3VudCk7CisK Kwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjdHgpOyBpKyspCisJCWdlbV9jb250ZXh0X2Rl c3Ryb3koZmQsIGN0eFtpXSk7Cit9CisKK3N0YXRpYyBpZ3Rfc3Bpbl90ICogX19zcGluX3BvbGwo aW50IGZkLCB1aW50MzJfdCBjdHgsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IGln dF9zcGluX2ZhY3Rvcnkgb3B0cyA9IHsKKwkJLmN0eCA9IGN0eCwKKwkJLmVuZ2luZSA9IGZsYWdz LAorCX07CisKKwlpZiAoZ2VtX2Nhbl9zdG9yZV9kd29yZChmZCwgZmxhZ3MpKQorCQlvcHRzLmZs YWdzIHw9IElHVF9TUElOX1BPTExfUlVOOworCisJcmV0dXJuIF9faWd0X3NwaW5fYmF0Y2hfZmFj dG9yeShmZCwgJm9wdHMpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3NwaW5fd2FpdChp bnQgZmQsIGlndF9zcGluX3QgKnNwaW4pCit7CisJc3RydWN0IHRpbWVzcGVjIHN0YXJ0ID0geyB9 OworCisJaWd0X25zZWNfZWxhcHNlZCgmc3RhcnQpOworCisJaWYgKHNwaW4tPnJ1bm5pbmcpIHsK KwkJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gMDsKKworCQl3aGlsZSAoIVJFQURfT05DRSgqc3Bp bi0+cnVubmluZykpIHsKKwkJCXVuc2lnbmVkIGxvbmcgdCA9IGlndF9uc2VjX2VsYXBzZWQoJnN0 YXJ0KTsKKworCQkJaWYgKCh0IC0gdGltZW91dCkgPiAyNTBlNikgeworCQkJCXRpbWVvdXQgPSB0 OworCQkJCWlndF93YXJuKCJTcGlubmVyIG5vdCBydW5uaW5nIGFmdGVyICUuMmZtc1xuIiwKKwkJ CQkJIChkb3VibGUpdCAvIDFlNik7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlpZ3RfZGVidWco Il9fc3Bpbl93YWl0IC0gdXNsZWVwIG1vZGVcbiIpOworCQl1c2xlZXAoNTAwZTMpOyAvKiBCZXR0 ZXIgdGhhbiBub3RoaW5nISAqLworCX0KKworCXJldHVybiBpZ3RfbnNlY19lbGFwc2VkKCZzdGFy dCk7Cit9CisKK3N0YXRpYyBpZ3Rfc3Bpbl90ICogX19zcGluX3N5bmMoaW50IGZkLCB1aW50MzJf dCBjdHgsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJaWd0X3NwaW5fdCAqc3BpbiA9IF9fc3Bp bl9wb2xsKGZkLCBjdHgsIGZsYWdzKTsKKworCV9fc3Bpbl93YWl0KGZkLCBzcGluKTsKKworCXJl dHVybiBzcGluOworfQorCitzdGF0aWMgdWludDMyX3QKK3JlYWRfc2xpY2VfY291bnRfYnVzeShp bnQgZmQsIHVpbnQzMl90IGNvbnRleHQsIHVpbnQzMl90IGV4cGVjdGVkLAorCQkgICAgICBpZ3Rf c3Bpbl90ICpzcGluKQoreworCXJldHVybiBfX3JlYWRfc2xpY2VfY291bnQoZmQsIGNvbnRleHQs IGV4cGVjdGVkLCBzcGluKTsKK30KKworI2RlZmluZSBURVNUX0lETEUJKDEpCisjZGVmaW5lIFRF U1RfQlVTWQkoMikKKyNkZWZpbmUgVEVTVF9SRVNFVAkoNCkKKyNkZWZpbmUgVEVTVF9IQU5HCSg4 KQorI2RlZmluZSBURVNUX1NVU1BFTkQJKDE2KQorCitzdGF0aWMgaWd0X3NwaW5fdCAqCitfX3By ZV9zZXQoaW50IGZkLCB1bnNpZ25lZCBmbGFncywgdWludDMyX3QgY3R4KQoreworCWlmIChmbGFn cyAmIFRFU1RfQlVTWSkKKwkJcmV0dXJuIF9fc3Bpbl9zeW5jKGZkLCBjdHgsIEk5MTVfRVhFQ19S RU5ERVIpOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpZ3Rfc3Bpbl90ICoKK19fcG9z dF9zZXQoaW50IGZkLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHVpbnQzMl90IGN0eCwgaWd0X3NwaW5f dCAqc3BpbiwKKwkgICB1bnNpZ25lZCBpbnQgZXhwZWN0ZWQpCit7CisJaWYgKGZsYWdzICYgVEVT VF9SRVNFVCkKKwkJaWd0X2ZvcmNlX2dwdV9yZXNldChmZCk7CisKKwlpZiAoKGZsYWdzICYgVEVT VF9CVVNZKSAmJiAhKGZsYWdzICYgKFRFU1RfUkVTRVQgfCBURVNUX0hBTkcpKSkKKwkJaWd0X2Fz c2VydF9lcShyZWFkX3NsaWNlX2NvdW50X2J1c3koZmQsIGN0eCwgMCwgc3BpbiksCisJCQkgICAg ICBleHBlY3RlZCk7CisJZWxzZQorCQlpZ3RfYXNzZXJ0X2VxKHJlYWRfc2xpY2VfY291bnQoZmQs IGN0eCwgMCksIGV4cGVjdGVkKTsKKworCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChm ZCwgMCwgMCksIF9fc2xpY2VfY291bnRfXyk7CisKKwlpZiAoc3BpbikKKwkJaWd0X3NwaW5fYmF0 Y2hfZnJlZShmZCwgc3Bpbik7CisKKwlpZiAoZmxhZ3MgJiBURVNUX0lETEUpCisJCWlndF9kcm9w X2NhY2hlc19zZXQoZmQsIERST1BfUkVUSVJFIHwgRFJPUF9JRExFIHwgRFJPUF9BQ1RJVkUpOwor CisJaWYgKGZsYWdzICYgVEVTVF9TVVNQRU5EKQorCQlpZ3Rfc3lzdGVtX3N1c3BlbmRfYXV0b3Jl c3VtZShTVVNQRU5EX1NUQVRFX01FTSwKKwkJCQkJICAgICAgU1VTUEVORF9URVNUX05PTkUpOwor CisJaWd0X2Fzc2VydF9lcShyZWFkX3NsaWNlX2NvdW50KGZkLCBjdHgsIDApLCBleHBlY3RlZCk7 CisJaWd0X2Fzc2VydF9lcShyZWFkX3NsaWNlX2NvdW50KGZkLCAwLCAwKSwgX19zbGljZV9jb3Vu dF9fKTsKKworCXJldHVybiBOVUxMOworfQorCisvKgorICogVGVzdCBjb250ZXh0IHJlLWNvbmZp Z3VyYXRpb24gd2l0aCBlaXRoZXIgaWRsZSBvciBidXN5IGNvbnRleHRzLgorICovCitzdGF0aWMg dm9pZAordGVzdF9keW5hbWljKGludCBmZCwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVj dCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbV9zc2V1IGRldmljZV9zc2V1OworCXN0cnVjdCBk cm1faTkxNV9nZW1fY29udGV4dF9wYXJhbV9zc2V1IHNzZXUgPSB7IH07CisJc3RydWN0IGRybV9p OTE1X2dlbV9jb250ZXh0X3BhcmFtIGFyZyA9CisJCXsgLnBhcmFtID0gSTkxNV9DT05URVhUX1BB UkFNX1NTRVUsCisJCSAgLmN0eF9pZCA9IGdlbV9jb250ZXh0X2NyZWF0ZShmZCksCisJCSAgLnNp emUgPSBzaXplb2Yoc3NldSksCisJCSAgLnZhbHVlID0gdG9fdXNlcl9wb2ludGVyKCZzc2V1KSB9 OworCWlndF9zcGluX3QgKnNwaW4gPSBOVUxMOworCisJaWd0X3JlcXVpcmUoX19zbGljZV9jb3Vu dF9fID4gMSk7CisKKwlnZXRfZGV2aWNlX3NzZXUoZmQsICZkZXZpY2Vfc3NldSk7CisJZGVmX3Nz ZXUoJnNzZXUsICZkZXZpY2Vfc3NldSk7CisKKwkvKiBGaXJzdCBzZXQgdGhlIGRlZmF1bHQgbWFz ayAqLworCXNwaW4gPSBfX3ByZV9zZXQoZmQsIGZsYWdzLCBhcmcuY3R4X2lkKTsKKwlnZW1fY29u dGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpOworCXNwaW4gPSBfX3Bvc3Rfc2V0KGZkLCBmbGFncywg YXJnLmN0eF9pZCwgc3BpbiwKKwkJCSAgX19idWlsdGluX3BvcGNvdW50KHNzZXUuc2xpY2VfbWFz aykpOworCisJLyogVGhlbiBzZXQgYSBwb3dlcmdhdGVkIGNvbmZpZ3VyYXRpb24gKi8KKwlzcGlu ID0gX19wcmVfc2V0KGZkLCBmbGFncywgYXJnLmN0eF9pZCk7CisJcGdfc3NldSgmc3NldSwgJmRl dmljZV9zc2V1KTsKKwlnZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpOworCXNwaW4gPSBf X3Bvc3Rfc2V0KGZkLCBmbGFncywgYXJnLmN0eF9pZCwgc3BpbiwKKwkJCSAgX19idWlsdGluX3Bv cGNvdW50KHNzZXUuc2xpY2VfbWFzaykpOworCisJLyogUHV0IHRoZSBkZXZpY2UncyBkZWZhdWx0 IGJhY2sgYWdhaW4gKi8KKwlzcGluID0gX19wcmVfc2V0KGZkLCBmbGFncywgYXJnLmN0eF9pZCk7 CisJZGVmX3NzZXUoJnNzZXUsICZkZXZpY2Vfc3NldSk7CisJZ2VtX2NvbnRleHRfc2V0X3BhcmFt KGZkLCAmYXJnKTsKKwlzcGluID0gX19wb3N0X3NldChmZCwgZmxhZ3MsIGFyZy5jdHhfaWQsIHNw aW4sCisJCQkgIF9fYnVpbHRpbl9wb3Bjb3VudChzc2V1LnNsaWNlX21hc2spKTsKKworCS8qIE9u ZSBsYXN0IHBvd2VyZ2F0ZWQgY29uZmlnIGZvciB0aGUgcm9hZC4uLiAqLworCXNwaW4gPSBfX3By ZV9zZXQoZmQsIGZsYWdzLCBhcmcuY3R4X2lkKTsKKwlwZ19zc2V1KCZzc2V1LCAmZGV2aWNlX3Nz ZXUpOworCWdlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyk7CisJc3BpbiA9IF9fcG9zdF9z ZXQoZmQsIGZsYWdzLCBhcmcuY3R4X2lkLCBzcGluLAorCQkJICBfX2J1aWx0aW5fcG9wY291bnQo c3NldS5zbGljZV9tYXNrKSk7CisKKwlnZW1fY29udGV4dF9kZXN0cm95KGZkLCBhcmcuY3R4X2lk KTsKK30KKworaWd0X21haW4KK3sKKwl1bnNpZ25lZCBpbnQgbWF4X3NsaWNlcyA9IDMsIG1heF9z dWJzbGljZXMgPSAzOworCXVuc2lnbmVkIGludCBpOworCWludCBmZDsKKworCWlndF9maXh0dXJl IHsKKwkJZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKKwkJaWd0X3JlcXVpcmVf Z2VtKGZkKTsKKworCQlfX2ludGVsX2RldmlkX18gPSBpbnRlbF9nZXRfZHJtX2RldmlkKGZkKTsK KwkJX19pbnRlbF9nZW5fXyA9IGludGVsX2dlbihfX2ludGVsX2RldmlkX18pOworCisJCWlndF9y ZXF1aXJlKGtlcm5lbF9oYXNfcGVyX2NvbnRleHRfc3NldV9zdXBwb3J0KGZkKSk7CisKKwkJaWYg KF9faW50ZWxfZ2VuX18gPj0gMTEpCisJCQlfX3JlYWRfc2xpY2VfY291bnQgPSBnZW4xMV9yZWFk X3NsaWNlX2NvdW50OworCQllbHNlCisJCQlfX3JlYWRfc2xpY2VfY291bnQgPSBnZW44X3JlYWRf c2xpY2VfY291bnQ7CisJfQorCisJaWd0X3N1YnRlc3RfZ3JvdXAgeworCQlpZ3RfZml4dHVyZSB7 CisJCQlkcm1faTkxNV9nZXRwYXJhbV90IGdwOworCisJCQlncC5wYXJhbSA9IEk5MTVfUEFSQU1f U0xJQ0VfTUFTSzsKKwkJCWdwLnZhbHVlID0gKGludCAqKSAmX19zbGljZV9tYXNrX187CisJCQlk b19pb2N0bChmZCwgRFJNX0lPQ1RMX0k5MTVfR0VUUEFSQU0sICZncCk7CisJCQlfX3NsaWNlX2Nv dW50X18gPSBfX2J1aWx0aW5fcG9wY291bnQoX19zbGljZV9tYXNrX18pOworCisJCQlncC5wYXJh bSA9IEk5MTVfUEFSQU1fU1VCU0xJQ0VfTUFTSzsKKwkJCWdwLnZhbHVlID0gKGludCAqKSAmX19z dWJzbGljZV9tYXNrX187CisJCQlkb19pb2N0bChmZCwgRFJNX0lPQ1RMX0k5MTVfR0VUUEFSQU0s ICZncCk7CisJCQlfX3N1YnNsaWNlX2NvdW50X18gPQorCQkJCV9fYnVpbHRpbl9wb3Bjb3VudChf X3N1YnNsaWNlX21hc2tfXyk7CisJCX0KKworCQlpZ3Rfc3VidGVzdCgiaW52YWxpZC1hcmdzIikK KwkJCXRlc3RfaW52YWxpZF9hcmdzKGZkKTsKKworCQlpZ3Rfc3VidGVzdCgiaW52YWxpZC1zc2V1 IikKKwkJCXRlc3RfaW52YWxpZF9zc2V1KGZkKTsKKworCQlpZ3Rfc3VidGVzdCgiZ2d0dC1hcmdz IikKKwkJCXRlc3RfZ2d0dF9hcmdzKGZkKTsKKworCQlpZ3Rfc3VidGVzdCgiZW5naW5lcyIpCisJ CQl0ZXN0X2VuZ2luZXMoZmQpOworCisJCWZvciAoaSA9IDE7IGkgPCBtYXhfc2xpY2VzOyBpKysp IHsKKwkJCWlndF9zdWJ0ZXN0X2YoInNsaWNlLXBnLSVpIiwgaSkgeworCQkJCWlndF9yZXF1aXJl KF9fc2xpY2VfY291bnRfXyA+IGkpOworCisJCQkJdGVzdF9zbGljZV9wZyhmZCwgaSk7CisJCQl9 CisJCX0KKworCQlmb3IgKGkgPSAxOyBpIDwgbWF4X3N1YnNsaWNlczsgaSsrKSB7CisJCQlpZ3Rf c3VidGVzdF9mKCJzdWJzbGljZS1wZy0laSIsIGkpIHsKKwkJCQlpZ3RfcmVxdWlyZShfX3N1YnNs aWNlX2NvdW50X18gPj0gMik7CisKKwkJCQkvKgorCQkJCSAqIE9ubHkgYXZhaWxhYmxlIG9uIHNv bWUgQXRvbSBwbGF0Zm9ybXMgYW5kCisJCQkJICogR2VuMTArLgorCQkJCSAqLworCQkJCWlndF9y ZXF1aXJlKElTX0JST1hUT04oX19pbnRlbF9kZXZpZF9fKSB8fAorCQkJCQkgICAgSVNfR0VNSU5J TEFLRShfX2ludGVsX2RldmlkX18pIHx8CisJCQkJCSAgICBfX2ludGVsX2dlbl9fID49IDEwKTsK KworCQkJCXRlc3Rfc3Vic2xpY2VfcGcoZmQsIGkpOworCQkJfQorCQl9CisKKwkJaWd0X3N1YnRl c3QoInBlcmYtb2EiKSB7CisJCQlpZ3RfcmVxdWlyZShfX3NsaWNlX2NvdW50X18gPiAxKTsKKwor CQkJdGVzdF9wZXJmX29hKGZkKTsKKwkJfQorCisJCWlndF9zdWJ0ZXN0KCJkeW5hbWljIikKKwkJ CXRlc3RfZHluYW1pYyhmZCwgMCk7CisKKwkJaWd0X3N1YnRlc3QoImR5bmFtaWMtYnVzeSIpCisJ CQl0ZXN0X2R5bmFtaWMoZmQsIFRFU1RfQlVTWSk7CisKKwkJaWd0X3N1YnRlc3QoImR5bmFtaWMt cmVzZXQiKQorCQkJdGVzdF9keW5hbWljKGZkLCBURVNUX1JFU0VUKTsKKworCQlpZ3Rfc3VidGVz dCgiZHluYW1pYy1idXN5LXJlc2V0IikKKwkJCXRlc3RfZHluYW1pYyhmZCwgVEVTVF9CVVNZIHwg VEVTVF9SRVNFVCk7CisKKwkJaWd0X3N1YnRlc3QoImR5bmFtaWMtYnVzeS1oYW5nIikKKwkJCXRl c3RfZHluYW1pYyhmZCwgVEVTVF9CVVNZIHwgVEVTVF9IQU5HKTsKKworCQlpZ3Rfc3VidGVzdCgi ZHluYW1pYy1pZGxlIikKKwkJCXRlc3RfZHluYW1pYyhmZCwgVEVTVF9JRExFKTsKKworCQlpZ3Rf c3VidGVzdCgiZHluYW1pYy1zdXNwZW5kIikKKwkJCXRlc3RfZHluYW1pYyhmZCwgVEVTVF9TVVNQ RU5EKTsKKworCQlpZ3Rfc3VidGVzdCgiZHluYW1pYy1pZGxlLXN1c3BlbmQiKQorCQkJdGVzdF9k eW5hbWljKGZkLCBURVNUX0lETEUgfCBURVNUX1NVU1BFTkQpOworCX0KKworCWlndF9maXh0dXJl IHsKKwkJY2xvc2UoZmQpOworCX0KK30KZGlmZiAtLWdpdCBhL3Rlc3RzL21lc29uLmJ1aWxkIGIv dGVzdHMvbWVzb24uYnVpbGQKaW5kZXggZWFjZGMxYTcxMmNhLi4xOTkyYjA3NDBmMzUgMTAwNjQ0 Ci0tLSBhL3Rlc3RzL21lc29uLmJ1aWxkCisrKyBiL3Rlc3RzL21lc29uLmJ1aWxkCkBAIC0yODMs NiArMjgzLDE0IEBAIGZvcmVhY2ggcHJvZyA6IGdlbV9wcm9ncyArIGdlbjNfcHJvZ3MKIAl0ZXN0 X2xpc3QgKz0gcHJvZwogZW5kZm9yZWFjaAogCit0ZXN0X2V4ZWN1dGFibGVzICs9IGV4ZWN1dGFi bGUoJ2dlbV9jdHhfc3NldScsCisJICAgam9pbl9wYXRocygnaTkxNScsICdnZW1fY3R4X3NzZXUu YycpLAorCSAgIGRlcGVuZGVuY2llcyA6IHRlc3RfZGVwcyArIFsgbGliX2lndF9wZXJmIF0sCisJ ICAgaW5zdGFsbF9kaXIgOiBsaWJleGVjZGlyLAorCSAgIGluc3RhbGxfcnBhdGggOiBsaWJleGVj ZGlyX3JwYXRoZGlyLAorCSAgIGluc3RhbGwgOiB0cnVlKQordGVzdF9wcm9ncyArPSAnZ2VtX2N0 eF9zc2V1JworCiB0ZXN0X2V4ZWN1dGFibGVzICs9IGV4ZWN1dGFibGUoJ2dlbV9laW8nLAogCSAg IGpvaW5fcGF0aHMoJ2k5MTUnLCAnZ2VtX2Vpby5jJyksCiAJICAgZGVwZW5kZW5jaWVzIDogdGVz dF9kZXBzICsgWyByZWFsdGltZSBdLAotLSAKMi4xOS4xCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2lndC1kZXYK