From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: [PATCH v2 5/7] xen/arm: Move co-processor emulation outside of traps.c Date: Tue, 12 Sep 2017 11:36:20 +0100 Message-ID: <20170912103622.18562-6-julien.grall@arm.com> References: <20170912103622.18562-1-julien.grall@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170912103622.18562-1-julien.grall@arm.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: bhupinder.thakur@linaro.org, Julien Grall , sstabellini@kernel.org List-Id: xen-devel@lists.xenproject.org VGhlIGNvLXByb2Nlc3NvciBlbXVsYXRpb24gaXMgcXVpdGUgYmlnIGFuZCBwcmV0dHkgbXVjaCBz dGFuZGFsb25lLiBNb3ZlCml0IGluIGEgc2VwYXJhdGUgZmlsZSB0byBzaHJpbmsgZG93biB0aGUg c2l6ZSBvZiB0cmFwcy5jLgoKQXQgdGhlIHNhbWUgdGltZSByZW1vdmUgdW51c2VkIGNwcmVncy5o LgoKTm8gZnVuY3Rpb25hbCBjaGFuZ2UuCgpTaWduZWQtb2ZmLWJ5OiBKdWxpZW4gR3JhbGwgPGp1 bGllbi5ncmFsbEBhcm0uY29tPgotLS0KIHhlbi9hcmNoL2FybS9NYWtlZmlsZSAgICAgICB8ICAg MSArCiB4ZW4vYXJjaC9hcm0vdHJhcHMuYyAgICAgICAgfCA0MjEgLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHhlbi9hcmNoL2FybS92Y3ByZWcuYyAgICAgICB8IDQ1 MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogeGVuL2luY2x1 ZGUvYXNtLWFybS90cmFwcy5oIHwgICA4ICsKIDQgZmlsZXMgY2hhbmdlZCwgNDYwIGluc2VydGlv bnMoKyksIDQyMSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vYXJjaC9hcm0v dmNwcmVnLmMKCmRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vTWFrZWZpbGUgYi94ZW4vYXJjaC9h cm0vTWFrZWZpbGUKaW5kZXggMjgyZDJjMjk0OS4uMTdiZmY5ODAzMyAxMDA2NDQKLS0tIGEveGVu L2FyY2gvYXJtL01ha2VmaWxlCisrKyBiL3hlbi9hcmNoL2FybS9NYWtlZmlsZQpAQCAtNDUsNiAr NDUsNyBAQCBvYmoteSArPSBzbXBib290Lm8KIG9iai15ICs9IHN5c2N0bC5vCiBvYmoteSArPSB0 aW1lLm8KIG9iai15ICs9IHRyYXBzLm8KK29iai15ICs9IHZjcHJlZy5vCiBvYmoteSArPSB2Z2lj Lm8KIG9iai15ICs9IHZnaWMtdjIubwogb2JqLSQoQ09ORklHX0hBU19HSUNWMykgKz0gdmdpYy12 My5vCmRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vdHJhcHMuYyBiL3hlbi9hcmNoL2FybS90cmFw cy5jCmluZGV4IGYwMGFhNDg4OTIuLjVlNmJjMzE3M2YgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL2Fy bS90cmFwcy5jCisrKyBiL3hlbi9hcmNoL2FybS90cmFwcy5jCkBAIC0zOCw3ICszOCw2IEBACiAj aW5jbHVkZSA8cHVibGljL3hlbi5oPgogCiAjaW5jbHVkZSA8YXNtL2FjcGkuaD4KLSNpbmNsdWRl IDxhc20vY3ByZWdzLmg+CiAjaW5jbHVkZSA8YXNtL2NwdWVycmF0YS5oPgogI2luY2x1ZGUgPGFz bS9jcHVmZWF0dXJlLmg+CiAjaW5jbHVkZSA8YXNtL2RlYnVnZ2VyLmg+CkBAIC0xODc1LDQyNiAr MTg3NCw2IEBAIHZvaWQgaGFuZGxlX3JvX3JheihzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncywK ICAgICBhZHZhbmNlX3BjKHJlZ3MsIGhzcik7CiB9CiAKLXN0YXRpYyB2b2lkIGRvX2NwMTVfMzIo c3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHVuaW9uIGhzciBoc3IpCi17Ci0gICAgY29uc3Qgc3RydWN0IGhzcl9jcDMyIGNwMzIgPSBoc3Iu Y3AzMjsKLSAgICBpbnQgcmVnaWR4ID0gY3AzMi5yZWc7Ci0gICAgc3RydWN0IHZjcHUgKnYgPSBj dXJyZW50OwotCi0gICAgaWYgKCAhY2hlY2tfY29uZGl0aW9uYWxfaW5zdHIocmVncywgaHNyKSAp Ci0gICAgewotICAgICAgICBhZHZhbmNlX3BjKHJlZ3MsIGhzcik7Ci0gICAgICAgIHJldHVybjsK LSAgICB9Ci0KLSAgICBzd2l0Y2ggKCBoc3IuYml0cyAmIEhTUl9DUDMyX1JFR1NfTUFTSyApCi0g ICAgewotICAgIC8qCi0gICAgICogIUNOVEhDVExfRUwyLkVMMVBDRU4gLyAhQ05USENUTC5QTDFQ Q0VOCi0gICAgICoKLSAgICAgKiBBUk12NyAoRERJIDA0MDZDLmIpOiBCNC4xLjIyCi0gICAgICog QVJNdjggKERESSAwNDg3QS5kKTogRDEtMTUxMCBUYWJsZSBEMS02MAotICAgICAqLwotICAgIGNh c2UgSFNSX0NQUkVHMzIoQ05UUF9DVEwpOgotICAgIGNhc2UgSFNSX0NQUkVHMzIoQ05UUF9UVkFM KToKLSAgICAgICAgaWYgKCAhdnRpbWVyX2VtdWxhdGUocmVncywgaHNyKSApCi0gICAgICAgICAg ICByZXR1cm4gaW5qZWN0X3VuZGVmX2V4Y2VwdGlvbihyZWdzLCBoc3IpOwotICAgICAgICBicmVh azsKLQotICAgIC8qCi0gICAgICogSENSX0VMMi5UQUNSIC8gSENSLlRBQwotICAgICAqCi0gICAg ICogQVJNdjcgKERESSAwNDA2Qy5iKTogQjEuMTQuNgotICAgICAqIEFSTXY4IChEREkgMDQ4N0Eu ZCk6IEc2LjIuMQotICAgICAqLwotICAgIGNhc2UgSFNSX0NQUkVHMzIoQUNUTFIpOgotICAgICAg ICBpZiAoIHBzcl9tb2RlX2lzX3VzZXIocmVncykgKQotICAgICAgICAgICAgcmV0dXJuIGluamVj dF91bmRlZl9leGNlcHRpb24ocmVncywgaHNyKTsKLSAgICAgICAgaWYgKCBjcDMyLnJlYWQgKQot ICAgICAgICAgICAgc2V0X3VzZXJfcmVnKHJlZ3MsIHJlZ2lkeCwgdi0+YXJjaC5hY3Rscik7Ci0g ICAgICAgIGJyZWFrOwotCi0gICAgLyoKLSAgICAgKiBNRENSX0VMMi5UUE0KLSAgICAgKgotICAg ICAqIEFSTXY3IChEREkgMDQwNkMuYik6IEIxLjE0LjE3Ci0gICAgICogQVJNdjggKERESSAwNDg3 QS5kKTogRDEtMTUxMSBUYWJsZSBEMS02MQotICAgICAqCi0gICAgICogVW5oYW5kbGVkOgotICAg ICAqICAgIFBNRVZDTlRSPG4+Ci0gICAgICogICAgUE1FVlRZUEVSPG4+Ci0gICAgICogICAgUE1D Q0ZJTFRSCi0gICAgICoKLSAgICAgKiBNRENSX0VMMi5UUE1DUgotICAgICAqCi0gICAgICogQVJN djcgKERESSAwNDA2Qy5iKTogQjEuMTQuMTcKLSAgICAgKiBBUk12OCAoRERJIDA0ODdBLmQpOiBE MS0xNTExIFRhYmxlIEQxLTYyCi0gICAgICoKLSAgICAgKiBOQjogQm90aCBNRENSX0VMMi5UUE0g YW5kIE1EQ1JfRUwyLlRQTUNSIGNhdXNlIHRyYXBwaW5nIG9mIFBNQ1IuCi0gICAgICovCi0gICAg LyogV2UgY291bGQgdHJhcCBJRF9ERlIwIGFuZCB0ZWxsIHRoZSBndWVzdCB3ZSBkb24ndCBzdXBw b3J0Ci0gICAgICogcGVyZm9ybWFuY2UgbW9uaXRvcmluZywgYnV0IExpbnV4IGRvZXNuJ3QgY2hl Y2sgdGhlIElEX0RGUjAuCi0gICAgICogVGhlcmVmb3JlIGl0IHdpbGwgcmVhZCBQTUNSLgotICAg ICAqCi0gICAgICogV2UgdGVsbCB0aGUgZ3Vlc3Qgd2UgaGF2ZSAwIGNvdW50ZXJzLiBVbmZvcnR1 bmF0ZWx5IHdlIG11c3QKLSAgICAgKiBhbHdheXMgc3VwcG9ydCBQTUNDTlRSICh0aGUgY3lsZSBj b3VudGVyKTogd2UganVzdCBSQVovV0kgZm9yIGFsbAotICAgICAqIFBNIHJlZ2lzdGVyLCB3aGlj aCBkb2Vzbid0IGNyYXNoIHRoZSBrZXJuZWwgYXQgbGVhc3QKLSAgICAgKi8KLSAgICBjYXNlIEhT Ul9DUFJFRzMyKFBNVVNFUkVOUik6Ci0gICAgICAgIC8qIFJPIGF0IEVMMC4gUkFaL1dJIGF0IEVM MSAqLwotICAgICAgICBpZiAoIHBzcl9tb2RlX2lzX3VzZXIocmVncykgKQotICAgICAgICAgICAg cmV0dXJuIGhhbmRsZV9yb19yYXoocmVncywgcmVnaWR4LCBjcDMyLnJlYWQsIGhzciwgMCk7Ci0g ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBoYW5kbGVfcmF6X3dpKHJlZ3MsIHJlZ2lk eCwgY3AzMi5yZWFkLCBoc3IsIDEpOwotICAgIGNhc2UgSFNSX0NQUkVHMzIoUE1JTlRFTlNFVCk6 Ci0gICAgY2FzZSBIU1JfQ1BSRUczMihQTUlOVEVOQ0xSKToKLSAgICAgICAgLyogRUwxIG9ubHks IGhvd2V2ZXIgTURDUl9FTDIuVFBNPT0xIG1lYW5zIEVMMCBtYXkgdHJhcCBoZXJlIGFsc28uICov Ci0gICAgICAgIHJldHVybiBoYW5kbGVfcmF6X3dpKHJlZ3MsIHJlZ2lkeCwgY3AzMi5yZWFkLCBo c3IsIDEpOwotICAgIGNhc2UgSFNSX0NQUkVHMzIoUE1DUik6Ci0gICAgY2FzZSBIU1JfQ1BSRUcz MihQTUNOVEVOU0VUKToKLSAgICBjYXNlIEhTUl9DUFJFRzMyKFBNQ05URU5DTFIpOgotICAgIGNh c2UgSFNSX0NQUkVHMzIoUE1PVlNSKToKLSAgICBjYXNlIEhTUl9DUFJFRzMyKFBNU1dJTkMpOgot ICAgIGNhc2UgSFNSX0NQUkVHMzIoUE1TRUxSKToKLSAgICBjYXNlIEhTUl9DUFJFRzMyKFBNQ0VJ RDApOgotICAgIGNhc2UgSFNSX0NQUkVHMzIoUE1DRUlEMSk6Ci0gICAgY2FzZSBIU1JfQ1BSRUcz MihQTUNDTlRSKToKLSAgICBjYXNlIEhTUl9DUFJFRzMyKFBNWEVWVFlQRVIpOgotICAgIGNhc2Ug SFNSX0NQUkVHMzIoUE1YRVZDTlRSKToKLSAgICBjYXNlIEhTUl9DUFJFRzMyKFBNT1ZTU0VUKToK LSAgICAgICAgLyoKLSAgICAgICAgICogQWNjZXNzaWJsZSBhdCBFTDAgb25seSBpZiBQTVVTRVJF TlJfRUwwLkVOIGlzIHNldC4gV2UKLSAgICAgICAgICogZW11bGF0ZSB0aGF0IHJlZ2lzdGVyIGFz IDAgYWJvdmUuCi0gICAgICAgICAqLwotICAgICAgICByZXR1cm4gaGFuZGxlX3Jhel93aShyZWdz LCByZWdpZHgsIGNwMzIucmVhZCwgaHNyLCAxKTsKLQotICAgIC8qCi0gICAgICogSENSX0VMMi5U SURDUAotICAgICAqCi0gICAgICogQVJNdjcgKERESSAwNDA2Qy5iKTogQjEuMTQuMwotICAgICAq IEFSTXY4IChEREkgMDQ4N0EuZCk6IEQxLTE1MDEgVGFibGUgRDEtNDMKLSAgICAgKgotICAgICAq ICAtIENSbj09YzksIG9wYzE9PXswLTd9LCBDUm09PXtjMC1jMiwgYzUtYzh9LCBvcGMyPT17MC03 fQotICAgICAqICAgIChDYWNoZSBhbmQgVENNIGxvY2tkb3duIHJlZ2lzdGVycykKLSAgICAgKiAg LSBDUm49PWMxMCwgb3BjMT09ezAtN30sIENSbT09e2MwLCBjMSwgYzQsIGM4fSwgb3BjMj09ezAt N30KLSAgICAgKiAgICAoVk1TQSBDUDE1IGMxMCByZWdpc3RlcnMpCi0gICAgICogIC0gQ1JuPT1j MTEsIG9wYzE9PXswLTd9LCBDUm09PXtjMC1jOCwgYzE1fSwgb3BjMj09ezAtN30KLSAgICAgKiAg ICAoVk1TQSBDUDE1IGMxMSByZWdpc3RlcnMpCi0gICAgICoKLSAgICAgKiBDUFRSX0VMMi5UezAu LjksMTIuLjEzfQotICAgICAqCi0gICAgICogQVJNdjcgKERESSAwNDA2Qy5iKTogQjEuMTQuMTIK LSAgICAgKiBBUk12OCAoRERJIDA0ODdBLmQpOiBOL0EKLSAgICAgKgotICAgICAqICAtIEFsbCBh Y2Nlc3NlcyB0byBjb3Byb2Nlc3NvcnMgMC4uOSBhbmQgMTIuLjEzCi0gICAgICoKLSAgICAgKiBI U1RSX0VMMi5UMTUKLSAgICAgKgotICAgICAqIEFSTXY3IChEREkgMDQwNkMuYik6IEIxLjE0LjE0 Ci0gICAgICogQVJNdjggKERESSAwNDg3QS5kKTogRDEtMTUwNyBUYWJsZSBEMS01NQotICAgICAq Ci0gICAgICogIC0gQWxsIGFjY2Vzc2VzIHRvIGNwMTUsIGMxNSByZWdpc3RlcnMuCi0gICAgICoK LSAgICAgKiBBbmQgYWxsIG90aGVyIHVua25vd24gcmVnaXN0ZXJzLgotICAgICAqLwotICAgIGRl ZmF1bHQ6Ci0gICAgICAgIGdkcHJpbnRrKFhFTkxPR19FUlIsCi0gICAgICAgICAgICAgICAgICIl cyBwMTUsICVkLCByJWQsIGNyJWQsIGNyJWQsICVkIEAgMHglIlBSSXJlZ2lzdGVyIlxuIiwKLSAg ICAgICAgICAgICAgICAgY3AzMi5yZWFkID8gIm1yYyIgOiAibWNyIiwKLSAgICAgICAgICAgICAg ICAgY3AzMi5vcDEsIGNwMzIucmVnLCBjcDMyLmNybiwgY3AzMi5jcm0sIGNwMzIub3AyLCByZWdz LT5wYyk7Ci0gICAgICAgIGdkcHJpbnRrKFhFTkxPR19FUlIsICJ1bmhhbmRsZWQgMzItYml0IENQ MTUgYWNjZXNzICUjeFxuIiwKLSAgICAgICAgICAgICAgICAgaHNyLmJpdHMgJiBIU1JfQ1AzMl9S RUdTX01BU0spOwotICAgICAgICBpbmplY3RfdW5kZWZfZXhjZXB0aW9uKHJlZ3MsIGhzcik7Ci0g ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgYWR2YW5jZV9wYyhyZWdzLCBoc3IpOwotfQotCi1z dGF0aWMgdm9pZCBkb19jcDE1XzY0KHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzLAotICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCB1bmlvbiBoc3IgaHNyKQotewotICAgIGlmICggIWNoZWNr X2NvbmRpdGlvbmFsX2luc3RyKHJlZ3MsIGhzcikgKQotICAgIHsKLSAgICAgICAgYWR2YW5jZV9w YyhyZWdzLCBoc3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc3dpdGNoICggaHNy LmJpdHMgJiBIU1JfQ1A2NF9SRUdTX01BU0sgKQotICAgIHsKLSAgICAvKgotICAgICAqICFDTlRI Q1RMX0VMMi5FTDFQQ0VOIC8gIUNOVEhDVEwuUEwxUENFTgotICAgICAqCi0gICAgICogQVJNdjcg KERESSAwNDA2Qy5iKTogQjQuMS4yMgotICAgICAqIEFSTXY4IChEREkgMDQ4N0EuZCk6IEQxLTE1 MTAgVGFibGUgRDEtNjAKLSAgICAgKi8KLSAgICBjYXNlIEhTUl9DUFJFRzY0KENOVFBfQ1ZBTCk6 Ci0gICAgICAgIGlmICggIXZ0aW1lcl9lbXVsYXRlKHJlZ3MsIGhzcikgKQotICAgICAgICAgICAg cmV0dXJuIGluamVjdF91bmRlZl9leGNlcHRpb24ocmVncywgaHNyKTsKLSAgICAgICAgYnJlYWs7 Ci0KLSAgICAvKgotICAgICAqIEhDUl9FTDIuRk1PIG9yIEhDUl9FTDIuSU1PCi0gICAgICoKLSAg ICAgKiBHSUMgQXJjaGl0ZWN0dXJlIFNwZWNpZmljYXRpb24gKElISSAwMDY5Qyk6IFNlY3Rpb24g NC42LjMKLSAgICAgKi8KLSAgICBjYXNlIEhTUl9DUFJFRzY0KElDQ19TR0kxUik6Ci0gICAgY2Fz ZSBIU1JfQ1BSRUc2NChJQ0NfQVNHSTFSKToKLSAgICBjYXNlIEhTUl9DUFJFRzY0KElDQ19TR0kw Uik6Ci0gICAgICAgIGlmICggIXZnaWNfZW11bGF0ZShyZWdzLCBoc3IpICkKLSAgICAgICAgICAg IHJldHVybiBpbmplY3RfdW5kZWZfZXhjZXB0aW9uKHJlZ3MsIGhzcik7Ci0gICAgICAgIGJyZWFr OwotCi0gICAgLyoKLSAgICAgKiBDUFRSX0VMMi5UezAuLjksMTIuLjEzfQotICAgICAqCi0gICAg ICogQVJNdjcgKERESSAwNDA2Qy5iKTogQjEuMTQuMTIKLSAgICAgKiBBUk12OCAoRERJIDA0ODdB LmQpOiBOL0EKLSAgICAgKgotICAgICAqICAtIEFsbCBhY2Nlc3NlcyB0byBjb3Byb2Nlc3NvcnMg MC4uOSBhbmQgMTIuLjEzCi0gICAgICoKLSAgICAgKiBIU1RSX0VMMi5UMTUKLSAgICAgKgotICAg ICAqIEFSTXY3IChEREkgMDQwNkMuYik6IEIxLjE0LjE0Ci0gICAgICogQVJNdjggKERESSAwNDg3 QS5kKTogRDEtMTUwNyBUYWJsZSBEMS01NQotICAgICAqCi0gICAgICogIC0gQWxsIGFjY2Vzc2Vz IHRvIGNwMTUsIGMxNSByZWdpc3RlcnMuCi0gICAgICoKLSAgICAgKiBBbmQgYWxsIG90aGVyIHVu a25vd24gcmVnaXN0ZXJzLgotICAgICAqLwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHsKLSAgICAg ICAgICAgIGNvbnN0IHN0cnVjdCBoc3JfY3A2NCBjcDY0ID0gaHNyLmNwNjQ7Ci0KLSAgICAgICAg ICAgIGdkcHJpbnRrKFhFTkxPR19FUlIsCi0gICAgICAgICAgICAgICAgICAgICAiJXMgcDE1LCAl ZCwgciVkLCByJWQsIGNyJWQgQCAweCUiUFJJcmVnaXN0ZXIiXG4iLAotICAgICAgICAgICAgICAg ICAgICAgY3A2NC5yZWFkID8gIm1ycmMiIDogIm1jcnIiLAotICAgICAgICAgICAgICAgICAgICAg Y3A2NC5vcDEsIGNwNjQucmVnMSwgY3A2NC5yZWcyLCBjcDY0LmNybSwgcmVncy0+cGMpOwotICAg ICAgICAgICAgZ2RwcmludGsoWEVOTE9HX0VSUiwgInVuaGFuZGxlZCA2NC1iaXQgQ1AxNSBhY2Nl c3MgJSN4XG4iLAotICAgICAgICAgICAgICAgICAgICAgaHNyLmJpdHMgJiBIU1JfQ1A2NF9SRUdT X01BU0spOwotICAgICAgICAgICAgaW5qZWN0X3VuZGVmX2V4Y2VwdGlvbihyZWdzLCBoc3IpOwot ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGFkdmFuY2VfcGMocmVn cywgaHNyKTsKLX0KLQotc3RhdGljIHZvaWQgZG9fY3AxNF8zMihzdHJ1Y3QgY3B1X3VzZXJfcmVn cyAqcmVncywgY29uc3QgdW5pb24gaHNyIGhzcikKLXsKLSAgICBjb25zdCBzdHJ1Y3QgaHNyX2Nw MzIgY3AzMiA9IGhzci5jcDMyOwotICAgIGludCByZWdpZHggPSBjcDMyLnJlZzsKLSAgICBzdHJ1 Y3QgZG9tYWluICpkID0gY3VycmVudC0+ZG9tYWluOwotCi0gICAgaWYgKCAhY2hlY2tfY29uZGl0 aW9uYWxfaW5zdHIocmVncywgaHNyKSApCi0gICAgewotICAgICAgICBhZHZhbmNlX3BjKHJlZ3Ms IGhzcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKCBoc3IuYml0cyAm IEhTUl9DUDMyX1JFR1NfTUFTSyApCi0gICAgewotICAgIC8qCi0gICAgICogTURDUl9FTDIuVERP U0EKLSAgICAgKgotICAgICAqIEFSTXY3IChEREkgMDQwNkMuYik6IEIxLjE0LjE1Ci0gICAgICog QVJNdjggKERESSAwNDg3QS5kKTogRDEtMTUwOSBUYWJsZSBEMS01OAotICAgICAqCi0gICAgICog VW5oYW5kbGVkOgotICAgICAqICAgIERCR09TTFNSCi0gICAgICogICAgREJHUFJDUgotICAgICAq LwotICAgIGNhc2UgSFNSX0NQUkVHMzIoREJHT1NMQVIpOgotICAgICAgICByZXR1cm4gaGFuZGxl X3dvX3dpKHJlZ3MsIHJlZ2lkeCwgY3AzMi5yZWFkLCBoc3IsIDEpOwotICAgIGNhc2UgSFNSX0NQ UkVHMzIoREJHT1NETFIpOgotICAgICAgICByZXR1cm4gaGFuZGxlX3Jhel93aShyZWdzLCByZWdp ZHgsIGNwMzIucmVhZCwgaHNyLCAxKTsKLQotICAgIC8qCi0gICAgICogTURDUl9FTDIuVERBCi0g ICAgICoKLSAgICAgKiBBUk12NyAoRERJIDA0MDZDLmIpOiBCMS4xNC4xNQotICAgICAqIEFSTXY4 IChEREkgMDQ4N0EuZCk6IEQxLTE1MTAgVGFibGUgRDEtNTkKLSAgICAgKgotICAgICAqIFVuaGFu ZGxlZDoKLSAgICAgKiAgICBEQkdEQ0NJTlQKLSAgICAgKiAgICBEQkdEVFJSWGludAotICAgICAq ICAgIERCR0RUUlRYaW50Ci0gICAgICogICAgREJHV0ZBUgotICAgICAqICAgIERCR0RUUlRYZXh0 Ci0gICAgICogICAgREJHRFRSUlhleHQsCi0gICAgICogICAgREJHQlhWUjxuPgotICAgICAqICAg IERCR0NMQUlNU0VUCi0gICAgICogICAgREJHQ0xBSU1DTFIKLSAgICAgKiAgICBEQkdBVVRIU1RB VFVTCi0gICAgICogICAgREJHREVWSUQKLSAgICAgKiAgICBEQkdERVZJRDEKLSAgICAgKiAgICBE QkdERVZJRDIKLSAgICAgKiAgICBEQkdPU0VDQ1IKLSAgICAgKi8KLSAgICBjYXNlIEhTUl9DUFJF RzMyKERCR0RJRFIpOgotICAgIHsKLSAgICAgICAgdWludDMyX3QgdmFsOwotCi0gICAgICAgIC8q Ci0gICAgICAgICAqIFJlYWQtb25seSByZWdpc3Rlci4gQWNjZXNzaWJsZSBieSBFTDAgaWYgREJH RFNDUmV4dC5VRENDZGlzCi0gICAgICAgICAqIGlzIHNldCB0byAwLCB3aGljaCB3ZSBlbXVsYXRl ZCBiZWxvdy4KLSAgICAgICAgICovCi0gICAgICAgIGlmICggIWNwMzIucmVhZCApCi0gICAgICAg ICAgICByZXR1cm4gaW5qZWN0X3VuZGVmX2V4Y2VwdGlvbihyZWdzLCBoc3IpOwotCi0gICAgICAg IC8qIEltcGxlbWVudCB0aGUgbWluaW11bSByZXF1aXJlbWVudHM6Ci0gICAgICAgICAqICAtIE51 bWJlciBvZiB3YXRjaHBvaW50czogMQotICAgICAgICAgKiAgLSBOdW1iZXIgb2YgYnJlYWtwb2lu dHM6IDIKLSAgICAgICAgICogIC0gVmVyc2lvbjogQVJNdjcgdjcuMQotICAgICAgICAgKiAgLSBW YXJpYW50IGFuZCBSZXZpc2lvbiBiaXRzIG1hdGNoIE1ESVIKLSAgICAgICAgICovCi0gICAgICAg IHZhbCA9ICgxIDw8IDI0KSB8ICg1IDw8IDE2KTsKLSAgICAgICAgdmFsIHw9ICgoZC0+YXJjaC52 cGlkciA+PiAyMCkgJiAweGYpIHwgKGQtPmFyY2gudnBpZHIgJiAweGYpOwotICAgICAgICBzZXRf dXNlcl9yZWcocmVncywgcmVnaWR4LCB2YWwpOwotCi0gICAgICAgIGJyZWFrOwotICAgIH0KLQot ICAgIGNhc2UgSFNSX0NQUkVHMzIoREJHRFNDUklOVCk6Ci0gICAgICAgIC8qCi0gICAgICAgICAq IFJlYWQtb25seSByZWdpc3Rlci4gQWNjZXNzaWJsZSBieSBFTDAgaWYgREJHRFNDUmV4dC5VREND ZGlzCi0gICAgICAgICAqIGlzIHNldCB0byAwLCB3aGljaCB3ZSBlbXVsYXRlZCBiZWxvdy4KLSAg ICAgICAgICovCi0gICAgICAgIHJldHVybiBoYW5kbGVfcm9fcmF6KHJlZ3MsIHJlZ2lkeCwgY3Az Mi5yZWFkLCBoc3IsIDEpOwotCi0gICAgY2FzZSBIU1JfQ1BSRUczMihEQkdEU0NSRVhUKToKLSAg ICAgICAgLyoKLSAgICAgICAgICogSW1wbGVtZW50IGRlYnVnIHN0YXR1cyBhbmQgY29udHJvbCBy ZWdpc3RlciBhcyBSQVovV0kuCi0gICAgICAgICAqIFRoZSBPUyB3b24ndCB1c2UgSGFyZHdhcmUg ZGVidWcgaWYgTURCR2VuIG5vdCBzZXQuCi0gICAgICAgICAqLwotICAgICAgICByZXR1cm4gaGFu ZGxlX3Jhel93aShyZWdzLCByZWdpZHgsIGNwMzIucmVhZCwgaHNyLCAxKTsKLQotICAgIGNhc2Ug SFNSX0NQUkVHMzIoREJHVkNSKToKLSAgICBjYXNlIEhTUl9DUFJFRzMyKERCR0JWUjApOgotICAg IGNhc2UgSFNSX0NQUkVHMzIoREJHQkNSMCk6Ci0gICAgY2FzZSBIU1JfQ1BSRUczMihEQkdXVlIw KToKLSAgICBjYXNlIEhTUl9DUFJFRzMyKERCR1dDUjApOgotICAgIGNhc2UgSFNSX0NQUkVHMzIo REJHQlZSMSk6Ci0gICAgY2FzZSBIU1JfQ1BSRUczMihEQkdCQ1IxKToKLSAgICAgICAgcmV0dXJu IGhhbmRsZV9yYXpfd2kocmVncywgcmVnaWR4LCBjcDMyLnJlYWQsIGhzciwgMSk7Ci0KLSAgICAv KgotICAgICAqIENQVFJfRUwyLlRUQQotICAgICAqCi0gICAgICogQVJNdjcgKERESSAwNDA2Qy5i KTogQjEuMTQuMTYKLSAgICAgKiBBUk12OCAoRERJIDA0ODdBLmQpOiBEMS0xNTA3IFRhYmxlIEQx LTU0Ci0gICAgICoKLSAgICAgKiAgLSBBbGwgaW1wbGVtZW50ZWQgdHJhY2UgcmVnaXN0ZXJzLgot ICAgICAqCi0gICAgICogTURDUl9FTDIuVERSQQotICAgICAqCi0gICAgICogQVJNdjcgKERESSAw NDA2Qy5iKTogQjEuMTQuMTUKLSAgICAgKiBBUk12OCAoRERJIDA0ODdBLmQpOiBEMS0xNTA4IFRh YmxlIEQxLTU3Ci0gICAgICoKLSAgICAgKiBVbmhhbmRsZWQ6Ci0gICAgICogICAgREJHRFJBUiAo MzItYml0IGFjY2Vzc2VzKQotICAgICAqICAgIERCR0RTQVIgKDMyLWJpdCBhY2Nlc3NlcykKLSAg ICAgKgotICAgICAqIEFuZCBhbGwgb3RoZXIgdW5rbm93biByZWdpc3RlcnMuCi0gICAgICovCi0g ICAgZGVmYXVsdDoKLSAgICAgICAgZ2RwcmludGsoWEVOTE9HX0VSUiwKLSAgICAgICAgICAgICAg ICAgIiVzIHAxNCwgJWQsIHIlZCwgY3IlZCwgY3IlZCwgJWQgQCAweCUiUFJJcmVnaXN0ZXIiXG4i LAotICAgICAgICAgICAgICAgICAgY3AzMi5yZWFkID8gIm1yYyIgOiAibWNyIiwKLSAgICAgICAg ICAgICAgICAgIGNwMzIub3AxLCBjcDMyLnJlZywgY3AzMi5jcm4sIGNwMzIuY3JtLCBjcDMyLm9w MiwgcmVncy0+cGMpOwotICAgICAgICBnZHByaW50ayhYRU5MT0dfRVJSLCAidW5oYW5kbGVkIDMy LWJpdCBjcDE0IGFjY2VzcyAlI3hcbiIsCi0gICAgICAgICAgICAgICAgIGhzci5iaXRzICYgSFNS X0NQMzJfUkVHU19NQVNLKTsKLSAgICAgICAgaW5qZWN0X3VuZGVmX2V4Y2VwdGlvbihyZWdzLCBo c3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYWR2YW5jZV9wYyhyZWdzLCBoc3Ip OwotfQotCi1zdGF0aWMgdm9pZCBkb19jcDE0XzY0KHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdz LCBjb25zdCB1bmlvbiBoc3IgaHNyKQotewotICAgIGNvbnN0IHN0cnVjdCBoc3JfY3A2NCBjcDY0 ID0gaHNyLmNwNjQ7Ci0KLSAgICBpZiAoICFjaGVja19jb25kaXRpb25hbF9pbnN0cihyZWdzLCBo c3IpICkKLSAgICB7Ci0gICAgICAgIGFkdmFuY2VfcGMocmVncywgaHNyKTsKLSAgICAgICAgcmV0 dXJuOwotICAgIH0KLQotICAgIC8qCi0gICAgICogQ1BUUl9FTDIuVFRBCi0gICAgICoKLSAgICAg KiBBUk12NyAoRERJIDA0MDZDLmIpOiBCMS4xNC4xNgotICAgICAqIEFSTXY4IChEREkgMDQ4N0Eu ZCk6IEQxLTE1MDcgVGFibGUgRDEtNTQKLSAgICAgKgotICAgICAqICAtIEFsbCBpbXBsZW1lbnRl ZCB0cmFjZSByZWdpc3RlcnMuCi0gICAgICoKLSAgICAgKiBNRENSX0VMMi5URFJBCi0gICAgICoK LSAgICAgKiBBUk12NyAoRERJIDA0MDZDLmIpOiBCMS4xNC4xNQotICAgICAqIEFSTXY4IChEREkg MDQ4N0EuZCk6IEQxLTE1MDggVGFibGUgRDEtNTcKLSAgICAgKgotICAgICAqIFVuaGFuZGxlZDoK LSAgICAgKiAgICBEQkdEUkFSICg2NC1iaXQgYWNjZXNzZXMpCi0gICAgICogICAgREJHRFNBUiAo NjQtYml0IGFjY2Vzc2VzKQotICAgICAqCi0gICAgICogQW5kIGFsbCBvdGhlciB1bmtub3duIHJl Z2lzdGVycy4KLSAgICAgKi8KLSAgICBnZHByaW50ayhYRU5MT0dfRVJSLAotICAgICAgICAgICAg ICIlcyBwMTQsICVkLCByJWQsIHIlZCwgY3IlZCBAIDB4JSJQUklyZWdpc3RlciJcbiIsCi0gICAg ICAgICAgICAgY3A2NC5yZWFkID8gIm1ycmMiIDogIm1jcnIiLAotICAgICAgICAgICAgIGNwNjQu b3AxLCBjcDY0LnJlZzEsIGNwNjQucmVnMiwgY3A2NC5jcm0sIHJlZ3MtPnBjKTsKLSAgICBnZHBy aW50ayhYRU5MT0dfRVJSLCAidW5oYW5kbGVkIDY0LWJpdCBDUDE0IGFjY2VzcyAlI3hcbiIsCi0g ICAgICAgICAgICAgaHNyLmJpdHMgJiBIU1JfQ1A2NF9SRUdTX01BU0spOwotICAgIGluamVjdF91 bmRlZl9leGNlcHRpb24ocmVncywgaHNyKTsKLX0KLQotc3RhdGljIHZvaWQgZG9fY3AxNF9kYmco c3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MsIGNvbnN0IHVuaW9uIGhzciBoc3IpCi17Ci0gICAg c3RydWN0IGhzcl9jcDY0IGNwNjQgPSBoc3IuY3A2NDsKLQotICAgIGlmICggIWNoZWNrX2NvbmRp dGlvbmFsX2luc3RyKHJlZ3MsIGhzcikgKQotICAgIHsKLSAgICAgICAgYWR2YW5jZV9wYyhyZWdz LCBoc3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBNRENSX0VM Mi5URE9TQQotICAgICAqCi0gICAgICogQVJNdjcgKERESSAwNDA2Qy5iKTogQjEuMTQuMTUKLSAg ICAgKiBBUk12OCAoRERJIDA0ODdBLmQpOiBEMS0xNTA5IFRhYmxlIEQxLTU4Ci0gICAgICoKLSAg ICAgKiBVbmhhbmRsZWQ6Ci0gICAgICogICAgREJHRFRSVFhpbnQKLSAgICAgKiAgICBEQkdEVFJS WGludAotICAgICAqCi0gICAgICogQW5kIGFsbCBvdGhlciB1bmtub3duIHJlZ2lzdGVycy4KLSAg ICAgKi8KLSAgICBnZHByaW50ayhYRU5MT0dfRVJSLAotICAgICAgICAgICAgICIlcyBwMTQsICVk LCByJWQsIHIlZCwgY3IlZCBAIDB4JSJQUklyZWdpc3RlciJcbiIsCi0gICAgICAgICAgICAgY3A2 NC5yZWFkID8gIm1ycmMiIDogIm1jcnIiLAotICAgICAgICAgICAgIGNwNjQub3AxLCBjcDY0LnJl ZzEsIGNwNjQucmVnMiwgY3A2NC5jcm0sIHJlZ3MtPnBjKTsKLSAgICBnZHByaW50ayhYRU5MT0df RVJSLCAidW5oYW5kbGVkIDY0LWJpdCBDUDE0IERCRyBhY2Nlc3MgJSN4XG4iLAotICAgICAgICAg ICAgIGhzci5iaXRzICYgSFNSX0NQNjRfUkVHU19NQVNLKTsKLQotICAgIGluamVjdF91bmRlZl9l eGNlcHRpb24ocmVncywgaHNyKTsKLX0KLQotc3RhdGljIHZvaWQgZG9fY3Aoc3RydWN0IGNwdV91 c2VyX3JlZ3MgKnJlZ3MsIGNvbnN0IHVuaW9uIGhzciBoc3IpCi17Ci0gICAgY29uc3Qgc3RydWN0 IGhzcl9jcCBjcCA9IGhzci5jcDsKLQotICAgIGlmICggIWNoZWNrX2NvbmRpdGlvbmFsX2luc3Ry KHJlZ3MsIGhzcikgKQotICAgIHsKLSAgICAgICAgYWR2YW5jZV9wYyhyZWdzLCBoc3IpOwotICAg ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKCFjcC50YXMpOyAvKiBXZSBkb24ndCB0 cmFwIFNJTUQgaW5zdHJ1Y3Rpb24gKi8KLSAgICBnZHByaW50ayhYRU5MT0dfRVJSLCAidW5oYW5k bGVkIENQJWQgYWNjZXNzXG4iLCBjcC5jb3Byb2MpOwotICAgIGluamVjdF91bmRlZl9leGNlcHRp b24ocmVncywgaHNyKTsKLX0KLQogdm9pZCBkdW1wX2d1ZXN0X3MxX3dhbGsoc3RydWN0IGRvbWFp biAqZCwgdmFkZHJfdCBhZGRyKQogewogICAgIHJlZ2lzdGVyX3QgdHRiY3IgPSBSRUFEX1NZU1JF RyhUQ1JfRUwxKTsKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS92Y3ByZWcuYyBiL3hlbi9hcmNo L2FybS92Y3ByZWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5mM2Iw ODQwM2ZiCi0tLSAvZGV2L251bGwKKysrIGIveGVuL2FyY2gvYXJtL3ZjcHJlZy5jCkBAIC0wLDAg KzEsNDUxIEBACisvKgorICogeGVuL2FyY2gvYXJtL2FybTY0L3ZjcHJlZy5jCisgKgorICogRW11 bGF0ZSBjby1wcm9jZXNzb3IgcmVnaXN0ZXJzIHRyYXBwZWQuCisgKgorICogQ29weXJpZ2h0IChj KSAyMDExIENpdHJpeCBTeXN0ZW1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0 aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg KgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8eGVuL3NjaGVkLmg+CisK KyNpbmNsdWRlIDxhc20vY3VycmVudC5oPgorI2luY2x1ZGUgPGFzbS9yZWdzLmg+CisjaW5jbHVk ZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL3Z0aW1lci5oPgorCit2b2lkIGRvX2NwMTVf MzIoc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MsIGNvbnN0IHVuaW9uIGhzciBoc3IpCit7Cisg ICAgY29uc3Qgc3RydWN0IGhzcl9jcDMyIGNwMzIgPSBoc3IuY3AzMjsKKyAgICBpbnQgcmVnaWR4 ID0gY3AzMi5yZWc7CisgICAgc3RydWN0IHZjcHUgKnYgPSBjdXJyZW50OworCisgICAgaWYgKCAh Y2hlY2tfY29uZGl0aW9uYWxfaW5zdHIocmVncywgaHNyKSApCisgICAgeworICAgICAgICBhZHZh bmNlX3BjKHJlZ3MsIGhzcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzd2l0Y2gg KCBoc3IuYml0cyAmIEhTUl9DUDMyX1JFR1NfTUFTSyApCisgICAgeworICAgIC8qCisgICAgICog IUNOVEhDVExfRUwyLkVMMVBDRU4gLyAhQ05USENUTC5QTDFQQ0VOCisgICAgICoKKyAgICAgKiBB Uk12NyAoRERJIDA0MDZDLmIpOiBCNC4xLjIyCisgICAgICogQVJNdjggKERESSAwNDg3QS5kKTog RDEtMTUxMCBUYWJsZSBEMS02MAorICAgICAqLworICAgIGNhc2UgSFNSX0NQUkVHMzIoQ05UUF9D VEwpOgorICAgIGNhc2UgSFNSX0NQUkVHMzIoQ05UUF9UVkFMKToKKyAgICAgICAgaWYgKCAhdnRp bWVyX2VtdWxhdGUocmVncywgaHNyKSApCisgICAgICAgICAgICByZXR1cm4gaW5qZWN0X3VuZGVm X2V4Y2VwdGlvbihyZWdzLCBoc3IpOworICAgICAgICBicmVhazsKKworICAgIC8qCisgICAgICog SENSX0VMMi5UQUNSIC8gSENSLlRBQworICAgICAqCisgICAgICogQVJNdjcgKERESSAwNDA2Qy5i KTogQjEuMTQuNgorICAgICAqIEFSTXY4IChEREkgMDQ4N0EuZCk6IEc2LjIuMQorICAgICAqLwor ICAgIGNhc2UgSFNSX0NQUkVHMzIoQUNUTFIpOgorICAgICAgICBpZiAoIHBzcl9tb2RlX2lzX3Vz ZXIocmVncykgKQorICAgICAgICAgICAgcmV0dXJuIGluamVjdF91bmRlZl9leGNlcHRpb24ocmVn cywgaHNyKTsKKyAgICAgICAgaWYgKCBjcDMyLnJlYWQgKQorICAgICAgICAgICAgc2V0X3VzZXJf cmVnKHJlZ3MsIHJlZ2lkeCwgdi0+YXJjaC5hY3Rscik7CisgICAgICAgIGJyZWFrOworCisgICAg LyoKKyAgICAgKiBNRENSX0VMMi5UUE0KKyAgICAgKgorICAgICAqIEFSTXY3IChEREkgMDQwNkMu Yik6IEIxLjE0LjE3CisgICAgICogQVJNdjggKERESSAwNDg3QS5kKTogRDEtMTUxMSBUYWJsZSBE MS02MQorICAgICAqCisgICAgICogVW5oYW5kbGVkOgorICAgICAqICAgIFBNRVZDTlRSPG4+Cisg ICAgICogICAgUE1FVlRZUEVSPG4+CisgICAgICogICAgUE1DQ0ZJTFRSCisgICAgICoKKyAgICAg KiBNRENSX0VMMi5UUE1DUgorICAgICAqCisgICAgICogQVJNdjcgKERESSAwNDA2Qy5iKTogQjEu MTQuMTcKKyAgICAgKiBBUk12OCAoRERJIDA0ODdBLmQpOiBEMS0xNTExIFRhYmxlIEQxLTYyCisg ICAgICoKKyAgICAgKiBOQjogQm90aCBNRENSX0VMMi5UUE0gYW5kIE1EQ1JfRUwyLlRQTUNSIGNh dXNlIHRyYXBwaW5nIG9mIFBNQ1IuCisgICAgICovCisgICAgLyogV2UgY291bGQgdHJhcCBJRF9E RlIwIGFuZCB0ZWxsIHRoZSBndWVzdCB3ZSBkb24ndCBzdXBwb3J0CisgICAgICogcGVyZm9ybWFu Y2UgbW9uaXRvcmluZywgYnV0IExpbnV4IGRvZXNuJ3QgY2hlY2sgdGhlIElEX0RGUjAuCisgICAg ICogVGhlcmVmb3JlIGl0IHdpbGwgcmVhZCBQTUNSLgorICAgICAqCisgICAgICogV2UgdGVsbCB0 aGUgZ3Vlc3Qgd2UgaGF2ZSAwIGNvdW50ZXJzLiBVbmZvcnR1bmF0ZWx5IHdlIG11c3QKKyAgICAg KiBhbHdheXMgc3VwcG9ydCBQTUNDTlRSICh0aGUgY3lsZSBjb3VudGVyKTogd2UganVzdCBSQVov V0kgZm9yIGFsbAorICAgICAqIFBNIHJlZ2lzdGVyLCB3aGljaCBkb2Vzbid0IGNyYXNoIHRoZSBr ZXJuZWwgYXQgbGVhc3QKKyAgICAgKi8KKyAgICBjYXNlIEhTUl9DUFJFRzMyKFBNVVNFUkVOUik6 CisgICAgICAgIC8qIFJPIGF0IEVMMC4gUkFaL1dJIGF0IEVMMSAqLworICAgICAgICBpZiAoIHBz cl9tb2RlX2lzX3VzZXIocmVncykgKQorICAgICAgICAgICAgcmV0dXJuIGhhbmRsZV9yb19yYXoo cmVncywgcmVnaWR4LCBjcDMyLnJlYWQsIGhzciwgMCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg ICAgIHJldHVybiBoYW5kbGVfcmF6X3dpKHJlZ3MsIHJlZ2lkeCwgY3AzMi5yZWFkLCBoc3IsIDEp OworICAgIGNhc2UgSFNSX0NQUkVHMzIoUE1JTlRFTlNFVCk6CisgICAgY2FzZSBIU1JfQ1BSRUcz MihQTUlOVEVOQ0xSKToKKyAgICAgICAgLyogRUwxIG9ubHksIGhvd2V2ZXIgTURDUl9FTDIuVFBN PT0xIG1lYW5zIEVMMCBtYXkgdHJhcCBoZXJlIGFsc28uICovCisgICAgICAgIHJldHVybiBoYW5k bGVfcmF6X3dpKHJlZ3MsIHJlZ2lkeCwgY3AzMi5yZWFkLCBoc3IsIDEpOworICAgIGNhc2UgSFNS X0NQUkVHMzIoUE1DUik6CisgICAgY2FzZSBIU1JfQ1BSRUczMihQTUNOVEVOU0VUKToKKyAgICBj YXNlIEhTUl9DUFJFRzMyKFBNQ05URU5DTFIpOgorICAgIGNhc2UgSFNSX0NQUkVHMzIoUE1PVlNS KToKKyAgICBjYXNlIEhTUl9DUFJFRzMyKFBNU1dJTkMpOgorICAgIGNhc2UgSFNSX0NQUkVHMzIo UE1TRUxSKToKKyAgICBjYXNlIEhTUl9DUFJFRzMyKFBNQ0VJRDApOgorICAgIGNhc2UgSFNSX0NQ UkVHMzIoUE1DRUlEMSk6CisgICAgY2FzZSBIU1JfQ1BSRUczMihQTUNDTlRSKToKKyAgICBjYXNl IEhTUl9DUFJFRzMyKFBNWEVWVFlQRVIpOgorICAgIGNhc2UgSFNSX0NQUkVHMzIoUE1YRVZDTlRS KToKKyAgICBjYXNlIEhTUl9DUFJFRzMyKFBNT1ZTU0VUKToKKyAgICAgICAgLyoKKyAgICAgICAg ICogQWNjZXNzaWJsZSBhdCBFTDAgb25seSBpZiBQTVVTRVJFTlJfRUwwLkVOIGlzIHNldC4gV2UK KyAgICAgICAgICogZW11bGF0ZSB0aGF0IHJlZ2lzdGVyIGFzIDAgYWJvdmUuCisgICAgICAgICAq LworICAgICAgICByZXR1cm4gaGFuZGxlX3Jhel93aShyZWdzLCByZWdpZHgsIGNwMzIucmVhZCwg aHNyLCAxKTsKKworICAgIC8qCisgICAgICogSENSX0VMMi5USURDUAorICAgICAqCisgICAgICog QVJNdjcgKERESSAwNDA2Qy5iKTogQjEuMTQuMworICAgICAqIEFSTXY4IChEREkgMDQ4N0EuZCk6 IEQxLTE1MDEgVGFibGUgRDEtNDMKKyAgICAgKgorICAgICAqICAtIENSbj09YzksIG9wYzE9PXsw LTd9LCBDUm09PXtjMC1jMiwgYzUtYzh9LCBvcGMyPT17MC03fQorICAgICAqICAgIChDYWNoZSBh bmQgVENNIGxvY2tkb3duIHJlZ2lzdGVycykKKyAgICAgKiAgLSBDUm49PWMxMCwgb3BjMT09ezAt N30sIENSbT09e2MwLCBjMSwgYzQsIGM4fSwgb3BjMj09ezAtN30KKyAgICAgKiAgICAoVk1TQSBD UDE1IGMxMCByZWdpc3RlcnMpCisgICAgICogIC0gQ1JuPT1jMTEsIG9wYzE9PXswLTd9LCBDUm09 PXtjMC1jOCwgYzE1fSwgb3BjMj09ezAtN30KKyAgICAgKiAgICAoVk1TQSBDUDE1IGMxMSByZWdp c3RlcnMpCisgICAgICoKKyAgICAgKiBDUFRSX0VMMi5UezAuLjksMTIuLjEzfQorICAgICAqCisg ICAgICogQVJNdjcgKERESSAwNDA2Qy5iKTogQjEuMTQuMTIKKyAgICAgKiBBUk12OCAoRERJIDA0 ODdBLmQpOiBOL0EKKyAgICAgKgorICAgICAqICAtIEFsbCBhY2Nlc3NlcyB0byBjb3Byb2Nlc3Nv cnMgMC4uOSBhbmQgMTIuLjEzCisgICAgICoKKyAgICAgKiBIU1RSX0VMMi5UMTUKKyAgICAgKgor ICAgICAqIEFSTXY3IChEREkgMDQwNkMuYik6IEIxLjE0LjE0CisgICAgICogQVJNdjggKERESSAw NDg3QS5kKTogRDEtMTUwNyBUYWJsZSBEMS01NQorICAgICAqCisgICAgICogIC0gQWxsIGFjY2Vz c2VzIHRvIGNwMTUsIGMxNSByZWdpc3RlcnMuCisgICAgICoKKyAgICAgKiBBbmQgYWxsIG90aGVy IHVua25vd24gcmVnaXN0ZXJzLgorICAgICAqLworICAgIGRlZmF1bHQ6CisgICAgICAgIGdkcHJp bnRrKFhFTkxPR19FUlIsCisgICAgICAgICAgICAgICAgICIlcyBwMTUsICVkLCByJWQsIGNyJWQs IGNyJWQsICVkIEAgMHglIlBSSXJlZ2lzdGVyIlxuIiwKKyAgICAgICAgICAgICAgICAgY3AzMi5y ZWFkID8gIm1yYyIgOiAibWNyIiwKKyAgICAgICAgICAgICAgICAgY3AzMi5vcDEsIGNwMzIucmVn LCBjcDMyLmNybiwgY3AzMi5jcm0sIGNwMzIub3AyLCByZWdzLT5wYyk7CisgICAgICAgIGdkcHJp bnRrKFhFTkxPR19FUlIsICJ1bmhhbmRsZWQgMzItYml0IENQMTUgYWNjZXNzICUjeFxuIiwKKyAg ICAgICAgICAgICAgICAgaHNyLmJpdHMgJiBIU1JfQ1AzMl9SRUdTX01BU0spOworICAgICAgICBp bmplY3RfdW5kZWZfZXhjZXB0aW9uKHJlZ3MsIGhzcik7CisgICAgICAgIHJldHVybjsKKyAgICB9 CisgICAgYWR2YW5jZV9wYyhyZWdzLCBoc3IpOworfQorCit2b2lkIGRvX2NwMTVfNjQoc3RydWN0 IGNwdV91c2VyX3JlZ3MgKnJlZ3MsIGNvbnN0IHVuaW9uIGhzciBoc3IpCit7CisgICAgaWYgKCAh Y2hlY2tfY29uZGl0aW9uYWxfaW5zdHIocmVncywgaHNyKSApCisgICAgeworICAgICAgICBhZHZh bmNlX3BjKHJlZ3MsIGhzcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzd2l0Y2gg KCBoc3IuYml0cyAmIEhTUl9DUDY0X1JFR1NfTUFTSyApCisgICAgeworICAgIC8qCisgICAgICog IUNOVEhDVExfRUwyLkVMMVBDRU4gLyAhQ05USENUTC5QTDFQQ0VOCisgICAgICoKKyAgICAgKiBB Uk12NyAoRERJIDA0MDZDLmIpOiBCNC4xLjIyCisgICAgICogQVJNdjggKERESSAwNDg3QS5kKTog RDEtMTUxMCBUYWJsZSBEMS02MAorICAgICAqLworICAgIGNhc2UgSFNSX0NQUkVHNjQoQ05UUF9D VkFMKToKKyAgICAgICAgaWYgKCAhdnRpbWVyX2VtdWxhdGUocmVncywgaHNyKSApCisgICAgICAg ICAgICByZXR1cm4gaW5qZWN0X3VuZGVmX2V4Y2VwdGlvbihyZWdzLCBoc3IpOworICAgICAgICBi cmVhazsKKworICAgIC8qCisgICAgICogSENSX0VMMi5GTU8gb3IgSENSX0VMMi5JTU8KKyAgICAg KgorICAgICAqIEdJQyBBcmNoaXRlY3R1cmUgU3BlY2lmaWNhdGlvbiAoSUhJIDAwNjlDKTogU2Vj dGlvbiA0LjYuMworICAgICAqLworICAgIGNhc2UgSFNSX0NQUkVHNjQoSUNDX1NHSTFSKToKKyAg ICBjYXNlIEhTUl9DUFJFRzY0KElDQ19BU0dJMVIpOgorICAgIGNhc2UgSFNSX0NQUkVHNjQoSUND X1NHSTBSKToKKyAgICAgICAgaWYgKCAhdmdpY19lbXVsYXRlKHJlZ3MsIGhzcikgKQorICAgICAg ICAgICAgcmV0dXJuIGluamVjdF91bmRlZl9leGNlcHRpb24ocmVncywgaHNyKTsKKyAgICAgICAg YnJlYWs7CisKKyAgICAvKgorICAgICAqIENQVFJfRUwyLlR7MC4uOSwxMi4uMTN9CisgICAgICoK KyAgICAgKiBBUk12NyAoRERJIDA0MDZDLmIpOiBCMS4xNC4xMgorICAgICAqIEFSTXY4IChEREkg MDQ4N0EuZCk6IE4vQQorICAgICAqCisgICAgICogIC0gQWxsIGFjY2Vzc2VzIHRvIGNvcHJvY2Vz c29ycyAwLi45IGFuZCAxMi4uMTMKKyAgICAgKgorICAgICAqIEhTVFJfRUwyLlQxNQorICAgICAq CisgICAgICogQVJNdjcgKERESSAwNDA2Qy5iKTogQjEuMTQuMTQKKyAgICAgKiBBUk12OCAoRERJ IDA0ODdBLmQpOiBEMS0xNTA3IFRhYmxlIEQxLTU1CisgICAgICoKKyAgICAgKiAgLSBBbGwgYWNj ZXNzZXMgdG8gY3AxNSwgYzE1IHJlZ2lzdGVycy4KKyAgICAgKgorICAgICAqIEFuZCBhbGwgb3Ro ZXIgdW5rbm93biByZWdpc3RlcnMuCisgICAgICovCisgICAgZGVmYXVsdDoKKyAgICAgICAgewor ICAgICAgICAgICAgY29uc3Qgc3RydWN0IGhzcl9jcDY0IGNwNjQgPSBoc3IuY3A2NDsKKworICAg ICAgICAgICAgZ2RwcmludGsoWEVOTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICIlcyBw MTUsICVkLCByJWQsIHIlZCwgY3IlZCBAIDB4JSJQUklyZWdpc3RlciJcbiIsCisgICAgICAgICAg ICAgICAgICAgICBjcDY0LnJlYWQgPyAibXJyYyIgOiAibWNyciIsCisgICAgICAgICAgICAgICAg ICAgICBjcDY0Lm9wMSwgY3A2NC5yZWcxLCBjcDY0LnJlZzIsIGNwNjQuY3JtLCByZWdzLT5wYyk7 CisgICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfRVJSLCAidW5oYW5kbGVkIDY0LWJpdCBDUDE1 IGFjY2VzcyAlI3hcbiIsCisgICAgICAgICAgICAgICAgICAgICBoc3IuYml0cyAmIEhTUl9DUDY0 X1JFR1NfTUFTSyk7CisgICAgICAgICAgICBpbmplY3RfdW5kZWZfZXhjZXB0aW9uKHJlZ3MsIGhz cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgYWR2YW5jZV9w YyhyZWdzLCBoc3IpOworfQorCit2b2lkIGRvX2NwMTRfMzIoc3RydWN0IGNwdV91c2VyX3JlZ3Mg KnJlZ3MsIGNvbnN0IHVuaW9uIGhzciBoc3IpCit7CisgICAgY29uc3Qgc3RydWN0IGhzcl9jcDMy IGNwMzIgPSBoc3IuY3AzMjsKKyAgICBpbnQgcmVnaWR4ID0gY3AzMi5yZWc7CisgICAgc3RydWN0 IGRvbWFpbiAqZCA9IGN1cnJlbnQtPmRvbWFpbjsKKworICAgIGlmICggIWNoZWNrX2NvbmRpdGlv bmFsX2luc3RyKHJlZ3MsIGhzcikgKQorICAgIHsKKyAgICAgICAgYWR2YW5jZV9wYyhyZWdzLCBo c3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3dpdGNoICggaHNyLmJpdHMgJiBI U1JfQ1AzMl9SRUdTX01BU0sgKQorICAgIHsKKyAgICAvKgorICAgICAqIE1EQ1JfRUwyLlRET1NB CisgICAgICoKKyAgICAgKiBBUk12NyAoRERJIDA0MDZDLmIpOiBCMS4xNC4xNQorICAgICAqIEFS TXY4IChEREkgMDQ4N0EuZCk6IEQxLTE1MDkgVGFibGUgRDEtNTgKKyAgICAgKgorICAgICAqIFVu aGFuZGxlZDoKKyAgICAgKiAgICBEQkdPU0xTUgorICAgICAqICAgIERCR1BSQ1IKKyAgICAgKi8K KyAgICBjYXNlIEhTUl9DUFJFRzMyKERCR09TTEFSKToKKyAgICAgICAgcmV0dXJuIGhhbmRsZV93 b193aShyZWdzLCByZWdpZHgsIGNwMzIucmVhZCwgaHNyLCAxKTsKKyAgICBjYXNlIEhTUl9DUFJF RzMyKERCR09TRExSKToKKyAgICAgICAgcmV0dXJuIGhhbmRsZV9yYXpfd2kocmVncywgcmVnaWR4 LCBjcDMyLnJlYWQsIGhzciwgMSk7CisKKyAgICAvKgorICAgICAqIE1EQ1JfRUwyLlREQQorICAg ICAqCisgICAgICogQVJNdjcgKERESSAwNDA2Qy5iKTogQjEuMTQuMTUKKyAgICAgKiBBUk12OCAo RERJIDA0ODdBLmQpOiBEMS0xNTEwIFRhYmxlIEQxLTU5CisgICAgICoKKyAgICAgKiBVbmhhbmRs ZWQ6CisgICAgICogICAgREJHRENDSU5UCisgICAgICogICAgREJHRFRSUlhpbnQKKyAgICAgKiAg ICBEQkdEVFJUWGludAorICAgICAqICAgIERCR1dGQVIKKyAgICAgKiAgICBEQkdEVFJUWGV4dAor ICAgICAqICAgIERCR0RUUlJYZXh0LAorICAgICAqICAgIERCR0JYVlI8bj4KKyAgICAgKiAgICBE QkdDTEFJTVNFVAorICAgICAqICAgIERCR0NMQUlNQ0xSCisgICAgICogICAgREJHQVVUSFNUQVRV UworICAgICAqICAgIERCR0RFVklECisgICAgICogICAgREJHREVWSUQxCisgICAgICogICAgREJH REVWSUQyCisgICAgICogICAgREJHT1NFQ0NSCisgICAgICovCisgICAgY2FzZSBIU1JfQ1BSRUcz MihEQkdESURSKToKKyAgICB7CisgICAgICAgIHVpbnQzMl90IHZhbDsKKworICAgICAgICAvKgor ICAgICAgICAgKiBSZWFkLW9ubHkgcmVnaXN0ZXIuIEFjY2Vzc2libGUgYnkgRUwwIGlmIERCR0RT Q1JleHQuVURDQ2RpcworICAgICAgICAgKiBpcyBzZXQgdG8gMCwgd2hpY2ggd2UgZW11bGF0ZWQg YmVsb3cuCisgICAgICAgICAqLworICAgICAgICBpZiAoICFjcDMyLnJlYWQgKQorICAgICAgICAg ICAgcmV0dXJuIGluamVjdF91bmRlZl9leGNlcHRpb24ocmVncywgaHNyKTsKKworICAgICAgICAv KiBJbXBsZW1lbnQgdGhlIG1pbmltdW0gcmVxdWlyZW1lbnRzOgorICAgICAgICAgKiAgLSBOdW1i ZXIgb2Ygd2F0Y2hwb2ludHM6IDEKKyAgICAgICAgICogIC0gTnVtYmVyIG9mIGJyZWFrcG9pbnRz OiAyCisgICAgICAgICAqICAtIFZlcnNpb246IEFSTXY3IHY3LjEKKyAgICAgICAgICogIC0gVmFy aWFudCBhbmQgUmV2aXNpb24gYml0cyBtYXRjaCBNRElSCisgICAgICAgICAqLworICAgICAgICB2 YWwgPSAoMSA8PCAyNCkgfCAoNSA8PCAxNik7CisgICAgICAgIHZhbCB8PSAoKGQtPmFyY2gudnBp ZHIgPj4gMjApICYgMHhmKSB8IChkLT5hcmNoLnZwaWRyICYgMHhmKTsKKyAgICAgICAgc2V0X3Vz ZXJfcmVnKHJlZ3MsIHJlZ2lkeCwgdmFsKTsKKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg ICBjYXNlIEhTUl9DUFJFRzMyKERCR0RTQ1JJTlQpOgorICAgICAgICAvKgorICAgICAgICAgKiBS ZWFkLW9ubHkgcmVnaXN0ZXIuIEFjY2Vzc2libGUgYnkgRUwwIGlmIERCR0RTQ1JleHQuVURDQ2Rp cworICAgICAgICAgKiBpcyBzZXQgdG8gMCwgd2hpY2ggd2UgZW11bGF0ZWQgYmVsb3cuCisgICAg ICAgICAqLworICAgICAgICByZXR1cm4gaGFuZGxlX3JvX3JheihyZWdzLCByZWdpZHgsIGNwMzIu cmVhZCwgaHNyLCAxKTsKKworICAgIGNhc2UgSFNSX0NQUkVHMzIoREJHRFNDUkVYVCk6CisgICAg ICAgIC8qCisgICAgICAgICAqIEltcGxlbWVudCBkZWJ1ZyBzdGF0dXMgYW5kIGNvbnRyb2wgcmVn aXN0ZXIgYXMgUkFaL1dJLgorICAgICAgICAgKiBUaGUgT1Mgd29uJ3QgdXNlIEhhcmR3YXJlIGRl YnVnIGlmIE1EQkdlbiBub3Qgc2V0LgorICAgICAgICAgKi8KKyAgICAgICAgcmV0dXJuIGhhbmRs ZV9yYXpfd2kocmVncywgcmVnaWR4LCBjcDMyLnJlYWQsIGhzciwgMSk7CisKKyAgICBjYXNlIEhT Ul9DUFJFRzMyKERCR1ZDUik6CisgICAgY2FzZSBIU1JfQ1BSRUczMihEQkdCVlIwKToKKyAgICBj YXNlIEhTUl9DUFJFRzMyKERCR0JDUjApOgorICAgIGNhc2UgSFNSX0NQUkVHMzIoREJHV1ZSMCk6 CisgICAgY2FzZSBIU1JfQ1BSRUczMihEQkdXQ1IwKToKKyAgICBjYXNlIEhTUl9DUFJFRzMyKERC R0JWUjEpOgorICAgIGNhc2UgSFNSX0NQUkVHMzIoREJHQkNSMSk6CisgICAgICAgIHJldHVybiBo YW5kbGVfcmF6X3dpKHJlZ3MsIHJlZ2lkeCwgY3AzMi5yZWFkLCBoc3IsIDEpOworCisgICAgLyoK KyAgICAgKiBDUFRSX0VMMi5UVEEKKyAgICAgKgorICAgICAqIEFSTXY3IChEREkgMDQwNkMuYik6 IEIxLjE0LjE2CisgICAgICogQVJNdjggKERESSAwNDg3QS5kKTogRDEtMTUwNyBUYWJsZSBEMS01 NAorICAgICAqCisgICAgICogIC0gQWxsIGltcGxlbWVudGVkIHRyYWNlIHJlZ2lzdGVycy4KKyAg ICAgKgorICAgICAqIE1EQ1JfRUwyLlREUkEKKyAgICAgKgorICAgICAqIEFSTXY3IChEREkgMDQw NkMuYik6IEIxLjE0LjE1CisgICAgICogQVJNdjggKERESSAwNDg3QS5kKTogRDEtMTUwOCBUYWJs ZSBEMS01NworICAgICAqCisgICAgICogVW5oYW5kbGVkOgorICAgICAqICAgIERCR0RSQVIgKDMy LWJpdCBhY2Nlc3NlcykKKyAgICAgKiAgICBEQkdEU0FSICgzMi1iaXQgYWNjZXNzZXMpCisgICAg ICoKKyAgICAgKiBBbmQgYWxsIG90aGVyIHVua25vd24gcmVnaXN0ZXJzLgorICAgICAqLworICAg IGRlZmF1bHQ6CisgICAgICAgIGdkcHJpbnRrKFhFTkxPR19FUlIsCisgICAgICAgICAgICAgICAg ICIlcyBwMTQsICVkLCByJWQsIGNyJWQsIGNyJWQsICVkIEAgMHglIlBSSXJlZ2lzdGVyIlxuIiwK KyAgICAgICAgICAgICAgICAgIGNwMzIucmVhZCA/ICJtcmMiIDogIm1jciIsCisgICAgICAgICAg ICAgICAgICBjcDMyLm9wMSwgY3AzMi5yZWcsIGNwMzIuY3JuLCBjcDMyLmNybSwgY3AzMi5vcDIs IHJlZ3MtPnBjKTsKKyAgICAgICAgZ2RwcmludGsoWEVOTE9HX0VSUiwgInVuaGFuZGxlZCAzMi1i aXQgY3AxNCBhY2Nlc3MgJSN4XG4iLAorICAgICAgICAgICAgICAgICBoc3IuYml0cyAmIEhTUl9D UDMyX1JFR1NfTUFTSyk7CisgICAgICAgIGluamVjdF91bmRlZl9leGNlcHRpb24ocmVncywgaHNy KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFkdmFuY2VfcGMocmVncywgaHNyKTsK K30KKwordm9pZCBkb19jcDE0XzY0KHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzLCBjb25zdCB1 bmlvbiBoc3IgaHNyKQoreworICAgIGNvbnN0IHN0cnVjdCBoc3JfY3A2NCBjcDY0ID0gaHNyLmNw NjQ7CisKKyAgICBpZiAoICFjaGVja19jb25kaXRpb25hbF9pbnN0cihyZWdzLCBoc3IpICkKKyAg ICB7CisgICAgICAgIGFkdmFuY2VfcGMocmVncywgaHNyKTsKKyAgICAgICAgcmV0dXJuOworICAg IH0KKworICAgIC8qCisgICAgICogQ1BUUl9FTDIuVFRBCisgICAgICoKKyAgICAgKiBBUk12NyAo RERJIDA0MDZDLmIpOiBCMS4xNC4xNgorICAgICAqIEFSTXY4IChEREkgMDQ4N0EuZCk6IEQxLTE1 MDcgVGFibGUgRDEtNTQKKyAgICAgKgorICAgICAqICAtIEFsbCBpbXBsZW1lbnRlZCB0cmFjZSBy ZWdpc3RlcnMuCisgICAgICoKKyAgICAgKiBNRENSX0VMMi5URFJBCisgICAgICoKKyAgICAgKiBB Uk12NyAoRERJIDA0MDZDLmIpOiBCMS4xNC4xNQorICAgICAqIEFSTXY4IChEREkgMDQ4N0EuZCk6 IEQxLTE1MDggVGFibGUgRDEtNTcKKyAgICAgKgorICAgICAqIFVuaGFuZGxlZDoKKyAgICAgKiAg ICBEQkdEUkFSICg2NC1iaXQgYWNjZXNzZXMpCisgICAgICogICAgREJHRFNBUiAoNjQtYml0IGFj Y2Vzc2VzKQorICAgICAqCisgICAgICogQW5kIGFsbCBvdGhlciB1bmtub3duIHJlZ2lzdGVycy4K KyAgICAgKi8KKyAgICBnZHByaW50ayhYRU5MT0dfRVJSLAorICAgICAgICAgICAgICIlcyBwMTQs ICVkLCByJWQsIHIlZCwgY3IlZCBAIDB4JSJQUklyZWdpc3RlciJcbiIsCisgICAgICAgICAgICAg Y3A2NC5yZWFkID8gIm1ycmMiIDogIm1jcnIiLAorICAgICAgICAgICAgIGNwNjQub3AxLCBjcDY0 LnJlZzEsIGNwNjQucmVnMiwgY3A2NC5jcm0sIHJlZ3MtPnBjKTsKKyAgICBnZHByaW50ayhYRU5M T0dfRVJSLCAidW5oYW5kbGVkIDY0LWJpdCBDUDE0IGFjY2VzcyAlI3hcbiIsCisgICAgICAgICAg ICAgaHNyLmJpdHMgJiBIU1JfQ1A2NF9SRUdTX01BU0spOworICAgIGluamVjdF91bmRlZl9leGNl cHRpb24ocmVncywgaHNyKTsKK30KKwordm9pZCBkb19jcDE0X2RiZyhzdHJ1Y3QgY3B1X3VzZXJf cmVncyAqcmVncywgY29uc3QgdW5pb24gaHNyIGhzcikKK3sKKyAgICBzdHJ1Y3QgaHNyX2NwNjQg Y3A2NCA9IGhzci5jcDY0OworCisgICAgaWYgKCAhY2hlY2tfY29uZGl0aW9uYWxfaW5zdHIocmVn cywgaHNyKSApCisgICAgeworICAgICAgICBhZHZhbmNlX3BjKHJlZ3MsIGhzcik7CisgICAgICAg IHJldHVybjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIE1EQ1JfRUwyLlRET1NBCisgICAgICoK KyAgICAgKiBBUk12NyAoRERJIDA0MDZDLmIpOiBCMS4xNC4xNQorICAgICAqIEFSTXY4IChEREkg MDQ4N0EuZCk6IEQxLTE1MDkgVGFibGUgRDEtNTgKKyAgICAgKgorICAgICAqIFVuaGFuZGxlZDoK KyAgICAgKiAgICBEQkdEVFJUWGludAorICAgICAqICAgIERCR0RUUlJYaW50CisgICAgICoKKyAg ICAgKiBBbmQgYWxsIG90aGVyIHVua25vd24gcmVnaXN0ZXJzLgorICAgICAqLworICAgIGdkcHJp bnRrKFhFTkxPR19FUlIsCisgICAgICAgICAgICAgIiVzIHAxNCwgJWQsIHIlZCwgciVkLCBjciVk IEAgMHglIlBSSXJlZ2lzdGVyIlxuIiwKKyAgICAgICAgICAgICBjcDY0LnJlYWQgPyAibXJyYyIg OiAibWNyciIsCisgICAgICAgICAgICAgY3A2NC5vcDEsIGNwNjQucmVnMSwgY3A2NC5yZWcyLCBj cDY0LmNybSwgcmVncy0+cGMpOworICAgIGdkcHJpbnRrKFhFTkxPR19FUlIsICJ1bmhhbmRsZWQg NjQtYml0IENQMTQgREJHIGFjY2VzcyAlI3hcbiIsCisgICAgICAgICAgICAgaHNyLmJpdHMgJiBI U1JfQ1A2NF9SRUdTX01BU0spOworCisgICAgaW5qZWN0X3VuZGVmX2V4Y2VwdGlvbihyZWdzLCBo c3IpOworfQorCit2b2lkIGRvX2NwKHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzLCBjb25zdCB1 bmlvbiBoc3IgaHNyKQoreworICAgIGNvbnN0IHN0cnVjdCBoc3JfY3AgY3AgPSBoc3IuY3A7CisK KyAgICBpZiAoICFjaGVja19jb25kaXRpb25hbF9pbnN0cihyZWdzLCBoc3IpICkKKyAgICB7Cisg ICAgICAgIGFkdmFuY2VfcGMocmVncywgaHNyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor ICAgIEFTU0VSVCghY3AudGFzKTsgLyogV2UgZG9uJ3QgdHJhcCBTSU1EIGluc3RydWN0aW9uICov CisgICAgZ2RwcmludGsoWEVOTE9HX0VSUiwgInVuaGFuZGxlZCBDUCVkIGFjY2Vzc1xuIiwgY3Au Y29wcm9jKTsKKyAgICBpbmplY3RfdW5kZWZfZXhjZXB0aW9uKHJlZ3MsIGhzcik7Cit9CisKKy8q CisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWZpbGUtc3R5bGU6ICJCU0Qi CisgKiBjLWJhc2ljLW9mZnNldDogNAorICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6 CisgKi8KZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL2FzbS1hcm0vdHJhcHMuaCBiL3hlbi9pbmNs dWRlL2FzbS1hcm0vdHJhcHMuaAppbmRleCA2ZDk5ZDIyOGU4Li41M2QzODZkOGU1IDEwMDY0NAot LS0gYS94ZW4vaW5jbHVkZS9hc20tYXJtL3RyYXBzLmgKKysrIGIveGVuL2luY2x1ZGUvYXNtLWFy bS90cmFwcy5oCkBAIC0yNCw2ICsyNCwxNCBAQCB2b2lkIGhhbmRsZV93b193aShzdHJ1Y3QgY3B1 X3VzZXJfcmVncyAqcmVncywgaW50IHJlZ2lkeCwgYm9vbCByZWFkLAogdm9pZCBoYW5kbGVfcm9f cmF6KHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzLCBpbnQgcmVnaWR4LCBib29sIHJlYWQsCiAg ICAgICAgICAgICAgICAgICAgY29uc3QgdW5pb24gaHNyIGhzciwgaW50IG1pbl9lbCk7CiAKKy8q IENvLXByb2Nlc3NvciByZWdpc3RlcnMgZW11bGF0aW9uIChzZWUgYXJjaC9hcm0vdmNwcmVnLmMp LiAqLwordm9pZCBkb19jcDE1XzMyKHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzLCBjb25zdCB1 bmlvbiBoc3IgaHNyKTsKK3ZvaWQgZG9fY3AxNV82NChzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVn cywgY29uc3QgdW5pb24gaHNyIGhzcik7Cit2b2lkIGRvX2NwMTRfMzIoc3RydWN0IGNwdV91c2Vy X3JlZ3MgKnJlZ3MsIGNvbnN0IHVuaW9uIGhzciBoc3IpOwordm9pZCBkb19jcDE0XzY0KHN0cnVj dCBjcHVfdXNlcl9yZWdzICpyZWdzLCBjb25zdCB1bmlvbiBoc3IgaHNyKTsKK3ZvaWQgZG9fY3Ax NF9kYmcoc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MsIGNvbnN0IHVuaW9uIGhzciBoc3IpOwor dm9pZCBkb19jcChzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncywgY29uc3QgdW5pb24gaHNyIGhz cik7CisKICNlbmRpZiAvKiBfX0FTTV9BUk1fVFJBUFNfXyAqLwogLyoKICAqIExvY2FsIHZhcmlh YmxlczoKLS0gCjIuMTEuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcK aHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=