From: Andreas Dilger Subject: [PATCH] improved filefrag output Date: Thu, 18 Feb 2010 06:07:23 -0700 Message-ID: <91100C56-7646-4560-8FF6-B36953B69B16@sun.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Boundary_(ID_eKULuwBFJyfYdkCsl8b9aw)" Cc: ext4 development To: "Theodore Ts'o" Return-path: Received: from sca-es-mail-1.Sun.COM ([192.18.43.132]:42434 "EHLO sca-es-mail-1.sun.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751109Ab0BRNHb (ORCPT ); Thu, 18 Feb 2010 08:07:31 -0500 Received: from fe-sfbay-09.sun.com ([192.18.43.129]) by sca-es-mail-1.sun.com (8.13.7+Sun/8.12.9) with ESMTP id o1ID7QIP010130 for ; Thu, 18 Feb 2010 05:07:30 -0800 (PST) Received: from conversion-daemon.fe-sfbay-09.sun.com by fe-sfbay-09.sun.com (Sun Java(tm) System Messaging Server 7u2-7.04 64bit (built Jul 2 2009)) id <0KY100300G6DY500@fe-sfbay-09.sun.com> for linux-ext4@vger.kernel.org; Thu, 18 Feb 2010 05:07:26 -0800 (PST) Sender: linux-ext4-owner@vger.kernel.org List-ID: --Boundary_(ID_eKULuwBFJyfYdkCsl8b9aw) Content-type: text/plain; CHARSET=US-ASCII; delsp=yes; format=flowed Content-transfer-encoding: 7BIT Attached is a patch to improve the filefrag output. The most important part of the change is that it allows the "extent format" output to be used even if the filesystem does not support FIEMAP. This is useful for older kernels (i.e. most vendor kernels), or in case FIEMAP hasn't been wired into a filesystem yet. The extent format output is improved to be more similar to that of xfs_bmap, so it prints out a range of logical and physical block numbers, in addition to the extent length, so that it is easier to see where the discontinuities are. There is also an option to print out the extents/lengths in hex, and using a different blocksize (e.g. "- b1M" to print in units of 1MB): $ filefrag -e -b1M "Indiana Jones And The Temple Of Doom.avi" ext: device_logical: physical_offset: length: flags: 0: 0.. 1: 320566.. 320567: 1: 1: 1.. 3: 320866.. 320868: 2: 2: 3.. 3: 320768.. 320768: 0: 3: 4.. 29: 320870.. 320895: 26: 4: 30.. 155: 320898.. 321023: 126: 5: 156.. 281: 321026.. 321151: 126: 6: 282.. 407: 321154.. 321279: 126: 7: 408.. 533: 321282.. 321407: 126: 8: 534.. 659: 321410.. 321535: 126: Also included is support for FIEMAP extensions to support multi-device filesystems (e.g. Lustre, ZFS, maybe btrfs in the future). Cheers, Andreas -- Andreas Dilger Sr. Staff Engineer, Lustre Group Sun Microsystems of Canada, Inc. --Boundary_(ID_eKULuwBFJyfYdkCsl8b9aw) Content-type: application/octet-stream; name=e2fsprogs-fiemap-lustre.patch; x-unix-mode=0644 Content-transfer-encoding: BASE64 Content-disposition: attachment; filename=e2fsprogs-fiemap-lustre.patch SW1wcm92ZSB0aGUgZmlsZWZyYWcgb3V0cHV0IGluIGEgbnVtYmVyIG9mIHdheXM6 DQoqIHByb3Blcmx5IGhhbmRsZSB0aGUgLWIgb3B0aW9uIHRvIHByaW50IGJsb2Nr c2l6ZXMgb3RoZXIgdGhhbiBkaXNrIGJsb2Nrc2l6ZQ0KKiBhbGxvdyAtYiB0byB0 YWtlIGFuIGFyZ3VtZW50IHRvIHNwZWNpZnkgdGhlIGJsb2Nrc2l6ZSAod2l0aCBj b21wYXRpYmlsaXR5KQ0KKiBhZGQgLWsgb3B0aW9uIGFzIHNob3J0aGFuZCBmb3Ig IjEwMjQtYnl0ZSBibG9ja3MiIChsaWtlICJkZiAtayIpDQoqIHJlLWVuYWJsZSB0 aGUgLXggb3B0aW9uIHRvIHByaW50IGV4dGVudC1mb3JtYXQgb3V0cHV0LCBldmVu IHdpdGggRklCTUFQDQoqIGltcHJvdmUgZXh0ZW50LWZvcm1hdCB0byBwcmludCBl eHRlbnQgcmFuZ2VzLCBtb3JlIGxpa2UgeGZzX2JtYXANCiogYWRkIC1YIG9wdGlv biB0byBwcmludCBleHRlbnQtZm9ybWF0IG91dHB1dCBpbiBoZXhhZGVjaW1hbA0K KiBwcmludCBvbmUgZXJyb3Igd2l0aCBmaWxlbmFtZSB3aGVuIEZJQk1BUCBmYWls cywgY29udGludWUgb24gdG8gbmV4dCBmaWxlDQoqIGFkZCBzdXBwb3J0IGZvciBG SUVNQVAgZXh0ZW5zaW9ucyBmb3IgbmV0d29yayBhbmQgbXVsdGktZGV2aWNlIGZp bGVzeXN0ZW1zDQoqIGFkZCBhdXRvLWRldGVjdGlvbiBvZiBMdXN0cmUgZmlsZXN5 c3RlbXMgdG8gc2VsZWN0IGNvcnJlY3Qgb3B0aW9ucw0KDQpTaWduZWQtb2ZmLWJ5 OiBBbmRyZWFzIERpbGdlciA8YWRpbGdlckBzdW4uY29tPg0KDQpJbmRleDogZTJm c3Byb2dzLTEuNDEuMTAvbGliL2V4dDJmcy9maWVtYXAuaA0KPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQ0KLS0tIGUyZnNwcm9ncy0xLjQxLjEwLm9yaWcvbGliL2V4dDJmcy9m aWVtYXAuaA0KKysrIGUyZnNwcm9ncy0xLjQxLjEwL2xpYi9leHQyZnMvZmllbWFw LmgNCkBAIC0yMSw3ICsyMSw4IEBAIHN0cnVjdCBmaWVtYXBfZXh0ZW50IHsNCiAJ X191NjQgZmVfbGVuZ3RoOyAgIC8qIGxlbmd0aCBpbiBieXRlcyBmb3IgdGhpcyBl eHRlbnQgKi8NCiAJX191NjQgZmVfcmVzZXJ2ZWQ2NFsyXTsNCiAJX191MzIgZmVf ZmxhZ3M7ICAgIC8qIEZJRU1BUF9FWFRFTlRfKiBmbGFncyBmb3IgdGhpcyBleHRl bnQgKi8NCi0JX191MzIgZmVfcmVzZXJ2ZWRbM107DQorCV9fdTMyIGZlX2Rldmlj ZTsgICAvKiBkZXZpY2UgbnVtYmVyIChmcy1zcGVjaWZpYyBpZiBGSUVNQVBfRVhU RU5UX05FVCkqLw0KKwlfX3UzMiBmZV9yZXNlcnZlZFsyXTsNCiB9Ow0KIA0KIHN0 cnVjdCBmaWVtYXAgew0KQEAgLTQwLDYgKzQxLDcgQEAgc3RydWN0IGZpZW1hcCB7 DQogDQogI2RlZmluZSBGSUVNQVBfRkxBR19TWU5DCTB4MDAwMDAwMDEgLyogc3lu YyBmaWxlIGRhdGEgYmVmb3JlIG1hcCAqLw0KICNkZWZpbmUgRklFTUFQX0ZMQUdf WEFUVFIJMHgwMDAwMDAwMiAvKiBtYXAgZXh0ZW5kZWQgYXR0cmlidXRlIHRyZWUg Ki8NCisjZGVmaW5lIEZJRU1BUF9GTEFHX0RFVklDRV9PUkRFUiAweDQwMDAwMDAw IC8qIHJldHVybiBkZXZpY2Ugb3JkZXJlZCBtYXBwaW5nICovDQogDQogI2RlZmlu ZSBGSUVNQVBfRkxBR1NfQ09NUEFUCShGSUVNQVBfRkxBR19TWU5DIHwgRklFTUFQ X0ZMQUdfWEFUVFIpDQogDQpAQCAtNjMsNCArNjUsOSBAQCBzdHJ1Y3QgZmllbWFw IHsNCiAJCQkJCQkgICAgKiBzdXBwb3J0IGV4dGVudHMuIFJlc3VsdA0KIAkJCQkJ CSAgICAqIG1lcmdlZCBmb3IgZWZmaWNpZW5jeS4gKi8NCiANCisvKiBOZXR3b3Jr IGZpbGVzeXN0ZW0gZmxhZ3MgLSB1c2UgYSBoaWdoIGJpdCwgZG9uJ3QgY29uZmxp Y3Qgd2l0aCB1cHN0cmVhbSAqLw0KKyNkZWZpbmUgRklFTUFQX0VYVEVOVF9OT19E SVJFQ1QJCTB4NDAwMDAwMDAgLyogRGF0YSBtYXBwaW5nIHVuZGVmaW5lZCAqLw0K KyNkZWZpbmUgRklFTUFQX0VYVEVOVF9ORVQJCTB4ODAwMDAwMDAgLyogRGF0YSBz dG9yZWQgcmVtb3RlbHkuDQorCQkJCQkJICAgICogU2V0cyBOT19ESVJFQ1QgZmxh ZyAqLw0KKw0KICNlbmRpZiAvKiBfTElOVVhfRklFTUFQX0ggKi8NCkluZGV4OiBl MmZzcHJvZ3MtMS40MS4xMC9taXNjL2ZpbGVmcmFnLjguaW4NCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0NCi0tLSBlMmZzcHJvZ3MtMS40MS4xMC5vcmlnL21pc2MvZmlsZWZy YWcuOC5pbg0KKysrIGUyZnNwcm9ncy0xLjQxLjEwL21pc2MvZmlsZWZyYWcuOC5p bg0KQEAgLTUsNyArNSwxMCBAQCBmaWxlZnJhZyBcLSByZXBvcnQgb24gZmlsZSBm cmFnbWVudGF0aW9uDQogLlNIIFNZTk9QU0lTDQogLkIgZmlsZWZyYWcNCiBbDQot LkIgXC1CYnN2eA0KKy5CSSBcLWIgYmxvY2tzaXplDQorXQ0KK1sNCisuQiBcLUJl a2xzdnhYDQogXQ0KIFsNCiAuSSBmaWxlcy4uLg0KQEAgLTI3LDggKzMwLDE1IEBA IElmIEZJRU1BUCBpcyBub3Qgc3VwcG9ydGVkIHRoZW4gZmlsZWZyYWcNCiBGb3Jj ZSB0aGUgdXNlIG9mIHRoZSBvbGRlciBGSUJNQVAgaW9jdGwgaW5zdGVhZCBvZiB0 aGUgRklFTUFQIGlvY3RsIGZvcg0KIHRlc3RpbmcgcHVycG9zZXMuDQogLlRQDQot LkIgXC1iDQotVXNlIDEwMjQgYnl0ZSBibG9ja3NpemUgZm9yIHRoZSBvdXRwdXQu DQorLkJJIFwtYiBibG9ja3NpemUNCitVc2Ugc3BlY2lmaWVkIGJsb2Nrc2l6ZSBp biBieXRlcyBmb3IgdGhlIG91dHB1dCBpbnN0ZWFkIG9mIHRoZSBmaWxlc3lzdGVt DQorLlRQDQorLkIgXC1lDQorUHJpbnQgb3V0cHV0IGluIGV4dGVudCBmb3JtYXQs IGV2ZW4gZm9yIG5vbi1leHRlbnQgZmlsZXMuDQorLkJJIFwtaw0KK1VzZSAxMDI0 LWJ5dGUgYmxvY2tzaXplIGZvciBvdXRwdXQuDQorLkIgXC1sDQorRXh0ZW50cyBh cmUgZGlzcGxheWVkIGluIGRldmljZS1sb2dpY2FsIG9mZnNldCBvcmRlci4NCiAu VFANCiAuQiBcLXMNCiBTeW5jIHRoZSBmaWxlIGJlZm9yZSByZXF1ZXN0aW5nIHRo ZSBtYXBwaW5nLg0KQEAgLTM4LDYgKzQ4LDkgQEAgQmUgdmVyYm9zZSB3aGVuIGNo ZWNraW5nIGZvciBmaWxlIGZyYWdtZQ0KIC5UUA0KIC5CIFwteA0KIERpc3BsYXkg bWFwcGluZyBvZiBleHRlbmRlZCBhdHRyaWJ1dGVzLg0KKy5UUA0KKy5CIFwtWA0K K0Rpc3BsYXkgZXh0ZW50IGJsb2NrIG51bWJlcnMgaW4gaGV4YWRlY2ltYWwgZm9y bWF0Lg0KIC5TSCBBVVRIT1INCiAuQiBmaWxlZnJhZw0KIHdhcyB3cml0dGVuIGJ5 IFRoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+Lg0KSW5kZXg6IGUyZnNwcm9n cy0xLjQxLjEwL21pc2MvZmlsZWZyYWcuYw0KPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K LS0tIGUyZnNwcm9ncy0xLjQxLjEwLm9yaWcvbWlzYy9maWxlZnJhZy5jDQorKysg ZTJmc3Byb2dzLTEuNDEuMTAvbWlzYy9maWxlZnJhZy5jDQpAQCAtMTUsOCArMTUs OCBAQA0KICNpbmNsdWRlIDx1bmlzdGQuaD4NCiANCiBpbnQgbWFpbih2b2lkKSB7 DQotICAgIGZwdXRzKCJUaGlzIHByb2dyYW0gaXMgb25seSBzdXBwb3J0ZWQgb24g TGludXghXG4iLCBzdGRlcnIpOw0KLSAgICBleGl0KEVYSVRfRkFJTFVSRSk7DQor CWZwdXRzKCJUaGlzIHByb2dyYW0gaXMgb25seSBzdXBwb3J0ZWQgb24gTGludXgh XG4iLCBzdGRlcnIpOw0KKwlleGl0KEVYSVRfRkFJTFVSRSk7DQogfQ0KICNlbHNl DQogI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFDQpAQCAtNDMsMjMgKzQzLDM1 IEBAIGV4dGVybiBpbnQgb3B0aW5kOw0KICNpbmNsdWRlIDxleHQyZnMvZmllbWFw Lmg+DQogDQogaW50IHZlcmJvc2UgPSAwOw0KLWludCBub19icyA9IDA7CQkvKiBE b24ndCB1c2UgdGhlIGZpbGVzIGJsb2Nrc2l6ZSwgdXNlIDFLIGJsb2Nrc2l6ZSAq Lw0KK2ludCBibG9ja3NpemUgPSAwOwkvKiBVc2Ugc3BlY2lmaWVkIGJsb2Nrc2l6 ZSAoZGVmYXVsdCAxa0IpICovDQogaW50IHN5bmNfZmlsZSA9IDA7CS8qIGZzeW5j IGZpbGUgYmVmb3JlIGdldHRpbmcgdGhlIG1hcHBpbmcgKi8NCiBpbnQgeGF0dHJf bWFwID0gMDsJLyogZ2V0IHhhdHRyIG1hcHBpbmcgKi8NCi1pbnQgZm9yY2VfYm1h cCA9IDA7DQotaW50IGxvZ2ljYWxfd2lkdGggPSAxMjsNCi1pbnQgcGh5c2ljYWxf d2lkdGggPSAxNDsNCi11bnNpZ25lZCBsb25nIGxvbmcgZmlsZXNpemU7DQoraW50 IGZvcmNlX2JtYXAgPSAwOwkvKiBmb3JjZSB1c2Ugb2YgRklCTUFQIGluc3RlYWQg b2YgRklFTUFQICovDQoraW50IGZvcmNlX2V4dGVudCA9IDA7CS8qIHByaW50IG91 dHB1dCBpbiBleHRlbnQgZm9ybWF0IGFsd2F5cyAqLw0KK2ludCBkZXZpY2Vfb2Zm c2V0ID0gMDsJLyogZXh0ZW50cyByZXBvcnQgZGV2aWNlLXJlbGF0aXZlIG9mZnNl dHMgKi8NCitpbnQgbG9naWNhbF93aWR0aCA9IDg7DQoraW50IHBoeXNpY2FsX3dp ZHRoID0gMTA7DQorY2hhciAqZXh0X2ZtdCA9ICIlNGQ6ICUqbGx1Li4lKmxsdTog JSpsbHUuLiUqbGx1OiAlNmxsdTogJXNcbiI7DQorY2hhciAqaGV4X2ZtdCA9ICIl NGQ6ICUqbGx4Li4lKmxseDogJSpsbHguLiUqbGx4OiAlNmxseDogJXNcbiI7DQog DQotI2RlZmluZSBGSUxFRlJBR19GSUVNQVBfRkxBR1NfQ09NUEFUIChGSUVNQVBf RkxBR19TWU5DIHwgRklFTUFQX0ZMQUdfWEFUVFIpDQorI2RlZmluZSBGSUxFRlJB R19GSUVNQVBfRkxBR1NfQ09NUEFUIChGSUVNQVBfRkxBR19TWU5DIHwgRklFTUFQ X0ZMQUdfWEFUVFIgfFwNCisJCQkJICAgICAgRklFTUFQX0ZMQUdfREVWSUNFX09S REVSKQ0KIA0KICNkZWZpbmUgRklCTUFQCQlfSU8oMHgwMCwgMSkJLyogYm1hcCBh Y2Nlc3MgKi8NCiAjZGVmaW5lIEZJR0VUQlNaCV9JTygweDAwLCAyKQkvKiBnZXQg dGhlIGJsb2NrIHNpemUgdXNlZCBmb3IgYm1hcCAqLw0KICNkZWZpbmUgRlNfSU9D X0ZJRU1BUAlfSU9XUignZicsIDExLCBzdHJ1Y3QgZmllbWFwKQ0KIA0KKyNkZWZp bmUgTFVTVFJFX1NVUEVSX01BR0lDIDB4MEJEMDBCRDANCisNCiAjZGVmaW5lCUVY VDRfRVhURU5UU19GTAkJCTB4MDAwODAwMDAgLyogSW5vZGUgdXNlcyBleHRlbnRz ICovDQogI2RlZmluZQlFWFQzX0lPQ19HRVRGTEFHUwkJX0lPUignZicsIDEsIGxv bmcpDQogDQorI2lmZGVmIEhBVkVfRlNUQVQ2NA0KKyNkZWZpbmUgbXlzdGF0IHN0 YXQ2NA0KKyNlbHNlDQorI2RlZmluZSBteXN0YXQgc3RhdA0KKyNlbmRpZg0KKw0K IHN0YXRpYyBpbnQgaW50X2xvZzIoaW50IGFyZykNCiB7DQogCWludCAgICAgbCA9 IDA7DQpAQCAtMTAyLDMwICsxMTQsNDEgQEAgc3RhdGljIGludCBnZXRfYm1hcChp bnQgZmQsIHVuc2lnbmVkIGxvbg0KIAkJaWYgKGVycm5vID09IEVQRVJNKSB7DQog CQkJZnByaW50ZihzdGRlcnIsICJObyBwZXJtaXNzaW9uIHRvIHVzZSBGSUJNQVAg aW9jdGw7ICINCiAJCQkJIm11c3QgaGF2ZSByb290IHByaXZpbGVnZXNcbiIpOw0K LQkJCWV4aXQoMSk7DQogCQl9DQotCQlwZXJyb3IoIkZJQk1BUCIpOw0KIAl9DQog CSpwaHlfYmxrID0gYjsNCiANCiAJcmV0dXJuIHJldDsNCiB9DQogDQorc3RhdGlj IHZvaWQgcHJpbnRfZXh0ZW50X2hlYWRlcih2b2lkKQ0KK3sNCisJcHJpbnRmKCIg ZXh0OiAlKnMgJSpzIGxlbmd0aDogJXNmbGFnczpcbiIsDQorCSAgICAgICBsb2dp Y2FsX3dpZHRoICogMiArIDMsDQorCSAgICAgICBkZXZpY2Vfb2Zmc2V0ID8gImRl dmljZV9sb2dpY2FsOiIgOiAibG9naWNhbF9vZmZzZXQ6IiwNCisJICAgICAgIHBo eXNpY2FsX3dpZHRoICogMiArIDMsICJwaHlzaWNhbF9vZmZzZXQ6IiwNCisJICAg ICAgIGRldmljZV9vZmZzZXQgPyAiIGRldjogIiA6ICIiKTsNCit9DQorDQogc3Rh dGljIHZvaWQgcHJpbnRfZXh0ZW50X2luZm8oc3RydWN0IGZpZW1hcF9leHRlbnQg KmZtX2V4dGVudCwgaW50IGN1cl9leCwNCi0JCQkgICAgICB1bnNpZ25lZCBsb25n IGxvbmcgZXhwZWN0ZWQsIGludCBibGtfc2hpZnQpDQorCQkJICAgICAgaW50IGJs a19zaGlmdCwgc3RydWN0IG15c3RhdCAqZmlsZWluZm8pDQogew0KLQlfX3U2NCBw aHlfYmxrOw0KKwl1bnNpZ25lZCBsb25nIGxvbmcgcGh5c2ljYWxfYmxrOw0KIAl1 bnNpZ25lZCBsb25nIGxvbmcgbG9naWNhbF9ibGs7DQotCXVuc2lnbmVkIGxvbmcg ZXh0X2xlbjsNCisJdW5zaWduZWQgbG9uZyBsb25nIGV4dF9ibGtzLCBleHRfbGVu Ow0KIAljaGFyIGZsYWdzWzI1Nl0gPSAiIjsNCiANCi0JLyogRm9yIGlubGluZSBk YXRhIGFsbCBvZmZzZXRzIHNob3VsZCBiZSBpbiB0ZXJtcyBvZiBieXRlcywgbm90 IGJsb2NrcyAqLw0KKwkvKiBGb3IgaW5saW5lIGRhdGEgYWxsIG9mZnNldHMgc2hv dWxkIGJlIGluIGJ5dGVzLCBub3QgYmxvY2tzICovDQogCWlmIChmbV9leHRlbnQt PmZlX2ZsYWdzICYgRklFTUFQX0VYVEVOVF9EQVRBX0lOTElORSkNCiAJCWJsa19z aGlmdCA9IDA7DQogDQogCWV4dF9sZW4gPSBmbV9leHRlbnQtPmZlX2xlbmd0aCA+ PiBibGtfc2hpZnQ7DQorCWV4dF9ibGtzID0gKGZtX2V4dGVudC0+ZmVfbGVuZ3Ro IC0gMSkgPj4gYmxrX3NoaWZ0Ow0KIAlsb2dpY2FsX2JsayA9IGZtX2V4dGVudC0+ ZmVfbG9naWNhbCA+PiBibGtfc2hpZnQ7DQotCXBoeV9ibGsgPSBmbV9leHRlbnQt PmZlX3BoeXNpY2FsID4+IGJsa19zaGlmdDsNCisJcGh5c2ljYWxfYmxrID0gZm1f ZXh0ZW50LT5mZV9waHlzaWNhbCA+PiBibGtfc2hpZnQ7DQorDQorCWlmIChkZXZp Y2Vfb2Zmc2V0KQ0KKwkJc3ByaW50ZihmbGFncywgIiUwNHg6ICIsIGZtX2V4dGVu dC0+ZmVfZGV2aWNlKTsNCiANCiAJaWYgKGZtX2V4dGVudC0+ZmVfZmxhZ3MgJiBG SUVNQVBfRVhURU5UX1VOS05PV04pDQogCQlzdHJjYXQoZmxhZ3MsICJ1bmtub3du LCIpOw0KQEAgLTE0Myw0NyArMTY2LDUwIEBAIHN0YXRpYyB2b2lkIHByaW50X2V4 dGVudF9pbmZvKHN0cnVjdCBmaWUNCiAJCXN0cmNhdChmbGFncywgInVud3JpdHRl biwiKTsNCiAJaWYgKGZtX2V4dGVudC0+ZmVfZmxhZ3MgJiBGSUVNQVBfRVhURU5U X01FUkdFRCkNCiAJCXN0cmNhdChmbGFncywgIm1lcmdlZCwiKTsNCisJaWYgKGZt X2V4dGVudC0+ZmVfZmxhZ3MgJiBGSUVNQVBfRVhURU5UX05FVCkNCisJCXN0cmNh dChmbGFncywgIm5ldHdvcmssIik7DQorCWlmIChmbV9leHRlbnQtPmZlX2ZsYWdz ICYgRklFTUFQX0VYVEVOVF9OT19ESVJFQ1QpDQorCQlzdHJjYXQoZmxhZ3MsICJu b19kaXJlY3QsIik7DQogDQotCWlmIChmbV9leHRlbnQtPmZlX2xvZ2ljYWwgKyBm bV9leHRlbnQtPmZlX2xlbmd0aCA+PSBmaWxlc2l6ZSkNCisJaWYgKGZtX2V4dGVu dC0+ZmVfbG9naWNhbCArIGZtX2V4dGVudC0+ZmVfbGVuZ3RoID49IGZpbGVpbmZv LT5zdF9zaXplKQ0KIAkJc3RyY2F0KGZsYWdzLCAiZW9mLCIpOw0KIA0KIAkvKiBS ZW1vdmUgdHJhaWxpbmcgY29tbWEsIGlmIGFueSAqLw0KIAlpZiAoZmxhZ3NbMF0p DQogCQlmbGFnc1tzdHJsZW4oZmxhZ3MpIC0gMV0gPSAnXDAnOw0KIA0KLQlpZiAo ZXhwZWN0ZWQpDQotCQlwcmludGYoIiU0ZCAlKmxsdSAlKmxsdSAlKmxsdSAlNmx1 ICVzXG4iLA0KLQkJICAgICAgIGN1cl9leCwgbG9naWNhbF93aWR0aCwgbG9naWNh bF9ibGssDQotCQkgICAgICAgcGh5c2ljYWxfd2lkdGgsIHBoeV9ibGssIHBoeXNp Y2FsX3dpZHRoLCBleHBlY3RlZCwNCi0JCSAgICAgICBleHRfbGVuLCBmbGFncyk7 DQotCWVsc2UNCi0JCXByaW50ZigiJTRkICUqbGx1ICUqbGx1ICUqcyAlNmx1ICVz XG4iLA0KLQkJICAgICAgIGN1cl9leCwgbG9naWNhbF93aWR0aCwgbG9naWNhbF9i bGssDQotCQkgICAgICAgcGh5c2ljYWxfd2lkdGgsIHBoeV9ibGssIHBoeXNpY2Fs X3dpZHRoLCAiIiwNCi0JCSAgICAgICBleHRfbGVuLCBmbGFncyk7DQorCXByaW50 ZihleHRfZm10LCBjdXJfZXgsIGxvZ2ljYWxfd2lkdGgsIGxvZ2ljYWxfYmxrLA0K KwkgICAgICAgbG9naWNhbF93aWR0aCwgbG9naWNhbF9ibGsgKyBleHRfYmxrcywN CisJICAgICAgIHBoeXNpY2FsX3dpZHRoLCBwaHlzaWNhbF9ibGssDQorCSAgICAg ICBwaHlzaWNhbF93aWR0aCwgcGh5c2ljYWxfYmxrICsgZXh0X2Jsa3MsDQorCSAg ICAgICBleHRfbGVuLCBmbGFncyk7DQogfQ0KIA0KLXN0YXRpYyBpbnQgZmlsZWZy YWdfZmllbWFwKGludCBmZCwgaW50IGJsa19zaGlmdCwgaW50ICpudW1fZXh0ZW50 cykNCitzdGF0aWMgaW50IGZpbGVmcmFnX2ZpZW1hcChpbnQgZmQsIGludCBibGtf c2hpZnQsIGludCAqbnVtX2V4dGVudHMsDQorCQkJICAgc3RydWN0IG15c3RhdCAq ZmlsZWluZm8pDQogew0KIAljaGFyIGJ1Zls0MDk2XSA9ICIiOw0KIAlzdHJ1Y3Qg ZmllbWFwICpmaWVtYXAgPSAoc3RydWN0IGZpZW1hcCAqKWJ1ZjsNCiAJc3RydWN0 IGZpZW1hcF9leHRlbnQgKmZtX2V4dCA9ICZmaWVtYXAtPmZtX2V4dGVudHNbMF07 DQogCWludCBjb3VudCA9IChzaXplb2YoYnVmKSAtIHNpemVvZigqZmllbWFwKSkg Lw0KIAkJCXNpemVvZihzdHJ1Y3QgZmllbWFwX2V4dGVudCk7DQotCXVuc2lnbmVk IGxvbmcgbG9uZyBsYXN0X2JsayA9IDA7DQorCXVuc2lnbmVkIGxvbmcgbG9uZyBu ZXh0X3BoeXNpY2FsID0gMDsNCiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7DQog CXVuc2lnbmVkIGludCBpOw0KIAlzdGF0aWMgaW50IGZpZW1hcF9pbmNvbXBhdF9w cmludGVkOw0KIAlpbnQgZmllbWFwX2hlYWRlcl9wcmludGVkID0gMDsNCiAJaW50 IHRvdF9leHRlbnRzID0gMSwgbiA9IDA7DQorCWludCBwcmV2aW91c19kZXZpY2Ug PSAwOw0KIAlpbnQgbGFzdCA9IDA7DQogCWludCByYzsNCiANCiAJZmllbWFwLT5m bV9sZW5ndGggPSB+MFVMTDsNCiANCi0JbWVtc2V0KGZpZW1hcCwgMCwgc2l6ZW9m KHN0cnVjdCBmaWVtYXApKTsNCisJLyogSWYgZXh0ZW50cyBhcmUgZ29pbmcgdG8g YmUgZGV2aWNlIG9yZGVyZWQsIHRoZW4gd2UgbWF5IG5lZWQgdG8gdXNlDQorCSAq IHRoZSBmaXJzdCBleHRlbnQgdG8gcGFzcyB0aGUgbmV4dCBzdGFydGluZyBvZmZz ZXQgYW5kIHRoZSBkZXZpY2UuICovDQorCW1lbXNldChmaWVtYXAsIDAsIHNpemVv ZihzdHJ1Y3QgZmllbWFwKSArIHNpemVvZihzdHJ1Y3QgZmllbWFwX2V4dGVudCkp Ow0KIA0KLQlpZiAoIXZlcmJvc2UpDQorCWlmICghdmVyYm9zZSAmJiAhZm9yY2Vf ZXh0ZW50KQ0KIAkJY291bnQgPSAwOw0KIA0KIAlpZiAoc3luY19maWxlKQ0KQEAg LTE5Miw2ICsyMTgsMTAgQEAgc3RhdGljIGludCBmaWxlZnJhZ19maWVtYXAoaW50 IGZkLCBpbnQgYg0KIAlpZiAoeGF0dHJfbWFwKQ0KIAkJZmxhZ3MgfD0gRklFTUFQ X0ZMQUdfWEFUVFI7DQogDQorCWlmIChkZXZpY2Vfb2Zmc2V0KQ0KKwkJZmxhZ3Mg fD0gRklFTUFQX0ZMQUdfREVWSUNFX09SREVSOw0KKw0KK3JldHJ5X3dvX2Rldmlj ZV9vZmZzZXQ6DQogCWRvIHsNCiAJCWZpZW1hcC0+Zm1fbGVuZ3RoID0gfjBVTEw7 DQogCQlmaWVtYXAtPmZtX2ZsYWdzID0gZmxhZ3M7DQpAQCAtMjAyLDE4ICsyMzIs MjAgQEAgc3RhdGljIGludCBmaWxlZnJhZ19maWVtYXAoaW50IGZkLCBpbnQgYg0K IAkJCQlwcmludGYoIkZJRU1BUCBmYWlsZWQgd2l0aCB1bnN1cHBvcnRlZCAiDQog CQkJCSAgICAgICAiZmxhZ3MgJXhcbiIsIGZpZW1hcC0+Zm1fZmxhZ3MpOw0KIAkJ CQlmaWVtYXBfaW5jb21wYXRfcHJpbnRlZCA9IDE7DQorCQkJfSBlbHNlIGlmIChy YyA9PSBFQkFEUiAmJiAoZmllbWFwLT5mbV9mbGFncyAmDQorCQkJCQkJICAgRklF TUFQX0ZMQUdfREVWSUNFX09SREVSKSkgew0KKwkJCQlmbGFncyAmPSB+RklFTUFQ X0ZMQUdfREVWSUNFX09SREVSOw0KKwkJCQlnb3RvIHJldHJ5X3dvX2RldmljZV9v ZmZzZXQ7DQogCQkJfQ0KIAkJCXJldHVybiByYzsNCiAJCX0NCiANCi0JCWlmICh2 ZXJib3NlICYmICFmaWVtYXBfaGVhZGVyX3ByaW50ZWQpIHsNCi0JCQlwcmludGYo IiBleHQgJSpzICUqcyAlKnMgbGVuZ3RoIGZsYWdzXG4iLCBsb2dpY2FsX3dpZHRo LA0KLQkJCSAgICAgICAibG9naWNhbCIsIHBoeXNpY2FsX3dpZHRoLCAicGh5c2lj YWwiLA0KLQkJCSAgICAgICBwaHlzaWNhbF93aWR0aCwgImV4cGVjdGVkIik7DQor CQlpZiAoKHZlcmJvc2UgfHwgZm9yY2VfZXh0ZW50KSAmJiAhZmllbWFwX2hlYWRl cl9wcmludGVkKSB7DQorCQkJcHJpbnRfZXh0ZW50X2hlYWRlcigpOw0KIAkJCWZp ZW1hcF9oZWFkZXJfcHJpbnRlZCA9IDE7DQogCQl9DQogDQotCQlpZiAoIXZlcmJv c2UpIHsNCisJCWlmICghdmVyYm9zZSAmJiAhZm9yY2VfZXh0ZW50KSB7DQogCQkJ Km51bV9leHRlbnRzID0gZmllbWFwLT5mbV9tYXBwZWRfZXh0ZW50czsNCiAJCQln b3RvIG91dDsNCiAJCX0NCkBAIC0yMjMsMjcgKzI1NSw0MCBAQCBzdGF0aWMgaW50 IGZpbGVmcmFnX2ZpZW1hcChpbnQgZmQsIGludCBiDQogCQkJYnJlYWs7DQogDQog CQlmb3IgKGkgPSAwOyBpIDwgZmllbWFwLT5mbV9tYXBwZWRfZXh0ZW50czsgaSsr KSB7DQotCQkJX191NjQgcGh5X2JsaywgbG9naWNhbF9ibGs7DQotCQkJdW5zaWdu ZWQgbG9uZyBleHRfbGVuOw0KKwkJCXVuc2lnbmVkIGxvbmcgbG9uZyBwaHlzaWNh bCwgbG9naWNhbDsNCisNCisJCQlwaHlzaWNhbCA9IGZtX2V4dFtpXS5mZV9waHlz aWNhbDsNCisJCQlsb2dpY2FsICA9IGZtX2V4dFtpXS5mZV9sb2dpY2FsOw0KIA0K LQkJCXBoeV9ibGsgPSBmbV9leHRbaV0uZmVfcGh5c2ljYWwgPj4gYmxrX3NoaWZ0 Ow0KLQkJCWV4dF9sZW4gPSBmbV9leHRbaV0uZmVfbGVuZ3RoID4+IGJsa19zaGlm dDsNCi0JCQlsb2dpY2FsX2JsayA9IGZtX2V4dFtpXS5mZV9sb2dpY2FsID4+IGJs a19zaGlmdDsNCisJCQlpZiAocHJldmlvdXNfZGV2aWNlICE9IGZtX2V4dFtpXS5m ZV9kZXZpY2UpDQorCQkJCXByZXZpb3VzX2RldmljZSA9IGZtX2V4dFtpXS5mZV9k ZXZpY2U7DQogDQotCQkJaWYgKGxvZ2ljYWxfYmxrICYmIHBoeV9ibGsgIT0gbGFz dF9ibGsgKyAxKQ0KKwkJCWlmIChsb2dpY2FsICYmIHBoeXNpY2FsICE9IG5leHRf cGh5c2ljYWwpDQogCQkJCXRvdF9leHRlbnRzKys7DQogCQkJZWxzZQ0KLQkJCQls YXN0X2JsayA9IDA7DQotCQkJcHJpbnRfZXh0ZW50X2luZm8oJmZtX2V4dFtpXSwg biwgbGFzdF9ibGssIGJsa19zaGlmdCk7DQorCQkJCWxhc3QgPSAwOw0KKwkJCXBy aW50X2V4dGVudF9pbmZvKCZmbV9leHRbaV0sIG4sIGJsa19zaGlmdCwgZmlsZWlu Zm8pOw0KIA0KLQkJCWxhc3RfYmxrID0gcGh5X2JsayArIGV4dF9sZW4gLSAxOw0K KwkJCW5leHRfcGh5c2ljYWwgPSBwaHlzaWNhbCArIGZtX2V4dFtpXS5mZV9sZW5n dGg7DQogCQkJaWYgKGZtX2V4dFtpXS5mZV9mbGFncyAmIEZJRU1BUF9FWFRFTlRf TEFTVCkNCiAJCQkJbGFzdCA9IDE7DQogCQkJbisrOw0KIAkJfQ0KIA0KLQkJZmll bWFwLT5mbV9zdGFydCA9IChmbV9leHRbaS0xXS5mZV9sb2dpY2FsICsNCi0JCQkJ ICAgIGZtX2V4dFtpLTFdLmZlX2xlbmd0aCk7DQorCQkvKiBGb3IgREVWSUNFX09S REVSIG1hcHBpbmdzLCBpZiBFWFRFTlRfTEFTVCBub3QgeWV0IGZvdW5kIHRoZW4N CisJCSAqIGZtX3N0YXJ0IG5lZWRzIHRvIGJlIHRoZSBzYW1lIGFzIGl0IHdhcyBm b3IgZWFybGllciBpb2N0bC4NCisJCSAqIFRoZSBmaXJzdCBleHRlbnQgaXMgdXNl ZCB0byBwYXNzIHRoZSBlbmQgb2Zmc2V0IGFuZCBkZXZpY2UNCisJCSAqIG9mIHRo ZSBsYXN0IEZJRU1BUCBjYWxsLiAgT3RoZXJ3aXNlLCB3ZSBhc2sgZm9yIGV4dGVu dHMNCisJCSAqIHN0YXJ0aW5nIGZyb20gd2hlcmUgdGhlIGxhc3QgbWFwcGluZyBl bmRlZC4gKi8NCisJCWlmIChmbGFncyAmIEZJRU1BUF9GTEFHX0RFVklDRV9PUkRF Uikgew0KKwkJCWZtX2V4dFswXS5mZV9sb2dpY2FsID0gZm1fZXh0W2kgLSAxXS5m ZV9sb2dpY2FsICsNCisJCQkJCQkgICAgICBmbV9leHRbaSAtIDFdLmZlX2xlbmd0 aDsNCisJCQlmbV9leHRbMF0uZmVfZGV2aWNlID0gZm1fZXh0W2kgLSAxXS5mZV9k ZXZpY2U7DQorCQkJZmllbWFwLT5mbV9zdGFydCA9IDA7DQorCQl9IGVsc2Ugew0K KwkJCWZpZW1hcC0+Zm1fc3RhcnQgPSBmbV9leHRbaSAtIDFdLmZlX2xvZ2ljYWwg Kw0KKwkJCQkgICAgZm1fZXh0W2kgLSAxXS5mZV9sZW5ndGg7DQorCQl9DQogCX0g d2hpbGUgKGxhc3QgPT0gMCk7DQogDQogCSpudW1fZXh0ZW50cyA9IHRvdF9leHRl bnRzOw0KQEAgLTI1MywyNCArMjk4LDg1IEBAIG91dDoNCiANCiAjZGVmaW5lIEVY VDJfRElSRUNUCTEyDQogDQorc3RhdGljIGludCBmaWxlZnJhZ19maWJtYXAoaW50 IGZkLCBpbnQgYmxrX3NoaWZ0LCBpbnQgKm51bV9leHRlbnRzLA0KKwkJCSAgIHN0 cnVjdCBteXN0YXQgKmZpbGVpbmZvLA0KKwkJCSAgIHVuc2lnbmVkIGxvbmcgbnVt YmxvY2tzLCBpbnQgaXNfZXh0MikNCit7DQorCXN0cnVjdCBmaWVtYXBfZXh0ZW50 CWZtX2V4dDsNCisJdW5zaWduZWQgbG9uZwkJaSwgbGFzdF9ibG9jazsNCisJCQkJ LyogQmxvY2tzIHBlciBpbmRpcmVjdCBibG9jayAqLw0KKwljb25zdCBsb25nCQli cGliID0gZmlsZWluZm8tPnN0X2Jsa3NpemUgLyA0Ow0KKwlpbnQJCQljb3VudDsN CisNCisJaWYgKGZvcmNlX2V4dGVudCkgew0KKwkJbWVtc2V0KCZmbV9leHQsIDAs IHNpemVvZihmbV9leHQpKTsNCisJCWZtX2V4dC5mZV9kZXZpY2UgPSBmaWxlaW5m by0+c3RfZGV2Ow0KKwl9DQorDQorCSpudW1fZXh0ZW50cyA9IDA7DQorCWZvciAo aSA9IDAsIGNvdW50ID0gbGFzdF9ibG9jayA9IDA7IGkgPCBudW1ibG9ja3M7IGkr Kykgew0KKwkJdW5zaWduZWQgbG9uZyBibG9jayA9IDA7DQorCQlpbnQgcmM7DQor DQorCQlpZiAoaXNfZXh0MiAmJiBsYXN0X2Jsb2NrKSB7DQorCQkJaWYgKCgoaSAt IEVYVDJfRElSRUNUKSAlIGJwaWIpID09IDApDQorCQkJCWxhc3RfYmxvY2srKzsN CisJCQlpZiAoKChpIC0gRVhUMl9ESVJFQ1QgLSBicGliKSAlIChicGliICogYnBp YikpID09IDApDQorCQkJCWxhc3RfYmxvY2srKzsNCisJCQlpZiAoKChpIC0gRVhU Ml9ESVJFQ1QgLSBicGliIC0gYnBpYiAqIGJwaWIpICUNCisJCQkgICAgICgoKHVu c2lnbmVkIGxvbmcgbG9uZylicGliICkqIGJwaWIgKiBicGliKSkgPT0gMCkNCisJ CQkJbGFzdF9ibG9jaysrOw0KKwkJfQ0KKwkJcmMgPSBnZXRfYm1hcChmZCwgaSwg JmJsb2NrKTsNCisJCWlmIChyYyA8IDApDQorCQkJcmV0dXJuIHJjOw0KKwkJaWYg KGJsb2NrID09IDApDQorCQkJY29udGludWU7DQorCQlpZiAoISpudW1fZXh0ZW50 cykgew0KKwkJCSgqbnVtX2V4dGVudHMpKys7DQorCQkJaWYgKGZvcmNlX2V4dGVu dCkgew0KKwkJCQlwcmludF9leHRlbnRfaGVhZGVyKCk7DQorCQkJCWZtX2V4dC5m ZV9waHlzaWNhbCA9IGJsb2NrKmZpbGVpbmZvLT5zdF9ibGtzaXplOw0KKwkJCX0N CisJCX0NCisJCWNvdW50Kys7DQorCQlpZiAobGFzdF9ibG9jayAmJiAoYmxvY2sg IT0gbGFzdF9ibG9jayArIDEpKSB7DQorCQkJaWYgKGZvcmNlX2V4dGVudCkgew0K KwkJCQlwcmludF9leHRlbnRfaW5mbygmZm1fZXh0LCAqbnVtX2V4dGVudHMgLSAx LA0KKwkJCQkJCSAgYmxrX3NoaWZ0LCBmaWxlaW5mbyk7DQorCQkJCWZtX2V4dC5m ZV9sb2dpY2FsID0gaSAqIGZpbGVpbmZvLT5zdF9ibGtzaXplOw0KKwkJCQlmbV9l eHQuZmVfcGh5c2ljYWwgPSBibG9jaypmaWxlaW5mby0+c3RfYmxrc2l6ZTsNCisJ CQkJZm1fZXh0LmZlX2xlbmd0aCA9IDA7DQorCQkJfSBlbHNlIGlmICh2ZXJib3Nl KSB7DQorCQkJCXByaW50ZigiRGlzY29udGludWl0eTogQmxvY2sgJWxkIGlzIGF0 ICVsdSAiDQorCQkJCSAgICAgICAiKHdhcyAlbHUpXG4iLCBpLCBibG9jaywgbGFz dF9ibG9jayArIDEpOw0KKwkJCX0NCisJCQkoKm51bV9leHRlbnRzKSsrOw0KKwkJ fQ0KKwkJZm1fZXh0LmZlX2xlbmd0aCArPSBmaWxlaW5mby0+c3RfYmxrc2l6ZTsN CisJCWxhc3RfYmxvY2sgPSBibG9jazsNCisJfQ0KKw0KKwlpZiAoZm9yY2VfZXh0 ZW50KQ0KKwkJcHJpbnRfZXh0ZW50X2luZm8oJmZtX2V4dCwgKm51bV9leHRlbnRz IC0gMSwNCisJCQkJICBibGtfc2hpZnQsIGZpbGVpbmZvKTsNCisNCisJcmV0dXJu IGNvdW50Ow0KK30NCisNCiBzdGF0aWMgdm9pZCBmcmFnX3JlcG9ydChjb25zdCBj aGFyICpmaWxlbmFtZSkNCiB7DQogCXN0cnVjdCBzdGF0ZnMJZnNpbmZvOw0KLSNp ZmRlZiBIQVZFX0ZTVEFUNjQNCi0Jc3RydWN0IHN0YXQ2NAlmaWxlaW5mbzsNCi0j ZWxzZQ0KLQlzdHJ1Y3Qgc3RhdAlmaWxlaW5mbzsNCi0jZW5kaWYNCi0JaW50CQli czsNCisJc3RydWN0IG15c3RhdAlmaWxlaW5mbzsNCisJaW50CQlibGtfc2hpZnQ7 DQogCWxvbmcJCWZkOw0KLQl1bnNpZ25lZCBsb25nCWJsb2NrLCBsYXN0X2Jsb2Nr ID0gMCwgbnVtYmxvY2tzLCBpLCBjb3VudDsNCi0JbG9uZwkJYnBpYjsJLyogQmxv Y2tzIHBlciBpbmRpcmVjdCBibG9jayAqLw0KLQlsb25nCQljeWxncm91cHM7DQot CWludAkJbnVtX2V4dGVudHMgPSAwLCBleHBlY3RlZDsNCisJdW5zaWduZWQgbG9u ZwludW1ibG9ja3M7DQorCWludAkJZGF0YV9ibG9ja3NfcGVyX2N5bCA9IDE7DQor CWludAkJbnVtX2V4dGVudHMgPSAxLCBleHBlY3RlZDsNCiAJaW50CQlpc19leHQy ID0gMDsNCi0Jc3RhdGljIGludAlvbmNlID0gMTsNCisJc3RhdGljIGludAlsYXN0 X2RldmljZTsNCiAJdW5zaWduZWQgaW50CWZsYWdzOw0KLQlpbnQgcmM7DQorCWlu dAkJd2lkdGg7DQogDQogI2lmZGVmIEhBVkVfT1BFTjY0DQogCWZkID0gb3BlbjY0 KGZpbGVuYW1lLCBPX1JET05MWSk7DQpAQCAtMjk0LDg5ICs0MDAsOTEgQEAgc3Rh dGljIHZvaWQgZnJhZ19yZXBvcnQoY29uc3QgY2hhciAqZmlsZQ0KIAkJcGVycm9y KCJzdGF0Iik7DQogCQlyZXR1cm47DQogCX0NCisJZmlsZWluZm8uc3RfYmxrc2l6 ZSA9IGZzaW5mby5mX2JzaXplOw0KIAlpZiAoaW9jdGwoZmQsIEVYVDNfSU9DX0dF VEZMQUdTLCAmZmxhZ3MpIDwgMCkNCiAJCWZsYWdzID0gMDsNCiAJaWYgKCEoZmxh Z3MgJiBFWFQ0X0VYVEVOVFNfRkwpICYmDQogCSAgICAoKGZzaW5mby5mX3R5cGUg PT0gMHhlZjUxKSB8fCAoZnNpbmZvLmZfdHlwZSA9PSAweGVmNTIpIHx8DQogCSAg ICAgKGZzaW5mby5mX3R5cGUgPT0gMHhlZjUzKSkpDQogCQlpc19leHQyKys7DQot CWlmICh2ZXJib3NlICYmIG9uY2UpDQorCWlmICh2ZXJib3NlICYmIGxhc3RfZGV2 aWNlICE9IGZpbGVpbmZvLnN0X2RldikNCiAJCXByaW50ZigiRmlsZXN5c3RlbSB0 eXBlIGlzOiAlbHhcbiIsDQogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpIGZzaW5m by5mX3R5cGUpOw0KIA0KLQljeWxncm91cHMgPSBkaXZfY2VpbChmc2luZm8uZl9i bG9ja3MsIGZzaW5mby5mX2JzaXplKjgpOw0KLQlpZiAodmVyYm9zZSAmJiBpc19l eHQyICYmIG9uY2UpDQotCQlwcmludGYoIkZpbGVzeXN0ZW0gY3lsaW5kZXIgZ3Jv dXBzIGlzIGFwcHJveGltYXRlbHkgJWxkXG4iLA0KLQkJICAgICAgIGN5bGdyb3Vw cyk7DQotDQotCXBoeXNpY2FsX3dpZHRoID0gaW50X2xvZzEwKGZzaW5mby5mX2Js b2Nrcyk7DQotCWlmIChwaHlzaWNhbF93aWR0aCA8IDgpDQotCQlwaHlzaWNhbF93 aWR0aCA9IDg7DQotDQotCWlmIChpb2N0bChmZCwgRklHRVRCU1osICZicykgPCAw KSB7IC8qIEZJR0VUQlNaIHRha2VzIGFuIGludCAqLw0KLQkJcGVycm9yKCJGSUdF VEJTWiIpOw0KLQkJY2xvc2UoZmQpOw0KLQkJcmV0dXJuOw0KKwkvKiBDaGVjayBp ZiBmaWxlc3lzdGVtIGlzIEx1c3RyZS4gIEFsd2F5cyBwcmludCBpbiBleHRlbnQg Zm9ybWF0DQorCSAqIHdpdGggMWtCIGJsb2NrcywgdXNpbmcgdGhlIGRldmljZS1y ZWxhdGl2ZSBsb2dpY2FsIG9mZnNldHMuICovDQorCWlmIChmc2luZm8uZl90eXBl ID09IExVU1RSRV9TVVBFUl9NQUdJQykgew0KKwkJaXNfZXh0MiA9IDA7DQorCQlm b3JjZV9leHRlbnQgPSAxOw0KKwkJZGV2aWNlX29mZnNldCA9IDE7DQorCQlibG9j a3NpemUgPSBibG9ja3NpemUgPzogMTAyNDsNCisJfQ0KKw0KKwlpZiAoaXNfZXh0 Mikgew0KKwkJbG9uZyBjeWxncm91cHMgPSBkaXZfY2VpbChmc2luZm8uZl9ibG9j a3MsIGZzaW5mby5mX2JzaXplICogOCk7DQorDQorCQlpZiAodmVyYm9zZSAmJiBs YXN0X2RldmljZSAhPSBmaWxlaW5mby5zdF9kZXYpDQorCQkgICAgIHByaW50Zigi RmlsZXN5c3RlbSBjeWxpbmRlciBncm91cHMgaXMgYXBwcm94aW1hdGVseSAlbGRc biIsDQorCQkJICAgIGN5bGdyb3Vwcyk7DQorDQorCQlkYXRhX2Jsb2Nrc19wZXJf Y3lsID0gZnNpbmZvLmZfYnNpemUgKiA4IC0NCisJCQkJCShmc2luZm8uZl9maWxl cyAvIDggLyBjeWxncm91cHMpIC0gMzsNCiAJfQ0KKwlsYXN0X2RldmljZSA9IGZp bGVpbmZvLnN0X2RldjsNCiANCi0JaWYgKG5vX2JzKQ0KLQkJYnMgPSAxMDI0Ow0K Kwl3aWR0aCA9IGludF9sb2cxMChmc2luZm8uZl9ibG9ja3MpOw0KKwlpZiAod2lk dGggPiBwaHlzaWNhbF93aWR0aCkNCisJCXBoeXNpY2FsX3dpZHRoID0gd2lkdGg7 DQorDQorCW51bWJsb2NrcyA9IGRpdl9jZWlsKGZpbGVpbmZvLnN0X3NpemUsIGZz aW5mby5mX2JzaXplKTsNCisJaWYgKGJsb2Nrc2l6ZSAhPSAwKQ0KKwkJYmxrX3No aWZ0ID0gaW50X2xvZzIoYmxvY2tzaXplKTsNCisJZWxzZQ0KKwkJYmxrX3NoaWZ0 ID0gaW50X2xvZzIoZnNpbmZvLmZfYnNpemUpOw0KIA0KLQlicGliID0gYnMgLyA0 Ow0KLQludW1ibG9ja3MgPSAoZmlsZWluZm8uc3Rfc2l6ZSArIChicy0xKSkgLyBi czsNCi0JbG9naWNhbF93aWR0aCA9IGludF9sb2cxMChudW1ibG9ja3MpOw0KLQlp ZiAobG9naWNhbF93aWR0aCA8IDcpDQotCQlsb2dpY2FsX3dpZHRoID0gNzsNCi0J ZmlsZXNpemUgPSAobG9uZyBsb25nKWZpbGVpbmZvLnN0X3NpemU7DQorCXdpZHRo ID0gaW50X2xvZzEwKG51bWJsb2Nrcyk7DQorCWlmICh3aWR0aCA+IGxvZ2ljYWxf d2lkdGgpDQorCQlsb2dpY2FsX3dpZHRoID0gd2lkdGg7DQogCWlmICh2ZXJib3Nl KQ0KLQkJcHJpbnRmKCJGaWxlIHNpemUgb2YgJXMgaXMgJWxsZCAoJWxkIGJsb2Nr JXMsIGJsb2Nrc2l6ZSAlZClcbiIsDQotCQkgICAgICAgZmlsZW5hbWUsIChsb25n IGxvbmcpIGZpbGVpbmZvLnN0X3NpemUsIG51bWJsb2NrcywNCi0JCSAgICAgICBu dW1ibG9ja3MgPT0gMSA/ICIiIDogInMiLCBicyk7DQorCQlwcmludGYoIkZpbGUg c2l6ZSBvZiAlcyBpcyAlbGxkICglbGQgYmxvY2slcyBvZiAlZCBieXRlcylcbiIs DQorCQkgICAgICAgZmlsZW5hbWUsIChsb25nIGxvbmcpZmlsZWluZm8uc3Rfc2l6 ZSwNCisJCSAgICAgICBudW1ibG9ja3MgKiBmc2luZm8uZl9ic2l6ZSA+PiBibGtf c2hpZnQsDQorCQkgICAgICAgbnVtYmxvY2tzID09IDEgPyAiIiA6ICJzIiwgMSA8 PCBibGtfc2hpZnQpOw0KKw0KIAlpZiAoZm9yY2VfYm1hcCB8fA0KLQkgICAgZmls ZWZyYWdfZmllbWFwKGZkLCBpbnRfbG9nMihicyksICZudW1fZXh0ZW50cykgIT0g MCkgew0KLQkJZm9yIChpID0gMCwgY291bnQgPSAwOyBpIDwgbnVtYmxvY2tzOyBp KyspIHsNCi0JCQlpZiAoaXNfZXh0MiAmJiBsYXN0X2Jsb2NrKSB7DQotCQkJCWlm ICgoKGktRVhUMl9ESVJFQ1QpICUgYnBpYikgPT0gMCkNCi0JCQkJCWxhc3RfYmxv Y2srKzsNCi0JCQkJaWYgKCgoaS1FWFQyX0RJUkVDVC1icGliKSAlIChicGliKmJw aWIpKSA9PSAwKQ0KLQkJCQkJbGFzdF9ibG9jaysrOw0KLQkJCQlpZiAoKChpLUVY VDJfRElSRUNULWJwaWItYnBpYipicGliKSAlDQotCQkJCSAgICAgKCgoX191NjQp IGJwaWIpKmJwaWIqYnBpYikpID09IDApDQotCQkJCQlsYXN0X2Jsb2NrKys7DQot CQkJfQ0KLQkJCXJjID0gZ2V0X2JtYXAoZmQsIGksICZibG9jayk7DQotCQkJaWYg KGJsb2NrID09IDApDQotCQkJCWNvbnRpbnVlOw0KLQkJCWlmICghbnVtX2V4dGVu dHMpDQotCQkJCW51bV9leHRlbnRzKys7DQotCQkJY291bnQrKzsNCi0JCQlpZiAo bGFzdF9ibG9jayAmJiAoYmxvY2sgIT0gbGFzdF9ibG9jaysxKSApIHsNCi0JCQkJ aWYgKHZlcmJvc2UpDQotCQkJCQlwcmludGYoIkRpc2NvbnRpbnVpdHk6IEJsb2Nr ICVsZCBpcyBhdCAiDQotCQkJCQkgICAgICAgIiVsdSAod2FzICVsdSlcbiIsDQot CQkJCQkgICAgICAgaSwgYmxvY2ssIGxhc3RfYmxvY2srMSk7DQotCQkJCW51bV9l eHRlbnRzKys7DQorCSAgICBmaWxlZnJhZ19maWVtYXAoZmQsIGJsa19zaGlmdCwg Jm51bV9leHRlbnRzLCAmZmlsZWluZm8pICE9IDApIHsNCisJCWV4cGVjdGVkID0g ZmlsZWZyYWdfZmlibWFwKGZkLCBibGtfc2hpZnQsICZudW1fZXh0ZW50cywNCisJ CQkJCSAgICZmaWxlaW5mbywgbnVtYmxvY2tzLCBpc19leHQyKTsNCisJCWlmIChl eHBlY3RlZCA8IDApIHsNCisJCQlpZiAoZXJybm8gPT0gRUlOVkFMIHx8IGVycm5v ID09IEVOT1RUWSkgew0KKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBGSUJNQVAg dW5zdXBwb3J0ZWRcbiIsDQorCQkJCQlmaWxlbmFtZSk7DQorCQkJfSBlbHNlIGlm IChlcnJubyAhPSBFUEVSTSkgew0KKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBG SUJNQVAgZXJyb3I6ICVzIiwNCisJCQkJCWZpbGVuYW1lLCBzdHJlcnJvcihlcnJu bykpOw0KIAkJCX0NCi0JCQlsYXN0X2Jsb2NrID0gYmxvY2s7DQorCQkJZ290byBv dXRfY2xvc2U7DQogCQl9DQorCQlleHBlY3RlZCA9IGV4cGVjdGVkIC8gZGF0YV9i bG9ja3NfcGVyX2N5bCArIDE7DQogCX0NCisNCiAJaWYgKG51bV9leHRlbnRzID09 IDEpDQogCQlwcmludGYoIiVzOiAxIGV4dGVudCBmb3VuZCIsIGZpbGVuYW1lKTsN CiAJZWxzZQ0KIAkJcHJpbnRmKCIlczogJWQgZXh0ZW50cyBmb3VuZCIsIGZpbGVu YW1lLCBudW1fZXh0ZW50cyk7DQotCWV4cGVjdGVkID0gKGNvdW50LygoYnMqOCkt KGZzaW5mby5mX2ZpbGVzLzgvY3lsZ3JvdXBzKS0zKSkrMTsNCiAJaWYgKGlzX2V4 dDIgJiYgZXhwZWN0ZWQgPCBudW1fZXh0ZW50cykNCiAJCXByaW50ZigiLCBwZXJm ZWN0aW9uIHdvdWxkIGJlICVkIGV4dGVudCVzXG4iLCBleHBlY3RlZCwNCi0JCQko ZXhwZWN0ZWQ+MSkgPyAicyIgOiAiIik7DQorCQkJKGV4cGVjdGVkID4gMSkgPyAi cyIgOiAiIik7DQogCWVsc2UNCiAJCWZwdXRjKCdcbicsIHN0ZG91dCk7DQorb3V0 X2Nsb3NlOg0KIAljbG9zZShmZCk7DQotCW9uY2UgPSAwOw0KIH0NCiANCiBzdGF0 aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkNCiB7DQotCWZwcmlu dGYoc3RkZXJyLCAiVXNhZ2U6ICVzIFstQmJ2c3hdIGZpbGUgLi4uXG4iLCBwcm9n bmFtZSk7DQorCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIFstYntibG9ja3Np emV9XSBbLUJla2xzdnhYXSBmaWxlIC4uLlxuIiwNCisJCXByb2duYW1lKTsNCiAJ ZXhpdCgxKTsNCiB9DQogDQpAQCAtMzg1LDIzICs0OTMsNTkgQEAgaW50IG1haW4o aW50IGFyZ2MsIGNoYXIqKmFyZ3YpDQogCWNoYXIgKipjcHA7DQogCWludCBjOw0K IA0KLQl3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgIkJic3Z4IikpICE9 IEVPRikNCisJd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJCYjo6ZWts c3Z4WCIpKSAhPSBFT0YpDQogCQlzd2l0Y2ggKGMpIHsNCiAJCWNhc2UgJ0InOg0K IAkJCWZvcmNlX2JtYXArKzsNCisJCQlmb3JjZV9leHRlbnQgPSAwOw0KIAkJCWJy ZWFrOw0KIAkJY2FzZSAnYic6DQotCQkJbm9fYnMrKzsNCisJCQlpZiAob3B0YXJn KSB7DQorCQkJCWNoYXIgKmVuZDsNCisJCQkJYmxvY2tzaXplID0gc3RydG91bChv cHRhcmcsICZlbmQsIDApOw0KKwkJCQlpZiAoZW5kKSB7DQorCQkJCQlzd2l0Y2gg KGVuZFswXSkgew0KKwkJCQkJY2FzZSAnZyc6DQorCQkJCQljYXNlICdHJzogYmxv Y2tzaXplICo9IDEwMjQ7DQorCQkJCQkJLyogbm8gYnJlYWsgKi8NCisJCQkJCWNh c2UgJ20nOg0KKwkJCQkJY2FzZSAnTSc6IGJsb2Nrc2l6ZSAqPSAxMDI0Ow0KKwkJ CQkJCS8qIG5vIGJyZWFrICovDQorCQkJCQljYXNlICdrJzoNCisJCQkJCWNhc2Ug J0snOiBibG9ja3NpemUgKj0gMTAyNDsNCisJCQkJCQlicmVhazsNCisJCQkJCWRl ZmF1bHQ6IGJyZWFrOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfSBlbHNlIHsgLyog YWxsb3cgLWIgd2l0aG91dCBhcmd1bWVudCwgZm9yIGNvbXBhdCAqLw0KKwkJCQlm cHJpbnRmKHN0ZGVyciwgIiVzOiAtYiBuZWVkcyBhIGJsb2Nrc2l6ZSAiDQorCQkJ CQkib3B0aW9uLCBhc3N1bWluZyAxMDI0LWJ5dGUgYmxvY2tzLlxuIiwNCisJCQkJ CWFyZ3ZbMF0pOw0KKwkJCQlibG9ja3NpemUgPSAxMDI0Ow0KKwkJCX0NCiAJCQli cmVhazsNCi0JCWNhc2UgJ3YnOg0KLQkJCXZlcmJvc2UrKzsNCisJCWNhc2UgJ2Un Og0KKwkJCWZvcmNlX2V4dGVudCsrOw0KKwkJCWZvcmNlX2JtYXAgPSAwOw0KKwkJ CWJyZWFrOw0KKwkJY2FzZSAnayc6DQorCQkJYmxvY2tzaXplID0gMTAyNDsNCisJ CQlicmVhazsNCisJCWNhc2UgJ2wnOg0KKwkJCWRldmljZV9vZmZzZXQrKzsNCiAJ CQlicmVhazsNCiAJCWNhc2UgJ3MnOg0KIAkJCXN5bmNfZmlsZSsrOw0KIAkJCWJy ZWFrOw0KKwkJY2FzZSAndic6DQorCQkJdmVyYm9zZSsrOw0KKwkJCWJyZWFrOw0K IAkJY2FzZSAneCc6DQogCQkJeGF0dHJfbWFwKys7DQogCQkJYnJlYWs7DQorCQlj YXNlICdYJzoNCisJCQlleHRfZm10ID0gaGV4X2ZtdDsNCisJCQlicmVhazsNCiAJ CWRlZmF1bHQ6DQogCQkJdXNhZ2UoYXJndlswXSk7DQogCQkJYnJlYWs7DQo= --Boundary_(ID_eKULuwBFJyfYdkCsl8b9aw)--