From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: [PULL 21/21] move xen-mapcache.c to hw/i386/xen/ Date: Fri, 21 Apr 2017 13:15:02 -0700 Message-ID: <1492805702-19690-21-git-send-email-sstabellini@kernel.org> References: <1492805702-19690-1-git-send-email-sstabellini@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d1eyB-0000hl-BK for xen-devel@lists.xenproject.org; Fri, 21 Apr 2017 20:15:55 +0000 In-Reply-To: <1492805702-19690-1-git-send-email-sstabellini@kernel.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: peter.maydell@linaro.org Cc: sstabellini@kernel.org, stefanha@gmail.com, qemu-devel@nongnu.org, Anthony Xu , stefanha@redhat.com, anthony.perard@citrix.com, xen-devel@lists.xenproject.org List-Id: xen-devel@lists.xenproject.org RnJvbTogQW50aG9ueSBYdSA8YW50aG9ueS54dUBpbnRlbC5jb20+Cgptb3ZlIHhlbi1tYXBjYWNo ZS5jIHRvIGh3L2kzODYveGVuLwoKU2lnbmVkLW9mZiAtYnk6IEFudGhvbnkgWHUgPGFudGhvbnku eHVAaW50ZWwuY29tPgpSZXZpZXdlZC1ieTogU3RlZmFubyBTdGFiZWxsaW5pIDxzc3RhYmVsbGlu aUBrZXJuZWwub3JnPgotLS0KIE1ha2VmaWxlLnRhcmdldCAgICAgICAgICAgICAgICAgICAgfCAg IDMgLQogZGVmYXVsdC1jb25maWdzL2kzODYtc29mdG1tdS5tYWsgICB8ICAgMSAtCiBkZWZhdWx0 LWNvbmZpZ3MveDg2XzY0LXNvZnRtbXUubWFrIHwgICAxIC0KIGh3L2kzODYveGVuL01ha2VmaWxl Lm9ianMgICAgICAgICAgfCAgIDIgKy0KIGh3L2kzODYveGVuL3RyYWNlLWV2ZW50cyAgICAgICAg ICAgfCAgIDYgKwogaHcvaTM4Ni94ZW4veGVuLW1hcGNhY2hlLmMgICAgICAgICB8IDQ1OSArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB0cmFjZS1ldmVudHMgICAgICAgICAg ICAgICAgICAgICAgIHwgICA1IC0KIHhlbi1tYXBjYWNoZS5jICAgICAgICAgICAgICAgICAgICAg fCA0NTkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogOCBmaWxlcyBjaGFu Z2VkLCA0NjYgaW5zZXJ0aW9ucygrKSwgNDcwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAw NjQ0IGh3L2kzODYveGVuL3hlbi1tYXBjYWNoZS5jCiBkZWxldGUgbW9kZSAxMDA2NDQgeGVuLW1h cGNhY2hlLmMKCmRpZmYgLS1naXQgYS9NYWtlZmlsZS50YXJnZXQgYi9NYWtlZmlsZS50YXJnZXQK aW5kZXggZDVmZjBjNy4uYTUzNTk4MCAxMDA2NDQKLS0tIGEvTWFrZWZpbGUudGFyZ2V0CisrKyBi L01ha2VmaWxlLnRhcmdldApAQCAtMTQ5LDkgKzE0OSw2IEBAIG9iai15ICs9IGR1bXAubwogb2Jq LXkgKz0gbWlncmF0aW9uL3JhbS5vIG1pZ3JhdGlvbi9zYXZldm0ubwogTElCUyA6PSAkKGxpYnNf c29mdG1tdSkgJChMSUJTKQogCi0jIHhlbiBzdXBwb3J0Ci1vYmotJChDT05GSUdfWEVOX0kzODYp ICs9IHhlbi1tYXBjYWNoZS5vCi0KICMgSGFyZHdhcmUgc3VwcG9ydAogaWZlcSAoJChUQVJHRVRf TkFNRSksIHNwYXJjNjQpCiBvYmoteSArPSBody9zcGFyYzY0LwpkaWZmIC0tZ2l0IGEvZGVmYXVs dC1jb25maWdzL2kzODYtc29mdG1tdS5tYWsgYi9kZWZhdWx0LWNvbmZpZ3MvaTM4Ni1zb2Z0bW11 Lm1hawppbmRleCAwMjllOTUyLi5kMmFiMmY2IDEwMDY0NAotLS0gYS9kZWZhdWx0LWNvbmZpZ3Mv aTM4Ni1zb2Z0bW11Lm1haworKysgYi9kZWZhdWx0LWNvbmZpZ3MvaTM4Ni1zb2Z0bW11Lm1hawpA QCAtMzksNyArMzksNiBAQCBDT05GSUdfVFBNX1RJUz0kKENPTkZJR19UUE0pCiBDT05GSUdfTUMx NDY4MThSVEM9eQogQ09ORklHX1BDSV9QSUlYPXkKIENPTkZJR19XRFRfSUI3MDA9eQotQ09ORklH X1hFTl9JMzg2PSQoQ09ORklHX1hFTikKIENPTkZJR19JU0FfREVCVUc9eQogQ09ORklHX0lTQV9U RVNUREVWPXkKIENPTkZJR19WTVBPUlQ9eQpkaWZmIC0tZ2l0IGEvZGVmYXVsdC1jb25maWdzL3g4 Nl82NC1zb2Z0bW11Lm1hayBiL2RlZmF1bHQtY29uZmlncy94ODZfNjQtc29mdG1tdS5tYWsKaW5k ZXggZDFkNzQzMi4uOWJkZTJmMSAxMDA2NDQKLS0tIGEvZGVmYXVsdC1jb25maWdzL3g4Nl82NC1z b2Z0bW11Lm1haworKysgYi9kZWZhdWx0LWNvbmZpZ3MveDg2XzY0LXNvZnRtbXUubWFrCkBAIC0z OSw3ICszOSw2IEBAIENPTkZJR19UUE1fVElTPSQoQ09ORklHX1RQTSkKIENPTkZJR19NQzE0Njgx OFJUQz15CiBDT05GSUdfUENJX1BJSVg9eQogQ09ORklHX1dEVF9JQjcwMD15Ci1DT05GSUdfWEVO X0kzODY9JChDT05GSUdfWEVOKQogQ09ORklHX0lTQV9ERUJVRz15CiBDT05GSUdfSVNBX1RFU1RE RVY9eQogQ09ORklHX1ZNUE9SVD15CmRpZmYgLS1naXQgYS9ody9pMzg2L3hlbi9NYWtlZmlsZS5v YmpzIGIvaHcvaTM4Ni94ZW4vTWFrZWZpbGUub2JqcwppbmRleCBkYWY0ZjUzLi5iZTlkMTBjIDEw MDY0NAotLS0gYS9ody9pMzg2L3hlbi9NYWtlZmlsZS5vYmpzCisrKyBiL2h3L2kzODYveGVuL01h a2VmaWxlLm9ianMKQEAgLTEgKzEgQEAKLW9iai15ICs9IHhlbl9wbGF0Zm9ybS5vIHhlbl9hcGlj Lm8geGVuX3B2ZGV2aWNlLm8geGVuLWh2bS5vCitvYmoteSArPSB4ZW5fcGxhdGZvcm0ubyB4ZW5f YXBpYy5vIHhlbl9wdmRldmljZS5vIHhlbi1odm0ubyB4ZW4tbWFwY2FjaGUubwpkaWZmIC0tZ2l0 IGEvaHcvaTM4Ni94ZW4vdHJhY2UtZXZlbnRzIGIvaHcvaTM4Ni94ZW4vdHJhY2UtZXZlbnRzCmlu ZGV4IGYyNWQ2MjIuLjU0NzQzOGQgMTAwNjQ0Ci0tLSBhL2h3L2kzODYveGVuL3RyYWNlLWV2ZW50 cworKysgYi9ody9pMzg2L3hlbi90cmFjZS1ldmVudHMKQEAgLTE1LDMgKzE1LDkgQEAgY3B1X2lv cmVxX3Bpbyh2b2lkICpyZXEsIHVpbnQzMl90IGRpciwgdWludDMyX3QgZGYsIHVpbnQzMl90IGRh dGFfaXNfcHRyLCB1aW50NjQKIGNwdV9pb3JlcV9waW9fcmVhZF9yZWcodm9pZCAqcmVxLCB1aW50 NjRfdCBkYXRhLCB1aW50NjRfdCBhZGRyLCB1aW50MzJfdCBzaXplKSAiSS9PPSVwIHBpbyByZWFk IHJlZyBkYXRhPSUjIlBSSXg2NCIgcG9ydD0lIyJQUkl4NjQiIHNpemU9JWQiCiBjcHVfaW9yZXFf cGlvX3dyaXRlX3JlZyh2b2lkICpyZXEsIHVpbnQ2NF90IGRhdGEsIHVpbnQ2NF90IGFkZHIsIHVp bnQzMl90IHNpemUpICJJL089JXAgcGlvIHdyaXRlIHJlZyBkYXRhPSUjIlBSSXg2NCIgcG9ydD0l IyJQUkl4NjQiIHNpemU9JWQiCiBjcHVfaW9yZXFfbW92ZSh2b2lkICpyZXEsIHVpbnQzMl90IGRp ciwgdWludDMyX3QgZGYsIHVpbnQzMl90IGRhdGFfaXNfcHRyLCB1aW50NjRfdCBhZGRyLCB1aW50 NjRfdCBkYXRhLCB1aW50MzJfdCBjb3VudCwgdWludDMyX3Qgc2l6ZSkgIkkvTz0lcCBjb3B5IGRp cj0lZCBkZj0lZCBwdHI9JWQgcG9ydD0lIyJQUkl4NjQiIGRhdGE9JSMiUFJJeDY0IiBjb3VudD0l ZCBzaXplPSVkIgorCisjIHhlbi1tYXBjYWNoZS5jCit4ZW5fbWFwX2NhY2hlKHVpbnQ2NF90IHBo eXNfYWRkcikgIndhbnQgJSMiUFJJeDY0Cit4ZW5fcmVtYXBfYnVja2V0KHVpbnQ2NF90IGluZGV4 KSAiaW5kZXggJSMiUFJJeDY0Cit4ZW5fbWFwX2NhY2hlX3JldHVybih2b2lkKiBwdHIpICIlcCIK KwpkaWZmIC0tZ2l0IGEvaHcvaTM4Ni94ZW4veGVuLW1hcGNhY2hlLmMgYi9ody9pMzg2L3hlbi94 ZW4tbWFwY2FjaGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWRlYmRm Ci0tLSAvZGV2L251bGwKKysrIGIvaHcvaTM4Ni94ZW4veGVuLW1hcGNhY2hlLmMKQEAgLTAsMCAr MSw0NTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgICAgICAgQ2l0cml4IEx0ZC4KKyAq CisgKiBUaGlzIHdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BM LCB2ZXJzaW9uIDIuICBTZWUKKyAqIHRoZSBDT1BZSU5HIGZpbGUgaW4gdGhlIHRvcC1sZXZlbCBk aXJlY3RvcnkuCisgKgorICogQ29udHJpYnV0aW9ucyBhZnRlciAyMDEyLTAxLTEzIGFyZSBsaWNl bnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR1BMLCB2ZXJzaW9uIDIgb3IgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSAicWVtdS9v c2RlcC5oIgorCisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisKKyNpbmNsdWRlICJody94ZW4v eGVuX2JhY2tlbmQuaCIKKyNpbmNsdWRlICJzeXNlbXUvYmxvY2tkZXYuaCIKKyNpbmNsdWRlICJx ZW11L2JpdG1hcC5oIgorCisjaW5jbHVkZSA8eGVuL2h2bS9wYXJhbXMuaD4KKworI2luY2x1ZGUg InN5c2VtdS94ZW4tbWFwY2FjaGUuaCIKKyNpbmNsdWRlICJ0cmFjZS5oIgorCisKKy8vI2RlZmlu ZSBNQVBDQUNIRV9ERUJVRworCisjaWZkZWYgTUFQQ0FDSEVfREVCVUcKKyMgIGRlZmluZSBEUFJJ TlRGKGZtdCwgLi4uKSBkbyB7IFwKKyAgICBmcHJpbnRmKHN0ZGVyciwgInhlbl9tYXBjYWNoZTog IiBmbXQsICMjIF9fVkFfQVJHU19fKTsgXAorfSB3aGlsZSAoMCkKKyNlbHNlCisjICBkZWZpbmUg RFBSSU5URihmbXQsIC4uLikgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZiBIT1NUX0xP TkdfQklUUyA9PSAzMgorIyAgZGVmaW5lIE1DQUNIRV9CVUNLRVRfU0hJRlQgMTYKKyMgIGRlZmlu ZSBNQ0FDSEVfTUFYX1NJWkUgICAgICgxVUw8PDMxKSAvKiAyR0IgQ2FwICovCisjZWxzZQorIyAg ZGVmaW5lIE1DQUNIRV9CVUNLRVRfU0hJRlQgMjAKKyMgIGRlZmluZSBNQ0FDSEVfTUFYX1NJWkUg ICAgICgxVUw8PDM1KSAvKiAzMkdCIENhcCAqLworI2VuZGlmCisjZGVmaW5lIE1DQUNIRV9CVUNL RVRfU0laRSAoMVVMIDw8IE1DQUNIRV9CVUNLRVRfU0hJRlQpCisKKy8qIFRoaXMgaXMgdGhlIHNp emUgb2YgdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSByZXNlcnZlIHRvIFFFTVUgdGhhdCB3aWxs IG5vdAorICogYmUgdXNlIGJ5IE1hcENhY2hlLgorICogRnJvbSBlbXBpcmljYWwgdGVzdHMgSSBv YnNlcnZlZCB0aGF0IHFlbXUgdXNlIDc1TUIgbW9yZSB0aGFuIHRoZQorICogbWF4X21jYWNoZV9z aXplLgorICovCisjZGVmaW5lIE5PTl9NQ0FDSEVfTUVNT1JZX1NJWkUgKDgwICogMTAyNCAqIDEw MjQpCisKK3R5cGVkZWYgc3RydWN0IE1hcENhY2hlRW50cnkgeworICAgIGh3YWRkciBwYWRkcl9p bmRleDsKKyAgICB1aW50OF90ICp2YWRkcl9iYXNlOworICAgIHVuc2lnbmVkIGxvbmcgKnZhbGlk X21hcHBpbmc7CisgICAgdWludDhfdCBsb2NrOworICAgIGh3YWRkciBzaXplOworICAgIHN0cnVj dCBNYXBDYWNoZUVudHJ5ICpuZXh0OworfSBNYXBDYWNoZUVudHJ5OworCit0eXBlZGVmIHN0cnVj dCBNYXBDYWNoZVJldiB7CisgICAgdWludDhfdCAqdmFkZHJfcmVxOworICAgIGh3YWRkciBwYWRk cl9pbmRleDsKKyAgICBod2FkZHIgc2l6ZTsKKyAgICBRVEFJTFFfRU5UUlkoTWFwQ2FjaGVSZXYp IG5leHQ7Cit9IE1hcENhY2hlUmV2OworCit0eXBlZGVmIHN0cnVjdCBNYXBDYWNoZSB7CisgICAg TWFwQ2FjaGVFbnRyeSAqZW50cnk7CisgICAgdW5zaWduZWQgbG9uZyBucl9idWNrZXRzOworICAg IFFUQUlMUV9IRUFEKG1hcF9jYWNoZV9oZWFkLCBNYXBDYWNoZVJldikgbG9ja2VkX2VudHJpZXM7 CisKKyAgICAvKiBGb3IgbW9zdCBjYXNlcyAoPjk5LjklKSwgdGhlIHBhZ2UgYWRkcmVzcyBpcyB0 aGUgc2FtZS4gKi8KKyAgICBNYXBDYWNoZUVudHJ5ICpsYXN0X2VudHJ5OworICAgIHVuc2lnbmVk IGxvbmcgbWF4X21jYWNoZV9zaXplOworICAgIHVuc2lnbmVkIGludCBtY2FjaGVfYnVja2V0X3No aWZ0OworCisgICAgcGh5c19vZmZzZXRfdG9fZ2FkZHJfdCBwaHlzX29mZnNldF90b19nYWRkcjsK KyAgICBRZW11TXV0ZXggbG9jazsKKyAgICB2b2lkICpvcGFxdWU7Cit9IE1hcENhY2hlOworCitz dGF0aWMgTWFwQ2FjaGUgKm1hcGNhY2hlOworCitzdGF0aWMgaW5saW5lIHZvaWQgbWFwY2FjaGVf bG9jayh2b2lkKQoreworICAgIHFlbXVfbXV0ZXhfbG9jaygmbWFwY2FjaGUtPmxvY2spOworfQor CitzdGF0aWMgaW5saW5lIHZvaWQgbWFwY2FjaGVfdW5sb2NrKHZvaWQpCit7CisgICAgcWVtdV9t dXRleF91bmxvY2soJm1hcGNhY2hlLT5sb2NrKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGVz dF9iaXRzKGludCBuciwgaW50IHNpemUsIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7Cisg ICAgdW5zaWduZWQgbG9uZyByZXMgPSBmaW5kX25leHRfemVyb19iaXQoYWRkciwgc2l6ZSArIG5y LCBucik7CisgICAgaWYgKHJlcyA+PSBuciArIHNpemUpCisgICAgICAgIHJldHVybiAxOworICAg IGVsc2UKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgeGVuX21hcF9jYWNoZV9pbml0KHBo eXNfb2Zmc2V0X3RvX2dhZGRyX3QgZiwgdm9pZCAqb3BhcXVlKQoreworICAgIHVuc2lnbmVkIGxv bmcgc2l6ZTsKKyAgICBzdHJ1Y3QgcmxpbWl0IHJsaW1pdF9hczsKKworICAgIG1hcGNhY2hlID0g Z19tYWxsb2MwKHNpemVvZiAoTWFwQ2FjaGUpKTsKKworICAgIG1hcGNhY2hlLT5waHlzX29mZnNl dF90b19nYWRkciA9IGY7CisgICAgbWFwY2FjaGUtPm9wYXF1ZSA9IG9wYXF1ZTsKKyAgICBxZW11 X211dGV4X2luaXQoJm1hcGNhY2hlLT5sb2NrKTsKKworICAgIFFUQUlMUV9JTklUKCZtYXBjYWNo ZS0+bG9ja2VkX2VudHJpZXMpOworCisgICAgaWYgKGdldGV1aWQoKSA9PSAwKSB7CisgICAgICAg IHJsaW1pdF9hcy5ybGltX2N1ciA9IFJMSU1fSU5GSU5JVFk7CisgICAgICAgIHJsaW1pdF9hcy5y bGltX21heCA9IFJMSU1fSU5GSU5JVFk7CisgICAgICAgIG1hcGNhY2hlLT5tYXhfbWNhY2hlX3Np emUgPSBNQ0FDSEVfTUFYX1NJWkU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZ2V0cmxpbWl0KFJM SU1JVF9BUywgJnJsaW1pdF9hcyk7CisgICAgICAgIHJsaW1pdF9hcy5ybGltX2N1ciA9IHJsaW1p dF9hcy5ybGltX21heDsKKworICAgICAgICBpZiAocmxpbWl0X2FzLnJsaW1fbWF4ICE9IFJMSU1f SU5GSU5JVFkpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiV2FybmluZzogUUVNVSdz IG1heGltdW0gc2l6ZSBvZiB2aXJ0dWFsIgorICAgICAgICAgICAgICAgICAgICAiIG1lbW9yeSBp cyBub3QgaW5maW5pdHkuXG4iKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmxpbWl0X2FzLnJs aW1fbWF4IDwgTUNBQ0hFX01BWF9TSVpFICsgTk9OX01DQUNIRV9NRU1PUllfU0laRSkgeworICAg ICAgICAgICAgbWFwY2FjaGUtPm1heF9tY2FjaGVfc2l6ZSA9IHJsaW1pdF9hcy5ybGltX21heCAt CisgICAgICAgICAgICAgICAgTk9OX01DQUNIRV9NRU1PUllfU0laRTsKKyAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgIG1hcGNhY2hlLT5tYXhfbWNhY2hlX3NpemUgPSBNQ0FDSEVfTUFYX1NJ WkU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzZXRybGltaXQoUkxJTUlUX0FTLCAmcmxpbWl0 X2FzKTsKKworICAgIG1hcGNhY2hlLT5ucl9idWNrZXRzID0KKyAgICAgICAgKCgobWFwY2FjaGUt Pm1heF9tY2FjaGVfc2l6ZSA+PiBYQ19QQUdFX1NISUZUKSArCisgICAgICAgICAgKDFVTCA8PCAo TUNBQ0hFX0JVQ0tFVF9TSElGVCAtIFhDX1BBR0VfU0hJRlQpKSAtIDEpID4+CisgICAgICAgICAo TUNBQ0hFX0JVQ0tFVF9TSElGVCAtIFhDX1BBR0VfU0hJRlQpKTsKKworICAgIHNpemUgPSBtYXBj YWNoZS0+bnJfYnVja2V0cyAqIHNpemVvZiAoTWFwQ2FjaGVFbnRyeSk7CisgICAgc2l6ZSA9IChz aXplICsgWENfUEFHRV9TSVpFIC0gMSkgJiB+KFhDX1BBR0VfU0laRSAtIDEpOworICAgIERQUklO VEYoIiVzLCBucl9idWNrZXRzID0gJWx4IHNpemUgJWx1XG4iLCBfX2Z1bmNfXywKKyAgICAgICAg ICAgIG1hcGNhY2hlLT5ucl9idWNrZXRzLCBzaXplKTsKKyAgICBtYXBjYWNoZS0+ZW50cnkgPSBn X21hbGxvYzAoc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHhlbl9yZW1hcF9idWNrZXQoTWFwQ2Fj aGVFbnRyeSAqZW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3YWRkciBzaXpl LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBod2FkZHIgYWRkcmVzc19pbmRleCkKK3sK KyAgICB1aW50OF90ICp2YWRkcl9iYXNlOworICAgIHhlbl9wZm5fdCAqcGZuczsKKyAgICBpbnQg KmVycjsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICBod2FkZHIgbmJfcGZuID0gc2l6ZSA+PiBY Q19QQUdFX1NISUZUOworCisgICAgdHJhY2VfeGVuX3JlbWFwX2J1Y2tldChhZGRyZXNzX2luZGV4 KTsKKworICAgIHBmbnMgPSBnX21hbGxvYzAobmJfcGZuICogc2l6ZW9mICh4ZW5fcGZuX3QpKTsK KyAgICBlcnIgPSBnX21hbGxvYzAobmJfcGZuICogc2l6ZW9mIChpbnQpKTsKKworICAgIGlmIChl bnRyeS0+dmFkZHJfYmFzZSAhPSBOVUxMKSB7CisgICAgICAgIHJhbV9ibG9ja19ub3RpZnlfcmVt b3ZlKGVudHJ5LT52YWRkcl9iYXNlLCBlbnRyeS0+c2l6ZSk7CisgICAgICAgIGlmIChtdW5tYXAo ZW50cnktPnZhZGRyX2Jhc2UsIGVudHJ5LT5zaXplKSAhPSAwKSB7CisgICAgICAgICAgICBwZXJy b3IoInVubWFwIGZhaWxzIik7CisgICAgICAgICAgICBleGl0KC0xKTsKKyAgICAgICAgfQorICAg IH0KKyAgICBnX2ZyZWUoZW50cnktPnZhbGlkX21hcHBpbmcpOworICAgIGVudHJ5LT52YWxpZF9t YXBwaW5nID0gTlVMTDsKKworICAgIGZvciAoaSA9IDA7IGkgPCBuYl9wZm47IGkrKykgeworICAg ICAgICBwZm5zW2ldID0gKGFkZHJlc3NfaW5kZXggPDwgKE1DQUNIRV9CVUNLRVRfU0hJRlQtWENf UEFHRV9TSElGVCkpICsgaTsKKyAgICB9CisKKyAgICB2YWRkcl9iYXNlID0geGVuZm9yZWlnbm1l bW9yeV9tYXAoeGVuX2ZtZW0sIHhlbl9kb21pZCwgUFJPVF9SRUFEfFBST1RfV1JJVEUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5iX3BmbiwgcGZucywgZXJyKTsKKyAg ICBpZiAodmFkZHJfYmFzZSA9PSBOVUxMKSB7CisgICAgICAgIHBlcnJvcigieGVuZm9yZWlnbm1l bW9yeV9tYXAiKTsKKyAgICAgICAgZXhpdCgtMSk7CisgICAgfQorCisgICAgZW50cnktPnZhZGRy X2Jhc2UgPSB2YWRkcl9iYXNlOworICAgIGVudHJ5LT5wYWRkcl9pbmRleCA9IGFkZHJlc3NfaW5k ZXg7CisgICAgZW50cnktPnNpemUgPSBzaXplOworICAgIGVudHJ5LT52YWxpZF9tYXBwaW5nID0g KHVuc2lnbmVkIGxvbmcgKikgZ19tYWxsb2MwKHNpemVvZih1bnNpZ25lZCBsb25nKSAqCisgICAg ICAgICAgICBCSVRTX1RPX0xPTkdTKHNpemUgPj4gWENfUEFHRV9TSElGVCkpOworCisgICAgcmFt X2Jsb2NrX25vdGlmeV9hZGQoZW50cnktPnZhZGRyX2Jhc2UsIGVudHJ5LT5zaXplKTsKKyAgICBi aXRtYXBfemVybyhlbnRyeS0+dmFsaWRfbWFwcGluZywgbmJfcGZuKTsKKyAgICBmb3IgKGkgPSAw OyBpIDwgbmJfcGZuOyBpKyspIHsKKyAgICAgICAgaWYgKCFlcnJbaV0pIHsKKyAgICAgICAgICAg IGJpdG1hcF9zZXQoZW50cnktPnZhbGlkX21hcHBpbmcsIGksIDEpOworICAgICAgICB9CisgICAg fQorCisgICAgZ19mcmVlKHBmbnMpOworICAgIGdfZnJlZShlcnIpOworfQorCitzdGF0aWMgdWlu dDhfdCAqeGVuX21hcF9jYWNoZV91bmxvY2tlZChod2FkZHIgcGh5c19hZGRyLCBod2FkZHIgc2l6 ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgbG9jaykK K3sKKyAgICBNYXBDYWNoZUVudHJ5ICplbnRyeSwgKnBlbnRyeSA9IE5VTEw7CisgICAgaHdhZGRy IGFkZHJlc3NfaW5kZXg7CisgICAgaHdhZGRyIGFkZHJlc3Nfb2Zmc2V0OworICAgIGh3YWRkciBj YWNoZV9zaXplID0gc2l6ZTsKKyAgICBod2FkZHIgdGVzdF9iaXRfc2l6ZTsKKyAgICBib29sIHRy YW5zbGF0ZWQgPSBmYWxzZTsKKwordHJ5YWdhaW46CisgICAgYWRkcmVzc19pbmRleCAgPSBwaHlz X2FkZHIgPj4gTUNBQ0hFX0JVQ0tFVF9TSElGVDsKKyAgICBhZGRyZXNzX29mZnNldCA9IHBoeXNf YWRkciAmIChNQ0FDSEVfQlVDS0VUX1NJWkUgLSAxKTsKKworICAgIHRyYWNlX3hlbl9tYXBfY2Fj aGUocGh5c19hZGRyKTsKKworICAgIC8qIHRlc3RfYml0X3NpemUgaXMgYWx3YXlzIGEgbXVsdGlw bGUgb2YgWENfUEFHRV9TSVpFICovCisgICAgaWYgKHNpemUpIHsKKyAgICAgICAgdGVzdF9iaXRf c2l6ZSA9IHNpemUgKyAocGh5c19hZGRyICYgKFhDX1BBR0VfU0laRSAtIDEpKTsKKworICAgICAg ICBpZiAodGVzdF9iaXRfc2l6ZSAlIFhDX1BBR0VfU0laRSkgeworICAgICAgICAgICAgdGVzdF9i aXRfc2l6ZSArPSBYQ19QQUdFX1NJWkUgLSAodGVzdF9iaXRfc2l6ZSAlIFhDX1BBR0VfU0laRSk7 CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICB0ZXN0X2JpdF9zaXplID0gWENfUEFH RV9TSVpFOworICAgIH0KKworICAgIGlmIChtYXBjYWNoZS0+bGFzdF9lbnRyeSAhPSBOVUxMICYm CisgICAgICAgIG1hcGNhY2hlLT5sYXN0X2VudHJ5LT5wYWRkcl9pbmRleCA9PSBhZGRyZXNzX2lu ZGV4ICYmCisgICAgICAgICFsb2NrICYmICFzaXplICYmCisgICAgICAgIHRlc3RfYml0cyhhZGRy ZXNzX29mZnNldCA+PiBYQ19QQUdFX1NISUZULAorICAgICAgICAgICAgICAgICAgdGVzdF9iaXRf c2l6ZSA+PiBYQ19QQUdFX1NISUZULAorICAgICAgICAgICAgICAgICAgbWFwY2FjaGUtPmxhc3Rf ZW50cnktPnZhbGlkX21hcHBpbmcpKSB7CisgICAgICAgIHRyYWNlX3hlbl9tYXBfY2FjaGVfcmV0 dXJuKG1hcGNhY2hlLT5sYXN0X2VudHJ5LT52YWRkcl9iYXNlICsgYWRkcmVzc19vZmZzZXQpOwor ICAgICAgICByZXR1cm4gbWFwY2FjaGUtPmxhc3RfZW50cnktPnZhZGRyX2Jhc2UgKyBhZGRyZXNz X29mZnNldDsKKyAgICB9CisKKyAgICAvKiBzaXplIGlzIGFsd2F5cyBhIG11bHRpcGxlIG9mIE1D QUNIRV9CVUNLRVRfU0laRSAqLworICAgIGlmIChzaXplKSB7CisgICAgICAgIGNhY2hlX3NpemUg PSBzaXplICsgYWRkcmVzc19vZmZzZXQ7CisgICAgICAgIGlmIChjYWNoZV9zaXplICUgTUNBQ0hF X0JVQ0tFVF9TSVpFKSB7CisgICAgICAgICAgICBjYWNoZV9zaXplICs9IE1DQUNIRV9CVUNLRVRf U0laRSAtIChjYWNoZV9zaXplICUgTUNBQ0hFX0JVQ0tFVF9TSVpFKTsKKyAgICAgICAgfQorICAg IH0gZWxzZSB7CisgICAgICAgIGNhY2hlX3NpemUgPSBNQ0FDSEVfQlVDS0VUX1NJWkU7CisgICAg fQorCisgICAgZW50cnkgPSAmbWFwY2FjaGUtPmVudHJ5W2FkZHJlc3NfaW5kZXggJSBtYXBjYWNo ZS0+bnJfYnVja2V0c107CisKKyAgICB3aGlsZSAoZW50cnkgJiYgZW50cnktPmxvY2sgJiYgZW50 cnktPnZhZGRyX2Jhc2UgJiYKKyAgICAgICAgICAgIChlbnRyeS0+cGFkZHJfaW5kZXggIT0gYWRk cmVzc19pbmRleCB8fCBlbnRyeS0+c2l6ZSAhPSBjYWNoZV9zaXplIHx8CisgICAgICAgICAgICAg IXRlc3RfYml0cyhhZGRyZXNzX29mZnNldCA+PiBYQ19QQUdFX1NISUZULAorICAgICAgICAgICAg ICAgICB0ZXN0X2JpdF9zaXplID4+IFhDX1BBR0VfU0hJRlQsCisgICAgICAgICAgICAgICAgIGVu dHJ5LT52YWxpZF9tYXBwaW5nKSkpIHsKKyAgICAgICAgcGVudHJ5ID0gZW50cnk7CisgICAgICAg IGVudHJ5ID0gZW50cnktPm5leHQ7CisgICAgfQorICAgIGlmICghZW50cnkpIHsKKyAgICAgICAg ZW50cnkgPSBnX21hbGxvYzAoc2l6ZW9mIChNYXBDYWNoZUVudHJ5KSk7CisgICAgICAgIHBlbnRy eS0+bmV4dCA9IGVudHJ5OworICAgICAgICB4ZW5fcmVtYXBfYnVja2V0KGVudHJ5LCBjYWNoZV9z aXplLCBhZGRyZXNzX2luZGV4KTsKKyAgICB9IGVsc2UgaWYgKCFlbnRyeS0+bG9jaykgeworICAg ICAgICBpZiAoIWVudHJ5LT52YWRkcl9iYXNlIHx8IGVudHJ5LT5wYWRkcl9pbmRleCAhPSBhZGRy ZXNzX2luZGV4IHx8CisgICAgICAgICAgICAgICAgZW50cnktPnNpemUgIT0gY2FjaGVfc2l6ZSB8 fAorICAgICAgICAgICAgICAgICF0ZXN0X2JpdHMoYWRkcmVzc19vZmZzZXQgPj4gWENfUEFHRV9T SElGVCwKKyAgICAgICAgICAgICAgICAgICAgdGVzdF9iaXRfc2l6ZSA+PiBYQ19QQUdFX1NISUZU LAorICAgICAgICAgICAgICAgICAgICBlbnRyeS0+dmFsaWRfbWFwcGluZykpIHsKKyAgICAgICAg ICAgIHhlbl9yZW1hcF9idWNrZXQoZW50cnksIGNhY2hlX3NpemUsIGFkZHJlc3NfaW5kZXgpOwor ICAgICAgICB9CisgICAgfQorCisgICAgaWYoIXRlc3RfYml0cyhhZGRyZXNzX29mZnNldCA+PiBY Q19QQUdFX1NISUZULAorICAgICAgICAgICAgICAgIHRlc3RfYml0X3NpemUgPj4gWENfUEFHRV9T SElGVCwKKyAgICAgICAgICAgICAgICBlbnRyeS0+dmFsaWRfbWFwcGluZykpIHsKKyAgICAgICAg bWFwY2FjaGUtPmxhc3RfZW50cnkgPSBOVUxMOworICAgICAgICBpZiAoIXRyYW5zbGF0ZWQgJiYg bWFwY2FjaGUtPnBoeXNfb2Zmc2V0X3RvX2dhZGRyKSB7CisgICAgICAgICAgICBwaHlzX2FkZHIg PSBtYXBjYWNoZS0+cGh5c19vZmZzZXRfdG9fZ2FkZHIocGh5c19hZGRyLCBzaXplLCBtYXBjYWNo ZS0+b3BhcXVlKTsKKyAgICAgICAgICAgIHRyYW5zbGF0ZWQgPSB0cnVlOworICAgICAgICAgICAg Z290byB0cnlhZ2FpbjsKKyAgICAgICAgfQorICAgICAgICB0cmFjZV94ZW5fbWFwX2NhY2hlX3Jl dHVybihOVUxMKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgbWFwY2FjaGUt Pmxhc3RfZW50cnkgPSBlbnRyeTsKKyAgICBpZiAobG9jaykgeworICAgICAgICBNYXBDYWNoZVJl diAqcmV2ZW50cnkgPSBnX21hbGxvYzAoc2l6ZW9mKE1hcENhY2hlUmV2KSk7CisgICAgICAgIGVu dHJ5LT5sb2NrKys7CisgICAgICAgIHJldmVudHJ5LT52YWRkcl9yZXEgPSBtYXBjYWNoZS0+bGFz dF9lbnRyeS0+dmFkZHJfYmFzZSArIGFkZHJlc3Nfb2Zmc2V0OworICAgICAgICByZXZlbnRyeS0+ cGFkZHJfaW5kZXggPSBtYXBjYWNoZS0+bGFzdF9lbnRyeS0+cGFkZHJfaW5kZXg7CisgICAgICAg IHJldmVudHJ5LT5zaXplID0gZW50cnktPnNpemU7CisgICAgICAgIFFUQUlMUV9JTlNFUlRfSEVB RCgmbWFwY2FjaGUtPmxvY2tlZF9lbnRyaWVzLCByZXZlbnRyeSwgbmV4dCk7CisgICAgfQorCisg ICAgdHJhY2VfeGVuX21hcF9jYWNoZV9yZXR1cm4obWFwY2FjaGUtPmxhc3RfZW50cnktPnZhZGRy X2Jhc2UgKyBhZGRyZXNzX29mZnNldCk7CisgICAgcmV0dXJuIG1hcGNhY2hlLT5sYXN0X2VudHJ5 LT52YWRkcl9iYXNlICsgYWRkcmVzc19vZmZzZXQ7Cit9CisKK3VpbnQ4X3QgKnhlbl9tYXBfY2Fj aGUoaHdhZGRyIHBoeXNfYWRkciwgaHdhZGRyIHNpemUsCisgICAgICAgICAgICAgICAgICAgICAg IHVpbnQ4X3QgbG9jaykKK3sKKyAgICB1aW50OF90ICpwOworCisgICAgbWFwY2FjaGVfbG9jaygp OworICAgIHAgPSB4ZW5fbWFwX2NhY2hlX3VubG9ja2VkKHBoeXNfYWRkciwgc2l6ZSwgbG9jayk7 CisgICAgbWFwY2FjaGVfdW5sb2NrKCk7CisgICAgcmV0dXJuIHA7Cit9CisKK3JhbV9hZGRyX3Qg eGVuX3JhbV9hZGRyX2Zyb21fbWFwY2FjaGUodm9pZCAqcHRyKQoreworICAgIE1hcENhY2hlRW50 cnkgKmVudHJ5ID0gTlVMTDsKKyAgICBNYXBDYWNoZVJldiAqcmV2ZW50cnk7CisgICAgaHdhZGRy IHBhZGRyX2luZGV4OworICAgIGh3YWRkciBzaXplOworICAgIHJhbV9hZGRyX3QgcmFkZHI7Cisg ICAgaW50IGZvdW5kID0gMDsKKworICAgIG1hcGNhY2hlX2xvY2soKTsKKyAgICBRVEFJTFFfRk9S RUFDSChyZXZlbnRyeSwgJm1hcGNhY2hlLT5sb2NrZWRfZW50cmllcywgbmV4dCkgeworICAgICAg ICBpZiAocmV2ZW50cnktPnZhZGRyX3JlcSA9PSBwdHIpIHsKKyAgICAgICAgICAgIHBhZGRyX2lu ZGV4ID0gcmV2ZW50cnktPnBhZGRyX2luZGV4OworICAgICAgICAgICAgc2l6ZSA9IHJldmVudHJ5 LT5zaXplOworICAgICAgICAgICAgZm91bmQgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgIH0KKyAgICB9CisgICAgaWYgKCFmb3VuZCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwg IiVzLCBjb3VsZCBub3QgZmluZCAlcFxuIiwgX19mdW5jX18sIHB0cik7CisgICAgICAgIFFUQUlM UV9GT1JFQUNIKHJldmVudHJ5LCAmbWFwY2FjaGUtPmxvY2tlZF9lbnRyaWVzLCBuZXh0KSB7Cisg ICAgICAgICAgICBEUFJJTlRGKCIgICAiVEFSR0VUX0ZNVF9wbHgiIC0+ICVwIGlzIHByZXNlbnRc biIsIHJldmVudHJ5LT5wYWRkcl9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgcmV2ZW50cnkt PnZhZGRyX3JlcSk7CisgICAgICAgIH0KKyAgICAgICAgYWJvcnQoKTsKKyAgICAgICAgcmV0dXJu IDA7CisgICAgfQorCisgICAgZW50cnkgPSAmbWFwY2FjaGUtPmVudHJ5W3BhZGRyX2luZGV4ICUg bWFwY2FjaGUtPm5yX2J1Y2tldHNdOworICAgIHdoaWxlIChlbnRyeSAmJiAoZW50cnktPnBhZGRy X2luZGV4ICE9IHBhZGRyX2luZGV4IHx8IGVudHJ5LT5zaXplICE9IHNpemUpKSB7CisgICAgICAg IGVudHJ5ID0gZW50cnktPm5leHQ7CisgICAgfQorICAgIGlmICghZW50cnkpIHsKKyAgICAgICAg RFBSSU5URigiVHJ5aW5nIHRvIGZpbmQgYWRkcmVzcyAlcCB0aGF0IGlzIG5vdCBpbiB0aGUgbWFw Y2FjaGUhXG4iLCBwdHIpOworICAgICAgICByYWRkciA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAg ICAgcmFkZHIgPSAocmV2ZW50cnktPnBhZGRyX2luZGV4IDw8IE1DQUNIRV9CVUNLRVRfU0hJRlQp ICsKKyAgICAgICAgICAgICAoKHVuc2lnbmVkIGxvbmcpIHB0ciAtICh1bnNpZ25lZCBsb25nKSBl bnRyeS0+dmFkZHJfYmFzZSk7CisgICAgfQorICAgIG1hcGNhY2hlX3VubG9jaygpOworICAgIHJl dHVybiByYWRkcjsKK30KKworc3RhdGljIHZvaWQgeGVuX2ludmFsaWRhdGVfbWFwX2NhY2hlX2Vu dHJ5X3VubG9ja2VkKHVpbnQ4X3QgKmJ1ZmZlcikKK3sKKyAgICBNYXBDYWNoZUVudHJ5ICplbnRy eSA9IE5VTEwsICpwZW50cnkgPSBOVUxMOworICAgIE1hcENhY2hlUmV2ICpyZXZlbnRyeTsKKyAg ICBod2FkZHIgcGFkZHJfaW5kZXg7CisgICAgaHdhZGRyIHNpemU7CisgICAgaW50IGZvdW5kID0g MDsKKworICAgIFFUQUlMUV9GT1JFQUNIKHJldmVudHJ5LCAmbWFwY2FjaGUtPmxvY2tlZF9lbnRy aWVzLCBuZXh0KSB7CisgICAgICAgIGlmIChyZXZlbnRyeS0+dmFkZHJfcmVxID09IGJ1ZmZlcikg eworICAgICAgICAgICAgcGFkZHJfaW5kZXggPSByZXZlbnRyeS0+cGFkZHJfaW5kZXg7CisgICAg ICAgICAgICBzaXplID0gcmV2ZW50cnktPnNpemU7CisgICAgICAgICAgICBmb3VuZCA9IDE7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIWZvdW5kKSB7Cisg ICAgICAgIERQUklOVEYoIiVzLCBjb3VsZCBub3QgZmluZCAlcFxuIiwgX19mdW5jX18sIGJ1ZmZl cik7CisgICAgICAgIFFUQUlMUV9GT1JFQUNIKHJldmVudHJ5LCAmbWFwY2FjaGUtPmxvY2tlZF9l bnRyaWVzLCBuZXh0KSB7CisgICAgICAgICAgICBEUFJJTlRGKCIgICAiVEFSR0VUX0ZNVF9wbHgi IC0+ICVwIGlzIHByZXNlbnRcbiIsIHJldmVudHJ5LT5wYWRkcl9pbmRleCwgcmV2ZW50cnktPnZh ZGRyX3JlcSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBRVEFJTFFf UkVNT1ZFKCZtYXBjYWNoZS0+bG9ja2VkX2VudHJpZXMsIHJldmVudHJ5LCBuZXh0KTsKKyAgICBn X2ZyZWUocmV2ZW50cnkpOworCisgICAgaWYgKG1hcGNhY2hlLT5sYXN0X2VudHJ5ICE9IE5VTEwg JiYKKyAgICAgICAgbWFwY2FjaGUtPmxhc3RfZW50cnktPnBhZGRyX2luZGV4ID09IHBhZGRyX2lu ZGV4KSB7CisgICAgICAgIG1hcGNhY2hlLT5sYXN0X2VudHJ5ID0gTlVMTDsKKyAgICB9CisKKyAg ICBlbnRyeSA9ICZtYXBjYWNoZS0+ZW50cnlbcGFkZHJfaW5kZXggJSBtYXBjYWNoZS0+bnJfYnVj a2V0c107CisgICAgd2hpbGUgKGVudHJ5ICYmIChlbnRyeS0+cGFkZHJfaW5kZXggIT0gcGFkZHJf aW5kZXggfHwgZW50cnktPnNpemUgIT0gc2l6ZSkpIHsKKyAgICAgICAgcGVudHJ5ID0gZW50cnk7 CisgICAgICAgIGVudHJ5ID0gZW50cnktPm5leHQ7CisgICAgfQorICAgIGlmICghZW50cnkpIHsK KyAgICAgICAgRFBSSU5URigiVHJ5aW5nIHRvIHVubWFwIGFkZHJlc3MgJXAgdGhhdCBpcyBub3Qg aW4gdGhlIG1hcGNhY2hlIVxuIiwgYnVmZmVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg ICBlbnRyeS0+bG9jay0tOworICAgIGlmIChlbnRyeS0+bG9jayA+IDAgfHwgcGVudHJ5ID09IE5V TEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHBlbnRyeS0+bmV4dCA9IGVudHJ5 LT5uZXh0OworICAgIHJhbV9ibG9ja19ub3RpZnlfcmVtb3ZlKGVudHJ5LT52YWRkcl9iYXNlLCBl bnRyeS0+c2l6ZSk7CisgICAgaWYgKG11bm1hcChlbnRyeS0+dmFkZHJfYmFzZSwgZW50cnktPnNp emUpICE9IDApIHsKKyAgICAgICAgcGVycm9yKCJ1bm1hcCBmYWlscyIpOworICAgICAgICBleGl0 KC0xKTsKKyAgICB9CisgICAgZ19mcmVlKGVudHJ5LT52YWxpZF9tYXBwaW5nKTsKKyAgICBnX2Zy ZWUoZW50cnkpOworfQorCit2b2lkIHhlbl9pbnZhbGlkYXRlX21hcF9jYWNoZV9lbnRyeSh1aW50 OF90ICpidWZmZXIpCit7CisgICAgbWFwY2FjaGVfbG9jaygpOworICAgIHhlbl9pbnZhbGlkYXRl X21hcF9jYWNoZV9lbnRyeV91bmxvY2tlZChidWZmZXIpOworICAgIG1hcGNhY2hlX3VubG9jaygp OworfQorCit2b2lkIHhlbl9pbnZhbGlkYXRlX21hcF9jYWNoZSh2b2lkKQoreworICAgIHVuc2ln bmVkIGxvbmcgaTsKKyAgICBNYXBDYWNoZVJldiAqcmV2ZW50cnk7CisKKyAgICAvKiBGbHVzaCBw ZW5kaW5nIEFJTyBiZWZvcmUgZGVzdHJveWluZyB0aGUgbWFwY2FjaGUgKi8KKyAgICBiZHJ2X2Ry YWluX2FsbCgpOworCisgICAgbWFwY2FjaGVfbG9jaygpOworCisgICAgUVRBSUxRX0ZPUkVBQ0go cmV2ZW50cnksICZtYXBjYWNoZS0+bG9ja2VkX2VudHJpZXMsIG5leHQpIHsKKyAgICAgICAgRFBS SU5URigiVGhlcmUgc2hvdWxkIGJlIG5vIGxvY2tlZCBtYXBwaW5ncyBhdCB0aGlzIHRpbWUsICIK KyAgICAgICAgICAgICAgICAiYnV0ICJUQVJHRVRfRk1UX3BseCIgLT4gJXAgaXMgcHJlc2VudFxu IiwKKyAgICAgICAgICAgICAgICByZXZlbnRyeS0+cGFkZHJfaW5kZXgsIHJldmVudHJ5LT52YWRk cl9yZXEpOworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBtYXBjYWNoZS0+bnJfYnVja2V0 czsgaSsrKSB7CisgICAgICAgIE1hcENhY2hlRW50cnkgKmVudHJ5ID0gJm1hcGNhY2hlLT5lbnRy eVtpXTsKKworICAgICAgICBpZiAoZW50cnktPnZhZGRyX2Jhc2UgPT0gTlVMTCkgeworICAgICAg ICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGVudHJ5LT5sb2NrID4gMCkg eworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAobXVubWFw KGVudHJ5LT52YWRkcl9iYXNlLCBlbnRyeS0+c2l6ZSkgIT0gMCkgeworICAgICAgICAgICAgcGVy cm9yKCJ1bm1hcCBmYWlscyIpOworICAgICAgICAgICAgZXhpdCgtMSk7CisgICAgICAgIH0KKwor ICAgICAgICBlbnRyeS0+cGFkZHJfaW5kZXggPSAwOworICAgICAgICBlbnRyeS0+dmFkZHJfYmFz ZSA9IE5VTEw7CisgICAgICAgIGVudHJ5LT5zaXplID0gMDsKKyAgICAgICAgZ19mcmVlKGVudHJ5 LT52YWxpZF9tYXBwaW5nKTsKKyAgICAgICAgZW50cnktPnZhbGlkX21hcHBpbmcgPSBOVUxMOwor ICAgIH0KKworICAgIG1hcGNhY2hlLT5sYXN0X2VudHJ5ID0gTlVMTDsKKworICAgIG1hcGNhY2hl X3VubG9jaygpOworfQpkaWZmIC0tZ2l0IGEvdHJhY2UtZXZlbnRzIGIvdHJhY2UtZXZlbnRzCmlu ZGV4IDRlMTQ0ODcuLmU1ODJkNjMgMTAwNjQ0Ci0tLSBhL3RyYWNlLWV2ZW50cworKysgYi90cmFj ZS1ldmVudHMKQEAgLTQ4LDExICs0OCw2IEBAIHNwaWNlX3ZtY19yZWdpc3Rlcl9pbnRlcmZhY2Uo dm9pZCAqc2NkKSAic3BpY2Ugdm1jIHJlZ2lzdGVyZWQgaW50ZXJmYWNlICVwIgogc3BpY2Vfdm1j X3VucmVnaXN0ZXJfaW50ZXJmYWNlKHZvaWQgKnNjZCkgInNwaWNlIHZtYyB1bnJlZ2lzdGVyZWQg aW50ZXJmYWNlICVwIgogc3BpY2Vfdm1jX2V2ZW50KGludCBldmVudCkgInNwaWNlIHZtYyBldmVu dCAlZCIKIAotIyB4ZW4tbWFwY2FjaGUuYwoteGVuX21hcF9jYWNoZSh1aW50NjRfdCBwaHlzX2Fk ZHIpICJ3YW50ICUjIlBSSXg2NAoteGVuX3JlbWFwX2J1Y2tldCh1aW50NjRfdCBpbmRleCkgImlu ZGV4ICUjIlBSSXg2NAoteGVuX21hcF9jYWNoZV9yZXR1cm4odm9pZCogcHRyKSAiJXAiCi0KICMg bW9uaXRvci5jCiBtb25pdG9yX3Byb3RvY29sX2V2ZW50X2hhbmRsZXIodWludDMyX3QgZXZlbnQs IHZvaWQgKnFkaWN0KSAiZXZlbnQ9JWQgZGF0YT0lcCIKIG1vbml0b3JfcHJvdG9jb2xfZXZlbnRf ZW1pdCh1aW50MzJfdCBldmVudCwgdm9pZCAqZGF0YSkgImV2ZW50PSVkIGRhdGE9JXAiCmRpZmYg LS1naXQgYS94ZW4tbWFwY2FjaGUuYyBiL3hlbi1tYXBjYWNoZS5jCmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAxYTk2ZDJlLi4wMDAwMDAwCi0tLSBhL3hlbi1tYXBjYWNoZS5jCisrKyAv ZGV2L251bGwKQEAgLTEsNDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgICAg ICAgQ2l0cml4IEx0ZC4KLSAqCi0gKiBUaGlzIHdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR1BMLCB2ZXJzaW9uIDIuICBTZWUKLSAqIHRoZSBDT1BZSU5HIGZpbGUg aW4gdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuCi0gKgotICogQ29udHJpYnV0aW9ucyBhZnRlciAy MDEyLTAxLTEzIGFyZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCi0gKiBHTlUgR1BM LCB2ZXJzaW9uIDIgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwot Ci0jaW5jbHVkZSAicWVtdS9vc2RlcC5oIgotCi0jaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+Ci0K LSNpbmNsdWRlICJody94ZW4veGVuX2JhY2tlbmQuaCIKLSNpbmNsdWRlICJzeXNlbXUvYmxvY2tk ZXYuaCIKLSNpbmNsdWRlICJxZW11L2JpdG1hcC5oIgotCi0jaW5jbHVkZSA8eGVuL2h2bS9wYXJh bXMuaD4KLQotI2luY2x1ZGUgInN5c2VtdS94ZW4tbWFwY2FjaGUuaCIKLSNpbmNsdWRlICJ0cmFj ZS1yb290LmgiCi0KLQotLy8jZGVmaW5lIE1BUENBQ0hFX0RFQlVHCi0KLSNpZmRlZiBNQVBDQUNI RV9ERUJVRwotIyAgZGVmaW5lIERQUklOVEYoZm10LCAuLi4pIGRvIHsgXAotICAgIGZwcmludGYo c3RkZXJyLCAieGVuX21hcGNhY2hlOiAiIGZtdCwgIyMgX19WQV9BUkdTX18pOyBcCi19IHdoaWxl ICgwKQotI2Vsc2UKLSMgIGRlZmluZSBEUFJJTlRGKGZtdCwgLi4uKSBkbyB7IH0gd2hpbGUgKDAp Ci0jZW5kaWYKLQotI2lmIEhPU1RfTE9OR19CSVRTID09IDMyCi0jICBkZWZpbmUgTUNBQ0hFX0JV Q0tFVF9TSElGVCAxNgotIyAgZGVmaW5lIE1DQUNIRV9NQVhfU0laRSAgICAgKDFVTDw8MzEpIC8q IDJHQiBDYXAgKi8KLSNlbHNlCi0jICBkZWZpbmUgTUNBQ0hFX0JVQ0tFVF9TSElGVCAyMAotIyAg ZGVmaW5lIE1DQUNIRV9NQVhfU0laRSAgICAgKDFVTDw8MzUpIC8qIDMyR0IgQ2FwICovCi0jZW5k aWYKLSNkZWZpbmUgTUNBQ0hFX0JVQ0tFVF9TSVpFICgxVUwgPDwgTUNBQ0hFX0JVQ0tFVF9TSElG VCkKLQotLyogVGhpcyBpcyB0aGUgc2l6ZSBvZiB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIHJl c2VydmUgdG8gUUVNVSB0aGF0IHdpbGwgbm90Ci0gKiBiZSB1c2UgYnkgTWFwQ2FjaGUuCi0gKiBG cm9tIGVtcGlyaWNhbCB0ZXN0cyBJIG9ic2VydmVkIHRoYXQgcWVtdSB1c2UgNzVNQiBtb3JlIHRo YW4gdGhlCi0gKiBtYXhfbWNhY2hlX3NpemUuCi0gKi8KLSNkZWZpbmUgTk9OX01DQUNIRV9NRU1P UllfU0laRSAoODAgKiAxMDI0ICogMTAyNCkKLQotdHlwZWRlZiBzdHJ1Y3QgTWFwQ2FjaGVFbnRy eSB7Ci0gICAgaHdhZGRyIHBhZGRyX2luZGV4OwotICAgIHVpbnQ4X3QgKnZhZGRyX2Jhc2U7Ci0g ICAgdW5zaWduZWQgbG9uZyAqdmFsaWRfbWFwcGluZzsKLSAgICB1aW50OF90IGxvY2s7Ci0gICAg aHdhZGRyIHNpemU7Ci0gICAgc3RydWN0IE1hcENhY2hlRW50cnkgKm5leHQ7Ci19IE1hcENhY2hl RW50cnk7Ci0KLXR5cGVkZWYgc3RydWN0IE1hcENhY2hlUmV2IHsKLSAgICB1aW50OF90ICp2YWRk cl9yZXE7Ci0gICAgaHdhZGRyIHBhZGRyX2luZGV4OwotICAgIGh3YWRkciBzaXplOwotICAgIFFU QUlMUV9FTlRSWShNYXBDYWNoZVJldikgbmV4dDsKLX0gTWFwQ2FjaGVSZXY7Ci0KLXR5cGVkZWYg c3RydWN0IE1hcENhY2hlIHsKLSAgICBNYXBDYWNoZUVudHJ5ICplbnRyeTsKLSAgICB1bnNpZ25l ZCBsb25nIG5yX2J1Y2tldHM7Ci0gICAgUVRBSUxRX0hFQUQobWFwX2NhY2hlX2hlYWQsIE1hcENh Y2hlUmV2KSBsb2NrZWRfZW50cmllczsKLQotICAgIC8qIEZvciBtb3N0IGNhc2VzICg+OTkuOSUp LCB0aGUgcGFnZSBhZGRyZXNzIGlzIHRoZSBzYW1lLiAqLwotICAgIE1hcENhY2hlRW50cnkgKmxh c3RfZW50cnk7Ci0gICAgdW5zaWduZWQgbG9uZyBtYXhfbWNhY2hlX3NpemU7Ci0gICAgdW5zaWdu ZWQgaW50IG1jYWNoZV9idWNrZXRfc2hpZnQ7Ci0KLSAgICBwaHlzX29mZnNldF90b19nYWRkcl90 IHBoeXNfb2Zmc2V0X3RvX2dhZGRyOwotICAgIFFlbXVNdXRleCBsb2NrOwotICAgIHZvaWQgKm9w YXF1ZTsKLX0gTWFwQ2FjaGU7Ci0KLXN0YXRpYyBNYXBDYWNoZSAqbWFwY2FjaGU7Ci0KLXN0YXRp YyBpbmxpbmUgdm9pZCBtYXBjYWNoZV9sb2NrKHZvaWQpCi17Ci0gICAgcWVtdV9tdXRleF9sb2Nr KCZtYXBjYWNoZS0+bG9jayk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBtYXBjYWNoZV91bmxv Y2sodm9pZCkKLXsKLSAgICBxZW11X211dGV4X3VubG9jaygmbWFwY2FjaGUtPmxvY2spOwotfQot Ci1zdGF0aWMgaW5saW5lIGludCB0ZXN0X2JpdHMoaW50IG5yLCBpbnQgc2l6ZSwgY29uc3QgdW5z aWduZWQgbG9uZyAqYWRkcikKLXsKLSAgICB1bnNpZ25lZCBsb25nIHJlcyA9IGZpbmRfbmV4dF96 ZXJvX2JpdChhZGRyLCBzaXplICsgbnIsIG5yKTsKLSAgICBpZiAocmVzID49IG5yICsgc2l6ZSkK LSAgICAgICAgcmV0dXJuIDE7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gMDsKLX0KLQotdm9p ZCB4ZW5fbWFwX2NhY2hlX2luaXQocGh5c19vZmZzZXRfdG9fZ2FkZHJfdCBmLCB2b2lkICpvcGFx dWUpCi17Ci0gICAgdW5zaWduZWQgbG9uZyBzaXplOwotICAgIHN0cnVjdCBybGltaXQgcmxpbWl0 X2FzOwotCi0gICAgbWFwY2FjaGUgPSBnX21hbGxvYzAoc2l6ZW9mIChNYXBDYWNoZSkpOwotCi0g ICAgbWFwY2FjaGUtPnBoeXNfb2Zmc2V0X3RvX2dhZGRyID0gZjsKLSAgICBtYXBjYWNoZS0+b3Bh cXVlID0gb3BhcXVlOwotICAgIHFlbXVfbXV0ZXhfaW5pdCgmbWFwY2FjaGUtPmxvY2spOwotCi0g ICAgUVRBSUxRX0lOSVQoJm1hcGNhY2hlLT5sb2NrZWRfZW50cmllcyk7Ci0KLSAgICBpZiAoZ2V0 ZXVpZCgpID09IDApIHsKLSAgICAgICAgcmxpbWl0X2FzLnJsaW1fY3VyID0gUkxJTV9JTkZJTklU WTsKLSAgICAgICAgcmxpbWl0X2FzLnJsaW1fbWF4ID0gUkxJTV9JTkZJTklUWTsKLSAgICAgICAg bWFwY2FjaGUtPm1heF9tY2FjaGVfc2l6ZSA9IE1DQUNIRV9NQVhfU0laRTsKLSAgICB9IGVsc2Ug ewotICAgICAgICBnZXRybGltaXQoUkxJTUlUX0FTLCAmcmxpbWl0X2FzKTsKLSAgICAgICAgcmxp bWl0X2FzLnJsaW1fY3VyID0gcmxpbWl0X2FzLnJsaW1fbWF4OwotCi0gICAgICAgIGlmIChybGlt aXRfYXMucmxpbV9tYXggIT0gUkxJTV9JTkZJTklUWSkgewotICAgICAgICAgICAgZnByaW50Zihz dGRlcnIsICJXYXJuaW5nOiBRRU1VJ3MgbWF4aW11bSBzaXplIG9mIHZpcnR1YWwiCi0gICAgICAg ICAgICAgICAgICAgICIgbWVtb3J5IGlzIG5vdCBpbmZpbml0eS5cbiIpOwotICAgICAgICB9Ci0g ICAgICAgIGlmIChybGltaXRfYXMucmxpbV9tYXggPCBNQ0FDSEVfTUFYX1NJWkUgKyBOT05fTUNB Q0hFX01FTU9SWV9TSVpFKSB7Ci0gICAgICAgICAgICBtYXBjYWNoZS0+bWF4X21jYWNoZV9zaXpl ID0gcmxpbWl0X2FzLnJsaW1fbWF4IC0KLSAgICAgICAgICAgICAgICBOT05fTUNBQ0hFX01FTU9S WV9TSVpFOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbWFwY2FjaGUtPm1heF9tY2Fj aGVfc2l6ZSA9IE1DQUNIRV9NQVhfU0laRTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHNldHJs aW1pdChSTElNSVRfQVMsICZybGltaXRfYXMpOwotCi0gICAgbWFwY2FjaGUtPm5yX2J1Y2tldHMg PQotICAgICAgICAoKChtYXBjYWNoZS0+bWF4X21jYWNoZV9zaXplID4+IFhDX1BBR0VfU0hJRlQp ICsKLSAgICAgICAgICAoMVVMIDw8IChNQ0FDSEVfQlVDS0VUX1NISUZUIC0gWENfUEFHRV9TSElG VCkpIC0gMSkgPj4KLSAgICAgICAgIChNQ0FDSEVfQlVDS0VUX1NISUZUIC0gWENfUEFHRV9TSElG VCkpOwotCi0gICAgc2l6ZSA9IG1hcGNhY2hlLT5ucl9idWNrZXRzICogc2l6ZW9mIChNYXBDYWNo ZUVudHJ5KTsKLSAgICBzaXplID0gKHNpemUgKyBYQ19QQUdFX1NJWkUgLSAxKSAmIH4oWENfUEFH RV9TSVpFIC0gMSk7Ci0gICAgRFBSSU5URigiJXMsIG5yX2J1Y2tldHMgPSAlbHggc2l6ZSAlbHVc biIsIF9fZnVuY19fLAotICAgICAgICAgICAgbWFwY2FjaGUtPm5yX2J1Y2tldHMsIHNpemUpOwot ICAgIG1hcGNhY2hlLT5lbnRyeSA9IGdfbWFsbG9jMChzaXplKTsKLX0KLQotc3RhdGljIHZvaWQg eGVuX3JlbWFwX2J1Y2tldChNYXBDYWNoZUVudHJ5ICplbnRyeSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaHdhZGRyIHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3 YWRkciBhZGRyZXNzX2luZGV4KQotewotICAgIHVpbnQ4X3QgKnZhZGRyX2Jhc2U7Ci0gICAgeGVu X3Bmbl90ICpwZm5zOwotICAgIGludCAqZXJyOwotICAgIHVuc2lnbmVkIGludCBpOwotICAgIGh3 YWRkciBuYl9wZm4gPSBzaXplID4+IFhDX1BBR0VfU0hJRlQ7Ci0KLSAgICB0cmFjZV94ZW5fcmVt YXBfYnVja2V0KGFkZHJlc3NfaW5kZXgpOwotCi0gICAgcGZucyA9IGdfbWFsbG9jMChuYl9wZm4g KiBzaXplb2YgKHhlbl9wZm5fdCkpOwotICAgIGVyciA9IGdfbWFsbG9jMChuYl9wZm4gKiBzaXpl b2YgKGludCkpOwotCi0gICAgaWYgKGVudHJ5LT52YWRkcl9iYXNlICE9IE5VTEwpIHsKLSAgICAg ICAgcmFtX2Jsb2NrX25vdGlmeV9yZW1vdmUoZW50cnktPnZhZGRyX2Jhc2UsIGVudHJ5LT5zaXpl KTsKLSAgICAgICAgaWYgKG11bm1hcChlbnRyeS0+dmFkZHJfYmFzZSwgZW50cnktPnNpemUpICE9 IDApIHsKLSAgICAgICAgICAgIHBlcnJvcigidW5tYXAgZmFpbHMiKTsKLSAgICAgICAgICAgIGV4 aXQoLTEpOwotICAgICAgICB9Ci0gICAgfQotICAgIGdfZnJlZShlbnRyeS0+dmFsaWRfbWFwcGlu Zyk7Ci0gICAgZW50cnktPnZhbGlkX21hcHBpbmcgPSBOVUxMOwotCi0gICAgZm9yIChpID0gMDsg aSA8IG5iX3BmbjsgaSsrKSB7Ci0gICAgICAgIHBmbnNbaV0gPSAoYWRkcmVzc19pbmRleCA8PCAo TUNBQ0hFX0JVQ0tFVF9TSElGVC1YQ19QQUdFX1NISUZUKSkgKyBpOwotICAgIH0KLQotICAgIHZh ZGRyX2Jhc2UgPSB4ZW5mb3JlaWdubWVtb3J5X21hcCh4ZW5fZm1lbSwgeGVuX2RvbWlkLCBQUk9U X1JFQUR8UFJPVF9XUklURSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bmJfcGZuLCBwZm5zLCBlcnIpOwotICAgIGlmICh2YWRkcl9iYXNlID09IE5VTEwpIHsKLSAgICAg ICAgcGVycm9yKCJ4ZW5mb3JlaWdubWVtb3J5X21hcCIpOwotICAgICAgICBleGl0KC0xKTsKLSAg ICB9Ci0KLSAgICBlbnRyeS0+dmFkZHJfYmFzZSA9IHZhZGRyX2Jhc2U7Ci0gICAgZW50cnktPnBh ZGRyX2luZGV4ID0gYWRkcmVzc19pbmRleDsKLSAgICBlbnRyeS0+c2l6ZSA9IHNpemU7Ci0gICAg ZW50cnktPnZhbGlkX21hcHBpbmcgPSAodW5zaWduZWQgbG9uZyAqKSBnX21hbGxvYzAoc2l6ZW9m KHVuc2lnbmVkIGxvbmcpICoKLSAgICAgICAgICAgIEJJVFNfVE9fTE9OR1Moc2l6ZSA+PiBYQ19Q QUdFX1NISUZUKSk7Ci0KLSAgICByYW1fYmxvY2tfbm90aWZ5X2FkZChlbnRyeS0+dmFkZHJfYmFz ZSwgZW50cnktPnNpemUpOwotICAgIGJpdG1hcF96ZXJvKGVudHJ5LT52YWxpZF9tYXBwaW5nLCBu Yl9wZm4pOwotICAgIGZvciAoaSA9IDA7IGkgPCBuYl9wZm47IGkrKykgewotICAgICAgICBpZiAo IWVycltpXSkgewotICAgICAgICAgICAgYml0bWFwX3NldChlbnRyeS0+dmFsaWRfbWFwcGluZywg aSwgMSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBnX2ZyZWUocGZucyk7Ci0gICAgZ19mcmVl KGVycik7Ci19Ci0KLXN0YXRpYyB1aW50OF90ICp4ZW5fbWFwX2NhY2hlX3VubG9ja2VkKGh3YWRk ciBwaHlzX2FkZHIsIGh3YWRkciBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdWludDhfdCBsb2NrKQotewotICAgIE1hcENhY2hlRW50cnkgKmVudHJ5LCAqcGVu dHJ5ID0gTlVMTDsKLSAgICBod2FkZHIgYWRkcmVzc19pbmRleDsKLSAgICBod2FkZHIgYWRkcmVz c19vZmZzZXQ7Ci0gICAgaHdhZGRyIGNhY2hlX3NpemUgPSBzaXplOwotICAgIGh3YWRkciB0ZXN0 X2JpdF9zaXplOwotICAgIGJvb2wgdHJhbnNsYXRlZCA9IGZhbHNlOwotCi10cnlhZ2FpbjoKLSAg ICBhZGRyZXNzX2luZGV4ICA9IHBoeXNfYWRkciA+PiBNQ0FDSEVfQlVDS0VUX1NISUZUOwotICAg IGFkZHJlc3Nfb2Zmc2V0ID0gcGh5c19hZGRyICYgKE1DQUNIRV9CVUNLRVRfU0laRSAtIDEpOwot Ci0gICAgdHJhY2VfeGVuX21hcF9jYWNoZShwaHlzX2FkZHIpOwotCi0gICAgLyogdGVzdF9iaXRf c2l6ZSBpcyBhbHdheXMgYSBtdWx0aXBsZSBvZiBYQ19QQUdFX1NJWkUgKi8KLSAgICBpZiAoc2l6 ZSkgewotICAgICAgICB0ZXN0X2JpdF9zaXplID0gc2l6ZSArIChwaHlzX2FkZHIgJiAoWENfUEFH RV9TSVpFIC0gMSkpOwotCi0gICAgICAgIGlmICh0ZXN0X2JpdF9zaXplICUgWENfUEFHRV9TSVpF KSB7Ci0gICAgICAgICAgICB0ZXN0X2JpdF9zaXplICs9IFhDX1BBR0VfU0laRSAtICh0ZXN0X2Jp dF9zaXplICUgWENfUEFHRV9TSVpFKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAg IHRlc3RfYml0X3NpemUgPSBYQ19QQUdFX1NJWkU7Ci0gICAgfQotCi0gICAgaWYgKG1hcGNhY2hl LT5sYXN0X2VudHJ5ICE9IE5VTEwgJiYKLSAgICAgICAgbWFwY2FjaGUtPmxhc3RfZW50cnktPnBh ZGRyX2luZGV4ID09IGFkZHJlc3NfaW5kZXggJiYKLSAgICAgICAgIWxvY2sgJiYgIXNpemUgJiYK LSAgICAgICAgdGVzdF9iaXRzKGFkZHJlc3Nfb2Zmc2V0ID4+IFhDX1BBR0VfU0hJRlQsCi0gICAg ICAgICAgICAgICAgICB0ZXN0X2JpdF9zaXplID4+IFhDX1BBR0VfU0hJRlQsCi0gICAgICAgICAg ICAgICAgICBtYXBjYWNoZS0+bGFzdF9lbnRyeS0+dmFsaWRfbWFwcGluZykpIHsKLSAgICAgICAg dHJhY2VfeGVuX21hcF9jYWNoZV9yZXR1cm4obWFwY2FjaGUtPmxhc3RfZW50cnktPnZhZGRyX2Jh c2UgKyBhZGRyZXNzX29mZnNldCk7Ci0gICAgICAgIHJldHVybiBtYXBjYWNoZS0+bGFzdF9lbnRy eS0+dmFkZHJfYmFzZSArIGFkZHJlc3Nfb2Zmc2V0OwotICAgIH0KLQotICAgIC8qIHNpemUgaXMg YWx3YXlzIGEgbXVsdGlwbGUgb2YgTUNBQ0hFX0JVQ0tFVF9TSVpFICovCi0gICAgaWYgKHNpemUp IHsKLSAgICAgICAgY2FjaGVfc2l6ZSA9IHNpemUgKyBhZGRyZXNzX29mZnNldDsKLSAgICAgICAg aWYgKGNhY2hlX3NpemUgJSBNQ0FDSEVfQlVDS0VUX1NJWkUpIHsKLSAgICAgICAgICAgIGNhY2hl X3NpemUgKz0gTUNBQ0hFX0JVQ0tFVF9TSVpFIC0gKGNhY2hlX3NpemUgJSBNQ0FDSEVfQlVDS0VU X1NJWkUpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY2FjaGVfc2l6ZSA9IE1D QUNIRV9CVUNLRVRfU0laRTsKLSAgICB9Ci0KLSAgICBlbnRyeSA9ICZtYXBjYWNoZS0+ZW50cnlb YWRkcmVzc19pbmRleCAlIG1hcGNhY2hlLT5ucl9idWNrZXRzXTsKLQotICAgIHdoaWxlIChlbnRy eSAmJiBlbnRyeS0+bG9jayAmJiBlbnRyeS0+dmFkZHJfYmFzZSAmJgotICAgICAgICAgICAgKGVu dHJ5LT5wYWRkcl9pbmRleCAhPSBhZGRyZXNzX2luZGV4IHx8IGVudHJ5LT5zaXplICE9IGNhY2hl X3NpemUgfHwKLSAgICAgICAgICAgICAhdGVzdF9iaXRzKGFkZHJlc3Nfb2Zmc2V0ID4+IFhDX1BB R0VfU0hJRlQsCi0gICAgICAgICAgICAgICAgIHRlc3RfYml0X3NpemUgPj4gWENfUEFHRV9TSElG VCwKLSAgICAgICAgICAgICAgICAgZW50cnktPnZhbGlkX21hcHBpbmcpKSkgewotICAgICAgICBw ZW50cnkgPSBlbnRyeTsKLSAgICAgICAgZW50cnkgPSBlbnRyeS0+bmV4dDsKLSAgICB9Ci0gICAg aWYgKCFlbnRyeSkgewotICAgICAgICBlbnRyeSA9IGdfbWFsbG9jMChzaXplb2YgKE1hcENhY2hl RW50cnkpKTsKLSAgICAgICAgcGVudHJ5LT5uZXh0ID0gZW50cnk7Ci0gICAgICAgIHhlbl9yZW1h cF9idWNrZXQoZW50cnksIGNhY2hlX3NpemUsIGFkZHJlc3NfaW5kZXgpOwotICAgIH0gZWxzZSBp ZiAoIWVudHJ5LT5sb2NrKSB7Ci0gICAgICAgIGlmICghZW50cnktPnZhZGRyX2Jhc2UgfHwgZW50 cnktPnBhZGRyX2luZGV4ICE9IGFkZHJlc3NfaW5kZXggfHwKLSAgICAgICAgICAgICAgICBlbnRy eS0+c2l6ZSAhPSBjYWNoZV9zaXplIHx8Ci0gICAgICAgICAgICAgICAgIXRlc3RfYml0cyhhZGRy ZXNzX29mZnNldCA+PiBYQ19QQUdFX1NISUZULAotICAgICAgICAgICAgICAgICAgICB0ZXN0X2Jp dF9zaXplID4+IFhDX1BBR0VfU0hJRlQsCi0gICAgICAgICAgICAgICAgICAgIGVudHJ5LT52YWxp ZF9tYXBwaW5nKSkgewotICAgICAgICAgICAgeGVuX3JlbWFwX2J1Y2tldChlbnRyeSwgY2FjaGVf c2l6ZSwgYWRkcmVzc19pbmRleCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZighdGVzdF9i aXRzKGFkZHJlc3Nfb2Zmc2V0ID4+IFhDX1BBR0VfU0hJRlQsCi0gICAgICAgICAgICAgICAgdGVz dF9iaXRfc2l6ZSA+PiBYQ19QQUdFX1NISUZULAotICAgICAgICAgICAgICAgIGVudHJ5LT52YWxp ZF9tYXBwaW5nKSkgewotICAgICAgICBtYXBjYWNoZS0+bGFzdF9lbnRyeSA9IE5VTEw7Ci0gICAg ICAgIGlmICghdHJhbnNsYXRlZCAmJiBtYXBjYWNoZS0+cGh5c19vZmZzZXRfdG9fZ2FkZHIpIHsK LSAgICAgICAgICAgIHBoeXNfYWRkciA9IG1hcGNhY2hlLT5waHlzX29mZnNldF90b19nYWRkcihw aHlzX2FkZHIsIHNpemUsIG1hcGNhY2hlLT5vcGFxdWUpOwotICAgICAgICAgICAgdHJhbnNsYXRl ZCA9IHRydWU7Ci0gICAgICAgICAgICBnb3RvIHRyeWFnYWluOwotICAgICAgICB9Ci0gICAgICAg IHRyYWNlX3hlbl9tYXBfY2FjaGVfcmV0dXJuKE5VTEwpOwotICAgICAgICByZXR1cm4gTlVMTDsK LSAgICB9Ci0KLSAgICBtYXBjYWNoZS0+bGFzdF9lbnRyeSA9IGVudHJ5OwotICAgIGlmIChsb2Nr KSB7Ci0gICAgICAgIE1hcENhY2hlUmV2ICpyZXZlbnRyeSA9IGdfbWFsbG9jMChzaXplb2YoTWFw Q2FjaGVSZXYpKTsKLSAgICAgICAgZW50cnktPmxvY2srKzsKLSAgICAgICAgcmV2ZW50cnktPnZh ZGRyX3JlcSA9IG1hcGNhY2hlLT5sYXN0X2VudHJ5LT52YWRkcl9iYXNlICsgYWRkcmVzc19vZmZz ZXQ7Ci0gICAgICAgIHJldmVudHJ5LT5wYWRkcl9pbmRleCA9IG1hcGNhY2hlLT5sYXN0X2VudHJ5 LT5wYWRkcl9pbmRleDsKLSAgICAgICAgcmV2ZW50cnktPnNpemUgPSBlbnRyeS0+c2l6ZTsKLSAg ICAgICAgUVRBSUxRX0lOU0VSVF9IRUFEKCZtYXBjYWNoZS0+bG9ja2VkX2VudHJpZXMsIHJldmVu dHJ5LCBuZXh0KTsKLSAgICB9Ci0KLSAgICB0cmFjZV94ZW5fbWFwX2NhY2hlX3JldHVybihtYXBj YWNoZS0+bGFzdF9lbnRyeS0+dmFkZHJfYmFzZSArIGFkZHJlc3Nfb2Zmc2V0KTsKLSAgICByZXR1 cm4gbWFwY2FjaGUtPmxhc3RfZW50cnktPnZhZGRyX2Jhc2UgKyBhZGRyZXNzX29mZnNldDsKLX0K LQotdWludDhfdCAqeGVuX21hcF9jYWNoZShod2FkZHIgcGh5c19hZGRyLCBod2FkZHIgc2l6ZSwK LSAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBsb2NrKQotewotICAgIHVpbnQ4X3QgKnA7 Ci0KLSAgICBtYXBjYWNoZV9sb2NrKCk7Ci0gICAgcCA9IHhlbl9tYXBfY2FjaGVfdW5sb2NrZWQo cGh5c19hZGRyLCBzaXplLCBsb2NrKTsKLSAgICBtYXBjYWNoZV91bmxvY2soKTsKLSAgICByZXR1 cm4gcDsKLX0KLQotcmFtX2FkZHJfdCB4ZW5fcmFtX2FkZHJfZnJvbV9tYXBjYWNoZSh2b2lkICpw dHIpCi17Ci0gICAgTWFwQ2FjaGVFbnRyeSAqZW50cnkgPSBOVUxMOwotICAgIE1hcENhY2hlUmV2 ICpyZXZlbnRyeTsKLSAgICBod2FkZHIgcGFkZHJfaW5kZXg7Ci0gICAgaHdhZGRyIHNpemU7Ci0g ICAgcmFtX2FkZHJfdCByYWRkcjsKLSAgICBpbnQgZm91bmQgPSAwOwotCi0gICAgbWFwY2FjaGVf bG9jaygpOwotICAgIFFUQUlMUV9GT1JFQUNIKHJldmVudHJ5LCAmbWFwY2FjaGUtPmxvY2tlZF9l bnRyaWVzLCBuZXh0KSB7Ci0gICAgICAgIGlmIChyZXZlbnRyeS0+dmFkZHJfcmVxID09IHB0cikg ewotICAgICAgICAgICAgcGFkZHJfaW5kZXggPSByZXZlbnRyeS0+cGFkZHJfaW5kZXg7Ci0gICAg ICAgICAgICBzaXplID0gcmV2ZW50cnktPnNpemU7Ci0gICAgICAgICAgICBmb3VuZCA9IDE7Ci0g ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoIWZvdW5kKSB7Ci0g ICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMsIGNvdWxkIG5vdCBmaW5kICVwXG4iLCBfX2Z1bmNf XywgcHRyKTsKLSAgICAgICAgUVRBSUxRX0ZPUkVBQ0gocmV2ZW50cnksICZtYXBjYWNoZS0+bG9j a2VkX2VudHJpZXMsIG5leHQpIHsKLSAgICAgICAgICAgIERQUklOVEYoIiAgICJUQVJHRVRfRk1U X3BseCIgLT4gJXAgaXMgcHJlc2VudFxuIiwgcmV2ZW50cnktPnBhZGRyX2luZGV4LAotICAgICAg ICAgICAgICAgICAgICByZXZlbnRyeS0+dmFkZHJfcmVxKTsKLSAgICAgICAgfQotICAgICAgICBh Ym9ydCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBlbnRyeSA9ICZtYXBjYWNo ZS0+ZW50cnlbcGFkZHJfaW5kZXggJSBtYXBjYWNoZS0+bnJfYnVja2V0c107Ci0gICAgd2hpbGUg KGVudHJ5ICYmIChlbnRyeS0+cGFkZHJfaW5kZXggIT0gcGFkZHJfaW5kZXggfHwgZW50cnktPnNp emUgIT0gc2l6ZSkpIHsKLSAgICAgICAgZW50cnkgPSBlbnRyeS0+bmV4dDsKLSAgICB9Ci0gICAg aWYgKCFlbnRyeSkgewotICAgICAgICBEUFJJTlRGKCJUcnlpbmcgdG8gZmluZCBhZGRyZXNzICVw IHRoYXQgaXMgbm90IGluIHRoZSBtYXBjYWNoZSFcbiIsIHB0cik7Ci0gICAgICAgIHJhZGRyID0g MDsKLSAgICB9IGVsc2UgewotICAgICAgICByYWRkciA9IChyZXZlbnRyeS0+cGFkZHJfaW5kZXgg PDwgTUNBQ0hFX0JVQ0tFVF9TSElGVCkgKwotICAgICAgICAgICAgICgodW5zaWduZWQgbG9uZykg cHRyIC0gKHVuc2lnbmVkIGxvbmcpIGVudHJ5LT52YWRkcl9iYXNlKTsKLSAgICB9Ci0gICAgbWFw Y2FjaGVfdW5sb2NrKCk7Ci0gICAgcmV0dXJuIHJhZGRyOwotfQotCi1zdGF0aWMgdm9pZCB4ZW5f aW52YWxpZGF0ZV9tYXBfY2FjaGVfZW50cnlfdW5sb2NrZWQodWludDhfdCAqYnVmZmVyKQotewot ICAgIE1hcENhY2hlRW50cnkgKmVudHJ5ID0gTlVMTCwgKnBlbnRyeSA9IE5VTEw7Ci0gICAgTWFw Q2FjaGVSZXYgKnJldmVudHJ5OwotICAgIGh3YWRkciBwYWRkcl9pbmRleDsKLSAgICBod2FkZHIg c2l6ZTsKLSAgICBpbnQgZm91bmQgPSAwOwotCi0gICAgUVRBSUxRX0ZPUkVBQ0gocmV2ZW50cnks ICZtYXBjYWNoZS0+bG9ja2VkX2VudHJpZXMsIG5leHQpIHsKLSAgICAgICAgaWYgKHJldmVudHJ5 LT52YWRkcl9yZXEgPT0gYnVmZmVyKSB7Ci0gICAgICAgICAgICBwYWRkcl9pbmRleCA9IHJldmVu dHJ5LT5wYWRkcl9pbmRleDsKLSAgICAgICAgICAgIHNpemUgPSByZXZlbnRyeS0+c2l6ZTsKLSAg ICAgICAgICAgIGZvdW5kID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg fQotICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgRFBSSU5URigiJXMsIGNvdWxkIG5vdCBmaW5k ICVwXG4iLCBfX2Z1bmNfXywgYnVmZmVyKTsKLSAgICAgICAgUVRBSUxRX0ZPUkVBQ0gocmV2ZW50 cnksICZtYXBjYWNoZS0+bG9ja2VkX2VudHJpZXMsIG5leHQpIHsKLSAgICAgICAgICAgIERQUklO VEYoIiAgICJUQVJHRVRfRk1UX3BseCIgLT4gJXAgaXMgcHJlc2VudFxuIiwgcmV2ZW50cnktPnBh ZGRyX2luZGV4LCByZXZlbnRyeS0+dmFkZHJfcmVxKTsKLSAgICAgICAgfQotICAgICAgICByZXR1 cm47Ci0gICAgfQotICAgIFFUQUlMUV9SRU1PVkUoJm1hcGNhY2hlLT5sb2NrZWRfZW50cmllcywg cmV2ZW50cnksIG5leHQpOwotICAgIGdfZnJlZShyZXZlbnRyeSk7Ci0KLSAgICBpZiAobWFwY2Fj aGUtPmxhc3RfZW50cnkgIT0gTlVMTCAmJgotICAgICAgICBtYXBjYWNoZS0+bGFzdF9lbnRyeS0+ cGFkZHJfaW5kZXggPT0gcGFkZHJfaW5kZXgpIHsKLSAgICAgICAgbWFwY2FjaGUtPmxhc3RfZW50 cnkgPSBOVUxMOwotICAgIH0KLQotICAgIGVudHJ5ID0gJm1hcGNhY2hlLT5lbnRyeVtwYWRkcl9p bmRleCAlIG1hcGNhY2hlLT5ucl9idWNrZXRzXTsKLSAgICB3aGlsZSAoZW50cnkgJiYgKGVudHJ5 LT5wYWRkcl9pbmRleCAhPSBwYWRkcl9pbmRleCB8fCBlbnRyeS0+c2l6ZSAhPSBzaXplKSkgewot ICAgICAgICBwZW50cnkgPSBlbnRyeTsKLSAgICAgICAgZW50cnkgPSBlbnRyeS0+bmV4dDsKLSAg ICB9Ci0gICAgaWYgKCFlbnRyeSkgewotICAgICAgICBEUFJJTlRGKCJUcnlpbmcgdG8gdW5tYXAg YWRkcmVzcyAlcCB0aGF0IGlzIG5vdCBpbiB0aGUgbWFwY2FjaGUhXG4iLCBidWZmZXIpOwotICAg ICAgICByZXR1cm47Ci0gICAgfQotICAgIGVudHJ5LT5sb2NrLS07Ci0gICAgaWYgKGVudHJ5LT5s b2NrID4gMCB8fCBwZW50cnkgPT0gTlVMTCkgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g ICAgcGVudHJ5LT5uZXh0ID0gZW50cnktPm5leHQ7Ci0gICAgcmFtX2Jsb2NrX25vdGlmeV9yZW1v dmUoZW50cnktPnZhZGRyX2Jhc2UsIGVudHJ5LT5zaXplKTsKLSAgICBpZiAobXVubWFwKGVudHJ5 LT52YWRkcl9iYXNlLCBlbnRyeS0+c2l6ZSkgIT0gMCkgewotICAgICAgICBwZXJyb3IoInVubWFw IGZhaWxzIik7Ci0gICAgICAgIGV4aXQoLTEpOwotICAgIH0KLSAgICBnX2ZyZWUoZW50cnktPnZh bGlkX21hcHBpbmcpOwotICAgIGdfZnJlZShlbnRyeSk7Ci19Ci0KLXZvaWQgeGVuX2ludmFsaWRh dGVfbWFwX2NhY2hlX2VudHJ5KHVpbnQ4X3QgKmJ1ZmZlcikKLXsKLSAgICBtYXBjYWNoZV9sb2Nr KCk7Ci0gICAgeGVuX2ludmFsaWRhdGVfbWFwX2NhY2hlX2VudHJ5X3VubG9ja2VkKGJ1ZmZlcik7 Ci0gICAgbWFwY2FjaGVfdW5sb2NrKCk7Ci19Ci0KLXZvaWQgeGVuX2ludmFsaWRhdGVfbWFwX2Nh Y2hlKHZvaWQpCi17Ci0gICAgdW5zaWduZWQgbG9uZyBpOwotICAgIE1hcENhY2hlUmV2ICpyZXZl bnRyeTsKLQotICAgIC8qIEZsdXNoIHBlbmRpbmcgQUlPIGJlZm9yZSBkZXN0cm95aW5nIHRoZSBt YXBjYWNoZSAqLwotICAgIGJkcnZfZHJhaW5fYWxsKCk7Ci0KLSAgICBtYXBjYWNoZV9sb2NrKCk7 Ci0KLSAgICBRVEFJTFFfRk9SRUFDSChyZXZlbnRyeSwgJm1hcGNhY2hlLT5sb2NrZWRfZW50cmll cywgbmV4dCkgewotICAgICAgICBEUFJJTlRGKCJUaGVyZSBzaG91bGQgYmUgbm8gbG9ja2VkIG1h cHBpbmdzIGF0IHRoaXMgdGltZSwgIgotICAgICAgICAgICAgICAgICJidXQgIlRBUkdFVF9GTVRf cGx4IiAtPiAlcCBpcyBwcmVzZW50XG4iLAotICAgICAgICAgICAgICAgIHJldmVudHJ5LT5wYWRk cl9pbmRleCwgcmV2ZW50cnktPnZhZGRyX3JlcSk7Ci0gICAgfQotCi0gICAgZm9yIChpID0gMDsg aSA8IG1hcGNhY2hlLT5ucl9idWNrZXRzOyBpKyspIHsKLSAgICAgICAgTWFwQ2FjaGVFbnRyeSAq ZW50cnkgPSAmbWFwY2FjaGUtPmVudHJ5W2ldOwotCi0gICAgICAgIGlmIChlbnRyeS0+dmFkZHJf YmFzZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAg ICBpZiAoZW50cnktPmxvY2sgPiAwKSB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg fQotCi0gICAgICAgIGlmIChtdW5tYXAoZW50cnktPnZhZGRyX2Jhc2UsIGVudHJ5LT5zaXplKSAh PSAwKSB7Ci0gICAgICAgICAgICBwZXJyb3IoInVubWFwIGZhaWxzIik7Ci0gICAgICAgICAgICBl eGl0KC0xKTsKLSAgICAgICAgfQotCi0gICAgICAgIGVudHJ5LT5wYWRkcl9pbmRleCA9IDA7Ci0g ICAgICAgIGVudHJ5LT52YWRkcl9iYXNlID0gTlVMTDsKLSAgICAgICAgZW50cnktPnNpemUgPSAw OwotICAgICAgICBnX2ZyZWUoZW50cnktPnZhbGlkX21hcHBpbmcpOwotICAgICAgICBlbnRyeS0+ dmFsaWRfbWFwcGluZyA9IE5VTEw7Ci0gICAgfQotCi0gICAgbWFwY2FjaGUtPmxhc3RfZW50cnkg PSBOVUxMOwotCi0gICAgbWFwY2FjaGVfdW5sb2NrKCk7Ci19Ci0tIAoxLjkuMQoKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5n IGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1k ZXZlbAo=