From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: [PATCH RFC 4/4] tmem: Move bulk of tmem control functions in its own file. Date: Mon, 16 May 2016 11:58:31 -0400 Message-ID: <1463414311-10677-5-git-send-email-konrad.wilk@oracle.com> References: <1463414311-10677-1-git-send-email-konrad.wilk@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta14.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1b2Kv1-0003sO-78 for xen-devel@lists.xenproject.org; Mon, 16 May 2016 15:58:55 +0000 In-Reply-To: <1463414311-10677-1-git-send-email-konrad.wilk@oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: andrew.cooper3@citrix.com, wei.liu2@citrix.com, jbeulich@suse.com, Konrad Rzeszutek Wilk List-Id: xen-devel@lists.xenproject.org VGhlIGZ1bmN0aW9uYWxpdHkgdGhhdCBpcyByZWxhdGVkIHRvIG1pZ3JhdGlvbiBpcyBsZWZ0IGlu c2lkZQp0bWVtLmMuIFRoZSBsaXN0IG9mIGNvbnRyb2wgb3BlcmF0aW9ucyB0aGF0IGFyZSBpbiB0 bWVtX2NvbnRyb2wKd2l0aCBYRU5fU1lTQ1RMX1RNRU1fT1AgcHJlZml4IGFyZToKCkRFU1RST1ks IEZMVVNILCBGUkVFWkUsIFRIQVcsIExJU1QsIFFVRVJZX0ZSRUVBQkxFX01CClNBVkVfR0VUX0NM SUVOVF9DQVAsIFNBVkVfR0VUX0NMSUVOVF9GTEFHUywKU0FWRV9HRVRfQ0xJRU5UX1dFSUdIVCwg U0FWRV9HRVRfTUFYUE9PTFMsClNBVkVfR0VUX1BPT0xfRkxBR1MsIFNBVkVfR0VUX1BPT0xfTlBB R0VTClNBVkVfR0VUX1BPT0xfVVVJRCwgU0FWRV9HRVRfVkVSU0lPTgpTRVRfQ0FQLCBTRVRfQ09N UFJFU1MsIFNFVF9XRUlHSFQKClNpZ25lZC1vZmYtYnk6IEtvbnJhZCBSemVzenV0ZWsgV2lsayA8 a29ucmFkLndpbGtAb3JhY2xlLmNvbT4KLS0tCiB4ZW4vY29tbW9uL01ha2VmaWxlICAgICAgICAg ICAgfCAgIDIgKy0KIHhlbi9jb21tb24vdG1lbS5jICAgICAgICAgICAgICB8IDUxNCArLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogeGVuL2NvbW1vbi90bWVtX2NvbnRy b2wuYyAgICAgIHwgNDQzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB4ZW4v aW5jbHVkZS94ZW4vdG1lbV9jb250cm9sLmggfCAgMzMgKysrCiB4ZW4vaW5jbHVkZS94ZW4vdG1l bV94ZW4uaCAgICAgfCAxMjggKysrKysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCA2MDkgaW5zZXJ0 aW9ucygrKSwgNTExIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9jb21tb24v dG1lbV9jb250cm9sLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vaW5jbHVkZS94ZW4vdG1lbV9j b250cm9sLmgKCmRpZmYgLS1naXQgYS94ZW4vY29tbW9uL01ha2VmaWxlIGIveGVuL2NvbW1vbi9N YWtlZmlsZQppbmRleCBhZmQ4NGI2Li41MzdiZGZkIDEwMDY0NAotLS0gYS94ZW4vY29tbW9uL01h a2VmaWxlCisrKyBiL3hlbi9jb21tb24vTWFrZWZpbGUKQEAgLTY4LDcgKzY4LDcgQEAgb2JqLSQo Y3Jhc2hfZGVidWcpICs9IGdkYnN0dWIubwogCiBvYmotJChDT05GSUdfQ09NUEFUKSArPSAkKGFk ZHByZWZpeCBjb21wYXQvLGRvbWFpbi5vIGtlcm5lbC5vIG1lbW9yeS5vIG11bHRpY2FsbC5vIHhs YXQubykKIAotdG1lbS15IDo9IHRtZW0ubyB0bWVtX3hlbi5vCit0bWVtLXkgOj0gdG1lbS5vIHRt ZW1feGVuLm8gdG1lbV9jb250cm9sLm8KIHRtZW0tJChDT05GSUdfQ09NUEFUKSArPSBjb21wYXQv dG1lbV94ZW4ubwogb2JqLSQoQ09ORklHX1RNRU0pICs9ICQodG1lbS15KQogCmRpZmYgLS1naXQg YS94ZW4vY29tbW9uL3RtZW0uYyBiL3hlbi9jb21tb24vdG1lbS5jCmluZGV4IDcwY2I2MWUuLmVm YWFmYzQgMTAwNjQ0Ci0tLSBhL3hlbi9jb21tb24vdG1lbS5jCisrKyBiL3hlbi9jb21tb24vdG1l bS5jCkBAIC0yNyw1MCArMjcsNyBAQAogCiAjZGVmaW5lIFRNRU1fU1BFQ19WRVJTSU9OIDEKIAot LyogR2xvYmFsIHN0YXRpc3RpY3MgKG5vbmUgbmVlZCB0byBiZSBsb2NrZWQpLiAqLwotc3RydWN0 IHRtZW1fc3RhdGlzdGljcyB7Ci0gICAgdW5zaWduZWQgbG9uZyB0b3RhbF90bWVtX29wczsKLSAg ICB1bnNpZ25lZCBsb25nIGVycm9yZWRfdG1lbV9vcHM7Ci0gICAgdW5zaWduZWQgbG9uZyB0b3Rh bF9mbHVzaF9wb29sOwotICAgIHVuc2lnbmVkIGxvbmcgYWxsb2NfZmFpbGVkOwotICAgIHVuc2ln bmVkIGxvbmcgYWxsb2NfcGFnZV9mYWlsZWQ7Ci0gICAgdW5zaWduZWQgbG9uZyBldmljdGVkX3Bn czsKLSAgICB1bnNpZ25lZCBsb25nIGV2aWN0X2F0dGVtcHRzOwotICAgIHVuc2lnbmVkIGxvbmcg cmVsaW5xX3BnczsKLSAgICB1bnNpZ25lZCBsb25nIHJlbGlucV9hdHRlbXB0czsKLSAgICB1bnNp Z25lZCBsb25nIG1heF9ldmljdHNfcGVyX3JlbGlucTsKLSAgICB1bnNpZ25lZCBsb25nIGxvd19v bl9tZW1vcnk7Ci0gICAgdW5zaWduZWQgbG9uZyBkZWR1cGVkX3B1dHM7Ci0gICAgdW5zaWduZWQg bG9uZyB0b3RfZ29vZF9lcGhfcHV0czsKLSAgICBpbnQgZ2xvYmFsX29ial9jb3VudF9tYXg7Ci0g ICAgaW50IGdsb2JhbF9wZ3BfY291bnRfbWF4OwotICAgIGludCBnbG9iYWxfcGNkX2NvdW50X21h eDsKLSAgICBpbnQgZ2xvYmFsX3BhZ2VfY291bnRfbWF4OwotICAgIGludCBnbG9iYWxfcnRyZWVf bm9kZV9jb3VudF9tYXg7Ci0gICAgbG9uZyBnbG9iYWxfZXBoX2NvdW50X21heDsKLSAgICB1bnNp Z25lZCBsb25nIGZhaWxlZF9jb3BpZXM7Ci0gICAgdW5zaWduZWQgbG9uZyBwY2RfdG90X3R6ZV9z aXplOwotICAgIHVuc2lnbmVkIGxvbmcgcGNkX3RvdF9jc2l6ZTsKLSAgICAvKiBHbG9iYWwgY291 bnRlcnMgKHNob3VsZCB1c2UgbG9uZ19hdG9taWNfdCBhY2Nlc3MpLiAqLwotICAgIGF0b21pY190 IGdsb2JhbF9vYmpfY291bnQ7Ci0gICAgYXRvbWljX3QgZ2xvYmFsX3BncF9jb3VudDsKLSAgICBh dG9taWNfdCBnbG9iYWxfcGNkX2NvdW50OwotICAgIGF0b21pY190IGdsb2JhbF9wYWdlX2NvdW50 OwotICAgIGF0b21pY190IGdsb2JhbF9ydHJlZV9ub2RlX2NvdW50OwotfTsKLQotI2RlZmluZSBh dG9taWNfaW5jX2FuZF9tYXgoX2MpIGRvIHsgXAotICAgIGF0b21pY19pbmMoJnRtZW1fc3RhdHMu X2MpOyBcCi0gICAgaWYgKCBfYXRvbWljX3JlYWQodG1lbV9zdGF0cy5fYykgPiB0bWVtX3N0YXRz Ll9jIyNfbWF4ICkgXAotICAgICAgICB0bWVtX3N0YXRzLl9jIyNfbWF4ID0gX2F0b21pY19yZWFk KHRtZW1fc3RhdHMuX2MpOyBcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIGF0b21pY19kZWNfYW5k X2Fzc2VydChfYykgZG8geyBcCi0gICAgYXRvbWljX2RlYygmdG1lbV9zdGF0cy5fYyk7IFwKLSAg ICBBU1NFUlQoX2F0b21pY19yZWFkKHRtZW1fc3RhdHMuX2MpID49IDApOyBcCi19IHdoaWxlICgw KQotCi1zdGF0aWMgc3RydWN0IHRtZW1fc3RhdGlzdGljcyB0bWVtX3N0YXRzID0geworc3RydWN0 IHRtZW1fc3RhdGlzdGljcyB0bWVtX3N0YXRzID0gewogICAgIC5nbG9iYWxfb2JqX2NvdW50ID0g QVRPTUlDX0lOSVQoMCksCiAgICAgLmdsb2JhbF9wZ3BfY291bnQgPSBBVE9NSUNfSU5JVCgwKSwK ICAgICAuZ2xvYmFsX3BjZF9jb3VudCA9IEFUT01JQ19JTklUKDApLApAQCAtODAsODEgKzM3LDYg QEAgc3RhdGljIHN0cnVjdCB0bWVtX3N0YXRpc3RpY3MgdG1lbV9zdGF0cyA9IHsKIAogLyoqKioq KioqKioqKiBDT1JFIERBVEEgU1RSVUNUVVJFUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCiAKLSNkZWZpbmUgTUFYX1BPT0xTX1BFUl9ET01BSU4gMTYKLSNkZWZpbmUgTUFY X0dMT0JBTF9TSEFSRURfUE9PTFMgIDE2Ci0KLXN0cnVjdCB0bWVtX3Bvb2w7Ci1zdHJ1Y3QgdG1l bV9wYWdlX2Rlc2NyaXB0b3I7Ci1zdHJ1Y3QgdG1lbV9wYWdlX2NvbnRlbnRfZGVzY3JpcHRvcjsK LXN0cnVjdCBjbGllbnQgewotICAgIHN0cnVjdCBsaXN0X2hlYWQgY2xpZW50X2xpc3Q7Ci0gICAg c3RydWN0IHRtZW1fcG9vbCAqcG9vbHNbTUFYX1BPT0xTX1BFUl9ET01BSU5dOwotICAgIHN0cnVj dCBkb21haW4gKmRvbWFpbjsKLSAgICBzdHJ1Y3QgeG1lbV9wb29sICpwZXJzaXN0ZW50X3Bvb2w7 Ci0gICAgc3RydWN0IGxpc3RfaGVhZCBlcGhlbWVyYWxfcGFnZV9saXN0OwotICAgIGxvbmcgZXBo X2NvdW50LCBlcGhfY291bnRfbWF4OwotICAgIGRvbWlkX3QgY2xpX2lkOwotICAgIHVpbnQzMl90 IHdlaWdodDsKLSAgICB1aW50MzJfdCBjYXA7Ci0gICAgYm9vbF90IGNvbXByZXNzOwotICAgIGJv b2xfdCBmcm96ZW47Ci0gICAgYm9vbF90IHNoYXJlZF9hdXRoX3JlcXVpcmVkOwotICAgIC8qIEZv ciBzYXZlL3Jlc3RvcmUvbWlncmF0aW9uLiAqLwotICAgIGJvb2xfdCBsaXZlX21pZ3JhdGluZzsK LSAgICBib29sX3Qgd2FzX2Zyb3plbjsKLSAgICBzdHJ1Y3QgbGlzdF9oZWFkIHBlcnNpc3RlbnRf aW52YWxpZGF0ZWRfbGlzdDsKLSAgICBzdHJ1Y3QgdG1lbV9wYWdlX2Rlc2NyaXB0b3IgKmN1cl9w Z3A7Ci0gICAgLyogU3RhdGlzdGljcyBjb2xsZWN0aW9uLiAqLwotICAgIHVuc2lnbmVkIGxvbmcg Y29tcHJlc3NfcG9vciwgY29tcHJlc3Nfbm9tZW07Ci0gICAgdW5zaWduZWQgbG9uZyBjb21wcmVz c2VkX3BhZ2VzOwotICAgIHVpbnQ2NF90IGNvbXByZXNzZWRfc3VtX3NpemU7Ci0gICAgdWludDY0 X3QgdG90YWxfY3ljbGVzOwotICAgIHVuc2lnbmVkIGxvbmcgc3VjY19wZXJzX3B1dHMsIHN1Y2Nf ZXBoX2dldHMsIHN1Y2NfcGVyc19nZXRzOwotICAgIC8qIFNoYXJlZCBwb29sIGF1dGhlbnRpY2F0 aW9uLiAqLwotICAgIHVpbnQ2NF90IHNoYXJlZF9hdXRoX3V1aWRbTUFYX0dMT0JBTF9TSEFSRURf UE9PTFNdWzJdOwotfTsKLQotc3RydWN0IHNoYXJlX2xpc3QgewotICAgIHN0cnVjdCBsaXN0X2hl YWQgc2hhcmVfbGlzdDsKLSAgICBzdHJ1Y3QgY2xpZW50ICpjbGllbnQ7Ci19OwotCi0jZGVmaW5l IFBPT0xfUEFHRVNISUZUIChQQUdFX1NISUZUIC0gMTIpCi0jZGVmaW5lIE9CSl9IQVNIX0JVQ0tF VFMgMjU2IC8qIE11c3QgYmUgcG93ZXIgb2YgdHdvLiAqLwotI2RlZmluZSBPQkpfSEFTSF9CVUNL RVRTX01BU0sgKE9CSl9IQVNIX0JVQ0tFVFMtMSkKLQotc3RydWN0IHRtZW1fcG9vbCB7Ci0gICAg Ym9vbF90IHNoYXJlZDsKLSAgICBib29sX3QgcGVyc2lzdGVudDsKLSAgICBib29sX3QgaXNfZHlp bmc7Ci0gICAgc3RydWN0IGNsaWVudCAqY2xpZW50OwotICAgIHVpbnQ2NF90IHV1aWRbMl07IC8q IDAgZm9yIHByaXZhdGUsIG5vbi16ZXJvIGZvciBzaGFyZWQuICovCi0gICAgdWludDMyX3QgcG9v bF9pZDsKLSAgICByd2xvY2tfdCBwb29sX3J3bG9jazsKLSAgICBzdHJ1Y3QgcmJfcm9vdCBvYmpf cmJfcm9vdFtPQkpfSEFTSF9CVUNLRVRTXTsgLyogUHJvdGVjdGVkIGJ5IHBvb2xfcndsb2NrLiAq LwotICAgIHN0cnVjdCBsaXN0X2hlYWQgc2hhcmVfbGlzdDsgLyogVmFsaWQgaWYgc2hhcmVkLiAq LwotICAgIGludCBzaGFyZWRfY291bnQ7IC8qIFZhbGlkIGlmIHNoYXJlZC4gKi8KLSAgICAvKiBG b3Igc2F2ZS9yZXN0b3JlL21pZ3JhdGlvbi4gKi8KLSAgICBzdHJ1Y3QgbGlzdF9oZWFkIHBlcnNp c3RlbnRfcGFnZV9saXN0OwotICAgIHN0cnVjdCB0bWVtX3BhZ2VfZGVzY3JpcHRvciAqY3VyX3Bn cDsKLSAgICAvKiBTdGF0aXN0aWNzIGNvbGxlY3Rpb24uICovCi0gICAgYXRvbWljX3QgcGdwX2Nv dW50OwotICAgIGludCBwZ3BfY291bnRfbWF4OwotICAgIGxvbmcgb2JqX2NvdW50OyAgLyogQXRv bWljaXR5IGRlcGVuZHMgb24gcG9vbF9yd2xvY2sgaGVsZCBmb3Igd3JpdGUuICovCi0gICAgbG9u ZyBvYmpfY291bnRfbWF4OwotICAgIHVuc2lnbmVkIGxvbmcgb2Jqbm9kZV9jb3VudCwgb2Jqbm9k ZV9jb3VudF9tYXg7Ci0gICAgdWludDY0X3Qgc3VtX2xpZmVfY3ljbGVzOwotICAgIHVpbnQ2NF90 IHN1bV9ldmljdGVkX2N5Y2xlczsKLSAgICB1bnNpZ25lZCBsb25nIHB1dHMsIGdvb2RfcHV0cywg bm9fbWVtX3B1dHM7Ci0gICAgdW5zaWduZWQgbG9uZyBkdXBfcHV0c19mbHVzaGVkLCBkdXBfcHV0 c19yZXBsYWNlZDsKLSAgICB1bnNpZ25lZCBsb25nIGdldHMsIGZvdW5kX2dldHM7Ci0gICAgdW5z aWduZWQgbG9uZyBmbHVzaHMsIGZsdXNoc19mb3VuZDsKLSAgICB1bnNpZ25lZCBsb25nIGZsdXNo X29ianMsIGZsdXNoX29ianNfZm91bmQ7Ci19OwotCi0jZGVmaW5lIGlzX3BlcnNpc3RlbnQoX3Ap ICAoX3AtPnBlcnNpc3RlbnQpCi0jZGVmaW5lIGlzX3NoYXJlZChfcCkgICAgICAoX3AtPnNoYXJl ZCkKLQogc3RydWN0IHRtZW1fb2JqZWN0X3Jvb3QgewogICAgIHN0cnVjdCB4ZW5fdG1lbV9vaWQg b2lkOwogICAgIHN0cnVjdCByYl9ub2RlIHJiX3RyZWVfbm9kZTsgLyogUHJvdGVjdGVkIGJ5IHBv b2wtPnBvb2xfcndsb2NrLiAqLwpAQCAtMjM4LDE0ICsxMjAsNyBAQCBzdGF0aWMgREVGSU5FX1NQ SU5MT0NLKHBlcnNfbGlzdHNfc3BpbmxvY2spOwogI2RlZmluZSBBU1NFUlRfU1BJTkxPQ0soX2wp IEFTU0VSVChzcGluX2lzX2xvY2tlZChfbCkpCiAjZGVmaW5lIEFTU0VSVF9XUklURUxPQ0soX2wp IEFTU0VSVChyd19pc193cml0ZV9sb2NrZWQoX2wpKQogCi1zdHJ1Y3QgdG1lbV9nbG9iYWwgewot ICAgIHN0cnVjdCBsaXN0X2hlYWQgZXBoZW1lcmFsX3BhZ2VfbGlzdDsgIC8qIEFsbCBwYWdlcyBp biBlcGhlbWVyYWwgcG9vbHMuICovCi0gICAgc3RydWN0IGxpc3RfaGVhZCBjbGllbnRfbGlzdDsK LSAgICBzdHJ1Y3QgdG1lbV9wb29sICpzaGFyZWRfcG9vbHNbTUFYX0dMT0JBTF9TSEFSRURfUE9P TFNdOwotICAgIGJvb2xfdCBzaGFyZWRfYXV0aDsKICAgICBhdG9taWNfdCBjbGllbnRfd2VpZ2h0 X3RvdGFsOwotICAgIGxvbmcgZXBoX2NvdW50OyAgLyogQXRvbWljaXR5IGRlcGVuZHMgb24gZXBo X2xpc3RzX3NwaW5sb2NrLiAqLwotfTsKIAogc3RydWN0IHRtZW1fZ2xvYmFsIHRtZW1fZ2xvYmFs ID0gewogICAgIC5lcGhlbWVyYWxfcGFnZV9saXN0ID0gTElTVF9IRUFEX0lOSVQodG1lbV9nbG9i YWwuZXBoZW1lcmFsX3BhZ2VfbGlzdCksCkBAIC0xMzA3LDcgKzExODIsNyBAQCBvYmpfdW5sb2Nr OgogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHRtZW1fZXZpY3Qodm9pZCkKK2ludCB0 bWVtX2V2aWN0KHZvaWQpCiB7CiAgICAgc3RydWN0IGNsaWVudCAqY2xpZW50ID0gY3VycmVudC0+ ZG9tYWluLT50bWVtX2NsaWVudDsKICAgICBzdHJ1Y3QgdG1lbV9wYWdlX2Rlc2NyaXB0b3IgKnBn cCA9IE5VTEwsICpwZ3BfZGVsOwpAQCAtMTM4MCwzMSArMTI1NSw2IEBAIG91dDoKICAgICByZXR1 cm4gcmV0OwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyB0bWVtX2ZsdXNoX25wYWdlcyh1bnNp Z25lZCBsb25nIG4pCi17Ci0gICAgdW5zaWduZWQgbG9uZyBhdmFpbF9wYWdlcyA9IDA7Ci0KLSAg ICB3aGlsZSAoIChhdmFpbF9wYWdlcyA9IHRtZW1fcGFnZV9saXN0X3BhZ2VzKSA8IG4gKQotICAg IHsKLSAgICAgICAgaWYgKCAgIXRtZW1fZXZpY3QoKSApCi0gICAgICAgICAgICBicmVhazsKLSAg ICB9Ci0gICAgaWYgKCBhdmFpbF9wYWdlcyApCi0gICAgewotICAgICAgICBzcGluX2xvY2soJnRt ZW1fcGFnZV9saXN0X2xvY2spOwotICAgICAgICB3aGlsZSAoICFwYWdlX2xpc3RfZW1wdHkoJnRt ZW1fcGFnZV9saXN0KSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cnVjdCBwYWdlX2luZm8g KnBnID0gcGFnZV9saXN0X3JlbW92ZV9oZWFkKCZ0bWVtX3BhZ2VfbGlzdCk7Ci0gICAgICAgICAg ICBzY3J1Yl9vbmVfcGFnZShwZyk7Ci0gICAgICAgICAgICB0bWVtX3BhZ2VfbGlzdF9wYWdlcy0t OwotICAgICAgICAgICAgZnJlZV9kb21oZWFwX3BhZ2UocGcpOwotICAgICAgICB9Ci0gICAgICAg IEFTU0VSVCh0bWVtX3BhZ2VfbGlzdF9wYWdlcyA9PSAwKTsKLSAgICAgICAgSU5JVF9QQUdFX0xJ U1RfSEVBRCgmdG1lbV9wYWdlX2xpc3QpOwotICAgICAgICBzcGluX3VubG9jaygmdG1lbV9wYWdl X2xpc3RfbG9jayk7Ci0gICAgfQotICAgIHJldHVybiBhdmFpbF9wYWdlczsKLX0KIAogLyoKICAq IFVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucyAoZS5nLiBpZiBlYWNoIGNsaWVudCBpcyBwdXR0aW5n IHBhZ2VzIGZvciBleGFjdGx5CkBAIC0yMDM5LDI4NSArMTg4OSw2IEBAIGZhaWw6CiAKIC8qKioq KioqKioqKiogVE1FTSBDT05UUk9MIE9QRVJBVElPTlMgKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLwogCi0vKiBGcmVlemUvdGhhdyBhbGwgcG9vbHMgYmVsb25naW5nIHRvIGNs aWVudCBjbGlfaWQgKGFsbCBkb21haW5zIGlmIC0xKS4gKi8KLXN0YXRpYyBpbnQgdG1lbWNfZnJl ZXplX3Bvb2xzKGRvbWlkX3QgY2xpX2lkLCBpbnQgYXJnKQotewotICAgIHN0cnVjdCBjbGllbnQg KmNsaWVudDsKLSAgICBib29sX3QgZnJlZXplID0gKGFyZyA9PSBYRU5fU1lTQ1RMX1RNRU1fT1Bf RlJFRVpFKSA/IDEgOiAwOwotICAgIGJvb2xfdCBkZXN0cm95ID0gKGFyZyA9PSBYRU5fU1lTQ1RM X1RNRU1fT1BfREVTVFJPWSkgPyAxIDogMDsKLSAgICBjaGFyICpzOwotCi0gICAgcyA9IGRlc3Ry b3kgPyAiZGVzdHJveWVkIiA6ICggZnJlZXplID8gImZyb3plbiIgOiAidGhhd2VkIiApOwotICAg IGlmICggY2xpX2lkID09IFRNRU1fQ0xJX0lEX05VTEwgKQotICAgIHsKLSAgICAgICAgbGlzdF9m b3JfZWFjaF9lbnRyeShjbGllbnQsJnRtZW1fZ2xvYmFsLmNsaWVudF9saXN0LGNsaWVudF9saXN0 KQotICAgICAgICAgICAgY2xpZW50LT5mcm96ZW4gPSBmcmVlemU7Ci0gICAgICAgIHRtZW1fY2xp ZW50X2luZm8oInRtZW06IGFsbCBwb29scyAlcyBmb3IgYWxsICVzc1xuIiwgcywgdG1lbV9jbGll bnRfc3RyKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKCAoY2xpZW50ID0g dG1lbV9jbGllbnRfZnJvbV9jbGlfaWQoY2xpX2lkKSkgPT0gTlVMTCkKLSAgICAgICAgICAgIHJl dHVybiAtMTsKLSAgICAgICAgY2xpZW50LT5mcm96ZW4gPSBmcmVlemU7Ci0gICAgICAgIHRtZW1f Y2xpZW50X2luZm8oInRtZW06IGFsbCBwb29scyAlcyBmb3IgJXM9JWRcbiIsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgcywgdG1lbV9jbGlfaWRfc3RyLCBjbGlfaWQpOwotICAgIH0KLSAgICBy ZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB0bWVtY19mbHVzaF9tZW0oZG9taWRfdCBjbGlfaWQs IHVpbnQzMl90IGtiKQotewotICAgIHVpbnQzMl90IG5wYWdlcywgZmx1c2hlZF9wYWdlcywgZmx1 c2hlZF9rYjsKLQotICAgIGlmICggY2xpX2lkICE9IFRNRU1fQ0xJX0lEX05VTEwgKQotICAgIHsK LSAgICAgICAgdG1lbV9jbGllbnRfd2FybigidG1lbTogJXMtc3BlY2lmaWMgZmx1c2ggbm90IHN1 cHBvcnRlZCB5ZXQsIHVzZSAtLWFsbFxuIiwKLSAgICAgICAgICAgdG1lbV9jbGllbnRfc3RyKTsK LSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICAvKiBDb252ZXJ0IGtiIHRvIHBhZ2VzLCBy b3VuZGluZyB1cCBpZiBuZWNlc3NhcnkuICovCi0gICAgbnBhZ2VzID0gKGtiICsgKCgxIDw8IChQ QUdFX1NISUZULTEwKSktMSkpID4+IChQQUdFX1NISUZULTEwKTsKLSAgICBmbHVzaGVkX3BhZ2Vz ID0gdG1lbV9mbHVzaF9ucGFnZXMobnBhZ2VzKTsKLSAgICBmbHVzaGVkX2tiID0gZmx1c2hlZF9w YWdlcyA8PCAoUEFHRV9TSElGVC0xMCk7Ci0gICAgcmV0dXJuIGZsdXNoZWRfa2I7Ci19Ci0KLS8q Ci0gKiBUaGVzZSB0bWVtY19saXN0KiByb3V0aW5lcyBvdXRwdXQgbG90cyBvZiBzdGF0cyBpbiBh IGZvcm1hdCB0aGF0IGlzCi0gKiAgaW50ZW5kZWQgdG8gYmUgcHJvZ3JhbS1wYXJzZWFibGUsIG5v dCBodW1hbi1yZWFkYWJsZS4gRnVydGhlciwgYnkKLSAqICB0eWluZyBlYWNoIGdyb3VwIG9mIHN0 YXRzIHRvIGEgbGluZSBmb3JtYXQgaW5kaWNhdG9yIChlLmcuIEc9IGZvcgotICogIGdsb2JhbCBz dGF0cykgYW5kIGVhY2ggaW5kaXZpZHVhbCBzdGF0IHRvIGEgdHdvLWxldHRlciBzcGVjaWZpZXIK LSAqICAoZS5nLiBFYzpubm5ubiBpbiB0aGUgRz0gbGluZSBzYXlzIHRoZXJlIGFyZSBubm5ubiBw YWdlcyBpbiB0aGUKLSAqICBnbG9iYWwgZXBoZW1lcmFsIHBvb2wpLCBpdCBzaG91bGQgYWxsb3cg dGhlIHN0YXRzIHJlcG9ydGVkIHRvIGJlCi0gKiAgZm9yd2FyZCBhbmQgYmFja3dhcmRzIGNvbXBh dGlibGUgYXMgdG1lbSBldm9sdmVzLgotICovCi0jZGVmaW5lIEJTSVpFIDEwMjQKLQotc3RhdGlj IGludCB0bWVtY19saXN0X2NsaWVudChzdHJ1Y3QgY2xpZW50ICpjLCB0bWVtX2NsaV92YV9wYXJh bV90IGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZiwgdWludDMyX3Qg bGVuLCBib29sX3QgdXNlX2xvbmcpCi17Ci0gICAgY2hhciBpbmZvW0JTSVpFXTsKLSAgICBpbnQg aSwgbiA9IDAsIHN1bSA9IDA7Ci0gICAgc3RydWN0IHRtZW1fcG9vbCAqcDsKLSAgICBib29sX3Qg czsKLQotICAgIG4gPSBzY25wcmludGYoaW5mbyxCU0laRSwiQz1DSTolZCx3dzolZCxjYTolZCxj bzolZCxmcjolZCwiCi0gICAgICAgICJUYzolIlBSSXU2NCIsR2U6JWxkLFBwOiVsZCxHcDolbGQl YyIsCi0gICAgICAgIGMtPmNsaV9pZCwgYy0+d2VpZ2h0LCBjLT5jYXAsIGMtPmNvbXByZXNzLCBj LT5mcm96ZW4sCi0gICAgICAgIGMtPnRvdGFsX2N5Y2xlcywgYy0+c3VjY19lcGhfZ2V0cywgYy0+ c3VjY19wZXJzX3B1dHMsIGMtPnN1Y2NfcGVyc19nZXRzLAotICAgICAgICB1c2VfbG9uZyA/ICcs JyA6ICdcbicpOwotICAgIGlmICh1c2VfbG9uZykKLSAgICAgICAgbiArPSBzY25wcmludGYoaW5m bytuLEJTSVpFLW4sCi0gICAgICAgICAgICAgIkVjOiVsZCxFbTolbGQsY3A6JWxkLGNiOiUiUFJJ ZDY0IixjbjolbGQsY206JWxkXG4iLAotICAgICAgICAgICAgIGMtPmVwaF9jb3VudCwgYy0+ZXBo X2NvdW50X21heCwKLSAgICAgICAgICAgICBjLT5jb21wcmVzc2VkX3BhZ2VzLCBjLT5jb21wcmVz c2VkX3N1bV9zaXplLAotICAgICAgICAgICAgIGMtPmNvbXByZXNzX3Bvb3IsIGMtPmNvbXByZXNz X25vbWVtKTsKLSAgICBpZiAoICFjb3B5X3RvX2d1ZXN0X29mZnNldChidWYsIG9mZiArIHN1bSwg aW5mbywgbiArIDEpICkKLSAgICAgICAgc3VtICs9IG47Ci0gICAgZm9yICggaSA9IDA7IGkgPCBN QVhfUE9PTFNfUEVSX0RPTUFJTjsgaSsrICkKLSAgICB7Ci0gICAgICAgIGlmICggKHAgPSBjLT5w b29sc1tpXSkgPT0gTlVMTCApCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcyA9IGlz X3NoYXJlZChwKTsKLSAgICAgICAgbiA9IHNjbnByaW50ZihpbmZvLEJTSVpFLCJQPUNJOiVkLFBJ OiVkLCIKLSAgICAgICAgICAgICAgICAgICAgICAiUFQ6JWMlYyxVMDolIlBSSXg2NCIsVTE6JSJQ Ukl4NjQiJWMiLAotICAgICAgICAgICAgICAgICAgICAgIGMtPmNsaV9pZCwgcC0+cG9vbF9pZCwK LSAgICAgICAgICAgICAgICAgICAgICBpc19wZXJzaXN0ZW50KHApID8gJ1AnIDogJ0UnLCBzID8g J1MnIDogJ1AnLAotICAgICAgICAgICAgICAgICAgICAgICh1aW50NjRfdCkocyA/IHAtPnV1aWRb MF0gOiAwKSwKLSAgICAgICAgICAgICAgICAgICAgICAodWludDY0X3QpKHMgPyBwLT51dWlkWzFd IDogMExMKSwKLSAgICAgICAgICAgICAgICAgICAgICB1c2VfbG9uZyA/ICcsJyA6ICdcbicpOwot ICAgICAgICBpZiAodXNlX2xvbmcpCi0gICAgICAgICAgICBuICs9IHNjbnByaW50ZihpbmZvK24s QlNJWkUtbiwKLSAgICAgICAgICAgICAiUGM6JWQsUG06JWQsT2M6JWxkLE9tOiVsZCxOYzolbHUs Tm06JWx1LCIKLSAgICAgICAgICAgICAicHM6JWx1LHB0OiVsdSxwZDolbHUscHI6JWx1LHB4OiVs dSxnczolbHUsZ3Q6JWx1LCIKLSAgICAgICAgICAgICAiZnM6JWx1LGZ0OiVsdSxvczolbHUsb3Q6 JWx1XG4iLAotICAgICAgICAgICAgIF9hdG9taWNfcmVhZChwLT5wZ3BfY291bnQpLCBwLT5wZ3Bf Y291bnRfbWF4LAotICAgICAgICAgICAgIHAtPm9ial9jb3VudCwgcC0+b2JqX2NvdW50X21heCwK LSAgICAgICAgICAgICBwLT5vYmpub2RlX2NvdW50LCBwLT5vYmpub2RlX2NvdW50X21heCwKLSAg ICAgICAgICAgICBwLT5nb29kX3B1dHMsIHAtPnB1dHMscC0+ZHVwX3B1dHNfZmx1c2hlZCwgcC0+ ZHVwX3B1dHNfcmVwbGFjZWQsCi0gICAgICAgICAgICAgcC0+bm9fbWVtX3B1dHMsCi0gICAgICAg ICAgICAgcC0+Zm91bmRfZ2V0cywgcC0+Z2V0cywKLSAgICAgICAgICAgICBwLT5mbHVzaHNfZm91 bmQsIHAtPmZsdXNocywgcC0+Zmx1c2hfb2Jqc19mb3VuZCwgcC0+Zmx1c2hfb2Jqcyk7Ci0gICAg ICAgIGlmICggc3VtICsgbiA+PSBsZW4gKQotICAgICAgICAgICAgcmV0dXJuIHN1bTsKLSAgICAg ICAgaWYgKCAhY29weV90b19ndWVzdF9vZmZzZXQoYnVmLCBvZmYgKyBzdW0sIGluZm8sIG4gKyAx KSApCi0gICAgICAgICAgICBzdW0gKz0gbjsKLSAgICB9Ci0gICAgcmV0dXJuIHN1bTsKLX0KLQot c3RhdGljIGludCB0bWVtY19saXN0X3NoYXJlZCh0bWVtX2NsaV92YV9wYXJhbV90IGJ1ZiwgaW50 IG9mZiwgdWludDMyX3QgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbF90 IHVzZV9sb25nKQotewotICAgIGNoYXIgaW5mb1tCU0laRV07Ci0gICAgaW50IGksIG4gPSAwLCBz dW0gPSAwOwotICAgIHN0cnVjdCB0bWVtX3Bvb2wgKnA7Ci0gICAgc3RydWN0IHNoYXJlX2xpc3Qg KnNsOwotCi0gICAgZm9yICggaSA9IDA7IGkgPCBNQVhfR0xPQkFMX1NIQVJFRF9QT09MUzsgaSsr ICkKLSAgICB7Ci0gICAgICAgIGlmICggKHAgPSB0bWVtX2dsb2JhbC5zaGFyZWRfcG9vbHNbaV0p ID09IE5VTEwgKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIG4gPSBzY25wcmludGYo aW5mbytuLEJTSVpFLW4sIlM9U0k6JWQsUFQ6JWMlYyxVMDolIlBSSXg2NCIsVTE6JSJQUkl4NjQs Ci0gICAgICAgICAgICAgICAgICAgICAgaSwgaXNfcGVyc2lzdGVudChwKSA/ICdQJyA6ICdFJywK LSAgICAgICAgICAgICAgICAgICAgICBpc19zaGFyZWQocCkgPyAnUycgOiAnUCcsCi0gICAgICAg ICAgICAgICAgICAgICAgcC0+dXVpZFswXSwgcC0+dXVpZFsxXSk7Ci0gICAgICAgIGxpc3RfZm9y X2VhY2hfZW50cnkoc2wsJnAtPnNoYXJlX2xpc3QsIHNoYXJlX2xpc3QpCi0gICAgICAgICAgICBu ICs9IHNjbnByaW50ZihpbmZvK24sQlNJWkUtbiwiLFNDOiVkIixzbC0+Y2xpZW50LT5jbGlfaWQp OwotICAgICAgICBuICs9IHNjbnByaW50ZihpbmZvK24sQlNJWkUtbiwiJWMiLCB1c2VfbG9uZyA/ ICcsJyA6ICdcbicpOwotICAgICAgICBpZiAodXNlX2xvbmcpCi0gICAgICAgICAgICBuICs9IHNj bnByaW50ZihpbmZvK24sQlNJWkUtbiwKLSAgICAgICAgICAgICAiUGM6JWQsUG06JWQsT2M6JWxk LE9tOiVsZCxOYzolbHUsTm06JWx1LCIKLSAgICAgICAgICAgICAicHM6JWx1LHB0OiVsdSxwZDol bHUscHI6JWx1LHB4OiVsdSxnczolbHUsZ3Q6JWx1LCIKLSAgICAgICAgICAgICAiZnM6JWx1LGZ0 OiVsdSxvczolbHUsb3Q6JWx1XG4iLAotICAgICAgICAgICAgIF9hdG9taWNfcmVhZChwLT5wZ3Bf Y291bnQpLCBwLT5wZ3BfY291bnRfbWF4LAotICAgICAgICAgICAgIHAtPm9ial9jb3VudCwgcC0+ b2JqX2NvdW50X21heCwKLSAgICAgICAgICAgICBwLT5vYmpub2RlX2NvdW50LCBwLT5vYmpub2Rl X2NvdW50X21heCwKLSAgICAgICAgICAgICBwLT5nb29kX3B1dHMsIHAtPnB1dHMscC0+ZHVwX3B1 dHNfZmx1c2hlZCwgcC0+ZHVwX3B1dHNfcmVwbGFjZWQsCi0gICAgICAgICAgICAgcC0+bm9fbWVt X3B1dHMsCi0gICAgICAgICAgICAgcC0+Zm91bmRfZ2V0cywgcC0+Z2V0cywKLSAgICAgICAgICAg ICBwLT5mbHVzaHNfZm91bmQsIHAtPmZsdXNocywgcC0+Zmx1c2hfb2Jqc19mb3VuZCwgcC0+Zmx1 c2hfb2Jqcyk7Ci0gICAgICAgIGlmICggc3VtICsgbiA+PSBsZW4gKQotICAgICAgICAgICAgcmV0 dXJuIHN1bTsKLSAgICAgICAgaWYgKCAhY29weV90b19ndWVzdF9vZmZzZXQoYnVmLCBvZmYgKyBz dW0sIGluZm8sIG4gKyAxKSApCi0gICAgICAgICAgICBzdW0gKz0gbjsKLSAgICB9Ci0gICAgcmV0 dXJuIHN1bTsKLX0KLQotc3RhdGljIGludCB0bWVtY19saXN0X2dsb2JhbF9wZXJmKHRtZW1fY2xp X3ZhX3BhcmFtX3QgYnVmLCBpbnQgb2ZmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVpbnQzMl90IGxlbiwgYm9vbF90IHVzZV9sb25nKQotewotICAgIGNoYXIgaW5mb1tCU0la RV07Ci0gICAgaW50IG4gPSAwLCBzdW0gPSAwOwotCi0gICAgbiA9IHNjbnByaW50ZihpbmZvK24s QlNJWkUtbiwiVD0iKTsKLSAgICBuLS07IC8qIE92ZXJ3cml0ZSB0cmFpbGluZyBjb21tYS4gKi8K LSAgICBuICs9IHNjbnByaW50ZihpbmZvK24sQlNJWkUtbiwiXG4iKTsKLSAgICBpZiAoIHN1bSAr IG4gPj0gbGVuICkKLSAgICAgICAgcmV0dXJuIHN1bTsKLSAgICBpZiAoICFjb3B5X3RvX2d1ZXN0 X29mZnNldChidWYsIG9mZiArIHN1bSwgaW5mbywgbiArIDEpICkKLSAgICAgICAgc3VtICs9IG47 Ci0gICAgcmV0dXJuIHN1bTsKLX0KLQotc3RhdGljIGludCB0bWVtY19saXN0X2dsb2JhbCh0bWVt X2NsaV92YV9wYXJhbV90IGJ1ZiwgaW50IG9mZiwgdWludDMyX3QgbGVuLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYm9vbF90IHVzZV9sb25nKQotewotICAgIGNoYXIgaW5mb1tCU0la RV07Ci0gICAgaW50IG4gPSAwLCBzdW0gPSBvZmY7Ci0KLSAgICBuICs9IHNjbnByaW50ZihpbmZv LEJTSVpFLCJHPSIKLSAgICAgICJUdDolbHUsVGU6JWx1LENmOiVsdSxBZjolbHUsUGY6JWx1LFRh OiVsdSwiCi0gICAgICAiTG06JWx1LEV0OiVsdSxFYTolbHUsUnQ6JWx1LFJhOiVsdSxSeDolbHUs RnA6JWx1JWMiLAotICAgICAgdG1lbV9zdGF0cy50b3RhbF90bWVtX29wcywgdG1lbV9zdGF0cy5l cnJvcmVkX3RtZW1fb3BzLCB0bWVtX3N0YXRzLmZhaWxlZF9jb3BpZXMsCi0gICAgICB0bWVtX3N0 YXRzLmFsbG9jX2ZhaWxlZCwgdG1lbV9zdGF0cy5hbGxvY19wYWdlX2ZhaWxlZCwgdG1lbV9wYWdl X2xpc3RfcGFnZXMsCi0gICAgICB0bWVtX3N0YXRzLmxvd19vbl9tZW1vcnksIHRtZW1fc3RhdHMu ZXZpY3RlZF9wZ3MsCi0gICAgICB0bWVtX3N0YXRzLmV2aWN0X2F0dGVtcHRzLCB0bWVtX3N0YXRz LnJlbGlucV9wZ3MsIHRtZW1fc3RhdHMucmVsaW5xX2F0dGVtcHRzLAotICAgICAgdG1lbV9zdGF0 cy5tYXhfZXZpY3RzX3Blcl9yZWxpbnEsCi0gICAgICB0bWVtX3N0YXRzLnRvdGFsX2ZsdXNoX3Bv b2wsIHVzZV9sb25nID8gJywnIDogJ1xuJyk7Ci0gICAgaWYgKHVzZV9sb25nKQotICAgICAgICBu ICs9IHNjbnByaW50ZihpbmZvK24sQlNJWkUtbiwKLSAgICAgICAgICAiRWM6JWxkLEVtOiVsZCxP YzolZCxPbTolZCxOYzolZCxObTolZCxQYzolZCxQbTolZCwiCi0gICAgICAgICAgIkZjOiVkLEZt OiVkLFNjOiVkLFNtOiVkLEVwOiVsdSxHZDolbHUsWnQ6JWx1LEd6OiVsdVxuIiwKLSAgICAgICAg ICB0bWVtX2dsb2JhbC5lcGhfY291bnQsIHRtZW1fc3RhdHMuZ2xvYmFsX2VwaF9jb3VudF9tYXgs Ci0gICAgICAgICAgX2F0b21pY19yZWFkKHRtZW1fc3RhdHMuZ2xvYmFsX29ial9jb3VudCksIHRt ZW1fc3RhdHMuZ2xvYmFsX29ial9jb3VudF9tYXgsCi0gICAgICAgICAgX2F0b21pY19yZWFkKHRt ZW1fc3RhdHMuZ2xvYmFsX3J0cmVlX25vZGVfY291bnQpLCB0bWVtX3N0YXRzLmdsb2JhbF9ydHJl ZV9ub2RlX2NvdW50X21heCwKLSAgICAgICAgICBfYXRvbWljX3JlYWQodG1lbV9zdGF0cy5nbG9i YWxfcGdwX2NvdW50KSwgdG1lbV9zdGF0cy5nbG9iYWxfcGdwX2NvdW50X21heCwKLSAgICAgICAg ICBfYXRvbWljX3JlYWQodG1lbV9zdGF0cy5nbG9iYWxfcGFnZV9jb3VudCksIHRtZW1fc3RhdHMu Z2xvYmFsX3BhZ2VfY291bnRfbWF4LAotICAgICAgICAgIF9hdG9taWNfcmVhZCh0bWVtX3N0YXRz Lmdsb2JhbF9wY2RfY291bnQpLCB0bWVtX3N0YXRzLmdsb2JhbF9wY2RfY291bnRfbWF4LAotICAg ICAgICAgdG1lbV9zdGF0cy50b3RfZ29vZF9lcGhfcHV0cyx0bWVtX3N0YXRzLmRlZHVwZWRfcHV0 cyx0bWVtX3N0YXRzLnBjZF90b3RfdHplX3NpemUsCi0gICAgICAgICB0bWVtX3N0YXRzLnBjZF90 b3RfY3NpemUpOwotICAgIGlmICggc3VtICsgbiA+PSBsZW4gKQotICAgICAgICByZXR1cm4gc3Vt OwotICAgIGlmICggIWNvcHlfdG9fZ3Vlc3Rfb2Zmc2V0KGJ1Ziwgb2ZmICsgc3VtLCBpbmZvLCBu ICsgMSkgKQotICAgICAgICBzdW0gKz0gbjsKLSAgICByZXR1cm4gc3VtOwotfQotCi1zdGF0aWMg aW50IHRtZW1jX2xpc3QoZG9taWRfdCBjbGlfaWQsIHRtZW1fY2xpX3ZhX3BhcmFtX3QgYnVmLCB1 aW50MzJfdCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbF90IHVzZV9s b25nKQotewotICAgIHN0cnVjdCBjbGllbnQgKmNsaWVudDsKLSAgICBpbnQgb2ZmID0gMDsKLQot ICAgIGlmICggY2xpX2lkID09IFRNRU1fQ0xJX0lEX05VTEwgKSB7Ci0gICAgICAgIG9mZiA9IHRt ZW1jX2xpc3RfZ2xvYmFsKGJ1ZiwwLGxlbix1c2VfbG9uZyk7Ci0gICAgICAgIG9mZiArPSB0bWVt Y19saXN0X3NoYXJlZChidWYsb2ZmLGxlbi1vZmYsdXNlX2xvbmcpOwotICAgICAgICBsaXN0X2Zv cl9lYWNoX2VudHJ5KGNsaWVudCwmdG1lbV9nbG9iYWwuY2xpZW50X2xpc3QsY2xpZW50X2xpc3Qp Ci0gICAgICAgICAgICBvZmYgKz0gdG1lbWNfbGlzdF9jbGllbnQoY2xpZW50LCBidWYsIG9mZiwg bGVuLW9mZiwgdXNlX2xvbmcpOwotICAgICAgICBvZmYgKz0gdG1lbWNfbGlzdF9nbG9iYWxfcGVy ZihidWYsb2ZmLGxlbi1vZmYsdXNlX2xvbmcpOwotICAgIH0KLSAgICBlbHNlIGlmICggKGNsaWVu dCA9IHRtZW1fY2xpZW50X2Zyb21fY2xpX2lkKGNsaV9pZCkpID09IE5VTEwpCi0gICAgICAgIHJl dHVybiAtMTsKLSAgICBlbHNlCi0gICAgICAgIG9mZiA9IHRtZW1jX2xpc3RfY2xpZW50KGNsaWVu dCwgYnVmLCAwLCBsZW4sIHVzZV9sb25nKTsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMg aW50IF9fdG1lbWNfc2V0X3ZhcihzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHVpbnQzMl90IHN1Ym9w LCB1aW50MzJfdCBhcmcxKQotewotICAgIGRvbWlkX3QgY2xpX2lkID0gY2xpZW50LT5jbGlfaWQ7 Ci0gICAgdWludDMyX3Qgb2xkX3dlaWdodDsKLQotICAgIHN3aXRjaCAoc3Vib3ApCi0gICAgewot ICAgIGNhc2UgWEVOX1NZU0NUTF9UTUVNX09QX1NFVF9XRUlHSFQ6Ci0gICAgICAgIG9sZF93ZWln aHQgPSBjbGllbnQtPndlaWdodDsKLSAgICAgICAgY2xpZW50LT53ZWlnaHQgPSBhcmcxOwotICAg ICAgICB0bWVtX2NsaWVudF9pbmZvKCJ0bWVtOiB3ZWlnaHQgc2V0IHRvICVkIGZvciAlcz0lZFxu IiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZzEsIHRtZW1fY2xpX2lkX3N0ciwgY2xpX2lk KTsKLSAgICAgICAgYXRvbWljX3N1YihvbGRfd2VpZ2h0LCZ0bWVtX2dsb2JhbC5jbGllbnRfd2Vp Z2h0X3RvdGFsKTsKLSAgICAgICAgYXRvbWljX2FkZChjbGllbnQtPndlaWdodCwmdG1lbV9nbG9i YWwuY2xpZW50X3dlaWdodF90b3RhbCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgWEVOX1NZ U0NUTF9UTUVNX09QX1NFVF9DQVA6Ci0gICAgICAgIGNsaWVudC0+Y2FwID0gYXJnMTsKLSAgICAg ICAgdG1lbV9jbGllbnRfaW5mbygidG1lbTogY2FwIHNldCB0byAlZCBmb3IgJXM9JWRcbiIsCi0g ICAgICAgICAgICAgICAgICAgICAgICBhcmcxLCB0bWVtX2NsaV9pZF9zdHIsIGNsaV9pZCk7Ci0g ICAgICAgIGJyZWFrOwotICAgIGNhc2UgWEVOX1NZU0NUTF9UTUVNX09QX1NFVF9DT01QUkVTUzoK LSAgICAgICAgaWYgKCB0bWVtX2RlZHVwX2VuYWJsZWQoKSApCi0gICAgICAgIHsKLSAgICAgICAg ICAgIHRtZW1fY2xpZW50X3dhcm4oInRtZW06IGNvbXByZXNzaW9uICVzIGZvciBhbGwgJXNzLCBj YW5ub3QgYmUgY2hhbmdlZCB3aGVuIHRtZW1fZGVkdXAgaXMgZW5hYmxlZFxuIiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0bWVtX2NvbXByZXNzaW9uX2VuYWJsZWQoKSA/ICJlbmFibGVk IiA6ICJkaXNhYmxlZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1lbV9jbGllbnRf c3RyKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBjbGllbnQt PmNvbXByZXNzID0gYXJnMSA/IDEgOiAwOwotICAgICAgICB0bWVtX2NsaWVudF9pbmZvKCJ0bWVt OiBjb21wcmVzc2lvbiAlcyBmb3IgJXM9JWRcbiIsCi0gICAgICAgICAgICBhcmcxID8gImVuYWJs ZWQiIDogImRpc2FibGVkIix0bWVtX2NsaV9pZF9zdHIsY2xpX2lkKTsKLSAgICAgICAgYnJlYWs7 Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgdG1lbV9jbGllbnRfd2FybigidG1lbTogdW5rbm93biBz dWJvcCAlZCBmb3IgdG1lbWNfc2V0X3ZhclxuIiwgc3Vib3ApOwotICAgICAgICByZXR1cm4gLTE7 Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHRtZW1jX3NldF92YXIoZG9t aWRfdCBjbGlfaWQsIHVpbnQzMl90IHN1Ym9wLCB1aW50MzJfdCBhcmcxKQotewotICAgIHN0cnVj dCBjbGllbnQgKmNsaWVudDsKLSAgICBpbnQgcmV0ID0gLTE7Ci0KLSAgICBpZiAoIGNsaV9pZCA9 PSBUTUVNX0NMSV9JRF9OVUxMICkKLSAgICB7Ci0gICAgICAgIGxpc3RfZm9yX2VhY2hfZW50cnko Y2xpZW50LCZ0bWVtX2dsb2JhbC5jbGllbnRfbGlzdCxjbGllbnRfbGlzdCkKLSAgICAgICAgewot ICAgICAgICAgICAgcmV0ID0gIF9fdG1lbWNfc2V0X3ZhcihjbGllbnQsIHN1Ym9wLCBhcmcxKTsK LSAgICAgICAgICAgIGlmIChyZXQpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K LSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgY2xpZW50ID0gdG1lbV9jbGllbnRfZnJv bV9jbGlfaWQoY2xpX2lkKTsKLSAgICAgICAgaWYgKCBjbGllbnQgKQotICAgICAgICAgICAgcmV0 ID0gX190bWVtY19zZXRfdmFyKGNsaWVudCwgc3Vib3AsIGFyZzEpOwotICAgIH0KLSAgICByZXR1 cm4gcmV0OwotfQotCiBzdGF0aWMgaW50IHRtZW1jX3NoYXJlZF9wb29sX2F1dGgoZG9taWRfdCBj bGlfaWQsIHVpbnQ2NF90IHV1aWRfbG8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdWludDY0X3QgdXVpZF9oaSwgYm9vbF90IGF1dGgpCiB7CkBAIC0yMzcxLDggKzE5NDIsNiBA QCBzdGF0aWMgaW50IHRtZW1jX3NhdmVfc3Vib3AoaW50IGNsaV9pZCwgdWludDMyX3QgcG9vbF9p ZCwKICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHN1Ym9wLCB0bWVtX2NsaV92YV9w YXJhbV90IGJ1ZiwgdWludDMyX3QgYXJnMSkKIHsKICAgICBzdHJ1Y3QgY2xpZW50ICpjbGllbnQg PSB0bWVtX2NsaWVudF9mcm9tX2NsaV9pZChjbGlfaWQpOwotICAgIHN0cnVjdCB0bWVtX3Bvb2wg KnBvb2wgPSAoY2xpZW50ID09IE5VTEwgfHwgcG9vbF9pZCA+PSBNQVhfUE9PTFNfUEVSX0RPTUFJ TikKLSAgICAgICAgICAgICAgICAgICA/IE5VTEwgOiBjbGllbnQtPnBvb2xzW3Bvb2xfaWRdOwog ICAgIHVpbnQzMl90IHA7CiAgICAgc3RydWN0IHRtZW1fcGFnZV9kZXNjcmlwdG9yICpwZ3AsICpw Z3AyOwogICAgIGludCByYyA9IC0xOwpAQCAtMjQwMCw0OCArMTk2OSw2IEBAIHN0YXRpYyBpbnQg dG1lbWNfc2F2ZV9zdWJvcChpbnQgY2xpX2lkLCB1aW50MzJfdCBwb29sX2lkLAogICAgICAgICBp ZiAoIGNsaWVudCA9PSBOVUxMICYmIChjbGllbnQgPSBjbGllbnRfY3JlYXRlKGNsaV9pZCkpICE9 IE5VTEwgKQogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug WEVOX1NZU0NUTF9UTUVNX09QX1NBVkVfR0VUX1ZFUlNJT046Ci0gICAgICAgIHJjID0gVE1FTV9T UEVDX1ZFUlNJT047Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgWEVOX1NZU0NUTF9UTUVNX09Q X1NBVkVfR0VUX01BWFBPT0xTOgotICAgICAgICByYyA9IE1BWF9QT09MU19QRVJfRE9NQUlOOwot ICAgICAgICBicmVhazsKLSAgICBjYXNlIFhFTl9TWVNDVExfVE1FTV9PUF9TQVZFX0dFVF9DTElF TlRfV0VJR0hUOgotICAgICAgICBpZiAoIGNsaWVudCA9PSBOVUxMICkKLSAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICByYyA9IGNsaWVudC0+d2VpZ2h0ID09IC0xID8gLTIgOiBjbGllbnQtPndl aWdodDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBYRU5fU1lTQ1RMX1RNRU1fT1BfU0FWRV9H RVRfQ0xJRU5UX0NBUDoKLSAgICAgICAgaWYgKCBjbGllbnQgPT0gTlVMTCApCi0gICAgICAgICAg ICBicmVhazsKLSAgICAgICAgcmMgPSBjbGllbnQtPmNhcCA9PSAtMSA/IC0yIDogY2xpZW50LT5j YXA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgWEVOX1NZU0NUTF9UTUVNX09QX1NBVkVfR0VU X0NMSUVOVF9GTEFHUzoKLSAgICAgICAgaWYgKCBjbGllbnQgPT0gTlVMTCApCi0gICAgICAgICAg ICBicmVhazsKLSAgICAgICAgcmMgPSAoY2xpZW50LT5jb21wcmVzcyA/IFRNRU1fQ0xJRU5UX0NP TVBSRVNTIDogMCApIHwKLSAgICAgICAgICAgICAoY2xpZW50LT53YXNfZnJvemVuID8gVE1FTV9D TElFTlRfRlJPWkVOIDogMCApOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFhFTl9TWVNDVExf VE1FTV9PUF9TQVZFX0dFVF9QT09MX0ZMQUdTOgotICAgICAgICAgaWYgKCBwb29sID09IE5VTEwg KQotICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgcmMgPSAocG9vbC0+cGVyc2lzdGVudCA/ IFRNRU1fUE9PTF9QRVJTSVNUIDogMCkgfAotICAgICAgICAgICAgICAocG9vbC0+c2hhcmVkID8g VE1FTV9QT09MX1NIQVJFRCA6IDApIHwKLSAgICAgICAgICAgICAgKFBPT0xfUEFHRVNISUZUIDw8 IFRNRU1fUE9PTF9QQUdFU0laRV9TSElGVCkgfAotICAgICAgICAgICAgICAoVE1FTV9TUEVDX1ZF UlNJT04gPDwgVE1FTV9QT09MX1ZFUlNJT05fU0hJRlQpOwotICAgICAgICBicmVhazsKLSAgICBj YXNlIFhFTl9TWVNDVExfVE1FTV9PUF9TQVZFX0dFVF9QT09MX05QQUdFUzoKLSAgICAgICAgIGlm ICggcG9vbCA9PSBOVUxMICkKLSAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgcmMgPSBfYXRv bWljX3JlYWQocG9vbC0+cGdwX2NvdW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBYRU5f U1lTQ1RMX1RNRU1fT1BfU0FWRV9HRVRfUE9PTF9VVUlEOgotICAgICAgICAgaWYgKCBwb29sID09 IE5VTEwgKQotICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICByYyA9IDA7Ci0gICAgICAgIGlm ICggY29weV90b19ndWVzdChndWVzdF9oYW5kbGVfY2FzdChidWYsIHZvaWQpLCBwb29sLT51dWlk LCAyKSApCi0gICAgICAgICAgICByYyA9IC1FRkFVTFQ7Ci0gICAgICAgIGJyZWFrOwogICAgIGNh c2UgWEVOX1NZU0NUTF9UTUVNX09QX1NBVkVfRU5EOgogICAgICAgICBpZiAoIGNsaWVudCA9PSBO VUxMICkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjU4OSw1MCArMjExNiwxOSBAQCBzdGF0aWMg aW50IHRtZW1jX3Jlc3RvcmVfZmx1c2hfcGFnZShpbnQgY2xpX2lkLCB1aW50MzJfdCBwb29sX2lk LAogICAgIHJldHVybiBkb190bWVtX2ZsdXNoX3BhZ2UocG9vbCxvaWRwLGluZGV4KTsKIH0KIAot aW50IHRtZW1fY29udHJvbChzdHJ1Y3QgeGVuX3N5c2N0bF90bWVtX29wICpvcCkKK2ludCBkb190 bWVtX2NvbnRyb2woc3RydWN0IHhlbl9zeXNjdGxfdG1lbV9vcCAqb3ApCiB7CiAgICAgaW50IHJl dDsKICAgICB1aW50MzJfdCBwb29sX2lkID0gb3AtPnBvb2xfaWQ7CiAgICAgdWludDMyX3QgY21k ID0gb3AtPmNtZDsKICAgICBzdHJ1Y3QgeGVuX3RtZW1fb2lkICpvaWRwID0gJm9wLT5vaWQ7CiAK LSAgICBpZiAoIG9wLT5wYWQgIT0gMCApCi0gICAgICAgIHJldHVybiAtRUlOVkFMOwotCi0gICAg d3JpdGVfbG9jaygmdG1lbV9yd2xvY2spOworICAgIEFTU0VSVChyd19pc193cml0ZV9sb2NrZWQo JnRtZW1fcndsb2NrKSk7CiAKICAgICBzd2l0Y2ggKGNtZCkKICAgICB7Ci0gICAgY2FzZSBYRU5f U1lTQ1RMX1RNRU1fT1BfVEhBVzoKLSAgICBjYXNlIFhFTl9TWVNDVExfVE1FTV9PUF9GUkVFWkU6 Ci0gICAgY2FzZSBYRU5fU1lTQ1RMX1RNRU1fT1BfREVTVFJPWToKLSAgICAgICAgcmV0ID0gdG1l bWNfZnJlZXplX3Bvb2xzKG9wLT5jbGlfaWQsIGNtZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh c2UgWEVOX1NZU0NUTF9UTUVNX09QX0ZMVVNIOgotICAgICAgICByZXQgPSB0bWVtY19mbHVzaF9t ZW0ob3AtPmNsaV9pZCxvcC0+YXJnMSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgWEVOX1NZ U0NUTF9UTUVNX09QX0xJU1Q6Ci0gICAgICAgIHJldCA9IHRtZW1jX2xpc3Qob3AtPmNsaV9pZCwK LSAgICAgICAgICAgICAgICAgICAgICAgICBndWVzdF9oYW5kbGVfY2FzdChvcC0+YnVmLCBjaGFy KSwgb3AtPmFyZzEsIG9wLT5hcmcyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBYRU5fU1lT Q1RMX1RNRU1fT1BfU0VUX1dFSUdIVDoKLSAgICBjYXNlIFhFTl9TWVNDVExfVE1FTV9PUF9TRVRf Q0FQOgotICAgIGNhc2UgWEVOX1NZU0NUTF9UTUVNX09QX1NFVF9DT01QUkVTUzoKLSAgICAgICAg cmV0ID0gdG1lbWNfc2V0X3ZhcihvcC0+Y2xpX2lkLCBjbWQsIG9wLT5hcmcxKTsKLSAgICAgICAg YnJlYWs7Ci0gICAgY2FzZSBYRU5fU1lTQ1RMX1RNRU1fT1BfUVVFUllfRlJFRUFCTEVfTUI6Ci0g ICAgICAgIHJldCA9IHRtZW1fZnJlZWFibGVfcGFnZXMoKSA+PiAoMjAgLSBQQUdFX1NISUZUKTsK LSAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBYRU5fU1lTQ1RMX1RNRU1fT1BfU0FWRV9CRUdJTjoK ICAgICBjYXNlIFhFTl9TWVNDVExfVE1FTV9PUF9SRVNUT1JFX0JFR0lOOgotICAgIGNhc2UgWEVO X1NZU0NUTF9UTUVNX09QX1NBVkVfR0VUX1ZFUlNJT046Ci0gICAgY2FzZSBYRU5fU1lTQ1RMX1RN RU1fT1BfU0FWRV9HRVRfTUFYUE9PTFM6Ci0gICAgY2FzZSBYRU5fU1lTQ1RMX1RNRU1fT1BfU0FW RV9HRVRfQ0xJRU5UX1dFSUdIVDoKLSAgICBjYXNlIFhFTl9TWVNDVExfVE1FTV9PUF9TQVZFX0dF VF9DTElFTlRfQ0FQOgotICAgIGNhc2UgWEVOX1NZU0NUTF9UTUVNX09QX1NBVkVfR0VUX0NMSUVO VF9GTEFHUzoKLSAgICBjYXNlIFhFTl9TWVNDVExfVE1FTV9PUF9TQVZFX0dFVF9QT09MX0ZMQUdT OgotICAgIGNhc2UgWEVOX1NZU0NUTF9UTUVNX09QX1NBVkVfR0VUX1BPT0xfTlBBR0VTOgotICAg IGNhc2UgWEVOX1NZU0NUTF9UTUVNX09QX1NBVkVfR0VUX1BPT0xfVVVJRDoKICAgICBjYXNlIFhF Tl9TWVNDVExfVE1FTV9PUF9TQVZFX0VORDoKICAgICAgICAgcmV0ID0gdG1lbWNfc2F2ZV9zdWJv cChvcC0+Y2xpX2lkLCBwb29sX2lkLCBjbWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZ3Vlc3RfaGFuZGxlX2Nhc3Qob3AtPmJ1ZiwgY2hhciksIG9wLT5hcmcxKTsKQEAgLTI2NTYs OCArMjE1Miw2IEBAIGludCB0bWVtX2NvbnRyb2woc3RydWN0IHhlbl9zeXNjdGxfdG1lbV9vcCAq b3ApCiAgICAgICAgIHJldCA9IC0xOwogICAgIH0KIAotICAgIHdyaXRlX3VubG9jaygmdG1lbV9y d2xvY2spOwotCiAgICAgcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEveGVuL2NvbW1vbi90 bWVtX2NvbnRyb2wuYyBiL3hlbi9jb21tb24vdG1lbV9jb250cm9sLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uODFhMjQxNAotLS0gL2Rldi9udWxsCisrKyBiL3hlbi9jb21t b24vdG1lbV9jb250cm9sLmMKQEAgLTAsMCArMSw0NDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp IDIwMTYgT3JhY2xlIGFuZC9vciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K KyAqCisgKi8KKworI2luY2x1ZGUgPHhlbi9pbml0Lmg+CisjaW5jbHVkZSA8eGVuL2xpc3QuaD4K KyNpbmNsdWRlIDx4ZW4vcmFkaXgtdHJlZS5oPgorI2luY2x1ZGUgPHhlbi9yYnRyZWUuaD4KKyNp bmNsdWRlIDx4ZW4vcndsb2NrLmg+CisjaW5jbHVkZSA8eGVuL3RtZW1fY29udHJvbC5oPgorI2lu Y2x1ZGUgPHhlbi90bWVtLmg+CisjaW5jbHVkZSA8eGVuL3RtZW1feGVuLmg+CisjaW5jbHVkZSA8 cHVibGljL3N5c2N0bC5oPgorCisvKioqKioqKioqKioqIFRNRU0gQ09OVFJPTCBPUEVSQVRJT05T ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogRnJlZXplL3RoYXcg YWxsIHBvb2xzIGJlbG9uZ2luZyB0byBjbGllbnQgY2xpX2lkIChhbGwgZG9tYWlucyBpZiAtMSku ICovCitzdGF0aWMgaW50IHRtZW1jX2ZyZWV6ZV9wb29scyhkb21pZF90IGNsaV9pZCwgaW50IGFy ZykKK3sKKyAgICBzdHJ1Y3QgY2xpZW50ICpjbGllbnQ7CisgICAgYm9vbF90IGZyZWV6ZSA9IChh cmcgPT0gWEVOX1NZU0NUTF9UTUVNX09QX0ZSRUVaRSkgPyAxIDogMDsKKyAgICBib29sX3QgZGVz dHJveSA9IChhcmcgPT0gWEVOX1NZU0NUTF9UTUVNX09QX0RFU1RST1kpID8gMSA6IDA7CisgICAg Y2hhciAqczsKKworICAgIHMgPSBkZXN0cm95ID8gImRlc3Ryb3llZCIgOiAoIGZyZWV6ZSA/ICJm cm96ZW4iIDogInRoYXdlZCIgKTsKKyAgICBpZiAoIGNsaV9pZCA9PSBUTUVNX0NMSV9JRF9OVUxM ICkKKyAgICB7CisgICAgICAgIGxpc3RfZm9yX2VhY2hfZW50cnkoY2xpZW50LCZ0bWVtX2dsb2Jh bC5jbGllbnRfbGlzdCxjbGllbnRfbGlzdCkKKyAgICAgICAgICAgIGNsaWVudC0+ZnJvemVuID0g ZnJlZXplOworICAgICAgICB0bWVtX2NsaWVudF9pbmZvKCJ0bWVtOiBhbGwgcG9vbHMgJXMgZm9y IGFsbCAlc3NcbiIsIHMsIHRtZW1fY2xpZW50X3N0cik7CisgICAgfQorICAgIGVsc2UKKyAgICB7 CisgICAgICAgIGlmICggKGNsaWVudCA9IHRtZW1fY2xpZW50X2Zyb21fY2xpX2lkKGNsaV9pZCkp ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGNsaWVudC0+ZnJvemVu ID0gZnJlZXplOworICAgICAgICB0bWVtX2NsaWVudF9pbmZvKCJ0bWVtOiBhbGwgcG9vbHMgJXMg Zm9yICVzPSVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIHMsIHRtZW1fY2xpX2lkX3N0 ciwgY2xpX2lkKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBs b25nIHRtZW1fZmx1c2hfbnBhZ2VzKHVuc2lnbmVkIGxvbmcgbikKK3sKKyAgICB1bnNpZ25lZCBs b25nIGF2YWlsX3BhZ2VzID0gMDsKKworICAgIHdoaWxlICggKGF2YWlsX3BhZ2VzID0gdG1lbV9w YWdlX2xpc3RfcGFnZXMpIDwgbiApCisgICAgeworICAgICAgICBpZiAoICAhdG1lbV9ldmljdCgp ICkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoIGF2YWlsX3BhZ2VzICkKKyAg ICB7CisgICAgICAgIHNwaW5fbG9jaygmdG1lbV9wYWdlX2xpc3RfbG9jayk7CisgICAgICAgIHdo aWxlICggIXBhZ2VfbGlzdF9lbXB0eSgmdG1lbV9wYWdlX2xpc3QpICkKKyAgICAgICAgeworICAg ICAgICAgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGcgPSBwYWdlX2xpc3RfcmVtb3ZlX2hlYWQoJnRt ZW1fcGFnZV9saXN0KTsKKyAgICAgICAgICAgIHNjcnViX29uZV9wYWdlKHBnKTsKKyAgICAgICAg ICAgIHRtZW1fcGFnZV9saXN0X3BhZ2VzLS07CisgICAgICAgICAgICBmcmVlX2RvbWhlYXBfcGFn ZShwZyk7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKHRtZW1fcGFnZV9saXN0X3BhZ2VzID09 IDApOworICAgICAgICBJTklUX1BBR0VfTElTVF9IRUFEKCZ0bWVtX3BhZ2VfbGlzdCk7CisgICAg ICAgIHNwaW5fdW5sb2NrKCZ0bWVtX3BhZ2VfbGlzdF9sb2NrKTsKKyAgICB9CisgICAgcmV0dXJu IGF2YWlsX3BhZ2VzOworfQorCitzdGF0aWMgaW50IHRtZW1jX2ZsdXNoX21lbShkb21pZF90IGNs aV9pZCwgdWludDMyX3Qga2IpCit7CisgICAgdWludDMyX3QgbnBhZ2VzLCBmbHVzaGVkX3BhZ2Vz LCBmbHVzaGVkX2tiOworCisgICAgaWYgKCBjbGlfaWQgIT0gVE1FTV9DTElfSURfTlVMTCApCisg ICAgeworICAgICAgICB0bWVtX2NsaWVudF93YXJuKCJ0bWVtOiAlcy1zcGVjaWZpYyBmbHVzaCBu b3Qgc3VwcG9ydGVkIHlldCwgdXNlIC0tYWxsXG4iLAorICAgICAgICAgICB0bWVtX2NsaWVudF9z dHIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIC8qIENvbnZlcnQga2IgdG8gcGFn ZXMsIHJvdW5kaW5nIHVwIGlmIG5lY2Vzc2FyeS4gKi8KKyAgICBucGFnZXMgPSAoa2IgKyAoKDEg PDwgKFBBR0VfU0hJRlQtMTApKS0xKSkgPj4gKFBBR0VfU0hJRlQtMTApOworICAgIGZsdXNoZWRf cGFnZXMgPSB0bWVtX2ZsdXNoX25wYWdlcyhucGFnZXMpOworICAgIGZsdXNoZWRfa2IgPSBmbHVz aGVkX3BhZ2VzIDw8IChQQUdFX1NISUZULTEwKTsKKyAgICByZXR1cm4gZmx1c2hlZF9rYjsKK30K KworLyoKKyAqIFRoZXNlIHRtZW1jX2xpc3QqIHJvdXRpbmVzIG91dHB1dCBsb3RzIG9mIHN0YXRz IGluIGEgZm9ybWF0IHRoYXQgaXMKKyAqICBpbnRlbmRlZCB0byBiZSBwcm9ncmFtLXBhcnNlYWJs ZSwgbm90IGh1bWFuLXJlYWRhYmxlLiBGdXJ0aGVyLCBieQorICogIHR5aW5nIGVhY2ggZ3JvdXAg b2Ygc3RhdHMgdG8gYSBsaW5lIGZvcm1hdCBpbmRpY2F0b3IgKGUuZy4gRz0gZm9yCisgKiAgZ2xv YmFsIHN0YXRzKSBhbmQgZWFjaCBpbmRpdmlkdWFsIHN0YXQgdG8gYSB0d28tbGV0dGVyIHNwZWNp ZmllcgorICogIChlLmcuIEVjOm5ubm5uIGluIHRoZSBHPSBsaW5lIHNheXMgdGhlcmUgYXJlIG5u bm5uIHBhZ2VzIGluIHRoZQorICogIGdsb2JhbCBlcGhlbWVyYWwgcG9vbCksIGl0IHNob3VsZCBh bGxvdyB0aGUgc3RhdHMgcmVwb3J0ZWQgdG8gYmUKKyAqICBmb3J3YXJkIGFuZCBiYWNrd2FyZHMg Y29tcGF0aWJsZSBhcyB0bWVtIGV2b2x2ZXMuCisgKi8KKyNkZWZpbmUgQlNJWkUgMTAyNAorCitz dGF0aWMgaW50IHRtZW1jX2xpc3RfY2xpZW50KHN0cnVjdCBjbGllbnQgKmMsIHRtZW1fY2xpX3Zh X3BhcmFtX3QgYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2ZmLCB1aW50 MzJfdCBsZW4sIGJvb2xfdCB1c2VfbG9uZykKK3sKKyAgICBjaGFyIGluZm9bQlNJWkVdOworICAg IGludCBpLCBuID0gMCwgc3VtID0gMDsKKyAgICBzdHJ1Y3QgdG1lbV9wb29sICpwOworICAgIGJv b2xfdCBzOworCisgICAgbiA9IHNjbnByaW50ZihpbmZvLEJTSVpFLCJDPUNJOiVkLHd3OiVkLGNh OiVkLGNvOiVkLGZyOiVkLCIKKyAgICAgICAgIlRjOiUiUFJJdTY0IixHZTolbGQsUHA6JWxkLEdw OiVsZCVjIiwKKyAgICAgICAgYy0+Y2xpX2lkLCBjLT53ZWlnaHQsIGMtPmNhcCwgYy0+Y29tcHJl c3MsIGMtPmZyb3plbiwKKyAgICAgICAgYy0+dG90YWxfY3ljbGVzLCBjLT5zdWNjX2VwaF9nZXRz LCBjLT5zdWNjX3BlcnNfcHV0cywgYy0+c3VjY19wZXJzX2dldHMsCisgICAgICAgIHVzZV9sb25n ID8gJywnIDogJ1xuJyk7CisgICAgaWYgKHVzZV9sb25nKQorICAgICAgICBuICs9IHNjbnByaW50 ZihpbmZvK24sQlNJWkUtbiwKKyAgICAgICAgICAgICAiRWM6JWxkLEVtOiVsZCxjcDolbGQsY2I6 JSJQUklkNjQiLGNuOiVsZCxjbTolbGRcbiIsCisgICAgICAgICAgICAgYy0+ZXBoX2NvdW50LCBj LT5lcGhfY291bnRfbWF4LAorICAgICAgICAgICAgIGMtPmNvbXByZXNzZWRfcGFnZXMsIGMtPmNv bXByZXNzZWRfc3VtX3NpemUsCisgICAgICAgICAgICAgYy0+Y29tcHJlc3NfcG9vciwgYy0+Y29t cHJlc3Nfbm9tZW0pOworICAgIGlmICggIWNvcHlfdG9fZ3Vlc3Rfb2Zmc2V0KGJ1Ziwgb2ZmICsg c3VtLCBpbmZvLCBuICsgMSkgKQorICAgICAgICBzdW0gKz0gbjsKKyAgICBmb3IgKCBpID0gMDsg aSA8IE1BWF9QT09MU19QRVJfRE9NQUlOOyBpKysgKQorICAgIHsKKyAgICAgICAgaWYgKCAocCA9 IGMtPnBvb2xzW2ldKSA9PSBOVUxMICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBz ID0gaXNfc2hhcmVkKHApOworICAgICAgICBuID0gc2NucHJpbnRmKGluZm8sQlNJWkUsIlA9Q0k6 JWQsUEk6JWQsIgorICAgICAgICAgICAgICAgICAgICAgICJQVDolYyVjLFUwOiUiUFJJeDY0IixV MTolIlBSSXg2NCIlYyIsCisgICAgICAgICAgICAgICAgICAgICAgYy0+Y2xpX2lkLCBwLT5wb29s X2lkLAorICAgICAgICAgICAgICAgICAgICAgIGlzX3BlcnNpc3RlbnQocCkgPyAnUCcgOiAnRScs IHMgPyAnUycgOiAnUCcsCisgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KShzID8gcC0+ dXVpZFswXSA6IDApLAorICAgICAgICAgICAgICAgICAgICAgICh1aW50NjRfdCkocyA/IHAtPnV1 aWRbMV0gOiAwTEwpLAorICAgICAgICAgICAgICAgICAgICAgIHVzZV9sb25nID8gJywnIDogJ1xu Jyk7CisgICAgICAgIGlmICh1c2VfbG9uZykKKyAgICAgICAgICAgIG4gKz0gc2NucHJpbnRmKGlu Zm8rbixCU0laRS1uLAorICAgICAgICAgICAgICJQYzolZCxQbTolZCxPYzolbGQsT206JWxkLE5j OiVsdSxObTolbHUsIgorICAgICAgICAgICAgICJwczolbHUscHQ6JWx1LHBkOiVsdSxwcjolbHUs cHg6JWx1LGdzOiVsdSxndDolbHUsIgorICAgICAgICAgICAgICJmczolbHUsZnQ6JWx1LG9zOiVs dSxvdDolbHVcbiIsCisgICAgICAgICAgICAgX2F0b21pY19yZWFkKHAtPnBncF9jb3VudCksIHAt PnBncF9jb3VudF9tYXgsCisgICAgICAgICAgICAgcC0+b2JqX2NvdW50LCBwLT5vYmpfY291bnRf bWF4LAorICAgICAgICAgICAgIHAtPm9iam5vZGVfY291bnQsIHAtPm9iam5vZGVfY291bnRfbWF4 LAorICAgICAgICAgICAgIHAtPmdvb2RfcHV0cywgcC0+cHV0cyxwLT5kdXBfcHV0c19mbHVzaGVk LCBwLT5kdXBfcHV0c19yZXBsYWNlZCwKKyAgICAgICAgICAgICBwLT5ub19tZW1fcHV0cywKKyAg ICAgICAgICAgICBwLT5mb3VuZF9nZXRzLCBwLT5nZXRzLAorICAgICAgICAgICAgIHAtPmZsdXNo c19mb3VuZCwgcC0+Zmx1c2hzLCBwLT5mbHVzaF9vYmpzX2ZvdW5kLCBwLT5mbHVzaF9vYmpzKTsK KyAgICAgICAgaWYgKCBzdW0gKyBuID49IGxlbiApCisgICAgICAgICAgICByZXR1cm4gc3VtOwor ICAgICAgICBpZiAoICFjb3B5X3RvX2d1ZXN0X29mZnNldChidWYsIG9mZiArIHN1bSwgaW5mbywg biArIDEpICkKKyAgICAgICAgICAgIHN1bSArPSBuOworICAgIH0KKyAgICByZXR1cm4gc3VtOwor fQorCitzdGF0aWMgaW50IHRtZW1jX2xpc3Rfc2hhcmVkKHRtZW1fY2xpX3ZhX3BhcmFtX3QgYnVm LCBpbnQgb2ZmLCB1aW50MzJfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi b29sX3QgdXNlX2xvbmcpCit7CisgICAgY2hhciBpbmZvW0JTSVpFXTsKKyAgICBpbnQgaSwgbiA9 IDAsIHN1bSA9IDA7CisgICAgc3RydWN0IHRtZW1fcG9vbCAqcDsKKyAgICBzdHJ1Y3Qgc2hhcmVf bGlzdCAqc2w7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IE1BWF9HTE9CQUxfU0hBUkVEX1BPT0xT OyBpKysgKQorICAgIHsKKyAgICAgICAgaWYgKCAocCA9IHRtZW1fZ2xvYmFsLnNoYXJlZF9wb29s c1tpXSkgPT0gTlVMTCApCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbiA9IHNjbnBy aW50ZihpbmZvK24sQlNJWkUtbiwiUz1TSTolZCxQVDolYyVjLFUwOiUiUFJJeDY0IixVMTolIlBS SXg2NCwKKyAgICAgICAgICAgICAgICAgICAgICBpLCBpc19wZXJzaXN0ZW50KHApID8gJ1AnIDog J0UnLAorICAgICAgICAgICAgICAgICAgICAgIGlzX3NoYXJlZChwKSA/ICdTJyA6ICdQJywKKyAg ICAgICAgICAgICAgICAgICAgICBwLT51dWlkWzBdLCBwLT51dWlkWzFdKTsKKyAgICAgICAgbGlz dF9mb3JfZWFjaF9lbnRyeShzbCwmcC0+c2hhcmVfbGlzdCwgc2hhcmVfbGlzdCkKKyAgICAgICAg ICAgIG4gKz0gc2NucHJpbnRmKGluZm8rbixCU0laRS1uLCIsU0M6JWQiLHNsLT5jbGllbnQtPmNs aV9pZCk7CisgICAgICAgIG4gKz0gc2NucHJpbnRmKGluZm8rbixCU0laRS1uLCIlYyIsIHVzZV9s b25nID8gJywnIDogJ1xuJyk7CisgICAgICAgIGlmICh1c2VfbG9uZykKKyAgICAgICAgICAgIG4g Kz0gc2NucHJpbnRmKGluZm8rbixCU0laRS1uLAorICAgICAgICAgICAgICJQYzolZCxQbTolZCxP YzolbGQsT206JWxkLE5jOiVsdSxObTolbHUsIgorICAgICAgICAgICAgICJwczolbHUscHQ6JWx1 LHBkOiVsdSxwcjolbHUscHg6JWx1LGdzOiVsdSxndDolbHUsIgorICAgICAgICAgICAgICJmczol bHUsZnQ6JWx1LG9zOiVsdSxvdDolbHVcbiIsCisgICAgICAgICAgICAgX2F0b21pY19yZWFkKHAt PnBncF9jb3VudCksIHAtPnBncF9jb3VudF9tYXgsCisgICAgICAgICAgICAgcC0+b2JqX2NvdW50 LCBwLT5vYmpfY291bnRfbWF4LAorICAgICAgICAgICAgIHAtPm9iam5vZGVfY291bnQsIHAtPm9i am5vZGVfY291bnRfbWF4LAorICAgICAgICAgICAgIHAtPmdvb2RfcHV0cywgcC0+cHV0cyxwLT5k dXBfcHV0c19mbHVzaGVkLCBwLT5kdXBfcHV0c19yZXBsYWNlZCwKKyAgICAgICAgICAgICBwLT5u b19tZW1fcHV0cywKKyAgICAgICAgICAgICBwLT5mb3VuZF9nZXRzLCBwLT5nZXRzLAorICAgICAg ICAgICAgIHAtPmZsdXNoc19mb3VuZCwgcC0+Zmx1c2hzLCBwLT5mbHVzaF9vYmpzX2ZvdW5kLCBw LT5mbHVzaF9vYmpzKTsKKyAgICAgICAgaWYgKCBzdW0gKyBuID49IGxlbiApCisgICAgICAgICAg ICByZXR1cm4gc3VtOworICAgICAgICBpZiAoICFjb3B5X3RvX2d1ZXN0X29mZnNldChidWYsIG9m ZiArIHN1bSwgaW5mbywgbiArIDEpICkKKyAgICAgICAgICAgIHN1bSArPSBuOworICAgIH0KKyAg ICByZXR1cm4gc3VtOworfQorCitzdGF0aWMgaW50IHRtZW1jX2xpc3RfZ2xvYmFsX3BlcmYodG1l bV9jbGlfdmFfcGFyYW1fdCBidWYsIGludCBvZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdWludDMyX3QgbGVuLCBib29sX3QgdXNlX2xvbmcpCit7CisgICAgY2hhciBpbmZv W0JTSVpFXTsKKyAgICBpbnQgbiA9IDAsIHN1bSA9IDA7CisKKyAgICBuID0gc2NucHJpbnRmKGlu Zm8rbixCU0laRS1uLCJUPSIpOworICAgIG4tLTsgLyogT3ZlcndyaXRlIHRyYWlsaW5nIGNvbW1h LiAqLworICAgIG4gKz0gc2NucHJpbnRmKGluZm8rbixCU0laRS1uLCJcbiIpOworICAgIGlmICgg c3VtICsgbiA+PSBsZW4gKQorICAgICAgICByZXR1cm4gc3VtOworICAgIGlmICggIWNvcHlfdG9f Z3Vlc3Rfb2Zmc2V0KGJ1Ziwgb2ZmICsgc3VtLCBpbmZvLCBuICsgMSkgKQorICAgICAgICBzdW0g Kz0gbjsKKyAgICByZXR1cm4gc3VtOworfQorCitzdGF0aWMgaW50IHRtZW1jX2xpc3RfZ2xvYmFs KHRtZW1fY2xpX3ZhX3BhcmFtX3QgYnVmLCBpbnQgb2ZmLCB1aW50MzJfdCBsZW4sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBib29sX3QgdXNlX2xvbmcpCit7CisgICAgY2hhciBpbmZv W0JTSVpFXTsKKyAgICBpbnQgbiA9IDAsIHN1bSA9IG9mZjsKKworICAgIG4gKz0gc2NucHJpbnRm KGluZm8sQlNJWkUsIkc9IgorICAgICAgIlR0OiVsdSxUZTolbHUsQ2Y6JWx1LEFmOiVsdSxQZjol bHUsVGE6JWx1LCIKKyAgICAgICJMbTolbHUsRXQ6JWx1LEVhOiVsdSxSdDolbHUsUmE6JWx1LFJ4 OiVsdSxGcDolbHUlYyIsCisgICAgICB0bWVtX3N0YXRzLnRvdGFsX3RtZW1fb3BzLCB0bWVtX3N0 YXRzLmVycm9yZWRfdG1lbV9vcHMsIHRtZW1fc3RhdHMuZmFpbGVkX2NvcGllcywKKyAgICAgIHRt ZW1fc3RhdHMuYWxsb2NfZmFpbGVkLCB0bWVtX3N0YXRzLmFsbG9jX3BhZ2VfZmFpbGVkLCB0bWVt X3BhZ2VfbGlzdF9wYWdlcywKKyAgICAgIHRtZW1fc3RhdHMubG93X29uX21lbW9yeSwgdG1lbV9z dGF0cy5ldmljdGVkX3BncywKKyAgICAgIHRtZW1fc3RhdHMuZXZpY3RfYXR0ZW1wdHMsIHRtZW1f c3RhdHMucmVsaW5xX3BncywgdG1lbV9zdGF0cy5yZWxpbnFfYXR0ZW1wdHMsCisgICAgICB0bWVt X3N0YXRzLm1heF9ldmljdHNfcGVyX3JlbGlucSwKKyAgICAgIHRtZW1fc3RhdHMudG90YWxfZmx1 c2hfcG9vbCwgdXNlX2xvbmcgPyAnLCcgOiAnXG4nKTsKKyAgICBpZiAodXNlX2xvbmcpCisgICAg ICAgIG4gKz0gc2NucHJpbnRmKGluZm8rbixCU0laRS1uLAorICAgICAgICAgICJFYzolbGQsRW06 JWxkLE9jOiVkLE9tOiVkLE5jOiVkLE5tOiVkLFBjOiVkLFBtOiVkLCIKKyAgICAgICAgICAiRmM6 JWQsRm06JWQsU2M6JWQsU206JWQsRXA6JWx1LEdkOiVsdSxadDolbHUsR3o6JWx1XG4iLAorICAg ICAgICAgIHRtZW1fZ2xvYmFsLmVwaF9jb3VudCwgdG1lbV9zdGF0cy5nbG9iYWxfZXBoX2NvdW50 X21heCwKKyAgICAgICAgICBfYXRvbWljX3JlYWQodG1lbV9zdGF0cy5nbG9iYWxfb2JqX2NvdW50 KSwgdG1lbV9zdGF0cy5nbG9iYWxfb2JqX2NvdW50X21heCwKKyAgICAgICAgICBfYXRvbWljX3Jl YWQodG1lbV9zdGF0cy5nbG9iYWxfcnRyZWVfbm9kZV9jb3VudCksIHRtZW1fc3RhdHMuZ2xvYmFs X3J0cmVlX25vZGVfY291bnRfbWF4LAorICAgICAgICAgIF9hdG9taWNfcmVhZCh0bWVtX3N0YXRz Lmdsb2JhbF9wZ3BfY291bnQpLCB0bWVtX3N0YXRzLmdsb2JhbF9wZ3BfY291bnRfbWF4LAorICAg ICAgICAgIF9hdG9taWNfcmVhZCh0bWVtX3N0YXRzLmdsb2JhbF9wYWdlX2NvdW50KSwgdG1lbV9z dGF0cy5nbG9iYWxfcGFnZV9jb3VudF9tYXgsCisgICAgICAgICAgX2F0b21pY19yZWFkKHRtZW1f c3RhdHMuZ2xvYmFsX3BjZF9jb3VudCksIHRtZW1fc3RhdHMuZ2xvYmFsX3BjZF9jb3VudF9tYXgs CisgICAgICAgICB0bWVtX3N0YXRzLnRvdF9nb29kX2VwaF9wdXRzLHRtZW1fc3RhdHMuZGVkdXBl ZF9wdXRzLHRtZW1fc3RhdHMucGNkX3RvdF90emVfc2l6ZSwKKyAgICAgICAgIHRtZW1fc3RhdHMu cGNkX3RvdF9jc2l6ZSk7CisgICAgaWYgKCBzdW0gKyBuID49IGxlbiApCisgICAgICAgIHJldHVy biBzdW07CisgICAgaWYgKCAhY29weV90b19ndWVzdF9vZmZzZXQoYnVmLCBvZmYgKyBzdW0sIGlu Zm8sIG4gKyAxKSApCisgICAgICAgIHN1bSArPSBuOworICAgIHJldHVybiBzdW07Cit9CisKK3N0 YXRpYyBpbnQgdG1lbWNfbGlzdChkb21pZF90IGNsaV9pZCwgdG1lbV9jbGlfdmFfcGFyYW1fdCBi dWYsIHVpbnQzMl90IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sX3Qg dXNlX2xvbmcpCit7CisgICAgc3RydWN0IGNsaWVudCAqY2xpZW50OworICAgIGludCBvZmYgPSAw OworCisgICAgaWYgKCBjbGlfaWQgPT0gVE1FTV9DTElfSURfTlVMTCApIHsKKyAgICAgICAgb2Zm ID0gdG1lbWNfbGlzdF9nbG9iYWwoYnVmLDAsbGVuLHVzZV9sb25nKTsKKyAgICAgICAgb2ZmICs9 IHRtZW1jX2xpc3Rfc2hhcmVkKGJ1ZixvZmYsbGVuLW9mZix1c2VfbG9uZyk7CisgICAgICAgIGxp c3RfZm9yX2VhY2hfZW50cnkoY2xpZW50LCZ0bWVtX2dsb2JhbC5jbGllbnRfbGlzdCxjbGllbnRf bGlzdCkKKyAgICAgICAgICAgIG9mZiArPSB0bWVtY19saXN0X2NsaWVudChjbGllbnQsIGJ1Ziwg b2ZmLCBsZW4tb2ZmLCB1c2VfbG9uZyk7CisgICAgICAgIG9mZiArPSB0bWVtY19saXN0X2dsb2Jh bF9wZXJmKGJ1ZixvZmYsbGVuLW9mZix1c2VfbG9uZyk7CisgICAgfQorICAgIGVsc2UgaWYgKCAo Y2xpZW50ID0gdG1lbV9jbGllbnRfZnJvbV9jbGlfaWQoY2xpX2lkKSkgPT0gTlVMTCkKKyAgICAg ICAgcmV0dXJuIC0xOworICAgIGVsc2UKKyAgICAgICAgb2ZmID0gdG1lbWNfbGlzdF9jbGllbnQo Y2xpZW50LCBidWYsIDAsIGxlbiwgdXNlX2xvbmcpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQgX190bWVtY19zZXRfdmFyKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdWludDMyX3Qg c3Vib3AsIHVpbnQzMl90IGFyZzEpCit7CisgICAgZG9taWRfdCBjbGlfaWQgPSBjbGllbnQtPmNs aV9pZDsKKyAgICB1aW50MzJfdCBvbGRfd2VpZ2h0OworCisgICAgc3dpdGNoIChzdWJvcCkKKyAg ICB7CisgICAgY2FzZSBYRU5fU1lTQ1RMX1RNRU1fT1BfU0VUX1dFSUdIVDoKKyAgICAgICAgb2xk X3dlaWdodCA9IGNsaWVudC0+d2VpZ2h0OworICAgICAgICBjbGllbnQtPndlaWdodCA9IGFyZzE7 CisgICAgICAgIHRtZW1fY2xpZW50X2luZm8oInRtZW06IHdlaWdodCBzZXQgdG8gJWQgZm9yICVz PSVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgYXJnMSwgdG1lbV9jbGlfaWRfc3RyLCBj bGlfaWQpOworICAgICAgICBhdG9taWNfc3ViKG9sZF93ZWlnaHQsJnRtZW1fZ2xvYmFsLmNsaWVu dF93ZWlnaHRfdG90YWwpOworICAgICAgICBhdG9taWNfYWRkKGNsaWVudC0+d2VpZ2h0LCZ0bWVt X2dsb2JhbC5jbGllbnRfd2VpZ2h0X3RvdGFsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBY RU5fU1lTQ1RMX1RNRU1fT1BfU0VUX0NBUDoKKyAgICAgICAgY2xpZW50LT5jYXAgPSBhcmcxOwor ICAgICAgICB0bWVtX2NsaWVudF9pbmZvKCJ0bWVtOiBjYXAgc2V0IHRvICVkIGZvciAlcz0lZFxu IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZzEsIHRtZW1fY2xpX2lkX3N0ciwgY2xpX2lk KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYRU5fU1lTQ1RMX1RNRU1fT1BfU0VUX0NPTVBS RVNTOgorICAgICAgICBpZiAoIHRtZW1fZGVkdXBfZW5hYmxlZCgpICkKKyAgICAgICAgeworICAg ICAgICAgICAgdG1lbV9jbGllbnRfd2FybigidG1lbTogY29tcHJlc3Npb24gJXMgZm9yIGFsbCAl c3MsIGNhbm5vdCBiZSBjaGFuZ2VkIHdoZW4gdG1lbV9kZWR1cCBpcyBlbmFibGVkXG4iLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRtZW1fY29tcHJlc3Npb25fZW5hYmxlZCgpID8gImVu YWJsZWQiIDogImRpc2FibGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bWVtX2Ns aWVudF9zdHIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGNs aWVudC0+Y29tcHJlc3MgPSBhcmcxID8gMSA6IDA7CisgICAgICAgIHRtZW1fY2xpZW50X2luZm8o InRtZW06IGNvbXByZXNzaW9uICVzIGZvciAlcz0lZFxuIiwKKyAgICAgICAgICAgIGFyZzEgPyAi ZW5hYmxlZCIgOiAiZGlzYWJsZWQiLHRtZW1fY2xpX2lkX3N0cixjbGlfaWQpOworICAgICAgICBi cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICB0bWVtX2NsaWVudF93YXJuKCJ0bWVtOiB1bmtu b3duIHN1Ym9wICVkIGZvciB0bWVtY19zZXRfdmFyXG4iLCBzdWJvcCk7CisgICAgICAgIHJldHVy biAtMTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdG1lbWNfc2V0X3Zh cihkb21pZF90IGNsaV9pZCwgdWludDMyX3Qgc3Vib3AsIHVpbnQzMl90IGFyZzEpCit7CisgICAg c3RydWN0IGNsaWVudCAqY2xpZW50OworICAgIGludCByZXQgPSAtMTsKKworICAgIGlmICggY2xp X2lkID09IFRNRU1fQ0xJX0lEX05VTEwgKQorICAgIHsKKyAgICAgICAgbGlzdF9mb3JfZWFjaF9l bnRyeShjbGllbnQsJnRtZW1fZ2xvYmFsLmNsaWVudF9saXN0LGNsaWVudF9saXN0KQorICAgICAg ICB7CisgICAgICAgICAgICByZXQgPSAgX190bWVtY19zZXRfdmFyKGNsaWVudCwgc3Vib3AsIGFy ZzEpOworICAgICAgICAgICAgaWYgKHJldCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjbGllbnQgPSB0bWVtX2NsaWVu dF9mcm9tX2NsaV9pZChjbGlfaWQpOworICAgICAgICBpZiAoIGNsaWVudCApCisgICAgICAgICAg ICByZXQgPSBfX3RtZW1jX3NldF92YXIoY2xpZW50LCBzdWJvcCwgYXJnMSk7CisgICAgfQorICAg IHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdG1lbWNfc2F2ZV9zdWJvcChpbnQgY2xpX2lk LCB1aW50MzJfdCBwb29sX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3Vi b3AsIHRtZW1fY2xpX3ZhX3BhcmFtX3QgYnVmLCB1aW50MzJfdCBhcmcxKQoreworICAgIHN0cnVj dCBjbGllbnQgKmNsaWVudCA9IHRtZW1fY2xpZW50X2Zyb21fY2xpX2lkKGNsaV9pZCk7CisgICAg c3RydWN0IHRtZW1fcG9vbCAqcG9vbCA9IChjbGllbnQgPT0gTlVMTCB8fCBwb29sX2lkID49IE1B WF9QT09MU19QRVJfRE9NQUlOKQorICAgICAgICAgICAgICAgICAgID8gTlVMTCA6IGNsaWVudC0+ cG9vbHNbcG9vbF9pZF07CisgICAgaW50IHJjID0gLTE7CisKKyAgICBzd2l0Y2goc3Vib3ApCisg ICAgeworICAgIGNhc2UgWEVOX1NZU0NUTF9UTUVNX09QX1NBVkVfR0VUX1ZFUlNJT046CisgICAg ICAgIHJjID0gVE1FTV9TUEVDX1ZFUlNJT047CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWEVO X1NZU0NUTF9UTUVNX09QX1NBVkVfR0VUX01BWFBPT0xTOgorICAgICAgICByYyA9IE1BWF9QT09M U19QRVJfRE9NQUlOOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFhFTl9TWVNDVExfVE1FTV9P UF9TQVZFX0dFVF9DTElFTlRfV0VJR0hUOgorICAgICAgICBpZiAoIGNsaWVudCA9PSBOVUxMICkK KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICByYyA9IGNsaWVudC0+d2VpZ2h0ID09IC0xID8g LTIgOiBjbGllbnQtPndlaWdodDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYRU5fU1lTQ1RM X1RNRU1fT1BfU0FWRV9HRVRfQ0xJRU5UX0NBUDoKKyAgICAgICAgaWYgKCBjbGllbnQgPT0gTlVM TCApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcmMgPSBjbGllbnQtPmNhcCA9PSAtMSA/ IC0yIDogY2xpZW50LT5jYXA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWEVOX1NZU0NUTF9U TUVNX09QX1NBVkVfR0VUX0NMSUVOVF9GTEFHUzoKKyAgICAgICAgaWYgKCBjbGllbnQgPT0gTlVM TCApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcmMgPSAoY2xpZW50LT5jb21wcmVzcyA/ IFRNRU1fQ0xJRU5UX0NPTVBSRVNTIDogMCApIHwKKyAgICAgICAgICAgICAoY2xpZW50LT53YXNf ZnJvemVuID8gVE1FTV9DTElFTlRfRlJPWkVOIDogMCApOworICAgICAgICBicmVhazsKKyAgICBj YXNlIFhFTl9TWVNDVExfVE1FTV9PUF9TQVZFX0dFVF9QT09MX0ZMQUdTOgorICAgICAgICAgaWYg KCBwb29sID09IE5VTEwgKQorICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgcmMgPSAocG9v bC0+cGVyc2lzdGVudCA/IFRNRU1fUE9PTF9QRVJTSVNUIDogMCkgfAorICAgICAgICAgICAgICAo cG9vbC0+c2hhcmVkID8gVE1FTV9QT09MX1NIQVJFRCA6IDApIHwKKyAgICAgICAgICAgICAgKFBP T0xfUEFHRVNISUZUIDw8IFRNRU1fUE9PTF9QQUdFU0laRV9TSElGVCkgfAorICAgICAgICAgICAg ICAoVE1FTV9TUEVDX1ZFUlNJT04gPDwgVE1FTV9QT09MX1ZFUlNJT05fU0hJRlQpOworICAgICAg ICBicmVhazsKKyAgICBjYXNlIFhFTl9TWVNDVExfVE1FTV9PUF9TQVZFX0dFVF9QT09MX05QQUdF UzoKKyAgICAgICAgIGlmICggcG9vbCA9PSBOVUxMICkKKyAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgcmMgPSBfYXRvbWljX3JlYWQocG9vbC0+cGdwX2NvdW50KTsKKyAgICAgICAgYnJlYWs7 CisgICAgY2FzZSBYRU5fU1lTQ1RMX1RNRU1fT1BfU0FWRV9HRVRfUE9PTF9VVUlEOgorICAgICAg ICAgaWYgKCBwb29sID09IE5VTEwgKQorICAgICAgICAgICAgIGJyZWFrOworICAgICAgICByYyA9 IDA7CisgICAgICAgIGlmICggY29weV90b19ndWVzdChndWVzdF9oYW5kbGVfY2FzdChidWYsIHZv aWQpLCBwb29sLT51dWlkLCAyKSApCisgICAgICAgICAgICByYyA9IC1FRkFVTFQ7CisgICAgICAg IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJjID0gLTE7CisgICAgfQorICAgIHJldHVy biByYzsKK30KKworaW50IHRtZW1fY29udHJvbChzdHJ1Y3QgeGVuX3N5c2N0bF90bWVtX29wICpv cCkKK3sKKyAgICBpbnQgcmV0OworICAgIHVpbnQzMl90IHBvb2xfaWQgPSBvcC0+cG9vbF9pZDsK KyAgICB1aW50MzJfdCBjbWQgPSBvcC0+Y21kOworCisgICAgaWYgKCBvcC0+cGFkICE9IDAgKQor ICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgIHdyaXRlX2xvY2soJnRtZW1fcndsb2NrKTsK KworICAgIHN3aXRjaCAoY21kKQorICAgIHsKKyAgICBjYXNlIFhFTl9TWVNDVExfVE1FTV9PUF9U SEFXOgorICAgIGNhc2UgWEVOX1NZU0NUTF9UTUVNX09QX0ZSRUVaRToKKyAgICBjYXNlIFhFTl9T WVNDVExfVE1FTV9PUF9ERVNUUk9ZOgorICAgICAgICByZXQgPSB0bWVtY19mcmVlemVfcG9vbHMo b3AtPmNsaV9pZCwgY21kKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYRU5fU1lTQ1RMX1RN RU1fT1BfRkxVU0g6CisgICAgICAgIHJldCA9IHRtZW1jX2ZsdXNoX21lbShvcC0+Y2xpX2lkLG9w LT5hcmcxKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYRU5fU1lTQ1RMX1RNRU1fT1BfTElT VDoKKyAgICAgICAgcmV0ID0gdG1lbWNfbGlzdChvcC0+Y2xpX2lkLAorICAgICAgICAgICAgICAg ICAgICAgICAgIGd1ZXN0X2hhbmRsZV9jYXN0KG9wLT5idWYsIGNoYXIpLCBvcC0+YXJnMSwgb3At PmFyZzIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFhFTl9TWVNDVExfVE1FTV9PUF9TRVRf V0VJR0hUOgorICAgIGNhc2UgWEVOX1NZU0NUTF9UTUVNX09QX1NFVF9DQVA6CisgICAgY2FzZSBY RU5fU1lTQ1RMX1RNRU1fT1BfU0VUX0NPTVBSRVNTOgorICAgICAgICByZXQgPSB0bWVtY19zZXRf dmFyKG9wLT5jbGlfaWQsIGNtZCwgb3AtPmFyZzEpOworICAgICAgICBicmVhazsKKyAgICBjYXNl IFhFTl9TWVNDVExfVE1FTV9PUF9RVUVSWV9GUkVFQUJMRV9NQjoKKyAgICAgICAgcmV0ID0gdG1l bV9mcmVlYWJsZV9wYWdlcygpID4+ICgyMCAtIFBBR0VfU0hJRlQpOworICAgICAgICBicmVhazsK KyAgICBjYXNlIFhFTl9TWVNDVExfVE1FTV9PUF9TQVZFX0dFVF9WRVJTSU9OOgorICAgIGNhc2Ug WEVOX1NZU0NUTF9UTUVNX09QX1NBVkVfR0VUX01BWFBPT0xTOgorICAgIGNhc2UgWEVOX1NZU0NU TF9UTUVNX09QX1NBVkVfR0VUX0NMSUVOVF9XRUlHSFQ6CisgICAgY2FzZSBYRU5fU1lTQ1RMX1RN RU1fT1BfU0FWRV9HRVRfQ0xJRU5UX0NBUDoKKyAgICBjYXNlIFhFTl9TWVNDVExfVE1FTV9PUF9T QVZFX0dFVF9DTElFTlRfRkxBR1M6CisgICAgY2FzZSBYRU5fU1lTQ1RMX1RNRU1fT1BfU0FWRV9H RVRfUE9PTF9GTEFHUzoKKyAgICBjYXNlIFhFTl9TWVNDVExfVE1FTV9PUF9TQVZFX0dFVF9QT09M X05QQUdFUzoKKyAgICBjYXNlIFhFTl9TWVNDVExfVE1FTV9PUF9TQVZFX0dFVF9QT09MX1VVSUQ6 CisgICAgICAgIHJldCA9IHRtZW1jX3NhdmVfc3Vib3Aob3AtPmNsaV9pZCwgcG9vbF9pZCwgY21k LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1ZXN0X2hhbmRsZV9jYXN0KG9wLT5i dWYsIGNoYXIpLCBvcC0+YXJnMSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg ICAgIHJldCA9IGRvX3RtZW1fY29udHJvbChvcCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor ICAgIHdyaXRlX3VubG9jaygmdG1lbV9yd2xvY2spOworCisgICAgcmV0dXJuIHJldDsKK30KKwor LyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJT RCIKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQKKyAqIGluZGVudC10YWJz LW1vZGU6IG5pbAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS94ZW4vdG1l bV9jb250cm9sLmggYi94ZW4vaW5jbHVkZS94ZW4vdG1lbV9jb250cm9sLmgKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRiYzA3ZgotLS0gL2Rldi9udWxsCisrKyBiL3hlbi9p bmNsdWRlL3hlbi90bWVtX2NvbnRyb2wuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJp Z2h0IChjKSAyMDE2IE9yYWNsZSBhbmQvb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCisgKgorICovCisKKyNpZm5kZWYgX19YRU5fVE1FTV9DT05UUk9MX0hfXworI2RlZmlu ZSBfX1hFTl9UTUVNX0NPTlRST0xfSF9fCisKKyNpZmRlZiBDT05GSUdfVE1FTQorI2luY2x1ZGUg PHB1YmxpYy9zeXNjdGwuaD4KKy8qIFZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zIHRoYXQgdG1lbV9j b250cm9sLmMgbmVlZHMgZnJvbSB0bWVtLmMgKi8KKworZXh0ZXJuIHN0cnVjdCB0bWVtX3N0YXRp c3RpY3MgdG1lbV9zdGF0czsKK2V4dGVybiBzdHJ1Y3QgdG1lbV9nbG9iYWwgdG1lbV9nbG9iYWw7 CisKK2V4dGVybiByd2xvY2tfdCB0bWVtX3J3bG9jazsKKworaW50IHRtZW1fZXZpY3Qodm9pZCk7 CitpbnQgZG9fdG1lbV9jb250cm9sKHN0cnVjdCB4ZW5fc3lzY3RsX3RtZW1fb3AgKm9wKTsKKwor I2VuZGlmIC8qIENPTkZJR19UTUVNICovCisKKyNlbmRpZiAvKiBfX1hFTl9UTUVNX0NPTlRST0xf SF9fICovCisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWZpbGUt c3R5bGU6ICJCU0QiCisgKiBjLWJhc2ljLW9mZnNldDogNAorICogdGFiLXdpZHRoOiA0CisgKiBp bmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEveGVuL2luY2x1 ZGUveGVuL3RtZW1feGVuLmggYi94ZW4vaW5jbHVkZS94ZW4vdG1lbV94ZW4uaAppbmRleCAxOWVk ODM1Li41ODI5NTFhIDEwMDY0NAotLS0gYS94ZW4vaW5jbHVkZS94ZW4vdG1lbV94ZW4uaAorKysg Yi94ZW4vaW5jbHVkZS94ZW4vdG1lbV94ZW4uaApAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUg PHhlbi9ndWVzdF9hY2Nlc3MuaD4gLyogY29weV9mcm9tX2d1ZXN0ICovCiAjaW5jbHVkZSA8eGVu L2hhc2guaD4gLyogaGFzaF9sb25nICovCiAjaW5jbHVkZSA8eGVuL2RvbWFpbl9wYWdlLmg+IC8q IF9fbWFwX2RvbWFpbl9wYWdlICovCisjaW5jbHVkZSA8eGVuL3JidHJlZS5oPiAvKiBzdHJ1Y3Qg cmJfcm9vdCAqLwogI2luY2x1ZGUgPHhzbS94c20uaD4gLyogeHNtX3RtZW1fY29udHJvbCAqLwog I2luY2x1ZGUgPHB1YmxpYy90bWVtLmg+CiAjaWZkZWYgQ09ORklHX0NPTVBBVApAQCAtMzQxLDQg KzM0MiwxMzEgQEAgZXh0ZXJuIGludCB0bWVtX2NvcHlfdHplX3RvX2NsaWVudCh4ZW5fcGZuX3Qg Y21mbiwgdm9pZCAqdG1lbV92YSwgcGFnZXNpemVfdCBsZW4KICNkZWZpbmUgdG1lbV9jbGllbnRf d2FybihmbXQsIGFyZ3MuLi4pIHByaW50ayhYRU5MT0dfR19XQVJOSU5HIGZtdCwgIyNhcmdzKQog I2RlZmluZSB0bWVtX2NsaWVudF9pbmZvKGZtdCwgYXJncy4uLikgcHJpbnRrKFhFTkxPR19HX0lO Rk8gZm10LCAjI2FyZ3MpCiAKKy8qIEdsb2JhbCBzdGF0aXN0aWNzIChub25lIG5lZWQgdG8gYmUg bG9ja2VkKS4gKi8KK3N0cnVjdCB0bWVtX3N0YXRpc3RpY3MgeworICAgIHVuc2lnbmVkIGxvbmcg dG90YWxfdG1lbV9vcHM7CisgICAgdW5zaWduZWQgbG9uZyBlcnJvcmVkX3RtZW1fb3BzOworICAg IHVuc2lnbmVkIGxvbmcgdG90YWxfZmx1c2hfcG9vbDsKKyAgICB1bnNpZ25lZCBsb25nIGFsbG9j X2ZhaWxlZDsKKyAgICB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VfZmFpbGVkOworICAgIHVuc2ln bmVkIGxvbmcgZXZpY3RlZF9wZ3M7CisgICAgdW5zaWduZWQgbG9uZyBldmljdF9hdHRlbXB0czsK KyAgICB1bnNpZ25lZCBsb25nIHJlbGlucV9wZ3M7CisgICAgdW5zaWduZWQgbG9uZyByZWxpbnFf YXR0ZW1wdHM7CisgICAgdW5zaWduZWQgbG9uZyBtYXhfZXZpY3RzX3Blcl9yZWxpbnE7CisgICAg dW5zaWduZWQgbG9uZyBsb3dfb25fbWVtb3J5OworICAgIHVuc2lnbmVkIGxvbmcgZGVkdXBlZF9w dXRzOworICAgIHVuc2lnbmVkIGxvbmcgdG90X2dvb2RfZXBoX3B1dHM7CisgICAgaW50IGdsb2Jh bF9vYmpfY291bnRfbWF4OworICAgIGludCBnbG9iYWxfcGdwX2NvdW50X21heDsKKyAgICBpbnQg Z2xvYmFsX3BjZF9jb3VudF9tYXg7CisgICAgaW50IGdsb2JhbF9wYWdlX2NvdW50X21heDsKKyAg ICBpbnQgZ2xvYmFsX3J0cmVlX25vZGVfY291bnRfbWF4OworICAgIGxvbmcgZ2xvYmFsX2VwaF9j b3VudF9tYXg7CisgICAgdW5zaWduZWQgbG9uZyBmYWlsZWRfY29waWVzOworICAgIHVuc2lnbmVk IGxvbmcgcGNkX3RvdF90emVfc2l6ZTsKKyAgICB1bnNpZ25lZCBsb25nIHBjZF90b3RfY3NpemU7 CisgICAgLyogR2xvYmFsIGNvdW50ZXJzIChzaG91bGQgdXNlIGxvbmdfYXRvbWljX3QgYWNjZXNz KS4gKi8KKyAgICBhdG9taWNfdCBnbG9iYWxfb2JqX2NvdW50OworICAgIGF0b21pY190IGdsb2Jh bF9wZ3BfY291bnQ7CisgICAgYXRvbWljX3QgZ2xvYmFsX3BjZF9jb3VudDsKKyAgICBhdG9taWNf dCBnbG9iYWxfcGFnZV9jb3VudDsKKyAgICBhdG9taWNfdCBnbG9iYWxfcnRyZWVfbm9kZV9jb3Vu dDsKK307CisKKyNkZWZpbmUgYXRvbWljX2luY19hbmRfbWF4KF9jKSBkbyB7IFwKKyAgICBhdG9t aWNfaW5jKCZ0bWVtX3N0YXRzLl9jKTsgXAorICAgIGlmICggX2F0b21pY19yZWFkKHRtZW1fc3Rh dHMuX2MpID4gdG1lbV9zdGF0cy5fYyMjX21heCApIFwKKyAgICAgICAgdG1lbV9zdGF0cy5fYyMj X21heCA9IF9hdG9taWNfcmVhZCh0bWVtX3N0YXRzLl9jKTsgXAorfSB3aGlsZSAoMCkKKworI2Rl ZmluZSBhdG9taWNfZGVjX2FuZF9hc3NlcnQoX2MpIGRvIHsgXAorICAgIGF0b21pY19kZWMoJnRt ZW1fc3RhdHMuX2MpOyBcCisgICAgQVNTRVJUKF9hdG9taWNfcmVhZCh0bWVtX3N0YXRzLl9jKSA+ PSAwKTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBNQVhfR0xPQkFMX1NIQVJFRF9QT09MUyAg MTYKK3N0cnVjdCB0bWVtX2dsb2JhbCB7CisgICAgc3RydWN0IGxpc3RfaGVhZCBlcGhlbWVyYWxf cGFnZV9saXN0OyAgLyogQWxsIHBhZ2VzIGluIGVwaGVtZXJhbCBwb29scy4gKi8KKyAgICBzdHJ1 Y3QgbGlzdF9oZWFkIGNsaWVudF9saXN0OworICAgIHN0cnVjdCB0bWVtX3Bvb2wgKnNoYXJlZF9w b29sc1tNQVhfR0xPQkFMX1NIQVJFRF9QT09MU107CisgICAgYm9vbF90IHNoYXJlZF9hdXRoOwor ICAgIGxvbmcgZXBoX2NvdW50OyAgLyogQXRvbWljaXR5IGRlcGVuZHMgb24gZXBoX2xpc3RzX3Nw aW5sb2NrLiAqLworICAgIGF0b21pY190IGNsaWVudF93ZWlnaHRfdG90YWw7Cit9OworCisjZGVm aW5lIE1BWF9QT09MU19QRVJfRE9NQUlOIDE2CisKK3N0cnVjdCB0bWVtX3Bvb2w7CitzdHJ1Y3Qg dG1lbV9wYWdlX2Rlc2NyaXB0b3I7CitzdHJ1Y3QgdG1lbV9wYWdlX2NvbnRlbnRfZGVzY3JpcHRv cjsKK3N0cnVjdCBjbGllbnQgeworICAgIHN0cnVjdCBsaXN0X2hlYWQgY2xpZW50X2xpc3Q7Cisg ICAgc3RydWN0IHRtZW1fcG9vbCAqcG9vbHNbTUFYX1BPT0xTX1BFUl9ET01BSU5dOworICAgIHN0 cnVjdCBkb21haW4gKmRvbWFpbjsKKyAgICBzdHJ1Y3QgeG1lbV9wb29sICpwZXJzaXN0ZW50X3Bv b2w7CisgICAgc3RydWN0IGxpc3RfaGVhZCBlcGhlbWVyYWxfcGFnZV9saXN0OworICAgIGxvbmcg ZXBoX2NvdW50LCBlcGhfY291bnRfbWF4OworICAgIGRvbWlkX3QgY2xpX2lkOworICAgIHVpbnQz Ml90IHdlaWdodDsKKyAgICB1aW50MzJfdCBjYXA7CisgICAgYm9vbF90IGNvbXByZXNzOworICAg IGJvb2xfdCBmcm96ZW47CisgICAgYm9vbF90IHNoYXJlZF9hdXRoX3JlcXVpcmVkOworICAgIC8q IEZvciBzYXZlL3Jlc3RvcmUvbWlncmF0aW9uLiAqLworICAgIGJvb2xfdCBsaXZlX21pZ3JhdGlu ZzsKKyAgICBib29sX3Qgd2FzX2Zyb3plbjsKKyAgICBzdHJ1Y3QgbGlzdF9oZWFkIHBlcnNpc3Rl bnRfaW52YWxpZGF0ZWRfbGlzdDsKKyAgICBzdHJ1Y3QgdG1lbV9wYWdlX2Rlc2NyaXB0b3IgKmN1 cl9wZ3A7CisgICAgLyogU3RhdGlzdGljcyBjb2xsZWN0aW9uLiAqLworICAgIHVuc2lnbmVkIGxv bmcgY29tcHJlc3NfcG9vciwgY29tcHJlc3Nfbm9tZW07CisgICAgdW5zaWduZWQgbG9uZyBjb21w cmVzc2VkX3BhZ2VzOworICAgIHVpbnQ2NF90IGNvbXByZXNzZWRfc3VtX3NpemU7CisgICAgdWlu dDY0X3QgdG90YWxfY3ljbGVzOworICAgIHVuc2lnbmVkIGxvbmcgc3VjY19wZXJzX3B1dHMsIHN1 Y2NfZXBoX2dldHMsIHN1Y2NfcGVyc19nZXRzOworICAgIC8qIFNoYXJlZCBwb29sIGF1dGhlbnRp Y2F0aW9uLiAqLworICAgIHVpbnQ2NF90IHNoYXJlZF9hdXRoX3V1aWRbTUFYX0dMT0JBTF9TSEFS RURfUE9PTFNdWzJdOworfTsKKworI2RlZmluZSBQT09MX1BBR0VTSElGVCAoUEFHRV9TSElGVCAt IDEyKQorI2RlZmluZSBPQkpfSEFTSF9CVUNLRVRTIDI1NiAvKiBNdXN0IGJlIHBvd2VyIG9mIHR3 by4gKi8KKyNkZWZpbmUgT0JKX0hBU0hfQlVDS0VUU19NQVNLIChPQkpfSEFTSF9CVUNLRVRTLTEp CisKKyNkZWZpbmUgaXNfcGVyc2lzdGVudChfcCkgIChfcC0+cGVyc2lzdGVudCkKKyNkZWZpbmUg aXNfc2hhcmVkKF9wKSAgICAgIChfcC0+c2hhcmVkKQorCitzdHJ1Y3QgdG1lbV9wb29sIHsKKyAg ICBib29sX3Qgc2hhcmVkOworICAgIGJvb2xfdCBwZXJzaXN0ZW50OworICAgIGJvb2xfdCBpc19k eWluZzsKKyAgICBzdHJ1Y3QgY2xpZW50ICpjbGllbnQ7CisgICAgdWludDY0X3QgdXVpZFsyXTsg LyogMCBmb3IgcHJpdmF0ZSwgbm9uLXplcm8gZm9yIHNoYXJlZC4gKi8KKyAgICB1aW50MzJfdCBw b29sX2lkOworICAgIHJ3bG9ja190IHBvb2xfcndsb2NrOworICAgIHN0cnVjdCByYl9yb290IG9i al9yYl9yb290W09CSl9IQVNIX0JVQ0tFVFNdOyAvKiBQcm90ZWN0ZWQgYnkgcG9vbF9yd2xvY2su ICovCisgICAgc3RydWN0IGxpc3RfaGVhZCBzaGFyZV9saXN0OyAvKiBWYWxpZCBpZiBzaGFyZWQu ICovCisgICAgaW50IHNoYXJlZF9jb3VudDsgLyogVmFsaWQgaWYgc2hhcmVkLiAqLworICAgIC8q IEZvciBzYXZlL3Jlc3RvcmUvbWlncmF0aW9uLiAqLworICAgIHN0cnVjdCBsaXN0X2hlYWQgcGVy c2lzdGVudF9wYWdlX2xpc3Q7CisgICAgc3RydWN0IHRtZW1fcGFnZV9kZXNjcmlwdG9yICpjdXJf cGdwOworICAgIC8qIFN0YXRpc3RpY3MgY29sbGVjdGlvbi4gKi8KKyAgICBhdG9taWNfdCBwZ3Bf Y291bnQ7CisgICAgaW50IHBncF9jb3VudF9tYXg7CisgICAgbG9uZyBvYmpfY291bnQ7ICAvKiBB dG9taWNpdHkgZGVwZW5kcyBvbiBwb29sX3J3bG9jayBoZWxkIGZvciB3cml0ZS4gKi8KKyAgICBs b25nIG9ial9jb3VudF9tYXg7CisgICAgdW5zaWduZWQgbG9uZyBvYmpub2RlX2NvdW50LCBvYmpu b2RlX2NvdW50X21heDsKKyAgICB1aW50NjRfdCBzdW1fbGlmZV9jeWNsZXM7CisgICAgdWludDY0 X3Qgc3VtX2V2aWN0ZWRfY3ljbGVzOworICAgIHVuc2lnbmVkIGxvbmcgcHV0cywgZ29vZF9wdXRz LCBub19tZW1fcHV0czsKKyAgICB1bnNpZ25lZCBsb25nIGR1cF9wdXRzX2ZsdXNoZWQsIGR1cF9w dXRzX3JlcGxhY2VkOworICAgIHVuc2lnbmVkIGxvbmcgZ2V0cywgZm91bmRfZ2V0czsKKyAgICB1 bnNpZ25lZCBsb25nIGZsdXNocywgZmx1c2hzX2ZvdW5kOworICAgIHVuc2lnbmVkIGxvbmcgZmx1 c2hfb2JqcywgZmx1c2hfb2Jqc19mb3VuZDsKK307CisKK3N0cnVjdCBzaGFyZV9saXN0IHsKKyAg ICBzdHJ1Y3QgbGlzdF9oZWFkIHNoYXJlX2xpc3Q7CisgICAgc3RydWN0IGNsaWVudCAqY2xpZW50 OworfTsKKwogI2VuZGlmIC8qIF9fWEVOX1RNRU1fWEVOX0hfXyAqLwotLSAKMi41LjUKCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFp bGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHA6Ly9saXN0cy54ZW4ub3JnL3hl bi1kZXZlbAo=