From mboxrd@z Thu Jan 1 00:00:00 1970 From: Simon Derr Date: Wed, 24 Sep 2003 15:59:01 +0000 Subject: CPUSET Proposal MIME-Version: 1 Content-Type: multipart/mixed; boundary="-2118690558-860892202-1064419141=:173334" Message-Id: List-Id: To: linux-ia64@vger.kernel.org This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. ---2118690558-860892202-1064419141=:173334 Content-Type: TEXT/PLAIN; charset=US-ASCII Hi, We have developped a new feature in the Linux kernel, controlling CPU placements, which are useful on large SMP machines, especially NUMA ones. We call it CPUSETS, and we would highly appreciate to know about anyone who would be interested in such a feature. This has been somewhat inspired by the pset or cpumemset patches existing for Linux 2.4. CPUSETs are lightweight objects in the linux kernel that enable users to partition their multiprocessor machine by creating execution areas. A virtualization layer has been added so it becomes possible to split a machine in terms of CPUs. Furthermore, HPC applications often need to bind their processes to a specific CPU, and can achieve this by calling sched_setaffinity() in the recent Linux kernels. But running several HPC applications on a large system will result in several processes running on the same processor. This problem is addressed by the CPUSET mechanism. CPUSETS allow to: ---------------- 1/ create sets of CPUs on the system, and bind applications to them 2/ translate the masks of CPUs given to sched_setaffinity() so they stay inside the set of CPUs. With this mechanism, processors are virtualized, for the use of sched_setaffinity() and /proc information. Thus, any former application using this syscall to bind processes to processors will work with virtual CPUs without any change. 3/ provide a way to create sets of cpus *inside* a set of cpus : hence a system administrator can partition a system among users, and users can partition their partition among their applications. 4/ Change on the fly the execution area of a whole set of processes (to give more resources to a critical application, for example). ... 5/ In the future, probably associate a memory allocation policy (such as local node, or round robin) to a set of cpus. These features have been implemented as a kernel patch for Linux 2.6 and a suite of userland tools. You can find the associated manpages and a slightly more detailed explanation here: http://www.bullopensource.org/cpuset/ Any feedback, comment or opinion is welcome: Simon.Derr@Bull.net, Sylvain.Jaugey@bull.net Thanks, Simon and Sylvain. ---2118690558-860892202-1064419141=:173334 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="cpuset-2.6.0-test4-100903-0.cleaned.patch" Content-ID: Content-Description: Content-Disposition: attachment; filename="cpuset-2.6.0-test4-100903-0.cleaned.patch" Content-Transfer-Encoding: BASE64 LS0tIGxpbnV4LTIuNi4wLXRlc3Q0L01ha2VmaWxlCTIwMDMtMDgtMjMgMDE6 NTc6MjUuMDAwMDAwMDAwICswMjAwDQorKysgbGludXgtMi42LjAtdGVzdDQr Y3B1c2V0cy9NYWtlZmlsZQkyMDAzLTA5LTA5IDEwOjQ4OjUyLjAwMDAwMDAw MCArMDIwMA0KQEAgLTEsNyArMSw3IEBADQogVkVSU0lPTiA9IDINCiBQQVRD SExFVkVMID0gNg0KIFNVQkxFVkVMID0gMA0KLUVYVFJBVkVSU0lPTiA9IC10 ZXN0NA0KK0VYVFJBVkVSU0lPTiA9IC10ZXN0NCtjcHVzZXRzDQogDQogIyAq RE9DVU1FTlRBVElPTioNCiAjIFRvIHNlZSBhIGxpc3Qgb2YgdHlwaWNhbCB0 YXJnZXRzIGV4ZWN1dGUgIm1ha2UgaGVscCINCi0tLSBsaW51eC0yLjYuMC10 ZXN0NC9hcmNoL2lhNjQvS2NvbmZpZwkyMDAzLTA5LTA5IDEwOjM3OjQ4LjAw MDAwMDAwMCArMDIwMA0KKysrIGxpbnV4LTIuNi4wLXRlc3Q0K2NwdXNldHMv YXJjaC9pYTY0L0tjb25maWcJMjAwMy0wOS0wOSAxMDozOTo1My4wMDAwMDAw MDAgKzAyMDANCkBAIC0zODgsNiArMzg4LDM3IEBADQogDQogCSAgSWYgeW91 IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi4NCiANCitjb25m aWcgQ1BVU0VUUw0KKwlib29sICJjcHVzZXRzIg0KKwlkZXBlbmRzIG9uIFNN UA0KKwloZWxwDQorCSAgVGhpcyBvcHRpb25zIHdpbGwgbGV0IHlvdSBjcmVh dGUgYW5kIG1hbmFnZSBzZXRzIG9mIGNwdSB3aGVyZSB5b3UNCisJICBjYW4g cnVuIHRoZSBwcm9jZXNzZXMuDQorICAgICAgICAgIA0KKyAgICAgICAgICBT YXkgTiBpZiB1bnN1cmUuDQorDQorY29uZmlnIENQVVNFVFNfUFJPQw0KKwli b29sICIvcHJvYy9jcHVzZXRzIHN1cHBvcnQiDQorCWRlcGVuZHMgb24gQ1BV U0VUUw0KKwloZWxwDQorCSAgR2V0IHNvbWUgaW5mbyBhYm91dCB0aGUgZXhp c3RpbmcgY3B1c2V0cyBpbiB5b3VyIHN5c3RlbS4NCisJICBUbyB1c2UgdGhp cyBvcHRpb24sIHlvdSBoYXZlIHRvIGVuc3VyZSB0aGF0IHRoZSAiL3Byb2Mg ZmlsZSBzeXN0ZW0NCisJICBzdXBwb3J0IiAoQ09ORklHX1BST0NfRlMpIGlz IGVuYWJsZWQsIHRvby4NCisNCitjb25maWcgQ1BVU0VUU19QUk9DX0NQVUlO Rk8NCisJYm9vbCAiL3Byb2MvY3B1aW5mbyB1c2VzIGN1cnJlbnQgY3B1c2V0 Ig0KKwlkZXBlbmRzIG9uIENQVVNFVFNfUFJPQw0KKwloZWxwDQorCSAgV2l0 aCB0aGlzIG9wdGlvbiBlbmFibGVkLCBhIHByb2Nlc3MgcmVhZGluZyAvcHJv Yy9jcHVpbmZvIHdpbGwNCisJICBvbmx5IHNlZSB0aGUgQ1BVcyB0aGF0IGFy ZSBpbiBpdHMgY3VycmVudCBjcHVzZXQuDQorDQorY29uZmlnIENQVVNFVFNf UFJPQ19TVEFUDQorCWJvb2wgIi9wcm9jL3N0YXQgdXNlcyBjdXJyZW50IGNw dXNldCINCisJZGVwZW5kcyBvbiBDUFVTRVRTX1BST0MNCisJaGVscA0KKwkg IFdpdGggdGhpcyBvcHRpb24gZW5hYmxlZCwgYSBwcm9jZXNzIHJlYWRpbmcg L3Byb2Mvc3RhdCB3aWxsDQorCSAgb25seSBzZWUgdGhlIENQVXMgdGhhdCBh cmUgaW4gaXRzIGN1cnJlbnQgY3B1c2V0Lg0KKw0KIGNvbmZpZyBQUkVFTVBU DQogCWJvb2wgIlByZWVtcHRpYmxlIEtlcm5lbCINCiAgICAgICAgIGhlbHAN Ci0tLSBsaW51eC0yLjYuMC10ZXN0NC9hcmNoL2lhNjQva2VybmVsL2VudHJ5 LlMJMjAwMy0wOS0wOSAxMDozNzo0OC4wMDAwMDAwMDAgKzAyMDANCisrKyBs aW51eC0yLjYuMC10ZXN0NCtjcHVzZXRzL2FyY2gvaWE2NC9rZXJuZWwvZW50 cnkuUwkyMDAzLTA5LTA5IDEwOjM5OjUzLjAwMDAwMDAwMCArMDIwMA0KQEAg LTE0ODEsMTEgKzE0ODEsMTkgQEANCiAJZGF0YTggaWE2NF9uaV9zeXNjYWxs DQogCWRhdGE4IGlhNjRfbmlfc3lzY2FsbAkJCS8vIDEyNjUNCiAJZGF0YTgg aWE2NF9uaV9zeXNjYWxsDQorI2lmZGVmIENPTkZJR19DUFVTRVRTCQ0KKwlk YXRhOCBzeXNfY3B1c2V0X2NyZWF0ZQ0KKwlkYXRhOCBzeXNfY3B1c2V0X2Rl c3Ryb3kNCisJZGF0YTggc3lzX2NwdXNldF9hbGxvYw0KKwlkYXRhOCBzeXNf Y3B1c2V0X2F0dGFjaAkJCS8vIDEyNzANCisJZGF0YTggc3lzX2NwdXNldF9n ZXRmcmVlY3B1cw0KKyNlbHNlCQ0KIAlkYXRhOCBpYTY0X25pX3N5c2NhbGwN CiAJZGF0YTggaWE2NF9uaV9zeXNjYWxsDQogCWRhdGE4IGlhNjRfbmlfc3lz Y2FsbA0KIAlkYXRhOCBpYTY0X25pX3N5c2NhbGwJCQkvLyAxMjcwDQogCWRh dGE4IGlhNjRfbmlfc3lzY2FsbA0KKyNlbmRpZgkNCiAJZGF0YTggaWE2NF9u aV9zeXNjYWxsDQogCWRhdGE4IGlhNjRfbmlfc3lzY2FsbA0KIAlkYXRhOCBp YTY0X25pX3N5c2NhbGwNCi0tLSBsaW51eC0yLjYuMC10ZXN0NC9hcmNoL2lh NjQva2VybmVsL3NldHVwLmMJMjAwMy0wOS0wOSAxMDozNzo0OC4wMDAwMDAw MDAgKzAyMDANCisrKyBsaW51eC0yLjYuMC10ZXN0NCtjcHVzZXRzL2FyY2gv aWE2NC9rZXJuZWwvc2V0dXAuYwkyMDAzLTA5LTA5IDEwOjM5OjUzLjAwMDAw MDAwMCArMDIwMA0KQEAgLTQ2LDYgKzQ2LDEwIEBADQogI2luY2x1ZGUgPGFz bS9zeXN0ZW0uaD4NCiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPg0KIA0KKyNp ZmRlZiBDT05GSUdfQ1BVU0VUU19QUk9DX0NQVUlORk8NCisjIGluY2x1ZGUg PGxpbnV4L2NwdXNldF90eXBlcy5oPg0KKyNlbmRpZg0KKw0KICNpZiBkZWZp bmVkKENPTkZJR19TTVApICYmIChJQTY0X0NQVV9TSVpFID4gUEFHRV9TSVpF KQ0KICMgZXJyb3IgInN0cnVjdCBjcHVpbmZvX2lhNjQgdG9vIGJpZyEiDQog I2VuZGlmDQpAQCAtMzYwLDYgKzM2NCwxNiBAQA0KIAl1bnNpZ25lZCBsb25n IG1hc2s7DQogCWludCBpOw0KIA0KKyNpZmRlZiBDT05GSUdfQ1BVU0VUU19Q Uk9DX0NQVUlORk8NCisjZGVmaW5lIEdFVF9CSVQobWFzaywgaW5kZXgpICgo bWFzaykgJiAoMSA8PCAoaW5kZXgpKSkNCisJLyogc2hvdyBvbmx5IENQVXMg aW4gY3VycmVudCBjcHVzZXQgKi8NCisJaWYgKCFjdXJyZW50LT5jcHVzZXQp DQorCQlCVUcoKTsNCisJCQ0KKwlpZiAoIUdFVF9CSVQoY3VycmVudC0+Y3B1 c2V0LT5jcHVzX2FsbG93ZWQsIGNwdW51bSkpIA0KKwkJcmV0dXJuIDA7CQ0K KyNlbmRpZiAvKiBDT05GSUdfQ1BVU0VUU19QUk9DX0NQVUlORk8gKi8JCQ0K Kw0KIAltYXNrID0gYy0+ZmVhdHVyZXM7DQogDQogCXN3aXRjaCAoYy0+ZmFt aWx5KSB7DQotLS0gbGludXgtMi42LjAtdGVzdDQvZnMvcHJvYy9iYXNlLmMJ MjAwMy0wOS0wOSAxMDozNzo0OC4wMDAwMDAwMDAgKzAyMDANCisrKyBsaW51 eC0yLjYuMC10ZXN0NCtjcHVzZXRzL2ZzL3Byb2MvYmFzZS5jCTIwMDMtMDkt MDkgMTA6NDg6NTIuMDAwMDAwMDAwICswMjAwDQpAQCAtNTksNiArNTksNyBA QA0KIAlQUk9DX1BJRF9DUFUsDQogCVBST0NfUElEX01PVU5UUywNCiAJUFJP Q19QSURfV0NIQU4sDQorCVBST0NfUElEX0NQVVNFVCwNCiAjaWZkZWYgQ09O RklHX1NFQ1VSSVRZDQogCVBST0NfUElEX0FUVFIsDQogCVBST0NfUElEX0FU VFJfQ1VSUkVOVCwNCkBAIC05OSw2ICsxMDAsOSBAQA0KICNpZmRlZiBDT05G SUdfS0FMTFNZTVMNCiAgIEUoUFJPQ19QSURfV0NIQU4sCSJ3Y2hhbiIsCVNf SUZSRUd8U19JUlVHTyksDQogI2VuZGlmDQorI2lmZGVmIENPTkZJR19DUFVT RVRTX1BST0MJDQorICBFKFBST0NfUElEX0NQVVNFVCwJImNwdXNldCIsCVNf SUZSRUd8U19JUlVHTyksDQorI2VuZGlmCQ0KICAgezAsMCxOVUxMLDB9DQog fTsNCiAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZDQpAQCAtMjkyLDYgKzI5Niwx MSBAQA0KIH0NCiAjZW5kaWYgLyogQ09ORklHX0tBTExTWU1TICovDQogDQor DQorI2lmZGVmIENPTkZJR19DUFVTRVRTX1BST0MNCitpbnQgcHJvY19waWRf Y3B1c2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgY2hhciAqYnVmZmVy KTsNCisjZW5kaWYgLyogQ09ORklHX0NQVVNFVFNfUFJPQyAqLw0KKw0KIC8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovDQogLyogICAgICAgICAgICAg ICAgICAgICAgIEhlcmUgdGhlIGZzIHBhcnQgYmVnaW5zICAgICAgICAgICAg ICAgICAgICAgICAgKi8NCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Lw0KQEAgLTEyMTcsNiArMTIyNiwxMiBAQA0KIAkJCWVpLT5vcC5wcm9jX3Jl YWQgPSBwcm9jX3BpZF93Y2hhbjsNCiAJCQlicmVhazsNCiAjZW5kaWYNCisj aWZkZWYgQ09ORklHX0NQVVNFVFNfUFJPQw0KKwkJY2FzZSBQUk9DX1BJRF9D UFVTRVQ6DQorCQkJaW5vZGUtPmlfZm9wID0gJnByb2NfaW5mb19maWxlX29w ZXJhdGlvbnM7DQorCQkJZWktPm9wLnByb2NfcmVhZCA9IHByb2NfcGlkX2Nw dXNldDsNCisJCQlicmVhazsNCisjZW5kaWYNCiAJCWRlZmF1bHQ6DQogCQkJ cHJpbnRrKCJwcm9jZnM6IGltcG9zc2libGUgdHlwZSAoJWQpIixwLT50eXBl KTsNCiAJCQlpcHV0KGlub2RlKTsNCi0tLSBsaW51eC0yLjYuMC10ZXN0NC9m cy9wcm9jL2Jhc2UuYy5vcmlnCTIwMDMtMDgtMjMgMDE6NTc6MTMuMDAwMDAw MDAwICswMjAwDQorKysgbGludXgtMi42LjAtdGVzdDQrY3B1c2V0cy9mcy9w cm9jL2Jhc2UuYy5vcmlnCTIwMDMtMDktMDkgMTA6MTM6MDguMDAwMDAwMDAw ICswMjAwDQpAQCAtNTYsNiArNTYsNyBAQA0KIAlQUk9DX1BJRF9TVEFULA0K IAlQUk9DX1BJRF9TVEFUTSwNCiAJUFJPQ19QSURfTUFQUywNCisJUFJPQ19Q SURfQ1BVLA0KIAlQUk9DX1BJRF9NT1VOVFMsDQogCVBST0NfUElEX1dDSEFO LA0KICNpZmRlZiBDT05GSUdfU0VDVVJJVFkNCkBAIC04Myw2ICs4NCw5IEBA DQogICBFKFBST0NfUElEX0NNRExJTkUsCSJjbWRsaW5lIiwJU19JRlJFR3xT X0lSVUdPKSwNCiAgIEUoUFJPQ19QSURfU1RBVCwJInN0YXQiLAkJU19JRlJF R3xTX0lSVUdPKSwNCiAgIEUoUFJPQ19QSURfU1RBVE0sCSJzdGF0bSIsCVNf SUZSRUd8U19JUlVHTyksDQorI2lmZGVmIENPTkZJR19TTVANCisgIEUoUFJP Q19QSURfQ1BVLAkiY3B1IiwJCVNfSUZSRUd8U19JUlVHTyksDQorI2VuZGlm DQogICBFKFBST0NfUElEX01BUFMsCSJtYXBzIiwJCVNfSUZSRUd8U19JUlVH TyksDQogICBFKFBST0NfUElEX01FTSwJIm1lbSIsCQlTX0lGUkVHfFNfSVJV U1J8U19JV1VTUiksDQogICBFKFBST0NfUElEX0NXRCwJImN3ZCIsCQlTX0lG TE5LfFNfSVJXWFVHTyksDQpAQCAtMTE4MSw2ICsxMTg1LDEyIEBADQogCQlj YXNlIFBST0NfUElEX01BUFM6DQogCQkJaW5vZGUtPmlfZm9wID0gJnByb2Nf bWFwc19vcGVyYXRpb25zOw0KIAkJCWJyZWFrOw0KKyNpZmRlZiBDT05GSUdf U01QDQorCQljYXNlIFBST0NfUElEX0NQVToNCisJCQlpbm9kZS0+aV9mb3Ag PSAmcHJvY19pbmZvX2ZpbGVfb3BlcmF0aW9uczsNCisJCQllaS0+b3AucHJv Y19yZWFkID0gcHJvY19waWRfY3B1Ow0KKwkJCWJyZWFrOw0KKyNlbmRpZg0K IAkJY2FzZSBQUk9DX1BJRF9NRU06DQogCQkJaW5vZGUtPmlfb3AgPSAmcHJv Y19tZW1faW5vZGVfb3BlcmF0aW9uczsNCiAJCQlpbm9kZS0+aV9mb3AgPSAm cHJvY19tZW1fb3BlcmF0aW9uczsNCi0tLSBsaW51eC0yLjYuMC10ZXN0NC9m cy9wcm9jL3Byb2NfbWlzYy5jCTIwMDMtMDgtMjMgMDE6NTI6MjMuMDAwMDAw MDAwICswMjAwDQorKysgbGludXgtMi42LjAtdGVzdDQrY3B1c2V0cy9mcy9w cm9jL3Byb2NfbWlzYy5jCTIwMDMtMDktMDkgMTA6NDg6NTIuMDAwMDAwMDAw ICswMjAwDQpAQCAtNTEsNiArNTEsMTAgQEANCiAjaW5jbHVkZSA8YXNtL3Rs Yi5oPg0KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4NCiANCisjaWZkZWYgQ09O RklHX0NQVVNFVFNfUFJPQ19TVEFUDQorIyBpbmNsdWRlIDxsaW51eC9jcHVz ZXRfdHlwZXMuaD4NCisjZW5kaWYNCisNCiAjZGVmaW5lIExPQURfSU5UKHgp ICgoeCkgPj4gRlNISUZUKQ0KICNkZWZpbmUgTE9BRF9GUkFDKHgpIExPQURf SU5UKCgoeCkgJiAoRklYRURfMS0xKSkgKiAxMDApDQogLyoNCkBAIC0zNzks MTAgKzM4MywyMSBAQA0KIAlqaWYgPSAoKHU2NClub3cudHZfc2VjICogSFop ICsgKG5vdy50dl91c2VjLygxMDAwMDAwL0haKSkgLSBqaWY7DQogCWRvX2Rp dihqaWYsIEhaKTsNCiANCisjaWZkZWYgQ09ORklHX0NQVVNFVFNfUFJPQ19T VEFUDQorI2RlZmluZSBHRVRfQklUKG1hc2ssIGluZGV4KSAoKG1hc2spICYg KDEgPDwgKGluZGV4KSkpDQorI2VuZGlmDQorDQogCWZvciAoaSA9IDAgOyBp IDwgTlJfQ1BVUzsgaSsrKSB7DQogCQlpbnQgajsNCiANCiAJCWlmKCFjcHVf b25saW5lKGkpKSBjb250aW51ZTsNCisJCQ0KKyNpZmRlZiBDT05GSUdfQ1BV U0VUU19QUk9DX1NUQVQNCisJCS8qIHNob3cgb25seSBDUFVzIGluIGN1cnJl bnQgY3B1c2V0ICovDQorCQlpZiAoIUdFVF9CSVQoY3VycmVudC0+Y3B1c2V0 LT5jcHVzX2FsbG93ZWQsIGkpKSANCisJCQljb250aW51ZTsNCisjZW5kaWYg DQorDQogCQl1c2VyICs9IGtzdGF0X2NwdShpKS5jcHVzdGF0LnVzZXI7DQog CQluaWNlICs9IGtzdGF0X2NwdShpKS5jcHVzdGF0Lm5pY2U7DQogCQlzeXN0 ZW0gKz0ga3N0YXRfY3B1KGkpLmNwdXN0YXQuc3lzdGVtOw0KQEAgLTQwNCw2 ICs0MTksMTEgQEANCiAJCWppZmZpZXNfdG9fY2xvY2tfdChzb2Z0aXJxKSk7 DQogCWZvciAoaSA9IDAgOyBpIDwgTlJfQ1BVUzsgaSsrKXsNCiAJCWlmICgh Y3B1X29ubGluZShpKSkgY29udGludWU7DQorI2lmZGVmIENPTkZJR19DUFVT RVRTX1BST0NfU1RBVA0KKwkJLyogc2hvdyBvbmx5IENQVXMgaW4gY3VycmVu dCBjcHVzZXQgKi8NCisJCWlmICghR0VUX0JJVChjdXJyZW50LT5jcHVzZXQt PmNwdXNfYWxsb3dlZCwgaSkpIA0KKwkJCWNvbnRpbnVlOw0KKyNlbmRpZiAN CiAJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJjcHUlZCAldSAldSAl dSAldSAldSAldSAldVxuIiwNCiAJCQlpLA0KIAkJCWppZmZpZXNfdG9fY2xv Y2tfdChrc3RhdF9jcHUoaSkuY3B1c3RhdC51c2VyKSwNCi0tLSBsaW51eC0y LjYuMC10ZXN0NC9pbmNsdWRlL2FzbS1pYTY0L3VuaXN0ZC5oCTIwMDMtMDkt MDkgMTA6Mzc6NDguMDAwMDAwMDAwICswMjAwDQorKysgbGludXgtMi42LjAt dGVzdDQrY3B1c2V0cy9pbmNsdWRlL2FzbS1pYTY0L3VuaXN0ZC5oCTIwMDMt MDktMDkgMTA6Mzk6NTMuMDAwMDAwMDAwICswMjAwDQpAQCAtMjU0LDYgKzI1 NCwxOCBAQA0KIA0KICNkZWZpbmUgTlJfc3lzY2FsbHMJCQkyNTYgLyogbGVu Z3RoIG9mIHN5c2NhbGwgdGFibGUgKi8NCiANCisjZGVmaW5lIF9fTlJfc3lz X2NwdXNldF9jcmVhdGUJCTEyNjcNCisjZGVmaW5lIF9fTlJfc3lzX2NwdXNl dF9kZXN0cm95CQkxMjY4DQorI2RlZmluZSBfX05SX3N5c19jcHVzZXRfYWxs b2MJCTEyNjkNCisjZGVmaW5lIF9fTlJfc3lzX2NwdXNldF9hdHRhY2gJCTEy NzANCisjZGVmaW5lIF9fTlJfc3lzX2NwdXNldF9nZXRmcmVlY3B1cwkxMjcx DQorDQorI2RlZmluZSBfX05SX3N5c19jcHVzZXRfY3JlYXRlCQkxMjY3DQor I2RlZmluZSBfX05SX3N5c19jcHVzZXRfZGVzdHJveQkJMTI2OA0KKyNkZWZp bmUgX19OUl9zeXNfY3B1c2V0X2FsbG9jCQkxMjY5DQorI2RlZmluZSBfX05S X3N5c19jcHVzZXRfYXR0YWNoCQkxMjcwDQorI2RlZmluZSBfX05SX3N5c19j cHVzZXRfZ2V0ZnJlZWNwdXMJMTI3MQ0KKw0KICNpZiAhZGVmaW5lZChfX0FT U0VNQkxZX18pICYmICFkZWZpbmVkKEFTU0VNQkxFUikNCiANCiBleHRlcm4g bG9uZyBfX2lhNjRfc3lzY2FsbCAobG9uZyBhMCwgbG9uZyBhMSwgbG9uZyBh MiwgbG9uZyBhMywgbG9uZyBhNCwgbG9uZyBucik7DQotLS0gbGludXgtMi42 LjAtdGVzdDQvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaAkyMDAzLTA4LTIz IDAxOjUyOjEwLjAwMDAwMDAwMCArMDIwMA0KKysrIGxpbnV4LTIuNi4wLXRl c3Q0K2NwdXNldHMvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaAkyMDAzLTA5 LTEwIDE0OjAyOjE2LjAwMDAwMDAwMCArMDIwMA0KQEAgLTU2LDYgKzU2LDEy IEBADQogCS5zaWdsb2NrCT0gU1BJTl9MT0NLX1VOTE9DS0VELCAJCVwNCiB9 DQogDQorI2lmZGVmIENPTkZJR19DUFVTRVRTCQ0KKyNkZWZpbmUgQ1BVU0VU X1RTS0lOSVQoYSxiKQkuYSA9IGIsDQorI2Vsc2UNCisjZGVmaW5lIENQVVNF VF9UU0tJTklUKGEsYikNCisjZW5kaWYJDQorDQogLyoNCiAgKiAgSU5JVF9U QVNLIGlzIHVzZWQgdG8gc2V0IHVwIHRoZSBmaXJzdCB0YXNrIHRhYmxlLCB0 b3VjaCBhdA0KICAqIHlvdXIgb3duIHJpc2shLiBCYXNlPTAsIGxpbWl0PTB4 MWZmZmZmICg9Mk1CKQ0KQEAgLTEwOCw2ICsxMTQsOSBAQA0KIAkucHJvY19s b2NrCT0gU1BJTl9MT0NLX1VOTE9DS0VELAkJCQlcDQogCS5zd2l0Y2hfbG9j awk9IFNQSU5fTE9DS19VTkxPQ0tFRCwJCQkJXA0KIAkuam91cm5hbF9pbmZv CT0gTlVMTCwJCQkJCQlcDQorCUNQVVNFVF9UU0tJTklUKGNwdXNfd2FudGVk LCBDUFVfTUFTS19BTEwpCQkJCVwNCisJQ1BVU0VUX1RTS0lOSVQoY3B1c2V0 LCAmdG9wX2NwdXNldCkJCQkJXA0KKwlDUFVTRVRfVFNLSU5JVChjcHVzZXRf YXR0YWNoX2xvY2ssIFNQSU5fTE9DS19VTkxPQ0tFRCkJCVwNCiB9DQogDQog DQotLS0gbGludXgtMi42LjAtdGVzdDQvaW5jbHVkZS9saW51eC9zY2hlZC5o CTIwMDMtMDktMDkgMTA6Mzc6NDguMDAwMDAwMDAwICswMjAwDQorKysgbGlu dXgtMi42LjAtdGVzdDQrY3B1c2V0cy9pbmNsdWRlL2xpbnV4L3NjaGVkLmgJ MjAwMy0wOS0wOSAxMDozOTo1My4wMDAwMDAwMDAgKzAyMDANCkBAIC0yOSw2 ICsyOSw3IEBADQogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4NCiAj aW5jbHVkZSA8bGludXgvcGlkLmg+DQogI2luY2x1ZGUgPGxpbnV4L3BlcmNw dS5oPg0KKyNpbmNsdWRlIDxsaW51eC9jcHVzZXQuaD4NCiANCiBzdHJ1Y3Qg ZXhlY19kb21haW47DQogDQpAQCAtNDYxLDYgKzQ2MiwxMyBAQA0KIA0KIAl1 bnNpZ25lZCBsb25nIHB0cmFjZV9tZXNzYWdlOw0KIAlzaWdpbmZvX3QgKmxh c3Rfc2lnaW5mbzsgLyogRm9yIHB0cmFjZSB1c2UuICAqLw0KKw0KKy8qIGNw dXNldCBpbmZvICovDQorI2lmZGVmIENPTkZJR19DUFVTRVRTCQ0KKwlzdHJ1 Y3QgY3B1c2V0ICogY3B1c2V0Ow0KKwl1bnNpZ25lZCBsb25nIGNwdXNfd2Fu dGVkOw0KKwlzcGlubG9ja190IGNwdXNldF9hdHRhY2hfbG9jazsNCisjZW5k aWYgCQ0KIH07DQogDQogZXh0ZXJuIHZvaWQgX19wdXRfdGFza19zdHJ1Y3Qo c3RydWN0IHRhc2tfc3RydWN0ICp0c2spOw0KLS0tIGxpbnV4LTIuNi4wLXRl c3Q0L2luaXQvbWFpbi5jCTIwMDMtMDgtMjMgMDE6NTI6NTYuMDAwMDAwMDAw ICswMjAwDQorKysgbGludXgtMi42LjAtdGVzdDQrY3B1c2V0cy9pbml0L21h aW4uYwkyMDAzLTA5LTA5IDEwOjM5OjUzLjAwMDAwMDAwMCArMDIwMA0KQEAg LTg0LDYgKzg0LDcgQEANCiBleHRlcm4gdm9pZCBmcmVlX2luaXRtZW0odm9p ZCk7DQogZXh0ZXJuIHZvaWQgcG9wdWxhdGVfcm9vdGZzKHZvaWQpOw0KIGV4 dGVybiB2b2lkIGRyaXZlcl9pbml0KHZvaWQpOw0KK2V4dGVybiB2b2lkIGNw dXNldHNfaW5pdCh2b2lkKTsNCiANCiAjaWZkZWYgQ09ORklHX1RDDQogZXh0 ZXJuIHZvaWQgdGNfaW5pdCh2b2lkKTsNCkBAIC00NTIsNiArNDUzLDEwIEBA DQogI2lmIGRlZmluZWQoQ09ORklHX1NZU1ZJUEMpDQogCWlwY19pbml0KCk7 DQogI2VuZGlmDQorI2lmZGVmIENPTkZJR19DUFVTRVRTDQorCWNwdXNldHNf aW5pdCgpOw0KKyNlbmRpZgkNCisNCiAJY2hlY2tfYnVncygpOw0KIAlwcmlu dGsoIlBPU0lYIGNvbmZvcm1hbmNlIHRlc3RpbmcgYnkgVU5JRklYXG4iKTsN CiANCi0tLSBsaW51eC0yLjYuMC10ZXN0NC9rZXJuZWwvTWFrZWZpbGUJMjAw My0wOC0yMyAwMTo1MzowNC4wMDAwMDAwMDAgKzAyMDANCisrKyBsaW51eC0y LjYuMC10ZXN0NCtjcHVzZXRzL2tlcm5lbC9NYWtlZmlsZQkyMDAzLTA5LTA5 IDEwOjQ4OjUyLjAwMDAwMDAwMCArMDIwMA0KQEAgLTE5LDYgKzE5LDggQEAN CiBvYmotJChDT05GSUdfQlNEX1BST0NFU1NfQUNDVCkgKz0gYWNjdC5vDQog b2JqLSQoQ09ORklHX0NPTVBBVCkgKz0gY29tcGF0Lm8NCiBvYmotJChDT05G SUdfSUtDT05GSUcpICs9IGNvbmZpZ3Mubw0KK29iai0kKENPTkZJR19DUFVT RVRTKSArPSBjcHVzZXQubw0KKw0KIA0KICMgZmlsZXMgdG8gYmUgcmVtb3Zl ZCB1cG9uIG1ha2UgY2xlYW4NCiBjbGVhbi1maWxlcyA6PSBpa2NvbmZpZy5o DQotLS0gbGludXgtMi42LjAtdGVzdDQva2VybmVsL2V4aXQuYwkyMDAzLTA4 LTIzIDAxOjU5OjI2LjAwMDAwMDAwMCArMDIwMA0KKysrIGxpbnV4LTIuNi4w LXRlc3Q0K2NwdXNldHMva2VybmVsL2V4aXQuYwkyMDAzLTA5LTA5IDEwOjM5 OjUzLjAwMDAwMDAwMCArMDIwMA0KQEAgLTU0LDYgKzU0LDE5IEBADQogIA0K IAlCVUdfT04ocC0+c3RhdGUgPCBUQVNLX1pPTUJJRSk7DQogIA0KKwkNCisj aWZkZWYgQ09ORklHX0NQVVNFVFMJDQorCXNwaW5fbG9jaygmcC0+Y3B1c2V0 X2F0dGFjaF9sb2NrKTsNCisJcmVsZWFzZV9jcHVzZXQocC0+Y3B1c2V0KTsN CisNCisJLyogbWFyayB0aGF0IHRoaXMgcHJvY2VzcydzIGNwdXNldCBoYXMg YWxyZWFkeSBiZWVuIHJlbGVhc2VkIA0KKwkgKiBhbm90aGVyIHByb2Nlc3Mg bWlnaHQgc3RpbGwgdHJ5IHRvIGNwdXNldF9hdHRhY2ggdGhpcyBwcm9jZXNz DQorCSAqLw0KKwlwLT5jcHVzZXQgPSBOVUxMOyANCisJc3Bpbl91bmxvY2so JnAtPmNwdXNldF9hdHRhY2hfbG9jayk7DQorI2VuZGlmIC8qIENPTkZJR19D UFVTRVRTICovCQ0KKwkNCisNCiAJYXRvbWljX2RlYygmcC0+dXNlci0+cHJv Y2Vzc2VzKTsNCiAJc3Bpbl9sb2NrKCZwLT5wcm9jX2xvY2spOw0KIAlwcm9j X2RlbnRyeSA9IHByb2NfcGlkX3VuaGFzaChwKTsNCkBAIC04NSw2ICs5OCw3 IEBADQogCXNwaW5fdW5sb2NrKCZwLT5wcm9jX2xvY2spOw0KIAlwcm9jX3Bp ZF9mbHVzaChwcm9jX2RlbnRyeSk7DQogCXJlbGVhc2VfdGhyZWFkKHApOw0K Kw0KIAlwdXRfdGFza19zdHJ1Y3QocCk7DQogfQ0KIA0KLS0tIGxpbnV4LTIu Ni4wLXRlc3Q0L2tlcm5lbC9mb3JrLmMJMjAwMy0wOS0wOSAxMDozNzo0OC4w MDAwMDAwMDAgKzAyMDANCisrKyBsaW51eC0yLjYuMC10ZXN0NCtjcHVzZXRz L2tlcm5lbC9mb3JrLmMJMjAwMy0wOS0wOSAxMDozOTo1My4wMDAwMDAwMDAg KzAyMDANCkBAIC0zMSw2ICszMSwxMCBAQA0KICNpbmNsdWRlIDxsaW51eC9w dHJhY2UuaD4NCiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4NCiANCisjaWZk ZWYgQ09ORklHX0NQVVNFVFMNCisjaW5jbHVkZSA8bGludXgvY3B1c2V0Lmg+ DQorI2VuZGlmDQorDQogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+DQogI2lu Y2x1ZGUgPGFzbS9wZ2FsbG9jLmg+DQogI2luY2x1ZGUgPGFzbS91YWNjZXNz Lmg+DQpAQCAtMTAwOCw2ICsxMDEyLDExIEBADQogCWlmIChwLT5wdHJhY2Ug JiBQVF9QVFJBQ0VEKQ0KIAkJX19wdHJhY2VfbGluayhwLCBjdXJyZW50LT5w YXJlbnQpOw0KIA0KKyNpZmRlZiBDT05GSUdfQ1BVU0VUUwkNCisJdXNlX2Nw dXNldChwLT5jcHVzZXQpOw0KKyNlbmRpZgkNCisNCisNCiAJYXR0YWNoX3Bp ZChwLCBQSURUWVBFX1BJRCwgcC0+cGlkKTsNCiAJaWYgKHRocmVhZF9ncm91 cF9sZWFkZXIocCkpIHsNCiAJCWF0dGFjaF9waWQocCwgUElEVFlQRV9UR0lE LCBwLT50Z2lkKTsNCi0tLSBsaW51eC0yLjYuMC10ZXN0NC9rZXJuZWwvc2No ZWQuYwkyMDAzLTA4LTIzIDAxOjU4OjQzLjAwMDAwMDAwMCArMDIwMA0KKysr IGxpbnV4LTIuNi4wLXRlc3Q0K2NwdXNldHMva2VybmVsL3NjaGVkLmMJMjAw My0wOS0wOSAxMDo0ODoxNi4wMDAwMDAwMDAgKzAyMDANCkBAIC0zNSw2ICsz NSwxMCBAQA0KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4NCiAjaW5jbHVkZSA8 bGludXgvcGVyY3B1Lmg+DQogDQorI2lmZGVmIENPTkZJR19DUFVTRVRTCQ0K KyNpbmNsdWRlIDxsaW51eC9jcHVzZXQuaD4NCisjZW5kaWYNCisNCiAjaWZk ZWYgQ09ORklHX05VTUENCiAjZGVmaW5lIGNwdV90b19ub2RlX21hc2soY3B1 KSBub2RlX3RvX2NwdW1hc2soY3B1X3RvX25vZGUoY3B1KSkNCiAjZWxzZQ0K QEAgLTE5NTQsNyArMTk1OCwxMSBAQA0KIAkJCSFjYXBhYmxlKENBUF9TWVNf TklDRSkpDQogCQlnb3RvIG91dF91bmxvY2s7DQogDQorI2lmZGVmIENPTkZJ R19DUFVTRVRTIA0KKwlyZXR2YWwgPSBjcHVzZXRfc2V0YWZmaW5pdHkocCwg bmV3X21hc2spOw0KKyNlbHNlDQogCXJldHZhbCA9IHNldF9jcHVzX2FsbG93 ZWQocCwgbmV3X21hc2spOw0KKyNlbmRpZg0KIA0KIG91dF91bmxvY2s6DQog CXB1dF90YXNrX3N0cnVjdChwKTsNCkBAIC0xOTg3LDcgKzE5OTUsMTEgQEAN CiAJCWdvdG8gb3V0X3VubG9jazsNCiANCiAJcmV0dmFsID0gMDsNCisjaWZk ZWYgQ09ORklHX0NQVVNFVFMNCisJbWFzayA9IHAtPmNwdXNfd2FudGVkOw0K KyNlbHNlDQogCWNwdXNfYW5kKG1hc2ssIHAtPmNwdXNfYWxsb3dlZCwgY3B1 X29ubGluZV9tYXApOw0KKyNlbmRpZg0KIA0KIG91dF91bmxvY2s6DQogCXJl YWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsNCi0tLSBsaW51eC0yLjYuMC10 ZXN0NC9pbmNsdWRlL2xpbnV4L2NwdXNldF90eXBlcy5oCTE5NzAtMDEtMDEg MDE6MDA6MDAuMDAwMDAwMDAwICswMTAwDQorKysgbGludXgtMi42LjAtdGVz dDQrY3B1c2V0cy9pbmNsdWRlL2xpbnV4L2NwdXNldF90eXBlcy5oCTIwMDMt MDktMTAgMTM6MzA6MzQuMDAwMDAwMDAwICswMjAwDQpAQCAtMCwwICsxLDM5 IEBADQorI2lmbmRlZiBfTElOVVhfQ1BVU0VUX1RZUEVTX0gNCisjZGVmaW5l IF9MSU5VWF9DUFVTRVRfVFlQRVNfSA0KKw0KKw0KK3N0cnVjdCBjcHVzZXQg ew0KKyAgICAgICAgY3B1c2V0X3QgaWQ7DQorICAgICAgICBpbnQgZmxhZ3M7 DQorCWludCBoYXNfYmVlbl9hdHRhY2hlZDsNCisNCisgICAgICAgIC8qIGJp dG1hc2sgb2YgdGhlIGNwdXMgcHJlc2VudCBpbiB0aGlzIGNwdXNldCAqLw0K KyAgICAgICAgY3B1bWFza190IGNwdXNfYWxsb3dlZDsNCisNCisgICAgICAg IC8qIGJpdG1hc2sgb2YgdGhlIGNwdXMgcmVzZXJ2ZWQgaW4gdGhpcyBjcHVz ZXQgKi8NCisgICAgICAgIGNwdW1hc2tfdCBjcHVzX3Jlc2VydmVkOw0KKw0K KyAgICAgICAgLyogYml0bWFzayBvZiB0aGUgY3B1cyByZXNlcnZlZCB3aXRo IENQVVNFVF9TVFJJQ1QgKi8NCisgICAgICAgIGNwdW1hc2tfdCBjcHVzX3N0 cmljdGx5X3Jlc2VydmVkOw0KKw0KKyAgICAgICAgc3RydWN0IGNwdXNldCAq IHBhcmVudDsNCisgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsgLyog Zm9yIHRoZSB3aG9sZSBsaXN0ICovDQorDQorICAgICAgICBzdHJ1Y3QgbGlz dF9oZWFkIGNoaWxkcmVuOyANCisgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQg YnJvdGhlcnM7DQorDQorCS8qIG92ZXJhbGwgdXNlcnMgKHByb2Nlc3NlcyAr IGNoaWxkcmVuKSAqLw0KKwkvKiB3aWxsIGJlIHJlcGxhY2VkIGJ5IGF0b21p Y190IGluIHRoZSBmdXR1cmUgKi8NCisgICAgICAgIGF0b21pY190IGNvdW50 OyANCisNCisJc3BpbmxvY2tfdCBhdHRhY2hfbG9jazsNCisNCisJLyogb3du ZXIgKi8NCisJdWlkX3QgdWlkOw0KKwl1aWRfdCBzdWlkOw0KKw0KKw0KK307 DQorDQorDQorI2VuZGlmDQotLS0gbGludXgtMi42LjAtdGVzdDQvaW5jbHVk ZS9saW51eC9jcHVzZXQuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAw MCArMDEwMA0KKysrIGxpbnV4LTIuNi4wLXRlc3Q0K2NwdXNldHMvaW5jbHVk ZS9saW51eC9jcHVzZXQuaAkyMDAzLTA5LTA5IDEwOjUwOjA1LjAwMDAwMDAw MCArMDIwMA0KQEAgLTAsMCArMSwyNSBAQA0KKy8qDQorICogQlVMTCBjcHVz ZXQgaW50ZXJmYWNlDQorICovDQorDQorI2lmbmRlZiBfTElOVVhfQ1BVU0VU X0gNCisjZGVmaW5lIF9MSU5VWF9DUFVTRVRfSA0KKw0KK3R5cGVkZWYgdW5z aWduZWQgaW50IGNwdXNldF90Ow0KKw0KKyNkZWZpbmUgQ1BVU0VUX1NUUklD VCAgICAgICAgICAgMHgwMDAwMDAwMQ0KKyNkZWZpbmUgQ1BVU0VUX0FVVE9D TEVBTiAgICAgICAgMHgwMDAwMDAwMg0KKw0KKyNpZmRlZiBfX0tFUk5FTF9f DQorDQorZXh0ZXJuIHN0cnVjdCBjcHVzZXQgdG9wX2NwdXNldDsNCisNCit2 b2lkIHVzZV9jcHVzZXQoc3RydWN0IGNwdXNldCAqKTsNCit2b2lkIHJlbGVh c2VfY3B1c2V0KHN0cnVjdCBjcHVzZXQgKik7DQorDQorc3RydWN0IHRhc2tf c3RydWN0Ow0KK2ludCBjcHVzZXRfc2V0YWZmaW5pdHkoc3RydWN0IHRhc2tf c3RydWN0ICogdGFzaywgdW5zaWduZWQgbG9uZyBtYXNrKTsNCisNCisjZW5k aWYgLyogX19LRVJORUxfXyAqLw0KKw0KKyNlbmRpZiAvKiBfTElOVVhfQ1BV U0VUX0ggKi8NCi0tLSBsaW51eC0yLjYuMC10ZXN0NC9rZXJuZWwvY3B1c2V0 LmMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDANCisrKyBs aW51eC0yLjYuMC10ZXN0NCtjcHVzZXRzL2tlcm5lbC9jcHVzZXQuYwkyMDAz LTA5LTEwIDE2OjIwOjQ2LjAwMDAwMDAwMCArMDIwMA0KQEAgLTAsMCArMSw3 NDggQEANCisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPg0KKyNpbmNsdWRl IDxsaW51eC9jcHVzZXQuaD4NCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPiAv KiBmb3Iga21hbGxvYyAqLw0KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+DQor I2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+IC8qIGZvciBmaW5kX3Rhc2tfYnlf cGlkIGFuZCB0YXNrX3N0cnVjdCAqLw0KKyNpbmNsdWRlIDxhc20vdWFjY2Vz cy5oPiANCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4NCisjaW5jbHVkZSA8 bGludXgvc2VxX2ZpbGUuaD4NCisjaW5jbHVkZSA8bGludXgvZnMuaD4NCisj aW5jbHVkZSA8bGludXgvaW5pdC5oPg0KKyNpbmNsdWRlIDxsaW51eC9wcm9j X2ZzLmg+DQorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+DQorI2luY2x1 ZGUgPGxpbnV4L2xpc3QuaD4NCisjaW5jbHVkZSA8bGludXgvY3B1c2V0X3R5 cGVzLmg+DQorDQorI2RlZmluZSBpbmZvKGFyZ3MuLi4pIGRvIHt9IHdoaWxl KDApIA0KKy8vI2RlZmluZSBpbmZvKGFyZ3MuLi4pIHByaW50ayhLRVJOX0lO Rk8gYXJncykNCisNCityd2xvY2tfdCBjcHVzZXRfbG9jayA9IFJXX0xPQ0tf VU5MT0NLRUQ7DQorDQorI2RlZmluZSBDUFVTRVRfVE9QX0lEIDENCisNCitz dHJ1Y3QgY3B1c2V0IHRvcF9jcHVzZXQgPSB7DQorCS5pZCA9IENQVVNFVF9U T1BfSUQsDQorCS5mbGFncyA9IENQVVNFVF9TVFJJQ1QsDQorCS5jcHVzX3Jl c2VydmVkID0gQ1BVX01BU0tfTk9ORSwNCisJLmNwdXNfc3RyaWN0bHlfcmVz ZXJ2ZWQgPSBDUFVfTUFTS19OT05FLA0KKwkucGFyZW50ID0gMCwNCisJLmNo aWxkcmVuID0gTElTVF9IRUFEX0lOSVQodG9wX2NwdXNldC5jaGlsZHJlbiks DQorCS5icm90aGVycyA9IExJU1RfSEVBRF9JTklUKHRvcF9jcHVzZXQuYnJv dGhlcnMpLA0KKwkubGlzdCA9IExJU1RfSEVBRF9JTklUKHRvcF9jcHVzZXQu bGlzdCksDQorCS5jb3VudCA9IEFUT01JQ19JTklUKDEpLCAvKiB0aGlzIGNw dXNldCBjYW4ndCBiZSBkZWxldGVkICovDQorCS5oYXNfYmVlbl9hdHRhY2hl ZCA9IDAsDQorCS51aWQgPSAwLA0KKwkuYXR0YWNoX2xvY2sgPSBTUElOX0xP Q0tfVU5MT0NLRUQsDQorCS5zdWlkID0gMA0KK307DQorDQorCQ0KK3N0YXRp YyBpbnQgcHJvY19jcHVzZXRzX2luaXQodm9pZCk7DQorDQoraW50IF9faW5p dCBjcHVzZXRzX2luaXQodm9pZCkNCit7DQorCWluZm8oImNwdXNldHMgKCJf X0ZJTEVfXyAiIGNvbXBpbGVkICIgX19EQVRFX18gIiAiIF9fVElNRV9fICJp bml0aWFsaXppbmcuLlxuIik7DQorCXRvcF9jcHVzZXQuY3B1c19hbGxvd2Vk ID0gcGh5c19jcHVfcHJlc2VudF9tYXA7CQ0KKw0KKyNpZmRlZiBDT05GSUdf Q1BVU0VUU19QUk9DDQorCXByb2NfY3B1c2V0c19pbml0KCk7DQorI2VuZGlm IC8qIENPTkZJR19DUFVTRVRTX1BST0MgKi8JDQorCXJldHVybiAwOw0KK30N CisNCisNCitzdGF0aWMgY29uc3QgaW50IE4gPSAoOCpzaXplb2YoY3B1bWFz a190KSk7DQorLyogbWFzayBtdXN0IE5PVCBiZSBaRVJPICEgKi8NCisvKiB0 aGlzIGlzIGEgY3ljbGljIHZlcnNpb24gb2YgbmV4dF9jcHUgKi8NCitzdGF0 aWMgaW5saW5lIHZvaWQgX25leHRfY3B1KGNvbnN0IGNwdW1hc2tfdCBtYXNr LCBpbnQgKiBpbmRleCkNCit7DQorCWZvcig7Oykgew0KKwkJaWYgKCsrKmlu ZGV4ID49IE4pICppbmRleCA9IDA7DQorCQlpZiAoY3B1X2lzc2V0KCppbmRl eCwgbWFzaykpIHJldHVybjsNCisJfQ0KK30NCisJCQkNCitzdGF0aWMgdW5z aWduZWQgbG9uZyBjcHVzZXRfY29tYmluZV9tYXNrKGNvbnN0IGNwdW1hc2tf dCB3YW50ZWQsIGNvbnN0IGNwdW1hc2tfdCBhbGxvd2VkKQ0KK3sNCisJaW50 IGk7DQorCWNwdW1hc2tfdCBtYXNrOw0KKw0KKwkvKiBzdGFydCB3aXRoIGN1 cnJlbnQgY3B1IG91dCBvZiB0aGUgbWFzaw0KKwkgKiBzbyB0aGUgZmlyc3Qg Y2FsbCB0byBuZXh0X2NwdSB3aWxsIHRha2UgdGhlIGZpcnN0IGNwdQ0KKwkg KiBldmVuIGlmIGl0IGlzIGNwdSB6ZXJvDQorCSAqLw0KKwlpbnQgY3B1ID0g TjsNCisNCisJaWYgKGNwdXNfZW1wdHkod2FudGVkKSkgcmV0dXJuIDA7DQor CWlmIChjcHVzX2VtcHR5KGFsbG93ZWQpKSByZXR1cm4gMDsNCisNCisJY3B1 c19jbGVhcihtYXNrKTsNCisNCisJZm9yKGk9MDsgaSA8IE47IGkrKykgew0K KwkJX25leHRfY3B1KGFsbG93ZWQsICZjcHUpOw0KKwkJaWYgKGNwdV9pc3Nl dChpLCB3YW50ZWQpKSANCisJCQljcHVfc2V0KGNwdSwgbWFzayk7DQorCX0N CisJaW5mbygiY3B1c2V0X2NvbWJpbmVfbWFzazogJTAxNmx4ICsgJTAxNmx4 IC0tPiAlMDE2bHhcbiIsIA0KKwkJCQl3YW50ZWQsIGFsbG93ZWQsIG1hc2sp OyANCisJcmV0dXJuIG1hc2s7DQorfQ0KKw0KKwkNCisNCitzdGF0aWMgc3Ry dWN0IGNwdXNldCAqIGZpbmRfY3B1c2V0X2J5X2lkKGNwdXNldF90IGlkKQ0K K3sNCisJc3RydWN0IGNwdXNldCAqIGNzOw0KKwlpZiAoaWQgPT0gQ1BVU0VU X1RPUF9JRCkgcmV0dXJuICZ0b3BfY3B1c2V0OyANCisNCisJbGlzdF9mb3Jf ZWFjaF9lbnRyeShjcywgJnRvcF9jcHVzZXQubGlzdCwgbGlzdCkgew0KKwkJ aWYgKGNzLT5pZCA9PSBpZCkgcmV0dXJuIGNzOw0KKwl9DQorCS8qIE5vdCBm b3VuZCAqLw0KKwlyZXR1cm4gMDsNCit9DQorDQorLyogaW5jcmVtZW50IGEg Y3B1c2V0IHVzZSBjb3VudCAqLw0KK3ZvaWQgdXNlX2NwdXNldChzdHJ1Y3Qg Y3B1c2V0ICogY3MpDQorew0KKwlhdG9taWNfaW5jKCZjcy0+Y291bnQpOw0K K30NCisNCitzdGF0aWMgdm9pZCBjaGVja19jcHVzZXRfYXV0b2NsZWFuKHN0 cnVjdCBjcHVzZXQgKik7DQorDQorLyogZGVjcmVtZW50IGEgY3B1c2V0IHVz ZSBjb3VudCwgYW5kIG1heWJlIGF1dG9kZXN0cm95IGl0ICovDQorLyogY3B1 c2V0X2xvY2sgTVVTVCBOT1QgQkUgSEVMRCAqLw0KK3ZvaWQgcmVsZWFzZV9j cHVzZXQoc3RydWN0IGNwdXNldCAqIGNzKQ0KK3sNCisJaWYgKGF0b21pY19k ZWNfYW5kX3Rlc3QoJmNzLT5jb3VudCkpCQ0KKwkJY2hlY2tfY3B1c2V0X2F1 dG9jbGVhbihjcyk7DQorfQ0KKw0KKy8qIGZpbmQgYSBmcmVlIGNwdXNldCBJ RCAqLw0KK3N0YXRpYyBjcHVzZXRfdCBjcHVzZXRfbWtpZCh2b2lkKQ0KK3sN CisJc3RhdGljIGNwdXNldF90IGN1cmlkID0gQ1BVU0VUX1RPUF9JRDsNCisN CisJd2hpbGUgKGZpbmRfY3B1c2V0X2J5X2lkKCsrY3VyaWQpKTsNCisNCisJ cmV0dXJuIGN1cmlkOw0KK30NCisNCithc21saW5rYWdlIGxvbmcgc3lzX2Nw dXNldF9jcmVhdGUoY3B1c2V0X3QgKiBjcHVzZXRwLCBpbnQgZmxhZ3MpDQor ew0KKwlzdHJ1Y3QgY3B1c2V0ICogY3M7CQkNCisJDQorCWluZm8oInN5c19j cHVzZXRfY3JlYXRlKCUwMTZseCwgJWQpIGNhbGxlZFxuIiwgDQorCQkodW5z aWduZWQgbG9uZykgY3B1c2V0cCwgZmxhZ3MpOw0KKw0KKwkvKiBjYW4gb25s eSBjcmVhdGUgYSBzdHJpY3QgY3MgaW4gYW5vdGhlciBzdHJpY3QgY3MgKi8N CisJaWYgKChmbGFncyAmIENQVVNFVF9TVFJJQ1QpICYmICghKGN1cnJlbnQt PmNwdXNldC0+ZmxhZ3MgJiBDUFVTRVRfU1RSSUNUKSkpCQ0KKwkJcmV0dXJu IC1FSU5WQUw7DQorDQorCS8qIGNoZWNrIGlmIGdpdmVuIHBvaW50ZXIgaXMg dmFsaWQgKi8NCisJaWYgKHZlcmlmeV9hcmVhKFZFUklGWV9XUklURSwgY3B1 c2V0cCwgc2l6ZW9mKGNwdXNldF90KSkpIA0KKwkJcmV0dXJuIC1FRkFVTFQ7 DQorCQ0KKwljcyA9IChzdHJ1Y3QgY3B1c2V0ICopIGttYWxsb2Moc2l6ZW9m KHN0cnVjdCBjcHVzZXQpLCBHRlBfS0VSTkVMKTsNCisJaWYgKCFjcykNCisJ CXJldHVybiAtRU5PTUVNOw0KKw0KKwljcy0+ZmxhZ3MgPSBmbGFnczsNCisJ YXRvbWljX3NldCgmY3MtPmNvdW50LCAwKTsNCisJSU5JVF9MSVNUX0hFQUQo JmNzLT5jaGlsZHJlbik7DQorCWNzLT5jcHVzX2FsbG93ZWQgPSAwOyANCisJ Y3MtPmNwdXNfcmVzZXJ2ZWQgPSAwOw0KKwljcy0+Y3B1c19zdHJpY3RseV9y ZXNlcnZlZCA9IDA7DQorCWNzLT5oYXNfYmVlbl9hdHRhY2hlZCA9IDA7DQor CWNzLT51aWQgPSBjdXJyZW50LT51aWQ7DQorCWNzLT5zdWlkID0gY3VycmVu dC0+c3VpZDsNCisJY3MtPmF0dGFjaF9sb2NrID0gU1BJTl9MT0NLX1VOTE9D S0VEOw0KKwkNCisJY3MtPnBhcmVudCA9IGN1cnJlbnQtPmNwdXNldDsNCisN CisJdXNlX2NwdXNldChjcy0+cGFyZW50KTsNCisJDQorCXdyaXRlX2xvY2so JmNwdXNldF9sb2NrKTsgDQorCQ0KKwljcy0+aWQgPSBjcHVzZXRfbWtpZCgp Ow0KKwlsaXN0X2FkZCgmY3MtPmJyb3RoZXJzLCAmY3MtPnBhcmVudC0+Y2hp bGRyZW4pOw0KKwlsaXN0X2FkZCgmY3MtPmxpc3QsICZ0b3BfY3B1c2V0Lmxp c3QpOw0KKwkNCisJd3JpdGVfdW5sb2NrKCZjcHVzZXRfbG9jayk7DQorDQor CWlmIChwdXRfdXNlcihjcy0+aWQsIGNwdXNldHApKQ0KKwkJaW5mbygicHV0 X3VzZXIgZmFpbGVkICFcbiIpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQor DQorc3RhdGljIGlubGluZSBpbnQgYmFkX3Blcm1pc3Npb24oc3RydWN0IGNw dXNldCAqIGNzKSANCit7DQorCXJldHVybiAoKGN1cnJlbnQtPmV1aWQpICYm IChjdXJyZW50LT5ldWlkICE9IGNzLT51aWQpICYmIChjdXJyZW50LT5ldWlk ICE9IGNzLT5zdWlkKSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIF9fY3B1c2V0 X2Rlc3Ryb3koc3RydWN0IGNwdXNldCAqIGNzKTsNCisNCithc21saW5rYWdl IGxvbmcgc3lzX2NwdXNldF9kZXN0cm95KGNwdXNldF90IGNwdXNldCkgDQor ew0KKwlzdHJ1Y3QgY3B1c2V0ICogY3M7DQorDQorCWluZm8oInN5c19jcHVz ZXRfZGVzdHJveSglZCkgY2FsbGVkXG4iLCBjcHVzZXQpOw0KKw0KKwlpZiAo Y3B1c2V0ID09IENQVVNFVF9UT1BfSUQpDQorCQlyZXR1cm4gLUVJTlZBTDsN CisNCisJcmVhZF9sb2NrKCZjcHVzZXRfbG9jayk7IA0KKwljcyA9IGZpbmRf Y3B1c2V0X2J5X2lkKGNwdXNldCk7DQorCQ0KKwlpZiAoIWNzKSB7DQorCQly ZWFkX3VubG9jaygmY3B1c2V0X2xvY2spOyANCisJCXJldHVybiAtRUlOVkFM Ow0KKwl9DQorDQorCXVzZV9jcHVzZXQoY3MpOw0KKwlyZWFkX3VubG9jaygm Y3B1c2V0X2xvY2spOyANCisJDQorCWlmIChiYWRfcGVybWlzc2lvbihjcykp IHsNCisJCXJlbGVhc2VfY3B1c2V0KGNzKTsNCisJCXJldHVybiAtRVBFUk07 DQorCX0NCisNCisJd3JpdGVfbG9jaygmY3B1c2V0X2xvY2spOw0KKwkvKiB0 aGVyZSdzIGF0IGxlYXN0IDEgdXNlciAodXMpLCBpZiB0aGVyZSdzIG1vcmUs IHdlIGNhbid0IGRlc3Ryb3kgY3MgKi8JDQorCWlmIChhdG9taWNfcmVhZCgm Y3MtPmNvdW50KSA+IDEpIHsNCisJCXdyaXRlX3VubG9jaygmY3B1c2V0X2xv Y2spOw0KKwkJcmVsZWFzZV9jcHVzZXQoY3MpOwkNCisJCXJldHVybiAtRUJV U1k7DQorCX0NCisNCisJLyogZXZlcnl0aGluZyBPSywgZGVzdHJveSBpdCAq Lw0KKwlfX2NwdXNldF9kZXN0cm95KGNzKTsNCisJLyogd3JpdGVfdW5sb2Nr KCZjcHVzZXRfbG9jaykgd2lsbCBiZSBkb25lIGluc2lkZSBfX2NwdXNldF9k ZXN0cm95ICovDQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgdm9p ZCByZWJ1aWxkX3Jlc2VydmVkX21hc2tzKHN0cnVjdCBjcHVzZXQgKiBjc3Ap IHsNCisJY3B1bWFza190IHI7DQorCWNwdW1hc2tfdCBzcjsNCisJc3RydWN0 IGNwdXNldCAqIGNzOw0KKwlpbmZvKCJVcGRhdGluZyBjcHVzZXQgJWQgbWFz a3NcbiIsIGNzcC0+aWQpOw0KKw0KKwljcHVzX2NsZWFyKHIpOw0KKwljcHVz X2NsZWFyKHNyKTsNCisNCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjcywgJmNz cC0+Y2hpbGRyZW4sIGJyb3RoZXJzKSB7DQorCQlpbmZvKCIJY2hpbGQgJWRc biIsIGNzLT5pZCk7DQorCQljcHVzX29yKHIsIHIsIGNzLT5jcHVzX2FsbG93 ZWQpOw0KKwkJaWYgKGNzLT5mbGFncyAmIENQVVNFVF9TVFJJQ1QpDQorCQkJ Y3B1c19vcihzciwgc3IsIGNzLT5jcHVzX2FsbG93ZWQpOw0KKwl9DQorCWNz cC0+Y3B1c19yZXNlcnZlZCA9IHI7DQorCWNzcC0+Y3B1c19zdHJpY3RseV9y ZXNlcnZlZCA9IHNyOw0KK30NCisNCisvKiBSRUFMTFkgZGVzdHJveSBhIGNw dXNldCANCisgKiBOT1RFOiANCisgKiAtPiB3cml0ZSBjcHVzZXRfbG9jayBt dXN0IGJlIGhlbGQgDQorICogLT4gLS0tLS0tLS0tLS0tLS0tLS0gV0lMTCBC RSBSRUxFQVNFRA0KKyAqIHRoaXMgdWdseSBoYWNrIGlzIG5lY2Vzc2FyeSB0 byBjYWxsIHJlbGVhc2VfY3B1c2V0KHBhcmVudCkNCisgKi8NCitzdGF0aWMg dm9pZCBfX2NwdXNldF9kZXN0cm95KHN0cnVjdCBjcHVzZXQgKiBjcykNCit7 DQorICAgICAgICBsaXN0X2RlbCgmY3MtPmxpc3QpOw0KKwlsaXN0X2RlbCgm Y3MtPmJyb3RoZXJzKTsNCisJDQorCS8qIGNzIHdpbGwgbmV2ZXIgYmUgdG9w X2NwdXNldCwgc28gLT5wYXJlbnQgZXhpc3RzICovDQorCXJlYnVpbGRfcmVz ZXJ2ZWRfbWFza3MoY3MtPnBhcmVudCk7IA0KKw0KKwl3cml0ZV91bmxvY2so JmNwdXNldF9sb2NrKTsNCisJcmVsZWFzZV9jcHVzZXQoY3MtPnBhcmVudCk7 DQorDQorCWtmcmVlKGNzKTsNCit9DQorCQ0KKy8qIHJlbW92ZSBhbiB1bnVz ZWQgY3B1c2V0IGlmIGl0IGhhcyB0aGUgQ1BVU0VUX0FVVE9DTEVBTiBmbGFn ICovDQorc3RhdGljIHZvaWQgY2hlY2tfY3B1c2V0X2F1dG9jbGVhbihzdHJ1 Y3QgY3B1c2V0ICogY3MpDQorew0KKwlpZiAoIShjcy0+ZmxhZ3MgJiBDUFVT RVRfQVVUT0NMRUFOKSkgcmV0dXJuOyAvKiBub3QgYXV0b2NsZWFuICovDQor CWlmICghY3MtPmhhc19iZWVuX2F0dGFjaGVkKSByZXR1cm47CQ0KKw0KKwl3 cml0ZV9sb2NrKCZjcHVzZXRfbG9jayk7DQorDQorCWlmIChhdG9taWNfcmVh ZCgmY3MtPmNvdW50KSA+IDApIHsgLyogc3RpbGwgaW4gdXNlICovDQorCQl3 cml0ZV91bmxvY2soJmNwdXNldF9sb2NrKTsNCisJCXJldHVybjsgDQorCX0N CisNCisJaW5mbygiYXV0b2NsZWFuaW5nIGNwdXNldCAlZFxuIiwgY3MtPmlk KTsNCisNCisJX19jcHVzZXRfZGVzdHJveShjcyk7DQorCS8qIHdyaXRlX3Vu bG9jaygmY3B1c2V0X2xvY2spIHdpbGwgYmUgZG9uZSBpbnNpZGUgX19jcHVz ZXRfZGVzdHJveSAqLw0KK30NCisNCithc21saW5rYWdlIGxvbmcgc3lzX2Nw dXNldF9hdHRhY2goY3B1c2V0X3QgY3B1c2V0LCBwaWRfdCBwaWQpDQorew0K KwlzdHJ1Y3QgY3B1c2V0ICogY3M7DQorCXN0cnVjdCB0YXNrX3N0cnVjdCAq IHRhc2s7DQorCQ0KKwlpbmZvKCJzeXNfY3B1c2V0X2F0dGFjaCglZCwgJWQp IGNhbGxlZFxuIiwgY3B1c2V0LCBwaWQpOw0KKw0KKwlyZWFkX2xvY2soJmNw dXNldF9sb2NrKTsgDQorCWNzID0gZmluZF9jcHVzZXRfYnlfaWQoY3B1c2V0 KTsNCisNCisJaWYgKCFjcykgew0KKwkJcmVhZF91bmxvY2soJmNwdXNldF9s b2NrKTsgDQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKw0KKwl1c2Vf Y3B1c2V0KGNzKTsNCisNCisJcmVhZF91bmxvY2soJmNwdXNldF9sb2NrKTsg DQorCQ0KKwlpZiAoYmFkX3Blcm1pc3Npb24oY3MpKSB7DQorCQlyZWxlYXNl X2NwdXNldChjcyk7DQorCQlyZXR1cm4gLUVQRVJNOw0KKwl9DQorDQorCWlm ICghY3MtPmNwdXNfYWxsb3dlZCkgeyAvKiBjYW5ub3QgYXR0YWNoIGEgY3B1 c2V0IHdpdGggbm8gQ1BVICovDQorCQlyZWxlYXNlX2NwdXNldChjcyk7DQor CQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwlpZiAocGlkKSB7CQ0KKwkJ cmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsNCisNCisJCXRhc2sgPSBmaW5k X3Rhc2tfYnlfcGlkKHBpZCk7DQorCQlpZiAoIXRhc2spIHsNCisJCQlyZWFk X3VubG9jaygmdGFza2xpc3RfbG9jayk7DQorCQkJcmVsZWFzZV9jcHVzZXQo Y3MpOw0KKwkJCXJldHVybiAtRVNSQ0g7DQorCQl9DQorDQorCQlnZXRfdGFz a19zdHJ1Y3QodGFzayk7DQorCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9j ayk7DQorDQorCQlpZiAoKGN1cnJlbnQtPmV1aWQpICYmIChjdXJyZW50LT5l dWlkICE9IHRhc2stPnVpZCkgJiYgKGN1cnJlbnQtPmV1aWQgIT0gdGFzay0+ c3VpZCkpIHsNCisJCQlwdXRfdGFza19zdHJ1Y3QodGFzayk7DQorCQkJcmVs ZWFzZV9jcHVzZXQoY3MpOw0KKwkJCXJldHVybiAtRVBFUk07DQorCQl9DQor CX0NCisJZWxzZSB7DQorCQl0YXNrID0gY3VycmVudDsNCisJCWdldF90YXNr X3N0cnVjdCh0YXNrKTsNCisJfQ0KKw0KKwlzZXRfY3B1c19hbGxvd2VkKHRh c2ssIGNwdXNldF9jb21iaW5lX21hc2sodGFzay0+Y3B1c193YW50ZWQsIGNz LT5jcHVzX2FsbG93ZWQpKTsNCisJY3MtPmhhc19iZWVuX2F0dGFjaGVkID0g MTsNCisNCisJLyogcmVsZWFzZSB0aGUgY3VycmVudCBjcHUgc2V0IG9mIHRo ZSB0YXNrICovDQorCS8qIGxvY2sgdG8gcHJldmVudCBhIHJhY2Ugd2hlcmUg dHdvIGNwdXNldF9hdHRhY2ggd291bGQgYmUgY2FsbGVkIG9uIHRoZSBzYW1l IA0KKwkgKiB0YXNrIGF0IHRoZSBzYW1lIHRpbWUsIGFuZCB0YXNrLT5jcHVz ZXQgd291bGQgYmUgcmVsZWFzZWQgdHdpY2UNCisgICAgICAgICAqLw0KKwlz cGluX2xvY2soJnRhc2stPmNwdXNldF9hdHRhY2hfbG9jayk7DQorCWlmICgh dGFzay0+Y3B1c2V0KSB7IC8qIHRhc2sgd2l0aCBubyBjcHVzZXQgPyBtZWFu cyBpdCBpcyBleGl0aW5nICovIA0KKwkJc3Bpbl91bmxvY2soJnRhc2stPmNw dXNldF9hdHRhY2hfbG9jayk7DQorCQlwdXRfdGFza19zdHJ1Y3QodGFzayk7 DQorCQlyZWxlYXNlX2NwdXNldChjcyk7DQorCQlyZXR1cm4gLUVTUkNIOw0K Kwl9CQ0KKwlyZWxlYXNlX2NwdXNldCh0YXNrLT5jcHVzZXQpOw0KKwkvKiBu b3cgbG9jayB0aGUgY3B1c2V0LCB0byBwcm90ZWN0IGFueSBydW5uaW5nIG1p Z3JhdGVfY3B1c2V0Li4uKCkNCisJICogZnJvbSBiZWluZyBkaXN0dXJiZWQg YnkgdXMNCisJICovDQorCXNwaW5fbG9jaygmY3MtPmF0dGFjaF9sb2NrKTsN CisJdGFzay0+Y3B1c2V0ID0gY3M7DQorCXNwaW5fdW5sb2NrKCZjcy0+YXR0 YWNoX2xvY2spOw0KKw0KKwlzcGluX3VubG9jaygmdGFzay0+Y3B1c2V0X2F0 dGFjaF9sb2NrKTsNCisJDQorDQorCXB1dF90YXNrX3N0cnVjdCh0YXNrKTsN CisNCisJLyogZG9uJ3QgY2FsbCByZWxlYXNlX2NwdXNldCBoZXJlLCANCisJ ICogdGhlIHRhc2sgYmVpbmcgYXR0YWNoZWQgdG8gdGhlIGNwdXNldCANCisJ ICogaXMgcmVhbGx5IGEgbmV3IHVzZXIgIQ0KKwkgKi8NCisNCisJcmV0dXJu IDA7DQorfQ0KKw0KKwkJDQorc3RhdGljIGludCBfX2NwdXNldF9zZXRhZmZp bml0eShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiB0YXNrKQ0KK3sNCisJY3B1bWFz a190IGFsbG93ZWQ7DQorCWNwdW1hc2tfdCBsYXN0ID0gQ1BVX01BU0tfTk9O RTsgLyogcmVtZW1iZXIgOiAwIGlzIG5vdCBhIHZhbGlkIG1hc2sgKi8NCisN CisJLyogV2UgY2Fubm90IGhvbGQgYW55IGxvY2sgd2hpbGUgY2FsbGluZyBz ZXRfY3B1c19hbGxvd2VkDQorCSAqIHNpbmNlIGl0IG1pZ2h0IHNsZWVwDQor CSAqIFRodXMgd2UgdHJ5IHVudGlsIHdlIGFyZSBzdXJlIHdlIGRpZCBpdCB3 aXRoIHRoZSByaWdodCBtYXNrDQorCSAqLw0KKwlmb3IoOzspIHsJDQorCQlz cGluX2xvY2soJnRhc2stPmNwdXNldF9hdHRhY2hfbG9jayk7DQorCQlpZiAo IXRhc2stPmNwdXNldCkgew0KKwkJCS8qIHRhc2sgZXhpdGluZyAqLw0KKwkJ CXNwaW5fdW5sb2NrKCZ0YXNrLT5jcHVzZXRfYXR0YWNoX2xvY2spOw0KKwkJ CXJldHVybiAwOw0KKwkJfQ0KKwkJYWxsb3dlZCA9IHRhc2stPmNwdXNldC0+ Y3B1c19hbGxvd2VkOw0KKwkJc3Bpbl91bmxvY2soJnRhc2stPmNwdXNldF9h dHRhY2hfbG9jayk7DQorDQorCQlpZiAobGFzdCA9PSBhbGxvd2VkKSANCisJ CQlyZXR1cm4gMDsNCisNCisJCWludCByZXQ7DQorCQlyZXQgPSBzZXRfY3B1 c19hbGxvd2VkKHRhc2ssIGNwdXNldF9jb21iaW5lX21hc2sodGFzay0+Y3B1 c193YW50ZWQsIGFsbG93ZWQpKTsNCisJCWlmIChyZXQgPCAwKSANCisJCQly ZXR1cm4gcmV0Ow0KKw0KKwkJbGFzdCA9IGFsbG93ZWQ7DQorCX0NCit9DQor DQorLyogT3VyIHJlcGxhY2VtZW50IGZ1bmN0aW9uIGZvciBzZXRfY3B1c19h bGxvd2VkICovDQoraW50IGNwdXNldF9zZXRhZmZpbml0eShzdHJ1Y3QgdGFz a19zdHJ1Y3QgKiB0YXNrLCBjcHVtYXNrX3QgbWFzaykNCit7DQorCXRhc2st PmNwdXNfd2FudGVkID0gbWFzazsNCisJcmV0dXJuIF9fY3B1c2V0X3NldGFm ZmluaXR5KHRhc2spOw0KK30NCisNCisvKiBXaGVuIGEgY3B1c2V0IHdpdGgg YXR0YWNoZWQgcHJvY2Vzc2VzIGlzIGJlaW5nIHJlYWxsb2MnZWQgQ1BVcw0K KyAqIHVwZGF0ZSB0aGUgcHJvY2Vzc2VzJyBtYXNrcyBhbmQgbWlncmF0ZSB0 aGVtDQorICovDQorc3RhdGljIHZvaWQgbWlncmF0ZV9jcHVzZXRfcHJvY2Vz c2VzKHN0cnVjdCBjcHVzZXQgKiBjcykNCit7CQkNCisJc3RydWN0IHRhc2tf c3RydWN0ICpnLCAqcDsNCisJLyogVGhpcyBzaG91bGQgYmUgYSBSQVJFIHVz ZSBvZiB0aGUgY3B1c2V0cy4NCisJICogdGhlcmVmb3JlIHdlJ2xsIHByZWZl ciBhbiBpbmVmZmljaWVudCBvcGVyYXRpb24gaGVyZQ0KKwkgKiAoc2VhcmNo aW5nIHRoZSB3aG9sZSBwcm9jZXNzIGxpc3QpDQorCSAqIHRoYW4gYWRkaW5n IGFub3RoZXIgbGlzdF9oZWFkIGluIHRhc2tfdA0KKwkgKiBhbmQgbG9ja3Mg YW5kIGxpc3RfYWRkIGZvciBlYWNoIGZvcmsoKQ0KKwkgKi8NCisNCisJLyog d2UgbmVlZCB0byBsb2NrIHRhc2tsaXN0X2xvY2sgZm9yIHJlYWRpbmcgdGhl IHByb2Nlc3NlcyBsaXN0DQorCSAqIEJVVCB3ZSBjYW5ub3QgY2FsbCBzZXRf Y3B1c19hbGxvd2VkIHdpdGggYW55IHNwaW5sb2NrIGhlbGQNCisJICogPT4g d2UgbmVlZCB0byBzdG9yZSB0aGUgbGlzdCBvZiB0YXNrIHN0cnVjdCBpbiBh biBhcnJheQ0KKwkgKi8NCisJc3RydWN0IHRhc2tfc3RydWN0ICoqIGFycmF5 Ow0KKwlpbnQgbmIgPSAwOw0KKwlpbnQgc3o7DQorDQorCXNwaW5fbG9jaygm Y3MtPmF0dGFjaF9sb2NrKTsNCisJLyogYXQgbW9zdCBjcy0+Y291bnQgLSAx IHByb2Nlc3NlcyB0byBtaWdyYXRlICovDQorCXN6ID0gYXRvbWljX3JlYWQo JmNzLT5jb3VudCkgLSAxOw0KKwlhcnJheSA9IChzdHJ1Y3QgdGFza19zdHJ1 Y3QgKiopIGttYWxsb2Moc3ogKiBzaXplb2Yoc3RydWN0IHRhc2tfc3RydWN0 ICopLCBHRlBfQVRPTUlDKTsNCisJaWYgKCFhcnJheSkgew0KKwkJc3Bpbl91 bmxvY2soJmNzLT5hdHRhY2hfbG9jayk7DQorCQlwcmludGsoIkVycm9yIGFs bG9jYXRpbmcgYXJyYXkgaW4gbWlncmF0ZV9jcHVzZXRfcHJvY2Vzc2VzICFc biIpOw0KKwkJcmV0dXJuOw0KKwl9DQorCS8qIHNlZSBsaW51eC9zY2hlZC5o IGZvciB0aGlzIG5lc3RlZCBmb3IvZG8td2hpbGUgbG9vcCAqLw0KKwlyZWFk X2xvY2soJnRhc2tsaXN0X2xvY2spOw0KKwlkb19lYWNoX3RocmVhZChnLCBw KSB7DQorCQlpZiAocC0+Y3B1c2V0ID09IGNzKSB7DQorCQkJaWYgKG5iID09 IHN6KSB7DQorCQkJCXByaW50aygibWlncmF0ZV9jcHVzZXRfcHJvY2Vzc2Vz OiBhcnJheSBmdWxsICFcbiIpOw0KKwkJCQlnb3RvIGVuZF9sb29wOyAvKiBi cmVhayB3b24ndCB3b3JrIGluIHRoaXMgZG91YmxlIGxvb3AgKi8NCisJCQl9 DQorCQkJZ2V0X3Rhc2tfc3RydWN0KHApOw0KKwkJCWFycmF5W25iKytdID0g cDsNCisJCX0NCisJfSB3aGlsZV9lYWNoX3RocmVhZChnLCBwKTsgDQorZW5k X2xvb3A6CQ0KKwlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7DQorCXNw aW5fdW5sb2NrKCZjcy0+YXR0YWNoX2xvY2spOw0KKwkNCisJd2hpbGUobmIp IHsNCisJCXN0cnVjdCB0YXNrX3N0cnVjdCAqIHAgPSBhcnJheVstLW5iXTsJ DQorCQlfX2NwdXNldF9zZXRhZmZpbml0eShwKTsgDQorCQlwdXRfdGFza19z dHJ1Y3QocCk7DQorCX0NCisJa2ZyZWUoYXJyYXkpOw0KK30NCisNCisNCisN CisvKiBzZWUgaWYgbWFzayBiIGlzIGluY2x1ZGVkIGluIG1hc2sgYSAqLw0K Ky8qIG9sZCB2ZXJzaW9uIDogI2RlZmluZSBNQVNLX0lOQ0xVREVEKGEsIGIp ICgoKGEpfChiKSkgPT0gKGEpKSAqLw0KK3N0YXRpYyBpbmxpbmUgaW50IE1B U0tfSU5DTFVERUQoY3B1bWFza190IGEsIGNwdW1hc2tfdCBiKQ0KK3sNCisJ Y3B1bWFza190IHI7DQorCWNwdXNfb3IociwgYSwgYik7DQorCXJldHVybiBj cHVzX2VxdWFsKHIsIGEpOw0KK30NCisNCitzdGF0aWMgaW5saW5lIGNwdW1h c2tfdCBDUFVTX05PVChjcHVtYXNrX3QgYSkNCit7DQorCWNwdXNfY29tcGxl bWVudChhKTsNCisJcmV0dXJuIGE7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUg Y3B1bWFza190IENQVVNfT1IoY3B1bWFza190IGEsIGNwdW1hc2tfdCBiKQ0K K3sNCisJY3B1bWFza190IHI7DQorCWNwdXNfb3IociwgYSwgYik7DQorCXJl dHVybiByOw0KK30NCisNCitzdGF0aWMgaW5saW5lIGNwdW1hc2tfdCBDUFVT X0FORChjcHVtYXNrX3QgYSwgY3B1bWFza190IGIpDQorew0KKwljcHVtYXNr X3QgcjsNCisJY3B1c19hbmQociwgYSwgYik7DQorCXJldHVybiByOw0KK30N CisNCisNCithc21saW5rYWdlIGxvbmcgc3lzX2NwdXNldF9hbGxvYyhjcHVz ZXRfdCBjcHVzZXQsIGludCBsZW4sIHVuc2lnbmVkIGxvbmcgKiB1c2VyX21h c2tfcHRyKQ0KK3sNCisJY3B1bWFza190IG5ld19tYXNrOw0KKwljcHVtYXNr X3Qgb2xkX21hc2s7DQorCXN0cnVjdCBjcHVzZXQgKiBjcyA7DQorCWludCBy ZXR2YWw7DQorDQorCWluZm8oInN5c19jcHVzZXRfYWxsb2MoJWQsIC4uLikg Y2FsbGVkXG4iLCBjcHVzZXQpOw0KKw0KKwlpZiAoY3B1c2V0ID09IENQVVNF VF9UT1BfSUQpDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJaWYgKGxlbiA8 IHNpemVvZihuZXdfbWFzaykpDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJ aWYgKGNvcHlfZnJvbV91c2VyKCZuZXdfbWFzaywgdXNlcl9tYXNrX3B0ciwg c2l6ZW9mKG5ld19tYXNrKSkpDQorCQlyZXR1cm4gLUVGQVVMVDsNCisNCisJ LyogZG8gc29tZSBzYW5pdHkgY2hlY2tzIG9uIHRoZSBtYXNrICovDQorCS8q IG11c3QgaGF2ZSBhdCBsZWFzdCBPTkUgY3B1ICovDQorCWlmIChjcHVzX2Vt cHR5KG5ld19tYXNrKSkNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwkvKiBt dXN0IG9ubHkgaGF2ZSBleGlzdGluZyBDUFVzICovDQorCWlmICghTUFTS19J TkNMVURFRChwaHlzX2NwdV9wcmVzZW50X21hcCwgbmV3X21hc2spKQ0KKwkJ cmV0dXJuIC1FSU5WQUw7DQorDQorCQ0KKwlpbmZvKCIgd2l0aCBtYXNrICUw MTZseFxuIiwgbmV3X21hc2spOw0KKw0KKwlyZWFkX2xvY2soJmNwdXNldF9s b2NrKTsgDQorCWNzID0gZmluZF9jcHVzZXRfYnlfaWQoY3B1c2V0KTsNCisJ DQorCQ0KKwlpZiAoIWNzKSB7DQorCQlyZWFkX3VubG9jaygmY3B1c2V0X2xv Y2spOyANCisJCXJldHVybiAtRUlOVkFMOw0KKwl9DQorCQ0KKwl1c2VfY3B1 c2V0KGNzKTsNCisJcmVhZF91bmxvY2soJmNwdXNldF9sb2NrKTsgDQorDQor CWlmIChiYWRfcGVybWlzc2lvbihjcykpIHsNCisJCXJlbGVhc2VfY3B1c2V0 KGNzKTsNCisJCXJldHVybiAtRVBFUk07DQorCX0NCisJCQ0KKwkvKiBsb2Nr IGVhcmx5IC0gd2UgZG8gbm90IHdhbnQgdGhlIHBhcmVudCdzIG1hc2tzIHRv IGNoYW5nZSB1bmRlciB1cyAqLw0KKwl3cml0ZV9sb2NrKCZjcHVzZXRfbG9j ayk7DQorCS8qIG11c3Qgb25seSBoYXZlIENQVXMgaW4gdGhlIHBhcmVudCBj cHVzZXQgKGlmIGFueSkgKi8NCisJcmV0dmFsID0gLUVBQ0NFUzsNCisJaWYg KCFNQVNLX0lOQ0xVREVEKGNzLT5wYXJlbnQtPmNwdXNfYWxsb3dlZCwgbmV3 X21hc2spKSANCisJCWdvdG8gbWFza19lcnJvcjsNCisJDQorCW9sZF9tYXNr ID0gY3MtPmNwdXNfYWxsb3dlZDsNCisNCisJcmV0dmFsID0gLUVCVVNZOw0K KwkvKiBtdXN0IG9ubHkgaGF2ZSBmcmVlIGNwdXMgKi8NCisJaWYgKGNzLT5m bGFncyAmIENQVVNFVF9TVFJJQ1QpIHsNCisJCS8qIENQVXMgYWxyZWFkeSBp biB0aGlzIGNzIEFSRSBmcmVlIGZvciB1cyAhIC0+IG9sZF9tYXNrICovDQor CQkvKiBUaGUgbmV4dCBmZXcgbGluZXMgbWVhbiA6DQorCQkgKiBpZiAoIU1B U0tfSU5DTFVERUQofmNzLT5wYXJlbnQtPmNwdXNfcmVzZXJ2ZWQsIG5ld19t YXNrICYgKH5vbGRfbWFzaykpKSANCisJCSAqIChqdXN0IG9iZnVzY2F0ZWQg bXkgdGhlIGNwdXNfIG1hY3JvcykNCisJCSAqLw0KKwkJaWYgKCFNQVNLX0lO Q0xVREVEKENQVVNfTk9UKGNzLT5wYXJlbnQtPmNwdXNfcmVzZXJ2ZWQpLCAN CisJCQkJICAgQ1BVU19BTkQobmV3X21hc2ssIENQVVNfTk9UKG9sZF9tYXNr KSkpKQ0KKwkJCWdvdG8gbWFza19lcnJvcjsNCisJfQ0KKwllbHNlIHsNCisJ CWlmICghTUFTS19JTkNMVURFRChDUFVTX05PVChjcy0+cGFyZW50LT5jcHVz X3N0cmljdGx5X3Jlc2VydmVkKSwgbmV3X21hc2spKQ0KKwkJCWdvdG8gbWFz a19lcnJvcjsNCisJfQ0KKw0KKw0KKwkvKiBhcmUgd2UgdHJ5aW5nIHRvIEZS RUUgcmVzZXJ2ZWQgQ1BVcyANCisJICogKGkuZS4gcmVzZXJ2ZWQgYnkgY2hp bGRyZW4gY3B1c2V0cykNCisJICogZnJvbSBhIG5vbi11bnVzZWQgY3B1c2V0 ID8gKi8NCisJLyogaWYgKGNzLT5jcHVzX3Jlc2VydmVkICYgfm5ld19tYXNr KSAqLw0KKwlpZiAoIWNwdXNfZW1wdHkoQ1BVU19BTkQoY3MtPmNwdXNfcmVz ZXJ2ZWQsIENQVVNfTk9UKG5ld19tYXNrKSkpKQ0KKwkJZ290byBtYXNrX2Vy cm9yOw0KKw0KKwkvKiBldmVyeXRoaW5nIGlzIE9LICovDQorCWNzLT5jcHVz X2FsbG93ZWQgPSBuZXdfbWFzazsNCisJcmVidWlsZF9yZXNlcnZlZF9tYXNr cyhjcy0+cGFyZW50KTsNCisJd3JpdGVfdW5sb2NrKCZjcHVzZXRfbG9jayk7 IA0KKw0KKwkvKiBkaWQgd2UgY2hhbmdlIGEgbm9uLXVudXNlZCBjcHVzZXQg PyAqLw0KKwlpZiAoKGF0b21pY19yZWFkKCZjcy0+Y291bnQpID4gMSkgJiYg IWNwdXNfZXF1YWwobmV3X21hc2ssIG9sZF9tYXNrKSkgew0KKwkJbWlncmF0 ZV9jcHVzZXRfcHJvY2Vzc2VzKGNzKTsNCisJfQ0KKw0KKwlyZWxlYXNlX2Nw dXNldChjcyk7DQorCXJldHVybiAwOw0KKw0KK21hc2tfZXJyb3I6DQorCXdy aXRlX3VubG9jaygmY3B1c2V0X2xvY2spOyANCisJcmVsZWFzZV9jcHVzZXQo Y3MpOw0KKwlyZXR1cm4gcmV0dmFsOw0KK30NCisNCithc21saW5rYWdlIGxv bmcgc3lzX2NwdXNldF9nZXRmcmVlY3B1cyhpbnQgZmxhZ3MsIGludCBsZW4s IHVuc2lnbmVkIGxvbmcgKiB1c2VyX21hc2tfcHRyKQ0KK3sNCisJY3B1bWFz a190IHJlc2VydmVkOw0KKwljcHVtYXNrX3QgZnJlZTsNCisNCisJaW50IHJl YWxfbGVuID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOw0KKwlpZiAobGVuIDwg cmVhbF9sZW4pDQorCQlyZXR1cm4gLUVJTlZBTDsNCisJDQorCWlmIChmbGFn cyAmIENQVVNFVF9TVFJJQ1QpDQorCQlyZXNlcnZlZCA9IGN1cnJlbnQtPmNw dXNldC0+Y3B1c19yZXNlcnZlZDsNCisJZWxzZQkNCisJCXJlc2VydmVkID0g Y3VycmVudC0+Y3B1c2V0LT5jcHVzX3N0cmljdGx5X3Jlc2VydmVkOw0KKw0K KwlmcmVlID0gQ1BVU19BTkQoY3VycmVudC0+Y3B1c2V0LT5jcHVzX2FsbG93 ZWQsIENQVVNfTk9UKHJlc2VydmVkKSk7DQorDQorCWlmIChjb3B5X3RvX3Vz ZXIodXNlcl9tYXNrX3B0ciwgJmZyZWUsIHJlYWxfbGVuKSkNCisJCXJldHVy biAtRUZBVUxUOw0KKw0KKwlyZXR1cm4gcmVhbF9sZW47DQorfQ0KKw0KKy8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqDQorICoqKioqKioqKioqKioqKioqIC9wcm9jL2Nw dXNldHMgc3R1ZmYgKioqKioqKioqKioqKioqKioqKioqKioNCisgKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKg0KKyAqLw0KKyNpZmRlZiBDT05GSUdfQ1BVU0VUU19QUk9D DQorDQorc3RhdGljIHZvaWQgKnByb2NfY3B1c2V0c19zdGFydChzdHJ1Y3Qg c2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQ0KK3sNCisgICAgICAgIGxvZmZf dCBuID0gKnBvczsNCisgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnA7DQor DQorCXJlYWRfbG9jaygmY3B1c2V0X2xvY2spOyANCisgICAgICAgIGlmICgh bikgc2VxX3B1dHMobSwgImNwdXNldHMgaW5mbyBcbiIpOw0KKyAgICAgICAg DQorCXAgPSAmdG9wX2NwdXNldC5saXN0Ow0KKyAgICAgICAgd2hpbGUgKG4t LSkgew0KKyAgICAgICAgICAgICAgICBwID0gcC0+bmV4dDsNCisgICAgICAg ICAgICAgICAgaWYgKHAgPT0gJnRvcF9jcHVzZXQubGlzdCkNCisgICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsNCisgICAgICAgIH0NCisg ICAgICAgIHJldHVybiBsaXN0X2VudHJ5KHAsIHN0cnVjdCBjcHVzZXQsIGxp c3QpOw0KK30NCisNCitzdGF0aWMgdm9pZCAqcHJvY19jcHVzZXRzX25leHQo c3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwLCBsb2ZmX3QgKnBvcykNCit7 DQorICAgICAgICBzdHJ1Y3QgY3B1c2V0ICogY3MgPSBwOw0KKyAgICAgICAg KysqcG9zOw0KKyAgICAgICAgcmV0dXJuIGNzLT5saXN0Lm5leHQgPT0gJnRv cF9jcHVzZXQubGlzdCA/IE5VTEwNCisgICAgICAgICAgICAgICAgOiBsaXN0 X2VudHJ5KGNzLT5saXN0Lm5leHQsIHN0cnVjdCBjcHVzZXQsIGxpc3QpOw0K K30NCisNCisvKiBIb3cgbWFueSBjaGFycyBuZWVkZWQgdG8gcHJpbnQgYSBs b25nIChhcyBhIG1hc2spID8gKi8NCisjZGVmaW5lIENIQVJTX0ZPUl9MT05H IAkoQklUU19QRVJfTE9ORyAvIDQpDQorI2RlZmluZSBDRkwgCQlDSEFSU19G T1JfTE9ORw0KK3N0YXRpYyB2b2lkIHNwcmludF9tYXNrKGNoYXIgKiBidWYs IGNwdW1hc2tfdCBtYXNrKQ0KK3sNCisjaWZkZWYgQ1BVX0FSUkFZX1NJWkUJ DQorCWludCBsOw0KKwlmb3IgKGwgPSBDUFVfQVJSQVlfU0laRSAtIDE7IGw+ PTA7IGwtLSkgew0KKwkJLyogWFhYIG9ubHkgNjQgYml0cyBsb25nIHN1cHBv cnRlZCBoZXJlICEgKi8NCisJCXNwcmludGYoYnVmLCAiJTAxNmx4IiwgbWFz ay5tYXNrW2xdKTsNCisJCWJ1ZiArPSBDRkw7DQorCX0NCisjZWxzZQ0KKwkv KiBYWFggb25seSA2NCBiaXRzIGxvbmcgc3VwcG9ydGVkIGhlcmUgISAqLw0K KwlzcHJpbnRmKGJ1ZiwgIiUwMTZseCIsIG1hc2spOw0KKyNlbmRpZg0KK30N CisJCQ0KKw0KK3N0YXRpYyBpbnQgcHJvY19jcHVzZXRzX3Nob3coc3RydWN0 IHNlcV9maWxlICptLCB2b2lkICpwKQ0KK3sNCisgICAgICAgIHN0cnVjdCBj cHVzZXQgKiBjcyA9IHA7DQorI2lmZGVmIENQVV9BUlJBWV9TSVpFDQorCWNo YXIgbWFza2J1ZltDUFVfQVJSQVlfU0laRSAqIENGTCArIDFdOw0KKyNlbHNl DQorCWNoYXIgbWFza2J1ZltDRkwgKyAxXTsNCisjZW5kaWYNCisNCisJc2Vx X3ByaW50ZihtLCAiY3B1c2V0ICVkIHtcbiINCisJCSJcdHBhcmVudCA9ICVk XG4iDQorCQkiXHRmbGFncyA9ICVkXG4iDQorCQkiXHRjb3VudCA9ICVkXG4i DQorCQkiXHRoYmEgPSAlZFxuIg0KKwkJIlx0dWlkICYgc3VpZCA9ICVkICYg JWRcbiIsDQorCQljcy0+aWQsIGNzLT5wYXJlbnQgPyBjcy0+cGFyZW50LT5p ZCA6IC0xLCANCisJCWNzLT5mbGFncywgYXRvbWljX3JlYWQoJmNzLT5jb3Vu dCksIGNzLT5oYXNfYmVlbl9hdHRhY2hlZCwNCisJCWNzLT51aWQsIGNzLT5z dWlkKTsNCisNCisJc3ByaW50X21hc2sobWFza2J1ZiwgY3MtPmNwdXNfYWxs b3dlZCk7DQorCXNlcV9wcmludGYobSwiXHRjcHVzX2FsbG93ZWQgPSAlc1xu IiwgbWFza2J1Zik7DQorCXNwcmludF9tYXNrKG1hc2tidWYsIGNzLT5jcHVz X3Jlc2VydmVkKTsNCisJc2VxX3ByaW50ZihtLCJcdGNwdXNfcmVzZXJ2ZWQg PSAlc1xuIiwgbWFza2J1Zik7DQorCXNwcmludF9tYXNrKG1hc2tidWYsIGNz LT5jcHVzX3N0cmljdGx5X3Jlc2VydmVkKTsNCisJc2VxX3ByaW50ZihtLCJc dGNwdXNfc3RyaWN0bHlfcmVzZXJ2ZWQgPSAlc1xuIiwgbWFza2J1Zik7DQor DQorCXNlcV9wcmludGYobSwgIn1cblxuIik7DQorDQorCXJldHVybiAwOw0K K30NCisNCitzdGF0aWMgdm9pZCBwcm9jX2NwdXNldHNfc3RvcChzdHJ1Y3Qg c2VxX2ZpbGUgKm0sIHZvaWQgKnApDQorew0KKwlyZWFkX3VubG9jaygmY3B1 c2V0X2xvY2spOw0KK30NCisNCitzdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRp b25zIGNwdXNldHNfb3AgPSB7DQorCS5zdGFydCA9CXByb2NfY3B1c2V0c19z dGFydCwNCisJLm5leHQgPQkJcHJvY19jcHVzZXRzX25leHQsDQorCS5zdG9w ID0JCXByb2NfY3B1c2V0c19zdG9wLA0KKwkuc2hvdyA9CQlwcm9jX2NwdXNl dHNfc2hvdw0KK307DQorDQorDQorc3RhdGljIGludCBwcm9jX2NwdXNldHNf b3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkN Cit7DQorCXJldHVybiBzZXFfb3BlbihmaWxlLCAmY3B1c2V0c19vcCk7DQor fQ0KKw0KK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfY3B1 c2V0c19vcGVyYXRpb25zID0gew0KKwkub3BlbgkJPSBwcm9jX2NwdXNldHNf b3BlbiwNCisJLnJlYWQJCT0gc2VxX3JlYWQsDQorCS5sbHNlZWsJCT0gc2Vx X2xzZWVrLA0KKwkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLA0KK307DQorDQor DQorc3RhdGljIGludCBfX2luaXQgcHJvY19jcHVzZXRzX2luaXQodm9pZCkN Cit7DQorCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50cnk7DQorDQorCWVu dHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoImNwdXNldHMiLCAwLCBOVUxMKTsN CisJaWYgKGVudHJ5KQ0KKwkJZW50cnktPnByb2NfZm9wcyA9ICZwcm9jX2Nw dXNldHNfb3BlcmF0aW9uczsNCisJcmV0dXJuIDA7DQorfQ0KKw0KKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqDQorICoqKioqKioqKioqIC9wcm9jL3h4eC9jcHVzZXQg KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKg0KKyAqLw0KK2ludCBwcm9jX3BpZF9jcHVzZXQoc3RydWN0IHRh c2tfc3RydWN0ICp0YXNrLCBjaGFyICpidWZmZXIpDQorew0KKwlyZXR1cm4g c3ByaW50ZihidWZmZXIsICIlZFxuIiwgdGFzay0+Y3B1c2V0LT5pZCk7DQor fQ0KKw0KKyNlbmRpZiAvKiBDT05GSUdfQ1BVU0VUU19QUk9DICovCQ0KKw0K ---2118690558-860892202-1064419141=:173334--